i40e: fix up some of the ethtool connection reporting
authorJesse Brandeburg <jesse.brandeburg@intel.com>
Tue, 26 Nov 2013 10:49:10 +0000 (10:49 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 16 Dec 2013 08:48:37 +0000 (00:48 -0800)
Get some more reasonable information reported back out to ethtool
for the different types of connections supported.

Change-Id: I57b153f86b9cdd04ad7cb5bf7d1c45873c196a7a
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Kavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_ethtool.c
drivers/net/ethernet/intel/i40e/i40e_type.h

index fd3e379de6da0a211a9626ce2e2e117fd693f249..eb343756b2c1626ad0fdb0ddc87081fcfdd4d38a 100644 (file)
@@ -193,32 +193,48 @@ static int i40e_get_settings(struct net_device *netdev,
                ecmd->supported = SUPPORTED_10000baseKR_Full;
                ecmd->advertising = ADVERTISED_10000baseKR_Full;
                break;
-       case I40E_PHY_TYPE_10GBASE_T:
        default:
-               ecmd->supported = SUPPORTED_10000baseT_Full;
-               ecmd->advertising = ADVERTISED_10000baseT_Full;
+               if (i40e_is_40G_device(hw->device_id)) {
+                       ecmd->supported = SUPPORTED_40000baseSR4_Full;
+                       ecmd->advertising = ADVERTISED_40000baseSR4_Full;
+               } else {
+                       ecmd->supported = SUPPORTED_10000baseT_Full;
+                       ecmd->advertising = ADVERTISED_10000baseT_Full;
+               }
                break;
        }
 
-       /* for now just say autoneg all the time */
        ecmd->supported |= SUPPORTED_Autoneg;
+       ecmd->advertising |= ADVERTISED_Autoneg;
+       ecmd->autoneg = ((hw_link_info->an_info & I40E_AQ_AN_COMPLETED) ?
+                         AUTONEG_ENABLE : AUTONEG_DISABLE);
 
-       if (hw->phy.media_type == I40E_MEDIA_TYPE_BACKPLANE) {
+       switch (hw->phy.media_type) {
+       case I40E_MEDIA_TYPE_BACKPLANE:
                ecmd->supported |= SUPPORTED_Backplane;
                ecmd->advertising |= ADVERTISED_Backplane;
                ecmd->port = PORT_NONE;
-       } else if (hw->phy.media_type == I40E_MEDIA_TYPE_BASET) {
+               break;
+       case I40E_MEDIA_TYPE_BASET:
                ecmd->supported |= SUPPORTED_TP;
                ecmd->advertising |= ADVERTISED_TP;
                ecmd->port = PORT_TP;
-       } else if (hw->phy.media_type == I40E_MEDIA_TYPE_DA) {
+               break;
+       case I40E_MEDIA_TYPE_DA:
+       case I40E_MEDIA_TYPE_CX4:
                ecmd->supported |= SUPPORTED_FIBRE;
                ecmd->advertising |= ADVERTISED_FIBRE;
                ecmd->port = PORT_DA;
-       } else {
+               break;
+       case I40E_MEDIA_TYPE_FIBER:
                ecmd->supported |= SUPPORTED_FIBRE;
                ecmd->advertising |= ADVERTISED_FIBRE;
                ecmd->port = PORT_FIBRE;
+               break;
+       case I40E_MEDIA_TYPE_UNKNOWN:
+       default:
+               ecmd->port = PORT_OTHER;
+               break;
        }
 
        ecmd->transceiver = XCVR_EXTERNAL;
index 8ae64457026348deb5ac8aa3efdcad35abe09d3c..72a6028d24e0dfe6243b271e9d814c1219fc495b 100644 (file)
 #define I40E_VF_DEVICE_ID              0x154C
 #define I40E_VF_HV_DEVICE_ID           0x1571
 
+#define i40e_is_40G_device(d)          ((d) == I40E_QSFP_A_DEVICE_ID  || \
+                                        (d) == I40E_QSFP_B_DEVICE_ID  || \
+                                        (d) == I40E_QSFP_C_DEVICE_ID)
+
 #define I40E_FW_API_VERSION_MAJOR  0x0001
 #define I40E_FW_API_VERSION_MINOR  0x0000