brillcodec: handle flush_buffer routine. 33/11733/1
authorKitae Kim <kt920.kim@samsung.com>
Fri, 18 Oct 2013 02:52:02 +0000 (11:52 +0900)
committerKitae Kim <kt920.kim@samsung.com>
Mon, 4 Nov 2013 06:31:55 +0000 (15:31 +0900)
Change-Id: I414167e8e14145a1b71d892e8492da60de8983c4
Signed-off-by: Kitae Kim <kt920.kim@samsung.com>
drivers/maru/maru_brillcodec.c

index 859e9d40c7afab82db7d949a3d1203063be90265..347a8468b4596ace802c72c42e9b7d411bd135cb 100644 (file)
@@ -94,34 +94,6 @@ MODULE_LICENSE("GPL2");
 #endif
 
 /* Define i/o and api values.  */
-
-#if 0
-enum codec_io_cmd {
-//     CODEC_CMD_COPY_TO_DEVICE_MEM = 5,       // user and driver
-//     CODEC_CMD_COPY_FROM_DEVICE_MEM,
-       CODEC_CMD_API_INDEX = 10,                       // driver and device
-       CODEC_CMD_CONTEXT_INDEX,
-       CODEC_CMD_FILE_INDEX,
-       CODEC_CMD_DEVICE_MEM_OFFSET,
-       CODEC_CMD_GET_THREAD_STATE,
-       CODEC_CMD_GET_QUEUE,
-       CODEC_CMD_POP_WRITE_QUEUE,
-       CODEC_CMD_RELEASE_AVCONTEXT,
-       CODEC_CMD_GET_VERSION = 20,                     // user, driver and device
-       CODEC_CMD_GET_ELEMENT_INFO,
-       CODEC_CMD_GET_CONTEXT_INDEX,
-       CODEC_CMD_SECURE_MEMORY= 30,
-       CODEC_CMD_RELEASE_MEMORY,
-       CODEC_CMD_USE_DEVICE_MEM,
-       CODEC_CMD_REQ_FROM_SMALL_MEMORY,
-       CODEC_CMD_REQ_FROM_MEDIUM_MEMORY,
-       CODEC_CMD_REQ_FROM_LARGE_MEMORY,
-       CODEC_CMD_S_SECURE_BUFFER,
-       CODEC_CMD_M_SECURE_BUFFER,
-       CODEC_CMD_L_SECURE_BUFFER,
-};
-#endif
-
 enum codec_io_cmd {
        CODEC_CMD_API_INDEX = 10,                       // driver and device
        CODEC_CMD_CONTEXT_INDEX,
@@ -152,6 +124,7 @@ enum codec_api_index {
        CODEC_ENCODE_AUDIO,
        CODEC_PICTURE_COPY,
        CODEC_DEINIT,
+       CODEC_FLUSH_BUFFERS,
 };
 
 struct codec_param {
@@ -462,6 +435,8 @@ static void release_m_device_memory(uint32_t mem_offset)
                                list_move_tail(&elem->entry, &maru_brill_codec->avail_m_memblk);
 
                                up(&m_buffer_sema);
+                               DEBUG("unlock m_buffer_sema: %d\n", m_buffer_sema.count);
+
                                break;
                        }
                }
@@ -530,7 +505,7 @@ static void release_l_device_memory(uint32_t mem_offset)
 
                                elem->blk_id = 0;
                                elem->occupied = false;
-                               list_move(&elem->entry, &maru_brill_codec->avail_l_memblk);
+                               list_move_tail(&elem->entry, &maru_brill_codec->avail_l_memblk);
 
                                up(&l_buffer_sema);
                                DEBUG("up l_buffer_semaphore: %d\n", l_buffer_sema.count);
@@ -611,7 +586,7 @@ static void release_device_memory(uint32_t mem_offset)
        if (mem_offset < (16 * 1024 * 1024)) {
                DEBUG("release small size of memory\n");
                release_s_device_memory(mem_offset);
-       } else if (mem_offset - (24 * 1024 * 1024)) {
+       } else if (mem_offset < (24 * 1024 * 1024)) {
                DEBUG("release medium size of memory\n");
                release_m_device_memory(mem_offset);
        } else {
@@ -777,7 +752,7 @@ static long maru_brill_codec_ioctl(struct file *file,
                }
                break;
        case CODEC_CMD_REQ_FROM_MEDIUM_MEMORY:
-               DEBUG("read large size of data from device memory\n");
+               DEBUG("read medium size of data from device memory\n");
 
                value =
                        secure_m_device_memory((uint32_t)file);
@@ -964,7 +939,7 @@ static long maru_brill_codec_ioctl(struct file *file,
                }
                break;
        case CODEC_CMD_GET_DATA_FROM_MEDIUM_BUFFER:
-               DEBUG("read large size of data from device memory\n");
+               DEBUG("read medium size of data from device memory\n");
 
                value =
                        secure_m_device_memory((uint32_t)file);
@@ -1133,13 +1108,7 @@ static ssize_t maru_brill_codec_write(struct file *file, const char __user *buf,
                                        maru_brill_codec->ioaddr + CODEC_CMD_API_INDEX);
                        LEAVE_CRITICAL_SECTION;
 
-                       if (api_index == CODEC_ENCODE_VIDEO) {
-                               // in case of medium and large size of data
-                               release_device_memory(ioparam.mem_offset);
-                       } else {
-                               // in case of small size of data
-                               release_s_device_memory(ioparam.mem_offset);
-                       }
+                       release_device_memory(ioparam.mem_offset);
 
                        wait_event_interruptible(wait_queue, context_flags[ctx_index] != 0);
                        context_flags[ctx_index] = 0;
@@ -1172,8 +1141,19 @@ static ssize_t maru_brill_codec_write(struct file *file, const char __user *buf,
                                        maru_brill_codec->ioaddr + CODEC_CMD_API_INDEX);
                        LEAVE_CRITICAL_SECTION;
                        break;
+               case CODEC_FLUSH_BUFFERS:
+                       ENTER_CRITICAL_SECTION;
+                       writel((uint32_t)file,
+                                       maru_brill_codec->ioaddr + CODEC_CMD_FILE_INDEX);
+                       writel((int32_t)ioparam.ctx_index,
+                                       maru_brill_codec->ioaddr + CODEC_CMD_CONTEXT_INDEX);
+                       writel((int32_t)ioparam.api_index,
+                                       maru_brill_codec->ioaddr + CODEC_CMD_API_INDEX);
+                       LEAVE_CRITICAL_SECTION;
+                       break;
+
                default:
-                       ERROR("wrong api command: %d", api_index);
+                       ERROR("invalid api command: %d", api_index);
        }
 
        return 0;