diff options
author | jhb <jhb@FreeBSD.org> | 2004-05-10 18:26:22 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2004-05-10 18:26:22 +0000 |
commit | 0b8070442395dbd4af0afa0a8a6d965eb3c2af3c (patch) | |
tree | 8cd88ad5f5f6c681738a56af2cd3d237f624f0b5 /sys/dev/acpica | |
parent | f6bfc912a1c0568df1c49fb5aeb9523a8fa94360 (diff) | |
download | FreeBSD-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.c | 10 |
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)); } |