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:
Vadim Fedorenko
2025-11-16 09:46:09 +00:00
committed by Jakub Kicinski
parent ef3b682aca
commit 889e6af877

View File

@@ -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 */