Merge branch 'hwtstamp_bonding'
Hangbin Liu says: ==================== net: add new hwtstamp flag HWTSTAMP_FLAG_BONDED_PHC_INDEX This patchset add a new hwtstamp_config flag HWTSTAMP_FLAG_BONDED_PHC_INDEX. When user want to get bond active interface's PHC, they need to add this flag and aware the PHC index may changed. v3: Use bitwise test to check the flags validation v2: rename the flag to HWTSTAMP_FLAG_BONDED_PHC_INDEX ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
d0c3e46484
@ -4094,6 +4094,7 @@ static int bond_eth_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cm
|
||||
struct mii_ioctl_data *mii = NULL;
|
||||
const struct net_device_ops *ops;
|
||||
struct net_device *real_dev;
|
||||
struct hwtstamp_config cfg;
|
||||
struct ifreq ifrr;
|
||||
int res = 0;
|
||||
|
||||
@ -4124,21 +4125,29 @@ static int bond_eth_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cm
|
||||
break;
|
||||
case SIOCSHWTSTAMP:
|
||||
case SIOCGHWTSTAMP:
|
||||
rcu_read_lock();
|
||||
real_dev = bond_option_active_slave_get_rcu(bond);
|
||||
rcu_read_unlock();
|
||||
if (real_dev) {
|
||||
strscpy_pad(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
|
||||
ifrr.ifr_ifru = ifr->ifr_ifru;
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
ops = real_dev->netdev_ops;
|
||||
if (netif_device_present(real_dev) && ops->ndo_eth_ioctl)
|
||||
res = ops->ndo_eth_ioctl(real_dev, &ifrr, cmd);
|
||||
if (cfg.flags & HWTSTAMP_FLAG_BONDED_PHC_INDEX) {
|
||||
rcu_read_lock();
|
||||
real_dev = bond_option_active_slave_get_rcu(bond);
|
||||
rcu_read_unlock();
|
||||
if (real_dev) {
|
||||
strscpy_pad(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
|
||||
ifrr.ifr_ifru = ifr->ifr_ifru;
|
||||
|
||||
if (!res)
|
||||
ifr->ifr_ifru = ifrr.ifr_ifru;
|
||||
ops = real_dev->netdev_ops;
|
||||
if (netif_device_present(real_dev) && ops->ndo_eth_ioctl) {
|
||||
res = ops->ndo_eth_ioctl(real_dev, &ifrr, cmd);
|
||||
|
||||
if (!res)
|
||||
ifr->ifr_ifru = ifrr.ifr_ifru;
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
fallthrough;
|
||||
default:
|
||||
res = -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -52,10 +52,6 @@ static int hellcreek_set_hwtstamp_config(struct hellcreek *hellcreek, int port,
|
||||
*/
|
||||
clear_bit_unlock(HELLCREEK_HWTSTAMP_ENABLED, &ps->state);
|
||||
|
||||
/* Reserved for future extensions */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_ON:
|
||||
tx_tstamp_enable = true;
|
||||
|
@ -100,10 +100,6 @@ static int mv88e6xxx_set_hwtstamp_config(struct mv88e6xxx_chip *chip, int port,
|
||||
*/
|
||||
clear_bit_unlock(MV88E6XXX_HWTSTAMP_ENABLED, &ps->state);
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
tstamp_enable = false;
|
||||
|
@ -1508,9 +1508,6 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
|
||||
if (copy_from_user(&config, ifreq->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
mac_tscr = 0;
|
||||
|
||||
switch (config.tx_type) {
|
||||
|
@ -231,9 +231,6 @@ static void aq_ndev_set_multicast_settings(struct net_device *ndev)
|
||||
static int aq_ndev_config_hwtstamp(struct aq_nic_s *aq_nic,
|
||||
struct hwtstamp_config *config)
|
||||
{
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
case HWTSTAMP_TX_ON:
|
||||
|
@ -15356,11 +15356,6 @@ static int bnx2x_hwtstamp_ioctl(struct bnx2x *bp, struct ifreq *ifr)
|
||||
DP(BNX2X_MSG_PTP, "Requested tx_type: %d, requested rx_filters = %d\n",
|
||||
config.tx_type, config.rx_filter);
|
||||
|
||||
if (config.flags) {
|
||||
BNX2X_ERR("config.flags is reserved for future use\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bp->hwtstamp_ioctl_called = true;
|
||||
bp->tx_type = config.tx_type;
|
||||
bp->rx_filter = config.rx_filter;
|
||||
|
@ -417,9 +417,6 @@ int bnxt_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
|
||||
if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
|
||||
return -EFAULT;
|
||||
|
||||
if (stmpconf.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
|
||||
stmpconf.tx_type != HWTSTAMP_TX_OFF)
|
||||
return -ERANGE;
|
||||
|
@ -13806,9 +13806,6 @@ static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
|
||||
if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
|
||||
return -EFAULT;
|
||||
|
||||
if (stmpconf.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
|
||||
stmpconf.tx_type != HWTSTAMP_TX_OFF)
|
||||
return -ERANGE;
|
||||
|
@ -464,10 +464,6 @@ int gem_set_hwtst(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
sizeof(*tstamp_config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (tstamp_config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (tstamp_config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
break;
|
||||
|
@ -2114,9 +2114,6 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
|
||||
if (copy_from_user(&conf, ifr->ifr_data, sizeof(conf)))
|
||||
return -EFAULT;
|
||||
|
||||
if (conf.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (conf.tx_type) {
|
||||
case HWTSTAMP_TX_ON:
|
||||
case HWTSTAMP_TX_OFF:
|
||||
|
@ -1254,9 +1254,6 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
|
||||
if (copy_from_user(&conf, ifr->ifr_data, sizeof(conf)))
|
||||
return -EFAULT;
|
||||
|
||||
if (conf.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (conf.tx_type) {
|
||||
case HWTSTAMP_TX_ON:
|
||||
case HWTSTAMP_TX_OFF:
|
||||
|
@ -702,9 +702,6 @@ static int octeon_mgmt_ioctl_hwtstamp(struct net_device *netdev,
|
||||
if (copy_from_user(&config, rq->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
if (config.flags) /* reserved for future extensions */
|
||||
return -EINVAL;
|
||||
|
||||
/* Check the status of hardware for tiemstamps */
|
||||
if (OCTEON_IS_MODEL(OCTEON_CN6XXX)) {
|
||||
/* Get the current state of the PTP clock */
|
||||
|
@ -1917,10 +1917,6 @@ static int nicvf_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
case HWTSTAMP_TX_ON:
|
||||
|
@ -31,9 +31,6 @@ int tsnep_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
case HWTSTAMP_TX_ON:
|
||||
|
@ -473,10 +473,6 @@ int fec_ptp_set(struct net_device *ndev, struct ifreq *ifr)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
fep->hwts_tx_en = 0;
|
||||
|
@ -2076,10 +2076,6 @@ static int gfar_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
priv->hwts_tx_en = 0;
|
||||
|
@ -3614,10 +3614,6 @@ static int e1000e_config_hwtstamp(struct e1000_adapter *adapter,
|
||||
if (!(adapter->flags & FLAG_HAS_HW_TIMESTAMP))
|
||||
return -EINVAL;
|
||||
|
||||
/* flags reserved for future extensions - must be zero */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
tsync_tx_ctl = 0;
|
||||
|
@ -1205,10 +1205,6 @@ static int i40e_ptp_set_timestamp_mode(struct i40e_pf *pf,
|
||||
|
||||
INIT_WORK(&pf->ptp_extts0_work, i40e_ptp_extts0_work);
|
||||
|
||||
/* Reserved for future extensions. */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
pf->ptp_tx = false;
|
||||
|
@ -1205,10 +1205,6 @@ int ice_ptp_get_ts_config(struct ice_pf *pf, struct ifreq *ifr)
|
||||
static int
|
||||
ice_ptp_set_timestamp_mode(struct ice_pf *pf, struct hwtstamp_config *config)
|
||||
{
|
||||
/* Reserved for future extensions. */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
ice_set_tx_tstamp(pf, false);
|
||||
|
@ -1015,10 +1015,6 @@ static int igb_ptp_set_timestamp_mode(struct igb_adapter *adapter,
|
||||
bool is_l2 = false;
|
||||
u32 regval;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
tsync_tx_ctl = 0;
|
||||
|
@ -560,10 +560,6 @@ static void igc_ptp_enable_tx_timestamp(struct igc_adapter *adapter)
|
||||
static int igc_ptp_set_timestamp_mode(struct igc_adapter *adapter,
|
||||
struct hwtstamp_config *config)
|
||||
{
|
||||
/* reserved for future extensions */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
igc_ptp_disable_tx_timestamp(adapter);
|
||||
|
@ -992,10 +992,6 @@ static int ixgbe_ptp_set_timestamp_mode(struct ixgbe_adapter *adapter,
|
||||
bool is_l2 = false;
|
||||
u32 regval;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config->flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config->tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
tsync_tx_ctl = 0;
|
||||
|
@ -5142,9 +5142,6 @@ static int mvpp2_set_ts_config(struct mvpp2_port *port, struct ifreq *ifr)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (config.tx_type != HWTSTAMP_TX_OFF &&
|
||||
config.tx_type != HWTSTAMP_TX_ON)
|
||||
return -ERANGE;
|
||||
|
@ -2002,10 +2002,6 @@ int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
otx2_config_hw_tx_tstamp(pfvf, false);
|
||||
|
@ -2427,10 +2427,6 @@ static int mlx4_en_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
/* device doesn't support time stamping */
|
||||
if (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS))
|
||||
return -EINVAL;
|
||||
|
@ -1305,12 +1305,6 @@ int lan743x_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
if (config.flags) {
|
||||
netif_warn(adapter, drv, adapter->netdev,
|
||||
"ignoring hwtstamp_config.flags == 0x%08X, expected 0\n",
|
||||
config.flags);
|
||||
}
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
for (index = 0; index < LAN743X_MAX_TX_CHANNELS;
|
||||
|
@ -1617,10 +1617,6 @@ int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (cfg.flags)
|
||||
return -EINVAL;
|
||||
|
||||
/* Tx type sanity check */
|
||||
switch (cfg.tx_type) {
|
||||
case HWTSTAMP_TX_ON:
|
||||
|
@ -3159,10 +3159,6 @@ static int vxge_hwtstamp_set(struct vxgedev *vdev, void __user *data)
|
||||
if (copy_from_user(&config, data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
/* Transmit HW Timestamp not supported */
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
|
@ -210,9 +210,6 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
if (cfg.flags) /* reserved for future extensions */
|
||||
return -EINVAL;
|
||||
|
||||
/* Get ieee1588's dev information */
|
||||
pdev = adapter->ptp_pdev;
|
||||
|
||||
|
@ -304,11 +304,6 @@ int qede_ptp_hw_ts(struct qede_dev *edev, struct ifreq *ifr)
|
||||
"HWTSTAMP IOCTL: Requested tx_type = %d, requested rx_filters = %d\n",
|
||||
config.tx_type, config.rx_filter);
|
||||
|
||||
if (config.flags) {
|
||||
DP_ERR(edev, "config.flags is reserved for future use\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ptp->hw_ts_ioctl_called = 1;
|
||||
ptp->tx_type = config.tx_type;
|
||||
ptp->rx_filter = config.rx_filter;
|
||||
|
@ -2221,10 +2221,6 @@ static int ravb_hwtstamp_set(struct net_device *ndev, struct ifreq *req)
|
||||
if (copy_from_user(&config, req->ifr_data, sizeof(config)))
|
||||
return -EFAULT;
|
||||
|
||||
/* Reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (config.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
tstamp_tx_ctrl = 0;
|
||||
|
@ -1765,9 +1765,6 @@ static int efx_ptp_ts_init(struct efx_nic *efx, struct hwtstamp_config *init)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (init->flags)
|
||||
return -EINVAL;
|
||||
|
||||
if ((init->tx_type != HWTSTAMP_TX_OFF) &&
|
||||
(init->tx_type != HWTSTAMP_TX_ON))
|
||||
return -ERANGE;
|
||||
|
@ -638,10 +638,6 @@ static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
|
||||
netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
|
||||
__func__, config.flags, config.tx_type, config.rx_filter);
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (config.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (config.tx_type != HWTSTAMP_TX_OFF &&
|
||||
config.tx_type != HWTSTAMP_TX_ON)
|
||||
return -ERANGE;
|
||||
|
@ -626,10 +626,6 @@ static int cpsw_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (cfg.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (cfg.tx_type != HWTSTAMP_TX_OFF && cfg.tx_type != HWTSTAMP_TX_ON)
|
||||
return -ERANGE;
|
||||
|
||||
|
@ -2654,10 +2654,6 @@ static int gbe_hwtstamp_set(struct gbe_intf *gbe_intf, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (cfg.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (cfg.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
gbe_dev->tx_ts_enabled = 0;
|
||||
|
@ -382,9 +382,6 @@ static int hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
if (cfg.flags) /* reserved for future extensions */
|
||||
return -EINVAL;
|
||||
|
||||
ret = ixp46x_ptp_find(&port->timesync_regs, &port->phc_index);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -1235,9 +1235,6 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
if (cfg.flags) /* reserved for future extensions */
|
||||
return -EINVAL;
|
||||
|
||||
if (cfg.tx_type < 0 || cfg.tx_type > HWTSTAMP_TX_ONESTEP_SYNC)
|
||||
return -ERANGE;
|
||||
|
||||
|
@ -1057,9 +1057,6 @@ static int vsc85xx_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
if (cfg.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (cfg.tx_type) {
|
||||
case HWTSTAMP_TX_ONESTEP_SYNC:
|
||||
one_step = true;
|
||||
|
@ -338,10 +338,6 @@ static int ines_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
/* reserved for future extensions */
|
||||
if (cfg.flags)
|
||||
return -EINVAL;
|
||||
|
||||
switch (cfg.tx_type) {
|
||||
case HWTSTAMP_TX_OFF:
|
||||
ts_stat_tx = 0;
|
||||
|
@ -62,7 +62,7 @@ struct so_timestamping {
|
||||
/**
|
||||
* struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter
|
||||
*
|
||||
* @flags: no flags defined right now, must be zero for %SIOCSHWTSTAMP
|
||||
* @flags: one of HWTSTAMP_FLAG_*
|
||||
* @tx_type: one of HWTSTAMP_TX_*
|
||||
* @rx_filter: one of HWTSTAMP_FILTER_*
|
||||
*
|
||||
@ -78,6 +78,20 @@ struct hwtstamp_config {
|
||||
int rx_filter;
|
||||
};
|
||||
|
||||
/* possible values for hwtstamp_config->flags */
|
||||
enum hwtstamp_flags {
|
||||
/*
|
||||
* With this flag, the user could get bond active interface's
|
||||
* PHC index. Note this PHC index is not stable as when there
|
||||
* is a failover, the bond active interface will be changed, so
|
||||
* will be the PHC index.
|
||||
*/
|
||||
HWTSTAMP_FLAG_BONDED_PHC_INDEX = (1<<0),
|
||||
|
||||
HWTSTAMP_FLAG_LAST = HWTSTAMP_FLAG_BONDED_PHC_INDEX,
|
||||
HWTSTAMP_FLAG_MASK = (HWTSTAMP_FLAG_LAST - 1) | HWTSTAMP_FLAG_LAST
|
||||
};
|
||||
|
||||
/* possible values for hwtstamp_config->tx_type */
|
||||
enum hwtstamp_tx_types {
|
||||
/*
|
||||
|
@ -192,7 +192,7 @@ static int net_hwtstamp_validate(struct ifreq *ifr)
|
||||
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
|
||||
return -EFAULT;
|
||||
|
||||
if (cfg.flags) /* reserved for future extensions */
|
||||
if (cfg.flags & ~HWTSTAMP_FLAG_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
tx_type = cfg.tx_type;
|
||||
|
Loading…
x
Reference in New Issue
Block a user