- Slightly reworked include files (less messy, more straightforward).
- Moved DOS ASPI functionality to msdos/dosaspi.c.
- Got rid using PROFILE to get SCSI info from wine.conf.
- Read scsi info from /proc/scsi/scsi.
- Added setting of a reasonable timeout when opening a SCSI device (5
minutes, defined in winescsi.h).
- ExecScsiCommand now ALWAYS posts, even on error (which is the correct
behavior).
diff --git a/include/wnaspi32.h b/include/wnaspi32.h
index 8945d30..c5fc1c6 100644
--- a/include/wnaspi32.h
+++ b/include/wnaspi32.h
@@ -1,17 +1,39 @@
-#ifndef __WINE_WNASPI32_H
-#define __WINE_WNASPI32_H
+#ifndef __WNASPI32_H__
+#define __WNASPI32_H__
-#include "windef.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 */
-typedef union SRB * LPSRB;
+/* 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
-#define SS_INVALID_CMD 0x80
-#define SS_INVALID_HA 0x81
-#define SS_NO_DEVICE 0x82
+/* These are defined by MS but not adaptec */
+#define SRB_DATA_SG_LIST 0x02
+#define WM_ASPIPOST 0x4D42
-typedef struct tagSRB_HaInquiry {
+
+/* 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 */
@@ -23,9 +45,23 @@
BYTE HA_Identifier[16]; /* String describing the host adapter */
BYTE HA_Unique[16]; /* Host Adapter Unique parameters */
WORD HA_Rsvd1;
-} SRB_HaInquiry WINE_PACKED;
+} WINE_PACKED;
-typedef struct tagSRB_ExecSCSICmd {
+/* 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 */
@@ -45,18 +81,20 @@
BYTE SRB_Rsvd3[16]; /* Reserved for expansion */
BYTE CDBByte[16]; /* SCSI CDB */
BYTE SenseArea[0]; /* Request sense buffer - var length */
-} SRB_ExecSCSICmd WINE_PACKED;
+} WINE_PACKED;
-typedef struct tagSRB_Abort {
+/* 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 */
- LPSRB SRB_ToAbort; /* Pointer to SRB to abort */
-} SRB_Abort WINE_PACKED;
+ VOID FAR *SRB_ToAbort; /* Pointer to SRB to abort */
+} WINE_PACKED;
-typedef struct tagSRB_BusDeviceReset {
+/* 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 */
@@ -70,35 +108,68 @@
void (*SRB_PostProc)(); /* Post routine */
void *SRB_Rsvd2; /* Reserved */
BYTE SRB_Rsvd3[32]; /* Reserved */
-} SRB_BusDeviceReset WINE_PACKED;
+} WINE_PACKED;
-typedef struct tagSRB_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;
-} SRB_GDEVBlock 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;
-typedef struct tagSRB_Common {
- BYTE SRB_Cmd;
-} SRB_Common;
+/* 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 SRB {
- SRB_Common common;
- SRB_HaInquiry inquiry;
- SRB_ExecSCSICmd cmd;
- SRB_Abort abort;
- SRB_BusDeviceReset reset;
- SRB_GDEVBlock devtype;
+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;
};
-typedef union SRB SRB;
+/* 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 /* __WINE_WNASPI32_H */
+#endif /* __WNASPI32_H__ */