1#ifndef CCISS_CMD_H 2#define CCISS_CMD_H 3//########################################################################### 4//DEFINES 5//########################################################################### 6#define CISS_VERSION "1.00" 7 8//general boundary defintions 9#define SENSEINFOBYTES 32//note that this value may vary between host implementations 10#define MAXSGENTRIES 31 11#define MAXREPLYQS 256 12 13//Command Status value 14#define CMD_SUCCESS 0x0000 15#define CMD_TARGET_STATUS 0x0001 16#define CMD_DATA_UNDERRUN 0x0002 17#define CMD_DATA_OVERRUN 0x0003 18#define CMD_INVALID 0x0004 19#define CMD_PROTOCOL_ERR 0x0005 20#define CMD_HARDWARE_ERR 0x0006 21#define CMD_CONNECTION_LOST 0x0007 22#define CMD_ABORTED 0x0008 23#define CMD_ABORT_FAILED 0x0009 24#define CMD_UNSOLICITED_ABORT 0x000A 25#define CMD_TIMEOUT 0x000B 26#define CMD_UNABORTABLE 0x000C 27 28//transfer direction 29#define XFER_NONE 0x00 30#define XFER_WRITE 0x01 31#define XFER_READ 0x02 32#define XFER_RSVD 0x03 33 34//task attribute 35#define ATTR_UNTAGGED 0x00 36#define ATTR_SIMPLE 0x04 37#define ATTR_HEADOFQUEUE 0x05 38#define ATTR_ORDERED 0x06 39#define ATTR_ACA 0x07 40 41//cdb type 42#define TYPE_CMD 0x00 43#define TYPE_MSG 0x01 44 45//config space register offsets 46#define CFG_VENDORID 0x00 47#define CFG_DEVICEID 0x02 48#define CFG_I2OBAR 0x10 49#define CFG_MEM1BAR 0x14 50 51//i2o space register offsets 52#define I2O_IBDB_SET 0x20 53#define I2O_IBDB_CLEAR 0x70 54#define I2O_INT_STATUS 0x30 55#define I2O_INT_MASK 0x34 56#define I2O_IBPOST_Q 0x40 57#define I2O_OBPOST_Q 0x44 58 59//Configuration Table 60#define CFGTBL_ChangeReq 0x00000001l 61#define CFGTBL_AccCmds 0x00000001l 62 63#define CFGTBL_Trans_Simple 0x00000002l 64 65#define CFGTBL_BusType_Ultra2 0x00000001l 66#define CFGTBL_BusType_Ultra3 0x00000002l 67#define CFGTBL_BusType_Fibre1G 0x00000100l 68#define CFGTBL_BusType_Fibre2G 0x00000200l 69typedef struct _vals32 70{ 71 __u32 lower; 72 __u32 upper; 73} vals32; 74 75typedef union _u64bit 76{ 77 vals32 val32; 78 __u64 val; 79} u64bit; 80 81// Type defs used in the following structs 82#define BYTE __u8 83#define WORD __u16 84#define HWORD __u16 85#define DWORD __u32 86#define QWORD vals32 87 88//########################################################################### 89//STRUCTURES 90//########################################################################### 91#define CISS_MAX_LUN 16 92#define CISS_MAX_PHYS_LUN 1024 93// SCSI-3 Cmmands 94 95#pragma pack(1) 96 97#define CISS_INQUIRY 0x12 98//Date returned 99typedef struct _InquiryData_struct 100{ 101 BYTE data_byte[36]; 102} InquiryData_struct; 103 104#define CISS_REPORT_LOG 0xc2 /* Report Logical LUNs */ 105#define CISS_REPORT_PHYS 0xc3 /* Report Physical LUNs */ 106// Data returned 107typedef struct _ReportLUNdata_struct 108{ 109 BYTE LUNListLength[4]; 110 DWORD reserved; 111 BYTE LUN[CISS_MAX_LUN][8]; 112} ReportLunData_struct; 113 114#define CCISS_READ_CAPACITY 0x25 /* Read Capacity */ 115typedef struct _ReadCapdata_struct 116{ 117 BYTE total_size[4]; // Total size in blocks 118 BYTE block_size[4]; // Size of blocks in bytes 119} ReadCapdata_struct; 120 121// 12 byte commands not implemented in firmware yet. 122// #define CCISS_READ 0xa8 // Read(12) 123// #define CCISS_WRITE 0xaa // Write(12) 124 #define CCISS_READ 0x28 // Read(10) 125 #define CCISS_WRITE 0x2a // Write(10) 126 127// BMIC commands 128#define BMIC_READ 0x26 129#define BMIC_WRITE 0x27 130#define BMIC_CACHE_FLUSH 0xc2 131#define CCISS_CACHE_FLUSH 0x01 //C2 was already being used by CCISS 132 133//Command List Structure 134typedef union _SCSI3Addr_struct { 135 struct { 136 BYTE Dev; 137 BYTE Bus:6; 138 BYTE Mode:2; // b00 139 } PeripDev; 140 struct { 141 BYTE DevLSB; 142 BYTE DevMSB:6; 143 BYTE Mode:2; // b01 144 } LogDev; 145 struct { 146 BYTE Dev:5; 147 BYTE Bus:3; 148 BYTE Targ:6; 149 BYTE Mode:2; // b10 150 } LogUnit; 151} SCSI3Addr_struct; 152 153typedef struct _PhysDevAddr_struct { 154 DWORD TargetId:24; 155 DWORD Bus:6; 156 DWORD Mode:2; 157 SCSI3Addr_struct Target[2]; //2 level target device addr 158} PhysDevAddr_struct; 159 160typedef struct _LogDevAddr_struct { 161 DWORD VolId:30; 162 DWORD Mode:2; 163 BYTE reserved[4]; 164} LogDevAddr_struct; 165 166typedef union _LUNAddr_struct { 167 BYTE LunAddrBytes[8]; 168 SCSI3Addr_struct SCSI3Lun[4]; 169 PhysDevAddr_struct PhysDev; 170 LogDevAddr_struct LogDev; 171} LUNAddr_struct; 172 173typedef struct _CommandListHeader_struct { 174 BYTE ReplyQueue; 175 BYTE SGList; 176 HWORD SGTotal; 177 QWORD Tag; 178 LUNAddr_struct LUN; 179} CommandListHeader_struct; 180typedef struct _RequestBlock_struct { 181 BYTE CDBLen; 182 struct { 183 BYTE Type:3; 184 BYTE Attribute:3; 185 BYTE Direction:2; 186 } Type; 187 HWORD Timeout; 188 BYTE CDB[16]; 189} RequestBlock_struct; 190typedef struct _ErrDescriptor_struct { 191 QWORD Addr; 192 DWORD Len; 193} ErrDescriptor_struct; 194typedef struct _SGDescriptor_struct { 195 QWORD Addr; 196 DWORD Len; 197 DWORD Ext; 198} SGDescriptor_struct; 199 200typedef union _MoreErrInfo_struct{ 201 struct { 202 BYTE Reserved[3]; 203 BYTE Type; 204 DWORD ErrorInfo; 205 }Common_Info; 206 struct{ 207 BYTE Reserved[2]; 208 BYTE offense_size;//size of offending entry 209 BYTE offense_num; //byte # of offense 0-base 210 DWORD offense_value; 211 }Invalid_Cmd; 212}MoreErrInfo_struct; 213typedef struct _ErrorInfo_struct { 214 BYTE ScsiStatus; 215 BYTE SenseLen; 216 HWORD CommandStatus; 217 DWORD ResidualCnt; 218 MoreErrInfo_struct MoreErrInfo; 219 BYTE SenseInfo[SENSEINFOBYTES]; 220} ErrorInfo_struct; 221 222/* Command types */ 223#define CMD_RWREQ 0x00 224#define CMD_IOCTL_PEND 0x01 225#define CMD_SCSI 0x03 226#define CMD_MSG_DONE 0x04 227#define CMD_MSG_TIMEOUT 0x05 228 229typedef struct _CommandList_struct { 230 CommandListHeader_struct Header; 231 RequestBlock_struct Request; 232 ErrDescriptor_struct ErrDesc; 233 SGDescriptor_struct SG[MAXSGENTRIES]; 234 /* information associated with the command */ 235 __u32 busaddr; /* physical address of this record */ 236 ErrorInfo_struct * err_info; /* pointer to the allocated mem */ 237 int ctlr; 238 int cmd_type; 239 struct _CommandList_struct *prev; 240 struct _CommandList_struct *next; 241 struct request * rq; 242 struct completion *waiting; 243#ifdef CONFIG_CISS_SCSI_TAPE 244 void * scsi_cmd; 245#endif 246} CommandList_struct; 247 248//Configuration Table Structure 249typedef struct _HostWrite_struct { 250 DWORD TransportRequest; 251 DWORD Reserved; 252 DWORD CoalIntDelay; 253 DWORD CoalIntCount; 254} HostWrite_struct; 255 256typedef struct _CfgTable_struct { 257 BYTE Signature[4]; 258 DWORD SpecValence; 259 DWORD TransportSupport; 260 DWORD TransportActive; 261 HostWrite_struct HostWrite; 262 DWORD CmdsOutMax; 263 DWORD BusTypes; 264 DWORD Reserved; 265 BYTE ServerName[16]; 266 DWORD HeartBeat; 267} CfgTable_struct; 268#pragma pack() 269#endif // CCISS_CMD_H 270