Re: [PATCH net-next v16 02/15] net: ethtool: Introduce ETHTOOL_LINK_MEDIUM_* values
From: Maxime Chevallier <maxime.chevallier@bootlin.com>
Date: 2025-11-19 13:29:23
Also in:
linux-arm-kernel, linux-arm-msm, linux-devicetree, lkml
Hi Jakub, On 19/11/2025 04:15, Jakub Kicinski wrote:
On Thu, 13 Nov 2025 09:14:04 +0100 Maxime Chevallier wrote:quoted
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index c2d8b4ec62eb..ad2b5ed9522b 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h@@ -216,13 +216,26 @@ static inline u8 *ethtool_rxfh_context_key(struct ethtool_rxfh_context *ctx) void ethtool_rxfh_context_lost(struct net_device *dev, u32 context_id); struct link_mode_info { - int speed; - u8 lanes; - u8 duplex; + int speed; + u8 lanes; + u8 min_pairs; + u8 pairs; + u8 duplex; + u16 mediums; }; extern const struct link_mode_info link_mode_params[]; +extern const char ethtool_link_medium_names[][ETH_GSTRING_LEN]; + +static inline const char *phy_mediums(enum ethtool_link_medium medium) +{ + if (medium >= __ETHTOOL_LINK_MEDIUM_LAST) + return "unknown"; + + return ethtool_link_medium_names[medium]; +}Will this function be called by a lot of drivers? Would be great to find a more suitable place for it, ethtool.h is included by thousands of objects :(
I expect this to be mostly used by the current DT parsing code, as well as a few print statements in the core. So indeed let's move this somewhere more specific.
quoted
/* declare a link mode bitmap */ #define __ETHTOOL_DECLARE_LINK_MODE_MASK(name) \ DECLARE_BITMAP(name, __ETHTOOL_LINK_MODE_MASK_NBITS)diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index 8bd5ea5469d9..6ed235053aed 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h@@ -2587,4 +2587,24 @@ enum phy_upstream { PHY_UPSTREAM_PHY, }; +enum ethtool_link_medium { + ETHTOOL_LINK_MEDIUM_BASET = 0, + ETHTOOL_LINK_MEDIUM_BASEK, + ETHTOOL_LINK_MEDIUM_BASES, + ETHTOOL_LINK_MEDIUM_BASEC, + ETHTOOL_LINK_MEDIUM_BASEL, + ETHTOOL_LINK_MEDIUM_BASED, + ETHTOOL_LINK_MEDIUM_BASEE, + ETHTOOL_LINK_MEDIUM_BASEF, + ETHTOOL_LINK_MEDIUM_BASEV, + ETHTOOL_LINK_MEDIUM_BASEMLD, + ETHTOOL_LINK_MEDIUM_NONE, + + __ETHTOOL_LINK_MEDIUM_LAST, +};Why is this in uAPI? I'd have expected it to either exist in the YAML spec if there's a new uAPI that needs it, or in kernel headers. Let's move it out for now to be safe, we can always move it in.
I originally planned to report that in linkmodes et.al. but changed my mind, let me move that out as well.
quoted
+#define ETHTOOL_MEDIUM_FIBER_BITS (BIT(ETHTOOL_LINK_MEDIUM_BASES) | \ + BIT(ETHTOOL_LINK_MEDIUM_BASEL) | \ + BIT(ETHTOOL_LINK_MEDIUM_BASEF))Ditto.
Thanks for taking a look, Maxime