]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tsnep: convert to ndo_hwtstatmp API
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Thu, 16 Oct 2025 15:25:14 +0000 (15:25 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 21 Oct 2025 00:30:26 +0000 (17:30 -0700)
Convert to .ndo_hwtstamp_get()/.ndo_hwtstamp_set() callbacks.
After conversions the rest of tsnep_netdev_ioctl() becomes pure
phy_do_ioctl_running(), so remove tsnep_netdev_ioctl() and replace
it with phy_do_ioctl_running() in .ndo_eth_ioctl.

Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Gerhard Engleder <gerhard@engleder-embedded.com>
Link: https://patch.msgid.link/20251016152515.3510991-7-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/engleder/tsnep.h
drivers/net/ethernet/engleder/tsnep_main.c
drivers/net/ethernet/engleder/tsnep_ptp.c

index f188fba021a621532419e057a11e56630fc69fef..03e19aea9ea484745721e79f4ac1c78211fccf2c 100644 (file)
@@ -176,7 +176,7 @@ struct tsnep_adapter {
        struct tsnep_gcl gcl[2];
        int next_gcl;
 
-       struct hwtstamp_config hwtstamp_config;
+       struct kernel_hwtstamp_config hwtstamp_config;
        struct ptp_clock *ptp_clock;
        struct ptp_clock_info ptp_clock_info;
        /* ptp clock lock */
@@ -203,7 +203,11 @@ extern const struct ethtool_ops tsnep_ethtool_ops;
 
 int tsnep_ptp_init(struct tsnep_adapter *adapter);
 void tsnep_ptp_cleanup(struct tsnep_adapter *adapter);
-int tsnep_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
+int tsnep_ptp_hwtstamp_get(struct net_device *netdev,
+                          struct kernel_hwtstamp_config *config);
+int tsnep_ptp_hwtstamp_set(struct net_device *netdev,
+                          struct kernel_hwtstamp_config *config,
+                          struct netlink_ext_ack *extack);
 
 int tsnep_tc_init(struct tsnep_adapter *adapter);
 void tsnep_tc_cleanup(struct tsnep_adapter *adapter);
index eba73246f986649328c02e779e1ee896e29e6896..b118407c30e87295366d3df6ea87b66961de8e03 100644 (file)
@@ -2168,16 +2168,6 @@ static netdev_tx_t tsnep_netdev_xmit_frame(struct sk_buff *skb,
        return tsnep_xmit_frame_ring(skb, &adapter->tx[queue_mapping]);
 }
 
-static int tsnep_netdev_ioctl(struct net_device *netdev, struct ifreq *ifr,
-                             int cmd)
-{
-       if (!netif_running(netdev))
-               return -EINVAL;
-       if (cmd == SIOCSHWTSTAMP || cmd == SIOCGHWTSTAMP)
-               return tsnep_ptp_ioctl(netdev, ifr, cmd);
-       return phy_mii_ioctl(netdev->phydev, ifr, cmd);
-}
-
 static void tsnep_netdev_set_multicast(struct net_device *netdev)
 {
        struct tsnep_adapter *adapter = netdev_priv(netdev);
@@ -2384,7 +2374,7 @@ static const struct net_device_ops tsnep_netdev_ops = {
        .ndo_open = tsnep_netdev_open,
        .ndo_stop = tsnep_netdev_close,
        .ndo_start_xmit = tsnep_netdev_xmit_frame,
-       .ndo_eth_ioctl = tsnep_netdev_ioctl,
+       .ndo_eth_ioctl = phy_do_ioctl_running,
        .ndo_set_rx_mode = tsnep_netdev_set_multicast,
        .ndo_get_stats64 = tsnep_netdev_get_stats64,
        .ndo_set_mac_address = tsnep_netdev_set_mac_address,
@@ -2394,6 +2384,8 @@ static const struct net_device_ops tsnep_netdev_ops = {
        .ndo_bpf = tsnep_netdev_bpf,
        .ndo_xdp_xmit = tsnep_netdev_xdp_xmit,
        .ndo_xsk_wakeup = tsnep_netdev_xsk_wakeup,
+       .ndo_hwtstamp_get = tsnep_ptp_hwtstamp_get,
+       .ndo_hwtstamp_set = tsnep_ptp_hwtstamp_set,
 };
 
 static int tsnep_mac_init(struct tsnep_adapter *adapter)
index 54fbf0126815fe94ec932e56d7487bd8f6f802e7..ae1308eb813de7ee20109f8293b38baf97398bce 100644 (file)
@@ -19,57 +19,53 @@ void tsnep_get_system_time(struct tsnep_adapter *adapter, u64 *time)
        *time = (((u64)high) << 32) | ((u64)low);
 }
 
-int tsnep_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
+int tsnep_ptp_hwtstamp_get(struct net_device *netdev,
+                          struct kernel_hwtstamp_config *config)
 {
        struct tsnep_adapter *adapter = netdev_priv(netdev);
-       struct hwtstamp_config config;
-
-       if (!ifr)
-               return -EINVAL;
-
-       if (cmd == SIOCSHWTSTAMP) {
-               if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
-                       return -EFAULT;
-
-               switch (config.tx_type) {
-               case HWTSTAMP_TX_OFF:
-               case HWTSTAMP_TX_ON:
-                       break;
-               default:
-                       return -ERANGE;
-               }
-
-               switch (config.rx_filter) {
-               case HWTSTAMP_FILTER_NONE:
-                       break;
-               case HWTSTAMP_FILTER_ALL:
-               case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
-               case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
-               case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
-               case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
-               case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
-               case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
-               case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
-               case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
-               case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
-               case HWTSTAMP_FILTER_PTP_V2_EVENT:
-               case HWTSTAMP_FILTER_PTP_V2_SYNC:
-               case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
-               case HWTSTAMP_FILTER_NTP_ALL:
-                       config.rx_filter = HWTSTAMP_FILTER_ALL;
-                       break;
-               default:
-                       return -ERANGE;
-               }
-
-               memcpy(&adapter->hwtstamp_config, &config,
-                      sizeof(adapter->hwtstamp_config));
+
+       *config = adapter->hwtstamp_config;
+       return 0;
+}
+
+int tsnep_ptp_hwtstamp_set(struct net_device *netdev,
+                          struct kernel_hwtstamp_config *config,
+                          struct netlink_ext_ack *extack)
+{
+       struct tsnep_adapter *adapter = netdev_priv(netdev);
+
+       switch (config->tx_type) {
+       case HWTSTAMP_TX_OFF:
+       case HWTSTAMP_TX_ON:
+               break;
+       default:
+               return -ERANGE;
        }
 
-       if (copy_to_user(ifr->ifr_data, &adapter->hwtstamp_config,
-                        sizeof(adapter->hwtstamp_config)))
-               return -EFAULT;
+       switch (config->rx_filter) {
+       case HWTSTAMP_FILTER_NONE:
+               break;
+       case HWTSTAMP_FILTER_ALL:
+       case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
+       case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
+       case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
+       case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
+       case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
+       case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
+       case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
+       case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
+       case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
+       case HWTSTAMP_FILTER_PTP_V2_EVENT:
+       case HWTSTAMP_FILTER_PTP_V2_SYNC:
+       case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
+       case HWTSTAMP_FILTER_NTP_ALL:
+               config->rx_filter = HWTSTAMP_FILTER_ALL;
+               break;
+       default:
+               return -ERANGE;
+       }
 
+       adapter->hwtstamp_config = *config;
        return 0;
 }