Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 277913
b: refs/heads/master
c: 37f0702
h: refs/heads/master
i:
  277911: 8ca15cd
v: v3
  • Loading branch information
Matt Carlson authored and David S. Miller committed Nov 21, 2011
1 parent 022e085 commit 1921950
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 43 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b8ffdbd05f8692cdadccd04464271e48b1e8d439
refs/heads/master: 37f07023d30708b5da091fe6d6be9b60783c6d82
20 changes: 10 additions & 10 deletions trunk/drivers/net/ethernet/broadcom/bnx2.c
Original file line number Diff line number Diff line change
Expand Up @@ -2054,8 +2054,8 @@ __acquires(&bp->phy_lock)

if (bp->autoneg & AUTONEG_SPEED) {
u32 adv_reg, adv1000_reg;
u32 new_adv_reg = 0;
u32 new_adv1000_reg = 0;
u32 new_adv = 0;
u32 new_adv1000 = 0;

bnx2_read_phy(bp, bp->mii_adv, &adv_reg);
adv_reg &= (PHY_ALL_10_100_SPEED | ADVERTISE_PAUSE_CAP |
Expand All @@ -2064,18 +2064,18 @@ __acquires(&bp->phy_lock)
bnx2_read_phy(bp, MII_CTRL1000, &adv1000_reg);
adv1000_reg &= PHY_ALL_1000_SPEED;

new_adv_reg = ethtool_adv_to_mii_100bt(bp->advertising);
new_adv_reg |= ADVERTISE_CSMA;
new_adv_reg |= bnx2_phy_get_pause_adv(bp);
new_adv = ethtool_adv_to_mii_adv_t(bp->advertising);
new_adv |= ADVERTISE_CSMA;
new_adv |= bnx2_phy_get_pause_adv(bp);

new_adv1000_reg |= ethtool_adv_to_mii_1000T(bp->advertising);
new_adv1000 |= ethtool_adv_to_mii_ctrl1000_t(bp->advertising);

if ((adv1000_reg != new_adv1000_reg) ||
(adv_reg != new_adv_reg) ||
if ((adv1000_reg != new_adv1000) ||
(adv_reg != new_adv) ||
((bmcr & BMCR_ANENABLE) == 0)) {

bnx2_write_phy(bp, bp->mii_adv, new_adv_reg);
bnx2_write_phy(bp, MII_CTRL1000, new_adv1000_reg);
bnx2_write_phy(bp, bp->mii_adv, new_adv);
bnx2_write_phy(bp, MII_CTRL1000, new_adv1000);
bnx2_write_phy(bp, bp->mii_bmcr, BMCR_ANRESTART |
BMCR_ANENABLE);
}
Expand Down
10 changes: 5 additions & 5 deletions trunk/drivers/net/ethernet/broadcom/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -3594,7 +3594,7 @@ static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
u32 val, new_adv;

new_adv = ADVERTISE_CSMA;
new_adv |= ethtool_adv_to_mii_100bt(advertise);
new_adv |= ethtool_adv_to_mii_adv_t(advertise);
new_adv |= tg3_advert_flowctrl_1000T(flowctrl);

err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
Expand All @@ -3604,7 +3604,7 @@ static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
goto done;

new_adv = ethtool_adv_to_mii_1000T(advertise);
new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);

if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
Expand Down Expand Up @@ -3778,7 +3778,7 @@ static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask)
{
u32 adv_reg, all_mask = 0;

all_mask = ethtool_adv_to_mii_100bt(mask);
all_mask = ethtool_adv_to_mii_adv_t(mask);

if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
return 0;
Expand All @@ -3789,7 +3789,7 @@ static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask)
if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
u32 tg3_ctrl;

all_mask = ethtool_adv_to_mii_1000T(mask);
all_mask = ethtool_adv_to_mii_ctrl1000_t(mask);

if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
return 0;
Expand Down Expand Up @@ -4889,7 +4889,7 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
ADVERTISE_SLCT);

newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
newadv |= ethtool_adv_to_mii_1000X(tp->link_config.advertising);
newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);

if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
tg3_writephy(tp, MII_ADVERTISE, newadv);
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/net/ethernet/sun/niu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1151,8 +1151,8 @@ static int link_status_mii(struct niu *np, int *link_up_p)
supported |= SUPPORTED_1000baseT_Full;
lp->supported = supported;

advertising = mii_adv_to_ethtool_100bt(advert);
advertising |= mii_adv_to_ethtool_1000T(ctrl1000);
advertising = mii_adv_to_ethtool_adv_t(advert);
advertising |= mii_ctrl1000_to_ethtool_adv_t(ctrl1000);

if (bmcr & BMCR_ANENABLE) {
int neg, neg1000;
Expand Down
15 changes: 7 additions & 8 deletions trunk/drivers/net/mii.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,11 @@

static u32 mii_get_an(struct mii_if_info *mii, u16 addr)
{
u32 result = 0;
int advert;

advert = mii->mdio_read(mii->dev, mii->phy_id, addr);
if (advert & LPA_LPACK)
result |= ADVERTISED_Autoneg;

return result | mii_adv_to_ethtool_100bt(advert);
return mii_lpa_to_ethtool_lpa_t(advert);
}

/**
Expand Down Expand Up @@ -93,12 +90,13 @@ int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)

ecmd->advertising |= mii_get_an(mii, MII_ADVERTISE);
if (mii->supports_gmii)
ecmd->advertising |= mii_adv_to_ethtool_1000T(ctrl1000);
ecmd->advertising |=
mii_ctrl1000_to_ethtool_adv_t(ctrl1000);

if (bmsr & BMSR_ANEGCOMPLETE) {
ecmd->lp_advertising = mii_get_an(mii, MII_LPA);
ecmd->lp_advertising |=
mii_lpa_to_ethtool_1000T(stat1000);
mii_stat1000_to_ethtool_lpa_t(stat1000);
} else {
ecmd->lp_advertising = 0;
}
Expand Down Expand Up @@ -186,10 +184,11 @@ int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
advert2 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000);
tmp2 = advert2 & ~(ADVERTISE_1000HALF | ADVERTISE_1000FULL);
}
tmp |= ethtool_adv_to_mii_100bt(ecmd->advertising);
tmp |= ethtool_adv_to_mii_adv_t(ecmd->advertising);

if (mii->supports_gmii)
tmp2 |= ethtool_adv_to_mii_1000T(ecmd->advertising);
tmp2 |=
ethtool_adv_to_mii_ctrl1000_t(ecmd->advertising);
if (advert != tmp) {
mii->mdio_write(dev, mii->phy_id, MII_ADVERTISE, tmp);
mii->advertising = tmp;
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/net/phy/phy_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,7 @@ static int genphy_config_advert(struct phy_device *phydev)

adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
ADVERTISE_PAUSE_ASYM);
adv |= ethtool_adv_to_mii_100bt(advertise);
adv |= ethtool_adv_to_mii_adv_t(advertise);

if (adv != oldadv) {
err = phy_write(phydev, MII_ADVERTISE, adv);
Expand All @@ -584,7 +584,7 @@ static int genphy_config_advert(struct phy_device *phydev)
return adv;

adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
adv |= ethtool_adv_to_mii_1000T(advertise);
adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);

if (adv != oldadv) {
err = phy_write(phydev, MII_CTRL1000, adv);
Expand Down
64 changes: 49 additions & 15 deletions trunk/include/linux/mii.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,14 +241,14 @@ static inline unsigned int mii_duplex (unsigned int duplex_lock,
}

/**
* ethtool_adv_to_mii_100bt
* ethtool_adv_to_mii_adv_t
* @ethadv: the ethtool advertisement settings
*
* A small helper function that translates ethtool advertisement
* settings to phy autonegotiation advertisements for the
* MII_ADVERTISE register.
*/
static inline u32 ethtool_adv_to_mii_100bt(u32 ethadv)
static inline u32 ethtool_adv_to_mii_adv_t(u32 ethadv)
{
u32 result = 0;

Expand All @@ -269,13 +269,13 @@ static inline u32 ethtool_adv_to_mii_100bt(u32 ethadv)
}

/**
* mii_adv_to_ethtool_100bt
* mii_adv_to_ethtool_adv_t
* @adv: value of the MII_ADVERTISE register
*
* A small helper function that translates MII_ADVERTISE bits
* to ethtool advertisement settings.
*/
static inline u32 mii_adv_to_ethtool_100bt(u32 adv)
static inline u32 mii_adv_to_ethtool_adv_t(u32 adv)
{
u32 result = 0;

Expand All @@ -296,14 +296,14 @@ static inline u32 mii_adv_to_ethtool_100bt(u32 adv)
}

/**
* ethtool_adv_to_mii_1000T
* ethtool_adv_to_mii_ctrl1000_t
* @ethadv: the ethtool advertisement settings
*
* A small helper function that translates ethtool advertisement
* settings to phy autonegotiation advertisements for the
* MII_CTRL1000 register when in 1000T mode.
*/
static inline u32 ethtool_adv_to_mii_1000T(u32 ethadv)
static inline u32 ethtool_adv_to_mii_ctrl1000_t(u32 ethadv)
{
u32 result = 0;

Expand All @@ -316,14 +316,14 @@ static inline u32 ethtool_adv_to_mii_1000T(u32 ethadv)
}

/**
* mii_adv_to_ethtool_1000T
* mii_ctrl1000_to_ethtool_adv_t
* @adv: value of the MII_CTRL1000 register
*
* A small helper function that translates MII_CTRL1000
* bits, when in 1000Base-T mode, to ethtool
* advertisement settings.
*/
static inline u32 mii_adv_to_ethtool_1000T(u32 adv)
static inline u32 mii_ctrl1000_to_ethtool_adv_t(u32 adv)
{
u32 result = 0;

Expand All @@ -335,17 +335,33 @@ static inline u32 mii_adv_to_ethtool_1000T(u32 adv)
return result;
}

#define mii_lpa_to_ethtool_100bt(lpa) mii_adv_to_ethtool_100bt(lpa)
/**
* mii_lpa_to_ethtool_lpa_t
* @adv: value of the MII_LPA register
*
* A small helper function that translates MII_LPA
* bits, when in 1000Base-T mode, to ethtool
* LP advertisement settings.
*/
static inline u32 mii_lpa_to_ethtool_lpa_t(u32 lpa)
{
u32 result = 0;

if (lpa & LPA_LPACK)
result |= ADVERTISED_Autoneg;

return result | mii_adv_to_ethtool_adv_t(lpa);
}

/**
* mii_lpa_to_ethtool_1000T
* mii_stat1000_to_ethtool_lpa_t
* @adv: value of the MII_STAT1000 register
*
* A small helper function that translates MII_STAT1000
* bits, when in 1000Base-T mode, to ethtool
* advertisement settings.
*/
static inline u32 mii_lpa_to_ethtool_1000T(u32 lpa)
static inline u32 mii_stat1000_to_ethtool_lpa_t(u32 lpa)
{
u32 result = 0;

Expand All @@ -358,14 +374,14 @@ static inline u32 mii_lpa_to_ethtool_1000T(u32 lpa)
}

/**
* ethtool_adv_to_mii_1000X
* ethtool_adv_to_mii_adv_x
* @ethadv: the ethtool advertisement settings
*
* A small helper function that translates ethtool advertisement
* settings to phy autonegotiation advertisements for the
* MII_CTRL1000 register when in 1000Base-X mode.
*/
static inline u32 ethtool_adv_to_mii_1000X(u32 ethadv)
static inline u32 ethtool_adv_to_mii_adv_x(u32 ethadv)
{
u32 result = 0;

Expand All @@ -382,14 +398,14 @@ static inline u32 ethtool_adv_to_mii_1000X(u32 ethadv)
}

/**
* mii_adv_to_ethtool_1000X
* mii_adv_to_ethtool_adv_x
* @adv: value of the MII_CTRL1000 register
*
* A small helper function that translates MII_CTRL1000
* bits, when in 1000Base-X mode, to ethtool
* advertisement settings.
*/
static inline u32 mii_adv_to_ethtool_1000X(u32 adv)
static inline u32 mii_adv_to_ethtool_adv_x(u32 adv)
{
u32 result = 0;

Expand All @@ -405,6 +421,24 @@ static inline u32 mii_adv_to_ethtool_1000X(u32 adv)
return result;
}

/**
* mii_lpa_to_ethtool_lpa_x
* @adv: value of the MII_LPA register
*
* A small helper function that translates MII_LPA
* bits, when in 1000Base-X mode, to ethtool
* LP advertisement settings.
*/
static inline u32 mii_lpa_to_ethtool_lpa_x(u32 lpa)
{
u32 result = 0;

if (lpa & LPA_LPACK)
result |= ADVERTISED_Autoneg;

return result | mii_adv_to_ethtool_adv_x(lpa);
}

/**
* mii_advertise_flowctrl - get flow control advertisement flags
* @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both)
Expand Down

0 comments on commit 1921950

Please sign in to comment.