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