#if !defined(ASPI_H)
#define ASPI_H

#pragma pack(1)

#define SS_PENDING	0x00
#define SS_COMP		0x01
#define SS_ABORTED	0x02
#define SS_ERR		0x04
#define SS_OLD_MANAGE	0xe1
#define SS_ILLEGAL_MODE	0xe2
#define SS_NO_ASPI	0xe3
#define SS_FAILED_INIT	0xe4
#define SS_INVALID_HA	0x81
#define SS_INVALID_SRB	0xe0
#define SS_ASPI_IS_BUSY	0xe5
#define SS_BUFFER_TO_BIG	0xe6

#define SC_HA_INQUIRY		0x00
#define SC_GET_DEV_TYPE 	0x01
#define SC_EXEC_SCSI_CMD	0x02
#define SC_ABORT_SRB		0x03
#define SC_RESET_DEV		0x04

/* Host adapter status codes */
#define HASTAT_OK		0x00
#define HASTAT_SEL_TO		0x11
#define HASTAT_DO_DU		0x12
#define HASTAT_BUS_FREE		0x13
#define HASTAT_PHASE_ERR	0x14

/* Target status codes */
#define STATUS_GOOD		0x00
#define STATUS_CHKCOND		0x02
#define STATUS_BUSY		0x08
#define STATUS_RESCONF		0x18


typedef union SRB16 * LPSRB16;

struct SRB_HaInquiry16 {
  BYTE	SRB_cmd;
  BYTE	SRB_Status;
  BYTE	SRB_HaId;
  BYTE	SRB_Flags;
  WORD	SRB_55AASignature;
  WORD	SRB_ExtBufferSize;
  BYTE	HA_Count;
  BYTE	HA_SCSI_ID;
  BYTE	HA_ManagerId[16];
  BYTE	HA_Identifier[16];
  BYTE	HA_Unique[16];
  BYTE	HA_ExtBuffer[4];
} WINE_PACKED;

typedef struct SRB_HaInquiry16 SRB_HaInquiry16;

struct SRB_ExecSCSICmd16 {
  BYTE        SRB_Cmd;                // ASPI command code		(W)
  BYTE        SRB_Status;             // ASPI command status byte	(R)
  BYTE        SRB_HaId;               // ASPI host adapter number	(W)
  BYTE        SRB_Flags;              // ASPI request flags		(W)
  DWORD       SRB_Hdr_Rsvd;           // Reserved, MUST = 0		(-)
  BYTE        SRB_Target;             // Target's SCSI ID		(W)
  BYTE        SRB_Lun;                // Target's LUN number		(W)
  DWORD       SRB_BufLen;             // Data Allocation LengthPG	(W/R)
  BYTE        SRB_SenseLen;           // Sense Allocation Length	(W)
  SEGPTR      SRB_BufPointer;         // Data Buffer Pointer		(W)
  DWORD       SRB_Rsvd1;              // Reserved, MUST = 0		(-/W)
  BYTE        SRB_CDBLen;             // CDB Length = 6			(W)
  BYTE        SRB_HaStat;             // Host Adapter Status		(R)
  BYTE        SRB_TargStat;           // Target Status			(R)
  FARPROC16   SRB_PostProc;	      // Post routine			(W)
  BYTE        SRB_Rsvd2[34];          // Reserved, MUST = 0
  BYTE		CDBByte[0];	      // SCSI CBD - variable length	(W)
  /* variable example for 6 byte cbd
   * BYTE        CDBByte[6];             // SCSI CDB			(W)
   * BYTE        SenseArea6[SENSE_LEN];  // Request Sense buffer 	(R)
   */
} WINE_PACKED ;

typedef struct SRB_ExecSCSICmd16 SRB_ExecSCSICmd16;

struct SRB_ExecSCSICmd32 {
  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
};

typedef struct SRB_ExecSCSICmd32 SRB_ExecSCSICmd32;

struct SRB_Abort16 {
  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;          // ASPI request flags
  DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  LPSRB16     SRB_ToAbort;        // Pointer to SRB to abort
} WINE_PACKED;

typedef struct SRB_Abort16 SRB_Abort16;

struct SRB_BusDeviceReset16 {
  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;          // ASPI request flags
  DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  BYTE        SRB_Target;         // Target's SCSI ID
  BYTE        SRB_Lun;            // Target's LUN number
  BYTE        SRB_ResetRsvd1[14]; // Reserved, MUST = 0
  BYTE        SRB_HaStat;         // Host Adapter Status
  BYTE        SRB_TargStat;       // Target Status
  SEGPTR      SRB_PostProc;           // Post routine
  BYTE        SRB_ResetRsvd2[34]; // Reserved, MUST = 0
} WINE_PACKED;

typedef struct SRB_BusDeviceReset16 SRB_BusDeviceReset16;

struct SRB_GDEVBlock16 {
  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;          // ASPI request flags
  DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  BYTE        SRB_Target;         // Target's SCSI ID
  BYTE        SRB_Lun;            // Target's LUN number
  BYTE        SRB_DeviceType;     // Target's peripheral device type
} WINE_PACKED;

typedef struct SRB_GDEVBlock16 SRB_GDEVBlock16;



struct SRB_Common16 {
  BYTE	SRB_cmd;
};


typedef struct SRB_Common16 SRB_Common16;


union SRB16 {
  SRB_Common16		common;
  SRB_HaInquiry16	inquiry;
  SRB_ExecSCSICmd16	cmd;
  SRB_Abort16		abort;
  SRB_BusDeviceReset16	reset;
  SRB_GDEVBlock16	devtype;
};

typedef union SRB16 SRB16;




#endif
