primary_display.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. #ifndef _PRIMARY_DISPLAY_H_
  2. #define _PRIMARY_DISPLAY_H_
  3. #include "ddp_hal.h"
  4. #include "ddp_manager.h"
  5. #include <linux/types.h>
  6. #include "disp_lcm.h"
  7. #include "disp_session.h"
  8. typedef enum {
  9. DIRECT_LINK_MODE,
  10. DECOUPLE_MODE,
  11. SINGLE_LAYER_MODE,
  12. DEBUG_RDMA1_DSI0_MODE
  13. } DISP_PRIMARY_PATH_MODE;
  14. /* --------------------------------------------------------------------------- */
  15. #define DISP_CHECK_RET(expr) \
  16. do { \
  17. DISP_STATUS ret = (expr); \
  18. if (DISP_STATUS_OK != ret) { \
  19. pr_err("DISP/COMMON " "[ERROR][mtkfb] DISP API return error code: 0x%x\n" \
  20. " file : %s, line : %d\n" \
  21. " expr : %s\n", ret, __FILE__, __LINE__, #expr); \
  22. } \
  23. } while (0)
  24. /* --------------------------------------------------------------------------- */
  25. #define ASSERT_LAYER (DDP_OVL_LAYER_MUN-1)
  26. extern unsigned int FB_LAYER; /* default LCD layer */
  27. #define DISP_DEFAULT_UI_LAYER_ID (DDP_OVL_LAYER_MUN-1)
  28. #define DISP_CHANGED_UI_LAYER_ID (DDP_OVL_LAYER_MUN-2)
  29. extern unsigned int gEnableDSIStateCheck;
  30. extern unsigned int ext_session_id;
  31. extern unsigned int is_hwc_enabled;
  32. #ifdef CONFIG_SINGLE_PANEL_OUTPUT
  33. extern unsigned int g_suspend_flag;
  34. #endif
  35. #ifdef CONFIG_ALL_IN_TRIGGER_STAGE
  36. extern unsigned int is_output_buffer_set;
  37. #endif
  38. typedef struct {
  39. unsigned int id;
  40. unsigned int curr_en;
  41. unsigned int next_en;
  42. unsigned int hw_en;
  43. int curr_idx;
  44. int next_idx;
  45. int hw_idx;
  46. int curr_identity;
  47. int next_identity;
  48. int hw_identity;
  49. int curr_conn_type;
  50. int next_conn_type;
  51. int hw_conn_type;
  52. } DISP_LAYER_INFO;
  53. typedef enum {
  54. DISP_STATUS_OK = 0,
  55. DISP_STATUS_NOT_IMPLEMENTED,
  56. DISP_STATUS_ALREADY_SET,
  57. DISP_STATUS_ERROR,
  58. } DISP_STATUS;
  59. typedef enum {
  60. DISP_STATE_IDLE = 0,
  61. DISP_STATE_BUSY,
  62. } DISP_STATE;
  63. typedef enum {
  64. DISP_OP_PRE = 0,
  65. DISP_OP_NORMAL,
  66. DISP_OP_POST,
  67. } DISP_OP_STATE;
  68. typedef enum {
  69. DISP_ALIVE = 0xf0,
  70. DISP_SLEPT,
  71. DISP_BLANK
  72. } DISP_POWER_STATE;
  73. typedef enum {
  74. FRM_CONFIG = 0,
  75. FRM_TRIGGER,
  76. FRM_START,
  77. FRM_END
  78. } DISP_FRM_SEQ_STATE;
  79. typedef enum {
  80. DISPLAY_HAL_IOCTL_SET_CMDQ = 0xff00,
  81. DISPLAY_HAL_IOCTL_ENABLE_CMDQ,
  82. DISPLAY_HAL_IOCTL_DUMP,
  83. DISPLAY_HAL_IOCTL_PATTERN,
  84. } DISPLAY_HAL_IOCTL;
  85. typedef struct {
  86. unsigned int layer;
  87. unsigned int layer_en;
  88. unsigned int buff_source;
  89. unsigned int fmt;
  90. unsigned long addr;
  91. unsigned long addr_sub_u;
  92. unsigned long addr_sub_v;
  93. unsigned long vaddr;
  94. unsigned int src_x;
  95. unsigned int src_y;
  96. unsigned int src_w;
  97. unsigned int src_h;
  98. unsigned int src_pitch;
  99. unsigned int dst_x;
  100. unsigned int dst_y;
  101. unsigned int dst_w;
  102. unsigned int dst_h; /* clip region */
  103. unsigned int keyEn;
  104. unsigned int key;
  105. unsigned int aen;
  106. unsigned char alpha;
  107. unsigned int sur_aen;
  108. unsigned int src_alpha;
  109. unsigned int dst_alpha;
  110. unsigned int isTdshp;
  111. unsigned int isDirty;
  112. unsigned int buff_idx;
  113. unsigned int identity;
  114. unsigned int connected_type;
  115. DISP_BUFFER_TYPE security;
  116. unsigned int dirty;
  117. unsigned int yuv_range;
  118. } primary_disp_input_config;
  119. typedef struct {
  120. unsigned int fmt;
  121. unsigned long addr;
  122. unsigned long addr_sub_u;
  123. unsigned long addr_sub_v;
  124. unsigned long vaddr;
  125. unsigned int x;
  126. unsigned int y;
  127. unsigned int w;
  128. unsigned int h;
  129. unsigned int pitch;
  130. unsigned int pitchUV;
  131. unsigned int buff_idx;
  132. unsigned int interface_idx;
  133. DISP_BUFFER_TYPE security;
  134. unsigned int dirty;
  135. int mode;
  136. } disp_mem_output_config;
  137. typedef struct {
  138. struct list_head list;
  139. struct ion_handle *handle;
  140. struct sync_fence *pfence;
  141. void *va;
  142. uint32_t fence_id;
  143. uint32_t mva;
  144. uint32_t size;
  145. uint32_t output_fence_id;
  146. uint32_t interface_fence_id;
  147. unsigned long long timestamp;
  148. struct ion_client *client;
  149. } disp_internal_buffer_info;
  150. typedef struct {
  151. unsigned int mva;
  152. unsigned int max_offset;
  153. unsigned int seq;
  154. DISP_FRM_SEQ_STATE state;
  155. } disp_frm_seq_info;
  156. typedef struct {
  157. DISP_POWER_STATE state;
  158. unsigned int lcm_fps;
  159. int max_layer;
  160. int need_trigger_overlay;
  161. int need_trigger_ovl1to2;
  162. int need_trigger_dcMirror_out;
  163. DISP_PRIMARY_PATH_MODE mode;
  164. int session_mode;
  165. unsigned int session_id;
  166. unsigned int last_vsync_tick;
  167. unsigned long framebuffer_mva;
  168. unsigned long framebuffer_va;
  169. struct mutex lock;
  170. struct mutex capture_lock;
  171. struct mutex vsync_lock;
  172. #ifdef DISP_SWITCH_DST_MODE
  173. struct mutex switch_dst_lock;
  174. #endif
  175. struct mutex cmd_lock;
  176. disp_lcm_handle *plcm;
  177. cmdqRecHandle cmdq_handle_config_esd;
  178. cmdqRecHandle cmdq_handle_trigger;
  179. cmdqRecHandle cmdq_handle_config;
  180. disp_path_handle dpmgr_handle;
  181. cmdqRecHandle cmdq_handle_ovl1to2_config;
  182. disp_path_handle ovl2mem_path_handle;
  183. char *mutex_locker;
  184. int vsync_drop;
  185. struct mutex dc_lock;
  186. struct list_head dc_free_list;
  187. struct list_head dc_reading_list;
  188. struct list_head dc_writing_list;
  189. unsigned int dc_buf_id;
  190. unsigned int dc_buf[3];
  191. unsigned int session_buf_id;
  192. unsigned int session_buf[3];
  193. cmdqBackupSlotHandle cur_config_fence;
  194. cmdqBackupSlotHandle subtractor_when_free;
  195. cmdqBackupSlotHandle cur_mem_config_fence;
  196. cmdqBackupSlotHandle mem_subtractor_when_free;
  197. cmdqBackupSlotHandle rdma_buff_info;
  198. cmdqBackupSlotHandle ovl_status_info;
  199. cmdqBackupSlotHandle dsi_state_info;
  200. cmdqBackupSlotHandle rdma_state_info;
  201. #ifdef DISP_DUMP_EVENT_STATUS
  202. cmdqBackupSlotHandle event_status;
  203. #endif
  204. DISP_DC_TYPE dc_type;
  205. unsigned int force_on_wdma_path;
  206. } display_primary_path_context;
  207. struct sec_session_node {
  208. struct list_head link;
  209. unsigned int tgid;
  210. };
  211. typedef int (*PRIMARY_DISPLAY_CALLBACK) (unsigned int user_data);
  212. int primary_display_init(char *lcm_name, unsigned int lcm_fps);
  213. int primary_display_config(unsigned long pa, unsigned long mva);
  214. int primary_display_set_frame_buffer_address(unsigned long va, unsigned long mva);
  215. unsigned long primary_display_get_frame_buffer_mva_address(void);
  216. unsigned long primary_display_get_frame_buffer_va_address(void);
  217. unsigned long get_dim_layer_mva_addr(void);
  218. int is_dim_layer(unsigned int long mva);
  219. int primary_display_suspend(void);
  220. int primary_display_resume(void);
  221. int primary_display_ipoh_restore(void);
  222. int primary_display_ipoh_recover(void);
  223. int primary_display_get_width(void);
  224. int primary_display_get_height(void);
  225. int primary_display_get_bpp(void);
  226. int primary_display_get_dc_bpp(void);
  227. int primary_display_get_pages(void);
  228. int primary_display_set_overlay_layer(primary_disp_input_config *input);
  229. int primary_display_is_alive(void);
  230. int primary_display_is_sleepd(void);
  231. int primary_display_is_sleepd_nolock(void);
  232. int primary_display_wait_for_vsync(void *config);
  233. unsigned int primary_display_get_ticket(void);
  234. int primary_display_config_input(primary_disp_input_config *input);
  235. int primary_display_user_cmd(unsigned int cmd, unsigned long arg);
  236. int primary_display_trigger(int blocking, void *callback, unsigned int userdata);
  237. int primary_display_ext_trigger(int blocking, void *callback, unsigned int userdata);
  238. int primary_display_memory_trigger(int blocking, void *callback, unsigned int userdata);
  239. int primary_display_merge_session_cmd(disp_session_config *config);
  240. int primary_display_config_output(disp_mem_output_config *output, unsigned int session_id);
  241. int primary_display_mem_out_trigger(int blocking, void *callback, unsigned int userdata);
  242. int primary_display_switch_mode(int sess_mode, unsigned int session, int force);
  243. int primary_display_diagnose(void);
  244. int primary_display_get_info(void *info);
  245. int primary_display_capture_framebuffer(unsigned long pbuf);
  246. int primary_display_capture_framebuffer_ovl(unsigned long pbuf, unsigned int format);
  247. uint32_t DISP_GetVRamSizeBoot(char *cmdline);
  248. uint32_t DISP_GetVRamSize(void);
  249. uint32_t DISP_GetFBRamSize(void);
  250. uint32_t DISP_GetPages(void);
  251. uint32_t DISP_GetScreenBpp(void);
  252. uint32_t DISP_GetScreenWidth(void);
  253. uint32_t DISP_GetScreenHeight(void);
  254. uint32_t DISP_GetActiveHeight(void);
  255. uint32_t DISP_GetActiveWidth(void);
  256. int disp_hal_allocate_framebuffer(phys_addr_t pa_start, phys_addr_t pa_end, unsigned long *va,
  257. unsigned long *mva);
  258. int primary_display_is_video_mode(void);
  259. int primary_display_is_decouple_mode(void);
  260. int primary_display_is_mirror_mode(void);
  261. int primary_display_is_ovl1to2_handle(cmdqRecHandle *handle);
  262. unsigned int primary_display_get_option(const char *option);
  263. CMDQ_SWITCH primary_display_cmdq_enabled(void);
  264. int primary_display_switch_cmdq_cpu(CMDQ_SWITCH use_cmdq);
  265. int primary_display_check_path(char *stringbuf, int buf_len);
  266. int primary_display_manual_lock(void);
  267. int primary_display_manual_unlock(void);
  268. int primary_display_start(void);
  269. int primary_display_stop(void);
  270. int primary_display_esd_recovery(void);
  271. int primary_display_get_debug_state(char *stringbuf, int buf_len);
  272. void primary_display_set_max_layer(int maxlayer);
  273. void primary_display_reset(void);
  274. void primary_display_esd_check_enable(int enable);
  275. LCM_PARAMS *DISP_GetLcmPara(void);
  276. LCM_DRIVER *DISP_GetLcmDrv(void);
  277. int Panel_Master_dsi_config_entry(const char *name, void *config_value);
  278. int primary_display_config_input_multiple(disp_session_input_config *session_input);
  279. int primary_display_config_interface_input(primary_disp_input_config *input);
  280. int primary_display_force_set_vsync_fps(unsigned int fps);
  281. unsigned int primary_display_get_fps(void);
  282. int primary_display_get_original_width(void);
  283. int primary_display_get_original_height(void);
  284. int primary_display_insert_session_buf(disp_session_buf_info *session_buf_info);
  285. int primary_display_enable_path_cg(int enable);
  286. int primary_display_lcm_ATA(void);
  287. int primary_display_setbacklight(unsigned int level);
  288. int fbconfig_get_esd_check_test(uint32_t dsi_id, uint32_t cmd, uint8_t *buffer, uint32_t num);
  289. int primary_display_pause(PRIMARY_DISPLAY_CALLBACK callback, unsigned int user_data);
  290. int primary_display_switch_dst_mode(int mode);
  291. int primary_display_get_lcm_index(void);
  292. int primary_display_set_cmd(int *lcm_cmd, unsigned int cmd_num);
  293. int disp_fmt_to_hw_fmt(DISP_FORMAT src_fmt, unsigned int *hw_fmt,
  294. unsigned int *Bpp, unsigned int *bpp);
  295. void disp_update_trigger_time(void);
  296. int display_enter_tui(void);
  297. int display_exit_tui(void);
  298. display_primary_path_context *primary_display_path_lock(const char *caller);
  299. void primary_display_path_unlock(const char *caller);
  300. int primary_display_switch_wdma_dump(int on);
  301. void _cmdq_insert_wait_frame_done_token_mira(void *handle);
  302. int primary_display_switch_mode_nolock(int sess_mode, unsigned int session, int force);
  303. int primary_display_release_fence_fake(void);
  304. int primary_display_check_test(void);
  305. int primary_display_cmdq_set_reg(unsigned int addr, unsigned int val);
  306. void primary_display_reset_ovl_by_cmdq(unsigned int force);
  307. uint32_t DISP_GetScreenWidth(void);
  308. uint32_t DISP_GetScreenHeight(void);
  309. #endif
  310. void primary_display_update_present_fence(unsigned int fence_idx);
  311. void *primary_get_dpmgr_handle(void);
  312. extern unsigned int WDMA0_FRAME_START_FLAG;
  313. extern unsigned int ALL_LAYER_DISABLE_STEP;
  314. extern unsigned int gTriggerDispMode; /* 0: normal, 1: lcd only, 2: none of lcd and lcm */
  315. extern unsigned int _need_wait_esd_eof(void);
  316. extern unsigned int _need_register_eint(void);
  317. extern unsigned int _need_do_esd_check(void);
  318. extern void disp_exit_idle_ex(const char *caller);
  319. int primary_display_set_secondary_display(int add, DISP_SESSION_TYPE type);
  320. int init_ext_decouple_buffers(void);
  321. int deinit_ext_decouple_buffers(void);
  322. int primary_display_get_session_mode(void);