diff options
| author | Don Lewis <truckman@FreeBSD.org> | 2004-01-08 06:22:15 +0000 |
|---|---|---|
| committer | Don Lewis <truckman@FreeBSD.org> | 2004-01-08 06:22:15 +0000 |
| commit | 4ff4a9bee9aa27d76926117bc47c0fd3a88ef668 (patch) | |
| tree | 64e45a82ea2f7001592cfa29c880d379095d596f /sys/dev/dc | |
| parent | d4b2657f98a11707e2d177a56a2c6a6e4155cb46 (diff) | |
Notes
Diffstat (limited to 'sys/dev/dc')
| -rw-r--r-- | sys/dev/dc/if_dc.c | 7 | ||||
| -rw-r--r-- | sys/dev/dc/if_dcreg.h | 1 |
2 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c index 7ff58551eae9..6068194eab7b 100644 --- a/sys/dev/dc/if_dc.c +++ b/sys/dev/dc/if_dc.c @@ -2859,7 +2859,7 @@ dc_txeof(struct dc_softc *sc) if (txstat & DC_TXSTAT_OWN) break; - if (!(ctl & DC_TXCTL_FIRSTFRAG) || ctl & DC_TXCTL_SETUP) { + if (!(ctl & DC_TXCTL_LASTFRAG) || ctl & DC_TXCTL_SETUP) { if (ctl & DC_TXCTL_SETUP) { /* * Yes, the PNIC is so brain damaged @@ -3262,6 +3262,7 @@ dc_dma_map_txbuf(arg, segs, nseg, mapsize, error) sc->dc_cdata.dc_tx_prod = frag; sc->dc_cdata.dc_tx_cnt += nseg; sc->dc_ldata->dc_tx_list[cur].dc_ctl |= htole32(DC_TXCTL_LASTFRAG); + sc->dc_cdata.dc_tx_chain[cur] = sc->dc_cdata.dc_tx_mapping; if (sc->dc_flags & DC_TX_INTR_FIRSTFRAG) sc->dc_ldata->dc_tx_list[first].dc_ctl |= htole32(DC_TXCTL_FINT); @@ -3311,13 +3312,13 @@ dc_encap(struct dc_softc *sc, struct mbuf **m_head) * of fragments or hit the end of the mbuf chain. */ idx = sc->dc_cdata.dc_tx_prod; + sc->dc_cdata.dc_tx_mapping = *m_head; error = bus_dmamap_load_mbuf(sc->dc_mtag, sc->dc_cdata.dc_tx_map[idx], *m_head, dc_dma_map_txbuf, sc, 0); if (error) return (error); if (sc->dc_cdata.dc_tx_err != 0) return (sc->dc_cdata.dc_tx_err); - sc->dc_cdata.dc_tx_chain[idx] = *m_head; bus_dmamap_sync(sc->dc_mtag, sc->dc_cdata.dc_tx_map[idx], BUS_DMASYNC_PREWRITE); bus_dmamap_sync(sc->dc_ltag, sc->dc_lmap, @@ -3768,7 +3769,7 @@ dc_stop(struct dc_softc *sc) if (cd->dc_tx_chain[i] != NULL) { ctl = le32toh(ld->dc_tx_list[i].dc_ctl); if ((ctl & DC_TXCTL_SETUP) || - !(ctl & DC_TXCTL_FIRSTFRAG)) { + !(ctl & DC_TXCTL_LASTFRAG)) { cd->dc_tx_chain[i] = NULL; continue; } diff --git a/sys/dev/dc/if_dcreg.h b/sys/dev/dc/if_dcreg.h index 64dcc28ff791..c7339eb7b533 100644 --- a/sys/dev/dc/if_dcreg.h +++ b/sys/dev/dc/if_dcreg.h @@ -486,6 +486,7 @@ struct dc_list_data { struct dc_chain_data { struct mbuf *dc_rx_chain[DC_RX_LIST_CNT]; struct mbuf *dc_tx_chain[DC_TX_LIST_CNT]; + struct mbuf *dc_tx_mapping; bus_dmamap_t dc_rx_map[DC_RX_LIST_CNT]; bus_dmamap_t dc_tx_map[DC_TX_LIST_CNT]; u_int32_t *dc_sbuf; |
