| @@ -0,0 +1,968 @@ |
| | 1 | /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ |
| | 2 | /* |
| | 3 | * PiSP Back End configuration definitions. |
| | 4 | * |
| | 5 | * Copyright (C) 2021 - Raspberry Pi Ltd |
| | 6 | * |
| | 7 | */ |
| | 8 | #ifndef _UAPI_PISP_BE_CONFIG_H_ |
| | 9 | #define _UAPI_PISP_BE_CONFIG_H_ |
| | 10 | |
| | 11 | #include <linux/types.h> |
| | 12 | |
| | 13 | #include "pisp_common.h" |
| | 14 | |
| | 15 | /* byte alignment for inputs */ |
| | 16 | #define PISP_BACK_END_INPUT_ALIGN 4u |
| | 17 | /* alignment for compressed inputs */ |
| | 18 | #define PISP_BACK_END_COMPRESSED_ALIGN 8u |
| | 19 | /* minimum required byte alignment for outputs */ |
| | 20 | #define PISP_BACK_END_OUTPUT_MIN_ALIGN 16u |
| | 21 | /* preferred byte alignment for outputs */ |
| | 22 | #define PISP_BACK_END_OUTPUT_MAX_ALIGN 64u |
| | 23 | |
| | 24 | /* minimum allowed tile width anywhere in the pipeline */ |
| | 25 | #define PISP_BACK_END_MIN_TILE_WIDTH 16u |
| | 26 | /* minimum allowed tile width anywhere in the pipeline */ |
| | 27 | #define PISP_BACK_END_MIN_TILE_HEIGHT 16u |
| | 28 | |
| | 29 | #define PISP_BACK_END_NUM_OUTPUTS 2 |
| | 30 | #define PISP_BACK_END_HOG_OUTPUT 1 |
| | 31 | |
| | 32 | #define PISP_BACK_END_NUM_TILES 64 |
| | 33 | |
| | 34 | enum pisp_be_bayer_enable { |
| | 35 | PISP_BE_BAYER_ENABLE_INPUT = 0x000001, |
| | 36 | PISP_BE_BAYER_ENABLE_DECOMPRESS = 0x000002, |
| | 37 | PISP_BE_BAYER_ENABLE_DPC = 0x000004, |
| | 38 | PISP_BE_BAYER_ENABLE_GEQ = 0x000008, |
| | 39 | PISP_BE_BAYER_ENABLE_TDN_INPUT = 0x000010, |
| | 40 | PISP_BE_BAYER_ENABLE_TDN_DECOMPRESS = 0x000020, |
| | 41 | PISP_BE_BAYER_ENABLE_TDN = 0x000040, |
| | 42 | PISP_BE_BAYER_ENABLE_TDN_COMPRESS = 0x000080, |
| | 43 | PISP_BE_BAYER_ENABLE_TDN_OUTPUT = 0x000100, |
| | 44 | PISP_BE_BAYER_ENABLE_SDN = 0x000200, |
| | 45 | PISP_BE_BAYER_ENABLE_BLC = 0x000400, |
| | 46 | PISP_BE_BAYER_ENABLE_STITCH_INPUT = 0x000800, |
| | 47 | PISP_BE_BAYER_ENABLE_STITCH_DECOMPRESS = 0x001000, |
| | 48 | PISP_BE_BAYER_ENABLE_STITCH = 0x002000, |
| | 49 | PISP_BE_BAYER_ENABLE_STITCH_COMPRESS = 0x004000, |
| | 50 | PISP_BE_BAYER_ENABLE_STITCH_OUTPUT = 0x008000, |
| | 51 | PISP_BE_BAYER_ENABLE_WBG = 0x010000, |
| | 52 | PISP_BE_BAYER_ENABLE_CDN = 0x020000, |
| | 53 | PISP_BE_BAYER_ENABLE_LSC = 0x040000, |
| | 54 | PISP_BE_BAYER_ENABLE_TONEMAP = 0x080000, |
| | 55 | PISP_BE_BAYER_ENABLE_CAC = 0x100000, |
| | 56 | PISP_BE_BAYER_ENABLE_DEBIN = 0x200000, |
| | 57 | PISP_BE_BAYER_ENABLE_DEMOSAIC = 0x400000, |
| | 58 | }; |
| | 59 | |
| | 60 | enum pisp_be_rgb_enable { |
| | 61 | PISP_BE_RGB_ENABLE_INPUT = 0x000001, |
| | 62 | PISP_BE_RGB_ENABLE_CCM = 0x000002, |
| | 63 | PISP_BE_RGB_ENABLE_SAT_CONTROL = 0x000004, |
| | 64 | PISP_BE_RGB_ENABLE_YCBCR = 0x000008, |
| | 65 | PISP_BE_RGB_ENABLE_FALSE_COLOUR = 0x000010, |
| | 66 | PISP_BE_RGB_ENABLE_SHARPEN = 0x000020, |
| | 67 | /* Preferred colours would occupy 0x000040 */ |
| | 68 | PISP_BE_RGB_ENABLE_YCBCR_INVERSE = 0x000080, |
| | 69 | PISP_BE_RGB_ENABLE_GAMMA = 0x000100, |
| | 70 | PISP_BE_RGB_ENABLE_CSC0 = 0x000200, |
| | 71 | PISP_BE_RGB_ENABLE_CSC1 = 0x000400, |
| | 72 | PISP_BE_RGB_ENABLE_DOWNSCALE0 = 0x001000, |
| | 73 | PISP_BE_RGB_ENABLE_DOWNSCALE1 = 0x002000, |
| | 74 | PISP_BE_RGB_ENABLE_RESAMPLE0 = 0x008000, |
| | 75 | PISP_BE_RGB_ENABLE_RESAMPLE1 = 0x010000, |
| | 76 | PISP_BE_RGB_ENABLE_OUTPUT0 = 0x040000, |
| | 77 | PISP_BE_RGB_ENABLE_OUTPUT1 = 0x080000, |
| | 78 | PISP_BE_RGB_ENABLE_HOG = 0x200000 |
| | 79 | }; |
| | 80 | |
| | 81 | #define PISP_BE_RGB_ENABLE_CSC(i) (PISP_BE_RGB_ENABLE_CSC0 << (i)) |
| | 82 | #define PISP_BE_RGB_ENABLE_DOWNSCALE(i) (PISP_BE_RGB_ENABLE_DOWNSCALE0 << (i)) |
| | 83 | #define PISP_BE_RGB_ENABLE_RESAMPLE(i) (PISP_BE_RGB_ENABLE_RESAMPLE0 << (i)) |
| | 84 | #define PISP_BE_RGB_ENABLE_OUTPUT(i) (PISP_BE_RGB_ENABLE_OUTPUT0 << (i)) |
| | 85 | |
| | 86 | /* |
| | 87 | * We use the enable flags to show when blocks are "dirty", but we need some |
| | 88 | * extra ones too. |
| | 89 | */ |
| | 90 | enum pisp_be_dirty { |
| | 91 | PISP_BE_DIRTY_GLOBAL = 0x0001, |
| | 92 | PISP_BE_DIRTY_SH_FC_COMBINE = 0x0002, |
| | 93 | PISP_BE_DIRTY_CROP = 0x0004 |
| | 94 | }; |
| | 95 | |
| | 96 | /** |
| | 97 | * struct pisp_be_global_config - PiSP global enable bitmaps |
| | 98 | * @bayer_enables: Bayer input enable flags |
| | 99 | * @rgb_enables: RGB output enable flags |
| | 100 | * @bayer_order: Bayer input format ordering |
| | 101 | * @pad: Padding bytes |
| | 102 | */ |
| | 103 | struct pisp_be_global_config { |
| | 104 | __u32 bayer_enables; |
| | 105 | __u32 rgb_enables; |
| | 106 | __u8 bayer_order; |
| | 107 | __u8 pad[3]; |
| | 108 | } __attribute__((packed)); |
| | 109 | |
| | 110 | /** |
| | 111 | * struct pisp_be_input_buffer_config - PiSP Back End input buffer |
| | 112 | * @addr: Input buffer address |
| | 113 | */ |
| | 114 | struct pisp_be_input_buffer_config { |
| | 115 | /* low 32 bits followed by high 32 bits (for each of up to 3 planes) */ |
| | 116 | __u32 addr[3][2]; |
| | 117 | } __attribute__((packed)); |
| | 118 | |
| | 119 | /** |
| | 120 | * struct pisp_be_dpc_config - PiSP Back End DPC config |
| | 121 | * |
| | 122 | * Defective Pixel Correction configuration |
| | 123 | * |
| | 124 | * @coeff_level: Coefficient for the darkest neighbouring pixel value |
| | 125 | * @coeff_range: Coefficient for the range of pixels for this Bayer channel |
| | 126 | * @pad: Padding byte |
| | 127 | * @flags: DPC configuration flags |
| | 128 | */ |
| | 129 | struct pisp_be_dpc_config { |
| | 130 | __u8 coeff_level; |
| | 131 | __u8 coeff_range; |
| | 132 | __u8 pad; |
| | 133 | #define PISP_BE_DPC_FLAG_FOLDBACK 1 |
| | 134 | __u8 flags; |
| | 135 | } __attribute__((packed)); |
| | 136 | |
| | 137 | /** |
| | 138 | * struct pisp_be_geq_config - PiSP Back End GEQ config |
| | 139 | * |
| | 140 | * Green Equalisation configuration |
| | 141 | * |
| | 142 | * @offset: Offset value for threshold calculation |
| | 143 | * @slope_sharper: Slope/Sharper configuration |
| | 144 | * @min: Minimum value the threshold may have |
| | 145 | * @max: Maximum value the threshold may have |
| | 146 | */ |
| | 147 | struct pisp_be_geq_config { |
| | 148 | __u16 offset; |
| | 149 | #define PISP_BE_GEQ_SHARPER (1U << 15) |
| | 150 | #define PISP_BE_GEQ_SLOPE ((1 << 10) - 1) |
| | 151 | /* top bit is the "sharper" flag, slope value is bottom 10 bits */ |
| | 152 | __u16 slope_sharper; |
| | 153 | __u16 min; |
| | 154 | __u16 max; |
| | 155 | } __attribute__((packed)); |
| | 156 | |
| | 157 | /** |
| | 158 | * struct pisp_be_tdn_input_buffer_config - PiSP Back End TDN input buffer |
| | 159 | * @addr: TDN input buffer address |
| | 160 | */ |
| | 161 | struct pisp_be_tdn_input_buffer_config { |
| | 162 | /* low 32 bits followed by high 32 bits */ |
| | 163 | __u32 addr[2]; |
| | 164 | } __attribute__((packed)); |
| | 165 | |
| | 166 | /** |
| | 167 | * struct pisp_be_tdn_config - PiSP Back End TDN config |
| | 168 | * |
| | 169 | * Temporal Denoise configuration |
| | 170 | * |
| | 171 | * @black_level: Black level value subtracted from pixels |
| | 172 | * @ratio: Multiplier for the LTA input frame |
| | 173 | * @noise_constant: Constant offset value used in noise estimation |
| | 174 | * @noise_slope: Noise estimation multiplier |
| | 175 | * @threshold: Threshold for TDN operations |
| | 176 | * @reset: Disable TDN operations |
| | 177 | * @pad: Padding byte |
| | 178 | */ |
| | 179 | struct pisp_be_tdn_config { |
| | 180 | __u16 black_level; |
| | 181 | __u16 ratio; |
| | 182 | __u16 noise_constant; |
| | 183 | __u16 noise_slope; |
| | 184 | __u16 threshold; |
| | 185 | __u8 reset; |
| | 186 | __u8 pad; |
| | 187 | } __attribute__((packed)); |
| | 188 | |
| | 189 | /** |
| | 190 | * struct pisp_be_tdn_output_buffer_config - PiSP Back End TDN output buffer |
| | 191 | * @addr: TDN output buffer address |
| | 192 | */ |
| | 193 | struct pisp_be_tdn_output_buffer_config { |
| | 194 | /* low 32 bits followed by high 32 bits */ |
| | 195 | __u32 addr[2]; |
| | 196 | } __attribute__((packed)); |
| | 197 | |
| | 198 | /** |
| | 199 | * struct pisp_be_sdn_config - PiSP Back End SDN config |
| | 200 | * |
| | 201 | * Spatial Denoise configuration |
| | 202 | * |
| | 203 | * @black_level: Black level subtracted from pixel for noise estimation |
| | 204 | * @leakage: Proportion of the original undenoised value to mix in |
| | 205 | * denoised output |
| | 206 | * @pad: Padding byte |
| | 207 | * @noise_constant: Noise constant used for noise estimation |
| | 208 | * @noise_slope: Noise slope value used for noise estimation |
| | 209 | * @noise_constant2: Second noise constant used for noise estimation |
| | 210 | * @noise_slope2: Second slope value used for noise estimation |
| | 211 | */ |
| | 212 | struct pisp_be_sdn_config { |
| | 213 | __u16 black_level; |
| | 214 | __u8 leakage; |
| | 215 | __u8 pad; |
| | 216 | __u16 noise_constant; |
| | 217 | __u16 noise_slope; |
| | 218 | __u16 noise_constant2; |
| | 219 | __u16 noise_slope2; |
| | 220 | } __attribute__((packed)); |
| | 221 | |
| | 222 | /** |
| | 223 | * struct pisp_be_stitch_input_buffer_config - PiSP Back End Stitch input |
| | 224 | * @addr: Stitch input buffer address |
| | 225 | */ |
| | 226 | struct pisp_be_stitch_input_buffer_config { |
| | 227 | /* low 32 bits followed by high 32 bits */ |
| | 228 | __u32 addr[2]; |
| | 229 | } __attribute__((packed)); |
| | 230 | |
| | 231 | #define PISP_BE_STITCH_STREAMING_LONG 0x8000 |
| | 232 | #define PISP_BE_STITCH_EXPOSURE_RATIO_MASK 0x7fff |
| | 233 | |
| | 234 | /** |
| | 235 | * struct pisp_be_stitch_config - PiSP Back End Stitch config |
| | 236 | * |
| | 237 | * Stitch block configuration |
| | 238 | * |
| | 239 | * @threshold_lo: Low threshold value |
| | 240 | * @threshold_diff_power: Low and high threshold difference |
| | 241 | * @pad: Padding bytes |
| | 242 | * @exposure_ratio: Multiplier to convert long exposure pixels into |
| | 243 | * short exposure pixels |
| | 244 | * @motion_threshold_256: Motion threshold above which short exposure |
| | 245 | * pixels are used |
| | 246 | * @motion_threshold_recip: Reciprocal of motion_threshold_256 value |
| | 247 | */ |
| | 248 | struct pisp_be_stitch_config { |
| | 249 | __u16 threshold_lo; |
| | 250 | __u8 threshold_diff_power; |
| | 251 | __u8 pad; |
| | 252 | |
| | 253 | /* top bit indicates whether streaming input is the long exposure */ |
| | 254 | __u16 exposure_ratio; |
| | 255 | |
| | 256 | __u8 motion_threshold_256; |
| | 257 | __u8 motion_threshold_recip; |
| | 258 | } __attribute__((packed)); |
| | 259 | |
| | 260 | /** |
| | 261 | * struct pisp_be_stitch_output_buffer_config - PiSP Back End Stitch output |
| | 262 | * @addr: Stitch input buffer address |
| | 263 | */ |
| | 264 | struct pisp_be_stitch_output_buffer_config { |
| | 265 | /* low 32 bits followed by high 32 bits */ |
| | 266 | __u32 addr[2]; |
| | 267 | } __attribute__((packed)); |
| | 268 | |
| | 269 | /** |
| | 270 | * struct pisp_be_cdn_config - PiSP Back End CDN config |
| | 271 | * |
| | 272 | * Colour Denoise configuration |
| | 273 | * |
| | 274 | * @thresh: Constant for noise estimation |
| | 275 | * @iir_strength: Relative strength of the IIR part of the filter |
| | 276 | * @g_adjust: Proportion of the change assigned to the G channel |
| | 277 | */ |
| | 278 | struct pisp_be_cdn_config { |
| | 279 | __u16 thresh; |
| | 280 | __u8 iir_strength; |
| | 281 | __u8 g_adjust; |
| | 282 | } __attribute__((packed)); |
| | 283 | |
| | 284 | #define PISP_BE_LSC_LOG_GRID_SIZE 5 |
| | 285 | #define PISP_BE_LSC_GRID_SIZE (1 << PISP_BE_LSC_LOG_GRID_SIZE) |
| | 286 | #define PISP_BE_LSC_STEP_PRECISION 18 |
| | 287 | |
| | 288 | /** |
| | 289 | * struct pisp_be_lsc_config - PiSP Back End LSC config |
| | 290 | * |
| | 291 | * Lens Shading Correction configuration |
| | 292 | * |
| | 293 | * @grid_step_x: Reciprocal of cell size width |
| | 294 | * @grid_step_y: Reciprocal of cell size height |
| | 295 | * @lut_packed: Jointly-coded RGB gains for each LSC grid |
| | 296 | */ |
| | 297 | struct pisp_be_lsc_config { |
| | 298 | /* (1<<18) / grid_cell_width */ |
| | 299 | __u16 grid_step_x; |
| | 300 | /* (1<<18) / grid_cell_height */ |
| | 301 | __u16 grid_step_y; |
| | 302 | /* RGB gains jointly encoded in 32 bits */ |
| | 303 | #define PISP_BE_LSC_LUT_SIZE (PISP_BE_LSC_GRID_SIZE + 1) |
| | 304 | __u32 lut_packed[PISP_BE_LSC_LUT_SIZE][PISP_BE_LSC_LUT_SIZE]; |
| | 305 | } __attribute__((packed)); |
| | 306 | |
| | 307 | /** |
| | 308 | * struct pisp_be_lsc_extra - PiSP Back End LSC Extra config |
| | 309 | * @offset_x: Horizontal offset into the LSC table of this tile |
| | 310 | * @offset_y: Vertical offset into the LSC table of this tile |
| | 311 | */ |
| | 312 | struct pisp_be_lsc_extra { |
| | 313 | __u16 offset_x; |
| | 314 | __u16 offset_y; |
| | 315 | } __attribute__((packed)); |
| | 316 | |
| | 317 | #define PISP_BE_CAC_LOG_GRID_SIZE 3 |
| | 318 | #define PISP_BE_CAC_GRID_SIZE (1 << PISP_BE_CAC_LOG_GRID_SIZE) |
| | 319 | #define PISP_BE_CAC_STEP_PRECISION 20 |
| | 320 | |
| | 321 | /** |
| | 322 | * struct pisp_be_cac_config - PiSP Back End CAC config |
| | 323 | * |
| | 324 | * Chromatic Aberration Correction config |
| | 325 | * |
| | 326 | * @grid_step_x: Reciprocal of cell size width |
| | 327 | * @grid_step_y: Reciprocal of cell size height |
| | 328 | * @lut: Pixel shift for the CAC grid |
| | 329 | */ |
| | 330 | struct pisp_be_cac_config { |
| | 331 | /* (1<<20) / grid_cell_width */ |
| | 332 | __u16 grid_step_x; |
| | 333 | /* (1<<20) / grid_cell_height */ |
| | 334 | __u16 grid_step_y; |
| | 335 | /* [gridy][gridx][rb][xy] */ |
| | 336 | #define PISP_BE_CAC_LUT_SIZE (PISP_BE_CAC_GRID_SIZE + 1) |
| | 337 | __s8 lut[PISP_BE_CAC_LUT_SIZE][PISP_BE_CAC_LUT_SIZE][2][2]; |
| | 338 | } __attribute__((packed)); |
| | 339 | |
| | 340 | /** |
| | 341 | * struct pisp_be_cac_extra - PiSP Back End CAC extra config |
| | 342 | * @offset_x: Horizontal offset into the CAC table of this tile |
| | 343 | * @offset_y: Horizontal offset into the CAC table of this tile |
| | 344 | */ |
| | 345 | struct pisp_be_cac_extra { |
| | 346 | __u16 offset_x; |
| | 347 | __u16 offset_y; |
| | 348 | } __attribute__((packed)); |
| | 349 | |
| | 350 | #define PISP_BE_DEBIN_NUM_COEFFS 4 |
| | 351 | |
| | 352 | /** |
| | 353 | * struct pisp_be_debin_config - PiSP Back End Debin config |
| | 354 | * |
| | 355 | * Debinning configuration |
| | 356 | * |
| | 357 | * @coeffs: Filter coefficients for debinning |
| | 358 | * @h_enable: Horizontal debinning enable |
| | 359 | * @v_enable: Vertical debinning enable |
| | 360 | * @pad: Padding bytes |
| | 361 | */ |
| | 362 | struct pisp_be_debin_config { |
| | 363 | __s8 coeffs[PISP_BE_DEBIN_NUM_COEFFS]; |
| | 364 | __s8 h_enable; |
| | 365 | __s8 v_enable; |
| | 366 | __s8 pad[2]; |
| | 367 | } __attribute__((packed)); |
| | 368 | |
| | 369 | #define PISP_BE_TONEMAP_LUT_SIZE 64 |
| | 370 | |
| | 371 | /** |
| | 372 | * struct pisp_be_tonemap_config - PiSP Back End Tonemap config |
| | 373 | * |
| | 374 | * Tonemapping configuration |
| | 375 | * |
| | 376 | * @detail_constant: Constant value for threshold calculation |
| | 377 | * @detail_slope: Slope value for threshold calculation |
| | 378 | * @iir_strength: Relative strength of the IIR fiter |
| | 379 | * @strength: Strength factor |
| | 380 | * @lut: Look-up table for tonemap curve |
| | 381 | */ |
| | 382 | struct pisp_be_tonemap_config { |
| | 383 | __u16 detail_constant; |
| | 384 | __u16 detail_slope; |
| | 385 | __u16 iir_strength; |
| | 386 | __u16 strength; |
| | 387 | __u32 lut[PISP_BE_TONEMAP_LUT_SIZE]; |
| | 388 | } __attribute__((packed)); |
| | 389 | |
| | 390 | /** |
| | 391 | * struct pisp_be_demosaic_config - PiSP Back End Demosaic config |
| | 392 | * |
| | 393 | * Demosaic configuration |
| | 394 | * |
| | 395 | * @sharper: Use other Bayer channels to increase sharpness |
| | 396 | * @fc_mode: Built-in false colour suppression mode |
| | 397 | * @pad: Padding bytes |
| | 398 | */ |
| | 399 | struct pisp_be_demosaic_config { |
| | 400 | __u8 sharper; |
| | 401 | __u8 fc_mode; |
| | 402 | __u8 pad[2]; |
| | 403 | } __attribute__((packed)); |
| | 404 | |
| | 405 | /** |
| | 406 | * struct pisp_be_ccm_config - PiSP Back End CCM config |
| | 407 | * |
| | 408 | * Colour Correction Matrix configuration |
| | 409 | * |
| | 410 | * @coeffs: Matrix coefficients |
| | 411 | * @pad: Padding bytes |
| | 412 | * @offsets: Offsets triplet |
| | 413 | */ |
| | 414 | struct pisp_be_ccm_config { |
| | 415 | __s16 coeffs[9]; |
| | 416 | __u8 pad[2]; |
| | 417 | __s32 offsets[3]; |
| | 418 | } __attribute__((packed)); |
| | 419 | |
| | 420 | /** |
| | 421 | * struct pisp_be_sat_control_config - PiSP Back End SAT config |
| | 422 | * |
| | 423 | * Saturation Control configuration |
| | 424 | * |
| | 425 | * @shift_r: Left shift for Red colour channel |
| | 426 | * @shift_g: Left shift for Green colour channel |
| | 427 | * @shift_b: Left shift for Blue colour channel |
| | 428 | * @pad: Padding byte |
| | 429 | */ |
| | 430 | struct pisp_be_sat_control_config { |
| | 431 | __u8 shift_r; |
| | 432 | __u8 shift_g; |
| | 433 | __u8 shift_b; |
| | 434 | __u8 pad; |
| | 435 | } __attribute__((packed)); |
| | 436 | |
| | 437 | /** |
| | 438 | * struct pisp_be_false_colour_config - PiSP Back End False Colour config |
| | 439 | * |
| | 440 | * False Colour configuration |
| | 441 | * |
| | 442 | * @distance: Distance of neighbouring pixels, either 1 or 2 |
| | 443 | * @pad: Padding bytes |
| | 444 | */ |
| | 445 | struct pisp_be_false_colour_config { |
| | 446 | __u8 distance; |
| | 447 | __u8 pad[3]; |
| | 448 | } __attribute__((packed)); |
| | 449 | |
| | 450 | #define PISP_BE_SHARPEN_SIZE 5 |
| | 451 | #define PISP_BE_SHARPEN_FUNC_NUM_POINTS 9 |
| | 452 | |
| | 453 | /** |
| | 454 | * struct pisp_be_sharpen_config - PiSP Back End Sharpening config |
| | 455 | * |
| | 456 | * Sharpening configuration |
| | 457 | * |
| | 458 | * @kernel0: Coefficient for filter 0 |
| | 459 | * @pad0: Padding byte |
| | 460 | * @kernel1: Coefficient for filter 1 |
| | 461 | * @pad1: Padding byte |
| | 462 | * @kernel2: Coefficient for filter 2 |
| | 463 | * @pad2: Padding byte |
| | 464 | * @kernel3: Coefficient for filter 3 |
| | 465 | * @pad3: Padding byte |
| | 466 | * @kernel4: Coefficient for filter 4 |
| | 467 | * @pad4: Padding byte |
| | 468 | * @threshold_offset0: Offset for filter 0 response calculation |
| | 469 | * @threshold_slope0: Slope multiplier for the filter 0 response calculation |
| | 470 | * @scale0: Scale factor for filter 0 response calculation |
| | 471 | * @pad5: Padding byte |
| | 472 | * @threshold_offset1: Offset for filter 0 response calculation |
| | 473 | * @threshold_slope1: Slope multiplier for the filter 0 response calculation |
| | 474 | * @scale1: Scale factor for filter 0 response calculation |
| | 475 | * @pad6: Padding byte |
| | 476 | * @threshold_offset2: Offset for filter 0 response calculation |
| | 477 | * @threshold_slope2: Slope multiplier for the filter 0 response calculation |
| | 478 | * @scale2: Scale factor for filter 0 response calculation |
| | 479 | * @pad7: Padding byte |
| | 480 | * @threshold_offset3: Offset for filter 0 response calculation |
| | 481 | * @threshold_slope3: Slope multiplier for the filter 0 response calculation |
| | 482 | * @scale3: Scale factor for filter 0 response calculation |
| | 483 | * @pad8: Padding byte |
| | 484 | * @threshold_offset4: Offset for filter 0 response calculation |
| | 485 | * @threshold_slope4: Slope multiplier for the filter 0 response calculation |
| | 486 | * @scale4: Scale factor for filter 0 response calculation |
| | 487 | * @pad9: Padding byte |
| | 488 | * @positive_strength: Factor to scale the positive sharpening strength |
| | 489 | * @positive_pre_limit: Maximum allowed possible positive sharpening value |
| | 490 | * @positive_func: Gain factor applied to positive sharpening response |
| | 491 | * @positive_limit: Final gain factor applied to positive sharpening |
| | 492 | * @negative_strength: Factor to scale the negative sharpening strength |
| | 493 | * @negative_pre_limit: Maximum allowed possible negative sharpening value |
| | 494 | * @negative_func: Gain factor applied to negative sharpening response |
| | 495 | * @negative_limit: Final gain factor applied to negative sharpening |
| | 496 | * @enables: Filter enable mask |
| | 497 | * @white: White output pixel filter mask |
| | 498 | * @black: Black output pixel filter mask |
| | 499 | * @grey: Grey output pixel filter mask |
| | 500 | */ |
| | 501 | struct pisp_be_sharpen_config { |
| | 502 | __s8 kernel0[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; |
| | 503 | __s8 pad0[3]; |
| | 504 | __s8 kernel1[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; |
| | 505 | __s8 pad1[3]; |
| | 506 | __s8 kernel2[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; |
| | 507 | __s8 pad2[3]; |
| | 508 | __s8 kernel3[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; |
| | 509 | __s8 pad3[3]; |
| | 510 | __s8 kernel4[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE]; |
| | 511 | __s8 pad4[3]; |
| | 512 | __u16 threshold_offset0; |
| | 513 | __u16 threshold_slope0; |
| | 514 | __u16 scale0; |
| | 515 | __u16 pad5; |
| | 516 | __u16 threshold_offset1; |
| | 517 | __u16 threshold_slope1; |
| | 518 | __u16 scale1; |
| | 519 | __u16 pad6; |
| | 520 | __u16 threshold_offset2; |
| | 521 | __u16 threshold_slope2; |
| | 522 | __u16 scale2; |
| | 523 | __u16 pad7; |
| | 524 | __u16 threshold_offset3; |
| | 525 | __u16 threshold_slope3; |
| | 526 | __u16 scale3; |
| | 527 | __u16 pad8; |
| | 528 | __u16 threshold_offset4; |
| | 529 | __u16 threshold_slope4; |
| | 530 | __u16 scale4; |
| | 531 | __u16 pad9; |
| | 532 | __u16 positive_strength; |
| | 533 | __u16 positive_pre_limit; |
| | 534 | __u16 positive_func[PISP_BE_SHARPEN_FUNC_NUM_POINTS]; |
| | 535 | __u16 positive_limit; |
| | 536 | __u16 negative_strength; |
| | 537 | __u16 negative_pre_limit; |
| | 538 | __u16 negative_func[PISP_BE_SHARPEN_FUNC_NUM_POINTS]; |
| | 539 | __u16 negative_limit; |
| | 540 | __u8 enables; |
| | 541 | __u8 white; |
| | 542 | __u8 black; |
| | 543 | __u8 grey; |
| | 544 | } __attribute__((packed)); |
| | 545 | |
| | 546 | /** |
| | 547 | * struct pisp_be_sh_fc_combine_config - PiSP Back End Sharpening and |
| | 548 | * False Colour config |
| | 549 | * |
| | 550 | * Sharpening and False Colour configuration |
| | 551 | * |
| | 552 | * @y_factor: Control amount of desaturation of pixels being darkened |
| | 553 | * @c1_factor: Control amount of brightening of a pixel for the Cb |
| | 554 | * channel |
| | 555 | * @c2_factor: Control amount of brightening of a pixel for the Cr |
| | 556 | * channel |
| | 557 | * @pad: Padding byte |
| | 558 | */ |
| | 559 | struct pisp_be_sh_fc_combine_config { |
| | 560 | __u8 y_factor; |
| | 561 | __u8 c1_factor; |
| | 562 | __u8 c2_factor; |
| | 563 | __u8 pad; |
| | 564 | } __attribute__((packed)); |
| | 565 | |
| | 566 | #define PISP_BE_GAMMA_LUT_SIZE 64 |
| | 567 | |
| | 568 | /** |
| | 569 | * struct pisp_be_gamma_config - PiSP Back End Gamma configuration |
| | 570 | * @lut: Gamma curve look-up table |
| | 571 | */ |
| | 572 | struct pisp_be_gamma_config { |
| | 573 | __u32 lut[PISP_BE_GAMMA_LUT_SIZE]; |
| | 574 | } __attribute__((packed)); |
| | 575 | |
| | 576 | /** |
| | 577 | * struct pisp_be_crop_config - PiSP Back End Crop config |
| | 578 | * |
| | 579 | * Crop configuration |
| | 580 | * |
| | 581 | * @offset_x: Number of pixels cropped from the left of the tile |
| | 582 | * @offset_y: Number of pixels cropped from the top of the tile |
| | 583 | * @width: Width of the cropped tile output |
| | 584 | * @height: Height of the cropped tile output |
| | 585 | */ |
| | 586 | struct pisp_be_crop_config { |
| | 587 | __u16 offset_x, offset_y; |
| | 588 | __u16 width, height; |
| | 589 | } __attribute__((packed)); |
| | 590 | |
| | 591 | #define PISP_BE_RESAMPLE_FILTER_SIZE 96 |
| | 592 | |
| | 593 | /** |
| | 594 | * struct pisp_be_resample_config - PiSP Back End Resampling config |
| | 595 | * |
| | 596 | * Resample configuration |
| | 597 | * |
| | 598 | * @scale_factor_h: Horizontal scale factor |
| | 599 | * @scale_factor_v: Vertical scale factor |
| | 600 | * @coef: Resample coefficients |
| | 601 | */ |
| | 602 | struct pisp_be_resample_config { |
| | 603 | __u16 scale_factor_h, scale_factor_v; |
| | 604 | __s16 coef[PISP_BE_RESAMPLE_FILTER_SIZE]; |
| | 605 | } __attribute__((packed)); |
| | 606 | |
| | 607 | /** |
| | 608 | * struct pisp_be_resample_extra - PiSP Back End Resample config |
| | 609 | * |
| | 610 | * Resample configuration |
| | 611 | * |
| | 612 | * @scaled_width: Width in pixels of the scaled output |
| | 613 | * @scaled_height: Height in pixels of the scaled output |
| | 614 | * @initial_phase_h: Initial horizontal phase |
| | 615 | * @initial_phase_v: Initial vertical phase |
| | 616 | */ |
| | 617 | struct pisp_be_resample_extra { |
| | 618 | __u16 scaled_width; |
| | 619 | __u16 scaled_height; |
| | 620 | __s16 initial_phase_h[3]; |
| | 621 | __s16 initial_phase_v[3]; |
| | 622 | } __attribute__((packed)); |
| | 623 | |
| | 624 | /** |
| | 625 | * struct pisp_be_downscale_config - PiSP Back End Downscale config |
| | 626 | * |
| | 627 | * Downscale configuration |
| | 628 | * |
| | 629 | * @scale_factor_h: Horizontal scale factor |
| | 630 | * @scale_factor_v: Vertical scale factor |
| | 631 | * @scale_recip_h: Horizontal reciprocal factor |
| | 632 | * @scale_recip_v: Vertical reciprocal factor |
| | 633 | */ |
| | 634 | struct pisp_be_downscale_config { |
| | 635 | __u16 scale_factor_h; |
| | 636 | __u16 scale_factor_v; |
| | 637 | __u16 scale_recip_h; |
| | 638 | __u16 scale_recip_v; |
| | 639 | } __attribute__((packed)); |
| | 640 | |
| | 641 | /** |
| | 642 | * struct pisp_be_downscale_extra - PiSP Back End Downscale Extra config |
| | 643 | * @scaled_width: Scaled image width |
| | 644 | * @scaled_height: Scaled image height |
| | 645 | */ |
| | 646 | struct pisp_be_downscale_extra { |
| | 647 | __u16 scaled_width; |
| | 648 | __u16 scaled_height; |
| | 649 | } __attribute__((packed)); |
| | 650 | |
| | 651 | /** |
| | 652 | * struct pisp_be_hog_config - PiSP Back End HOG config |
| | 653 | * |
| | 654 | * Histogram of Oriented Gradients configuration |
| | 655 | * |
| | 656 | * @compute_signed: Set 0 for unsigned gradients, 1 for signed |
| | 657 | * @channel_mix: Channels proportions to use |
| | 658 | * @stride: Stride in bytes between blocks directly below |
| | 659 | */ |
| | 660 | struct pisp_be_hog_config { |
| | 661 | __u8 compute_signed; |
| | 662 | __u8 channel_mix[3]; |
| | 663 | __u32 stride; |
| | 664 | } __attribute__((packed)); |
| | 665 | |
| | 666 | struct pisp_be_axi_config { |
| | 667 | __u8 r_qos; /* Read QoS */ |
| | 668 | __u8 r_cache_prot; /* Read { prot[2:0], cache[3:0] } */ |
| | 669 | __u8 w_qos; /* Write QoS */ |
| | 670 | __u8 w_cache_prot; /* Write { prot[2:0], cache[3:0] } */ |
| | 671 | } __attribute__((packed)); |
| | 672 | |
| | 673 | /** |
| | 674 | * enum pisp_be_transform - PiSP Back End Transform flags |
| | 675 | * @PISP_BE_TRANSFORM_NONE: No transform |
| | 676 | * @PISP_BE_TRANSFORM_HFLIP: Horizontal flip |
| | 677 | * @PISP_BE_TRANSFORM_VFLIP: Vertical flip |
| | 678 | * @PISP_BE_TRANSFORM_ROT180: 180 degress rotation |
| | 679 | */ |
| | 680 | enum pisp_be_transform { |
| | 681 | PISP_BE_TRANSFORM_NONE = 0x0, |
| | 682 | PISP_BE_TRANSFORM_HFLIP = 0x1, |
| | 683 | PISP_BE_TRANSFORM_VFLIP = 0x2, |
| | 684 | PISP_BE_TRANSFORM_ROT180 = |
| | 685 | (PISP_BE_TRANSFORM_HFLIP | PISP_BE_TRANSFORM_VFLIP) |
| | 686 | }; |
| | 687 | |
| | 688 | struct pisp_be_output_format_config { |
| | 689 | struct pisp_image_format_config image; |
| | 690 | __u8 transform; |
| | 691 | __u8 pad[3]; |
| | 692 | __u16 lo; |
| | 693 | __u16 hi; |
| | 694 | __u16 lo2; |
| | 695 | __u16 hi2; |
| | 696 | } __attribute__((packed)); |
| | 697 | |
| | 698 | /** |
| | 699 | * struct pisp_be_output_buffer_config - PiSP Back End Output buffer |
| | 700 | * @addr: Output buffer address |
| | 701 | */ |
| | 702 | struct pisp_be_output_buffer_config { |
| | 703 | /* low 32 bits followed by high 32 bits (for each of 3 planes) */ |
| | 704 | __u32 addr[3][2]; |
| | 705 | } __attribute__((packed)); |
| | 706 | |
| | 707 | /** |
| | 708 | * struct pisp_be_hog_buffer_config - PiSP Back End HOG buffer |
| | 709 | * @addr: HOG buffer address |
| | 710 | */ |
| | 711 | struct pisp_be_hog_buffer_config { |
| | 712 | /* low 32 bits followed by high 32 bits */ |
| | 713 | __u32 addr[2]; |
| | 714 | } __attribute__((packed)); |
| | 715 | |
| | 716 | /** |
| | 717 | * struct pisp_be_config - RaspberryPi PiSP Back End Processing configuration |
| | 718 | * |
| | 719 | * @input_buffer: Input buffer addresses |
| | 720 | * @tdn_input_buffer: TDN input buffer addresses |
| | 721 | * @stitch_input_buffer: Stitch input buffer addresses |
| | 722 | * @tdn_output_buffer: TDN output buffer addresses |
| | 723 | * @stitch_output_buffer: Stitch output buffer addresses |
| | 724 | * @output_buffer: Output buffers addresses |
| | 725 | * @hog_buffer: HOG buffer addresses |
| | 726 | * @global: Global PiSP configuration |
| | 727 | * @input_format: Input image format |
| | 728 | * @decompress: Decompress configuration |
| | 729 | * @dpc: Defective Pixel Correction configuration |
| | 730 | * @geq: Green Equalisation configuration |
| | 731 | * @tdn_input_format: Temporal Denoise input format |
| | 732 | * @tdn_decompress: Temporal Denoise decompress configuration |
| | 733 | * @tdn: Temporal Denoise configuration |
| | 734 | * @tdn_compress: Temporal Denoise compress configuration |
| | 735 | * @tdn_output_format: Temporal Denoise output format |
| | 736 | * @sdn: Spatial Denoise configuration |
| | 737 | * @blc: Black Level Correction configuration |
| | 738 | * @stitch_compress: Stitch compress configuration |
| | 739 | * @stitch_output_format: Stitch output format |
| | 740 | * @stitch_input_format: Stitch input format |
| | 741 | * @stitch_decompress: Stitch decompress configuration |
| | 742 | * @stitch: Stitch configuration |
| | 743 | * @lsc: Lens Shading Correction configuration |
| | 744 | * @wbg: White Balance Gain configuration |
| | 745 | * @cdn: Colour Denoise configuration |
| | 746 | * @cac: Colour Aberration Correction configuration |
| | 747 | * @debin: Debinning configuration |
| | 748 | * @tonemap: Tonemapping configuration |
| | 749 | * @demosaic: Demosaicing configuration |
| | 750 | * @ccm: Colour Correction Matrix configuration |
| | 751 | * @sat_control: Saturation Control configuration |
| | 752 | * @ycbcr: YCbCr colour correction configuration |
| | 753 | * @sharpen: Sharpening configuration |
| | 754 | * @false_colour: False colour correction |
| | 755 | * @sh_fc_combine: Sharpening and False Colour correction |
| | 756 | * @ycbcr_inverse: Inverse YCbCr colour correction |
| | 757 | * @gamma: Gamma curve configuration |
| | 758 | * @csc: Color Space Conversion configuration |
| | 759 | * @downscale: Downscale configuration |
| | 760 | * @resample: Resampling configuration |
| | 761 | * @output_format: Output format configuration |
| | 762 | * @hog: HOG configuration |
| | 763 | * @axi: AXI bus configuration |
| | 764 | * @lsc_extra: LSC extra info |
| | 765 | * @cac_extra: CAC extra info |
| | 766 | * @downscale_extra: Downscaler extra info |
| | 767 | * @resample_extra: Resample extra info |
| | 768 | * @crop: Crop configuration |
| | 769 | * @hog_format: HOG format info |
| | 770 | * @dirty_flags_bayer: Bayer enable dirty flags |
| | 771 | * (:c:type:`pisp_be_bayer_enable`) |
| | 772 | * @dirty_flags_rgb: RGB enable dirty flags |
| | 773 | * (:c:type:`pisp_be_rgb_enable`) |
| | 774 | * @dirty_flags_extra: Extra dirty flags |
| | 775 | */ |
| | 776 | struct pisp_be_config { |
| | 777 | /* I/O configuration: */ |
| | 778 | struct pisp_be_input_buffer_config input_buffer; |
| | 779 | struct pisp_be_tdn_input_buffer_config tdn_input_buffer; |
| | 780 | struct pisp_be_stitch_input_buffer_config stitch_input_buffer; |
| | 781 | struct pisp_be_tdn_output_buffer_config tdn_output_buffer; |
| | 782 | struct pisp_be_stitch_output_buffer_config stitch_output_buffer; |
| | 783 | struct pisp_be_output_buffer_config |
| | 784 | output_buffer[PISP_BACK_END_NUM_OUTPUTS]; |
| | 785 | struct pisp_be_hog_buffer_config hog_buffer; |
| | 786 | /* Processing configuration: */ |
| | 787 | struct pisp_be_global_config global; |
| | 788 | struct pisp_image_format_config input_format; |
| | 789 | struct pisp_decompress_config decompress; |
| | 790 | struct pisp_be_dpc_config dpc; |
| | 791 | struct pisp_be_geq_config geq; |
| | 792 | struct pisp_image_format_config tdn_input_format; |
| | 793 | struct pisp_decompress_config tdn_decompress; |
| | 794 | struct pisp_be_tdn_config tdn; |
| | 795 | struct pisp_compress_config tdn_compress; |
| | 796 | struct pisp_image_format_config tdn_output_format; |
| | 797 | struct pisp_be_sdn_config sdn; |
| | 798 | struct pisp_bla_config blc; |
| | 799 | struct pisp_compress_config stitch_compress; |
| | 800 | struct pisp_image_format_config stitch_output_format; |
| | 801 | struct pisp_image_format_config stitch_input_format; |
| | 802 | struct pisp_decompress_config stitch_decompress; |
| | 803 | struct pisp_be_stitch_config stitch; |
| | 804 | struct pisp_be_lsc_config lsc; |
| | 805 | struct pisp_wbg_config wbg; |
| | 806 | struct pisp_be_cdn_config cdn; |
| | 807 | struct pisp_be_cac_config cac; |
| | 808 | struct pisp_be_debin_config debin; |
| | 809 | struct pisp_be_tonemap_config tonemap; |
| | 810 | struct pisp_be_demosaic_config demosaic; |
| | 811 | struct pisp_be_ccm_config ccm; |
| | 812 | struct pisp_be_sat_control_config sat_control; |
| | 813 | struct pisp_be_ccm_config ycbcr; |
| | 814 | struct pisp_be_sharpen_config sharpen; |
| | 815 | struct pisp_be_false_colour_config false_colour; |
| | 816 | struct pisp_be_sh_fc_combine_config sh_fc_combine; |
| | 817 | struct pisp_be_ccm_config ycbcr_inverse; |
| | 818 | struct pisp_be_gamma_config gamma; |
| | 819 | struct pisp_be_ccm_config csc[PISP_BACK_END_NUM_OUTPUTS]; |
| | 820 | struct pisp_be_downscale_config downscale[PISP_BACK_END_NUM_OUTPUTS]; |
| | 821 | struct pisp_be_resample_config resample[PISP_BACK_END_NUM_OUTPUTS]; |
| | 822 | struct pisp_be_output_format_config |
| | 823 | output_format[PISP_BACK_END_NUM_OUTPUTS]; |
| | 824 | struct pisp_be_hog_config hog; |
| | 825 | struct pisp_be_axi_config axi; |
| | 826 | /* Non-register fields: */ |
| | 827 | struct pisp_be_lsc_extra lsc_extra; |
| | 828 | struct pisp_be_cac_extra cac_extra; |
| | 829 | struct pisp_be_downscale_extra |
| | 830 | downscale_extra[PISP_BACK_END_NUM_OUTPUTS]; |
| | 831 | struct pisp_be_resample_extra resample_extra[PISP_BACK_END_NUM_OUTPUTS]; |
| | 832 | struct pisp_be_crop_config crop; |
| | 833 | struct pisp_image_format_config hog_format; |
| | 834 | __u32 dirty_flags_bayer; /* these use pisp_be_bayer_enable */ |
| | 835 | __u32 dirty_flags_rgb; /* use pisp_be_rgb_enable */ |
| | 836 | __u32 dirty_flags_extra; /* these use pisp_be_dirty_t */ |
| | 837 | } __attribute__((packed)); |
| | 838 | |
| | 839 | /** |
| | 840 | * enum pisp_tile_edge - PiSP Back End Tile position |
| | 841 | * @PISP_LEFT_EDGE: Left edge tile |
| | 842 | * @PISP_RIGHT_EDGE: Right edge tile |
| | 843 | * @PISP_TOP_EDGE: Top edge tile |
| | 844 | * @PISP_BOTTOM_EDGE: Bottom edge tile |
| | 845 | */ |
| | 846 | enum pisp_tile_edge { |
| | 847 | PISP_LEFT_EDGE = (1 << 0), |
| | 848 | PISP_RIGHT_EDGE = (1 << 1), |
| | 849 | PISP_TOP_EDGE = (1 << 2), |
| | 850 | PISP_BOTTOM_EDGE = (1 << 3) |
| | 851 | }; |
| | 852 | |
| | 853 | /** |
| | 854 | * struct pisp_tile - Raspberry Pi PiSP Back End tile configuration |
| | 855 | * |
| | 856 | * Tile parameters: each set of tile parameters is a 160-bytes block of data |
| | 857 | * which contains the tile processing parameters. |
| | 858 | * |
| | 859 | * @edge: Edge tile flag |
| | 860 | * @pad0: Padding bytes |
| | 861 | * @input_addr_offset: Top-left pixel offset, in bytes |
| | 862 | * @input_addr_offset2: Top-left pixel offset, in bytes for the second/ |
| | 863 | * third image planes |
| | 864 | * @input_offset_x: Horizontal offset in pixels of this tile in the |
| | 865 | * input image |
| | 866 | * @input_offset_y: Vertical offset in pixels of this tile in the |
| | 867 | * input image |
| | 868 | * @input_width: Width in pixels of this tile |
| | 869 | * @input_height: Height in pixels of the this tile |
| | 870 | * @tdn_input_addr_offset: TDN input image offset, in bytes |
| | 871 | * @tdn_output_addr_offset: TDN output image offset, in bytes |
| | 872 | * @stitch_input_addr_offset: Stitch input image offset, in bytes |
| | 873 | * @stitch_output_addr_offset: Stitch output image offset, in bytes |
| | 874 | * @lsc_grid_offset_x: Horizontal offset in the LSC table for this tile |
| | 875 | * @lsc_grid_offset_y: Vertical offset in the LSC table for this tile |
| | 876 | * @cac_grid_offset_x: Horizontal offset in the CAC table for this tile |
| | 877 | * @cac_grid_offset_y: Horizontal offset in the CAC table for this tile |
| | 878 | * @crop_x_start: Number of pixels cropped from the left of the |
| | 879 | * tile |
| | 880 | * @crop_x_end: Number of pixels cropped from the right of the |
| | 881 | * tile |
| | 882 | * @crop_y_start: Number of pixels cropped from the top of the |
| | 883 | * tile |
| | 884 | * @crop_y_end: Number of pixels cropped from the bottom of the |
| | 885 | * tile |
| | 886 | * @downscale_phase_x: Initial horizontal phase in pixels |
| | 887 | * @downscale_phase_y: Initial vertical phase in pixels |
| | 888 | * @resample_in_width: Width in pixels of the tile entering the |
| | 889 | * Resample block |
| | 890 | * @resample_in_height: Height in pixels of the tile entering the |
| | 891 | * Resample block |
| | 892 | * @resample_phase_x: Initial horizontal phase for the Resample block |
| | 893 | * @resample_phase_y: Initial vertical phase for the Resample block |
| | 894 | * @output_offset_x: Horizontal offset in pixels where the tile will |
| | 895 | * be written into the output image |
| | 896 | * @output_offset_y: Vertical offset in pixels where the tile will be |
| | 897 | * written into the output image |
| | 898 | * @output_width: Width in pixels in the output image of this tile |
| | 899 | * @output_height: Height in pixels in the output image of this tile |
| | 900 | * @output_addr_offset: Offset in bytes into the output buffer |
| | 901 | * @output_addr_offset2: Offset in bytes into the output buffer for the |
| | 902 | * second and third plane |
| | 903 | * @output_hog_addr_offset: Offset in bytes into the HOG buffer where |
| | 904 | * results of this tile are to be written |
| | 905 | */ |
| | 906 | struct pisp_tile { |
| | 907 | __u8 edge; /* enum pisp_tile_edge */ |
| | 908 | __u8 pad0[3]; |
| | 909 | /* 4 bytes */ |
| | 910 | __u32 input_addr_offset; |
| | 911 | __u32 input_addr_offset2; |
| | 912 | __u16 input_offset_x; |
| | 913 | __u16 input_offset_y; |
| | 914 | __u16 input_width; |
| | 915 | __u16 input_height; |
| | 916 | /* 20 bytes */ |
| | 917 | __u32 tdn_input_addr_offset; |
| | 918 | __u32 tdn_output_addr_offset; |
| | 919 | __u32 stitch_input_addr_offset; |
| | 920 | __u32 stitch_output_addr_offset; |
| | 921 | /* 36 bytes */ |
| | 922 | __u32 lsc_grid_offset_x; |
| | 923 | __u32 lsc_grid_offset_y; |
| | 924 | /* 44 bytes */ |
| | 925 | __u32 cac_grid_offset_x; |
| | 926 | __u32 cac_grid_offset_y; |
| | 927 | /* 52 bytes */ |
| | 928 | __u16 crop_x_start[PISP_BACK_END_NUM_OUTPUTS]; |
| | 929 | __u16 crop_x_end[PISP_BACK_END_NUM_OUTPUTS]; |
| | 930 | __u16 crop_y_start[PISP_BACK_END_NUM_OUTPUTS]; |
| | 931 | __u16 crop_y_end[PISP_BACK_END_NUM_OUTPUTS]; |
| | 932 | /* 68 bytes */ |
| | 933 | /* Ordering is planes then branches */ |
| | 934 | __u16 downscale_phase_x[3 * PISP_BACK_END_NUM_OUTPUTS]; |
| | 935 | __u16 downscale_phase_y[3 * PISP_BACK_END_NUM_OUTPUTS]; |
| | 936 | /* 92 bytes */ |
| | 937 | __u16 resample_in_width[PISP_BACK_END_NUM_OUTPUTS]; |
| | 938 | __u16 resample_in_height[PISP_BACK_END_NUM_OUTPUTS]; |
| | 939 | /* 100 bytes */ |
| | 940 | /* Ordering is planes then branches */ |
| | 941 | __u16 resample_phase_x[3 * PISP_BACK_END_NUM_OUTPUTS]; |
| | 942 | __u16 resample_phase_y[3 * PISP_BACK_END_NUM_OUTPUTS]; |
| | 943 | /* 124 bytes */ |
| | 944 | __u16 output_offset_x[PISP_BACK_END_NUM_OUTPUTS]; |
| | 945 | __u16 output_offset_y[PISP_BACK_END_NUM_OUTPUTS]; |
| | 946 | __u16 output_width[PISP_BACK_END_NUM_OUTPUTS]; |
| | 947 | __u16 output_height[PISP_BACK_END_NUM_OUTPUTS]; |
| | 948 | /* 140 bytes */ |
| | 949 | __u32 output_addr_offset[PISP_BACK_END_NUM_OUTPUTS]; |
| | 950 | __u32 output_addr_offset2[PISP_BACK_END_NUM_OUTPUTS]; |
| | 951 | /* 156 bytes */ |
| | 952 | __u32 output_hog_addr_offset; |
| | 953 | /* 160 bytes */ |
| | 954 | } __attribute__((packed)); |
| | 955 | |
| | 956 | /** |
| | 957 | * struct pisp_be_tiles_config - Raspberry Pi PiSP Back End configuration |
| | 958 | * @tiles: Tile descriptors |
| | 959 | * @num_tiles: Number of tiles |
| | 960 | * @config: PiSP Back End configuration |
| | 961 | */ |
| | 962 | struct pisp_be_tiles_config { |
| | 963 | struct pisp_be_config config; |
| | 964 | struct pisp_tile tiles[PISP_BACK_END_NUM_TILES]; |
| | 965 | __u32 num_tiles; |
| | 966 | } __attribute__((packed)); |
| | 967 | |
| | 968 | #endif /* _UAPI_PISP_BE_CONFIG_H_ */ |