ethtool: extend coalesce setting uAPI with CQE mode
In order to support more coalesce parameters through netlink, add two new parameter kernel_coal and extack for .set_coalesce and .get_coalesce, then some extra info can return to user with the netlink API. Signed-off-by: Yufeng Mo <moyufeng@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: hongrongxuan <hongrongxuan@huawei.com> Conflicts: drivers/net/ethernet/freescale/enetc/enetc_ethtool.c drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c drivers/net/ethernet/huawei/hinic/hinic_ethtool.c drivers/net/ethernet/intel/igc/igc_ethtool.c drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c drivers/net/ethernet/qlogic/qede/qede.h drivers/net/ethernet/qlogic/qede/qede_ethtool.c drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c drivers/net/ethernet/ti/cpsw_new.c drivers/net/ethernet/xilinx/ll_temac_main.c drivers/net/netdevsim/ethtool.c drivers/net/wireless/ath/wil6210/ethtool.c drivers/s390/net/qeth_ethtool.c drivers/staging/qlge/qlge_ethtool.c
This commit is contained in:
parent
69ccb372dc
commit
91dc13667e
|
@ -75,7 +75,9 @@ static void ipoib_get_drvinfo(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int ipoib_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = ipoib_priv(dev);
|
||||
|
||||
|
@ -86,7 +88,9 @@ static int ipoib_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int ipoib_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = ipoib_priv(dev);
|
||||
int ret;
|
||||
|
|
|
@ -301,7 +301,9 @@ static int ena_get_link_ksettings(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int ena_get_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ena_adapter *adapter = netdev_priv(net_dev);
|
||||
struct ena_com_dev *ena_dev = adapter->ena_dev;
|
||||
|
@ -348,7 +350,9 @@ static void ena_update_rx_rings_intr_moderation(struct ena_adapter *adapter)
|
|||
}
|
||||
|
||||
static int ena_set_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ena_adapter *adapter = netdev_priv(net_dev);
|
||||
struct ena_com_dev *ena_dev = adapter->ena_dev;
|
||||
|
|
|
@ -429,7 +429,9 @@ static void xgbe_set_msglevel(struct net_device *netdev, u32 msglevel)
|
|||
}
|
||||
|
||||
static int xgbe_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
|
||||
|
@ -444,7 +446,9 @@ static int xgbe_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int xgbe_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
|
|
|
@ -285,7 +285,9 @@ static int aq_ethtool_set_rxnfc(struct net_device *ndev,
|
|||
}
|
||||
|
||||
static int aq_ethtool_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
||||
struct aq_nic_cfg_s *cfg = aq_nic_get_cfg(aq_nic);
|
||||
|
@ -306,7 +308,9 @@ static int aq_ethtool_get_coalesce(struct net_device *ndev,
|
|||
}
|
||||
|
||||
static int aq_ethtool_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
||||
struct aq_nic_cfg_s *cfg = aq_nic_get_cfg(aq_nic);
|
||||
|
|
|
@ -586,7 +586,9 @@ static void bcm_sysport_set_tx_coalesce(struct bcm_sysport_tx_ring *ring,
|
|||
}
|
||||
|
||||
static int bcm_sysport_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bcm_sysport_priv *priv = netdev_priv(dev);
|
||||
u32 reg;
|
||||
|
@ -606,7 +608,9 @@ static int bcm_sysport_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int bcm_sysport_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bcm_sysport_priv *priv = netdev_priv(dev);
|
||||
struct dim_cq_moder moder;
|
||||
|
|
|
@ -7248,8 +7248,10 @@ bnx2_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
||||
static int bnx2_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2 *bp = netdev_priv(dev);
|
||||
|
||||
|
@ -7270,8 +7272,10 @@ bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
||||
static int bnx2_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2 *bp = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -1884,7 +1884,9 @@ static int bnx2x_set_eeprom(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int bnx2x_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
|
@ -1897,7 +1899,9 @@ static int bnx2x_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int bnx2x_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -600,7 +600,9 @@ static void bcmgenet_set_msglevel(struct net_device *dev, u32 level)
|
|||
}
|
||||
|
||||
static int bcmgenet_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||
struct bcmgenet_rx_ring *ring;
|
||||
|
@ -662,7 +664,9 @@ static void bcmgenet_set_ring_rx_coalesce(struct bcmgenet_rx_ring *ring,
|
|||
}
|
||||
|
||||
static int bcmgenet_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||
unsigned int i;
|
||||
|
|
|
@ -14065,7 +14065,10 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int tg3_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct tg3 *tp = netdev_priv(dev);
|
||||
|
||||
|
@ -14073,7 +14076,10 @@ static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int tg3_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct tg3 *tp = netdev_priv(dev);
|
||||
u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
|
||||
|
|
|
@ -308,8 +308,10 @@ bnad_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wolinfo)
|
|||
wolinfo->wolopts = 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bnad_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
|
||||
static int bnad_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnad *bnad = netdev_priv(netdev);
|
||||
unsigned long flags;
|
||||
|
@ -329,8 +331,10 @@ bnad_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bnad_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
|
||||
static int bnad_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnad *bnad = netdev_priv(netdev);
|
||||
unsigned long flags;
|
||||
|
|
|
@ -2109,7 +2109,9 @@ static int octnet_set_intrmod_cfg(struct lio *lio,
|
|||
}
|
||||
|
||||
static int lio_get_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *intr_coal)
|
||||
struct ethtool_coalesce *intr_coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
struct octeon_device *oct = lio->oct_dev;
|
||||
|
@ -2413,7 +2415,9 @@ oct_cfg_tx_intrcnt(struct lio *lio,
|
|||
}
|
||||
|
||||
static int lio_set_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *intr_coal)
|
||||
struct ethtool_coalesce *intr_coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
int ret;
|
||||
|
|
|
@ -457,7 +457,9 @@ static void nicvf_get_regs(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int nicvf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *cmd)
|
||||
struct ethtool_coalesce *cmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nicvf *nic = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -748,7 +748,9 @@ static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct adapter *adapter = dev->ml_priv;
|
||||
|
||||
|
@ -759,7 +761,9 @@ static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct adapter *adapter = dev->ml_priv;
|
||||
|
||||
|
|
|
@ -1999,7 +1999,9 @@ static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct port_info *pi = netdev_priv(dev);
|
||||
struct adapter *adapter = pi->adapter;
|
||||
|
@ -2020,7 +2022,9 @@ static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct port_info *pi = netdev_priv(dev);
|
||||
struct adapter *adapter = pi->adapter;
|
||||
|
|
|
@ -1077,7 +1077,9 @@ static int set_dbqtimer_tickval(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -1093,7 +1095,9 @@ static int set_coalesce(struct net_device *dev,
|
|||
coalesce->tx_coalesce_usecs);
|
||||
}
|
||||
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct port_info *pi = netdev_priv(dev);
|
||||
const struct adapter *adap = pi->adapter;
|
||||
|
|
|
@ -1650,7 +1650,9 @@ static int cxgb4vf_set_ringparam(struct net_device *dev,
|
|||
* interrupt holdoff timer to be read on all of the device's Queue Sets.
|
||||
*/
|
||||
static int cxgb4vf_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct port_info *pi = netdev_priv(dev);
|
||||
const struct adapter *adapter = pi->adapter;
|
||||
|
@ -1670,7 +1672,9 @@ static int cxgb4vf_get_coalesce(struct net_device *dev,
|
|||
* the interrupt holdoff timer on any of the device's Queue Sets.
|
||||
*/
|
||||
static int cxgb4vf_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct port_info *pi = netdev_priv(dev);
|
||||
struct adapter *adapter = pi->adapter;
|
||||
|
|
|
@ -299,7 +299,9 @@ static void enic_set_msglevel(struct net_device *netdev, u32 value)
|
|||
}
|
||||
|
||||
static int enic_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct enic *enic = netdev_priv(netdev);
|
||||
struct enic_rx_coal *rxcoal = &enic->rx_coalesce_setting;
|
||||
|
@ -363,7 +365,9 @@ static int enic_coalesce_valid(struct enic *enic,
|
|||
}
|
||||
|
||||
static int enic_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct enic *enic = netdev_priv(netdev);
|
||||
u32 tx_coalesce_usecs;
|
||||
|
|
|
@ -2162,7 +2162,9 @@ static int gmac_set_ringparam(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int gmac_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct gemini_ethernet_port *port = netdev_priv(netdev);
|
||||
|
||||
|
@ -2174,7 +2176,9 @@ static int gmac_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int gmac_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct gemini_ethernet_port *port = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -316,7 +316,9 @@ static int be_read_dump_data(struct be_adapter *adapter, u32 dump_len,
|
|||
}
|
||||
|
||||
static int be_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *et)
|
||||
struct ethtool_coalesce *et,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_aic_obj *aic = &adapter->aic_obj[0];
|
||||
|
@ -339,7 +341,9 @@ static int be_get_coalesce(struct net_device *netdev,
|
|||
* eqd cmd is issued in the worker thread.
|
||||
*/
|
||||
static int be_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *et)
|
||||
struct ethtool_coalesce *et,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_aic_obj *aic = &adapter->aic_obj[0];
|
||||
|
|
|
@ -534,7 +534,9 @@ static int dpaa_get_ts_info(struct net_device *net_dev,
|
|||
}
|
||||
|
||||
static int dpaa_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c)
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct qman_portal *portal;
|
||||
u32 period;
|
||||
|
@ -552,7 +554,9 @@ static int dpaa_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int dpaa_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c)
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const cpumask_t *cpus = qman_affine_cpus();
|
||||
bool needs_revert[NR_CPUS] = {false};
|
||||
|
|
|
@ -2566,8 +2566,10 @@ static void fec_enet_itr_coal_set(struct net_device *ndev)
|
|||
}
|
||||
}
|
||||
|
||||
static int
|
||||
fec_enet_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)
|
||||
static int fec_enet_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct fec_enet_private *fep = netdev_priv(ndev);
|
||||
|
||||
|
@ -2583,8 +2585,10 @@ fec_enet_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
fec_enet_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)
|
||||
static int fec_enet_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct fec_enet_private *fep = netdev_priv(ndev);
|
||||
struct device *dev = &fep->pdev->dev;
|
||||
|
@ -2636,7 +2640,7 @@ static void fec_enet_itr_coal_init(struct net_device *ndev)
|
|||
ec.tx_coalesce_usecs = FEC_ITR_ICTT_DEFAULT;
|
||||
ec.tx_max_coalesced_frames = FEC_ITR_ICFT_DEFAULT;
|
||||
|
||||
fec_enet_set_coalesce(ndev, &ec);
|
||||
fec_enet_set_coalesce(ndev, &ec, NULL, NULL);
|
||||
}
|
||||
|
||||
static int fec_enet_get_tunable(struct net_device *netdev,
|
||||
|
|
|
@ -247,7 +247,9 @@ static unsigned int gfar_ticks2usecs(struct gfar_private *priv,
|
|||
/* Get the coalescing parameters, and put them in the cvals
|
||||
* structure. */
|
||||
static int gfar_gcoalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *cvals)
|
||||
struct ethtool_coalesce *cvals,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
struct gfar_priv_rx_q *rx_queue = NULL;
|
||||
|
@ -313,7 +315,9 @@ static int gfar_gcoalesce(struct net_device *dev,
|
|||
* in order for coalescing to be active
|
||||
*/
|
||||
static int gfar_scoalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *cvals)
|
||||
struct ethtool_coalesce *cvals,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
int i, err = 0;
|
||||
|
|
|
@ -796,7 +796,9 @@ static void hip04_tx_timeout_task(struct work_struct *work)
|
|||
}
|
||||
|
||||
static int hip04_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hip04_priv *priv = netdev_priv(netdev);
|
||||
|
||||
|
@ -807,7 +809,9 @@ static int hip04_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int hip04_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hip04_priv *priv = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -731,11 +731,15 @@ static int hns_set_pauseparam(struct net_device *net_dev,
|
|||
* hns_get_coalesce - get coalesce info.
|
||||
* @dev: net device
|
||||
* @ec: coalesce info.
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Return 0 on success, negative on failure.
|
||||
*/
|
||||
static int hns_get_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hns_nic_priv *priv = netdev_priv(net_dev);
|
||||
struct hnae_ae_ops *ops;
|
||||
|
@ -775,11 +779,15 @@ static int hns_get_coalesce(struct net_device *net_dev,
|
|||
* hns_set_coalesce - set coalesce info.
|
||||
* @dev: net device
|
||||
* @ec: coalesce info.
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Return 0 on success, negative on failure.
|
||||
*/
|
||||
static int hns_set_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hns_nic_priv *priv = netdev_priv(net_dev);
|
||||
struct hnae_ae_ops *ops;
|
||||
|
|
|
@ -1119,7 +1119,9 @@ static int hns3_get_coalesce_per_queue(struct net_device *netdev, u32 queue,
|
|||
}
|
||||
|
||||
static int hns3_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *cmd)
|
||||
struct ethtool_coalesce *cmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return hns3_get_coalesce_per_queue(netdev, 0, cmd);
|
||||
}
|
||||
|
@ -1248,7 +1250,9 @@ static void hns3_set_coalesce_per_queue(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int hns3_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *cmd)
|
||||
struct ethtool_coalesce *cmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct hnae3_handle *h = hns3_get_handle(netdev);
|
||||
u16 queue_num = h->kinfo.num_tqps;
|
||||
|
|
|
@ -1741,7 +1741,9 @@ static int e1000_set_phys_id(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int e1000_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -1757,7 +1759,9 @@ static int e1000_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int e1000_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
|
|
@ -1979,7 +1979,9 @@ static int e1000_set_phys_id(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int e1000_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -1992,7 +1994,9 @@ static int e1000_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int e1000_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -633,7 +633,9 @@ clear_reset:
|
|||
}
|
||||
|
||||
static int fm10k_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||
|
||||
|
@ -647,7 +649,9 @@ static int fm10k_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int fm10k_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||
u16 tx_itr, rx_itr;
|
||||
|
|
|
@ -2823,13 +2823,17 @@ static int __i40e_get_coalesce(struct net_device *netdev,
|
|||
* i40e_get_coalesce - get a netdev's coalesce settings
|
||||
* @netdev: the netdev to check
|
||||
* @ec: ethtool coalesce data structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Gets the coalesce settings for a particular netdev. Note that if user has
|
||||
* modified per-queue settings, this only guarantees to represent queue 0. See
|
||||
* __i40e_get_coalesce for more details.
|
||||
**/
|
||||
static int i40e_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __i40e_get_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
@ -2997,11 +3001,15 @@ static int __i40e_set_coalesce(struct net_device *netdev,
|
|||
* i40e_set_coalesce - set coalesce settings for every queue on the netdev
|
||||
* @netdev: the netdev to change
|
||||
* @ec: ethtool coalesce settings
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* This will set each queue to the same coalesce settings.
|
||||
**/
|
||||
static int i40e_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __i40e_set_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
|
|
@ -706,6 +706,8 @@ static int __iavf_get_coalesce(struct net_device *netdev,
|
|||
* iavf_get_coalesce - Get interrupt coalescing settings
|
||||
* @netdev: network interface device structure
|
||||
* @ec: ethtool coalesce structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Returns current coalescing settings. This is referred to elsewhere in the
|
||||
* driver as Interrupt Throttle Rate, as this is how the hardware describes
|
||||
|
@ -713,7 +715,9 @@ static int __iavf_get_coalesce(struct net_device *netdev,
|
|||
* only represents the settings of queue 0.
|
||||
**/
|
||||
static int iavf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __iavf_get_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
@ -847,11 +851,15 @@ static int __iavf_set_coalesce(struct net_device *netdev,
|
|||
* iavf_set_coalesce - Set interrupt coalescing settings
|
||||
* @netdev: network interface device structure
|
||||
* @ec: ethtool coalesce structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Change current coalescing settings for every queue.
|
||||
**/
|
||||
static int iavf_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __iavf_set_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
|
|
@ -3229,8 +3229,10 @@ __ice_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ice_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
||||
static int ice_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __ice_get_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
@ -3423,8 +3425,10 @@ set_complete:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ice_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
||||
static int ice_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __ice_set_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
|
|
@ -2173,7 +2173,9 @@ static int igb_set_phys_id(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int igb_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igb_adapter *adapter = netdev_priv(netdev);
|
||||
int i;
|
||||
|
@ -2250,7 +2252,9 @@ static int igb_set_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int igb_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igb_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -316,7 +316,9 @@ static int igbvf_set_wol(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int igbvf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igbvf_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -329,7 +331,9 @@ static int igbvf_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int igbvf_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igbvf_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
|
|
@ -777,7 +777,9 @@ static void igc_get_ethtool_stats(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int igc_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igc_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -797,7 +799,9 @@ static int igc_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int igc_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igc_adapter *adapter = netdev_priv(netdev);
|
||||
int i;
|
||||
|
|
|
@ -2271,7 +2271,9 @@ static int ixgbe_set_phys_id(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int ixgbe_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -2325,7 +2327,9 @@ static bool ixgbe_update_rsc(struct ixgbe_adapter *adapter)
|
|||
}
|
||||
|
||||
static int ixgbe_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgbe_q_vector *q_vector;
|
||||
|
|
|
@ -789,7 +789,9 @@ static int ixgbevf_nway_reset(struct net_device *netdev)
|
|||
}
|
||||
|
||||
static int ixgbevf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -813,7 +815,9 @@ static int ixgbevf_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int ixgbevf_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgbevf_q_vector *q_vector;
|
||||
|
|
|
@ -2412,8 +2412,10 @@ jme_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p)
|
|||
mdio_memcpy(jme, p32, JME_PHY_REG_NR);
|
||||
}
|
||||
|
||||
static int
|
||||
jme_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd)
|
||||
static int jme_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct jme_adapter *jme = netdev_priv(netdev);
|
||||
|
||||
|
@ -2449,8 +2451,10 @@ jme_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
jme_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd)
|
||||
static int jme_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct jme_adapter *jme = netdev_priv(netdev);
|
||||
struct dynpcc_info *dpi = &(jme->dpi);
|
||||
|
|
|
@ -1615,8 +1615,10 @@ static void mv643xx_eth_get_drvinfo(struct net_device *dev,
|
|||
strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
static int
|
||||
mv643xx_eth_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int mv643xx_eth_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mv643xx_eth_private *mp = netdev_priv(dev);
|
||||
|
||||
|
@ -1626,8 +1628,10 @@ mv643xx_eth_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
mv643xx_eth_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int mv643xx_eth_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mv643xx_eth_private *mp = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -4035,8 +4035,11 @@ static int mvneta_ethtool_nway_reset(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* Set interrupt coalescing for ethtools */
|
||||
static int mvneta_ethtool_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c)
|
||||
static int
|
||||
mvneta_ethtool_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mvneta_port *pp = netdev_priv(dev);
|
||||
int queue;
|
||||
|
@ -4059,8 +4062,11 @@ static int mvneta_ethtool_set_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
/* get coalescing for ethtools */
|
||||
static int mvneta_ethtool_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c)
|
||||
static int
|
||||
mvneta_ethtool_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mvneta_port *pp = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -4038,8 +4038,11 @@ static int mvpp2_ethtool_nway_reset(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* Set interrupt coalescing for ethtools */
|
||||
static int mvpp2_ethtool_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c)
|
||||
static int
|
||||
mvpp2_ethtool_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mvpp2_port *port = netdev_priv(dev);
|
||||
int queue;
|
||||
|
@ -4071,8 +4074,11 @@ static int mvpp2_ethtool_set_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
/* get coalescing for ethtools */
|
||||
static int mvpp2_ethtool_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c)
|
||||
static int
|
||||
mvpp2_ethtool_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mvpp2_port *port = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -615,7 +615,9 @@ static inline u32 skge_usecs2clk(const struct skge_hw *hw, u32 usec)
|
|||
}
|
||||
|
||||
static int skge_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct skge_port *skge = netdev_priv(dev);
|
||||
struct skge_hw *hw = skge->hw;
|
||||
|
@ -639,7 +641,9 @@ static int skge_get_coalesce(struct net_device *dev,
|
|||
|
||||
/* Note: interrupt timer is per board, but can turn on/off per port */
|
||||
static int skge_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct skge_port *skge = netdev_priv(dev);
|
||||
struct skge_hw *hw = skge->hw;
|
||||
|
|
|
@ -4050,7 +4050,9 @@ static int sky2_set_pauseparam(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int sky2_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct sky2_port *sky2 = netdev_priv(dev);
|
||||
struct sky2_hw *hw = sky2->hw;
|
||||
|
@ -4085,7 +4087,9 @@ static int sky2_get_coalesce(struct net_device *dev,
|
|||
|
||||
/* Note: this affect both ports */
|
||||
static int sky2_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct sky2_port *sky2 = netdev_priv(dev);
|
||||
struct sky2_hw *hw = sky2->hw;
|
||||
|
|
|
@ -998,7 +998,9 @@ mlx4_en_set_link_ksettings(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int mlx4_en_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||
|
||||
|
@ -1020,7 +1022,9 @@ static int mlx4_en_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int mlx4_en_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -500,7 +500,9 @@ int mlx5e_ethtool_get_coalesce(struct mlx5e_priv *priv,
|
|||
}
|
||||
|
||||
static int mlx5e_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(netdev);
|
||||
|
||||
|
@ -595,7 +597,9 @@ out:
|
|||
}
|
||||
|
||||
static int mlx5e_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -295,7 +295,9 @@ static int mlx5e_rep_set_channels(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int mlx5e_rep_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(netdev);
|
||||
|
||||
|
@ -303,7 +305,9 @@ static int mlx5e_rep_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int mlx5e_rep_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -99,7 +99,9 @@ static void mlx5i_get_channels(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int mlx5i_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5e_priv *priv = mlx5i_epriv(netdev);
|
||||
|
||||
|
@ -107,7 +109,9 @@ static int mlx5i_set_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int mlx5i_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5e_priv *priv = mlx5i_epriv(netdev);
|
||||
|
||||
|
|
|
@ -1663,8 +1663,10 @@ myri10ge_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *info)
|
|||
strlcpy(info->bus_info, pci_name(mgp->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static int
|
||||
myri10ge_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coal)
|
||||
static int myri10ge_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct myri10ge_priv *mgp = netdev_priv(netdev);
|
||||
|
||||
|
@ -1672,8 +1674,10 @@ myri10ge_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coal)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
myri10ge_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *coal)
|
||||
static int myri10ge_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct myri10ge_priv *mgp = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -991,7 +991,9 @@ static void nfp_net_get_regs(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int nfp_net_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nfp_net *nn = netdev_priv(netdev);
|
||||
|
||||
|
@ -1245,7 +1247,9 @@ exit_close_nsp:
|
|||
}
|
||||
|
||||
static int nfp_net_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nfp_net *nn = netdev_priv(netdev);
|
||||
unsigned int factor;
|
||||
|
|
|
@ -995,8 +995,11 @@ static void nixge_ethtools_get_drvinfo(struct net_device *ndev,
|
|||
strlcpy(ed->bus_info, "platform", sizeof(ed->bus_info));
|
||||
}
|
||||
|
||||
static int nixge_ethtools_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce)
|
||||
static int
|
||||
nixge_ethtools_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nixge_priv *priv = netdev_priv(ndev);
|
||||
u32 regval = 0;
|
||||
|
@ -1010,8 +1013,11 @@ static int nixge_ethtools_get_coalesce(struct net_device *ndev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int nixge_ethtools_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce)
|
||||
static int
|
||||
nixge_ethtools_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nixge_priv *priv = netdev_priv(ndev);
|
||||
|
||||
|
|
|
@ -362,7 +362,9 @@ static int ionic_set_pauseparam(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int ionic_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ionic_lif *lif = netdev_priv(netdev);
|
||||
|
||||
|
@ -374,7 +376,9 @@ static int ionic_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int ionic_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ionic_lif *lif = netdev_priv(netdev);
|
||||
struct ionic_identity *ident;
|
||||
|
|
|
@ -731,7 +731,9 @@ netxen_nic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
|||
* firmware coalescing to default.
|
||||
*/
|
||||
static int netxen_set_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ethcoal)
|
||||
struct ethtool_coalesce *ethcoal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct netxen_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -792,7 +794,9 @@ static int netxen_set_intr_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int netxen_get_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ethcoal)
|
||||
struct ethtool_coalesce *ethcoal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct netxen_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -807,7 +807,9 @@ static int qede_flash_device(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int qede_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
void *rx_handle = NULL, *tx_handle = NULL;
|
||||
struct qede_dev *edev = netdev_priv(dev);
|
||||
|
@ -867,7 +869,9 @@ out:
|
|||
}
|
||||
|
||||
static int qede_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct qede_dev *edev = netdev_priv(dev);
|
||||
struct qede_fastpath *fp;
|
||||
|
|
|
@ -1528,7 +1528,9 @@ qlcnic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
|||
* firmware coalescing to default.
|
||||
*/
|
||||
static int qlcnic_set_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ethcoal)
|
||||
struct ethtool_coalesce *ethcoal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
||||
int err;
|
||||
|
@ -1569,7 +1571,9 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int qlcnic_get_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ethcoal)
|
||||
struct ethtool_coalesce *ethcoal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
|
|
@ -1890,7 +1890,10 @@ static const struct rtl_coalesce_info *rtl_coalesce_info(struct net_device *dev)
|
|||
return ERR_PTR(-ELNRNG);
|
||||
}
|
||||
|
||||
static int rtl_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int rtl_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct rtl8169_private *tp = netdev_priv(dev);
|
||||
const struct rtl_coalesce_info *ci;
|
||||
|
@ -1962,7 +1965,10 @@ static const struct rtl_coalesce_scale *rtl_coalesce_choose_scale(
|
|||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
static int rtl_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int rtl_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct rtl8169_private *tp = netdev_priv(dev);
|
||||
const struct rtl_coalesce_scale *scale;
|
||||
|
|
|
@ -274,7 +274,9 @@ static u32 sxgbe_usec2riwt(u32 usec, struct sxgbe_priv_data *priv)
|
|||
}
|
||||
|
||||
static int sxgbe_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct sxgbe_priv_data *priv = netdev_priv(dev);
|
||||
|
||||
|
@ -285,7 +287,9 @@ static int sxgbe_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int sxgbe_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct sxgbe_priv_data *priv = netdev_priv(dev);
|
||||
unsigned int rx_riwt;
|
||||
|
|
|
@ -593,7 +593,9 @@ static int efx_ethtool_nway_reset(struct net_device *net_dev)
|
|||
*/
|
||||
|
||||
static int efx_ethtool_get_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct efx_nic *efx = netdev_priv(net_dev);
|
||||
unsigned int tx_usecs, rx_usecs;
|
||||
|
@ -611,7 +613,9 @@ static int efx_ethtool_get_coalesce(struct net_device *net_dev,
|
|||
}
|
||||
|
||||
static int efx_ethtool_set_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct efx_nic *efx = netdev_priv(net_dev);
|
||||
struct efx_channel *channel;
|
||||
|
|
|
@ -577,7 +577,9 @@ static int ef4_ethtool_nway_reset(struct net_device *net_dev)
|
|||
*/
|
||||
|
||||
static int ef4_ethtool_get_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ef4_nic *efx = netdev_priv(net_dev);
|
||||
unsigned int tx_usecs, rx_usecs;
|
||||
|
@ -595,7 +597,9 @@ static int ef4_ethtool_get_coalesce(struct net_device *net_dev,
|
|||
}
|
||||
|
||||
static int ef4_ethtool_set_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ef4_nic *efx = netdev_priv(net_dev);
|
||||
struct ef4_channel *channel;
|
||||
|
|
|
@ -531,7 +531,9 @@ static void netsec_et_get_drvinfo(struct net_device *net_device,
|
|||
}
|
||||
|
||||
static int netsec_et_get_coalesce(struct net_device *net_device,
|
||||
struct ethtool_coalesce *et_coalesce)
|
||||
struct ethtool_coalesce *et_coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct netsec_priv *priv = netdev_priv(net_device);
|
||||
|
||||
|
@ -541,7 +543,9 @@ static int netsec_et_get_coalesce(struct net_device *net_device,
|
|||
}
|
||||
|
||||
static int netsec_et_set_coalesce(struct net_device *net_device,
|
||||
struct ethtool_coalesce *et_coalesce)
|
||||
struct ethtool_coalesce *et_coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct netsec_priv *priv = netdev_priv(net_device);
|
||||
|
||||
|
@ -1525,7 +1529,7 @@ static int netsec_start_gmac(struct netsec_priv *priv)
|
|||
netsec_write(priv, NETSEC_REG_NRM_RX_INTEN_CLR, ~0);
|
||||
netsec_write(priv, NETSEC_REG_NRM_TX_INTEN_CLR, ~0);
|
||||
|
||||
netsec_et_set_coalesce(priv->ndev, &priv->et_coalesce);
|
||||
netsec_et_set_coalesce(priv->ndev, &priv->et_coalesce, NULL, NULL);
|
||||
|
||||
if (netsec_mac_write(priv, GMAC_REG_OMR, value))
|
||||
return -ETIMEDOUT;
|
||||
|
|
|
@ -718,7 +718,9 @@ static u32 stmmac_riwt2usec(u32 riwt, struct stmmac_priv *priv)
|
|||
}
|
||||
|
||||
static int stmmac_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
|
||||
|
@ -734,7 +736,9 @@ static int stmmac_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int stmmac_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
u32 rx_cnt = priv->plat->rx_queues_to_use;
|
||||
|
|
|
@ -146,8 +146,11 @@ static void xlgmac_ethtool_get_channels(struct net_device *netdev,
|
|||
channel->tx_count = pdata->tx_q_count;
|
||||
}
|
||||
|
||||
static int xlgmac_ethtool_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
static int
|
||||
xlgmac_ethtool_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct xlgmac_pdata *pdata = netdev_priv(netdev);
|
||||
|
||||
|
@ -159,8 +162,11 @@ static int xlgmac_ethtool_get_coalesce(struct net_device *netdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int xlgmac_ethtool_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
static int
|
||||
xlgmac_ethtool_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct xlgmac_pdata *pdata = netdev_priv(netdev);
|
||||
struct xlgmac_hw_ops *hw_ops = &pdata->hw_ops;
|
||||
|
|
|
@ -2167,8 +2167,10 @@ bdx_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
|
|||
* @netdev
|
||||
* @ecoal
|
||||
*/
|
||||
static int
|
||||
bdx_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecoal)
|
||||
static int bdx_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecoal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
u32 rdintcm;
|
||||
u32 tdintcm;
|
||||
|
@ -2196,8 +2198,10 @@ bdx_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecoal)
|
|||
* @netdev
|
||||
* @ecoal
|
||||
*/
|
||||
static int
|
||||
bdx_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecoal)
|
||||
static int bdx_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecoal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
u32 rdintcm;
|
||||
u32 tdintcm;
|
||||
|
|
|
@ -1742,7 +1742,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
|
|||
struct ethtool_coalesce coal;
|
||||
|
||||
coal.rx_coalesce_usecs = cpsw->coal_intvl;
|
||||
cpsw_set_coalesce(ndev, &coal);
|
||||
cpsw_set_coalesce(ndev, &coal, NULL, NULL);
|
||||
}
|
||||
|
||||
cpdma_ctlr_start(cpsw->dma);
|
||||
|
|
|
@ -152,7 +152,9 @@ void cpsw_set_msglevel(struct net_device *ndev, u32 value)
|
|||
priv->msg_enable = value;
|
||||
}
|
||||
|
||||
int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal)
|
||||
int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
|
||||
|
||||
|
@ -160,7 +162,9 @@ int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal)
|
||||
int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct cpsw_priv *priv = netdev_priv(ndev);
|
||||
u32 int_ctrl;
|
||||
|
|
|
@ -403,8 +403,12 @@ void cpsw_destroy_xdp_rxqs(struct cpsw_common *cpsw);
|
|||
/* ethtool */
|
||||
u32 cpsw_get_msglevel(struct net_device *ndev);
|
||||
void cpsw_set_msglevel(struct net_device *ndev, u32 value);
|
||||
int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal);
|
||||
int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal);
|
||||
int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack);
|
||||
int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack);
|
||||
int cpsw_get_sset_count(struct net_device *ndev, int sset);
|
||||
void cpsw_get_strings(struct net_device *ndev, u32 stringset, u8 *data);
|
||||
void cpsw_get_ethtool_stats(struct net_device *ndev,
|
||||
|
|
|
@ -383,12 +383,16 @@ static void emac_get_drvinfo(struct net_device *ndev,
|
|||
* emac_get_coalesce - Get interrupt coalesce settings for this device
|
||||
* @ndev : The DaVinci EMAC network adapter
|
||||
* @coal : ethtool coalesce settings structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Fetch the current interrupt coalesce settings
|
||||
*
|
||||
*/
|
||||
static int emac_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct emac_priv *priv = netdev_priv(ndev);
|
||||
|
||||
|
@ -401,12 +405,16 @@ static int emac_get_coalesce(struct net_device *ndev,
|
|||
* emac_set_coalesce - Set interrupt coalesce settings for this device
|
||||
* @ndev : The DaVinci EMAC network adapter
|
||||
* @coal : ethtool coalesce settings structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Set interrupt coalesce parameters
|
||||
*
|
||||
*/
|
||||
static int emac_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct emac_priv *priv = netdev_priv(ndev);
|
||||
u32 int_ctrl, num_interrupts = 0;
|
||||
|
@ -1472,7 +1480,7 @@ static int emac_dev_open(struct net_device *ndev)
|
|||
struct ethtool_coalesce coal;
|
||||
|
||||
coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
|
||||
emac_set_coalesce(ndev, &coal);
|
||||
emac_set_coalesce(ndev, &coal, NULL, NULL);
|
||||
}
|
||||
|
||||
cpdma_ctlr_start(priv->dma);
|
||||
|
|
|
@ -3504,7 +3504,9 @@ static void set_pending_timer_val(int *val, u32 us)
|
|||
|
||||
|
||||
static int velocity_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct velocity_info *vptr = netdev_priv(dev);
|
||||
|
||||
|
@ -3518,7 +3520,9 @@ static int velocity_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int velocity_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct velocity_info *vptr = netdev_priv(dev);
|
||||
int max_us = 0x3f * 64;
|
||||
|
|
|
@ -1279,6 +1279,8 @@ axienet_ethtools_set_pauseparam(struct net_device *ndev,
|
|||
* axienet_ethtools_get_coalesce - Get DMA interrupt coalescing count.
|
||||
* @ndev: Pointer to net_device structure
|
||||
* @ecoalesce: Pointer to ethtool_coalesce structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* This implements ethtool command for getting the DMA interrupt coalescing
|
||||
* count on Tx and Rx paths. Issue "ethtool -c ethX" under linux prompt to
|
||||
|
@ -1286,8 +1288,11 @@ axienet_ethtools_set_pauseparam(struct net_device *ndev,
|
|||
*
|
||||
* Return: 0 always
|
||||
*/
|
||||
static int axienet_ethtools_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce)
|
||||
static int
|
||||
axienet_ethtools_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
u32 regval = 0;
|
||||
struct axienet_local *lp = netdev_priv(ndev);
|
||||
|
@ -1304,6 +1309,8 @@ static int axienet_ethtools_get_coalesce(struct net_device *ndev,
|
|||
* axienet_ethtools_set_coalesce - Set DMA interrupt coalescing count.
|
||||
* @ndev: Pointer to net_device structure
|
||||
* @ecoalesce: Pointer to ethtool_coalesce structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* This implements ethtool command for setting the DMA interrupt coalescing
|
||||
* count on Tx and Rx paths. Issue "ethtool -C ethX rx-frames 5" under linux
|
||||
|
@ -1311,8 +1318,11 @@ static int axienet_ethtools_get_coalesce(struct net_device *ndev,
|
|||
*
|
||||
* Return: 0, on success, Non-zero error value on failure.
|
||||
*/
|
||||
static int axienet_ethtools_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce)
|
||||
static int
|
||||
axienet_ethtools_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *ecoalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct axienet_local *lp = netdev_priv(ndev);
|
||||
|
||||
|
|
|
@ -3693,7 +3693,9 @@ static void tun_set_msglevel(struct net_device *dev, u32 value)
|
|||
}
|
||||
|
||||
static int tun_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct tun_struct *tun = netdev_priv(dev);
|
||||
|
||||
|
@ -3703,7 +3705,9 @@ static int tun_get_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int tun_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct tun_struct *tun = netdev_priv(dev);
|
||||
|
||||
|
|
|
@ -5199,7 +5199,9 @@ out:
|
|||
}
|
||||
|
||||
static int rtl8152_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct r8152 *tp = netdev_priv(netdev);
|
||||
|
||||
|
@ -5218,7 +5220,9 @@ static int rtl8152_get_coalesce(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static int rtl8152_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct r8152 *tp = netdev_priv(netdev);
|
||||
int ret;
|
||||
|
|
|
@ -2352,7 +2352,9 @@ static int virtnet_get_link_ksettings(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int virtnet_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ethtool_coalesce ec_default = {
|
||||
.cmd = ETHTOOL_SCOALESCE,
|
||||
|
@ -2382,7 +2384,9 @@ static int virtnet_set_coalesce(struct net_device *dev,
|
|||
}
|
||||
|
||||
static int virtnet_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ethtool_coalesce ec_default = {
|
||||
.cmd = ETHTOOL_GCOALESCE,
|
||||
|
|
|
@ -738,8 +738,10 @@ vmxnet3_set_rss(struct net_device *netdev, const u32 *p, const u8 *key,
|
|||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
vmxnet3_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
||||
static int vmxnet3_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -773,8 +775,10 @@ vmxnet3_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
vmxnet3_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
||||
static int vmxnet3_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
|
||||
struct Vmxnet3_DriverShared *shared = adapter->shared;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include "wil6210.h"
|
||||
|
||||
<<<<<<< HEAD
|
||||
static int wil_ethtoolops_begin(struct net_device *ndev)
|
||||
{
|
||||
struct wil6210_priv *wil = ndev_to_wil(ndev);
|
||||
|
@ -43,7 +44,8 @@ static void wil_ethtoolops_complete(struct net_device *ndev)
|
|||
}
|
||||
|
||||
static int wil_ethtoolops_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *cp)
|
||||
struct ethtool_coalesce *cp,
|
||||
struct kernel_ethtool_coalesce *kernel_coal, struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct wil6210_priv *wil = ndev_to_wil(ndev);
|
||||
u32 tx_itr_en, tx_itr_val = 0;
|
||||
|
@ -71,8 +73,11 @@ static int wil_ethtoolops_get_coalesce(struct net_device *ndev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int wil_ethtoolops_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *cp)
|
||||
static int
|
||||
wil_ethtoolops_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *cp,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct wil6210_priv *wil = ndev_to_wil(ndev);
|
||||
struct wireless_dev *wdev = ndev->ieee80211_ptr;
|
||||
|
|
|
@ -618,7 +618,10 @@ static void ql_get_regs(struct net_device *ndev,
|
|||
regs->len = sizeof(struct ql_reg_dump);
|
||||
}
|
||||
|
||||
static int ql_get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int ql_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ql_adapter *qdev = netdev_priv(dev);
|
||||
|
||||
|
@ -641,7 +644,10 @@ static int ql_get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ql_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *c)
|
||||
static int ql_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ql_adapter *qdev = netdev_priv(ndev);
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include <linux/bitmap.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <uapi/linux/ethtool.h>
|
||||
#include <linux/kabi.h>
|
||||
|
||||
|
@ -434,8 +435,14 @@ struct ethtool_ops {
|
|||
struct ethtool_eeprom *, u8 *);
|
||||
int (*set_eeprom)(struct net_device *,
|
||||
struct ethtool_eeprom *, u8 *);
|
||||
int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
|
||||
int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
|
||||
int (*get_coalesce)(struct net_device *,
|
||||
struct ethtool_coalesce *,
|
||||
struct kernel_ethtool_coalesce *,
|
||||
struct netlink_ext_ack *);
|
||||
int (*set_coalesce)(struct net_device *,
|
||||
struct ethtool_coalesce *,
|
||||
struct kernel_ethtool_coalesce *,
|
||||
struct netlink_ext_ack *);
|
||||
void (*get_ringparam)(struct net_device *,
|
||||
struct ethtool_ringparam *);
|
||||
int (*set_ringparam)(struct net_device *,
|
||||
|
|
|
@ -85,6 +85,7 @@ static int coalesce_prepare_data(const struct ethnl_req_info *req_base,
|
|||
struct genl_info *info)
|
||||
{
|
||||
struct coalesce_reply_data *data = COALESCE_REPDATA(reply_base);
|
||||
struct netlink_ext_ack *extack = info ? info->extack : NULL;
|
||||
struct net_device *dev = reply_base->dev;
|
||||
int ret;
|
||||
|
||||
|
@ -94,7 +95,8 @@ static int coalesce_prepare_data(const struct ethnl_req_info *req_base,
|
|||
ret = ethnl_ops_begin(dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = dev->ethtool_ops->get_coalesce(dev, &data->coalesce);
|
||||
ret = dev->ethtool_ops->get_coalesce(dev, &data->coalesce,
|
||||
&data->kernel_coalesce, extack);
|
||||
ethnl_ops_complete(dev);
|
||||
|
||||
return ret;
|
||||
|
@ -297,7 +299,8 @@ int ethnl_set_coalesce(struct sk_buff *skb, struct genl_info *info)
|
|||
ret = ethnl_ops_begin(dev);
|
||||
if (ret < 0)
|
||||
goto out_rtnl;
|
||||
ret = ops->get_coalesce(dev, &coalesce);
|
||||
ret = ops->get_coalesce(dev, &coalesce, &kernel_coalesce,
|
||||
info->extack);
|
||||
if (ret < 0)
|
||||
goto out_ops;
|
||||
|
||||
|
@ -353,7 +356,8 @@ int ethnl_set_coalesce(struct sk_buff *skb, struct genl_info *info)
|
|||
if (!mod)
|
||||
goto out_ops;
|
||||
|
||||
ret = dev->ethtool_ops->set_coalesce(dev, &coalesce);
|
||||
ret = dev->ethtool_ops->set_coalesce(dev, &coalesce, &kernel_coalesce,
|
||||
info->extack);
|
||||
if (ret < 0)
|
||||
goto out_ops;
|
||||
ethtool_notify(dev, ETHTOOL_MSG_COALESCE_NTF, NULL);
|
||||
|
|
|
@ -1472,12 +1472,14 @@ static noinline_for_stack int ethtool_get_coalesce(struct net_device *dev,
|
|||
void __user *useraddr)
|
||||
{
|
||||
struct ethtool_coalesce coalesce = { .cmd = ETHTOOL_GCOALESCE };
|
||||
struct kernel_ethtool_coalesce kernel_coalesce = {};
|
||||
int ret;
|
||||
|
||||
if (!dev->ethtool_ops->get_coalesce)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ret = dev->ethtool_ops->get_coalesce(dev, &coalesce);
|
||||
ret = dev->ethtool_ops->get_coalesce(dev, &coalesce, &kernel_coalesce,
|
||||
NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -1547,19 +1549,26 @@ ethtool_set_coalesce_supported(struct net_device *dev,
|
|||
static noinline_for_stack int ethtool_set_coalesce(struct net_device *dev,
|
||||
void __user *useraddr)
|
||||
{
|
||||
struct kernel_ethtool_coalesce kernel_coalesce = {};
|
||||
struct ethtool_coalesce coalesce;
|
||||
int ret;
|
||||
|
||||
if (!dev->ethtool_ops->set_coalesce)
|
||||
if (!dev->ethtool_ops->set_coalesce && !dev->ethtool_ops->get_coalesce)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ret = dev->ethtool_ops->get_coalesce(dev, &coalesce, &kernel_coalesce,
|
||||
NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (copy_from_user(&coalesce, useraddr, sizeof(coalesce)))
|
||||
return -EFAULT;
|
||||
|
||||
if (!ethtool_set_coalesce_supported(dev, &coalesce))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ret = dev->ethtool_ops->set_coalesce(dev, &coalesce);
|
||||
ret = dev->ethtool_ops->set_coalesce(dev, &coalesce, &kernel_coalesce,
|
||||
NULL);
|
||||
if (!ret)
|
||||
ethtool_notify(dev, ETHTOOL_MSG_COALESCE_NTF, NULL);
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue