OSDN Git Service

ixgbe: Add support for reporting 2.5G link speed
authorMark Rustad <mark.d.rustad@intel.com>
Fri, 10 Jul 2015 21:19:22 +0000 (14:19 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 2 Sep 2015 00:15:20 +0000 (17:15 -0700)
Now that we can do 2.5G link speed, we need to be able to report it.
Also change the nested triadic involved in creating the log message
to instead use a simpler switch statement to set a string pointer.

Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index b0cc439..ab2edc8 100644 (file)
@@ -166,6 +166,8 @@ static int ixgbe_get_settings(struct net_device *netdev,
        /* set the supported link speeds */
        if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
                ecmd->supported |= SUPPORTED_10000baseT_Full;
+       if (supported_link & IXGBE_LINK_SPEED_2_5GB_FULL)
+               ecmd->supported |= SUPPORTED_2500baseX_Full;
        if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
                ecmd->supported |= SUPPORTED_1000baseT_Full;
        if (supported_link & IXGBE_LINK_SPEED_100_FULL)
@@ -177,6 +179,8 @@ static int ixgbe_get_settings(struct net_device *netdev,
                        ecmd->advertising |= ADVERTISED_100baseT_Full;
                if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
                        ecmd->advertising |= ADVERTISED_10000baseT_Full;
+               if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_2_5GB_FULL)
+                       ecmd->advertising |= ADVERTISED_2500baseX_Full;
                if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
                        ecmd->advertising |= ADVERTISED_1000baseT_Full;
        } else {
@@ -286,6 +290,9 @@ static int ixgbe_get_settings(struct net_device *netdev,
                case IXGBE_LINK_SPEED_10GB_FULL:
                        ethtool_cmd_speed_set(ecmd, SPEED_10000);
                        break;
+               case IXGBE_LINK_SPEED_2_5GB_FULL:
+                       ethtool_cmd_speed_set(ecmd, SPEED_2500);
+                       break;
                case IXGBE_LINK_SPEED_1GB_FULL:
                        ethtool_cmd_speed_set(ecmd, SPEED_1000);
                        break;
index 0853cf0..54dfad9 100644 (file)
@@ -6380,6 +6380,7 @@ static void ixgbe_watchdog_link_is_up(struct ixgbe_adapter *adapter)
        struct net_device *upper;
        struct list_head *iter;
        u32 link_speed = adapter->link_speed;
+       const char *speed_str;
        bool flow_rx, flow_tx;
 
        /* only continue if link was previously down */
@@ -6417,14 +6418,24 @@ static void ixgbe_watchdog_link_is_up(struct ixgbe_adapter *adapter)
        if (test_bit(__IXGBE_PTP_RUNNING, &adapter->state))
                ixgbe_ptp_start_cyclecounter(adapter);
 
-       e_info(drv, "NIC Link is Up %s, Flow Control: %s\n",
-              (link_speed == IXGBE_LINK_SPEED_10GB_FULL ?
-              "10 Gbps" :
-              (link_speed == IXGBE_LINK_SPEED_1GB_FULL ?
-              "1 Gbps" :
-              (link_speed == IXGBE_LINK_SPEED_100_FULL ?
-              "100 Mbps" :
-              "unknown speed"))),
+       switch (link_speed) {
+       case IXGBE_LINK_SPEED_10GB_FULL:
+               speed_str = "10 Gbps";
+               break;
+       case IXGBE_LINK_SPEED_2_5GB_FULL:
+               speed_str = "2.5 Gbps";
+               break;
+       case IXGBE_LINK_SPEED_1GB_FULL:
+               speed_str = "1 Gbps";
+               break;
+       case IXGBE_LINK_SPEED_100_FULL:
+               speed_str = "100 Mbps";
+               break;
+       default:
+               speed_str = "unknown speed";
+               break;
+       }
+       e_info(drv, "NIC Link is Up %s, Flow Control: %s\n", speed_str,
               ((flow_rx && flow_tx) ? "RX/TX" :
               (flow_rx ? "RX" :
               (flow_tx ? "TX" : "None"))));