]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: phylink: Add a mapping between MAC_CAPS and LINK_CAPS
authorMaxime Chevallier <maxime.chevallier@bootlin.com>
Fri, 7 Mar 2025 17:36:08 +0000 (18:36 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 18 Mar 2025 08:03:12 +0000 (09:03 +0100)
phylink allows MAC drivers to report the capabilities in terms of speed,
duplex and pause support. This is done through a dedicated set of enum
values in the form of the MAC_ capabilities. They are very close to what
the LINK_CAPA_xxx can express, with the difference that LINK_CAPA don't
have any information about Pause/Asym Pause support.

To prepare converting phylink to using the phy_caps, add the mapping
between MAC capabilities and phy_caps. While doing so, we move the
phylink_caps_params array up a bit to simplify future commits.

Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20250307173611.129125-12-maxime.chevallier@bootlin.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/phy/phylink.c

index 694b836d8ff73313abcf0af5a6ede4e71cad4e7b..f9007bc14d54c7820f292b65c6087eb46f6ff913 100644 (file)
@@ -292,6 +292,31 @@ static int phylink_interface_max_speed(phy_interface_t interface)
        return SPEED_UNKNOWN;
 }
 
+static struct {
+       unsigned long mask;
+       int speed;
+       unsigned int duplex;
+       unsigned int caps_bit;
+} phylink_caps_params[] = {
+       { MAC_400000FD, SPEED_400000, DUPLEX_FULL, BIT(LINK_CAPA_400000FD) },
+       { MAC_200000FD, SPEED_200000, DUPLEX_FULL, BIT(LINK_CAPA_200000FD) },
+       { MAC_100000FD, SPEED_100000, DUPLEX_FULL, BIT(LINK_CAPA_100000FD) },
+       { MAC_56000FD,  SPEED_56000,  DUPLEX_FULL, BIT(LINK_CAPA_56000FD) },
+       { MAC_50000FD,  SPEED_50000,  DUPLEX_FULL, BIT(LINK_CAPA_50000FD) },
+       { MAC_40000FD,  SPEED_40000,  DUPLEX_FULL, BIT(LINK_CAPA_40000FD) },
+       { MAC_25000FD,  SPEED_25000,  DUPLEX_FULL, BIT(LINK_CAPA_25000FD) },
+       { MAC_20000FD,  SPEED_20000,  DUPLEX_FULL, BIT(LINK_CAPA_20000FD) },
+       { MAC_10000FD,  SPEED_10000,  DUPLEX_FULL, BIT(LINK_CAPA_10000FD) },
+       { MAC_5000FD,   SPEED_5000,   DUPLEX_FULL, BIT(LINK_CAPA_5000FD) },
+       { MAC_2500FD,   SPEED_2500,   DUPLEX_FULL, BIT(LINK_CAPA_2500FD) },
+       { MAC_1000FD,   SPEED_1000,   DUPLEX_FULL, BIT(LINK_CAPA_1000FD) },
+       { MAC_1000HD,   SPEED_1000,   DUPLEX_HALF, BIT(LINK_CAPA_1000HD) },
+       { MAC_100FD,    SPEED_100,    DUPLEX_FULL, BIT(LINK_CAPA_100FD) },
+       { MAC_100HD,    SPEED_100,    DUPLEX_HALF, BIT(LINK_CAPA_100HD) },
+       { MAC_10FD,     SPEED_10,     DUPLEX_FULL, BIT(LINK_CAPA_10FD) },
+       { MAC_10HD,     SPEED_10,     DUPLEX_HALF, BIT(LINK_CAPA_10HD) },
+};
+
 /**
  * phylink_caps_to_linkmodes() - Convert capabilities to ethtool link modes
  * @linkmodes: ethtool linkmode mask (must be already initialised)
@@ -445,30 +470,6 @@ static void phylink_caps_to_linkmodes(unsigned long *linkmodes,
        }
 }
 
-static struct {
-       unsigned long mask;
-       int speed;
-       unsigned int duplex;
-} phylink_caps_params[] = {
-       { MAC_400000FD, SPEED_400000, DUPLEX_FULL },
-       { MAC_200000FD, SPEED_200000, DUPLEX_FULL },
-       { MAC_100000FD, SPEED_100000, DUPLEX_FULL },
-       { MAC_56000FD,  SPEED_56000,  DUPLEX_FULL },
-       { MAC_50000FD,  SPEED_50000,  DUPLEX_FULL },
-       { MAC_40000FD,  SPEED_40000,  DUPLEX_FULL },
-       { MAC_25000FD,  SPEED_25000,  DUPLEX_FULL },
-       { MAC_20000FD,  SPEED_20000,  DUPLEX_FULL },
-       { MAC_10000FD,  SPEED_10000,  DUPLEX_FULL },
-       { MAC_5000FD,   SPEED_5000,   DUPLEX_FULL },
-       { MAC_2500FD,   SPEED_2500,   DUPLEX_FULL },
-       { MAC_1000FD,   SPEED_1000,   DUPLEX_FULL },
-       { MAC_1000HD,   SPEED_1000,   DUPLEX_HALF },
-       { MAC_100FD,    SPEED_100,    DUPLEX_FULL },
-       { MAC_100HD,    SPEED_100,    DUPLEX_HALF },
-       { MAC_10FD,     SPEED_10,     DUPLEX_FULL },
-       { MAC_10HD,     SPEED_10,     DUPLEX_HALF },
-};
-
 /**
  * phylink_limit_mac_speed - limit the phylink_config to a maximum speed
  * @config: pointer to a &struct phylink_config