mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-12-26 17:57:01 +00:00
support QSFP SM4 type
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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", \
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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))))
|
||||
|
||||
Reference in New Issue
Block a user