diff options
author | James Bottomley <JBottomley@Parallels.com> | 2013-05-07 18:38:18 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-06-04 14:15:59 -0400 |
commit | e73823f7a2c921dcf068d34ea03bd682498d9e42 (patch) | |
tree | 8b5b2262352572b3069a671f7578ea6d5ef07162 /drivers/scsi/aic94xx | |
parent | 9edf7d75ee5f21663a0183d21f702682d0ef132f (diff) |
[SCSI] libsas: implement > 16 byte CDB support
Remove the arbitrary expectation in libsas that all SCSI commands are 16 bytes
or less. Instead do all copies via cmd->cmd_len (and use a pointer to this in
the libsas task instead of a copy). Note that this still doesn't enable > 16
byte CDB support in the underlying drivers because their internal format has
to be fixed and the wire format of > 16 byte CDBs according to the SAS spec is
different. the libsas drivers (isci, aic94xx, mvsas and pm8xxx are all
updated for this change.
Cc: Lukasz Dorau <lukasz.dorau@intel.com>
Cc: Maciej Patelczyk <maciej.patelczyk@intel.com>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Jack Wang <xjtuwjp@gmail.com>
Cc: Lindar Liu <lindar_liu@usish.com>
Cc: Xiangliang Yu <yuxiangl@marvell.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/aic94xx')
-rw-r--r-- | drivers/scsi/aic94xx/aic94xx_task.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/aic94xx/aic94xx_task.c b/drivers/scsi/aic94xx/aic94xx_task.c index 393e7ce8e95a..59b86e260ce9 100644 --- a/drivers/scsi/aic94xx/aic94xx_task.c +++ b/drivers/scsi/aic94xx/aic94xx_task.c | |||
@@ -505,7 +505,8 @@ static int asd_build_ssp_ascb(struct asd_ascb *ascb, struct sas_task *task, | |||
505 | scb->ssp_task.ssp_cmd.efb_prio_attr |= EFB_MASK; | 505 | scb->ssp_task.ssp_cmd.efb_prio_attr |= EFB_MASK; |
506 | scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_prio << 3); | 506 | scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_prio << 3); |
507 | scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_attr & 7); | 507 | scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_attr & 7); |
508 | memcpy(scb->ssp_task.ssp_cmd.cdb, task->ssp_task.cdb, 16); | 508 | memcpy(scb->ssp_task.ssp_cmd.cdb, task->ssp_task.cmd->cmnd, |
509 | task->ssp_task.cmd->cmd_len); | ||
509 | 510 | ||
510 | scb->ssp_task.sister_scb = cpu_to_le16(0xFFFF); | 511 | scb->ssp_task.sister_scb = cpu_to_le16(0xFFFF); |
511 | scb->ssp_task.conn_handle = cpu_to_le16( | 512 | scb->ssp_task.conn_handle = cpu_to_le16( |