Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: phy: extract pause mode

Extract the update of phylib's software pause mode state from
genphy_read_status(), so that we can re-use this functionality with
PHYs that have alternative ways to read the negotiation results.

Tested-by: tinywrkb <tinywrkb@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Russell King and committed by
David S. Miller
2d880b87 8d3dc3ac

+14 -7
+13 -7
drivers/net/phy/phy-core.c
··· 283 283 phydev->eee_broken_modes = broken; 284 284 } 285 285 286 + void phy_resolve_aneg_pause(struct phy_device *phydev) 287 + { 288 + if (phydev->duplex == DUPLEX_FULL) { 289 + phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, 290 + phydev->lp_advertising); 291 + phydev->asym_pause = linkmode_test_bit( 292 + ETHTOOL_LINK_MODE_Asym_Pause_BIT, 293 + phydev->lp_advertising); 294 + } 295 + } 296 + EXPORT_SYMBOL_GPL(phy_resolve_aneg_pause); 297 + 286 298 /** 287 299 * phy_resolve_aneg_linkmode - resolve the advertisements into phy settings 288 300 * @phydev: The phy_device struct ··· 317 305 break; 318 306 } 319 307 320 - if (phydev->duplex == DUPLEX_FULL) { 321 - phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, 322 - phydev->lp_advertising); 323 - phydev->asym_pause = linkmode_test_bit( 324 - ETHTOOL_LINK_MODE_Asym_Pause_BIT, 325 - phydev->lp_advertising); 326 - } 308 + phy_resolve_aneg_pause(phydev); 327 309 } 328 310 EXPORT_SYMBOL_GPL(phy_resolve_aneg_linkmode); 329 311
+1
include/linux/phy.h
··· 678 678 return phydev->state >= PHY_UP; 679 679 } 680 680 681 + void phy_resolve_aneg_pause(struct phy_device *phydev); 681 682 void phy_resolve_aneg_linkmode(struct phy_device *phydev); 682 683 683 684 /**