~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/uapi/linux/media/raspberrypi/pisp_be_config.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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_ */
969 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php