1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2010 - 2015, Intel Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 * more details.
14 */
15
16#ifndef _ISP_TYPES_H_
17#define _ISP_TYPES_H_
18
19/*
20 * Workaround: hivecc complains about "tag "sh_css_3a_output" already declared"
21 * without this extra decl.
22 */
23struct ia_css_3a_output;
24
25/*
26 * Input stream formats, these correspond to the MIPI formats and the way
27 * the CSS receiver sends these to the input formatter.
28 * The bit depth of each pixel element is stored in the global variable
29 * isp_bits_per_pixel.
30 * NOTE: for rgb565, we set isp_bits_per_pixel to 565, for all other rgb
31 * formats it's the actual depth (4, for 444, 8 for 888 etc).
32 */
33enum sh_stream_format {
34	sh_stream_format_yuv420_legacy,
35	sh_stream_format_yuv420,
36	sh_stream_format_yuv422,
37	sh_stream_format_rgb,
38	sh_stream_format_raw,
39	sh_stream_format_binary,	/* bytestream such as jpeg */
40};
41
42struct s_isp_frames {
43	/*
44	 * Global variables that are written to by either the SP or the host,
45	 * every ISP binary needs these.
46	 */
47	/* output frame */
48	char *xmem_base_addr_y;
49	char *xmem_base_addr_uv;
50	char *xmem_base_addr_u;
51	char *xmem_base_addr_v;
52	/* 2nd output frame */
53	char *xmem_base_addr_second_out_y;
54	char *xmem_base_addr_second_out_u;
55	char *xmem_base_addr_second_out_v;
56	/* input yuv frame */
57	char *xmem_base_addr_y_in;
58	char *xmem_base_addr_u_in;
59	char *xmem_base_addr_v_in;
60	/* input raw frame */
61	char *xmem_base_addr_raw;
62	/* output raw frame */
63	char *xmem_base_addr_raw_out;
64	/* viewfinder output (vf_veceven) */
65	char *xmem_base_addr_vfout_y;
66	char *xmem_base_addr_vfout_u;
67	char *xmem_base_addr_vfout_v;
68	/* overlay frame (for vf_pp) */
69	char *xmem_base_addr_overlay_y;
70	char *xmem_base_addr_overlay_u;
71	char *xmem_base_addr_overlay_v;
72	/* pre-gdc output frame (gdc input) */
73	char *xmem_base_addr_qplane_r;
74	char *xmem_base_addr_qplane_ratb;
75	char *xmem_base_addr_qplane_gr;
76	char *xmem_base_addr_qplane_gb;
77	char *xmem_base_addr_qplane_b;
78	char *xmem_base_addr_qplane_batr;
79	/* YUV as input, used by postisp binary */
80	char *xmem_base_addr_yuv_16_y;
81	char *xmem_base_addr_yuv_16_u;
82	char *xmem_base_addr_yuv_16_v;
83};
84
85#endif /* _ISP_TYPES_H_ */
86