From 6495dcc4524ef8296f52fc2098e4fe0707361d0f Mon Sep 17 00:00:00 2001 From: Zi Zhou Date: Thu, 3 May 2018 12:58:28 -0700 Subject: [PATCH] support 25G-LR --- .../base/any/onlp/src/sff/module/auto/sff.yml | 2 ++ .../any/onlp/src/sff/module/inc/sff/8472.h | 13 ++++++++ .../any/onlp/src/sff/module/inc/sff/sff.h | 2 ++ .../any/onlp/src/sff/module/inc/sff/sff.x | 2 ++ .../src/sff/module/python/onlp/sff/enums.py | 33 ++++++++++--------- .../base/any/onlp/src/sff/module/src/sff.c | 7 ++++ .../any/onlp/src/sff/module/src/sff_enums.c | 2 ++ 7 files changed, 45 insertions(+), 16 deletions(-) diff --git a/packages/base/any/onlp/src/sff/module/auto/sff.yml b/packages/base/any/onlp/src/sff/module/auto/sff.yml index 038eb41f..1161f80f 100644 --- a/packages/base/any/onlp/src/sff/module/auto/sff.yml +++ b/packages/base/any/onlp/src/sff/module/auto/sff.yml @@ -77,6 +77,8 @@ sff_module_types: &sff_module_types desc: "25GBASE-CR" - 25G_BASE_SR: desc: "25GBASE-SR" +- 25G_BASE_LR: + desc: "25GBASE-LR" - 10G_BASE_SR: desc: "10GBASE-SR" - 10G_BASE_LR: 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 index 20b52d70..c750a6f2 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/8472.h +++ b/packages/base/any/onlp/src/sff/module/inc/sff/8472.h @@ -149,6 +149,7 @@ #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 SFF8471_CC60_FC_PI_4_LIMITING 0x08 #define SFF8471_CC60_SFF8431_LIMITING 0x04 @@ -986,4 +987,16 @@ _sff8472_media_sfp28_sr(const uint8_t* idprom) 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; +} + #endif 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 index ce580cf4..1e57a012 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff.h +++ b/packages/base/any/onlp/src/sff/module/inc/sff/sff.h @@ -114,6 +114,7 @@ typedef enum sff_module_type_e { 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_10G_BASE_SR, SFF_MODULE_TYPE_10G_BASE_LR, SFF_MODULE_TYPE_10G_BASE_LRM, @@ -155,6 +156,7 @@ typedef enum sff_module_type_e { "40G_BASE_ER4", \ "25G_BASE_CR", \ "25G_BASE_SR", \ + "25G_BASE_LR", \ "10G_BASE_SR", \ "10G_BASE_LR", \ "10G_BASE_LRM", \ 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 index 82ec6c09..05945de5 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff.x +++ b/packages/base/any/onlp/src/sff/module/inc/sff/sff.x @@ -24,6 +24,7 @@ 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(10G_BASE_SR, 10GBASE-SR) SFF_MEDIA_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR) SFF_MEDIA_TYPE_ENTRY(10G_BASE_LRM, 10GBASE-LRM) @@ -71,6 +72,7 @@ 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(10G_BASE_SR, 10GBASE-SR) SFF_MODULE_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR) SFF_MODULE_TYPE_ENTRY(10G_BASE_LRM, 10GBASE-LRM) 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 index 747c7090..e9ab9bc3 100644 --- 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 @@ -44,22 +44,23 @@ class SFF_MODULE_TYPE(Enumeration): _40G_BASE_ER4 = 14 _25G_BASE_CR = 15 _25G_BASE_SR = 16 - _10G_BASE_SR = 17 - _10G_BASE_LR = 18 - _10G_BASE_LRM = 19 - _10G_BASE_ER = 20 - _10G_BASE_CR = 21 - _10G_BASE_SX = 22 - _10G_BASE_LX = 23 - _10G_BASE_ZR = 24 - _10G_BASE_SRL = 25 - _1G_BASE_SX = 26 - _1G_BASE_LX = 27 - _1G_BASE_CX = 28 - _1G_BASE_T = 29 - _100_BASE_LX = 30 - _100_BASE_FX = 31 - _4X_MUX = 32 + _25G_BASE_LR = 17 + _10G_BASE_SR = 18 + _10G_BASE_LR = 19 + _10G_BASE_LRM = 20 + _10G_BASE_ER = 21 + _10G_BASE_CR = 22 + _10G_BASE_SX = 23 + _10G_BASE_LX = 24 + _10G_BASE_ZR = 25 + _10G_BASE_SRL = 26 + _1G_BASE_SX = 27 + _1G_BASE_LX = 28 + _1G_BASE_CX = 29 + _1G_BASE_T = 30 + _100_BASE_LX = 31 + _100_BASE_FX = 32 + _4X_MUX = 33 class SFF_SFP_TYPE(Enumeration): diff --git a/packages/base/any/onlp/src/sff/module/src/sff.c b/packages/base/any/onlp/src/sff/module/src/sff.c index 281c4450..65a58e6f 100644 --- a/packages/base/any/onlp/src/sff/module/src/sff.c +++ b/packages/base/any/onlp/src/sff/module/src/sff.c @@ -153,6 +153,11 @@ sff_module_type_get(const uint8_t* 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_XGE_SR(eeprom) && !_sff8472_media_gbe_sx_fc_hack(eeprom)) @@ -261,6 +266,7 @@ sff_media_type_get(sff_module_type_t mt) 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_10G_BASE_SR: case SFF_MODULE_TYPE_10G_BASE_LR: case SFF_MODULE_TYPE_10G_BASE_LRM: @@ -740,6 +746,7 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt, break; case SFF_MODULE_TYPE_25G_BASE_SR: + case SFF_MODULE_TYPE_25G_BASE_LR: info->sfp_type = SFF_SFP_TYPE_SFP28; info->media_type = SFF_MEDIA_TYPE_FIBER; info->caps = SFF_MODULE_CAPS_F_25G; 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 index 8d8e62b9..e80102dd 100644 --- a/packages/base/any/onlp/src/sff/module/src/sff_enums.c +++ b/packages/base/any/onlp/src/sff/module/src/sff_enums.c @@ -148,6 +148,7 @@ aim_map_si_t sff_module_type_map[] = { "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 }, { "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 }, @@ -186,6 +187,7 @@ aim_map_si_t sff_module_type_desc_map[] = { "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 }, { "10GBASE-SR", SFF_MODULE_TYPE_10G_BASE_SR }, { "10GBASE-LR", SFF_MODULE_TYPE_10G_BASE_LR }, { "10GBASE-LRM", SFF_MODULE_TYPE_10G_BASE_LRM },