sfc: Add 40G link capability decoding
authorEdward Cree <ecree@solarflare.com>
Mon, 14 Jul 2014 07:39:07 +0000 (08:39 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Jul 2014 02:11:48 +0000 (19:11 -0700)
Needed to select 40G mode on a 10G/40G capable card.

Signed-off-by: Shradha Shah <sshah@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/mcdi_port.c

index e5fc4e1574b53f977e8509652aeb67e7404ca757..fb19b70eac0118b6bb1946cf9796d3721baddfe0 100644 (file)
@@ -183,6 +183,8 @@ static u32 mcdi_to_ethtool_cap(u32 media, u32 cap)
                        result |= SUPPORTED_1000baseKX_Full;
                if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN))
                        result |= SUPPORTED_10000baseKX4_Full;
+               if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
+                       result |= SUPPORTED_40000baseKR4_Full;
                break;
 
        case MC_CMD_MEDIA_XFP:
@@ -190,6 +192,12 @@ static u32 mcdi_to_ethtool_cap(u32 media, u32 cap)
                result |= SUPPORTED_FIBRE;
                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:
                result |= SUPPORTED_TP;
                if (cap & (1 << MC_CMD_PHY_CAP_10HDX_LBN))
@@ -237,6 +245,8 @@ static u32 ethtool_to_mcdi_cap(u32 cap)
                result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN);
        if (cap & (SUPPORTED_10000baseT_Full | SUPPORTED_10000baseKX4_Full))
                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)
                result |= (1 << MC_CMD_PHY_CAP_PAUSE_LBN);
        if (cap & SUPPORTED_Asym_Pause)
@@ -285,6 +295,7 @@ static u32 mcdi_to_ethtool_media(u32 media)
 
        case MC_CMD_MEDIA_XFP:
        case MC_CMD_MEDIA_SFP_PLUS:
+       case MC_CMD_MEDIA_QSFP_PLUS:
                return PORT_FIBRE;
 
        case MC_CMD_MEDIA_BASE_T: