/*
 * Support for Intel Camera Imaging ISP subsystem.
 * Copyright (c) 2015, Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

/* Generated code: do not edit or commmit. */

#ifndef _IA_CSS_ISP_PARAM_H
#define _IA_CSS_ISP_PARAM_H

/* Code generated by genparam/gencode.c:gen_param_enum() */

enum ia_css_parameter_ids {
	IA_CSS_AA_ID,
	IA_CSS_ANR_ID,
	IA_CSS_ANR2_ID,
	IA_CSS_BH_ID,
	IA_CSS_CNR_ID,
	IA_CSS_CROP_ID,
	IA_CSS_CSC_ID,
	IA_CSS_DP_ID,
	IA_CSS_BNR_ID,
	IA_CSS_DE_ID,
	IA_CSS_ECD_ID,
	IA_CSS_FORMATS_ID,
	IA_CSS_FPN_ID,
	IA_CSS_GC_ID,
	IA_CSS_CE_ID,
	IA_CSS_YUV2RGB_ID,
	IA_CSS_RGB2YUV_ID,
	IA_CSS_R_GAMMA_ID,
	IA_CSS_G_GAMMA_ID,
	IA_CSS_B_GAMMA_ID,
	IA_CSS_UDS_ID,
	IA_CSS_RAA_ID,
	IA_CSS_S3A_ID,
	IA_CSS_OB_ID,
	IA_CSS_OUTPUT_ID,
	IA_CSS_SC_ID,
	IA_CSS_BDS_ID,
	IA_CSS_TNR_ID,
	IA_CSS_MACC_ID,
	IA_CSS_SDIS_HORICOEF_ID,
	IA_CSS_SDIS_VERTCOEF_ID,
	IA_CSS_SDIS_HORIPROJ_ID,
	IA_CSS_SDIS_VERTPROJ_ID,
	IA_CSS_SDIS2_HORICOEF_ID,
	IA_CSS_SDIS2_VERTCOEF_ID,
	IA_CSS_SDIS2_HORIPROJ_ID,
	IA_CSS_SDIS2_VERTPROJ_ID,
	IA_CSS_WB_ID,
	IA_CSS_NR_ID,
	IA_CSS_YEE_ID,
	IA_CSS_YNR_ID,
	IA_CSS_FC_ID,
	IA_CSS_CTC_ID,
	IA_CSS_XNR_TABLE_ID,
	IA_CSS_XNR_ID,
	IA_CSS_XNR3_ID,
	IA_CSS_NUM_PARAMETER_IDS
};

/* Code generated by genparam/gencode.c:gen_param_offsets() */

struct ia_css_memory_offsets {
	struct {
		struct ia_css_isp_parameter aa;
		struct ia_css_isp_parameter anr;
		struct ia_css_isp_parameter bh;
		struct ia_css_isp_parameter cnr;
		struct ia_css_isp_parameter crop;
		struct ia_css_isp_parameter csc;
		struct ia_css_isp_parameter dp;
		struct ia_css_isp_parameter bnr;
		struct ia_css_isp_parameter de;
		struct ia_css_isp_parameter ecd;
		struct ia_css_isp_parameter formats;
		struct ia_css_isp_parameter fpn;
		struct ia_css_isp_parameter gc;
		struct ia_css_isp_parameter ce;
		struct ia_css_isp_parameter yuv2rgb;
		struct ia_css_isp_parameter rgb2yuv;
		struct ia_css_isp_parameter uds;
		struct ia_css_isp_parameter raa;
		struct ia_css_isp_parameter s3a;
		struct ia_css_isp_parameter ob;
		struct ia_css_isp_parameter output;
		struct ia_css_isp_parameter sc;
		struct ia_css_isp_parameter bds;
		struct ia_css_isp_parameter tnr;
		struct ia_css_isp_parameter macc;
		struct ia_css_isp_parameter sdis_horiproj;
		struct ia_css_isp_parameter sdis_vertproj;
		struct ia_css_isp_parameter sdis2_horiproj;
		struct ia_css_isp_parameter sdis2_vertproj;
		struct ia_css_isp_parameter wb;
		struct ia_css_isp_parameter nr;
		struct ia_css_isp_parameter yee;
		struct ia_css_isp_parameter ynr;
		struct ia_css_isp_parameter fc;
		struct ia_css_isp_parameter ctc;
		struct ia_css_isp_parameter xnr;
		struct ia_css_isp_parameter xnr3;
		struct ia_css_isp_parameter get;
		struct ia_css_isp_parameter put;
	} dmem;
	struct {
		struct ia_css_isp_parameter anr2;
		struct ia_css_isp_parameter ob;
		struct ia_css_isp_parameter sdis_horicoef;
		struct ia_css_isp_parameter sdis_vertcoef;
		struct ia_css_isp_parameter sdis2_horicoef;
		struct ia_css_isp_parameter sdis2_vertcoef;
#ifdef ISP2401
		struct ia_css_isp_parameter xnr3;
#endif
	} vmem;
	struct {
		struct ia_css_isp_parameter bh;
	} hmem0;
	struct {
		struct ia_css_isp_parameter gc;
		struct ia_css_isp_parameter g_gamma;
		struct ia_css_isp_parameter xnr_table;
	} vamem1;
	struct {
		struct ia_css_isp_parameter r_gamma;
		struct ia_css_isp_parameter ctc;
	} vamem0;
	struct {
		struct ia_css_isp_parameter b_gamma;
	} vamem2;
};

#if defined(IA_CSS_INCLUDE_PARAMETERS)

#include "ia_css_stream.h"   /* struct ia_css_stream */
#include "ia_css_binary.h"   /* struct ia_css_binary */
/* Code generated by genparam/gencode.c:gen_param_process_table() */

struct ia_css_pipeline_stage; /* forward declaration */

extern void (* ia_css_kernel_process_param[IA_CSS_NUM_PARAMETER_IDS])(
			unsigned pipe_id,
			const struct ia_css_pipeline_stage *stage,
			struct ia_css_isp_parameters *params);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_dp_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dp_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_wb_config(struct ia_css_isp_parameters *params,
			const struct ia_css_wb_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_tnr_config(struct ia_css_isp_parameters *params,
			const struct ia_css_tnr_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_ob_config(struct ia_css_isp_parameters *params,
			const struct ia_css_ob_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_de_config(struct ia_css_isp_parameters *params,
			const struct ia_css_de_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_anr_config(struct ia_css_isp_parameters *params,
			const struct ia_css_anr_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_anr2_config(struct ia_css_isp_parameters *params,
			const struct ia_css_anr_thres *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_ce_config(struct ia_css_isp_parameters *params,
			const struct ia_css_ce_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_ecd_config(struct ia_css_isp_parameters *params,
			const struct ia_css_ecd_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_ynr_config(struct ia_css_isp_parameters *params,
			const struct ia_css_ynr_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_fc_config(struct ia_css_isp_parameters *params,
			const struct ia_css_fc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_cnr_config(struct ia_css_isp_parameters *params,
			const struct ia_css_cnr_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_macc_config(struct ia_css_isp_parameters *params,
			const struct ia_css_macc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_ctc_config(struct ia_css_isp_parameters *params,
			const struct ia_css_ctc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_aa_config(struct ia_css_isp_parameters *params,
			const struct ia_css_aa_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_yuv2rgb_config(struct ia_css_isp_parameters *params,
			const struct ia_css_cc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_rgb2yuv_config(struct ia_css_isp_parameters *params,
			const struct ia_css_cc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_csc_config(struct ia_css_isp_parameters *params,
			const struct ia_css_cc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_nr_config(struct ia_css_isp_parameters *params,
			const struct ia_css_nr_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_gc_config(struct ia_css_isp_parameters *params,
			const struct ia_css_gc_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis_horicoef_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis_vertcoef_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis_horiproj_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis_vertproj_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis2_horicoef_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs2_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis2_vertcoef_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs2_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis2_horiproj_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs2_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_sdis2_vertproj_config(struct ia_css_isp_parameters *params,
			const struct ia_css_dvs2_coefficients *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_r_gamma_config(struct ia_css_isp_parameters *params,
			const struct ia_css_rgb_gamma_table *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_g_gamma_config(struct ia_css_isp_parameters *params,
			const struct ia_css_rgb_gamma_table *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_b_gamma_config(struct ia_css_isp_parameters *params,
			const struct ia_css_rgb_gamma_table *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_xnr_table_config(struct ia_css_isp_parameters *params,
			const struct ia_css_xnr_table *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_formats_config(struct ia_css_isp_parameters *params,
			const struct ia_css_formats_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_xnr_config(struct ia_css_isp_parameters *params,
			const struct ia_css_xnr_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_xnr3_config(struct ia_css_isp_parameters *params,
			const struct ia_css_xnr3_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_s3a_config(struct ia_css_isp_parameters *params,
			const struct ia_css_3a_config *config);

/* Code generated by genparam/gencode.c:gen_set_function() */

void
ia_css_set_output_config(struct ia_css_isp_parameters *params,
			const struct ia_css_output_config *config);

/* Code generated by genparam/gencode.c:gen_global_access_function() */

void
ia_css_get_configs(struct ia_css_isp_parameters *params,
		const struct ia_css_isp_config *config)
;
#ifdef ISP2401

#endif
/* Code generated by genparam/gencode.c:gen_global_access_function() */

void
ia_css_set_configs(struct ia_css_isp_parameters *params,
		const struct ia_css_isp_config *config)
;
#ifdef ISP2401

#endif
#endif /* IA_CSS_INCLUDE_PARAMETER */

#endif /* _IA_CSS_ISP_PARAM_H */
