Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef CCISS_DEFS_H
0003 #define CCISS_DEFS_H
0004 
0005 #include <linux/types.h>
0006 
0007 /* general boundary definitions */
0008 #define SENSEINFOBYTES          32 /* note that this value may vary
0009                       between host implementations */
0010 
0011 /* Command Status value */
0012 #define CMD_SUCCESS             0x0000
0013 #define CMD_TARGET_STATUS       0x0001
0014 #define CMD_DATA_UNDERRUN       0x0002
0015 #define CMD_DATA_OVERRUN        0x0003
0016 #define CMD_INVALID             0x0004
0017 #define CMD_PROTOCOL_ERR        0x0005
0018 #define CMD_HARDWARE_ERR        0x0006
0019 #define CMD_CONNECTION_LOST     0x0007
0020 #define CMD_ABORTED             0x0008
0021 #define CMD_ABORT_FAILED        0x0009
0022 #define CMD_UNSOLICITED_ABORT   0x000A
0023 #define CMD_TIMEOUT             0x000B
0024 #define CMD_UNABORTABLE     0x000C
0025 
0026 /* transfer direction */
0027 #define XFER_NONE               0x00
0028 #define XFER_WRITE              0x01
0029 #define XFER_READ               0x02
0030 #define XFER_RSVD               0x03
0031 
0032 /* task attribute */
0033 #define ATTR_UNTAGGED           0x00
0034 #define ATTR_SIMPLE             0x04
0035 #define ATTR_HEADOFQUEUE        0x05
0036 #define ATTR_ORDERED            0x06
0037 #define ATTR_ACA                0x07
0038 
0039 /* cdb type */
0040 #define TYPE_CMD                0x00
0041 #define TYPE_MSG                0x01
0042 
0043 /* Type defs used in the following structs */
0044 #define BYTE __u8
0045 #define WORD __u16
0046 #define HWORD __u16
0047 #define DWORD __u32
0048 
0049 #define CISS_MAX_LUN    1024
0050 
0051 #define LEVEL2LUN   1 /* index into Target(x) structure, due to byte swapping */
0052 #define LEVEL3LUN   0
0053 
0054 #pragma pack(1)
0055 
0056 /* Command List Structure */
0057 typedef union _SCSI3Addr_struct {
0058    struct {
0059     BYTE Dev;
0060     BYTE Bus:6;
0061     BYTE Mode:2;        /* b00 */
0062   } PeripDev;
0063    struct {
0064     BYTE DevLSB;
0065     BYTE DevMSB:6;
0066     BYTE Mode:2;        /* b01 */
0067   } LogDev;
0068    struct {
0069     BYTE Dev:5;
0070     BYTE Bus:3;
0071     BYTE Targ:6;
0072     BYTE Mode:2;        /* b10 */
0073   } LogUnit;
0074 } SCSI3Addr_struct;
0075 
0076 typedef struct _PhysDevAddr_struct {
0077   DWORD             TargetId:24;
0078   DWORD             Bus:6;
0079   DWORD             Mode:2;
0080   SCSI3Addr_struct  Target[2]; /* 2 level target device addr */
0081 } PhysDevAddr_struct;
0082 
0083 typedef struct _LogDevAddr_struct {
0084   DWORD            VolId:30;
0085   DWORD            Mode:2;
0086   BYTE             reserved[4];
0087 } LogDevAddr_struct;
0088 
0089 typedef union _LUNAddr_struct {
0090   BYTE               LunAddrBytes[8];
0091   SCSI3Addr_struct   SCSI3Lun[4];
0092   PhysDevAddr_struct PhysDev;
0093   LogDevAddr_struct  LogDev;
0094 } LUNAddr_struct;
0095 
0096 typedef struct _RequestBlock_struct {
0097   BYTE   CDBLen;
0098   struct {
0099     BYTE Type:3;
0100     BYTE Attribute:3;
0101     BYTE Direction:2;
0102   } Type;
0103   HWORD  Timeout;
0104   BYTE   CDB[16];
0105 } RequestBlock_struct;
0106 
0107 typedef union _MoreErrInfo_struct{
0108   struct {
0109     BYTE  Reserved[3];
0110     BYTE  Type;
0111     DWORD ErrorInfo;
0112   } Common_Info;
0113   struct{
0114     BYTE  Reserved[2];
0115     BYTE  offense_size; /* size of offending entry */
0116     BYTE  offense_num;  /* byte # of offense 0-base */
0117     DWORD offense_value;
0118   } Invalid_Cmd;
0119 } MoreErrInfo_struct;
0120 typedef struct _ErrorInfo_struct {
0121   BYTE               ScsiStatus;
0122   BYTE               SenseLen;
0123   HWORD              CommandStatus;
0124   DWORD              ResidualCnt;
0125   MoreErrInfo_struct MoreErrInfo;
0126   BYTE               SenseInfo[SENSEINFOBYTES];
0127 } ErrorInfo_struct;
0128 
0129 #pragma pack()
0130 
0131 #endif /* CCISS_DEFS_H */