On 09/14/2018 02:38 PM, Andrew Lunn wrote: > The phy_mii_ioctl can be used to write a value into the MII_ADVERTISE > register in the PHY. Since this changes the state of the PHY, we need > to make the same change to phydev->advertising. Add a helper which can > convert the register value to a linkmode.
It would have been nice if we could eliminate the duplication between mii_adv_to_ethtool_adv_t() and mii_adv_to_linkmode_adv_t() but I don't really see how without changing the former function's signature. Reviewed-by: Florian Fainelli <f.faine...@gmail.com> > > Signed-off-by: Andrew Lunn <and...@lunn.ch> > --- > include/linux/mii.h | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/include/linux/mii.h b/include/linux/mii.h > index 567047ef0309..8c7da9473ad9 100644 > --- a/include/linux/mii.h > +++ b/include/linux/mii.h > @@ -303,6 +303,37 @@ static inline u32 mii_lpa_to_ethtool_lpa_x(u32 lpa) > return result | mii_adv_to_ethtool_adv_x(lpa); > } > > +/** > + * mii_adv_to_linkmode_adv_t > + * @advertising:pointer to destination link mode. > + * @adv: value of the MII_ADVERTISE register > + * > + * A small helper function that translates MII_ADVERTISE bits > + * to linkmode advertisement settings. > + */ > +static inline void mii_adv_to_linkmode_adv_t(unsigned long *advertising, > + u32 adv) > +{ > + linkmode_zero(advertising); > + > + if (adv & ADVERTISE_10HALF) > + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, > + advertising); > + if (adv & ADVERTISE_10FULL) > + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, > + advertising); > + if (adv & ADVERTISE_100HALF) > + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, > + advertising); > + if (adv & ADVERTISE_100FULL) > + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, > + advertising); > + if (adv & ADVERTISE_PAUSE_CAP) > + linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, advertising); > + if (adv & ADVERTISE_PAUSE_ASYM) > + linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, advertising); > +} > + > /** > * mii_advertise_flowctrl - get flow control advertisement flags > * @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both) > -- Florian