wx->msg_enable = data;
 }
 EXPORT_SYMBOL(wx_set_msglevel);
+
+int wx_get_ts_info(struct net_device *dev,
+                  struct kernel_ethtool_ts_info *info)
+{
+       struct wx *wx = netdev_priv(dev);
+
+       info->rx_filters = BIT(HWTSTAMP_FILTER_NONE) |
+                          BIT(HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
+                          BIT(HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_SYNC) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_L2_SYNC) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_DELAY_REQ) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) |
+                          BIT(HWTSTAMP_FILTER_PTP_V2_EVENT);
+
+       info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
+                               SOF_TIMESTAMPING_TX_HARDWARE |
+                               SOF_TIMESTAMPING_RX_HARDWARE |
+                               SOF_TIMESTAMPING_RAW_HARDWARE;
+
+       if (wx->ptp_clock)
+               info->phc_index = ptp_clock_index(wx->ptp_clock);
+       else
+               info->phc_index = -1;
+
+       info->tx_types = BIT(HWTSTAMP_TX_OFF) |
+                        BIT(HWTSTAMP_TX_ON);
+
+       return 0;
+}
+EXPORT_SYMBOL(wx_get_ts_info);
+
+void wx_get_ptp_stats(struct net_device *dev,
+                     struct ethtool_ts_stats *ts_stats)
+{
+       struct wx *wx = netdev_priv(dev);
+
+       if (wx->ptp_clock) {
+               ts_stats->pkts = wx->tx_hwtstamp_pkts;
+               ts_stats->lost = wx->tx_hwtstamp_timeouts +
+                                wx->tx_hwtstamp_skipped +
+                                wx->rx_hwtstamp_cleared;
+               ts_stats->err = wx->tx_hwtstamp_errors;
+       }
+}
+EXPORT_SYMBOL(wx_get_ptp_stats);
 
                    struct ethtool_channels *ch);
 u32 wx_get_msglevel(struct net_device *netdev);
 void wx_set_msglevel(struct net_device *netdev, u32 data);
+int wx_get_ts_info(struct net_device *dev,
+                  struct kernel_ethtool_ts_info *info);
+void wx_get_ptp_stats(struct net_device *dev,
+                     struct ethtool_ts_stats *ts_stats);
 #endif /* _WX_ETHTOOL_H_ */
 
        .set_channels           = ngbe_set_channels,
        .get_msglevel           = wx_get_msglevel,
        .set_msglevel           = wx_set_msglevel,
+       .get_ts_info            = wx_get_ts_info,
+       .get_ts_stats           = wx_get_ptp_stats,
 };
 
 void ngbe_set_ethtool_ops(struct net_device *netdev)
 
        .set_rxnfc              = txgbe_set_rxnfc,
        .get_msglevel           = wx_get_msglevel,
        .set_msglevel           = wx_set_msglevel,
+       .get_ts_info            = wx_get_ts_info,
+       .get_ts_stats           = wx_get_ptp_stats,
 };
 
 void txgbe_set_ethtool_ops(struct net_device *netdev)