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 223d0407baSopenharmony_ci#include <asm/ioctl.h> 233d0407baSopenharmony_ci#include <stdint.h> 243d0407baSopenharmony_ci 253d0407baSopenharmony_ci#ifdef __cplusplus 263d0407baSopenharmony_ciextern "C" 273d0407baSopenharmony_ci{ 283d0407baSopenharmony_ci#endif 293d0407baSopenharmony_ci 303d0407baSopenharmony_ci/* Use 'r' as magic number */ 313d0407baSopenharmony_ci#define RGA_IOC_MAGIC 'r' 323d0407baSopenharmony_ci#define RGA_IOW(nr, type) _IOW(RGA_IOC_MAGIC, nr, type) 333d0407baSopenharmony_ci#define RGA_IOR(nr, type) _IOR(RGA_IOC_MAGIC, nr, type) 343d0407baSopenharmony_ci#define RGA_IOWR(nr, type) _IOWR(RGA_IOC_MAGIC, nr, type) 353d0407baSopenharmony_ci 363d0407baSopenharmony_ci#define RGA_IOC_GET_DRVIER_VERSION RGA_IOR(0x1, struct rga_version_t) 373d0407baSopenharmony_ci#define RGA_IOC_GET_HW_VERSION RGA_IOR(0x2, struct rga_hw_versions_t) 383d0407baSopenharmony_ci#define RGA_IOC_IMPORT_BUFFER RGA_IOWR(0x3, struct rga_buffer_pool) 393d0407baSopenharmony_ci#define RGA_IOC_RELEASE_BUFFER RGA_IOW(0x4, struct rga_buffer_pool) 403d0407baSopenharmony_ci#define RGA_START_CONFIG RGA_IOR(0x5, uint32_t) 413d0407baSopenharmony_ci#define RGA_END_CONFIG RGA_IOWR(0x6, struct rga_user_ctx_t) 423d0407baSopenharmony_ci#define RGA_CMD_CONFIG RGA_IOWR(0x7, struct rga_user_ctx_t) 433d0407baSopenharmony_ci#define RGA_CANCEL_CONFIG RGA_IOWR(0x8, uint32_t) 443d0407baSopenharmony_ci 453d0407baSopenharmony_ci#define RGA_BLIT_SYNC 0x5017 463d0407baSopenharmony_ci#define RGA_BLIT_ASYNC 0x5018 473d0407baSopenharmony_ci#define RGA_FLUSH 0x5019 483d0407baSopenharmony_ci#define RGA_GET_RESULT 0x501a 493d0407baSopenharmony_ci#define RGA_GET_VERSION 0x501b 503d0407baSopenharmony_ci 513d0407baSopenharmony_ci#define RGA2_BLIT_SYNC 0x6017 523d0407baSopenharmony_ci#define RGA2_BLIT_ASYNC 0x6018 533d0407baSopenharmony_ci#define RGA2_FLUSH 0x6019 543d0407baSopenharmony_ci#define RGA2_GET_RESULT 0x601a 553d0407baSopenharmony_ci#define RGA2_GET_VERSION 0x601b 563d0407baSopenharmony_ci 573d0407baSopenharmony_ci#define RGA_REG_CTRL_LEN 0x8 /* 8 */ 583d0407baSopenharmony_ci#define RGA_REG_CMD_LEN 0x1c /* 28 */ 593d0407baSopenharmony_ci#define RGA_CMD_BUF_SIZE 0x700 /* 16*28*4 */ 603d0407baSopenharmony_ci 613d0407baSopenharmony_ci#ifndef ENABLE 623d0407baSopenharmony_ci#define ENABLE 1 633d0407baSopenharmony_ci#endif 643d0407baSopenharmony_ci 653d0407baSopenharmony_ci#ifndef DISABLE 663d0407baSopenharmony_ci#define DISABLE 0 673d0407baSopenharmony_ci#endif 683d0407baSopenharmony_ci 693d0407baSopenharmony_cienum rga_memory_type { 703d0407baSopenharmony_ci RGA_DMA_BUFFER = 0, 713d0407baSopenharmony_ci RGA_VIRTUAL_ADDRESS, 723d0407baSopenharmony_ci RGA_PHYSICAL_ADDRESS 733d0407baSopenharmony_ci}; 743d0407baSopenharmony_ci 753d0407baSopenharmony_ci/* RGA process mode enum */ 763d0407baSopenharmony_cienum { 773d0407baSopenharmony_ci bitblt_mode = 0x0, 783d0407baSopenharmony_ci color_palette_mode = 0x1, 793d0407baSopenharmony_ci color_fill_mode = 0x2, 803d0407baSopenharmony_ci line_point_drawing_mode = 0x3, 813d0407baSopenharmony_ci blur_sharp_filter_mode = 0x4, 823d0407baSopenharmony_ci pre_scaling_mode = 0x5, 833d0407baSopenharmony_ci update_palette_table_mode = 0x6, 843d0407baSopenharmony_ci update_patten_buff_mode = 0x7, 853d0407baSopenharmony_ci}; 863d0407baSopenharmony_ci 873d0407baSopenharmony_ci 883d0407baSopenharmony_cienum { 893d0407baSopenharmony_ci rop_enable_mask = 0x2, 903d0407baSopenharmony_ci dither_enable_mask = 0x8, 913d0407baSopenharmony_ci fading_enable_mask = 0x10, 923d0407baSopenharmony_ci PD_enbale_mask = 0x20, 933d0407baSopenharmony_ci}; 943d0407baSopenharmony_ci 953d0407baSopenharmony_cienum { 963d0407baSopenharmony_ci yuv2rgb_mode0 = 0x0, /* BT.601 MPEG */ 973d0407baSopenharmony_ci yuv2rgb_mode1 = 0x1, /* BT.601 JPEG */ 983d0407baSopenharmony_ci yuv2rgb_mode2 = 0x2, /* BT.709 */ 993d0407baSopenharmony_ci 1003d0407baSopenharmony_ci rgb2yuv_601_full = 0x1 << 8, 1013d0407baSopenharmony_ci rgb2yuv_709_full = 0x2 << 8, 1023d0407baSopenharmony_ci yuv2yuv_601_limit_2_709_limit = 0x3 << 8, 1033d0407baSopenharmony_ci yuv2yuv_601_limit_2_709_full = 0x4 << 8, 1043d0407baSopenharmony_ci yuv2yuv_709_limit_2_601_limit = 0x5 << 8, 1053d0407baSopenharmony_ci yuv2yuv_709_limit_2_601_full = 0x6 << 8, //not support 1063d0407baSopenharmony_ci yuv2yuv_601_full_2_709_limit = 0x7 << 8, 1073d0407baSopenharmony_ci yuv2yuv_601_full_2_709_full = 0x8 << 8, //not support 1083d0407baSopenharmony_ci yuv2yuv_709_full_2_601_limit = 0x9 << 8, //not support 1093d0407baSopenharmony_ci yuv2yuv_709_full_2_601_full = 0xa << 8, //not support 1103d0407baSopenharmony_ci full_csc_mask = 0xf00, 1113d0407baSopenharmony_ci}; 1123d0407baSopenharmony_ci 1133d0407baSopenharmony_ci/* RGA rotate mode */ 1143d0407baSopenharmony_cienum { 1153d0407baSopenharmony_ci rotate_mode0 = 0x0, /* no rotate */ 1163d0407baSopenharmony_ci rotate_mode1 = 0x1, /* rotate */ 1173d0407baSopenharmony_ci rotate_mode2 = 0x2, /* x_mirror */ 1183d0407baSopenharmony_ci rotate_mode3 = 0x3, /* y_mirror */ 1193d0407baSopenharmony_ci}; 1203d0407baSopenharmony_ci 1213d0407baSopenharmony_cienum { 1223d0407baSopenharmony_ci color_palette_mode0 = 0x0, /* 1K */ 1233d0407baSopenharmony_ci color_palette_mode1 = 0x1, /* 2K */ 1243d0407baSopenharmony_ci color_palette_mode2 = 0x2, /* 4K */ 1253d0407baSopenharmony_ci color_palette_mode3 = 0x3, /* 8K */ 1263d0407baSopenharmony_ci}; 1273d0407baSopenharmony_ci 1283d0407baSopenharmony_cienum { 1293d0407baSopenharmony_ci BB_BYPASS = 0x0, /* no rotate */ 1303d0407baSopenharmony_ci BB_ROTATE = 0x1, /* rotate */ 1313d0407baSopenharmony_ci BB_X_MIRROR = 0x2, /* x_mirror */ 1323d0407baSopenharmony_ci BB_Y_MIRROR = 0x3 /* y_mirror */ 1333d0407baSopenharmony_ci}; 1343d0407baSopenharmony_ci 1353d0407baSopenharmony_cienum { 1363d0407baSopenharmony_ci nearby = 0x0, /* no rotate */ 1373d0407baSopenharmony_ci bilinear = 0x1, /* rotate */ 1383d0407baSopenharmony_ci bicubic = 0x2, /* x_mirror */ 1393d0407baSopenharmony_ci}; 1403d0407baSopenharmony_ci 1413d0407baSopenharmony_ci#define RGA_SCHED_PRIORITY_DEFAULT 0 1423d0407baSopenharmony_ci#define RGA_SCHED_PRIORITY_MAX 6 1433d0407baSopenharmony_ci 1443d0407baSopenharmony_cienum { 1453d0407baSopenharmony_ci RGA3_SCHEDULER_CORE0 = 1 << 0, 1463d0407baSopenharmony_ci RGA3_SCHEDULER_CORE1 = 1 << 1, 1473d0407baSopenharmony_ci RGA2_SCHEDULER_CORE0 = 1 << 2, 1483d0407baSopenharmony_ci}; 1493d0407baSopenharmony_ci 1503d0407baSopenharmony_ci/* 1513d0407baSopenharmony_ci// Alpha Red Green Blue 1523d0407baSopenharmony_ci{ 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGBA }, // RK_FORMAT_RGBA_8888 1533d0407baSopenharmony_ci{ 4, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGBX_8888 1543d0407baSopenharmony_ci{ 3, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGB_888 1553d0407baSopenharmony_ci{ 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_BGRA }, // RK_FORMAT_BGRA_8888 1563d0407baSopenharmony_ci{ 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, // RK_FORMAT_RGB_565 1573d0407baSopenharmony_ci{ 2, 16, {{ 1, 0, 16,11, 11, 6, 6, 1 }}, GGL_RGBA }, // RK_FORMAT_RGBA_5551 1583d0407baSopenharmony_ci{ 2, 16, {{ 4, 0, 16,12, 12, 8, 8, 4 }}, GGL_RGBA }, // RK_FORMAT_RGBA_4444 1593d0407baSopenharmony_ci{ 3, 24, {{ 0, 0, 24,16, 16, 8, 8, 0 }}, GGL_BGR }, // RK_FORMAT_BGB_888 1603d0407baSopenharmony_ci 1613d0407baSopenharmony_ci*/ 1623d0407baSopenharmony_ci/* In order to be compatible with RK_FORMAT_XX and HAL_PIXEL_FORMAT_XX, 1633d0407baSopenharmony_ci * RK_FORMAT_XX is shifted to the left by 8 bits to distinguish. */ 1643d0407baSopenharmony_citypedef enum _Rga_SURF_FORMAT { 1653d0407baSopenharmony_ci RK_FORMAT_RGBA_8888 = 0x0 << 8, 1663d0407baSopenharmony_ci RK_FORMAT_RGBX_8888 = 0x1 << 8, 1673d0407baSopenharmony_ci RK_FORMAT_RGB_888 = 0x2 << 8, 1683d0407baSopenharmony_ci RK_FORMAT_BGRA_8888 = 0x3 << 8, 1693d0407baSopenharmony_ci RK_FORMAT_RGB_565 = 0x4 << 8, 1703d0407baSopenharmony_ci RK_FORMAT_RGBA_5551 = 0x5 << 8, 1713d0407baSopenharmony_ci RK_FORMAT_RGBA_4444 = 0x6 << 8, 1723d0407baSopenharmony_ci RK_FORMAT_BGR_888 = 0x7 << 8, 1733d0407baSopenharmony_ci 1743d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_SP = 0x8 << 8, 1753d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_P = 0x9 << 8, 1763d0407baSopenharmony_ci RK_FORMAT_YCbCr_420_SP = 0xa << 8, 1773d0407baSopenharmony_ci RK_FORMAT_YCbCr_420_P = 0xb << 8, 1783d0407baSopenharmony_ci 1793d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_SP = 0xc << 8, 1803d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_P = 0xd << 8, 1813d0407baSopenharmony_ci RK_FORMAT_YCrCb_420_SP = 0xe << 8, 1823d0407baSopenharmony_ci RK_FORMAT_YCrCb_420_P = 0xf << 8, 1833d0407baSopenharmony_ci 1843d0407baSopenharmony_ci RK_FORMAT_BPP1 = 0x10 << 8, 1853d0407baSopenharmony_ci RK_FORMAT_BPP2 = 0x11 << 8, 1863d0407baSopenharmony_ci RK_FORMAT_BPP4 = 0x12 << 8, 1873d0407baSopenharmony_ci RK_FORMAT_BPP8 = 0x13 << 8, 1883d0407baSopenharmony_ci 1893d0407baSopenharmony_ci RK_FORMAT_Y4 = 0x14 << 8, 1903d0407baSopenharmony_ci RK_FORMAT_YCbCr_400 = 0x15 << 8, 1913d0407baSopenharmony_ci 1923d0407baSopenharmony_ci RK_FORMAT_BGRX_8888 = 0x16 << 8, 1933d0407baSopenharmony_ci 1943d0407baSopenharmony_ci RK_FORMAT_YVYU_422 = 0x18 << 8, 1953d0407baSopenharmony_ci RK_FORMAT_YVYU_420 = 0x19 << 8, 1963d0407baSopenharmony_ci RK_FORMAT_VYUY_422 = 0x1a << 8, 1973d0407baSopenharmony_ci RK_FORMAT_VYUY_420 = 0x1b << 8, 1983d0407baSopenharmony_ci RK_FORMAT_YUYV_422 = 0x1c << 8, 1993d0407baSopenharmony_ci RK_FORMAT_YUYV_420 = 0x1d << 8, 2003d0407baSopenharmony_ci RK_FORMAT_UYVY_422 = 0x1e << 8, 2013d0407baSopenharmony_ci RK_FORMAT_UYVY_420 = 0x1f << 8, 2023d0407baSopenharmony_ci 2033d0407baSopenharmony_ci RK_FORMAT_YCbCr_420_SP_10B = 0x20 << 8, 2043d0407baSopenharmony_ci RK_FORMAT_YCrCb_420_SP_10B = 0x21 << 8, 2053d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_SP_10B = 0x22 << 8, 2063d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_SP_10B = 0x23 << 8, 2073d0407baSopenharmony_ci /* For compatibility with misspellings */ 2083d0407baSopenharmony_ci RK_FORMAT_YCbCr_422_10b_SP = RK_FORMAT_YCbCr_422_SP_10B, 2093d0407baSopenharmony_ci RK_FORMAT_YCrCb_422_10b_SP = RK_FORMAT_YCrCb_422_SP_10B, 2103d0407baSopenharmony_ci 2113d0407baSopenharmony_ci RK_FORMAT_BGR_565 = 0x24 << 8, 2123d0407baSopenharmony_ci RK_FORMAT_BGRA_5551 = 0x25 << 8, 2133d0407baSopenharmony_ci RK_FORMAT_BGRA_4444 = 0x26 << 8, 2143d0407baSopenharmony_ci 2153d0407baSopenharmony_ci RK_FORMAT_ARGB_8888 = 0x28 << 8, 2163d0407baSopenharmony_ci RK_FORMAT_XRGB_8888 = 0x29 << 8, 2173d0407baSopenharmony_ci RK_FORMAT_ARGB_5551 = 0x2a << 8, 2183d0407baSopenharmony_ci RK_FORMAT_ARGB_4444 = 0x2b << 8, 2193d0407baSopenharmony_ci RK_FORMAT_ABGR_8888 = 0x2c << 8, 2203d0407baSopenharmony_ci RK_FORMAT_XBGR_8888 = 0x2d << 8, 2213d0407baSopenharmony_ci RK_FORMAT_ABGR_5551 = 0x2e << 8, 2223d0407baSopenharmony_ci RK_FORMAT_ABGR_4444 = 0x2f << 8, 2233d0407baSopenharmony_ci 2243d0407baSopenharmony_ci RK_FORMAT_RGBA2BPP = 0x30 << 8, 2253d0407baSopenharmony_ci 2263d0407baSopenharmony_ci RK_FORMAT_UNKNOWN = 0x100 << 8, 2273d0407baSopenharmony_ci} RgaSURF_FORMAT; 2283d0407baSopenharmony_ci 2293d0407baSopenharmony_ci/* RGA3 rd_mode */ 2303d0407baSopenharmony_cienum 2313d0407baSopenharmony_ci{ 2323d0407baSopenharmony_ci raster_mode = 0x1 << 0, 2333d0407baSopenharmony_ci fbc_mode = 0x1 << 1, 2343d0407baSopenharmony_ci tile_mode = 0x1 << 2, 2353d0407baSopenharmony_ci}; 2363d0407baSopenharmony_ci 2373d0407baSopenharmony_citypedef struct rga_img_info_t { 2383d0407baSopenharmony_ci uint64_t yrgb_addr; /* yrgb mem addr */ 2393d0407baSopenharmony_ci uint64_t uv_addr; /* cb/cr mem addr */ 2403d0407baSopenharmony_ci uint64_t v_addr; /* cr mem addr */ 2413d0407baSopenharmony_ci 2423d0407baSopenharmony_ci uint32_t format; //definition by RK_FORMAT 2433d0407baSopenharmony_ci uint16_t act_w; 2443d0407baSopenharmony_ci uint16_t act_h; 2453d0407baSopenharmony_ci uint16_t x_offset; 2463d0407baSopenharmony_ci uint16_t y_offset; 2473d0407baSopenharmony_ci 2483d0407baSopenharmony_ci uint16_t vir_w; 2493d0407baSopenharmony_ci uint16_t vir_h; 2503d0407baSopenharmony_ci 2513d0407baSopenharmony_ci uint16_t endian_mode; //for BPP 2523d0407baSopenharmony_ci uint16_t alpha_swap; 2533d0407baSopenharmony_ci 2543d0407baSopenharmony_ci //used by RGA3 2553d0407baSopenharmony_ci uint16_t rotate_mode; 2563d0407baSopenharmony_ci uint16_t rd_mode; 2573d0407baSopenharmony_ci 2583d0407baSopenharmony_ci uint16_t is_10b_compact; 2593d0407baSopenharmony_ci uint16_t is_10b_endian; 2603d0407baSopenharmony_ci 2613d0407baSopenharmony_ci uint16_t enable; 2623d0407baSopenharmony_ci} 2633d0407baSopenharmony_cirga_img_info_t; 2643d0407baSopenharmony_ci 2653d0407baSopenharmony_citypedef struct POINT { 2663d0407baSopenharmony_ci uint16_t x; 2673d0407baSopenharmony_ci uint16_t y; 2683d0407baSopenharmony_ci} 2693d0407baSopenharmony_ciPOINT; 2703d0407baSopenharmony_ci 2713d0407baSopenharmony_citypedef struct RECT { 2723d0407baSopenharmony_ci uint16_t xmin; 2733d0407baSopenharmony_ci uint16_t xmax; // width - 1 2743d0407baSopenharmony_ci uint16_t ymin; 2753d0407baSopenharmony_ci uint16_t ymax; // height - 1 2763d0407baSopenharmony_ci} RECT; 2773d0407baSopenharmony_ci 2783d0407baSopenharmony_citypedef struct MMU { 2793d0407baSopenharmony_ci uint8_t mmu_en; 2803d0407baSopenharmony_ci uint64_t base_addr; 2813d0407baSopenharmony_ci uint32_t mmu_flag; /* [0] mmu enable [1] src_flush [2] dst_flush [3] CMD_flush [4~5] page size*/ 2823d0407baSopenharmony_ci} MMU; 2833d0407baSopenharmony_ci 2843d0407baSopenharmony_citypedef struct COLOR_FILL { 2853d0407baSopenharmony_ci int16_t gr_x_a; 2863d0407baSopenharmony_ci int16_t gr_y_a; 2873d0407baSopenharmony_ci int16_t gr_x_b; 2883d0407baSopenharmony_ci int16_t gr_y_b; 2893d0407baSopenharmony_ci int16_t gr_x_g; 2903d0407baSopenharmony_ci int16_t gr_y_g; 2913d0407baSopenharmony_ci int16_t gr_x_r; 2923d0407baSopenharmony_ci int16_t gr_y_r; 2933d0407baSopenharmony_ci //u8 cp_gr_saturation; 2943d0407baSopenharmony_ci} 2953d0407baSopenharmony_ciCOLOR_FILL; 2963d0407baSopenharmony_ci 2973d0407baSopenharmony_citypedef struct FADING { 2983d0407baSopenharmony_ci uint8_t b; 2993d0407baSopenharmony_ci uint8_t g; 3003d0407baSopenharmony_ci uint8_t r; 3013d0407baSopenharmony_ci uint8_t res; 3023d0407baSopenharmony_ci} 3033d0407baSopenharmony_ciFADING; 3043d0407baSopenharmony_ci 3053d0407baSopenharmony_citypedef struct line_draw_t { 3063d0407baSopenharmony_ci POINT start_point; /* LineDraw_start_point */ 3073d0407baSopenharmony_ci POINT end_point; /* LineDraw_end_point */ 3083d0407baSopenharmony_ci uint32_t color; /* LineDraw_color */ 3093d0407baSopenharmony_ci uint32_t flag; /* (enum) LineDrawing mode sel */ 3103d0407baSopenharmony_ci uint32_t line_width; /* range 1~16 */ 3113d0407baSopenharmony_ci} 3123d0407baSopenharmony_ciline_draw_t; 3133d0407baSopenharmony_ci 3143d0407baSopenharmony_ci/* color space convert coefficient. */ 3153d0407baSopenharmony_citypedef struct csc_coe_t { 3163d0407baSopenharmony_ci int16_t r_v; 3173d0407baSopenharmony_ci int16_t g_y; 3183d0407baSopenharmony_ci int16_t b_u; 3193d0407baSopenharmony_ci int32_t off; 3203d0407baSopenharmony_ci} csc_coe_t; 3213d0407baSopenharmony_ci 3223d0407baSopenharmony_citypedef struct full_csc_t { 3233d0407baSopenharmony_ci uint8_t flag; 3243d0407baSopenharmony_ci csc_coe_t coe_y; 3253d0407baSopenharmony_ci csc_coe_t coe_u; 3263d0407baSopenharmony_ci csc_coe_t coe_v; 3273d0407baSopenharmony_ci} full_csc_t; 3283d0407baSopenharmony_ci 3293d0407baSopenharmony_cistruct rga_mosaic_info { 3303d0407baSopenharmony_ci uint8_t enable; 3313d0407baSopenharmony_ci uint8_t mode; 3323d0407baSopenharmony_ci}; 3333d0407baSopenharmony_ci 3343d0407baSopenharmony_cistruct rga_pre_intr_info { 3353d0407baSopenharmony_ci uint8_t enable; 3363d0407baSopenharmony_ci 3373d0407baSopenharmony_ci uint8_t read_intr_en; 3383d0407baSopenharmony_ci uint8_t write_intr_en; 3393d0407baSopenharmony_ci uint8_t read_hold_en; 3403d0407baSopenharmony_ci uint32_t read_threshold; 3413d0407baSopenharmony_ci uint32_t write_start; 3423d0407baSopenharmony_ci uint32_t write_step; 3433d0407baSopenharmony_ci}; 3443d0407baSopenharmony_ci 3453d0407baSopenharmony_ci/* MAX(min, (max - channel_value)) */ 3463d0407baSopenharmony_cistruct rga_osd_invert_factor { 3473d0407baSopenharmony_ci uint8_t alpha_max; 3483d0407baSopenharmony_ci uint8_t alpha_min; 3493d0407baSopenharmony_ci uint8_t yg_max; 3503d0407baSopenharmony_ci uint8_t yg_min; 3513d0407baSopenharmony_ci uint8_t crb_max; 3523d0407baSopenharmony_ci uint8_t crb_min; 3533d0407baSopenharmony_ci}; 3543d0407baSopenharmony_ci 3553d0407baSopenharmony_cistruct rga_color { 3563d0407baSopenharmony_ci union { 3573d0407baSopenharmony_ci struct { 3583d0407baSopenharmony_ci uint8_t red; 3593d0407baSopenharmony_ci uint8_t green; 3603d0407baSopenharmony_ci uint8_t blue; 3613d0407baSopenharmony_ci uint8_t alpha; 3623d0407baSopenharmony_ci }; 3633d0407baSopenharmony_ci uint32_t value; 3643d0407baSopenharmony_ci }; 3653d0407baSopenharmony_ci}; 3663d0407baSopenharmony_ci 3673d0407baSopenharmony_cistruct rga_osd_bpp2 { 3683d0407baSopenharmony_ci uint8_t ac_swap; // ac swap flag 3693d0407baSopenharmony_ci // 0: CA 3703d0407baSopenharmony_ci // 1: AC 3713d0407baSopenharmony_ci uint8_t endian_swap; // rgba2bpp endian swap 3723d0407baSopenharmony_ci // 0: Big endian 3733d0407baSopenharmony_ci // 1: Little endian 3743d0407baSopenharmony_ci struct rga_color color0; 3753d0407baSopenharmony_ci struct rga_color color1; 3763d0407baSopenharmony_ci}; 3773d0407baSopenharmony_ci 3783d0407baSopenharmony_cistruct rga_osd_mode_ctrl { 3793d0407baSopenharmony_ci uint8_t mode; // OSD cal mode: 3803d0407baSopenharmony_ci // 0b'1: statistics mode 3813d0407baSopenharmony_ci // 1b'1: auto inversion overlap mode 3823d0407baSopenharmony_ci uint8_t direction_mode; // horizontal or vertical 3833d0407baSopenharmony_ci // 0: horizontal 3843d0407baSopenharmony_ci // 1: vertical 3853d0407baSopenharmony_ci uint8_t width_mode; // using @fix_width or LUT width 3863d0407baSopenharmony_ci // 0: fix width 3873d0407baSopenharmony_ci // 1: LUT width 3883d0407baSopenharmony_ci uint16_t block_fix_width; // OSD block fixed width 3893d0407baSopenharmony_ci // real width = (fix_width + 1) * 2 3903d0407baSopenharmony_ci uint8_t block_num; // OSD block num 3913d0407baSopenharmony_ci uint16_t flags_index; // auto invert flags index 3923d0407baSopenharmony_ci 3933d0407baSopenharmony_ci /* invertion config */ 3943d0407baSopenharmony_ci uint8_t color_mode; // selete color 3953d0407baSopenharmony_ci // 0: src1 color 3963d0407baSopenharmony_ci // 1: config data color 3973d0407baSopenharmony_ci uint8_t invert_flags_mode; // invert flag selete 3983d0407baSopenharmony_ci // 0: use RAM flag 3993d0407baSopenharmony_ci // 1: usr last result 4003d0407baSopenharmony_ci uint8_t default_color_sel; // default color mode 4013d0407baSopenharmony_ci // 0: default is bright 4023d0407baSopenharmony_ci // 1: default is dark 4033d0407baSopenharmony_ci uint8_t invert_enable; // invert channel enable 4043d0407baSopenharmony_ci // 1 << 0: aplha enable 4053d0407baSopenharmony_ci // 1 << 1: Y/G disable 4063d0407baSopenharmony_ci // 1 << 2: C/RB disable 4073d0407baSopenharmony_ci uint8_t invert_mode; // invert cal mode 4083d0407baSopenharmony_ci // 0: normal(max-data) 4093d0407baSopenharmony_ci // 1: swap 4103d0407baSopenharmony_ci uint8_t invert_thresh; // if luma > thresh, osd_flag to be 1 4113d0407baSopenharmony_ci uint8_t unfix_index; // OSD width config index 4123d0407baSopenharmony_ci}; 4133d0407baSopenharmony_ci 4143d0407baSopenharmony_cistruct rga_osd_info { 4153d0407baSopenharmony_ci uint8_t enable; 4163d0407baSopenharmony_ci 4173d0407baSopenharmony_ci struct rga_osd_mode_ctrl mode_ctrl; 4183d0407baSopenharmony_ci struct rga_osd_invert_factor cal_factor; 4193d0407baSopenharmony_ci struct rga_osd_bpp2 bpp2_info; 4203d0407baSopenharmony_ci 4213d0407baSopenharmony_ci union { 4223d0407baSopenharmony_ci struct { 4233d0407baSopenharmony_ci uint32_t last_flags1; 4243d0407baSopenharmony_ci uint32_t last_flags0; 4253d0407baSopenharmony_ci }; 4263d0407baSopenharmony_ci uint64_t last_flags; 4273d0407baSopenharmony_ci }; 4283d0407baSopenharmony_ci 4293d0407baSopenharmony_ci union { 4303d0407baSopenharmony_ci struct { 4313d0407baSopenharmony_ci uint32_t cur_flags1; 4323d0407baSopenharmony_ci uint32_t cur_flags0; 4333d0407baSopenharmony_ci }; 4343d0407baSopenharmony_ci uint64_t cur_flags; 4353d0407baSopenharmony_ci }; 4363d0407baSopenharmony_ci}; 4373d0407baSopenharmony_ci 4383d0407baSopenharmony_ci#define RGA_VERSION_SIZE 16 4393d0407baSopenharmony_ci#define RGA_HW_SIZE 5 4403d0407baSopenharmony_ci 4413d0407baSopenharmony_cistruct rga_version_t { 4423d0407baSopenharmony_ci uint32_t major; 4433d0407baSopenharmony_ci uint32_t minor; 4443d0407baSopenharmony_ci uint32_t revision; 4453d0407baSopenharmony_ci uint8_t str[RGA_VERSION_SIZE]; 4463d0407baSopenharmony_ci}; 4473d0407baSopenharmony_ci 4483d0407baSopenharmony_cistruct rga_hw_versions_t { 4493d0407baSopenharmony_ci struct rga_version_t version[RGA_HW_SIZE]; 4503d0407baSopenharmony_ci uint32_t size; 4513d0407baSopenharmony_ci}; 4523d0407baSopenharmony_ci 4533d0407baSopenharmony_cistruct rga_memory_parm { 4543d0407baSopenharmony_ci uint32_t width; 4553d0407baSopenharmony_ci uint32_t height; 4563d0407baSopenharmony_ci uint32_t format; 4573d0407baSopenharmony_ci 4583d0407baSopenharmony_ci uint32_t size; 4593d0407baSopenharmony_ci}; 4603d0407baSopenharmony_ci 4613d0407baSopenharmony_cistruct rga_external_buffer { 4623d0407baSopenharmony_ci uint64_t memory; 4633d0407baSopenharmony_ci uint32_t type; 4643d0407baSopenharmony_ci 4653d0407baSopenharmony_ci uint32_t handle; 4663d0407baSopenharmony_ci struct rga_memory_parm memory_info; 4673d0407baSopenharmony_ci 4683d0407baSopenharmony_ci uint8_t reserve[252]; 4693d0407baSopenharmony_ci}; 4703d0407baSopenharmony_ci 4713d0407baSopenharmony_cistruct rga_buffer_pool { 4723d0407baSopenharmony_ci uint64_t buffers; 4733d0407baSopenharmony_ci uint32_t size; 4743d0407baSopenharmony_ci}; 4753d0407baSopenharmony_ci 4763d0407baSopenharmony_cistruct rga_req { 4773d0407baSopenharmony_ci uint8_t render_mode; /* (enum) process mode sel */ 4783d0407baSopenharmony_ci 4793d0407baSopenharmony_ci rga_img_info_t src; /* src image info */ 4803d0407baSopenharmony_ci rga_img_info_t dst; /* dst image info */ 4813d0407baSopenharmony_ci rga_img_info_t pat; /* patten image info */ 4823d0407baSopenharmony_ci 4833d0407baSopenharmony_ci uint64_t rop_mask_addr; /* rop4 mask addr */ 4843d0407baSopenharmony_ci uint64_t LUT_addr; /* LUT addr */ 4853d0407baSopenharmony_ci 4863d0407baSopenharmony_ci RECT clip; /* dst clip window default value is dst_vir */ 4873d0407baSopenharmony_ci /* value from [0, w-1] / [0, h-1]*/ 4883d0407baSopenharmony_ci 4893d0407baSopenharmony_ci int32_t sina; /* dst angle default value 0 16.16 scan from table */ 4903d0407baSopenharmony_ci int32_t cosa; /* dst angle default value 0 16.16 scan from table */ 4913d0407baSopenharmony_ci 4923d0407baSopenharmony_ci uint16_t alpha_rop_flag; /* alpha rop process flag */ 4933d0407baSopenharmony_ci /* ([0] = 1 alpha_rop_enable) */ 4943d0407baSopenharmony_ci /* ([1] = 1 rop enable) */ 4953d0407baSopenharmony_ci /* ([2] = 1 fading_enable) */ 4963d0407baSopenharmony_ci /* ([3] = 1 PD_enable) */ 4973d0407baSopenharmony_ci /* ([4] = 1 alpha cal_mode_sel) */ 4983d0407baSopenharmony_ci /* ([5] = 1 dither_enable) */ 4993d0407baSopenharmony_ci /* ([6] = 1 gradient fill mode sel) */ 5003d0407baSopenharmony_ci /* ([7] = 1 AA_enable) */ 5013d0407baSopenharmony_ci /* ([8] = 1 nn_quantize) */ 5023d0407baSopenharmony_ci /* ([9] = 1 Real color mode) */ 5033d0407baSopenharmony_ci 5043d0407baSopenharmony_ci uint8_t scale_mode; /* 0 nearst / 1 bilnear / 2 bicubic */ 5053d0407baSopenharmony_ci 5063d0407baSopenharmony_ci uint32_t color_key_max; /* color key max */ 5073d0407baSopenharmony_ci uint32_t color_key_min; /* color key min */ 5083d0407baSopenharmony_ci 5093d0407baSopenharmony_ci uint32_t fg_color; /* foreground color */ 5103d0407baSopenharmony_ci uint32_t bg_color; /* background color */ 5113d0407baSopenharmony_ci 5123d0407baSopenharmony_ci COLOR_FILL gr_color; /* color fill use gradient */ 5133d0407baSopenharmony_ci 5143d0407baSopenharmony_ci line_draw_t line_draw_info; 5153d0407baSopenharmony_ci 5163d0407baSopenharmony_ci FADING fading; 5173d0407baSopenharmony_ci 5183d0407baSopenharmony_ci uint8_t PD_mode; /* porter duff alpha mode sel */ 5193d0407baSopenharmony_ci 5203d0407baSopenharmony_ci uint8_t alpha_global_value; /* global alpha value */ 5213d0407baSopenharmony_ci 5223d0407baSopenharmony_ci uint16_t rop_code; /* rop2/3/4 code scan from rop code table*/ 5233d0407baSopenharmony_ci 5243d0407baSopenharmony_ci uint8_t bsfilter_flag; /* [2] 0 blur 1 sharp / [1:0] filter_type*/ 5253d0407baSopenharmony_ci 5263d0407baSopenharmony_ci uint8_t palette_mode; /* (enum) color palatte 0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/ 5273d0407baSopenharmony_ci 5283d0407baSopenharmony_ci uint8_t yuv2rgb_mode; /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */ 5293d0407baSopenharmony_ci 5303d0407baSopenharmony_ci uint8_t endian_mode; /* 0/big endian 1/little endian*/ 5313d0407baSopenharmony_ci 5323d0407baSopenharmony_ci uint8_t rotate_mode; /* (enum) rotate mode */ 5333d0407baSopenharmony_ci /* 0x0, no rotate */ 5343d0407baSopenharmony_ci /* 0x1, rotate */ 5353d0407baSopenharmony_ci /* 0x2, x_mirror */ 5363d0407baSopenharmony_ci /* 0x3, y_mirror */ 5373d0407baSopenharmony_ci 5383d0407baSopenharmony_ci uint8_t color_fill_mode; /* 0 solid color / 1 patten color */ 5393d0407baSopenharmony_ci 5403d0407baSopenharmony_ci MMU mmu_info; /* mmu information */ 5413d0407baSopenharmony_ci 5423d0407baSopenharmony_ci uint8_t alpha_rop_mode; /* ([0~1] alpha mode) */ 5433d0407baSopenharmony_ci /* ([2~3] rop mode) */ 5443d0407baSopenharmony_ci /* ([4] zero mode en) */ 5453d0407baSopenharmony_ci /* ([5] dst alpha mode) (RGA1) */ 5463d0407baSopenharmony_ci 5473d0407baSopenharmony_ci uint8_t src_trans_mode; 5483d0407baSopenharmony_ci 5493d0407baSopenharmony_ci uint8_t dither_mode; 5503d0407baSopenharmony_ci 5513d0407baSopenharmony_ci full_csc_t full_csc; /* full color space convert */ 5523d0407baSopenharmony_ci 5533d0407baSopenharmony_ci int32_t in_fence_fd; 5543d0407baSopenharmony_ci uint8_t core; 5553d0407baSopenharmony_ci uint8_t priority; 5563d0407baSopenharmony_ci int32_t out_fence_fd; 5573d0407baSopenharmony_ci 5583d0407baSopenharmony_ci uint8_t handle_flag; 5593d0407baSopenharmony_ci 5603d0407baSopenharmony_ci /* RGA2 1106 add */ 5613d0407baSopenharmony_ci struct rga_mosaic_info mosaic_info; 5623d0407baSopenharmony_ci 5633d0407baSopenharmony_ci uint8_t uvhds_mode; 5643d0407baSopenharmony_ci uint8_t uvvds_mode; 5653d0407baSopenharmony_ci 5663d0407baSopenharmony_ci struct rga_osd_info osd_info; 5673d0407baSopenharmony_ci 5683d0407baSopenharmony_ci struct rga_pre_intr_info pre_intr_info; 5693d0407baSopenharmony_ci 5703d0407baSopenharmony_ci uint8_t reservr[59]; 5713d0407baSopenharmony_ci}; 5723d0407baSopenharmony_ci 5733d0407baSopenharmony_cistruct rga_user_ctx_t { 5743d0407baSopenharmony_ci uint64_t cmd_ptr; 5753d0407baSopenharmony_ci uint32_t cmd_num; 5763d0407baSopenharmony_ci uint32_t id; 5773d0407baSopenharmony_ci uint32_t sync_mode; 5783d0407baSopenharmony_ci uint32_t out_fence_fd; 5793d0407baSopenharmony_ci 5803d0407baSopenharmony_ci uint32_t mpi_config_flags; 5813d0407baSopenharmony_ci 5823d0407baSopenharmony_ci uint8_t reservr[124]; 5833d0407baSopenharmony_ci}; 5843d0407baSopenharmony_ci 5853d0407baSopenharmony_ci#ifdef __cplusplus 5863d0407baSopenharmony_ci} 5873d0407baSopenharmony_ci#endif 5883d0407baSopenharmony_ci 5893d0407baSopenharmony_ci#endif /*_RK29_IPP_DRIVER_H_*/ 590