89ea86
From 6e6aed12948d2d191660252a4be9bb33dc283bed Mon Sep 17 00:00:00 2001
89ea86
From: Ido Schimmel <idosch@nvidia.com>
89ea86
Date: Tue, 12 Oct 2021 16:25:14 +0300
89ea86
Subject: [PATCH 15/35] cmis: Use memory map during parsing
89ea86
89ea86
Instead of passing one large buffer to the individual parsing functions,
89ea86
use the memory map structure from the previous patch.
89ea86
89ea86
This has the added benefit of checking which optional pages are actually
89ea86
available and it will also allow us to consolidate the IOCTL and netlink
89ea86
parsing code paths.
89ea86
89ea86
Tested by making sure that the only differences in output in both the
89ea86
IOCTL and netlink paths before and after the patch are in a few
89ea86
registers in Page 01h that were previously parsed from Page 00h.
89ea86
89ea86
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
89ea86
---
89ea86
 cmis.c | 175 +++++++++++++++++++++++++++++----------------------------
89ea86
 cmis.h |   1 -
89ea86
 2 files changed, 88 insertions(+), 88 deletions(-)
89ea86
89ea86
diff --git a/cmis.c b/cmis.c
89ea86
index 8a6788416a00..2e01446b2315 100644
89ea86
--- a/cmis.c
89ea86
+++ b/cmis.c
89ea86
@@ -22,19 +22,19 @@ struct cmis_memory_map {
89ea86
 
89ea86
 #define CMIS_PAGE_SIZE		0x80
89ea86
 
89ea86
-static void cmis_show_identifier(const __u8 *id)
89ea86
+static void cmis_show_identifier(const struct cmis_memory_map *map)
89ea86
 {
89ea86
-	sff8024_show_identifier(id, CMIS_ID_OFFSET);
89ea86
+	sff8024_show_identifier(map->lower_memory, CMIS_ID_OFFSET);
89ea86
 }
89ea86
 
89ea86
-static void cmis_show_connector(const __u8 *id)
89ea86
+static void cmis_show_connector(const struct cmis_memory_map *map)
89ea86
 {
89ea86
-	sff8024_show_connector(id, CMIS_CTOR_OFFSET);
89ea86
+	sff8024_show_connector(map->page_00h, CMIS_CTOR_OFFSET);
89ea86
 }
89ea86
 
89ea86
-static void cmis_show_oui(const __u8 *id)
89ea86
+static void cmis_show_oui(const struct cmis_memory_map *map)
89ea86
 {
89ea86
-	sff8024_show_oui(id, CMIS_VENDOR_OUI_OFFSET);
89ea86
+	sff8024_show_oui(map->page_00h, CMIS_VENDOR_OUI_OFFSET);
89ea86
 }
89ea86
 
89ea86
 /**
89ea86
@@ -42,9 +42,9 @@ static void cmis_show_oui(const __u8 *id)
89ea86
  * [1] CMIS Rev. 3, pag. 45, section 1.7.2.1, Table 18
89ea86
  * [2] CMIS Rev. 4, pag. 81, section 8.2.1, Table 8-2
89ea86
  */
89ea86
-static void cmis_show_rev_compliance(const __u8 *id)
89ea86
+static void cmis_show_rev_compliance(const struct cmis_memory_map *map)
89ea86
 {
89ea86
-	__u8 rev = id[CMIS_REV_COMPLIANCE_OFFSET];
89ea86
+	__u8 rev = map->lower_memory[CMIS_REV_COMPLIANCE_OFFSET];
89ea86
 	int major = (rev >> 4) & 0x0F;
89ea86
 	int minor = rev & 0x0F;
89ea86
 
89ea86
@@ -58,17 +58,17 @@ static void cmis_show_rev_compliance(const __u8 *id)
89ea86
  * [2] CMIS Rev. 4, pag. 94, section 8.3.9, Table 8-18
89ea86
  * [3] QSFP-DD Hardware Rev 5.0, pag. 22, section 4.2.1
89ea86
  */
89ea86
-static void cmis_show_power_info(const __u8 *id)
89ea86
+static void cmis_show_power_info(const struct cmis_memory_map *map)
89ea86
 {
89ea86
 	float max_power = 0.0f;
89ea86
 	__u8 base_power = 0;
89ea86
 	__u8 power_class;
89ea86
 
89ea86
 	/* Get the power class (first 3 most significat bytes) */
89ea86
-	power_class = (id[CMIS_PWR_CLASS_OFFSET] >> 5) & 0x07;
89ea86
+	power_class = (map->page_00h[CMIS_PWR_CLASS_OFFSET] >> 5) & 0x07;
89ea86
 
89ea86
 	/* Get the base power in multiples of 0.25W */
89ea86
-	base_power = id[CMIS_PWR_MAX_POWER_OFFSET];
89ea86
+	base_power = map->page_00h[CMIS_PWR_MAX_POWER_OFFSET];
89ea86
 	max_power = base_power * 0.25f;
89ea86
 
89ea86
 	printf("\t%-41s : %d\n", "Power class", power_class + 1);
89ea86
@@ -83,20 +83,20 @@ static void cmis_show_power_info(const __u8 *id)
89ea86
  * [1] CMIS Rev. 3, pag. 59, section 1.7.3.10, Table 31
89ea86
  * [2] CMIS Rev. 4, pag. 94, section 8.3.10, Table 8-19
89ea86
  */
89ea86
-static void cmis_show_cbl_asm_len(const __u8 *id)
89ea86
+static void cmis_show_cbl_asm_len(const struct cmis_memory_map *map)
89ea86
 {
89ea86
 	static const char *fn = "Cable assembly length";
89ea86
 	float mul = 1.0f;
89ea86
 	float val = 0.0f;
89ea86
 
89ea86
 	/* Check if max length */
89ea86
-	if (id[CMIS_CBL_ASM_LEN_OFFSET] == CMIS_6300M_MAX_LEN) {
89ea86
+	if (map->page_00h[CMIS_CBL_ASM_LEN_OFFSET] == CMIS_6300M_MAX_LEN) {
89ea86
 		printf("\t%-41s : > 6.3km\n", fn);
89ea86
 		return;
89ea86
 	}
89ea86
 
89ea86
 	/* Get the multiplier from the first two bits */
89ea86
-	switch (id[CMIS_CBL_ASM_LEN_OFFSET] & CMIS_LEN_MUL_MASK) {
89ea86
+	switch (map->page_00h[CMIS_CBL_ASM_LEN_OFFSET] & CMIS_LEN_MUL_MASK) {
89ea86
 	case CMIS_MULTIPLIER_00:
89ea86
 		mul = 0.1f;
89ea86
 		break;
89ea86
@@ -114,7 +114,7 @@ static void cmis_show_cbl_asm_len(const __u8 *id)
89ea86
 	}
89ea86
 
89ea86
 	/* Get base value from first 6 bits and multiply by mul */
89ea86
-	val = (id[CMIS_CBL_ASM_LEN_OFFSET] & CMIS_LEN_VAL_MASK);
89ea86
+	val = (map->page_00h[CMIS_CBL_ASM_LEN_OFFSET] & CMIS_LEN_VAL_MASK);
89ea86
 	val = (float)val * mul;
89ea86
 	printf("\t%-41s : %0.2fm\n", fn, val);
89ea86
 }
89ea86
@@ -126,14 +126,17 @@ static void cmis_show_cbl_asm_len(const __u8 *id)
89ea86
  * [1] CMIS Rev. 3, pag. 63, section 1.7.4.2, Table 39
89ea86
  * [2] CMIS Rev. 4, pag. 99, section 8.4.2, Table 8-27
89ea86
  */
89ea86
-static void cmis_print_smf_cbl_len(const __u8 *id)
89ea86
+static void cmis_print_smf_cbl_len(const struct cmis_memory_map *map)
89ea86
 {
89ea86
 	static const char *fn = "Length (SMF)";
89ea86
 	float mul = 1.0f;
89ea86
 	float val = 0.0f;
89ea86
 
89ea86
+	if (!map->page_01h)
89ea86
+		return;
89ea86
+
89ea86
 	/* Get the multiplier from the first two bits */
89ea86
-	switch (id[CMIS_SMF_LEN_OFFSET] & CMIS_LEN_MUL_MASK) {
89ea86
+	switch (map->page_01h[CMIS_SMF_LEN_OFFSET] & CMIS_LEN_MUL_MASK) {
89ea86
 	case CMIS_MULTIPLIER_00:
89ea86
 		mul = 0.1f;
89ea86
 		break;
89ea86
@@ -145,7 +148,7 @@ static void cmis_print_smf_cbl_len(const __u8 *id)
89ea86
 	}
89ea86
 
89ea86
 	/* Get base value from first 6 bits and multiply by mul */
89ea86
-	val = (id[CMIS_SMF_LEN_OFFSET] & CMIS_LEN_VAL_MASK);
89ea86
+	val = (map->page_01h[CMIS_SMF_LEN_OFFSET] & CMIS_LEN_VAL_MASK);
89ea86
 	val = (float)val * mul;
89ea86
 	printf("\t%-41s : %0.2fkm\n", fn, val);
89ea86
 }
89ea86
@@ -155,21 +158,24 @@ static void cmis_print_smf_cbl_len(const __u8 *id)
89ea86
  * [1] CMIS Rev. 3, pag. 71, section 1.7.4.10, Table 46
89ea86
  * [2] CMIS Rev. 4, pag. 105, section 8.4.10, Table 8-34
89ea86
  */
89ea86
-static void cmis_show_sig_integrity(const __u8 *id)
89ea86
+static void cmis_show_sig_integrity(const struct cmis_memory_map *map)
89ea86
 {
89ea86
+	if (!map->page_01h)
89ea86
+		return;
89ea86
+
89ea86
 	/* CDR Bypass control: 2nd bit from each byte */
89ea86
 	printf("\t%-41s : ", "Tx CDR bypass control");
89ea86
-	printf("%s\n", YESNO(id[CMIS_SIG_INTEG_TX_OFFSET] & 0x02));
89ea86
+	printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_TX_OFFSET] & 0x02));
89ea86
 
89ea86
 	printf("\t%-41s : ", "Rx CDR bypass control");
89ea86
-	printf("%s\n", YESNO(id[CMIS_SIG_INTEG_RX_OFFSET] & 0x02));
89ea86
+	printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_RX_OFFSET] & 0x02));
89ea86
 
89ea86
 	/* CDR Implementation: 1st bit from each byte */
89ea86
 	printf("\t%-41s : ", "Tx CDR");
89ea86
-	printf("%s\n", YESNO(id[CMIS_SIG_INTEG_TX_OFFSET] & 0x01));
89ea86
+	printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_TX_OFFSET] & 0x01));
89ea86
 
89ea86
 	printf("\t%-41s : ", "Rx CDR");
89ea86
-	printf("%s\n", YESNO(id[CMIS_SIG_INTEG_RX_OFFSET] & 0x01));
89ea86
+	printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_RX_OFFSET] & 0x01));
89ea86
 }
89ea86
 
89ea86
 /**
89ea86
@@ -182,14 +188,14 @@ static void cmis_show_sig_integrity(const __u8 *id)
89ea86
  * --> pag. 98, section 8.4, Table 8-25
89ea86
  * --> page 100, section 8.4.3, 8.4.4
89ea86
  */
89ea86
-static void cmis_show_mit_compliance(const __u8 *id)
89ea86
+static void cmis_show_mit_compliance(const struct cmis_memory_map *map)
89ea86
 {
89ea86
 	static const char *cc = " (Copper cable,";
89ea86
 
89ea86
 	printf("\t%-41s : 0x%02x", "Transmitter technology",
89ea86
-	       id[CMIS_MEDIA_INTF_TECH_OFFSET]);
89ea86
+	       map->page_00h[CMIS_MEDIA_INTF_TECH_OFFSET]);
89ea86
 
89ea86
-	switch (id[CMIS_MEDIA_INTF_TECH_OFFSET]) {
89ea86
+	switch (map->page_00h[CMIS_MEDIA_INTF_TECH_OFFSET]) {
89ea86
 	case CMIS_850_VCSEL:
89ea86
 		printf(" (850 nm VCSEL)\n");
89ea86
 		break;
89ea86
@@ -240,22 +246,22 @@ static void cmis_show_mit_compliance(const __u8 *id)
89ea86
 		break;
89ea86
 	}
89ea86
 
89ea86
-	if (id[CMIS_MEDIA_INTF_TECH_OFFSET] >= CMIS_COPPER_UNEQUAL) {
89ea86
+	if (map->page_00h[CMIS_MEDIA_INTF_TECH_OFFSET] >= CMIS_COPPER_UNEQUAL) {
89ea86
 		printf("\t%-41s : %udb\n", "Attenuation at 5GHz",
89ea86
-		       id[CMIS_COPPER_ATT_5GHZ]);
89ea86
+		       map->page_00h[CMIS_COPPER_ATT_5GHZ]);
89ea86
 		printf("\t%-41s : %udb\n", "Attenuation at 7GHz",
89ea86
-		       id[CMIS_COPPER_ATT_7GHZ]);
89ea86
+		       map->page_00h[CMIS_COPPER_ATT_7GHZ]);
89ea86
 		printf("\t%-41s : %udb\n", "Attenuation at 12.9GHz",
89ea86
-		       id[CMIS_COPPER_ATT_12P9GHZ]);
89ea86
+		       map->page_00h[CMIS_COPPER_ATT_12P9GHZ]);
89ea86
 		printf("\t%-41s : %udb\n", "Attenuation at 25.8GHz",
89ea86
-		       id[CMIS_COPPER_ATT_25P8GHZ]);
89ea86
-	} else {
89ea86
+		       map->page_00h[CMIS_COPPER_ATT_25P8GHZ]);
89ea86
+	} else if (map->page_01h) {
89ea86
 		printf("\t%-41s : %.3lfnm\n", "Laser wavelength",
89ea86
-		       (((id[CMIS_NOM_WAVELENGTH_MSB] << 8) |
89ea86
-				id[CMIS_NOM_WAVELENGTH_LSB]) * 0.05));
89ea86
+		       (((map->page_01h[CMIS_NOM_WAVELENGTH_MSB] << 8) |
89ea86
+			  map->page_01h[CMIS_NOM_WAVELENGTH_LSB]) * 0.05));
89ea86
 		printf("\t%-41s : %.3lfnm\n", "Laser wavelength tolerance",
89ea86
-		       (((id[CMIS_WAVELENGTH_TOL_MSB] << 8) |
89ea86
-		       id[CMIS_WAVELENGTH_TOL_LSB]) * 0.005));
89ea86
+		       (((map->page_01h[CMIS_WAVELENGTH_TOL_MSB] << 8) |
89ea86
+			  map->page_01h[CMIS_WAVELENGTH_TOL_LSB]) * 0.005));
89ea86
 	}
89ea86
 }
89ea86
 
89ea86
@@ -275,28 +281,16 @@ static void cmis_show_mit_compliance(const __u8 *id)
89ea86
  * [2] CMIS Rev. 4:
89ea86
  * --> pag. 84, section 8.2.4, Table 8-6
89ea86
  */
89ea86
-static void cmis_show_mod_lvl_monitors(const __u8 *id)
89ea86
+static void cmis_show_mod_lvl_monitors(const struct cmis_memory_map *map)
89ea86
 {
89ea86
+	const __u8 *id = map->lower_memory;
89ea86
+
89ea86
 	PRINT_TEMP("Module temperature",
89ea86
 		   OFFSET_TO_TEMP(CMIS_CURR_TEMP_OFFSET));
89ea86
 	PRINT_VCC("Module voltage",
89ea86
 		  OFFSET_TO_U16(CMIS_CURR_VCC_OFFSET));
89ea86
 }
89ea86
 
89ea86
-static void cmis_show_link_len_from_page(const __u8 *page_one_data)
89ea86
-{
89ea86
-	cmis_print_smf_cbl_len(page_one_data);
89ea86
-	sff_show_value_with_unit(page_one_data, CMIS_OM5_LEN_OFFSET,
89ea86
-				 "Length (OM5)", 2, "m");
89ea86
-	sff_show_value_with_unit(page_one_data, CMIS_OM4_LEN_OFFSET,
89ea86
-				 "Length (OM4)", 2, "m");
89ea86
-	sff_show_value_with_unit(page_one_data, CMIS_OM3_LEN_OFFSET,
89ea86
-				 "Length (OM3 50/125um)", 2, "m");
89ea86
-	sff_show_value_with_unit(page_one_data, CMIS_OM2_LEN_OFFSET,
89ea86
-				 "Length (OM2 50/125um)", 1, "m");
89ea86
-}
89ea86
-
89ea86
-
89ea86
 /**
89ea86
  * Print relevant info about the maximum supported fiber media length
89ea86
  * for each type of fiber media at the maximum module-supported bit rate.
89ea86
@@ -304,9 +298,19 @@ static void cmis_show_link_len_from_page(const __u8 *page_one_data)
89ea86
  * [1] CMIS Rev. 3, page 64, section 1.7.4.2, Table 39
89ea86
  * [2] CMIS Rev. 4, page 99, section 8.4.2, Table 8-27
89ea86
  */
89ea86
-static void cmis_show_link_len(const __u8 *id)
89ea86
+static void cmis_show_link_len(const struct cmis_memory_map *map)
89ea86
 {
89ea86
-	cmis_show_link_len_from_page(id);
89ea86
+	cmis_print_smf_cbl_len(map);
89ea86
+	if (!map->page_01h)
89ea86
+		return;
89ea86
+	sff_show_value_with_unit(map->page_01h, CMIS_OM5_LEN_OFFSET,
89ea86
+				 "Length (OM5)", 2, "m");
89ea86
+	sff_show_value_with_unit(map->page_01h, CMIS_OM4_LEN_OFFSET,
89ea86
+				 "Length (OM4)", 2, "m");
89ea86
+	sff_show_value_with_unit(map->page_01h, CMIS_OM3_LEN_OFFSET,
89ea86
+				 "Length (OM3 50/125um)", 2, "m");
89ea86
+	sff_show_value_with_unit(map->page_01h, CMIS_OM2_LEN_OFFSET,
89ea86
+				 "Length (OM2 50/125um)", 1, "m");
89ea86
 }
89ea86
 
89ea86
 /**
89ea86
@@ -314,25 +318,26 @@ static void cmis_show_link_len(const __u8 *id)
89ea86
  * [1] CMIS Rev. 3, page 56, section 1.7.3, Table 27
89ea86
  * [2] CMIS Rev. 4, page 91, section 8.2, Table 8-15
89ea86
  */
89ea86
-static void cmis_show_vendor_info(const __u8 *id)
89ea86
+static void cmis_show_vendor_info(const struct cmis_memory_map *map)
89ea86
 {
89ea86
-	const char *clei = (const char *)(id + CMIS_CLEI_START_OFFSET);
89ea86
+	const char *clei;
89ea86
 
89ea86
-	sff_show_ascii(id, CMIS_VENDOR_NAME_START_OFFSET,
89ea86
+	sff_show_ascii(map->page_00h, CMIS_VENDOR_NAME_START_OFFSET,
89ea86
 		       CMIS_VENDOR_NAME_END_OFFSET, "Vendor name");
89ea86
-	cmis_show_oui(id);
89ea86
-	sff_show_ascii(id, CMIS_VENDOR_PN_START_OFFSET,
89ea86
+	cmis_show_oui(map);
89ea86
+	sff_show_ascii(map->page_00h, CMIS_VENDOR_PN_START_OFFSET,
89ea86
 		       CMIS_VENDOR_PN_END_OFFSET, "Vendor PN");
89ea86
-	sff_show_ascii(id, CMIS_VENDOR_REV_START_OFFSET,
89ea86
+	sff_show_ascii(map->page_00h, CMIS_VENDOR_REV_START_OFFSET,
89ea86
 		       CMIS_VENDOR_REV_END_OFFSET, "Vendor rev");
89ea86
-	sff_show_ascii(id, CMIS_VENDOR_SN_START_OFFSET,
89ea86
+	sff_show_ascii(map->page_00h, CMIS_VENDOR_SN_START_OFFSET,
89ea86
 		       CMIS_VENDOR_SN_END_OFFSET, "Vendor SN");
89ea86
-	sff_show_ascii(id, CMIS_DATE_YEAR_OFFSET,
89ea86
+	sff_show_ascii(map->page_00h, CMIS_DATE_YEAR_OFFSET,
89ea86
 		       CMIS_DATE_VENDOR_LOT_OFFSET + 1, "Date code");
89ea86
 
89ea86
+	clei = (const char *)(map->page_00h + CMIS_CLEI_START_OFFSET);
89ea86
 	if (*clei && strncmp(clei, CMIS_CLEI_BLANK, CMIS_CLEI_LEN))
89ea86
-		sff_show_ascii(id, CMIS_CLEI_START_OFFSET, CMIS_CLEI_END_OFFSET,
89ea86
-			       "CLEI code");
89ea86
+		sff_show_ascii(map->page_00h, CMIS_CLEI_START_OFFSET,
89ea86
+			       CMIS_CLEI_END_OFFSET, "CLEI code");
89ea86
 }
89ea86
 
89ea86
 static void cmis_memory_map_init_buf(struct cmis_memory_map *map,
89ea86
@@ -363,16 +368,16 @@ void cmis_show_all_ioctl(const __u8 *id)
89ea86
 
89ea86
 	cmis_memory_map_init_buf(&map, id);
89ea86
 
89ea86
-	cmis_show_identifier(id);
89ea86
-	cmis_show_power_info(id);
89ea86
-	cmis_show_connector(id);
89ea86
-	cmis_show_cbl_asm_len(id);
89ea86
-	cmis_show_sig_integrity(id);
89ea86
-	cmis_show_mit_compliance(id);
89ea86
-	cmis_show_mod_lvl_monitors(id);
89ea86
-	cmis_show_link_len(id);
89ea86
-	cmis_show_vendor_info(id);
89ea86
-	cmis_show_rev_compliance(id);
89ea86
+	cmis_show_identifier(&map);
89ea86
+	cmis_show_power_info(&map);
89ea86
+	cmis_show_connector(&map);
89ea86
+	cmis_show_cbl_asm_len(&map);
89ea86
+	cmis_show_sig_integrity(&map);
89ea86
+	cmis_show_mit_compliance(&map);
89ea86
+	cmis_show_mod_lvl_monitors(&map);
89ea86
+	cmis_show_link_len(&map);
89ea86
+	cmis_show_vendor_info(&map);
89ea86
+	cmis_show_rev_compliance(&map);
89ea86
 }
89ea86
 
89ea86
 static void
89ea86
@@ -403,22 +408,18 @@ cmis_memory_map_init_pages(struct cmis_memory_map *map,
89ea86
 void cmis_show_all_nl(const struct ethtool_module_eeprom *page_zero,
89ea86
 		      const struct ethtool_module_eeprom *page_one)
89ea86
 {
89ea86
-	const __u8 *page_zero_data = page_zero->data;
89ea86
 	struct cmis_memory_map map = {};
89ea86
 
89ea86
 	cmis_memory_map_init_pages(&map, page_zero, page_one);
89ea86
 
89ea86
-	cmis_show_identifier(page_zero_data);
89ea86
-	cmis_show_power_info(page_zero_data);
89ea86
-	cmis_show_connector(page_zero_data);
89ea86
-	cmis_show_cbl_asm_len(page_zero_data);
89ea86
-	cmis_show_sig_integrity(page_zero_data);
89ea86
-	cmis_show_mit_compliance(page_zero_data);
89ea86
-	cmis_show_mod_lvl_monitors(page_zero_data);
89ea86
-
89ea86
-	if (page_one)
89ea86
-		cmis_show_link_len_from_page(page_one->data - 0x80);
89ea86
-
89ea86
-	cmis_show_vendor_info(page_zero_data);
89ea86
-	cmis_show_rev_compliance(page_zero_data);
89ea86
+	cmis_show_identifier(&map);
89ea86
+	cmis_show_power_info(&map);
89ea86
+	cmis_show_connector(&map);
89ea86
+	cmis_show_cbl_asm_len(&map);
89ea86
+	cmis_show_sig_integrity(&map);
89ea86
+	cmis_show_mit_compliance(&map);
89ea86
+	cmis_show_mod_lvl_monitors(&map);
89ea86
+	cmis_show_link_len(&map);
89ea86
+	cmis_show_vendor_info(&map);
89ea86
+	cmis_show_rev_compliance(&map);
89ea86
 }
89ea86
diff --git a/cmis.h b/cmis.h
89ea86
index 53cbb5f57127..c878e3bc5afd 100644
89ea86
--- a/cmis.h
89ea86
+++ b/cmis.h
89ea86
@@ -100,7 +100,6 @@
89ea86
  * that are unique to active modules and cable assemblies.
89ea86
  * GlobalOffset = 2 * 0x80 + LocalOffset
89ea86
  */
89ea86
-#define PAG01H_UPPER_OFFSET			(0x02 * 0x80)
89ea86
 
89ea86
 /* Supported Link Length (Page 1) */
89ea86
 #define CMIS_SMF_LEN_OFFSET			0x84
89ea86
-- 
89ea86
2.35.1
89ea86