summaryrefslogtreecommitdiffstats
path: root/sys/sys/bus_dma.h
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-10-27 21:39:16 +0000
committerkib <kib@FreeBSD.org>2013-10-27 21:39:16 +0000
commit79afbd5fdd5f600c2a390a04f729e1249f04c316 (patch)
tree01b51e4040a30364be1c4ef9bcec82c2e4414af5 /sys/sys/bus_dma.h
parent5449e20fb6562d1e14526a10b8fe9cd8b0ecd846 (diff)
downloadFreeBSD-src-79afbd5fdd5f600c2a390a04f729e1249f04c316.zip
FreeBSD-src-79afbd5fdd5f600c2a390a04f729e1249f04c316.tar.gz
Add bus_dmamap_load_ma() function to load map with the array of
vm_pages. Provide trivial implementation which forwards the load to _bus_dmamap_load_phys() page by page. Right now all architectures use bus_dmamap_load_ma_triv(). Tested by: pho (as part of the functional patch) Sponsored by: The FreeBSD Foundation MFC after: 1 month
Diffstat (limited to 'sys/sys/bus_dma.h')
-rw-r--r--sys/sys/bus_dma.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/sys/bus_dma.h b/sys/sys/bus_dma.h
index c3ac56e..5f096f8 100644
--- a/sys/sys/bus_dma.h
+++ b/sys/sys/bus_dma.h
@@ -247,6 +247,15 @@ int bus_dmamap_load_mem(bus_dma_tag_t dmat, bus_dmamap_t map,
void *callback_arg, int flags);
/*
+ * Placeholder for use by busdma implementations which do not benefit
+ * from optimized procedure to load an array of vm_page_t. Falls back
+ * to do _bus_dmamap_load_phys() in loop.
+ */
+int bus_dmamap_load_ma_triv(bus_dma_tag_t dmat, bus_dmamap_t map,
+ struct vm_page **ma, bus_size_t tlen, int ma_offs, int flags,
+ bus_dma_segment_t *segs, int *segp);
+
+/*
* XXX sparc64 uses the same interface, but a much different implementation.
* <machine/bus_dma.h> for the sparc64 arch contains the equivalent
* declarations.
@@ -324,6 +333,10 @@ int _bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map,
vm_paddr_t paddr, bus_size_t buflen,
int flags, bus_dma_segment_t *segs, int *segp);
+int _bus_dmamap_load_ma(bus_dma_tag_t dmat, bus_dmamap_t map,
+ struct vm_page **ma, bus_size_t tlen, int ma_offs, int flags,
+ bus_dma_segment_t *segs, int *segp);
+
bus_dma_segment_t *_bus_dmamap_complete(bus_dma_tag_t dmat,
bus_dmamap_t map,
bus_dma_segment_t *segs,
OpenPOWER on IntegriCloud