Skip site navigation (1)Skip section navigation (2)
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>