Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/cxgb/sys/uipc_mvec.c
Context not available. | |||||
retry: | retry: | ||||
psegs = segs; | psegs = segs; | ||||
seg_count = 0; | seg_count = 0; | ||||
if (n->m_next == NULL) { | |||||
busdma_map_mbuf_fast(tag, map, n, segs); | |||||
*nsegs = 1; | |||||
return (0); | |||||
} | |||||
#if defined(__i386__) || defined(__amd64__) | |||||
while (n && seg_count < TX_MAX_SEGS) { | |||||
/* | |||||
* firmware doesn't like empty segments | |||||
*/ | |||||
if (__predict_true(n->m_len != 0)) { | |||||
seg_count++; | |||||
busdma_map_mbuf_fast(tag, map, n, psegs); | |||||
psegs++; | |||||
} | |||||
n = n->m_next; | |||||
} | |||||
#else | |||||
err = bus_dmamap_load_mbuf_sg(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 (seg_count == 0) { | ||||
if (cxgb_debug) | if (cxgb_debug) | ||||
printf("empty segment chain\n"); | printf("empty segment chain\n"); | ||||
Context not available. | |||||
busdma_map_sg_vec(bus_dma_tag_t tag, 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) | struct mbuf *m, bus_dma_segment_t *segs, int *nsegs) | ||||
{ | { | ||||
int n = 0; | |||||
for (*nsegs = 0; m != NULL ; segs++, *nsegs += 1, m = m->m_nextpkt) | for (*nsegs = 0; m != NULL; segs += n, *nsegs += n, m = m->m_nextpkt) | ||||
busdma_map_mbuf_fast(tag, map, m, segs); | bus_dmamap_load_mbuf_sg(tag, map, m, segs, &n, 0); | ||||
} | } | ||||
Context not available. |