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