diff options
Diffstat (limited to 'sys/dev/etherswitch/ar40xx/ar40xx_main.c')
-rw-r--r-- | sys/dev/etherswitch/ar40xx/ar40xx_main.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/dev/etherswitch/ar40xx/ar40xx_main.c b/sys/dev/etherswitch/ar40xx/ar40xx_main.c index 757dbe23071e..d5636d26120b 100644 --- a/sys/dev/etherswitch/ar40xx/ar40xx_main.c +++ b/sys/dev/etherswitch/ar40xx/ar40xx_main.c @@ -254,22 +254,23 @@ static int ar40xx_detach(device_t dev) { struct ar40xx_softc *sc = device_get_softc(dev); - int i; + int error, i; device_printf(sc->sc_dev, "%s: called\n", __func__); + error = bus_generic_detach(dev); + if (error != 0) + return (error); + callout_drain(&sc->sc_phy_callout); /* Free PHYs */ for (i = 0; i < AR40XX_NUM_PHYS; i++) { - if (sc->sc_phys.miibus[i] != NULL) - device_delete_child(dev, sc->sc_phys.miibus[i]); if (sc->sc_phys.ifp[i] != NULL) if_free(sc->sc_phys.ifp[i]); free(sc->sc_phys.ifname[i], M_DEVBUF); } - bus_generic_detach(dev); mtx_destroy(&sc->sc_mtx); return (0); @@ -482,9 +483,9 @@ ar40xx_attach(device_t dev) /* Attach PHYs */ ret = ar40xx_attach_phys(sc); - ret = bus_generic_probe(dev); + bus_identify_children(dev); bus_enumerate_hinted_children(dev); - ret = bus_generic_attach(dev); + bus_attach_children(dev); /* Start timer */ callout_init_mtx(&sc->sc_phy_callout, &sc->sc_mtx, 0); |