- 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:
parent
4951ca8620
commit
ebe0102309
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue