123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- //**********************************************************************
- //
- // Name: WINASPI.H
- //
- // Description: ASPI for Windows definitions ('C' Language)
- //
- //**********************************************************************
- #ifndef _WINASPI_H
- #define _WINASPI_H
- typedef BYTE *LPSRB;
- #define SENSE_LEN 14 // Default sense buffer length
- #define SRB_DIR_SCSI 0x00 // Direction determined by SCSI command
- #define SRB_DIR_IN 0x08 // Transfer from SCSI target to host
- #define SRB_DIR_OUT 0x10 // Transfer from host to SCSI targetw
- #define SRB_POSTING 0x01 // Enable ASPI posting
- #define SRB_EVENT_NOTIFY 0x40 // Enable ASPI command notification
- #define SRB_ENABLE_RESIDUAL_COUNT 0x04 //Enable reporting of residual byte count
- #define WM_ASPIPOST 0x4D42 // ASPI Post message
- #define TIMEOUT 30000 // Wait 30 seconds
- //**********************************************************************
- // %%% ASPI Command Definitions %%%
- //**********************************************************************
- #define SC_HA_INQUIRY 0x00 // Host adapter inquiry
- #define SC_GET_DEV_TYPE 0x01 // Get device type
- #define SC_EXEC_SCSI_CMD 0x02 // Execute SCSI command
- #define SC_ABORT_SRB 0x03 // Abort an SRB
- #define SC_RESET_DEV 0x04 // SCSI bus device reset
- //**********************************************************************
- // %%% SRB Status %%%
- //**********************************************************************
- #define SS_PENDING 0x00 // SRB being processed
- #define SS_COMP 0x01 // SRB completed without error
- #define SS_ABORTED 0x02 // SRB aborted
- #define SS_ABORT_FAIL 0x03 // Unable to abort SRB
- #define SS_ERR 0x04 // SRB completed with error
- #define SS_INVALID_CMD 0x80 // Invalid ASPI command
- #define SS_INVALID_HA 0x81 // Invalid host adapter number
- #define SS_NO_DEVICE 0x82 // SCSI device not installed
- #define SS_INVALID_SRB 0xE0 // Invalid parameter set in SRB
- #define SS_OLD_MANAGER 0xE1 // ASPI manager doesn't support Window
- #define SS_ILLEGAL_MODE 0xE2 // Unsupported Windows mode
- #define SS_NO_ASPI 0xE3 // No ASPI managers resident
- #define SS_FAILED_INIT 0xE4 // ASPI for windows failed init
- #define SS_ASPI_IS_BUSY 0xE5 // No resources available to execute cmd
- #define SS_BUFFER_TO_BIG 0xE6 // Buffer size to big to handle!
- //**********************************************************************
- // %%% Host Adapter Status %%%
- //**********************************************************************
- #define HASTAT_OK 0x00 // Host adapter did not detect an error
- #define HASTAT_SEL_TO 0x11 // Selection Timeout
- #define HASTAT_DO_DU 0x12 // Data overrun data underrun
- #define HASTAT_BUS_FREE 0x13 // Unexpected bus free
- #define HASTAT_PHASE_ERR 0x14 // Target bus phase sequence failure
- //**********************************************************************
- // %%% SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY %%%
- //**********************************************************************
- #pragma pack(push,ASPI_Structures,1)
- typedef BYTE TDriveMode[64];
- struct THAUnique
- {
- WORD BufferAlignmentMask;
- BYTE AdapterUniqueFlags;
- BYTE MaximumSCSITargets;
- DWORD MaximumTransferLen;
- BYTE Reserved[8];
- };
- typedef struct
- {
- 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
- THAUnique HA_Unique; // Host Adapter Unique parameters
- WORD HA_Rsvd1;
- } SRB_HAInquiry, *PSRB_HAInquiry;
- //**********************************************************************
- // %%% SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE %%%
- //**********************************************************************
- typedef struct
- {
- 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; // Reserved for alignment
- } SRB_GDEVBlock, *PSRB_GDEVBlock;
- //**********************************************************************
- // %%% SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD %%%
- //**********************************************************************
- typedef struct
- {
- 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[SENSE_LEN+2]; // Request Sense buffer
- } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
- //**********************************************************************
- // %%% SRB - ABORT AN SRB - SC_ABORT_SRB %%%
- //**********************************************************************
- typedef struct
- {
- 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
- LPSRB SRB_ToAbort; // Pointer to SRB to abort
- } SRB_Abort;
- //**********************************************************************
- // %%% SRB - BUS DEVICE RESET - SC_RESET_DEV %%%
- //**********************************************************************
- typedef struct
- {
- 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
- } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
- //**********************************************************************
- // %%% Header for TOC Reading %%%
- //**********************************************************************
- struct TTrackInfo
- {
- BYTE Reserved1;
- BYTE AdrCtrl;
- BYTE TrackNummer;
- BYTE Reserved2;
- DWORD AbsCDAdress;
- };
- struct TTOCHeader
- {
- WORD TOCDataLength;
- BYTE FirstTrack;
- BYTE LastTrack;
- TTrackInfo Info[100];
- };
- //**********************************************************************
- // %%% Structure for Read Sub-Channel %%%
- //**********************************************************************
- struct TQChannelInfo
- {
- BYTE Reserved1;
- BYTE AudioStatus;
- WORD DataLen;
- BYTE FormatCode;
- BYTE ADRCtrl;
- BYTE TrackNumber;
- BYTE IndexNumber;
- long AbsCDAdress;
- long RelTrackAdress;
- };
- //**********************************************************************
- // %%% Request Sense Data Format %%%
- //**********************************************************************
- typedef struct {
- BYTE ErrorCode; // Error Code (70H or 71H)
- BYTE SegmentNum; // Number of current segment descriptor
- BYTE SenseKey; // Sense Key(See bit definitions too)
- BYTE InfoByte0; // Information MSB
- BYTE InfoByte1; // Information MID
- BYTE InfoByte2; // Information MID
- BYTE InfoByte3; // Information LSB
- BYTE AddSenLen; // Additional Sense Length
- BYTE ComSpecInf0; // Command Specific Information MSB
- BYTE ComSpecInf1; // Command Specific Information MID
- BYTE ComSpecInf2; // Command Specific Information MID
- BYTE ComSpecInf3; // Command Specific Information LSB
- BYTE AddSenseCode; // Additional Sense Code
- BYTE AddSenQual; // Additional Sense Code Qualifier
- BYTE FieldRepUCode; // Field Replaceable Unit Code
- BYTE SenKeySpec15; // Sense Key Specific 15th byte
- BYTE SenKeySpec16; // Sense Key Specific 16th byte
- BYTE SenKeySpec17; // Sense Key Specific 17th byte
- BYTE AddSenseBytes; // Additional Sense Bytes
- } TSenseInfo;
- #pragma pack(pop,ASPI_Structures)
- #endif //_WINASPI_H
|