Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Apr 2015 16:51:55 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r282030 - projects/ifnet/sys/dev/re
Message-ID:  <201504261651.t3QGptW7036110@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Sun Apr 26 16:51:54 2015
New Revision: 282030
URL: https://svnweb.freebsd.org/changeset/base/282030

Log:
  Convert re(4) to new media and miibus KPI.
  
  No functional changes.
  Not tested.
  
  Sponsored by:	Netflix
  Sponsored by:	Nginx, Inc.

Modified:
  projects/ifnet/sys/dev/re/if_re.c

Modified: projects/ifnet/sys/dev/re/if_re.c
==============================================================================
--- projects/ifnet/sys/dev/re/if_re.c	Sun Apr 26 16:51:09 2015	(r282029)
+++ projects/ifnet/sys/dev/re/if_re.c	Sun Apr 26 16:51:54 2015	(r282030)
@@ -275,7 +275,7 @@ static void re_watchdog		(struct rl_soft
 static int re_suspend		(device_t);
 static int re_resume		(device_t);
 static int re_shutdown		(device_t);
-static int re_ifmedia_upd	(if_t);
+static int re_ifmedia_upd	(if_t, if_media_t);
 static void re_ifmedia_sts	(if_t, struct ifmediareq *);
 
 static void re_eeprom_putbyte	(struct rl_softc *, int);
@@ -313,6 +313,8 @@ static struct ifdriver re_ifdrv = {
 	.ifdrv_ops = {
 		.ifop_ioctl = re_ioctl,
 		.ifop_transmit = re_transmit,
+		.ifop_media_change = re_ifmedia_upd,
+		.ifop_media_status = re_ifmedia_sts,
 #ifdef DEVICE_POLLING
 		.ifop_poll = re_poll,
 #endif
@@ -642,8 +644,7 @@ re_miibus_statchg(device_t dev)
 		}
 	}
 
-	if_setbaudrate(ifp, ifmedia_baudrate(mii->mii_media_active));
-	if_link_state_change(ifp, ifmedia_link_state(mii->mii_media_status));
+	if_media_status(ifp, mii->mii_media_active | mii->mii_media_status);
 
 	/*
 	 * RealTek controllers does not provide any interface to
@@ -1228,6 +1229,7 @@ re_attach(device_t dev)
 		.ifat_drv = &re_ifdrv,
 		.ifat_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST,
 		.ifat_capabilities = IFCAP_LINKSTATE,
+		.ifat_mediamask = MII_MEDIA_MASK,
 	};
 	u_char			eaddr[ETHER_ADDR_LEN];
 	u_int16_t		as[ETHER_ADDR_LEN / 2];
@@ -1669,19 +1671,15 @@ re_attach(device_t dev)
 	phy = RE_PHYAD_INTERNAL;
 	if (sc->rl_type == RL_8169)
 		phy = 1;
-	error = mii_attach(dev, &sc->rl_miibus, re_ifmedia_upd, re_ifmedia_sts,
-	    BMSR_DEFCAPMASK, phy, MII_OFFSET_ANY, MIIF_DOPAUSE);
+	error = mii_attach(dev, &sc->rl_miibus, BMSR_DEFCAPMASK, phy,
+	    MII_OFFSET_ANY, MIIF_DOPAUSE);
 	if (error != 0) {
 		device_printf(dev, "attaching PHYs failed\n");
 		goto fail;
 	}
-
 	mii = device_get_softc(sc->rl_miibus);
-	ifat.ifat_baudrate = ifmedia_baudrate(mii->mii_media_active);
-
-	/*
-	 * Call MI attach routine.
-	 */
+	ifat.ifat_media = mii->mii_media;
+	ifat.ifat_mediae = mii->mii_mediae;
 
 	/* VLAN capability setup */
 	ifat.ifat_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING;
@@ -3062,8 +3060,6 @@ re_init(struct rl_softc *sc)
 
 	RL_LOCK_ASSERT(sc);
 
-	mii = device_get_softc(sc->rl_miibus);
-
 	if ((sc->rl_flags & RL_FLAG_RUNNING) != 0)
 		return;
 
@@ -3294,7 +3290,8 @@ re_init(struct rl_softc *sc)
 	sc->rl_flags |= RL_FLAG_RUNNING;
 
 	sc->rl_flags &= ~RL_FLAG_LINK;
-	mii_mediachg(mii);
+	mii = device_get_softc(sc->rl_miibus);
+	mii_mediachg(mii, mii->mii_media);
 
 	sc->rl_watchdog_timer = 0;
 	callout_reset(&sc->rl_stat_callout, hz, re_tick, sc);
@@ -3304,7 +3301,7 @@ re_init(struct rl_softc *sc)
  * Set media options.
  */
 static int
-re_ifmedia_upd(if_t ifp)
+re_ifmedia_upd(if_t ifp, if_media_t media)
 {
 	struct rl_softc		*sc;
 	struct mii_data		*mii;
@@ -3313,7 +3310,7 @@ re_ifmedia_upd(if_t ifp)
 	sc = if_getsoftc(ifp, IF_DRIVER_SOFTC);
 	mii = device_get_softc(sc->rl_miibus);
 	RL_LOCK(sc);
-	error = mii_mediachg(mii);
+	error = mii_mediachg(mii, media);
 	RL_UNLOCK(sc);
 
 	return (error);
@@ -3344,7 +3341,6 @@ re_ioctl(if_t ifp, u_long command, void 
 {
 	struct rl_softc		*sc = if_getsoftc(ifp, IF_DRIVER_SOFTC);
 	struct ifreq		*ifr = (struct ifreq *) data;
-	struct mii_data		*mii;
 	int			error = 0;
 	uint32_t		oflags;
 
@@ -3414,11 +3410,6 @@ re_ioctl(if_t ifp, u_long command, void 
 			re_set_rxmode(sc);
 		RL_UNLOCK(sc);
 		break;
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		mii = device_get_softc(sc->rl_miibus);
-		error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
-		break;
 	case SIOCSIFCAP:
 	    {
 		int mask, reinit;
@@ -3748,7 +3739,7 @@ re_set_linkspeed(struct rl_softc *sc)
 	miisc = LIST_FIRST(&mii->mii_phys);
 	phyno = miisc->mii_phy;
 	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-		PHY_RESET(miisc);
+		PHY_RESET(miisc, mii->mii_media);
 	re_miibus_writereg(sc->rl_dev, phyno, MII_100T2CR, 0);
 	re_miibus_writereg(sc->rl_dev, phyno,
 	    MII_ANAR, ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10 | ANAR_CSMA);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504261651.t3QGptW7036110>