Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note *//* * RP1 PiSP common definitions. * * Copyright (C) 2021 - Raspberry Pi Ltd. * */#ifndef _UAPI_PISP_COMMON_H_#define _UAPI_PISP_COMMON_H_
#include <linux/types.h>
struct pisp_image_format_config { /* size in pixels */ __u16 width; __u16 height; /* must match struct pisp_image_format below */ __u32 format; __s32 stride; /* some planar image formats will need a second stride */ __s32 stride2;} __attribute__((packed));
enum pisp_bayer_order { /* * Note how bayer_order&1 tells you if G is on the even pixels of the * checkerboard or not, and bayer_order&2 tells you if R is on the even * rows or is swapped with B. Note that if the top (of the 8) bits is * set, this denotes a monochrome or greyscale image, and the lower bits * should all be ignored. */ PISP_BAYER_ORDER_RGGB = 0, PISP_BAYER_ORDER_GBRG = 1, PISP_BAYER_ORDER_BGGR = 2, PISP_BAYER_ORDER_GRBG = 3, PISP_BAYER_ORDER_GREYSCALE = 128};
enum pisp_image_format { /* * Precise values are mostly tbd. Generally these will be portmanteau * values comprising bit fields and flags. This format must be shared * throughout the PiSP. */ PISP_IMAGE_FORMAT_BPS_8 = 0x00000000, PISP_IMAGE_FORMAT_BPS_10 = 0x00000001, PISP_IMAGE_FORMAT_BPS_12 = 0x00000002, PISP_IMAGE_FORMAT_BPS_16 = 0x00000003, PISP_IMAGE_FORMAT_BPS_MASK = 0x00000003,
PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED = 0x00000000, PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR = 0x00000010, PISP_IMAGE_FORMAT_PLANARITY_PLANAR = 0x00000020, PISP_IMAGE_FORMAT_PLANARITY_MASK = 0x00000030,
PISP_IMAGE_FORMAT_SAMPLING_444 = 0x00000000, PISP_IMAGE_FORMAT_SAMPLING_422 = 0x00000100, PISP_IMAGE_FORMAT_SAMPLING_420 = 0x00000200, PISP_IMAGE_FORMAT_SAMPLING_MASK = 0x00000300,
PISP_IMAGE_FORMAT_ORDER_NORMAL = 0x00000000, PISP_IMAGE_FORMAT_ORDER_SWAPPED = 0x00001000,
PISP_IMAGE_FORMAT_SHIFT_0 = 0x00000000, PISP_IMAGE_FORMAT_SHIFT_1 = 0x00010000, PISP_IMAGE_FORMAT_SHIFT_2 = 0x00020000, PISP_IMAGE_FORMAT_SHIFT_3 = 0x00030000, PISP_IMAGE_FORMAT_SHIFT_4 = 0x00040000, PISP_IMAGE_FORMAT_SHIFT_5 = 0x00050000, PISP_IMAGE_FORMAT_SHIFT_6 = 0x00060000, PISP_IMAGE_FORMAT_SHIFT_7 = 0x00070000, PISP_IMAGE_FORMAT_SHIFT_8 = 0x00080000, PISP_IMAGE_FORMAT_SHIFT_MASK = 0x000f0000,
PISP_IMAGE_FORMAT_BPP_32 = 0x00100000,
PISP_IMAGE_FORMAT_UNCOMPRESSED = 0x00000000, PISP_IMAGE_FORMAT_COMPRESSION_MODE_1 = 0x01000000, PISP_IMAGE_FORMAT_COMPRESSION_MODE_2 = 0x02000000, PISP_IMAGE_FORMAT_COMPRESSION_MODE_3 = 0x03000000, PISP_IMAGE_FORMAT_COMPRESSION_MASK = 0x03000000,
PISP_IMAGE_FORMAT_HOG_SIGNED = 0x04000000, PISP_IMAGE_FORMAT_HOG_UNSIGNED = 0x08000000, PISP_IMAGE_FORMAT_INTEGRAL_IMAGE = 0x10000000, PISP_IMAGE_FORMAT_WALLPAPER_ROLL = 0x20000000, PISP_IMAGE_FORMAT_THREE_CHANNEL = 0x40000000,
/* Lastly a few specific instantiations of the above. */ PISP_IMAGE_FORMAT_SINGLE_16 = PISP_IMAGE_FORMAT_BPS_16, PISP_IMAGE_FORMAT_THREE_16 = PISP_IMAGE_FORMAT_BPS_16 | PISP_IMAGE_FORMAT_THREE_CHANNEL};
#define PISP_IMAGE_FORMAT_BPS_8(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_8)#define PISP_IMAGE_FORMAT_BPS_10(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_10)#define PISP_IMAGE_FORMAT_BPS_12(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_12)#define PISP_IMAGE_FORMAT_BPS_16(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_16)#define PISP_IMAGE_FORMAT_BPS(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) ? \ 8 + (2 << (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) - 1)) : 8)#define PISP_IMAGE_FORMAT_SHIFT(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_SHIFT_MASK) / PISP_IMAGE_FORMAT_SHIFT_1)#define PISP_IMAGE_FORMAT_THREE_CHANNEL(fmt) \ ((fmt) & PISP_IMAGE_FORMAT_THREE_CHANNEL)#define PISP_IMAGE_FORMAT_SINGLE_CHANNEL(fmt) \ (!((fmt) & PISP_IMAGE_FORMAT_THREE_CHANNEL))#define PISP_IMAGE_FORMAT_COMPRESSED(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_COMPRESSION_MASK) != \ PISP_IMAGE_FORMAT_UNCOMPRESSED)#define PISP_IMAGE_FORMAT_SAMPLING_444(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) == \ PISP_IMAGE_FORMAT_SAMPLING_444)#define PISP_IMAGE_FORMAT_SAMPLING_422(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) == \ PISP_IMAGE_FORMAT_SAMPLING_422)#define PISP_IMAGE_FORMAT_SAMPLING_420(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) == \ PISP_IMAGE_FORMAT_SAMPLING_420)#define PISP_IMAGE_FORMAT_ORDER_NORMAL(fmt) \ (!((fmt) & PISP_IMAGE_FORMAT_ORDER_SWAPPED))#define PISP_IMAGE_FORMAT_ORDER_SWAPPED(fmt) \ ((fmt) & PISP_IMAGE_FORMAT_ORDER_SWAPPED)#define PISP_IMAGE_FORMAT_INTERLEAVED(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) == \ PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED)#define PISP_IMAGE_FORMAT_SEMIPLANAR(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) == \ PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR)#define PISP_IMAGE_FORMAT_PLANAR(fmt) \ (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) == \ PISP_IMAGE_FORMAT_PLANARITY_PLANAR)#define PISP_IMAGE_FORMAT_WALLPAPER(fmt) \ ((fmt) & PISP_IMAGE_FORMAT_WALLPAPER_ROLL)#define PISP_IMAGE_FORMAT_BPP_32(fmt) ((fmt) & PISP_IMAGE_FORMAT_BPP_32)#define PISP_IMAGE_FORMAT_HOG(fmt) \ ((fmt) & \ (PISP_IMAGE_FORMAT_HOG_SIGNED | PISP_IMAGE_FORMAT_HOG_UNSIGNED))
#define PISP_WALLPAPER_WIDTH 128 /* in bytes */
struct pisp_bla_config { __u16 black_level_r; __u16 black_level_gr; __u16 black_level_gb; __u16 black_level_b; __u16 output_black_level; __u8 pad[2];} __attribute__((packed));
struct pisp_wbg_config { __u16 gain_r; __u16 gain_g; __u16 gain_b; __u8 pad[2];} __attribute__((packed));
struct pisp_compress_config { /* value subtracted from incoming data */ __u16 offset; __u8 pad; /* 1 => Companding; 2 => Delta (recommended); 3 => Combined (for HDR) */ __u8 mode;} __attribute__((packed));
struct pisp_decompress_config { /* value added to reconstructed data */ __u16 offset; __u8 pad; /* 1 => Companding; 2 => Delta (recommended); 3 => Combined (for HDR) */ __u8 mode;} __attribute__((packed));
enum pisp_axi_flags { /* * round down bursts to end at a 32-byte boundary, to align following * bursts */ PISP_AXI_FLAG_ALIGN = 128, /* for FE writer: force WSTRB high, to pad output to 16-byte boundary */ PISP_AXI_FLAG_PAD = 64, /* for FE writer: Use Output FIFO level to trigger "panic" */ PISP_AXI_FLAG_PANIC = 32,};
struct pisp_axi_config { /* * burst length minus one, which must be in the range 0:15; OR'd with * flags */ __u8 maxlen_flags; /* { prot[2:0], cache[3:0] } fields, echoed on AXI bus */ __u8 cache_prot; /* QoS field(s) (4x4 bits for FE writer; 4 bits for other masters) */ __u16 qos;} __attribute__((packed));
#endif /* _UAPI_PISP_COMMON_H_ */