1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2015, Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #ifndef _SH_CSS_PARAMS_H_ 17 #define _SH_CSS_PARAMS_H_ 18 19 /*! \file */ 20 21 /* Forward declaration to break mutual dependency */ 22 struct ia_css_isp_parameters; 23 24 #include <type_support.h> 25 #include "ia_css_types.h" 26 #include "ia_css_binary.h" 27 #include "sh_css_legacy.h" 28 29 #include "sh_css_defs.h" /* SH_CSS_MAX_STAGES */ 30 #include "ia_css_pipeline.h" 31 #include "ia_css_isp_params.h" 32 #include "uds/uds_1.0/ia_css_uds_param.h" 33 #include "crop/crop_1.0/ia_css_crop_types.h" 34 35 #define PIX_SHIFT_FILTER_RUN_IN_X 12 36 #define PIX_SHIFT_FILTER_RUN_IN_Y 12 37 38 #include "ob/ob_1.0/ia_css_ob_param.h" 39 /* Isp configurations per stream */ 40 struct sh_css_isp_param_configs { 41 /* OB (Optical Black) */ 42 struct sh_css_isp_ob_stream_config ob; 43 }; 44 45 /* Isp parameters per stream */ 46 struct ia_css_isp_parameters { 47 /* UDS */ 48 struct sh_css_sp_uds_params uds[SH_CSS_MAX_STAGES]; 49 struct sh_css_isp_param_configs stream_configs; 50 struct ia_css_fpn_table fpn_config; 51 struct ia_css_vector motion_config; 52 const struct ia_css_morph_table *morph_table; 53 const struct ia_css_shading_table *sc_table; 54 struct ia_css_shading_table *sc_config; 55 struct ia_css_macc_table macc_table; 56 struct ia_css_gamma_table gc_table; 57 struct ia_css_ctc_table ctc_table; 58 struct ia_css_xnr_table xnr_table; 59 60 struct ia_css_dz_config dz_config; 61 struct ia_css_3a_config s3a_config; 62 struct ia_css_wb_config wb_config; 63 struct ia_css_cc_config cc_config; 64 struct ia_css_cc_config yuv2rgb_cc_config; 65 struct ia_css_cc_config rgb2yuv_cc_config; 66 struct ia_css_tnr_config tnr_config; 67 struct ia_css_ob_config ob_config; 68 /*----- DPC configuration -----*/ 69 /* The default DPC configuration is retained and currently set 70 * using the stream configuration. The code generated from genparams 71 * uses this configuration to set the DPC parameters per stage but this 72 * will be overwritten by the per pipe configuration */ 73 struct ia_css_dp_config dp_config; 74 /* ------ pipe specific DPC configuration ------ */ 75 /* Please note that this implementation is a temporary solution and 76 * should be replaced by CSS per pipe configuration when the support 77 * is ready (HSD 1303967698)*/ 78 struct ia_css_dp_config pipe_dp_config[IA_CSS_PIPE_ID_NUM]; 79 struct ia_css_nr_config nr_config; 80 struct ia_css_ee_config ee_config; 81 struct ia_css_de_config de_config; 82 struct ia_css_gc_config gc_config; 83 struct ia_css_anr_config anr_config; 84 struct ia_css_ce_config ce_config; 85 struct ia_css_formats_config formats_config; 86 /* ---- deprecated: replaced with pipe_dvs_6axis_config---- */ 87 struct ia_css_dvs_6axis_config *dvs_6axis_config; 88 struct ia_css_ecd_config ecd_config; 89 struct ia_css_ynr_config ynr_config; 90 struct ia_css_yee_config yee_config; 91 struct ia_css_fc_config fc_config; 92 struct ia_css_cnr_config cnr_config; 93 struct ia_css_macc_config macc_config; 94 struct ia_css_ctc_config ctc_config; 95 struct ia_css_aa_config aa_config; 96 struct ia_css_aa_config bds_config; 97 struct ia_css_aa_config raa_config; 98 struct ia_css_rgb_gamma_table r_gamma_table; 99 struct ia_css_rgb_gamma_table g_gamma_table; 100 struct ia_css_rgb_gamma_table b_gamma_table; 101 struct ia_css_anr_thres anr_thres; 102 struct ia_css_xnr_config xnr_config; 103 struct ia_css_xnr3_config xnr3_config; 104 struct ia_css_uds_config uds_config; 105 struct ia_css_crop_config crop_config; 106 struct ia_css_output_config output_config; 107 struct ia_css_dvs_6axis_config *pipe_dvs_6axis_config[IA_CSS_PIPE_ID_NUM]; 108 /* ------ deprecated(bz675) : from ------ */ 109 struct ia_css_shading_settings shading_settings; 110 /* ------ deprecated(bz675) : to ------ */ 111 struct ia_css_dvs_coefficients dvs_coefs; 112 struct ia_css_dvs2_coefficients dvs2_coefs; 113 114 bool isp_params_changed; 115 116 bool isp_mem_params_changed 117 [IA_CSS_PIPE_ID_NUM][SH_CSS_MAX_STAGES][IA_CSS_NUM_MEMORIES]; 118 bool dz_config_changed; 119 bool motion_config_changed; 120 bool dis_coef_table_changed; 121 bool dvs2_coef_table_changed; 122 bool morph_table_changed; 123 bool sc_table_changed; 124 bool sc_table_dirty; 125 unsigned int sc_table_last_pipe_num; 126 bool anr_thres_changed; 127 /* ---- deprecated: replaced with pipe_dvs_6axis_config_changed ---- */ 128 bool dvs_6axis_config_changed; 129 /* ------ pipe specific DPC configuration ------ */ 130 /* Please note that this implementation is a temporary solution and 131 * should be replaced by CSS per pipe configuration when the support 132 * is ready (HSD 1303967698) */ 133 bool pipe_dpc_config_changed[IA_CSS_PIPE_ID_NUM]; 134 /* ------ deprecated(bz675) : from ------ */ 135 bool shading_settings_changed; 136 /* ------ deprecated(bz675) : to ------ */ 137 bool pipe_dvs_6axis_config_changed[IA_CSS_PIPE_ID_NUM]; 138 139 bool config_changed[IA_CSS_NUM_PARAMETER_IDS]; 140 141 unsigned int sensor_binning; 142 /* local buffers, used to re-order the 3a statistics in vmem-format */ 143 struct sh_css_ddr_address_map pipe_ddr_ptrs[IA_CSS_PIPE_ID_NUM]; 144 struct sh_css_ddr_address_map_size pipe_ddr_ptrs_size[IA_CSS_PIPE_ID_NUM]; 145 struct sh_css_ddr_address_map ddr_ptrs; 146 struct sh_css_ddr_address_map_size ddr_ptrs_size; 147 struct ia_css_frame 148 *output_frame; /** Output frame the config is to be applied to (optional) */ 149 u32 isp_parameters_id; /** Unique ID to track which config was actually applied to a particular frame */ 150 }; 151 152 void 153 ia_css_params_store_ia_css_host_data( 154 ia_css_ptr ddr_addr, 155 struct ia_css_host_data *data); 156 157 int 158 ia_css_params_store_sctbl( 159 const struct ia_css_pipeline_stage *stage, 160 ia_css_ptr ddr_addr, 161 const struct ia_css_shading_table *shading_table); 162 163 struct ia_css_host_data * 164 ia_css_params_alloc_convert_sctbl( 165 const struct ia_css_pipeline_stage *stage, 166 const struct ia_css_shading_table *shading_table); 167 168 struct ia_css_isp_config * 169 sh_css_pipe_isp_config_get(struct ia_css_pipe *pipe); 170 171 /* ipu address allocation/free for gdc lut */ 172 ia_css_ptr 173 sh_css_params_alloc_gdc_lut(void); 174 void 175 sh_css_params_free_gdc_lut(ia_css_ptr addr); 176 177 int 178 sh_css_params_map_and_store_default_gdc_lut(void); 179 180 void 181 sh_css_params_free_default_gdc_lut(void); 182 183 ia_css_ptr 184 sh_css_params_get_default_gdc_lut(void); 185 186 ia_css_ptr 187 sh_css_pipe_get_pp_gdc_lut(const struct ia_css_pipe *pipe); 188 189 #endif /* _SH_CSS_PARAMS_H_ */ 190