aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ipr.h
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2007-03-29 13:43:50 -0400
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2007-04-01 12:19:12 -0400
commit51b1c7e19e18e84a44277951dd5c4c4617330baa (patch)
tree411022d7f1c4a886f331e2fa0f4f0f02ec13211d /drivers/scsi/ipr.h
parent0feeed823af05ca556087a89fdcf644f156f73b8 (diff)
[SCSI] ipr: Faster sg list fetch
Improve overall command performance by embedding the scatterlist in the command block used by the adapter. This decreases the overall number of DMAs required for a single command. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/ipr.h')
-rw-r--r--drivers/scsi/ipr.h31
1 files changed, 16 insertions, 15 deletions
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
index 4d068887608c..50e14f59f2fa 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -422,9 +422,25 @@ struct ipr_ioarcb_ata_regs {
422 u8 ctl; 422 u8 ctl;
423}__attribute__ ((packed, aligned(4))); 423}__attribute__ ((packed, aligned(4)));
424 424
425struct ipr_ioadl_desc {
426 __be32 flags_and_data_len;
427#define IPR_IOADL_FLAGS_MASK 0xff000000
428#define IPR_IOADL_GET_FLAGS(x) (be32_to_cpu(x) & IPR_IOADL_FLAGS_MASK)
429#define IPR_IOADL_DATA_LEN_MASK 0x00ffffff
430#define IPR_IOADL_GET_DATA_LEN(x) (be32_to_cpu(x) & IPR_IOADL_DATA_LEN_MASK)
431#define IPR_IOADL_FLAGS_READ 0x48000000
432#define IPR_IOADL_FLAGS_READ_LAST 0x49000000
433#define IPR_IOADL_FLAGS_WRITE 0x68000000
434#define IPR_IOADL_FLAGS_WRITE_LAST 0x69000000
435#define IPR_IOADL_FLAGS_LAST 0x01000000
436
437 __be32 address;
438}__attribute__((packed, aligned (8)));
439
425struct ipr_ioarcb_add_data { 440struct ipr_ioarcb_add_data {
426 union { 441 union {
427 struct ipr_ioarcb_ata_regs regs; 442 struct ipr_ioarcb_ata_regs regs;
443 struct ipr_ioadl_desc ioadl[5];
428 __be32 add_cmd_parms[10]; 444 __be32 add_cmd_parms[10];
429 }u; 445 }u;
430}__attribute__ ((packed, aligned(4))); 446}__attribute__ ((packed, aligned(4)));
@@ -456,21 +472,6 @@ struct ipr_ioarcb {
456 struct ipr_ioarcb_add_data add_data; 472 struct ipr_ioarcb_add_data add_data;
457}__attribute__((packed, aligned (4))); 473}__attribute__((packed, aligned (4)));
458 474
459struct ipr_ioadl_desc {
460 __be32 flags_and_data_len;
461#define IPR_IOADL_FLAGS_MASK 0xff000000
462#define IPR_IOADL_GET_FLAGS(x) (be32_to_cpu(x) & IPR_IOADL_FLAGS_MASK)
463#define IPR_IOADL_DATA_LEN_MASK 0x00ffffff
464#define IPR_IOADL_GET_DATA_LEN(x) (be32_to_cpu(x) & IPR_IOADL_DATA_LEN_MASK)
465#define IPR_IOADL_FLAGS_READ 0x48000000
466#define IPR_IOADL_FLAGS_READ_LAST 0x49000000
467#define IPR_IOADL_FLAGS_WRITE 0x68000000
468#define IPR_IOADL_FLAGS_WRITE_LAST 0x69000000
469#define IPR_IOADL_FLAGS_LAST 0x01000000
470
471 __be32 address;
472}__attribute__((packed, aligned (8)));
473
474struct ipr_ioasa_vset { 475struct ipr_ioasa_vset {
475 __be32 failing_lba_hi; 476 __be32 failing_lba_hi;
476 __be32 failing_lba_lo; 477 __be32 failing_lba_lo;