root/drivers/media/platform/s5p-mfc/s5p_mfc_opr.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */