blob: 3428ac85a63bd5368dbc5581afe5c17e1b15698d (
plain)
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
|
/*
* This file has been modified for the cdrkit suite.
*
* The behaviour and appearence of the program code below can differ to a major
* extent from the version distributed by the original author(s).
*
* For details, see Changelog file distributed with the cdrkit package. If you
* received this file from another source then ask the distributing person for
* a log of modifications.
*
*/
/* @(#)aspi-dos.h 1.2 05/05/15 J. Schilling */
#ifndef __ASPI16_H_
#define __ASPI16_H_
#define PACKED __attribute__((packed))
#define FAR
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
//*****************************************************************************
// %%% SCSI MISCELLANEOUS EQUATES %%%
//*****************************************************************************
#define SENSE_LEN 14 // Default sense buffer length
#define SRB_DIR_SCSI 0x00 // Direction determined by SCSI
#define SRB_POSTING 0x01 // Enable ASPI posting
#define SRB_ENABLE_RESIDUAL_COUNT 0x04 // Enable residual byte count reporting
#define SRB_DIR_IN 0x08 // Transfer from SCSI target to host
#define SRB_DIR_OUT 0x10 // Transfer from host to SCSI target
//*****************************************************************************
// %%% 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
#define SC_SET_HA_PARMS 0x05 // Set HA parameters
#define SC_GET_DISK_INFO 0x06 // Get Disk information
//*****************************************************************************
// %%% 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
//*****************************************************************************
// %%% 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
#define HASTAT_TIMEOUT 0x09 // Timed out while SRB was
// waiting to beprocessed.
#define HASTAT_COMMAND_TIMEOUT 0x0B // Adapter timed out processing SRB.
#define HASTAT_MESSAGE_REJECT 0x0D // While processing SRB, the
// adapter received a MESSAGE
#define HASTAT_BUS_RESET 0x0E // A bus reset was detected.
#define HASTAT_PARITY_ERROR 0x0F // A parity error was detected.
#define HASTAT_REQUEST_SENSE_FAILED 0x10 // The adapter failed in issuing
typedef struct {
BYTE Cmd; // 00/000 ASPI command code = SC_EXEC_SCSI_CMD
BYTE Status; // 01/001 ASPI command status byte
BYTE HaId; // 02/002 ASPI host adapter number
BYTE Flags; // 03/003 ASPI request flags
DWORD Hdr_Rsvd; // 04/004 Reserved, MUST = 0
union {
struct {
BYTE Count; // 08/008 Number of host adapters present
BYTE SCSI_ID; // 09/009 SCSI ID of host adapter
BYTE ManagerId[16]; // 0A/010 String describing the manager
BYTE Identifier[16]; // 1A/026 String describing the host adapter
BYTE Unique[16]; // 2A/042 Host Adapter Unique parameters
BYTE ExtBuffer[8]; // 3A/058 Extended inquiry data
} PACKED HAInquiry;
struct {
BYTE Target; // 08/008 Target's SCSI ID
BYTE Lun; // 09/009 Target's LUN number
BYTE DeviceType; // 0A/010 Target's peripheral device type
} PACKED GetDeviceType;
struct {
BYTE Target; // 08/008 Target's SCSI ID
BYTE Lun; // 09/009 Target's LUN number
DWORD BufLen; // 0A/010 Data Allocation Length
BYTE SenseLen; // 0E/014 Sense Allocation Length
BYTE FAR *BufPointer; // 0F/015 Data Buffer Pointer
DWORD Rsvd1; // 13/019 Reserved, MUST = 0
BYTE CDBLen; // 17/023 CDB Length = 6/10/12
BYTE HaStat; // 18/024 Host Adapter Status
BYTE TargStat; // 19/025 Target Status
VOID FAR *PostProc; // 1A/026 Post routine
BYTE Rsvd2[34]; // 1E/030 Reserved, MUST = 0
union {
struct {
BYTE CDBByte[6]; // 40/064 SCSI CDB
BYTE SenseArea[SENSE_LEN+2]; // 46/070 Request Sense buffer
} PACKED _6;
struct {
BYTE CDBByte[10]; // 40/064 SCSI CDB
BYTE SenseArea[SENSE_LEN+2]; // 4A/074 Request Sense buffer
} PACKED _10;
struct {
BYTE CDBByte[12]; // 40/064 SCSI CDB
BYTE SenseArea[SENSE_LEN+2]; // 4C/076 Request Sense buffer
} PACKED _12;
} PACKED CmdLen;
} PACKED ExecSCSICmd;
struct {
VOID FAR *SRBToAbort; // 08/008 Pointer to SRB to abort
} PACKED Abort;
struct {
BYTE Target; // 08/008 Target's SCSI ID
BYTE Lun; // 09/009 Target's LUN number
BYTE ResetRsvd1[14]; // 0A/010 Reserved, MUST = 0
BYTE HaStat; // 18/024 Host Adapter Status
BYTE TargStat; // 19/025 Target Status
VOID FAR *PostProc; // 1A/026 Post routine
BYTE ResetRsvd2[34]; // 1E/030 Reserved, MUST = 0
} Reset;
} PACKED Type;
} PACKED SRB;
#endif /* __ASPI16_H_ */
|