diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-11-25 12:50:29 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-01-21 15:00:19 +0100 |
commit | fb683f76b5509a1ee72d68349ad099583fa3cdde (patch) | |
tree | dd0bf599fcddd04e7870596d0db0bd20a49224aa | |
parent | Add and use rtems_bsd_get_task_stack_size() (diff) | |
download | rtems-libbsd-fb683f76b5509a1ee72d68349ad099583fa3cdde.tar.bz2 |
BUS_DMA(9): Support BUS_DMA_COHERENT
-rw-r--r-- | rtemsbsd/rtems/rtems-bsd-bus-dma.c | 11 |
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); } |