aboutsummaryrefslogtreecommitdiff
path: root/kernel-headers/linux/disp_session.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel-headers/linux/disp_session.h')
-rw-r--r--kernel-headers/linux/disp_session.h400
1 files changed, 400 insertions, 0 deletions
diff --git a/kernel-headers/linux/disp_session.h b/kernel-headers/linux/disp_session.h
new file mode 100644
index 0000000..5044708
--- /dev/null
+++ b/kernel-headers/linux/disp_session.h
@@ -0,0 +1,400 @@
+#ifndef __DISP_SESSION_H
+#define __DISP_SESSION_H
+
+#define DISP_SESSION_DEVICE "mtk_disp_mgr"
+
+
+#define DISP_NO_ION_FD ((int)(~0U>>1))
+#define DISP_NO_USE_LAEYR_ID ((int)(~0U>>1))
+
+/* sync with define in ddp_ovl.h */
+#define OVL_CASCADE_SUPPORT
+#ifdef OVL_CASCADE_SUPPORT
+#define MAX_INPUT_CONFIG 8
+#else
+#define MAX_INPUT_CONFIG 4
+#endif
+
+#define MAKE_DISP_FORMAT_ID(id, bpp) (((id) << 8) | (bpp))
+#define DISP_SESSION_MODE(id) (((id)>>24)&0xff)
+#define DISP_SESSION_TYPE(id) (((id)>>16)&0xff)
+#define DISP_SESSION_DEV(id) ((id)&0xff)
+#define MAKE_DISP_SESSION(type, dev) (unsigned int)((type)<<16 | (dev))
+
+
+
+/* /============================================================================= */
+/* structure declarations */
+/* /=========================== */
+
+typedef enum {
+ DISP_IF_TYPE_DBI = 0,
+ DISP_IF_TYPE_DPI,
+ DISP_IF_TYPE_DSI0,
+ DISP_IF_TYPE_DSI1,
+ DISP_IF_TYPE_DSIDUAL,
+ DISP_IF_HDMI = 7,
+ DISP_IF_HDMI_SMARTBOOK,
+ DISP_IF_MHL,
+ DISP_IF_EPD
+} DISP_IF_TYPE;
+
+typedef enum {
+ DISP_IF_FORMAT_RGB565 = 0,
+ DISP_IF_FORMAT_RGB666,
+ DISP_IF_FORMAT_RGB888
+} DISP_IF_FORMAT;
+
+typedef enum {
+ DISP_IF_MODE_VIDEO = 0,
+ DISP_IF_MODE_COMMAND
+} DISP_IF_MODE;
+
+
+typedef enum {
+ DISP_ORIENTATION_0 = 0,
+ DISP_ORIENTATION_90 = 1,
+ DISP_ORIENTATION_180 = 2,
+ DISP_ORIENTATION_270 = 3,
+} DISP_ORIENTATION;
+
+typedef enum {
+ DISP_FORMAT_UNKNOWN = 0,
+
+ DISP_FORMAT_RGB565 = MAKE_DISP_FORMAT_ID(1, 2),
+ DISP_FORMAT_RGB888 = MAKE_DISP_FORMAT_ID(2, 3),
+ DISP_FORMAT_BGR888 = MAKE_DISP_FORMAT_ID(3, 3),
+ DISP_FORMAT_ARGB8888 = MAKE_DISP_FORMAT_ID(4, 4),
+ DISP_FORMAT_ABGR8888 = MAKE_DISP_FORMAT_ID(5, 4),
+ DISP_FORMAT_RGBA8888 = MAKE_DISP_FORMAT_ID(6, 4),
+ DISP_FORMAT_BGRA8888 = MAKE_DISP_FORMAT_ID(7, 4),
+ DISP_FORMAT_YUV422 = MAKE_DISP_FORMAT_ID(8, 2),
+ DISP_FORMAT_XRGB8888 = MAKE_DISP_FORMAT_ID(9, 4),
+ DISP_FORMAT_XBGR8888 = MAKE_DISP_FORMAT_ID(10, 4),
+ DISP_FORMAT_RGBX8888 = MAKE_DISP_FORMAT_ID(11, 4),
+ DISP_FORMAT_BGRX8888 = MAKE_DISP_FORMAT_ID(12, 4),
+ DISP_FORMAT_UYVY = MAKE_DISP_FORMAT_ID(13, 2),
+ DISP_FORMAT_YUV420_P = MAKE_DISP_FORMAT_ID(14, 2),
+ DISP_FORMAT_YV12 = MAKE_DISP_FORMAT_ID(16, 1), /* BPP = 1.5 */
+ DISP_FORMAT_BPP_MASK = 0xFF,
+} DISP_FORMAT;
+
+typedef enum {
+ DISP_LAYER_2D = 0,
+ DISP_LAYER_3D_SBS_0 = 0x1,
+ DISP_LAYER_3D_SBS_90 = 0x2,
+ DISP_LAYER_3D_SBS_180 = 0x3,
+ DISP_LAYER_3D_SBS_270 = 0x4,
+ DISP_LAYER_3D_TAB_0 = 0x10,
+ DISP_LAYER_3D_TAB_90 = 0x20,
+ DISP_LAYER_3D_TAB_180 = 0x30,
+ DISP_LAYER_3D_TAB_270 = 0x40,
+} DISP_LAYER_TYPE;
+
+typedef enum {
+ /* normal memory */
+ DISP_NORMAL_BUFFER = 0,
+ /* normal memory but should not be dumpped within screenshot */
+ DISP_PROTECT_BUFFER = 1,
+ /* secure memory */
+ DISP_SECURE_BUFFER = 2,
+ DISP_SECURE_BUFFER_SHIFT = 0x10002
+} DISP_BUFFER_TYPE;
+
+typedef enum {
+ /* ion buffer */
+ DISP_BUFFER_ION = 0,
+ /* dim layer, const alpha */
+ DISP_BUFFER_ALPHA = 1,
+ /* mva buffer */
+ DISP_BUFFER_MVA = 2,
+} DISP_BUFFER_SOURCE;
+
+typedef enum {
+ DISP_ALPHA_ONE = 0,
+ DISP_ALPHA_SRC = 1,
+ DISP_ALPHA_SRC_INVERT = 2,
+ DISP_ALPHA_INVALID = 3,
+} DISP_ALPHA_TYPE;
+
+typedef enum {
+ DISP_SESSION_PRIMARY = 1,
+ DISP_SESSION_EXTERNAL = 2,
+ DISP_SESSION_MEMORY = 3
+} DISP_SESSION_TYPE;
+
+typedef enum {
+ DISP_YUV_BT601_FULL = 0,
+ DISP_YUV_BT601 = 1,
+ DISP_YUV_BT709 = 2
+} DISP_YUV_RANGE_ENUM;
+
+typedef enum {
+ DISP_INVALID_SESSION_MODE = 0,
+ /* single output */
+ DISP_SESSION_DIRECT_LINK_MODE = 1,
+ DISP_SESSION_DECOUPLE_MODE = 2,
+
+ /* two ouputs */
+ DISP_SESSION_DIRECT_LINK_MIRROR_MODE = 3,
+ DISP_SESSION_DECOUPLE_MIRROR_MODE = 4,
+
+ DISP_SESSION_RDMA_MODE,
+ DISP_SESSION_MODE_NUM,
+
+} DISP_MODE;
+
+typedef enum {
+ SESSION_USER_INVALID = -1,
+ SESSION_USER_HWC = 0,
+ SESSION_USER_GUIEXT = 1,
+ SESSION_USER_AEE = 2,
+ SESSION_USER_PANDISP = 3,
+ SESSION_USER_CNT,
+} DISP_SESSION_USER;
+
+typedef enum {
+ DISP_OUTPUT_UNKNOWN = 0,
+ DISP_OUTPUT_MEMORY = 1,
+ DISP_OUTPUT_DECOUPLE = 2,
+} DISP_DC_TYPE;
+
+typedef enum {
+ TRIGGER_NORMAL,
+ TRIGGER_SUSPEND,
+ TRIGGER_RESUME,
+
+ TRIGGER_MODE_MAX_NUM
+} EXTD_TRIGGER_MODE;
+
+typedef struct disp_session_config_t {
+ DISP_SESSION_TYPE type;
+ unsigned int device_id;
+ DISP_MODE mode;
+ unsigned int session_id;
+ DISP_SESSION_USER user;
+ unsigned int present_fence_idx;
+ DISP_DC_TYPE dc_type;
+ int need_merge;
+ EXTD_TRIGGER_MODE tigger_mode;
+} disp_session_config;
+
+typedef struct {
+ unsigned int session_id;
+ unsigned int vsync_cnt;
+ unsigned long long vsync_ts;
+ int lcm_fps;
+} disp_session_vsync_config;
+
+typedef struct disp_input_config_t {
+ unsigned int layer_id;
+ unsigned int layer_enable;
+ DISP_BUFFER_SOURCE buffer_source;
+ void *src_base_addr;
+ void *src_phy_addr;
+ unsigned int src_direct_link;
+ DISP_FORMAT src_fmt;
+ unsigned int src_use_color_key;
+ unsigned int src_color_key;
+ unsigned int src_pitch;
+ unsigned int src_offset_x, src_offset_y;
+ unsigned int src_width, src_height;
+
+ unsigned int tgt_offset_x, tgt_offset_y;
+ unsigned int tgt_width, tgt_height;
+ DISP_ORIENTATION layer_rotation;
+ DISP_LAYER_TYPE layer_type;
+ DISP_ORIENTATION video_rotation;
+
+ unsigned int isTdshp; /* set to 1, will go through tdshp first, then layer blending, then to color */
+
+ unsigned int next_buff_idx;
+ int identity;
+ int connected_type;
+ DISP_BUFFER_TYPE security;
+ unsigned int alpha_enable;
+ unsigned int alpha;
+ unsigned int sur_aen;
+ DISP_ALPHA_TYPE src_alpha;
+ DISP_ALPHA_TYPE dst_alpha;
+ unsigned int frm_sequence;
+ DISP_YUV_RANGE_ENUM yuv_range;
+} disp_input_config;
+
+typedef struct disp_output_config_t {
+ void *va;
+ void *pa;
+ DISP_FORMAT fmt;
+ unsigned int x;
+ unsigned int y;
+ unsigned int width;
+ unsigned int height;
+ unsigned int pitch;
+ unsigned int pitchUV;
+ DISP_BUFFER_TYPE security;
+ unsigned int buff_idx;
+ unsigned int interface_idx;
+ unsigned int frm_sequence;
+} disp_output_config;
+
+typedef struct disp_session_input_config_t {
+ DISP_SESSION_USER setter;
+ unsigned int session_id;
+ unsigned int config_layer_num;
+ disp_input_config config[8];
+} disp_session_input_config;
+
+typedef struct disp_session_output_config_t {
+ unsigned int session_id;
+ disp_output_config config;
+} disp_session_output_config;
+
+typedef struct disp_session_layer_num_config_t {
+ unsigned int session_id;
+ unsigned int max_layer_num;
+} disp_session_layer_num_config;
+
+struct disp_frame_cfg_t {
+ DISP_SESSION_USER setter;
+ unsigned int session_id;
+
+ /* input config */
+ unsigned int input_layer_num;
+ disp_input_config input_cfg[8];
+ unsigned int overlap_layer_num;
+
+ /* constant layer */
+ unsigned int const_layer_num;
+ disp_input_config const_layer[1];
+
+ /* output config */
+ int output_en;
+ disp_output_config output_cfg;
+
+ /* trigger config */
+ DISP_MODE mode;
+ unsigned int present_fence_idx;
+ EXTD_TRIGGER_MODE tigger_mode;
+ DISP_SESSION_USER user;
+};
+
+typedef struct disp_session_info_t {
+ unsigned int session_id;
+ unsigned int maxLayerNum;
+ unsigned int isHwVsyncAvailable;
+ DISP_IF_TYPE displayType;
+ unsigned int displayWidth;
+ unsigned int displayHeight;
+ unsigned int displayFormat;
+ DISP_IF_MODE displayMode;
+ unsigned int vsyncFPS;
+ unsigned int physicalWidth;
+ unsigned int physicalHeight;
+ unsigned int isConnected;
+ unsigned int isHDCPSupported;
+ unsigned int isOVLDisabled;
+ unsigned int is3DSupport;
+ unsigned int const_layer_num;
+ /* updateFPS: fps of HWC trigger display */
+ /* notes: for better Accuracy, updateFPS = real_fps*100 */
+ unsigned int updateFPS;
+ unsigned int is_updateFPS_stable;
+} disp_session_info;
+
+typedef struct disp_buffer_info_t {
+ /* Session */
+ unsigned int session_id;
+ /* Input */
+ unsigned int layer_id;
+ unsigned int layer_en;
+ int ion_fd;
+ unsigned int cache_sync;
+ /* Output */
+ unsigned int index;
+ int fence_fd;
+ unsigned int interface_index;
+ int interface_fence_fd;
+} disp_buffer_info;
+
+typedef struct disp_present_fence_info_t {
+ /* input */
+ unsigned int session_id;
+ /* output */
+ unsigned int present_fence_fd;
+ unsigned int present_fence_index;
+} disp_present_fence;
+
+typedef struct disp_present_fence_t {
+ /* Session */
+ unsigned int session_id;
+
+ /* Output */
+ unsigned int index;
+ int fence_fd;
+} disp_present_fence_info;
+
+typedef enum {
+ DISP_OUTPUT_CAP_DIRECT_LINK = 0,
+ DISP_OUTPUT_CAP_DECOUPLE,
+ DISP_OUTPUT_CAP_SWITCHABLE,
+} DISP_CAP_OUTPUT_MODE;
+
+typedef enum {
+ DISP_OUTPUT_CAP_SINGLE_PASS = 0,
+ DISP_OUTPUT_CAP_MULTI_PASS,
+} DISP_CAP_OUTPUT_PASS;
+
+typedef enum {
+ DISP_FEATURE_TIME_SHARING = 0x00000001,
+} DISP_FEATURE;
+
+typedef struct disp_caps_t {
+ DISP_CAP_OUTPUT_MODE output_mode;
+ DISP_CAP_OUTPUT_PASS output_pass;
+ unsigned int max_layer_num;
+#ifdef CONFIG_FOR_SOURCE_PQ
+ unsigned int max_pq_num;
+#endif
+ unsigned int disp_feature;
+ int is_support_frame_cfg_ioctl;
+ int is_output_rotated;
+} disp_caps_info;
+
+typedef struct disp_session_buf_t {
+ unsigned int session_id;
+ unsigned int buf_hnd[3];
+} disp_session_buf_info;
+
+/* IOCTL commands. */
+#define DISP_IOW(num, dtype) _IOW('O', num, dtype)
+#define DISP_IOR(num, dtype) _IOR('O', num, dtype)
+#define DISP_IOWR(num, dtype) _IOWR('O', num, dtype)
+#define DISP_IO(num) _IO('O', num)
+
+
+#define DISP_IOCTL_CREATE_SESSION DISP_IOW(201, disp_session_config)
+#define DISP_IOCTL_DESTROY_SESSION DISP_IOW(202, disp_session_config)
+#define DISP_IOCTL_TRIGGER_SESSION DISP_IOW(203, disp_session_config)
+#define DISP_IOCTL_PREPARE_INPUT_BUFFER DISP_IOW(204, disp_buffer_info)
+#define DISP_IOCTL_PREPARE_OUTPUT_BUFFER DISP_IOW(205, disp_buffer_info)
+#define DISP_IOCTL_SET_INPUT_BUFFER DISP_IOW(206, disp_session_input_config)
+#define DISP_IOCTL_SET_OUTPUT_BUFFER DISP_IOW(207, disp_session_output_config)
+#define DISP_IOCTL_GET_SESSION_INFO DISP_IOW(208, disp_session_info)
+
+
+#define DISP_IOCTL_SET_SESSION_MODE DISP_IOW(209, disp_session_config)
+#define DISP_IOCTL_GET_SESSION_MODE DISP_IOW(210, disp_session_config)
+#define DISP_IOCTL_SET_SESSION_TYPE DISP_IOW(211, disp_session_config)
+#define DISP_IOCTL_GET_SESSION_TYPE DISP_IOW(212, disp_session_config)
+#define DISP_IOCTL_WAIT_FOR_VSYNC DISP_IOW(213, disp_session_vsync_config)
+#define DISP_IOCTL_SET_MAX_LAYER_NUM DISP_IOW(214, disp_session_layer_num_config)
+#define DISP_IOCTL_SET_VSYNC_FPS DISP_IOW(215, unsigned int)
+
+#define DISP_IOCTL_GET_PRESENT_FENCE DISP_IOW(216, disp_present_fence)
+
+#define DISP_IOCTL_GET_IS_DRIVER_SUSPEND DISP_IOW(217, unsigned int)
+#define DISP_IOCTL_GET_DISPLAY_CAPS DISP_IOW(218, disp_caps_info)
+#define DISP_IOCTL_INSERT_SESSION_BUFFERS DISP_IOW(219, disp_session_buf_info)
+#define DISP_IOCTL_FRAME_CONFIG DISP_IOW(220, disp_session_output_config)
+
+#endif /* __DISP_SESSION_H */