From 9b04180c2ce21ea28f108f132cdcd7b097c4f01d Mon Sep 17 00:00:00 2001 From: Ian Dowse Date: Sat, 29 Sep 2001 22:32:03 +0000 Subject: Add an option ED_NO_MIIBUS, which causes the `ed' driver to be built without support for miibus PHYs. Most ed cards don't need miibus support, so it's useful to be able to avoid the bloat of all the mii devices for small fixed-purpose kernels. --- sys/dev/ed/if_ed.c | 20 ++++++++++++++++++++ sys/dev/ed/if_ed_pccard.c | 16 ++++++++++++++++ sys/dev/ed/if_edvar.h | 2 ++ 3 files changed, 38 insertions(+) (limited to 'sys/dev/ed') diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c index 490837269b91..05008327243b 100644 --- a/sys/dev/ed/if_ed.c +++ b/sys/dev/ed/if_ed.c @@ -37,6 +37,8 @@ * */ +#include "opt_ed.h" + #include #include #include @@ -58,8 +60,10 @@ #include #include +#ifndef ED_NO_MIIBUS #include #include +#endif #include #include "opt_bdg.h" @@ -79,7 +83,9 @@ static int ed_ioctl __P((struct ifnet *, u_long, caddr_t)); static void ed_start __P((struct ifnet *)); static void ed_reset __P((struct ifnet *)); static void ed_watchdog __P((struct ifnet *)); +#ifndef ED_NO_MIIBUS static void ed_tick __P((void *)); +#endif static void ds_getmcaf __P((struct ed_softc *, u_int32_t *)); @@ -1702,8 +1708,10 @@ ed_stop(sc) { int n = 5000; +#ifndef ED_NO_MIIBUS untimeout(ed_tick, sc, sc->tick_ch); callout_handle_init(&sc->tick_ch); +#endif if (sc->gone) return; /* @@ -1738,6 +1746,7 @@ ed_watchdog(ifp) ed_reset(ifp); } +#ifndef ED_NO_MIIBUS static void ed_tick(arg) void *arg; @@ -1758,6 +1767,7 @@ ed_tick(arg) sc->tick_ch = timeout(ed_tick, sc, hz); splx(s); } +#endif /* * Initialize device. @@ -1900,11 +1910,13 @@ ed_init(xsc) } } +#ifndef ED_NO_MIIBUS if (sc->miibus != NULL) { struct mii_data *mii; mii = device_get_softc(sc->miibus); mii_mediachg(mii); } +#endif /* * Set 'running' flag, and clear output active flag. */ @@ -1916,8 +1928,10 @@ ed_init(xsc) */ ed_start(ifp); +#ifndef ED_NO_MIIBUS untimeout(ed_tick, sc, sc->tick_ch); sc->tick_ch = timeout(ed_tick, sc, hz); +#endif (void) splx(s); } @@ -2529,8 +2543,10 @@ ed_ioctl(ifp, command, data) caddr_t data; { struct ed_softc *sc = ifp->if_softc; +#ifndef ED_NO_MIIBUS struct ifreq *ifr = (struct ifreq *)data; struct mii_data *mii; +#endif int s, error = 0; if (sc == NULL || sc->gone) { @@ -2593,6 +2609,7 @@ ed_ioctl(ifp, command, data) error = 0; break; +#ifndef ED_NO_MIIBUS case SIOCGIFMEDIA: case SIOCSIFMEDIA: if (sc->miibus == NULL) { @@ -2602,6 +2619,7 @@ ed_ioctl(ifp, command, data) mii = device_get_softc(sc->miibus); error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command); break; +#endif default: error = EINVAL; @@ -3222,6 +3240,7 @@ ed_hpp_write_mbufs(struct ed_softc *sc, struct mbuf *m, int dst) return (total_len); } +#ifndef ED_NO_MIIBUS /* * MII bus support routines. */ @@ -3325,6 +3344,7 @@ ed_child_detached(dev, child) if (child == sc->miibus) sc->miibus = NULL; } +#endif static void ed_setrcr(sc) diff --git a/sys/dev/ed/if_ed_pccard.c b/sys/dev/ed/if_ed_pccard.c index d118d7c3b638..2b342a360ca2 100644 --- a/sys/dev/ed/if_ed_pccard.c +++ b/sys/dev/ed/if_ed_pccard.c @@ -27,6 +27,8 @@ * $FreeBSD$ */ +#include "opt_ed.h" + #include #include #include @@ -50,14 +52,18 @@ #include #include #include +#ifndef ED_NO_MIIBUS #include #include +#endif #include "card_if.h" +#ifndef ED_NO_MIIBUS /* "device miibus" required. See GENERIC if you get errors here. */ #include "miibus_if.h" MODULE_DEPEND(ed, miibus, 1, 1, 1); +#endif /* * PC-Card (PCMCIA) specific code. @@ -72,10 +78,12 @@ static int ed_pccard_ax88190(device_t dev); static void ax88190_geteprom(struct ed_softc *); static int ed_pccard_memwrite(device_t dev, off_t offset, u_char byte); +#ifndef ED_NO_MIIBUS static void ed_pccard_dlink_mii_reset(struct ed_softc *sc); static u_int ed_pccard_dlink_mii_readbits(struct ed_softc *sc, int nbits); static void ed_pccard_dlink_mii_writebits(struct ed_softc *sc, u_int val, int nbits); +#endif /* * ed_pccard_detach - unload the driver and clear the table. @@ -561,6 +569,7 @@ ed_pccard_attach(device_t dev) } error = ed_attach(sc, device_get_unit(dev), flags); +#ifndef ED_NO_MIIBUS if (error == 0 && sc->vendor == ED_VENDOR_LINKSYS) { /* Probe for an MII bus, but ignore errors. */ ed_pccard_dlink_mii_reset(sc); @@ -569,6 +578,7 @@ ed_pccard_attach(device_t dev) mii_phy_probe(dev, &sc->miibus, ed_ifmedia_upd, ed_ifmedia_sts); } +#endif return (error); } @@ -712,6 +722,7 @@ ed_pccard_ax88190(device_t dev) return (error); } +#ifndef ED_NO_MIIBUS /* MII bit-twiddling routines for cards using Dlink chipset */ #define DLINK_MIISET(sc, x) ed_asic_outb(sc, ED_DLINK_MIIBUS, \ ed_asic_inb(sc, ED_DLINK_MIIBUS) | (x)) @@ -779,6 +790,7 @@ ed_pccard_dlink_mii_readbits(sc, nbits) return val; } +#endif static device_method_t ed_pccard_methods[] = { /* Device interface */ @@ -786,12 +798,14 @@ static device_method_t ed_pccard_methods[] = { DEVMETHOD(device_attach, pccard_compat_attach), DEVMETHOD(device_detach, ed_pccard_detach), +#ifndef ED_NO_MIIBUS /* Bus interface */ DEVMETHOD(bus_child_detached, ed_child_detached), /* MII interface */ DEVMETHOD(miibus_readreg, ed_miibus_readreg), DEVMETHOD(miibus_writereg, ed_miibus_writereg), +#endif /* Card interface */ DEVMETHOD(card_compat_match, ed_pccard_match), @@ -807,4 +821,6 @@ static driver_t ed_pccard_driver = { }; DRIVER_MODULE(if_ed, pccard, ed_pccard_driver, ed_devclass, 0, 0); +#ifndef ED_NO_MIIBUS DRIVER_MODULE(miibus, ed, miibus_driver, miibus_devclass, 0, 0); +#endif diff --git a/sys/dev/ed/if_edvar.h b/sys/dev/ed/if_edvar.h index 8c58b64b8aaa..06791981cf8e 100644 --- a/sys/dev/ed/if_edvar.h +++ b/sys/dev/ed/if_edvar.h @@ -209,11 +209,13 @@ void ed_pio_readmem __P((struct ed_softc *, int, unsigned char *, unsigned short)); void ed_pio_writemem __P((struct ed_softc *, char *, unsigned short, unsigned short)); +#ifndef ED_NO_MIIBUS int ed_miibus_readreg __P((device_t, int, int)); void ed_miibus_writereg __P((device_t, int, int, int)); int ed_ifmedia_upd __P((struct ifnet *)); void ed_ifmedia_sts __P((struct ifnet *, struct ifmediareq *)); void ed_child_detached __P((device_t, device_t)); +#endif driver_intr_t edintr; -- cgit v1.3