VLSI Solution Oy / MegaLib Documentation

scsi.h

Go to the documentation of this file.
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; //OK BIG-ENDIAN! :)
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; //OK BIG-ENDIAN :)
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; //OK BIG-ENDIAN :)
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 //SCSI COMMANDS
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 //SCSI SENSE KEYS
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 /* support */
00128 u_int16 ScsiOrBlock(register __i0 u_int16 *buffer, register __a0 s_int16 size);
00129 
00130 
00131 #endif
00132 
00133 

All software copyright 2005-2006 VLSI Solution OY. Redistribution of this software is strictly forbidden.