Loading drivers/net/mdio.c +30 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,36 @@ void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, } EXPORT_SYMBOL(mdio45_ethtool_gset_npage); /** * mdio45_ethtool_spauseparam_an - set auto-negotiated pause parameters * @mdio: MDIO interface * @ecmd: Ethtool request structure * * This function assumes that the PHY has an auto-negotiation MMD. It * will enable and disable advertising of flow control as appropriate. */ void mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, const struct ethtool_pauseparam *ecmd) { int adv, old_adv; WARN_ON(!(mdio->mmds & MDIO_DEVS_AN)); old_adv = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_AN, MDIO_AN_ADVERTISE); adv = old_adv & ~(ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); if (ecmd->autoneg) adv |= mii_advertise_flowctrl( (ecmd->rx_pause ? FLOW_CTRL_RX : 0) | (ecmd->tx_pause ? FLOW_CTRL_TX : 0)); if (adv != old_adv) { mdio->mdio_write(mdio->dev, mdio->prtad, MDIO_MMD_AN, MDIO_AN_ADVERTISE, adv); mdio45_nway_restart(mdio); } } EXPORT_SYMBOL(mdio45_ethtool_spauseparam_an); /** * mdio_mii_ioctl - MII ioctl interface for MDIO (clause 22 or 45) PHYs * @mdio: MDIO interface Loading include/linux/mdio.h +3 −0 Original line number Diff line number Diff line Loading @@ -279,6 +279,9 @@ extern int mdio45_nway_restart(const struct mdio_if_info *mdio); extern void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, struct ethtool_cmd *ecmd, u32 npage_adv, u32 npage_lpa); extern void mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, const struct ethtool_pauseparam *ecmd); /** * mdio45_ethtool_gset - get settings for ETHTOOL_GSET Loading Loading
drivers/net/mdio.c +30 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,36 @@ void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, } EXPORT_SYMBOL(mdio45_ethtool_gset_npage); /** * mdio45_ethtool_spauseparam_an - set auto-negotiated pause parameters * @mdio: MDIO interface * @ecmd: Ethtool request structure * * This function assumes that the PHY has an auto-negotiation MMD. It * will enable and disable advertising of flow control as appropriate. */ void mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, const struct ethtool_pauseparam *ecmd) { int adv, old_adv; WARN_ON(!(mdio->mmds & MDIO_DEVS_AN)); old_adv = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_AN, MDIO_AN_ADVERTISE); adv = old_adv & ~(ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); if (ecmd->autoneg) adv |= mii_advertise_flowctrl( (ecmd->rx_pause ? FLOW_CTRL_RX : 0) | (ecmd->tx_pause ? FLOW_CTRL_TX : 0)); if (adv != old_adv) { mdio->mdio_write(mdio->dev, mdio->prtad, MDIO_MMD_AN, MDIO_AN_ADVERTISE, adv); mdio45_nway_restart(mdio); } } EXPORT_SYMBOL(mdio45_ethtool_spauseparam_an); /** * mdio_mii_ioctl - MII ioctl interface for MDIO (clause 22 or 45) PHYs * @mdio: MDIO interface Loading
include/linux/mdio.h +3 −0 Original line number Diff line number Diff line Loading @@ -279,6 +279,9 @@ extern int mdio45_nway_restart(const struct mdio_if_info *mdio); extern void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, struct ethtool_cmd *ecmd, u32 npage_adv, u32 npage_lpa); extern void mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, const struct ethtool_pauseparam *ecmd); /** * mdio45_ethtool_gset - get settings for ETHTOOL_GSET Loading