[prev in list] [next in list] [prev in thread] [next in thread]
List: git-commits-24
Subject: [TG3]: Let chip do pseudo-header csum on rx.
From: Linux Kernel Mailing List <linux-kernel () vger ! kernel ! org>
Date: 2003-01-30 22:30:00
[Download RAW message or body]
ChangeSet 1.953.2.1, 2003/01/30 14:30:00-08:00, davem@nuts.ninka.net
[TG3]: Let chip do pseudo-header csum on rx.
# This patch includes the following deltas:
# ChangeSet 1.953 -> 1.953.2.1
# drivers/net/tg3.c 1.46 -> 1.47
#
tg3.c | 27 +++++++++++----------------
1 files changed, 11 insertions(+), 16 deletions(-)
diff -Nru a/drivers/net/tg3.c b/drivers/net/tg3.c
--- a/drivers/net/tg3.c Mon Feb 3 21:33:09 2003
+++ b/drivers/net/tg3.c Mon Feb 3 21:33:09 2003
@@ -1937,13 +1937,12 @@
}
if ((tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) &&
- (desc->type_flags & RXD_FLAG_TCPUDP_CSUM)) {
- skb->csum = htons((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
- >> RXD_TCPCSUM_SHIFT);
- skb->ip_summed = CHECKSUM_HW;
- } else {
+ (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
+ (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
+ >> RXD_TCPCSUM_SHIFT) == 0xffff)) {
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
+ else
skb->ip_summed = CHECKSUM_NONE;
- }
skb->protocol = eth_type_trans(skb, tp->dev);
#if TG3_VLAN_TAG_USED
@@ -5976,18 +5975,14 @@
if (tp->pci_chip_rev_id == CHIPREV_ID_5700_B0)
tp->tg3_flags |= TG3_FLAG_BROKEN_CHECKSUMS;
- /* Regardless of whether checksums work or not, we configure
- * the StrongARM chips to not compute the pseudo header checksums
- * in either direction. Because of the way Linux checksum support
- * works we do not need the chips to do this, and taking the load
- * off of the TX/RX onboard StrongARM cpus means that they will not be
- * the bottleneck. Whoever wrote Broadcom's driver did not
- * understand the situation at all. He could have bothered
- * to read Jes's Acenic driver because the logic (and this part of
- * the Tigon2 hardware/firmware) is pretty much identical.
+ /* Pseudo-header checksum is done by hardware logic and not
+ * the offload processers, so make the chip do the pseudo-
+ * header checksums on receive. For transmit it is more
+ * convenient to do the pseudo-header checksum in software
+ * as Linux does that on transmit for us in all cases.
*/
tp->tg3_flags |= TG3_FLAG_NO_TX_PSEUDO_CSUM;
- tp->tg3_flags |= TG3_FLAG_NO_RX_PSEUDO_CSUM;
+ tp->tg3_flags &= ~TG3_FLAG_NO_RX_PSEUDO_CSUM;
/* Derive initial jumbo mode from MTU assigned in
* ether_setup() via the alloc_etherdev() call
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic