svn commit: r200551 - head/sys/dev/vge

Pyun YongHyeon yongari at FreeBSD.org
Mon Dec 14 14:20:06 PST 2009


Author: yongari
Date: Mon Dec 14 22:20:05 2009
New Revision: 200551
URL: http://svn.freebsd.org/changeset/base/200551

Log:
  Whenever link state change interrupt is raised, vge_tick() is
  called and vge(4) used to drive auto-negotiation timer(mii_tick) in
  vge_tick(). Therefore the mii_tick was not called for every hz such
  that auto-negotiation complete was never handled in vge(4).
  Use mii_pollstat to extract current negotiated speed/duplex instead
  of mii_tick. The latter is valid only for auto-negotiation case.
  While I'm here change the confusing function name vge_tick() to
  vge_link_statchg().

Modified:
  head/sys/dev/vge/if_vge.c

Modified: head/sys/dev/vge/if_vge.c
==============================================================================
--- head/sys/dev/vge/if_vge.c	Mon Dec 14 22:08:35 2009	(r200550)
+++ head/sys/dev/vge/if_vge.c	Mon Dec 14 22:20:05 2009	(r200551)
@@ -168,6 +168,7 @@ static void	vge_init(void *);
 static void	vge_init_locked(struct vge_softc *);
 static void	vge_intr(void *);
 static int	vge_ioctl(struct ifnet *, u_long, caddr_t);
+static void	vge_link_statchg(void *);
 static int	vge_miibus_readreg(device_t, int, int);
 static void	vge_miibus_statchg(device_t);
 static int	vge_miibus_writereg(device_t, int, int, int);
@@ -182,7 +183,6 @@ static void	vge_setmulti(struct vge_soft
 static void	vge_start(struct ifnet *);
 static void	vge_start_locked(struct ifnet *);
 static void	vge_stop(struct vge_softc *);
-static void	vge_tick(void *);
 static int	vge_tx_list_init(struct vge_softc *);
 static void	vge_txeof(struct vge_softc *);
 static void	vge_watchdog(void *);
@@ -1595,7 +1595,7 @@ vge_txeof(struct vge_softc *sc)
 }
 
 static void
-vge_tick(void *xsc)
+vge_link_statchg(void *xsc)
 {
 	struct vge_softc *sc;
 	struct ifnet *ifp;
@@ -1606,7 +1606,7 @@ vge_tick(void *xsc)
 	VGE_LOCK_ASSERT(sc);
 	mii = device_get_softc(sc->vge_miibus);
 
-	mii_tick(mii);
+	mii_pollstat(mii);
 	if ((sc->vge_flags & VGE_FLAG_LINK) != 0) {
 		if (!(mii->mii_media_status & IFM_ACTIVE)) {
 			sc->vge_flags &= ~VGE_FLAG_LINK;
@@ -1735,7 +1735,7 @@ vge_intr(void *arg)
 		}
 
 		if (status & VGE_ISR_LINKSTS)
-			vge_tick(sc);
+			vge_link_statchg(sc);
 	}
 
 	/* Re-enable interrupts */


More information about the svn-src-head mailing list