diff options
author | Michael Chan <mchan@broadcom.com> | 2007-07-14 22:07:52 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-07-14 22:07:52 -0400 |
commit | 6460d948f3ebf7d5040328a60a0ab7221f69945b (patch) | |
tree | d7c2a7eda9f20a03698df32bdc4677ca0c2479d5 | |
parent | febca281f677a775c61cd0572c2f35e4ead9e7d5 (diff) |
[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>
-rw-r--r-- | drivers/net/bnx2.c | 2 | ||||
-rw-r--r-- | drivers/net/tg3.c | 2 | ||||
-rw-r--r-- | include/linux/ethtool.h | 1 | ||||
-rw-r--r-- | net/core/ethtool.c | 12 |
4 files changed, 15 insertions, 2 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 4e5e1cb2adc1..d23861c8658c 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -6218,7 +6218,7 @@ bnx2_set_tx_csum(struct net_device *dev, u32 data) | |||
6218 | struct bnx2 *bp = netdev_priv(dev); | 6218 | struct bnx2 *bp = netdev_priv(dev); |
6219 | 6219 | ||
6220 | if (CHIP_NUM(bp) == CHIP_NUM_5709) | 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 | else | 6222 | else |
6223 | return (ethtool_op_set_tx_csum(dev, data)); | 6223 | return (ethtool_op_set_tx_csum(dev, data)); |
6224 | } | 6224 | } |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 32e4037dcb50..5ee14764fd74 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -8318,7 +8318,7 @@ static int tg3_set_tx_csum(struct net_device *dev, u32 data) | |||
8318 | 8318 | ||
8319 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || | 8319 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || |
8320 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) | 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 | else | 8322 | else |
8323 | ethtool_op_set_tx_csum(dev, data); | 8323 | ethtool_op_set_tx_csum(dev, data); |
8324 | 8324 | ||
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index f2d248f8cc92..3a632244f31b 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -265,6 +265,7 @@ u32 ethtool_op_get_link(struct net_device *dev); | |||
265 | u32 ethtool_op_get_tx_csum(struct net_device *dev); | 265 | u32 ethtool_op_get_tx_csum(struct net_device *dev); |
266 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); | 266 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); |
267 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); | 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 | u32 ethtool_op_get_sg(struct net_device *dev); | 269 | u32 ethtool_op_get_sg(struct net_device *dev); |
269 | int ethtool_op_set_sg(struct net_device *dev, u32 data); | 270 | int ethtool_op_set_sg(struct net_device *dev, u32 data); |
270 | u32 ethtool_op_get_tso(struct net_device *dev); | 271 | u32 ethtool_op_get_tso(struct net_device *dev); |
diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 8d5e5a09b576..0b531e98ec33 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c | |||
@@ -52,6 +52,17 @@ int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data) | |||
52 | 52 | ||
53 | return 0; | 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 | u32 ethtool_op_get_sg(struct net_device *dev) | 66 | u32 ethtool_op_get_sg(struct net_device *dev) |
56 | { | 67 | { |
57 | return (dev->features & NETIF_F_SG) != 0; | 68 | return (dev->features & NETIF_F_SG) != 0; |
@@ -980,5 +991,6 @@ EXPORT_SYMBOL(ethtool_op_set_sg); | |||
980 | EXPORT_SYMBOL(ethtool_op_set_tso); | 991 | EXPORT_SYMBOL(ethtool_op_set_tso); |
981 | EXPORT_SYMBOL(ethtool_op_set_tx_csum); | 992 | EXPORT_SYMBOL(ethtool_op_set_tx_csum); |
982 | EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum); | 993 | EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum); |
994 | EXPORT_SYMBOL(ethtool_op_set_tx_ipv6_csum); | ||
983 | EXPORT_SYMBOL(ethtool_op_set_ufo); | 995 | EXPORT_SYMBOL(ethtool_op_set_ufo); |
984 | EXPORT_SYMBOL(ethtool_op_get_ufo); | 996 | EXPORT_SYMBOL(ethtool_op_get_ufo); |