[rtems-libbsd commit] BUS_DMA(9): Support BUS_DMA_COHERENT

Sebastian Huber sebh at rtems.org
Wed Jan 21 14:02:59 UTC 2015


Module:    rtems-libbsd
Branch:    master
Commit:    fb683f76b5509a1ee72d68349ad099583fa3cdde
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=fb683f76b5509a1ee72d68349ad099583fa3cdde

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Nov 25 12:50:29 2014 +0100

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 1d4d120..c7cc872 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);
 }
 



More information about the vc mailing list