From fe0d408987b42b531420ff2de76d534dbe7ecee7 Mon Sep 17 00:00:00 2001 From: "Matthew N. Dodd" Date: Fri, 3 Dec 1999 08:41:24 +0000 Subject: [PATCH] Remove the 'ivars' arguement to device_add_child() and device_add_child_ordered(). 'ivars' may now be set using the device_set_ivars() function. This makes it easier for us to change how arbitrary data structures are associated with a device_t. Eventually we won't be modifying device_t to add additional pointers for ivars, softc data etc. Despite my best efforts I've probably forgotten something so let me know if this breaks anything. I've been running with this change for months and its been quite involved actually isolating all the changes from the rest of the local changes in my tree. Reviewed by: peter, dfr --- sys/alpha/alpha/autoconf.c | 2 +- sys/alpha/pci/apecs.c | 2 +- sys/alpha/pci/apecs_pci.c | 2 +- sys/alpha/pci/cia.c | 2 +- sys/alpha/pci/cia_pci.c | 2 +- sys/alpha/pci/lca.c | 2 +- sys/alpha/pci/lca_pci.c | 2 +- sys/alpha/pci/tsunami.c | 4 +++- sys/alpha/pci/tsunami_pci.c | 2 +- sys/alpha/tc/ioasic.c | 6 +++++- sys/alpha/tc/tc.c | 3 ++- sys/alpha/tc/tcasic.c | 2 +- sys/alpha/tc/tcds.c | 9 +++++++-- sys/alpha/tlsb/gbus.c | 7 +++++-- sys/alpha/tlsb/kftxx.c | 4 +++- sys/alpha/tlsb/tlsb.c | 3 ++- sys/alpha/tlsb/zs_tlsb.c | 4 ++-- sys/amd64/amd64/autoconf.c | 2 +- sys/amd64/amd64/legacy.c | 9 +++++---- sys/amd64/amd64/nexus.c | 9 +++++---- sys/amd64/pci/pci_bus.c | 2 +- sys/amd64/pci/pci_cfgreg.c | 2 +- sys/dev/amr/amr.c | 3 ++- sys/dev/atkbdc/atkbdc_isa.c | 3 ++- sys/dev/atkbdc/atkbdc_subr.c | 3 ++- sys/dev/bktr/bktr_i2c.c | 4 ++-- sys/dev/eisa/eisaconf.c | 4 +++- sys/dev/fdc/fdc.c | 3 ++- sys/dev/ida/ida.c | 2 +- sys/dev/iicbus/iicbus.c | 4 ++-- sys/dev/iicbus/iiconf.c | 2 +- sys/dev/mca/mca_bus.c | 4 +++- sys/dev/mii/mii.c | 6 ++++-- sys/dev/mlx/mlx.c | 3 ++- sys/dev/pccard/pccard.c | 2 +- sys/dev/pcf/pcf.c | 2 +- sys/dev/pci/pci.c | 4 ++-- sys/dev/ppbus/lpbb.c | 4 ++-- sys/dev/smbus/smbconf.c | 2 +- sys/dev/smbus/smbus.c | 4 ++-- sys/dev/sound/isa/gusc.c | 17 ++++++++++++----- sys/dev/sound/isa/sbc.c | 10 +++++++--- sys/dev/sound/pci/csa.c | 7 +++++-- sys/dev/usb/ohci_pci.c | 3 ++- sys/dev/usb/uhci_pci.c | 3 ++- sys/dev/usb/usb_subr.c | 8 +++++--- sys/i386/eisa/eisaconf.c | 4 +++- sys/i386/i386/autoconf.c | 2 +- sys/i386/i386/legacy.c | 9 +++++---- sys/i386/i386/nexus.c | 9 +++++---- sys/i386/isa/pcf.c | 2 +- sys/i386/isa/pcibus.c | 2 +- sys/i386/pci/pci_bus.c | 2 +- sys/i386/pci/pci_cfgreg.c | 2 +- sys/i386/pci/pci_pir.c | 2 +- sys/isa/atkbdc_isa.c | 3 ++- sys/isa/fd.c | 3 ++- sys/isa/isa_common.c | 6 +++++- sys/isa/vga_isa.c | 2 +- sys/kern/subr_bus.c | 32 ++++++++++++++++++++------------ sys/pc98/cbus/fdc.c | 3 ++- sys/pc98/pc98/fd.c | 3 ++- sys/pccard/pccard.c | 3 ++- sys/pccard/pcic.c | 2 +- sys/pci/alpm.c | 2 +- sys/pci/intpm.c | 2 +- sys/pci/ohci_pci.c | 3 ++- sys/pci/pci.c | 4 ++-- sys/pci/pcisupport.c | 6 +++--- sys/pci/uhci_pci.c | 3 ++- sys/sys/bus.h | 7 +++---- 71 files changed, 189 insertions(+), 118 deletions(-) diff --git a/sys/alpha/alpha/autoconf.c b/sys/alpha/alpha/autoconf.c index b09f479f6cf..8fe80ea0f8d 100644 --- a/sys/alpha/alpha/autoconf.c +++ b/sys/alpha/alpha/autoconf.c @@ -177,7 +177,7 @@ configure(void *dummy) { configure_start(); - device_add_child(root_bus, platform.iobus, 0, 0); + device_add_child(root_bus, platform.iobus, 0); root_bus_configure(); diff --git a/sys/alpha/pci/apecs.c b/sys/alpha/pci/apecs.c index ea1897e896d..d23df8a2387 100644 --- a/sys/alpha/pci/apecs.c +++ b/sys/alpha/pci/apecs.c @@ -574,7 +574,7 @@ apecs_probe(device_t dev) isa_init_intr(); apecs_init_sgmap(); - device_add_child(dev, "pcib", 0, 0); + device_add_child(dev, "pcib", 0); return 0; } diff --git a/sys/alpha/pci/apecs_pci.c b/sys/alpha/pci/apecs_pci.c index 7a0573b2f36..bb1b8bd8ad9 100644 --- a/sys/alpha/pci/apecs_pci.c +++ b/sys/alpha/pci/apecs_pci.c @@ -42,7 +42,7 @@ apecs_pcib_probe(device_t dev) { device_set_desc(dev, "2107x PCI host bus adapter"); - device_add_child(dev, "pci", 0, 0); + device_add_child(dev, "pci", 0); return 0; } diff --git a/sys/alpha/pci/cia.c b/sys/alpha/pci/cia.c index f89de155719..55a4750f742 100644 --- a/sys/alpha/pci/cia.c +++ b/sys/alpha/pci/cia.c @@ -897,7 +897,7 @@ cia_probe(device_t dev) isa_init_intr(); cia_init_sgmap(); - device_add_child(dev, "pcib", 0, 0); + device_add_child(dev, "pcib", 0); return 0; } diff --git a/sys/alpha/pci/cia_pci.c b/sys/alpha/pci/cia_pci.c index 73da41a852f..32bf6452a0a 100644 --- a/sys/alpha/pci/cia_pci.c +++ b/sys/alpha/pci/cia_pci.c @@ -42,7 +42,7 @@ cia_pcib_probe(device_t dev) { device_set_desc(dev, "2117x PCI host bus adapter"); - device_add_child(dev, "pci", 0, 0); + device_add_child(dev, "pci", 0); return 0; } diff --git a/sys/alpha/pci/lca.c b/sys/alpha/pci/lca.c index 59513327e8a..c1b80822b38 100644 --- a/sys/alpha/pci/lca.c +++ b/sys/alpha/pci/lca.c @@ -460,7 +460,7 @@ lca_probe(device_t dev) isa_init_intr(); lca_init_sgmap(); - device_add_child(dev, "pcib", 0, 0); + device_add_child(dev, "pcib", 0); return 0; } diff --git a/sys/alpha/pci/lca_pci.c b/sys/alpha/pci/lca_pci.c index 10a5a2aad01..1765c3b74c8 100644 --- a/sys/alpha/pci/lca_pci.c +++ b/sys/alpha/pci/lca_pci.c @@ -42,7 +42,7 @@ lca_pcib_probe(device_t dev) { device_set_desc(dev, "21066 PCI host bus adapter"); - device_add_child(dev, "pci", 0, 0); + device_add_child(dev, "pci", 0); return 0; } diff --git a/sys/alpha/pci/tsunami.c b/sys/alpha/pci/tsunami.c index 43b8b4d0f0c..c9cb3b503c1 100644 --- a/sys/alpha/pci/tsunami.c +++ b/sys/alpha/pci/tsunami.c @@ -538,6 +538,7 @@ tsunami_init() static int tsunami_probe(device_t dev) { + device_t child; int *hose; int i; if (tsunami0) @@ -555,7 +556,8 @@ tsunami_probe(device_t dev) for(i = 0; i < num_pchips; i++) { hose = malloc(sizeof(int), M_DEVBUF, M_NOWAIT); *hose = i; - device_add_child(dev, "pcib", i, hose); + child = device_add_child(dev, "pcib", i); + device_set_ivars(child, hose); pchip_init(pchip[i], i); } diff --git a/sys/alpha/pci/tsunami_pci.c b/sys/alpha/pci/tsunami_pci.c index 634260c476d..87ea86770a8 100644 --- a/sys/alpha/pci/tsunami_pci.c +++ b/sys/alpha/pci/tsunami_pci.c @@ -70,7 +70,7 @@ tsunami_pcib_probe(device_t dev) device_set_desc(dev, "21271 PCI host bus adapter"); - child = device_add_child(dev, "pci", -1, 0); + child = device_add_child(dev, "pci", -1); if(hoseno) tsunami_hoses[hoseno] = device_get_unit(child); diff --git a/sys/alpha/tc/ioasic.c b/sys/alpha/tc/ioasic.c index c6dd884af9a..2cfe60334f0 100644 --- a/sys/alpha/tc/ioasic.c +++ b/sys/alpha/tc/ioasic.c @@ -173,6 +173,7 @@ ioasic_probe(device_t dev) static int ioasic_attach(device_t dev) { + device_t child; struct ioasic_softc* sc = IOASIC_SOFTC(dev); struct tc_attach_args *ta = device_get_ivars(dev); device_t parent = device_get_parent(dev); @@ -226,7 +227,10 @@ ioasic_attach(device_t dev) for (i = 0; i < ioasic_ndevs; i++) { ioasic_devs[i].iada_addr = sc->sc_base + ioasic_devs[i].iad_offset; - device_probe_and_attach(device_add_child(dev, ioasic_devs[i].iad_modname, -1, &ioasic_devs[i])); + + child = device_add_child(dev, ioasic_devs[i].iad_modname, -1); + device_set_ivars(child, &ioasic_devs[i]); + device_probe_and_attach(child); } return 0; } diff --git a/sys/alpha/tc/tc.c b/sys/alpha/tc/tc.c index 16d15522489..7c34306b38f 100644 --- a/sys/alpha/tc/tc.c +++ b/sys/alpha/tc/tc.c @@ -612,7 +612,8 @@ tc_attach(device_t dev) ta->ta_cookie = builtin->tcb_cookie; ta->ta_busspeed = sc->sc_speed; - child = device_add_child(dev, builtin->tcb_modname, 0, ta); + child = device_add_child(dev, builtin->tcb_modname, 0); + device_set_ivars(child, ta); device_probe_and_attach(child); } diff --git a/sys/alpha/tc/tcasic.c b/sys/alpha/tc/tcasic.c index 493b5ac0c0f..8a600f14757 100644 --- a/sys/alpha/tc/tcasic.c +++ b/sys/alpha/tc/tcasic.c @@ -82,7 +82,7 @@ tcasic_probe(device_t dev) return ENXIO; tcasic0 = dev; device_set_desc(dev, "Turbochannel Host Bus Adapter"); - tc0 = device_add_child(dev, "tc", 0, 0); + tc0 = device_add_child(dev, "tc", 0); return 0; } diff --git a/sys/alpha/tc/tcds.c b/sys/alpha/tc/tcds.c index 4cedfbf6726..2fe9292524e 100644 --- a/sys/alpha/tc/tcds.c +++ b/sys/alpha/tc/tcds.c @@ -150,6 +150,7 @@ tcds_attach(device_t dev) struct tcds_softc* sc = TCDS_SOFTC(dev); struct tc_attach_args *ta = device_get_ivars(dev); device_t parent = device_get_parent(dev); + device_t child; vm_offset_t regs,va; u_long i; struct tcds_slotconfig *slotc; @@ -229,7 +230,9 @@ tcds_attach(device_t dev) tcdsdev->tcdsda_freq = 25000000; /* XXX */ tcds_scsi_reset(tcdsdev->tcdsda_sc); - device_probe_and_attach(device_add_child(dev, "esp", -1, tcdsdev)); + child = device_add_child(dev, "esp", -1); + device_set_ivars(child, tcdsdev); + device_probe_and_attach(child); } /* the second SCSI chip isn't present on the 3000/300 series. */ @@ -248,7 +251,9 @@ tcds_attach(device_t dev) tcdsdev->tcdsda_id = 7; /* XXX */ tcdsdev->tcdsda_freq = 25000000; /* XXX */ tcds_scsi_reset(tcdsdev->tcdsda_sc); - device_probe_and_attach(device_add_child(dev, "esp", -1, tcdsdev)); + child = device_add_child(dev, "esp", -1); + device_set_ivars(child, tcdsdev); + device_probe_and_attach(child); } } return 0; diff --git a/sys/alpha/tlsb/gbus.c b/sys/alpha/tlsb/gbus.c index 4e08609134b..d8cb286a34d 100644 --- a/sys/alpha/tlsb/gbus.c +++ b/sys/alpha/tlsb/gbus.c @@ -112,6 +112,7 @@ static driver_t gbus_driver = { static int gbus_probe(device_t dev) { + device_t child; struct gbus_device *gdev; /* @@ -122,8 +123,10 @@ gbus_probe(device_t dev) if (!TLDEV_ISCPU(tlsb_get_dtype(dev))) return ENXIO; - for (gdev = gbus_children; gdev->gd_name; gdev++) - device_add_child(dev, gdev->gd_name, -1, gdev); + for (gdev = gbus_children; gdev->gd_name; gdev++) { + child = device_add_child(dev, gdev->gd_name, -1); + device_set_ivars(child, gdev); + } return 0; } diff --git a/sys/alpha/tlsb/kftxx.c b/sys/alpha/tlsb/kftxx.c index 0daf0aaae92..8450c2bf897 100644 --- a/sys/alpha/tlsb/kftxx.c +++ b/sys/alpha/tlsb/kftxx.c @@ -104,6 +104,7 @@ static driver_t kft_driver = { static int kft_probe(device_t dev) { + device_t child; struct kft_softc *sc = (struct kft_softc *) device_get_softc(dev); struct kft_device* kd; int hoseno; @@ -145,7 +146,8 @@ kft_probe(device_t dev) kd->kd_node = sc->sc_node; kd->kd_dtype = sc->sc_dtype; kd->kd_hosenum = hoseno; - device_add_child(dev, kd->kd_name, -1, kd); + child = device_add_child(dev, kd->kd_name, -1); + device_set_ivars(child, kd); } return 0; diff --git a/sys/alpha/tlsb/tlsb.c b/sys/alpha/tlsb/tlsb.c index 31a0b42c6a7..b6790f75409 100644 --- a/sys/alpha/tlsb/tlsb.c +++ b/sys/alpha/tlsb/tlsb.c @@ -206,7 +206,8 @@ tlsb_probe(device_t dev) tdev->td_swrev = TLDEV_SWREV(tldev); tdev->td_hwrev = TLDEV_HWREV(tldev); - child = device_add_child(dev, NULL, -1, tdev); + child = device_add_child(dev, NULL, -1); + device_set_ivars(child, tdev); device_set_desc(child, tlsb_node_type_str(tdev->td_dtype)); /* diff --git a/sys/alpha/tlsb/zs_tlsb.c b/sys/alpha/tlsb/zs_tlsb.c index 7b220123fc1..7a881b43b8a 100644 --- a/sys/alpha/tlsb/zs_tlsb.c +++ b/sys/alpha/tlsb/zs_tlsb.c @@ -430,8 +430,8 @@ zsc_tlsb_probe(device_t dev) /* * Add channel A and channel B */ - device_add_child(dev, "zs", 0, (void*) 0); - device_add_child(dev, "zs", 1, (void*) 0); + device_add_child(dev, "zs", 0); + device_add_child(dev, "zs", 1); return 0; } diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c index 4f12924876c..877b3267fb1 100644 --- a/sys/amd64/amd64/autoconf.c +++ b/sys/amd64/amd64/autoconf.c @@ -136,7 +136,7 @@ configure(dummy) #endif /* APIC_IO */ /* nexus0 is the top of the i386 device tree */ - device_add_child(root_bus, "nexus", 0, 0); + device_add_child(root_bus, "nexus", 0); /* initialize new bus architecture */ root_bus_configure(); diff --git a/sys/amd64/amd64/legacy.c b/sys/amd64/amd64/legacy.c index ec9c186fbb3..fda15bb0126 100644 --- a/sys/amd64/amd64/legacy.c +++ b/sys/amd64/amd64/legacy.c @@ -202,25 +202,26 @@ nexus_attach(device_t dev) * connection points now so they show up "on motherboard". */ if (!devclass_get_device(devclass_find("eisa"), 0)) { - child = device_add_child(dev, "eisa", 0, 0); + child = device_add_child(dev, "eisa", 0); if (child == NULL) panic("nexus_attach eisa"); device_probe_and_attach(child); } #if NMCA > 0 if (!devclass_get_device(devclass_find("mca"), 0)) { - child = device_add_child(dev, "mca", 0, 0); + child = device_add_child(dev, "mca", 0); if (child == 0) panic("nexus_probe mca"); device_probe_and_attach(child); } #endif if (!devclass_get_device(devclass_find("isa"), 0)) { - child = device_add_child(dev, "isa", 0, 0); + child = device_add_child(dev, "isa", 0); if (child == NULL) panic("nexus_attach isa"); device_probe_and_attach(child); } + return 0; } @@ -238,7 +239,7 @@ nexus_print_child(device_t bus, device_t child) static device_t nexus_add_child(device_t bus, int order, const char *name, int unit) { - return device_add_child_ordered(bus, order, name, unit, 0); + return device_add_child_ordered(bus, order, name, unit); } /* diff --git a/sys/amd64/amd64/nexus.c b/sys/amd64/amd64/nexus.c index ec9c186fbb3..fda15bb0126 100644 --- a/sys/amd64/amd64/nexus.c +++ b/sys/amd64/amd64/nexus.c @@ -202,25 +202,26 @@ nexus_attach(device_t dev) * connection points now so they show up "on motherboard". */ if (!devclass_get_device(devclass_find("eisa"), 0)) { - child = device_add_child(dev, "eisa", 0, 0); + child = device_add_child(dev, "eisa", 0); if (child == NULL) panic("nexus_attach eisa"); device_probe_and_attach(child); } #if NMCA > 0 if (!devclass_get_device(devclass_find("mca"), 0)) { - child = device_add_child(dev, "mca", 0, 0); + child = device_add_child(dev, "mca", 0); if (child == 0) panic("nexus_probe mca"); device_probe_and_attach(child); } #endif if (!devclass_get_device(devclass_find("isa"), 0)) { - child = device_add_child(dev, "isa", 0, 0); + child = device_add_child(dev, "isa", 0); if (child == NULL) panic("nexus_attach isa"); device_probe_and_attach(child); } + return 0; } @@ -238,7 +239,7 @@ nexus_print_child(device_t bus, device_t child) static device_t nexus_add_child(device_t bus, int order, const char *name, int unit) { - return device_add_child_ordered(bus, order, name, unit, 0); + return device_add_child_ordered(bus, order, name, unit); } /* diff --git a/sys/amd64/pci/pci_bus.c b/sys/amd64/pci/pci_bus.c index a640e141b3d..609d41647d4 100644 --- a/sys/amd64/pci/pci_bus.c +++ b/sys/amd64/pci/pci_bus.c @@ -478,7 +478,7 @@ static int nexus_pcib_probe(device_t dev) { if (pci_cfgopen() != 0) { - device_add_child(dev, "pci", device_get_unit(dev), 0); + device_add_child(dev, "pci", device_get_unit(dev)); return 0; } return ENXIO; diff --git a/sys/amd64/pci/pci_cfgreg.c b/sys/amd64/pci/pci_cfgreg.c index a640e141b3d..609d41647d4 100644 --- a/sys/amd64/pci/pci_cfgreg.c +++ b/sys/amd64/pci/pci_cfgreg.c @@ -478,7 +478,7 @@ static int nexus_pcib_probe(device_t dev) { if (pci_cfgopen() != 0) { - device_add_child(dev, "pci", device_get_unit(dev), 0); + device_add_child(dev, "pci", device_get_unit(dev)); return 0; } return ENXIO; diff --git a/sys/dev/amr/amr.c b/sys/dev/amr/amr.c index bdb3c023848..d32057b4223 100644 --- a/sys/dev/amr/amr.c +++ b/sys/dev/amr/amr.c @@ -439,9 +439,10 @@ amr_startup(struct amr_softc *sc) } dr->al_cylinders = dr->al_size / (dr->al_heads * dr->al_sectors); - dr->al_disk = device_add_child(sc->amr_dev, NULL, -1, dr); + dr->al_disk = device_add_child(sc->amr_dev, NULL, -1); if (dr->al_disk == 0) device_printf(sc->amr_dev, "device_add_child failed\n"); + device_set_ivars(dr->al_disk, dr); } } diff --git a/sys/dev/atkbdc/atkbdc_isa.c b/sys/dev/atkbdc/atkbdc_isa.c index eae6e14fec8..9829f2be80b 100644 --- a/sys/dev/atkbdc/atkbdc_isa.c +++ b/sys/dev/atkbdc/atkbdc_isa.c @@ -137,7 +137,8 @@ atkbdc_add_device(device_t dev, const char *name, int unit) else kdev->flags = 0; - child = device_add_child(dev, name, unit, kdev); + child = device_add_child(dev, name, unit); + device_set_ivars(child, kdev); } static int diff --git a/sys/dev/atkbdc/atkbdc_subr.c b/sys/dev/atkbdc/atkbdc_subr.c index eae6e14fec8..9829f2be80b 100644 --- a/sys/dev/atkbdc/atkbdc_subr.c +++ b/sys/dev/atkbdc/atkbdc_subr.c @@ -137,7 +137,8 @@ atkbdc_add_device(device_t dev, const char *name, int unit) else kdev->flags = 0; - child = device_add_child(dev, name, unit, kdev); + child = device_add_child(dev, name, unit); + device_set_ivars(child, kdev); } static int diff --git a/sys/dev/bktr/bktr_i2c.c b/sys/dev/bktr/bktr_i2c.c index 7cd0ba040ba..43a5f35a24e 100644 --- a/sys/dev/bktr/bktr_i2c.c +++ b/sys/dev/bktr/bktr_i2c.c @@ -159,10 +159,10 @@ bt848_i2c_attach(int unit, bt848_ptr_t base, struct bktr_i2c_softc *i2c_sc) btdata[unit].base = base; /* XXX add the I2C interface to the root_bus until pcibus is ready */ - interface = device_add_child(root_bus, "bti2c", unit, NULL); + interface = device_add_child(root_bus, "bti2c", unit); /* add bit-banging generic code onto bti2c interface */ - bitbang = device_add_child(interface, "iicbb", -1, NULL); + bitbang = device_add_child(interface, "iicbb", -1); /* probe and attach the interface, we need it NOW * bit-banging code is also probed and attached */ diff --git a/sys/dev/eisa/eisaconf.c b/sys/dev/eisa/eisaconf.c index d6023052d26..59f553a1170 100644 --- a/sys/dev/eisa/eisaconf.c +++ b/sys/dev/eisa/eisaconf.c @@ -152,6 +152,7 @@ eisa_probe(device_t dev) { int i,slot; struct eisa_device *e_dev; + device_t child; int eisaBase = 0xc80; eisa_id_t eisa_id; int devices_found = 0; @@ -188,7 +189,8 @@ eisa_probe(device_t dev) LIST_INIT(&(e_dev->ioconf.maddrs)); TAILQ_INIT(&(e_dev->ioconf.irqs)); - device_add_child(dev, NULL, -1, e_dev); + child = device_add_child(dev, NULL, -1); + device_set_ivars(child, e_dev); } /* diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c index da131e1da70..69e9795fc7b 100644 --- a/sys/dev/fdc/fdc.c +++ b/sys/dev/fdc/fdc.c @@ -772,7 +772,8 @@ fdc_add_device(device_t dev, const char *name, int unit) return; if (resource_int_value(name, unit, "drive", ivar) != 0) *ivar = 0; - child = device_add_child(dev, name, unit, ivar); + child = device_add_child(dev, name, unit); + device_set_ivars(child, ivar); if (child == 0) return; if (resource_int_value(name, unit, "disabled", &disabled) == 0 diff --git a/sys/dev/ida/ida.c b/sys/dev/ida/ida.c index 769205f2f36..ae253918ad6 100644 --- a/sys/dev/ida/ida.c +++ b/sys/dev/ida/ida.c @@ -252,7 +252,7 @@ ida_attach(struct ida_softc *ida) ida->num_drives = cinfo.num_drvs; for (i = 0; i < ida->num_drives; i++) - device_add_child(ida->dev, "id", i, NULL); + device_add_child(ida->dev, "id", i); bus_generic_attach(ida->dev); diff --git a/sys/dev/iicbus/iicbus.c b/sys/dev/iicbus/iicbus.c index 26912fc0a87..45a32d4d1a3 100644 --- a/sys/dev/iicbus/iicbus.c +++ b/sys/dev/iicbus/iicbus.c @@ -203,8 +203,8 @@ iicbus_attach(device_t dev) } if (iicdev->iicd_alive) { - child = device_add_child(dev, iicdev->iicd_name, - -1, iicdev); + child = device_add_child(dev, iicdev->iicd_name, -1); + device_set_ivars(child, iicdev); device_set_desc(child, iicdev->iicd_desc); } } diff --git a/sys/dev/iicbus/iiconf.c b/sys/dev/iicbus/iiconf.c index 52e92f74344..1fc07bf3b3f 100644 --- a/sys/dev/iicbus/iiconf.c +++ b/sys/dev/iicbus/iiconf.c @@ -63,7 +63,7 @@ iicbus_alloc_bus(device_t parent) device_t child; /* add the bus to the parent */ - child = device_add_child(parent, "iicbus", -1, NULL); + child = device_add_child(parent, "iicbus", -1); return (child); } diff --git a/sys/dev/mca/mca_bus.c b/sys/dev/mca/mca_bus.c index f105ea17c6f..a2dd456295c 100644 --- a/sys/dev/mca/mca_bus.c +++ b/sys/dev/mca/mca_bus.c @@ -245,6 +245,7 @@ mca_add_iospace (dev, iobase, iosize) static int mca_probe (device_t dev) { + device_t child; struct mca_device * m_dev = NULL; int devices_found = 0; u_int8_t slot; @@ -307,7 +308,8 @@ mca_probe (device_t dev) resource_list_init(&(m_dev->rl)); - device_add_child(dev, NULL, -1, m_dev); + child = device_add_child(dev, NULL, -1); + device_set_ivars(child, m_dev); m_dev = NULL; } diff --git a/sys/dev/mii/mii.c b/sys/dev/mii/mii.c index 46cdc22d56d..b3f40e29ddc 100644 --- a/sys/dev/mii/mii.c +++ b/sys/dev/mii/mii.c @@ -142,7 +142,8 @@ int miibus_probe(dev) args = malloc(sizeof(struct mii_attach_args), M_DEVBUF, M_NOWAIT); bcopy((char *)&ma, (char *)args, sizeof(ma)); - child = device_add_child(dev, NULL, -1, args); + child = device_add_child(dev, NULL, -1); + device_set_ivars(child, args); } if (child == NULL) @@ -250,7 +251,8 @@ int mii_phy_probe(dev, child, ifmedia_upd, ifmedia_sts) v = malloc(sizeof(vm_offset_t) * 2, M_DEVBUF, M_NOWAIT); v[0] = ifmedia_upd; v[1] = ifmedia_sts; - *child = device_add_child(dev, "miibus", -1, v); + *child = device_add_child(dev, "miibus", -1); + device_set_ivars(*child, v); for (i = 0; i < MII_NPHY; i++) { bmsr = MIIBUS_READREG(dev, i, MII_BMSR); diff --git a/sys/dev/mlx/mlx.c b/sys/dev/mlx/mlx.c index eccb788d078..ee099d244d8 100644 --- a/sys/dev/mlx/mlx.c +++ b/sys/dev/mlx/mlx.c @@ -480,9 +480,10 @@ mlx_startup(struct mlx_softc *sc) dr->ms_sectors = 63; dr->ms_cylinders = dr->ms_size / (255 * 63); } - dr->ms_disk = device_add_child(sc->mlx_dev, /*"mlxd"*/NULL, -1, dr); + dr->ms_disk = device_add_child(sc->mlx_dev, /*"mlxd"*/NULL, -1); if (dr->ms_disk == 0) device_printf(sc->mlx_dev, "device_add_child failed\n"); + device_set_ivars(dr->ms_disk, dr); } } free(mes, M_DEVBUF); diff --git a/sys/dev/pccard/pccard.c b/sys/dev/pccard/pccard.c index ca1748dc130..39c939cb2fe 100644 --- a/sys/dev/pccard/pccard.c +++ b/sys/dev/pccard/pccard.c @@ -839,7 +839,7 @@ pccard_card_intrdebug(arg) static int pccard_add_children(device_t dev, int busno) { - device_add_child(dev, NULL, -1, NULL); + device_add_child(dev, NULL, -1); return 0; } diff --git a/sys/dev/pcf/pcf.c b/sys/dev/pcf/pcf.c index 3cb86f7a806..1aeb7e650c8 100644 --- a/sys/dev/pcf/pcf.c +++ b/sys/dev/pcf/pcf.c @@ -164,7 +164,7 @@ pcfprobe_isa(struct isa_device *dvp) pcfdata[npcf++] = pcf; /* XXX add the pcf device to the root_bus until isa bus exists */ - pcfdev = device_add_child(root_bus, "pcf", pcf->pcf_unit, NULL); + pcfdev = device_add_child(root_bus, "pcf", pcf->pcf_unit); if (!pcfdev) goto error; diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index efb98d271e7..b4dd70b0642 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -1115,8 +1115,8 @@ pci_add_children(device_t dev, int busno) pcifunchigh = 7; pci_print_verbose(dinfo); - dinfo->cfg.dev = - device_add_child(dev, NULL, -1, dinfo); + dinfo->cfg.dev = device_add_child(dev, NULL, -1); + device_set_ivars(dinfo->cfg.dev, dinfo); pci_add_resources(dinfo->cfg.dev, &dinfo->cfg); } } diff --git a/sys/dev/ppbus/lpbb.c b/sys/dev/ppbus/lpbb.c index bf2880798eb..7d4ba59f4a2 100644 --- a/sys/dev/ppbus/lpbb.c +++ b/sys/dev/ppbus/lpbb.c @@ -134,7 +134,7 @@ lpbb_attach(device_t dev) device_t bitbang, iicbus; /* add generic bit-banging code */ - bitbang = device_add_child(dev, "iicbb", -1, NULL); + bitbang = device_add_child(dev, "iicbb", -1); /* add the iicbus to the tree */ iicbus = iicbus_alloc_bus(bitbang); @@ -191,7 +191,7 @@ static int lpbb_ppb_attach(struct ppb_device *dev) { /* add the parallel port I2C interface to the bus tree */ - if (!device_add_child(root_bus, "lpbb", dev->id_unit, NULL)) + if (!device_add_child(root_bus, "lpbb", dev->id_unit)) return (0); return (1); diff --git a/sys/dev/smbus/smbconf.c b/sys/dev/smbus/smbconf.c index 1d44ef35420..1afb7e9f221 100644 --- a/sys/dev/smbus/smbconf.c +++ b/sys/dev/smbus/smbconf.c @@ -91,7 +91,7 @@ smbus_alloc_bus(device_t parent) device_t child; /* add the bus to the parent */ - child = device_add_child(parent, "smbus", -1, NULL); + child = device_add_child(parent, "smbus", -1); return (child); } diff --git a/sys/dev/smbus/smbus.c b/sys/dev/smbus/smbus.c index 1107992f467..a1d3634aa7f 100644 --- a/sys/dev/smbus/smbus.c +++ b/sys/dev/smbus/smbus.c @@ -113,8 +113,8 @@ smbus_attach(device_t dev) device_t child; if (devclass_find(smbdev->smbd_name)) { - child = device_add_child(dev, smbdev->smbd_name, - -1, smbdev); + child = device_add_child(dev, smbdev->smbd_name, -1); + device_set_ivars(child, smbdev); device_set_desc(child, smbdev->smbd_desc); } else if (bootverbose) printf("smbus: %s devclass not found\n", diff --git a/sys/dev/sound/isa/gusc.c b/sys/dev/sound/isa/gusc.c index 93fa2501a69..b6de776c504 100644 --- a/sys/dev/sound/isa/gusc.c +++ b/sys/dev/sound/isa/gusc.c @@ -112,6 +112,7 @@ static devclass_t gusc_devclass; static int gusc_probe(device_t dev) { + device_t child; u_int32_t vend_id, logical_id; char *s; struct sndcard_func *func; @@ -133,7 +134,8 @@ gusc_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_PCM; - device_add_child(dev, "pcm", -1, func); + child = device_add_child(dev, "pcm", -1); + device_set_ivars(child, func); break; #if notyet case LOGICALID_OPL: @@ -143,7 +145,8 @@ gusc_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_SYNTH; - device_add_child(dev, "midi", -1, func); + child = device_add_child(dev, "midi", -1); + device_set_ivars(child, func); break; case LOGICALID_MIDI: s = "Gravis UltraSound Plug & Play MIDI"; @@ -152,7 +155,8 @@ gusc_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_MIDI; - device_add_child(dev, "midi", -1, func); + child = device_add_child(dev, "midi", -1); + device_set_ivars(child, func); break; #endif /* notyet */ } @@ -186,6 +190,7 @@ port_rd(struct resource *r, int i) static int gusisa_probe(device_t dev) { + device_t child; struct resource *res, *res2; int base, rid, rid2, s, flags; unsigned char val; @@ -283,7 +288,8 @@ gusisa_probe(device_t dev) return ENOMEM; bzero(func, sizeof *func); func->func = SCF_MIDI; - device_add_child(dev, "midi", -1, func); + child = device_add_child(dev, "midi", -1); + device_set_ivars(child, func); #endif /* notyet */ func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT); @@ -292,7 +298,8 @@ gusisa_probe(device_t dev) else { bzero(func, sizeof *func); func->func = SCF_PCM; - device_add_child(dev, "pcm", -1, func); + child = device_add_child(dev, "pcm", -1); + device_set_ivars(child, func); } device_set_desc(dev, "Gravis UltraSound MAX"); return 0; diff --git a/sys/dev/sound/isa/sbc.c b/sys/dev/sound/isa/sbc.c index 8f3a4eeb95b..7e9080ec822 100644 --- a/sys/dev/sound/isa/sbc.c +++ b/sys/dev/sound/isa/sbc.c @@ -86,6 +86,7 @@ static devclass_t sbc_devclass; static int sbc_probe(device_t dev) { + device_t child; u_int32_t vend_id, logical_id, vend_id2; char *s; struct sndcard_func *func; @@ -177,7 +178,8 @@ sbc_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_PCM; - device_add_child(dev, "pcm", -1, func); + child = device_add_child(dev, "pcm", -1); + device_set_ivars(child, func); #if notyet /* Midi Interface */ @@ -186,7 +188,8 @@ sbc_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_MIDI; - device_add_child(dev, "midi", -1, func); + child = device_add_child(dev, "midi", -1); + device_set_ivars(child, func); /* OPL FM Synthesizer */ func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT); @@ -194,7 +197,8 @@ sbc_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_SYNTH; - device_add_child(dev, "midi", -1, func); + child = device_add_child(dev, "midi", -1); + device_set_ivars(child, func); #endif /* notyet */ return (0); diff --git a/sys/dev/sound/pci/csa.c b/sys/dev/sound/pci/csa.c index 1637143eafb..eebeda6ad5b 100644 --- a/sys/dev/sound/pci/csa.c +++ b/sys/dev/sound/pci/csa.c @@ -91,6 +91,7 @@ static devclass_t csa_devclass; static int csa_probe(device_t dev) { + device_t child; char *s; struct sndcard_func *func; @@ -119,7 +120,8 @@ csa_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_PCM; - device_add_child(dev, "pcm", -1, func); + child = device_add_child(dev, "pcm", -1); + device_set_ivars(child, func); #if notyet /* Midi Interface */ @@ -128,7 +130,8 @@ csa_probe(device_t dev) return (ENOMEM); bzero(func, sizeof(*func)); func->func = SCF_MIDI; - device_add_child(dev, "midi", -1, func); + child = device_add_child(dev, "midi", -1); + device_set_ivars(child, func); #endif /* notyet */ return (0); diff --git a/sys/dev/usb/ohci_pci.c b/sys/dev/usb/ohci_pci.c index 8e1378b813e..f8c49641efc 100644 --- a/sys/dev/usb/ohci_pci.c +++ b/sys/dev/usb/ohci_pci.c @@ -168,7 +168,8 @@ ohci_pci_attach(device_t self) return ENOMEM; } - usbus = device_add_child(self, "usb", -1, sc); + usbus = device_add_child(self, "usb", -1); + device_set_ivars(usbus, sc); if (!usbus) { device_printf(self, "could not add USB device\n"); return ENOMEM; diff --git a/sys/dev/usb/uhci_pci.c b/sys/dev/usb/uhci_pci.c index 9285174b07c..0857f1683fc 100644 --- a/sys/dev/usb/uhci_pci.c +++ b/sys/dev/usb/uhci_pci.c @@ -181,7 +181,8 @@ uhci_pci_attach(device_t self) return ENOMEM; } - usbus = device_add_child(self, "usb", -1, sc); + usbus = device_add_child(self, "usb", -1); + device_set_ivars(usbus, sc); if (!usbus) { device_printf(self, "could not add USB device\n"); return ENOMEM; diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c index 0aedc623864..46c2e8b0ac9 100644 --- a/sys/dev/usb/usb_subr.c +++ b/sys/dev/usb/usb_subr.c @@ -747,7 +747,8 @@ usbd_probe_and_attach(parent, dev, port, addr) * during probe and attach. Should be changed however. */ device_t bdev; - bdev = device_add_child(parent, NULL, -1, &uaa); + bdev = device_add_child(parent, NULL, -1); + device_set_ivars(bdev, &uaa); if (!bdev) { printf("%s: Device creation failed\n", USBDEVNAME(dev->bus->bdev)); return (USBD_INVAL); @@ -828,8 +829,9 @@ usbd_probe_and_attach(parent, dev, port, addr) ifaces[i] = 0; /* consumed */ #if defined(__FreeBSD__) - /* create another child for the next iface */ - bdev = device_add_child(parent, NULL, -1,&uaa); + /* create another device for the next iface */ + bdev = device_add_child(parent, NULL, -1); + device_set_ivars(bdev, &uaa); if (!bdev) { printf("%s: Device creation failed\n", USBDEVNAME(dev->bus->bdev)); diff --git a/sys/i386/eisa/eisaconf.c b/sys/i386/eisa/eisaconf.c index d6023052d26..59f553a1170 100644 --- a/sys/i386/eisa/eisaconf.c +++ b/sys/i386/eisa/eisaconf.c @@ -152,6 +152,7 @@ eisa_probe(device_t dev) { int i,slot; struct eisa_device *e_dev; + device_t child; int eisaBase = 0xc80; eisa_id_t eisa_id; int devices_found = 0; @@ -188,7 +189,8 @@ eisa_probe(device_t dev) LIST_INIT(&(e_dev->ioconf.maddrs)); TAILQ_INIT(&(e_dev->ioconf.irqs)); - device_add_child(dev, NULL, -1, e_dev); + child = device_add_child(dev, NULL, -1); + device_set_ivars(child, e_dev); } /* diff --git a/sys/i386/i386/autoconf.c b/sys/i386/i386/autoconf.c index 4f12924876c..877b3267fb1 100644 --- a/sys/i386/i386/autoconf.c +++ b/sys/i386/i386/autoconf.c @@ -136,7 +136,7 @@ configure(dummy) #endif /* APIC_IO */ /* nexus0 is the top of the i386 device tree */ - device_add_child(root_bus, "nexus", 0, 0); + device_add_child(root_bus, "nexus", 0); /* initialize new bus architecture */ root_bus_configure(); diff --git a/sys/i386/i386/legacy.c b/sys/i386/i386/legacy.c index ec9c186fbb3..fda15bb0126 100644 --- a/sys/i386/i386/legacy.c +++ b/sys/i386/i386/legacy.c @@ -202,25 +202,26 @@ nexus_attach(device_t dev) * connection points now so they show up "on motherboard". */ if (!devclass_get_device(devclass_find("eisa"), 0)) { - child = device_add_child(dev, "eisa", 0, 0); + child = device_add_child(dev, "eisa", 0); if (child == NULL) panic("nexus_attach eisa"); device_probe_and_attach(child); } #if NMCA > 0 if (!devclass_get_device(devclass_find("mca"), 0)) { - child = device_add_child(dev, "mca", 0, 0); + child = device_add_child(dev, "mca", 0); if (child == 0) panic("nexus_probe mca"); device_probe_and_attach(child); } #endif if (!devclass_get_device(devclass_find("isa"), 0)) { - child = device_add_child(dev, "isa", 0, 0); + child = device_add_child(dev, "isa", 0); if (child == NULL) panic("nexus_attach isa"); device_probe_and_attach(child); } + return 0; } @@ -238,7 +239,7 @@ nexus_print_child(device_t bus, device_t child) static device_t nexus_add_child(device_t bus, int order, const char *name, int unit) { - return device_add_child_ordered(bus, order, name, unit, 0); + return device_add_child_ordered(bus, order, name, unit); } /* diff --git a/sys/i386/i386/nexus.c b/sys/i386/i386/nexus.c index ec9c186fbb3..fda15bb0126 100644 --- a/sys/i386/i386/nexus.c +++ b/sys/i386/i386/nexus.c @@ -202,25 +202,26 @@ nexus_attach(device_t dev) * connection points now so they show up "on motherboard". */ if (!devclass_get_device(devclass_find("eisa"), 0)) { - child = device_add_child(dev, "eisa", 0, 0); + child = device_add_child(dev, "eisa", 0); if (child == NULL) panic("nexus_attach eisa"); device_probe_and_attach(child); } #if NMCA > 0 if (!devclass_get_device(devclass_find("mca"), 0)) { - child = device_add_child(dev, "mca", 0, 0); + child = device_add_child(dev, "mca", 0); if (child == 0) panic("nexus_probe mca"); device_probe_and_attach(child); } #endif if (!devclass_get_device(devclass_find("isa"), 0)) { - child = device_add_child(dev, "isa", 0, 0); + child = device_add_child(dev, "isa", 0); if (child == NULL) panic("nexus_attach isa"); device_probe_and_attach(child); } + return 0; } @@ -238,7 +239,7 @@ nexus_print_child(device_t bus, device_t child) static device_t nexus_add_child(device_t bus, int order, const char *name, int unit) { - return device_add_child_ordered(bus, order, name, unit, 0); + return device_add_child_ordered(bus, order, name, unit); } /* diff --git a/sys/i386/isa/pcf.c b/sys/i386/isa/pcf.c index 3cb86f7a806..1aeb7e650c8 100644 --- a/sys/i386/isa/pcf.c +++ b/sys/i386/isa/pcf.c @@ -164,7 +164,7 @@ pcfprobe_isa(struct isa_device *dvp) pcfdata[npcf++] = pcf; /* XXX add the pcf device to the root_bus until isa bus exists */ - pcfdev = device_add_child(root_bus, "pcf", pcf->pcf_unit, NULL); + pcfdev = device_add_child(root_bus, "pcf", pcf->pcf_unit); if (!pcfdev) goto error; diff --git a/sys/i386/isa/pcibus.c b/sys/i386/isa/pcibus.c index a640e141b3d..609d41647d4 100644 --- a/sys/i386/isa/pcibus.c +++ b/sys/i386/isa/pcibus.c @@ -478,7 +478,7 @@ static int nexus_pcib_probe(device_t dev) { if (pci_cfgopen() != 0) { - device_add_child(dev, "pci", device_get_unit(dev), 0); + device_add_child(dev, "pci", device_get_unit(dev)); return 0; } return ENXIO; diff --git a/sys/i386/pci/pci_bus.c b/sys/i386/pci/pci_bus.c index a640e141b3d..609d41647d4 100644 --- a/sys/i386/pci/pci_bus.c +++ b/sys/i386/pci/pci_bus.c @@ -478,7 +478,7 @@ static int nexus_pcib_probe(device_t dev) { if (pci_cfgopen() != 0) { - device_add_child(dev, "pci", device_get_unit(dev), 0); + device_add_child(dev, "pci", device_get_unit(dev)); return 0; } return ENXIO; diff --git a/sys/i386/pci/pci_cfgreg.c b/sys/i386/pci/pci_cfgreg.c index a640e141b3d..609d41647d4 100644 --- a/sys/i386/pci/pci_cfgreg.c +++ b/sys/i386/pci/pci_cfgreg.c @@ -478,7 +478,7 @@ static int nexus_pcib_probe(device_t dev) { if (pci_cfgopen() != 0) { - device_add_child(dev, "pci", device_get_unit(dev), 0); + device_add_child(dev, "pci", device_get_unit(dev)); return 0; } return ENXIO; diff --git a/sys/i386/pci/pci_pir.c b/sys/i386/pci/pci_pir.c index a640e141b3d..609d41647d4 100644 --- a/sys/i386/pci/pci_pir.c +++ b/sys/i386/pci/pci_pir.c @@ -478,7 +478,7 @@ static int nexus_pcib_probe(device_t dev) { if (pci_cfgopen() != 0) { - device_add_child(dev, "pci", device_get_unit(dev), 0); + device_add_child(dev, "pci", device_get_unit(dev)); return 0; } return ENXIO; diff --git a/sys/isa/atkbdc_isa.c b/sys/isa/atkbdc_isa.c index eae6e14fec8..9829f2be80b 100644 --- a/sys/isa/atkbdc_isa.c +++ b/sys/isa/atkbdc_isa.c @@ -137,7 +137,8 @@ atkbdc_add_device(device_t dev, const char *name, int unit) else kdev->flags = 0; - child = device_add_child(dev, name, unit, kdev); + child = device_add_child(dev, name, unit); + device_set_ivars(child, kdev); } static int diff --git a/sys/isa/fd.c b/sys/isa/fd.c index da131e1da70..69e9795fc7b 100644 --- a/sys/isa/fd.c +++ b/sys/isa/fd.c @@ -772,7 +772,8 @@ fdc_add_device(device_t dev, const char *name, int unit) return; if (resource_int_value(name, unit, "drive", ivar) != 0) *ivar = 0; - child = device_add_child(dev, name, unit, ivar); + child = device_add_child(dev, name, unit); + device_set_ivars(child, ivar); if (child == 0) return; if (resource_int_value(name, unit, "disabled", &disabled) == 0 diff --git a/sys/isa/isa_common.c b/sys/isa/isa_common.c index 92027544859..a2478a1083e 100644 --- a/sys/isa/isa_common.c +++ b/sys/isa/isa_common.c @@ -519,6 +519,7 @@ isa_probe_children(device_t dev) static device_t isa_add_child(device_t dev, int order, const char *name, int unit) { + device_t child; struct isa_device *idev; idev = malloc(sizeof(struct isa_device), M_ISADEV, M_NOWAIT); @@ -529,7 +530,10 @@ isa_add_child(device_t dev, int order, const char *name, int unit) resource_list_init(&idev->id_resources); TAILQ_INIT(&idev->id_configs); - return device_add_child_ordered(dev, order, name, unit, idev); + child = device_add_child_ordered(dev, order, name, unit); + device_set_ivars(child, idev); + + return child; } static void diff --git a/sys/isa/vga_isa.c b/sys/isa/vga_isa.c index 0f0d81a64fe..73b58d158d3 100644 --- a/sys/isa/vga_isa.c +++ b/sys/isa/vga_isa.c @@ -173,7 +173,7 @@ isavga_attach(device_t dev) (*vidsw[sc->adp->va_index]->diag)(sc->adp, bootverbose); #if experimental - device_add_child(dev, "fb", -1, NULL); + device_add_child(dev, "fb", -1); bus_generic_attach(dev); #endif diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index f144e602825..b390b36337f 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -581,14 +581,12 @@ devclass_delete_device(devclass_t dc, device_t dev) } static device_t -make_device(device_t parent, const char *name, - int unit, void *ivars) +make_device(device_t parent, const char *name, int unit) { device_t dev; devclass_t dc; - PDEBUG(("%s at %s as unit %d with%s ivars", - name, DEVICENAME(parent), unit, (ivars? "":"out"))); + PDEBUG(("%s at %s as unit %d", name, DEVICENAME(parent), unit)); if (name) { dc = devclass_find_internal(name, TRUE); @@ -622,7 +620,7 @@ make_device(device_t parent, const char *name, dev->flags |= DF_FIXEDCLASS; devclass_add_device(dc, dev); } - dev->ivars = ivars; + dev->ivars = NULL; dev->softc = NULL; dev->state = DS_NOTPRESENT; @@ -644,22 +642,21 @@ device_print_child(device_t dev, device_t child) } device_t -device_add_child(device_t dev, const char *name, int unit, void *ivars) +device_add_child(device_t dev, const char *name, int unit) { - return device_add_child_ordered(dev, 0, name, unit, ivars); + return device_add_child_ordered(dev, 0, name, unit); } device_t -device_add_child_ordered(device_t dev, int order, - const char *name, int unit, void *ivars) +device_add_child_ordered(device_t dev, int order, const char *name, int unit) { device_t child; device_t place; - PDEBUG(("%s at %s with order %d as unit %d with%s ivars", - name, DEVICENAME(dev), order, unit, (ivars? "":"out"))); + PDEBUG(("%s at %s with order %d as unit %d", + name, DEVICENAME(dev), order, unit)); - child = make_device(dev, name, unit, ivars); + child = make_device(dev, name, unit); if (child == NULL) return child; child->order = order; @@ -984,6 +981,17 @@ device_get_ivars(device_t dev) return dev->ivars; } +void +device_set_ivars(device_t dev, void * ivars) +{ + if (!dev) + return; + + dev->ivars = ivars; + + return; +} + device_state_t device_get_state(device_t dev) { diff --git a/sys/pc98/cbus/fdc.c b/sys/pc98/cbus/fdc.c index 47063fc5701..8da7150dcab 100644 --- a/sys/pc98/cbus/fdc.c +++ b/sys/pc98/cbus/fdc.c @@ -964,7 +964,8 @@ fdc_add_device(device_t dev, const char *name, int unit) return; if (resource_int_value(name, unit, "drive", ivar) != 0) *ivar = 0; - child = device_add_child(dev, name, unit, ivar); + child = device_add_child(dev, name, unit); + device_set_ivars(child, ivar); if (child == 0) return; if (resource_int_value(name, unit, "disabled", &disabled) == 0 diff --git a/sys/pc98/pc98/fd.c b/sys/pc98/pc98/fd.c index 47063fc5701..8da7150dcab 100644 --- a/sys/pc98/pc98/fd.c +++ b/sys/pc98/pc98/fd.c @@ -964,7 +964,8 @@ fdc_add_device(device_t dev, const char *name, int unit) return; if (resource_int_value(name, unit, "drive", ivar) != 0) *ivar = 0; - child = device_add_child(dev, name, unit, ivar); + child = device_add_child(dev, name, unit); + device_set_ivars(child, ivar); if (child == 0) return; if (resource_int_value(name, unit, "disabled", &disabled) == 0 diff --git a/sys/pccard/pccard.c b/sys/pccard/pccard.c index 8eecad86f50..ec56bf5e59a 100644 --- a/sys/pccard/pccard.c +++ b/sys/pccard/pccard.c @@ -366,8 +366,9 @@ allocate_driver(struct slot *slt, struct dev_desc *desc) bcopy(desc->misc, devi->misc, sizeof(desc->misc)); resource_list_init(&devi->resources); child = devi->isahd.id_device = device_add_child(pccarddev, devi->name, - desc->unit, devi); + desc->unit); device_set_flags(child, desc->flags); + device_set_ivars(child, devi); err = bus_set_resource(child, SYS_RES_IOPORT, 0, desc->iobase, desc->iosize); if (err) diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c index 530601ded24..f4514a56bf8 100644 --- a/sys/pccard/pcic.c +++ b/sys/pccard/pcic.c @@ -512,7 +512,7 @@ pcic_probe(device_t dev) pcictimeout_ch = timeout(pcictimeout, 0, hz/2); if (validslots) { for (i = 0; i < validslots; i++) { - device_add_child(dev, NULL, -1, NULL); + device_add_child(dev, NULL, -1); } } return(validslots ? 0 : ENXIO); diff --git a/sys/pci/alpm.c b/sys/pci/alpm.c index ff4c5d3fb43..358a0320811 100644 --- a/sys/pci/alpm.c +++ b/sys/pci/alpm.c @@ -281,7 +281,7 @@ alpm_pci_attach(pcici_t tag, int unit) printf(" at 0x%x\n", alpm->smbsh); /* XXX add the I2C interface to the root_bus until pcibus is ready */ - device_add_child(root_bus, "alsmb", unit, NULL); + device_add_child(root_bus, "alsmb", unit); return; } diff --git a/sys/pci/intpm.c b/sys/pci/intpm.c index 4e3acd7a850..fccd0c3dd91 100644 --- a/sys/pci/intpm.c +++ b/sys/pci/intpm.c @@ -711,7 +711,7 @@ intpm_attach(device_t dev) device_printf(dev,"Failed to map intr\n"); return error; } - smbinterface=device_add_child(dev,"intsmb",unit,NULL); + smbinterface=device_add_child(dev,"intsmb",unit); if(!smbinterface){ printf("intsmb%d:could not add SMBus device\n",unit); } diff --git a/sys/pci/ohci_pci.c b/sys/pci/ohci_pci.c index 8e1378b813e..f8c49641efc 100644 --- a/sys/pci/ohci_pci.c +++ b/sys/pci/ohci_pci.c @@ -168,7 +168,8 @@ ohci_pci_attach(device_t self) return ENOMEM; } - usbus = device_add_child(self, "usb", -1, sc); + usbus = device_add_child(self, "usb", -1); + device_set_ivars(usbus, sc); if (!usbus) { device_printf(self, "could not add USB device\n"); return ENOMEM; diff --git a/sys/pci/pci.c b/sys/pci/pci.c index efb98d271e7..b4dd70b0642 100644 --- a/sys/pci/pci.c +++ b/sys/pci/pci.c @@ -1115,8 +1115,8 @@ pci_add_children(device_t dev, int busno) pcifunchigh = 7; pci_print_verbose(dinfo); - dinfo->cfg.dev = - device_add_child(dev, NULL, -1, dinfo); + dinfo->cfg.dev = device_add_child(dev, NULL, -1); + device_set_ivars(dinfo->cfg.dev, dinfo); pci_add_resources(dinfo->cfg.dev, &dinfo->cfg); } } diff --git a/sys/pci/pcisupport.c b/sys/pci/pcisupport.c index 6dcaa09da32..519c63b8a5e 100644 --- a/sys/pci/pcisupport.c +++ b/sys/pci/pcisupport.c @@ -779,7 +779,7 @@ static int pcib_attach(device_t dev) secondary = pci_get_secondarybus(dev); if (secondary) { - device_add_child(dev, "pci", secondary, 0); + device_add_child(dev, "pci", secondary); return bus_generic_attach(dev); } else return 0; @@ -926,10 +926,10 @@ isab_probe(device_t dev) */ device_set_desc_copy(dev, desc); if (is_eisa && !devclass_get_device(devclass_find("eisa"), 0)) - device_add_child(dev, "eisa", -1, 0); + device_add_child(dev, "eisa", -1); if (!devclass_get_device(devclass_find("isa"), 0)) - device_add_child(dev, "isa", -1, 0); + device_add_child(dev, "isa", -1); return 0; } return ENXIO; diff --git a/sys/pci/uhci_pci.c b/sys/pci/uhci_pci.c index 9285174b07c..0857f1683fc 100644 --- a/sys/pci/uhci_pci.c +++ b/sys/pci/uhci_pci.c @@ -181,7 +181,8 @@ uhci_pci_attach(device_t self) return ENOMEM; } - usbus = device_add_child(self, "usb", -1, sc); + usbus = device_add_child(self, "usb", -1); + device_set_ivars(usbus, sc); if (!usbus) { device_printf(self, "could not add USB device\n"); return ENOMEM; diff --git a/sys/sys/bus.h b/sys/sys/bus.h index 5c32be79b68..a3cea1555d0 100644 --- a/sys/sys/bus.h +++ b/sys/sys/bus.h @@ -222,11 +222,9 @@ void bus_delete_resource(device_t dev, int type, int rid); /* * Access functions for device. */ -device_t device_add_child(device_t dev, const char *name, int unit, - void *ivp); +device_t device_add_child(device_t dev, const char *name, int unit); device_t device_add_child_ordered(device_t dev, int order, - const char *name, int unit, - void *ivp); + const char *name, int unit); void device_busy(device_t dev); int device_delete_child(device_t dev, device_t child); int device_detach(device_t dev); @@ -241,6 +239,7 @@ u_int32_t device_get_flags(device_t dev); device_t device_get_parent(device_t dev); int device_get_children(device_t dev, device_t **listp, int *countp); void *device_get_ivars(device_t dev); +void device_set_ivars(device_t dev, void *ivars); const char *device_get_name(device_t dev); const char *device_get_nameunit(device_t dev); void *device_get_softc(device_t dev);