Date: Thu, 5 Mar 2009 15:18:55 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 158716 for review Message-ID: <200903051518.n25FIt0a019678@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=158716 Change 158716 by jhb@jhb_jhbbsd on 2009/03/05 15:18:29 Take a first stab at making x86 bus drivers probe early along with system resource-type devices. This removes some kludges such as the explicit ordering of device attach using device orders for x86 nexus. It also mostly removes the need for acpi_probe_order(). Affected files ... .. //depot/projects/multipass/notes#6 edit .. //depot/projects/multipass/sys/amd64/acpica/acpi_machdep.c#2 edit .. //depot/projects/multipass/sys/amd64/amd64/io_apic.c#2 edit .. //depot/projects/multipass/sys/amd64/amd64/legacy.c#2 edit .. //depot/projects/multipass/sys/amd64/amd64/mptable_pci.c#2 edit .. //depot/projects/multipass/sys/amd64/amd64/nexus.c#2 edit .. //depot/projects/multipass/sys/amd64/pci/pci_bus.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_cpu.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_ec.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_hpet.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_isab.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_pci.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_pci_link.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_pcib_acpi.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_pcib_pci.c#2 edit .. //depot/projects/multipass/sys/dev/acpica/acpi_resource.c#2 edit .. //depot/projects/multipass/sys/dev/pci/eisa_pci.c#2 edit .. //depot/projects/multipass/sys/dev/pci/hostb_pci.c#2 edit .. //depot/projects/multipass/sys/dev/pci/isa_pci.c#2 edit .. //depot/projects/multipass/sys/dev/pci/pci.c#2 edit .. //depot/projects/multipass/sys/dev/pci/pci_pci.c#2 edit .. //depot/projects/multipass/sys/dev/pci/vga_pci.c#2 edit .. //depot/projects/multipass/sys/i386/acpica/acpi_machdep.c#2 edit .. //depot/projects/multipass/sys/i386/bios/smapi.c#2 edit .. //depot/projects/multipass/sys/i386/bios/smbios.c#2 edit .. //depot/projects/multipass/sys/i386/bios/vpd.c#2 edit .. //depot/projects/multipass/sys/i386/i386/io_apic.c#2 edit .. //depot/projects/multipass/sys/i386/i386/legacy.c#2 edit .. //depot/projects/multipass/sys/i386/i386/mptable_pci.c#2 edit .. //depot/projects/multipass/sys/i386/i386/nexus.c#2 edit .. //depot/projects/multipass/sys/i386/pci/pci_bus.c#2 edit .. //depot/projects/multipass/sys/i386/pci/pci_pir.c#2 edit .. //depot/projects/multipass/sys/isa/orm.c#2 edit .. //depot/projects/multipass/sys/isa/pnp.c#2 edit Differences ... ==== //depot/projects/multipass/notes#6 (text+ko) ==== @@ -46,18 +46,19 @@ Simple Cases of Early Drivers ----------------------------- -- Change nexus0 to be an early driver -- Change acpi0 to be an early driver (BUS_PASS_BUSSES) - - cpu drivers should become BUS_PASS_CPUS (but not cpufreq drivers) - - system resource (apic0, ram0, acpi_sysres0) should become BUS_PASS_RESOURCE - - pci_link should become BUS_PASS_INTERRUPT_CONTROLLERS ++ Change nexus0 to be an early driver ++ Change acpi0 to be an early driver (BUS_PASS_BUSSES) + + cpu drivers should become BUS_PASS_CPUS (but not cpufreq drivers) + + system resource (apic0, ram0, acpi_sysres0) should become BUS_PASS_RESOURCE + + pci_link should become BUS_PASS_INTERRUPT - embedded controller? -- Change pci to be an early driver (BUS_PASS_BUSSES) - - pci_pci should be BUS_PASS_BUSSES as well - - isab should be BUS_PASS_BUSSES ++ Change pci to be an early driver (BUS_PASS_BUSSES) + + pci_pci should be BUS_PASS_BUSSES as well + + isab should be BUS_PASS_BUSSES - isa0 should be BUS_PASS_BUSSES (this is harder) - have to decide when to enumerate hinted children -- legacy0 ++ legacy0 + + cpu Guidelines for Writing an Early Driver: --------------------------------------- ==== //depot/projects/multipass/sys/amd64/acpica/acpi_machdep.c#2 (text+ko) ==== @@ -93,7 +93,7 @@ nexus_init_resources(); bus_generic_probe(dev); - if (BUS_ADD_CHILD(dev, 10, "acpi", 0) == NULL) + if (BUS_ADD_CHILD(dev, 0, "acpi", 0) == NULL) panic("failed to add acpi0 device"); return (bus_generic_attach(dev)); @@ -110,4 +110,5 @@ DEFINE_CLASS_1(nexus, nexus_acpi_driver, nexus_acpi_methods, 1, nexus_driver); static devclass_t nexus_devclass; -DRIVER_MODULE(nexus_acpi, root, nexus_acpi_driver, nexus_devclass, 0, 0); +EARLY_DRIVER_MODULE(nexus_acpi, root, nexus_acpi_driver, nexus_devclass, 0, 0, + BUS_PASS_BUS); ==== //depot/projects/multipass/sys/amd64/amd64/io_apic.c#2 (text+ko) ==== @@ -807,12 +807,8 @@ apic_identify(driver_t *driver, device_t parent) { - /* - * Add at order 12. acpi0 is probed at order 10 and legacy0 - * is probed at order 11. - */ if (lapic_paddr != 0) - BUS_ADD_CHILD(parent, 12, "apic", 0); + BUS_ADD_CHILD(parent, 0, "apic", 0); } static int @@ -864,4 +860,5 @@ DEFINE_CLASS_0(apic, apic_driver, apic_methods, 0); static devclass_t apic_devclass; -DRIVER_MODULE(apic, nexus, apic_driver, apic_devclass, 0, 0); +EARLY_DRIVER_MODULE(apic, nexus, apic_driver, apic_devclass, 0, 0, + BUS_PASS_RESOURCE); ==== //depot/projects/multipass/sys/amd64/amd64/legacy.c#2 (text+ko) ==== @@ -96,7 +96,8 @@ }; static devclass_t legacy_devclass; -DRIVER_MODULE(legacy, nexus, legacy_driver, legacy_devclass, 0, 0); +EARLY_DRIVER_MODULE(legacy, nexus, legacy_driver, legacy_devclass, 0, 0, + BUS_PASS_BUS); static int legacy_probe(device_t dev) @@ -256,7 +257,7 @@ 1, /* no softc */ }; static devclass_t cpu_devclass; -DRIVER_MODULE(cpu, legacy, cpu_driver, cpu_devclass, 0, 0); +EARLY_DRIVER_MODULE(cpu, legacy, cpu_driver, cpu_devclass, 0, 0, BUS_PASS_CPU); static void cpu_identify(driver_t *driver, device_t parent) @@ -264,14 +265,9 @@ device_t child; int i; - /* - * Attach a cpuX device for each CPU. We use an order of 150 - * so that these devices are attached after the Host-PCI - * bridges (which are added at order 100). - */ for (i = 0; i <= mp_maxid; i++) if (!CPU_ABSENT(i)) { - child = BUS_ADD_CHILD(parent, 150, "cpu", i); + child = BUS_ADD_CHILD(parent, 0, "cpu", i); if (child == NULL) panic("legacy_attach cpu"); } ==== //depot/projects/multipass/sys/amd64/amd64/mptable_pci.c#2 (text+ko) ==== @@ -139,7 +139,8 @@ static devclass_t hostb_devclass; DEFINE_CLASS_0(pcib, mptable_hostb_driver, mptable_hostb_methods, 1); -DRIVER_MODULE(mptable_pcib, legacy, mptable_hostb_driver, hostb_devclass, 0, 0); +EARLY_DRIVER_MODULE(mptable_pcib, legacy, mptable_hostb_driver, hostb_devclass, + 0, 0, BUS_PASS_BUS); /* PCI to PCI bridge driver. */ @@ -197,4 +198,5 @@ DEFINE_CLASS_0(pcib, mptable_pcib_driver, mptable_pcib_pci_methods, sizeof(struct pcib_softc)); -DRIVER_MODULE(mptable_pcib, pci, mptable_pcib_driver, pcib_devclass, 0, 0); +EARLY_DRIVER_MODULE(mptable_pcib, pci, mptable_pcib_driver, pcib_devclass, 0, 0, + BUS_PASS_BUS); ==== //depot/projects/multipass/sys/amd64/amd64/nexus.c#2 (text+ko) ==== @@ -153,7 +153,8 @@ DEFINE_CLASS_0(nexus, nexus_driver, nexus_methods, 1); static devclass_t nexus_devclass; -DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0); +EARLY_DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0, + BUS_PASS_BUS); static int nexus_probe(device_t dev) @@ -251,7 +252,7 @@ * types (such as ACPI), use their own nexus(4) subclass * driver to override this routine and add their own root bus. */ - if (BUS_ADD_CHILD(dev, 10, "legacy", 0) == NULL) + if (BUS_ADD_CHILD(dev, 0, "legacy", 0) == NULL) panic("legacy: could not attach"); bus_generic_attach(dev); return 0; @@ -639,7 +640,8 @@ static devclass_t ram_devclass; -DRIVER_MODULE(ram, nexus, ram_driver, ram_devclass, 0, 0); +EARLY_DRIVER_MODULE(ram, nexus, ram_driver, ram_devclass, 0, 0, + BUS_PASS_RESOURCE); #ifdef DEV_ISA /* @@ -688,5 +690,6 @@ static devclass_t sysresource_devclass; -DRIVER_MODULE(sysresource, isa, sysresource_driver, sysresource_devclass, 0, 0); +EARLY_DRIVER_MODULE(sysresource, isa, sysresource_driver, sysresource_devclass, + 0, 0, BUS_PASS_RESOURCE - 1); #endif /* DEV_ISA */ ==== //depot/projects/multipass/sys/amd64/pci/pci_bus.c#2 (text+ko) ==== @@ -216,12 +216,7 @@ if (s == NULL) continue; - /* - * Add at priority 100 to make sure we - * go after any motherboard resources - */ - child = BUS_ADD_CHILD(parent, 100, - "pcib", busnum); + child = BUS_ADD_CHILD(parent, 0, "pcib", busnum); device_set_desc(child, s); legacy_set_pcibus(child, busnum); @@ -246,7 +241,7 @@ if (bootverbose) printf( "legacy_pcib_identify: no bridge found, adding pcib0 anyway\n"); - child = BUS_ADD_CHILD(parent, 100, "pcib", 0); + child = BUS_ADD_CHILD(parent, 0, "pcib", 0); legacy_set_pcibus(child, 0); } } @@ -371,7 +366,8 @@ static devclass_t hostb_devclass; DEFINE_CLASS_0(pcib, legacy_pcib_driver, legacy_pcib_methods, 1); -DRIVER_MODULE(pcib, legacy, legacy_pcib_driver, hostb_devclass, 0, 0); +EARLY_DRIVER_MODULE(pcib, legacy, legacy_pcib_driver, hostb_devclass, 0, 0, + BUS_PASS_BUS); /* ==== //depot/projects/multipass/sys/dev/acpica/acpi.c#2 (text+ko) ==== @@ -213,7 +213,8 @@ }; static devclass_t acpi_devclass; -DRIVER_MODULE(acpi, nexus, acpi_driver, acpi_devclass, acpi_modevent, 0); +EARLY_DRIVER_MODULE(acpi, nexus, acpi_driver, acpi_devclass, acpi_modevent, 0, + BUS_PASS_BUS); MODULE_VERSION(acpi, 1); ACPI_SERIAL_DECL(acpi, "ACPI root bus"); @@ -1662,23 +1663,12 @@ static void acpi_probe_order(ACPI_HANDLE handle, int *order) { - ACPI_OBJECT_TYPE type; /* - * 1. I/O port and memory system resource holders * 2. Embedded controllers (to handle early accesses) - * 3. PCI Link Devices - * 100000. CPUs */ - AcpiGetType(handle, &type); - if (acpi_MatchHid(handle, "PNP0C01") || acpi_MatchHid(handle, "PNP0C02")) - *order = 1; - else if (acpi_MatchHid(handle, "PNP0C09")) + if (acpi_MatchHid(handle, "PNP0C09")) *order = 2; - else if (acpi_MatchHid(handle, "PNP0C0F")) - *order = 3; - else if (type == ACPI_TYPE_PROCESSOR) - *order = 100000; } /* ==== //depot/projects/multipass/sys/dev/acpica/acpi_cpu.c#2 (text+ko) ==== @@ -199,7 +199,8 @@ }; static devclass_t acpi_cpu_devclass; -DRIVER_MODULE(cpu, acpi, acpi_cpu_driver, acpi_cpu_devclass, 0, 0); +EARLY_DRIVER_MODULE(cpu, acpi, acpi_cpu_driver, acpi_cpu_devclass, 0, 0, + BUS_PASS_CPU); MODULE_DEPEND(cpu, acpi, 1, 1, 1); static int ==== //depot/projects/multipass/sys/dev/acpica/acpi_ec.c#2 (text+ko) ==== @@ -265,7 +265,8 @@ }; static devclass_t acpi_ec_devclass; -DRIVER_MODULE(acpi_ec, acpi, acpi_ec_driver, acpi_ec_devclass, 0, 0); +EARLY_DRIVER_MODULE(acpi_ec, acpi, acpi_ec_driver, acpi_ec_devclass, 0, 0, + BUS_PASS_SCHEDULER); MODULE_DEPEND(acpi_ec, acpi, 1, 1, 1); /* ==== //depot/projects/multipass/sys/dev/acpica/acpi_hpet.c#2 (text+ko) ==== @@ -122,7 +122,7 @@ if (hpet->Sequence != 0) printf("ACPI HPET table warning: Sequence is non-zero (%d)\n", hpet->Sequence); - child = BUS_ADD_CHILD(parent, ACPI_DEV_BASE_ORDER, "acpi_hpet", 0); + child = BUS_ADD_CHILD(parent, 0, "acpi_hpet", 0); if (child == NULL) { printf("%s: can't add child\n", __func__); return; @@ -310,5 +310,6 @@ }; -DRIVER_MODULE(acpi_hpet, acpi, acpi_hpet_driver, acpi_hpet_devclass, 0, 0); +EARLY_DRIVER_MODULE(acpi_hpet, acpi, acpi_hpet_driver, acpi_hpet_devclass, 0, 0, + BUS_PASS_TIMER); MODULE_DEPEND(acpi_hpet, acpi, 1, 1, 1); ==== //depot/projects/multipass/sys/dev/acpica/acpi_isab.c#2 (text+ko) ==== @@ -84,7 +84,8 @@ sizeof(struct acpi_isab_softc), }; -DRIVER_MODULE(acpi_isab, acpi, acpi_isab_driver, isab_devclass, 0, 0); +EARLY_DRIVER_MODULE(acpi_isab, acpi, acpi_isab_driver, isab_devclass, 0, 0, + BUS_PASS_BUS); MODULE_DEPEND(acpi_isab, acpi, 1, 1, 1); static int ==== //depot/projects/multipass/sys/dev/acpica/acpi_pci.c#2 (text+ko) ==== @@ -98,7 +98,8 @@ static devclass_t pci_devclass; DEFINE_CLASS_1(pci, acpi_pci_driver, acpi_pci_methods, 0, pci_driver); -DRIVER_MODULE(acpi_pci, pcib, acpi_pci_driver, pci_devclass, 0, 0); +EARLY_DRIVER_MODULE(acpi_pci, pcib, acpi_pci_driver, pci_devclass, 0, 0, + BUS_PASS_BUS); MODULE_DEPEND(acpi_pci, acpi, 1, 1, 1); MODULE_DEPEND(acpi_pci, pci, 1, 1, 1); MODULE_VERSION(acpi_pci, 1); ==== //depot/projects/multipass/sys/dev/acpica/acpi_pci_link.c#2 (text+ko) ==== @@ -1117,6 +1117,6 @@ static devclass_t pci_link_devclass; -DRIVER_MODULE(acpi_pci_link, acpi, acpi_pci_link_driver, pci_link_devclass, 0, - 0); +EARLY_DRIVER_MODULE(acpi_pci_link, acpi, acpi_pci_link_driver, + pci_link_devclass, 0, 0, BUS_PASS_INTERRUPT); MODULE_DEPEND(acpi_pci_link, acpi, 1, 1, 1); ==== //depot/projects/multipass/sys/dev/acpica/acpi_pcib_acpi.c#2 (text+ko) ==== @@ -122,7 +122,8 @@ DEFINE_CLASS_0(pcib, acpi_pcib_acpi_driver, acpi_pcib_acpi_methods, sizeof(struct acpi_hpcib_softc)); -DRIVER_MODULE(acpi_pcib, acpi, acpi_pcib_acpi_driver, pcib_devclass, 0, 0); +EARLY_DRIVER_MODULE(acpi_pcib, acpi, acpi_pcib_acpi_driver, pcib_devclass, 0, 0, + BUS_PASS_BUS); MODULE_DEPEND(acpi_pcib, acpi, 1, 1, 1); static int ==== //depot/projects/multipass/sys/dev/acpica/acpi_pcib_pci.c#2 (text+ko) ==== @@ -106,7 +106,8 @@ DEFINE_CLASS_0(pcib, acpi_pcib_pci_driver, acpi_pcib_pci_methods, sizeof(struct acpi_pcib_softc)); -DRIVER_MODULE(acpi_pcib, pci, acpi_pcib_pci_driver, pcib_devclass, 0, 0); +EARLY_DRIVER_MODULE(acpi_pcib, pci, acpi_pcib_pci_driver, pcib_devclass, 0, 0, + BUS_PASS_BUS); MODULE_DEPEND(acpi_pcib, acpi, 1, 1, 1); static int ==== //depot/projects/multipass/sys/dev/acpica/acpi_resource.c#2 (text+ko) ==== @@ -673,8 +673,8 @@ }; static devclass_t acpi_sysres_devclass; -DRIVER_MODULE(acpi_sysresource, acpi, acpi_sysres_driver, acpi_sysres_devclass, - 0, 0); +EARLY_DRIVER_MODULE(acpi_sysresource, acpi, acpi_sysres_driver, + acpi_sysres_devclass, 0, 0, BUS_PASS_RESOURCE - 1); MODULE_DEPEND(acpi_sysresource, acpi, 1, 1, 1); static int ==== //depot/projects/multipass/sys/dev/pci/eisa_pci.c#2 (text+ko) ==== @@ -74,7 +74,8 @@ static devclass_t eisab_devclass; -DRIVER_MODULE(eisab, pci, eisab_driver, eisab_devclass, 0, 0); +EARLY_DRIVER_MODULE(eisab, pci, eisab_driver, eisab_devclass, 0, 0, + BUS_PASS_BUS); static int eisab_probe(device_t dev) ==== //depot/projects/multipass/sys/dev/pci/hostb_pci.c#2 (text+ko) ==== @@ -246,4 +246,5 @@ static devclass_t pci_hostb_devclass; -DRIVER_MODULE(hostb, pci, pci_hostb_driver, pci_hostb_devclass, 0, 0); +EARLY_DRIVER_MODULE(hostb, pci, pci_hostb_driver, pci_hostb_devclass, 0, 0, + BUS_PASS_BUS); ==== //depot/projects/multipass/sys/dev/pci/isa_pci.c#2 (text+ko) ==== @@ -74,7 +74,7 @@ 0, }; -DRIVER_MODULE(isab, pci, isab_driver, isab_devclass, 0, 0); +EARLY_DRIVER_MODULE(isab, pci, isab_driver, isab_devclass, 0, 0, BUS_PASS_BUS); /* * XXX we need to add a quirk list here for bridges that don't correctly ==== //depot/projects/multipass/sys/dev/pci/pci.c#2 (text+ko) ==== @@ -167,7 +167,8 @@ DEFINE_CLASS_0(pci, pci_driver, pci_methods, 0); static devclass_t pci_devclass; -DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0); +EARLY_DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0, + BUS_PASS_BUS); MODULE_VERSION(pci, 1); static char *pci_vendordata; ==== //depot/projects/multipass/sys/dev/pci/pci_pci.c#2 (text+ko) ==== @@ -91,7 +91,7 @@ static devclass_t pcib_devclass; DEFINE_CLASS_0(pcib, pcib_driver, pcib_methods, sizeof(struct pcib_softc)); -DRIVER_MODULE(pcib, pci, pcib_driver, pcib_devclass, 0, 0); +EARLY_DRIVER_MODULE(pcib, pci, pcib_driver, pcib_devclass, 0, 0, BUS_PASS_BUS); /* * Is the prefetch window open (eg, can we allocate memory in it?) ==== //depot/projects/multipass/sys/dev/pci/vga_pci.c#2 (text+ko) ==== @@ -366,4 +366,5 @@ static devclass_t vga_devclass; -DRIVER_MODULE(vgapci, pci, vga_pci_driver, vga_devclass, 0, 0); +EARLY_DRIVER_MODULE(vgapci, pci, vga_pci_driver, vga_devclass, 0, 0, + BUS_PASS_BUS); ==== //depot/projects/multipass/sys/i386/acpica/acpi_machdep.c#2 (text+ko) ==== @@ -574,7 +574,7 @@ nexus_init_resources(); bus_generic_probe(dev); - if (BUS_ADD_CHILD(dev, 10, "acpi", 0) == NULL) + if (BUS_ADD_CHILD(dev, 0, "acpi", 0) == NULL) panic("failed to add acpi0 device"); return (bus_generic_attach(dev)); @@ -591,4 +591,5 @@ DEFINE_CLASS_1(nexus, nexus_acpi_driver, nexus_acpi_methods, 1, nexus_driver); static devclass_t nexus_devclass; -DRIVER_MODULE(nexus_acpi, root, nexus_acpi_driver, nexus_devclass, 0, 0); +EARLY_DRIVER_MODULE(nexus_acpi, root, nexus_acpi_driver, nexus_devclass, 0, 0, + BUS_PASS_BUS); ==== //depot/projects/multipass/sys/i386/bios/smapi.c#2 (text+ko) ==== @@ -166,7 +166,7 @@ rid = 0; length = ADDR2HDR(addr)->length; - child = BUS_ADD_CHILD(parent, 5, "smapi", -1); + child = BUS_ADD_CHILD(parent, 0, "smapi", -1); device_set_driver(child, driver); bus_set_resource(child, SYS_RES_MEMORY, rid, addr, length); device_set_desc(child, "SMAPI BIOS"); ==== //depot/projects/multipass/sys/i386/bios/smbios.c#2 (text+ko) ==== @@ -131,7 +131,7 @@ return; } - child = BUS_ADD_CHILD(parent, 5, "smbios", -1); + child = BUS_ADD_CHILD(parent, 0, "smbios", -1); device_set_driver(child, driver); bus_set_resource(child, SYS_RES_MEMORY, rid, addr, length); device_set_desc(child, "System Management BIOS"); ==== //depot/projects/multipass/sys/i386/bios/vpd.c#2 (text+ko) ==== @@ -128,7 +128,7 @@ rid = 0; length = ADDR2VPD(addr)->Length; - child = BUS_ADD_CHILD(parent, 5, "vpd", -1); + child = BUS_ADD_CHILD(parent, 0, "vpd", -1); device_set_driver(child, driver); bus_set_resource(child, SYS_RES_MEMORY, rid, addr, length); device_set_desc(child, "Vital Product Data Area"); ==== //depot/projects/multipass/sys/i386/i386/io_apic.c#2 (text+ko) ==== @@ -807,12 +807,8 @@ apic_identify(driver_t *driver, device_t parent) { - /* - * Add at order 12. acpi0 is probed at order 10 and legacy0 - * is probed at order 11. - */ if (lapic_paddr != 0) - BUS_ADD_CHILD(parent, 12, "apic", 0); + BUS_ADD_CHILD(parent, 0, "apic", 0); } static int @@ -872,4 +868,5 @@ DEFINE_CLASS_0(apic, apic_driver, apic_methods, 0); static devclass_t apic_devclass; -DRIVER_MODULE(apic, nexus, apic_driver, apic_devclass, 0, 0); +DRIVER_MODULE(apic, nexus, apic_driver, apic_devclass, 0, 0, + BUS_PASS_RESOURCE); ==== //depot/projects/multipass/sys/i386/i386/legacy.c#2 (text+ko) ==== @@ -101,7 +101,8 @@ }; static devclass_t legacy_devclass; -DRIVER_MODULE(legacy, nexus, legacy_driver, legacy_devclass, 0, 0); +EARLY_DRIVER_MODULE(legacy, nexus, legacy_driver, legacy_devclass, 0, 0, + BUS_PASS_BUS); static int legacy_probe(device_t dev) @@ -277,7 +278,7 @@ 1, /* no softc */ }; static devclass_t cpu_devclass; -DRIVER_MODULE(cpu, legacy, cpu_driver, cpu_devclass, 0, 0); +EARLY_DRIVER_MODULE(cpu, legacy, cpu_driver, cpu_devclass, 0, 0, BUS_PASS_CPU); static void cpu_identify(driver_t *driver, device_t parent) @@ -285,14 +286,9 @@ device_t child; int i; - /* - * Attach a cpuX device for each CPU. We use an order of 150 - * so that these devices are attached after the Host-PCI - * bridges (which are added at order 100). - */ for (i = 0; i <= mp_maxid; i++) if (!CPU_ABSENT(i)) { - child = BUS_ADD_CHILD(parent, 150, "cpu", i); + child = BUS_ADD_CHILD(parent, 0, "cpu", i); if (child == NULL) panic("legacy_attach cpu"); } ==== //depot/projects/multipass/sys/i386/i386/mptable_pci.c#2 (text+ko) ==== @@ -139,7 +139,8 @@ static devclass_t hostb_devclass; DEFINE_CLASS_0(pcib, mptable_hostb_driver, mptable_hostb_methods, 1); -DRIVER_MODULE(mptable_pcib, legacy, mptable_hostb_driver, hostb_devclass, 0, 0); +EARLY_DRIVER_MODULE(mptable_pcib, legacy, mptable_hostb_driver, hostb_devclass, + 0, 0, BUS_PASS_BUS); /* PCI to PCI bridge driver. */ ==== //depot/projects/multipass/sys/i386/i386/nexus.c#2 (text+ko) ==== @@ -161,7 +161,8 @@ DEFINE_CLASS_0(nexus, nexus_driver, nexus_methods, 1); static devclass_t nexus_devclass; -DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0); +EARLY_DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0, + BUS_PASS_BUS); static int nexus_probe(device_t dev) @@ -263,7 +264,7 @@ * types (such as ACPI), use their own nexus(4) subclass * driver to override this routine and add their own root bus. */ - if (BUS_ADD_CHILD(dev, 10, "legacy", 0) == NULL) + if (BUS_ADD_CHILD(dev, 0, "legacy", 0) == NULL) panic("legacy: could not attach"); bus_generic_attach(dev); return 0; @@ -693,7 +694,8 @@ static devclass_t ram_devclass; -DRIVER_MODULE(ram, nexus, ram_driver, ram_devclass, 0, 0); +EARLY_DRIVER_MODULE(ram, nexus, ram_driver, ram_devclass, 0, 0, + BUS_PASS_RESOURCE); #ifdef DEV_ISA /* @@ -742,5 +744,6 @@ static devclass_t sysresource_devclass; -DRIVER_MODULE(sysresource, isa, sysresource_driver, sysresource_devclass, 0, 0); +EARLY_DRIVER_MODULE(sysresource, isa, sysresource_driver, sysresource_devclass, + 0, 0, BUS_PASS_RESOURCE - 1); #endif /* DEV_ISA */ ==== //depot/projects/multipass/sys/i386/pci/pci_bus.c#2 (text+ko) ==== @@ -418,12 +418,7 @@ if (s == NULL) continue; - /* - * Add at priority 100 to make sure we - * go after any motherboard resources - */ - child = BUS_ADD_CHILD(parent, 100, - "pcib", busnum); + child = BUS_ADD_CHILD(parent, 0, "pcib", busnum); device_set_desc(child, s); legacy_set_pcibus(child, busnum); @@ -448,7 +443,7 @@ if (bootverbose) printf( "legacy_pcib_identify: no bridge found, adding pcib0 anyway\n"); - child = BUS_ADD_CHILD(parent, 100, "pcib", 0); + child = BUS_ADD_CHILD(parent, 0, "pcib", 0); legacy_set_pcibus(child, 0); } } @@ -583,7 +578,8 @@ static devclass_t hostb_devclass; DEFINE_CLASS_0(pcib, legacy_pcib_driver, legacy_pcib_methods, 1); -DRIVER_MODULE(pcib, legacy, legacy_pcib_driver, hostb_devclass, 0, 0); +EARLY_DRIVER_MODULE(pcib, legacy, legacy_pcib_driver, hostb_devclass, 0, 0, + BUS_PASS_BUS); /* @@ -678,7 +674,8 @@ DEFINE_CLASS_0(pcib, pcibios_pcib_driver, pcibios_pcib_pci_methods, sizeof(struct pcib_softc)); -DRIVER_MODULE(pcibios_pcib, pci, pcibios_pcib_driver, pcib_devclass, 0, 0); +EARLY_DRIVER_MODULE(pcibios_pcib, pci, pcibios_pcib_driver, pcib_devclass, 0, 0, + BUS_PASS_BUS); static int pcibios_pcib_probe(device_t dev) ==== //depot/projects/multipass/sys/i386/pci/pci_pir.c#2 (text+ko) ==== @@ -752,4 +752,10 @@ static devclass_t pir_devclass; -DRIVER_MODULE(pir, legacy, pir_driver, pir_devclass, 0, 0); +/* + * XXX: This has to be BUS_PASS_BUS for now. It should really be + * BUS_PASS_INTERRUPT, but we can't do that until we rework PCI to + * not route interrupts until after BUS_PASS_INTERRUPT. + */ +EARLY_DRIVER_MODULE(pir, legacy, pir_driver, pir_devclass, 0, 0, + BUS_PASS_BUS); ==== //depot/projects/multipass/sys/isa/orm.c#2 (text+ko) ==== @@ -182,4 +182,5 @@ static devclass_t orm_devclass; -DRIVER_MODULE(orm, isa, orm_driver, orm_devclass, 0, 0); +EARLY_DRIVER_MODULE(orm, isa, orm_driver, orm_devclass, 0, 0, + BUS_PASS_RESOURCE); ==== //depot/projects/multipass/sys/isa/pnp.c#2 (text+ko) ==== @@ -824,4 +824,4 @@ static devclass_t pnp_devclass; -DRIVER_MODULE(pnp, isa, pnp_driver, pnp_devclass, 0, 0); +EARLY_DRIVER_MODULE(pnp, isa, pnp_driver, pnp_devclass, 0, 0, BUS_PASS_BUS);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903051518.n25FIt0a019678>