mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
net: liquidio_vf: convert to use ndo_hwtstamp callbacks
The driver implemented SIOCSHWTSTAMP ioctl command only, but there is a way to get configuration back. Implement both ndo_hwtstamp_set and ndo_hwtstamp_set 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-4-vadim.fedorenko@linux.dev Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
2b38447548
commit
94037a0e18
|
|
@ -1236,20 +1236,13 @@ liquidio_get_stats64(struct net_device *netdev,
|
|||
lstats->tx_carrier_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 lio *lio = GET_LIO(netdev);
|
||||
struct hwtstamp_config conf;
|
||||
|
||||
if (copy_from_user(&conf, ifr->ifr_data, sizeof(conf)))
|
||||
return -EFAULT;
|
||||
|
||||
switch (conf.tx_type) {
|
||||
switch (conf->tx_type) {
|
||||
case HWTSTAMP_TX_ON:
|
||||
case HWTSTAMP_TX_OFF:
|
||||
break;
|
||||
|
|
@ -1257,7 +1250,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:
|
||||
|
|
@ -1275,35 +1268,31 @@ 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)
|
||||
{
|
||||
switch (cmd) {
|
||||
case SIOCSHWTSTAMP:
|
||||
return hwtstamp_ioctl(netdev, ifr);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
|
||||
/* TX timestamping is techically 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;
|
||||
}
|
||||
|
||||
static void handle_timestamp(struct octeon_device *oct, u32 status, void *buf)
|
||||
|
|
@ -1881,9 +1870,10 @@ 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_hwtstamp_get = liquidio_hwtstamp_get,
|
||||
.ndo_hwtstamp_set = liquidio_hwtstamp_set,
|
||||
};
|
||||
|
||||
static int lio_nic_info(struct octeon_recv_info *recv_info, void *buf)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user