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