| /* |
| * Samsung Exynos SoC series VPU driver |
| * |
| * Copyright (c) 2016 Samsung Electronics Co., Ltd |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| */ |
| |
| #if !defined(__VPU_PROCESSING_UNIT_CONFIGURATION__) |
| #define __VPU_PROCESSING_UNIT_CONFIGURATION__ |
| |
| /* VPU 2.1 TODO: move definition to high level file */ |
| #define VPU_2v1 |
| |
| /** \addtogroup VPUL-DS |
| * @{ |
| */ |
| /** \addtogroup PU Processing units |
| * \brief Structures used to to define PU functionality, resources and parameters |
| * @{ |
| */ |
| |
| #define VPU_MAXIMAL_MPRB_CONNECTED 43 |
| /* Maximal PUs connected as inputs to one PU */ |
| #define VPUL_PU_MAX_PORTS 5 |
| |
| |
| enum vpul_logical_op_types { |
| #define ENTRY(a) a, |
| #include "vpul_pu_opcodes.def" |
| #undef ENTRY |
| NUMBER_OF_OP_TYPE |
| }; |
| |
| |
| struct pu_ram_port_range { |
| __u32 first_ram_port; |
| __u32 number_of_ram_ports; |
| }; |
| |
| enum vpul_pu_instance { |
| #define VPU_PU_INSTANCE(a, b, c, d, e, f, g, h, i) a, |
| #include "vpul_pu_instances.def" |
| #undef VPU_PU_INSTANCE |
| VPU_PU_NUMBER |
| }; |
| |
| /** \enum VPU_PU_TYPES |
| * \brief Different types of PUs as HwMapper knows them. Defined using X |
| * macros based on vpul_pu_types.def. |
| */ |
| enum VPU_PU_TYPES { |
| #define VPU_PU_TYPE(a, b, c) a, \ |
| |
| #include "vpul_pu_types.def" |
| #undef VPU_PU_TYPE |
| VPU_PU_TYPES_NUMBER, |
| END_OF_PU_INST2TYPE_TRANSLATOR = 0XFFFFFFFF |
| }; |
| |
| |
| enum vpul_mprb_acc_type { |
| VPU_MPRB_ACC_UPDATABLE_PU = 0, |
| VPU_MPRB_ACC_NONUPDATABLE_PU = 1, |
| VPU_MPRB_ACC_COUNT |
| }; |
| |
| /*! \brief DMA parameters */ |
| struct vpul_pu_dma { |
| /*! \brief The index of the current IO type description that includes |
| * the start address and the line offset |
| */ |
| __u32 inout_index; |
| /*! 0 = Address is incremented between each 2 lines |
| * 1 = Address is decremented between each 2 lines |
| */ |
| __u32 offset_lines_inc; |
| |
| /*! \brief use to copy data from internal_mem to ext */ |
| __u32 is_output_vector_dma; |
| }; |
| |
| /*! |
| * \ brief SALB parameters - fully described in user guide |
| */ |
| struct vpul_pu_salb { |
| __u32 bits_in0 :1; |
| __u32 bits_in1 :1; |
| __u32 bits_out0 :1; |
| __u32 signed_in0 :1; |
| __u32 signed_in1 :1; |
| __u32 signed_out0 :1; |
| __u32 input_enable :3; |
| __u32 use_mask :1; |
| __u32 operation_code :5; |
| __u32 abs_neg :2; |
| __u32 trunc_out :2; |
| __u32 org_val_med :1; |
| __u32 shift_bits :4; |
| __u32 cmp_op :3; |
| __u32 const_in1 :1; |
| __u32 thresh_lo :16; |
| __u32 thresh_hi :16; |
| __u32 val_lo :16; |
| __u32 val_hi :16; |
| __u32 val_med_filler :16; |
| __u32 salbregs_custom_trunc_en :1; |
| __u32 salbregs_custom_trunc_bittage :5; |
| }; |
| |
| /*! |
| * \ brief CALB parameters - fully described in user guide |
| */ |
| struct vpul_pu_calb { |
| __u32 bits_in0 :2; |
| __u32 bits_in1 :2; |
| __u32 bits_out0 :2; |
| __u32 signed_in0 :1; |
| __u32 signed_in1 :1; |
| __u32 signed_out0 :1; |
| __u32 input_enable :3; |
| __u32 use_mask :1; |
| __u32 operation_code :5; |
| __u32 abs_neg :2; |
| __u32 trunc_out :2; |
| __u32 org_val_med :1; |
| __u32 shift_bits :6; |
| __u32 mult_round :3; |
| __u32 cmp_op :3; |
| __u32 const_in1 :1; |
| __u32 div_shift_bits :5; |
| __u32 div_overflow_remainder :1; |
| __u32 thresh_lo; |
| __u32 thresh_hi; |
| __u32 val_lo; |
| __u32 val_hi; |
| __u32 val_med_filler; |
| }; |
| |
| |
| /*! \brief Add parameters (Adding two inputs) */ |
| struct vpul_pu_add { |
| /*! input/output bits: 0 = 8 bits. 1 = 16 bits. */ |
| __u32 bits; |
| /*! input/output sign : 0 = unsigned. 1 = signed. */ |
| __u32 is_signed; |
| }; |
| |
| /*! |
| * \ brief ROIS parameters - fully described in user guide |
| */ |
| struct vpul_pu_rois_out { |
| __u32 bits_in0 :2; |
| __u32 signed_in0 :1; |
| __u32 use_mask :1; |
| __u32 work_mode :2; |
| __u32 first_min_max :1; |
| __u32 thresh_lo_temp :12; |
| }; |
| |
| /*! |
| * \ brief CROP parameters - fully described in user guide |
| */ |
| struct vpul_pu_crop { |
| __u32 work_mode :2; |
| __u32 pad_value :16; |
| __u32 mask_val_in :16; |
| __u32 mask_val_out :16; |
| __u32 roi_startx :14; |
| __u32 roi_starty :14; |
| }; |
| |
| /*! |
| * \ brief MDE parameters - fully described in user guide |
| */ |
| struct vpul_pu_mde { |
| __u32 work_mode :3; |
| __u32 result_shift :6; |
| __u32 use_thresh :1; |
| __u32 calc_quantized_angle :1; |
| __u32 eig_coeff :25; |
| __u32 bits_in :2; |
| __u32 signed_in :1; |
| __u32 bits_out :2; |
| __u32 signed_out :1; |
| __u32 output_enable :2; |
| __u32 thresh; |
| }; |
| |
| /*! |
| * \ brief NMS parameters - fully described in user guide |
| */ |
| struct vpul_pu_nms { |
| __u32 work_mode :4; |
| __u32 keep_equals :1; |
| __u32 directional_nms :1; |
| __u32 census_mode :2; |
| __u32 add_orig_pixel :1; |
| __u32 bits_in :2; |
| __u32 bits_out :2; |
| __u32 signed_in :1; |
| __u32 support :2; |
| __u32 org_val_out :1; |
| __u32 trunc_out :1; |
| __u32 image_height :14; |
| __u32 thresh; |
| __u32 border_mode_up :1; |
| __u32 border_mode_down :1; |
| __u32 border_mode_left :1; |
| __u32 border_mode_right :1; |
| __u32 border_fill :2; |
| __u32 border_fill_constant :8; |
| __u32 strict_comparison_mask :3; |
| __u32 cens_thres_0 :3; |
| __u32 cens_thres_1 :3; |
| __u32 cens_thres_2 :3; |
| __u32 cens_thres_3 :3; |
| __u32 cens_thres_4 :3; |
| __u32 cens_thres_5 :3; |
| __u32 cens_thres_6 :3; |
| __u32 cens_thres_7 :3; |
| }; |
| |
| /*! /brief Description for filter coefficients */ |
| struct coeff_item { |
| /*! \brief |
| * 0=coefficients are part of static vector. |
| * 1=coefficients are part of dynamic vector (parameters vector) |
| */ |
| __u32 is_dynamic; |
| /*! \brief coefficients vector dimension size. |
| */ |
| __u32 vsize; |
| /*! Offsets of the first coefficient from the offset of the process |
| * coefficients vector (either static or dynamic) |
| * TODO: check if it's the same as coefficient_index |
| */ |
| __u32 offset; |
| }; |
| |
| /*! |
| * \ brief Separable Filter parameters - fully described in user guide |
| */ |
| struct vpul_pu_slf { |
| __u32 invert_columns :1; |
| __u32 upsample_mode :2; |
| __u32 downsample_rows :1; |
| __u32 downsample_cols :1; |
| __u32 sampling_offset_x :1; |
| __u32 sampling_offset_y :2; |
| __u32 work_mode :2; |
| __u32 filter_size_mode :2; |
| __u32 out_enable_1 :1; |
| __u32 horizontal_only :1; |
| __u32 bits_in :2; |
| __u32 bits_out :2; |
| __u32 signed_in :1; |
| __u32 signed_out :1; |
| __u32 do_rounding :1; |
| __u32 border_mode_up :1; |
| __u32 border_mode_down :1; |
| __u32 border_mode_left :1; |
| __u32 border_mode_right :1; |
| __u32 border_fill :2; |
| __u32 border_fill_constant :16; |
| __u32 coefficient_fraction :4; |
| __u32 sepfregs_is_max_pooling_mode :1; |
| __u32 sepfregs_stride_value :3; |
| __u32 sepfregs_stride_offset_height :2; |
| __u32 sepfregs_stride_offset_width :2; |
| __u32 sepfregs_subimage_height :17; |
| __u32 sepfregs_convert_16f_to_32f :1; |
| __u32 sepfregs_convert_output_sm_to_2scomp :1; |
| __u32 sepfregs_convert_input_2scomp_to_sm :1; |
| __u32 max_pooling_size_spoof_index :5; |
| |
| __u32 maxp_num_slices; |
| __u32 maxp_sizes_filt_hor; |
| __u32 maxp_sizes_filt_ver; |
| /*! horizontal filter coefficients */ |
| struct coeff_item horizontal_filter_coeff; |
| |
| /*! vertical filter coefficients */ |
| struct coeff_item vertical_filter_coeff; |
| __u32 coefficient_index; |
| }; |
| |
| /*! |
| * \ brief General Filter parameters - fully described in user guide |
| */ |
| struct vpul_pu_glf { |
| __u32 filter_size_mode :3; |
| __u32 sad_mode :1; |
| __u32 out_enable_2 :1; |
| __u32 two_outputs :1; |
| __u32 input_enable1 :1; |
| __u32 bits_in :1; |
| __u32 bits_out :1; |
| __u32 signed_in :1; |
| __u32 signed_out :1; |
| __u32 do_rounding :1; |
| __u32 RAM_type :1; |
| __u32 RAM_offset :3; |
| __u32 image_height :14; |
| __u32 border_mode_up :1; |
| __u32 border_mode_down :1; |
| __u32 border_mode_left :1; |
| __u32 border_mode_right :1; |
| __u32 border_fill :2; |
| __u32 border_fill_constant :16; |
| __u32 coefficient_fraction :5; |
| __u32 signed_coefficients :1; |
| |
| |
| __u32 coefficient_index; |
| /*! |
| * value 1 : the coefficients are read by DMA |
| * 0 : coefficients should be explicitly written to registers by CORE |
| */ |
| __u32 coeffs_from_dma; |
| |
| /*! index into the process level coefficients structure */ |
| struct coeff_item filter_coeff; |
| }; |
| |
| /*! |
| * \ brief CCM parameters - fully described in user guide |
| */ |
| struct vpul_pu_ccm { |
| __u32 signed_in :1; |
| __u32 signed_out :1; |
| __u32 output_enable :3; |
| __u32 input_enable :3; |
| __u32 coefficient_shift :4; |
| __u32 coefficient_0 :12; |
| __u32 coefficient_1 :12; |
| __u32 coefficient_2 :12; |
| __u32 coefficient_3 :12; |
| __u32 coefficient_4 :12; |
| __u32 coefficient_5 :12; |
| __u32 coefficient_6 :12; |
| __u32 coefficient_7 :12; |
| __u32 coefficient_8 :12; |
| __u32 offset_0 :16; |
| __u32 offset_1 :16; |
| __u32 offset_2 :16; |
| }; |
| |
| /*! |
| * \ brief LUT parameters - fully described in user guide |
| */ |
| struct vpul_pu_lut { |
| __u32 interpolation_mode :1; |
| __u32 lut_size :1; |
| __u32 signed_in0 :1; |
| __u32 signed_out0 :1; |
| __u32 offset :16; |
| __u32 binsize :16; |
| __u32 inverse_binsize :16; |
| }; |
| |
| /*! |
| * \ brief Integral Image parameters - fully described in user guide |
| */ |
| struct vpul_pu_integral { |
| __u32 integral_image_mode :3; |
| __u32 overflow_mode :1; |
| __u32 dt_right_shift :3; |
| __u32 dt_left_shift :3; |
| __u32 dt_coefficient0 :16; |
| __u32 dt_coefficient1 :16; |
| __u32 dt_coefficient2 :16; |
| __u32 cc_min_label :15; |
| __u32 cc_scan_mode :2; |
| __u32 cc_smart_label_search_en :1; |
| __u32 cc_reset_labels_array :1; |
| __u32 cc_label_vector_size :16; |
| __u32 lut_init_en :1; |
| __u32 lut_number_of_values :16; |
| __u32 lut_value_shift :16; |
| __u32 lut_default_overflow :16; |
| __u32 lut_default_underflow :16; |
| |
| }; |
| |
| /*! |
| * \ brief Upscaler parameters - fully described in user guide |
| */ |
| struct vpul_pu_upscaler { |
| __u32 interpolation_method :2; |
| __u32 border_fill_mode :1; |
| __u32 do_rounding :1; |
| __u32 border_fill_constant :16; |
| }; |
| |
| /*! |
| * \ brief Downscaler parameters - fully described in user guide |
| */ |
| struct vpul_pu_downscaler { |
| __u32 interpolation_method :2; |
| __u32 do_rounding :1; |
| }; |
| |
| /*! |
| * \ brief Joiner parameters - fully described in user guide |
| */ |
| struct vpul_pu_joiner { |
| __u32 out_byte0_source_stream :5; |
| __u32 out_byte1_source_stream :5; |
| __u32 out_byte2_source_stream :5; |
| __u32 out_byte3_source_stream :5; |
| __u32 input0_enable :1; |
| __u32 input1_enable :1; |
| __u32 input2_enable :1; |
| __u32 input3_enable :1; |
| __u32 work_mode :2; |
| |
| }; |
| |
| /*! |
| * \brief Splitter parameters - fully described in user guide |
| */ |
| struct vpul_pu_spliter { |
| __u32 out0_byte0:3; |
| __u32 out0_byte1:3; |
| __u32 out1_byte0:3; |
| __u32 out1_byte1:3; |
| __u32 out2_byte0:3; |
| __u32 out2_byte1:3; |
| __u32 out3_byte0:3; |
| __u32 out3_byte1:3; |
| }; |
| |
| |
| /*! |
| * \brief Histogram parameters - fully described in user guide |
| */ |
| struct vpul_pu_histogram { |
| __u32 offset :16; |
| __u32 inverse_binsize :17; |
| __u32 variable_increment :1; |
| __u32 dual_histogram :1; |
| __u32 signed_in0 :1; |
| |
| __u32 round_index :1; |
| __u32 max_val :16; |
| }; |
| |
| /*! |
| * \brief Non linear filter(fast) - fully described in user guide |
| */ |
| struct vpul_pu_nlf { |
| __u32 filter_mode :3; |
| __u32 fast_score_direction :1; |
| __u32 border_mode_up :1; |
| __u32 border_mode_down :1; |
| __u32 border_mode_left :1; |
| __u32 border_mode_right :1; |
| __u32 border_fill :2; |
| __u32 border_tile :1; |
| __u32 border_fill_constant :8; |
| __u32 bits_in :1; |
| __u32 signed_in :1; |
| __u32 census_mode :2; |
| __u32 census_out_image :1; |
| __u32 add_orig_pixel :1; |
| __u32 cens_thres_0 :3; |
| __u32 cens_thres_1 :3; |
| __u32 cens_thres_2 :3; |
| __u32 cens_thres_3 :3; |
| __u32 cens_thres_4 :3; |
| __u32 cens_thres_5 :3; |
| __u32 cens_thres_6 :3; |
| __u32 cens_thres_7 :3; |
| __u32 neighbors_mask :9; |
| }; |
| |
| /*! |
| * \brief fast depth - fully described in user guide |
| */ |
| struct vpul_pu_fast_depth { |
| __u32 max_disparity :8; |
| __u32 min_disparity :8; |
| __u32 dcu_gray_diff_thresh_is_equal_pixels :8; |
| __u32 dcu_gray_diff_thresh_is_near_pixels :8; |
| __u32 dcu_gray_diff_thresh_is_near_to_center :8; |
| __u32 dcu_gray_diff_thresh_do_aggregation :8; |
| __u32 dcu_gray_diff_thresh_is_equal_to_center :8; |
| __u32 dcu_aggregated_neighbor_selection :11; |
| __u32 dcu_patch_size_mode :2; |
| __u32 dcu_rl_borders_trim :2; |
| __u32 dcu_info_thresh_is_informative :6; |
| __u32 dcu_min_pixels_for_cost :6; |
| __u32 dcu_cost_fraction_bits :4; |
| __u32 dcu_cost_c_exp_weights_table_0_0 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_1 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_2 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_3 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_4 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_5 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_6 :8; |
| __u32 dcu_cost_c_exp_weights_table_0_7 :8; |
| __u32 dpu_cost_thresh_max_good :8; |
| __u32 dpu_ref_dspr_constant_cost :8; |
| __u32 dpu_cost_thresh_count_good_cand :8; |
| __u32 dpu_ref_dspr_max_is_equal :7; |
| __u32 dpu_ref_cost_thresh_use_ref_dsp :8; |
| __u32 dpu_dspr_diff_max_neighbor_is_equal :7; |
| __u32 dpu_ref_dspr_cost_factor :3; |
| __u32 dpu_use_ref_en :1; |
| __u32 dpu_ref_candidate_en :1; |
| __u32 dpu_ref_dspr_prioritization_en :1; |
| __u32 dpu_ref_dspr_up_shift :2; |
| __u32 pre_output_dspr_up_shift :3; |
| __u32 superb_candidate_en :1; |
| __u32 superb_dspr_cost_factor :3; |
| __u32 prioritize_superb_on_non_info_only :1; |
| __u32 dpu_superb_dspr_prioritization_en :1; |
| __u32 dcu_gray_diff_thresh_is_like_superb :8; |
| __u32 cost_thresh_good_for_superb :8; |
| __u32 superb_dspr_constant_cost :8; |
| __u32 dpu_lfsr_seed_0 :16; |
| __u32 dpu_lfsr_seed_1 :16; |
| __u32 dpu_lfsr_seed_2 :16; |
| __u32 dpu_lfsr_seed_3 :16; |
| __u32 mcnt_selected_iterations_0_0 :1; |
| __u32 mcnt_selected_iterations_0_1 :1; |
| __u32 mcnt_selected_iterations_0_2 :1; |
| __u32 mcnt_selected_iterations_0_3 :1; |
| }; |
| |
| /*! |
| * \brief FIFO - fully described in user guide |
| */ |
| struct vpul_pu_fifo { |
| __u32 bits_in :1; |
| }; |
| |
| /*! |
| * \brief duplicator - No specific parameters - place holder |
| */ |
| struct vpul_pu_duplicator { |
| __u32 no_params; |
| }; |
| |
| struct vpul_pu_dispeq { |
| __u32 bypass :1; |
| __u32 mcnt_bilateral_maximization_en :1; |
| __u32 mcnt_use_center_only_en :1; |
| __u32 dspr_shift_down_before_validation :2; |
| __u32 cost_min_for_valid_for_small_dspr :8; |
| __u32 cost_min_for_valid_for_large_dspr :8; |
| __u32 dspr_small_to_large_tresh :7; |
| __u32 dspr_min_diff_for_valid :7; |
| __u32 cost_min_diff_for_update :8; |
| __u32 weight_for_cost_update :8; |
| __u32 mcnt_min_for_multiple_dspr :3; |
| }; |
| |
| struct vpul_pu_in_paint { |
| __u32 bypass :1; |
| __u32 pic_x_size :12; |
| __u32 pic_y_size :14; |
| __u32 mem_size :1; |
| __u32 rl_validation_en :1; |
| __u32 enhanced_info_en :1; |
| __u32 content_mask_en :1; |
| __u32 x_last_logic_en :1; |
| __u32 background_en :1; |
| __u32 strong_anti_leak_en :1; |
| __u32 background_anti_leak_en :1; |
| __u32 half_strong_en :1; |
| __u32 update_inpainted_cost_en :1; |
| __u32 output_reliable_mask_en :1; |
| __u32 output_stat_mask_en :1; |
| __u32 gray_max_similarity :8; |
| __u32 gray_max_high_similarity :8; |
| __u32 gray_step_penalty :8; |
| __u32 gray_max_total_error :8; |
| __u32 mcnt_min_single :3; |
| __u32 mcnt_max_single :3; |
| __u32 mcnt_min_for_stat_mask :3; |
| __u32 mcnt_max_for_stat_mask :3; |
| __u32 dspr_max_vertical_similarity :7; |
| __u32 dspr_max_diff_from_vertical_avrg :7; |
| __u32 dspr_max_similarity :7; |
| __u32 dspr_max_upper_similarity :7; |
| __u32 dspr_max_anchors_similarity :7; |
| __u32 dspr_max_anchors_grad_val :7; |
| __u32 dspr_max_anchors_grad_shift :4; |
| __u32 dspr_max_diff_to_center :7; |
| __u32 anchor_type_sel_max_support :2; |
| __u32 anchor_type_sel_max_near_support :2; |
| __u32 anchor_type_sel_min_valid :3; |
| __u32 anchor_type_sel_min_near_valid :3; |
| __u32 anchor_logic_trim_0_0 :12; |
| __u32 anchor_logic_trim_0_1 :12; |
| __u32 x_last_logic_max_edge_diff :12; |
| __u32 x_last_logic_right_margin :12; |
| __u32 downscaled_cost_min_per_index_0_0 :8; |
| __u32 downscaled_cost_min_per_index_0_1 :8; |
| __u32 downscaled_cost_min_per_index_0_2 :8; |
| __u32 cost_min_fill_holes :8; |
| __u32 cost_max_reliable :8; |
| __u32 cost_max_for_anchor :8; |
| __u32 cost_min_is_hidden :8; |
| __u32 cost_max_for_stat_mask :8; |
| __u32 anchor_dist_max_for_strong :12; |
| __u32 hidden_padding_direction :2; |
| __u32 background_gray_val :8; |
| __u32 background_gray_max_similarity :8; |
| __u32 background_dspr_val :7; |
| __u32 background_anchor_margins_0_0 :12; |
| __u32 background_anchor_margins_0_1 :12; |
| __u32 background_anchor_margins_0_2 :12; |
| __u32 background_anchor_margins_0_3 :12; |
| __u32 hidden_logic_trim_0_0 :12; |
| __u32 hidden_logic_trim_0_1 :12; |
| __u32 output_mode :2; |
| }; |
| |
| struct vpul_pu_cnn { |
| __u32 is_fetch_mode :1; |
| __u32 is_bypass :1; |
| }; |
| |
| /*! * \brief FLAMORB parameters |
| * work_mode-->pack_output |
| * work_mode-->first_minus_second |
| * enable_out1 = !work_mode |
| * eff_mode = bits_in==8 & mprb==Large |
| * pack_bitage = 16 |
| * bit_diff = 1 |
| * enable_out1 =1 |
| * coord_pairs_offset = group_index * flamorb->num_coord_pairs |
| */ |
| struct vpul_pu_flam_orb { |
| __u32 work_mode :1; |
| __u32 eff_mode :1;//need to remove after HW mapper change |
| __u32 first_minus_second :1;//need to remove after HW mapper change |
| __u32 bit_diff :1;//need to remove after HW mapper change |
| __u32 pack_output :1;//need to remove after HW mapper change |
| __u32 pack_bitage :1;//need to remove after HW mapper change |
| __u32 bits_in :1; |
| __u32 start_x :8; //need to remove after HW mapper change |
| __u32 start_y :8; //need to remove after HW mapper change |
| __u32 end_x :8; //need to remove after HW mapper change |
| __u32 end_y :8; //need to remove after HW mapper change |
| __u32 const_val :8; |
| __u32 use_const_val :1; |
| //__u32 enable_out1 :1; |
| //__u32 coord_pairs_offset :10; |
| __u32 num_coord_pairs :11; |
| __u32 scaler_ind :1; |
| __u32 roi_ind :5; |
| __u32 full_roi :5; |
| |
| |
| __u32 inout_index; |
| }; |
| |
| /*! |
| * \brief Map to List parameters |
| * \details <B>Calculating buffer size needed:</B> \n Output buffer size written by block calculated in the following way:\n |
| * \li if value_in==0 then BytesPerReocrd = 4 |
| * \li if value_in==1 then BytesPerReocrd = 6 (for bits_in==0 or 1) or 8 (for bits_in==2) |
| * \li BytesPerLine = 240(if BytesPerRecord ==8) or 252 (otherwise) |
| * \li NumberOfLines = CIEL_DIV(BytesPerLine/BytesPerRecord, num_of_points) |
| * \li totalSizeRequired = (NumberOfLines*BytesPerLine)+2 |
| */ |
| struct vpul_pu_map2list { |
| __u32 bits_in :2; |
| __u32 signed_in :1; |
| __u32 value_in :1; |
| __u32 enable_out_map :1; |
| __u32 enable_out_lst :1; |
| __u32 inout_indx :5; |
| __u32 threshold_low; |
| __u32 threshold_high; |
| __u32 num_of_point; |
| }; |
| |
| /*! \brief Union for parameters of all different types of Processing units*/ |
| union vpul_pu_parameters { |
| struct vpul_pu_dma dma; |
| struct vpul_pu_salb salb; |
| struct vpul_pu_calb calb; |
| struct vpul_pu_rois_out rois_out; |
| struct vpul_pu_crop crop; |
| struct vpul_pu_mde mde; |
| struct vpul_pu_map2list map2list; |
| struct vpul_pu_nms nms; |
| struct vpul_pu_slf slf; |
| struct vpul_pu_glf glf; |
| struct vpul_pu_ccm ccm; |
| struct vpul_pu_lut lut; |
| struct vpul_pu_integral integral; |
| struct vpul_pu_upscaler upscaler; |
| struct vpul_pu_downscaler downScaler; |
| struct vpul_pu_joiner joiner; |
| struct vpul_pu_spliter spliter; |
| struct vpul_pu_histogram histogram; |
| struct vpul_pu_nlf nlf; |
| struct vpul_pu_fast_depth depth; |
| struct vpul_pu_dispeq disparity; |
| struct vpul_pu_in_paint in_paint; |
| struct vpul_pu_cnn cnn; |
| struct vpul_pu_flam_orb flam_orb; |
| struct vpul_pu_fifo fifo; |
| |
| struct vpul_pu_add add; |
| }; |
| |
| #define NO_PU_CONNECTED 0xFF |
| |
| /*!\brief describe input connections of one PU */ |
| struct vpu_pu_input { |
| /*! the index of the source PU in the sub-chains PU's list. |
| * A value of NO_PU_CONNECTED (= 0xFF) means that this input is disabled; |
| * this is useful in case there is only 1 active connection to this PU, |
| * on input port other than port #0 - for instance port #2 : |
| * in this case n_in_connect will be set to 3 in vpul_pu structure, and |
| * pu_idx will be set to 0xFF for first 2 instances of vpu_pu_input |
| */ |
| __u32 pu_idx; |
| /*! the index in the source PU output connections, that connected |
| * to this PU. |
| */ |
| __u32 s_pu_out_idx; |
| }; |
| |
| #define NO_MPRB_CONNECTED 0xFF |
| |
| /*!\brief This structure contains one processing unit description */ |
| struct vpul_pu { |
| |
| /*!\brief if !=0 bypass block */ |
| __u32 bypass; |
| /*!\brief operation type */ |
| enum vpul_logical_op_types op_type; |
| /*!\brief block instance index */ |
| enum vpul_pu_instance instance; |
| /*!\brief number of MPRBs used */ |
| __u32 n_mprbs; |
| /*!\brief 1K / 4K - see VPUH_MPRB_TYPE values. if both small and large MPRBs |
| * are used :will indicate "large" (4K) |
| */ |
| __u32 mprb_type; |
| |
| /*! memory connectivity for line buffers; contents of entry #N in array is MPRB actively |
| * connected to ram port #N; if no such MPRB, contents = NO_MPRB_CONNECTED (= 0xFF) |
| * The effective size of the array is max #of ram ports per PU. |
| */ |
| __u32 mprbs[VPU_MAXIMAL_MPRB_CONNECTED]; |
| /*! number of input connections */ |
| __u32 n_in_connect; |
| /*! input connection information */ |
| struct vpu_pu_input in_connect[VPUL_PU_MAX_PORTS]; |
| /*! number of output connections */ |
| __u32 n_out_connect; |
| /*! index of the block input sizes information in process |
| * sizes vector - vpul_sizes |
| */ |
| __u32 in_size_idx; |
| /*! index of the block output sizes in process |
| * sizes vector - vpul_sizes |
| */ |
| __u32 out_size_idx; |
| |
| /*! number of params that arrive to the prm of current pu from HW results of |
| * previous pu's |
| */ |
| __u32 n_run_time_params_from_hw; |
| |
| /*! PU parameter structure */ |
| union vpul_pu_parameters params; |
| }; |
| |
| /*! |
| * \brief PU location in TDS, implemented as indexes of vertex, subchain and PU. |
| */ |
| struct vpul_pu_location { |
| /*! the index of the vertex the PU is in. */ |
| __u32 vtx_idx; |
| /*! the index of the subchain in the vertex the PU is in. */ |
| __u32 sc_idx_in_vtx; |
| /*! the index of the subchain in the sc the PU is in. */ |
| __u32 pu_idx_in_sc; |
| }; |
| |
| /** @}*/ |
| /** @}*/ |
| |
| #endif |