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 atomisp_acc_fw_load32 {
144 	unsigned int size;
145 	unsigned int fw_handle;
146 	compat_uptr_t data;
147 };
148 
149 struct atomisp_acc_fw_arg32 {
150 	unsigned int fw_handle;
151 	unsigned int index;
152 	compat_uptr_t value;
153 	compat_size_t size;
154 };
155 
156 struct v4l2_private_int_data32 {
157 	__u32 size;
158 	compat_uptr_t data;
159 	__u32 reserved[2];
160 };
161 
162 struct atomisp_shading_table32 {
163 	__u32 enable;
164 	__u32 sensor_width;
165 	__u32 sensor_height;
166 	__u32 width;
167 	__u32 height;
168 	__u32 fraction_bits;
169 
170 	compat_uptr_t data[ATOMISP_NUM_SC_COLORS];
171 };
172 
173 struct atomisp_acc_map32 {
174 	__u32 flags;			/* Flags, see list below */
175 	__u32 length;			/* Length of data in bytes */
176 	compat_uptr_t user_ptr;		/* Pointer into user space */
177 	compat_ulong_t css_ptr;		/* Pointer into CSS address space */
178 	__u32 reserved[4];		/* Set to zero */
179 };
180 
181 struct atomisp_acc_s_mapped_arg32 {
182 	unsigned int fw_handle;
183 	__u32 memory;			/* one of enum atomisp_acc_memory */
184 	compat_size_t length;
185 	compat_ulong_t css_ptr;
186 };
187 
188 struct atomisp_parameters32 {
189 	compat_uptr_t wb_config;  /* White Balance config */
190 	compat_uptr_t cc_config;  /* Color Correction config */
191 	compat_uptr_t tnr_config; /* Temporal Noise Reduction */
192 	compat_uptr_t ecd_config; /* Eigen Color Demosaicing */
193 	compat_uptr_t ynr_config; /* Y(Luma) Noise Reduction */
194 	compat_uptr_t fc_config;  /* Fringe Control */
195 	compat_uptr_t formats_config;  /* Formats Control */
196 	compat_uptr_t cnr_config; /* Chroma Noise Reduction */
197 	compat_uptr_t macc_config;  /* MACC */
198 	compat_uptr_t ctc_config; /* Chroma Tone Control */
199 	compat_uptr_t aa_config;  /* Anti-Aliasing */
200 	compat_uptr_t baa_config;  /* Anti-Aliasing */
201 	compat_uptr_t ce_config;
202 	compat_uptr_t dvs_6axis_config;
203 	compat_uptr_t ob_config;  /* Objective Black config */
204 	compat_uptr_t dp_config;  /* Dead Pixel config */
205 	compat_uptr_t nr_config;  /* Noise Reduction config */
206 	compat_uptr_t ee_config;  /* Edge Enhancement config */
207 	compat_uptr_t de_config;  /* Demosaic config */
208 	compat_uptr_t gc_config;  /* Gamma Correction config */
209 	compat_uptr_t anr_config; /* Advanced Noise Reduction */
210 	compat_uptr_t a3a_config; /* 3A Statistics config */
211 	compat_uptr_t xnr_config; /* eXtra Noise Reduction */
212 	compat_uptr_t dz_config;  /* Digital Zoom */
213 	compat_uptr_t yuv2rgb_cc_config; /* Color
214 							Correction config */
215 	compat_uptr_t rgb2yuv_cc_config; /* Color
216 							Correction config */
217 	compat_uptr_t macc_table;
218 	compat_uptr_t gamma_table;
219 	compat_uptr_t ctc_table;
220 	compat_uptr_t xnr_table;
221 	compat_uptr_t r_gamma_table;
222 	compat_uptr_t g_gamma_table;
223 	compat_uptr_t b_gamma_table;
224 	compat_uptr_t motion_vector; /* For 2-axis DVS */
225 	compat_uptr_t shading_table;
226 	compat_uptr_t morph_table;
227 	compat_uptr_t dvs_coefs; /* DVS 1.0 coefficients */
228 	compat_uptr_t dvs2_coefs; /* DVS 2.0 coefficients */
229 	compat_uptr_t capture_config;
230 	compat_uptr_t anr_thres;
231 
232 	compat_uptr_t	lin_2500_config;       /* Skylake: Linearization config */
233 	compat_uptr_t	obgrid_2500_config;    /* Skylake: OBGRID config */
234 	compat_uptr_t	bnr_2500_config;       /* Skylake: bayer denoise config */
235 	compat_uptr_t	shd_2500_config;       /* Skylake: shading config */
236 	compat_uptr_t	dm_2500_config;        /* Skylake: demosaic config */
237 	compat_uptr_t	rgbpp_2500_config;     /* Skylake: RGBPP config */
238 	compat_uptr_t	dvs_stat_2500_config;  /* Skylake: DVS STAT config */
239 	compat_uptr_t	lace_stat_2500_config; /* Skylake: LACE STAT config */
240 	compat_uptr_t	yuvp1_2500_config;     /* Skylake: yuvp1 config */
241 	compat_uptr_t	yuvp2_2500_config;     /* Skylake: yuvp2 config */
242 	compat_uptr_t	tnr_2500_config;       /* Skylake: TNR config */
243 	compat_uptr_t	dpc_2500_config;       /* Skylake: DPC config */
244 	compat_uptr_t	awb_2500_config;       /* Skylake: auto white balance config */
245 	compat_uptr_t
246 	awb_fr_2500_config;    /* Skylake: auto white balance filter response config */
247 	compat_uptr_t	anr_2500_config;       /* Skylake: ANR config */
248 	compat_uptr_t	af_2500_config;        /* Skylake: auto focus config */
249 	compat_uptr_t	ae_2500_config;        /* Skylake: auto exposure config */
250 	compat_uptr_t	bds_2500_config;       /* Skylake: bayer downscaler config */
251 	compat_uptr_t
252 	dvs_2500_config;       /* Skylake: digital video stabilization config */
253 	compat_uptr_t	res_mgr_2500_config;
254 
255 	/*
256 	 * Output frame pointer the config is to be applied to (optional),
257 	 * set to NULL to make this config is applied as global.
258 	 */
259 	compat_uptr_t	output_frame;
260 	/*
261 	 * Unique ID to track which config was actually applied to a particular
262 	 * frame, driver will send this id back with output frame together.
263 	 */
264 	u32	isp_config_id;
265 	u32	per_frame_setting;
266 };
267 
268 struct atomisp_acc_fw_load_to_pipe32 {
269 	__u32 flags;			/* Flags, see below for valid values */
270 	unsigned int fw_handle;		/* Handle, filled by kernel. */
271 	__u32 size;			/* Firmware binary size */
272 	compat_uptr_t data;		/* Pointer to firmware */
273 	__u32 type;			/* Binary type */
274 	__u32 reserved[3];		/* Set to zero */
275 };
276 
277 struct atomisp_dvs_6axis_config32 {
278 	u32 exp_id;
279 	u32 width_y;
280 	u32 height_y;
281 	u32 width_uv;
282 	u32 height_uv;
283 	compat_uptr_t xcoords_y;
284 	compat_uptr_t ycoords_y;
285 	compat_uptr_t xcoords_uv;
286 	compat_uptr_t ycoords_uv;
287 };
288 
289 struct atomisp_sensor_ae_bracketing_lut32 {
290 	compat_uptr_t lut;
291 	unsigned int lut_size;
292 };
293 
294 #define ATOMISP_IOC_G_HISTOGRAM32 \
295 	_IOWR('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram32)
296 #define ATOMISP_IOC_S_HISTOGRAM32 \
297 	_IOW('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram32)
298 
299 #define ATOMISP_IOC_G_DIS_STAT32 \
300 	_IOWR('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dis_statistics32)
301 #define ATOMISP_IOC_S_DIS_COEFS32 \
302 	_IOW('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dis_coefficients32)
303 
304 #define ATOMISP_IOC_S_DIS_VECTOR32 \
305 	_IOW('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dvs_6axis_config32)
306 
307 #define ATOMISP_IOC_G_3A_STAT32 \
308 	_IOWR('v', BASE_VIDIOC_PRIVATE + 7, struct atomisp_3a_statistics32)
309 
310 #define ATOMISP_IOC_G_ISP_GDC_TAB32 \
311 	_IOR('v', BASE_VIDIOC_PRIVATE + 10, struct atomisp_morph_table32)
312 #define ATOMISP_IOC_S_ISP_GDC_TAB32 \
313 	_IOW('v', BASE_VIDIOC_PRIVATE + 10, struct atomisp_morph_table32)
314 
315 #define ATOMISP_IOC_S_ISP_FPN_TABLE32 \
316 	_IOW('v', BASE_VIDIOC_PRIVATE + 17, struct v4l2_framebuffer32)
317 
318 #define ATOMISP_IOC_G_ISP_OVERLAY32 \
319 	_IOWR('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay32)
320 #define ATOMISP_IOC_S_ISP_OVERLAY32 \
321 	_IOW('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay32)
322 
323 #define ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP32 \
324 	_IOWR('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_calibration_group32)
325 
326 #define ATOMISP_IOC_ACC_LOAD32 \
327 	_IOWR('v', BASE_VIDIOC_PRIVATE + 24, struct atomisp_acc_fw_load32)
328 
329 #define ATOMISP_IOC_ACC_S_ARG32 \
330 	_IOW('v', BASE_VIDIOC_PRIVATE + 24, struct atomisp_acc_fw_arg32)
331 
332 #define ATOMISP_IOC_ACC_DESTAB32 \
333 	_IOW('v', BASE_VIDIOC_PRIVATE + 25, struct atomisp_acc_fw_arg32)
334 
335 #define ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA32 \
336 	_IOWR('v', BASE_VIDIOC_PRIVATE + 26, struct v4l2_private_int_data32)
337 
338 #define ATOMISP_IOC_S_ISP_SHD_TAB32 \
339 	_IOWR('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_shading_table32)
340 
341 #define ATOMISP_IOC_G_MOTOR_PRIV_INT_DATA32 \
342 	_IOWR('v', BASE_VIDIOC_PRIVATE + 29, struct v4l2_private_int_data32)
343 
344 #define ATOMISP_IOC_ACC_MAP32 \
345 	_IOWR('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_acc_map32)
346 
347 #define ATOMISP_IOC_ACC_UNMAP32 \
348 	_IOW('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_acc_map32)
349 
350 #define ATOMISP_IOC_ACC_S_MAPPED_ARG32 \
351 	_IOW('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_acc_s_mapped_arg32)
352 
353 #define ATOMISP_IOC_ACC_LOAD_TO_PIPE32 \
354 	_IOWR('v', BASE_VIDIOC_PRIVATE + 31, struct atomisp_acc_fw_load_to_pipe32)
355 
356 #define ATOMISP_IOC_S_PARAMETERS32 \
357 	_IOW('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_parameters32)
358 
359 #define ATOMISP_IOC_G_METADATA32 \
360 	_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata32)
361 
362 #define ATOMISP_IOC_G_METADATA_BY_TYPE32 \
363 	_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata_with_type32)
364 
365 #define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_LUT32 \
366 	_IOW('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_lut32)
367 
368 #endif /* __ATOMISP_COMPAT_IOCTL32_H__ */
369