diff options
Diffstat (limited to 'include/linux/mdio.h')
| -rw-r--r-- | include/linux/mdio.h | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/include/linux/mdio.h b/include/linux/mdio.h index bfa7114167d7..3e99ae3ed87f 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -261,6 +261,50 @@ static inline u16 ethtool_adv_to_mmd_eee_adv_t(u32 adv)  	return reg;  } +/** + * linkmode_adv_to_mii_10gbt_adv_t + * @advertising: the linkmode advertisement settings + * + * A small helper function that translates linkmode advertisement + * settings to phy autonegotiation advertisements for the C45 + * 10GBASE-T AN CONTROL (7.32) register. + */ +static inline u32 linkmode_adv_to_mii_10gbt_adv_t(unsigned long *advertising) +{ +	u32 result = 0; + +	if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, +			      advertising)) +		result |= MDIO_AN_10GBT_CTRL_ADV2_5G; +	if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, +			      advertising)) +		result |= MDIO_AN_10GBT_CTRL_ADV5G; +	if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, +			      advertising)) +		result |= MDIO_AN_10GBT_CTRL_ADV10G; + +	return result; +} + +/** + * mii_10gbt_stat_mod_linkmode_lpa_t + * @advertising: target the linkmode advertisement settings + * @adv: value of the C45 10GBASE-T AN STATUS register + * + * A small helper function that translates C45 10GBASE-T AN STATUS register bits + * to linkmode advertisement settings. Other bits in advertising aren't changed. + */ +static inline void mii_10gbt_stat_mod_linkmode_lpa_t(unsigned long *advertising, +						     u32 lpa) +{ +	linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, +			 advertising, lpa & MDIO_AN_10GBT_STAT_LP2_5G); +	linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, +			 advertising, lpa & MDIO_AN_10GBT_STAT_LP5G); +	linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, +			 advertising, lpa & MDIO_AN_10GBT_STAT_LP10G); +} +  int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);  int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);  |