svn commit: r353587 - head/sys/dev/acpica
John Baldwin
jhb at FreeBSD.org
Tue Oct 15 19:12:10 UTC 2019
Author: jhb
Date: Tue Oct 15 19:12:09 2019
New Revision: 353587
URL: https://svnweb.freebsd.org/changeset/base/353587
Log:
Install an ACPI PCI bus notify handler.
Rescan a PCI bus when the ACPI_NOTIFY_BUS_CHECK event is posted to a
PCI bus.
Reviewed by: scottl
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D21948
Modified:
head/sys/dev/acpica/acpi_pci.c
Modified: head/sys/dev/acpica/acpi_pci.c
==============================================================================
--- head/sys/dev/acpica/acpi_pci.c Tue Oct 15 19:04:39 2019 (r353586)
+++ head/sys/dev/acpica/acpi_pci.c Tue Oct 15 19:12:09 2019 (r353587)
@@ -331,6 +331,25 @@ acpi_pci_probe(device_t dev)
}
static void
+acpi_pci_bus_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context)
+{
+ device_t dev;
+
+ dev = context;
+
+ switch (notify) {
+ case ACPI_NOTIFY_BUS_CHECK:
+ mtx_lock(&Giant);
+ BUS_RESCAN(dev);
+ mtx_unlock(&Giant);
+ break;
+ default:
+ device_printf(dev, "unknown notify %#x\n", notify);
+ break;
+ }
+}
+
+static void
acpi_pci_device_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context)
{
device_t child, dev;
@@ -401,6 +420,8 @@ acpi_pci_attach(device_t dev)
error = pci_attach(dev);
if (error)
return (error);
+ AcpiInstallNotifyHandler(acpi_get_handle(dev), ACPI_SYSTEM_NOTIFY,
+ acpi_pci_bus_notify_handler, dev);
AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1,
acpi_pci_install_device_notify_handler, NULL, dev, NULL);
@@ -429,6 +450,8 @@ acpi_pci_detach(device_t dev)
AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1,
acpi_pci_remove_notify_handler, NULL, dev, NULL);
+ AcpiRemoveNotifyHandler(acpi_get_handle(dev), ACPI_SYSTEM_NOTIFY,
+ acpi_pci_bus_notify_handler);
return (pci_detach(dev));
}
More information about the svn-src-all
mailing list