1 /* 2 * This file is auto-generated. Modifications will be lost. 3 * 4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5 * for more information. 6 */ 7 #ifndef _UAPI_PISP_BE_CONFIG_H_ 8 #define _UAPI_PISP_BE_CONFIG_H_ 9 #include <linux/types.h> 10 #include "pisp_common.h" 11 #define PISP_BACK_END_INPUT_ALIGN 4u 12 #define PISP_BACK_END_COMPRESSED_ALIGN 8u 13 #define PISP_BACK_END_OUTPUT_MIN_ALIGN 16u 14 #define PISP_BACK_END_OUTPUT_MAX_ALIGN 64u 15 #define PISP_BACK_END_MIN_TILE_WIDTH 16u 16 #define PISP_BACK_END_MIN_TILE_HEIGHT 16u 17 #define PISP_BACK_END_NUM_OUTPUTS 2 18 #define PISP_BACK_END_HOG_OUTPUT 1 19 #define PISP_BACK_END_NUM_TILES 64 20 enum pisp_be_bayer_enable { 21 PISP_BE_BAYER_ENABLE_INPUT = 0x000001, 22 PISP_BE_BAYER_ENABLE_DECOMPRESS = 0x000002, 23 PISP_BE_BAYER_ENABLE_DPC = 0x000004, 24 PISP_BE_BAYER_ENABLE_GEQ = 0x000008, 25 PISP_BE_BAYER_ENABLE_TDN_INPUT = 0x000010, 26 PISP_BE_BAYER_ENABLE_TDN_DECOMPRESS = 0x000020, 27 PISP_BE_BAYER_ENABLE_TDN = 0x000040, 28 PISP_BE_BAYER_ENABLE_TDN_COMPRESS = 0x000080, 29 PISP_BE_BAYER_ENABLE_TDN_OUTPUT = 0x000100, 30 PISP_BE_BAYER_ENABLE_SDN = 0x000200, 31 PISP_BE_BAYER_ENABLE_BLC = 0x000400, 32 PISP_BE_BAYER_ENABLE_STITCH_INPUT = 0x000800, 33 PISP_BE_BAYER_ENABLE_STITCH_DECOMPRESS = 0x001000, 34 PISP_BE_BAYER_ENABLE_STITCH = 0x002000, 35 PISP_BE_BAYER_ENABLE_STITCH_COMPRESS = 0x004000, 36 PISP_BE_BAYER_ENABLE_STITCH_OUTPUT = 0x008000, 37 PISP_BE_BAYER_ENABLE_WBG = 0x010000, 38 PISP_BE_BAYER_ENABLE_CDN = 0x020000, 39 PISP_BE_BAYER_ENABLE_LSC = 0x040000, 40 PISP_BE_BAYER_ENABLE_TONEMAP = 0x080000, 41 PISP_BE_BAYER_ENABLE_CAC = 0x100000, 42 PISP_BE_BAYER_ENABLE_DEBIN = 0x200000, 43 PISP_BE_BAYER_ENABLE_DEMOSAIC = 0x400000, 44 }; 45 enum pisp_be_rgb_enable { 46 PISP_BE_RGB_ENABLE_INPUT = 0x000001, 47 PISP_BE_RGB_ENABLE_CCM = 0x000002, 48 PISP_BE_RGB_ENABLE_SAT_CONTROL = 0x000004, 49 PISP_BE_RGB_ENABLE_YCBCR = 0x000008, 50 PISP_BE_RGB_ENABLE_FALSE_COLOUR = 0x000010, 51 PISP_BE_RGB_ENABLE_SHARPEN = 0x000020, 52 PISP_BE_RGB_ENABLE_YCBCR_INVERSE = 0x000080, 53 PISP_BE_RGB_ENABLE_GAMMA = 0x000100, 54 PISP_BE_RGB_ENABLE_CSC0 = 0x000200, 55 PISP_BE_RGB_ENABLE_CSC1 = 0x000400, 56 PISP_BE_RGB_ENABLE_DOWNSCALE0 = 0x001000, 57 PISP_BE_RGB_ENABLE_DOWNSCALE1 = 0x002000, 58 PISP_BE_RGB_ENABLE_RESAMPLE0 = 0x008000, 59 PISP_BE_RGB_ENABLE_RESAMPLE1 = 0x010000, 60 PISP_BE_RGB_ENABLE_OUTPUT0 = 0x040000, 61 PISP_BE_RGB_ENABLE_OUTPUT1 = 0x080000, 62 PISP_BE_RGB_ENABLE_HOG = 0x200000 63 }; 64 #define PISP_BE_RGB_ENABLE_CSC(i) (PISP_BE_RGB_ENABLE_CSC0 << (i)) 65 #define PISP_BE_RGB_ENABLE_DOWNSCALE(i) (PISP_BE_RGB_ENABLE_DOWNSCALE0 << (i)) 66 #define PISP_BE_RGB_ENABLE_RESAMPLE(i) (PISP_BE_RGB_ENABLE_RESAMPLE0 << (i)) 67 #define PISP_BE_RGB_ENABLE_OUTPUT(i) (PISP_BE_RGB_ENABLE_OUTPUT0 << (i)) 68 enum pisp_be_dirty { 69 PISP_BE_DIRTY_GLOBAL = 0x0001, 70 PISP_BE_DIRTY_SH_FC_COMBINE = 0x0002, 71 PISP_BE_DIRTY_CROP = 0x0004 72 }; 73 struct pisp_be_global_config { 74 __u32 bayer_enables; 75 __u32 rgb_enables; 76 __u8 bayer_order; 77 __u8 pad[3]; 78 } __attribute__((packed)); 79 struct pisp_be_input_buffer_config { 80 __u32 addr[3][2]; 81 } __attribute__((packed)); 82 struct pisp_be_dpc_config { 83 __u8 coeff_level; 84 __u8 coeff_range; 85 __u8 pad; 86 #define PISP_BE_DPC_FLAG_FOLDBACK 1 87 __u8 flags; 88 } __attribute__((packed)); 89 struct pisp_be_geq_config { 90 __u16 offset; 91 #define PISP_BE_GEQ_SHARPER (1U << 15) 92 #define PISP_BE_GEQ_SLOPE ((1 << 10) - 1) 93 __u16 slope_sharper; 94 __u16 min; 95 __u16 max; 96 } __attribute__((packed)); 97 struct pisp_be_tdn_input_buffer_config { 98 __u32 addr[2]; 99 } __attribute__((packed)); 100 struct pisp_be_tdn_config { 101 __u16 black_level; 102 __u16 ratio; 103 __u16 noise_constant; 104 __u16 noise_slope; 105 __u16 threshold; 106 __u8 reset; 107 __u8 pad; 108 } __attribute__((packed)); 109 struct pisp_be_tdn_output_buffer_config { 110 __u32 addr[2]; 111 } __attribute__((packed)); 112 struct pisp_be_sdn_config { 113 __u16 black_level; 114 __u8 leakage; 115 __u8 pad; 116 __u16 noise_constant; 117 __u16 noise_slope; 118 __u16 noise_constant2; 119 __u16 noise_slope2; 120 } __attribute__((packed)); 121 struct pisp_be_stitch_input_buffer_config { 122 __u32 addr[2]; 123 } __attribute__((packed)); 124 #define PISP_BE_STITCH_STREAMING_LONG 0x8000 125 #define PISP_BE_STITCH_EXPOSURE_RATIO_MASK 0x7fff 126 struct pisp_be_stitch_config { 127 __u16 threshold_lo; 128 __u8 threshold_diff_power; 129 __u8 pad; 130 __u16 exposure_ratio; 131 __u8 motion_threshold_256; 132 __u8 motion_threshold_recip; 133 } __attribute__((packed)); 134 struct pisp_be_stitch_output_buffer_config { 135 __u32 addr[2]; 136 } __attribute__((packed)); 137 struct pisp_be_cdn_config { 138 __u16 thresh; 139 __u8 iir_strength; 140 __u8 g_adjust; 141 } __attribute__((packed)); 142 #define PISP_BE_LSC_LOG_GRID_SIZE 5 143 #define PISP_BE_LSC_GRID_SIZE (1 << PISP_BE_LSC_LOG_GRID_SIZE) 144 #define PISP_BE_LSC_STEP_PRECISION 18 145 struct pisp_be_lsc_config { 146 __u16 grid_step_x; 147 __u16 grid_step_y; 148 #define PISP_BE_LSC_LUT_SIZE (PISP_BE_LSC_GRID_SIZE + 1) 149 __u32 lut_packed[PISP_BE_LSC_LUT_SIZE][PISP_BE_LSC_LUT_SIZE]; 150 } __attribute__((packed)); 151 struct pisp_be_lsc_extra { 152 __u16 offset_x; 153 __u16 offset_y; 154 } __attribute__((packed)); 155 #define PISP_BE_CAC_LOG_GRID_SIZE 3 156 #define PISP_BE_CAC_GRID_SIZE (1 << PISP_BE_CAC_LOG_GRID_SIZE) 157 #define PISP_BE_CAC_STEP_PRECISION 20 158 struct pisp_be_cac_config { 159 __u16 grid_step_x; 160 __u16 grid_step_y; 161 #define PISP_BE_CAC_LUT_SIZE (PISP_BE_CAC_GRID_SIZE + 1) 162 __s8 lut[PISP_BE_CAC_LUT_SIZE][PISP_BE_CAC_LUT_SIZE][2][2]; 163 } __attribute__((packed)); 164 struct pisp_be_cac_extra { 165 __u16 offset_x; 166 __u16 offset_y; 167 } __attribute__((packed)); 168 #define PISP_BE_DEBIN_NUM_COEFFS 4 169 struct pisp_be_debin_config { 170 __s8 coeffs[PISP_BE_DEBIN_NUM_COEFFS]; 171 __s8 h_enable; 172 __s8 v_enable; 173 __s8 pad[2]; 174 } __attribute__((packed)); 175 #define PISP_BE_TONEMAP_LUT_SIZE 64 176 struct pisp_be_tonemap_config { 177 __u16 detail_constant; 178 __u16 detail_slope; 179 __u16 iir_strength; 180 __u16 strength; 181 __u32 lut[PISP_BE_TONEMAP_LUT_SIZE]; 182 } __attribute__((packed)); 183 struct pisp_be_demosaic_config { 184 __u8 sharper; 185 __u8 fc_mode; 186 __u8 pad[2]; 187 } __attribute__((packed)); 188 struct pisp_be_ccm_config { 189 __s16 coeffs[9]; 190 __u8 pad[2]; 191 __s32 offsets[3]; 192 } __attribute__((packed)); 193 struct pisp_be_sat_control_config { 194 __u8 shift_r; 195 __u8 shift_g; 196 __u8 shift_b; 197 __u8 pad; 198 } __attribute__((packed)); 199 struct pisp_be_false_colour_config { 200 __u8 distance; 201 __u8 pad[3]; 202 } __attribute__((packed)); 203 #define PISP_BE_SHARPEN_SIZE 5 204 #define PISP_BE_SHARPEN_FUNC_NUM_POINTS 9 205 struct pisp_be_sharpen_config { 206 __s8 kernel0[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; 207 __s8 pad0[3]; 208 __s8 kernel1[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; 209 __s8 pad1[3]; 210 __s8 kernel2[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; 211 __s8 pad2[3]; 212 __s8 kernel3[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; 213 __s8 pad3[3]; 214 __s8 kernel4[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; 215 __s8 pad4[3]; 216 __u16 threshold_offset0; 217 __u16 threshold_slope0; 218 __u16 scale0; 219 __u16 pad5; 220 __u16 threshold_offset1; 221 __u16 threshold_slope1; 222 __u16 scale1; 223 __u16 pad6; 224 __u16 threshold_offset2; 225 __u16 threshold_slope2; 226 __u16 scale2; 227 __u16 pad7; 228 __u16 threshold_offset3; 229 __u16 threshold_slope3; 230 __u16 scale3; 231 __u16 pad8; 232 __u16 threshold_offset4; 233 __u16 threshold_slope4; 234 __u16 scale4; 235 __u16 pad9; 236 __u16 positive_strength; 237 __u16 positive_pre_limit; 238 __u16 positive_func[PISP_BE_SHARPEN_FUNC_NUM_POINTS]; 239 __u16 positive_limit; 240 __u16 negative_strength; 241 __u16 negative_pre_limit; 242 __u16 negative_func[PISP_BE_SHARPEN_FUNC_NUM_POINTS]; 243 __u16 negative_limit; 244 __u8 enables; 245 __u8 white; 246 __u8 black; 247 __u8 grey; 248 } __attribute__((packed)); 249 struct pisp_be_sh_fc_combine_config { 250 __u8 y_factor; 251 __u8 c1_factor; 252 __u8 c2_factor; 253 __u8 pad; 254 } __attribute__((packed)); 255 #define PISP_BE_GAMMA_LUT_SIZE 64 256 struct pisp_be_gamma_config { 257 __u32 lut[PISP_BE_GAMMA_LUT_SIZE]; 258 } __attribute__((packed)); 259 struct pisp_be_crop_config { 260 __u16 offset_x, offset_y; 261 __u16 width, height; 262 } __attribute__((packed)); 263 #define PISP_BE_RESAMPLE_FILTER_SIZE 96 264 struct pisp_be_resample_config { 265 __u16 scale_factor_h, scale_factor_v; 266 __s16 coef[PISP_BE_RESAMPLE_FILTER_SIZE]; 267 } __attribute__((packed)); 268 struct pisp_be_resample_extra { 269 __u16 scaled_width; 270 __u16 scaled_height; 271 __s16 initial_phase_h[3]; 272 __s16 initial_phase_v[3]; 273 } __attribute__((packed)); 274 struct pisp_be_downscale_config { 275 __u16 scale_factor_h; 276 __u16 scale_factor_v; 277 __u16 scale_recip_h; 278 __u16 scale_recip_v; 279 } __attribute__((packed)); 280 struct pisp_be_downscale_extra { 281 __u16 scaled_width; 282 __u16 scaled_height; 283 } __attribute__((packed)); 284 struct pisp_be_hog_config { 285 __u8 compute_signed; 286 __u8 channel_mix[3]; 287 __u32 stride; 288 } __attribute__((packed)); 289 struct pisp_be_axi_config { 290 __u8 r_qos; 291 __u8 r_cache_prot; 292 __u8 w_qos; 293 __u8 w_cache_prot; 294 } __attribute__((packed)); 295 enum pisp_be_transform { 296 PISP_BE_TRANSFORM_NONE = 0x0, 297 PISP_BE_TRANSFORM_HFLIP = 0x1, 298 PISP_BE_TRANSFORM_VFLIP = 0x2, 299 PISP_BE_TRANSFORM_ROT180 = (PISP_BE_TRANSFORM_HFLIP | PISP_BE_TRANSFORM_VFLIP) 300 }; 301 struct pisp_be_output_format_config { 302 struct pisp_image_format_config image; 303 __u8 transform; 304 __u8 pad[3]; 305 __u16 lo; 306 __u16 hi; 307 __u16 lo2; 308 __u16 hi2; 309 } __attribute__((packed)); 310 struct pisp_be_output_buffer_config { 311 __u32 addr[3][2]; 312 } __attribute__((packed)); 313 struct pisp_be_hog_buffer_config { 314 __u32 addr[2]; 315 } __attribute__((packed)); 316 struct pisp_be_config { 317 struct pisp_be_input_buffer_config input_buffer; 318 struct pisp_be_tdn_input_buffer_config tdn_input_buffer; 319 struct pisp_be_stitch_input_buffer_config stitch_input_buffer; 320 struct pisp_be_tdn_output_buffer_config tdn_output_buffer; 321 struct pisp_be_stitch_output_buffer_config stitch_output_buffer; 322 struct pisp_be_output_buffer_config output_buffer[PISP_BACK_END_NUM_OUTPUTS]; 323 struct pisp_be_hog_buffer_config hog_buffer; 324 struct pisp_be_global_config global; 325 struct pisp_image_format_config input_format; 326 struct pisp_decompress_config decompress; 327 struct pisp_be_dpc_config dpc; 328 struct pisp_be_geq_config geq; 329 struct pisp_image_format_config tdn_input_format; 330 struct pisp_decompress_config tdn_decompress; 331 struct pisp_be_tdn_config tdn; 332 struct pisp_compress_config tdn_compress; 333 struct pisp_image_format_config tdn_output_format; 334 struct pisp_be_sdn_config sdn; 335 struct pisp_bla_config blc; 336 struct pisp_compress_config stitch_compress; 337 struct pisp_image_format_config stitch_output_format; 338 struct pisp_image_format_config stitch_input_format; 339 struct pisp_decompress_config stitch_decompress; 340 struct pisp_be_stitch_config stitch; 341 struct pisp_be_lsc_config lsc; 342 struct pisp_wbg_config wbg; 343 struct pisp_be_cdn_config cdn; 344 struct pisp_be_cac_config cac; 345 struct pisp_be_debin_config debin; 346 struct pisp_be_tonemap_config tonemap; 347 struct pisp_be_demosaic_config demosaic; 348 struct pisp_be_ccm_config ccm; 349 struct pisp_be_sat_control_config sat_control; 350 struct pisp_be_ccm_config ycbcr; 351 struct pisp_be_sharpen_config sharpen; 352 struct pisp_be_false_colour_config false_colour; 353 struct pisp_be_sh_fc_combine_config sh_fc_combine; 354 struct pisp_be_ccm_config ycbcr_inverse; 355 struct pisp_be_gamma_config gamma; 356 struct pisp_be_ccm_config csc[PISP_BACK_END_NUM_OUTPUTS]; 357 struct pisp_be_downscale_config downscale[PISP_BACK_END_NUM_OUTPUTS]; 358 struct pisp_be_resample_config resample[PISP_BACK_END_NUM_OUTPUTS]; 359 struct pisp_be_output_format_config output_format[PISP_BACK_END_NUM_OUTPUTS]; 360 struct pisp_be_hog_config hog; 361 struct pisp_be_axi_config axi; 362 struct pisp_be_lsc_extra lsc_extra; 363 struct pisp_be_cac_extra cac_extra; 364 struct pisp_be_downscale_extra downscale_extra[PISP_BACK_END_NUM_OUTPUTS]; 365 struct pisp_be_resample_extra resample_extra[PISP_BACK_END_NUM_OUTPUTS]; 366 struct pisp_be_crop_config crop; 367 struct pisp_image_format_config hog_format; 368 __u32 dirty_flags_bayer; 369 __u32 dirty_flags_rgb; 370 __u32 dirty_flags_extra; 371 } __attribute__((packed)); 372 enum pisp_tile_edge { 373 PISP_LEFT_EDGE = (1 << 0), 374 PISP_RIGHT_EDGE = (1 << 1), 375 PISP_TOP_EDGE = (1 << 2), 376 PISP_BOTTOM_EDGE = (1 << 3) 377 }; 378 struct pisp_tile { 379 __u8 edge; 380 __u8 pad0[3]; 381 __u32 input_addr_offset; 382 __u32 input_addr_offset2; 383 __u16 input_offset_x; 384 __u16 input_offset_y; 385 __u16 input_width; 386 __u16 input_height; 387 __u32 tdn_input_addr_offset; 388 __u32 tdn_output_addr_offset; 389 __u32 stitch_input_addr_offset; 390 __u32 stitch_output_addr_offset; 391 __u32 lsc_grid_offset_x; 392 __u32 lsc_grid_offset_y; 393 __u32 cac_grid_offset_x; 394 __u32 cac_grid_offset_y; 395 __u16 crop_x_start[PISP_BACK_END_NUM_OUTPUTS]; 396 __u16 crop_x_end[PISP_BACK_END_NUM_OUTPUTS]; 397 __u16 crop_y_start[PISP_BACK_END_NUM_OUTPUTS]; 398 __u16 crop_y_end[PISP_BACK_END_NUM_OUTPUTS]; 399 __u16 downscale_phase_x[3 * PISP_BACK_END_NUM_OUTPUTS]; 400 __u16 downscale_phase_y[3 * PISP_BACK_END_NUM_OUTPUTS]; 401 __u16 resample_in_width[PISP_BACK_END_NUM_OUTPUTS]; 402 __u16 resample_in_height[PISP_BACK_END_NUM_OUTPUTS]; 403 __u16 resample_phase_x[3 * PISP_BACK_END_NUM_OUTPUTS]; 404 __u16 resample_phase_y[3 * PISP_BACK_END_NUM_OUTPUTS]; 405 __u16 output_offset_x[PISP_BACK_END_NUM_OUTPUTS]; 406 __u16 output_offset_y[PISP_BACK_END_NUM_OUTPUTS]; 407 __u16 output_width[PISP_BACK_END_NUM_OUTPUTS]; 408 __u16 output_height[PISP_BACK_END_NUM_OUTPUTS]; 409 __u32 output_addr_offset[PISP_BACK_END_NUM_OUTPUTS]; 410 __u32 output_addr_offset2[PISP_BACK_END_NUM_OUTPUTS]; 411 __u32 output_hog_addr_offset; 412 } __attribute__((packed)); 413 struct pisp_be_tiles_config { 414 struct pisp_be_config config; 415 struct pisp_tile tiles[PISP_BACK_END_NUM_TILES]; 416 __u32 num_tiles; 417 } __attribute__((packed)); 418 #endif 419