Author: kevlo
Date: Fri Jun 14 05:36:47 2013
New Revision: 251734
URL: http://svnweb.freebsd.org/changeset/base/251734

Log:
  - Use the consistenly PHY-specific reset routine PHY_RESET() rather than
    generic mii_phy_reset().
  - Return the result of mii_mediachg() rather than blindly returning 0.
  - on smsc(4), driver lock should be held to get current
    mii_media_active/mii_media_status value.
  
  Reviewed by:  yongari

Modified:
  head/sys/dev/rt/if_rt.c
  head/sys/dev/usb/net/if_aue.c
  head/sys/dev/usb/net/if_mos.c
  head/sys/dev/usb/net/if_rue.c
  head/sys/dev/usb/net/if_smsc.c
  head/sys/dev/usb/net/if_udav.c

Modified: head/sys/dev/rt/if_rt.c
==============================================================================
--- head/sys/dev/rt/if_rt.c     Fri Jun 14 05:16:51 2013        (r251733)
+++ head/sys/dev/rt/if_rt.c     Fri Jun 14 05:36:47 2013        (r251734)
@@ -475,20 +475,16 @@ rt_ifmedia_upd(struct ifnet *ifp)
        struct rt_softc *sc;
 #ifdef IF_RT_PHY_SUPPORT
        struct mii_data *mii;
+       struct mii_softc *miisc;
        int error = 0;
 
        sc = ifp->if_softc;
        RT_SOFTC_LOCK(sc);
 
        mii = device_get_softc(sc->rt_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);
-       }
-       if (mii)
-               error = mii_mediachg(mii);
+       LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+               PHY_RESET(miisc);
+       error = mii_mediachg(mii);
        RT_SOFTC_UNLOCK(sc);
 
        return (error);

Modified: head/sys/dev/usb/net/if_aue.c
==============================================================================
--- head/sys/dev/usb/net/if_aue.c       Fri Jun 14 05:16:51 2013        
(r251733)
+++ head/sys/dev/usb/net/if_aue.c       Fri Jun 14 05:36:47 2013        
(r251734)
@@ -1008,14 +1008,15 @@ aue_ifmedia_upd(struct ifnet *ifp)
        struct aue_softc *sc = ifp->if_softc;
        struct mii_data *mii = GET_MII(sc);
        struct mii_softc *miisc;
+       int error;
 
        AUE_LOCK_ASSERT(sc, MA_OWNED);
 
         sc->sc_flags &= ~AUE_FLAG_LINK;
        LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
                PHY_RESET(miisc);
-       mii_mediachg(mii);
-       return (0);
+       error = mii_mediachg(mii);
+       return (error);
 }
 
 /*

Modified: head/sys/dev/usb/net/if_mos.c
==============================================================================
--- head/sys/dev/usb/net/if_mos.c       Fri Jun 14 05:16:51 2013        
(r251733)
+++ head/sys/dev/usb/net/if_mos.c       Fri Jun 14 05:36:47 2013        
(r251734)
@@ -526,16 +526,15 @@ mos_ifmedia_upd(struct ifnet *ifp)
        struct mos_softc *sc = ifp->if_softc;
        struct mii_data *mii = GET_MII(sc);
        struct mii_softc *miisc;
+       int error;
 
        MOS_LOCK_ASSERT(sc, MA_OWNED);
 
        sc->mos_link = 0;
-       if (mii->mii_instance) {
-               LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-                   mii_phy_reset(miisc);
-       }
-       mii_mediachg(mii);
-       return (0);
+       LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+               PHY_RESET(miisc);
+       error = mii_mediachg(mii);
+       return (error);
 }
 
 /*

Modified: head/sys/dev/usb/net/if_rue.c
==============================================================================
--- head/sys/dev/usb/net/if_rue.c       Fri Jun 14 05:16:51 2013        
(r251733)
+++ head/sys/dev/usb/net/if_rue.c       Fri Jun 14 05:36:47 2013        
(r251734)
@@ -866,14 +866,15 @@ rue_ifmedia_upd(struct ifnet *ifp)
        struct rue_softc *sc = ifp->if_softc;
        struct mii_data *mii = GET_MII(sc);
        struct mii_softc *miisc;
+       int error;
 
        RUE_LOCK_ASSERT(sc, MA_OWNED);
 
         sc->sc_flags &= ~RUE_FLAG_LINK;
        LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
                PHY_RESET(miisc);
-       mii_mediachg(mii);
-       return (0);
+       error = mii_mediachg(mii);
+       return (error);
 }
 
 /*

Modified: head/sys/dev/usb/net/if_smsc.c
==============================================================================
--- head/sys/dev/usb/net/if_smsc.c      Fri Jun 14 05:16:51 2013        
(r251733)
+++ head/sys/dev/usb/net/if_smsc.c      Fri Jun 14 05:36:47 2013        
(r251734)
@@ -606,16 +606,13 @@ smsc_ifmedia_upd(struct ifnet *ifp)
 {
        struct smsc_softc *sc = ifp->if_softc;
        struct mii_data *mii = uether_getmii(&sc->sc_ue);
+       struct mii_softc *miisc;
        int err;
 
        SMSC_LOCK_ASSERT(sc, MA_OWNED);
 
-       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)
+               PHY_RESET(miisc);
        err = mii_mediachg(mii);
        return (err);
 }
@@ -638,13 +635,10 @@ smsc_ifmedia_sts(struct ifnet *ifp, stru
        struct mii_data *mii = uether_getmii(&sc->sc_ue);
 
        SMSC_LOCK(sc);
-       
        mii_pollstat(mii);
-       
-       SMSC_UNLOCK(sc);
-       
        ifmr->ifm_active = mii->mii_media_active;
        ifmr->ifm_status = mii->mii_media_status;
+       SMSC_UNLOCK(sc);
 }
 
 /**

Modified: head/sys/dev/usb/net/if_udav.c
==============================================================================
--- head/sys/dev/usb/net/if_udav.c      Fri Jun 14 05:16:51 2013        
(r251733)
+++ head/sys/dev/usb/net/if_udav.c      Fri Jun 14 05:36:47 2013        
(r251734)
@@ -750,14 +750,15 @@ udav_ifmedia_upd(struct ifnet *ifp)
        struct udav_softc *sc = ifp->if_softc;
        struct mii_data *mii = GET_MII(sc);
        struct mii_softc *miisc;
+       int error;
 
        UDAV_LOCK_ASSERT(sc, MA_OWNED);
 
         sc->sc_flags &= ~UDAV_FLAG_LINK;
        LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
                PHY_RESET(miisc);
-       mii_mediachg(mii);
-       return (0);
+       error = mii_mediachg(mii);
+       return (error);
 }
 
 static void
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to