support 25G-AOC

This commit is contained in:
Zi Zhou
2018-05-03 15:49:27 -07:00
parent 6495dcc452
commit 7cbb32b991
7 changed files with 50 additions and 16 deletions

View File

@@ -79,6 +79,8 @@ sff_module_types: &sff_module_types
desc: "25GBASE-SR"
- 25G_BASE_LR:
desc: "25GBASE-LR"
- 25G_BASE_AOC:
desc: "25GBASE-AOC"
- 10G_BASE_SR:
desc: "10GBASE-SR"
- 10G_BASE_LR:

View File

@@ -150,6 +150,8 @@
#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
@@ -999,4 +1001,18 @@ _sff8472_media_sfp28_lr(const uint8_t* idprom)
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

View File

@@ -115,6 +115,7 @@ typedef enum sff_module_type_e {
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,
@@ -157,6 +158,7 @@ typedef enum sff_module_type_e {
"25G_BASE_CR", \
"25G_BASE_SR", \
"25G_BASE_LR", \
"25G_BASE_AOC", \
"10G_BASE_SR", \
"10G_BASE_LR", \
"10G_BASE_LRM", \

View File

@@ -25,6 +25,7 @@ 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)
@@ -73,6 +74,7 @@ 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)

View File

@@ -45,22 +45,23 @@ class SFF_MODULE_TYPE(Enumeration):
_25G_BASE_CR = 15
_25G_BASE_SR = 16
_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
_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
class SFF_SFP_TYPE(Enumeration):

View File

@@ -158,6 +158,11 @@ sff_module_type_get(const uint8_t* 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))
@@ -267,6 +272,7 @@ sff_media_type_get(sff_module_type_t mt)
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:
@@ -323,6 +329,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps)
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;
@@ -496,6 +503,7 @@ sff_eeprom_parse_standard__(sff_eeprom_t* se, uint8_t* eeprom)
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);
@@ -747,6 +755,7 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt,
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;

View File

@@ -149,6 +149,7 @@ aim_map_si_t sff_module_type_map[] =
{ "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 },
@@ -188,6 +189,7 @@ aim_map_si_t sff_module_type_desc_map[] =
{ "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 },