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