diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2007-10-27 13:12:29 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2007-10-27 13:12:29 +0000 |
| commit | 2445af1a8a2c8719568768598ef99fe6a234d36d (patch) | |
| tree | 6a649aa8180c7abb94a56cdc4c62ba08cd2cbd5a /sys/dev | |
| parent | d9cec0a09e77c49969cd756e261a47925d2266b5 (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/acpica/acpi_pci_link.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/dev/acpica/acpi_pci_link.c b/sys/dev/acpica/acpi_pci_link.c index 4c3c30650904..775d0ca6b5df 100644 --- a/sys/dev/acpica/acpi_pci_link.c +++ b/sys/dev/acpica/acpi_pci_link.c @@ -916,10 +916,25 @@ acpi_pci_link_route_irqs(device_t dev) static int acpi_pci_link_resume(device_t dev) { + struct acpi_pci_link_softc *sc; ACPI_STATUS status; + int i, routed; + /* + * If all of our links are routed, then restore the link via _SRS, + * otherwise, disable the link via _DIS. + */ ACPI_SERIAL_BEGIN(pci_link); - status = acpi_pci_link_route_irqs(dev); + sc = device_get_softc(dev); + routed = 0; + for (i = 0; i < sc->pl_num_links; i++) + if (sc->pl_links[i].l_routed) + routed++; + if (routed == sc->pl_num_links) + status = acpi_pci_link_route_irqs(dev); + else + status = AcpiEvaluateObject(acpi_get_handle(dev), "_DIS", NULL, + NULL); ACPI_SERIAL_END(pci_link); if (ACPI_FAILURE(status)) return (ENXIO); |
