aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-11-17 17:59:52 -0800
committerJames Bottomley <JBottomley@Parallels.com>2012-02-19 13:55:42 -0600
commitb91bb296188118eea9fdc6093cfcf76bbe8589ba (patch)
tree8fe9dda8894514f9cd1184368eab975583c12f3c /include/scsi
parent[SCSI] libsas: prevent domain rediscovery competing with ata error handling (diff)
downloadlinux-dev-b91bb296188118eea9fdc6093cfcf76bbe8589ba.tar.xz
linux-dev-b91bb296188118eea9fdc6093cfcf76bbe8589ba.zip
[SCSI] libsas: use ->set_dmamode to notify lldds of NCQ parameters
sas_discover_sata() notifies lldds of sata devices twice. Once to allow the 'identify' to be sent, and a second time to allow aic94xx (the only libsas driver that cares about sata_dev.identify) to setup NCQ parameters before the device becomes known to the midlayer. Replace this double notification and intervening 'identify' with an explicit ->lldd_ata_set_dmamode notification. With this change all ata internal commands are issued by libata, so we no longer need sas_issue_ata_cmd(). The data from the identify command only needs to be cached in one location so ata_device.id replaces domain_device.sata_dev.identify. Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/libsas.h4
1 files changed, 1 insertions, 3 deletions
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
index bd6e89ece2ab..9c13a5c0bb3a 100644
--- a/include/scsi/libsas.h
+++ b/include/scsi/libsas.h
@@ -164,9 +164,6 @@ enum ata_command_set {
struct sata_device {
enum ata_command_set command_set;
struct smp_resp rps_resp; /* report_phy_sata_resp */
- __le16 *identify_device;
- __le16 *identify_packet_device;
-
u8 port_no; /* port number, if this is a PM (Port) */
struct list_head children; /* PM Ports if this is a PM */
@@ -609,6 +606,7 @@ struct sas_domain_function_template {
int (*lldd_clear_task_set)(struct domain_device *, u8 *lun);
int (*lldd_I_T_nexus_reset)(struct domain_device *);
int (*lldd_ata_soft_reset)(struct domain_device *);
+ void (*lldd_ata_set_dmamode)(struct domain_device *);
int (*lldd_lu_reset)(struct domain_device *, u8 *lun);
int (*lldd_query_task)(struct sas_task *);