1
2
3
4
5
6
7
8
9
10
11
12
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_regs {
21
22
23 volatile void __iomem *risc_on;
24 volatile void __iomem *risc2host_int;
25 volatile void __iomem *host2risc_int;
26 volatile void __iomem *risc_base_address;
27 volatile void __iomem *mfc_reset;
28 volatile void __iomem *host2risc_command;
29 volatile void __iomem *risc2host_command;
30 volatile void __iomem *mfc_bus_reset_ctrl;
31 volatile void __iomem *firmware_version;
32 volatile void __iomem *instance_id;
33 volatile void __iomem *codec_type;
34 volatile void __iomem *context_mem_addr;
35 volatile void __iomem *context_mem_size;
36 volatile void __iomem *pixel_format;
37 volatile void __iomem *metadata_enable;
38 volatile void __iomem *mfc_version;
39 volatile void __iomem *dbg_info_enable;
40 volatile void __iomem *dbg_buffer_addr;
41 volatile void __iomem *dbg_buffer_size;
42 volatile void __iomem *hed_control;
43 volatile void __iomem *mfc_timeout_value;
44 volatile void __iomem *hed_shared_mem_addr;
45 volatile void __iomem *dis_shared_mem_addr;
46 volatile void __iomem *ret_instance_id;
47 volatile void __iomem *error_code;
48 volatile void __iomem *dbg_buffer_output_size;
49 volatile void __iomem *metadata_status;
50 volatile void __iomem *metadata_addr_mb_info;
51 volatile void __iomem *metadata_size_mb_info;
52 volatile void __iomem *dbg_info_stage_counter;
53
54
55 volatile void __iomem *d_crc_ctrl;
56 volatile void __iomem *d_dec_options;
57 volatile void __iomem *d_display_delay;
58 volatile void __iomem *d_set_frame_width;
59 volatile void __iomem *d_set_frame_height;
60 volatile void __iomem *d_sei_enable;
61 volatile void __iomem *d_min_num_dpb;
62 volatile void __iomem *d_min_first_plane_dpb_size;
63 volatile void __iomem *d_min_second_plane_dpb_size;
64 volatile void __iomem *d_min_third_plane_dpb_size;
65 volatile void __iomem *d_min_num_mv;
66 volatile void __iomem *d_mvc_num_views;
67 volatile void __iomem *d_min_num_dis;
68 volatile void __iomem *d_min_first_dis_size;
69 volatile void __iomem *d_min_second_dis_size;
70 volatile void __iomem *d_min_third_dis_size;
71 volatile void __iomem *d_post_filter_luma_dpb0;
72 volatile void __iomem *d_post_filter_luma_dpb1;
73 volatile void __iomem *d_post_filter_luma_dpb2;
74 volatile void __iomem *d_post_filter_chroma_dpb0;
75 volatile void __iomem *d_post_filter_chroma_dpb1;
76 volatile void __iomem *d_post_filter_chroma_dpb2;
77 volatile void __iomem *d_num_dpb;
78 volatile void __iomem *d_num_mv;
79 volatile void __iomem *d_init_buffer_options;
80 volatile void __iomem *d_first_plane_dpb_stride_size;
81 volatile void __iomem *d_second_plane_dpb_stride_size;
82 volatile void __iomem *d_third_plane_dpb_stride_size;
83 volatile void __iomem *d_first_plane_dpb_size;
84 volatile void __iomem *d_second_plane_dpb_size;
85 volatile void __iomem *d_third_plane_dpb_size;
86 volatile void __iomem *d_mv_buffer_size;
87 volatile void __iomem *d_first_plane_dpb;
88 volatile void __iomem *d_second_plane_dpb;
89 volatile void __iomem *d_third_plane_dpb;
90 volatile void __iomem *d_mv_buffer;
91 volatile void __iomem *d_scratch_buffer_addr;
92 volatile void __iomem *d_scratch_buffer_size;
93 volatile void __iomem *d_metadata_buffer_addr;
94 volatile void __iomem *d_metadata_buffer_size;
95 volatile void __iomem *d_nal_start_options;
96 volatile void __iomem *d_cpb_buffer_addr;
97 volatile void __iomem *d_cpb_buffer_size;
98 volatile void __iomem *d_available_dpb_flag_upper;
99 volatile void __iomem *d_available_dpb_flag_lower;
100 volatile void __iomem *d_cpb_buffer_offset;
101 volatile void __iomem *d_slice_if_enable;
102 volatile void __iomem *d_picture_tag;
103 volatile void __iomem *d_stream_data_size;
104 volatile void __iomem *d_dynamic_dpb_flag_upper;
105 volatile void __iomem *d_dynamic_dpb_flag_lower;
106 volatile void __iomem *d_display_frame_width;
107 volatile void __iomem *d_display_frame_height;
108 volatile void __iomem *d_display_status;
109 volatile void __iomem *d_display_first_plane_addr;
110 volatile void __iomem *d_display_second_plane_addr;
111 volatile void __iomem *d_display_third_plane_addr;
112 volatile void __iomem *d_display_frame_type;
113 volatile void __iomem *d_display_crop_info1;
114 volatile void __iomem *d_display_crop_info2;
115 volatile void __iomem *d_display_picture_profile;
116 volatile void __iomem *d_display_luma_crc;
117 volatile void __iomem *d_display_chroma0_crc;
118 volatile void __iomem *d_display_chroma1_crc;
119 volatile void __iomem *d_display_luma_crc_top;
120 volatile void __iomem *d_display_chroma_crc_top;
121 volatile void __iomem *d_display_luma_crc_bot;
122 volatile void __iomem *d_display_chroma_crc_bot;
123 volatile void __iomem *d_display_aspect_ratio;
124 volatile void __iomem *d_display_extended_ar;
125 volatile void __iomem *d_decoded_frame_width;
126 volatile void __iomem *d_decoded_frame_height;
127 volatile void __iomem *d_decoded_status;
128 volatile void __iomem *d_decoded_first_plane_addr;
129 volatile void __iomem *d_decoded_second_plane_addr;
130 volatile void __iomem *d_decoded_third_plane_addr;
131 volatile void __iomem *d_decoded_frame_type;
132 volatile void __iomem *d_decoded_crop_info1;
133 volatile void __iomem *d_decoded_crop_info2;
134 volatile void __iomem *d_decoded_picture_profile;
135 volatile void __iomem *d_decoded_nal_size;
136 volatile void __iomem *d_decoded_luma_crc;
137 volatile void __iomem *d_decoded_chroma0_crc;
138 volatile void __iomem *d_decoded_chroma1_crc;
139 volatile void __iomem *d_ret_picture_tag_top;
140 volatile void __iomem *d_ret_picture_tag_bot;
141 volatile void __iomem *d_ret_picture_time_top;
142 volatile void __iomem *d_ret_picture_time_bot;
143 volatile void __iomem *d_chroma_format;
144 volatile void __iomem *d_vc1_info;
145 volatile void __iomem *d_mpeg4_info;
146 volatile void __iomem *d_h264_info;
147 volatile void __iomem *d_metadata_addr_concealed_mb;
148 volatile void __iomem *d_metadata_size_concealed_mb;
149 volatile void __iomem *d_metadata_addr_vc1_param;
150 volatile void __iomem *d_metadata_size_vc1_param;
151 volatile void __iomem *d_metadata_addr_sei_nal;
152 volatile void __iomem *d_metadata_size_sei_nal;
153 volatile void __iomem *d_metadata_addr_vui;
154 volatile void __iomem *d_metadata_size_vui;
155 volatile void __iomem *d_metadata_addr_mvcvui;
156 volatile void __iomem *d_metadata_size_mvcvui;
157 volatile void __iomem *d_mvc_view_id;
158 volatile void __iomem *d_frame_pack_sei_avail;
159 volatile void __iomem *d_frame_pack_arrgment_id;
160 volatile void __iomem *d_frame_pack_sei_info;
161 volatile void __iomem *d_frame_pack_grid_pos;
162 volatile void __iomem *d_display_recovery_sei_info;
163 volatile void __iomem *d_decoded_recovery_sei_info;
164 volatile void __iomem *d_display_first_addr;
165 volatile void __iomem *d_display_second_addr;
166 volatile void __iomem *d_display_third_addr;
167 volatile void __iomem *d_decoded_first_addr;
168 volatile void __iomem *d_decoded_second_addr;
169 volatile void __iomem *d_decoded_third_addr;
170 volatile void __iomem *d_used_dpb_flag_upper;
171 volatile void __iomem *d_used_dpb_flag_lower;
172
173
174 volatile void __iomem *e_frame_width;
175 volatile void __iomem *e_frame_height;
176 volatile void __iomem *e_cropped_frame_width;
177 volatile void __iomem *e_cropped_frame_height;
178 volatile void __iomem *e_frame_crop_offset;
179 volatile void __iomem *e_enc_options;
180 volatile void __iomem *e_picture_profile;
181 volatile void __iomem *e_vbv_buffer_size;
182 volatile void __iomem *e_vbv_init_delay;
183 volatile void __iomem *e_fixed_picture_qp;
184 volatile void __iomem *e_rc_config;
185 volatile void __iomem *e_rc_qp_bound;
186 volatile void __iomem *e_rc_qp_bound_pb;
187 volatile void __iomem *e_rc_mode;
188 volatile void __iomem *e_mb_rc_config;
189 volatile void __iomem *e_padding_ctrl;
190 volatile void __iomem *e_air_threshold;
191 volatile void __iomem *e_mv_hor_range;
192 volatile void __iomem *e_mv_ver_range;
193 volatile void __iomem *e_num_dpb;
194 volatile void __iomem *e_luma_dpb;
195 volatile void __iomem *e_chroma_dpb;
196 volatile void __iomem *e_me_buffer;
197 volatile void __iomem *e_scratch_buffer_addr;
198 volatile void __iomem *e_scratch_buffer_size;
199 volatile void __iomem *e_tmv_buffer0;
200 volatile void __iomem *e_tmv_buffer1;
201 volatile void __iomem *e_ir_buffer_addr;
202 volatile void __iomem *e_source_first_plane_addr;
203 volatile void __iomem *e_source_second_plane_addr;
204 volatile void __iomem *e_source_third_plane_addr;
205 volatile void __iomem *e_source_first_plane_stride;
206 volatile void __iomem *e_source_second_plane_stride;
207 volatile void __iomem *e_source_third_plane_stride;
208 volatile void __iomem *e_stream_buffer_addr;
209 volatile void __iomem *e_stream_buffer_size;
210 volatile void __iomem *e_roi_buffer_addr;
211 volatile void __iomem *e_param_change;
212 volatile void __iomem *e_ir_size;
213 volatile void __iomem *e_gop_config;
214 volatile void __iomem *e_mslice_mode;
215 volatile void __iomem *e_mslice_size_mb;
216 volatile void __iomem *e_mslice_size_bits;
217 volatile void __iomem *e_frame_insertion;
218 volatile void __iomem *e_rc_frame_rate;
219 volatile void __iomem *e_rc_bit_rate;
220 volatile void __iomem *e_rc_roi_ctrl;
221 volatile void __iomem *e_picture_tag;
222 volatile void __iomem *e_bit_count_enable;
223 volatile void __iomem *e_max_bit_count;
224 volatile void __iomem *e_min_bit_count;
225 volatile void __iomem *e_metadata_buffer_addr;
226 volatile void __iomem *e_metadata_buffer_size;
227 volatile void __iomem *e_encoded_source_first_plane_addr;
228 volatile void __iomem *e_encoded_source_second_plane_addr;
229 volatile void __iomem *e_encoded_source_third_plane_addr;
230 volatile void __iomem *e_stream_size;
231 volatile void __iomem *e_slice_type;
232 volatile void __iomem *e_picture_count;
233 volatile void __iomem *e_ret_picture_tag;
234 volatile void __iomem *e_stream_buffer_write_pointer;
235 volatile void __iomem *e_recon_luma_dpb_addr;
236 volatile void __iomem *e_recon_chroma_dpb_addr;
237 volatile void __iomem *e_metadata_addr_enc_slice;
238 volatile void __iomem *e_metadata_size_enc_slice;
239 volatile void __iomem *e_mpeg4_options;
240 volatile void __iomem *e_mpeg4_hec_period;
241 volatile void __iomem *e_aspect_ratio;
242 volatile void __iomem *e_extended_sar;
243 volatile void __iomem *e_h264_options;
244 volatile void __iomem *e_h264_options_2;
245 volatile void __iomem *e_h264_lf_alpha_offset;
246 volatile void __iomem *e_h264_lf_beta_offset;
247 volatile void __iomem *e_h264_i_period;
248 volatile void __iomem *e_h264_fmo_slice_grp_map_type;
249 volatile void __iomem *e_h264_fmo_num_slice_grp_minus1;
250 volatile void __iomem *e_h264_fmo_slice_grp_change_dir;
251 volatile void __iomem *e_h264_fmo_slice_grp_change_rate_minus1;
252 volatile void __iomem *e_h264_fmo_run_length_minus1_0;
253 volatile void __iomem *e_h264_aso_slice_order_0;
254 volatile void __iomem *e_h264_chroma_qp_offset;
255 volatile void __iomem *e_h264_num_t_layer;
256 volatile void __iomem *e_h264_hierarchical_qp_layer0;
257 volatile void __iomem *e_h264_frame_packing_sei_info;
258 volatile void __iomem *e_h264_nal_control;
259 volatile void __iomem *e_mvc_frame_qp_view1;
260 volatile void __iomem *e_mvc_rc_bit_rate_view1;
261 volatile void __iomem *e_mvc_rc_qbound_view1;
262 volatile void __iomem *e_mvc_rc_mode_view1;
263 volatile void __iomem *e_mvc_inter_view_prediction_on;
264 volatile void __iomem *e_vp8_options;
265 volatile void __iomem *e_vp8_filter_options;
266 volatile void __iomem *e_vp8_golden_frame_option;
267 volatile void __iomem *e_vp8_num_t_layer;
268 volatile void __iomem *e_vp8_hierarchical_qp_layer0;
269 volatile void __iomem *e_vp8_hierarchical_qp_layer1;
270 volatile void __iomem *e_vp8_hierarchical_qp_layer2;
271};
272
273struct s5p_mfc_hw_ops {
274 int (*alloc_dec_temp_buffers)(struct s5p_mfc_ctx *ctx);
275 void (*release_dec_desc_buffer)(struct s5p_mfc_ctx *ctx);
276 int (*alloc_codec_buffers)(struct s5p_mfc_ctx *ctx);
277 void (*release_codec_buffers)(struct s5p_mfc_ctx *ctx);
278 int (*alloc_instance_buffer)(struct s5p_mfc_ctx *ctx);
279 void (*release_instance_buffer)(struct s5p_mfc_ctx *ctx);
280 int (*alloc_dev_context_buffer)(struct s5p_mfc_dev *dev);
281 void (*release_dev_context_buffer)(struct s5p_mfc_dev *dev);
282 void (*dec_calc_dpb_size)(struct s5p_mfc_ctx *ctx);
283 void (*enc_calc_src_size)(struct s5p_mfc_ctx *ctx);
284 int (*set_dec_stream_buffer)(struct s5p_mfc_ctx *ctx,
285 int buf_addr, unsigned int start_num_byte,
286 unsigned int buf_size);
287 int (*set_dec_frame_buffer)(struct s5p_mfc_ctx *ctx);
288 int (*set_enc_stream_buffer)(struct s5p_mfc_ctx *ctx,
289 unsigned long addr, unsigned int size);
290 void (*set_enc_frame_buffer)(struct s5p_mfc_ctx *ctx,
291 unsigned long y_addr, unsigned long c_addr);
292 void (*get_enc_frame_buffer)(struct s5p_mfc_ctx *ctx,
293 unsigned long *y_addr, unsigned long *c_addr);
294 int (*set_enc_ref_buffer)(struct s5p_mfc_ctx *ctx);
295 int (*init_decode)(struct s5p_mfc_ctx *ctx);
296 int (*init_encode)(struct s5p_mfc_ctx *ctx);
297 int (*encode_one_frame)(struct s5p_mfc_ctx *ctx);
298 void (*try_run)(struct s5p_mfc_dev *dev);
299 void (*cleanup_queue)(struct list_head *lh,
300 struct vb2_queue *vq);
301 void (*clear_int_flags)(struct s5p_mfc_dev *dev);
302 void (*write_info)(struct s5p_mfc_ctx *ctx, unsigned int data,
303 unsigned int ofs);
304 unsigned int (*read_info)(struct s5p_mfc_ctx *ctx,
305 unsigned int ofs);
306 int (*get_dspl_y_adr)(struct s5p_mfc_dev *dev);
307 int (*get_dec_y_adr)(struct s5p_mfc_dev *dev);
308 int (*get_dspl_status)(struct s5p_mfc_dev *dev);
309 int (*get_dec_status)(struct s5p_mfc_dev *dev);
310 int (*get_dec_frame_type)(struct s5p_mfc_dev *dev);
311 int (*get_disp_frame_type)(struct s5p_mfc_ctx *ctx);
312 int (*get_consumed_stream)(struct s5p_mfc_dev *dev);
313 int (*get_int_reason)(struct s5p_mfc_dev *dev);
314 int (*get_int_err)(struct s5p_mfc_dev *dev);
315 int (*err_dec)(unsigned int err);
316 int (*err_dspl)(unsigned int err);
317 int (*get_img_width)(struct s5p_mfc_dev *dev);
318 int (*get_img_height)(struct s5p_mfc_dev *dev);
319 int (*get_dpb_count)(struct s5p_mfc_dev *dev);
320 int (*get_mv_count)(struct s5p_mfc_dev *dev);
321 int (*get_inst_no)(struct s5p_mfc_dev *dev);
322 int (*get_enc_strm_size)(struct s5p_mfc_dev *dev);
323 int (*get_enc_slice_type)(struct s5p_mfc_dev *dev);
324 int (*get_enc_dpb_count)(struct s5p_mfc_dev *dev);
325 int (*get_enc_pic_count)(struct s5p_mfc_dev *dev);
326 int (*get_sei_avail_status)(struct s5p_mfc_ctx *ctx);
327 int (*get_mvc_num_views)(struct s5p_mfc_dev *dev);
328 int (*get_mvc_view_id)(struct s5p_mfc_dev *dev);
329 unsigned int (*get_pic_type_top)(struct s5p_mfc_ctx *ctx);
330 unsigned int (*get_pic_type_bot)(struct s5p_mfc_ctx *ctx);
331 unsigned int (*get_crop_info_h)(struct s5p_mfc_ctx *ctx);
332 unsigned int (*get_crop_info_v)(struct s5p_mfc_ctx *ctx);
333};
334
335void s5p_mfc_init_hw_ops(struct s5p_mfc_dev *dev);
336void s5p_mfc_init_regs(struct s5p_mfc_dev *dev);
337int s5p_mfc_alloc_priv_buf(struct device *dev,
338 struct s5p_mfc_priv_buf *b);
339void s5p_mfc_release_priv_buf(struct device *dev,
340 struct s5p_mfc_priv_buf *b);
341
342
343#endif
344