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) 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_BNLM_PARAM_H
179d4fa1a1SMauro Carvalho Chehab #define __IA_CSS_BNLM_PARAM_H
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab #include "type_support.h"
209d4fa1a1SMauro Carvalho Chehab #include "vmem.h" /* needed for VMEM_ARRAY */
219d4fa1a1SMauro Carvalho Chehab 
229d4fa1a1SMauro Carvalho Chehab struct bnlm_lut {
239d4fa1a1SMauro Carvalho Chehab 	VMEM_ARRAY(thr, ISP_VEC_NELEMS); /* thresholds */
249d4fa1a1SMauro Carvalho Chehab 	VMEM_ARRAY(val, ISP_VEC_NELEMS); /* values */
259d4fa1a1SMauro Carvalho Chehab };
269d4fa1a1SMauro Carvalho Chehab 
279d4fa1a1SMauro Carvalho Chehab struct bnlm_vmem_params {
289d4fa1a1SMauro Carvalho Chehab 	VMEM_ARRAY(nl_th, ISP_VEC_NELEMS);
299d4fa1a1SMauro Carvalho Chehab 	VMEM_ARRAY(match_quality_max_idx, ISP_VEC_NELEMS);
309d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut mu_root_lut;
319d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut sad_norm_lut;
329d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut sig_detail_lut;
339d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut sig_rad_lut;
349d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut rad_pow_lut;
359d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut nl_0_lut;
369d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut nl_1_lut;
379d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut nl_2_lut;
389d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut nl_3_lut;
399d4fa1a1SMauro Carvalho Chehab 
409d4fa1a1SMauro Carvalho Chehab 	/* LUTs used for division approximiation */
419d4fa1a1SMauro Carvalho Chehab 	struct bnlm_lut div_lut;
429d4fa1a1SMauro Carvalho Chehab 
439d4fa1a1SMauro Carvalho Chehab 	VMEM_ARRAY(div_lut_intercepts, ISP_VEC_NELEMS);
449d4fa1a1SMauro Carvalho Chehab 
459d4fa1a1SMauro Carvalho Chehab 	/* 240x does not have an ISP instruction to left shift each element of a
469d4fa1a1SMauro Carvalho Chehab 	 * vector by different shift value. Hence it will be simulated by multiplying
479d4fa1a1SMauro Carvalho Chehab 	 * the elements by required 2^shift. */
489d4fa1a1SMauro Carvalho Chehab 	VMEM_ARRAY(power_of_2, ISP_VEC_NELEMS);
499d4fa1a1SMauro Carvalho Chehab };
509d4fa1a1SMauro Carvalho Chehab 
519d4fa1a1SMauro Carvalho Chehab /* BNLM ISP parameters */
529d4fa1a1SMauro Carvalho Chehab struct bnlm_dmem_params {
539d4fa1a1SMauro Carvalho Chehab 	bool rad_enable;
549d4fa1a1SMauro Carvalho Chehab 	s32 rad_x_origin;
559d4fa1a1SMauro Carvalho Chehab 	s32 rad_y_origin;
569d4fa1a1SMauro Carvalho Chehab 	s32 avg_min_th;
579d4fa1a1SMauro Carvalho Chehab 	s32 max_min_th;
589d4fa1a1SMauro Carvalho Chehab 
599d4fa1a1SMauro Carvalho Chehab 	s32 exp_coeff_a;
609d4fa1a1SMauro Carvalho Chehab 	u32 exp_coeff_b;
619d4fa1a1SMauro Carvalho Chehab 	s32 exp_coeff_c;
629d4fa1a1SMauro Carvalho Chehab 	u32 exp_exponent;
639d4fa1a1SMauro Carvalho Chehab };
649d4fa1a1SMauro Carvalho Chehab 
659d4fa1a1SMauro Carvalho Chehab #endif /* __IA_CSS_BNLM_PARAM_H */
66