#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__ */