1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */ 29d4fa1a1SMauro Carvalho Chehab /** 39d4fa1a1SMauro Carvalho Chehab Support for Intel Camera Imaging ISP subsystem. 49d4fa1a1SMauro Carvalho Chehab Copyright (c) 2010 - 2015, Intel Corporation. 59d4fa1a1SMauro Carvalho Chehab 69d4fa1a1SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify it 79d4fa1a1SMauro Carvalho Chehab under the terms and conditions of the GNU General Public License, 89d4fa1a1SMauro Carvalho Chehab version 2, as published by the Free Software Foundation. 99d4fa1a1SMauro Carvalho Chehab 109d4fa1a1SMauro Carvalho Chehab This program is distributed in the hope it will be useful, but WITHOUT 119d4fa1a1SMauro Carvalho Chehab ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 129d4fa1a1SMauro Carvalho Chehab FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 139d4fa1a1SMauro Carvalho Chehab more details. 149d4fa1a1SMauro Carvalho Chehab */ 159d4fa1a1SMauro Carvalho Chehab 169d4fa1a1SMauro Carvalho Chehab #ifndef _IA_CSS_BINARY_H_ 179d4fa1a1SMauro Carvalho Chehab #define _IA_CSS_BINARY_H_ 189d4fa1a1SMauro Carvalho Chehab 199d4fa1a1SMauro Carvalho Chehab #include <type_support.h> 209d4fa1a1SMauro Carvalho Chehab #include "ia_css_types.h" 219d4fa1a1SMauro Carvalho Chehab #include "ia_css_err.h" 229d4fa1a1SMauro Carvalho Chehab #include "ia_css_stream_format.h" 239d4fa1a1SMauro Carvalho Chehab #include "ia_css_stream_public.h" 249d4fa1a1SMauro Carvalho Chehab #include "ia_css_frame_public.h" 259d4fa1a1SMauro Carvalho Chehab #include "sh_css_metrics.h" 269d4fa1a1SMauro Carvalho Chehab #include "isp/kernels/fixedbds/fixedbds_1.0/ia_css_fixedbds_types.h" 279d4fa1a1SMauro Carvalho Chehab 289d4fa1a1SMauro Carvalho Chehab /* The binary mode is used in pre-processor expressions so we cannot 299d4fa1a1SMauro Carvalho Chehab * use an enum here. */ 309d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_COPY 0 319d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PREVIEW 1 329d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY 2 339d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_VIDEO 3 349d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRE_ISP 4 359d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_GDC 5 369d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_POST_ISP 6 379d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_ANR 7 389d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_CAPTURE_PP 8 399d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_VF_PP 9 409d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRE_DE 10 419d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE0 11 429d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE1 12 439d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE2 13 449d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE3 14 459d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE4 15 469d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE5 16 479d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_NUM_MODES 17 489d4fa1a1SMauro Carvalho Chehab 499d4fa1a1SMauro Carvalho Chehab #define MAX_NUM_PRIMARY_STAGES 6 509d4fa1a1SMauro Carvalho Chehab #define NUM_PRIMARY_HQ_STAGES 6 /* number of primary stages for ISP2.6.1 high quality pipe */ 519d4fa1a1SMauro Carvalho Chehab #define NUM_PRIMARY_STAGES 1 /* number of primary satges for ISP1/ISP2.2 pipe */ 529d4fa1a1SMauro Carvalho Chehab 539d4fa1a1SMauro Carvalho Chehab /* Indicate where binaries can read input from */ 549d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_INPUT_SENSOR 0 559d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_INPUT_MEMORY 1 569d4fa1a1SMauro Carvalho Chehab #define IA_CSS_BINARY_INPUT_VARIABLE 2 579d4fa1a1SMauro Carvalho Chehab 589d4fa1a1SMauro Carvalho Chehab /* Should be included without the path. 599d4fa1a1SMauro Carvalho Chehab However, that requires adding the path to numerous makefiles 609d4fa1a1SMauro Carvalho Chehab that have nothing to do with isp parameters. 619d4fa1a1SMauro Carvalho Chehab */ 629d4fa1a1SMauro Carvalho Chehab #include "runtime/isp_param/interface/ia_css_isp_param_types.h" 639d4fa1a1SMauro Carvalho Chehab 649d4fa1a1SMauro Carvalho Chehab /* now these ports only include output ports but not vf output ports */ 659d4fa1a1SMauro Carvalho Chehab enum { 669d4fa1a1SMauro Carvalho Chehab IA_CSS_BINARY_OUTPUT_PORT_0 = 0, 679d4fa1a1SMauro Carvalho Chehab IA_CSS_BINARY_OUTPUT_PORT_1 = 1, 689d4fa1a1SMauro Carvalho Chehab IA_CSS_BINARY_MAX_OUTPUT_PORTS = 2 699d4fa1a1SMauro Carvalho Chehab }; 709d4fa1a1SMauro Carvalho Chehab 719d4fa1a1SMauro Carvalho Chehab struct ia_css_cas_binary_descr { 729d4fa1a1SMauro Carvalho Chehab unsigned int num_stage; 739d4fa1a1SMauro Carvalho Chehab unsigned int num_output_stage; 749d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *in_info; 759d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *internal_out_info; 769d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *out_info; 779d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *vf_info; 789d4fa1a1SMauro Carvalho Chehab bool *is_output_stage; 799d4fa1a1SMauro Carvalho Chehab }; 809d4fa1a1SMauro Carvalho Chehab 819d4fa1a1SMauro Carvalho Chehab struct ia_css_binary_descr { 829d4fa1a1SMauro Carvalho Chehab int mode; 839d4fa1a1SMauro Carvalho Chehab bool online; 849d4fa1a1SMauro Carvalho Chehab bool continuous; 859d4fa1a1SMauro Carvalho Chehab bool striped; 869d4fa1a1SMauro Carvalho Chehab bool two_ppc; 879d4fa1a1SMauro Carvalho Chehab bool enable_yuv_ds; 889d4fa1a1SMauro Carvalho Chehab bool enable_high_speed; 899d4fa1a1SMauro Carvalho Chehab bool enable_dvs_6axis; 909d4fa1a1SMauro Carvalho Chehab bool enable_reduced_pipe; 919d4fa1a1SMauro Carvalho Chehab bool enable_dz; 929d4fa1a1SMauro Carvalho Chehab bool enable_xnr; 939d4fa1a1SMauro Carvalho Chehab bool enable_fractional_ds; 949d4fa1a1SMauro Carvalho Chehab bool enable_dpc; 959d4fa1a1SMauro Carvalho Chehab 969d4fa1a1SMauro Carvalho Chehab /* ISP2401 */ 979d4fa1a1SMauro Carvalho Chehab bool enable_tnr; 989d4fa1a1SMauro Carvalho Chehab 999d4fa1a1SMauro Carvalho Chehab bool enable_capture_pp_bli; 1009d4fa1a1SMauro Carvalho Chehab struct ia_css_resolution dvs_env; 1019d4fa1a1SMauro Carvalho Chehab enum atomisp_input_format stream_format; 1029d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *in_info; /* the info of the input-frame with the 1039d4fa1a1SMauro Carvalho Chehab ISP required resolution. */ 1049d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *bds_out_info; 1059d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *out_info[IA_CSS_BINARY_MAX_OUTPUT_PORTS]; 1069d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info *vf_info; 1079d4fa1a1SMauro Carvalho Chehab unsigned int isp_pipe_version; 1089d4fa1a1SMauro Carvalho Chehab unsigned int required_bds_factor; 1099d4fa1a1SMauro Carvalho Chehab int stream_config_left_padding; 1109d4fa1a1SMauro Carvalho Chehab }; 1119d4fa1a1SMauro Carvalho Chehab 1129d4fa1a1SMauro Carvalho Chehab struct ia_css_binary { 1139d4fa1a1SMauro Carvalho Chehab const struct ia_css_binary_xinfo *info; 1149d4fa1a1SMauro Carvalho Chehab enum atomisp_input_format input_format; 1159d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info in_frame_info; 1169d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info internal_frame_info; 1179d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info out_frame_info[IA_CSS_BINARY_MAX_OUTPUT_PORTS]; 1189d4fa1a1SMauro Carvalho Chehab struct ia_css_resolution effective_in_frame_res; 1199d4fa1a1SMauro Carvalho Chehab struct ia_css_frame_info vf_frame_info; 1209d4fa1a1SMauro Carvalho Chehab int input_buf_vectors; 1219d4fa1a1SMauro Carvalho Chehab int deci_factor_log2; 1229d4fa1a1SMauro Carvalho Chehab int vf_downscale_log2; 1239d4fa1a1SMauro Carvalho Chehab int s3atbl_width; 1249d4fa1a1SMauro Carvalho Chehab int s3atbl_height; 1259d4fa1a1SMauro Carvalho Chehab int s3atbl_isp_width; 1269d4fa1a1SMauro Carvalho Chehab int s3atbl_isp_height; 1279d4fa1a1SMauro Carvalho Chehab unsigned int morph_tbl_width; 1289d4fa1a1SMauro Carvalho Chehab unsigned int morph_tbl_aligned_width; 1299d4fa1a1SMauro Carvalho Chehab unsigned int morph_tbl_height; 1309d4fa1a1SMauro Carvalho Chehab int sctbl_width_per_color; 1319d4fa1a1SMauro Carvalho Chehab int sctbl_aligned_width_per_color; 1329d4fa1a1SMauro Carvalho Chehab int sctbl_height; 1339d4fa1a1SMauro Carvalho Chehab struct ia_css_sdis_info dis; 1349d4fa1a1SMauro Carvalho Chehab struct ia_css_resolution dvs_envelope; 1359d4fa1a1SMauro Carvalho Chehab bool online; 1369d4fa1a1SMauro Carvalho Chehab unsigned int uds_xc; 1379d4fa1a1SMauro Carvalho Chehab unsigned int uds_yc; 1389d4fa1a1SMauro Carvalho Chehab unsigned int left_padding; 1399d4fa1a1SMauro Carvalho Chehab struct sh_css_binary_metrics metrics; 1409d4fa1a1SMauro Carvalho Chehab struct ia_css_isp_param_host_segments mem_params; 1419d4fa1a1SMauro Carvalho Chehab struct ia_css_isp_param_css_segments css_params; 1429d4fa1a1SMauro Carvalho Chehab }; 1439d4fa1a1SMauro Carvalho Chehab 14489f3b319SArnd Bergmann #define IA_CSS_BINARY_DEFAULT_SETTINGS { \ 1459d4fa1a1SMauro Carvalho Chehab .input_format = ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY, \ 1469d4fa1a1SMauro Carvalho Chehab .in_frame_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \ 1479d4fa1a1SMauro Carvalho Chehab .internal_frame_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \ 1489d4fa1a1SMauro Carvalho Chehab .out_frame_info = {IA_CSS_BINARY_DEFAULT_FRAME_INFO}, \ 1499d4fa1a1SMauro Carvalho Chehab .vf_frame_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \ 1509d4fa1a1SMauro Carvalho Chehab } 1519d4fa1a1SMauro Carvalho Chehab 15241022d35SMauro Carvalho Chehab int 1539d4fa1a1SMauro Carvalho Chehab ia_css_binary_init_infos(void); 1549d4fa1a1SMauro Carvalho Chehab 15541022d35SMauro Carvalho Chehab int 1569d4fa1a1SMauro Carvalho Chehab ia_css_binary_uninit(void); 1579d4fa1a1SMauro Carvalho Chehab 15841022d35SMauro Carvalho Chehab int 1599d4fa1a1SMauro Carvalho Chehab ia_css_binary_fill_info(const struct ia_css_binary_xinfo *xinfo, 1609d4fa1a1SMauro Carvalho Chehab bool online, 1619d4fa1a1SMauro Carvalho Chehab bool two_ppc, 1629d4fa1a1SMauro Carvalho Chehab enum atomisp_input_format stream_format, 1639d4fa1a1SMauro Carvalho Chehab const struct ia_css_frame_info *in_info, 1649d4fa1a1SMauro Carvalho Chehab const struct ia_css_frame_info *bds_out_info, 1659d4fa1a1SMauro Carvalho Chehab const struct ia_css_frame_info *out_info[], 1669d4fa1a1SMauro Carvalho Chehab const struct ia_css_frame_info *vf_info, 1679d4fa1a1SMauro Carvalho Chehab struct ia_css_binary *binary, 1689d4fa1a1SMauro Carvalho Chehab struct ia_css_resolution *dvs_env, 1699d4fa1a1SMauro Carvalho Chehab int stream_config_left_padding, 1709d4fa1a1SMauro Carvalho Chehab bool accelerator); 1719d4fa1a1SMauro Carvalho Chehab 17241022d35SMauro Carvalho Chehab int 1739d4fa1a1SMauro Carvalho Chehab ia_css_binary_find(struct ia_css_binary_descr *descr, 1749d4fa1a1SMauro Carvalho Chehab struct ia_css_binary *binary); 1759d4fa1a1SMauro Carvalho Chehab 1769d4fa1a1SMauro Carvalho Chehab /* @brief Get the shading information of the specified shading correction type. 1779d4fa1a1SMauro Carvalho Chehab * 1789d4fa1a1SMauro Carvalho Chehab * @param[in] binary: The isp binary which has the shading correction. 1799d4fa1a1SMauro Carvalho Chehab * @param[in] type: The shading correction type. 1809d4fa1a1SMauro Carvalho Chehab * @param[in] required_bds_factor: The bayer downscaling factor required in the pipe. 1819d4fa1a1SMauro Carvalho Chehab * @param[in] stream_config: The stream configuration. 1829d4fa1a1SMauro Carvalho Chehab * @param[out] shading_info: The shading information. 1839d4fa1a1SMauro Carvalho Chehab * The shading information necessary as API is stored in the shading_info. 1849d4fa1a1SMauro Carvalho Chehab * The driver needs to get this information to generate 1859d4fa1a1SMauro Carvalho Chehab * the shading table directly required from ISP. 1869d4fa1a1SMauro Carvalho Chehab * @param[out] pipe_config: The pipe configuration. 1879d4fa1a1SMauro Carvalho Chehab * The shading information related to ISP (but, not necessary as API) is stored in the pipe_config. 18841022d35SMauro Carvalho Chehab * @return 0 or error code upon error. 1899d4fa1a1SMauro Carvalho Chehab * 1909d4fa1a1SMauro Carvalho Chehab */ 19141022d35SMauro Carvalho Chehab int 1929d4fa1a1SMauro Carvalho Chehab ia_css_binary_get_shading_info(const struct ia_css_binary *binary, 1939d4fa1a1SMauro Carvalho Chehab enum ia_css_shading_correction_type type, 1949d4fa1a1SMauro Carvalho Chehab unsigned int required_bds_factor, 1959d4fa1a1SMauro Carvalho Chehab const struct ia_css_stream_config *stream_config, 1969d4fa1a1SMauro Carvalho Chehab struct ia_css_shading_info *shading_info, 1979d4fa1a1SMauro Carvalho Chehab struct ia_css_pipe_config *pipe_config); 1989d4fa1a1SMauro Carvalho Chehab 19941022d35SMauro Carvalho Chehab int 2009d4fa1a1SMauro Carvalho Chehab ia_css_binary_3a_grid_info(const struct ia_css_binary *binary, 2019d4fa1a1SMauro Carvalho Chehab struct ia_css_grid_info *info, 2029d4fa1a1SMauro Carvalho Chehab struct ia_css_pipe *pipe); 2039d4fa1a1SMauro Carvalho Chehab 2049d4fa1a1SMauro Carvalho Chehab void 2059d4fa1a1SMauro Carvalho Chehab ia_css_binary_dvs_grid_info(const struct ia_css_binary *binary, 2069d4fa1a1SMauro Carvalho Chehab struct ia_css_grid_info *info, 2079d4fa1a1SMauro Carvalho Chehab struct ia_css_pipe *pipe); 2089d4fa1a1SMauro Carvalho Chehab 2099d4fa1a1SMauro Carvalho Chehab void 2109d4fa1a1SMauro Carvalho Chehab ia_css_binary_dvs_stat_grid_info( 2119d4fa1a1SMauro Carvalho Chehab const struct ia_css_binary *binary, 2129d4fa1a1SMauro Carvalho Chehab struct ia_css_grid_info *info, 2139d4fa1a1SMauro Carvalho Chehab struct ia_css_pipe *pipe); 2149d4fa1a1SMauro Carvalho Chehab 2159d4fa1a1SMauro Carvalho Chehab unsigned 2169d4fa1a1SMauro Carvalho Chehab ia_css_binary_max_vf_width(void); 2179d4fa1a1SMauro Carvalho Chehab 2189d4fa1a1SMauro Carvalho Chehab void 2199d4fa1a1SMauro Carvalho Chehab ia_css_binary_destroy_isp_parameters(struct ia_css_binary *binary); 2209d4fa1a1SMauro Carvalho Chehab 2219d4fa1a1SMauro Carvalho Chehab void 2229d4fa1a1SMauro Carvalho Chehab ia_css_binary_get_isp_binaries(struct ia_css_binary_xinfo **binaries, 2239d4fa1a1SMauro Carvalho Chehab uint32_t *num_isp_binaries); 2249d4fa1a1SMauro Carvalho Chehab 2259d4fa1a1SMauro Carvalho Chehab #endif /* _IA_CSS_BINARY_H_ */ 226