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