- 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
This commit is contained in:
Kevin Lo 2013-06-14 05:36:47 +00:00
parent 4951ca8620
commit ebe0102309
6 changed files with 22 additions and 30 deletions

View File

@ -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);

View File

@ -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);
}
/*

View File

@ -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);
}
/*

View File

@ -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);
}
/*

View File

@ -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, struct ifmediareq *ifmr)
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);
}
/**

View File

@ -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