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