1df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#ifndef _MSM_VIDC_H_
2df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#define _MSM_VIDC_H_
3df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
4df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#ifdef __KERNEL__
5df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
6df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#include <linux/poll.h>
7df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#include <linux/videodev2.h>
8df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
9df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandenum core_id {
10df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	MSM_VIDC_CORE_0 = 0,
11df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	MSM_VIDC_CORE_1,      /* for Q6 core */
12df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	MSM_VIDC_CORES_MAX,
13df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
14df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
15df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandenum session_type {
16df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	MSM_VIDC_ENCODER = 0,
17df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	MSM_VIDC_DECODER,
18df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	MSM_VIDC_MAX_DEVICES,
19df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
20df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
21df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandvoid *msm_vidc_open(int core_id, int session_type);
22df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_close(void *instance);
23df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_querycap(void *instance, struct v4l2_capability *cap);
24df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_enum_fmt(void *instance, struct v4l2_fmtdesc *f);
25df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_s_fmt(void *instance, struct v4l2_format *f);
26df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_g_fmt(void *instance, struct v4l2_format *f);
27df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_s_ctrl(void *instance, struct v4l2_control *a);
28df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_g_ctrl(void *instance, struct v4l2_control *a);
29df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_reqbufs(void *instance, struct v4l2_requestbuffers *b);
30df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_prepare_buf(void *instance, struct v4l2_buffer *b);
31df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_release_buf(void *instance, struct v4l2_buffer *b);
32df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_qbuf(void *instance, struct v4l2_buffer *b);
33df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_dqbuf(void *instance, struct v4l2_buffer *b);
34df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_streamon(void *instance, enum v4l2_buf_type i);
35df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_streamoff(void *instance, enum v4l2_buf_type i);
36df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_decoder_cmd(void *instance, struct v4l2_decoder_cmd *dec);
37df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_encoder_cmd(void *instance, struct v4l2_encoder_cmd *enc);
38df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_poll(void *instance, struct file *filp,
39df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand		struct poll_table_struct *pt);
40df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_get_iommu_domain_partition(void *instance, u32 flags,
41df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand		enum v4l2_buf_type, int *domain, int *partition);
42df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_subscribe_event(void *instance,
43df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand		struct v4l2_event_subscription *sub);
44df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_unsubscribe_event(void *instance,
45df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand		struct v4l2_event_subscription *sub);
46df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_dqevent(void *instance, struct v4l2_event *event);
47df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_wait(void *instance);
48df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_s_parm(void *instance, struct v4l2_streamparm *a);
49df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandint msm_vidc_enum_framesizes(void *instance, struct v4l2_frmsizeenum *fsize);
50df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#endif
51df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_interlace_payload {
52df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int format;
53df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
54df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_framerate_payload {
55df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int frame_rate;
56df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
57df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_ts_payload {
58df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int timestamp_lo;
59df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int timestamp_hi;
60df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
61df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_concealmb_payload {
62df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int num_mbs;
63df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
64df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_recoverysei_payload {
65df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int flags;
66df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
67df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
68df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_aspect_ratio_payload {
69df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int size;
70df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int version;
71df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int port_index;
72df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int aspect_width;
73df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int aspect_height;
74df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
75df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
76a8dacd55667c4b495110f04338067794a6d50ee2Devin Kimstruct msm_vidc_mpeg2_seqdisp_payload {
77a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	unsigned int video_format;
78a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	bool color_descp;
79a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	unsigned int color_primaries;
80a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	unsigned int transfer_char;
81a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	unsigned int matrix_coeffs;
82a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	unsigned int disp_width;
83a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	unsigned int disp_height;
84a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim};
85a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim
86df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_panscan_window {
87df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int panscan_height_offset;
88df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int panscan_width_offset;
89df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int panscan_window_width;
90df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int panscan_window_height;
91df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
92df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandstruct msm_vidc_panscan_window_payload {
93df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	unsigned int num_panscan_windows;
94df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	struct msm_vidc_panscan_window wnd[1];
95df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
96df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandenum msm_vidc_extradata_type {
97df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_NONE = 0x00000000,
98df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_MB_QUANTIZATION = 0x00000001,
99df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_INTERLACE_VIDEO = 0x00000002,
100df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_VC1_FRAMEDISP = 0x00000003,
101df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_VC1_SEQDISP = 0x00000004,
102df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_TIMESTAMP = 0x00000005,
103df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_S3D_FRAME_PACKING = 0x00000006,
104df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_FRAME_RATE = 0x00000007,
105df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_PANSCAN_WINDOW = 0x00000008,
106df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_RECOVERY_POINT_SEI = 0x00000009,
107a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	EXTRADATA_MPEG2_SEQDISP = 0x0000000D,
108df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_MULTISLICE_INFO = 0x7F100000,
109df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_NUM_CONCEALED_MB = 0x7F100001,
110df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_INDEX = 0x7F100002,
111df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_ASPECT_RATIO = 0x7F100003,
112df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	EXTRADATA_METADATA_FILLER = 0x7FE00002,
113df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
114df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandenum msm_vidc_interlace_type {
115df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	INTERLACE_FRAME_PROGRESSIVE = 0x01,
116df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02,
117df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04,
118df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	INTERLACE_FRAME_TOPFIELDFIRST = 0x08,
119df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10,
120df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
121df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchandenum msm_vidc_recovery_sei {
122df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	FRAME_RECONSTRUCTION_INCORRECT = 0x0,
123df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	FRAME_RECONSTRUCTION_CORRECT = 0x01,
124df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand	FRAME_RECONSTRUCTION_APPROXIMATELY_CORRECT = 0x02,
125df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand};
126df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand
127df9767d95396dfeb5d621d264110f3e69ed98f57Rom Lemarchand#endif
128