mm-video: port heap mask change to ion.
Heap mask field passes as argument at allocation time
to specify ion heap.
Change-Id: Ib46d28aa1cf76efbfdadc8a624bf2d1ea483fe09
diff --git a/mm-video/vidc/vdec/src/omx_vdec.cpp b/mm-video/vidc/vdec/src/omx_vdec.cpp
old mode 100644
new mode 100755
index 0dd1ce7..74dc06e
--- a/mm-video/vidc/vdec/src/omx_vdec.cpp
+++ b/mm-video/vidc/vdec/src/omx_vdec.cpp
@@ -4122,7 +4122,7 @@
drv_ctx.op_buf_ion_info[i].ion_device_fd = alloc_map_ion_memory(
drv_ctx.op_buf.buffer_size,drv_ctx.op_buf.alignment,
&drv_ctx.op_buf_ion_info[i].ion_alloc_data,
- &drv_ctx.op_buf_ion_info[i].fd_ion_data,CACHED);
+ &drv_ctx.op_buf_ion_info[i].fd_ion_data,ION_FLAG_CACHED);
if(drv_ctx.op_buf_ion_info[i].ion_device_fd < 0) {
return OMX_ErrorInsufficientResources;
}
@@ -4715,7 +4715,7 @@
drv_ctx.ip_buf_ion_info[i].ion_device_fd = alloc_map_ion_memory(
drv_ctx.ip_buf.buffer_size,drv_ctx.op_buf.alignment,
&drv_ctx.ip_buf_ion_info[i].ion_alloc_data,
- &drv_ctx.ip_buf_ion_info[i].fd_ion_data,CACHED);
+ &drv_ctx.ip_buf_ion_info[i].fd_ion_data,ION_FLAG_CACHED);
if(drv_ctx.ip_buf_ion_info[i].ion_device_fd < 0) {
return OMX_ErrorInsufficientResources;
}
@@ -5034,7 +5034,7 @@
drv_ctx.op_buf_ion_info[i].ion_device_fd = alloc_map_ion_memory(
drv_ctx.op_buf.buffer_size,drv_ctx.op_buf.alignment,
&drv_ctx.op_buf_ion_info[i].ion_alloc_data,
- &drv_ctx.op_buf_ion_info[i].fd_ion_data, CACHED);
+ &drv_ctx.op_buf_ion_info[i].fd_ion_data, ION_FLAG_CACHED);
if (drv_ctx.op_buf_ion_info[i].ion_device_fd < 0) {
return OMX_ErrorInsufficientResources;
}
@@ -7516,17 +7516,19 @@
DEBUG_PRINT_ERROR("Invalid arguments to alloc_map_ion_memory\n");
return -EINVAL;
}
- if(!secure_mode && flag == CACHED)
- {
- ion_dev_flag = O_RDONLY;
- } else {
- ion_dev_flag = (O_RDONLY | O_DSYNC);
- }
+
+ ion_dev_flag = O_RDONLY;
fd = open (MEM_DEVICE, ion_dev_flag);
if (fd < 0) {
DEBUG_PRINT_ERROR("opening ion device failed with fd = %d\n", fd);
return fd;
}
+ alloc_data->flags = 0;
+ if(!secure_mode && (flag & ION_FLAG_CACHED))
+ {
+ alloc_data->flags |= ION_FLAG_CACHED;
+ }
+
alloc_data->len = buffer_size;
alloc_data->align = clip2(alignment);
if (alloc_data->align < 4096)
@@ -7534,15 +7536,16 @@
alloc_data->align = 4096;
}
if(secure_mode) {
- alloc_data->flags = (ION_HEAP(MEM_HEAP_ID) | ION_SECURE);
+ alloc_data->heap_mask = (ION_HEAP(MEM_HEAP_ID) | ION_SECURE);
} else {
#ifdef MAX_RES_720P
alloc_data->len = (buffer_size + (alloc_data->align - 1)) & ~(alloc_data->align - 1);
- alloc_data->flags = ION_HEAP(MEM_HEAP_ID);
+ alloc_data->heap_mask = ION_HEAP(MEM_HEAP_ID);
#else
- alloc_data->flags = (ION_HEAP(MEM_HEAP_ID) | ION_HEAP(ION_IOMMU_HEAP_ID));
+ alloc_data->heap_mask = (ION_HEAP(MEM_HEAP_ID) | ION_HEAP(ION_IOMMU_HEAP_ID));
#endif
}
+
rc = ioctl(fd,ION_IOC_ALLOC,alloc_data);
if (rc || !alloc_data->handle) {
DEBUG_PRINT_ERROR("\n ION ALLOC memory failed ");
@@ -8859,7 +8862,7 @@
drv_ctx.h264_mv.ion_device_fd = alloc_map_ion_memory(
size, 8192,
&drv_ctx.h264_mv.ion_alloc_data,
- &drv_ctx.h264_mv.fd_ion_data,CACHED);
+ &drv_ctx.h264_mv.fd_ion_data,ION_FLAG_CACHED);
if (drv_ctx.h264_mv.ion_device_fd < 0) {
return OMX_ErrorInsufficientResources;
}
diff --git a/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
index 65a3934..bf11a90 100644
--- a/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -7360,17 +7360,17 @@
DEBUG_PRINT_ERROR("Invalid arguments to alloc_map_ion_memory\n");
return -EINVAL;
}
- if(!secure_mode && flag == CACHED)
- {
- ion_dev_flag = O_RDONLY;
- } else {
- ion_dev_flag = (O_RDONLY | O_DSYNC);
- }
+ ion_dev_flag = O_RDONLY;
fd = open (MEM_DEVICE, ion_dev_flag);
if (fd < 0) {
DEBUG_PRINT_ERROR("opening ion device failed with fd = %d\n", fd);
return fd;
}
+ alloc_data->flags = 0;
+ if(!secure_mode && (flag & ION_FLAG_CACHED))
+ {
+ alloc_data->flags |= ION_FLAG_CACHED;
+ }
alloc_data->len = buffer_size;
alloc_data->align = clip2(alignment);
if (alloc_data->align < 4096)
@@ -7378,9 +7378,9 @@
alloc_data->align = 4096;
}
if(secure_mode) {
- alloc_data->flags = (ION_HEAP(MEM_HEAP_ID) | ION_SECURE);
+ alloc_data->heap_mask = (ION_HEAP(MEM_HEAP_ID) | ION_SECURE);
} else {
- alloc_data->flags = ION_HEAP(MEM_HEAP_ID);
+ alloc_data->heap_mask = ION_HEAP(MEM_HEAP_ID);
}
rc = ioctl(fd,ION_IOC_ALLOC,alloc_data);
if (rc || !alloc_data->handle) {
diff --git a/mm-video/vidc/venc/src/omx_video_base.cpp b/mm-video/vidc/venc/src/omx_video_base.cpp
old mode 100644
new mode 100755
index 8f0afb3..5af8d22
--- a/mm-video/vidc/venc/src/omx_video_base.cpp
+++ b/mm-video/vidc/venc/src/omx_video_base.cpp
@@ -2174,11 +2174,11 @@
#ifdef _MSM8974_
m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
&m_pInput_ion[i].ion_alloc_data,
- &m_pInput_ion[i].fd_ion_data,UNCACHED);
+ &m_pInput_ion[i].fd_ion_data,0);
#else
m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
&m_pInput_ion[i].ion_alloc_data,
- &m_pInput_ion[i].fd_ion_data,CACHED);
+ &m_pInput_ion[i].fd_ion_data,ION_FLAG_CACHED);
#endif
if(m_pInput_ion[i].ion_device_fd < 0) {
DEBUG_PRINT_ERROR("\nERROR:ION device open() Failed");
@@ -2382,12 +2382,12 @@
align_size = ((m_sOutPortDef.nBufferSize + 4095)/4096) * 4096;
m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size,
&m_pOutput_ion[i].ion_alloc_data,
- &m_pOutput_ion[i].fd_ion_data,UNCACHED);
+ &m_pOutput_ion[i].fd_ion_data,0);
#else
m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(
m_sOutPortDef.nBufferSize,
&m_pOutput_ion[i].ion_alloc_data,
- &m_pOutput_ion[i].fd_ion_data,CACHED);
+ &m_pOutput_ion[i].fd_ion_data,ION_FLAG_CACHED);
#endif
if(m_pOutput_ion[i].ion_device_fd < 0) {
DEBUG_PRINT_ERROR("\nERROR:ION device open() Failed");
@@ -2791,11 +2791,11 @@
#ifdef _MSM8974_
m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
&m_pInput_ion[i].ion_alloc_data,
- &m_pInput_ion[i].fd_ion_data,UNCACHED);
+ &m_pInput_ion[i].fd_ion_data,0);
#else
m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
&m_pInput_ion[i].ion_alloc_data,
- &m_pInput_ion[i].fd_ion_data,CACHED);
+ &m_pInput_ion[i].fd_ion_data,ION_FLAG_CACHED);
#endif
if(m_pInput_ion[i].ion_device_fd < 0) {
DEBUG_PRINT_ERROR("\nERROR:ION device open() Failed");
@@ -2959,11 +2959,11 @@
align_size = ((m_sOutPortDef.nBufferSize + 4095)/4096) * 4096;
m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size,
&m_pOutput_ion[i].ion_alloc_data,
- &m_pOutput_ion[i].fd_ion_data,UNCACHED);
+ &m_pOutput_ion[i].fd_ion_data,0);
#else
m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sOutPortDef.nBufferSize,
&m_pOutput_ion[i].ion_alloc_data,
- &m_pOutput_ion[i].fd_ion_data,CACHED);
+ &m_pOutput_ion[i].fd_ion_data,ION_FLAG_CACHED);
#endif
if(m_pOutput_ion[i].ion_device_fd < 0) {
DEBUG_PRINT_ERROR("\nERROR:ION device open() Failed");
@@ -4334,11 +4334,8 @@
DEBUG_PRINT_ERROR("\nInvalid input to alloc_map_ion_memory");
return -EINVAL;
}
- if(flag == CACHED) {
- ion_dev_flags = O_RDONLY;
- } else if(flag == UNCACHED) {
- ion_dev_flags = O_RDONLY | O_DSYNC;
- }
+
+ ion_dev_flags = O_RDONLY;
ion_device_fd = open (MEM_DEVICE,ion_dev_flags);
if(ion_device_fd < 0)
{
@@ -4347,11 +4344,12 @@
}
alloc_data->len = size;
alloc_data->align = 4096;
-#ifdef MAX_RES_720P
+ alloc_data->flags = flag;
+#ifdef MAX_RES_720P
alloc_data->len = (size + (alloc_data->align - 1)) & ~(alloc_data->align - 1);
- alloc_data->flags = ION_HEAP(MEM_HEAP_ID);
+ alloc_data->heap_mask = ION_HEAP(MEM_HEAP_ID);
#else
- alloc_data->flags = (ION_HEAP(MEM_HEAP_ID) |
+ alloc_data->heap_mask = (ION_HEAP(MEM_HEAP_ID) |
ION_HEAP(ION_IOMMU_HEAP_ID));
#endif
rc = ioctl(ion_device_fd,ION_IOC_ALLOC,alloc_data);
diff --git a/mm-video/vidc/venc/src/video_encoder_device.cpp b/mm-video/vidc/venc/src/video_encoder_device.cpp
old mode 100644
new mode 100755
index b5d49da..e107c0d
--- a/mm-video/vidc/venc/src/video_encoder_device.cpp
+++ b/mm-video/vidc/venc/src/video_encoder_device.cpp
@@ -1234,11 +1234,12 @@
recon_buff[count].alloc_data.len = size;
#ifdef MAX_RES_720P
- recon_buff[count].alloc_data.flags = ION_HEAP(MEM_HEAP_ID);
+ recon_buff[count].alloc_data.heap_mask = ION_HEAP(MEM_HEAP_ID);
#else
- recon_buff[count].alloc_data.flags = (ION_HEAP(MEM_HEAP_ID) |
+ recon_buff[count].alloc_data.heap_mask = (ION_HEAP(MEM_HEAP_ID) |
ION_HEAP(ION_IOMMU_HEAP_ID));
#endif
+ recon_buff[count].alloc_data.flags = ION_FLAG_CACHED;
recon_buff[count].alloc_data.align = clip2(alignment);
if (recon_buff[count].alloc_data.align != 8192)
recon_buff[count].alloc_data.align = 8192;
diff --git a/mm-video/vidc/venc/test/venc_test.cpp b/mm-video/vidc/venc/test/venc_test.cpp
index b58592e..c9b805f 100755
--- a/mm-video/vidc/venc/test/venc_test.cpp
+++ b/mm-video/vidc/venc/test/venc_test.cpp
@@ -404,7 +404,7 @@
return NULL;
#ifdef USE_ION
- ion_data.ion_device_fd = open (PMEM_DEVICE, O_RDONLY|O_DSYNC);
+ ion_data.ion_device_fd = open (PMEM_DEVICE, O_RDONLY);
if(ion_data.ion_device_fd < 0)
{
E("\nERROR: ION Device open() Failed");
@@ -412,8 +412,9 @@
}
nSize = (nSize + 4095) & (~4095);
ion_data.alloc_data.len = nSize;
- ion_data.alloc_data.flags = 0x1 << ION_CP_MM_HEAP_ID;
+ ion_data.alloc_data.heap_mask = 0x1 << ION_CP_MM_HEAP_ID;
ion_data.alloc_data.align = 4096;
+ ion_data.alloc_data.flags = 0;
rc = ioctl(ion_data.ion_device_fd,ION_IOC_ALLOC,&ion_data.alloc_data);
if(rc || !ion_data.alloc_data.handle) {