Commit ac331e94 authored by Edward Cree's avatar Edward Cree Committed by David S. Miller

sfc: Add 40G link capability decoding

Needed to select 40G mode on a 10G/40G capable card.
Signed-off-by: default avatarShradha Shah <sshah@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3b06a00e
...@@ -183,6 +183,8 @@ static u32 mcdi_to_ethtool_cap(u32 media, u32 cap) ...@@ -183,6 +183,8 @@ static u32 mcdi_to_ethtool_cap(u32 media, u32 cap)
result |= SUPPORTED_1000baseKX_Full; result |= SUPPORTED_1000baseKX_Full;
if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN)) if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN))
result |= SUPPORTED_10000baseKX4_Full; result |= SUPPORTED_10000baseKX4_Full;
if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
result |= SUPPORTED_40000baseKR4_Full;
break; break;
case MC_CMD_MEDIA_XFP: case MC_CMD_MEDIA_XFP:
...@@ -190,6 +192,12 @@ static u32 mcdi_to_ethtool_cap(u32 media, u32 cap) ...@@ -190,6 +192,12 @@ static u32 mcdi_to_ethtool_cap(u32 media, u32 cap)
result |= SUPPORTED_FIBRE; result |= SUPPORTED_FIBRE;
break; break;
case MC_CMD_MEDIA_QSFP_PLUS:
result |= SUPPORTED_FIBRE;
if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
result |= SUPPORTED_40000baseCR4_Full;
break;
case MC_CMD_MEDIA_BASE_T: case MC_CMD_MEDIA_BASE_T:
result |= SUPPORTED_TP; result |= SUPPORTED_TP;
if (cap & (1 << MC_CMD_PHY_CAP_10HDX_LBN)) if (cap & (1 << MC_CMD_PHY_CAP_10HDX_LBN))
...@@ -237,6 +245,8 @@ static u32 ethtool_to_mcdi_cap(u32 cap) ...@@ -237,6 +245,8 @@ static u32 ethtool_to_mcdi_cap(u32 cap)
result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN); result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN);
if (cap & (SUPPORTED_10000baseT_Full | SUPPORTED_10000baseKX4_Full)) if (cap & (SUPPORTED_10000baseT_Full | SUPPORTED_10000baseKX4_Full))
result |= (1 << MC_CMD_PHY_CAP_10000FDX_LBN); result |= (1 << MC_CMD_PHY_CAP_10000FDX_LBN);
if (cap & (SUPPORTED_40000baseCR4_Full | SUPPORTED_40000baseKR4_Full))
result |= (1 << MC_CMD_PHY_CAP_40000FDX_LBN);
if (cap & SUPPORTED_Pause) if (cap & SUPPORTED_Pause)
result |= (1 << MC_CMD_PHY_CAP_PAUSE_LBN); result |= (1 << MC_CMD_PHY_CAP_PAUSE_LBN);
if (cap & SUPPORTED_Asym_Pause) if (cap & SUPPORTED_Asym_Pause)
...@@ -285,6 +295,7 @@ static u32 mcdi_to_ethtool_media(u32 media) ...@@ -285,6 +295,7 @@ static u32 mcdi_to_ethtool_media(u32 media)
case MC_CMD_MEDIA_XFP: case MC_CMD_MEDIA_XFP:
case MC_CMD_MEDIA_SFP_PLUS: case MC_CMD_MEDIA_SFP_PLUS:
case MC_CMD_MEDIA_QSFP_PLUS:
return PORT_FIBRE; return PORT_FIBRE;
case MC_CMD_MEDIA_BASE_T: case MC_CMD_MEDIA_BASE_T:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment