net: phylink: add helper function to decode USXGMII word
With the new addition of the USXGMII link partner ability constants we can now introduce a phylink helper that decodes the USXGMII word and populates the appropriate fields in the phylink_link_state structure based on them. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Reviewed-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
d60432994e
Коммит
afd6220999
|
@ -2320,6 +2320,49 @@ static void phylink_decode_sgmii_word(struct phylink_link_state *state,
|
|||
state->duplex = DUPLEX_HALF;
|
||||
}
|
||||
|
||||
/**
|
||||
* phylink_decode_usxgmii_word() - decode the USXGMII word from a MAC PCS
|
||||
* @state: a pointer to a struct phylink_link_state.
|
||||
* @lpa: a 16 bit value which stores the USXGMII auto-negotiation word
|
||||
*
|
||||
* Helper for MAC PCS supporting the USXGMII protocol and the auto-negotiation
|
||||
* code word. Decode the USXGMII code word and populate the corresponding fields
|
||||
* (speed, duplex) into the phylink_link_state structure.
|
||||
*/
|
||||
void phylink_decode_usxgmii_word(struct phylink_link_state *state,
|
||||
uint16_t lpa)
|
||||
{
|
||||
switch (lpa & MDIO_USXGMII_SPD_MASK) {
|
||||
case MDIO_USXGMII_10:
|
||||
state->speed = SPEED_10;
|
||||
break;
|
||||
case MDIO_USXGMII_100:
|
||||
state->speed = SPEED_100;
|
||||
break;
|
||||
case MDIO_USXGMII_1000:
|
||||
state->speed = SPEED_1000;
|
||||
break;
|
||||
case MDIO_USXGMII_2500:
|
||||
state->speed = SPEED_2500;
|
||||
break;
|
||||
case MDIO_USXGMII_5000:
|
||||
state->speed = SPEED_5000;
|
||||
break;
|
||||
case MDIO_USXGMII_10G:
|
||||
state->speed = SPEED_10000;
|
||||
break;
|
||||
default:
|
||||
state->link = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (lpa & MDIO_USXGMII_FULL_DUPLEX)
|
||||
state->duplex = DUPLEX_FULL;
|
||||
else
|
||||
state->duplex = DUPLEX_HALF;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phylink_decode_usxgmii_word);
|
||||
|
||||
/**
|
||||
* phylink_mii_c22_pcs_get_state() - read the MAC PCS state
|
||||
* @pcs: a pointer to a &struct mdio_device.
|
||||
|
|
|
@ -490,4 +490,7 @@ void phylink_mii_c22_pcs_an_restart(struct mdio_device *pcs);
|
|||
|
||||
void phylink_mii_c45_pcs_get_state(struct mdio_device *pcs,
|
||||
struct phylink_link_state *state);
|
||||
|
||||
void phylink_decode_usxgmii_word(struct phylink_link_state *state,
|
||||
uint16_t lpa);
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче