All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robin Zhang <robinx.zhang@intel.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net, andrew.rybchenko@oktetlabs.ru,
	kevinx.liu@intel.com, Robin Zhang <robinx.zhang@intel.com>
Subject: [PATCH v9 2/5] ethdev: add common code for different SFF specs
Date: Thu, 26 May 2022 07:32:12 +0000	[thread overview]
Message-ID: <20220526073215.428410-3-robinx.zhang@intel.com> (raw)
In-Reply-To: <20220526073215.428410-1-robinx.zhang@intel.com>

Add support for SFF-8024 Rev 4.0 of pluggable I/O configuration
and some common utilities for SFF-8436/8636 and SFF-8472/8079.

Signed-off-by: Robin Zhang <robinx.zhang@intel.com>
Signed-off-by: Kevin Liu <kevinx.liu@intel.com>
---
 lib/ethdev/meson.build  |   1 +
 lib/ethdev/sff_common.c | 319 ++++++++++++++++++++++++++++++++++++++++
 lib/ethdev/sff_common.h | 173 ++++++++++++++++++++++
 3 files changed, 493 insertions(+)
 create mode 100644 lib/ethdev/sff_common.c
 create mode 100644 lib/ethdev/sff_common.h

diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build
index 6a14d0b402..4ec21789f5 100644
--- a/lib/ethdev/meson.build
+++ b/lib/ethdev/meson.build
@@ -12,6 +12,7 @@ sources = files(
         'rte_mtr.c',
         'rte_tm.c',
         'sff_telemetry.c',
+        'sff_common.c',
 )
 
 headers = files(
diff --git a/lib/ethdev/sff_common.c b/lib/ethdev/sff_common.c
new file mode 100644
index 0000000000..bd425274e3
--- /dev/null
+++ b/lib/ethdev/sff_common.c
@@ -0,0 +1,319 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2022 Intel Corporation
+ * Implements SFF-8024 Rev 4.0 of pluggable I/O configuration and some
+ * common utilities for SFF-8436/8636 and SFF-8472/8079
+ */
+
+#include <math.h>
+
+#include "sff_common.h"
+
+double sff_convert_mw_to_dbm(double mw)
+{
+	return (10. * log10(mw / 1000.)) + 30.;
+}
+
+void sff_show_value_with_unit(const uint8_t *data, unsigned int reg,
+			      const char *name, unsigned int mult,
+			      const char *unit, struct rte_tel_data *d)
+{
+	unsigned int val = data[reg];
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	snprintf(val_string, sizeof(val_string), "%u%s", val * mult, unit);
+	ssf_add_dict_string(d, name, val_string);
+}
+
+void sff_show_ascii(const uint8_t *data, unsigned int first_reg,
+		    unsigned int last_reg, const char *name, struct rte_tel_data *d)
+{
+	unsigned int reg, val;
+	char tmp[3];
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	memset(val_string, 0, sizeof(val_string));
+
+	while (first_reg <= last_reg && data[last_reg] == ' ')
+		last_reg--;
+	for (reg = first_reg; reg <= last_reg; reg++) {
+		val = data[reg];
+		if ((val >= 32) && (val <= 126)) {
+			snprintf(tmp, sizeof(tmp), "%c", val);
+			strlcat(val_string, tmp, sizeof(val_string));
+		} else {
+			strlcat(val_string, "_", sizeof(val_string));
+		}
+	}
+	ssf_add_dict_string(d, name, val_string);
+}
+
+void sff_8024_show_oui(const uint8_t *data, int id_offset, struct rte_tel_data *d)
+{
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	snprintf(val_string, sizeof(val_string), "%02x:%02x:%02x",
+		data[id_offset], data[(id_offset) + 1], data[(id_offset) + 2]);
+	ssf_add_dict_string(d, "Vendor OUI", val_string);
+}
+
+void sff_8024_show_identifier(const uint8_t *data, int id_offset, struct rte_tel_data *d)
+{
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	snprintf(val_string, sizeof(val_string), "0x%02x", data[id_offset]);
+
+	switch (data[id_offset]) {
+	case SFF_8024_ID_UNKNOWN:
+		strlcat(val_string, " (no module present, unknown, or unspecified)",
+			sizeof(val_string));
+		break;
+	case SFF_8024_ID_GBIC:
+		strlcat(val_string, " (GBIC)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_SOLDERED_MODULE:
+		strlcat(val_string, " (module soldered to motherboard)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_SFP:
+		strlcat(val_string, " (SFP)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_300_PIN_XBI:
+		strlcat(val_string, " (300 pin XBI)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_XENPAK:
+		strlcat(val_string, " (XENPAK)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_XFP:
+		strlcat(val_string, " (XFP)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_XFF:
+		strlcat(val_string, " (XFF)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_XFP_E:
+		strlcat(val_string, " (XFP-E)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_XPAK:
+		strlcat(val_string, " (XPAK)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_X2:
+		strlcat(val_string, " (X2)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_DWDM_SFP:
+		strlcat(val_string, " (DWDM-SFP)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_QSFP:
+		strlcat(val_string, " (QSFP)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_QSFP_PLUS:
+		strlcat(val_string, " (QSFP+)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_CXP:
+		strlcat(val_string, " (CXP)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_HD4X:
+		strlcat(val_string, " (Shielded Mini Multilane HD 4X)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_HD8X:
+		strlcat(val_string, " (Shielded Mini Multilane HD 8X)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_QSFP28:
+		strlcat(val_string, " (QSFP28)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_CXP2:
+		strlcat(val_string, " (CXP2/CXP28)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_CDFP:
+		strlcat(val_string, " (CDFP Style 1/Style 2)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_HD4X_FANOUT:
+		strlcat(val_string, " (Shielded Mini Multilane HD 4X Fanout Cable)",
+			sizeof(val_string));
+		break;
+	case SFF_8024_ID_HD8X_FANOUT:
+		strlcat(val_string, " (Shielded Mini Multilane HD 8X Fanout Cable)",
+			sizeof(val_string));
+		break;
+	case SFF_8024_ID_CDFP_S3:
+		strlcat(val_string, " (CDFP Style 3)", sizeof(val_string));
+		break;
+	case SFF_8024_ID_MICRO_QSFP:
+		strlcat(val_string, " (microQSFP)", sizeof(val_string));
+		break;
+	default:
+		strlcat(val_string, " (reserved or unknown)", sizeof(val_string));
+		break;
+	}
+	ssf_add_dict_string(d, "Identifier", val_string);
+}
+
+void sff_8024_show_connector(const uint8_t *data, int ctor_offset, struct rte_tel_data *d)
+{
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	snprintf(val_string, sizeof(val_string), "0x%02x", data[ctor_offset]);
+
+	switch (data[ctor_offset]) {
+	case  SFF_8024_CTOR_UNKNOWN:
+		strlcat(val_string, " (unknown or unspecified)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_SC:
+		strlcat(val_string, " (SC)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_FC_STYLE_1:
+		strlcat(val_string, " (Fibre Channel Style 1 copper)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_FC_STYLE_2:
+		strlcat(val_string, " (Fibre Channel Style 2 copper)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_BNC_TNC:
+		strlcat(val_string, " (BNC/TNC)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_FC_COAX:
+		strlcat(val_string, " (Fibre Channel coaxial headers)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_FIBER_JACK:
+		strlcat(val_string, " (FibreJack)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_LC:
+		strlcat(val_string, " (LC)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_MT_RJ:
+		strlcat(val_string, " (MT-RJ)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_MU:
+		strlcat(val_string, " (MU)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_SG:
+		strlcat(val_string, " (SG)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_OPT_PT:
+		strlcat(val_string, " (Optical pigtail)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_MPO:
+		strlcat(val_string, " (MPO Parallel Optic)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_MPO_2:
+		strlcat(val_string, " (MPO Parallel Optic - 2x16)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_HSDC_II:
+		strlcat(val_string, " (HSSDC II)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_COPPER_PT:
+		strlcat(val_string, " (Copper pigtail)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_RJ45:
+		strlcat(val_string, " (RJ45)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_NO_SEPARABLE:
+		strlcat(val_string, " (No separable connector)", sizeof(val_string));
+		break;
+	case SFF_8024_CTOR_MXC_2x16:
+		strlcat(val_string, " (MXC 2x16)", sizeof(val_string));
+		break;
+	default:
+		strlcat(val_string, " (reserved or unknown)", sizeof(val_string));
+		break;
+	}
+	ssf_add_dict_string(d, "Connector", val_string);
+}
+
+void sff_8024_show_encoding(const uint8_t *data, int encoding_offset,
+			    int sff_type, struct rte_tel_data *d)
+{
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	snprintf(val_string, sizeof(val_string), "0x%02x", data[encoding_offset]);
+
+	switch (data[encoding_offset]) {
+	case SFF_8024_ENCODING_UNSPEC:
+		strlcat(val_string, " (unspecified)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_8B10B:
+		strlcat(val_string, " (8B/10B)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_4B5B:
+		strlcat(val_string, " (4B/5B)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_NRZ:
+		strlcat(val_string, " (NRZ)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_4h:
+		if (sff_type == RTE_ETH_MODULE_SFF_8472)
+			strlcat(val_string, " (Manchester)", sizeof(val_string));
+		else if (sff_type == RTE_ETH_MODULE_SFF_8636)
+			strlcat(val_string, " (SONET Scrambled)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_5h:
+		if (sff_type == RTE_ETH_MODULE_SFF_8472)
+			strlcat(val_string, " (SONET Scrambled)", sizeof(val_string));
+		else if (sff_type == RTE_ETH_MODULE_SFF_8636)
+			strlcat(val_string, " (64B/66B)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_6h:
+		if (sff_type == RTE_ETH_MODULE_SFF_8472)
+			strlcat(val_string, " (64B/66B)", sizeof(val_string));
+		else if (sff_type == RTE_ETH_MODULE_SFF_8636)
+			strlcat(val_string, " (Manchester)", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_256B:
+		strlcat(val_string,
+		       " ((256B/257B (transcoded FEC-enabled data))", sizeof(val_string));
+		break;
+	case SFF_8024_ENCODING_PAM4:
+		strlcat(val_string, " (PAM4)", sizeof(val_string));
+		break;
+	default:
+		strlcat(val_string, " (reserved or unknown)", sizeof(val_string));
+		break;
+	}
+	ssf_add_dict_string(d, "Encoding", val_string);
+}
+
+void sff_show_thresholds(struct sff_diags sd, struct rte_tel_data *d)
+{
+	char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
+
+	SFF_SPRINT_BIAS(val_string, sd.bias_cur[SFF_HALRM]);
+	ssf_add_dict_string(d, "Laser bias current high alarm threshold", val_string);
+	SFF_SPRINT_BIAS(val_string, sd.bias_cur[SFF_LALRM]);
+	ssf_add_dict_string(d, "Laser bias current low alarm threshold", val_string);
+	SFF_SPRINT_BIAS(val_string, sd.bias_cur[SFF_HWARN]);
+	ssf_add_dict_string(d, "Laser bias current high warning threshold", val_string);
+	SFF_SPRINT_BIAS(val_string, sd.bias_cur[SFF_LWARN]);
+	ssf_add_dict_string(d, "Laser bias current low warning threshold", val_string);
+
+	SFF_SPRINT_xX_PWR(val_string, sd.tx_power[SFF_HALRM]);
+	ssf_add_dict_string(d, "Laser output power high alarm threshold", val_string);
+	SFF_SPRINT_xX_PWR(val_string, sd.tx_power[SFF_LALRM]);
+	ssf_add_dict_string(d, "Laser output power low alarm threshold", val_string);
+	SFF_SPRINT_xX_PWR(val_string, sd.tx_power[SFF_HWARN]);
+	ssf_add_dict_string(d, "Laser output power high warning threshold", val_string);
+	SFF_SPRINT_xX_PWR(val_string, sd.tx_power[SFF_LWARN]);
+	ssf_add_dict_string(d, "Laser output power low warning threshold", val_string);
+
+	SFF_SPRINT_TEMP(val_string, sd.sfp_temp[SFF_HALRM]);
+	ssf_add_dict_string(d, "Module temperature high alarm threshold", val_string);
+	SFF_SPRINT_TEMP(val_string, sd.sfp_temp[SFF_LALRM]);
+	ssf_add_dict_string(d, "Module temperature low alarm threshold", val_string);
+	SFF_SPRINT_TEMP(val_string, sd.sfp_temp[SFF_HWARN]);
+	ssf_add_dict_string(d, "Module temperature high warning threshold", val_string);
+	SFF_SPRINT_TEMP(val_string, sd.sfp_temp[SFF_LWARN]);
+	ssf_add_dict_string(d, "Module temperature low warning threshold", val_string);
+
+	SFF_SPRINT_VCC(val_string, sd.sfp_voltage[SFF_HALRM]);
+	ssf_add_dict_string(d, "Module voltage high alarm threshold", val_string);
+	SFF_SPRINT_VCC(val_string, sd.sfp_voltage[SFF_LALRM]);
+	ssf_add_dict_string(d, "Module voltage low alarm threshold", val_string);
+	SFF_SPRINT_VCC(val_string, sd.sfp_voltage[SFF_HWARN]);
+	ssf_add_dict_string(d, "Module voltage high warning threshold", val_string);
+	SFF_SPRINT_VCC(val_string, sd.sfp_voltage[SFF_LWARN]);
+	ssf_add_dict_string(d, "Module voltage low alarm threshold", val_string);
+
+	SFF_SPRINT_xX_PWR(val_string, sd.rx_power[SFF_HALRM]);
+	ssf_add_dict_string(d, "Laser rx power high alarm threshold", val_string);
+	SFF_SPRINT_xX_PWR(val_string, sd.rx_power[SFF_LALRM]);
+	ssf_add_dict_string(d, "Laser rx power low alarm threshold", val_string);
+	SFF_SPRINT_xX_PWR(val_string, sd.rx_power[SFF_HWARN]);
+	ssf_add_dict_string(d, "Laser rx power high warning threshold", val_string);
+	SFF_SPRINT_xX_PWR(val_string, sd.rx_power[SFF_LWARN]);
+	ssf_add_dict_string(d, "Laser rx power low warning threshold", val_string);
+}
diff --git a/lib/ethdev/sff_common.h b/lib/ethdev/sff_common.h
new file mode 100644
index 0000000000..e44f3c7bf3
--- /dev/null
+++ b/lib/ethdev/sff_common.h
@@ -0,0 +1,173 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2022 Intel Corporation
+ *
+ * Implements SFF-8024 Rev 4.0 of pluggable I/O configuration and some
+ * common utilities for SFF-8436/8636 and SFF-8472/8079
+ *
+ */
+
+#ifndef _SFF_COMMON_H_
+#define _SFF_COMMON_H_
+
+#include <stdio.h>
+
+#include "rte_ethdev.h"
+#include "sff_telemetry.h"
+
+#define SFF_8024_ID_OFFSET			0x00
+#define SFF_8024_ID_UNKNOWN			0x00
+#define SFF_8024_ID_GBIC			0x01
+#define SFF_8024_ID_SOLDERED_MODULE		0x02
+#define SFF_8024_ID_SFP				0x03
+#define SFF_8024_ID_300_PIN_XBI			0x04
+#define SFF_8024_ID_XENPAK			0x05
+#define SFF_8024_ID_XFP				0x06
+#define SFF_8024_ID_XFF				0x07
+#define SFF_8024_ID_XFP_E			0x08
+#define SFF_8024_ID_XPAK			0x09
+#define SFF_8024_ID_X2				0x0A
+#define SFF_8024_ID_DWDM_SFP			0x0B
+#define SFF_8024_ID_QSFP			0x0C
+#define SFF_8024_ID_QSFP_PLUS			0x0D
+#define SFF_8024_ID_CXP				0x0E
+#define SFF_8024_ID_HD4X			0x0F
+#define SFF_8024_ID_HD8X			0x10
+#define SFF_8024_ID_QSFP28			0x11
+#define SFF_8024_ID_CXP2			0x12
+#define SFF_8024_ID_CDFP			0x13
+#define SFF_8024_ID_HD4X_FANOUT			0x14
+#define SFF_8024_ID_HD8X_FANOUT			0x15
+#define SFF_8024_ID_CDFP_S3			0x16
+#define SFF_8024_ID_MICRO_QSFP			0x17
+#define SFF_8024_ID_LAST			SFF_8024_ID_MICRO_QSFP
+#define SFF_8024_ID_UNALLOCATED_LAST		0x7F
+#define SFF_8024_ID_VENDOR_START		0x80
+#define SFF_8024_ID_VENDOR_LAST			0xFF
+
+#define SFF_8024_CTOR_UNKNOWN			0x00
+#define SFF_8024_CTOR_SC			0x01
+#define SFF_8024_CTOR_FC_STYLE_1		0x02
+#define SFF_8024_CTOR_FC_STYLE_2		0x03
+#define SFF_8024_CTOR_BNC_TNC			0x04
+#define SFF_8024_CTOR_FC_COAX			0x05
+#define SFF_8024_CTOR_FIBER_JACK		0x06
+#define SFF_8024_CTOR_LC			0x07
+#define SFF_8024_CTOR_MT_RJ			0x08
+#define SFF_8024_CTOR_MU			0x09
+#define SFF_8024_CTOR_SG			0x0A
+#define SFF_8024_CTOR_OPT_PT			0x0B
+#define SFF_8024_CTOR_MPO			0x0C
+#define SFF_8024_CTOR_MPO_2			0x0D
+/* 0E-1Fh --- Reserved */
+#define SFF_8024_CTOR_HSDC_II			0x20
+#define SFF_8024_CTOR_COPPER_PT			0x21
+#define SFF_8024_CTOR_RJ45			0x22
+#define SFF_8024_CTOR_NO_SEPARABLE		0x23
+#define SFF_8024_CTOR_MXC_2x16			0x24
+#define SFF_8024_CTOR_LAST			SFF_8024_CTOR_MXC_2x16
+#define SFF_8024_CTOR_UNALLOCATED_LAST		0x7F
+#define SFF_8024_CTOR_VENDOR_START		0x80
+#define SFF_8024_CTOR_VENDOR_LAST		0xFF
+
+/* ENCODING Values */
+#define SFF_8024_ENCODING_UNSPEC		0x00
+#define SFF_8024_ENCODING_8B10B			0x01
+#define SFF_8024_ENCODING_4B5B			0x02
+#define SFF_8024_ENCODING_NRZ			0x03
+/*
+ * Value: 04h
+ * SFF-8472      - Manchester
+ * SFF-8436/8636 - SONET Scrambled
+ */
+#define SFF_8024_ENCODING_4h			0x04
+/*
+ * Value: 05h
+ * SFF-8472      - SONET Scrambled
+ * SFF-8436/8636 - 64B/66B
+ */
+#define SFF_8024_ENCODING_5h			0x05
+/*
+ * Value: 06h
+ * SFF-8472      - 64B/66B
+ * SFF-8436/8636 - Manchester
+ */
+#define  SFF_8024_ENCODING_6h			0x06
+#define  SFF_8024_ENCODING_256B			0x07
+#define  SFF_8024_ENCODING_PAM4			0x08
+
+/* Most common case: 16-bit unsigned integer in a certain unit */
+#define SFF_OFFSET_TO_U16(offset) \
+		(data[offset] << 8 | data[(offset) + 1])
+
+#define SFF_SPRINT_xX_PWR(str, var) \
+		snprintf(str, sizeof(str), "%.4f mW / %.2f dBm", \
+			(double)((var) / 10000.), \
+			sff_convert_mw_to_dbm((double)((var) / 10000.)))
+
+#define SFF_SPRINT_BIAS(str, bias_cur) \
+		snprintf(str, sizeof(str), "%.3f mA", (double)(bias_cur / 500.))
+
+#define SFF_SPRINT_TEMP(str, temp) \
+		snprintf(str, sizeof(str), "%.2f degrees C / %.2f degrees F", \
+			(double)(temp / 256.), \
+			(double)(temp / 256. * 1.8 + 32.))
+
+#define SFF_SPRINT_VCC(str, sfp_voltage) \
+		snprintf(str, sizeof(str), "%.4f V", (double)(sfp_voltage / 10000.))
+
+/* Channel Monitoring Fields */
+struct sff_channel_diags {
+	uint16_t bias_cur;      /* Measured bias current in 2uA units */
+	uint16_t rx_power;      /* Measured RX Power */
+	uint16_t tx_power;      /* Measured TX Power */
+};
+
+/* Module Monitoring Fields */
+struct sff_diags {
+
+#define SFF_MAX_CHANNEL_NUM 4
+#define SFF_LWARN 0
+#define SFF_HWARN 1
+#define SFF_LALRM 2
+#define SFF_HALRM 3
+#define SFF_MCURR 4
+
+	/* Supports DOM */
+	uint8_t supports_dom;
+	/* Supports alarm/warning thold */
+	uint8_t supports_alarms;
+	/* RX Power: 0 = OMA, 1 = Average power */
+	uint8_t  rx_power_type;
+	/* TX Power: 0 = Not supported, 1 = Average power */
+	uint8_t  tx_power_type;
+
+	uint8_t calibrated_ext;    /* Is externally calibrated */
+	/* [5] tables are low/high warn, low/high alarm, current */
+	/* SFP voltage in 0.1mV units */
+	uint16_t sfp_voltage[5];
+	/* SFP Temp in 16-bit signed 1/256 Celsius */
+	int16_t sfp_temp[5];
+	/* Measured bias current in 2uA units */
+	uint16_t bias_cur[5];
+	/* Measured TX Power */
+	uint16_t tx_power[5];
+	/* Measured RX Power */
+	uint16_t rx_power[5];
+	struct sff_channel_diags scd[SFF_MAX_CHANNEL_NUM];
+};
+
+double sff_convert_mw_to_dbm(double mw);
+void sff_show_value_with_unit(const uint8_t *data, unsigned int reg,
+			      const char *name, unsigned int mult,
+			      const char *unit, struct rte_tel_data *d);
+void sff_show_ascii(const uint8_t *data, unsigned int first_reg,
+		    unsigned int last_reg, const char *name, struct rte_tel_data *d);
+void sff_show_thresholds(struct sff_diags sd, struct rte_tel_data *d);
+
+void sff_8024_show_oui(const uint8_t *data, int id_offset, struct rte_tel_data *d);
+void sff_8024_show_identifier(const uint8_t *data, int id_offset, struct rte_tel_data *d);
+void sff_8024_show_connector(const uint8_t *data, int ctor_offset, struct rte_tel_data *d);
+void sff_8024_show_encoding(const uint8_t *data, int encoding_offset,
+			    int sff_type, struct rte_tel_data *d);
+
+#endif /* _SFF_COMMON_H_ */
-- 
2.25.1


  parent reply	other threads:[~2022-05-26  7:39 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-15 10:18 [PATCH] app/testpmd: format dump information of module EEPROM Robin Zhang
2022-02-15 13:28 ` Ferruh Yigit
2022-02-15 15:07   ` Thomas Monjalon
2022-02-16  2:26     ` Zhang, RobinX
2022-02-16  8:03       ` David Marchand
2022-02-16  8:45         ` Thomas Monjalon
2022-02-16  9:30           ` Bruce Richardson
2022-02-16  9:41             ` David Marchand
2022-02-16 10:02               ` Bruce Richardson
2022-02-16 10:15                 ` David Marchand
2022-04-08 10:23 ` [PATCH v2] common/sff_module: add telemetry command to dump " Robin Zhang
2022-04-08 10:33   ` Bruce Richardson
2022-04-08 10:55     ` Zhang, RobinX
2022-04-08 11:00       ` Bruce Richardson
2022-04-08 11:20         ` Zhang, RobinX
2022-04-08 11:26           ` Bruce Richardson
2022-04-11  8:13             ` Zhang, RobinX
2022-04-11  9:13               ` Bruce Richardson
2022-04-13 12:13                 ` Thomas Monjalon
2022-04-14  7:41                   ` David Marchand
2022-04-20  7:00 ` [PATCH v3 0/5] add telemetry command for show " Robin Zhang
2022-04-20  7:00   ` [PATCH v3 1/5] ethdev: add telemetry command for " Robin Zhang
2022-04-20  9:16     ` Andrew Rybchenko
2022-04-20  7:00   ` [PATCH v3 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-04-20  7:00   ` [PATCH v3 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-04-20  7:00   ` [PATCH v3 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-04-20  7:00   ` [PATCH v3 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-04-20  8:49   ` [PATCH v3 0/5] add telemetry command for show module EEPROM Morten Brørup
2022-04-25  5:34 ` [PATCH v4 " Robin Zhang
2022-04-25  5:34   ` [PATCH v4 1/5] ethdev: add telemetry command for " Robin Zhang
2022-04-25  5:34   ` [PATCH v4 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-04-25  5:34   ` [PATCH v4 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-04-25  5:34   ` [PATCH v4 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-04-25  5:34   ` [PATCH v4 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-04-26  2:43 ` [PATCH v5 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-04-26  2:43   ` [PATCH v5 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-04 10:16     ` Andrew Rybchenko
2022-04-26  2:43   ` [PATCH v5 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-04-26  2:43   ` [PATCH v5 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-04-26  2:43   ` [PATCH v5 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-04-26  2:43   ` [PATCH v5 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-04  8:13   ` [PATCH v5 0/5] add telemetry command for show module EEPROM Andrew Rybchenko
2022-05-11  2:14   ` [PATCH v6 " Robin Zhang
2022-05-11  2:14     ` [PATCH v6 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-11  2:14     ` [PATCH v6 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-05-11  2:14     ` [PATCH v6 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-05-11  2:14     ` [PATCH v6 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-05-19  8:33       ` Andrew Rybchenko
2022-05-11  2:14     ` [PATCH v6 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-24  6:24     ` [PATCH v7 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-05-24  6:24       ` [PATCH v7 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-24  6:24       ` [PATCH v7 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-05-24  6:24       ` [PATCH v7 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-05-24  6:24       ` [PATCH v7 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-05-24  6:24       ` [PATCH v7 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-24  9:03         ` David Marchand
2022-05-25  2:43           ` Zhang, RobinX
2022-05-25  3:14       ` [PATCH v8 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-05-25  3:14         ` [PATCH v8 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-25  9:24           ` Andrew Rybchenko
2022-05-25  3:14         ` [PATCH v8 2/5] ethdev: common utilities for different SFF specs Robin Zhang
2022-05-25  8:51           ` Andrew Rybchenko
2022-05-25  9:40           ` Andrew Rybchenko
2022-05-25  3:14         ` [PATCH v8 3/5] ethdev: format module EEPROM for SFF-8079 Robin Zhang
2022-05-25  9:55           ` Andrew Rybchenko
2022-05-25  3:14         ` [PATCH v8 4/5] ethdev: format module EEPROM for SFF-8472 Robin Zhang
2022-05-25 11:58           ` Andrew Rybchenko
2022-05-25  3:14         ` [PATCH v8 5/5] ethdev: format module EEPROM for SFF-8636 Robin Zhang
2022-05-25  9:01           ` Andrew Rybchenko
2022-05-25 12:01           ` Andrew Rybchenko
2022-05-26  7:32         ` [PATCH v9 0/5] add telemetry command for show module EEPROM Robin Zhang
2022-05-26  7:32           ` [PATCH v9 1/5] ethdev: add telemetry command for " Robin Zhang
2022-05-26  7:32           ` Robin Zhang [this message]
2022-05-26  7:32           ` [PATCH v9 3/5] ethdev: support SFF-8079 module information telemetry Robin Zhang
2022-05-26  7:32           ` [PATCH v9 4/5] ethdev: support SFF-8472 " Robin Zhang
2022-05-26  7:32           ` [PATCH v9 5/5] ethdev: support SFF-8636 " Robin Zhang
2022-05-31 14:43           ` [PATCH v9 0/5] add telemetry command for show module EEPROM Andrew Rybchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220526073215.428410-3-robinx.zhang@intel.com \
    --to=robinx.zhang@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=kevinx.liu@intel.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.