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-head mailing list