1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Intel Camera Imaging ISP subsystem.
4  *
5  * Copyright (c) 2013 Intel Corporation. All Rights Reserved.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License version
9  * 2 as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  *
17  */
18 #ifndef __ATOMISP_COMPAT_IOCTL32_H__
19 #define __ATOMISP_COMPAT_IOCTL32_H__
20 
21 #include <linux/compat.h>
22 #include <linux/videodev2.h>
23 
24 #include "atomisp_compat.h"
25 
26 struct atomisp_histogram32 {
27 	unsigned int num_elements;
28 	compat_uptr_t data;
29 };
30 
31 struct atomisp_dvs2_stat_types32 {
32 	compat_uptr_t odd_real; /** real part of the odd statistics*/
33 	compat_uptr_t odd_imag; /** imaginary part of the odd statistics*/
34 	compat_uptr_t even_real;/** real part of the even statistics*/
35 	compat_uptr_t even_imag;/** imaginary part of the even statistics*/
36 };
37 
38 struct atomisp_dvs2_coef_types32 {
39 	compat_uptr_t odd_real; /** real part of the odd coefficients*/
40 	compat_uptr_t odd_imag; /** imaginary part of the odd coefficients*/
41 	compat_uptr_t even_real;/** real part of the even coefficients*/
42 	compat_uptr_t even_imag;/** imaginary part of the even coefficients*/
43 };
44 
45 struct atomisp_dvs2_statistics32 {
46 	struct atomisp_dvs_grid_info grid_info;
47 	struct atomisp_dvs2_stat_types32 hor_prod;
48 	struct atomisp_dvs2_stat_types32 ver_prod;
49 };
50 
51 struct atomisp_dis_statistics32 {
52 	struct atomisp_dvs2_statistics32 dvs2_stat;
53 	u32 exp_id;
54 };
55 
56 struct atomisp_dis_coefficients32 {
57 	struct atomisp_dvs_grid_info grid_info;
58 	struct atomisp_dvs2_coef_types32 hor_coefs;
59 	struct atomisp_dvs2_coef_types32 ver_coefs;
60 };
61 
62 struct atomisp_3a_statistics32 {
63 	struct atomisp_grid_info  grid_info;
64 	compat_uptr_t data;
65 	compat_uptr_t rgby_data;
66 	u32 exp_id;
67 	u32 isp_config_id;
68 };
69 
70 struct atomisp_metadata_with_type32 {
71 	/* to specify which type of metadata to get */
72 	enum atomisp_metadata_type type;
73 	compat_uptr_t data;
74 	u32 width;
75 	u32 height;
76 	u32 stride; /* in bytes */
77 	u32 exp_id; /* exposure ID */
78 	compat_uptr_t effective_width;
79 };
80 
81 struct atomisp_metadata32 {
82 	compat_uptr_t data;
83 	u32 width;
84 	u32 height;
85 	u32 stride;
86 	u32 exp_id;
87 	compat_uptr_t effective_width;
88 };
89 
90 struct atomisp_morph_table32 {
91 	unsigned int enabled;
92 	unsigned int height;
93 	unsigned int width;	/* number of valid elements per line */
94 	compat_uptr_t coordinates_x[ATOMISP_MORPH_TABLE_NUM_PLANES];
95 	compat_uptr_t coordinates_y[ATOMISP_MORPH_TABLE_NUM_PLANES];
96 };
97 
98 struct v4l2_framebuffer32 {
99 	__u32			capability;
100 	__u32			flags;
101 	compat_uptr_t		base;
102 	struct v4l2_pix_format	fmt;
103 };
104 
105 struct atomisp_overlay32 {
106 	/* the frame containing the overlay data The overlay frame width should
107 	 * be the multiples of 2*ISP_VEC_NELEMS. The overlay frame height
108 	 * should be the multiples of 2.
109 	 */
110 	compat_uptr_t frame;
111 	/* Y value of overlay background */
112 	unsigned char bg_y;
113 	/* U value of overlay background */
114 	char bg_u;
115 	/* V value of overlay background */
116 	char bg_v;
117 	/* the blending percent of input data for Y subpixels */
118 	unsigned char blend_input_perc_y;
119 	/* the blending percent of input data for U subpixels */
120 	unsigned char blend_input_perc_u;
121 	/* the blending percent of input data for V subpixels */
122 	unsigned char blend_input_perc_v;
123 	/* the blending percent of overlay data for Y subpixels */
124 	unsigned char blend_overlay_perc_y;
125 	/* the blending percent of overlay data for U subpixels */
126 	unsigned char blend_overlay_perc_u;
127 	/* the blending percent of overlay data for V subpixels */
128 	unsigned char blend_overlay_perc_v;
129 	/* the overlay start x pixel position on output frame It should be the
130 	   multiples of 2*ISP_VEC_NELEMS. */
131 	unsigned int overlay_start_x;
132 	/* the overlay start y pixel position on output frame It should be the
133 	   multiples of 2. */
134 	unsigned int overlay_start_y;
135 };
136 
137 struct atomisp_calibration_group32 {
138 	unsigned int size;
139 	unsigned int type;
140 	compat_uptr_t calb_grp_values;
141 };
142 
143 struct v4l2_private_int_data32 {
144 	__u32 size;
145 	compat_uptr_t data;
146 	__u32 reserved[2];
147 };
148 
149 struct atomisp_shading_table32 {
150 	__u32 enable;
151 	__u32 sensor_width;
152 	__u32 sensor_height;
153 	__u32 width;
154 	__u32 height;
155 	__u32 fraction_bits;
156 
157 	compat_uptr_t data[ATOMISP_NUM_SC_COLORS];
158 };
159 
160 struct atomisp_parameters32 {
161 	compat_uptr_t wb_config;  /* White Balance config */
162 	compat_uptr_t cc_config;  /* Color Correction config */
163 	compat_uptr_t tnr_config; /* Temporal Noise Reduction */
164 	compat_uptr_t ecd_config; /* Eigen Color Demosaicing */
165 	compat_uptr_t ynr_config; /* Y(Luma) Noise Reduction */
166 	compat_uptr_t fc_config;  /* Fringe Control */
167 	compat_uptr_t formats_config;  /* Formats Control */
168 	compat_uptr_t cnr_config; /* Chroma Noise Reduction */
169 	compat_uptr_t macc_config;  /* MACC */
170 	compat_uptr_t ctc_config; /* Chroma Tone Control */
171 	compat_uptr_t aa_config;  /* Anti-Aliasing */
172 	compat_uptr_t baa_config;  /* Anti-Aliasing */
173 	compat_uptr_t ce_config;
174 	compat_uptr_t dvs_6axis_config;
175 	compat_uptr_t ob_config;  /* Objective Black config */
176 	compat_uptr_t dp_config;  /* Dead Pixel config */
177 	compat_uptr_t nr_config;  /* Noise Reduction config */
178 	compat_uptr_t ee_config;  /* Edge Enhancement config */
179 	compat_uptr_t de_config;  /* Demosaic config */
180 	compat_uptr_t gc_config;  /* Gamma Correction config */
181 	compat_uptr_t anr_config; /* Advanced Noise Reduction */
182 	compat_uptr_t a3a_config; /* 3A Statistics config */
183 	compat_uptr_t xnr_config; /* eXtra Noise Reduction */
184 	compat_uptr_t dz_config;  /* Digital Zoom */
185 	compat_uptr_t yuv2rgb_cc_config; /* Color
186 							Correction config */
187 	compat_uptr_t rgb2yuv_cc_config; /* Color
188 							Correction config */
189 	compat_uptr_t macc_table;
190 	compat_uptr_t gamma_table;
191 	compat_uptr_t ctc_table;
192 	compat_uptr_t xnr_table;
193 	compat_uptr_t r_gamma_table;
194 	compat_uptr_t g_gamma_table;
195 	compat_uptr_t b_gamma_table;
196 	compat_uptr_t motion_vector; /* For 2-axis DVS */
197 	compat_uptr_t shading_table;
198 	compat_uptr_t morph_table;
199 	compat_uptr_t dvs_coefs; /* DVS 1.0 coefficients */
200 	compat_uptr_t dvs2_coefs; /* DVS 2.0 coefficients */
201 	compat_uptr_t capture_config;
202 	compat_uptr_t anr_thres;
203 
204 	compat_uptr_t	lin_2500_config;       /* Skylake: Linearization config */
205 	compat_uptr_t	obgrid_2500_config;    /* Skylake: OBGRID config */
206 	compat_uptr_t	bnr_2500_config;       /* Skylake: bayer denoise config */
207 	compat_uptr_t	shd_2500_config;       /* Skylake: shading config */
208 	compat_uptr_t	dm_2500_config;        /* Skylake: demosaic config */
209 	compat_uptr_t	rgbpp_2500_config;     /* Skylake: RGBPP config */
210 	compat_uptr_t	dvs_stat_2500_config;  /* Skylake: DVS STAT config */
211 	compat_uptr_t	lace_stat_2500_config; /* Skylake: LACE STAT config */
212 	compat_uptr_t	yuvp1_2500_config;     /* Skylake: yuvp1 config */
213 	compat_uptr_t	yuvp2_2500_config;     /* Skylake: yuvp2 config */
214 	compat_uptr_t	tnr_2500_config;       /* Skylake: TNR config */
215 	compat_uptr_t	dpc_2500_config;       /* Skylake: DPC config */
216 	compat_uptr_t	awb_2500_config;       /* Skylake: auto white balance config */
217 	compat_uptr_t
218 	awb_fr_2500_config;    /* Skylake: auto white balance filter response config */
219 	compat_uptr_t	anr_2500_config;       /* Skylake: ANR config */
220 	compat_uptr_t	af_2500_config;        /* Skylake: auto focus config */
221 	compat_uptr_t	ae_2500_config;        /* Skylake: auto exposure config */
222 	compat_uptr_t	bds_2500_config;       /* Skylake: bayer downscaler config */
223 	compat_uptr_t
224 	dvs_2500_config;       /* Skylake: digital video stabilization config */
225 	compat_uptr_t	res_mgr_2500_config;
226 
227 	/*
228 	 * Output frame pointer the config is to be applied to (optional),
229 	 * set to NULL to make this config is applied as global.
230 	 */
231 	compat_uptr_t	output_frame;
232 	/*
233 	 * Unique ID to track which config was actually applied to a particular
234 	 * frame, driver will send this id back with output frame together.
235 	 */
236 	u32	isp_config_id;
237 	u32	per_frame_setting;
238 };
239 
240 struct atomisp_dvs_6axis_config32 {
241 	u32 exp_id;
242 	u32 width_y;
243 	u32 height_y;
244 	u32 width_uv;
245 	u32 height_uv;
246 	compat_uptr_t xcoords_y;
247 	compat_uptr_t ycoords_y;
248 	compat_uptr_t xcoords_uv;
249 	compat_uptr_t ycoords_uv;
250 };
251 
252 struct atomisp_sensor_ae_bracketing_lut32 {
253 	compat_uptr_t lut;
254 	unsigned int lut_size;
255 };
256 
257 #define ATOMISP_IOC_G_HISTOGRAM32 \
258 	_IOWR('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram32)
259 #define ATOMISP_IOC_S_HISTOGRAM32 \
260 	_IOW('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram32)
261 
262 #define ATOMISP_IOC_G_DIS_STAT32 \
263 	_IOWR('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dis_statistics32)
264 #define ATOMISP_IOC_S_DIS_COEFS32 \
265 	_IOW('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dis_coefficients32)
266 
267 #define ATOMISP_IOC_S_DIS_VECTOR32 \
268 	_IOW('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dvs_6axis_config32)
269 
270 #define ATOMISP_IOC_G_3A_STAT32 \
271 	_IOWR('v', BASE_VIDIOC_PRIVATE + 7, struct atomisp_3a_statistics32)
272 
273 #define ATOMISP_IOC_G_ISP_GDC_TAB32 \
274 	_IOR('v', BASE_VIDIOC_PRIVATE + 10, struct atomisp_morph_table32)
275 #define ATOMISP_IOC_S_ISP_GDC_TAB32 \
276 	_IOW('v', BASE_VIDIOC_PRIVATE + 10, struct atomisp_morph_table32)
277 
278 #define ATOMISP_IOC_S_ISP_FPN_TABLE32 \
279 	_IOW('v', BASE_VIDIOC_PRIVATE + 17, struct v4l2_framebuffer32)
280 
281 #define ATOMISP_IOC_G_ISP_OVERLAY32 \
282 	_IOWR('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay32)
283 #define ATOMISP_IOC_S_ISP_OVERLAY32 \
284 	_IOW('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay32)
285 
286 #define ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP32 \
287 	_IOWR('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_calibration_group32)
288 
289 #define ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA32 \
290 	_IOWR('v', BASE_VIDIOC_PRIVATE + 26, struct v4l2_private_int_data32)
291 
292 #define ATOMISP_IOC_S_ISP_SHD_TAB32 \
293 	_IOWR('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_shading_table32)
294 
295 #define ATOMISP_IOC_G_MOTOR_PRIV_INT_DATA32 \
296 	_IOWR('v', BASE_VIDIOC_PRIVATE + 29, struct v4l2_private_int_data32)
297 
298 #define ATOMISP_IOC_S_PARAMETERS32 \
299 	_IOW('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_parameters32)
300 
301 #define ATOMISP_IOC_G_METADATA32 \
302 	_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata32)
303 
304 #define ATOMISP_IOC_G_METADATA_BY_TYPE32 \
305 	_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata_with_type32)
306 
307 #define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_LUT32 \
308 	_IOW('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_lut32)
309 
310 #endif /* __ATOMISP_COMPAT_IOCTL32_H__ */
311