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