13d0407baSopenharmony_ci/* 23d0407baSopenharmony_ci * Copyright (C) 2016 Rockchip Electronics Co., Ltd. 33d0407baSopenharmony_ci * Authors: 43d0407baSopenharmony_ci * Zhiqin Wei <wzq@rock-chips.com> 53d0407baSopenharmony_ci * 63d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 73d0407baSopenharmony_ci * you may not use this file except in compliance with the License. 83d0407baSopenharmony_ci * You may obtain a copy of the License at 93d0407baSopenharmony_ci * 103d0407baSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 113d0407baSopenharmony_ci * 123d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 133d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 143d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 153d0407baSopenharmony_ci * See the License for the specific language governing permissions and 163d0407baSopenharmony_ci * limitations under the License. 173d0407baSopenharmony_ci */ 183d0407baSopenharmony_ci 193d0407baSopenharmony_ci#ifndef RGA_DRIVER_H 203d0407baSopenharmony_ci#define RGA_DRIVER_H 213d0407baSopenharmony_ci#include <stdint.h> 223d0407baSopenharmony_ci#ifdef __cplusplus 233d0407baSopenharmony_ciextern "C" { 243d0407baSopenharmony_ci#endif 253d0407baSopenharmony_ci 263d0407baSopenharmony_ci#define RGA_BLIT_SYNC 0x5017 273d0407baSopenharmony_ci#define RGA_BLIT_ASYNC 0x5018 283d0407baSopenharmony_ci#define RGA_FLUSH 0x5019 293d0407baSopenharmony_ci#define RGA_GET_RESULT 0x501a 303d0407baSopenharmony_ci#define RGA_GET_VERSION 0x501b 313d0407baSopenharmony_ci 323d0407baSopenharmony_ci#define RGA2_BLIT_SYNC 0x6017 333d0407baSopenharmony_ci#define RGA2_BLIT_ASYNC 0x6018 343d0407baSopenharmony_ci#define RGA2_FLUSH 0x6019 353d0407baSopenharmony_ci#define RGA2_GET_RESULT 0x601a 363d0407baSopenharmony_ci#define RGA2_GET_VERSION 0x601b 373d0407baSopenharmony_ci#define RGA2_GET_VERSION 0x601b 383d0407baSopenharmony_ci 393d0407baSopenharmony_ci#define RGA_REG_CTRL_LEN 0x8 /* 8 */ 403d0407baSopenharmony_ci#define RGA_REG_CMD_LEN 0x1c /* 28 */ 413d0407baSopenharmony_ci#define RGA_CMD_BUF_SIZE 0x700 /* 16*28*4 */ 423d0407baSopenharmony_ci 433d0407baSopenharmony_ci#ifndef ENABLE 443d0407baSopenharmony_ci#define ENABLE 1 453d0407baSopenharmony_ci#endif 463d0407baSopenharmony_ci 473d0407baSopenharmony_ci#ifndef DISABLE 483d0407baSopenharmony_ci#define DISABLE 0 493d0407baSopenharmony_ci#endif 503d0407baSopenharmony_ci 513d0407baSopenharmony_ci/* RGA process mode enum */ 523d0407baSopenharmony_cienum { 533d0407baSopenharmony_ci bitblt_mode = 0x0, 543d0407baSopenharmony_ci color_palette_mode = 0x1, 553d0407baSopenharmony_ci color_fill_mode = 0x2, 563d0407baSopenharmony_ci line_point_drawing_mode = 0x3, 573d0407baSopenharmony_ci blur_sharp_filter_mode = 0x4, 583d0407baSopenharmony_ci pre_scaling_mode = 0x5, 593d0407baSopenharmony_ci update_palette_table_mode = 0x6, 603d0407baSopenharmony_ci update_patten_buff_mode = 0x7, 613d0407baSopenharmony_ci}; 623d0407baSopenharmony_ci 633d0407baSopenharmony_cienum { 643d0407baSopenharmony_ci rop_enable_mask = 0x2, 653d0407baSopenharmony_ci dither_enable_mask = 0x8, 663d0407baSopenharmony_ci fading_enable_mask = 0x10, 673d0407baSopenharmony_ci PD_enbale_mask = 0x20, 683d0407baSopenharmony_ci}; 693d0407baSopenharmony_ci 703d0407baSopenharmony_cienum { 713d0407baSopenharmony_ci yuv2rgb_mode0 = 0x0, /* BT.601 MPEG */ 723d0407baSopenharmony_ci yuv2rgb_mode1 = 0x1, /* BT.601 JPEG */ 733d0407baSopenharmony_ci yuv2rgb_mode2 = 0x2, /* BT.709 */ 743d0407baSopenharmony_ci 753d0407baSopenharmony_ci rgb2yuv_601_full = 0x1 << 8, 763d0407baSopenharmony_ci rgb2yuv_709_full = 0x2 << 8, 773d0407baSopenharmony_ci yuv2yuv_601_limit_2_709_limit = 0x3 << 8, 783d0407baSopenharmony_ci yuv2yuv_601_limit_2_709_full = 0x4 << 8, 793d0407baSopenharmony_ci yuv2yuv_709_limit_2_601_limit = 0x5 << 8, 803d0407baSopenharmony_ci yuv2yuv_709_limit_2_601_full = 0x6 << 8, // not support 813d0407baSopenharmony_ci yuv2yuv_601_full_2_709_limit = 0x7 << 8, 823d0407baSopenharmony_ci yuv2yuv_601_full_2_709_full = 0x8 << 8, // not support 833d0407baSopenharmony_ci yuv2yuv_709_full_2_601_limit = 0x9 << 8, // not support 843d0407baSopenharmony_ci yuv2yuv_709_full_2_601_full = 0xa << 8, // not support 853d0407baSopenharmony_ci full_csc_mask = 0xf00, 863d0407baSopenharmony_ci}; 873d0407baSopenharmony_ci 883d0407baSopenharmony_ci/* RGA rotate mode */ 893d0407baSopenharmony_cienum { 903d0407baSopenharmony_ci rotate_mode0 = 0x0, /* no rotate */ 913d0407baSopenharmony_ci rotate_mode1 = 0x1, /* rotate */ 923d0407baSopenharmony_ci rotate_mode2 = 0x2, /* x_mirror */ 933d0407baSopenharmony_ci rotate_mode3 = 0x3, /* y_mirror */ 943d0407baSopenharmony_ci}; 953d0407baSopenharmony_ci 963d0407baSopenharmony_cienum { 973d0407baSopenharmony_ci color_palette_mode0 = 0x0, /* 1K */ 983d0407baSopenharmony_ci color_palette_mode1 = 0x1, /* 2K */ 993d0407baSopenharmony_ci color_palette_mode2 = 0x2, /* 4K */ 1003d0407baSopenharmony_ci color_palette_mode3 = 0x3, /* 8K */ 1013d0407baSopenharmony_ci}; 1023d0407baSopenharmony_ci 1033d0407baSopenharmony_cienum { 1043d0407baSopenharmony_ci BB_BYPASS = 0x0, /* no rotate */ 1053d0407baSopenharmony_ci BB_ROTATE = 0x1, /* rotate */ 1063d0407baSopenharmony_ci BB_X_MIRROR = 0x2, /* x_mirror */ 1073d0407baSopenharmony_ci BB_Y_MIRROR = 0x3 /* y_mirror */ 1083d0407baSopenharmony_ci}; 1093d0407baSopenharmony_ci 1103d0407baSopenharmony_cienum { 1113d0407baSopenharmony_ci nearby = 0x0, /* no rotate */ 1123d0407baSopenharmony_ci bilinear = 0x1, /* rotate */ 1133d0407baSopenharmony_ci bicubic = 0x2, /* x_mirror */ 1143d0407baSopenharmony_ci}; 1153d0407baSopenharmony_ci 1163d0407baSopenharmony_ci/* 1173d0407baSopenharmony_ci// Alpha Red Green Blue 1183d0407baSopenharmony_ci{ 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGBA }, // RK_FORMAT_RGBA_8888 1193d0407baSopenharmony_ci{ 4, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGBX_8888 1203d0407baSopenharmony_ci{ 3, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGB_888 1213d0407baSopenharmony_ci{ 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_BGRA }, // RK_FORMAT_BGRA_8888 1223d0407baSopenharmony_ci{ 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, // RK_FORMAT_RGB_565 1233d0407baSopenharmony_ci{ 2, 16, {{ 1, 0, 16,11, 11, 6, 6, 1 }}, GGL_RGBA }, // RK_FORMAT_RGBA_5551 1243d0407baSopenharmony_ci{ 2, 16, {{ 4, 0, 16,12, 12, 8, 8, 4 }}, GGL_RGBA }, // RK_FORMAT_RGBA_4444 1253d0407baSopenharmony_ci{ 3, 24, {{ 0, 0, 24,16, 16, 8, 8, 0 }}, GGL_BGR }, // RK_FORMAT_BGB_888 1263d0407baSopenharmony_ci 1273d0407baSopenharmony_ci*/ 1283d0407baSopenharmony_ci/* In order to be compatible with RK_FORMAT_XX and HAL_PIXEL_FORMAT_XX, 1293d0407baSopenharmony_ci * RK_FORMAT_XX is shifted to the left by 8 bits to distinguish. */ 1303d0407baSopenharmony_citypedef enum _Rga_SURF_FORMAT { 1313d0407baSopenharmony_ci RK_FORMAT_RGBA_8888 = 0x0 << 8, 1323d0407baSopenharmony_ci RK_FORMAT_RGBX_8888 = 0x1 << 8, 1333d0407baSopenharmony_ci RK_FORMAT_RGB_888 = 0x2 << 8, 1343d0407baSopenharmony_ci RK_FORMAT_BGRA_8888 = 0x3 << 8, 1353d0407baSopenharmony_ci RK_FORMAT_RGB_565 = 0x4 << 8, 1363d0407baSopenharmony_ci RK_FORMAT_RGBA_5551 = 0x5 << 8, 1373d0407baSopenharmony_ci RK_FORMAT_RGBA_4444 = 0x6 << 8, 1383d0407baSopenharmony_ci RK_FORMAT_BGR_888 = 0x7 << 8, 1393d0407baSopenharmony_ci 1403d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_SP = 0x8 << 8, 1413d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_P = 0x9 << 8, 1423d0407baSopenharmony_ci RK_FORMAT_YCbCr_420_SP = 0xa << 8, 1433d0407baSopenharmony_ci RK_FORMAT_YCbCr_420_P = 0xb << 8, 1443d0407baSopenharmony_ci 1453d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_SP = 0xc << 8, 1463d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_P = 0xd << 8, 1473d0407baSopenharmony_ci RK_FORMAT_YCrCb_420_SP = 0xe << 8, 1483d0407baSopenharmony_ci RK_FORMAT_YCrCb_420_P = 0xf << 8, 1493d0407baSopenharmony_ci 1503d0407baSopenharmony_ci RK_FORMAT_BPP1 = 0x10 << 8, 1513d0407baSopenharmony_ci RK_FORMAT_BPP2 = 0x11 << 8, 1523d0407baSopenharmony_ci RK_FORMAT_BPP4 = 0x12 << 8, 1533d0407baSopenharmony_ci RK_FORMAT_BPP8 = 0x13 << 8, 1543d0407baSopenharmony_ci 1553d0407baSopenharmony_ci RK_FORMAT_Y4 = 0x14 << 8, 1563d0407baSopenharmony_ci RK_FORMAT_YCbCr_400 = 0x15 << 8, 1573d0407baSopenharmony_ci 1583d0407baSopenharmony_ci RK_FORMAT_BGRX_8888 = 0x16 << 8, 1593d0407baSopenharmony_ci 1603d0407baSopenharmony_ci RK_FORMAT_YVYU_422 = 0x18 << 8, 1613d0407baSopenharmony_ci RK_FORMAT_YVYU_420 = 0x19 << 8, 1623d0407baSopenharmony_ci RK_FORMAT_VYUY_422 = 0x1a << 8, 1633d0407baSopenharmony_ci RK_FORMAT_VYUY_420 = 0x1b << 8, 1643d0407baSopenharmony_ci RK_FORMAT_YUYV_422 = 0x1c << 8, 1653d0407baSopenharmony_ci RK_FORMAT_YUYV_420 = 0x1d << 8, 1663d0407baSopenharmony_ci RK_FORMAT_UYVY_422 = 0x1e << 8, 1673d0407baSopenharmony_ci RK_FORMAT_UYVY_420 = 0x1f << 8, 1683d0407baSopenharmony_ci 1693d0407baSopenharmony_ci RK_FORMAT_YCbCr_420_SP_10B = 0x20 << 8, 1703d0407baSopenharmony_ci RK_FORMAT_YCrCb_420_SP_10B = 0x21 << 8, 1713d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_10b_SP = 0x22 << 8, 1723d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_10b_SP = 0x23 << 8, 1733d0407baSopenharmony_ci 1743d0407baSopenharmony_ci RK_FORMAT_BGR_565 = 0x24 << 8, 1753d0407baSopenharmony_ci RK_FORMAT_BGRA_5551 = 0x25 << 8, 1763d0407baSopenharmony_ci RK_FORMAT_BGRA_4444 = 0x26 << 8, 1773d0407baSopenharmony_ci RK_FORMAT_UNKNOWN = 0x100 << 8, 1783d0407baSopenharmony_ci} RgaSURF_FORMAT; 1793d0407baSopenharmony_ci 1803d0407baSopenharmony_citypedef struct rga_img_info_t { 1813d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 1823d0407baSopenharmony_ci unsigned long yrgb_addr; /* yrgb mem addr */ 1833d0407baSopenharmony_ci unsigned long uv_addr; /* cb/cr mem addr */ 1843d0407baSopenharmony_ci unsigned long v_addr; /* cr mem addr */ 1853d0407baSopenharmony_ci#else 1863d0407baSopenharmony_ci unsigned int yrgb_addr; /* yrgb mem addr */ 1873d0407baSopenharmony_ci unsigned int uv_addr; /* cb/cr mem addr */ 1883d0407baSopenharmony_ci unsigned int v_addr; /* cr mem addr */ 1893d0407baSopenharmony_ci#endif 1903d0407baSopenharmony_ci unsigned int format; // definition by RK_FORMAT 1913d0407baSopenharmony_ci unsigned short act_w; 1923d0407baSopenharmony_ci unsigned short act_h; 1933d0407baSopenharmony_ci unsigned short x_offset; 1943d0407baSopenharmony_ci unsigned short y_offset; 1953d0407baSopenharmony_ci 1963d0407baSopenharmony_ci unsigned short vir_w; 1973d0407baSopenharmony_ci unsigned short vir_h; 1983d0407baSopenharmony_ci 1993d0407baSopenharmony_ci unsigned short endian_mode; // for BPP 2003d0407baSopenharmony_ci unsigned short alpha_swap; 2013d0407baSopenharmony_ci} rga_img_info_t; 2023d0407baSopenharmony_ci 2033d0407baSopenharmony_citypedef struct mdp_img_act { 2043d0407baSopenharmony_ci unsigned short w; // width 2053d0407baSopenharmony_ci unsigned short h; // height 2063d0407baSopenharmony_ci short x_off; // x offset for the vir 2073d0407baSopenharmony_ci short y_off; // y offset for the vir 2083d0407baSopenharmony_ci} mdp_img_act; 2093d0407baSopenharmony_ci 2103d0407baSopenharmony_citypedef struct RANGE { 2113d0407baSopenharmony_ci unsigned short min; 2123d0407baSopenharmony_ci unsigned short max; 2133d0407baSopenharmony_ci} RANGE; 2143d0407baSopenharmony_ci 2153d0407baSopenharmony_citypedef struct POINT { 2163d0407baSopenharmony_ci unsigned short x; 2173d0407baSopenharmony_ci unsigned short y; 2183d0407baSopenharmony_ci} POINT; 2193d0407baSopenharmony_ci 2203d0407baSopenharmony_citypedef struct RECT { 2213d0407baSopenharmony_ci unsigned short xmin; 2223d0407baSopenharmony_ci unsigned short xmax; // width - 1 2233d0407baSopenharmony_ci unsigned short ymin; 2243d0407baSopenharmony_ci unsigned short ymax; // height - 1 2253d0407baSopenharmony_ci} RECT; 2263d0407baSopenharmony_ci 2273d0407baSopenharmony_citypedef struct RGB { 2283d0407baSopenharmony_ci unsigned char r; 2293d0407baSopenharmony_ci unsigned char g; 2303d0407baSopenharmony_ci unsigned char b; 2313d0407baSopenharmony_ci unsigned char res; 2323d0407baSopenharmony_ci} RGB; 2333d0407baSopenharmony_ci 2343d0407baSopenharmony_citypedef struct MMU { 2353d0407baSopenharmony_ci unsigned char mmu_en; 2363d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 2373d0407baSopenharmony_ci unsigned long base_addr; 2383d0407baSopenharmony_ci#else 2393d0407baSopenharmony_ci unsigned int base_addr; 2403d0407baSopenharmony_ci#endif 2413d0407baSopenharmony_ci unsigned int mmu_flag; /* [0] mmu enable [1] src_flush [2] dst_flush [3] CMD_flush [4~5] page size */ 2423d0407baSopenharmony_ci} MMU; 2433d0407baSopenharmony_ci 2443d0407baSopenharmony_citypedef struct COLOR_FILL { 2453d0407baSopenharmony_ci short gr_x_a; 2463d0407baSopenharmony_ci short gr_y_a; 2473d0407baSopenharmony_ci short gr_x_b; 2483d0407baSopenharmony_ci short gr_y_b; 2493d0407baSopenharmony_ci short gr_x_g; 2503d0407baSopenharmony_ci short gr_y_g; 2513d0407baSopenharmony_ci short gr_x_r; 2523d0407baSopenharmony_ci short gr_y_r; 2533d0407baSopenharmony_ci} COLOR_FILL; 2543d0407baSopenharmony_ci 2553d0407baSopenharmony_citypedef struct FADING { 2563d0407baSopenharmony_ci unsigned char b; 2573d0407baSopenharmony_ci unsigned char g; 2583d0407baSopenharmony_ci unsigned char r; 2593d0407baSopenharmony_ci unsigned char res; 2603d0407baSopenharmony_ci} FADING; 2613d0407baSopenharmony_ci 2623d0407baSopenharmony_citypedef struct line_draw_t { 2633d0407baSopenharmony_ci POINT start_point; /* LineDraw_start_point */ 2643d0407baSopenharmony_ci POINT end_point; /* LineDraw_end_point */ 2653d0407baSopenharmony_ci unsigned int color; /* LineDraw_color */ 2663d0407baSopenharmony_ci unsigned int flag; /* (enum) LineDrawing mode sel */ 2673d0407baSopenharmony_ci unsigned int line_width; /* range 1~16 */ 2683d0407baSopenharmony_ci} line_draw_t; 2693d0407baSopenharmony_ci 2703d0407baSopenharmony_ci/* color space convert coefficient. */ 2713d0407baSopenharmony_citypedef struct csc_coe_t { 2723d0407baSopenharmony_ci int16_t r_v; 2733d0407baSopenharmony_ci int16_t g_y; 2743d0407baSopenharmony_ci int16_t b_u; 2753d0407baSopenharmony_ci int32_t off; 2763d0407baSopenharmony_ci} csc_coe_t; 2773d0407baSopenharmony_ci 2783d0407baSopenharmony_citypedef struct full_csc_t { 2793d0407baSopenharmony_ci unsigned char flag; 2803d0407baSopenharmony_ci csc_coe_t coe_y; 2813d0407baSopenharmony_ci csc_coe_t coe_u; 2823d0407baSopenharmony_ci csc_coe_t coe_v; 2833d0407baSopenharmony_ci} full_csc_t; 2843d0407baSopenharmony_ci 2853d0407baSopenharmony_cistruct rga_req { 2863d0407baSopenharmony_ci unsigned char render_mode; /* (enum) process mode sel */ 2873d0407baSopenharmony_ci 2883d0407baSopenharmony_ci rga_img_info_t src; /* src image info */ 2893d0407baSopenharmony_ci rga_img_info_t dst; /* dst image info */ 2903d0407baSopenharmony_ci rga_img_info_t pat; /* patten image info */ 2913d0407baSopenharmony_ci 2923d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 2933d0407baSopenharmony_ci unsigned long rop_mask_addr; /* rop4 mask addr */ 2943d0407baSopenharmony_ci unsigned long LUT_addr; /* LUT addr */ 2953d0407baSopenharmony_ci#else 2963d0407baSopenharmony_ci unsigned int rop_mask_addr; /* rop4 mask addr */ 2973d0407baSopenharmony_ci unsigned int LUT_addr; /* LUT addr */ 2983d0407baSopenharmony_ci#endif 2993d0407baSopenharmony_ci 3003d0407baSopenharmony_ci RECT clip; /* dst clip window default value is dst_vir */ 3013d0407baSopenharmony_ci /* value from [0, w-1] / [0, h-1] */ 3023d0407baSopenharmony_ci 3033d0407baSopenharmony_ci int sina; /* dst angle default value 0 16.16 scan from table */ 3043d0407baSopenharmony_ci int cosa; /* dst angle default value 0 16.16 scan from table */ 3053d0407baSopenharmony_ci 3063d0407baSopenharmony_ci unsigned short alpha_rop_flag; /* alpha rop process flag */ 3073d0407baSopenharmony_ci /* ([0] = 1 alpha_rop_enable) */ 3083d0407baSopenharmony_ci /* ([1] = 1 rop enable) */ 3093d0407baSopenharmony_ci /* ([2] = 1 fading_enable) */ 3103d0407baSopenharmony_ci /* ([3] = 1 PD_enable) */ 3113d0407baSopenharmony_ci /* ([4] = 1 alpha cal_mode_sel) */ 3123d0407baSopenharmony_ci /* ([5] = 1 dither_enable) */ 3133d0407baSopenharmony_ci /* ([6] = 1 gradient fill mode sel) */ 3143d0407baSopenharmony_ci /* ([7] = 1 AA_enable) */ 3153d0407baSopenharmony_ci /* ([8] = 1 nn_quantize) */ 3163d0407baSopenharmony_ci /* ([9] = 1 Real color mode) */ 3173d0407baSopenharmony_ci 3183d0407baSopenharmony_ci unsigned char scale_mode; /* 0 nearst / 1 bilnear / 2 bicubic */ 3193d0407baSopenharmony_ci 3203d0407baSopenharmony_ci unsigned int color_key_max; /* color key max */ 3213d0407baSopenharmony_ci unsigned int color_key_min; /* color key min */ 3223d0407baSopenharmony_ci 3233d0407baSopenharmony_ci unsigned int fg_color; /* foreground color */ 3243d0407baSopenharmony_ci unsigned int bg_color; /* background color */ 3253d0407baSopenharmony_ci 3263d0407baSopenharmony_ci COLOR_FILL gr_color; /* color fill use gradient */ 3273d0407baSopenharmony_ci 3283d0407baSopenharmony_ci line_draw_t line_draw_info; 3293d0407baSopenharmony_ci 3303d0407baSopenharmony_ci FADING fading; 3313d0407baSopenharmony_ci 3323d0407baSopenharmony_ci unsigned char PD_mode; /* porter duff alpha mode sel */ 3333d0407baSopenharmony_ci 3343d0407baSopenharmony_ci unsigned char alpha_global_value; /* global alpha value */ 3353d0407baSopenharmony_ci 3363d0407baSopenharmony_ci unsigned short rop_code; /* rop2/3/4 code scan from rop code table */ 3373d0407baSopenharmony_ci 3383d0407baSopenharmony_ci unsigned char bsfilter_flag; /* [2] 0 blur 1 sharp / [1:0] filter_type */ 3393d0407baSopenharmony_ci 3403d0407baSopenharmony_ci unsigned char palette_mode; /* (enum) color palatte 0/1bpp, 1/2bpp 2/4bpp 3/8bpp */ 3413d0407baSopenharmony_ci 3423d0407baSopenharmony_ci unsigned char yuv2rgb_mode; /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */ 3433d0407baSopenharmony_ci 3443d0407baSopenharmony_ci unsigned char endian_mode; /* 0/big endian 1/little endian */ 3453d0407baSopenharmony_ci 3463d0407baSopenharmony_ci unsigned char rotate_mode; /* (enum) rotate mode */ 3473d0407baSopenharmony_ci /* 0x0, no rotate */ 3483d0407baSopenharmony_ci /* 0x1, rotate */ 3493d0407baSopenharmony_ci /* 0x2, x_mirror */ 3503d0407baSopenharmony_ci /* 0x3, y_mirror */ 3513d0407baSopenharmony_ci 3523d0407baSopenharmony_ci unsigned char color_fill_mode; /* 0 solid color / 1 patten color */ 3533d0407baSopenharmony_ci 3543d0407baSopenharmony_ci MMU mmu_info; /* mmu information */ 3553d0407baSopenharmony_ci 3563d0407baSopenharmony_ci unsigned char alpha_rop_mode; /* ([0~1] alpha mode) */ 3573d0407baSopenharmony_ci /* ([2~3] rop mode) */ 3583d0407baSopenharmony_ci /* ([4] zero mode en) */ 3593d0407baSopenharmony_ci /* ([5] dst alpha mode) (RGA1) */ 3603d0407baSopenharmony_ci 3613d0407baSopenharmony_ci unsigned char src_trans_mode; 3623d0407baSopenharmony_ci 3633d0407baSopenharmony_ci unsigned char dither_mode; 3643d0407baSopenharmony_ci 3653d0407baSopenharmony_ci full_csc_t full_csc; /* full color space convert */ 3663d0407baSopenharmony_ci 3673d0407baSopenharmony_ci unsigned char CMD_fin_int_enable; 3683d0407baSopenharmony_ci 3693d0407baSopenharmony_ci /* completion is reported through a callback */ 3703d0407baSopenharmony_ci void (*complete)(int retval); 3713d0407baSopenharmony_ci}; 3723d0407baSopenharmony_ci 3733d0407baSopenharmony_ciint RGA_set_src_act_info(struct rga_req *req, unsigned int width, /* act width */ 3743d0407baSopenharmony_ci unsigned int height, /* act height */ 3753d0407baSopenharmony_ci unsigned int x_off, /* x_off */ 3763d0407baSopenharmony_ci unsigned int y_off /* y_off */ 3773d0407baSopenharmony_ci); 3783d0407baSopenharmony_ci 3793d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 3803d0407baSopenharmony_ciint RGA_set_src_vir_info(struct rga_req *req, unsigned long yrgb_addr, /* yrgb_addr */ 3813d0407baSopenharmony_ci unsigned long uv_addr, /* uv_addr */ 3823d0407baSopenharmony_ci unsigned long v_addr, /* v_addr */ 3833d0407baSopenharmony_ci unsigned int vir_w, /* vir width */ 3843d0407baSopenharmony_ci unsigned int vir_h, /* vir height */ 3853d0407baSopenharmony_ci unsigned char format, /* format */ 3863d0407baSopenharmony_ci unsigned char a_swap_en /* only for 32bit RGB888 format */ 3873d0407baSopenharmony_ci); 3883d0407baSopenharmony_ci#else 3893d0407baSopenharmony_ciint RGA_set_src_vir_info(struct rga_req *req, unsigned int yrgb_addr, /* yrgb_addr */ 3903d0407baSopenharmony_ci unsigned int uv_addr, /* uv_addr */ 3913d0407baSopenharmony_ci unsigned int v_addr, /* v_addr */ 3923d0407baSopenharmony_ci unsigned int vir_w, /* vir width */ 3933d0407baSopenharmony_ci unsigned int vir_h, /* vir height */ 3943d0407baSopenharmony_ci unsigned char format, /* format */ 3953d0407baSopenharmony_ci unsigned char a_swap_en /* only for 32bit RGB888 format */ 3963d0407baSopenharmony_ci); 3973d0407baSopenharmony_ci#endif 3983d0407baSopenharmony_ci 3993d0407baSopenharmony_ciint RGA_set_dst_act_info(struct rga_req *req, unsigned int width, /* act width */ 4003d0407baSopenharmony_ci unsigned int height, /* act height */ 4013d0407baSopenharmony_ci unsigned int x_off, /* x_off */ 4023d0407baSopenharmony_ci unsigned int y_off /* y_off */ 4033d0407baSopenharmony_ci); 4043d0407baSopenharmony_ci 4053d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 4063d0407baSopenharmony_ciint RGA_set_dst_vir_info(struct rga_req *msg, unsigned long yrgb_addr, /* yrgb_addr */ 4073d0407baSopenharmony_ci unsigned long uv_addr, /* uv_addr */ 4083d0407baSopenharmony_ci unsigned long v_addr, /* v_addr */ 4093d0407baSopenharmony_ci unsigned int vir_w, /* vir width */ 4103d0407baSopenharmony_ci unsigned int vir_h, /* vir height */ 4113d0407baSopenharmony_ci RECT *clip, /* clip window */ 4123d0407baSopenharmony_ci unsigned char format, /* format */ 4133d0407baSopenharmony_ci unsigned char a_swap_en); 4143d0407baSopenharmony_ci#else 4153d0407baSopenharmony_ciint RGA_set_dst_vir_info(struct rga_req *msg, unsigned int yrgb_addr, /* yrgb_addr */ 4163d0407baSopenharmony_ci unsigned int uv_addr, /* uv_addr */ 4173d0407baSopenharmony_ci unsigned int v_addr, /* v_addr */ 4183d0407baSopenharmony_ci unsigned int vir_w, /* vir width */ 4193d0407baSopenharmony_ci unsigned int vir_h, /* vir height */ 4203d0407baSopenharmony_ci RECT *clip, /* clip window */ 4213d0407baSopenharmony_ci unsigned char format, /* format */ 4223d0407baSopenharmony_ci unsigned char a_swap_en); 4233d0407baSopenharmony_ci#endif 4243d0407baSopenharmony_ci 4253d0407baSopenharmony_ciint RGA_set_pat_info(struct rga_req *msg, unsigned int width, unsigned int height, unsigned int x_off, 4263d0407baSopenharmony_ci unsigned int y_off, unsigned int pat_format); 4273d0407baSopenharmony_ci 4283d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 4293d0407baSopenharmony_ciint RGA_set_rop_mask_info(struct rga_req *msg, unsigned long rop_mask_addr, unsigned int rop_mask_endian_mode); 4303d0407baSopenharmony_ci#else 4313d0407baSopenharmony_ciint RGA_set_rop_mask_info(struct rga_req *msg, unsigned int rop_mask_addr, unsigned int rop_mask_endian_mode); 4323d0407baSopenharmony_ci#endif 4333d0407baSopenharmony_ci 4343d0407baSopenharmony_ciint RGA_set_alpha_en_info(struct rga_req *msg, 4353d0407baSopenharmony_ci unsigned int alpha_cal_mode, /* 0:alpha' = alpha + (alpha>>7) | alpha' = alpha */ 4363d0407baSopenharmony_ci unsigned int alpha_mode, /* 0 global alpha / 1 per pixel alpha / 2 mix mode */ 4373d0407baSopenharmony_ci unsigned int global_a_value, unsigned int PD_en, /* porter duff alpha mode en */ 4383d0407baSopenharmony_ci unsigned int PD_mode, unsigned int dst_alpha_en); /* use dst alpha */ 4393d0407baSopenharmony_ci 4403d0407baSopenharmony_ciint RGA_set_rop_en_info(struct rga_req *msg, unsigned int ROP_mode, unsigned int ROP_code, unsigned int color_mode, 4413d0407baSopenharmony_ci unsigned int solid_color); 4423d0407baSopenharmony_ci 4433d0407baSopenharmony_ciint RGA_set_fading_en_info(struct rga_req *msg, unsigned char r, unsigned char g, unsigned char b); 4443d0407baSopenharmony_ci 4453d0407baSopenharmony_ciint RGA_set_src_trans_mode_info(struct rga_req *msg, unsigned char trans_mode, unsigned char a_en, unsigned char b_en, 4463d0407baSopenharmony_ci unsigned char g_en, unsigned char r_en, unsigned char color_key_min, 4473d0407baSopenharmony_ci unsigned char color_key_max, unsigned char zero_mode_en); 4483d0407baSopenharmony_ci 4493d0407baSopenharmony_ciint RGA_set_bitblt_mode(struct rga_req *msg, 4503d0407baSopenharmony_ci unsigned char scale_mode, // 0/near 1/bilnear 2/bicubic 4513d0407baSopenharmony_ci unsigned char rotate_mode, // 0/copy 1/rotate_scale 2/x_mirror 3/y_mirror 4523d0407baSopenharmony_ci unsigned int angle, // rotate angle 4533d0407baSopenharmony_ci unsigned int dither_en, // dither en flag 4543d0407baSopenharmony_ci unsigned int AA_en, // AA flag 4553d0407baSopenharmony_ci unsigned int yuv2rgb_mode); 4563d0407baSopenharmony_ci 4573d0407baSopenharmony_ciint RGA_set_color_palette_mode(struct rga_req *msg, unsigned char palette_mode, /* 1bpp/2bpp/4bpp/8bpp */ 4583d0407baSopenharmony_ci unsigned char endian_mode, /* src endian mode sel */ 4593d0407baSopenharmony_ci unsigned int bpp1_0_color, /* BPP1 = 0 */ 4603d0407baSopenharmony_ci unsigned int bpp1_1_color /* BPP1 = 1 */ 4613d0407baSopenharmony_ci); 4623d0407baSopenharmony_ci 4633d0407baSopenharmony_ciint RGA_set_color_fill_mode(struct rga_req *msg, COLOR_FILL *gr_color, /* gradient color part */ 4643d0407baSopenharmony_ci unsigned char gr_satur_mode, /* saturation mode */ 4653d0407baSopenharmony_ci unsigned char cf_mode, /* patten fill or solid fill */ 4663d0407baSopenharmony_ci unsigned int color, /* solid color */ 4673d0407baSopenharmony_ci unsigned short pat_width, /* pattern width */ 4683d0407baSopenharmony_ci unsigned short pat_height, /* pattern height */ 4693d0407baSopenharmony_ci unsigned char pat_x_off, /* pattern x offset */ 4703d0407baSopenharmony_ci unsigned char pat_y_off, /* pattern y offset */ 4713d0407baSopenharmony_ci unsigned char aa_en /* alpha en */ 4723d0407baSopenharmony_ci); 4733d0407baSopenharmony_ci 4743d0407baSopenharmony_ciint RGA_set_line_point_drawing_mode(struct rga_req *msg, POINT sp, /* start point */ 4753d0407baSopenharmony_ci POINT ep, /* end point */ 4763d0407baSopenharmony_ci unsigned int color, /* line point drawing color */ 4773d0407baSopenharmony_ci unsigned int line_width, /* line width */ 4783d0407baSopenharmony_ci unsigned char AA_en, /* AA en */ 4793d0407baSopenharmony_ci unsigned char last_point_en /* last point en */ 4803d0407baSopenharmony_ci); 4813d0407baSopenharmony_ci 4823d0407baSopenharmony_ciint RGA_set_blur_sharp_filter_mode(struct rga_req *msg, unsigned char filter_mode, /* blur/sharpness */ 4833d0407baSopenharmony_ci unsigned char filter_type, /* filter intensity */ 4843d0407baSopenharmony_ci unsigned char dither_en /* dither_en flag */ 4853d0407baSopenharmony_ci); 4863d0407baSopenharmony_ci 4873d0407baSopenharmony_ciint RGA_set_pre_scaling_mode(struct rga_req *msg, unsigned char dither_en); 4883d0407baSopenharmony_ci 4893d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 4903d0407baSopenharmony_ciint RGA_update_palette_table_mode(struct rga_req *msg, unsigned long LUT_addr, /* LUT table addr */ 4913d0407baSopenharmony_ci unsigned int palette_mode /* 1bpp/2bpp/4bpp/8bpp */ 4923d0407baSopenharmony_ci); 4933d0407baSopenharmony_ci#else 4943d0407baSopenharmony_ciint RGA_update_palette_table_mode(struct rga_req *msg, unsigned int LUT_addr, /* LUT table addr */ 4953d0407baSopenharmony_ci unsigned int palette_mode /* 1bpp/2bpp/4bpp/8bpp */ 4963d0407baSopenharmony_ci); 4973d0407baSopenharmony_ci#endif 4983d0407baSopenharmony_ci 4993d0407baSopenharmony_ciint RGA_set_update_patten_buff_mode(struct rga_req *msg, unsigned int pat_addr, /* patten addr */ 5003d0407baSopenharmony_ci unsigned int w, /* patten width */ 5013d0407baSopenharmony_ci unsigned int h, /* patten height */ 5023d0407baSopenharmony_ci unsigned int format /* patten format */ 5033d0407baSopenharmony_ci); 5043d0407baSopenharmony_ci 5053d0407baSopenharmony_ci#if defined(__arm64__) || defined(__aarch64__) 5063d0407baSopenharmony_ciint RGA_set_mmu_info(struct rga_req *msg, unsigned char mmu_en, unsigned char src_flush, unsigned char dst_flush, 5073d0407baSopenharmony_ci unsigned char cmd_flush, unsigned long base_addr, unsigned char page_size); 5083d0407baSopenharmony_ci#else 5093d0407baSopenharmony_ciint RGA_set_mmu_info(struct rga_req *msg, unsigned char mmu_en, unsigned char src_flush, unsigned char dst_flush, 5103d0407baSopenharmony_ci unsigned char cmd_flush, unsigned int base_addr, unsigned char page_size); 5113d0407baSopenharmony_ci#endif 5123d0407baSopenharmony_ci 5133d0407baSopenharmony_civoid rga_set_fds_offsets(struct rga_req *rga_request, unsigned short src_fd, unsigned short dst_fd, 5143d0407baSopenharmony_ci unsigned int src_offset, unsigned int dst_offset); 5153d0407baSopenharmony_ci 5163d0407baSopenharmony_ciint RGA_set_src_fence_flag(struct rga_req *msg, int acq_fence, int src_flag); 5173d0407baSopenharmony_ci 5183d0407baSopenharmony_ciint RGA_set_dst_fence_flag(struct rga_req *msg, int dst_flag); 5193d0407baSopenharmony_ci 5203d0407baSopenharmony_ciint RGA_get_dst_fence(struct rga_req *msg); 5213d0407baSopenharmony_ci#ifdef __cplusplus 5223d0407baSopenharmony_ci} 5233d0407baSopenharmony_ci#endif 5243d0407baSopenharmony_ci 5253d0407baSopenharmony_ci#endif /* _RK29_IPP_DRIVER_H_ */ 526