| #ifndef __WNASPI32_H__ |
| #define __WNASPI32_H__ |
| |
| #define FAR |
| /* This file should be 100% source compatible according to MSes docs and |
| * Adaptecs docs */ |
| /* Include base aspi defs */ |
| #include "aspi.h" |
| |
| #include "pshpack1.h" |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* #ifdef __cplusplus */ |
| |
| /* Additional definitions */ |
| /* SCSI Miscellaneous Stuff */ |
| #define SRB_EVENT_NOTIFY 0x40 |
| #define RESIDUAL_COUNT_SUPPORTED 0x02 |
| #define MAX_SRB_TIMEOUT 1080001u |
| #define DEFAULT_SRB_TIMEOUT 1080001u |
| |
| /* These are defined by MS but not adaptec */ |
| #define SRB_DATA_SG_LIST 0x02 |
| #define WM_ASPIPOST 0x4D42 |
| |
| |
| /* ASPI Command Definitions */ |
| #define SC_RESCAN_SCSI_BUS 0x07 |
| #define SC_GETSET_TIMEOUTS 0x08 |
| |
| /* SRB Status.. MS defined */ |
| #define SS_SECURITY_VIOLATION 0xE2 // Replaces SS_INVALID_MODE |
| /*** END DEFS */ |
| |
| /* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */ |
| struct tagSRB32_HaInquiry { |
| BYTE SRB_Cmd; /* ASPI command code = SC_HA_INQUIRY */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* ASPI request flags */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ |
| BYTE HA_Count; /* Number of host adapters present */ |
| BYTE HA_SCSI_ID; /* SCSI ID of host adapter */ |
| BYTE HA_ManagerId[16]; /* String describing the manager */ |
| BYTE HA_Identifier[16]; /* String describing the host adapter */ |
| BYTE HA_Unique[16]; /* Host Adapter Unique parameters */ |
| WORD HA_Rsvd1; |
| } WINE_PACKED; |
| |
| /* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */ |
| struct tagSRB32_GDEVBlock { |
| BYTE SRB_Cmd; /* ASPI command code = SC_GET_DEV_TYPE */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* Reserved */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved */ |
| BYTE SRB_Target; /* Target's SCSI ID */ |
| BYTE SRB_Lun; /* Target's LUN number */ |
| BYTE SRB_DeviceType; /* Target's peripheral device type */ |
| BYTE SRB_Rsvd1; |
| } WINE_PACKED; |
| |
| /* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */ |
| struct tagSRB32_ExecSCSICmd { |
| BYTE SRB_Cmd; /* ASPI command code = SC_EXEC_SCSI_CMD */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* ASPI request flags */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved */ |
| BYTE SRB_Target; /* Target's SCSI ID */ |
| BYTE SRB_Lun; /* Target's LUN number */ |
| WORD SRB_Rsvd1; /* Reserved for Alignment */ |
| DWORD SRB_BufLen; /* Data Allocation Length */ |
| BYTE *SRB_BufPointer; /* Data Buffer Point */ |
| BYTE SRB_SenseLen; /* Sense Allocation Length */ |
| BYTE SRB_CDBLen; /* CDB Length */ |
| BYTE SRB_HaStat; /* Host Adapter Status */ |
| BYTE SRB_TargStat; /* Target Status */ |
| void (*SRB_PostProc)(); /* Post routine */ |
| void *SRB_Rsvd2; /* Reserved */ |
| BYTE SRB_Rsvd3[16]; /* Reserved for expansion */ |
| BYTE CDBByte[16]; /* SCSI CDB */ |
| BYTE SenseArea[0]; /* Request sense buffer - var length */ |
| } WINE_PACKED; |
| |
| /* SRB - ABORT AN ARB - SC_ABORT_SRB */ |
| struct tagSRB32_Abort { |
| BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* Reserved */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ |
| VOID FAR *SRB_ToAbort; /* Pointer to SRB to abort */ |
| } WINE_PACKED; |
| |
| /* SRB - BUS DEVICE RESET - SC_RESET_DEV */ |
| struct tagSRB32_BusDeviceReset { |
| BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* Reserved */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved */ |
| BYTE SRB_Target; /* Target's SCSI ID */ |
| BYTE SRB_Lun; /* Target's LUN number */ |
| BYTE SRB_Rsvd1[12]; /* Reserved for Alignment */ |
| BYTE SRB_HaStat; /* Host Adapter Status */ |
| BYTE SRB_TargStat; /* Target Status */ |
| void (*SRB_PostProc)(); /* Post routine */ |
| void *SRB_Rsvd2; /* Reserved */ |
| BYTE SRB_Rsvd3[32]; /* Reserved */ |
| } WINE_PACKED; |
| |
| /* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */ |
| struct tagSRB32_GetDiskInfo { |
| BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* Reserved */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved */ |
| BYTE SRB_Target; /* Target's SCSI ID */ |
| BYTE SRB_Lun; /* Target's LUN number */ |
| BYTE SRB_DriveFlags; /* Driver flags */ |
| BYTE SRB_Int13HDriveInfo; /* Host Adapter Status */ |
| BYTE SRB_Heads; /* Preferred number of heads trans */ |
| BYTE SRB_Sectors; /* Preferred number of sectors trans */ |
| BYTE SRB_Rsvd1[10]; /* Reserved */ |
| } WINE_PACKED; |
| |
| /* SRB header */ |
| struct tagSRB32_Header { |
| BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ |
| BYTE SRB_Status; /* ASPI command status byte */ |
| BYTE SRB_HaId; /* ASPI host adapter number */ |
| BYTE SRB_Flags; /* Reserved */ |
| DWORD SRB_Hdr_Rsvd; /* Reserved */ |
| } WINE_PACKED; |
| |
| union tagSRB32 { |
| struct tagSRB32_Header common; |
| struct tagSRB32_HaInquiry inquiry; |
| struct tagSRB32_ExecSCSICmd cmd; |
| struct tagSRB32_Abort abort; |
| struct tagSRB32_BusDeviceReset reset; |
| struct tagSRB32_GDEVBlock devtype; |
| }; |
| |
| /* Typedefs */ |
| #define typedefSRB(name) \ |
| typedef struct tagSRB32_##name \ |
| SRB_##name##, *PSRB_##name |
| typedefSRB(HaInquiry); |
| typedefSRB(GDEVBlock); |
| typedefSRB(ExecSCSICmd); |
| typedefSRB(Abort); |
| typedefSRB(BusDeviceReset); |
| typedefSRB(GetDiskInfo); |
| typedefSRB(Header); |
| #undef typedefSRB |
| |
| typedef union tagSRB32 SRB, *PSRB, *LPSRB; |
| |
| /* Prototypes */ |
| extern DWORD __cdecl |
| SendASPI32Command (PSRB); |
| extern DWORD WINAPI |
| GetASPI32SupportInfo (void); |
| extern DWORD WINAPI |
| GetASPI32DLLVersion(void); |
| |
| #ifdef __cplusplus |
| } |
| #endif /* #ifdef __cplusplus */ |
| #include "poppack.h" |
| |
| #endif /* __WNASPI32_H__ */ |