From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pegase2.c-s.fr (pegase2.c-s.fr [93.17.235.10]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 739D32BE65E; Sat, 15 Nov 2025 13:20:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=93.17.235.10 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763212852; cv=none; b=syoCstpdoklkOvRLbn47JpGJFjjU6cTmZuHE+QlE7w/JqndcKdvYCEGERLzm7OO+fnLelyCJdflNc8Qjqj5QEOJolGMDIFRj1iH0TPIhEJ06l9C+EbdbbHjDEfCrXY8Qn9zinWV5TeeKwzMFIKsfWPMEMzx35XrQixIbkhSd2AI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763212852; c=relaxed/simple; bh=U63xrY9LBorV5Lk+PZ0dtJk7ZTHWS8vBtIf3HAEuVt0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=Ml16i/ruoVusPfrd1epPN2eVyQmgUbTBdmNcYolIp7+d/1dubZpSKKAkUbJ2edezp/vJVoI9Lnp0G+BXrxks6ADLYlvtycsHo44OejBkS6ocVQmp40OZ1AXXmETGrrhifRY5kFhulYFluVZEeNqlU9zuEnnMuipaOgnvtq47pmg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu; spf=pass smtp.mailfrom=csgroup.eu; arc=none smtp.client-ip=93.17.235.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=csgroup.eu Received: from localhost (mailhub4.si.c-s.fr [172.26.127.67]) by localhost (Postfix) with ESMTP id 4d7v6h6N9Bz9sT1; Sat, 15 Nov 2025 13:52:28 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase2.c-s.fr ([172.26.127.65]) by localhost (pegase2.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 29ExJrkEAIOB; Sat, 15 Nov 2025 13:52:28 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase2.c-s.fr (Postfix) with ESMTP id 4d7v6h4P9Lz9sT0; Sat, 15 Nov 2025 13:52:28 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 744248B770; Sat, 15 Nov 2025 13:52:28 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id UTM0t3jTfcds; Sat, 15 Nov 2025 13:52:28 +0100 (CET) Received: from [192.168.235.99] (unknown [192.168.235.99]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 072648B76E; Sat, 15 Nov 2025 13:52:26 +0100 (CET) Message-ID: Date: Sat, 15 Nov 2025 13:52:26 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net-next v16 02/15] net: ethtool: Introduce ETHTOOL_LINK_MEDIUM_* values To: Maxime Chevallier , davem@davemloft.net Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, thomas.petazzoni@bootlin.com, Andrew Lunn , Jakub Kicinski , Eric Dumazet , Paolo Abeni , Russell King , linux-arm-kernel@lists.infradead.org, Herve Codina , Florian Fainelli , Heiner Kallweit , Vladimir Oltean , =?UTF-8?Q?K=C3=B6ry_Maincent?= , =?UTF-8?Q?Marek_Beh=C3=BAn?= , Oleksij Rempel , =?UTF-8?Q?Nicol=C3=B2_Veronese?= , Simon Horman , mwojtas@chromium.org, Antoine Tenart , devicetree@vger.kernel.org, Conor Dooley , Krzysztof Kozlowski , Rob Herring , Romain Gantois , Daniel Golle , Dimitri Fedrau References: <20251113081418.180557-1-maxime.chevallier@bootlin.com> <20251113081418.180557-3-maxime.chevallier@bootlin.com> From: Christophe Leroy Content-Language: fr-FR In-Reply-To: <20251113081418.180557-3-maxime.chevallier@bootlin.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 13/11/2025 à 09:14, Maxime Chevallier a écrit : > In an effort to have a better representation of Ethernet ports, > introduce enumeration values representing the various ethernet Mediums. > > This is part of the 802.3 naming convention, for example : > > 1000 Base T 4 > | | | | > | | | \_ pairs (4) > | | \___ Medium (T == Twisted Copper Pairs) > | \_______ Baseband transmission > \____________ Speed > > Other example : > > 10000 Base K X 4 > | | \_ lanes (4) > | \___ encoding (BaseX is 8b/10b while BaseR is 66b/64b) > \_____ Medium (K is backplane ethernet) > > In the case of representing a physical port, only the medium and number > of pairs should be relevant. One exception would be 1000BaseX, which is > currently also used as a medium in what appears to be any of > 1000BaseSX, 1000BaseCX and 1000BaseLX. This was reflected in the mediums > associated with the 1000BaseX linkmode. > > These mediums are set in the net/ethtool/common.c lookup table that > maintains a list of all linkmodes with their number of pairs, medium, > encoding, speed and duplex. > > One notable exception to this is 100M BaseT Ethernet. 100BaseTX is a > 2-pairs protocol but it will also work on 4-pairs cables, so the lookup > table contains 2 sets of pair numbers, indicating the min number of pairs > for a protocol to work and the "nominal" number of pairs as well. > > Another set of exceptions are linkmodes such 100000baseLR4_ER4, where > the same link mode seems to represent 100GBaseLR4 and 100GBaseER4. The > macro __DEFINE_LINK_MODE_PARAMS_MEDIUMS is here used to populate the > .mediums bitfield with all appropriate mediums. > > Reviewed-by: Andrew Lunn > Signed-off-by: Maxime Chevallier Reviewed-by: Christophe Leroy > --- > drivers/net/phy/phy_caps.c | 8 ++ > include/linux/ethtool.h | 19 ++- > include/uapi/linux/ethtool.h | 20 +++ > net/ethtool/common.c | 268 +++++++++++++++++++++-------------- > 4 files changed, 203 insertions(+), 112 deletions(-) > > diff --git a/drivers/net/phy/phy_caps.c b/drivers/net/phy/phy_caps.c > index 23c808b59b6f..9a5e293c5104 100644 > --- a/drivers/net/phy/phy_caps.c > +++ b/drivers/net/phy/phy_caps.c > @@ -78,6 +78,14 @@ int __init phy_caps_init(void) > /* Fill the caps array from net/ethtool/common.c */ > for (i = 0; i < __ETHTOOL_LINK_MODE_MASK_NBITS; i++) { > linkmode = &link_mode_params[i]; > + > + /* Sanity check the linkmodes array for number of pairs */ > + if (linkmode->pairs < linkmode->min_pairs) { > + pr_err("Pairs count must not be under min_pairs for linkmode %d\n", > + i); > + return -EINVAL; > + } > + > capa = speed_duplex_to_capa(linkmode->speed, linkmode->duplex); > > if (capa < 0) { > 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]; > +} > + > /* 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, > +}; > + > +#define ETHTOOL_MEDIUM_FIBER_BITS (BIT(ETHTOOL_LINK_MEDIUM_BASES) | \ > + BIT(ETHTOOL_LINK_MEDIUM_BASEL) | \ > + BIT(ETHTOOL_LINK_MEDIUM_BASEF)) > + > #endif /* _UAPI_LINUX_ETHTOOL_H */ > diff --git a/net/ethtool/common.c b/net/ethtool/common.c > index 55223ebc2a7e..bd6417dfb362 100644 > --- a/net/ethtool/common.c > +++ b/net/ethtool/common.c > @@ -281,12 +281,35 @@ static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS); > #define __LINK_MODE_LANES_DR8_2 8 > #define __LINK_MODE_LANES_T1BRR 1 > > -#define __DEFINE_LINK_MODE_PARAMS(_speed, _type, _duplex) \ > +#define __DEFINE_LINK_MODE_PARAMS_PAIRS(_speed, _type, _min_pairs, _pairs, _duplex, _medium) \ > [ETHTOOL_LINK_MODE(_speed, _type, _duplex)] = { \ > .speed = SPEED_ ## _speed, \ > .lanes = __LINK_MODE_LANES_ ## _type, \ > - .duplex = __DUPLEX_ ## _duplex \ > + .min_pairs = _min_pairs, \ > + .pairs = _pairs, \ > + .duplex = __DUPLEX_ ## _duplex, \ > + .mediums = BIT(ETHTOOL_LINK_MEDIUM_BASE ## _medium) \ > } > + > +#define __DEFINE_LINK_MODE_PARAMS(_speed, _type, _duplex, _medium) \ > + [ETHTOOL_LINK_MODE(_speed, _type, _duplex)] = { \ > + .speed = SPEED_ ## _speed, \ > + .lanes = __LINK_MODE_LANES_ ## _type, \ > + .min_pairs = 0, \ > + .pairs = 0, \ > + .duplex = __DUPLEX_ ## _duplex, \ > + .mediums = BIT(ETHTOOL_LINK_MEDIUM_BASE ## _medium) \ > + } > +#define __DEFINE_LINK_MODE_PARAMS_MEDIUMS(_speed, _type, _duplex, _mediums) \ > + [ETHTOOL_LINK_MODE(_speed, _type, _duplex)] = { \ > + .speed = SPEED_ ## _speed, \ > + .lanes = __LINK_MODE_LANES_ ## _type, \ > + .min_pairs = 0, \ > + .pairs = 0, \ > + .duplex = __DUPLEX_ ## _duplex, \ > + .mediums = (_mediums) \ > + } > +#define __MED(_medium) (BIT(ETHTOOL_LINK_MEDIUM_BASE ## _medium)) > #define __DUPLEX_Half DUPLEX_HALF > #define __DUPLEX_Full DUPLEX_FULL > #define __DEFINE_SPECIAL_MODE_PARAMS(_mode) \ > @@ -294,138 +317,165 @@ static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS); > .speed = SPEED_UNKNOWN, \ > .lanes = 0, \ > .duplex = DUPLEX_UNKNOWN, \ > + .mediums = BIT(ETHTOOL_LINK_MEDIUM_NONE), \ > } > > const struct link_mode_info link_mode_params[] = { > - __DEFINE_LINK_MODE_PARAMS(10, T, Half), > - __DEFINE_LINK_MODE_PARAMS(10, T, Full), > - __DEFINE_LINK_MODE_PARAMS(100, T, Half), > - __DEFINE_LINK_MODE_PARAMS(100, T, Full), > - __DEFINE_LINK_MODE_PARAMS(1000, T, Half), > - __DEFINE_LINK_MODE_PARAMS(1000, T, Full), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T, 2, 4, Half, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T, 2, 4, Full, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(100, T, 2, 4, Half, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(100, T, 2, 4, Full, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(1000, T, 4, 4, Half, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(1000, T, 4, 4, Full, T), > __DEFINE_SPECIAL_MODE_PARAMS(Autoneg), > __DEFINE_SPECIAL_MODE_PARAMS(TP), > __DEFINE_SPECIAL_MODE_PARAMS(AUI), > __DEFINE_SPECIAL_MODE_PARAMS(MII), > __DEFINE_SPECIAL_MODE_PARAMS(FIBRE), > __DEFINE_SPECIAL_MODE_PARAMS(BNC), > - __DEFINE_LINK_MODE_PARAMS(10000, T, Full), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10000, T, 4, 4, Full, T), > __DEFINE_SPECIAL_MODE_PARAMS(Pause), > __DEFINE_SPECIAL_MODE_PARAMS(Asym_Pause), > - __DEFINE_LINK_MODE_PARAMS(2500, X, Full), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(2500, X, Full, > + __MED(C) | __MED(S) | __MED(L)), > __DEFINE_SPECIAL_MODE_PARAMS(Backplane), > - __DEFINE_LINK_MODE_PARAMS(1000, KX, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, KX4, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, KR, Full), > + __DEFINE_LINK_MODE_PARAMS(1000, KX, Full, K), > + __DEFINE_LINK_MODE_PARAMS(10000, KX4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(10000, KR, Full, K), > [ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = { > .speed = SPEED_10000, > .lanes = 1, > .duplex = DUPLEX_FULL, > }, > - __DEFINE_LINK_MODE_PARAMS(20000, MLD2, Full), > - __DEFINE_LINK_MODE_PARAMS(20000, KR2, Full), > - __DEFINE_LINK_MODE_PARAMS(40000, KR4, Full), > - __DEFINE_LINK_MODE_PARAMS(40000, CR4, Full), > - __DEFINE_LINK_MODE_PARAMS(40000, SR4, Full), > - __DEFINE_LINK_MODE_PARAMS(40000, LR4, Full), > - __DEFINE_LINK_MODE_PARAMS(56000, KR4, Full), > - __DEFINE_LINK_MODE_PARAMS(56000, CR4, Full), > - __DEFINE_LINK_MODE_PARAMS(56000, SR4, Full), > - __DEFINE_LINK_MODE_PARAMS(56000, LR4, Full), > - __DEFINE_LINK_MODE_PARAMS(25000, CR, Full), > - __DEFINE_LINK_MODE_PARAMS(25000, KR, Full), > - __DEFINE_LINK_MODE_PARAMS(25000, SR, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, CR2, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, KR2, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, KR4, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, SR4, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, CR4, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, LR4_ER4, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, SR2, Full), > - __DEFINE_LINK_MODE_PARAMS(1000, X, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, CR, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, SR, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, LR, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, LRM, Full), > - __DEFINE_LINK_MODE_PARAMS(10000, ER, Full), > - __DEFINE_LINK_MODE_PARAMS(2500, T, Full), > - __DEFINE_LINK_MODE_PARAMS(5000, T, Full), > + __DEFINE_LINK_MODE_PARAMS(20000, MLD2, Full, MLD), > + __DEFINE_LINK_MODE_PARAMS(20000, KR2, Full, K), > + __DEFINE_LINK_MODE_PARAMS(40000, KR4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(40000, CR4, Full, C), > + __DEFINE_LINK_MODE_PARAMS(40000, SR4, Full, S), > + __DEFINE_LINK_MODE_PARAMS(40000, LR4, Full, L), > + __DEFINE_LINK_MODE_PARAMS(56000, KR4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(56000, CR4, Full, C), > + __DEFINE_LINK_MODE_PARAMS(56000, SR4, Full, S), > + __DEFINE_LINK_MODE_PARAMS(56000, LR4, Full, L), > + __DEFINE_LINK_MODE_PARAMS(25000, CR, Full, C), > + __DEFINE_LINK_MODE_PARAMS(25000, KR, Full, K), > + __DEFINE_LINK_MODE_PARAMS(25000, SR, Full, S), > + __DEFINE_LINK_MODE_PARAMS(50000, CR2, Full, C), > + __DEFINE_LINK_MODE_PARAMS(50000, KR2, Full, K), > + __DEFINE_LINK_MODE_PARAMS(100000, KR4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(100000, SR4, Full, S), > + __DEFINE_LINK_MODE_PARAMS(100000, CR4, Full, C), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(100000, LR4_ER4, Full, > + __MED(L) | __MED(E)), > + __DEFINE_LINK_MODE_PARAMS(50000, SR2, Full, S), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(1000, X, Full, > + __MED(C) | __MED(S) | __MED(L)), > + __DEFINE_LINK_MODE_PARAMS(10000, CR, Full, C), > + __DEFINE_LINK_MODE_PARAMS(10000, SR, Full, S), > + __DEFINE_LINK_MODE_PARAMS(10000, LR, Full, L), > + __DEFINE_LINK_MODE_PARAMS(10000, LRM, Full, L), > + __DEFINE_LINK_MODE_PARAMS(10000, ER, Full, E), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(2500, T, 4, 4, Full, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(5000, T, 4, 4, Full, T), > __DEFINE_SPECIAL_MODE_PARAMS(FEC_NONE), > __DEFINE_SPECIAL_MODE_PARAMS(FEC_RS), > __DEFINE_SPECIAL_MODE_PARAMS(FEC_BASER), > - __DEFINE_LINK_MODE_PARAMS(50000, KR, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, SR, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, CR, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, LR_ER_FR, Full), > - __DEFINE_LINK_MODE_PARAMS(50000, DR, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, KR2, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, SR2, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, CR2, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, LR2_ER2_FR2, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, DR2, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, KR4, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, SR4, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, LR4_ER4_FR4, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, DR4, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, CR4, Full), > - __DEFINE_LINK_MODE_PARAMS(100, T1, Full), > - __DEFINE_LINK_MODE_PARAMS(1000, T1, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, KR8, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, SR8, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, LR8_ER8_FR8, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, DR8, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, CR8, Full), > + __DEFINE_LINK_MODE_PARAMS(50000, KR, Full, K), > + __DEFINE_LINK_MODE_PARAMS(50000, SR, Full, S), > + __DEFINE_LINK_MODE_PARAMS(50000, CR, Full, C), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(50000, LR_ER_FR, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(50000, DR, Full, D), > + __DEFINE_LINK_MODE_PARAMS(100000, KR2, Full, K), > + __DEFINE_LINK_MODE_PARAMS(100000, SR2, Full, S), > + __DEFINE_LINK_MODE_PARAMS(100000, CR2, Full, C), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(100000, LR2_ER2_FR2, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(100000, DR2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(200000, KR4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(200000, SR4, Full, S), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(200000, LR4_ER4_FR4, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(200000, DR4, Full, D), > + __DEFINE_LINK_MODE_PARAMS(200000, CR4, Full, C), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(100, T1, 1, 1, Full, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(1000, T1, 1, 1, Full, T), > + __DEFINE_LINK_MODE_PARAMS(400000, KR8, Full, K), > + __DEFINE_LINK_MODE_PARAMS(400000, SR8, Full, S), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(400000, LR8_ER8_FR8, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(400000, DR8, Full, D), > + __DEFINE_LINK_MODE_PARAMS(400000, CR8, Full, C), > __DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS), > - __DEFINE_LINK_MODE_PARAMS(100000, KR, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, SR, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, LR_ER_FR, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, DR, Full), > - __DEFINE_LINK_MODE_PARAMS(100000, CR, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, KR2, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, SR2, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, LR2_ER2_FR2, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, DR2, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, CR2, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, KR4, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, SR4, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, LR4_ER4_FR4, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, DR4, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, CR4, Full), > - __DEFINE_LINK_MODE_PARAMS(100, FX, Half), > - __DEFINE_LINK_MODE_PARAMS(100, FX, Full), > - __DEFINE_LINK_MODE_PARAMS(10, T1L, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, CR8, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, KR8, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, DR8, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, DR8_2, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, SR8, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, VR8, Full), > - __DEFINE_LINK_MODE_PARAMS(10, T1S, Full), > - __DEFINE_LINK_MODE_PARAMS(10, T1S, Half), > - __DEFINE_LINK_MODE_PARAMS(10, T1S_P2MP, Half), > - __DEFINE_LINK_MODE_PARAMS(10, T1BRR, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, CR, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, KR, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, DR, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, DR_2, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, SR, Full), > - __DEFINE_LINK_MODE_PARAMS(200000, VR, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, CR2, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, KR2, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, DR2, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, DR2_2, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, SR2, Full), > - __DEFINE_LINK_MODE_PARAMS(400000, VR2, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, CR4, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, KR4, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, DR4, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, DR4_2, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, SR4, Full), > - __DEFINE_LINK_MODE_PARAMS(800000, VR4, Full), > + __DEFINE_LINK_MODE_PARAMS(100000, KR, Full, K), > + __DEFINE_LINK_MODE_PARAMS(100000, SR, Full, S), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(100000, LR_ER_FR, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(100000, DR, Full, D), > + __DEFINE_LINK_MODE_PARAMS(100000, CR, Full, C), > + __DEFINE_LINK_MODE_PARAMS(200000, KR2, Full, K), > + __DEFINE_LINK_MODE_PARAMS(200000, SR2, Full, S), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(200000, LR2_ER2_FR2, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(200000, DR2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(200000, CR2, Full, C), > + __DEFINE_LINK_MODE_PARAMS(400000, KR4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(400000, SR4, Full, S), > + __DEFINE_LINK_MODE_PARAMS_MEDIUMS(400000, LR4_ER4_FR4, Full, > + __MED(L) | __MED(E) | __MED(F)), > + __DEFINE_LINK_MODE_PARAMS(400000, DR4, Full, D), > + __DEFINE_LINK_MODE_PARAMS(400000, CR4, Full, C), > + __DEFINE_LINK_MODE_PARAMS(100, FX, Half, F), > + __DEFINE_LINK_MODE_PARAMS(100, FX, Full, F), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T1L, 1, 1, Full, T), > + __DEFINE_LINK_MODE_PARAMS(800000, CR8, Full, C), > + __DEFINE_LINK_MODE_PARAMS(800000, KR8, Full, K), > + __DEFINE_LINK_MODE_PARAMS(800000, DR8, Full, D), > + __DEFINE_LINK_MODE_PARAMS(800000, DR8_2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(800000, SR8, Full, S), > + __DEFINE_LINK_MODE_PARAMS(800000, VR8, Full, V), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T1S, 1, 1, Full, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T1S, 1, 1, Half, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T1S_P2MP, 1, 1, Half, T), > + __DEFINE_LINK_MODE_PARAMS_PAIRS(10, T1BRR, 1, 1, Full, T), > + __DEFINE_LINK_MODE_PARAMS(200000, CR, Full, C), > + __DEFINE_LINK_MODE_PARAMS(200000, KR, Full, K), > + __DEFINE_LINK_MODE_PARAMS(200000, DR, Full, D), > + __DEFINE_LINK_MODE_PARAMS(200000, DR_2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(200000, SR, Full, S), > + __DEFINE_LINK_MODE_PARAMS(200000, VR, Full, V), > + __DEFINE_LINK_MODE_PARAMS(400000, CR2, Full, C), > + __DEFINE_LINK_MODE_PARAMS(400000, KR2, Full, K), > + __DEFINE_LINK_MODE_PARAMS(400000, DR2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(400000, DR2_2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(400000, SR2, Full, S), > + __DEFINE_LINK_MODE_PARAMS(400000, VR2, Full, V), > + __DEFINE_LINK_MODE_PARAMS(800000, CR4, Full, C), > + __DEFINE_LINK_MODE_PARAMS(800000, KR4, Full, K), > + __DEFINE_LINK_MODE_PARAMS(800000, DR4, Full, D), > + __DEFINE_LINK_MODE_PARAMS(800000, DR4_2, Full, D), > + __DEFINE_LINK_MODE_PARAMS(800000, SR4, Full, S), > + __DEFINE_LINK_MODE_PARAMS(800000, VR4, Full, V), > }; > static_assert(ARRAY_SIZE(link_mode_params) == __ETHTOOL_LINK_MODE_MASK_NBITS); > EXPORT_SYMBOL_GPL(link_mode_params); > > +const char ethtool_link_medium_names[][ETH_GSTRING_LEN] = { > + [ETHTOOL_LINK_MEDIUM_BASET] = "BaseT", > + [ETHTOOL_LINK_MEDIUM_BASEK] = "BaseK", > + [ETHTOOL_LINK_MEDIUM_BASES] = "BaseS", > + [ETHTOOL_LINK_MEDIUM_BASEC] = "BaseC", > + [ETHTOOL_LINK_MEDIUM_BASEL] = "BaseL", > + [ETHTOOL_LINK_MEDIUM_BASED] = "BaseD", > + [ETHTOOL_LINK_MEDIUM_BASEE] = "BaseE", > + [ETHTOOL_LINK_MEDIUM_BASEF] = "BaseF", > + [ETHTOOL_LINK_MEDIUM_BASEV] = "BaseV", > + [ETHTOOL_LINK_MEDIUM_BASEMLD] = "BaseMLD", > + [ETHTOOL_LINK_MEDIUM_NONE] = "None", > +}; > +static_assert(ARRAY_SIZE(ethtool_link_medium_names) == __ETHTOOL_LINK_MEDIUM_LAST); > +EXPORT_SYMBOL_GPL(ethtool_link_medium_names); > + > const char netif_msg_class_names[][ETH_GSTRING_LEN] = { > [NETIF_MSG_DRV_BIT] = "drv", > [NETIF_MSG_PROBE_BIT] = "probe",