summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2005-01-15 19:55:25 +0000
committerscottl <scottl@FreeBSD.org>2005-01-15 19:55:25 +0000
commit5c70871d362bd941b1e6925ad7a1fe03e57d0ec4 (patch)
tree940cc8ebec35f6e7031497a55a94db609f424d64 /sys/powerpc
parent7c9c98e63968c9648a58d5cecd8af2062f1c72e6 (diff)
downloadFreeBSD-src-5c70871d362bd941b1e6925ad7a1fe03e57d0ec4.zip
FreeBSD-src-5c70871d362bd941b1e6925ad7a1fe03e57d0ec4.tar.gz
Add bus_dmamap_load_mbuf_sg() to powerpc.
Diffstat (limited to 'sys/powerpc')
-rw-r--r--sys/powerpc/include/bus.h3
-rw-r--r--sys/powerpc/powerpc/busdma_machdep.c29
2 files changed, 32 insertions, 0 deletions
diff --git a/sys/powerpc/include/bus.h b/sys/powerpc/include/bus.h
index 19e8c41..d61d6d6 100644
--- a/sys/powerpc/include/bus.h
+++ b/sys/powerpc/include/bus.h
@@ -890,6 +890,9 @@ 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,
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
* bus_dmamap_callback2_t interface.
diff --git a/sys/powerpc/powerpc/busdma_machdep.c b/sys/powerpc/powerpc/busdma_machdep.c
index 3f3e253..7493980 100644
--- a/sys/powerpc/powerpc/busdma_machdep.c
+++ b/sys/powerpc/powerpc/busdma_machdep.c
@@ -500,6 +500,35 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m0,
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 error = 0;
+
+ M_ASSERTPKTHDR(m0);
+
+ if (m0->m_pkthdr.len <= dmat->maxsize) {
+ int first = 1;
+ vm_offset_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,
+ segs, m->m_data, m->m_len, NULL,
+ flags, &lastaddr, nsegs, first);
+ first = 0;
+ }
+ }
+ ++*nsegs;
+ } else {
+ error = EINVAL;
+ }
+
+ return (error);
+}
+
/*
* Like bus_dmamap_load(), but for uios.
*/
OpenPOWER on IntegriCloud