203 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */2/*3 * RP1 PiSP common definitions.4 *5 * Copyright (C) 2021 - Raspberry Pi Ltd.6 *7 */8#ifndef _UAPI_PISP_COMMON_H_9#define _UAPI_PISP_COMMON_H_10 11#include <linux/types.h>12 13struct pisp_image_format_config {14 /* size in pixels */15 __u16 width;16 __u16 height;17 /* must match struct pisp_image_format below */18 __u32 format;19 __s32 stride;20 /* some planar image formats will need a second stride */21 __s32 stride2;22} __attribute__((packed));23 24enum pisp_bayer_order {25 /*26 * Note how bayer_order&1 tells you if G is on the even pixels of the27 * checkerboard or not, and bayer_order&2 tells you if R is on the even28 * rows or is swapped with B. Note that if the top (of the 8) bits is29 * set, this denotes a monochrome or greyscale image, and the lower bits30 * should all be ignored.31 */32 PISP_BAYER_ORDER_RGGB = 0,33 PISP_BAYER_ORDER_GBRG = 1,34 PISP_BAYER_ORDER_BGGR = 2,35 PISP_BAYER_ORDER_GRBG = 3,36 PISP_BAYER_ORDER_GREYSCALE = 12837};38 39enum pisp_image_format {40 /*41 * Precise values are mostly tbd. Generally these will be portmanteau42 * values comprising bit fields and flags. This format must be shared43 * throughout the PiSP.44 */45 PISP_IMAGE_FORMAT_BPS_8 = 0x00000000,46 PISP_IMAGE_FORMAT_BPS_10 = 0x00000001,47 PISP_IMAGE_FORMAT_BPS_12 = 0x00000002,48 PISP_IMAGE_FORMAT_BPS_16 = 0x00000003,49 PISP_IMAGE_FORMAT_BPS_MASK = 0x00000003,50 51 PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED = 0x00000000,52 PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR = 0x00000010,53 PISP_IMAGE_FORMAT_PLANARITY_PLANAR = 0x00000020,54 PISP_IMAGE_FORMAT_PLANARITY_MASK = 0x00000030,55 56 PISP_IMAGE_FORMAT_SAMPLING_444 = 0x00000000,57 PISP_IMAGE_FORMAT_SAMPLING_422 = 0x00000100,58 PISP_IMAGE_FORMAT_SAMPLING_420 = 0x00000200,59 PISP_IMAGE_FORMAT_SAMPLING_MASK = 0x00000300,60 61 PISP_IMAGE_FORMAT_ORDER_NORMAL = 0x00000000,62 PISP_IMAGE_FORMAT_ORDER_SWAPPED = 0x00001000,63 64 PISP_IMAGE_FORMAT_SHIFT_0 = 0x00000000,65 PISP_IMAGE_FORMAT_SHIFT_1 = 0x00010000,66 PISP_IMAGE_FORMAT_SHIFT_2 = 0x00020000,67 PISP_IMAGE_FORMAT_SHIFT_3 = 0x00030000,68 PISP_IMAGE_FORMAT_SHIFT_4 = 0x00040000,69 PISP_IMAGE_FORMAT_SHIFT_5 = 0x00050000,70 PISP_IMAGE_FORMAT_SHIFT_6 = 0x00060000,71 PISP_IMAGE_FORMAT_SHIFT_7 = 0x00070000,72 PISP_IMAGE_FORMAT_SHIFT_8 = 0x00080000,73 PISP_IMAGE_FORMAT_SHIFT_MASK = 0x000f0000,74 75 PISP_IMAGE_FORMAT_BPP_32 = 0x00100000,76 77 PISP_IMAGE_FORMAT_UNCOMPRESSED = 0x00000000,78 PISP_IMAGE_FORMAT_COMPRESSION_MODE_1 = 0x01000000,79 PISP_IMAGE_FORMAT_COMPRESSION_MODE_2 = 0x02000000,80 PISP_IMAGE_FORMAT_COMPRESSION_MODE_3 = 0x03000000,81 PISP_IMAGE_FORMAT_COMPRESSION_MASK = 0x03000000,82 83 PISP_IMAGE_FORMAT_HOG_SIGNED = 0x04000000,84 PISP_IMAGE_FORMAT_HOG_UNSIGNED = 0x08000000,85 PISP_IMAGE_FORMAT_INTEGRAL_IMAGE = 0x10000000,86 PISP_IMAGE_FORMAT_WALLPAPER_ROLL = 0x20000000,87 PISP_IMAGE_FORMAT_THREE_CHANNEL = 0x40000000,88 89 /* Lastly a few specific instantiations of the above. */90 PISP_IMAGE_FORMAT_SINGLE_16 = PISP_IMAGE_FORMAT_BPS_16,91 PISP_IMAGE_FORMAT_THREE_16 = PISP_IMAGE_FORMAT_BPS_16 |92 PISP_IMAGE_FORMAT_THREE_CHANNEL93};94 95#define PISP_IMAGE_FORMAT_BPS_8(fmt) \96 (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_8)97#define PISP_IMAGE_FORMAT_BPS_10(fmt) \98 (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_10)99#define PISP_IMAGE_FORMAT_BPS_12(fmt) \100 (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_12)101#define PISP_IMAGE_FORMAT_BPS_16(fmt) \102 (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_16)103#define PISP_IMAGE_FORMAT_BPS(fmt) \104 (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) ? \105 8 + (2 << (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) - 1)) : 8)106#define PISP_IMAGE_FORMAT_SHIFT(fmt) \107 (((fmt) & PISP_IMAGE_FORMAT_SHIFT_MASK) / PISP_IMAGE_FORMAT_SHIFT_1)108#define PISP_IMAGE_FORMAT_THREE_CHANNEL(fmt) \109 ((fmt) & PISP_IMAGE_FORMAT_THREE_CHANNEL)110#define PISP_IMAGE_FORMAT_SINGLE_CHANNEL(fmt) \111 (!((fmt) & PISP_IMAGE_FORMAT_THREE_CHANNEL))112#define PISP_IMAGE_FORMAT_COMPRESSED(fmt) \113 (((fmt) & PISP_IMAGE_FORMAT_COMPRESSION_MASK) != \114 PISP_IMAGE_FORMAT_UNCOMPRESSED)115#define PISP_IMAGE_FORMAT_SAMPLING_444(fmt) \116 (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) == \117 PISP_IMAGE_FORMAT_SAMPLING_444)118#define PISP_IMAGE_FORMAT_SAMPLING_422(fmt) \119 (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) == \120 PISP_IMAGE_FORMAT_SAMPLING_422)121#define PISP_IMAGE_FORMAT_SAMPLING_420(fmt) \122 (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) == \123 PISP_IMAGE_FORMAT_SAMPLING_420)124#define PISP_IMAGE_FORMAT_ORDER_NORMAL(fmt) \125 (!((fmt) & PISP_IMAGE_FORMAT_ORDER_SWAPPED))126#define PISP_IMAGE_FORMAT_ORDER_SWAPPED(fmt) \127 ((fmt) & PISP_IMAGE_FORMAT_ORDER_SWAPPED)128#define PISP_IMAGE_FORMAT_INTERLEAVED(fmt) \129 (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) == \130 PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED)131#define PISP_IMAGE_FORMAT_SEMIPLANAR(fmt) \132 (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) == \133 PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR)134#define PISP_IMAGE_FORMAT_PLANAR(fmt) \135 (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) == \136 PISP_IMAGE_FORMAT_PLANARITY_PLANAR)137#define PISP_IMAGE_FORMAT_WALLPAPER(fmt) \138 ((fmt) & PISP_IMAGE_FORMAT_WALLPAPER_ROLL)139#define PISP_IMAGE_FORMAT_BPP_32(fmt) ((fmt) & PISP_IMAGE_FORMAT_BPP_32)140#define PISP_IMAGE_FORMAT_HOG(fmt) \141 ((fmt) & \142 (PISP_IMAGE_FORMAT_HOG_SIGNED | PISP_IMAGE_FORMAT_HOG_UNSIGNED))143 144#define PISP_WALLPAPER_WIDTH 128 /* in bytes */145 146struct pisp_bla_config {147 __u16 black_level_r;148 __u16 black_level_gr;149 __u16 black_level_gb;150 __u16 black_level_b;151 __u16 output_black_level;152 __u8 pad[2];153} __attribute__((packed));154 155struct pisp_wbg_config {156 __u16 gain_r;157 __u16 gain_g;158 __u16 gain_b;159 __u8 pad[2];160} __attribute__((packed));161 162struct pisp_compress_config {163 /* value subtracted from incoming data */164 __u16 offset;165 __u8 pad;166 /* 1 => Companding; 2 => Delta (recommended); 3 => Combined (for HDR) */167 __u8 mode;168} __attribute__((packed));169 170struct pisp_decompress_config {171 /* value added to reconstructed data */172 __u16 offset;173 __u8 pad;174 /* 1 => Companding; 2 => Delta (recommended); 3 => Combined (for HDR) */175 __u8 mode;176} __attribute__((packed));177 178enum pisp_axi_flags {179 /*180 * round down bursts to end at a 32-byte boundary, to align following181 * bursts182 */183 PISP_AXI_FLAG_ALIGN = 128,184 /* for FE writer: force WSTRB high, to pad output to 16-byte boundary */185 PISP_AXI_FLAG_PAD = 64,186 /* for FE writer: Use Output FIFO level to trigger "panic" */187 PISP_AXI_FLAG_PANIC = 32,188};189 190struct pisp_axi_config {191 /*192 * burst length minus one, which must be in the range 0:15; OR'd with193 * flags194 */195 __u8 maxlen_flags;196 /* { prot[2:0], cache[3:0] } fields, echoed on AXI bus */197 __u8 cache_prot;198 /* QoS field(s) (4x4 bits for FE writer; 4 bits for other masters) */199 __u16 qos;200} __attribute__((packed));201 202#endif /* _UAPI_PISP_COMMON_H_ */203