Skip to content

Commit 80e4021

Browse files
hkallweitdavem330
authored andcommitted
net: mdio: add helpers for accessing the EEE CAP2 registers
This adds helpers for accessing the EEE CAP2 registers. For now only 2500baseT and 5000baseT modes are supported. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 71b605d commit 80e4021

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

include/linux/mdio.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,42 @@ static inline void mii_eee_cap1_mod_linkmode_t(unsigned long *adv, u32 val)
439439
adv, val & MDIO_EEE_10GKR);
440440
}
441441

442+
/**
443+
* mii_eee_cap2_mod_linkmode_sup_t()
444+
* @adv: target the linkmode settings
445+
* @val: register value
446+
*
447+
* A function that translates value of following registers to the linkmode:
448+
* IEEE 802.3-2022 45.2.3.11 "EEE control and capability 2" register (3.21)
449+
*/
450+
static inline void mii_eee_cap2_mod_linkmode_sup_t(unsigned long *adv, u32 val)
451+
{
452+
linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
453+
adv, val & MDIO_EEE_2_5GT);
454+
linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
455+
adv, val & MDIO_EEE_5GT);
456+
}
457+
458+
/**
459+
* mii_eee_cap2_mod_linkmode_adv_t()
460+
* @adv: target the linkmode advertisement settings
461+
* @val: register value
462+
*
463+
* A function that translates value of following registers to the linkmode:
464+
* IEEE 802.3-2022 45.2.7.16 "EEE advertisement 2" register (7.62)
465+
* IEEE 802.3-2022 45.2.7.17 "EEE link partner ability 2" register (7.63)
466+
* Note: Currently this function is the same as mii_eee_cap2_mod_linkmode_sup_t.
467+
* For certain, not yet supported, modes however the bits differ.
468+
* Therefore create separate functions already.
469+
*/
470+
static inline void mii_eee_cap2_mod_linkmode_adv_t(unsigned long *adv, u32 val)
471+
{
472+
linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
473+
adv, val & MDIO_EEE_2_5GT);
474+
linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
475+
adv, val & MDIO_EEE_5GT);
476+
}
477+
442478
/**
443479
* linkmode_to_mii_eee_cap1_t()
444480
* @adv: the linkmode advertisement settings
@@ -466,6 +502,25 @@ static inline u32 linkmode_to_mii_eee_cap1_t(unsigned long *adv)
466502
return result;
467503
}
468504

505+
/**
506+
* linkmode_to_mii_eee_cap2_t()
507+
* @adv: the linkmode advertisement settings
508+
*
509+
* A function that translates linkmode to value for IEEE 802.3-2022 45.2.7.16
510+
* "EEE advertisement 2" register (7.62)
511+
*/
512+
static inline u32 linkmode_to_mii_eee_cap2_t(unsigned long *adv)
513+
{
514+
u32 result = 0;
515+
516+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, adv))
517+
result |= MDIO_EEE_2_5GT;
518+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, adv))
519+
result |= MDIO_EEE_5GT;
520+
521+
return result;
522+
}
523+
469524
/**
470525
* mii_10base_t1_adv_mod_linkmode_t()
471526
* @adv: linkmode advertisement settings

0 commit comments

Comments
 (0)