34#include <sys/kernel.h>
36#include <sys/malloc.h>
43#include <machine/bus.h>
49#define M_SANITY m_sanity
56 struct mbuf **m, bus_dma_segment_t *segs,
int *nsegs)
59 int seg_count, defragged = 0, err = 0;
61 KASSERT(n->m_pkthdr.len, (
"packet has zero header len"));
66 err = bus_dmamap_load_mbuf_sg(tag, map, *m, segs, &seg_count, 0);
69 printf(
"empty segment chain\n");
72 }
else if (err == EFBIG || seg_count >=
TX_MAX_SEGS) {
74 printf(
"mbuf chain too long: %d max allowed %d\n",
77 n = m_defrag(*m, M_NOWAIT);
97 struct mbuf *m, bus_dma_segment_t *segs,
int *nsegs)
101 for (*nsegs = 0; m != NULL; segs += n, *nsegs += n, m = m->m_nextpkt)
102 bus_dmamap_load_mbuf_sg(tag, map, m, segs, &n, 0);
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(bus_dma_tag_t tag, bus_dmamap_t map, struct mbuf *m, bus_dma_segment_t *segs, int *nsegs)