zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

pisp_common.h (7739B) - Raw


      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 _PISP_COMMON_H_
      9 #define _PISP_COMMON_H_
     10 
     11 #include <linux/types.h>
     12 
     13 struct 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 
     24 enum pisp_bayer_order {
     25 	/*
     26 	 * Note how bayer_order&1 tells you if G is on the even pixels of the
     27 	 * checkerboard or not, and bayer_order&2 tells you if R is on the even
     28 	 * rows or is swapped with B. Note that if the top (of the 8) bits is
     29 	 * set, this denotes a monochrome or greyscale image, and the lower bits
     30 	 * 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 = 128
     37 };
     38 
     39 enum pisp_image_format {
     40 	/*
     41 	 * Precise values are mostly tbd. Generally these will be portmanteau
     42 	 * values comprising bit fields and flags. This format must be shared
     43 	 * 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_CHANNEL
     93 };
     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 
    146 struct 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 
    155 struct pisp_wbg_config {
    156 	__u16 gain_r;
    157 	__u16 gain_g;
    158 	__u16 gain_b;
    159 	__u8 pad[2];
    160 } __attribute__((packed));
    161 
    162 struct 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 
    170 struct 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 
    178 enum pisp_axi_flags {
    179 	/*
    180 	 * round down bursts to end at a 32-byte boundary, to align following
    181 	 * bursts
    182 	 */
    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 
    190 struct pisp_axi_config {
    191 	/*
    192 	 * burst length minus one, which must be in the range 0:15; OR'd with
    193 	 * flags
    194 	 */
    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 /* _PISP_COMMON_H_ */