support SFP28 SR

This commit is contained in:
Zi Zhou
2017-09-15 10:57:14 -07:00
parent f40f9ee48b
commit 49ae98db1c
7 changed files with 36 additions and 1 deletions

View File

@@ -75,6 +75,8 @@ sff_module_types: &sff_module_types
desc: "40GBASE-ER4"
- 25G_BASE_CR:
desc: "25GBASE-CR"
- 25G_BASE_SR:
desc: "25GBASE-SR"
- 10G_BASE_SR:
desc: "10GBASE-SR"
- 10G_BASE_LR:

View File

@@ -148,6 +148,7 @@
#define SFF8472_CC36_XGE_UNALLOCATED 0x01
#define SFF8472_CC36_UNALLOCATED1 0xF7
#define SFF8472_CC36_100G_25G_SR 0x02
#define SFF8471_CC60_FC_PI_4_LIMITING 0x08
#define SFF8471_CC60_SFF8431_LIMITING 0x04
@@ -973,4 +974,17 @@ _sff8472_media_sfp28_cr(const uint8_t* idprom)
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;
}
#endif

View File

@@ -113,6 +113,7 @@ typedef enum sff_module_type_e {
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_10G_BASE_SR,
SFF_MODULE_TYPE_10G_BASE_LR,
SFF_MODULE_TYPE_10G_BASE_LRM,
@@ -153,6 +154,7 @@ typedef enum sff_module_type_e {
"40G_BASE_SM4", \
"40G_BASE_ER4", \
"25G_BASE_CR", \
"25G_BASE_SR", \
"10G_BASE_SR", \
"10G_BASE_LR", \
"10G_BASE_LRM", \

View File

@@ -23,6 +23,7 @@ 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(10G_BASE_SR, 10GBASE-SR)
SFF_MEDIA_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR)
SFF_MEDIA_TYPE_ENTRY(10G_BASE_LRM, 10GBASE-LRM)
@@ -69,6 +70,7 @@ 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(10G_BASE_SR, 10GBASE-SR)
SFF_MODULE_TYPE_ENTRY(10G_BASE_LR, 10GBASE-LR)
SFF_MODULE_TYPE_ENTRY(10G_BASE_LRM, 10GBASE-LRM)

View File

@@ -187,6 +187,11 @@ sff_module_type_get(const uint8_t* 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_GBE_SX(eeprom))
return SFF_MODULE_TYPE_1G_BASE_SX;
@@ -254,6 +259,7 @@ sff_media_type_get(sff_module_type_t mt)
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_10G_BASE_SR:
case SFF_MODULE_TYPE_10G_BASE_LR:
case SFF_MODULE_TYPE_10G_BASE_LRM:
@@ -309,6 +315,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps)
return 0;
case SFF_MODULE_TYPE_25G_BASE_CR:
case SFF_MODULE_TYPE_25G_BASE_SR:
*caps |= SFF_MODULE_CAPS_F_25G;
return 0;
@@ -722,6 +729,12 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt,
info->caps = SFF_MODULE_CAPS_F_25G;
break;
case SFF_MODULE_TYPE_25G_BASE_SR:
info->sfp_type = SFF_SFP_TYPE_SFP;
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;

View File

@@ -147,6 +147,7 @@ aim_map_si_t sff_module_type_map[] =
{ "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 },
{ "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 },
@@ -184,6 +185,7 @@ aim_map_si_t sff_module_type_desc_map[] =
{ "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 },
{ "10GBASE-SR", SFF_MODULE_TYPE_10G_BASE_SR },
{ "10GBASE-LR", SFF_MODULE_TYPE_10G_BASE_LR },
{ "10GBASE-LRM", SFF_MODULE_TYPE_10G_BASE_LRM },

View File

@@ -3,7 +3,7 @@
#
# Inclusive Makefile for the sff module.
#
# Autogenerated 2017-08-31 20:47:10.071123
# Autogenerated 2017-09-14 23:57:29.895708
#
###############################################################################
sff_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))