Commit 6460d948f3ebf7d5040328a60a0ab7221f69945b
Committed by
David S. Miller
1 parent
febca281f6
Exists in
master
and in
7 other branches
[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
drivers/net/bnx2.c
... | ... | @@ -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 | } |
drivers/net/tg3.c
... | ... | @@ -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); |
net/core/ethtool.c
... | ... | @@ -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); |