summaryrefslogtreecommitdiffstats
path: root/sys/dev/alc/if_alc.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/alc/if_alc.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/alc/if_alc.c')
-rw-r--r--sys/dev/alc/if_alc.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/sys/dev/alc/if_alc.c b/sys/dev/alc/if_alc.c
index e95b044..c685b84 100644
--- a/sys/dev/alc/if_alc.c
+++ b/sys/dev/alc/if_alc.c
@@ -1908,28 +1908,7 @@ alc_encap(struct alc_softc *sc, struct mbuf **m_head)
vtag = (vtag << TD_VLAN_SHIFT) & TD_VLAN_MASK;
cflags |= TD_INS_VLAN_TAG;
}
- /* Configure Tx checksum offload. */
- if ((m->m_pkthdr.csum_flags & ALC_CSUM_FEATURES) != 0) {
-#ifdef ALC_USE_CUSTOM_CSUM
- cflags |= TD_CUSTOM_CSUM;
- /* Set checksum start offset. */
- cflags |= ((poff >> 1) << TD_PLOAD_OFFSET_SHIFT) &
- TD_PLOAD_OFFSET_MASK;
- /* Set checksum insertion position of TCP/UDP. */
- cflags |= (((poff + m->m_pkthdr.csum_data) >> 1) <<
- TD_CUSTOM_CSUM_OFFSET_SHIFT) & TD_CUSTOM_CSUM_OFFSET_MASK;
-#else
- if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0)
- cflags |= TD_IPCSUM;
- if ((m->m_pkthdr.csum_flags & CSUM_TCP) != 0)
- cflags |= TD_TCPCSUM;
- if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
- cflags |= TD_UDPCSUM;
- /* Set TCP/UDP header offset. */
- cflags |= (poff << TD_L4HDR_OFFSET_SHIFT) &
- TD_L4HDR_OFFSET_MASK;
-#endif
- } else if ((m->m_pkthdr.csum_flags & CSUM_TSO) != 0) {
+ if ((m->m_pkthdr.csum_flags & CSUM_TSO) != 0) {
/* Request TSO and set MSS. */
cflags |= TD_TSO | TD_TSO_DESCV1;
cflags |= ((uint32_t)m->m_pkthdr.tso_segsz << TD_MSS_SHIFT) &
@@ -1961,6 +1940,27 @@ alc_encap(struct alc_softc *sc, struct mbuf **m_head)
}
/* Handle remaining fragments. */
idx = 1;
+ } else if ((m->m_pkthdr.csum_flags & ALC_CSUM_FEATURES) != 0) {
+ /* Configure Tx checksum offload. */
+#ifdef ALC_USE_CUSTOM_CSUM
+ cflags |= TD_CUSTOM_CSUM;
+ /* Set checksum start offset. */
+ cflags |= ((poff >> 1) << TD_PLOAD_OFFSET_SHIFT) &
+ TD_PLOAD_OFFSET_MASK;
+ /* Set checksum insertion position of TCP/UDP. */
+ cflags |= (((poff + m->m_pkthdr.csum_data) >> 1) <<
+ TD_CUSTOM_CSUM_OFFSET_SHIFT) & TD_CUSTOM_CSUM_OFFSET_MASK;
+#else
+ if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0)
+ cflags |= TD_IPCSUM;
+ if ((m->m_pkthdr.csum_flags & CSUM_TCP) != 0)
+ cflags |= TD_TCPCSUM;
+ if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
+ cflags |= TD_UDPCSUM;
+ /* Set TCP/UDP header offset. */
+ cflags |= (poff << TD_L4HDR_OFFSET_SHIFT) &
+ TD_L4HDR_OFFSET_MASK;
+#endif
}
for (; idx < nsegs; idx++) {
desc = &sc->alc_rdata.alc_tx_ring[prod];
OpenPOWER on IntegriCloud