Hi, On Fri, Sep 21, 2012 at 08:34:56PM +0200, Mark Kettenis wrote: > Any chance of having a diff with the amd64 bits as well?
Included below. > Also: > > > + if (pba->pba_busex == NULL) { > > + printf("cannot attach ACPI discovered busses\n"); > > + return; > > + } > > Instead of doing a printf here, I think you should just do a > > KASSERT(pba->pba_busex != NULL); Done as wall. Updated diff below. regards Christian Index: arch/amd64/amd64/mainbus.c =================================================================== RCS file: /cvs/src/sys/arch/amd64/amd64/mainbus.c,v retrieving revision 1.25 diff -u -r1.25 mainbus.c --- arch/amd64/amd64/mainbus.c 19 Sep 2012 23:23:50 -0000 1.25 +++ arch/amd64/amd64/mainbus.c 24 Sep 2012 11:15:41 -0000 @@ -218,6 +218,9 @@ mba.mba_pba.pba_domain = pci_ndomains++; mba.mba_pba.pba_bus = 0; config_found(self, &mba.mba_pba, mainbus_print); +#if NACPI > 0 + acpi_pciroots_attach(self, &mba.mba_pba, mainbus_print); +#endif } #endif Index: arch/i386/i386/mainbus.c =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/mainbus.c,v retrieving revision 1.49 diff -u -r1.49 mainbus.c --- arch/i386/i386/mainbus.c 19 Sep 2012 23:03:12 -0000 1.49 +++ arch/i386/i386/mainbus.c 24 Sep 2012 11:15:42 -0000 @@ -245,6 +245,9 @@ mba.mba_pba.pba_domain = pci_ndomains++; mba.mba_pba.pba_bus = 0; config_found(self, &mba.mba_pba, mainbus_print); +#if NACPI > 0 + acpi_pciroots_attach(self, &mba.mba_pba, mainbus_print); +#endif } #endif Index: dev/acpi/acpi.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpi.c,v retrieving revision 1.239 diff -u -r1.239 acpi.c --- dev/acpi/acpi.c 7 Sep 2012 19:19:59 -0000 1.239 +++ dev/acpi/acpi.c 24 Sep 2012 11:15:43 -0000 @@ -394,6 +394,8 @@ TAILQ_HEAD(, acpi_pci) acpi_pcidevs = TAILQ_HEAD_INITIALIZER(acpi_pcidevs); +TAILQ_HEAD(, acpi_pci) acpi_pcirootdevs = + TAILQ_HEAD_INITIALIZER(acpi_pcirootdevs); int acpi_getpci(struct aml_node *node, void *arg); int acpi_getminbus(union acpi_resource *crs, void *arg); @@ -482,6 +484,7 @@ node->pci = pci; dnprintf(10, "found PCI root: %s %d\n", aml_nodename(node), pci->bus); + TAILQ_INSERT_TAIL(&acpi_pcirootdevs, pci, next); } aml_freevalue(&res); return 0; @@ -600,6 +603,23 @@ } return PCI_PMCSR_STATE_D3; +} + +void +acpi_pciroots_attach(struct device *dev, void *aux, cfprint_t pr) +{ + struct acpi_pci *pdev; + struct pcibus_attach_args *pba = aux; + + KASSERT(pba->pba_busex != NULL); + + TAILQ_FOREACH(pdev, &acpi_pcirootdevs, next) { + if (extent_alloc_region(pba->pba_busex, pdev->bus, + 1, EX_NOWAIT) != 0) + continue; + pba->pba_bus = pdev->bus; + config_found(dev, pba, pr); + } } void Index: dev/acpi/acpivar.h =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpivar.h,v retrieving revision 1.72 diff -u -r1.72 acpivar.h --- dev/acpi/acpivar.h 7 Sep 2012 19:19:59 -0000 1.72 +++ dev/acpi/acpivar.h 24 Sep 2012 11:15:43 -0000 @@ -323,6 +323,8 @@ void acpi_powerdown_task(void *, int); void acpi_sleep_task(void *, int); +void acpi_pciroots_attach(struct device *, void *, cfprint_t); + #endif #endif /* !_ACPI_WAKECODE */