diff options
author | jlemon <jlemon@FreeBSD.org> | 2001-09-29 18:40:06 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 2001-09-29 18:40:06 +0000 |
commit | 5a10e7a36d455bb4862414f62bc665ef6247c9b7 (patch) | |
tree | bc0ddf76582b3057a355464d5aeb1dbf90e5d043 /sys/dev/mii/mii.c | |
parent | 7659fef3a078e47125e1a905f5fa87b72120204a (diff) | |
download | FreeBSD-src-5a10e7a36d455bb4862414f62bc665ef6247c9b7.zip FreeBSD-src-5a10e7a36d455bb4862414f62bc665ef6247c9b7.tar.gz |
Add new device method miibus_linkchg, along with a service routine.
Diffstat (limited to 'sys/dev/mii/mii.c')
-rw-r--r-- | sys/dev/mii/mii.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sys/dev/mii/mii.c b/sys/dev/mii/mii.c index 2e77fe5..e463b75 100644 --- a/sys/dev/mii/mii.c +++ b/sys/dev/mii/mii.c @@ -68,6 +68,7 @@ static const char rcsid[] = static int miibus_readreg __P((device_t, int, int)); static int miibus_writereg __P((device_t, int, int, int)); static void miibus_statchg __P((device_t)); +static void miibus_linkchg __P((device_t)); static void miibus_mediainit __P((device_t)); static device_method_t miibus_methods[] = { @@ -85,6 +86,7 @@ static device_method_t miibus_methods[] = { DEVMETHOD(miibus_readreg, miibus_readreg), DEVMETHOD(miibus_writereg, miibus_writereg), DEVMETHOD(miibus_statchg, miibus_statchg), + DEVMETHOD(miibus_linkchg, miibus_linkchg), DEVMETHOD(miibus_mediainit, miibus_mediainit), { 0, 0 } @@ -218,6 +220,33 @@ static void miibus_statchg(dev) return; } +static void +miibus_linkchg(dev) + device_t dev; +{ + struct mii_data *mii; + struct ifnet *ifp; + device_t parent; + int link; + + parent = device_get_parent(dev); + MIIBUS_LINKCHG(parent); + + mii = device_get_softc(dev); + ifp = device_get_softc(parent); + + if (mii->mii_media_status & IFM_AVALID) { + if (mii->mii_media_status & IFM_ACTIVE) + link = NOTE_LINKUP; + else + link = NOTE_LINKDOWN; + } else { + link = NOTE_LINKINV; + } + + KNOTE(&ifp->if_klist, link); +} + static void miibus_mediainit(dev) device_t dev; { |