Add bus_dmamap_load_mbuf_sg() to ia64
This commit is contained in:
parent
5134102b9d
commit
33072f4de7
@ -498,10 +498,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
|
|||||||
struct thread *td,
|
struct thread *td,
|
||||||
int flags,
|
int flags,
|
||||||
bus_addr_t *lastaddrp,
|
bus_addr_t *lastaddrp,
|
||||||
|
bus_dma_segment_t *segs;
|
||||||
int *segp,
|
int *segp,
|
||||||
int first)
|
int first)
|
||||||
{
|
{
|
||||||
bus_dma_segment_t *segs;
|
|
||||||
bus_size_t sgsize;
|
bus_size_t sgsize;
|
||||||
bus_addr_t curaddr, lastaddr, baddr, bmask;
|
bus_addr_t curaddr, lastaddr, baddr, bmask;
|
||||||
vm_offset_t vaddr;
|
vm_offset_t vaddr;
|
||||||
@ -510,8 +510,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
|
|||||||
int seg;
|
int seg;
|
||||||
pmap_t pmap;
|
pmap_t pmap;
|
||||||
|
|
||||||
segs = dmat->segments;
|
|
||||||
|
|
||||||
if (map == NULL)
|
if (map == NULL)
|
||||||
map = &nobounce_dmamap;
|
map = &nobounce_dmamap;
|
||||||
|
|
||||||
@ -652,7 +650,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
|
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
|
||||||
&lastaddr, &nsegs, 1);
|
&lastaddr, dmat->segments, &nsegs, 1);
|
||||||
|
|
||||||
if (error == EINPROGRESS)
|
if (error == EINPROGRESS)
|
||||||
return (error);
|
return (error);
|
||||||
@ -691,7 +689,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map,
|
|||||||
error = _bus_dmamap_load_buffer(dmat, map,
|
error = _bus_dmamap_load_buffer(dmat, map,
|
||||||
m->m_data, m->m_len,
|
m->m_data, m->m_len,
|
||||||
NULL, flags, &lastaddr,
|
NULL, flags, &lastaddr,
|
||||||
&nsegs, first);
|
dmat->segments, &nsegs, first);
|
||||||
first = 0;
|
first = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -709,6 +707,40 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map,
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
|
||||||
|
struct mbuf *m0, bus_dma_segment_t *segs,
|
||||||
|
int *nsegs, int flags)
|
||||||
|
{
|
||||||
|
int nsegs, error;
|
||||||
|
|
||||||
|
M_ASSERTPKTHDR(m0);
|
||||||
|
|
||||||
|
flags |= BUS_DMA_NOWAIT;
|
||||||
|
nsegs = 0;
|
||||||
|
error = 0;
|
||||||
|
if (m0->m_pkthdr.len <= dmat->maxsize) {
|
||||||
|
int first = 1;
|
||||||
|
bus_addr_t lastaddr = 0;
|
||||||
|
struct mbuf *m;
|
||||||
|
|
||||||
|
for (m = m0; m != NULL && error == 0; m = m->m_next) {
|
||||||
|
if (m->m_len > 0) {
|
||||||
|
error = _bus_dmamap_load_buffer(dmat, map,
|
||||||
|
m->m_data, m->m_len,
|
||||||
|
NULL, flags, &lastaddr,
|
||||||
|
segs, nsegs, first);
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
++*nsegs;
|
||||||
|
} else {
|
||||||
|
error = EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (error);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Like _bus_dmamap_load(), but for uios.
|
* Like _bus_dmamap_load(), but for uios.
|
||||||
*/
|
*/
|
||||||
@ -748,7 +780,8 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_t map,
|
|||||||
|
|
||||||
if (minlen > 0) {
|
if (minlen > 0) {
|
||||||
error = _bus_dmamap_load_buffer(dmat, map, addr,
|
error = _bus_dmamap_load_buffer(dmat, map, addr,
|
||||||
minlen, td, flags, &lastaddr, &nsegs, first);
|
minlen, td, flags, &lastaddr, dmat->segments,
|
||||||
|
&nsegs, first);
|
||||||
first = 0;
|
first = 0;
|
||||||
|
|
||||||
resid -= minlen;
|
resid -= minlen;
|
||||||
|
@ -1010,6 +1010,8 @@ typedef void bus_dmamap_callback2_t(void *, bus_dma_segment_t *, int,
|
|||||||
int bus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map,
|
int bus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map,
|
||||||
struct mbuf *mbuf, bus_dmamap_callback2_t *callback, void *callback_arg,
|
struct mbuf *mbuf, bus_dmamap_callback2_t *callback, void *callback_arg,
|
||||||
int flags);
|
int flags);
|
||||||
|
int bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
|
||||||
|
struct mbuf *mbuf, bus_dma_segment_t *segs, int *nsegs, int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Like bus_dmamap_load but for uios. Note the use of the
|
* Like bus_dmamap_load but for uios. Note the use of the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user