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 __u8
45  #define WORD __u16
46  #define HWORD __u16
47  #define DWORD __u32
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