aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-core.c11
-rw-r--r--drivers/ata/libata-eh.c29
-rw-r--r--drivers/ata/libata-scsi.c2
-rw-r--r--include/linux/libata.h4
4 files changed, 46 insertions, 0 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 606145eeba44..dc362fa01ca4 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5354,6 +5354,7 @@ int ata_flush_cache(struct ata_device *dev)
5354 return 0; 5354 return 0;
5355} 5355}
5356 5356
5357#ifdef CONFIG_PM
5357static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg, 5358static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg,
5358 unsigned int action, unsigned int ehi_flags, 5359 unsigned int action, unsigned int ehi_flags,
5359 int wait) 5360 int wait)
@@ -5469,6 +5470,7 @@ void ata_host_resume(struct ata_host *host)
5469 ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, 0); 5470 ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, 0);
5470 host->dev->power.power_state = PMSG_ON; 5471 host->dev->power.power_state = PMSG_ON;
5471} 5472}
5473#endif
5472 5474
5473/** 5475/**
5474 * ata_port_start - Set port up for dma. 5476 * ata_port_start - Set port up for dma.
@@ -6104,6 +6106,7 @@ int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits)
6104 return (tmp == bits->val) ? 1 : 0; 6106 return (tmp == bits->val) ? 1 : 0;
6105} 6107}
6106 6108
6109#ifdef CONFIG_PM
6107void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg) 6110void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg)
6108{ 6111{
6109 pci_save_state(pdev); 6112 pci_save_state(pdev);
@@ -6155,6 +6158,8 @@ int ata_pci_device_resume(struct pci_dev *pdev)
6155 ata_host_resume(host); 6158 ata_host_resume(host);
6156 return rc; 6159 return rc;
6157} 6160}
6161#endif /* CONFIG_PM */
6162
6158#endif /* CONFIG_PCI */ 6163#endif /* CONFIG_PCI */
6159 6164
6160 6165
@@ -6363,8 +6368,10 @@ EXPORT_SYMBOL_GPL(sata_scr_write);
6363EXPORT_SYMBOL_GPL(sata_scr_write_flush); 6368EXPORT_SYMBOL_GPL(sata_scr_write_flush);
6364EXPORT_SYMBOL_GPL(ata_port_online); 6369EXPORT_SYMBOL_GPL(ata_port_online);
6365EXPORT_SYMBOL_GPL(ata_port_offline); 6370EXPORT_SYMBOL_GPL(ata_port_offline);
6371#ifdef CONFIG_PM
6366EXPORT_SYMBOL_GPL(ata_host_suspend); 6372EXPORT_SYMBOL_GPL(ata_host_suspend);
6367EXPORT_SYMBOL_GPL(ata_host_resume); 6373EXPORT_SYMBOL_GPL(ata_host_resume);
6374#endif /* CONFIG_PM */
6368EXPORT_SYMBOL_GPL(ata_id_string); 6375EXPORT_SYMBOL_GPL(ata_id_string);
6369EXPORT_SYMBOL_GPL(ata_id_c_string); 6376EXPORT_SYMBOL_GPL(ata_id_c_string);
6370EXPORT_SYMBOL_GPL(ata_id_to_dma_mode); 6377EXPORT_SYMBOL_GPL(ata_id_to_dma_mode);
@@ -6380,16 +6387,20 @@ EXPORT_SYMBOL_GPL(pci_test_config_bits);
6380EXPORT_SYMBOL_GPL(ata_pci_init_native_mode); 6387EXPORT_SYMBOL_GPL(ata_pci_init_native_mode);
6381EXPORT_SYMBOL_GPL(ata_pci_init_one); 6388EXPORT_SYMBOL_GPL(ata_pci_init_one);
6382EXPORT_SYMBOL_GPL(ata_pci_remove_one); 6389EXPORT_SYMBOL_GPL(ata_pci_remove_one);
6390#ifdef CONFIG_PM
6383EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend); 6391EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend);
6384EXPORT_SYMBOL_GPL(ata_pci_device_do_resume); 6392EXPORT_SYMBOL_GPL(ata_pci_device_do_resume);
6385EXPORT_SYMBOL_GPL(ata_pci_device_suspend); 6393EXPORT_SYMBOL_GPL(ata_pci_device_suspend);
6386EXPORT_SYMBOL_GPL(ata_pci_device_resume); 6394EXPORT_SYMBOL_GPL(ata_pci_device_resume);
6395#endif /* CONFIG_PM */
6387EXPORT_SYMBOL_GPL(ata_pci_default_filter); 6396EXPORT_SYMBOL_GPL(ata_pci_default_filter);
6388EXPORT_SYMBOL_GPL(ata_pci_clear_simplex); 6397EXPORT_SYMBOL_GPL(ata_pci_clear_simplex);
6389#endif /* CONFIG_PCI */ 6398#endif /* CONFIG_PCI */
6390 6399
6400#ifdef CONFIG_PM
6391EXPORT_SYMBOL_GPL(ata_scsi_device_suspend); 6401EXPORT_SYMBOL_GPL(ata_scsi_device_suspend);
6392EXPORT_SYMBOL_GPL(ata_scsi_device_resume); 6402EXPORT_SYMBOL_GPL(ata_scsi_device_resume);
6403#endif /* CONFIG_PM */
6393 6404
6394EXPORT_SYMBOL_GPL(ata_eng_timeout); 6405EXPORT_SYMBOL_GPL(ata_eng_timeout);
6395EXPORT_SYMBOL_GPL(ata_port_schedule_eh); 6406EXPORT_SYMBOL_GPL(ata_port_schedule_eh);
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index cad0d6db6df5..7349c3dbf774 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -52,8 +52,33 @@ enum {
52 52
53static void __ata_port_freeze(struct ata_port *ap); 53static void __ata_port_freeze(struct ata_port *ap);
54static void ata_eh_finish(struct ata_port *ap); 54static void ata_eh_finish(struct ata_port *ap);
55#ifdef CONFIG_PM
55static void ata_eh_handle_port_suspend(struct ata_port *ap); 56static void ata_eh_handle_port_suspend(struct ata_port *ap);
56static void ata_eh_handle_port_resume(struct ata_port *ap); 57static void ata_eh_handle_port_resume(struct ata_port *ap);
58static int ata_eh_suspend(struct ata_port *ap,
59 struct ata_device **r_failed_dev);
60static void ata_eh_prep_resume(struct ata_port *ap);
61static int ata_eh_resume(struct ata_port *ap, struct ata_device **r_failed_dev);
62#else /* CONFIG_PM */
63static void ata_eh_handle_port_suspend(struct ata_port *ap)
64{ }
65
66static void ata_eh_handle_port_resume(struct ata_port *ap)
67{ }
68
69static int ata_eh_suspend(struct ata_port *ap, struct ata_device **r_failed_dev)
70{
71 return 0;
72}
73
74static void ata_eh_prep_resume(struct ata_port *ap)
75{ }
76
77static int ata_eh_resume(struct ata_port *ap, struct ata_device **r_failed_dev)
78{
79 return 0;
80}
81#endif /* CONFIG_PM */
57 82
58static void ata_ering_record(struct ata_ering *ering, int is_io, 83static void ata_ering_record(struct ata_ering *ering, int is_io,
59 unsigned int err_mask) 84 unsigned int err_mask)
@@ -1790,6 +1815,7 @@ static int ata_eh_revalidate_and_attach(struct ata_port *ap,
1790 return rc; 1815 return rc;
1791} 1816}
1792 1817
1818#ifdef CONFIG_PM
1793/** 1819/**
1794 * ata_eh_suspend - handle suspend EH action 1820 * ata_eh_suspend - handle suspend EH action
1795 * @ap: target host port 1821 * @ap: target host port
@@ -1947,6 +1973,7 @@ static int ata_eh_resume(struct ata_port *ap, struct ata_device **r_failed_dev)
1947 DPRINTK("EXIT\n"); 1973 DPRINTK("EXIT\n");
1948 return 0; 1974 return 0;
1949} 1975}
1976#endif /* CONFIG_PM */
1950 1977
1951static int ata_port_nr_enabled(struct ata_port *ap) 1978static int ata_port_nr_enabled(struct ata_port *ap)
1952{ 1979{
@@ -2249,6 +2276,7 @@ void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
2249 ata_eh_finish(ap); 2276 ata_eh_finish(ap);
2250} 2277}
2251 2278
2279#ifdef CONFIG_PM
2252/** 2280/**
2253 * ata_eh_handle_port_suspend - perform port suspend operation 2281 * ata_eh_handle_port_suspend - perform port suspend operation
2254 * @ap: port to suspend 2282 * @ap: port to suspend
@@ -2364,3 +2392,4 @@ static void ata_eh_handle_port_resume(struct ata_port *ap)
2364 } 2392 }
2365 spin_unlock_irqrestore(ap->lock, flags); 2393 spin_unlock_irqrestore(ap->lock, flags);
2366} 2394}
2395#endif /* CONFIG_PM */
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 00a9a6c8f83c..6cc817a10204 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -510,6 +510,7 @@ static void ata_dump_status(unsigned id, struct ata_taskfile *tf)
510 } 510 }
511} 511}
512 512
513#ifdef CONFIG_PM
513/** 514/**
514 * ata_scsi_device_suspend - suspend ATA device associated with sdev 515 * ata_scsi_device_suspend - suspend ATA device associated with sdev
515 * @sdev: the SCSI device to suspend 516 * @sdev: the SCSI device to suspend
@@ -634,6 +635,7 @@ int ata_scsi_device_resume(struct scsi_device *sdev)
634 sdev->sdev_gendev.power.power_state = PMSG_ON; 635 sdev->sdev_gendev.power.power_state = PMSG_ON;
635 return 0; 636 return 0;
636} 637}
638#endif /* CONFIG_PM */
637 639
638/** 640/**
639 * ata_to_sense_error - convert ATA error to SCSI error 641 * ata_to_sense_error - convert ATA error to SCSI error
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 3f89d13c2e9a..e3f32f3189b2 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -718,10 +718,12 @@ extern void ata_std_ports(struct ata_ioports *ioaddr);
718extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, 718extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
719 unsigned int n_ports); 719 unsigned int n_ports);
720extern void ata_pci_remove_one (struct pci_dev *pdev); 720extern void ata_pci_remove_one (struct pci_dev *pdev);
721#ifdef CONFIG_PM
721extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg); 722extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg);
722extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev); 723extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev);
723extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg); 724extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
724extern int ata_pci_device_resume(struct pci_dev *pdev); 725extern int ata_pci_device_resume(struct pci_dev *pdev);
726#endif
725extern int ata_pci_clear_simplex(struct pci_dev *pdev); 727extern int ata_pci_clear_simplex(struct pci_dev *pdev);
726#endif /* CONFIG_PCI */ 728#endif /* CONFIG_PCI */
727extern int ata_device_add(const struct ata_probe_ent *ent); 729extern int ata_device_add(const struct ata_probe_ent *ent);
@@ -747,10 +749,12 @@ extern int sata_scr_write(struct ata_port *ap, int reg, u32 val);
747extern int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val); 749extern int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val);
748extern int ata_port_online(struct ata_port *ap); 750extern int ata_port_online(struct ata_port *ap);
749extern int ata_port_offline(struct ata_port *ap); 751extern int ata_port_offline(struct ata_port *ap);
752#ifdef CONFIG_PM
750extern int ata_scsi_device_resume(struct scsi_device *); 753extern int ata_scsi_device_resume(struct scsi_device *);
751extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t mesg); 754extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t mesg);
752extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); 755extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
753extern void ata_host_resume(struct ata_host *host); 756extern void ata_host_resume(struct ata_host *host);
757#endif
754extern int ata_ratelimit(void); 758extern int ata_ratelimit(void);
755extern int ata_busy_sleep(struct ata_port *ap, 759extern int ata_busy_sleep(struct ata_port *ap,
756 unsigned long timeout_pat, unsigned long timeout); 760 unsigned long timeout_pat, unsigned long timeout);