mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 20:14:06 +02:00
ti: icssg: convert to ndo_hwtstamp API
Convert driver to use .ndo_hwtstamp_get()/.ndo_hwtstamp_set() API. .ndo_eth_ioctl() implementation becomes pure phy_do_ioctl(), remove it from common module, remove exported symbol and replace ndo callback. Reviewed-by: Simon Horman <horms@kernel.org> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Link: https://patch.msgid.link/20251016152515.3510991-3-vadim.fedorenko@linux.dev Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
ed5d5928bd
commit
b8fa98ea4a
|
|
@ -1223,15 +1223,13 @@ void icssg_ndo_tx_timeout(struct net_device *ndev, unsigned int txqueue)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(icssg_ndo_tx_timeout);
|
EXPORT_SYMBOL_GPL(icssg_ndo_tx_timeout);
|
||||||
|
|
||||||
static int emac_set_ts_config(struct net_device *ndev, struct ifreq *ifr)
|
int icssg_ndo_set_ts_config(struct net_device *ndev,
|
||||||
|
struct kernel_hwtstamp_config *config,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct prueth_emac *emac = netdev_priv(ndev);
|
struct prueth_emac *emac = netdev_priv(ndev);
|
||||||
struct hwtstamp_config config;
|
|
||||||
|
|
||||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
switch (config->tx_type) {
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
switch (config.tx_type) {
|
|
||||||
case HWTSTAMP_TX_OFF:
|
case HWTSTAMP_TX_OFF:
|
||||||
emac->tx_ts_enabled = 0;
|
emac->tx_ts_enabled = 0;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1242,7 +1240,7 @@ static int emac_set_ts_config(struct net_device *ndev, struct ifreq *ifr)
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (config.rx_filter) {
|
switch (config->rx_filter) {
|
||||||
case HWTSTAMP_FILTER_NONE:
|
case HWTSTAMP_FILTER_NONE:
|
||||||
emac->rx_ts_enabled = 0;
|
emac->rx_ts_enabled = 0;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1262,43 +1260,28 @@ static int emac_set_ts_config(struct net_device *ndev, struct ifreq *ifr)
|
||||||
case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
|
case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
|
||||||
case HWTSTAMP_FILTER_NTP_ALL:
|
case HWTSTAMP_FILTER_NTP_ALL:
|
||||||
emac->rx_ts_enabled = 1;
|
emac->rx_ts_enabled = 1;
|
||||||
config.rx_filter = HWTSTAMP_FILTER_ALL;
|
config->rx_filter = HWTSTAMP_FILTER_ALL;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
return 0;
|
||||||
-EFAULT : 0;
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(icssg_ndo_set_ts_config);
|
||||||
|
|
||||||
static int emac_get_ts_config(struct net_device *ndev, struct ifreq *ifr)
|
int icssg_ndo_get_ts_config(struct net_device *ndev,
|
||||||
|
struct kernel_hwtstamp_config *config)
|
||||||
{
|
{
|
||||||
struct prueth_emac *emac = netdev_priv(ndev);
|
struct prueth_emac *emac = netdev_priv(ndev);
|
||||||
struct hwtstamp_config config;
|
|
||||||
|
|
||||||
config.flags = 0;
|
config->flags = 0;
|
||||||
config.tx_type = emac->tx_ts_enabled ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
|
config->tx_type = emac->tx_ts_enabled ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
|
||||||
config.rx_filter = emac->rx_ts_enabled ? HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE;
|
config->rx_filter = emac->rx_ts_enabled ? HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE;
|
||||||
|
|
||||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
return 0;
|
||||||
-EFAULT : 0;
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(icssg_ndo_get_ts_config);
|
||||||
int icssg_ndo_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd)
|
|
||||||
{
|
|
||||||
switch (cmd) {
|
|
||||||
case SIOCGHWTSTAMP:
|
|
||||||
return emac_get_ts_config(ndev, ifr);
|
|
||||||
case SIOCSHWTSTAMP:
|
|
||||||
return emac_set_ts_config(ndev, ifr);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return phy_do_ioctl(ndev, ifr, cmd);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(icssg_ndo_ioctl);
|
|
||||||
|
|
||||||
void icssg_ndo_get_stats64(struct net_device *ndev,
|
void icssg_ndo_get_stats64(struct net_device *ndev,
|
||||||
struct rtnl_link_stats64 *stats)
|
struct rtnl_link_stats64 *stats)
|
||||||
|
|
|
||||||
|
|
@ -1168,7 +1168,7 @@ static const struct net_device_ops emac_netdev_ops = {
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
.ndo_tx_timeout = icssg_ndo_tx_timeout,
|
.ndo_tx_timeout = icssg_ndo_tx_timeout,
|
||||||
.ndo_set_rx_mode = emac_ndo_set_rx_mode,
|
.ndo_set_rx_mode = emac_ndo_set_rx_mode,
|
||||||
.ndo_eth_ioctl = icssg_ndo_ioctl,
|
.ndo_eth_ioctl = phy_do_ioctl,
|
||||||
.ndo_get_stats64 = icssg_ndo_get_stats64,
|
.ndo_get_stats64 = icssg_ndo_get_stats64,
|
||||||
.ndo_get_phys_port_name = icssg_ndo_get_phys_port_name,
|
.ndo_get_phys_port_name = icssg_ndo_get_phys_port_name,
|
||||||
.ndo_fix_features = emac_ndo_fix_features,
|
.ndo_fix_features = emac_ndo_fix_features,
|
||||||
|
|
@ -1176,6 +1176,8 @@ static const struct net_device_ops emac_netdev_ops = {
|
||||||
.ndo_vlan_rx_kill_vid = emac_ndo_vlan_rx_del_vid,
|
.ndo_vlan_rx_kill_vid = emac_ndo_vlan_rx_del_vid,
|
||||||
.ndo_bpf = emac_ndo_bpf,
|
.ndo_bpf = emac_ndo_bpf,
|
||||||
.ndo_xdp_xmit = emac_xdp_xmit,
|
.ndo_xdp_xmit = emac_xdp_xmit,
|
||||||
|
.ndo_hwtstamp_get = icssg_ndo_get_ts_config,
|
||||||
|
.ndo_hwtstamp_set = icssg_ndo_set_ts_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int prueth_netdev_init(struct prueth *prueth,
|
static int prueth_netdev_init(struct prueth *prueth,
|
||||||
|
|
|
||||||
|
|
@ -479,7 +479,11 @@ void prueth_reset_tx_chan(struct prueth_emac *emac, int ch_num,
|
||||||
void prueth_reset_rx_chan(struct prueth_rx_chn *chn,
|
void prueth_reset_rx_chan(struct prueth_rx_chn *chn,
|
||||||
int num_flows, bool disable);
|
int num_flows, bool disable);
|
||||||
void icssg_ndo_tx_timeout(struct net_device *ndev, unsigned int txqueue);
|
void icssg_ndo_tx_timeout(struct net_device *ndev, unsigned int txqueue);
|
||||||
int icssg_ndo_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd);
|
int icssg_ndo_get_ts_config(struct net_device *ndev,
|
||||||
|
struct kernel_hwtstamp_config *config);
|
||||||
|
int icssg_ndo_set_ts_config(struct net_device *ndev,
|
||||||
|
struct kernel_hwtstamp_config *config,
|
||||||
|
struct netlink_ext_ack *extack);
|
||||||
void icssg_ndo_get_stats64(struct net_device *ndev,
|
void icssg_ndo_get_stats64(struct net_device *ndev,
|
||||||
struct rtnl_link_stats64 *stats);
|
struct rtnl_link_stats64 *stats);
|
||||||
int icssg_ndo_get_phys_port_name(struct net_device *ndev, char *name,
|
int icssg_ndo_get_phys_port_name(struct net_device *ndev, char *name,
|
||||||
|
|
|
||||||
|
|
@ -747,9 +747,11 @@ static const struct net_device_ops emac_netdev_ops = {
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
.ndo_tx_timeout = icssg_ndo_tx_timeout,
|
.ndo_tx_timeout = icssg_ndo_tx_timeout,
|
||||||
.ndo_set_rx_mode = emac_ndo_set_rx_mode_sr1,
|
.ndo_set_rx_mode = emac_ndo_set_rx_mode_sr1,
|
||||||
.ndo_eth_ioctl = icssg_ndo_ioctl,
|
.ndo_eth_ioctl = phy_do_ioctl,
|
||||||
.ndo_get_stats64 = icssg_ndo_get_stats64,
|
.ndo_get_stats64 = icssg_ndo_get_stats64,
|
||||||
.ndo_get_phys_port_name = icssg_ndo_get_phys_port_name,
|
.ndo_get_phys_port_name = icssg_ndo_get_phys_port_name,
|
||||||
|
.ndo_hwtstamp_get = icssg_ndo_get_ts_config,
|
||||||
|
.ndo_hwtstamp_set = icssg_ndo_set_ts_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int prueth_netdev_init(struct prueth *prueth,
|
static int prueth_netdev_init(struct prueth *prueth,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user