wnaspi32.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /*
  2. * Copyright (C) the Wine project
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  17. */
  18. #ifndef __WNASPI32_H__
  19. #define __WNASPI32_H__
  20. /* This file should be 100% source compatible according to MSes docs and
  21. * Adaptecs docs */
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif /* #ifdef __cplusplus */
  25. /* SCSI Miscellaneous Stuff */
  26. #define SENSE_LEN 14
  27. #define SRB_DIR_SCSI 0x00
  28. #define SRB_POSTING 0x01
  29. #define SRB_ENABLE_RESIDUAL_COUNT 0x04
  30. #define SRB_DIR_IN 0x08
  31. #define SRB_DIR_OUT 0x10
  32. /* ASPI Command Definitions */
  33. #define SC_HA_INQUIRY 0x00
  34. #define SC_GET_DEV_TYPE 0x01
  35. #define SC_EXEC_SCSI_CMD 0x02
  36. #define SC_ABORT_SRB 0x03
  37. #define SC_RESET_DEV 0x04
  38. #define SC_SET_HA_PARMS 0x05
  39. #define SC_GET_DISK_INFO 0x06
  40. /* SRB status codes */
  41. #define SS_PENDING 0x00
  42. #define SS_COMP 0x01
  43. #define SS_ABORTED 0x02
  44. #define SS_ABORT_FAIL 0x03
  45. #define SS_ERR 0x04
  46. #define SS_INVALID_CMD 0x80
  47. #define SS_INVALID_HA 0x81
  48. #define SS_NO_DEVICE 0x82
  49. #define SS_INVALID_SRB 0xE0
  50. #define SS_OLD_MANAGER 0xE1
  51. #define SS_BUFFER_ALIGN 0xE1 /* Win32 */
  52. #define SS_ILLEGAL_MODE 0xE2
  53. #define SS_NO_ASPI 0xE3
  54. #define SS_FAILED_INIT 0xE4
  55. #define SS_ASPI_IS_BUSY 0xE5
  56. #define SS_BUFFER_TO_BIG 0xE6
  57. #define SS_MISMATCHED_COMPONENTS 0xE7 /* DLLs/EXE version mismatch */
  58. #define SS_NO_ADAPTERS 0xE8
  59. #define SS_INSUFFICIENT_RESOURCES 0xE9
  60. #define SS_ASPI_IS_SHUTDOWN 0xEA
  61. #define SS_BAD_INSTALL 0xEB
  62. /* Host status codes */
  63. #define HASTAT_OK 0x00
  64. #define HASTAT_SEL_TO 0x11
  65. #define HASTAT_DO_DU 0x12
  66. #define HASTAT_BUS_FREE 0x13
  67. #define HASTAT_PHASE_ERR 0x14
  68. #define HASTAT_TIMEOUT 0x09
  69. #define HASTAT_COMMAND_TIMEOUT 0x0B
  70. #define HASTAT_MESSAGE_REJECT 0x0D
  71. #define HASTAT_BUS_RESET 0x0E
  72. #define HASTAT_PARITY_ERROR 0x0F
  73. #define HASTAT_REQUEST_SENSE_FAILED 0x10
  74. /* Additional definitions */
  75. /* SCSI Miscellaneous Stuff */
  76. #define SRB_EVENT_NOTIFY 0x40
  77. #define RESIDUAL_COUNT_SUPPORTED 0x02
  78. #define MAX_SRB_TIMEOUT 1080001u
  79. #define DEFAULT_SRB_TIMEOUT 1080001u
  80. /* These are defined by MS but not adaptec */
  81. #define SRB_DATA_SG_LIST 0x02
  82. #define WM_ASPIPOST 0x4D42
  83. /* ASPI Command Definitions */
  84. #define SC_RESCAN_SCSI_BUS 0x07
  85. #define SC_GETSET_TIMEOUTS 0x08
  86. /* SRB Status.. MS defined */
  87. #define SS_SECURITY_VIOLATION 0xE2 /* Replaces SS_INVALID_MODE */
  88. /*** END DEFS */
  89. #include <pshpack1.h>
  90. /* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */
  91. typedef struct tagSRB32_HaInquiry {
  92. BYTE SRB_Cmd; /* 00 ASPI command code = SC_HA_INQUIRY */
  93. BYTE SRB_Status; /* 01 ASPI command status byte */
  94. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  95. BYTE SRB_Flags; /* 03 ASPI request flags */
  96. DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */
  97. BYTE HA_Count; /* 08 Number of host adapters present */
  98. BYTE HA_SCSI_ID; /* 09 SCSI ID of host adapter */
  99. BYTE HA_ManagerId[16]; /* 0A String describing the manager */
  100. BYTE HA_Identifier[16]; /* 1A String describing the host adapter */
  101. BYTE HA_Unique[16]; /* 2A Host Adapter Unique parameters */
  102. WORD HA_Rsvd1;
  103. } SRB_HaInquiry, *PSRB_HaInquiry;
  104. /* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */
  105. typedef struct tagSRB32_GDEVBlock {
  106. BYTE SRB_Cmd; /* 00 ASPI command code = SC_GET_DEV_TYPE */
  107. BYTE SRB_Status; /* 01 ASPI command status byte */
  108. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  109. BYTE SRB_Flags; /* 03 Reserved */
  110. DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
  111. BYTE SRB_Target; /* 08 Target's SCSI ID */
  112. BYTE SRB_Lun; /* 09 Target's LUN number */
  113. BYTE SRB_DeviceType; /* 0A Target's peripheral device type */
  114. BYTE SRB_Rsvd1;
  115. } SRB_GDEVBlock, *PSRB_GDEVBlock;
  116. /* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */
  117. typedef struct tagSRB32_ExecSCSICmd {
  118. BYTE SRB_Cmd; /* 00 ASPI command code = SC_EXEC_SCSI_CMD */
  119. BYTE SRB_Status; /* 01 ASPI command status byte */
  120. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  121. BYTE SRB_Flags; /* 03 ASPI request flags */
  122. DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
  123. BYTE SRB_Target; /* 08 Target's SCSI ID */
  124. BYTE SRB_Lun; /* 09 Target's LUN number */
  125. WORD SRB_Rsvd1; /* 0A Reserved for Alignment */
  126. DWORD SRB_BufLen; /* 0C Data Allocation Length */
  127. BYTE *SRB_BufPointer; /* 10 Data Buffer Point */
  128. BYTE SRB_SenseLen; /* 14 Sense Allocation Length */
  129. BYTE SRB_CDBLen; /* 15 CDB Length */
  130. BYTE SRB_HaStat; /* 16 Host Adapter Status */
  131. BYTE SRB_TargStat; /* 17 Target Status */
  132. void (*SRB_PostProc)(); /* 18 Post routine */
  133. void *SRB_Rsvd2; /* 1C Reserved */
  134. BYTE SRB_Rsvd3[16]; /* 20 Reserved for expansion */
  135. BYTE CDBByte[16]; /* 30 SCSI CDB */
  136. BYTE SenseArea[SENSE_LEN+2]; /* 40 Request sense buffer - var length */
  137. } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
  138. /* SRB - ABORT AN ARB - SC_ABORT_SRB */
  139. typedef struct tagSRB32_Abort {
  140. BYTE SRB_Cmd; /* 00 ASPI command code = SC_ABORT_SRB */
  141. BYTE SRB_Status; /* 01 ASPI command status byte */
  142. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  143. BYTE SRB_Flags; /* 03 Reserved */
  144. DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */
  145. VOID *SRB_ToAbort; /* 08 Pointer to SRB to abort */
  146. } SRB_Abort, *PSRB_Abort;
  147. /* SRB - BUS DEVICE RESET - SC_RESET_DEV */
  148. typedef struct tagSRB32_BusDeviceReset {
  149. BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
  150. BYTE SRB_Status; /* 01 ASPI command status byte */
  151. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  152. BYTE SRB_Flags; /* 03 Reserved */
  153. DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
  154. BYTE SRB_Target; /* 08 Target's SCSI ID */
  155. BYTE SRB_Lun; /* 09 Target's LUN number */
  156. BYTE SRB_Rsvd1[12]; /* 0A Reserved for Alignment */
  157. BYTE SRB_HaStat; /* 16 Host Adapter Status */
  158. BYTE SRB_TargStat; /* 17 Target Status */
  159. void (*SRB_PostProc)(); /* 18 Post routine */
  160. void *SRB_Rsvd2; /* 1c Reserved */
  161. BYTE SRB_Rsvd3[32]; /* 20 Reserved */
  162. } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
  163. /* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */
  164. typedef struct tagSRB32_GetDiskInfo {
  165. BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
  166. BYTE SRB_Status; /* 01 ASPI command status byte */
  167. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  168. BYTE SRB_Flags; /* 03 Reserved */
  169. DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
  170. BYTE SRB_Target; /* 08 Target's SCSI ID */
  171. BYTE SRB_Lun; /* 09 Target's LUN number */
  172. BYTE SRB_DriveFlags; /* 0A Driver flags */
  173. BYTE SRB_Int13HDriveInfo; /* 0B Host Adapter Status */
  174. BYTE SRB_Heads; /* 0C Preferred number of heads trans */
  175. BYTE SRB_Sectors; /* 0D Preferred number of sectors trans */
  176. BYTE SRB_Rsvd1[10]; /* 0E Reserved */
  177. } SRB_GetDiskInfo, *PSRB_GetDiskInfo;
  178. /* SRB header */
  179. typedef struct tagSRB32_Header {
  180. BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
  181. BYTE SRB_Status; /* 01 ASPI command status byte */
  182. BYTE SRB_HaId; /* 02 ASPI host adapter number */
  183. BYTE SRB_Flags; /* 03 Reserved */
  184. DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
  185. } SRB_Header, *PSRB_Header;
  186. typedef union tagSRB32 {
  187. SRB_Header common;
  188. SRB_HaInquiry inquiry;
  189. SRB_ExecSCSICmd cmd;
  190. SRB_Abort abort;
  191. SRB_BusDeviceReset reset;
  192. SRB_GDEVBlock devtype;
  193. SRB_GetDiskInfo diskinfo;
  194. } SRB, *PSRB, *LPSRB;
  195. typedef struct tagASPI32BUFF {
  196. LPBYTE AB_BufPointer; /* pointer to buffer */
  197. DWORD AB_BufLen; /* length of buffer */
  198. DWORD AB_ZeroFill; /* set to 1 if zeroing */
  199. DWORD AB_Reserved; /* 0 */
  200. } ASPI32BUFF, *PASPI32BUFF;
  201. #include <poppack.h>
  202. /* Prototypes */
  203. extern DWORD __cdecl SendASPI32Command (PSRB);
  204. extern DWORD __cdecl GetASPI32SupportInfo (void);
  205. extern DWORD __cdecl GetASPI32DLLVersion(void);
  206. extern BOOL __cdecl GetASPI32Buffer(PASPI32BUFF pab);
  207. #ifdef __cplusplus
  208. }
  209. #endif /* #ifdef __cplusplus */
  210. #endif /* __WNASPI32_H__ */