summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2004-05-10 18:26:22 +0000
committerjhb <jhb@FreeBSD.org>2004-05-10 18:26:22 +0000
commit0b8070442395dbd4af0afa0a8a6d965eb3c2af3c (patch)
tree8cd88ad5f5f6c681738a56af2cd3d237f624f0b5 /sys/dev/acpica
parentf6bfc912a1c0568df1c49fb5aeb9523a8fa94360 (diff)
downloadFreeBSD-src-0b8070442395dbd4af0afa0a8a6d965eb3c2af3c.zip
FreeBSD-src-0b8070442395dbd4af0afa0a8a6d965eb3c2af3c.tar.gz
If an ACPI PCI-PCI bridge doesn't have a _PRT object, fall back to using
the swizzle method for routing PCI interrupts across the bridge. This fixes problems with motherboards (typically laptops) whose BIOS doesn't provide a PRT for the AGP bridge even though there is a device entry for the bridge in the ACPI namespace. Tested by: Kenneth Culver culverk at sweetdreamsracing dot biz
Diffstat (limited to 'sys/dev/acpica')
-rw-r--r--sys/dev/acpica/acpi_pcib_pci.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/acpica/acpi_pcib_pci.c b/sys/dev/acpica/acpi_pcib_pci.c
index 7ea0b5d..e7ef8e3 100644
--- a/sys/dev/acpica/acpi_pcib_pci.c
+++ b/sys/dev/acpica/acpi_pcib_pci.c
@@ -165,5 +165,13 @@ acpi_pcib_pci_route_interrupt(device_t pcib, device_t dev, int pin)
struct acpi_pcib_softc *sc;
sc = device_get_softc(pcib);
- return (acpi_pcib_route_interrupt(pcib, dev, pin, &sc->ap_prt));
+
+ /*
+ * If we don't have a _PRT, fall back to the swizzle method
+ * for routing interrupts.
+ */
+ if (sc->ap_prt.Pointer == NULL)
+ return (pcib_route_interrupt(pcib, dev, pin));
+ else
+ return (acpi_pcib_route_interrupt(pcib, dev, pin, &sc->ap_prt));
}
OpenPOWER on IntegriCloud