1d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#ifndef _UAPI_MSM_VENC_H_
2d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#define _UAPI_MSM_VENC_H_
35d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
45d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/types.h>
55d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
65d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_MAX_RECON_BUFFERS 2
75d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
85d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_FLAG_EOS                   0x00000001
95d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_FLAG_END_OF_FRAME          0x00000010
105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_FLAG_SYNC_FRAME            0x00000020
115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_FLAG_EXTRA_DATA            0x00000040
125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_FLAG_CODEC_CONFIG          0x00000080
135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_flush_type {
155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_FLUSH_INPUT,
165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_FLUSH_OUTPUT,
175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_FLUSH_ALL
185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_state_type {
215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATE_PAUSE = 0x1,
225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATE_START = 0x2,
235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATE_STOP = 0x4
245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_event_type_enum {
275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_START_STATUS,
285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_STOP_STATUS,
295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_SUSPEND_STATUS,
305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_RESUME_STATUS,
315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_FLUSH_STATUS,
325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_RELEASE_INPUT,
335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_DELIVER_OUTPUT,
345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_EVENT_UNKNOWN_STATUS
355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_status_code {
385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_SUCCESS,
395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_ERROR,
405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_INVALID_STATE,
415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_FLUSHING,
425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_INVALID_PARAM,
435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_CMD_QUEUE_FULL,
445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_CRITICAL,
455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_INSUFFICIENT_RESOURCES,
465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_STATUS_TIMEOUT
475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_msg_code {
505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_INDICATION,
515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_INPUT_BUFFER_DONE,
525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_OUTPUT_BUFFER_DONE,
535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_NEED_OUTPUT_BUFFER,
545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_FLUSH,
555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_START,
565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_STOP,
575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_PAUSE,
585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_RESUME,
595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_MSG_STOP_READING_MSG
605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_error_code {
635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_SUCCESS,
645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EFAIL,
655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EFATAL,
665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EBADPARAM,
675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EINVALSTATE,
685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOSWRES,
695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOHWRES,
705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EBUFFREQ,
715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EINVALCMD,
725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ETIMEOUT,
735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOREATMPT,
745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOPREREQ,
755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ECMDQFULL,
765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOTSUPP,
775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOTIMPL,
785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ENOTPMEM,
795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EFLUSHED,
805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EINSUFBUF,
815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_ESAMESTATE,
825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_S_EINVALTRANS
835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum venc_mem_region_enum {
865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_PMEM_EBI1,
875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VENC_PMEM_SMI
885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_buf_type {
915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 region;
925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 phys;
935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 size;
945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int offset;
955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_qp_range {
985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 min_qp;
995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 max_qp;
1005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_frame_rate {
1035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 frame_rate_num;
1045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 frame_rate_den;
1055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_slice_info {
1085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 slice_mode;
1095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 units_per_slice;
1105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_extra_data {
1135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 slice_extra_data_flag;
1145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 slice_client_data1;
1155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 slice_client_data2;
1165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 slice_client_data3;
1175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 none_extra_data_flag;
1185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 none_client_data1;
1195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 none_client_data2;
1205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 none_client_data3;
1215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_common_config {
1245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 standard;
1255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 input_frame_height;
1265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 input_frame_width;
1275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 output_frame_height;
1285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 output_frame_width;
1295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 rotation_angle;
1305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 intra_period;
1315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 rate_control;
1325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_frame_rate frame_rate;
1335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 bitrate;
1345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_qp_range qp_range;
1355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 iframe_qp;
1365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 pframe_qp;
1375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_slice_info slice_config;
1385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_extra_data extra_data;
1395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_nonio_buf_config {
1425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buf_type recon_buf1;
1435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buf_type recon_buf2;
1445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buf_type wb_buf;
1455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buf_type cmd_buf;
1465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buf_type vlc_buf;
1475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_mpeg4_config {
1505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 profile;
1515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 level;
1525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 time_resolution;
1535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 ac_prediction;
1545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 hec_interval;
1555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 data_partition;
1565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 short_header;
1575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 rvlc_enable;
1585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_h263_config {
1615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 profile;
1625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 level;
1635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_h264_config {
1665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 profile;
1675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 level;
1685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 max_nal;
1695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 idr_period;
1705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_pmem {
1735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int src;
1745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int fd;
1755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 offset;
1765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	void *virt;
1775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	void *phys;
1785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 size;
1795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_buffer {
1825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	unsigned char *ptr_buffer;
1835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 size;
1845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 len;
1855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 offset;
1865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	long long time_stamp;
1875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 flags;
1885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 client_data;
1895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_buffers {
1935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_pmem recon_buf[VENC_MAX_RECON_BUFFERS];
1945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_pmem wb_buf;
1955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_pmem cmd_buf;
1965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_pmem vlc_buf;
1975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_buffer_flush {
2005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 flush_mode;
2015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinunion venc_msg_data {
2045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buffer buf;
2055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buffer_flush flush_ret;
2065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_msg {
2105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 status_code;
2115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 msg_code;
2125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 msg_data_size;
2135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	union venc_msg_data msg_data;
2145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinunion venc_codec_config {
2175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_mpeg4_config mpeg4_params;
2185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_h263_config h263_params;
2195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_h264_config h264_params;
2205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_q6_config {
2235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_common_config config_params;
2245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	union venc_codec_config codec_params;
2255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_nonio_buf_config buf_params;
2265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	void *callback_event;
2275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_hdr_config {
2305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_common_config config_params;
2315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	union venc_codec_config codec_params;
2325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_init_config {
2355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_q6_config q6_config;
2365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_buffers q6_bufs;
2375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_seq_config {
2405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int size;
2415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_pmem buf;
2425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct venc_q6_config q6_config;
2435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct venc_version {
2465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 major;
2475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 minor;
2485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_MAGIC 'V'
2515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_READ_NEXT_MSG \
2535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg)
2545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_STOP_READ_MSG  _IO(VENC_IOCTL_MAGIC, 2)
2565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_INPUT_BUFFER \
2585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem)
2595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_OUTPUT_BUFFER \
2615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem)
2625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config)
2645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_ENCODE_FRAME \
2665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer)
2675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER \
2695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer)
2705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_FLUSH \
2725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush)
2735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9)
2755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10)
2775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11)
2795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_INTRA_PERIOD \
2815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 12, int)
2825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13)
2845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_GET_SEQUENCE_HDR \
2865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config)
2875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_INTRA_REFRESH \
2895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 15, int)
2905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_FRAME_RATE \
2925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate)
2935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_TARGET_BITRATE \
2955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 17, int)
2965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_SET_QP_RANGE \
2985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range)
2995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
3005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VENC_IOCTL_GET_VERSION \
3015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	 _IOR(VENC_IOCTL_MAGIC, 19, struct venc_version)
3025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
3035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#endif
304