mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-29 13:15:05 +00:00
IEEE 802.3 Annex 28B.3 explicitly specifies the following relative
priorities of the technologies supported by 802.3 Selector Field value. 1000BASE-T full duplex 1000BASE-T 100BASE-T2 full duplex 100BASE-TX full duplex 100BASE-T2 100BASE-T4 100BASE-TX 10BASE-T full duplex 10BAST-T However PHY drivers didn't honor the order such that 100BASE-T4 had higher priority than 100BASE-TX full duplex. Fix that long standing bugs such that have PHY drivers choose the highest common denominator ability. Fix a bug in dcphy which inadvertently aceepts 100BASE-T4. PR: 92599
This commit is contained in:
parent
fcfe60dc18
commit
d612cc5947
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=173665
|
@ -364,12 +364,12 @@ dcphy_status(struct mii_softc *sc)
|
|||
|
||||
if (tstat & DC_TSTAT_LP_CAN_NWAY) {
|
||||
anlpar = tstat >> 16;
|
||||
if (anlpar & ANLPAR_T4 &&
|
||||
sc->mii_capabilities & BMSR_100TXHDX)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD &&
|
||||
if (anlpar & ANLPAR_TX_FD &&
|
||||
sc->mii_capabilities & BMSR_100TXFDX)
|
||||
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4 &&
|
||||
sc->mii_capabilities & BMSR_100T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX &&
|
||||
sc->mii_capabilities & BMSR_100TXHDX)
|
||||
mii->mii_media_active |= IFM_100_TX;
|
||||
|
|
|
@ -228,10 +228,10 @@ amphy_status(struct mii_softc *sc)
|
|||
if (PHY_READ(sc, MII_ANER) & ANER_LPAN) {
|
||||
anlpar = PHY_READ(sc, MII_ANAR) &
|
||||
PHY_READ(sc, MII_ANLPAR);
|
||||
if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD)
|
||||
if (anlpar & ANLPAR_TX_FD)
|
||||
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX)
|
||||
mii->mii_media_active |= IFM_100_TX;
|
||||
else if (anlpar & ANLPAR_10_FD)
|
||||
|
|
|
@ -331,10 +331,10 @@ nsphy_status(struct mii_softc *sc)
|
|||
if (PHY_READ(sc, MII_ANER) & ANER_LPAN) {
|
||||
anlpar = PHY_READ(sc, MII_ANAR) &
|
||||
PHY_READ(sc, MII_ANLPAR);
|
||||
if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD)
|
||||
if (anlpar & ANLPAR_TX_FD)
|
||||
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX)
|
||||
mii->mii_media_active |= IFM_100_TX;
|
||||
else if (anlpar & ANLPAR_10_FD)
|
||||
|
|
|
@ -261,10 +261,10 @@ rlphy_status(struct mii_softc *phy)
|
|||
|
||||
if ((anlpar = PHY_READ(phy, MII_ANAR) &
|
||||
PHY_READ(phy, MII_ANLPAR))) {
|
||||
if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD)
|
||||
if (anlpar & ANLPAR_TX_FD)
|
||||
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX)
|
||||
mii->mii_media_active |= IFM_100_TX;
|
||||
else if (anlpar & ANLPAR_10_FD)
|
||||
|
|
|
@ -239,10 +239,10 @@ tdkphy_status(struct mii_softc *phy)
|
|||
* ANLPAR doesn't get set on my card, but we check it anyway,
|
||||
* since it is mentioned in the 78Q2120 specs.
|
||||
*/
|
||||
if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD)
|
||||
if (anlpar & ANLPAR_TX_FD)
|
||||
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX)
|
||||
mii->mii_media_active |= IFM_100_TX;
|
||||
else if (anlpar & ANLPAR_10_FD)
|
||||
|
|
|
@ -112,10 +112,10 @@ ukphy_status(struct mii_softc *phy)
|
|||
else if ((gtcr & GTCR_ADV_1000THDX) &&
|
||||
(gtsr & GTSR_LP_1000THDX))
|
||||
mii->mii_media_active |= IFM_1000_T;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD)
|
||||
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
mii->mii_media_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX)
|
||||
mii->mii_media_active |= IFM_100_TX;
|
||||
else if (anlpar & ANLPAR_10_FD)
|
||||
|
|
|
@ -1695,10 +1695,10 @@ txp_ifmedia_sts(ifp, ifmr)
|
|||
return;
|
||||
}
|
||||
|
||||
if (anlpar & ANLPAR_T4)
|
||||
ifmr->ifm_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX_FD)
|
||||
if (anlpar & ANLPAR_TX_FD)
|
||||
ifmr->ifm_active |= IFM_100_TX|IFM_FDX;
|
||||
else if (anlpar & ANLPAR_T4)
|
||||
ifmr->ifm_active |= IFM_100_T4;
|
||||
else if (anlpar & ANLPAR_TX)
|
||||
ifmr->ifm_active |= IFM_100_TX;
|
||||
else if (anlpar & ANLPAR_10_FD)
|
||||
|
|
Loading…
Reference in a new issue