2 * drivers/media/platform/s5p-mfc/s5p_mfc_opr.h
4 * Header file for Samsung MFC (Multi Function Codec - FIMV) driver
5 * Contains declarations of hw related functions.
7 * Kamil Debski, Copyright (C) 2012 Samsung Electronics Co., Ltd.
8 * http://www.samsung.com/
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.
15 #ifndef S5P_MFC_OPR_H_
16 #define S5P_MFC_OPR_H_
18 #include "s5p_mfc_common.h"
22 /* codec common registers */
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
;/* only v7 */
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
;
54 /* decoder registers */
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
;/* only v8 */
65 volatile void __iomem
*d_min_num_mv
;
66 volatile void __iomem
*d_mvc_num_views
;
67 volatile void __iomem
*d_min_num_dis
;/* only v7 */
68 volatile void __iomem
*d_min_first_dis_size
;/* only v7 */
69 volatile void __iomem
*d_min_second_dis_size
;/* only v7 */
70 volatile void __iomem
*d_min_third_dis_size
;/* only v7 */
71 volatile void __iomem
*d_post_filter_luma_dpb0
;/* v7 and v8 */
72 volatile void __iomem
*d_post_filter_luma_dpb1
;/* v7 and v8 */
73 volatile void __iomem
*d_post_filter_luma_dpb2
;/* only v7 */
74 volatile void __iomem
*d_post_filter_chroma_dpb0
;/* v7 and v8 */
75 volatile void __iomem
*d_post_filter_chroma_dpb1
;/* v7 and v8 */
76 volatile void __iomem
*d_post_filter_chroma_dpb2
;/* only v7 */
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
;/* only v8 */
81 volatile void __iomem
*d_second_plane_dpb_stride_size
;/* only v8 */
82 volatile void __iomem
*d_third_plane_dpb_stride_size
;/* only v8 */
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
;/* only v8 */
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
;/* v7 and v8 */
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
;/* v7 and v8 */
105 volatile void __iomem
*d_dynamic_dpb_flag_lower
;/* v7 and v8 */
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
;/* only v8 */
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
;/* v7 and v8 */
117 volatile void __iomem
*d_display_chroma0_crc
;/* v7 and v8 */
118 volatile void __iomem
*d_display_chroma1_crc
;/* only v8 */
119 volatile void __iomem
*d_display_luma_crc_top
;/* only v6 */
120 volatile void __iomem
*d_display_chroma_crc_top
;/* only v6 */
121 volatile void __iomem
*d_display_luma_crc_bot
;/* only v6 */
122 volatile void __iomem
*d_display_chroma_crc_bot
;/* only v6 */
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
;/* only v8 */
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
;/* only v8 */
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
;/* v7 and v8 */
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
;/* v7 and v8 */
156 volatile void __iomem
*d_metadata_size_mvcvui
;/* v7 and v8 */
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
;/* v7 and v8 */
163 volatile void __iomem
*d_decoded_recovery_sei_info
;/* v7 and v8 */
164 volatile void __iomem
*d_display_first_addr
;/* only v7 */
165 volatile void __iomem
*d_display_second_addr
;/* only v7 */
166 volatile void __iomem
*d_display_third_addr
;/* only v7 */
167 volatile void __iomem
*d_decoded_first_addr
;/* only v7 */
168 volatile void __iomem
*d_decoded_second_addr
;/* only v7 */
169 volatile void __iomem
*d_decoded_third_addr
;/* only v7 */
170 volatile void __iomem
*d_used_dpb_flag_upper
;/* v7 and v8 */
171 volatile void __iomem
*d_used_dpb_flag_lower
;/* v7 and v8 */
173 /* encoder registers */
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
;/* v7 and v8 */
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
;/* v7 and v8 */
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
;/* v7 and v8 */
205 volatile void __iomem
*e_source_first_plane_stride
;/* v7 and v8 */
206 volatile void __iomem
*e_source_second_plane_stride
;/* v7 and v8 */
207 volatile void __iomem
*e_source_third_plane_stride
;/* v7 and v8 */
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
;/* v7 and v8 */
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
; /* only v6 */
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
;/* v7 and v8 */
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
;/* v7 and v8 */
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
;/* v7 and v8 */
265 volatile void __iomem
*e_vp8_filter_options
;/* v7 and v8 */
266 volatile void __iomem
*e_vp8_golden_frame_option
;/* v7 and v8 */
267 volatile void __iomem
*e_vp8_num_t_layer
;/* v7 and v8 */
268 volatile void __iomem
*e_vp8_hierarchical_qp_layer0
;/* v7 and v8 */
269 volatile void __iomem
*e_vp8_hierarchical_qp_layer1
;/* v7 and v8 */
270 volatile void __iomem
*e_vp8_hierarchical_qp_layer2
;/* v7 and v8 */
273 struct 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
,
304 unsigned int (*read_info
)(struct s5p_mfc_ctx
*ctx
,
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
);
335 void s5p_mfc_init_hw_ops(struct s5p_mfc_dev
*dev
);
336 void s5p_mfc_init_regs(struct s5p_mfc_dev
*dev
);
337 int s5p_mfc_alloc_priv_buf(struct device
*dev
, dma_addr_t base
,
338 struct s5p_mfc_priv_buf
*b
);
339 void s5p_mfc_release_priv_buf(struct device
*dev
,
340 struct s5p_mfc_priv_buf
*b
);
343 #endif /* S5P_MFC_OPR_H_ */