mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
bnx2x: convert to use ndo_hwtstamp callbacks
The driver implemented SIOCSHWTSTAMP ioctl command only, but at the same time it has configuration stored in a private structure. Implement both ndo_hwtstamp_set and ndo_hwtstamp_get callback using stored info. ndo_hwtstamp_set callback implements a check for unsupported 1-step timestamping. The same check is removed from bnx2x_configure_ptp_filters function as it's not needed anymore. Another call site of bnx2x_configure_ptp_filters has hwtstamp_ioctl_called guard. Reviewed-by: Kory Maincent <kory.maincent@bootlin.com> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Link: https://patch.msgid.link/20251116094610.3932005-2-vadim.fedorenko@linux.dev Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
ef3b682aca
commit
889e6af877
@@ -308,8 +308,11 @@ static int bnx2x_set_storm_rx_mode(struct bnx2x *bp);
|
||||
/****************************************************************************
|
||||
* General service functions
|
||||
****************************************************************************/
|
||||
|
||||
static int bnx2x_hwtstamp_ioctl(struct bnx2x *bp, struct ifreq *ifr);
|
||||
static int bnx2x_hwtstamp_set(struct net_device *dev,
|
||||
struct kernel_hwtstamp_config *config,
|
||||
struct netlink_ext_ack *extack);
|
||||
static int bnx2x_hwtstamp_get(struct net_device *dev,
|
||||
struct kernel_hwtstamp_config *config);
|
||||
|
||||
static void __storm_memset_dma_mapping(struct bnx2x *bp,
|
||||
u32 addr, dma_addr_t mapping)
|
||||
@@ -12813,14 +12816,9 @@ static int bnx2x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
if (!netif_running(dev))
|
||||
return -EAGAIN;
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCSHWTSTAMP:
|
||||
return bnx2x_hwtstamp_ioctl(bp, ifr);
|
||||
default:
|
||||
DP(NETIF_MSG_LINK, "ioctl: phy id 0x%x, reg 0x%x, val_in 0x%x\n",
|
||||
mdio->phy_id, mdio->reg_num, mdio->val_in);
|
||||
return mdio_mii_ioctl(&bp->mdio, mdio, cmd);
|
||||
}
|
||||
DP(NETIF_MSG_LINK, "ioctl: phy id 0x%x, reg 0x%x, val_in 0x%x\n",
|
||||
mdio->phy_id, mdio->reg_num, mdio->val_in);
|
||||
return mdio_mii_ioctl(&bp->mdio, mdio, cmd);
|
||||
}
|
||||
|
||||
static int bnx2x_validate_addr(struct net_device *dev)
|
||||
@@ -13036,6 +13034,8 @@ static const struct net_device_ops bnx2x_netdev_ops = {
|
||||
.ndo_get_phys_port_id = bnx2x_get_phys_port_id,
|
||||
.ndo_set_vf_link_state = bnx2x_set_vf_link_state,
|
||||
.ndo_features_check = bnx2x_features_check,
|
||||
.ndo_hwtstamp_get = bnx2x_hwtstamp_get,
|
||||
.ndo_hwtstamp_set = bnx2x_hwtstamp_set,
|
||||
};
|
||||
|
||||
static int bnx2x_init_dev(struct bnx2x *bp, struct pci_dev *pdev,
|
||||
@@ -15350,31 +15350,57 @@ int bnx2x_configure_ptp_filters(struct bnx2x *bp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bnx2x_hwtstamp_ioctl(struct bnx2x *bp, struct ifreq *ifr)
|
||||
static int bnx2x_hwtstamp_set(struct net_device *dev,
|
||||
struct kernel_hwtstamp_config *config,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hwtstamp_config config;
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
int rc;
|
||||
|
||||
DP(BNX2X_MSG_PTP, "HWTSTAMP IOCTL called\n");
|
||||
DP(BNX2X_MSG_PTP, "HWTSTAMP SET called\n");
|
||||
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
if (!netif_running(dev)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Device is down");
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
DP(BNX2X_MSG_PTP, "Requested tx_type: %d, requested rx_filters = %d\n",
|
||||
config.tx_type, config.rx_filter);
|
||||
config->tx_type, config->rx_filter);
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_ON:
|
||||
case HWTSTAMP_TX_OFF:
|
||||
break;
|
||||
default:
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"One-step timestamping is not supported");
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
bp->hwtstamp_ioctl_called = true;
|
||||
bp->tx_type = config.tx_type;
|
||||
bp->rx_filter = config.rx_filter;
|
||||
bp->tx_type = config->tx_type;
|
||||
bp->rx_filter = config->rx_filter;
|
||||
|
||||
rc = bnx2x_configure_ptp_filters(bp);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "HW configuration failure");
|
||||
return rc;
|
||||
}
|
||||
|
||||
config.rx_filter = bp->rx_filter;
|
||||
config->rx_filter = bp->rx_filter;
|
||||
|
||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
||||
-EFAULT : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bnx2x_hwtstamp_get(struct net_device *dev,
|
||||
struct kernel_hwtstamp_config *config)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
config->rx_filter = bp->rx_filter;
|
||||
config->tx_type = bp->tx_type;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Configures HW for PTP */
|
||||
|
||||
Reference in New Issue
Block a user