3 // $Id: aspi-win32.h,v 1.2 2001/06/25 12:52:37 bdenney Exp $
5 // This file was copied from cdrecord 1.9 under libscg/scg/aspi-win32.h.
6 // The only modification is related to use of the PACKED keyword.
9 #ifndef __ASPI_WIN32_H_
10 #define __ASPI_WIN32_H_
15 // It seems that VC++ has no PACKED keyword but Cygwin does. We can just
16 // define PACKED to be empty if it's not already defined by the system
18 #define PACKED /* empty */
21 /***************************************************************************
22 ** SCSI MISCELLANEOUS EQUATES
23 ***************************************************************************/
24 #define SENSE_LEN 14 /* Default sense buffer length */
25 #define SRB_DIR_SCSI 0x00 /* Direction determined by SCSI */
26 #define SRB_POSTING 0x01 /* Enable ASPI posting */
27 #define SRB_ENABLE_RESIDUAL_COUNT 0x04 /* Enable residual byte count */
29 #define SRB_DIR_IN 0x08 /* Transfer from SCSI target to */
31 #define SRB_DIR_OUT 0x10 /* Transfer from host to SCSI */
33 #define SRB_EVENT_NOTIFY 0x40 /* Enable ASPI event notification */
34 #define RESIDUAL_COUNT_SUPPORTED 0x02 /* Extended buffer flag */
35 #define MAX_SRB_TIMEOUT 1080001u /* 30 hour maximum timeout in sec */
36 #define DEFAULT_SRB_TIMEOUT 1080001u /* use max.timeout by default */
38 /***************************************************************************
39 ** ASPI command definitions
40 ***************************************************************************/
41 #define SC_HA_INQUIRY 0x00 /* Host adapter inquiry */
42 #define SC_GET_DEV_TYPE 0x01 /* Get device type */
43 #define SC_EXEC_SCSI_CMD 0x02 /* Execute SCSI command */
44 #define SC_ABORT_SRB 0x03 /* Abort an SRB */
45 #define SC_RESET_DEV 0x04 /* SCSI bus device reset */
46 #define SC_SET_HA_PARMS 0x05 /* Set HA parameters */
47 #define SC_GET_DISK_INFO 0x06 /* Get Disk */
48 #define SC_RESCAN_SCSI_BUS 0x07 /* Rebuild SCSI device map */
49 #define SC_GETSET_TIMEOUTS 0x08 /* Get/Set target timeouts */
52 /***************************************************************************
54 ***************************************************************************/
55 #define SS_PENDING 0x00 /* SRB being processed */
56 #define SS_COMP 0x01 /* SRB completed without error */
57 #define SS_ABORTED 0x02 /* SRB aborted */
58 #define SS_ABORT_FAIL 0x03 /* Unable to abort SRB */
59 #define SS_ERR 0x04 /* SRB completed with error */
60 #define SS_INVALID_CMD 0x80 /* Invalid ASPI command */
61 #define SS_INVALID_HA 0x81 /* Invalid host adapter number */
62 #define SS_NO_DEVICE 0x82 /* SCSI device not installed */
63 #define SS_INVALID_SRB 0xE0 /* Invalid parameter set in SRB */
64 #define SS_OLD_MANAGER 0xE1 /* ASPI manager doesn't support */
66 #define SS_BUFFER_ALIGN 0xE1 /* Buffer not aligned (replaces */
67 /* SS_OLD_MANAGER in Win32) */
68 #define SS_ILLEGAL_MODE 0xE2 /* Unsupported Windows mode */
69 #define SS_NO_ASPI 0xE3 /* No ASPI managers */
70 #define SS_FAILED_INIT 0xE4 /* ASPI for windows failed init */
71 #define SS_ASPI_IS_BUSY 0xE5 /* No resources available to */
73 #define SS_BUFFER_TO_BIG 0xE6 /* Buffer size too big to handle */
74 #define SS_BUFFER_TOO_BIG 0xE6 /* Correct spelling of 'too' */
75 #define SS_MISMATCHED_COMPONENTS 0xE7 /* The DLLs/EXEs of ASPI don't */
77 #define SS_NO_ADAPTERS 0xE8 /* No host adapters to manager */
78 #define SS_INSUFFICIENT_RESOURCES 0xE9 /* Couldn't allocate resources */
80 #define SS_ASPI_IS_SHUTDOWN 0xEA /* Call came to ASPI after */
82 #define SS_BAD_INSTALL 0xEB /* The DLL or other components */
83 /* are installed wrong */
85 /***************************************************************************
86 ** Host Adapter Status
87 ***************************************************************************/
88 #define HASTAT_OK 0x00 /* No error detected by HA */
89 #define HASTAT_SEL_TO 0x11 /* Selection Timeout */
90 #define HASTAT_DO_DU 0x12 /* Data overrun/data underrun */
91 #define HASTAT_BUS_FREE 0x13 /* Unexpected bus free */
92 #define HASTAT_PHASE_ERR 0x14 /* Target bus phase sequence */
93 #define HASTAT_TIMEOUT 0x09 /* Timed out while SRB was */
94 /* waiting to be processed */
95 #define HASTAT_COMMAND_TIMEOUT 0x0B /* Adapter timed out while */
97 #define HASTAT_MESSAGE_REJECT 0x0D /* While processing the SRB, the */
98 /* adapter received a MESSAGE */
99 #define HASTAT_BUS_RESET 0x0E /* A bus reset was detected */
100 #define HASTAT_PARITY_ERROR 0x0F /* A parity error was detected */
101 #define HASTAT_REQUEST_SENSE_FAILED 0x10 /* The adapter failed in issuing */
103 /***************************************************************************
104 ** SRB - HOST ADAPTER INQUIRIY - SC_HA_INQUIRY (0)
105 ***************************************************************************/
107 BYTE SRB_Cmd
; /* 00/000 ASPI command code == SC_HA_INQUIRY */
108 BYTE SRB_Status
; /* 01/001 ASPI command status byte */
109 BYTE SRB_HaId
; /* 02/002 ASPI host adapter number */
110 BYTE SRB_Flags
; /* 03/003 ASPI request flags */
111 DWORD SRB_Hdr_Rsvd
; /* 04/004 Reserved, must = 0 */
112 BYTE HA_Count
; /* 08/008 Number of host adapters present */
113 BYTE HA_SCSI_ID
; /* 09/009 SCSI ID of host adapter */
114 BYTE HA_ManagerId
[16]; /* 0a/010 String describing the manager */
115 BYTE HA_Identifier
[16]; /* 1a/026 String describing the host adapter */
116 BYTE HA_Unique
[16]; /* 2a/042 Host Adapter Unique parameters */
117 WORD HA_Rsvd1
; /* 3a/058 Reserved, must = 0 */
118 } PACKED SRB_HAInquiry
, *PSRB_HAInquiry
, FAR
*LPSRB_HAInquiry
;
121 /***************************************************************************
122 ** SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE (1)
123 ***************************************************************************/
126 BYTE SRB_Cmd
; /* 00/000 ASPI cmd code == SC_GET_DEV_TYPE */
127 BYTE SRB_Status
; /* 01/001 ASPI command status byte */
128 BYTE SRB_HaId
; /* 02/002 ASPI host adapter number */
129 BYTE SRB_Flags
; /* 03/003 Reserved, must = 0 */
130 DWORD SRB_Hdr_Rsvd
; /* 04/004 Reserved, must = 0 */
131 BYTE SRB_Target
; /* 08/008 Target's SCSI ID */
132 BYTE SRB_Lun
; /* 09/009 Target's LUN number */
133 BYTE SRB_DeviceType
; /* 0a/010 Target's peripheral device type */
134 BYTE SRB_Rsvd1
; /* 0b/011 Reserved, must = 0 */
135 } PACKED SRB_GDEVBlock
, *PSRB_GDEVBlock
, FAR
*LPSRB_GDEVBlock
;
138 /***************************************************************************
139 ** SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD (2)
140 ***************************************************************************/
143 BYTE SRB_Cmd
; /* 00/000 ASPI cmd code == SC_EXEC_SCSI_CMD */
144 BYTE SRB_Status
; /* 01/001 ASPI command status byte */
145 BYTE SRB_HaId
; /* 02/002 ASPI host adapter number */
146 BYTE SRB_Flags
; /* 03/003 Reserved, must = 0 */
147 DWORD SRB_Hdr_Rsvd
; /* 04/004 Reserved, must = 0 */
148 BYTE SRB_Target
; /* 08/008 Target's SCSI ID */
149 BYTE SRB_Lun
; /* 09/009 Target's LUN */
150 WORD SRB_Rsvd1
; /* 0a/010 Reserved for alignment */
151 DWORD SRB_BufLen
; /* 0c/012 Data Allocation Length */
152 BYTE FAR
*SRB_BufPointer
; /* 10/016 Data Buffer Pointer */
153 BYTE SRB_SenseLen
; /* 14/020 Sense Allocation Length */
154 BYTE SRB_CDBLen
; /* 15/021 CDB Length */
155 BYTE SRB_HaStat
; /* 16/022 Host Adapter Status */
156 BYTE SRB_TargStat
; /* 17/023 Target Status */
157 VOID FAR
*SRB_PostProc
; /* 18/024 Post routine */
158 BYTE SRB_Rsvd2
[20]; /* 1c/028 Reserved, must = 0 */
159 BYTE CDBByte
[16]; /* 30/048 SCSI CDB */
160 BYTE SenseArea
[SENSE_LEN
+2]; /* 40/064 Request Sense buffer */
161 } PACKED SRB_ExecSCSICmd
, *PSRB_ExecSCSICmd
, FAR
*LPSRB_ExecSCSICmd
;
166 BYTE SRB_Cmd
; /* 00/000 ASPI cmd code == SC_ABORT_SRB */
167 BYTE SRB_Status
; /* 01/001 ASPI command status byte */
168 BYTE SRB_HaId
; /* 02/002 ASPI host adapter number */
169 BYTE SRB_Flags
; /* 03/003 Reserved, must = 0 */
170 DWORD SRB_Hdr_Rsvd
; /* 04/004 Reserved, must = 0 */
171 void *SRB_ToAbort
; /* 08/008 Pointer to SRB to abort */
172 } PACKED SRB_Abort
, *PSRB_Abort
, FAR
*LPSRB_Abort
;
175 /***************************************************************************
176 ** SRB - BUS DEVICE RESET - SC_RESET_DEV (4)
177 ***************************************************************************/
180 BYTE SRB_Cmd
; /* 00/000 ASPI cmd code == SC_RESET_DEV */
181 BYTE SRB_Status
; /* 01/001 ASPI command status byte */
182 BYTE SRB_HaId
; /* 02/002 ASPI host adapter number */
183 DWORD SRB_Flags
; /* 04/004 Reserved */
184 BYTE SRB_Target
; /* 08/008 Target's SCSI ID */
185 BYTE SRB_Lun
; /* 09/009 Target's LUN number */
186 BYTE SRB_Rsvd1
[12]; /* 0A/010 Reserved for alignment */
187 BYTE SRB_HaStat
; /* 16/022 Host Adapter Status */
188 BYTE SRB_TargStat
; /* 17/023 Target Status */
189 VOID FAR
*SRB_PostProc
; /* 18/024 Post routine */
190 BYTE SRB_Rsvd2
[36]; /* 1C/028 Reserved, must = 0 */
191 } SRB_BusDeviceReset
, *PSRB_BusDeviceReset
, FAR
*LPSRB_BusDeviceReset
;
193 typedef struct tag_ASPI32BUFF
199 } PACKED ASPI32BUFF
, *PASPI32BUFF
, FAR
*LPASPI32BUFF
;
208 } SRB
, *PSRB
, FAR
*LPSRB
;