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