18611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#ifndef _MSM_VENC_H_
28611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define _MSM_VENC_H_
38611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
48611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#include <linux/types.h>
58611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
68611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_MAX_RECON_BUFFERS 2
78611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
88611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_FLAG_EOS                   0x00000001
98611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_FLAG_END_OF_FRAME          0x00000010
108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_FLAG_SYNC_FRAME            0x00000020
118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_FLAG_EXTRA_DATA            0x00000040
128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_FLAG_CODEC_CONFIG          0x00000080
138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_flush_type {
158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_FLUSH_INPUT,
168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_FLUSH_OUTPUT,
178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_FLUSH_ALL
188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_state_type {
218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATE_PAUSE = 0x1,
228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATE_START = 0x2,
238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATE_STOP = 0x4
248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
268611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_event_type_enum {
278611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_START_STATUS,
288611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_STOP_STATUS,
298611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_SUSPEND_STATUS,
308611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_RESUME_STATUS,
318611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_FLUSH_STATUS,
328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_RELEASE_INPUT,
338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_DELIVER_OUTPUT,
348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_EVENT_UNKNOWN_STATUS
358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_status_code {
388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_SUCCESS,
398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_ERROR,
408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_INVALID_STATE,
418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_FLUSHING,
428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_INVALID_PARAM,
438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_CMD_QUEUE_FULL,
448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_CRITICAL,
458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_INSUFFICIENT_RESOURCES,
468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_STATUS_TIMEOUT
478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_msg_code {
508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_INDICATION,
518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_INPUT_BUFFER_DONE,
528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_OUTPUT_BUFFER_DONE,
538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_NEED_OUTPUT_BUFFER,
548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_FLUSH,
558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_START,
568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_STOP,
578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_PAUSE,
588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_RESUME,
598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_MSG_STOP_READING_MSG
608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_error_code {
638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_SUCCESS,
648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EFAIL,
658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EFATAL,
668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EBADPARAM,
678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EINVALSTATE,
688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOSWRES,
698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOHWRES,
708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EBUFFREQ,
718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EINVALCMD,
728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ETIMEOUT,
738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOREATMPT,
748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOPREREQ,
758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ECMDQFULL,
768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOTSUPP,
778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOTIMPL,
788611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ENOTPMEM,
798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EFLUSHED,
808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EINSUFBUF,
818611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_ESAMESTATE,
828611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_S_EINVALTRANS
838611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
848611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
858611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum venc_mem_region_enum {
868611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_PMEM_EBI1,
878611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	VENC_PMEM_SMI
888611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
898611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
908611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_buf_type {
91f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 region;
92f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 phys;
93f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 size;
948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	int offset;
958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_qp_range {
98f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 min_qp;
99f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 max_qp;
1008611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_frame_rate {
103f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 frame_rate_num;
104f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 frame_rate_den;
1058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1068611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_slice_info {
108f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 slice_mode;
109f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 units_per_slice;
1108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_extra_data {
113f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 slice_extra_data_flag;
114f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 slice_client_data1;
115f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 slice_client_data2;
116f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 slice_client_data3;
117f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 none_extra_data_flag;
118f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 none_client_data1;
119f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 none_client_data2;
120f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 none_client_data3;
1218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_common_config {
124f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 standard;
125f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 input_frame_height;
126f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 input_frame_width;
127f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 output_frame_height;
128f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 output_frame_width;
129f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 rotation_angle;
130f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 intra_period;
131f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 rate_control;
1328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_frame_rate frame_rate;
133f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 bitrate;
1348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_qp_range qp_range;
135f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 iframe_qp;
136f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 pframe_qp;
1378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_slice_info slice_config;
1388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_extra_data extra_data;
1398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_nonio_buf_config {
1428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buf_type recon_buf1;
1438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buf_type recon_buf2;
1448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buf_type wb_buf;
1458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buf_type cmd_buf;
1468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buf_type vlc_buf;
1478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_mpeg4_config {
150f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 profile;
151f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 level;
152f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 time_resolution;
153f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 ac_prediction;
154f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 hec_interval;
155f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 data_partition;
156f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 short_header;
157f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 rvlc_enable;
1588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_h263_config {
161f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 profile;
162f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 level;
1638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_h264_config {
166f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 profile;
167f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 level;
168f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 max_nal;
169f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 idr_period;
1708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_pmem {
1738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	int src;
1748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	int fd;
175f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 offset;
1768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	void *virt;
1778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	void *phys;
178f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 size;
1798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1818611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_buffer {
1828611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned char *ptr_buffer;
183f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 size;
184f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 len;
185f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 offset;
1868611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	long long time_stamp;
187f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 flags;
188f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 client_data;
189f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
1908611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_buffers {
1938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_pmem recon_buf[VENC_MAX_RECON_BUFFERS];
1948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_pmem wb_buf;
1958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_pmem cmd_buf;
1968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_pmem vlc_buf;
1978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
1988611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
1998611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_buffer_flush {
200f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 flush_mode;
2018611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2028611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuunion venc_msg_data {
2048611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buffer buf;
2058611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buffer_flush flush_ret;
206f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
2078611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2088611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2098611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_msg {
210f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 status_code;
211f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 msg_code;
212f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 msg_data_size;
2138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	union venc_msg_data msg_data;
2148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2158611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2168611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuunion venc_codec_config {
2178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_mpeg4_config mpeg4_params;
2188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_h263_config h263_params;
2198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_h264_config h264_params;
2208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_q6_config {
2238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_common_config config_params;
2248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	union venc_codec_config codec_params;
2258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_nonio_buf_config buf_params;
2268611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	void *callback_event;
2278611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2288611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2298611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_hdr_config {
2308611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_common_config config_params;
2318611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	union venc_codec_config codec_params;
2328611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_init_config {
2358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_q6_config q6_config;
2368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_buffers q6_bufs;
2378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct venc_seq_config {
2408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	int size;
2418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_pmem buf;
2428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct venc_q6_config q6_config;
2438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
2448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
245f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstruct venc_version {
246f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 major;
247f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	u32 minor;
248f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
249f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
2508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_MAGIC 'V'
2518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_READ_NEXT_MSG \
2538611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg)
2548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_STOP_READ_MSG  _IO(VENC_IOCTL_MAGIC, 2)
2568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_INPUT_BUFFER \
2588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem)
2598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_OUTPUT_BUFFER \
2618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem)
2628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config)
2648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_ENCODE_FRAME \
2668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer)
2678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER \
2698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer)
2708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_FLUSH \
2728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush)
2738611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2748611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9)
2758611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2768611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10)
2778611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2788611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11)
2798611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2808611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_INTRA_PERIOD \
2818611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 12, int)
2828611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2838611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13)
2848611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2858611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_GET_SEQUENCE_HDR \
2868611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config)
2878611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2888611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_INTRA_REFRESH \
2898611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 15, int)
2908611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2918611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_FRAME_RATE \
2928611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate)
2938611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2948611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_TARGET_BITRATE \
2958611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 17, int)
2968611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2978611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define VENC_IOCTL_SET_QP_RANGE \
2988611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	_IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range)
2998611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
300f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define VENC_IOCTL_GET_VERSION \
301f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	 _IOR(VENC_IOCTL_MAGIC, 19, struct venc_version)
302f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
3038611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#endif
304