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>
This commit is contained in:
parent
8d3dc3ac9d
commit
2d880b8709
|
@ -283,6 +283,18 @@ void of_set_phy_eee_broken(struct phy_device *phydev)
|
|||
phydev->eee_broken_modes = broken;
|
||||
}
|
||||
|
||||
void phy_resolve_aneg_pause(struct phy_device *phydev)
|
||||
{
|
||||
if (phydev->duplex == DUPLEX_FULL) {
|
||||
phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
|
||||
phydev->lp_advertising);
|
||||
phydev->asym_pause = linkmode_test_bit(
|
||||
ETHTOOL_LINK_MODE_Asym_Pause_BIT,
|
||||
phydev->lp_advertising);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phy_resolve_aneg_pause);
|
||||
|
||||
/**
|
||||
* phy_resolve_aneg_linkmode - resolve the advertisements into phy settings
|
||||
* @phydev: The phy_device struct
|
||||
|
@ -305,13 +317,7 @@ void phy_resolve_aneg_linkmode(struct phy_device *phydev)
|
|||
break;
|
||||
}
|
||||
|
||||
if (phydev->duplex == DUPLEX_FULL) {
|
||||
phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
|
||||
phydev->lp_advertising);
|
||||
phydev->asym_pause = linkmode_test_bit(
|
||||
ETHTOOL_LINK_MODE_Asym_Pause_BIT,
|
||||
phydev->lp_advertising);
|
||||
}
|
||||
phy_resolve_aneg_pause(phydev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phy_resolve_aneg_linkmode);
|
||||
|
||||
|
|
|
@ -678,6 +678,7 @@ static inline bool phy_is_started(struct phy_device *phydev)
|
|||
return phydev->state >= PHY_UP;
|
||||
}
|
||||
|
||||
void phy_resolve_aneg_pause(struct phy_device *phydev);
|
||||
void phy_resolve_aneg_linkmode(struct phy_device *phydev);
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue