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;
|
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
|
* phy_resolve_aneg_linkmode - resolve the advertisements into phy settings
|
||||||
* @phydev: The phy_device struct
|
* @phydev: The phy_device struct
|
||||||
@ -305,13 +317,7 @@ void phy_resolve_aneg_linkmode(struct phy_device *phydev)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phydev->duplex == DUPLEX_FULL) {
|
phy_resolve_aneg_pause(phydev);
|
||||||
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_linkmode);
|
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;
|
return phydev->state >= PHY_UP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void phy_resolve_aneg_pause(struct phy_device *phydev);
|
||||||
void phy_resolve_aneg_linkmode(struct phy_device *phydev);
|
void phy_resolve_aneg_linkmode(struct phy_device *phydev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user