From fb683f76b5509a1ee72d68349ad099583fa3cdde Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 25 Nov 2014 12:50:29 +0100 Subject: BUS_DMA(9): Support BUS_DMA_COHERENT --- rtemsbsd/rtems/rtems-bsd-bus-dma.c | 11 +++++++++-- 1 file 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); } -- cgit v1.2.3