mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-29 12:03:03 +00:00
mvec routines should have no knowledge of the SG engine.
Reviewed by: kmacy Approved by: gnn (mentor)
This commit is contained in:
parent
ca2d94bef7
commit
fd3e790228
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=195006
@ -1152,17 +1152,18 @@ busdma_map_mbufs(struct mbuf **m, struct sge_txq *txq,
|
||||
{
|
||||
struct mbuf *m0;
|
||||
int err, pktlen, pass = 0;
|
||||
bus_dma_tag_t tag = txq->entry_tag;
|
||||
|
||||
retry:
|
||||
err = 0;
|
||||
m0 = *m;
|
||||
pktlen = m0->m_pkthdr.len;
|
||||
#if defined(__i386__) || defined(__amd64__)
|
||||
if (busdma_map_sg_collapse(txq, txsd->map, m, segs, nsegs) == 0) {
|
||||
if (busdma_map_sg_collapse(tag, txsd->map, m, segs, nsegs) == 0) {
|
||||
goto done;
|
||||
} else
|
||||
#endif
|
||||
err = bus_dmamap_load_mbuf_sg(txq->entry_tag, txsd->map, m0, segs, nsegs, 0);
|
||||
err = bus_dmamap_load_mbuf_sg(tag, txsd->map, m0, segs, nsegs, 0);
|
||||
|
||||
if (err == 0) {
|
||||
goto done;
|
||||
@ -1189,7 +1190,7 @@ busdma_map_mbufs(struct mbuf **m, struct sge_txq *txq,
|
||||
}
|
||||
done:
|
||||
#if !defined(__i386__) && !defined(__amd64__)
|
||||
bus_dmamap_sync(txq->entry_tag, txsd->map, BUS_DMASYNC_PREWRITE);
|
||||
bus_dmamap_sync(tag, txsd->map, BUS_DMASYNC_PREWRITE);
|
||||
#endif
|
||||
txsd->flags |= TX_SW_DESC_MAPPED;
|
||||
|
||||
@ -1412,11 +1413,12 @@ t3_encap(struct sge_qset *qs, struct mbuf **m)
|
||||
tso_info = V_LSO_MSS(m0->m_pkthdr.tso_segsz);
|
||||
#endif
|
||||
if (m0->m_nextpkt != NULL) {
|
||||
busdma_map_sg_vec(txq, txsd->map, m0, segs, &nsegs);
|
||||
busdma_map_sg_vec(txq->entry_tag, txsd->map, m0, segs, &nsegs);
|
||||
ndesc = 1;
|
||||
mlen = 0;
|
||||
} else {
|
||||
if ((err = busdma_map_sg_collapse(txq, txsd->map, &m0, segs, &nsegs))) {
|
||||
if ((err = busdma_map_sg_collapse(txq->entry_tag, txsd->map,
|
||||
&m0, segs, &nsegs))) {
|
||||
if (cxgb_debug)
|
||||
printf("failed ... err=%d\n", err);
|
||||
return (err);
|
||||
|
@ -43,7 +43,7 @@
|
||||
#define m_ulp_mode m_pkthdr.tso_segsz /* upper level protocol */
|
||||
|
||||
static __inline void
|
||||
busdma_map_mbuf_fast(struct sge_txq *txq, bus_dmamap_t map,
|
||||
busdma_map_mbuf_fast(bus_dma_tag_t tag, bus_dmamap_t map,
|
||||
struct mbuf *m, bus_dma_segment_t *seg)
|
||||
{
|
||||
#if defined(__i386__) || defined(__amd64__)
|
||||
@ -52,14 +52,13 @@ busdma_map_mbuf_fast(struct sge_txq *txq, bus_dmamap_t map,
|
||||
#else
|
||||
int nsegstmp;
|
||||
|
||||
bus_dmamap_load_mbuf_sg(txq->entry_tag, map, m, seg,
|
||||
&nsegstmp, 0);
|
||||
bus_dmamap_load_mbuf_sg(tag, map, m, seg, &nsegstmp, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
int busdma_map_sg_collapse(struct sge_txq *txq, bus_dmamap_t map,
|
||||
int busdma_map_sg_collapse(bus_dma_tag_t tag, bus_dmamap_t map,
|
||||
struct mbuf **m, bus_dma_segment_t *segs, int *nsegs);
|
||||
void busdma_map_sg_vec(struct sge_txq *txq, bus_dmamap_t map,
|
||||
void busdma_map_sg_vec(bus_dma_tag_t tag, bus_dmamap_t map,
|
||||
struct mbuf *m, bus_dma_segment_t *segs, int *nsegs);
|
||||
static __inline int
|
||||
busdma_map_sgl(bus_dma_segment_t *vsegs, bus_dma_segment_t *segs, int count)
|
||||
|
@ -59,7 +59,7 @@ __FBSDID("$FreeBSD$");
|
||||
#endif
|
||||
|
||||
int
|
||||
busdma_map_sg_collapse(struct sge_txq *txq, bus_dmamap_t map,
|
||||
busdma_map_sg_collapse(bus_dma_tag_t tag, bus_dmamap_t map,
|
||||
struct mbuf **m, bus_dma_segment_t *segs, int *nsegs)
|
||||
{
|
||||
struct mbuf *n = *m;
|
||||
@ -73,7 +73,7 @@ busdma_map_sg_collapse(struct sge_txq *txq, bus_dmamap_t map,
|
||||
psegs = segs;
|
||||
seg_count = 0;
|
||||
if (n->m_next == NULL) {
|
||||
busdma_map_mbuf_fast(txq, map, n, segs);
|
||||
busdma_map_mbuf_fast(tag, map, n, segs);
|
||||
*nsegs = 1;
|
||||
return (0);
|
||||
}
|
||||
@ -84,14 +84,13 @@ busdma_map_sg_collapse(struct sge_txq *txq, bus_dmamap_t map,
|
||||
*/
|
||||
if (__predict_true(n->m_len != 0)) {
|
||||
seg_count++;
|
||||
busdma_map_mbuf_fast(txq, map, n, psegs);
|
||||
busdma_map_mbuf_fast(tag, map, n, psegs);
|
||||
psegs++;
|
||||
}
|
||||
n = n->m_next;
|
||||
}
|
||||
#else
|
||||
err = bus_dmamap_load_mbuf_sg(txq->entry_tag, map, *m, segs,
|
||||
&seg_count, 0);
|
||||
err = bus_dmamap_load_mbuf_sg(tag, map, *m, segs, &seg_count, 0);
|
||||
#endif
|
||||
if (seg_count == 0) {
|
||||
if (cxgb_debug)
|
||||
@ -122,11 +121,11 @@ busdma_map_sg_collapse(struct sge_txq *txq, bus_dmamap_t map,
|
||||
}
|
||||
|
||||
void
|
||||
busdma_map_sg_vec(struct sge_txq *txq, bus_dmamap_t map,
|
||||
busdma_map_sg_vec(bus_dma_tag_t tag, bus_dmamap_t map,
|
||||
struct mbuf *m, bus_dma_segment_t *segs, int *nsegs)
|
||||
{
|
||||
|
||||
for (*nsegs = 0; m != NULL ; segs++, *nsegs += 1, m = m->m_nextpkt)
|
||||
busdma_map_mbuf_fast(txq, map, m, segs);
|
||||
busdma_map_mbuf_fast(tag, map, m, segs);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user