s5p_mfc_opr.h revision 43a1ea1f90382a6a8fcf5ed94835b8518ebdefc8
1/*
2 * drivers/media/platform/s5p-mfc/s5p_mfc_opr.h
3 *
4 * Header file for Samsung MFC (Multi Function Codec - FIMV) driver
5 * Contains declarations of hw related functions.
6 *
7 * Kamil Debski, Copyright (C) 2012 Samsung Electronics Co., Ltd.
8 * http://www.samsung.com/
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#ifndef S5P_MFC_OPR_H_
16#define S5P_MFC_OPR_H_
17
18#include "s5p_mfc_common.h"
19
20struct s5p_mfc_hw_ops {
21	int (*alloc_dec_temp_buffers)(struct s5p_mfc_ctx *ctx);
22	void (*release_dec_desc_buffer)(struct s5p_mfc_ctx *ctx);
23	int (*alloc_codec_buffers)(struct s5p_mfc_ctx *ctx);
24	void (*release_codec_buffers)(struct s5p_mfc_ctx *ctx);
25	int (*alloc_instance_buffer)(struct s5p_mfc_ctx *ctx);
26	void (*release_instance_buffer)(struct s5p_mfc_ctx *ctx);
27	int (*alloc_dev_context_buffer)(struct s5p_mfc_dev *dev);
28	void (*release_dev_context_buffer)(struct s5p_mfc_dev *dev);
29	void (*dec_calc_dpb_size)(struct s5p_mfc_ctx *ctx);
30	void (*enc_calc_src_size)(struct s5p_mfc_ctx *ctx);
31	int (*set_dec_stream_buffer)(struct s5p_mfc_ctx *ctx,
32			int buf_addr, unsigned int start_num_byte,
33			unsigned int buf_size);
34	int (*set_dec_frame_buffer)(struct s5p_mfc_ctx *ctx);
35	int (*set_enc_stream_buffer)(struct s5p_mfc_ctx *ctx,
36			unsigned long addr, unsigned int size);
37	void (*set_enc_frame_buffer)(struct s5p_mfc_ctx *ctx,
38			unsigned long y_addr, unsigned long c_addr);
39	void (*get_enc_frame_buffer)(struct s5p_mfc_ctx *ctx,
40			unsigned long *y_addr, unsigned long *c_addr);
41	int (*set_enc_ref_buffer)(struct s5p_mfc_ctx *ctx);
42	int (*init_decode)(struct s5p_mfc_ctx *ctx);
43	int (*init_encode)(struct s5p_mfc_ctx *ctx);
44	int (*encode_one_frame)(struct s5p_mfc_ctx *ctx);
45	void (*try_run)(struct s5p_mfc_dev *dev);
46	void (*cleanup_queue)(struct list_head *lh,
47			struct vb2_queue *vq);
48	void (*clear_int_flags)(struct s5p_mfc_dev *dev);
49	void (*write_info)(struct s5p_mfc_ctx *ctx, unsigned int data,
50			unsigned int ofs);
51	unsigned int (*read_info)(struct s5p_mfc_ctx *ctx,
52			unsigned int ofs);
53	int (*get_dspl_y_adr)(struct s5p_mfc_dev *dev);
54	int (*get_dec_y_adr)(struct s5p_mfc_dev *dev);
55	int (*get_dspl_status)(struct s5p_mfc_dev *dev);
56	int (*get_dec_status)(struct s5p_mfc_dev *dev);
57	int (*get_dec_frame_type)(struct s5p_mfc_dev *dev);
58	int (*get_disp_frame_type)(struct s5p_mfc_ctx *ctx);
59	int (*get_consumed_stream)(struct s5p_mfc_dev *dev);
60	int (*get_int_reason)(struct s5p_mfc_dev *dev);
61	int (*get_int_err)(struct s5p_mfc_dev *dev);
62	int (*err_dec)(unsigned int err);
63	int (*err_dspl)(unsigned int err);
64	int (*get_img_width)(struct s5p_mfc_dev *dev);
65	int (*get_img_height)(struct s5p_mfc_dev *dev);
66	int (*get_dpb_count)(struct s5p_mfc_dev *dev);
67	int (*get_mv_count)(struct s5p_mfc_dev *dev);
68	int (*get_inst_no)(struct s5p_mfc_dev *dev);
69	int (*get_enc_strm_size)(struct s5p_mfc_dev *dev);
70	int (*get_enc_slice_type)(struct s5p_mfc_dev *dev);
71	int (*get_enc_dpb_count)(struct s5p_mfc_dev *dev);
72	int (*get_enc_pic_count)(struct s5p_mfc_dev *dev);
73	int (*get_sei_avail_status)(struct s5p_mfc_ctx *ctx);
74	int (*get_mvc_num_views)(struct s5p_mfc_dev *dev);
75	int (*get_mvc_view_id)(struct s5p_mfc_dev *dev);
76	unsigned int (*get_pic_type_top)(struct s5p_mfc_ctx *ctx);
77	unsigned int (*get_pic_type_bot)(struct s5p_mfc_ctx *ctx);
78	unsigned int (*get_crop_info_h)(struct s5p_mfc_ctx *ctx);
79	unsigned int (*get_crop_info_v)(struct s5p_mfc_ctx *ctx);
80};
81
82void s5p_mfc_init_hw_ops(struct s5p_mfc_dev *dev);
83
84#endif /* S5P_MFC_OPR_H_ */
85