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