aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-05-04 15:27:47 -0400
committerJeff Garzik <jeff@garzik.org>2007-05-11 18:01:03 -0400
commit9666f4009c22f6520ac3fb8a19c9e32ab973e828 (patch)
treeeaac13cd5890af6298e5576a48c29891f0890bd1 /include/linux
parent0a3fd051c7036ef71b58863f8e5da7c3dabd9d3f (diff)
libata: reimplement suspend/resume support using sdev->manage_start_stop
Reimplement suspend/resume support using sdev->manage_start_stop. * Device suspend/resume is now SCSI layer's responsibility and the code is simplified a lot. * DPM is dropped. This also simplifies code a lot. Suspend/resume status is port-wide now. * ata_scsi_device_suspend/resume() and ata_dev_ready() removed. * Resume now has to wait for disk to spin up before proceeding. I couldn't find easy way out as libata is in EH waiting for the disk to be ready and sd is waiting for EH to complete to issue START_STOP. * sdev->manage_start_stop is set to 1 in ata_scsi_slave_config(). This fixes spindown on shutdown and suspend-to-disk. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/libata.h14
1 files changed, 1 insertions, 13 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 7906d750aa77..8a7cc13c8516 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -140,7 +140,6 @@ enum {
140 140
141 ATA_DFLAG_PIO = (1 << 8), /* device limited to PIO mode */ 141 ATA_DFLAG_PIO = (1 << 8), /* device limited to PIO mode */
142 ATA_DFLAG_NCQ_OFF = (1 << 9), /* device limited to non-NCQ mode */ 142 ATA_DFLAG_NCQ_OFF = (1 << 9), /* device limited to non-NCQ mode */
143 ATA_DFLAG_SUSPENDED = (1 << 10), /* device suspended */
144 ATA_DFLAG_INIT_MASK = (1 << 16) - 1, 143 ATA_DFLAG_INIT_MASK = (1 << 16) - 1,
145 144
146 ATA_DFLAG_DETACH = (1 << 16), 145 ATA_DFLAG_DETACH = (1 << 16),
@@ -268,13 +267,9 @@ enum {
268 ATA_EH_REVALIDATE = (1 << 0), 267 ATA_EH_REVALIDATE = (1 << 0),
269 ATA_EH_SOFTRESET = (1 << 1), 268 ATA_EH_SOFTRESET = (1 << 1),
270 ATA_EH_HARDRESET = (1 << 2), 269 ATA_EH_HARDRESET = (1 << 2),
271 ATA_EH_SUSPEND = (1 << 3),
272 ATA_EH_RESUME = (1 << 4),
273 ATA_EH_PM_FREEZE = (1 << 5),
274 270
275 ATA_EH_RESET_MASK = ATA_EH_SOFTRESET | ATA_EH_HARDRESET, 271 ATA_EH_RESET_MASK = ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
276 ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE | ATA_EH_SUSPEND | 272 ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE,
277 ATA_EH_RESUME | ATA_EH_PM_FREEZE,
278 273
279 /* ata_eh_info->flags */ 274 /* ata_eh_info->flags */
280 ATA_EHI_HOTPLUGGED = (1 << 0), /* could have been hotplugged */ 275 ATA_EHI_HOTPLUGGED = (1 << 0), /* could have been hotplugged */
@@ -736,8 +731,6 @@ extern int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val);
736extern int ata_port_online(struct ata_port *ap); 731extern int ata_port_online(struct ata_port *ap);
737extern int ata_port_offline(struct ata_port *ap); 732extern int ata_port_offline(struct ata_port *ap);
738#ifdef CONFIG_PM 733#ifdef CONFIG_PM
739extern int ata_scsi_device_resume(struct scsi_device *);
740extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t mesg);
741extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); 734extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
742extern void ata_host_resume(struct ata_host *host); 735extern void ata_host_resume(struct ata_host *host);
743#endif 736#endif
@@ -1008,11 +1001,6 @@ static inline unsigned int ata_dev_absent(const struct ata_device *dev)
1008 return ata_class_absent(dev->class); 1001 return ata_class_absent(dev->class);
1009} 1002}
1010 1003
1011static inline unsigned int ata_dev_ready(const struct ata_device *dev)
1012{
1013 return ata_dev_enabled(dev) && !(dev->flags & ATA_DFLAG_SUSPENDED);
1014}
1015
1016/* 1004/*
1017 * port helpers 1005 * port helpers
1018 */ 1006 */