1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _RGA_DRIVER_H_ 3*4882a593Smuzhiyun #define _RGA_DRIVER_H_ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/mutex.h> 6*4882a593Smuzhiyun #include <linux/scatterlist.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* Use 'r' as magic number */ 9*4882a593Smuzhiyun #define RGA_IOC_MAGIC 'r' 10*4882a593Smuzhiyun #define RGA_IOW(nr, type) _IOW(RGA_IOC_MAGIC, nr, type) 11*4882a593Smuzhiyun #define RGA_IOR(nr, type) _IOR(RGA_IOC_MAGIC, nr, type) 12*4882a593Smuzhiyun #define RGA_IOWR(nr, type) _IOWR(RGA_IOC_MAGIC, nr, type) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define RGA_IOC_GET_DRVIER_VERSION RGA_IOR(0x1, struct rga_version_t) 15*4882a593Smuzhiyun #define RGA_IOC_GET_HW_VERSION RGA_IOR(0x2, struct rga_hw_versions_t) 16*4882a593Smuzhiyun #define RGA_IOC_IMPORT_BUFFER RGA_IOWR(0x3, struct rga_buffer_pool) 17*4882a593Smuzhiyun #define RGA_IOC_RELEASE_BUFFER RGA_IOW(0x4, struct rga_buffer_pool) 18*4882a593Smuzhiyun #define RGA_IOC_REQUEST_CREATE RGA_IOR(0x5, uint32_t) 19*4882a593Smuzhiyun #define RGA_IOC_REQUEST_SUBMIT RGA_IOWR(0x6, struct rga_user_request) 20*4882a593Smuzhiyun #define RGA_IOC_REQUEST_CONFIG RGA_IOWR(0x7, struct rga_user_request) 21*4882a593Smuzhiyun #define RGA_IOC_REQUEST_CANCEL RGA_IOWR(0x8, uint32_t) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define RGA_BLIT_SYNC 0x5017 24*4882a593Smuzhiyun #define RGA_BLIT_ASYNC 0x5018 25*4882a593Smuzhiyun #define RGA_FLUSH 0x5019 26*4882a593Smuzhiyun #define RGA_GET_RESULT 0x501a 27*4882a593Smuzhiyun #define RGA_GET_VERSION 0x501b 28*4882a593Smuzhiyun #define RGA_CACHE_FLUSH 0x501c 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define RGA2_GET_VERSION 0x601b 31*4882a593Smuzhiyun #define RGA_IMPORT_DMA 0x601d 32*4882a593Smuzhiyun #define RGA_RELEASE_DMA 0x601e 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define RGA_TASK_NUM_MAX 50 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define RGA_OUT_OF_RESOURCES -10 37*4882a593Smuzhiyun #define RGA_MALLOC_ERROR -11 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define SCALE_DOWN_LARGE 1 40*4882a593Smuzhiyun #define SCALE_UP_LARGE 1 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define RGA_BUFFER_POOL_SIZE_MAX 40 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define RGA3_MAJOR_VERSION_MASK (0xF0000000) 45*4882a593Smuzhiyun #define RGA3_MINOR_VERSION_MASK (0x0FF00000) 46*4882a593Smuzhiyun #define RGA3_SVN_VERSION_MASK (0x000FFFFF) 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #define RGA2_MAJOR_VERSION_MASK (0xFF000000) 49*4882a593Smuzhiyun #define RGA2_MINOR_VERSION_MASK (0x00F00000) 50*4882a593Smuzhiyun #define RGA2_SVN_VERSION_MASK (0x000FFFFF) 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define RGA_MODE_ROTATE_0 (1<<0) 53*4882a593Smuzhiyun #define RGA_MODE_ROTATE_90 (1<<1) 54*4882a593Smuzhiyun #define RGA_MODE_ROTATE_180 (1<<2) 55*4882a593Smuzhiyun #define RGA_MODE_ROTATE_270 (1<<3) 56*4882a593Smuzhiyun #define RGA_MODE_X_MIRROR (1<<4) 57*4882a593Smuzhiyun #define RGA_MODE_Y_MIRROR (1<<5) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define RGA_MODE_CSC_BT601L (1<<0) 60*4882a593Smuzhiyun #define RGA_MODE_CSC_BT601F (1<<1) 61*4882a593Smuzhiyun #define RGA_MODE_CSC_BT709 (1<<2) 62*4882a593Smuzhiyun #define RGA_MODE_CSC_BT2020 (1<<3) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define RGA_MODE_ROTATE_MASK (\ 65*4882a593Smuzhiyun RGA_MODE_ROTATE_0 | \ 66*4882a593Smuzhiyun RGA_MODE_ROTATE_90 | \ 67*4882a593Smuzhiyun RGA_MODE_ROTATE_180 | \ 68*4882a593Smuzhiyun RGA_MODE_ROTATE_270 | \ 69*4882a593Smuzhiyun RGA_MODE_X_MIRROR | \ 70*4882a593Smuzhiyun RGA_MODE_Y_MIRROR) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun enum rga_memory_type { 73*4882a593Smuzhiyun RGA_DMA_BUFFER = 0, 74*4882a593Smuzhiyun RGA_VIRTUAL_ADDRESS, 75*4882a593Smuzhiyun RGA_PHYSICAL_ADDRESS, 76*4882a593Smuzhiyun RGA_DMA_BUFFER_PTR, 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun enum rga_scale_up_mode { 80*4882a593Smuzhiyun RGA_SCALE_UP_NONE = 0x0, 81*4882a593Smuzhiyun RGA_SCALE_UP_BIC = 0x1, 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun enum rga_scale_down_mode { 85*4882a593Smuzhiyun RGA_SCALE_DOWN_NONE = 0x0, 86*4882a593Smuzhiyun RGA_SCALE_DOWN_AVG = 0x1, 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* RGA process mode enum */ 90*4882a593Smuzhiyun enum { 91*4882a593Smuzhiyun BITBLT_MODE = 0x0, 92*4882a593Smuzhiyun COLOR_PALETTE_MODE = 0x1, 93*4882a593Smuzhiyun COLOR_FILL_MODE = 0x2, 94*4882a593Smuzhiyun /* used by rga2 */ 95*4882a593Smuzhiyun UPDATE_PALETTE_TABLE_MODE = 0x6, 96*4882a593Smuzhiyun UPDATE_PATTEN_BUF_MODE = 0x7, 97*4882a593Smuzhiyun }; /*render mode*/ 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun /* RGA rd_mode */ 100*4882a593Smuzhiyun enum { 101*4882a593Smuzhiyun RGA_RASTER_MODE = 0x1 << 0, 102*4882a593Smuzhiyun RGA_FBC_MODE = 0x1 << 1, 103*4882a593Smuzhiyun RGA_TILE_MODE = 0x1 << 2, 104*4882a593Smuzhiyun }; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun enum { 107*4882a593Smuzhiyun RGA_10BIT_COMPACT = 0x0, 108*4882a593Smuzhiyun RGA_10BIT_INCOMPACT = 0x1, 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun enum { 112*4882a593Smuzhiyun RGA_CONTEXT_NONE = 0x0, 113*4882a593Smuzhiyun RGA_CONTEXT_SRC_FIX_ENABLE = 0x1 << 0, 114*4882a593Smuzhiyun RGA_CONTEXT_SRC_CACHE_INFO = 0x1 << 1, 115*4882a593Smuzhiyun RGA_CONTEXT_SRC_MASK = RGA_CONTEXT_SRC_FIX_ENABLE | 116*4882a593Smuzhiyun RGA_CONTEXT_SRC_CACHE_INFO, 117*4882a593Smuzhiyun RGA_CONTEXT_PAT_FIX_ENABLE = 0x1 << 2, 118*4882a593Smuzhiyun RGA_CONTEXT_PAT_CACHE_INFO = 0x1 << 3, 119*4882a593Smuzhiyun RGA_CONTEXT_PAT_MASK = RGA_CONTEXT_PAT_FIX_ENABLE | 120*4882a593Smuzhiyun RGA_CONTEXT_PAT_CACHE_INFO, 121*4882a593Smuzhiyun RGA_CONTEXT_DST_FIX_ENABLE = 0x1 << 4, 122*4882a593Smuzhiyun RGA_CONTEXT_DST_CACHE_INFO = 0x1 << 5, 123*4882a593Smuzhiyun RGA_CONTEXT_DST_MASK = RGA_CONTEXT_DST_FIX_ENABLE | 124*4882a593Smuzhiyun RGA_CONTEXT_DST_CACHE_INFO, 125*4882a593Smuzhiyun }; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun /* RGA feature */ 128*4882a593Smuzhiyun enum { 129*4882a593Smuzhiyun RGA_COLOR_FILL = 0x1 << 0, 130*4882a593Smuzhiyun RGA_COLOR_PALETTE = 0x1 << 1, 131*4882a593Smuzhiyun RGA_COLOR_KEY = 0x1 << 2, 132*4882a593Smuzhiyun RGA_ROP_CALCULATE = 0x1 << 3, 133*4882a593Smuzhiyun RGA_NN_QUANTIZE = 0x1 << 4, 134*4882a593Smuzhiyun RGA_OSD_BLEND = 0x1 << 5, 135*4882a593Smuzhiyun RGA_DITHER = 0x1 << 6, 136*4882a593Smuzhiyun RGA_MOSAIC = 0x1 << 7, 137*4882a593Smuzhiyun RGA_YIN_YOUT = 0x1 << 8, 138*4882a593Smuzhiyun RGA_YUV_HDS = 0x1 << 9, 139*4882a593Smuzhiyun RGA_YUV_VDS = 0x1 << 10, 140*4882a593Smuzhiyun RGA_OSD = 0x1 << 11, 141*4882a593Smuzhiyun RGA_PRE_INTR = 0x1 << 12, 142*4882a593Smuzhiyun }; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun enum rga_surf_format { 145*4882a593Smuzhiyun RGA_FORMAT_RGBA_8888 = 0x0, 146*4882a593Smuzhiyun RGA_FORMAT_RGBX_8888 = 0x1, 147*4882a593Smuzhiyun RGA_FORMAT_RGB_888 = 0x2, 148*4882a593Smuzhiyun RGA_FORMAT_BGRA_8888 = 0x3, 149*4882a593Smuzhiyun RGA_FORMAT_RGB_565 = 0x4, 150*4882a593Smuzhiyun RGA_FORMAT_RGBA_5551 = 0x5, 151*4882a593Smuzhiyun RGA_FORMAT_RGBA_4444 = 0x6, 152*4882a593Smuzhiyun RGA_FORMAT_BGR_888 = 0x7, 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun RGA_FORMAT_YCbCr_422_SP = 0x8, 155*4882a593Smuzhiyun RGA_FORMAT_YCbCr_422_P = 0x9, 156*4882a593Smuzhiyun RGA_FORMAT_YCbCr_420_SP = 0xa, 157*4882a593Smuzhiyun RGA_FORMAT_YCbCr_420_P = 0xb, 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun RGA_FORMAT_YCrCb_422_SP = 0xc, 160*4882a593Smuzhiyun RGA_FORMAT_YCrCb_422_P = 0xd, 161*4882a593Smuzhiyun RGA_FORMAT_YCrCb_420_SP = 0xe, 162*4882a593Smuzhiyun RGA_FORMAT_YCrCb_420_P = 0xf, 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun RGA_FORMAT_BPP1 = 0x10, 165*4882a593Smuzhiyun RGA_FORMAT_BPP2 = 0x11, 166*4882a593Smuzhiyun RGA_FORMAT_BPP4 = 0x12, 167*4882a593Smuzhiyun RGA_FORMAT_BPP8 = 0x13, 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun RGA_FORMAT_Y4 = 0x14, 170*4882a593Smuzhiyun RGA_FORMAT_YCbCr_400 = 0x15, 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun RGA_FORMAT_BGRX_8888 = 0x16, 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun RGA_FORMAT_YVYU_422 = 0x18, 175*4882a593Smuzhiyun RGA_FORMAT_YVYU_420 = 0x19, 176*4882a593Smuzhiyun RGA_FORMAT_VYUY_422 = 0x1a, 177*4882a593Smuzhiyun RGA_FORMAT_VYUY_420 = 0x1b, 178*4882a593Smuzhiyun RGA_FORMAT_YUYV_422 = 0x1c, 179*4882a593Smuzhiyun RGA_FORMAT_YUYV_420 = 0x1d, 180*4882a593Smuzhiyun RGA_FORMAT_UYVY_422 = 0x1e, 181*4882a593Smuzhiyun RGA_FORMAT_UYVY_420 = 0x1f, 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun RGA_FORMAT_YCbCr_420_SP_10B = 0x20, 184*4882a593Smuzhiyun RGA_FORMAT_YCrCb_420_SP_10B = 0x21, 185*4882a593Smuzhiyun RGA_FORMAT_YCbCr_422_SP_10B = 0x22, 186*4882a593Smuzhiyun RGA_FORMAT_YCrCb_422_SP_10B = 0x23, 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun RGA_FORMAT_BGR_565 = 0x24, 189*4882a593Smuzhiyun RGA_FORMAT_BGRA_5551 = 0x25, 190*4882a593Smuzhiyun RGA_FORMAT_BGRA_4444 = 0x26, 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun RGA_FORMAT_ARGB_8888 = 0x28, 193*4882a593Smuzhiyun RGA_FORMAT_XRGB_8888 = 0x29, 194*4882a593Smuzhiyun RGA_FORMAT_ARGB_5551 = 0x2a, 195*4882a593Smuzhiyun RGA_FORMAT_ARGB_4444 = 0x2b, 196*4882a593Smuzhiyun RGA_FORMAT_ABGR_8888 = 0x2c, 197*4882a593Smuzhiyun RGA_FORMAT_XBGR_8888 = 0x2d, 198*4882a593Smuzhiyun RGA_FORMAT_ABGR_5551 = 0x2e, 199*4882a593Smuzhiyun RGA_FORMAT_ABGR_4444 = 0x2f, 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun RGA_FORMAT_RGBA_2BPP = 0x30, 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun RGA_FORMAT_UNKNOWN = 0x100, 204*4882a593Smuzhiyun }; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun enum rga_alpha_mode { 207*4882a593Smuzhiyun RGA_ALPHA_STRAIGHT = 0, 208*4882a593Smuzhiyun RGA_ALPHA_INVERSE = 1, 209*4882a593Smuzhiyun }; 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun enum rga_global_blend_mode { 212*4882a593Smuzhiyun RGA_ALPHA_GLOBAL = 0, 213*4882a593Smuzhiyun RGA_ALPHA_PER_PIXEL = 1, 214*4882a593Smuzhiyun RGA_ALPHA_PER_PIXEL_GLOBAL = 2, 215*4882a593Smuzhiyun }; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun enum rga_alpha_cal_mode { 218*4882a593Smuzhiyun RGA_ALPHA_SATURATION = 0, 219*4882a593Smuzhiyun RGA_ALPHA_NO_SATURATION = 1, 220*4882a593Smuzhiyun }; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun enum rga_factor_mode { 223*4882a593Smuzhiyun RGA_ALPHA_ZERO = 0, 224*4882a593Smuzhiyun RGA_ALPHA_ONE = 1, 225*4882a593Smuzhiyun /* 226*4882a593Smuzhiyun * When used as a factor for the SRC channel, it indicates 227*4882a593Smuzhiyun * the use of the DST channel's alpha value, and vice versa. 228*4882a593Smuzhiyun */ 229*4882a593Smuzhiyun RGA_ALPHA_OPPOSITE = 2, 230*4882a593Smuzhiyun RGA_ALPHA_OPPOSITE_INVERSE = 3, 231*4882a593Smuzhiyun RGA_ALPHA_OWN = 4, 232*4882a593Smuzhiyun }; 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun enum rga_color_mode { 235*4882a593Smuzhiyun RGA_ALPHA_PRE_MULTIPLIED = 0, 236*4882a593Smuzhiyun RGA_ALPHA_NO_PRE_MULTIPLIED = 1, 237*4882a593Smuzhiyun }; 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun enum rga_alpha_blend_mode { 240*4882a593Smuzhiyun RGA_ALPHA_NONE = 0, 241*4882a593Smuzhiyun RGA_ALPHA_BLEND_SRC, 242*4882a593Smuzhiyun RGA_ALPHA_BLEND_DST, 243*4882a593Smuzhiyun RGA_ALPHA_BLEND_SRC_OVER, 244*4882a593Smuzhiyun RGA_ALPHA_BLEND_DST_OVER, 245*4882a593Smuzhiyun RGA_ALPHA_BLEND_SRC_IN, 246*4882a593Smuzhiyun RGA_ALPHA_BLEND_DST_IN, 247*4882a593Smuzhiyun RGA_ALPHA_BLEND_SRC_OUT, 248*4882a593Smuzhiyun RGA_ALPHA_BLEND_DST_OUT, 249*4882a593Smuzhiyun RGA_ALPHA_BLEND_SRC_ATOP, 250*4882a593Smuzhiyun RGA_ALPHA_BLEND_DST_ATOP, 251*4882a593Smuzhiyun RGA_ALPHA_BLEND_XOR, 252*4882a593Smuzhiyun RGA_ALPHA_BLEND_CLEAR, 253*4882a593Smuzhiyun }; 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define RGA_SCHED_PRIORITY_DEFAULT 0 256*4882a593Smuzhiyun #define RGA_SCHED_PRIORITY_MAX 6 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #define RGA_VERSION_SIZE 16 259*4882a593Smuzhiyun #define RGA_HW_SIZE 5 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun struct rga_version_t { 262*4882a593Smuzhiyun uint32_t major; 263*4882a593Smuzhiyun uint32_t minor; 264*4882a593Smuzhiyun uint32_t revision; 265*4882a593Smuzhiyun uint8_t str[RGA_VERSION_SIZE]; 266*4882a593Smuzhiyun }; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun struct rga_hw_versions_t { 269*4882a593Smuzhiyun struct rga_version_t version[RGA_HW_SIZE]; 270*4882a593Smuzhiyun uint32_t size; 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun struct rga_memory_parm { 274*4882a593Smuzhiyun uint32_t width; 275*4882a593Smuzhiyun uint32_t height; 276*4882a593Smuzhiyun uint32_t format; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun uint32_t size; 279*4882a593Smuzhiyun }; 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun struct rga_external_buffer { 282*4882a593Smuzhiyun uint64_t memory; 283*4882a593Smuzhiyun uint32_t type; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun uint32_t handle; 286*4882a593Smuzhiyun struct rga_memory_parm memory_parm; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun uint8_t reserve[252]; 289*4882a593Smuzhiyun }; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun struct rga_buffer_pool { 292*4882a593Smuzhiyun uint64_t buffers_ptr; 293*4882a593Smuzhiyun uint32_t size; 294*4882a593Smuzhiyun }; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun struct rga_mmu_info_t { 297*4882a593Smuzhiyun unsigned long src0_base_addr; 298*4882a593Smuzhiyun unsigned long src1_base_addr; 299*4882a593Smuzhiyun unsigned long dst_base_addr; 300*4882a593Smuzhiyun unsigned long els_base_addr; 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun /* [0] mmu enable [1] flush [2] prefetch_en [3] prefetch dir */ 303*4882a593Smuzhiyun u8 src0_mmu_flag; 304*4882a593Smuzhiyun u8 src1_mmu_flag; 305*4882a593Smuzhiyun u8 dst_mmu_flag; 306*4882a593Smuzhiyun u8 els_mmu_flag; 307*4882a593Smuzhiyun }; 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun struct rga_color_fill_t { 310*4882a593Smuzhiyun int16_t gr_x_a; 311*4882a593Smuzhiyun int16_t gr_y_a; 312*4882a593Smuzhiyun int16_t gr_x_b; 313*4882a593Smuzhiyun int16_t gr_y_b; 314*4882a593Smuzhiyun int16_t gr_x_g; 315*4882a593Smuzhiyun int16_t gr_y_g; 316*4882a593Smuzhiyun int16_t gr_x_r; 317*4882a593Smuzhiyun int16_t gr_y_r; 318*4882a593Smuzhiyun }; 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun /***************************************/ 321*4882a593Smuzhiyun /* porting from rga.h for msg convert */ 322*4882a593Smuzhiyun /***************************************/ 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun struct rga_fading_t { 325*4882a593Smuzhiyun uint8_t b; 326*4882a593Smuzhiyun uint8_t g; 327*4882a593Smuzhiyun uint8_t r; 328*4882a593Smuzhiyun uint8_t res; 329*4882a593Smuzhiyun }; 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun struct rga_mmu_t { 332*4882a593Smuzhiyun uint8_t mmu_en; 333*4882a593Smuzhiyun uint64_t base_addr; 334*4882a593Smuzhiyun /* 335*4882a593Smuzhiyun * [0] mmu enable [1] src_flush [2] dst_flush 336*4882a593Smuzhiyun * [3] CMD_flush [4~5] page size 337*4882a593Smuzhiyun */ 338*4882a593Smuzhiyun uint32_t mmu_flag; 339*4882a593Smuzhiyun }; 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun struct rga_rect_t { 342*4882a593Smuzhiyun uint16_t xmin; 343*4882a593Smuzhiyun /* width - 1 */ 344*4882a593Smuzhiyun uint16_t xmax; 345*4882a593Smuzhiyun uint16_t ymin; 346*4882a593Smuzhiyun /* height - 1 */ 347*4882a593Smuzhiyun uint16_t ymax; 348*4882a593Smuzhiyun }; 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun struct rga_point_t { 351*4882a593Smuzhiyun uint16_t x; 352*4882a593Smuzhiyun uint16_t y; 353*4882a593Smuzhiyun }; 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun struct rga_line_draw_t { 356*4882a593Smuzhiyun /* LineDraw_start_point */ 357*4882a593Smuzhiyun struct rga_point_t start_point; 358*4882a593Smuzhiyun /* LineDraw_end_point */ 359*4882a593Smuzhiyun struct rga_point_t end_point; 360*4882a593Smuzhiyun /* LineDraw_color */ 361*4882a593Smuzhiyun uint32_t color; 362*4882a593Smuzhiyun /* (enum) LineDrawing mode sel */ 363*4882a593Smuzhiyun uint32_t flag; 364*4882a593Smuzhiyun /* range 1~16 */ 365*4882a593Smuzhiyun uint32_t line_width; 366*4882a593Smuzhiyun }; 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun /* color space convert coefficient. */ 369*4882a593Smuzhiyun struct rga_csc_coe { 370*4882a593Smuzhiyun int16_t r_v; 371*4882a593Smuzhiyun int16_t g_y; 372*4882a593Smuzhiyun int16_t b_u; 373*4882a593Smuzhiyun int32_t off; 374*4882a593Smuzhiyun }; 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun struct rga_full_csc { 377*4882a593Smuzhiyun uint8_t flag; 378*4882a593Smuzhiyun struct rga_csc_coe coe_y; 379*4882a593Smuzhiyun struct rga_csc_coe coe_u; 380*4882a593Smuzhiyun struct rga_csc_coe coe_v; 381*4882a593Smuzhiyun }; 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun struct rga_mosaic_info { 384*4882a593Smuzhiyun uint8_t enable; 385*4882a593Smuzhiyun uint8_t mode; 386*4882a593Smuzhiyun }; 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun /* MAX(min, (max - channel_value)) */ 389*4882a593Smuzhiyun struct rga_osd_invert_factor { 390*4882a593Smuzhiyun uint8_t alpha_max; 391*4882a593Smuzhiyun uint8_t alpha_min; 392*4882a593Smuzhiyun uint8_t yg_max; 393*4882a593Smuzhiyun uint8_t yg_min; 394*4882a593Smuzhiyun uint8_t crb_max; 395*4882a593Smuzhiyun uint8_t crb_min; 396*4882a593Smuzhiyun }; 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun struct rga_color { 399*4882a593Smuzhiyun union { 400*4882a593Smuzhiyun struct { 401*4882a593Smuzhiyun uint8_t red; 402*4882a593Smuzhiyun uint8_t green; 403*4882a593Smuzhiyun uint8_t blue; 404*4882a593Smuzhiyun uint8_t alpha; 405*4882a593Smuzhiyun }; 406*4882a593Smuzhiyun uint32_t value; 407*4882a593Smuzhiyun }; 408*4882a593Smuzhiyun }; 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun struct rga_osd_bpp2 { 411*4882a593Smuzhiyun uint8_t ac_swap; // ac swap flag 412*4882a593Smuzhiyun // 0: CA 413*4882a593Smuzhiyun // 1: AC 414*4882a593Smuzhiyun uint8_t endian_swap; // rgba2bpp endian swap 415*4882a593Smuzhiyun // 0: Big endian 416*4882a593Smuzhiyun // 1: Little endian 417*4882a593Smuzhiyun struct rga_color color0; 418*4882a593Smuzhiyun struct rga_color color1; 419*4882a593Smuzhiyun }; 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun struct rga_osd_mode_ctrl { 422*4882a593Smuzhiyun uint8_t mode; // OSD cal mode: 423*4882a593Smuzhiyun // 0b'1: statistics mode 424*4882a593Smuzhiyun // 1b'1: auto inversion overlap mode 425*4882a593Smuzhiyun uint8_t direction_mode; // horizontal or vertical 426*4882a593Smuzhiyun // 0: horizontal 427*4882a593Smuzhiyun // 1: vertical 428*4882a593Smuzhiyun uint8_t width_mode; // using @fix_width or LUT width 429*4882a593Smuzhiyun // 0: fix width 430*4882a593Smuzhiyun // 1: LUT width 431*4882a593Smuzhiyun uint16_t block_fix_width; // OSD block fixed width 432*4882a593Smuzhiyun // real width = (fix_width + 1) * 2 433*4882a593Smuzhiyun uint8_t block_num; // OSD block num 434*4882a593Smuzhiyun uint16_t flags_index; // auto invert flags index 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun /* invertion config */ 437*4882a593Smuzhiyun uint8_t color_mode; // selete color 438*4882a593Smuzhiyun // 0: src1 color 439*4882a593Smuzhiyun // 1: config data color 440*4882a593Smuzhiyun uint8_t invert_flags_mode; // invert flag selete 441*4882a593Smuzhiyun // 0: use RAM flag 442*4882a593Smuzhiyun // 1: usr last result 443*4882a593Smuzhiyun uint8_t default_color_sel; // default color mode 444*4882a593Smuzhiyun // 0: default is bright 445*4882a593Smuzhiyun // 1: default is dark 446*4882a593Smuzhiyun uint8_t invert_enable; // invert channel enable 447*4882a593Smuzhiyun // 1 << 0: alpha enable 448*4882a593Smuzhiyun // 1 << 1: Y/G disable 449*4882a593Smuzhiyun // 1 << 3: C/RB disable 450*4882a593Smuzhiyun uint8_t invert_mode; // invert cal mode 451*4882a593Smuzhiyun // 0: normal(max-data) 452*4882a593Smuzhiyun // 1: swap 453*4882a593Smuzhiyun uint8_t invert_thresh; // if luma > thresh, osd_flag to be 1 454*4882a593Smuzhiyun uint8_t unfix_index; // OSD width config index 455*4882a593Smuzhiyun }; 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun struct rga_osd_info { 458*4882a593Smuzhiyun uint8_t enable; 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun struct rga_osd_mode_ctrl mode_ctrl; 461*4882a593Smuzhiyun struct rga_osd_invert_factor cal_factor; 462*4882a593Smuzhiyun struct rga_osd_bpp2 bpp2_info; 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun union { 465*4882a593Smuzhiyun struct { 466*4882a593Smuzhiyun uint32_t last_flags0; 467*4882a593Smuzhiyun uint32_t last_flags1; 468*4882a593Smuzhiyun }; 469*4882a593Smuzhiyun uint64_t last_flags; 470*4882a593Smuzhiyun }; 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun union { 473*4882a593Smuzhiyun struct { 474*4882a593Smuzhiyun uint32_t cur_flags0; 475*4882a593Smuzhiyun uint32_t cur_flags1; 476*4882a593Smuzhiyun }; 477*4882a593Smuzhiyun uint64_t cur_flags; 478*4882a593Smuzhiyun }; 479*4882a593Smuzhiyun }; 480*4882a593Smuzhiyun 481*4882a593Smuzhiyun struct rga_pre_intr_info { 482*4882a593Smuzhiyun uint8_t enable; 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun uint8_t read_intr_en; 485*4882a593Smuzhiyun uint8_t write_intr_en; 486*4882a593Smuzhiyun uint8_t read_hold_en; 487*4882a593Smuzhiyun uint32_t read_threshold; 488*4882a593Smuzhiyun uint32_t write_start; 489*4882a593Smuzhiyun uint32_t write_step; 490*4882a593Smuzhiyun }; 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun struct rga_win_info_t { 493*4882a593Smuzhiyun /* yrgb mem addr */ 494*4882a593Smuzhiyun unsigned long yrgb_addr; 495*4882a593Smuzhiyun /* cb/cr mem addr */ 496*4882a593Smuzhiyun unsigned long uv_addr; 497*4882a593Smuzhiyun /* cr mem addr */ 498*4882a593Smuzhiyun unsigned long v_addr; 499*4882a593Smuzhiyun /* definition by RK_FORMAT */ 500*4882a593Smuzhiyun unsigned int format; 501*4882a593Smuzhiyun 502*4882a593Smuzhiyun unsigned short src_act_w; 503*4882a593Smuzhiyun unsigned short src_act_h; 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun unsigned short dst_act_w; 506*4882a593Smuzhiyun unsigned short dst_act_h; 507*4882a593Smuzhiyun 508*4882a593Smuzhiyun unsigned short x_offset; 509*4882a593Smuzhiyun unsigned short y_offset; 510*4882a593Smuzhiyun 511*4882a593Smuzhiyun unsigned short vir_w; 512*4882a593Smuzhiyun unsigned short vir_h; 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun unsigned short y2r_mode; 515*4882a593Smuzhiyun unsigned short r2y_mode; 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun unsigned short rotate_mode; 518*4882a593Smuzhiyun /* RASTER or FBCD or TILE */ 519*4882a593Smuzhiyun unsigned short rd_mode; 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun unsigned short is_10b_compact; 522*4882a593Smuzhiyun unsigned short is_10b_endian; 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun unsigned short enable; 525*4882a593Smuzhiyun }; 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun struct rga_img_info_t { 528*4882a593Smuzhiyun /* yrgb mem addr */ 529*4882a593Smuzhiyun uint64_t yrgb_addr; 530*4882a593Smuzhiyun /* cb/cr mem addr */ 531*4882a593Smuzhiyun uint64_t uv_addr; 532*4882a593Smuzhiyun /* cr mem addr */ 533*4882a593Smuzhiyun uint64_t v_addr; 534*4882a593Smuzhiyun /* definition by RK_FORMAT */ 535*4882a593Smuzhiyun uint32_t format; 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun uint16_t act_w; 538*4882a593Smuzhiyun uint16_t act_h; 539*4882a593Smuzhiyun uint16_t x_offset; 540*4882a593Smuzhiyun uint16_t y_offset; 541*4882a593Smuzhiyun 542*4882a593Smuzhiyun uint16_t vir_w; 543*4882a593Smuzhiyun uint16_t vir_h; 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun uint16_t endian_mode; 546*4882a593Smuzhiyun /* useless */ 547*4882a593Smuzhiyun uint16_t alpha_swap; 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun /* used by RGA3 */ 550*4882a593Smuzhiyun uint16_t rotate_mode; 551*4882a593Smuzhiyun uint16_t rd_mode; 552*4882a593Smuzhiyun 553*4882a593Smuzhiyun uint16_t compact_mode; 554*4882a593Smuzhiyun uint16_t is_10b_endian; 555*4882a593Smuzhiyun 556*4882a593Smuzhiyun uint16_t enable; 557*4882a593Smuzhiyun }; 558*4882a593Smuzhiyun 559*4882a593Smuzhiyun struct rga_req { 560*4882a593Smuzhiyun /* (enum) process mode sel */ 561*4882a593Smuzhiyun uint8_t render_mode; 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun struct rga_img_info_t src; 564*4882a593Smuzhiyun struct rga_img_info_t dst; 565*4882a593Smuzhiyun struct rga_img_info_t pat; 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun /* rop4 mask addr */ 568*4882a593Smuzhiyun uint64_t rop_mask_addr; 569*4882a593Smuzhiyun /* LUT addr */ 570*4882a593Smuzhiyun uint64_t LUT_addr; 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun /* dst clip window default value is dst_vir */ 573*4882a593Smuzhiyun /* value from [0, w-1] / [0, h-1]*/ 574*4882a593Smuzhiyun struct rga_rect_t clip; 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun /* dst angle default value 0 16.16 scan from table */ 577*4882a593Smuzhiyun int32_t sina; 578*4882a593Smuzhiyun /* dst angle default value 0 16.16 scan from table */ 579*4882a593Smuzhiyun int32_t cosa; 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun /* alpha rop process flag */ 582*4882a593Smuzhiyun /* ([0] = 1 alpha_rop_enable) */ 583*4882a593Smuzhiyun /* ([1] = 1 rop enable) */ 584*4882a593Smuzhiyun /* ([2] = 1 fading_enable) */ 585*4882a593Smuzhiyun /* ([3] = 1 PD_enable) */ 586*4882a593Smuzhiyun /* ([4] = 1 alpha cal_mode_sel) */ 587*4882a593Smuzhiyun /* ([5] = 1 dither_enable) */ 588*4882a593Smuzhiyun /* ([6] = 1 gradient fill mode sel) */ 589*4882a593Smuzhiyun /* ([7] = 1 AA_enable) */ 590*4882a593Smuzhiyun uint16_t alpha_rop_flag; 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun /* 0 nearst / 1 bilnear / 2 bicubic */ 593*4882a593Smuzhiyun uint8_t scale_mode; 594*4882a593Smuzhiyun 595*4882a593Smuzhiyun /* color key max */ 596*4882a593Smuzhiyun uint32_t color_key_max; 597*4882a593Smuzhiyun /* color key min */ 598*4882a593Smuzhiyun uint32_t color_key_min; 599*4882a593Smuzhiyun 600*4882a593Smuzhiyun /* foreground color */ 601*4882a593Smuzhiyun uint32_t fg_color; 602*4882a593Smuzhiyun /* background color */ 603*4882a593Smuzhiyun uint32_t bg_color; 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun /* color fill use gradient */ 606*4882a593Smuzhiyun struct rga_color_fill_t gr_color; 607*4882a593Smuzhiyun 608*4882a593Smuzhiyun struct rga_line_draw_t line_draw_info; 609*4882a593Smuzhiyun 610*4882a593Smuzhiyun struct rga_fading_t fading; 611*4882a593Smuzhiyun 612*4882a593Smuzhiyun /* porter duff alpha mode sel */ 613*4882a593Smuzhiyun uint8_t PD_mode; 614*4882a593Smuzhiyun 615*4882a593Smuzhiyun /* global alpha value */ 616*4882a593Smuzhiyun uint8_t alpha_global_value; 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun /* rop2/3/4 code scan from rop code table*/ 619*4882a593Smuzhiyun uint16_t rop_code; 620*4882a593Smuzhiyun 621*4882a593Smuzhiyun /* [2] 0 blur 1 sharp / [1:0] filter_type*/ 622*4882a593Smuzhiyun uint8_t bsfilter_flag; 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun /* (enum) color palette 0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/ 625*4882a593Smuzhiyun uint8_t palette_mode; 626*4882a593Smuzhiyun 627*4882a593Smuzhiyun /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */ 628*4882a593Smuzhiyun uint8_t yuv2rgb_mode; 629*4882a593Smuzhiyun 630*4882a593Smuzhiyun /* 0/big endian 1/little endian*/ 631*4882a593Smuzhiyun uint8_t endian_mode; 632*4882a593Smuzhiyun 633*4882a593Smuzhiyun /* (enum) rotate mode */ 634*4882a593Smuzhiyun /* 0x0, no rotate */ 635*4882a593Smuzhiyun /* 0x1, rotate */ 636*4882a593Smuzhiyun /* 0x2, x_mirror */ 637*4882a593Smuzhiyun /* 0x3, y_mirror */ 638*4882a593Smuzhiyun uint8_t rotate_mode; 639*4882a593Smuzhiyun 640*4882a593Smuzhiyun /* 0 solid color / 1 pattern color */ 641*4882a593Smuzhiyun uint8_t color_fill_mode; 642*4882a593Smuzhiyun 643*4882a593Smuzhiyun /* mmu information */ 644*4882a593Smuzhiyun struct rga_mmu_t mmu_info; 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun /* ([0~1] alpha mode) */ 647*4882a593Smuzhiyun /* ([2~3] rop mode) */ 648*4882a593Smuzhiyun /* ([4] zero mode en) */ 649*4882a593Smuzhiyun /* ([5] dst alpha mode) */ 650*4882a593Smuzhiyun /* ([6] alpha output mode sel) 0 src / 1 dst*/ 651*4882a593Smuzhiyun uint8_t alpha_rop_mode; 652*4882a593Smuzhiyun 653*4882a593Smuzhiyun uint8_t src_trans_mode; 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun uint8_t dither_mode; 656*4882a593Smuzhiyun 657*4882a593Smuzhiyun /* full color space convert */ 658*4882a593Smuzhiyun struct rga_full_csc full_csc; 659*4882a593Smuzhiyun 660*4882a593Smuzhiyun int32_t in_fence_fd; 661*4882a593Smuzhiyun uint8_t core; 662*4882a593Smuzhiyun uint8_t priority; 663*4882a593Smuzhiyun int32_t out_fence_fd; 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun uint8_t handle_flag; 666*4882a593Smuzhiyun 667*4882a593Smuzhiyun /* RGA2 1106 add */ 668*4882a593Smuzhiyun struct rga_mosaic_info mosaic_info; 669*4882a593Smuzhiyun 670*4882a593Smuzhiyun uint8_t uvhds_mode; 671*4882a593Smuzhiyun uint8_t uvvds_mode; 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun struct rga_osd_info osd_info; 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun struct rga_pre_intr_info pre_intr_info; 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun uint8_t reservr[59]; 678*4882a593Smuzhiyun }; 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun struct rga_alpha_config { 681*4882a593Smuzhiyun bool enable; 682*4882a593Smuzhiyun bool fg_pre_multiplied; 683*4882a593Smuzhiyun bool bg_pre_multiplied; 684*4882a593Smuzhiyun bool fg_pixel_alpha_en; 685*4882a593Smuzhiyun bool bg_pixel_alpha_en; 686*4882a593Smuzhiyun bool fg_global_alpha_en; 687*4882a593Smuzhiyun bool bg_global_alpha_en; 688*4882a593Smuzhiyun uint16_t fg_global_alpha_value; 689*4882a593Smuzhiyun uint16_t bg_global_alpha_value; 690*4882a593Smuzhiyun enum rga_alpha_blend_mode mode; 691*4882a593Smuzhiyun }; 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun struct rga2_req { 694*4882a593Smuzhiyun /* (enum) process mode sel */ 695*4882a593Smuzhiyun u8 render_mode; 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun /* active window */ 698*4882a593Smuzhiyun struct rga_img_info_t src; 699*4882a593Smuzhiyun struct rga_img_info_t src1; 700*4882a593Smuzhiyun struct rga_img_info_t dst; 701*4882a593Smuzhiyun struct rga_img_info_t pat; 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun /* rop4 mask addr */ 704*4882a593Smuzhiyun unsigned long rop_mask_addr; 705*4882a593Smuzhiyun /* LUT addr */ 706*4882a593Smuzhiyun unsigned long LUT_addr; 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun u32 rop_mask_stride; 709*4882a593Smuzhiyun 710*4882a593Smuzhiyun /* 0: SRC + DST => DST */ 711*4882a593Smuzhiyun /* 1: SRC + SRC1 => DST */ 712*4882a593Smuzhiyun u8 bitblt_mode; 713*4882a593Smuzhiyun 714*4882a593Smuzhiyun /* [1:0] */ 715*4882a593Smuzhiyun /* 0 degree 0x0 */ 716*4882a593Smuzhiyun /* 90 degree 0x1 */ 717*4882a593Smuzhiyun /* 180 degree 0x2 */ 718*4882a593Smuzhiyun /* 270 degree 0x3 */ 719*4882a593Smuzhiyun /* [5:4] */ 720*4882a593Smuzhiyun /* none 0x0 */ 721*4882a593Smuzhiyun /* x_mirror 0x1 */ 722*4882a593Smuzhiyun /* y_mirror 0x2 */ 723*4882a593Smuzhiyun /* x_mirror + y_mirror 0x3 */ 724*4882a593Smuzhiyun u8 rotate_mode; 725*4882a593Smuzhiyun 726*4882a593Smuzhiyun /* alpha rop process flag */ 727*4882a593Smuzhiyun /* ([0] = 1 alpha_rop_enable) */ 728*4882a593Smuzhiyun /* ([1] = 1 rop enable) */ 729*4882a593Smuzhiyun /* ([2] = 1 fading_enable) */ 730*4882a593Smuzhiyun /* ([3] = 1 alpha cal_mode_sel) */ 731*4882a593Smuzhiyun /* ([4] = 1 src_dither_up_enable) */ 732*4882a593Smuzhiyun /* ([5] = 1 dst_dither_up_enable) */ 733*4882a593Smuzhiyun /* ([6] = 1 dither_down_enable) */ 734*4882a593Smuzhiyun /* ([7] = 1 gradient fill mode sel) */ 735*4882a593Smuzhiyun u16 alpha_rop_flag; 736*4882a593Smuzhiyun 737*4882a593Smuzhiyun struct rga_alpha_config alpha_config; 738*4882a593Smuzhiyun 739*4882a593Smuzhiyun /* 0 1 2 3 */ 740*4882a593Smuzhiyun u8 scale_bicu_mode; 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun u32 color_key_max; 743*4882a593Smuzhiyun u32 color_key_min; 744*4882a593Smuzhiyun 745*4882a593Smuzhiyun /* foreground color */ 746*4882a593Smuzhiyun u32 fg_color; 747*4882a593Smuzhiyun /* background color */ 748*4882a593Smuzhiyun u32 bg_color; 749*4882a593Smuzhiyun 750*4882a593Smuzhiyun u8 color_fill_mode; 751*4882a593Smuzhiyun /* color fill use gradient */ 752*4882a593Smuzhiyun struct rga_color_fill_t gr_color; 753*4882a593Smuzhiyun 754*4882a593Smuzhiyun /* Fading value */ 755*4882a593Smuzhiyun u8 fading_alpha_value; 756*4882a593Smuzhiyun u8 fading_r_value; 757*4882a593Smuzhiyun u8 fading_g_value; 758*4882a593Smuzhiyun u8 fading_b_value; 759*4882a593Smuzhiyun 760*4882a593Smuzhiyun /* src global alpha value */ 761*4882a593Smuzhiyun u8 src_a_global_val; 762*4882a593Smuzhiyun /* dst global alpha value */ 763*4882a593Smuzhiyun u8 dst_a_global_val; 764*4882a593Smuzhiyun 765*4882a593Smuzhiyun /* rop mode select 0 : rop2 1 : rop3 2 : rop4 */ 766*4882a593Smuzhiyun u8 rop_mode; 767*4882a593Smuzhiyun /* rop2/3/4 code */ 768*4882a593Smuzhiyun u16 rop_code; 769*4882a593Smuzhiyun 770*4882a593Smuzhiyun /* (enum) color palette 0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/ 771*4882a593Smuzhiyun u8 palette_mode; 772*4882a593Smuzhiyun 773*4882a593Smuzhiyun /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */ 774*4882a593Smuzhiyun u8 yuv2rgb_mode; 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun u8 full_csc_en; 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun /* 0/little endian 1/big endian */ 779*4882a593Smuzhiyun u8 endian_mode; 780*4882a593Smuzhiyun 781*4882a593Smuzhiyun u8 CMD_fin_int_enable; 782*4882a593Smuzhiyun 783*4882a593Smuzhiyun /* mmu information */ 784*4882a593Smuzhiyun struct rga_mmu_info_t mmu_info; 785*4882a593Smuzhiyun 786*4882a593Smuzhiyun u8 alpha_zero_key; 787*4882a593Smuzhiyun u8 src_trans_mode; 788*4882a593Smuzhiyun 789*4882a593Smuzhiyun /* useless */ 790*4882a593Smuzhiyun u8 alpha_swp; 791*4882a593Smuzhiyun u8 dither_mode; 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun u8 rgb2yuv_mode; 794*4882a593Smuzhiyun 795*4882a593Smuzhiyun /* RGA2 1106 add */ 796*4882a593Smuzhiyun struct rga_mosaic_info mosaic_info; 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun uint8_t yin_yout_en; 799*4882a593Smuzhiyun 800*4882a593Smuzhiyun uint8_t uvhds_mode; 801*4882a593Smuzhiyun uint8_t uvvds_mode; 802*4882a593Smuzhiyun 803*4882a593Smuzhiyun struct rga_osd_info osd_info; 804*4882a593Smuzhiyun }; 805*4882a593Smuzhiyun 806*4882a593Smuzhiyun struct rga3_req { 807*4882a593Smuzhiyun /* (enum) process mode sel */ 808*4882a593Smuzhiyun u8 render_mode; 809*4882a593Smuzhiyun 810*4882a593Smuzhiyun struct rga_win_info_t win0; 811*4882a593Smuzhiyun struct rga_win_info_t wr; 812*4882a593Smuzhiyun struct rga_win_info_t win1; 813*4882a593Smuzhiyun 814*4882a593Smuzhiyun /* rop4 mask addr */ 815*4882a593Smuzhiyun unsigned long rop_mask_addr; 816*4882a593Smuzhiyun unsigned long LUT_addr; 817*4882a593Smuzhiyun 818*4882a593Smuzhiyun u32 rop_mask_stride; 819*4882a593Smuzhiyun 820*4882a593Smuzhiyun u8 bitblt_mode; 821*4882a593Smuzhiyun u8 rotate_mode; 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun u16 alpha_rop_flag; 824*4882a593Smuzhiyun 825*4882a593Smuzhiyun struct rga_alpha_config alpha_config; 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun /* for abb mode presever alpha. */ 828*4882a593Smuzhiyun bool abb_alpha_pass; 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun u8 scale_bicu_mode; 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun u32 color_key_max; 833*4882a593Smuzhiyun u32 color_key_min; 834*4882a593Smuzhiyun 835*4882a593Smuzhiyun u32 fg_color; 836*4882a593Smuzhiyun u32 bg_color; 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun u8 color_fill_mode; 839*4882a593Smuzhiyun struct rga_color_fill_t gr_color; 840*4882a593Smuzhiyun 841*4882a593Smuzhiyun u8 fading_alpha_value; 842*4882a593Smuzhiyun u8 fading_r_value; 843*4882a593Smuzhiyun u8 fading_g_value; 844*4882a593Smuzhiyun u8 fading_b_value; 845*4882a593Smuzhiyun 846*4882a593Smuzhiyun /* win0 global alpha value */ 847*4882a593Smuzhiyun u8 win0_a_global_val; 848*4882a593Smuzhiyun /* win1 global alpha value */ 849*4882a593Smuzhiyun u8 win1_a_global_val; 850*4882a593Smuzhiyun 851*4882a593Smuzhiyun u8 rop_mode; 852*4882a593Smuzhiyun u16 rop_code; 853*4882a593Smuzhiyun 854*4882a593Smuzhiyun u8 palette_mode; 855*4882a593Smuzhiyun 856*4882a593Smuzhiyun u8 yuv2rgb_mode; 857*4882a593Smuzhiyun 858*4882a593Smuzhiyun u8 endian_mode; 859*4882a593Smuzhiyun 860*4882a593Smuzhiyun u8 CMD_fin_int_enable; 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun struct rga_mmu_info_t mmu_info; 863*4882a593Smuzhiyun 864*4882a593Smuzhiyun u8 alpha_zero_key; 865*4882a593Smuzhiyun u8 src_trans_mode; 866*4882a593Smuzhiyun 867*4882a593Smuzhiyun u8 alpha_swp; 868*4882a593Smuzhiyun u8 dither_mode; 869*4882a593Smuzhiyun 870*4882a593Smuzhiyun u8 rgb2yuv_mode; 871*4882a593Smuzhiyun }; 872*4882a593Smuzhiyun 873*4882a593Smuzhiyun struct rga_video_frame_info { 874*4882a593Smuzhiyun uint32_t x_offset; 875*4882a593Smuzhiyun uint32_t y_offset; 876*4882a593Smuzhiyun uint32_t width; 877*4882a593Smuzhiyun uint32_t height; 878*4882a593Smuzhiyun uint32_t format; 879*4882a593Smuzhiyun uint32_t vir_w; 880*4882a593Smuzhiyun uint32_t vir_h; 881*4882a593Smuzhiyun uint32_t rd_mode; 882*4882a593Smuzhiyun }; 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun struct rga_mpi_job_t { 885*4882a593Smuzhiyun struct dma_buf *dma_buf_src0; 886*4882a593Smuzhiyun struct dma_buf *dma_buf_src1; 887*4882a593Smuzhiyun struct dma_buf *dma_buf_dst; 888*4882a593Smuzhiyun 889*4882a593Smuzhiyun struct rga_video_frame_info *src; 890*4882a593Smuzhiyun struct rga_video_frame_info *pat; 891*4882a593Smuzhiyun struct rga_video_frame_info *dst; 892*4882a593Smuzhiyun struct rga_video_frame_info *output; 893*4882a593Smuzhiyun 894*4882a593Smuzhiyun int ctx_id; 895*4882a593Smuzhiyun }; 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun struct rga_user_request { 898*4882a593Smuzhiyun uint64_t task_ptr; 899*4882a593Smuzhiyun uint32_t task_num; 900*4882a593Smuzhiyun uint32_t id; 901*4882a593Smuzhiyun uint32_t sync_mode; 902*4882a593Smuzhiyun uint32_t release_fence_fd; 903*4882a593Smuzhiyun 904*4882a593Smuzhiyun uint32_t mpi_config_flags; 905*4882a593Smuzhiyun 906*4882a593Smuzhiyun uint32_t acquire_fence_fd; 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun uint8_t reservr[120]; 909*4882a593Smuzhiyun }; 910*4882a593Smuzhiyun 911*4882a593Smuzhiyun int rga_mpi_commit(struct rga_mpi_job_t *mpi_job); 912*4882a593Smuzhiyun 913*4882a593Smuzhiyun #endif /*_RGA_DRIVER_H_*/ 914