GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / staging / media / atomisp / pci / atomisp_compat_ioctl32.h
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__ */