support 40GBASE-ER4 optics

This commit is contained in:
Zi Zhou
2017-08-22 17:07:23 -07:00
parent 446c16851c
commit 0e5f91fb18
7 changed files with 36 additions and 3 deletions

View File

@@ -69,6 +69,8 @@ sff_module_types: &sff_module_types
desc: "40GBASE-SR2"
- 40G_BASE_SM4:
desc: "40GBASE-SM4"
- 40G_BASE_ER4:
desc: "40GBASE-ER4"
- 25G_BASE_CR:
desc: "25GBASE-CR"
- 10G_BASE_SR:

View File

@@ -115,7 +115,7 @@
((idprom[131] & SFF8436_CC131_40GE_ACTIVE) != 0)
#define SFF8436_MEDIA_NONE(idprom) \
(idprom[131] == 0)
((idprom[131] & 0x7F) == 0)
#define SFF8436_CC132_40G_OTN 0x08
#define SFF8436_CC132_OC48_LONG SFF8472_CC4_OC48_LONG
@@ -291,6 +291,23 @@ _sff8436_qsfp_40g_sm4(const uint8_t* idprom)
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)
{

View File

@@ -110,6 +110,7 @@ typedef enum sff_module_type_e {
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_10G_BASE_SR,
SFF_MODULE_TYPE_10G_BASE_LR,
@@ -148,6 +149,7 @@ typedef enum sff_module_type_e {
"40G_BASE_CR", \
"40G_BASE_SR2", \
"40G_BASE_SM4", \
"40G_BASE_ER4", \
"25G_BASE_CR", \
"10G_BASE_SR", \
"10G_BASE_LR", \

View File

@@ -20,6 +20,7 @@ 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(10G_BASE_SR, 10GBASE-SR)
SFF_MEDIA_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR)
@@ -64,6 +65,7 @@ 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(10G_BASE_SR, 10GBASE-SR)
SFF_MODULE_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR)

View File

@@ -132,6 +132,11 @@ sff_module_type_get(const uint8_t* 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_XGE_SR(eeprom)
&& !_sff8472_media_gbe_sx_fc_hack(eeprom))
@@ -242,6 +247,7 @@ sff_media_type_get(sff_module_type_t mt)
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_10G_BASE_SR:
case SFF_MODULE_TYPE_10G_BASE_LR:
case SFF_MODULE_TYPE_10G_BASE_LRM:
@@ -291,6 +297,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps)
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;
@@ -687,6 +694,7 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt,
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;

View File

@@ -144,6 +144,7 @@ aim_map_si_t sff_module_type_map[] =
{ "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 },
{ "10G_BASE_SR", SFF_MODULE_TYPE_10G_BASE_SR },
{ "10G_BASE_LR", SFF_MODULE_TYPE_10G_BASE_LR },
@@ -179,6 +180,7 @@ aim_map_si_t sff_module_type_desc_map[] =
{ "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 },
{ "10GBASE-SR", SFF_MODULE_TYPE_10G_BASE_SR },
{ "10GBASE-LR", SFF_MODULE_TYPE_10G_BASE_LR },

View File

@@ -3,12 +3,12 @@
#
# Inclusive Makefile for the sff module.
#
# Autogenerated 2017-05-22 21:57:32.679978
# Autogenerated 2017-08-22 22:14:08.507022
#
###############################################################################
sff_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
include $(sff_BASEDIR)module/make.mk
include $(sff_BASEDIR)module/auto/make.mk
include $(sff_BASEDIR)module/src/make.mk
include $(sff_BASEDIR)module/auto/make.mk
include $(sff_BASEDIR)utest/_make.mk