igb: Correct PTP support query from ethtool.

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>
This commit is contained in:
Matthew Vick 2012-08-28 06:33:05 +00:00 committed by Jeff Kirsher
parent a79f4f8826
commit a9188028fd
1 changed files with 38 additions and 24 deletions

View 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, 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); struct igb_adapter *adapter = netdev_priv(dev);
info->so_timestamping = switch (adapter->hw.mac.type) {
SOF_TIMESTAMPING_TX_HARDWARE | #ifdef CONFIG_IGB_PTP
SOF_TIMESTAMPING_RX_HARDWARE | case e1000_82576:
SOF_TIMESTAMPING_RAW_HARDWARE; 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) if (adapter->ptp_clock)
info->phc_index = ptp_clock_index(adapter->ptp_clock); info->phc_index = ptp_clock_index(adapter->ptp_clock);
else else
info->phc_index = -1; info->phc_index = -1;
info->tx_types = info->tx_types =
(1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_OFF) |
(1 << HWTSTAMP_TX_ON); (1 << HWTSTAMP_TX_ON);
info->rx_filters = info->rx_filters = 1 << HWTSTAMP_FILTER_NONE;
(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);
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 */ #endif /* CONFIG_IGB_PTP */
default:
return -EOPNOTSUPP;
}
}
static int igb_ethtool_begin(struct net_device *netdev) 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_ethtool_stats = igb_get_ethtool_stats,
.get_coalesce = igb_get_coalesce, .get_coalesce = igb_get_coalesce,
.set_coalesce = igb_set_coalesce, .set_coalesce = igb_set_coalesce,
#ifdef CONFIG_IGB_PTP
.get_ts_info = igb_get_ts_info, .get_ts_info = igb_get_ts_info,
#endif /* CONFIG_IGB_PTP */
.begin = igb_ethtool_begin, .begin = igb_ethtool_begin,
.complete = igb_ethtool_complete, .complete = igb_ethtool_complete,
}; };