xref: /linux/include/uapi/linux/cciss_defs.h (revision ca55b2fef3a9373fcfc30f82fd26bc7fccbda732)
1 #ifndef CCISS_DEFS_H
2 #define CCISS_DEFS_H
3 
4 #include <linux/types.h>
5 
6 /* general boundary definitions */
7 #define SENSEINFOBYTES          32 /* note that this value may vary
8 				      between host implementations */
9 
10 /* Command Status value */
11 #define CMD_SUCCESS             0x0000
12 #define CMD_TARGET_STATUS       0x0001
13 #define CMD_DATA_UNDERRUN       0x0002
14 #define CMD_DATA_OVERRUN        0x0003
15 #define CMD_INVALID             0x0004
16 #define CMD_PROTOCOL_ERR        0x0005
17 #define CMD_HARDWARE_ERR        0x0006
18 #define CMD_CONNECTION_LOST     0x0007
19 #define CMD_ABORTED             0x0008
20 #define CMD_ABORT_FAILED        0x0009
21 #define CMD_UNSOLICITED_ABORT   0x000A
22 #define CMD_TIMEOUT             0x000B
23 #define CMD_UNABORTABLE		0x000C
24 
25 /* transfer direction */
26 #define XFER_NONE               0x00
27 #define XFER_WRITE              0x01
28 #define XFER_READ               0x02
29 #define XFER_RSVD               0x03
30 
31 /* task attribute */
32 #define ATTR_UNTAGGED           0x00
33 #define ATTR_SIMPLE             0x04
34 #define ATTR_HEADOFQUEUE        0x05
35 #define ATTR_ORDERED            0x06
36 #define ATTR_ACA                0x07
37 
38 /* cdb type */
39 #define TYPE_CMD				0x00
40 #define TYPE_MSG				0x01
41 
42 /* Type defs used in the following structs */
43 #define BYTE __u8
44 #define WORD __u16
45 #define HWORD __u16
46 #define DWORD __u32
47 
48 #define CISS_MAX_LUN	1024
49 
50 #define LEVEL2LUN   1 /* index into Target(x) structure, due to byte swapping */
51 #define LEVEL3LUN   0
52 
53 #pragma pack(1)
54 
55 /* Command List Structure */
56 typedef union _SCSI3Addr_struct {
57    struct {
58     BYTE Dev;
59     BYTE Bus:6;
60     BYTE Mode:2;        /* b00 */
61   } PeripDev;
62    struct {
63     BYTE DevLSB;
64     BYTE DevMSB:6;
65     BYTE Mode:2;        /* b01 */
66   } LogDev;
67    struct {
68     BYTE Dev:5;
69     BYTE Bus:3;
70     BYTE Targ:6;
71     BYTE Mode:2;        /* b10 */
72   } LogUnit;
73 } SCSI3Addr_struct;
74 
75 typedef struct _PhysDevAddr_struct {
76   DWORD             TargetId:24;
77   DWORD             Bus:6;
78   DWORD             Mode:2;
79   SCSI3Addr_struct  Target[2]; /* 2 level target device addr */
80 } PhysDevAddr_struct;
81 
82 typedef struct _LogDevAddr_struct {
83   DWORD            VolId:30;
84   DWORD            Mode:2;
85   BYTE             reserved[4];
86 } LogDevAddr_struct;
87 
88 typedef union _LUNAddr_struct {
89   BYTE               LunAddrBytes[8];
90   SCSI3Addr_struct   SCSI3Lun[4];
91   PhysDevAddr_struct PhysDev;
92   LogDevAddr_struct  LogDev;
93 } LUNAddr_struct;
94 
95 typedef struct _RequestBlock_struct {
96   BYTE   CDBLen;
97   struct {
98     BYTE Type:3;
99     BYTE Attribute:3;
100     BYTE Direction:2;
101   } Type;
102   HWORD  Timeout;
103   BYTE   CDB[16];
104 } RequestBlock_struct;
105 
106 typedef union _MoreErrInfo_struct{
107   struct {
108     BYTE  Reserved[3];
109     BYTE  Type;
110     DWORD ErrorInfo;
111   } Common_Info;
112   struct{
113     BYTE  Reserved[2];
114     BYTE  offense_size; /* size of offending entry */
115     BYTE  offense_num;  /* byte # of offense 0-base */
116     DWORD offense_value;
117   } Invalid_Cmd;
118 } MoreErrInfo_struct;
119 typedef struct _ErrorInfo_struct {
120   BYTE               ScsiStatus;
121   BYTE               SenseLen;
122   HWORD              CommandStatus;
123   DWORD              ResidualCnt;
124   MoreErrInfo_struct MoreErrInfo;
125   BYTE               SenseInfo[SENSEINFOBYTES];
126 } ErrorInfo_struct;
127 
128 #pragma pack()
129 
130 #endif /* CCISS_DEFS_H */
131