From 466dc22409b97343c6b2168094d5f867093a70c2 Mon Sep 17 00:00:00 2001 From: "Stephen M. Cameron" Date: Thu, 4 Feb 2010 08:41:28 -0600 Subject: [SCSI] hpsa: fix typo in comments Signed-off-by: Stephen M. Cameron Signed-off-by: James Bottomley --- drivers/scsi/hpsa_cmd.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/scsi/hpsa_cmd.h') diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h index 12d71387ed9a..2df1c661ce10 100644 --- a/drivers/scsi/hpsa_cmd.h +++ b/drivers/scsi/hpsa_cmd.h @@ -269,7 +269,7 @@ struct ErrorInfo { struct ctlr_info; /* defined in hpsa.h */ /* The size of this structure needs to be divisible by 8 - * od on all architectures, because the controller uses 2 + * on all architectures, because the controller uses 2 * lower bits of the address, and the driver uses 1 lower * bit (3 bits total.) */ -- cgit From 01a02ffcd55b74e3459bb7358140970e126d4731 Mon Sep 17 00:00:00 2001 From: "Stephen M. Cameron" Date: Thu, 4 Feb 2010 08:41:33 -0600 Subject: [SCSI] hpsa: Use kernel integer types, not userland ones That is, use u64, u32, u16 and u8 rather than __u64, __u32, __u16 and __u8. Signed-off-by: Stephen M. Cameron Signed-off-by: James Bottomley --- drivers/scsi/hpsa_cmd.h | 146 ++++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 73 deletions(-) (limited to 'drivers/scsi/hpsa_cmd.h') diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h index 2df1c661ce10..88bb3b0a21d3 100644 --- a/drivers/scsi/hpsa_cmd.h +++ b/drivers/scsi/hpsa_cmd.h @@ -107,13 +107,13 @@ #define CFGTBL_BusType_Fibre1G 0x00000100l #define CFGTBL_BusType_Fibre2G 0x00000200l struct vals32 { - __u32 lower; - __u32 upper; + u32 lower; + u32 upper; }; union u64bit { struct vals32 val32; - __u64 val; + u64 val; }; /* FIXME this is a per controller value (barf!) */ @@ -126,34 +126,34 @@ union u64bit { #define HPSA_INQUIRY 0x12 struct InquiryData { - __u8 data_byte[36]; + u8 data_byte[36]; }; #define HPSA_REPORT_LOG 0xc2 /* Report Logical LUNs */ #define HPSA_REPORT_PHYS 0xc3 /* Report Physical LUNs */ struct ReportLUNdata { - __u8 LUNListLength[4]; - __u32 reserved; - __u8 LUN[HPSA_MAX_LUN][8]; + u8 LUNListLength[4]; + u32 reserved; + u8 LUN[HPSA_MAX_LUN][8]; }; struct ReportExtendedLUNdata { - __u8 LUNListLength[4]; - __u8 extended_response_flag; - __u8 reserved[3]; - __u8 LUN[HPSA_MAX_LUN][24]; + u8 LUNListLength[4]; + u8 extended_response_flag; + u8 reserved[3]; + u8 LUN[HPSA_MAX_LUN][24]; }; struct SenseSubsystem_info { - __u8 reserved[36]; - __u8 portname[8]; - __u8 reserved1[1108]; + u8 reserved[36]; + u8 portname[8]; + u8 reserved1[1108]; }; #define HPSA_READ_CAPACITY 0x25 /* Read Capacity */ struct ReadCapdata { - __u8 total_size[4]; /* Total size in blocks */ - __u8 block_size[4]; /* Size of blocks in bytes */ + u8 total_size[4]; /* Total size in blocks */ + u8 block_size[4]; /* Size of blocks in bytes */ }; #if 0 @@ -174,94 +174,94 @@ struct ReadCapdata { /* Command List Structure */ union SCSI3Addr { struct { - __u8 Dev; - __u8 Bus:6; - __u8 Mode:2; /* b00 */ + u8 Dev; + u8 Bus:6; + u8 Mode:2; /* b00 */ } PeripDev; struct { - __u8 DevLSB; - __u8 DevMSB:6; - __u8 Mode:2; /* b01 */ + u8 DevLSB; + u8 DevMSB:6; + u8 Mode:2; /* b01 */ } LogDev; struct { - __u8 Dev:5; - __u8 Bus:3; - __u8 Targ:6; - __u8 Mode:2; /* b10 */ + u8 Dev:5; + u8 Bus:3; + u8 Targ:6; + u8 Mode:2; /* b10 */ } LogUnit; }; struct PhysDevAddr { - __u32 TargetId:24; - __u32 Bus:6; - __u32 Mode:2; + u32 TargetId:24; + u32 Bus:6; + u32 Mode:2; /* 2 level target device addr */ union SCSI3Addr Target[2]; }; struct LogDevAddr { - __u32 VolId:30; - __u32 Mode:2; - __u8 reserved[4]; + u32 VolId:30; + u32 Mode:2; + u8 reserved[4]; }; union LUNAddr { - __u8 LunAddrBytes[8]; + u8 LunAddrBytes[8]; union SCSI3Addr SCSI3Lun[4]; struct PhysDevAddr PhysDev; struct LogDevAddr LogDev; }; struct CommandListHeader { - __u8 ReplyQueue; - __u8 SGList; - __u16 SGTotal; + u8 ReplyQueue; + u8 SGList; + u16 SGTotal; struct vals32 Tag; union LUNAddr LUN; }; struct RequestBlock { - __u8 CDBLen; + u8 CDBLen; struct { - __u8 Type:3; - __u8 Attribute:3; - __u8 Direction:2; + u8 Type:3; + u8 Attribute:3; + u8 Direction:2; } Type; - __u16 Timeout; - __u8 CDB[16]; + u16 Timeout; + u8 CDB[16]; }; struct ErrDescriptor { struct vals32 Addr; - __u32 Len; + u32 Len; }; struct SGDescriptor { struct vals32 Addr; - __u32 Len; - __u32 Ext; + u32 Len; + u32 Ext; }; union MoreErrInfo { struct { - __u8 Reserved[3]; - __u8 Type; - __u32 ErrorInfo; + u8 Reserved[3]; + u8 Type; + u32 ErrorInfo; } Common_Info; struct { - __u8 Reserved[2]; - __u8 offense_size; /* size of offending entry */ - __u8 offense_num; /* byte # of offense 0-base */ - __u32 offense_value; + u8 Reserved[2]; + u8 offense_size; /* size of offending entry */ + u8 offense_num; /* byte # of offense 0-base */ + u32 offense_value; } Invalid_Cmd; }; struct ErrorInfo { - __u8 ScsiStatus; - __u8 SenseLen; - __u16 CommandStatus; - __u32 ResidualCnt; + u8 ScsiStatus; + u8 SenseLen; + u16 CommandStatus; + u32 ResidualCnt; union MoreErrInfo MoreErrInfo; - __u8 SenseInfo[SENSEINFOBYTES]; + u8 SenseInfo[SENSEINFOBYTES]; }; /* Command types */ #define CMD_IOCTL_PEND 0x01 @@ -279,7 +279,7 @@ struct CommandList { struct ErrDescriptor ErrDesc; struct SGDescriptor SG[MAXSGENTRIES]; /* information associated with the command */ - __u32 busaddr; /* physical addr of this record */ + u32 busaddr; /* physical addr of this record */ struct ErrorInfo *err_info; /* pointer to the allocated mem */ struct ctlr_info *h; int cmd_type; @@ -295,31 +295,31 @@ struct CommandList { /* Configuration Table Structure */ struct HostWrite { - __u32 TransportRequest; - __u32 Reserved; - __u32 CoalIntDelay; - __u32 CoalIntCount; + u32 TransportRequest; + u32 Reserved; + u32 CoalIntDelay; + u32 CoalIntCount; }; struct CfgTable { - __u8 Signature[4]; - __u32 SpecValence; - __u32 TransportSupport; - __u32 TransportActive; + u8 Signature[4]; + u32 SpecValence; + u32 TransportSupport; + u32 TransportActive; struct HostWrite HostWrite; - __u32 CmdsOutMax; - __u32 BusTypes; - __u32 Reserved; - __u8 ServerName[16]; - __u32 HeartBeat; - __u32 SCSI_Prefetch; + u32 CmdsOutMax; + u32 BusTypes; + u32 Reserved; + u8 ServerName[16]; + u32 HeartBeat; + u32 SCSI_Prefetch; }; struct hpsa_pci_info { unsigned char bus; unsigned char dev_fn; unsigned short domain; - __u32 board_id; + u32 board_id; }; #pragma pack() -- cgit From 303932fd4ff63e8650d5d5da6cc286a8b5f8318d Mon Sep 17 00:00:00 2001 From: Don Brace Date: Thu, 4 Feb 2010 08:42:40 -0600 Subject: [SCSI] hpsa: Allow multiple command completions per interrupt. This is done by adding support for the so-called "performant mode" (that's really what they called it). Smart Array controllers have a mode which enables multiple command completions to be delivered with a single interrupt, "performant" mode. We want to use that mode, as some newer controllers will be requiring this mode. Signed-off-by: Don Brace Signed-off-by: Stephen M. Cameron Signed-off-by: Mike Miller Signed-off-by: James Bottomley --- drivers/scsi/hpsa_cmd.h | 78 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 15 deletions(-) (limited to 'drivers/scsi/hpsa_cmd.h') diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h index 88bb3b0a21d3..3e0abdf76689 100644 --- a/drivers/scsi/hpsa_cmd.h +++ b/drivers/scsi/hpsa_cmd.h @@ -101,6 +101,7 @@ #define CFGTBL_AccCmds 0x00000001l #define CFGTBL_Trans_Simple 0x00000002l +#define CFGTBL_Trans_Performant 0x00000004l #define CFGTBL_BusType_Ultra2 0x00000001l #define CFGTBL_BusType_Ultra3 0x00000002l @@ -267,12 +268,31 @@ struct ErrorInfo { #define CMD_IOCTL_PEND 0x01 #define CMD_SCSI 0x03 +/* This structure needs to be divisible by 32 for new + * indexing method and performant mode. + */ +#define PAD32 32 +#define PAD64DIFF 0 +#define USEEXTRA ((sizeof(void *) - 4)/4) +#define PADSIZE (PAD32 + PAD64DIFF * USEEXTRA) + +#define DIRECT_LOOKUP_SHIFT 5 +#define DIRECT_LOOKUP_BIT 0x10 + +#define HPSA_ERROR_BIT 0x02 struct ctlr_info; /* defined in hpsa.h */ -/* The size of this structure needs to be divisible by 8 - * on all architectures, because the controller uses 2 - * lower bits of the address, and the driver uses 1 lower - * bit (3 bits total.) +/* The size of this structure needs to be divisible by 32 + * on all architectures because low 5 bits of the addresses + * are used as follows: + * + * bit 0: to device, used to indicate "performant mode" command + * from device, indidcates error status. + * bit 1-3: to device, indicates block fetch table entry for + * reducing DMA in fetching commands from host memory. + * bit 4: used to indicate whether tag is "direct lookup" (index), + * or a bus address. */ + struct CommandList { struct CommandListHeader Header; struct RequestBlock Request; @@ -291,6 +311,14 @@ struct CommandList { struct completion *waiting; int retry_count; void *scsi_cmd; + +/* on 64 bit architectures, to get this to be 32-byte-aligned + * it so happens we need no padding, on 32 bit systems, + * we need 8 bytes of padding. This does that. + */ +#define COMMANDLIST_PAD ((8 - sizeof(long))/4 * 8) + u8 pad[COMMANDLIST_PAD]; + }; /* Configuration Table Structure */ @@ -301,18 +329,38 @@ struct HostWrite { u32 CoalIntCount; }; +#define SIMPLE_MODE 0x02 +#define PERFORMANT_MODE 0x04 +#define MEMQ_MODE 0x08 + struct CfgTable { - u8 Signature[4]; - u32 SpecValence; - u32 TransportSupport; - u32 TransportActive; - struct HostWrite HostWrite; - u32 CmdsOutMax; - u32 BusTypes; - u32 Reserved; - u8 ServerName[16]; - u32 HeartBeat; - u32 SCSI_Prefetch; + u8 Signature[4]; + u32 SpecValence; + u32 TransportSupport; + u32 TransportActive; + struct HostWrite HostWrite; + u32 CmdsOutMax; + u32 BusTypes; + u32 TransMethodOffset; + u8 ServerName[16]; + u32 HeartBeat; + u32 SCSI_Prefetch; + u32 MaxScatterGatherElements; + u32 MaxLogicalUnits; + u32 MaxPhysicalDevices; + u32 MaxPhysicalDrivesPerLogicalUnit; + u32 MaxPerformantModeCommands; +}; + +#define NUM_BLOCKFETCH_ENTRIES 8 +struct TransTable_struct { + u32 BlockFetch[NUM_BLOCKFETCH_ENTRIES]; + u32 RepQSize; + u32 RepQCount; + u32 RepQCtrAddrLow32; + u32 RepQCtrAddrHigh32; + u32 RepQAddr0Low32; + u32 RepQAddr0High32; }; struct hpsa_pci_info { -- cgit