149f89
From f507c9e5f77a10d25d32581c2b160e90c4c446b0 Mon Sep 17 00:00:00 2001
149f89
From: Aya Levin <ayal@mellanox.com>
149f89
Date: Mon, 25 Feb 2019 17:44:34 +0200
149f89
Subject: [PATCH] ethtool: Add support for 200Gbps (50Gbps per lane) link mode
149f89
149f89
Introduce 50Gbps per lane link modes and 200Gbps speed, update print
149f89
functions and initialization functions accordingly.
149f89
In addition, update related man page accordingly.
149f89
149f89
Signed-off-by: Aya Levin <ayal@mellanox.com>
149f89
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
149f89
Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
149f89
Signed-off-by: John W. Linville <linville@tuxdriver.com>
149f89
(cherry picked from commit caa4bbef6ff920a0ff1d94c5bff7f2c7c875fca3)
149f89
---
149f89
 ethtool-copy.h | 18 +++++++++++++++++-
149f89
 ethtool.8.in   | 15 +++++++++++++++
149f89
 ethtool.c      | 45 +++++++++++++++++++++++++++++++++++++++++++++
149f89
 3 files changed, 77 insertions(+), 1 deletion(-)
149f89
149f89
diff --git a/ethtool-copy.h b/ethtool-copy.h
149f89
index 8cc61e9..28b3592 100644
149f89
--- a/ethtool-copy.h
149f89
+++ b/ethtool-copy.h
149f89
@@ -1450,6 +1450,21 @@ enum ethtool_link_mode_bit_indices {
149f89
 	ETHTOOL_LINK_MODE_FEC_NONE_BIT	= 49,
149f89
 	ETHTOOL_LINK_MODE_FEC_RS_BIT	= 50,
149f89
 	ETHTOOL_LINK_MODE_FEC_BASER_BIT	= 51,
149f89
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT		 = 52,
149f89
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT		 = 53,
149f89
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT		 = 54,
149f89
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT	 = 55,
149f89
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT		 = 56,
149f89
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT	 = 57,
149f89
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT	 = 58,
149f89
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT	 = 59,
149f89
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
149f89
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT	 = 61,
149f89
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT	 = 62,
149f89
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT	 = 63,
149f89
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
149f89
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT	 = 65,
149f89
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT	 = 66,
149f89
 
149f89
 	/* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit
149f89
 	 * 31. Please do NOT define any SUPPORTED_* or ADVERTISED_*
149f89
@@ -1458,7 +1473,7 @@ enum ethtool_link_mode_bit_indices {
149f89
 	 */
149f89
 
149f89
 	__ETHTOOL_LINK_MODE_LAST
149f89
-	  = ETHTOOL_LINK_MODE_FEC_BASER_BIT,
149f89
+	  = ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
149f89
 };
149f89
 
149f89
 #define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name)	\
149f89
@@ -1566,6 +1581,7 @@ enum ethtool_link_mode_bit_indices {
149f89
 #define SPEED_50000		50000
149f89
 #define SPEED_56000		56000
149f89
 #define SPEED_100000		100000
149f89
+#define SPEED_200000		200000
149f89
 
149f89
 #define SPEED_UNKNOWN		-1
149f89
 
149f89
diff --git a/ethtool.8.in b/ethtool.8.in
149f89
index dd2e3f5..de6ae68 100644
149f89
--- a/ethtool.8.in
149f89
+++ b/ethtool.8.in
149f89
@@ -613,6 +613,11 @@ lB	l	lB.
149f89
 0x400000000	50000baseCR2 Full
149f89
 0x800000000	50000baseKR2 Full
149f89
 0x10000000000	50000baseSR2 Full
149f89
+0x10000000000000	50000baseKR Full
149f89
+0x20000000000000	50000baseSR Full
149f89
+0x40000000000000	50000baseCR Full
149f89
+0x80000000000000	50000baseLR_ER_FR Full
149f89
+0x100000000000000	50000baseDR Full
149f89
 0x8000000	56000baseKR4 Full
149f89
 0x10000000	56000baseCR4 Full
149f89
 0x20000000	56000baseSR4 Full
149f89
@@ -621,6 +626,16 @@ lB	l	lB.
149f89
 0x2000000000	100000baseSR4 Full
149f89
 0x4000000000	100000baseCR4 Full
149f89
 0x8000000000	100000baseLR4_ER4 Full
149f89
+0x200000000000000	100000baseKR2 Full
149f89
+0x400000000000000	100000baseSR2 Full
149f89
+0x800000000000000	100000baseCR2 Full
149f89
+0x1000000000000000	100000baseLR2_ER2_FR2 Full
149f89
+0x2000000000000000	100000baseDR2 Full
149f89
+0x4000000000000000	200000baseKR4 Full
149f89
+0x8000000000000000	200000baseSR4 Full
149f89
+0x10000000000000000	200000baseLR4_ER4_FR4 Full
149f89
+0x20000000000000000	200000baseDR4 Full
149f89
+0x40000000000000000	200000baseCR4 Full
149f89
 .TE
149f89
 .TP
149f89
 .BI phyad \ N
149f89
diff --git a/ethtool.c b/ethtool.c
149f89
index 06006f4..d58ca2e 100644
149f89
--- a/ethtool.c
149f89
+++ b/ethtool.c
149f89
@@ -530,6 +530,21 @@ static void init_global_link_mode_masks(void)
149f89
 		ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
149f89
 		ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
149f89
 		ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_50000baseKR_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_50000baseSR_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_50000baseCR_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_50000baseDR_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT,
149f89
+		ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
149f89
 	};
149f89
 	static const enum ethtool_link_mode_bit_indices
149f89
 		additional_advertised_flags_bits[] = {
149f89
@@ -689,6 +704,36 @@ static void dump_link_caps(const char *prefix, const char *an_prefix,
149f89
 		  "2500baseT/Full" },
149f89
 		{ 0, ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
149f89
 		  "5000baseT/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_50000baseKR_Full_BIT,
149f89
+		  "50000baseKR/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_50000baseSR_Full_BIT,
149f89
+		  "50000baseSR/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_50000baseCR_Full_BIT,
149f89
+		  "50000baseCR/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
149f89
+		  "50000baseLR_ER_FR/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_50000baseDR_Full_BIT,
149f89
+		  "50000baseDR/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT,
149f89
+		  "100000baseKR2/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT,
149f89
+		  "100000baseSR2/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT,
149f89
+		  "100000baseCR2/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT,
149f89
+		  "100000baseLR2_ER2_FR2/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT,
149f89
+		  "100000baseDR2/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
149f89
+		  "200000baseKR4/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
149f89
+		  "200000baseSR4/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
149f89
+		  "200000baseLR4_ER4_FR4/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT,
149f89
+		  "200000baseDR4/Full" },
149f89
+		{ 0, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
149f89
+		  "200000baseCR4/Full" },
149f89
 	};
149f89
 	int indent;
149f89
 	int did1, new_line_pend, i;
149f89
-- 
149f89
1.8.3.1
149f89