Home | History | Annotate | Download | only in linux
      1 /****************************************************************************
      2  ****************************************************************************
      3  ***
      4  ***   This header was automatically generated from a Linux kernel header
      5  ***   of the same name, to make information necessary for userspace to
      6  ***   call into the kernel available to libc.  It contains only constants,
      7  ***   structures, and macros generated from the original header, and thus,
      8  ***   contains no copyrightable information.
      9  ***
     10  ***   To edit the content of this header, modify the corresponding
     11  ***   source file (e.g. under external/kernel-headers/original/) then
     12  ***   run bionic/libc/kernel/tools/update_all.py
     13  ***
     14  ***   Any manual change here will be lost the next time this script will
     15  ***   be run. You've been warned!
     16  ***
     17  ****************************************************************************
     18  ****************************************************************************/
     19 #ifndef _UAPI_MSM_MDP_H_
     20 #define _UAPI_MSM_MDP_H_
     21 #include <linux/types.h>
     22 #include <linux/fb.h>
     23 #define MSMFB_IOCTL_MAGIC 'm'
     24 #define MSMFB_GRP_DISP _IOW(MSMFB_IOCTL_MAGIC, 1, unsigned int)
     25 #define MSMFB_BLIT _IOW(MSMFB_IOCTL_MAGIC, 2, unsigned int)
     26 #define MSMFB_SUSPEND_SW_REFRESHER _IOW(MSMFB_IOCTL_MAGIC, 128, unsigned int)
     27 #define MSMFB_RESUME_SW_REFRESHER _IOW(MSMFB_IOCTL_MAGIC, 129, unsigned int)
     28 #define MSMFB_CURSOR _IOW(MSMFB_IOCTL_MAGIC, 130, struct fb_cursor)
     29 #define MSMFB_SET_LUT _IOW(MSMFB_IOCTL_MAGIC, 131, struct fb_cmap)
     30 #define MSMFB_HISTOGRAM _IOWR(MSMFB_IOCTL_MAGIC, 132, struct mdp_histogram_data)
     31 #define MSMFB_GET_CCS_MATRIX _IOWR(MSMFB_IOCTL_MAGIC, 133, struct mdp_ccs)
     32 #define MSMFB_SET_CCS_MATRIX _IOW(MSMFB_IOCTL_MAGIC, 134, struct mdp_ccs)
     33 #define MSMFB_OVERLAY_SET _IOWR(MSMFB_IOCTL_MAGIC, 135, struct mdp_overlay)
     34 #define MSMFB_OVERLAY_UNSET _IOW(MSMFB_IOCTL_MAGIC, 136, unsigned int)
     35 #define MSMFB_OVERLAY_PLAY _IOW(MSMFB_IOCTL_MAGIC, 137, struct msmfb_overlay_data)
     36 #define MSMFB_OVERLAY_QUEUE MSMFB_OVERLAY_PLAY
     37 #define MSMFB_GET_PAGE_PROTECTION _IOR(MSMFB_IOCTL_MAGIC, 138, struct mdp_page_protection)
     38 #define MSMFB_SET_PAGE_PROTECTION _IOW(MSMFB_IOCTL_MAGIC, 139, struct mdp_page_protection)
     39 #define MSMFB_OVERLAY_GET _IOR(MSMFB_IOCTL_MAGIC, 140, struct mdp_overlay)
     40 #define MSMFB_OVERLAY_PLAY_ENABLE _IOW(MSMFB_IOCTL_MAGIC, 141, unsigned int)
     41 #define MSMFB_OVERLAY_BLT _IOWR(MSMFB_IOCTL_MAGIC, 142, struct msmfb_overlay_blt)
     42 #define MSMFB_OVERLAY_BLT_OFFSET _IOW(MSMFB_IOCTL_MAGIC, 143, unsigned int)
     43 #define MSMFB_HISTOGRAM_START _IOR(MSMFB_IOCTL_MAGIC, 144, struct mdp_histogram_start_req)
     44 #define MSMFB_HISTOGRAM_STOP _IOR(MSMFB_IOCTL_MAGIC, 145, unsigned int)
     45 #define MSMFB_NOTIFY_UPDATE _IOWR(MSMFB_IOCTL_MAGIC, 146, unsigned int)
     46 #define MSMFB_OVERLAY_3D _IOWR(MSMFB_IOCTL_MAGIC, 147, struct msmfb_overlay_3d)
     47 #define MSMFB_MIXER_INFO _IOWR(MSMFB_IOCTL_MAGIC, 148, struct msmfb_mixer_info_req)
     48 #define MSMFB_OVERLAY_PLAY_WAIT _IOWR(MSMFB_IOCTL_MAGIC, 149, struct msmfb_overlay_data)
     49 #define MSMFB_WRITEBACK_INIT _IO(MSMFB_IOCTL_MAGIC, 150)
     50 #define MSMFB_WRITEBACK_START _IO(MSMFB_IOCTL_MAGIC, 151)
     51 #define MSMFB_WRITEBACK_STOP _IO(MSMFB_IOCTL_MAGIC, 152)
     52 #define MSMFB_WRITEBACK_QUEUE_BUFFER _IOW(MSMFB_IOCTL_MAGIC, 153, struct msmfb_data)
     53 #define MSMFB_WRITEBACK_DEQUEUE_BUFFER _IOW(MSMFB_IOCTL_MAGIC, 154, struct msmfb_data)
     54 #define MSMFB_WRITEBACK_TERMINATE _IO(MSMFB_IOCTL_MAGIC, 155)
     55 #define MSMFB_MDP_PP _IOWR(MSMFB_IOCTL_MAGIC, 156, struct msmfb_mdp_pp)
     56 #define MSMFB_OVERLAY_VSYNC_CTRL _IOW(MSMFB_IOCTL_MAGIC, 160, unsigned int)
     57 #define MSMFB_VSYNC_CTRL _IOW(MSMFB_IOCTL_MAGIC, 161, unsigned int)
     58 #define MSMFB_BUFFER_SYNC _IOW(MSMFB_IOCTL_MAGIC, 162, struct mdp_buf_sync)
     59 #define MSMFB_OVERLAY_COMMIT _IO(MSMFB_IOCTL_MAGIC, 163)
     60 #define MSMFB_DISPLAY_COMMIT _IOW(MSMFB_IOCTL_MAGIC, 164, struct mdp_display_commit)
     61 #define MSMFB_METADATA_SET _IOW(MSMFB_IOCTL_MAGIC, 165, struct msmfb_metadata)
     62 #define MSMFB_METADATA_GET _IOW(MSMFB_IOCTL_MAGIC, 166, struct msmfb_metadata)
     63 #define MSMFB_WRITEBACK_SET_MIRRORING_HINT _IOW(MSMFB_IOCTL_MAGIC, 167, unsigned int)
     64 #define MSMFB_ASYNC_BLIT _IOW(MSMFB_IOCTL_MAGIC, 168, unsigned int)
     65 #define MSMFB_OVERLAY_PREPARE _IOWR(MSMFB_IOCTL_MAGIC, 169, struct mdp_overlay_list)
     66 #define MSMFB_LPM_ENABLE _IOWR(MSMFB_IOCTL_MAGIC, 170, unsigned int)
     67 #define MSMFB_MDP_PP_GET_FEATURE_VERSION _IOWR(MSMFB_IOCTL_MAGIC, 171, struct mdp_pp_feature_version)
     68 #define FB_TYPE_3D_PANEL 0x10101010
     69 #define MDP_IMGTYPE2_START 0x10000
     70 #define MSMFB_DRIVER_VERSION 0xF9E8D701
     71 #define MDP_IMGTYPE_END 0x100
     72 #define MDSS_GET_MAJOR(rev) ((rev) >> 28)
     73 #define MDSS_GET_MINOR(rev) (((rev) >> 16) & 0xFFF)
     74 #define MDSS_GET_STEP(rev) ((rev) & 0xFFFF)
     75 #define MDSS_GET_MAJOR_MINOR(rev) ((rev) >> 16)
     76 #define IS_MDSS_MAJOR_MINOR_SAME(rev1,rev2) (MDSS_GET_MAJOR_MINOR((rev1)) == MDSS_GET_MAJOR_MINOR((rev2)))
     77 #define MDSS_MDP_REV(major,minor,step) ((((major) & 0x000F) << 28) | (((minor) & 0x0FFF) << 16) | ((step) & 0xFFFF))
     78 #define MDSS_MDP_HW_REV_100 MDSS_MDP_REV(1, 0, 0)
     79 #define MDSS_MDP_HW_REV_101 MDSS_MDP_REV(1, 1, 0)
     80 #define MDSS_MDP_HW_REV_101_1 MDSS_MDP_REV(1, 1, 1)
     81 #define MDSS_MDP_HW_REV_101_2 MDSS_MDP_REV(1, 1, 2)
     82 #define MDSS_MDP_HW_REV_102 MDSS_MDP_REV(1, 2, 0)
     83 #define MDSS_MDP_HW_REV_102_1 MDSS_MDP_REV(1, 2, 1)
     84 #define MDSS_MDP_HW_REV_103 MDSS_MDP_REV(1, 3, 0)
     85 #define MDSS_MDP_HW_REV_103_1 MDSS_MDP_REV(1, 3, 1)
     86 #define MDSS_MDP_HW_REV_105 MDSS_MDP_REV(1, 5, 0)
     87 #define MDSS_MDP_HW_REV_106 MDSS_MDP_REV(1, 6, 0)
     88 #define MDSS_MDP_HW_REV_107 MDSS_MDP_REV(1, 7, 0)
     89 #define MDSS_MDP_HW_REV_107_1 MDSS_MDP_REV(1, 7, 1)
     90 #define MDSS_MDP_HW_REV_107_2 MDSS_MDP_REV(1, 7, 2)
     91 #define MDSS_MDP_HW_REV_108 MDSS_MDP_REV(1, 8, 0)
     92 #define MDSS_MDP_HW_REV_109 MDSS_MDP_REV(1, 9, 0)
     93 #define MDSS_MDP_HW_REV_110 MDSS_MDP_REV(1, 10, 0)
     94 #define MDSS_MDP_HW_REV_200 MDSS_MDP_REV(2, 0, 0)
     95 #define MDSS_MDP_HW_REV_112 MDSS_MDP_REV(1, 12, 0)
     96 #define MDSS_MDP_HW_REV_114 MDSS_MDP_REV(1, 14, 0)
     97 #define MDSS_MDP_HW_REV_115 MDSS_MDP_REV(1, 15, 0)
     98 #define MDSS_MDP_HW_REV_116 MDSS_MDP_REV(1, 16, 0)
     99 #define MDSS_MDP_HW_REV_300 MDSS_MDP_REV(3, 0, 0)
    100 #define MDSS_MDP_HW_REV_301 MDSS_MDP_REV(3, 0, 1)
    101 enum {
    102   NOTIFY_UPDATE_INIT,
    103   NOTIFY_UPDATE_DEINIT,
    104   NOTIFY_UPDATE_START,
    105   NOTIFY_UPDATE_STOP,
    106   NOTIFY_UPDATE_POWER_OFF,
    107 };
    108 enum {
    109   NOTIFY_TYPE_NO_UPDATE,
    110   NOTIFY_TYPE_SUSPEND,
    111   NOTIFY_TYPE_UPDATE,
    112   NOTIFY_TYPE_BL_UPDATE,
    113   NOTIFY_TYPE_BL_AD_ATTEN_UPDATE,
    114 };
    115 enum {
    116   MDP_RGB_565,
    117   MDP_XRGB_8888,
    118   MDP_Y_CBCR_H2V2,
    119   MDP_Y_CBCR_H2V2_ADRENO,
    120   MDP_ARGB_8888,
    121   MDP_RGB_888,
    122   MDP_Y_CRCB_H2V2,
    123   MDP_YCRYCB_H2V1,
    124   MDP_CBYCRY_H2V1,
    125   MDP_Y_CRCB_H2V1,
    126   MDP_Y_CBCR_H2V1,
    127   MDP_Y_CRCB_H1V2,
    128   MDP_Y_CBCR_H1V2,
    129   MDP_RGBA_8888,
    130   MDP_BGRA_8888,
    131   MDP_RGBX_8888,
    132   MDP_Y_CRCB_H2V2_TILE,
    133   MDP_Y_CBCR_H2V2_TILE,
    134   MDP_Y_CR_CB_H2V2,
    135   MDP_Y_CR_CB_GH2V2,
    136   MDP_Y_CB_CR_H2V2,
    137   MDP_Y_CRCB_H1V1,
    138   MDP_Y_CBCR_H1V1,
    139   MDP_YCRCB_H1V1,
    140   MDP_YCBCR_H1V1,
    141   MDP_BGR_565,
    142   MDP_BGR_888,
    143   MDP_Y_CBCR_H2V2_VENUS,
    144   MDP_BGRX_8888,
    145   MDP_RGBA_8888_TILE,
    146   MDP_ARGB_8888_TILE,
    147   MDP_ABGR_8888_TILE,
    148   MDP_BGRA_8888_TILE,
    149   MDP_RGBX_8888_TILE,
    150   MDP_XRGB_8888_TILE,
    151   MDP_XBGR_8888_TILE,
    152   MDP_BGRX_8888_TILE,
    153   MDP_YCBYCR_H2V1,
    154   MDP_RGB_565_TILE,
    155   MDP_BGR_565_TILE,
    156   MDP_ARGB_1555,
    157   MDP_RGBA_5551,
    158   MDP_ARGB_4444,
    159   MDP_RGBA_4444,
    160   MDP_RGB_565_UBWC,
    161   MDP_RGBA_8888_UBWC,
    162   MDP_Y_CBCR_H2V2_UBWC,
    163   MDP_RGBX_8888_UBWC,
    164   MDP_Y_CRCB_H2V2_VENUS,
    165   MDP_IMGTYPE_LIMIT,
    166   MDP_RGB_BORDERFILL,
    167   MDP_XRGB_1555,
    168   MDP_RGBX_5551,
    169   MDP_XRGB_4444,
    170   MDP_RGBX_4444,
    171   MDP_ABGR_1555,
    172   MDP_BGRA_5551,
    173   MDP_XBGR_1555,
    174   MDP_BGRX_5551,
    175   MDP_ABGR_4444,
    176   MDP_BGRA_4444,
    177   MDP_XBGR_4444,
    178   MDP_BGRX_4444,
    179   MDP_ABGR_8888,
    180   MDP_XBGR_8888,
    181   MDP_RGBA_1010102,
    182   MDP_ARGB_2101010,
    183   MDP_RGBX_1010102,
    184   MDP_XRGB_2101010,
    185   MDP_BGRA_1010102,
    186   MDP_ABGR_2101010,
    187   MDP_BGRX_1010102,
    188   MDP_XBGR_2101010,
    189   MDP_RGBA_1010102_UBWC,
    190   MDP_RGBX_1010102_UBWC,
    191   MDP_Y_CBCR_H2V2_P010,
    192   MDP_Y_CBCR_H2V2_TP10_UBWC,
    193   MDP_CRYCBY_H2V1,
    194   MDP_IMGTYPE_LIMIT1 = MDP_IMGTYPE_END,
    195   MDP_FB_FORMAT = MDP_IMGTYPE2_START,
    196   MDP_IMGTYPE_LIMIT2
    197 };
    198 #define MDP_CRYCBY_H2V1 MDP_CRYCBY_H2V1
    199 enum {
    200   PMEM_IMG,
    201   FB_IMG,
    202 };
    203 enum {
    204   HSIC_HUE = 0,
    205   HSIC_SAT,
    206   HSIC_INT,
    207   HSIC_CON,
    208   NUM_HSIC_PARAM,
    209 };
    210 enum mdss_mdp_max_bw_mode {
    211   MDSS_MAX_BW_LIMIT_DEFAULT = 0x1,
    212   MDSS_MAX_BW_LIMIT_CAMERA = 0x2,
    213   MDSS_MAX_BW_LIMIT_HFLIP = 0x4,
    214   MDSS_MAX_BW_LIMIT_VFLIP = 0x8,
    215 };
    216 #define MDSS_MDP_ROT_ONLY 0x80
    217 #define MDSS_MDP_RIGHT_MIXER 0x100
    218 #define MDSS_MDP_DUAL_PIPE 0x200
    219 #define MDP_ROT_NOP 0
    220 #define MDP_FLIP_LR 0x1
    221 #define MDP_FLIP_UD 0x2
    222 #define MDP_ROT_90 0x4
    223 #define MDP_ROT_180 (MDP_FLIP_UD | MDP_FLIP_LR)
    224 #define MDP_ROT_270 (MDP_ROT_90 | MDP_FLIP_UD | MDP_FLIP_LR)
    225 #define MDP_DITHER 0x8
    226 #define MDP_BLUR 0x10
    227 #define MDP_BLEND_FG_PREMULT 0x20000
    228 #define MDP_IS_FG 0x40000
    229 #define MDP_SOLID_FILL 0x00000020
    230 #define MDP_VPU_PIPE 0x00000040
    231 #define MDP_DEINTERLACE 0x80000000
    232 #define MDP_SHARPENING 0x40000000
    233 #define MDP_NO_DMA_BARRIER_START 0x20000000
    234 #define MDP_NO_DMA_BARRIER_END 0x10000000
    235 #define MDP_NO_BLIT 0x08000000
    236 #define MDP_BLIT_WITH_DMA_BARRIERS 0x000
    237 #define MDP_BLIT_WITH_NO_DMA_BARRIERS (MDP_NO_DMA_BARRIER_START | MDP_NO_DMA_BARRIER_END)
    238 #define MDP_BLIT_SRC_GEM 0x04000000
    239 #define MDP_BLIT_DST_GEM 0x02000000
    240 #define MDP_BLIT_NON_CACHED 0x01000000
    241 #define MDP_OV_PIPE_SHARE 0x00800000
    242 #define MDP_DEINTERLACE_ODD 0x00400000
    243 #define MDP_OV_PLAY_NOWAIT 0x00200000
    244 #define MDP_SOURCE_ROTATED_90 0x00100000
    245 #define MDP_OVERLAY_PP_CFG_EN 0x00080000
    246 #define MDP_BACKEND_COMPOSITION 0x00040000
    247 #define MDP_BORDERFILL_SUPPORTED 0x00010000
    248 #define MDP_SECURE_OVERLAY_SESSION 0x00008000
    249 #define MDP_SECURE_DISPLAY_OVERLAY_SESSION 0x00002000
    250 #define MDP_OV_PIPE_FORCE_DMA 0x00004000
    251 #define MDP_MEMORY_ID_TYPE_FB 0x00001000
    252 #define MDP_BWC_EN 0x00000400
    253 #define MDP_DECIMATION_EN 0x00000800
    254 #define MDP_SMP_FORCE_ALLOC 0x00200000
    255 #define MDP_TRANSP_NOP 0xffffffff
    256 #define MDP_ALPHA_NOP 0xff
    257 #define MDP_FB_PAGE_PROTECTION_NONCACHED (0)
    258 #define MDP_FB_PAGE_PROTECTION_WRITECOMBINE (1)
    259 #define MDP_FB_PAGE_PROTECTION_WRITETHROUGHCACHE (2)
    260 #define MDP_FB_PAGE_PROTECTION_WRITEBACKCACHE (3)
    261 #define MDP_FB_PAGE_PROTECTION_WRITEBACKWACACHE (4)
    262 #define MDP_FB_PAGE_PROTECTION_INVALID (5)
    263 #define MDP_NUM_FB_PAGE_PROTECTION_VALUES (5)
    264 struct mdp_rect {
    265   uint32_t x;
    266   uint32_t y;
    267   uint32_t w;
    268   uint32_t h;
    269 };
    270 struct mdp_img {
    271   uint32_t width;
    272   uint32_t height;
    273   uint32_t format;
    274   uint32_t offset;
    275   int memory_id;
    276   uint32_t priv;
    277 };
    278 struct mult_factor {
    279   uint32_t numer;
    280   uint32_t denom;
    281 };
    282 #define MDP_CCS_RGB2YUV 0
    283 #define MDP_CCS_YUV2RGB 1
    284 #define MDP_CCS_SIZE 9
    285 #define MDP_BV_SIZE 3
    286 struct mdp_ccs {
    287   int direction;
    288   uint16_t ccs[MDP_CCS_SIZE];
    289   uint16_t bv[MDP_BV_SIZE];
    290 };
    291 struct mdp_csc {
    292   int id;
    293   uint32_t csc_mv[9];
    294   uint32_t csc_pre_bv[3];
    295   uint32_t csc_post_bv[3];
    296   uint32_t csc_pre_lv[6];
    297   uint32_t csc_post_lv[6];
    298 };
    299 #define MDP_BLIT_REQ_VERSION 3
    300 struct color {
    301   uint32_t r;
    302   uint32_t g;
    303   uint32_t b;
    304   uint32_t alpha;
    305 };
    306 struct mdp_blit_req {
    307   struct mdp_img src;
    308   struct mdp_img dst;
    309   struct mdp_rect src_rect;
    310   struct mdp_rect dst_rect;
    311   struct color const_color;
    312   uint32_t alpha;
    313   uint32_t transp_mask;
    314   uint32_t flags;
    315   int sharpening_strength;
    316   uint8_t color_space;
    317   uint32_t fps;
    318 };
    319 struct mdp_blit_req_list {
    320   uint32_t count;
    321   struct mdp_blit_req req[];
    322 };
    323 #define MSMFB_DATA_VERSION 2
    324 struct msmfb_data {
    325   uint32_t offset;
    326   int memory_id;
    327   int id;
    328   uint32_t flags;
    329   uint32_t priv;
    330   uint32_t iova;
    331 };
    332 #define MSMFB_NEW_REQUEST - 1
    333 struct msmfb_overlay_data {
    334   uint32_t id;
    335   struct msmfb_data data;
    336   uint32_t version_key;
    337   struct msmfb_data plane1_data;
    338   struct msmfb_data plane2_data;
    339   struct msmfb_data dst_data;
    340 };
    341 struct msmfb_img {
    342   uint32_t width;
    343   uint32_t height;
    344   uint32_t format;
    345 };
    346 #define MSMFB_WRITEBACK_DEQUEUE_BLOCKING 0x1
    347 struct msmfb_writeback_data {
    348   struct msmfb_data buf_info;
    349   struct msmfb_img img;
    350 };
    351 #define MDP_PP_OPS_ENABLE 0x1
    352 #define MDP_PP_OPS_READ 0x2
    353 #define MDP_PP_OPS_WRITE 0x4
    354 #define MDP_PP_OPS_DISABLE 0x8
    355 #define MDP_PP_IGC_FLAG_ROM0 0x10
    356 #define MDP_PP_IGC_FLAG_ROM1 0x20
    357 #define MDSS_PP_DSPP_CFG 0x000
    358 #define MDSS_PP_SSPP_CFG 0x100
    359 #define MDSS_PP_LM_CFG 0x200
    360 #define MDSS_PP_WB_CFG 0x300
    361 #define MDSS_PP_ARG_MASK 0x3C00
    362 #define MDSS_PP_ARG_NUM 4
    363 #define MDSS_PP_ARG_SHIFT 10
    364 #define MDSS_PP_LOCATION_MASK 0x0300
    365 #define MDSS_PP_LOGICAL_MASK 0x00FF
    366 #define MDSS_PP_ADD_ARG(var,arg) ((var) | (0x1 << (MDSS_PP_ARG_SHIFT + (arg))))
    367 #define PP_ARG(x,var) ((var) & (0x1 << (MDSS_PP_ARG_SHIFT + (x))))
    368 #define PP_LOCAT(var) ((var) & MDSS_PP_LOCATION_MASK)
    369 #define PP_BLOCK(var) ((var) & MDSS_PP_LOGICAL_MASK)
    370 struct mdp_qseed_cfg {
    371   uint32_t table_num;
    372   uint32_t ops;
    373   uint32_t len;
    374   uint32_t * data;
    375 };
    376 struct mdp_sharp_cfg {
    377   uint32_t flags;
    378   uint32_t strength;
    379   uint32_t edge_thr;
    380   uint32_t smooth_thr;
    381   uint32_t noise_thr;
    382 };
    383 struct mdp_qseed_cfg_data {
    384   uint32_t block;
    385   struct mdp_qseed_cfg qseed_data;
    386 };
    387 #define MDP_OVERLAY_PP_CSC_CFG 0x1
    388 #define MDP_OVERLAY_PP_QSEED_CFG 0x2
    389 #define MDP_OVERLAY_PP_PA_CFG 0x4
    390 #define MDP_OVERLAY_PP_IGC_CFG 0x8
    391 #define MDP_OVERLAY_PP_SHARP_CFG 0x10
    392 #define MDP_OVERLAY_PP_HIST_CFG 0x20
    393 #define MDP_OVERLAY_PP_HIST_LUT_CFG 0x40
    394 #define MDP_OVERLAY_PP_PA_V2_CFG 0x80
    395 #define MDP_OVERLAY_PP_PCC_CFG 0x100
    396 #define MDP_CSC_FLAG_ENABLE 0x1
    397 #define MDP_CSC_FLAG_YUV_IN 0x2
    398 #define MDP_CSC_FLAG_YUV_OUT 0x4
    399 #define MDP_CSC_MATRIX_COEFF_SIZE 9
    400 #define MDP_CSC_CLAMP_SIZE 6
    401 #define MDP_CSC_BIAS_SIZE 3
    402 struct mdp_csc_cfg {
    403   uint32_t flags;
    404   uint32_t csc_mv[MDP_CSC_MATRIX_COEFF_SIZE];
    405   uint32_t csc_pre_bv[MDP_CSC_BIAS_SIZE];
    406   uint32_t csc_post_bv[MDP_CSC_BIAS_SIZE];
    407   uint32_t csc_pre_lv[MDP_CSC_CLAMP_SIZE];
    408   uint32_t csc_post_lv[MDP_CSC_CLAMP_SIZE];
    409 };
    410 struct mdp_csc_cfg_data {
    411   uint32_t block;
    412   struct mdp_csc_cfg csc_data;
    413 };
    414 struct mdp_pa_cfg {
    415   uint32_t flags;
    416   uint32_t hue_adj;
    417   uint32_t sat_adj;
    418   uint32_t val_adj;
    419   uint32_t cont_adj;
    420 };
    421 struct mdp_pa_mem_col_cfg {
    422   uint32_t color_adjust_p0;
    423   uint32_t color_adjust_p1;
    424   uint32_t hue_region;
    425   uint32_t sat_region;
    426   uint32_t val_region;
    427 };
    428 #define MDP_SIX_ZONE_LUT_SIZE 384
    429 #define MDP_PP_PA_HUE_ENABLE 0x10
    430 #define MDP_PP_PA_SAT_ENABLE 0x20
    431 #define MDP_PP_PA_VAL_ENABLE 0x40
    432 #define MDP_PP_PA_CONT_ENABLE 0x80
    433 #define MDP_PP_PA_SIX_ZONE_ENABLE 0x100
    434 #define MDP_PP_PA_SKIN_ENABLE 0x200
    435 #define MDP_PP_PA_SKY_ENABLE 0x400
    436 #define MDP_PP_PA_FOL_ENABLE 0x800
    437 #define MDP_PP_PA_MEM_PROT_HUE_EN 0x1
    438 #define MDP_PP_PA_MEM_PROT_SAT_EN 0x2
    439 #define MDP_PP_PA_MEM_PROT_VAL_EN 0x4
    440 #define MDP_PP_PA_MEM_PROT_CONT_EN 0x8
    441 #define MDP_PP_PA_MEM_PROT_SIX_EN 0x10
    442 #define MDP_PP_PA_MEM_PROT_BLEND_EN 0x20
    443 #define MDP_PP_PA_HUE_MASK 0x1000
    444 #define MDP_PP_PA_SAT_MASK 0x2000
    445 #define MDP_PP_PA_VAL_MASK 0x4000
    446 #define MDP_PP_PA_CONT_MASK 0x8000
    447 #define MDP_PP_PA_SIX_ZONE_HUE_MASK 0x10000
    448 #define MDP_PP_PA_SIX_ZONE_SAT_MASK 0x20000
    449 #define MDP_PP_PA_SIX_ZONE_VAL_MASK 0x40000
    450 #define MDP_PP_PA_MEM_COL_SKIN_MASK 0x80000
    451 #define MDP_PP_PA_MEM_COL_SKY_MASK 0x100000
    452 #define MDP_PP_PA_MEM_COL_FOL_MASK 0x200000
    453 #define MDP_PP_PA_MEM_PROTECT_EN 0x400000
    454 #define MDP_PP_PA_SAT_ZERO_EXP_EN 0x800000
    455 #define MDP_PP_PA_LEFT_HOLD 0x1
    456 #define MDP_PP_PA_RIGHT_HOLD 0x2
    457 struct mdp_pa_v2_data {
    458   uint32_t flags;
    459   uint32_t global_hue_adj;
    460   uint32_t global_sat_adj;
    461   uint32_t global_val_adj;
    462   uint32_t global_cont_adj;
    463   struct mdp_pa_mem_col_cfg skin_cfg;
    464   struct mdp_pa_mem_col_cfg sky_cfg;
    465   struct mdp_pa_mem_col_cfg fol_cfg;
    466   uint32_t six_zone_len;
    467   uint32_t six_zone_thresh;
    468   uint32_t * six_zone_curve_p0;
    469   uint32_t * six_zone_curve_p1;
    470 };
    471 struct mdp_pa_mem_col_data_v1_7 {
    472   uint32_t color_adjust_p0;
    473   uint32_t color_adjust_p1;
    474   uint32_t color_adjust_p2;
    475   uint32_t blend_gain;
    476   uint8_t sat_hold;
    477   uint8_t val_hold;
    478   uint32_t hue_region;
    479   uint32_t sat_region;
    480   uint32_t val_region;
    481 };
    482 struct mdp_pa_data_v1_7 {
    483   uint32_t mode;
    484   uint32_t global_hue_adj;
    485   uint32_t global_sat_adj;
    486   uint32_t global_val_adj;
    487   uint32_t global_cont_adj;
    488   struct mdp_pa_mem_col_data_v1_7 skin_cfg;
    489   struct mdp_pa_mem_col_data_v1_7 sky_cfg;
    490   struct mdp_pa_mem_col_data_v1_7 fol_cfg;
    491   uint32_t six_zone_thresh;
    492   uint32_t six_zone_adj_p0;
    493   uint32_t six_zone_adj_p1;
    494   uint8_t six_zone_sat_hold;
    495   uint8_t six_zone_val_hold;
    496   uint32_t six_zone_len;
    497   uint32_t * six_zone_curve_p0;
    498   uint32_t * six_zone_curve_p1;
    499 };
    500 struct mdp_pa_v2_cfg_data {
    501   uint32_t version;
    502   uint32_t block;
    503   uint32_t flags;
    504   struct mdp_pa_v2_data pa_v2_data;
    505   void * cfg_payload;
    506 };
    507 enum {
    508   mdp_igc_rec601 = 1,
    509   mdp_igc_rec709,
    510   mdp_igc_srgb,
    511   mdp_igc_custom,
    512   mdp_igc_rec_max,
    513 };
    514 struct mdp_igc_lut_data {
    515   uint32_t block;
    516   uint32_t version;
    517   uint32_t len, ops;
    518   uint32_t * c0_c1_data;
    519   uint32_t * c2_data;
    520   void * cfg_payload;
    521 };
    522 struct mdp_igc_lut_data_v1_7 {
    523   uint32_t table_fmt;
    524   uint32_t len;
    525   uint32_t * c0_c1_data;
    526   uint32_t * c2_data;
    527 };
    528 struct mdp_histogram_cfg {
    529   uint32_t ops;
    530   uint32_t block;
    531   uint8_t frame_cnt;
    532   uint8_t bit_mask;
    533   uint16_t num_bins;
    534 };
    535 struct mdp_hist_lut_data_v1_7 {
    536   uint32_t len;
    537   uint32_t * data;
    538 };
    539 struct mdp_hist_lut_data {
    540   uint32_t block;
    541   uint32_t version;
    542   uint32_t hist_lut_first;
    543   uint32_t ops;
    544   uint32_t len;
    545   uint32_t * data;
    546   void * cfg_payload;
    547 };
    548 struct mdp_pcc_coeff {
    549   uint32_t c, r, g, b, rr, gg, bb, rg, gb, rb, rgb_0, rgb_1;
    550 };
    551 struct mdp_pcc_coeff_v1_7 {
    552   uint32_t c, r, g, b, rg, gb, rb, rgb;
    553 };
    554 struct mdp_pcc_data_v1_7 {
    555   struct mdp_pcc_coeff_v1_7 r, g, b;
    556 };
    557 struct mdp_pcc_cfg_data {
    558   uint32_t version;
    559   uint32_t block;
    560   uint32_t ops;
    561   struct mdp_pcc_coeff r, g, b;
    562   void * cfg_payload;
    563 };
    564 enum {
    565   mdp_lut_igc,
    566   mdp_lut_pgc,
    567   mdp_lut_hist,
    568   mdp_lut_rgb,
    569   mdp_lut_max,
    570 };
    571 struct mdp_overlay_pp_params {
    572   uint32_t config_ops;
    573   struct mdp_csc_cfg csc_cfg;
    574   struct mdp_qseed_cfg qseed_cfg[2];
    575   struct mdp_pa_cfg pa_cfg;
    576   struct mdp_pa_v2_data pa_v2_cfg;
    577   struct mdp_igc_lut_data igc_cfg;
    578   struct mdp_sharp_cfg sharp_cfg;
    579   struct mdp_histogram_cfg hist_cfg;
    580   struct mdp_hist_lut_data hist_lut_cfg;
    581   struct mdp_pa_v2_cfg_data pa_v2_cfg_data;
    582   struct mdp_pcc_cfg_data pcc_cfg_data;
    583 };
    584 enum mdss_mdp_blend_op {
    585   BLEND_OP_NOT_DEFINED = 0,
    586   BLEND_OP_OPAQUE,
    587   BLEND_OP_PREMULTIPLIED,
    588   BLEND_OP_COVERAGE,
    589   BLEND_OP_MAX,
    590 };
    591 #define DECIMATED_DIMENSION(dim,deci) (((dim) + ((1 << (deci)) - 1)) >> (deci))
    592 #define MAX_PLANES 4
    593 struct mdp_scale_data {
    594   uint8_t enable_pxl_ext;
    595   int init_phase_x[MAX_PLANES];
    596   int phase_step_x[MAX_PLANES];
    597   int init_phase_y[MAX_PLANES];
    598   int phase_step_y[MAX_PLANES];
    599   int num_ext_pxls_left[MAX_PLANES];
    600   int num_ext_pxls_right[MAX_PLANES];
    601   int num_ext_pxls_top[MAX_PLANES];
    602   int num_ext_pxls_btm[MAX_PLANES];
    603   int left_ftch[MAX_PLANES];
    604   int left_rpt[MAX_PLANES];
    605   int right_ftch[MAX_PLANES];
    606   int right_rpt[MAX_PLANES];
    607   int top_rpt[MAX_PLANES];
    608   int btm_rpt[MAX_PLANES];
    609   int top_ftch[MAX_PLANES];
    610   int btm_ftch[MAX_PLANES];
    611   uint32_t roi_w[MAX_PLANES];
    612 };
    613 enum mdp_overlay_pipe_type {
    614   PIPE_TYPE_AUTO = 0,
    615   PIPE_TYPE_VIG,
    616   PIPE_TYPE_RGB,
    617   PIPE_TYPE_DMA,
    618   PIPE_TYPE_CURSOR,
    619   PIPE_TYPE_MAX,
    620 };
    621 struct mdp_overlay {
    622   struct msmfb_img src;
    623   struct mdp_rect src_rect;
    624   struct mdp_rect dst_rect;
    625   uint32_t z_order;
    626   uint32_t is_fg;
    627   uint32_t alpha;
    628   uint32_t blend_op;
    629   uint32_t transp_mask;
    630   uint32_t flags;
    631   uint32_t pipe_type;
    632   uint32_t id;
    633   uint8_t priority;
    634   uint32_t user_data[6];
    635   uint32_t bg_color;
    636   uint8_t horz_deci;
    637   uint8_t vert_deci;
    638   struct mdp_overlay_pp_params overlay_pp_cfg;
    639   struct mdp_scale_data scale;
    640   uint8_t color_space;
    641   uint32_t frame_rate;
    642 };
    643 struct msmfb_overlay_3d {
    644   uint32_t is_3d;
    645   uint32_t width;
    646   uint32_t height;
    647 };
    648 struct msmfb_overlay_blt {
    649   uint32_t enable;
    650   uint32_t offset;
    651   uint32_t width;
    652   uint32_t height;
    653   uint32_t bpp;
    654 };
    655 struct mdp_histogram {
    656   uint32_t frame_cnt;
    657   uint32_t bin_cnt;
    658   uint32_t * r;
    659   uint32_t * g;
    660   uint32_t * b;
    661 };
    662 #define MISR_CRC_BATCH_SIZE 32
    663 enum {
    664   DISPLAY_MISR_EDP,
    665   DISPLAY_MISR_DSI0,
    666   DISPLAY_MISR_DSI1,
    667   DISPLAY_MISR_HDMI,
    668   DISPLAY_MISR_LCDC,
    669   DISPLAY_MISR_MDP,
    670   DISPLAY_MISR_ATV,
    671   DISPLAY_MISR_DSI_CMD,
    672   DISPLAY_MISR_MAX
    673 };
    674 enum {
    675   MISR_OP_NONE,
    676   MISR_OP_SFM,
    677   MISR_OP_MFM,
    678   MISR_OP_BM,
    679   MISR_OP_MAX
    680 };
    681 struct mdp_misr {
    682   uint32_t block_id;
    683   uint32_t frame_count;
    684   uint32_t crc_op_mode;
    685   uint32_t crc_value[MISR_CRC_BATCH_SIZE];
    686 };
    687 enum {
    688   MDP_BLOCK_RESERVED = 0,
    689   MDP_BLOCK_OVERLAY_0,
    690   MDP_BLOCK_OVERLAY_1,
    691   MDP_BLOCK_VG_1,
    692   MDP_BLOCK_VG_2,
    693   MDP_BLOCK_RGB_1,
    694   MDP_BLOCK_RGB_2,
    695   MDP_BLOCK_DMA_P,
    696   MDP_BLOCK_DMA_S,
    697   MDP_BLOCK_DMA_E,
    698   MDP_BLOCK_OVERLAY_2,
    699   MDP_LOGICAL_BLOCK_DISP_0 = 0x10,
    700   MDP_LOGICAL_BLOCK_DISP_1,
    701   MDP_LOGICAL_BLOCK_DISP_2,
    702   MDP_BLOCK_MAX,
    703 };
    704 struct mdp_histogram_start_req {
    705   uint32_t block;
    706   uint8_t frame_cnt;
    707   uint8_t bit_mask;
    708   uint16_t num_bins;
    709 };
    710 struct mdp_histogram_data {
    711   uint32_t block;
    712   uint32_t bin_cnt;
    713   uint32_t * c0;
    714   uint32_t * c1;
    715   uint32_t * c2;
    716   uint32_t * extra_info;
    717 };
    718 #define GC_LUT_ENTRIES_V1_7 512
    719 struct mdp_ar_gc_lut_data {
    720   uint32_t x_start;
    721   uint32_t slope;
    722   uint32_t offset;
    723 };
    724 #define MDP_PP_PGC_ROUNDING_ENABLE 0x10
    725 struct mdp_pgc_lut_data {
    726   uint32_t version;
    727   uint32_t block;
    728   uint32_t flags;
    729   uint8_t num_r_stages;
    730   uint8_t num_g_stages;
    731   uint8_t num_b_stages;
    732   struct mdp_ar_gc_lut_data * r_data;
    733   struct mdp_ar_gc_lut_data * g_data;
    734   struct mdp_ar_gc_lut_data * b_data;
    735   void * cfg_payload;
    736 };
    737 #define PGC_LUT_ENTRIES 1024
    738 struct mdp_pgc_lut_data_v1_7 {
    739   uint32_t len;
    740   uint32_t * c0_data;
    741   uint32_t * c1_data;
    742   uint32_t * c2_data;
    743 };
    744 struct mdp_rgb_lut_data {
    745   uint32_t flags;
    746   uint32_t lut_type;
    747   struct fb_cmap cmap;
    748 };
    749 enum {
    750   mdp_rgb_lut_gc,
    751   mdp_rgb_lut_hist,
    752 };
    753 struct mdp_lut_cfg_data {
    754   uint32_t lut_type;
    755   union {
    756     struct mdp_igc_lut_data igc_lut_data;
    757     struct mdp_pgc_lut_data pgc_lut_data;
    758     struct mdp_hist_lut_data hist_lut_data;
    759     struct mdp_rgb_lut_data rgb_lut_data;
    760   } data;
    761 };
    762 struct mdp_bl_scale_data {
    763   uint32_t min_lvl;
    764   uint32_t scale;
    765 };
    766 struct mdp_pa_cfg_data {
    767   uint32_t block;
    768   struct mdp_pa_cfg pa_data;
    769 };
    770 #define MDP_DITHER_DATA_V1_7_SZ 16
    771 struct mdp_dither_data_v1_7 {
    772   uint32_t g_y_depth;
    773   uint32_t r_cr_depth;
    774   uint32_t b_cb_depth;
    775   uint32_t len;
    776   uint32_t data[MDP_DITHER_DATA_V1_7_SZ];
    777   uint32_t temporal_en;
    778 };
    779 struct mdp_dither_cfg_data {
    780   uint32_t version;
    781   uint32_t block;
    782   uint32_t flags;
    783   uint32_t mode;
    784   uint32_t g_y_depth;
    785   uint32_t r_cr_depth;
    786   uint32_t b_cb_depth;
    787   void * cfg_payload;
    788 };
    789 #define MDP_GAMUT_TABLE_NUM 8
    790 #define MDP_GAMUT_TABLE_NUM_V1_7 4
    791 #define MDP_GAMUT_SCALE_OFF_TABLE_NUM 3
    792 #define MDP_GAMUT_TABLE_V1_7_SZ 1229
    793 #define MDP_GAMUT_SCALE_OFF_SZ 16
    794 #define MDP_GAMUT_TABLE_V1_7_COARSE_SZ 32
    795 struct mdp_gamut_cfg_data {
    796   uint32_t block;
    797   uint32_t flags;
    798   uint32_t version;
    799   uint32_t gamut_first;
    800   uint32_t tbl_size[MDP_GAMUT_TABLE_NUM];
    801   uint16_t * r_tbl[MDP_GAMUT_TABLE_NUM];
    802   uint16_t * g_tbl[MDP_GAMUT_TABLE_NUM];
    803   uint16_t * b_tbl[MDP_GAMUT_TABLE_NUM];
    804   void * cfg_payload;
    805 };
    806 enum {
    807   mdp_gamut_fine_mode = 0x1,
    808   mdp_gamut_coarse_mode,
    809 };
    810 struct mdp_gamut_data_v1_7 {
    811   uint32_t mode;
    812   uint32_t map_en;
    813   uint32_t tbl_size[MDP_GAMUT_TABLE_NUM_V1_7];
    814   uint32_t * c0_data[MDP_GAMUT_TABLE_NUM_V1_7];
    815   uint32_t * c1_c2_data[MDP_GAMUT_TABLE_NUM_V1_7];
    816   uint32_t tbl_scale_off_sz[MDP_GAMUT_SCALE_OFF_TABLE_NUM];
    817   uint32_t * scale_off_data[MDP_GAMUT_SCALE_OFF_TABLE_NUM];
    818 };
    819 struct mdp_calib_config_data {
    820   uint32_t ops;
    821   uint32_t addr;
    822   uint32_t data;
    823 };
    824 struct mdp_calib_config_buffer {
    825   uint32_t ops;
    826   uint32_t size;
    827   uint32_t * buffer;
    828 };
    829 struct mdp_calib_dcm_state {
    830   uint32_t ops;
    831   uint32_t dcm_state;
    832 };
    833 enum {
    834   DCM_UNINIT,
    835   DCM_UNBLANK,
    836   DCM_ENTER,
    837   DCM_EXIT,
    838   DCM_BLANK,
    839   DTM_ENTER,
    840   DTM_EXIT,
    841 };
    842 #define MDSS_PP_SPLIT_LEFT_ONLY 0x10000000
    843 #define MDSS_PP_SPLIT_RIGHT_ONLY 0x20000000
    844 #define MDSS_PP_SPLIT_MASK 0x30000000
    845 #define MDSS_MAX_BL_BRIGHTNESS 255
    846 #define AD_BL_LIN_LEN 256
    847 #define AD_BL_ATT_LUT_LEN 33
    848 #define MDSS_AD_MODE_AUTO_BL 0x0
    849 #define MDSS_AD_MODE_AUTO_STR 0x1
    850 #define MDSS_AD_MODE_TARG_STR 0x3
    851 #define MDSS_AD_MODE_MAN_STR 0x7
    852 #define MDSS_AD_MODE_CALIB 0xF
    853 #define MDP_PP_AD_INIT 0x10
    854 #define MDP_PP_AD_CFG 0x20
    855 struct mdss_ad_init {
    856   uint32_t asym_lut[33];
    857   uint32_t color_corr_lut[33];
    858   uint8_t i_control[2];
    859   uint16_t black_lvl;
    860   uint16_t white_lvl;
    861   uint8_t var;
    862   uint8_t limit_ampl;
    863   uint8_t i_dither;
    864   uint8_t slope_max;
    865   uint8_t slope_min;
    866   uint8_t dither_ctl;
    867   uint8_t format;
    868   uint8_t auto_size;
    869   uint16_t frame_w;
    870   uint16_t frame_h;
    871   uint8_t logo_v;
    872   uint8_t logo_h;
    873   uint32_t alpha;
    874   uint32_t alpha_base;
    875   uint32_t al_thresh;
    876   uint32_t bl_lin_len;
    877   uint32_t bl_att_len;
    878   uint32_t * bl_lin;
    879   uint32_t * bl_lin_inv;
    880   uint32_t * bl_att_lut;
    881 };
    882 #define MDSS_AD_BL_CTRL_MODE_EN 1
    883 #define MDSS_AD_BL_CTRL_MODE_DIS 0
    884 struct mdss_ad_cfg {
    885   uint32_t mode;
    886   uint32_t al_calib_lut[33];
    887   uint16_t backlight_min;
    888   uint16_t backlight_max;
    889   uint16_t backlight_scale;
    890   uint16_t amb_light_min;
    891   uint16_t filter[2];
    892   uint16_t calib[4];
    893   uint8_t strength_limit;
    894   uint8_t t_filter_recursion;
    895   uint16_t stab_itr;
    896   uint32_t bl_ctrl_mode;
    897 };
    898 struct mdss_ad_init_cfg {
    899   uint32_t ops;
    900   union {
    901     struct mdss_ad_init init;
    902     struct mdss_ad_cfg cfg;
    903   } params;
    904 };
    905 struct mdss_ad_input {
    906   uint32_t mode;
    907   union {
    908     uint32_t amb_light;
    909     uint32_t strength;
    910     uint32_t calib_bl;
    911   } in;
    912   uint32_t output;
    913 };
    914 #define MDSS_CALIB_MODE_BL 0x1
    915 struct mdss_calib_cfg {
    916   uint32_t ops;
    917   uint32_t calib_mask;
    918 };
    919 enum {
    920   mdp_op_pcc_cfg,
    921   mdp_op_csc_cfg,
    922   mdp_op_lut_cfg,
    923   mdp_op_qseed_cfg,
    924   mdp_bl_scale_cfg,
    925   mdp_op_pa_cfg,
    926   mdp_op_pa_v2_cfg,
    927   mdp_op_dither_cfg,
    928   mdp_op_gamut_cfg,
    929   mdp_op_calib_cfg,
    930   mdp_op_ad_cfg,
    931   mdp_op_ad_input,
    932   mdp_op_calib_mode,
    933   mdp_op_calib_buffer,
    934   mdp_op_calib_dcm_state,
    935   mdp_op_max,
    936 };
    937 enum {
    938   WB_FORMAT_NV12,
    939   WB_FORMAT_RGB_565,
    940   WB_FORMAT_RGB_888,
    941   WB_FORMAT_xRGB_8888,
    942   WB_FORMAT_ARGB_8888,
    943   WB_FORMAT_BGRA_8888,
    944   WB_FORMAT_BGRX_8888,
    945   WB_FORMAT_ARGB_8888_INPUT_ALPHA
    946 };
    947 struct msmfb_mdp_pp {
    948   uint32_t op;
    949   union {
    950     struct mdp_pcc_cfg_data pcc_cfg_data;
    951     struct mdp_csc_cfg_data csc_cfg_data;
    952     struct mdp_lut_cfg_data lut_cfg_data;
    953     struct mdp_qseed_cfg_data qseed_cfg_data;
    954     struct mdp_bl_scale_data bl_scale_data;
    955     struct mdp_pa_cfg_data pa_cfg_data;
    956     struct mdp_pa_v2_cfg_data pa_v2_cfg_data;
    957     struct mdp_dither_cfg_data dither_cfg_data;
    958     struct mdp_gamut_cfg_data gamut_cfg_data;
    959     struct mdp_calib_config_data calib_cfg;
    960     struct mdss_ad_init_cfg ad_init_cfg;
    961     struct mdss_calib_cfg mdss_calib_cfg;
    962     struct mdss_ad_input ad_input;
    963     struct mdp_calib_config_buffer calib_buffer;
    964     struct mdp_calib_dcm_state calib_dcm;
    965   } data;
    966 };
    967 #define FB_METADATA_VIDEO_INFO_CODE_SUPPORT 1
    968 enum {
    969   metadata_op_none,
    970   metadata_op_base_blend,
    971   metadata_op_frame_rate,
    972   metadata_op_vic,
    973   metadata_op_wb_format,
    974   metadata_op_wb_secure,
    975   metadata_op_get_caps,
    976   metadata_op_crc,
    977   metadata_op_get_ion_fd,
    978   metadata_op_max
    979 };
    980 struct mdp_blend_cfg {
    981   uint32_t is_premultiplied;
    982 };
    983 struct mdp_mixer_cfg {
    984   uint32_t writeback_format;
    985   uint32_t alpha;
    986 };
    987 struct mdss_hw_caps {
    988   uint32_t mdp_rev;
    989   uint8_t rgb_pipes;
    990   uint8_t vig_pipes;
    991   uint8_t dma_pipes;
    992   uint8_t max_smp_cnt;
    993   uint8_t smp_per_pipe;
    994   uint32_t features;
    995 };
    996 struct msmfb_metadata {
    997   uint32_t op;
    998   uint32_t flags;
    999   union {
   1000     struct mdp_misr misr_request;
   1001     struct mdp_blend_cfg blend_cfg;
   1002     struct mdp_mixer_cfg mixer_cfg;
   1003     uint32_t panel_frame_rate;
   1004     uint32_t video_info_code;
   1005     struct mdss_hw_caps caps;
   1006     uint8_t secure_en;
   1007     int fbmem_ionfd;
   1008   } data;
   1009 };
   1010 #define MDP_MAX_FENCE_FD 32
   1011 #define MDP_BUF_SYNC_FLAG_WAIT 1
   1012 #define MDP_BUF_SYNC_FLAG_RETIRE_FENCE 0x10
   1013 struct mdp_buf_sync {
   1014   uint32_t flags;
   1015   uint32_t acq_fen_fd_cnt;
   1016   uint32_t session_id;
   1017   int * acq_fen_fd;
   1018   int * rel_fen_fd;
   1019   int * retire_fen_fd;
   1020 };
   1021 struct mdp_async_blit_req_list {
   1022   struct mdp_buf_sync sync;
   1023   uint32_t count;
   1024   struct mdp_blit_req req[];
   1025 };
   1026 #define MDP_DISPLAY_COMMIT_OVERLAY 1
   1027 struct mdp_display_commit {
   1028   uint32_t flags;
   1029   uint32_t wait_for_finish;
   1030   struct fb_var_screeninfo var;
   1031   struct mdp_rect l_roi;
   1032   struct mdp_rect r_roi;
   1033 };
   1034 struct mdp_overlay_list {
   1035   uint32_t num_overlays;
   1036   struct mdp_overlay * * overlay_list;
   1037   uint32_t flags;
   1038   uint32_t processed_overlays;
   1039 };
   1040 struct mdp_page_protection {
   1041   uint32_t page_protection;
   1042 };
   1043 struct mdp_mixer_info {
   1044   int pndx;
   1045   int pnum;
   1046   int ptype;
   1047   int mixer_num;
   1048   int z_order;
   1049 };
   1050 #define MAX_PIPE_PER_MIXER 7
   1051 struct msmfb_mixer_info_req {
   1052   int mixer_num;
   1053   int cnt;
   1054   struct mdp_mixer_info info[MAX_PIPE_PER_MIXER];
   1055 };
   1056 enum {
   1057   DISPLAY_SUBSYSTEM_ID,
   1058   ROTATOR_SUBSYSTEM_ID,
   1059 };
   1060 enum {
   1061   MDP_IOMMU_DOMAIN_CP,
   1062   MDP_IOMMU_DOMAIN_NS,
   1063 };
   1064 enum {
   1065   MDP_WRITEBACK_MIRROR_OFF,
   1066   MDP_WRITEBACK_MIRROR_ON,
   1067   MDP_WRITEBACK_MIRROR_PAUSE,
   1068   MDP_WRITEBACK_MIRROR_RESUME,
   1069 };
   1070 enum mdp_color_space {
   1071   MDP_CSC_ITU_R_601,
   1072   MDP_CSC_ITU_R_601_FR,
   1073   MDP_CSC_ITU_R_709,
   1074 };
   1075 #define MDP_CSC_ITU_R_2020 (MDP_CSC_ITU_R_709 + 1)
   1076 #define MDP_CSC_ITU_R_2020_FR (MDP_CSC_ITU_R_2020 + 1)
   1077 enum {
   1078   mdp_igc_v1_7 = 1,
   1079   mdp_igc_vmax,
   1080   mdp_hist_lut_v1_7,
   1081   mdp_hist_lut_vmax,
   1082   mdp_pgc_v1_7,
   1083   mdp_pgc_vmax,
   1084   mdp_dither_v1_7,
   1085   mdp_dither_vmax,
   1086   mdp_gamut_v1_7,
   1087   mdp_gamut_vmax,
   1088   mdp_pa_v1_7,
   1089   mdp_pa_vmax,
   1090   mdp_pcc_v1_7,
   1091   mdp_pcc_vmax,
   1092   mdp_pp_legacy,
   1093 };
   1094 enum {
   1095   IGC = 1,
   1096   PCC,
   1097   GC,
   1098   PA,
   1099   GAMUT,
   1100   DITHER,
   1101   QSEED,
   1102   HIST_LUT,
   1103   HIST,
   1104   PP_FEATURE_MAX,
   1105 };
   1106 struct mdp_pp_feature_version {
   1107   uint32_t pp_feature;
   1108   uint32_t version_info;
   1109 };
   1110 #endif
   1111 
   1112