summaryrefslogtreecommitdiff
path: root/vmeta_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'vmeta_lib.c')
-rwxr-xr-xvmeta_lib.c64
1 files changed, 63 insertions, 1 deletions
diff --git a/vmeta_lib.c b/vmeta_lib.c
index 9d83f30..15b3820 100755
--- a/vmeta_lib.c
+++ b/vmeta_lib.c
@@ -148,7 +148,69 @@ void * vdec_os_api_dma_alloc(UNSG32 size, UNSG32 align, UNSG32 * pPhysical)
align = ALIGN(align, sizeof(int));
size += align;
- ptr = bmm_malloc(size, BMM_ATTR_NONBUFFERABLE | BMM_ATTR_NONCACHEABLE);
+ ptr = bmm_malloc(size, BMM_ATTR_NONCACHED);
+ if (!ptr) {
+ printf("\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 ptr: 0x%x\n", ptr);
+ //memset(ptr, 0, size);
+
+ return ptr;
+}
+
+void * vdec_os_api_dma_alloc_writecombine(UNSG32 size, UNSG32 align, UNSG32 * pPhysical)
+{
+ unsigned int *ptr = NULL;
+ unsigned int tmp = 0;
+
+ if(size <= 0)
+ return NULL;
+
+ dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc -> size: 0x%x\n", size);
+
+ align = ALIGN(align, sizeof(int));
+ size += align;
+ ptr = bmm_malloc(size, BMM_ATTR_WRITECOMBINE);
+ if (!ptr) {
+ printf("\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 ptr: 0x%x\n", ptr);
+ //memset(ptr, 0, size);
+
+ return ptr;
+}
+
+void * vdec_os_api_dma_alloc_cached(UNSG32 size, UNSG32 align, UNSG32 * pPhysical)
+{
+ unsigned int *ptr = NULL;
+ unsigned int tmp = 0;
+
+ if(size <= 0)
+ return NULL;
+
+ dbg_printf(VDEC_DEBUG_MEM, "vdec_os_api_dma_alloc -> size: 0x%x\n", size);
+
+ align = ALIGN(align, sizeof(int));
+ size += align;
+ ptr = bmm_malloc(size, BMM_ATTR_DEFAULT);
if (!ptr) {
printf("\tno enough memory\n");
return NULL;