1 /*------------------------------------------------------------------------------ 2 winaspi.h 3 ------------------------------------------------------------------------------*/ 4 5 #define SS_PENDING 0x00 // SCSI request is in progress. 6 #define SS_COMP 0x01 // SCSI Request Completed Without Error 7 #define SS_ABORTED 0x02 // SCSI command has been aborted. 8 #define SS_ERR 0x04 // SCSI command has completed with an error. 9 #define SS_INVALID_SRB 0xE0 // One or more parameters in the SCSI Request Block 10 // (SRB) are set incorrectly. 11 #define SS_OLD_MANAGER 0xE1 // One or more ASPI for DOS managers are loaded which 12 // do not support ASPI for Win16. 13 #define SS_ILLEGAL_MODE 0xE2 // This ASPI manager does not support this mode of 14 // Windows. You typically see this error code when 15 // running Windows in Real Mode. 16 #define SS_NO_ASPI 0xE3 // No ASPI managers are loaded. This typically occurs 17 // when a DOS ASPI manager is not resident in memory. 18 #define SS_FAILED_INIT 0xE4 // For some reason, other than SS_OLD_MANAGER, 19 // SS_ILLEGAL_MODE or SS_NO_ASPI, ASPI for Win16 20 // could not properly initialize itself. This may be 21 // caused by a lack of system resources. 22 #define SS_ASPI_IS_BUSY 0xE5 // The ASPI manager cannot handle the request at this 23 // time. This error generally occurs if the ASPI 24 // manager is already using up all of his resources 25 // to execute other requests. Try resending the 26 // command later. 27 #define SS_BUFFER_TO_BIG 0xE6 // The ASPI manager cannot handle the given transfer 28 #define SS_INVALID_HA 0x81 // Invalid Host Adapter Number 29 #define SS_NO_DEVICE 0x82 // SCSI Device Not Installed 30 31 #define HASTAT_OK 0x00 // Host adapter did not detect an error 32 #define HASTAT_SEL_TO 0x11 // Selection time-out 33 #define HASTAT_DO_DU 0x12 // Data overrun/underrun 34 #define HASTAT_BUS_FREE 0x13 // Unexpected Bus Free 35 #define HASTAT_PHASE_ERR 0x14 // Target Bus phase sequence failure 36 37 #define STATUS_GOOD 0x00 // No target status 38 #define STATUS_CHKCOND 0x02 // Check status (sense data is in SenseArea) 39 #define STATUS_BUSY 0x08 // Specified Target/LUN is busy 40 #define STATUS_RESCONF 0x18 // Reservation conflict 41 42 #define SENSE_LEN 14 43 44 45 #define SC_HA_INQUIRY 0x00 46 #define SC_GET_DEV_TYPE 0x01 47 #define SC_EXEC_SCSI_CMD 0x02 48 #define SC_ABORT_SRB 0x03 49 #define SC_RESET_DEV 0x04 50 51 #define SRBF_POSTING 0x01 52 #define SRBF_LINKED 0x02 53 #define SRBF_NOLENCHECK 0x00 // direction ctrled by SCSI cmd 54 #define SRBF_READ 0x08 // xfer to host, length checked 55 #define SRBF_WRITE 0x10 // xfer to target, length checked 56 #define SRBF_NOXFER 0x18 // no data transfer 57 #define SRB_EVENT_NOTIFY 0x40 58 59 60 61 /* 62 typedef unsigned char BYTE; 63 typedef unsigned int WORD; 64 typedef unsigned long DWORD; 65 */ 66 67 typedef unsigned char * LPSRB; 68 69 70 typedef struct 71 { 72 BYTE SRB_Cmd; // ASPI command code = SC_HA_INQUIRY 73 BYTE SRB_Status; // ASPI command status byte 74 BYTE SRB_HaId; // ASPI host adapter number 75 BYTE SRB_Flags; // ASPI request flags 76 WORD SRB_55AASignature; // Extended signature bytes 77 WORD SRB_ExtBufferSize; // Extended buffer length 78 BYTE HA_Count; // Number of host adapters present 79 BYTE HA_SCSI_ID; // SCSI ID of host adapter 80 BYTE HA_ManagerId[16]; // String describing the manager 81 BYTE HA_Identifier[16]; // String describing the host adapter 82 BYTE HA_Unique[16]; // Host Adapter Unique parameters 83 WORD HA_ExtBuffer; // Extended buffer area 84 } SRB_HAInquiry; 85 86 typedef struct 87 { 88 BYTE SRB_Cmd; // ASPI command code = SC_GET_DEV_TYPE 89 BYTE SRB_Status; // ASPI command status byte 90 BYTE SRB_HaId; // ASPI host adapter number 91 BYTE SRB_Flags; // ASPI request flags 92 DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0 93 BYTE SRB_Target; // Target's SCSI ID 94 BYTE SRB_Lun; // Target's LUN number 95 BYTE SRB_DeviceType; // Target's peripheral device type 96 BYTE SRB_Rsvd1; // Reserved for alignment 97 } SRB_GDEVBlock; 98 99 typedef struct 100 { // Structure for 6-byte CDBs 101 BYTE SRB_Cmd; // ASPI command code = SC_EXEC_SCSI_CMD 102 BYTE SRB_Status; // ASPI command status byte 103 BYTE SRB_HaId; // ASPI host adapter number 104 BYTE SRB_Flags; // ASPI request flags 105 DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0 106 BYTE SRB_Target; // Target's SCSI ID 107 BYTE SRB_Lun; // Target's LUN number 108 WORD SRB_Rsvd1; // Reserved for Alignment 109 DWORD SRB_BufLen; // Data Allocation LengthPG 110 BYTE *SRB_BufPointer; // Data Buffer Pointer 111 BYTE SRB_SenseLen; // Sense Allocation Length 112 BYTE SRB_CDBLen; // CDB Length = 6 113 BYTE SRB_HaStat; // Host Adapter Status 114 BYTE SRB_TargStat; // Target Status 115 void (*SRB_PostProc)(); // Post routine 116 void *SRB_Rsvd2; // Reserved 117 BYTE SRB_Rsvd3[16]; // Reserved for expansion 118 BYTE CDBByte[16]; // SCSI CDB 119 BYTE SenseArea[SENSE_LEN+2]; // Request Sense buffer 120 } SRB_ExecSCSICmd6; 121 122 typedef struct 123 { // Structure for 10-byte CDBs 124 BYTE SRB_Cmd; // ASPI command code = SC_EXEC_SCSI_CMD 125 BYTE SRB_Status; // ASPI command status byte 126 BYTE SRB_HaId; // ASPI host adapter number 127 BYTE SRB_Flags; // ASPI request flags 128 DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0 129 BYTE SRB_Target; // Target's SCSI ID 130 BYTE SRB_Lun; // Target's LUN number 131 WORD SRB_Rsvd1; // Reserved, MUST = 0 132 DWORD SRB_BufLen; // Data Allocation Length 133 BYTE *SRB_BufPointer; // Data Buffer Pointer 134 BYTE SRB_SenseLen; // Sense Allocation Length 135 BYTE SRB_CDBLen; // CDB Length = 10 136 BYTE SRB_HaStat; // Host Adapter Status 137 BYTE SRB_TargStat; // Target Status 138 void (*SRB_PostProc)(); // Post routine 139 void *SRB_Rsvd2; // Reserved 140 BYTE SRB_Rsvd3[16]; // Reserved for expansion 141 BYTE CDBByte[16]; // SCSI CDB 142 BYTE SenseArea10[SENSE_LEN+2]; // Request Sense buffer 143 } SRB_ExecSCSICmd10; 144 145 typedef struct 146 { 147 BYTE SRB_Cmd; // ASPI command code = SC_EXEC_SCSI_CMD 148 BYTE SRB_Status; // ASPI command status byte 149 BYTE SRB_HaId; // ASPI host adapter number 150 BYTE SRB_Flags; // ASPI request flags 151 DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0 152 BYTE SRB_Target; // Target's SCSI ID 153 BYTE SRB_Lun; // Target's LUN number 154 WORD SRB_Rsvd1; // Reserved, MUST = 0 155 DWORD SRB_BufLen; // Data Allocation Length 156 BYTE *SRB_BufPointer; // Data Buffer Pointer 157 BYTE SRB_SenseLen; // Sense Allocation Length 158 BYTE SRB_CDBLen; // CDB Length = 10 159 BYTE SRB_HaStat; // Host Adapter Status 160 BYTE SRB_TargStat; // Target Status 161 void (*SRB_PostProc)(); // Post routine 162 void *SRB_Rsvd2; // Reserved 163 BYTE SRB_Rsvd3[16]; // Reserved for expansion 164 BYTE CDBByte[16]; // SCSI CDB 165 BYTE SenseArea12[SENSE_LEN+2]; // Request Sense buffer 166 } SRB_ExecSCSICmd12; 167 168 169 typedef struct 170 { 171 BYTE SRB_Cmd; // ASPI command code = SC_ABORT_SRB 172 BYTE SRB_Status; // ASPI command status byte 173 BYTE SRB_HaId; // ASPI host adapter number 174 BYTE SRB_Flags; // ASPI request flags 175 DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0 176 void *SRB_ToAbort; // Pointer to SRB to abort 177 } SRB_Abort; 178 179 typedef struct 180 { 181 BYTE SRB_Cmd; // ASPI command code = SC_RESET_DEV 182 BYTE SRB_Status; // ASPI command status byte 183 BYTE SRB_HaId; // ASPI host adapter number 184 BYTE SRB_Flags; // ASPI request flags 185 DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0 186 BYTE SRB_Target; // Target's SCSI ID 187 BYTE SRB_Lun; // Target's LUN number 188 BYTE SRB_ResetRsvd1[12]; // Reserved, MUST = 0 189 BYTE SRB_HaStat; // Host Adapter Status 190 BYTE SRB_TargStat; // Target Status 191 void *SRB_PostProc; // Post routine 192 void *SRB_Rsvd2; // Reserved 193 BYTE SRB_Rsvd3[32]; // Reserved 194 } SRB_BusDeviceReset; 195 196 197 typedef struct 198 { 199 BYTE res0; 200 BYTE TRACK_adr_contrl; 201 BYTE TRACK_nr; 202 BYTE res1; 203 DWORD TRACK_abs_adr; 204 } TRACK; 205 206 typedef struct 207 { 208 WORD TOC_len; 209 BYTE TOC_first; 210 BYTE TOC_last; 211 TRACK track[99]; 212 } TOC; 213 214 215 216 void ASPIPostProc6 (SRB_ExecSCSICmd6 *DoneSRB); 217 void ASPIPostProc10 (SRB_ExecSCSICmd10 *DoneSRB); 218 void ASPIPostProc12 (SRB_ExecSCSICmd12 *DoneSRB); 219 220