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 __SH_CSS_STRUCT_H
179d4fa1a1SMauro Carvalho Chehab #define __SH_CSS_STRUCT_H
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab /* This header files contains the definition of the
209d4fa1a1SMauro Carvalho Chehab    sh_css struct and friends; locigally the file would
219d4fa1a1SMauro Carvalho Chehab    probably be called sh_css.h after the pattern
229d4fa1a1SMauro Carvalho Chehab    <type>.h but sh_css.h is the predecesssor of ia_css.h
239d4fa1a1SMauro Carvalho Chehab    so this could cause confusion; hence the _struct
249d4fa1a1SMauro Carvalho Chehab    in the filename
259d4fa1a1SMauro Carvalho Chehab */
269d4fa1a1SMauro Carvalho Chehab 
279d4fa1a1SMauro Carvalho Chehab #include <type_support.h>
28f90e73ceSMauro Carvalho Chehab #include <system_local.h>
299d4fa1a1SMauro Carvalho Chehab #include "ia_css_pipeline.h"
309d4fa1a1SMauro Carvalho Chehab #include "ia_css_pipe_public.h"
319d4fa1a1SMauro Carvalho Chehab #include "ia_css_frame_public.h"
329d4fa1a1SMauro Carvalho Chehab #include "ia_css_queue.h"
339d4fa1a1SMauro Carvalho Chehab #include "ia_css_irq.h"
349d4fa1a1SMauro Carvalho Chehab 
359d4fa1a1SMauro Carvalho Chehab struct sh_css {
369d4fa1a1SMauro Carvalho Chehab 	struct ia_css_pipe            *active_pipes[IA_CSS_PIPELINE_NUM_MAX];
379d4fa1a1SMauro Carvalho Chehab 	/* All of the pipes created at any point of time. At this moment there can
389d4fa1a1SMauro Carvalho Chehab 	 * be no more than MAX_SP_THREADS of them because pipe_num is reused as SP
399d4fa1a1SMauro Carvalho Chehab 	 * thread_id to which a pipe's pipeline is associated. At a later point, if
409d4fa1a1SMauro Carvalho Chehab 	 * we support more pipe objects, we should add test code to test that
419d4fa1a1SMauro Carvalho Chehab 	 * possibility. Also, active_pipes[] should be able to hold only
429d4fa1a1SMauro Carvalho Chehab 	 * SH_CSS_MAX_SP_THREADS objects. Anything else is misleading. */
439d4fa1a1SMauro Carvalho Chehab 	struct ia_css_pipe            *all_pipes[IA_CSS_PIPELINE_NUM_MAX];
449d4fa1a1SMauro Carvalho Chehab 	void *(*malloc)(size_t bytes, bool zero_mem);
459d4fa1a1SMauro Carvalho Chehab 	void (*free)(void *ptr);
469d4fa1a1SMauro Carvalho Chehab 	void (*flush)(struct ia_css_acc_fw *fw);
479d4fa1a1SMauro Carvalho Chehab 
489d4fa1a1SMauro Carvalho Chehab /* ISP2401 */
499d4fa1a1SMauro Carvalho Chehab 	void *(*malloc_ex)(size_t bytes, bool zero_mem, const char *caller_func,
509d4fa1a1SMauro Carvalho Chehab 			   int caller_line);
519d4fa1a1SMauro Carvalho Chehab 	void (*free_ex)(void *ptr, const char *caller_func, int caller_line);
529d4fa1a1SMauro Carvalho Chehab 
539d4fa1a1SMauro Carvalho Chehab /* ISP2400 */
549d4fa1a1SMauro Carvalho Chehab 	bool stop_copy_preview;
559d4fa1a1SMauro Carvalho Chehab 
569d4fa1a1SMauro Carvalho Chehab 	bool                           check_system_idle;
579d4fa1a1SMauro Carvalho Chehab 	unsigned int                   num_cont_raw_frames;
589d4fa1a1SMauro Carvalho Chehab 	unsigned int                   num_mipi_frames[N_CSI_PORTS];
599d4fa1a1SMauro Carvalho Chehab 	struct ia_css_frame
609d4fa1a1SMauro Carvalho Chehab 		*mipi_frames[N_CSI_PORTS][NUM_MIPI_FRAMES_PER_STREAM];
619d4fa1a1SMauro Carvalho Chehab 	struct ia_css_metadata
629d4fa1a1SMauro Carvalho Chehab 		*mipi_metadata[N_CSI_PORTS][NUM_MIPI_FRAMES_PER_STREAM];
639d4fa1a1SMauro Carvalho Chehab 	unsigned int
649d4fa1a1SMauro Carvalho Chehab 	mipi_sizes_for_check[N_CSI_PORTS][IA_CSS_MIPI_SIZE_CHECK_MAX_NOF_ENTRIES_PER_PORT];
659d4fa1a1SMauro Carvalho Chehab 	unsigned int                   mipi_frame_size[N_CSI_PORTS];
66100e8989SMauro Carvalho Chehab 	ia_css_ptr                   sp_bin_addr;
679d4fa1a1SMauro Carvalho Chehab 	hrt_data                       page_table_base_index;
68abbd669dSMauro Carvalho Chehab 
699d4fa1a1SMauro Carvalho Chehab 	unsigned int
709d4fa1a1SMauro Carvalho Chehab 	size_mem_words; /* \deprecated{Use ia_css_mipi_buffer_config instead.}*/
719d4fa1a1SMauro Carvalho Chehab 	enum ia_css_irq_type           irq_type;
729d4fa1a1SMauro Carvalho Chehab 	unsigned int                   pipe_counter;
739d4fa1a1SMauro Carvalho Chehab 
749d4fa1a1SMauro Carvalho Chehab 	unsigned int		type;	/* 2400 or 2401 for now */
759d4fa1a1SMauro Carvalho Chehab };
769d4fa1a1SMauro Carvalho Chehab 
779d4fa1a1SMauro Carvalho Chehab #define IPU_2400		1
789d4fa1a1SMauro Carvalho Chehab #define IPU_2401		2
799d4fa1a1SMauro Carvalho Chehab 
809d4fa1a1SMauro Carvalho Chehab #define IS_2400()		(my_css.type == IPU_2400)
819d4fa1a1SMauro Carvalho Chehab #define IS_2401()		(my_css.type == IPU_2401)
829d4fa1a1SMauro Carvalho Chehab 
839d4fa1a1SMauro Carvalho Chehab extern struct sh_css my_css;
849d4fa1a1SMauro Carvalho Chehab 
859d4fa1a1SMauro Carvalho Chehab #endif /* __SH_CSS_STRUCT_H */
86