From 94b16dbe5e73a7e8844576fbe7b4b1213d5ac04d Mon Sep 17 00:00:00 2001 From: Zi Zhou Date: Fri, 8 Jun 2018 14:40:08 -0700 Subject: [PATCH] Support 100G SWDM4 optics --- .../base/any/onlp/src/sff/module/auto/sff.yml | 2 + .../any/onlp/src/sff/module/inc/sff/8636.h | 6 ++ .../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 | 59 ++++++++++--------- .../base/any/onlp/src/sff/module/src/sff.c | 8 +++ .../base/any/onlp/src/sff/module/src/sff_db.c | 2 + .../any/onlp/src/sff/module/src/sff_enums.c | 2 + 8 files changed, 54 insertions(+), 29 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 69ef9e50..40e9472e 100644 --- a/packages/base/any/onlp/src/sff/module/auto/sff.yml +++ b/packages/base/any/onlp/src/sff/module/auto/sff.yml @@ -55,6 +55,8 @@ sff_module_types: &sff_module_types desc: "100G-CWDM4" - 100G_PSM4: desc: "100G-PSM4" +- 100G_SWDM4: + desc: "100G-SWDM4" - 40G_BASE_CR4: desc: "40GBASE-CR4" - 40G_BASE_SR4: 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 index 4f87c170..eafc5f69 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/8636.h +++ b/packages/base/any/onlp/src/sff/module/inc/sff/8636.h @@ -135,6 +135,8 @@ #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) @@ -148,6 +150,10 @@ (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) \ 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 8971a36d..485bd38f 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 @@ -103,6 +103,7 @@ typedef enum sff_module_type_e { 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, @@ -146,6 +147,7 @@ typedef enum sff_module_type_e { "100G_BASE_LR4", \ "100G_CWDM4", \ "100G_PSM4", \ + "100G_SWDM4", \ "40G_BASE_CR4", \ "40G_BASE_SR4", \ "40G_BASE_LR4", \ 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 40499305..46cad1b8 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 @@ -13,6 +13,7 @@ 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) @@ -62,6 +63,7 @@ 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) 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 31ddcda5..3b144ccc 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 @@ -33,35 +33,36 @@ class SFF_MODULE_TYPE(Enumeration): _100G_BASE_LR4 = 3 _100G_CWDM4 = 4 _100G_PSM4 = 5 - _40G_BASE_CR4 = 6 - _40G_BASE_SR4 = 7 - _40G_BASE_LR4 = 8 - _40G_BASE_LM4 = 9 - _40G_BASE_ACTIVE = 10 - _40G_BASE_CR = 11 - _40G_BASE_SR2 = 12 - _40G_BASE_SM4 = 13 - _40G_BASE_ER4 = 14 - _25G_BASE_CR = 15 - _25G_BASE_SR = 16 - _25G_BASE_LR = 17 - _25G_BASE_AOC = 18 - _10G_BASE_SR = 19 - _10G_BASE_LR = 20 - _10G_BASE_LRM = 21 - _10G_BASE_ER = 22 - _10G_BASE_CR = 23 - _10G_BASE_SX = 24 - _10G_BASE_LX = 25 - _10G_BASE_ZR = 26 - _10G_BASE_SRL = 27 - _1G_BASE_SX = 28 - _1G_BASE_LX = 29 - _1G_BASE_CX = 30 - _1G_BASE_T = 31 - _100_BASE_LX = 32 - _100_BASE_FX = 33 - _4X_MUX = 34 + _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_CX = 31 + _1G_BASE_T = 32 + _100_BASE_LX = 33 + _100_BASE_FX = 34 + _4X_MUX = 35 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 b21ace8f..9a258d0d 100644 --- a/packages/base/any/onlp/src/sff/module/src/sff.c +++ b/packages/base/any/onlp/src/sff/module/src/sff.c @@ -82,6 +82,11 @@ sff_module_type_get(const uint8_t* 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; @@ -263,6 +268,7 @@ sff_media_type_get(sff_module_type_t mt) 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: @@ -312,6 +318,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps) 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; @@ -716,6 +723,7 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt, 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; 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 index 15f69fbf..279e8ef4 100644 --- a/packages/base/any/onlp/src/sff/module/src/sff_db.c +++ b/packages/base/any/onlp/src/sff/module/src/sff_db.c @@ -72,6 +72,8 @@ #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__[] = { 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 d499582c..ce013e7a 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 @@ -137,6 +137,7 @@ aim_map_si_t sff_module_type_map[] = { "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 }, @@ -177,6 +178,7 @@ aim_map_si_t sff_module_type_desc_map[] = { "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 },