Commit 6460d948f3ebf7d5040328a60a0ab7221f69945b

Authored by Michael Chan
Committed by David S. Miller
1 parent febca281f6

[NET]: Add ethtool support for NETIF_F_IPV6_CSUM devices.

Add ethtool utility function to set or clear IPV6_CSUM feature flag.
Modify tg3.c and bnx2.c to use this function when doing ethtool -K
to change tx checksum.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 4 changed files with 15 additions and 2 deletions Side-by-side Diff

... ... @@ -6218,7 +6218,7 @@
6218 6218 struct bnx2 *bp = netdev_priv(dev);
6219 6219  
6220 6220 if (CHIP_NUM(bp) == CHIP_NUM_5709)
6221   - return (ethtool_op_set_tx_hw_csum(dev, data));
  6221 + return (ethtool_op_set_tx_ipv6_csum(dev, data));
6222 6222 else
6223 6223 return (ethtool_op_set_tx_csum(dev, data));
6224 6224 }
... ... @@ -8318,7 +8318,7 @@
8318 8318  
8319 8319 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8320 8320 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8321   - ethtool_op_set_tx_hw_csum(dev, data);
  8321 + ethtool_op_set_tx_ipv6_csum(dev, data);
8322 8322 else
8323 8323 ethtool_op_set_tx_csum(dev, data);
8324 8324  
include/linux/ethtool.h
... ... @@ -265,6 +265,7 @@
265 265 u32 ethtool_op_get_tx_csum(struct net_device *dev);
266 266 int ethtool_op_set_tx_csum(struct net_device *dev, u32 data);
267 267 int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data);
  268 +int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data);
268 269 u32 ethtool_op_get_sg(struct net_device *dev);
269 270 int ethtool_op_set_sg(struct net_device *dev, u32 data);
270 271 u32 ethtool_op_get_tso(struct net_device *dev);
... ... @@ -52,6 +52,17 @@
52 52  
53 53 return 0;
54 54 }
  55 +
  56 +int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data)
  57 +{
  58 + if (data)
  59 + dev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
  60 + else
  61 + dev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM);
  62 +
  63 + return 0;
  64 +}
  65 +
55 66 u32 ethtool_op_get_sg(struct net_device *dev)
56 67 {
57 68 return (dev->features & NETIF_F_SG) != 0;
... ... @@ -980,6 +991,7 @@
980 991 EXPORT_SYMBOL(ethtool_op_set_tso);
981 992 EXPORT_SYMBOL(ethtool_op_set_tx_csum);
982 993 EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum);
  994 +EXPORT_SYMBOL(ethtool_op_set_tx_ipv6_csum);
983 995 EXPORT_SYMBOL(ethtool_op_set_ufo);
984 996 EXPORT_SYMBOL(ethtool_op_get_ufo);