aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci.h
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2008-07-06 21:34:48 -0400
committerJesse Barnes <jbarnes@virtuousgeek.org>2008-07-07 19:26:28 -0400
commiteb9d0fe40e313c0a74115ef456a2e43a6c8da72f (patch)
tree7a90a68b8dc152d49a38469fd6a6a7840954bac2 /drivers/pci/pci.h
parent0af4b8c4fb31193dc666f4893107a18fef82baab (diff)
PCI ACPI: Rework PCI handling of wake-up
* Introduce function acpi_pm_device_sleep_wake() for enabling and disabling the system wake-up capability of devices that are power manageable by ACPI. * Introduce function acpi_bus_can_wakeup() allowing other (dependent) subsystems to check if ACPI is able to enable the system wake-up capability of given device. * Introduce callback .sleep_wake() in struct pci_platform_pm_ops and for the ACPI PCI 'driver' make it use acpi_pm_device_sleep_wake(). * Introduce callback .can_wakeup() in struct pci_platform_pm_ops and for the ACPI 'driver' make it use acpi_bus_can_wakeup(). * Move the PME# handlig code out of pci_enable_wake() and split it into two functions, pci_pme_capable() and pci_pme_active(), allowing the caller to check if given device is capable of generating PME# from given power state and to enable/disable the device's PME# functionality, respectively. * Modify pci_enable_wake() to use the new ACPI callbacks and the new PME#-related functions. * Drop the generic .platform_enable_wakeup() callback that is not used any more. * Introduce device_set_wakeup_capable() that will set the power.can_wakeup flag of given device. * Rework PCI device PM initialization so that, if given device is capable of generating wake-up events, either natively through the PME# mechanism, or with the help of the platform, its power.can_wakeup flag is set and its power.should_wakeup flag is unset as appropriate. * Make ACPI set the power.can_wakeup flag for devices found to be wake-up capable by it. * Make the ACPI wake-up code enable/disable GPEs for devices that have the wakeup.flags.prepared flag set (which means that their wake-up power has been enabled). Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci/pci.h')
-rw-r--r--drivers/pci/pci.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 0cd2e719933b..b08dfc9746af 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -17,6 +17,11 @@ extern void pci_cleanup_rom(struct pci_dev *dev);
17 * platform; to be used during system-wide transitions from a 17 * platform; to be used during system-wide transitions from a
18 * sleeping state to the working state and vice versa 18 * sleeping state to the working state and vice versa
19 * 19 *
20 * @can_wakeup - returns 'true' if given device is capable of waking up the
21 * system from a sleeping state
22 *
23 * @sleep_wake - enables/disables the system wake up capability of given device
24 *
20 * If given platform is generally capable of power managing PCI devices, all of 25 * If given platform is generally capable of power managing PCI devices, all of
21 * these callbacks are mandatory. 26 * these callbacks are mandatory.
22 */ 27 */
@@ -24,9 +29,12 @@ struct pci_platform_pm_ops {
24 bool (*is_manageable)(struct pci_dev *dev); 29 bool (*is_manageable)(struct pci_dev *dev);
25 int (*set_state)(struct pci_dev *dev, pci_power_t state); 30 int (*set_state)(struct pci_dev *dev, pci_power_t state);
26 pci_power_t (*choose_state)(struct pci_dev *dev); 31 pci_power_t (*choose_state)(struct pci_dev *dev);
32 bool (*can_wakeup)(struct pci_dev *dev);
33 int (*sleep_wake)(struct pci_dev *dev, bool enable);
27}; 34};
28 35
29extern int pci_set_platform_pm(struct pci_platform_pm_ops *ops); 36extern int pci_set_platform_pm(struct pci_platform_pm_ops *ops);
37extern void pci_pm_init(struct pci_dev *dev);
30 38
31extern int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val); 39extern int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
32extern int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val); 40extern int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);