igb: Correct PTP support query from ethtool.
authorMatthew Vick <matthew.vick@intel.com>
Tue, 28 Aug 2012 06:33:05 +0000 (06:33 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 17 Sep 2012 09:04:18 +0000 (02:04 -0700)
Update ethtool_get_ts_info to not report any supported functionality on
82575 and add support for V2 Sync and V2 Delay packets. In the case
where CONFIG_IGB_PTP is not defined, we should be reporting default
values.

v2: Correct the function to return EOPNOTSUPP when there is no PTP support
    or the device does not support PTP. Also fix minor whitespace issue.

Signed-off-by: Matthew Vick <matthew.vick@intel.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/igb_ethtool.c

index ffed4d068591b37b1af5b2f60c84ff0f9c5b7c6d..2ea012849825224af910ba7189aa850b58610806 100644 (file)
@@ -2295,37 +2295,53 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
        }
 }
 
-#ifdef CONFIG_IGB_PTP
 static int igb_get_ts_info(struct net_device *dev,
-                                  struct ethtool_ts_info *info)
+                          struct ethtool_ts_info *info)
 {
        struct igb_adapter *adapter = netdev_priv(dev);
 
-       info->so_timestamping =
-               SOF_TIMESTAMPING_TX_HARDWARE |
-               SOF_TIMESTAMPING_RX_HARDWARE |
-               SOF_TIMESTAMPING_RAW_HARDWARE;
+       switch (adapter->hw.mac.type) {
+#ifdef CONFIG_IGB_PTP
+       case e1000_82576:
+       case e1000_82580:
+       case e1000_i350:
+       case e1000_i210:
+       case e1000_i211:
+               info->so_timestamping =
+                       SOF_TIMESTAMPING_TX_HARDWARE |
+                       SOF_TIMESTAMPING_RX_HARDWARE |
+                       SOF_TIMESTAMPING_RAW_HARDWARE;
 
-       if (adapter->ptp_clock)
-               info->phc_index = ptp_clock_index(adapter->ptp_clock);
-       else
-               info->phc_index = -1;
+               if (adapter->ptp_clock)
+                       info->phc_index = ptp_clock_index(adapter->ptp_clock);
+               else
+                       info->phc_index = -1;
 
-       info->tx_types =
-               (1 << HWTSTAMP_TX_OFF) |
-               (1 << HWTSTAMP_TX_ON);
+               info->tx_types =
+                       (1 << HWTSTAMP_TX_OFF) |
+                       (1 << HWTSTAMP_TX_ON);
 
-       info->rx_filters =
-               (1 << HWTSTAMP_FILTER_NONE) |
-               (1 << HWTSTAMP_FILTER_ALL) |
-               (1 << HWTSTAMP_FILTER_SOME) |
-               (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
-               (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
-               (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
+               info->rx_filters = 1 << HWTSTAMP_FILTER_NONE;
 
-       return 0;
-}
+               /* 82576 does not support timestamping all packets. */
+               if (adapter->hw.mac.type >= e1000_82580)
+                       info->rx_filters |= 1 << HWTSTAMP_FILTER_ALL;
+               else
+                       info->rx_filters |=
+                               (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
+                               (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
+                               (1 << HWTSTAMP_FILTER_PTP_V2_L2_SYNC) |
+                               (1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
+                               (1 << HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) |
+                               (1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) |
+                               (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
+
+               return 0;
 #endif /* CONFIG_IGB_PTP */
+       default:
+               return -EOPNOTSUPP;
+       }
+}
 
 static int igb_ethtool_begin(struct net_device *netdev)
 {
@@ -2366,9 +2382,7 @@ static const struct ethtool_ops igb_ethtool_ops = {
        .get_ethtool_stats      = igb_get_ethtool_stats,
        .get_coalesce           = igb_get_coalesce,
        .set_coalesce           = igb_set_coalesce,
-#ifdef CONFIG_IGB_PTP
        .get_ts_info            = igb_get_ts_info,
-#endif /* CONFIG_IGB_PTP */
        .begin                  = igb_ethtool_begin,
        .complete               = igb_ethtool_complete,
 };