aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2007-07-14 22:07:52 -0400
committerDavid S. Miller <davem@davemloft.net>2007-07-14 22:07:52 -0400
commit6460d948f3ebf7d5040328a60a0ab7221f69945b (patch)
treed7c2a7eda9f20a03698df32bdc4677ca0c2479d5
parentfebca281f677a775c61cd0572c2f35e4ead9e7d5 (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.c2
-rw-r--r--drivers/net/tg3.c2
-rw-r--r--include/linux/ethtool.h1
-rw-r--r--net/core/ethtool.c12
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);
265u32 ethtool_op_get_tx_csum(struct net_device *dev); 265u32 ethtool_op_get_tx_csum(struct net_device *dev);
266int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); 266int ethtool_op_set_tx_csum(struct net_device *dev, u32 data);
267int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); 267int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data);
268int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data);
268u32 ethtool_op_get_sg(struct net_device *dev); 269u32 ethtool_op_get_sg(struct net_device *dev);
269int ethtool_op_set_sg(struct net_device *dev, u32 data); 270int ethtool_op_set_sg(struct net_device *dev, u32 data);
270u32 ethtool_op_get_tso(struct net_device *dev); 271u32 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
56int 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
55u32 ethtool_op_get_sg(struct net_device *dev) 66u32 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);
980EXPORT_SYMBOL(ethtool_op_set_tso); 991EXPORT_SYMBOL(ethtool_op_set_tso);
981EXPORT_SYMBOL(ethtool_op_set_tx_csum); 992EXPORT_SYMBOL(ethtool_op_set_tx_csum);
982EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum); 993EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum);
994EXPORT_SYMBOL(ethtool_op_set_tx_ipv6_csum);
983EXPORT_SYMBOL(ethtool_op_set_ufo); 995EXPORT_SYMBOL(ethtool_op_set_ufo);
984EXPORT_SYMBOL(ethtool_op_get_ufo); 996EXPORT_SYMBOL(ethtool_op_get_ufo);