15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CCISS_DEFS_H
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CCISS_DEFS_H
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <linux/types.h>
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* general boundary definitions */
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SENSEINFOBYTES          32 /* note that this value may vary
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				      between host implementations */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Command Status value */
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_SUCCESS             0x0000
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_TARGET_STATUS       0x0001
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_DATA_UNDERRUN       0x0002
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_DATA_OVERRUN        0x0003
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_INVALID             0x0004
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_PROTOCOL_ERR        0x0005
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_HARDWARE_ERR        0x0006
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_CONNECTION_LOST     0x0007
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_ABORTED             0x0008
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_ABORT_FAILED        0x0009
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_UNSOLICITED_ABORT   0x000A
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_TIMEOUT             0x000B
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CMD_UNABORTABLE		0x000C
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* transfer direction */
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XFER_NONE               0x00
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XFER_WRITE              0x01
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XFER_READ               0x02
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XFER_RSVD               0x03
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* task attribute */
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ATTR_UNTAGGED           0x00
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ATTR_SIMPLE             0x04
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ATTR_HEADOFQUEUE        0x05
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ATTR_ORDERED            0x06
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ATTR_ACA                0x07
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* cdb type */
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TYPE_CMD				0x00
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TYPE_MSG				0x01
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Type defs used in the following structs */
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BYTE __u8
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WORD __u16
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HWORD __u16
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DWORD __u32
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CISS_MAX_LUN	1024
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEVEL2LUN   1 /* index into Target(x) structure, due to byte swapping */
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEVEL3LUN   0
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma pack(1)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Command List Structure */
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef union _SCSI3Addr_struct {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   struct {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Dev;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Bus:6;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Mode:2;        /* b00 */
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } PeripDev;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   struct {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE DevLSB;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE DevMSB:6;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Mode:2;        /* b01 */
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } LogDev;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   struct {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Dev:5;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Bus:3;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Targ:6;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BYTE Mode:2;        /* b10 */
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } LogUnit;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} SCSI3Addr_struct;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _PhysDevAddr_struct {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DWORD             TargetId:24;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DWORD             Bus:6;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DWORD             Mode:2;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCSI3Addr_struct  Target[2]; /* 2 level target device addr */
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PhysDevAddr_struct;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _LogDevAddr_struct {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DWORD            VolId:30;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DWORD            Mode:2;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BYTE             reserved[4];
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} LogDevAddr_struct;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef union _LUNAddr_struct {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BYTE               LunAddrBytes[8];
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCSI3Addr_struct   SCSI3Lun[4];
91  PhysDevAddr_struct PhysDev;
92  LogDevAddr_struct  LogDev;
93} LUNAddr_struct;
94
95typedef 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
106typedef 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;
119typedef 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