blob: c5fc1c6a6c7409aea0e6e851870c6d62e4d5b5ba [file] [log] [blame]
#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__ */