ethtool/backport-ethtool-Add-support-for-more-CMIS-transceiver-module.patch
Jiantao Xiao 63c347cf61 ethtool: Add support for more CMIS transceiver modules
This commit adds a framework to support querying CMIS module information

category: Feature
bugzilla: https://gitee.com/src-openeuler/ethtool/issues/I9VV62
2024-06-07 11:08:12 +08:00

206 lines
14 KiB
Diff

From 176cd20c04800b4455521536f65408a076eb213d Mon Sep 17 00:00:00 2001
From: Ido Schimmel <idosch@nvidia.com>
Date: Mon, 30 Oct 2023 09:23:53 +0200
Subject: [PATCH] ethtool: Add support for more CMIS transceiver modules
Add three more SFF-8024 Identifier Values that according to the standard
support the Common Management Interface Specification (CMIS) memory map
so that ethtool will be able to dump, parse and print their EEPROM
contents.
commit: 8ad5035
Reference: https://git.kernel.org/pub/scm/network/ethtool/ethtool.git/commit/?id=8ad503517b45
change log: change Makefile.in for openEuler CI building.
Reported-by: Mark Wang <markwang@nvidia.com>
Tested-by: Mark Wang <markwang@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
---
Makefile.in | 39 +++++++++++++++++++++++++++++++++++----
netlink/module-eeprom.c | 3 +++
qsfp.c | 10 +++++++---
sff-common.c | 9 +++++++++
sff-common.h | 5 ++++-
5 files changed, 58 insertions(+), 8 deletions(-)
diff --git a/Makefile.in b/Makefile.in
index 0f035a9..f4515b3 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -109,7 +109,7 @@ sbin_PROGRAMS = ethtool$(EXEEXT)
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/eee.c netlink/tsinfo.c netlink/fec.c \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/stats.c \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/desc-ethtool.c netlink/desc-genlctrl.c \
-@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/module-eeprom.c \
+@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/module-eeprom.c netlink/module.c \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/desc-rtnl.c netlink/cable_test.c netlink/tunnels.c \
@ETHTOOL_ENABLE_NETLINK_TRUE@ uapi/linux/ethtool_netlink.h \
@ETHTOOL_ENABLE_NETLINK_TRUE@ uapi/linux/netlink.h uapi/linux/genetlink.h \
@@ -157,7 +157,7 @@ am__ethtool_SOURCES_DIST = ethtool.c uapi/linux/ethtool.h internal.h \
netlink/rings.c netlink/channels.c netlink/coalesce.c \
netlink/pause.c netlink/eee.c netlink/tsinfo.c netlink/fec.c \
netlink/stats.c netlink/desc-ethtool.c netlink/desc-genlctrl.c \
- netlink/module-eeprom.c netlink/desc-rtnl.c \
+ netlink/module-eeprom.c netlink/module.c netlink/desc-rtnl.c \
netlink/cable_test.c netlink/tunnels.c \
uapi/linux/ethtool_netlink.h uapi/linux/netlink.h \
uapi/linux/genetlink.h uapi/linux/rtnetlink.h \
@@ -217,6 +217,7 @@ am__dirstamp = $(am__leading_dot)dirstamp
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/desc-ethtool.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/desc-genlctrl.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/module-eeprom.$(OBJEXT) \
+@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/module.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/desc-rtnl.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/cable_test.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/tunnels.$(OBJEXT)
@@ -246,7 +247,7 @@ am__test_cmdline_SOURCES_DIST = test-cmdline.c test-common.c ethtool.c \
netlink/channels.c netlink/coalesce.c netlink/pause.c \
netlink/eee.c netlink/tsinfo.c netlink/fec.c netlink/stats.c \
netlink/desc-ethtool.c netlink/desc-genlctrl.c \
- netlink/module-eeprom.c netlink/desc-rtnl.c \
+ netlink/module-eeprom.c netlink/module.c netlink/desc-rtnl.c \
netlink/cable_test.c netlink/tunnels.c \
uapi/linux/ethtool_netlink.h uapi/linux/netlink.h \
uapi/linux/genetlink.h uapi/linux/rtnetlink.h \
@@ -309,6 +310,7 @@ am__test_cmdline_SOURCES_DIST = test-cmdline.c test-common.c ethtool.c \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-desc-ethtool.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-desc-genlctrl.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-module-eeprom.$(OBJEXT) \
+@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-module.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-desc-rtnl.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-cable_test.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_cmdline-tunnels.$(OBJEXT)
@@ -343,7 +345,7 @@ am__test_features_SOURCES_DIST = test-features.c test-common.c \
netlink/rings.c netlink/channels.c netlink/coalesce.c \
netlink/pause.c netlink/eee.c netlink/tsinfo.c netlink/fec.c \
netlink/stats.c netlink/desc-ethtool.c netlink/desc-genlctrl.c \
- netlink/module-eeprom.c netlink/desc-rtnl.c \
+ netlink/module-eeprom.c netlink/module.c netlink/desc-rtnl.c \
netlink/cable_test.c netlink/tunnels.c \
uapi/linux/ethtool_netlink.h uapi/linux/netlink.h \
uapi/linux/genetlink.h uapi/linux/rtnetlink.h \
@@ -406,6 +408,7 @@ am__test_features_SOURCES_DIST = test-features.c test-common.c \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-desc-ethtool.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-desc-genlctrl.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-module-eeprom.$(OBJEXT) \
+@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-module.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-desc-rtnl.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-cable_test.$(OBJEXT) \
@ETHTOOL_ENABLE_NETLINK_TRUE@ netlink/test_features-tunnels.$(OBJEXT)
@@ -2238,6 +2241,20 @@ netlink/test_cmdline-module-eeprom.obj: netlink/module-eeprom.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -c -o netlink/test_cmdline-module-eeprom.obj `if test -f 'netlink/module-eeprom.c'; then $(CYGPATH_W) 'netlink/module-eeprom.c'; else $(CYGPATH_W) '$(srcdir)/netlink/module-eeprom.c'; fi`
+netlink/test_cmdline-module.o: netlink/module.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -MT netlink/test_cmdline-module.o -MD -MP -MF netlink/$(DEPDIR)/test_cmdline-module.Tpo -c -o netlink/test_cmdline-module.o `test -f 'netlink/module.c' || echo '$(srcdir)/'`netlink/module.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) netlink/$(DEPDIR)/test_cmdline-module.Tpo netlink/$(DEPDIR)/test_cmdline-module.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netlink/module.c' object='netlink/test_cmdline-module.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -c -o netlink/test_cmdline-module.o `test -f 'netlink/module.c' || echo '$(srcdir)/'`netlink/module.c
+
+netlink/test_cmdline-module.obj: netlink/module.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -MT netlink/test_cmdline-module.obj -MD -MP -MF netlink/$(DEPDIR)/test_cmdline-module.Tpo -c -o netlink/test_cmdline-module.obj `if test -f 'netlink/module.c'; then $(CYGPATH_W) 'netlink/module.c'; else $(CYGPATH_W) '$(srcdir)/netlink/module.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) netlink/$(DEPDIR)/test_cmdline-module.Tpo netlink/$(DEPDIR)/test_cmdline-module.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netlink/module.c' object='netlink/test_cmdline-module.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -c -o netlink/test_cmdline-module.obj `if test -f 'netlink/module.c'; then $(CYGPATH_W) 'netlink/module.c'; else $(CYGPATH_W) '$(srcdir)/netlink/module.c'; fi`
+
netlink/test_cmdline-desc-rtnl.o: netlink/desc-rtnl.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -MT netlink/test_cmdline-desc-rtnl.o -MD -MP -MF netlink/$(DEPDIR)/test_cmdline-desc-rtnl.Tpo -c -o netlink/test_cmdline-desc-rtnl.o `test -f 'netlink/desc-rtnl.c' || echo '$(srcdir)/'`netlink/desc-rtnl.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) netlink/$(DEPDIR)/test_cmdline-desc-rtnl.Tpo netlink/$(DEPDIR)/test_cmdline-desc-rtnl.Po
@@ -3176,6 +3193,20 @@ netlink/test_features-module-eeprom.obj: netlink/module-eeprom.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -c -o netlink/test_features-module-eeprom.obj `if test -f 'netlink/module-eeprom.c'; then $(CYGPATH_W) 'netlink/module-eeprom.c'; else $(CYGPATH_W) '$(srcdir)/netlink/module-eeprom.c'; fi`
+netlink/test_features-module.o: netlink/module.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -MT netlink/test_features-module.o -MD -MP -MF netlink/$(DEPDIR)/test_features-module.Tpo -c -o netlink/test_features-module.o `test -f 'netlink/module.c' || echo '$(srcdir)/'`netlink/module.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) netlink/$(DEPDIR)/test_features-module.Tpo netlink/$(DEPDIR)/test_features-module.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netlink/module.c' object='netlink/test_features-module.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -c -o netlink/test_features-module.o `test -f 'netlink/module.c' || echo '$(srcdir)/'`netlink/module.c
+
+netlink/test_features-module.obj: netlink/module.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -MT netlink/test_features-module.obj -MD -MP -MF netlink/$(DEPDIR)/test_features-module.Tpo -c -o netlink/test_features-module.obj `if test -f 'netlink/module.c'; then $(CYGPATH_W) 'netlink/module.c'; else $(CYGPATH_W) '$(srcdir)/netlink/module.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) netlink/$(DEPDIR)/test_features-module.Tpo netlink/$(DEPDIR)/test_features-module.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netlink/module.c' object='netlink/test_features-module.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -c -o netlink/test_features-module.obj `if test -f 'netlink/module.c'; then $(CYGPATH_W) 'netlink/module.c'; else $(CYGPATH_W) '$(srcdir)/netlink/module.c'; fi`
+
netlink/test_features-desc-rtnl.o: netlink/desc-rtnl.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -MT netlink/test_features-desc-rtnl.o -MD -MP -MF netlink/$(DEPDIR)/test_features-desc-rtnl.Tpo -c -o netlink/test_features-desc-rtnl.o `test -f 'netlink/desc-rtnl.c' || echo '$(srcdir)/'`netlink/desc-rtnl.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) netlink/$(DEPDIR)/test_features-desc-rtnl.Tpo netlink/$(DEPDIR)/test_features-desc-rtnl.Po
diff --git a/netlink/module-eeprom.c b/netlink/module-eeprom.c
index 49833a2..09ad580 100644
--- a/netlink/module-eeprom.c
+++ b/netlink/module-eeprom.c
@@ -225,6 +225,9 @@ static int eeprom_parse(struct cmd_context *ctx)
case SFF8024_ID_QSFP_DD:
case SFF8024_ID_OSFP:
case SFF8024_ID_DSFP:
+ case SFF8024_ID_QSFP_PLUS_CMIS:
+ case SFF8024_ID_SFP_DD_CMIS:
+ case SFF8024_ID_SFP_PLUS_CMIS:
return cmis_show_all_nl(ctx);
#endif
default:
diff --git a/qsfp.c b/qsfp.c
index 1fe5de1..ae4a581 100644
--- a/qsfp.c
+++ b/qsfp.c
@@ -947,9 +947,13 @@ void sff8636_show_all_ioctl(const __u8 *id, __u32 eeprom_len)
{
struct sff8636_memory_map map = {};
- if (id[SFF8636_ID_OFFSET] == SFF8024_ID_QSFP_DD ||
- id[SFF8636_ID_OFFSET] == SFF8024_ID_OSFP ||
- id[SFF8636_ID_OFFSET] == SFF8024_ID_DSFP) {
+ switch (id[SFF8636_ID_OFFSET]) {
+ case SFF8024_ID_QSFP_DD:
+ case SFF8024_ID_OSFP:
+ case SFF8024_ID_DSFP:
+ case SFF8024_ID_QSFP_PLUS_CMIS:
+ case SFF8024_ID_SFP_DD_CMIS:
+ case SFF8024_ID_SFP_PLUS_CMIS:
cmis_show_all_ioctl(id);
return;
}
diff --git a/sff-common.c b/sff-common.c
index e951cf1..9e4a89b 100644
--- a/sff-common.c
+++ b/sff-common.c
@@ -145,6 +145,15 @@ void sff8024_show_identifier(const __u8 *id, int id_offset)
case SFF8024_ID_DSFP:
printf(" (DSFP Dual Small Form Factor Pluggable Transceiver)\n");
break;
+ case SFF8024_ID_QSFP_PLUS_CMIS:
+ printf(" (QSFP+ or later with Common Management Interface Specification (CMIS))\n");
+ break;
+ case SFF8024_ID_SFP_DD_CMIS:
+ printf(" (SFP-DD Double Density 2X Pluggable Transceiver with Common Management Interface Specification (CMIS))\n");
+ break;
+ case SFF8024_ID_SFP_PLUS_CMIS:
+ printf(" (SFP+ and later with Common Management Interface Specification (CMIS))\n");
+ break;
default:
printf(" (reserved or unknown)\n");
break;
diff --git a/sff-common.h b/sff-common.h
index dd12dda..94827cc 100644
--- a/sff-common.h
+++ b/sff-common.h
@@ -64,7 +64,10 @@
#define SFF8024_ID_QSFP_DD 0x18
#define SFF8024_ID_OSFP 0x19
#define SFF8024_ID_DSFP 0x1B
-#define SFF8024_ID_LAST SFF8024_ID_DSFP
+#define SFF8024_ID_QSFP_PLUS_CMIS 0x1E
+#define SFF8024_ID_SFP_DD_CMIS 0x1F
+#define SFF8024_ID_SFP_PLUS_CMIS 0x20
+#define SFF8024_ID_LAST SFF8024_ID_SFP_PLUS_CMIS
#define SFF8024_ID_UNALLOCATED_LAST 0x7F
#define SFF8024_ID_VENDOR_START 0x80
#define SFF8024_ID_VENDOR_LAST 0xFF
--
2.30.0