diff -ruNp --exclude compile sys.prev/dev/acpica/acpi_pcib_pci.c sys/dev/acpica/acpi_pcib_pci.c --- sys.prev/dev/acpica/acpi_pcib_pci.c 2010-08-19 20:29:49.000000000 +0300 +++ sys/dev/acpica/acpi_pcib_pci.c 2010-08-20 12:13:41.000000000 +0300 @@ -65,6 +65,7 @@ struct acpi_pcib_lookup_info { static int acpi_pcib_pci_probe(device_t bus); static int acpi_pcib_pci_attach(device_t bus); +static int acpi_pcib_pci_resume(device_t dev); static int acpi_pcib_read_ivar(device_t dev, device_t child, int which, uintptr_t *result); static int acpi_pcib_pci_route_interrupt(device_t pcib, @@ -74,6 +75,7 @@ static device_method_t acpi_pcib_pci_met /* Device interface */ DEVMETHOD(device_probe, acpi_pcib_pci_probe), DEVMETHOD(device_attach, acpi_pcib_pci_attach), + DEVMETHOD(device_resume, acpi_pcib_pci_resume), /* Bus interface */ DEVMETHOD(bus_read_ivar, acpi_pcib_read_ivar), @@ -116,6 +118,22 @@ acpi_pcib_pci_attach(device_t dev) ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); + if (device_get_unit(dev)==2 && pci_read_config(dev, PCIR_COMMAND, 1) == 0){ + pci_write_config(dev, PCIR_COMMAND, PCIM_CMD_MEMEN | PCIM_CMD_PORTEN, 1); + pci_enable_busmaster(dev); + pci_write_config(dev, PCIR_IOBASEL_1, 0xf0, 1); + pci_write_config(dev, PCIR_MEMBASE_1, 0xf020, 2); + pci_write_config(dev, PCIR_MEMLIMIT_1, 0xf020, 2); + pci_write_config(dev, PCIR_PMBASEL_1, 0xfff1, 2); + } + if (device_get_unit(dev)==3 && pci_read_config(dev, PCIR_COMMAND, 1) == 0){ + pci_write_config(dev, PCIR_COMMAND, PCIM_CMD_MEMEN | PCIM_CMD_PORTEN, 1); + pci_enable_busmaster(dev); + pci_write_config(dev, PCIR_IOBASEL_1, 0xf0, 1); + pci_write_config(dev, PCIR_MEMBASE_1, 0xf030, 2); + pci_write_config(dev, PCIR_MEMLIMIT_1, 0xf030, 2); + pci_write_config(dev, PCIR_PMBASEL_1, 0xfff1, 2); + } pcib_attach_common(dev); sc = device_get_softc(dev); sc->ap_handle = acpi_get_handle(dev); @@ -123,6 +141,30 @@ acpi_pcib_pci_attach(device_t dev) } static int +acpi_pcib_pci_resume(device_t dev) +{ + + if (device_get_unit(dev)==2 && pci_read_config(dev, PCIR_COMMAND, 1) == 0){ + pci_write_config(dev, PCIR_COMMAND, PCIM_CMD_MEMEN | PCIM_CMD_PORTEN, 1); + pci_enable_busmaster(dev); + pci_write_config(dev, PCIR_IOBASEL_1, 0xf0, 1); + pci_write_config(dev, PCIR_MEMBASE_1, 0xf020, 2); + pci_write_config(dev, PCIR_MEMLIMIT_1, 0xf020, 2); + pci_write_config(dev, PCIR_PMBASEL_1, 0xfff1, 2); + } + if (device_get_unit(dev)==3 && pci_read_config(dev, PCIR_COMMAND, 1) == 0){ + pci_write_config(dev, PCIR_COMMAND, PCIM_CMD_MEMEN | PCIM_CMD_PORTEN, 1); + pci_enable_busmaster(dev); + pci_write_config(dev, PCIR_IOBASEL_1, 0xf0, 1); + pci_write_config(dev, PCIR_MEMBASE_1, 0xf030, 2); + pci_write_config(dev, PCIR_MEMLIMIT_1, 0xf030, 2); + pci_write_config(dev, PCIR_PMBASEL_1, 0xfff1, 2); + } + return (bus_generic_resume(dev)); +} + + +static int acpi_pcib_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) { struct acpi_pcib_softc *sc = device_get_softc(dev);