summaryrefslogtreecommitdiffstats
path: root/sys/dev/age/if_age.c
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-04-19 22:10:40 +0000
committeryongari <yongari@FreeBSD.org>2010-04-19 22:10:40 +0000
commit66db61c8c0e978eac926b1b47c6c81a108bdaa98 (patch)
tree4e38df74b4ad94becb3a95f35a704d97f0681706 /sys/dev/age/if_age.c
parent35d5bf4c1d2ab71a150954bf3464549e9e2c9efc (diff)
downloadFreeBSD-src-66db61c8c0e978eac926b1b47c6c81a108bdaa98.zip
FreeBSD-src-66db61c8c0e978eac926b1b47c6c81a108bdaa98.tar.gz
With r206844, CSUM_TCP is also set for CSUM_TSO case. Modify
drivers to take into account for the change. Basically CSUM_TSO should be checked before checking CSUM_TCP.
Diffstat (limited to 'sys/dev/age/if_age.c')
-rw-r--r--sys/dev/age/if_age.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/sys/dev/age/if_age.c b/sys/dev/age/if_age.c
index 3c5a107..15ce0ef 100644
--- a/sys/dev/age/if_age.c
+++ b/sys/dev/age/if_age.c
@@ -1629,22 +1629,8 @@ age_encap(struct age_softc *sc, struct mbuf **m_head)
}
m = *m_head;
- /* Configure Tx IP/TCP/UDP checksum offload. */
- if ((m->m_pkthdr.csum_flags & AGE_CSUM_FEATURES) != 0) {
- cflags |= AGE_TD_CSUM;
- if ((m->m_pkthdr.csum_flags & CSUM_TCP) != 0)
- cflags |= AGE_TD_TCPCSUM;
- if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
- cflags |= AGE_TD_UDPCSUM;
- /* Set checksum start offset. */
- cflags |= (poff << AGE_TD_CSUM_PLOADOFFSET_SHIFT);
- /* Set checksum insertion position of TCP/UDP. */
- cflags |= ((poff + m->m_pkthdr.csum_data) <<
- AGE_TD_CSUM_XSUMOFFSET_SHIFT);
- }
-
- /* Configure TSO. */
if ((m->m_pkthdr.csum_flags & CSUM_TSO) != 0) {
+ /* Configure TSO. */
if (poff + (tcp->th_off << 2) == m->m_pkthdr.len) {
/* Not TSO but IP/TCP checksum offload. */
cflags |= AGE_TD_IPCSUM | AGE_TD_TCPCSUM;
@@ -1660,6 +1646,18 @@ age_encap(struct age_softc *sc, struct mbuf **m_head)
/* Set IP/TCP header size. */
cflags |= ip->ip_hl << AGE_TD_IPHDR_LEN_SHIFT;
cflags |= tcp->th_off << AGE_TD_TSO_TCPHDR_LEN_SHIFT;
+ } else if ((m->m_pkthdr.csum_flags & AGE_CSUM_FEATURES) != 0) {
+ /* Configure Tx IP/TCP/UDP checksum offload. */
+ cflags |= AGE_TD_CSUM;
+ if ((m->m_pkthdr.csum_flags & CSUM_TCP) != 0)
+ cflags |= AGE_TD_TCPCSUM;
+ if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
+ cflags |= AGE_TD_UDPCSUM;
+ /* Set checksum start offset. */
+ cflags |= (poff << AGE_TD_CSUM_PLOADOFFSET_SHIFT);
+ /* Set checksum insertion position of TCP/UDP. */
+ cflags |= ((poff + m->m_pkthdr.csum_data) <<
+ AGE_TD_CSUM_XSUMOFFSET_SHIFT);
}
/* Configure VLAN hardware tag insertion. */
OpenPOWER on IntegriCloud