/** * pci_acpi_wake_bus - Wake-up notification handler for root buses. * @handle: ACPI handle of a device the notification is for. * @event: Type of the signaled event. * @context: PCI root bus to wake up devices on. */ static void pci_acpi_wake_bus(acpi_handle handle, u32 event, void *context) { struct pci_bus *pci_bus = context; if (event == ACPI_NOTIFY_DEVICE_WAKE && pci_bus) pci_pme_wakeup_bus(pci_bus); }
/** * pci_acpi_wake_dev - Wake-up notification handler for PCI devices. * @handle: ACPI handle of a device the notification is for. * @event: Type of the signaled event. * @context: PCI device object to wake up. */ static void pci_acpi_wake_dev(acpi_handle handle, u32 event, void *context) { struct pci_dev *pci_dev = context; if (event != ACPI_NOTIFY_DEVICE_WAKE || !pci_dev) return; if (pci_dev->current_state == PCI_D3cold) { pci_wakeup_event(pci_dev); pm_runtime_resume(&pci_dev->dev); return; } /* Clear PME Status if set. */ if (pci_dev->pme_support) pci_check_pme_status(pci_dev); if (pci_dev->pme_poll) pci_dev->pme_poll = false; pci_wakeup_event(pci_dev); pm_runtime_resume(&pci_dev->dev); if (pci_dev->subordinate) pci_pme_wakeup_bus(pci_dev->subordinate); }
/** * pci_acpi_wake_dev - PCI device wakeup notification work function. * @handle: ACPI handle of a device the notification is for. * @work: Work item to handle. */ static void pci_acpi_wake_dev(struct work_struct *work) { struct acpi_device_wakeup_context *context; struct pci_dev *pci_dev; context = container_of(work, struct acpi_device_wakeup_context, work); pci_dev = to_pci_dev(context->dev); if (pci_dev->pme_poll) pci_dev->pme_poll = false; if (pci_dev->current_state == PCI_D3cold) { pci_wakeup_event(pci_dev); pm_runtime_resume(&pci_dev->dev); return; } /* Clear PME Status if set. */ if (pci_dev->pme_support) pci_check_pme_status(pci_dev); pci_wakeup_event(pci_dev); pm_runtime_resume(&pci_dev->dev); pci_pme_wakeup_bus(pci_dev->subordinate); }
/** * pci_acpi_wake_bus - Root bus wakeup notification fork function. * @context: Device wakeup context. */ static void pci_acpi_wake_bus(struct acpi_device_wakeup_context *context) { struct acpi_device *adev; struct acpi_pci_root *root; adev = container_of(context, struct acpi_device, wakeup.context); root = acpi_driver_data(adev); pci_pme_wakeup_bus(root->bus); }
/** * pci_acpi_wake_bus - Root bus wakeup notification fork function. * @work: Work item to handle. */ static void pci_acpi_wake_bus(struct work_struct *work) { struct acpi_device *adev; struct acpi_pci_root *root; adev = container_of(work, struct acpi_device, wakeup.context.work); root = acpi_driver_data(adev); pci_pme_wakeup_bus(root->bus); }
/** * pci_acpi_wake_dev - Wake-up notification handler for PCI devices. * @handle: ACPI handle of a device the notification is for. * @event: Type of the signaled event. * @context: PCI device object to wake up. */ static void pci_acpi_wake_dev(acpi_handle handle, u32 event, void *context) { struct pci_dev *pci_dev = context; if (event == ACPI_NOTIFY_DEVICE_WAKE && pci_dev) { pci_check_pme_status(pci_dev); pm_runtime_resume(&pci_dev->dev); if (pci_dev->subordinate) pci_pme_wakeup_bus(pci_dev->subordinate); } }
static void pci_acpi_wake_dev(acpi_handle handle, u32 event, void *context) { struct pci_dev *pci_dev = context; if (event != ACPI_NOTIFY_DEVICE_WAKE || !pci_dev) return; if (!pci_dev->pm_cap || !pci_dev->pme_support || pci_check_pme_status(pci_dev)) { if (pci_dev->pme_poll) pci_dev->pme_poll = false; pci_wakeup_event(pci_dev); pm_runtime_resume(&pci_dev->dev); } if (pci_dev->subordinate) pci_pme_wakeup_bus(pci_dev->subordinate); }