11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef __HIFB_H__ 171bd4fe43Sopenharmony_ci#define __HIFB_H__ 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#ifdef __HuaweiLite__ 201bd4fe43Sopenharmony_ci#include <fb.h> 211bd4fe43Sopenharmony_ci#include <linux/wait.h> 221bd4fe43Sopenharmony_ci#include "stdlib.h" 231bd4fe43Sopenharmony_ci#include <linux/workqueue.h> 241bd4fe43Sopenharmony_ci#include <linux/kernel.h> 251bd4fe43Sopenharmony_ci#include <linux/device.h> 261bd4fe43Sopenharmony_ci#include "liteos/fb.h" 271bd4fe43Sopenharmony_ci#else 281bd4fe43Sopenharmony_ci#include <linux/fb.h> 291bd4fe43Sopenharmony_ci#endif 301bd4fe43Sopenharmony_ci 311bd4fe43Sopenharmony_ci#include "hi_type.h" 321bd4fe43Sopenharmony_ci#include "hi_common.h" 331bd4fe43Sopenharmony_ci 341bd4fe43Sopenharmony_ci#ifdef __cplusplus 351bd4fe43Sopenharmony_ci#if __cplusplus 361bd4fe43Sopenharmony_ciextern "C" { 371bd4fe43Sopenharmony_ci#endif 381bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 391bd4fe43Sopenharmony_ci 401bd4fe43Sopenharmony_ci#define IOC_TYPE_HIFB 'F' 411bd4fe43Sopenharmony_ci/* To obtain the colorkey of an overlay layer */ 421bd4fe43Sopenharmony_ci#define FBIOGET_COLORKEY_HIFB _IOR(IOC_TYPE_HIFB, 90, HIFB_COLORKEY_S) 431bd4fe43Sopenharmony_ci/* To set the colorkey of an overlay layer */ 441bd4fe43Sopenharmony_ci#define FBIOPUT_COLORKEY_HIFB _IOW(IOC_TYPE_HIFB, 91, HIFB_COLORKEY_S) 451bd4fe43Sopenharmony_ci/* To get the alpha of an overlay layer */ 461bd4fe43Sopenharmony_ci#define FBIOGET_ALPHA_HIFB _IOR(IOC_TYPE_HIFB, 92, HIFB_ALPHA_S) 471bd4fe43Sopenharmony_ci/* To set the alpha of an overlay layer */ 481bd4fe43Sopenharmony_ci#define FBIOPUT_ALPHA_HIFB _IOW(IOC_TYPE_HIFB, 93, HIFB_ALPHA_S) 491bd4fe43Sopenharmony_ci/* To get the origin of an overlay layer on the screen */ 501bd4fe43Sopenharmony_ci#define FBIOGET_SCREEN_ORIGIN_HIFB _IOR(IOC_TYPE_HIFB, 94, HIFB_POINT_S) 511bd4fe43Sopenharmony_ci/* To set the origin of an overlay layer on the screen */ 521bd4fe43Sopenharmony_ci#define FBIOPUT_SCREEN_ORIGIN_HIFB _IOW(IOC_TYPE_HIFB, 95, HIFB_POINT_S) 531bd4fe43Sopenharmony_ci/* To obtain the anti-flicker setting of an overlay layer */ 541bd4fe43Sopenharmony_ci#define FBIOGET_DEFLICKER_HIFB _IOR(IOC_TYPE_HIFB, 98, HIFB_DEFLICKER_S) 551bd4fe43Sopenharmony_ci/* To set the anti-flicker setting of an overlay layer */ 561bd4fe43Sopenharmony_ci#define FBIOPUT_DEFLICKER_HIFB _IOW(IOC_TYPE_HIFB, 99, HIFB_DEFLICKER_S) 571bd4fe43Sopenharmony_ci/* To wait for the vertical blanking region of an overlay layer */ 581bd4fe43Sopenharmony_ci#define FBIOGET_VBLANK_HIFB _IO(IOC_TYPE_HIFB, 100) 591bd4fe43Sopenharmony_ci/* To set the display state of an overlay layer */ 601bd4fe43Sopenharmony_ci#define FBIOPUT_SHOW_HIFB _IOW(IOC_TYPE_HIFB, 101, HI_BOOL) 611bd4fe43Sopenharmony_ci/* To obtain the display state of an overlay layer */ 621bd4fe43Sopenharmony_ci#define FBIOGET_SHOW_HIFB _IOR(IOC_TYPE_HIFB, 102, HI_BOOL) 631bd4fe43Sopenharmony_ci/* to obtain the capability of an overlay layer */ 641bd4fe43Sopenharmony_ci#define FBIOGET_CAPABILITY_HIFB _IOR(IOC_TYPE_HIFB, 103, HIFB_CAPABILITY_S) 651bd4fe43Sopenharmony_ci/* set the screen output size */ 661bd4fe43Sopenharmony_ci#define FBIOPUT_SCREENSIZE _IOW(IOC_TYPE_HIFB, 130, HIFB_SIZE_S) 671bd4fe43Sopenharmony_ci/* get the screen output size */ 681bd4fe43Sopenharmony_ci#define FBIOGET_SCREENSIZE _IOR(IOC_TYPE_HIFB, 131, HIFB_SIZE_S) 691bd4fe43Sopenharmony_ci 701bd4fe43Sopenharmony_ci/* To display multiple surfaces in turn and set the alpha and colorkey attributes */ 711bd4fe43Sopenharmony_ci#define FBIOFLIP_SURFACE _IOW(IOC_TYPE_HIFB, 132, HIFB_SURFACEEX_S) 721bd4fe43Sopenharmony_ci 731bd4fe43Sopenharmony_ci/* To set the compression function status of an overlay layer */ 741bd4fe43Sopenharmony_ci#define FBIOPUT_COMPRESSION_HIFB _IOW(IOC_TYPE_HIFB, 133, HI_BOOL) 751bd4fe43Sopenharmony_ci/* To obtain the compression function status of an overlay layer */ 761bd4fe43Sopenharmony_ci#define FBIOGET_COMPRESSION_HIFB _IOR(IOC_TYPE_HIFB, 134, HI_BOOL) 771bd4fe43Sopenharmony_ci 781bd4fe43Sopenharmony_ci/* To set the hdr function status of an overlay layer */ 791bd4fe43Sopenharmony_ci#define FBIOPUT_DYNAMIC_RANGE_HIFB _IOW(IOC_TYPE_HIFB, 139, HIFB_DYNAMIC_RANGE_E) 801bd4fe43Sopenharmony_ci/* To get the hdr function status of an overlay layer */ 811bd4fe43Sopenharmony_ci#define FBIOGET_DYNAMIC_RANGE_HIFB _IOR(IOC_TYPE_HIFB, 140, HIFB_DYNAMIC_RANGE_E) 821bd4fe43Sopenharmony_ci 831bd4fe43Sopenharmony_ci/* To create the layer */ 841bd4fe43Sopenharmony_ci#define FBIO_CREATE_LAYER _IO(IOC_TYPE_HIFB, 149) 851bd4fe43Sopenharmony_ci/* To destroy the layer */ 861bd4fe43Sopenharmony_ci#define FBIO_DESTROY_LAYER _IO(IOC_TYPE_HIFB, 150) 871bd4fe43Sopenharmony_ci 881bd4fe43Sopenharmony_citypedef struct { 891bd4fe43Sopenharmony_ci HI_U32 u32Width; 901bd4fe43Sopenharmony_ci HI_U32 u32Height; 911bd4fe43Sopenharmony_ci} HIFB_SIZE_S; 921bd4fe43Sopenharmony_ci 931bd4fe43Sopenharmony_ci#ifndef __HuaweiLite__ 941bd4fe43Sopenharmony_cistatic inline HI_U8 hifb_rgb(const struct fb_bitfield *pBit, HI_S32 color) 951bd4fe43Sopenharmony_ci{ 961bd4fe43Sopenharmony_ci return ((HI_U8)((((HI_U32)color) >> pBit->offset) << (8 - pBit->length)) + /* 8 Digits to flip */ 971bd4fe43Sopenharmony_ci ((HI_U8)(((HI_U32)(color) >> pBit->offset) << (8 - pBit->length)) >> pBit->length)); /* 8 Digits to flip */ 981bd4fe43Sopenharmony_ci} 991bd4fe43Sopenharmony_ci 1001bd4fe43Sopenharmony_cistatic inline HI_S32 hifb_color2key(const struct fb_var_screeninfo *pVar, HI_S32 color) 1011bd4fe43Sopenharmony_ci{ 1021bd4fe43Sopenharmony_ci if (pVar->bits_per_pixel <= 8) { /* 8 left shift */ 1031bd4fe43Sopenharmony_ci return color; 1041bd4fe43Sopenharmony_ci } else { 1051bd4fe43Sopenharmony_ci HI_U8 r, g, b; 1061bd4fe43Sopenharmony_ci r = hifb_rgb(&pVar->red, color); 1071bd4fe43Sopenharmony_ci g = hifb_rgb(&pVar->green, color); 1081bd4fe43Sopenharmony_ci b = hifb_rgb(&pVar->blue, color); 1091bd4fe43Sopenharmony_ci return (r << 16) + (g << 8) + b; /* left shift altitude 16 8 */ 1101bd4fe43Sopenharmony_ci } 1111bd4fe43Sopenharmony_ci} 1121bd4fe43Sopenharmony_ci#endif 1131bd4fe43Sopenharmony_ci 1141bd4fe43Sopenharmony_citypedef enum { 1151bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_SDR8 = 0, 1161bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_SDR10, 1171bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_HDR10, 1181bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_HLG, 1191bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_SLF, 1201bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_BUTT 1211bd4fe43Sopenharmony_ci} HIFB_DYNAMIC_RANGE_E; 1221bd4fe43Sopenharmony_ci 1231bd4fe43Sopenharmony_citypedef struct { 1241bd4fe43Sopenharmony_ci HI_BOOL bKeyEnable; /* colorkey enable flag */ 1251bd4fe43Sopenharmony_ci HI_U32 u32Key; /* colorkey value, maybe contains alpha */ 1261bd4fe43Sopenharmony_ci} HIFB_COLORKEY_S; 1271bd4fe43Sopenharmony_ci 1281bd4fe43Sopenharmony_citypedef struct { 1291bd4fe43Sopenharmony_ci HI_S32 x; 1301bd4fe43Sopenharmony_ci HI_S32 y; 1311bd4fe43Sopenharmony_ci HI_S32 w; 1321bd4fe43Sopenharmony_ci HI_S32 h; 1331bd4fe43Sopenharmony_ci} HIFB_RECT; 1341bd4fe43Sopenharmony_ci 1351bd4fe43Sopenharmony_citypedef struct { 1361bd4fe43Sopenharmony_ci HI_S32 s32XPos; /* horizontal position */ 1371bd4fe43Sopenharmony_ci HI_S32 s32YPos; /* vertical position */ 1381bd4fe43Sopenharmony_ci} HIFB_POINT_S; 1391bd4fe43Sopenharmony_ci 1401bd4fe43Sopenharmony_citypedef struct { 1411bd4fe43Sopenharmony_ci HI_U32 u32HDfLevel; /* horizontal deflicker level */ 1421bd4fe43Sopenharmony_ci HI_U32 u32VDfLevel; /* vertical deflicker level */ 1431bd4fe43Sopenharmony_ci HI_U8 ATTRIBUTE *pu8HDfCoef; /* horizontal deflicker coefficient */ 1441bd4fe43Sopenharmony_ci HI_U8 ATTRIBUTE *pu8VDfCoef; /* vertical deflicker coefficient */ 1451bd4fe43Sopenharmony_ci} HIFB_DEFLICKER_S; 1461bd4fe43Sopenharmony_ci 1471bd4fe43Sopenharmony_ci/* Alpha info */ 1481bd4fe43Sopenharmony_citypedef struct { 1491bd4fe43Sopenharmony_ci HI_BOOL bAlphaEnable; /* alpha enable flag */ 1501bd4fe43Sopenharmony_ci HI_BOOL bAlphaChannel; /* alpha channel enable flag */ 1511bd4fe43Sopenharmony_ci HI_U8 u8Alpha0; /* alpha0 value, used in ARGB1555 */ 1521bd4fe43Sopenharmony_ci HI_U8 u8Alpha1; /* alpha1 value, used in ARGB1555 */ 1531bd4fe43Sopenharmony_ci HI_U8 u8GlobalAlpha; /* global alpha value */ 1541bd4fe43Sopenharmony_ci HI_U8 u8Reserved; 1551bd4fe43Sopenharmony_ci} HIFB_ALPHA_S; 1561bd4fe43Sopenharmony_ci 1571bd4fe43Sopenharmony_citypedef enum { 1581bd4fe43Sopenharmony_ci HIFB_FMT_RGB565 = 0, 1591bd4fe43Sopenharmony_ci HIFB_FMT_RGB888, /* RGB888 24bpp */ 1601bd4fe43Sopenharmony_ci 1611bd4fe43Sopenharmony_ci HIFB_FMT_KRGB444, /* RGB444 16bpp */ 1621bd4fe43Sopenharmony_ci HIFB_FMT_KRGB555, /* RGB555 16bpp */ 1631bd4fe43Sopenharmony_ci HIFB_FMT_KRGB888, /* RGB888 32bpp */ 1641bd4fe43Sopenharmony_ci 1651bd4fe43Sopenharmony_ci HIFB_FMT_ARGB4444, /* ARGB4444 */ 1661bd4fe43Sopenharmony_ci HIFB_FMT_ARGB1555, /* ARGB1555 */ 1671bd4fe43Sopenharmony_ci HIFB_FMT_ARGB8888, /* ARGB8888 */ 1681bd4fe43Sopenharmony_ci HIFB_FMT_ARGB8565, /* ARGB8565 */ 1691bd4fe43Sopenharmony_ci 1701bd4fe43Sopenharmony_ci HIFB_FMT_RGBA4444, /* ARGB4444 */ 1711bd4fe43Sopenharmony_ci HIFB_FMT_RGBA5551, /* RGBA5551 */ 1721bd4fe43Sopenharmony_ci HIFB_FMT_RGBA5658, /* RGBA5658 */ 1731bd4fe43Sopenharmony_ci HIFB_FMT_RGBA8888, /* RGBA8888 */ 1741bd4fe43Sopenharmony_ci 1751bd4fe43Sopenharmony_ci HIFB_FMT_BGR565, /* BGR565 */ 1761bd4fe43Sopenharmony_ci HIFB_FMT_BGR888, /* BGR888 */ 1771bd4fe43Sopenharmony_ci HIFB_FMT_ABGR4444, /* ABGR4444 */ 1781bd4fe43Sopenharmony_ci HIFB_FMT_ABGR1555, /* ABGR1555 */ 1791bd4fe43Sopenharmony_ci HIFB_FMT_ABGR8888, /* ABGR8888 */ 1801bd4fe43Sopenharmony_ci HIFB_FMT_ABGR8565, /* ABGR8565 */ 1811bd4fe43Sopenharmony_ci HIFB_FMT_KBGR444, /* BGR444 16bpp */ 1821bd4fe43Sopenharmony_ci HIFB_FMT_KBGR555, /* BGR555 16bpp */ 1831bd4fe43Sopenharmony_ci HIFB_FMT_KBGR888, /* BGR888 32bpp */ 1841bd4fe43Sopenharmony_ci 1851bd4fe43Sopenharmony_ci HIFB_FMT_1BPP, /* clut1 */ 1861bd4fe43Sopenharmony_ci HIFB_FMT_2BPP, /* clut2 */ 1871bd4fe43Sopenharmony_ci HIFB_FMT_4BPP, /* clut4 */ 1881bd4fe43Sopenharmony_ci HIFB_FMT_8BPP, /* clut8 */ 1891bd4fe43Sopenharmony_ci HIFB_FMT_ACLUT44, /* AClUT44 */ 1901bd4fe43Sopenharmony_ci HIFB_FMT_ACLUT88, /* ACLUT88 */ 1911bd4fe43Sopenharmony_ci HIFB_FMT_PUYVY, /* UYVY */ 1921bd4fe43Sopenharmony_ci HIFB_FMT_PYUYV, /* YUYV */ 1931bd4fe43Sopenharmony_ci HIFB_FMT_PYVYU, /* YVYU */ 1941bd4fe43Sopenharmony_ci HIFB_FMT_YUV888, /* YUV888 */ 1951bd4fe43Sopenharmony_ci HIFB_FMT_AYUV8888, /* AYUV8888 */ 1961bd4fe43Sopenharmony_ci HIFB_FMT_YUVA8888, /* YUVA8888 */ 1971bd4fe43Sopenharmony_ci HIFB_FMT_BUTT 1981bd4fe43Sopenharmony_ci} HIFB_COLOR_FMT_E; 1991bd4fe43Sopenharmony_ci 2001bd4fe43Sopenharmony_citypedef struct { 2011bd4fe43Sopenharmony_ci HI_BOOL bKeyRgb; 2021bd4fe43Sopenharmony_ci HI_BOOL bKeyAlpha; /* whether support colorkey alpha */ 2031bd4fe43Sopenharmony_ci HI_BOOL bGlobalAlpha; /* whether support global alpha */ 2041bd4fe43Sopenharmony_ci HI_BOOL bCmap; /* whether support color map */ 2051bd4fe43Sopenharmony_ci HI_BOOL bHasCmapReg; /* whether has color map register */ 2061bd4fe43Sopenharmony_ci HI_BOOL bColFmt[HIFB_FMT_BUTT]; /* support which color format */ 2071bd4fe43Sopenharmony_ci HI_BOOL bVoScale; /* support vo scale */ 2081bd4fe43Sopenharmony_ci /* whether support a certain layer, for example:x5 HD support HIFB_SD_0 not support HIFB_SD_1 */ 2091bd4fe43Sopenharmony_ci HI_BOOL bLayerSupported; 2101bd4fe43Sopenharmony_ci HI_U32 u32MaxWidth; /* the max pixels per line */ 2111bd4fe43Sopenharmony_ci HI_U32 u32MaxHeight; /* the max lines */ 2121bd4fe43Sopenharmony_ci HI_U32 u32MinWidth; /* the min pixels per line */ 2131bd4fe43Sopenharmony_ci HI_U32 u32MinHeight; /* the min lines */ 2141bd4fe43Sopenharmony_ci HI_U32 u32VDefLevel; /* vertical deflicker level, 0 means vertical deflicker is unsupported */ 2151bd4fe43Sopenharmony_ci HI_U32 u32HDefLevel; /* horizontal deflicker level, 0 means horizontal deflicker is unsupported */ 2161bd4fe43Sopenharmony_ci HI_BOOL bDcmp; 2171bd4fe43Sopenharmony_ci HI_BOOL bPreMul; 2181bd4fe43Sopenharmony_ci HI_BOOL bGHDR; /* NEW Feature. Is GHDR supported. */ 2191bd4fe43Sopenharmony_ci} HIFB_CAPABILITY_S; 2201bd4fe43Sopenharmony_ci 2211bd4fe43Sopenharmony_ci/* refresh mode */ 2221bd4fe43Sopenharmony_citypedef enum { 2231bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_DOUBLE = 0x0, /* 2 display buf in fb */ 2241bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_ONE = 0x1, /* 1 display buf in fb */ 2251bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_NONE = 0x2, /* no display buf in fb,the buf user refreshed will be directly set to VO */ 2261bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_DOUBLE_IMMEDIATE = 0x3, /* 2 display buf in fb, each refresh will be displayed */ 2271bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_FENCE = 0x4, /* 2 display buf in fb with fence */ 2281bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_BUTT 2291bd4fe43Sopenharmony_ci} HIFB_LAYER_BUF_E; 2301bd4fe43Sopenharmony_ci 2311bd4fe43Sopenharmony_ci/* surface info */ 2321bd4fe43Sopenharmony_citypedef struct { 2331bd4fe43Sopenharmony_ci HI_U64 u64PhyAddr; /* start physical address */ 2341bd4fe43Sopenharmony_ci HI_U64 u64GBPhyAddr; 2351bd4fe43Sopenharmony_ci HI_U32 u32Width; /* width pixels */ 2361bd4fe43Sopenharmony_ci HI_U32 u32Height; /* height pixels */ 2371bd4fe43Sopenharmony_ci HI_U32 u32Pitch; /* line pixels */ 2381bd4fe43Sopenharmony_ci HIFB_COLOR_FMT_E enFmt; /* color format */ 2391bd4fe43Sopenharmony_ci HIFB_DYNAMIC_RANGE_E enDynamicRange; /* NEW dynamic range. */ 2401bd4fe43Sopenharmony_ci} HIFB_SURFACE_S; 2411bd4fe43Sopenharmony_ci 2421bd4fe43Sopenharmony_citypedef struct { 2431bd4fe43Sopenharmony_ci HI_U64 u64PhyAddr; 2441bd4fe43Sopenharmony_ci HIFB_ALPHA_S stAlpha; 2451bd4fe43Sopenharmony_ci HIFB_COLORKEY_S stColorkey; 2461bd4fe43Sopenharmony_ci} HIFB_SURFACEEX_S; 2471bd4fe43Sopenharmony_ci 2481bd4fe43Sopenharmony_ci/* refresh surface info */ 2491bd4fe43Sopenharmony_citypedef struct { 2501bd4fe43Sopenharmony_ci HIFB_SURFACE_S stCanvas; 2511bd4fe43Sopenharmony_ci HIFB_RECT UpdateRect; /* refresh region */ 2521bd4fe43Sopenharmony_ci} HIFB_BUFFER_S; 2531bd4fe43Sopenharmony_ci 2541bd4fe43Sopenharmony_ci/* cursor info */ 2551bd4fe43Sopenharmony_citypedef struct { 2561bd4fe43Sopenharmony_ci HIFB_SURFACE_S stCursor; 2571bd4fe43Sopenharmony_ci HIFB_POINT_S stHotPos; 2581bd4fe43Sopenharmony_ci} HIFB_CURSOR_S; 2591bd4fe43Sopenharmony_ci 2601bd4fe43Sopenharmony_ci/* DDR detect zone info */ 2611bd4fe43Sopenharmony_citypedef struct { 2621bd4fe43Sopenharmony_ci HI_U32 u32StartSection; 2631bd4fe43Sopenharmony_ci HI_U32 u32ZoneNums; 2641bd4fe43Sopenharmony_ci} HIFB_DDRZONE_S; 2651bd4fe43Sopenharmony_ci 2661bd4fe43Sopenharmony_ci/* cursor handle */ 2671bd4fe43Sopenharmony_ci/* Attention:surface in cursor will be released by user */ 2681bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_INFO _IOW(IOC_TYPE_HIFB, 104, HIFB_CURSOR_S) 2691bd4fe43Sopenharmony_ci#define FBIOGET_CURSOR_INFO _IOW(IOC_TYPE_HIFB, 105, HIFB_CURSOR_S) 2701bd4fe43Sopenharmony_ci 2711bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_STATE _IOW(IOC_TYPE_HIFB, 106, HI_BOOL) 2721bd4fe43Sopenharmony_ci#define FBIOGET_CURSOR_STATE _IOW(IOC_TYPE_HIFB, 107, HI_BOOL) 2731bd4fe43Sopenharmony_ci 2741bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_POS _IOW(IOC_TYPE_HIFB, 108, HIFB_POINT_S) 2751bd4fe43Sopenharmony_ci#define FBIOGET_CURSOR_POS _IOR(IOC_TYPE_HIFB, 109, HIFB_POINT_S) 2761bd4fe43Sopenharmony_ci 2771bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_COLORKEY _IOR(IOC_TYPE_HIFB, 110, HIFB_COLORKEY_S) 2781bd4fe43Sopenharmony_ci#define FBIOGET_CURSOR_COLORKEY _IOW(IOC_TYPE_HIFB, 111, HIFB_COLORKEY_S) 2791bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_ALPHA _IOR(IOC_TYPE_HIFB, 112, HIFB_ALPHA_S) 2801bd4fe43Sopenharmony_ci#define FBIOGET_CURSOR_ALPHA _IOW(IOC_TYPE_HIFB, 113, HIFB_ALPHA_S) 2811bd4fe43Sopenharmony_ci 2821bd4fe43Sopenharmony_ci/* 2831bd4fe43Sopenharmony_ci * cursor will be separated from attached layer automatically if you attach cursor to another layer,that means 2841bd4fe43Sopenharmony_ci * cursor can be attached to only one layer at any time 2851bd4fe43Sopenharmony_ci */ 2861bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_ATTCHCURSOR _IOW(IOC_TYPE_HIFB, 114, HI_U32) 2871bd4fe43Sopenharmony_ci#define FBIOPUT_CURSOR_DETACHCURSOR _IOW(IOC_TYPE_HIFB, 115, HI_U32) 2881bd4fe43Sopenharmony_ci 2891bd4fe43Sopenharmony_ci/* Auto means fb will choose a appropriate antiflicker level automatically according to the color info of map */ 2901bd4fe43Sopenharmony_citypedef enum { 2911bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_NONE = 0x0, /* no antiflicker */ 2921bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_LOW = 0x1, /* low level */ 2931bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_MIDDLE = 0x2, /* middle level */ 2941bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_HIGH = 0x3, /* high level */ 2951bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_AUTO = 0x4, /* auto */ 2961bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_BUTT 2971bd4fe43Sopenharmony_ci} HIFB_LAYER_ANTIFLICKER_LEVEL_E; 2981bd4fe43Sopenharmony_ci 2991bd4fe43Sopenharmony_ci/* MIRROR mode */ 3001bd4fe43Sopenharmony_citypedef enum { 3011bd4fe43Sopenharmony_ci HIFB_MIRROR_NONE = 0x0, 3021bd4fe43Sopenharmony_ci HIFB_MIRROR_HORIZONTAL = 0x1, 3031bd4fe43Sopenharmony_ci HIFB_MIRROR_VERTICAL = 0x2, 3041bd4fe43Sopenharmony_ci HIFB_MIRROR_BOTH = 0x3, 3051bd4fe43Sopenharmony_ci HIFB_MIRROR_BUTT 3061bd4fe43Sopenharmony_ci} HIFB_MIRROR_MODE_E; 3071bd4fe43Sopenharmony_ci 3081bd4fe43Sopenharmony_ci/* ROTATE mode */ 3091bd4fe43Sopenharmony_citypedef enum { 3101bd4fe43Sopenharmony_ci HIFB_ROTATE_NONE = 0x0, 3111bd4fe43Sopenharmony_ci HIFB_ROTATE_90 = 0x1, 3121bd4fe43Sopenharmony_ci HIFB_ROTATE_180 = 0x2, 3131bd4fe43Sopenharmony_ci HIFB_ROTATE_270 = 0x3, 3141bd4fe43Sopenharmony_ci HIFB_ROTATE_BUTT 3151bd4fe43Sopenharmony_ci} HIFB_ROTATE_MODE_E; 3161bd4fe43Sopenharmony_ci 3171bd4fe43Sopenharmony_ci/* layer info maskbit */ 3181bd4fe43Sopenharmony_citypedef enum { 3191bd4fe43Sopenharmony_ci HIFB_LAYERMASK_BUFMODE = 0x1, /* BUFMODE bitmask */ 3201bd4fe43Sopenharmony_ci HIFB_LAYERMASK_ANTIFLICKER_MODE = 0x2, /* ANTIFLICKER_MODE bitmask */ 3211bd4fe43Sopenharmony_ci HIFB_LAYERMASK_POS = 0x4, /* the position bitmask */ 3221bd4fe43Sopenharmony_ci HIFB_LAYERMASK_CANVASSIZE = 0x8, /* canvassize bitmask */ 3231bd4fe43Sopenharmony_ci HIFB_LAYERMASK_DISPSIZE = 0x10, /* displaysize bitmask */ 3241bd4fe43Sopenharmony_ci HIFB_LAYERMASK_SCREENSIZE = 0x20, /* screensize bitmask */ 3251bd4fe43Sopenharmony_ci HIFB_LAYERMASK_BMUL = 0x40, /* pre-mult bitmask */ 3261bd4fe43Sopenharmony_ci HIFB_LAYERMASK_BUTT 3271bd4fe43Sopenharmony_ci} HIFB_LAYER_INFO_MASKBIT; 3281bd4fe43Sopenharmony_ci 3291bd4fe43Sopenharmony_ci/* layer info */ 3301bd4fe43Sopenharmony_citypedef struct { 3311bd4fe43Sopenharmony_ci HIFB_LAYER_BUF_E BufMode; 3321bd4fe43Sopenharmony_ci HIFB_LAYER_ANTIFLICKER_LEVEL_E eAntiflickerLevel; 3331bd4fe43Sopenharmony_ci HI_S32 s32XPos; /* the x pos of origin point in screen */ 3341bd4fe43Sopenharmony_ci HI_S32 s32YPos; /* the y pos of origin point in screen */ 3351bd4fe43Sopenharmony_ci HI_U32 u32CanvasWidth; /* the width of canvas buffer */ 3361bd4fe43Sopenharmony_ci HI_U32 u32CanvasHeight; /* the height of canvas buffer */ 3371bd4fe43Sopenharmony_ci /* the width of display buf in fb.for 0 buf ,there is no display buf in fb, so it's effectless */ 3381bd4fe43Sopenharmony_ci HI_U32 u32DisplayWidth; 3391bd4fe43Sopenharmony_ci HI_U32 u32DisplayHeight; /* the height of display buf in fb. */ 3401bd4fe43Sopenharmony_ci HI_U32 u32ScreenWidth; /* the width of screen */ 3411bd4fe43Sopenharmony_ci HI_U32 u32ScreenHeight; /* the height of screen */ 3421bd4fe43Sopenharmony_ci HI_BOOL bPreMul; /* The data drawn in buf is premul data or not */ 3431bd4fe43Sopenharmony_ci HI_U32 u32Mask; /* param modify mask bit */ 3441bd4fe43Sopenharmony_ci} HIFB_LAYER_INFO_S; 3451bd4fe43Sopenharmony_ci 3461bd4fe43Sopenharmony_ci/* To set the layer information */ 3471bd4fe43Sopenharmony_ci#define FBIOPUT_LAYER_INFO _IOW(IOC_TYPE_HIFB, 120, HIFB_LAYER_INFO_S) 3481bd4fe43Sopenharmony_ci/* To get the layer information */ 3491bd4fe43Sopenharmony_ci#define FBIOGET_LAYER_INFO _IOR(IOC_TYPE_HIFB, 121, HIFB_LAYER_INFO_S) 3501bd4fe43Sopenharmony_ci/* To get canvas buf */ 3511bd4fe43Sopenharmony_ci#define FBIOGET_CANVAS_BUFFER _IOR(IOC_TYPE_HIFB, 123, HIFB_BUFFER_S) 3521bd4fe43Sopenharmony_ci/* To refresh the displayed contents in extended mode */ 3531bd4fe43Sopenharmony_ci#define FBIO_REFRESH _IOW(IOC_TYPE_HIFB, 124, HIFB_BUFFER_S) 3541bd4fe43Sopenharmony_ci 3551bd4fe43Sopenharmony_ci/* sync refresh */ 3561bd4fe43Sopenharmony_ci#define FBIO_WAITFOR_FREFRESH_DONE _IO(IOC_TYPE_HIFB, 125) 3571bd4fe43Sopenharmony_ci 3581bd4fe43Sopenharmony_ci/* To set the mirror mode */ 3591bd4fe43Sopenharmony_ci#define FBIOPUT_MIRROR_MODE _IOW(IOC_TYPE_HIFB, 126, HIFB_MIRROR_MODE_E) 3601bd4fe43Sopenharmony_ci/* To get the mirror mode */ 3611bd4fe43Sopenharmony_ci#define FBIOGET_MIRROR_MODE _IOW(IOC_TYPE_HIFB, 127, HIFB_MIRROR_MODE_E) 3621bd4fe43Sopenharmony_ci 3631bd4fe43Sopenharmony_ci/* To set the rotate mode */ 3641bd4fe43Sopenharmony_ci#define FBIOPUT_ROTATE_MODE _IOW(IOC_TYPE_HIFB, 128, HIFB_ROTATE_MODE_E) 3651bd4fe43Sopenharmony_ci/* To get the rotate mode */ 3661bd4fe43Sopenharmony_ci#define FBIOGET_ROTATE_MODE _IOW(IOC_TYPE_HIFB, 129, HIFB_ROTATE_MODE_E) 3671bd4fe43Sopenharmony_ci 3681bd4fe43Sopenharmony_ci/* To set the DDR detect zone of an overlay layer */ 3691bd4fe43Sopenharmony_ci#define FBIOPUT_MDDRDETECT_HIFB _IOW(IOC_TYPE_HIFB, 135, HIFB_DDRZONE_S) 3701bd4fe43Sopenharmony_ci/* To get the DDR detect zone of an overlay layer */ 3711bd4fe43Sopenharmony_ci#define FBIOGET_MDDRDETECT_HIFB _IOW(IOC_TYPE_HIFB, 136, HIFB_DDRZONE_S) 3721bd4fe43Sopenharmony_ci 3731bd4fe43Sopenharmony_ci#ifdef __HuaweiLite__ 3741bd4fe43Sopenharmony_ci#define FBIOGET_SCREENINFO_HIFB 0x4600 3751bd4fe43Sopenharmony_ci#define FBIOPUT_SCREENINFO_HIFB 0x4601 3761bd4fe43Sopenharmony_ci#define FBIOPAN_DISPLAY_HIFB 0x4606 3771bd4fe43Sopenharmony_ci 3781bd4fe43Sopenharmony_cistruct hifb_info { 3791bd4fe43Sopenharmony_ci struct fb_vtable_s vtable; /* FB interfaces */ 3801bd4fe43Sopenharmony_ci struct fb_videoinfo_s vinfo; /* This structure descrides the overall video controller */ 3811bd4fe43Sopenharmony_ci struct fb_overlayinfo_s oinfo; /* This structure descrides one overlay */ 3821bd4fe43Sopenharmony_ci#ifdef CONFIG_FB_CMAP 3831bd4fe43Sopenharmony_ci struct fb_cmap_s cmap; /* Current camp */ 3841bd4fe43Sopenharmony_ci#endif 3851bd4fe43Sopenharmony_ci int activate; 3861bd4fe43Sopenharmony_ci void *par; /* Private data */ 3871bd4fe43Sopenharmony_ci}; 3881bd4fe43Sopenharmony_ci 3891bd4fe43Sopenharmony_ciHI_S32 hifb_init(hi_void *pArgs); 3901bd4fe43Sopenharmony_ci#endif 3911bd4fe43Sopenharmony_ci 3921bd4fe43Sopenharmony_ci#ifdef __cplusplus 3931bd4fe43Sopenharmony_ci#if __cplusplus 3941bd4fe43Sopenharmony_ci} 3951bd4fe43Sopenharmony_ci#endif 3961bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 3971bd4fe43Sopenharmony_ci 3981bd4fe43Sopenharmony_ci#endif /* __HIFB_H__ */ 399