|
@@ -1174,12 +1174,41 @@ static void fec_enet_get_drvinfo(struct net_device *ndev,
|
|
|
strlcpy(info->bus_info, dev_name(&ndev->dev), sizeof(info->bus_info));
|
|
|
}
|
|
|
|
|
|
+static int fec_enet_get_ts_info(struct net_device *ndev,
|
|
|
+ struct ethtool_ts_info *info)
|
|
|
+{
|
|
|
+ struct fec_enet_private *fep = netdev_priv(ndev);
|
|
|
+
|
|
|
+ if (fep->bufdesc_ex) {
|
|
|
+
|
|
|
+ info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
|
|
|
+ SOF_TIMESTAMPING_RX_SOFTWARE |
|
|
|
+ SOF_TIMESTAMPING_SOFTWARE |
|
|
|
+ SOF_TIMESTAMPING_TX_HARDWARE |
|
|
|
+ SOF_TIMESTAMPING_RX_HARDWARE |
|
|
|
+ SOF_TIMESTAMPING_RAW_HARDWARE;
|
|
|
+ if (fep->ptp_clock)
|
|
|
+ info->phc_index = ptp_clock_index(fep->ptp_clock);
|
|
|
+ else
|
|
|
+ info->phc_index = -1;
|
|
|
+
|
|
|
+ info->tx_types = (1 << HWTSTAMP_TX_OFF) |
|
|
|
+ (1 << HWTSTAMP_TX_ON);
|
|
|
+
|
|
|
+ info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
|
|
|
+ (1 << HWTSTAMP_FILTER_ALL);
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ return ethtool_op_get_ts_info(ndev, info);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static const struct ethtool_ops fec_enet_ethtool_ops = {
|
|
|
.get_settings = fec_enet_get_settings,
|
|
|
.set_settings = fec_enet_set_settings,
|
|
|
.get_drvinfo = fec_enet_get_drvinfo,
|
|
|
.get_link = ethtool_op_get_link,
|
|
|
- .get_ts_info = ethtool_op_get_ts_info,
|
|
|
+ .get_ts_info = fec_enet_get_ts_info,
|
|
|
};
|
|
|
|
|
|
static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
|