disp_svp.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. /**
  2. * NOTICE:
  3. * MUST BE consistent with bionic/libc/kernel/common/linux/disp_svp.h
  4. */
  5. #ifndef __DISP_SVP_H
  6. #define __DISP_SVP_H
  7. #define DISP_NO_ION_FD ((int)(~0U>>1))
  8. #define DISP_NO_USE_LAEYR_ID ((int)(~0U>>1))
  9. #define MAX_INPUT_CONFIG 4
  10. #define MAKE_DISP_FORMAT_ID(id, bpp) (((id) << 8) | (bpp))
  11. /* /============================================================================= */
  12. /* structure declarations */
  13. /* /=========================== */
  14. typedef enum {
  15. DISP_IF_TYPE_DBI = 0,
  16. DISP_IF_TYPE_DPI,
  17. DISP_IF_TYPE_DSI0,
  18. DISP_IF_TYPE_DSI1,
  19. DISP_IF_TYPE_DSIDUAL,
  20. DISP_IF_HDMI = 7,
  21. DISP_IF_HDMI_SMARTBOOK,
  22. DISP_IF_MHL,
  23. DISP_IF_EPD
  24. } DISP_IF_TYPE;
  25. typedef enum {
  26. DISP_IF_FORMAT_RGB565 = 0,
  27. DISP_IF_FORMAT_RGB666,
  28. DISP_IF_FORMAT_RGB888
  29. } DISP_IF_FORMAT;
  30. typedef enum {
  31. DISP_IF_MODE_VIDEO = 0,
  32. DISP_IF_MODE_COMMAND
  33. } DISP_IF_MODE;
  34. typedef enum {
  35. DISP_ORIENTATION_0 = 0,
  36. DISP_ORIENTATION_90 = 1,
  37. DISP_ORIENTATION_180 = 2,
  38. DISP_ORIENTATION_270 = 3,
  39. } DISP_ORIENTATION;
  40. typedef enum {
  41. DISP_FORMAT_UNKNOWN = 0,
  42. DISP_FORMAT_RGB565 = MAKE_DISP_FORMAT_ID(1, 2),
  43. DISP_FORMAT_RGB888 = MAKE_DISP_FORMAT_ID(2, 3),
  44. DISP_FORMAT_BGR888 = MAKE_DISP_FORMAT_ID(3, 3),
  45. DISP_FORMAT_ARGB8888 = MAKE_DISP_FORMAT_ID(4, 4),
  46. DISP_FORMAT_ABGR8888 = MAKE_DISP_FORMAT_ID(5, 4),
  47. DISP_FORMAT_RGBA8888 = MAKE_DISP_FORMAT_ID(6, 4),
  48. DISP_FORMAT_BGRA8888 = MAKE_DISP_FORMAT_ID(7, 4),
  49. DISP_FORMAT_XRGB8888 = MAKE_DISP_FORMAT_ID(8, 4),
  50. DISP_FORMAT_XBGR8888 = MAKE_DISP_FORMAT_ID(9, 4),
  51. /* Packed YUV Formats */
  52. DISP_FORMAT_YUV444 = MAKE_DISP_FORMAT_ID(10, 3),
  53. DISP_FORMAT_YVYU = MAKE_DISP_FORMAT_ID(11, 2), /* Same as UYVY, but replace Y/U/V */
  54. DISP_FORMAT_VYUY = MAKE_DISP_FORMAT_ID(12, 2),
  55. DISP_FORMAT_UYVY = MAKE_DISP_FORMAT_ID(13, 2),
  56. DISP_FORMAT_Y422 = MAKE_DISP_FORMAT_ID(13, 2),
  57. DISP_FORMAT_YUYV = MAKE_DISP_FORMAT_ID(14, 2), /* Same as UYVY but replace U/V */
  58. DISP_FORMAT_YUY2 = MAKE_DISP_FORMAT_ID(14, 2),
  59. DISP_FORMAT_YUV422 = MAKE_DISP_FORMAT_ID(14, 2), /* Will be removed */
  60. DISP_FORMAT_GREY = MAKE_DISP_FORMAT_ID(15, 1), /* Single Y plane */
  61. DISP_FORMAT_Y800 = MAKE_DISP_FORMAT_ID(15, 1),
  62. DISP_FORMAT_Y8 = MAKE_DISP_FORMAT_ID(15, 1),
  63. /* Planar YUV Formats */
  64. DISP_FORMAT_YV12 = MAKE_DISP_FORMAT_ID(16, 1), /* BPP = 1.5 */
  65. DISP_FORMAT_I420 = MAKE_DISP_FORMAT_ID(17, 1), /* Same as YV12 but replace U/V */
  66. DISP_FORMAT_IYUV = MAKE_DISP_FORMAT_ID(17, 1),
  67. DISP_FORMAT_NV12 = MAKE_DISP_FORMAT_ID(18, 1), /* BPP = 1.5 */
  68. DISP_FORMAT_NV21 = MAKE_DISP_FORMAT_ID(19, 1), /* Same as NV12 but replace U/V */
  69. DISP_FORMAT_BPP_MASK = 0xFFFF,
  70. } DISP_FORMAT;
  71. typedef enum {
  72. DISP_LAYER_2D = 0,
  73. DISP_LAYER_3D_SBS_0 = 0x1,
  74. DISP_LAYER_3D_SBS_90 = 0x2,
  75. DISP_LAYER_3D_SBS_180 = 0x3,
  76. DISP_LAYER_3D_SBS_270 = 0x4,
  77. DISP_LAYER_3D_TAB_0 = 0x10,
  78. DISP_LAYER_3D_TAB_90 = 0x20,
  79. DISP_LAYER_3D_TAB_180 = 0x30,
  80. DISP_LAYER_3D_TAB_270 = 0x40,
  81. } DISP_LAYER_TYPE;
  82. typedef enum {
  83. /* normal memory */
  84. DISP_NORMAL_BUFFER = 0,
  85. /* secure memory */
  86. DISP_SECURE_BUFFER = 1,
  87. /* normal memory but should not be dumpped within screenshot */
  88. DISP_PROTECT_BUFFER = 2,
  89. DISP_SECURE_BUFFER_SHIFT = 0x10001
  90. } DISP_BUFFER_TYPE;
  91. typedef enum {
  92. DISP_ALPHA_ONE = 0,
  93. DISP_ALPHA_SRC = 1,
  94. DISP_ALPHA_SRC_INVERT = 2,
  95. DISP_ALPHA_INVALID = 3,
  96. } DISP_ALPHA_TYPE;
  97. typedef enum {
  98. DISP_SESSION_PRIMARY = 1,
  99. DISP_SESSION_EXTERNAL = 2,
  100. DISP_SESSION_MEMORY = 3
  101. } DISP_SESSION_TYPE;
  102. typedef enum {
  103. /* single output */
  104. DISP_SESSION_DIRECT_LINK_MODE = 1,
  105. DISP_SESSION_DECOUPLE_MODE = 2,
  106. /* two ouputs */
  107. DISP_SESSION_DIRECT_LINK_MIRROR_MODE = 3,
  108. DISP_SESSION_DECOUPLE_MIRROR_MODE = 4,
  109. } DISP_MODE;
  110. typedef enum {
  111. TRIGGER_NORMAL,
  112. TRIGGER_SUSPEND,
  113. TRIGGER_RESUME,
  114. TRIGGER_MODE_MAX_NUM
  115. } EXTD_TRIGGER_MODE;
  116. typedef struct disp_session_config_t {
  117. DISP_SESSION_TYPE type;
  118. unsigned int device_id;
  119. DISP_MODE mode;
  120. unsigned int session_id;
  121. EXTD_TRIGGER_MODE tigger_mode;
  122. } disp_session_config;
  123. typedef struct {
  124. unsigned int session_id;
  125. unsigned int vsync_cnt;
  126. long int vsync_ts;
  127. } disp_session_vsync_config;
  128. typedef struct disp_input_config_t {
  129. unsigned int layer_id;
  130. unsigned int layer_enable;
  131. void *src_base_addr;
  132. void *src_phy_addr;
  133. unsigned int src_direct_link;
  134. DISP_FORMAT src_fmt;
  135. unsigned int src_use_color_key;
  136. unsigned int src_color_key;
  137. unsigned int src_pitch;
  138. unsigned int src_offset_x, src_offset_y;
  139. unsigned int src_width, src_height;
  140. unsigned int tgt_offset_x, tgt_offset_y;
  141. unsigned int tgt_width, tgt_height;
  142. DISP_ORIENTATION layer_rotation;
  143. DISP_LAYER_TYPE layer_type;
  144. DISP_ORIENTATION video_rotation;
  145. unsigned int isTdshp; /* set to 1, will go through tdshp first, then layer blending, then to color */
  146. unsigned int next_buff_idx;
  147. int identity;
  148. int connected_type;
  149. DISP_BUFFER_TYPE security;
  150. unsigned int alpha_enable;
  151. unsigned int alpha;
  152. unsigned int sur_aen;
  153. DISP_ALPHA_TYPE src_alpha;
  154. DISP_ALPHA_TYPE dst_alpha;
  155. } disp_input_config;
  156. typedef struct disp_output_config_t {
  157. unsigned int va;
  158. unsigned int pa;
  159. DISP_FORMAT fmt;
  160. unsigned int x;
  161. unsigned int y;
  162. unsigned int width;
  163. unsigned int height;
  164. unsigned int pitch;
  165. unsigned int pitchUV;
  166. DISP_BUFFER_TYPE security;
  167. unsigned int buff_idx;
  168. } disp_output_config;
  169. #define MAX_INPUT_CONFIG 4
  170. typedef struct disp_session_input_config_t {
  171. unsigned int session_id;
  172. unsigned int config_layer_num;
  173. disp_input_config config[MAX_INPUT_CONFIG];
  174. } disp_session_input_config;
  175. typedef struct disp_session_output_config_t {
  176. unsigned int session_id;
  177. disp_output_config config;
  178. } disp_session_output_config;
  179. typedef struct disp_session_layer_num_config_t {
  180. unsigned int session_id;
  181. unsigned int max_layer_num;
  182. } disp_session_layer_num_config;
  183. typedef struct disp_session_info_t {
  184. unsigned int session_id;
  185. unsigned int maxLayerNum;
  186. unsigned int isHwVsyncAvailable;
  187. DISP_IF_TYPE displayType;
  188. unsigned int displayWidth;
  189. unsigned int displayHeight;
  190. unsigned int displayFormat;
  191. DISP_IF_MODE displayMode;
  192. unsigned int vsyncFPS;
  193. unsigned int physicalWidth;
  194. unsigned int physicalHeight;
  195. unsigned int isConnected;
  196. } disp_session_info;
  197. typedef struct disp_buffer_info_t {
  198. /* Session */
  199. unsigned int session_id;
  200. /* Input */
  201. unsigned int layer_id;
  202. unsigned int layer_en;
  203. int ion_fd;
  204. unsigned int cache_sync;
  205. /* Output */
  206. unsigned int index;
  207. int fence_fd;
  208. } disp_buffer_info;
  209. /* IOCTL commands. */
  210. #define DISP_IOW(num, dtype) _IOW('O', num, dtype)
  211. #define DISP_IOR(num, dtype) _IOR('O', num, dtype)
  212. #define DISP_IOWR(num, dtype) _IOWR('O', num, dtype)
  213. #define DISP_IO(num) _IO('O', num)
  214. #define DISP_IOCTL_CREATE_SESSION DISP_IOW(201, disp_session_config)
  215. #define DISP_IOCTL_DESTROY_SESSION DISP_IOW(202, disp_session_config)
  216. #define DISP_IOCTL_TRIGGER_SESSION DISP_IOW(203, disp_session_config)
  217. #define DISP_IOCTL_PREPARE_INPUT_BUFFER DISP_IOW(204, disp_buffer_info)
  218. #define DISP_IOCTL_PREPARE_OUTPUT_BUFFER DISP_IOW(205, disp_buffer_info)
  219. #define DISP_IOCTL_SET_INPUT_BUFFER DISP_IOW(206, disp_session_input_config)
  220. #define DISP_IOCTL_SET_OUTPUT_BUFFER DISP_IOW(207, disp_session_output_config)
  221. #define DISP_IOCTL_GET_SESSION_INFO DISP_IOW(208, disp_session_info)
  222. #define DISP_IOCTL_SET_SESSION_MODE DISP_IOW(209, disp_session_config)
  223. #define DISP_IOCTL_GET_SESSION_MODE DISP_IOW(210, disp_session_config)
  224. #define DISP_IOCTL_SET_SESSION_TYPE DISP_IOW(211, disp_session_config)
  225. #define DISP_IOCTL_GET_SESSION_TYPE DISP_IOW(212, disp_session_config)
  226. #define DISP_IOCTL_WAIT_FOR_VSYNC DISP_IOW(213, disp_session_vsync_config)
  227. #define DISP_IOCTL_SET_MAX_LAYER_NUM DISP_IOW(214, disp_session_layer_num_config)
  228. #endif /* __DISP_SVP_H */