19d4fa1a1SMauro Carvalho Chehab /*
29d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
39d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
49d4fa1a1SMauro Carvalho Chehab  *
59d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
69d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
79d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
89d4fa1a1SMauro Carvalho Chehab  *
99d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
109d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
119d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
129d4fa1a1SMauro Carvalho Chehab  * more details.
139d4fa1a1SMauro Carvalho Chehab  */
149d4fa1a1SMauro Carvalho Chehab 
159d4fa1a1SMauro Carvalho Chehab #ifndef _SH_CSS_SP_H_
169d4fa1a1SMauro Carvalho Chehab #define _SH_CSS_SP_H_
179d4fa1a1SMauro Carvalho Chehab 
189d4fa1a1SMauro Carvalho Chehab #include <system_global.h>
199d4fa1a1SMauro Carvalho Chehab #include <type_support.h>
209d4fa1a1SMauro Carvalho Chehab #if !defined(HAS_NO_INPUT_FORMATTER)
219d4fa1a1SMauro Carvalho Chehab #include "input_formatter.h"
229d4fa1a1SMauro Carvalho Chehab #endif
239d4fa1a1SMauro Carvalho Chehab 
249d4fa1a1SMauro Carvalho Chehab #include "ia_css_binary.h"
259d4fa1a1SMauro Carvalho Chehab #include "ia_css_types.h"
269d4fa1a1SMauro Carvalho Chehab #include "ia_css_pipeline.h"
279d4fa1a1SMauro Carvalho Chehab 
289d4fa1a1SMauro Carvalho Chehab /* Function to initialize the data and bss section descr of the binary */
299d4fa1a1SMauro Carvalho Chehab void
309d4fa1a1SMauro Carvalho Chehab sh_css_sp_store_init_dmem(const struct ia_css_fw_info *fw);
319d4fa1a1SMauro Carvalho Chehab 
329d4fa1a1SMauro Carvalho Chehab void
339d4fa1a1SMauro Carvalho Chehab store_sp_stage_data(enum ia_css_pipe_id id, unsigned int pipe_num,
349d4fa1a1SMauro Carvalho Chehab 		    unsigned int stage);
359d4fa1a1SMauro Carvalho Chehab 
369d4fa1a1SMauro Carvalho Chehab void
379d4fa1a1SMauro Carvalho Chehab sh_css_stage_write_binary_info(struct ia_css_binary_info *info);
389d4fa1a1SMauro Carvalho Chehab 
399d4fa1a1SMauro Carvalho Chehab void
409d4fa1a1SMauro Carvalho Chehab store_sp_group_data(void);
419d4fa1a1SMauro Carvalho Chehab 
429d4fa1a1SMauro Carvalho Chehab /* Start binary (jpeg) copy on the SP */
439d4fa1a1SMauro Carvalho Chehab void
449d4fa1a1SMauro Carvalho Chehab sh_css_sp_start_binary_copy(unsigned int pipe_num,
459d4fa1a1SMauro Carvalho Chehab 			    struct ia_css_frame *out_frame,
469d4fa1a1SMauro Carvalho Chehab 			    unsigned int two_ppc);
479d4fa1a1SMauro Carvalho Chehab 
489d4fa1a1SMauro Carvalho Chehab unsigned int
499d4fa1a1SMauro Carvalho Chehab sh_css_sp_get_binary_copy_size(void);
509d4fa1a1SMauro Carvalho Chehab 
519d4fa1a1SMauro Carvalho Chehab /* Return the value of a SW interrupt */
529d4fa1a1SMauro Carvalho Chehab unsigned int
539d4fa1a1SMauro Carvalho Chehab sh_css_sp_get_sw_interrupt_value(unsigned int irq);
549d4fa1a1SMauro Carvalho Chehab 
559d4fa1a1SMauro Carvalho Chehab void
569d4fa1a1SMauro Carvalho Chehab sh_css_sp_init_pipeline(struct ia_css_pipeline *me,
579d4fa1a1SMauro Carvalho Chehab 			enum ia_css_pipe_id id,
589d4fa1a1SMauro Carvalho Chehab 			u8 pipe_num,
599d4fa1a1SMauro Carvalho Chehab 			bool xnr,
609d4fa1a1SMauro Carvalho Chehab 			bool two_ppc,
619d4fa1a1SMauro Carvalho Chehab 			bool continuous,
629d4fa1a1SMauro Carvalho Chehab 			bool offline,
639d4fa1a1SMauro Carvalho Chehab 			unsigned int required_bds_factor,
649d4fa1a1SMauro Carvalho Chehab 			enum sh_css_pipe_config_override copy_ovrd,
659d4fa1a1SMauro Carvalho Chehab 			enum ia_css_input_mode input_mode,
669d4fa1a1SMauro Carvalho Chehab 			const struct ia_css_metadata_config *md_config,
679d4fa1a1SMauro Carvalho Chehab 			const struct ia_css_metadata_info *md_info,
689d4fa1a1SMauro Carvalho Chehab #if !defined(HAS_NO_INPUT_SYSTEM)
699d4fa1a1SMauro Carvalho Chehab 			const enum mipi_port_id port_id,
709d4fa1a1SMauro Carvalho Chehab #endif
719d4fa1a1SMauro Carvalho Chehab 			const struct ia_css_coordinate
729d4fa1a1SMauro Carvalho Chehab 			*internal_frame_origin_bqs_on_sctbl, /* Origin of internal frame
739d4fa1a1SMauro Carvalho Chehab 							positioned on shading table at shading correction in ISP. */
749d4fa1a1SMauro Carvalho Chehab 			const struct ia_css_isp_parameters *params
759d4fa1a1SMauro Carvalho Chehab 		       );
769d4fa1a1SMauro Carvalho Chehab 
779d4fa1a1SMauro Carvalho Chehab void
789d4fa1a1SMauro Carvalho Chehab sh_css_sp_uninit_pipeline(unsigned int pipe_num);
799d4fa1a1SMauro Carvalho Chehab 
809d4fa1a1SMauro Carvalho Chehab bool sh_css_write_host2sp_command(enum host2sp_commands host2sp_command);
819d4fa1a1SMauro Carvalho Chehab 
829d4fa1a1SMauro Carvalho Chehab enum host2sp_commands
839d4fa1a1SMauro Carvalho Chehab sh_css_read_host2sp_command(void);
849d4fa1a1SMauro Carvalho Chehab 
859d4fa1a1SMauro Carvalho Chehab void
869d4fa1a1SMauro Carvalho Chehab sh_css_init_host2sp_frame_data(void);
879d4fa1a1SMauro Carvalho Chehab 
889d4fa1a1SMauro Carvalho Chehab /**
899d4fa1a1SMauro Carvalho Chehab  * @brief Update the offline frame information in host_sp_communication.
909d4fa1a1SMauro Carvalho Chehab  *
919d4fa1a1SMauro Carvalho Chehab  * @param[in] frame_num The offline frame number.
929d4fa1a1SMauro Carvalho Chehab  * @param[in] frame The pointer to the offline frame.
939d4fa1a1SMauro Carvalho Chehab  */
949d4fa1a1SMauro Carvalho Chehab void
959d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_offline_frame(
969d4fa1a1SMauro Carvalho Chehab     unsigned int frame_num,
979d4fa1a1SMauro Carvalho Chehab     struct ia_css_frame *frame,
989d4fa1a1SMauro Carvalho Chehab     struct ia_css_metadata *metadata);
999d4fa1a1SMauro Carvalho Chehab 
1009d4fa1a1SMauro Carvalho Chehab #if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401)
1019d4fa1a1SMauro Carvalho Chehab /**
1029d4fa1a1SMauro Carvalho Chehab  * @brief Update the mipi frame information in host_sp_communication.
1039d4fa1a1SMauro Carvalho Chehab  *
1049d4fa1a1SMauro Carvalho Chehab  * @param[in] frame_num The mipi frame number.
1059d4fa1a1SMauro Carvalho Chehab  * @param[in] frame The pointer to the mipi frame.
1069d4fa1a1SMauro Carvalho Chehab  */
1079d4fa1a1SMauro Carvalho Chehab void
1089d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_mipi_frame(
1099d4fa1a1SMauro Carvalho Chehab     unsigned int frame_num,
1109d4fa1a1SMauro Carvalho Chehab     struct ia_css_frame *frame);
1119d4fa1a1SMauro Carvalho Chehab 
1129d4fa1a1SMauro Carvalho Chehab /**
1139d4fa1a1SMauro Carvalho Chehab  * @brief Update the mipi metadata information in host_sp_communication.
1149d4fa1a1SMauro Carvalho Chehab  *
1159d4fa1a1SMauro Carvalho Chehab  * @param[in] frame_num The mipi frame number.
1169d4fa1a1SMauro Carvalho Chehab  * @param[in] metadata The pointer to the mipi metadata.
1179d4fa1a1SMauro Carvalho Chehab  */
1189d4fa1a1SMauro Carvalho Chehab void
1199d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_mipi_metadata(
1209d4fa1a1SMauro Carvalho Chehab     unsigned int frame_num,
1219d4fa1a1SMauro Carvalho Chehab     struct ia_css_metadata *metadata);
1229d4fa1a1SMauro Carvalho Chehab 
1239d4fa1a1SMauro Carvalho Chehab /**
1249d4fa1a1SMauro Carvalho Chehab  * @brief Update the nr of mipi frames to use in host_sp_communication.
1259d4fa1a1SMauro Carvalho Chehab  *
1269d4fa1a1SMauro Carvalho Chehab  * @param[in] num_frames The number of mipi frames to use.
1279d4fa1a1SMauro Carvalho Chehab  */
1289d4fa1a1SMauro Carvalho Chehab void
1299d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_num_mipi_frames(unsigned int num_frames);
1309d4fa1a1SMauro Carvalho Chehab #endif
1319d4fa1a1SMauro Carvalho Chehab 
1329d4fa1a1SMauro Carvalho Chehab /**
1339d4fa1a1SMauro Carvalho Chehab  * @brief Update the nr of offline frames to use in host_sp_communication.
1349d4fa1a1SMauro Carvalho Chehab  *
1359d4fa1a1SMauro Carvalho Chehab  * @param[in] num_frames The number of raw frames to use.
1369d4fa1a1SMauro Carvalho Chehab  */
1379d4fa1a1SMauro Carvalho Chehab void
1389d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_cont_num_raw_frames(unsigned int num_frames,
1399d4fa1a1SMauro Carvalho Chehab 	bool set_avail);
1409d4fa1a1SMauro Carvalho Chehab 
1419d4fa1a1SMauro Carvalho Chehab void
1429d4fa1a1SMauro Carvalho Chehab sh_css_event_init_irq_mask(void);
1439d4fa1a1SMauro Carvalho Chehab 
1449d4fa1a1SMauro Carvalho Chehab void
1459d4fa1a1SMauro Carvalho Chehab sh_css_sp_start_isp(void);
1469d4fa1a1SMauro Carvalho Chehab 
1479d4fa1a1SMauro Carvalho Chehab void
1489d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_sp_running(bool flag);
1499d4fa1a1SMauro Carvalho Chehab 
1509d4fa1a1SMauro Carvalho Chehab bool
1519d4fa1a1SMauro Carvalho Chehab sh_css_sp_is_running(void);
1529d4fa1a1SMauro Carvalho Chehab 
1539d4fa1a1SMauro Carvalho Chehab #if SP_DEBUG != SP_DEBUG_NONE
1549d4fa1a1SMauro Carvalho Chehab 
1559d4fa1a1SMauro Carvalho Chehab void
1569d4fa1a1SMauro Carvalho Chehab sh_css_sp_get_debug_state(struct sh_css_sp_debug_state *state);
1579d4fa1a1SMauro Carvalho Chehab 
1589d4fa1a1SMauro Carvalho Chehab #endif
1599d4fa1a1SMauro Carvalho Chehab 
1609d4fa1a1SMauro Carvalho Chehab #if !defined(HAS_NO_INPUT_FORMATTER)
1619d4fa1a1SMauro Carvalho Chehab void
1629d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_if_configs(
1639d4fa1a1SMauro Carvalho Chehab     const input_formatter_cfg_t	*config_a,
1649d4fa1a1SMauro Carvalho Chehab     const input_formatter_cfg_t	*config_b,
1659d4fa1a1SMauro Carvalho Chehab     const uint8_t		if_config_index);
1669d4fa1a1SMauro Carvalho Chehab #endif
1679d4fa1a1SMauro Carvalho Chehab 
1689d4fa1a1SMauro Carvalho Chehab void
1699d4fa1a1SMauro Carvalho Chehab sh_css_sp_program_input_circuit(int fmt_type,
1709d4fa1a1SMauro Carvalho Chehab 				int ch_id,
1719d4fa1a1SMauro Carvalho Chehab 				enum ia_css_input_mode input_mode);
1729d4fa1a1SMauro Carvalho Chehab 
1739d4fa1a1SMauro Carvalho Chehab void
1749d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_sync_gen(int width,
1759d4fa1a1SMauro Carvalho Chehab 			     int height,
1769d4fa1a1SMauro Carvalho Chehab 			     int hblank_cycles,
1779d4fa1a1SMauro Carvalho Chehab 			     int vblank_cycles);
1789d4fa1a1SMauro Carvalho Chehab 
1799d4fa1a1SMauro Carvalho Chehab void
1809d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_tpg(int x_mask,
1819d4fa1a1SMauro Carvalho Chehab 			int y_mask,
1829d4fa1a1SMauro Carvalho Chehab 			int x_delta,
1839d4fa1a1SMauro Carvalho Chehab 			int y_delta,
1849d4fa1a1SMauro Carvalho Chehab 			int xy_mask);
1859d4fa1a1SMauro Carvalho Chehab 
1869d4fa1a1SMauro Carvalho Chehab void
1879d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_prbs(int seed);
1889d4fa1a1SMauro Carvalho Chehab 
1899d4fa1a1SMauro Carvalho Chehab void
1909d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_enable_raw_pool_locking(bool lock_all);
1919d4fa1a1SMauro Carvalho Chehab 
1929d4fa1a1SMauro Carvalho Chehab void
1939d4fa1a1SMauro Carvalho Chehab sh_css_sp_enable_isys_event_queue(bool enable);
1949d4fa1a1SMauro Carvalho Chehab 
1959d4fa1a1SMauro Carvalho Chehab void
1969d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_disable_continuous_viewfinder(bool flag);
1979d4fa1a1SMauro Carvalho Chehab 
1989d4fa1a1SMauro Carvalho Chehab void
1999d4fa1a1SMauro Carvalho Chehab sh_css_sp_reset_global_vars(void);
2009d4fa1a1SMauro Carvalho Chehab 
2019d4fa1a1SMauro Carvalho Chehab /**
2029d4fa1a1SMauro Carvalho Chehab  * @brief Initialize the DMA software-mask in the debug mode.
2039d4fa1a1SMauro Carvalho Chehab  * This API should be ONLY called in the debugging mode.
2049d4fa1a1SMauro Carvalho Chehab  * And it should be always called before the first call of
2059d4fa1a1SMauro Carvalho Chehab  * "sh_css_set_dma_sw_reg(...)".
2069d4fa1a1SMauro Carvalho Chehab  *
2079d4fa1a1SMauro Carvalho Chehab  * @param[in]	dma_id		The ID of the target DMA.
2089d4fa1a1SMauro Carvalho Chehab  *
2099d4fa1a1SMauro Carvalho Chehab  * @return
2109d4fa1a1SMauro Carvalho Chehab  *	- true, if it is successful.
2119d4fa1a1SMauro Carvalho Chehab  *	- false, otherwise.
2129d4fa1a1SMauro Carvalho Chehab  */
2139d4fa1a1SMauro Carvalho Chehab bool
2149d4fa1a1SMauro Carvalho Chehab sh_css_sp_init_dma_sw_reg(int dma_id);
2159d4fa1a1SMauro Carvalho Chehab 
2169d4fa1a1SMauro Carvalho Chehab /**
2179d4fa1a1SMauro Carvalho Chehab  * @brief Set the DMA software-mask in the debug mode.
2189d4fa1a1SMauro Carvalho Chehab  * This API should be ONLYL called in the debugging mode. Must
2199d4fa1a1SMauro Carvalho Chehab  * call "sh_css_set_dma_sw_reg(...)" before this
2209d4fa1a1SMauro Carvalho Chehab  * API is called for the first time.
2219d4fa1a1SMauro Carvalho Chehab  *
2229d4fa1a1SMauro Carvalho Chehab  * @param[in]	dma_id		The ID of the target DMA.
2239d4fa1a1SMauro Carvalho Chehab  * @param[in]	channel_id	The ID of the target DMA channel.
2249d4fa1a1SMauro Carvalho Chehab  * @param[in]	request_type	The type of the DMA request.
2259d4fa1a1SMauro Carvalho Chehab  *				For example:
2269d4fa1a1SMauro Carvalho Chehab  *				- "0" indicates the writing request.
2279d4fa1a1SMauro Carvalho Chehab  *				- "1" indicates the reading request.
2289d4fa1a1SMauro Carvalho Chehab  *
2299d4fa1a1SMauro Carvalho Chehab  * @param[in]	enable		If it is "true", the target DMA
2309d4fa1a1SMauro Carvalho Chehab  *				channel is enabled in the software.
2319d4fa1a1SMauro Carvalho Chehab  *				Otherwise, the target DMA channel
2329d4fa1a1SMauro Carvalho Chehab  *				is disabled in the software.
2339d4fa1a1SMauro Carvalho Chehab  *
2349d4fa1a1SMauro Carvalho Chehab  * @return
2359d4fa1a1SMauro Carvalho Chehab  *	- true, if it is successful.
2369d4fa1a1SMauro Carvalho Chehab  *	- false, otherwise.
2379d4fa1a1SMauro Carvalho Chehab  */
2389d4fa1a1SMauro Carvalho Chehab bool
2399d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_dma_sw_reg(int dma_id,
2409d4fa1a1SMauro Carvalho Chehab 			 int channel_id,
2419d4fa1a1SMauro Carvalho Chehab 			 int request_type,
2429d4fa1a1SMauro Carvalho Chehab 			 bool enable);
2439d4fa1a1SMauro Carvalho Chehab 
2449d4fa1a1SMauro Carvalho Chehab extern struct sh_css_sp_group sh_css_sp_group;
2459d4fa1a1SMauro Carvalho Chehab extern struct sh_css_sp_stage sh_css_sp_stage;
2469d4fa1a1SMauro Carvalho Chehab extern struct sh_css_isp_stage sh_css_isp_stage;
2479d4fa1a1SMauro Carvalho Chehab 
2489d4fa1a1SMauro Carvalho Chehab #endif /* _SH_CSS_SP_H_ */
249