#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,
CODEC_ENCODE_AUDIO,
CODEC_PICTURE_COPY,
CODEC_DEINIT,
+ CODEC_FLUSH_BUFFERS,
};
struct codec_param {
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;
}
}
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);
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 {
}
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);
}
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);
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;
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;