1d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#ifndef _UAPI_MSM_VDEC_H_
2d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#define _UAPI_MSM_VDEC_H_
35d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
45d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/types.h>
55d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
65d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_MAGIC 'v'
75d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
85d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_INITIALIZE   _IOWR(VDEC_IOCTL_MAGIC, 1, struct vdec_init)
95d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_SETBUFFERS   _IOW(VDEC_IOCTL_MAGIC, 2, struct vdec_buffer)
105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_QUEUE        _IOWR(VDEC_IOCTL_MAGIC, 3, \
115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin					struct vdec_input_buf)
125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_REUSEFRAMEBUFFER  _IOW(VDEC_IOCTL_MAGIC, 4, unsigned int)
135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_FLUSH        _IOW(VDEC_IOCTL_MAGIC, 5, unsigned int)
145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_EOS          _IO(VDEC_IOCTL_MAGIC, 6)
155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_GETMSG       _IOR(VDEC_IOCTL_MAGIC, 7, struct vdec_msg)
165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_CLOSE        _IO(VDEC_IOCTL_MAGIC, 8)
175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_FREEBUFFERS  _IOW(VDEC_IOCTL_MAGIC, 9, struct vdec_buf_info)
185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_GETDECATTRIBUTES   _IOR(VDEC_IOCTL_MAGIC, 10, \
195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin						struct vdec_dec_attributes)
205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_GETVERSION   _IOR(VDEC_IOCTL_MAGIC, 11, struct vdec_version)
215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_SETPROPERTY _IOW \
225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin   (VDEC_IOCTL_MAGIC, 12, struct vdec_property_info)
235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_GETPROPERTY _IOR  \
245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin   (VDEC_IOCTL_MAGIC, 13, struct vdec_property_info)
255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_IOCTL_PERFORMANCE_CHANGE_REQ  _IOW(VDEC_IOCTL_MAGIC, 14, \
265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin						unsigned int)
275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum {
295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FRAME_DECODE_OK,
305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FRAME_DECODE_ERR,
315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FATAL_ERR,
325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FLUSH_FINISH,
335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_EOS,
345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FRAME_FLUSH,
355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_STREAM_SWITCH,
365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_SUSPEND_FINISH,
375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_BUFFER_CONSUMED
385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum {
415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FLUSH_INPUT,
425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FLUSH_OUTPUT,
435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FLUSH_ALL
445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum {
475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_BUFFER_TYPE_INPUT,
485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_BUFFER_TYPE_OUTPUT,
495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_BUFFER_TYPE_INTERNAL1,
505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_BUFFER_TYPE_INTERNAL2,
515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum {
545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_QUEUE_SUCCESS,
555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_QUEUE_FAILED,
565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_QUEUE_BADSTATE,
575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum {
605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_COLOR_FORMAT_NV21 = 0x01,
615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_COLOR_FORMAT_NV21_YAMOTO = 0x02
625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin   };
635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum vdec_property_id {
655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FOURCC,
665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_PROFILE,
675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_LEVEL,
685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_DIMENSIONS,
695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_CWIN,
705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_INPUT_BUF_REQ,
715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_OUTPUT_BUF_REQ,
725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_LUMA_CHROMA_STRIDE,
735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_NUM_DAL_PORTS,
745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_PRIORITY,
755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	VDEC_FRAME_ALIGNMENT
765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum {
795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	PERF_REQUEST_SET_MIN = 0,
805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	PERF_REQUEST_LOWER,
815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	PERF_REQUEST_RAISE,
825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	PERF_REQUEST_SET_MAX
835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_input_buf_info {
865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 offset;
875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 data;
885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 size;
895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int timestamp_lo;
905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int timestamp_hi;
915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int avsync_state;
925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 flags;
935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_buf_desc {
965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 bufsize;
975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 num_min_buffers;
985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 num_max_buffers;
995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_buf_req {
1025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 max_input_queue_size;
1035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc input;
1045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc output;
1055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc dec_req1;
1065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc dec_req2;
1075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_region_info {
1105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 src_id;
1115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 offset;
1125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 size;
1135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_config {
1165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 fourcc;		/* video format */
1175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 width;		/* source width */
1185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 height;		/* source height */
1195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 order;		/* render decoder order */
1205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 notify_enable;	/* enable notify input buffer done event */
1215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 vc1_rowbase;
1225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 h264_startcode_detect;
1235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 h264_nal_len_size;
1245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 postproc_flag;
1255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 fruc_enable;
1265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 color_format;           /* used to set YUV color format */
1275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_vc1_panscan_regions {
1305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int num;
1315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int width[4];
1325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int height[4];
1335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int xoffset[4];
1345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int yoffset[4];
1355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_cropping_window {
1385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 x1;
1395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 y1;
1405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 x2;
1415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 y2;
1425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_frame_info {
1455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 status;		/* video decode status */
1465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 offset;		/* buffer offset */
1475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 data1;		/* user data field 1 */
1485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 data2;		/* user data field 2 */
1495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int timestamp_lo;	/* lower 32 bits timestamp, in msec */
1505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int timestamp_hi;	/* higher 32 bits timestamp, in msec */
1515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int cal_timestamp_lo;	/* lower 32 bits cal timestamp, in msec */
1525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int cal_timestamp_hi;	/* higher  32 bits cal timestamp, in msec */
1535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 dec_width;		/* frame roi width */
1545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 dec_height;		/* frame roi height */
1555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_cropping_window cwin;	/* The frame cropping window */
1565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 picture_type[2];	/* picture coding type */
1575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 picture_format;	/* picture coding format */
1585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 vc1_rangeY;		/* luma range mapping */
1595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 vc1_rangeUV;	/* chroma range mapping */
1605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 picture_resolution;	/* scaling factor */
1615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 frame_disp_repeat;	/* how often repeated by disp */
1625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 repeat_first_field;	/* repeat 1st field after 2nd */
1635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 top_field_first;	/* top field displayed first */
1645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 interframe_interp;	/* not for inter-frame interp */
1655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_vc1_panscan_regions panscan;	/* pan region */
1665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 concealed_macblk_num;	/* number of concealed macro blk */
1675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 flags;		/* input flags */
1685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 performance_stats;	/* performance statistics returned by decoder */
1695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 data3;              /* user data field 3 */
1705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_buf_info {
1735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 buf_type;
1745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_region_info region;
1755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 num_buf;
1765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 islast;
1775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_buffer {
1805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 pmem_id;
1815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_info buf;
1825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_sequence {
1855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u8 *header;
1865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 len;
1875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_config_sps {
1905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_config cfg;
1915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_sequence seq;
1925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_MSG_REUSEINPUTBUFFER 	1
1955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define VDEC_MSG_FRAMEDONE 		2
1965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_msg {
1985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 id;
1995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	union {
2015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin		/* id = VDEC_MSG_REUSEINPUTBUFFER */
2025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin		u32 buf_id;
2035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin		/* id = VDEC_MSG_FRAMEDONE */
2045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin		struct vdec_frame_info vfr_info;
2055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	};
2065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_init {
2095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_config_sps sps_cfg;
2105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_req *buf_req;
2115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_input_buf {
2145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 pmem_id;
2155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_input_buf_info buffer;
2165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_queue_status *queue_status;
2175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_queue_status {
2205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 status;
2215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_dec_attributes {
2245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 fourcc;
2255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 profile;
2265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 level;
2275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 dec_pic_width;
2285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 dec_pic_height;
2295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc input;
2305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc output;
2315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc dec_req1;
2325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc dec_req2;
2335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_version {
2365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 major;
2375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 minor;
2385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct dal_vdec_rectangle {
2415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 width;
2425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 height;
2435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct stride_type {
2465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 luma;
2475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 chroma;
2485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct frame_alignment_type {
2515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 luma_width;
2525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 luma_height;
2535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 chroma_width;
2545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 chroma_height;
2555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 chroma_offset;
2565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinunion vdec_property {
2595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 fourcc;
2605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 profile;
2615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 level;
2625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct dal_vdec_rectangle dim;
2635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_cropping_window cw;
2645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc input_req;
2655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct vdec_buf_desc output_req;
2665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct stride_type stride;
2675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 num_dal_ports;
2685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 priority;
2695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct frame_alignment_type frame_alignment;
2705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	u32 def_type;
2715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
2725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
2735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct vdec_property_info {
2745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	enum vdec_property_id id;
2755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	union vdec_property property;
2765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
277d9ec20e66310e5fa84a1de1c3303748f6b690542Patrick Tjin#endif /* _UAPI_MSM_VDEC_H_ */
278