cciss: remove C99-style comments
[deliverable/linux.git] / drivers / block / cciss_cmd.h
CommitLineData
1da177e4
LT
1#ifndef CCISS_CMD_H
2#define CCISS_CMD_H
b028461d 3/* DEFINES */
1da177e4
LT
4#define CISS_VERSION "1.00"
5
b028461d 6/* general boundary definitions */
7#define SENSEINFOBYTES 32 /* note that this value may vary
8 between host implementations */
5c07a311
DB
9#define MAXSGENTRIES 32
10#define CCISS_SG_CHAIN 0x80000000
1da177e4
LT
11#define MAXREPLYQS 256
12
b028461d 13/* Command Status value */
1da177e4
LT
14#define CMD_SUCCESS 0x0000
15#define CMD_TARGET_STATUS 0x0001
16#define CMD_DATA_UNDERRUN 0x0002
17#define CMD_DATA_OVERRUN 0x0003
18#define CMD_INVALID 0x0004
19#define CMD_PROTOCOL_ERR 0x0005
20#define CMD_HARDWARE_ERR 0x0006
21#define CMD_CONNECTION_LOST 0x0007
22#define CMD_ABORTED 0x0008
23#define CMD_ABORT_FAILED 0x0009
24#define CMD_UNSOLICITED_ABORT 0x000A
25#define CMD_TIMEOUT 0x000B
26#define CMD_UNABORTABLE 0x000C
27
0a9279cc
MM
28/* Unit Attentions ASC's as defined for the MSA2012sa */
29#define POWER_OR_RESET 0x29
30#define STATE_CHANGED 0x2a
31#define UNIT_ATTENTION_CLEARED 0x2f
32#define LUN_FAILED 0x3e
33#define REPORT_LUNS_CHANGED 0x3f
34
35/* Unit Attentions ASCQ's as defined for the MSA2012sa */
36
37 /* These ASCQ's defined for ASC = POWER_OR_RESET */
38#define POWER_ON_RESET 0x00
39#define POWER_ON_REBOOT 0x01
40#define SCSI_BUS_RESET 0x02
41#define MSA_TARGET_RESET 0x03
42#define CONTROLLER_FAILOVER 0x04
43#define TRANSCEIVER_SE 0x05
44#define TRANSCEIVER_LVD 0x06
45
46 /* These ASCQ's defined for ASC = STATE_CHANGED */
47#define RESERVATION_PREEMPTED 0x03
48#define ASYM_ACCESS_CHANGED 0x06
49#define LUN_CAPACITY_CHANGED 0x09
50
b028461d 51/* transfer direction */
1da177e4
LT
52#define XFER_NONE 0x00
53#define XFER_WRITE 0x01
54#define XFER_READ 0x02
55#define XFER_RSVD 0x03
56
b028461d 57/* task attribute */
1da177e4
LT
58#define ATTR_UNTAGGED 0x00
59#define ATTR_SIMPLE 0x04
60#define ATTR_HEADOFQUEUE 0x05
61#define ATTR_ORDERED 0x06
62#define ATTR_ACA 0x07
63
b028461d 64/* cdb type */
1da177e4
LT
65#define TYPE_CMD 0x00
66#define TYPE_MSG 0x01
67
b028461d 68/* config space register offsets */
1da177e4
LT
69#define CFG_VENDORID 0x00
70#define CFG_DEVICEID 0x02
71#define CFG_I2OBAR 0x10
72#define CFG_MEM1BAR 0x14
73
b028461d 74/* i2o space register offsets */
1da177e4
LT
75#define I2O_IBDB_SET 0x20
76#define I2O_IBDB_CLEAR 0x70
77#define I2O_INT_STATUS 0x30
78#define I2O_INT_MASK 0x34
79#define I2O_IBPOST_Q 0x40
80#define I2O_OBPOST_Q 0x44
f92e2f5f 81#define I2O_DMA1_CFG 0x214
1da177e4 82
b028461d 83/* Configuration Table */
1da177e4
LT
84#define CFGTBL_ChangeReq 0x00000001l
85#define CFGTBL_AccCmds 0x00000001l
86
87#define CFGTBL_Trans_Simple 0x00000002l
88
89#define CFGTBL_BusType_Ultra2 0x00000001l
90#define CFGTBL_BusType_Ultra3 0x00000002l
91#define CFGTBL_BusType_Fibre1G 0x00000100l
92#define CFGTBL_BusType_Fibre2G 0x00000200l
93typedef struct _vals32
94{
95 __u32 lower;
96 __u32 upper;
97} vals32;
98
99typedef union _u64bit
100{
101 vals32 val32;
102 __u64 val;
103} u64bit;
104
b028461d 105/* Type defs used in the following structs */
1da177e4
LT
106#define BYTE __u8
107#define WORD __u16
108#define HWORD __u16
109#define DWORD __u32
110#define QWORD vals32
111
b028461d 112/* STRUCTURES */
799202cb 113#define CISS_MAX_LUN 1024
1da177e4 114#define CISS_MAX_PHYS_LUN 1024
b028461d 115/* SCSI-3 Cmmands */
1da177e4
LT
116
117#pragma pack(1)
118
119#define CISS_INQUIRY 0x12
b028461d 120/* Date returned */
1da177e4
LT
121typedef struct _InquiryData_struct
122{
123 BYTE data_byte[36];
124} InquiryData_struct;
125
126#define CISS_REPORT_LOG 0xc2 /* Report Logical LUNs */
127#define CISS_REPORT_PHYS 0xc3 /* Report Physical LUNs */
b028461d 128/* Data returned */
1da177e4
LT
129typedef struct _ReportLUNdata_struct
130{
131 BYTE LUNListLength[4];
132 DWORD reserved;
133 BYTE LUN[CISS_MAX_LUN][8];
134} ReportLunData_struct;
135
136#define CCISS_READ_CAPACITY 0x25 /* Read Capacity */
137typedef struct _ReadCapdata_struct
138{
b028461d 139 BYTE total_size[4]; /* Total size in blocks */
140 BYTE block_size[4]; /* Size of blocks in bytes */
1da177e4
LT
141} ReadCapdata_struct;
142
00988a35
MMOD
143#define CCISS_READ_CAPACITY_16 0x9e /* Read Capacity 16 */
144
145/* service action to differentiate a 16 byte read capacity from
146 other commands that use the 0x9e SCSI op code */
147
148#define CCISS_READ_CAPACITY_16_SERVICE_ACT 0x10
149
150typedef struct _ReadCapdata_struct_16
151{
152 BYTE total_size[8]; /* Total size in blocks */
153 BYTE block_size[4]; /* Size of blocks in bytes */
154 BYTE prot_en:1; /* protection enable bit */
155 BYTE rto_en:1; /* reference tag own enable bit */
156 BYTE reserved:6; /* reserved bits */
157 BYTE reserved2[18]; /* reserved bytes per spec */
158} ReadCapdata_struct_16;
159
160/* Define the supported read/write commands for cciss based controllers */
161
162#define CCISS_READ_10 0x28 /* Read(10) */
163#define CCISS_WRITE_10 0x2a /* Write(10) */
164#define CCISS_READ_16 0x88 /* Read(16) */
165#define CCISS_WRITE_16 0x8a /* Write(16) */
166
167/* Define the CDB lengths supported by cciss based controllers */
168
169#define CDB_LEN10 10
170#define CDB_LEN16 16
1da177e4 171
b028461d 172/* BMIC commands */
1da177e4
LT
173#define BMIC_READ 0x26
174#define BMIC_WRITE 0x27
175#define BMIC_CACHE_FLUSH 0xc2
b028461d 176#define CCISS_CACHE_FLUSH 0x01 /* C2 was already being used by CCISS */
1da177e4 177
b028461d 178/* Command List Structure */
1da177e4
LT
179typedef union _SCSI3Addr_struct {
180 struct {
181 BYTE Dev;
182 BYTE Bus:6;
b028461d 183 BYTE Mode:2; /* b00 */
1da177e4
LT
184 } PeripDev;
185 struct {
186 BYTE DevLSB;
187 BYTE DevMSB:6;
b028461d 188 BYTE Mode:2; /* b01 */
1da177e4
LT
189 } LogDev;
190 struct {
191 BYTE Dev:5;
192 BYTE Bus:3;
193 BYTE Targ:6;
b028461d 194 BYTE Mode:2; /* b10 */
1da177e4
LT
195 } LogUnit;
196} SCSI3Addr_struct;
197
198typedef struct _PhysDevAddr_struct {
199 DWORD TargetId:24;
200 DWORD Bus:6;
201 DWORD Mode:2;
b028461d 202 SCSI3Addr_struct Target[2]; /* 2 level target device addr */
1da177e4
LT
203} PhysDevAddr_struct;
204
205typedef struct _LogDevAddr_struct {
206 DWORD VolId:30;
207 DWORD Mode:2;
208 BYTE reserved[4];
209} LogDevAddr_struct;
210
211typedef union _LUNAddr_struct {
212 BYTE LunAddrBytes[8];
213 SCSI3Addr_struct SCSI3Lun[4];
214 PhysDevAddr_struct PhysDev;
215 LogDevAddr_struct LogDev;
216} LUNAddr_struct;
217
b57695fe 218#define CTLR_LUNID "\0\0\0\0\0\0\0\0"
219
1da177e4
LT
220typedef struct _CommandListHeader_struct {
221 BYTE ReplyQueue;
222 BYTE SGList;
223 HWORD SGTotal;
224 QWORD Tag;
225 LUNAddr_struct LUN;
226} CommandListHeader_struct;
227typedef struct _RequestBlock_struct {
228 BYTE CDBLen;
229 struct {
230 BYTE Type:3;
231 BYTE Attribute:3;
232 BYTE Direction:2;
233 } Type;
234 HWORD Timeout;
235 BYTE CDB[16];
236} RequestBlock_struct;
237typedef struct _ErrDescriptor_struct {
238 QWORD Addr;
239 DWORD Len;
240} ErrDescriptor_struct;
241typedef struct _SGDescriptor_struct {
242 QWORD Addr;
243 DWORD Len;
244 DWORD Ext;
245} SGDescriptor_struct;
246
247typedef union _MoreErrInfo_struct{
248 struct {
249 BYTE Reserved[3];
250 BYTE Type;
251 DWORD ErrorInfo;
252 }Common_Info;
253 struct{
254 BYTE Reserved[2];
b028461d 255 BYTE offense_size; /* size of offending entry */
256 BYTE offense_num; /* byte # of offense 0-base */
1da177e4
LT
257 DWORD offense_value;
258 }Invalid_Cmd;
259}MoreErrInfo_struct;
260typedef struct _ErrorInfo_struct {
261 BYTE ScsiStatus;
262 BYTE SenseLen;
263 HWORD CommandStatus;
264 DWORD ResidualCnt;
265 MoreErrInfo_struct MoreErrInfo;
266 BYTE SenseInfo[SENSEINFOBYTES];
267} ErrorInfo_struct;
268
269/* Command types */
270#define CMD_RWREQ 0x00
271#define CMD_IOCTL_PEND 0x01
272#define CMD_SCSI 0x03
273#define CMD_MSG_DONE 0x04
274#define CMD_MSG_TIMEOUT 0x05
b59e64d0 275#define CMD_MSG_STALE 0xff
1da177e4 276
33079b21
MM
277/* This structure needs to be divisible by 8 for new
278 * indexing method.
279 */
280#define PADSIZE (sizeof(long) - 4)
1da177e4
LT
281typedef struct _CommandList_struct {
282 CommandListHeader_struct Header;
283 RequestBlock_struct Request;
284 ErrDescriptor_struct ErrDesc;
285 SGDescriptor_struct SG[MAXSGENTRIES];
286 /* information associated with the command */
287 __u32 busaddr; /* physical address of this record */
288 ErrorInfo_struct * err_info; /* pointer to the allocated mem */
289 int ctlr;
290 int cmd_type;
33079b21 291 long cmdindex;
8a3173de 292 struct hlist_node list;
1da177e4
LT
293 struct request * rq;
294 struct completion *waiting;
295 int retry_count;
1da177e4 296 void * scsi_cmd;
33079b21 297 char pad[PADSIZE];
1da177e4
LT
298} CommandList_struct;
299
b028461d 300/* Configuration Table Structure */
1da177e4
LT
301typedef struct _HostWrite_struct {
302 DWORD TransportRequest;
303 DWORD Reserved;
304 DWORD CoalIntDelay;
305 DWORD CoalIntCount;
306} HostWrite_struct;
307
308typedef struct _CfgTable_struct {
309 BYTE Signature[4];
310 DWORD SpecValence;
311 DWORD TransportSupport;
312 DWORD TransportActive;
313 HostWrite_struct HostWrite;
314 DWORD CmdsOutMax;
315 DWORD BusTypes;
316 DWORD Reserved;
317 BYTE ServerName[16];
318 DWORD HeartBeat;
319 DWORD SCSI_Prefetch;
5c07a311
DB
320 DWORD MaxSGElements;
321 DWORD MaxLogicalUnits;
322 DWORD MaxPhysicalDrives;
323 DWORD MaxPhysicalDrivesPerLogicalUnit;
1da177e4
LT
324} CfgTable_struct;
325#pragma pack()
b028461d 326#endif /* CCISS_CMD_H */
This page took 0.809537 seconds and 5 git commands to generate.