summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-25 12:50:29 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-01-21 15:00:19 +0100
commitfb683f76b5509a1ee72d68349ad099583fa3cdde (patch)
treedd0bf599fcddd04e7870596d0db0bd20a49224aa
parentAdd and use rtems_bsd_get_task_stack_size() (diff)
downloadrtems-libbsd-fb683f76b5509a1ee72d68349ad099583fa3cdde.tar.bz2
BUS_DMA(9): Support BUS_DMA_COHERENT
-rw-r--r--rtemsbsd/rtems/rtems-bsd-bus-dma.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/rtemsbsd/rtems/rtems-bsd-bus-dma.c b/rtemsbsd/rtems/rtems-bsd-bus-dma.c
index 1d4d120a..c7cc8724 100644
--- a/rtemsbsd/rtems/rtems-bsd-bus-dma.c
+++ b/rtemsbsd/rtems/rtems-bsd-bus-dma.c
@@ -237,7 +237,14 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
return ENOMEM;
}
- *vaddr = rtems_heap_allocate_aligned_with_boundary(dmat->maxsize, dmat->alignment, dmat->boundary);
+ if ((flags & BUS_DMA_COHERENT) != 0) {
+ *vaddr = rtems_cache_coherent_allocate(
+ dmat->maxsize, dmat->alignment, dmat->boundary);
+ } else {
+ *vaddr = rtems_heap_allocate_aligned_with_boundary(
+ dmat->maxsize, dmat->alignment, dmat->boundary);
+ }
+
if (*vaddr == NULL) {
free(*mapp, M_DEVBUF);
@@ -261,7 +268,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
void
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
{
- free(vaddr, M_RTEMS_HEAP);
+ rtems_cache_coherent_free(vaddr);
free(map, M_DEVBUF);
}