|  | /* | 
|  | *  Copyright (C) 2013-2015 Freescale Semiconductor, Inc. | 
|  | *  Copyright 2018 NXP | 
|  | */ | 
|  | /* | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | 
|  | */ | 
|  |  | 
|  | /* | 
|  | *	g2d.h | 
|  | *	Gpu 2d header file declare all g2d APIs exposed to application | 
|  | *	History : | 
|  | *	Date(y.m.d)        Author            Version        Description | 
|  | *	2012-10-22         Li Xianzhong      0.1            Created | 
|  | *	2013-02-22         Li Xianzhong      0.2            g2d_copy API is added | 
|  | *	2013-03-21         Li Xianzhong      0.4            g2d clear/rotation/flip APIs are supported | 
|  | *	2013-04-09         Li Xianzhong      0.5            g2d alpha blending feature is enhanced | 
|  | *	2013-05-17         Li Xianzhong      0.6            support vg core in g2d library | 
|  | *	2013-12-23         Li Xianzhong      0.7            support blend dim feature | 
|  | *	2014-03-20         Li Xianzhong      0.8            support pre-multipied & de-mutlipy out alpha | 
|  | *  2015-04-10         Meng Mingming     0.9            support multiple source blit | 
|  | *  2015-11-03         Meng Mingming     1.0            support query 2D hardware type and feature | 
|  | *  2016-05-24         Meng Mingming     1.1            support get g2d_buf from dma fd | 
|  | *  2017-07-04         Prabhu Sundararaj 1.2            support get g2d_buf to export dma fd | 
|  | *  2018-04-24         Yuchou Gan        1.3            Add AMPHION_TILED support | 
|  |  | 
|  | */ | 
|  |  | 
|  | #ifndef __G2D_H__ | 
|  | #define __G2D_H__ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C"  { | 
|  | #endif | 
|  |  | 
|  | #define G2D_VERSION_MAJOR   1 | 
|  | #define G2D_VERSION_MINOR   2 | 
|  | #define G2D_VERSION_PATCH   0 | 
|  |  | 
|  | enum g2d_format | 
|  | { | 
|  | //rgb formats | 
|  | G2D_RGB565               = 0, | 
|  | G2D_RGBA8888             = 1, | 
|  | G2D_RGBX8888             = 2, | 
|  | G2D_BGRA8888             = 3, | 
|  | G2D_BGRX8888             = 4, | 
|  | G2D_BGR565               = 5, | 
|  |  | 
|  | G2D_ARGB8888             = 6, | 
|  | G2D_ABGR8888             = 7, | 
|  | G2D_XRGB8888             = 8, | 
|  | G2D_XBGR8888             = 9, | 
|  | G2D_RGB888               = 10, | 
|  |  | 
|  | //yuv formats | 
|  | G2D_NV12                 = 20, | 
|  | G2D_I420                 = 21, | 
|  | G2D_YV12                 = 22, | 
|  | G2D_NV21                 = 23, | 
|  | G2D_YUYV                 = 24, | 
|  | G2D_YVYU                 = 25, | 
|  | G2D_UYVY                 = 26, | 
|  | G2D_VYUY                 = 27, | 
|  | G2D_NV16                 = 28, | 
|  | G2D_NV61                 = 29, | 
|  | }; | 
|  |  | 
|  | enum g2d_blend_func | 
|  | { | 
|  | //basic blend | 
|  | G2D_ZERO                  = 0, | 
|  | G2D_ONE                   = 1, | 
|  | G2D_SRC_ALPHA             = 2, | 
|  | G2D_ONE_MINUS_SRC_ALPHA   = 3, | 
|  | G2D_DST_ALPHA             = 4, | 
|  | G2D_ONE_MINUS_DST_ALPHA   = 5, | 
|  |  | 
|  | // extensive blend is set with basic blend together, | 
|  | // such as, G2D_ONE | G2D_PRE_MULTIPLIED_ALPHA | 
|  | G2D_PRE_MULTIPLIED_ALPHA  = 0x10, | 
|  | G2D_DEMULTIPLY_OUT_ALPHA  = 0x20, | 
|  | }; | 
|  |  | 
|  | enum g2d_cap_mode | 
|  | { | 
|  | G2D_BLEND                 = 0, | 
|  | G2D_DITHER                = 1, | 
|  | G2D_GLOBAL_ALPHA          = 2,//only support source global alpha | 
|  | G2D_BLEND_DIM             = 3,//support special blend effect | 
|  | G2D_BLUR                  = 4,//blur effect | 
|  | }; | 
|  |  | 
|  | enum g2d_feature | 
|  | { | 
|  | G2D_SCALING               = 0, | 
|  | G2D_ROTATION, | 
|  | G2D_SRC_YUV, | 
|  | G2D_DST_YUV, | 
|  | G2D_MULTI_SOURCE_BLT, | 
|  | }; | 
|  |  | 
|  | enum g2d_rotation | 
|  | { | 
|  | G2D_ROTATION_0            = 0, | 
|  | G2D_ROTATION_90           = 1, | 
|  | G2D_ROTATION_180          = 2, | 
|  | G2D_ROTATION_270          = 3, | 
|  | G2D_FLIP_H                = 4, | 
|  | G2D_FLIP_V                = 5, | 
|  | }; | 
|  |  | 
|  | enum g2d_cache_mode | 
|  | { | 
|  | G2D_CACHE_CLEAN           = 0, | 
|  | G2D_CACHE_FLUSH           = 1, | 
|  | G2D_CACHE_INVALIDATE      = 2, | 
|  | }; | 
|  |  | 
|  | enum g2d_hardware_type | 
|  | { | 
|  | G2D_HARDWARE_2D           = 0,//default type | 
|  | G2D_HARDWARE_VG           = 1, | 
|  | }; | 
|  |  | 
|  | enum g2d_status | 
|  | { | 
|  | G2D_STATUS_FAIL           =-1, | 
|  | G2D_STATUS_OK             = 0, | 
|  | G2D_STATUS_NOT_SUPPORTED  = 1, | 
|  | }; | 
|  |  | 
|  | struct g2d_surface | 
|  | { | 
|  | enum g2d_format format; | 
|  |  | 
|  | int planes[3];//surface buffer addresses are set in physical planes separately | 
|  | //RGB:  planes[0] - RGB565/RGBA8888/RGBX8888/BGRA8888/BRGX8888 | 
|  | //NV12: planes[0] - Y, planes[1] - packed UV | 
|  | //I420: planes[0] - Y, planes[1] - U, planes[2] - V | 
|  | //YV12: planes[0] - Y, planes[1] - V, planes[2] - U | 
|  | //NV21: planes[0] - Y, planes[1] - packed VU | 
|  | //YUYV: planes[0] - packed YUYV | 
|  | //YVYU: planes[0] - packed YVYU | 
|  | //UYVY: planes[0] - packed UYVY | 
|  | //VYUY: planes[0] - packed VYUY | 
|  | //NV16: planes[0] - Y, planes[1] - packed UV | 
|  | //NV61: planes[0] - Y, planes[1] - packed VU | 
|  |  | 
|  | //blit rectangle in surface | 
|  | int left; | 
|  | int top; | 
|  | int right; | 
|  | int bottom; | 
|  |  | 
|  | int stride;//surface buffer stride | 
|  |  | 
|  | int width;//surface width | 
|  | int height;//surface height | 
|  |  | 
|  | //alpha blending parameters | 
|  | enum g2d_blend_func blendfunc; | 
|  |  | 
|  | //the global alpha value is 0 ~ 255 | 
|  | int global_alpha; | 
|  |  | 
|  | //clrcolor format is RGBA8888, used as dst for clear, as src for blend dim | 
|  | int clrcolor; | 
|  |  | 
|  | //rotation degree | 
|  | enum g2d_rotation rot; | 
|  | }; | 
|  |  | 
|  | struct g2d_surface_pair | 
|  | { | 
|  | struct g2d_surface s; | 
|  | struct g2d_surface d; | 
|  | }; | 
|  |  | 
|  | struct g2d_buf | 
|  | { | 
|  | void *buf_handle; | 
|  | void *buf_vaddr; | 
|  | int  buf_paddr; | 
|  | int  buf_size; | 
|  | }; | 
|  |  | 
|  | int g2d_open(void **handle); | 
|  | int g2d_close(void *handle); | 
|  |  | 
|  | int g2d_make_current(void *handle, enum g2d_hardware_type type); | 
|  |  | 
|  | int g2d_clear(void *handle, struct g2d_surface *area); | 
|  | int g2d_blit(void *handle, struct g2d_surface *src, struct g2d_surface *dst); | 
|  | int g2d_copy(void *handle, struct g2d_buf *d, struct g2d_buf* s, int size); | 
|  | int g2d_multi_blit(void *handle, struct g2d_surface_pair *sp[], int layers); | 
|  |  | 
|  | int g2d_query_hardware(void *handle, enum g2d_hardware_type type, int *available); | 
|  | int g2d_query_feature(void *handle, enum g2d_feature feature, int *available); | 
|  | int g2d_query_cap(void *handle, enum g2d_cap_mode cap, int *enable); | 
|  | int g2d_enable(void *handle, enum g2d_cap_mode cap); | 
|  | int g2d_disable(void *handle, enum g2d_cap_mode cap); | 
|  |  | 
|  | int g2d_cache_op(struct g2d_buf *buf, enum g2d_cache_mode op); | 
|  | struct g2d_buf *g2d_alloc(int size, int cacheable); | 
|  | struct g2d_buf *g2d_buf_from_fd(int fd); | 
|  | int g2d_buf_export_fd(struct g2d_buf *); | 
|  | struct g2d_buf *g2d_buf_from_virt_addr(void *vaddr, int size); | 
|  | int g2d_free(struct g2d_buf *buf); | 
|  |  | 
|  | int g2d_flush(void *handle); | 
|  | int g2d_finish(void *handle); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif |