aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/e1000e/ethtool.c
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2012-12-27 03:32:33 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-01-18 07:55:07 -0500
commitb67e191307a3f330525265af3e2877a74d557cbf (patch)
treeb1be965c24cf81c2a244c420427c3937888abb92 /drivers/net/ethernet/intel/e1000e/ethtool.c
parentffe0b2ff17e1d59d33334767e07e8141de4bd5c8 (diff)
e1000e: add support for hardware timestamping on some devices
On 82574, 82583, 82579, I217 and I218 add support for hardware time stamping of all or no Rx packets and Tx packets which have the SKBTX_HW_TSTAMP flag set. Update the .get_ts_info ethtool operation to report the supported time stamping modes, and enable and disable hardware time stamping with the SIOCSHWTSTAMP ioctl. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/ethtool.c')
-rw-r--r--drivers/net/ethernet/intel/e1000e/ethtool.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index 636ba09ca6fb..f268cbcb751d 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -108,6 +108,7 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
108 E1000_STAT("dropped_smbus", stats.mgpdc), 108 E1000_STAT("dropped_smbus", stats.mgpdc),
109 E1000_STAT("rx_dma_failed", rx_dma_failed), 109 E1000_STAT("rx_dma_failed", rx_dma_failed),
110 E1000_STAT("tx_dma_failed", tx_dma_failed), 110 E1000_STAT("tx_dma_failed", tx_dma_failed),
111 E1000_STAT("rx_hwtstamp_cleared", rx_hwtstamp_cleared),
111}; 112};
112 113
113#define E1000_GLOBAL_STATS_LEN ARRAY_SIZE(e1000_gstrings_stats) 114#define E1000_GLOBAL_STATS_LEN ARRAY_SIZE(e1000_gstrings_stats)
@@ -2182,6 +2183,28 @@ static int e1000e_set_eee(struct net_device *netdev, struct ethtool_eee *edata)
2182 return 0; 2183 return 0;
2183} 2184}
2184 2185
2186static int e1000e_get_ts_info(struct net_device *netdev,
2187 struct ethtool_ts_info *info)
2188{
2189 struct e1000_adapter *adapter = netdev_priv(netdev);
2190
2191 ethtool_op_get_ts_info(netdev, info);
2192
2193 if (!(adapter->flags & FLAG_HAS_HW_TIMESTAMP))
2194 return 0;
2195
2196 info->so_timestamping |= (SOF_TIMESTAMPING_TX_HARDWARE |
2197 SOF_TIMESTAMPING_RX_HARDWARE |
2198 SOF_TIMESTAMPING_RAW_HARDWARE);
2199
2200 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
2201
2202 info->rx_filters = ((1 << HWTSTAMP_FILTER_NONE) |
2203 (1 << HWTSTAMP_FILTER_ALL));
2204
2205 return 0;
2206}
2207
2185static const struct ethtool_ops e1000_ethtool_ops = { 2208static const struct ethtool_ops e1000_ethtool_ops = {
2186 .get_settings = e1000_get_settings, 2209 .get_settings = e1000_get_settings,
2187 .set_settings = e1000_set_settings, 2210 .set_settings = e1000_set_settings,
@@ -2209,7 +2232,7 @@ static const struct ethtool_ops e1000_ethtool_ops = {
2209 .get_coalesce = e1000_get_coalesce, 2232 .get_coalesce = e1000_get_coalesce,
2210 .set_coalesce = e1000_set_coalesce, 2233 .set_coalesce = e1000_set_coalesce,
2211 .get_rxnfc = e1000_get_rxnfc, 2234 .get_rxnfc = e1000_get_rxnfc,
2212 .get_ts_info = ethtool_op_get_ts_info, 2235 .get_ts_info = e1000e_get_ts_info,
2213 .get_eee = e1000e_get_eee, 2236 .get_eee = e1000e_get_eee,
2214 .set_eee = e1000e_set_eee, 2237 .set_eee = e1000e_set_eee,
2215}; 2238};