aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAaron Lu <aaron.lu@intel.com>2013-08-22 22:17:54 -0400
committerTejun Heo <tj@kernel.org>2013-08-23 12:09:23 -0400
commitf1bc1e4c44b1b78fe34431936c60759b5aad5e3f (patch)
tree8412ab2e71faa0e8d55be7a4565090af6669d4fa /include
parent2b79c56fb41d3956f672990fe83e342a809c89ab (diff)
ata: acpi: rework the ata acpi bind support
Binding ACPI handle to SCSI device has several drawbacks, namely: 1 During ATA device initialization time, ACPI handle will be needed while SCSI devices are not created yet. So each time ACPI handle is needed, instead of retrieving the handle by ACPI_HANDLE macro, a namespace scan is performed to find the handle for the corresponding ATA device. This is inefficient, and also expose a restriction on calling path not holding any lock. 2 The binding to SCSI device tree makes code complex, while at the same time doesn't bring us any benefit. All ACPI handlings are still done in ATA module, not in SCSI. Rework the ATA ACPI binding code to bind ACPI handle to ATA transport devices(ATA port and ATA device). The binding needs to be done only once, since the ATA transport devices do not go away with hotplug. And due to this, the flush_work call in hotplug handler for ATA bay is no longer needed. Tested on an Intel test platform for binding and runtime power off for ODD(ZPODD) and hard disk; on an ASUS S400C for binding and normal boot and S3, where its SATA port node has _SDD and _GTF control methods when configured as an AHCI controller and its PATA device node has _GTF control method when configured as an IDE controller. SATA PMP binding and ATA hotplug is not tested. Signed-off-by: Aaron Lu <aaron.lu@intel.com> Tested-by: Dirk Griesbach <spamthis@freenet.de> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/libata.h2
1 files changed, 0 insertions, 2 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 283d66bc603c..3198617905e1 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1244,8 +1244,6 @@ int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm);
1244int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm); 1244int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm);
1245unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev, 1245unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev,
1246 const struct ata_acpi_gtm *gtm); 1246 const struct ata_acpi_gtm *gtm);
1247acpi_handle ata_ap_acpi_handle(struct ata_port *ap);
1248acpi_handle ata_dev_acpi_handle(struct ata_device *dev);
1249int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm); 1247int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm);
1250#else 1248#else
1251static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap) 1249static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)