#ifndef _MSM_VDEC_H_
#define _MSM_VDEC_H_

#include <linux/types.h>

#define VDEC_IOCTL_MAGIC 'v'

#define VDEC_IOCTL_INITIALIZE   _IOWR(VDEC_IOCTL_MAGIC, 1, struct vdec_init)
#define VDEC_IOCTL_SETBUFFERS   _IOW(VDEC_IOCTL_MAGIC, 2, struct vdec_buffer)
#define VDEC_IOCTL_QUEUE        _IOWR(VDEC_IOCTL_MAGIC, 3, \
					struct vdec_input_buf)
#define VDEC_IOCTL_REUSEFRAMEBUFFER  _IOW(VDEC_IOCTL_MAGIC, 4, unsigned int)
#define VDEC_IOCTL_FLUSH        _IOW(VDEC_IOCTL_MAGIC, 5, unsigned int)
#define VDEC_IOCTL_EOS          _IO(VDEC_IOCTL_MAGIC, 6)
#define VDEC_IOCTL_GETMSG       _IOR(VDEC_IOCTL_MAGIC, 7, struct vdec_msg)
#define VDEC_IOCTL_CLOSE        _IO(VDEC_IOCTL_MAGIC, 8)
#define VDEC_IOCTL_FREEBUFFERS  _IOW(VDEC_IOCTL_MAGIC, 9, struct vdec_buf_info)
#define VDEC_IOCTL_GETDECATTRIBUTES   _IOR(VDEC_IOCTL_MAGIC, 10, \
						struct vdec_dec_attributes)
#define VDEC_IOCTL_GETVERSION   _IOR(VDEC_IOCTL_MAGIC, 11, struct vdec_version)
#define VDEC_IOCTL_SETPROPERTY _IOW \
   (VDEC_IOCTL_MAGIC, 12, struct vdec_property_info)
#define VDEC_IOCTL_GETPROPERTY _IOR  \
   (VDEC_IOCTL_MAGIC, 13, struct vdec_property_info)
#define VDEC_IOCTL_PERFORMANCE_CHANGE_REQ  _IOW(VDEC_IOCTL_MAGIC, 14, \
						unsigned int)

enum {
	VDEC_FRAME_DECODE_OK,
	VDEC_FRAME_DECODE_ERR,
	VDEC_FATAL_ERR,
	VDEC_FLUSH_FINISH,
	VDEC_EOS,
	VDEC_FRAME_FLUSH,
	VDEC_STREAM_SWITCH,
	VDEC_SUSPEND_FINISH,
	VDEC_BUFFER_CONSUMED
};

enum {
	VDEC_FLUSH_INPUT,
	VDEC_FLUSH_OUTPUT,
	VDEC_FLUSH_ALL
};

enum {
	VDEC_BUFFER_TYPE_INPUT,
	VDEC_BUFFER_TYPE_OUTPUT,
	VDEC_BUFFER_TYPE_INTERNAL1,
	VDEC_BUFFER_TYPE_INTERNAL2,
};

enum {
	VDEC_QUEUE_SUCCESS,
	VDEC_QUEUE_FAILED,
	VDEC_QUEUE_BADSTATE,
};

enum {
	VDEC_COLOR_FORMAT_NV21 = 0x01,
	VDEC_COLOR_FORMAT_NV21_YAMOTO = 0x02
   };

enum vdec_property_id {
	VDEC_FOURCC,
	VDEC_PROFILE,
	VDEC_LEVEL,
	VDEC_DIMENSIONS,
	VDEC_CWIN,
	VDEC_INPUT_BUF_REQ,
	VDEC_OUTPUT_BUF_REQ,
	VDEC_LUMA_CHROMA_STRIDE,
	VDEC_NUM_DAL_PORTS,
	VDEC_PRIORITY,
	VDEC_FRAME_ALIGNMENT
};

enum {
	PERF_REQUEST_SET_MIN = 0,
	PERF_REQUEST_LOWER,
	PERF_REQUEST_RAISE,
	PERF_REQUEST_SET_MAX
};

struct vdec_input_buf_info {
	u32 offset;
	u32 data;
	u32 size;
	int timestamp_lo;
	int timestamp_hi;
	int avsync_state;
	u32 flags;
};

struct vdec_buf_desc {
	u32 bufsize;
	u32 num_min_buffers;
	u32 num_max_buffers;
};

struct vdec_buf_req {
	u32 max_input_queue_size;
	struct vdec_buf_desc input;
	struct vdec_buf_desc output;
	struct vdec_buf_desc dec_req1;
	struct vdec_buf_desc dec_req2;
};

struct vdec_region_info {
	u32 src_id;
	u32 offset;
	u32 size;
};

struct vdec_config {
	u32 fourcc;		/* video format */
	u32 width;		/* source width */
	u32 height;		/* source height */
	u32 order;		/* render decoder order */
	u32 notify_enable;	/* enable notify input buffer done event */
	u32 vc1_rowbase;
	u32 h264_startcode_detect;
	u32 h264_nal_len_size;
	u32 postproc_flag;
	u32 fruc_enable;
	u32 color_format;           /* used to set YUV color format */
};

struct vdec_vc1_panscan_regions {
	int num;
	int width[4];
	int height[4];
	int xoffset[4];
	int yoffset[4];
};

struct vdec_cropping_window {
	u32 x1;
	u32 y1;
	u32 x2;
	u32 y2;
};

struct vdec_frame_info {
	u32 status;		/* video decode status */
	u32 offset;		/* buffer offset */
	u32 data1;		/* user data field 1 */
	u32 data2;		/* user data field 2 */
	int timestamp_lo;	/* lower 32 bits timestamp, in msec */
	int timestamp_hi;	/* higher 32 bits timestamp, in msec */
	int cal_timestamp_lo;	/* lower 32 bits cal timestamp, in msec */
	int cal_timestamp_hi;	/* higher  32 bits cal timestamp, in msec */
	u32 dec_width;		/* frame roi width */
	u32 dec_height;		/* frame roi height */
	struct vdec_cropping_window cwin;	/* The frame cropping window */
	u32 picture_type[2];	/* picture coding type */
	u32 picture_format;	/* picture coding format */
	u32 vc1_rangeY;		/* luma range mapping */
	u32 vc1_rangeUV;	/* chroma range mapping */
	u32 picture_resolution;	/* scaling factor */
	u32 frame_disp_repeat;	/* how often repeated by disp */
	u32 repeat_first_field;	/* repeat 1st field after 2nd */
	u32 top_field_first;	/* top field displayed first */
	u32 interframe_interp;	/* not for inter-frame interp */
	struct vdec_vc1_panscan_regions panscan;	/* pan region */
	u32 concealed_macblk_num;	/* number of concealed macro blk */
	u32 flags;		/* input flags */
	u32 performance_stats;	/* performance statistics returned by decoder */
	u32 data3;              /* user data field 3 */
};

struct vdec_buf_info {
	u32 buf_type;
	struct vdec_region_info region;
	u32 num_buf;
	u32 islast;
};

struct vdec_buffer {
	u32 pmem_id;
	struct vdec_buf_info buf;
};

struct vdec_sequence {
	u8 *header;
	u32 len;
};

struct vdec_config_sps {
	struct vdec_config cfg;
	struct vdec_sequence seq;
};

#define VDEC_MSG_REUSEINPUTBUFFER 	1
#define VDEC_MSG_FRAMEDONE 		2

struct vdec_msg {
	u32 id;

	union {
		/* id = VDEC_MSG_REUSEINPUTBUFFER */
		u32 buf_id;
		/* id = VDEC_MSG_FRAMEDONE */
		struct vdec_frame_info vfr_info;
	};
};

struct vdec_init {
	struct vdec_config_sps sps_cfg;
	struct vdec_buf_req *buf_req;
};

struct vdec_input_buf {
	u32 pmem_id;
	struct vdec_input_buf_info buffer;
	struct vdec_queue_status *queue_status;
};

struct vdec_queue_status {
	u32 status;
};

struct vdec_dec_attributes {
	u32 fourcc;
	u32 profile;
	u32 level;
	u32 dec_pic_width;
	u32 dec_pic_height;
	struct vdec_buf_desc input;
	struct vdec_buf_desc output;
	struct vdec_buf_desc dec_req1;
	struct vdec_buf_desc dec_req2;
};

struct vdec_version {
	u32 major;
	u32 minor;
};

struct dal_vdec_rectangle {
	u32 width;
	u32 height;
};

struct stride_type {
	u32 luma;
	u32 chroma;
};

struct frame_alignment_type {
	u32 luma_width;
	u32 luma_height;
	u32 chroma_width;
	u32 chroma_height;
	u32 chroma_offset;
};

union vdec_property {
	u32 fourcc;
	u32 profile;
	u32 level;
	struct dal_vdec_rectangle dim;
	struct vdec_cropping_window cw;
	struct vdec_buf_desc input_req;
	struct vdec_buf_desc output_req;
	struct stride_type stride;
	u32 num_dal_ports;
	u32 priority;
	struct frame_alignment_type frame_alignment;
	u32 def_type;
};

struct vdec_property_info {
	enum vdec_property_id id;
	union vdec_property property;
};
#endif /* _MSM_VDEC_H_ */
