aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_cdda/windac/Winaspi.h
blob: 5fc78fe5aaff91282b8a02ba9b9afd10e79d02de (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
//**********************************************************************
//
// 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