logo

oasis-root

Compiled tree of Oasis Linux based on own branch at <https://hacktivis.me/git/oasis/> git clone https://anongit.hacktivis.me/git/oasis-root.git

pisp_common.h (7740B)


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