00001
00002
00003 #ifndef SCSI_H
00004 #define SCSI_H
00005
00006 typedef enum {
00007 SCSI_UNINITIALIZED = -1,
00008 SCSI_READY_FOR_COMMAND = 0,
00009 SCSI_DATA_TO_HOST,
00010 SCSI_TRANSMITTING,
00011 SCSI_DATA_FROM_HOST,
00012 SCSI_SEND_STATUS,
00013 SCSI_INVALID_CBW
00014 } SCSIStageEnum;
00015
00016 typedef enum {
00017 SCSI_OK = 0,
00018 SCSI_REQUEST_ERROR = 1,
00019 SCSI_PHASE_ERROR = 2
00020 } SCSIStatusEnum;
00021
00022 typedef struct scsicdb6variant1 {
00023 u_int16 length__opcode;
00024 u_int16 flags__pageCode;
00025 u_int16 allocationLength;
00026 u_int16 control__null;
00027 } ScsiInquiryCdb;
00028
00029 typedef struct scsicdb6variant2 {
00030 u_int16 length__opcode;
00031 u_int16 flags__pageCode;
00032 u_int16 res__allocationLength;
00033 u_int16 control__null;
00034 } ScsiModeSense6Cdb;
00035
00036 typedef struct scsicdb6variant3 {
00037 u_int16 length__opcode;
00038 u_int16 flags__res;
00039 u_int16 res__allocationLength;
00040 u_int16 control__null;
00041 } ScsiRequestSenseCdb;
00042
00043 typedef struct scsicdb10variant1 {
00044 u_int16 length__opcode;
00045 u_int16 res__lbab3;
00046 u_int16 lbab2__lbab1;
00047 u_int16 lbab0__res;
00048 u_int16 wLength;
00049 u_int16 control__null;
00050 } ScsiRead10Cdb;
00051
00052 typedef struct scsicdb10variant2 {
00053 u_int16 length__opcode;
00054 u_int16 flags__lbab3;
00055 u_int16 lbab2__lbab1;
00056 u_int16 lbab0__res;
00057 u_int16 wLength;
00058 u_int16 control__null;
00059 } ScsiWrite10Cdb;
00060
00061
00063
00065 void ScsiTaskHandler(void);
00068 void RealScsiTaskHandler(void);
00069
00071 void DiskProtocolCommand(u_int16 *cmd);
00072
00074 void ScsiReset();
00075
00077 void DiskDataReceived(int length, u_int16 *datablock);
00078
00079 #define OPERATION_CODE 0
00080
00081
00082
00083 #define SCSI_INQUIRY 0x12
00084 #define SCSI_FORMAT_UNIT 0x04
00085 #define SCSI_READ_6 0x08
00086 #define SCSI_READ_10 0x28
00087 #define SCSI_READ_12 0xa8
00088 #define ATAPI_READ_FORMAT_CAPACITIES 0x23
00089 #define SCSI_READ_CAPACITY_10 0x25
00090 #define SCSI_READ_CAPACITY_16 0x9e
00091 #define SCSI_READ_CAPACITY_16_2 0x10
00092 #define SCSI_RECEIVE_DIAGNOSTIC_RESULTS 0x1c
00093 #define SCSI_REPORT_LUNS 0xA0
00094 #define SCSI_REQUEST_SENSE 0x03
00095 #define SCSI_SEND_DIAGNOSTIC 0x1d
00096 #define SCSI_TEST_UNIT_READY 0x00
00097 #define SCSI_WRITE_6 0x0a
00098 #define SCSI_WRITE_10 0x2a
00099 #define SCSI_WRITE_12 0xaa
00100 #define SCSI_MODE_SENSE_6 0x1a
00101 #define SCSI_MODE_SENSE_10 0x5a
00102 #define SCSI_SYNCHRONIZE_CACHE 0x35
00103 #define SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
00104 #define SCSI_VERIFY 0x2f
00105 #define SCSI_START_STOP_UNIT 0x1b
00106 #define SCSI_MODE_SELECT 0x15
00107
00108
00109 #define SK_NO_SENSE 0
00110 #define SK_RECOVERED_ERROR 1
00111 #define SK_NOT_READY 2
00112 #define SK_MEDIUM_ERROR 3
00113 #define SK_HARDWARE_ERROR 4
00114 #define SK_ILLEGAL_REQUEST 5
00115 #define SK_UNIT_ATTENTION 6
00116 #define SK_DATA_PROTECT 7
00117 #define SK_BLANK_CHECK 8
00118 #define SK_VENDOR_SPECIFIC 9
00119 #define SK_COPY_ABORTED 10
00120 #define SK_ABORTED_COMMAND 11
00121 #define SK_EQUAL 12
00122 #define SK_VOLUME_OVERFLOW 13
00123 #define SK_MISCOMPARE 14
00124
00125 enum SCSIStageEnum ScsiState(void);
00126
00127
00128 u_int16 ScsiOrBlock(register __i0 u_int16 *buffer, register __a0 s_int16 size);
00129
00130
00131 #endif
00132
00133