PERFORCE change 158716 for review
John Baldwin
jhb at FreeBSD.org
Thu Mar 5 07:18:57 PST 2009
http://perforce.freebsd.org/chv.cgi?CH=158716
Change 158716 by jhb at 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);
More information about the p4-projects
mailing list