]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: phylink: Export phylink_caps_to_linkmodes
authorSean Anderson <sean.anderson@seco.com>
Tue, 20 Sep 2022 22:12:29 +0000 (18:12 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Sep 2022 10:55:35 +0000 (11:55 +0100)
This function is convenient for MAC drivers. They can use it to add or
remove particular link modes based on capabilities (such as if half
duplex is not supported for a particular interface mode).

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phylink.c
include/linux/phylink.h

index e9d62f9598f9d64528cdd308d5f0f90a80538090..c5c3f0b62d7f229b9ea2f8ba50dfb94a5fbcde6c 100644 (file)
@@ -155,8 +155,15 @@ static const char *phylink_an_mode_str(unsigned int mode)
        return mode < ARRAY_SIZE(modestr) ? modestr[mode] : "unknown";
 }
 
-static void phylink_caps_to_linkmodes(unsigned long *linkmodes,
-                                     unsigned long caps)
+/**
+ * phylink_caps_to_linkmodes() - Convert capabilities to ethtool link modes
+ * @linkmodes: ethtool linkmode mask (must be already initialised)
+ * @caps: bitmask of MAC capabilities
+ *
+ * Set all possible pause, speed and duplex linkmodes in @linkmodes that are
+ * supported by the @caps. @linkmodes must have been initialised previously.
+ */
+void phylink_caps_to_linkmodes(unsigned long *linkmodes, unsigned long caps)
 {
        if (caps & MAC_SYM_PAUSE)
                __set_bit(ETHTOOL_LINK_MODE_Pause_BIT, linkmodes);
@@ -295,6 +302,7 @@ static void phylink_caps_to_linkmodes(unsigned long *linkmodes,
                __set_bit(ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT, linkmodes);
        }
 }
+EXPORT_SYMBOL_GPL(phylink_caps_to_linkmodes);
 
 /**
  * phylink_get_linkmodes() - get acceptable link modes
index 1f997e14bf80bd84c85d2bc6660a1cc26b4c7658..7cf26d7a522d034efe03dc5dd01c93f50c332af1 100644 (file)
@@ -547,6 +547,7 @@ void pcs_link_up(struct phylink_pcs *pcs, unsigned int mode,
                 phy_interface_t interface, int speed, int duplex);
 #endif
 
+void phylink_caps_to_linkmodes(unsigned long *linkmodes, unsigned long caps);
 void phylink_get_linkmodes(unsigned long *linkmodes, phy_interface_t interface,
                           unsigned long mac_capabilities);
 void phylink_generic_validate(struct phylink_config *config,