1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 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 __IA_CSS_PIPE_BINARYDESC_H__
17#define __IA_CSS_PIPE_BINARYDESC_H__
18
19#include <linux/math.h>
20
21#include <ia_css_types.h>		/* ia_css_pipe */
22#include <ia_css_frame_public.h>	/* ia_css_frame_info */
23#include <ia_css_binary.h>		/* ia_css_binary_descr */
24
25/* @brief Get a binary descriptor for copy.
26 *
27 * @param[in] pipe
28 * @param[out] copy_desc
29 * @param[in/out] in_info
30 * @param[in/out] out_info
31 * @param[in/out] vf_info
32 * @return    None
33 *
34 */
35void ia_css_pipe_get_copy_binarydesc(
36    struct ia_css_pipe const *const pipe,
37    struct ia_css_binary_descr *copy_descr,
38    struct ia_css_frame_info *in_info,
39    struct ia_css_frame_info *out_info,
40    struct ia_css_frame_info *vf_info);
41
42/* @brief Get a binary descriptor for vfpp.
43 *
44 * @param[in] pipe
45 * @param[out] vfpp_descr
46 * @param[in/out] in_info
47 * @param[in/out] out_info
48 * @return    None
49 *
50 */
51void ia_css_pipe_get_vfpp_binarydesc(
52    struct ia_css_pipe const *const pipe,
53    struct ia_css_binary_descr *vf_pp_descr,
54    struct ia_css_frame_info *in_info,
55    struct ia_css_frame_info *out_info);
56
57/* @brief Get numerator and denominator of bayer downscaling factor.
58 *
59 * @param[in] bds_factor: The bayer downscaling factor.
60 *		(= The bds_factor member in the sh_css_bds_factor structure.)
61 * @param[out] bds: The rational fraction of the bayer downscaling factor.
62 *		(= The respective member in the sh_css_bds_factor structure.)
63 * @return	0 or error code upon error.
64 *
65 */
66int sh_css_bds_factor_get_fract(unsigned int bds_factor, struct u32_fract *bds);
67
68/* @brief Get a binary descriptor for preview stage.
69 *
70 * @param[in] pipe
71 * @param[out] preview_descr
72 * @param[in/out] in_info
73 * @param[in/out] bds_out_info
74 * @param[in/out] out_info
75 * @param[in/out] vf_info
76 * @return	0 or error code upon error.
77 *
78 */
79int ia_css_pipe_get_preview_binarydesc(
80    struct ia_css_pipe *const pipe,
81    struct ia_css_binary_descr *preview_descr,
82    struct ia_css_frame_info *in_info,
83    struct ia_css_frame_info *bds_out_info,
84    struct ia_css_frame_info *out_info,
85    struct ia_css_frame_info *vf_info);
86
87/* @brief Get a binary descriptor for video stage.
88 *
89 * @param[in/out] pipe
90 * @param[out] video_descr
91 * @param[in/out] in_info
92 * @param[in/out] bds_out_info
93 * @param[in/out] vf_info
94 * @return	0 or error code upon error.
95 *
96 */
97int ia_css_pipe_get_video_binarydesc(
98    struct ia_css_pipe *const pipe,
99    struct ia_css_binary_descr *video_descr,
100    struct ia_css_frame_info *in_info,
101    struct ia_css_frame_info *bds_out_info,
102    struct ia_css_frame_info *out_info,
103    struct ia_css_frame_info *vf_info,
104    int stream_config_left_padding);
105
106/* @brief Get a binary descriptor for yuv scaler stage.
107 *
108 * @param[in/out] pipe
109 * @param[out] yuv_scaler_descr
110 * @param[in/out] in_info
111 * @param[in/out] out_info
112 * @param[in/out] internal_out_info
113 * @param[in/out] vf_info
114 * @return    None
115 *
116 */
117void ia_css_pipe_get_yuvscaler_binarydesc(
118    struct ia_css_pipe const *const pipe,
119    struct ia_css_binary_descr *yuv_scaler_descr,
120    struct ia_css_frame_info *in_info,
121    struct ia_css_frame_info *out_info,
122    struct ia_css_frame_info *internal_out_info,
123    struct ia_css_frame_info *vf_info);
124
125/* @brief Get a binary descriptor for capture pp stage.
126 *
127 * @param[in/out] pipe
128 * @param[out] capture_pp_descr
129 * @param[in/out] in_info
130 * @param[in/out] vf_info
131 * @return    None
132 *
133 */
134void ia_css_pipe_get_capturepp_binarydesc(
135    struct ia_css_pipe *const pipe,
136    struct ia_css_binary_descr *capture_pp_descr,
137    struct ia_css_frame_info *in_info,
138    struct ia_css_frame_info *out_info,
139    struct ia_css_frame_info *vf_info);
140
141/* @brief Get a binary descriptor for primary capture.
142 *
143 * @param[in] pipe
144 * @param[out] prim_descr
145 * @param[in/out] in_info
146 * @param[in/out] out_info
147 * @param[in/out] vf_info
148 * @return    None
149 *
150 */
151void ia_css_pipe_get_primary_binarydesc(
152    struct ia_css_pipe const *const pipe,
153    struct ia_css_binary_descr *prim_descr,
154    struct ia_css_frame_info *in_info,
155    struct ia_css_frame_info *out_info,
156    struct ia_css_frame_info *vf_info,
157    unsigned int stage_idx);
158
159/* @brief Get a binary descriptor for pre gdc stage.
160 *
161 * @param[in] pipe
162 * @param[out] pre_gdc_descr
163 * @param[in/out] in_info
164 * @param[in/out] out_info
165 * @return    None
166 *
167 */
168void ia_css_pipe_get_pre_gdc_binarydesc(
169    struct ia_css_pipe const *const pipe,
170    struct ia_css_binary_descr *gdc_descr,
171    struct ia_css_frame_info *in_info,
172    struct ia_css_frame_info *out_info);
173
174/* @brief Get a binary descriptor for gdc stage.
175 *
176 * @param[in] pipe
177 * @param[out] gdc_descr
178 * @param[in/out] in_info
179 * @param[in/out] out_info
180 * @return    None
181 *
182 */
183void ia_css_pipe_get_gdc_binarydesc(
184    struct ia_css_pipe const *const pipe,
185    struct ia_css_binary_descr *gdc_descr,
186    struct ia_css_frame_info *in_info,
187    struct ia_css_frame_info *out_info);
188
189/* @brief Get a binary descriptor for post gdc.
190 *
191 * @param[in] pipe
192 * @param[out] post_gdc_descr
193 * @param[in/out] in_info
194 * @param[in/out] out_info
195 * @param[in/out] vf_info
196 * @return    None
197 *
198 */
199void ia_css_pipe_get_post_gdc_binarydesc(
200    struct ia_css_pipe const *const pipe,
201    struct ia_css_binary_descr *post_gdc_descr,
202    struct ia_css_frame_info *in_info,
203    struct ia_css_frame_info *out_info,
204    struct ia_css_frame_info *vf_info);
205
206/* @brief Get a binary descriptor for de.
207 *
208 * @param[in] pipe
209 * @param[out] pre_de_descr
210 * @param[in/out] in_info
211 * @param[in/out] out_info
212 * @return    None
213 *
214 */
215void ia_css_pipe_get_pre_de_binarydesc(
216    struct ia_css_pipe const *const pipe,
217    struct ia_css_binary_descr *pre_de_descr,
218    struct ia_css_frame_info *in_info,
219    struct ia_css_frame_info *out_info);
220
221/* @brief Get a binary descriptor for pre anr stage.
222 *
223 * @param[in] pipe
224 * @param[out] pre_anr_descr
225 * @param[in/out] in_info
226 * @param[in/out] out_info
227 * @return    None
228 *
229 */
230void ia_css_pipe_get_pre_anr_binarydesc(
231    struct ia_css_pipe const *const pipe,
232    struct ia_css_binary_descr *pre_anr_descr,
233    struct ia_css_frame_info *in_info,
234    struct ia_css_frame_info *out_info);
235
236/* @brief Get a binary descriptor for ANR stage.
237 *
238 * @param[in] pipe
239 * @param[out] anr_descr
240 * @param[in/out] in_info
241 * @param[in/out] out_info
242 * @return    None
243 *
244 */
245void ia_css_pipe_get_anr_binarydesc(
246    struct ia_css_pipe const *const pipe,
247    struct ia_css_binary_descr *anr_descr,
248    struct ia_css_frame_info *in_info,
249    struct ia_css_frame_info *out_info);
250
251/* @brief Get a binary descriptor for post anr stage.
252 *
253 * @param[in] pipe
254 * @param[out] post_anr_descr
255 * @param[in/out] in_info
256 * @param[in/out] out_info
257 * @param[in/out] vf_info
258 * @return    None
259 *
260 */
261void ia_css_pipe_get_post_anr_binarydesc(
262    struct ia_css_pipe const *const pipe,
263    struct ia_css_binary_descr *post_anr_descr,
264    struct ia_css_frame_info *in_info,
265    struct ia_css_frame_info *out_info,
266    struct ia_css_frame_info *vf_info);
267
268/* @brief Get a binary descriptor for ldc stage.
269 *
270 * @param[in/out] pipe
271 * @param[out] capture_pp_descr
272 * @param[in/out] in_info
273 * @param[in/out] vf_info
274 * @return    None
275 *
276 */
277void ia_css_pipe_get_ldc_binarydesc(
278    struct ia_css_pipe const *const pipe,
279    struct ia_css_binary_descr *ldc_descr,
280    struct ia_css_frame_info *in_info,
281    struct ia_css_frame_info *out_info);
282
283/* @brief Calculates the required BDS factor
284 *
285 * @param[in] input_res
286 * @param[in] output_res
287 * @param[in/out] bds_factor
288 * @return	0 or error code upon error.
289 */
290int binarydesc_calculate_bds_factor(
291    struct ia_css_resolution input_res,
292    struct ia_css_resolution output_res,
293    unsigned int *bds_factor);
294
295#endif /* __IA_CSS_PIPE_BINARYDESC_H__ */
296