Skip to content

Commit f954a04

Browse files
lunndavem330
authored andcommitted
net: phy: Add limkmode equivalents to some of the MII ethtool helpers
Add helpers which take a linkmode rather than a u32 ethtool for advertising settings. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 5f991f7 commit f954a04

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

include/linux/mii.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,34 @@ static inline u32 ethtool_adv_to_mii_adv_t(u32 ethadv)
132132
return result;
133133
}
134134

135+
/**
136+
* linkmode_adv_to_mii_adv_t
137+
* @advertising: the linkmode advertisement settings
138+
*
139+
* A small helper function that translates linkmode advertisement
140+
* settings to phy autonegotiation advertisements for the
141+
* MII_ADVERTISE register.
142+
*/
143+
static inline u32 linkmode_adv_to_mii_adv_t(unsigned long *advertising)
144+
{
145+
u32 result = 0;
146+
147+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, advertising))
148+
result |= ADVERTISE_10HALF;
149+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, advertising))
150+
result |= ADVERTISE_10FULL;
151+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, advertising))
152+
result |= ADVERTISE_100HALF;
153+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, advertising))
154+
result |= ADVERTISE_100FULL;
155+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, advertising))
156+
result |= ADVERTISE_PAUSE_CAP;
157+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, advertising))
158+
result |= ADVERTISE_PAUSE_ASYM;
159+
160+
return result;
161+
}
162+
135163
/**
136164
* mii_adv_to_ethtool_adv_t
137165
* @adv: value of the MII_ADVERTISE register
@@ -179,6 +207,28 @@ static inline u32 ethtool_adv_to_mii_ctrl1000_t(u32 ethadv)
179207
return result;
180208
}
181209

210+
/**
211+
* linkmode_adv_to_mii_ctrl1000_t
212+
* advertising: the linkmode advertisement settings
213+
*
214+
* A small helper function that translates linkmode advertisement
215+
* settings to phy autonegotiation advertisements for the
216+
* MII_CTRL1000 register when in 1000T mode.
217+
*/
218+
static inline u32 linkmode_adv_to_mii_ctrl1000_t(unsigned long *advertising)
219+
{
220+
u32 result = 0;
221+
222+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
223+
advertising))
224+
result |= ADVERTISE_1000HALF;
225+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
226+
advertising))
227+
result |= ADVERTISE_1000FULL;
228+
229+
return result;
230+
}
231+
182232
/**
183233
* mii_ctrl1000_to_ethtool_adv_t
184234
* @adv: value of the MII_CTRL1000 register

0 commit comments

Comments
 (0)