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