1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka /* This header is for communication between userspace driver and kernel driver */ 18*437bfbebSnyanmisaka 19*437bfbebSnyanmisaka #ifndef __IEP_H__ 20*437bfbebSnyanmisaka #define __IEP_H__ 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka #include <sys/ioctl.h> 23*437bfbebSnyanmisaka #include "rk_type.h" 24*437bfbebSnyanmisaka 25*437bfbebSnyanmisaka /* Capability for current iep version using by userspace to determine iep features */ 26*437bfbebSnyanmisaka typedef struct IepHwCap_t { 27*437bfbebSnyanmisaka RK_U8 scaling_supported; 28*437bfbebSnyanmisaka RK_U8 i4_deinterlace_supported; 29*437bfbebSnyanmisaka RK_U8 i2_deinterlace_supported; 30*437bfbebSnyanmisaka RK_U8 compression_noise_reduction_supported; 31*437bfbebSnyanmisaka RK_U8 sampling_noise_reduction_supported; 32*437bfbebSnyanmisaka RK_U8 hsb_enhancement_supported; 33*437bfbebSnyanmisaka RK_U8 cg_enhancement_supported; 34*437bfbebSnyanmisaka RK_U8 direct_path_supported; 35*437bfbebSnyanmisaka RK_U16 max_dynamic_width; 36*437bfbebSnyanmisaka RK_U16 max_dynamic_height; 37*437bfbebSnyanmisaka RK_U16 max_static_width; 38*437bfbebSnyanmisaka RK_U16 max_static_height; 39*437bfbebSnyanmisaka RK_U8 max_enhance_radius; 40*437bfbebSnyanmisaka } IepHwCap; 41*437bfbebSnyanmisaka 42*437bfbebSnyanmisaka #define IEP_IOC_MAGIC 'i' 43*437bfbebSnyanmisaka 44*437bfbebSnyanmisaka #define IEP_SET_PARAMETER_REQ _IOW(IEP_IOC_MAGIC, 1, unsigned long) 45*437bfbebSnyanmisaka #define IEP_SET_PARAMETER_DEINTERLACE _IOW(IEP_IOC_MAGIC, 2, unsigned long) 46*437bfbebSnyanmisaka #define IEP_SET_PARAMETER_ENHANCE _IOW(IEP_IOC_MAGIC, 3, unsigned long) 47*437bfbebSnyanmisaka #define IEP_SET_PARAMETER_CONVERT _IOW(IEP_IOC_MAGIC, 4, unsigned long) 48*437bfbebSnyanmisaka #define IEP_SET_PARAMETER_SCALE _IOW(IEP_IOC_MAGIC, 5, unsigned long) 49*437bfbebSnyanmisaka #define IEP_GET_RESULT_SYNC _IOW(IEP_IOC_MAGIC, 6, unsigned long) 50*437bfbebSnyanmisaka #define IEP_GET_RESULT_ASYNC _IOW(IEP_IOC_MAGIC, 7, unsigned long) 51*437bfbebSnyanmisaka #define IEP_SET_PARAMETER _IOW(IEP_IOC_MAGIC, 8, unsigned long) 52*437bfbebSnyanmisaka #define IEP_RELEASE_CURRENT_TASK _IOW(IEP_IOC_MAGIC, 9, unsigned long) 53*437bfbebSnyanmisaka #define IEP_GET_IOMMU_STATE _IOR(IEP_IOC_MAGIC, 10, unsigned long) 54*437bfbebSnyanmisaka #define IEP_QUERY_CAP _IOR(IEP_IOC_MAGIC, 11, IepHwCap) 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka enum { 57*437bfbebSnyanmisaka DEI_MODE_BYPASS_DIS = 0x0, 58*437bfbebSnyanmisaka DEI_MODE_I4O2 = 0x1, 59*437bfbebSnyanmisaka DEI_MODE_I4O1B = 0x2, 60*437bfbebSnyanmisaka DEI_MODE_I4O1T = 0x3, 61*437bfbebSnyanmisaka DEI_MODE_I2O1B = 0x4, 62*437bfbebSnyanmisaka DEI_MODE_I2O1T = 0x5, 63*437bfbebSnyanmisaka DEI_MODE_BYPASS = 0x6, 64*437bfbebSnyanmisaka }; 65*437bfbebSnyanmisaka 66*437bfbebSnyanmisaka // for rgb_enhance_mode 67*437bfbebSnyanmisaka enum { 68*437bfbebSnyanmisaka RGB_ENHANCE_BYPASS = 0x0, 69*437bfbebSnyanmisaka RGB_ENHANCE_DENOISE = 0x1, 70*437bfbebSnyanmisaka RGB_ENHANCE_DETAIL = 0x2, 71*437bfbebSnyanmisaka RGB_ENHANCE_EDGE = 0x3, 72*437bfbebSnyanmisaka }; 73*437bfbebSnyanmisaka 74*437bfbebSnyanmisaka // for rgb_contrast_enhance_mode 75*437bfbebSnyanmisaka enum { 76*437bfbebSnyanmisaka RGB_CONTRAST_CC_P_DDE = 0x0, // cg prior to dde 77*437bfbebSnyanmisaka RGB_CONTRAST_DDE_P_CC = 0x1, // dde prior to cg 78*437bfbebSnyanmisaka }; 79*437bfbebSnyanmisaka 80*437bfbebSnyanmisaka // for video mode 81*437bfbebSnyanmisaka enum { 82*437bfbebSnyanmisaka BLACK_SCREEN = 0x0, 83*437bfbebSnyanmisaka BLUE_SCREEN = 0x1, 84*437bfbebSnyanmisaka COLOR_BAR = 0x2, 85*437bfbebSnyanmisaka NORMAL_MODE = 0x3, 86*437bfbebSnyanmisaka }; 87*437bfbebSnyanmisaka 88*437bfbebSnyanmisaka /* 89*437bfbebSnyanmisaka // Alpha Red Green Blue 90*437bfbebSnyanmisaka { 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_RGBA }, // IEP_FORMAT_ARGB_8888 91*437bfbebSnyanmisaka { 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // IEP_FORMAT_ABGR_8888 92*437bfbebSnyanmisaka { 4, 32, {{ 8, 0, 32,24, 24,16, 16, 8 }}, GGL_RGB }, // IEP_FORMAT_RGBA_8888 93*437bfbebSnyanmisaka { 4, 32, {{ 8, 0, 16, 8, 24,16, 32,24 }}, GGL_BGRA }, // IEP_FORMAT_BGRA_8888 94*437bfbebSnyanmisaka { 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, // IEP_FORMAT_RGB_565 95*437bfbebSnyanmisaka { 2, 16, {{ 0, 0, 5, 0, 11, 5, 16,11 }}, GGL_RGB }, // IEP_FORMAT_RGB_565 96*437bfbebSnyanmisaka */ 97*437bfbebSnyanmisaka 98*437bfbebSnyanmisaka // for hardware format value 99*437bfbebSnyanmisaka enum { 100*437bfbebSnyanmisaka IEP_MSG_FMT_ARGB_8888 = 0x0, 101*437bfbebSnyanmisaka IEP_MSG_FMT_ABGR_8888 = 0x1, 102*437bfbebSnyanmisaka IEP_MSG_FMT_RGBA_8888 = 0x2, 103*437bfbebSnyanmisaka IEP_MSG_FMT_BGRA_8888 = 0x3, 104*437bfbebSnyanmisaka IEP_MSG_FMT_RGB_565 = 0x4, 105*437bfbebSnyanmisaka IEP_MSG_FMT_BGR_565 = 0x5, 106*437bfbebSnyanmisaka 107*437bfbebSnyanmisaka IEP_MSG_FMT_YCbCr_422_SP = 0x10, 108*437bfbebSnyanmisaka IEP_MSG_FMT_YCbCr_422_P = 0x11, 109*437bfbebSnyanmisaka IEP_MSG_FMT_YCbCr_420_SP = 0x12, 110*437bfbebSnyanmisaka IEP_MSG_FMT_YCbCr_420_P = 0x13, 111*437bfbebSnyanmisaka IEP_MSG_FMT_YCrCb_422_SP = 0x14, 112*437bfbebSnyanmisaka IEP_MSG_FMT_YCrCb_422_P = 0x15, // same as IEP_FORMAT_YCbCr_422_P 113*437bfbebSnyanmisaka IEP_MSG_FMT_YCrCb_420_SP = 0x16, 114*437bfbebSnyanmisaka IEP_MSG_FMT_YCrCb_420_P = 0x17, // same as IEP_FORMAT_YCbCr_420_P 115*437bfbebSnyanmisaka }; 116*437bfbebSnyanmisaka 117*437bfbebSnyanmisaka /* 118*437bfbebSnyanmisaka * + <--------------+ virtual width +------------> + 119*437bfbebSnyanmisaka * | | 120*437bfbebSnyanmisaka * +-------------------------------------------------+---+---+ 121*437bfbebSnyanmisaka * | | ^ 122*437bfbebSnyanmisaka * | + <---+ actual width +--> + | | 123*437bfbebSnyanmisaka * | | | | | 124*437bfbebSnyanmisaka * | +---------------------------+---+--+ | | 125*437bfbebSnyanmisaka * | | | ^ | + 126*437bfbebSnyanmisaka * | | | + | virtual 127*437bfbebSnyanmisaka * | | | actual | height 128*437bfbebSnyanmisaka * | | | height | + 129*437bfbebSnyanmisaka * | | | + | | 130*437bfbebSnyanmisaka * | | | ^ | | 131*437bfbebSnyanmisaka * | +---------------------------+---+--+ | | 132*437bfbebSnyanmisaka * | | ^ 133*437bfbebSnyanmisaka * +-------------------------------------------------+---+---+ 134*437bfbebSnyanmisaka */ 135*437bfbebSnyanmisaka // NOTE: This is for kernel driver communication. keep it for compatibility 136*437bfbebSnyanmisaka typedef struct IepMsgImg_t { 137*437bfbebSnyanmisaka RK_U16 act_w; // act_width 138*437bfbebSnyanmisaka RK_U16 act_h; // act_height 139*437bfbebSnyanmisaka RK_S16 x_off; // x offset for the vir,word unit 140*437bfbebSnyanmisaka RK_S16 y_off; // y offset for the vir,word unit 141*437bfbebSnyanmisaka 142*437bfbebSnyanmisaka RK_U16 vir_w; // unit :pix 143*437bfbebSnyanmisaka RK_U16 vir_h; // unit :pix 144*437bfbebSnyanmisaka RK_U32 format; 145*437bfbebSnyanmisaka RK_U32 mem_addr; 146*437bfbebSnyanmisaka RK_U32 uv_addr; 147*437bfbebSnyanmisaka RK_U32 v_addr; 148*437bfbebSnyanmisaka 149*437bfbebSnyanmisaka RK_U8 rb_swap; // not be used 150*437bfbebSnyanmisaka RK_U8 uv_swap; // not be used 151*437bfbebSnyanmisaka 152*437bfbebSnyanmisaka RK_U8 alpha_swap; // not be used 153*437bfbebSnyanmisaka } IepMsgImg; 154*437bfbebSnyanmisaka 155*437bfbebSnyanmisaka typedef struct IepMsg_t { 156*437bfbebSnyanmisaka IepMsgImg src; // src active window 157*437bfbebSnyanmisaka IepMsgImg dst; // src virtual window 158*437bfbebSnyanmisaka 159*437bfbebSnyanmisaka IepMsgImg src1; 160*437bfbebSnyanmisaka IepMsgImg dst1; 161*437bfbebSnyanmisaka 162*437bfbebSnyanmisaka IepMsgImg src_itemp; 163*437bfbebSnyanmisaka IepMsgImg src_ftemp; 164*437bfbebSnyanmisaka 165*437bfbebSnyanmisaka IepMsgImg dst_itemp; 166*437bfbebSnyanmisaka IepMsgImg dst_ftemp; 167*437bfbebSnyanmisaka 168*437bfbebSnyanmisaka RK_U8 dither_up_en; 169*437bfbebSnyanmisaka RK_U8 dither_down_en; //not to be used 170*437bfbebSnyanmisaka 171*437bfbebSnyanmisaka RK_U8 yuv2rgb_mode; 172*437bfbebSnyanmisaka RK_U8 rgb2yuv_mode; 173*437bfbebSnyanmisaka 174*437bfbebSnyanmisaka RK_U8 global_alpha_value; 175*437bfbebSnyanmisaka 176*437bfbebSnyanmisaka RK_U8 rgb2yuv_clip_en; 177*437bfbebSnyanmisaka RK_U8 yuv2rgb_clip_en; 178*437bfbebSnyanmisaka 179*437bfbebSnyanmisaka RK_U8 lcdc_path_en; 180*437bfbebSnyanmisaka RK_S32 off_x; 181*437bfbebSnyanmisaka RK_S32 off_y; 182*437bfbebSnyanmisaka RK_S32 width; 183*437bfbebSnyanmisaka RK_S32 height; 184*437bfbebSnyanmisaka RK_S32 layer; 185*437bfbebSnyanmisaka 186*437bfbebSnyanmisaka RK_U8 yuv_3D_denoise_en; 187*437bfbebSnyanmisaka 188*437bfbebSnyanmisaka /// yuv color enhance 189*437bfbebSnyanmisaka RK_U8 yuv_enhance_en; 190*437bfbebSnyanmisaka RK_S32 sat_con_int; 191*437bfbebSnyanmisaka RK_S32 contrast_int; 192*437bfbebSnyanmisaka RK_S32 cos_hue_int; 193*437bfbebSnyanmisaka RK_S32 sin_hue_int; 194*437bfbebSnyanmisaka RK_S8 yuv_enh_brightness; // -32 < brightness < 31 195*437bfbebSnyanmisaka RK_U8 video_mode; // 0 ~ 3 196*437bfbebSnyanmisaka RK_U8 color_bar_y; // 0 ~ 127 197*437bfbebSnyanmisaka RK_U8 color_bar_u; // 0 ~ 127 198*437bfbebSnyanmisaka RK_U8 color_bar_v; // 0 ~ 127 199*437bfbebSnyanmisaka 200*437bfbebSnyanmisaka 201*437bfbebSnyanmisaka RK_U8 rgb_enhance_en; // I don't know its usage 202*437bfbebSnyanmisaka 203*437bfbebSnyanmisaka RK_U8 rgb_color_enhance_en; // sw_rgb_color_enh_en 204*437bfbebSnyanmisaka RK_U32 rgb_enh_coe; 205*437bfbebSnyanmisaka 206*437bfbebSnyanmisaka RK_U8 rgb_enhance_mode; // sw_rgb_enh_sel,dde sel 207*437bfbebSnyanmisaka 208*437bfbebSnyanmisaka RK_U8 rgb_cg_en; // sw_rgb_con_gam_en 209*437bfbebSnyanmisaka RK_U32 cg_tab[192]; 210*437bfbebSnyanmisaka 211*437bfbebSnyanmisaka // sw_con_gam_order; 0 cg prior to dde, 1 dde prior to cg 212*437bfbebSnyanmisaka RK_U8 rgb_contrast_enhance_mode; 213*437bfbebSnyanmisaka 214*437bfbebSnyanmisaka RK_S32 enh_threshold; 215*437bfbebSnyanmisaka RK_S32 enh_alpha; 216*437bfbebSnyanmisaka RK_S32 enh_radius; 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka RK_U8 scale_up_mode; 219*437bfbebSnyanmisaka 220*437bfbebSnyanmisaka RK_U8 field_order; 221*437bfbebSnyanmisaka RK_U8 dein_mode; 222*437bfbebSnyanmisaka //DIL High Frequency 223*437bfbebSnyanmisaka RK_U8 dein_high_fre_en; 224*437bfbebSnyanmisaka RK_U8 dein_high_fre_fct; 225*437bfbebSnyanmisaka //DIL EI 226*437bfbebSnyanmisaka RK_U8 dein_ei_mode; 227*437bfbebSnyanmisaka RK_U8 dein_ei_smooth; 228*437bfbebSnyanmisaka RK_U8 dein_ei_sel; 229*437bfbebSnyanmisaka RK_U8 dein_ei_radius; // when dein_ei_sel=0 will be used 230*437bfbebSnyanmisaka 231*437bfbebSnyanmisaka RK_U8 dil_mtn_tbl_en; 232*437bfbebSnyanmisaka RK_U32 dil_mtn_tbl[8]; 233*437bfbebSnyanmisaka 234*437bfbebSnyanmisaka RK_U8 vir_addr_enable; 235*437bfbebSnyanmisaka 236*437bfbebSnyanmisaka void *base; 237*437bfbebSnyanmisaka } IepMsg; 238*437bfbebSnyanmisaka 239*437bfbebSnyanmisaka #endif /* __IEP_H__ */ 240