> Date: Fri, 21 Sep 2012 13:48:48 +0200
> From: Christian Ehrhardt <[email protected]>
>
> Hi,
>
> thanks to Mark, we have enough PCI bus number accounting, now to allow us
> to attach ACPI bus numbers via ACPI. A patch to do this is below.
>
> regards Christian
Hi Christian,
Any chance of having a diff with the amd64 bits as well?
Also:
> 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 21 Sep 2012 11:36:59 -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 21 Sep 2012 11:37:01 -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,25 @@
> }
>
> 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;
> +
> + 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);
here. If somebody changes the code such that they call
acpi_pciroots_attach() without having initialized the busex they
deserve to get a panic!