From 23d335ed2bacd2a4aa40eb50bdc11bcb1cd6b715 Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 18 Oct 2012 14:59:20 +0100 Subject: Consolidate bmm allocation functions --- vmeta_lib.c | 77 ++++++++++++++----------------------------------------------- 1 file changed, 17 insertions(+), 60 deletions(-) diff --git a/vmeta_lib.c b/vmeta_lib.c index d357fac..dea64c4 100644 --- a/vmeta_lib.c +++ b/vmeta_lib.c @@ -176,21 +176,22 @@ void vdec_os_api_dma_free(void *ptr) bmm_free((void *)paddr); } -void * vdec_os_api_dma_alloc(UNSG32 size, UNSG32 align, UNSG32 * pPhysical) +static void *vmeta_bmm_malloc_aligned(UNSG32 size, UNSG32 align, UNSG32 *phys, int attr) { - unsigned int *ptr; - unsigned int tmp; + unsigned int tmp, *ptr; - if(size <= 0) + if (size == 0) return NULL; - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc -> size: 0x%x\n", size); + dbg_printf(VDEC_DEBUG_MEM, "%s: size 0x%x attr %u\n", + __FUNCTION__, size, attr); align = ALIGN(align, sizeof(int)); size += align; - ptr = bmm_malloc(size, BMM_ATTR_NONCACHED); + ptr = bmm_malloc(size, attr); if (!ptr) { - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_vmalloc not enough memory\n"); + dbg_printf(VDEC_DEBUG_MEM, "%s: not enough memory\n", + __FUNCTION__); return NULL; } @@ -199,70 +200,26 @@ void * vdec_os_api_dma_alloc(UNSG32 size, UNSG32 align, UNSG32 * pPhysical) ptr = (unsigned int *)((unsigned int)ptr + tmp); *(ptr - 1) = tmp; - *pPhysical = (unsigned long)bmm_get_paddr(ptr); + *phys = (UNSG32)bmm_get_paddr(ptr); - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc ptr: 0x%x\n", ptr); + dbg_printf(VDEC_DEBUG_MEM, "%s: ptr: 0x%x\n", __FUNCTION__, ptr); return ptr; } -void * vdec_os_api_dma_alloc_cached(UNSG32 size, UNSG32 align, UNSG32 * pPhysical) +void * vdec_os_api_dma_alloc(UNSG32 size, UNSG32 align, UNSG32 * pPhysical) { - unsigned int *ptr; - unsigned int tmp; - - if(size <= 0) - return NULL; - - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc_cached -> size: 0x%x\n", size); - - align = ALIGN(align, sizeof(int)); - size += align; - ptr = bmm_malloc(size, BMM_ATTR_DEFAULT); - if (!ptr) { - dbg_printf(VDEC_DEBUG_MEM,"\tno enough memory\n"); - return NULL; - } - - tmp = (unsigned int)((unsigned int)(ptr) & (align - 1)); - tmp = (unsigned int)(align - tmp); - ptr = (unsigned int *)((unsigned int)ptr + tmp); - *(ptr - 1) = tmp; - - *pPhysical = (unsigned long)bmm_get_paddr(ptr); - - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc_cached ptr: 0x%x\n", ptr); + return vmeta_bmm_malloc_aligned(size, align, pPhysical, BMM_ATTR_NONCACHED); +} - return ptr; +void * vdec_os_api_dma_alloc_cached(UNSG32 size, UNSG32 align, UNSG32 * pPhysical) +{ + return vmeta_bmm_malloc_aligned(size, align, pPhysical, BMM_ATTR_DEFAULT); } void * vdec_os_api_dma_alloc_writecombine(UNSG32 size, UNSG32 align, UNSG32 * pPhysical) { - unsigned int *ptr; - unsigned int tmp; - - if(size <= 0) - return NULL; - - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc_cached -> size: 0x%x\n", size); - - align = ALIGN(align, sizeof(int)); - size += align; - ptr = bmm_malloc(size, BMM_ATTR_WRITECOMBINE); - if (!ptr) { - dbg_printf(VDEC_DEBUG_MEM, "\tno enough memory\n"); - return NULL; - } - tmp = (unsigned int)((unsigned int)(ptr) & (align - 1)); - tmp = (unsigned int)(align - tmp); - ptr = (unsigned int *)((unsigned int)ptr + tmp); - *(ptr - 1) = tmp; - - *pPhysical = (unsigned long)bmm_get_paddr(ptr); - - dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc_writecombine ptr: 0x%x\n", ptr); - - return ptr; + return vmeta_bmm_malloc_aligned(size, align, pPhysical, BMM_ATTR_WRITECOMBINE); } UNSG32 vdec_os_api_flush_cache(UNSG32 vaddr, UNSG32 size, enum dma_data_direction direction) -- cgit