svn commit: r225490 - in stable/7/sys: dev/ae dev/age dev/alc dev/ale dev/bce dev/bfe dev/bge dev/dc dev/et dev/fxp dev/jme dev/lge dev/mii dev/nfe dev/nge dev/nve dev/sf dev/sge dev/sis dev/ste de...

Marius Strobl marius at FreeBSD.org
Sun Sep 11 20:25:59 UTC 2011


Author: marius
Date: Sun Sep 11 20:25:57 2011
New Revision: 225490
URL: http://svn.freebsd.org/changeset/base/225490

Log:
  MFC: r221407 (partial)
  
  - Let mii_phy_add_media() also announce the support of IFM_NONE.
  - Add a PHY-specific reset routine is for lxtphy(4) which disables MII
    interrupts.
  - Remove redundant checks in NIC drivers for mii->mii_instance not being
    zero before calling the reset routines because as soon as one PHY driver
    attaches mii->mii_instance is incremented and we hardly can end up in
    their media change callbacks etc if no PHY driver has attached as
    mii_attach() would have failed in that case and not attach a miibus(4)
    instance.
  - Convert the mebers of the MII data structure to unsigned where
    appropriate. This is partly inspired by NetBSD/OpenBSD.
  - Add MIIF_NOMANPAUSE and mii_phy_flowstatus() calls to drivers that
    weren't explicitly converted to support flow control before. It's
    unclear whether flow control actually works with these but typically
    it should and their net behavior should be more correct with these
    changes in place than without if the MAC driver sets MIIF_DOPAUSE.
  
  Obtained from:	NetBSD (partially)

Modified:
  stable/7/sys/dev/ae/if_ae.c
  stable/7/sys/dev/age/if_age.c
  stable/7/sys/dev/alc/if_alc.c
  stable/7/sys/dev/ale/if_ale.c
  stable/7/sys/dev/bce/if_bce.c
  stable/7/sys/dev/bfe/if_bfe.c
  stable/7/sys/dev/bge/if_bge.c
  stable/7/sys/dev/dc/dcphy.c
  stable/7/sys/dev/dc/pnphy.c
  stable/7/sys/dev/et/if_et.c
  stable/7/sys/dev/fxp/if_fxp.c
  stable/7/sys/dev/jme/if_jme.c
  stable/7/sys/dev/lge/if_lge.c
  stable/7/sys/dev/mii/acphy.c
  stable/7/sys/dev/mii/amphy.c
  stable/7/sys/dev/mii/atphy.c
  stable/7/sys/dev/mii/brgphy.c
  stable/7/sys/dev/mii/ciphy.c
  stable/7/sys/dev/mii/e1000phy.c
  stable/7/sys/dev/mii/exphy.c
  stable/7/sys/dev/mii/icsphy.c
  stable/7/sys/dev/mii/inphy.c
  stable/7/sys/dev/mii/jmphy.c
  stable/7/sys/dev/mii/lxtphy.c
  stable/7/sys/dev/mii/mii.c
  stable/7/sys/dev/mii/mii.h
  stable/7/sys/dev/mii/mii_physubr.c
  stable/7/sys/dev/mii/miivar.h
  stable/7/sys/dev/mii/mlphy.c
  stable/7/sys/dev/mii/nsphy.c
  stable/7/sys/dev/mii/nsphyter.c
  stable/7/sys/dev/mii/pnaphy.c
  stable/7/sys/dev/mii/qsphy.c
  stable/7/sys/dev/mii/rdcphy.c
  stable/7/sys/dev/mii/rlphy.c
  stable/7/sys/dev/mii/rlswitch.c
  stable/7/sys/dev/mii/ruephy.c
  stable/7/sys/dev/mii/tdkphy.c
  stable/7/sys/dev/mii/tlphy.c
  stable/7/sys/dev/mii/truephy.c
  stable/7/sys/dev/mii/xmphy.c
  stable/7/sys/dev/nfe/if_nfe.c
  stable/7/sys/dev/nge/if_nge.c
  stable/7/sys/dev/nve/if_nve.c
  stable/7/sys/dev/sf/if_sf.c
  stable/7/sys/dev/sge/if_sge.c
  stable/7/sys/dev/sis/if_sis.c
  stable/7/sys/dev/ste/if_ste.c
  stable/7/sys/dev/tx/if_tx.c
  stable/7/sys/dev/usb/if_aue.c
  stable/7/sys/dev/usb/if_axe.c
  stable/7/sys/dev/usb/if_rue.c
  stable/7/sys/dev/usb/if_udav.c
  stable/7/sys/dev/vr/if_vr.c
  stable/7/sys/dev/vte/if_vte.c
  stable/7/sys/pci/if_wb.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/dev/ae/if_ae.c
==============================================================================
--- stable/7/sys/dev/ae/if_ae.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/ae/if_ae.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -904,10 +904,8 @@ ae_mediachange(struct ifnet *ifp)
 	KASSERT(sc != NULL, ("[ae, %d]: sc is NULL", __LINE__));
 	AE_LOCK(sc);
 	mii = device_get_softc(sc->miibus);
-	if (mii->mii_instance != 0) {
-		LIST_FOREACH(mii_sc, &mii->mii_phys, mii_list)
-			mii_phy_reset(mii_sc);
-	}
+	LIST_FOREACH(mii_sc, &mii->mii_phys, mii_list)
+		mii_phy_reset(mii_sc);
 	error = mii_mediachg(mii);
 	AE_UNLOCK(sc);
 

Modified: stable/7/sys/dev/age/if_age.c
==============================================================================
--- stable/7/sys/dev/age/if_age.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/age/if_age.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -301,10 +301,8 @@ age_mediachange(struct ifnet *ifp)
 	sc = ifp->if_softc;
 	AGE_LOCK(sc);
 	mii = device_get_softc(sc->age_miibus);
-	if (mii->mii_instance != 0) {
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	error = mii_mediachg(mii);
 	AGE_UNLOCK(sc);
 

Modified: stable/7/sys/dev/alc/if_alc.c
==============================================================================
--- stable/7/sys/dev/alc/if_alc.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/alc/if_alc.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -365,10 +365,8 @@ alc_mediachange(struct ifnet *ifp)
 	sc = ifp->if_softc;
 	ALC_LOCK(sc);
 	mii = device_get_softc(sc->alc_miibus);
-	if (mii->mii_instance != 0) {
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	error = mii_mediachg(mii);
 	ALC_UNLOCK(sc);
 

Modified: stable/7/sys/dev/ale/if_ale.c
==============================================================================
--- stable/7/sys/dev/ale/if_ale.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/ale/if_ale.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -286,10 +286,8 @@ ale_mediachange(struct ifnet *ifp)
 	sc = ifp->if_softc;
 	ALE_LOCK(sc);
 	mii = device_get_softc(sc->ale_miibus);
-	if (mii->mii_instance != 0) {
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	error = mii_mediachg(mii);
 	ALE_UNLOCK(sc);
 

Modified: stable/7/sys/dev/bce/if_bce.c
==============================================================================
--- stable/7/sys/dev/bce/if_bce.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/bce/if_bce.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -5813,6 +5813,7 @@ bce_ifmedia_upd_locked(struct ifnet *ifp
 {
 	struct bce_softc *sc = ifp->if_softc;
 	struct mii_data *mii;
+	struct mii_softc *miisc;
 	int error;
 
 	DBENTER(BCE_VERBOSE_PHY);
@@ -5825,12 +5826,8 @@ bce_ifmedia_upd_locked(struct ifnet *ifp
 	/* Make sure the MII bus has been enumerated. */
 	if (mii) {
 		sc->bce_link_up = FALSE;
-		if (mii->mii_instance) {
-			struct mii_softc *miisc;
-
-			LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			    mii_phy_reset(miisc);
-		}
+		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		    mii_phy_reset(miisc);
 		error = mii_mediachg(mii);
 	}
 

Modified: stable/7/sys/dev/bfe/if_bfe.c
==============================================================================
--- stable/7/sys/dev/bfe/if_bfe.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/bfe/if_bfe.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -1669,18 +1669,15 @@ bfe_ifmedia_upd(struct ifnet *ifp)
 {
 	struct bfe_softc *sc;
 	struct mii_data *mii;
+	struct mii_softc *miisc;
 	int error;
 
 	sc = ifp->if_softc;
 	BFE_LOCK(sc);
 
 	mii = device_get_softc(sc->bfe_miibus);
-	if (mii->mii_instance) {
-		struct mii_softc *miisc;
-		for (miisc = LIST_FIRST(&mii->mii_phys); miisc != NULL;
-				miisc = LIST_NEXT(miisc, mii_list))
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	error = mii_mediachg(mii);
 	BFE_UNLOCK(sc);
 

Modified: stable/7/sys/dev/bge/if_bge.c
==============================================================================
--- stable/7/sys/dev/bge/if_bge.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/bge/if_bge.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -4950,9 +4950,8 @@ bge_ifmedia_upd_locked(struct ifnet *ifp
 
 	sc->bge_link_evt++;
 	mii = device_get_softc(sc->bge_miibus);
-	if (mii->mii_instance)
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	mii_mediachg(mii);
 
 	/*

Modified: stable/7/sys/dev/dc/dcphy.c
==============================================================================
--- stable/7/sys/dev/dc/dcphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/dc/dcphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -157,7 +157,7 @@ dcphy_attach(device_t dev)
 	/*
 	 * Apparently, we can neither isolate nor do loopback.
 	 */
-	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE;
 
 	/*dcphy_reset(sc);*/
 	dc_sc = mii->mii_ifp->if_softc;

Modified: stable/7/sys/dev/dc/pnphy.c
==============================================================================
--- stable/7/sys/dev/dc/pnphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/dc/pnphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -133,7 +133,7 @@ pnphy_attach(device_t dev)
 	/*
 	 * Apparently, we can neither isolate nor do loopback.
 	 */
-	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE;
 
 	sc->mii_capabilities =
 	    BMSR_100TXFDX | BMSR_100TXHDX | BMSR_10TFDX | BMSR_10THDX;

Modified: stable/7/sys/dev/et/if_et.c
==============================================================================
--- stable/7/sys/dev/et/if_et.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/et/if_et.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -515,13 +515,10 @@ et_ifmedia_upd_locked(struct ifnet *ifp)
 {
 	struct et_softc *sc = ifp->if_softc;
 	struct mii_data *mii = device_get_softc(sc->sc_miibus);
+	struct mii_softc *miisc;
 
-	if (mii->mii_instance != 0) {
-		struct mii_softc *miisc;
-
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	mii_mediachg(mii);
 
 	return (0);

Modified: stable/7/sys/dev/fxp/if_fxp.c
==============================================================================
--- stable/7/sys/dev/fxp/if_fxp.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/fxp/if_fxp.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -2549,14 +2549,12 @@ fxp_ifmedia_upd(struct ifnet *ifp)
 {
 	struct fxp_softc *sc = ifp->if_softc;
 	struct mii_data *mii;
+		struct mii_softc	*miisc;
 
 	mii = device_get_softc(sc->miibus);
 	FXP_LOCK(sc);
-	if (mii->mii_instance) {
-		struct mii_softc	*miisc;
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	mii_mediachg(mii);
 	FXP_UNLOCK(sc);
 	return (0);

Modified: stable/7/sys/dev/jme/if_jme.c
==============================================================================
--- stable/7/sys/dev/jme/if_jme.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/jme/if_jme.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -318,10 +318,8 @@ jme_mediachange(struct ifnet *ifp)
 	sc = ifp->if_softc;
 	JME_LOCK(sc);
 	mii = device_get_softc(sc->jme_miibus);
-	if (mii->mii_instance != 0) {
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	error = mii_mediachg(mii);
 	JME_UNLOCK(sc);
 

Modified: stable/7/sys/dev/lge/if_lge.c
==============================================================================
--- stable/7/sys/dev/lge/if_lge.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/lge/if_lge.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -1404,18 +1404,15 @@ lge_ifmedia_upd_locked(ifp)
 {
 	struct lge_softc	*sc;
 	struct mii_data		*mii;
+	struct mii_softc	*miisc;
 
 	sc = ifp->if_softc;
 
 	LGE_LOCK_ASSERT(sc);
 	mii = device_get_softc(sc->lge_miibus);
 	sc->lge_link = 0;
-	if (mii->mii_instance) {
-		struct mii_softc	*miisc;
-		for (miisc = LIST_FIRST(&mii->mii_phys); miisc != NULL;
-		    miisc = LIST_NEXT(miisc, mii_list))
-			mii_phy_reset(miisc);
-	}
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	mii_mediachg(mii);
 }
 

Modified: stable/7/sys/dev/mii/acphy.c
==============================================================================
--- stable/7/sys/dev/mii/acphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/acphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -138,6 +138,8 @@ acphy_attach(device_t dev)
 	sc->mii_service = acphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 	acphy_reset(sc);
 
 	sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
@@ -245,7 +247,8 @@ acphy_status(struct mii_softc *sc)
 			mii->mii_media_active |= IFM_10_T;
 
 		if (diag & AC_DIAG_DUPLEX)
-			mii->mii_media_active |= IFM_FDX;
+			mii->mii_media_active |=
+			    IFM_FDX | mii_phy_flowstatus(sc);
 		else
 			mii->mii_media_active |= IFM_HDX;
 	} else

Modified: stable/7/sys/dev/mii/amphy.c
==============================================================================
--- stable/7/sys/dev/mii/amphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/amphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -115,6 +115,8 @@ amphy_attach(device_t dev)
 	sc->mii_service = amphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 #define	ADD(m, c)	ifmedia_add(&mii->mii_media, (m), (c), NULL)
 
 #if 0
@@ -231,6 +233,8 @@ amphy_status(struct mii_softc *sc)
 			mii->mii_media_active |= IFM_10_T|IFM_HDX;
 		else if (par & DSCSR_10HDX)
 			mii->mii_media_active |= IFM_10_T|IFM_HDX;
+		if ((mii->mii_media_active & IFM_FDX) != 0)
+			mii->mii_media_active |= mii_phy_flowstatus(sc);
 	} else
 		mii->mii_media_active = ife->ifm_media;
 }

Modified: stable/7/sys/dev/mii/atphy.c
==============================================================================
--- stable/7/sys/dev/mii/atphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/atphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -119,6 +119,8 @@ atphy_attach(device_t dev)
 	sc->mii_service = atphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 	asc->mii_oui = MII_OUI(ma->mii_id1, ma->mii_id2);
 	asc->mii_model = MII_MODEL(ma->mii_id2);
 	asc->mii_rev = MII_REV(ma->mii_id2);
@@ -318,12 +320,9 @@ static void
 atphy_reset(struct mii_softc *sc)
 {
 	struct ifmedia_entry *ife = sc->mii_pdata->mii_media.ifm_cur;
-	struct atphy_softc *asc;
 	uint32_t reg;
 	int i;
 
-	asc = (struct atphy_softc *)sc;
-
 	/* Take PHY out of power down mode. */
 	PHY_WRITE(sc, 29, 0x29);
 	PHY_WRITE(sc, 30, 0);

Modified: stable/7/sys/dev/mii/brgphy.c
==============================================================================
--- stable/7/sys/dev/mii/brgphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/brgphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -222,9 +222,6 @@ brgphy_attach(device_t dev)
 
 	/* Handle any special cases based on the PHY ID */
 	switch (bsc->mii_oui) {
-	case MII_OUI_BROADCOM:
-	case MII_OUI_BROADCOM2:
-		break;
 	case MII_OUI_xxBROADCOM:
 		switch (bsc->mii_model) {
 		case MII_MODEL_xxBROADCOM_BCM5706:
@@ -257,11 +254,6 @@ brgphy_attach(device_t dev)
 			break;
 		}
 		break;
-	case MII_OUI_xxBROADCOM_ALT2:
-		/* No special handling yet. */
-		break;
-	default:
-		device_printf(dev, "Unrecognized OUI for PHY!\n");
 	}
 
 	ifp = sc->mii_pdata->mii_ifp;
@@ -400,8 +392,6 @@ brgphy_service(struct mii_softc *sc, str
 	    sc->mii_media_status != mii->mii_media_status ||
 	    cmd == MII_MEDIACHG) {
 		switch (bsc->mii_oui) {
-		case MII_OUI_BROADCOM:
-			break;
 		case MII_OUI_xxBROADCOM:
 			switch (bsc->mii_model) {
 			case MII_MODEL_xxBROADCOM_BCM5400:
@@ -419,8 +409,6 @@ brgphy_service(struct mii_softc *sc, str
 				break;
 			}
 			break;
-		case MII_OUI_xxBROADCOM_ALT1:
-			break;
 		}
 	}
 	mii_phy_update(sc, cmd);
@@ -932,8 +920,6 @@ brgphy_reset(struct mii_softc *sc)
 
 	/* Handle any PHY specific procedures following the reset. */
 	switch (bsc->mii_oui) {
-	case MII_OUI_BROADCOM:
-		break;
 	case MII_OUI_xxBROADCOM:
 		switch (bsc->mii_model) {
 		case MII_MODEL_xxBROADCOM_BCM5400:
@@ -951,9 +937,6 @@ brgphy_reset(struct mii_softc *sc)
 			break;
 		}
 		break;
-	case MII_OUI_xxBROADCOM_ALT1:
-	case MII_OUI_xxBROADCOM_ALT2:
-		break;
 	}
 
 	ifp = sc->mii_pdata->mii_ifp;

Modified: stable/7/sys/dev/mii/ciphy.c
==============================================================================
--- stable/7/sys/dev/mii/ciphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/ciphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -122,7 +122,7 @@ ciphy_attach(device_t dev)
 	sc->mii_service = ciphy_service;
 	sc->mii_pdata = mii;
 
-	sc->mii_flags |= MIIF_NOISOLATE;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
 
 	ciphy_reset(sc);
 

Modified: stable/7/sys/dev/mii/e1000phy.c
==============================================================================
--- stable/7/sys/dev/mii/e1000phy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/e1000phy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -91,7 +91,7 @@ DRIVER_MODULE(e1000phy, miibus, e1000phy
 static int	e1000phy_service(struct mii_softc *, struct mii_data *, int);
 static void	e1000phy_status(struct mii_softc *);
 static void	e1000phy_reset(struct mii_softc *);
-static int	e1000phy_mii_phy_auto(struct e1000phy_softc *, int);
+static int	e1000phy_mii_phy_auto(struct mii_softc *, int);
 
 static const struct mii_phydesc e1000phys[] = {
 	MII_PHY_DESC(MARVELL, E1000),
@@ -313,7 +313,6 @@ static int
 e1000phy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
 {
 	struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
-	struct e1000phy_softc *esc = (struct e1000phy_softc *)sc;
 	uint16_t speed, gig;
 	int reg;
 
@@ -329,7 +328,7 @@ e1000phy_service(struct mii_softc *sc, s
 			break;
 
 		if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
-			e1000phy_mii_phy_auto(esc, ife->ifm_media);
+			e1000phy_mii_phy_auto(sc, ife->ifm_media);
 			break;
 		}
 
@@ -418,7 +417,7 @@ done:
 
 		sc->mii_ticks = 0;
 		e1000phy_reset(sc);
-		e1000phy_mii_phy_auto(esc, ife->ifm_media);
+		e1000phy_mii_phy_auto(sc, ife->ifm_media);
 		break;
 	}
 
@@ -494,12 +493,10 @@ e1000phy_status(struct mii_softc *sc)
 }
 
 static int
-e1000phy_mii_phy_auto(struct e1000phy_softc *esc, int media)
+e1000phy_mii_phy_auto(struct mii_softc *sc, int media)
 {
-	struct mii_softc *sc;
 	uint16_t reg;
 
-	sc = &esc->mii_sc;
 	if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) {
 		reg = PHY_READ(sc, E1000_AR);
 		reg &= ~(E1000_AR_PAUSE | E1000_AR_ASM_DIR);

Modified: stable/7/sys/dev/mii/exphy.c
==============================================================================
--- stable/7/sys/dev/mii/exphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/exphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -147,7 +147,7 @@ exphy_attach(device_t dev)
 	/*
 	 * The 3Com PHY can never be isolated.
 	 */
-	sc->mii_flags |= MIIF_NOISOLATE;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
 
 #define	ADD(m, c)	ifmedia_add(&mii->mii_media, (m), (c), NULL)
 

Modified: stable/7/sys/dev/mii/icsphy.c
==============================================================================
--- stable/7/sys/dev/mii/icsphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/icsphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -147,7 +147,7 @@ icsphy_attach(device_t dev)
 	sc->mii_service = icsphy_service;
 	sc->mii_pdata = mii;
 
-	sc->mii_flags |= MIIF_NOISOLATE;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
 
 	ifmedia_add(&mii->mii_media,
 	    IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst),
@@ -240,7 +240,8 @@ icsphy_status(struct mii_softc *sc)
 		else
 			mii->mii_media_active |= IFM_10_T;
 		if (qpr & QPR_FDX)
-			mii->mii_media_active |= IFM_FDX;
+			mii->mii_media_active |=
+			    IFM_FDX | mii_phy_flowstatus(sc);
 		else
 			mii->mii_media_active |= IFM_HDX;
 	} else

Modified: stable/7/sys/dev/mii/inphy.c
==============================================================================
--- stable/7/sys/dev/mii/inphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/inphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -114,7 +114,7 @@ inphy_attach(device_t dev)
 	sc->mii_service = inphy_service;
 	sc->mii_pdata = mii;
 
-	sc->mii_flags |= MIIF_NOMANPAUSE;
+	sc->mii_flags |= MIIF_NOMANPAUSE | MIIF_NOMANPAUSE;
 
 	ifmedia_add(&mii->mii_media,
 	    IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst),

Modified: stable/7/sys/dev/mii/jmphy.c
==============================================================================
--- stable/7/sys/dev/mii/jmphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/jmphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -269,12 +269,9 @@ jmphy_status(struct mii_softc *sc)
 static void
 jmphy_reset(struct mii_softc *sc)
 {
-	struct jmphy_softc *jsc;
 	uint16_t t2cr, val;
 	int i;
 
-	jsc = (struct jmphy_softc *)sc;
-
 	/* Disable sleep mode. */
 	PHY_WRITE(sc, JMPHY_TMCTL,
 	    PHY_READ(sc, JMPHY_TMCTL) & ~JMPHY_TMCTL_SLEEP_ENB);

Modified: stable/7/sys/dev/mii/lxtphy.c
==============================================================================
--- stable/7/sys/dev/mii/lxtphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/lxtphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -106,6 +106,7 @@ DRIVER_MODULE(lxtphy, miibus, lxtphy_dri
 
 static int	lxtphy_service(struct mii_softc *, struct mii_data *, int);
 static void	lxtphy_status(struct mii_softc *);
+static void	lxtphy_reset(struct mii_softc *);
 static void	lxtphy_set_tp(struct mii_softc *);
 static void	lxtphy_set_fx(struct mii_softc *);
 
@@ -140,7 +141,9 @@ lxtphy_attach(device_t dev)
 	sc->mii_service = lxtphy_service;
 	sc->mii_pdata = mii;
 
-	mii_phy_reset(sc);
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
+	lxtphy_reset(sc);
 
 	sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
 	device_printf(dev, " ");
@@ -248,6 +251,15 @@ lxtphy_status(struct mii_softc *sc)
 }
 
 static void
+lxtphy_reset(struct mii_softc *sc)
+{
+
+	mii_phy_reset(sc);
+	PHY_WRITE(sc, MII_LXTPHY_IER,
+	    PHY_READ(sc, MII_LXTPHY_IER) & ~IER_INTEN);
+}
+
+static void
 lxtphy_set_tp(struct mii_softc *sc)
 {
 	int cfg;

Modified: stable/7/sys/dev/mii/mii.c
==============================================================================
--- stable/7/sys/dev/mii/mii.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/mii.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -44,7 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/socket.h>
 #include <sys/malloc.h>
 #include <sys/module.h>
-#include <sys/bus.h> 
+#include <sys/bus.h>
 
 #include <net/if.h>
 #include <net/if_media.h>
@@ -87,9 +87,9 @@ static device_method_t miibus_methods[] 
 	/* MII interface */
 	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),    
+	DEVMETHOD(miibus_statchg,	miibus_statchg),
+	DEVMETHOD(miibus_linkchg,	miibus_linkchg),
+	DEVMETHOD(miibus_mediainit,	miibus_mediainit),
 
 	{ 0, 0 }
 };
@@ -270,7 +270,7 @@ miibus_linkchg(device_t dev)
 	MIIBUS_LINKCHG(parent);
 
 	mii = device_get_softc(dev);
-	
+
 	if (mii->mii_media_status & IFM_AVALID) {
 		if (mii->mii_media_status & IFM_ACTIVE)
 			link_state = LINK_STATE_UP;
@@ -370,7 +370,7 @@ mii_attach(device_t dev, device_t *miibu
 		 * has been allocated.
 		 */
 		ma.mii_data = device_get_softc(*miibus);
-	} 
+	}
 
 	ma.mii_capmask = capmask;
 
@@ -401,7 +401,7 @@ mii_attach(device_t dev, device_t *miibu
 		 * Check to see if there is a PHY at this address.  Note,
 		 * many braindead PHYs report 0/0 in their ID registers,
 		 * so we test for media in the BMSR.
-	 	 */
+		 */
 		bmsr = MIIBUS_READREG(dev, ma.mii_phyno, MII_BMSR);
 		if (bmsr == 0 || bmsr == 0xffff ||
 		    (bmsr & (BMSR_EXTSTAT | BMSR_MEDIAMASK)) == 0) {
@@ -420,7 +420,7 @@ mii_attach(device_t dev, device_t *miibu
 		 * Extract the IDs. Braindead PHYs will be handled by
 		 * the `ukphy' driver, as we have no ID information to
 		 * match on.
-	 	 */
+		 */
 		ma.mii_id1 = MIIBUS_READREG(dev, ma.mii_phyno, MII_PHYIDR1);
 		ma.mii_id2 = MIIBUS_READREG(dev, ma.mii_phyno, MII_PHYIDR2);
 

Modified: stable/7/sys/dev/mii/mii.h
==============================================================================
--- stable/7/sys/dev/mii/mii.h	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/mii.h	Sun Sep 11 20:25:57 2011	(r225490)
@@ -89,15 +89,9 @@
  * info available in register 15, but 802.3 section 22.2.4.3 also
  * states that that all 1000 Mb/s capable PHYs will set this bit to 1.
  */
-#if 0
-#define	BMSR_MEDIAMASK	(BMSR_100T4|BMSR_100TXFDX|BMSR_100TXHDX|BMSR_10TFDX| \
-			 BMSR_10THDX|BMSR_ANEG)
 
-#else
-/* NetBSD uses: */
 #define	BMSR_MEDIAMASK	(BMSR_100T4|BMSR_100TXFDX|BMSR_100TXHDX| \
 			 BMSR_10TFDX|BMSR_10THDX|BMSR_100T2FDX|BMSR_100T2HDX)
-#endif
 
 /*
  * Convert BMSR media capabilities to ANAR bits for autonegotiation.

Modified: stable/7/sys/dev/mii/mii_physubr.c
==============================================================================
--- stable/7/sys/dev/mii/mii_physubr.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/mii_physubr.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -428,9 +428,11 @@ mii_phy_add_media(struct mii_softc *sc)
 #define	ADD(m, c)	ifmedia_add(&mii->mii_media, (m), (c), NULL)
 #define	PRINT(s)	printf("%s%s", sep, s); sep = ", "
 
-	if ((sc->mii_flags & MIIF_NOISOLATE) == 0)
+	if ((sc->mii_flags & MIIF_NOISOLATE) == 0) {
 		ADD(IFM_MAKEWORD(IFM_ETHER, IFM_NONE, 0, sc->mii_inst),
 		    MII_MEDIA_NONE);
+		PRINT("none");
+	}
 
 	/*
 	 * There are different interpretations for the bits in

Modified: stable/7/sys/dev/mii/miivar.h
==============================================================================
--- stable/7/sys/dev/mii/miivar.h	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/miivar.h	Sun Sep 11 20:25:57 2011	(r225490)
@@ -38,7 +38,7 @@
 #include <sys/queue.h>
 
 /*
- * Media Independent Interface configuration defintions.
+ * Media Independent Interface data structure defintions
  */
 
 struct mii_softc;
@@ -65,13 +65,13 @@ struct mii_data {
 	 * request is made.
 	 */
 	LIST_HEAD(mii_listhead, mii_softc) mii_phys;
-	int mii_instance;
+	u_int mii_instance;
 
 	/*
 	 * PHY driver fills this in with active media status.
 	 */
-	int mii_media_status;
-	int mii_media_active;
+	u_int mii_media_status;
+	u_int mii_media_active;
 
 	/*
 	 * Calls from MII layer into network interface driver.
@@ -105,19 +105,19 @@ struct mii_softc {
 
 	LIST_ENTRY(mii_softc) mii_list;	/* entry on parent's PHY list */
 
-	int mii_phy;			/* our MII address */
-	int mii_inst;			/* instance for ifmedia */
+	u_int mii_phy;			/* our MII address */
+	u_int mii_inst;			/* instance for ifmedia */
 
 	mii_downcall_t mii_service;	/* our downcall */
 	struct mii_data *mii_pdata;	/* pointer to parent's mii_data */
 
-	int mii_flags;			/* misc. flags; see below */
-	int mii_capabilities;		/* capabilities from BMSR */
-	int mii_extcapabilities;	/* extended capabilities */
-	int mii_ticks;			/* MII_TICK counter */
-	int mii_anegticks;		/* ticks before retrying aneg */
-	int mii_media_active;		/* last active media */
-	int mii_media_status;		/* last active status */
+	u_int mii_flags;		/* misc. flags; see below */
+	u_int mii_capabilities;		/* capabilities from BMSR */
+	u_int mii_extcapabilities;	/* extended capabilities */
+	u_int mii_ticks;		/* MII_TICK counter */
+	u_int mii_anegticks;		/* ticks before retrying aneg */
+	u_int mii_media_active;		/* last active media */
+	u_int mii_media_status;		/* last active status */
 };
 typedef struct mii_softc mii_softc_t;
 
@@ -161,10 +161,11 @@ typedef struct mii_softc mii_softc_t;
  */
 struct mii_attach_args {
 	struct mii_data *mii_data;	/* pointer to parent data */
-	int mii_phyno;			/* MII address */
-	int mii_id1;			/* PHY ID register 1 */
-	int mii_id2;			/* PHY ID register 2 */
-	int mii_capmask;		/* capability mask from BMSR */
+	u_int mii_phyno;		/* MII address */
+	u_int mii_offset;		/* first PHY, second PHY, etc. */
+	uint32_t mii_id1;		/* PHY ID register 1 */
+	uint32_t mii_id2;		/* PHY ID register 2 */
+	u_int mii_capmask;		/* capability mask for BMSR */
 };
 typedef struct mii_attach_args mii_attach_args_t;
 
@@ -172,8 +173,8 @@ typedef struct mii_attach_args mii_attac
  * Used to match a PHY.
  */
 struct mii_phydesc {
-	u_int32_t mpd_oui;		/* the PHY's OUI */
-	u_int32_t mpd_model;		/* the PHY's model */
+	uint32_t mpd_oui;		/* the PHY's OUI */
+	uint32_t mpd_model;		/* the PHY's model */
 	const char *mpd_name;		/* the PHY's name */
 };
 #define MII_PHY_DESC(a, b) { MII_OUI_ ## a, MII_MODEL_ ## a ## _ ## b, \
@@ -184,9 +185,9 @@ struct mii_phydesc {
  * An array of these structures map MII media types to BMCR/ANAR settings.
  */
 struct mii_media {
-	int	mm_bmcr;		/* BMCR settings for this media */
-	int	mm_anar;		/* ANAR settings for this media */
-	int	mm_gtcr;		/* 100base-T2 or 1000base-T CR */
+	u_int	mm_bmcr;		/* BMCR settings for this media */
+	u_int	mm_anar;		/* ANAR settings for this media */
+	u_int	mm_gtcr;		/* 100base-T2 or 1000base-T CR */
 };
 
 #define	MII_MEDIA_NONE		0
@@ -219,7 +220,7 @@ enum miibus_device_ivars {
 #define	MIIBUS_ACCESSOR(var, ivar, type)				\
 	__BUS_ACCESSOR(miibus, var, MIIBUS, ivar, type)
 
-MIIBUS_ACCESSOR(flags,		FLAGS,		int)
+MIIBUS_ACCESSOR(flags,		FLAGS,		u_int)
 
 extern devclass_t	miibus_devclass;
 extern driver_t		miibus_driver;

Modified: stable/7/sys/dev/mii/mlphy.c
==============================================================================
--- stable/7/sys/dev/mii/mlphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/mlphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -154,6 +154,8 @@ mlphy_attach(dev)
 	sc->mii_service = mlphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 #define	ADD(m, c)	ifmedia_add(&mii->mii_media, (m), (c), NULL)
 
 	ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst),

Modified: stable/7/sys/dev/mii/nsphy.c
==============================================================================
--- stable/7/sys/dev/mii/nsphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/nsphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -139,6 +139,8 @@ nsphy_attach(device_t dev)
 	sc->mii_service = nsphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 	nic = device_get_name(device_get_parent(sc->mii_dev));
 	/*
 	 * Am79C971 wedge when isolating all of their external PHYs.
@@ -296,6 +298,9 @@ nsphy_status(struct mii_softc *sc)
 				mii->mii_media_active |= IFM_10_T|IFM_HDX;
 			else
 				mii->mii_media_active |= IFM_NONE;
+			if ((mii->mii_media_active & IFM_FDX) != 0)
+				mii->mii_media_active |=
+				    mii_phy_flowstatus(sc);
 			return;
 		}
 

Modified: stable/7/sys/dev/mii/nsphyter.c
==============================================================================
--- stable/7/sys/dev/mii/nsphyter.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/nsphyter.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -110,7 +110,7 @@ static int	nsphyter_service(struct mii_s
 static void	nsphyter_status(struct mii_softc *);
 static void	nsphyter_reset(struct mii_softc *);
 
-static const struct mii_phydesc nsphys[] = {
+static const struct mii_phydesc nsphyters[] = {
 	MII_PHY_DESC(NATSEMI, DP83815),
 	MII_PHY_DESC(NATSEMI, DP83843),
 	MII_PHY_DESC(NATSEMI, DP83847),
@@ -121,7 +121,7 @@ static int
 nsphyter_probe(device_t dev)
 {
 
-	return (mii_phy_dev_probe(dev, nsphys, BUS_PROBE_DEFAULT));
+	return (mii_phy_dev_probe(dev, nsphyters, BUS_PROBE_DEFAULT));
 }
 
 static int

Modified: stable/7/sys/dev/mii/pnaphy.c
==============================================================================
--- stable/7/sys/dev/mii/pnaphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/pnaphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -115,7 +115,8 @@ pnaphy_attach(device_t dev)
 	sc->mii_service = pnaphy_service;
 	sc->mii_pdata = mii;
 
-	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_IS_HPNA;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_IS_HPNA |
+	    MIIF_NOMANPAUSE;
 
 	mii_phy_reset(sc);
 

Modified: stable/7/sys/dev/mii/qsphy.c
==============================================================================
--- stable/7/sys/dev/mii/qsphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/qsphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -139,6 +139,8 @@ qsphy_attach(device_t dev)
 	sc->mii_service = qsphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 	qsphy_reset(sc);
 
 	sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
@@ -238,6 +240,8 @@ qsphy_status(struct mii_softc *sc)
 		mii->mii_media_active |= IFM_NONE;
 		break;
 	}
+	if ((mii->mii_media_active & IFM_FDX) != 0)
+		mii->mii_media_active |= mii_phy_flowstatus(sc);
 }
 
 static void

Modified: stable/7/sys/dev/mii/rdcphy.c
==============================================================================
--- stable/7/sys/dev/mii/rdcphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/rdcphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -115,6 +115,8 @@ rdcphy_attach(device_t dev)
 	sc->mii_service = rdcphy_service;
 	sc->mii_pdata = mii;
 
+	sc->mii_flags |= MIIF_NOMANPAUSE;
+
 	rsc->mii_model = MII_MODEL(ma->mii_id2);
 	if (bootverbose)
 		device_printf(dev, "OUI 0x%06x, model 0x%04x, rev. %d\n",

Modified: stable/7/sys/dev/mii/rlphy.c
==============================================================================
--- stable/7/sys/dev/mii/rlphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/rlphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -150,7 +150,7 @@ rlphy_attach(device_t dev)
 	/*
 	 * The RealTek PHY can never be isolated.
 	 */
-	sc->mii_flags |= MIIF_NOISOLATE;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
 
 #define	ADD(m, c)	ifmedia_add(&mii->mii_media, (m), (c), NULL)
 
@@ -259,6 +259,9 @@ rlphy_status(struct mii_softc *phy)
 				mii->mii_media_active |= IFM_10_T|IFM_HDX;
 			else
 				mii->mii_media_active |= IFM_NONE;
+			if ((mii->mii_media_active & IFM_FDX) != 0)
+				mii->mii_media_active |=
+				    mii_phy_flowstatus(phy);
 			return;
 		}
 		/*
@@ -279,10 +282,10 @@ rlphy_status(struct mii_softc *phy)
 		 * To determine the link speed, we have to do one
 		 * of two things:
 		 *
-		 * - If this is a standalone RealTek RTL8201(L) PHY,
-		 *   we can determine the link speed by testing bit 0
-		 *   in the magic, vendor-specific register at offset
-		 *   0x19.
+		 * - If this is a standalone RealTek RTL8201(L) or
+		 *   workalike PHY, we can determine the link speed by
+		 *   testing bit 0 in the magic, vendor-specific register
+		 *   at offset 0x19.
 		 *
 		 * - If this is a RealTek MAC with integrated PHY, we
 		 *   can test the 'SPEED10' bit of the MAC's media status

Modified: stable/7/sys/dev/mii/rlswitch.c
==============================================================================
--- stable/7/sys/dev/mii/rlswitch.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/rlswitch.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -129,7 +129,7 @@ rlswitch_attach(device_t dev)
 	/*
 	 * We handle all pseudo PHYs in a single instance.
 	 */
-	sc->mii_flags |= MIIF_NOISOLATE;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
 
 #define	ADD(m, c)	ifmedia_add(&mii->mii_media, (m), (c), NULL)
 
@@ -390,7 +390,8 @@ rlswitch_status(struct mii_softc *phy)
 	mii->mii_media_status = IFM_AVALID;
 	mii->mii_media_active = IFM_ETHER;
 	mii->mii_media_status |= IFM_ACTIVE;
-	mii->mii_media_active |= IFM_100_TX|IFM_FDX;
+	mii->mii_media_active |=
+	    IFM_100_TX | IFM_FDX | mii_phy_flowstatus(phy);
 }
 
 #ifdef RL_DEBUG

Modified: stable/7/sys/dev/mii/ruephy.c
==============================================================================
--- stable/7/sys/dev/mii/ruephy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/ruephy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -120,7 +120,7 @@ ruephy_attach(device_t dev)
 	/*
 	 * Apparently, we can neither isolate nor do loopback on this PHY.
 	 */
-	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE;
 
 	ruephy_reset(sc);
 
@@ -244,7 +244,8 @@ ruephy_status(struct mii_softc *phy)
 			mii->mii_media_active |= IFM_10_T;
 
 		if (msr & RUEPHY_MSR_DUPLEX)
-			mii->mii_media_active |= IFM_FDX;
+			mii->mii_media_active |=
+			    IFM_FDX | mii_phy_flowstatus(phy);
 		else
 			mii->mii_media_active |= IFM_HDX;
 	} else

Modified: stable/7/sys/dev/mii/tdkphy.c
==============================================================================
--- stable/7/sys/dev/mii/tdkphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/tdkphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -125,7 +125,7 @@ tdkphy_attach(device_t dev)
 	/*
 	 * Apparently, we can't do loopback on this PHY.
 	 */
-	sc->mii_flags |= MIIF_NOLOOP;
+	sc->mii_flags |= MIIF_NOLOOP | MIIF_NOMANPAUSE;
 
 	mii_phy_reset(sc);
 
@@ -247,6 +247,8 @@ tdkphy_status(struct mii_softc *phy)
 					mii->mii_media_active |= IFM_10_T;
 			}
 		}
+		if ((mii->mii_media_active & IFM_FDX) != 0)
+			mii->mii_media_active |= mii_phy_flowstatus(phy);
 	} else
 		mii->mii_media_active = ife->ifm_media;
 }

Modified: stable/7/sys/dev/mii/tlphy.c
==============================================================================
--- stable/7/sys/dev/mii/tlphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/tlphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -153,6 +153,8 @@ tlphy_attach(device_t dev)
 	sc->sc_mii.mii_service = tlphy_service;
 	sc->sc_mii.mii_pdata = mii;
 
+	sc->sc_mii.mii_flags |= MIIF_NOMANPAUSE;
+
 	/*
 	 * Note that if we're on a device that also supports 100baseTX,
 	 * we are not going to want to use the built-in 10baseT port,
@@ -338,7 +340,8 @@ tlphy_status(struct tlphy_softc *sc)
 	 * just have to report what's in the BMCR.
 	 */
 	if (bmcr & BMCR_FDX)
-		mii->mii_media_active |= IFM_FDX;
+		mii->mii_media_active |=
+		    IFM_FDX | mii_phy_flowstatus(&sc->sc_mii);
 	else
 		mii->mii_media_active |= IFM_HDX;
 	mii->mii_media_active |= IFM_10_T;

Modified: stable/7/sys/dev/mii/truephy.c
==============================================================================
--- stable/7/sys/dev/mii/truephy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/truephy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -157,7 +157,7 @@ truephy_attach(device_t dev)
 	sc->mii_service = truephy_service;
 	sc->mii_pdata = mii;
 
-	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE;
 
 	if (MII_MODEL(ma->mii_id2) == MII_MODEL_AGERE_ET1011)
 		mii_phy_reset(sc);
@@ -210,7 +210,7 @@ truephy_service(struct mii_softc *sc, st
 
 			if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) {
 				PHY_WRITE(sc, MII_BMCR,
-					  bmcr | BMCR_AUTOEN | BMCR_STARTNEG);
+				    bmcr | BMCR_AUTOEN | BMCR_STARTNEG);
 			}
 		}
 		break;
@@ -326,7 +326,7 @@ truephy_status(struct mii_softc *sc)
 	}
 
 	if (sr & TRUEPHY_SR_FDX)
-		mii->mii_media_active |= IFM_FDX;
+		mii->mii_media_active |= IFM_FDX | mii_phy_flowstatus(sc);
 	else
 		mii->mii_media_active |= IFM_HDX;
 }

Modified: stable/7/sys/dev/mii/xmphy.c
==============================================================================
--- stable/7/sys/dev/mii/xmphy.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/mii/xmphy.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -116,7 +116,7 @@ xmphy_attach(device_t dev)
 	sc->mii_service = xmphy_service;
 	sc->mii_pdata = mii;
 
-	sc->mii_flags |= MIIF_NOISOLATE;
+	sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
 	sc->mii_anegticks = MII_ANEGTICKS;
 
 	mii_phy_reset(sc);
@@ -134,6 +134,7 @@ xmphy_attach(device_t dev)
 	PRINT("auto");
 
 	printf("\n");
+
 #undef ADD
 #undef PRINT
 
@@ -247,7 +248,6 @@ xmphy_status(struct mii_softc *sc)
 	if (bmcr & XMPHY_BMCR_LOOP)
 		mii->mii_media_active |= IFM_LOOP;
 
-
 	if (bmcr & XMPHY_BMCR_AUTOEN) {
 		if ((bmsr & XMPHY_BMSR_ACOMP) == 0) {
 			if (bmsr & XMPHY_BMSR_LINK) {

Modified: stable/7/sys/dev/nfe/if_nfe.c
==============================================================================
--- stable/7/sys/dev/nfe/if_nfe.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/nfe/if_nfe.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -3286,14 +3286,10 @@ nfe_set_linkspeed(struct nfe_softc *sc)
 			break;
 		}
 	}
-	phyno = 0;
-	if (mii->mii_instance) {
-		miisc = LIST_FIRST(&mii->mii_phys);
-		phyno = miisc->mii_phy;
-		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-			mii_phy_reset(miisc);
-	} else
-		return;
+	miisc = LIST_FIRST(&mii->mii_phys);
+	phyno = miisc->mii_phy;
+	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+		mii_phy_reset(miisc);
 	nfe_miibus_writereg(sc->nfe_dev, phyno, MII_100T2CR, 0);
 	nfe_miibus_writereg(sc->nfe_dev, phyno,
 	    MII_ANAR, ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10 | ANAR_CSMA);

Modified: stable/7/sys/dev/nge/if_nge.c
==============================================================================
--- stable/7/sys/dev/nge/if_nge.c	Sun Sep 11 20:17:44 2011	(r225489)
+++ stable/7/sys/dev/nge/if_nge.c	Sun Sep 11 20:25:57 2011	(r225490)
@@ -2391,10 +2391,8 @@ nge_mediachange(struct ifnet *ifp)
 	sc = ifp->if_softc;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list