PageRenderTime 38ms CodeModel.GetById 15ms app.highlight 17ms RepoModel.GetById 1ms app.codeStats 1ms

/drivers/block/cciss_cmd.h

https://bitbucket.org/evzijst/gittest
C Header | 271 lines | 216 code | 29 blank | 26 comment | 0 complexity | e9b28661c6c30c4d08ca960bf70da93a MD5 | raw file
  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  int	 retry_count;
244#ifdef CONFIG_CISS_SCSI_TAPE
245  void * scsi_cmd;
246#endif
247} CommandList_struct;
248
249//Configuration Table Structure
250typedef struct _HostWrite_struct {
251  DWORD TransportRequest;
252  DWORD Reserved;
253  DWORD CoalIntDelay;
254  DWORD CoalIntCount;
255} HostWrite_struct;
256
257typedef struct _CfgTable_struct {
258  BYTE             Signature[4];
259  DWORD            SpecValence;
260  DWORD            TransportSupport;
261  DWORD            TransportActive;
262  HostWrite_struct HostWrite;
263  DWORD            CmdsOutMax;
264  DWORD            BusTypes;
265  DWORD            Reserved; 
266  BYTE             ServerName[16];
267  DWORD            HeartBeat;
268  DWORD            SCSI_Prefetch;
269} CfgTable_struct;
270#pragma pack()	 
271#endif // CCISS_CMD_H