The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=96a550e9dd892f24a479da00ead93fbfaafb7733
commit 96a550e9dd892f24a479da00ead93fbfaafb7733 Author: John Baldwin <j...@freebsd.org> AuthorDate: 2025-08-01 20:07:30 +0000 Commit: John Baldwin <j...@freebsd.org> CommitDate: 2025-08-01 20:07:30 +0000 genet: Add a detach routine PR: 288309 Co-authored by: Mike Belanger <mibelan...@qnx.com> MFC after: 2 weeks --- sys/arm64/broadcom/genet/if_genet.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c index 182b5582fb7c..013573f1551b 100644 --- a/sys/arm64/broadcom/genet/if_genet.c +++ b/sys/arm64/broadcom/genet/if_genet.c @@ -201,6 +201,7 @@ struct gen_softc { static void gen_init(void *softc); static void gen_start(if_t ifp); +static void gen_stop(struct gen_softc *sc); static void gen_destroy(struct gen_softc *sc); static int gen_encap(struct gen_softc *sc, struct mbuf **mp); static int gen_parse_tx(struct mbuf *m, int csum_flags); @@ -379,6 +380,39 @@ gen_destroy(struct gen_softc *sc) } } +static int +gen_detach(device_t dev) +{ + struct gen_softc *sc; + int error; + + sc = device_get_softc(dev); + + GEN_LOCK(sc); + gen_stop(sc); + GEN_UNLOCK(sc); + callout_drain(&sc->stat_ch); + ether_ifdetach(sc->ifp); + + /* Detach the miibus */ + error = bus_generic_detach(dev); + if (error != 0) + return (error); + + /* clean up dma */ + gen_bus_dma_teardown(sc); + + /* Release bus resources. */ + bus_teardown_intr(sc->dev, sc->res[_RES_IRQ1], sc->ih); + bus_teardown_intr(sc->dev, sc->res[_RES_IRQ2], sc->ih2); + bus_release_resources(sc->dev, gen_spec, sc->res); + + if (sc->ifp != NULL) + if_free(sc->ifp); + mtx_destroy(&sc->mtx); + return (0); +} + static int gen_get_phy_mode(device_t dev) { @@ -1805,6 +1839,7 @@ static device_method_t gen_methods[] = { /* Device interface */ DEVMETHOD(device_probe, gen_probe), DEVMETHOD(device_attach, gen_attach), + DEVMETHOD(device_detach, gen_detach), /* MII interface */ DEVMETHOD(miibus_readreg, gen_miibus_readreg),