diff options
author | kib <kib@FreeBSD.org> | 2013-10-27 21:39:16 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2013-10-27 21:39:16 +0000 |
commit | 79afbd5fdd5f600c2a390a04f729e1249f04c316 (patch) | |
tree | 01b51e4040a30364be1c4ef9bcec82c2e4414af5 /sys/sys/bus_dma.h | |
parent | 5449e20fb6562d1e14526a10b8fe9cd8b0ecd846 (diff) | |
download | FreeBSD-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.h | 13 |
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, |