]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: liquidio: convert to use ndo_hwtstamp callbacks
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Mon, 3 Nov 2025 15:09:47 +0000 (15:09 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 5 Nov 2025 01:43:51 +0000 (17:43 -0800)
The driver implemented SIOCSHWTSTAMP ioctl command only, but there is a
way to get configured status. Implement both ndo_hwtstamp_set and
ndo_hwtstamp_get callbacks.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20251103150952.3538205-3-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cavium/liquidio/lio_main.c

index 8e2fcec26ea13c38d4226ca3a2bfce14801efc60..0732440eeacd62e84d6840155cc99fafd12878a3 100644 (file)
@@ -2107,20 +2107,16 @@ liquidio_get_stats64(struct net_device *netdev,
                lstats->tx_fifo_errors;
 }
 
-/**
- * hwtstamp_ioctl - Handler for SIOCSHWTSTAMP ioctl
- * @netdev: network device
- * @ifr: interface request
- */
-static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
+static int liquidio_hwtstamp_set(struct net_device *netdev,
+                                struct kernel_hwtstamp_config *conf,
+                                struct netlink_ext_ack *extack)
 {
-       struct hwtstamp_config conf;
        struct lio *lio = GET_LIO(netdev);
 
-       if (copy_from_user(&conf, ifr->ifr_data, sizeof(conf)))
-               return -EFAULT;
+       if (!lio->oct_dev->ptp_enable)
+               return -EOPNOTSUPP;
 
-       switch (conf.tx_type) {
+       switch (conf->tx_type) {
        case HWTSTAMP_TX_ON:
        case HWTSTAMP_TX_OFF:
                break;
@@ -2128,7 +2124,7 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
                return -ERANGE;
        }
 
-       switch (conf.rx_filter) {
+       switch (conf->rx_filter) {
        case HWTSTAMP_FILTER_NONE:
                break;
        case HWTSTAMP_FILTER_ALL:
@@ -2146,39 +2142,32 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
        case HWTSTAMP_FILTER_PTP_V2_SYNC:
        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
        case HWTSTAMP_FILTER_NTP_ALL:
-               conf.rx_filter = HWTSTAMP_FILTER_ALL;
+               conf->rx_filter = HWTSTAMP_FILTER_ALL;
                break;
        default:
                return -ERANGE;
        }
 
-       if (conf.rx_filter == HWTSTAMP_FILTER_ALL)
+       if (conf->rx_filter == HWTSTAMP_FILTER_ALL)
                ifstate_set(lio, LIO_IFSTATE_RX_TIMESTAMP_ENABLED);
 
        else
                ifstate_reset(lio, LIO_IFSTATE_RX_TIMESTAMP_ENABLED);
 
-       return copy_to_user(ifr->ifr_data, &conf, sizeof(conf)) ? -EFAULT : 0;
+       return 0;
 }
 
-/**
- * liquidio_ioctl - ioctl handler
- * @netdev: network device
- * @ifr: interface request
- * @cmd: command
- */
-static int liquidio_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
+static int liquidio_hwtstamp_get(struct net_device *netdev,
+                                struct kernel_hwtstamp_config *conf)
 {
        struct lio *lio = GET_LIO(netdev);
 
-       switch (cmd) {
-       case SIOCSHWTSTAMP:
-               if (lio->oct_dev->ptp_enable)
-                       return hwtstamp_ioctl(netdev, ifr);
-               fallthrough;
-       default:
-               return -EOPNOTSUPP;
-       }
+       /* TX timestamping is technically always on */
+       conf->tx_type = HWTSTAMP_TX_ON;
+       conf->rx_filter = ifstate_check(lio, LIO_IFSTATE_RX_TIMESTAMP_ENABLED) ?
+                         HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE;
+
+       return 0;
 }
 
 /**
@@ -3227,7 +3216,6 @@ static const struct net_device_ops lionetdevops = {
        .ndo_vlan_rx_add_vid    = liquidio_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid   = liquidio_vlan_rx_kill_vid,
        .ndo_change_mtu         = liquidio_change_mtu,
-       .ndo_eth_ioctl          = liquidio_ioctl,
        .ndo_fix_features       = liquidio_fix_features,
        .ndo_set_features       = liquidio_set_features,
        .ndo_set_vf_mac         = liquidio_set_vf_mac,
@@ -3238,6 +3226,8 @@ static const struct net_device_ops lionetdevops = {
        .ndo_set_vf_link_state  = liquidio_set_vf_link_state,
        .ndo_get_vf_stats       = liquidio_get_vf_stats,
        .ndo_get_port_parent_id = liquidio_get_port_parent_id,
+       .ndo_hwtstamp_get       = liquidio_hwtstamp_get,
+       .ndo_hwtstamp_set       = liquidio_hwtstamp_set,
 };
 
 /**