diff options
| -rw-r--r-- | drivers/ata/libata-core.c | 11 | ||||
| -rw-r--r-- | drivers/ata/libata-eh.c | 29 | ||||
| -rw-r--r-- | drivers/ata/libata-scsi.c | 2 | ||||
| -rw-r--r-- | include/linux/libata.h | 4 |
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 | ||
| 5357 | static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg, | 5358 | static 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 | ||
| 6107 | void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg) | 6110 | void 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); | |||
| 6363 | EXPORT_SYMBOL_GPL(sata_scr_write_flush); | 6368 | EXPORT_SYMBOL_GPL(sata_scr_write_flush); |
| 6364 | EXPORT_SYMBOL_GPL(ata_port_online); | 6369 | EXPORT_SYMBOL_GPL(ata_port_online); |
| 6365 | EXPORT_SYMBOL_GPL(ata_port_offline); | 6370 | EXPORT_SYMBOL_GPL(ata_port_offline); |
| 6371 | #ifdef CONFIG_PM | ||
| 6366 | EXPORT_SYMBOL_GPL(ata_host_suspend); | 6372 | EXPORT_SYMBOL_GPL(ata_host_suspend); |
| 6367 | EXPORT_SYMBOL_GPL(ata_host_resume); | 6373 | EXPORT_SYMBOL_GPL(ata_host_resume); |
| 6374 | #endif /* CONFIG_PM */ | ||
| 6368 | EXPORT_SYMBOL_GPL(ata_id_string); | 6375 | EXPORT_SYMBOL_GPL(ata_id_string); |
| 6369 | EXPORT_SYMBOL_GPL(ata_id_c_string); | 6376 | EXPORT_SYMBOL_GPL(ata_id_c_string); |
| 6370 | EXPORT_SYMBOL_GPL(ata_id_to_dma_mode); | 6377 | EXPORT_SYMBOL_GPL(ata_id_to_dma_mode); |
| @@ -6380,16 +6387,20 @@ EXPORT_SYMBOL_GPL(pci_test_config_bits); | |||
| 6380 | EXPORT_SYMBOL_GPL(ata_pci_init_native_mode); | 6387 | EXPORT_SYMBOL_GPL(ata_pci_init_native_mode); |
| 6381 | EXPORT_SYMBOL_GPL(ata_pci_init_one); | 6388 | EXPORT_SYMBOL_GPL(ata_pci_init_one); |
| 6382 | EXPORT_SYMBOL_GPL(ata_pci_remove_one); | 6389 | EXPORT_SYMBOL_GPL(ata_pci_remove_one); |
| 6390 | #ifdef CONFIG_PM | ||
| 6383 | EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend); | 6391 | EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend); |
| 6384 | EXPORT_SYMBOL_GPL(ata_pci_device_do_resume); | 6392 | EXPORT_SYMBOL_GPL(ata_pci_device_do_resume); |
| 6385 | EXPORT_SYMBOL_GPL(ata_pci_device_suspend); | 6393 | EXPORT_SYMBOL_GPL(ata_pci_device_suspend); |
| 6386 | EXPORT_SYMBOL_GPL(ata_pci_device_resume); | 6394 | EXPORT_SYMBOL_GPL(ata_pci_device_resume); |
| 6395 | #endif /* CONFIG_PM */ | ||
| 6387 | EXPORT_SYMBOL_GPL(ata_pci_default_filter); | 6396 | EXPORT_SYMBOL_GPL(ata_pci_default_filter); |
| 6388 | EXPORT_SYMBOL_GPL(ata_pci_clear_simplex); | 6397 | EXPORT_SYMBOL_GPL(ata_pci_clear_simplex); |
| 6389 | #endif /* CONFIG_PCI */ | 6398 | #endif /* CONFIG_PCI */ |
| 6390 | 6399 | ||
| 6400 | #ifdef CONFIG_PM | ||
| 6391 | EXPORT_SYMBOL_GPL(ata_scsi_device_suspend); | 6401 | EXPORT_SYMBOL_GPL(ata_scsi_device_suspend); |
| 6392 | EXPORT_SYMBOL_GPL(ata_scsi_device_resume); | 6402 | EXPORT_SYMBOL_GPL(ata_scsi_device_resume); |
| 6403 | #endif /* CONFIG_PM */ | ||
| 6393 | 6404 | ||
| 6394 | EXPORT_SYMBOL_GPL(ata_eng_timeout); | 6405 | EXPORT_SYMBOL_GPL(ata_eng_timeout); |
| 6395 | EXPORT_SYMBOL_GPL(ata_port_schedule_eh); | 6406 | EXPORT_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 | ||
| 53 | static void __ata_port_freeze(struct ata_port *ap); | 53 | static void __ata_port_freeze(struct ata_port *ap); |
| 54 | static void ata_eh_finish(struct ata_port *ap); | 54 | static void ata_eh_finish(struct ata_port *ap); |
| 55 | #ifdef CONFIG_PM | ||
| 55 | static void ata_eh_handle_port_suspend(struct ata_port *ap); | 56 | static void ata_eh_handle_port_suspend(struct ata_port *ap); |
| 56 | static void ata_eh_handle_port_resume(struct ata_port *ap); | 57 | static void ata_eh_handle_port_resume(struct ata_port *ap); |
| 58 | static int ata_eh_suspend(struct ata_port *ap, | ||
| 59 | struct ata_device **r_failed_dev); | ||
| 60 | static void ata_eh_prep_resume(struct ata_port *ap); | ||
| 61 | static int ata_eh_resume(struct ata_port *ap, struct ata_device **r_failed_dev); | ||
| 62 | #else /* CONFIG_PM */ | ||
| 63 | static void ata_eh_handle_port_suspend(struct ata_port *ap) | ||
| 64 | { } | ||
| 65 | |||
| 66 | static void ata_eh_handle_port_resume(struct ata_port *ap) | ||
| 67 | { } | ||
| 68 | |||
| 69 | static int ata_eh_suspend(struct ata_port *ap, struct ata_device **r_failed_dev) | ||
| 70 | { | ||
| 71 | return 0; | ||
| 72 | } | ||
| 73 | |||
| 74 | static void ata_eh_prep_resume(struct ata_port *ap) | ||
| 75 | { } | ||
| 76 | |||
| 77 | static 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 | ||
| 58 | static void ata_ering_record(struct ata_ering *ering, int is_io, | 83 | static 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 | ||
| 1951 | static int ata_port_nr_enabled(struct ata_port *ap) | 1978 | static 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); | |||
| 718 | extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, | 718 | extern 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); |
| 720 | extern void ata_pci_remove_one (struct pci_dev *pdev); | 720 | extern void ata_pci_remove_one (struct pci_dev *pdev); |
| 721 | #ifdef CONFIG_PM | ||
| 721 | extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg); | 722 | extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg); |
| 722 | extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev); | 723 | extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev); |
| 723 | extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg); | 724 | extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg); |
| 724 | extern int ata_pci_device_resume(struct pci_dev *pdev); | 725 | extern int ata_pci_device_resume(struct pci_dev *pdev); |
| 726 | #endif | ||
| 725 | extern int ata_pci_clear_simplex(struct pci_dev *pdev); | 727 | extern int ata_pci_clear_simplex(struct pci_dev *pdev); |
| 726 | #endif /* CONFIG_PCI */ | 728 | #endif /* CONFIG_PCI */ |
| 727 | extern int ata_device_add(const struct ata_probe_ent *ent); | 729 | extern 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); | |||
| 747 | extern int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val); | 749 | extern int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val); |
| 748 | extern int ata_port_online(struct ata_port *ap); | 750 | extern int ata_port_online(struct ata_port *ap); |
| 749 | extern int ata_port_offline(struct ata_port *ap); | 751 | extern int ata_port_offline(struct ata_port *ap); |
| 752 | #ifdef CONFIG_PM | ||
| 750 | extern int ata_scsi_device_resume(struct scsi_device *); | 753 | extern int ata_scsi_device_resume(struct scsi_device *); |
| 751 | extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t mesg); | 754 | extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t mesg); |
| 752 | extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); | 755 | extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); |
| 753 | extern void ata_host_resume(struct ata_host *host); | 756 | extern void ata_host_resume(struct ata_host *host); |
| 757 | #endif | ||
| 754 | extern int ata_ratelimit(void); | 758 | extern int ata_ratelimit(void); |
| 755 | extern int ata_busy_sleep(struct ata_port *ap, | 759 | extern int ata_busy_sleep(struct ata_port *ap, |
| 756 | unsigned long timeout_pat, unsigned long timeout); | 760 | unsigned long timeout_pat, unsigned long timeout); |
