Skip to content
  • Rafael J. Wysocki's avatar
    PCI / ACPI / PM: Platform support for PCI PME wake-up · b67ea761
    Rafael J. Wysocki authored
    
    
    Although the majority of PCI devices can generate PMEs that in
    principle may be used to wake up devices suspended at run time,
    platform support is generally necessary to convert PMEs into wake-up
    events that can be delivered to the kernel.  If ACPI is used for this
    purpose, PME signals generated by a PCI device will trigger the ACPI
    GPE associated with the device to generate an ACPI wake-up event that
    we can set up a handler for, provided that everything is configured
    correctly.
    
    Unfortunately, the subset of PCI devices that have GPEs associated
    with them is quite limited.  The devices without dedicated GPEs have
    to rely on the GPEs associated with other devices (in the majority of
    cases their upstream bridges and, possibly, the root bridge) to
    generate ACPI wake-up events in response to PME signals from them.
    
    Add ACPI platform support for PCI PME wake-up:
    o Add a framework making is possible to use ACPI system notify
      handlers for run-time PM.
    o Add new PCI platform callback ->run_wake() to struct
      pci_platform_pm_ops allowing us to enable/disable the platform to
      generate wake-up events for given device.  Implemet this callback
      for the ACPI platform.
    o Define ACPI wake-up handlers for PCI devices and PCI root buses and
      make the PCI-ACPI binding code register wake-up notifiers for all
      PCI devices present in the ACPI tables.
    o Add function pci_dev_run_wake() which can be used by PCI drivers to
      check if given device is capable of generating wake-up events at
      run time.
    
    Developed in cooperation with Matthew Garrett <mjg@redhat.com>.
    
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    b67ea761