drivers: media: pisp_be: pisp_fe: Update UAPI header licenses
[platform/kernel/linux-rpi.git] / drivers / media / platform / raspberrypi / rp1_cfe / pisp_types.h
1 /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
2 /*
3  * RP1 PiSP Front End image definitions.
4  *
5  * Copyright (C) 2021 - Raspberry Pi Ltd.
6  *
7  */
8 #ifndef _PISP_FE_TYPES_H_
9 #define _PISP_FE_TYPES_H_
10
11 /* This definition must match the format description in the hardware exactly! */
12 struct pisp_image_format_config {
13         /* size in pixels */
14         u16 width, height;
15         /* must match struct pisp_image_format below */
16         u32 format;
17         s32 stride;
18         /* some planar image formats will need a second stride */
19         s32 stride2;
20 };
21
22 static_assert(sizeof(struct pisp_image_format_config) == 16);
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_UNCOMPRESSED = 0x00000000,
76         PISP_IMAGE_FORMAT_COMPRESSION_MODE_1 = 0x01000000,
77         PISP_IMAGE_FORMAT_COMPRESSION_MODE_2 = 0x02000000,
78         PISP_IMAGE_FORMAT_COMPRESSION_MODE_3 = 0x03000000,
79         PISP_IMAGE_FORMAT_COMPRESSION_MASK = 0x03000000,
80
81         PISP_IMAGE_FORMAT_HOG_SIGNED = 0x04000000,
82         PISP_IMAGE_FORMAT_HOG_UNSIGNED = 0x08000000,
83         PISP_IMAGE_FORMAT_INTEGRAL_IMAGE = 0x10000000,
84         PISP_IMAGE_FORMAT_WALLPAPER_ROLL = 0x20000000,
85         PISP_IMAGE_FORMAT_THREE_CHANNEL = 0x40000000,
86
87         /* Lastly a few specific instantiations of the above. */
88         PISP_IMAGE_FORMAT_SINGLE_16 = PISP_IMAGE_FORMAT_BPS_16,
89         PISP_IMAGE_FORMAT_THREE_16 =
90                 PISP_IMAGE_FORMAT_BPS_16 | PISP_IMAGE_FORMAT_THREE_CHANNEL
91 };
92
93 #define PISP_IMAGE_FORMAT_bps_8(fmt)                                           \
94         (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_8)
95 #define PISP_IMAGE_FORMAT_bps_10(fmt)                                          \
96         (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_10)
97 #define PISP_IMAGE_FORMAT_bps_12(fmt)                                          \
98         (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_12)
99 #define PISP_IMAGE_FORMAT_bps_16(fmt)                                          \
100         (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) == PISP_IMAGE_FORMAT_BPS_16)
101 #define PISP_IMAGE_FORMAT_bps(fmt)                                             \
102         (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) ?                                \
103                        8 + (2 << (((fmt) & PISP_IMAGE_FORMAT_BPS_MASK) - 1)) : \
104                        8)
105 #define PISP_IMAGE_FORMAT_shift(fmt)                                           \
106         (((fmt) & PISP_IMAGE_FORMAT_SHIFT_MASK) / PISP_IMAGE_FORMAT_SHIFT_1)
107 #define PISP_IMAGE_FORMAT_three_channel(fmt)                                   \
108         ((fmt) & PISP_IMAGE_FORMAT_THREE_CHANNEL)
109 #define PISP_IMAGE_FORMAT_single_channel(fmt)                                  \
110         (!((fmt) & PISP_IMAGE_FORMAT_THREE_CHANNEL))
111 #define PISP_IMAGE_FORMAT_compressed(fmt)                                      \
112         (((fmt) & PISP_IMAGE_FORMAT_COMPRESSION_MASK) !=                       \
113          PISP_IMAGE_FORMAT_UNCOMPRESSED)
114 #define PISP_IMAGE_FORMAT_sampling_444(fmt)                                    \
115         (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) ==                          \
116          PISP_IMAGE_FORMAT_SAMPLING_444)
117 #define PISP_IMAGE_FORMAT_sampling_422(fmt)                                    \
118         (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) ==                          \
119          PISP_IMAGE_FORMAT_SAMPLING_422)
120 #define PISP_IMAGE_FORMAT_sampling_420(fmt)                                    \
121         (((fmt) & PISP_IMAGE_FORMAT_SAMPLING_MASK) ==                          \
122          PISP_IMAGE_FORMAT_SAMPLING_420)
123 #define PISP_IMAGE_FORMAT_order_normal(fmt)                                    \
124         (!((fmt) & PISP_IMAGE_FORMAT_ORDER_SWAPPED))
125 #define PISP_IMAGE_FORMAT_order_swapped(fmt)                                   \
126         ((fmt) & PISP_IMAGE_FORMAT_ORDER_SWAPPED)
127 #define PISP_IMAGE_FORMAT_interleaved(fmt)                                     \
128         (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) ==                         \
129          PISP_IMAGE_FORMAT_PLANARITY_INTERLEAVED)
130 #define PISP_IMAGE_FORMAT_semiplanar(fmt)                                      \
131         (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) ==                         \
132          PISP_IMAGE_FORMAT_PLANARITY_SEMI_PLANAR)
133 #define PISP_IMAGE_FORMAT_planar(fmt)                                          \
134         (((fmt) & PISP_IMAGE_FORMAT_PLANARITY_MASK) ==                         \
135          PISP_IMAGE_FORMAT_PLANARITY_PLANAR)
136 #define PISP_IMAGE_FORMAT_wallpaper(fmt)                                       \
137         ((fmt) & PISP_IMAGE_FORMAT_WALLPAPER_ROLL)
138 #define PISP_IMAGE_FORMAT_HOG(fmt)                                             \
139         ((fmt) &                                                               \
140          (PISP_IMAGE_FORMAT_HOG_SIGNED | PISP_IMAGE_FORMAT_HOG_UNSIGNED))
141
142 #define PISP_WALLPAPER_WIDTH 128 // in bytes
143
144 #endif /* _PISP_FE_TYPES_H_ */