From: SeungBeom Kim <sbcrux.kim@samsung.com>
Date: Wed, 8 Aug 2012 17:54:12 +0000 (-0700)
Subject: exynos_omx: multi_thread: Change shared memory allocator for DRM play.
X-Git-Tag: cm-10.1-M1~249
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=2590f08f743402db357146c2feed73275440f388;p=GitHub%2FLineageOS%2Fandroid_hardware_samsung_slsi_exynos5.git

exynos_omx: multi_thread: Change shared memory allocator for DRM play.

The case of DRM play, OpenMAX need reserved memory.
Reserved memory means Exynos heap.

Change-Id: Ibc4e3b8e73b1a9e6e1dcfb48a52f1a551d428112
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
---

diff --git a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c
index 5ecc648..d9aaee1 100644
--- a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c
+++ b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c
@@ -141,7 +141,8 @@ OMX_PTR Exynos_OSAL_SharedMemory_Alloc(OMX_HANDLETYPE handle, OMX_U32 size, MEMO
     EXYNOS_SHAREDMEM_LIST *pCurrentElement = NULL;
     ion_buffer             IONBuffer       = 0;
     OMX_PTR                pBuffer         = NULL;
-    unsigned int heap;
+    unsigned int mask;
+    unsigned int flag;
 
     if (pHandle == NULL)
         goto EXIT;
@@ -149,16 +150,26 @@ OMX_PTR Exynos_OSAL_SharedMemory_Alloc(OMX_HANDLETYPE handle, OMX_U32 size, MEMO
     pElement = (EXYNOS_SHAREDMEM_LIST *)Exynos_OSAL_Malloc(sizeof(EXYNOS_SHAREDMEM_LIST));
     Exynos_OSAL_Memset(pElement, 0, sizeof(EXYNOS_SHAREDMEM_LIST));
 
-    if (memoryType == SECURE_MEMORY)
-        heap = ION_HEAP_EXYNOS_VIDEO_MASK;
-    else if (memoryType == NORMAL_MEMORY)
-        heap = ION_HEAP_EXYNOS_MASK;
-    else if (memoryType == SYSTEM_MEMORY)
-        heap = ION_HEAP_SYSTEM_MASK;
-    else
-        return NULL;
+    switch (memoryType) {
+    case SECURE_MEMORY:
+        mask = ION_HEAP_EXYNOS_CONTIG_MASK;
+        flag = ION_EXYNOS_VIDEO_MASK;
+        break;
+    case NORMAL_MEMORY:
+        mask = ION_HEAP_EXYNOS_MASK;
+        flag = 0;
+        break;
+    case SYSTEM_MEMORY:
+        mask = ION_HEAP_SYSTEM_MASK;
+        flag = ION_FLAG_CACHED;
+        break;
+    default:
+        pBuffer = NULL;
+        goto EXIT;
+        break;
+    }
 
-    IONBuffer = ion_alloc((ion_client)pHandle->hIONHandle, size, 0, heap, 0);
+    IONBuffer = ion_alloc((ion_client)pHandle->hIONHandle, size, 0, mask, flag);
 
     if (IONBuffer <= 0) {
         Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "ion_alloc Error: %d", IONBuffer);
diff --git a/include/ion.h b/include/ion.h
index bb66189..8877464 100644
--- a/include/ion.h
+++ b/include/ion.h
@@ -26,7 +26,7 @@
 #define ION_HEAP_EXYNOS_CONTIG_MASK     (1 << 4)
 #define ION_HEAP_EXYNOS_MASK            (1 << 5)
 #define ION_EXYNOS_VIDEO_MASK           (1 << 29)
-#define ION_HEAP_EXYNOS_VIDEO_MASK      (ION_EXYNOS_VIDEO_MASK|ION_HEAP_EXYNOS_CONTIG_MASK)
+
 /* ION_MSYNC_FLAGS
  * values of @flags parameter to ion_msync()
  *