2005-04-17 02:20:36 +04:00
# ifndef CCISS_CMD_H
# define CCISS_CMD_H
2010-02-18 02:55:11 +03:00
# include <linux/cciss_defs.h>
2010-02-18 02:53:31 +03:00
/* DEFINES */
2005-04-17 02:20:36 +04:00
# define CISS_VERSION "1.00"
2010-02-18 02:53:31 +03:00
/* general boundary definitions */
2009-11-12 21:50:01 +03:00
# define MAXSGENTRIES 32
# define CCISS_SG_CHAIN 0x80000000
2005-04-17 02:20:36 +04:00
# define MAXREPLYQS 256
2009-04-02 23:50:55 +04:00
/* Unit Attentions ASC's as defined for the MSA2012sa */
# define POWER_OR_RESET 0x29
# define STATE_CHANGED 0x2a
# define UNIT_ATTENTION_CLEARED 0x2f
# define LUN_FAILED 0x3e
# define REPORT_LUNS_CHANGED 0x3f
/* Unit Attentions ASCQ's as defined for the MSA2012sa */
/* These ASCQ's defined for ASC = POWER_OR_RESET */
# define POWER_ON_RESET 0x00
# define POWER_ON_REBOOT 0x01
# define SCSI_BUS_RESET 0x02
# define MSA_TARGET_RESET 0x03
# define CONTROLLER_FAILOVER 0x04
# define TRANSCEIVER_SE 0x05
# define TRANSCEIVER_LVD 0x06
/* These ASCQ's defined for ASC = STATE_CHANGED */
# define RESERVATION_PREEMPTED 0x03
# define ASYM_ACCESS_CHANGED 0x06
# define LUN_CAPACITY_CHANGED 0x09
2010-02-18 02:53:31 +03:00
/* config space register offsets */
2005-04-17 02:20:36 +04:00
# define CFG_VENDORID 0x00
# define CFG_DEVICEID 0x02
# define CFG_I2OBAR 0x10
# define CFG_MEM1BAR 0x14
2010-02-18 02:53:31 +03:00
/* i2o space register offsets */
2005-04-17 02:20:36 +04:00
# define I2O_IBDB_SET 0x20
# define I2O_IBDB_CLEAR 0x70
# define I2O_INT_STATUS 0x30
# define I2O_INT_MASK 0x34
# define I2O_IBPOST_Q 0x40
# define I2O_OBPOST_Q 0x44
2006-12-07 07:35:04 +03:00
# define I2O_DMA1_CFG 0x214
2005-04-17 02:20:36 +04:00
2010-02-18 02:53:31 +03:00
/* Configuration Table */
2005-04-17 02:20:36 +04:00
# define CFGTBL_ChangeReq 0x00000001l
# define CFGTBL_AccCmds 0x00000001l
# define CFGTBL_Trans_Simple 0x00000002l
# define CFGTBL_BusType_Ultra2 0x00000001l
# define CFGTBL_BusType_Ultra3 0x00000002l
# define CFGTBL_BusType_Fibre1G 0x00000100l
# define CFGTBL_BusType_Fibre2G 0x00000200l
typedef struct _vals32
{
__u32 lower ;
__u32 upper ;
} vals32 ;
typedef union _u64bit
{
vals32 val32 ;
__u64 val ;
} u64bit ;
2010-02-18 02:53:31 +03:00
/* Type defs used in the following structs */
2005-04-17 02:20:36 +04:00
# define QWORD vals32
2010-02-18 02:53:31 +03:00
/* STRUCTURES */
2005-04-17 02:20:36 +04:00
# define CISS_MAX_PHYS_LUN 1024
2010-02-18 02:53:31 +03:00
/* SCSI-3 Cmmands */
2005-04-17 02:20:36 +04:00
# pragma pack(1)
# define CISS_INQUIRY 0x12
2010-02-18 02:53:31 +03:00
/* Date returned */
2005-04-17 02:20:36 +04:00
typedef struct _InquiryData_struct
{
BYTE data_byte [ 36 ] ;
} InquiryData_struct ;
# define CISS_REPORT_LOG 0xc2 /* Report Logical LUNs */
# define CISS_REPORT_PHYS 0xc3 /* Report Physical LUNs */
2010-02-18 02:53:31 +03:00
/* Data returned */
2005-04-17 02:20:36 +04:00
typedef struct _ReportLUNdata_struct
{
BYTE LUNListLength [ 4 ] ;
DWORD reserved ;
BYTE LUN [ CISS_MAX_LUN ] [ 8 ] ;
} ReportLunData_struct ;
# define CCISS_READ_CAPACITY 0x25 /* Read Capacity */
typedef struct _ReadCapdata_struct
{
2010-02-18 02:53:31 +03:00
BYTE total_size [ 4 ] ; /* Total size in blocks */
BYTE block_size [ 4 ] ; /* Size of blocks in bytes */
2005-04-17 02:20:36 +04:00
} ReadCapdata_struct ;
2006-10-01 10:27:23 +04:00
# define CCISS_READ_CAPACITY_16 0x9e /* Read Capacity 16 */
/* service action to differentiate a 16 byte read capacity from
other commands that use the 0x9e SCSI op code */
# define CCISS_READ_CAPACITY_16_SERVICE_ACT 0x10
typedef struct _ReadCapdata_struct_16
{
BYTE total_size [ 8 ] ; /* Total size in blocks */
BYTE block_size [ 4 ] ; /* Size of blocks in bytes */
BYTE prot_en : 1 ; /* protection enable bit */
BYTE rto_en : 1 ; /* reference tag own enable bit */
BYTE reserved : 6 ; /* reserved bits */
BYTE reserved2 [ 18 ] ; /* reserved bytes per spec */
} ReadCapdata_struct_16 ;
/* Define the supported read/write commands for cciss based controllers */
# define CCISS_READ_10 0x28 /* Read(10) */
# define CCISS_WRITE_10 0x2a /* Write(10) */
# define CCISS_READ_16 0x88 /* Read(16) */
# define CCISS_WRITE_16 0x8a /* Write(16) */
/* Define the CDB lengths supported by cciss based controllers */
# define CDB_LEN10 10
# define CDB_LEN16 16
2005-04-17 02:20:36 +04:00
2010-02-18 02:53:31 +03:00
/* BMIC commands */
2005-04-17 02:20:36 +04:00
# define BMIC_READ 0x26
# define BMIC_WRITE 0x27
# define BMIC_CACHE_FLUSH 0xc2
2010-02-18 02:53:31 +03:00
# define CCISS_CACHE_FLUSH 0x01 /* C2 was already being used by CCISS */
2005-04-17 02:20:36 +04:00
2010-02-18 02:53:31 +03:00
/* Command List Structure */
2009-06-09 01:02:17 +04:00
# define CTLR_LUNID "\0\0\0\0\0\0\0\0"
2005-04-17 02:20:36 +04:00
typedef struct _CommandListHeader_struct {
BYTE ReplyQueue ;
BYTE SGList ;
HWORD SGTotal ;
QWORD Tag ;
LUNAddr_struct LUN ;
} CommandListHeader_struct ;
typedef struct _ErrDescriptor_struct {
QWORD Addr ;
DWORD Len ;
} ErrDescriptor_struct ;
typedef struct _SGDescriptor_struct {
QWORD Addr ;
DWORD Len ;
DWORD Ext ;
} SGDescriptor_struct ;
/* Command types */
# define CMD_RWREQ 0x00
# define CMD_IOCTL_PEND 0x01
# define CMD_SCSI 0x03
# define CMD_MSG_DONE 0x04
# define CMD_MSG_TIMEOUT 0x05
2009-07-03 00:02:06 +04:00
# define CMD_MSG_STALE 0xff
2005-04-17 02:20:36 +04:00
2005-09-13 12:25:22 +04:00
/* This structure needs to be divisible by 8 for new
* indexing method .
*/
# define PADSIZE (sizeof(long) - 4)
2005-04-17 02:20:36 +04:00
typedef struct _CommandList_struct {
CommandListHeader_struct Header ;
RequestBlock_struct Request ;
ErrDescriptor_struct ErrDesc ;
SGDescriptor_struct SG [ MAXSGENTRIES ] ;
/* information associated with the command */
__u32 busaddr ; /* physical address of this record */
ErrorInfo_struct * err_info ; /* pointer to the allocated mem */
int ctlr ;
int cmd_type ;
2005-09-13 12:25:22 +04:00
long cmdindex ;
2008-11-20 11:46:09 +03:00
struct hlist_node list ;
2005-04-17 02:20:36 +04:00
struct request * rq ;
struct completion * waiting ;
int retry_count ;
void * scsi_cmd ;
2005-09-13 12:25:22 +04:00
char pad [ PADSIZE ] ;
2005-04-17 02:20:36 +04:00
} CommandList_struct ;
2010-02-18 02:53:31 +03:00
/* Configuration Table Structure */
2005-04-17 02:20:36 +04:00
typedef struct _HostWrite_struct {
DWORD TransportRequest ;
DWORD Reserved ;
DWORD CoalIntDelay ;
DWORD CoalIntCount ;
} HostWrite_struct ;
typedef struct _CfgTable_struct {
BYTE Signature [ 4 ] ;
DWORD SpecValence ;
DWORD TransportSupport ;
DWORD TransportActive ;
HostWrite_struct HostWrite ;
DWORD CmdsOutMax ;
DWORD BusTypes ;
DWORD Reserved ;
BYTE ServerName [ 16 ] ;
DWORD HeartBeat ;
DWORD SCSI_Prefetch ;
2009-11-12 21:50:01 +03:00
DWORD MaxSGElements ;
DWORD MaxLogicalUnits ;
DWORD MaxPhysicalDrives ;
DWORD MaxPhysicalDrivesPerLogicalUnit ;
2005-04-17 02:20:36 +04:00
} CfgTable_struct ;
# pragma pack()
2010-02-18 02:53:31 +03:00
# endif /* CCISS_CMD_H */