aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/dwc/dwc1000_dma.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/dwc/dwc1000_dma.c')
-rw-r--r--sys/dev/dwc/dwc1000_dma.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/sys/dev/dwc/dwc1000_dma.c b/sys/dev/dwc/dwc1000_dma.c
index 44b9f0d114bf..6457503d2a7f 100644
--- a/sys/dev/dwc/dwc1000_dma.c
+++ b/sys/dev/dwc/dwc1000_dma.c
@@ -248,7 +248,7 @@ dma1000_setup_txbuf(struct dwc_softc *sc, int idx, struct mbuf **mp)
struct bus_dma_segment segs[TX_MAP_MAX_SEGS];
int error, nsegs;
struct mbuf * m;
- uint32_t flags = 0;
+ uint32_t flags;
int i;
int last;
@@ -276,19 +276,12 @@ dma1000_setup_txbuf(struct dwc_softc *sc, int idx, struct mbuf **mp)
m = *mp;
- if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0) {
- if ((m->m_pkthdr.csum_flags & (CSUM_TCP|CSUM_UDP)) != 0) {
- if (!sc->dma_ext_desc)
- flags = NTDESC1_CIC_FULL;
- else
- flags = ETDESC0_CIC_FULL;
- } else {
- if (!sc->dma_ext_desc)
- flags = NTDESC1_CIC_HDR;
- else
- flags = ETDESC0_CIC_HDR;
- }
- }
+ if ((m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6)) != 0)
+ flags = sc->dma_ext_desc ? ETDESC0_CIC_SEG : NTDESC1_CIC_SEG;
+ else if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0)
+ flags = sc->dma_ext_desc ? ETDESC0_CIC_HDR : NTDESC1_CIC_HDR;
+ else
+ flags = sc->dma_ext_desc ? ETDESC0_CIC_NONE : NTDESC1_CIC_NONE;
bus_dmamap_sync(sc->txbuf_tag, sc->txbuf_map[idx].map,
BUS_DMASYNC_PREWRITE);
@@ -397,8 +390,8 @@ dwc_rxfinish_one(struct dwc_softc *sc, struct dwc_hwdesc *desc,
m->m_len = len;
if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
- if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0 &&
- (rdesc0 & RDESC0_FT) != 0) {
+ if ((if_getcapenable(ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) != 0 &&
+ (rdesc0 & RDESC0_FT) != 0) {
m->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
if ((rdesc0 & RDESC0_ICE) == 0)
m->m_pkthdr.csum_flags |= CSUM_IP_VALID;