summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii/mii.c
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-09-29 18:40:06 +0000
committerjlemon <jlemon@FreeBSD.org>2001-09-29 18:40:06 +0000
commit5a10e7a36d455bb4862414f62bc665ef6247c9b7 (patch)
treebc0ddf76582b3057a355464d5aeb1dbf90e5d043 /sys/dev/mii/mii.c
parent7659fef3a078e47125e1a905f5fa87b72120204a (diff)
downloadFreeBSD-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.c29
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;
{
OpenPOWER on IntegriCloud