All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] ethtool: Include SFP serial number and date in EEPROM dump
@ 2015-04-03 13:44 Ed Swierk
  0 siblings, 0 replies; only message in thread
From: Ed Swierk @ 2015-04-03 13:44 UTC (permalink / raw)
  To: netdev; +Cc: Ed Swierk

ethtool -m currently omits the serial number, date code, and other useful
EEPROM fields defined in INF-8074, which is part of the SFF-8079 standard.
This patch adds them.

It also trims space characters from the end of ASCII text fields.

$ ethtool -m eth0
...
	Option values                             : 0x00 0x10
	Option                                    : TX_DISABLE implemented
	BR margin, max                            : 0%
	BR margin, min                            : 0%
	Vendor SN                                 : AGC143953079
	Date code                                 : 140926

Signed-off-by: Ed Swierk <eswierk@skyportsystems.com>
---
 sfpid.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/sfpid.c b/sfpid.c
index 4f88aa2..b1a5044 100644
--- a/sfpid.c
+++ b/sfpid.c
@@ -355,6 +355,8 @@ static void sff8079_show_ascii(const __u8 *id, unsigned int first_reg,
 	unsigned int reg, val;
 
 	printf("\t%-41s : ", name);
+	while (first_reg <= last_reg && id[last_reg] == ' ')
+		last_reg--;
 	for (reg = first_reg; reg <= last_reg; reg++) {
 		val = id[reg];
 		putchar(((val >= 32) && (val <= 126)) ? val : '_');
@@ -362,6 +364,40 @@ static void sff8079_show_ascii(const __u8 *id, unsigned int first_reg,
 	printf("\n");
 }
 
+static void sff8079_show_options(const __u8 *id)
+{
+	static const char *pfx =
+		"\tOption                                    :";
+
+	printf("\t%-41s : 0x%02x 0x%02x\n", "Option values", id[64], id[65]);
+	if (id[65] & (1 << 1))
+		printf("%s RX_LOS implemented\n", pfx);
+	if (id[65] & (1 << 2))
+		printf("%s RX_LOS implemented, inverted\n", pfx);
+	if (id[65] & (1 << 3))
+		printf("%s TX_FAULT implemented\n", pfx);
+	if (id[65] & (1 << 4))
+		printf("%s TX_DISABLE implemented\n", pfx);
+	if (id[65] & (1 << 5))
+		printf("%s RATE_SELECT implemented\n", pfx);
+	if (id[65] & (1 << 6))
+		printf("%s Tunable transmitter technology\n", pfx);
+	if (id[65] & (1 << 7))
+		printf("%s Receiver decision threshold implemented\n", pfx);
+	if (id[64] & (1 << 0))
+		printf("%s Linear receiver output implemented\n", pfx);
+	if (id[64] & (1 << 1))
+		printf("%s Power level 2 requirement\n", pfx);
+	if (id[64] & (1 << 2))
+		printf("%s Cooled transceiver implemented\n", pfx);
+	if (id[64] & (1 << 3))
+		printf("%s Retimer or CDR implemented\n", pfx);
+	if (id[64] & (1 << 4))
+		printf("%s Paging implemented\n", pfx);
+	if (id[64] & (1 << 5))
+		printf("%s Power level 3 requirement\n", pfx);
+}
+
 void sff8079_show_all(const __u8 *id)
 {
 	sff8079_show_identifier(id);
@@ -385,5 +421,10 @@ void sff8079_show_all(const __u8 *id)
 		sff8079_show_oui(id);
 		sff8079_show_ascii(id, 40, 55, "Vendor PN");
 		sff8079_show_ascii(id, 56, 59, "Vendor rev");
+		sff8079_show_options(id);
+		sff8079_show_value_with_unit(id, 66, "BR margin, max", 1, "%");
+		sff8079_show_value_with_unit(id, 67, "BR margin, min", 1, "%");
+		sff8079_show_ascii(id, 68, 83, "Vendor SN");
+		sff8079_show_ascii(id, 84, 91, "Date code");
 	}
 }
-- 
1.9.1

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-04-03 13:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-03 13:44 [PATCH v2] ethtool: Include SFP serial number and date in EEPROM dump Ed Swierk

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.