#ifndef VPUAPI_H_INCLUDED
#define VPUAPI_H_INCLUDED
#include <linux/kfifo.h>
#include <linux/idr.h>
#include <linux/genalloc.h>
#include <media/v4l2-device.h>
#include <media/v4l2-mem2mem.h>
#include <media/v4l2-ctrls.h>
#include "wave5-vpuerror.h"
#include "wave5-vpuconfig.h"
#include "wave5-vdi.h"
enum product_id {
PRODUCT_ID_515,
PRODUCT_ID_521,
PRODUCT_ID_511,
PRODUCT_ID_517,
PRODUCT_ID_NONE,
};
struct vpu_attr;
enum vpu_instance_type {
VPU_INST_TYPE_DEC = 0,
VPU_INST_TYPE_ENC = 1
};
enum vpu_instance_state {
VPU_INST_STATE_NONE = 0,
VPU_INST_STATE_OPEN = 1,
VPU_INST_STATE_INIT_SEQ = 2,
VPU_INST_STATE_PIC_RUN = 3,
VPU_INST_STATE_STOP = 4
};
#define WAVE5_MAX_FBS 32
#define MAX_REG_FRAME (WAVE5_MAX_FBS * 2)
#define WAVE5_DEC_HEVC_BUF_SIZE(_w, _h) (DIV_ROUND_UP(_w, 64) * DIV_ROUND_UP(_h, 64) * 256 + 64)
#define WAVE5_DEC_AVC_BUF_SIZE(_w, _h) ((((ALIGN(_w, 256) / 16) * (ALIGN(_h, 16) / 16)) + 16) * 80)
#define WAVE5_FBC_LUMA_TABLE_SIZE(_w, _h) (ALIGN(_h, 64) * ALIGN(_w, 256) / 32)
#define WAVE5_FBC_CHROMA_TABLE_SIZE(_w, _h) (ALIGN((_h), 64) * ALIGN((_w) / 2, 256) / 32)
#define WAVE5_ENC_AVC_BUF_SIZE(_w, _h) (ALIGN(_w, 64) * ALIGN(_h, 64) / 32)
#define WAVE5_ENC_HEVC_BUF_SIZE(_w, _h) (ALIGN(_w, 64) / 64 * ALIGN(_h, 64) / 64 * 128)
enum cod_std {
STD_AVC = 0,
STD_HEVC = 12,
STD_MAX
};
enum wave_std {
W_HEVC_DEC = 0x00,
W_HEVC_ENC = 0x01,
W_AVC_DEC = 0x02,
W_AVC_ENC = 0x03,
STD_UNKNOWN = 0xFF
};
enum set_param_option {
OPT_COMMON = 0,
OPT_CUSTOM_GOP = 1,
OPT_CUSTOM_HEADER = 2,
OPT_VUI = 3,
OPT_CHANGE_PARAM = 0x10,
};
#define HEVC_PROFILE_MAIN 1
#define HEVC_PROFILE_MAIN10 2
#define HEVC_PROFILE_STILLPICTURE 3
#define HEVC_PROFILE_MAIN10_STILLPICTURE 2
#define H264_PROFILE_BP 1
#define H264_PROFILE_MP 2
#define H264_PROFILE_EXTENDED 3
#define H264_PROFILE_HP 4
#define H264_PROFILE_HIGH10 5
#define H264_PROFILE_HIGH422 6
#define H264_PROFILE_HIGH444 7
#define INIT_SEQ_NORMAL 1
#define DEC_PIC_NORMAL 0
#define BIT_ALLOC_MODE_FIXED_RATIO 2
#define MAX_BIT_RATE 700000000
#define DEC_REFRESH_TYPE_NON_IRAP 0
#define DEC_REFRESH_TYPE_CRA 1
#define DEC_REFRESH_TYPE_IDR 2
#define DEPEND_SLICE_MODE_RECOMMENDED 1
#define DEPEND_SLICE_MODE_BOOST 2
#define DEPEND_SLICE_MODE_FAST 3
#define MAX_HVS_MAX_DELTA_QP 51
#define REFRESH_MODE_CTU_ROWS 1
#define REFRESH_MODE_CTU_COLUMNS 2
#define REFRESH_MODE_CTU_STEP_SIZE 3
#define REFRESH_MODE_CTUS 4
#define REFRESH_MB_MODE_NONE 0
#define REFRESH_MB_MODE_CTU_ROWS 1
#define REFRESH_MB_MODE_CTU_COLUMNS 2
#define REFRESH_MB_MODE_CTU_STEP_SIZE 3
#define MAX_INTRA_QP 63
#define MAX_INTER_WEIGHT 31
#define MAX_INTRA_WEIGHT 31
#define MAX_NOISE_SIGMA 255
#define MIN_BITSTREAM_BUFFER_SIZE 1024
#define MIN_BITSTREAM_BUFFER_SIZE_WAVE521 (1024 * 64)
#define MIN_VBV_BUFFER_SIZE 10
#define MAX_VBV_BUFFER_SIZE 3000
#define BUFFER_MARGIN 4096
#define MAX_FIRMWARE_CALL_RETRY 10
#define VDI_LITTLE_ENDIAN 0x0
#define SEQ_CHANGE_ENABLE_PROFILE BIT(5)
#define SEQ_CHANGE_ENABLE_SIZE BIT(16)
#define SEQ_CHANGE_ENABLE_BITDEPTH BIT(18)
#define SEQ_CHANGE_ENABLE_DPB_COUNT BIT(19)
#define SEQ_CHANGE_ENABLE_ASPECT_RATIO BIT(21)
#define SEQ_CHANGE_ENABLE_VIDEO_SIGNAL BIT(23)
#define SEQ_CHANGE_ENABLE_VUI_TIMING_INFO BIT(29)
#define SEQ_CHANGE_ENABLE_ALL_HEVC (SEQ_CHANGE_ENABLE_PROFILE | \
SEQ_CHANGE_ENABLE_SIZE | \
SEQ_CHANGE_ENABLE_BITDEPTH | \
SEQ_CHANGE_ENABLE_DPB_COUNT)
#define SEQ_CHANGE_ENABLE_ALL_AVC (SEQ_CHANGE_ENABLE_SIZE | \
SEQ_CHANGE_ENABLE_BITDEPTH | \
SEQ_CHANGE_ENABLE_DPB_COUNT | \
SEQ_CHANGE_ENABLE_ASPECT_RATIO | \
SEQ_CHANGE_ENABLE_VIDEO_SIGNAL | \
SEQ_CHANGE_ENABLE_VUI_TIMING_INFO)
#define DISPLAY_IDX_FLAG_SEQ_END -1
#define DISPLAY_IDX_FLAG_NO_FB -3
#define DECODED_IDX_FLAG_NO_FB -1
#define DECODED_IDX_FLAG_SKIP -2
#define RECON_IDX_FLAG_ENC_END -1
#define RECON_IDX_FLAG_ENC_DELAY -2
#define RECON_IDX_FLAG_HEADER_ONLY -3
#define RECON_IDX_FLAG_CHANGE_PARAM -4
enum codec_command {
ENABLE_ROTATION,
ENABLE_MIRRORING,
SET_MIRROR_DIRECTION,
SET_ROTATION_ANGLE,
DEC_GET_QUEUE_STATUS,
ENC_GET_QUEUE_STATUS,
DEC_RESET_FRAMEBUF_INFO,
DEC_GET_SEQ_INFO,
};
enum mirror_direction {
MIRDIR_NONE,
MIRDIR_VER,
MIRDIR_HOR,
MIRDIR_HOR_VER
};
enum frame_buffer_format {
FORMAT_ERR = -1,
FORMAT_420 = 0,
FORMAT_422,
FORMAT_224,
FORMAT_444,
FORMAT_400,
FORMAT_420_P10_16BIT_MSB = 5,
FORMAT_420_P10_16BIT_LSB,
FORMAT_420_P10_32BIT_MSB,
FORMAT_420_P10_32BIT_LSB,
FORMAT_422_P10_16BIT_MSB,
FORMAT_422_P10_16BIT_LSB,
FORMAT_422_P10_32BIT_MSB,
FORMAT_422_P10_32BIT_LSB,
FORMAT_YUYV,
FORMAT_YUYV_P10_16BIT_MSB,
FORMAT_YUYV_P10_16BIT_LSB,
FORMAT_YUYV_P10_32BIT_MSB,
FORMAT_YUYV_P10_32BIT_LSB,
FORMAT_YVYU,
FORMAT_YVYU_P10_16BIT_MSB,
FORMAT_YVYU_P10_16BIT_LSB,
FORMAT_YVYU_P10_32BIT_MSB,
FORMAT_YVYU_P10_32BIT_LSB,
FORMAT_UYVY,
FORMAT_UYVY_P10_16BIT_MSB,
FORMAT_UYVY_P10_16BIT_LSB,
FORMAT_UYVY_P10_32BIT_MSB,
FORMAT_UYVY_P10_32BIT_LSB,
FORMAT_VYUY,
FORMAT_VYUY_P10_16BIT_MSB,
FORMAT_VYUY_P10_16BIT_LSB,
FORMAT_VYUY_P10_32BIT_MSB,
FORMAT_VYUY_P10_32BIT_LSB,
FORMAT_MAX,
};
enum packed_format_num {
NOT_PACKED = 0,
PACKED_YUYV,
PACKED_YVYU,
PACKED_UYVY,
PACKED_VYUY,
};
enum wave5_interrupt_bit {
INT_WAVE5_INIT_VPU = 0,
INT_WAVE5_WAKEUP_VPU = 1,
INT_WAVE5_SLEEP_VPU = 2,
INT_WAVE5_CREATE_INSTANCE = 3,
INT_WAVE5_FLUSH_INSTANCE = 4,
INT_WAVE5_DESTROY_INSTANCE = 5,
INT_WAVE5_INIT_SEQ = 6,
INT_WAVE5_SET_FRAMEBUF = 7,
INT_WAVE5_DEC_PIC = 8,
INT_WAVE5_ENC_PIC = 8,
INT_WAVE5_ENC_SET_PARAM = 9,
INT_WAVE5_DEC_QUERY = 14,
INT_WAVE5_BSBUF_EMPTY = 15,
INT_WAVE5_BSBUF_FULL = 15,
};
enum pic_type {
PIC_TYPE_I = 0,
PIC_TYPE_P = 1,
PIC_TYPE_B = 2,
PIC_TYPE_IDR = 5,
PIC_TYPE_MAX
};
enum sw_reset_mode {
SW_RESET_SAFETY,
SW_RESET_FORCE,
SW_RESET_ON_BOOT
};
enum tiled_map_type {
LINEAR_FRAME_MAP = 0,
COMPRESSED_FRAME_MAP = 17,
};
enum temporal_id_mode {
TEMPORAL_ID_MODE_ABSOLUTE,
TEMPORAL_ID_MODE_RELATIVE,
};
struct vpu_attr {
u32 product_id;
char product_name[8];
u32 product_version;
u32 fw_version;
u32 customer_id;
u32 support_decoders;
u32 support_encoders;
u32 support_backbone: 1;
u32 support_avc10bit_enc: 1;
u32 support_hevc10bit_enc: 1;
u32 support_hevc10bit_dec: 1;
u32 support_vcore_backbone: 1;
u32 support_vcpu_backbone: 1;
};
struct frame_buffer {
dma_addr_t buf_y;
dma_addr_t buf_cb;
dma_addr_t buf_cr;
unsigned int buf_y_size;
unsigned int buf_cb_size;
unsigned int buf_cr_size;
enum tiled_map_type map_type;
unsigned int stride;
unsigned int width;
unsigned int height;
size_t size;
unsigned int sequence_no;
bool update_fb_info;
};
struct vpu_rect {
unsigned int left;
unsigned int top;
unsigned int right;
unsigned int bottom;
};
struct dec_open_param {
dma_addr_t bitstream_buffer;
size_t bitstream_buffer_size;
};
struct dec_initial_info {
u32 pic_width;
u32 pic_height;
struct vpu_rect pic_crop_rect;
u32 min_frame_buffer_count;
u32 profile;
u32 luma_bitdepth;
u32 chroma_bitdepth;
u32 seq_init_err_reason;
dma_addr_t rd_ptr;
dma_addr_t wr_ptr;
u32 sequence_no;
u32 vlc_buf_size;
u32 param_buf_size;
};
struct dec_output_info {
s32 index_frame_display;
s32 index_frame_decoded;
s32 index_frame_decoded_for_tiled;
u32 nal_type;
unsigned int pic_type;
struct vpu_rect rc_display;
unsigned int disp_pic_width;
unsigned int disp_pic_height;
struct vpu_rect rc_decoded;
u32 dec_pic_width;
u32 dec_pic_height;
s32 decoded_poc;
int temporal_id;
dma_addr_t rd_ptr;
dma_addr_t wr_ptr;
struct frame_buffer disp_frame;
u32 frame_display_flag;
unsigned int frame_cycle;
u32 sequence_no;
u32 dec_host_cmd_tick;
u32 dec_decode_end_tick;
u32 sequence_changed;
};
struct queue_status_info {
u32 instance_queue_count;
u32 report_queue_count;
};
#define MAX_NUM_TEMPORAL_LAYER 7
#define MAX_NUM_SPATIAL_LAYER 3
#define MAX_GOP_NUM 8
struct custom_gop_pic_param {
u32 pic_type;
u32 poc_offset;
u32 pic_qp;
u32 use_multi_ref_p;
u32 ref_poc_l0;
u32 ref_poc_l1;
s32 temporal_id;
};
struct enc_wave_param {
u32 profile;
u32 level;
u32 internal_bit_depth: 4;
u32 gop_preset_idx: 4;
u32 decoding_refresh_type: 2;
u32 intra_qp;
u32 intra_period;
u32 conf_win_top;
u32 conf_win_bot;
u32 conf_win_left;
u32 conf_win_right;
u32 intra_refresh_mode: 3;
u32 intra_refresh_arg;
u32 depend_slice_mode : 2;
u32 depend_slice_mode_arg;
u32 independ_slice_mode : 1;
u32 independ_slice_mode_arg;
u32 max_num_merge: 2;
s32 beta_offset_div2: 4;
s32 tc_offset_div2: 4;
u32 hvs_qp_scale: 4;
u32 hvs_max_delta_qp;
s32 chroma_cb_qp_offset;
s32 chroma_cr_qp_offset;
s32 initial_rc_qp;
u32 nr_intra_weight_y;
u32 nr_intra_weight_cb;
u32 nr_intra_weight_cr;
u32 nr_inter_weight_y;
u32 nr_inter_weight_cb;
u32 nr_inter_weight_cr;
u32 min_qp_i;
u32 max_qp_i;
u32 min_qp_p;
u32 max_qp_p;
u32 min_qp_b;
u32 max_qp_b;
u32 avc_idr_period;
u32 avc_slice_arg;
u32 intra_mb_refresh_mode: 2;
u32 intra_mb_refresh_arg;
u32 rc_weight_param;
u32 rc_weight_buf;
u32 en_still_picture: 1;
u32 tier: 1;
u32 avc_slice_mode: 1;
u32 entropy_coding_mode: 1;
u32 lossless_enable: 1;
u32 const_intra_pred_flag: 1;
u32 tmvp_enable: 1;
u32 wpp_enable: 1;
u32 disable_deblk: 1;
u32 lf_cross_slice_boundary_enable: 1;
u32 skip_intra_trans: 1;
u32 sao_enable: 1;
u32 intra_nx_n_enable: 1;
u32 cu_level_rc_enable: 1;
u32 hvs_qp_enable: 1;
u32 strong_intra_smooth_enable: 1;
u32 rdo_skip: 1;
u32 lambda_scaling_enable: 1;
u32 transform8x8_enable: 1;
u32 mb_level_rc_enable: 1;
u32 forced_idr_header_enable: 1;
};
struct enc_open_param {
dma_addr_t bitstream_buffer;
unsigned int bitstream_buffer_size;
u32 pic_width;
u32 pic_height;
u32 frame_rate_info;
u32 vbv_buffer_size;
u32 bit_rate;
struct enc_wave_param wave_param;
enum packed_format_num packed_format;
enum frame_buffer_format src_format;
bool line_buf_int_en;
u32 rc_enable : 1;
};
struct enc_initial_info {
u32 min_frame_buffer_count;
u32 min_src_frame_count;
u32 seq_init_err_reason;
u32 warn_info;
u32 vlc_buf_size;
u32 param_buf_size;
};
struct enc_code_opt {
u32 implicit_header_encode: 1;
u32 encode_vcl: 1;
u32 encode_vps: 1;
u32 encode_sps: 1;
u32 encode_pps: 1;
u32 encode_aud: 1;
u32 encode_eos: 1;
u32 encode_eob: 1;
u32 encode_vui: 1;
};
struct enc_param {
struct frame_buffer *source_frame;
u32 pic_stream_buffer_addr;
u64 pic_stream_buffer_size;
u32 src_idx;
struct enc_code_opt code_option;
u64 pts;
bool src_end_flag;
};
struct enc_output_info {
u32 bitstream_buffer;
u32 bitstream_size;
u32 pic_type: 2;
s32 recon_frame_index;
dma_addr_t rd_ptr;
dma_addr_t wr_ptr;
u32 enc_pic_byte;
s32 enc_src_idx;
u32 enc_vcl_nut;
u32 error_reason;
u32 warn_info;
unsigned int frame_cycle;
u64 pts;
u32 enc_host_cmd_tick;
u32 enc_encode_end_tick;
};
enum enc_pic_code_option {
CODEOPT_ENC_HEADER_IMPLICIT = BIT(0),
CODEOPT_ENC_VCL = BIT(1),
};
enum gop_preset_idx {
PRESET_IDX_CUSTOM_GOP = 0,
PRESET_IDX_ALL_I = 1,
PRESET_IDX_IPP = 2,
PRESET_IDX_IBBB = 3,
PRESET_IDX_IBPBP = 4,
PRESET_IDX_IBBBP = 5,
PRESET_IDX_IPPPP = 6,
PRESET_IDX_IBBBB = 7,
PRESET_IDX_RA_IB = 8,
PRESET_IDX_IPP_SINGLE = 9,
};
struct sec_axi_info {
u32 use_ip_enable;
u32 use_bit_enable;
u32 use_lf_row_enable: 1;
u32 use_enc_rdo_enable: 1;
u32 use_enc_lf_enable: 1;
};
struct dec_info {
struct dec_open_param open_param;
struct dec_initial_info initial_info;
struct dec_initial_info new_seq_info;
u32 stream_wr_ptr;
u32 stream_rd_ptr;
u32 frame_display_flag;
dma_addr_t stream_buf_start_addr;
dma_addr_t stream_buf_end_addr;
u32 stream_buf_size;
struct vpu_buf vb_mv[MAX_REG_FRAME];
struct vpu_buf vb_fbc_y_tbl[MAX_REG_FRAME];
struct vpu_buf vb_fbc_c_tbl[MAX_REG_FRAME];
unsigned int num_of_decoding_fbs: 7;
unsigned int num_of_display_fbs: 7;
unsigned int stride;
struct sec_axi_info sec_axi_info;
dma_addr_t user_data_buf_addr;
u32 user_data_enable;
u32 user_data_buf_size;
struct vpu_buf vb_work;
struct vpu_buf vb_task;
struct dec_output_info dec_out_info[WAVE5_MAX_FBS];
u32 seq_change_mask;
enum temporal_id_mode temp_id_select_mode;
u32 target_temp_id;
u32 target_spatial_id;
u32 instance_queue_count;
u32 report_queue_count;
u32 cycle_per_tick;
u32 product_code;
u32 vlc_buf_size;
u32 param_buf_size;
bool initial_info_obtained;
bool reorder_enable;
bool first_cycle_check;
u32 stream_endflag: 1;
};
struct enc_info {
struct enc_open_param open_param;
struct enc_initial_info initial_info;
u32 stream_rd_ptr;
u32 stream_wr_ptr;
dma_addr_t stream_buf_start_addr;
dma_addr_t stream_buf_end_addr;
u32 stream_buf_size;
unsigned int num_frame_buffers;
unsigned int stride;
bool rotation_enable;
bool mirror_enable;
enum mirror_direction mirror_direction;
unsigned int rotation_angle;
bool initial_info_obtained;
struct sec_axi_info sec_axi_info;
bool line_buf_int_en;
struct vpu_buf vb_work;
struct vpu_buf vb_mv;
struct vpu_buf vb_fbc_y_tbl;
struct vpu_buf vb_fbc_c_tbl;
struct vpu_buf vb_sub_sam_buf;
struct vpu_buf vb_task;
u64 cur_pts;
u64 pts_map[32];
u32 instance_queue_count;
u32 report_queue_count;
bool first_cycle_check;
u32 cycle_per_tick;
u32 product_code;
u32 vlc_buf_size;
u32 param_buf_size;
};
struct vpu_device {
struct device *dev;
struct v4l2_device v4l2_dev;
struct v4l2_m2m_dev *v4l2_m2m_dec_dev;
struct v4l2_m2m_dev *v4l2_m2m_enc_dev;
struct list_head instances;
struct video_device *video_dev_dec;
struct video_device *video_dev_enc;
struct mutex dev_lock;
struct mutex hw_lock;
struct mutex irq_lock;
int irq;
enum product_id product;
struct vpu_attr attr;
struct vpu_buf common_mem;
u32 last_performance_cycles;
u32 sram_size;
struct gen_pool *sram_pool;
struct vpu_buf sram_buf;
void __iomem *vdb_register;
u32 product_code;
struct ida inst_ida;
struct clk_bulk_data *clks;
struct hrtimer hrtimer;
struct kthread_work work;
struct kthread_worker *worker;
int vpu_poll_interval;
int num_clks;
struct task_struct *irq_thread;
struct semaphore irq_sem;
struct reset_control *resets;
spinlock_t irq_spinlock;
};
struct vpu_instance;
struct vpu_instance_ops {
void (*finish_process)(struct vpu_instance *inst);
};
struct vpu_instance {
struct list_head list;
struct v4l2_fh v4l2_fh;
struct v4l2_m2m_dev *v4l2_m2m_dev;
struct v4l2_ctrl_handler v4l2_ctrl_hdl;
struct vpu_device *dev;
struct completion irq_done;
struct v4l2_pix_format_mplane src_fmt;
struct v4l2_pix_format_mplane dst_fmt;
enum v4l2_colorspace colorspace;
enum v4l2_xfer_func xfer_func;
enum v4l2_ycbcr_encoding ycbcr_enc;
enum v4l2_quantization quantization;
struct kfifo irq_status;
enum vpu_instance_state state;
enum vpu_instance_type type;
const struct vpu_instance_ops *ops;
spinlock_t state_spinlock;
enum wave_std std;
s32 id;
union {
struct enc_info enc_info;
struct dec_info dec_info;
} *codec_info;
struct frame_buffer frame_buf[MAX_REG_FRAME];
struct vpu_buf frame_vbuf[MAX_REG_FRAME];
u32 fbc_buf_count;
u32 queued_src_buf_num;
u32 queued_dst_buf_num;
struct list_head avail_src_bufs;
struct list_head avail_dst_bufs;
struct v4l2_rect conf_win;
u64 timestamp;
enum frame_buffer_format output_format;
bool cbcr_interleave;
bool nv21;
bool eos;
bool sent_eos;
bool retry;
int queuing_num;
struct mutex feed_lock;
bool queuing_fail;
bool empty_queue;
struct vpu_buf bitstream_vbuf;
dma_addr_t last_rd_ptr;
size_t remaining_consumed_bytes;
bool needs_reallocation;
unsigned int min_src_buf_count;
unsigned int rot_angle;
unsigned int mirror_direction;
unsigned int bit_depth;
unsigned int frame_rate;
unsigned int vbv_buf_size;
unsigned int rc_mode;
unsigned int rc_enable;
unsigned int bit_rate;
unsigned int encode_aud;
struct enc_wave_param enc_param;
};
void wave5_vdi_write_register(struct vpu_device *vpu_dev, u32 addr, u32 data);
u32 wave5_vdi_read_register(struct vpu_device *vpu_dev, u32 addr);
int wave5_vdi_clear_memory(struct vpu_device *vpu_dev, struct vpu_buf *vb);
int wave5_vdi_allocate_dma_memory(struct vpu_device *vpu_dev, struct vpu_buf *vb);
int wave5_vdi_allocate_array(struct vpu_device *vpu_dev, struct vpu_buf *array, unsigned int count,
size_t size);
int wave5_vdi_write_memory(struct vpu_device *vpu_dev, struct vpu_buf *vb, size_t offset,
u8 *data, size_t len);
int wave5_vdi_free_dma_memory(struct vpu_device *vpu_dev, struct vpu_buf *vb);
void wave5_vdi_allocate_sram(struct vpu_device *vpu_dev);
void wave5_vdi_free_sram(struct vpu_device *vpu_dev);
int wave5_vpu_init_with_bitcode(struct device *dev, u8 *bitcode, size_t size);
int wave5_vpu_flush_instance(struct vpu_instance *inst);
int wave5_vpu_get_version_info(struct device *dev, u32 *revision, unsigned int *product_id);
int wave5_vpu_dec_open(struct vpu_instance *inst, struct dec_open_param *open_param);
int wave5_vpu_dec_close(struct vpu_instance *inst, u32 *fail_res);
int wave5_vpu_dec_issue_seq_init(struct vpu_instance *inst);
int wave5_vpu_dec_complete_seq_init(struct vpu_instance *inst, struct dec_initial_info *info);
int wave5_vpu_dec_register_frame_buffer_ex(struct vpu_instance *inst, int num_of_decoding_fbs,
int num_of_display_fbs, int stride, int height);
int wave5_vpu_dec_start_one_frame(struct vpu_instance *inst, u32 *res_fail);
int wave5_vpu_dec_get_output_info(struct vpu_instance *inst, struct dec_output_info *info);
int wave5_vpu_dec_set_rd_ptr(struct vpu_instance *inst, dma_addr_t addr, int update_wr_ptr);
dma_addr_t wave5_vpu_dec_get_rd_ptr(struct vpu_instance *inst);
int wave5_vpu_dec_reset_framebuffer(struct vpu_instance *inst, unsigned int index);
int wave5_vpu_dec_give_command(struct vpu_instance *inst, enum codec_command cmd, void *parameter);
int wave5_vpu_dec_get_bitstream_buffer(struct vpu_instance *inst, dma_addr_t *prd_ptr,
dma_addr_t *pwr_ptr, size_t *size);
int wave5_vpu_dec_update_bitstream_buffer(struct vpu_instance *inst, size_t size);
int wave5_vpu_dec_clr_disp_flag(struct vpu_instance *inst, int index);
int wave5_vpu_dec_set_disp_flag(struct vpu_instance *inst, int index);
int wave5_vpu_enc_open(struct vpu_instance *inst, struct enc_open_param *open_param);
int wave5_vpu_enc_close(struct vpu_instance *inst, u32 *fail_res);
int wave5_vpu_enc_issue_seq_init(struct vpu_instance *inst);
int wave5_vpu_enc_complete_seq_init(struct vpu_instance *inst, struct enc_initial_info *info);
int wave5_vpu_enc_register_frame_buffer(struct vpu_instance *inst, unsigned int num,
unsigned int stride, int height,
enum tiled_map_type map_type);
int wave5_vpu_enc_start_one_frame(struct vpu_instance *inst, struct enc_param *param,
u32 *fail_res);
int wave5_vpu_enc_get_output_info(struct vpu_instance *inst, struct enc_output_info *info);
int wave5_vpu_enc_give_command(struct vpu_instance *inst, enum codec_command cmd, void *parameter);
#endif