1f2507
From 5b46ca06c9888c663a74bdd804b0ecb7199cfb62 Mon Sep 17 00:00:00 2001
1f2507
From: Ido Schimmel <idosch@nvidia.com>
1f2507
Date: Fri, 1 Oct 2021 18:06:21 +0300
1f2507
Subject: [PATCH 06/35] cmis: Fix CLEI code parsing
1f2507
1f2507
In CMIS, unlike SFF-8636, there is no presence indication for the CLEI
1f2507
code (Common Language Equipment Identification) field. The field is
1f2507
always present, but might not be supported. In which case, "a value of
1f2507
all ASCII 20h (spaces) shall be entered".
1f2507
1f2507
Therefore, remove the erroneous check which seems to be influenced from
1f2507
SFF-8636 and only print the string if it is supported and has a non-zero
1f2507
length.
1f2507
1f2507
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
1f2507
---
1f2507
 cmis.c | 8 +++++---
1f2507
 cmis.h | 4 ++--
1f2507
 2 files changed, 7 insertions(+), 5 deletions(-)
1f2507
1f2507
diff --git a/cmis.c b/cmis.c
1f2507
index 1a91e798e4b8..499355d0e024 100644
1f2507
--- a/cmis.c
1f2507
+++ b/cmis.c
1f2507
@@ -307,6 +307,8 @@ static void cmis_show_link_len(const __u8 *id)
1f2507
  */
1f2507
 static void cmis_show_vendor_info(const __u8 *id)
1f2507
 {
1f2507
+	const char *clei = (const char *)(id + CMIS_CLEI_START_OFFSET);
1f2507
+
1f2507
 	sff_show_ascii(id, CMIS_VENDOR_NAME_START_OFFSET,
1f2507
 		       CMIS_VENDOR_NAME_END_OFFSET, "Vendor name");
1f2507
 	cmis_show_oui(id);
1f2507
@@ -319,9 +321,9 @@ static void cmis_show_vendor_info(const __u8 *id)
1f2507
 	sff_show_ascii(id, CMIS_DATE_YEAR_OFFSET,
1f2507
 		       CMIS_DATE_VENDOR_LOT_OFFSET + 1, "Date code");
1f2507
 
1f2507
-	if (id[CMIS_CLEI_PRESENT_BYTE] & CMIS_CLEI_PRESENT_MASK)
1f2507
-		sff_show_ascii(id, CMIS_CLEI_START_OFFSET,
1f2507
-			       CMIS_CLEI_END_OFFSET, "CLEI code");
1f2507
+	if (*clei && strncmp(clei, CMIS_CLEI_BLANK, CMIS_CLEI_LEN))
1f2507
+		sff_show_ascii(id, CMIS_CLEI_START_OFFSET, CMIS_CLEI_END_OFFSET,
1f2507
+			       "CLEI code");
1f2507
 }
1f2507
 
1f2507
 void qsfp_dd_show_all(const __u8 *id)
1f2507
diff --git a/cmis.h b/cmis.h
1f2507
index 78ee1495bc33..cfac08f42904 100644
1f2507
--- a/cmis.h
1f2507
+++ b/cmis.h
1f2507
@@ -34,10 +34,10 @@
1f2507
 #define CMIS_DATE_VENDOR_LOT_OFFSET		0xBC
1f2507
 
1f2507
 /* CLEI Code (Page 0) */
1f2507
-#define CMIS_CLEI_PRESENT_BYTE			0x02
1f2507
-#define CMIS_CLEI_PRESENT_MASK			0x20
1f2507
 #define CMIS_CLEI_START_OFFSET			0xBE
1f2507
 #define CMIS_CLEI_END_OFFSET			0xC7
1f2507
+#define CMIS_CLEI_BLANK				"          "
1f2507
+#define CMIS_CLEI_LEN				0x0A
1f2507
 
1f2507
 /* Cable assembly length */
1f2507
 #define CMIS_CBL_ASM_LEN_OFFSET			0xCA
1f2507
-- 
1f2507
2.35.1
1f2507