aboutsummaryrefslogtreecommitdiff
path: root/kernel-headers
diff options
context:
space:
mode:
authorMister Oyster <oysterized@gmail.com>2017-01-02 12:44:35 +0100
committerMister Oyster <oysterized@gmail.com>2017-01-02 12:44:35 +0100
commita184d985bf43d3fe6eeba971bc6b32f79ea38b37 (patch)
tree6f6e56e090777cc149bc1ab39e5987cc2b03e867 /kernel-headers
initial releasecm-13.0
Diffstat (limited to 'kernel-headers')
-rw-r--r--kernel-headers/bits_api.h314
-rw-r--r--kernel-headers/cmdq_def.h317
-rw-r--r--kernel-headers/cmdq_driver.h80
-rw-r--r--kernel-headers/cmdq_engine_common.h71
-rw-r--r--kernel-headers/cmdq_event_common.h272
-rw-r--r--kernel-headers/cmdq_subsys_common.h32
-rw-r--r--kernel-headers/hal_api.h229
-rw-r--r--kernel-headers/hal_types_private.h15
-rw-r--r--kernel-headers/hal_types_public.h44
-rw-r--r--kernel-headers/hevcd_if.h98
-rw-r--r--kernel-headers/kd_camera_feature.h38
-rw-r--r--kernel-headers/kd_camera_feature_enum.h594
-rw-r--r--kernel-headers/kd_camera_feature_id.h92
-rw-r--r--kernel-headers/kd_imgsensor.h462
-rw-r--r--kernel-headers/kd_imgsensor_define.h1108
-rw-r--r--kernel-headers/kd_imgsensor_errcode.h41
-rw-r--r--kernel-headers/libmtk_cipher_export.h83
-rw-r--r--kernel-headers/linux/almk_drv.h31
-rw-r--r--kernel-headers/linux/cache.h58
-rw-r--r--kernel-headers/linux/ccci_ipc_task_ID.h40
-rw-r--r--kernel-headers/linux/cmdq/cmdq_event.h125
-rw-r--r--kernel-headers/linux/cmdq/cmdq_subsys.h25
-rw-r--r--kernel-headers/linux/ddp_od.h39
-rw-r--r--kernel-headers/linux/disp_session.h400
-rw-r--r--kernel-headers/linux/disp_svp.h266
-rw-r--r--kernel-headers/linux/fm.h631
-rw-r--r--kernel-headers/linux/hdmitx.h361
-rw-r--r--kernel-headers/linux/hwmsensor.h308
-rw-r--r--kernel-headers/linux/ion_debugger.h193
-rw-r--r--kernel-headers/linux/ion_drv.h169
-rw-r--r--kernel-headers/linux/kpd.h46
-rw-r--r--kernel-headers/linux/libmtk_cipher_export.h86
-rw-r--r--kernel-headers/linux/matv.h58
-rw-r--r--kernel-headers/linux/mman-proprietary.h21
-rw-r--r--kernel-headers/linux/mmc/sd_misc.h201
-rw-r--r--kernel-headers/linux/mmprofile.h102
-rw-r--r--kernel-headers/linux/mmprofile_internal.h100
-rw-r--r--kernel-headers/linux/mmprofile_static_event.h31
-rw-r--r--kernel-headers/linux/mt_sched.h21
-rw-r--r--kernel-headers/linux/mt_sched_ioctl.h17
-rw-r--r--kernel-headers/linux/mtcombo.h18
-rw-r--r--kernel-headers/linux/mtgpio.h54
-rw-r--r--kernel-headers/linux/mtk_agps_common.h157
-rw-r--r--kernel-headers/linux/mtk_ion.h28
-rw-r--r--kernel-headers/linux/mtkfb.h389
-rw-r--r--kernel-headers/linux/mtkfb_info.h90
-rw-r--r--kernel-headers/linux/mtkfb_vsync.h17
-rw-r--r--kernel-headers/linux/rrc_drv.h74
-rw-r--r--kernel-headers/linux/rtpm_prio.h83
-rw-r--r--kernel-headers/linux/sensors_io.h166
-rw-r--r--kernel-headers/linux/slab.h21
-rw-r--r--kernel-headers/linux/vow.h108
-rw-r--r--kernel-headers/sync_write.h80
-rw-r--r--kernel-headers/val_api_private.h57
-rw-r--r--kernel-headers/val_api_public.h402
-rw-r--r--kernel-headers/val_log.h56
-rw-r--r--kernel-headers/val_oal.h1419
-rw-r--r--kernel-headers/val_types_private.h235
-rw-r--r--kernel-headers/val_types_public.h581
-rw-r--r--kernel-headers/val_vcodec_utility.h79
-rw-r--r--kernel-headers/vcodec_OAL_v2.h497
-rw-r--r--kernel-headers/vcodec_customization.h19
-rw-r--r--kernel-headers/vcodec_dec_demuxer_if_v2.h98
-rw-r--r--kernel-headers/vcodec_if_v2.h991
-rw-r--r--kernel-headers/vcodec_log.h134
-rw-r--r--kernel-headers/vdec_drv_base.h128
-rw-r--r--kernel-headers/vdec_drv_if_dep.h152
-rw-r--r--kernel-headers/vdec_drv_if_private.h437
-rw-r--r--kernel-headers/vdec_drv_if_public.h943
-rw-r--r--kernel-headers/venc_drv_base.h102
-rw-r--r--kernel-headers/venc_drv_if_dep.h75
-rw-r--r--kernel-headers/venc_drv_if_private.h129
-rw-r--r--kernel-headers/venc_drv_if_public.h861
-rw-r--r--kernel-headers/video_custom_sp.h121
74 files changed, 16020 insertions, 0 deletions
diff --git a/kernel-headers/bits_api.h b/kernel-headers/bits_api.h
new file mode 100644
index 0000000..845b6d1
--- /dev/null
+++ b/kernel-headers/bits_api.h
@@ -0,0 +1,314 @@
+#ifndef _BITS_API_H_
+#define _BITS_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_public.h"
+#include "hal_api.h"
+
+typedef VAL_UINT32_T(*fgPrepare32FN)(VAL_HANDLE_T * a_phBitsHandle);
+
+/**
+ * @par Structure
+ * VBITS_HANDLE_T
+ * @par Description
+ * This is a parameter for bitstream parsing utility related function
+ */
+typedef struct __VBITS_HANDLE_T {
+ VAL_HANDLE_T hHALHandle; /* /< HAL Handle */
+ VAL_HANDLE_T hVALHandle; /* /< VAL Handle */
+ VAL_MEM_ADDR_T BitsStart; /* /< Bits Start */
+ VAL_MEMORY_T rHandleMem; /* /< Handle memory */
+ VAL_UINT32_T nReadingMode; /* /< 0 for software, 1 for mmap, 2 for hardware */
+ VAL_ULONG_T StartAddr; /* /< used for software mode fast access */
+ VAL_ULONG_T nSize; /* /< Size */
+ VAL_UINT32_T nBitCnt; /* /< bits count */
+ VAL_UINT32_T nZeroCnt; /* /< zero count */
+ VAL_UINT32_T Cur32Bits; /* /< current 32 bits */
+ VAL_UINT32_T CurBitCnt; /* /< current bits count */
+ VAL_UINT32_T n03RemoveCount; /* /< 03 Remove Count */
+ VAL_UINT32_T n03CountBit; /* /< 03 Count Bit */
+ VAL_INT32_T n03FirstIndex; /* /< 03 First Index */
+ VAL_INT32_T n03SecondIndex; /* /< 03 Second Index */
+ VAL_UINT32_T n03RemoveIgnore; /* /< 03 Remove Ignore */
+ VAL_BOOL_T bFirstCheck; /* /< First Check */
+ VAL_BOOL_T bEverRemove; /* /< Ever Remove */
+ VAL_BOOL_T bIgnoreByBS; /* /< Ignore By BS */
+ VAL_BOOL_T bEOF; /* /< EOF */
+ fgPrepare32FN Prepare32Bits; /* /< Prepare 32 Bits */
+ VAL_DRIVER_TYPE_T vFormat; /* /< Format */
+ VAL_UINT32_T value; /* /< value */
+} VBITS_HANDLE_T;
+
+
+/**
+ * @par Enumeration
+ * VBITS_READTYPE_T
+ * @par Description
+ * This is the item used for bits read type
+ */
+typedef enum VBITS_READTYPE_T {
+ VBITS_SOFTWARE = 0, /* /< software */
+ VBITS_MMAP, /* /< mmap */
+ VBITS_HARDWARE, /* /< hardware */
+ VBITS_MAX /* /< MAX value */
+} VBITS_READTYPE_T;
+/*=============================================================================
+ * Function Declaration
+ *===========================================================================*/
+
+
+/**
+ * @par Function
+ * eBufEnable
+ * @par Description
+ * The hal init & HW enable function
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * hHALHandle [IN/OUT] The hal handle
+ * @param
+ * nMode [IN] VBITS_READTYPE_T
+ * @param
+ * vFormat [IN] VAL_DRIVER_TYPE_T
+ * @par Returns
+ * VAL_UINT32_T, return VAL_RESULT_NO_ERROR if success, return VAL_RESULT_UNKNOWN_ERROR if failed
+ */
+VAL_UINT32_T eBufEnable(
+ VAL_HANDLE_T *a_phBitsHandle,
+ VAL_HANDLE_T hHALHandle,
+ VAL_UINT32_T nMode,
+ VAL_DRIVER_TYPE_T vFormat
+);
+
+
+/**
+ * @par Function
+ * eBufEnable
+ * @par Description
+ * The HW disable function
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * hHALHandle [IN/OUT] The hal handle
+ * @param
+ * nMode [IN] VBITS_READTYPE_T
+ * @param
+ * vFormat [IN] VAL_DRIVER_TYPE_T
+ * @par Returns
+ * VAL_UINT32_T, return VAL_RESULT_NO_ERROR if success, return VAL_RESULT_UNKNOWN_ERROR if failed
+ */
+VAL_UINT32_T eBufDisable(
+ VAL_HANDLE_T *a_phBitsHandle,
+ VAL_HANDLE_T hHALHandle,
+ VAL_UINT32_T nMode,
+ VAL_DRIVER_TYPE_T vFormat
+);
+
+
+/**
+ * @par Function
+ * eBufInit
+ * @par Description
+ * The common init function
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * hVALHandle [IN/OUT] The val handle
+ * @param
+ * hHALHandle [IN/OUT] The hal handle
+ * @param
+ * rBufAddrStart [IN] The buffer start address
+ * @param
+ * nMode [IN] VBITS_READTYPE_T
+ * @param
+ * vFormat [IN] VAL_DRIVER_TYPE_T
+ * @par Returns
+ * VAL_RESULT_T, return VAL_RESULT_NO_ERROR if success, return others if failed
+ */
+VAL_RESULT_T eBufInit(
+ VAL_HANDLE_T *a_phBitsHandle,
+ VAL_HANDLE_T hVALHandle,
+ VAL_HANDLE_T hHALHandle,
+ VAL_MEM_ADDR_T rBufAddrStart,
+ VAL_UINT32_T nMode,
+ VAL_DRIVER_TYPE_T vFormat
+);
+
+
+/**
+ * @par Function
+ * eBufDeinit
+ * @par Description
+ * The common deinit function
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_RESULT_T, return VAL_RESULT_NO_ERROR if success, return others if failed
+ */
+VAL_RESULT_T eBufDeinit(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * eBufGetBitCnt
+ * @par Description
+ * The function is used to get current bit count
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_UINT32_T, return current bit count
+ */
+VAL_UINT32_T eBufGetBitCnt(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * eBufGetBits
+ * @par Description
+ * The function is used to get current bits by numBits
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * numBits [IN] The number bits
+ * @par Returns
+ * VAL_UINT32_T, return current bits by numBits
+ */
+VAL_UINT32_T eBufGetBits(VAL_HANDLE_T *a_phBitsHandle, VAL_UINT32_T numBits);
+
+
+/**
+ * @par Function
+ * eBufNextBits
+ * @par Description
+ * The function is used to show current bits by numBits
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * numBits [IN] The number bits
+ * @par Returns
+ * VAL_UINT32_T, return current bits by numBits
+ */
+VAL_UINT32_T eBufNextBits(VAL_HANDLE_T *a_phBitsHandle, VAL_UINT32_T numBits);
+
+
+/**
+ * @par Function
+ * eBufGetUEGolomb
+ * @par Description
+ * The function is used to get unsigned EGolomb bits
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_UINT32_T, return current unsigned EGolomb bits
+ */
+VAL_UINT32_T eBufGetUEGolomb(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * eBufGetSEGolomb
+ * @par Description
+ * The function is used to get signed EGolomb bits
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_INT32_T, return current signed EGolomb bits
+ */
+VAL_INT32_T eBufGetSEGolomb(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * eBufCheckEOF
+ * @par Description
+ * The function is used to check EOF bitstream
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_BOOL_T, return EOF or not
+ */
+VAL_BOOL_T eBufCheckEOF(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * eBufGetBufSize
+ * @par Description
+ * The function is used to get buffer size
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_BOOL_T, return buffer size
+ */
+VAL_UINT32_T eBufGetBufSize(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * NextBytesAlignment
+ * @par Description
+ * The function is used to jump bitstream pointer to next bytesalignment
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * nBytesAlignment [IN] BytesAlignment
+ * @par Returns
+ * void
+ */
+void NextBytesAlignment(VAL_HANDLE_T *a_phBitsHandle, VAL_UINT32_T nBytesAlignment);
+
+
+/**
+ * @par Function
+ * eBufInitBS
+ * @par Description
+ * The function is used to init bit stream
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * cmd_queue [IN] command queue
+ * @param
+ * pIndex [IN] command queue index
+ * @par Returns
+ * VAL_BOOL_T, return VAL_TRUE if success, return VAL_FALSE if failed
+ */
+VAL_BOOL_T eBufInitBS(VAL_HANDLE_T *a_phBitsHandle, P_VCODEC_DRV_CMD_T cmd_queue, VAL_UINT32_T *pIndex);
+
+
+/**
+ * @par Function
+ * eBufGetPAddr
+ * @par Description
+ * The function is used to get physical address
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @par Returns
+ * VAL_UINT32_T, return physical address
+ */
+VAL_UINT32_T eBufGetPAddr(VAL_HANDLE_T *a_phBitsHandle);
+
+
+/**
+ * @par Function
+ * eBufGetPAddr
+ * @par Description
+ * The function is used to re init
+ * @param
+ * a_phBitsHandle [IN/OUT] The bits handle
+ * @param
+ * nBytes [IN] The Bytes
+ * @param
+ * nBits [IN] The Bits
+ * @par Returns
+ * VAL_BOOL_T, return VAL_TRUE if success, return VAL_FALSE if failed
+ */
+VAL_BOOL_T eBufReInite(VAL_HANDLE_T *a_phBitsHandle, VAL_UINT32_T nBytes, VAL_UINT32_T nBits);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_API_H_ */
diff --git a/kernel-headers/cmdq_def.h b/kernel-headers/cmdq_def.h
new file mode 100644
index 0000000..3bc347f
--- /dev/null
+++ b/kernel-headers/cmdq_def.h
@@ -0,0 +1,317 @@
+#ifndef __CMDQ_DEF_H__
+#define __CMDQ_DEF_H__
+
+#include <linux/kernel.h>
+
+#define CMDQ_DRIVER_DEVICE_NAME "mtk_cmdq"
+
+/* Load HW event from device tree */
+#define CMDQ_DVENT_FROM_DTS
+
+/* #define CMDQ_COMMON_ENG_SUPPORT */
+#ifdef CMDQ_COMMON_ENG_SUPPORT
+#include "cmdq_engine_common.h"
+#else
+#include "cmdq_engine.h"
+#endif
+
+#define CMDQ_SPECIAL_SUBSYS_ADDR (99)
+
+#define CMDQ_GPR_SUPPORT
+#define CMDQ_PROFILE_MARKER_SUPPORT
+
+#ifdef CMDQ_PROFILE_MARKER_SUPPORT
+#define CMDQ_MAX_PROFILE_MARKER_IN_TASK (5)
+#endif
+
+#define CMDQ_INVALID_THREAD (-1)
+
+#define CMDQ_MAX_THREAD_COUNT (16)
+#define CMDQ_MAX_TASK_IN_THREAD (16)
+#define CMDQ_MAX_READ_SLOT_COUNT (4)
+#define CMDQ_INIT_FREE_TASK_COUNT (8)
+
+#define CMDQ_MAX_HIGH_PRIORITY_THREAD_COUNT (7) /* Thread that are high-priority (display threads) */
+#define CMDQ_MIN_SECURE_THREAD_ID (12)
+#define CMDQ_MAX_SECURE_THREAD_COUNT (3)
+typedef enum CMDQ_SCENARIO_ENUM {
+ CMDQ_SCENARIO_JPEG_DEC = 0,
+ CMDQ_SCENARIO_PRIMARY_DISP = 1,
+ CMDQ_SCENARIO_PRIMARY_MEMOUT = 2,
+ CMDQ_SCENARIO_PRIMARY_ALL = 3,
+ CMDQ_SCENARIO_SUB_DISP = 4,
+ CMDQ_SCENARIO_SUB_MEMOUT = 5,
+ CMDQ_SCENARIO_SUB_ALL = 6,
+ CMDQ_SCENARIO_MHL_DISP = 7,
+ CMDQ_SCENARIO_RDMA0_DISP = 8,
+ CMDQ_SCENARIO_RDMA0_COLOR0_DISP = 9,
+ CMDQ_SCENARIO_RDMA1_DISP = 10,
+
+ /* Trigger loop scenario does not enable HWs */
+ CMDQ_SCENARIO_TRIGGER_LOOP = 11,
+
+ /* client from user space, so the cmd buffer is in user space. */
+ CMDQ_SCENARIO_USER_MDP = 12,
+
+ CMDQ_SCENARIO_DEBUG = 13,
+ CMDQ_SCENARIO_DEBUG_PREFETCH = 14,
+
+ /* ESD check */
+ CMDQ_SCENARIO_DISP_ESD_CHECK = 15,
+ /* for screen capture to wait for RDMA-done without blocking config thread */
+ CMDQ_SCENARIO_DISP_SCREEN_CAPTURE = 16,
+
+ /* notifiy there are some tasks exec done in secure path */
+ CMDQ_SCENARIO_SECURE_NOTIFY_LOOP = 17,
+
+ CMDQ_SCENARIO_DISP_PRIMARY_DISABLE_SECURE_PATH = 18,
+ CMDQ_SCENARIO_DISP_SUB_DISABLE_SECURE_PATH = 19,
+
+ /* color path request from kernel */
+ CMDQ_SCENARIO_DISP_COLOR = 20,
+ /* color path request from user sapce */
+ CMDQ_SCENARIO_USER_DISP_COLOR = 21,
+
+ /* [phased out]client from user space, so the cmd buffer is in user space. */
+ CMDQ_SCENARIO_USER_SPACE = 22,
+
+ CMDQ_SCENARIO_DISP_MIRROR_MODE = 23,
+
+ CMDQ_SCENARIO_DISP_CONFIG_AAL = 24,
+ CMDQ_SCENARIO_DISP_CONFIG_PRIMARY_GAMMA = 25,
+ CMDQ_SCENARIO_DISP_CONFIG_SUB_GAMMA = 26,
+ CMDQ_SCENARIO_DISP_CONFIG_PRIMARY_DITHER = 27,
+ CMDQ_SCENARIO_DISP_CONFIG_SUB_DITHER = 28,
+ CMDQ_SCENARIO_DISP_CONFIG_PRIMARY_PWM = 29,
+ CMDQ_SCENARIO_DISP_CONFIG_SUB_PWM = 30,
+ CMDQ_SCENARIO_DISP_CONFIG_PRIMARY_PQ = 31,
+ CMDQ_SCENARIO_DISP_CONFIG_SUB_PQ = 32,
+ CMDQ_SCENARIO_DISP_CONFIG_OD = 33,
+
+ CMDQ_SCENARIO_RDMA2_DISP = 34,
+
+ CMDQ_SCENARIO_HIGHP_TRIGGER_LOOP = 35, /* for primary trigger loop enable pre-fetch usage */
+ CMDQ_SCENARIO_LOWP_TRIGGER_LOOP = 36, /* for low priority monitor loop to polling bus status*/
+
+ CMDQ_SCENARIO_KERNEL_CONFIG_GENERAL = 37,
+
+ CMDQ_MAX_SCENARIO_COUNT /* ALWAYS keep at the end */
+} CMDQ_SCENARIO_ENUM;
+
+typedef enum CMDQ_DATA_REGISTER_ENUM {
+ /* Value Reg, we use 32-bit */
+ /* Address Reg, we use 64-bit */
+ /* Note that R0-R15 and P0-P7 actullay share same memory */
+ /* and R1 cannot be used. */
+
+ CMDQ_DATA_REG_JPEG = 0x00, /* R0 */
+ CMDQ_DATA_REG_JPEG_DST = 0x11, /* P1 */
+
+ CMDQ_DATA_REG_PQ_COLOR = 0x04, /* R4 */
+ CMDQ_DATA_REG_PQ_COLOR_DST = 0x13, /* P3 */
+
+ CMDQ_DATA_REG_2D_SHARPNESS_0 = 0x05, /* R5 */
+ CMDQ_DATA_REG_2D_SHARPNESS_0_DST = 0x14, /* P4 */
+
+ CMDQ_DATA_REG_2D_SHARPNESS_1 = 0x0a, /* R10 */
+ CMDQ_DATA_REG_2D_SHARPNESS_1_DST = 0x16, /* P6 */
+
+ CMDQ_DATA_REG_DEBUG = 0x0b, /* R11 */
+ CMDQ_DATA_REG_DEBUG_DST = 0x17, /* P7 */
+
+ /* sentinel value for invalid register ID */
+ CMDQ_DATA_REG_INVALID = -1,
+} CMDQ_DATA_REGISTER_ENUM;
+
+typedef enum CMDQ_MDP_PA_BASE_ENUM {
+ CMDQ_MDP_PA_BASE_MM_MUTEX,
+ CMDQ_MAX_MDP_PA_BASE_COUNT, /* ALWAYS keep at the end */
+} CMDQ_MDP_PA_BASE_ENUM;
+
+/* CMDQ Events */
+#undef DECLARE_CMDQ_EVENT
+#ifdef CMDQ_DVENT_FROM_DTS
+#define DECLARE_CMDQ_EVENT(name_struct, val, dts_name) name_struct = val,
+typedef enum CMDQ_EVENT_ENUM {
+#include "cmdq_event_common.h"
+} CMDQ_EVENT_ENUM;
+#else
+#define DECLARE_CMDQ_EVENT(name_struct, val) name_struct = val,
+typedef enum CMDQ_EVENT_ENUM {
+#if CMDQ_D1_EVENT
+#include "cmdq_event_D1.h"
+#elif CMDQ_D2_EVENT
+#include "cmdq_event_D2.h"
+#elif CMDQ_D3_EVENT
+#include "cmdq_event_D3.h"
+#else
+#include "cmdq_event.h"
+#endif
+} CMDQ_EVENT_ENUM;
+#endif
+#undef DECLARE_CMDQ_EVENT
+
+/* CMDQ subsys */
+#undef DECLARE_CMDQ_SUBSYS
+#define DECLARE_CMDQ_SUBSYS(name_struct, val, grp, dts_name) name_struct = val,
+typedef enum CMDQ_SUBSYS_ENUM {
+#include "cmdq_subsys_common.h"
+
+ /* ALWAYS keep at the end */
+ CMDQ_SUBSYS_MAX_COUNT
+} CMDQ_SUBSYS_ENUM;
+#undef DECLARE_CMDQ_SUBSYS
+
+#define CMDQ_SUBSYS_GRPNAME_MAX (30)
+/* GCE subsys information */
+typedef struct SubsysStruct {
+ uint32_t msb;
+ int32_t subsysID;
+ uint32_t mask;
+ char grpName[CMDQ_SUBSYS_GRPNAME_MAX];
+} SubsysStruct;
+
+typedef struct cmdqDTSDataStruct {
+ /* [Out] GCE event table */
+ int32_t eventTable[CMDQ_SYNC_TOKEN_MAX];
+ /* [Out] GCE subsys ID table */
+ SubsysStruct subsys[CMDQ_SUBSYS_MAX_COUNT];
+ /* [Out] MDP Base address */
+ uint32_t MDPBaseAddress[CMDQ_MAX_MDP_PA_BASE_COUNT];
+} cmdqDTSDataStruct;
+
+/* Custom "wide" pointer type for 64-bit job handle (pointer to VA) */
+typedef unsigned long long cmdqJobHandle_t;
+/* Custom "wide" pointer type for 64-bit compatibility. Always cast from uint32_t*. */
+typedef unsigned long long cmdqU32Ptr_t;
+
+#define CMDQ_U32_PTR(x) ((uint32_t *)(unsigned long)x)
+
+typedef struct cmdqReadRegStruct {
+ uint32_t count; /* number of entries in regAddresses */
+ cmdqU32Ptr_t regAddresses; /* an array of 32-bit register addresses (uint32_t) */
+} cmdqReadRegStruct;
+
+typedef struct cmdqRegValueStruct {
+ /* number of entries in result */
+ uint32_t count;
+
+ /* array of 32-bit register values (uint32_t). */
+ /* in the same order as cmdqReadRegStruct */
+ cmdqU32Ptr_t regValues;
+} cmdqRegValueStruct;
+
+typedef struct cmdqReadAddressStruct {
+ uint32_t count; /* [IN] number of entries in result. */
+
+ /* [IN] array of physical addresses to read. */
+ /* these value must allocated by CMDQ_IOCTL_ALLOC_WRITE_ADDRESS ioctl */
+ /* */
+ /* indeed param dmaAddresses should be UNSIGNED LONG type for 64 bit kernel. */
+ /* Considering our plartform supports max 4GB RAM(upper-32bit don't care for SW) */
+ /* and consistent common code interface, remain uint32_t type. */
+ cmdqU32Ptr_t dmaAddresses;
+
+ cmdqU32Ptr_t values; /* [OUT] uint32_t values that dmaAddresses point into */
+} cmdqReadAddressStruct;
+
+/*
+ * Secure address metadata:
+ * According to handle type, translate handle and replace (_d)th instruciton to
+ * 1. sec_addr = hadnle_sec_base_addr(baseHandle) + offset(_b)
+ * 2. sec_mva = mva( hadnle_sec_base_addr(baseHandle) + offset(_b) )
+ * 3. secure world normal mva = map(baseHandle)
+ * . pass normal mva to parameter baseHandle
+ * . use case: OVL reads from secure and normal buffers at the same time)
+ */
+typedef enum CMDQ_SEC_ADDR_METADATA_TYPE {
+ CMDQ_SAM_H_2_PA = 0, /* sec handle to sec PA */
+ CMDQ_SAM_H_2_MVA = 1, /* sec handle to sec MVA */
+ CMDQ_SAM_NMVA_2_MVA = 2, /* map normal MVA to secure world */
+} CMDQ_SEC_ADDR_METADATA_TYPE;
+
+typedef struct cmdqSecAddrMetadataStruct {
+ /* [IN]_d, index of instruction. Update its argB value to real PA/MVA in secure world */
+ uint32_t instrIndex;
+
+ CMDQ_SEC_ADDR_METADATA_TYPE type; /* [IN] addr handle type */
+ uint32_t baseHandle; /* [IN]_h, secure address handle */
+ uint32_t offset; /* [IN]_b, buffser offset to secure handle */
+ uint32_t size; /* buffer size */
+ uint32_t port; /* hw port id (i.e. M4U port id) */
+} cmdqSecAddrMetadataStruct;
+
+typedef struct cmdqSecDataStruct {
+ bool isSecure; /* [IN]true for secure command */
+
+ /* address metadata, used to translate secure buffer PA related instruction in secure world */
+ uint32_t addrMetadataCount; /* [IN] count of element in addrList */
+ cmdqU32Ptr_t addrMetadatas; /* [IN] array of cmdqSecAddrMetadataStruct */
+ uint32_t addrMetadataMaxCount; /*[Reserved] */
+
+ uint64_t enginesNeedDAPC;
+ uint64_t enginesNeedPortSecurity;
+
+ /* [Reserved] This is for CMDQ driver usage itself. Not for client. */
+ int32_t waitCookie; /* task index in thread's tasklist. -1 for not in tasklist. */
+ bool resetExecCnt; /* reset HW thread in SWd */
+} cmdqSecDataStruct;
+
+#ifdef CMDQ_PROFILE_MARKER_SUPPORT
+typedef struct cmdqProfileMarkerStruct {
+ uint32_t count;
+ long long hSlot; /* i.e. cmdqBackupSlotHandle, physical start address of backup slot */
+ cmdqU32Ptr_t tag[CMDQ_MAX_PROFILE_MARKER_IN_TASK];
+} cmdqProfileMarkerStruct;
+#endif
+
+typedef struct cmdqCommandStruct {
+ /* [IN] deprecated. will remove in the future. */
+ uint32_t scenario;
+ /* [IN] task schedule priority. this is NOT HW thread priority. */
+ uint32_t priority;
+ /* [IN] bit flag of engines used. */
+ uint64_t engineFlag;
+ /* [IN] pointer to instruction buffer. Use 64-bit for compatibility. */
+ /* This must point to an 64-bit aligned uint32_t array */
+ cmdqU32Ptr_t pVABase;
+ /* [IN] size of instruction buffer, in bytes. */
+ uint32_t blockSize;
+ /* [IN] request to read register values at the end of command */
+ cmdqReadRegStruct regRequest;
+ /* [OUT] register values of regRequest */
+ cmdqRegValueStruct regValue;
+ /* [IN/OUT] physical addresses to read value */
+ cmdqReadAddressStruct readAddress;
+ /*[IN] secure execution data */
+ cmdqSecDataStruct secData;
+ /* [IN] set to non-zero to enable register debug dump. */
+ uint32_t debugRegDump;
+ /* [Reserved] This is for CMDQ driver usage itself. Not for client. Do not access this field from User Space */
+ cmdqU32Ptr_t privateData;
+#ifdef CMDQ_PROFILE_MARKER_SUPPORT
+ cmdqProfileMarkerStruct profileMarker;
+#endif
+} cmdqCommandStruct;
+
+typedef enum CMDQ_CAP_BITS {
+ /* bit 0: TRUE if WFE instruction support is ready. FALSE if we need to POLL instead. */
+ CMDQ_CAP_WFE = 0,
+} CMDQ_CAP_BITS;
+
+
+/**
+ * reply struct for cmdq_sec_cancel_error_task
+ */
+
+typedef struct {
+ /* [OUT] */
+ bool throwAEE;
+ bool hasReset;
+ int32_t irqFlag;
+ uint32_t errInstr[2];
+ uint32_t regValue;
+ uint32_t pc;
+} cmdqSecCancelTaskResultStruct;
+
+#endif /* __CMDQ_DEF_H__ */
diff --git a/kernel-headers/cmdq_driver.h b/kernel-headers/cmdq_driver.h
new file mode 100644
index 0000000..97c7228
--- /dev/null
+++ b/kernel-headers/cmdq_driver.h
@@ -0,0 +1,80 @@
+#ifndef __CMDQ_DRIVER_H__
+#define __CMDQ_DRIVER_H__
+
+#include <linux/kernel.h>
+#include "cmdq_def.h"
+
+typedef struct cmdqUsageInfoStruct {
+ uint32_t count[CMDQ_MAX_ENGINE_COUNT]; /* [OUT] current engine ref count */
+} cmdqUsageInfoStruct;
+
+typedef struct cmdqJobStruct {
+ struct cmdqCommandStruct command; /* [IN] the job to perform */
+ cmdqJobHandle_t hJob; /* [OUT] handle to resulting job */
+} cmdqJobStruct;
+
+typedef struct cmdqJobResultStruct {
+ cmdqJobHandle_t hJob; /* [IN] Job handle from CMDQ_IOCTL_ASYNC_JOB_EXEC */
+ uint64_t engineFlag; /* [OUT] engine flag passed down originally */
+
+ /* [IN/OUT] read register values, if any. */
+ /* as input, the "count" field must represent */
+ /* buffer space pointed by "regValues". */
+ /* Upon return, CMDQ driver fills "count" with */
+ /* actual requested register count. */
+ /* However, if the input "count" is too small, */
+ /* -ENOMEM is returned, and "count" is filled */
+ /* with requested register count. */
+ cmdqRegValueStruct regValue;
+
+ cmdqReadAddressStruct readAddress; /* [IN/OUT] physical address to read */
+} cmdqJobResultStruct;
+
+typedef struct cmdqWriteAddressStruct {
+ /* [IN] count of the writable buffer (unit is # of uint32_t, NOT in byte) */
+ uint32_t count;
+
+ /* [OUT] When Alloc, this is the resulting PA. It is guaranteed to be continuous. */
+ /* [IN] When Free, please pass returned address down to ioctl. */
+ /* */
+ /* indeed param startPA should be UNSIGNED LONG type for 64 bit kernel. */
+ /* Considering our plartform supports max 4GB RAM(upper-32bit don't care for SW) */
+ /* and consistent common code interface, remain uint32_t type. */
+ uint32_t startPA;
+} cmdqWriteAddressStruct;
+
+#define CMDQ_IOCTL_MAGIC_NUMBER 'x'
+
+#define CMDQ_IOCTL_LOCK_MUTEX _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 1, int)
+#define CMDQ_IOCTL_UNLOCK_MUTEX _IOR(CMDQ_IOCTL_MAGIC_NUMBER, 2, int)
+#define CMDQ_IOCTL_EXEC_COMMAND _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 3, cmdqCommandStruct)
+#define CMDQ_IOCTL_QUERY_USAGE _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 4, cmdqUsageInfoStruct)
+
+/* */
+/* Async operations */
+/* */
+#define CMDQ_IOCTL_ASYNC_JOB_EXEC _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 5, cmdqJobStruct)
+#define CMDQ_IOCTL_ASYNC_JOB_WAIT_AND_CLOSE _IOR(CMDQ_IOCTL_MAGIC_NUMBER, 6, cmdqJobResultStruct)
+
+#define CMDQ_IOCTL_ALLOC_WRITE_ADDRESS _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 7, cmdqWriteAddressStruct)
+#define CMDQ_IOCTL_FREE_WRITE_ADDRESS _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 8, cmdqWriteAddressStruct)
+#define CMDQ_IOCTL_READ_ADDRESS_VALUE _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 9, cmdqReadAddressStruct)
+
+/* */
+/* Chip capability query. output parameter is a bit field. */
+/* Bit definition is CMDQ_CAP_BITS. */
+/* */
+#define CMDQ_IOCTL_QUERY_CAP_BITS _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 10, int)
+
+/* */
+/* HW info. from DTS */
+/* */
+#define CMDQ_IOCTL_QUERY_DTS _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 11, cmdqDTSDataStruct)
+
+/* */
+/* Notify MDP will use specified engine before really use. */
+/* input int is same as EngineFlag. */
+/* */
+#define CMDQ_IOCTL_NOTIFY_ENGINE _IOW(CMDQ_IOCTL_MAGIC_NUMBER, 12, uint64_t)
+
+#endif /* __CMDQ_DRIVER_H__ */
diff --git a/kernel-headers/cmdq_engine_common.h b/kernel-headers/cmdq_engine_common.h
new file mode 100644
index 0000000..bfb211d
--- /dev/null
+++ b/kernel-headers/cmdq_engine_common.h
@@ -0,0 +1,71 @@
+#ifndef __CMDQ_ENGINE_COMMON_H__
+#define __CMDQ_ENGINE_COMMON_H__
+
+typedef enum CMDQ_ENG_ENUM {
+ /* ISP */
+ CMDQ_ENG_ISP_IMGI = 0,
+ CMDQ_ENG_ISP_IMGO, /* 1 */
+ CMDQ_ENG_ISP_IMG2O, /* 2 */
+
+ /* MDP */
+ CMDQ_ENG_MDP_CAMIN, /* 3 */
+ CMDQ_ENG_MDP_RDMA0, /* 4 */
+ CMDQ_ENG_MDP_RDMA1, /* 5 */
+ CMDQ_ENG_MDP_RSZ0, /* 6 */
+ CMDQ_ENG_MDP_RSZ1, /* 7 */
+ CMDQ_ENG_MDP_RSZ2, /* 8 */
+ CMDQ_ENG_MDP_TDSHP0, /* 9 */
+ CMDQ_ENG_MDP_TDSHP1, /* 10 */
+ CMDQ_ENG_MDP_COLOR0, /* 11 */
+ CMDQ_ENG_MDP_MOUT0, /* 12 */
+ CMDQ_ENG_MDP_MOUT1, /* 13 */
+ CMDQ_ENG_MDP_WROT0, /* 14 */
+ CMDQ_ENG_MDP_WROT1, /* 15 */
+ CMDQ_ENG_MDP_WDMA, /* 16 */
+
+ /* JPEG & VENC */
+ CMDQ_ENG_JPEG_ENC, /* 17 */
+ CMDQ_ENG_VIDEO_ENC, /* 18 */
+ CMDQ_ENG_JPEG_DEC, /* 19 */
+ CMDQ_ENG_JPEG_REMDC, /* 20 */
+
+ /* DISP */
+ CMDQ_ENG_DISP_UFOE, /* 21 */
+ CMDQ_ENG_DISP_AAL, /* 22 */
+ CMDQ_ENG_DISP_COLOR0, /* 23 */
+ CMDQ_ENG_DISP_COLOR1, /* 24 */
+ CMDQ_ENG_DISP_RDMA0, /* 25 */
+ CMDQ_ENG_DISP_RDMA1, /* 26 */
+ CMDQ_ENG_DISP_RDMA2, /* 27 */
+ CMDQ_ENG_DISP_WDMA0, /* 28 */
+ CMDQ_ENG_DISP_WDMA1, /* 29 */
+ CMDQ_ENG_DISP_OVL0, /* 30 */
+ CMDQ_ENG_DISP_OVL1, /* 31 */
+ CMDQ_ENG_DISP_OVL2, /* 32 */
+ CMDQ_ENG_DISP_2L_OVL0, /* 33 */
+ CMDQ_ENG_DISP_2L_OVL1, /* 34 */
+ CMDQ_ENG_DISP_2L_OVL2, /* 35 */
+ CMDQ_ENG_DISP_GAMMA, /* 36 */
+ CMDQ_ENG_DISP_MERGE, /* 37 */
+ CMDQ_ENG_DISP_SPLIT0, /* 38 */
+ CMDQ_ENG_DISP_SPLIT1, /* 39 */
+ CMDQ_ENG_DISP_DSI0_VDO, /* 40 */
+ CMDQ_ENG_DISP_DSI1_VDO, /* 41 */
+ CMDQ_ENG_DISP_DSI0_CMD, /* 42 */
+ CMDQ_ENG_DISP_DSI1_CMD, /* 43 */
+ CMDQ_ENG_DISP_DSI0, /* 44 */
+ CMDQ_ENG_DISP_DSI1, /* 45 */
+ CMDQ_ENG_DISP_DPI, /* 46 */
+
+ /* DPE */
+ CMDQ_ENG_DPE, /* 47 */
+
+ /* temp: CMDQ internal usage */
+ CMDQ_ENG_CMDQ,
+ CMDQ_ENG_DISP_MUTEX,
+ CMDQ_ENG_MMSYS_CONFIG,
+
+ CMDQ_MAX_ENGINE_COUNT /* ALWAYS keep at the end */
+} CMDQ_ENG_ENUM;
+
+#endif /* __CMDQ_ENGINE_COMMON_H__ */
diff --git a/kernel-headers/cmdq_event_common.h b/kernel-headers/cmdq_event_common.h
new file mode 100644
index 0000000..b185888
--- /dev/null
+++ b/kernel-headers/cmdq_event_common.h
@@ -0,0 +1,272 @@
+/* MDP start frame */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA0_SOF, 0, mdp_rdma0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA1_SOF, 1, mdp_rdma1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ0_SOF, 2, mdp_rsz0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ1_SOF, 3, mdp_rsz1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ2_SOF, 4, mdp_rsz2_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP_SOF, 5, mdp_tdshp_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP0_SOF, 6, mdp_tdshp0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP1_SOF, 7, mdp_tdshp1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WDMA_SOF, 8, mdp_wdma_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT_SOF, 9, mdp_wrot_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_SOF, 10, mdp_wrot0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_SOF, 11, mdp_wrot1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_COLOR_SOF, 12, mdp_color_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_MVW_SOF, 13, mdp_mvw_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_CROP_SOF, 14, mdp_crop_sof)
+
+/* Display start frame */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL0_SOF, 15, disp_ovl0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL1_SOF, 16, disp_ovl1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_2L_OVL0_SOF, 17, disp_2l_ovl0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_2L_OVL1_SOF, 18, disp_2l_ovl1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA0_SOF, 19, disp_rdma0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA1_SOF, 20, disp_rdma1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA2_SOF, 21, disp_rdma2_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA0_SOF, 22, disp_wdma0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA1_SOF, 23, disp_wdma1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR_SOF, 24, disp_color_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR0_SOF, 25, disp_color0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR1_SOF, 26, disp_color1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_CCORR_SOF, 27, disp_ccorr_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_AAL_SOF, 28, disp_aal_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_GAMMA_SOF, 29, disp_gamma_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DITHER_SOF, 30, disp_dither_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_UFOE_SOF, 31, disp_ufoe_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_PWM0_SOF, 32, disp_pwm0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_PWM1_SOF, 33, disp_pwm1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OD_SOF, 34, disp_od_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DSC_SOF, 35, disp_dsc_sof)
+
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L0_SOF, 36, ufod_rdma0_l0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L1_SOF, 37, ufod_rdma0_l1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L2_SOF, 38, ufod_rdma0_l2_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L3_SOF, 39, ufod_rdma0_l3_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L0_SOF, 40, ufod_rdma1_l0_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L1_SOF, 41, ufod_rdma1_l1_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L2_SOF, 42, ufod_rdma1_l2_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L3_SOF, 43, ufod_rdma1_l3_sof)
+
+/* MDP frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA0_EOF, 44, mdp_rdma0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA1_EOF, 45, mdp_rdma1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ0_EOF, 46, mdp_rsz0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ1_EOF, 47, mdp_rsz1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ2_EOF, 48, mdp_rsz2_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP_EOF, 49, mdp_tdshp_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP0_EOF, 50, mdp_tdshp0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP1_EOF, 51, mdp_tdshp1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WDMA_EOF, 52, mdp_wdma_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT_WRITE_EOF, 53, mdp_wrot_write_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT_READ_EOF, 54, mdp_wrot_read_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_WRITE_EOF, 55, mdp_wrot0_write_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_READ_EOF, 56, mdp_wrot0_read_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_WRITE_EOF, 57, mdp_wrot1_write_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_READ_EOF, 58, mdp_wrot1_read_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_W_EOF, 59, mdp_wrot0_write_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_R_EOF, 60, mdp_wrot0_read_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_W_EOF, 61, mdp_wrot1_write_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_R_EOF, 62, mdp_wrot1_read_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_COLOR_EOF, 63, mdp_color_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_CROP_EOF, 64, mdp_crop_frame_done)
+
+/* Display frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL0_EOF, 65, disp_ovl0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL1_EOF, 66, disp_ovl1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_2L_OVL0_EOF, 67, disp_2l_ovl0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_2L_OVL1_EOF, 68, disp_2l_ovl1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA0_EOF, 69, disp_rdma0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA1_EOF, 70, disp_rdma1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA2_EOF, 71, disp_rdma2_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA0_EOF, 72, disp_wdma0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA1_EOF, 73, disp_wdma1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR_EOF, 74, disp_color_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR0_EOF, 75, disp_color0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR1_EOF, 76, disp_color1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_CCORR_EOF, 77, disp_ccorr_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_AAL_EOF, 78, disp_aal_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_GAMMA_EOF, 79, disp_gamma_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DITHER_EOF, 80, disp_dither_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_UFOE_EOF, 81, disp_ufoe_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OD_EOF, 82, disp_od_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DSC_EOF, 83, disp_dsc_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DSI0_EOF, 84, disp_dsi0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DSI1_EOF, 85, disp_dsi1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DPI0_EOF, 86, disp_dpi0_frame_done)
+
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L0_EOF, 87, ufod_rdma0_l0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L1_EOF, 88, ufod_rdma0_l1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L2_EOF, 89, ufod_rdma0_l2_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA0_L3_EOF, 90, ufod_rdma0_l3_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L0_EOF, 91, ufod_rdma1_l0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L1_EOF, 92, ufod_rdma1_l1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L2_EOF, 93, ufod_rdma1_l2_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_UFOD_RAMA1_L3_EOF, 94, ufod_rdma1_l3_frame_done)
+
+/* Mutex frame done */
+/* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX0_STREAM_EOF, 95, stream_done_0)
+/* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX1_STREAM_EOF, 96, stream_done_1)
+/* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX2_STREAM_EOF, 97, stream_done_2)
+/* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX3_STREAM_EOF, 98, stream_done_3)
+/* DISPSYS, please refer to disp_hal.h */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX4_STREAM_EOF, 99, stream_done_4)
+/* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX5_STREAM_EOF, 100, stream_done_5)
+/* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX6_STREAM_EOF, 101, stream_done_6)
+/* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX7_STREAM_EOF, 102, stream_done_7)
+/* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX8_STREAM_EOF, 103, stream_done_8)
+/* DpFramework via CMDQ_IOCTL_LOCK_MUTEX */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX9_STREAM_EOF, 104, stream_done_9)
+
+/* Display underrun */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA0_UNDERRUN, 105, buf_underrun_event_0)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA1_UNDERRUN, 106, buf_underrun_event_1)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA2_UNDERRUN, 107, buf_underrun_event_2)
+
+/* Display TE */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DSI_TE, 108, dsi0_te_event)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DSI0_TE, 109, dsi0_te_event)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DSI1_TE, 110, dsi1_te_event)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_DSI0_TE_SOF, 111, mdp_dsi0_te_sof)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_DSI1_TE_SOF, 112, mdp_dsi1_te_sof)
+
+/* ISP frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS2_2_EOF, 113, isp_frame_done_p2_2)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS2_1_EOF, 114, isp_frame_done_p2_1)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS2_0_EOF, 115, isp_frame_done_p2_0)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS1_1_EOF, 116, isp_frame_done_p1_1)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS1_0_EOF, 117, isp_frame_done_p1_0)
+
+/* ISP (IMGSYS) frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD0_EOF, 118, dip_cq_thread0_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD1_EOF, 119, dip_cq_thread1_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD2_EOF, 120, dip_cq_thread2_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD3_EOF, 121, dip_cq_thread3_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD4_EOF, 122, dip_cq_thread4_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD5_EOF, 123, dip_cq_thread5_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD6_EOF, 124, dip_cq_thread6_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD7_EOF, 125, dip_cq_thread7_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD8_EOF, 126, dip_cq_thread8_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD9_EOF, 127, dip_cq_thread9_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD10_EOF, 128, dip_cq_thread10_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD11_EOF, 129, dip_cq_thread11_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD12_EOF, 130, dip_cq_thread12_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD13_EOF, 131, dip_cq_thread13_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DIP_CQ_THREAD14_EOF, 132, dip_cq_thread14_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DPE_EOF, 133, dpe_frame_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_WMF_EOF, 134, wmf_frame_done)
+
+/* ISP (IMGSYS) engine events */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_SENINF_CAM1_2_3_FULL, 135, seninf_cam1_2_3_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_SENINF_CAM0_FULL, 136, seninf_cam0_fifo_full)
+
+/* VENC frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_VENC_EOF, 137, venc_done)
+
+/* JPEG frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_ENC_EOF, 138, jpgenc_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_ENC_PASS2_EOF, 139, jpgenc_pass2_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_ENC_PASS1_EOF, 140, jpgenc_pass1_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_DEC_EOF, 141, jpgdec_done)
+
+/* VENC engine events */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_VENC_MB_DONE, 142, venc_mb_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_VENC_128BYTE_CNT_DONE, 143, venc_128byte_cnt_done)
+
+/* ISP (CAMSYS) frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_FRAME_DONE_A, 144, isp_frame_done_a)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_FRAME_DONE_B, 145, isp_frame_done_b)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_CAMSV_0_PASS1_DONE, 146, camsv_0_pass1_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_CAMSV_1_PASS1_DONE, 147, camsv_1_pass1_done)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_CAMSV_2_PASS1_DONE, 148, camsv_2_pass1_done)
+
+/* ISP (CAMSYS) engine events */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_0_FIFO_FULL, 149, seninf_0_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_1_FIFO_FULL, 150, seninf_1_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_2_FIFO_FULL, 151, seninf_2_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_3_FIFO_FULL, 152, seninf_3_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_4_FIFO_FULL, 153, seninf_4_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_5_FIFO_FULL, 154, seninf_5_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_6_FIFO_FULL, 155, seninf_6_fifo_full)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_SENINF_7_FIFO_FULL, 156, seninf_7_fifo_full)
+
+/* Keep this at the end of HW events */
+DECLARE_CMDQ_EVENT(CMDQ_MAX_HW_EVENT_COUNT, 400, hw_event_conunt)
+
+/* SW Sync Tokens (Pre-defined) */
+/* Config thread notify trigger thread */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_CONFIG_DIRTY, 401, sw_token)
+/* Trigger thread notify config thread */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_STREAM_EOF, 402, sw_token)
+/* Block Trigger thread until the ESD check finishes. */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_ESD_EOF, 403, sw_token)
+/* check CABC setup finish */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_CABC_EOF, 404, sw_token)
+/* Block Trigger thread until the path freeze finishes */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_FREEZE_EOF, 405, sw_token)
+/* Pass-2 notifies VENC frame is ready to be encoded */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_VENC_INPUT_READY, 406, sw_token)
+/* VENC notifies Pass-2 encode done so next frame may start */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_VENC_EOF, 407, sw_token)
+
+/* Notify normal CMDQ there are some secure task done */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_SECURE_THR_EOF, 408, sw_token)
+/* Lock WSM resource */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_SECURE_WSM_LOCK, 409, sw_token)
+
+/* SW Sync Tokens (User-defined) */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_USER_0, 410, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_USER_1, 411, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_POLL_MONITOR, 412, sw_token)
+
+/* Event for CMDQ to block executing command when append command
+* Plz sync CMDQ_SYNC_TOKEN_APPEND_THR(id) in cmdq_core source file. */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR0, 422, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR1, 423, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR2, 424, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR3, 425, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR4, 426, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR5, 427, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR6, 428, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR7, 429, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR8, 430, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR9, 431, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR10, 432, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR11, 433, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR12, 434, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR13, 435, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR14, 436, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_APPEND_THR15, 437, sw_token)
+
+/* GPR access tokens (for HW register backup) */
+/* There are 15 32-bit GPR, 3 GPR form a set (64-bit for address, 32-bit for value) */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_0, 450, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_1, 451, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_2, 452, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_3, 453, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_4, 454, sw_token)
+
+/* Resource lock event to control resource in GCE thread */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_RESOURCE_WROT0, 460, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_RESOURCE_WROT1, 461, sw_token)
+
+/* Secure video path notify SW token */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_OVL0_2NONSEC_END, 470, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_OVL1_2NONSEC_END, 471, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_2LOVL0_2NONSEC_END, 472, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_2LOVL1_2NONSEC_END, 473, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_RDMA0_2NONSEC_END, 474, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_RDMA1_2NONSEC_END, 475, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_WDMA0_2NONSEC_END, 476, sw_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_DISP_WDMA1_2NONSEC_END, 477, sw_token)
+
+/* event id is 9 bit */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_MAX, (0x1FF), max_token)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_INVALID, (-1), invalid_token)
diff --git a/kernel-headers/cmdq_subsys_common.h b/kernel-headers/cmdq_subsys_common.h
new file mode 100644
index 0000000..1872b80
--- /dev/null
+++ b/kernel-headers/cmdq_subsys_common.h
@@ -0,0 +1,32 @@
+/* GCE subsys */
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_G3D_CONFIG_BASE, 0, MFG, g3d_config_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_MMSYS_CONFIG, 1, MMSYS, mmsys_config_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_DISP_DITHER, 2, MMSYS, disp_dither_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_NA, 3, MMSYS, mm_na_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_IMGSYS, 4, CAM, imgsys_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_VDEC_GCON, 5, VDEC, vdec_gcon_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_VENC_GCON, 6, VENC, venc_gcon_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_CONN_PERIPHERALS, 7, PERISYS, conn_peri_base)
+
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_TOPCKGEN, 8, TOP_AO_3, topckgen_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_KP, 9, INFRA_AO, kp_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_SCP_SRAM, 10, INFRA_AO, scp_sram_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_INFRA_NA3, 11, NA, infra_na3_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_INFRA_NA4, 12, NA, infra_na4_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_SCP, 13, SCP, scp_base)
+
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_MCUCFG, 14, INFRASYS, mcucfg_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_GCPU, 15, INFRASYS, gcpu_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_USB0, 16, PERISYS, usb0_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_USB_SIF, 17, PERISYS, usb_sif_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_AUDIO, 18, PERISYS, audio_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_MSDC0, 19, PERISYS, msdc0_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_MSDC1, 20, PERISYS, msdc1_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_MSDC2, 21, PERISYS, msdc2_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_MSDC3, 22, PERISYS, msdc3_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_AP_DMA, 23, INFRASYS, ap_dma_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_CAMSYS, 24, CAMSYS, camsys_base)
+
+/* Special subsys */
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_PWM_SW, 25, SPECIAL, pwm_sw_base)
+DECLARE_CMDQ_SUBSYS(CMDQ_SUBSYS_DIP_A0_SW, 26, SPECIAL, dip_a0_sw_base)
diff --git a/kernel-headers/hal_api.h b/kernel-headers/hal_api.h
new file mode 100644
index 0000000..f4b45d5
--- /dev/null
+++ b/kernel-headers/hal_api.h
@@ -0,0 +1,229 @@
+#ifndef _HAL_API_H_
+#define _HAL_API_H_
+#include "val_types_public.h"
+
+#define DumpReg__ /* /< Dump Reg for debug */
+#ifdef DumpReg__
+#include <stdio.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ADD_QUEUE(queue, index, q_type, q_address, q_offset, q_value, q_mask) \
+ { \
+ queue[index].type = q_type; \
+ queue[index].address = q_address; \
+ queue[index].offset = q_offset; \
+ queue[index].value = q_value; \
+ queue[index].mask = q_mask; \
+ index = index + 1; \
+ } /* /< ADD QUEUE command */
+
+
+/**
+ * @par Enumeration
+ * HAL_CODEC_TYPE_T
+ * @par Description
+ * This is the item used for codec type
+ */
+typedef enum __HAL_CODEC_TYPE_T {
+ HAL_CODEC_TYPE_VDEC, /* /< VDEC */
+ HAL_CODEC_TYPE_VENC, /* /< VENC */
+ HAL_CODEC_TYPE_MAX = 0xFFFFFFFF /* /< MAX Value */
+}
+HAL_CODEC_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * HAL_CMD_T
+ * @par Description
+ * This is the item used for hal command type
+ */
+typedef enum _HAL_CMD_T {
+ HAL_CMD_SET_CMD_QUEUE, /* /< set command queue */
+ HAL_CMD_SET_POWER, /* /< set power */
+ HAL_CMD_SET_ISR, /* /< set ISR */
+ HAL_CMD_GET_CACHE_CTRL_ADDR, /* /< get cahce control address */
+ HAL_CMD_MAX = 0xFFFFFFFF /* /< MAX value */
+} HAL_CMD_T;
+
+
+/**
+ * @par Enumeration
+ * REGISTER_GROUP_T
+ * @par Description
+ * This is the item used for register group
+ */
+
+typedef enum _REGISTER_GROUP_T {
+ VDEC_SYS, /* /< VDEC_SYS */
+ VDEC_MISC, /* /< VDEC_MISC */
+ VDEC_VLD, /* /< VDEC_VLD */
+ VDEC_VLD_TOP, /* /< VDEC_VLD_TOP */
+ VDEC_MC, /* /< VDEC_MC */
+ VDEC_AVC_VLD, /* /< VDEC_AVC_VLD */
+ VDEC_AVC_MV, /* /< VDEC_AVC_MV */
+ VDEC_HEVC_VLD, /* /< VDEC_HEVC_VLD */
+ VDEC_HEVC_MV, /* /< VDEC_HEVC_MV */
+ VDEC_PP, /* /< VDEC_PP */
+ /* VDEC_SQT, */
+ VDEC_VP8_VLD, /* /< VDEC_VP8_VLD */
+ VDEC_VP6_VLD, /* /< VDEC_VP6_VLD */
+ VDEC_VP8_VLD2, /* /< VDEC_VP8_VLD2 */
+ VENC_HW_BASE, /* /< VENC_HW_BASE */
+ VENC_LT_HW_BASE, /* /< VENC_HW_LT_BASE */
+ VENC_MP4_HW_BASE, /* /< VENC_MP4_HW_BASE */
+ VDEC_VP9_VLD, /*/< VDEC_VP9_VLD*/
+ VCODEC_MAX /* /< VCODEC_MAX */
+} REGISTER_GROUP_T;
+
+
+/**
+ * @par Enumeration
+ * REGISTER_GROUP_T
+ * @par Description
+ * This is the item used for driver command type
+ */
+typedef enum _VCODEC_DRV_CMD_TYPE {
+ ENABLE_HW_CMD, /* /< ENABLE_HW_CMD */
+ DISABLE_HW_CMD, /* /< DISABLE_HW_CMD */
+ WRITE_REG_CMD, /* /< WRITE_REG_CMD */
+ READ_REG_CMD, /* /< READ_REG_CMD */
+ WRITE_SYSRAM_CMD, /* /< WRITE_SYSRAM_CMD */
+ READ_SYSRAM_CMD, /* /< READ_SYSRAM_CMD */
+ MASTER_WRITE_CMD, /* /< MASTER_WRITE_CMD */
+ WRITE_SYSRAM_RANGE_CMD, /* /< WRITE_SYSRAM_RANGE_CMD */
+ READ_SYSRAM_RANGE_CMD, /* /< READ_SYSRAM_RANGE_CMD */
+ SETUP_ISR_CMD, /* /< SETUP_ISR_CMD */
+ WAIT_ISR_CMD, /* /< WAIT_ISR_CMD */
+ TIMEOUT_CMD, /* /< TIMEOUT_CMD */
+ MB_CMD, /* /< MB_CMD */
+ POLL_REG_STATUS_CMD, /* /< POLL_REG_STATUS_CMD */
+ END_CMD /* /< END_CMD */
+} VCODEC_DRV_CMD_TYPE;
+
+
+/**
+ * @par Structure
+ * P_VCODEC_DRV_CMD_T
+ * @par Description
+ * Pointer of VCODEC_DRV_CMD_T
+ */
+typedef struct __VCODEC_DRV_CMD_T *P_VCODEC_DRV_CMD_T;
+
+
+/**
+ * @par Structure
+ * VCODEC_DRV_CMD_T
+ * @par Description
+ * driver command information
+ */
+typedef struct __VCODEC_DRV_CMD_T {
+ VAL_UINT32_T type; /* /< type */
+ VAL_ULONG_T address; /* /< address */
+ VAL_ULONG_T offset; /* /< offset */
+ VAL_ULONG_T value; /* /< value */
+ VAL_ULONG_T mask; /* /< mask */
+} VCODEC_DRV_CMD_T;
+
+
+/**
+ * @par Structure
+ * HAL_HANDLE_T
+ * @par Description
+ * hal handle information
+ */
+typedef struct _HAL_HANDLE_T_ {
+ VAL_INT32_T fd_vdec; /* /< fd_vdec */
+ VAL_INT32_T fd_venc; /* /< fd_venc */
+ VAL_MEMORY_T rHandleMem; /* /< rHandleMem */
+ VAL_ULONG_T mmap[VCODEC_MAX]; /* /< mmap[VCODEC_MAX] */
+ VAL_DRIVER_TYPE_T driverType; /* /< driverType */
+ VAL_UINT32_T u4TimeOut; /* /< u4TimeOut */
+ VAL_UINT32_T u4FrameCount; /* /< u4FrameCount */
+#ifdef DumpReg__
+ FILE *pf_out;
+#endif
+ VAL_BOOL_T bProfHWTime; /* /< bProfHWTime */
+ VAL_UINT64_T u8HWTime[2]; /* /< u8HWTime */
+} HAL_HANDLE_T;
+
+
+/**
+ * @par Function
+ * eHalInit
+ * @par Description
+ * The init hal driver function
+ * @param
+ * a_phHalHandle [IN/OUT] The hal handle
+ * @param
+ * a_eHalCodecType [IN] VDEC or VENC
+ * @par Returns
+ * VAL_RESULT_T,
+ * return VAL_RESULT_NO_ERROR if success,
+ * return VAL_RESULT_INVALID_DRIVER or VAL_RESULT_INVALID_MEMORY if failed
+ */
+VAL_RESULT_T eHalInit(VAL_HANDLE_T *a_phHalHandle, HAL_CODEC_TYPE_T a_eHalCodecType);
+
+
+/**
+ * @par Function
+ * eHalDeInit
+ * @par Description
+ * The deinit hal driver function
+ * @param
+ * a_phHalHandle [IN/OUT] The hal handle
+ * @par Returns
+ * VAL_RESULT_T, return VAL_RESULT_NO_ERROR if success, return else if failed
+ */
+VAL_RESULT_T eHalDeInit(VAL_HANDLE_T *a_phHalHandle);
+
+
+/**
+ * @par Function
+ * eHalGetMMAP
+ * @par Description
+ * The get hw register memory map to vitural address function
+ * @param
+ * a_hHalHandle [IN/OUT] The hal handle
+ * @param
+ * RegAddr [IN] hw register address
+ * @par Returns
+ * VAL_UINT32_T, vitural address of hw register memory mapping
+ */
+VAL_ULONG_T eHalGetMMAP(VAL_HANDLE_T *a_hHalHandle, VAL_UINT32_T RegAddr);
+
+
+/**
+ * @par Function
+ * eHalCmdProc
+ * @par Description
+ * The hal command processing function
+ * @param
+ * a_hHalHandle [IN/OUT] The hal handle
+ * @param
+ * a_eHalCmd [IN] The hal command structure
+ * @param
+ * a_pvInParam [IN] The hal input parameter
+ * @param
+ * a_pvOutParam [OUT] The hal output parameter
+ * @par Returns
+ * VAL_RESULT_T, return VAL_RESULT_NO_ERROR if success, return else if failed
+ */
+VAL_RESULT_T eHalCmdProc(
+ VAL_HANDLE_T *a_hHalHandle,
+ HAL_CMD_T a_eHalCmd,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _HAL_API_H_ */
diff --git a/kernel-headers/hal_types_private.h b/kernel-headers/hal_types_private.h
new file mode 100644
index 0000000..a713ef6
--- /dev/null
+++ b/kernel-headers/hal_types_private.h
@@ -0,0 +1,15 @@
+#ifndef _HAL_TYPES_PRIVATE_H_
+#define _HAL_TYPES_PRIVATE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_private.h"
+#include "hal_types_public.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _HAL_TYPES_PRIVATE_H_ */
diff --git a/kernel-headers/hal_types_public.h b/kernel-headers/hal_types_public.h
new file mode 100644
index 0000000..e976e7d
--- /dev/null
+++ b/kernel-headers/hal_types_public.h
@@ -0,0 +1,44 @@
+#ifndef _HAL_TYPES_PUBLIC_H_
+#define _HAL_TYPES_PUBLIC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_public.h"
+
+/**
+ * @par Structure
+ * HAL_POWER_T
+ * @par Description
+ * This is a parameter for power related function
+ */
+typedef struct _HAL_POWER_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_DRIVER_TYPE_T eDriverType; /* /< [IN] The driver type */
+ VAL_BOOL_T fgEnable; /* /< [IN] Enable or not */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} HAL_POWER_T;
+
+/**
+ * @par Structure
+ * HAL_ISR_T
+ * @par Description
+ * This is a parameter for ISR related function
+ */
+typedef struct _HAL_ISR_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_DRIVER_TYPE_T eDriverType; /* /< [IN] The driver type */
+ VAL_BOOL_T fgRegister; /* /< [IN] Register or un-register */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} HAL_ISR_T;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _HAL_TYPES_PUBLIC_H_ */
diff --git a/kernel-headers/hevcd_if.h b/kernel-headers/hevcd_if.h
new file mode 100644
index 0000000..871e45a
--- /dev/null
+++ b/kernel-headers/hevcd_if.h
@@ -0,0 +1,98 @@
+#ifndef _HEVC_DECODE_IF_H_
+#define _HEVC_DECODE_IF_H_
+
+/* #include "hevcd.h" */
+/* #include "hevc_common_if.h" */
+#include "vcodec_if_v2.h"
+#include "vcodec_dec_demuxer_if_v2.h"
+#define MAX_DECODE_BUFFERS 15
+#define _FILE_IO_
+/* extern int frame_num; */
+typedef struct {
+
+ void (*hevc_pfnMalloc)(IN HANDLE /* hDrv */,
+ IN unsigned int /* u4Size */,
+ IN unsigned int /*u4AlignSize*/,
+ IN VCODEC_MEMORY_TYPE_T /* fgCacheable */,
+ OUT VCODEC_BUFFER_T * /* prBuf */
+ ); /* buffer address must cache line align */
+
+ void (*pfnFree)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prBuf */
+ ); /* same memory type with malloc */
+
+} hevcd_callback_t;
+
+typedef struct {
+ unsigned char *buffer_origin;
+ unsigned char *luma;
+ unsigned char *cb, *cr;
+ int y_stride, uv_stride;
+ int width, height;
+ int ref_count;
+} decode_picture_buffer_info_t;
+
+
+typedef struct {
+ unsigned char *start_address;
+ int length;
+} HEVC_ACCESS_UNIT_T;
+
+#define MAX_ACCESS_UNIT_NUMBER 32
+
+typedef struct {
+ HEVC_ACCESS_UNIT_T au_list[MAX_ACCESS_UNIT_NUMBER];
+ int au_number;
+
+} HEVC_DECODE_INP_T;
+
+typedef struct {
+ unsigned char *y;
+ unsigned char *u;
+ unsigned char *v;
+
+ int y_stride;
+ int uv_stride;
+
+ int width;
+ int height;
+} HEVC_DECODE_PICTURE_T;
+
+typedef struct {
+ int width;
+ int height;
+} HEVC_PICTURE_INFO_T;
+
+
+VCODEC_DEC_ERROR_T HEVCDecoderGetMemoryRequired(
+ VCODEC_DEC_INPUT_T * prInput,
+ VCODEC_MEMORY_SIZE_T *prMemeorySize,
+ VCODEC_DEC_OUTPUT_BUFFER_PARAM_T *prYUVBufferParameter,
+ VCODEC_MEMORY_TYPE_T * prBitStreamBufferMemType
+);
+VCODEC_DEC_ERROR_T HEVCDecoderGetMemoryRequiredExtend(
+ VCODEC_DEC_INPUT_T * prInput,
+ VCODEC_MEMORY_SIZE_T *prMemeorySize,
+ VCODEC_DEC_OUTPUT_BUFFER_PARAM_T *prYUVBufferParameter,
+ OUT VCODEC_DEC_INPUT_BUFFER_PARAM_T * prBitStreamParam,
+ INOUT void *prExtra
+);
+VCODEC_DEC_ERROR_T HEVCDecoderInitAdapt(IN HANDLE hCodec);
+VCODEC_DEC_ERROR_T HEVCDecoderDeInitAdapt(IN HANDLE hCodec);
+VCODEC_DEC_ERROR_T HEVCDecoderOpenAdapt(
+ IN HANDLE hDrv ,
+ IN VCODEC_DEC_CALLBACK_T * pfnCallback,
+ IN void *prOpenSetting, OUT HANDLE * hCodec
+);
+VCODEC_DEC_ERROR_T HEVCDecoderStartAdapt(IN HANDLE hCodec, IN VCODEC_DEC_INPUT_T * prBufferHeader);
+VCODEC_DEC_ERROR_T HEVCDecoderCloseAdapt(IN HANDLE hCodec);
+VCODEC_DEC_ERROR_T HEVCDecoderGetNextDisplay(IN HANDLE hCodec, OUT VCODEC_DEC_PRIVATE_OUTPUT_T * prPrivateOutput);
+VCODEC_DEC_ERROR_T HEVCDecoderGetParameterAdapt(IN HANDLE hCodec, IN VCODEC_DEC_PARAM_TYPE_T eCmd, INOUT void *pParam);
+VCODEC_DEC_ERROR_T HEVCDecoderSetParameterAdapt(IN HANDLE hCodec, IN VCODEC_DEC_PARAM_TYPE_T eCmd, INOUT void *pParam);
+
+extern VCODEC_DEC_API_T *GetHEVCDecoderAPI(void);
+
+VCODEC_DEC_API_T *GetHEVCDecoderAPI(void);
+
+
+#endif
diff --git a/kernel-headers/kd_camera_feature.h b/kernel-headers/kd_camera_feature.h
new file mode 100644
index 0000000..3286da1
--- /dev/null
+++ b/kernel-headers/kd_camera_feature.h
@@ -0,0 +1,38 @@
+#ifndef _KD_CAMERA_FEATURE_H_
+#define _KD_CAMERA_FEATURE_H_
+
+
+#ifndef FTYPE_ENUM
+#define FTYPE_ENUM(_enums...) _enums
+#endif /* FTYPE_ENUM */
+
+#ifndef FID_TO_TYPE_ENUM
+#define FID_TO_TYPE_ENUM(_fid, _enums) \
+ typedef enum { _enums/*, OVER_NUM_OF_##_fid*/ }
+#endif /* FID_TO_TYPE_ENUM */
+
+#include "kd_camera_feature_id.h"
+#include "kd_camera_feature_enum.h"
+
+
+typedef enum {
+ ORIENTATION_ANGLE_0 = 0,
+ ORIENTATION_ANGLE_90 = 90,
+ ORIENTATION_ANGLE_180 = 180,
+ ORIENTATION_ANGLE_270 = 270
+} ORIENTATION_ANGLE;
+
+
+typedef enum {
+ DUAL_CAMERA_NONE_SENSOR = 0,
+ DUAL_CAMERA_MAIN_SENSOR = 1,
+ DUAL_CAMERA_SUB_SENSOR = 2,
+ DUAL_CAMERA_MAIN_2_SENSOR = 4,
+ /* for backward compatible */
+ DUAL_CAMERA_MAIN_SECOND_SENSOR = 4,
+ /* DUAL_CAMERA_SUB_2_SENSOR = 16, */
+ DUAL_CAMERA_SENSOR_MAX
+} CAMERA_DUAL_CAMERA_SENSOR_ENUM;
+
+
+#endif /* _KD_IMGSENSOR_DATA_H */
diff --git a/kernel-headers/kd_camera_feature_enum.h b/kernel-headers/kd_camera_feature_enum.h
new file mode 100644
index 0000000..98d4e3a
--- /dev/null
+++ b/kernel-headers/kd_camera_feature_enum.h
@@ -0,0 +1,594 @@
+#ifndef _KD_CAMERA_FEATURE_ENUM_H_
+#define _KD_CAMERA_FEATURE_ENUM_H_
+
+
+/* Scene Mode */
+FID_TO_TYPE_ENUM(
+ FID_SCENE_MODE,
+ FTYPE_ENUM(
+ SCENE_MODE_BEGIN = 0,
+ SCENE_MODE_OFF = SCENE_MODE_BEGIN, /* Disable scene mode equal Auto mode */
+ SCENE_MODE_NORMAL, /* Normal mode */
+ SCENE_MODE_ACTION, /* Action mode */
+ SCENE_MODE_PORTRAIT, /* Portrait mode */
+ SCENE_MODE_LANDSCAPE, /* Landscape */
+ SCENE_MODE_NIGHTSCENE, /* Night Scene */
+ SCENE_MODE_NIGHTPORTRAIT, /* Night Portrait */
+ SCENE_MODE_THEATRE, /* Theatre mode */
+ SCENE_MODE_BEACH, /* Beach mode */
+ SCENE_MODE_SNOW, /* Snow mode */
+ SCENE_MODE_SUNSET, /* Sunset mode */
+ SCENE_MODE_STEADYPHOTO, /* Steady photo mode */
+ SCENE_MODE_FIREWORKS, /* Fireworks mode */
+ SCENE_MODE_SPORTS, /* Sports mode */
+ SCENE_MODE_PARTY, /* Party mode */
+ SCENE_MODE_CANDLELIGHT, /* Candle light mode */
+ /* (Unsupported legacy symbol; don't use this symbol if possible) */
+ SCENE_MODE_ISO_ANTI_SHAKE, /* ISO Anti Shake mode */
+ /* (Unsupported legacy symbol; don't use this symbol if possible) */
+ SCENE_MODE_BRACKET_AE, /* Bracket AE */
+ SCENE_MODE_HDR,
+ SCENE_MODE_FACE_PRIORITY,
+ SCENE_MODE_BARCODE,
+ SCENE_MODE_NUM
+ )
+)SCENE_MODE_T;
+
+
+/* Effect */
+FID_TO_TYPE_ENUM(
+ FID_COLOR_EFFECT,
+ FTYPE_ENUM(
+ MEFFECT_BEGIN = 0,
+ MEFFECT_OFF = MEFFECT_BEGIN,
+ MEFFECT_MONO,
+ MEFFECT_SEPIA,
+ MEFFECT_NEGATIVE,
+ MEFFECT_SOLARIZE,
+ MEFFECT_POSTERIZE,
+ MEFFECT_AQUA,
+ MEFFECT_BLACKBOARD,
+ MEFFFECT_BLACKBOARD = MEFFECT_BLACKBOARD, /* legacy symbol (don't use if possible) */
+ MEFFECT_WHITEBOARD,
+ MEFFECT_SEPIAGREEN,
+ MEFFECT_SEPIABLUE,
+ MEFFECT_NASHVILLE,
+ MEFFECT_HEFE,
+ MEFFECT_VALENCIA,
+ MEFFECT_XPROII,
+ MEFFECT_LOFI,
+ MEFFECT_SIERRA,
+ MEFFECT_KELVIN,
+ MEFFECT_WALDEN,
+ MEFFECT_F1977,
+ MEFFECT_NUM
+ )
+)MCOLOR_EFFECT;
+
+
+/* AWB Mode */
+FID_TO_TYPE_ENUM(
+ FID_AWB_MODE,
+ FTYPE_ENUM(
+ AWB_MODE_BEGIN = 0,
+ AWB_MODE_OFF = AWB_MODE_BEGIN,
+ AWB_MODE_AUTO,
+ AWB_MODE_DAYLIGHT,
+ AWB_MODE_CLOUDY_DAYLIGHT,
+ AWB_MODE_SHADE,
+ AWB_MODE_TWILIGHT,
+ AWB_MODE_FLUORESCENT,
+ AWB_MODE_WARM_FLUORESCENT,
+ AWB_MODE_INCANDESCENT,
+ AWB_MODE_TUNGSTEN,
+ /* (Unsupported legacy symbol; don't use this symbol if possible) */
+ AWB_MODE_GRAYWORLD, /* Gray world mode for CCT use */
+ AWB_MODE_NUM
+ )
+)AWB_MODE_T;
+
+
+/* AE Flicker */
+FID_TO_TYPE_ENUM(
+ FID_AE_FLICKER,
+ FTYPE_ENUM(
+ AE_FLICKER_MODE_BEGIN = 0,
+ AE_FLICKER_MODE_60HZ = AE_FLICKER_MODE_BEGIN,
+ AE_FLICKER_MODE_50HZ,
+ AE_FLICKER_MODE_AUTO,
+ AE_FLICKER_MODE_OFF,
+ AE_FLICKER_MODE_TOTAL_NUM
+ )
+)AE_FLICKER_MODE_T;
+
+
+/* AE EV */
+FID_TO_TYPE_ENUM(
+ FID_AE_EV,
+ FTYPE_ENUM(
+ AE_EV_COMP_BEGIN = 0,
+ AE_EV_COMP_00 = AE_EV_COMP_BEGIN, /* Disable EV compenate */
+ AE_EV_COMP_03, /* EV compensate 0.3 */
+ AE_EV_COMP_05, /* EV compensate 0.5 */
+ AE_EV_COMP_07, /* EV compensate 0.7 */
+ AE_EV_COMP_10, /* EV compensate 1.0 */
+ AE_EV_COMP_13, /* EV compensate 1.3 */
+ AE_EV_COMP_15, /* EV compensate 1.5 */
+ AE_EV_COMP_17, /* EV compensate 1.7 */
+ AE_EV_COMP_20, /* EV compensate 2.0 */
+ AE_EV_COMP_23, /* EV compensate 2.3 */
+ AE_EV_COMP_25, /* EV compensate 2.5 */
+ AE_EV_COMP_27, /* EV compensate 2.7 */
+ AE_EV_COMP_30, /* EV compensate 3.0 */
+ AE_EV_COMP_n03, /* EV compensate -0.3 */
+ AE_EV_COMP_n05, /* EV compensate -0.5 */
+ AE_EV_COMP_n07, /* EV compensate -0.7 */
+ AE_EV_COMP_n10, /* EV compensate -1.0 */
+ AE_EV_COMP_n13, /* EV compensate -1.3 */
+ AE_EV_COMP_n15, /* EV compensate -1.5 */
+ AE_EV_COMP_n17, /* EV compensate -1.7 */
+ AE_EV_COMP_n20, /* EV compensate -2.0 */
+ AE_EV_COMP_n23, /* EV compensate -2.3 */
+ AE_EV_COMP_n25, /* EV compensate -2.5 */
+ AE_EV_COMP_n27, /* EV compensate -2.7 */
+ AE_EV_COMP_n30, /* EV compensate -3.0 */
+ AE_EV_COMP_TOTAL_NUM
+ )
+)AE_EVCOMP_T;
+
+
+/* AE Mode */
+FID_TO_TYPE_ENUM(
+ FID_AE_SCENE_MODE,
+ FTYPE_ENUM(
+ AE_MODE_BEGIN = 0,
+ AE_MODE_OFF = AE_MODE_BEGIN, /* disable AE */
+ AE_MODE_AUTO, /* auto mode full auto ,EV ISO LCE .. is inactive */
+ AE_MODE_PROGRAM, /* AE program mode , allow set EV ISO LCE .... */
+ AE_MODE_TV, /* AE TV mode */
+ AE_MODE_AV, /* AE AV mode */
+ AE_MODE_SV, /* AE SV mode */
+ AE_MODE_VIDEO, /* Video mode AE */
+ AE_MODE_NIGHT, /* Night Scene mode */
+ AE_MODE_ACTION, /* AE Action mode */
+ AE_MODE_BEACH, /* AE beach mode */
+ AE_MODE_CANDLELIGHT, /* AE Candlelight mode */
+ AE_MODE_FIREWORKS, /* AE firework mode */
+ AE_MODE_LANDSCAPE, /* AE landscape mode */
+ AE_MODE_PORTRAIT, /* AE portrait mode */
+ AE_MODE_NIGHT_PORTRAIT, /* AE night portrait mode */
+ AE_MODE_PARTY, /* AE party mode */
+ AE_MODE_SNOW, /* AE snow mode */
+ AE_MODE_SPORTS, /* AE sport mode */
+ AE_MODE_STEADYPHOTO, /* AE steadyphoto mode */
+ AE_MODE_SUNSET, /* AE sunset mode */
+ AE_MODE_THEATRE, /* AE theatre mode */
+ AE_MODE_ISO_ANTI_SHAKE, /* AE ISO anti shake mode */
+ AE_MODE_BRACKET_AE,
+ AE_MODE_AUTO_PANORAMA,
+ AE_MODE_HDR,
+ AE_MODE_TOTAL_NUM
+ )
+)AE_MODE_T;
+
+
+/* AE Metering */
+FID_TO_TYPE_ENUM(
+ FID_AE_METERING,
+ FTYPE_ENUM(
+ AE_METERING_BEGIN = 0,
+ AE_METERING_MODE_CENTER_WEIGHT = AE_METERING_BEGIN, /* CENTER WEIGHTED MODE */
+ AE_METERING_MODE_SOPT, /* SPOT MODE */
+ AE_METERING_MODE_AVERAGE, /* AVERAGE MODE */
+ NUM_OF_AE_METER
+ )
+)AE_METERING_T;
+
+
+/* AE ISO */
+FID_TO_TYPE_ENUM(
+ FID_AE_ISO,
+ FTYPE_ENUM(
+ AE_ISO_BEGIN = 0,
+ AE_ISO_AUTO = AE_ISO_BEGIN,
+ AE_ISO_100,
+ AE_ISO_200,
+ AE_ISO_400,
+ AE_ISO_800,
+ AE_ISO_1600,
+ NUM_OF_AE_ISO
+ )
+)AE_ISO_T;
+
+
+/* AE Strobe / Flashlight */
+FID_TO_TYPE_ENUM(
+ FID_AE_STROBE,
+ FTYPE_ENUM(
+ FLASHLIGHT_BEGIN = 0,
+ FLASHLIGHT_AUTO = FLASHLIGHT_BEGIN,
+ FLASHLIGHT_FORCE_ON,
+ FLASHLIGHT_FORCE_OFF,
+ FLASHLIGHT_REDEYE,
+ FLASHLIGHT_TORCH,
+ NUM_OF_FLASHLIGHT
+ )
+)AE_STROBE_T;
+
+/* AF Mode */
+FID_TO_TYPE_ENUM(
+ FID_AF_MODE,
+ FTYPE_ENUM(
+ AF_MODE_BEGIN = 0,
+ AF_MODE_AFS = AF_MODE_BEGIN, /* (AF-Single Shot Mode) */
+ AF_MODE_AFC, /* AF-Continuous Mode */
+ AF_MODE_AFC_VIDEO, /* AF-Continuous Mode (Video) */
+ AF_MODE_MACRO, /* AF Macro Mode */
+ AF_MODE_INFINITY, /* Focus is set at infinity. */
+ AF_MODE_MF, /* Manual Focus Mode */
+ AF_MODE_FULLSCAN, /* AF Full Scan Mode */
+ NUM_OF_AF_MODE
+ )
+)AF_MODE_T;
+
+
+/* AF Metering */
+FID_TO_TYPE_ENUM(
+ FID_AF_METERING,
+ FTYPE_ENUM(
+ AF_METERING_BEGIN = 0,
+ AF_METER_SPOT = AF_METERING_BEGIN, /* Spot Window */
+ AF_METER_MATRIX, /* Matrix Window */
+ AF_METER_MOVESPOT,
+ NUM_OF_AF_METER
+ )
+)_AF_METERING_T;
+
+/* ISP Edge */
+FID_TO_TYPE_ENUM(
+ FID_ISP_EDGE,
+ FTYPE_ENUM(
+ ISP_EDGE_BEGIN = 0,
+ ISP_EDGE_LOW = ISP_EDGE_BEGIN,
+ ISP_EDGE_MIDDLE,
+ ISP_EDGE_HIGH,
+ NUM_OF_ISP_EDGE
+ )
+)ISP_EDGE_T;
+
+
+/* ISP Hue */
+FID_TO_TYPE_ENUM(
+ FID_ISP_HUE,
+ FTYPE_ENUM(
+ ISP_HUE_BEGIN = 0,
+ ISP_HUE_LOW = ISP_HUE_BEGIN,
+ ISP_HUE_MIDDLE,
+ ISP_HUE_HIGH,
+ NUM_OF_ISP_HUE
+ )
+)ISP_HUE_T;
+
+
+/* ISP Saturation */
+FID_TO_TYPE_ENUM(
+ FID_ISP_SAT,
+ FTYPE_ENUM(
+ ISP_SAT_BEGIN = 0,
+ ISP_SAT_LOW = ISP_SAT_BEGIN,
+ ISP_SAT_MIDDLE,
+ ISP_SAT_HIGH,
+ NUM_OF_ISP_SAT
+ )
+)ISP_SAT_T;
+
+
+/* ISP Brightness */
+FID_TO_TYPE_ENUM(
+ FID_ISP_BRIGHT,
+ FTYPE_ENUM(
+ ISP_BRIGHT_BEGIN = 0,
+ ISP_BRIGHT_LOW = ISP_BRIGHT_BEGIN,
+ ISP_BRIGHT_MIDDLE,
+ ISP_BRIGHT_HIGH,
+ NUM_OF_ISP_BRIGHT
+ )
+)ISP_BRIGHT_T;
+
+
+/* ISP Contrast */
+FID_TO_TYPE_ENUM(
+ FID_ISP_CONTRAST,
+ FTYPE_ENUM(
+ ISP_CONTRAST_BEGIN = 0,
+ ISP_CONTRAST_LOW = ISP_CONTRAST_BEGIN,
+ ISP_CONTRAST_MIDDLE,
+ ISP_CONTRAST_HIGH,
+ NUM_OF_ISP_CONTRAST
+ )
+)ISP_CONTRAST_T;
+
+/* Capture Mode */
+FID_TO_TYPE_ENUM(
+ FID_CAPTURE_MODE,
+ FTYPE_ENUM(
+ CAPTURE_MODE_BEGIN = 0,
+ CAPTURE_MODE_NORMAL = CAPTURE_MODE_BEGIN,
+ CAPTURE_MODE_BURST_SHOT,
+ CAPTURE_MODE_SMILE_SHOT,
+ CAPTURE_MODE_PANORAMA,
+ CAPTURE_MODE_AUTORAMA,
+ CAPTURE_MODE_BEST_SHOT,
+ CAPTURE_MODE_EV_BRACKET,
+ CAPTURE_MODE_MAV,
+ CAPTURE_MODE_HDR,
+ CAPTURE_MODE_ASD,
+ CAPTURE_MODE_ZSD, /* Zero-shutter-delay Shot */
+ CAPTURE_MODE_PANO_3D,
+ CAPTURE_MODE_SINGLE_3D,
+ CAPTURE_MODE_FACE_BEAUTY,
+ CAPTURE_MODE_CONTINUOUS_SHOT,
+ CAPTURE_MODE_MULTI_MOTION,
+ NUM_OF_CAPTURE_MODE
+ )
+)CAPTURE_MODE_T;
+
+
+/* Capture Size */
+FID_TO_TYPE_ENUM(
+ FID_CAP_SIZE,
+ FTYPE_ENUM(
+ CAPTURE_SIZE_BEGIN = 0,
+ CAPTURE_SIZE_320_240 = CAPTURE_SIZE_BEGIN,
+ CAPTURE_SIZE_640_480,
+ CAPTURE_SIZE_1024_768,
+ CAPTURE_SIZE_1280_960,
+ CAPTURE_SIZE_1600_1200,
+ CAPTURE_SIZE_2048_1536,
+ CAPTURE_SIZE_2560_1920,
+ CAPTURE_SIZE_3264_2448,
+ CAPTURE_SIZE_4000_3000,
+ NUM_OF_CAPTURE_SIZE
+ )
+)CAPTURE_SIZE_T;
+
+
+/* Preview Size */
+FID_TO_TYPE_ENUM(
+ FID_PREVIEW_SIZE,
+ FTYPE_ENUM(
+ PREVIEW_SIZE_BEGIN = 0,
+ PREVIEW_SIZE_160_120 = PREVIEW_SIZE_BEGIN,
+ PREVIEW_SIZE_176_144,
+ PREVIEW_SIZE_320_240,
+ PREVIEW_SIZE_352_288,
+ PREVIEW_SIZE_480_320,
+ PREVIEW_SIZE_480_368,
+ PREVIEW_SIZE_640_480,
+ PREVIEW_SIZE_720_480,
+ PREVIEW_SIZE_800_480,
+ PREVIEW_SIZE_864_480,
+ PREVIEW_SIZE_800_600,
+ PREVIEW_SIZE_1280_720,
+ PREVIEW_SIZE_1920_1080,
+ NUM_OF_PREVIEW_SIZE
+ )
+)PREVIEW_SIZE_T;
+
+/* Video Preview Size */
+FID_TO_TYPE_ENUM(
+ FID_VIDEO_PREVIEW_SIZE,
+ FTYPE_ENUM(
+ VIDEO_PREVIEW_SIZE_BEGIN = 0,
+ VIDEO_PREVIEW_SIZE_640_480 = VIDEO_PREVIEW_SIZE_BEGIN,
+ VIDEO_PREVIEW_SIZE_800_600,
+ NUM_OF_VIDEO_PREVIEW_SIZE
+ )
+)VIDEO_PREVIEW_SIZE_T;
+
+
+/* Frame Rate */
+FID_TO_TYPE_ENUM(
+ FID_FRAME_RATE,
+ FTYPE_ENUM(
+ FRAME_RATE_BEGIN = 0,
+ FRAME_RATE_000FPS = FRAME_RATE_BEGIN, /* 0.0fps */
+ FRAME_RATE_010FPS,
+ FRAME_RATE_020FPS,
+ FRAME_RATE_030FPS,
+ FRAME_RATE_040FPS,
+ FRAME_RATE_050FPS,
+ FRAME_RATE_060FPS,
+ FRAME_RATE_070FPS,
+ FRAME_RATE_075FPS = FRAME_RATE_070FPS, /* legacy definition. */
+ FRAME_RATE_080FPS,
+ FRAME_RATE_090FPS,
+ FRAME_RATE_100FPS, /* 10 fps */
+ FRAME_RATE_110FPS,
+ FRAME_RATE_120FPS,
+ FRAME_RATE_125FPS = FRAME_RATE_120FPS, /* legacy definition. */
+ FRAME_RATE_130FPS,
+ FRAME_RATE_140FPS,
+ FRAME_RATE_150FPS,
+ FRAME_RATE_160FPS,
+ FRAME_RATE_170FPS,
+ FRAME_RATE_180FPS,
+ FRAME_RATE_190FPS,
+ FRAME_RATE_200FPS, /* 20 fps */
+ FRAME_RATE_210FPS,
+ FRAME_RATE_220FPS,
+ FRAME_RATE_230FPS,
+ FRAME_RATE_240FPS,
+ FRAME_RATE_250FPS,
+ FRAME_RATE_260FPS,
+ FRAME_RATE_270FPS,
+ FRAME_RATE_280FPS,
+ FRAME_RATE_290FPS,
+ FRAME_RATE_300FPS, /* 30 fps */
+ NUM_OF_FRAME_RATE
+ )
+)FRAME_RATE_T;
+
+/* Frame Rate Range */
+FID_TO_TYPE_ENUM(
+ FID_FRAME_RATE_RANGE,
+ FTYPE_ENUM(
+ FRAME_RATE_RANGE_BEGIN = 0,
+ FRAME_RATE_RANGE_5_30_FPS = FRAME_RATE_RANGE_BEGIN, /* 5-30fps */
+ NUM_OF_FRAME_RATE_RANGE
+ )
+)FRAME_RATE_RANGE_T;
+
+
+/* Focus Distance Normal */
+FID_TO_TYPE_ENUM(
+ FID_FOCUS_DIST_NORMAL,
+ FTYPE_ENUM(
+ FOCUS_DIST_N_BEGIN = 0,
+ FOCUS_DIST_N_INFINITE = FOCUS_DIST_N_BEGIN, /* Infinite */
+ FOCUS_DIST_N_10CM,
+ NUM_OF_FOCUS_DIST_N
+ )
+)FOCUS_DIST_NORMAL_T;
+
+
+/* Focus Distance Macro */
+FID_TO_TYPE_ENUM(
+ FID_FOCUS_DIST_MACRO,
+ FTYPE_ENUM(
+ FOCUS_DIST_M_BEGIN = 0,
+ FOCUS_DIST_M_INFINITE = FOCUS_DIST_M_BEGIN, /* Infinite */
+ FOCUS_DIST_M_5CM,
+ FOCUS_DIST_M_10CM,
+ NUM_OF_FOCUS_DIST_M
+ )
+)FOCUS_DIST_MACRO_T;
+
+
+/* Face Detection */
+FID_TO_TYPE_ENUM(
+ FID_FD_ON_OFF,
+ FTYPE_ENUM(
+ FD_BEGIN = 0,
+ FD_OFF = FD_BEGIN,
+ FD_ON,
+ NUM_OF_FD
+ )
+)FD_MODE_T;
+
+
+/* EIS */
+FID_TO_TYPE_ENUM(
+ FID_EIS,
+ FTYPE_ENUM(
+ EIS_BEGIN = 0,
+ EIS_OFF = EIS_BEGIN,
+ EIS_ON,
+ NUM_OF_EIS
+ )
+)EIS_T;
+
+/* ZSD */
+FID_TO_TYPE_ENUM(
+ FID_ZSD,
+ FTYPE_ENUM(
+ ZSD_BEGIN = 0,
+ ZSD_OFF = ZSD_BEGIN,
+ ZSD_ON,
+ NUM_OF_ZSD
+ )
+)ZSD_T;
+
+/* AF LAMP */
+FID_TO_TYPE_ENUM(
+ FID_AF_LAMP,
+ FTYPE_ENUM(
+ AF_LAMP_BEGIN = 0,
+ AF_LAMP_OFF = AF_LAMP_BEGIN,
+ AF_LAMP_ON,
+ AF_LAMP_AUTO,
+ AF_LAMP_FLASH,
+ NUM_OF_AF_LAMP
+ )
+)AF_LAMP_T;
+
+/* Stereo 3D Capture Size */
+FID_TO_TYPE_ENUM(
+ FID_STEREO_3D_CAP_SIZE,
+ FTYPE_ENUM(
+ STEREO_3D_CAPTURE_SIZE_BEGIN = 0,
+ STEREO_3D_CAPTURE_SIZE_2560_720 = STEREO_3D_CAPTURE_SIZE_BEGIN,
+ STEREO_3D_CAPTURE_SIZE_3840_1080,
+ NUM_OF_STEREO_3D_CAPTURE_SIZE
+ )
+)STEREO_3D_CAPTURE_SIZE_T;
+
+/* Stereo 3D Preview Size */
+FID_TO_TYPE_ENUM(
+ FID_STEREO_3D_PREVIEW_SIZE,
+ FTYPE_ENUM(
+ STEREO_3D_PREVIEW_SIZE_BEGIN = 0,
+ STEREO_3D_PREVIEW_SIZE_640_360 = STEREO_3D_PREVIEW_SIZE_BEGIN,
+ STEREO_3D_PREVIEW_SIZE_854_480,
+ STEREO_3D_PREVIEW_SIZE_960_540,
+ STEREO_3D_PREVIEW_SIZE_1280_720,
+ NUM_OF_STEREO_3D_PREVIEW_SIZE
+ )
+)STEREO_3D_PREVIEW_SIZE_T;
+
+/* Stereo 3D Type */
+FID_TO_TYPE_ENUM(
+ FID_STEREO_3D_TYPE,
+ FTYPE_ENUM(
+ STEREO_3D_TYPE_BEGIN = 0,
+ STEREO_3D_NOT_SUPPORT = STEREO_3D_TYPE_BEGIN,
+ STEREO_3D_FRAME_SEQ,
+ STEREO_3D_SIDE_BY_SIDE,
+ STEREO_3D_TOP_BOTTOM,
+ NUM_OF_STEREO_3D_TYPE
+ )
+)STEREO_3D_TYPE_T;
+
+/* Stereo 3D Mode */
+FID_TO_TYPE_ENUM(
+ FID_STEREO_3D_MODE,
+ FTYPE_ENUM(
+ STEREO_3D_MODE_BEGIN = 0,
+ STEREO_3D_OFF = STEREO_3D_MODE_BEGIN,
+ STEREO_3D_ON,
+ NUM_OF_STEREO_3D_MODE
+ )
+)STEREO_3D_MODE_T;
+
+/* Stereo 3D Image Format */
+FID_TO_TYPE_ENUM(
+ FID_STEREO_3D_IMAGE_FORMAT,
+ FTYPE_ENUM(
+ STEREO_3D_IMAGE_FORMAT_BEGIN = 0,
+ STEREO_3D_JPS = STEREO_3D_IMAGE_FORMAT_BEGIN,
+ STEREO_3D_MPO,
+ NUM_OF_STEREO_3D_IMAGE_FORMAT
+ )
+)STEREO_3D_IMAGE_FORMAT_T;
+
+/* YUV Auto test */
+FID_TO_TYPE_ENUM(
+ FID_YUV_AUTOTEST,
+ FTYPE_ENUM(
+ YUV_AUTOTEST_BEGIN = 0,
+ YUV_AUTOTEST_SET_SHADDING = YUV_AUTOTEST_BEGIN,
+ YUV_AUTOTEST_SET_GAMMA,
+ YUV_AUTOTEST_SET_AE,
+ YUV_AUTOTEST_SET_SHUTTER,
+ YUV_AUTOTEST_SET_GAIN,
+ YUV_AUTOTEST_GET_SHUTTER_RANGE,
+ YUV_AUTOTEST_GET_SHADDING,
+ YUV_AUTOTEST_GET_GAMMA,
+ YUV_AUTOTEST_GET_AE,
+ YUV_AUTOTEST_GET_SHUTTER,
+ YUV_AUTOTEST_GET_GAIN,
+ NUM_OF_YUV_AUTOTEST
+ )
+)YUV_AUTOTEST_T;
+
+#endif /* _KD_CAMERA_FEATURE_ENUM_H_ */
diff --git a/kernel-headers/kd_camera_feature_id.h b/kernel-headers/kd_camera_feature_id.h
new file mode 100644
index 0000000..c44c496
--- /dev/null
+++ b/kernel-headers/kd_camera_feature_id.h
@@ -0,0 +1,92 @@
+#ifndef _KD_CAMERA_FEATURE_ID_H_
+#define _KD_CAMERA_FEATURE_ID_H_
+
+
+
+/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
+/* Definition of Feature ID. */
+/* ps: FID = 0 is reserved. */
+/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
+typedef enum {
+ FID_PRE_BEGIN = 0,
+ /* //////////////////////////////////////////////////////////////////////////// */
+ /* Scene-Independent (SI) feature id. */
+ FID_PRE_BEGIN_SI = FID_PRE_BEGIN,
+ /* ---------------------------------------------------------------------------- */
+ /* Misc. feature id. */
+ FID_PRE_BEGIN_MISC_SI = FID_PRE_BEGIN_SI,
+ FID_ZOOM_FACTOR, /* Legacy symbol (Remove if possible) */
+ FID_AE_STROBE,
+ FID_EIS,
+ FID_ZSD,
+ FID_AWB2PASS,
+ FID_AF_LAMP,
+ FID_FAST_CONTINUOUS_SHOT,
+ FID_OVER_LAST_MISC_SI,
+ FID_PRE_BEGIN_RAW_ONLY_SI = FID_OVER_LAST_MISC_SI - 1,
+ FID_OVER_LAST_RAW_ONLY_SI,
+ FID_PRE_BEGIN_RAW_YUV_SI = FID_OVER_LAST_RAW_ONLY_SI - 1,
+ FID_SCENE_MODE,
+ FID_COLOR_EFFECT,
+ FID_CAPTURE_MODE,
+ FID_CAP_SIZE,
+ FID_PREVIEW_SIZE,
+ FID_VIDEO_PREVIEW_SIZE,
+ FID_FRAME_RATE,
+ FID_FRAME_RATE_RANGE,
+ FID_AE_FLICKER,
+ FID_FOCUS_DIST_NORMAL,
+ FID_FOCUS_DIST_MACRO,
+ FID_STEREO_3D_CAP_SIZE,
+ FID_STEREO_3D_PREVIEW_SIZE,
+ FID_STEREO_3D_TYPE,
+ FID_STEREO_3D_MODE,
+ FID_STEREO_3D_IMAGE_FORMAT,
+ FID_OVER_LAST_RAW_YUV_SI,
+ /* YUV-only feature id. */
+ FID_PRE_BEGIN_YUV_ONLY_SI = FID_OVER_LAST_RAW_YUV_SI - 1,
+ FID_OVER_LAST_YUV_ONLY_SI,
+
+ /* ---------------------------------------------------------------------------- */
+ FID_OVER_LAST_SI = FID_OVER_LAST_YUV_ONLY_SI,
+ /* //////////////////////////////////////////////////////////////////////////// */
+ /* Scene-Dependent (SD) feature id. */
+ FID_PRE_BEGIN_SD = FID_OVER_LAST_SI - 1,
+ /* ---------------------------------------------------------------------------- */
+ /* Misc. feature id. */
+ FID_PRE_BEGIN_MISC_SD = FID_PRE_BEGIN_SD,
+ FID_FD_ON_OFF,
+ FID_OVER_LAST_MISC_SD,
+ /* RAW-only feature id. */
+ FID_PRE_BEGIN_RAW_ONLY_SD = FID_OVER_LAST_MISC_SD - 1,
+ FID_OVER_LAST_RAW_ONLY_SD,
+ /* RAW-YUV-shared feature id. */
+ FID_PRE_BEGIN_RAW_YUV_SD = FID_OVER_LAST_RAW_ONLY_SD - 1,
+ FID_AE_SCENE_MODE,
+ FID_AE_METERING,
+ FID_AE_ISO,
+ FID_AE_EV,
+ FID_AF_MODE,
+ FID_AF_METERING,
+ FID_AWB_MODE,
+ FID_ISP_EDGE,
+ FID_ISP_HUE,
+ FID_ISP_SAT,
+ FID_ISP_BRIGHT,
+ FID_ISP_CONTRAST,
+ FID_OVER_LAST_RAW_YUV_SD,
+ /* YUV-only feature id. */
+ FID_PRE_BEGIN_YUV_ONLY_SD = FID_OVER_LAST_RAW_YUV_SD - 1,
+ FID_YUV_AUTOTEST,
+ FID_OVER_LAST_YUV_ONLY_SD,
+
+ /* ---------------------------------------------------------------------------- */
+ FID_OVER_LAST_SD = FID_OVER_LAST_YUV_ONLY_SD,
+ /* //////////////////////////////////////////////////////////////////////////// */
+ FID_OVER_LAST = FID_OVER_LAST_SD
+/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
+
+} FEATURE_ID;
+
+
+#endif /* _KD_CAMERA_FEATURE_ID_H_ */
diff --git a/kernel-headers/kd_imgsensor.h b/kernel-headers/kd_imgsensor.h
new file mode 100644
index 0000000..98ace23
--- /dev/null
+++ b/kernel-headers/kd_imgsensor.h
@@ -0,0 +1,462 @@
+#ifndef _KD_IMGSENSOR_H
+#define _KD_IMGSENSOR_H
+
+#include <linux/ioctl.h>
+/* #define CONFIG_COMPAT */
+#ifdef CONFIG_COMPAT
+/* 64 bit */
+#include <linux/fs.h>
+#include <linux/compat.h>
+#endif
+
+#ifndef ASSERT
+#define ASSERT(expr) BUG_ON(!(expr))
+#endif
+
+#define IMGSENSORMAGIC 'i'
+/* IOCTRL(inode * ,file * ,cmd ,arg ) */
+/* S means "set through a ptr" */
+/* T means "tell by a arg value" */
+/* G means "get by a ptr" */
+/* Q means "get by return a value" */
+/* X means "switch G and S atomically" */
+/* H means "switch T and Q atomically" */
+
+/*******************************************************************************
+*
+********************************************************************************/
+#define YUV_INFO(_id, name, getCalData)\
+ { \
+ _id, name, \
+NSFeature : : YUVSensorInfo < _id > : : createInstance(name, #name), \
+ (NSFeature : : SensorInfoBase*(*)()) \
+NSFeature : : YUVSensorInfo < _id > : : getInstance, \
+NSFeature : : YUVSensorInfo < _id > : : getDefaultData, \
+ getCalData, \
+NSFeature : : YUVSensorInfo < _id > : : getNullFlickerPara \
+ }
+#define RAW_INFO(_id, name, getCalData)\
+ { \
+ _id, name, \
+NSFeature : : RAWSensorInfo < _id > : : createInstance(name, #name), \
+ (NSFeature : : SensorInfoBase*(*)()) \
+NSFeature : : RAWSensorInfo < _id > : : getInstance, \
+NSFeature : : RAWSensorInfo < _id > : : getDefaultData, \
+ getCalData, \
+NSFeature : : RAWSensorInfo < _id > : : getFlickerPara \
+ }
+/*******************************************************************************
+*
+********************************************************************************/
+
+/* sensorOpen */
+#define KDIMGSENSORIOC_T_OPEN _IO(IMGSENSORMAGIC, 0)
+/* sensorGetInfo */
+#define KDIMGSENSORIOC_X_GETINFO _IOWR(IMGSENSORMAGIC, 5, ACDK_SENSOR_GETINFO_STRUCT)
+/* sensorGetResolution */
+#define KDIMGSENSORIOC_X_GETRESOLUTION _IOWR(IMGSENSORMAGIC, 10, ACDK_SENSOR_RESOLUTION_INFO_STRUCT)
+/* For kernel 64-bit */
+#define KDIMGSENSORIOC_X_GETRESOLUTION2 _IOWR(IMGSENSORMAGIC, 10, ACDK_SENSOR_PRESOLUTION_STRUCT)
+/* sensorFeatureControl */
+#define KDIMGSENSORIOC_X_FEATURECONCTROL _IOWR(IMGSENSORMAGIC, 15, ACDK_SENSOR_FEATURECONTROL_STRUCT)
+/* sensorControl */
+#define KDIMGSENSORIOC_X_CONTROL _IOWR(IMGSENSORMAGIC, 20, ACDK_SENSOR_CONTROL_STRUCT)
+/* sensorClose */
+#define KDIMGSENSORIOC_T_CLOSE _IO(IMGSENSORMAGIC, 25)
+/* sensorSearch */
+#define KDIMGSENSORIOC_T_CHECK_IS_ALIVE _IO(IMGSENSORMAGIC, 30)
+/* set sensor driver */
+#define KDIMGSENSORIOC_X_SET_DRIVER _IOWR(IMGSENSORMAGIC, 35, SENSOR_DRIVER_INDEX_STRUCT)
+/* get socket postion */
+#define KDIMGSENSORIOC_X_GET_SOCKET_POS _IOWR(IMGSENSORMAGIC, 40, u32)
+/* set I2C bus */
+#define KDIMGSENSORIOC_X_SET_I2CBUS _IOWR(IMGSENSORMAGIC, 45, u32)
+/* set I2C bus */
+#define KDIMGSENSORIOC_X_RELEASE_I2C_TRIGGER_LOCK _IO(IMGSENSORMAGIC, 50)
+/* Set Shutter Gain Wait Done */
+#define KDIMGSENSORIOC_X_SET_SHUTTER_GAIN_WAIT_DONE _IOWR(IMGSENSORMAGIC, 55, u32)
+/* set mclk */
+#define KDIMGSENSORIOC_X_SET_MCLK_PLL _IOWR(IMGSENSORMAGIC, 60, ACDK_SENSOR_MCLK_STRUCT)
+#define KDIMGSENSORIOC_X_GETINFO2 _IOWR(IMGSENSORMAGIC, 65, IMAGESENSOR_GETINFO_STRUCT)
+/* set open/close sensor index */
+#define KDIMGSENSORIOC_X_SET_CURRENT_SENSOR _IOWR(IMGSENSORMAGIC, 70, u32)
+/* set GPIO */
+#define KDIMGSENSORIOC_X_SET_GPIO _IOWR(IMGSENSORMAGIC, 75, IMGSENSOR_GPIO_STRUCT)
+/* Get ISP CLK */
+#define KDIMGSENSORIOC_X_GET_ISP_CLK _IOWR(IMGSENSORMAGIC, 80, u32)
+
+#ifdef CONFIG_COMPAT
+#define COMPAT_KDIMGSENSORIOC_X_GETINFO _IOWR(IMGSENSORMAGIC, 5, COMPAT_ACDK_SENSOR_GETINFO_STRUCT)
+#define COMPAT_KDIMGSENSORIOC_X_FEATURECONCTROL _IOWR(IMGSENSORMAGIC, 15, COMPAT_ACDK_SENSOR_FEATURECONTROL_STRUCT)
+#define COMPAT_KDIMGSENSORIOC_X_CONTROL _IOWR(IMGSENSORMAGIC, 20, COMPAT_ACDK_SENSOR_CONTROL_STRUCT)
+#define COMPAT_KDIMGSENSORIOC_X_GETINFO2 _IOWR(IMGSENSORMAGIC, 65, COMPAT_IMAGESENSOR_GETINFO_STRUCT)
+#define COMPAT_KDIMGSENSORIOC_X_GETRESOLUTION2 _IOWR(IMGSENSORMAGIC, 10, COMPAT_ACDK_SENSOR_PRESOLUTION_STRUCT)
+#endif
+
+/*******************************************************************************
+*
+********************************************************************************/
+/* SENSOR CHIP VERSION */
+/*IMX*/
+#define IMX220_SENSOR_ID 0x0220
+#define IMX145_SENSOR_ID 0x0145
+#define IMX219_SENSOR_ID 0x0219
+#define IMX215_SENSOR_ID 0x0215
+#define IMX214_SENSOR_ID 0x0214
+#define IMX179_SENSOR_ID 0x0179
+#define IMX175_SENSOR_ID 0x0175
+#define IMX178_SENSOR_ID 0x0178
+#define IMX164_SENSOR_ID 0x0164
+#define IMX135_SENSOR_ID 0x0135
+#define IMX132MIPI_SENSOR_ID 0x0132
+#define IMX119_SENSOR_ID 0x0119
+#define IMX105_SENSOR_ID 0x0105
+#define IMX091_SENSOR_ID 0x0091
+#define IMX073_SENSOR_ID 0x0046
+#define IMX058_SENSOR_ID 0x0058
+#define IMX166_SENSOR_ID 0x0152
+/*OV*/
+#define OV23850_SENSOR_ID 0x023850
+#define OV16825MIPI_SENSOR_ID 0x016820
+#define OV13850_SENSOR_ID 0xD850
+#define OV12830_SENSOR_ID 0xC830
+#define OV9760MIPI_SENSOR_ID 0x9760
+#define OV9762MIPI_SENSOR_ID 0x9762
+#define OV9762SUBMIPI_SENSOR_ID 0x9763
+#define OV9740MIPI_SENSOR_ID 0x9740
+#define OV9726_SENSOR_ID 0x9726
+#define OV9726MIPI_SENSOR_ID 0x9726
+#define OV8865_SENSOR_ID 0x8865
+#define OV8858_SENSOR_ID 0x8858
+#define OV8858S_SENSOR_ID (0x8858+1)
+#define OV8858TRULY_SENSOR_ID 0x885a
+#define OV8858SUNNY_SENSOR_ID 0x8859
+#define OV8830_SENSOR_ID 0x8830
+#define OV8825_SENSOR_ID 0x8825
+#define OV7675_SENSOR_ID 0x7673
+#define OV5693_SENSOR_ID 0x5690
+#define OV5670MIPI_SENSOR_ID 0x5670
+#define OV5670SUBMIPI_SENSOR_ID 0x5672
+#define OV5671MIPI_SENSOR_ID 0x5671
+#define OV5650_SENSOR_ID 0x5651
+#define OV5650MIPI_SENSOR_ID 0x5651
+#define OV5648MIPI_SENSOR_ID 0x5648
+#define OV5647_SENSOR_ID 0x5647
+#define OV5647MIPI_SENSOR_ID 0x5647
+#define OV5645MIPI_SENSOR_ID 0x5645
+#define OV5642_SENSOR_ID 0x5642
+#define OV4688MIPI_SENSOR_ID 0x4688
+#define OV3640_SENSOR_ID 0x364C
+#define OV2724MIPI_SENSOR_ID 0x2724
+#define OV2722MIPI_SENSOR_ID 0x2722
+#define OV2680MIPI_SENSOR_ID 0x2680
+#define OV2680_SENSOR_ID 0x2680
+#define OV2659_SENSOR_ID 0x2656
+#define OV2655_SENSOR_ID 0x2656
+#define OV2650_SENSOR_ID 0x2652
+#define OV2650_SENSOR_ID_1 0x2651
+#define OV2650_SENSOR_ID_2 0x2652
+#define OV2650_SENSOR_ID_3 0x2655
+/*S5K*/
+#define S5K2X8_SENSOR_ID 0x2188
+#define S5K2P8_SENSOR_ID 0x2108
+#define S5K3M2_SENSOR_ID 0x30D2
+#define S5K3M2TRULY_SENSOR_ID 0x30D4
+#define S5K3M2SUNNY_SENSOR_ID 0x30D3
+#define S5K3AAEA_SENSOR_ID 0x07AC
+#define S5K3BAFB_SENSOR_ID 0x7070
+#define S5K3H7Y_SENSOR_ID 0x3087
+#define S5K3H2YX_SENSOR_ID 0x382b
+#define S5KA3DFX_SENSOR_ID 0x00AB
+#define S5K3E2FX_SENSOR_ID 0x3E2F
+#define S5K4B2FX_SENSOR_ID 0x5080
+#define S5K4E1GA_SENSOR_ID 0x4E10
+#define S5K4ECGX_SENSOR_ID 0x4EC0
+#define S5K53BEX_SENSOR_ID 0x45A8
+#define S5K53BEB_SENSOR_ID 0x87A8
+#define S5K5BAFX_SENSOR_ID 0x05BA
+#define S5K4E2GX_SENSOR_ID 0x4e20
+#define S5K5E2YA_SENSOR_ID 0x5e20
+#define S5K5E2YASUB_SENSOR_ID 0x5e21
+#define S5K4H5YX_2LANE_SENSOR_ID 0x485B
+#define S5K4H5YC_SENSOR_ID 0x485B
+#define S5K4H5YC_2LANE_SENSOR_ID 0x485b
+#define S5K83AFX_SENSOR_ID 0x01C4
+#define S5K5CAGX_SENSOR_ID 0x05ca
+#define S5K8AAYX_MIPI_SENSOR_ID 0x08aa
+#define S5K8AAYX_SENSOR_ID 0x08aa
+#define S5K3L2_SENSOR_ID 0x30c2
+#define S5K3H5XA_SENSOR_ID 0x3085
+/*HI*/
+#define HI841_SENSOR_ID 0x0841
+#define HI707_SENSOR_ID 0x00b8
+#define HI704_SENSOR_ID 0x0096
+#define HI551_SENSOR_ID 0x0551
+#define HI545MIPI_SENSOR_ID 0x0545
+#define HI544MIPI_SENSOR_ID 0x0544
+#define HI542_SENSOR_ID 0x00B1
+#define HI542MIPI_SENSOR_ID 0x00B1
+#define HI253_SENSOR_ID 0x0092
+#define HI251_SENSOR_ID 0x0084
+#define HI191MIPI_SENSOR_ID 0x0191
+#define HIVICF_SENSOR_ID 0x0081
+/*MT*/
+#define MT9D011_SENSOR_ID 0x1511
+#define MT9D111_SENSOR_ID 0x1511
+#define MT9D112_SENSOR_ID 0x1580
+#define MT9M011_SENSOR_ID 0x1433
+#define MT9M111_SENSOR_ID 0x143A
+#define MT9M112_SENSOR_ID 0x148C
+#define MT9M113_SENSOR_ID 0x2480
+#define MT9P012_SENSOR_ID 0x2800
+#define MT9P012_SENSOR_ID_REV7 0x2801
+#define MT9T012_SENSOR_ID 0x1600
+#define MT9T013_SENSOR_ID 0x2600
+#define MT9T113_SENSOR_ID 0x4680
+#define MT9V112_SENSOR_ID 0x1229
+#define MT9DX11_SENSOR_ID 0x1519
+#define MT9D113_SENSOR_ID 0x2580
+#define MT9D115_SENSOR_ID 0x2580
+#define MT9D115MIPI_SENSOR_ID 0x2580
+#define MT9V113_SENSOR_ID 0x2280
+#define MT9V114_SENSOR_ID 0x2283
+#define MT9V115_SENSOR_ID 0x2284
+#define MT9P015_SENSOR_ID 0x2803
+#define MT9P017_SENSOR_ID 0x4800
+#define MT9P017MIPI_SENSOR_ID 0x4800
+#define MT9T113MIPI_SENSOR_ID 0x4680
+/*GC*/
+#define GC2755_SENSOR_ID 0x2655
+#define GC2355_SENSOR_ID 0x2355
+#define GC2365_SENSOR_ID 0x2365
+#define GC2355SUB_SENSOR_ID 0x2356
+#define GC2235_SENSOR_ID 0x2235
+
+#define GC2235MIPI_SENSOR_ID 0x2235
+
+#define GC2035_SENSOR_ID 0x2035
+#define GC2145_SENSOR_ID 0x2145
+#define GC0330_SENSOR_ID 0xC1
+#define GC0329_SENSOR_ID 0xC0
+#define GC0310_SENSOR_ID 0xa310
+#define GC0310MAIN_SENSOR_ID 0xa311
+#define GC2155MIPI_SENSOR_ID 0x2155
+#define GC0313MIPI_YUV_SENSOR_ID 0xD0
+#define GC0409_SENSOR_ID 0x0409
+#define GC5004MIPI_SENSOR_ID 0x5004
+#define GC5005MIPI_SENSOR_ID 0x5005
+#define GC5005SUBMIPI_SENSOR_ID 0x5006
+#define GC5024MIPI_SENSOR_ID 0x5024
+#define GC8024MIPI_SENSOR_ID 0x8024
+#define GC8003MIPI_SENSOR_ID 0x8003
+/*SP*/
+#define SP0A19_YUV_SENSOR_ID 0xA6
+#define SP0A20_SENSOR_ID 0x2b
+#define SP2508_SENSOR_ID 0x2508
+#define SP2509MIPI_SENSOR_ID 0x2509
+#define SP2518_YUV_SENSOR_ID 0x53
+#define SP5409MIPI_SENSOR_ID 0x5409
+#define SP5409SUBMIPI_SENSOR_ID 0x540a
+#define SP8408MIPI_SENSOR_ID 0x1490
+/*A*/
+#define A5141MIPI_SENSOR_ID 0x4800
+#define A5142MIPI_SENSOR_ID 0x4800
+/*HM*/
+#define HM3451_SENSOR_ID 0x345
+#define HM5040_SENSOR_ID 0x3bb
+/*AR*/
+#define AR0833_SENSOR_ID 0x4B03
+/*SIV*/
+#define SID020A_SENSOR_ID 0x12B4
+#define SIV100B_SENSOR_ID 0x0C11
+#define SIV100A_SENSOR_ID 0x0C10
+#define SIV120A_SENSOR_ID 0x1210
+#define SIV120B_SENSOR_ID 0x0012
+#define SIV121D_SENSOR_ID 0xDE
+#define SIM101B_SENSOR_ID 0x09A0
+#define SIM120C_SENSOR_ID 0x0012
+#define SID130B_SENSOR_ID 0x001b
+#define SIC110A_SENSOR_ID 0x000D
+#define SIV120B_SENSOR_ID 0x0012
+/*PAS (PixArt Image)*/
+#define PAS105_SENSOR_ID 0x0065
+#define PAS302_SENSOR_ID 0x0064
+#define PAS5101_SENSOR_ID 0x0067
+#define PAS6180_SENSOR_ID 0x6179
+/*Panasoic*/
+#define MN34152_SENSOR_ID 0x01
+/*Toshiba*/
+#define T4KA7_SENSOR_ID 0x2c30
+/*Others*/
+#define SHARP3D_SENSOR_ID 0x003d
+#define T8EV5_SENSOR_ID 0x1011
+
+/* CAMERA DRIVER NAME */
+#define CAMERA_HW_DEVNAME "kd_camera_hw"
+/* SENSOR DEVICE DRIVER NAME */
+/*IMX*/
+#define SENSOR_DRVNAME_IMX220_MIPI_RAW "imx220mipiraw"
+#define SENSOR_DRVNAME_IMX145_MIPI_RAW "imx145mipiraw"
+#define SENSOR_DRVNAME_IMX219_MIPI_RAW "imx219mipiraw"
+#define SENSOR_DRVNAME_IMX215_MIPI_RAW "imx215mipiraw"
+#define SENSOR_DRVNAME_IMX214_MIPI_RAW "imx214mipiraw"
+#define SENSOR_DRVNAME_IMX179_MIPI_RAW "imx179mipiraw"
+#define SENSOR_DRVNAME_IMX179_MIPI_RAW_4LANE "imx179mipiraw4lane"
+#define SENSOR_DRVNAME_IMX175_MIPI_RAW "imx175mipiraw"
+#define SENSOR_DRVNAME_IMX178_MIPI_RAW "imx178mipiraw"
+#define SENSOR_DRVNAME_IMX164_MIPI_RAW "imx164mipiraw"
+#define SENSOR_DRVNAME_IMX135_MIPI_RAW "imx135mipiraw"
+#define SENSOR_DRVNAME_IMX132_MIPI_RAW "imx132mipiraw"
+#define SENSOR_DRVNAME_IMX119_MIPI_RAW "imx119mipiraw"
+#define SENSOR_DRVNAME_IMX105_MIPI_RAW "imx105mipiraw"
+#define SENSOR_DRVNAME_IMX091_MIPI_RAW "imx091mipiraw"
+#define SENSOR_DRVNAME_IMX073_MIPI_RAW "imx073mipiraw"
+#define SENSOR_DRVNAME_IMX166_MIPI_RAW "imx166mipiraw"
+/*OV*/
+#define SENSOR_DRVNAME_OV16825_MIPI_RAW "ov16825mipiraw"
+#define SENSOR_DRVNAME_OV13850_MIPI_RAW "ov13850mipiraw"
+#define SENSOR_DRVNAME_OV12830_MIPI_RAW "ov12830mipiraw"
+#define SENSOR_DRVNAME_OV9760_MIPI_RAW "ov9760mipiraw"
+#define SENSOR_DRVNAME_OV9762_MIPI_RAW "ov9762mipiraw"
+#define SENSOR_DRVNAME_OV9762SUB_MIPI_RAW "ov9762submipiraw"
+#define SENSOR_DRVNAME_OV9740_MIPI_YUV "ov9740mipiyuv"
+#define SENSOR_DRVNAME_0V9726_RAW "ov9726raw"
+#define SENSOR_DRVNAME_OV9726_MIPI_RAW "ov9726mipiraw"
+#define SENSOR_DRVNAME_OV8865_MIPI_RAW "ov8865mipiraw"
+#define SENSOR_DRVNAME_OV8858_MIPI_RAW "ov8858mipiraw"
+#define SENSOR_DRVNAME_OV8858S_MIPI_RAW "ov8858smipiraw"
+#define SENSOR_DRVNAME_OV8858TRULY_MIPI_RAW "ov8858trulymipiraw"
+#define SENSOR_DRVNAME_OV8858SUNNY_MIPI_RAW "ov8858sunnymipiraw"
+#define SENSOR_DRVNAME_OV8830_RAW "ov8830"
+#define SENSOR_DRVNAME_OV8825_MIPI_RAW "ov8825mipiraw"
+#define SENSOR_DRVNAME_OV7675_YUV "ov7675yuv"
+#define SENSOR_DRVNAME_OV5693_MIPI_RAW "ov5693mipi"
+#define SENSOR_DRVNAME_OV5670_MIPI_RAW "ov5670mipiraw"
+#define SENSOR_DRVNAME_OV5670SUB_MIPI_RAW "ov5670submipiraw"
+#define SENSOR_DRVNAME_OV5671_MIPI_RAW "ov5671mipiraw"
+#define SENSOR_DRVNAME_OV5647MIPI_RAW "ov5647mipiraw"
+#define SENSOR_DRVNAME_OV5645_MIPI_YUV "ov5645_mipi_yuv"
+#define SENSOR_DRVNAME_OV5650MIPI_RAW "ov5650mipiraw"
+#define SENSOR_DRVNAME_OV5650_RAW "ov5650raw"
+#define SENSOR_DRVNAME_OV5648_MIPI_RAW "ov5648mipi"
+#define SENSOR_DRVNAME_OV5647_RAW "ov5647"
+#define SENSOR_DRVNAME_OV5642_RAW "ov5642raw"
+#define SENSOR_DRVNAME_OV5642_MIPI_YUV "ov5642mipiyuv"
+#define SENSOR_DRVNAME_OV5642_MIPI_RGB "ov5642mipirgb"
+#define SENSOR_DRVNAME_OV5642_MIPI_JPG "ov5642mipijpg"
+#define SENSOR_DRVNAME_OV5642_YUV "ov5642yuv"
+#define SENSOR_DRVNAME_OV5642_YUV_SWI2C "ov5642yuvswi2c"
+#define SENSOR_DRVNAME_OV4688_MIPI_RAW "ov4688mipiraw"
+#define SENSOR_DRVNAME_OV3640_RAW "ov3640"
+#define SENSOR_DRVNAME_OV3640_YUV "ov3640yuv"
+#define SENSOR_DRVNAME_OV2722_MIPI_RAW "ov2722mipiraw"
+#define SENSOR_DRVNAME_OV2680_MIPI_RAW "ov2680mipiraw"
+#define SENSOR_DRVNAME_OV2659_YUV "ov2659yuv"
+#define SENSOR_DRVNAME_OV2655_YUV "ov2655yuv"
+#define SENSOR_DRVNAME_OV2650_RAW "ov265x"
+/*S5K*/
+#define SENSOR_DRVNAME_S5K2P8_MIPI_RAW "s5k2p8mipiraw"
+#define SENSOR_DRVNAME_S5K3M2_MIPI_RAW "s5k3m2mipiraw"
+#define SENSOR_DRVNAME_S5K3M2TRULY_MIPI_RAW "s5k3m2trulymipiraw"
+#define SENSOR_DRVNAME_S5K3M2SUNNY_MIPI_RAW "s5k3m2sunnymipiraw"
+#define SENSOR_DRVNAME_S5K3H2YX_MIPI_RAW "s5k3h2yxmipiraw"
+#define SENSOR_DRVNAME_S5K3H7Y_MIPI_RAW "s5k3h7ymipiraw"
+#define SENSOR_DRVNAME_S5K4H5YC_MIPI_RAW "s5k4h5ycmipiraw"
+#define SENSOR_DRVNAME_S5K4E1GA_MIPI_RAW "s5k4e1gamipiraw"
+#define SENSOR_DRVNAME_S5K4ECGX_MIPI_YUV "s5k4ecgxmipiyuv"
+#define SENSOR_DRVNAME_S5K5CAGX_YUV "s5k5cagxyuv"
+#define SENSOR_DRVNAME_S5K4H5YX_2LANE_MIPI_RAW "s5k4h5yx2lanemipiraw"
+#define SENSOR_DRVNAME_S5K4E2GX_MIPI_RAW "s5k4e2gxmipiraw"
+#define SENSOR_DRVNAME_S5K5E2YA_MIPI_RAW "s5k5e2yamipiraw"
+#define SENSOR_DRVNAME_S5K5E2YASUB_MIPI_RAW "s5k5e2yasubmipiraw"
+#define SENSOR_DRVNAME_S5K8AAYX_MIPI_YUV "s5k8aayxmipiyuv"
+#define SENSOR_DRVNAME_S5K8AAYX_YUV "s5k8aayxyuv"
+#define SENSOR_DRVNAME_S5K3L2_MIPI_RAW "s5k3l2mipiraw"
+#define SENSOR_DRVNAME_S5K3H5XA_MIPI_RAW "s5k3h5xamipiraw"
+#define SENSOR_DRVNAME_S5K4H5YC_MIPI_RAW_2LANE "s5k4h5ycmipiraw2lane"
+/*HI*/
+#define SENSOR_DRVNAME_HI841_MIPI_RAW "hi841mipiraw"
+#define SENSOR_DRVNAME_HI707_YUV "hi707yuv"
+#define SENSOR_DRVNAME_HI704_YUV "hi704yuv"
+#define SENSOR_DRVNAME_HI551_MIPI_RAW "hi551mipiraw"
+#define SENSOR_DRVNAME_HI545_MIPI_RAW "hi545mipiraw"
+#define SENSOR_DRVNAME_HI542_RAW "hi542raw"
+#define SENSOR_DRVNAME_HI542MIPI_RAW "hi542mipiraw"
+#define SENSOR_DRVNAME_HI544_MIPI_RAW "hi544mipiraw"
+#define SENSOR_DRVNAME_HI253_YUV "hi253yuv"
+#define SENSOR_DRVNAME_HI191_MIPI_RAW "hi191mipiraw"
+/*MT*/
+#define SENSOR_DRVNAME_MT9P012_RAW "mt9p012"
+#define SENSOR_DRVNAME_MT9P015_RAW "mt9p015"
+#define SENSOR_DRVNAME_MT9P017_RAW "mt9p017"
+#define SENSOR_DRVNAME_MT9P017_MIPI_RAW "mt9p017mipi"
+#define SENSOR_DRVNAME_MT9D115_MIPI_RAW "mt9d115mipiraw"
+#define SENSOR_DRVNAME_MT9V114_YUV "mt9v114"
+#define SENSOR_DRVNAME_MT9V115_YUV "mt9v115yuv"
+#define SENSOR_DRVNAME_MT9T113_YUV "mt9t113yuv"
+#define SENSOR_DRVNAME_MT9V113_YUV "mt9v113yuv"
+#define SENSOR_DRVNAME_MT9T113_MIPI_YUV "mt9t113mipiyuv"
+/*GC*/
+#define SENSOR_DRVNAME_GC2035_YUV "gc2035_yuv"
+#define SENSOR_DRVNAME_GC2235_RAW "gc2235_raw"
+#define SENSOR_DRVNAME_GC2235_MIPI_RAW "gc2235mipiraw"
+#define SENSOR_DRVNAME_GC2755_MIPI_RAW "gc2755mipiraw"
+#define SENSOR_DRVNAME_GC2355_MIPI_RAW "gc2355mipiraw"
+#define SENSOR_DRVNAME_GC2365_MIPI_RAW "gc2365mipiraw"
+#define SENSOR_DRVNAME_GC2355SUB_MIPI_RAW "gc2356submipiraw"
+#define SENSOR_DRVNAME_GC0330_YUV "gc0330_yuv"
+#define SENSOR_DRVNAME_GC0329_YUV "gc0329yuv"
+#define SENSOR_DRVNAME_GC2145_MIPI_YUV "gc2145mipiyuv"
+#define SENSOR_DRVNAME_GC0310_MIPI_YUV "gc0310mipiyuv"
+#define SENSOR_DRVNAME_GC0310MAIN_MIPI_YUV "gc0310mainmipiyuv"
+#define SENSOR_DRVNAME_GC0310_YUV "gc0310yuv"
+#define SENSOR_DRVNAME_GC2155_MIPI_YUV "gc2155mipiyuv"
+#define SENSOR_DRVNAME_GC0313MIPI_YUV "gc0313mipiyuv"
+#define SENSOR_DRVNAME_GC0409MIPI_RAW "gc0409mipiraw"
+#define SENSOR_DRVNAME_GC5004_MIPI_RAW "gc5004mipiraw"
+#define SENSOR_DRVNAME_GC5005_MIPI_RAW "gc5005mipiraw"
+#define SENSOR_DRVNAME_GC5005SUB_MIPI_RAW "gc5005submipiraw"
+#define SENSOR_DRVNAME_GC5024_MIPI_RAW "gc5024mipiraw"
+#define SENSOR_DRVNAME_GC8024_MIPI_RAW "gc8024mipiraw"
+#define SENSOR_DRVNAME_GC8003_MIPI_RAW "gc8003mipiraw"
+/*SP*/
+#define SENSOR_DRVNAME_SP0A19_YUV "sp0a19yuv"
+#define SENSOR_DRVNAME_SP0A20_YUV "sp0a20yuv"
+#define SENSOR_DRVNAME_SP2508_MIPI_RAW "sp2508mipiraw"
+#define SENSOR_DRVNAME_SP2509_MIPI_RAW "sp2509mipiraw"
+#define SENSOR_DRVNAME_SP2518_YUV "sp2518yuv"
+#define SENSOR_DRVNAME_SP5409_MIPI_RAW "sp5409_mipi_raw"
+#define SENSOR_DRVNAME_SP5409SUB_MIPI_RAW "sp5409sub_mipi_raw"
+#define SENSOR_DRVNAME_SP8408_MIPI_RAW "sp8408_mipi_raw"
+/*A*/
+#define SENSOR_DRVNAME_A5141_MIPI_RAW "a5141mipiraw"
+#define SENSOR_DRVNAME_A5142_MIPI_RAW "a5142mipiraw"
+/*HM*/
+#define SENSOR_DRVNAME_HM3451_RAW "hm3451raw"
+#define SENSOR_DRVNAME_HM5040_MIPI_RAW "hm5040mipiraw"
+/*AR*/
+#define SENSOR_DRVNAME_AR0833_MIPI_RAW "ar0833mipiraw"
+/*SIV*/
+#define SENSOR_DRVNAME_SIV121D_YUV "siv121dyuv"
+#define SENSOR_DRVNAME_SIV120B_YUV "siv120byuv"
+/*PAS (PixArt Image)*/
+#define SENSOR_DRVNAME_PAS6180_SERIAL_YUV "pas6180serialyuv"
+/*Panasoic*/
+#define SENSOR_DRVNAME_MN34152_MIPI_RAW "mn34152mipiraw"
+/*Toshiba*/
+#define SENSOR_DRVNAME_T4KA7_MIPI_RAW "t4ka7mipiraw"
+/*Others*/
+#define SENSOR_DRVNAME_SHARP3D_MIPI_YUV "sharp3dmipiyuv"
+#define SENSOR_DRVNAME_T8EV5_YUV "t8ev5_yuv"
+/*Test*/
+#define SENSOR_DRVNAME_IMX135_MIPI_RAW_5MP "imx135mipiraw5mp"
+
+/*******************************************************************************
+*
+********************************************************************************/
+void KD_IMGSENSOR_PROFILE_INIT(void);
+void KD_IMGSENSOR_PROFILE(char *tag);
+
+#define mDELAY(ms) mdelay(ms)
+#define uDELAY(us) udelay(us)
+#endif /* _KD_IMGSENSOR_H */
diff --git a/kernel-headers/kd_imgsensor_define.h b/kernel-headers/kd_imgsensor_define.h
new file mode 100644
index 0000000..8eab108
--- /dev/null
+++ b/kernel-headers/kd_imgsensor_define.h
@@ -0,0 +1,1108 @@
+#ifndef _KD_IMGSENSOR_DATA_H
+#define _KD_IMGSENSOR_DATA_H
+
+/* #include "../camera/kd_camera_hw.h" */
+#include "kd_camera_feature.h"
+
+#define SENSOR_CLOCK_POLARITY_HIGH 0
+#define SENSOR_CLOCK_POLARITY_LOW 1
+/* #define CONFIG_COMPAT */
+#ifdef CONFIG_COMPAT
+/* 64 bit */
+#include <linux/fs.h>
+#include <linux/compat.h>
+#endif
+
+
+
+/*************************************************
+*
+**************************************************/
+/* In KERNEL mode,SHOULD be sync with mediatype.h */
+/* CHECK before remove or modify */
+/* #undef BOOL */
+/* #define BOOL signed int */
+#ifndef _MEDIA_TYPES_H
+typedef unsigned char MUINT8;
+typedef unsigned short MUINT16;
+typedef unsigned int MUINT32;
+typedef signed char MINT8;
+typedef signed short MINT16;
+typedef signed int MINT32;
+#endif
+
+/*******************************************************************************
+*
+********************************************************************************/
+/* */
+/* msdk_isp_exp.h */
+/* */
+#define BASEGAIN 0x40
+#define BASEGAIN_SHIFT 6
+
+typedef enum {
+ ISP_DRIVING_2MA = 0,
+ ISP_DRIVING_4MA,
+ ISP_DRIVING_6MA,
+ ISP_DRIVING_8MA
+} ISP_DRIVING_CURRENT_ENUM;
+
+
+
+enum {
+ IMAGE_NORMAL = 0,
+ IMAGE_H_MIRROR,
+ IMAGE_V_MIRROR,
+ IMAGE_HV_MIRROR
+};
+
+
+typedef enum {
+ MSDK_SCENARIO_ID_CAMERA_PREVIEW = 0,
+ MSDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG,
+ MSDK_SCENARIO_ID_VIDEO_PREVIEW,
+ MSDK_SCENARIO_ID_HIGH_SPEED_VIDEO,
+ MSDK_SCENARIO_ID_CAMERA_ZSD,
+ MSDK_SCENARIO_ID_CAMERA_3D_PREVIEW,
+ MSDK_SCENARIO_ID_CAMERA_3D_CAPTURE,
+ MSDK_SCENARIO_ID_CAMERA_3D_VIDEO,
+ MSDK_SCENARIO_ID_TV_OUT,
+ MSDK_SCENARIO_ID_SLIM_VIDEO,
+ MSDK_SCENARIO_ID_CUSTOM1,
+ MSDK_SCENARIO_ID_CUSTOM2,
+ MSDK_SCENARIO_ID_CUSTOM3,
+ MSDK_SCENARIO_ID_CUSTOM4,
+ MSDK_SCENARIO_ID_CUSTOM5,
+ MSDK_SCENARIO_ID_MAX,
+} MSDK_SCENARIO_ID_ENUM;
+
+
+typedef enum {
+ MSDK_CAMERA_OPERATION_NORMAL_MODE = 0,
+ MSDK_CAMERA_OPERATION_META_MODE
+} ACDK_CAMERA_OPERATION_MODE_ENUM;
+
+
+/*******************************************************************************
+*
+********************************************************************************/
+
+/* */
+#define MAX_NUM_OF_SUPPORT_SENSOR 16
+/* */
+#define SENSOR_CLOCK_POLARITY_HIGH 0
+#define SENSOR_CLOCK_POLARITY_LOW 1
+/* */
+#define LENS_DRIVER_ID_DO_NOT_CARE 0xFFFFFFFF
+#define SENSOR_DOES_NOT_EXIST 0x00FFFFFF
+#define SENSOR_DOES_NOT_KNOW 0xFFFFFFFF
+
+#define SENSOR_FEATURE_START 3000
+typedef enum {
+ SENSOR_FEATURE_BEGIN = SENSOR_FEATURE_START,
+ SENSOR_FEATURE_GET_RESOLUTION,
+ SENSOR_FEATURE_GET_PERIOD,
+ SENSOR_FEATURE_GET_PIXEL_CLOCK_FREQ,
+ SENSOR_FEATURE_SET_ESHUTTER,
+ SENSOR_FEATURE_SET_NIGHTMODE,
+ SENSOR_FEATURE_SET_GAIN,
+ SENSOR_FEATURE_SET_GAIN_AND_ESHUTTER,
+ SENSOR_FEATURE_SET_FLASHLIGHT,
+ SENSOR_FEATURE_SET_ISP_MASTER_CLOCK_FREQ,
+ SENSOR_FEATURE_SET_REGISTER,
+ SENSOR_FEATURE_GET_REGISTER,
+ SENSOR_FEATURE_SET_CCT_REGISTER,
+ SENSOR_FEATURE_GET_CCT_REGISTER,
+ SENSOR_FEATURE_SET_ENG_REGISTER,
+ SENSOR_FEATURE_GET_ENG_REGISTER,
+ SENSOR_FEATURE_GET_REGISTER_DEFAULT,
+ SENSOR_FEATURE_GET_CONFIG_PARA,
+ SENSOR_FEATURE_CAMERA_PARA_TO_SENSOR,
+ SENSOR_FEATURE_SENSOR_TO_CAMERA_PARA,
+ SENSOR_FEATURE_GET_GROUP_COUNT,
+ SENSOR_FEATURE_GET_GROUP_INFO,
+ SENSOR_FEATURE_GET_ITEM_INFO,
+ SENSOR_FEATURE_SET_ITEM_INFO,
+ SENSOR_FEATURE_GET_ENG_INFO,
+ SENSOR_FEATURE_GET_LENS_DRIVER_ID,
+ SENSOR_FEATURE_SET_YUV_CMD,
+ SENSOR_FEATURE_SET_VIDEO_MODE,
+ SENSOR_FEATURE_SET_TARGET_FRAME_RATE,
+ SENSOR_FEATURE_SET_CALIBRATION_DATA,
+ SENSOR_FEATURE_SET_SENSOR_SYNC,
+ SENSOR_FEATURE_INITIALIZE_AF,
+ SENSOR_FEATURE_CONSTANT_AF,
+ SENSOR_FEATURE_INFINITY_AF,
+ SENSOR_FEATURE_MOVE_FOCUS_LENS,
+ SENSOR_FEATURE_GET_AF_STATUS,
+ SENSOR_FEATURE_GET_AE_STATUS,
+ SENSOR_FEATURE_GET_AWB_STATUS,
+ SENSOR_FEATURE_GET_AF_INF,
+ SENSOR_FEATURE_GET_AF_MACRO,
+ SENSOR_FEATURE_CHECK_SENSOR_ID,
+ SENSOR_FEATURE_SET_AUTO_FLICKER_MODE,
+ SENSOR_FEATURE_SET_TEST_PATTERN,
+ SENSOR_FEATURE_SET_SOFTWARE_PWDN,
+ SENSOR_FEATURE_SINGLE_FOCUS_MODE,
+ SENSOR_FEATURE_CANCEL_AF,
+ SENSOR_FEATURE_SET_AF_WINDOW,
+ SENSOR_FEATURE_GET_EV_AWB_REF,
+ SENSOR_FEATURE_GET_SHUTTER_GAIN_AWB_GAIN,
+ SENSOR_FEATURE_GET_AF_MAX_NUM_FOCUS_AREAS,
+ SENSOR_FEATURE_GET_AE_MAX_NUM_METERING_AREAS,
+ SENSOR_FEATURE_SET_AE_WINDOW,
+ SENSOR_FEATURE_GET_EXIF_INFO,
+ SENSOR_FEATURE_GET_DELAY_INFO,
+ SENSOR_FEATURE_SET_SLAVE_I2C_ID,
+ SENSOR_FEATURE_SUSPEND,
+ SENSOR_FEATURE_RESUME,
+ SENSOR_FEATURE_SET_MAX_FRAME_RATE_BY_SCENARIO,
+ SENSOR_FEATURE_GET_DEFAULT_FRAME_RATE_BY_SCENARIO,
+ SENSOR_FEATURE_GET_AE_AWB_LOCK_INFO,
+ SENSOR_FEATURE_AUTOTEST_CMD,
+ SENSOR_FEATURE_GET_TEST_PATTERN_CHECKSUM_VALUE,
+ SENSOR_FEATURE_GET_TEMPERATURE_VALUE,
+ SENSOR_FEATURE_GET_SENSOR_CURRENT_TEMPERATURE,
+ SENSOR_FEATURE_GET_AE_FLASHLIGHT_INFO,
+ SENSOR_FEATURE_GET_TRIGGER_FLASHLIGHT_INFO, /* Trigger flashlight or not */
+ SENSOR_FEATURE_SET_YUV_3A_CMD,
+ SENSOR_FEATURE_SET_N3D_I2C_STREAM_REGDATA,
+ SENSOR_FEATURE_SET_N3D_STOP_STREAMING,
+ SENSOR_FEATURE_SET_N3D_START_STREAMING,
+ SENSOR_FEATURE_GET_SENSOR_N3D_STREAM_TO_VSYNC_TIME,
+ SENSOR_FEATURE_SET_ESHUTTER_GAIN,
+ SENSOR_FEATURE_SET_OB_LOCK,
+ SENSOR_FEATURE_SET_SENSOR_OTP_AWB_CMD,
+ SENSOR_FEATURE_SET_SENSOR_OTP_LSC_CMD,
+ SENSOR_FEATURE_GET_YUV_CAPTURE_OUTPUT_JPEG,
+ SENSOR_FEATURE_SET_YUV_JPEG_PARA,
+ SENSOR_FEATURE_GET_YUV_JPEG_INFO,
+ SENSOR_FEATURE_SET_FRAMERATE,
+ SENSOR_FEATURE_SET_HDR,
+ SENSOR_FEATURE_GET_CROP_INFO,
+ SENSOR_FEATURE_GET_VC_INFO,
+ SENSOR_FEATURE_SET_IHDR_SHUTTER_GAIN,
+ SENSOR_FEATURE_SET_AWB_GAIN,
+ SENSOR_FEATURE_SET_MIN_MAX_FPS,
+ SENSOR_FEATURE_GET_PDAF_INFO,
+ SENSOR_FEATURE_GET_PDAF_DATA,
+ SENSOR_FEATURE_GET_SENSOR_PDAF_CAPACITY,
+ SENSOR_FEATURE_DEBUG_IMGSENSOR,
+ SENSOR_FEATURE_SET_HDR_SHUTTER,
+ SENSOR_FEATURE_SET_ISO,
+ SENSOR_FEATURE_SET_PDAF,
+ SENSOR_FEATURE_MAX
+} ACDK_SENSOR_FEATURE_ENUM;
+
+typedef enum {
+ SENSOR_AF_IDLE = 0,
+ SENSOR_AF_FOCUSING,
+ SENSOR_AF_FOCUSED,
+ SENSOR_AF_ERROR,
+ SENSOR_AF_SCENE_DETECTING,
+ SENSOR_AF_STATUS_MAX
+} ACDK_SENSOR_AF_STATUS_ENUM;
+
+typedef enum {
+ SENSOR_AE_IDLE = 0,
+ SENSOR_AE_EXPOSING,
+ SENSOR_AE_EXPOSED,
+ SENSOR_AE_ERROR,
+ SENSOR_AE_LOCKED
+} ACDK_SENSOR_AE_STATUS_ENUM;
+
+typedef enum {
+ SENSOR_AWB_IDLE = 0,
+ SENSOR_AWB_BALANCING,
+ SENSOR_AWB_BALANCED,
+ SENSOR_AWB_ERROR,
+ SENSOR_AWB_LOCKED
+} ACDK_SENSOR_AWB_STATUS_ENUM;
+
+
+
+typedef enum {
+ SENSOR_INTERFACE_TYPE_PARALLEL = 0,
+ SENSOR_INTERFACE_TYPE_MIPI,
+ SENSOR_INTERFACE_TYPE_SERIAL, /* add for 72 ATV using serial interface */
+ SENSOR_INTERFACE_TYPE_MAX
+} ACDK_SENSOR_INTERFACE_TYPE_ENUM;
+
+typedef enum {
+ SENSOR_OUTPUT_FORMAT_RAW_B = 0,
+ SENSOR_OUTPUT_FORMAT_RAW_Gb,
+ SENSOR_OUTPUT_FORMAT_RAW_Gr,
+ SENSOR_OUTPUT_FORMAT_RAW_R,
+ SENSOR_OUTPUT_FORMAT_UYVY,
+ SENSOR_OUTPUT_FORMAT_VYUY,
+ SENSOR_OUTPUT_FORMAT_YUYV,
+ SENSOR_OUTPUT_FORMAT_YVYU,
+ SENSOR_OUTPUT_FORMAT_CbYCrY,
+ SENSOR_OUTPUT_FORMAT_CrYCbY,
+ SENSOR_OUTPUT_FORMAT_YCbYCr,
+ SENSOR_OUTPUT_FORMAT_YCrYCb,
+ SENSOR_OUTPUT_FORMAT_RAW8_B,
+ SENSOR_OUTPUT_FORMAT_RAW8_Gb,
+ SENSOR_OUTPUT_FORMAT_RAW8_Gr,
+ SENSOR_OUTPUT_FORMAT_RAW8_R,
+ SENSOR_OUTPUT_FORMAT_RAW_RWB_B,
+ SENSOR_OUTPUT_FORMAT_RAW_RWB_Wb,
+ SENSOR_OUTPUT_FORMAT_RAW_RWB_Wr,
+ SENSOR_OUTPUT_FORMAT_RAW_RWB_R,
+ SENSOR_OUTPUT_FORMAT_RAW_MONO
+} ACDK_SENSOR_OUTPUT_DATA_FORMAT_ENUM;
+
+typedef enum {
+ SENSOR_MIPI_1_LANE = 0,
+ SENSOR_MIPI_2_LANE,
+ SENSOR_MIPI_3_LANE,
+ SENSOR_MIPI_4_LANE
+} ACDK_SENSOR_MIPI_LANE_NUMBER_ENUM;
+
+typedef enum {
+ SCAM_1_DATA_CHANNEL = 0,
+ SCAM_2_DATA_CHANNEL,
+ SCAM_3_DATA_CHANNEL,
+ SCAM_4_DATA_CHANNEL,
+} SENSOR_SCAM_DATA_CHANNEL_ENUM;
+
+typedef enum {
+ MIPI_OPHY_NCSI2 = 0,
+ MIPI_OPHY_CSI2 = 1,
+} SENSOR_MIPI_TYPE_ENUM;
+
+typedef enum {
+ MIPI_SETTLEDELAY_AUTO = 0,
+ MIPI_SETTLEDELAY_MANUAL = 1,
+} SENSOR_SETTLEDELAY_MODE_ENUM;
+
+typedef enum {
+ COMP8_NONE = 0,
+ COMP8_DI_30 = 0x30,
+ COMP8_DI_31 = 0x31,
+ COMP8_DI_32 = 0x32,
+ COMP8_DI_33 = 0x33,
+ COMP8_DI_34 = 0x34,
+ COMP8_DI_35 = 0x35,
+ COMP8_DI_36 = 0x36,
+ COMP8_DI_37 = 0x37,
+ COMP8_DI_2A = 0x2A,
+} SENSOR_DPCM_TYPE_ENUM;
+
+typedef struct {
+ MUINT16 SensorPreviewWidth;
+ MUINT16 SensorPreviewHeight;
+ MUINT16 SensorFullWidth;
+ MUINT16 SensorFullHeight;
+ MUINT16 SensorVideoWidth;
+ MUINT16 SensorVideoHeight;
+ MUINT16 SensorHighSpeedVideoWidth;
+ MUINT16 SensorHighSpeedVideoHeight;
+ MUINT16 SensorSlimVideoWidth;
+ MUINT16 SensorSlimVideoHeight;
+ MUINT16 SensorCustom1Width;
+ MUINT16 SensorCustom1Height;
+ MUINT16 SensorCustom2Width;
+ MUINT16 SensorCustom2Height;
+ MUINT16 SensorCustom3Width;
+ MUINT16 SensorCustom3Height;
+ MUINT16 SensorCustom4Width;
+ MUINT16 SensorCustom4Height;
+ MUINT16 SensorCustom5Width;
+ MUINT16 SensorCustom5Height;
+ MUINT16 Sensor3DPreviewWidth;
+ MUINT16 Sensor3DPreviewHeight;
+ MUINT16 Sensor3DFullWidth;
+ MUINT16 Sensor3DFullHeight;
+ MUINT16 Sensor3DVideoWidth;
+ MUINT16 Sensor3DVideoHeight;
+ MUINT16 SensorEffectivePreviewWidth;
+ MUINT16 SensorEffectivePreviewHeight;
+ MUINT16 SensorEffectiveFullWidth;
+ MUINT16 SensorEffectiveFullHeight;
+ MUINT16 SensorEffectiveVideoWidth;
+ MUINT16 SensorEffectiveVideoHeight;
+ MUINT16 SensorEffectiveHighSpeedVideoWidth;
+ MUINT16 SensorEffectiveHighSpeedVideoHeight;
+ MUINT16 SensorEffective3DPreviewWidth;
+ MUINT16 SensorEffective3DPreviewHeight;
+ MUINT16 SensorEffective3DFullWidth;
+ MUINT16 SensorEffective3DFullHeight;
+ MUINT16 SensorEffective3DVideoWidth;
+ MUINT16 SensorEffective3DVideoHeight;
+ MUINT16 SensorPreviewWidthOffset; /* from effective width to output width */
+ MUINT16 SensorPreviewHeightOffset; /* from effective height to output height */
+ MUINT16 SensorFullWidthOffset; /* from effective width to output width */
+ MUINT16 SensorFullHeightOffset; /* from effective height to output height */
+ MUINT16 SensorVideoWidthOffset; /* from effective width to output width */
+ MUINT16 SensorVideoHeightOffset; /* from effective height to output height */
+ MUINT16 SensorHighSpeedVideoWidthOffset; /* from effective width to output width */
+ MUINT16 SensorHighSpeedVideoHeightOffset; /* from effective height to output height */
+ MUINT16 Sensor3DPreviewWidthOffset; /* from effective width to output width */
+ MUINT16 Sensor3DPreviewHeightOffset; /* from effective height to output height */
+ MUINT16 Sensor3DFullWidthOffset; /* from effective width to output width */
+ MUINT16 Sensor3DFullHeightOffset; /* from effective height to output height */
+ MUINT16 Sensor3DVideoWidthOffset; /* from effective width to output width */
+ MUINT16 Sensor3DVideoHeightOffset; /* from effective height to output height */
+} ACDK_SENSOR_RESOLUTION_INFO_STRUCT, *PACDK_SENSOR_RESOLUTION_INFO_STRUCT;
+
+
+typedef struct {
+ MUINT16 SensorPreviewResolutionX;
+ MUINT16 SensorPreviewResolutionY;
+ MUINT16 SensorFullResolutionX;
+ MUINT16 SensorFullResolutionY;
+ MUINT8 SensorClockFreq; /* MHz */
+ MUINT8 SensorCameraPreviewFrameRate;
+ MUINT8 SensorVideoFrameRate;
+ MUINT8 SensorStillCaptureFrameRate;
+ MUINT8 SensorWebCamCaptureFrameRate;
+ MUINT8 SensorClockPolarity; /* SENSOR_CLOCK_POLARITY_HIGH/SENSOR_CLOCK_POLARITY_Low */
+ MUINT8 SensorClockFallingPolarity;
+ MUINT8 SensorClockRisingCount; /* 0..15 */
+ MUINT8 SensorClockFallingCount; /* 0..15 */
+ MUINT8 SensorClockDividCount; /* 0..15 */
+ MUINT8 SensorPixelClockCount; /* 0..15 */
+ MUINT8 SensorDataLatchCount; /* 0..15 */
+ MUINT8 SensorHsyncPolarity;
+ MUINT8 SensorVsyncPolarity;
+ MUINT8 SensorInterruptDelayLines;
+ MINT32 SensorResetActiveHigh;
+ MUINT32 SensorResetDelayCount;
+ ACDK_SENSOR_INTERFACE_TYPE_ENUM SensroInterfaceType;
+ ACDK_SENSOR_OUTPUT_DATA_FORMAT_ENUM SensorOutputDataFormat;
+ ACDK_SENSOR_MIPI_LANE_NUMBER_ENUM SensorMIPILaneNumber;
+ MUINT32 CaptureDelayFrame;
+ MUINT32 PreviewDelayFrame;
+ MUINT32 VideoDelayFrame;
+ MUINT32 HighSpeedVideoDelayFrame;
+ MUINT32 SlimVideoDelayFrame;
+ MUINT32 YUVAwbDelayFrame;
+ MUINT32 YUVEffectDelayFrame;
+ MUINT32 Custom1DelayFrame;
+ MUINT32 Custom2DelayFrame;
+ MUINT32 Custom3DelayFrame;
+ MUINT32 Custom4DelayFrame;
+ MUINT32 Custom5DelayFrame;
+ MUINT16 SensorGrabStartX;
+ MUINT16 SensorGrabStartY;
+ MUINT16 SensorDrivingCurrent;
+ MUINT8 SensorMasterClockSwitch;
+ MUINT8 AEShutDelayFrame; /* The frame of setting shutter default 0 for TG int */
+ MUINT8 AESensorGainDelayFrame; /* The frame of setting sensor gain */
+ MUINT8 AEISPGainDelayFrame;
+ MUINT8 MIPIDataLowPwr2HighSpeedTermDelayCount;
+ MUINT8 MIPIDataLowPwr2HighSpeedSettleDelayCount;
+ MUINT8 MIPICLKLowPwr2HighSpeedTermDelayCount;
+ MUINT8 SensorWidthSampling;
+ MUINT8 SensorHightSampling;
+ MUINT8 SensorPacketECCOrder;
+ SENSOR_MIPI_TYPE_ENUM MIPIsensorType;
+ MUINT8 SensorCaptureOutputJPEG; /* JPEG file or not? */
+ MUINT8 SensorModeNum;
+ MUINT8 IHDR_Support;
+ MUINT16 IHDR_LE_FirstLine;
+ SENSOR_SETTLEDELAY_MODE_ENUM SettleDelayMode;
+ MUINT8 PDAF_Support;
+ MUINT8 DPCM_INFO;
+ MUINT8 PerFrameCTL_Support;
+ SENSOR_SCAM_DATA_CHANNEL_ENUM SCAM_DataNumber;
+ MUINT8 SCAM_DDR_En;
+ MUINT8 SCAM_CLK_INV;
+ MUINT8 SCAM_DEFAULT_DELAY;
+ MUINT8 SCAM_CRC_En;
+ MUINT8 SCAM_SOF_src;
+ MUINT32 SCAM_Timout_Cali;
+} ACDK_SENSOR_INFO_STRUCT, *PACDK_SENSOR_INFO_STRUCT;
+
+typedef struct {
+ MUINT16 SensorPreviewResolutionX;
+ MUINT16 SensorPreviewResolutionY;
+ MUINT16 SensorFullResolutionX;
+ MUINT16 SensorFullResolutionY;
+ MUINT8 SensorClockFreq; /* MHz */
+ MUINT8 SensorCameraPreviewFrameRate;
+ MUINT8 SensorVideoFrameRate;
+ MUINT8 SensorStillCaptureFrameRate;
+ MUINT8 SensorWebCamCaptureFrameRate;
+ MUINT8 SensorClockPolarity; /* SENSOR_CLOCK_POLARITY_HIGH/SENSOR_CLOCK_POLARITY_Low */
+ MUINT8 SensorClockFallingPolarity;
+ MUINT8 SensorClockRisingCount; /* 0..15 */
+ MUINT8 SensorClockFallingCount; /* 0..15 */
+ MUINT8 SensorClockDividCount; /* 0..15 */
+ MUINT8 SensorPixelClockCount; /* 0..15 */
+ MUINT8 SensorDataLatchCount; /* 0..15 */
+ MUINT8 SensorHsyncPolarity;
+ MUINT8 SensorVsyncPolarity;
+ MUINT8 SensorInterruptDelayLines;
+ MINT32 SensorResetActiveHigh;
+ MUINT32 SensorResetDelayCount;
+ ACDK_SENSOR_INTERFACE_TYPE_ENUM SensroInterfaceType;
+ ACDK_SENSOR_OUTPUT_DATA_FORMAT_ENUM SensorOutputDataFormat;
+ ACDK_SENSOR_MIPI_LANE_NUMBER_ENUM SensorMIPILaneNumber;
+ MUINT32 CaptureDelayFrame;
+ MUINT32 PreviewDelayFrame;
+ MUINT32 VideoDelayFrame;
+ MUINT32 HighSpeedVideoDelayFrame;
+ MUINT32 SlimVideoDelayFrame;
+ MUINT32 YUVAwbDelayFrame;
+ MUINT32 YUVEffectDelayFrame;
+ MUINT32 Custom1DelayFrame;
+ MUINT32 Custom2DelayFrame;
+ MUINT32 Custom3DelayFrame;
+ MUINT32 Custom4DelayFrame;
+ MUINT32 Custom5DelayFrame;
+ MUINT16 SensorGrabStartX_PRV;
+ MUINT16 SensorGrabStartY_PRV;
+ MUINT16 SensorGrabStartX_CAP;
+ MUINT16 SensorGrabStartY_CAP;
+ MUINT16 SensorGrabStartX_VD;
+ MUINT16 SensorGrabStartY_VD;
+ MUINT16 SensorGrabStartX_VD1;
+ MUINT16 SensorGrabStartY_VD1;
+ MUINT16 SensorGrabStartX_VD2;
+ MUINT16 SensorGrabStartY_VD2;
+ MUINT16 SensorGrabStartX_CST1;
+ MUINT16 SensorGrabStartY_CST1;
+ MUINT16 SensorGrabStartX_CST2;
+ MUINT16 SensorGrabStartY_CST2;
+ MUINT16 SensorGrabStartX_CST3;
+ MUINT16 SensorGrabStartY_CST3;
+ MUINT16 SensorGrabStartX_CST4;
+ MUINT16 SensorGrabStartY_CST4;
+ MUINT16 SensorGrabStartX_CST5;
+ MUINT16 SensorGrabStartY_CST5;
+ MUINT16 SensorDrivingCurrent;
+ MUINT8 SensorMasterClockSwitch;
+ MUINT8 AEShutDelayFrame; /* The frame of setting shutter default 0 for TG int */
+ MUINT8 AESensorGainDelayFrame; /* The frame of setting sensor gain */
+ MUINT8 AEISPGainDelayFrame;
+ MUINT8 MIPIDataLowPwr2HighSpeedTermDelayCount;
+ MUINT8 MIPIDataLowPwr2HighSpeedSettleDelayCount;
+ MUINT8 MIPIDataLowPwr2HSSettleDelayM0;
+ MUINT8 MIPIDataLowPwr2HSSettleDelayM1;
+ MUINT8 MIPIDataLowPwr2HSSettleDelayM2;
+ MUINT8 MIPIDataLowPwr2HSSettleDelayM3;
+ MUINT8 MIPIDataLowPwr2HSSettleDelayM4;
+ MUINT8 MIPICLKLowPwr2HighSpeedTermDelayCount;
+ MUINT8 SensorWidthSampling;
+ MUINT8 SensorHightSampling;
+ MUINT8 SensorPacketECCOrder;
+ SENSOR_MIPI_TYPE_ENUM MIPIsensorType;
+ MUINT8 SensorCaptureOutputJPEG; /* JPEG file or not? */
+ MUINT8 SensorModeNum;
+ MUINT8 IHDR_Support;
+ MUINT16 IHDR_LE_FirstLine;
+ SENSOR_SETTLEDELAY_MODE_ENUM SettleDelayMode;
+ MUINT8 PDAF_Support;
+ MUINT8 DPCM_INFO;
+ MUINT8 IMGSENSOR_DPCM_TYPE_PRE;
+ MUINT8 IMGSENSOR_DPCM_TYPE_CAP;
+ MUINT8 IMGSENSOR_DPCM_TYPE_VD;
+ MUINT8 IMGSENSOR_DPCM_TYPE_VD1;
+ MUINT8 IMGSENSOR_DPCM_TYPE_VD2;
+ MUINT8 PerFrameCTL_Support;
+ SENSOR_SCAM_DATA_CHANNEL_ENUM SCAM_DataNumber;
+ MUINT8 SCAM_DDR_En;
+ MUINT8 SCAM_CLK_INV;
+ MUINT8 SCAM_DEFAULT_DELAY;
+ MUINT8 SCAM_CRC_En;
+ MUINT8 SCAM_SOF_src;
+ MUINT32 SCAM_Timout_Cali;
+} ACDK_SENSOR_INFO2_STRUCT, *PACDK_SENSOR_INFO2_STRUCT;
+
+
+typedef enum {
+ ACDK_CCT_REG_ISP = 0,
+ ACDK_CCT_REG_CMOS,
+ ACDK_CCT_REG_CCD
+} ACDK_CCT_REG_TYPE_ENUM;
+
+
+/* R/W ISP/Sensor Register */
+typedef struct {
+ ACDK_CCT_REG_TYPE_ENUM Type;
+ MUINT32 RegAddr;
+ MUINT32 RegData;
+} ACDK_CCT_REG_RW_STRUCT, *PACDK_CCT_REG_RW_STRUCT;
+
+typedef struct {
+ ACDK_CCT_REG_TYPE_ENUM Type; /* ISP, CMOS_SENSOR, CCD_SENSOR */
+ MUINT32 DeviceId;
+ ACDK_SENSOR_OUTPUT_DATA_FORMAT_ENUM StartPixelBayerPtn;
+ MUINT16 GrabXOffset;
+ MUINT16 GrabYOffset;
+} ACDK_CCT_SENSOR_INFO_STRUCT, *PACDK_CCT_SENSOR_INFO_STRUCT;
+
+
+
+typedef enum {
+ CMOS_SENSOR = 0,
+ CCD_SENSOR
+} SENSOR_TYPE_ENUM;
+
+typedef struct {
+ MUINT16 SensorId;
+ SENSOR_TYPE_ENUM SensorType;
+ ACDK_SENSOR_OUTPUT_DATA_FORMAT_ENUM SensorOutputDataFormat;
+} ACDK_SENSOR_ENG_INFO_STRUCT;
+
+typedef struct {
+ MUINT32 RegAddr;
+ MUINT32 RegData;
+} ACDK_SENSOR_REG_INFO_STRUCT;
+
+typedef struct {
+ MUINT8 debugStruct[32];
+ MUINT8 debugSubstruct[32];
+ MUINT32 isGet; /* 1 means get, 0 means set */
+ MUINT32 value;
+} ACDK_SENSOR_DBG_IMGSENSOR_STRUCT;
+
+typedef struct {
+ MUINT32 GroupIdx;
+ MUINT32 ItemCount;
+ MUINT8 *GroupNamePtr;
+} ACDK_SENSOR_GROUP_INFO_STRUCT;
+
+typedef struct {
+ MUINT32 GroupIdx;
+ MUINT32 ItemIdx;
+ MUINT8 ItemNamePtr[50]; /* item name */
+ MUINT32 ItemValue; /* item value */
+ MINT32 IsTrueFalse; /* is this item for enable/disable functions */
+ MINT32 IsReadOnly; /* is this item read only */
+ MINT32 IsNeedRestart; /* after set this item need restart */
+ MUINT32 Min; /* min value of item value */
+ MUINT32 Max; /* max value of item value */
+} ACDK_SENSOR_ITEM_INFO_STRUCT;
+
+typedef enum {
+ ACDK_SENSOR_IMAGE_NORMAL = 0,
+ ACDK_SENSOR_IMAGE_H_MIRROR,
+ ACDK_SENSOR_IMAGE_V_MIRROR,
+ ACDK_SENSOR_IMAGE_HV_MIRROR
+} ACDK_SENSOR_IMAGE_MIRROR_ENUM;
+
+typedef enum {
+ ACDK_SENSOR_OPERATION_MODE_CAMERA_PREVIEW = 0,
+ ACDK_SENSOR_OPERATION_MODE_VIDEO,
+ ACDK_SENSOR_OPERATION_MODE_STILL_CAPTURE,
+ ACDK_SENSOR_OPERATION_MODE_HIGHSP_VIDEO1,
+ ACDK_SENSOR_OPERATION_MODE_HIGHSP_VIDEO2,
+ ACDK_SENSOR_OPERATION_MODE_WEB_CAPTURE,
+ ACDK_SENSOR_OPERATION_MODE_CUSTOM1,
+ ACDK_SENSOR_OPERATION_MODE_CUSTOM2,
+ ACDK_SENSOR_OPERATION_MODE_CUSTOM3,
+ ACDK_SENSOR_OPERATION_MODE_CUSTOM4,
+ ACDK_SENSOR_OPERATION_MODE_CUSTOM5,
+ ACDK_SENSOR_OPERATION_MODE_MAX
+} ACDK_SENSOR_OPERATION_MODE_ENUM;
+
+typedef struct {
+ MUINT16 GrabStartX; /* The first grabed column data of the image sensor in pixel clock count */
+ MUINT16 GrabStartY; /* The first grabed row data of the image sensor in pixel clock count */
+ MUINT16 ExposureWindowWidth; /* Exposure window width of image sensor */
+ MUINT16 ExposureWindowHeight; /* Exposure window height of image sensor */
+ MUINT16 ImageTargetWidth; /* image captured width */
+ MUINT16 ImageTargetHeight; /* image captuerd height */
+ MUINT16 ExposurePixel; /* exposure window width of image sensor + dummy pixel */
+ MUINT16 CurrentExposurePixel; /* exposure window width of image sensor + dummy pixel */
+ MUINT16 ExposureLine; /* exposure window width of image sensor + dummy line */
+ MUINT16 ZoomFactor; /* digital zoom factor */
+} ACDK_SENSOR_EXPOSURE_WINDOW_STRUCT;
+
+typedef struct {
+ ACDK_SENSOR_IMAGE_MIRROR_ENUM SensorImageMirror;
+ MINT32 EnableShutterTansfer; /* capture only */
+ MINT32 EnableFlashlightTansfer; /* flash light capture only */
+ ACDK_SENSOR_OPERATION_MODE_ENUM SensorOperationMode;
+ MUINT16 ImageTargetWidth; /* image captured width */
+ MUINT16 ImageTargetHeight; /* image captuerd height */
+ MUINT16 CaptureShutter; /* capture only */
+ MUINT16 FlashlightDuty; /* flash light capture only */
+ MUINT16 FlashlightOffset; /* flash light capture only */
+ MUINT16 FlashlightShutFactor; /* flash light capture only */
+ MUINT16 FlashlightMinShutter;
+ ACDK_CAMERA_OPERATION_MODE_ENUM MetaMode; /* capture only */
+ MUINT32 DefaultPclk; /* Sensor pixel clock(Ex:24000000) */
+ MUINT32 Pixels; /* Sensor active pixel number */
+ MUINT32 Lines; /* Sensor active line number */
+ MUINT32 Shutter; /* Sensor current shutter */
+ MUINT32 FrameLines; /* valid+dummy lines for minimum shutter */
+} ACDK_SENSOR_CONFIG_STRUCT;
+
+typedef enum {
+ MCLK_48MHZ_GROUP = 0x1,
+ MCLK_52MHZ_GROUP = 0x2,
+} ACKD_SENSOR_MCLK_ENUM;
+
+typedef struct {
+ MUINT8 on;
+ ACKD_SENSOR_MCLK_ENUM freq;
+} ACDK_SENSOR_MCLK_STRUCT;
+
+typedef struct {
+ MUINT16 full_w;
+ MUINT16 full_h;
+ MUINT16 x0_offset;
+ MUINT16 y0_offset;
+ MUINT16 w0_size;
+ MUINT16 h0_size;
+ MUINT16 scale_w;
+ MUINT16 scale_h;
+ MUINT16 x1_offset;
+ MUINT16 y1_offset;
+ MUINT16 w1_size;
+ MUINT16 h1_size;
+ MUINT16 x2_tg_offset;
+ MUINT16 y2_tg_offset;
+ MUINT16 w2_tg_size;
+ MUINT16 h2_tg_size;
+} SENSOR_WINSIZE_INFO_STRUCT;
+
+typedef struct {
+ MUINT32 SensorId;
+ SENSOR_WINSIZE_INFO_STRUCT SensorWinSize;
+} SENSOR_WINSIZE_STRUCT, *pSENSOR_WINSIZE_STRUCT;
+
+typedef struct {
+ MUINT16 VC_Num;
+ MUINT16 VC_PixelNum;
+ MUINT16 ModeSelect; /* 0: auto mode, 1:direct mode */
+ MUINT16 EXPO_Ratio; /* 1/1, 1/2, 1/4, 1/8 */
+ MUINT16 ODValue; /* OD Vaule */
+ MUINT16 RG_STATSMODE; /* STATS divistion mdoe 0: 16x16, 1:8x8, 2:4x4, 3:1x1*/
+ MUINT16 VC0_ID;
+ MUINT16 VC0_DataType;
+ MUINT16 VC0_SIZEH;
+ MUINT16 VC0_SIZEV;
+ MUINT16 VC1_ID;
+ MUINT16 VC1_DataType;
+ MUINT16 VC1_SIZEH;
+ MUINT16 VC1_SIZEV;
+ MUINT16 VC2_ID;
+ MUINT16 VC2_DataType;
+ MUINT16 VC2_SIZEH;
+ MUINT16 VC2_SIZEV;
+ MUINT16 VC3_ID;
+ MUINT16 VC3_DataType;
+ MUINT16 VC3_SIZEH;
+ MUINT16 VC3_SIZEV;
+} SENSOR_VC_INFO_STRUCT, *pSENSOR_VC_INFO_STRUCT;
+typedef struct {
+ MUINT32 ABS_GAIN_GR;
+ MUINT32 ABS_GAIN_R;
+ MUINT32 ABS_GAIN_B;
+ MUINT32 ABS_GAIN_GB;
+} SET_SENSOR_AWB_GAIN, *PSET_SENSOR_AWB_GAIN;
+
+typedef struct {
+ MUINT32 SENSOR_MODE;
+ MUINT32 ISO;
+
+} SET_SENSOR_ISO, *PSET_SENSOR_ISO;
+
+typedef struct {
+ MUINT32 i4OffsetX; /* start offset of first PD block */
+ MUINT32 i4OffsetY;
+ MUINT32 i4PitchX; /* PD block pitch */
+ MUINT32 i4PitchY;
+ MUINT32 i4PairNum; /* PD pair num in one block */
+ MUINT32 i4SubBlkW; /* sub block width (one PD pair in one sub block) */
+ MUINT32 i4SubBlkH; /* sub block height */
+ MUINT32 i4PosL[16][2]; /* left pd pixel position in one block*/
+ MUINT32 i4PosR[16][2]; /* right pd pixel position in one block*/
+} SET_PD_BLOCK_INFO_T, *PSET_PD_BLOCK_INFO_T;
+
+
+typedef enum {
+ SENSORIF_PARALLEL = 0,
+ SENSORIF_SERIAL,
+ SENSORIF_MIPI_DHY0,
+ SENSORIF_MIPI_DHY1,
+ SENSORIF_MIPI_DHY2
+} SENSOR_PHY_TYPE_ENUM;
+
+typedef enum {
+ DATA_8BIT_FMT = 0x0,
+ DATA_10BIT_FMT = 0x1,
+ DATA_12BIT_FMT = 0x2,
+ DATA_YUV422_FMT = 0x3,
+} INDATA_FORMAT_ENUM;
+
+typedef struct {
+ MINT32 mSensorDev;
+ MUINT8 GpioEnable;
+ SENSOR_PHY_TYPE_ENUM SensroInterfaceType;
+ INDATA_FORMAT_ENUM SensorIndataformat;
+} IMGSENSOR_GPIO_STRUCT;
+/*******************************************************************************
+*
+********************************************************************************/
+
+#define MAXIMUM_NVRAM_CAMERA_SENSOR_FILE_SIZE_KERNEL 4096
+
+#define NVRAM_CAMERA_SENSOR_FILE_VERSION 1
+
+
+
+/* Sensor table */
+#define MAXIMUM_SENSOR_CCT_REG_NUMBER 100
+#define MAXIMUM_SENSOR_ENG_REG_NUMBER 100
+
+typedef struct {
+ MUINT32 Addr;
+ MUINT32 Para;
+} SENSOR_REG_STRUCT;
+
+typedef struct {
+ MUINT32 Version;
+ MUINT32 SensorId; /* ID of sensor module */
+ SENSOR_REG_STRUCT SensorEngReg[MAXIMUM_SENSOR_ENG_REG_NUMBER];
+ SENSOR_REG_STRUCT SensorCCTReg[MAXIMUM_SENSOR_CCT_REG_NUMBER];
+ MUINT8 CameraData[MAXIMUM_NVRAM_CAMERA_SENSOR_FILE_SIZE_KERNEL / 2 - 8 - sizeof(SENSOR_REG_STRUCT) * (MAXIMUM_SENSOR_ENG_REG_NUMBER + MAXIMUM_SENSOR_CCT_REG_NUMBER)];
+} NVRAM_SENSOR_DATA_STRUCT, *PNVRAM_SENSOR_DATA_STRUCT;
+
+#define MAX_SENSOR_CAL_SIZE_KERNEL (1024) /* Byte */
+#define MAX_SHADING_DATA_TBL ((MAX_SENSOR_CAL_SIZE_KERNEL-8)/4)
+typedef struct {
+ MUINT32 DataFormat;
+ MUINT32 DataSize;
+ MUINT32 ShadingData[MAX_SHADING_DATA_TBL];
+} SET_SENSOR_CALIBRATION_DATA_STRUCT, *PSET_SENSOR_CALIBRATION_DATA_STRUCT;
+
+
+
+typedef struct {
+ MSDK_SCENARIO_ID_ENUM ScenarioId[2];
+ ACDK_SENSOR_INFO_STRUCT * pInfo[2];
+ ACDK_SENSOR_CONFIG_STRUCT * pConfig[2];
+} ACDK_SENSOR_GETINFO_STRUCT, *PACDK_SENSOR_GETINFO_STRUCT;
+
+typedef struct {
+ MUINT32 SensorId;
+ ACDK_SENSOR_INFO2_STRUCT *pInfo;
+ ACDK_SENSOR_RESOLUTION_INFO_STRUCT *pSensorResolution;
+} IMAGESENSOR_GETINFO_STRUCT, *PIMAGESENSOR_GETINFO_STRUCT;
+
+typedef struct {
+ CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera;
+ ACDK_SENSOR_FEATURE_ENUM FeatureId;
+ MUINT8 *pFeaturePara;
+ MUINT32 *pFeatureParaLen;
+} ACDK_SENSOR_FEATURECONTROL_STRUCT, *PACDK_SENSOR_FEATURECONTROL_STRUCT;
+
+typedef struct {
+ CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera;
+ MSDK_SCENARIO_ID_ENUM ScenarioId;
+ ACDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow;
+ ACDK_SENSOR_CONFIG_STRUCT *pSensorConfigData;
+} ACDK_SENSOR_CONTROL_STRUCT;
+
+typedef struct {
+ ACDK_SENSOR_RESOLUTION_INFO_STRUCT *pResolution[2];
+} ACDK_SENSOR_PRESOLUTION_STRUCT;
+
+
+
+typedef struct regval_list {
+ MUINT32 reg_addr;
+ MUINT32 value;
+ MUINT32 bytes;
+} REGVAL_LIST_STRUCT;
+
+#define KDIMGSENSOR_REGVAL_LIST_MAX_NUM 256
+
+typedef struct format_struct {
+ MUINT8 *desc;
+ MUINT32 pixelformat;
+ /* REGVAL_LIST_STRUCT regs[KDIMGSENSOR_REGVAL_LIST_MAX_NUM]; */
+ int (*pfInitCfg)(void);
+} IMGSENSOR_FORMAT_STRUCT;
+
+typedef struct {
+ IMGSENSOR_FORMAT_STRUCT format;
+ MUINT32 u4InClk; /* Common part //hard coded */
+ MUINT32 u4OutClk; /* Common part // */
+ MUINT32 u4TotalPixelPerLine; /* By modes */
+ MUINT32 u4TotalLinesPerFrame; /* By modes and frame rate setting */
+ MUINT32 u4ActualWidth; /* By modes */
+ MUINT32 u4ActualHeight; /* By modes */
+ MUINT32 u4Width; /* By modes */
+ MUINT32 u4Height; /* By modes */
+ MUINT32 u4FrameTimeInus; /* By modes and frame rate setting */
+ MUINT32 u4MinFrameTimeInus; /* By modes */
+ MUINT32 u4LineTimeInus; /* By modes */
+ MUINT32 u4FinePixCntPerus; /* Common part */
+ MUINT32 u4MinFineTimeInus; /* By modes */
+ MUINT32 u4MaxFineTimeInus; /* By modes */
+ MUINT32 u4XStart;
+ MUINT32 u4XEnd;
+ MUINT32 u4YStart;
+ MUINT32 u4YEnd;
+} stImgSensorFormat;
+
+#ifdef CONFIG_COMPAT
+/* Redifne structures for compat_ioctl */
+typedef struct {
+ MSDK_SCENARIO_ID_ENUM ScenarioId[2];
+ compat_uptr_t pInfo[2];
+ compat_uptr_t pConfig[2];
+} COMPAT_ACDK_SENSOR_GETINFO_STRUCT;
+
+typedef struct {
+ MUINT32 SensorId;
+ compat_uptr_t pInfo;
+ compat_uptr_t pSensorResolution;
+} COMPAT_IMAGESENSOR_GETINFO_STRUCT;
+
+typedef struct {
+ CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera;
+ ACDK_SENSOR_FEATURE_ENUM FeatureId;
+ compat_uptr_t pFeaturePara;
+ compat_uptr_t pFeatureParaLen;
+} COMPAT_ACDK_SENSOR_FEATURECONTROL_STRUCT;
+
+typedef struct {
+ CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera;
+ MSDK_SCENARIO_ID_ENUM ScenarioId;
+ compat_uptr_t pImageWindow;
+ compat_uptr_t pSensorConfigData;
+} COMPAT_ACDK_SENSOR_CONTROL_STRUCT;
+
+typedef struct {
+ compat_uptr_t pResolution[2];
+} COMPAT_ACDK_SENSOR_PRESOLUTION_STRUCT;
+
+#endif
+
+
+/*******************************************************************************
+*
+********************************************************************************/
+/* */
+/* adoption to winmo driver files */
+/* */
+
+/* typedef */
+/* #define kal_uint8 u8 */
+
+/* #define MSDK_SCENARIO_ID_ENUM ACDK_SCENARIO_ID_ENUM */
+#define MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT ACDK_SENSOR_EXPOSURE_WINDOW_STRUCT
+#define MSDK_SENSOR_CONFIG_STRUCT ACDK_SENSOR_CONFIG_STRUCT
+
+#define MSDK_SENSOR_FEATURE_ENUM ACDK_SENSOR_FEATURE_ENUM
+#define MSDK_SENSOR_REG_INFO_STRUCT ACDK_SENSOR_REG_INFO_STRUCT
+#define MSDK_SENSOR_GROUP_INFO_STRUCT ACDK_SENSOR_GROUP_INFO_STRUCT
+#define MSDK_SENSOR_ITEM_INFO_STRUCT ACDK_SENSOR_ITEM_INFO_STRUCT
+#define MSDK_SENSOR_ENG_INFO_STRUCT ACDK_SENSOR_ENG_INFO_STRUCT
+#define MSDK_SENSOR_INFO_STRUCT ACDK_SENSOR_INFO_STRUCT
+#define MSDK_SENSOR_RESOLUTION_INFO_STRUCT ACDK_SENSOR_RESOLUTION_INFO_STRUCT
+#define MSDK_SENSOR_DBG_IMGSENSOR_INFO_STRUCT ACDK_SENSOR_DBG_IMGSENSOR_STRUCT
+
+/* MSDK_SCENARIO_ID_ENUM => ACDK_SCENARIO_ID_ENUM */
+/* #define MSDK_SCENARIO_ID_CAMERA_PREVIEW ACDK_SCENARIO_ID_CAMERA_PREVIEW */
+/* #define MSDK_SCENARIO_ID_VIDEO_PREVIEW ACDK_SCENARIO_ID_VIDEO_PREVIEW */
+/* #define MSDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG ACDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG */
+#define MSDK_SENSOR_OPERATION_MODE_VIDEO ACDK_SENSOR_OPERATION_MODE_VIDEO
+/* #define MSDK_SCENARIO_ID_CAMERA_ZSD ACDK_SCENARIO_ID_CAMERA_ZSD */
+/* #define MSDK_SCENARIO_ID_CAMERA_3D_PREVIEW ACDK_SCENARIO_ID_CAMERA_3D_PREVIEW */
+/* #define MSDK_SCENARIO_ID_CAMERA_3D_CAPTURE ACDK_SCENARIO_ID_CAMERA_3D_CAPTURE */
+/* #define MSDK_SCENARIO_ID_CAMERA_3D_VIDEO ACDK_SCENARIO_ID_CAMERA_3D_VIDEO */
+/*******************************************************************************
+*
+********************************************************************************/
+
+/*******************************************************************************
+*
+********************************************************************************/
+/* for new simplifed sensor driver */
+typedef struct {
+ MUINT32(*SensorOpen)(void);
+ MUINT32(*SensorGetInfo)(MUINT32 *pScenarioId[2], MSDK_SENSOR_INFO_STRUCT * pSensorInfo[2], MSDK_SENSOR_CONFIG_STRUCT * pSensorConfigData[2]);
+ MUINT32(*SensorGetResolution)(MSDK_SENSOR_RESOLUTION_INFO_STRUCT * pSensorResolution[2]);
+ MUINT32(*SensorFeatureControl)(CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera, MSDK_SENSOR_FEATURE_ENUM FeatureId, MUINT8 *pFeaturePara, MUINT32 *pFeatureParaLen);
+ MUINT32(*SensorControl)(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
+ MUINT32(*SensorClose)(void);
+} MULTI_SENSOR_FUNCTION_STRUCT, *PMULTI_SENSOR_FUNCTION_STRUCT;
+
+typedef struct {
+ MUINT32(*SensorOpen)(void);
+ MUINT32(*SensorGetInfo)(MUINT32 *pScenarioId[2], MSDK_SENSOR_INFO_STRUCT * pSensorInfo[2], MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData[2]);
+ MUINT32(*SensorGetResolution)(MSDK_SENSOR_RESOLUTION_INFO_STRUCT * pSensorResolution[2]);
+ MUINT32(*SensorFeatureControl)(CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera, MSDK_SENSOR_FEATURE_ENUM FeatureId, MUINT8 *pFeaturePara, MUINT32 *pFeatureParaLen);
+ MUINT32(*SensorControl)(CAMERA_DUAL_CAMERA_SENSOR_ENUM InvokeCamera, MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
+ MUINT32(*SensorClose)(void);
+} MULTI_SENSOR_FUNCTION_STRUCT2, *PMULTI_SENSOR_FUNCTION_STRUCT2;
+
+
+typedef struct {
+ MUINT32(*SensorOpen)(void);
+ MUINT32(*SensorGetInfo)(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_INFO_STRUCT *pSensorInfo,
+ MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
+ MUINT32(*SensorGetResolution)(MSDK_SENSOR_RESOLUTION_INFO_STRUCT *pSensorResolution);
+ MUINT32(*SensorFeatureControl)(MSDK_SENSOR_FEATURE_ENUM FeatureId, MUINT8 *pFeaturePara, MUINT32 *pFeatureParaLen);
+ MUINT32(*SensorControl)(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
+ MUINT32(*SensorClose)(void);
+#if 1 /* isp suspend resume patch */
+ MSDK_SCENARIO_ID_ENUM ScenarioId;
+ MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT imageWindow;
+ MSDK_SENSOR_CONFIG_STRUCT sensorConfigData;
+#endif
+} SENSOR_FUNCTION_STRUCT, *PSENSOR_FUNCTION_STRUCT;
+
+typedef struct {
+ MUINT32 SensorId;
+ MUINT8 drvname[32];
+ MUINT32(*SensorInit)(PSENSOR_FUNCTION_STRUCT *pfFunc);
+} ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT, *PACDK_KD_SENSOR_INIT_FUNCTION_STRUCT;
+
+#define KDIMGSENSOR_DUAL_SHIFT 16
+#define KDIMGSENSOR_DUAL_MASK_MSB 0xFFFF0000
+#define KDIMGSENSOR_DUAL_MASK_LSB 0x0000FFFF
+
+#define KDIMGSENSOR_NOSENSOR "non_sensor"
+
+#define KDIMGSENSOR_MAX_INVOKE_DRIVERS (2)
+#define KDIMGSENSOR_INVOKE_DRIVER_0 (0)
+#define KDIMGSENSOR_INVOKE_DRIVER_1 (1)
+
+/* For sensor synchronize the exposure time / sensor gain and isp gain. */
+typedef struct {
+ MUINT16 u2ISPNewRGain;
+ MUINT16 u2ISPNewGrGain;
+ MUINT16 u2ISPNewGbGain;
+ MUINT16 u2ISPNewBGain;
+ MUINT16 u2SensorNewExpTime;
+ MUINT16 u2SensorNewGain;
+ MUINT8 uSensorExpDelayFrame;
+ MUINT8 uSensorGainDelayFrame;
+ MUINT8 uISPGainDelayFrame;
+ MUINT8 uDummy;
+} ACDK_KD_SENSOR_SYNC_STRUCT, *PACDK_KD_SENSOR_SYNC_STRUCT;
+
+
+typedef struct {
+ MUINT16 AeRefLV05Shutter; /* Sensor AE Shutter under Lv05 */
+ MUINT16 AeRefLV13Shutter; /* Sensor AE Shutter under Lv13 */
+ MUINT16 AeRefLV05Gain; /* Sensor AE Gain under Lv05 */
+ MUINT16 AeRefLV13Gain; /* Sensor AE Gain under Lv13 */
+} SENSOR_AE_REF_STRUCT, *PSENSOR_AE_REF_STRUCT;
+
+
+typedef struct {
+ MUINT16 AwbRefD65Rgain; /* Sensor AWB R Gain under D65 */
+ MUINT16 AwbRefD65Bgain; /* Sensor AWB B Gain under D65 */
+ MUINT16 AwbRefCWFRgain; /* Sensor AWB R Gain under CWF */
+ MUINT16 AwbRefCWFBgain; /* Sensor AWB B Gain under CWF */
+} SENSOR_AWB_GAIN_REF_STRUCT, *PSENSOR_AWB_GAIN_REF_STRUCT;
+
+
+typedef struct {
+ SENSOR_AE_REF_STRUCT SensorAERef; /* AE Ref information for ASD usage */
+ SENSOR_AWB_GAIN_REF_STRUCT SensorAwbGainRef; /* AWB Gain Ref information for ASD usage */
+ MUINT32 SensorLV05LV13EVRef; /* EV calculate for ASD usage */
+} SENSOR_AE_AWB_REF_STRUCT, *PSENSOR_AE_AWB_REF_STRUCT;
+
+
+
+typedef struct {
+ MUINT16 AeCurShutter; /* Current Sensor AE Shutter */
+ MUINT16 AeCurGain; /* Current Sensor AE Gain */
+} SENSOR_AE_CUR_STRUCT, *PSENSOR_AE_CUR_STRUCT;
+
+
+typedef struct {
+ MUINT16 AwbCurRgain; /* Current Sensor AWB R Gain */
+ MUINT16 AwbCurBgain; /* Current Sensor AWB R Gain */
+} SENSOR_AWB_GAIN_CUR_STRUCT, *PSENSOR_AWB_GAIN_CUR_STRUCT;
+
+
+typedef struct {
+ SENSOR_AE_CUR_STRUCT SensorAECur; /* AE Current information for ASD usage */
+ SENSOR_AWB_GAIN_CUR_STRUCT SensorAwbGainCur; /* AWB Gain Current information for ASD usage */
+} SENSOR_AE_AWB_CUR_STRUCT, *PSENSOR_AE_AWB_CUR_STRUCT;
+
+
+typedef struct {
+ MUINT32 FNumber;
+ MUINT32 AEISOSpeed;
+ MUINT32 AWBMode;
+ MUINT32 CapExposureTime;
+ MUINT32 FlashLightTimeus;
+ MUINT32 RealISOValue;
+} SENSOR_EXIF_INFO_STRUCT, *PSENSOR_EXIF_INFO_STRUCT;
+
+typedef struct {
+ MUINT32 InitDelay;
+ MUINT32 EffectDelay;
+ MUINT32 AwbDelay;
+ MUINT32 AFSwitchDelayFrame;
+ MUINT32 EvDelay;
+ MUINT32 SatDelay;
+ MUINT32 BrightDelay;
+ MUINT32 ContrastDelay;
+} SENSOR_DELAY_INFO_STRUCT, *PSENSOR_DELAY_INFO_STRUCT;
+
+typedef struct {
+ MUINT32 u4Fno;
+ MUINT32 Exposuretime;
+ MUINT32 Gain;
+ MUINT32 GAIN_BASE;
+} SENSOR_FLASHLIGHT_AE_INFO_STRUCT, *PSENSOR_FLASHLIGHT_AE_INFO_STRUCT;
+
+/* multisensor driver */
+
+typedef struct {
+ MUINT32 drvIndex[KDIMGSENSOR_MAX_INVOKE_DRIVERS]; /* max 2 driver sumultaneously */
+} SENSOR_DRIVER_INDEX_STRUCT, *PSENSOR_DRIVER_INDEX_STRUCT;
+
+/* hardcode by GPIO module, should be sync with.(cust_gpio_usage.h) */
+#define GPIO_CAMERA_INVALID 0xFF
+/* */
+typedef enum {
+ IMGSENSOR_SOCKET_POS_NONE = 0xFFFFFFFF,
+ IMGSENSOR_SOCKET_POS_RIGHT = 0x1,
+ IMGSENSOR_SOCKET_POS_LEFT = 0x2,
+} IMGSENSOR_SOCKET_POSITION_ENUM;
+/* */
+typedef enum {
+ IMGSENSOR_SET_I2C_ID_STATE = 0x00,
+ IMGSENSOR_SET_I2C_ID_FORCE
+} IMGSENSOR_SET_I2C_ID_ENUM;
+
+
+
+typedef enum {
+ SENSOR_3A_AE_LOCK = 0,
+ SENSOR_3A_AE_UNLOCK,
+ SENSOR_3A_AWB_LOCK,
+ SENSOR_3A_AWB_UNLOCK,
+ SENSOR_3A_AE_ON,
+ SENSOR_3A_AE_OFF,
+ SENSOR_3A_AWB_ON,
+ SENSOR_3A_AWB_OFF,
+ SENSOR_3A_AF_INFINITY,
+ /* SENSOR_3A_AF_LOCK, */
+ /* SENSOR_3A_AF_UNLOCK, */
+} ACDK_SENSOR_3A_LOCK_ENUM;
+
+
+typedef struct {
+ MUINT32 tgtWidth;
+ MUINT32 tgtHeight;
+ MUINT32 quality;
+
+} ACDK_SENSOR_JPEG_OUTPUT_PARA;
+
+
+/* for JPEG Sensor Info */
+typedef struct {
+ MUINT32 u4FileSize; /* For input sensor width */
+ MUINT32 u4SrcW; /* For input sensor width */
+ MUINT32 u4SrcH; /* For input sensor height */
+} ACDK_SENSOR_JPEG_INFO;
+
+
+#endif /* _KD_IMGSENSOR_DATA_H */
diff --git a/kernel-headers/kd_imgsensor_errcode.h b/kernel-headers/kd_imgsensor_errcode.h
new file mode 100644
index 0000000..0f97b10
--- /dev/null
+++ b/kernel-headers/kd_imgsensor_errcode.h
@@ -0,0 +1,41 @@
+#ifndef _KD_IMGSENSOR_ERRCODE_H_
+#define _KD_IMGSENSOR_ERRCODE_H_
+
+/* @ the same as camera_custom_errocode.h */
+typedef enum {
+ ERROR_NONE = 0,
+ ERROR_MSDK_IS_ACTIVED,
+ ERROR_INVALID_DRIVER_MOD_ID,
+ ERROR_INVALID_FEATURE_ID,
+ ERROR_INVALID_SCENARIO_ID,
+ ERROR_INVALID_CTRL_CODE,
+ ERROR_VIDEO_ENCODER_BUSY,
+ ERROR_INVALID_PARA,
+ ERROR_OUT_OF_BUFFER_NUMBER,
+ ERROR_INVALID_ISP_STATE,
+ ERROR_INVALID_MSDK_STATE,
+ ERROR_PHY_VIR_MEM_MAP_FAIL,
+ ERROR_ENQUEUE_BUFFER_NOT_FOUND,
+ ERROR_MSDK_BUFFER_ALREADY_INIT,
+ ERROR_MSDK_BUFFER_OUT_OF_MEMORY,
+ ERROR_SENSOR_POWER_ON_FAIL,
+ ERROR_SENSOR_CONNECT_FAIL,
+ ERROR_SENSOR_FEATURE_NOT_IMPLEMENT,
+ ERROR_MSDK_IO_CONTROL_CODE,
+ ERROR_MSDK_IO_CONTROL_MSG_QUEUE_OPEN_FAIL,
+ ERROR_DRIVER_INIT_FAIL,
+ ERROR_WRONG_NVRAM_CAMERA_VERSION,
+ ERROR_NVRAM_CAMERA_FILE_FAIL,
+ ERROR_IMAGE_DECODE_FAIL,
+ ERROR_IMAGE_ENCODE_FAIL,
+ ERROR_LED_FLASH_POWER_ON_FAIL,
+ ERROR_MSDK_NOT_ALLOW_BY_MM_APP_MGR,
+ ERROR_LENS_NOT_SUPPORT,
+ ERROR_FLASH_LIGHT_NOT_SUPPORT,
+ ERROR_FACE_DETECTION_NOT_SUPPORT,
+ ERROR_PANORAMA_NOT_SUPPORT,
+ ERROR_MAX
+} CUSTOM_CAMERA_ERROR_CODE_ENUM;
+
+
+#endif
diff --git a/kernel-headers/libmtk_cipher_export.h b/kernel-headers/libmtk_cipher_export.h
new file mode 100644
index 0000000..575671f
--- /dev/null
+++ b/kernel-headers/libmtk_cipher_export.h
@@ -0,0 +1,83 @@
+#ifndef _LIBMTK_CIPHER_EXPORT_H
+#define _LIBMTK_CIPHER_EXPORT_H
+
+#define HEVC_BLK_LEN (20480) /* bytes */
+#define HEVC_MOD "HEVC_MOD"
+#define HEVC_NANO 1000000000ULL
+#define HEVC_CIPHER_LEN (102400) /* bytes */
+
+
+typedef struct {
+ unsigned char buf[HEVC_BLK_LEN];
+ unsigned int len;
+} HEVC_BLK;
+
+typedef enum {
+ VIDEO_ENCRYPT_CODEC_NONE = 0x0,
+ VIDEO_ENCRYPT_CODEC_HEVC_ENC = 0x1,
+ VIDEO_ENCRYPT_CODEC_HEVC_DEC = 0x2,
+ VIDEO_ENCRYPT_CODEC_MAX = 0xffffffff
+} VIDEO_ENCRYPT_CODEC_T;
+
+
+typedef int (*hevc_api_funp)(HEVC_BLK *p_hevc_blk);
+typedef int (*hevc_api_initk_funp)(unsigned char *key, unsigned int klen);
+
+
+#define SEC_OK 0x0
+#define SEC_FAIL 0x1
+
+/* HEVC shared lib*/
+#define ERR_HEVC_NOT_CORRECT_MODE 0x10000
+#define ERR_HEVC_DATA_NOT_ALIGNED 0x10001
+#define ERR_HEVC_ENC_IOCTL_FAIL 0x10002
+#define ERR_HEVC_DEC_IOCTL_FAIL 0x10002
+#define ERR_HEVC_CIPHER_UT_FAIL 0x10003
+#define ERR_HEVC_DATA_IS_NULL 0x10004
+#define ERR_HEVC_DATA_LENGTH_NOT_VALID 0x10005
+#define ERR_HEVC_SW_ENC_ERROR 0x10006
+#define ERR_HEVC_SW_DEC_ERROR 0x10007
+#define ERR_HEVC_INIT_SW_KEY_ERROR 0x10008
+
+
+/* HEVC sample*/
+#define ERR_HEVC_CIPHER_LIB_NOT_FOUND 0x20001
+#define ERR_HEVC_SW_DEC_BLOCK_SYM_NOT_FOUND 0x20002
+#define ERR_HEVC_HW_ENC_BLOCK_SYM_NOT_FOUND 0x20003
+#define ERR_HEVC_INIT_SW_KEY_SYM_NOT_FOUND 0x20004
+#define ERR_HEVC_INPUT_FILE_NOT_FOUND 0x20005
+#define ERR_HEVC_OUTPUT_FILE_NOT_FOUND 0x20006
+#define ERR_HEVC_SW_DEC_FILE_SYM_NOT_FOUND 0x20007
+#define ERR_HEVC_SW_DEC_FILE_FAILED 0x20008
+#define ERR_HEVC_UNKNOWN 0x2FFFF
+
+
+/* Define LOG LEVEL*/
+#define SEC_LOG_TRACE 0 /* For source code trace */
+#define SEC_LOG_DEBUG 0 /* For debug purpose */
+#define SEC_LOG_ERROR 1 /* For critical error dump */
+#define SEC_LOG_INFO 1 /* For information to know when processing in normal */
+
+/* DEBUG MACRO */
+#define SMSG_TRACE(...) \
+ do { if (SEC_LOG_TRACE) printf(__VA_ARGS__); } while (0)
+
+#define SMSG_DEBUG(...) \
+ do { if (SEC_LOG_DEBUG) printf(__VA_ARGS__); } while (0)
+
+#define SMSG_ERROR(...) \
+ do { if (SEC_LOG_ERROR) printf(__VA_ARGS__); } while (0)
+
+#define SMSG_INFO(...) \
+ do { if (SEC_LOG_INFO) printf(__VA_ARGS__); } while (0)
+
+
+#define HEVC_ENCRYTP_FILE_PATH "/data/mediaserver"
+#define HEVC_ENC_SW_ENCRYPT_FILE_PATH "/system/lib/libhevce_sb.ca7.android.so"
+#define HEVC_ENC_HW_ENCRYPT_FILE_PATH "/data/mediaserver/sb.ca7.android_hwenc.so"
+#define HEVC_ENC_HW_DECRYPT_FILE_PATH "/data/mediaserver/sb.ca7.android_hwdec.so"
+#define HEVC_DEC_SW_ENCRYTP_FILE_PATH "/system/lib/libHEVCdec_sa.ca7.android.so"
+#define HEVC_DEC_HW_ENCRYPT_FILE_PATH "/data/mediaserver/dec_sa.ca7.android_hwenc.so"
+#define HEVC_DEC_HW_DECRYPT_FILE_PATH "/data/mediaserver/dec_sa.ca7.android_hwdec.so"
+
+#endif /*_LIBMTK_CIPHER_EXPORT_H*/
diff --git a/kernel-headers/linux/almk_drv.h b/kernel-headers/linux/almk_drv.h
new file mode 100644
index 0000000..1c1cc6c
--- /dev/null
+++ b/kernel-headers/linux/almk_drv.h
@@ -0,0 +1,31 @@
+#include <linux/ioctl.h>
+
+#ifndef __ALMK_DRV_H__
+#define __ALMK_DRV_H__
+
+
+typedef struct
+{
+ unsigned int pid;
+ unsigned int *maxSafeSize;
+ //unsigned int *result;
+
+} ALMK_DRV_DATA;
+
+
+
+
+#define ALMK_IOCTL_MAGIC 'x'
+
+//#define JPEG_DEC_IOCTL_INIT _IO (ALMK_IOCTL_MAGIC, 1)
+//#define JPEG_DEC_IOCTL_CONFIG _IOW (ALMK_IOCTL_MAGIC, 2, JPEG_DEC_DRV_IN)
+//#define JPEG_DEC_IOCTL_START _IO (ALMK_IOCTL_MAGIC, 3)
+//#define JPEG_DEC_IOCTL_WAIT _IOWR(ALMK_IOCTL_MAGIC, 6, JPEG_DEC_DRV_OUT)
+//#define JPEG_DEC_IOCTL_DEINIT _IO (ALMK_IOCTL_MAGIC, 8)
+
+#define ALMK_IOCTL_CMD_INIT _IO (ALMK_IOCTL_MAGIC, 11)
+#define ALMK_IOCTL_CMD_GET_MAX_SIZE _IOWR(ALMK_IOCTL_MAGIC, 12, ALMK_DRV_DATA)
+#define ALMK_IOCTL_CMD_DEINIT _IO (ALMK_IOCTL_MAGIC, 13)
+
+#endif
+
diff --git a/kernel-headers/linux/cache.h b/kernel-headers/linux/cache.h
new file mode 100644
index 0000000..dca5a3c
--- /dev/null
+++ b/kernel-headers/linux/cache.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __LINUX_CACHE_H
+#define __LINUX_CACHE_H
+#include <linux/kernel.h>
+#include <asm/cache.h>
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef L1_CACHE_ALIGN
+#define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES)
+#endif
+#ifndef SMP_CACHE_BYTES
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
+#endif
+#ifndef __read_mostly
+#define __read_mostly
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef ____cacheline_aligned
+#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef ____cacheline_aligned_in_smp
+#define ____cacheline_aligned_in_smp
+#endif
+#ifndef __cacheline_aligned
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES), __section__(".data.cacheline_aligned")))
+#endif
+#ifndef __cacheline_aligned_in_smp
+#define __cacheline_aligned_in_smp
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef INTERNODE_CACHE_SHIFT
+#define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef ____cacheline_internodealigned_in_smp
+#define ____cacheline_internodealigned_in_smp
+#endif
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/kernel-headers/linux/ccci_ipc_task_ID.h b/kernel-headers/linux/ccci_ipc_task_ID.h
new file mode 100644
index 0000000..3f9909e
--- /dev/null
+++ b/kernel-headers/linux/ccci_ipc_task_ID.h
@@ -0,0 +1,40 @@
+#ifndef __CCCI_IPC_TASK_ID_H__
+#define __CCCI_IPC_TASK_ID_H__
+// Priority --> Local module ID --> External ID --> Max sent message
+// X_IPC_MODULE_CONF(1,M_SSDBG1,0,1) //TASK_ID_1
+// X_IPC_MODULE_CONF(1,AP_SSDBG2,1,1) //TASK_ID_2
+#ifdef __IPC_ID_TABLE
+#define X_IPC_MODULE_CONF(a,b,c,d) {c,b},
+#else
+#define X_IPC_MODULE_CONF(a,b,c,d)
+#endif
+
+
+#define AP_UNIFY_ID_FLAG (1<<31)
+#define MD_UNIFY_ID_FLAG (0<<31)
+
+//----------------------------------------------------------
+#define AGPS_MD_MOD_L4C 0
+#define AGPS_MD_MOD_L4C_2 1
+#define AGPS_MD_MOD_L4C_3 2
+#define AGPS_MD_MOD_L4C_4 3
+//agps MD begin task_id
+//Wait to add
+
+#define AGPS_AP_MOD_MMI 0
+//agps AP begin task_id
+//Wait to add
+#define GPS_AP_MOD 2
+//--------------------------------------------------------------------------
+X_IPC_MODULE_CONF(1, AGPS_MD_MOD_L4C, MD_UNIFY_ID_FLAG|0, 1)
+X_IPC_MODULE_CONF(1, AGPS_MD_MOD_L4C_2, MD_UNIFY_ID_FLAG|1, 1)
+X_IPC_MODULE_CONF(1, AGPS_MD_MOD_L4C_3, MD_UNIFY_ID_FLAG|2, 1)
+X_IPC_MODULE_CONF(1, AGPS_MD_MOD_L4C_4, MD_UNIFY_ID_FLAG|3, 1)
+//Wait to add
+//--------------------------------------------------------------------------
+X_IPC_MODULE_CONF(1, AGPS_AP_MOD_MMI, AP_UNIFY_ID_FLAG|0, 1)
+X_IPC_MODULE_CONF(1, GPS_AP_MOD, AP_UNIFY_ID_FLAG|2, 1)
+//Wait to add
+//-------------------------------------------------------------------------
+
+#endif
diff --git a/kernel-headers/linux/cmdq/cmdq_event.h b/kernel-headers/linux/cmdq/cmdq_event.h
new file mode 100644
index 0000000..4b71514
--- /dev/null
+++ b/kernel-headers/linux/cmdq/cmdq_event.h
@@ -0,0 +1,125 @@
+
+/* MDP start frame */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA0_SOF, 0)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA1_SOF, 1)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_DSI0_TE_SOF, 2) /* DISPSYS TE event */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_DSI1_TE_SOF, 3) /* DISPSYS TE event */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_MVW_SOF, 4)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP0_SOF, 5)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP1_SOF, 6)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WDMA_SOF, 7)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_SOF, 8)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_SOF, 9)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_CROP_SOF, 10)
+/* Display start frame */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL0_SOF, 11)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL1_SOF, 12)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA0_SOF, 13)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA1_SOF, 14)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA2_SOF, 15)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA0_SOF, 16)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA1_SOF, 17)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR0_SOF, 18)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR1_SOF, 19)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_AAL_SOF, 20)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_GAMMA_SOF, 21)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_UFOE_SOF, 22)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_PWM0_SOF, 23)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_PWM1_SOF, 24)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OD_SOF, 25)
+/* MDP frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA0_EOF, 26)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RDMA1_EOF, 27)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ0_EOF, 28)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ1_EOF, 29)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_RSZ2_EOF, 30)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP0_EOF, 31)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_TDSHP1_EOF, 32)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WDMA_EOF, 33)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_W_EOF, 34)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT0_R_EOF, 35)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_W_EOF, 36)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_WROT1_R_EOF, 37)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MDP_CROP_EOF, 38)
+/* Display frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL0_EOF, 39)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_OVL1_EOF, 40)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA0_EOF, 41)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA1_EOF, 42)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA2_EOF, 43)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA0_EOF, 44)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_WDMA1_EOF, 45)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR0_EOF, 46)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_COLOR1_EOF, 47)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_AAL_EOF, 48)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_GAMMA_EOF, 49)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_UFOE_EOF, 50)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_DPI0_EOF, 51)
+/* Mutex frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX0_STREAM_EOF, 53) /* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX1_STREAM_EOF, 54) /* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX2_STREAM_EOF, 55) /* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX3_STREAM_EOF, 56) /* DISPSYS */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX4_STREAM_EOF, 57) /* DISPSYS, please refer to disp_hal.h */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX5_STREAM_EOF, 58) /* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX6_STREAM_EOF, 59) /* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX7_STREAM_EOF, 60) /* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX8_STREAM_EOF, 61) /* DpFramework */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_MUTEX9_STREAM_EOF, 62)
+/* DpFramework via CMDQ_IOCTL_LOCK_MUTEX */
+/* Display underrun */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA0_UNDERRUN, 63)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA1_UNDERRUN, 64)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_DISP_RDMA2_UNDERRUN, 65)
+/* ISP frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS2_2_EOF, 129)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS2_1_EOF, 130)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS2_0_EOF, 131)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS1_1_EOF, 132)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_PASS1_0_EOF, 133)
+/* Engine events */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_CAMSV_2_PASS1_DONE, 134)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_CAMSV_1_PASS1_DONE, 135)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_SENINF_CAM1_2_3_FULL, 136)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_ISP_SENINF_CAM0_FULL, 137)
+/* JPEG frame done */
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_ENC_PASS2_EOF, 257)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_ENC_PASS1_EOF, 258)
+DECLARE_CMDQ_EVENT(CMDQ_EVENT_JPEG_DEC_EOF, 259)
+
+DECLARE_CMDQ_EVENT(CMDQ_MAX_HW_EVENT_COUNT, 260)
+
+
+
+/* Keep this at the end of HW events */
+/* SW Sync Tokens (Pre-defined) */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_CONFIG_DIRTY, 261)
+/* Config thread notify trigger thread */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_STREAM_EOF, 262)
+/* Trigger thread notify config thread */
+/* ESD check state. Trigger thread will be blocked until the check finishes. */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_ESD_EOF, 263)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_CABC_EOF, 264)
+/* check CABC setup finish */
+/* Block Trigger thread until the path freeze finishes */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_FREEZE_EOF, 265)
+/* Pass-2 notifies VENC frame is ready to be encoded */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_VENC_INPUT_READY, 270)
+/* VENC notifies Pass-2 encoding completion so next frame may start */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_VENC_EOF, 271)
+/* Notify normal CMDQ there are some secure task done */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_SECURE_THR_EOF, 299)
+/* SW Sync Tokens (User-defined) */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_USER_0, 300)
+/* SW-defined sync token */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_USER_1, 301)
+/* GPR access tokens (for HW register backup) */
+/* There are 15 32-bit GPR, 3 GPR form a set (64-bit for address, 32-bit for value) */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_0, 400)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_1, 401)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_2, 402)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_3, 403)
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_GPR_SET_4, 404)
+
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_MAX, (0x1FF)) /* event id is 9 bit */
+DECLARE_CMDQ_EVENT(CMDQ_SYNC_TOKEN_INVALID, (-1))
diff --git a/kernel-headers/linux/cmdq/cmdq_subsys.h b/kernel-headers/linux/cmdq/cmdq_subsys.h
new file mode 100644
index 0000000..1bef2d8
--- /dev/null
+++ b/kernel-headers/linux/cmdq/cmdq_subsys.h
@@ -0,0 +1,25 @@
+
+/* msb id group reg-base-name */
+DECLARE_CMDQ_SUBSYS(0x1300, 0, MFG, HAN_BASE)
+DECLARE_CMDQ_SUBSYS(0x1400, 1, MMSYS, MMSYS_CONFIG_BASE)
+DECLARE_CMDQ_SUBSYS(0x1401, 2, DISP, DISP_RDMA2_BASE)
+DECLARE_CMDQ_SUBSYS(0x1402, 3, DISP, MM_MUTEX_BASE)
+DECLARE_CMDQ_SUBSYS(0x1500, 4, CAM, IMGSYS_BASE)
+DECLARE_CMDQ_SUBSYS(0x1600, 5, VDEC, VDEC_GCON_BASE)
+DECLARE_CMDQ_SUBSYS(0x1700, 6, MJC, MJC_CONFIG_BASE)
+DECLARE_CMDQ_SUBSYS(0x1800, 7, VENC, VENC_GCON_BASE)
+DECLARE_CMDQ_SUBSYS(0x1000, 8, INFRA_AO, CKSYS_BASE)
+DECLARE_CMDQ_SUBSYS(0x1001, 9, INFRA_AO, KP_BASE)
+DECLARE_CMDQ_SUBSYS(0x1002, 10, MD32, MD32_BASE)
+DECLARE_CMDQ_SUBSYS(0x1003, 11, MD32, MD32_BASE)
+DECLARE_CMDQ_SUBSYS(0x1004, 12, MD32, MD32_BASE)
+DECLARE_CMDQ_SUBSYS(0x1005, 13, MD32, MD32_BASE)
+DECLARE_CMDQ_SUBSYS(0x1020, 14, INFRASYS, MCUCFG_BASE)
+DECLARE_CMDQ_SUBSYS(0x1021, 15, INFRASYS, GCPU_BASE)
+DECLARE_CMDQ_SUBSYS(0x1120, 16, PERISYS, USB0_BASE)
+DECLARE_CMDQ_SUBSYS(0x1121, 17, PERISYS, USB_SIF_BASE)
+DECLARE_CMDQ_SUBSYS(0x1122, 18, PERISYS, AUDIO_BASE)
+DECLARE_CMDQ_SUBSYS(0x1123, 19, PERISYS, MSDC0_BASE)
+DECLARE_CMDQ_SUBSYS(0x1124, 20, PERISYS, MSDC1_BASE)
+DECLARE_CMDQ_SUBSYS(0x1125, 21, PERISYS, MSDC2_BASE)
+DECLARE_CMDQ_SUBSYS(0x1126, 22, PERISYS, MSDC3_BASE)
diff --git a/kernel-headers/linux/ddp_od.h b/kernel-headers/linux/ddp_od.h
new file mode 100644
index 0000000..8c7ebbe
--- /dev/null
+++ b/kernel-headers/linux/ddp_od.h
@@ -0,0 +1,39 @@
+#ifndef __DDP_OD_H__
+#define __DDP_OD_H__
+
+#include <linux/ioctl.h>
+
+/* OD */
+typedef struct {
+ unsigned int size;
+ unsigned int type;
+ unsigned int ret;
+ unsigned int param0;
+ unsigned int param1;
+ unsigned int param2;
+ unsigned int param3;
+} DISP_OD_CMD;
+
+typedef enum{
+ OD_CTL_READ_REG,
+ OD_CTL_WRITE_REG,
+ OD_CTL_ENABLE_DEMO_MODE,
+ OD_CTL_RUN_TEST,
+ OD_CTL_WRITE_TABLE,
+ OD_CTL_CMD_NUM,
+ OD_CTL_ENABLE
+} DISP_OD_CMD_TYPE;
+
+typedef enum{
+ OD_CTL_ENABLE_OFF,
+ OD_CTL_ENABLE_ON
+} DISP_OD_ENABLE_STAGE;
+
+#define OD_CTL_ENABLE_DELAY 3
+
+/* OD */
+#define DISP_IOCTL_MAGIC 'x'
+#define DISP_IOCTL_OD_CTL _IOWR (DISP_IOCTL_MAGIC, 80 , DISP_OD_CMD)
+#define DISP_IOCTL_OD_SET_ENABLED _IOWR (DISP_IOCTL_MAGIC, 81 , int)
+
+#endif
diff --git a/kernel-headers/linux/disp_session.h b/kernel-headers/linux/disp_session.h
new file mode 100644
index 0000000..5044708
--- /dev/null
+++ b/kernel-headers/linux/disp_session.h
@@ -0,0 +1,400 @@
+#ifndef __DISP_SESSION_H
+#define __DISP_SESSION_H
+
+#define DISP_SESSION_DEVICE "mtk_disp_mgr"
+
+
+#define DISP_NO_ION_FD ((int)(~0U>>1))
+#define DISP_NO_USE_LAEYR_ID ((int)(~0U>>1))
+
+/* sync with define in ddp_ovl.h */
+#define OVL_CASCADE_SUPPORT
+#ifdef OVL_CASCADE_SUPPORT
+#define MAX_INPUT_CONFIG 8
+#else
+#define MAX_INPUT_CONFIG 4
+#endif
+
+#define MAKE_DISP_FORMAT_ID(id, bpp) (((id) << 8) | (bpp))
+#define DISP_SESSION_MODE(id) (((id)>>24)&0xff)
+#define DISP_SESSION_TYPE(id) (((id)>>16)&0xff)
+#define DISP_SESSION_DEV(id) ((id)&0xff)
+#define MAKE_DISP_SESSION(type, dev) (unsigned int)((type)<<16 | (dev))
+
+
+
+/* /============================================================================= */
+/* structure declarations */
+/* /=========================== */
+
+typedef enum {
+ DISP_IF_TYPE_DBI = 0,
+ DISP_IF_TYPE_DPI,
+ DISP_IF_TYPE_DSI0,
+ DISP_IF_TYPE_DSI1,
+ DISP_IF_TYPE_DSIDUAL,
+ DISP_IF_HDMI = 7,
+ DISP_IF_HDMI_SMARTBOOK,
+ DISP_IF_MHL,
+ DISP_IF_EPD
+} DISP_IF_TYPE;
+
+typedef enum {
+ DISP_IF_FORMAT_RGB565 = 0,
+ DISP_IF_FORMAT_RGB666,
+ DISP_IF_FORMAT_RGB888
+} DISP_IF_FORMAT;
+
+typedef enum {
+ DISP_IF_MODE_VIDEO = 0,
+ DISP_IF_MODE_COMMAND
+} DISP_IF_MODE;
+
+
+typedef enum {
+ DISP_ORIENTATION_0 = 0,
+ DISP_ORIENTATION_90 = 1,
+ DISP_ORIENTATION_180 = 2,
+ DISP_ORIENTATION_270 = 3,
+} DISP_ORIENTATION;
+
+typedef enum {
+ DISP_FORMAT_UNKNOWN = 0,
+
+ DISP_FORMAT_RGB565 = MAKE_DISP_FORMAT_ID(1, 2),
+ DISP_FORMAT_RGB888 = MAKE_DISP_FORMAT_ID(2, 3),
+ DISP_FORMAT_BGR888 = MAKE_DISP_FORMAT_ID(3, 3),
+ DISP_FORMAT_ARGB8888 = MAKE_DISP_FORMAT_ID(4, 4),
+ DISP_FORMAT_ABGR8888 = MAKE_DISP_FORMAT_ID(5, 4),
+ DISP_FORMAT_RGBA8888 = MAKE_DISP_FORMAT_ID(6, 4),
+ DISP_FORMAT_BGRA8888 = MAKE_DISP_FORMAT_ID(7, 4),
+ DISP_FORMAT_YUV422 = MAKE_DISP_FORMAT_ID(8, 2),
+ DISP_FORMAT_XRGB8888 = MAKE_DISP_FORMAT_ID(9, 4),
+ DISP_FORMAT_XBGR8888 = MAKE_DISP_FORMAT_ID(10, 4),
+ DISP_FORMAT_RGBX8888 = MAKE_DISP_FORMAT_ID(11, 4),
+ DISP_FORMAT_BGRX8888 = MAKE_DISP_FORMAT_ID(12, 4),
+ DISP_FORMAT_UYVY = MAKE_DISP_FORMAT_ID(13, 2),
+ DISP_FORMAT_YUV420_P = MAKE_DISP_FORMAT_ID(14, 2),
+ DISP_FORMAT_YV12 = MAKE_DISP_FORMAT_ID(16, 1), /* BPP = 1.5 */
+ DISP_FORMAT_BPP_MASK = 0xFF,
+} DISP_FORMAT;
+
+typedef enum {
+ DISP_LAYER_2D = 0,
+ DISP_LAYER_3D_SBS_0 = 0x1,
+ DISP_LAYER_3D_SBS_90 = 0x2,
+ DISP_LAYER_3D_SBS_180 = 0x3,
+ DISP_LAYER_3D_SBS_270 = 0x4,
+ DISP_LAYER_3D_TAB_0 = 0x10,
+ DISP_LAYER_3D_TAB_90 = 0x20,
+ DISP_LAYER_3D_TAB_180 = 0x30,
+ DISP_LAYER_3D_TAB_270 = 0x40,
+} DISP_LAYER_TYPE;
+
+typedef enum {
+ /* normal memory */
+ DISP_NORMAL_BUFFER = 0,
+ /* normal memory but should not be dumpped within screenshot */
+ DISP_PROTECT_BUFFER = 1,
+ /* secure memory */
+ DISP_SECURE_BUFFER = 2,
+ DISP_SECURE_BUFFER_SHIFT = 0x10002
+} DISP_BUFFER_TYPE;
+
+typedef enum {
+ /* ion buffer */
+ DISP_BUFFER_ION = 0,
+ /* dim layer, const alpha */
+ DISP_BUFFER_ALPHA = 1,
+ /* mva buffer */
+ DISP_BUFFER_MVA = 2,
+} DISP_BUFFER_SOURCE;
+
+typedef enum {
+ DISP_ALPHA_ONE = 0,
+ DISP_ALPHA_SRC = 1,
+ DISP_ALPHA_SRC_INVERT = 2,
+ DISP_ALPHA_INVALID = 3,
+} DISP_ALPHA_TYPE;
+
+typedef enum {
+ DISP_SESSION_PRIMARY = 1,
+ DISP_SESSION_EXTERNAL = 2,
+ DISP_SESSION_MEMORY = 3
+} DISP_SESSION_TYPE;
+
+typedef enum {
+ DISP_YUV_BT601_FULL = 0,
+ DISP_YUV_BT601 = 1,
+ DISP_YUV_BT709 = 2
+} DISP_YUV_RANGE_ENUM;
+
+typedef enum {
+ DISP_INVALID_SESSION_MODE = 0,
+ /* single output */
+ DISP_SESSION_DIRECT_LINK_MODE = 1,
+ DISP_SESSION_DECOUPLE_MODE = 2,
+
+ /* two ouputs */
+ DISP_SESSION_DIRECT_LINK_MIRROR_MODE = 3,
+ DISP_SESSION_DECOUPLE_MIRROR_MODE = 4,
+
+ DISP_SESSION_RDMA_MODE,
+ DISP_SESSION_MODE_NUM,
+
+} DISP_MODE;
+
+typedef enum {
+ SESSION_USER_INVALID = -1,
+ SESSION_USER_HWC = 0,
+ SESSION_USER_GUIEXT = 1,
+ SESSION_USER_AEE = 2,
+ SESSION_USER_PANDISP = 3,
+ SESSION_USER_CNT,
+} DISP_SESSION_USER;
+
+typedef enum {
+ DISP_OUTPUT_UNKNOWN = 0,
+ DISP_OUTPUT_MEMORY = 1,
+ DISP_OUTPUT_DECOUPLE = 2,
+} DISP_DC_TYPE;
+
+typedef enum {
+ TRIGGER_NORMAL,
+ TRIGGER_SUSPEND,
+ TRIGGER_RESUME,
+
+ TRIGGER_MODE_MAX_NUM
+} EXTD_TRIGGER_MODE;
+
+typedef struct disp_session_config_t {
+ DISP_SESSION_TYPE type;
+ unsigned int device_id;
+ DISP_MODE mode;
+ unsigned int session_id;
+ DISP_SESSION_USER user;
+ unsigned int present_fence_idx;
+ DISP_DC_TYPE dc_type;
+ int need_merge;
+ EXTD_TRIGGER_MODE tigger_mode;
+} disp_session_config;
+
+typedef struct {
+ unsigned int session_id;
+ unsigned int vsync_cnt;
+ unsigned long long vsync_ts;
+ int lcm_fps;
+} disp_session_vsync_config;
+
+typedef struct disp_input_config_t {
+ unsigned int layer_id;
+ unsigned int layer_enable;
+ DISP_BUFFER_SOURCE buffer_source;
+ void *src_base_addr;
+ void *src_phy_addr;
+ unsigned int src_direct_link;
+ DISP_FORMAT src_fmt;
+ unsigned int src_use_color_key;
+ unsigned int src_color_key;
+ unsigned int src_pitch;
+ unsigned int src_offset_x, src_offset_y;
+ unsigned int src_width, src_height;
+
+ unsigned int tgt_offset_x, tgt_offset_y;
+ unsigned int tgt_width, tgt_height;
+ DISP_ORIENTATION layer_rotation;
+ DISP_LAYER_TYPE layer_type;
+ DISP_ORIENTATION video_rotation;
+
+ unsigned int isTdshp; /* set to 1, will go through tdshp first, then layer blending, then to color */
+
+ unsigned int next_buff_idx;
+ int identity;
+ int connected_type;
+ DISP_BUFFER_TYPE security;
+ unsigned int alpha_enable;
+ unsigned int alpha;
+ unsigned int sur_aen;
+ DISP_ALPHA_TYPE src_alpha;
+ DISP_ALPHA_TYPE dst_alpha;
+ unsigned int frm_sequence;
+ DISP_YUV_RANGE_ENUM yuv_range;
+} disp_input_config;
+
+typedef struct disp_output_config_t {
+ void *va;
+ void *pa;
+ DISP_FORMAT fmt;
+ unsigned int x;
+ unsigned int y;
+ unsigned int width;
+ unsigned int height;
+ unsigned int pitch;
+ unsigned int pitchUV;
+ DISP_BUFFER_TYPE security;
+ unsigned int buff_idx;
+ unsigned int interface_idx;
+ unsigned int frm_sequence;
+} disp_output_config;
+
+typedef struct disp_session_input_config_t {
+ DISP_SESSION_USER setter;
+ unsigned int session_id;
+ unsigned int config_layer_num;
+ disp_input_config config[8];
+} disp_session_input_config;
+
+typedef struct disp_session_output_config_t {
+ unsigned int session_id;
+ disp_output_config config;
+} disp_session_output_config;
+
+typedef struct disp_session_layer_num_config_t {
+ unsigned int session_id;
+ unsigned int max_layer_num;
+} disp_session_layer_num_config;
+
+struct disp_frame_cfg_t {
+ DISP_SESSION_USER setter;
+ unsigned int session_id;
+
+ /* input config */
+ unsigned int input_layer_num;
+ disp_input_config input_cfg[8];
+ unsigned int overlap_layer_num;
+
+ /* constant layer */
+ unsigned int const_layer_num;
+ disp_input_config const_layer[1];
+
+ /* output config */
+ int output_en;
+ disp_output_config output_cfg;
+
+ /* trigger config */
+ DISP_MODE mode;
+ unsigned int present_fence_idx;
+ EXTD_TRIGGER_MODE tigger_mode;
+ DISP_SESSION_USER user;
+};
+
+typedef struct disp_session_info_t {
+ unsigned int session_id;
+ unsigned int maxLayerNum;
+ unsigned int isHwVsyncAvailable;
+ DISP_IF_TYPE displayType;
+ unsigned int displayWidth;
+ unsigned int displayHeight;
+ unsigned int displayFormat;
+ DISP_IF_MODE displayMode;
+ unsigned int vsyncFPS;
+ unsigned int physicalWidth;
+ unsigned int physicalHeight;
+ unsigned int isConnected;
+ unsigned int isHDCPSupported;
+ unsigned int isOVLDisabled;
+ unsigned int is3DSupport;
+ unsigned int const_layer_num;
+ /* updateFPS: fps of HWC trigger display */
+ /* notes: for better Accuracy, updateFPS = real_fps*100 */
+ unsigned int updateFPS;
+ unsigned int is_updateFPS_stable;
+} disp_session_info;
+
+typedef struct disp_buffer_info_t {
+ /* Session */
+ unsigned int session_id;
+ /* Input */
+ unsigned int layer_id;
+ unsigned int layer_en;
+ int ion_fd;
+ unsigned int cache_sync;
+ /* Output */
+ unsigned int index;
+ int fence_fd;
+ unsigned int interface_index;
+ int interface_fence_fd;
+} disp_buffer_info;
+
+typedef struct disp_present_fence_info_t {
+ /* input */
+ unsigned int session_id;
+ /* output */
+ unsigned int present_fence_fd;
+ unsigned int present_fence_index;
+} disp_present_fence;
+
+typedef struct disp_present_fence_t {
+ /* Session */
+ unsigned int session_id;
+
+ /* Output */
+ unsigned int index;
+ int fence_fd;
+} disp_present_fence_info;
+
+typedef enum {
+ DISP_OUTPUT_CAP_DIRECT_LINK = 0,
+ DISP_OUTPUT_CAP_DECOUPLE,
+ DISP_OUTPUT_CAP_SWITCHABLE,
+} DISP_CAP_OUTPUT_MODE;
+
+typedef enum {
+ DISP_OUTPUT_CAP_SINGLE_PASS = 0,
+ DISP_OUTPUT_CAP_MULTI_PASS,
+} DISP_CAP_OUTPUT_PASS;
+
+typedef enum {
+ DISP_FEATURE_TIME_SHARING = 0x00000001,
+} DISP_FEATURE;
+
+typedef struct disp_caps_t {
+ DISP_CAP_OUTPUT_MODE output_mode;
+ DISP_CAP_OUTPUT_PASS output_pass;
+ unsigned int max_layer_num;
+#ifdef CONFIG_FOR_SOURCE_PQ
+ unsigned int max_pq_num;
+#endif
+ unsigned int disp_feature;
+ int is_support_frame_cfg_ioctl;
+ int is_output_rotated;
+} disp_caps_info;
+
+typedef struct disp_session_buf_t {
+ unsigned int session_id;
+ unsigned int buf_hnd[3];
+} disp_session_buf_info;
+
+/* IOCTL commands. */
+#define DISP_IOW(num, dtype) _IOW('O', num, dtype)
+#define DISP_IOR(num, dtype) _IOR('O', num, dtype)
+#define DISP_IOWR(num, dtype) _IOWR('O', num, dtype)
+#define DISP_IO(num) _IO('O', num)
+
+
+#define DISP_IOCTL_CREATE_SESSION DISP_IOW(201, disp_session_config)
+#define DISP_IOCTL_DESTROY_SESSION DISP_IOW(202, disp_session_config)
+#define DISP_IOCTL_TRIGGER_SESSION DISP_IOW(203, disp_session_config)
+#define DISP_IOCTL_PREPARE_INPUT_BUFFER DISP_IOW(204, disp_buffer_info)
+#define DISP_IOCTL_PREPARE_OUTPUT_BUFFER DISP_IOW(205, disp_buffer_info)
+#define DISP_IOCTL_SET_INPUT_BUFFER DISP_IOW(206, disp_session_input_config)
+#define DISP_IOCTL_SET_OUTPUT_BUFFER DISP_IOW(207, disp_session_output_config)
+#define DISP_IOCTL_GET_SESSION_INFO DISP_IOW(208, disp_session_info)
+
+
+#define DISP_IOCTL_SET_SESSION_MODE DISP_IOW(209, disp_session_config)
+#define DISP_IOCTL_GET_SESSION_MODE DISP_IOW(210, disp_session_config)
+#define DISP_IOCTL_SET_SESSION_TYPE DISP_IOW(211, disp_session_config)
+#define DISP_IOCTL_GET_SESSION_TYPE DISP_IOW(212, disp_session_config)
+#define DISP_IOCTL_WAIT_FOR_VSYNC DISP_IOW(213, disp_session_vsync_config)
+#define DISP_IOCTL_SET_MAX_LAYER_NUM DISP_IOW(214, disp_session_layer_num_config)
+#define DISP_IOCTL_SET_VSYNC_FPS DISP_IOW(215, unsigned int)
+
+#define DISP_IOCTL_GET_PRESENT_FENCE DISP_IOW(216, disp_present_fence)
+
+#define DISP_IOCTL_GET_IS_DRIVER_SUSPEND DISP_IOW(217, unsigned int)
+#define DISP_IOCTL_GET_DISPLAY_CAPS DISP_IOW(218, disp_caps_info)
+#define DISP_IOCTL_INSERT_SESSION_BUFFERS DISP_IOW(219, disp_session_buf_info)
+#define DISP_IOCTL_FRAME_CONFIG DISP_IOW(220, disp_session_output_config)
+
+#endif /* __DISP_SESSION_H */
diff --git a/kernel-headers/linux/disp_svp.h b/kernel-headers/linux/disp_svp.h
new file mode 100644
index 0000000..3b8310f
--- /dev/null
+++ b/kernel-headers/linux/disp_svp.h
@@ -0,0 +1,266 @@
+/**
+ * NOTICE:
+ * MUST BE consistent with bionic/libc/kernel/common/linux/disp_svp.h
+ */
+#ifndef __DISP_SVP_H
+#define __DISP_SVP_H
+
+#define DISP_NO_ION_FD ((int)(~0U>>1))
+#define DISP_NO_USE_LAEYR_ID ((int)(~0U>>1))
+
+#define MAX_INPUT_CONFIG 4
+#define MAKE_DISP_FORMAT_ID(id, bpp) (((id) << 8) | (bpp))
+
+///=============================================================================
+// structure declarations
+///===========================
+
+typedef enum
+{
+ DISP_IF_TYPE_DBI = 0,
+ DISP_IF_TYPE_DPI,
+ DISP_IF_TYPE_DSI0,
+ DISP_IF_TYPE_DSI1,
+ DISP_IF_TYPE_DSIDUAL,
+ DISP_IF_HDMI,
+ DISP_IF_HDMI_SMARTBOOK
+} DISP_IF_TYPE;
+
+typedef enum
+{
+ DISP_IF_FORMAT_RGB565 = 0,
+ DISP_IF_FORMAT_RGB666,
+ DISP_IF_FORMAT_RGB888
+} DISP_IF_FORMAT;
+
+typedef enum
+{
+ DISP_IF_MODE_VIDEO = 0,
+ DISP_IF_MODE_COMMAND
+} DISP_IF_MODE;
+
+
+typedef enum
+{
+ DISP_ORIENTATION_0 = 0,
+ DISP_ORIENTATION_90 = 1,
+ DISP_ORIENTATION_180 = 2,
+ DISP_ORIENTATION_270 = 3,
+} DISP_ORIENTATION;
+
+typedef enum
+{
+ DISP_FORMAT_UNKNOWN = 0,
+
+ DISP_FORMAT_RGB565 = MAKE_DISP_FORMAT_ID(1, 2),
+ DISP_FORMAT_RGB888 = MAKE_DISP_FORMAT_ID(2, 3),
+ DISP_FORMAT_BGR888 = MAKE_DISP_FORMAT_ID(3, 3),
+ DISP_FORMAT_ARGB8888 = MAKE_DISP_FORMAT_ID(4, 4),
+ DISP_FORMAT_ABGR8888 = MAKE_DISP_FORMAT_ID(5, 4),
+ DISP_FORMAT_RGBA8888 = MAKE_DISP_FORMAT_ID(6, 4),
+ DISP_FORMAT_BGRA8888 = MAKE_DISP_FORMAT_ID(7, 4),
+ DISP_FORMAT_XRGB8888 = MAKE_DISP_FORMAT_ID(8, 4),
+ DISP_FORMAT_XBGR8888 = MAKE_DISP_FORMAT_ID(9, 4),
+ //Packed YUV Formats
+ DISP_FORMAT_YUV444 = MAKE_DISP_FORMAT_ID(10, 3),
+ DISP_FORMAT_YVYU = MAKE_DISP_FORMAT_ID(11, 2), //Same as UYVY, but replace Y/U/V
+ DISP_FORMAT_VYUY = MAKE_DISP_FORMAT_ID(12, 2),
+ DISP_FORMAT_UYVY = MAKE_DISP_FORMAT_ID(13, 2),
+ DISP_FORMAT_Y422 = MAKE_DISP_FORMAT_ID(13, 2),
+ DISP_FORMAT_YUYV = MAKE_DISP_FORMAT_ID(14, 2), //Same as UYVY but replace U/V
+ DISP_FORMAT_YUY2 = MAKE_DISP_FORMAT_ID(14, 2),
+ DISP_FORMAT_YUV422 = MAKE_DISP_FORMAT_ID(14, 2), //Will be removed
+ DISP_FORMAT_GREY = MAKE_DISP_FORMAT_ID(15, 1), //Single Y plane
+ DISP_FORMAT_Y800 = MAKE_DISP_FORMAT_ID(15, 1),
+ DISP_FORMAT_Y8 = MAKE_DISP_FORMAT_ID(15, 1),
+ //Planar YUV Formats
+ DISP_FORMAT_YV12 = MAKE_DISP_FORMAT_ID(16, 1), //BPP = 1.5
+ DISP_FORMAT_I420 = MAKE_DISP_FORMAT_ID(17, 1), //Same as YV12 but replace U/V
+ DISP_FORMAT_IYUV = MAKE_DISP_FORMAT_ID(17, 1),
+ DISP_FORMAT_NV12 = MAKE_DISP_FORMAT_ID(18, 1), //BPP = 1.5
+ DISP_FORMAT_NV21 = MAKE_DISP_FORMAT_ID(19, 1), //Same as NV12 but replace U/V
+
+ DISP_FORMAT_BPP_MASK = 0xFFFF,
+} DISP_FORMAT;
+
+typedef enum
+{
+ DISP_LAYER_2D = 0,
+ DISP_LAYER_3D_SBS_0 = 0x1,
+ DISP_LAYER_3D_SBS_90 = 0x2,
+ DISP_LAYER_3D_SBS_180 = 0x3,
+ DISP_LAYER_3D_SBS_270 = 0x4,
+ DISP_LAYER_3D_TAB_0 = 0x10,
+ DISP_LAYER_3D_TAB_90 = 0x20,
+ DISP_LAYER_3D_TAB_180 = 0x30,
+ DISP_LAYER_3D_TAB_270 = 0x40,
+} DISP_LAYER_TYPE;
+
+typedef enum
+{
+ // normal memory
+ DISP_NORMAL_BUFFER = 0,
+ // secure memory
+ DISP_SECURE_BUFFER = 1,
+ // normal memory but should not be dumpped within screenshot
+ DISP_PROTECT_BUFFER = 2,
+ DISP_SECURE_BUFFER_SHIFT = 0x10001
+} DISP_BUFFER_TYPE;
+
+typedef enum
+{
+ DISP_SESSION_PRIMARY = 1,
+ DISP_SESSION_EXTERNAL = 2,
+ DISP_SESSION_MEMORY = 3
+}DISP_SESSION_TYPE;
+
+typedef enum
+{
+ // single output
+ DISP_SESSION_DIRECT_LINK_MODE = 1,
+ DISP_SESSION_DECOUPLE_MODE = 2,
+
+ // two ouputs
+ DISP_SESSION_DIRECT_LINK_MIRROR_MODE = 3,
+ DISP_SESSION_DECOUPLE_MIRROR_MODE = 4,
+}DISP_MODE;
+
+typedef struct disp_session_config_t
+{
+ DISP_SESSION_TYPE type;
+ unsigned int device_id;
+ DISP_MODE mode;
+ unsigned int session_id;
+}disp_session_config;
+
+typedef struct
+{
+ unsigned int session_id;
+ unsigned int vsync_cnt;
+ long int vsync_ts;
+}disp_session_vsync_config;
+
+typedef struct disp_input_config_t
+{
+ unsigned int layer_id;
+ unsigned int layer_enable;
+
+ void* src_base_addr;
+ void* src_phy_addr;
+ unsigned int src_direct_link;
+ DISP_FORMAT src_fmt;
+ unsigned int src_use_color_key;
+ unsigned int src_color_key;
+ unsigned int src_pitch;
+ unsigned int src_offset_x, src_offset_y;
+ unsigned int src_width, src_height;
+
+ unsigned int tgt_offset_x, tgt_offset_y;
+ unsigned int tgt_width, tgt_height;
+ DISP_ORIENTATION layer_rotation;
+ DISP_LAYER_TYPE layer_type;
+ DISP_ORIENTATION video_rotation;
+
+ unsigned int isTdshp; // set to 1, will go through tdshp first, then layer blending, then to color
+
+ unsigned int next_buff_idx;
+ int identity;
+ int connected_type;
+ DISP_BUFFER_TYPE security;
+ unsigned int alpha_enable;
+ unsigned int alpha;
+ unsigned int frm_sequence;
+}disp_input_config;
+
+
+typedef struct disp_output_config_t
+{
+ unsigned int va;
+ unsigned int pa;
+ DISP_FORMAT fmt;
+ unsigned int x;
+ unsigned int y;
+ unsigned int width;
+ unsigned int height;
+ unsigned int pitch;
+ unsigned int pitchUV;
+ DISP_BUFFER_TYPE security;
+ unsigned int buff_idx;
+ unsigned int frm_sequence;
+}disp_output_config;
+
+#define MAX_INPUT_CONFIG 4
+
+typedef struct disp_session_input_config_t
+{
+ unsigned int session_id;
+ unsigned int config_layer_num;
+ disp_input_config config[MAX_INPUT_CONFIG];
+}disp_session_input_config;
+
+typedef struct disp_session_output_config_t
+{
+ unsigned int session_id;
+ disp_output_config config;
+}disp_session_output_config;
+
+typedef struct disp_session_layer_num_config_t
+{
+ unsigned int session_id;
+ unsigned int max_layer_num;
+}disp_session_layer_num_config;
+
+typedef struct disp_session_info_t
+{
+ unsigned int session_id;
+ unsigned int maxLayerNum;
+ unsigned int isHwVsyncAvailable;
+ DISP_IF_TYPE displayType;
+ unsigned int displayWidth;
+ unsigned int displayHeight;
+ unsigned int displayFormat;
+ DISP_IF_MODE displayMode;
+ unsigned int vsyncFPS;
+ unsigned int physicalWidth;
+ unsigned int physicalHeight;
+ unsigned int isConnected;
+} disp_session_info;
+
+typedef struct disp_buffer_info_t
+{
+ // Session
+ unsigned int session_id;
+ // Input
+ unsigned int layer_id;
+ unsigned int layer_en;
+ int ion_fd;
+ unsigned int cache_sync;
+ // Output
+ unsigned int index;
+ int fence_fd;
+}disp_buffer_info;
+/* IOCTL commands. */
+#define DISP_IOW(num, dtype) _IOW('O', num, dtype)
+#define DISP_IOR(num, dtype) _IOR('O', num, dtype)
+#define DISP_IOWR(num, dtype) _IOWR('O', num, dtype)
+#define DISP_IO(num) _IO('O', num)
+
+
+#define DISP_IOCTL_CREATE_SESSION DISP_IOW(201, disp_session_config)
+#define DISP_IOCTL_DESTROY_SESSION DISP_IOW(202, disp_session_config)
+#define DISP_IOCTL_TRIGGER_SESSION DISP_IOW(203, disp_session_config)
+#define DISP_IOCTL_PREPARE_INPUT_BUFFER DISP_IOW(204, disp_buffer_info)
+#define DISP_IOCTL_PREPARE_OUTPUT_BUFFER DISP_IOW(205, disp_buffer_info)
+#define DISP_IOCTL_SET_INPUT_BUFFER DISP_IOW(206, disp_session_input_config)
+#define DISP_IOCTL_SET_OUTPUT_BUFFER DISP_IOW(207, disp_session_output_config)
+#define DISP_IOCTL_GET_SESSION_INFO DISP_IOW(208, disp_session_info)
+
+#define DISP_IOCTL_SET_SESSION_MODE DISP_IOW(209, disp_session_config)
+#define DISP_IOCTL_GET_SESSION_MODE DISP_IOW(210, disp_session_config)
+#define DISP_IOCTL_SET_SESSION_TYPE DISP_IOW(211, disp_session_config)
+#define DISP_IOCTL_GET_SESSION_TYPE DISP_IOW(212, disp_session_config)
+#define DISP_IOCTL_WAIT_FOR_VSYNC DISP_IOW(213, disp_session_vsync_config)
+#define DISP_IOCTL_SET_MAX_LAYER_NUM DISP_IOW(214, disp_session_layer_num_config)
+
+
+#endif //__DISP_SVP_H
diff --git a/kernel-headers/linux/fm.h b/kernel-headers/linux/fm.h
new file mode 100644
index 0000000..91ed0bf
--- /dev/null
+++ b/kernel-headers/linux/fm.h
@@ -0,0 +1,631 @@
+#ifndef __FM_H__
+#define __FM_H__
+
+//#define FMDEBUG
+
+#include <linux/ioctl.h>
+#include <linux/time.h>
+//fm type define
+typedef signed char fm_s8;
+typedef signed short fm_s16;
+typedef signed int fm_s32;
+typedef signed long long fm_s64;
+typedef unsigned char fm_u8;
+typedef unsigned short fm_u16;
+typedef unsigned int fm_u32;
+typedef unsigned long long fm_u64;
+typedef enum fm_bool {
+ fm_false = 0,
+ fm_true = 1
+} fm_bool;
+
+// scan sort algorithm
+enum {
+ FM_SCAN_SORT_NON = 0,
+ FM_SCAN_SORT_UP,
+ FM_SCAN_SORT_DOWN,
+ FM_SCAN_SORT_MAX
+};
+
+// scan methods
+enum {
+ FM_SCAN_SEL_HW = 0, // select hardware scan, advantage: fast
+ FM_SCAN_SEL_SW, // select software scan, advantage: more accurate
+ FM_SCAN_SEL_MAX
+};
+
+ //*****************************************************************************************
+//***********************************FM config for customer ***********************************
+//*****************************************************************************************
+//RX
+#define FMR_RSSI_TH_LONG 0x0301 //FM radio long antenna RSSI threshold(11.375dBuV)
+#define FMR_RSSI_TH_SHORT 0x02E0 //FM radio short antenna RSSI threshold(-1dBuV)
+#define FMR_CQI_TH 0x00E9 //FM radio Channel quality indicator threshold(0x0000~0x00FF)
+#define FMR_SEEK_SPACE 1 //FM radio seek space,1:100KHZ; 2:200KHZ
+#define FMR_SCAN_CH_SIZE 80 //FM radio scan max channel size
+#define FMR_BAND 1 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special
+#define FMR_BAND_FREQ_L 875 //FM radio special band low freq(Default 87.5MHz)
+#define FMR_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz)
+#define FM_SCAN_SORT_SELECT FM_SCAN_SORT_NON
+#define FM_SCAN_SELECT FM_SCAN_SEL_HW
+#define FM_SCAN_SOFT_MUTE_GAIN_TH 3 //soft-mute threshold when software scan, rang: 0~3, 0 means better audio quality but less channel
+#define FM_CHIP_DESE_RSSI_TH (-102) // rang: -102 ~ -72
+
+//TX
+#define FMTX_PWR_LEVEL_MAX 120 //FM transmitter power level, rang: 85db~120db, default 120db
+
+//*****************************************************************************************
+//***********************************FM config for engineer ***********************************
+//*****************************************************************************************
+//RX
+#define FMR_MR_TH 0x01BD //FM radio MR threshold
+#define ADDR_SCAN_TH 0xE0 //scan thrshold register
+#define ADDR_CQI_TH 0xE1 //scan CQI register
+
+//TX
+#define FMTX_SCAN_HOLE_LOW 923 //92.3MHz~95.4MHz should not show to user
+#define FMTX_SCAN_HOLE_HIGH 954 //92.3MHz~95.4MHz should not show to user
+//*****************************************************************************************
+
+#define FM_NAME "fm"
+#define FM_DEVICE_NAME "/dev/fm"
+
+// errno
+#define FM_SUCCESS 0
+#define FM_FAILED 1
+#define FM_EPARM 2
+#define FM_BADSTATUS 3
+#define FM_TUNE_FAILED 4
+#define FM_SEEK_FAILED 5
+#define FM_BUSY 6
+#define FM_SCAN_FAILED 7
+
+// band
+#define FM_BAND_UNKNOWN 0
+#define FM_BAND_UE 1 // US/Europe band 87.5MHz ~ 108MHz (DEFAULT)
+#define FM_BAND_JAPAN 2 // Japan band 76MHz ~ 90MHz
+#define FM_BAND_JAPANW 3 // Japan wideband 76MHZ ~ 108MHz
+#define FM_BAND_SPECIAL 4 // special band between 76MHZ and 108MHz
+#define FM_BAND_DEFAULT FM_BAND_UE
+
+#define FM_UE_FREQ_MIN 875
+#define FM_UE_FREQ_MAX 1080
+#define FM_JP_FREQ_MIN 760
+#define FM_JP_FREQ_MAX 1080
+#define FM_FREQ_MIN FMR_BAND_FREQ_L
+#define FM_FREQ_MAX FMR_BAND_FREQ_H
+#define FM_RAIDO_BAND FM_BAND_UE
+
+// space
+#define FM_SPACE_UNKNOWN 0
+#define FM_SPACE_100K 1
+#define FM_SPACE_200K 2
+#define FM_SPACE_50K 5
+
+#define FM_SEEK_SPACE FMR_SEEK_SPACE
+
+// max scan channel num
+#define FM_MAX_CHL_SIZE FMR_SCAN_CH_SIZE
+// auto HiLo
+#define FM_AUTO_HILO_OFF 0
+#define FM_AUTO_HILO_ON 1
+
+// seek direction
+#define FM_SEEK_UP 0
+#define FM_SEEK_DOWN 1
+
+#define FM_CHIP_AR1000 0x1000
+#define FM_CHIP_MT5192 0x91
+#define FM_CHIP_MT5193 0x92
+#define FM_CHIP_MT6616 0x6616
+#define FM_CHIP_MT6620 0x6620
+#define FM_CHIP_MT6626 0x6626
+#define FM_CHIP_MT6628 0x6628
+#define FM_CHIP_MT6627 0x6627
+#define FM_CHIP_MT6580 0x6580
+#define FM_CHIP_MT6630 0x6630
+
+#define FM_CHIP_UNSUPPORTED -1
+
+// seek threshold
+#define FM_SEEKTH_LEVEL_DEFAULT 4
+
+struct fm_tune_parm {
+ uint8_t err;
+ uint8_t band;
+ uint8_t space;
+ uint8_t hilo;
+ uint16_t freq; // IN/OUT parameter
+};
+
+struct fm_seek_parm {
+ uint8_t err;
+ uint8_t band;
+ uint8_t space;
+ uint8_t hilo;
+ uint8_t seekdir;
+ uint8_t seekth;
+ uint16_t freq; // IN/OUT parameter
+};
+
+struct fm_scan_parm {
+ uint8_t err;
+ uint8_t band;
+ uint8_t space;
+ uint8_t hilo;
+ uint16_t freq; // OUT parameter
+ uint16_t ScanTBL[26]; //need no less than the chip
+ uint16_t ScanTBLSize; //IN/OUT parameter
+};
+
+struct fm_ch_rssi {
+ uint16_t freq;
+ int rssi;
+};
+
+enum fm_scan_cmd_t {
+ FM_SCAN_CMD_INIT = 0,
+ FM_SCAN_CMD_START,
+ FM_SCAN_CMD_GET_NUM,
+ FM_SCAN_CMD_GET_CH,
+ FM_SCAN_CMD_GET_RSSI,
+ FM_SCAN_CMD_GET_CH_RSSI,
+ FM_SCAN_CMD_MAX
+};
+
+struct fm_scan_t {
+ enum fm_scan_cmd_t cmd;
+ int ret; // 0, success; else error code
+ uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
+ uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
+ int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
+ int num; // valid channel number
+ void *priv;
+ int sr_size; // scan result buffer size in bytes
+ union {
+ uint16_t *ch_buf; // channel buffer
+ int *rssi_buf; // rssi buffer
+ struct fm_ch_rssi *ch_rssi_buf; //channel and RSSI buffer
+ } sr;
+};
+
+struct fm_seek_t {
+ int ret; // 0, success; else error code
+ uint16_t freq;
+ uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
+ uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
+ int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
+ int dir; // 0: up; 1: down
+ int th; // seek threshold in dbm(Eg, -95dbm)
+ void *priv;
+};
+
+struct fm_tune_t {
+ int ret; // 0, success; else error code
+ uint16_t freq;
+ uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
+ uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
+ int space; // 5: 50KHz, 10: 100Khz, 20: 200Khz
+ void *priv;
+};
+
+struct fm_softmute_tune_t {
+ fm_s32 rssi; // RSSI of current channel
+ fm_u16 freq; // current frequency
+ fm_bool valid; // current channel is valid(true) or not(false)
+};
+
+struct fm_rssi_req {
+ uint16_t num;
+ uint16_t read_cnt;
+ struct fm_ch_rssi cr[26*16];
+};
+
+struct fm_hw_info {
+ int chip_id; //chip ID, eg. 6620
+ int eco_ver; //chip ECO version, eg. E3
+ int rom_ver; //FM DSP rom code version, eg. V2
+ int patch_ver; //FM DSP patch version, eg. 1.11
+ int reserve;
+};
+
+struct fm_search_threshold_t {
+ fm_s32 th_type;// 0, RSSI. 1,desense RSSI. 2,SMG.
+ fm_s32 th_val; //threshold value
+ fm_s32 reserve;
+};
+
+#if 1
+#define NEED_DEF_RDS 1
+#else
+#define NEED_DEF_RDS 0
+#endif
+
+#if NEED_DEF_RDS
+//For RDS feature
+typedef struct {
+ uint8_t TP;
+ uint8_t TA;
+ uint8_t Music;
+ uint8_t Stereo;
+ uint8_t Artificial_Head;
+ uint8_t Compressed;
+ uint8_t Dynamic_PTY;
+ uint8_t Text_AB;
+ uint32_t flag_status;
+} RDSFlag_Struct;
+
+typedef struct {
+ uint16_t Month;
+ uint16_t Day;
+ uint16_t Year;
+ uint16_t Hour;
+ uint16_t Minute;
+ uint8_t Local_Time_offset_signbit;
+ uint8_t Local_Time_offset_half_hour;
+} CT_Struct;
+
+typedef struct {
+ int16_t AF_Num;
+ int16_t AF[2][25]; //100KHz
+ uint8_t Addr_Cnt;
+ uint8_t isMethod_A;
+ uint8_t isAFNum_Get;
+} AF_Info;
+
+typedef struct {
+ uint8_t PS[4][8];
+ uint8_t Addr_Cnt;
+} PS_Info;
+
+typedef struct {
+ uint8_t TextData[4][64];
+ uint8_t GetLength;
+ uint8_t isRTDisplay;
+ uint8_t TextLength;
+ uint8_t isTypeA;
+ uint8_t BufCnt;
+ uint16_t Addr_Cnt;
+} RT_Info;
+
+struct rds_raw_data {
+ int dirty; //indicate if the data changed or not
+ int len; //the data len form chip
+ uint8_t data[146];
+};
+
+struct rds_group_cnt {
+ unsigned int total;
+ unsigned int groupA[16]; // RDS groupA counter
+ unsigned int groupB[16]; // RDS groupB counter
+};
+
+enum rds_group_cnt_opcode {
+ RDS_GROUP_CNT_READ = 0,
+ RDS_GROUP_CNT_WRITE,
+ RDS_GROUP_CNT_RESET,
+ RDS_GROUP_CNT_MAX
+};
+
+struct rds_group_cnt_req {
+ int err;
+ enum rds_group_cnt_opcode op;
+ struct rds_group_cnt gc;
+};
+
+typedef struct {
+ CT_Struct CT;
+ RDSFlag_Struct RDSFlag;
+ uint16_t PI;
+ uint8_t Switch_TP;
+ uint8_t PTY;
+ AF_Info AF_Data;
+ AF_Info AFON_Data;
+ uint8_t Radio_Page_Code;
+ uint16_t Program_Item_Number_Code;
+ uint8_t Extend_Country_Code;
+ uint16_t Language_Code;
+ PS_Info PS_Data;
+ uint8_t PS_ON[8];
+ RT_Info RT_Data;
+ uint16_t event_status; //will use RDSFlag_Struct RDSFlag->flag_status to check which event, is that ok?
+ struct rds_group_cnt gc;
+} RDSData_Struct;
+
+
+//Need care the following definition.
+//valid Rds Flag for notify
+typedef enum {
+ RDS_FLAG_IS_TP = 0x0001, // Program is a traffic program
+ RDS_FLAG_IS_TA = 0x0002, // Program currently broadcasts a traffic ann.
+ RDS_FLAG_IS_MUSIC = 0x0004, // Program currently broadcasts music
+ RDS_FLAG_IS_STEREO = 0x0008, // Program is transmitted in stereo
+ RDS_FLAG_IS_ARTIFICIAL_HEAD = 0x0010, // Program is an artificial head recording
+ RDS_FLAG_IS_COMPRESSED = 0x0020, // Program content is compressed
+ RDS_FLAG_IS_DYNAMIC_PTY = 0x0040, // Program type can change
+ RDS_FLAG_TEXT_AB = 0x0080 // If this flag changes state, a new radio text string begins
+} RdsFlag;
+
+typedef enum {
+ RDS_EVENT_FLAGS = 0x0001, // One of the RDS flags has changed state
+ RDS_EVENT_PI_CODE = 0x0002, // The program identification code has changed
+ RDS_EVENT_PTY_CODE = 0x0004, // The program type code has changed
+ RDS_EVENT_PROGRAMNAME = 0x0008, // The program name has changed
+ RDS_EVENT_UTCDATETIME = 0x0010, // A new UTC date/time is available
+ RDS_EVENT_LOCDATETIME = 0x0020, // A new local date/time is available
+ RDS_EVENT_LAST_RADIOTEXT = 0x0040, // A radio text string was completed
+ RDS_EVENT_AF = 0x0080, // Current Channel RF signal strength too weak, need do AF switch
+ RDS_EVENT_AF_LIST = 0x0100, // An alternative frequency list is ready
+ RDS_EVENT_AFON_LIST = 0x0200, // An alternative frequency list is ready
+ RDS_EVENT_TAON = 0x0400, // Other Network traffic announcement start
+ RDS_EVENT_TAON_OFF = 0x0800, // Other Network traffic announcement finished.
+ RDS_EVENT_RDS = 0x2000, // RDS Interrupt had arrived durint timer period
+ RDS_EVENT_NO_RDS = 0x4000, // RDS Interrupt not arrived durint timer period
+ RDS_EVENT_RDS_TIMER = 0x8000 // Timer for RDS Bler Check. ---- BLER block error rate
+} RdsEvent;
+#endif
+
+struct fm_rds_tx_parm {
+ uint8_t err;
+ uint16_t pi;
+ uint16_t ps[12]; // 4 ps
+ uint16_t other_rds[87]; // 0~29 other groups
+ uint8_t other_rds_cnt; // # of other group
+};
+
+typedef struct fm_rds_tx_req {
+ unsigned char pty; // 0~31 integer
+ unsigned char rds_rbds; // 0:RDS, 1:RBDS
+ unsigned char dyn_pty; // 0:static, 1:dynamic
+ unsigned short pi_code; // 2-byte hex
+ unsigned char ps_buf[8]; // hex buf of PS
+ unsigned char ps_len; // length of PS, must be 0 / 8"
+ unsigned char af; // 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz
+ unsigned char ah; // Artificial head, 0:no, 1:yes
+ unsigned char stereo; // 0:mono, 1:stereo
+ unsigned char compress; // Audio compress, 0:no, 1:yes
+ unsigned char tp; // traffic program, 0:no, 1:yes
+ unsigned char ta; // traffic announcement, 0:no, 1:yes
+ unsigned char speech; // 0:music, 1:speech
+} fm_rds_tx_req;
+
+#define TX_SCAN_MAX 10
+#define TX_SCAN_MIN 1
+struct fm_tx_scan_parm {
+ uint8_t err;
+ uint8_t band; //87.6~108MHz
+ uint8_t space;
+ uint8_t hilo;
+ uint16_t freq; // start freq, if less than band min freq, then will use band min freq
+ uint8_t scandir;
+ uint16_t ScanTBL[TX_SCAN_MAX]; //need no less than the chip
+ uint16_t ScanTBLSize; //IN: desired size, OUT: scan result size
+};
+
+struct fm_gps_rtc_info {
+ int err; //error number, 0: success, other: err code
+ int retryCnt; //GPS mnl can decide retry times
+ int ageThd; //GPS 3D fix time diff threshold
+ int driftThd; //GPS RTC drift threshold
+ struct timeval tvThd; //time value diff threshold
+ int age; //GPS 3D fix time diff
+ int drift; //GPS RTC drift
+ union{
+ unsigned long stamp; //time stamp in jiffies
+ struct timeval tv; //time stamp value in RTC
+ };
+ int flag; //rw flag
+};
+
+typedef enum {
+ FM_I2S_ON = 0,
+ FM_I2S_OFF,
+ FM_I2S_STATE_ERR
+} fm_i2s_state_e;
+
+typedef enum {
+ FM_I2S_MASTER = 0,
+ FM_I2S_SLAVE,
+ FM_I2S_MODE_ERR
+} fm_i2s_mode_e;
+
+typedef enum {
+ FM_I2S_32K = 0,
+ FM_I2S_44K,
+ FM_I2S_48K,
+ FM_I2S_SR_ERR
+} fm_i2s_sample_e;
+
+struct fm_i2s_setting {
+ int onoff;
+ int mode;
+ int sample;
+};
+
+typedef enum {
+ FM_RX = 0,
+ FM_TX = 1
+} FM_PWR_T;
+
+typedef struct fm_i2s_info {
+ int status; /*0:FM_I2S_ON, 1:FM_I2S_OFF,2:error*/
+ int mode; /*0:FM_I2S_MASTER, 1:FM_I2S_SLAVE,2:error*/
+ int rate; /*0:FM_I2S_32K:32000,1:FM_I2S_44K:44100,2:FM_I2S_48K:48000,3:error*/
+} fm_i2s_info_t;
+
+typedef enum {
+ FM_AUD_ANALOG = 0,
+ FM_AUD_I2S = 1,
+ FM_AUD_MRGIF = 2,
+ FM_AUD_ERR
+} fm_audio_path_e;
+
+typedef enum {
+ FM_I2S_PAD_CONN = 0, //sco fm chip: e.g.6627
+ FM_I2S_PAD_IO = 1, //combo fm chip: e.g.6628
+ FM_I2S_PAD_ERR
+} fm_i2s_pad_sel_e;
+
+typedef struct fm_audio_info {
+ fm_audio_path_e aud_path;
+ fm_i2s_info_t i2s_info;
+ fm_i2s_pad_sel_e i2s_pad;
+} fm_audio_info_t;
+
+struct fm_cqi {
+ int ch;
+ int rssi;
+ int reserve;
+};
+
+struct fm_cqi_req {
+ uint16_t ch_num;
+ int buf_size;
+ char *cqi_buf;
+};
+
+typedef struct {
+ int freq;
+ int rssi;
+} fm_desense_check_t;
+
+typedef struct {
+ uint16_t lower; // lower band, Eg, 7600 -> 76.0Mhz
+ uint16_t upper; // upper band, Eg, 10800 -> 108.0Mhz
+ int space; // 0x1: 50KHz, 0x2: 100Khz, 0x4: 200Khz
+ int cycle; // repeat times
+} fm_full_cqi_log_t;
+
+typedef struct {
+ int which;
+ bool stat;
+} fm_status_t;
+
+// ********** ***********FM IOCTL define start *******************************
+
+#define FM_IOC_MAGIC 0xf5 // FIXME: any conflict?
+#define FM_IOCTL_POWERUP _IOWR(FM_IOC_MAGIC, 0, struct fm_tune_parm*)
+#define FM_IOCTL_POWERDOWN _IOWR(FM_IOC_MAGIC, 1, int32_t*)
+#define FM_IOCTL_TUNE _IOWR(FM_IOC_MAGIC, 2, struct fm_tune_parm*)
+#define FM_IOCTL_SEEK _IOWR(FM_IOC_MAGIC, 3, struct fm_seek_parm*)
+#define FM_IOCTL_SETVOL _IOWR(FM_IOC_MAGIC, 4, uint32_t*)
+#define FM_IOCTL_GETVOL _IOWR(FM_IOC_MAGIC, 5, uint32_t*)
+#define FM_IOCTL_MUTE _IOWR(FM_IOC_MAGIC, 6, uint32_t*)
+#define FM_IOCTL_GETRSSI _IOWR(FM_IOC_MAGIC, 7, int32_t*)
+#define FM_IOCTL_SCAN _IOWR(FM_IOC_MAGIC, 8, struct fm_scan_parm*)
+#define FM_IOCTL_STOP_SCAN _IO(FM_IOC_MAGIC, 9)
+
+//IOCTL and struct for test
+#define FM_IOCTL_GETCHIPID _IOWR(FM_IOC_MAGIC, 10, uint16_t*)
+#define FM_IOCTL_EM_TEST _IOWR(FM_IOC_MAGIC, 11, struct fm_em_parm*)
+#define FM_IOCTL_RW_REG _IOWR(FM_IOC_MAGIC, 12, struct fm_ctl_parm*)
+#define FM_IOCTL_GETMONOSTERO _IOWR(FM_IOC_MAGIC, 13, uint16_t*)
+#define FM_IOCTL_GETCURPAMD _IOWR(FM_IOC_MAGIC, 14, uint16_t*)
+#define FM_IOCTL_GETGOODBCNT _IOWR(FM_IOC_MAGIC, 15, uint16_t*)
+#define FM_IOCTL_GETBADBNT _IOWR(FM_IOC_MAGIC, 16, uint16_t*)
+#define FM_IOCTL_GETBLERRATIO _IOWR(FM_IOC_MAGIC, 17, uint16_t*)
+
+//IOCTL for RDS
+#define FM_IOCTL_RDS_ONOFF _IOWR(FM_IOC_MAGIC, 18, uint16_t*)
+#define FM_IOCTL_RDS_SUPPORT _IOWR(FM_IOC_MAGIC, 19, int32_t*)
+
+#define FM_IOCTL_POWERUP_TX _IOWR(FM_IOC_MAGIC, 20, struct fm_tune_parm*)
+#define FM_IOCTL_TUNE_TX _IOWR(FM_IOC_MAGIC, 21, struct fm_tune_parm*)
+#define FM_IOCTL_RDS_TX _IOWR(FM_IOC_MAGIC, 22, struct fm_rds_tx_parm*)
+
+#define FM_IOCTL_RDS_SIM_DATA _IOWR(FM_IOC_MAGIC, 23, uint32_t*)
+#define FM_IOCTL_IS_FM_POWERED_UP _IOWR(FM_IOC_MAGIC, 24, uint32_t*)
+
+//IOCTL for FM Tx
+#define FM_IOCTL_TX_SUPPORT _IOWR(FM_IOC_MAGIC, 25, int32_t*)
+#define FM_IOCTL_RDSTX_SUPPORT _IOWR(FM_IOC_MAGIC, 26, int32_t*)
+#define FM_IOCTL_RDSTX_ENABLE _IOWR(FM_IOC_MAGIC, 27, int32_t*)
+#define FM_IOCTL_TX_SCAN _IOWR(FM_IOC_MAGIC, 28, struct fm_tx_scan_parm*)
+
+//IOCTL for FM over BT
+#define FM_IOCTL_OVER_BT_ENABLE _IOWR(FM_IOC_MAGIC, 29, int32_t*)
+
+//IOCTL for FM ANTENNA SWITCH
+#define FM_IOCTL_ANA_SWITCH _IOWR(FM_IOC_MAGIC, 30, int32_t*)
+#define FM_IOCTL_GETCAPARRAY _IOWR(FM_IOC_MAGIC, 31, int32_t*)
+
+//IOCTL for FM compensation by GPS RTC
+#define FM_IOCTL_GPS_RTC_DRIFT _IOWR(FM_IOC_MAGIC, 32, struct fm_gps_rtc_info*)
+
+//IOCTL for FM I2S Setting
+#define FM_IOCTL_I2S_SETTING _IOWR(FM_IOC_MAGIC, 33, struct fm_i2s_setting*)
+
+#define FM_IOCTL_RDS_GROUPCNT _IOWR(FM_IOC_MAGIC, 34, struct rds_group_cnt_req*)
+#define FM_IOCTL_RDS_GET_LOG _IOWR(FM_IOC_MAGIC, 35, struct rds_raw_data*)
+
+#define FM_IOCTL_SCAN_GETRSSI _IOWR(FM_IOC_MAGIC, 36, struct fm_rssi_req*)
+#define FM_IOCTL_SETMONOSTERO _IOWR(FM_IOC_MAGIC, 37, int32_t)
+#define FM_IOCTL_RDS_BC_RST _IOWR(FM_IOC_MAGIC, 38, int32_t*)
+#define FM_IOCTL_CQI_GET _IOWR(FM_IOC_MAGIC, 39, struct fm_cqi_req*)
+#define FM_IOCTL_GET_HW_INFO _IOWR(FM_IOC_MAGIC, 40, struct fm_hw_info*)
+#define FM_IOCTL_GET_I2S_INFO _IOWR(FM_IOC_MAGIC, 41, fm_i2s_info_t*)
+#define FM_IOCTL_IS_DESE_CHAN _IOWR(FM_IOC_MAGIC, 42, int32_t*)
+#define FM_IOCTL_TOP_RDWR _IOWR(FM_IOC_MAGIC, 43, struct fm_top_rw_parm*)
+#define FM_IOCTL_HOST_RDWR _IOWR(FM_IOC_MAGIC, 44, struct fm_host_rw_parm*)
+
+#define FM_IOCTL_PRE_SEARCH _IOWR(FM_IOC_MAGIC, 45,int32_t)
+#define FM_IOCTL_RESTORE_SEARCH _IOWR(FM_IOC_MAGIC, 46,int32_t)
+
+#define FM_IOCTL_SET_SEARCH_THRESHOLD _IOWR(FM_IOC_MAGIC, 47, fm_search_threshold_t*)
+
+#define FM_IOCTL_GET_AUDIO_INFO _IOWR(FM_IOC_MAGIC, 48, fm_audio_info_t*)
+#define FM_IOCTL_FM_SET_STATUS _IOWR(FM_IOC_MAGIC, 49, fm_status_t)
+#define FM_IOCTL_FM_GET_STATUS _IOWR(FM_IOC_MAGIC, 50, fm_status_t)
+
+#define FM_IOCTL_SCAN_NEW _IOWR(FM_IOC_MAGIC, 60, struct fm_scan_t*)
+#define FM_IOCTL_SEEK_NEW _IOWR(FM_IOC_MAGIC, 61, struct fm_seek_t*)
+#define FM_IOCTL_TUNE_NEW _IOWR(FM_IOC_MAGIC, 62, struct fm_tune_t*)
+
+#define FM_IOCTL_SOFT_MUTE_TUNE _IOWR(FM_IOC_MAGIC, 63, struct fm_softmute_tune_t*)/*for soft mute tune*/
+#define FM_IOCTL_DESENSE_CHECK _IOWR(FM_IOC_MAGIC, 64, fm_desense_check_t*)
+
+//IOCTL for EM
+#define FM_IOCTL_FULL_CQI_LOG _IOWR(FM_IOC_MAGIC, 70, fm_full_cqi_log_t *)
+
+#define FM_IOCTL_DUMP_REG _IO(FM_IOC_MAGIC, 0xFF)
+
+// ********** ***********FM IOCTL define end *******************************
+
+
+enum group_idx {
+ mono = 0,
+ stereo,
+ RSSI_threshold,
+ HCC_Enable,
+ PAMD_threshold,
+ Softmute_Enable,
+ De_emphasis,
+ HL_Side,
+ Demod_BW,
+ Dynamic_Limiter,
+ Softmute_Rate,
+ AFC_Enable,
+ Softmute_Level,
+ Analog_Volume,
+ GROUP_TOTAL_NUMS
+};
+
+enum item_idx {
+ Sblend_OFF = 0,
+ Sblend_ON,
+ ITEM_TOTAL_NUMS
+};
+
+struct fm_ctl_parm {
+ uint8_t err;
+ uint8_t addr;
+ uint16_t val;
+ uint16_t rw_flag;//0:write, 1:read
+};
+
+struct fm_em_parm {
+ uint16_t group_idx;
+ uint16_t item_idx;
+ uint32_t item_value;
+};
+#endif // __FM_H__
diff --git a/kernel-headers/linux/hdmitx.h b/kernel-headers/linux/hdmitx.h
new file mode 100644
index 0000000..58103b5
--- /dev/null
+++ b/kernel-headers/linux/hdmitx.h
@@ -0,0 +1,361 @@
+// ---------------------------------------------------------------------------
+
+#ifndef HDMITX_H
+#define HDMITX_H
+
+
+#define HDMI_DEV_DRV "/dev/hdmitx"
+
+
+typedef enum
+{
+ HDMI_STATUS_OK = 0,
+ HDMI_STATUS_NOT_IMPLEMENTED,
+ HDMI_STATUS_ALREADY_SET,
+ HDMI_STATUS_ERROR,
+} HDMI_STATUS;
+
+typedef enum
+{
+ SMART_BOOK_DISCONNECTED = 0,
+ SMART_BOOK_CONNECTED,
+} SMART_BOOK_STATE;
+
+typedef enum
+{
+ HDMI_POWER_STATE_OFF = 0,
+ HDMI_POWER_STATE_ON,
+ HDMI_POWER_STATE_STANDBY,
+} HDMI_POWER_STATE;
+
+typedef enum
+{
+ HDMI_MAX_CHANNEL_2 = 0x2,
+ HDMI_MAX_CHANNEL_3 = 0x3,
+ HDMI_MAX_CHANNEL_4 = 0x4,
+ HDMI_MAX_CHANNEL_5 = 0x5,
+ HDMI_MAX_CHANNEL_6 = 0x6,
+ HDMI_MAX_CHANNEL_7 = 0x7,
+ HDMI_MAX_CHANNEL_8 = 0x8,
+}AUDIO_MAX_CHANNEL;
+
+typedef enum
+{
+ HDMI_MAX_SAMPLERATE_32 = 0x1,
+ HDMI_MAX_SAMPLERATE_44 = 0x2,
+ HDMI_MAX_SAMPLERATE_48 = 0x3,
+ HDMI_MAX_SAMPLERATE_96 = 0x4,
+ HDMI_MAX_SAMPLERATE_192 = 0x5,
+}AUDIO_MAX_SAMPLERATE;
+
+typedef enum
+{
+ HDMI_MAX_BITWIDTH_16 = 0x1,
+ HDMI_MAX_BITWIDTH_24 = 0x2,
+}AUDIO_MAX_BITWIDTH;
+
+typedef enum
+{
+ HDMI_SCALE_ADJUSTMENT_SUPPORT = 0x01,
+ HDMI_ONE_RDMA_LIMITATION = 0x02,
+ HDMI_PHONE_GPIO_REUSAGE = 0x04,
+} HDMI_CAPABILITY;
+
+typedef enum
+{
+ HDMI_TO_TV = 0x0,
+ HDMI_TO_SMB,
+} hdmi_device_type;
+
+typedef enum
+{
+ HDMI_IS_DISCONNECTED = 0,
+ HDMI_IS_CONNECTED = 1,
+ HDMI_IS_RES_CHG = 0x11,
+} hdmi_connect_status;
+
+#define MAKE_MTK_HDMI_FORMAT_ID(id, bpp) (((id) << 8) | (bpp))
+typedef enum
+{
+ MTK_HDMI_FORMAT_UNKNOWN = 0,
+
+ MTK_HDMI_FORMAT_RGB565 = MAKE_MTK_HDMI_FORMAT_ID(1, 2),
+ MTK_HDMI_FORMAT_RGB888 = MAKE_MTK_HDMI_FORMAT_ID(2, 3),
+ MTK_HDMI_FORMAT_BGR888 = MAKE_MTK_HDMI_FORMAT_ID(3, 3),
+ MTK_HDMI_FORMAT_ARGB8888 = MAKE_MTK_HDMI_FORMAT_ID(4, 4),
+ MTK_HDMI_FORMAT_ABGR8888 = MAKE_MTK_HDMI_FORMAT_ID(5, 4),
+ MTK_HDMI_FORMAT_YUV422 = MAKE_MTK_HDMI_FORMAT_ID(6, 2),
+ MTK_HDMI_FORMAT_XRGB8888 = MAKE_MTK_HDMI_FORMAT_ID(7, 4),
+ MTK_HDMI_FORMAT_XBGR8888 = MAKE_MTK_HDMI_FORMAT_ID(8, 4),
+ MTK_HDMI_FORMAT_BPP_MASK = 0xFF,
+} MTK_HDMI_FORMAT;
+
+typedef struct
+{
+ bool is_audio_enabled;
+ bool is_video_enabled;
+} hdmi_device_status;
+
+typedef struct
+{
+ void *src_base_addr;
+ void *src_phy_addr;
+ int src_fmt;
+ unsigned int src_pitch;
+ unsigned int src_offset_x, src_offset_y;
+ unsigned int src_width, src_height;
+
+ int next_buff_idx;
+ int identity;
+ int connected_type;
+ unsigned int security;
+
+} hdmi_video_buffer_info;
+
+
+typedef struct
+{
+ // Input
+ int ion_fd;
+ // Output
+ unsigned int index; //fence count
+ int fence_fd; //fence fd
+} hdmi_buffer_info;
+
+#define MTK_HDMI_NO_FENCE_FD ((int)(-1)) //((int)(~0U>>1))
+#define MTK_HDMI_NO_ION_FD ((int)(-1)) //((int)(~0U>>1))
+
+typedef struct
+{
+ unsigned int u4Addr;
+ unsigned int u4Data;
+} hdmi_device_write;
+
+typedef struct
+{
+ unsigned int u4Data1;
+ unsigned int u4Data2;
+} hdmi_para_setting;
+
+typedef struct
+{
+ unsigned char u1Hdcpkey[287];
+} hdmi_hdcp_key;
+
+typedef struct
+{
+ unsigned char u1Hdcpkey[384];
+} hdmi_hdcp_drmkey;
+
+typedef struct
+{
+ unsigned char u1sendsltdata[15];
+} send_slt_data;
+
+typedef struct _HDMI_EDID_T
+{
+ unsigned int ui4_ntsc_resolution;//use EDID_VIDEO_RES_T, there are many resolution
+ unsigned int ui4_pal_resolution;// use EDID_VIDEO_RES_T
+ unsigned int ui4_sink_native_ntsc_resolution;//use EDID_VIDEO_RES_T, only one NTSC resolution, Zero means none native NTSC resolution is avaiable
+ unsigned int ui4_sink_native_pal_resolution; //use EDID_VIDEO_RES_T, only one resolution, Zero means none native PAL resolution is avaiable
+ unsigned int ui4_sink_cea_ntsc_resolution;//use EDID_VIDEO_RES_T
+ unsigned int ui4_sink_cea_pal_resolution;//use EDID_VIDEO_RES_T
+ unsigned int ui4_sink_dtd_ntsc_resolution;//use EDID_VIDEO_RES_T
+ unsigned int ui4_sink_dtd_pal_resolution;//use EDID_VIDEO_RES_T
+ unsigned int ui4_sink_1st_dtd_ntsc_resolution;//use EDID_VIDEO_RES_T
+ unsigned int ui4_sink_1st_dtd_pal_resolution;//use EDID_VIDEO_RES_T
+ unsigned short ui2_sink_colorimetry;//use EDID_VIDEO_COLORIMETRY_T
+ unsigned char ui1_sink_rgb_color_bit;//color bit for RGB
+ unsigned char ui1_sink_ycbcr_color_bit; // color bit for YCbCr
+ unsigned short ui2_sink_aud_dec;// use EDID_AUDIO_DECODER_T
+ unsigned char ui1_sink_is_plug_in;//1: Plug in 0:Plug Out
+ unsigned int ui4_hdmi_pcm_ch_type;//use EDID_A_FMT_CH_TYPE
+ unsigned int ui4_hdmi_pcm_ch3ch4ch5ch7_type;//use EDID_A_FMT_CH_TYPE1
+ unsigned int ui4_dac_pcm_ch_type;//use EDID_A_FMT_CH_TYPE
+ unsigned char ui1_sink_i_latency_present;
+ unsigned char ui1_sink_p_audio_latency;
+ unsigned char ui1_sink_p_video_latency;
+ unsigned char ui1_sink_i_audio_latency;
+ unsigned char ui1_sink_i_video_latency;
+ unsigned char ui1ExtEdid_Revision;
+ unsigned char ui1Edid_Version;
+ unsigned char ui1Edid_Revision;
+ unsigned char ui1_Display_Horizontal_Size;
+ unsigned char ui1_Display_Vertical_Size;
+ unsigned int ui4_ID_Serial_Number;
+ unsigned int ui4_sink_cea_3D_resolution;
+ unsigned char ui1_sink_support_ai;//0: not support AI, 1:support AI
+ unsigned short ui2_sink_cec_address;
+ unsigned short ui1_sink_max_tmds_clock;
+ unsigned short ui2_sink_3D_structure;
+ unsigned int ui4_sink_cea_FP_SUP_3D_resolution;
+ unsigned int ui4_sink_cea_TOB_SUP_3D_resolution;
+ unsigned int ui4_sink_cea_SBS_SUP_3D_resolution;
+ unsigned short ui2_sink_ID_manufacturer_name;//(08H~09H)
+ unsigned short ui2_sink_ID_product_code; //(0aH~0bH)
+ unsigned int ui4_sink_ID_serial_number; //(0cH~0fH)
+ unsigned char ui1_sink_week_of_manufacture; //(10H)
+ unsigned char ui1_sink_year_of_manufacture; //(11H) base on year 1990
+} HDMI_EDID_T;
+
+typedef struct
+{
+ unsigned int ui4_sink_FP_SUP_3D_resolution;
+ unsigned int ui4_sink_TOB_SUP_3D_resolution;
+ unsigned int ui4_sink_SBS_SUP_3D_resolution;
+} MHL_3D_SUPP_T;
+
+typedef struct
+{
+ unsigned char ui1_la_num;
+ unsigned char e_la[3];
+ unsigned short ui2_pa;
+ unsigned short h_cecm_svc;
+} CEC_DRV_ADDR_CFG;
+
+typedef struct
+{
+ unsigned char destination : 4;
+ unsigned char initiator : 4;
+} CEC_HEADER_BLOCK_IO;
+
+typedef struct
+{
+ CEC_HEADER_BLOCK_IO header;
+ unsigned char opcode;
+ unsigned char operand[15];
+} CEC_FRAME_BLOCK_IO;
+
+typedef struct
+{
+ unsigned char size;
+ unsigned char sendidx;
+ unsigned char reTXcnt;
+ void *txtag;
+ CEC_FRAME_BLOCK_IO blocks;
+} CEC_FRAME_DESCRIPTION_IO;
+
+typedef struct _CEC_FRAME_INFO
+{
+ unsigned char ui1_init_addr;
+ unsigned char ui1_dest_addr;
+ unsigned short ui2_opcode;
+ unsigned char aui1_operand[14];
+ unsigned int z_operand_size;
+} CEC_FRAME_INFO;
+
+typedef struct _CEC_SEND_MSG
+{
+ CEC_FRAME_INFO t_frame_info;
+ unsigned char b_enqueue_ok;
+} CEC_SEND_MSG;
+
+typedef struct
+{
+ unsigned char ui1_la;
+ unsigned short ui2_pa;
+} CEC_ADDRESS_IO;
+
+typedef struct
+{
+ unsigned char u1Size;
+ unsigned char au1Data[14];
+} CEC_GETSLT_DATA;
+
+typedef struct
+{
+ unsigned int u1adress;
+ unsigned int pu1Data;
+} READ_REG_VALUE;
+
+typedef struct
+{
+ unsigned char e_hdmi_aud_in;
+ unsigned char e_iec_frame;
+ unsigned char e_hdmi_fs;
+ unsigned char e_aud_code;
+ unsigned char u1Aud_Input_Chan_Cnt;
+ unsigned char e_I2sFmt;
+ unsigned char u1HdmiI2sMclk;
+ unsigned char bhdmi_LCh_status[5];
+ unsigned char bhdmi_RCh_status[5];
+} HDMITX_AUDIO_PARA;
+
+
+#define HDMI_IOW(num, dtype) _IOW('H', num, dtype)
+#define HDMI_IOR(num, dtype) _IOR('H', num, dtype)
+#define HDMI_IOWR(num, dtype) _IOWR('H', num, dtype)
+#define HDMI_IO(num) _IO('H', num)
+
+#define MTK_HDMI_AUDIO_VIDEO_ENABLE HDMI_IO(1)
+#define MTK_HDMI_AUDIO_ENABLE HDMI_IO(2)
+#define MTK_HDMI_VIDEO_ENABLE HDMI_IO(3)
+#define MTK_HDMI_GET_CAPABILITY HDMI_IOWR(4, HDMI_CAPABILITY)
+#define MTK_HDMI_GET_DEVICE_STATUS HDMI_IOWR(5, hdmi_device_status)
+#define MTK_HDMI_VIDEO_CONFIG HDMI_IOWR(6, int)
+#define MTK_HDMI_AUDIO_CONFIG HDMI_IOWR(7, int)
+#define MTK_HDMI_FORCE_FULLSCREEN_ON HDMI_IOWR(8, int)
+#define MTK_HDMI_FORCE_FULLSCREEN_OFF HDMI_IOWR(9, int)
+#define MTK_HDMI_IPO_POWEROFF HDMI_IOWR(10, int)
+#define MTK_HDMI_IPO_POWERON HDMI_IOWR(11, int)
+#define MTK_HDMI_POWER_ENABLE HDMI_IOW(12, int)
+#define MTK_HDMI_PORTRAIT_ENABLE HDMI_IOW(13, int)
+#define MTK_HDMI_FORCE_OPEN HDMI_IOWR(14, int)
+#define MTK_HDMI_FORCE_CLOSE HDMI_IOWR(15, int)
+#define MTK_HDMI_IS_FORCE_AWAKE HDMI_IOWR(16, int)
+
+#define MTK_HDMI_POST_VIDEO_BUFFER HDMI_IOW(20, hdmi_video_buffer_info)
+#define MTK_HDMI_AUDIO_SETTING HDMI_IOWR(21, HDMITX_AUDIO_PARA)
+
+
+#define MTK_HDMI_FACTORY_MODE_ENABLE HDMI_IOW(30, int)
+#define MTK_HDMI_FACTORY_GET_STATUS HDMI_IOWR(31, int)
+#define MTK_HDMI_FACTORY_DPI_TEST HDMI_IOWR(32, int)
+
+#define MTK_HDMI_USBOTG_STATUS HDMI_IOWR(33, int)
+#define MTK_HDMI_GET_DRM_ENABLE HDMI_IOWR(34, int)
+
+#define MTK_HDMI_GET_DEV_INFO HDMI_IOWR(35, mtk_dispif_info_t)
+#define MTK_HDMI_PREPARE_BUFFER HDMI_IOW(36, hdmi_buffer_info)
+#define MTK_HDMI_SCREEN_CAPTURE HDMI_IOW(37, unsigned long)
+
+#define MTK_HDMI_WRITE_DEV HDMI_IOWR(52, hdmi_device_write)
+#define MTK_HDMI_READ_DEV HDMI_IOWR(53, unsigned int)
+#define MTK_HDMI_ENABLE_LOG HDMI_IOWR(54, unsigned int)
+#define MTK_HDMI_CHECK_EDID HDMI_IOWR(55, unsigned int)
+#define MTK_HDMI_INFOFRAME_SETTING HDMI_IOWR(56, hdmi_para_setting)
+#define MTK_HDMI_COLOR_DEEP HDMI_IOWR(57, hdmi_para_setting)
+#define MTK_HDMI_ENABLE_HDCP HDMI_IOWR(58, unsigned int)
+#define MTK_HDMI_STATUS HDMI_IOWR(59, unsigned int)
+#define MTK_HDMI_HDCP_KEY HDMI_IOWR(60, hdmi_hdcp_key)
+#define MTK_HDMI_GET_EDID HDMI_IOWR(61, HDMI_EDID_T)
+#define MTK_HDMI_SETLA HDMI_IOWR(62, CEC_DRV_ADDR_CFG)
+#define MTK_HDMI_GET_CECCMD HDMI_IOWR(63, CEC_FRAME_DESCRIPTION_IO)
+#define MTK_HDMI_SET_CECCMD HDMI_IOWR(64, CEC_SEND_MSG)
+#define MTK_HDMI_CEC_ENABLE HDMI_IOWR(65, unsigned int)
+#define MTK_HDMI_GET_CECADDR HDMI_IOWR(66, CEC_ADDRESS_IO)
+#define MTK_HDMI_CECRX_MODE HDMI_IOWR(67, unsigned int)
+#define MTK_HDMI_SENDSLTDATA HDMI_IOWR(68, send_slt_data)
+#define MTK_HDMI_GET_SLTDATA HDMI_IOWR(69, CEC_GETSLT_DATA)
+#define MTK_HDMI_VIDEO_MUTE HDMI_IOWR(70, int)
+
+#define MTK_HDMI_READ HDMI_IOWR(81, unsigned int)
+#define MTK_HDMI_WRITE HDMI_IOWR(82, unsigned int)
+#define MTK_HDMI_CMD HDMI_IOWR(83, unsigned int)
+#define MTK_HDMI_DUMP HDMI_IOWR(84, unsigned int)
+#define MTK_HDMI_DUMP6397 HDMI_IOWR(85, unsigned int)
+#define MTK_HDMI_DUMP6397_W HDMI_IOWR(86, unsigned int)
+#define MTK_HDMI_CBUS_STATUS HDMI_IOWR(87, unsigned int)
+#define MTK_HDMI_CONNECT_STATUS HDMI_IOWR(88, unsigned int)
+#define MTK_HDMI_DUMP6397_R HDMI_IOWR(89, unsigned int)
+#define MTK_MHL_GET_DCAP HDMI_IOWR(90, unsigned int)
+#define MTK_MHL_GET_3DINFO HDMI_IOWR(91, unsigned int)
+#define MTK_HDMI_HDCP HDMI_IOWR(92, unsigned int)
+#define MTK_HDMI_AUDIO_FORMAT HDMI_IOWR(93, unsigned int)
+
+#define MTK_HDMI_FACTORY_CHIP_INIT HDMI_IOWR(94, int)
+#define MTK_HDMI_FACTORY_JUDGE_CALLBACK HDMI_IOWR(95, int)
+#define MTK_HDMI_FACTORY_START_DPI_AND_CONFIG HDMI_IOWR(96, int)
+#define MTK_HDMI_FACTORY_DPI_STOP_AND_POWER_OFF HDMI_IOWR(97, int)
+
+#endif
diff --git a/kernel-headers/linux/hwmsensor.h b/kernel-headers/linux/hwmsensor.h
new file mode 100644
index 0000000..c14611d
--- /dev/null
+++ b/kernel-headers/linux/hwmsensor.h
@@ -0,0 +1,308 @@
+/* alps
+ *
+ * (C) Copyright 2009
+ * MediaTek <www.MediaTek.com>
+ *
+ * MT6516 Sensor IOCTL & data structure
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __HWMSENSOR_H__
+#define __HWMSENSOR_H__
+
+#include <linux/ioctl.h>
+
+#define SENSOR_TYPE_ACCELEROMETER 1
+#define SENSOR_TYPE_MAGNETIC_FIELD 2
+#define SENSOR_TYPE_ORIENTATION 3
+#define SENSOR_TYPE_GYROSCOPE 4
+#define SENSOR_TYPE_LIGHT 5
+#define SENSOR_TYPE_PRESSURE 6
+#define SENSOR_TYPE_TEMPERATURE 7
+#define SENSOR_TYPE_PROXIMITY 8
+#define SENSOR_TYPE_GRAVITY 9
+#define SENSOR_TYPE_LINEAR_ACCELERATION 10
+#define SENSOR_TYPE_ROTATION_VECTOR 11
+#define SENSOR_TYPE_HUMIDITY 12
+#define SENSOR_TYPE_GAME_ROTATION_VECTOR 15
+#define SENSOR_TYPE_SIGNIFICANT_MOTION 17
+#define SENSOR_TYPE_STEP_DETECTOR 18
+#define SENSOR_TYPE_STEP_COUNTER 19
+
+#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR 20
+
+#define SENSOR_TYPE_HEART_RATE 21
+#define SENSOR_TYPE_TILT_DETECTOR 22
+#define SENSOR_TYPE_WAKE_GESTURE 23
+#define SENSOR_TYPE_GLANCE_GESTURE 24
+#define SENSOR_TYPE_PICK_UP_GESTURE 25
+
+#define SENSOR_TYPE_PEDOMETER (26)
+#define SENSOR_STRING_TYPE_PEDOMETER "android.sensor.pedometer"
+#define SENSOR_TYPE_IN_POCKET (27)
+#define SENSOR_STRING_TYPE_IN_POCKET "android.sensor.in_pocket"
+#define SENSOR_TYPE_ACTIVITY (28)
+#define SENSOR_STRING_TYPE_ACTIVITY "android.sensor.activity"
+#define SENSOR_TYPE_FACE_DOWN (29)
+#define SENSOR_STRING_TYPE_FACE_DOWN "android.sensor.face_down"
+#define SENSOR_TYPE_SHAKE (30)
+#define SENSOR_STRING_TYPE_SHAKE "android.sensor.shake"
+#define SENSOR_TYPE_BRINGTOSEE (31)
+#define SENSOR_STRING_TYPE_BRINGTOSEE "android.sensor.bring_to_see"
+
+/*---------------------------------------------------------------------------*/
+#define ID_BASE 0
+#define ID_ORIENTATION (ID_BASE+SENSOR_TYPE_ORIENTATION-1)
+#define ID_MAGNETIC (ID_BASE+SENSOR_TYPE_MAGNETIC_FIELD-1)
+#define ID_ACCELEROMETER (ID_BASE+SENSOR_TYPE_ACCELEROMETER-1)
+#define ID_LINEAR_ACCELERATION (ID_BASE+SENSOR_TYPE_LINEAR_ACCELERATION-1)
+#define ID_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_ROTATION_VECTOR-1)
+#define ID_GAME_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_GAME_ROTATION_VECTOR-1)
+#define ID_GRAVITY (ID_BASE+SENSOR_TYPE_GRAVITY-1)
+#define ID_GYROSCOPE (ID_BASE+SENSOR_TYPE_GYROSCOPE-1)
+#define ID_PROXIMITY (ID_BASE+SENSOR_TYPE_PROXIMITY-1)
+#define ID_LIGHT (ID_BASE+SENSOR_TYPE_LIGHT-1)
+#define ID_PRESSURE (ID_BASE+SENSOR_TYPE_PRESSURE-1)
+#define ID_TEMPRERATURE (ID_BASE+SENSOR_TYPE_TEMPERATURE-1)
+#define ID_HUMIDITY (ID_BASE+SENSOR_TYPE_HUMIDITY-1)
+#define ID_SIGNIFICANT_MOTION (ID_BASE+SENSOR_TYPE_SIGNIFICANT_MOTION-1)
+#define ID_STEP_DETECTOR (ID_BASE+SENSOR_TYPE_STEP_DETECTOR-1)
+#define ID_STEP_COUNTER (ID_BASE+SENSOR_TYPE_STEP_COUNTER-1)
+#define ID_GEOMAGNETIC_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR-1)
+#define ID_HEART_RATE (ID_BASE+SENSOR_TYPE_HEART_RATE-1)
+#define ID_TILT_DETECTOR (ID_BASE+SENSOR_TYPE_TILT_DETECTOR-1)
+#define ID_WAKE_GESTURE (ID_BASE+SENSOR_TYPE_WAKE_GESTURE-1)
+#define ID_GLANCE_GESTURE (ID_BASE+SENSOR_TYPE_GLANCE_GESTURE-1)
+#define ID_PICK_UP_GESTURE (ID_BASE+SENSOR_TYPE_PICK_UP_GESTURE-1)
+#define ID_PEDOMETER (ID_BASE+SENSOR_TYPE_PEDOMETER-1)
+#define ID_ACTIVITY (ID_BASE+SENSOR_TYPE_ACTIVITY-1)
+#define ID_IN_POCKET (ID_BASE+SENSOR_TYPE_IN_POCKET-1)
+#define ID_FACE_DOWN (ID_BASE+SENSOR_TYPE_FACE_DOWN-1)
+#define ID_SHAKE (ID_BASE+SENSOR_TYPE_SHAKE-1)
+#define ID_BRINGTOSEE (ID_BASE+SENSOR_TYPE_BRINGTOSEE-1)
+#define ID_SENSOR_MAX_HANDLE (ID_BASE+SENSOR_TYPE_BRINGTOSEE)
+#define ID_NONE (ID_SENSOR_MAX_HANDLE+1)
+
+#define ID_OFFSET (1)
+
+#define MAX_ANDROID_SENSOR_NUM (ID_SENSOR_MAX_HANDLE +1)
+#define MAX_SENSOR_DATA_UPDATE_ONCE (20)
+
+/*---------------------------------------------------------------------------*/
+#define SENSOR_ORIENTATION (1 << ID_ORIENTATION)
+#define SENSOR_MAGNETIC (1 << ID_MAGNETIC)
+#define SENSOR_ACCELEROMETER (1 << ID_ACCELEROMETER)
+#define SENSOR_GYROSCOPE (1 << ID_GYROSCOPE)
+#define SENSOR_PROXIMITY (1 << ID_PROXIMITY)
+#define SENSOR_LIGHT (1 << ID_LIGHT)
+#define SENSOR_PRESSURE (1 << ID_PRESSURE)
+#define SENSOR_TEMPRERATURE (1 << ID_TEMPRERATURE)
+#define SENSOR_GRAVITY (1 << ID_GRAVITY)
+#define SENSOR_LINEAR_ACCELERATION (1 << ID_LINEAR_ACCELERATION)
+#define SENSOR_ROTATION_VECTOR (1 << ID_ROTATION_VECTOR)
+
+#define SENSOR_SIGNIFICANT_MOTION (1 << ID_SIGNIFICANT_MOTION)
+#define SENSOR_STEP_DETECTOR (1 << ID_STEP_DETECTOR)
+#define SENSOR_STEP_COUNTER (1 << ID_STEP_COUNTER)
+#define SENSOR_GEOMAGNETIC_ROTATION_VECTOR (1 << ID_GEOMAGNETIC_ROTATION_VECTOR)
+
+#define SENSOR_HEART_RATE (1 << ID_HEART_RATE)
+#define SENSOR_TILT_DETECTOR (1 << ID_TILT_DETECTOR)
+#define SENSOR_WAKE_GESTURE (1 << ID_WAKE_GESTURE)
+#define SENSOR_GLANCE_GESTURE (1 << ID_GLANCE_GESTURE)
+#define SENSOR_PICK_UP_GESTURE (1 << ID_PICK_UP_GESTURE)
+
+#define SENSOR_PEDOMETER (1 << ID_PEDOMETER)
+#define SENSOR_IN_POCKET (1 << ID_IN_POCKET)
+#define SENSOR_ACTIVITY (1 << ID_ACTIVITY)
+#define SENSOR_FACE_DOWN (1 << ID_FACE_DOWN)
+#define SENSOR_SHAKE (1 << ID_SHAKE)
+#define SENSOR_BRINGTOSEE (1 << ID_BRINGTOSEE)
+
+/*----------------------------------------------------------------------------*/
+#define HWM_INPUTDEV_NAME "hwmdata"
+#define HWM_SENSOR_DEV_NAME "hwmsensor"
+#define HWM_SENSOR_DEV "/dev/hwmsensor"
+#define C_MAX_HWMSEN_EVENT_NUM 4
+/*----------------------------------------------------------------------------*/
+#define ACC_PL_DEV_NAME "m_acc_pl"
+#define ACC_INPUTDEV_NAME "m_acc_input"
+#define ACC_MISC_DEV_NAME "m_acc_misc"
+#define MAG_PL_DEV_NAME "m_mag_pl"
+#define MAG_INPUTDEV_NAME "m_mag_input"
+#define MAG_MISC_DEV_NAME "m_mag_misc"
+#define GYRO_PL_DEV_NAME "m_gyro_pl"
+#define GYRO_INPUTDEV_NAME "m_gyro_input"
+#define GYRO_MISC_DEV_NAME "m_gyro_misc"
+#define ALSPS_PL_DEV_NAME "m_alsps_pl"
+#define ALSPS_INPUTDEV_NAME "m_alsps_input"
+#define ALSPS_MISC_DEV_NAME "m_alsps_misc"
+#define BARO_PL_DEV_NAME "m_baro_pl"
+#define BARO_INPUTDEV_NAME "m_baro_input"
+#define BARO_MISC_DEV_NAME "m_baro_misc"
+
+#define STEP_C_PL_DEV_NAME "m_step_c_pl"
+#define STEP_C_INPUTDEV_NAME "m_step_c_input"
+#define STEP_C_MISC_DEV_NAME "m_step_c_misc"
+
+#define INPK_PL_DEV_NAME "m_inpk_pl"
+#define INPK_INPUTDEV_NAME "m_inpk_input"
+#define INPK_MISC_DEV_NAME "m_inpk_misc"
+
+#define SHK_PL_DEV_NAME "m_shk_pl"
+#define SHK_INPUTDEV_NAME "m_shk_input"
+#define SHK_MISC_DEV_NAME "m_shk_misc"
+
+#define FDN_PL_DEV_NAME "m_fdn_pl"
+#define FDN_INPUTDEV_NAME "m_fdn_input"
+#define FDN_MISC_DEV_NAME "m_fdn_misc"
+
+#define PKUP_PL_DEV_NAME "m_pkup_pl"
+#define PKUP_INPUTDEV_NAME "m_pkup_input"
+#define PKUP_MISC_DEV_NAME "m_pkup_misc"
+
+#define ACT_PL_DEV_NAME "m_act_pl"
+#define ACT_INPUTDEV_NAME "m_act_input"
+#define ACT_MISC_DEV_NAME "m_act_misc"
+
+#define PDR_PL_DEV_NAME "m_pdr_pl"
+#define PDR_INPUTDEV_NAME "m_pdr_input"
+#define PDR_MISC_DEV_NAME "m_pdr_misc"
+
+#define HRM_PL_DEV_NAME "m_hrm_pl"
+#define HRM_INPUTDEV_NAME "m_hrm_input"
+#define HRM_MISC_DEV_NAME "m_hrm_misc"
+
+#define TILT_PL_DEV_NAME "m_tilt_pl"
+#define TILT_INPUTDEV_NAME "m_tilt_input"
+#define TILT_MISC_DEV_NAME "m_tilt_misc"
+
+#define WAG_PL_DEV_NAME "m_wag_pl"
+#define WAG_INPUTDEV_NAME "m_wag_input"
+#define WAG_MISC_DEV_NAME "m_wag_misc"
+
+#define GLG_PL_DEV_NAME "m_glg_pl"
+#define GLG_INPUTDEV_NAME "m_glg_input"
+#define GLG_MISC_DEV_NAME "m_glg_misc"
+
+#define TEMP_PL_DEV_NAME "m_temp_pl"
+#define TEMP_INPUTDEV_NAME "m_temp_input"
+#define TEMP_MISC_DEV_NAME "m_temp_misc"
+
+#define BATCH_PL_DEV_NAME "m_batch_pl"
+#define BATCH_INPUTDEV_NAME "m_batch_input"
+#define BATCH_MISC_DEV_NAME "m_batch_misc"
+
+#define BTS_PL_DEV_NAME "m_bts_pl"
+#define BTS_INPUTDEV_NAME "m_bts_input"
+#define BTS_MISC_DEV_NAME "m_bts_misc"
+
+#define GRV_PL_DEV_NAME "m_grv_pl"
+#define GRV_INPUTDEV_NAME "m_grv_input"
+#define GRV_MISC_DEV_NAME "m_grv_misc"
+
+#define GMRV_PL_DEV_NAME "m_gmrv_pl"
+#define GMRV_INPUTDEV_NAME "m_gmrv_input"
+#define GMRV_MISC_DEV_NAME "m_gmrv_misc"
+
+#define GRAV_PL_DEV_NAME "m_grav_pl"
+#define GRAV_INPUTDEV_NAME "m_grav_input"
+#define GRAV_MISC_DEV_NAME "m_grav_misc"
+
+#define LA_PL_DEV_NAME "m_la_pl"
+#define LA_INPUTDEV_NAME "m_la_input"
+#define LA_MISC_DEV_NAME "m_la_misc"
+
+#define RV_PL_DEV_NAME "m_rv_pl"
+#define RV_INPUTDEV_NAME "m_rv_input"
+#define RV_MISC_DEV_NAME "m_rv_misc"
+
+#define EVENT_TYPE_SENSOR 0x01
+#define EVENT_TYPE_SENSOR_EXT 0x02
+#define EVENT_SENSOR_ACCELERATION SENSOR_ACCELEROMETER
+#define EVENT_SENSOR_MAGNETIC SENSOR_MAGNETIC
+#define EVENT_SENSOR_ORIENTATION SENSOR_ORIENTATION
+#define EVENT_SENSOR_GYROSCOPE SENSOR_GYROSCOPE
+#define EVENT_SENSOR_LIGHT SENSOR_LIGHT
+#define EVENT_SENSOR_PRESSURE SENSOR_PRESSURE
+#define EVENT_SENSOR_TEMPERATURE SENSOR_TEMPRERATURE
+#define EVENT_SENSOR_PROXIMITY SENSOR_PROXIMITY
+#define EVENT_SENSOR_GRAVITY SENSOR_PRESSURE
+#define EVENT_SENSOR_LINEAR_ACCELERATION SENSOR_TEMPRERATURE
+#define EVENT_SENSOR_ROTATION_VECTOR SENSOR_PROXIMITY
+/*-----------------------------------------------------------------------------*/
+
+enum {
+ HWM_MODE_DISABLE = 0,
+ HWM_MODE_ENABLE = 1,
+};
+
+/*------------sensors data----------------------------------------------------*/
+typedef struct {
+ /* sensor identifier */
+ int sensor;
+ /* sensor values */
+ int values[6];
+ /* sensor values divide */
+ uint32_t value_divide;
+ /* sensor accuracy*/
+ int8_t status;
+ /* whether updata? */
+ int update;
+ /* time is in nanosecond */
+ int64_t time;
+
+ uint32_t reserved;
+}hwm_sensor_data;
+
+typedef struct {
+ hwm_sensor_data data[MAX_SENSOR_DATA_UPDATE_ONCE];
+ uint64_t data_type;
+}hwm_trans_data;
+
+#define MAX_BATCH_DATA_PER_QUREY 18
+typedef struct {
+ int numOfDataReturn;
+ int numOfDataLeft;
+ hwm_sensor_data data[MAX_BATCH_DATA_PER_QUREY];
+}batch_trans_data;
+
+/*----------------------------------------------------------------------------*/
+#define HWM_IOC_MAGIC 0x91
+
+/* set delay */
+#define HWM_IO_SET_DELAY _IOW(HWM_IOC_MAGIC, 0x01, uint32_t)
+
+/* wake up */
+#define HWM_IO_SET_WAKE _IO(HWM_IOC_MAGIC, 0x02)
+
+/* Enable/Disable sensor */
+#define HWM_IO_ENABLE_SENSOR _IOW(HWM_IOC_MAGIC, 0x03, uint32_t)
+#define HWM_IO_DISABLE_SENSOR _IOW(HWM_IOC_MAGIC, 0x04, uint32_t)
+
+/* Enable/Disable sensor */
+#define HWM_IO_ENABLE_SENSOR_NODATA _IOW(HWM_IOC_MAGIC, 0x05, uint32_t)
+#define HWM_IO_DISABLE_SENSOR_NODATA _IOW(HWM_IOC_MAGIC, 0x06, uint32_t)
+/* Get sensors data */
+#define HWM_IO_GET_SENSORS_DATA _IOWR(HWM_IOC_MAGIC, 0x07, hwm_trans_data)
+
+/*----------------------------------------------------------------------------*/
+#define BATCH_IOC_MAGIC 0x92
+
+/* Get sensor data */
+#define BATCH_IO_GET_SENSORS_DATA _IOWR(BATCH_IOC_MAGIC, 0x01, batch_trans_data)
+
+#endif // __HWMSENSOR_H__
diff --git a/kernel-headers/linux/ion_debugger.h b/kernel-headers/linux/ion_debugger.h
new file mode 100644
index 0000000..e396839
--- /dev/null
+++ b/kernel-headers/linux/ion_debugger.h
@@ -0,0 +1,193 @@
+#ifndef ION_DEBUGGER_DEF
+#define ION_DEBUGGER_DEF
+#define BACKTRACE_SIZE 10
+//#include <linux/mutex.h>
+typedef enum
+{
+ ION_FUNCTION_OPEN,
+ ION_FUNCTION_CLOSE,
+ ION_FUNCTION_CREATE_CLIENT,
+ ION_FUNCTION_DESTROY_CLIENT,
+ ION_FUNCTION_ALLOC,
+ ION_FUNCTION_ALLOC_MM,
+ ION_FUNCTION_ALLOC_CONT,
+ ION_FUNCTION_FREE,
+ ION_FUNCTION_IMPORT,
+ ION_FUNCTION_MMAP,
+ ION_FUNCTION_MUNMAP,
+ ION_FUNCTION_SHARE,
+ ION_FUNCTION_SHARE_CLOSE
+}ION_FUNCTION_TYPE;
+
+typedef enum
+{
+ BUFFER_ALLOCATION_LIST,
+ BUFFER_FREE_LIST,
+ ADDRESS_ALLOCATION_LIST,
+ ADDRESS_FREE_LIST,
+ FD_ALLOCATION_LIST,
+ FD_FREE_LIST
+}ION_DEBUGGER_LIST_TYPE;
+typedef enum
+{
+ ADDRESS_USER_VIRTUAL,
+ ADDRESS_KERNEL_VIRTUAL,
+ ADDRESS_KERNEL_PHYSICAL,
+ ADDRESS_MAX
+}ION_MAPPING_ADDRESS_TYPE;
+typedef enum
+{
+ RECORD_ID,
+ RECORD_CLIENT,
+ RECORD_HANDLE,
+ RECORD_ALLOCATE_BACKTRACE_NUM,
+ RECORD_FREED_BACKTRACE_NUM,
+ RECORD_ALLOCATE_MAPPING_NUM,
+ RECORD_FREED_MAPPING_NUM,
+ RECORD_FD,
+ RECORD_ADDRESS,
+ RECORD_SIZE,
+ RECORD_NEXT
+}ION_DEBUGGDER_RECORD_DATA;
+typedef enum
+{
+ SEARCH_PID,
+ SEARCH_PID_CLIENT,
+ SEARCH_PROCESS_PID,
+ SEARCH_BUFFER,
+ SEARCH_MAX
+}ION_SEARCH_METHOD;
+typedef enum
+{
+ LIST_BUFFER,
+ LIST_PROCESS,
+ NODE_BUFFER,
+ NODE_FD,
+ NODE_CLIENT,
+ NODE_MMAP,
+ NODE_MAX
+}ION_RECORD_TYPE;
+typedef enum
+{
+ HASH_NODE_CLIENT,
+ HASH_NODE_HANDLE,
+ HASH_NODE_BUFFER,
+ HASH_NODE_USER_BACKTRACE,
+ HASH_NODE_KERNEL_BACKTRACE,
+ HASH_NODE_USER_MAPPING,
+ HASH_NODE_KERNEL_SYMBOL,
+ HASH_NODE_MAX
+}ION_HASH_NODE_TYPE;
+typedef enum
+{
+ ALLOCATE_BACKTRACE_INFO,
+ RELEASE_BACKTRACE_INFO,
+ KERNEL_BACKTRACE,
+ USER_BACKTRACE,
+ BACKTRACE_MAX
+}BACKTRACE_INFO;
+struct mapping
+{
+ char *name;
+ unsigned int address;
+ unsigned int size;
+};
+typedef struct ion_sys_record_param
+{
+ pid_t group_id;
+ pid_t pid;
+ unsigned int action;
+ unsigned int address_type;
+ unsigned int address;
+ unsigned int length;
+ unsigned int backtrace[BACKTRACE_SIZE];
+ unsigned int kernel_symbol[BACKTRACE_SIZE];
+ struct mapping mapping_record[BACKTRACE_SIZE];
+ unsigned int backtrace_num;
+ struct ion_handle *handle;
+ struct ion_client *client;
+ struct ion_buffer *buffer;
+ int fd;
+}ion_sys_record_t;
+
+typedef struct ion_record_ID
+{
+ pid_t pid;
+ pid_t group_pid;
+ unsigned int client_address;
+ struct ion_client *client;
+ union{
+ struct ion_buffer_record *buffer;
+ struct ion_process_record *process_record;
+};
+}ion_record_ID_t;
+typedef struct ion_record_basic_info
+{
+ struct ion_record_ID recordID;
+ unsigned int record_type;
+ unsigned int from_kernel;
+ unsigned int allocate_backtrace_type;
+ unsigned int *allocate_backtrace;
+ unsigned int *allocate_map;
+ unsigned int release_backtrace_type;
+ unsigned int *release_backtrace;
+ unsigned int *release_map;
+}ion_record_basic_info_t;
+typedef struct ion_buffer_usage_record
+{
+ struct ion_buffer_usage_record *next;
+ struct ion_record_basic_info tracking_info;
+ struct ion_handle *handle;
+ unsigned int function_type;
+}ion_buffer_usage_record_t;
+typedef struct ion_address_usage_record
+{
+ struct ion_address_usage_record *next;
+ struct ion_record_basic_info tracking_info;
+ unsigned int address_type;
+ unsigned int mapping_address;
+ unsigned int size;
+ int fd;
+ struct ion_buffer *buffer;
+}ion_address_usage_record_t;
+typedef struct ion_fd_usage_record
+{
+ struct ion_fd_usage_reocrd *next;
+ struct ion_record_basic_info tracking_info;
+ int fd;
+ struct ion_handle *handle;
+ struct ion_buffer *buffer;
+}ion_fd_usage_record_t;
+
+typedef struct ion_client_usage_record
+{
+ struct ion_client_usage_recrod *next;
+ struct ion_record_basic_info tracking_info;
+ int fd;
+}ion_client_usage_record_t;
+#if 0
+struct ion_buffer_record
+{
+ struct ion_buffer_record *next;
+ struct ion_buffer *buffer;
+ unsigned int heap_type;
+ union{
+ void *priv_virt;
+ unsigned long priv_phys;
+ };
+ struct ion_buffer_usage_record *buffer_using_list;
+ struct ion_buffer_usage_record *buffer_freed_list;
+ struct mutex ion_buffer_usage_mutex;
+ struct ion_address_usage_record *address_using_list;
+ struct ion_address_usage_record *address_freed_list;
+ struct mutex ion_address_usage_mutex;
+ struct ion_fd_usage_record *fd_using_list;
+ struct ion_fd_usage_record *fd_freed_list;
+ struct mutex ion_fd_usage_mutex;
+};
+extern void *ion_get_list(struct ion_buffer_record *buffer, unsigned int list_type);
+extern struct ion_buffer_usage_record *ion_get_inuse_buffer_record();
+extern struct ion_buffer_usage_record *ion_get_freed_buffer_record();
+extern unsigned int ion_get_data_from_record(void *record,unsigned int data_type);
+#endif
+#endif
diff --git a/kernel-headers/linux/ion_drv.h b/kernel-headers/linux/ion_drv.h
new file mode 100644
index 0000000..970d0ff
--- /dev/null
+++ b/kernel-headers/linux/ion_drv.h
@@ -0,0 +1,169 @@
+#ifndef __ION_DRV_H__
+#define __ION_DRV_H__
+#include <linux/ion.h>
+
+#define BACKTRACE_SIZE 10
+
+/* Structure definitions */
+
+typedef enum {
+ ION_CMD_SYSTEM,
+ ION_CMD_MULTIMEDIA,
+} ION_CMDS;
+
+typedef enum {
+ ION_MM_CONFIG_BUFFER,
+ ION_MM_SET_DEBUG_INFO,
+ ION_MM_GET_DEBUG_INFO,
+ ION_MM_SET_SF_BUF_INFO,
+ ION_MM_GET_SF_BUF_INFO
+} ION_MM_CMDS;
+
+typedef enum {
+ ION_SYS_CACHE_SYNC,
+ ION_SYS_GET_PHYS,
+ ION_SYS_GET_CLIENT,
+ ION_SYS_SET_HANDLE_BACKTRACE,
+ ION_SYS_SET_CLIENT_NAME,
+ ION_SYS_DMA_OP,
+} ION_SYS_CMDS;
+
+typedef enum {
+ ION_CACHE_CLEAN_BY_RANGE,
+ ION_CACHE_INVALID_BY_RANGE,
+ ION_CACHE_FLUSH_BY_RANGE,
+ ION_CACHE_CLEAN_BY_RANGE_USE_VA,
+ ION_CACHE_INVALID_BY_RANGE_USE_VA,
+ ION_CACHE_FLUSH_BY_RANGE_USE_VA,
+ ION_CACHE_CLEAN_ALL,
+ ION_CACHE_INVALID_ALL,
+ ION_CACHE_FLUSH_ALL
+} ION_CACHE_SYNC_TYPE;
+
+typedef enum {
+ ION_ERROR_CONFIG_LOCKED = 0x10000
+} ION_ERROR_E;
+
+typedef struct ion_sys_cache_sync_param {
+ union {
+ ion_user_handle_t handle;
+ void *kernel_handle;
+ };
+ void *va;
+ unsigned int size;
+ ION_CACHE_SYNC_TYPE sync_type;
+} ion_sys_cache_sync_param_t;
+
+typedef enum {
+ ION_DMA_MAP_AREA,
+ ION_DMA_UNMAP_AREA,
+ ION_DMA_MAP_AREA_VA,
+ ION_DMA_UNMAP_AREA_VA,
+ ION_DMA_CACHE_FLUSH_ALL
+} ION_DMA_TYPE;
+
+typedef enum {
+ ION_DMA_FROM_DEVICE,
+ ION_DMA_TO_DEVICE,
+ ION_DMA_BIDIRECTIONAL,
+} ION_DMA_DIR;
+
+typedef struct ion_dma_param {
+ union {
+ ion_user_handle_t handle;
+ void *kernel_handle;
+ };
+ void *va;
+ unsigned int size;
+ ION_DMA_TYPE dma_type;
+ ION_DMA_DIR dma_dir;
+} ion_sys_dma_param_t;
+
+typedef struct ion_sys_get_phys_param {
+ union {
+ ion_user_handle_t handle;
+ void *kernel_handle;
+ };
+ unsigned int phy_addr;
+ unsigned long len;
+} ion_sys_get_phys_param_t;
+
+#define ION_MM_DBG_NAME_LEN 16
+#define ION_MM_SF_BUF_INFO_LEN 16
+
+typedef struct __ion_sys_client_name {
+ char name[ION_MM_DBG_NAME_LEN];
+} ion_sys_client_name_t;
+
+typedef struct ion_sys_get_client_param {
+ unsigned int client;
+} ion_sys_get_client_param_t;
+
+typedef struct ion_sys_record_param {
+ pid_t group_id;
+ pid_t pid;
+ unsigned int action;
+ unsigned int address_type;
+ unsigned int address;
+ unsigned int length;
+ unsigned int backtrace[BACKTRACE_SIZE];
+ unsigned int backtrace_num;
+ struct ion_handle *handle;
+ struct ion_client *client;
+ struct ion_buffer *buffer;
+ struct file *file;
+ int fd;
+} ion_sys_record_t;
+
+typedef struct ion_sys_data {
+ ION_SYS_CMDS sys_cmd;
+ union {
+ ion_sys_cache_sync_param_t cache_sync_param;
+ ion_sys_get_phys_param_t get_phys_param;
+ ion_sys_get_client_param_t get_client_param;
+ ion_sys_client_name_t client_name_param;
+ ion_sys_record_t record_param;
+ ion_sys_dma_param_t dma_param;
+ };
+} ion_sys_data_t;
+
+typedef struct ion_mm_config_buffer_param {
+ union {
+ ion_user_handle_t handle;
+ void *kernel_handle;
+ };
+ int eModuleID;
+ unsigned int security;
+ unsigned int coherent;
+} ion_mm_config_buffer_param_t;
+
+typedef struct __ion_mm_buf_debug_info {
+ union {
+ ion_user_handle_t handle;
+ void *kernel_handle;
+ };
+ char dbg_name[ION_MM_DBG_NAME_LEN];
+ unsigned int value1;
+ unsigned int value2;
+ unsigned int value3;
+ unsigned int value4;
+} ion_mm_buf_debug_info_t;
+
+typedef struct __ion_mm_sf_buf_info {
+ union {
+ ion_user_handle_t handle;
+ void *kernel_handle;
+ };
+ unsigned int info[ION_MM_SF_BUF_INFO_LEN];
+} ion_mm_sf_buf_info_t;
+
+typedef struct ion_mm_data {
+ ION_MM_CMDS mm_cmd;
+ union {
+ ion_mm_config_buffer_param_t config_buffer_param;
+ ion_mm_buf_debug_info_t buf_debug_info_param;
+ ion_mm_sf_buf_info_t sf_buf_info_param;
+ };
+} ion_mm_data_t;
+
+#endif
diff --git a/kernel-headers/linux/kpd.h b/kernel-headers/linux/kpd.h
new file mode 100644
index 0000000..7eb1728
--- /dev/null
+++ b/kernel-headers/linux/kpd.h
@@ -0,0 +1,46 @@
+#ifndef KPD_IO_H
+#define KPD_IO_H
+
+#include <linux/ioctl.h>
+
+struct kpd_ledctl {
+ int onoff;
+ int div; /* 0 ~ 15 */
+ int duty; /* 0 ~ 31 */
+};
+
+#if 0
+#define PRESS_OK_KEY _IO('k', 1)
+#define RELEASE_OK_KEY _IO('k', 2)
+#define PRESS_MENU_KEY _IO('k', 3)
+#define RELEASE_MENU_KEY _IO('k', 4)
+#define PRESS_UP_KEY _IO('k', 5)
+#define RELEASE_UP_KEY _IO('k', 6)
+#define PRESS_DOWN_KEY _IO('k', 7)
+#define RELEASE_DOWN_KEY _IO('k', 8)
+#define PRESS_LEFT_KEY _IO('k', 9)
+#define RELEASE_LEFT_KEY _IO('k', 10)
+#define PRESS_RIGHT_KEY _IO('k', 11)
+#define RELEASE_RIGHT_KEY _IO('k', 12)
+#define PRESS_HOME_KEY _IO('k', 13)
+#define RELEASE_HOME_KEY _IO('k', 14)
+#define PRESS_BACK_KEY _IO('k', 15)
+#define RELEASE_BACK_KEY _IO('k', 16)
+#define PRESS_CALL_KEY _IO('k', 17)
+#define RELEASE_CALL_KEY _IO('k', 18)
+#define PRESS_ENDCALL_KEY _IO('k', 19)
+#define RELEASE_ENDCALL_KEY _IO('k', 20)
+#define PRESS_VLUP_KEY _IO('k', 21)
+#define RELEASE_VLUP_KEY _IO('k', 22)
+#define PRESS_VLDOWN_KEY _IO('k', 23)
+#define RELEASE_VLDOWN_KEY _IO('k', 24)
+#define PRESS_FOCUS_KEY _IO('k', 25)
+#define RELEASE_FOCUS_KEY _IO('k', 26)
+#define PRESS_CAMERA_KEY _IO('k', 27)
+#define RELEASE_CAMERA_KEY _IO('k', 28)
+#endif
+#define SET_KPD_BACKLIGHT _IOW('k', 29, struct kpd_ledctl)
+#define SET_KPD_KCOL _IO('k', 29)
+
+
+#endif
diff --git a/kernel-headers/linux/libmtk_cipher_export.h b/kernel-headers/linux/libmtk_cipher_export.h
new file mode 100644
index 0000000..34a85d3
--- /dev/null
+++ b/kernel-headers/linux/libmtk_cipher_export.h
@@ -0,0 +1,86 @@
+#ifndef _LIBMTK_CIPHER_EXPORT_H
+#define _LIBMTK_CIPHER_EXPORT_H
+
+#define HEVC_BLK_LEN (20480) // bytes
+#define HEVC_MOD "HEVC_MOD"
+#define HEVC_NANO 1000000000ULL
+#define HEVC_CIPHER_LEN (102400) // bytes
+
+
+typedef struct
+{
+ unsigned char buf[HEVC_BLK_LEN];
+ unsigned int len;
+} HEVC_BLK;
+
+typedef enum
+{
+ VIDEO_ENCRYPT_CODEC_NONE = 0x0,
+ VIDEO_ENCRYPT_CODEC_HEVC_ENC = 0x1,
+ VIDEO_ENCRYPT_CODEC_HEVC_DEC = 0x2,
+ VIDEO_ENCRYPT_CODEC_MAX = 0xffffffff
+} VIDEO_ENCRYPT_CODEC_T;
+
+
+typedef int (*hevc_api_funp)(HEVC_BLK *p_hevc_blk);
+typedef int (*hevc_api_initk_funp)(unsigned char *key, unsigned int klen);
+
+
+#define SEC_OK 0x0
+#define SEC_FAIL 0x1
+
+/* HEVC shared lib*/
+#define ERR_HEVC_NOT_CORRECT_MODE 0x10000
+#define ERR_HEVC_DATA_NOT_ALIGNED 0x10001
+#define ERR_HEVC_ENC_IOCTL_FAIL 0x10002
+#define ERR_HEVC_DEC_IOCTL_FAIL 0x10002
+#define ERR_HEVC_CIPHER_UT_FAIL 0x10003
+#define ERR_HEVC_DATA_IS_NULL 0x10004
+#define ERR_HEVC_DATA_LENGTH_NOT_VALID 0x10005
+#define ERR_HEVC_SW_ENC_ERROR 0x10006
+#define ERR_HEVC_SW_DEC_ERROR 0x10007
+#define ERR_HEVC_INIT_SW_KEY_ERROR 0x10008
+
+
+/* HEVC sample*/
+#define ERR_HEVC_CIPHER_LIB_NOT_FOUND 0x20001
+#define ERR_HEVC_SW_DEC_BLOCK_SYM_NOT_FOUND 0x20002
+#define ERR_HEVC_HW_ENC_BLOCK_SYM_NOT_FOUND 0x20003
+#define ERR_HEVC_INIT_SW_KEY_SYM_NOT_FOUND 0x20004
+#define ERR_HEVC_INPUT_FILE_NOT_FOUND 0x20005
+#define ERR_HEVC_OUTPUT_FILE_NOT_FOUND 0x20006
+#define ERR_HEVC_SW_DEC_FILE_SYM_NOT_FOUND 0x20007
+#define ERR_HEVC_SW_DEC_FILE_FAILED 0x20008
+#define ERR_HEVC_UNKNOWN 0x2FFFF
+
+
+/* Define LOG LEVEL*/
+#define SEC_LOG_TRACE 0 //For source code trace
+#define SEC_LOG_DEBUG 0 //For debug purpose
+#define SEC_LOG_ERROR 1 //For critical error dump
+#define SEC_LOG_INFO 1 //For information to know when processing in normal
+
+/* DEBUG MACRO */
+#define SMSG_TRACE(...) \
+ do { if (SEC_LOG_TRACE) printf(__VA_ARGS__); } while (0)
+
+#define SMSG_DEBUG(...) \
+ do { if (SEC_LOG_DEBUG) printf(__VA_ARGS__); } while (0)
+
+#define SMSG_ERROR(...) \
+ do { if (SEC_LOG_ERROR) printf(__VA_ARGS__); } while (0)
+
+#define SMSG_INFO(...) \
+ do { if (SEC_LOG_INFO) printf(__VA_ARGS__); } while (0)
+
+
+#define HEVC_ENCRYTP_FILE_PATH "/data/mediaserver"
+#define HEVC_ENC_SW_ENCRYPT_FILE_PATH "/system/lib/libhevce_sb.ca7.android.so"
+#define HEVC_ENC_HW_ENCRYPT_FILE_PATH "/data/mediaserver/sb.ca7.android_hwenc.so"
+#define HEVC_ENC_HW_DECRYPT_FILE_PATH "/data/mediaserver/sb.ca7.android_hwdec.so"
+#define HEVC_DEC_SW_ENCRYTP_FILE_PATH "/system/lib/libHEVCdec_sa.ca7.android.so"
+#define HEVC_DEC_HW_ENCRYPT_FILE_PATH "/data/mediaserver/dec_sa.ca7.android_hwenc.so"
+#define HEVC_DEC_HW_DECRYPT_FILE_PATH "/data/mediaserver/dec_sa.ca7.android_hwdec.so"
+
+#endif /*_LIBMTK_CIPHER_EXPORT_H*/
+
diff --git a/kernel-headers/linux/matv.h b/kernel-headers/linux/matv.h
new file mode 100644
index 0000000..dcae5a7
--- /dev/null
+++ b/kernel-headers/linux/matv.h
@@ -0,0 +1,58 @@
+#ifndef __MATV_H__
+#define __MATV_H__
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/device.h>
+#include <linux/kdev_t.h>
+#include <linux/fs.h>
+#include <linux/cdev.h>
+#include <linux/platform_device.h>
+#include <linux/dma-mapping.h>
+#include <linux/mm_types.h>
+#include <linux/mm.h>
+#include <linux/jiffies.h>
+#include <linux/sched.h>
+#include <asm/uaccess.h>
+#include <linux/vmalloc.h>
+#include <linux/interrupt.h>
+#include <mach/irqs.h>
+#include <linux/wait.h>
+#include <linux/spinlock.h>
+#include <linux/delay.h>
+#include <linux/semaphore.h>
+#include <linux/platform_device.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <linux/xlog.h>
+
+#include "cust_matv.h"
+
+
+
+#define MATV_DEVNAME "MATV"
+#define MATV_IOC_MAGIC 'a'
+
+//below is control message
+#define TEST_MATV_PRINT _IO(MATV_IOC_MAGIC, 0x00)
+#define MATV_READ _IOW(MATV_IOC_MAGIC, 0x01, unsigned int)
+#define MATV_WRITE _IOW(MATV_IOC_MAGIC, 0x02, unsigned int)
+#define MATV_SET_PWR _IOW(MATV_IOC_MAGIC, 0x03, unsigned int)
+#define MATV_SET_RST _IOW(MATV_IOC_MAGIC, 0x04, unsigned int)
+#define MATV_SET_STRAP _IOW(MATV_IOC_MAGIC, 0x05, unsigned int)
+#define MATV_SLEEP _IOW(MATV_IOC_MAGIC, 0x06, unsigned int)
+#define MATV_SET_TP_MODE _IOW(MATV_IOC_MAGIC, 0x07, unsigned int)
+
+typedef struct matv_i2s_info
+{
+ int status;
+ int mode;
+ int rate;
+} matv_i2s_info_t;
+
+#define MATV_QUERY_I2S_INFO _IOW(MATV_IOC_MAGIC, 0x08, struct matv_i2s_info*)
+
+
+#endif //__MATV_H__
diff --git a/kernel-headers/linux/mman-proprietary.h b/kernel-headers/linux/mman-proprietary.h
new file mode 100644
index 0000000..c989967
--- /dev/null
+++ b/kernel-headers/linux/mman-proprietary.h
@@ -0,0 +1,21 @@
+/*
+* Copyright (C) 2011-2014 MediaTek Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef __MM_PROPRIETARY_H__
+
+#define PROT_NOCACHE 0x10
+
+#endif
diff --git a/kernel-headers/linux/mmc/sd_misc.h b/kernel-headers/linux/mmc/sd_misc.h
new file mode 100644
index 0000000..0668273
--- /dev/null
+++ b/kernel-headers/linux/mmc/sd_misc.h
@@ -0,0 +1,201 @@
+#ifndef SD_MISC_H
+#define SD_MISC_H
+
+#ifdef __KERNEL__
+#include <linux/bitops.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/card.h>
+#include <linux/mmc/core.h>
+#include <linux/mmc/mmc.h>
+#include <linux/mmc/sd.h>
+#endif
+
+
+
+struct msdc_ioctl {
+ int opcode;
+ int host_num;
+ int iswrite;
+ int trans_type;
+ unsigned int total_size;
+ unsigned int address;
+ unsigned int *buffer;
+ int cmd_pu_driving;
+ int cmd_pd_driving;
+ int dat_pu_driving;
+ int dat_pd_driving;
+ int clk_pu_driving;
+ int clk_pd_driving;
+ int ds_pu_driving;
+ int ds_pd_driving;
+ int rst_pu_driving;
+ int rst_pd_driving;
+ int clock_freq;
+ int partition;
+ int hopping_bit;
+ int hopping_time;
+ int result;
+ int sd30_mode;
+ int sd30_max_current;
+ int sd30_drive;
+ int sd30_power_control;
+};
+
+/**************for msdc_ssc***********************/
+#define AUDPLL_CTL_REG12 (0xF0007070)
+#define AUDPLL_CTL_REG01 (0xF00071E0)
+#define AUDPLL_CTL_REG02 (0xF100000C)
+
+#define AUDPLL_TSEL_MASK (1792) /* MASK = 00000111 00000000 */
+#define AUDPLL_TSEL_RESULT1 (0) /* REG = 00000000 00000000 30.5us */
+#define AUDPLL_TSEL_RESULT2 (256) /* REG = 00000001 00000000 61.0us */
+#define AUDPLL_TSEL_RESULT3 (512) /* REG = 00000010 00000000 122.1us */
+#define AUDPLL_TSEL_RESULT4 (768) /* REG = 00000011 00000000 244.1us */
+#define AUDPLL_TSEL_RESULT5 (1024) /* REG = 00000100 00000000 448.3us */
+
+#define AUDPLL_BSEL_MASK (7) /* MASK = 00000000 00000111 */
+#define AUDPLL_BSEL_RESULT0 (0) /* REG = 00000000 00000000 REG init val */
+#define AUDPLL_BSEL_RESULT1 (1) /* REG = 00000000 00000001 2.26MHz */
+#define AUDPLL_BSEL_RESULT2 (2) /* REG = 00000000 00000010 4.52MHz */
+#define AUDPLL_BSEL_RESULT3 (4) /* REG = 00000000 00000100 9.04MHz */
+
+#define SET_HOP_BIT_NONE (0)
+#define SET_HOP_BIT1 (1)
+#define SET_HOP_BIT2 (2)
+#define SET_HOP_BIT3 (3)
+
+#define SET_HOP_TIME0 (0)
+#define SET_HOP_TIME1 (1)
+#define SET_HOP_TIME2 (2)
+#define SET_HOP_TIME3 (3)
+#define SET_HOP_TIME4 (4)
+
+
+/**************for msdc_ssc***********************/
+
+#define MSDC_DRIVING_SETTING (0)
+#define MSDC_CLOCK_FREQUENCY (1)
+#define MSDC_SINGLE_READ_WRITE (2)
+#define MSDC_MULTIPLE_READ_WRITE (3)
+#define MSDC_GET_CID (4)
+#define MSDC_GET_CSD (5)
+#define MSDC_GET_EXCSD (6)
+#define MSDC_ERASE_PARTITION (7)
+#define MSDC_HOPPING_SETTING (8)
+
+#define MSDC_REINIT_SDCARD _IOW('r', 9, int)
+
+#define MSDC_SD30_MODE_SWITCH (10)
+#define MSDC_GET_BOOTPART (11)
+#define MSDC_SET_BOOTPART (12)
+#define MSDC_GET_PARTSIZE (13)
+#define MSDC_ERASE_SELECTED_AREA (0x20)
+#define MSDC_CARD_DUNM_FUNC (0xff)
+
+typedef enum {
+ USER_PARTITION = 0,
+ BOOT_PARTITION_1,
+ BOOT_PARTITION_2,
+ RPMB_PARTITION,
+ GP_PARTITION_1,
+ GP_PARTITION_2,
+ GP_PARTITION_3,
+ GP_PARTITION_4,
+} PARTITON_ACCESS_T;
+
+typedef enum {
+ SDHC_HIGHSPEED = 0, /* 0 Host supports HS mode */
+ UHS_SDR12, /* 1 Host supports UHS SDR12 mode */
+ UHS_SDR25, /* 2 Host supports UHS SDR25 mode */
+ UHS_SDR50, /* 3 Host supports UHS SDR50 mode */
+ UHS_SDR104, /* 4 Host supports UHS SDR104 mode */
+ UHS_DDR50, /* 5 Host supports UHS DDR50 mode */
+} SD3_MODE;
+
+typedef enum {
+ DRIVER_TYPE_A = 0, /* 0 Host supports Driver Type A */
+ DRIVER_TYPE_B, /* 1 Host supports Driver Type B */
+ DRIVER_TYPE_C, /* 2 Host supports Driver Type C */
+ DRIVER_TYPE_D, /* 3 Host supports Driver Type D */
+} SD3_DRIVE;
+
+typedef enum {
+ MAX_CURRENT_200 = 0, /* 0 Host max current limit is 200mA */
+ MAX_CURRENT_400, /* 1 Host max current limit is 400mA */
+ MAX_CURRENT_600, /* 2 Host max current limit is 600mA */
+ MAX_CURRENT_800, /* 3 Host max current limit is 800mA */
+} SD3_MAX_CURRENT;
+
+typedef enum {
+ SDXC_NO_POWER_CONTROL = 0, /* 0 Host not supports >150mA current at 3.3V /3.0V/1.8V */
+ SDXC_POWER_CONTROL, /* 1 Host supports >150mA current at 3.3V /3.0V/1.8V */
+} SD3_POWER_CONTROL;
+
+typedef enum {
+ DUMP_INTO_BOOT_CARD_IPANIC = 0,
+ DUMP_INTO_BOOT_CARD_KDUMP = 1,
+ DUMP_INTO_EXTERN_CARD = 2,
+} DUMP_STORAGE_TYPE;
+
+typedef enum {
+ EMMC_CARD_BOOT = 0,
+ SD_CARD_BOOT,
+ EMMC_CARD,
+ SD_CARD,
+} STORAGE_TPYE;
+
+#define EXT_CSD_BOOT_SIZE_MULT (226) /* R */
+#define EXT_CSD_HC_ERASE_GRP_SIZE (224) /* RO */
+#define EXT_CSD_HC_WP_GPR_SIZE (221) /* RO */
+#define EXT_CSD_RPMB_SIZE_MULT (168) /* R */
+#define EXT_CSD_GP1_SIZE_MULT (143) /* R/W 3 bytes */
+#define EXT_CSD_GP2_SIZE_MULT (146) /* R/W 3 bytes */
+#define EXT_CSD_GP3_SIZE_MULT (149) /* R/W 3 bytes */
+#define EXT_CSD_GP4_SIZE_MULT (152) /* R/W 3 bytes */
+#define EXT_CSD_PART_CFG (179) /* R/W/E & R/W/E_P */
+#define EXT_CSD_CACHE_FLUSH (32)
+#define EXT_CSD_CACHE_CTRL (33)
+#define CAPACITY_2G (2 * 1024 * 1024 * 1024ULL)
+
+typedef enum {
+ EMMC_BOOT_NO_EN = 0,
+ EMMC_BOOT1_EN,
+ EMMC_BOOT2_EN,
+ EMMC_BOOT_USER = 7,
+ EMMC_BOOT_END
+} BOOT_PARTITION_EN;
+
+#ifdef CONFIG_MTK_GPT_SCHEME_SUPPORT
+typedef enum {
+ EMMC_PART_UNKNOWN=0
+ ,EMMC_PART_BOOT1
+ ,EMMC_PART_BOOT2
+ ,EMMC_PART_RPMB
+ ,EMMC_PART_GP1
+ ,EMMC_PART_GP2
+ ,EMMC_PART_GP3
+ ,EMMC_PART_GP4
+ ,EMMC_PART_USER
+ ,EMMC_PART_END
+} Region;
+#endif
+
+typedef enum {
+ CARD_INFO = 0,
+ DISK_INFO,
+ EMMC_USER_CAPACITY,
+ EMMC_CAPACITY,
+ EMMC_RESERVE,
+} GET_STORAGE_INFO;
+
+struct storage_info {
+ struct mmc_card *card;
+ struct gendisk *disk;
+ unsigned long long emmc_user_capacity;
+ unsigned long long emmc_capacity;
+ int emmc_reserve;
+};
+
+int msdc_get_info(STORAGE_TPYE storage_type, GET_STORAGE_INFO info_type, struct storage_info *info);
+
+#endif /* end of SD_MISC_H */
diff --git a/kernel-headers/linux/mmprofile.h b/kernel-headers/linux/mmprofile.h
new file mode 100644
index 0000000..866022c
--- /dev/null
+++ b/kernel-headers/linux/mmprofile.h
@@ -0,0 +1,102 @@
+#ifndef __MMPROFILE_H__
+#define __MMPROFILE_H__
+#include "mmprofile_static_event.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MMProfileEventNameMaxLen 31
+
+typedef unsigned int MMP_Event;
+
+typedef enum {
+ MMProfileFlagStart = 1,
+ MMProfileFlagEnd = 2,
+ MMProfileFlagPulse = 4,
+ MMProfileFlagEventSeparator = 8,
+ MMProfileFlagSystrace = 0x80000000,
+ MMProfileFlagMax = 0xFFFFFFFF
+} MMP_LogType;
+
+typedef enum {
+ MMProfileMetaStringMBS = 1,
+ MMProfileMetaStringWCS,
+ MMProfileMetaStructure,
+ MMProfileMetaBitmap,
+ MMProfileMetaRaw,
+ MMProfileMetaUser = 0x10000000,
+ MMProfileMetaUserM4UReg,
+ MMProfileMetaMax = 0xFFFFFFFF
+} MMP_MetaDataType;
+
+typedef enum {
+ MMProfileBitmapRGB565 = 1,
+ MMProfileBitmapRGB888,
+ MMProfileBitmapRGBA8888,
+ MMProfileBitmapBGR888,
+ MMProfileBitmapBGRA8888,
+ MMProfileBitmapMax = 0xFFFFFFFF
+} MMP_PixelFormat;
+
+typedef struct {
+ unsigned int data1; // data1 (user defined)
+ unsigned int data2; // data2 (user defined)
+ MMP_MetaDataType data_type; // meta data type
+ unsigned int size; // meta data size
+ void *pData; // meta data pointer
+} MMP_MetaData_t;
+
+typedef struct {
+ unsigned int data1; // data1 (user defined)
+ unsigned int data2; // data2 (user defined)
+ unsigned int struct_size; // structure size (bytes)
+ void *pData; // structure pointer
+ char struct_name[32]; // structure name
+} MMP_MetaDataStructure_t;
+
+typedef struct {
+ unsigned int data1; // data1 (user defined)
+ unsigned int data2; // data2 (user defined)
+ unsigned int width; // image width
+ unsigned int height; // image height
+ MMP_PixelFormat format; // image pixel format
+ unsigned int start_pos; // start offset of image data (base on pData)
+ unsigned int bpp; // bits per pixel
+ int pitch; // image pitch (bytes per line)
+ unsigned int data_size; // image data size (bytes)
+ unsigned int down_sample_x; // horizontal down sample rate (>=1)
+ unsigned int down_sample_y; // vertical down sample rate (>=1)
+ void *pData; // image buffer address
+} MMP_MetaDataBitmap_t;
+
+MMP_Event MMProfileRegisterEvent(MMP_Event parent, const char *name);
+MMP_Event MMProfileFindEvent(MMP_Event parent, const char *name);
+void MMProfileEnableEvent(MMP_Event event, long enable);
+void MMProfileEnableFTraceEvent(MMP_Event event, long enable, long ftrace);
+void MMProfileEnableEventRecursive(MMP_Event event, long enable);
+void MMProfileEnableFTraceEventRecursive(MMP_Event event, long enable, long ftrace);
+long MMProfileQueryEnable(MMP_Event event);
+void MMProfileLog(MMP_Event event, MMP_LogType type);
+void MMProfileLogEx(MMP_Event event, MMP_LogType type, unsigned long data1, unsigned long data2);
+long MMProfileLogMeta(MMP_Event event, MMP_LogType type, MMP_MetaData_t *pMetaData);
+long MMProfileLogMetaString(MMP_Event event, MMP_LogType type, const char *str);
+long MMProfileLogMetaStringEx(MMP_Event event, MMP_LogType type, unsigned long data1, unsigned long data2, const char *str);
+long MMProfileLogMetaStructure(MMP_Event event, MMP_LogType type, MMP_MetaDataStructure_t *pMetaData);
+long MMProfileLogMetaBitmap(MMP_Event event, MMP_LogType type, MMP_MetaDataBitmap_t *pMetaData);
+
+#define MMProfileLogStructure(event, type, pStruct, struct_type) \
+{ \
+ MMP_MetaDataStructure_t MetaData; \
+ MetaData.data1 = 0; \
+ MetaData.data2 = 0; \
+ strcpy(MetaData.struct_name, #struct_type); \
+ MetaData.struct_size = sizeof(struct_type); \
+ MetaData.pData = (void *)(pStruct); \
+ MMProfileLogMetaStructure(event, type, &MetaData); \
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/kernel-headers/linux/mmprofile_internal.h b/kernel-headers/linux/mmprofile_internal.h
new file mode 100644
index 0000000..9cc6f0f
--- /dev/null
+++ b/kernel-headers/linux/mmprofile_internal.h
@@ -0,0 +1,100 @@
+#ifndef __MMPROFILE_INTERNAL_H__
+#define __MMPROFILE_INTERNAL_H__
+
+#include <linux/mmprofile.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MMProfileMaxEventCount 1000
+
+#define MMP_EVENT_STATE_ENABLED (1 << 0)
+#define MMP_EVENT_STATE_FTRACE (1 << 1)
+
+typedef struct {
+ unsigned int parentId;
+ char name[MMProfileEventNameMaxLen + 1];
+} MMProfile_EventInfo_t;
+
+typedef struct {
+ unsigned int lock;
+ unsigned int id;
+ unsigned int timeLow;
+ unsigned int timeHigh;
+ unsigned int flag;
+#if 0 //#ifdef MMPROFILE_KERNEL_64
+ unsigned long long data1;
+ unsigned long long data2;
+ unsigned long long meta_data_cookie;
+#else
+ unsigned int data1;
+ unsigned int data2;
+ unsigned int meta_data_cookie;
+#endif
+} MMProfile_Event_t;
+
+typedef struct {
+ unsigned int enable;
+ unsigned int start;
+ unsigned int write_pointer;
+ unsigned int reg_event_index;
+ unsigned int buffer_size_record;
+ unsigned int buffer_size_bytes;
+ unsigned int record_size;
+ unsigned int meta_buffer_size;
+ unsigned int new_buffer_size_record;
+ unsigned int new_meta_buffer_size;
+ unsigned int selected_buffer;
+ unsigned int max_event_count;
+ unsigned int event_state[MMProfileMaxEventCount];
+} MMProfile_Global_t;
+
+typedef struct {
+ unsigned int cookie;
+ MMP_MetaDataType data_type;
+ unsigned int data_size;
+ unsigned int data_offset;
+} MMProfile_MetaData_t;
+
+typedef struct {
+ unsigned int id;
+ MMP_LogType type;
+ MMP_MetaData_t meta_data;
+} MMProfile_MetaLog_t;
+
+
+#define MMProfileGlobalsSize ((sizeof(MMProfile_Global_t)+(PAGE_SIZE-1))&(~(PAGE_SIZE-1)))
+
+#define CONFIG_MMPROFILE_PATH "/data/MMProfileConfig.dat"
+
+#define MMProfilePrimaryBuffer 1
+#define MMProfileGlobalsBuffer 2
+#define MMProfileMetaDataBuffer 3
+
+#define MMP_IOC_MAGIC 'M'
+
+#define MMP_IOC_ENABLE _IOW(MMP_IOC_MAGIC, 1, int)
+#define MMP_IOC_START _IOW(MMP_IOC_MAGIC, 2, int)
+#define MMP_IOC_TIME _IOW(MMP_IOC_MAGIC, 3, int)
+#define MMP_IOC_REGEVENT _IOWR(MMP_IOC_MAGIC, 4, int)
+#define MMP_IOC_FINDEVENT _IOWR(MMP_IOC_MAGIC, 5, int)
+#define MMP_IOC_ENABLEEVENT _IOW(MMP_IOC_MAGIC, 6, int)
+#define MMP_IOC_LOG _IOW(MMP_IOC_MAGIC, 7, int)
+#define MMP_IOC_DUMPEVENTINFO _IOR(MMP_IOC_MAGIC, 8, int)
+#define MMP_IOC_METADATALOG _IOW(MMP_IOC_MAGIC, 9, int)
+#define MMP_IOC_DUMPMETADATA _IOR(MMP_IOC_MAGIC, 10, int)
+#define MMP_IOC_SELECTBUFFER _IOW(MMP_IOC_MAGIC, 11, int)
+#define MMP_IOC_TRYLOG _IOWR(MMP_IOC_MAGIC, 12, int)
+#define MMP_IOC_ISENABLE _IOR(MMP_IOC_MAGIC, 13, int)
+#define MMP_IOC_REMOTESTART _IOR(MMP_IOC_MAGIC, 14, int)
+#define MMP_IOC_TEST _IOWR(MMP_IOC_MAGIC, 100, int)
+
+// fix build warning: unused
+//static void MMProfileInitBuffer(void);
+//static void MMProfileResetBuffer(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/kernel-headers/linux/mmprofile_static_event.h b/kernel-headers/linux/mmprofile_static_event.h
new file mode 100644
index 0000000..6744bfa
--- /dev/null
+++ b/kernel-headers/linux/mmprofile_static_event.h
@@ -0,0 +1,31 @@
+#ifndef __MMPROFILE_STATIC_EVENT_H__
+#define __MMPROFILE_STATIC_EVENT_H__
+
+
+typedef enum
+{
+ MMP_InvalidEvent = 0,
+ MMP_RootEvent = 1,
+ // User defined static events begin
+ MMP_TouchPanelEvent,
+ // User defined static events end.
+ MMP_MaxStaticEvent
+} MMP_StaticEvents;
+
+#ifdef MMPROFILE_INTERNAL
+typedef struct
+{
+ MMP_StaticEvents event;
+ char* name;
+ MMP_StaticEvents parent;
+} MMP_StaticEvent_t;
+
+static MMP_StaticEvent_t MMProfileStaticEvents[] =
+{
+ {MMP_RootEvent, "Root_Event", MMP_InvalidEvent},
+ {MMP_TouchPanelEvent, "TouchPanel_Event", MMP_RootEvent},
+};
+
+#endif
+
+#endif
diff --git a/kernel-headers/linux/mt_sched.h b/kernel-headers/linux/mt_sched.h
new file mode 100644
index 0000000..11bf8c2
--- /dev/null
+++ b/kernel-headers/linux/mt_sched.h
@@ -0,0 +1,21 @@
+#ifndef _MTK_SCHED_H
+#define _MTK_SCHED_H
+
+#define __USE_GNU
+#include <linux/ioctl.h>
+#include <sched.h>
+#include <linux/mt_sched_ioctl.h>
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+int mt_sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
+int mt_sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask, cpu_set_t *mt_mask);
+int mt_sched_exitaffinity(pid_t pid);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/kernel-headers/linux/mt_sched_ioctl.h b/kernel-headers/linux/mt_sched_ioctl.h
new file mode 100644
index 0000000..580caac
--- /dev/null
+++ b/kernel-headers/linux/mt_sched_ioctl.h
@@ -0,0 +1,17 @@
+#ifndef _MT_SCHED_IOCTL_H
+#define _MT_SCHED_IOCTL_H
+
+struct ioctl_arg {
+ pid_t pid;
+ unsigned int len;
+ unsigned long *mask;
+ unsigned long *mt_mask;
+};
+
+#define IOC_MAGIC '\x66'
+
+#define IOCTL_SETAFFINITY _IOW(IOC_MAGIC, 0, struct ioctl_arg)
+#define IOCTL_EXITAFFINITY _IOW(IOC_MAGIC, 1, pid_t)
+#define IOCTL_GETAFFINITY _IOR(IOC_MAGIC, 2, struct ioctl_arg)
+
+#endif \ No newline at end of file
diff --git a/kernel-headers/linux/mtcombo.h b/kernel-headers/linux/mtcombo.h
new file mode 100644
index 0000000..67dd58e
--- /dev/null
+++ b/kernel-headers/linux/mtcombo.h
@@ -0,0 +1,18 @@
+#ifndef __MTCOMBO_H__
+#define __MTCOMBO_H__
+
+#include <linux/ioctl.h>
+
+typedef enum _ENUM_WMTHWVER_TYPE_T{
+ WMTHWVER_MT6620_E1 = 0x0,
+ WMTHWVER_MT6620_E2 = 0x1,
+ WMTHWVER_MT6620_E3 = 0x2,
+ WMTHWVER_MT6620_E4 = 0x3,
+ WMTHWVER_MT6620_MAX,
+ WMTHWVER_INVALID = 0xff
+} ENUM_WMTHWVER_TYPE_T, *P_ENUM_WMTHWVER_TYPE_T;
+
+#define COMBO_IOC_MAGIC 0x90
+#define COMBO_IOC_GPS_HWVER 6
+
+#endif // __MTCOMBO_H__
diff --git a/kernel-headers/linux/mtgpio.h b/kernel-headers/linux/mtgpio.h
new file mode 100644
index 0000000..050a792
--- /dev/null
+++ b/kernel-headers/linux/mtgpio.h
@@ -0,0 +1,54 @@
+/* alps/ALPS_SW/TRUNK/MAIN/alps/kernel/arch/arm/mach-mt6516/include/mach/fm.h
+ *
+ * (C) Copyright 2009
+ * MediaTek <www.MediaTek.com>
+ * William Chung <William.Chung@MediaTek.com>
+ *
+ * MT6516 AR10x0 FM Radio Driver
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __MTGPIO_H__
+#define __MTGPIO_H__
+
+#include <linux/ioctl.h>
+
+#define GPIO_IOC_MAGIC 0x90
+
+#define GPIO_IOCQMODE _IOR(GPIO_IOC_MAGIC, 0x01, uint32_t)
+#define GPIO_IOCTMODE0 _IOW(GPIO_IOC_MAGIC, 0x02, uint32_t)
+#define GPIO_IOCTMODE1 _IOW(GPIO_IOC_MAGIC, 0x03, uint32_t)
+#define GPIO_IOCTMODE2 _IOW(GPIO_IOC_MAGIC, 0x04, uint32_t)
+#define GPIO_IOCTMODE3 _IOW(GPIO_IOC_MAGIC, 0x05, uint32_t)
+#define GPIO_IOCQDIR _IOR(GPIO_IOC_MAGIC, 0x06, uint32_t)
+#define GPIO_IOCSDIRIN _IOW(GPIO_IOC_MAGIC, 0x07, uint32_t)
+#define GPIO_IOCSDIROUT _IOW(GPIO_IOC_MAGIC, 0x08, uint32_t)
+#define GPIO_IOCQPULLEN _IOR(GPIO_IOC_MAGIC, 0x09, uint32_t)
+#define GPIO_IOCSPULLENABLE _IOW(GPIO_IOC_MAGIC, 0x0A, uint32_t)
+#define GPIO_IOCSPULLDISABLE _IOW(GPIO_IOC_MAGIC, 0x0B, uint32_t)
+#define GPIO_IOCQPULL _IOR(GPIO_IOC_MAGIC, 0x0C, uint32_t)
+#define GPIO_IOCSPULLDOWN _IOW(GPIO_IOC_MAGIC, 0x0D, uint32_t)
+#define GPIO_IOCSPULLUP _IOW(GPIO_IOC_MAGIC, 0x0E, uint32_t)
+#define GPIO_IOCQINV _IOR(GPIO_IOC_MAGIC, 0x0F, uint32_t)
+#define GPIO_IOCSINVENABLE _IOW(GPIO_IOC_MAGIC, 0x10, uint32_t)
+#define GPIO_IOCSINVDISABLE _IOW(GPIO_IOC_MAGIC, 0x11, uint32_t)
+#define GPIO_IOCQDATAIN _IOR(GPIO_IOC_MAGIC, 0x12, uint32_t)
+#define GPIO_IOCQDATAOUT _IOR(GPIO_IOC_MAGIC, 0x13, uint32_t)
+#define GPIO_IOCSDATALOW _IOW(GPIO_IOC_MAGIC, 0x14, uint32_t)
+#define GPIO_IOCSDATAHIGH _IOW(GPIO_IOC_MAGIC, 0x15, uint32_t)
+
+
+#endif // __MTGPIO_H__
diff --git a/kernel-headers/linux/mtk_agps_common.h b/kernel-headers/linux/mtk_agps_common.h
new file mode 100644
index 0000000..325295a
--- /dev/null
+++ b/kernel-headers/linux/mtk_agps_common.h
@@ -0,0 +1,157 @@
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * mtk_agps_common.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * Data types used by MTK AGPS
+ *
+ * Author:
+ * -------
+ * Chunhui Li(MTK80143)
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 12 05 2012 archilis.wang
+ * [ALPS00393352] Please help analzye the root cause of failed item of ASSET
+ * Review: http://mtksap20:8080/go?page=NewReview&reviewid=49629
+ *
+ * 04 24 2011 nina.hsu
+ * [ALPS00043332] [MT6573][AGPS] Add GPS_MNL_PROCESS_STATUS definition
+ * [MT6573][AGPS]
+ * Add GPS_MNL_PROCESS_STATUS definition for reporting GPS status
+ * .
+ *
+ * 08 20 2010 qiuhuan.zhao
+ * [ALPS00123522] [GPS] Android 2.2 porting
+ * Android 2.2 Gps driver porting.
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef MTK_AGPS_COMMON_H
+#define MTK_AGPS_COMMON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if ( defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 200000 ))
+#else
+#pragma pack(1)
+#endif
+
+//AGPS socket port
+#define MTK_MNL2SUPL "/data/agps_supl/mnl2supl"
+#define MTK_PROFILE2MNL "/data/agps_supl/profile2mnl"
+
+//System_property for SUPL_Enable, SUPL_SI_Enable
+#define GPS_MNL_SUPL_NAME "gps.supl.status"
+#define GPS_MNL_PROCESS_STATUS "gps.mnl_process.status"
+
+// AGPS Module Enum
+typedef enum
+{
+ MTK_MOD_GPS = 0,
+ MTK_MOD_SUPL,
+ MTK_MOD_WIFI,
+ MTK_MOD_CELLID,
+ MTK_MOD_CNT,
+} MTK_AGPS_MOD_E;
+
+// AGPS Msg type
+typedef enum
+{
+ MTK_AGPS_SUPL_ASSIST_REQ= 0,
+ MTK_AGPS_SUPL_NI_REQ,
+ MTK_AGPS_SUPL_PMTK_DATA,
+ MTK_AGPS_SUPL_END,
+ MTK_AGPS_SUPL_MNL_STATUS,
+ MTK_AGPS_SUPL_GPEVT,
+ MTK_AGPS_SUPL_CNT,
+ MTK_AGPS_AIDING_CELLINFO,
+ MTK_AGPS_AIDING_WIFIIFNO,
+ MTK_AGPS_SUPL_RAW_DBG,
+} MTK_AGPS_SUPL_MSG_T;
+
+// GPEVT msg data enum
+typedef enum
+{
+ GPEVT_TYPE_UNKNOWN = 0, // 0
+ GPEVT_SUPL_SLP_CONNECT_BEGIN, // 1
+ GPEVT_SUPL_SLP_CONNECTED, // 2
+ GPEVT_SUPL_SSL_CONNECT_BEGIN, // 3
+ GPEVT_SUPL_SSL_CONNECTED, // 4
+ GPEVT_SUPL_ASSIST_DATA_RECEIVED, // 5
+ GPEVT_SUPL_ASSIST_DATA_VALID, // 6
+ GPEVT_SUPL_FIRST_POS_FIX, // 7
+ GPEVT_SUPL_MEAS_TIME_OUT, // 8
+ GPEVT_SUPL_MEAS_RESPONSE_SENT, // 9
+ GPEVT_SUPL_SSL_CLOSED, // 10
+ GPEVT_SUPL_SLP_DISCONNECTED, // 11
+
+ GPEVT_CP_MOLR_SENT, // 12
+ GPEVT_CP_MTLR_RECEIVED, // 13
+ GPEVT_CP_ASSIST_DATA_RECEIVED, // 14
+ GPEVT_CP_ASSIST_DATA_VALID, // 15
+ GPEVT_CP_FIRST_POS_FIX, // 16
+ GPEVT_CP_MEAS_TIME_OUT, // 17
+ GPEVT_CP_MEAS_RESPONSE_SENT, // 18
+
+ GPEVT_GNSS_HW_START, // 19
+ GPEVT_GNSS_HW_STOP, // 20
+ GPEVT_GNSS_RESET_STORED_SATELLITE_DATA, // 21
+
+ GPEVT_EPO_SERVER_CONNECT_BEGIN, // 22
+ GPEVT_EPO_SERVER_CONNECTED, // 23
+ GPEVT_EPO_DATA_RECEIVED, // 24
+ GPEVT_EPO_SERVER_DISCONNECTED, // 25
+ GPEVT_EPO_DATA_VALID, // 26
+
+ GPEVT_HOT_STILL_DATA_VALID, // 27
+
+ GPEVT_TYPE_MAX // 28
+}gpevt_type;
+
+// AGPS data struct
+typedef struct
+{
+ unsigned char srcMod;
+ unsigned char dstMod;
+ unsigned short type;
+ unsigned short length;
+ char data[1];
+} mtk_agps_msg, *pmtk_agps_msg, MTK_AGPS_MSG_T, *PMTK_AGPS_MSG_T;
+
+#define MAX_AGPS_MAX_MESSAGES 72
+#define MTK_AGPS_PMTK_MAX_SIZE (256+sizeof(mtk_agps_msg))
+#define MTK_AGPS_PMTK_MAX_LEN (256+sizeof(mtk_agps_msg))
+#define MTK_AGPS_PMTK_HDR_LEN sizeof(MTK_AGPS_MSG_T)
+#define MTK_AGPS_MSG_MAX_LEN (MTK_AGPS_PMTK_MAX_LEN + MTK_AGPS_PMTK_HDR_LEN)
+
+#define MTK_AGPS_SUPLMSG_TIMEOUT 6000
+
+#if ( defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 200000 ))
+#else
+#pragma pack()
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MTK_AGPS_COMMON_H */
diff --git a/kernel-headers/linux/mtk_ion.h b/kernel-headers/linux/mtk_ion.h
new file mode 100644
index 0000000..514701e
--- /dev/null
+++ b/kernel-headers/linux/mtk_ion.h
@@ -0,0 +1,28 @@
+/*
+* Copyright (C) 2011-2014 MediaTek Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _MTK_LINUX_ION_H
+#define _MTK_LINUX_ION_H
+enum mtk_ion_heap_type {
+ ION_HEAP_TYPE_MULTIMEDIA = 10,
+ ION_HEAP_TYPE_FB = 11,
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+};
+#define ION_HEAP_MULTIMEDIA_MASK (1 << ION_HEAP_TYPE_MULTIMEDIA)
+#define ION_HEAP_FB_MASK (1 << ION_HEAP_TYPE_FB)
+#define ION_NUM_HEAP_IDS sizeof(unsigned int) * 8
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/kernel-headers/linux/mtkfb.h b/kernel-headers/linux/mtkfb.h
new file mode 100644
index 0000000..bbd85ed
--- /dev/null
+++ b/kernel-headers/linux/mtkfb.h
@@ -0,0 +1,389 @@
+#ifndef __MTKFB_H
+#define __MTKFB_H
+
+#include "mtkfb_info.h"
+
+
+/**NOTICE:
+ * Must be consistent with bionic/libc/kernel/linux/common/mtkfb.h
+ */
+#define MTK_FB_NO_ION_FD ((int)(~0U>>1))
+#define MTK_FB_NO_USE_LAEYR_ID ((int)(~0U>>1))
+#define FBCAPS_GENERIC_MASK (0x00000fff)
+#define FBCAPS_LCDC_MASK (0x00fff000)
+#define FBCAPS_PANEL_MASK (0xff000000)
+#define FBCAPS_MANUAL_UPDATE (0x00001000)
+#define FBCAPS_SET_BACKLIGHT (0x01000000)
+#define MTKFB_ERROR_IS_EARLY_SUSPEND (0x12000000)
+//---------------------------------------------------------------------------
+/* IOCTL commands. */
+#define MTK_IOW(num, dtype) _IOW('O', num, dtype)
+#define MTK_IOR(num, dtype) _IOR('O', num, dtype)
+#define MTK_IOWR(num, dtype) _IOWR('O', num, dtype)
+#define MTK_IO(num) _IO('O', num)
+
+#define MTKFB_QUEUE_OVERLAY_CONFIG MTK_IOW(137, struct fb_overlay_config)
+// --------------------------------------------------------------------------
+#define MTKFB_SET_OVERLAY_LAYER MTK_IOW(0, struct fb_overlay_layer)
+#define MTKFB_TRIG_OVERLAY_OUT MTK_IO(1)
+#define MTKFB_SET_VIDEO_LAYERS MTK_IOW(2, struct fb_overlay_layer)
+#define MTKFB_CAPTURE_FRAMEBUFFER MTK_IOW(3, unsigned long)
+#define MTKFB_CONFIG_IMMEDIATE_UPDATE MTK_IOW(4, unsigned long)
+#define MTKFB_SET_MULTIPLE_LAYERS MTK_IOW(5, struct fb_overlay_layer)
+#define MTKFB_REGISTER_OVERLAYBUFFER MTK_IOW(6, struct fb_overlay_buffer_info)
+#define MTKFB_UNREGISTER_OVERLAYBUFFER MTK_IOW(7, unsigned int)
+#define MTKFB_SET_ORIENTATION MTK_IOW(8, unsigned long)
+#define MTKFB_FBLAYER_ENABLE MTK_IOW(9,unsigned int)
+#define MTKFB_LOCK_FRONT_BUFFER MTK_IO(10)
+#define MTKFB_UNLOCK_FRONT_BUFFER MTK_IO(11)
+#define MTKFB_POWERON MTK_IO(12)
+#define MTKFB_POWEROFF MTK_IO(13)
+
+// Fence/Ion, OVL decoupling
+#define MTKFB_PREPARE_OVERLAY_BUFFER MTK_IOW(14, struct fb_overlay_buffer)
+
+// S3D control
+#define MTKFB_SET_COMPOSING3D MTK_IOW(15, unsigned long)
+#define MTKFB_SET_S3D_FTM MTK_IOW(16, unsigned long)
+
+//FM De-sense for EM and Normal mode
+#define MTKFB_GET_DEFAULT_UPDATESPEED MTK_IOR(17, unsigned long)
+#define MTKFB_GET_CURR_UPDATESPEED MTK_IOR(18, unsigned long)
+#define MTKFB_CHANGE_UPDATESPEED MTK_IOW(19, unsigned long) //for EM, not called change writecycle because DPI change pll ckl
+#define MTKFB_GET_INTERFACE_TYPE MTK_IOR(20, unsigned long) ///0 DBI, 1 DPI, 2 MIPI
+#define MTKFB_GET_POWERSTATE MTK_IOR(21, unsigned long) ///0: power off 1: power on
+#define MTKFB_GET_DISPLAY_IF_INFORMATION MTK_IOR(22, mtk_dispif_info_t)
+#define MTKFB_AEE_LAYER_EXIST MTK_IOR(23, unsigned long) //called before SET_OVERLAY each time, if true, hwc will not use FB_LAYER again
+#define MTKFB_GET_OVERLAY_LAYER_INFO MTK_IOR(24, struct fb_overlay_layer_info)
+#define MTKFB_FACTORY_AUTO_TEST MTK_IOR(25, unsigned long)
+#define MTKFB_GET_FRAMEBUFFER_MVA MTK_IOR(26, unsigned int)
+#define MTKFB_SLT_AUTO_CAPTURE MTK_IOWR(27, struct fb_slt_catpure)
+
+/* Wearable */
+#define MTKFB_LCM_ALWAYS_ON_ENABLE MTK_IOW(80, unsigned int)
+#define MTKFB_SET_DISPLAY_POWER_MODE MTK_IOW(81, unsigned int)
+
+//error handling
+#define MTKFB_META_RESTORE_SCREEN MTK_IOW(101, unsigned long)
+#define MTKFB_ERROR_INDEX_UPDATE_TIMEOUT MTK_IO(103)
+#define MTKFB_ERROR_INDEX_UPDATE_TIMEOUT_AEE MTK_IO(104)
+
+/*restore bootlogo and charater in meta mode*/
+#define MTKFB_META_SHOW_BOOTLOGO MTK_IO(105)
+
+//Extension FB active option
+#define FB_ACTIVATE_NO_UPDATE 512 /* Skip frame update */
+
+//----------------------------------------------------------------------
+
+// --------------------------------------------------------------------------
+/**
+ * Just for mt6589 Platform
+ * @{
+ */
+#define MTKFB_GETVFRAMEPHYSICAL MTK_IOW(41, unsigned long)
+#define MTKFB_WAIT_OVERLAY_READY MTK_IO(42)
+#define MTKFB_GET_OVERLAY_LAYER_COUNT MTK_IOR(43, unsigned long)
+#define MTKFB_GET_VIDEOLAYER_SIZE MTK_IOR(44, struct fb_overlay_layer)
+#define MTKFB_CAPTURE_VIDEOBUFFER MTK_IOW(45, unsigned long)
+
+// --------------------------------------------------------------------------
+// Video Playback Mode
+#define MTKFB_TV_POST_VIDEO_BUFFER MTK_IOW(46, unsigned long)
+#define MTKFB_TV_LEAVE_VIDEO_PLAYBACK_MODE MTK_IOW(47, unsigned long)
+// For Factory Mode
+#define MTKFB_IS_TV_CABLE_PLUG_IN MTK_IOW(48, unsigned long)
+
+// --------------------------------------------------------------------------
+#define MTKFB_BOOTANIMATION MTK_IO(49)
+#define MTKFB_GETFPS MTK_IOW(50, unsigned long)
+#define MTKFB_VSYNC MTK_IO(51)
+
+//----------------------------------------------------------------------FM De-sense for EM and Normal mode
+#define MTKFB_FM_NOTIFY_FREQ MTK_IOW(52, unsigned long) //for Normal mode
+#define MTKFB_RESET_UPDATESPEED MTK_IO(53)
+#define MTKFB_SET_UI_LAYER_ALPHA MTK_IOW(54, unsigned long)
+#define MTKFB_SET_UI_LAYER_SRCKEY MTK_IOW(55, unsigned long)
+
+#define MTKFB_GET_MAX_DISPLAY_COUNT MTK_IOR(56, unsigned int)
+#define MTKFB_SET_FB_LAYER_SECURE MTK_IOW(57, int)
+/**
+ * @}
+ */
+//----------------------------------------------------------------------
+
+// --------------------------------------------------------------------------
+
+typedef enum
+{
+ MTK_FB_ORIENTATION_0 = 0,
+ MTK_FB_ORIENTATION_90 = 1,
+ MTK_FB_ORIENTATION_180 = 2,
+ MTK_FB_ORIENTATION_270 = 3,
+} MTK_FB_ORIENTATION;
+
+
+typedef enum
+{
+ MTK_FB_TV_SYSTEM_NTSC = 0,
+ MTK_FB_TV_SYSTEM_PAL = 1,
+} MTK_FB_TV_SYSTEM;
+
+
+typedef enum
+{
+ MTK_FB_TV_FMT_RGB565 = 0,
+ MTK_FB_TV_FMT_YUV420_SEQ = 1,
+ MTK_FB_TV_FMT_UYUV422 = 2,
+ MTK_FB_TV_FMT_YUV420_BLK = 3,
+} MTK_FB_TV_SRC_FORMAT;
+
+typedef enum
+{
+ LAYER_NORMAL_BUFFER = 0,
+ LAYER_SECURE_BUFFER = 1,
+ LAYER_PROTECTED_BUFFER = 2,
+ LAYER_SECURE_BUFFER_WITH_ALIGN = 0x10001, // the higher 16 bits =1 for adding 64 bytes alignment
+} MTK_FB_OVL_LAYER_SECURE_MODE;
+
+typedef struct _disp_dfo_item
+{
+ char name[32];
+ int value;
+} disp_dfo_item_t;
+
+// --------------------------------------------------------------------------
+struct fb_slt_catpure
+{
+ MTK_FB_FORMAT format;
+ volatile char* outputBuffer;
+ unsigned int wdma_width;
+ unsigned int wdma_height;
+};
+
+struct fb_scale
+{
+ unsigned int xscale, yscale;
+};
+
+struct fb_frame_offset
+{
+ unsigned int idx;
+ unsigned long offset;
+};
+
+struct fb_update_window
+{
+ unsigned int x, y;
+ unsigned int width, height;
+};
+
+typedef enum
+{
+ LAYER_2D = 0,
+ LAYER_3D_SBS_0 = 0x1,
+ LAYER_3D_SBS_90 = 0x2,
+ LAYER_3D_SBS_180 = 0x3,
+ LAYER_3D_SBS_270 = 0x4,
+ LAYER_3D_TAB_0 = 0x10,
+ LAYER_3D_TAB_90 = 0x20,
+ LAYER_3D_TAB_180 = 0x30,
+ LAYER_3D_TAB_270 = 0x40,
+} MTK_FB_LAYER_TYPE;
+
+typedef enum
+{
+ DISP_DIRECT_LINK_MODE,
+ DISP_DECOUPLE_MODE
+} MTK_DISP_MODE;
+
+struct fb_overlay_mode
+{
+ MTK_DISP_MODE mode;
+};
+
+typedef enum // map sessions to scenairos in kernel driver
+{
+ DISP_SESSION_LCM = 1<<0, // DSI0
+ DISP_SESSION_MEM = 1<<1, // OVL0->WDMA0
+ DISP_SESSION_WFD = 1<<2, // Extention mode, Dst buf is provided by user, for Wifi Display or other purpose
+ DISP_SESSION_MHL = 1<<3, // DPI
+ DISP_SESSION_LCM1 = 1<<4, // DSI1
+ DISP_SESSION_MEM1 = 1<<5, // OVL1->WDMA1
+ //TODO:can be extended with other Session Id
+ SESSION_MASK = 0xff&~(1<<6)
+} MTK_DISP_SESSION;
+
+struct fb_overlay_session
+{
+ unsigned int session; // one or more @MTK_DISP_SESSION combined
+};
+
+struct fb_overlay_decouple
+{
+ MTK_DISP_MODE mode;
+ unsigned int session;
+};
+
+struct fb_overlay_buffer
+{
+ // Input
+ int layer_id;
+ unsigned int layer_en;
+ int ion_fd;
+ unsigned int cache_sync;
+ // Output
+ unsigned int index;
+ int fence_fd;
+};
+
+struct fb_overlay_layer
+{
+ unsigned int layer_id;
+ unsigned int layer_enable;
+
+ void* src_base_addr;
+ void* src_phy_addr;
+ unsigned int src_direct_link;
+ MTK_FB_FORMAT src_fmt;
+ unsigned int src_use_color_key;
+ unsigned int src_color_key;
+ unsigned int src_pitch;
+ unsigned int src_offset_x, src_offset_y;
+ unsigned int src_width, src_height;
+
+ unsigned int tgt_offset_x, tgt_offset_y;
+ unsigned int tgt_width, tgt_height;
+ MTK_FB_ORIENTATION layer_rotation;
+ MTK_FB_LAYER_TYPE layer_type;
+ MTK_FB_ORIENTATION video_rotation;
+
+ unsigned int isTdshp; // set to 1, will go through tdshp first, then layer blending, then to color
+
+ int next_buff_idx;
+ int identity;
+ int connected_type;
+ unsigned int security;
+ unsigned int alpha_enable;
+ unsigned int alpha;
+ int fence_fd;
+ int ion_fd; //CL 2340210
+};
+
+struct fb_overlay_config
+{
+ int fence;
+ int time;
+ struct fb_overlay_layer layers[4];
+};
+
+struct fb_overlay_buffer_info
+{
+ unsigned int src_vir_addr;
+ unsigned int size;
+};
+
+struct fb_overlay_layer_info
+{
+ unsigned int layer_id;
+ unsigned int layer_enabled; // TO BE DEL
+ unsigned int curr_en;
+ unsigned int next_en;
+ unsigned int hw_en;
+ int curr_idx;
+ int next_idx;
+ int hw_idx;
+ int curr_identity;
+ int next_identity;
+ int hw_identity;
+ int curr_conn_type;
+ int next_conn_type;
+ int hw_conn_type;
+ MTK_FB_ORIENTATION layer_rotation;
+};
+// --------------------------------------------------------------------------
+
+struct fb_post_video_buffer
+{
+ void* phy_addr;
+ void* vir_addr;
+ MTK_FB_TV_SRC_FORMAT format;
+ unsigned int width, height;
+};
+
+#ifdef __KERNEL__
+
+#include <linux/completion.h>
+#include <linux/interrupt.h>
+#include <linux/workqueue.h>
+
+#include <linux/version.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0))
+#include <linux/sw_sync.h>
+#else
+#include <../drivers/staging/android/sw_sync.h>
+#endif
+
+
+#define MTKFB_DRIVER "mtkfb"
+
+enum mtkfb_state
+{
+ MTKFB_DISABLED = 0,
+ MTKFB_SUSPENDED = 99,
+ MTKFB_ACTIVE = 100
+};
+
+typedef enum
+{
+ MTKFB_LAYER_ENABLE_DIRTY = (1 << 0),
+ MTKFB_LAYER_FORMAT_DIRTY = (1 << 1),
+ MTKFB_LAYER_SET_DIRTY = (1 << 2),
+} MTKFB_LAYER_CONFIG_DIRTY;
+
+typedef struct
+{
+ struct work_struct work;
+ struct list_head list;
+ struct fb_overlay_config config;
+ struct sync_fence *fences[4];
+ struct ion_handle *ion_handles[4];
+ void *dev;
+} update_ovls_work_t;
+
+struct mtkfb_device
+{
+ int state;
+ void *fb_va_base; /* MPU virtual address */
+ dma_addr_t fb_pa_base; /* Bus physical address */
+ unsigned long fb_size_in_byte;
+ void *ovl_va_base; /* MPU virtual address */
+ dma_addr_t ovl_pa_base; /* Bus physical address */
+ unsigned long ovl_size_in_byte;
+
+ unsigned long layer_enable;
+ MTK_FB_FORMAT *layer_format;
+ unsigned int layer_config_dirty;
+
+ int xscale, yscale, mirror; /* transformations.
+ rotate is stored in fb_info->var */
+ u32 pseudo_palette[17];
+
+ struct fb_info *fb_info; /* Linux fbdev framework data */
+ struct device *dev;
+
+ /* Android native fence support */
+ struct workqueue_struct *update_ovls_wq;
+ struct mutex timeline_lock;
+ struct sw_sync_timeline *timeline;
+ int timeline_max;
+ struct list_head pending_configs; //CL2340210
+ struct ion_client *ion_client;
+};
+
+#endif /* __KERNEL__ */
+
+extern long hdmi_handle_cmd(unsigned int cmd, unsigned long arg);
+
+
+#endif /* __MTKFB_H */
diff --git a/kernel-headers/linux/mtkfb_info.h b/kernel-headers/linux/mtkfb_info.h
new file mode 100644
index 0000000..574c6fc
--- /dev/null
+++ b/kernel-headers/linux/mtkfb_info.h
@@ -0,0 +1,90 @@
+#ifndef __MTKFB_INFO_H__
+#define __MTKFB_INFO_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef enum
+{
+ DISPIF_TYPE_DBI = 0,
+ DISPIF_TYPE_DPI,
+ DISPIF_TYPE_DSI,
+ DISPIF_TYPE_DPI0,
+ DISPIF_TYPE_DPI1,
+ DISPIF_TYPE_DSI0,
+ DISPIF_TYPE_DSI1,
+ HDMI = 7,
+ HDMI_SMARTBOOK,
+ MHL,
+ DISPIF_TYPE_EPD
+} MTKFB_DISPIF_TYPE;
+
+typedef enum
+{
+ MTKFB_DISPIF_PRIMARY_LCD = 0,
+ MTKFB_DISPIF_HDMI,
+ MTKFB_DISPIF_EPD,
+ MTKFB_MAX_DISPLAY_COUNT
+} MTKFB_DISPIF_DEVICE_TYPE;
+
+typedef enum
+{
+ DISPIF_FORMAT_RGB565 = 0,
+ DISPIF_FORMAT_RGB666,
+ DISPIF_FORMAT_RGB888
+} MTKFB_DISPIF_FORMAT;
+
+
+typedef enum
+{
+ DISPIF_MODE_VIDEO = 0,
+ DISPIF_MODE_COMMAND
+} MTKFB_DISPIF_MODE;
+
+typedef struct mtk_dispif_info {
+ unsigned int display_id;
+ unsigned int isHwVsyncAvailable;
+ MTKFB_DISPIF_TYPE displayType;
+ unsigned int displayWidth;
+ unsigned int displayHeight;
+ unsigned int displayFormat;
+ MTKFB_DISPIF_MODE displayMode;
+ unsigned int vsyncFPS;
+ unsigned int physicalWidth;
+ unsigned int physicalHeight;
+ unsigned int isConnected;
+ unsigned int lcmOriginalWidth; // this value is for DFO Multi-Resolution feature, which stores the original LCM Wdith
+ unsigned int lcmOriginalHeight; // this value is for DFO Multi-Resolution feature, which stores the original LCM Height
+} mtk_dispif_info_t;
+
+#define MAKE_MTK_FB_FORMAT_ID(id, bpp) (((id) << 8) | (bpp))
+
+typedef enum
+{
+ MTK_FB_FORMAT_UNKNOWN = 0,
+
+ MTK_FB_FORMAT_RGB565 = MAKE_MTK_FB_FORMAT_ID(1, 2),
+ MTK_FB_FORMAT_RGB888 = MAKE_MTK_FB_FORMAT_ID(2, 3),
+ MTK_FB_FORMAT_BGR888 = MAKE_MTK_FB_FORMAT_ID(3, 3),
+ MTK_FB_FORMAT_ARGB8888 = MAKE_MTK_FB_FORMAT_ID(4, 4),
+ MTK_FB_FORMAT_ABGR8888 = MAKE_MTK_FB_FORMAT_ID(5, 4),
+ MTK_FB_FORMAT_YUV422 = MAKE_MTK_FB_FORMAT_ID(6, 2),
+ MTK_FB_FORMAT_XRGB8888 = MAKE_MTK_FB_FORMAT_ID(7, 4),
+ MTK_FB_FORMAT_XBGR8888 = MAKE_MTK_FB_FORMAT_ID(8, 4),
+ MTK_FB_FORMAT_UYVY = MAKE_MTK_FB_FORMAT_ID(9, 2),
+ MTK_FB_FORMAT_YUV420_P = MAKE_MTK_FB_FORMAT_ID(10, 2),
+ MTK_FB_FORMAT_YUY2 = MAKE_MTK_FB_FORMAT_ID(11, 2),
+ MTK_FB_FORMAT_BPP_MASK = 0xFF,
+} MTK_FB_FORMAT;
+
+#define GET_MTK_FB_FORMAT_BPP(f) ((f) & MTK_FB_FORMAT_BPP_MASK)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __DISP_DRV_H__
+
diff --git a/kernel-headers/linux/mtkfb_vsync.h b/kernel-headers/linux/mtkfb_vsync.h
new file mode 100644
index 0000000..f0802da
--- /dev/null
+++ b/kernel-headers/linux/mtkfb_vsync.h
@@ -0,0 +1,17 @@
+#ifndef __MTKFB_VSYNC_H__
+#define __MTKFB_VSYNC_H__
+
+
+#define MTKFB_VSYNC_DEVNAME "mtkfb_vsync"
+
+#define MTKFB_VSYNC_IOCTL_MAGIC 'V'
+
+typedef enum
+{
+ MTKFB_VSYNC_SOURCE_LCM = 0,
+ MTKFB_VSYNC_SOURCE_HDMI = 1,
+} vsync_src;
+
+#define MTKFB_VSYNC_IOCTL _IOW(MTKFB_VSYNC_IOCTL_MAGIC, 1, vsync_src)
+
+#endif //MTKFB_VSYNC_H
diff --git a/kernel-headers/linux/rrc_drv.h b/kernel-headers/linux/rrc_drv.h
new file mode 100644
index 0000000..3b7ff83
--- /dev/null
+++ b/kernel-headers/linux/rrc_drv.h
@@ -0,0 +1,74 @@
+#include <linux/ioctl.h>
+
+#ifndef __RRC_DRV_H__
+#define __RRC_DRV_H__
+
+
+
+typedef struct {
+
+ unsigned int scenario;
+ unsigned int enable;
+ /* unsigned int pid; */
+ /* unsigned int *maxSafeSize; */
+ /* unsigned int *result; */
+
+} RRC_DRV_DATA;
+
+
+typedef enum {
+
+ RRC_DRV_TYPE_NONE = 0,
+ RRC_DRV_TYPE_CAMERA_PREVIEW ,
+ RRC_DRV_TYPE_CAMERA_ZSD ,
+ RRC_DRV_TYPE_CAMERA_CAPTURE ,
+ RRC_DRV_TYPE_CAMERA_ICFP ,
+ RRC_DRV_TYPE_VIDEO_NORMAL ,
+ RRC_DRV_TYPE_VIDEO_SWDEC_PLAYBACK ,
+ RRC_DRV_TYPE_VIDEO_PLAYBACK ,
+ RRC_DRV_TYPE_VIDEO_TELEPHONY ,
+ RRC_DRV_TYPE_VIDEO_RECORD ,
+ RRC_DRV_TYPE_VIDEO_RECORD_CAMERA ,
+ RRC_DRV_TYPE_VIDEO_RECORD_SLOWMOTION ,
+ RRC_DRV_TYPE_VIDEO_SNAPSHOT ,
+ RRC_DRV_TYPE_VIDEO_LIVE_PHOTO ,
+ RRC_DRV_TYPE_VIDEO_WIFI_DISPLAY ,
+
+ /* touch event */
+ RRC_DRV_TYPE_TOUCH_EVENT ,
+
+ RRC_DRV_TYPE_MAX_SIZE
+
+
+} RRC_DRV_SCENARIO_TYPE;
+
+
+typedef enum {
+ RRC_DRV_NONE = 0,
+ RRC_DRV_60Hz ,
+ RRC_DRV_120Hz
+
+
+} RRC_DRV_REFRESH_RATE;
+
+
+
+
+#define RRC_IOCTL_MAGIC 'x'
+
+/* #define JPEG_DEC_IOCTL_INIT _IO (ALMK_IOCTL_MAGIC, 1) */
+/* #define JPEG_DEC_IOCTL_CONFIG _IOW (ALMK_IOCTL_MAGIC, 2, JPEG_DEC_DRV_IN) */
+/* #define JPEG_DEC_IOCTL_START _IO (ALMK_IOCTL_MAGIC, 3) */
+/* #define JPEG_DEC_IOCTL_WAIT _IOWR(ALMK_IOCTL_MAGIC, 6, JPEG_DEC_DRV_OUT) */
+/* #define JPEG_DEC_IOCTL_DEINIT _IO (ALMK_IOCTL_MAGIC, 8) */
+
+#define RRC_IOCTL_CMD_INIT _IO(RRC_IOCTL_MAGIC, 11)
+#define RRC_IOCTL_CMD_SET_SCENARIO_TYPE _IOWR(RRC_IOCTL_MAGIC, 12, RRC_DRV_DATA)
+#define RRC_IOCTL_CMD_DEINIT _IO(RRC_IOCTL_MAGIC, 13)
+
+
+
+
+
+#endif
+
diff --git a/kernel-headers/linux/rtpm_prio.h b/kernel-headers/linux/rtpm_prio.h
new file mode 100644
index 0000000..70aa10e
--- /dev/null
+++ b/kernel-headers/linux/rtpm_prio.h
@@ -0,0 +1,83 @@
+#ifndef __KERNEL_RTPM_PRIO__
+#define __KERNEL_RTPM_PRIO__
+
+#define CONFIG_MT_RT_MONITOR
+#ifdef CONFIG_MT_RT_MONITOR
+#define MT_ALLOW_RT_PRIO_BIT 0x10000000
+#else
+#define MT_ALLOW_RT_PRIO_BIT 0x0
+#endif
+
+#define REG_RT_PRIO(x) ((x) | MT_ALLOW_RT_PRIO_BIT)
+
+/***********************************************************************
+ * Processes scheduled under one of the real-time policies (SCHED_FIFO, SCHED_RR)
+ * have a sched_priority value in the range:
+ * 1 (low) to 99 (high).
+************************************************************************/
+////////////////////////////////////////////////////////////////////////
+//DEFINE MM GROUP PRIORITY
+#define RTPM_PRIO_MM_GROUP_BASE (10)
+#define RTPM_PRIO_MM_GROUP_A (RTPM_PRIO_MM_GROUP_BASE+0)
+#define RTPM_PRIO_MM_GROUP_B (RTPM_PRIO_MM_GROUP_BASE+10)
+#define RTPM_PRIO_MM_GROUP_C (RTPM_PRIO_MM_GROUP_BASE+20)
+#define RTPM_PRIO_MM_GROUP_D (RTPM_PRIO_MM_GROUP_BASE+30)
+#define RTPM_PRIO_MM_GROUP_E (RTPM_PRIO_MM_GROUP_BASE+40)
+#define RTPM_PRIO_MM_GROUP_F (RTPM_PRIO_MM_GROUP_BASE+50)
+#define RTPM_PRIO_MM_GROUP_G (RTPM_PRIO_MM_GROUP_BASE+60)
+#define RTPM_PRIO_MM_GROUP_H (RTPM_PRIO_MM_GROUP_BASE+70)
+#define RTPM_PRIO_MM_GROUP_I (RTPM_PRIO_MM_GROUP_BASE+80)
+
+////////////////////////////////////////////////////////////////////////
+// DEFIN MTK RT PRIORITY
+
+#define RTPM_PRIO_CPU_CALLBACK REG_RT_PRIO(98)
+#define RTPM_PRIO_SWLOCKUP REG_RT_PRIO(98)
+#define RTPM_PRIO_AED REG_RT_PRIO(28)
+#define RTPM_PRIO_WDT REG_RT_PRIO(99)
+
+#define RTPM_PRIO_TPD REG_RT_PRIO(4)
+#define RTPM_PRIO_KSDIOIRQ REG_RT_PRIO(1)
+
+#define RTPM_PRIO_AUDIO_PLAYBACK REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+5)
+#define RTPM_PRIO_VIDEO_PLAYBACK_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+5) //TimeEventQueue
+#define RTPM_PRIO_SCRN_UPDATE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+4)
+#define RTPM_PRIO_AUDIO_COMMAND REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+2)
+#define RTPM_PRIO_AUDIO_CCCI_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+2)
+
+#define RTPM_PRIO_CAMERA_TOPBASE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+1)
+#define RTPM_PRIO_CAMERA_PREVIEW REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+1)
+#define RTPM_PRIO_CAMERA_COMPRESS REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
+
+#define RTPM_PRIO_MATV_AUDIOPLAYER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
+#define RTPM_PRIO_FM_AUDIOPLAYER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
+#define RTPM_PRIO_AUDIO_I2S REG_RT_PRIO(RTPM_PRIO_MM_GROUP_I+0)
+
+#define RTPM_PRIO_CAMERA_DISPLAY REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+9)
+#define RTPM_PRIO_CAMERA_SHUTTER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+9)
+#define RTPM_PRIO_CAMERA_RECORD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+9)
+#define RTPM_PRIO_FB_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+7)
+#define RTPM_PRIO_VSYNC_THREAD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+5)
+#define RTPM_PRIO_SURFACEFLINGER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_H+4)
+
+#define RTPM_PRIO_VIDEO_YUV_BUFFER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+8)
+#define RTPM_PRIO_AUDIO_RECORD REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+7)
+#define RTPM_PRIO_OMX_AUDIO REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+6)
+#define RTPM_PRIO_OMX_CMD_AUDIO REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+6)
+#define RTPM_PRIO_OMX_VIDEO_ENCODE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+5)
+#define RTPM_PRIO_OMX_VIDEO REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+5)
+#define RTPM_PRIO_OMX_VIDEO_DECODE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+4)
+
+#define RTPM_PRIO_VIDEO_BS_BUFFER REG_RT_PRIO(RTPM_PRIO_MM_GROUP_G+3)
+#define RTPM_PRIO_MIDI_FILE REG_RT_PRIO(RTPM_PRIO_MM_GROUP_C+0)
+
+#define RTPM_PRIO_AUDIOTRACK_THREAD REG_RT_PRIO(1)
+#define RTPM_PRIO_GPS_DRIVER REG_RT_PRIO(1)
+// Total
+#define RTPM_PRIO_NUM 30
+////////////////////////////////////////////////////////////////////////////////
+//Removed
+//#define RTPM_PRIO_FB_THREAD REG_RT_PRIO(87)
+//#define RTPM_PRIO_SURFACE_OUT REG_RT_PRIO(80)
+
+#endif
diff --git a/kernel-headers/linux/sensors_io.h b/kernel-headers/linux/sensors_io.h
new file mode 100644
index 0000000..a84e5ff
--- /dev/null
+++ b/kernel-headers/linux/sensors_io.h
@@ -0,0 +1,166 @@
+/*
+*
+* (C) Copyright 2008
+* MediaTek <www.mediatek.com>
+*
+* Sensors IO command file for MT6516
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+#ifndef SENSORS_IO_H
+#define SENSORS_IO_H
+
+#include <linux/ioctl.h>
+
+typedef struct {
+ unsigned short x; /**< X axis */
+ unsigned short y; /**< Y axis */
+ unsigned short z; /**< Z axis */
+} GSENSOR_VECTOR3D;
+
+typedef struct{
+ int x;
+ int y;
+ int z;
+}SENSOR_DATA;
+
+
+#define GSENSOR 0x85
+#define GSENSOR_IOCTL_INIT _IO(GSENSOR, 0x01)
+#define GSENSOR_IOCTL_READ_CHIPINFO _IOR(GSENSOR, 0x02, int)
+#define GSENSOR_IOCTL_READ_SENSORDATA _IOR(GSENSOR, 0x03, int)
+#define GSENSOR_IOCTL_READ_OFFSET _IOR(GSENSOR, 0x04, GSENSOR_VECTOR3D)
+#define GSENSOR_IOCTL_READ_GAIN _IOR(GSENSOR, 0x05, GSENSOR_VECTOR3D)
+#define GSENSOR_IOCTL_READ_RAW_DATA _IOR(GSENSOR, 0x06, int)
+#define GSENSOR_IOCTL_SET_CALI _IOW(GSENSOR, 0x06, SENSOR_DATA)
+#define GSENSOR_IOCTL_GET_CALI _IOW(GSENSOR, 0x07, SENSOR_DATA)
+#define GSENSOR_IOCTL_CLR_CALI _IO(GSENSOR, 0x08)
+
+
+
+
+/* IOCTLs for Msensor misc. device library */
+#define MSENSOR 0x83
+#define MSENSOR_IOCTL_INIT _IO(MSENSOR, 0x01)
+#define MSENSOR_IOCTL_READ_CHIPINFO _IOR(MSENSOR, 0x02, int)
+#define MSENSOR_IOCTL_READ_SENSORDATA _IOR(MSENSOR, 0x03, int)
+#define MSENSOR_IOCTL_READ_POSTUREDATA _IOR(MSENSOR, 0x04, int)
+#define MSENSOR_IOCTL_READ_CALIDATA _IOR(MSENSOR, 0x05, int)
+#define MSENSOR_IOCTL_READ_CONTROL _IOR(MSENSOR, 0x06, int)
+#define MSENSOR_IOCTL_SET_CONTROL _IOW(MSENSOR, 0x07, int)
+#define MSENSOR_IOCTL_SET_MODE _IOW(MSENSOR, 0x08, int)
+#define MSENSOR_IOCTL_SET_POSTURE _IOW(MSENSOR, 0x09, int)
+#define MSENSOR_IOCTL_SET_CALIDATA _IOW(MSENSOR, 0x0a, int)
+#define MSENSOR_IOCTL_SENSOR_ENABLE _IOW(MSENSOR, 0x51, int)
+#define MSENSOR_IOCTL_READ_FACTORY_SENSORDATA _IOW(MSENSOR, 0x52, int)
+
+
+/* IOCTLs for AKM library */
+#define ECS_IOCTL_WRITE _IOW(MSENSOR, 0x0b, char*)
+#define ECS_IOCTL_READ _IOWR(MSENSOR, 0x0c, char*)
+#define ECS_IOCTL_RESET _IO(MSENSOR, 0x0d) /* NOT used in AK8975 */
+#define ECS_IOCTL_SET_MODE _IOW(MSENSOR, 0x0e, short)
+#define ECS_IOCTL_GETDATA _IOR(MSENSOR, 0x0f, char[SENSOR_DATA_SIZE])
+#define ECS_IOCTL_SET_YPR _IOW(MSENSOR, 0x10, short[12])
+#define ECS_IOCTL_GET_OPEN_STATUS _IOR(MSENSOR, 0x11, int)
+#define ECS_IOCTL_GET_CLOSE_STATUS _IOR(MSENSOR, 0x12, int)
+#define ECS_IOCTL_GET_OSENSOR_STATUS _IOR(MSENSOR, 0x13, int)
+#define ECS_IOCTL_GET_DELAY _IOR(MSENSOR, 0x14, short)
+#define ECS_IOCTL_GET_PROJECT_NAME _IOR(MSENSOR, 0x15, char[64])
+#define ECS_IOCTL_GET_MATRIX _IOR(MSENSOR, 0x16, short [4][3][3])
+#define ECS_IOCTL_GET_LAYOUT _IOR(MSENSOR, 0x17, int[3])
+
+#define ECS_IOCTL_GET_OUTBIT _IOR(MSENSOR, 0x23, char)
+#define ECS_IOCTL_GET_ACCEL _IOR(MSENSOR, 0x24, short[3])
+#define MMC31XX_IOC_RM _IO(MSENSOR, 0x25)
+#define MMC31XX_IOC_RRM _IO(MSENSOR, 0x26)
+/* IOCTLs for akm09911 device */
+#define ECS_IOCTL_GET_INFO _IOR(MSENSOR, 0x27, unsigned char[AKM_SENSOR_INFO_SIZE])
+#define ECS_IOCTL_GET_CONF _IOR(MSENSOR, 0x28, unsigned char[AKM_SENSOR_CONF_SIZE])
+#define ECS_IOCTL_SET_YPR_09911 _IOW(MSENSOR, 0x29, int[26])
+#define ECS_IOCTL_GET_DELAY_09911 _IOR(MSENSOR, 0x30, int64_t[3])
+#define ECS_IOCTL_GET_LAYOUT_09911 _IOR(MSENSOR, 0x31, char)
+
+/* IOCTLs for MMC31XX device */
+#define MMC31XX_IOC_TM _IO(MSENSOR, 0x18)
+#define MMC31XX_IOC_SET _IO(MSENSOR, 0x19)
+#define MMC31XX_IOC_RESET _IO(MSENSOR, 0x1a)
+#define MMC31XX_IOC_READ _IOR(MSENSOR, 0x1b, int[3])
+#define MMC31XX_IOC_READXYZ _IOR(MSENSOR, 0x1c, int[3])
+
+#define ECOMPASS_IOC_GET_DELAY _IOR(MSENSOR, 0x1d, int)
+#define ECOMPASS_IOC_GET_MFLAG _IOR(MSENSOR, 0x1e, short)
+#define ECOMPASS_IOC_GET_OFLAG _IOR(MSENSOR, 0x1f, short)
+#define ECOMPASS_IOC_GET_OPEN_STATUS _IOR(MSENSOR, 0x20, int)
+#define ECOMPASS_IOC_SET_YPR _IOW(MSENSOR, 0x21, int[12])
+#define ECOMPASS_IOC_GET_LAYOUT _IOR(MSENSOR, 0X22, int)
+
+
+
+
+#define ALSPS 0X84
+#define ALSPS_SET_PS_MODE _IOW(ALSPS, 0x01, int)
+#define ALSPS_GET_PS_MODE _IOR(ALSPS, 0x02, int)
+#define ALSPS_GET_PS_DATA _IOR(ALSPS, 0x03, int)
+#define ALSPS_GET_PS_RAW_DATA _IOR(ALSPS, 0x04, int)
+#define ALSPS_SET_ALS_MODE _IOW(ALSPS, 0x05, int)
+#define ALSPS_GET_ALS_MODE _IOR(ALSPS, 0x06, int)
+#define ALSPS_GET_ALS_DATA _IOR(ALSPS, 0x07, int)
+#define ALSPS_GET_ALS_RAW_DATA _IOR(ALSPS, 0x08, int)
+/*-------------------yucong add-------------------------------------------*/
+#define ALSPS_GET_PS_TEST_RESULT _IOR(ALSPS, 0x09, int)
+#define ALSPS_GET_ALS_TEST_RESULT _IOR(ALSPS, 0x0A, int)
+#define ALSPS_GET_PS_THRESHOLD_HIGH _IOR(ALSPS, 0x0B, int)
+#define ALSPS_GET_PS_THRESHOLD_LOW _IOR(ALSPS, 0x0C, int)
+#define ALSPS_GET_ALS_THRESHOLD_HIGH _IOR(ALSPS, 0x0D, int)
+#define ALSPS_GET_ALS_THRESHOLD_LOW _IOR(ALSPS, 0x0E, int)
+#define ALSPS_IOCTL_CLR_CALI _IOW(ALSPS, 0x0F, int)
+#define ALSPS_IOCTL_GET_CALI _IOR(ALSPS, 0x10, int)
+#define ALSPS_IOCTL_SET_CALI _IOW(ALSPS, 0x11, int)
+#define ALSPS_SET_PS_THRESHOLD _IOW(ALSPS, 0x12, int)
+#define ALSPS_SET_ALS_THRESHOLD _IOW(ALSPS, 0x13, int)
+#define AAL_SET_ALS_MODE _IOW(ALSPS, 0x14,int)
+#define AAL_GET_ALS_MODE _IOR(ALSPS, 0x15,int)
+#define AAL_GET_ALS_DATA _IOR(ALSPS, 0x16,int)
+
+#define GYROSCOPE 0X86
+#define GYROSCOPE_IOCTL_INIT _IO(GYROSCOPE, 0x01)
+#define GYROSCOPE_IOCTL_SMT_DATA _IOR(GYROSCOPE, 0x02, int)
+#define GYROSCOPE_IOCTL_READ_SENSORDATA _IOR(GYROSCOPE, 0x03, int)
+#define GYROSCOPE_IOCTL_SET_CALI _IOW(GYROSCOPE, 0x04, SENSOR_DATA)
+#define GYROSCOPE_IOCTL_GET_CALI _IOW(GYROSCOPE, 0x05, SENSOR_DATA)
+#define GYROSCOPE_IOCTL_CLR_CALI _IO(GYROSCOPE, 0x06)
+#define GYROSCOPE_IOCTL_READ_SENSORDATA_RAW _IOR(GYROSCOPE, 0x07, int)
+#define GYROSCOPE_IOCTL_READ_TEMPERATURE _IOR(GYROSCOPE, 0x08, int)
+#define GYROSCOPE_IOCTL_GET_POWER_STATUS _IOR(GYROSCOPE, 0x09, int)
+
+#define BROMETER 0X87
+#define BAROMETER_IOCTL_INIT _IO(BROMETER, 0x01)
+#define BAROMETER_GET_PRESS_DATA _IOR(BROMETER, 0x02, int)
+#define BAROMETER_GET_TEMP_DATA _IOR(BROMETER, 0x03, int)
+#define BAROMETER_IOCTL_READ_CHIPINFO _IOR(BROMETER, 0x04, int)
+
+#define HEARTMONITOR 0x88
+#define HRM_IOCTL_INIT _IO(HEARTMONITOR, 0x01)
+#define HRM_READ_SENSOR_DATA _IOR(HEARTMONITOR, 0x02, int)
+
+#define HUMIDITY 0X89
+#define HUMIDITY_IOCTL_INIT _IO(HUMIDITY, 0x01)
+#define HUMIDITY_GET_HMDY_DATA _IOR(HUMIDITY, 0x02, int)
+#define HUMIDITY_GET_TEMP_DATA _IOR(HUMIDITY, 0x03, int)
+#define HUMIDITY_IOCTL_READ_CHIPINFO _IOR(HUMIDITY, 0x04, int)
+
+#endif
+
diff --git a/kernel-headers/linux/slab.h b/kernel-headers/linux/slab.h
new file mode 100644
index 0000000..f3c1408
--- /dev/null
+++ b/kernel-headers/linux/slab.h
@@ -0,0 +1,21 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _LINUX_SLAB_H
+#define _LINUX_SLAB_H
+#endif
diff --git a/kernel-headers/linux/vow.h b/kernel-headers/linux/vow.h
new file mode 100644
index 0000000..4b9a310
--- /dev/null
+++ b/kernel-headers/linux/vow.h
@@ -0,0 +1,108 @@
+#ifndef __VOW_H__
+#define __VOW_H__
+
+/***********************************************************************************
+** VOW Control Message
+************************************************************************************/
+#define VOW_DEVNAME "vow"
+#define VOW_IOC_MAGIC 'a'
+
+static char const *const kVOWDeviceName = "/dev/vow";
+
+#if 0
+//below is control message
+#define TEST_VOW_PRINT _IO(VOW_IOC_MAGIC, 0x00)
+#define VOWEINT_GET_BUFSIZE _IOW(VOW_IOC_MAGIC, 0x01, unsigned long)
+#define VOW_GET_STATUS _IOW(VOW_IOC_MAGIC, 0x02, unsigned long)
+#define VOW_SET_CONTROL _IOW(VOW_IOC_MAGIC, 0x03, unsigned long)
+#define VOW_SET_SPEAKER_MODEL _IOW(VOW_IOC_MAGIC, 0x04, unsigned long)
+#define VOW_CLR_SPEAKER_MODEL _IOW(VOW_IOC_MAGIC, 0x05, unsigned long)
+#define VOW_SET_INIT_MODEL _IOW(VOW_IOC_MAGIC, 0x06, unsigned long)
+#define VOW_SET_FIR_MODEL _IOW(VOW_IOC_MAGIC, 0x07, unsigned long)
+#define VOW_SET_NOISE_MODEL _IOW(VOW_IOC_MAGIC, 0x08, unsigned long)
+#define VOW_SET_APREG_INFO _IOW(VOW_IOC_MAGIC, 0x09, unsigned long)
+#define VOW_SET_REG_MODE _IOW(VOW_IOC_MAGIC, 0x0A, unsigned long)
+#define VOW_FAKE_WAKEUP _IOW(VOW_IOC_MAGIC, 0x0B, unsigned long)
+#else
+
+
+//below is control message
+#define TEST_VOW_PRINT 0x00
+#define VOWEINT_GET_BUFSIZE 0x01
+#define VOW_GET_STATUS 0x02
+#define VOW_SET_CONTROL 0x03
+#define VOW_SET_SPEAKER_MODEL 0x04
+#define VOW_CLR_SPEAKER_MODEL 0x05
+#define VOW_SET_INIT_MODEL 0x06
+#define VOW_SET_FIR_MODEL 0x07
+#define VOW_SET_NOISE_MODEL 0x08
+#define VOW_SET_APREG_INFO 0x09
+#define VOW_SET_REG_MODE 0x0A
+#define VOW_FAKE_WAKEUP 0x0B
+
+#endif
+
+
+
+/***********************************************************************************
+** Type Define
+************************************************************************************/
+enum VOW_Control_Cmd
+{
+ VOWControlCmd_Init = 0,
+ VOWControlCmd_ReadVoiceData,
+ VOWControlCmd_EnableDebug,
+ VOWControlCmd_DisableDebug,
+};
+
+typedef enum VOW_REG_MODE_T {
+ VOW_MODE_MD32_VOW = 0,
+ VOW_MODE_VOICECOMMAND,
+ VOW_MODE_MULTIPLE_KEY,
+ VOW_MODE_MULTIPLE_KEY_VOICECOMMAND
+}VOW_REG_MODE_T;
+
+typedef enum VOW_EINT_STATUS{
+ VOW_EINT_DISABLE = -2,
+ VOW_EINT_FAIL = -1,
+ VOW_EINT_PASS = 0,
+ VOW_EINT_RETRY = 1,
+ NUM_OF_VOW_EINT_STATUS
+}VOW_EINT_STATUS;
+
+typedef enum VOW_FLAG_TYPE{
+ VOW_FLAG_DEBUG,
+ VOW_FLAG_PRE_LEARN,
+ VOW_FLAG_DMIC_LOWPOWER,
+ NUM_OF_VOW_FLAG_TYPE
+}VOW_FLAG_TYPE;
+
+typedef enum VOW_PWR_STATUS{
+ VOW_PWR_OFF = 0,
+ VOW_PWR_ON = 1,
+ NUM_OF_VOW_PWR_STATUS
+}VOW_PWR_STATUS;
+
+typedef enum VOW_IPI_RESULT
+{
+ VOW_IPI_SUCCESS = 0,
+ VOW_IPI_CLR_SMODEL_ID_NOTMATCH,
+ VOW_IPI_SET_SMODEL_NO_FREE_SLOT,
+}VOW_IPI_RESULT;
+/*
+struct VOW_EINT_DATA_STRUCT{
+ int size; // size of data section
+ int eint_status; // eint status
+ int id;
+ char *data; // reserved for future extension
+}VOW_EINT_DATA_STRUCT;
+*/
+
+typedef struct{
+ long id;
+ long addr;
+ long size;
+ void *data;
+}VOW_MODEL_INFO_T;
+
+#endif //__VOW_H__
diff --git a/kernel-headers/sync_write.h b/kernel-headers/sync_write.h
new file mode 100644
index 0000000..e4c6e85
--- /dev/null
+++ b/kernel-headers/sync_write.h
@@ -0,0 +1,80 @@
+#ifndef __MT65XX_SYNC_WRITE_H__
+#define __MT65XX_SYNC_WRITE_H__
+
+#define mt_reg_sync_writel(v, a) mt65xx_reg_sync_writel(v, a)
+#define mt_reg_sync_writew(v, a) mt65xx_reg_sync_writew(v, a)
+#define mt_reg_sync_writeb(v, a) mt65xx_reg_sync_writeb(v, a)
+
+#if defined(__KERNEL__)
+
+#include <linux/io.h>
+#include <asm/cacheflush.h>
+#include <asm/system.h>
+
+/*
+ * Define macros.
+ */
+
+#define mt65xx_reg_sync_writel(v, a) \
+ do { \
+ writel((v), (a)); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writew(v, a) \
+ do { \
+ writew((v), (a)); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writeb(v, a) \
+ do { \
+ writeb((v), (a)); \
+ dsb(); \
+ } while (0)
+
+#else /* __KERNEL__ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+
+#define dsb() \
+ do { \
+ __asm__ __volatile__ ("dsb sy" : : : "memory"); \
+ } while (0)
+
+#define outer_sync() \
+ do { \
+ int fd; \
+ char buf[] = "1"; \
+ fd = open("/sys/bus/platform/drivers/outercache/outer_sync", O_WRONLY); \
+ if (fd != -1) { \
+ write(fd, buf, strlen(buf)); \
+ close(fd); \
+ } \
+ } while (0)
+
+#define mt65xx_reg_sync_writel(v, a) \
+ do { \
+ *(volatile unsigned int *)(a) = (v); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writew(v, a) \
+ do { \
+ *(volatile unsigned short *)(a) = (v); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writeb(v, a) \
+ do { \
+ *(volatile unsigned char *)(a) = (v); \
+ dsb(); \
+ } while (0)
+
+#endif /* __KERNEL__ */
+
+#endif /* !__MT65XX_SYNC_WRITE_H__ */
diff --git a/kernel-headers/val_api_private.h b/kernel-headers/val_api_private.h
new file mode 100644
index 0000000..4e41082
--- /dev/null
+++ b/kernel-headers/val_api_private.h
@@ -0,0 +1,57 @@
+#ifndef _VAL_API_PRIVATE_H_
+#define _VAL_API_PRIVATE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_private.h"
+#include "val_api_public.h"
+#include "libmtk_cipher_export.h"
+
+
+VAL_RESULT_T eValInit(VAL_HANDLE_T *a_phHalHandle);
+VAL_RESULT_T eValDeInit(VAL_HANDLE_T *a_phHalHandle);
+
+VAL_RESULT_T eVideoIntMemAlloc(VAL_INTMEM_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoIntMemFree(VAL_INTMEM_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+VAL_RESULT_T eVideoCreateEvent(VAL_EVENT_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoSetEvent(VAL_EVENT_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoCloseEvent(VAL_EVENT_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoWaitEvent(VAL_EVENT_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+VAL_RESULT_T eVideoCreateMutex(VAL_MUTEX_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoCloseMutex(VAL_MUTEX_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoWaitMutex(VAL_MUTEX_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoReleaseMutex(VAL_MUTEX_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+VAL_RESULT_T eVideoMMAP(VAL_MMAP_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+VAL_RESULT_T eVideoUnMMAP(VAL_MMAP_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+VAL_RESULT_T eVideoInitLockHW(VAL_VCODEC_OAL_HW_REGISTER_T *prParam, int size);
+VAL_RESULT_T eVideoDeInitLockHW(VAL_VCODEC_OAL_HW_REGISTER_T *prParam, int size);
+
+VAL_RESULT_T eVideoVCodecCoreLoading(int CPUid, int *Loading);
+VAL_RESULT_T eVideoVCodecCoreNumber(int *CPUNums);
+
+VAL_RESULT_T eVideoConfigMCIPort(VAL_UINT32_T u4PortConfig, VAL_UINT32_T *pu4PortResult, VAL_MEM_CODEC_T eMemCodec);
+
+VAL_UINT32_T eVideoHwM4UEnable(VAL_BOOL_T bEnable); /* MTK_SEC_VIDEO_PATH_SUPPORT */
+VAL_UINT32_T eVideoLibDecrypt(VIDEO_ENCRYPT_CODEC_T a_eVIDEO_ENCRYPT_CODEC);
+
+/* for DirectLink Meta Mode + */
+VAL_RESULT_T eVideoAllocMetaHandleList(VAL_HANDLE_T *a_MetaHandleList);
+VAL_RESULT_T eVideoGetBufInfoFromMetaHandle(
+ VAL_HANDLE_T a_MetaHandleList,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+VAL_RESULT_T eVideoFreeMetaHandleList(VAL_HANDLE_T a_MetaHandleList);
+/* for DirectLink Meta Mode - */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_API_PRIVATE_H_ */
diff --git a/kernel-headers/val_api_public.h b/kernel-headers/val_api_public.h
new file mode 100644
index 0000000..9af8887
--- /dev/null
+++ b/kernel-headers/val_api_public.h
@@ -0,0 +1,402 @@
+#ifndef _VAL_API_PUBLIC_H_
+#define _VAL_API_PUBLIC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_public.h"
+
+
+/**
+ * @par Function
+ * eVideoInitMVA
+ * @par Description
+ * Alloc the handle for MVA usage
+ * @param
+ * a_pvHandle [IN] The handle for MVA usage
+ * @par Returns
+ * VAL_UINT32_T [OUT] Non-Used
+ */
+VAL_UINT32_T eVideoInitMVA(VAL_VOID_T **a_pvHandle);
+
+
+/**
+ * @par Function
+ * eVideoAllocMVA
+ * @par Description
+ * Use the given va and size, to get the MVA
+ * @param
+ * a_pvHandle [IN] The handle for MVA usage
+ * @param
+ * a_u4Va [IN] The given va used to get MVA
+ * @param
+ * ap_u4Pa [OUT] The MVA
+ * @param
+ * a_u4Size [IN] The given size used to get MVA
+ * @param
+ * a_pvM4uConfig [IN] The MVA config info
+ * @par Returns
+ * VAL_UINT32_T [OUT] Non-Used
+ */
+VAL_UINT32_T eVideoAllocMVA(
+ VAL_VOID_T *a_pvHandle,
+ VAL_UINT32_T a_u4Va,
+ VAL_UINT32_T *ap_u4Pa,
+ VAL_UINT32_T a_u4Size,
+ VAL_VCODEC_M4U_BUFFER_CONFIG_T * a_pvM4uConfig
+);
+
+/**
+ * @par Function
+ * eVideoFreeMVA
+ * @par Description
+ * Use the given va, MVA and size, to free the MVA
+ * @param
+ * a_pvHandle [IN] The handle for MVA usage
+ * @param
+ * a_u4Va [IN] The given va used to free MVA
+ * @param
+ * a_u4Pa [IN] The given MVA used to free MVA
+ * @param
+ * a_u4Size [IN] The given size used to get MVA
+ * @param
+ * a_pvM4uConfig [IN] The MVA config info
+ * @par Returns
+ * VAL_UINT32_T [OUT] Non-Used
+ */
+VAL_UINT32_T eVideoFreeMVA(
+ VAL_VOID_T *a_pvHandle,
+ VAL_UINT32_T a_u4Va,
+ VAL_UINT32_T a_u4Pa,
+ VAL_UINT32_T a_u4Size,
+ VAL_VCODEC_M4U_BUFFER_CONFIG_T * a_pvM4uConfig
+);
+
+
+/**
+ * @par Function
+ * eVideoDeInitMVA
+ * @par Description
+ * Free the handle for MVA usage
+ * @param
+ * a_pvHandle [IN] The handle for MVA usage
+ * @par Returns
+ * VAL_UINT32_T [OUT] Non-Used
+ */
+VAL_UINT32_T eVideoDeInitMVA(VAL_VOID_T *a_pvHandle);
+
+
+/**
+ * @par Function
+ * eVideoGetM4UModuleID
+ * @par Description
+ * Get the M4U module port ID
+ * @param
+ * u4MemType [IN] The memory usage for VENC or VDEC
+ * @par Returns
+ * VAL_UINT32_T [OUT] The M4U module port ID for VENC or VDEC
+ */
+VAL_INT32_T eVideoGetM4UModuleID(VAL_UINT32_T u4MemType);
+
+
+/**
+ * @par Function
+ * eVideoAtoi
+ * @par Description
+ * The abstraction layer for atoi() function
+ * @param
+ * a_prParam [IN] The structure contains used info for atoi()
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoAtoi(VAL_ATOI_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoStrStr
+ * @par Description
+ * The abstraction layer for strstr() function
+ * @param
+ * a_prParam [IN] The structure contains used info for strstr()
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoStrStr(VAL_STRSTR_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoFlushCache
+ * @par Description
+ * The flush cache usage function
+ * @param
+ * a_prParam [IN] The structure contains used info for flush cache
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @param
+ * optype [IN] 0 for flush all, 1 for flush by page
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_MEMORY for fail
+ */
+VAL_RESULT_T eVideoFlushCache(VAL_MEMORY_T *a_prParam, VAL_UINT32_T a_u4ParamSize, VAL_UINT32_T optype);
+
+
+/**
+ * @par Function
+ * eVideoInvalidateCache
+ * @par Description
+ * The invalidate cache usage function
+ * @param
+ * a_prParam [IN] The structure contains used info for invalidate cache
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @param
+ * optype [IN] 0 for flush all, 1 for invalidate by page
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_MEMORY for fail
+ */
+VAL_RESULT_T eVideoInvalidateCache(VAL_MEMORY_T *a_prParam, VAL_UINT32_T a_u4ParamSize, VAL_UINT32_T optype);
+
+
+/**
+ * @par Function
+ * eVideoMemAlloc
+ * @par Description
+ * The memory allocate usage function
+ * @param
+ * a_prParam [IN] The structure contains used info for allocate memory
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT]
+ * VAL_RESULT_NO_ERROR for success,
+ * VAL_RESULT_INVALID_MEMORY or VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoMemAlloc(VAL_MEMORY_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoMemFree
+ * @par Description
+ * The memory free usage function
+ * @param
+ * a_prParam [IN] The structure contains used info for free memory
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoMemFree(VAL_MEMORY_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoMemSet
+ * @par Description
+ * The memory set usage function
+ * @param
+ * a_prParam [IN] The structure contains used info for set memory
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @param
+ * a_u4Value [IN] The value for set to memory
+ * @param
+ * a_u4Size [IN] The size of "memory" want to be set
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoMemSet(
+ VAL_MEMORY_T *a_prParam,
+ VAL_UINT32_T a_u4ParamSize,
+ VAL_INT32_T a_u4Value,
+ VAL_UINT32_T a_u4Size
+);
+
+
+/**
+ * @par Function
+ * eVideoMemCpy
+ * @par Description
+ * The memory copy usage function
+ * @param
+ * a_prParamDst [IN] The structure contains destination memory info for copy memory
+ * @param
+ * a_u4ParamDstSize [IN] The size of a_prParamDst structure
+ * @param
+ * a_prParamSrc [IN] The structure contains source memory info for copy memory
+ * @param
+ * a_u4ParamSrcSize [IN] The size of a_prParamSrc structure
+ * @param
+ * a_u4Size [IN] The size of "source memory" and "destination memory" want to be copied
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoMemCpy(
+ VAL_MEMORY_T *a_prParamDst,
+ VAL_UINT32_T a_u4ParamDstSize,
+ VAL_MEMORY_T *a_prParamSrc,
+ VAL_UINT32_T a_u4ParamSrcSize,
+ VAL_UINT32_T a_u4Size
+);
+
+
+/**
+ * @par Function
+ * eVideoMemCmp
+ * @par Description
+ * The memory compare usage function
+ * @param
+ * a_prParamSrc1 [IN] The structure contains memory 1 info for compare memory
+ * @param
+ * a_u4ParamSrc1Size [IN] The size of a_prParamSrc1 structure
+ * @param
+ * a_prParamSrc2 [IN] The structure contains memory 2 info for compare memory
+ * @param
+ * a_u4ParamSrc2Size [IN] The size of a_prParamSrc2 structure
+ * @param
+ * a_u4Size [IN] The size of "memory 1" and "memory 2" want to be compared
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_INVALID_PARAMETER for fail
+ */
+VAL_RESULT_T eVideoMemCmp(
+ VAL_MEMORY_T *a_prParamSrc1,
+ VAL_UINT32_T a_u4ParamSrc1Size,
+ VAL_MEMORY_T *a_prParamSrc2,
+ VAL_UINT32_T a_u4ParamSrc2Size,
+ VAL_UINT32_T a_u4Size
+);
+
+
+/**
+ * @par Function
+ * WaitISR
+ * @par Description
+ * The ISR usage related function, whene trigger HW, we will use to wait HW complete
+ * @param
+ * a_prParam [IN] The structure contains used info for ISR usage
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_ISR_TIMEOUT for fail
+ */
+VAL_RESULT_T WaitISR(VAL_ISR_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoLockHW
+ * @par Description
+ * The single/multiple instance usage function, to allow using HW
+ * @param
+ * a_prParam [IN] The structure contains used info for Lock HW
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_UNKNOWN_ERROR for fail
+ */
+VAL_RESULT_T eVideoLockHW(VAL_HW_LOCK_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoLockHW
+ * @par Description
+ * The single/multiple instance usage function, to release HW for another instance
+ * @param
+ * a_prParam [IN] The structure contains used info for unLock HW
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success, VAL_RESULT_UNKNOWN_ERROR for fail
+ */
+VAL_RESULT_T eVideoUnLockHW(VAL_HW_LOCK_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eVideoGetTimeOfDay
+ * @par Description
+ * The timing usage function, used to performance profiling
+ * @param
+ * a_prParam [IN] The structure contains used info for timing usage
+ * @param
+ * a_u4ParamSize [IN] The size of a_prParam structure
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success
+ */
+VAL_RESULT_T eVideoGetTimeOfDay(VAL_TIME_T *a_prParam, VAL_UINT32_T a_u4ParamSize);
+
+
+/**
+ * @par Function
+ * eHalEMICtrlForRecordSize
+ * @par Description
+ * The recording info function, to get the record size for setting to EMI controller
+ * @param
+ * a_prDrvRecordSize [IN] The structure contains used info for recording size
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success
+ */
+VAL_RESULT_T eHalEMICtrlForRecordSize(VAL_RECORD_SIZE_T *a_prDrvRecordSize);
+
+
+/**
+ * @par Function
+ * eVideoVcodecSetThreadID
+ * @par Description
+ * The thread info function, to set thread ID for used to lock/unlock HW and priority adjustment
+ * @param
+ * a_prThreadID [IN] The structure contains used info for thread info
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success
+ */
+VAL_RESULT_T eVideoVcodecSetThreadID(VAL_VCODEC_THREAD_ID_T *a_prThreadID);
+
+
+/**
+ * @par Function
+ * eVideoGetParam
+ * @par Description
+ * The parameter info function, to get val parameter
+ * @param
+ * a_eType [IN] The VAL_GET_TYPE_T enum
+ * @param
+ * a_pvInParam [IN] The input parameter
+ * @param
+ * a_pvOutParam [OUT] The output parameter
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success
+ */
+VAL_RESULT_T eVideoGetParam(VAL_GET_TYPE_T a_eType, VAL_VOID_T *a_pvInParam, VAL_VOID_T *a_pvOutParam);
+
+/**
+ * @par Function
+ * eVideoSetParam
+ * @par Description
+ * The parameter info function, to set val parameter
+ * @param
+ * a_eType [IN] The VAL_SET_TYPE_T enum
+ * @param
+ * a_pvInParam [IN] The input parameter
+ * @param
+ * a_pvOutParam [OUT] The output parameter
+ * @par Returns
+ * VAL_RESULT_T [OUT] VAL_RESULT_NO_ERROR for success
+ */
+VAL_RESULT_T eVideoSetParam(VAL_SET_TYPE_T a_eType, VAL_VOID_T *a_pvInParam, VAL_VOID_T *a_pvOutParam);
+
+VAL_RESULT_T eVideoE3TCMPowerON(VAL_UINT32_T a_u4E3TCMClk);
+VAL_RESULT_T eVideoE3TCMPowerOFF(VAL_UINT32_T a_u4E3TCMClk);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_API_PUBLIC_H_ */
diff --git a/kernel-headers/val_log.h b/kernel-headers/val_log.h
new file mode 100644
index 0000000..bbf4a84
--- /dev/null
+++ b/kernel-headers/val_log.h
@@ -0,0 +1,56 @@
+#ifndef _VAL_LOG_H_
+#define _VAL_LOG_H_
+
+#include <utils/Log.h>
+#include <cutils/log.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef MTK_LOG_ENABLE
+#undef MTK_LOG_ENABLE
+#endif
+#define MTK_LOG_ENABLE 1
+
+#define MFV_LOG_ERROR /* /< error */
+#ifdef MFV_LOG_ERROR
+#define MFV_LOGE(...) LOG_PRI(ANDROID_LOG_ERROR, "VDO_LOG", __VA_ARGS__); /* /< show error log */
+#define VDO_LOGE(...) LOG_PRI(ANDROID_LOG_ERROR, "VDO_LOG", __VA_ARGS__); /* /< show error log */
+#else
+#define MFV_LOGE(...) /* /< NOT show error log */
+#define VDO_LOGE(...) /* /< NOT show error log */
+#endif
+
+#define MFV_LOG_WARNING /* /< warning */
+#ifdef MFV_LOG_WARNING
+#define MFV_LOGW(...) LOG_PRI(ANDROID_LOG_WARN, "VDO_LOG", __VA_ARGS__); /* /< show warning log */
+#define VDO_LOGW(...) LOG_PRI(ANDROID_LOG_WARN, "VDO_LOG", __VA_ARGS__); /* /< show warning log */
+#else
+#define MFV_LOGW(...) /* /< NOT show warning log */
+#define VDO_LOGW(...) /* /< NOT show warning log */
+#endif
+
+/* #define MFV_LOG_DEBUG ///< debug information */
+#ifdef MFV_LOG_DEBUG
+#define MFV_LOGD(...) LOG_PRI(ANDROID_LOG_DEBUG, "VDO_LOG", __VA_ARGS__); /* /< show debug information log */
+#define VDO_LOGD(...) LOG_PRI(ANDROID_LOG_DEBUG, "VDO_LOG", __VA_ARGS__); /* /< show debug information log */
+#else
+#define MFV_LOGD(...) /* /< NOT show debug information log */
+#define VDO_LOGD(...) /* /< NOT show debug information log */
+#endif
+
+#define MFV_LOG_INFO /* /< information */
+#ifdef MFV_LOG_INFO
+#define MFV_LOGI(...) LOG_PRI(ANDROID_LOG_INFO, "VDO_LOG", __VA_ARGS__); /* /< show information log */
+#define VDO_LOGI(...) LOG_PRI(ANDROID_LOG_INFO, "VDO_LOG", __VA_ARGS__); /* /< show information log */
+#else
+#define MFV_LOGI(...) /* /< NOT show information log */
+#define VDO_LOGI(...) /* /< NOT show information log */
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_LOG_H_ */
diff --git a/kernel-headers/val_oal.h b/kernel-headers/val_oal.h
new file mode 100644
index 0000000..56f7711
--- /dev/null
+++ b/kernel-headers/val_oal.h
@@ -0,0 +1,1419 @@
+#ifndef _SP5_OAL_H_
+#define _SP5_OAL_H_
+
+/* SP5 interface */
+#include "vcodec_OAL_v2.h"
+
+/* ME1 interface */
+#include "val_types_private.h"
+
+/**
+ * @par Enumeration
+ * __VAL_OAL_TYPE
+ * @par Description
+ * This is the item used to set OAL type
+ */
+typedef enum ___VAL_OAL_TYPE {
+ _BYTE_ = 0x5000, /* /< BYTE */
+ _WORD_, /* /< WORD */
+ _LONG_ /* /< LONG */
+} __VAL_OAL_TYPE;
+
+/* /< VCodecDrvQueryMemType definition for SW/hybrid codec */
+#define SP5_VCodecQueryMemType VCodecDrvQueryMemType
+/* /< VCodecDrvQueryPhysicalAddr definition for SW/hybrid codec */
+#define SP5_VCodecQueryPhysicalAddr VCodecDrvQueryPhysicalAddr
+/* /< VCodecDrvSwitchMemType definition for SW/hybrid codec */
+#define SP5_VCodecSwitchMemType VCodecDrvSwitchMemType
+/* /< VCodecDrvFlushCachedBuffer definition for SW/hybrid codec */
+#define SP5_VCodecFlushCachedBuffer VCodecDrvFlushCachedBuffer
+/* /< VCodecDrvInvalidateCachedBuffer definition for SW/hybrid codec */
+#define SP5_VCodecInvalidateCachedBuffer VCodecDrvInvalidateCachedBuffer
+/* /< VCodecDrvFlushCachedBufferAll definition for SW/hybrid codec */
+#define SP5_VCodecFlushCachedBufferAll VCodecDrvFlushCachedBufferAll
+/* /< VCodecDrvInvalidateCachedBufferAll definition for SW/hybrid codec */
+#define SP5_VCodecInvalidateCachedBufferAll VCodecDrvInvalidateCachedBufferAll
+/* /< VCodecDrvFlushInvalidateCacheBufferAll definition for SW/hybrid codec */
+#define SP5_VCodecFlushInvalidateCacheBufferAll VCodecDrvFlushInvalidateCacheBufferAll
+/* /< VCodecDrvMemSet definition for SW/hybrid codec */
+#define SP5_VCodecMemSet VCodecDrvMemSet
+/* /< VCodecDrvMemCopy definition for SW/hybrid codec */
+#define SP5_VCodecMemCopy VCodecDrvMemCopy
+/* /< VCodecDrvAssertFail definition for SW/hybrid codec */
+#define SP5_VCodecAssertFail VCodecDrvAssertFail
+/* /< VCodecDrvMMAP definition for SW/hybrid codec */
+#define SP5_VCodecMMAP VCodecDrvMMAP
+/* /< VCodecDrvUnMMAP definition for SW/hybrid codec */
+#define SP5_VCodecUnMMAP VCodecDrvUnMMAP
+/* /< VCodecDrvWaitISR definition for SW/hybrid codec */
+#define SP5_VCodecWaitISR VCodecDrvWaitISR
+/* /< VCodecDrvLockHW definition for SW/hybrid codec */
+#define SP5_VCodecLockHW VCodecDrvLockHW
+/* /< VCodecDrvUnLockHW definition for SW/hybrid codec */
+#define SP5_VCodecUnLockHW VCodecDrvUnLockHW
+/* /< VCodecDrvInitHWLock definition for SW/hybrid codec */
+#define SP5_VCodecInitHWLock VCodecDrvInitHWLock
+/* /< VCodecDrvDeInitHWLock definition for SW/hybrid codec */
+#define SP5_VCodecDeInitHWLock VCodecDrvDeInitHWLock
+#if 0
+/* /< VCodecDrvTraceLog0 definition for SW/hybrid codec */
+#define SP5_VcodecTraceLog0 VCodecDrvTraceLog0
+/* /< VCodecDrvTraceLog1 definition for SW/hybrid codec */
+#define SP5_VcodecTraceLog1 VCodecDrvTraceLog1
+/* /< VCodecDrvTraceLog2 definition for SW/hybrid codec */
+#define SP5_VcodecTraceLog2 VCodecDrvTraceLog2
+/* /< VCodecDrvTraceLog4 definition for SW/hybrid codec */
+#define SP5_VcodecTraceLog4 VCodecDrvTraceLog4
+/* /< VCodecDrvTraceLog8 definition for SW/hybrid codec */
+#define SP5_VcodecTraceLog8 VCodecDrvTraceLog8
+#else
+/* /< VCodecPrintf definition for SW/hybrid codec */
+#define SP5_VCodecPrintf VCodecPrintf
+#endif
+/* /< VCodecDrvMemAllocAligned definition for SW/hybrid codec */
+#define SP5_VdoMemAllocAligned VCodecDrvMemAllocAligned
+/* /< VCodecDrvMemFree definition for SW/hybrid codec */
+#define SP5_VdoMemFree VCodecDrvMemFree
+/* /< VCodecDrvIntMalloc definition for SW/hybrid codec */
+#define SP5_VdoIntMalloc VCodecDrvIntMalloc
+/* /< VCodecDrvIntFree definition for SW/hybrid codec */
+#define SP5_VdoIntFree VCodecDrvIntFree
+/* /< VCodecDrvRegSync definition for SW/hybrid codec */
+#define SP5_RegSync VCodecDrvRegSync
+/* /< VCodecDrvRegSyncWriteB definition for SW/hybrid codec */
+#define SP5_RegSyncWriteB VCodecDrvRegSyncWriteB
+/* /< VCodecDrvRegSyncWriteW definition for SW/hybrid codec */
+#define SP5_RegSyncWriteW VCodecDrvRegSyncWriteW
+/* /< VCodecDrvRegSyncWriteL definition for SW/hybrid codec */
+#define SP5_RegSyncWriteL VCodecDrvRegSyncWriteL
+/* /< VMPEG4EncCodecDrvWaitISR definition for SW/hybrid codec */
+#define SP5_VMPEG4EncCodecWaitISR VMPEG4EncCodecDrvWaitISR
+/* /< VMPEG4EncCodecDrvLockHW definition for SW/hybrid codec */
+#define SP5_VMPEG4EncCodecLockHW VMPEG4EncCodecDrvLockHW
+/* /< VMPEG4EncCodecDrvUnLockHW definition for SW/hybrid codec */
+#define SP5_VMPEG4EncCodecUnLockHW VMPEG4EncCodecDrvUnLockHW
+/* /< VH264DecCodecDrvWaitISR definition for SW/hybrid codec */
+#define SP5_VH264DecCodecWaitISR VH264DecCodecDrvWaitISR
+/* /< VH264DecCodecDrvLockHW definition for SW/hybrid codec */
+#define SP5_VH264DecCodecLockHW VH264DecCodecDrvLockHW
+/* /< VH264DecCodecDrvUnLockHW definition for SW/hybrid codec */
+#define SP5_VH264DecCodecUnLockHW VH264DecCodecDrvUnLockHW
+
+
+/**
+ * @par Function
+ * SP5_VCodecQueryMemType
+ * @par Description
+ * The function used to query memory type for SW/hybrid codec
+ * @param
+ * pBuffer_VA [IN] The pointer of buffer address
+ * @param
+ * u4Size [IN] The size of buffer
+ * @param
+ * peMemType [OUT] The memory type
+ * @par Returns
+ * void
+ */
+void SP5_VCodecQueryMemType(
+ IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ OUT VCODEC_MEMORY_TYPE_T * peMemType);
+
+
+/**
+ * @par Function
+ * SP5_VCodecQueryPhysicalAddr
+ * @par Description
+ * The function used to query physical address
+ * @param
+ * pBuffer_VA [IN] The pointer of buffer address
+ * @param
+ * pBufferOut_PA [OUT] The physical address
+ * @par Returns
+ * void
+ */
+void SP5_VCodecQueryPhysicalAddr(IN void *pBuffer_VA,
+ OUT void **pBufferOut_PA);
+
+
+/**
+ * @par Function
+ * SP5_VCodecSwitchMemType
+ * @par Description
+ * The function used to switch memory type for SW/hybrid codec
+ * @param
+ * pBuffer_VA [IN] The pointer of buffer address
+ * @param
+ * u4Size [IN] The size of buffer
+ * @param
+ * eMemType [IN] The memory type
+ * @param
+ * pBufferOut_VA [OUT] The pointer of buffer address
+ * @par Returns
+ * int, return 0 if success, return -1 if failed
+ */
+int SP5_VCodecSwitchMemType(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ IN VCODEC_MEMORY_TYPE_T eMemType,
+ OUT void **pBufferOut_VA);
+
+
+/**
+ * @par Function
+ * SP5_VCodecFlushCachedBuffer
+ * @par Description
+ * The function used to flush cache by size
+ * @param
+ * pBuffer_VA [IN] The pointer of buffer address
+ * @param
+ * u4Size [IN] The size of buffer
+ * @par Returns
+ * void
+ */
+void SP5_VCodecFlushCachedBuffer(IN void *pBuffer_VA,
+ IN unsigned int u4Size);
+
+
+/**
+ * @par Function
+ * SP5_VCodecInvalidateCachedBuffer
+ * @par Description
+ * The function used to invalidate cache by size
+ * @param
+ * pBuffer_VA [IN] The pointer of buffer address
+ * @param
+ * u4Size [IN] The size of buffer
+ * @par Returns
+ * void
+ */
+void SP5_VCodecInvalidateCachedBuffer(IN void *pBuffer_VA,
+ IN unsigned int u4Size);
+
+
+/**
+ * @par Function
+ * SP5_VCodecFlushCachedBufferAll
+ * @par Description
+ * The function used to flush all cache
+ * @par Returns
+ * void
+ */
+void SP5_VCodecFlushCachedBufferAll(void);
+
+
+/**
+ * @par Function
+ * SP5_VCodecInvalidateCachedBufferAll
+ * @par Description
+ * The function used to invalidate all cache
+ * @par Returns
+ * void
+ */
+void SP5_VCodecInvalidateCachedBufferAll(void);
+
+
+/**
+ * @par Function
+ * SP5_VCodecFlushInvalidateCacheBufferAll
+ * @par Description
+ * The function used to flush & invalidate all cache
+ * @par Returns
+ * void
+ */
+void SP5_VCodecFlushInvalidateCacheBufferAll(void);
+
+
+/**
+ * @par Function
+ * SP5_VCodecMemSet
+ * @par Description
+ * The function used to memory set
+ * @param
+ * pBuffer_VA [IN] The pointer of buffer address
+ * @param
+ * cValue [IN] The value will be set to memory
+ * @param
+ * u4Length [IN] The length of memory will be set
+ * @par Returns
+ * void
+ */
+void SP5_VCodecMemSet(IN void *pBuffer_VA,
+ IN char cValue,
+ IN unsigned int u4Length);
+
+
+/**
+ * @par Function
+ * SP5_VCodecMemCopy
+ * @par Description
+ * The function used to memory copy
+ * @param
+ * pvDest [IN] The pointer of destination memory
+ * @param
+ * pvSrc [IN] The pointer of source memory
+ * @param
+ * u4Length [IN] The length of memory will be copied
+ * @par Returns
+ * void
+ */
+void SP5_VCodecMemCopy(IN void *pvDest ,
+ IN const void *pvSrc ,
+ IN unsigned int u4Length);
+
+
+/**
+ * @par Function
+ * SP5_VCodecAssertFail
+ * @par Description
+ * The function used to assert when occur error
+ * @param
+ * ptr [IN] The name of error source file
+ * @param
+ * i4Line [IN] The line of error source file
+ * @param
+ * i4Arg [IN] The argumnet of error source file
+ * @par Returns
+ * void
+ */
+void SP5_VCodecAssertFail(IN char *ptr,
+ IN int i4Line,
+ IN int i4Arg);
+
+
+/**
+ * @par Function
+ * SP5_VCodecMMAP
+ * @par Description
+ * The function used to memory map
+ * @param
+ * prParam [IN/OUT] The structure contains memory info for memory map
+ * @par Returns
+ * void
+ */
+void SP5_VCodecMMAP(VCODEC_OAL_MMAP_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VCodecUnMMAP
+ * @par Description
+ * The function used to memory unmap
+ * @param
+ * prParam [IN/OUT] The structure contains memory info for memory unmap
+ * @par Returns
+ * void
+ */
+void SP5_VCodecUnMMAP(VCODEC_OAL_MMAP_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VCodecWaitISR
+ * @par Description
+ * The ISR usage related function, whene trigger HW, we will use to wait HW complete
+ * @param
+ * prParam [IN/OUT] The structure contains used info for ISR usage
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VCodecLockHW
+ * @par Description
+ * The single/multiple instance usage function, to allow using HW
+ * @param
+ * prParam [IN/OUT] The structure contains used info for Lock HW
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VCodecUnLockHW
+ * @par Description
+ * The single/multiple instance usage function, to release HW for another instance
+ * @param
+ * prParam [IN/OUT] The structure contains used info for unLock HW
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VCodecInitHWLock
+ * @par Description
+ * The function used to init HW lock
+ * @param
+ * prParam [IN/OUT] The structure contains used info for init HW lock
+ * @par Returns
+ * void
+ */
+void SP5_VCodecInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VCodecDeInitHWLock
+ * @par Description
+ * The function used to deinit HW lock
+ * @param
+ * prParam [IN/OUT] The structure contains used info for deinit HW lock
+ * @par Returns
+ * void
+ */
+void SP5_VCodecDeInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
+
+
+#if 0
+/**
+ * @par Function
+ * SP5_VcodecTraceLog0
+ * @par Description
+ * The function used to trace log for debug
+ * @param
+ * eGroup [IN] The value to define log importance priority
+ * @param
+ * eIndex [IN] The value to define log type
+ * @par Returns
+ * void
+ */
+void SP5_VcodecTraceLog0(IN VCODEC_LOG_GROUP_T eGroup,
+ IN VCODEC_LOG_INDEX_T eIndex
+ );
+
+
+/**
+ * @par Function
+ * SP5_VcodecTraceLog1
+ * @par Description
+ * The function used to trace log for debug
+ * @param
+ * eGroup [IN] The value to define log importance priority
+ * @param
+ * eIndex [IN] The value to define log type
+ * @param
+ * arg [IN] The input argument
+ * @par Returns
+ * void
+ */
+void SP5_VcodecTraceLog1(IN VCODEC_LOG_GROUP_T eGroup,
+ IN VCODEC_LOG_INDEX_T eIndex,
+ IN UINT64 arg
+ );
+
+
+/**
+ * @par Function
+ * SP5_VcodecTraceLog2
+ * @par Description
+ * The function used to trace log for debug
+ * @param
+ * eGroup [IN] The value to define log importance priority
+ * @param
+ * eIndex [IN] The value to define log type
+ * @param
+ * arg1 [IN] The input argument1
+ * @param
+ * arg2 [IN] The input argument2
+ * @par Returns
+ * void
+ */
+void SP5_VcodecTraceLog2(IN VCODEC_LOG_GROUP_T eGroup,
+ IN VCODEC_LOG_INDEX_T eIndex,
+ IN UINT64 arg1,
+ IN UINT64 arg2
+ );
+
+
+/**
+ * @par Function
+ * SP5_VcodecTraceLog4
+ * @par Description
+ * The function used to trace log for debug
+ * @param
+ * eGroup [IN] The value to define log importance priority
+ * @param
+ * eIndex [IN] The value to define log type
+ * @param
+ * arg1 [IN] The input argument1
+ * @param
+ * arg2 [IN] The input argument2
+ * @param
+ * arg3 [IN] The input argument3
+ * @param
+ * arg4 [IN] The input argument4
+ * @par Returns
+ * void
+ */
+void SP5_VcodecTraceLog4(IN VCODEC_LOG_GROUP_T eGroup,
+ IN VCODEC_LOG_INDEX_T eIndex,
+ IN UINT64 arg1,
+ IN UINT64 arg2, IN UINT64 arg3,
+ IN UINT64 arg4
+ );
+
+
+/**
+ * @par Function
+ * SP5_VcodecTraceLog4
+ * @par Description
+ * The function used to trace log for debug
+ * @param
+ * eGroup [IN] The value to define log importance priority
+ * @param
+ * eIndex [IN] The value to define log type
+ * @param
+ * arg1 [IN] The input argument1
+ * @param
+ * arg2 [IN] The input argument2
+ * @param
+ * arg3 [IN] The input argument3
+ * @param
+ * arg4 [IN] The input argument4
+ * @param
+ * arg5 [IN] The input argument5
+ * @param
+ * arg6 [IN] The input argument6
+ * @param
+ * arg7 [IN] The input argument7
+ * @param
+ * arg8 [IN] The input argument8
+ * @par Returns
+ * void
+ */
+void SP5_VcodecTraceLog8(IN VCODEC_LOG_GROUP_T eGroup,
+ IN VCODEC_LOG_INDEX_T eIndex,
+ IN UINT64 arg1,
+ IN UINT64 arg2,
+ IN UINT64 arg3,
+ IN UINT64 arg4,
+ IN UINT64 arg5,
+ IN UINT64 arg6,
+ IN UINT64 arg7,
+ IN UINT64 arg8
+ );
+#else
+/**
+ * @par Function
+ * SP5_VCodecPrintf
+ * @par Description
+ * The function used to trace log for debug
+ * @param
+ * format [IN] log string
+ * @param
+ * ... [IN] log argument
+ */
+VCODEC_OAL_ERROR_T SP5_VCodecPrintf(IN const char *_Format, ...);
+#endif
+
+
+/**
+ * @par Function
+ * SP5_VdoMemAllocAligned
+ * @par Description
+ * The function used to alloc external working memry
+ * @param
+ * handle [IN] codec/driver handle
+ * @param
+ * size [IN] allocated memory size
+ * @param
+ * u4AlignSize [IN] allocated memory byte alignment
+ * @param
+ * cachable [IN] memory type
+ * @param
+ * pBuf [OUT] allocated memory buffer info
+ * @param
+ * eMemCodec [IN] allocated memory used for venc/vdec
+ * @par Returns
+ * VAL_VOID_T
+ */
+VAL_VOID_T SP5_VdoMemAllocAligned(
+ VAL_VOID_T * handle,
+ VAL_UINT32_T size,
+ unsigned int u4AlignSize,
+ VCODEC_MEMORY_TYPE_T cachable,
+ VCODEC_BUFFER_T * pBuf,
+ VAL_MEM_CODEC_T eMemCodec
+);
+
+
+/**
+ * @par Function
+ * SP5_VdoMemFree
+ * @par Description
+ * The function used to free external working memry
+ * @param
+ * handle [IN] codec/driver handle
+ * @param
+ * pBuf [IN] allocated memory buffer info
+ * @par Returns
+ * VAL_VOID_T
+ */
+VAL_VOID_T SP5_VdoMemFree(VAL_VOID_T *handle, VCODEC_BUFFER_T *pBuf);
+
+
+/**
+ * @par Function
+ * SP5_VdoIntMalloc
+ * @par Description
+ * The function used to alloc internal working memry
+ * @param
+ * handle [IN] codec/driver handle
+ * @param
+ * size [IN] allocated memory size
+ * @param
+ * alignedsize [IN] allocated memory byte alignment
+ * @param
+ * prBuffer_adr [OUT] allocated memory buffer info
+ * @par Returns
+ * VAL_VOID_T
+ */
+VAL_VOID_T SP5_VdoIntMalloc(HANDLE handle, unsigned int size, unsigned int alignedsize, VCODEC_BUFFER_T *prBuffer_adr);
+
+
+/**
+ * @par Function
+ * SP5_VdoIntFree
+ * @par Description
+ * The function used to free internal working memry
+ * @param
+ * handle [IN] codec/driver handle
+ * @param
+ * prBuffer_adr [IN] allocated memory buffer info
+ * @par Returns
+ * VAL_VOID_T
+ */
+VAL_VOID_T SP5_VdoIntFree(HANDLE handle, VCODEC_BUFFER_T *prBuffer_adr);
+
+
+/**
+ * @par Function
+ * SP5_RegSync
+ * @par Description
+ * The function used to set register sync
+ * @param
+ * type [IN] BYTE/WORD/LONG
+ * @param
+ * v [IN] register value
+ * @param
+ * a [IN] register address
+ * @par Returns
+ * VAL_VOID_T
+ */
+VAL_VOID_T SP5_RegSync(int type, unsigned int v, unsigned int a);
+
+
+/**
+ * @par Function
+ * SP5_VMPEG4EncCodecWaitISR
+ * @par Description
+ * The ISR usage related function, whene trigger HW, we will use to wait HW complete
+ * @param
+ * prParam [IN/OUT] The structure contains used info for ISR usage
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VMPEG4EncCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VMPEG4EncCodecLockHW
+ * @par Description
+ * The single/multiple instance usage function, to allow using HW
+ * @param
+ * prParam [IN/OUT] The structure contains used info for Lock HW
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VMPEG4EncCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VMPEG4EncCodecUnLockHW
+ * @par Description
+ * The single/multiple instance usage function, to release HW for another instance
+ * @param
+ * prParam [IN/OUT] The structure contains used info for unLock HW
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VMPEG4EncCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VH264DecCodecWaitISR
+ * @par Description
+ * The ISR usage related function, whene trigger HW, we will use to wait HW complete
+ * @param
+ * prParam [IN/OUT] The structure contains used info for ISR usage
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VH264DecCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VH264DecCodecLockHW
+ * @par Description
+ * The single/multiple instance usage function, to allow using HW
+ * @param
+ * prParam [IN/OUT] The structure contains used info for Lock HW
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VH264DecCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+/**
+ * @par Function
+ * SP5_VH264DecCodecUnLockHW
+ * @par Description
+ * The single/multiple instance usage function, to release HW for another instance
+ * @param
+ * prParam [IN/OUT] The structure contains used info for unLock HW
+ * @par Returns
+ * int, return 1 if success, return 0 if failed
+ */
+int SP5_VH264DecCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+/**
+ * @par Function
+ * eValInit
+ * @par Description
+ * The init driver function
+ * @param
+ * a_phHalHandle [IN/OUT] The codec/driver handle
+ * @par Returns
+ * VAL_RESULT_T, return VAL_RESULT_NO_ERROR if success, return VAL_RESULT_UNKNOWN_ERROR if failed
+ */
+VAL_RESULT_T eValInit(VAL_HANDLE_T *a_phHalHandle);
+
+
+/**
+ * @par Function
+ * eValDeInit
+ * @par Description
+ * The deinit driver function
+ * @param
+ * a_phHalHandle [IN/OUT] The codec/driver handle
+ * @par Returns
+ * VAL_RESULT_T, return VAL_RESULT_NO_ERROR if success, return VAL_RESULT_UNKNOWN_ERROR if failed
+ */
+VAL_RESULT_T eValDeInit(VAL_HANDLE_T *a_phHalHandle);
+
+
+/**
+ * @par Function
+ * VCodecDrvCheck_Version
+ * @par Description
+ * The function used to check codec library version
+ * @param
+ * version [IN/OUT] The codec library version
+ * @par Returns
+ * int, return 0 if success, return -1 if failed
+ */
+int VCodecDrvCheck_Version(int version);
+
+/************ Multi-thread function ***********/
+
+/***** Thread Management Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_attr_init
+ * @par Description
+ * The pthread_attr_init wrapper function
+ * @param
+ * attr [OUT] attr
+ * @par Returns
+ * int, pthread_attr_init((pthread_attr_t *)attr);
+ */
+int VCodecDrvPthread_attr_init(OUT VCODEC_PTHREAD_ATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_attr_destroy
+ * @par Description
+ * The pthread_attr_destroy wrapper function
+ * @param
+ * attr [IN] attr
+ * @par Returns
+ * int, pthread_attr_destroy((pthread_attr_t *)attr);
+ */
+int VCodecDrvPthread_attr_destroy(IN VCODEC_PTHREAD_ATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_attr_getdetachstate
+ * @par Description
+ * The pthread_attr_getdetachstate wrapper function
+ * @param
+ * attr [IN] attr
+ * @param
+ * detachstate [OUT] detachstate
+ * @par Returns
+ * int, pthread_attr_getdetachstate((pthread_attr_t const *)attr, detachstate);
+ */
+int VCodecDrvPthread_attr_getdetachstate(IN const VCODEC_PTHREAD_ATTR_T * attr, OUT int *detachstate);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_attr_getdetachstate
+ * @par Description
+ * The pthread_attr_getdetachstate wrapper function
+ * @param
+ * attr [IN] attr
+ * @param
+ * detachstate [OUT] detachstate
+ * @par Returns
+ * int, pthread_attr_getdetachstate((pthread_attr_t const *)attr, detachstate);
+ */
+int VCodecDrvPthread_attr_setdetachstate(IN VCODEC_PTHREAD_ATTR_T * attr, IN int detachstate);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_create
+ * @par Description
+ * The pthread_create wrapper function
+ * @param
+ * thread [OUT] thread
+ * @param
+ * attr [IN] attr
+ * @param
+ * start_routine [IN] start_routine
+ * @param
+ * arg [IN] arg
+ * @par Returns
+ * int, pthread_create((pthread_t *)thread, (pthread_attr_t const *)attr, start_routine, arg);
+ */
+int VCodecDrvPthread_create(
+ OUT VCODEC_PTHREAD_T * thread,
+ IN const VCODEC_PTHREAD_ATTR_T * attr,
+ IN void * (*start_routine)(void *),
+ IN void *arg
+);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_kill
+ * @par Description
+ * The pthread_kill wrapper function
+ * @param
+ * tid [IN] tid
+ * @param
+ * sig [IN] sig
+ * @par Returns
+ * int, pthread_kill((pthread_t)tid, SIGUSR1);
+ */
+int VCodecDrvPthread_kill(IN VCODEC_PTHREAD_T tid, IN int sig);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_exit
+ * @par Description
+ * The pthread_exit wrapper function
+ * @param
+ * retval [OUT] retval
+ * @par Returns
+ * void
+ */
+void VCodecDrvPthread_exit(OUT void *retval);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_join
+ * @par Description
+ * The pthread_join wrapper function
+ * @param
+ * thid [IN] thid
+ * @param
+ * ret_val [OUT] ret_val
+ * @par Returns
+ * int, pthread_join((pthread_t)thid, ret_val);
+ */
+int VCodecDrvPthread_join(IN VCODEC_PTHREAD_T thid, OUT void **ret_val);
+
+/* int VCodecDrvPthread_detach(IN VCODEC_PTHREAD_T thid); */
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_once
+ * @par Description
+ * The pthread_once wrapper function
+ * @param
+ * once_control [IN] once_control
+ * @param
+ * init_routine [IN] init_routine
+ * @par Returns
+ * int, pthread_once((pthread_once_t *)once_control, init_routine);
+ */
+int VCodecDrvPthread_once(IN VCODEC_PTHREAD_ONCE_T * once_control, IN void (*init_routine)(void));
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_self
+ * @par Description
+ * The pthread_self wrapper function
+ * @par Returns
+ * VCODEC_PTHREAD_T, (VCODEC_PTHREAD_T)pthread_self()
+ */
+VCODEC_PTHREAD_T VCodecDrvPthread_self(void);
+
+/* VCODEC_OAL_ERROR_T VCodecDrvPthread_equal(IN VCODEC_PTHREAD_T one,IN VCODEC_PTHREAD_T two); */
+
+/***** Mutex Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutexattr_init
+ * @par Description
+ * The pthread_mutexattr_init wrapper function
+ * @param
+ * attr [OUT] attr
+ * @par Returns
+ * int, pthread_mutexattr_init((pthread_mutexattr_t *)attr);
+ */
+int VCodecDrvPthread_mutexattr_init(OUT VCODEC_PTHREAD_MUTEXATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutexattr_destroy
+ * @par Description
+ * The pthread_mutexattr_destroy wrapper function
+ * @param
+ * attr [IN] attr
+ * @par Returns
+ * int, pthread_mutexattr_destroy((pthread_mutexattr_t *)attr);
+ */
+int VCodecDrvPthread_mutexattr_destroy(IN VCODEC_PTHREAD_MUTEXATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutex_init
+ * @par Description
+ * The pthread_mutex_init wrapper function
+ * @param
+ * mutex [OUT] mutex
+ * @param
+ * attr [IN] attr
+ * @par Returns
+ * int, pthread_mutex_init((pthread_mutex_t *)mutex, (const pthread_mutexattr_t *)attr);
+ */
+int VCodecDrvPthread_mutex_init(OUT VCODEC_PTHREAD_MUTEX_T * mutex, IN const VCODEC_PTHREAD_MUTEXATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutex_destroy
+ * @par Description
+ * The pthread_mutex_destroy wrapper function
+ * @param
+ * mutex [IN] mutex
+ * @par Returns
+ * int, pthread_mutex_destroy((pthread_mutex_t *)mutex);
+ */
+int VCodecDrvPthread_mutex_destroy(IN VCODEC_PTHREAD_MUTEX_T * mutex);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutex_lock
+ * @par Description
+ * The pthread_mutex_lock wrapper function
+ * @param
+ * mutex [IN] mutex
+ * @par Returns
+ * int, pthread_mutex_lock((pthread_mutex_t *)mutex);
+ */
+int VCodecDrvPthread_mutex_lock(IN VCODEC_PTHREAD_MUTEX_T * mutex);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutex_unlock
+ * @par Description
+ * The pthread_mutex_unlock wrapper function
+ * @param
+ * mutex [IN] mutex
+ * @par Returns
+ * int, pthread_mutex_unlock((pthread_mutex_t *)mutex);
+ */
+int VCodecDrvPthread_mutex_unlock(IN VCODEC_PTHREAD_MUTEX_T * mutex);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_mutex_trylock
+ * @par Description
+ * The pthread_mutex_trylock wrapper function
+ * @param
+ * mutex [IN] mutex
+ * @par Returns
+ * int, pthread_mutex_trylock((pthread_mutex_t *)mutex);
+ */
+int VCodecDrvPthread_mutex_trylock(IN VCODEC_PTHREAD_MUTEX_T * mutex);
+
+/***** Spin Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_spin_init
+ * @par Description
+ * The pthread_spin_init wrapper function
+ * @param
+ * lock [OUT] lock
+ * @param
+ * pshared [IN] pshared
+ * @par Returns
+ * int, -1, NOT implement
+ */
+int VCodecDrvPthread_spin_init(OUT VCODEC_PTHREAD_SPINLOCK_T * lock, IN int pshared);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_spin_destroy
+ * @par Description
+ * The pthread_spin_destroy wrapper function
+ * @param
+ * lock [IN] lock
+ * @par Returns
+ * int, -1, NOT implement
+ */
+int VCodecDrvPthread_spin_destroy(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_spin_lock
+ * @par Description
+ * The pthread_spin_lock wrapper function
+ * @param
+ * lock [IN] lock
+ * @par Returns
+ * int, -1, NOT implement
+ */
+int VCodecDrvPthread_spin_lock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_spin_trylock
+ * @par Description
+ * The pthread_spin_trylock wrapper function
+ * @param
+ * lock [IN] lock
+ * @par Returns
+ * int, -1, NOT implement
+ */
+int VCodecDrvPthread_spin_trylock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_spin_unlock
+ * @par Description
+ * The pthread_spin_unlock wrapper function
+ * @param
+ * lock [IN] lock
+ * @par Returns
+ * int, -1, NOT implement
+ */
+int VCodecDrvPthread_spin_unlock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+
+/***** Condition Variable Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_condattr_init
+ * @par Description
+ * The pthread_condattr_init wrapper function
+ * @param
+ * attr [OUT] attr
+ * @par Returns
+ * int, pthread_condattr_init((pthread_condattr_t *)attr);
+ */
+int VCodecDrvPthread_condattr_init(OUT VCODEC_PTHREAD_CONDATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_condattr_destroy
+ * @par Description
+ * The pthread_condattr_destroy wrapper function
+ * @param
+ * attr [IN] attr
+ * @par Returns
+ * int, pthread_condattr_destroy((pthread_condattr_t *)attr);
+ */
+int VCodecDrvPthread_condattr_destroy(IN VCODEC_PTHREAD_CONDATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_cond_init
+ * @par Description
+ * The pthread_cond_init wrapper function
+ * @param
+ * cond [OUT] cond
+ * @param
+ * attr [IN] attr
+ * @par Returns
+ * int, pthread_cond_init((pthread_cond_t *)cond, (const pthread_condattr_t *)attr);
+ */
+int VCodecDrvPthread_cond_init(OUT VCODEC_PTHREAD_COND_T * cond, IN const VCODEC_PTHREAD_CONDATTR_T * attr);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_cond_destroy
+ * @par Description
+ * The pthread_cond_destroy wrapper function
+ * @param
+ * cond [IN] cond
+ * @par Returns
+ * int, pthread_cond_destroy((pthread_cond_t *)cond);
+ */
+int VCodecDrvPthread_cond_destroy(IN VCODEC_PTHREAD_COND_T * cond);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_cond_broadcast
+ * @par Description
+ * The pthread_cond_broadcast wrapper function
+ * @param
+ * cond [IN] cond
+ * @par Returns
+ * int, pthread_cond_broadcast((pthread_cond_t *)cond);
+ */
+int VCodecDrvPthread_cond_broadcast(IN VCODEC_PTHREAD_COND_T * cond);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_cond_signal
+ * @par Description
+ * The pthread_cond_signal wrapper function
+ * @param
+ * cond [IN] cond
+ * @par Returns
+ * int, pthread_cond_signal((pthread_cond_t *)cond);
+ */
+int VCodecDrvPthread_cond_signal(IN VCODEC_PTHREAD_COND_T * cond);
+
+
+/**
+ * @par Function
+ * VCodecDrvPthread_cond_signal
+ * @par Description
+ * The pthread_cond_wait wrapper function
+ * @param
+ * cond [IN] cond
+ * @param
+ * mutex [IN] mutex
+ * @par Returns
+ * int, pthread_cond_wait((pthread_cond_t *)cond, (pthread_mutex_t *)mutex);
+ */
+int VCodecDrvPthread_cond_wait(IN VCODEC_PTHREAD_COND_T * cond, IN VCODEC_PTHREAD_MUTEX_T * mutex);
+
+/************ End of Multi-thread function ***********/
+
+/***** Semaphore Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrv_sem_init
+ * @par Description
+ * The sem_init wrapper function
+ * @param
+ * sem [IN] sem
+ * @param
+ * pshared [IN] pshared
+ * @param
+ * value [IN] value
+ * @par Returns
+ * int, sem_init((sem_t*)sem, pshared, value);
+ */
+int VCodecDrv_sem_init(IN VCODEC_OAL_SEM_T * sem, IN int pshared, IN unsigned int value);
+
+
+/**
+ * @par Function
+ * VCodecDrv_sem_destroy
+ * @par Description
+ * The sem_destroy wrapper function
+ * @param
+ * sem [IN] sem
+ * @par Returns
+ * int, sem_destroy((sem_t*)sem);
+ */
+int VCodecDrv_sem_destroy(IN VCODEC_OAL_SEM_T * sem);
+
+
+/**
+ * @par Function
+ * VCodecDrv_sem_post
+ * @par Description
+ * The sem_post wrapper function
+ * @param
+ * sem [IN] sem
+ * @par Returns
+ * int, sem_post((sem_t*)sem);
+ */
+int VCodecDrv_sem_post(IN VCODEC_OAL_SEM_T * sem);
+
+
+/**
+ * @par Function
+ * VCodecDrv_sem_wait
+ * @par Description
+ * The sem_wait wrapper function
+ * @param
+ * sem [IN] sem
+ * @par Returns
+ * int, sem_wait((sem_t*)sem);
+ */
+int VCodecDrv_sem_wait(IN VCODEC_OAL_SEM_T * sem);
+
+/***** Binding Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrvBindingCore
+ * @par Description
+ * The function used to set given thread to binding specific CPU Core
+ * @param
+ * ThreadHandle [IN] given thread
+ * @param
+ * u4Mask [IN] specific CPU Core
+ * @par Returns
+ * VCODEC_OAL_ERROR_T, return VCODEC_OAL_ERROR_NONE if success, return VCODEC_OAL_ERROR_ERROR if failed
+ */
+VCODEC_OAL_ERROR_T VCodecDrvBindingCore(IN VCODEC_PTHREAD_T ThreadHandle, IN unsigned int u4Mask);
+
+
+/**
+ * @par Function
+ * VCodecDrvDeBindingCore
+ * @par Description
+ * The function used to set given thread to debinding specific CPU Core
+ * @param
+ * ThreadHandle [IN] given thread
+ * @par Returns
+ * VCODEC_OAL_ERROR_T, return VCODEC_OAL_ERROR_NONE if success, return VCODEC_OAL_ERROR_ERROR if failed
+ */
+VCODEC_OAL_ERROR_T VCodecDrvDeBindingCore(IN VCODEC_PTHREAD_T ThreadHandle);
+
+
+/**
+ * @par Function
+ * VCodecDrvGetAffinity
+ * @par Description
+ * The function used to set given thread to get specific CPU Core affinity
+ * @param
+ * ThreadHandle [IN] given thread
+ * @param
+ * pu4Mask [OUT] CPU mask
+ * @param
+ * pu4SetMask [OUT] Set CPU mask
+ * @par Returns
+ * VCODEC_OAL_ERROR_T, return VCODEC_OAL_ERROR_NONE if success, return VCODEC_OAL_ERROR_ERROR if failed
+ */
+VCODEC_OAL_ERROR_T VCodecDrvGetAffinity(
+ IN VCODEC_PTHREAD_T ThreadHandle,
+ OUT unsigned int *pu4Mask,
+ OUT unsigned int *pu4SetMask
+);
+
+
+/**
+ * @par Function
+ * VCodecDrvGetAffinity
+ * @par Description
+ * The function used to get specific CPU Core loading
+ * @param
+ * s4CPUid [IN] COU id
+ * @param
+ * ps4Loading [OUT] CPU loading
+ * @par Returns
+ * VCODEC_OAL_ERROR_T, return VCODEC_OAL_ERROR_NONE if success, return VCODEC_OAL_ERROR_ERROR if failed
+ */
+VCODEC_OAL_ERROR_T VCodecDrvCoreLoading(IN int s4CPUid, OUT int *ps4Loading);
+
+
+/**
+ * @par Function
+ * VCodecDrvGetAffinity
+ * @par Description
+ * The function used to get total CPU Core number
+ * @param
+ * ps4CPUNums [OUT] CPU number
+ * @par Returns
+ * VCODEC_OAL_ERROR_T, return VCODEC_OAL_ERROR_NONE if success, return VCODEC_OAL_ERROR_ERROR if failed
+ */
+VCODEC_OAL_ERROR_T VCodecDrvCoreNumber(OUT int *ps4CPUNums);
+
+
+/**
+ * @par Function
+ * VCodecDrvSleep
+ * @par Description
+ * The function used to sleep a while
+ * @param
+ * u4Tick [IN] unit: us
+ * @par Returns
+ * void
+ */
+void VCodecDrvSleep(IN unsigned int u4Tick);
+
+
+/**
+ * @par Function
+ * OAL_SMP_BindingCore
+ * @par Description
+ * The function used to set given thread to binding specific CPU Core (only for test)
+ * @param
+ * aCurrentTid [IN] given thread id
+ * @param
+ * aCPUid [IN] specific CPU Core
+ * @par Returns
+ * int, return 0 if success, return -1 if failed
+ */
+int OAL_SMP_BindingCore(int aCurrentTid, int aCPUid); /* ONLY used for TEST in main.c */
+
+/***** MCI Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecConfigMCIPort
+ * @par Description
+ * The function used to config MCI port
+ * @param
+ * u4PortConfig [IN] port config
+ * @param
+ * pu4PortResult [OUT] port result
+ * @param
+ * eCodecType [OUT] VDEC or VENC
+ * @par Returns
+ * VCODEC_OAL_ERROR_T,
+ * return VCODEC_OAL_ERROR_NONE if success,
+ * return VCODEC_OAL_ERROR_ERROR or VAL_RESULT_UNKNOWN_ERROR if failed
+ */
+VCODEC_OAL_ERROR_T VCodecConfigMCIPort(
+ IN unsigned int u4PortConfig,
+ OUT unsigned int *pu4PortResult,
+ IN VCODEC_CODEC_TYPE_T eCodecType
+);
+
+
+/***** Software vdec lib Functions ******/
+
+
+/**
+ * @par Function
+ * VCodecDrvMemAllocAligned_NC
+ * @par Description
+ * The function used to alloc external working memry for non-cacheable
+ * @param
+ * hDrv [IN] codec/driver handle
+ * @param
+ * u4Size [IN] allocated memory size
+ * @param
+ * u4AlignSize [IN] allocated memory byte alignment
+ * @param
+ * fgCacheable [IN] memory type
+ * @param
+ * prBuf [OUT] allocated memory buffer info
+ * @par Returns
+ * void
+ */
+void VCodecDrvMemAllocAligned_NC(
+ IN HANDLE hDrv,
+ IN unsigned int u4Size,
+ unsigned int u4AlignSize,
+ IN VCODEC_MEMORY_TYPE_T fgCacheable,
+ OUT VCODEC_BUFFER_T *prBuf
+);
+
+
+/**
+ * @par Function
+ * VCodecDrvMemFree_NC
+ * @par Description
+ * The function used to free external working memry
+ * @param
+ * hDrv [IN] codec/driver handle
+ * @param
+ * prBuf [IN] allocated memory buffer info
+ * @par Returns
+ * void
+ */
+void VCodecDrvMemFree_NC(IN HANDLE hDrv, IN VCODEC_BUFFER_T *prBuf);
+
+
+/**
+ * @par Function
+ * VDecCodecQueryInfo
+ * @par Description
+ * The function used to query info
+ * @param
+ * hDrv [IN] codec/driver handle
+ * @param
+ * ID [IN] query info type
+ * @param
+ * pvQueryData [OUT] query data
+ * @par Returns
+ * void
+ */
+VCODEC_DEC_ERROR_T VDecCodecQueryInfo(IN HANDLE hDrv, IN VCODEC_DEC_QUERY_INFO_TYPE_T ID, OUT void *pvQueryData);
+#if 0
+/* MACRO */
+
+#include "mach/sync_write.h"
+
+#define SP5_REGSYNC_WriteB(v, a) \
+ mt65xx_reg_sync_writeb(v, a);
+
+#define SP5_REGSYNC_WriteW(v, a) \
+ mt65xx_reg_sync_writew(v, a);
+
+#define SP5_REGSYNC_WriteL(v, a) \
+ mt65xx_reg_sync_writel(v, a);
+
+
+VAL_VOID_T SP5_RegSyncWriteB(VAL_UINT32_T v, VAL_UINT32_T a);
+VAL_VOID_T SP5_RegSyncWriteW(VAL_UINT32_T v, VAL_UINT32_T a);
+VAL_VOID_T SP5_RegSyncWriteL(VAL_UINT32_T v, VAL_UINT32_T a);
+#endif
+#endif
diff --git a/kernel-headers/val_types_private.h b/kernel-headers/val_types_private.h
new file mode 100644
index 0000000..0675703
--- /dev/null
+++ b/kernel-headers/val_types_private.h
@@ -0,0 +1,235 @@
+#ifndef _VAL_TYPES_PRIVATE_H_
+#define _VAL_TYPES_PRIVATE_H_
+
+#include "val_types_public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* #define __EARLY_PORTING__ */
+
+#define OALMEM_STATUS_NUM 16
+
+/**
+ * @par Enumeration
+ * VAL_HW_COMPLETE_T
+ * @par Description
+ * This is polling or interrupt for waiting for HW done
+ */
+typedef enum _VAL_HW_COMPLETE_T {
+ VAL_POLLING_MODE = 0, /* /< polling */
+ VAL_INTERRUPT_MODE, /* /< interrupt */
+ VAL_MODE_MAX = 0xFFFFFFFF /* /< Max result */
+}
+VAL_HW_COMPLETE_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_CODEC_TYPE_T
+ * @par Description
+ * This is the item in VAL_OBJECT_T for open driver type and
+ * in VAL_CLOCK_T for clock setting and
+ * in VAL_ISR_T for irq line setting
+ */
+typedef enum _VAL_CODEC_TYPE_T {
+ VAL_CODEC_TYPE_NONE = 0, /* /< None */
+ VAL_CODEC_TYPE_MP4_ENC, /* /< MP4 encoder */
+ VAL_CODEC_TYPE_MP4_DEC, /* /< MP4 decoder */
+ VAL_CODEC_TYPE_H263_ENC, /* /< H.263 encoder */
+ VAL_CODEC_TYPE_H263_DEC, /* /< H.263 decoder */
+ VAL_CODEC_TYPE_H264_ENC, /* /< H.264 encoder */
+ VAL_CODEC_TYPE_H264_DEC, /* /< H.264 decoder */
+ VAL_CODEC_TYPE_SORENSON_SPARK_DEC, /* /< Sorenson Spark decoder */
+ VAL_CODEC_TYPE_VC1_SP_DEC, /* /< VC-1 simple profile decoder */
+ VAL_CODEC_TYPE_RV9_DEC, /* /< RV9 decoder */
+ VAL_CODEC_TYPE_MP1_MP2_DEC, /* /< MPEG1/2 decoder */
+ VAL_CODEC_TYPE_XVID_DEC, /* /< Xvid decoder */
+ VAL_CODEC_TYPE_DIVX4_DIVX5_DEC, /* /< Divx4/5 decoder */
+ VAL_CODEC_TYPE_VC1_MP_WMV9_DEC, /* /< VC-1 main profile (WMV9) decoder */
+ VAL_CODEC_TYPE_RV8_DEC, /* /< RV8 decoder */
+ VAL_CODEC_TYPE_WMV7_DEC, /* /< WMV7 decoder */
+ VAL_CODEC_TYPE_WMV8_DEC, /* /< WMV8 decoder */
+ VAL_CODEC_TYPE_AVS_DEC, /* /< AVS decoder */
+ VAL_CODEC_TYPE_DIVX_3_11_DEC, /* /< Divx3.11 decoder */
+ VAL_CODEC_TYPE_H264_DEC_MAIN, /* /< H.264 main profile decoder (due to different packet) == 20 */
+ VAL_CODEC_TYPE_MAX = 0xFFFFFFFF /* /< Max driver type */
+} VAL_CODEC_TYPE_T;
+
+
+typedef enum _VAL_CACHE_TYPE_T {
+
+ VAL_CACHE_TYPE_CACHABLE = 0,
+ VAL_CACHE_TYPE_NONCACHABLE,
+ VAL_CACHE_TYPE_MAX = 0xFFFFFFFF
+
+} VAL_CACHE_TYPE_T;
+
+
+/**
+ * @par Structure
+ * VAL_INTMEM_T
+ * @par Description
+ * This is a parameter for eVideoIntMemUsed()
+ */
+typedef struct _VAL_INTMEM_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_UINT32_T u4MemSize; /* /< [OUT] The size of internal memory */
+ VAL_VOID_T *pvMemVa; /* /< [OUT] The internal memory start virtual address */
+ VAL_VOID_T *pvMemPa; /* /< [OUT] The internal memory start physical address */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} VAL_INTMEM_T;
+
+
+/**
+ * @par Structure
+ * VAL_EVENT_T
+ * @par Description
+ * This is a parameter for eVideoWaitEvent() and eVideoSetEvent()
+ */
+typedef struct _VAL_EVENT_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_VOID_T *pvWaitQueue; /* /< [IN] The waitqueue discription */
+ VAL_VOID_T *pvEvent; /* /< [IN] The event discription */
+ VAL_UINT32_T u4TimeoutMs; /* /< [IN] The timeout ms */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} VAL_EVENT_T;
+
+
+/**
+ * @par Structure
+ * VAL_MUTEX_T
+ * @par Description
+ * This is a parameter for eVideoWaitMutex() and eVideoReleaseMutex()
+ */
+typedef struct _VAL_MUTEX_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_VOID_T *pvMutex; /* /< [IN] The Mutex discriptor */
+ VAL_UINT32_T u4TimeoutMs; /* /< [IN] The timeout ms */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} VAL_MUTEX_T;
+
+
+/**
+ * @par Structure
+ * VAL_POWER_T
+ * @par Description
+ * This is a parameter for eVideoHwPowerCtrl()
+ */
+typedef struct _VAL_POWER_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_DRIVER_TYPE_T eDriverType; /* /< [IN] The driver type */
+ VAL_BOOL_T fgEnable; /* /< [IN] Enable or not. */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+ /* VAL_UINT32_T u4L2CUser; ///< [OUT] The number of power user right now */
+} VAL_POWER_T;
+
+
+/**
+ * @par Structure
+ * VAL_MMAP_T
+ * @par Description
+ * This is a parameter for eVideoMMAP() and eVideoUNMAP()
+ */
+typedef struct _VAL_MMAP_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_VOID_T *pvMemPa; /* /< [IN] The physical memory address */
+ VAL_UINT32_T u4MemSize; /* /< [IN] The memory size */
+ VAL_VOID_T *pvMemVa; /* /< [IN] The mapped virtual memory address */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} VAL_MMAP_T;
+
+
+typedef struct {
+ VAL_ULONG_T u4ReadAddr; /* / [IN] memory source address in VA */
+ VAL_UINT32_T u4ReadData; /* / [OUT] memory data */
+} VAL_VCODEC_OAL_MEM_STAUTS_T;
+
+
+typedef struct {
+ /*
+ /< [IN/OUT] HW is Completed or not, set by driver & clear by codec
+ (0: not completed or still in lock status;
+ 1: HW is completed or in unlock status)
+ */
+ VAL_UINT32_T u4HWIsCompleted;
+ /*
+ /< [OUT] HW is Timeout or not, set by driver & clear by codec
+ (0: not in timeout status;
+ 1: HW is in timeout status)
+ */
+ VAL_UINT32_T u4HWIsTimeout;
+ VAL_UINT32_T u4NumOfRegister; /* /< [IN] Number of HW register need to store; */
+ VAL_VCODEC_OAL_MEM_STAUTS_T *pHWStatus;
+} VAL_VCODEC_OAL_HW_REGISTER_T;
+
+
+typedef struct {
+ VAL_VCODEC_OAL_HW_REGISTER_T *Oal_HW_reg;
+ VAL_UINT32_T *Oal_HW_mem_reg;
+ VAL_UINT32_T *kva_Oal_HW_mem_reg;
+ VAL_ULONG_T pa_Oal_HW_mem_reg;
+ VAL_ULONG_T ObjId;
+ VAL_EVENT_T IsrEvent;
+ VAL_UINT32_T slotindex;
+ VAL_UINT32_T u4VCodecThreadNum;
+ VAL_UINT32_T u4VCodecThreadID[VCODEC_THREAD_MAX_NUM];
+ VAL_HANDLE_T pvHandle; /* physical address of the owner handle */
+ VAL_UINT32_T u4NumOfRegister;
+ /* MAX 16 items could be read; //kernel space access register */
+ VAL_VCODEC_OAL_MEM_STAUTS_T oalmem_status[OALMEM_STATUS_NUM];
+ VAL_ULONG_T kva_u4HWIsCompleted;
+ VAL_ULONG_T kva_u4HWIsTimeout;
+ VAL_UINT32_T tid1;
+ VAL_UINT32_T tid2;
+
+ /* record VA, PA */
+ VAL_UINT32_T *va1;
+ VAL_UINT32_T *va2;
+ VAL_UINT32_T *va3;
+ VAL_UINT32_T pa1;
+ VAL_UINT32_T pa2;
+ VAL_UINT32_T pa3;
+
+} VAL_VCODEC_OAL_HW_CONTEXT_T;
+
+
+typedef struct {
+ int CPUid; /* [in] */
+ int Loading; /* [out] */
+} VAL_VCODEC_CORE_LOADING_T;
+
+typedef void (*ena)(int);
+typedef void (*disa)(int);
+typedef void (*ena_timeout)(int, int);
+typedef int (*user_reg)(int, int);
+typedef void (*user_unreg)(int);
+typedef void (*user_enable)(int);
+typedef void (*user_disable)(int);
+typedef void (*user_enable_timeout)(int, int);
+typedef int (*user_reg_scn)(void);
+typedef void (*user_reg_scn_config)(int, int, int, int, int, int);
+typedef void (*user_unreg_scn)(int);
+
+
+
+typedef struct _VAL_INIT_HANDLE {
+ int i4DriverType;
+ int i4VENCLivePhoto;
+} VAL_INIT_HANDLE;
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_TYPES_PRIVATE_H_ */
diff --git a/kernel-headers/val_types_public.h b/kernel-headers/val_types_public.h
new file mode 100644
index 0000000..ed407ac
--- /dev/null
+++ b/kernel-headers/val_types_public.h
@@ -0,0 +1,581 @@
+#ifndef _VAL_TYPES_PUBLIC_H_
+#define _VAL_TYPES_PUBLIC_H_
+
+#include <sys/types.h>
+#include <linux/ion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IRQ_STATUS_MAX_NUM 16 /* /< support max 16 return register values when HW done */
+
+#define VCODEC_THREAD_MAX_NUM 16 /* /< support max 16 multiple thread currently */
+
+/*=============================================================================
+ * Type definition
+ *===========================================================================*/
+
+typedef void VAL_VOID_T; /* /< void type definition */
+typedef char VAL_BOOL_T; /* /< char type definition */
+typedef char VAL_CHAR_T; /* /< char type definition */
+typedef signed char VAL_INT8_T; /* /< signed char type definition */
+typedef signed short VAL_INT16_T; /* /< signed short type definition */
+typedef signed int VAL_INT32_T; /* /< signed int type definition */
+typedef unsigned char VAL_UCHAR_T; /* /< unsigned char type definition */
+typedef unsigned char VAL_UINT8_T; /* /< unsigned char type definition */
+typedef unsigned short VAL_UINT16_T; /* /< unsigned short definition */
+typedef unsigned int VAL_UINT32_T; /* /< unsigned int type definition */
+typedef unsigned long long VAL_UINT64_T; /* /< unsigned long long type definition */
+typedef long long VAL_INT64_T; /* /< long long type definition */
+typedef unsigned long VAL_HANDLE_T; /* /< unsigned int (handle) type definition */
+typedef signed long VAL_LONG_T; /* / */
+typedef unsigned long VAL_ULONG_T; /* / */
+
+#define VAL_NULL (0) /* /< VAL_NULL = 0 */
+#define VAL_TRUE (1) /* /< VAL_TRUE = 1 */
+#define VAL_FALSE (0) /* /< VAL_FALSE = 0 */
+
+/* /< VAL_RESOLUTION_CHANGED = 2, used to video resolution changed during playback */
+#define VAL_RESOLUTION_CHANGED (2)
+
+/**
+ * @par Enumeration
+ * VAL_MEM_CODEC_T
+ * @par Description
+ * This is the item used to memory usage for video encoder or video decoder
+ */
+typedef enum _VAL_MEM_CODEC_T {
+ VAL_MEM_CODEC_FOR_VENC = 0, /* /< Memory for Video Encoder */
+ VAL_MEM_CODEC_FOR_VDEC, /* /< Memory for Video Decoder */
+ VAL_MEM_CODEC_MAX = 0xFFFFFFFF /* /< Max Value */
+} VAL_MEM_CODEC_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_CHIP_NAME_T
+ * @par Description
+ * This is the item for query chip name for HAL interface
+ */
+typedef enum _VAL_CHIP_NAME_T {
+ VAL_CHIP_NAME_MT6516 = 0, /* /< MT6516 */
+ VAL_CHIP_NAME_MT6571, /* /< MT6571 */
+ VAL_CHIP_NAME_MT6572, /* /< MT6572 */
+ VAL_CHIP_NAME_MT6573, /* /< MT6573 */
+ VAL_CHIP_NAME_MT6575, /* /< MT6575 */
+ VAL_CHIP_NAME_MT6577, /* /< MT6577 */
+ VAL_CHIP_NAME_MT6589, /* /< MT6589 */
+ VAL_CHIP_NAME_MT6582, /* /< MT6582 */
+ VAL_CHIP_NAME_MT8135, /* /< MT8135 */
+ VAL_CHIP_NAME_ROME, /* /< ROME */
+ VAL_CHIP_NAME_MT6592, /* /< MT6592 */
+ VAL_CHIP_NAME_MT8127, /* /< MT8127 */
+ VAL_CHIP_NAME_MT6752, /* /< MT6752 */
+ VAL_CHIP_NAME_MT6795, /* /< MT6795 */
+ VAL_CHIP_NAME_DENALI_1, /* /< Denali-1 */
+ VAL_CHIP_NAME_DENALI_2, /* /< Denali-2 */
+ VAL_CHIP_NAME_DENALI_3, /* /< Denali-3 */
+ VAL_CHIP_NAME_MT6570, /* /< Rainier (2 core) */
+ VAL_CHIP_NAME_MT6580, /* /< Rainier (4 core) */
+ VAL_CHIP_NAME_MT8163,
+ VAL_CHIP_NAME_MT8173, /* / <8173 */
+ VAL_CHIP_NAME_MT6755, /* / <Jade */
+ VAL_CHIP_NAME_MT6797, /* / <Everest */
+ VAL_CHIP_NAME_MAX = 0xFFFFFFFF /* /< Max Value */
+} VAL_CHIP_NAME_T;
+
+/**
+ * @par Enumeration
+ * VAL_CHIP_VARIANT_T
+ * @par Description
+ * This is the item for query chip variant for HAL interface
+ */
+typedef enum _VAL_CHIP_VARIANT_T {
+ VAL_CHIP_VARIANT_MT6571L = 0, /* /< MT6571L */
+ VAL_CHIP_VARIANT_MAX = 0xFFFFFFFF /* /< Max Value */
+} VAL_CHIP_VARIANT_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_CHIP_VERSION_T
+ * @par Description
+ * This is the item used to GetChipVersionAPI()
+ */
+typedef enum _VAL_CHIP_VERSION_T {
+ /* /< The data will be "6595" for 6595 series; "6795" for 6795 series, ... */
+ VAL_CHIP_VERSION_HW_CODE = 0,
+ /* /< The data will be "0000" for E1; "0001" for E2, ... */
+ VAL_CHIP_VERSION_SW_VER,
+ /* /< Max Value */
+ VAL_CHIP_VERSION_MAX = 0xFFFFFFFF
+} VAL_CHIP_VERSION_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_DRIVER_TYPE_T
+ * @par Description
+ * This is the item for driver type
+ */
+typedef enum _VAL_DRIVER_TYPE_T {
+ VAL_DRIVER_TYPE_NONE = 0, /* /< None */
+ VAL_DRIVER_TYPE_MP4_ENC, /* /< MP4 encoder */
+ VAL_DRIVER_TYPE_MP4_DEC, /* /< MP4 decoder */
+ VAL_DRIVER_TYPE_H263_ENC, /* /< H.263 encoder */
+ VAL_DRIVER_TYPE_H263_DEC, /* /< H.263 decoder */
+ VAL_DRIVER_TYPE_H264_ENC, /* /< H.264 encoder */
+ VAL_DRIVER_TYPE_H264_DEC, /* /< H.264 decoder */
+ VAL_DRIVER_TYPE_SORENSON_SPARK_DEC, /* /< Sorenson Spark decoder */
+ VAL_DRIVER_TYPE_VC1_SP_DEC, /* /< VC-1 simple profile decoder */
+ VAL_DRIVER_TYPE_RV9_DEC, /* /< RV9 decoder */
+ VAL_DRIVER_TYPE_MP1_MP2_DEC, /* /< MPEG1/2 decoder */
+ VAL_DRIVER_TYPE_XVID_DEC, /* /< Xvid decoder */
+ VAL_DRIVER_TYPE_DIVX4_DIVX5_DEC, /* /< Divx4/5 decoder */
+ VAL_DRIVER_TYPE_VC1_MP_WMV9_DEC, /* /< VC-1 main profile (WMV9) decoder */
+ VAL_DRIVER_TYPE_RV8_DEC, /* /< RV8 decoder */
+ VAL_DRIVER_TYPE_WMV7_DEC, /* /< WMV7 decoder */
+ VAL_DRIVER_TYPE_WMV8_DEC, /* /< WMV8 decoder */
+ VAL_DRIVER_TYPE_AVS_DEC, /* /< AVS decoder */
+ VAL_DRIVER_TYPE_DIVX_3_11_DEC, /* /< Divx3.11 decoder */
+ VAL_DRIVER_TYPE_H264_DEC_MAIN, /* /< H.264 main profile decoder (due to different packet) == 20 */
+ /* /< H.264 main profile decoder for CABAC type but packet is the same, just for reload. */
+ VAL_DRIVER_TYPE_H264_DEC_MAIN_CABAC,
+ VAL_DRIVER_TYPE_VP8_DEC, /* /< VP8 decoder */
+ VAL_DRIVER_TYPE_MP2_DEC, /* /< MPEG2 decoder */
+ VAL_DRIVER_TYPE_VP9_DEC, /* /< VP9 decoder */
+ VAL_DRIVER_TYPE_VP8_ENC, /* /< VP8 encoder */
+ VAL_DRIVER_TYPE_VC1_ADV_DEC, /* /< VC1 advance decoder */
+ VAL_DRIVER_TYPE_VC1_DEC, /* /< VC1 simple/main/advance decoder */
+ VAL_DRIVER_TYPE_JPEG_ENC, /* /< JPEG encoder */
+ VAL_DRIVER_TYPE_HEVC_ENC, /* /< HEVC encoder */
+ VAL_DRIVER_TYPE_HEVC_DEC, /* /< HEVC decoder */
+ VAL_DRIVER_TYPE_H264_ENC_LIVEPHOTO, /* LivePhoto type */
+ VAL_DRIVER_TYPE_MAX = 0xFFFFFFFF /* /< Max driver type */
+} VAL_DRIVER_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_RESULT_T
+ * @par Description
+ * This is the return status of each OSAL function
+ */
+typedef enum _VAL_RESULT_T {
+ VAL_RESULT_NO_ERROR = 0, /* /< The function work successfully */
+ VAL_RESULT_INVALID_DRIVER, /* /< Error due to invalid driver */
+ VAL_RESULT_INVALID_PARAMETER, /* /< Error due to invalid parameter */
+ VAL_RESULT_INVALID_MEMORY, /* /< Error due to invalid memory */
+ VAL_RESULT_INVALID_ISR, /* /< Error due to invalid isr request */
+ VAL_RESULT_ISR_TIMEOUT, /* /< Error due to invalid isr request */
+ VAL_RESULT_UNKNOWN_ERROR, /* /< Unknown error */
+ VAL_RESULT_RESTARTSYS, /* /< Restart sys */
+ VAL_RESULT_MAX = 0xFFFFFFFF /* /< Max result */
+} VAL_RESULT_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_MEM_ALIGN_T
+ * @par Description
+ * This is the item for allocation memory byte alignment
+ */
+typedef enum _VAL_MEM_ALIGN_T {
+ VAL_MEM_ALIGN_1 = 1, /* /< 1 byte alignment */
+ VAL_MEM_ALIGN_2 = (1 << 1), /* /< 2 byte alignment */
+ VAL_MEM_ALIGN_4 = (1 << 2), /* /< 4 byte alignment */
+ VAL_MEM_ALIGN_8 = (1 << 3), /* /< 8 byte alignment */
+ VAL_MEM_ALIGN_16 = (1 << 4), /* /< 16 byte alignment */
+ VAL_MEM_ALIGN_32 = (1 << 5), /* /< 32 byte alignment */
+ VAL_MEM_ALIGN_64 = (1 << 6), /* /< 64 byte alignment */
+ VAL_MEM_ALIGN_128 = (1 << 7), /* /< 128 byte alignment */
+ VAL_MEM_ALIGN_256 = (1 << 8), /* /< 256 byte alignment */
+ VAL_MEM_ALIGN_512 = (1 << 9), /* /< 512 byte alignment */
+ VAL_MEM_ALIGN_1K = (1 << 10), /* /< 1K byte alignment */
+ VAL_MEM_ALIGN_2K = (1 << 11), /* /< 2K byte alignment */
+ VAL_MEM_ALIGN_4K = (1 << 12), /* /< 4K byte alignment */
+ VAL_MEM_ALIGN_8K = (1 << 13), /* /< 8K byte alignment */
+ VAL_MEM_ALIGN_MAX = 0xFFFFFFFF /* /< Max memory byte alignment */
+} VAL_MEM_ALIGN_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_MEM_TYPE_T
+ * @par Description
+ * This is the item for allocation memory type
+ */
+typedef enum _VAL_MEM_TYPE_T {
+ VAL_MEM_TYPE_FOR_SW = 0, /* /< External memory foe SW */
+ VAL_MEM_TYPE_FOR_HW_CACHEABLE, /* /< External memory for HW Cacheable */
+ VAL_MEM_TYPE_FOR_HW_CACHEABLE_MCI, /* /< External memory for HW Cacheable, with MCI port config */
+ VAL_MEM_TYPE_FOR_HW_NONCACHEABLE, /* /< External memory for HW Non-Cacheable */
+ VAL_MEM_TYPE_MAX = 0xFFFFFFFF /* /< Max memory type */
+} VAL_MEM_TYPE_T;
+
+
+/**
+ * @par Structure
+ * VAL_MEM_ADDR_T
+ * @par Description
+ * This is a structure for memory address
+ */
+typedef struct _VAL_MEM_ADDR_T { /* union extend 64bits for TEE*/
+ union {
+ VAL_ULONG_T u4VA; /* /< [IN/OUT] virtual address */
+ VAL_UINT64_T u4VA_ext64;
+ };
+ union {
+ VAL_ULONG_T u4PA; /* /< [IN/OUT] physical address */
+ VAL_UINT64_T u4PA_ext64;
+ };
+ union {
+ VAL_ULONG_T u4Size; /* /< [IN/OUT] size */
+ VAL_UINT64_T u4Size_ext64;
+ };
+} VAL_MEM_ADDR_T;
+
+
+/**
+ * @par Structure
+ * VAL_VCODEC_THREAD_ID_T
+ * @par Description
+ * This is a structure for thread info
+ */
+typedef struct _VAL_VCODEC_THREAD_ID_T {
+ VAL_UINT32_T u4tid1; /* /< [IN/OUT] thread id for single core */
+ VAL_UINT32_T u4tid2; /* /< [IN/OUT] thread id for single core */
+ VAL_UINT32_T u4VCodecThreadNum; /* /< [IN/OUT] thread num */
+ VAL_UINT32_T u4VCodecThreadID[VCODEC_THREAD_MAX_NUM]; /* /< [IN/OUT] thread id for each thread */
+} VAL_VCODEC_THREAD_ID_T;
+
+
+/**
+ * @par Structure
+ * VAL_VCODEC_CPU_LOADING_INFO_T
+ * @par Description
+ * This is a structure for CPU loading info
+ */
+typedef struct _VAL_VCODEC_CPU_LOADING_INFO_T {
+ unsigned long long _cpu_idle_time; /* /< [OUT] cpu idle time */
+ unsigned long long _thread_cpu_time; /* /< [OUT] thread cpu time */
+ unsigned long long _sched_clock; /* /< [OUT] sched clock */
+ unsigned int _inst_count; /* /< [OUT] inst count */
+} VAL_VCODEC_CPU_LOADING_INFO_T;
+
+
+/**
+ * @par Structure
+ * VAL_VCODEC_CPU_OPP_LIMIT_T
+ * @par Description
+ * This is a structure for CPU opp limit info
+ */
+typedef struct _VAL_VCODEC_CPU_OPP_LIMIT_T {
+ int limited_freq; /* /< [IN] limited freq */
+ int limited_cpu; /* /< [IN] limited cpu */
+ int enable; /* /< [IN] enable */
+} VAL_VCODEC_CPU_OPP_LIMIT_T;
+
+
+/**
+ * @par Structure
+ * VAL_VCODEC_M4U_BUFFER_CONFIG_T
+ * @par Description
+ * This is a structure for m4u buffer config
+ */
+typedef struct _VAL_VCODEC_M4U_BUFFER_CONFIG_T {
+ VAL_MEM_CODEC_T eMemCodec; /* /< [IN] memory usage for encoder or decoder */
+ VAL_UINT32_T cache_coherent; /* /< [IN] cache coherent or not */
+ VAL_UINT32_T security; /* /< [IN] security or not */
+} VAL_VCODEC_M4U_BUFFER_CONFIG_T;
+
+
+/**
+ * @par Structure
+ * VAL_MEMORY_T
+ * @par Description
+ * This is a parameter for memory usaged function
+ */
+typedef struct _VAL_MEMORY_T { /* union extend 64bits for TEE*/
+ VAL_MEM_TYPE_T eMemType; /* /< [IN] The allocation memory type */
+ union {
+ VAL_ULONG_T u4MemSize; /* /< [IN] The size of memory allocation */
+ VAL_UINT64_T u4MemSize_ext64;
+ };
+ union {
+ VAL_VOID_T *pvMemVa;
+ VAL_UINT64_T pvMemVa_ext64;
+ };
+ union {
+ VAL_VOID_T *pvMemPa;
+ VAL_UINT64_T pvMemPa_ext64;
+ };
+ VAL_MEM_ALIGN_T eAlignment; /* /< [IN] The memory byte alignment setting */
+ union {
+ VAL_VOID_T *pvAlignMemVa;
+ VAL_UINT64_T pvAlignMemVa_ext64;
+ };
+ union {
+ VAL_VOID_T *pvAlignMemPa;
+ VAL_UINT64_T pvAlignMemPa_ext64;
+ };
+ VAL_MEM_CODEC_T eMemCodec; /* /< [IN] The memory codec for VENC or VDEC */
+ VAL_UINT32_T i4IonShareFd;
+
+ union {
+ ion_user_handle_t pIonBufhandle;
+ VAL_UINT64_T pIonBufhandle_ext64;
+ };
+ union {
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT64_T pvReserved_ext64;
+ };
+ union {
+ VAL_ULONG_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+ VAL_UINT64_T u4ReservedSize_ext64;
+ };
+#ifdef __EARLY_PORTING__
+ union {
+ VAL_VOID_T *pvReservedPmem; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT64_T pvReservedPmem_ext64;
+ };
+#endif
+} VAL_MEMORY_T;
+
+/**
+ * @par Structure
+ * VAL_RECORD_SIZE_T
+ * @par Description
+ * This is a parameter for setting record size to EMI controller
+ */
+typedef struct __VAL_RECORD_SIZE_T {
+ VAL_UINT32_T u4FrmWidth; /* /< [IN] Frame Width, (may not 16 byte-align) */
+ VAL_UINT32_T u4FrmHeight; /* /< [IN] Frame Height, (may not 16 byte-align) */
+ VAL_UINT32_T u4BufWidth; /* /< [IN] Buffer Width, (must 16 byte-align) */
+ VAL_UINT32_T u4BufHeight; /* /< [IN] Buffer Height, (must 16 byte-align) */
+} VAL_RECORD_SIZE_T;
+
+
+/**
+ * @par Structure
+ * VAL_ATOI_T
+ * @par Description
+ * This is a parameter for eVideoAtoi()
+ */
+typedef struct _VAL_ATOI_T {
+ VAL_VOID_T *pvStr; /* /< [IN] Null-terminated String to be converted */
+ /* /< [Out] returns the int value produced by interpreting the input characters as a number. */
+ VAL_INT32_T i4Result;
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} VAL_ATOI_T;
+
+
+/**
+ * @par Structure
+ * VAL_STRSTR_T
+ * @par Description
+ * This is a parameter for eVideoStrStr()
+ */
+typedef struct _VAL_STRSTR_T {
+ VAL_VOID_T *pvStr; /* /< [IN] Null-terminated string to search. */
+ VAL_VOID_T *pvStrSearch; /* /< [IN] Null-terminated string to search for */
+ /*
+ /< [Out] Returns a pointer to the first occurrence of strSearch in str,
+ or NULL if strSearch does not appear in str.
+ */
+ VAL_VOID_T *pvStrResult;
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+} VAL_STRSTR_T;
+
+
+/**
+ * @par Structure
+ * VAL_ISR_T
+ * @par Description
+ * This is a parameter for ISR related function
+ */
+typedef struct _VAL_ISR_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_DRIVER_TYPE_T eDriverType; /* /< [IN] The driver type */
+ VAL_VOID_T *pvIsrFunction; /* /< [IN] The isr function */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+ VAL_UINT32_T u4TimeoutMs; /* /< [IN] The timeout in ms */
+ /* /< [IN] The num of return registers when HW done */
+ VAL_UINT32_T u4IrqStatusNum;
+ /* /< [IN/OUT] The value of return registers when HW done */
+ VAL_UINT32_T u4IrqStatus[IRQ_STATUS_MAX_NUM];
+} VAL_ISR_T;
+
+
+/**
+ * @par Structure
+ * VAL_HW_LOCK_T
+ * @par Description
+ * This is a parameter for HW Lock/UnLock related function
+ */
+typedef struct _VAL_HW_LOCK_T {
+ VAL_VOID_T *pvHandle; /* /< [IN] The video codec driver handle */
+ VAL_UINT32_T u4HandleSize; /* /< [IN] The size of video codec driver handle */
+ VAL_VOID_T *pvLock; /* /< [IN/OUT] The Lock discriptor */
+ VAL_UINT32_T u4TimeoutMs; /* /< [IN] The timeout ms */
+ VAL_VOID_T *pvReserved; /* /< [IN/OUT] The reserved parameter */
+ VAL_UINT32_T u4ReservedSize; /* /< [IN] The size of reserved parameter structure */
+ VAL_DRIVER_TYPE_T eDriverType; /* /< [IN] The driver type */
+ /* /< [IN] True if this is a secure instance // MTK_SEC_VIDEO_PATH_SUPPORT */
+ VAL_BOOL_T bSecureInst;
+} VAL_HW_LOCK_T;
+
+
+/**
+ * @par Structure
+ * VAL_TIME_T
+ * @par Description
+ * This is a structure for system time.
+ */
+typedef struct _VAL_TIME_T {
+ VAL_UINT32_T u4Sec; /* /< [IN/OUT] second */
+ VAL_UINT32_T u4uSec; /* /< [IN/OUT] micro second */
+} VAL_TIME_T;
+
+
+/**
+ * @par Enumeration
+ * VAL_SET_TYPE_T
+ * @par Description
+ * This is the item for setting val parameter
+ */
+typedef enum _VAL_SET_TYPE_T {
+ VAL_SET_TYPE_CURRENT_SCENARIO, /* /< Set current scenario */
+ VAL_SET_TYPE_MCI_PORT_CONFIG, /* /< Set MCI port config */
+ VAL_SET_TYPE_M4U_PORT_CONFIG, /* /< Set M4U port config */
+ VAL_SET_TYPE_SET_TCM_ON, /* /< Set TCM on */
+ VAL_SET_TYPE_SET_TCM_OFF, /* /< Set TCM off */
+} VAL_SET_TYPE_T;
+
+/**
+ * @par Enumeration
+ * VAL_GET_TYPE_T
+ * @par Description
+ * This is the item for getting val parameter
+ */
+typedef enum _VAL_GET_TYPE_T {
+ VAL_GET_TYPE_CURRENT_SCENARIO_CNT, /* /< Get current scenario reference count */
+ VAL_GET_TYPE_LCM_INFO, /* /< Get LCM info */
+} VAL_GET_TYPE_T;
+
+/**
+ * @par Enumeration
+ * VAL_VCODEC_SCENARIO
+ * @par Description
+ * This is the item for get/setting current vcodec scenario
+ */
+typedef enum _VAL_VCODEC_SCENARIO_T {
+ VAL_VCODEC_SCENARIO_VENC_1080P = 0x1, /* /< Camera recording 1080P */
+ VAL_VCODEC_SCENARIO_VDEC_1080P = 0x2, /* /< Playback 1080P */
+ VAL_VCODEC_SCENARIO_VENC_WFD = 0x4, /* /< Wifi-display encoding */
+} VAL_VCODEC_SCENARIO_T;
+
+/**
+ * @par Structure
+ * VAL_CURRENT_SCENARIO_T
+ * @par Description
+ * This is a structure for set/get current scenario
+ */
+typedef struct _VAL_CURRENT_SCENARIO_T {
+ VAL_UINT32_T u4Scenario; /* /< [IN/OUT] set/get current scenario */
+ VAL_UINT32_T u4OnOff; /* /< [IN] set on/off (increment/decrement) 1 = inc, 0 = dec */
+} VAL_CURRENT_SCENARIO_T;
+
+/**
+ * @par Structure
+ * VAL_CURRENT_SCENARIO_CNT_T
+ * @par Description
+ * This is a structure for set/get current scenario reference count
+ */
+typedef struct _VAL_CURRENT_SCENARIO_CNT_T {
+ VAL_UINT32_T u4Scenario; /* /< [IN] current scenario type */
+ VAL_UINT32_T u4ScenarioRefCount; /* /< [OUT] current scenario reference count */
+} VAL_CURRENT_SCENARIO_CNT_T;
+
+
+/**
+ * @par Structure
+ * VAL_MCI_PORT_CONFIG_T
+ * @par Description
+ * This is a structure for set/get MCI port config
+ */
+typedef struct _VAL_MCI_PORT_CONFIG_T {
+ VAL_MEM_CODEC_T eMemCodecType; /* /< [IN] memory type - decoder/encoder */
+ VAL_UINT32_T u4Config; /* /< [IN] set port config */
+} VAL_MCI_PORT_CONFIG_T;
+
+/**
+ * @par Structure
+ * VAL_LCM_INFO_T
+ * @par Description
+ * This is a structure for get LCM info
+ */
+typedef struct _VAL_LCM_INFO_T {
+ VAL_UINT32_T u4Width; /* /< [OUT] width */
+ VAL_UINT32_T u4Height; /* /< [OUT] height */
+} VAL_LCM_INFO_T;
+
+#define VAL_M4U_PORT_ALL (-1) /* /< VAL_M4UPORT_DEFAULT_ALL = 1, config all M4U port for VENC or VDEC */
+
+/**
+ * @par Structure
+ * VAL_M4U_MPORT_CONFIG_T
+ * @par Description
+ * This is a parameter for eVideoSetParam() input structure
+ */
+typedef struct _VAL_M4U_MPORT_CONFIG_T {
+ /* /< [IN] The memory codec for VENC or VDEC */
+ VAL_MEM_CODEC_T eMemCodec;
+ /* /< [IN] config port ID (VAL_M4U_PORT_ALL[-1] = config all VENC or VDEC) */
+ VAL_UINT32_T i4M4UPortID;
+ /* /< [IN] config port security */
+ VAL_BOOL_T bSecurity;
+ /* /< [IN] config port virtuality */
+ VAL_BOOL_T bVirtuality;
+} VAL_M4U_MPORT_CONFIG_T;
+
+
+/* for DirectLink Meta Mode + */
+#define META_HANDLE_LIST_MAX 50
+
+typedef struct _VAL_MetaBufInfo {
+ void *pNativeHandle;
+ VAL_ULONG_T u4VA;
+ VAL_ULONG_T u4PA;
+ VAL_UINT32_T u4BuffSize;
+ VAL_BOOL_T bUseION;
+ int fd;
+ ion_user_handle_t pIonBufhandle;
+} VAL_MetaBufInfo;
+
+typedef struct _VAL_MetaHandleList {
+ int mIonDevFd;
+ VAL_MetaBufInfo rMetaBufInfo[META_HANDLE_LIST_MAX];
+ VAL_BOOL_T fgSeqHdrEncoded;
+} VAL_MetaHandleList;
+
+typedef struct _VAL_BufInfo {
+ VAL_UINT8_T fgIsConfigData;
+ VAL_ULONG_T u4BSVA;
+ VAL_UINT8_T fgBSStatus;
+ VAL_UINT8_T fgIsKeyFrame;
+ VAL_UINT32_T u4BSSize;
+} VAL_BufInfo;
+/* for DirectLink Meta Mode - */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_TYPES_PUBLIC_H_ */
diff --git a/kernel-headers/val_vcodec_utility.h b/kernel-headers/val_vcodec_utility.h
new file mode 100644
index 0000000..99ea8e9
--- /dev/null
+++ b/kernel-headers/val_vcodec_utility.h
@@ -0,0 +1,79 @@
+#ifndef _VAL_VCODEC_UTILITY_H_
+#define _VAL_VCODEC_UTILITY_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_public.h"
+#include "hal_api.h"
+
+/* for hardware vc1_dec + */
+
+/**
+ * @par Function
+ * BPDec
+ * @par Description
+ * The function used to BP dec
+ * @param
+ * hHandle [IN/OUT] handle
+ * @param
+ * hBitHandle [IN/OUT] bits nandle
+ * @param
+ * bpType [IN] WMV_BP_TYPE
+ * @par Returns
+ * VDDRV_MRESULT_T, return VDDRV_MRESULT_SUCCESS is success, return others if fail
+ */
+VDDRV_MRESULT_T BPDec(VAL_HANDLE_T hHandle, VAL_HANDLE_T *hBitHandle, WMV_BP_TYPE bpType);
+
+
+/**
+ * @par Function
+ * GetReadBSPt
+ * @par Description
+ * The function used to get bitstream pointer
+ * @param
+ * hHandle [IN/OUT] handle
+ * @param
+ * hBitsHandle [IN/OUT] bits nandle
+ * @param
+ * pBits [IN] Bits
+ * @par Returns
+ * VAL_UINT32_T, return bitstream pointer
+ */
+VAL_UINT32_T GetReadBSPt(VAL_HANDLE_T hHandle, VAL_HANDLE_T hBitsHandle, VAL_UINT32_T *pBits);
+
+
+/**
+ * @par Function
+ * GetBPDecBits
+ * @par Description
+ * The function used to get decode bits
+ * @param
+ * hHandle [IN/OUT] handle
+ * @par Returns
+ * VAL_UINT32_T, return decode bits
+ */
+VAL_UINT32_T GetBPDecBits(VAL_HANDLE_T hHandle);
+
+
+/**
+ * @par Function
+ * WMVDecode_HW
+ * @par Description
+ * The function used to decode WMV
+ * @param
+ * hHandle [IN/OUT] handle
+ * @param
+ * hBitHandle [IN/OUT] bits nandle
+ * @par Returns
+ * VDDRV_MRESULT_T, return VDDRV_MRESULT_SUCCESS is success, return others if fail
+ */
+VDDRV_MRESULT_T WMVDecode_HW(VAL_HANDLE_T hHandle, VAL_HANDLE_T *hBitHandle);
+/* for hardware vc1_dec - */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VAL_VCODEC_UTILITY_H_ */
diff --git a/kernel-headers/vcodec_OAL_v2.h b/kernel-headers/vcodec_OAL_v2.h
new file mode 100644
index 0000000..fa4ef40
--- /dev/null
+++ b/kernel-headers/vcodec_OAL_v2.h
@@ -0,0 +1,497 @@
+#ifndef VCODEC_OAL_V2_H
+#define VCODEC_OAL_V2_H
+#define IN
+#define OUT
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "vcodec_if_v2.h"
+
+#ifdef WIN32
+#include <windows.h>
+
+#endif
+#define VCODEC_OAL_VERSION 20140812
+#define VCODEC_ASSERT(expr, a) \
+ do {if (!(expr)) rVCODEC_OAL_Function.VCodecAssertFail(__FILE__, __LINE__, a); } while (0)
+
+typedef enum {
+ VCODEC_OAL_CODEC_NONE = 0,
+ VCODEC_OAL_H264_DEC,
+ VCODEC_OAL_HEVC_DEC,
+ VCODEC_OAL_VP8_DEC,
+ VCODEC_OAL_VP9_DEC,
+ VCODEC_OAL_RMVB_DEC,
+ VCODEC_OAL_MPEG2_DEC,
+ VCODEC_OAL_MPEG4_DEC,
+ VCODEC_OAL_VC1_DEC,
+ VCODEC_OAL_H264_ENC,
+ VCODEC_OAL_HEVC_ENC,
+ VCODEC_OAL_VP8_ENC,
+ VCODEC_OAL_VP9_ENC,
+ VCODEC_OAL_MPEG4_ENC,
+ NUM_OF_VCODEC_OAL_CODEC_TYP,
+} VCODEC_OAL_CODEC_TYPE;
+
+typedef struct {
+ VCODEC_OAL_CODEC_TYPE eCodec;
+ void *reserve1;
+ void *reserve2;
+ void *reserve3;
+ void *reserve4;
+} VCODEC_OAL_HW_CTR_INFO_T;
+
+void VCodecQueryMemType(IN void *pBuffer_VA, IN unsigned int u4Size, OUT VCODEC_MEMORY_TYPE_T * peMemType);
+
+void VCodecQueryPhysicalAddr(IN void *pBuffer_VA,
+ OUT void **pBufferOut_PA
+ );
+
+/* VCodecSwitchMemType - return 0 if success. */
+/* return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA */
+int VCodecSwitchMemType(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ IN VCODEC_MEMORY_TYPE_T eMemType,
+ OUT void **pBufferOut_VA
+ );
+
+/* VCodecFlushCachedBuffer - u4Size is in byte */
+void VCodecFlushCachedBuffer(IN void *pBuffer_VA,
+ IN unsigned int u4Size
+ );
+
+/* VCodecInvalidateCachedBuffer - u4Size is in byte */
+void VCodecInvalidateCachedBuffer(IN void *pBuffer_VA,
+ IN unsigned int u4Size
+ );
+
+void VCodecFlushCachedBufferAll(void);
+
+void VCodecInvalidateCachedBufferAll(void);
+
+void VCodecFlushInvalidateCacheBufferAll(void);
+
+void VCodecMemSet(IN void *pBuffer_VA,
+ IN char cValue,
+ IN unsigned int u4Length
+ );
+
+void VCodecMemCopy(IN void *pvDest ,
+ IN const void *pvSrc ,
+ IN unsigned int u4Length
+ );
+typedef struct {
+ void *pBuffer_PA; /* /< [IN] The physical memory address */
+ unsigned int u4MemSize; /* /< [IN] The memory size to be mapped */
+ void *pBuffer_VA; /* /< [OUT] The mapped virtual memory address */
+} VCODEC_OAL_MMAP_T;
+
+void VCodecMMAP(VCODEC_OAL_MMAP_T *prParam);
+void VCodecUnMMAP(VCODEC_OAL_MMAP_T *prParam);
+
+
+typedef enum {
+ VCODEC_OAL_VDEC,
+ VCODEC_OAL_VENC
+} VCODEC_OAL_CODEC;
+
+typedef struct {
+ unsigned int u4ReadAddr; /* / [IN] memory source address in VA */
+ unsigned int u4ReadData; /* / [OUT] memory data */
+} VCODEC_OAL_MEM_STAUTS_T;
+
+typedef struct {
+ /* /< [IOUT] HW is Completed or not, set by driver & clear by codec
+ (0: not completed or still in lock status;
+ 1: HW is completed or in unlock status)
+ */
+ unsigned int u4HWIsCompleted;
+ /* /< [OUT] HW is Timeout or not, set by driver & clear by codec
+ (0: not in timeout status;
+ 1: HW is in timeout status)
+ */
+ unsigned int u4HWIsTimeout;
+ unsigned int u4NumOfRegister; /* /< [IN] Number of HW register need to store; */
+ VCODEC_OAL_MEM_STAUTS_T *pHWStatus;
+} VCODEC_OAL_HW_REGISTER_T;
+
+typedef struct {
+ void *pvHandle; /* /< [IN] The video codec handle */
+ void *pvIsrFunction; /* /< [IN] The isr function */
+ unsigned int u4TimeoutMs; /* /< [IN] The timeout in ms */
+ VCODEC_OAL_CODEC eCodec; /* /< [IN] VDEC or VENC interrupt */
+} VCODEC_OAL_ISR_T;
+
+/* return value: HW is completed (1) or not (0) when function return */
+int VCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
+
+
+typedef struct {
+ void *pvHandle; /* /< [IN] The video codec handle */
+ unsigned int u4TimeoutMs; /* /< [IN] The timeout ms */
+} VCODEC_OAL_HW_LOCK_T;
+
+/* return value: HW is completed (1) or not (0) when function return */
+int VCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+/* return value: HW is completed (1) or not (0) when function return */
+int VCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+void VCodecInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
+
+void VCodecDeInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
+
+
+/****** Pthread define******/
+#ifdef WIN32
+#define VCODEC_PTHREAD_PROCESS_PRIVATE 0
+#define VCODEC_PTHREAD_PROCESS_SHARED 1
+#define VCODEC_PTHREAD_CREATE_JOINABLE 0
+#define VCODEC_PTHREAD_CREATE_DETACHED 1
+#define VCODEC_PTHREAD_SCOPE_PROCESS 0
+#define VCODEC_PTHREAD_SCOPE_SYSTEM 1
+#define VCODEC_PTHREAD_ONCE_INIT 0
+typedef volatile int VCODEC_PTHREAD_ONCE_T;
+
+typedef int VCODEC_PTHREAD_ATTR_T;
+
+typedef int VCODEC_PTHREAD_MUTEXATTR_T;
+typedef int VCODEC_PTHREAD_CONDATTR_T;
+typedef CRITICAL_SECTION VCODEC_PTHREAD_MUTEX_T;
+
+typedef struct {
+ void *handle;
+ void *(*func)(void *arg);
+ void *arg;
+ void *ret;
+} VCODEC_PTHREAD_T;
+
+
+typedef struct {
+ int interlock;
+ VCODEC_PTHREAD_MUTEX_T mutex;
+} VCODEC_PTHREAD_SPINLOCK_T;
+typedef struct {
+ void *ptr;
+} VCODEC_PTHREAD_COND_T;
+#elif defined(ANDROID)
+#define VCODEC_PTHREAD_PROCESS_PRIVATE 0
+#define VCODEC_PTHREAD_PROCESS_SHARED 1
+#define VCODEC_PTHREAD_CREATE_JOINABLE 0
+#define VCODEC_PTHREAD_CREATE_DETACHED 1
+#define VCODEC_PTHREAD_SCOPE_PROCESS 0
+#define VCODEC_PTHREAD_SCOPE_SYSTEM 1
+#define VCODEC_PTHREAD_ONCE_INIT 0
+typedef long VCODEC_PTHREAD_T;
+typedef volatile int VCODEC_PTHREAD_ONCE_T;
+typedef long VCODEC_PTHREAD_MUTEXATTR_T;
+typedef long VCODEC_PTHREAD_CONDATTR_T;
+typedef struct {
+ unsigned int flags;
+ void *stack_base;
+ unsigned int stack_size;
+ unsigned int guard_size;
+ unsigned int sched_policy;
+ unsigned int sched_priority;
+} VCODEC_PTHREAD_ATTR_T;
+
+typedef struct {
+ int volatile value;
+} VCODEC_PTHREAD_MUTEX_T;
+
+typedef struct {
+ int volatile value;
+} VCODEC_PTHREAD_COND_T;
+
+typedef struct {
+ int interlock;
+ VCODEC_PTHREAD_MUTEX_T mutex;
+} VCODEC_PTHREAD_SPINLOCK_T;
+/****** End of Pthread define******/
+#elif defined(LINUX)
+#define VCODEC_PTHREAD_CREATE_JOINABLE 0
+#define VCODEC_PTHREAD_CREATE_DETACHED 1
+#define VCODEC_SIZEOF_PTHREAD_ATTR_T 36
+#define VCODEC_SIZEOF_PTHREAD_MUTEX_T 24
+#define VCODEC_SIZEOF_PTHREAD_MUTEXATTR_T 4
+#define VCODEC_SIZEOF_PTHREAD_COND_T 48
+#define VCODEC_SIZEOF_PTHREAD_COND_COMPAT_T 12
+#define VCODEC_SIZEOF_PTHREAD_CONDATTR_T 4
+typedef unsigned long int VCODEC_PTHREAD_T;
+typedef union {
+ char __size[VCODEC_SIZEOF_PTHREAD_ATTR_T];
+ long int _align;
+} VCODEC_PTHREAD_ATTR_T;
+typedef struct VCODEC_PTHREAD_INTERNAL_SLIST {
+ struct VCODEC_PTHREAD_INTERNAL_SLIST *__next;
+} VCODEC_PTHREAD_SLIST_T;
+typedef union {
+ struct VCODEC_PTHREAD_MUTEX_S {
+ int __lock;
+ unsigned int __count;
+ int __owner;
+ int __kind;
+ unsigned int __nusers;
+ __extension__ union {
+ int __spins;
+ VCODEC_PTHREAD_SLIST_T __list;
+ };
+ } __data;
+ char __size[VCODEC_SIZEOF_PTHREAD_MUTEX_T];
+ long int _align;
+} VCODEC_PTHREAD_MUTEX_T;
+typedef union {
+ char __size[VCODEC_SIZEOF_PTHREAD_MUTEXATTR_T];
+ long int _align;
+} VCODEC_PTHREAD_MUTEXATTR_T;
+typedef union {
+ struct {
+ int __lock;
+ unsigned int __futex;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
+ void *__mutex;
+ unsigned int __nwaiters;
+ unsigned int __broadcast_seq;
+ } __data;
+ char __size[VCODEC_SIZEOF_PTHREAD_COND_T];
+ __extension__ long long int _align;
+} VCODEC_PTHREAD_COND_T;
+typedef union {
+ char __size[VCODEC_SIZEOF_PTHREAD_CONDATTR_T];
+ long int _align;
+} VCODEC_PTHREAD_CONDATTR_T;
+typedef int VCODEC_PTHREAD_ONCE_T;
+typedef volatile int VCODEC_PTHREAD_SPINLOCK_T;
+#else
+#error "platform undefined. @ vcodec_OAL.h"
+#endif /* endif WIN32 */
+
+
+typedef enum {
+ VCODEC_OAL_ERROR_NONE,
+ VCODEC_OAL_ERROR_ERROR,
+ VCODEC_OAL_ERROR_ASSERT_FAIL,
+ VCODEC_OAL_ERROR_ATTR_NOT_SUPPORT,
+ NUM_OF_VCODEC_OAL_ERROR_TYPE
+} VCODEC_OAL_ERROR_T;
+
+/* Semaphore */
+
+typedef struct {
+ volatile unsigned int count;
+} VCODEC_OAL_SEM_T;
+
+
+int VCodecPthread_attr_init(OUT VCODEC_PTHREAD_ATTR_T * attr);
+int VCodecPthread_attr_destroy(IN VCODEC_PTHREAD_ATTR_T * attr);
+int VCodecPthread_attr_getdetachstate(IN const VCODEC_PTHREAD_ATTR_T * attr,
+ OUT int *detachstate);
+int VCodecPthread_attr_setdetachstate(IN VCODEC_PTHREAD_ATTR_T * attr,
+ IN int detachstate);
+int VCodecPthread_create(
+ OUT VCODEC_PTHREAD_T * thread,
+ IN const VCODEC_PTHREAD_ATTR_T * attr,
+ IN void * (*start_routine)(void *),
+ IN void *arg
+);
+int VCodecPthread_kill(IN VCODEC_PTHREAD_T tid, IN int sig);
+void VCodecPthread_exit(OUT void *retval);
+int VCodecPthread_join(IN VCODEC_PTHREAD_T thid, OUT void **ret_val);
+int VCodecPthread_once(IN VCODEC_PTHREAD_ONCE_T * once_control, IN void (*init_routine)(void));
+VCODEC_PTHREAD_T VCodecPthread_self(void);
+int VCodecPthread_mutexattr_init(OUT VCODEC_PTHREAD_MUTEXATTR_T * attr);
+int VCodecPthread_mutexattr_destroy(IN VCODEC_PTHREAD_MUTEXATTR_T * attr);
+int VCodecPthread_mutex_init(OUT VCODEC_PTHREAD_MUTEX_T *mutex, IN const VCODEC_PTHREAD_MUTEXATTR_T * attr);
+int VCodecPthread_mutex_destroy(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_mutex_lock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_mutex_unlock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_mutex_trylock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_spin_init(OUT VCODEC_PTHREAD_SPINLOCK_T * lock, IN int pshared);
+int VCodecPthread_spin_destroy(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+int VCodecPthread_spin_lock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+int VCodecPthread_spin_trylock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+int VCodecPthread_spin_unlock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+int VCodecPthread_condattr_init(OUT VCODEC_PTHREAD_CONDATTR_T * attr);
+int VCodecPthread_condattr_destroy(IN VCODEC_PTHREAD_CONDATTR_T * attr);
+int VCodecPthread_cond_init(OUT VCODEC_PTHREAD_COND_T * cond, IN const VCODEC_PTHREAD_CONDATTR_T * attr);
+int VCodecPthread_cond_destroy(IN VCODEC_PTHREAD_COND_T * cond);
+int VCodecPthread_cond_broadcast(IN VCODEC_PTHREAD_COND_T * cond);
+int VCodecPthread_cond_signal(IN VCODEC_PTHREAD_COND_T * cond);
+int VCodecPthread_cond_wait(IN VCODEC_PTHREAD_COND_T * cond, IN VCODEC_PTHREAD_MUTEX_T *mutex);
+
+VCODEC_OAL_ERROR_T VCodecBindingCore(IN VCODEC_PTHREAD_T tid,
+ IN unsigned int u4Mask);
+VCODEC_OAL_ERROR_T VCodecDeBindingCore(IN VCODEC_PTHREAD_T tid);
+VCODEC_OAL_ERROR_T VCodecGetAffinity(IN VCODEC_PTHREAD_T tid,
+ OUT unsigned int *pu4Mask,
+ OUT unsigned int *pu4SetMask);
+VCODEC_OAL_ERROR_T VCodecCoreLoading(IN int s4CPUid,
+ OUT int *ps4Loading);
+VCODEC_OAL_ERROR_T VCodecCoreNumber(OUT int *ps4CPUNums);
+void VCodecSleep(IN unsigned int u4Tick);
+int VCodec_sem_init(IN VCODEC_OAL_SEM_T * sem,
+ IN int pshared,
+ IN unsigned int value);
+int VCodec_sem_destroy(IN VCODEC_OAL_SEM_T * sem);
+int VCodec_sem_post(IN VCODEC_OAL_SEM_T * sem);
+int VCodec_sem_wait(IN VCODEC_OAL_SEM_T * sem);
+
+int VCodecCheck_Version(IN int version);
+
+#define VCodecOALPrintf(...) {rVCODEC_OAL_Function.VCodecPrintf(__VA_ARGS__); }
+
+VCODEC_OAL_ERROR_T VCodecConfigMCIPort(
+ IN unsigned int u4PortConfig,
+ OUT unsigned int *pu4PortResult,
+ IN VCODEC_CODEC_TYPE_T eCodecType
+);
+typedef struct {
+
+ void (*VCodecQueryMemType)(IN void *pBuffer_VA, IN unsigned int u4Size, OUT VCODEC_MEMORY_TYPE_T * peMemType);
+
+ void (*VCodecQueryPhysicalAddr)(IN void *pBuffer_VA,
+ OUT void **pBufferOut_PA);
+
+ /* VCodecSwitchMemType - return 0 if success. */
+ /* return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA */
+ int (*VCodecSwitchMemType)(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ IN VCODEC_MEMORY_TYPE_T eMemType,
+ OUT void **pBufferOut_VA);
+
+ /* VCodecFlushCachedBuffer - u4Size is in byte */
+ void (*VCodecFlushCachedBuffer)(IN void *pBuffer_VA,
+ IN unsigned int u4Size);
+
+ /* VCodecInvalidateCachedBuffer - u4Size is in byte */
+ void (*VCodecInvalidateCachedBuffer)(IN void *pBuffer_VA,
+ IN unsigned int u4Size);
+
+ void (*VCodecFlushCachedBufferAll)(void);
+
+ void (*VCodecInvalidateCachedBufferAll)(void);
+
+ void (*VCodecFlushInvalidateCacheBufferAll)(void);
+
+ void (*VCodecMemSet)(IN void *pBuffer_VA,
+ IN char cValue,
+ IN unsigned int u4Length);
+
+ void (*VCodecMemCopy)(IN void *pvDest ,
+ IN const void *pvSrc ,
+ IN unsigned int u4Length);
+
+ void (*VCodecAssertFail)(IN char *ptr,
+ IN int i4Line,
+ IN int i4Arg);
+
+ void (*VCodecMMAP)(VCODEC_OAL_MMAP_T *prParam);
+ void (*VCodecUnMMAP)(VCODEC_OAL_MMAP_T *prParam);
+ int (*VCodecWaitISR)(VCODEC_OAL_ISR_T *prParam);
+ int (*VCodecLockHW)(VCODEC_OAL_HW_LOCK_T *prParam);
+ int (*VCodecUnLockHW)(VCODEC_OAL_HW_LOCK_T *prParam);
+
+ void (*VCodecInitHWLock)(IN VCODEC_OAL_HW_REGISTER_T *prParam);
+
+ void (*VCodecDeInitHWLock)(IN VCODEC_OAL_HW_REGISTER_T *prParam);
+ int (*VCodecCheck_Version)(IN int version);
+ /************ Multi-thread function ***********/
+
+ /***** Thread Management Functions ******/
+ int (*VCodecPthread_attr_init)(OUT VCODEC_PTHREAD_ATTR_T * attr);
+ int (*VCodecPthread_attr_destroy)(IN VCODEC_PTHREAD_ATTR_T * attr);
+ int (*VCodecPthread_attr_getdetachstate)(IN const VCODEC_PTHREAD_ATTR_T * attr,
+ OUT int *detachstate);
+ int (*VCodecPthread_attr_setdetachstate)(IN VCODEC_PTHREAD_ATTR_T * attr,
+ IN int detachstate);
+ int (*VCodecPthread_create)(
+ OUT VCODEC_PTHREAD_T *thread,
+ IN const VCODEC_PTHREAD_ATTR_T * attr,
+ IN void * (*start_routine)(void *),
+ IN void *arg
+ );
+ int (*VCodecPthread_kill)(IN VCODEC_PTHREAD_T tid,
+ IN int sig);
+ void (*VCodecPthread_exit)(OUT void *retval);
+ int (*VCodecPthread_join)(IN VCODEC_PTHREAD_T thid,
+ OUT void **ret_val);
+ int (*VCodecPthread_once)(IN VCODEC_PTHREAD_ONCE_T * once_control,
+ IN void (*init_routine)(void));
+ VCODEC_PTHREAD_T(*VCodecPthread_self)(void);
+
+ /***** Mutex Functions ******/
+ int (*VCodecPthread_mutexattr_init)(OUT VCODEC_PTHREAD_MUTEXATTR_T * attr);
+ int (*VCodecPthread_mutexattr_destroy)(IN VCODEC_PTHREAD_MUTEXATTR_T * attr);
+ int (*VCodecPthread_mutex_init)(OUT VCODEC_PTHREAD_MUTEX_T *mutex, IN const VCODEC_PTHREAD_MUTEXATTR_T * attr);
+ int (*VCodecPthread_mutex_destroy)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+ int (*VCodecPthread_mutex_lock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+ int (*VCodecPthread_mutex_unlock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+ int (*VCodecPthread_mutex_trylock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+
+ /***** Spin Functions ******/
+ int (*VCodecPthread_spin_init)(OUT VCODEC_PTHREAD_SPINLOCK_T * lock,
+ IN int pshared);
+ int (*VCodecPthread_spin_destroy)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+ int (*VCodecPthread_spin_lock)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+ int (*VCodecPthread_spin_trylock)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+ int (*VCodecPthread_spin_unlock)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
+
+ /***** Condition Variable Functions ******/
+ int (*VCodecPthread_condattr_init)(OUT VCODEC_PTHREAD_CONDATTR_T * attr);
+ int (*VCodecPthread_condattr_destroy)(IN VCODEC_PTHREAD_CONDATTR_T * attr);
+ int (*VCodecPthread_cond_init)(OUT VCODEC_PTHREAD_COND_T * cond, IN const VCODEC_PTHREAD_CONDATTR_T * attr);
+ int (*VCodecPthread_cond_destroy)(IN VCODEC_PTHREAD_COND_T * cond);
+ int (*VCodecPthread_cond_broadcast)(IN VCODEC_PTHREAD_COND_T * cond);
+ int (*VCodecPthread_cond_signal)(IN VCODEC_PTHREAD_COND_T * cond);
+ int (*VCodecPthread_cond_wait)(IN VCODEC_PTHREAD_COND_T * cond,
+ IN VCODEC_PTHREAD_MUTEX_T *mutex);
+
+ /************ End of Multi-thread function ***********/
+
+ /***** Semaphore Functions ******/
+
+ int (*VCodec_sem_init)(IN VCODEC_OAL_SEM_T * sem,
+ IN int pshared,
+ IN unsigned int value);
+
+ int (*VCodec_sem_destroy)(IN VCODEC_OAL_SEM_T * sem);
+
+ int (*VCodec_sem_post)(IN VCODEC_OAL_SEM_T * sem);
+
+ int (*VCodec_sem_wait)(IN VCODEC_OAL_SEM_T * sem);
+
+ /***** Binding Functions ******/
+
+ VCODEC_OAL_ERROR_T(*VCodecBindingCore)(IN VCODEC_PTHREAD_T tid,
+ IN unsigned int u4SetMask);
+ VCODEC_OAL_ERROR_T(*VCodecDeBindingCore)(IN VCODEC_PTHREAD_T tid);
+
+ VCODEC_OAL_ERROR_T(*VCodecGetAffinity)(IN VCODEC_PTHREAD_T tid,
+ OUT unsigned int *pu4CPUMask,
+ OUT unsigned int *pu4SetMask);
+
+ VCODEC_OAL_ERROR_T(*VCodecCoreLoading)(IN int s4CPUid,
+ OUT int *ps4Loading);
+ VCODEC_OAL_ERROR_T(*VCodecCoreNumber)(OUT int *ps4CPUNums);
+ /***** Others Functions ******/
+ void (*VCodecSleep)(IN unsigned int u4Tick);
+
+ VCODEC_OAL_ERROR_T(*VCodecConfigMCIPort)(
+ IN unsigned int u4PortConfig,
+ OUT unsigned int *pu4PortResult,
+ IN VCODEC_CODEC_TYPE_T eCodecType
+ );
+
+ VCODEC_OAL_ERROR_T(*VCodecPrintf)(IN const char *_Format, ...);
+
+} VCODEC_OAL_CALLBACK_T;
+
+extern VCODEC_OAL_CALLBACK_T rVCODEC_OAL_Function;
+int VCodecOALInit(IN VCODEC_OAL_CALLBACK_T *prVCODEC_OAL_Function);
+
+#endif /* VCODEC_OAL_H */
diff --git a/kernel-headers/vcodec_customization.h b/kernel-headers/vcodec_customization.h
new file mode 100644
index 0000000..b8e22b9
--- /dev/null
+++ b/kernel-headers/vcodec_customization.h
@@ -0,0 +1,19 @@
+#ifndef VCODEC_CUSTOMIZATION_H
+#define VCODEC_CUSTOMIZATION_H
+
+#include "vcodec_if_v2.h"
+
+
+
+
+
+extern VCODEC_DEC_API_T *GetH264DecoderAPI(void);
+/* VCODEC_DEC_API_T *GetRMDecoderAPI(void); //RV8,RV9,RV10 */
+/* VCODEC_DEC_API_T *GetMPEG4DecoderAPI(void); */
+/* VCODEC_DEC_API_T *GetMPEG4VTDecoderAPI(void); */
+/* VCODEC_DEC_API_T *GetVP8DecoderAPI(void); */
+
+/* VCODEC_ENC_API_T *GetMPEG4EncoderAPI(void); */
+/* VCODEC_ENC_API_T *GetMPEG4SWVTEncoderAPI(void); */
+
+#endif /* VCODEC_CUSTOMIZATION_H */
diff --git a/kernel-headers/vcodec_dec_demuxer_if_v2.h b/kernel-headers/vcodec_dec_demuxer_if_v2.h
new file mode 100644
index 0000000..057b778
--- /dev/null
+++ b/kernel-headers/vcodec_dec_demuxer_if_v2.h
@@ -0,0 +1,98 @@
+
+#ifndef VCODEC_DEC_DEMUXER_V2_IF_H
+#define VCODEC_DEC_DEMUXER_V2_IF_H
+
+
+typedef struct {
+ unsigned char *u4Address;
+ unsigned int u4Length;
+ int fgValid;
+} RM_DECODER_PAYLOAD_INFO_T;
+
+typedef struct {
+ unsigned int u4PayloadNumber;
+ RM_DECODER_PAYLOAD_INFO_T *pu1PayloadAddress;
+} RM_DECODER_INPUT_PARAM_T;
+
+typedef enum {
+ RV8 = 0,
+ RV9,
+ RV10
+} RM_CODEC_VERSION_T;
+
+#define MAX_NUM_RPR_SIZES 8
+typedef struct {
+ RM_CODEC_VERSION_T eDecoderVersion;
+ unsigned int u4MaxDimWidth;
+ unsigned int u4MaxDimHeight;
+ unsigned int u4NumRPRSizes;
+ unsigned int au4RPRSizes[2 * MAX_NUM_RPR_SIZES];
+} RM_DECODER_INIT_PARAM_T;
+
+typedef struct {
+ unsigned int MaxSupportWidthForYUV420_ASP;
+ unsigned int MaxSupportHeightForYUV420_ASP;
+ unsigned short u2FrameWidthInContainer;
+ unsigned short u2FrameHeightInContainer;
+} MPEG4_DECODER_PRIVATE_PARAM_T;
+
+/* The H264 uses the private data to transfer NAL units */
+/* The related data structure informations are defined as below */
+/* */
+
+typedef struct {
+ unsigned char *u4Address;
+ unsigned int u4Length;
+} H264_DECODER_PAYLOAD_INFO_T;
+
+typedef struct {
+ unsigned int u4PayloadNumber;
+ H264_DECODER_PAYLOAD_INFO_T *pu1PayloadAddress;
+} H264_DECODER_INPUT_PARAM_T;
+
+typedef struct {
+ unsigned char *u4Address;
+ unsigned int u4Length;
+} VC1_DECODER_PAYLOAD_INFO_T;
+
+typedef struct {
+ unsigned int u4PayloadNumber;
+ VC1_DECODER_PAYLOAD_INFO_T *pu1PayloadAddress;
+} VC1_DECODER_INPUT_PARAM_T;
+
+typedef struct {
+ unsigned char *u4Address;
+ unsigned int u4Length;
+ unsigned short u2FrameWidthInContainer;
+ unsigned short u2FrameHeightInContainer;
+} MPEG4_DECODER_PAYLOAD_INFO_T;
+
+typedef struct {
+ unsigned int u4PayloadNumber;
+ MPEG4_DECODER_PAYLOAD_INFO_T *pu1PayloadAddress;
+} MPEG4_DECODER_INPUT_PARAM_T;
+typedef struct {
+ unsigned char *u4Address;
+ unsigned int u4Length;
+} MPEG4VT_DECODER_PAYLOAD_INFO_T;
+
+typedef struct {
+ unsigned int u4PayloadNumber;
+ MPEG4VT_DECODER_PAYLOAD_INFO_T *pu1PayloadAddress;
+} MPEG4VT_DECODER_INPUT_PARAM_T;
+
+typedef struct {
+ VCODEC_BUFFER_T rPayload;
+ unsigned int u4Length;
+} VP8_DECODER_INPUT_UNIT_T;
+
+typedef struct {
+ unsigned char *u4Address;
+ unsigned int u4Length;
+} HEVC_DECODER_PAYLOAD_INFO_T;
+
+typedef struct {
+ unsigned int u4PayloadNumber;
+ HEVC_DECODER_PAYLOAD_INFO_T *pu1Payload;
+} HEVC_DECODER_INPUT_PARAM_T;
+#endif /* VCODEC_DEC_DEMUXER_IF_H */
diff --git a/kernel-headers/vcodec_if_v2.h b/kernel-headers/vcodec_if_v2.h
new file mode 100644
index 0000000..72f1bcd
--- /dev/null
+++ b/kernel-headers/vcodec_if_v2.h
@@ -0,0 +1,991 @@
+
+#ifndef VCODEC_IF_V2_H
+#define VCODEC_IF_V2_H
+
+/***************************************************
+*
+* Chip definitions and Series definitions
+*
+***************************************************/
+
+
+#ifndef TRUE
+#define TRUE 1
+#elif TRUE != 1
+#error TRUE is not equal to 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#elif FALSE != 0
+#error FALSE is not equal to 0
+#endif
+#define IN
+#define OUT
+#define INOUT
+typedef void *HANDLE;
+#ifdef WIN32
+typedef unsigned __int64 UINT64;
+#else
+typedef unsigned long long UINT64;
+#endif
+
+typedef enum {
+ VCODEC_DECODER,
+ VCODEC_ENCODER,
+ NUM_OF_CODEC_TYPE
+} VCODEC_CODEC_TYPE_T;
+
+typedef struct {
+ unsigned int u4YStride;
+ unsigned int u4UVStride;
+} VCODEC_YUV_STRIDE_T;
+
+typedef enum {
+ VCODEC_COLOR_FORMAT_YUV420,
+ VCODEC_COLOR_FORMAT_YV12,
+} VCODEC_COLOR_FORMAT_T;
+
+typedef struct {
+ unsigned int MaxSupportWidth;
+ unsigned int MaxSupportHeight;
+ unsigned int eFlag; /* VCODEC_DEC_INPUT_FLAG_T */
+ unsigned int ExternalMEMSize;
+ int OutBufferNum; /* -1: .inf */
+ VCODEC_YUV_STRIDE_T stride;
+ VCODEC_COLOR_FORMAT_T eColorFormat;
+ void *PrivateData[4];
+} VCODEC_OPEN_SETTING_T;
+
+typedef struct {
+ unsigned int MaxSupportWidthForYUV420_BP;
+ unsigned int MaxSupportHeightForYUV420_BP;
+ unsigned int MaxSupportWidthForYUV420_MPHP;
+ unsigned int MaxSupportHeightForYUV420_MPHP;
+ unsigned int ExternalMEMSize;
+ unsigned int DPBSize;
+} H264_DEC_CUSTOM_SETTING_T;
+
+typedef struct {
+ unsigned int MaxSupportWidthForYUV420_MPHP;
+ unsigned int MaxSupportHeightForYUV420_MPHP;
+ unsigned int NormalMaxWidthForYUV420_MPHP;
+ unsigned int NormalMaxHeightForYUV420_MPHP;
+ unsigned int u4dpbSizes;
+ void *reserved[4];
+} H264_DECODER_PRIVATE_PARAM_T;
+/*
+typedef struct
+{
+ unsigned int MaxSupportWidthForYUV420_SP;
+ unsigned int MaxSupportHeightForYUV420_SP;
+ unsigned int MaxSupportWidthForYUV420_ASP;
+ unsigned int MaxSupportHeightForYUV420_ASP;
+ unsigned int ExternalMEMSize;
+} MPEG4_DEC_CUSTOM_SETTING_T;
+
+typedef struct
+{
+ unsigned int MaxSupportWidthForYUV420;
+ unsigned int MaxSupportHeightForYUV420;
+ unsigned int eFlag; //VCODEC_DEC_INPUT_FLAG_T
+ unsigned int ExternalMEMSize;
+ void *PrivateData[4];
+} VC1_DEC_CUSTOM_SETTING_T;
+*/
+
+typedef enum {
+ VCODEC_FRAMETYPE_I,
+ VCODEC_FRAMETYPE_NS_I, /* non-seek I, non-IDR frame */
+ VCODEC_FRAMETYPE_P,
+ VCODEC_FRAMETYPE_B,
+ VCODEC_HEADER,
+ VCODEC_FRM_DROPPED,
+ VCODEC_UNKNOWN_TYPE,
+ NUM_OF_FRAME_TYPE
+} VCODEC_FRAME_TYPE_T;
+
+
+
+typedef enum {
+ VA_NON_CACHED = 0x0,
+ VA_CACHED = 0x1,
+} VCODEC_BUFFER_ATTRIBUTE_T;
+
+typedef enum {
+ VCODEC_BUFFER_CACHEABLE = 0,
+ VCODEC_BUFFER_NON_CACHEABLE = 1,
+ VCODEC_BUFFER_MCI_SHARABLE = 2
+} VCODEC_MEMORY_TYPE_T;
+typedef struct {
+ unsigned int u4InternalSize;
+ unsigned int u4ExternalSize;
+} VCODEC_MEMORY_SIZE_T;
+
+typedef struct {
+ unsigned char *pu1Buffer_VA;
+ unsigned char *pu1Buffer_PA;
+ unsigned int eBufferStatus;/* VCODEC_BUFFER_ATTRIBUTE_T */
+} VCODEC_BUFFER_T;
+
+typedef enum {
+ VCODEC_DEC_ERROR_NONE,
+ VCODEC_DEC_ERROR_DECODE_ERROR,
+ VCODEC_DEC_ERROR_ASSERT_FAIL,
+ VCODEC_DEC_ERROR_FATAL_ERROR,
+ VCODEC_DEC_ERROR_NOT_SUPPORT,
+ VCODEC_DEC_ERROR_NOT_ENOUGH_MEM,
+ VCODEC_DEC_ERROR_PAYLOAD_DATA_ERROR,
+ VCODEC_DEC_ERROR_OAL_CHECK_VERSION_FAIL,
+ VCODEC_DEC_ERROR_DIMENSION_CHANGE,
+ NUM_OF_DEC_ERROR_TYPE
+} VCODEC_DEC_ERROR_T;
+
+
+typedef enum {
+ CUSTOM_SETTING, /* custom setting */
+ BEST_QUALITY, /* standard mode */
+ FAVOR_QUALITY, /* adaptive control decode mode , quality first */
+ FAVOR_FLUENCY, /* adaptive control decode mode , fluency first */
+ BEST_FLUENCY, /* fast mode */
+ NUM_OF_DECODE_MODE,
+} VCODEC_DEC_DECODE_MODE_T;
+
+
+
+typedef enum {
+ VCODEC_DEC_PARAM_EOF,
+ VCODEC_DEC_PARAM_QUERY_RESOLUTION_AHEAD,
+ VCODEC_DEC_PARAM_QUERY_RESOLUTION,
+ VCODEC_DEC_PARAM_QUERY_PREDICATION_TIME,
+ VCODEC_DEC_PARAM_MEMORY_REQUIREMENT,
+ VCODEC_DEC_PARAM_CAPABILITY,
+ VCODEC_DEC_PARAM_NOT_BUFFERING,
+ VCODEC_DEC_PARAM_BUFFERING,
+ VCODEC_DEC_PARAM_BITRATE,
+ VCODEC_DEC_PARAM_FRAMERATE,
+ VCODEC_DEC_PARAM_EXCLUDE_BUF_NUM,
+ VCODEC_DEC_PARAM_NO_OUTPUT_REORDERING,
+ VCODEC_DEC_PARAM_FLUSH_BUFFER,
+ VCODEC_DEC_PARAM_SET_DECRYPTION_MODE,
+ VCODEC_DEC_PARAM_SET_DECODE_MODE,
+ VCODEC_DEC_PARAM_GET_DECODE_MODE,
+ VCODEC_DEC_PARAM_CTRL_VOS,
+ VCODEC_DEC_PARAM_GET_SBSFLAG,
+ VCODEC_DEC_PARAM_CONCEAL_LEVEL,
+ VCODEC_DEC_PARAM_NUM_OF_HW_CTRL_THID,
+ /*Get registered HW control thread id , output structure : VCODEC_REG_HW_CTRL_THID_T*/
+ VCODEC_DEC_PARAM_GET_REG_HW_CTRL_THID,
+ VCODEC_DEC_PARAM_SET_COLOR_FORMAT,
+ /* VCODEC_DEC_PARAM_SET_STRIDE_ALIGNMENT, */
+ VCODEC_DEC_PARAM_SET_AVAILABLE_CPU_NUM,
+ VCODEC_DEC_PARAM_SET_MCI, /* enable or disable MCI mechanism */
+ NUM_OF_DEC_PARAM_TYPE,
+} VCODEC_DEC_PARAM_TYPE_T;
+
+typedef enum {
+ VCODEC_DEC_DISPLAY_CONCEALED_FRAME_DURING_PLAYBACK = 0x01,
+ VCODEC_DEC_DISPLAY_CONCEALED_FRAME_BEFORE_FIRST_I = 0X02,
+ VCODEC_DEC_DISPLAY_CONCEALED_FRAME_AFTER_FIRST_I = 0X04,
+ NUM_OF_DEC_CONCEAL_LEVEL_TYPE,
+} VCODEC_DEC_CONCEAL_LEVEL_TYPE_T;
+typedef enum {
+ /* VCODEC_DEC_QUERY_INFO_AVAILABLE_YUV, //Total available YUV buffer */
+ /* VCODEC_DEC_QUERY_INFO_TOTAL_YUV, //Total number of YUV buffer */
+ /* //Total available display frame(without frame repeat) */
+ /* VCODEC_DEC_QUERY_INFO_AVAILABLE_DISPLAY_FRAME, */
+ /* //Total real available display frame(including frame repeat) */
+ /* VCODEC_DEC_QUERY_INFO_REAL_AVAILABLE_DISPLAY_FRAME, */
+ VCODEC_DEC_QUERY_INFO_OAL_FUNCTION, /* Query OAL Function pointer */
+ VCODEC_DEC_QUERY_INFO_CURRENT_TIME, /* Current play time */
+ VCODEC_DEC_QUERY_INFO_LAST_VIDEO_TIME, /* Last delivered frame time */
+ /* VCODEC_DEC_QUERY_INFO_OAL_FUNCTION_SMP, //Query OAL Function pointer */
+ NUM_OF_QUERY_INFO_TYPE
+} VCODEC_DEC_QUERY_INFO_TYPE_T;
+
+typedef struct {
+ VCODEC_COLOR_FORMAT_T eColorFormat;
+ unsigned int u4MaxWidth;
+ unsigned int u4MaxHeight;
+ unsigned int MaxVideoCodingResolution;
+} VCODEC_ENC_GENERAL_SETTING_T;
+
+typedef struct {
+ VCODEC_COLOR_FORMAT_T eColorFormat;
+ unsigned int u4MaxWidth;
+ unsigned int u4MaxHeight;
+ unsigned int MaxVideoCodingResolution;
+ unsigned int complexityIndex;
+} VCODEC_ENC_MPEG4_SETTING_T;
+
+typedef union {
+ VCODEC_ENC_MPEG4_SETTING_T rMPEG4;
+ VCODEC_ENC_GENERAL_SETTING_T rVT;
+ VCODEC_ENC_GENERAL_SETTING_T rH264;
+ VCODEC_ENC_GENERAL_SETTING_T rHEVC;
+ VCODEC_ENC_GENERAL_SETTING_T rVP9;
+ VCODEC_ENC_GENERAL_SETTING_T rVP8;
+} VCODEC_ENC_SETTING_T;
+
+typedef struct {
+ unsigned char *pu1ParamStream;
+ unsigned int u4ParamLength;
+ unsigned int u4Width;
+ unsigned int u4Height;
+} VCODEC_DEC_QUERY_FRAME_SIZE_TYPE_T;
+
+typedef enum {
+ DISPLAY_CURRENT, /* Normal dispaly */
+ REPEAT_LAST, /* Frame skipping , error handling */
+ NOT_DISPLAY, /* for vp8, error handling */
+ LAST_FRAME, /* EOF */
+ NO_PIC, /* buffering */
+ NOT_USED, /* H.264 multi-slice */
+ DISPLAY_CURRENT_INTERLACE, /* interlace dispaly */
+ NUM_OF_DISPLAY_FRAME_STATUS
+} VCODEC_DEC_DISPLAY_FRAME_STATUS;
+
+typedef struct {
+ int i4AspectRatioWidth; /* width aspect ratio */
+ int i4AspectRatioHeight; /* height aspect ratio */
+ /* unsigned int u4IntraMBNum; */
+ /* unsigned int u4InterFMBNum; */
+ /* unsigned int u4InterBMBNum; */
+ /* unsigned int u4SkipMBNum; */
+ void *prExtra;
+} VCODEC_DEC_PRIVATE_OUTPUT_EXTRA_T;
+
+typedef struct {
+ UINT64 u8TimeStamp;
+ int fgUpdateTime; /* update time stamp */
+ unsigned short u2FrameWidth; /* Full Frame Size */
+ unsigned short u2FrameHeight; /* Full Frame Size */
+ unsigned short u2ClipTop;
+ unsigned short u2ClipBottom;
+ unsigned short u2ClipLeft;
+ unsigned short u2ClipRight;
+ VCODEC_FRAME_TYPE_T eFrameType;
+ VCODEC_BUFFER_T rYStartAddr; /*YUV buffer start address, include padding up and left*/
+ VCODEC_BUFFER_T rUStartAddr;
+ VCODEC_BUFFER_T rVStartAddr;
+ VCODEC_DEC_DISPLAY_FRAME_STATUS eDisplayFrameStatus;
+ void *prExtra;
+} VCODEC_DEC_PRIVATE_OUTPUT_T;
+
+
+
+typedef void VCODEC_DEC_INPUT_DATA_T;
+
+typedef enum {
+ INPUT_FLAG_STREAM_DATA_TYPE = 0x01, /* Bit 0 = 1: Slice base data(non-frame base) ; 0: Frame base data*/
+ INPUT_FLAG_STARTTIME = 0x02, /* seek start time at end of seek */
+ INPUT_FLAG_DECODEONLY = 0x04, /* seek */
+ /* H.264 for SPS,PPS issue, send first frame bitstream for set parameter*/
+ INPUT_FLAG_PARAMETERSET = 0x08,
+ INPUT_FLAG_CUSTOM_SETTING = 0x10, /* Get max external memory size(VE)*/
+ INPUT_FLAG_DECODE_INTRA_ONLY = 0x20, /* Only Decode Intra Frame */
+ INPUT_FLAG_OPENAPI = 0x40, /* OPENAPI */
+ INPUT_FLAG_DECODE_MODE = 0x80, /* Decode Mode */
+ INPUT_FLAG_LEGACY_MODE = 0x100, /* legacy Mode */
+ INPUT_FLAG_MAX_DEC
+} VCODEC_DEC_INPUT_FLAG_T;
+
+typedef struct {
+ UINT64 u8TimeStamp;
+ unsigned int eFlags; /* VCODEC_DEC_INPUT_FLAG_T */
+ VCODEC_DEC_INPUT_DATA_T *prInputData;
+ VCODEC_BUFFER_T *prBuffer; /* Input data address */
+ unsigned int u4BuffSize; /* Input buffer total size */
+ void *prExtra;
+} VCODEC_DEC_INPUT_T;
+
+
+
+
+
+
+typedef struct {
+ unsigned int u4Width; /* Full size 16 byte align */
+ unsigned int u4Height; /* Full size 16 byte align */
+ unsigned short u2ClipTop;
+ unsigned short u2ClipBottom;
+ unsigned short u2ClipLeft;
+ unsigned short u2ClipRight;
+ unsigned int u4Offset; /* Offset of YUV buffer start address */
+ unsigned int u4ReduceLength; /* Padding size(End of YUV buffer pool) */
+ unsigned char u1Alignment; /* YUV buffer address alignment */
+ VCODEC_MEMORY_TYPE_T rYUVBUfferMemType; /* YUV buffer memory type */
+ unsigned int u4MaxBufferNum;
+ unsigned int u4ExtraBufferNum;
+ void *prExtra;
+} VCODEC_DEC_OUTPUT_BUFFER_PARAM_T;
+
+typedef struct {
+ VCODEC_MEMORY_TYPE_T rBitStreamBufferMemType; /* bitstream buffer memory type */
+ unsigned int u4MaxBufferNum;
+ void *PrivateData[4];
+} VCODEC_DEC_INPUT_BUFFER_PARAM_T;
+
+typedef struct {
+ VCODEC_BUFFER_T rYBuffer;
+ VCODEC_BUFFER_T rUBuffer;
+ VCODEC_BUFFER_T rVBuffer;
+} VCODEC_DEC_INPUT_YUV_INFO_T;
+
+/* non-callback */
+#define MAX_BITSTREAM_BUFFER_INFO_NUM 10
+#define MAX_REF_FREE_YUV_BUFFER_NUM 19
+typedef struct {
+ VCODEC_BUFFER_T *prRetBitsBuf; /* for mt6575, mt6577 */
+ unsigned int u4ReturnInputCnt;
+ VCODEC_BUFFER_T rReturnInput[MAX_BITSTREAM_BUFFER_INFO_NUM];
+ unsigned int u4RefFreeYUVBufCnt;
+ VCODEC_DEC_INPUT_YUV_INFO_T parRefFreeYUVBuf[MAX_REF_FREE_YUV_BUFFER_NUM];
+} VCODEC_DEC_OUTPUT_PARAM_T;
+/* ~non-callback */
+
+typedef struct {
+ unsigned int u4SupportWidth;
+ unsigned int u4SupportHeight;
+ unsigned int u4SupportResolution;
+ unsigned int u4SupportProfile;
+ unsigned int u4SupportLevel;
+} VCODEC_DEC_CAPABILITY_T;
+
+typedef struct {
+ void (*pfnMalloc)(IN HANDLE /* hDrv */,
+ IN unsigned int /* u4Size */,
+ IN unsigned int /*u4AlignSize*/,
+ IN VCODEC_MEMORY_TYPE_T /* fgCacheable */,
+ OUT VCODEC_BUFFER_T * /* prBuf */
+ ); /* buffer address must cache line align */
+
+ void (*pfnIntMalloc)(IN HANDLE /* hDrv */,
+ IN unsigned int /* u4Size */,
+ IN unsigned int /*u4AlignSize*/,
+ OUT VCODEC_BUFFER_T * /* pBuffer_adr */
+ );
+
+ void (*pfnFree)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prBuf */
+ ); /* same memory type with malloc */
+
+ void (*pfnIntFree)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* pBuffer_adr */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnSetYUVBuffer)(IN HANDLE /* hDrv */,
+ IN VCODEC_DEC_OUTPUT_BUFFER_PARAM_T * /* prYUVParam */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnGetYUVBuffer)(IN HANDLE /* hDrv */,
+ OUT VCODEC_DEC_INPUT_YUV_INFO_T * /* prYUVBuf */
+ );
+
+ void (*pfnRefFreeYUVBuffer)(IN HANDLE /* hDrv */,
+ IN VCODEC_DEC_INPUT_YUV_INFO_T * /* prYUVBuf */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnQueryInfo)(IN HANDLE /* hDrv */,
+ IN VCODEC_DEC_QUERY_INFO_TYPE_T /* query id*/,
+ OUT void * /* pvParamData*/ /* */
+ );
+
+ void (*pfnReturnBitstream)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prBuffer */ /* Input buffer address */,
+ IN unsigned int /* u4BuffSize */ /* Input buffer total size */
+ );
+
+} VCODEC_DEC_CALLBACK_T;
+
+
+/* non-callback */
+typedef struct {
+ VCODEC_DEC_INPUT_T *prInputData;
+ VCODEC_DEC_INPUT_YUV_INFO_T *prYUVBufAddr; /* prYUVBuf */
+} VIDEO_DECODER_INPUT_NC_T;
+
+
+
+typedef struct {
+ VCODEC_DEC_ERROR_T(*pfnGetCodecRequired)(IN VCODEC_DEC_INPUT_T * /* prInput */ ,
+ OUT VCODEC_MEMORY_SIZE_T * /* prMemSize */,
+ OUT VCODEC_DEC_OUTPUT_BUFFER_PARAM_T * /* prBufferParameter*/,
+ OUT VCODEC_DEC_INPUT_BUFFER_PARAM_T * /* prBitStreamParameter */,
+ INOUT void * /* reserve */
+ );
+
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_DEC_ERROR_T(*pfnOpen)(IN HANDLE, /* hDrv */
+ IN VCODEC_DEC_CALLBACK_T *, /* pfnCallback */
+ IN void *, /* open setting */
+ OUT HANDLE * , /* hCodec */
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnClose)(IN HANDLE , /* hCodec */
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnInit)(IN HANDLE , /* hCodec */
+ INOUT void * /* reserve */
+ );
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_DEC_ERROR_T(*pfnDeInit)(
+ IN HANDLE, /* hCodec */
+ IN HANDLE, /* hWrap */
+ OUT VCODEC_DEC_OUTPUT_PARAM_T * *, /* for smart phone */
+ INOUT void * /* reserve */);
+
+ VCODEC_DEC_ERROR_T(*pfnGetParameter)(IN HANDLE, /* hCodec */
+ IN VCODEC_DEC_PARAM_TYPE_T,
+ INOUT void * /* pvParamData */
+ );
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_DEC_ERROR_T(*pfnSetParameter)(IN HANDLE, /* hCodec */
+ IN HANDLE, /* hWrap */
+ IN VCODEC_DEC_PARAM_TYPE_T, /* eParamType */
+ IN void * , /* pvParamData */
+ INOUT void * /* reserve */
+ );
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_DEC_ERROR_T(*pfnDecodeOneUnit)(
+ IN HANDLE, /* hCodec */
+ IN HANDLE, /* hWrap */
+ IN VIDEO_DECODER_INPUT_NC_T *, /* prInput */
+ OUT VCODEC_DEC_OUTPUT_PARAM_T * *, /* for smart phone */
+ INOUT void * /* reserve */
+ );
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_DEC_ERROR_T(*pfnGetNextDisplay)(IN HANDLE, /* hCodec */
+ IN HANDLE, /* hWrap */
+ OUT VCODEC_DEC_PRIVATE_OUTPUT_T * , /* prPrivOutput */
+ INOUT void * /* reserve */
+ );
+} VIDEO_DEC_API_T;
+/* ~non-callback */
+
+
+
+
+
+
+
+typedef struct {
+
+ VCODEC_DEC_ERROR_T(*pfnGetCodecRequired)(IN VCODEC_DEC_INPUT_T * /* prInput */ ,
+ OUT VCODEC_MEMORY_SIZE_T * /* prMemSize */,
+ /* prBufferParameter*/
+ OUT VCODEC_DEC_OUTPUT_BUFFER_PARAM_T * ,
+ /*prBitStreamParameter */
+ OUT VCODEC_DEC_INPUT_BUFFER_PARAM_T * ,
+ INOUT void * /* reserve */
+ );
+
+
+ VCODEC_DEC_ERROR_T(*pfnOpen)(IN HANDLE /* hDrv */,
+ IN VCODEC_DEC_CALLBACK_T * /* pfnCallback */,
+ IN void * /* prOpenSetting */,
+ OUT HANDLE * /* hCodec */ ,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnClose)(IN HANDLE /* hCodec */,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnInit)(IN HANDLE /* hCodec */,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnDeInit)(IN HANDLE /* hCodec */,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnGetParameter)(IN HANDLE /* hCodec */,
+ IN VCODEC_DEC_PARAM_TYPE_T /* eParamType */,
+ INOUT void * /* pvParamData */,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnSetParameter)(IN HANDLE /* hCodec */,
+ IN VCODEC_DEC_PARAM_TYPE_T /* eParamType */,
+ IN void * /* pvParamData */,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnDecodeOneUnit)(IN HANDLE /* hCodec */,
+ IN VCODEC_DEC_INPUT_T * /* prInput */,
+ INOUT void * /* reserve */
+ );
+
+ VCODEC_DEC_ERROR_T(*pfnGetNextDisplay)(IN HANDLE /* hCodec */,
+ OUT VCODEC_DEC_PRIVATE_OUTPUT_T * /* prPrivOutput */,
+ INOUT void * /* reserve */
+ );
+
+
+
+
+} VCODEC_DEC_API_T;
+
+typedef struct {
+ VIDEO_DEC_API_T rVideoDecAPI;
+ VCODEC_DEC_API_T *pfnVcodecDecAPI;
+ VCODEC_DEC_INPUT_YUV_INFO_T rGetYUVBuf;
+ VCODEC_BUFFER_T rRetBitsBuf;
+ VCODEC_DEC_OUTPUT_PARAM_T rDecoderOutputParam;
+ unsigned int fgTookYUVBuff;
+ HANDLE hDriver;
+} VIDEO_WRAP_HANDLE_T;
+
+
+#define VCODEC_ENC_MAX_PKTS_IN_SET 99
+#define VCODEC_ENC_MAX_NALS_IN_SET 10
+
+typedef struct {
+ void *u4Addr;
+ unsigned int u4Size;
+} VCODEC_ENC_CODEC_PACKET_INFO_T;
+
+
+/* Note the first two items in the next structure must be (in order): */
+/* 1. number of Packets */
+/* 2. pointer to the packet info */
+typedef struct {
+ unsigned int u4NumOfPkts;
+ VCODEC_ENC_CODEC_PACKET_INFO_T arPktInfo[VCODEC_ENC_MAX_PKTS_IN_SET];
+} VCODEC_ENC_PACKET_SET_T;
+
+
+typedef struct {
+ int u4NalUnitType;
+ void *u4Addr; /* p_payload */
+ unsigned int u4Size; /* i_payload */
+} VCODEC_ENC_CODEC_NAL_INFO_T;
+
+typedef struct {
+ unsigned int u4NumOfNals;
+ VCODEC_ENC_CODEC_NAL_INFO_T arNalInfo[VCODEC_ENC_MAX_NALS_IN_SET];
+} VCODEC_ENC_NAL_SET_T;
+
+typedef enum {
+ MPEG4_RECODER,
+ MPEG4_VT,
+ H264_RECODER,
+ H264_VT,
+ NUM_OF_ENC_CODEC_TYPE
+} VCODEC_ENC_CODEC_TYPE_T;
+
+typedef struct {
+ VCODEC_FRAME_TYPE_T eFrameType;
+ /* added to merge remained individual parameters in the phototype */
+ VCODEC_BUFFER_T rBitstreamAddr;
+ unsigned int u4BitstreamLength;
+ int fgEndOfFrame;
+ void *prChassis;
+ VCODEC_ENC_CODEC_TYPE_T eCodecType;
+ UINT64 u8TimeStamp;
+ void *reserved[4];
+} VCODEC_ENC_GENERAL_OUTPUT_T;
+
+typedef struct {
+ VCODEC_BUFFER_T rStartAddr;
+ VCODEC_BUFFER_T rEndAddr;
+ VCODEC_BUFFER_T rWriteAddr;
+ VCODEC_BUFFER_T rReadAddr;
+ unsigned int u4BufferLength;
+} VCODEC_ENC_BUFFER_INFO_T;
+
+
+typedef enum {
+ INPUT_FLAG_YUVBUFFER = 0x01,
+ INPUT_FLAG_NO_INPUT = 0x02,
+ INPUT_FLAG_NO_MORE_INPUT = 0x03,
+ INPUT_FLAG_MAX_ENC
+} VCODEC_ENC_INPUT_FLAG_T;
+
+typedef struct {
+ VCODEC_BUFFER_T rYUVBuffer;
+ unsigned int u4Length;
+} VCODEC_ENC_INPUT_INFO_T;
+
+typedef struct {
+ VCODEC_BUFFER_T rYBuffer;
+ VCODEC_BUFFER_T rUBuffer;
+ VCODEC_BUFFER_T rVBuffer;
+ unsigned int u4Length;
+} VCODEC_ENC_INPUT_YUV_INFO_T;
+
+
+
+typedef struct {
+ UINT64 u8TimeStamp;
+ VCODEC_ENC_INPUT_FLAG_T eFlags;
+ VCODEC_ENC_INPUT_INFO_T rInput;
+} VCODEC_ENC_INPUT_PARAM_T;
+
+typedef struct {
+ UINT64 u8TimeStamp;
+ VCODEC_ENC_INPUT_FLAG_T eFlags;
+ VCODEC_ENC_INPUT_YUV_INFO_T rInput;
+ void *prExtra;
+} VCODEC_ENC_INPUT_YUV_PARAM_T;
+
+typedef struct {
+ VCODEC_BUFFER_T rWp;
+ int fgSliceContained;
+} VCODEC_ENC_UPDATE_WP_INTO_T;
+
+typedef enum {
+ VCODEC_ENC_ERROR_NONE,
+ VCODEC_ENC_ERROR,
+ VCODEC_ENC_ASSERT_FAIL,
+ VCODEC_ENC_BS_BUFFER_NOT_ENOUGH,
+ VCODEC_ENC_INPUT_REJECT,
+ VCODEC_ENC_PARAM_NOT_SUPPORT,
+ NUM_OF_ENC_ERROR_TYPE
+} VCODEC_ENC_ERROR_T;
+
+
+typedef enum {
+ /* Query ext/int memory requirement for adaptation */
+ VCODEC_ENC_PARAM_MEMORY_REQUIREMENT,
+ /* Query the prefer memory type of bitstream buffer, return true means cacheable buffer is preferred */
+ VCODEC_ENC_PARAM_BITSTREAM_IN_CACHE,
+ /* Query the alignment needed on frame buffer for codec */
+ VCODEC_ENC_PARAM_FRM_BUFFER_ALIGNMENT,
+ VCODEC_ENC_PARAM_HOLD_RES_TILL_RELEASE_FRM,
+ VCODEC_ENC_PARAM_IS_BLOCKBASED_YUV,
+ VCODEC_ENC_PARAM_DECODER_CONFIGURATION_RECORD,
+ VCODEC_ENC_PARAM_IF_ADAPTOR_MODIFY_TIMESTAMP,
+ VCODEC_ENC_PARAM_WIDTH,
+ VCODEC_ENC_PARAM_HEIGHT,
+ VCODEC_ENC_PARAM_BITRATE,
+ VCODEC_ENC_PARAM_FRAME_RATE,
+ VCODEC_ENC_PARAM_FRAME_RATE_NUM,
+ VCODEC_ENC_PARAM_FRAME_RATE_DEN,
+ VCDOEC_ENC_PARAM_AUD,
+ VCODEC_ENC_PARAM_REPEAD_HEADERS,
+ VCODEC_ENC_PARAM_ANNEXB,
+ VCODEC_ENC_PARAM_GEN_HEADER_FRM_RATE,
+ VCODEC_ENC_PARAM_SHORT_HEADER,
+ VCODEC_ENC_PARAM_SYNC_INTERVAL,
+ VCODEC_ENC_PARAM_MAX_PKG_SIZE,
+ VCODEC_ENC_PARAM_FORCE_ENCODE_I,
+ VCODEC_ENC_PARAM_QUALITY,
+ VCODEC_ENC_PARAM_SCENARIO,
+ VCODEC_ENC_PARAM_CODEC_TYPE,
+ VCODEC_ENC_PARAM_VT_RESTART,
+ VCODEC_ENC_PARAM_ROTATE,
+ VCODEC_ENC_PARAM_SET_CALLBACK,
+ VCODEC_ENC_PARAM_SET_NO_MORE_INPUT,
+ VCODEC_ENC_PARAM_NUM_OF_HW_CTRL_THID,
+ /* Get registered HW control thread id , output structure : VCODEC_REG_HW_CTRL_THID_T */
+ VCODEC_ENC_PARAM_GET_REG_HW_CTRL_THID,
+ VCODEC_ENC_PARAM_SET_COLOR_FORMAT,
+ VCODEC_ENC_PARAM_SET_YUV_STRIDE_ALIGNMENT,
+ VCODEC_ENC_PARAM_SET_AVAILABLE_CPU_NUM,
+ /* enable or disable MCI mechanism */
+ VCODEC_ENC_PARAM_SET_MCI,
+ VCODEC_ENC_PARAM_WPP,
+ VCODEC_ENC_PARAM_CONSTQ,
+ VCODEC_ENC_PARAM_RC_VERSION,
+ VCODEC_ENC_PARAM_INIT_QP,
+ VCODEC_ENC_PARAM_MAX_QP,
+ VCODEC_ENC_PARAM_MIN_QP,
+ VCODEC_ENC_PARAM_NUM_OF_SLICE,
+ VCODEC_ENC_PARAM_PROFILE,
+ VCODEC_ENC_PARAM_LEVEL,
+ VCODEC_ENC_PARAM_THREADS,
+ VCODEC_ENC_PARAM_VP8_TOKEN_PARTITIONS,
+ VCODEC_ENC_PARAM_VP9_ENABLE_TILES,
+ VCODEC_ENC_PARAM_VPX_ERR_RESILIENT,
+ VCODEC_ENC_PARAM_VPX_NUMBER_OF_LAYERS,
+ VCODEC_ENC_PARAM_VPX_MODE,
+ VCODEC_ENC_PARAM_VPX_CPU_USED,
+ VCODEC_ENC_PARAM_YUV_STRIDE,
+ NUM_OF_ENC_PARAM_TYPE
+} VCODEC_ENC_PARAM_TYPE_T;
+
+typedef enum {
+ VCODEC_ENC_QUERY_INFO_TOTAL_FRAME_BUFFER, /* Total frame buffer size */
+ VCODEC_ENC_QUERY_INFO_FRAMES_QUEUED, /* Number of frames waited to encoder */
+ VCODEC_ENC_QUERY_INFO_VTBUFFER_FULLNESS_DENOM, /* Denominator of VT buffer fullness */
+ VCODEC_ENC_QUERY_INFO_VTBUFFER_FULLNESS_NUM, /* Numerator of VT buffer fullness */
+ VCODEC_ENC_QUERY_INFO_INIT_Q, /* Used by codec */
+ VCODEC_ENC_QUERY_INFO_MIN_QP, /* Used by codec */
+ VCODEC_ENC_QUERY_INFO_MAX_QP, /* Used by codec */
+ VCODEC_ENC_QUERY_INFO_INTRA_VOP_RATE, /* Used by MED/codec */
+ VCODEC_ENC_QUERY_INFO_ALGORITHM, /* Used by codec */
+ VCODEC_ENC_QUERY_INFO_BIT_RATE, /* Used by MED/codec */
+ VCODEC_ENC_QUERY_INFO_RATE_HARD_LIMIT, /* Used by codec */
+ VCODEC_ENC_QUERY_INFO_RATE_BALANCE, /* Used by codec */
+ VCODEC_ENC_QUERY_INFO_DYNAMIC_RANGE_REDUCTION,
+ VCODEC_ENC_QUERY_INFO_IF_CUSTOMER_SET_TABLE,
+ VCODEC_ENC_QUERY_INFO_DYNAMIC_RANGE_TABLE,
+ VCODEC_ENC_QUERY_INFO_OAL_FUNCTION,
+ VCODEC_ENC_QUERY_INFO_ENCODER_FRAME_RATE, /* Used by H.264 recoder */
+ VCODEC_ENC_QUERY_INFO_TARGET_COMPLEXITY, /* Used by H.264 recoder */
+ VCODEC_ENC_QUERY_INFO_THRESHOLD_AVG_LOW, /* Used by H.264 recoder */
+ VCODEC_ENC_QUERY_INFO_THRESHOLD_AVG_HIGH, /* Used by H.264 recoder */
+ VCODEC_ENC_QUERY_INFO_THRESHOLD_CUR_LOW, /* Used by H.264 recoder */
+ VCODEC_ENC_QUERY_INFO_THRESHOLD_CUR_HIGH, /* Used by H.264 recoder */
+ /* VCODEC_ENC_QUERY_INFO_OAL_FUNCTION_SMP, */
+ VCODEC_ENC_QUERY_INFO_VPX_CPU_USED,
+ VCODEC_ENC_QUERY_INFO_VPX_MODE,
+ VCODEC_ENC_QUERY_INFO_FIXED_QP,
+ VCODEC_ENC_QUERY_INFO_SCENARIO,
+ NUM_OF_ENC_QUERY_INFO_TYPE
+} VCODEC_ENC_QUERY_INFO_TYPE_T;
+
+/**********************************************************************
+
+
+ Encoder enumerations
+
+ **********************************************************************/
+
+/* clock-wise */
+typedef enum {
+ VCODEC_ENC_ROTATE_0 = 0,
+ VCODEC_ENC_ROTATE_90 = 1,
+ VCODEC_ENC_ROTATE_180 = 2,
+ VCODEC_ENC_ROTATE_270 = 3
+} VCODEC_ENC_ROTATE_ANGLE_T;
+
+typedef enum {
+ VCODEC_ENC_QUALITY_NONE,
+ VCODEC_ENC_QUALITY_LOW,
+ VCODEC_ENC_QUALITY_NORMAL,
+ VCODEC_ENC_QUALITY_GOOD,
+ VCODEC_ENC_QUALITY_FINE,
+ VCODEC_ENC_QUALITY_CUSTOM
+} VCODEC_ENC_QUALITY_T;
+
+typedef enum {
+ VCODEC_ENC_CODEC_TYPE_NONE,
+ VCODEC_ENC_CODEC_TYPE_MPEG4,
+ VCODEC_ENC_CODEC_TYPE_H263,
+ VCODEC_ENC_CODEC_TYPE_H264
+} VCODEC_ENC_CODEC_T;
+
+typedef struct {
+
+ void (*pfnMalloc)(IN HANDLE /* hDrv */,
+ IN unsigned int /* u4Size */,
+ IN unsigned int /*u4AlignSize*/,
+ IN VCODEC_MEMORY_TYPE_T /* fgCacheable */,
+ OUT VCODEC_BUFFER_T * /* prBuf */
+ ); /*buffer address must cache line align */
+
+ void (*pfnIntMalloc)(IN HANDLE /* hDrv */,
+ IN unsigned int /* u4Size */,
+ IN unsigned int /*u4AlignSize*/,
+ OUT VCODEC_BUFFER_T * /* prBuffer_adr */
+ );
+
+
+ void (*pfnFree)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prBuf */
+ ); /* same memory type with malloc */
+
+
+ void (*pfnIntFree)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prBuffer_adr */
+ );
+
+ void (*pfnReleaseYUV)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prYUVBuf */
+ );
+
+ void (*pfnPaused)(IN HANDLE /* hDrv */,
+ IN VCODEC_BUFFER_T * /* prBitstreamBuf */
+ );
+
+ void (*pfnAllocateBitstreamBuffer)(IN HANDLE /* hDrv */,
+ OUT VCODEC_ENC_BUFFER_INFO_T * /* prBitstreamBuf */
+ );
+
+ void (*pfnUpdateBitstreamWP)(IN HANDLE /* hDrv */,
+ IN VCODEC_ENC_UPDATE_WP_INTO_T * /* prUpdateWritePointer */
+ );
+ VCODEC_ENC_ERROR_T(*pfnQueryInfo)(IN HANDLE /* hDrv */,
+ IN VCODEC_ENC_QUERY_INFO_TYPE_T /* query id*/,
+ OUT void * /* pvParamData*/
+ );
+
+
+} VCODEC_ENC_CALLBACK_T;
+
+/* non-callback */
+typedef struct {
+ UINT64 u8TimeStamp;
+ VCODEC_ENC_INPUT_FLAG_T eFlags;
+ VCODEC_ENC_INPUT_INFO_T rInput;
+ VCODEC_ENC_BUFFER_INFO_T pBuffInfo;
+ VCODEC_COLOR_FORMAT_T eVEncFormat;
+ unsigned int u4Width;
+ unsigned int u4Height;
+ unsigned int u4YStride;
+ unsigned int u4UVStride;
+ unsigned int u4SliceHeight;
+ void *reserved[4];
+} VIDEO_ENCODER_INPUT_PARAM_NC_T;
+/* non-callback */
+typedef struct {
+ UINT64 u8TimeStamp;
+ VCODEC_ENC_INPUT_FLAG_T eFlags;
+ VCODEC_ENC_INPUT_YUV_INFO_T rInput;
+ VCODEC_ENC_BUFFER_INFO_T pBuffInfo;
+ VCODEC_COLOR_FORMAT_T eVEncFormat;
+ unsigned int u4Width;
+ unsigned int u4Height;
+ unsigned int u4YStride;
+ unsigned int u4UVStride;
+ unsigned int u4SliceHeight;
+ void *reserved[4];
+} VIDEO_ENCODER_INPUT_YUV_PARAM_NC_T;
+
+typedef struct {
+ VCODEC_ENC_ERROR_T(*pfnGetMemoryRequired)(
+ IN VCODEC_ENC_SETTING_T * rCodecFormat,
+ OUT VCODEC_MEMORY_SIZE_T * prExternalSize
+ );
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_ENC_ERROR_T(*pfnOpen)(IN HANDLE hDrv,
+ IN HANDLE hWrapper,
+ IN VCODEC_ENC_CALLBACK_T * ,
+ OUT HANDLE *hCodec
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnInit)(IN HANDLE hCodec
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnGetParameter)(IN HANDLE hCodec,
+ OUT VCODEC_ENC_PARAM_TYPE_T, /*VIDEO_ENC_MEMORY_T,*/
+ void *
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnSetParameter)(IN HANDLE hCodec,
+ /*VIDEO_ENCODER_QUALITY_T,
+ VIDEO_ENCODER_CODEC_T,
+ VIDEO_CODEC_ROTATE_ANGLE_T,*/
+ IN VCODEC_ENC_PARAM_TYPE_T,
+ void *
+ );
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_ENC_ERROR_T(*pfnGenerateHeader)(IN HANDLE hCodec,
+ IN HANDLE hWrapper,
+ IN VCODEC_ENC_BUFFER_INFO_T *prBufferInfo /* for smart phone */
+ );
+
+ /********************************************************
+ * wrapped for smart phone
+ ********************************************************/
+ VCODEC_ENC_ERROR_T(*pfnEncodeOneUnit)(IN HANDLE hCodec,
+ IN HANDLE hWrapper,
+ IN VIDEO_ENCODER_INPUT_YUV_PARAM_NC_T * prEncoderInputParamNC);
+
+ VCODEC_ENC_ERROR_T(*pfnDeInit)(IN HANDLE hCodec
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnClose)(IN HANDLE hCodec
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnGetNextBitstream)(IN HANDLE hCodec,
+ OUT VCODEC_ENC_GENERAL_OUTPUT_T *
+ );
+} VIDEO_ENC_API_T;
+
+
+/* ~non-callback */
+
+typedef struct {
+ VCODEC_ENC_ERROR_T(*pfnGetMemoryRequired)(IN VCODEC_ENC_SETTING_T *, /*prInput*/
+ OUT VCODEC_MEMORY_SIZE_T * /*prExternalSize*/
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnOpen)(IN HANDLE /* hDrv */,
+ IN VCODEC_ENC_CALLBACK_T * /* pfnCallback */,
+ OUT HANDLE * /* hCodec */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnInit)(IN HANDLE /* hCodec */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnGetParameter)(IN HANDLE /* hCodec */,
+ IN VCODEC_ENC_PARAM_TYPE_T /*VIDEO_ENC_MEMORY_T,*/,
+ OUT void * /* pvParamData */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnSetParameter)(IN HANDLE /* hCodec */,
+ /*VCODEC_ENC_QUALITY_T,VCODEC_ENC_CODEC_T,VIDEO_CODEC_ROTATE_ANGLE_T,*/
+ IN VCODEC_ENC_PARAM_TYPE_T /* rEncodeParam*/,
+ IN void * /* pvParamData */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnGenerateHeader)(IN HANDLE /* hCodec */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnEncodeOneUnit)(IN HANDLE /* hCodec */,
+ /*prInput*/ /*VCODEC_ENC_INPUT_YUV_INFO_T , VCODEC_ENC_INPUT_INFO_T*/
+ IN void *
+ );
+ VCODEC_ENC_ERROR_T(*pfnDeInit)(IN HANDLE /* hCodec */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnClose)(IN HANDLE /* hCodec */
+ );
+
+ VCODEC_ENC_ERROR_T(*pfnGetNextBitstream)(IN HANDLE /* hCodec */,
+ OUT VCODEC_ENC_GENERAL_OUTPUT_T * /* prPrivOutput*/
+ );
+} VCODEC_ENC_API_T;
+
+typedef struct {
+ VIDEO_ENC_API_T rVideoEncAPI;
+ VCODEC_ENC_API_T *pfnVcodecEncAPI;
+ HANDLE hDriver;
+ VCODEC_BUFFER_T rReleaseYUV;
+ VCODEC_ENC_BUFFER_INFO_T rEncoderBuffInfoNC;
+ unsigned int u4EncType;// for sw venc type
+} VIDEO_ENC_WRAP_HANDLE_T;
+
+typedef struct {
+ unsigned int u4TimeIncrResolution;
+ unsigned int u4BufferSize;
+ VCODEC_BUFFER_T *prBuffer;
+} MPEG4_VT_ENCODER_GEN_VT_HEADER_INPUT_T;
+
+VCODEC_ENC_ERROR_T MPEG4EncoderGenerateVTHeader(
+ IN MPEG4_VT_ENCODER_GEN_VT_HEADER_INPUT_T * prInput,
+ OUT unsigned int *pu4EncodedSize
+);
+
+
+
+
+
+
+#endif /* VCODEC_IF_H */
diff --git a/kernel-headers/vcodec_log.h b/kernel-headers/vcodec_log.h
new file mode 100644
index 0000000..ac4abf1
--- /dev/null
+++ b/kernel-headers/vcodec_log.h
@@ -0,0 +1,134 @@
+#ifndef VCODEC_LOG_H
+#define VCODEC_LOG_H
+
+#include "vcodec_if_v2.h"
+
+#define lmx_prt(a, b, c)
+
+/* Add your index here */
+typedef enum {
+ /* MPEG4 ENCODER */
+ VCODEC_LOG_INDEX_MP4ENC_ENCODE_ERROR,
+ VCODEC_LOG_INDEX_MP4ENC_ERROR_GET_BITSTREAM,
+ VCODEC_LOG_INDEX_MP4ENC_ALLOCATE_EXT_MEMORY,
+ VCODEC_LOG_INDEX_MP4ENC_FREE_EXT_MEMORY,
+ VCODEC_LOG_INDEX_MP4ENC_QPHDR,
+ VCODEC_LOG_INDEX_MP4ENC_FRAMETYPE,
+ VCODEC_LOG_INDEX_MP4ENC_SETTING,
+ VCODEC_LOG_INDEX_MP4ENC_GET_BITSTREAM,
+
+ /* MPEG4 DECODER */
+ VCODEC_LOG_INDEX_MP4DEC_DECODE_ERROR,
+ VCODEC_LOG_INDEX_MP4DEC_DECODE_FIRST_FRAME,
+ VCODEC_LOG_INDEX_MP4DEC_DECODE_VOP_TYPE,
+ VCODEC_LOG_INDEX_MP4DEC_DECODE_RESOLUTION,
+ VCODEC_LOG_INDEX_MP4DEC_DECODE_EOF,
+ VCODEC_LOG_INDEX_MP4DEC_SET_FRAME_RATE,
+ VCODEC_LOG_INDEX_MP4DEC_SET_BIT_RATE,
+ VCODEC_LOG_INDEX_SWMP4DEC_LOSSY_INIT_QTY,
+ VCODEC_LOG_INDEX_SWMP4DEC_LOSSY_INIT_DSWITCH,
+ VCODEC_LOG_INDEX_SWMP4DEC_LOSSY_SWITCH_QTY,
+
+ /* RMVB DECODER */
+ VCODEC_LOG_INDEX_RMDEC_DECODE_RESULT1,
+ VCODEC_LOG_INDEX_RMDEC_DECODE_RESULT2,
+ VCODEC_LOG_INDEX_RMDEC_ERROR_FRM,
+ VCODEC_LOG_INDEX_RMDEC_DECODE_ERROR,
+ VCODEC_LOG_INDEX_RMDEC_HOLD_PIC_TYPE_ERROR,
+ VCODEC_LOG_INDEX_RMDEC_UNKNOW_ERROR,
+ VCODEC_LOG_INDEX_RMDEC_TIMESTAMP1,
+ VCODEC_LOG_INDEX_RMDEC_TIMESTAMP2,
+ VCODEC_LOG_INDEX_RMDEC_SKIP_FRM,
+ VCODEC_LOG_INDEX_RMDEC_SKIP_SETTING2,
+ VCODEC_LOG_INDEX_RMDEC_STANDARD_DEC,
+ VCODEC_LOG_INDEX_RMDEC_LOSSY_DEC,
+ VCODEC_LOG_INDEX_RMDEC_OPEN,
+ VCODEC_LOG_INDEX_RMDEC_CLOSE,
+ VCODEC_LOG_INDEX_RMDEC_UNSUPPORT,
+
+ /* H.264 DECODER */
+ VCODEC_LOG_INDEX_H264DEC_INIT,
+ VCODEC_LOG_INDEX_H264DEC_DEINIT,
+ VCODEC_LOG_INDEX_H264DEC_OPEN,
+ VCODEC_LOG_INDEX_H264DEC_CLOSE,
+ VCODEC_LOG_INDEX_H264DEC_INIT_ERROR,
+ VCODEC_LOG_INDEX_H264DEC_DECODE_RESULT,
+ VCODEC_LOG_INDEX_H264DEC_DECODE_ERROR,
+ VCODEC_LOG_INDEX_H264DEC_ARGUMENT_ERROR,
+ VCODEC_LOG_INDEX_H264DEC_SUPPORT_ERROR,
+ VCODEC_LOG_INDEX_H264DEC_DECODING_CONCEAL,
+ VCODEC_LOG_INDEX_H264DEC_DISPLAY_INFO,
+ VCODEC_LOG_INDEX_H264DEC_CROP_INFO,
+ VCODEC_LOG_INDEX_H264DEC_BITSTREAM_INFO,
+ VCODEC_LOG_INDEX_H264DEC_PAYLOAD_INFO,
+ VCODEC_LOG_INDEX_H264DEC_CHANGE_SPS,
+ VCODEC_LOG_INDEX_H264DEC_ABNORMAL_NALU_SIZE,
+ VCODEC_LOG_INDEX_H264DEC_HEADER_ERROR,
+ VCODEC_LOG_INDEX_H264DEC_OUTPUT_IDR,
+ VCODEC_LOG_INDEX_H264DEC_ALIGN_ERROR,
+ VCODEC_LOG_INDEX_H264DEC_ALLOCATE_ERROR,
+ VCODEC_LOG_INDEX_SWH264DEC_LOSSY_INIT_QTY,
+ VCODEC_LOG_INDEX_SWH264DEC_LOSSY_INIT_DSWITCH,
+ VCODEC_LOG_INDEX_SWH264DEC_LOSSY_SWITCH_QTY,
+ VCODEC_LOG_INDEX_SWH264DEC_MEM_ALLOCATE,
+ VCODEC_LOG_INDEX_SWH264DEC_DPB_INIT,
+ VCODEC_LOG_INDEX_SWH264DEC_DPB_MARK_REFPIC,
+ VCODEC_LOG_INDEX_SWH264DEC_CONCEAL,
+ VCODEC_LOG_INDEX_SWH264DEC_OUTPIC1,
+ VCODEC_LOG_INDEX_SWH264DEC_OUTPIC2,
+ VCODEC_LOG_INDEX_SWH264DEC_SPSDPB_CHECK,
+ VCODEC_LOG_INDEX_H264DEC_SKIPB,
+ VCODEC_LOG_INDEX_H264DEC_TIMESTAMP,
+ VCODEC_LOG_INDEX_H264DEC_TIMESTAMP_INIT,
+ VCODEC_LOG_INDEX_H264DEC_TIMESTAMP_INFO,
+ VCODEC_LOG_INDEX_H264DEC_TIMESTAMP_BP,
+ VCODEC_LOG_INDEX_H264DEC_TIMESTAMP_MPHP,
+ VCODEC_LOG_INDEX_H264DEC_TIMESTAMP_STATUS,
+ VCODEC_LOG_INDEX_H264ENC_STREAMBUFFER_ALLOC,
+ VCODEC_LOG_INDEX_H264ENC_STREAMBUFFER_UPDATE,
+ VCODEC_LOG_INDEX_MAX
+} VCODEC_LOG_INDEX_T;
+
+typedef enum {
+ VCODEC_LOG_GROUP_HIGH,
+ VCODEC_LOG_GROUP_MEDIUM,
+ VCODEC_LOG_GROUP_LOW,
+ VCODEC_LOG_GROUP_MAX
+} VCODEC_LOG_GROUP_T;
+
+void VcodecTraceLog0(
+ VCODEC_LOG_GROUP_T eGroup,
+ VCODEC_LOG_INDEX_T eIndex
+);
+void VcodecTraceLog1(
+ VCODEC_LOG_GROUP_T eGroup,
+ VCODEC_LOG_INDEX_T eIndex,
+ UINT64 arg
+);
+void VcodecTraceLog2(
+ VCODEC_LOG_GROUP_T eGroup,
+ VCODEC_LOG_INDEX_T eIndex,
+ UINT64 arg1,
+ UINT64 arg2
+);
+void VcodecTraceLog4(
+ VCODEC_LOG_GROUP_T eGroup,
+ VCODEC_LOG_INDEX_T eIndex,
+ UINT64 arg1,
+ UINT64 arg2,
+ UINT64 arg3,
+ UINT64 arg4
+);
+void VcodecTraceLog8(
+ VCODEC_LOG_GROUP_T eGroup,
+ VCODEC_LOG_INDEX_T eIndex,
+ UINT64 arg1,
+ UINT64 arg2,
+ UINT64 arg3,
+ UINT64 arg4,
+ UINT64 arg5,
+ UINT64 arg6,
+ UINT64 arg7,
+ UINT64 arg8
+);
+#endif /* VCODEC_LOG_H */
diff --git a/kernel-headers/vdec_drv_base.h b/kernel-headers/vdec_drv_base.h
new file mode 100644
index 0000000..3bd80d2
--- /dev/null
+++ b/kernel-headers/vdec_drv_base.h
@@ -0,0 +1,128 @@
+#define DumpInput__
+#ifdef DumpInput__
+#include <stdio.h>
+#endif
+#include "vdec_drv_if_private.h"
+
+#ifndef _VDEC_DRV_BASE_
+#define _VDEC_DRV_BASE_
+#define MAX_BUFFER_SIZE 37
+
+#if 1
+#define WAITING_MODE VAL_INTERRUPT_MODE
+#else
+#define WAITING_MODE VAL_POLLING_MODE
+#endif
+
+#define DO_VCODEC_RESET(cmd, index) \
+ { \
+ ADD_QUEUE(cmd, index, WRITE_REG_CMD, MT6589_VDEC_MISC, VDEC_INT_CFG, 0 , WAITING_MODE); \
+ }
+
+typedef enum __VDDRV_MRESULT_T {
+ VDDRV_MRESULT_SUCCESS = VAL_TRUE, /* /< Represent success */
+ VDDRV_MRESULT_FAIL = VAL_FALSE, /* /< Represent failure */
+ VDDRV_MRESULT_RESOLUTION_CHANGED = VAL_RESOLUTION_CHANGED, /* /< Represent resoluion changed */
+ VDDRV_MRESULT_NEED_MORE_OUTPUT_BUFFER, /* /< Represent need more output buffer */
+ VDDRV_MRESULT_FATAL
+} VDDRV_MRESULT_T;
+
+typedef struct __VDEC_DRV_BASE_T {
+ VAL_UINT32_T(*Init)(
+ VAL_HANDLE_T * handle,
+ VAL_HANDLE_T halhandle,
+ VAL_HANDLE_T valhandle,
+ P_VDEC_DRV_RINGBUF_T pBitstream,
+ P_VDEC_DRV_SEQINFO_T pSeqinfo,
+ VDEC_DRV_VIDEO_FORMAT_T eFormat
+ );
+ VAL_UINT32_T(*Decode)(
+ VAL_HANDLE_T handle,
+ P_VDEC_DRV_RINGBUF_T pBitstream,
+ P_VDEC_DRV_FRAMEBUF_T pFrame
+ ); /* /< Driver Decode Main Funciton */
+ P_VDEC_DRV_FRAMEBUF_T(*GetDisplayBuffer)(
+ VAL_HANDLE_T handle
+ ); /* /< Get Buffer ready to display */
+ P_VDEC_DRV_FRAMEBUF_T(*GetFreeBuffer)(
+ VAL_HANDLE_T handle
+ ); /* /< Get Buffer ready to release */
+ VAL_UINT32_T(*GetParam)(
+ VAL_HANDLE_T handle,
+ VDEC_DRV_GET_TYPE_T a_eType,
+ VAL_VOID_T * a_pvInParam,
+ VAL_VOID_T * a_pvOutParam
+ );
+ VAL_UINT32_T(*SetParam)(
+ VAL_HANDLE_T handle,
+ VDEC_DRV_SET_TYPE_T a_eType,
+ VAL_VOID_T * a_pvInParam,
+ VAL_VOID_T * a_pvOutParam
+ );
+ VAL_UINT32_T(*DeInit)(
+ VAL_HANDLE_T handle
+ ); /* /< Function to do driver de-initialization */
+ P_VDEC_DRV_RINGBUF_T(*GetFreeInputBuffer)(
+ VAL_HANDLE_T handle
+ );
+ VAL_UINT32_T(*Init_ex)(
+ VAL_HANDLE_T * handle,
+ VAL_HANDLE_T halhandle,
+ VAL_HANDLE_T valhandle,
+ P_VDEC_DRV_RINGBUF_T pBitstream,
+ P_VDEC_DRV_SEQINFO_T pSeqinfo,
+ VDEC_DRV_VIDEO_FORMAT_T eFormat,
+ VAL_VOID_T * pConfig
+ );
+ VAL_UINT32_T(*DecodeEx)(
+ VAL_HANDLE_T handle,
+ P_VDEC_DRV_RINGBUF_T pBitstream,
+ VAL_UINT32_T u4Flag,
+ VAL_VOID_T * pExtra
+ ); /* /< Driver Decode Main Funciton */
+
+
+} VDEC_DRV_BASE_T;
+
+typedef struct __VDEC_DRV_BUF_STATUS_T {
+ VAL_BOOL_T bDisplay;
+ VAL_BOOL_T bFree;
+ VDEC_DRV_FRAMEBUF_T *pFrameBuf;
+} VDEC_DRV_BUF_STATUS_T, *P_VDEC_DRV_BUF_STATUS_T;
+
+typedef struct __VDEC_DRV_INPUT_BUF_STATUS_T {
+ VDEC_DRV_RINGBUF_T *pInputBuf;
+ VAL_UINT32_T u4RefCnt;
+} VDEC_DRV_INPUT_BUF_STATUS_T, *P_VDEC_DRV_INPUT_BUF_STATUS_T;
+
+typedef struct __VDEC_HANDLE_T {
+ VDEC_DRV_VIDEO_FORMAT_T CodecFormat;
+ VDEC_DRV_BASE_T rFuncPtr; /* /< Point to driver's proprietary function. */
+ VAL_HANDLE_T hDrvHandle; /* /< Handle of each format driver */
+ VAL_BOOL_T fgDrvInitFlag; /* /< hDrvHandle is available or not */
+ VAL_HANDLE_T hHalHandle; /* /< HAL handle */
+ VAL_BOOL_T fgHalInitFlag; /* /< hHalHandle is available or not */
+ VAL_HANDLE_T hValHandle; /* /< VAL handle */
+ VAL_BOOL_T fgValInitFlag; /* /< hValHandle is available or not */
+ VAL_MEMORY_T rHandleMem; /* /< Memory for vdec handle */
+ P_VDEC_DRV_FRAMEBUF_T pDispFrameBuf;
+ P_VDEC_DRV_FRAMEBUF_T pFreeFrameBuf;
+ P_VDEC_DRV_RINGBUF_T pInputFreeBuf;
+ VDEC_DRV_BUF_STATUS_T pFrameBufArray[MAX_BUFFER_SIZE];
+ VDEC_DRV_INPUT_BUF_STATUS_T pInputBufArray[MAX_BUFFER_SIZE];
+ VAL_BOOL_T bFlushAll;
+ VAL_BOOL_T bInputFlushAll;
+ /* for no VOS header when MPEG4 */
+ VAL_UINT16_T nDefWidth;
+ VAL_UINT16_T nDefHeight;
+ VDEC_DRV_SET_DECODE_MODE_T rSetDecodeMode;
+ VAL_INT32_T nPerfServiceHandle;
+#ifdef DumpInput__
+ FILE *pf_out;
+ VAL_MEM_ADDR_T rDumpBase;
+#endif
+ VAL_UINT32_T nOmxTids;
+ VDEC_DRV_CALLBACK_T rCallbackHook;
+} VDEC_HANDLE_T;
+
+#endif
diff --git a/kernel-headers/vdec_drv_if_dep.h b/kernel-headers/vdec_drv_if_dep.h
new file mode 100644
index 0000000..52be8f4
--- /dev/null
+++ b/kernel-headers/vdec_drv_if_dep.h
@@ -0,0 +1,152 @@
+#ifndef VDEC_DRV_IF_DEP_H /* for 6572 only */
+#define VDEC_DRV_IF_DEP_H
+
+/*=============================================================================
+ * Include Files
+ *===========================================================================*/
+
+#include "val_types_private.h"
+#include "vcodec_if_v2.h"
+/* #include "rv_format_info.h" */
+#include "wmc_type.h"
+/* #include "strm_iem.h" */
+#include "vcodec_dec_demuxer_if_v2.h"
+/* #include "ts_vcodec_common.h" */
+#define DumpInput__
+#ifdef DumpInput__
+#include <stdio.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*=============================================================================
+ * Definition
+ *===========================================================================*/
+#define MAX_BUFFER_SIZE 21
+/*typedef struct
+{
+ // for speedy mode
+ VAL_UINT32_T nBufferStatus;
+ VAL_INT64_T llLastVideoTime;
+ VAL_INT64_T llCurrentPlayTime;
+} DRIVER_HANDLER_T;
+*/
+/*
+typedef struct __RV9_DRV_DATA_T
+{
+ VAL_UINT32_T uStreamHdrWidth;
+ VAL_UINT32_T uStreamHdrHeight;
+ RM_DECODER_INPUT_PARAM_T rRM_INPUT_Data;
+ payload_inf_st payload_inf_tab_rv9[200]; //set up 200
+ RM_DECODER_PAYLOAD_INFO_T payload_inf_tab_rv9_MAUI[200]; //set up 200
+} RV9_DRV_DATA_T, *P_RV9_DRV_DATA_T;
+*/
+
+typedef struct __H264_DRV_DATA_T {
+ H264_DECODER_PAYLOAD_INFO_T prH264Payload;
+ H264_DECODER_INPUT_PARAM_T prInputData;
+ H264_DECODER_PRIVATE_PARAM_T rPrivateData;
+} H264_DRV_DATA_T, *P_H264_DRV_DATA_T;
+
+typedef struct __MPEG4_DRV_DATA_T {
+ MPEG4_DECODER_PAYLOAD_INFO_T prMPEG4Payload;
+ MPEG4_DECODER_INPUT_PARAM_T prInputData;
+ MPEG4_DECODER_PRIVATE_PARAM_T rPrivateData;
+} MPEG4_DRV_DATA_T, *P_MPEG4_DRV_DATA_T;
+
+typedef struct __VP8_DRV_DATA_T {
+ /* VP8_DEC_CUSTOM_SETTING_T VP8CustSetting; */
+} VP8_DRV_DATA_T, *P_VP8_DRV_DATA_T;
+
+typedef struct __VP9_DRV_DATA_T {
+ /* VP9_DEC_CUSTOM_SETTING_T VP9CustSetting; */
+} VP9_DRV_DATA_T, *P_VP9_DRV_DATA_T;
+
+typedef struct __VC1_DRV_DATA_T {
+ VAL_BOOL_T bVC1FirstDecode;
+ VC1_DECODER_PAYLOAD_INFO_T prVC1Payload;
+ VC1_DECODER_INPUT_PARAM_T prInputData;
+ TEMP_INTERFACE VC1TempInterface;
+} VC1_DRV_DATA_T, *P_VC1_DRV_DATA_T;
+
+typedef struct __VDEC_DRV_BUF_STATUS_T {
+ VAL_BOOL_T bDisplay;
+ VAL_BOOL_T bFree;
+ VDEC_DRV_FRAMEBUF_T *pFrameBuf;
+} VDEC_DRV_BUF_STATUS_T, *P_VDEC_DRV_BUF_STATUS_T;
+
+typedef enum {
+ VDEC_DRV_STATUS_OPEN_DONE = 0x00000001,
+ VDEC_DRV_STATUS_INIT_DONE = 0x00000002,
+ VDEC_DRV_STATUS_DECODE_EVER = 0x00000004
+} VDEC_DRV_STATUS;
+
+
+typedef struct __VDEC_HANDLE_T {
+ VAL_HANDLE_T hHalHandle; /* /< HAL data. */
+ VAL_HANDLE_T vHandle; /* /< for MMSYS power on/off */
+ VAL_MEMORY_T rHandleMem; /* /< Save handle memory information to be used in release. */
+ VAL_BOOL_T bFirstDecoded; /* / < already pass first video data to codec */
+ VAL_BOOL_T bHeaderPassed; /* / < already pass video header to codec */
+ VAL_BOOL_T bFlushAll;
+ VAL_BOOL_T bNewMemory; /* / allocate buffer for first DOU */
+ VAL_MEMORY_T HeaderBuf;
+ VAL_MEMORY_T HeaderBufwithFrame;
+ VAL_HANDLE_T hCodec;
+ DRIVER_HANDLER_T hDrv;
+ VIDEO_WRAP_HANDLE_T hWrapper;
+ VAL_UINT32_T CustomSetting;
+ VCODEC_BUFFER_T rVideoBitBuf;
+ VCODEC_DEC_INPUT_YUV_INFO_T rVideoFrameBuf;
+ VCODEC_MEMORY_TYPE_T rVideoDecMemType;
+ VAL_UINT32_T YUVBuffer[MAX_BUFFER_SIZE];
+ VAL_UINT32_T nYUVBufferIndex;
+ VAL_UINT32_T nDrvStatus;
+ VDEC_DRV_BUF_STATUS_T pFrameBufArray[MAX_BUFFER_SIZE];
+ VDEC_DRV_FRAMEBUF_T *DispFrameBuf, *FreeFrameBuf;
+ VCODEC_OPEN_SETTING_T codecOpenSetting;
+ VCODEC_DEC_INPUT_T rInputUnit;
+ VIDEO_DECODER_INPUT_NC_T rVideoDecInputNC;
+ VCODEC_DEC_OUTPUT_PARAM_T *rVideoDecOutputParam;
+ VCODEC_DEC_PRIVATE_OUTPUT_T rVideoDecOutput;
+ VCODEC_DEC_OUTPUT_BUFFER_PARAM_T rVideoDecYUVBufferParameter;
+ VCODEC_DEC_INPUT_BUFFER_PARAM_T rBitStreamParam;
+ /* for seek and thumbnail mode optimization */
+ VAL_BOOL_T bFirstDecodeForThumbnail;
+ VAL_BOOL_T bThumbnailModeOK;
+ VDEC_DRV_SET_DECODE_MODE_T rSetDecodeMode;
+ /* for no VOS header when MPEG4 */
+ VAL_UINT16_T nDefWidth;
+ VAL_UINT16_T nDefHeight;
+
+ VDEC_DRV_VIDEO_FORMAT_T CodecFormat;
+ VAL_VOID_T *prExtraData; /* /< Driver private data pointer. */
+ VAL_MEMORY_T rExtraDataMem; /* /< Save extra data memory information to be used in release. */
+ VCODEC_DEC_PRIVATE_OUTPUT_EXTRA_T prExtraDecOutput;
+#ifdef DumpInput__
+ FILE *pf_out;
+ VAL_MEM_ADDR_T rDumpBase;
+#endif
+
+ /* Morris Yang 20111101 [ */
+ VAL_UINT32_T nOmxTids;
+ /* ] */
+#if 1 /* defined(MT6572) //VCODEC_MULTI_THREAD */
+ /* Jackal Chen [ */
+ VAL_VOID_T *pDrvModule; /* /< used for dlopen and dlclose */
+ /* ] */
+#endif
+ VAL_BOOL_T fgValInitFlag; /* /< hValHandle is available or not */
+} VDEC_HANDLE_T;
+
+/*=============================================================================
+ * Function Declaration
+ *===========================================================================*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VDEC_DRV_IF_DEP_H */
diff --git a/kernel-headers/vdec_drv_if_private.h b/kernel-headers/vdec_drv_if_private.h
new file mode 100644
index 0000000..4e27516
--- /dev/null
+++ b/kernel-headers/vdec_drv_if_private.h
@@ -0,0 +1,437 @@
+#ifndef _VDEC_DRV_IF_PRIVATE_H_
+#define _VDEC_DRV_IF_PRIVATE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_private.h"
+#include "vdec_drv_if_public.h"
+
+
+typedef enum {
+ UNKNOWN_FBTYPE = 0, /* /< Unknown type */
+ VDEC_DRV_FBTYPE_YUV420_BK_16x1 = (1 << 0), /* /< YCbCr 420 block in three planar */
+ VDEC_DRV_FBTYPE_YUV420_BK_8x2 = (1 << 1), /* /< YCbCr 420 block in three planar */
+ VDEC_DRV_FBTYPE_YUV420_BK_4x4 = (1 << 2), /* /< YCbCr 420 block in three planar */
+ VDEC_DRV_FBTYPE_YUV420_RS = (1 << 3), /* /< YCbCr 420 raster scan in three planar */
+ VDEC_DRV_FBTYPE_RGB565_RS = (1 << 4) /* /< RGB565 in one planar */
+}
+VDEC_DRV_FBTYPE_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_BUFFER_CONTROL_T
+ * @par Description
+ * Type of buffer control
+ * - Here are two types of buffer
+ * - 1.Reference buffer
+ * - 2.Display buffer
+ * - Buffer can be fixed size or derived from memory pool.
+ * - Buffer can be created from internal or external memory.
+ */
+typedef enum {
+ /* /< Unknown Type */
+ VDEC_DRV_BUFFER_CONTROL_UNKNOWN = 0,
+
+ /* /< Reference frame and Display frame share the same external buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_EXT = (1 << 0),
+
+ /* /< Reference frame and Display frame share the same internal buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_INT = (1 << 1),
+
+ /* /< Reference frame and Display frame share the same external memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_EXT_POOL = (1 << 2),
+
+ /* /< Reference frame and Display frame share the same internal memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_INT_POOL = (1 << 3),
+
+ /* /< Reference frame uses external buffer and Display frame use another external buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_EXT = (1 << 4),
+
+ /* /< Reference frame uses external buffer and Display frame uses internal buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_INT = (1 << 5),
+
+ /* /< Reference frame uses external buffer and Display frame uses external memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_EXT_POOL = (1 << 6),
+
+ /* /< Reference frame uses external buffer and Display frame uses internal memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_INT_POOL = (1 << 7),
+
+ /* /< Reference frame uses external memory pool and Display frame use external buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_EXT = (1 << 8),
+
+ /* /< Reference frame uses external memory pool and Display frame uses internal buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_INT = (1 << 9),
+
+ /* /< Reference frame uses external memory pool and Display frame uses external memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_EXT_POOL = (1 << 10),
+
+ /* /< Reference frame uses external memory pool and Display frame uses internal memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_INT_POOL = (1 << 11),
+
+ /* /< Reference frame uses internal buffer and Display frame use external buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_EXT = (1 << 12),
+
+ /* /< Reference frame uses internal buffer and Display frame uses internal buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_INT = (1 << 13),
+
+ /* /< Reference frame uses internal buffer and Display frame uses external memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_EXT_POOL = (1 << 14),
+
+ /* /< Reference frame uses internal buffer and Display frame uses internal memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_INT_POOL = (1 << 15),
+
+ /* /< Reference frame uses internal memory pool and Display frame use external buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_EXT = (1 << 16),
+
+ /* /< Reference frame uses internal memory pool and Display frame uses internal buffer */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_INT = (1 << 17),
+
+ /* /< Reference frame uses internal memory pool and Display frame uses external memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_EXT_POOL = (1 << 18),
+
+ /* /< Reference frame uses external memory pool and Display frame uses another internal memory pool */
+ VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_INT_POOL = (1 << 19)
+} VDEC_DRV_BUFFER_CONTROL_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_DOWNSIZE_RATIO_T
+ * @par Description
+ * DownSize Ratio
+ * - The aspect ratio of frame is kept after downsizing.
+ */
+typedef enum {
+ VDEC_DRV_DOWNSIZE_RATIO_UNKNOWN = 0, /* /< Unknown ratio */
+ VDEC_DRV_DOWNSIZE_RATIO_1_1 = (1 << 0), /* /< Original ratio */
+ VDEC_DRV_DOWNSIZE_RATIO_1_2 = (1 << 1), /* /< ratio = 1/2 */
+ VDEC_DRV_DOWNSIZE_RATIO_1_3 = (1 << 2), /* /< ratio = 1/3 */
+ VDEC_DRV_DOWNSIZE_RATIO_1_4 = (1 << 3), /* /< ratio = 1/4 */
+ VDEC_DRV_DOWNSIZE_RATIO_1_5 = (1 << 4), /* /< ratio = 1/5 */
+ VDEC_DRV_DOWNSIZE_RATIO_1_6 = (1 << 5), /* /< ratio = 1/6 */
+ VDEC_DRV_DOWNSIZE_RATIO_1_7 = (1 << 6), /* /< ratio = 1/7 */
+ VDEC_DRV_DOWNSIZE_RATIO_1_8 = (1 << 7) /* /< ratio = 1/8 */
+} VDEC_DRV_DOWNSIZE_RATIO_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_PIC_STRUCT_T
+ * @par Description
+ * [Unused]Picture Struct
+ * - Consecutive Frame or filed
+ * - Separated top/bottom field
+ */
+typedef enum {
+ VDEC_DRV_PIC_STRUCT_UNKNOWN = 0, /* /< Unknown */
+ VDEC_DRV_PIC_STRUCT_CONSECUTIVE_FRAME, /* /< Consecutive Frame */
+ VDEC_DRV_PIC_STRUCT_CONSECUTIVE_TOP_FIELD, /* /< Consecutive top field */
+ VDEC_DRV_PIC_STRUCT_CONSECUTIVE_BOT_FIELD, /* /< Consecutive bottom field */
+ VDEC_DRV_PIC_STRUCT_SEPARATED_TOP_FIELD, /* /< Separated top field */
+ VDEC_DRV_PIC_STRUCT_SEPARATED_BOT_FIELD, /* /< Separated bottom field */
+ VDEC_DRV_PIC_STRUCT_FIELD,
+} VDEC_DRV_PIC_STRUCT_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_FRAME_RATE_T
+ * @par Description
+ * Frame rate types
+ */
+typedef enum {
+ VDEC_DRV_FRAME_RATE_UNKNOWN = 0, /* /< Unknown fps */
+ VDEC_DRV_FRAME_RATE_23_976, /* /< fps = 24000/1001 (23.976...) */
+ VDEC_DRV_FRAME_RATE_24, /* /< fps = 24 */
+ VDEC_DRV_FRAME_RATE_25, /* /< fps = 25 */
+ VDEC_DRV_FRAME_RATE_29_97, /* /< fps = 30000/1001 (29.97...) */
+ VDEC_DRV_FRAME_RATE_30, /* /< fps = 30 */
+ VDEC_DRV_FRAME_RATE_50, /* /< fps = 50 */
+ VDEC_DRV_FRAME_RATE_59_94, /* /< fps = 60000/1001 (59.94...) */
+ VDEC_DRV_FRAME_RATE_60, /* /< fps = 60 */
+ VDEC_DRV_FRAME_RATE_120, /* /< fps = 120 */
+ VDEC_DRV_FRAME_RATE_1, /* /< fps = 1 */
+ VDEC_DRV_FRAME_RATE_5, /* /< fps = 5 */
+ VDEC_DRV_FRAME_RATE_8, /* /< fps = 8 */
+ VDEC_DRV_FRAME_RATE_10, /* /< fps = 10 */
+ VDEC_DRV_FRAME_RATE_12, /* /< fps = 12 */
+ VDEC_DRV_FRAME_RATE_15, /* /< fps = 15 */
+ VDEC_DRV_FRAME_RATE_16, /* /< fps = 16 */
+ VDEC_DRV_FRAME_RATE_17, /* /< fps = 17 */
+ VDEC_DRV_FRAME_RATE_18, /* /< fps = 18 */
+ VDEC_DRV_FRAME_RATE_20, /* /< fps = 20 */
+ VDEC_DRV_FRAME_RATE_2, /* /< fps = 2 */
+ VDEC_DRV_FRAME_RATE_6, /* /< fps = 6 */
+ VDEC_DRV_FRAME_RATE_48, /* /< fps = 48 */
+ VDEC_DRV_FRAME_RATE_70, /* /< fps = 70 */
+ VDEC_DRV_FRAME_RATE_VARIABLE /* /< fps = VBR */
+} VDEC_DRV_FRAME_RATE_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_POST_PROC_T
+ * @par Description
+ * input of type SET_POST_PROC (output is NULL, use return value)
+ */
+typedef enum {
+ VDEC_DRV_POST_PROC_UNKNOWN = 0, /* /< Unknown */
+ VDEC_DRV_POST_PROC_DISABLE, /* /< Do not do post-processing */
+ VDEC_DRV_POST_PROC_DOWNSIZE, /* /< Do downsize */
+ VDEC_DRV_POST_PROC_RESIZE, /* /< Do resize */
+ VDEC_DRV_POST_PROC_DEBLOCK, /* /< Do deblocking */
+ VDEC_DRV_POST_PROC_DEINTERLACE /* /< Do deinterlace */
+} VDEC_DRV_POST_PROC_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_NALU_T
+ * @par Description
+ * Buffer Structure
+ * - Store NALU buffer base address
+ * - Store length of NALU buffer
+ */
+
+typedef struct {
+ VAL_UINT32_T u4AddrOfNALu; /* /< NALU buffer base address */
+ VAL_UINT32_T u4LengthOfNALu; /* /< Length of NALU buffer */
+ void *pReseved; /* /< reserved */
+} VDEC_DRV_NALU_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_STATISTIC_T
+ * @par Description
+ * VDecDrv Statistic information
+ */
+typedef struct __VDEC_DRV_STATISTIC_T {
+ VAL_UINT32_T u4DecTimeMax; /* /< [Out] Decode one frame period, Max. */
+ VAL_UINT32_T u4DecTimeMin; /* /< [Out] Decode one frame period, Min. */
+ VAL_UINT32_T u4DecTimeAvg; /* /< [Out] Decode one frame period, Average. */
+} VDEC_DRV_STATISTIC_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_STATISTIC_T
+ * @par Description
+ * Pointer of VDEC_DRV_STATISTIC_T
+ */
+typedef VDEC_DRV_STATISTIC_T * P_VDEC_DRV_STATISTIC_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_FBTYPE_T
+ * @par Description
+ * Supported frame buffer type in driver layer
+ */
+typedef struct {
+ /* for speedy mode */
+ VAL_UINT32_T nBufferStatus;
+ VAL_INT64_T llLastVideoTime;
+ VAL_INT64_T llCurrentPlayTime;
+} DRIVER_HANDLER_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_VIDEO_FBTYPE_T
+ * @par Description
+ * Both input and output of type QUERY_FBTYPE
+ */
+typedef struct __VDEC_DRV_VIDEO_FBTYPE_T {
+ VAL_UINT32_T u4FBType; /* /< VDEC_DRV_FBTYPE */
+} VDEC_DRV_VIDEO_FBTYPE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_VIDEO_FBTYPE_T
+ * @par Description
+ * Pointer of VDEC_DRV_VIDEO_FBTYPE_T
+ */
+typedef VDEC_DRV_VIDEO_FBTYPE_T * P_VDEC_DRV_VIDEO_FBTYPE_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_QUERY_BUFFER_MODE_T
+ * @par Description
+ * Both input and output of type QUERY_BUFFER_CONTROL
+ */
+typedef struct __VDEC_DRV_QUERY_BUFFER_MODE_T {
+ VAL_UINT32_T u4BufCtrl; /* /< VDEC_DRV_BUFFER_CONTROL */
+} VDEC_DRV_QUERY_BUFFER_MODE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_QUERY_BUFFER_MODE_T
+ * @par Description
+ * Pointer of VDEC_DRV_QUERY_BUFFER_MODE_T
+ */
+typedef VDEC_DRV_QUERY_BUFFER_MODE_T * P_VDEC_DRV_QUERY_BUFFER_MODE_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_QUERY_POOL_SIZE_T
+ * @par Description
+ * output of type QUERY_REF_POOL_SIZE and QUERY_DISP_POOL_SIZE (input is NULL)
+ */
+typedef struct __VDEC_DRV_QUERY_POOL_SIZE_T {
+ VAL_UINT32_T u4Size; /* /< buffer size of the memory pool */
+} VDEC_DRV_QUERY_POOL_SIZE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_QUERY_POOL_SIZE_T
+ * @par Description
+ * Pointer of VDEC_DRV_QUERY_POOL_SIZE_T
+ */
+typedef VDEC_DRV_QUERY_POOL_SIZE_T * P_VDEC_DRV_QUERY_POOL_SIZE_T;
+
+/* output of type DISP_FRAME_BUFFER and FREE_FRAME_BUFFER is P_VDEC_DRV_FRAMEBUF_T (input is NULL) */
+/* output of type GET_PICTURE_INFO is P_VDEC_DRV_PICINFO_T (input is NULL) */
+/* both input and output of type QUERY_REORDER_ABILITY are NULL (use return value) */
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_QUERY_POOL_DOWNSIZE_T
+ * @par Description
+ * output of type QUERY_DOWNSIZE_ABILITY (input is NULL)
+ */
+typedef struct __VDEC_DRV_QUERY_POOL_DOWNSIZE_T {
+ VAL_UINT32_T u4Ratio; /* /< VDEC_DRV_DOWNSIZE_RATIO */
+} VDEC_DRV_QUERY_POOL_DOWNSIZE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_QUERY_POOL_DOWNSIZE_T
+ * @par Description
+ * Pointer of VDEC_DRV_QUERY_POOL_DOWNSIZE_T
+ */
+typedef VDEC_DRV_QUERY_POOL_DOWNSIZE_T * P_VDEC_DRV_QUERY_POOL_DOWNSIZE_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_QUERY_POOL_RESIZE_T
+ * @par Description
+ * input of type QUERY_RESIZE_ABILITY (output is NULL, use return value)
+ */
+typedef struct __VDEC_DRV_QUERY_POOL_RESIZE_T {
+ VAL_UINT32_T u4OutWidth; /* /<Width of buffer */
+ VAL_UINT32_T u4OutHeight; /* /<Height of buffer */
+} VDEC_DRV_QUERY_POOL_RESIZE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_QUERY_POOL_RESIZE_T
+ * @par Description
+ * Pointer of VDEC_DRV_QUERY_POOL_RESIZE_T
+ */
+typedef VDEC_DRV_QUERY_POOL_RESIZE_T * P_VDEC_DRV_QUERY_POOL_RESIZE_T;
+
+/* both input and output of type QUERY_DEBLOCK_ABILITY are NULL (use return value) */
+/* both input and output of type QUERY_DERING_ABILITY are NULL (use return value) */
+/* both input and output of type QUERY_DEINTERLACE_ABILITY are NULL (use return value) */
+/* both input and output of type QUERY_DROPFRAME_ABILITY are NULL (use return value) */
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_SET_BUFFER_MODE_T
+ * @par Description
+ * input of type VDEC_DRV_SET_BUFFER_MODE_T (output is NULL, use return value)
+ */
+typedef struct __VDEC_DRV_SET_BUFFER_MODE_T {
+ VAL_UINT32_T u4BufferMode; /* /< VDEC_DRV_BUFFER_CONTROL */
+} VDEC_DRV_SET_BUFFER_MODE_T;
+
+/* input of type SET_FRAME_BUFFER_TYPE is VDEC_DRV_VIDEO_FBTYPE_T (output is NULL, use return value) */
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_SET_BUFFER_MODE_T
+ * @par Description
+ * Pointer of VDEC_DRV_SET_BUFFER_MODE_T
+ */
+typedef VDEC_DRV_SET_BUFFER_MODE_T * P_VDEC_DRV_SET_BUFFER_MODE_T;
+
+/* input of type SET_FRAME_BUFFER_TYPE is VDEC_DRV_VIDEO_FBTYPE_T (output is NULL, use return value) */
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_SET_BUFFER_ADDR_T
+ * @par Description
+ * input of type FREE_FRAME_BFFER (buffer_len=NULL, output is NULL, use return value)
+ */
+typedef struct __VDEC_DRV_SET_BUFFER_ADDR_T {
+ VAL_MEM_ADDR_T rBufferAddr; /* /< buffer memory base address */
+} VDEC_DRV_SET_BUFFER_ADDR_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_SET_BUFFER_ADDR_T
+ * @par Description
+ * Pointer of VDEC_DRV_SET_BUFFER_ADDR_T
+ */
+typedef VDEC_DRV_SET_BUFFER_ADDR_T * P_VDEC_DRV_SET_BUFFER_ADDR_T;
+
+/* input of type SET_REF_EXT_POOL_ADDR and SET_DISP_EXT_POOL_ADDR is
+ VDEC_DRV_SET_BUFFER_ADDR_T (output is NULL, use return value) */
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_SET_POST_PROC_MODE_T
+ * @par Description
+ * Parameters of set post process mode
+ */
+typedef struct __VDEC_DRV_SET_POST_PROC_MODE_T {
+ VAL_UINT32_T u4PostProcMode; /* /< one of VDEC_DRV_POST_PROC */
+ VAL_UINT32_T u4DownsizeRatio; /* /< if mode is POST_PROC_DOWNSIZE */
+ VAL_UINT32_T u4ResizeWidth; /* /< if mode is POST_PROC_RESIZE */
+ VAL_UINT32_T u4ResizeHeight; /* /< if mode is POST_PROC_RESIZE */
+} VDEC_DRV_SET_POST_PROC_MODE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_SET_POST_PROC_MODE_T
+ * @par Description
+ * Pointer of VDEC_DRV_SET_POST_PROC_MODE_T
+ */
+typedef VDEC_DRV_SET_POST_PROC_MODE_T * P_VDEC_DRV_SET_POST_PROC_MODE_T;
+
+
+
+typedef struct _VDEC_DRV_HW_REG_T {
+ VAL_UINT32_T u4VdecHWBase;
+ VAL_UINT32_T u4VdecHWSYS;
+ VAL_UINT32_T u4VdecMISC;
+ VAL_UINT32_T u4VdecVLD;
+ VAL_UINT32_T u4VdecVLDTOP;
+ VAL_UINT32_T u4VdecMC;
+ VAL_UINT32_T u4VdecAVCVLD;
+ VAL_UINT32_T u4VdecAVCMV;
+ VAL_UINT32_T u4VdecPP;
+ VAL_UINT32_T u4VdecSQT;
+ VAL_UINT32_T u4VdecVP8VLD;
+ VAL_UINT32_T u4VdecVP6VLD;
+ VAL_UINT32_T u4VdecVP8VLD2;
+} VDEC_DRV_HW_REG_T;
+
+typedef VDEC_DRV_HW_REG_T * P_VDEC_DRV_HW_REG_T;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VDEC_DRV_IF_PRIVATE_H_ */
diff --git a/kernel-headers/vdec_drv_if_public.h b/kernel-headers/vdec_drv_if_public.h
new file mode 100644
index 0000000..8a141a3
--- /dev/null
+++ b/kernel-headers/vdec_drv_if_public.h
@@ -0,0 +1,943 @@
+#ifndef _VDEC_DRV_IF_PUBLIC_H_
+#define _VDEC_DRV_IF_PUBLIC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_public.h"
+
+#define MTK_VDEC_PROP_WAITKEYFRAME "mtk.vdec.waitkeyframeforplayback"
+#define MTK_VDEC_VALUE_WAITKEYFRAME_AT_START (1)
+#define MTK_VDEC_VALUE_WAITKEYFRAME_FOR_SEEK (1 << 1)
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_FBSTSTUS
+ * @par Description
+ * This is the item for frame buffer status
+ */
+typedef enum _VDEC_DRV_FBSTSTUS {
+ VDEC_DRV_FBSTSTUS_NORMAL = 0, /* /< normal type */
+ VDEC_DRV_FBSTSTUS_REPEAT_LAST = (1 << 0), /* /< repeat last frame */
+ VDEC_DRV_FBSTSTUS_NOT_DISPLAY = (1 << 1), /* /< not displayed */
+ VDEC_DRV_FBSTSTUS_NOT_USED = (1 << 2), /* /< not used */
+ VDEC_DRV_FBSTSTUS_INVALID_TIMESTAMP = (1 << 3), /* /< invalid timestamp */
+}
+VDEC_DRV_FBSTSTUS;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_VIDEO_FORMAT_T
+ * @par Description
+ * video_format of VDecDrvCreate()
+ */
+
+typedef enum _VDEC_DRV_VIDEO_FORMAT_T {
+ VDEC_DRV_VIDEO_FORMAT_UNKNOWN_VIDEO_FORMAT = 0, /* /< Unknown video format */
+ VDEC_DRV_VIDEO_FORMAT_DIVX311 = (1 << 0), /* /< Divix 3.11 */
+ VDEC_DRV_VIDEO_FORMAT_DIVX4 = (1 << 1), /* /< Divix 4 */
+ VDEC_DRV_VIDEO_FORMAT_DIVX5 = (1 << 2), /* /< Divix 5 */
+ VDEC_DRV_VIDEO_FORMAT_XVID = (1 << 3), /* /< Xvid */
+ VDEC_DRV_VIDEO_FORMAT_MPEG1 = (1 << 4), /* /< MPEG-1 */
+ VDEC_DRV_VIDEO_FORMAT_MPEG2 = (1 << 5), /* /< MPEG-2 */
+ VDEC_DRV_VIDEO_FORMAT_MPEG4 = (1 << 6), /* /< MPEG-4 */
+ VDEC_DRV_VIDEO_FORMAT_H263 = (1 << 7), /* /< H263 */
+ VDEC_DRV_VIDEO_FORMAT_H264 = (1 << 8), /* /< H264 */
+ VDEC_DRV_VIDEO_FORMAT_H265 = (1 << 9), /* /< H265 */
+ VDEC_DRV_VIDEO_FORMAT_WMV7 = (1 << 10), /* /< WMV7 */
+ VDEC_DRV_VIDEO_FORMAT_WMV8 = (1 << 11), /* /< WMV8 */
+ VDEC_DRV_VIDEO_FORMAT_WMV9 = (1 << 12), /* /< WMV9 */
+ VDEC_DRV_VIDEO_FORMAT_VC1 = (1 << 13), /* /< VC1 */
+ VDEC_DRV_VIDEO_FORMAT_REALVIDEO8 = (1 << 14), /* /< RV8 */
+ VDEC_DRV_VIDEO_FORMAT_REALVIDEO9 = (1 << 15), /* /< RV9 */
+ VDEC_DRV_VIDEO_FORMAT_VP6 = (1 << 16), /* /< VP6 */
+ VDEC_DRV_VIDEO_FORMAT_VP7 = (1 << 17), /* /< VP7 */
+ VDEC_DRV_VIDEO_FORMAT_VP8 = (1 << 18), /* /< VP8 */
+ VDEC_DRV_VIDEO_FORMAT_VP8_WEBP_PICTURE_MODE = (1 << 19), /* /< VP8 WEBP PICTURE MODE */
+ VDEC_DRV_VIDEO_FORMAT_VP8_WEBP_MB_ROW_MODE = (1 << 20), /* /< VP8 WEBP ROW MODE */
+ VDEC_DRV_VIDEO_FORMAT_VP9 = (1 << 21), /* /< VP9 */
+ VDEC_DRV_VIDEO_FORMAT_VP9_WEBP_PICTURE_MODE = (1 << 22), /* /< VP9 WEBP PICTURE MODE */
+ VDEC_DRV_VIDEO_FORMAT_VP9_WEBP_MB_ROW_MODE = (1 << 23), /* /< VP9 WEBP ROW MODE */
+ VDEC_DRV_VIDEO_FORMAT_AVS = (1 << 24), /* /< AVS */
+ VDEC_DRV_VIDEO_FORMAT_MJPEG = (1 << 25), /* /< Motion JPEG */
+ VDEC_DRV_VIDEO_FORMAT_S263 = (1 << 26), /* /< Sorenson Spark */
+ VDEC_DRV_VIDEO_FORMAT_H264HP = (1 << 27),
+ VDEC_DRV_VIDEO_FORMAT_H264SEC = (1 << 28),
+ VDEC_DRV_VIDEO_FORMAT_H265SEC = (1 << 29)
+} VDEC_DRV_VIDEO_FORMAT_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_H265_VIDEO_PROFILE_T
+ * @par Description
+ * video profile for H.265
+ */
+typedef enum _VDEC_DRV_H265_VIDEO_PROFILE_T {
+ VDEC_DRV_H265_VIDEO_PROFILE_UNKNOWN = 0, /* /< Unknown video profile */
+ VDEC_DRV_H265_VIDEO_PROFILE_H265_MAIN = (1 << 0), /* /< H265 main profile */
+ VDEC_DRV_H265_VIDEO_PROFILE_H265_MAIN_10 = (1 << 1), /* /< H265 main 10 profile */
+ VDEC_DRV_H265_VIDEO_PROFILE_H265_STILL_IMAGE = (1 << 2) /* /< H265 still image profile */
+} VDEC_DRV_H265_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_H264_VIDEO_PROFILE_T
+ * @par Description
+ * video profile for H.264
+ */
+typedef enum _VDEC_DRV_H264_VIDEO_PROFILE_T {
+ VDEC_DRV_H264_VIDEO_PROFILE_UNKNOWN = 0, /* /< Unknown video profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_BASELINE = (1 << 0), /* /< H264 baseline profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_CONSTRAINED_BASELINE = (1 << 1), /* /< H264 constrained baseline profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_MAIN = (1 << 2), /* /< H264 main profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_EXTENDED = (1 << 3), /* /< H264 extended profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH = (1 << 4), /* /< H264 high profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH_10 = (1 << 5), /* /< H264 high 10 profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH422 = (1 << 6), /* /< H264 high 422 profile */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH444 = (1 << 7), /* /< H264 high 444 profile */
+
+ /* /< H264 high 10 intra profile in Amendment 2 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH_10_INTRA = (1 << 8),
+
+ /* /< H264 high 422 intra profile in Amendment 2 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH422_INTRA = (1 << 9),
+
+ /* /< H264 high 444 intra profile in Amendment 2 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH444_INTRA = (1 << 10),
+
+ /* /< H264 CAVLC 444 intra profile in Amendment 2 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_CAVLC444_INTRA = (1 << 11),
+
+ /* /< H264 high 444 predictive profile in Amendment 2 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH444_PREDICTIVE = (1 << 12),
+
+ /* /< H264 scalable baseline profile in Amendment 3 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_SCALABLE_BASELINE = (1 << 13),
+
+ /* /< H264 scalable high profile in Amendment 3 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_SCALABLE_HIGH = (1 << 14),
+
+ /* /< H264 scalable high intra profile in Amendment 3 */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_SCALABLE_HIGH_INTRA = (1 << 15),
+
+ /* /< Corrigendum 1 (2009) */
+ VDEC_DRV_H264_VIDEO_PROFILE_H264_MULTIVIEW_HIGH = (1 << 16)
+} VDEC_DRV_H264_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_MPEG_VIDEO_PROFILE_T
+ * @par Description
+ * video profile for H263, MPEG2, MPEG4
+ */
+typedef enum _VDEC_DRV_MPEG_VIDEO_PROFILE_T {
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_0 = (1 << 0), /* /< H263 Profile 0 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_1 = (1 << 1), /* /< H263 Profile 1 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_2 = (1 << 2), /* /< H263 Profile 2 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_3 = (1 << 3), /* /< H263 Profile 3 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_4 = (1 << 4), /* /< H263 Profile 4 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_5 = (1 << 5), /* /< H263 Profile 5 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_6 = (1 << 6), /* /< H263 Profile 6 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_7 = (1 << 7), /* /< H263 Profile 7 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_H263_8 = (1 << 8), /* /< H263 Profile 8 */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SIMPLE = (1 << 9), /* /< MPEG2 Simple Profile */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_MAIN = (1 << 10), /* /< MPEG2 Main Profile */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SNR = (1 << 11), /* /< MPEG2 SNR Profile */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SPATIAL = (1 << 12), /* /< MPEG2 Spatial Profile */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_HIGH = (1 << 13), /* /< MPEG2 High Profile */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG4_SIMPLE = (1 << 14), /* /< MPEG4 Simple Profile */
+ VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE = (1 << 15) /* /< MPEG4 Advanced Simple Profile */
+} VDEC_DRV_MPEG_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_MS_VIDEO_PROFILE_T
+ * @par Description
+ * video profile for VC1, WMV9
+ */
+typedef enum _VDEC_DRV_MS_VIDEO_PROFILE_T {
+ VDEC_DRV_MS_VIDEO_PROFILE_VC1_SIMPLE = (1 << 0), /* /< VC-1 Simple Profile */
+ VDEC_DRV_MS_VIDEO_PROFILE_VC1_MAIN = (1 << 1), /* /< VC-1 Main Profile */
+ VDEC_DRV_MS_VIDEO_PROFILE_VC1_ADVANCED = (1 << 2), /* /< VC-1 Advanced Profile */
+ VDEC_DRV_MS_VIDEO_PROFILE_WMV9_SIMPLE = (1 << 3), /* /< WMV9 Simple Profile */
+ VDEC_DRV_MS_VIDEO_PROFILE_WMV9_MAIN = (1 << 4), /* /< WMV9 Main Profile */
+ VDEC_DRV_MS_VIDEO_PROFILE_WMV9_COMPLEX = (1 << 5) /* /< WMV9 Complex Profile */
+} VDEC_DRV_MS_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_VIDEO_LEVEL_T
+ * @par Description
+ * video level
+ */
+typedef enum _VDEC_DRV_VIDEO_LEVEL_T {
+ VDEC_DRV_VIDEO_LEVEL_UNKNOWN = 0, /* /< Unknown level */
+ VDEC_DRV_VIDEO_LEVEL_0, /* /< Specified by VC1 */
+ VDEC_DRV_VIDEO_LEVEL_1, /* /< Specified by H264, VC1, MPEG4, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_1b, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_1_1, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_1_2, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_1_3, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_2, /* /< Specified by H264, VC1, MPEG4, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_2, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_2_1, /* /< Specified by H264, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_2_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_2_2, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_3, /* /< Specified by H264, VC1, MPEG4, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_3, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_3_1, /* /< Specified by H264, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_3_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_3_2, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_4, /* /< Specified by H264, VC1, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_4, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_4_1, /* /< Specified by H264, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_4_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_4_2, /* /< Specified by H264 */
+ VDEC_DRV_VIDEO_LEVEL_5, /* /< Specified by H264, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_5, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_5_1, /* /< Specified by H264, HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_5_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_5_2, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_5_2, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_6, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_6, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_6_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_6_1, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_6_2, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_6_2, /* /< Specified by HEVC */
+ VDEC_DRV_VIDEO_LEVEL_LOW, /* /< Specified by MPEG2, VC1 */
+ VDEC_DRV_VIDEO_LEVEL_MEDIUM, /* /< Specified by MPEG2, VC1 */
+ VDEC_DRV_VIDEO_LEVEL_HIGH1440, /* /< Specified by MPEG2 */
+ VDEC_DRV_VIDEO_LEVEL_HIGH /* /< Specified by MPEG2, VC1 */
+
+} VDEC_DRV_VIDEO_LEVEL_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_RESOLUTION_T
+ * @par Description
+ * video resolution support
+ */
+typedef enum _VDEC_DRV_RESOLUTION_T {
+ VDEC_DRV_RESOLUTION_UNKNOWN = 0, /* /< Unknown resolution */
+ VDEC_DRV_RESOLUTION_SUPPORT_QCIF, /* /< QCIF */
+ VDEC_DRV_RESOLUTION_SUPPORT_QVGA, /* /< QVGA */
+ VDEC_DRV_RESOLUTION_SUPPORT_CIF, /* /< CIF */
+ VDEC_DRV_RESOLUTION_SUPPORT_480I, /* /< 720x480 interlace */
+ VDEC_DRV_RESOLUTION_SUPPORT_480P, /* /< 720x480 progressive */
+ VDEC_DRV_RESOLUTION_SUPPORT_576I, /* /< 720x576 interlace */
+ VDEC_DRV_RESOLUTION_SUPPORT_576P, /* /< 720x576 progressive */
+ VDEC_DRV_RESOLUTION_SUPPORT_720P, /* /< 1280x720 progressive */
+ VDEC_DRV_RESOLUTION_SUPPORT_1080I, /* /< 1920x1080 interlace */
+ VDEC_DRV_RESOLUTION_SUPPORT_1080P, /* /< 1920x1080 progressive */
+ VDEC_DRV_RESOLUTION_SUPPORT_2160P /* /< 4096x2160 progressive */
+} VDEC_DRV_RESOLUTION_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_QUERY_TYPE_T
+ * @par Description
+ * video driver used to query different info
+ */
+typedef enum _VDEC_DRV_QUERY_TYPE_T {
+ VDEC_DRV_QUERY_TYPE_FBTYPE, /* /< Query VDEC_DRV_QUERY_TYPE_FBTYPE */
+ VDEC_DRV_QUERY_TYPE_VIDEO_FORMAT, /* /< Query VDEC_DRV_QUERY_TYPE_VIDEO_FORMAT */
+ VDEC_DRV_QUERY_TYPE_PROPERTY, /* /< Query VDEC_DRV_PROPERTY_T */
+ VDEC_DRV_QUERY_TYPE_CHIP_NAME, /* /< Query VDEC_DRV_QUERY_TYPE_CHIP_NAME */
+ VDEC_DRV_QUERY_TYPE_BUFFER_CONTROL, /* /< Query VDEC_DRV_QUERY_TYPE_BUFFER_CONTROL */
+ VDEC_DRV_QUERY_TYPE_FEATURE_SUPPORTED, /* /< Query VDEC_DRV_QUERY_TYPE_FEATURE_SUPPORTED */
+ VDEC_DRV_QUERY_TYPE_CPUCORE_FREQUENCY, /* /< Query VDEC_DRV_QUERY_TYPE_CPUCORE_FREQUENCY */
+} VDEC_DRV_QUERY_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_QUERY_TYPE_T
+ * @par Description
+ * video driver used to queue multiple input buffers
+ */
+typedef enum _VDEC_DRV_FEATURE_TYPE_T {
+ VDEC_DRV_FEATURE_TYPE_NONE = 0, /* /< Empty */
+ VDEC_DRV_FEATURE_TYPE_QUEUE_INPUT_BUFFER = (1 << 0), /* /< Driver will queue multiple input buffers */
+} VDEC_DRV_FEATURE_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_GET_TYPE_T
+ * @par Description
+ * video driver used to get/query different info
+ */
+typedef enum _VDEC_DRV_GET_TYPE_T {
+ /* /< how many buffer size of the reference pool needs in driver */
+ VDEC_DRV_GET_TYPE_QUERY_REF_POOL_SIZE,
+
+ /* /< how many buffer size of the display pool needs in driver */
+ VDEC_DRV_GET_TYPE_QUERY_DISP_POOL_SIZE,
+
+ /* /< return a P_VDEC_DRV_FRAMEBUF_T address (especially in display order != decode order) */
+ VDEC_DRV_GET_TYPE_DISP_FRAME_BUFFER,
+
+ /*
+ /< return a frame didn't be a reference more
+ (when buffer_mode = REF_IS_DISP_EXT, REF_INT_DISP_EXT or REF_INT_POOL_DISP_EXT)
+ */
+ VDEC_DRV_GET_TYPE_FREE_FRAME_BUFFER,
+ VDEC_DRV_GET_TYPE_GET_PICTURE_INFO, /* /< return a pointer address point to P_VDEC_DRV_PICINFO_T */
+ VDEC_DRV_GET_TYPE_GET_STATISTIC_INFO, /* /< return statistic information. */
+ VDEC_DRV_GET_TYPE_GET_FRAME_MODE, /* /< return frame mode parameter. */
+ VDEC_DRV_GET_TYPE_GET_FRAME_CROP_INFO, /* /< return frame crop information. */
+
+ /* /< query if driver can re-order the decode order to display order */
+ VDEC_DRV_GET_TYPE_QUERY_REORDER_ABILITY,
+ VDEC_DRV_GET_TYPE_QUERY_DOWNSIZE_ABILITY, /* /< query if driver can downsize decoded frame */
+ VDEC_DRV_GET_TYPE_QUERY_RESIZE_ABILITY, /* /< query if driver can resize decoded frame */
+ VDEC_DRV_GET_TYPE_QUERY_DEBLOCK_ABILITY, /* /< query if driver can do deblocking */
+ VDEC_DRV_GET_TYPE_QUERY_DEINTERLACE_ABILITY, /* /< query if driver can do deinterlace */
+ VDEC_DRV_GET_TYPE_QUERY_DROPFRAME_ABILITY, /* /< query if driver can drop frame */
+
+ /* /< query if driver finish decode one frame but no output (main profile with B frame case.) */
+ VDEC_DRV_GET_TYPE_GET_DECODE_STATUS_INFO,
+ VDEC_DRV_GET_TYPE_GET_PIXEL_FORMAT, /* /< query the driver output pixel format */
+ VDEC_DRV_GET_TYPE_GET_CPU_LOADING_INFO, /* /< query the cpu loading info from kernel driver */
+ VDEC_DRV_GET_TYPE_GET_HW_CRC, /* /< query the hw CRC */
+ VDEC_DRV_GET_TYPE_GET_CODEC_TIDS, /* /< query the thread ids from the codec lib */
+ VDEC_DRV_GET_TYPE_GET_FRAME_INTERVAL, /* /< query frame interval from the codec lib */
+ VDEC_DRV_GET_TYPE_FREE_INPUT_BUFFER, /* /< free input buffer */
+ VDEC_DRV_GET_TYPE_QUERY_VIDEO_INTERLACING, /* /< query video interlace information */
+ VDEC_DRV_GET_TYPE_QUERY_VIDEO_DPB_SIZE, /* /< query video DPB size */
+ VDEC_DRV_SET_TYPE_SET_WAIT_KEYFRAME, ///< set wait keyframe mode, default 0, 1 = wait at start/flush, 2 = wait at seek mode, 3 = always wait
+ VDEC_DRV_GET_TYPE_CODEC_PROPERTY /* /< get teh codec specific property for decode flow*/
+} VDEC_DRV_GET_TYPE_T;
+
+typedef enum _VDEC_DRV_CODEC_PROPERTY_T {
+ VDEC_CODEC_NONE = 0x00000000,
+ VDEC_CODEC_SUPPORT_DPB_SIZE = 0x00000001,
+} VDEC_DRV_CODEC_PROPERTY_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_PIXEL_FORMAT_T
+ * @par Description
+ * pixel format
+ */
+typedef enum _VDEC_DRV_PIXEL_FORMAT_T {
+ VDEC_DRV_PIXEL_FORMAT_NONE = 0, /* /< None */
+ VDEC_DRV_PIXEL_FORMAT_YUV_420_PLANER, /* /< YUV 420 planer */
+ VDEC_DRV_PIXEL_FORMAT_YUV_420_PLANER_MTK, /* /< YUV 420 planer MTK mode */
+ VDEC_DRV_PIXEL_FORMAT_YUV_420_PLANER_UFO, /* /< YUV 420 planer MTK UFO mode */
+ VDEC_DRV_PIXEL_FORMAT_YUV_YV12 /* /< YUV YV12 */
+} VDEC_DRV_PIXEL_FORMAT_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_DECODER_TYPE_T
+ * @par Description
+ * decoder type
+ */
+typedef enum _VDEC_DRV_DECODER_TYPE_T {
+ VDEC_DRV_DECODER_MTK_HARDWARE = 0, /* /< MTK software */
+ VDEC_DRV_DECODER_MTK_SOFTWARE, /* /< MTK hardware */
+ VDEC_DRV_DECODER_GOOGLE_SOFTWARE /* /< google software (default) */
+} VDEC_DRV_DECODER_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_SET_TYPE_T
+ * @par Description
+ * video driver used to set different info
+ */
+typedef enum _VDEC_DRV_SET_TYPE_T {
+ /* /< =1, use timestamp in sVDEC_DRV_FRAMEBUF_T for the picture */
+ VDEC_DRV_SET_TYPE_USE_EXT_TIMESTAMP,
+ VDEC_DRV_SET_TYPE_SET_BUFFER_MODE, /* /< value is one of VDEC_DRV_BUFFER_MODE */
+
+ /* /< one of VDEC_DRV_FBTYPE, if output type is the same as decode type, buffer mode can be REF_IS_DISP */
+ VDEC_DRV_SET_TYPE_SET_FRAME_BUFFER_TYPE,
+ VDEC_DRV_SET_TYPE_FREE_FRAME_BFFER, /* /< release buffer if DISP BUFFER is allocated from driver */
+ VDEC_DRV_SET_TYPE_SET_REF_EXT_POOL_ADDR, /* /< if use REF_EXT_POOL in SET_BUFFER_MODE */
+ VDEC_DRV_SET_TYPE_SET_DISP_EXT_POOL_ADDR, /* /< if use DISP_EXT_POOL in SET_BUFFER_MODE */
+ VDEC_DRV_SET_TYPE_SET_DECODE_MODE, /* /< set if drop frame */
+
+ /* /< buffer mode cannot set to REF_IS_DISP when using post-processing */
+ VDEC_DRV_SET_TYPE_SET_POST_PROC,
+ VDEC_DRV_SET_TYPE_SET_STATISTIC_ON, /* /< enable statistic function. */
+ VDEC_DRV_SET_TYPE_SET_STATISTIC_OFF, /* /< disable statistic function. */
+ VDEC_DRV_SET_TYPE_SET_FRAME_MODE, /* /< set frame mode */
+ VDEC_DRV_SET_TYPE_SET_BUF_STATUS_FOR_SPEEDY, /* /< set buffer status for speedy mode */
+ VDEC_DRV_SET_TYPE_SET_LAST_DISPLAY_TIME, /* /< set the last display time */
+ VDEC_DRV_SET_TYPE_SET_CURRENT_PLAY_TIME, /* /< set the current play time */
+ VDEC_DRV_SET_TYPE_SET_CONCEAL_LEVEL, /* /< error conceal level for decoder */
+ VDEC_DRV_SET_TYPE_SET_OMX_TIDS, /* /< set omx thread ids */
+ VDEC_DRV_SET_TYPE_SET_SWITCH_TVOUT, /* /< set ot switch to TV OUT */
+ VDEC_DRV_SET_TYPE_SET_CODEC_COLOR_FORAMT, /* /< set codec color format */
+ VDEC_DRV_SET_TYPE_SET_CODEC_YUV_STRIDE, /* /< set codec yuv stride */
+ VDEC_DRV_SET_TYPE_SET_FRAMESIZE, /* /< set frame size from caller for MPEG4 decoder */
+
+ /* /< use the max suppoerted size as output buffer size. for smooth */
+ VDEC_DRV_SET_TYPE_SET_FIXEDMAXOUTPUTBUFFER,
+ VDEC_DRV_SET_TYPE_SET_UFO_DECODE,
+ VDEC_DRV_SET_TYPE_SET_CALLBACK,
+ VDEC_DRV_SET_TYPE_SET_FULL_SPEED,
+} VDEC_DRV_SET_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_DECODE_MODE_T
+ * @par Description
+ * video driver decode mode
+ */
+typedef enum _VDEC_DRV_DECODE_MODE_T {
+ VDEC_DRV_DECODE_MODE_UNKNOWN = 0, /* /< Unknown */
+ VDEC_DRV_DECODE_MODE_NORMAL, /* /< decode all frames (no drop) */
+ VDEC_DRV_DECODE_MODE_I_ONLY, /* /< skip P and B frame */
+ VDEC_DRV_DECODE_MODE_B_SKIP, /* /< skip B frame */
+ VDEC_DRV_DECODE_MODE_DROPFRAME, /* /< display param1 frames & drop param2 frames */
+ VDEC_DRV_DECODE_MODE_NO_REORDER, /* /< output display ASAP without reroder */
+ VDEC_DRV_DECODE_MODE_THUMBNAIL, /* /< thumbnail mode */
+
+ /* /< skip reference check mode - force decode and display from first frame */
+ VDEC_DRV_DECODE_MODE_SKIP_REFERENCE_CHECK,
+
+ /* /< decode immediately no check. (parser should make sure the completed frame) */
+ VDEC_DRV_DECODE_MODE_LOW_LATENCY_DECODE,
+} VDEC_DRV_DECODE_MODE_T;
+
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_MRESULT_T
+ * @par Description
+ * Driver return type
+ */
+typedef enum __VDEC_DRV_MRESULT_T {
+ VDEC_DRV_MRESULT_OK = 0, /* /< OK */
+ VDEC_DRV_MRESULT_FAIL, /* /< Fail */
+ VDEC_DRV_MRESULT_FATAL, /* /< Fatal error to stop. */
+ VDEC_DRV_MRESULT_RESOLUTION_CHANGED, /* /< Represent resoluion changed */
+ VDEC_DRV_MRESULT_NEED_MORE_OUTPUT_BUFFER, /* /< Represent need more output buffer */
+ VDEC_DRV_MRESULT_MAX = 0x0FFFFFFF /* /< Max Value */
+} VDEC_DRV_MRESULT_T;
+
+/**
+ * @par Enumeration
+ * VDEC_DRV_INPUTBUF_T
+ * @par Description
+ * Description the input buffer property
+ */
+
+typedef enum _VDEC_DRV_INPUTBUF_T {
+ VDEC_DRV_INPUT_BUF_INIT_CONFIG_DATA = (1 << 0), /*/ < init data, most case this is video header only*/
+ VDEC_DRV_INPUT_BUF_EOS = (1 << 1), /*/ < input buffer with EOS flag*/
+ VDEC_DRV_INPUT_BUF_INVALID_TIMESTAMP = (1 << 2), /*/ < input buffer with invalid timestamp flag*/
+} VDEC_DRV_INPUTBUF_T;
+
+/**
+ * @par Structure
+ * VDEC_DRV_RINGBUF_T
+ * @par Description
+ * Ring Buffer Structure
+ * - Store buffer base address
+ * - Store read/write pointer address
+ */
+typedef struct __VDEC_DRV_RINGBUF_T { // union extend 64bits for TEE
+ VAL_MEM_ADDR_T rBase; /* /< [IN] Base address of ring buffer */
+ union {
+ VAL_ULONG_T u4Read; /* /< [IN/OUT] Virtual address of read pointer */
+ VAL_UINT64_T u4Read_ext64;
+ };
+ union {
+ VAL_ULONG_T u4Write; /* /< [IN] Virtual address of write pointer */
+ VAL_UINT64_T u4Write_ext64;
+ };
+ VAL_UINT32_T u4Timestamp; /* /< [IN/OUT] store timestamp */
+ VAL_UINT32_T rSecMemHandle; /* /< [IN/OUT] security memory handle // MTK_SEC_VIDEO_PATH_SUPPORT */
+ VAL_UINT32_T u4InputFlag; /*/ < [IN] the property of input buffer */
+} VDEC_DRV_RINGBUF_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_RINGBUF_T
+ * @par Description
+ * Pointer of VDEC_DRV_RINGBUF_T
+ */
+typedef VDEC_DRV_RINGBUF_T * P_VDEC_DRV_RINGBUF_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_FRAMEBUF_T
+ * @par Description
+ * Frame buffer information
+ */
+typedef struct __VDEC_DRV_FRAMEBUF_T {
+ VAL_MEM_ADDR_T rBaseAddr; /* /< [IN/OUT] Base address */
+ VAL_MEM_ADDR_T rPostProcAddr; /* /< [IN/OUT] Post process address */
+ VAL_UINT32_T u4BufWidth; /* /< [IN/OUT] Buffer width */
+ VAL_UINT32_T u4BufHeight; /* /< [IN/OUT] Buffer height */
+ VAL_UINT32_T u4DispWidth; /* /< [OUT] Display width */
+ VAL_UINT32_T u4DispHeight; /* /< [OUT] Display width */
+ VAL_UINT32_T u4DispPitch; /* /< [OUT] Display pitch */
+ VAL_UINT32_T u4Timestamp; /* /< [IN/OUT] Timestamp for last decode picture */
+ VAL_UINT32_T u4AspectRatioW; /* /< [OUT] The horizontal size of the sample aspect ratio. */
+ VAL_UINT32_T u4AspectRatioH; /* /< [OUT] The vertical size of the sample aspect ratio. */
+ VAL_UINT32_T u4FrameBufferType; /* /< [OUT] One of VDEC_DRV_FBTYPE */
+ VAL_UINT32_T u4PictureStructure; /* /< [OUT] One of VDEC_DRV_PIC_STRUCT */
+ VAL_UINT32_T u4FrameBufferStatus; /* /< [OUT] One of VDEC_DRV_FBSTSTUS */
+ VAL_UINT32_T u4IsUFOEncoded; /* /< [OUT] FB Is UFO Encoded */
+ VAL_UINT32_T u4Reserved1; /* /< [IN/OUT] Reserved */
+ VAL_UINT32_T u4Reserved2; /* /< [IN/OUT] Reserved */
+ VAL_UINT32_T u4Reserved3; /* /< [IN/OUT] Reserved */
+
+ /* /< [IN/OUT] security memory handle // MTK_SEC_VIDEO_PATH_SUPPORT */
+ VAL_UINT32_T rSecMemHandle;
+ VAL_UINT32_T u4ReeVA; /* /< [IN/OUT] Ree Va // MTK_SEC_VIDEO_PATH_SUPPORT */
+
+ /* /< [IN/OUT] share handle of rBaseAddr.u4VA (for UT only) // MTK_SEC_VIDEO_PATH_SUPPORT */
+ VAL_UINT32_T rFrameBufVaShareHandle;
+} VDEC_DRV_FRAMEBUF_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_FRAMEBUF_T
+ * @par Description
+ * Pointer of VDEC_DRV_FRAMEBUF_T
+ */
+typedef VDEC_DRV_FRAMEBUF_T * P_VDEC_DRV_FRAMEBUF_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_CROPINFO_T
+ * @par Description
+ * Frame cropping information
+ */
+typedef struct __VDEC_DRV_CROPINFO_T {
+ VAL_UINT32_T u4CropLeft; /* /< Frame cropping left index */
+ VAL_UINT32_T u4CropRight; /* /< Frame cropping right index */
+ VAL_UINT32_T u4CropTop; /* /< Frame cropping top index */
+ VAL_UINT32_T u4CropBottom; /* /< Frame cropping bottom index */
+} VDEC_DRV_CROPINFO_T;
+
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_CROPINFO_T
+ * @par Description
+ * Pointer of VDEC_DRV_CROPINFO_T
+ */
+typedef VDEC_DRV_CROPINFO_T * P_VDEC_DRV_CROPINFO_T;
+
+/**
+ * @par Structure
+ * VDEC_DRV_PICINFO_T
+ * @par Description
+ * Picture information
+ */
+typedef struct __VDEC_DRV_PICINFO_T {
+ VAL_UINT32_T u4Width; /* /< [OUT] Frame width */
+ VAL_UINT32_T u4Height; /* /< [OUT] Frame height */
+ VAL_UINT32_T u4RealWidth; /* /< [OUT] Frame real width (allocate buffer size) */
+ VAL_UINT32_T u4RealHeight; /* /< [OUT] Frame real height (allocate buffer size) */
+ VAL_UINT32_T u4Timestamp; /* /< [OUT] Timestamp for last decode picture */
+ VAL_UINT32_T u4AspectRatioW; /* /< [OUT] The horizontal size of the sample aspect ratio */
+ VAL_UINT32_T u4AspectRatioH; /* /< [OUT] The vertical size of the sample aspect ratio */
+ VAL_UINT32_T u4FrameRate; /* /< [OUT] One of VDEC_DRV_FRAME_RATE */
+ VAL_UINT32_T u4PictureStructure; /* /< [OUT] One of VDEC_DRV_PIC_STRUCT */
+ VAL_UINT32_T u4IsProgressiveOnly; /* /< [OUT] 1: Progressive only. 0: Not progressive only. */
+ VAL_INT32_T u4BitDepthLuma; /* /< [OUT] Sequence luma bitdepth */
+ VAL_INT32_T u4BitDepthChroma; /* /< [OUT] Sequence chroma bitdepth */
+ VAL_BOOL_T bIsHorizontalScaninLSB; /* /< [OUT] Scan direction in 10bit LSB 2 bit */
+} VDEC_DRV_PICINFO_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_PICINFO_T
+ * @par Description
+ * Pointer of VDEC_DRV_PICINFO_T
+ */
+typedef VDEC_DRV_PICINFO_T * P_VDEC_DRV_PICINFO_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_SEQINFO_T
+ * @par Description
+ * Sequence information.
+ * - Including Width/Height
+ */
+typedef struct __VDEC_DRV_SEQINFO_T {
+ VAL_UINT32_T u4Width; /* /< [OUT] Sequence buffer width */
+ VAL_UINT32_T u4Height; /* /< [OUT] Sequence buffer height */
+ VAL_UINT32_T u4PicWidth; /* /< [OUT] Sequence display width */
+ VAL_UINT32_T u4PicHeight; /* /< [OUT] Sequence display height */
+ VAL_INT32_T i4AspectRatioWidth; /* /< [OUT] Sequence aspect ratio width */
+ VAL_INT32_T i4AspectRatioHeight; /* /< [OUT] Sequence aspect ratio height */
+ VAL_BOOL_T bIsThumbnail; /* /< [OUT] check thumbnail */
+ VAL_INT32_T u4BitDepthLuma; /* /< [OUT] Sequence luma bitdepth */
+ VAL_INT32_T u4BitDepthChroma; /* /< [OUT] Sequence chroma bitdepth */
+ VAL_BOOL_T bIsHorizontalScaninLSB; /* /< [OUT] Scan direction in 10bit LSB 2 bit */
+} VDEC_DRV_SEQINFO_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_SEQINFO_T
+ * @par Description
+ * Pointer of VDEC_DRV_SEQINFO_T
+ */
+typedef VDEC_DRV_SEQINFO_T * P_VDEC_DRV_SEQINFO_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_YUV_STRIDE_T
+ * @par Description
+ * Y/UV Stride information
+ */
+typedef struct __VDEC_DRV_YUV_STRIDE_T {
+ unsigned int u4YStride; /* /< [IN] Y Stride */
+ unsigned int u4UVStride; /* /< [IN] UV Stride */
+} VDEC_DRV_YUV_STRIDE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_YUV_STRIDE_T
+ * @par Description
+ * Pointer of VDEC_DRV_YUV_STRIDE_T
+ */
+typedef VDEC_DRV_YUV_STRIDE_T * P_VDEC_DRV_YUV_STRIDE_T;
+
+#define VDEC_DRV_CONCURRENCE_LIMIT_WFD 0x00000001
+#define VDEC_DRV_CONCURRENCE_LIMIT_MHL 0x00000002
+#define VDEC_DRV_CONCURRENCE_LIMIT_BLUETOOTH 0x00000004
+#define VDEC_DRV_CONCURRENCE_LIMIT_MASK 0x00000007
+/**
+ * @par Structure
+ * VDEC_DRV_QUERY_VIDEO_FORMAT_T
+ * @par Description
+ * Both input and output of type QUERY_VIDEO_FORMAT
+ */
+typedef struct __VDEC_DRV_QUERY_VIDEO_FORMAT_T {
+ VAL_UINT32_T u4VideoFormat; /* /< [OUT] VDEC_DRV_VIDEO_FORMAT */
+ VAL_UINT32_T u4Profile; /* /< [OUT] VDEC_DRV_VIDEO_PROFILE */
+ VAL_UINT32_T u4Level; /* /< [OUT] VDEC_DRV_VIDEO_LEVEL */
+ VAL_UINT32_T u4Resolution; /* /< [OUT] VDEC_DRV_RESOLUTION */
+ VAL_UINT32_T u4Width; /* /< [OUT] Frame Width */
+ VAL_UINT32_T u4Height; /* /< [OUT] Frame Height */
+ VAL_UINT32_T u4StrideAlign; /* /< [OUT] Frame Stride Alignment */
+ VAL_UINT32_T u4SliceHeightAlign; /* /< [OUT] Frame Slice Height Alignment */
+ VDEC_DRV_PIXEL_FORMAT_T ePixelFormat; /* /< [OUT] Frame Format */
+ VDEC_DRV_DECODER_TYPE_T eDecodeType; /* /< [OUT] Decoder type */
+ VAL_UINT32_T u4CompatibleFlag; /* /< [OUT] CompatibleFlag */
+} VDEC_DRV_QUERY_VIDEO_FORMAT_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_QUERY_VIDEO_FORMAT_T
+ * @par Description
+ * Pointer of VDEC_DRV_QUERY_VIDEO_FORMAT_T
+ */
+typedef VDEC_DRV_QUERY_VIDEO_FORMAT_T * P_VDEC_DRV_QUERY_VIDEO_FORMAT_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_SET_DECODE_MODE_T
+ * @par Description
+ * [Unused]Set Decode Mode
+ */
+typedef struct __VDEC_DRV_SET_DECODE_MODE_T {
+ VDEC_DRV_DECODE_MODE_T eDecodeMode; /* /< [IN/OUT] one of VDEC_DRV_DECODE_MODE */
+ VAL_UINT32_T u4DisplayFrameNum; /* /< [IN/OUT] 0 8 7 6 5 4 3 2 1 1 1 1 1 1 1 1 */
+ VAL_UINT32_T u4DropFrameNum; /* /< [IN/OUT] 0 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 */
+} VDEC_DRV_SET_DECODE_MODE_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_SET_DECODE_MODE_T
+ * @par Description
+ * Pointer of VDEC_DRV_SET_DECODE_MODE_T
+ */
+typedef VDEC_DRV_SET_DECODE_MODE_T * P_VDEC_DRV_SET_DECODE_MODE_T;
+
+
+/**
+ * @par Structure
+ * VDEC_DRV_PROPERTY_T
+ * @par Description
+ * VDecDrv property information
+ */
+typedef struct __VDEC_DRV_PROPERTY_T {
+ /* /< [OUT] buffer alignment requirement. */
+ VAL_UINT32_T u4BufAlign;
+
+ /* /< [OUT] buffer unit size is N bytes . (e.g., 8, 16, or 64 bytes per unit.) */
+ VAL_UINT32_T u4BufUnitSize;
+
+ /* /< [OUT] support post-process. */
+ VAL_BOOL_T fgPostprocessSupport;
+
+ /* /< [IN/OUT] Post process property */
+ struct {
+ VAL_UINT32_T fgOverlay:1;
+ VAL_UINT32_T fgRotate:1;
+ VAL_UINT32_T fgResize:1;
+ VAL_UINT32_T fgCrop:1;
+ } PostProcCapability;
+} VDEC_DRV_PROPERTY_T;
+
+/**
+ * @par Structure
+ * P_VDEC_DRV_PROPERTY_T
+ * @par Description
+ * Pointer of VDEC_DRV_PROPERTY_T
+ */
+typedef VDEC_DRV_PROPERTY_T * P_VDEC_DRV_PROPERTY_T;
+
+/**
+* @par Structure
+* VDEC_DRV_CALLBACK_T
+* @par Description
+* VDEC callback function
+*/
+typedef struct __VDEC_DRV_CALLBACK_T_ { // union extend 64bits for TEE
+ union {
+ VAL_HANDLE_T u4hHandle;
+ VAL_UINT64_T u4hHandle_ext64;
+ };
+ union {
+ VAL_UINT32_T (*pfnGetOutputBuffer)(VAL_HANDLE_T, P_VDEC_DRV_FRAMEBUF_T *, VAL_UINT32_T, VAL_BOOL_T, VAL_VOID_T *);
+ VAL_UINT64_T pfnGetOutputBuffer_ext64;
+ };
+} VDEC_DRV_CALLBACK_T;
+
+typedef VDEC_DRV_CALLBACK_T * P_VDEC_DRV_CALLBACK_T;
+
+
+/**
+ * @par Function:
+ * eVDecDrvQueryCapability
+ * @par Description:
+ * - Query Decode Driver Capability
+ * - Input argument will be compare with driver's capability to check if the query is successful or not.
+ * @param
+ * a_eType [IN] Driver query type, such as FBType, Video Format, etc.
+ * @param
+ * a_pvInParam [IN] Input parameter for each type of query.
+ * @param
+ * a_pvOutParam [OUT] Store query result, such as FBType, Video Format, etc.
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Query Success
+ * - VDEC_DRV_MRESULT_FAIL: Query Fail
+ */
+VDEC_DRV_MRESULT_T eVDecDrvQueryCapability(
+ VDEC_DRV_QUERY_TYPE_T a_eType,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+/**
+ * @par Function:
+ * eVDecDrvCreate
+ * @par Description:
+ * - Create handle
+ * - Allocate extra data for each driver
+ * - According to the input parameter, "a_eVideoFormat."
+ * @param
+ * a_phHandle [IN/OUT] Driver handle
+ * @param
+ * a_eVideoFormat [IN] Video format, such as MPEG4, H264, etc.
+ * @par Returns:
+ * Reason for return value. Show the default returned value at which condition.
+ * - VDEC_DRV_MRESULT_OK: Create handle successfully
+ * - VDEC_DRV_MRESULT_FAIL: Failed to create handle
+ */
+VDEC_DRV_MRESULT_T eVDecDrvCreate(VAL_HANDLE_T *a_phHandle, VDEC_DRV_VIDEO_FORMAT_T a_eVideoFormat);
+
+
+/**
+ * @par Function:
+ * eVDecDrvRelease
+ * @par Description:
+ * - Release Decode Driver
+ * - Need to perform driver deinit before driver release.
+ * - Procedure of release
+ * - Release extra data
+ * - Release handle
+ * @param
+ * a_hHandle [IN] Handle needed to be released.
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Release handle successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to release handle.
+ */
+VDEC_DRV_MRESULT_T eVDecDrvRelease(VAL_HANDLE_T a_hHandle);
+
+
+/**
+ * @par Function:
+ * eVDecDrvInit
+ * @par Description:
+ * - Initialize Decode Driver
+ * - Get width and height of bitstream
+ * @param
+ * a_hHandle [IN] Driver handle
+ * @param
+ * a_prBitstream [IN] Input bitstream for driver initialization
+ * @param
+ * a_prSeqinfo [OUT] Return width and height of bitstream
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Init driver successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to init driver.
+ */
+VDEC_DRV_MRESULT_T eVDecDrvInit(
+ VAL_HANDLE_T a_hHandle,
+ VDEC_DRV_RINGBUF_T *a_prBitstream,
+ VDEC_DRV_SEQINFO_T * a_prSeqinfo
+);
+
+
+/**
+ * @par Function:
+ * eVDecDrvDeInit
+ * @par Description:
+ * - Deinitialize driver
+ * - Have to deinit driver before release driver
+ * @param
+ * a_hHandle [IN] Driver handle
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Deinit driver successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to deinit driver.
+ */
+VDEC_DRV_MRESULT_T eVDecDrvDeInit(VAL_HANDLE_T a_hHandle);
+
+
+/**
+ * @par Function:
+ * eVDecDrvGetParam
+ * @par Description:
+ * - Get driver's parameter
+ * - Type of parameter can be referred to VDEC_DRV_GET_TYPE_T.
+ * @param
+ * a_hHandle [IN] Driver handle
+ * @param
+ * a_eType [IN] Parameter type
+ * @param
+ * a_pvInParam [OUT] Input argument for query parameter.
+ * @param
+ * a_pvOutParam [OUT] Store output parameter
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Get parameter successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to get parameter.
+ * - Fail reason might be
+ * - wrong or unsupported parameter type
+ * - fail to get reference memory pool size.
+ */
+VDEC_DRV_MRESULT_T eVDecDrvGetParam(
+ VAL_HANDLE_T a_hHandle,
+ VDEC_DRV_GET_TYPE_T a_eType,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+/**
+ * @par Function:
+ * eVDecDrvSetParam
+ * @par Description:
+ * - Set driver's parameters
+ * @param
+ * a_hHandle [IN] driver handle
+ * @param
+ * a_eType [IN] parameter type
+ * @param
+ * a_pvInParam [IN] input parameter
+ * @param
+ * a_pvOutParam [OUT] output parameter
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Get parameter successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to get parameter.
+ * - Fail reason might be
+ * - wrong or unsupported parameter type
+ * - fail to set parameter
+ */
+VDEC_DRV_MRESULT_T eVDecDrvSetParam(
+ VAL_HANDLE_T a_hHandle,
+ VDEC_DRV_SET_TYPE_T a_eType,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+/**
+ * @par Function:
+ * eVDecDrvDecode
+ * @par Description:
+ * - Trigger Decode
+ * - Need to Provide frame buffer to store unused buffer
+ * - The procedure of decode including:
+ * - Header parsing
+ * - trigger hw decode
+ * - While we want to decode the last frame,
+ * we need to set input bitstream as VAL_NULL and still give free frame buffer.
+ * @param
+ * a_hHandle [IN] driver handle
+ * @param
+ * a_prBitstream [IN] input bitstream
+ * @param
+ * a_prFramebuf [IN] free frame buffer
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Decode successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to decode.
+ */
+VDEC_DRV_MRESULT_T eVDecDrvDecode(
+ VAL_HANDLE_T a_hHandle,
+ VDEC_DRV_RINGBUF_T *a_prBitstream,
+ VDEC_DRV_FRAMEBUF_T * a_prFramebuf
+);
+
+/**
+ * @par Function:
+ * eVDecDrvDecodeEx
+ * @par Description:
+ * - Trigger Decode
+ * - Need to Provide frame buffer to store unused buffer
+ * - The procedure of decode including:
+ * - Header parsing
+ * - trigger hw decode
+ * - While we want to decode the last frame,
+ * we need to set input bitstream as VAL_NULL and still give free frame buffer.
+ * @param
+ * a_hHandle [IN] driver handle
+ * @param
+ * a_prBitstream [IN] input bitstream
+ * @par Returns:
+ * - VDEC_DRV_MRESULT_OK: Decode successfully.
+ * - VDEC_DRV_MRESULT_FAIL: Failed to decode.
+ */
+VDEC_DRV_MRESULT_T eVDecDrvDecodeEx(
+ VAL_HANDLE_T a_hHandle,
+ VDEC_DRV_RINGBUF_T *a_prBitstream,
+ VAL_UINT32_T u4Flag,
+ VAL_VOID_T * pExtra
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VDEC_DRV_IF_PUBLIC_H_ */
diff --git a/kernel-headers/venc_drv_base.h b/kernel-headers/venc_drv_base.h
new file mode 100644
index 0000000..ff02e7b
--- /dev/null
+++ b/kernel-headers/venc_drv_base.h
@@ -0,0 +1,102 @@
+#include "venc_drv_if_private.h"
+#include "vcodec_if_v2.h"
+
+#include <sys/time.h>
+
+#ifndef _VENC_DRV_BASE_
+#define _VENC_DRV_BASE_
+
+#define DO_VCODEC_RESET(cmd, index) \
+ { \
+ }
+
+typedef enum __VDDRV_MRESULT_T {
+ VDDRV_MRESULT_SUCCESS = VAL_TRUE, /* /< Represent success */
+ VDDRV_MRESULT_FAIL = VAL_FALSE /* /< Represent failure */
+} VDDRV_MRESULT_T;
+
+typedef struct __VENC_DRV_BASE_T {
+ VAL_UINT32_T(*Init)(
+ VAL_HANDLE_T * handle,
+ VAL_HANDLE_T halhandle,
+ VAL_HANDLE_T valhandle
+ );
+ VAL_UINT32_T(*Encode)(
+ VAL_HANDLE_T handle,
+ VENC_DRV_START_OPT_T eOpt,
+ P_VENC_DRV_PARAM_FRM_BUF_T pFrameBuf,
+ P_VENC_DRV_PARAM_BS_BUF_T pBitstreamBuf,
+ VENC_DRV_DONE_RESULT_T * pResult
+ );
+ VAL_UINT32_T(*GetParam)(
+ VAL_HANDLE_T handle,
+ VENC_DRV_GET_TYPE_T a_eType,
+ VAL_VOID_T * a_pvInParam,
+ VAL_VOID_T * a_pvOutParam
+ );
+ VAL_UINT32_T(*SetParam)(
+ VAL_HANDLE_T handle,
+ VENC_DRV_SET_TYPE_T a_eType,
+ VAL_VOID_T * a_pvInParam,
+ VAL_VOID_T * a_pvOutParam
+ );
+ VAL_UINT32_T(*DeInit)(
+ VAL_HANDLE_T handle
+ ); /* /< Function to do driver de-initialization */
+} VENC_DRV_BASE_T;
+
+/**
+ * @par Structure
+ * mhalVdoDrv_t
+ * @par Description
+ * This is a structure which store common video enc driver information
+ */
+typedef struct mhalVdoDrv_s {
+ VAL_VOID_T *prCodecHandle;
+ VAL_UINT32_T u4EncodedFrameCount;
+ VCODEC_ENC_CALLBACK_T rCodecCb;
+ VIDEO_ENC_API_T *prCodecAPI;
+ VENC_BS_T pBSBUF;
+
+ VCODEC_ENC_BUFFER_INFO_T EncoderInputParamNC;
+ VENC_DRV_PARAM_BS_BUF_T BSout;
+ VENC_HYBRID_ENCSETTING rVencSetting;
+ VAL_UINT8_T *ptr;
+} mhalVdoDrv_t;
+
+
+typedef struct __VENC_HYBRID_HANDLE_T {
+ mhalVdoDrv_t rMhalVdoDrv;
+ VAL_MEMORY_T rBSDrvWorkingMem;
+ VAL_UINT32_T nOmxTids;
+ VAL_VCODEC_THREAD_ID_T rThreadID;
+ VIDEO_ENC_WRAP_HANDLE_T hWrapper;
+ VAL_VOID_T *pDrvModule; /* /< used for dlopen and dlclose */
+} VENC_HYBRID_HANDLE_T;
+
+
+typedef struct __VENC_HANDLE_T {
+ VENC_DRV_VIDEO_FORMAT_T CodecFormat;
+ VENC_DRV_BASE_T rFuncPtr; /* /< Point to driver's proprietary function. */
+ VAL_HANDLE_T hDrvHandle; /* /< Handle of each format driver */
+ VAL_HANDLE_T hHalHandle; /* /< HAL handle */
+ VAL_HANDLE_T hValHandle; /* /< VAL handle */
+ VAL_MEMORY_T rHandleMem; /* /< Memory for venc handle */
+ VAL_VOID_T *prExtraData; /* /< Driver private data pointer. */
+ VAL_MEMORY_T rExtraDataMem; /* /< Save extra data memory information to be used in release. */
+ VENC_HYBRID_HANDLE_T rHybridHandle; /* /< Hybrid handle */
+ FILE *pfDump;
+ VAL_UINT32_T u4ShowInfo; /* /< Flag for show FPS and BitRate */
+ VAL_UINT32_T u4FPS; /* /< FPS */
+ VAL_UINT32_T u4Bitrate; /* /< Bitrate */
+ struct timeval tStart; /* /< Start time counting FPS and bitrate */
+ VENC_DRV_SCENARIO_T eScenario; /* /< VENC Senario */
+ VAL_INT32_T nPerfServiceHandle; /* /< Used by performace service */
+ VAL_UINT32_T u4RecFrmWidth; /* /< Recoded frame width, (may not 16 byte-align) */
+ VAL_UINT32_T u4RecFrmHeight; /* /< Recoded frame height, (may not 16 byte-align) */
+} VENC_HANDLE_T;
+
+VENC_DRV_MRESULT_T ParseConfig(const char *cfgFileName, const char *ParameterItem, VAL_UINT32_T *val);
+
+
+#endif
diff --git a/kernel-headers/venc_drv_if_dep.h b/kernel-headers/venc_drv_if_dep.h
new file mode 100644
index 0000000..a3976b6
--- /dev/null
+++ b/kernel-headers/venc_drv_if_dep.h
@@ -0,0 +1,75 @@
+#ifndef VENC_DRV_IF_DEP_H
+#define VENC_DRV_IF_DEP_H
+
+/*=============================================================================
+ * Include Files
+ *===========================================================================*/
+
+#include "val_types_private.h"
+#include "vcodec_if_v2.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*=============================================================================
+ * Type definition
+ *===========================================================================*/
+
+/**
+ * @par Structure
+ * mhalVdoDrv_t
+ * @par Description
+ * This is a structure which store common video enc driver information
+ */
+typedef struct mhalVdoDrv_s {
+ VAL_VOID_T *prCodecHandle;
+ VAL_UINT32_T u4EncodedFrameCount;
+ VCODEC_ENC_CALLBACK_T rCodecCb;
+ VIDEO_ENC_API_T *prCodecAPI;
+ VENC_BS_T pBSBUF;
+
+ VCODEC_ENC_BUFFER_INFO_T EncoderInputParamNC;
+ VENC_DRV_PARAM_BS_BUF_T BSout;
+ VENC_HYBRID_ENCSETTING rVencSetting;
+ VAL_UINT8_T *ptr;
+} mhalVdoDrv_t;
+
+typedef struct __VENC_HANDLE_T {
+ VAL_HANDLE_T hHalHandle; /* /< HAL data. */
+ VAL_HANDLE_T vdriver_Handle; /* /< for MMSYS power on/off */
+ VAL_MEMORY_T rHandleMem; /* /< Save handle memory information to be used in release. */
+ VAL_BOOL_T bFirstDecoded; /* / < already pass first video data to codec */
+ VAL_BOOL_T bHeaderPassed; /* / < already pass video header to codec */
+ VAL_BOOL_T bFlushAll;
+ VAL_MEMORY_T HeaderBuf;
+ VAL_HANDLE_T hCodec;
+ /* DRIVER_HANDLER_T hDrv; */
+ VAL_UINT32_T CustomSetting;
+ VCODEC_MEMORY_TYPE_T rVideoDecMemType;
+ VAL_UINT32_T nYUVBufferIndex;
+ VCODEC_OPEN_SETTING_T codecOpenSetting;
+
+ mhalVdoDrv_t rMhalVdoDrv;
+ VAL_MEMORY_T bs_driver_workingmem;
+
+ /* Morris Yang 20110411 [ */
+ VENC_DRV_VIDEO_FORMAT_T CodecFormat;
+ VAL_VOID_T *prExtraData; /* /< Driver private data pointer. */
+ VAL_MEMORY_T rExtraDataMem; /* /< Save extra data memory information to be used in release. */
+ /* ] */
+ VAL_UINT32_T nOmxTids;
+#if 1 /* defined(MT6572) //VCODEC_MULTI_THREAD */
+ /* Jackal Chen [ */
+ VAL_VOID_T *pDrvModule; /* /< used for dlopen and dlclose */
+ /* ] */
+#endif
+ VIDEO_ENC_WRAP_HANDLE_T hWrapper;
+} VENC_HANDLE_T;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VENC_DRV_IF_DEP_H */
diff --git a/kernel-headers/venc_drv_if_private.h b/kernel-headers/venc_drv_if_private.h
new file mode 100644
index 0000000..4cff833
--- /dev/null
+++ b/kernel-headers/venc_drv_if_private.h
@@ -0,0 +1,129 @@
+#ifndef _VENC_DRV_IF_PRIVATE_H_
+#define _VENC_DRV_IF_PRIVATE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_private.h"
+#include "venc_drv_if_public.h"
+
+
+typedef enum __VENC_DRV_COLOR_FORMAT_T {
+ VENC_DRV_COLOR_FORMAT_YUV420,
+ VENC_DRV_COLOR_FORMAT_YV12,
+}
+VENC_DRV_COLOR_FORMAT_T;
+
+
+typedef struct __VENC_DRV_YUV_STRIDE_T {
+ unsigned int u4YStride;
+ unsigned int u4UVStride;
+} VENC_DRV_YUV_STRIDE_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_PARAM_EIS_T
+ * @par Description
+ * This is the EIS information and used as input or output parameter for\n
+ * eVEncDrvSetParam() or eVEncDrvGetParam()\n
+ */
+typedef struct __VENC_DRV_PARAM_EIS_T {
+ VAL_BOOL_T fgEISEnable; /* /<: EIS Enable/disable. */
+ VAL_UINT32_T u4EISFrameWidth; /* /<: EIS FrameWidth */
+ VAL_UINT32_T u4EISFrameHeight; /* /<: EIS FrameHeight */
+ VAL_UINT32_T u4GMV_X; /* /<: Golbal Motion Vector (GMV) of the VOP Frame used for EIS */
+ VAL_UINT32_T u4GMV_Y; /* /<: Golbal Motion Vector (GMV) of the VOP Frame used for EIS */
+} VENC_DRV_PARAM_EIS_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_PARAM_EIS_T
+ * @par Description
+ * This is the pointer of VENC_DRV_PARAM_EIS_T
+ */
+typedef VENC_DRV_PARAM_EIS_T * P_VENC_DRV_PARAM_EIS_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_STATISTIC_T
+ * @par Description
+ * This is statistic information and used as output parameter for\n
+ * eVEncDrvGetParam()\n
+ */
+typedef struct __VENC_DRV_STATISTIC_T {
+ VAL_UINT32_T u4EncTimeMax; /* /<: Encode one frame time. Max */
+ VAL_UINT32_T u4EncTimeMin; /* /<: Encode one frame time. Min */
+ VAL_UINT32_T u4EncTimeAvg; /* /<: Encode one frame time. Average */
+ VAL_UINT32_T u4EncTimeSum; /* /<: Encode one frame time. Sum */
+} VENC_DRV_STATISTIC_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_STATISTIC_T
+ * @par Description
+ * This is the pointer of VENC_DRV_STATISTIC_T
+ */
+typedef VENC_DRV_STATISTIC_T * P_VENC_DRV_STATISTIC_T;
+
+
+typedef struct __VENC_HYB_ENCSETTING {
+
+ /* used in SetParameter */
+ VAL_UINT32_T u4Width;
+ VAL_UINT32_T u4Height;
+ VAL_UINT32_T u4IntraVOPRate; /* u4NumPFrm; */
+ VAL_UINT32_T eFrameRate;
+ VAL_UINT32_T u4VEncBitrate;
+ VAL_UINT32_T u4QualityLevel;
+ VAL_UINT32_T u4ShortHeaderMode;
+ VAL_UINT32_T u4CodecType; /* mepg4, h263, h264... */
+ VAL_UINT32_T u4RotateAngle;
+
+ /* used in QueryFunctions */
+ VENC_DRV_COLOR_FORMAT_T eVEncFormat; /* YUV420, I420 ..... */
+ VENC_DRV_YUV_STRIDE_T rVCodecYUVStride;
+ VAL_UINT32_T u4Profile;
+ VAL_UINT32_T u4Level;
+ VAL_UINT32_T u4BufWidth;
+ VAL_UINT32_T u4BufHeight;
+ VAL_UINT32_T u4NumBFrm;
+ VAL_UINT32_T fgInterlace;
+
+ /* used in Query */
+ VAL_UINT32_T u4InitQ;
+ VAL_UINT32_T u4MinQ;
+ VAL_UINT32_T u4MaxQ;
+ VAL_UINT32_T u4Algorithm;
+ VAL_UINT32_T u4_Rate_Hard_Limit;
+ VAL_UINT32_T u4RateBalance;
+ VAL_UINT32_T u4ForceIntraEnable;
+ VAL_UINT32_T u4VEncMinBitrate; /* Min bit-rate */
+
+ /* hardware dependent function settings */
+ VAL_BOOL_T fgUseMCI;
+ VAL_UINT32_T u4VEncThreadNum;
+ VAL_UINT32_T u4LivePhoto;
+} VENC_HYBRID_ENCSETTING;
+
+
+typedef struct VENC_BS_s {
+ VAL_UINT8_T *u4BS_addr;
+ VAL_UINT8_T *u4BS_addr_PA;
+ VAL_UINT32_T u4BSSize;
+ VAL_UINT32_T u4BS_frmSize;
+ VAL_UINT32_T u4BS_frmCount;
+ VAL_UINT32_T u4BS_index;
+ VAL_UINT32_T u4BS_preindex;
+ VAL_UINT32_T u4Fillcnt;
+ VAL_UINT32_T Handle;
+} VENC_BS_T;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VENC_DRV_IF_PRIVATE_H_ */
diff --git a/kernel-headers/venc_drv_if_public.h b/kernel-headers/venc_drv_if_public.h
new file mode 100644
index 0000000..7035dde
--- /dev/null
+++ b/kernel-headers/venc_drv_if_public.h
@@ -0,0 +1,861 @@
+#ifndef _VENC_DRV_IF_PUBLIC_H_
+#define _VENC_DRV_IF_PUBLIC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "val_types_public.h"
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_QUERY_TYPE_T
+ * @par Description
+ * This is the item used for query driver
+ */
+typedef enum __VENC_DRV_QUERY_TYPE_T {
+ VENC_DRV_QUERY_TYPE_NONE, /* /< Default value (not used) */
+ VENC_DRV_QUERY_TYPE_VIDEO_FORMAT, /* /< Query the driver capability */
+ VENC_DRV_QUERY_TYPE_VIDEO_PROPERTY, /* /< Query the video property */
+ VENC_DRV_QUERY_TYPE_VIDEO_PROPERTY_LIST, /* /< Query the video property list */
+ VENC_DRV_QUERY_TYPE_PROPERTY, /* /< Get the driver property */
+ VENC_DRV_QUERY_TYPE_MCI_SUPPORTED, /* /< Query if the codec support MCI */
+ VENC_DRV_QUERY_TYPE_CHIP_NAME, /* /< Query chip name */
+ VENC_DRV_QUERY_TYPE_INPUT_BUF_LIMIT, /* /< Query input buffer stride and sliceheight */
+ VENC_DRV_QUERY_TYPE_NORMAL_PRIO, /* /< Query if recorder scenario adjust to normal priority, for 6571. */
+ VENC_DRV_QUERY_TYPE_VIDEO_CAMCORDER_CAP, /* /< Query spec. for MediaProfile */
+ VENC_DRV_QUERY_TYPE_CHIP_VARIANT, /* /< Query chip variant */
+ VENC_DRV_QUERY_TYPE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_QUERY_TYPE_T value */
+}
+VENC_DRV_QUERY_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_YUV_FORMAT_T
+ * @par Description
+ * This is the item used for input YUV buffer format
+ */
+typedef enum __VENC_DRV_YUV_FORMAT_T {
+ VENC_DRV_YUV_FORMAT_NONE, /* /< Default value (not used) */
+ VENC_DRV_YUV_FORMAT_GRAY, /* /< GRAY YUV format */
+ VENC_DRV_YUV_FORMAT_422, /* /< 422 YUV format */
+ VENC_DRV_YUV_FORMAT_420, /* /< 420 YUV format */
+ VENC_DRV_YUV_FORMAT_411, /* /< 411 YUV format */
+ VENC_DRV_YUV_FORMAT_YV12, /* /< Android YV12 (16/16/16) YUV format */
+ VENC_DRV_YUV_FORMAT_NV12, /* /< NV12 YUV format */
+ VENC_DRV_YUV_FORMAT_NV21, /* /< NV21 YUV format */
+ VENC_DRV_YUV_FORMAT_BLK16X32, /* /< Block 16x32 YUV format */
+ VENC_DRV_YUV_FORMAT_BLK64X32, /* /< Block 64x32 YUV format */
+ VENC_DRV_YUV_FORMAT_YV12_1688, /* /< YV12 YUV format */
+ VENC_DRV_YUV_FORMAT_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_YUV_FORMAT_T value */
+} VENC_DRV_YUV_FORMAT_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_VIDEO_FORMAT_T
+ * @par Description
+ * This is the item used for encode video format
+ */
+typedef enum __VENC_DRV_VIDEO_FORMAT_T {
+ VENC_DRV_VIDEO_FORMAT_NONE, /* /< Default value (not used) */
+ VENC_DRV_VIDEO_FORMAT_MPEG4, /* /< MPEG4 video format */
+ VENC_DRV_VIDEO_FORMAT_MPEG4_1080P, /* /< MPEG4 video format for 1080p */
+ VENC_DRV_VIDEO_FORMAT_MPEG4_SHORT, /* /< MPEG4_SHORT (H.263 baseline profile) video format */
+ VENC_DRV_VIDEO_FORMAT_H263, /* /< H.263 video format */
+ VENC_DRV_VIDEO_FORMAT_H264, /* /< H.264 video format */
+ VENC_DRV_VIDEO_FORMAT_H264_VGA, /* /< H.264 video format for VGA */
+ VENC_DRV_VIDEO_FORMAT_WMV9, /* /< WMV9 video format */
+ VENC_DRV_VIDEO_FORMAT_VC1, /* /< VC1 video format */
+ VENC_DRV_VIDEO_FORMAT_VP8, /* /< VP8 video format */
+ VENC_DRV_VIDEO_FORMAT_JPEG, /* /< JPEG picture format */
+ VENC_DRV_VIDEO_FORMAT_HEVC, /* /< HEVC video format */
+ VENC_DRV_VIDEO_FORMAT_H264SEC, /* /<: Secure H.264 */
+ VENC_DRV_VIDEO_FORMAT_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_VIDEO_FORMAT_T value */
+} VENC_DRV_VIDEO_FORMAT_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_FRAME_RATE_T
+ * @par Description
+ * This is the item used for encode frame rate
+ */
+typedef enum __VENC_DRV_FRAME_RATE_T {
+ VENC_DRV_FRAME_RATE_NONE = 0, /* /< Default value (not used) */
+ VENC_DRV_FRAME_RATE_7_5 = 75, /* /< 7.5 */
+ VENC_DRV_FRAME_RATE_10 = 10, /* /< 10 */
+ VENC_DRV_FRAME_RATE_15 = 15, /* /< 15 */
+ VENC_DRV_FRAME_RATE_20 = 20, /* /< 20 */
+ VENC_DRV_FRAME_RATE_24 = 24, /* /< 24 */
+ VENC_DRV_FRAME_RATE_25 = 25, /* /< 25 */
+ VENC_DRV_FRAME_RATE_29_97 = 2997, /* /< 29.97 */
+ VENC_DRV_FRAME_RATE_30 = 30, /* /< 30 */
+ VENC_DRV_FRAME_RATE_60 = 60, /* /< 60 */
+ VENC_DRV_FRAME_RATE_120 = 120, /* /< 120 */
+ VENC_DRV_FRAME_RATE_180 = 180, /* /< 180 */
+ VENC_DRV_FRAME_RATE_240 = 240, /* /< 240 */
+ VENC_DRV_FRAME_RATE_480 = 480, /* /< 480 */
+ VENC_DRV_FRAME_RATE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_FRAME_RATE_T value */
+} VENC_DRV_FRAME_RATE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_START_OPT_T
+ * @par Description
+ * This is the item used for encode frame type
+ */
+typedef enum __VENC_DRV_START_OPT_T {
+ VENC_DRV_START_OPT_NONE, /* /< Default value (not used) */
+ VENC_DRV_START_OPT_ENCODE_SEQUENCE_HEADER, /* /< Encode a Sequence header */
+ VENC_DRV_START_OPT_ENCODE_SEQUENCE_HEADER_H264_SPS, /* /< Encode a Sequence header H264 SPS */
+ VENC_DRV_START_OPT_ENCODE_SEQUENCE_HEADER_H264_PPS, /* /< Encode a Sequence header H264 PPS */
+ VENC_DRV_START_OPT_ENCODE_FRAME, /* /< Encode a frame */
+ VENC_DRV_START_OPT_ENCODE_KEY_FRAME, /* /< Encode a key frame */
+ VENC_DRV_START_OPT_ENCODE_FINAL, /* /< Final encode (Only use to encode final frame) */
+ VENC_DRV_START_OPT_ENCODE_DUMMY_NAL, /* /< Encode a dummy NAL for WFD */
+ VENC_DRV_START_OPT_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_START_OPT_T value */
+} VENC_DRV_START_OPT_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_MESSAGE_T
+ * @par Description
+ * This is the item used for encode frame status
+ */
+typedef enum __VENC_DRV_MESSAGE_T {
+ VENC_DRV_MESSAGE_NONE, /* /< Default value (not used) */
+ VENC_DRV_MESSAGE_OK, /* /< Encode ok */
+ VENC_DRV_MESSAGE_ERR, /* /< Encode error */
+ VENC_DRV_MESSAGE_TIMEOUT, /* /< Encode timeout */
+ VENC_DRV_MESSAGE_PARTIAL, /* /< Encode partial frame (ok means EOF) */
+ VENC_DRV_MESSAGE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_MESSAGE_T value */
+} VENC_DRV_MESSAGE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_H264_VIDEO_PROFILE_T
+ * @par Description
+ * This is the item used for h.264 encoder profile capability
+ */
+typedef enum __VENC_DRV_H264_VIDEO_PROFILE_T {
+ VENC_DRV_H264_VIDEO_PROFILE_UNKNOWN = 0, /* /< Default value (not used) */
+ VENC_DRV_H264_VIDEO_PROFILE_BASELINE = (1 << 0), /* /< Baseline */
+ VENC_DRV_H264_VIDEO_PROFILE_CONSTRAINED_BASELINE = (1 << 1), /* /< Constrained Baseline */
+ VENC_DRV_H264_VIDEO_PROFILE_MAIN = (1 << 2), /* /< Main */
+ VENC_DRV_H264_VIDEO_PROFILE_EXTENDED = (1 << 3), /* /< Extended */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH = (1 << 4), /* /< High */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH_10 = (1 << 5), /* /< High 10 */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH422 = (1 << 6), /* /< High 422 */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH444 = (1 << 7), /* /< High 444 */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH_10_INTRA = (1 << 8), /* /< High 10 Intra (Amendment 2) */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH422_INTRA = (1 << 9), /* /< High 422 Intra (Amendment 2) */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH444_INTRA = (1 << 10), /* /< High 444 Intra (Amendment 2) */
+ VENC_DRV_H264_VIDEO_PROFILE_CAVLC444_INTRA = (1 << 11), /* /< CAVLC 444 Intra (Amendment 2) */
+ VENC_DRV_H264_VIDEO_PROFILE_HIGH444_PREDICTIVE = (1 << 12), /* /< High 444 Predictive (Amendment 2) */
+ VENC_DRV_H264_VIDEO_PROFILE_SCALABLE_BASELINE = (1 << 13), /* /< Scalable Baseline (Amendment 3) */
+ VENC_DRV_H264_VIDEO_PROFILE_SCALABLE_HIGH = (1 << 14), /* /< Scalable High (Amendment 3) */
+ VENC_DRV_H264_VIDEO_PROFILE_SCALABLE_HIGH_INTRA = (1 << 15), /* /< Scalable High Intra (Amendment 3) */
+ VENC_DRV_H264_VIDEO_PROFILE_MULTIVIEW_HIGH = (1 << 16), /* /< Multiview High (Corrigendum 1 (2009)) */
+ VENC_DRV_H264_VIDEO_PROFILE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_H264_VIDEO_PROFILE_T value */
+} VENC_DRV_H264_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_HEVC_VIDEO_PROFILE_T
+ * @par Description
+ * This is the item used for hevc encoder profile capability
+ */
+typedef enum __VENC_DRV_HEVC_VIDEO_PROFILE_T {
+ VENC_DRV_HEVC_VIDEO_PROFILE_UNKNOWN = 0, /* /< Default value (not used) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_BASELINE = (1 << 0), /* /< Baseline */
+ VENC_DRV_HEVC_VIDEO_PROFILE_CONSTRAINED_BASELINE = (1 << 1), /* /< Constrained Baseline */
+ VENC_DRV_HEVC_VIDEO_PROFILE_MAIN = (1 << 2), /* /< Main */
+ VENC_DRV_HEVC_VIDEO_PROFILE_EXTENDED = (1 << 3), /* /< Extended */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH = (1 << 4), /* /< High */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH_10 = (1 << 5), /* /< High 10 */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH422 = (1 << 6), /* /< High 422 */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH444 = (1 << 7), /* /< High 444 */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH_10_INTRA = (1 << 8), /* /< High 10 Intra (Amendment 2) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH422_INTRA = (1 << 9), /* /< High 422 Intra (Amendment 2) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH444_INTRA = (1 << 10), /* /< High 444 Intra (Amendment 2) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_CAVLC444_INTRA = (1 << 11), /* /< CAVLC 444 Intra (Amendment 2) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_HIGH444_PREDICTIVE = (1 << 12), /* /< High 444 Predictive (Amendment 2) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_SCALABLE_BASELINE = (1 << 13), /* /< Scalable Baseline (Amendment 3) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_SCALABLE_HIGH = (1 << 14), /* /< Scalable High (Amendment 3) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_SCALABLE_HIGH_INTRA = (1 << 15), /* /< Scalable High Intra (Amendment 3) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_MULTIVIEW_HIGH = (1 << 16), /* /< Multiview High (Corrigendum 1 (2009)) */
+ VENC_DRV_HEVC_VIDEO_PROFILE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_HEVC_VIDEO_PROFILE_T value */
+} VENC_DRV_HEVC_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_MPEG_VIDEO_PROFILE_T
+ * @par Description
+ * This is the item used for h.263, mpeg2, mpeg4 encoder profile capability
+ */
+typedef enum __VENC_DRV_MPEG_VIDEO_PROFILE_T {
+ VENC_DRV_MPEG_VIDEO_PROFILE_UNKNOWN = 0, /* /< Default value (not used) */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_0 = (1 << 0), /* /< H.263 0 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_1 = (1 << 1), /* /< H.263 1 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_2 = (1 << 2), /* /< H.263 2 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_3 = (1 << 3), /* /< H.263 3 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_4 = (1 << 4), /* /< H.263 4 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_5 = (1 << 5), /* /< H.263 5 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_6 = (1 << 6), /* /< H.263 6 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_7 = (1 << 7), /* /< H.263 7 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_H263_8 = (1 << 8), /* /< H.263 8 */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SIMPLE = (1 << 9), /* /< MPEG2 Simple */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_MAIN = (1 << 10), /* /< MPEG2 Main */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SNR = (1 << 11), /* /< MPEG2 SNR */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SPATIAL = (1 << 12), /* /< MPEG2 Spatial */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_HIGH = (1 << 13), /* /< MPEG2 High */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG4_SIMPLE = (1 << 14), /* /< MPEG4 Simple */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE = (1 << 15), /* /< MPEG4 Advanced Simple */
+ VENC_DRV_MPEG_VIDEO_PROFILE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_MPEG_VIDEO_PROFILE_T value */
+} VENC_DRV_MPEG_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_MS_VIDEO_PROFILE_T
+ * @par Description
+ * This is the item used for MS encoder profile capability
+ */
+typedef enum __VENC_DRV_MS_VIDEO_PROFILE_T {
+ VENC_DRV_MS_VIDEO_PROFILE_UNKNOWN = 0, /* /< Default value (not used) */
+ VENC_DRV_MS_VIDEO_PROFILE_VC1_SIMPLE = (1 << 0), /* /< VC1 Simple */
+ VENC_DRV_MS_VIDEO_PROFILE_VC1_MAIN = (1 << 1), /* /< VC1 Main */
+ VENC_DRV_MS_VIDEO_PROFILE_VC1_ADVANCED = (1 << 2), /* /< VC1 Advanced */
+ VENC_DRV_MS_VIDEO_PROFILE_WMV9_SIMPLE = (1 << 3), /* /< WMV9 Simple */
+ VENC_DRV_MS_VIDEO_PROFILE_WMV9_MAIN = (1 << 4), /* /< WMV9 Main */
+ VENC_DRV_MS_VIDEO_PROFILE_WMV9_COMPLEX = (1 << 5), /* /< WMV9 Complex */
+ VENC_DRV_MS_VIDEO_PROFILE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_MS_VIDEO_PROFILE_T value */
+} VENC_DRV_MS_VIDEO_PROFILE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_VIDEO_LEVEL_T
+ * @par Description
+ * This is the item used for encoder level capability
+ */
+typedef enum __VENC_DRV_VIDEO_LEVEL_T {
+ VENC_DRV_VIDEO_LEVEL_UNKNOWN = 0, /* /< Default value (not used) */
+ VENC_DRV_VIDEO_LEVEL_0, /* /< VC1 */
+ VENC_DRV_VIDEO_LEVEL_1, /* /< H264, HEVC, VC1, MPEG4 */
+ VENC_DRV_VIDEO_LEVEL_1b, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_1_1, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_1_2, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_1_3, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_2, /* /< H264, HEVC, VC1, MPEG4 */
+ VENC_DRV_VIDEO_LEVEL_2_1, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_2_2, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_3, /* /< H264, HEVC, VC1, MPEG4 */
+ VENC_DRV_VIDEO_LEVEL_3_1, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_3_2, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_4, /* /< H264, HEVC, VC1 */
+ VENC_DRV_VIDEO_LEVEL_4_1, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_4_2, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_5, /* /< H264, HEVC, HEVC */
+ VENC_DRV_VIDEO_LEVEL_5_1, /* /< H264, HEVC */
+ VENC_DRV_VIDEO_LEVEL_LOW, /* /< VC1, MPEG2 */
+ VENC_DRV_VIDEO_LEVEL_MEDIUM, /* /< VC1, MPEG2 */
+ VENC_DRV_VIDEO_LEVEL_HIGH1440, /* /< MPEG2 */
+ VENC_DRV_VIDEO_LEVEL_HIGH, /* /< VC1, MPEG2 */
+ VENC_DRV_VIDEO_LEVEL_6, /* /< H263 */
+ VENC_DRV_VIDEO_LEVEL_7, /* /< H263 */
+ VENC_DRV_VIDEO_LEVEL_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_VIDEO_LEVEL_T value */
+} VENC_DRV_VIDEO_LEVEL_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_RESOLUTION_T
+ * @par Description
+ * This is the item used for encoder resolution capability
+ */
+typedef enum __VENC_DRV_RESOLUTION_T {
+ VENC_DRV_RESOLUTION_UNKNOWN = 0, /* /< Default value (not used) */
+ VENC_DRV_RESOLUTION_SUPPORT_QCIF, /* /< CIF */
+ VENC_DRV_RESOLUTION_SUPPORT_QVGA, /* /< QVGA */
+ VENC_DRV_RESOLUTION_SUPPORT_CIF, /* /< QCIF */
+ VENC_DRV_RESOLUTION_SUPPORT_HVGA, /* /< HVGA: 480x320 */
+ VENC_DRV_RESOLUTION_SUPPORT_VGA, /* /< VGA: 640x480 */
+ VENC_DRV_RESOLUTION_SUPPORT_480I, /* /< 480I */
+ VENC_DRV_RESOLUTION_SUPPORT_480P, /* /< 480P */
+ VENC_DRV_RESOLUTION_SUPPORT_576I, /* /< 576I */
+ VENC_DRV_RESOLUTION_SUPPORT_576P, /* /< 480P */
+ VENC_DRV_RESOLUTION_SUPPORT_FWVGA, /* /< FWVGA: 864x480 */
+ VENC_DRV_RESOLUTION_SUPPORT_720I, /* /< 720I */
+ VENC_DRV_RESOLUTION_SUPPORT_720P, /* /< 720P */
+ VENC_DRV_RESOLUTION_SUPPORT_1080I, /* /< 1080I */
+ VENC_DRV_RESOLUTION_SUPPORT_1080P, /* /< 1080P */
+ VENC_DRV_RESOLUTION_SUPPORT_2160P, /* /< 2160P */
+ VENC_DRV_RESOLUTION_SUPPORT_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_RESOLUTION_T value */
+} VENC_DRV_RESOLUTION_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_SET_TYPE_T
+ * @par Description
+ * This is the input parameter for eVEncDrvSetParam()
+ */
+typedef enum __VENC_DRV_SET_TYPE_T {
+ VENC_DRV_SET_TYPE_UNKONW = 0, /* /< Default value (not used) */
+ VENC_DRV_SET_TYPE_RST, /* /< Set reset */
+ VENC_DRV_SET_TYPE_CB, /* /< Set callback function */
+ VENC_DRV_SET_TYPE_PARAM_RC, /* /< Set rate control parameter */
+ VENC_DRV_SET_TYPE_PARAM_ME, /* /< Set motion estimation parameter */
+ VENC_DRV_SET_TYPE_PARAM_EIS, /* /< Set EIS parameter */
+ VENC_DRV_SET_TYPE_PARAM_ENC, /* /< Set encoder parameters such as I-frame period, etc. */
+ VENC_DRV_SET_TYPE_STATISTIC_ON, /* /< Enable statistic function */
+ VENC_DRV_SET_TYPE_STATISTIC_OFF, /* /< Disable statistic function */
+ VENC_DRV_SET_TYPE_SET_OMX_TIDS, /* /< Set OMX thread IDs */
+ VENC_DRV_SET_TYPE_MPEG4_SHORT, /* /< Set MPEG4 short header mode */
+ VENC_DRV_SET_TYPE_FORCE_INTRA_ON, /* /< Set Force Intra Frame on */
+ VENC_DRV_SET_TYPE_FORCE_INTRA_OFF, /* /< Set Force Intra Frame off */
+ VENC_DRV_SET_TYPE_TIME_LAPSE, /* /< Set time lapse */
+ VENC_DRV_SET_TYPE_ALLOC_WORK_BUF, /* /< Set to alloc working buffer */
+ VENC_DRV_SET_TYPE_DUMP_WORK_BUF, /* /< Set to dump working buffer */
+ VENC_DRV_SET_TYPE_FREE_WORK_BUF, /* /< Set to free working buffer */
+ VENC_DRV_SET_TYPE_ADJUST_BITRATE, /* /< Set to adjust bitrate */
+ VENC_DRV_SET_TYPE_I_FRAME_INTERVAL, /* /< Set I Frame interval */
+ VENC_DRV_SET_TYPE_WFD_MODE, /* /< Set Wifi-Display Mode */
+ VENC_DRV_SET_TYPE_RECORD_SIZE, /* /< Ser record size */
+ VENC_DRV_SET_TYPE_USE_MCI_BUF, /* /< Set to use MCI buffer */
+ VENC_DRV_SET_TYPE_ADJUST_FRAMERATE, /* /< Set frame rate */
+ VENC_DRV_SET_TYPE_INIT_QP, /* /< Set init QP */
+ VENC_DRV_SET_TYPE_SKIP_FRAME, /* /< Set skip one frame */
+ VENC_DRV_SET_TYPE_SCENARIO, /* /< Set VENC Scenario */
+ VENC_DRV_SET_TYPE_PREPEND_HEADER, /* /< Set prepend SPS/PPS before IDR */
+ VENC_DRV_SET_TYPE_SLOW_MOTION_ENCODE, /* /< Set to Slow Motion Video Recording for header or frame */
+ VENC_DRV_SET_TYPE_SLOW_MOTION_POST_PROC, /* /< Set to Slow Motion Video Recording for encoded bs with post processing */
+ VENC_DRV_SET_TYPE_SLOW_MOTION_LOCK_HW, /* /< Set to Slow Motion Video Recording for Lock HW */
+ VENC_DRV_SET_TYPE_SLOW_MOTION_UNLOCK_HW, /* /< Set to Slow Motion Video Recording for UnLock HW */
+ VENC_DRV_SET_TYPE_NONREFP, /* /< Set Enable/Disable Non reference P frame */
+ VENC_DRV_SET_TYPE_CONFIG_QP, /* /< Set init QP */
+ VENC_DRV_SET_TYPE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_SET_TYPE_T value */
+} VENC_DRV_SET_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_GET_TYPE_T
+ * @par Description
+ * This is the input parameter for eVEncDrvGetParam()
+ */
+typedef enum __VENC_DRV_GET_TYPE_T {
+ VENC_DRV_GET_TYPE_UNKONW = 0, /* /< Default value (not used) */
+ VENC_DRV_GET_TYPE_PARAM_RC, /* /< Get rate control parameter */
+ VENC_DRV_GET_TYPE_PARAM_ME, /* /< Get motion estimation parameter */
+ VENC_DRV_GET_TYPE_PARAM_EIS, /* /< Get EIS parameter */
+ VENC_DRV_GET_TYPE_PARAM_ENC, /* /< Get encoder parameters such as I-frame period, etc. */
+ VENC_DRV_GET_TYPE_STATISTIC, /* /< Get statistic. */
+ VENC_DRV_GET_TYPE_GET_CPU_LOADING_INFO, /* /< query the cpu loading info from kernel driver */
+ VENC_DRV_GET_TYPE_GET_YUV_FORMAT, /* /< Get YUV format */
+ VENC_DRV_GET_TYPE_GET_CODEC_TIDS,
+ /* for DirectLink Meta Mode + */
+ VENC_DRV_GET_TYPE_ALLOC_META_HANDLE_LIST, /* /< Alloc a handle to store meta handle list */
+ VENC_DRV_GET_TYPE_GET_BUF_INFO_FROM_META_HANDLE, /* /< Get buffer virtual address from meta buffer handle */
+ VENC_DRV_GET_TYPE_FREE_META_HANDLE_LIST, /* /< free a handle allocated from VENC_DRV_GET_TYPE_ALLOC_META_HANDLE_LIST */
+ /* for DirectLink Meta Mode - */
+ VENC_DRV_GET_TYPE_MAX = 0xFFFFFFFF /* /< Max VENC_DRV_GET_TYPE_MAX value */
+} VENC_DRV_GET_TYPE_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_MRESULT_T
+ * @par Description
+ * This is the return value for eVEncDrvXXX()
+ */
+typedef enum __VENC_DRV_MRESULT_T {
+ VENC_DRV_MRESULT_OK = 0, /* /< Return Success */
+ VENC_DRV_MRESULT_FAIL, /* /< Return Fail */
+ VENC_DRV_MRESULT_MAX = 0x0FFFFFFF /* /< Max VENC_DRV_MRESULT_T value */
+} VENC_DRV_MRESULT_T;
+
+
+/**
+ * @par Enumeration
+ * VENC_DRV_SCENARIO_T
+ * @par Description
+ * This is the scenario for VENC scenario
+ */
+typedef enum __VENC_DRV_SCENARIO_T {
+ VENC_DRV_SCENARIO_CAMERA_REC = 1, /* /< Camera recording */
+ VENC_DRV_SCENARIO_LIVEPHOTO_CAPTURE = (1 << 1), /* /< LivePhoto recording */
+ VENC_DRV_SCENARIO_LIVEPHOTO_EFFECT = (1 << 2), /* /< LivePhoto effect transcoding */
+ VENC_DRV_SCENARIO_CAMERA_REC_SLOW_MOTION = (1 << 3), /* /< Camera recording with slow motion */
+ VENC_DRV_SCENARIO_SCREEN_REC = (1 << 4), /* /< Screen recording */
+} VENC_DRV_SCENARIO_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_QUERY_VIDEO_FORMAT_T
+ * @par Description
+ * This is a input parameter for eVEncDrvQueryCapability()
+ */
+typedef struct __VENC_DRV_QUERY_VIDEO_FORMAT_T {
+ VENC_DRV_VIDEO_FORMAT_T eVideoFormat; /* /< [OUT] video format capability */
+ VAL_UINT32_T u4Profile; /* /< [OUT] video profile capability (VENC_DRV_H264_VIDEO_PROFILE_T, VENC_DRV_MPEG_VIDEO_PROFILE_T, VENC_DRV_MS_VIDEO_PROFILE_T) */
+ VENC_DRV_VIDEO_LEVEL_T eLevel; /* /< [OUT] video level capability */
+ VENC_DRV_RESOLUTION_T eResolution; /* /< [OUT] video resolution capability */
+ VAL_UINT32_T u4Width; /* /< [OUT] video width capability */
+ VAL_UINT32_T u4Height; /* /< [OUT] video height capability */
+ VAL_UINT32_T u4Bitrate; /* /< [OUT] video bitrate capability */
+ VAL_UINT32_T u4FrameRate; /* /< [OUT] video FrameRate capability, 15, 30,... */
+} VENC_DRV_QUERY_VIDEO_FORMAT_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_QUERY_VIDEO_FORMAT_T
+ * @par Description
+ * This is the pointer of VENC_DRV_QUERY_VIDEO_FORMAT_T
+ */
+typedef VENC_DRV_QUERY_VIDEO_FORMAT_T * P_VENC_DRV_QUERY_VIDEO_FORMAT_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_QUERY_INPUT_BUF_LIMIT
+ * @par Description
+ * This is a input parameter for eVEncDrvQueryCapability()
+ */
+typedef struct __VENC_DRV_QUERY_INPUT_BUF_LIMIT {
+ VENC_DRV_VIDEO_FORMAT_T eVideoFormat; /* /< [IN] video format */
+ VAL_UINT32_T u4Width; /* /< [IN] video width */
+ VAL_UINT32_T u4Height; /* /< [IN] video height */
+ VAL_UINT32_T u4Stride; /* /< [OUT] video stride */
+ VAL_UINT32_T u4SliceHeight; /* /< [OUT] video sliceheight */
+ VENC_DRV_SCENARIO_T eScenario; /* /< [IN] venc scenario */
+} VENC_DRV_QUERY_INPUT_BUF_LIMIT;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_PARAM_ENC_T
+ * @par Description
+ * This is the encoder settings and used as input or output parameter for eVEncDrvSetParam() or eVEncDrvGetParam()
+ */
+typedef struct __VENC_DRV_PARAM_ENC_T { /*union extend 64bits for TEE*/
+ VENC_DRV_YUV_FORMAT_T eVEncFormat; /* /< [IN/OUT] YUV format */
+ VAL_UINT32_T u4Profile; /* /< [IN/OUT] Profile */
+ VAL_UINT32_T u4Level; /* /< [IN/OUT] Level */
+ VAL_UINT32_T u4Width; /* /< [IN/OUT] Image Width */
+ VAL_UINT32_T u4Height; /* /< [IN/OUT] Image Height */
+ VAL_UINT32_T u4BufWidth; /* /< [IN/OUT] Buffer Width */
+ VAL_UINT32_T u4BufHeight; /* /< [IN/OUT] Buffer Heigh */
+ VAL_UINT32_T u4NumPFrm; /* /< [IN/OUT] The number of P frame between two I frame. */
+ VAL_UINT32_T u4NumBFrm; /* /< [IN/OUT] The number of B frame between two reference frame. */
+ VENC_DRV_FRAME_RATE_T eFrameRate; /* /< [IN/OUT] Frame rate */
+ VAL_BOOL_T fgInterlace; /* /< [IN/OUT] Interlace coding. */
+ union {
+ VAL_VOID_T *pvExtraEnc;
+ VAL_UINT64_T pvExtraEnc_ext64;
+ };
+ VAL_MEMORY_T rExtraEncMem; /* /< [IN/OUT] Extra Encoder Memory Info */
+ VAL_BOOL_T fgUseMCI; /* /< [IN/OUT] Use MCI */
+ VAL_BOOL_T fgMultiSlice; /* /< [IN/OUT] Is multi-slice bitstream ? */
+ VAL_BOOL_T fgMBAFF;
+} VENC_DRV_PARAM_ENC_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_PARAM_ENC_T
+ * @par Description
+ * This is the pointer of VENC_DRV_PARAM_ENC_T
+ */
+typedef VENC_DRV_PARAM_ENC_T * P_VENC_DRV_PARAM_ENC_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_PARAM_ENC_EXTRA_T
+ * @par Description
+ * This is the encoder settings and used as input or output parameter for eVEncDrvSetParam() or eVEncDrvGetParam()
+ */
+typedef struct __VENC_DRV_PARAM_ENC_EXTRA_T {
+ VAL_UINT32_T u4IntraFrameRate; /* /< [IN/OUT] Intra frame rate */
+ VAL_UINT32_T u4BitRate; /* /< [IN/OUT] BitRate kbps */
+ VAL_UINT32_T u4FrameRateQ16; /* /< [IN/OUT] Frame rate in Q16 format */
+ VAL_UINT32_T u4UseMBAFF; /* /< [IN/OUT] Use MBAFF */
+} VENC_DRV_PARAM_ENC_EXTRA_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_PARAM_ENC_EXTRA_T
+ * @par Description
+ * This is the pointer of VENC_DRV_PARAM_ENC_EXTRA_T
+ */
+typedef VENC_DRV_PARAM_ENC_EXTRA_T * pVENC_DRV_PARAM_ENC_EXTRA_T;
+
+
+#define VENC_DRV_VDO_PROP_LIST_MAX (64)
+
+/**
+ * @par Structure
+ * VENC_DRV_VIDEO_PROPERTY_T
+ * @par Description
+ * This is used to get the "target bitrate" according to "resolution and frame rate"
+ */
+typedef struct __VENC_DRV_VIDEO_PROPERTY_T {
+ VENC_DRV_VIDEO_FORMAT_T eVideoFormat;
+ VAL_UINT32_T u4Width;
+ VAL_UINT32_T u4Height;
+ VAL_UINT32_T u4FrameRate;
+ VAL_UINT32_T u4BitRate; /* used for query table */
+ VAL_BOOL_T fgPropIsValid;
+} VENC_DRV_VIDEO_PROPERTY_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_VIDEO_PROPERTY_T
+ * @par Description
+ * This is the pointer of VENC_DRV_VIDEO_PROPERTY_T
+ */
+typedef VENC_DRV_VIDEO_PROPERTY_T * P_VENC_DRV_VIDEO_PROPERTY_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_TIMESTAMP_T
+ * @par Description
+ * This is timestamp information and used as items for VENC_DRV_PARAM_FRM_BUF_T and VENC_DRV_PARAM_BS_BUF_T
+ */
+typedef struct __VENC_DRV_TIMESTAMP_T {
+ VAL_UINT32_T u4TimeStamp[2]; /* /< [IN] Timestamp information */
+} VENC_DRV_TIMESTAMP_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_TIMESTAMP_T
+ * @par Description
+ * This is the pointer of VENC_DRV_TIMESTAMP_T
+ */
+typedef VENC_DRV_TIMESTAMP_T * P_VENC_DRV_TIMESTAMP_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_EIS_INPUT_T
+ * @par Description
+ * This is EIS information and used as items for VENC_DRV_PARAM_FRM_BUF_T
+ */
+typedef struct __VENC_DRV_EIS_INPUT_T {
+ VAL_UINT32_T u4X; /* /< [IN] Start coordination X */
+ VAL_UINT32_T u4Y; /* /< [IN] Start coordination Y */
+} VENC_DRV_EIS_INPUT_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_EIS_INPUT_T
+ * @par Description
+ * This is the pointer of VENC_DRV_EIS_INPUT_T
+ */
+typedef VENC_DRV_EIS_INPUT_T * P_VENC_DRV_EIS_INPUT_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_PARAM_FRM_BUF_T
+ * @par Description
+ * This is frame buffer information and used as input parameter for eVEncDrvEncode()
+ */
+typedef struct __VENC_DRV_PARAM_FRM_BUF_T {
+ VAL_MEM_ADDR_T rFrmBufAddr; /* /< [IN] Frame buffer address */
+ VAL_MEM_ADDR_T rCoarseAddr; /* /< [IN] Coarse address */
+ VENC_DRV_TIMESTAMP_T rTimeStamp; /* /< [IN] Timestamp information */
+ VENC_DRV_EIS_INPUT_T rEISInput; /* /< [IN] EIS information */
+ VAL_UINT32_T rSecMemHandle; /* /< [IN/OUT] security memory handle for SVP */
+} VENC_DRV_PARAM_FRM_BUF_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_PARAM_FRM_BUF_T
+ * @par Description
+ * This is the pointer of VENC_DRV_PARAM_FRM_BUF_T
+ */
+typedef VENC_DRV_PARAM_FRM_BUF_T * P_VENC_DRV_PARAM_FRM_BUF_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_PARAM_BS_BUF_T
+ * @par Description
+ * This is bitstream buffer information and used as input parameter for\n
+ * eVEncDrvEncode()\n
+ */
+typedef struct __VENC_DRV_PARAM_BS_BUF_T {/*union extend 64bits for TEE */
+ VAL_MEM_ADDR_T rBSAddr; /* /< [IN] Bitstream buffer address */
+ union {
+ VAL_ULONG_T u4BSStartVA; /* /< [IN] Bitstream fill start address */
+ VAL_UINT64_T u4BSStartVA_ext64;
+ };
+ union {
+ VAL_ULONG_T u4BSSize; /* /< [IN] Bitstream size (filled bitstream in bytes) */
+ VAL_UINT64_T u4BSSize_ext64;
+ };
+ VENC_DRV_TIMESTAMP_T rTimeStamp; /* /< [IN] Time stamp information */
+ VAL_UINT32_T rSecMemHandle; /* /< [IN/OUT] security memory handle for SVP */
+} VENC_DRV_PARAM_BS_BUF_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_PARAM_BS_BUF_T
+ * @par Description
+ * This is the pointer of VENC_DRV_PARAM_BS_BUF_T
+ */
+typedef VENC_DRV_PARAM_BS_BUF_T * P_VENC_DRV_PARAM_BS_BUF_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_DONE_RESULT_T
+ * @par Description
+ * This is callback and return information and used as output parameter for eVEncDrvEncode()
+ */
+typedef struct __VENC_DRV_DONE_RESULT_T { /*union extend 64bits for TEE */
+ VENC_DRV_MESSAGE_T eMessage; /* /< [OUT] Message, such as success or error code */
+ union {
+ P_VENC_DRV_PARAM_BS_BUF_T prBSBuf; /* /< [OUT] Bitstream information */
+ VAL_UINT64_T prBSBuf_ext64;
+ };
+ union {
+ P_VENC_DRV_PARAM_FRM_BUF_T prFrmBuf; /* /< [OUT] Input frame buffer information. if address is null, don't use this buffer, else reuse */
+ VAL_UINT64_T prFrmBuf_ext64;
+ };
+ VAL_BOOL_T fgIsKeyFrm; /* /< [OUT] output is key frame or not */
+ VAL_UINT32_T u4HWEncodeTime; /* /< [OUT] HW encode Time */
+} VENC_DRV_DONE_RESULT_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_DONE_RESULT_T
+ * @par Description
+ * This is the pointer of VENC_DRV_DONE_RESULT_T
+ */
+typedef VENC_DRV_DONE_RESULT_T * P_VENC_DRV_DONE_RESULT_T;
+
+
+/**
+ * @par Structure
+ * VENC_DRV_PROPERTY_T
+ * @par Description
+ * This is property information and used as output parameter for eVEncDrvQueryCapability()
+ */
+typedef struct __VENC_DRV_PROPERTY_T {
+ VAL_UINT32_T u4BufAlign; /* /< [OUT] Buffer alignment requirement */
+ VAL_UINT32_T u4BufUnitSize; /* /< [OUT] Buffer unit size is N bytes (e.g., 8, 16, or 64 bytes per unit.) */
+ VAL_UINT32_T u4ExtraBufSize; /* /< [OUT] Extra buffer size in initial stage */
+ VAL_BOOL_T fgOutputRingBuf; /* /< [OUT] Output is ring buffer */
+ VAL_BOOL_T fgCoarseMESupport; /* /< [OUT] Support ME coarse search */
+ VAL_BOOL_T fgEISSupport; /* /< [OUT] Support EIS */
+} VENC_DRV_PROPERTY_T;
+
+/**
+ * @par Structure
+ * P_VENC_DRV_PROPERTY_T
+ * @par Description
+ * This is the pointer of VENC_DRV_PROPERTY_T
+ */
+typedef VENC_DRV_PROPERTY_T * P_VENC_DRV_PROPERTY_T;
+
+/**
+ * @par Structure
+ * SEC_VENC_INIT_CONFIG
+ * @par Description
+ * This is the structure for initial Venc TLC
+ */
+typedef struct sec_venc_init_config {
+ int width;
+ int height;
+ void *pVencHandle;
+ uint32_t uVencHandleLen;
+ unsigned char *pRCCode;
+} SEC_VENC_INIT_CONFIG;
+
+/**
+ * @par Structure
+ * SEC_VENC_INIT_CONFIG
+ * @par Description
+ * This is the structure for setting Venc TLC
+ */
+typedef struct sec_venc_enc_parameter {
+ uint32_t bitstreamSecHandle;
+ uint32_t uBitstreamBufSize;
+ uint32_t uBitstreamDataLen;
+
+ uint32_t frameSecHandle;
+ uint32_t uFrameBufSize;
+ uint32_t uFrameDataLen;
+} SEC_VENC_ENC_PARAM;
+
+/**
+ * @par Function
+ * eVEncDrvQueryCapability
+ * @par Description
+ * Query the driver capability
+ * @param
+ * a_eType [IN/OUT] The VENC_DRV_QUERY_TYPE_T structure
+ * @param
+ * a_pvInParam [IN] The input parameter
+ * @param
+ * a_pvOutParam [OUT] The output parameter
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvQueryCapability(
+ VENC_DRV_QUERY_TYPE_T a_eType,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+/**
+ * @par Function
+ * eVEncDrvCreate
+ * @par Description
+ * Create the driver handle
+ * @param
+ * a_phHandle [OUT] The driver handle
+ * @param
+ * a_eVideoFormat [IN] The VENC_DRV_VIDEO_FORMAT_T structure
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvCreate(VAL_HANDLE_T *a_phHandle, VENC_DRV_VIDEO_FORMAT_T a_eVideoFormat
+ );
+
+
+/**
+ * @par Function
+ * eVEncDrvRelease
+ * @par Description
+ * Release the driver handle
+ * @param
+ * a_hHandle [IN] The driver handle
+ * @param
+ * a_eVideoFormat [IN] The VENC_DRV_VIDEO_FORMAT_T structure
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvRelease(
+ VAL_HANDLE_T a_hHandle,
+ VENC_DRV_VIDEO_FORMAT_T a_eVideoFormat
+);
+
+
+/**
+ * @par Function
+ * eVEncDrvInit
+ * @par Description
+ * Init the driver setting, alloc working memory ... etc.
+ * @param
+ * a_hHandle [IN] The driver handle
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvInit(
+ VAL_HANDLE_T a_hHandle
+);
+
+/**
+ * @par Function
+ * eVEncDrvDeInit
+ * @par Description
+ * DeInit the driver setting, free working memory ... etc.
+ * @param
+ * a_hHandle [IN] The driver handle
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvDeInit(
+ VAL_HANDLE_T a_hHandle
+);
+
+
+/**
+ * @par Function
+ * eVEncDrvSetParam
+ * @par Description
+ * Set parameter to driver
+ * @param
+ * a_hHandle [IN] The driver handle
+ * @param
+ * a_eType [IN] The VENC_DRV_SET_TYPE_T structure
+ * @param
+ * a_pvInParam [IN] The input parameter
+ * @param
+ * a_pvOutParam [OUT] The output parameter
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvSetParam(
+ VAL_HANDLE_T a_hHandle,
+ VENC_DRV_SET_TYPE_T a_eType,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+/**
+ * @par Function
+ * eVEncDrvGetParam
+ * @par Description
+ * Get parameter from driver
+ * @param
+ * a_hHandle [IN] The driver handle
+ * @param
+ * a_eType [IN] The VENC_DRV_SET_TYPE_T structure
+ * @param
+ * a_pvInParam [IN] The input parameter
+ * @param
+ * a_pvOutParam [OUT] The output parameter
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvGetParam(
+ VAL_HANDLE_T a_hHandle,
+ VENC_DRV_GET_TYPE_T a_eType,
+ VAL_VOID_T *a_pvInParam,
+ VAL_VOID_T *a_pvOutParam
+);
+
+
+/**
+ * @par Function
+ * eVEncDrvEncode
+ * @par Description
+ * Encode frame
+ * @param
+ * a_hHandle [IN] The driver handle
+ * @param
+ * a_eOpt [IN] The VENC_DRV_START_OPT_T structure
+ * @param
+ * a_prFrmBuf [IN] The input frame buffer with VENC_DRV_PARAM_FRM_BUF_T structure
+ * @param
+ * a_prBSBuf [IN] The input bitstream buffer with VENC_DRV_PARAM_BS_BUF_T structure
+ * @param
+ * a_prResult [OUT] The output result with VENC_DRV_DONE_RESULT_T structure
+ * @par Returns
+ * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
+ */
+VENC_DRV_MRESULT_T eVEncDrvEncode(VAL_HANDLE_T a_hHandle, VENC_DRV_START_OPT_T a_eOpt, VENC_DRV_PARAM_FRM_BUF_T *a_prFrmBuf, VENC_DRV_PARAM_BS_BUF_T *a_prBSBuf, VENC_DRV_DONE_RESULT_T *a_prResult);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _VENC_DRV_IF_PUBLIC_H_ */
diff --git a/kernel-headers/video_custom_sp.h b/kernel-headers/video_custom_sp.h
new file mode 100644
index 0000000..933267f
--- /dev/null
+++ b/kernel-headers/video_custom_sp.h
@@ -0,0 +1,121 @@
+#ifndef VIDEO_CUSTOM_SP_H
+#define VIDEO_CUSTOM_SP_H
+
+/* #include "video_codec_if_sp.h" */
+#include "vcodec_if_v2.h"
+
+#define ASSERT(expr) \
+ do { \
+ if (!(expr)) \
+ AssertionFailed(__func__, __FILE__, __LINE__); \
+ } while (0) /* /< ASSERT definition */
+
+/******************************************************************************
+ *
+ *
+ * decode
+ *
+ *
+******************************************************************************/
+
+
+/**
+ * @par Enumeration
+ * VIDEO_DECODER_T
+ * @par Description
+ * This is the item for video decoder format
+ */
+typedef enum _VIDEO_DECODER_T {
+ CODEC_DEC_NONE = 0, /* /< NONE */
+ CODEC_DEC_H263 = (0x1 << 0), /* /< H263 */
+ CODEC_DEC_MPEG4 = (0x1 << 1), /* /< MPEG4 */
+ CODEC_DEC_H264 = (0x1 << 2), /* /< H264 */
+ CODEC_DEC_RV = (0x1 << 3), /* /< RV */
+ CODEC_DEC_VC1 = (0x1 << 4), /* /< VC1 */
+ CODEC_DEC_VP8 = (0x1 << 5), /* /< VP8 */
+ CODEC_DEC_VP9 = (0x1 << 6), /* /< VP9 */
+ CODEC_DEC_HEVC = (0x1 << 7), /* /< HEVC */
+ CODEC_DEC_MPEG2 = (0x1 << 8), /* /< MPEG2 */
+ CODEC_DEC_MAX = (0x1 << 9) /* /< MAX */
+} VIDEO_DECODER_T;
+
+#if 1 /* defined(MT6572) //VCODEC_MULTI_THREAD */
+
+
+/**
+ * @par Function
+ * GetDecoderAPI
+ * @par Description
+ * The function used to get decoder API for codec library
+ * @param
+ * eDecType [IN] decoder type
+ * @param
+ * hWrapper [IN] wrapper
+ * @param
+ * ppDrvModule [IN/OUT] driver module
+ * @param
+ * bUseMultiCoreCodec [IN] multi core codec flag
+ * @par Returns
+ * VIDEO_DEC_API_T, the decoder API
+ */
+VIDEO_DEC_API_T *GetDecoderAPI(VIDEO_DECODER_T eDecType, HANDLE hWrapper, void **ppDrvModule, unsigned int bUseMultiCoreCodec);
+#else
+VIDEO_DEC_API_T *GetDecoderAPI(VIDEO_DECODER_T, HANDLE); /* HANDLE : wrapper's handle */
+#endif
+/* VCODEC_DEC_API_T *GetMPEG4DecoderAPI(void); */
+/* VCODEC_DEC_API_T *GetH264DecoderAPI(void); */
+/* VCODEC_DEC_API_T *GetRVDecoderAPI(void); */
+/* VCODEC_DEC_API_T *GetVP8DecoderAPI(void); */
+/* VCODEC_DEC_API_T *GetVC1DecoderAPI(void); */
+
+
+/******************************************************************************
+*
+*
+* encode
+*
+*
+******************************************************************************/
+
+
+/**
+ * @par Enumeration
+ * VIDEO_ENCODER_T
+ * @par Description
+ * This is the item for video decoder format
+ */
+typedef enum _VIDEO_ENCODER_T {
+ CODEC_ENC_NONE = 0, /* /< NONE */
+ CODEC_ENC_H263 = (0x1 << 0), /* /< H263 */
+ CODEC_ENC_MPEG4 = (0x1 << 1), /* /< MPEG4 */
+ CODEC_ENC_H264 = (0x1 << 2), /* /< H264 */
+ CODEC_ENC_HEVC = (0x1 << 3), /* /< HEVC */
+ CODEC_ENC_VP8 = (0x1 << 5), /* /< VP8 */
+ CODEC_ENC_VP9 = (0x1 << 6), /* /< VP9 */
+ CODEC_ENC_MAX = (0x1 << 7) /* /< MAX */
+} VIDEO_ENCODER_T;
+
+
+/**
+ * @par Function
+ * GetEncoderAPI
+ * @par Description
+ * The function used to get encoder API for codec library
+ * @param
+ * eEncType [IN] encoder type
+ * @param
+ * hWrapper [IN] wrapper
+ * @param
+ * ppDrvModule [IN/OUT] driver module
+ * @param
+ * bUseMultiCoreCodec [IN] multi core codec flag
+ * @par Returns
+ * VIDEO_DEC_API_T, the encoder API
+ */
+VIDEO_ENC_API_T *GetEncoderAPI(VIDEO_ENCODER_T eEncType, HANDLE hWrapper, void **ppDrvModule, unsigned int bUseMultiCoreCodec);
+/* VCODEC_ENC_API_T *GetMPEG4EncoderAPI(void); */
+/* VCODEC_ENC_API_T* GetH264EncoderAPI(void); */
+/* VIDEO_ENCODER_API_T *GetVP8EncoderAPI(void); */
+
+
+#endif /* VIDEO_CUSTOM_SP_H */