From: Kitae Kim Date: Fri, 18 Oct 2013 02:52:02 +0000 (+0900) Subject: brillcodec: handle flush_buffer routine. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c825600016218db32504d2ab58cbd5e31d1500be;p=sdk%2Femulator%2Femulator-kernel.git brillcodec: handle flush_buffer routine. Change-Id: I414167e8e14145a1b71d892e8492da60de8983c4 Signed-off-by: Kitae Kim --- diff --git a/drivers/maru/maru_brillcodec.c b/drivers/maru/maru_brillcodec.c index 859e9d40c7af..347a8468b459 100644 --- a/drivers/maru/maru_brillcodec.c +++ b/drivers/maru/maru_brillcodec.c @@ -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;