mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
net: gianfar: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
New timestamping API was introduced in commit 66f7223039 ("net: add
NDOs for configuring hardware timestamping") from kernel v6.6. It is
time to convert the gianfar driver to the new API, so that the
ndo_eth_ioctl() path can be removed completely.
Don't propagate the unnecessary "config.flags = 0;" assignment to
gfar_hwtstamp_get(), because dev_get_hwtstamp() provides a zero
initialized struct kernel_hwtstamp_config.
After removing timestamping logic from gfar_ioctl(), the rest is
equivalent to phy_do_ioctl_running(), so provide that directly as our
ndo_eth_ioctl() implementation.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # LS1021A
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20250508143659.1944220-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
d27c6e8975
commit
17c6c5a09d
|
|
@ -2061,15 +2061,13 @@ static void gfar_timeout(struct net_device *dev, unsigned int txqueue)
|
|||
schedule_work(&priv->reset_task);
|
||||
}
|
||||
|
||||
static int gfar_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
|
||||
static int gfar_hwtstamp_set(struct net_device *netdev,
|
||||
struct kernel_hwtstamp_config *config,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hwtstamp_config config;
|
||||
struct gfar_private *priv = netdev_priv(netdev);
|
||||
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
switch (config.tx_type) {
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
priv->hwts_tx_en = 0;
|
||||
break;
|
||||
|
|
@ -2082,7 +2080,7 @@ static int gfar_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
|
|||
return -ERANGE;
|
||||
}
|
||||
|
||||
switch (config.rx_filter) {
|
||||
switch (config->rx_filter) {
|
||||
case HWTSTAMP_FILTER_NONE:
|
||||
if (priv->hwts_rx_en) {
|
||||
priv->hwts_rx_en = 0;
|
||||
|
|
@ -2096,44 +2094,23 @@ static int gfar_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
|
|||
priv->hwts_rx_en = 1;
|
||||
reset_gfar(netdev);
|
||||
}
|
||||
config.rx_filter = HWTSTAMP_FILTER_ALL;
|
||||
config->rx_filter = HWTSTAMP_FILTER_ALL;
|
||||
break;
|
||||
}
|
||||
|
||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
||||
-EFAULT : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gfar_hwtstamp_get(struct net_device *netdev, struct ifreq *ifr)
|
||||
static int gfar_hwtstamp_get(struct net_device *netdev,
|
||||
struct kernel_hwtstamp_config *config)
|
||||
{
|
||||
struct hwtstamp_config config;
|
||||
struct gfar_private *priv = netdev_priv(netdev);
|
||||
|
||||
config.flags = 0;
|
||||
config.tx_type = priv->hwts_tx_en ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
|
||||
config.rx_filter = (priv->hwts_rx_en ?
|
||||
HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE);
|
||||
config->tx_type = priv->hwts_tx_en ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
|
||||
config->rx_filter = priv->hwts_rx_en ? HWTSTAMP_FILTER_ALL :
|
||||
HWTSTAMP_FILTER_NONE;
|
||||
|
||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
||||
-EFAULT : 0;
|
||||
}
|
||||
|
||||
static int gfar_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
{
|
||||
struct phy_device *phydev = dev->phydev;
|
||||
|
||||
if (!netif_running(dev))
|
||||
return -EINVAL;
|
||||
|
||||
if (cmd == SIOCSHWTSTAMP)
|
||||
return gfar_hwtstamp_set(dev, rq);
|
||||
if (cmd == SIOCGHWTSTAMP)
|
||||
return gfar_hwtstamp_get(dev, rq);
|
||||
|
||||
if (!phydev)
|
||||
return -ENODEV;
|
||||
|
||||
return phy_mii_ioctl(phydev, rq, cmd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Interrupt Handler for Transmit complete */
|
||||
|
|
@ -3174,7 +3151,7 @@ static const struct net_device_ops gfar_netdev_ops = {
|
|||
.ndo_set_features = gfar_set_features,
|
||||
.ndo_set_rx_mode = gfar_set_multi,
|
||||
.ndo_tx_timeout = gfar_timeout,
|
||||
.ndo_eth_ioctl = gfar_ioctl,
|
||||
.ndo_eth_ioctl = phy_do_ioctl_running,
|
||||
.ndo_get_stats64 = gfar_get_stats64,
|
||||
.ndo_change_carrier = fixed_phy_change_carrier,
|
||||
.ndo_set_mac_address = gfar_set_mac_addr,
|
||||
|
|
@ -3182,6 +3159,8 @@ static const struct net_device_ops gfar_netdev_ops = {
|
|||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = gfar_netpoll,
|
||||
#endif
|
||||
.ndo_hwtstamp_get = gfar_hwtstamp_get,
|
||||
.ndo_hwtstamp_set = gfar_hwtstamp_set,
|
||||
};
|
||||
|
||||
/* Set up the ethernet device structure, private data,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user