support QSFP SM4 type

This commit is contained in:
Zi Zhou
2017-01-30 22:30:25 -08:00
parent 4a44022361
commit 2042c4c1f4
6 changed files with 31 additions and 1 deletions

View File

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

View File

@@ -270,6 +270,23 @@ _sff8436_qsfp_40g_lm4(const uint8_t* idprom)
return SFF8436_MEDIA_NONE(idprom);
}
static inline int
_sff8436_qsfp_40g_sm4(const uint8_t* idprom)
{
if(!SFF8436_MODULE_QSFP_PLUS_V2(idprom)) {
return 0;
}
if (!SFF8436_MEDIA_NONE(idprom)) return 0;
/* 850nm tx technology */
if (idprom[147] & 0xF0) return 0;
/* length is 200m(OM3) or 250m(OM4) */
if ((idprom[143] != 100) && (idprom[146] != 125)) {
return 0;
}
return 1;
}
static inline int
_sff8436_bitrate(const uint8_t *idprom)
{

View File

@@ -108,6 +108,7 @@ typedef enum sff_module_type_e {
SFF_MODULE_TYPE_40G_BASE_ACTIVE,
SFF_MODULE_TYPE_40G_BASE_CR,
SFF_MODULE_TYPE_40G_BASE_SR2,
SFF_MODULE_TYPE_40G_BASE_SM4,
SFF_MODULE_TYPE_25G_BASE_CR,
SFF_MODULE_TYPE_10G_BASE_SR,
SFF_MODULE_TYPE_10G_BASE_LR,
@@ -144,6 +145,7 @@ typedef enum sff_module_type_e {
"40G_BASE_ACTIVE", \
"40G_BASE_CR", \
"40G_BASE_SR2", \
"40G_BASE_SM4", \
"25G_BASE_CR", \
"10G_BASE_SR", \
"10G_BASE_LR", \

View File

@@ -125,6 +125,11 @@ sff_module_type_get(const uint8_t* eeprom)
return SFF_MODULE_TYPE_40G_BASE_LM4;
}
if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom)
&& _sff8436_qsfp_40g_sm4(eeprom)) {
return SFF_MODULE_TYPE_40G_BASE_SM4;
}
if (SFF8472_MODULE_SFP(eeprom)
&& SFF8472_MEDIA_XGE_SR(eeprom)
&& !_sff8472_media_gbe_sx_fc_hack(eeprom))
@@ -234,6 +239,7 @@ sff_media_type_get(sff_module_type_t mt)
case SFF_MODULE_TYPE_40G_BASE_LM4:
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_10G_BASE_SR:
case SFF_MODULE_TYPE_10G_BASE_LR:
case SFF_MODULE_TYPE_10G_BASE_LRM:
@@ -281,6 +287,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps)
case SFF_MODULE_TYPE_40G_BASE_ACTIVE:
case SFF_MODULE_TYPE_40G_BASE_CR:
case SFF_MODULE_TYPE_40G_BASE_SR2:
case SFF_MODULE_TYPE_40G_BASE_SM4:
*caps |= SFF_MODULE_CAPS_F_40G;
return 0;

View File

@@ -143,6 +143,7 @@ aim_map_si_t sff_module_type_map[] =
{ "40G_BASE_ACTIVE", SFF_MODULE_TYPE_40G_BASE_ACTIVE },
{ "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 },
{ "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 },
@@ -176,6 +177,7 @@ aim_map_si_t sff_module_type_desc_map[] =
{ "40GBASE-ACTIVE", SFF_MODULE_TYPE_40G_BASE_ACTIVE },
{ "40GBASE-CR", SFF_MODULE_TYPE_40G_BASE_CR },
{ "40GBASE-SR2", SFF_MODULE_TYPE_40G_BASE_SR2 },
{ "40GBASE-SM4", SFF_MODULE_TYPE_40G_BASE_SM4 },
{ "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,7 +3,7 @@
#
# Inclusive Makefile for the sff module.
#
# Autogenerated 2017-01-13 00:00:59.561756
# Autogenerated 2017-01-31 00:32:39.650740
#
###############################################################################
sff_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))