From 3e3df10346581b00117298c8369fbe7ec1307c26 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Wed, 18 Jul 2018 17:31:29 +0000 Subject: [PATCH] The SFF code module has been migrated from the ONL repository to the floodlight:bigcode repository. The core SFF functionality has been migrated into the bigcode repository so it can be used by applications outside of ONL proper. This change should be transparent. --- packages/base/any/onlp/APKG.yml | 2 +- packages/base/any/onlp/src/sff/.gitignore | 1 - packages/base/any/onlp/src/sff/.module | 1 - packages/base/any/onlp/src/sff/Makefile | 4 - packages/base/any/onlp/src/sff/README | 6 - .../base/any/onlp/src/sff/module/auto/make.mk | 9 - .../base/any/onlp/src/sff/module/auto/sff.yml | 181 -- .../any/onlp/src/sff/module/inc/sff/8436.h | 525 ----- .../any/onlp/src/sff/module/inc/sff/8472.h | 1021 --------- .../any/onlp/src/sff/module/inc/sff/8636.h | 187 -- .../any/onlp/src/sff/module/inc/sff/sff.h | 388 ---- .../any/onlp/src/sff/module/inc/sff/sff.x | 119 -- .../onlp/src/sff/module/inc/sff/sff_config.h | 157 -- .../any/onlp/src/sff/module/inc/sff/sff_db.h | 60 - .../any/onlp/src/sff/module/inc/sff/sff_dox.h | 26 - .../onlp/src/sff/module/inc/sff/sff_porting.h | 87 - packages/base/any/onlp/src/sff/module/make.mk | 10 - .../sff/module/python/onlp/sff/__init__.py | 34 - .../src/sff/module/python/onlp/sff/enums.py | 76 - .../base/any/onlp/src/sff/module/src/8472.c | 328 --- .../base/any/onlp/src/sff/module/src/Makefile | 9 - .../base/any/onlp/src/sff/module/src/make.mk | 9 - .../any/onlp/src/sff/module/src/nonstandard.c | 37 - .../base/any/onlp/src/sff/module/src/sff.c | 863 -------- .../any/onlp/src/sff/module/src/sff_config.c | 91 - .../base/any/onlp/src/sff/module/src/sff_db.c | 1858 ---------------- .../any/onlp/src/sff/module/src/sff_enums.c | 316 --- .../any/onlp/src/sff/module/src/sff_int.h | 13 - .../any/onlp/src/sff/module/src/sff_log.c | 18 - .../any/onlp/src/sff/module/src/sff_log.h | 12 - .../any/onlp/src/sff/module/src/sff_module.c | 23 - .../any/onlp/src/sff/module/src/sff_tool.c | 143 -- packages/base/any/onlp/src/sff/sff.doxy | 1869 ----------------- .../base/any/onlp/src/sff/utest/.gitignore | 1 - packages/base/any/onlp/src/sff/utest/Makefile | 15 - packages/base/any/onlp/src/sff/utest/_make.mk | 8 - packages/base/any/onlp/src/sff/utest/main.c | 106 - sm/bigcode | 2 +- 38 files changed, 2 insertions(+), 8613 deletions(-) delete mode 100644 packages/base/any/onlp/src/sff/.gitignore delete mode 100644 packages/base/any/onlp/src/sff/.module delete mode 100644 packages/base/any/onlp/src/sff/Makefile delete mode 100644 packages/base/any/onlp/src/sff/README delete mode 100644 packages/base/any/onlp/src/sff/module/auto/make.mk delete mode 100644 packages/base/any/onlp/src/sff/module/auto/sff.yml delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/8436.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/8472.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/8636.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/sff.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/sff.x delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/sff_config.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/sff_db.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/sff_dox.h delete mode 100644 packages/base/any/onlp/src/sff/module/inc/sff/sff_porting.h delete mode 100644 packages/base/any/onlp/src/sff/module/make.mk delete mode 100644 packages/base/any/onlp/src/sff/module/python/onlp/sff/__init__.py delete mode 100644 packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py delete mode 100644 packages/base/any/onlp/src/sff/module/src/8472.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/Makefile delete mode 100644 packages/base/any/onlp/src/sff/module/src/make.mk delete mode 100644 packages/base/any/onlp/src/sff/module/src/nonstandard.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_config.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_db.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_enums.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_int.h delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_log.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_log.h delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_module.c delete mode 100644 packages/base/any/onlp/src/sff/module/src/sff_tool.c delete mode 100644 packages/base/any/onlp/src/sff/sff.doxy delete mode 100644 packages/base/any/onlp/src/sff/utest/.gitignore delete mode 100644 packages/base/any/onlp/src/sff/utest/Makefile delete mode 100644 packages/base/any/onlp/src/sff/utest/_make.mk delete mode 100644 packages/base/any/onlp/src/sff/utest/main.c diff --git a/packages/base/any/onlp/APKG.yml b/packages/base/any/onlp/APKG.yml index 1d6832e5..bb66bd7f 100644 --- a/packages/base/any/onlp/APKG.yml +++ b/packages/base/any/onlp/APKG.yml @@ -31,7 +31,7 @@ packages: ${ONL}/packages/base/any/onlp/src/onlp/module/python/onlp/onlp: ${PY_INSTALL}/onlp/onlp ${ONL}/packages/base/any/onlp/src/onlp/module/python/onlp/test: ${PY_INSTALL}/onlp/test ${ONL}/packages/base/any/onlp/src/onlplib/module/python/onlp/onlplib: ${PY_INSTALL}/onlp/onlplib - ${ONL}/packages/base/any/onlp/src/sff/module/python/onlp/sff: ${PY_INSTALL}/onlp/sff + ${ONL}/sm/bigcode/modules/sff/module/python/onlp/sff: ${PY_INSTALL}/onlp/sff init: $ONL/packages/base/any/onlp/src/onlpd.init diff --git a/packages/base/any/onlp/src/sff/.gitignore b/packages/base/any/onlp/src/sff/.gitignore deleted file mode 100644 index c81d16be..00000000 --- a/packages/base/any/onlp/src/sff/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.mk diff --git a/packages/base/any/onlp/src/sff/.module b/packages/base/any/onlp/src/sff/.module deleted file mode 100644 index 05da7c63..00000000 --- a/packages/base/any/onlp/src/sff/.module +++ /dev/null @@ -1 +0,0 @@ -name: sff diff --git a/packages/base/any/onlp/src/sff/Makefile b/packages/base/any/onlp/src/sff/Makefile deleted file mode 100644 index 50cbaef2..00000000 --- a/packages/base/any/onlp/src/sff/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include $(ONL)/make/config.mk -MODULE := sff -AUTOMODULE := sff -include $(BUILDER)/definemodule.mk diff --git a/packages/base/any/onlp/src/sff/README b/packages/base/any/onlp/src/sff/README deleted file mode 100644 index 12717e2f..00000000 --- a/packages/base/any/onlp/src/sff/README +++ /dev/null @@ -1,6 +0,0 @@ -############################################################################### -# -# sff README -# -############################################################################### - diff --git a/packages/base/any/onlp/src/sff/module/auto/make.mk b/packages/base/any/onlp/src/sff/module/auto/make.mk deleted file mode 100644 index 88b2ad6f..00000000 --- a/packages/base/any/onlp/src/sff/module/auto/make.mk +++ /dev/null @@ -1,9 +0,0 @@ -############################################################################### -# -# sff Autogeneration -# -############################################################################### -sff_AUTO_DEFS := module/auto/sff.yml -sff_AUTO_DIRS := module/inc/sff module/src module/python/onlp/sff -include $(BUILDER)/auto.mk - diff --git a/packages/base/any/onlp/src/sff/module/auto/sff.yml b/packages/base/any/onlp/src/sff/module/auto/sff.yml deleted file mode 100644 index ae5a01d6..00000000 --- a/packages/base/any/onlp/src/sff/module/auto/sff.yml +++ /dev/null @@ -1,181 +0,0 @@ -############################################################################### -# -# sff Autogeneration Definitions. -# -############################################################################### - -cdefs: &cdefs -- SFF_CONFIG_INCLUDE_LOGGING: - doc: "Include or exclude logging." - default: 1 -- SFF_CONFIG_LOG_OPTIONS_DEFAULT: - doc: "Default enabled log options." - default: AIM_LOG_OPTIONS_DEFAULT -- SFF_CONFIG_LOG_BITS_DEFAULT: - doc: "Default enabled log bits." - default: AIM_LOG_BITS_DEFAULT -- SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT: - doc: "Default enabled custom log bits." - default: 0 -- SFF_CONFIG_PORTING_STDLIB: - doc: "Default all porting macros to use the C standard libraries." - default: 1 -- SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS: - doc: "Include standard library headers for stdlib porting macros." - default: SFF_CONFIG_PORTING_STDLIB -- SFF_CONFIG_INCLUDE_UCLI: - doc: "Include generic uCli support." - default: 0 -- SFF_CONFIG_INCLUDE_SFF_TOOL: - doc: "Include the SFF tool main entry point." - default: 0 -- SFF_CONFIG_INCLUDE_EXT_CC_CHECK: - doc: "Include extended checksum verification." - default: 0 -- SFF_CONFIG_INCLUDE_DATABASE: - doc: "Include eeprom database." - default: 1 - -sff_media_types: &sff_media_types -- COPPER: - desc: "Copper" -- FIBER: - desc: "Fiber" - -sff_module_types: &sff_module_types -- 100G_AOC: - desc: "100G-AOC" -- 100G_BASE_CR4: - desc: "100GBASE-CR4" -- 100G_BASE_SR4: - desc: "100GBASE-SR4" -- 100G_BASE_LR4: - desc: "100GBASE-LR4" -- 100G_CWDM4: - desc: "100G-CWDM4" -- 100G_PSM4: - desc: "100G-PSM4" -- 100G_SWDM4: - desc: "100G-SWDM4" -- 40G_BASE_CR4: - desc: "40GBASE-CR4" -- 40G_BASE_SR4: - desc: "40GBASE-SR4" -- 40G_BASE_LR4: - desc: "40GBASE-LR4" -- 40G_BASE_LM4: - desc: "40GBASE-LM4" -- 40G_BASE_ACTIVE: - desc: "40GBASE-ACTIVE" -- 40G_BASE_CR: - desc: "40GBASE-CR" -- 40G_BASE_SR2: - desc: "40GBASE-SR2" -- 40G_BASE_SM4: - desc: "40GBASE-SM4" -- 40G_BASE_ER4: - desc: "40GBASE-ER4" -- 25G_BASE_CR: - desc: "25GBASE-CR" -- 25G_BASE_SR: - desc: "25GBASE-SR" -- 25G_BASE_LR: - desc: "25GBASE-LR" -- 25G_BASE_AOC: - desc: "25GBASE-AOC" -- 10G_BASE_SR: - desc: "10GBASE-SR" -- 10G_BASE_LR: - desc: "10GBASE-LR" -- 10G_BASE_LRM: - desc: "10GBASE-LRM" -- 10G_BASE_ER: - desc: "10GBASE-ER" -- 10G_BASE_CR: - desc: "10GBASE-CR" -- 10G_BASE_SX: - desc: "10GBASE-SX" -- 10G_BASE_LX: - desc: "10GBASE-LX" -- 10G_BASE_ZR: - desc: "10GBASE-ZR" -- 10G_BASE_SRL: - desc: "10GBASE-SRL" -- 1G_BASE_SX: - desc: "1GBASE-SX" -- 1G_BASE_LX: - desc: "1GBASE-LX" -- 1G_BASE_ZX: - desc: "1GBASE-ZX" -- 1G_BASE_CX: - desc: "1GBASE-CX" -- 1G_BASE_T: - desc: "1GBASE-T" -- 100_BASE_LX: - desc: "100BASE-LX" -- 100_BASE_FX: - desc: "100BASE-FX" -- 4X_MUX: - desc: "4X-MUX" - -sff_module_caps: &sff_module_caps -- F_100 : 0x1 -- F_1G : 0x2 -- F_10G : 0x4 -- F_25G : 0x8 -- F_40G : 0x10 -- F_100G : 0x20 - -sff_sfp_types: &sff_sfp_types -- SFP: - desc: "SFP" -- QSFP: - desc: "QSFP" -- QSFP_PLUS: - desc: "QSFP+" -- QSFP28: - desc: "QSFP28" -- SFP28: - desc: "SFP28" - -definitions: - cdefs: - SFF_CONFIG_HEADER: - defs: *cdefs - basename: sff_config - - portingmacro: - SFF: - macros: - - memset - - memcpy - - strncpy - - strncmp - - strlen - - snprintf - - enum: &enums - sff_sfp_type: - members: *sff_sfp_types - sff_module_type: - members: *sff_module_types - sff_module_caps: - members: *sff_module_caps - sff_media_type: - members: *sff_media_types - - pyenum: *enums - - xenum: - SFF_ENUMERATION_ENTRY: - members: *enums - - xmacro: - SFF_SFP_TYPE_ENTRY: - members: *sff_sfp_types - SFF_MODULE_TYPE_ENTRY: - members: *sff_module_types - SFF_MODULE_CAP_ENTRY: - members: *sff_module_caps - SFF_MEDIA_TYPE_ENTRY: - members: *sff_module_types diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/8436.h b/packages/base/any/onlp/src/sff/module/inc/sff/8436.h deleted file mode 100644 index ee6640ab..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/8436.h +++ /dev/null @@ -1,525 +0,0 @@ -/********************************************************************** - * - * 8436.h - * - * idprom defintions for QSFP+ modules. - * - **********************************************************************/ - -#ifndef __SFF_8436_H__ -#define __SFF_8436_H__ - -#include -#include "sff/8472.h" - -/* identifier, bytes 128 page 0 (also byte 0) */ - -#define SFF8436_IDENT_UNKNOWN SFF8472_IDENT_UNKNOWN -#define SFF8436_IDENT_GBIC SFF8472_IDENT_GBIC -#define SFF8436_IDENT_BASEBOARD SFF8472_IDENT_BASEBOARD -#define SFF8436_IDENT_SFP SFF8472_IDENT_SFP -#define SFF8436_IDENT_XBI SFF8472_IDENT_XBI -#define SFF8436_IDENT_XENPAK SFF8472_IDENT_XENPAK -#define SFF8436_IDENT_XFP SFF8472_IDENT_XFP -#define SFF8436_IDENT_XFF SFF8472_IDENT_XFF -#define SFF8436_IDENT_XFPE SFF8472_IDENT_XFPE -#define SFF8436_IDENT_XPAK SFF8472_IDENT_XPAK -#define SFF8436_IDENT_X2 SFF8472_IDENT_X2 -#define SFF8436_IDENT_DWDM_SFP SFF8472_IDENT_DWDM_SFP -#define SFF8436_IDENT_QSFP SFF8472_IDENT_QSFP - -/* additional values from this spec */ -#define SFF8436_IDENT_QSFP_PLUS 0x0D - -#define SFF8436_MODULE_QSFP_PLUS(idprom) \ - ((idprom[0] == SFF8436_IDENT_QSFP) \ - || (idprom[0] == SFF8436_IDENT_QSFP_PLUS)) - -#define SFF8436_MODULE_QSFP_PLUS_V2(idprom) \ - ((idprom[128] == SFF8436_IDENT_QSFP) \ - || (idprom[128] == SFF8436_IDENT_QSFP_PLUS)) - -#define SFF8436_RX1_PWR(idprom) \ - (idprom[34] << 8 | idprom[34 + 1]) -#define SFF8436_RX2_PWR(idprom) \ - (idprom[36] << 8 | idprom[36 + 1]) -#define SFF8436_RX3_PWR(idprom) \ - (idprom[38] << 8 | idprom[38 + 1]) -#define SFF8436_RX4_PWR(idprom) \ - (idprom[40] << 8 | idprom[40 + 1]) - -#define SFF8436_TX1_BIAS(idprom) \ - (idprom[42] << 8 | idprom[42 + 1]) -#define SFF8436_TX2_BIAS(idprom) \ - (idprom[44] << 8 | idprom[44 + 1]) -#define SFF8436_TX3_BIAS(idprom) \ - (idprom[46] << 8 | idprom[46 + 1]) -#define SFF8436_TX4_BIAS(idprom) \ - (idprom[48] << 8 | idprom[48 + 1]) - -#define SFF8436_SFP_VOLT(idprom) \ - (idprom[26] << 8 | idprom[26 + 1]) -#define SFF8436_SFP_TEMP(idprom) \ - (idprom[22] << 8 | idprom[22 + 1]) - -/* connector value, byte 130 page 0 */ - -#define SFF8436_CONN_UNKNOWN SFF8472_CONN_UNKNOWN -#define SFF8436_CONN_SC SFF8472_CONN_SC -#define SFF8436_CONN_FC1_CU SFF8472_CONN_FC1_CU -#define SFF8436_CONN_FC2_CU SFF8472_CONN_FC2_CU -#define SFF8436_CONN_BNC SFF8472_CONN_BNC -#define SFF8436_CONN_FC_COAX SFF8472_CONN_FC_COAX -#define SFF8436_CONN_FJ SFF8472_CONN_FJ -#define SFF8436_CONN_LC SFF8472_CONN_LC -#define SFF8436_CONN_MT_RJ SFF8472_CONN_MT_RJ -#define SFF8436_CONN_MU SFF8472_CONN_MU -#define SFF8436_CONN_SG SFF8472_CONN_SG -#define SFF8436_CONN_SI_PIGTAIL SFF8472_CONN_SI_PIGTAIL -#define SFF8436_CONN_MPO SFF8472_CONN_MPO -#define SFF8436_CONN_HSSDC_II SFF8472_CONN_HSSDC_II -#define SFF8436_CONN_CU_PIGTAIL SFF8472_CONN_CU_PIGTAIL -#define SFF8436_CONN_RJ45 SFF8472_CONN_RJ45 - -/* addtional values from this spec */ -#define SFF8436_CONN_NONE 0x23 - -/* Amphenol QSFP, identified as "QSFP" (not "QSFP+") and copper - pigtail */ -#define SFF8436_MEDIA_40GE_CR(idprom) \ - (idprom[130] == SFF8436_CONN_CU_PIGTAIL) - -/* QSFP+ compliance codes, bytes 131-138 */ -#define SFF8436_CC131_XGE_BASE_LRM SFF8472_CC3_XGE_BASE_LRM -#define SFF8436_CC131_XGE_BASE_LR SFF8472_CC3_XGE_BASE_LR -#define SFF8436_CC131_XGE_BASE_SR SFF8472_CC3_XGE_BASE_SR -#define SFF8436_CC131_40GE_BASE_CR4 0x08 -#define SFF8436_CC131_40GE_BASE_SR4 0x04 -#define SFF8436_CC131_40GE_BASE_LR4 0x02 -#define SFF8436_CC131_40GE_ACTIVE 0x01 - -#define SFF8436_MEDIA_XGE_LRM(idprom) \ - ((idprom[131] & SFF8436_CC131_XGE_BASE_LRM) != 0) -#define SFF8436_MEDIA_XGE_LR(idprom) \ - ((idprom[131] & SFF8436_CC131_XGE_BASE_LR) != 0) -#define SFF8436_MEDIA_XGE_SR(idprom) \ - ((idprom[131] & SFF8436_CC131_XGE_BASE_SR) != 0) - -#define SFF8436_MEDIA_40GE_CR4(idprom) \ - ((idprom[131] & SFF8436_CC131_40GE_BASE_CR4) != 0) -#define SFF8436_MEDIA_40GE_SR4(idprom) \ - ((idprom[131] & SFF8436_CC131_40GE_BASE_SR4) != 0) -#define SFF8436_MEDIA_40GE_LR4(idprom) \ - ((idprom[131] & SFF8436_CC131_40GE_BASE_LR4) != 0) -#define SFF8436_MEDIA_40GE_ACTIVE(idprom) \ - ((idprom[131] & SFF8436_CC131_40GE_ACTIVE) != 0) - -#define SFF8436_MEDIA_NONE(idprom) \ - ((idprom[131] & 0x7F) == 0) - -#define SFF8436_CC132_40G_OTN 0x08 -#define SFF8436_CC132_OC48_LONG SFF8472_CC4_OC48_LONG -#define SFF8436_CC132_OC48_INTERMETIATE SFF8472_CC4_OC48_INTERMEDIATE -#define SFF8436_CC132_OC48_SHORT SFF8472_CC4_OC48_SHORT - -#define SFF8436_CC133_SAS_6G 0x20 -#define SFF8436_CC133_SAS_3G 0x10 - -#define SFF8436_CC134_GBE_BASE_T SFF8472_CC6_GBE_BASE_T -#define SFF8436_CC134_GBE_BASE_CX SFF8472_CC6_GBE_BASE_CX -#define SFF8436_CC134_GBE_BASE_LX SFF8472_CC6_GBE_BASE_LX -#define SFF8436_CC134_GBE_BASE_SX SFF8472_CC6_GBE_BASE_SX - -#define SFF8436_MEDIA_GBE_T(idprom) \ - ((idprom[134] & SFF8436_CC134_GBE_BASE_T) != 0) -#define SFF8436_MEDIA_GBE_CX(idprom) \ - ((idprom[134] & SFF8436_CC134_GBE_BASE_CX) != 0) -#define SFF8436_MEDIA_GBE_LX(idprom) \ - ((idprom[134] & SFF8436_CC134_GBE_BASE_LX) != 0) -#define SFF8436_MEDIA_GBE_SX(idprom) \ - ((idprom[134] & SFF8436_CC134_GBE_BASE_SX) != 0) - -#define SFF8436_CC135_FC_VERY_LONG SFF8472_CC7_FC_VERY_LONG -#define SFF8436_CC135_FC_SHORT SFF8472_CC7_FC_SHORT -#define SFF8436_CC135_FC_INTERMEDIATE SFF8472_CC7_FC_INTERMEDIATE -#define SFF8436_CC135_FC_LONG SFF8472_CC7_FC_LONG -#define SFF8436_CC135_FC_MEDIUM SFF8472_CC7_FC_MEDIUM -#define SFF8436_CC135_FC_TECH_LC SFF8472_CC7_FC_TECH_LC -#define SFF8436_CC135_FC_TECH_EL SFF8472_CC7_FC_TECH_EL -#define SFF8436_CC136_FC_TECH_EL SFF8472_CC8_FC_TECH_EL -#define SFF8436_CC136_FC_TECH_SN SFF8472_CC8_FC_TECH_SN -#define SFF8436_CC136_FC_TECH_SL SFF8472_CC8_FC_TECH_SL -#define SFF8436_CC136_FC_TECH_LL SFF8472_CC8_FC_TECH_LL - -#define SFF8436_TECH_FC_FIBER_LONG(idprom) \ - (((idprom[135] & SFF8436_CC135_FC_TECH_LC) != 0) \ - || ((idprom[136] & SFF8436_CC136_FC_TECH_LL) != 0)) - -#define SFF8436_TECH_FC_FIBER_SHORT(idprom) \ - (((idprom[136] & SFF8436_CC136_FC_TECH_SN) != 0) \ - || ((idprom[136] & SFF8436_CC136_FC_TECH_SL) != 0)) - -#define SFF8436_TECH_FC_FIBER(idprom) \ - (SFF8436_TECH_FC_FIBER_SHORT(idprom) \ - || SFF8436_TECH_FC_FIBER_LONG(idprom)) - -#define SFF8436_TECH_FC_COPPER(idprom) \ - (((idprom[135] & SFF8436_CC135_FC_TECH_EL) != 0) \ - || ((idprom[136] & SFF8436_CC136_FC_TECH_EL) != 0)) - -#define SFF8436_CC137_FC_MEDIA_TW SFF8472_CC9_FC_MEDIA_TW -#define SFF8436_CC137_FC_MEDIA_TP SFF8472_CC9_FC_MEDIA_TP -#define SFF8436_CC137_FC_MEDIA_MI SFF8472_CC9_FC_MEDIA_MI -#define SFF8436_CC137_FC_MEDIA_TV SFF8472_CC9_FC_MEDIA_TV -#define SFF8436_CC137_FC_MEDIA_M6 SFF8472_CC9_FC_MEDIA_M6 -#define SFF8436_CC137_FC_MEDIA_M5 SFF8472_CC9_FC_MEDIA_M5 -#define SFF8436_CC137_FC_MEDIA_OM3 0x02 -#define SFF8436_CC137_FC_MEDIA_SM SFF8472_CC9_FC_MEDIA_SM - -#define SFF8436_MEDIA_FC_FIBER_SM(idprom) \ - ((idprom[137] & SFF8436_CC137_FC_MEDIA_SM) != 0) - -#define SFF8436_MEDIA_FC_FIBER_MM(idprom) \ - (((idprom[137] & SFF8436_CC137_FC_MEDIA_OM3) != 0) \ - || ((idprom[137] & SFF8436_CC137_FC_MEDIA_M5) != 0) \ - || ((idprom[137] & SFF8436_CC137_FC_MEDIA_M6) != 0)) - -#define SFF8436_MEDIA_FC_FIBER(idprom) \ - (SFF8436_MEDIA_FC_FIBER_SM(idprom) \ - || SFF8436_MEDIA_FC_FIBER_MM(idprom)) - -#define SFF8436_MEDIA_FC_COPPER_TP(idprom) \ - (((idprom[137] & SFF8436_CC137_FC_MEDIA_TP) != 0) \ - || ((idprom[137] & SFF8436_CC137_FC_MEDIA_TW) != 0)) - -#define SFF8436_MEDIA_FC_COPPER_COAX(idprom) \ - (((idprom[137] & SFF8436_CC137_FC_MEDIA_TV) != 0) \ - || ((idprom[137] & SFF8436_CC137_FC_MEDIA_MI) != 0)) - -#define SFF8436_MEDIA_FC_COPPER(idprom) \ - (SFF8436_MEDIA_FC_COPPER_TP(idprom) \ - || SFF8436_MEDIA_FC_COPPER_COAX(idprom) - -#define SFF8436_CC138_FC_SPEED_100 SFF8472_CC10_FC_SPEED_100 -#define SFF8436_CC138_FC_SPEED_200 SFF8472_CC10_FC_SPEED_200 -#define SFF8436_CC138_FC_SPEED_400 SFF8472_CC10_FC_SPEED_400 -#define SFF8436_CC138_FC_SPEED_1600 SFF8472_CC10_FC_SPEED_1600 -#define SFF8436_CC138_FC_SPEED_800 SFF8472_CC10_FC_SPEED_800 -#define SFF8436_CC138_FC_SPEED_1200 SFF8472_CC10_FC_SPEED_1200 - -#define SFF8436_CC139_8B10B 0x01 -#define SFF8436_CC139_4B5B 0x02 -#define SFF8436_CC139_NRZ 0x03 -#define SFF8436_CC139_SONET 0x04 -#define SFF8436_CC139_64B66B 0x05 -#define SFF8436_CC139_MANCHESTER 0x06 - -#define SFF8436_CC164_INF_SDR 0x01 -#define SFF8436_CC164_INF_DDR 0x02 -#define SFF8436_CC164_INF_QDR 0x04 -#define SFF8436_CC164_INF_FDR 0x08 -#define SFF8436_CC164_INF_EDR 0x10 - -#define SFF8436_RX_PWR_TYPE_MASK 0x08 -#define SFF8436_DOM_GET_RXPWR_TYPE(idprom) \ - (idprom[220] & SFF8436_RX_PWR_TYPE_MASK) - -/* SFF8436 registers */ -#define SFF8436_CONTROL_TX_DISABLE 86 -/* alternate ways to identify pre-standard 40G cables */ -static inline int -_sff8436_qsfp_40g_pre(const uint8_t* idprom) -{ - /* skip if not qsfp+ */ - if (!SFF8436_MODULE_QSFP_PLUS_V2(idprom)) - return 0; - - /* if any of the other standard bits are set, abort */ - if (SFF8436_MEDIA_40GE_CR4(idprom)) - return 0; - if (SFF8436_MEDIA_40GE_SR4(idprom)) - return 0; - if (SFF8436_MEDIA_40GE_LR4(idprom)) - return 0; - if (SFF8436_MEDIA_40GE_ACTIVE(idprom)) - return 0; - - /* since it is QSFP/QSFP+, let us assume 4 lanes */ - - /* QDR infiniband == 8G per lane, 32G total, probably 40G Ethernet - compliant */ - if ((idprom[164] & SFF8436_CC164_INF_QDR) != 0) - return 1; - - /* nominal BR > 100 * 100M (10G), likely 40G Ethernet compliant */ - if (idprom[140] >= 64) - return 1; - - return 0; -} - -static inline int -_sff8436_qsfp_40g_lm4(const uint8_t* idprom) -{ - if(!SFF8436_MODULE_QSFP_PLUS_V2(idprom)) { - return 0; - } - - if (idprom[130] != SFF8436_CONN_LC) return 0; - if (!SFF8436_MEDIA_NONE(idprom)) return 0; - - if ((idprom[142] != 1) && idprom[143] != 70) { - return 0; - } - return 1; -} - -static inline int -_sff8436_qsfp_40g_sm4(const uint8_t* idprom) -{ - if(!SFF8436_MODULE_QSFP_PLUS_V2(idprom)) { - return 0; - } - - if (!SFF8436_MEDIA_NONE(idprom)) return 0; - /* 850nm tx technology */ - if (idprom[147] & 0xF0) return 0; - /* length is 200m(OM3) or 250m(OM4) */ - if ((idprom[143] != 100) && (idprom[146] != 125)) { - return 0; - } - return 1; -} - -static inline int -_sff8436_qsfp_40g_er4(const uint8_t* idprom) -{ - if(!SFF8436_MODULE_QSFP_PLUS_V2(idprom)) { - return 0; - } - - if (idprom[130] != SFF8436_CONN_LC) return 0; - if (!SFF8436_MEDIA_NONE(idprom)) return 0; - - /* 40 kilometer SMF */ - if (idprom[142] != 40) { - return 0; - } - return 1; -} - -static inline int -_sff8436_bitrate(const uint8_t *idprom) -{ - if (idprom[12] == 0) - return 0; - if (idprom[12] == 0xFF) - return 0; - long long br = (long long) idprom[12] * 100*1000000; - if ((br > 1000*1000000LL) && (br < 5*1000*1000000LL)) - return 1; - return 0; -} - -static inline int -_sff8436_length_sm(const uint8_t *idprom) -{ - return idprom[142] * 1000; -} - -static inline int -_sff8436_length_om3(const uint8_t *idprom) -{ - return idprom[143] * 2; -} - -static inline int -_sff8436_length_om2(const uint8_t *idprom) -{ - return idprom[144]; -} - -static inline int -_sff8436_length_om1(const uint8_t *idprom) -{ - return idprom[145]; -} - -static inline int -_sff8436_length_copper_active(const uint8_t *idprom) -{ - return idprom[146]; -} - -static inline int -_sff8436_wavelength(const uint8_t *idprom) -{ - return ((idprom[186] << 8) | idprom[187]) / 20; -} - -/* - * try to detect QSFP modules (outside of the 8436 spec) - */ -static inline int -_sff8436_qsfp_40g_sr2_bidi_pre(const uint8_t *idprom) -{ - /* module should be qsfp */ - if (!SFF8436_MODULE_QSFP_PLUS(idprom) - && !SFF8436_MODULE_QSFP_PLUS_V2(idprom)) - return 0; - - /* module should have LC connector */ - if (idprom[130] != SFF8436_CONN_LC) return 0; - - /* reject any unrelated compliance codes */ - if (SFF8436_MEDIA_XGE_LRM(idprom)) return 0; - if (SFF8436_MEDIA_XGE_LR(idprom)) return 0; - if (SFF8436_MEDIA_XGE_SR(idprom)) return 0; - if (SFF8436_MEDIA_40GE_CR4(idprom)) return 0; - - /* do *not* report SR4 compliance */ - if (SFF8436_MEDIA_40GE_SR4(idprom)) return 0; - - if (SFF8436_MEDIA_40GE_LR4(idprom)) return 0; - if (SFF8436_MEDIA_40GE_ACTIVE(idprom)) return 0; - - /* make sure it's MM fiber */ - if (_sff8436_wavelength(idprom) != 850) return 0; - - /* make sure it reports a MM cable length */ - if (_sff8436_length_sm(idprom) > 0) return 0; - if (!_sff8436_length_om1(idprom) - && !_sff8436_length_om2(idprom) - && !_sff8436_length_om3(idprom)) - return 0; - - /* - * report a BR greater than 10G... - * for a two-fiber bidi cable we report 20G, but that is per fiber - */ - long long br = (long long) idprom[140] * 100 * 1000000; - if ((br >= 20LL*1000*1000000) && (br < 40LL*1000*1000000)) return 1; - return 0; - -} - -/* - * non-standard Cisco/Finisar QSFP MM (AOC?) - */ -static inline int -_sff8436_qsfp_40g_sr4_aoc_pre(const uint8_t *idprom) -{ - /* module should be qsfp */ - if (!SFF8436_MODULE_QSFP_PLUS(idprom) - && !SFF8436_MODULE_QSFP_PLUS_V2(idprom)) - return 0; - - /* no separable connector -- likely active */ - if (idprom[130] != SFF8436_CONN_NONE) return 0; - - /* reject any unrelated compliance codes */ - if (SFF8436_MEDIA_XGE_LRM(idprom)) return 0; - if (SFF8436_MEDIA_XGE_LR(idprom)) return 0; - if (SFF8436_MEDIA_XGE_SR(idprom)) return 0; - if (SFF8436_MEDIA_40GE_CR4(idprom)) return 0; - - /* do *not* report SR4 compliance */ - if (SFF8436_MEDIA_40GE_SR4(idprom)) return 0; - - if (SFF8436_MEDIA_40GE_LR4(idprom)) return 0; - if (SFF8436_MEDIA_40GE_ACTIVE(idprom)) return 0; - - /* make sure it's MM fiber */ - if (_sff8436_wavelength(idprom) != 850) return 0; - - /* make sure it reports a MM cable length */ - if (_sff8436_length_sm(idprom) > 0) return 0; - if (!_sff8436_length_om1(idprom) - && !_sff8436_length_om2(idprom) - && !_sff8436_length_om3(idprom)) - return 0; - - /* - * report a BR roughly 10G (4 strands) - */ - long long br = (long long) idprom[140] * 100 * 1000000; - if ((br >= 10LL*1000*1000000) && (br < 15LL*1000*1000000)) return 1; - return 0; - -} - -/* - * 40G AOC breakout cable, e.g. Finisar - */ -static inline int -_sff8436_qsfp_40g_aoc_breakout(const uint8_t *idprom) -{ - /* module should be qsfp */ - if (!SFF8436_MODULE_QSFP_PLUS(idprom) - && !SFF8436_MODULE_QSFP_PLUS_V2(idprom)) - return 0; - - /* no separable connector -- likely active */ - if (idprom[130] != SFF8436_CONN_NONE) return 0; - - /* no media compliance, probably active or breakout */ - if (!SFF8436_MEDIA_NONE(idprom)) return 0; - - /* reject any 40G compliance codes */ - if (SFF8436_MEDIA_40GE_CR4(idprom)) return 0; - if (SFF8436_MEDIA_40GE_SR4(idprom)) return 0; - if (SFF8436_MEDIA_40GE_LR4(idprom)) return 0; - - /* also does not report as active! Ugh. */ - if (SFF8436_MEDIA_40GE_ACTIVE(idprom)) return 0; - - /* reject any unrelated compliance codes */ - if (SFF8436_MEDIA_XGE_LRM(idprom)) return 0; - if (SFF8436_MEDIA_XGE_LR(idprom)) return 0; - if (SFF8436_MEDIA_XGE_SR(idprom)) return 0; - - /* make sure it's MM fiber */ - if (_sff8436_wavelength(idprom) != 850) return 0; - - /* does not report a fiber length, but does report a cable length */ - if (_sff8436_length_sm(idprom) > 0) return 0; - if (_sff8436_length_om1(idprom) > 0) return 0; - if (_sff8436_length_om2(idprom) > 0) return 0; - if (_sff8436_length_om3(idprom) > 0) return 0; - if (_sff8436_length_copper_active(idprom) == 0) return 0; - - /* maybe, possibly an AOC breakout cable */ - return 1; -} - -/* - * Infer cable length for fixed-length (AOC) optical cables - * - * XXX roth -- may also be able to cook up a rule for SFP+ cables too. - */ -static inline int -_sff8436_qsfp_40g_aoc_length(const uint8_t *idprom) -{ - /* module should be qsfp */ - if (!SFF8436_MODULE_QSFP_PLUS(idprom) - && !SFF8436_MODULE_QSFP_PLUS_V2(idprom)) - return -1; - - /* no separable connector -- likely active */ - if (idprom[130] != SFF8436_CONN_NONE) return -1; - - /* make sure it's MM fiber */ - if (_sff8436_wavelength(idprom) != 850) return 0; - - /* does not report a fiber length, but does report a cable length */ - if (_sff8436_length_sm(idprom) > 0) return -1; - if (_sff8436_length_om1(idprom) > 0) return -1; - if (_sff8436_length_om2(idprom) > 0) return -1; - if (_sff8436_length_om3(idprom) > 0) return -1; - if (_sff8436_length_copper_active(idprom) > 0) - return _sff8436_length_copper_active(idprom); - - return -1; -} - -#endif /* __SFF_8436_H__ */ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/8472.h b/packages/base/any/onlp/src/sff/module/inc/sff/8472.h deleted file mode 100644 index 5a985f3b..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/8472.h +++ /dev/null @@ -1,1021 +0,0 @@ -/************************************************************ - * - * - * Copyright 2014, 2015 Big Switch Networks, Inc. - * - * Licensed under the Eclipse Public License, Version 1.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.eclipse.org/legal/epl-v10.html - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the - * License. - * - * - ************************************************************ - * - * SFF 8472 Definitions. - * - ***********************************************************/ -#ifndef __SFF_8472_H__ -#define __SFF_8472_H__ - -#include -#include - -/****************************** - * - * All (most of) the gory details from table 3.5 of the SFF spec - * - ******************************/ - -/* identifier byte 0x00 */ - -#define SFF8472_IDENT_UNKNOWN 0x00 -#define SFF8472_IDENT_GBIC 0x01 -#define SFF8472_IDENT_BASEBOARD 0x02 -#define SFF8472_IDENT_SFP 0x03 -#define SFF8472_IDENT_XBI 0x04 -#define SFF8472_IDENT_XENPAK 0x05 -#define SFF8472_IDENT_XFP 0x06 -#define SFF8472_IDENT_XFF 0x07 -#define SFF8472_IDENT_XFPE 0x08 -#define SFF8472_IDENT_XPAK 0x09 -#define SFF8472_IDENT_X2 0x0A -#define SFF8472_IDENT_DWDM_SFP 0x0B -#define SFF8472_IDENT_QSFP 0x0C - -#define SFF8472_MODULE_SFP(idprom) \ - ((idprom[0] == SFF8472_IDENT_SFP) \ - || (idprom[0] == SFF8472_IDENT_DWDM_SFP)) - -/* connector byte 0x02 */ - -#define SFF8472_CONN_UNKNOWN 0x00 -#define SFF8472_CONN_SC 0x01 -#define SFF8472_CONN_FC1_CU 0x02 -#define SFF8472_CONN_FC2_CU 0x03 -#define SFF8472_CONN_BNC 0x04 -#define SFF8472_CONN_FC_COAX 0x05 -#define SFF8472_CONN_FJ 0x06 -#define SFF8472_CONN_LC 0x07 -#define SFF8472_CONN_MT_RJ 0x08 -#define SFF8472_CONN_MU 0x09 -#define SFF8472_CONN_SG 0x0A -#define SFF8472_CONN_SI_PIGTAIL 0x0B -#define SFF8472_CONN_MPO 0x0C -#define SFF8472_CONN_HSSDC_II 0x20 -#define SFF8472_CONN_CU_PIGTAIL 0x21 -#define SFF8472_CONN_RJ45 0x22 -#define SFF8472_CONN_NOSEP 0x23 - -/* module compliance codes (SFP type) */ - -#define SFF8472_CC3_INF_1X_CU_PASSIVE 0x01 -#define SFF8472_CC3_INF_1X_CU_ACTIVE 0x02 -#define SFF8472_CC3_INF_1X_LX 0x04 -#define SFF8472_CC3_INF_1X_SX 0x08 -#define SFF8472_CC3_XGE_BASE_SR 0x10 -#define SFF8472_CC3_XGE_BASE_LR 0x20 -#define SFF8472_CC3_XGE_BASE_LRM 0x40 -#define SFF8472_CC3_XGE_BASE_ER 0x80 - -#define SFF8472_CC4_OC48_SHORT 0x01 -#define SFF8472_CC4_OC48_INTERMEDIATE 0x02 -#define SFF8472_CC4_OC48_LONG 0x04 -#define SFF8472_CC4_SONET 0x18 -#define SFF8472_CC4_OC192_SHORT 0x20 -#define SFF8472_CC4_ESCON_SMF 0x40 -#define SFF8472_CC4_ESCON_MMF 0x80 - -#define SFF8472_CC5_OC3_SHORT 0x01 -#define SFF8472_CC5_OC3_SMM_INTERMEDIATE 0x02 -#define SFF8472_CC5_OC3_SMM_LONG 0x04 -#define SFF8472_CC5_UNALLOCATED1 0x08 -#define SFF8472_CC5_OC12_SHORT 0x10 -#define SFF8472_CC5_OC12_SMM_INTERMEDIATE 0x20 -#define SFF8472_CC5_OC12_SMM_LONG 0x40 -#define SFF8472_CC5_UNALLOCATED2 0x80 - -#define SFF8472_CC6_GBE_BASE_SX 0x01 -#define SFF8472_CC6_GBE_BASE_LX 0x02 -#define SFF8472_CC6_GBE_BASE_CX 0x04 -#define SFF8472_CC6_GBE_BASE_T 0x08 -#define SFF8472_CC6_CBE_BASE_LX 0x10 -#define SFF8472_CC6_CBE_BASE_FX 0x20 -#define SFF8472_CC6_BASE_BX10 0x40 -#define SFF8472_CC6_BASE_PX 0x80 - -#define SFF8472_CC7_FC_TECH_EL 0x01 -#define SFF8472_CC7_FC_TECH_LC 0x02 -#define SFF8472_CC7_FC_TECH_SA 0x04 -#define SFF8472_CC7_FC_MEDIUM 0x08 -#define SFF8472_CC7_FC_LONG 0x10 -#define SFF8472_CC7_FC_INTERMEDIATE 0x20 -#define SFF8472_CC7_FC_SHORT 0x40 -#define SFF8472_CC7_FC_VERY_LONG 0x80 - -#define SFF8472_CC8_UNALLOCATED1 0x03 -#define SFF8472_CC8_SFP_PASSIVE 0x04 -#define SFF8472_CC8_SFP_ACTIVE 0x08 -#define SFF8472_CC8_FC_TECH_LL 0x10 -#define SFF8472_CC8_FC_TECH_SL 0x20 -#define SFF8472_CC8_FC_TECH_SN 0x40 -#define SFF8472_CC8_FC_TECH_EL 0x80 - -#define SFF8472_CC9_FC_MEDIA_SM 0x01 -#define SFF8472_CC9_UNALLOCATED1 0x02 -#define SFF8472_CC9_FC_MEDIA_M5 0x04 -#define SFF8472_CC9_FC_MEDIA_M6 0x08 -#define SFF8472_CC9_FC_MEDIA_TV 0x10 -#define SFF8472_CC9_FC_MEDIA_MI 0x20 -#define SFF8472_CC9_FC_MEDIA_TP 0x40 -#define SFF8472_CC9_FC_MEDIA_TW 0x80 - -#define SFF8472_CC10_FC_SPEED_100 0x01 -#define SFF8472_CC10_UNALLOCATED1 0x02 -#define SFF8472_CC10_FC_SPEED_200 0x04 -#define SFF8472_CC10_FC_SPEED_3200 0x08 -#define SFF8472_CC10_FC_SPEED_400 0x10 -#define SFF8472_CC10_FC_SPEED_1600 0x20 -#define SFF8472_CC10_FC_SPEED_800 0x40 -#define SFF8472_CC10_FC_SPEED_1200 0x80 - -#define SFF8472_CC36_XGE_UNALLOCATED 0x01 -#define SFF8472_CC36_UNALLOCATED1 0xF7 -#define SFF8472_CC36_100G_25G_SR 0x02 -#define SFF8472_CC36_100G_25G_LR 0x03 -#define SFF8472_CC36_100G_25G_AOC_1 0x01 -#define SFF8472_CC36_100G_25G_AOC_2 0x18 - -#define SFF8471_CC60_FC_PI_4_LIMITING 0x08 -#define SFF8471_CC60_SFF8431_LIMITING 0x04 -#define SFF8471_CC60_FC_PI_4 0x02 -#define SFF8471_CC60_SFF8431 0x01 - -/* diagnostic monitoring type 0x92 */ -#define SFF8472_DOM_IMPL 0x40 -#define SFF8472_DOM_EXTCAL 0x10 -#define SFF8472_DOM_RXPWRTYPE 0x08 - -#define SFF8472_DOM_SUPPORTED(idprom) \ - ((idprom[92] & SFF8472_DOM_IMPL)? 1:0) -#define SFF8472_DOM_USE_EXTCAL(idprom) \ - ((idprom[92] & SFF8472_DOM_EXTCAL)? 1:0) -#define SFF8472_DOM_GET_RXPWR_TYPE(idprom) \ - ((idprom[92] & SFF8472_DOM_RXPWRTYPE)? 1:0) - -/* SFF8472 A2 registers */ - -/* 32-bit little-endian calibration constants */ -#define SFF8472_CAL_RXPWR4 56 -#define SFF8472_CAL_RXPWR3 60 -#define SFF8472_CAL_RXPWR2 64 -#define SFF8472_CAL_RXPWR1 68 -#define SFF8472_CAL_RXPWR0 72 - -/* 16-bit little endian calibration constants */ -#define SFF8472_CAL_TXI_SLP 76 -#define SFF8472_CAL_TXI_OFF 78 -#define SFF8472_CAL_TXPWR_SLP 80 -#define SFF8472_CAL_TXPWR_OFF 82 -#define SFF8472_CAL_T_SLP 84 -#define SFF8472_CAL_T_OFF 86 -#define SFF8472_CAL_V_SLP 88 -#define SFF8472_CAL_V_OFF 90 - -#define SFF8472_RX_PWR(dom) \ - (dom[104] << 8 | dom[104 + 1]) -#define SFF8472_BIAS_CUR(dom) \ - (dom[100] << 8 | dom[100 + 1]) -#define SFF8472_SFP_VOLT(dom) \ - (dom[98] << 8 | dom[98 + 1]) -#define SFF8472_TX_PWR(dom) \ - (dom[102] << 8 | dom[102 + 1]) -#define SFF8472_SFP_TEMP(dom) \ - (dom[96] << 8 | dom[96 + 1]) - -#define SFF8472_MEDIA_XGE_SR(idprom) \ - ((idprom[3] & SFF8472_CC3_XGE_BASE_SR) != 0) -#define SFF8472_MEDIA_XGE_LR(idprom) \ - ((idprom[3] & SFF8472_CC3_XGE_BASE_LR) != 0) -#define SFF8472_MEDIA_XGE_LRM(idprom) \ - ((idprom[3] & SFF8472_CC3_XGE_BASE_LRM) != 0) -#define SFF8472_MEDIA_XGE_ER(idprom) \ - ((idprom[3] & SFF8472_CC3_XGE_BASE_ER) != 0) - -#define SFF8472_MEDIA_LENGTH_ZX(idprom) \ - (idprom[14] >= 70) - -/* - * some CR cables identify as infiniband copper - * some CR cables identify as FC twinax - * some CR cables identify their electrical compliance - * using bytes 60,61 - * some CR cables identify as FC electrical intra- - * or inter-enclosure (bytes 7, 8) - */ - -static inline int -_sff8472_inf_1x(const uint8_t* idprom) -{ - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) != 0) return 1; - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_ACTIVE) != 0) return 1; - if ((idprom[3] & SFF8472_CC3_INF_1X_LX) != 0) return 1; - if ((idprom[3] & SFF8472_CC3_INF_1X_SX) != 0) return 1; - return 0; -} - -static inline int -_sff8472_inf_1x_cu_active(const uint8_t* idprom) -{ - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_LX) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_SX) != 0) return 0; - - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_ACTIVE) != 0) return 1; - - return 0; -} - -static inline int -_sff8472_inf_1x_cu_passive(const uint8_t* idprom) -{ - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_ACTIVE) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_LX) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_SX) != 0) return 0; - - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) != 0) return 1; - - return 0; -} - -static inline int -_sff8472_fc_media(const uint8_t* idprom) -{ - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_SM) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TV) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_MI) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TP) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TW) != 0) return 1; - return 0; -} - -static inline int -_sff8472_fc_media_tw(const uint8_t* idprom) -{ - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_SM) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TV) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_MI) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TP) != 0) return 0; - - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TW) != 0) return 1; - - return 0; -} - -static inline int -_sff8472_fc_media_sm(const uint8_t* idprom) -{ - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TV) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_MI) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TP) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TW) != 0) return 0; - - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_SM) != 0) return 1; - return 0; -} - -static inline int -_sff8472_fc_media_mm(const uint8_t* idprom) -{ - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_SM) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TV) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_MI) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TP) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TW) != 0) return 0; - - if (((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) != 0) - && ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) == 0)) return 1; - if (((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) == 0) - && ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) != 0)) return 1; - - return 0; -} - -static inline int -_sff8472_tech_fc(const uint8_t* idprom) -{ - if ((idprom[7] & SFF8472_CC7_FC_TECH_EL) != 0) return 1; - if ((idprom[7] & SFF8472_CC7_FC_TECH_LC) != 0) return 1; - if ((idprom[7] & SFF8472_CC7_FC_TECH_SA) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_EL) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_LL) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SL) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SN) != 0) return 1; - return 0; -} - -static inline int -_sff8472_tech_fc_el(const uint8_t* idprom) -{ - /* non-EL types */ - if ((idprom[7] & SFF8472_CC7_FC_TECH_LC) != 0) return 0; - if ((idprom[7] & SFF8472_CC7_FC_TECH_SA) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_LL) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SL) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SN) != 0) return 0; - - if (((idprom[7] & SFF8472_CC7_FC_TECH_EL) != 0) - || ((idprom[8] & SFF8472_CC8_FC_TECH_EL) != 0)) - return 1; - - return 0; -} - -static inline int -_sff8472_tech_fc_ll(const uint8_t* idprom) -{ - /* non-LL types */ - if ((idprom[7] & SFF8472_CC7_FC_TECH_EL) != 0) return 0; - if ((idprom[7] & SFF8472_CC7_FC_TECH_LC) != 0) return 0; - if ((idprom[7] & SFF8472_CC7_FC_TECH_SA) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SL) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SN) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_EL) != 0) return 0; - - if (((idprom[8] & SFF8472_CC8_FC_TECH_LL) != 0)) - return 1; - - return 0; -} - -/* do not specify an FC speed code unless you are actually FC */ -static inline int -_sff8472_fc_speed_ok(const uint8_t* idprom) -{ - if (_sff8472_tech_fc(idprom) - && (idprom[10] != 0)) - return 1; - if (!_sff8472_tech_fc(idprom) - && (idprom[10] == 0)) - return 1; - return 0; -} - -/* - * for dual ethernet/fc modules, we can infer the ethernet - * speed from the max FC speed - * (like, if the module mi-identifies itself as 10G and 1G - */ -static inline int -_sff8472_fc_speed_1g(const uint8_t *idprom) -{ - /* not FC, cannot infer speed */ - if (!_sff8472_tech_fc(idprom)) - return 0; - - /* 100MByte and 200MByte should be sufficient to identify as 1G */ - if (((idprom[10] & SFF8472_CC10_FC_SPEED_100) != 0) - || ((idprom[10] & SFF8472_CC10_FC_SPEED_200) != 0)) - return 1; - - return 0; -} - -static inline int -_sff8472_fc_speed_10g(const uint8_t *idprom) -{ - /* not FC, cannot infer speed */ - if (!_sff8472_tech_fc(idprom)) - return 0; - - /* check for any speed close to 10G */ - if (((idprom[10] & SFF8472_CC10_FC_SPEED_800) != 0) - || ((idprom[10] & SFF8472_CC10_FC_SPEED_1200) != 0) - || ((idprom[10] & SFF8472_CC10_FC_SPEED_1600) != 0) - || ((idprom[10] & SFF8472_CC10_FC_SPEED_3200) != 0)) - return 1; - - return 0; -} - -/* - * XXX roth - * some CR cables do not list an SFP+ active/passive bit, - * but register as active or passive via infiniband instead - */ - -static inline int -_sff8472_sfp_plus_passive(const uint8_t* idprom) -{ - if ((idprom[8] & SFF8472_CC8_SFP_PASSIVE) != 0) return 1; - - /* also allow pre-standard cables identifying as infiniband */ - if (_sff8472_inf_1x_cu_passive(idprom)) return 1; - - return 0; -} - -static inline int -_sff8472_sfp_plus_active(const uint8_t* idprom) -{ - if ((idprom[8] & SFF8472_CC8_SFP_ACTIVE) != 0) return 1; - - /* also allow pre-standard cables identifying as infiniband */ - if (_sff8472_inf_1x_cu_active(idprom)) return 1; - - return 0; -} - -/* - * XXX roth - * some pre-standard CR cables report a "wavelength" - * in byte 60, 61, pretending to be an optical module - */ - -#define _SFF8472_WAVELENGTH(idprom) \ - ((idprom[60] << 8) | idprom[61]) - -#define _SFF8472_COMPLIANCE_UNSPEC(idprom) \ - ((idprom[60] == 0) \ - && (idprom[61] == 0)) - -static inline int -_sff8472_compliance_passive_fc(const uint8_t* idprom) -{ - if (idprom[61] != 0) return 0; - - int byte = idprom[60]; - - if ((byte & SFF8471_CC60_FC_PI_4) == 0) return 0; - - /* no other wavelength-ish bits */ - byte &= ~SFF8471_CC60_FC_PI_4; - byte &= ~SFF8471_CC60_SFF8431; - if (byte != 0) return 0; - - return 1; -} - -static inline int -_sff8472_compliance_passive_sff(const uint8_t* idprom) -{ - if (idprom[61] != 0) return 0; - - int byte = idprom[60]; - - if ((byte & SFF8471_CC60_SFF8431) == 0) return 0; - - /* no other wavelength-ish bits */ - byte &= ~SFF8471_CC60_FC_PI_4; - byte &= ~SFF8471_CC60_SFF8431; - if (byte != 0) return 0; - - return 1; -} - -static inline int -_sff8472_compliance_active_fc(const uint8_t* idprom) -{ - if (idprom[61] != 0) return 0; - - int byte = idprom[60]; - - if (((byte & SFF8471_CC60_FC_PI_4) == 0) - && ((byte & SFF8471_CC60_FC_PI_4_LIMITING) == 0)) - return 0; - - /* no other wavelength-ish bits */ - byte &= ~SFF8471_CC60_FC_PI_4; - byte &= ~SFF8471_CC60_FC_PI_4_LIMITING; - byte &= ~SFF8471_CC60_SFF8431; - byte &= ~SFF8471_CC60_SFF8431_LIMITING; - if (byte != 0) return 0; - - if (idprom[61] != 0) return 0; - - return 1; -} - -static inline int -_sff8472_compliance_active_sff(const uint8_t* idprom) -{ - int byte = idprom[60]; - - if (((byte & SFF8471_CC60_SFF8431) == 0) - && ((byte & SFF8471_CC60_SFF8431_LIMITING) == 0)) - return 0; - - /* no other wavelength-ish bits */ - byte &= ~SFF8471_CC60_FC_PI_4; - byte &= ~SFF8471_CC60_FC_PI_4_LIMITING; - byte &= ~SFF8471_CC60_SFF8431; - byte &= ~SFF8471_CC60_SFF8431_LIMITING; - if (byte != 0) return 0; - - if (idprom[61] != 0) return 0; - - return 1; -} - -/* - * Cisco pre-standard CR cables - */ -static inline int -_sff8472_hack_cr(const uint8_t* idprom) -{ - /* vendor is 'OEM' */ - if (SFF_STRNCMP((char*)idprom+20, "OEM ", 4) != 0) return 0; - - /* model reads like 'SFP-H10GB-CU...' */ - if (SFF_STRNCMP((char*)idprom+40, "SFP-H10GB-CU", 12) != 0) return 0; - - /* S/N reads like 'CSC...' */ - if (SFF_STRNCMP((char*)idprom+68, "CSC", 3) != 0) return 0; - - /* - * congratulations, you have an expensive Cisco - * pre-standard CR cable. - */ - return 1; -} - -#define SFF8472_MEDIA_GBE_SX(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_SX) != 0) -#define SFF8472_MEDIA_GBE_LX(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_LX) != 0) -#define SFF8472_MEDIA_GBE_CX(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_CX) != 0) -#define SFF8472_MEDIA_GBE_T(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_T) != 0) - -#define SFF8472_MEDIA_CBE_LX(idprom) \ - ((idprom[6] & SFF8472_CC6_CBE_BASE_LX) != 0) -#define SFF8472_MEDIA_CBE_FX(idprom) \ - ((idprom[6] & SFF8472_CC6_CBE_BASE_FX) != 0) - -/* - * XXX roth - * ZR Finisar optics don't list any ethernet - * or FC compliance, but *do* identify as having a high bit rate - */ - -static inline int -_sff8472_bitrate_xge(const uint8_t *idprom) -{ - if (idprom[12] == 0) - return 0; - if (idprom[12] == 0xFF) - return 0; - long long br = (long long) idprom[12] * 100*1000000; - if (br > 10LL*1000*1000000) - return 1; - return 0; -} - -static inline int -_sff8472_bitrate_gbe(const uint8_t *idprom) -{ - if (idprom[12] == 0) - return 0; - if (idprom[12] == 0xFF) - return 0; - long long br = (long long) idprom[12] * 100*1000000; - if (br > 1LL*1000*1000000 && br < 5LL*1000*1000000) - return 1; - return 0; -} - -static inline int -_sff8472_length_sm(const uint8_t *idprom) -{ - if ((idprom[14] == 0) && (idprom[15] == 0)) return 0; - if (idprom[14] != 0) - return idprom[14] * 1000; - return idprom[15] * 100; -} - -static inline int -_sff8472_length_om2(const uint8_t *idprom) -{ - return idprom[16] * 10; -} - -static inline int -_sff8472_length_om1(const uint8_t *idprom) -{ - return idprom[17] * 10; -} - -static inline int -_sff8472_length_om4(const uint8_t *idprom) -{ - return idprom[18] * 10; -} - -static inline int -_sff8472_length_cu(const uint8_t *idprom) -{ - return idprom[18]; -} - -static inline int -_sff8472_length_om3(const uint8_t *idprom) -{ - return idprom[19] * 10; -} - -/* grab-bag to detect pre-standard CR media */ -static inline int -_sff8472_media_cr_passive(const uint8_t* idprom) -{ - int maybe = 0; - - if (_sff8472_inf_1x_cu_passive(idprom)) - maybe = 1; - else if (_sff8472_inf_1x(idprom)) - return 0; - - if (_sff8472_tech_fc_el(idprom)) - maybe = 1; - else if (_sff8472_tech_fc(idprom)) - return 0; - - if (idprom[4] != 0) return 0; - if (idprom[5] != 0) return 0; - /* - * XXX roth -- PAN-934 -- Tyco CR cable advertises 1000BASE-CX, - * presumably because it is a 2-wire cable - */ - if ((idprom[6] != SFF8472_CC6_GBE_BASE_CX) - && (idprom[6] != 0)) - return 0; - - if (_sff8472_sfp_plus_passive(idprom)) - maybe = 1; - - if (_sff8472_fc_media_tw(idprom)) - maybe = 1; - else if (_sff8472_fc_media(idprom)) - return 0; - - if (!_sff8472_fc_speed_ok(idprom)) - return 0; - - /* - * XXX roth -- PAN-934 -- once we relax the checks here - * for 1000BASE-CX, we need to make sure we don't accept any - * 1G cables... make sure the FC speed is specified, - * and is high enough. - */ - if ((idprom[6] == SFF8472_CC6_GBE_BASE_CX) - && !_sff8472_tech_fc(idprom) - && !_sff8472_bitrate_xge(idprom)) - return 0; - if ((idprom[6] == SFF8472_CC6_GBE_BASE_CX) - && _sff8472_tech_fc(idprom) - && !_sff8472_fc_speed_10g(idprom)) - return 0; - - /* - * PAN-1233 -- cable identifies as 1000BASE-CX with a high BR - */ - if ((idprom[6] == SFF8472_CC6_GBE_BASE_CX) - && (_sff8472_length_cu(idprom) > 0) - && (_sff8472_bitrate_xge(idprom))) - maybe = 1; - - if (_sff8472_hack_cr(idprom)) - maybe = 1; - - if (maybe) { - if (!_sff8472_compliance_passive_fc(idprom) - && !_sff8472_compliance_passive_sff(idprom) - && (_SFF8472_WAVELENGTH(idprom) != 850) - && !_SFF8472_COMPLIANCE_UNSPEC(idprom) - && !_sff8472_hack_cr(idprom)) - return 0; - } - - return maybe; -} - -static inline int -_sff8472_media_cr_active(const uint8_t* idprom) -{ - int maybe = 0; - - if (_sff8472_inf_1x_cu_active(idprom)) - maybe = 1; - else if (_sff8472_inf_1x(idprom)) - return 0; - - if (_sff8472_tech_fc_el(idprom)) - maybe = 1; - else if (_sff8472_tech_fc(idprom)) - return 0; - - if (idprom[4] != 0) return 0; - if (idprom[5] != 0) return 0; - /* - * XXX roth -- PAN-1111 -- 3M CR cable advertises 1000BASE-CX, - * presumably because it is a 2-wire cable - */ - if ((idprom[6] != SFF8472_CC6_GBE_BASE_CX) - && (idprom[6] != 0)) - return 0; - - if (_sff8472_sfp_plus_active(idprom)) - maybe = 1; - - if (_sff8472_fc_media_tw(idprom)) - maybe = 1; - else if (_sff8472_fc_media(idprom)) - return 0; - - if (!_sff8472_fc_speed_ok(idprom)) - return 0; - - /* - * XXX roth -- PAN-1111 -- yet another CR cable - * that advertises as 1000BASE-CX. - */ - if ((idprom[6] == SFF8472_CC6_GBE_BASE_CX) - && !_sff8472_tech_fc(idprom)) - return 0; - if ((idprom[6] == SFF8472_CC6_GBE_BASE_CX) - && _sff8472_tech_fc(idprom) - && !_sff8472_fc_speed_10g(idprom)) - return 0; - - if (maybe) { - if (!_sff8472_compliance_active_fc(idprom) - && !_sff8472_compliance_active_sff(idprom) - && !_SFF8472_COMPLIANCE_UNSPEC(idprom)) - return 0; - } - - return maybe; -} - -static inline int -_sff8472_media_zr(const uint8_t *idprom) -{ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - /* should be LC connector */ - if ((idprom[2] & SFF8472_CONN_LC) == 0) return 0; - - /* do not advertise any other infiniband or ethernet features */ - if (_sff8472_inf_1x(idprom)) return 0; - if (SFF8472_MEDIA_XGE_SR(idprom)) return 0; - if (SFF8472_MEDIA_XGE_LR(idprom)) return 0; - if (SFF8472_MEDIA_XGE_LRM(idprom)) return 0; - if (SFF8472_MEDIA_XGE_ER(idprom)) return 0; - - /* JSM-01ZWBA1 from JDSU does not have FC field(idprom[7~9] programmed, - * so check other fields first */ - /* at least 10GbE */ - if (!_sff8472_bitrate_xge(idprom)) return 0; - - /* JSM-01ZWBA1 from JDSU is 80km */ - if (idprom[14] == 80) - return 1; - - /* advertise media and tech as per FC */ - if (_sff8472_tech_fc_ll(idprom) == 0) return 0; - if (_sff8472_fc_media_sm(idprom) == 0) return 0; - /* at least 40km of single-mode */ - if ((idprom[14] > 40) && (idprom[15] == 0xff)) - return 1; - - return 0; - -} - -static inline int -_sff8472_media_srlite(const uint8_t *idprom) -{ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - /* should be LC connector */ - if ((idprom[2] & SFF8472_CONN_LC) == 0) return 0; - - /* do not advertise any other infiniband or ethernet features */ - if (_sff8472_inf_1x(idprom)) return 0; - if (SFF8472_MEDIA_XGE_SR(idprom)) return 0; - if (SFF8472_MEDIA_XGE_LR(idprom)) return 0; - if (SFF8472_MEDIA_XGE_LRM(idprom)) return 0; - if (SFF8472_MEDIA_XGE_ER(idprom)) return 0; - - /* do not advertise FC media */ - if (_sff8472_fc_media(idprom)) return 0; - if (_sff8472_tech_fc(idprom)) return 0; - - /* at least 10GbE */ - if (!_sff8472_bitrate_xge(idprom)) return 0; - - /* no single-mode fiber length */ - if (idprom[14] != 0) return 0; - if (idprom[15] != 0) return 0; - - /* some non-zero multi-mode fiber length */ - if (_sff8472_length_sm(idprom)) return 0; - if (_sff8472_length_om1(idprom)) return 1; - if (_sff8472_length_om2(idprom)) return 1; - if (_sff8472_length_om3(idprom)) return 1; - if (_sff8472_length_om4(idprom)) return 1; - return 0; - -} - -/* - * some modules (e.g. Finisar FTRJ8519P1BNL-B1, 1G Ethernet / - * 2G fiber) mis-identify as supporting 10G *and* 1G; - * in this case we do not want to enable 10G mode; - * we can verify this by looking at the FC speed field - */ - -static inline int -_sff8472_media_gbe_sx_fc_hack(const uint8_t *idprom) -{ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - /* module should report as SX */ - if (!SFF8472_MEDIA_GBE_SX(idprom)) return 0; - - /* module erroneously reports as 10G */ - if (!SFF8472_MEDIA_XGE_SR(idprom) - || !SFF8472_MEDIA_XGE_LR(idprom) - || !SFF8472_MEDIA_XGE_LRM(idprom) - || !SFF8472_MEDIA_XGE_ER(idprom)) return 0; - - /* module reports as 1G FC, but not 10G */ - if (_sff8472_fc_speed_1g(idprom) - && !_sff8472_fc_speed_10g(idprom)) - return 1; - else - return 0; -} - -static inline int -_sff8472_media_gbe_lx_fc_hack(const uint8_t *idprom) -{ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - /* module should report as LX */ - if (!SFF8472_MEDIA_GBE_LX(idprom)) return 0; - - /* module erroneously reports as 10G */ - if (!SFF8472_MEDIA_XGE_SR(idprom) - || !SFF8472_MEDIA_XGE_LR(idprom) - || !SFF8472_MEDIA_XGE_LRM(idprom) - || !SFF8472_MEDIA_XGE_ER(idprom)) return 0; - - /* module reports as 1G FC, but not 10G */ - if (_sff8472_fc_speed_1g(idprom) - && !_sff8472_fc_speed_10g(idprom)) - return 1; - else - return 0; -} - -/* - * Try to identify active SR cables, like breakouts - */ -static inline int -_sff8472_sfp_10g_aoc(const uint8_t *idprom) -{ - /* module should be sfp */ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - /* should report any normal specs */ - if (_sff8472_fc_media(idprom)) return 0; - if (_sff8472_tech_fc(idprom)) return 0; - - if (SFF8472_MEDIA_XGE_SR(idprom)) return 0; - if (SFF8472_MEDIA_XGE_LR(idprom)) return 0; - if (SFF8472_MEDIA_XGE_LRM(idprom)) return 0; - if (SFF8472_MEDIA_XGE_ER(idprom)) return 0; - - if (SFF8472_MEDIA_GBE_SX(idprom)) return 0; - if (SFF8472_MEDIA_GBE_LX(idprom)) return 0; - if (SFF8472_MEDIA_GBE_CX(idprom)) return 0; - if (SFF8472_MEDIA_GBE_T(idprom)) return 0; - if (SFF8472_MEDIA_CBE_LX(idprom)) return 0; - if (SFF8472_MEDIA_CBE_FX(idprom)) return 0; - - /* should be active */ - if (!_sff8472_sfp_plus_active(idprom)) return 0; - - /* should not report passive cable compliance */ - if (_sff8472_compliance_passive_fc(idprom)) return 0; - if (_sff8472_compliance_passive_sff(idprom)) return 0; - - /* should report active FC or SFF */ - if (!_sff8472_compliance_active_fc(idprom) - && !_sff8472_compliance_active_sff(idprom)) - return 0; - - /* nominal BR should be 10g */ - if (!_sff8472_bitrate_xge(idprom)) return 0; - - /* should be a short-ish cable */ - if (_sff8472_length_sm(idprom)) return 0; - if (_sff8472_length_om1(idprom)) return 0; - if (_sff8472_length_om2(idprom)) return 0; - if (_sff8472_length_om3(idprom)) return 0; - - if (!_sff8472_length_cu(idprom)) return 0; - if (_sff8472_length_cu(idprom) > 30) return 0; - - /* congratulations, probably an active optical cable */ - return 1; -} - -/* - * Infer cable length for fixed-length (AOC) optical cables - */ -static inline int -_sff8472_sfp_10g_aoc_length(const uint8_t *idprom) -{ - /* module should be sfp */ - if (!SFF8472_MODULE_SFP(idprom)) return -1; - - /* does not report a fiber length, but does report a cable length */ - if (_sff8472_length_sm(idprom) > 0) return -1; - if (_sff8472_length_om1(idprom) > 0) return -1; - if (_sff8472_length_om2(idprom) > 0) return -1; - if (_sff8472_length_om3(idprom) > 0) return -1; - if (_sff8472_length_cu(idprom) > 0) - return _sff8472_length_cu(idprom); - - return -1; -} - -/* - * SFP28 - */ -static inline int -_sff8472_media_sfp28_cr(const uint8_t* idprom) -{ - /* module should be sfp */ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) == 0) return 0; - if (idprom[12] == 0xFF) return 1; - - return 0; -} - -static inline int -_sff8472_media_sfp28_sr(const uint8_t* idprom) -{ - /* module should be sfp */ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - if (idprom[12] != 0xFF) return 0; - if (idprom[36] == SFF8472_CC36_100G_25G_SR) return 1; - - return 0; -} - -static inline int -_sff8472_media_sfp28_lr(const uint8_t* idprom) -{ - /* module should be sfp */ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - if (idprom[12] != 0xFF) return 0; - if (idprom[36] == SFF8472_CC36_100G_25G_LR) return 1; - - return 0; -} - -static inline int -_sff8472_media_sfp28_aoc(const uint8_t* idprom) -{ - /* module should be sfp */ - if (!SFF8472_MODULE_SFP(idprom)) return 0; - - if (idprom[12] != 0xFF) return 0; - if ((idprom[36] == SFF8472_CC36_100G_25G_AOC_1) || - (idprom[36] == SFF8472_CC36_100G_25G_AOC_2)) { - return 1; - } - - return 0; -} -#endif diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/8636.h b/packages/base/any/onlp/src/sff/module/inc/sff/8636.h deleted file mode 100644 index eafc5f69..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/8636.h +++ /dev/null @@ -1,187 +0,0 @@ -/********************************************************************** - * - * 8636.h - * - * idprom defintions for QSFP+ modules. - * - **********************************************************************/ - -#ifndef __SFF_8636_H__ -#define __SFF_8636_H__ - -#include -#include "sff/8472.h" - -/* identifier, bytes 128 page 0 (also byte 0) */ - -#define SFF8636_IDENT_UNKNOWN SFF8472_IDENT_UNKNOWN -#define SFF8636_IDENT_GBIC SFF8472_IDENT_GBIC -#define SFF8636_IDENT_BASEBOARD SFF8472_IDENT_BASEBOARD -#define SFF8636_IDENT_SFP SFF8472_IDENT_SFP -#define SFF8636_IDENT_XBI SFF8472_IDENT_XBI -#define SFF8636_IDENT_XENPAK SFF8472_IDENT_XENPAK -#define SFF8636_IDENT_XFP SFF8472_IDENT_XFP -#define SFF8636_IDENT_XFF SFF8472_IDENT_XFF -#define SFF8636_IDENT_XFPE SFF8472_IDENT_XFPE -#define SFF8636_IDENT_XPAK SFF8472_IDENT_XPAK -#define SFF8636_IDENT_X2 SFF8472_IDENT_X2 -#define SFF8636_IDENT_DWDM_SFP SFF8472_IDENT_DWDM_SFP -#define SFF8636_IDENT_QSFP SFF8472_IDENT_QSFP - -/* additional values from this spec */ -#define SFF8636_IDENT_QSFP_PLUS 0x0D -#define SFF8636_IDENT_QSFP28 0x11 - -#define SFF8636_MODULE_QSFP28(idprom) \ - (idprom[0] == SFF8636_IDENT_QSFP28) - -#define SFF8636_RX1_PWR(idprom) \ - (idprom[34] << 8 | idprom[34 + 1]) -#define SFF8636_RX2_PWR(idprom) \ - (idprom[36] << 8 | idprom[36 + 1]) -#define SFF8636_RX3_PWR(idprom) \ - (idprom[38] << 8 | idprom[38 + 1]) -#define SFF8636_RX4_PWR(idprom) \ - (idprom[40] << 8 | idprom[40 + 1]) - -#define SFF8636_TX1_BIAS(idprom) \ - (idprom[42] << 8 | idprom[42 + 1]) -#define SFF8636_TX2_BIAS(idprom) \ - (idprom[44] << 8 | idprom[44 + 1]) -#define SFF8636_TX3_BIAS(idprom) \ - (idprom[46] << 8 | idprom[46 + 1]) -#define SFF8636_TX4_BIAS(idprom) \ - (idprom[48] << 8 | idprom[48 + 1]) - -#define SFF8636_TX1_PWR(idprom) \ - (idprom[50] << 8 | idprom[50 + 1]) -#define SFF8636_TX2_PWR(idprom) \ - (idprom[52] << 8 | idprom[52 + 1]) -#define SFF8636_TX3_PWR(idprom) \ - (idprom[54] << 8 | idprom[54 + 1]) -#define SFF8636_TX4_PWR(idprom) \ - (idprom[56] << 8 | idprom[56 + 1]) - -#define SFF8636_SFP_VOLT(idprom) \ - (idprom[26] << 8 | idprom[26 + 1]) -#define SFF8636_SFP_TEMP(idprom) \ - (idprom[22] << 8 | idprom[22 + 1]) - -/* connector value, byte 130 page 0 */ - -#define SFF8636_CONN_UNKNOWN SFF8472_CONN_UNKNOWN -#define SFF8636_CONN_SC SFF8472_CONN_SC -#define SFF8636_CONN_FC1_CU SFF8472_CONN_FC1_CU -#define SFF8636_CONN_FC2_CU SFF8472_CONN_FC2_CU -#define SFF8636_CONN_BNC SFF8472_CONN_BNC -#define SFF8636_CONN_FC_COAX SFF8472_CONN_FC_COAX -#define SFF8636_CONN_FJ SFF8472_CONN_FJ -#define SFF8636_CONN_LC SFF8472_CONN_LC -#define SFF8636_CONN_MT_RJ SFF8472_CONN_MT_RJ -#define SFF8636_CONN_MU SFF8472_CONN_MU -#define SFF8636_CONN_SG SFF8472_CONN_SG -#define SFF8636_CONN_SI_PIGTAIL SFF8472_CONN_SI_PIGTAIL -#define SFF8636_CONN_MPO SFF8472_CONN_MPO -#define SFF8636_CONN_HSSDC_II SFF8472_CONN_HSSDC_II -#define SFF8636_CONN_CU_PIGTAIL SFF8472_CONN_CU_PIGTAIL -#define SFF8636_CONN_RJ45 SFF8472_CONN_RJ45 - -/* addtional values from this spec */ -#define SFF8636_CONN_NONE 0x23 - -/* Amphenol QSFP, identified as "QSFP" (not "QSFP+") and copper - pigtail */ -#define SFF8636_MEDIA_40GE_CR(idprom) \ - (idprom[130] == SFF8636_CONN_CU_PIGTAIL) - -/* QSFP+ compliance codes, bytes 131-138 */ -#define SFF8636_CC131_EXTENDED 0x80 -#define SFF8636_CC131_XGE_BASE_LRM SFF8472_CC3_XGE_BASE_LRM -#define SFF8636_CC131_XGE_BASE_LR SFF8472_CC3_XGE_BASE_LR -#define SFF8636_CC131_XGE_BASE_SR SFF8472_CC3_XGE_BASE_SR -#define SFF8636_CC131_40GE_BASE_CR4 0x08 -#define SFF8636_CC131_40GE_BASE_SR4 0x04 -#define SFF8636_CC131_40GE_BASE_LR4 0x02 -#define SFF8636_CC131_40GE_ACTIVE 0x01 - -#define SFF8636_MEDIA_EXTENDED(idprom) \ - ((idprom[131] & SFF8636_CC131_EXTENDED) != 0) - -#define SFF8636_MEDIA_XGE_LRM(idprom) \ - ((idprom[131] & SFF8636_CC131_XGE_BASE_LRM) != 0) -#define SFF8636_MEDIA_XGE_LR(idprom) \ - ((idprom[131] & SFF8636_CC131_XGE_BASE_LR) != 0) -#define SFF8636_MEDIA_XGE_SR(idprom) \ - ((idprom[131] & SFF8636_CC131_XGE_BASE_SR) != 0) - -#define SFF8636_MEDIA_40GE_CR4(idprom) \ - ((idprom[131] & SFF8636_CC131_40GE_BASE_CR4) != 0) -#define SFF8636_MEDIA_40GE_SR4(idprom) \ - ((idprom[131] & SFF8636_CC131_40GE_BASE_SR4) != 0) -#define SFF8636_MEDIA_40GE_LR4(idprom) \ - ((idprom[131] & SFF8636_CC131_40GE_BASE_LR4) != 0) -#define SFF8636_MEDIA_40GE_ACTIVE(idprom) \ - ((idprom[131] & SFF8636_CC131_40GE_ACTIVE) != 0) - -#define SFF8636_MEDIA_NONE(idprom) \ - (idprom[131] == 0) - -#define SFF8636_CC192_100GE_AOC 0x01 -#define SFF8636_CC192_100GE_SR4 0x02 -#define SFF8636_CC192_100GE_LR4 0x03 -#define SFF8636_CC192_100GE_CWDM4 0x06 -#define SFF8636_CC192_100GE_PSM4 0x07 -#define SFF8636_CC192_100GE_ACC 0x08 -#define SFF8636_CC192_100GE_CR4 0x0B -#define SFF8636_CC192_25GE_CR_S 0x0C -#define SFF8636_CC192_25GE_CR_N 0x0D -#define SFF8636_CC192_40GE_SWDM4 0x1F -#define SFF8636_CC192_100GE_SWDM4 0x20 - -#define SFF8636_MEDIA_100GE_AOC(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_AOC) -#define SFF8636_MEDIA_100GE_SR4(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_SR4) -#define SFF8636_MEDIA_100GE_LR4(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_LR4) -#define SFF8636_MEDIA_100GE_CWDM4(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_CWDM4) -#define SFF8636_MEDIA_100GE_PSM4(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_PSM4) -#define SFF8636_MEDIA_100GE_CR4(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_CR4) -#define SFF8636_MEDIA_100GE_SWDM4(idprom) \ - (idprom[192] == SFF8636_CC192_100GE_SWDM4) -#define SFF8636_MEDIA_40GE_SWDM4(idprom) \ - (idprom[192] == SFF8636_CC192_40GE_SWDM4) -#define SFF8636_MEDIA_25GE_CR_S(idprom) \ - (idprom[192] == SFF8636_CC192_25GE_CR_S) -#define SFF8636_MEDIA_25GE_CR_N(idprom) \ - (idprom[192] == SFF8636_CC192_25GE_CR_N) - -#define SFF8636_RX_PWR_TYPE_MASK 0x08 -#define SFF8636_DOM_GET_RXPWR_TYPE(idprom) \ - (idprom[220] & SFF8636_RX_PWR_TYPE_MASK) -#define SFF8636_TX_PWR_SUPPORT_MASK 0x04 -#define SFF8636_DOM_GET_TXPWR_SUPPORT(idprom) \ - (idprom[220] & SFF8636_TX_PWR_SUPPORT_MASK) - -/* - * Infer cable length for fixed-length (AOC) optical cables - * - * XXX roth -- may also be able to cook up a rule for SFP+ cables too. - */ -static inline int -_sff8636_qsfp28_100g_aoc_length(const uint8_t *idprom) -{ - /* module should be qsfp28 */ - if (!SFF8636_MODULE_QSFP28(idprom)) - return -1; - - /* no separable connector -- likely active */ - if (idprom[130] != SFF8636_CONN_NONE) return -1; - - return idprom[146]; -} - -#endif /* __SFF_8636_H__ */ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff.h b/packages/base/any/onlp/src/sff/module/inc/sff/sff.h deleted file mode 100644 index 0101cfb3..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff.h +++ /dev/null @@ -1,388 +0,0 @@ -/************************************************************ - * - * - * Copyright 2014, 2015 Big Switch Networks, Inc. - * - * Licensed under the Eclipse Public License, Version 1.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.eclipse.org/legal/epl-v10.html - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the - * License. - * - * - ************************************************************ - * - * - * - ***********************************************************/ -#ifndef __SFF_SFF_H__ -#define __SFF_SFF_H__ - -#include -#include - -#include - -/* */ -/** sff_media_type */ -typedef enum sff_media_type_e { - SFF_MEDIA_TYPE_COPPER, - SFF_MEDIA_TYPE_FIBER, - SFF_MEDIA_TYPE_LAST = SFF_MEDIA_TYPE_FIBER, - SFF_MEDIA_TYPE_COUNT, - SFF_MEDIA_TYPE_INVALID = -1, -} sff_media_type_t; - -/** Strings macro. */ -#define SFF_MEDIA_TYPE_STRINGS \ -{\ - "COPPER", \ - "FIBER", \ -} -/** Enum names. */ -const char* sff_media_type_name(sff_media_type_t e); - -/** Enum values. */ -int sff_media_type_value(const char* str, sff_media_type_t* e, int substr); - -/** Enum descriptions. */ -const char* sff_media_type_desc(sff_media_type_t e); - -/** validator */ -#define SFF_MEDIA_TYPE_VALID(_e) \ - ( (0 <= (_e)) && ((_e) <= SFF_MEDIA_TYPE_FIBER)) - -/** sff_media_type_map table. */ -extern aim_map_si_t sff_media_type_map[]; -/** sff_media_type_desc_map table. */ -extern aim_map_si_t sff_media_type_desc_map[]; - -/** sff_module_caps */ -typedef enum sff_module_caps_e { - SFF_MODULE_CAPS_F_100 = 1, - SFF_MODULE_CAPS_F_1G = 2, - SFF_MODULE_CAPS_F_10G = 4, - SFF_MODULE_CAPS_F_25G = 8, - SFF_MODULE_CAPS_F_40G = 16, - SFF_MODULE_CAPS_F_100G = 32, -} sff_module_caps_t; - -/** Enum names. */ -const char* sff_module_caps_name(sff_module_caps_t e); - -/** Enum values. */ -int sff_module_caps_value(const char* str, sff_module_caps_t* e, int substr); - -/** Enum descriptions. */ -const char* sff_module_caps_desc(sff_module_caps_t e); - -/** Enum validator. */ -int sff_module_caps_valid(sff_module_caps_t e); - -/** validator */ -#define SFF_MODULE_CAPS_VALID(_e) \ - (sff_module_caps_valid((_e))) - -/** sff_module_caps_map table. */ -extern aim_map_si_t sff_module_caps_map[]; -/** sff_module_caps_desc_map table. */ -extern aim_map_si_t sff_module_caps_desc_map[]; - -/** sff_module_type */ -typedef enum sff_module_type_e { - SFF_MODULE_TYPE_100G_AOC, - SFF_MODULE_TYPE_100G_BASE_CR4, - SFF_MODULE_TYPE_100G_BASE_SR4, - SFF_MODULE_TYPE_100G_BASE_LR4, - SFF_MODULE_TYPE_100G_CWDM4, - SFF_MODULE_TYPE_100G_PSM4, - SFF_MODULE_TYPE_100G_SWDM4, - SFF_MODULE_TYPE_40G_BASE_CR4, - SFF_MODULE_TYPE_40G_BASE_SR4, - SFF_MODULE_TYPE_40G_BASE_LR4, - SFF_MODULE_TYPE_40G_BASE_LM4, - SFF_MODULE_TYPE_40G_BASE_ACTIVE, - SFF_MODULE_TYPE_40G_BASE_CR, - SFF_MODULE_TYPE_40G_BASE_SR2, - SFF_MODULE_TYPE_40G_BASE_SM4, - SFF_MODULE_TYPE_40G_BASE_ER4, - SFF_MODULE_TYPE_25G_BASE_CR, - SFF_MODULE_TYPE_25G_BASE_SR, - SFF_MODULE_TYPE_25G_BASE_LR, - SFF_MODULE_TYPE_25G_BASE_AOC, - SFF_MODULE_TYPE_10G_BASE_SR, - SFF_MODULE_TYPE_10G_BASE_LR, - SFF_MODULE_TYPE_10G_BASE_LRM, - SFF_MODULE_TYPE_10G_BASE_ER, - SFF_MODULE_TYPE_10G_BASE_CR, - SFF_MODULE_TYPE_10G_BASE_SX, - SFF_MODULE_TYPE_10G_BASE_LX, - SFF_MODULE_TYPE_10G_BASE_ZR, - SFF_MODULE_TYPE_10G_BASE_SRL, - SFF_MODULE_TYPE_1G_BASE_SX, - SFF_MODULE_TYPE_1G_BASE_LX, - SFF_MODULE_TYPE_1G_BASE_ZX, - SFF_MODULE_TYPE_1G_BASE_CX, - SFF_MODULE_TYPE_1G_BASE_T, - SFF_MODULE_TYPE_100_BASE_LX, - SFF_MODULE_TYPE_100_BASE_FX, - SFF_MODULE_TYPE_4X_MUX, - SFF_MODULE_TYPE_LAST = SFF_MODULE_TYPE_4X_MUX, - SFF_MODULE_TYPE_COUNT, - SFF_MODULE_TYPE_INVALID = -1, -} sff_module_type_t; - -/** Strings macro. */ -#define SFF_MODULE_TYPE_STRINGS \ -{\ - "100G_AOC", \ - "100G_BASE_CR4", \ - "100G_BASE_SR4", \ - "100G_BASE_LR4", \ - "100G_CWDM4", \ - "100G_PSM4", \ - "100G_SWDM4", \ - "40G_BASE_CR4", \ - "40G_BASE_SR4", \ - "40G_BASE_LR4", \ - "40G_BASE_LM4", \ - "40G_BASE_ACTIVE", \ - "40G_BASE_CR", \ - "40G_BASE_SR2", \ - "40G_BASE_SM4", \ - "40G_BASE_ER4", \ - "25G_BASE_CR", \ - "25G_BASE_SR", \ - "25G_BASE_LR", \ - "25G_BASE_AOC", \ - "10G_BASE_SR", \ - "10G_BASE_LR", \ - "10G_BASE_LRM", \ - "10G_BASE_ER", \ - "10G_BASE_CR", \ - "10G_BASE_SX", \ - "10G_BASE_LX", \ - "10G_BASE_ZR", \ - "10G_BASE_SRL", \ - "1G_BASE_SX", \ - "1G_BASE_LX", \ - "1G_BASE_ZX", \ - "1G_BASE_CX", \ - "1G_BASE_T", \ - "100_BASE_LX", \ - "100_BASE_FX", \ - "4X_MUX", \ -} -/** Enum names. */ -const char* sff_module_type_name(sff_module_type_t e); - -/** Enum values. */ -int sff_module_type_value(const char* str, sff_module_type_t* e, int substr); - -/** Enum descriptions. */ -const char* sff_module_type_desc(sff_module_type_t e); - -/** validator */ -#define SFF_MODULE_TYPE_VALID(_e) \ - ( (0 <= (_e)) && ((_e) <= SFF_MODULE_TYPE_4X_MUX)) - -/** sff_module_type_map table. */ -extern aim_map_si_t sff_module_type_map[]; -/** sff_module_type_desc_map table. */ -extern aim_map_si_t sff_module_type_desc_map[]; - -/** sff_sfp_type */ -typedef enum sff_sfp_type_e { - SFF_SFP_TYPE_SFP, - SFF_SFP_TYPE_QSFP, - SFF_SFP_TYPE_QSFP_PLUS, - SFF_SFP_TYPE_QSFP28, - SFF_SFP_TYPE_SFP28, - SFF_SFP_TYPE_LAST = SFF_SFP_TYPE_SFP28, - SFF_SFP_TYPE_COUNT, - SFF_SFP_TYPE_INVALID = -1, -} sff_sfp_type_t; - -/** Strings macro. */ -#define SFF_SFP_TYPE_STRINGS \ -{\ - "SFP", \ - "QSFP", \ - "QSFP_PLUS", \ - "QSFP28", \ - "SFP28", \ -} -/** Enum names. */ -const char* sff_sfp_type_name(sff_sfp_type_t e); - -/** Enum values. */ -int sff_sfp_type_value(const char* str, sff_sfp_type_t* e, int substr); - -/** Enum descriptions. */ -const char* sff_sfp_type_desc(sff_sfp_type_t e); - -/** validator */ -#define SFF_SFP_TYPE_VALID(_e) \ - ( (0 <= (_e)) && ((_e) <= SFF_SFP_TYPE_SFP28)) - -/** sff_sfp_type_map table. */ -extern aim_map_si_t sff_sfp_type_map[]; -/** sff_sfp_type_desc_map table. */ -extern aim_map_si_t sff_sfp_type_desc_map[]; -/* */ - -/** - * @brief Determine the SFP type (from the idprom data). - * @param idprom The SFF idprom. - */ -sff_sfp_type_t sff_sfp_type_get(const uint8_t* idprom); - -/** - * @brief Determine the SFF module type (from the idprom data). - * @param idprom The SFF idprom. - */ -sff_module_type_t sff_module_type_get(const uint8_t* idprom); - -/** - * @brief Determine the SFF Media type (from the idprom data)./ - * @param idprom The SFF idprom. - */ -sff_media_type_t sff_media_type_get(sff_module_type_t mt); - -/** - * @brief Determine the SFF module capabilities (from the idprom data). - * @param idprom The SFF idprom. - * @param caps [out] Receives the capabilities. - * @returns 0 on successful parse. - * @returns < 0 on error. - */ -int sff_module_caps_get(sff_module_type_t mt, uint32_t* caps); - - -typedef struct sff_info_s { - - /** Vendor Name */ - char vendor[17]; - - /** Model Number */ - char model[17]; - - /** Serial Number */ - char serial[17]; - - /** SFP Type */ - sff_sfp_type_t sfp_type; - - /** SFP Type Name */ - const char* sfp_type_name; - - /** Module Type */ - sff_module_type_t module_type; - - /** Module Type Name */ - const char* module_type_name; - - /** Media Type */ - sff_media_type_t media_type; - - /** Media Type Name */ - const char* media_type_name; - - /** Capabilities */ - sff_module_caps_t caps; - - /** Cable length, if available */ - int length; - char length_desc[16]; -} sff_info_t; - -/** - * SFF Module Information Structure - */ -typedef struct sff_eeprom_s { - /** Raw eeprom data */ - uint8_t eeprom[256]; - - /** computed checksums for eeprom contents */ - uint8_t cc_base; - uint8_t cc_ext; - - /** Whether this EEPROM was successfully parsed and identified. */ - int identified; - - /** Parsed SFF Information */ - sff_info_t info; - -} sff_eeprom_t; - - -/** - * @brief Initialize an SFF module information structure. - * @param rv [out] Receives the data. - * @param eeprom Raw EEPROM data. - * @note if eeprom is != NULL it will be copied into rv->eeprom first. - * @note if eeprom is NULL it is assumed the rv->eeprom buffer - * has already been initialized. - */ -int sff_eeprom_parse(sff_eeprom_t* rv, uint8_t* eeprom); - -/** - * @brief Initialize an SFF module information structure from a file. - * @param rv [out] Receives thh data. - * @param fname The filename. - */ -int sff_eeprom_parse_file(sff_eeprom_t* rv, const char* fname); - -/** - * @brief Clear an sff_eeprom_t structure. - * @param eeprom The eeprom structure. - */ -void sff_eeprom_invalidate(sff_eeprom_t *info); - -/** - * @brief Determine if this is a valid SFP - * (whether or not we can parse it) - * @param info The info structure. - * @param verbose Whether to report errors on invalid contents. - */ -int sff_eeprom_validate(sff_eeprom_t *info, int verbose); - -/** - * @brief Show an sff info structure. - * @param info The info structure. - * @param pvs The output pvs. - */ -void sff_info_show(sff_info_t* info, aim_pvs_t* pvs); - -/** - * @brief Initialize an info structure based on module type. - */ -int sff_info_init(sff_info_t* pinfo, sff_module_type_t type, - const char* vendor, const char* model, const char* serial, - int length); - - -int sff_info_from_module_type(sff_info_t* info, sff_sfp_type_t st, - sff_module_type_t mt); - -#ifdef DEPENDMODULE_INCLUDE_CJSON_UTIL - -#include - -/** - * @brief Return a JSON representation of the sff_info_t structure. - * @param cj Add keys this object. If NULL a new object is created. - * @param info The info structure. - */ -cJSON* sff_info_json(cJSON* cj, sff_info_t* info); - -#endif /* DEPENDMODULE_CJSON_UTIL */ - -#endif /* __SFF_SFF_H__ */ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff.x b/packages/base/any/onlp/src/sff/module/inc/sff/sff.x deleted file mode 100644 index 0b211647..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff.x +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include - -/* */ -#ifdef SFF_MEDIA_TYPE_ENTRY -SFF_MEDIA_TYPE_ENTRY(100G_AOC, 100G-AOC) -SFF_MEDIA_TYPE_ENTRY(100G_BASE_CR4, 100GBASE-CR4) -SFF_MEDIA_TYPE_ENTRY(100G_BASE_SR4, 100GBASE-SR4) -SFF_MEDIA_TYPE_ENTRY(100G_BASE_LR4, 100GBASE-LR4) -SFF_MEDIA_TYPE_ENTRY(100G_CWDM4, 100G-CWDM4) -SFF_MEDIA_TYPE_ENTRY(100G_PSM4, 100G-PSM4) -SFF_MEDIA_TYPE_ENTRY(100G_SWDM4, 100G-SWDM4) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_CR4, 40GBASE-CR4) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_SR4, 40GBASE-SR4) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_LR4, 40GBASE-LR4) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_LM4, 40GBASE-LM4) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_ACTIVE, 40GBASE-ACTIVE) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_CR, 40GBASE-CR) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_SR2, 40GBASE-SR2) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_SM4, 40GBASE-SM4) -SFF_MEDIA_TYPE_ENTRY(40G_BASE_ER4, 40GBASE-ER4) -SFF_MEDIA_TYPE_ENTRY(25G_BASE_CR, 25GBASE-CR) -SFF_MEDIA_TYPE_ENTRY(25G_BASE_SR, 25GBASE-SR) -SFF_MEDIA_TYPE_ENTRY(25G_BASE_LR, 25GBASE-LR) -SFF_MEDIA_TYPE_ENTRY(25G_BASE_AOC, 25GBASE-AOC) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_SR, 10GBASE-SR) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_LRM, 10GBASE-LRM) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_ER, 10GBASE-ER) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_CR, 10GBASE-CR) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_SX, 10GBASE-SX) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_LX, 10GBASE-LX) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_ZR, 10GBASE-ZR) -SFF_MEDIA_TYPE_ENTRY(10G_BASE_SRL, 10GBASE-SRL) -SFF_MEDIA_TYPE_ENTRY(1G_BASE_SX, 1GBASE-SX) -SFF_MEDIA_TYPE_ENTRY(1G_BASE_LX, 1GBASE-LX) -SFF_MEDIA_TYPE_ENTRY(1G_BASE_ZX, 1GBASE-ZX) -SFF_MEDIA_TYPE_ENTRY(1G_BASE_CX, 1GBASE-CX) -SFF_MEDIA_TYPE_ENTRY(1G_BASE_T, 1GBASE-T) -SFF_MEDIA_TYPE_ENTRY(100_BASE_LX, 100BASE-LX) -SFF_MEDIA_TYPE_ENTRY(100_BASE_FX, 100BASE-FX) -SFF_MEDIA_TYPE_ENTRY(4X_MUX, 4X-MUX) -#undef SFF_MEDIA_TYPE_ENTRY -#endif - -#ifdef SFF_MODULE_CAP_ENTRY -SFF_MODULE_CAP_ENTRY(F_100, 1) -SFF_MODULE_CAP_ENTRY(F_1G, 2) -SFF_MODULE_CAP_ENTRY(F_10G, 4) -SFF_MODULE_CAP_ENTRY(F_25G, 8) -SFF_MODULE_CAP_ENTRY(F_40G, 16) -SFF_MODULE_CAP_ENTRY(F_100G, 32) -#undef SFF_MODULE_CAP_ENTRY -#endif - -#ifdef SFF_MODULE_TYPE_ENTRY -SFF_MODULE_TYPE_ENTRY(100G_AOC, 100G-AOC) -SFF_MODULE_TYPE_ENTRY(100G_BASE_CR4, 100GBASE-CR4) -SFF_MODULE_TYPE_ENTRY(100G_BASE_SR4, 100GBASE-SR4) -SFF_MODULE_TYPE_ENTRY(100G_BASE_LR4, 100GBASE-LR4) -SFF_MODULE_TYPE_ENTRY(100G_CWDM4, 100G-CWDM4) -SFF_MODULE_TYPE_ENTRY(100G_PSM4, 100G-PSM4) -SFF_MODULE_TYPE_ENTRY(100G_SWDM4, 100G-SWDM4) -SFF_MODULE_TYPE_ENTRY(40G_BASE_CR4, 40GBASE-CR4) -SFF_MODULE_TYPE_ENTRY(40G_BASE_SR4, 40GBASE-SR4) -SFF_MODULE_TYPE_ENTRY(40G_BASE_LR4, 40GBASE-LR4) -SFF_MODULE_TYPE_ENTRY(40G_BASE_LM4, 40GBASE-LM4) -SFF_MODULE_TYPE_ENTRY(40G_BASE_ACTIVE, 40GBASE-ACTIVE) -SFF_MODULE_TYPE_ENTRY(40G_BASE_CR, 40GBASE-CR) -SFF_MODULE_TYPE_ENTRY(40G_BASE_SR2, 40GBASE-SR2) -SFF_MODULE_TYPE_ENTRY(40G_BASE_SM4, 40GBASE-SM4) -SFF_MODULE_TYPE_ENTRY(40G_BASE_ER4, 40GBASE-ER4) -SFF_MODULE_TYPE_ENTRY(25G_BASE_CR, 25GBASE-CR) -SFF_MODULE_TYPE_ENTRY(25G_BASE_SR, 25GBASE-SR) -SFF_MODULE_TYPE_ENTRY(25G_BASE_LR, 25GBASE-LR) -SFF_MODULE_TYPE_ENTRY(25G_BASE_AOC, 25GBASE-AOC) -SFF_MODULE_TYPE_ENTRY(10G_BASE_SR, 10GBASE-SR) -SFF_MODULE_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR) -SFF_MODULE_TYPE_ENTRY(10G_BASE_LRM, 10GBASE-LRM) -SFF_MODULE_TYPE_ENTRY(10G_BASE_ER, 10GBASE-ER) -SFF_MODULE_TYPE_ENTRY(10G_BASE_CR, 10GBASE-CR) -SFF_MODULE_TYPE_ENTRY(10G_BASE_SX, 10GBASE-SX) -SFF_MODULE_TYPE_ENTRY(10G_BASE_LX, 10GBASE-LX) -SFF_MODULE_TYPE_ENTRY(10G_BASE_ZR, 10GBASE-ZR) -SFF_MODULE_TYPE_ENTRY(10G_BASE_SRL, 10GBASE-SRL) -SFF_MODULE_TYPE_ENTRY(1G_BASE_SX, 1GBASE-SX) -SFF_MODULE_TYPE_ENTRY(1G_BASE_LX, 1GBASE-LX) -SFF_MODULE_TYPE_ENTRY(1G_BASE_ZX, 1GBASE-ZX) -SFF_MODULE_TYPE_ENTRY(1G_BASE_CX, 1GBASE-CX) -SFF_MODULE_TYPE_ENTRY(1G_BASE_T, 1GBASE-T) -SFF_MODULE_TYPE_ENTRY(100_BASE_LX, 100BASE-LX) -SFF_MODULE_TYPE_ENTRY(100_BASE_FX, 100BASE-FX) -SFF_MODULE_TYPE_ENTRY(4X_MUX, 4X-MUX) -#undef SFF_MODULE_TYPE_ENTRY -#endif - -#ifdef SFF_SFP_TYPE_ENTRY -SFF_SFP_TYPE_ENTRY(SFP, SFP) -SFF_SFP_TYPE_ENTRY(QSFP, QSFP) -SFF_SFP_TYPE_ENTRY(QSFP_PLUS, QSFP+) -SFF_SFP_TYPE_ENTRY(QSFP28, QSFP28) -SFF_SFP_TYPE_ENTRY(SFP28, SFP28) -#undef SFF_SFP_TYPE_ENTRY -#endif -/* */ - -/* */ -#ifdef SFF_ENUMERATION_ENTRY -SFF_ENUMERATION_ENTRY(sff_media_type, "") -SFF_ENUMERATION_ENTRY(sff_module_caps, "") -SFF_ENUMERATION_ENTRY(sff_module_type, "") -SFF_ENUMERATION_ENTRY(sff_sfp_type, "") -#undef SFF_ENUMERATION_ENTRY -#endif -/* */ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff_config.h b/packages/base/any/onlp/src/sff/module/inc/sff/sff_config.h deleted file mode 100644 index c3e5d6de..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff_config.h +++ /dev/null @@ -1,157 +0,0 @@ -/**************************************************************************//** - * - * @file - * @brief sff Configuration Header - * - * @addtogroup sff-config - * @{ - * - *****************************************************************************/ -#ifndef __SFF_CONFIG_H__ -#define __SFF_CONFIG_H__ - -#ifdef GLOBAL_INCLUDE_CUSTOM_CONFIG -#include -#endif -#ifdef SFF_INCLUDE_CUSTOM_CONFIG -#include -#endif - -/* */ -#include -/** - * SFF_CONFIG_INCLUDE_LOGGING - * - * Include or exclude logging. */ - - -#ifndef SFF_CONFIG_INCLUDE_LOGGING -#define SFF_CONFIG_INCLUDE_LOGGING 1 -#endif - -/** - * SFF_CONFIG_LOG_OPTIONS_DEFAULT - * - * Default enabled log options. */ - - -#ifndef SFF_CONFIG_LOG_OPTIONS_DEFAULT -#define SFF_CONFIG_LOG_OPTIONS_DEFAULT AIM_LOG_OPTIONS_DEFAULT -#endif - -/** - * SFF_CONFIG_LOG_BITS_DEFAULT - * - * Default enabled log bits. */ - - -#ifndef SFF_CONFIG_LOG_BITS_DEFAULT -#define SFF_CONFIG_LOG_BITS_DEFAULT AIM_LOG_BITS_DEFAULT -#endif - -/** - * SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT - * - * Default enabled custom log bits. */ - - -#ifndef SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT -#define SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT 0 -#endif - -/** - * SFF_CONFIG_PORTING_STDLIB - * - * Default all porting macros to use the C standard libraries. */ - - -#ifndef SFF_CONFIG_PORTING_STDLIB -#define SFF_CONFIG_PORTING_STDLIB 1 -#endif - -/** - * SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS - * - * Include standard library headers for stdlib porting macros. */ - - -#ifndef SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS -#define SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS SFF_CONFIG_PORTING_STDLIB -#endif - -/** - * SFF_CONFIG_INCLUDE_UCLI - * - * Include generic uCli support. */ - - -#ifndef SFF_CONFIG_INCLUDE_UCLI -#define SFF_CONFIG_INCLUDE_UCLI 0 -#endif - -/** - * SFF_CONFIG_INCLUDE_SFF_TOOL - * - * Include the SFF tool main entry point. */ - - -#ifndef SFF_CONFIG_INCLUDE_SFF_TOOL -#define SFF_CONFIG_INCLUDE_SFF_TOOL 0 -#endif - -/** - * SFF_CONFIG_INCLUDE_EXT_CC_CHECK - * - * Include extended checksum verification. */ - - -#ifndef SFF_CONFIG_INCLUDE_EXT_CC_CHECK -#define SFF_CONFIG_INCLUDE_EXT_CC_CHECK 0 -#endif - -/** - * SFF_CONFIG_INCLUDE_DATABASE - * - * Include eeprom database. */ - - -#ifndef SFF_CONFIG_INCLUDE_DATABASE -#define SFF_CONFIG_INCLUDE_DATABASE 1 -#endif - - - -/** - * All compile time options can be queried or displayed - */ - -/** Configuration settings structure. */ -typedef struct sff_config_settings_s { - /** name */ - const char* name; - /** value */ - const char* value; -} sff_config_settings_t; - -/** Configuration settings table. */ -/** sff_config_settings table. */ -extern sff_config_settings_t sff_config_settings[]; - -/** - * @brief Lookup a configuration setting. - * @param setting The name of the configuration option to lookup. - */ -const char* sff_config_lookup(const char* setting); - -/** - * @brief Show the compile-time configuration. - * @param pvs The output stream. - */ -int sff_config_show(struct aim_pvs_s* pvs); - -/* */ - -#include "sff_porting.h" - -#endif /* __SFF_CONFIG_H__ */ -/* @} */ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff_db.h b/packages/base/any/onlp/src/sff/module/inc/sff/sff_db.h deleted file mode 100644 index 2242cd57..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff_db.h +++ /dev/null @@ -1,60 +0,0 @@ -/************************************************************ - * - * - * Copyright 2014, 2015 Big Switch Networks, Inc. - * - * Licensed under the Eclipse Public License, Version 1.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.eclipse.org/legal/epl-v10.html - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the - * License. - * - * - ************************************************************ - * - * - * - ***********************************************************/ -#ifndef __SFF_DB_H__ -#define __SFF_DB_H__ - -#include -#include -#include - -typedef struct { - sff_eeprom_t se; -} sff_db_entry_t; - -/** - * @brief Get the database entry table. - * @param entries Receives the table pointer. - * @param count Receives the size of the table. - */ -int sff_db_get(sff_db_entry_t** entries, int* count); - -/** - * @brief Return any entry with the given module type. - * @param se Receives the information struct. - * @param type The type to retreive. - */ -int sff_db_get_type(sff_eeprom_t* se, sff_module_type_t type); - - -/** - * @brief Output the given SFF information to a database entry. - * @param info The source information. - * @param pvs The output pvs.; - * @note This is used mainly for generating new entries for the SFF db from a running system. - */ -int sff_db_entry_struct(sff_eeprom_t* se, aim_pvs_t* pvs); - -#endif /* __SFF_DB_H__ */ - diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff_dox.h b/packages/base/any/onlp/src/sff/module/inc/sff/sff_dox.h deleted file mode 100644 index 1b99e7c9..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff_dox.h +++ /dev/null @@ -1,26 +0,0 @@ -/**************************************************************************//** - * - * sff Doxygen Header - * - *****************************************************************************/ -#ifndef __SFF_DOX_H__ -#define __SFF_DOX_H__ - -/** - * @defgroup sff sff - sff Description - * - -The documentation overview for this module should go here. - - * - * @{ - * - * @defgroup sff-sff Public Interface - * @defgroup sff-config Compile Time Configuration - * @defgroup sff-porting Porting Macros - * - * @} - * - */ - -#endif /* __SFF_DOX_H__ */ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff_porting.h b/packages/base/any/onlp/src/sff/module/inc/sff/sff_porting.h deleted file mode 100644 index 2425036a..00000000 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff_porting.h +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************//** - * - * @file - * @brief sff Porting Macros. - * - * @addtogroup sff-porting - * @{ - * - *****************************************************************************/ -#ifndef __SFF_PORTING_H__ -#define __SFF_PORTING_H__ - - -/* */ -#if SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS == 1 -#include -#include -#include -#include -#include -#endif - -#ifndef SFF_MEMSET - #if defined(GLOBAL_MEMSET) - #define SFF_MEMSET GLOBAL_MEMSET - #elif SFF_CONFIG_PORTING_STDLIB == 1 - #define SFF_MEMSET memset - #else - #error The macro SFF_MEMSET is required but cannot be defined. - #endif -#endif - -#ifndef SFF_MEMCPY - #if defined(GLOBAL_MEMCPY) - #define SFF_MEMCPY GLOBAL_MEMCPY - #elif SFF_CONFIG_PORTING_STDLIB == 1 - #define SFF_MEMCPY memcpy - #else - #error The macro SFF_MEMCPY is required but cannot be defined. - #endif -#endif - -#ifndef SFF_STRNCPY - #if defined(GLOBAL_STRNCPY) - #define SFF_STRNCPY GLOBAL_STRNCPY - #elif SFF_CONFIG_PORTING_STDLIB == 1 - #define SFF_STRNCPY strncpy - #else - #error The macro SFF_STRNCPY is required but cannot be defined. - #endif -#endif - -#ifndef SFF_STRNCMP - #if defined(GLOBAL_STRNCMP) - #define SFF_STRNCMP GLOBAL_STRNCMP - #elif SFF_CONFIG_PORTING_STDLIB == 1 - #define SFF_STRNCMP strncmp - #else - #error The macro SFF_STRNCMP is required but cannot be defined. - #endif -#endif - -#ifndef SFF_STRLEN - #if defined(GLOBAL_STRLEN) - #define SFF_STRLEN GLOBAL_STRLEN - #elif SFF_CONFIG_PORTING_STDLIB == 1 - #define SFF_STRLEN strlen - #else - #error The macro SFF_STRLEN is required but cannot be defined. - #endif -#endif - -#ifndef SFF_SNPRINTF - #if defined(GLOBAL_SNPRINTF) - #define SFF_SNPRINTF GLOBAL_SNPRINTF - #elif SFF_CONFIG_PORTING_STDLIB == 1 - #define SFF_SNPRINTF snprintf - #else - #error The macro SFF_SNPRINTF is required but cannot be defined. - #endif -#endif - -/* */ - - -#endif /* __SFF_PORTING_H__ */ -/* @} */ diff --git a/packages/base/any/onlp/src/sff/module/make.mk b/packages/base/any/onlp/src/sff/module/make.mk deleted file mode 100644 index 9f001b0e..00000000 --- a/packages/base/any/onlp/src/sff/module/make.mk +++ /dev/null @@ -1,10 +0,0 @@ -############################################################################### -# -# -# -############################################################################### -THIS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) -sff_INCLUDES := -I $(THIS_DIR)inc -sff_INTERNAL_INCLUDES := -I $(THIS_DIR)src -sff_DEPENDMODULE_ENTRIES := init:sff - diff --git a/packages/base/any/onlp/src/sff/module/python/onlp/sff/__init__.py b/packages/base/any/onlp/src/sff/module/python/onlp/sff/__init__.py deleted file mode 100644 index f6028f01..00000000 --- a/packages/base/any/onlp/src/sff/module/python/onlp/sff/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -"""__init__.py - -Module init for onlp/sff -""" - -from onlp.sff.enums import * - -import ctypes - -sff_media_type = ctypes.c_int -sff_module_caps = ctypes.c_int -sff_module_type = ctypes.c_int -sff_sfp_type = ctypes.c_int - -class sff_info(ctypes.Structure): - _fields_ = [("vendor", ctypes.c_char * 17), - ("model", ctypes.c_char * 17), - ("serial", ctypes.c_char * 17), - ("sfp_type", sff_sfp_type), - ("sfp_type_name", ctypes.c_char_p), - ("module_type", sff_module_type), - ("module_type_name", ctypes.c_char_p), - ("media_type", sff_media_type), - ("media_type_name", ctypes.c_char_p), - ("caps", sff_module_caps), - ("length", ctypes.c_int), - ("desc", ctypes.c_char * 16),] - -class sff_eeprom(ctypes.Structure): - _fields_ = [("eeprom", ctypes.c_ubyte * 256), - ("cc_base", ctypes.c_ubyte), - ("cc_ext", ctypes.c_ubyte), - ("identified", ctypes.c_int), - ("info", sff_info),] diff --git a/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py b/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py deleted file mode 100644 index bba20c17..00000000 --- a/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py +++ /dev/null @@ -1,76 +0,0 @@ -"""enums.py - -Enumerations from the SFF auto.yml. -""" - -class Enumeration(object): - @classmethod - def name(klass, value): - for (k, v) in klass.__dict__.iteritems(): - if v == value: - return k - return None - -# -class SFF_MEDIA_TYPE(Enumeration): - COPPER = 0 - FIBER = 1 - - -class SFF_MODULE_CAPS(Enumeration): - F_100 = 1 - F_1G = 2 - F_10G = 4 - F_25G = 8 - F_40G = 16 - F_100G = 32 - - -class SFF_MODULE_TYPE(Enumeration): - _100G_AOC = 0 - _100G_BASE_CR4 = 1 - _100G_BASE_SR4 = 2 - _100G_BASE_LR4 = 3 - _100G_CWDM4 = 4 - _100G_PSM4 = 5 - _100G_SWDM4 = 6 - _40G_BASE_CR4 = 7 - _40G_BASE_SR4 = 8 - _40G_BASE_LR4 = 9 - _40G_BASE_LM4 = 10 - _40G_BASE_ACTIVE = 11 - _40G_BASE_CR = 12 - _40G_BASE_SR2 = 13 - _40G_BASE_SM4 = 14 - _40G_BASE_ER4 = 15 - _25G_BASE_CR = 16 - _25G_BASE_SR = 17 - _25G_BASE_LR = 18 - _25G_BASE_AOC = 19 - _10G_BASE_SR = 20 - _10G_BASE_LR = 21 - _10G_BASE_LRM = 22 - _10G_BASE_ER = 23 - _10G_BASE_CR = 24 - _10G_BASE_SX = 25 - _10G_BASE_LX = 26 - _10G_BASE_ZR = 27 - _10G_BASE_SRL = 28 - _1G_BASE_SX = 29 - _1G_BASE_LX = 30 - _1G_BASE_ZX = 31 - _1G_BASE_CX = 32 - _1G_BASE_T = 33 - _100_BASE_LX = 34 - _100_BASE_FX = 35 - _4X_MUX = 36 - - -class SFF_SFP_TYPE(Enumeration): - SFP = 0 - QSFP = 1 - QSFP_PLUS = 2 - QSFP28 = 3 - SFP28 = 4 - -# diff --git a/packages/base/any/onlp/src/sff/module/src/8472.c b/packages/base/any/onlp/src/sff/module/src/8472.c deleted file mode 100644 index cb8d13a8..00000000 --- a/packages/base/any/onlp/src/sff/module/src/8472.c +++ /dev/null @@ -1,328 +0,0 @@ -/************************************************************ - * - * - * Copyright 2014, 2015 Big Switch Networks, Inc. - * - * Licensed under the Eclipse Public License, Version 1.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.eclipse.org/legal/epl-v10.html - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the - * License. - * - * - ************************************************************ - * - * - * - ***********************************************************/ -#include - -#if 0 - -/* - * some CR cables identify as infiniband copper - * some CR cables identify as FC twinax - * some CR cables identify their electrical compliance - * using bytes 60,61 - * some CR cables identify as FC electrical intra- - * or inter-enclosure (bytes 7, 8) - */ - -int -sff8472_inf_1x(const uint8_t* idprom) -{ - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) != 0) return 1; - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_ACTIVE) != 0) return 1; - if ((idprom[3] & SFF8472_CC3_INF_1X_LX) != 0) return 1; - if ((idprom[3] & SFF8472_CC3_INF_1X_SX) != 0) return 1; - return 0; -} - -int -sff8472_inf_1x_cu_active(const uint8_t* idprom) -{ - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_LX) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_SX) != 0) return 0; - - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_ACTIVE) != 0) return 1; - - return 0; -} - -int -sff8472_inf_1x_cu_passive(const uint8_t* idprom) -{ - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_ACTIVE) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_LX) != 0) return 0; - if ((idprom[3] & SFF8472_CC3_INF_1X_SX) != 0) return 0; - - if ((idprom[3] & SFF8472_CC3_INF_1X_CU_PASSIVE) != 0) return 1; - - return 0; -} - -int -sff8472_fc_media(const uint8_t* idprom) -{ - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_SM) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TV) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_MI) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TP) != 0) return 1; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TW) != 0) return 1; - return 0; -} - -int -sff8472_fc_media_tw(const uint8_t* idprom) -{ - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_SM) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M5) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_M6) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TV) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_MI) != 0) return 0; - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TP) != 0) return 0; - - if ((idprom[9] & SFF8472_CC9_FC_MEDIA_TW) != 0) return 1; - - return 0; -} - -int -sff8472_tech_fc(const uint8_t* idprom) -{ - if ((idprom[7] & SFF8472_CC7_FC_TECH_EL) != 0) return 1; - if ((idprom[7] & SFF8472_CC7_FC_TECH_LC) != 0) return 1; - if ((idprom[7] & SFF8472_CC7_FC_TECH_SA) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_EL) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_LL) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SL) != 0) return 1; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SN) != 0) return 1; - return 0; -} - -int -sff8472_tech_fc_el(const uint8_t* idprom) -{ - /* non-EL types */ - if ((idprom[7] & SFF8472_CC7_FC_TECH_LC) != 0) return 0; - if ((idprom[7] & SFF8472_CC7_FC_TECH_SA) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_LL) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SL) != 0) return 0; - if ((idprom[8] & SFF8472_CC8_FC_TECH_SN) != 0) return 0; - - if (((idprom[7] & SFF8472_CC7_FC_TECH_EL) != 0) - && ((idprom[8] & SFF8472_CC8_FC_TECH_EL) == 0)) - return 1; - if (((idprom[7] & SFF8472_CC7_FC_TECH_EL) == 0) - && ((idprom[8] & SFF8472_CC8_FC_TECH_EL) != 0)) - return 1; - - return 0; -} - -/* do not specify an FC speed code unless you actually FC */ -int -sff8472_fc_speed_ok(const uint8_t* idprom) -{ - if (_sff8472_tech_fc(idprom) - && (idprom[10] != 0)) - return 1; - if (!_sff8472_tech_fc(idprom) - && (idprom[10] == 0)) - return 1; - return 0; -} - -/* - * XXX roth - * some CR cables do not list an SFP+ active/passive bit, - * but register as active or passive via infiniband instead - */ - -int -sff8472_sfp_plus_passive(const uint8_t* idprom) -{ - if ((idprom[8] & SFF8472_CC8_SFP_PASSIVE) != 0) return 1; - - /* also allow pre-standard cables identifying as infiniband */ - if (_sff8472_inf_1x_cu_passive(idprom)) return 1; - - return 0; -} - -int -sff8472_sfp_plus_active(const uint8_t* idprom) -{ - if ((idprom[8] & SFF8472_CC8_SFP_ACTIVE) != 0) return 1; - - /* also allow pre-standard cables identifying as infiniband */ - if (_sff8472_inf_1x_cu_active(idprom)) return 1; - - return 0; -} - -/* - * XXX roth - * some pre-standard CR cables report a "wavelength" - * in byte 60, 61, pretending to be an optical module - */ - -#define _SFF8472_WAVELENGTH(idprom) \ - ((idprom[60] << 8) | idprom[61]) - -#define _SFF8472_COMPLIANCE_UNSPEC(idprom) \ - ((idprom[60] == 0) \ - && (idprom[61] == 0)) - -#define _SFF8472_COMPLIANCE_PASSIVE_FC(idprom) \ - (((idprom[60] & SFF8471_CC60_FC_PI_4) != 0) \ - && (idprom[61] == 0)) - -#define _SFF8472_COMPLIANCE_PASSIVE_SFF(idprom) \ - (((idprom[60] & SFF8471_CC60_SFF8431) != 0) \ - && (idprom[61] == 0)) - -#define _SFF8472_COMPLIANCE_ACTIVE_FC(idprom) \ - ((((idprom[60] & SFF8471_CC60_FC_PI_4) != 0) \ - || (idprom[60] & SFF8471_CC60_FC_PI_4_LIMITING) != 0) \ - && (idprom[61] == 0)) - -#define _SFF8472_COMPLIANCE_ACTIVE_SFF(idprom) \ - ((((idprom[60] & SFF8471_CC60_SFF8431) != 0) \ - || (idprom[60] & SFF8471_CC60_SFF8431_LIMITING) != 0) \ - && (idprom[61] == 0)) - -/* - * Cisco pre-standard CR cables - */ -int -sff8472_hack_cr(const uint8_t* idprom) -{ - /* vendor is 'OEM' */ - if (SFF_STRNCMP((char*)idprom+20, "OEM ", 4) != 0) return 0; - - /* model reads like 'SFP-H10GB-CU...' */ - if (SFF_STRNCMP((char*)idprom+40, "SFP-H10GB-CU", 12) != 0) return 0; - - /* S/N reads like 'CSC...' */ - if (SFF_STRNCMP((char*)idprom+68, "CSC", 3) != 0) return 0; - - /* - * congratulations, you have an expensive Cisco - * pre-standard CR cable. - */ - return 1; -} - -/* grab-bag to detect pre-standard CR media */ -int -sff8472_media_cr_passive(const uint8_t* idprom) -{ - int maybe = 0; - - if (_sff8472_inf_1x_cu_passive(idprom)) - maybe = 1; - else if (_sff8472_inf_1x(idprom)) - return 0; - - if (_sff8472_tech_fc_el(idprom)) - maybe = 1; - else if (_sff8472_tech_fc(idprom)) - return 0; - - if (idprom[4] != 0) return 0; - if (idprom[5] != 0) return 0; - if (idprom[6] != 0) return 0; - - if (_sff8472_sfp_plus_passive(idprom)) - maybe = 1; - - if (_sff8472_fc_media_tw(idprom)) - maybe = 1; - else if (_sff8472_fc_media(idprom)) - return 0; - - if (!_sff8472_fc_speed_ok(idprom)) - return 0; - - if (_sff8472_hack_cr(idprom)) - maybe = 1; - - if (maybe) { - if (!_SFF8472_COMPLIANCE_PASSIVE_FC(idprom) - && !_SFF8472_COMPLIANCE_PASSIVE_SFF(idprom) - && (_SFF8472_WAVELENGTH(idprom) != 850) - && !_SFF8472_COMPLIANCE_UNSPEC(idprom) - && !_sff8472_hack_cr(idprom)) - return 0; - } - - return maybe; -} - -int -sff8472_media_cr_active(const uint8_t* idprom) -{ - int maybe = 0; - - if (_sff8472_inf_1x_cu_active(idprom)) - maybe = 1; - else if (_sff8472_inf_1x(idprom)) - return 0; - - if (_sff8472_tech_fc_el(idprom)) - maybe = 1; - else if (_sff8472_tech_fc(idprom)) - return 0; - - if (idprom[4] != 0) return 0; - if (idprom[5] != 0) return 0; - if (idprom[6] != 0) return 0; - - if (_sff8472_sfp_plus_active(idprom)) - maybe = 1; - - if (_sff8472_fc_media_tw(idprom)) - maybe = 1; - else if (_sff8472_fc_media(idprom)) - return 0; - - if (!_sff8472_fc_speed_ok(idprom)) - return 0; - - if (maybe) { - if (!_SFF8472_COMPLIANCE_ACTIVE_FC(idprom) - && !_SFF8472_COMPLIANCE_ACTIVE_SFF(idprom) - && !_SFF8472_COMPLIANCE_UNSPEC(idprom)) - return 0; - } - - return maybe; -} - -#define SFF8472_MEDIA_GBE_SX(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_SX) != 0) -#define SFF8472_MEDIA_GBE_LX(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_LX) != 0) -#define SFF8472_MEDIA_GBE_CX(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_CX) != 0) -#define SFF8472_MEDIA_GBE_T(idprom) \ - ((idprom[6] & SFF8472_CC6_GBE_BASE_T) != 0) - -#define SFF8472_MEDIA_CBE_LX(idprom) \ - ((idprom[6] & SFF8472_CC6_CBE_BASE_LX) != 0) -#define SFF8472_MEDIA_CBE_FX(idprom) \ - ((idprom[6] & SFF8472_CC6_CBE_BASE_FX) != 0) - - -#endif diff --git a/packages/base/any/onlp/src/sff/module/src/Makefile b/packages/base/any/onlp/src/sff/module/src/Makefile deleted file mode 100644 index cf47d083..00000000 --- a/packages/base/any/onlp/src/sff/module/src/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -############################################################################### -# -# Local source generation targets. -# -############################################################################### - -ucli: - @../../../../tools/uclihandlers.py sff_ucli.c - diff --git a/packages/base/any/onlp/src/sff/module/src/make.mk b/packages/base/any/onlp/src/sff/module/src/make.mk deleted file mode 100644 index 40aa534c..00000000 --- a/packages/base/any/onlp/src/sff/module/src/make.mk +++ /dev/null @@ -1,9 +0,0 @@ -############################################################################### -# -# -# -############################################################################### - -LIBRARY := sff -$(LIBRARY)_SUBDIR := $(dir $(lastword $(MAKEFILE_LIST))) -include $(BUILDER)/lib.mk diff --git a/packages/base/any/onlp/src/sff/module/src/nonstandard.c b/packages/base/any/onlp/src/sff/module/src/nonstandard.c deleted file mode 100644 index b512ffe2..00000000 --- a/packages/base/any/onlp/src/sff/module/src/nonstandard.c +++ /dev/null @@ -1,37 +0,0 @@ -/** - * These parts must be special-cased by vendor and model - * due to nonstandard eeprom contents. - */ -#include - -typedef struct sff_ns_entry_s { - const char* vendor; - const char* model; - sff_module_type_t mt; - int len; -} sff_ns_entry_t; - -static sff_ns_entry_t nonstandard_modules__[] = - { - { "CISCO-OEM ", "QSFP-4SFP+-CU2M ", SFF_MODULE_TYPE_40G_BASE_CR4, 2 }, - { "CISCO-OEM ", "QSFP-4SFP+-CU3M ", SFF_MODULE_TYPE_40G_BASE_CR4, 3 }, - { "CISCO-OEM ", "QSFP-4SFP+-CU5M ", SFF_MODULE_TYPE_40G_BASE_CR4, 5 }, - { "Mellanox ", "MC2206130-001 ", SFF_MODULE_TYPE_40G_BASE_CR4, 1 }, - { "OEM ", "F4M-QSSFP-C-2-30", SFF_MODULE_TYPE_40G_BASE_CR4, 2 }, - {}, - }; - - -int -sff_nonstandard_lookup(sff_info_t* info) -{ - sff_ns_entry_t* p; - for(p = nonstandard_modules__; p->vendor; p++) { - if(!strcmp(info->vendor, p->vendor) && !strcmp(info->model, p->model)) { - sff_info_from_module_type(info, info->sfp_type, p->mt); - info->length = p->len; - return 0; - } - } - return -1; -} diff --git a/packages/base/any/onlp/src/sff/module/src/sff.c b/packages/base/any/onlp/src/sff/module/src/sff.c deleted file mode 100644 index ab437441..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff.c +++ /dev/null @@ -1,863 +0,0 @@ -/************************************************************ - * - * - * Copyright 2014, 2015 Big Switch Networks, Inc. - * - * Licensed under the Eclipse Public License, Version 1.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.eclipse.org/legal/epl-v10.html - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the - * License. - * - * - ************************************************************ - * - * - * - ***********************************************************/ -#include -#include -#include -#include -#include "sff_log.h" -#include -#include "sff_int.h" - -sff_sfp_type_t -sff_sfp_type_get(const uint8_t* eeprom) -{ - if(eeprom) { - if(SFF8472_MODULE_SFP(eeprom)) { - return SFF_SFP_TYPE_SFP; - } - if(SFF8436_MODULE_QSFP_PLUS_V2(eeprom)) { - return SFF_SFP_TYPE_QSFP_PLUS; - } - if(SFF8636_MODULE_QSFP28(eeprom)) { - return SFF_SFP_TYPE_QSFP28; - } - } - return SFF_SFP_TYPE_INVALID; -} - -sff_module_type_t -sff_module_type_get(const uint8_t* eeprom) -{ - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && SFF8636_MEDIA_100GE_AOC(eeprom)) - return SFF_MODULE_TYPE_100G_AOC; - - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && SFF8636_MEDIA_100GE_SR4(eeprom)) - return SFF_MODULE_TYPE_100G_BASE_SR4; - - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && SFF8636_MEDIA_100GE_LR4(eeprom)) - return SFF_MODULE_TYPE_100G_BASE_LR4; - - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && (SFF8636_MEDIA_100GE_CR4(eeprom) || - SFF8636_MEDIA_25GE_CR_S(eeprom) || - SFF8636_MEDIA_25GE_CR_N(eeprom))) - return SFF_MODULE_TYPE_100G_BASE_CR4; - - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && SFF8636_MEDIA_100GE_CWDM4(eeprom)) - return SFF_MODULE_TYPE_100G_CWDM4; - - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && SFF8636_MEDIA_100GE_PSM4(eeprom)) - return SFF_MODULE_TYPE_100G_PSM4; - - if (SFF8636_MODULE_QSFP28(eeprom) - && SFF8636_MEDIA_EXTENDED(eeprom) - && SFF8636_MEDIA_100GE_SWDM4(eeprom)) - return SFF_MODULE_TYPE_100G_SWDM4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && SFF8436_MEDIA_40GE_CR4(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_CR4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && SFF8436_MEDIA_40GE_SR4(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_SR4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_sr4_aoc_pre(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_SR4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && SFF8436_MEDIA_40GE_LR4(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_LR4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && SFF8436_MEDIA_40GE_ACTIVE(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_ACTIVE; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_aoc_breakout(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_SR4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && SFF8436_MEDIA_40GE_CR(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_CR; - - /* pre-standard finisar optics */ - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_pre(eeprom) - && (SFF8436_TECH_FC_FIBER_LONG(eeprom) - || SFF8436_MEDIA_FC_FIBER_SM(eeprom))) - return SFF_MODULE_TYPE_40G_BASE_LR4; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_pre(eeprom) - && (SFF8436_TECH_FC_FIBER_SHORT(eeprom) - || SFF8436_MEDIA_FC_FIBER_MM(eeprom))) - return SFF_MODULE_TYPE_40G_BASE_SR4; - - /* pre-standard QSFP-BiDi optics */ - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_sr2_bidi_pre(eeprom)) - return SFF_MODULE_TYPE_40G_BASE_SR2; - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_lm4(eeprom)) { - return SFF_MODULE_TYPE_40G_BASE_LM4; - } - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_sm4(eeprom)) { - return SFF_MODULE_TYPE_40G_BASE_SM4; - } - - if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom) - && _sff8436_qsfp_40g_er4(eeprom)) { - return SFF_MODULE_TYPE_40G_BASE_ER4; - } - - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_sfp28_cr(eeprom)) { - return SFF_MODULE_TYPE_25G_BASE_CR; - } - - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_sfp28_sr(eeprom)) { - return SFF_MODULE_TYPE_25G_BASE_SR; - } - - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_sfp28_lr(eeprom)) { - return SFF_MODULE_TYPE_25G_BASE_LR; - } - - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_sfp28_aoc(eeprom)) { - return SFF_MODULE_TYPE_25G_BASE_AOC; - } - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_XGE_SR(eeprom) - && !_sff8472_media_gbe_sx_fc_hack(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_SR; - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_XGE_LR(eeprom) - && !_sff8472_media_gbe_lx_fc_hack(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_LR; - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_XGE_LRM(eeprom) - && !_sff8472_media_gbe_lx_fc_hack(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_LRM; - - /* - * XXX roth -- PAN-934 -- DAC cable erroneously reports ER, - * so we need to disallow infiniband features when matching here. - * See also _sff8472_media_cr_passive, which encodes some - * additional workarounds for these cables. - */ - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_XGE_ER(eeprom) - && !_sff8472_inf_1x_cu_active(eeprom) - && !_sff8472_inf_1x_cu_passive(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_ER; - - /* XXX roth - not sure on this one */ - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_cr_passive(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_CR; - - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_cr_active(eeprom)) { - if (_sff8472_sfp_10g_aoc(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_SR; - else - return SFF_MODULE_TYPE_10G_BASE_CR; - } - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_GBE_SX(eeprom)) - return SFF_MODULE_TYPE_1G_BASE_SX; - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_GBE_LX(eeprom)) { - if (SFF8472_MEDIA_LENGTH_ZX(eeprom)) { - return SFF_MODULE_TYPE_1G_BASE_ZX; - } else { - return SFF_MODULE_TYPE_1G_BASE_LX; - } - } - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_GBE_CX(eeprom)) - return SFF_MODULE_TYPE_1G_BASE_CX; - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_GBE_T(eeprom)) - return SFF_MODULE_TYPE_1G_BASE_T; - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_CBE_LX(eeprom)) - return SFF_MODULE_TYPE_100_BASE_LX; - - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_CBE_FX(eeprom)) - return SFF_MODULE_TYPE_100_BASE_FX; - - /* non-standard (e.g. Finisar) ZR media */ - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_zr(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_ZR; - - /* non-standard (e.g. Finisar) SRL media */ - if (SFF8472_MODULE_SFP(eeprom) - && _sff8472_media_srlite(eeprom)) - return SFF_MODULE_TYPE_10G_BASE_SRL; - - return SFF_MODULE_TYPE_INVALID; -} - -sff_media_type_t -sff_media_type_get(sff_module_type_t mt) -{ - switch(mt) - { - case SFF_MODULE_TYPE_100G_BASE_CR4: - case SFF_MODULE_TYPE_40G_BASE_CR4: - case SFF_MODULE_TYPE_40G_BASE_CR: - case SFF_MODULE_TYPE_25G_BASE_CR: - case SFF_MODULE_TYPE_10G_BASE_CR: - case SFF_MODULE_TYPE_1G_BASE_CX: - case SFF_MODULE_TYPE_1G_BASE_T: - return SFF_MEDIA_TYPE_COPPER; - - case SFF_MODULE_TYPE_100G_AOC: - case SFF_MODULE_TYPE_100G_BASE_SR4: - case SFF_MODULE_TYPE_100G_BASE_LR4: - case SFF_MODULE_TYPE_100G_CWDM4: - case SFF_MODULE_TYPE_100G_PSM4: - case SFF_MODULE_TYPE_100G_SWDM4: - case SFF_MODULE_TYPE_40G_BASE_SR4: - case SFF_MODULE_TYPE_40G_BASE_LR4: - case SFF_MODULE_TYPE_40G_BASE_LM4: - case SFF_MODULE_TYPE_40G_BASE_ACTIVE: - case SFF_MODULE_TYPE_40G_BASE_SR2: - case SFF_MODULE_TYPE_40G_BASE_SM4: - case SFF_MODULE_TYPE_40G_BASE_ER4: - case SFF_MODULE_TYPE_25G_BASE_SR: - case SFF_MODULE_TYPE_25G_BASE_LR: - case SFF_MODULE_TYPE_25G_BASE_AOC: - case SFF_MODULE_TYPE_10G_BASE_SR: - case SFF_MODULE_TYPE_10G_BASE_LR: - case SFF_MODULE_TYPE_10G_BASE_LRM: - case SFF_MODULE_TYPE_10G_BASE_ER: - case SFF_MODULE_TYPE_10G_BASE_SX: - case SFF_MODULE_TYPE_10G_BASE_LX: - case SFF_MODULE_TYPE_10G_BASE_ZR: - case SFF_MODULE_TYPE_10G_BASE_SRL: - case SFF_MODULE_TYPE_1G_BASE_SX: - case SFF_MODULE_TYPE_1G_BASE_LX: - case SFF_MODULE_TYPE_1G_BASE_ZX: - case SFF_MODULE_TYPE_100_BASE_LX: - case SFF_MODULE_TYPE_100_BASE_FX: - case SFF_MODULE_TYPE_4X_MUX: - return SFF_MEDIA_TYPE_FIBER; - - case SFF_MODULE_TYPE_COUNT: - case SFF_MODULE_TYPE_INVALID: - return SFF_MEDIA_TYPE_INVALID; - } - - return SFF_MEDIA_TYPE_INVALID; -} - -int -sff_module_caps_get(sff_module_type_t mt, uint32_t *caps) -{ - if (caps == NULL) - return -1; - - *caps = 0; - - switch(mt) - { - case SFF_MODULE_TYPE_100G_AOC: - case SFF_MODULE_TYPE_100G_BASE_SR4: - case SFF_MODULE_TYPE_100G_BASE_LR4: - case SFF_MODULE_TYPE_100G_BASE_CR4: - case SFF_MODULE_TYPE_100G_CWDM4: - case SFF_MODULE_TYPE_100G_PSM4: - case SFF_MODULE_TYPE_100G_SWDM4: - *caps |= SFF_MODULE_CAPS_F_100G; - return 0; - - case SFF_MODULE_TYPE_40G_BASE_CR4: - case SFF_MODULE_TYPE_40G_BASE_SR4: - case SFF_MODULE_TYPE_40G_BASE_LR4: - case SFF_MODULE_TYPE_40G_BASE_LM4: - case SFF_MODULE_TYPE_40G_BASE_ACTIVE: - case SFF_MODULE_TYPE_40G_BASE_CR: - case SFF_MODULE_TYPE_40G_BASE_SR2: - case SFF_MODULE_TYPE_40G_BASE_SM4: - case SFF_MODULE_TYPE_40G_BASE_ER4: - *caps |= SFF_MODULE_CAPS_F_40G; - return 0; - - case SFF_MODULE_TYPE_25G_BASE_CR: - case SFF_MODULE_TYPE_25G_BASE_SR: - case SFF_MODULE_TYPE_25G_BASE_AOC: - *caps |= SFF_MODULE_CAPS_F_25G; - return 0; - - case SFF_MODULE_TYPE_10G_BASE_SR: - case SFF_MODULE_TYPE_10G_BASE_LR: - case SFF_MODULE_TYPE_10G_BASE_LRM: - case SFF_MODULE_TYPE_10G_BASE_ER: - case SFF_MODULE_TYPE_10G_BASE_CR: - case SFF_MODULE_TYPE_10G_BASE_SX: - case SFF_MODULE_TYPE_10G_BASE_LX: - case SFF_MODULE_TYPE_10G_BASE_ZR: - case SFF_MODULE_TYPE_10G_BASE_SRL: - *caps |= SFF_MODULE_CAPS_F_10G; - return 0; - - case SFF_MODULE_TYPE_1G_BASE_SX: - case SFF_MODULE_TYPE_1G_BASE_LX: - case SFF_MODULE_TYPE_1G_BASE_ZX: - case SFF_MODULE_TYPE_1G_BASE_CX: - case SFF_MODULE_TYPE_1G_BASE_T: - *caps |= SFF_MODULE_CAPS_F_1G; - return 0; - - case SFF_MODULE_TYPE_100_BASE_LX: - case SFF_MODULE_TYPE_100_BASE_FX: - *caps |= SFF_MODULE_CAPS_F_100; - return 0; - - default: - return -1; - } -} - -static void -make_printable__(char* string, int size) -{ - char* p; - for(p = string; p && *p && size; p++) { - if(!isprint(*p)) { - *p = '?'; - } - size --; - } -} - -/** - * @brief Initialize an SFF module information structure. - * @param rv [out] Receives the data. - * @param eeprom Raw EEPROM data. - * @note if eeprom is != NULL it will be copied into rv->eeprom first. - * @note if eeprom is NULL it is assumed the rv->eeprom buffer - * has already been initialized. - */ -static int -sff_eeprom_parse_standard__(sff_eeprom_t* se, uint8_t* eeprom) -{ - if(se == NULL) { - return -1; - } - se->identified = 0; - - if(eeprom) { - SFF_MEMCPY(se->eeprom, eeprom, 256); - } - - if (SFF8472_MODULE_SFP(se->eeprom)) { - /* See SFF-8472 pp22, pp28 */ - int i; - for (i = 0, se->cc_base = 0; i < 63; ++i) - se->cc_base = (se->cc_base + se->eeprom[i]) & 0xFF; - for (i = 64, se->cc_ext = 0; i < 95; ++i) - se->cc_ext = (se->cc_ext + se->eeprom[i]) & 0xFF; - } else if (SFF8436_MODULE_QSFP_PLUS_V2(se->eeprom) || - SFF8636_MODULE_QSFP28(se->eeprom)) { - /* See SFF-8436 pp72, pp73 */ - int i; - for (i = 128, se->cc_base = 0; i < 191; ++i) - se->cc_base = (se->cc_base + se->eeprom[i]) & 0xFF; - for (i = 192, se->cc_ext = 0; i < 223; ++i) - se->cc_ext = (se->cc_ext + se->eeprom[i]) & 0xFF; - } - - if (!sff_eeprom_validate(se, 1)) { - return -1; - } - - se->info.sfp_type = sff_sfp_type_get(se->eeprom); - if(se->info.sfp_type == SFF_SFP_TYPE_INVALID) { - AIM_LOG_ERROR("sff_eeprom_parse() failed: invalid sfp type"); - return -1; - } - se->info.sfp_type_name = sff_sfp_type_desc(se->info.sfp_type); - - const uint8_t *vendor, *model, *serial; - - switch(se->info.sfp_type) - { - case SFF_SFP_TYPE_QSFP_PLUS: - case SFF_SFP_TYPE_QSFP28: - vendor=se->eeprom+148; - model=se->eeprom+168; - serial=se->eeprom+196; - break; - - case SFF_SFP_TYPE_SFP: - default: - vendor=se->eeprom+20; - model=se->eeprom+40; - serial=se->eeprom+68; - break; - } - - /* handle NULL fields, they should actually be space-padded */ - const char *empty = " "; - if (*vendor) { - aim_strlcpy(se->info.vendor, (char*)vendor, sizeof(se->info.vendor)); - make_printable__(se->info.vendor, sizeof(se->info.vendor)); - } - else { - aim_strlcpy(se->info.vendor, empty, 17); - } - if (*model) { - aim_strlcpy(se->info.model, (char*)model, sizeof(se->info.model)); - make_printable__(se->info.model, sizeof(se->info.model)); - } - else { - aim_strlcpy(se->info.model, empty, 17); - } - if (*serial) { - aim_strlcpy(se->info.serial, (char*)serial, sizeof(se->info.serial)); - make_printable__(se->info.serial, sizeof(se->info.serial)); - } - else { - aim_strlcpy(se->info.serial, empty, 17); - } - - se->info.module_type = sff_module_type_get(se->eeprom); - if(se->info.module_type == SFF_MODULE_TYPE_INVALID) { - return -1; - } - - if(sff_info_init(&se->info, se->info.module_type, NULL, NULL, NULL, 0) < 0) { - return -1; - } - - int aoc_length; - switch (se->info.media_type) - { - case SFF_MEDIA_TYPE_COPPER: - switch (se->info.sfp_type) - { - case SFF_SFP_TYPE_QSFP_PLUS: - case SFF_SFP_TYPE_QSFP28: - se->info.length = se->eeprom[146]; - break; - case SFF_SFP_TYPE_SFP: - case SFF_SFP_TYPE_SFP28: - se->info.length = se->eeprom[18]; - break; - default: - se->info.length = -1; - break; - } - break; - - case SFF_MEDIA_TYPE_FIBER: - switch (se->info.sfp_type) - { - case SFF_SFP_TYPE_QSFP28: - aoc_length = _sff8636_qsfp28_100g_aoc_length(se->eeprom); - se->info.length = aoc_length; - break; - case SFF_SFP_TYPE_QSFP_PLUS: - case SFF_SFP_TYPE_SFP: - case SFF_SFP_TYPE_SFP28: - aoc_length = _sff8436_qsfp_40g_aoc_length(se->eeprom); - if (aoc_length < 0) - aoc_length = _sff8472_sfp_10g_aoc_length(se->eeprom); - if (aoc_length > 0) - se->info.length = aoc_length; - else - se->info.length = -1; - break; - default: - se->info.length = -1; - break; - } - break; - default: - se->info.length = -1; - } - - if(se->info.length == -1) { - se->info.length_desc[0] = 0; - } - else { - SFF_SNPRINTF(se->info.length_desc, sizeof(se->info.length_desc), "%dm", se->info.length); - } - se->identified = 1; - - return 0; -} - -int -sff_info_from_module_type(sff_info_t* info, sff_sfp_type_t st, sff_module_type_t mt) -{ - info->sfp_type = st; - info->sfp_type_name = sff_sfp_type_desc(st); - - info->module_type = mt; - info->module_type_name = sff_module_type_desc(mt); - - info->media_type = sff_media_type_get(mt); - info->media_type_name = sff_media_type_desc(info->media_type); - - if (sff_module_caps_get(info->module_type, &info->caps) < 0) { - AIM_LOG_ERROR("sff_info_init() failed: invalid module caps"); - return -1; - } - return 0; -} - -void -sff_info_show(sff_info_t* info, aim_pvs_t* pvs) -{ - aim_printf(pvs, "Vendor: %s Model: %s SN: %s Type: %s Module: %s Media: %s Length: %d\n", - info->vendor, info->model, info->serial, info->sfp_type_name, - info->module_type_name, info->media_type_name, info->length); -} - -int -sff_eeprom_parse_file(sff_eeprom_t* se, const char* fname) -{ - int rv; - FILE* fp; - - SFF_MEMSET(se, 0, sizeof(*se)); - - if( (fp = fopen(fname, "r")) == NULL) { - AIM_LOG_ERROR("Failed to open eeprom file %s: %{errno}"); - return -1; - } - - if( (rv = fread(se->eeprom, 1, 256, fp)) > 0) { - if( (rv=sff_eeprom_parse(se, NULL)) < 0) { - AIM_LOG_ERROR("sff_init() failed on data from file %s: %d\n", fname, rv); - rv = -1; - } - rv = 0; - } - else { - rv = -1; - } - fclose(fp); - return rv; -} - -void -sff_eeprom_invalidate(sff_eeprom_t *se) -{ - memset(se->eeprom, 0xFF, 256); - se->cc_base = 0xFF; - se->cc_ext = 0xFF; - se->identified = 0; -} - -int -sff_eeprom_validate(sff_eeprom_t *se, int verbose) -{ - if (SFF8436_MODULE_QSFP_PLUS_V2(se->eeprom) || - SFF8636_MODULE_QSFP28(se->eeprom)) { - - if (se->cc_base != se->eeprom[191]) { - if (verbose) { - AIM_LOG_ERROR("sff_eeprom_validate() failed: invalid base QSFP checksum (0x%x should be 0x%x)", - se->eeprom[191], se->cc_base); - } - return 0; - } - -#if SFF_CONFIG_INCLUDE_EXT_CC_CHECK == 1 - if (se->cc_ext != se->eeprom[223]) { - if (verbose) { - AIM_LOG_ERROR("sff_info_valid() failed: invalid extended QSFP checksum (0x%x should be 0x%x)", - se->eeprom[223], se->cc_ext); - } - return 0; - } -#endif - - } else if (SFF8472_MODULE_SFP(se->eeprom)) { - - if (se->cc_base != se->eeprom[63]) { - if (verbose) { - AIM_LOG_ERROR("sff_info_valid() failed: invalid base SFP checksum (0x%x should be 0x%x)", - se->eeprom[63], se->cc_base); - } - return 0; - } - -#if SFF_CONFIG_INCLUDE_EXT_CC_CHECK == 1 - if (se->cc_ext != se->eeprom[95]) { - if (verbose) { - AIM_LOG_ERROR("sff_info_valid() failed: invalid extended SFP checksum (0x%x should be 0x%x)", - se->eeprom[95], se->cc_ext); - } - return 0; - } -#endif - - } else { - - if (verbose) { - AIM_LOG_ERROR("sff_info_valid() failed: invalid module type"); - } - - return 0; - } - - return 1; -} - -static int -sff_eeprom_parse_nonstandard__(sff_eeprom_t* se, uint8_t* eeprom) -{ - if(se == NULL) { - return -1; - } - se->identified = 0; - - if(eeprom) { - SFF_MEMCPY(se->eeprom, eeprom, 256); - } - - if (strncmp(se->info.vendor, "Amphenol", 8) == 0 && - (strncmp(se->info.model, "625960001", 9) == 0 || strncmp(se->info.model, "659900001", 9) == 0) && - (se->eeprom[240] == 0x0f) && - (se->eeprom[241] == 0x10) && - ((se->eeprom[243] & 0xF0) == 0xE0)) { - - /* 4X_MUX */ - se->identified = 1; - se->info.module_type = SFF_MODULE_TYPE_4X_MUX; - se->info.module_type_name = sff_module_type_desc(se->info.module_type); - se->info.media_type = SFF_MEDIA_TYPE_COPPER; - se->info.media_type_name = sff_media_type_desc(se->info.media_type); - se->info.caps = SFF_MODULE_CAPS_F_1G; - se->info.length = se->eeprom[146]; - SFF_SNPRINTF(se->info.length_desc, sizeof(se->info.length_desc), "%dm", - se->info.length); - return 0; - } - - if (sff_nonstandard_lookup(&se->info) == 0) { - se->identified = 1; - SFF_SNPRINTF(se->info.length_desc, sizeof(se->info.length_desc), "%dm", - se->info.length); - return 0; - } - - return -1; -} - -int -sff_eeprom_parse(sff_eeprom_t* se, uint8_t* eeprom) -{ - int rv = sff_eeprom_parse_standard__(se, eeprom); - if(!se->identified) { - rv = sff_eeprom_parse_nonstandard__(se, eeprom); - } - return rv; -} - -int -sff_info_init(sff_info_t* info, sff_module_type_t mt, - const char* vendor, const char* model, const char* serial, - int length) -{ - info->module_type = mt; - - switch(mt) - { - case SFF_MODULE_TYPE_100G_AOC: - case SFF_MODULE_TYPE_100G_BASE_SR4: - case SFF_MODULE_TYPE_100G_BASE_LR4: - case SFF_MODULE_TYPE_100G_CWDM4: - case SFF_MODULE_TYPE_100G_PSM4: - case SFF_MODULE_TYPE_100G_SWDM4: - info->sfp_type = SFF_SFP_TYPE_QSFP28; - info->media_type = SFF_MEDIA_TYPE_FIBER; - info->caps = SFF_MODULE_CAPS_F_100G; - break; - - case SFF_MODULE_TYPE_100G_BASE_CR4: - info->sfp_type = SFF_SFP_TYPE_QSFP28; - info->media_type = SFF_MEDIA_TYPE_COPPER; - info->caps = SFF_MODULE_CAPS_F_100G; - break; - - case SFF_MODULE_TYPE_40G_BASE_SR4: - case SFF_MODULE_TYPE_40G_BASE_LR4: - case SFF_MODULE_TYPE_40G_BASE_LM4: - case SFF_MODULE_TYPE_40G_BASE_ACTIVE: - case SFF_MODULE_TYPE_40G_BASE_SR2: - case SFF_MODULE_TYPE_40G_BASE_SM4: - case SFF_MODULE_TYPE_40G_BASE_ER4: - case SFF_MODULE_TYPE_4X_MUX: - info->sfp_type = SFF_SFP_TYPE_QSFP_PLUS; - info->media_type = SFF_MEDIA_TYPE_FIBER; - info->caps = SFF_MODULE_CAPS_F_40G; - break; - - case SFF_MODULE_TYPE_40G_BASE_CR4: - case SFF_MODULE_TYPE_40G_BASE_CR: - info->sfp_type = SFF_SFP_TYPE_QSFP_PLUS; - info->media_type = SFF_MEDIA_TYPE_COPPER; - info->caps = SFF_MODULE_CAPS_F_40G; - break; - - case SFF_MODULE_TYPE_25G_BASE_CR: - info->sfp_type = SFF_SFP_TYPE_SFP28; - info->media_type = SFF_MEDIA_TYPE_COPPER; - info->caps = SFF_MODULE_CAPS_F_25G; - break; - - case SFF_MODULE_TYPE_25G_BASE_SR: - case SFF_MODULE_TYPE_25G_BASE_LR: - case SFF_MODULE_TYPE_25G_BASE_AOC: - info->sfp_type = SFF_SFP_TYPE_SFP28; - info->media_type = SFF_MEDIA_TYPE_FIBER; - info->caps = SFF_MODULE_CAPS_F_25G; - break; - - case SFF_MODULE_TYPE_10G_BASE_CR: - info->sfp_type = SFF_SFP_TYPE_SFP; - info->media_type = SFF_MEDIA_TYPE_COPPER; - info->caps = SFF_MODULE_CAPS_F_10G; - break; - - case SFF_MODULE_TYPE_10G_BASE_SR: - case SFF_MODULE_TYPE_10G_BASE_LR: - case SFF_MODULE_TYPE_10G_BASE_LRM: - case SFF_MODULE_TYPE_10G_BASE_ER: - case SFF_MODULE_TYPE_10G_BASE_SX: - case SFF_MODULE_TYPE_10G_BASE_LX: - case SFF_MODULE_TYPE_10G_BASE_ZR: - case SFF_MODULE_TYPE_10G_BASE_SRL: - info->sfp_type = SFF_SFP_TYPE_SFP; - info->media_type = SFF_MEDIA_TYPE_FIBER; - info->caps = SFF_MODULE_CAPS_F_10G; - break; - - case SFF_MODULE_TYPE_1G_BASE_SX: - case SFF_MODULE_TYPE_1G_BASE_LX: - case SFF_MODULE_TYPE_1G_BASE_ZX: - info->sfp_type = SFF_SFP_TYPE_SFP; - info->media_type = SFF_MEDIA_TYPE_FIBER; - info->caps = SFF_MODULE_CAPS_F_1G; - break; - - case SFF_MODULE_TYPE_1G_BASE_CX: - case SFF_MODULE_TYPE_1G_BASE_T: - info->sfp_type = SFF_SFP_TYPE_SFP; - info->media_type = SFF_MEDIA_TYPE_COPPER; - info->caps = SFF_MODULE_CAPS_F_1G; - break; - - case SFF_MODULE_TYPE_100_BASE_LX: - case SFF_MODULE_TYPE_100_BASE_FX: - info->sfp_type = SFF_SFP_TYPE_SFP; - info->media_type = SFF_MEDIA_TYPE_FIBER; - info->caps = SFF_MODULE_CAPS_F_100; - break; - - case SFF_MODULE_TYPE_COUNT: - case SFF_MODULE_TYPE_INVALID: - return -1; - } - - info->sfp_type_name = sff_sfp_type_desc(info->sfp_type); - info->module_type_name = sff_module_type_desc(info->module_type); - info->media_type_name = sff_media_type_desc(info->media_type); - - if(vendor) { - aim_strlcpy(info->vendor, vendor, sizeof(info->vendor)); - } - if(model) { - aim_strlcpy(info->model, model, sizeof(info->model)); - } - if(serial) { - aim_strlcpy(info->serial, serial, sizeof(info->serial)); - } - - info->length = length; - SFF_SNPRINTF(info->length_desc, sizeof(info->length_desc), "%dm", length); - return 0; -} - -#ifdef DEPENDMODULE_INCLUDE_CJSON_UTIL - -#include - -cJSON* -sff_info_json(cJSON* rv, sff_info_t* info) -{ - if(rv == NULL) { - rv = cJSON_CreateObject(); - } - - cjson_util_add_string_to_object(rv, "vendor", "%-16.16s", info->vendor); - cjson_util_add_string_to_object(rv, "model", "%-16.16s", info->model); - cjson_util_add_string_to_object(rv, "serial", "%-16.16s", info->serial); - cJSON_AddStringToObject(rv, "sfp-type", info->sfp_type_name); - cJSON_AddStringToObject(rv, "module-type", info->module_type_name); - cJSON_AddStringToObject(rv, "media-type", info->media_type_name); - cjson_util_add_string_to_object(rv, "caps", "%{sff_module_caps}", info->caps); - cjson_util_add_string_to_object(rv, "length", info->length_desc); - - return rv; -} - -#endif /* DEPENDMODULE_CJSON_UTIL */ diff --git a/packages/base/any/onlp/src/sff/module/src/sff_config.c b/packages/base/any/onlp/src/sff/module/src/sff_config.c deleted file mode 100644 index cf770933..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_config.c +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include - -/* */ -#define __sff_config_STRINGIFY_NAME(_x) #_x -#define __sff_config_STRINGIFY_VALUE(_x) __sff_config_STRINGIFY_NAME(_x) -sff_config_settings_t sff_config_settings[] = -{ -#ifdef SFF_CONFIG_INCLUDE_LOGGING - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_INCLUDE_LOGGING), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_INCLUDE_LOGGING) }, -#else -{ SFF_CONFIG_INCLUDE_LOGGING(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_LOG_OPTIONS_DEFAULT - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_LOG_OPTIONS_DEFAULT), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_LOG_OPTIONS_DEFAULT) }, -#else -{ SFF_CONFIG_LOG_OPTIONS_DEFAULT(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_LOG_BITS_DEFAULT - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_LOG_BITS_DEFAULT), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_LOG_BITS_DEFAULT) }, -#else -{ SFF_CONFIG_LOG_BITS_DEFAULT(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT) }, -#else -{ SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_PORTING_STDLIB - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_PORTING_STDLIB), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_PORTING_STDLIB) }, -#else -{ SFF_CONFIG_PORTING_STDLIB(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS) }, -#else -{ SFF_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_INCLUDE_UCLI - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_INCLUDE_UCLI), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_INCLUDE_UCLI) }, -#else -{ SFF_CONFIG_INCLUDE_UCLI(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_INCLUDE_SFF_TOOL - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_INCLUDE_SFF_TOOL), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_INCLUDE_SFF_TOOL) }, -#else -{ SFF_CONFIG_INCLUDE_SFF_TOOL(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_INCLUDE_EXT_CC_CHECK - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_INCLUDE_EXT_CC_CHECK), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_INCLUDE_EXT_CC_CHECK) }, -#else -{ SFF_CONFIG_INCLUDE_EXT_CC_CHECK(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif -#ifdef SFF_CONFIG_INCLUDE_DATABASE - { __sff_config_STRINGIFY_NAME(SFF_CONFIG_INCLUDE_DATABASE), __sff_config_STRINGIFY_VALUE(SFF_CONFIG_INCLUDE_DATABASE) }, -#else -{ SFF_CONFIG_INCLUDE_DATABASE(__sff_config_STRINGIFY_NAME), "__undefined__" }, -#endif - { NULL, NULL } -}; -#undef __sff_config_STRINGIFY_VALUE -#undef __sff_config_STRINGIFY_NAME - -const char* -sff_config_lookup(const char* setting) -{ - int i; - for(i = 0; sff_config_settings[i].name; i++) { - if(!strcmp(sff_config_settings[i].name, setting)) { - return sff_config_settings[i].value; - } - } - return NULL; -} - -int -sff_config_show(struct aim_pvs_s* pvs) -{ - int i; - for(i = 0; sff_config_settings[i].name; i++) { - aim_printf(pvs, "%s = %s\n", sff_config_settings[i].name, sff_config_settings[i].value); - } - return i; -} - -/* */ - diff --git a/packages/base/any/onlp/src/sff/module/src/sff_db.c b/packages/base/any/onlp/src/sff/module/src/sff_db.c deleted file mode 100644 index 279e8ef4..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_db.c +++ /dev/null @@ -1,1858 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include - -#define SFF_1G_BASE_T_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_1G_BASE_T, "1GBASE-T", SFF_MEDIA_TYPE_COPPER, "Copper", SFF_MODULE_CAPS_F_1G - -#define SFF_1G_BASE_SX_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_1G_BASE_SX, "1GBASE-SX", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_1G - - -#define SFF_1G_BASE_LX_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_1G_BASE_LX, "1GBASE-LR", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_1G - - -#define SFF_10G_BASE_CR_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_10G_BASE_CR, "10GBASE-CR", SFF_MEDIA_TYPE_COPPER, "Copper", SFF_MODULE_CAPS_F_10G - - -#define SFF_10G_BASE_ZR_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_10G_BASE_ZR, "10GBASE-ZR", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_10G - - -#define SFF_10G_BASE_SR_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_10G_BASE_SR, "10GBASE-SR", SFF_MEDIA_TYPE_FIBER, "Fiber",SFF_MODULE_CAPS_F_10G - - -#define SFF_10G_BASE_SRL_PROPERTIES \ - SFF_SFP_TYPE_SFP, "SFP", SFF_MODULE_TYPE_10G_BASE_SRL, "1GBASE-SRL", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_10G - -#define SFF_25G_BASE_SR_PROPERTIES \ - SFF_SFP_TYPE_SFP28, "SFP28", SFF_MODULE_TYPE_25G_BASE_SR, "25GBASE-SR", SFF_MEDIA_TYPE_FIBER, "Fiber",SFF_MODULE_CAPS_F_25G - -#define SFF_25G_BASE_CR_PROPERTIES \ - SFF_SFP_TYPE_SFP28, "SFP28", SFF_MODULE_TYPE_25G_BASE_CR, "25GBASE-CR", SFF_MEDIA_TYPE_COPPER, "Copper", SFF_MODULE_CAPS_F_25G - -#define SFF_40G_BASE_SR4_PROPERTIES \ - SFF_SFP_TYPE_QSFP_PLUS, "QSFP+", SFF_MODULE_TYPE_40G_BASE_SR4, "40GBASE-SR4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_40G - -#define SFF_40G_BASE_LR4_PROPERTIES \ - SFF_SFP_TYPE_QSFP_PLUS, "QSFP+", SFF_MODULE_TYPE_40G_BASE_LR4, "40GBASE-LR4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_40G - -#define SFF_40G_BASE_LM4_PROPERTIES \ - SFF_SFP_TYPE_QSFP_PLUS, "QSFP+", SFF_MODULE_TYPE_40G_BASE_LM4, "40GBASE-LM4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_40G - - -#define SFF_40G_BASE_CR4_PROPERTIES \ - SFF_SFP_TYPE_QSFP_PLUS, "QSFP+", SFF_MODULE_TYPE_40G_BASE_CR4, "40GBASE-CR4", SFF_MEDIA_TYPE_COPPER, "Copper", SFF_MODULE_CAPS_F_40G - - -#define SFF_40G_BASE_SR2_PROPERTIES \ - SFF_SFP_TYPE_QSFP_PLUS, "QSFP+", SFF_MODULE_TYPE_40G_BASE_SR2, "40GBASE-SR2", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_40G - -#define SFF_100G_AOC_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_AOC, "100G-AOC", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G - -#define SFF_100G_BASE_LR4_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_BASE_LR4, "100GBASE-LR4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G - -#define SFF_100G_BASE_SR4_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_BASE_SR4, "100GBASE-SR4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G - -#define SFF_100G_BASE_CR4_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_BASE_CR4, "100GBASE-CR4", SFF_MEDIA_TYPE_COPPER, "Copper", SFF_MODULE_CAPS_F_100G - -#define SFF_100G_CWDM4_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_CWDM4, "100G-CWDM4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G - -#define SFF_100G_PSM4_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_PSM4, "100G-PSM4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G - -#define SFF_100G_SWDM4_PROPERTIES \ - SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_SWDM4, "100G-SWDM4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G - -static sff_db_entry_t sff_database__[] = - { - -#if SFF_CONFIG_INCLUDE_DATABASE == 1 - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x00, 0x00, 0x00, 0x01, 0x20, 0x40, 0x0c, 0x05, 0x01, 0x15, 0x00, 0x00, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x52, 0x4a, 0x38, 0x35, 0x31, 0x39, - 0x50, 0x31, 0x42, 0x4e, 0x4c, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x03, 0x52, 0x00, 0x66, - 0x00, 0x12, 0x00, 0x00, 0x50, 0x38, 0x4a, 0x32, 0x5a, 0x4e, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x35, 0x31, 0x30, 0x33, 0x31, 0x20, 0x20, 0x58, 0x90, 0x01, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "FINISAR CORP. ", - "FTRJ8519P1BNL ", - "P8J2ZNC ", - SFF_1G_BASE_SX_PROPERTIES, - -1, - } - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x41, 0x50, 0x48, 0x35, 0x37, 0x31, 0x35, 0x34, 0x30, 0x30, 0x30, - 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0xfa, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x46, 0x31, 0x30, 0x30, 0x38, 0x30, 0x30, 0x37, 0x30, 0x31, - 0x34, 0x37, 0x20, 0x20, 0x31, 0x30, 0x30, 0x33, 0x30, 0x32, 0x20, 0x20, 0x00, 0x00, 0x00, 0xa9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Amphenol ", - "571540007 ", - "APF10080070147 ", - SFF_10G_BASE_CR_PROPERTIES, - 0x1 - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x2d, 0x4d, 0x4f, 0x4c, 0x45, 0x58, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x09, 0x3a, 0x37, 0x34, 0x37, 0x35, 0x32, 0x2d, 0x39, 0x35, - 0x31, 0x39, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x38, 0x20, 0x20, 0x01, 0x00, 0x00, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x4d, 0x4f, 0x43, 0x31, 0x35, 0x34, 0x37, 0x30, 0x30, 0x30, 0x48, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x31, 0x31, 0x31, 0x32, 0x31, 0x20, 0x20, 0x00, 0x00, 0x00, 0x8f, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xf9, 0x8e, 0x5a, - 0x43, 0x4f, 0x50, 0x51, 0x41, 0x41, 0x34, 0x4a, 0x41, 0x42, 0x33, 0x37, 0x2d, 0x30, 0x39, 0x36, - 0x30, 0x2d, 0x30, 0x33, 0x56, 0x30, 0x33, 0x20, 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0xcc, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x53, 0x46, 0x50, 0x2d, 0x48, 0x31, 0x30, 0x47, 0x42, 0x2d, 0x43, 0x55, 0x31, 0x4d, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb3, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "CISCO-MOLEX ", - "74752-9519 ", - "MOC1547000H ", - SFF_10G_BASE_CR_PROPERTIES, - 0x1, - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x43, 0x39, 0x39, 0x39, 0x39, 0x2d, 0x31, 0x4d, - 0x2d, 0x50, 0x2d, 0x4c, 0x43, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0xa1, - 0x00, 0x00, 0x00, 0x00, 0x31, 0x33, 0x30, 0x35, 0x33, 0x30, 0x30, 0x30, 0x34, 0x31, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x33, 0x30, 0x34, 0x31, 0x33, 0x20, 0x20, 0x00, 0x00, 0x00, 0x1d, - 0x00, 0x00, 0x11, 0xb6, 0x7f, 0x7f, 0x08, 0x96, 0xee, 0x8e, 0x60, 0x37, 0xb4, 0xc8, 0x8b, 0x88, - 0x66, 0x9c, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xdd, 0x56, 0xe8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - " ", - "C9999-1M-P-LC ", - "1305300041 ", - SFF_10G_BASE_CR_PROPERTIES, - 0x0, - } - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x2d, 0x4d, 0x4f, 0x4c, 0x45, 0x58, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x09, 0x3a, 0x37, 0x34, 0x37, 0x35, 0x32, 0x2d, 0x39, 0x35, - 0x32, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x38, 0x20, 0x20, 0x01, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x00, 0x00, 0x4d, 0x4f, 0x43, 0x31, 0x36, 0x30, 0x33, 0x30, 0x42, 0x48, 0x34, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x30, 0x31, 0x31, 0x39, 0x20, 0x20, 0x00, 0x00, 0x00, 0xa5, - 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x04, 0x3b, 0x5b, - 0x43, 0x4f, 0x50, 0x51, 0x41, 0x41, 0x36, 0x4a, 0x41, 0x42, 0x33, 0x37, 0x2d, 0x30, 0x39, 0x36, - 0x31, 0x2d, 0x30, 0x33, 0x56, 0x30, 0x33, 0x20, 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0xcf, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x53, 0x46, 0x50, 0x2d, 0x48, 0x31, 0x30, 0x47, 0x42, 0x2d, 0x43, 0x55, 0x33, 0x4d, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "CISCO-MOLEX ", - "74752-9520 ", - "MOC16030BH4 ", - SFF_10G_BASE_CR_PROPERTIES, - 0x3 - }, - }, - }, - - { - { - .eeprom = { - 0x00, 0x80, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x01, 0x0d, 0x33, 0x0c, 0xcb, 0x0c, 0xcb, 0x0d, 0x33, 0x1b, 0xd5, 0x1b, 0x54, 0x18, 0xcd, 0x1c, - 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x03, 0x67, 0x00, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x4f, 0x45, 0x4d, 0x20, 0x20, - 0x0d, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x67, 0x00, 0x00, 0x00, - 0x0a, 0x03, 0x00, 0x00, 0x4f, 0x45, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x00, 0x1e, 0x00, 0x51, 0x53, 0x46, 0x50, 0x2d, 0x34, 0x30, 0x47, - 0x2d, 0x53, 0x52, 0x34, 0x20, 0x20, 0x20, 0x20, 0x31, 0x41, 0x42, 0x68, 0x07, 0xd0, 0x46, 0x0c, - 0x00, 0x00, 0x00, 0xde, 0x41, 0x43, 0x52, 0x34, 0x30, 0x47, 0x30, 0x30, 0x34, 0x31, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x30, 0x38, 0x32, 0x37, 0x31, 0x39, 0x08, 0x00, 0x00, 0x8a, - 0x00, 0x00, 0x11, 0x9d, 0xf1, 0x68, 0x34, 0xac, 0xb2, 0x3d, 0xc6, 0x19, 0x53, 0x0b, 0xbf, 0xf0, - 0x2e, 0xe1, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xfe, 0x58, 0x27, - }, - .info = { - "OEM ", - "QSFP-40G-SR4 ", - "ACR40G0041 ", - SFF_40G_BASE_SR4_PROPERTIES, - -1, - }, - }, - }, - - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xa0, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x78, 0xa7, 0x14, 0x36, 0x30, 0x33, 0x30, 0x32, 0x30, 0x30, 0x30, - 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x42, 0x20, 0x07, 0x0b, 0x00, 0x00, 0x46, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x46, 0x31, 0x33, 0x30, 0x32, 0x30, 0x30, 0x33, 0x35, 0x41, - 0x52, 0x56, 0x20, 0x20, 0x31, 0x33, 0x30, 0x31, 0x31, 0x35, 0x20, 0x20, 0x00, 0x00, 0x00, 0xf9, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Amphenol ", - "603020003 ", - "APF13020035ARV ", - SFF_40G_BASE_CR4_PROPERTIES, - 0x3 - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x46, 0x69, 0x62, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x40, 0x20, 0x31, 0x30, 0x47, 0x53, 0x46, 0x50, 0x2d, 0x50, - 0x43, 0x2d, 0x33, 0x30, 0x2d, 0x31, 0x20, 0x20, 0x41, 0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0xd9, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x53, 0x34, 0x30, 0x32, 0x31, 0x32, 0x44, 0x30, 0x31, 0x37, 0x36, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x34, 0x30, 0x32, 0x31, 0x33, 0x20, 0x20, 0x00, 0x00, 0x00, 0x8f, - 0x00, 0x00, 0x11, 0x4b, 0xd4, 0xe4, 0xc5, 0x99, 0xd1, 0xfb, 0xdb, 0x5e, 0xa2, 0xc4, 0x62, 0x0c, - 0xf2, 0x5b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26, 0xfa, 0x99, - 0x43, 0x4f, 0x50, 0x51, 0x41, 0x41, 0x34, 0x4a, 0x41, 0x41, 0x33, 0x37, 0x2d, 0x30, 0x39, 0x36, - 0x30, 0x2d, 0x30, 0x32, 0x56, 0x30, 0x32, 0x20, 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0xc9, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x53, 0x46, 0x50, 0x2d, 0x48, 0x31, 0x30, 0x47, 0x42, 0x2d, 0x43, 0x55, 0x31, 0x4d, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb3, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { -"FiberStore ", - "10GSFP-PC-30-1 ", - "FS40212D0176 ", - SFF_10G_BASE_CR_PROPERTIES, - 0x1, - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x06, 0x67, 0x00, 0x50, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x58, 0x31, 0x38, 0x37, 0x31, - 0x4d, 0x33, 0x42, 0x43, 0x4c, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x06, 0x0e, 0x00, 0x33, - 0x06, 0x1a, 0x00, 0x00, 0x55, 0x50, 0x47, 0x30, 0x31, 0x57, 0x4a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x33, 0x30, 0x34, 0x32, 0x39, 0x20, 0x20, 0x68, 0xf0, 0x05, 0xfe, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FTLX1871M3BCL ", - "UPG01WJ ", - SFF_10G_BASE_ZR_PROPERTIES, - -1, - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x67, 0x00, 0x00, 0x00, - 0x03, 0x01, 0x00, 0x0a, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x58, 0x38, 0x35, 0x37, 0x30, - 0x44, 0x33, 0x42, 0x43, 0x4c, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x03, 0x52, 0x00, 0x1c, - 0x00, 0x1a, 0x00, 0x00, 0x50, 0x50, 0x34, 0x34, 0x51, 0x56, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x33, 0x30, 0x32, 0x31, 0x37, 0x20, 0x20, 0x68, 0xf0, 0x03, 0xe3, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FTLX8570D3BCL ", - "PP44QV1 ", - SFF_10G_BASE_SRL_PROPERTIES, - -1, - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x00, 0x00, 0x00, 0x02, 0x12, 0x10, 0x01, 0x05, 0x01, 0x15, 0x00, 0x0a, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x52, 0x4a, 0x31, 0x33, 0x31, 0x39, - 0x50, 0x31, 0x42, 0x54, 0x4c, 0x2d, 0x4d, 0x44, 0x41, 0x20, 0x20, 0x20, 0x05, 0x1e, 0x00, 0x88, - 0x00, 0x1a, 0x00, 0x00, 0x50, 0x44, 0x42, 0x31, 0x56, 0x51, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x30, 0x38, 0x30, 0x33, 0x31, 0x37, 0x20, 0x20, 0x68, 0xb0, 0x01, 0xc9, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { -"FINISAR CORP. ", - "FTRJ1319P1BTL-MD", - "PDB1VQU ", - SFF_1G_BASE_LX_PROPERTIES, - -1, - }, - }, - }, - - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x81, 0x00, 0x00, 0x04, 0x41, 0x04, 0x80, 0xd5, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x54, 0x79, 0x63, 0x6f, 0x20, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6e, 0x69, 0x63, 0x73, 0x00, 0x00, 0x40, 0x20, 0x32, 0x31, 0x30, 0x30, 0x38, 0x37, 0x30, 0x2d, - 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x8a, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x39, 0x33, 0x35, 0x45, 0x30, 0x34, 0x38, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x30, 0x30, 0x35, 0x30, 0x39, 0x30, 0x30, 0x00, 0x00, 0x00, 0x41, - 0x37, 0x34, 0x30, 0x2d, 0x30, 0x33, 0x30, 0x30, 0x37, 0x36, 0x20, 0x52, 0x45, 0x56, 0x20, 0x30, - 0x31, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Tyco Electronics", - "2100870-1 ", - "0935E048 ", - SFF_10G_BASE_CR_PROPERTIES, - 1, - }, - }, - }, - - { - { - .eeprom = { - /* 0 */ 0x0d, 0x00, 0x02, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 16 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 32 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 48 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 64 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 96 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 112 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 128 */ 0x0d, 0xdc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xce, 0x00, 0x00, 0x32, - /* 144 */ 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x2d, 0x41, 0x56, 0x41, 0x47, 0x4f, 0x20, - /* 160 */ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x17, 0x6a, 0x41, 0x46, 0x42, 0x52, 0x2d, 0x37, 0x39, 0x45, - /* 176 */ 0x42, 0x50, 0x5a, 0x2d, 0x43, 0x53, 0x31, 0x20, 0x30, 0x31, 0x42, 0x68, 0x07, 0xd0, 0x46, 0x47, - /* 192 */ 0x00, 0x00, 0x0f, 0xde, 0x41, 0x56, 0x4d, 0x31, 0x38, 0x30, 0x39, 0x53, 0x30, 0x54, 0x47, 0x20, - /* 208 */ 0x20, 0x20, 0x20, 0x20, 0x31, 0x34, 0x30, 0x32, 0x32, 0x35, 0x20, 0x20, 0x08, 0x00, 0xf5, 0xcc, - /* 224 */ 0xf5, 0x00, 0x06, 0xd2, 0x04, 0x9c, 0x47, 0x09, 0xc5, 0xaf, 0xcf, 0xb7, 0x65, 0xd9, 0x72, 0x03, - /* 240 */ 0xea, 0x59, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x45, 0xbd, 0x94, - }, - .info = { -"CISCO-AVAGO ", - "AFBR-79EBPZ-CS1 ", - "AVM1809S0TG ", - SFF_40G_BASE_SR2_PROPERTIES, - -1, - }, - }, - }, - /* Cisco/Finisar 40G QSFP (QuadWire? AOC? Pigtail?) */ - { - { - .eeprom = { - /* 0x0000 */ 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xde, 0x00, 0x00, 0x7f, 0x4d, 0x00, 0x00, 0x00, 0x00, - /* 0x0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0030 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0040 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0050 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0060 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0070 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - /* 0x0080 */ 0x0d, 0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x32, - /* 0x0090 */ 0x1e, 0x00, 0x0a, 0x00, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - /* 0x00a0 */ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x43, 0x42, 0x4e, 0x34, 0x31, 0x30, 0x51, - /* 0x00b0 */ 0x45, 0x32, 0x43, 0x31, 0x30, 0x2d, 0x43, 0x31, 0x41, 0x20, 0x42, 0x68, 0x07, 0xd0, 0x46, 0xaf, - /* 0x00c0 */ 0x00, 0x01, 0x04, 0xd8, 0x46, 0x49, 0x53, 0x31, 0x37, 0x33, 0x31, 0x30, 0x30, 0x35, 0x33, 0x2d, - /* 0x00d0 */ 0x41, 0x20, 0x20, 0x20, 0x31, 0x33, 0x30, 0x37, 0x33, 0x31, 0x20, 0x20, 0x0a, 0x00, 0xf6, 0x90, - /* 0x00e0 */ 0x00, 0x00, 0x02, 0x43, 0x59, 0xd3, 0x68, 0x03, 0x46, 0x83, 0x87, 0x75, 0x1f, 0xee, 0x94, 0x62, - /* 0x00f0 */ 0xb8, 0x98, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x75, 0x43, - }, - .info = { - "CISCO ", - "FCBN410QE2C10-C1", - "FIS17310053-A ", - SFF_40G_BASE_SR4_PROPERTIES, - -1, - }, - }, - }, - /* - * Dell/Amphenol 3M copper - * Identifies as intra-enclosure and inter-enclosure - */ - { - { - .eeprom = { - /* 0000 */ 0x03, 0x04, 0x21, 0x01, 0x00, 0x00, 0x00, 0x41, 0x84, 0x80, 0x55, 0x00, 0x67, 0x00, 0x00, 0x00, - /* 0010 */ 0x00, 0x00, 0x03, 0x00, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - /* 0020 */ 0x20, 0x20, 0x20, 0x20, 0x00, 0x78, 0xa7, 0x14, 0x36, 0x31, 0x36, 0x37, 0x34, 0x30, 0x30, 0x30, - /* 0030 */ 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0xe3, - /* 0040 */ 0x00, 0x00, 0x00, 0x00, 0x43, 0x4e, 0x30, 0x35, 0x33, 0x48, 0x56, 0x4e, 0x34, 0x34, 0x4c, 0x38, - /* 0050 */ 0x37, 0x59, 0x59, 0x20, 0x31, 0x34, 0x30, 0x34, 0x32, 0x33, 0x20, 0x20, 0x00, 0x00, 0x00, 0x78, - /* 0060 */ 0x0f, 0x10, 0x00, 0xa3, 0x71, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0070 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0080 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0090 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 00a0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 00b0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 00c0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 00d0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 00e0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 00f0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Amphenol ", - "616740003 ", - "CN053HVN44L87YY ", - SFF_10G_BASE_CR_PROPERTIES, - 3, - }, - }, - }, - /* - * Dell/Amphenol 3M copper - * Identifies as intra-enclosure and inter-enclosure - */ - { - { - .eeprom = { - /* 0x0000 */ 0x03, 0x04, 0x21, 0x02, 0x00, 0x00, 0x04, 0x41, 0x84, 0x80, 0xd5, 0x00, 0x67, 0x00, 0x00, 0x00, - /* 0x0010 */ 0x00, 0x00, 0x03, 0x00, 0x33, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - /* 0x0020 */ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x31, 0x34, 0x31, 0x30, 0x2d, 0x50, 0x31, 0x37, - /* 0x0030 */ 0x2d, 0x30, 0x30, 0x2d, 0x33, 0x2e, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1c, - /* 0x0040 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0050 */ 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x30, 0x32, 0x32, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, - /* 0x0060 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0070 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0080 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0090 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00a0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00b0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00c0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00d0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00e0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00f0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M ", - "1410-P17-00-3.00", - /* XXX roth -- NULL serial number ??!??111! */ - " ", - SFF_10G_BASE_CR_PROPERTIES, - 3, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x14, 0x21, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x12, 0x48, 0x12, 0x48, 0x12, 0x48, 0x12, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, - 0x0c, 0x04, 0x00, 0x00, 0x00, 0x40, 0x40, 0x06, 0x00, 0x05, - 0x64, 0x00, 0x00, 0x32, 0x1e, 0x00, 0x00, 0x00, 0x45, 0x64, - 0x67, 0x65, 0x2d, 0x63, 0x6f, 0x72, 0x45, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x04, 0x70, 0x72, 0xcf, 0x4d, 0x30, - 0x4f, 0x45, 0x43, 0x36, 0x34, 0x30, 0x31, 0x54, 0x30, 0x30, - 0x5a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x42, 0x68, 0x07, 0xd0, - 0x46, 0xb0, 0x00, 0x00, 0x00, 0x12, 0x31, 0x45, 0x37, 0x51, - 0x54, 0x30, 0x30, 0x30, 0x33, 0x30, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x31, 0x34, 0x30, 0x37, 0x32, 0x38, 0x20, 0x20, - 0x08, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "Edge-corE ", - "M0OEC6401T00Z ", - "1E7QT00030 ", - SFF_40G_BASE_SR4_PROPERTIES, - -1, - }, - } - }, - { - { - .eeprom = { - 0x0d, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x30, 0x00, 0x00, 0x82, 0xa2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x12, 0x48, 0x12, 0x48, 0x12, 0x48, 0x12, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, - 0x0c, 0x04, 0x00, 0x00, 0x00, 0x40, 0x40, 0x06, 0x00, 0x05, - 0x64, 0x00, 0x00, 0x32, 0x1e, 0x00, 0x00, 0x00, 0x45, 0x64, - 0x67, 0x65, 0x2d, 0x63, 0x6f, 0x72, 0x45, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x04, 0x70, 0x72, 0xcf, 0x4d, 0x30, - 0x4f, 0x45, 0x43, 0x36, 0x34, 0x30, 0x31, 0x54, 0x30, 0x30, - 0x5a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x42, 0x68, 0x07, 0xd0, - 0x46, 0xb0, 0x00, 0x00, 0x00, 0x12, 0x31, 0x45, 0x37, 0x51, - 0x54, 0x30, 0x30, 0x30, 0x32, 0x38, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x31, 0x34, 0x30, 0x37, 0x32, 0x38, 0x20, 0x20, - 0x08, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }, - .info = { - "Edge-corE ", - "M0OEC6401T00Z ", - "1E7QT00028 ", - SFF_40G_BASE_SR4_PROPERTIES, - -1, - }, - } - }, - { - { - .eeprom = { - 0x0d, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x17, 0x9f, 0x00, 0x00, 0x80, 0x29, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xd5, 0x44, 0x3a, 0x48, 0xb1, - 0x4d, 0x30, 0x12, 0x48, 0x12, 0x48, 0x12, 0x48, 0x12, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x8c, - 0x23, 0x04, 0x00, 0x00, 0x01, 0x40, 0x40, 0x02, 0x00, 0x05, - 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x46, 0x4f, - 0x52, 0x4d, 0x45, 0x52, 0x49, 0x43, 0x41, 0x4f, 0x45, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x04, 0x00, 0x00, 0x00, 0x54, 0x51, - 0x53, 0x2d, 0x51, 0x31, 0x4c, 0x48, 0x38, 0x2d, 0x58, 0x43, - 0x41, 0x31, 0x30, 0x20, 0x00, 0x00, 0x42, 0x68, 0x07, 0xd0, - 0x46, 0x4a, 0x00, 0x00, 0x05, 0x31, 0x39, 0x31, 0x33, 0x33, - 0x32, 0x4c, 0x30, 0x30, 0x30, 0x31, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x31, 0x33, 0x30, 0x38, 0x30, 0x36, 0x20, 0x20, - 0x08, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, - 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf7, 0xf7, 0xf7, - 0xf7, 0xf7, 0xf7, 0xf7, 0xfe, 0xfe, - }, - .info = { - "FORMERICAOE ", - "TQS-Q1LH8-XCA10 ", - "91332L0001 ", - SFF_40G_BASE_SR4_PROPERTIES, - 10, - }, - }, - }, - - { - { - .eeprom = { - /* 0x0000 */ 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x06, 0x67, 0x00, 0x00, 0x00, - /* - * ^^^^ copper pigtail - * - * ^^^^ no 10G or IB codes - * - * ^^^^ ^^^^ no SONET (fiber) - * - * identifies as 1000BASE-CX ^^^^ - * - * no FC length code ^^^^ - * - * identifies as SFP+ passive ^^^^ - * - * no FC media, copper or otherwise ^^^^ - * - * no FC speed ^^^^ - * - * nominal bitrate 0x67 --> 10.3GB ^^^^ - */ - /* 0x0010 */ 0x00, 0x00, 0x03, 0x00, 0x49, 0x42, 0x4d, 0x2d, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, - /* - * ^^^^ copper cable length (3m) - */ - /* 0x0020 */ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x17, 0xef, 0x39, 0x30, 0x59, 0x39, 0x34, 0x32, 0x38, 0x2d, - /* 0x0030 */ 0x4e, 0x32, 0x38, 0x35, 0x30, 0x30, 0x41, 0x20, 0x46, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x7a, - /* 0x0040 */ 0x00, 0x00, 0x00, 0x00, 0x59, 0x33, 0x35, 0x30, 0x56, 0x54, 0x32, 0x42, 0x52, 0x31, 0x46, 0x47, - /* 0x0050 */ 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x31, 0x31, 0x32, 0x37, 0x20, 0x20, 0x00, 0x00, 0x00, 0x0d, - /* 0x0060 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x0070 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x0080 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x0090 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00a0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00b0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00c0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00d0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00e0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00f0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { -"IBM-Amphenol ", - "90Y9428-N28500A ", - "Y350VT2BR1FG ", - SFF_10G_BASE_CR_PROPERTIES, - 3, - }, - }, - }, - { - /* Verify string normalization for unprintable characters in the vendor, model, or serial number fields. */ - { - { - /* 0x0000 */ 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x06, 0x67, 0x00, 0x00, 0x00, - /* 0x0010 */ 0x00, 0x00, 0x03, 0x00, 0x49, 0x42, 0x4d, 0x2d, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, - /* 0x0020 */ 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x17, 0xef, 0x39, 0x30, 0x59, 0x39, 0x34, 0x32, 0x38, 0xFd, - /* 0x0030 */ 0x4e, 0x32, 0x38, 0x35, 0x30, 0x30, 0x41, 0x20, 0x46, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x8a, - /* 0x0040 */ 0x00, 0x00, 0x00, 0x00, 0x59, 0x33, 0xF5, 0xF0, 0x56, 0x54, 0x32, 0x42, 0x52, 0x31, 0x46, 0x47, - /* 0x0050 */ 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x31, 0x31, 0x32, 0x37, 0x20, 0x20, 0x00, 0x00, 0x00, 0x8d, - /* 0x0060 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x0070 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x0080 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x0090 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00a0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00b0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00c0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00d0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00e0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* 0x00f0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "IBM-Amphenol????", - "90Y9428?N28500A ", - "Y3??VT2BR1FG ", - SFF_10G_BASE_CR_PROPERTIES, - 3, - }, - }, - }, - { - /* - * Finisar 40G AOC breakout cable - */ - { - { - /* 0x0000 */ 0x0d, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x9f, 0x00, 0x00, 0x80, 0xc2, 0x00, 0x00, 0x00, 0x00, - /* 0x0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0030 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0040 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0050 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0060 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0070 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - - /* 0x0080 */ 0x0d, 0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x00, - /* - * ^^^^ QSFP+ - * - * ^^^^ no separable connector (active?) - * - * ^^^^^ no media compliance (*NOT* 40G active) - * - * ^^^^ no SONET compliance - * - * ^^^^ no SAS compliance - * - * ^^^^ no GbE compliance - * - * ^^^^ ^^^^ no FC compliance - * - * ^^^^ no FC media - * - * ^^^^ no FC speed - * - * ^^^^ 64b66b - * - * ^^^^ nominal BR >= 10G - * no SM or OM3 length ^^^^ ^^^^ - */ - /* 0x0090 */ 0x00, 0x00, 0x03, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - /* - * ^^^^ ^^^^ no OM1 or OM2 length - * - * ^^^^ 3M cable (copper or active) - */ - /* 0x00a0 */ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x43, 0x42, 0x4e, 0x35, 0x31, 0x30, 0x51, - /* 0x00b0 */ 0x45, 0x32, 0x43, 0x30, 0x33, 0x20, 0x20, 0x20, 0x41, 0x20, 0x42, 0x68, 0x07, 0xd0, 0x46, 0x29, - /* - * ^^^^ ^^^^ 850nm - */ - /* 0x00c0 */ 0x00, 0x01, 0x04, 0xd8, 0x44, 0x53, 0x4b, 0x30, 0x34, 0x56, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, - /* 0x00d0 */ 0x20, 0x20, 0x20, 0x20, 0x31, 0x34, 0x31, 0x31, 0x30, 0x34, 0x20, 0x20, 0x08, 0x00, 0xf6, 0x54, - /* 0x00e0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00f0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP ", - "FCBN510QE2C03 ", - "DSK04VR ", - SFF_40G_BASE_SR4_PROPERTIES, - 3, - }, - }, - }, - { - /* - * Finisar 40G AOC breakout cable, 10G end - */ - { - { - /* 0x0000 */ 0x03, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x67, 0x00, 0x00, 0x00, - /* - * ^^^^ SFP+ - * - * ^^^^ copper pigtail (ugh) - * - * ^^^^ no 10G or IF compliance - * - * ^^^^ no SONET compliance - * - * ^^^^ no OC length spec - * - * ^^^^ no ethernet compliance - * - * ^^^^ no FC length or tech - * - * ^^^^ active cable, no FC tech - * - * ^^^^ no FC media - * - * ^^^^ no FC speed - * - * ^^^^ 64/66 encoding - * - * nominal BR >= 10G ^^^^ - * - * no SM length ^^^^ ^^^^ - */ - /* 0x0010 */ 0x00, 0x00, 0x01, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - /* - * ^^^^ ^^^^ no MM length - * - * ^^^^ active/copper length 1m - * - * ^^^^ no OM3 length - * - */ - /* 0x0020 */ 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x43, 0x42, 0x4e, 0x35, 0x31, 0x30, 0x51, - /* 0x0030 */ 0x45, 0x32, 0x43, 0x30, 0x31, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x0c, 0x00, 0x00, 0xa9, - /* - * compliant with FC or SFF limiting ^^^^ ^^^^ - */ - /* 0x0040 */ 0x00, 0x12, 0x00, 0x00, 0x44, 0x53, 0x4a, 0x30, 0x35, 0x39, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, - /* 0x0050 */ 0x20, 0x20, 0x20, 0x20, 0x31, 0x34, 0x31, 0x30, 0x33, 0x30, 0x20, 0x20, 0x00, 0x00, 0x05, 0x72, - /* 0x0060 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0070 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0080 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x0090 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00a0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00b0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00c0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00d0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00e0 */ 0x00, 0x7f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x00f0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FCBN510QE2C01 ", - "DSJ059S ", - SFF_10G_BASE_SR_PROPERTIES, - 1, - }, - }, - }, - - - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x33, 0x4d, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x08, 0x00, 0x21, 0x39, 0x51, 0x41, 0x30, 0x2d, 0x31, 0x31, 0x31, - 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x03, 0x05, 0x06, 0x0c, 0x00, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x31, 0x30, 0x45, 0x42, 0x30, 0x38, 0x35, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x31, 0x31, 0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M Company ", - "9QA0-111-12-1.00", - "V10EB085 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x4f, 0x00, 0x00, 0x7f, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1b, 0x19, 0x1c, 0x87, 0x1a, 0x7c, 0x1b, 0xdd, 0x0e, 0xed, 0x0e, 0xd1, 0x0e, 0xcc, - 0x0f, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xcc, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x90, 0x65, 0x46, 0x43, 0x42, 0x4e, 0x34, 0x32, 0x35, 0x51, - 0x42, 0x31, 0x43, 0x30, 0x33, 0x20, 0x20, 0x20, 0x41, 0x31, 0x00, 0x00, 0x00, 0x00, 0x46, 0xb1, - 0x01, 0x07, 0xff, 0xde, 0x44, 0x55, 0x48, 0x30, 0x30, 0x32, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x30, 0x32, 0x31, 0x20, 0x20, 0x08, 0x00, 0x67, 0x94, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP ", - "FCBN425QB1C03 ", - "DUH002C ", - SFF_100G_AOC_PROPERTIES, - 3, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x4f, 0x00, 0x00, 0x81, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xd7, 0x06, 0x55, 0x06, 0x41, 0x07, 0xab, 0x4b, 0x1d, 0x45, 0x55, 0x48, 0x45, - 0x44, 0x4a, 0x1f, 0x02, 0x2f, 0x75, 0x32, 0x82, 0x37, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x0d, 0xc0, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x0a, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x34, 0x43, 0x31, 0x51, 0x45, - 0x31, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x31, 0x65, 0xa4, 0x05, 0x14, 0x46, 0xa1, - 0x00, 0x01, 0x0c, 0xd8, 0x55, 0x51, 0x4b, 0x30, 0x4e, 0x4c, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x33, 0x31, 0x31, 0x32, 0x30, 0x20, 0x20, 0x08, 0x00, 0x00, 0x61, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FTL4C1QE1C ", - "UQK0NL1 ", - SFF_40G_BASE_LR4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xd3, 0x00, 0x00, 0x80, 0x56, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x23, 0x03, 0xbc, 0x03, 0x20, 0x06, 0x49, 0x4d, 0x76, 0x4f, 0x6a, 0x54, 0x33, - 0x44, 0xc5, 0x3c, 0xd8, 0x38, 0xc4, 0x3b, 0xe6, 0x36, 0x89, 0x80, 0x51, 0x81, 0x48, 0x7e, 0xe2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x0a, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x4a, 0x44, 0x53, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x01, 0x9c, 0x4a, 0x51, 0x50, 0x2d, 0x30, 0x34, 0x4c, 0x57, - 0x42, 0x41, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x66, 0x6c, 0x05, 0x14, 0x46, 0xe5, - 0x00, 0x00, 0x0c, 0x98, 0x46, 0x45, 0x33, 0x34, 0x31, 0x30, 0x38, 0x38, 0x43, 0x30, 0x32, 0x34, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x34, 0x30, 0x38, 0x32, 0x32, 0x20, 0x20, 0x08, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "JDSU ", - "JQP-04LWBA2 ", - "FE341088C024 ", - SFF_40G_BASE_LR4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x33, 0x4d, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x08, 0x00, 0x21, 0x39, 0x51, 0x41, 0x30, 0x2d, 0x31, 0x31, 0x31, - 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x03, 0x05, 0x06, 0x0c, 0x00, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x31, 0x30, 0x42, 0x39, 0x32, 0x30, 0x32, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x30, 0x39, 0x31, 0x37, 0x20, 0x20, 0x00, 0x00, 0x00, 0x3a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M Company ", - "9QA0-111-12-1.00", - "V10B9202 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa4, 0x00, 0x00, 0x81, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x96, 0x1d, 0xe5, 0x28, 0xfc, 0x1e, 0x76, 0x30, 0x05, 0x2e, 0x97, 0x30, 0xaf, - 0x41, 0x07, 0x1f, 0x47, 0x1f, 0x70, 0x20, 0x0c, 0x1d, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xcc, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x4c, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x55, 0x4d, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x01, 0x9c, 0x4c, 0x51, 0x32, 0x31, 0x30, 0x43, 0x52, 0x2d, - 0x43, 0x41, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x66, 0x6c, 0x05, 0x14, 0x00, 0x96, - 0x06, 0x0f, 0xff, 0xfa, 0x46, 0x46, 0x34, 0x32, 0x35, 0x30, 0x35, 0x30, 0x30, 0x30, 0x31, 0x39, - 0x2d, 0x51, 0x20, 0x20, 0x31, 0x35, 0x31, 0x32, 0x30, 0x32, 0x20, 0x20, 0x0c, 0x18, 0x67, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "LUMENTUM ", - "LQ210CR-CAA1 ", - "FF4250500019-Q ", - SFF_100G_CWDM4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x33, 0x4d, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x08, 0x00, 0x21, 0x39, 0x51, 0x41, 0x30, 0x2d, 0x31, 0x31, 0x31, - 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x03, 0x05, 0x06, 0x0c, 0x00, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x31, 0x30, 0x45, 0x42, 0x30, 0x34, 0x39, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x31, 0x31, 0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M Company ", - "9QA0-111-12-1.00", - "V10EB049 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x17, 0x00, 0x00, 0x7f, 0x46, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0xa9, 0x1c, 0x81, 0x1c, 0x4a, 0x1d, 0xf0, 0x0f, 0xfb, 0x0f, 0x8e, 0x0f, 0x90, - 0x0f, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xcc, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x90, 0x65, 0x46, 0x43, 0x42, 0x4e, 0x34, 0x32, 0x35, 0x51, - 0x42, 0x31, 0x43, 0x31, 0x30, 0x20, 0x20, 0x20, 0x41, 0x31, 0x00, 0x00, 0x00, 0x00, 0x46, 0xb6, - 0x01, 0x07, 0xff, 0xde, 0x44, 0x55, 0x48, 0x30, 0x30, 0x37, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x30, 0x32, 0x34, 0x20, 0x20, 0x08, 0x00, 0x67, 0x8d, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP ", - "FCBN425QB1C10 ", - "DUH0074 ", - SFF_100G_AOC_PROPERTIES, - 10, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x33, 0x4d, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x08, 0x00, 0x21, 0x39, 0x51, 0x41, 0x30, 0x2d, 0x31, 0x31, 0x31, - 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x03, 0x05, 0x06, 0x0c, 0x00, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x31, 0x30, 0x45, 0x42, 0x30, 0x34, 0x36, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x31, 0x31, 0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M Company ", - "9QA0-111-12-1.00", - "V10EB046 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2d, 0x00, 0x00, 0x7f, 0x58, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xf8, 0x12, 0x17, 0x17, 0x09, 0x0f, 0x2e, 0x8c, 0x56, 0x79, 0x8a, 0x7e, 0x21, - 0x84, 0xb5, 0x1f, 0x8d, 0x21, 0x25, 0x20, 0xa1, 0x23, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, - 0x11, 0xcd, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x64, 0x44, 0x45, 0x4c, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x1f, 0x22, 0x33, 0x4d, 0x46, 0x58, 0x47, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x30, 0x66, 0x58, 0x01, 0x90, 0x46, 0x7a, - 0x03, 0x0f, 0xff, 0xda, 0x43, 0x4e, 0x30, 0x33, 0x4d, 0x46, 0x58, 0x47, 0x35, 0x36, 0x49, 0x30, - 0x30, 0x30, 0x31, 0x20, 0x31, 0x35, 0x30, 0x36, 0x31, 0x38, 0x20, 0x20, 0x0c, 0x10, 0x67, 0x9e, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xdf, 0x10, 0x01, 0x21, 0x41, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "DELL ", - "3MFXG ", - "CN03MFXG56I0001 ", - SFF_100G_BASE_LR4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x33, 0x4d, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x08, 0x00, 0x21, 0x39, 0x51, 0x41, 0x30, 0x2d, 0x31, 0x31, 0x31, - 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x03, 0x05, 0x06, 0x0c, 0x00, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x31, 0x30, 0x45, 0x42, 0x30, 0x30, 0x31, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x31, 0x31, 0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M Company ", - "9QA0-111-12-1.00", - "V10EB001 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x33, 0x4d, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x08, 0x00, 0x21, 0x39, 0x51, 0x41, 0x30, 0x2d, 0x31, 0x31, 0x31, - 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x31, 0x03, 0x05, 0x06, 0x0c, 0x00, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x31, 0x30, 0x42, 0x39, 0x37, 0x36, 0x35, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x30, 0x39, 0x31, 0x37, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "3M Company ", - "9QA0-111-12-1.00", - "V10B9765 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x89, 0x00, 0x00, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2c, 0x7a, 0x2c, 0x51, 0x23, 0x1a, 0x25, 0x43, 0x0d, 0xb3, 0x0d, 0x77, 0x0d, 0xc7, - 0x0d, 0x7f, 0x1a, 0xed, 0x1b, 0x3e, 0x1c, 0xa4, 0x1c, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x32, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x56, 0x41, 0x47, 0x4f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x17, 0x6a, 0x41, 0x46, 0x42, 0x52, 0x2d, 0x37, 0x39, 0x45, - 0x51, 0x44, 0x5a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x42, 0x68, 0x07, 0xd0, 0x46, 0xbe, - 0x00, 0x00, 0x0f, 0xde, 0x51, 0x44, 0x34, 0x39, 0x30, 0x37, 0x32, 0x38, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x33, 0x31, 0x32, 0x30, 0x35, 0x20, 0x20, 0x08, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "AVAGO ", - "AFBR-79EQDZ ", - "QD490728 ", - SFF_40G_BASE_SR4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x23, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xa0, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x1f, 0x78, 0xa7, 0x14, 0x4e, 0x44, 0x41, 0x41, 0x46, 0x46, 0x2d, 0x43, - 0x31, 0x30, 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x07, 0x0b, 0x0d, 0x13, 0x55, 0x15, - 0x0b, 0x00, 0x00, 0x00, 0x41, 0x50, 0x46, 0x31, 0x35, 0x35, 0x30, 0x31, 0x30, 0x33, 0x34, 0x37, - 0x35, 0x46, 0x20, 0x20, 0x31, 0x35, 0x31, 0x32, 0x30, 0x38, 0x20, 0x20, 0x00, 0x00, 0x67, 0x3f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Amphenol ", - "NDAAFF-C103 ", - "APF1550103475F ", - SFF_100G_BASE_CR4_PROPERTIES, - 3, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x68, 0x00, 0x00, 0x7f, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x34, 0x0f, 0x1c, 0xf3, 0x34, 0x57, 0x33, 0xcf, 0x0d, 0xd3, 0x0d, 0xf9, 0x0e, 0x03, - 0x0d, 0xdf, 0x26, 0xe6, 0x2d, 0xd3, 0x2d, 0xd8, 0x30, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xcc, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x23, - 0x00, 0x00, 0x32, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x43, 0x39, 0x35, 0x35, 0x31, - 0x52, 0x45, 0x50, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x41, 0x30, 0x42, 0x68, 0x07, 0xd0, 0x00, 0x3c, - 0x02, 0x07, 0xff, 0xde, 0x58, 0x55, 0x39, 0x30, 0x54, 0x52, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x31, 0x30, 0x30, 0x36, 0x20, 0x20, 0x0c, 0x10, 0x67, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP ", - "FTLC9551REPM ", - "XU90TRP ", - SFF_100G_BASE_SR4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x66, 0x00, 0x00, 0x7f, 0x45, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x1b, 0x1f, 0x2d, 0x1f, 0xe5, 0x1f, 0xdb, 0x0f, 0x25, 0x0f, 0x19, 0x0f, 0x09, - 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xcc, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x90, 0x65, 0x46, 0x43, 0x42, 0x4e, 0x34, 0x32, 0x35, 0x51, - 0x42, 0x31, 0x43, 0x30, 0x35, 0x20, 0x20, 0x20, 0x41, 0x31, 0x00, 0x00, 0x00, 0x00, 0x46, 0xb5, - 0x01, 0x07, 0xff, 0xde, 0x44, 0x55, 0x38, 0x30, 0x30, 0x33, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x30, 0x38, 0x32, 0x31, 0x20, 0x20, 0x08, 0x00, 0x67, 0x8e, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP ", - "FCBN425QB1C05 ", - "DU8003E ", - SFF_100G_AOC_PROPERTIES, - 5, - }, - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x10, 0x00, 0x00, 0x00, 0x20, 0x40, 0x0c, 0x80, 0x06, 0x67, 0x00, 0x00, 0x00, - 0x08, 0x03, 0x00, 0x1e, 0x4a, 0x44, 0x53, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x01, 0x9c, 0x50, 0x4c, 0x52, 0x58, 0x50, 0x4c, 0x53, 0x43, - 0x53, 0x34, 0x33, 0x32, 0x32, 0x4e, 0x20, 0x20, 0x32, 0x20, 0x20, 0x20, 0x03, 0x52, 0x00, 0xfe, - 0x00, 0x1a, 0x00, 0x00, 0x43, 0x42, 0x34, 0x35, 0x55, 0x46, 0x30, 0x30, 0x31, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x31, 0x31, 0x30, 0x33, 0x31, 0x20, 0x20, 0x68, 0xf0, 0x03, 0xd6, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "JDSU ", - "PLRXPLSCS4322N ", - "CB45UF001 ", - SFF_10G_BASE_SR_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x67, 0x00, 0x00, 0x00, - 0x08, 0x03, 0x00, 0x1e, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x58, 0x38, 0x35, 0x37, 0x31, - 0x44, 0x33, 0x42, 0x43, 0x4c, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x03, 0x52, 0x00, 0x48, - 0x00, 0x1a, 0x00, 0x00, 0x4d, 0x54, 0x38, 0x31, 0x54, 0x45, 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x30, 0x33, 0x30, 0x34, 0x20, 0x20, 0x68, 0xf0, 0x03, 0xfd, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FTLX8571D3BCL ", - "MT81TEX ", - SFF_10G_BASE_SR_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x78, 0x00, 0x00, 0x7f, 0x19, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x89, 0x0d, 0x70, 0xb6, 0x51, 0x1b, 0x7e, 0x8a, 0x51, 0x40, 0x44, 0x62, 0x4f, 0x4f, - 0x4a, 0xe3, 0x46, 0x41, 0x45, 0xc9, 0x49, 0x6e, 0x49, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x0d, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x01, 0x46, - 0x00, 0x00, 0x00, 0x40, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x34, 0x43, 0x33, 0x51, 0x45, - 0x31, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x31, 0x65, 0xa4, 0x05, 0x14, 0x46, 0xde, - 0x00, 0x01, 0x0c, 0xd8, 0x55, 0x54, 0x4e, 0x30, 0x51, 0x38, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x36, 0x30, 0x33, 0x31, 0x30, 0x20, 0x20, 0x08, 0x00, 0x00, 0x5c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FTL4C3QE1C ", - "UTN0Q84 ", - SFF_40G_BASE_LM4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x0a, 0x07, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x02, 0x00, 0x90, 0x65, 0x46, 0x54, 0x4c, 0x46, 0x38, 0x35, 0x33, 0x36, - 0x50, 0x34, 0x42, 0x43, 0x4c, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x03, 0x52, 0x00, 0xb8, - 0x08, 0x1a, 0x70, 0x00, 0x55, 0x57, 0x42, 0x30, 0x34, 0x56, 0x59, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x36, 0x31, 0x32, 0x32, 0x35, 0x20, 0x20, 0x68, 0xf0, 0x08, 0x84, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "FINISAR CORP. ", - "FTLF8536P4BCL ", - "UWB04VY ", - SFF_25G_BASE_SR_PROPERTIES, - -1, - } - } - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xed, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xa0, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x2d, 0x4f, 0x45, 0x4d, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x51, 0x53, 0x46, 0x50, 0x2d, 0x34, 0x53, 0x46, - 0x50, 0x2b, 0x2d, 0x43, 0x55, 0x32, 0x4d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x54, 0x4f, 0x55, 0x30, 0x38, 0x31, 0x30, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x37, 0x30, 0x36, 0x32, 0x38, 0x20, 0x20, 0x2e, 0x00, 0xe1, 0x8f, - 0xe1, 0x00, 0x11, 0x07, 0xe0, 0x78, 0x3c, 0x38, 0x70, 0xdc, 0x23, 0x54, 0x6f, 0x20, 0xce, 0xa0, - 0x17, 0x22, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x38, 0xfe, 0x76 - }, - .info = { - "CISCO-OEM ", - "QSFP-4SFP+-CU2M ", - "GTOU0810 ", - SFF_40G_BASE_CR4_PROPERTIES, - 2, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x80, 0x45, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0xa0, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x2d, 0x4f, 0x45, 0x4d, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x51, 0x53, 0x46, 0x50, 0x2d, 0x34, 0x53, 0x46, - 0x50, 0x2b, 0x2d, 0x43, 0x55, 0x35, 0x4d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0c, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x54, 0x49, 0x59, 0x32, 0x34, 0x35, 0x35, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x37, 0x30, 0x36, 0x32, 0x38, 0x20, 0x20, 0x2e, 0x00, 0xe2, 0x95, - 0xe2, 0x00, 0x11, 0x18, 0x0f, 0x39, 0xf6, 0x13, 0x6a, 0x40, 0x77, 0x21, 0x63, 0x2a, 0xec, 0xcf, - 0xd7, 0x4d, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x50, 0xe8, 0xf4, - }, - .info = { - "CISCO-OEM ", - "QSFP-4SFP+-CU5M ", - "GTIY2455 ", - SFF_40G_BASE_CR4_PROPERTIES, - 5, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xcb, 0x00, 0x00, 0x7e, 0x8c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xa0, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x2d, 0x4f, 0x45, 0x4d, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x51, 0x53, 0x46, 0x50, 0x2d, 0x34, 0x53, 0x46, - 0x50, 0x2b, 0x2d, 0x43, 0x55, 0x33, 0x4d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x54, 0x47, 0x52, 0x38, 0x36, 0x38, 0x30, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x37, 0x30, 0x36, 0x32, 0x38, 0x20, 0x20, 0x2e, 0x00, 0xe1, 0x91, - 0xe1, 0x00, 0x11, 0x9f, 0xfa, 0xcd, 0xf5, 0xd3, 0x56, 0xb3, 0x83, 0x78, 0x28, 0xf6, 0x50, 0x52, - 0xd7, 0x72, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x2f, 0xae, 0x0a, - }, - .info = { - "CISCO-OEM ", - "QSFP-4SFP+-CU3M ", - "GTGR8680 ", - SFF_40G_BASE_CR4_PROPERTIES, - 3, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x4d, 0x65, 0x6c, 0x6c, 0x61, 0x6e, 0x6f, 0x78, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x07, 0x00, 0x02, 0xc9, 0x4d, 0x43, 0x32, 0x32, 0x30, 0x36, 0x31, 0x33, - 0x30, 0x2d, 0x30, 0x30, 0x31, 0x20, 0x20, 0x20, 0x41, 0x20, 0x06, 0x0a, 0x00, 0x00, 0x46, 0xa6, - 0x00, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x2d, 0x31, 0x31, 0x31, 0x37, 0x35, 0x30, 0x33, 0x31, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x33, 0x30, 0x32, 0x32, 0x34, 0x20, 0x20, 0x00, 0x00, 0x00, 0x6c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "Mellanox ", - "MC2206130-001 ", - "MS-11175031 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x22, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0x00, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x41, 0x52, 0x20, 0x43, 0x4f, 0x52, 0x50, - 0x2e, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x65, 0x46, 0x43, 0x4c, 0x46, 0x38, 0x35, 0x32, 0x32, - 0x50, 0x32, 0x42, 0x54, 0x4c, 0x2d, 0x44, 0x4c, 0x41, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x33, - 0x00, 0x12, 0x00, 0x00, 0x50, 0x54, 0x4d, 0x33, 0x41, 0x4e, 0x57, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x35, 0x30, 0x35, 0x32, 0x34, 0x20, 0xff, 0x00, 0x00, 0x00, 0x8c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "FINISAR CORP. ", - "FCLF8522P2BTL-DL", - "PTM3ANW ", - SFF_1G_BASE_T_PROPERTIES, - 100, - }, - }, - }, - { - { - .eeprom = { - 0x11, 0x07, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb8, 0x00, 0x00, 0x85, 0x0b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x45, 0x26, 0x44, 0xf0, 0x45, 0x63, - 0x45, 0x3a, 0x1d, 0xee, 0x1d, 0x88, 0x23, 0x8a, 0x24, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xcc, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x49, 0x4e, 0x4e, 0x4f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x44, 0x7c, 0x7f, 0x54, 0x52, 0x2d, 0x56, 0x43, 0x31, 0x33, 0x54, - 0x2d, 0x4e, 0x30, 0x30, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x66, 0x58, 0x07, 0xd0, 0x46, 0x33, - 0x07, 0x07, 0xff, 0xda, 0x49, 0x4e, 0x47, 0x41, 0x54, 0x36, 0x36, 0x35, 0x30, 0x30, 0x37, 0x39, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x36, 0x30, 0x35, 0x31, 0x32, 0x31, 0x39, 0x0c, 0x00, 0x67, 0x57, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "INNOLIGHT ", - "TR-VC13T-N00 ", - "INGAT6650079 ", - SFF_100G_PSM4_PROPERTIES, - -1, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x4d, 0x50, 0x51, 0x41, 0x41, 0x31, 0x43, 0x41, 0x41, 0x33, 0x37, 0x2d, 0x31, - 0x33, 0x32, 0x31, 0x2d, 0x30, 0x32, 0x56, 0x30, 0x32, 0x20, 0x51, 0x53, 0x46, 0x50, 0x2d, 0xe6, - 0x53, 0x46, 0x50, 0x31, 0x30, 0x47, 0x2d, 0x43, 0x55, 0x32, 0x4d, 0x20, 0x20, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xa0, 0x4f, 0x45, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x78, 0xa7, 0x14, 0x46, 0x34, 0x4d, 0x2d, 0x51, 0x53, 0x53, 0x46, - 0x50, 0x2d, 0x43, 0x2d, 0x32, 0x2d, 0x33, 0x30, 0x41, 0x20, 0x09, 0x0d, 0x00, 0x00, 0x46, 0x8f, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x45, 0x31, 0x36, 0x30, 0x34, 0x30, 0x39, 0x32, 0x33, 0x33, 0x33, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x36, 0x30, 0x34, 0x30, 0x38, 0x20, 0x20, 0x00, 0x00, 0xe2, 0x60, - 0x00, 0x00, 0x11, 0x92, 0x93, 0x56, 0x08, 0x23, 0xce, 0x3b, 0x71, 0x35, 0xac, 0x37, 0xdc, 0x38, - 0x1d, 0x13, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x36, 0xa4, 0x00, - }, - .info = { - "OEM ", - "F4M-QSSFP-C-2-30", - "GE1604092333 ", - SFF_40G_BASE_CR4_PROPERTIES, - 2, - }, - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x06, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0d, 0x78, 0xa7, 0x14, 0x4e, 0x44, 0x43, 0x43, 0x47, 0x46, 0x2d, 0x43, - 0x31, 0x30, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x03, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x67, 0x00, 0x41, 0x50, 0x46, 0x31, 0x37, 0x31, 0x34, 0x31, 0x30, 0x34, 0x35, 0x55, - 0x47, 0x56, 0x20, 0x20, 0x31, 0x37, 0x30, 0x34, 0x30, 0x38, 0x20, 0x20, 0x00, 0x00, 0x08, 0x83, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Amphenol ", - "NDCCGF-C104 ", - "APF17141045UGV ", - SFF_25G_BASE_CR_PROPERTIES, - 1, - } , - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x01, 0x00, 0x00, 0x04, 0x41, 0x84, 0x80, 0xd5, 0x06, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0b, 0x78, 0xa7, 0x14, 0x4e, 0x44, 0x43, 0x43, 0x47, 0x46, 0x2d, 0x48, - 0x33, 0x30, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0xaf, - 0x00, 0x00, 0x67, 0x00, 0x41, 0x50, 0x46, 0x31, 0x36, 0x34, 0x35, 0x33, 0x30, 0x31, 0x33, 0x33, - 0x50, 0x31, 0x20, 0x20, 0x31, 0x36, 0x31, 0x31, 0x31, 0x36, 0x20, 0x20, 0x00, 0x00, 0x08, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "Amphenol ", - "NDCCGF-H301 ", - "APF164530133P1 ", - SFF_25G_BASE_CR_PROPERTIES, - 1, - } , - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x21, 0x01, 0x00, 0x00, 0x04, 0x41, 0x84, 0x80, 0xd5, 0x06, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x0b, 0x78, 0xa7, 0x14, 0x4e, 0x44, 0x41, 0x51, 0x47, 0x46, 0x2d, 0x48, - 0x33, 0x30, 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0xbf, - 0x00, 0x00, 0x67, 0x00, 0x41, 0x50, 0x46, 0x31, 0x36, 0x35, 0x30, 0x33, 0x30, 0x33, 0x31, 0x4c, - 0x50, 0x44, 0x20, 0x20, 0x31, 0x36, 0x31, 0x32, 0x31, 0x37, 0x20, 0x20, 0x00, 0x00, 0x08, 0x6b, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - .info = { - "Amphenol ", - "NDAQGF-H303 ", - "APF16503031LPD ", - SFF_25G_BASE_CR_PROPERTIES, - 3, - }, - }, - }, - { - { - .eeprom = { - 0x03, 0x04, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x06, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x41, 0x6d, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6c, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x78, 0xa7, 0x14, 0x4e, 0x44, 0x41, 0x51, 0x47, 0x46, 0x2d, 0x30, - 0x30, 0x30, 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x67, 0x00, 0x41, 0x50, 0x46, 0x31, 0x36, 0x32, 0x35, 0x30, 0x30, 0x33, 0x31, 0x4b, - 0x43, 0x55, 0x20, 0x20, 0x31, 0x36, 0x30, 0x36, 0x32, 0x35, 0x20, 0x20, 0x00, 0x00, 0x08, 0x6f, - 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - }, - .info = { - "Amphenol ", - "NDAQGF-0003 ", - "APF16250031KCU ", - SFF_25G_BASE_CR_PROPERTIES, - 3, - }, - }, - }, - { - { - .eeprom = { - 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x4d, 0x50, 0x51, 0x41, 0x41, 0x31, 0x43, 0x41, 0x41, 0x33, 0x37, 0x2d, 0x31, - 0x33, 0x32, 0x31, 0x2d, 0x30, 0x32, 0x56, 0x30, 0x32, 0x20, 0x51, 0x53, 0x46, 0x50, 0x2d, 0xe6, - 0x53, 0x46, 0x50, 0x31, 0x30, 0x47, 0x2d, 0x43, 0x55, 0x31, 0x4d, 0x20, 0x20, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x0d, 0x00, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xa0, 0x4f, 0x45, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x51, 0x53, 0x46, 0x50, 0x2d, 0x48, 0x34, 0x30, - 0x47, 0x2d, 0x43, 0x55, 0x31, 0x4d, 0x2d, 0x43, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7a, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x31, 0x36, 0x31, 0x31, 0x31, 0x36, 0x30, 0x30, 0x36, 0x37, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x36, 0x31, 0x32, 0x30, 0x32, 0x20, 0x20, 0x00, 0x00, 0xe2, 0x30, - 0x00, 0x00, 0x11, 0xbc, 0xb2, 0x5f, 0x4b, 0xf4, 0x39, 0x79, 0xf6, 0xca, 0xb9, 0x62, 0xf7, 0x4c, - 0x14, 0xd8, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xc5, 0xef, 0x53, - }, - .info = { - "OEM ", - "QSFP-H40G-CU1M-C", - "E1611160067 ", - SFF_40G_BASE_CR4_PROPERTIES, - 1, - }, - }, - }, -#endif /** SFF_CONFIG_INCLUDE_DATABASE */ - }; - -int -sff_db_get(sff_db_entry_t** entries, int* count) -{ - *entries = sff_database__; - *count = AIM_ARRAYSIZE(sff_database__); - return *count; -} - -int -sff_db_get_type(sff_eeprom_t* se, sff_module_type_t type) -{ - int i; - sff_db_entry_t* entry; - for(i = 0; i < AIM_ARRAYSIZE(sff_database__); i++) { - entry = sff_database__ + i; - if(entry->se.info.module_type == type) { - memcpy(se, &entry->se, sizeof(*se)); - return 1; - } - } - return 0; -} - -int -sff_db_entry_struct(sff_eeprom_t* se, aim_pvs_t* pvs) -{ - int i, j; - aim_printf(pvs, " {\n"); - aim_printf(pvs, " {\n"); - aim_printf(pvs, " .eeprom = {\n"); - for(i = 0; i < 16; i++) { - aim_printf(pvs, " "); - for(j = 0; j < 16; j++) { - aim_printf(pvs, "0x%.2x, ", se->eeprom[i*16+j]); - } - aim_printf(pvs, "\n"); - } - aim_printf(pvs, " },\n"); - aim_printf(pvs, " .info = {\n"); - aim_printf(pvs, " \"%s\",\n", se->info.vendor); - aim_printf(pvs, " \"%s\",\n", se->info.model); - aim_printf(pvs, " \"%s\",\n", se->info.serial); - aim_printf(pvs, " SFF_%s_PROPERTIES,\n", - sff_module_type_name(se->info.module_type)); - aim_printf(pvs, " %d,\n", se->info.length); - aim_printf(pvs, " },\n"); - aim_printf(pvs, " },\n"); - aim_printf(pvs, " },\n"); - return 0;} diff --git a/packages/base/any/onlp/src/sff/module/src/sff_enums.c b/packages/base/any/onlp/src/sff/module/src/sff_enums.c deleted file mode 100644 index deeeb50d..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_enums.c +++ /dev/null @@ -1,316 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include -#include - -/* */ -aim_map_si_t sff_media_type_map[] = -{ - { "COPPER", SFF_MEDIA_TYPE_COPPER }, - { "FIBER", SFF_MEDIA_TYPE_FIBER }, - { NULL, 0 } -}; - -aim_map_si_t sff_media_type_desc_map[] = -{ - { "Copper", SFF_MEDIA_TYPE_COPPER }, - { "Fiber", SFF_MEDIA_TYPE_FIBER }, - { NULL, 0 } -}; - -const char* -sff_media_type_name(sff_media_type_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_media_type_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_media_type'"; - } -} - -int -sff_media_type_value(const char* str, sff_media_type_t* e, int substr) -{ - int i; - AIM_REFERENCE(substr); - if(aim_map_si_s(&i, str, sff_media_type_map, 0)) { - /* Enum Found */ - *e = i; - return 0; - } - else { - return -1; - } -} - -const char* -sff_media_type_desc(sff_media_type_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_media_type_desc_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_media_type'"; - } -} - - -aim_map_si_t sff_module_caps_map[] = -{ - { "F_100", SFF_MODULE_CAPS_F_100 }, - { "F_1G", SFF_MODULE_CAPS_F_1G }, - { "F_10G", SFF_MODULE_CAPS_F_10G }, - { "F_25G", SFF_MODULE_CAPS_F_25G }, - { "F_40G", SFF_MODULE_CAPS_F_40G }, - { "F_100G", SFF_MODULE_CAPS_F_100G }, - { NULL, 0 } -}; - -aim_map_si_t sff_module_caps_desc_map[] = -{ - { "None", SFF_MODULE_CAPS_F_100 }, - { "None", SFF_MODULE_CAPS_F_1G }, - { "None", SFF_MODULE_CAPS_F_10G }, - { "None", SFF_MODULE_CAPS_F_25G }, - { "None", SFF_MODULE_CAPS_F_40G }, - { "None", SFF_MODULE_CAPS_F_100G }, - { NULL, 0 } -}; - -const char* -sff_module_caps_name(sff_module_caps_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_module_caps_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_module_caps'"; - } -} - -int -sff_module_caps_value(const char* str, sff_module_caps_t* e, int substr) -{ - int i; - AIM_REFERENCE(substr); - if(aim_map_si_s(&i, str, sff_module_caps_map, 0)) { - /* Enum Found */ - *e = i; - return 0; - } - else { - return -1; - } -} - -const char* -sff_module_caps_desc(sff_module_caps_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_module_caps_desc_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_module_caps'"; - } -} - -int -sff_module_caps_valid(sff_module_caps_t e) -{ - return aim_map_si_i(NULL, e, sff_module_caps_map, 0) ? 1 : 0; -} - - -aim_map_si_t sff_module_type_map[] = -{ - { "100G_AOC", SFF_MODULE_TYPE_100G_AOC }, - { "100G_BASE_CR4", SFF_MODULE_TYPE_100G_BASE_CR4 }, - { "100G_BASE_SR4", SFF_MODULE_TYPE_100G_BASE_SR4 }, - { "100G_BASE_LR4", SFF_MODULE_TYPE_100G_BASE_LR4 }, - { "100G_CWDM4", SFF_MODULE_TYPE_100G_CWDM4 }, - { "100G_PSM4", SFF_MODULE_TYPE_100G_PSM4 }, - { "100G_SWDM4", SFF_MODULE_TYPE_100G_SWDM4 }, - { "40G_BASE_CR4", SFF_MODULE_TYPE_40G_BASE_CR4 }, - { "40G_BASE_SR4", SFF_MODULE_TYPE_40G_BASE_SR4 }, - { "40G_BASE_LR4", SFF_MODULE_TYPE_40G_BASE_LR4 }, - { "40G_BASE_LM4", SFF_MODULE_TYPE_40G_BASE_LM4 }, - { "40G_BASE_ACTIVE", SFF_MODULE_TYPE_40G_BASE_ACTIVE }, - { "40G_BASE_CR", SFF_MODULE_TYPE_40G_BASE_CR }, - { "40G_BASE_SR2", SFF_MODULE_TYPE_40G_BASE_SR2 }, - { "40G_BASE_SM4", SFF_MODULE_TYPE_40G_BASE_SM4 }, - { "40G_BASE_ER4", SFF_MODULE_TYPE_40G_BASE_ER4 }, - { "25G_BASE_CR", SFF_MODULE_TYPE_25G_BASE_CR }, - { "25G_BASE_SR", SFF_MODULE_TYPE_25G_BASE_SR }, - { "25G_BASE_LR", SFF_MODULE_TYPE_25G_BASE_LR }, - { "25G_BASE_AOC", SFF_MODULE_TYPE_25G_BASE_AOC }, - { "10G_BASE_SR", SFF_MODULE_TYPE_10G_BASE_SR }, - { "10G_BASE_LR", SFF_MODULE_TYPE_10G_BASE_LR }, - { "10G_BASE_LRM", SFF_MODULE_TYPE_10G_BASE_LRM }, - { "10G_BASE_ER", SFF_MODULE_TYPE_10G_BASE_ER }, - { "10G_BASE_CR", SFF_MODULE_TYPE_10G_BASE_CR }, - { "10G_BASE_SX", SFF_MODULE_TYPE_10G_BASE_SX }, - { "10G_BASE_LX", SFF_MODULE_TYPE_10G_BASE_LX }, - { "10G_BASE_ZR", SFF_MODULE_TYPE_10G_BASE_ZR }, - { "10G_BASE_SRL", SFF_MODULE_TYPE_10G_BASE_SRL }, - { "1G_BASE_SX", SFF_MODULE_TYPE_1G_BASE_SX }, - { "1G_BASE_LX", SFF_MODULE_TYPE_1G_BASE_LX }, - { "1G_BASE_ZX", SFF_MODULE_TYPE_1G_BASE_ZX }, - { "1G_BASE_CX", SFF_MODULE_TYPE_1G_BASE_CX }, - { "1G_BASE_T", SFF_MODULE_TYPE_1G_BASE_T }, - { "100_BASE_LX", SFF_MODULE_TYPE_100_BASE_LX }, - { "100_BASE_FX", SFF_MODULE_TYPE_100_BASE_FX }, - { "4X_MUX", SFF_MODULE_TYPE_4X_MUX }, - { NULL, 0 } -}; - -aim_map_si_t sff_module_type_desc_map[] = -{ - { "100G-AOC", SFF_MODULE_TYPE_100G_AOC }, - { "100GBASE-CR4", SFF_MODULE_TYPE_100G_BASE_CR4 }, - { "100GBASE-SR4", SFF_MODULE_TYPE_100G_BASE_SR4 }, - { "100GBASE-LR4", SFF_MODULE_TYPE_100G_BASE_LR4 }, - { "100G-CWDM4", SFF_MODULE_TYPE_100G_CWDM4 }, - { "100G-PSM4", SFF_MODULE_TYPE_100G_PSM4 }, - { "100G-SWDM4", SFF_MODULE_TYPE_100G_SWDM4 }, - { "40GBASE-CR4", SFF_MODULE_TYPE_40G_BASE_CR4 }, - { "40GBASE-SR4", SFF_MODULE_TYPE_40G_BASE_SR4 }, - { "40GBASE-LR4", SFF_MODULE_TYPE_40G_BASE_LR4 }, - { "40GBASE-LM4", SFF_MODULE_TYPE_40G_BASE_LM4 }, - { "40GBASE-ACTIVE", SFF_MODULE_TYPE_40G_BASE_ACTIVE }, - { "40GBASE-CR", SFF_MODULE_TYPE_40G_BASE_CR }, - { "40GBASE-SR2", SFF_MODULE_TYPE_40G_BASE_SR2 }, - { "40GBASE-SM4", SFF_MODULE_TYPE_40G_BASE_SM4 }, - { "40GBASE-ER4", SFF_MODULE_TYPE_40G_BASE_ER4 }, - { "25GBASE-CR", SFF_MODULE_TYPE_25G_BASE_CR }, - { "25GBASE-SR", SFF_MODULE_TYPE_25G_BASE_SR }, - { "25GBASE-LR", SFF_MODULE_TYPE_25G_BASE_LR }, - { "25GBASE-AOC", SFF_MODULE_TYPE_25G_BASE_AOC }, - { "10GBASE-SR", SFF_MODULE_TYPE_10G_BASE_SR }, - { "10GBASE-LR", SFF_MODULE_TYPE_10G_BASE_LR }, - { "10GBASE-LRM", SFF_MODULE_TYPE_10G_BASE_LRM }, - { "10GBASE-ER", SFF_MODULE_TYPE_10G_BASE_ER }, - { "10GBASE-CR", SFF_MODULE_TYPE_10G_BASE_CR }, - { "10GBASE-SX", SFF_MODULE_TYPE_10G_BASE_SX }, - { "10GBASE-LX", SFF_MODULE_TYPE_10G_BASE_LX }, - { "10GBASE-ZR", SFF_MODULE_TYPE_10G_BASE_ZR }, - { "10GBASE-SRL", SFF_MODULE_TYPE_10G_BASE_SRL }, - { "1GBASE-SX", SFF_MODULE_TYPE_1G_BASE_SX }, - { "1GBASE-LX", SFF_MODULE_TYPE_1G_BASE_LX }, - { "1GBASE-ZX", SFF_MODULE_TYPE_1G_BASE_ZX }, - { "1GBASE-CX", SFF_MODULE_TYPE_1G_BASE_CX }, - { "1GBASE-T", SFF_MODULE_TYPE_1G_BASE_T }, - { "100BASE-LX", SFF_MODULE_TYPE_100_BASE_LX }, - { "100BASE-FX", SFF_MODULE_TYPE_100_BASE_FX }, - { "4X-MUX", SFF_MODULE_TYPE_4X_MUX }, - { NULL, 0 } -}; - -const char* -sff_module_type_name(sff_module_type_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_module_type_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_module_type'"; - } -} - -int -sff_module_type_value(const char* str, sff_module_type_t* e, int substr) -{ - int i; - AIM_REFERENCE(substr); - if(aim_map_si_s(&i, str, sff_module_type_map, 0)) { - /* Enum Found */ - *e = i; - return 0; - } - else { - return -1; - } -} - -const char* -sff_module_type_desc(sff_module_type_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_module_type_desc_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_module_type'"; - } -} - - -aim_map_si_t sff_sfp_type_map[] = -{ - { "SFP", SFF_SFP_TYPE_SFP }, - { "QSFP", SFF_SFP_TYPE_QSFP }, - { "QSFP_PLUS", SFF_SFP_TYPE_QSFP_PLUS }, - { "QSFP28", SFF_SFP_TYPE_QSFP28 }, - { "SFP28", SFF_SFP_TYPE_SFP28 }, - { NULL, 0 } -}; - -aim_map_si_t sff_sfp_type_desc_map[] = -{ - { "SFP", SFF_SFP_TYPE_SFP }, - { "QSFP", SFF_SFP_TYPE_QSFP }, - { "QSFP+", SFF_SFP_TYPE_QSFP_PLUS }, - { "QSFP28", SFF_SFP_TYPE_QSFP28 }, - { "SFP28", SFF_SFP_TYPE_SFP28 }, - { NULL, 0 } -}; - -const char* -sff_sfp_type_name(sff_sfp_type_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_sfp_type_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_sfp_type'"; - } -} - -int -sff_sfp_type_value(const char* str, sff_sfp_type_t* e, int substr) -{ - int i; - AIM_REFERENCE(substr); - if(aim_map_si_s(&i, str, sff_sfp_type_map, 0)) { - /* Enum Found */ - *e = i; - return 0; - } - else { - return -1; - } -} - -const char* -sff_sfp_type_desc(sff_sfp_type_t e) -{ - const char* name; - if(aim_map_si_i(&name, e, sff_sfp_type_desc_map, 0)) { - return name; - } - else { - return "-invalid value for enum type 'sff_sfp_type'"; - } -} - -/* */ - diff --git a/packages/base/any/onlp/src/sff/module/src/sff_int.h b/packages/base/any/onlp/src/sff/module/src/sff_int.h deleted file mode 100644 index a67245ac..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_int.h +++ /dev/null @@ -1,13 +0,0 @@ -/**************************************************************************//** - * - * sff Internal Header - * - *****************************************************************************/ -#ifndef __SFF_INT_H__ -#define __SFF_INT_H__ - -#include - -int sff_nonstandard_lookup(sff_info_t* info); - -#endif /* __SFF_INT_H__ */ diff --git a/packages/base/any/onlp/src/sff/module/src/sff_log.c b/packages/base/any/onlp/src/sff/module/src/sff_log.c deleted file mode 100644 index bd348d20..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_log.c +++ /dev/null @@ -1,18 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include - -#include "sff_log.h" -/* - * sff log struct. - */ -AIM_LOG_STRUCT_DEFINE( - SFF_CONFIG_LOG_OPTIONS_DEFAULT, - SFF_CONFIG_LOG_BITS_DEFAULT, - NULL, /* Custom log map */ - SFF_CONFIG_LOG_CUSTOM_BITS_DEFAULT - ); - diff --git a/packages/base/any/onlp/src/sff/module/src/sff_log.h b/packages/base/any/onlp/src/sff/module/src/sff_log.h deleted file mode 100644 index 5e564436..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_log.h +++ /dev/null @@ -1,12 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#ifndef __SFF_LOG_H__ -#define __SFF_LOG_H__ - -#define AIM_LOG_MODULE_NAME sff -#include - -#endif /* __SFF_LOG_H__ */ diff --git a/packages/base/any/onlp/src/sff/module/src/sff_module.c b/packages/base/any/onlp/src/sff/module/src/sff_module.c deleted file mode 100644 index 676a04b2..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_module.c +++ /dev/null @@ -1,23 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include - -#include "sff_log.h" - -static int -datatypes_init__(void) -{ -#define SFF_ENUMERATION_ENTRY(_enum_name, _desc) AIM_DATATYPE_MAP_REGISTER(_enum_name, _enum_name##_map, _desc, AIM_LOG_INTERNAL); -#include - return 0; -} - -void __sff_module_init__(void) -{ - AIM_LOG_STRUCT_REGISTER(); - datatypes_init__(); -} - diff --git a/packages/base/any/onlp/src/sff/module/src/sff_tool.c b/packages/base/any/onlp/src/sff/module/src/sff_tool.c deleted file mode 100644 index 81427f9b..00000000 --- a/packages/base/any/onlp/src/sff/module/src/sff_tool.c +++ /dev/null @@ -1,143 +0,0 @@ -/************************************************************ - * - * - * Copyright 2014, 2015 Big Switch Networks, Inc. - * - * Licensed under the Eclipse Public License, Version 1.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.eclipse.org/legal/epl-v10.html - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the - * License. - * - * - ************************************************************ - * - * SFF Utility for eeprom files. - * - ***********************************************************/ -#include - -#if SFF_CONFIG_INCLUDE_SFF_TOOL == 1 - -#include -#include -#include -#include - -int -sff_tool(int argc, char* argv[]) -{ - int rv = 0; - int i; - int c; - - int s = 0; - int e = 0; - int help = 0; - int n = 0; - int v = 0; - int sin = 0; - - biglist_t* fnames=NULL; - - - while( (c = getopt(argc, argv, "sehnvi")) != -1) { - switch(c) - { - case 's': s = 1; break; - case 'e': e = 1; break; - case 'h': help=1; rv=0; break; - case 'n': n=1; break; - case 'v': v=1; break; - case 'i': sin=1; break; - default: help=1; rv = 1; break; - } - } - - if(help) { - printf("Usage: %s [OPTIONS] [FILES]\n", argv[0]); - printf(" -i Read eeprom data from stdin.\n"); - printf(" -s Read filenames from stdin. \n"); - printf(" -n Print the filename if successful.\n"); - printf(" -v Print the filename always.\n"); - printf(" -e Show the raw eeprom data.\n"); - printf(" -h Help.\n"); - return rv; - } - - if(sin) { - uint8_t data[512]; - if(fread(data, 256, 1, stdin) == 1) { - sff_info_t info; - sff_info_init(&info, data); - if(info.supported) { - sff_info_show(&info, &aim_pvs_stdout); - return 0; - } - else { - aim_printf(&aim_pvs_stderr, "The eeprom data could not be parsed.\n"); - } - } - else { - aim_printf(&aim_pvs_stderr, "Error reading eeprom data from stdin.\n"); - } - return 1; - } - - - - - if(s) { - /* Read filenames from stdin */ - char b[PATH_MAX]; - char* l; - while((l = fgets(b, PATH_MAX, stdin))) { - int len=SFF_STRLEN(l); - if(len) { - if(l[len-1] == '\n') { - l[len-1] = 0; - } - fnames = biglist_append(fnames, aim_strdup(l)); - } - } - } - - /* Read from command line. This can be used together with -s */ - for(i = optind; i < argc; i++) { - fnames = biglist_append(fnames, aim_strdup(argv[i])); - } - - biglist_t* ble; - char* f; - BIGLIST_FOREACH_DATA(ble, fnames, char*, f) { - sff_info_t info; - memset(&info, 0, sizeof(info)); - if( (rv = sff_info_init_file(&info, f)) >= 0) { - if(n || v) { - aim_printf(&aim_pvs_stdout, "%s\n", f); - } - if(e) { - aim_printf(&aim_pvs_stdout, "eeprom:\n%{data}\n", info.eeprom, sizeof(info.eeprom)); - } - sff_info_show(&info, &aim_pvs_stdout); - } - else if(v) { - aim_printf(&aim_pvs_stdout, "%s: failed.\n", f); - } - } - return 0; -} - -#else -int __not_empty__; -#endif - - - diff --git a/packages/base/any/onlp/src/sff/sff.doxy b/packages/base/any/onlp/src/sff/sff.doxy deleted file mode 100644 index 9f96f494..00000000 --- a/packages/base/any/onlp/src/sff/sff.doxy +++ /dev/null @@ -1,1869 +0,0 @@ -# Doxyfile 1.8.3.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. - -PROJECT_NAME = "sff" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "Small Form Factor Support." - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. Note that you specify absolute paths here, but also -# relative paths, which will be relative from the directory where doxygen is -# started. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, -# and language is one of the parsers supported by doxygen: IDL, Java, -# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, -# C++. For instance to make doxygen treat .inc files as Fortran files (default -# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note -# that for custom extensions you also need to set FILE_PATTERNS otherwise the -# files are not read by doxygen. - -EXTENSION_MAPPING = - -# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all -# comments according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you -# can mix doxygen, HTML, and XML commands with Markdown formatting. -# Disable only in case of backward compatibilities issues. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented classes, -# or namespaces to their corresponding documentation. Such a link can be -# prevented in individual cases by by putting a percent sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES (the -# default) will make doxygen replace the get and set methods by a property in -# the documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields will be shown inline in the documentation -# of the scope in which they are defined (i.e. file, namespace, or group -# documentation), provided this scope is documented. If set to NO (the default), -# structs, classes, and unions are shown on a separate page (for HTML and Man -# pages) or section (for LaTeX and RTF). - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -SYMBOL_CACHE_SIZE = 0 - -# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be -# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given -# their name and scope. Since this can be an expensive process and often the -# same symbol appear multiple times in the code, doxygen keeps a cache of -# pre-resolved symbols. If the cache is too small doxygen will become slower. -# If the cache is too large, memory is wasted. The cache size is given by this -# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if section-label ... \endif -# and \cond section-label ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. Do not use -# file names with spaces, bibtex cannot handle them. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = module/inc - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page (index.html). -# This can be useful if you have a project on for instance GitHub and want reuse -# the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C, C++ and Fortran comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If left blank doxygen will -# generate a default style sheet. Note that it is recommended to use -# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this -# tag will in the future become obsolete. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional -# user-defined cascading style sheet that is included after the standard -# style sheets created by doxygen. Using this option one can overrule -# certain style aspects. This is preferred over using HTML_STYLESHEET -# since it does not replace the standard style sheet and is therefor more -# robust against future updates. Doxygen will copy the style sheet file to -# the output directory. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of -# entries shown in the various tree structured indices initially; the user -# can expand and collapse entries dynamically later on. Doxygen will expand -# the tree to such a level that at most the specified number of entries are -# visible (unless a fully collapsed tree already exceeds this amount). -# So setting the number of entries 1 will produce a full collapsed tree by -# default. 0 is a special value representing an infinite number of entries -# and will result in a full expanded tree by default. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely -# identify the documentation publisher. This should be a reverse domain-name -# style string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and -# SVG. The default value is HTML-CSS, which is slower, but has the best -# compatibility. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. -# There are two flavours of web server based search depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. -# See the manual for details. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain -# the search results. Doxygen ships with an example indexer (doxyindexer) and -# search engine (doxysearch.cgi) which are based on the open source search engine -# library Xapian. See the manual for configuration details. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will returned the search results when EXTERNAL_SEARCH is enabled. -# Doxygen ships with an example search engine (doxysearch) which is based on -# the open source search engine library Xapian. See the manual for configuration -# details. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id -# of to a relative location where the documentation can be found. -# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. For each -# tag file the location of the external documentation should be added. The -# format of a tag file without this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths -# or URLs. Note that each tag file must have a unique name (where the name does -# NOT include the path). If a tag file is not located in the directory in which -# doxygen is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside -# the class node. If there are many fields or methods and many nodes the -# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS -# threshold limits the number of items for each type to make the size more -# managable. Set this to 0 for no limit. Note that the threshold may be -# exceeded by 50 percent before the limit is enforced. - -UML_LIMIT_NUM_FIELDS = 10 - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/packages/base/any/onlp/src/sff/utest/.gitignore b/packages/base/any/onlp/src/sff/utest/.gitignore deleted file mode 100644 index 60a3e77b..00000000 --- a/packages/base/any/onlp/src/sff/utest/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*_utest.mk diff --git a/packages/base/any/onlp/src/sff/utest/Makefile b/packages/base/any/onlp/src/sff/utest/Makefile deleted file mode 100644 index 1a1cbd07..00000000 --- a/packages/base/any/onlp/src/sff/utest/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -############################################################################### -# -# -# -############################################################################### -include $(ONL)/make/config.amd64.mk -MODULE := sff_utest -TEST_MODULE := sff -DEPENDMODULES := AIM BigList cjson_util cjson IOF -GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1 -GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MAIN=1 -GLOBAL_CFLAGS += -DSFF_CONFIG_INCLUDE_EXT_CC_CHECK=1 -GLOBAL_CFLAGS += -DSFF_CONFIG_INCLUDE_DATABASE=1 -GLOBAL_LINK_LIBS += -lrt -lpthread -lm -include $(BUILDER)/build-unit-test.mk diff --git a/packages/base/any/onlp/src/sff/utest/_make.mk b/packages/base/any/onlp/src/sff/utest/_make.mk deleted file mode 100644 index e4492a2a..00000000 --- a/packages/base/any/onlp/src/sff/utest/_make.mk +++ /dev/null @@ -1,8 +0,0 @@ -############################################################################### -# -# sff Unit Test Makefile. -# -############################################################################### -UMODULE := sff -UMODULE_SUBDIR := $(dir $(lastword $(MAKEFILE_LIST))) -include $(BUILDER)/utest.mk diff --git a/packages/base/any/onlp/src/sff/utest/main.c b/packages/base/any/onlp/src/sff/utest/main.c deleted file mode 100644 index acf6593d..00000000 --- a/packages/base/any/onlp/src/sff/utest/main.c +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************//** - * - * - * - *****************************************************************************/ -#include - -#include -#include -#include -#include -#include -#include - -int -aim_main(int argc, char* argv[]) -{ - int i; - - sff_db_entry_t* entries; - sff_db_entry_t* p; - int count; - - sff_db_get(&entries, &count); - - for(i = 0, p=entries; i < count; i++, p++) { - int rv; - sff_eeprom_t se; - - aim_printf(&aim_pvs_stdout, "Verifying entry %d: %s:%s:%s...\n", - i, - p->se.info.vendor, - p->se.info.model, - p->se.info.serial); - - - if( (rv=sff_eeprom_parse(&se, p->se.eeprom)) < 0) { - AIM_DIE("index=%d sff_eeprom_parse=%d\n", i, rv); - } - if (!se.identified) { - AIM_DIE("index=%d identified=0\n", i); - } - if(strcmp(se.info.vendor, p->se.info.vendor)) { - AIM_DIE("index=%d vendor expected '%s' got '%s'", - i, p->se.info.vendor, se.info.vendor); - } - if(strcmp(se.info.model, p->se.info.model)) { - AIM_DIE("index=%d model expected '%s' got '%s'", - i, p->se.info.model, se.info.model); - } - if(strcmp(se.info.serial, p->se.info.serial)) { - AIM_DIE("index=%d serial expected '%s' got '%s'", - i, p->se.info.serial, se.info.serial); - } - if(se.info.sfp_type != p->se.info.sfp_type) { - AIM_DIE("index=%d sfp_type expected '%{sff_sfp_type}' got '%{sff_sfp_type}'", - i, p->se.info.sfp_type, se.info.sfp_type); - } - if(strcmp(se.info.sfp_type_name, p->se.info.sfp_type_name)) { - AIM_DIE("index=%d type_name expected '%s' got '%s'", - i, p->se.info.sfp_type, se.info.sfp_type); - } - if(se.info.module_type != p->se.info.module_type) { - AIM_DIE("index=%d module_type expected '%{sff_module_type}' got '%{sff_module_type}'", - i, p->se.info.module_type, se.info.module_type); - } - if(se.info.media_type != p->se.info.media_type) { - AIM_DIE("index=%d media_type expected '%{sff_media_type}' got '%{sff_media_type}'\n", - i, p->se.info.media_type, se.info.media_type); - } - if(strcmp(se.info.media_type_name, p->se.info.media_type_name)) { - AIM_DIE("index=%d media_type_name expected '%s' got '%s'", - i, p->se.info.media_type_name, se.info.media_type_name); - } - if (se.info.caps != p->se.info.caps) { - AIM_DIE("index=%d caps expected '%{sff_module_caps}' got '%{sff_module_caps}'", - i, p->se.info.caps, se.info.caps); - } - - if(se.info.length != p->se.info.length) { - AIM_DIE("index=%d length expected %d got %d", - i, p->se.info.length, se.info.length); - } - if(se.info.length == -1 && se.info.length_desc[0]) { - AIM_DIE("index=%d length_desc expected '%s' got '%s'", - i, '\0', se.info.length_desc); - } - else if(se.info.length != -1) { - char tmp[32]; - snprintf(tmp, sizeof(tmp), "%dm", se.info.length); - if(strcmp(tmp, se.info.length_desc)) { - AIM_DIE("index=%d length_desc expected '%s' got '%s'", - i, tmp, se.info.length_desc); - } - } - - aim_printf(&aim_pvs_stdout, "Verifying entry %d: %s:%s:%s...PASSED\n", - i, - p->se.info.vendor, - p->se.info.model, - p->se.info.serial); - - } - return 0; -} - diff --git a/sm/bigcode b/sm/bigcode index 4f6bea63..97e62ffa 160000 --- a/sm/bigcode +++ b/sm/bigcode @@ -1 +1 @@ -Subproject commit 4f6bea63fdf04a507c6d82ad717ca1f6101ebe5c +Subproject commit 97e62ffa958fe4af6054c5e6f062e42f23594cf8