1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2006-2007 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// file apiGFX.c
98*53ee8cc1Swenshuai.xi /// @brief MStar Graphics API
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
103*53ee8cc1Swenshuai.xi // Include Files
104*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
105*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
106*53ee8cc1Swenshuai.xi #include <stdio.h>
107*53ee8cc1Swenshuai.xi #include <stdlib.h>
108*53ee8cc1Swenshuai.xi #include <string.h>
109*53ee8cc1Swenshuai.xi #include <pthread.h>
110*53ee8cc1Swenshuai.xi #endif
111*53ee8cc1Swenshuai.xi #include "MsOS.h"
112*53ee8cc1Swenshuai.xi #include "MsCommon.h"
113*53ee8cc1Swenshuai.xi #include "MsTypes.h"
114*53ee8cc1Swenshuai.xi #include "MsVersion.h"
115*53ee8cc1Swenshuai.xi #include "_apigfx_type.h"
116*53ee8cc1Swenshuai.xi #include "utopia.h"
117*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
118*53ee8cc1Swenshuai.xi #include "apiGFX.h"
119*53ee8cc1Swenshuai.xi #include "apiGFX_v2.h"
120*53ee8cc1Swenshuai.xi #include "apiGFX_private.h"
121*53ee8cc1Swenshuai.xi
122*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
123*53ee8cc1Swenshuai.xi #ifndef GFX_UTOPIA2K
124*53ee8cc1Swenshuai.xi #define GFX_UTOPIA2K
125*53ee8cc1Swenshuai.xi #endif
126*53ee8cc1Swenshuai.xi #endif
127*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
128*53ee8cc1Swenshuai.xi // Compile options
129*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
130*53ee8cc1Swenshuai.xi // #define GFX Utopia2.0 capibility
131*53ee8cc1Swenshuai.xi void* pGEInstance=NULL;
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi static MS_S32 s32GEWrapperMutex;
134*53ee8cc1Swenshuai.xi static void (*fpGFX_CBGetFont)(MS_S8, GFX_FontInfo*)=NULL;
135*53ee8cc1Swenshuai.xi static void (*fpGFX_CBGetBMP)(MS_S16, GFX_BitmapInfo*)=NULL;
136*53ee8cc1Swenshuai.xi
137*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
138*53ee8cc1Swenshuai.xi static pthread_mutex_t GFXFireInfoMutex = PTHREAD_MUTEX_INITIALIZER;
139*53ee8cc1Swenshuai.xi #endif
140*53ee8cc1Swenshuai.xi GFX_FireInfo GFXFireInfo;
141*53ee8cc1Swenshuai.xi GFX_Set_VQ GFXSerVQ;
142*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
143*53ee8cc1Swenshuai.xi // Local Defines
144*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
145*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
146*53ee8cc1Swenshuai.xi // Debug Macros
147*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi //#define GFX_UNIT_TEST(fmt, ...) printf(fmt, ##__VA_ARGS__)
149*53ee8cc1Swenshuai.xi
150*53ee8cc1Swenshuai.xi #ifdef GFX_DEBUG
151*53ee8cc1Swenshuai.xi
152*53ee8cc1Swenshuai.xi #define _GFX_CHECK_BUFFER_ALIGN0(addr, color_fmt) \
153*53ee8cc1Swenshuai.xi switch ((color_fmt)){ \
154*53ee8cc1Swenshuai.xi case GFX_FMT_I1: \
155*53ee8cc1Swenshuai.xi case GFX_FMT_I2: \
156*53ee8cc1Swenshuai.xi case GFX_FMT_I4: \
157*53ee8cc1Swenshuai.xi case GFX_FMT_I8: \
158*53ee8cc1Swenshuai.xi break; \
159*53ee8cc1Swenshuai.xi case GFX_FMT_YUV422: \
160*53ee8cc1Swenshuai.xi case GFX_FMT_1ABFGBG12355: \
161*53ee8cc1Swenshuai.xi case GFX_FMT_RGB565 : \
162*53ee8cc1Swenshuai.xi case GFX_FMT_FABAFGBG2266: \
163*53ee8cc1Swenshuai.xi case GFX_FMT_ARGB1555 : \
164*53ee8cc1Swenshuai.xi case GFX_FMT_ARGB4444 : \
165*53ee8cc1Swenshuai.xi case GFX_FMT_RGBA5551: \
166*53ee8cc1Swenshuai.xi case GFX_FMT_RGBA4444: \
167*53ee8cc1Swenshuai.xi case GFX_FMT_BGRA5551: \
168*53ee8cc1Swenshuai.xi case GFX_FMT_ABGR1555 : \
169*53ee8cc1Swenshuai.xi case GFX_FMT_ABGR4444: \
170*53ee8cc1Swenshuai.xi case GFX_FMT_BGRA4444 : \
171*53ee8cc1Swenshuai.xi case GFX_FMT_BGR565 : \
172*53ee8cc1Swenshuai.xi GFX_ASSERT(!(0x1 & (addr)), GFX_FATAL("[GE DRV][%06d] Bad buffer address (0x%08x, %d)\n", (addr), (color_fmt))); \
173*53ee8cc1Swenshuai.xi break; \
174*53ee8cc1Swenshuai.xi case GFX_FMT_ARGB8888 : \
175*53ee8cc1Swenshuai.xi case GFX_FMT_ABGR8888: \
176*53ee8cc1Swenshuai.xi case GFX_FMT_RGBA8888 : \
177*53ee8cc1Swenshuai.xi case GFX_FMT_BGRA8888: \
178*53ee8cc1Swenshuai.xi GFX_ASSERT(!(0x3 & (addr)), GFX_FATAL("[GE DRV][%06d] Bad buffer address (0x%08x, %d)\n", (addr), (color_fmt))); \
179*53ee8cc1Swenshuai.xi break; \
180*53ee8cc1Swenshuai.xi default: \
181*53ee8cc1Swenshuai.xi GFX_ASSERT(0, GFX_FATAL("[GE DRV][%06d] Invalid color format\n")); \
182*53ee8cc1Swenshuai.xi break; \
183*53ee8cc1Swenshuai.xi }
184*53ee8cc1Swenshuai.xi
185*53ee8cc1Swenshuai.xi
186*53ee8cc1Swenshuai.xi #define _GFX_CHECK_BUFFER_ALIGN1(addr, width, height, pitch, color_fmt) \
187*53ee8cc1Swenshuai.xi switch ((color_fmt)){ \
188*53ee8cc1Swenshuai.xi case GFX_FMT_I1: \
189*53ee8cc1Swenshuai.xi case GFX_FMT_I2: \
190*53ee8cc1Swenshuai.xi case GFX_FMT_I4: \
191*53ee8cc1Swenshuai.xi case GFX_FMT_I8: \
192*53ee8cc1Swenshuai.xi break; \
193*53ee8cc1Swenshuai.xi case GFX_FMT_YUV422: \
194*53ee8cc1Swenshuai.xi case GFX_FMT_1ABFGBG12355: \
195*53ee8cc1Swenshuai.xi case GFX_FMT_FABAFGBG2266: \
196*53ee8cc1Swenshuai.xi case GFX_FMT_RGB565 : \
197*53ee8cc1Swenshuai.xi case GFX_FMT_ARGB1555 : \
198*53ee8cc1Swenshuai.xi case GFX_FMT_ARGB4444 : \
199*53ee8cc1Swenshuai.xi case GFX_FMT_RGBA5551: \
200*53ee8cc1Swenshuai.xi case GFX_FMT_RGBA4444: \
201*53ee8cc1Swenshuai.xi case GFX_FMT_BGRA5551: \
202*53ee8cc1Swenshuai.xi case GFX_FMT_ABGR1555 : \
203*53ee8cc1Swenshuai.xi case GFX_FMT_ABGR4444: \
204*53ee8cc1Swenshuai.xi case GFX_FMT_BGRA4444 : \
205*53ee8cc1Swenshuai.xi case GFX_FMT_BGR565 : \
206*53ee8cc1Swenshuai.xi GFX_ASSERT(!(0x1 & (addr)), GFX_FATAL("[GE DRV][%06d] Bad buffer address (0x%08x, %d)\n", (addr), (color_fmt))); \
207*53ee8cc1Swenshuai.xi GFX_ASSERT(!(0x1 & (pitch)), GFX_FATAL("[GE DRV][%06d] Bad buffer pitch (%d, %d)\n", (pitch), (color_fmt))); \
208*53ee8cc1Swenshuai.xi GFX_ASSERT(((pitch)>>1)== (width), GFX_FATAL("[GE DRV][%06d] Bad buffer pitch/width (%d, %d)\n", (pitch), (width))); \
209*53ee8cc1Swenshuai.xi break; \
210*53ee8cc1Swenshuai.xi case GFX_FMT_ARGB8888 : \
211*53ee8cc1Swenshuai.xi case GFX_FMT_ABGR8888: \
212*53ee8cc1Swenshuai.xi case GFX_FMT_RGBA8888 : \
213*53ee8cc1Swenshuai.xi case GFX_FMT_BGRA8888: \
214*53ee8cc1Swenshuai.xi GFX_ASSERT(!(0x3 & (addr)), GFX_FATAL("[GE DRV][%06d] Bad buffer address (0x%08x, %d)\n", (addr), (color_fmt))); \
215*53ee8cc1Swenshuai.xi GFX_ASSERT(!(0x3 & (pitch)), GFX_FATAL("[GE DRV][%06d] Bad buffer pitch (%d, %d)\n", (pitch), (color_fmt))); \
216*53ee8cc1Swenshuai.xi GFX_ASSERT(((pitch)>>2)== (width), GFX_FATAL("[GE DRV][%06d] Bad buffer pitch/width (%d, %d)\n", (pitch), (width))); \
217*53ee8cc1Swenshuai.xi break; \
218*53ee8cc1Swenshuai.xi default: \
219*53ee8cc1Swenshuai.xi GFX_ASSERT(0, GFX_FATAL("[GE DRV][%06d] Invalid color format\n")); \
220*53ee8cc1Swenshuai.xi break; \
221*53ee8cc1Swenshuai.xi }
222*53ee8cc1Swenshuai.xi
223*53ee8cc1Swenshuai.xi
224*53ee8cc1Swenshuai.xi
225*53ee8cc1Swenshuai.xi
226*53ee8cc1Swenshuai.xi #else // #ifdef GFX_DEBUG
227*53ee8cc1Swenshuai.xi
228*53ee8cc1Swenshuai.xi #define _GFX_CHECK_BUFFER_ALIGN0(addr, color_fmt) while (0);
229*53ee8cc1Swenshuai.xi #define _GFX_CHECK_BUFFER_ALIGN1(addr, width, height, pitch, color_fmt) while (0);
230*53ee8cc1Swenshuai.xi
231*53ee8cc1Swenshuai.xi #endif // #ifdef GFX_DEBUG
232*53ee8cc1Swenshuai.xi
233*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
234*53ee8cc1Swenshuai.xi // Macros
235*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
236*53ee8cc1Swenshuai.xi //#define CHECK_IDLE() while(BLT_Reg(BLT_REG_STATUS)&BLT_VAL_BUSY) { MsOS_DelayTask(1);}
237*53ee8cc1Swenshuai.xi // #define CHECK_IDLE() while(BLT_Reg(BLT_REG_STATUS)&BLT_VAL_BUSY) { MsOS_YieldTask();}
238*53ee8cc1Swenshuai.xi #define delay(ms)
239*53ee8cc1Swenshuai.xi //#define delay(ms) MsOS_DelayTask(ms)
240*53ee8cc1Swenshuai.xi
241*53ee8cc1Swenshuai.xi #define MAKE_PRIMITIVE_COLOR_12355(_bg, _fg, _blink, _alpha) (((((0x7 & (_blink))<<3)|((0x3 & (_alpha))<<6)|0xFF00)<<16) | \
242*53ee8cc1Swenshuai.xi (((0x1F & (_bg))<<3)|((0x1F & (_fg))<<11)))
243*53ee8cc1Swenshuai.xi #define MAKE_PRIMITIVE_COLOR_2266(_bg, _fg, _ba, _fa) ((((0x3 & (_ba)) | ((0x3 & (_fa))<<8))<<16) |\
244*53ee8cc1Swenshuai.xi ((0x1F & (_bg))|((0x1F & (_fg))<<8)))
245*53ee8cc1Swenshuai.xi
246*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
247*53ee8cc1Swenshuai.xi // Global Variables
248*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
249*53ee8cc1Swenshuai.xi //static MS_U32 _u32FrameWidth, _u32FrameHeight, _u32FramePitch;
250*53ee8cc1Swenshuai.xi
251*53ee8cc1Swenshuai.xi
252*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
253*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
254*53ee8cc1Swenshuai.xi // Local Variables
255*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
256*53ee8cc1Swenshuai.xi static MSIF_Version _drv_gfx_version = {
257*53ee8cc1Swenshuai.xi .DDI = { GFX_DRV_VERSION },
258*53ee8cc1Swenshuai.xi };
259*53ee8cc1Swenshuai.xi #endif
260*53ee8cc1Swenshuai.xi
261*53ee8cc1Swenshuai.xi
262*53ee8cc1Swenshuai.xi /// 0: No DBG msg at all
263*53ee8cc1Swenshuai.xi /// 1: Default development level (All ERROR)
264*53ee8cc1Swenshuai.xi /// 2: Verbose level
265*53ee8cc1Swenshuai.xi
266*53ee8cc1Swenshuai.xi
267*53ee8cc1Swenshuai.xi #define APIGFX_CHECK_NULL(pParameter) \
268*53ee8cc1Swenshuai.xi { \
269*53ee8cc1Swenshuai.xi if(pParameter == NULL) \
270*53ee8cc1Swenshuai.xi { \
271*53ee8cc1Swenshuai.xi GFX_ERR("\n Input Parameter is NULL, please to check! \n");\
272*53ee8cc1Swenshuai.xi return GFX_INIT_FAIL; \
273*53ee8cc1Swenshuai.xi } \
274*53ee8cc1Swenshuai.xi }
275*53ee8cc1Swenshuai.xi #define APIGFX_CHECK_INIT() \
276*53ee8cc1Swenshuai.xi { \
277*53ee8cc1Swenshuai.xi if(pGEInstance == NULL)\
278*53ee8cc1Swenshuai.xi { \
279*53ee8cc1Swenshuai.xi GFX_ERR("\nshould call MApi_GFX_Init first\n");\
280*53ee8cc1Swenshuai.xi return GFX_INIT_FAIL; \
281*53ee8cc1Swenshuai.xi } \
282*53ee8cc1Swenshuai.xi }
283*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
284*53ee8cc1Swenshuai.xi // Local Function Prototypes
285*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
286*53ee8cc1Swenshuai.xi
287*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
288*53ee8cc1Swenshuai.xi
289*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
290*53ee8cc1Swenshuai.xi
291*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
292*53ee8cc1Swenshuai.xi //[OBSOLETE]
293*53ee8cc1Swenshuai.xi
294*53ee8cc1Swenshuai.xi #define GFXDRIVER_BASE 0UL
295*53ee8cc1Swenshuai.xi
296*53ee8cc1Swenshuai.xi
297*53ee8cc1Swenshuai.xi #define CheckGFXInstanceOpen() do{\
298*53ee8cc1Swenshuai.xi if(NULL == pGEInstance)\
299*53ee8cc1Swenshuai.xi {\
300*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_GFX | GFXDRIVER_BASE, &pGEInstance, 0, NULL))\
301*53ee8cc1Swenshuai.xi {\
302*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d] GFXOpen Fail\n",__FUNCTION__, __LINE__);\
303*53ee8cc1Swenshuai.xi return ;\
304*53ee8cc1Swenshuai.xi }\
305*53ee8cc1Swenshuai.xi }\
306*53ee8cc1Swenshuai.xi }while(0)
307*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
GFX_FireInfoLock(void)308*53ee8cc1Swenshuai.xi static void GFX_FireInfoLock(void)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi
311*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
312*53ee8cc1Swenshuai.xi pthread_mutex_lock(&GFXFireInfoMutex);
313*53ee8cc1Swenshuai.xi #endif
314*53ee8cc1Swenshuai.xi
315*53ee8cc1Swenshuai.xi }
316*53ee8cc1Swenshuai.xi
GFX_FireInfoUnLock(void)317*53ee8cc1Swenshuai.xi static void GFX_FireInfoUnLock(void)
318*53ee8cc1Swenshuai.xi {
319*53ee8cc1Swenshuai.xi
320*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
321*53ee8cc1Swenshuai.xi pthread_mutex_unlock(&GFXFireInfoMutex);
322*53ee8cc1Swenshuai.xi #endif
323*53ee8cc1Swenshuai.xi
324*53ee8cc1Swenshuai.xi }
325*53ee8cc1Swenshuai.xi #endif
_GFX_RegisterAllCBFunc(void)326*53ee8cc1Swenshuai.xi static GFX_Result _GFX_RegisterAllCBFunc(void)
327*53ee8cc1Swenshuai.xi {
328*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
329*53ee8cc1Swenshuai.xi
330*53ee8cc1Swenshuai.xi #ifdef GFX_UTOPIA2K
331*53ee8cc1Swenshuai.xi #else
332*53ee8cc1Swenshuai.xi GFX_CB_ARGS GFXCBInfo;
333*53ee8cc1Swenshuai.xi memset(&GFXCBInfo, 0, sizeof(GFX_CB_ARGS));
334*53ee8cc1Swenshuai.xi
335*53ee8cc1Swenshuai.xi if(fpGFX_CBGetFont!=NULL)
336*53ee8cc1Swenshuai.xi {
337*53ee8cc1Swenshuai.xi GFXCBInfo.eGFX_CBType =E_CB_GETFONT;
338*53ee8cc1Swenshuai.xi GFXCBInfo.pGFX_CBInfo =fpGFX_CBGetFont;
339*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_CB, (void*)&GFXCBInfo) != UTOPIA_STATUS_SUCCESS)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
342*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
343*53ee8cc1Swenshuai.xi }
344*53ee8cc1Swenshuai.xi }
345*53ee8cc1Swenshuai.xi if(fpGFX_CBGetBMP!=NULL)
346*53ee8cc1Swenshuai.xi {
347*53ee8cc1Swenshuai.xi GFXCBInfo.eGFX_CBType =E_CB_GETBMP;
348*53ee8cc1Swenshuai.xi GFXCBInfo.pGFX_CBInfo =fpGFX_CBGetBMP;
349*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_CB, (void*)&GFXCBInfo) != UTOPIA_STATUS_SUCCESS)
350*53ee8cc1Swenshuai.xi {
351*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
352*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
353*53ee8cc1Swenshuai.xi }
354*53ee8cc1Swenshuai.xi }
355*53ee8cc1Swenshuai.xi #endif
356*53ee8cc1Swenshuai.xi return eRet;
357*53ee8cc1Swenshuai.xi }
358*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
359*53ee8cc1Swenshuai.xi /******************************************************************************/
360*53ee8cc1Swenshuai.xi ///This function will register callback for GetFont function.
361*53ee8cc1Swenshuai.xi ///
362*53ee8cc1Swenshuai.xi ///@param *fpGFX_CB \b IN: Pointer to a callback function for GetFont.
363*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS if sucess.
364*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_RegisterGetFontCB(MS_PHY (* fpGFX_CB)(MS_S8,GFX_FontInfo *))365*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_RegisterGetFontCB(MS_PHY (*fpGFX_CB)(MS_S8, GFX_FontInfo*) )
366*53ee8cc1Swenshuai.xi {
367*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
368*53ee8cc1Swenshuai.xi
369*53ee8cc1Swenshuai.xi if(fpGFX_CB == NULL)
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi fpGFX_CBGetFont = (void*)fpGFX_CB;
375*53ee8cc1Swenshuai.xi #ifdef GFX_UTOPIA2K
376*53ee8cc1Swenshuai.xi #else
377*53ee8cc1Swenshuai.xi if(pGEInstance !=NULL)
378*53ee8cc1Swenshuai.xi {
379*53ee8cc1Swenshuai.xi GFX_CB_ARGS GFXCBInfo;
380*53ee8cc1Swenshuai.xi memset(&GFXCBInfo, 0, sizeof(GFX_CB_ARGS));
381*53ee8cc1Swenshuai.xi
382*53ee8cc1Swenshuai.xi GFXCBInfo.eGFX_CBType =E_CB_GETFONT;
383*53ee8cc1Swenshuai.xi GFXCBInfo.pGFX_CBInfo =fpGFX_CB;
384*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_CB, (void*)&GFXCBInfo) != UTOPIA_STATUS_SUCCESS)
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
387*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
388*53ee8cc1Swenshuai.xi }
389*53ee8cc1Swenshuai.xi }
390*53ee8cc1Swenshuai.xi #endif
391*53ee8cc1Swenshuai.xi return eRet;
392*53ee8cc1Swenshuai.xi }
393*53ee8cc1Swenshuai.xi
394*53ee8cc1Swenshuai.xi /******************************************************************************/
395*53ee8cc1Swenshuai.xi ///This function will register callback for GetBMP function.
396*53ee8cc1Swenshuai.xi ///
397*53ee8cc1Swenshuai.xi ///@param *fpGFX_CB \b IN: Pointer to a callback function for GetBMP.
398*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS if sucess.
399*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_RegisterGetBMPCB(MS_PHY (* fpGFX_CB)(MS_S16,GFX_BitmapInfo *))400*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_RegisterGetBMPCB(MS_PHY (*fpGFX_CB)(MS_S16, GFX_BitmapInfo*) )
401*53ee8cc1Swenshuai.xi {
402*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
403*53ee8cc1Swenshuai.xi
404*53ee8cc1Swenshuai.xi if(fpGFX_CB == NULL)
405*53ee8cc1Swenshuai.xi {
406*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
407*53ee8cc1Swenshuai.xi }
408*53ee8cc1Swenshuai.xi fpGFX_CBGetBMP = (void*)fpGFX_CB;
409*53ee8cc1Swenshuai.xi #ifdef GFX_UTOPIA2K
410*53ee8cc1Swenshuai.xi #else
411*53ee8cc1Swenshuai.xi if(pGEInstance !=NULL)
412*53ee8cc1Swenshuai.xi {
413*53ee8cc1Swenshuai.xi GFX_CB_ARGS GFXCBInfo;
414*53ee8cc1Swenshuai.xi memset(&GFXCBInfo, 0, sizeof(GFX_CB_ARGS));
415*53ee8cc1Swenshuai.xi
416*53ee8cc1Swenshuai.xi GFXCBInfo.eGFX_CBType =E_CB_GETBMP;
417*53ee8cc1Swenshuai.xi GFXCBInfo.pGFX_CBInfo =fpGFX_CB;
418*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_CB, (void*)&GFXCBInfo) != UTOPIA_STATUS_SUCCESS)
419*53ee8cc1Swenshuai.xi {
420*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
421*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
422*53ee8cc1Swenshuai.xi }
423*53ee8cc1Swenshuai.xi }
424*53ee8cc1Swenshuai.xi #endif
425*53ee8cc1Swenshuai.xi return eRet;
426*53ee8cc1Swenshuai.xi }
427*53ee8cc1Swenshuai.xi #endif
428*53ee8cc1Swenshuai.xi
429*53ee8cc1Swenshuai.xi /******************************************************************************/
430*53ee8cc1Swenshuai.xi ///This function will fill a specific 32-bit pattern in a specific buffer.
431*53ee8cc1Swenshuai.xi ///
432*53ee8cc1Swenshuai.xi ///@param StrAddr \b IN: Start address of the buffer to be filled with specific value. 4-Byte alignment.
433*53ee8cc1Swenshuai.xi ///@param length \b IN: Length of the value pattern to be filled. 4-Byte alignment
434*53ee8cc1Swenshuai.xi ///@param ClearValue \b IN: 32-bit pattern to be filled in the specified space.
435*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS if sucess.
436*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_ClearFrameBufferByWord(MS_PHY StrAddr,MS_U32 length,MS_U32 ClearValue)437*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_ClearFrameBufferByWord(MS_PHY StrAddr, MS_U32 length, MS_U32 ClearValue)
438*53ee8cc1Swenshuai.xi {
439*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
440*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
441*53ee8cc1Swenshuai.xi
442*53ee8cc1Swenshuai.xi GFX_ClearFrameBuffer Info;
443*53ee8cc1Swenshuai.xi memset(&Info, 0, sizeof(GFX_ClearFrameBuffer));
444*53ee8cc1Swenshuai.xi
445*53ee8cc1Swenshuai.xi Info.StrAddr = StrAddr;
446*53ee8cc1Swenshuai.xi Info.length = length;
447*53ee8cc1Swenshuai.xi Info.ClearValue = ClearValue;
448*53ee8cc1Swenshuai.xi
449*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_CLEAR_FRAME_BY_WORLD;
450*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&Info;
451*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_ClearFrameBuffer);
452*53ee8cc1Swenshuai.xi
453*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
454*53ee8cc1Swenshuai.xi {
455*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
456*53ee8cc1Swenshuai.xi }
457*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
458*53ee8cc1Swenshuai.xi
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
461*53ee8cc1Swenshuai.xi
462*53ee8cc1Swenshuai.xi #if 1
463*53ee8cc1Swenshuai.xi /******************************************************************************/
464*53ee8cc1Swenshuai.xi ///This function will fill a specific 8-bit pattern in a specific buffer.
465*53ee8cc1Swenshuai.xi ///
466*53ee8cc1Swenshuai.xi ///@param StrAddr \b IN: Start address of the buffer to be filled with specific value. Byte alignment.
467*53ee8cc1Swenshuai.xi ///@param length \b IN: Length of the value pattern to be filled. Byte alignment
468*53ee8cc1Swenshuai.xi ///@param ClearValue \b IN: 8 bit pattern to be filled in the specified space.
469*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS if sucess.
470*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_ClearFrameBuffer(MS_PHY StrAddr,MS_U32 length,MS_U8 ClearValue)471*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_ClearFrameBuffer(MS_PHY StrAddr, MS_U32 length, MS_U8 ClearValue)
472*53ee8cc1Swenshuai.xi {
473*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
474*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
475*53ee8cc1Swenshuai.xi
476*53ee8cc1Swenshuai.xi GFX_ClearFrameBuffer Info;
477*53ee8cc1Swenshuai.xi memset(&Info, 0, sizeof(GFX_ClearFrameBuffer));
478*53ee8cc1Swenshuai.xi
479*53ee8cc1Swenshuai.xi Info.StrAddr = StrAddr;
480*53ee8cc1Swenshuai.xi Info.length = length;
481*53ee8cc1Swenshuai.xi Info.ClearValue = ClearValue;
482*53ee8cc1Swenshuai.xi
483*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_CLEAR_FRAME;
484*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&Info;
485*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_ClearFrameBuffer);
486*53ee8cc1Swenshuai.xi
487*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
490*53ee8cc1Swenshuai.xi }
491*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
492*53ee8cc1Swenshuai.xi }
493*53ee8cc1Swenshuai.xi #endif
494*53ee8cc1Swenshuai.xi
495*53ee8cc1Swenshuai.xi /******************************************************************************/
496*53ee8cc1Swenshuai.xi ///This function will draw a Rectangle Frame (Framework) on screen
497*53ee8cc1Swenshuai.xi ///
498*53ee8cc1Swenshuai.xi ///@param *pblock \b IN: Pointer to a structure containing the rectangle coordinates, size and color information
499*53ee8cc1Swenshuai.xi ///@param *plinefmt \b IN: Pointer to a structure containing the border format (using bolder line)
500*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS if sucess.
501*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_RectFrame(GFX_RectFillInfo * pblock,GFX_DrawLineInfo * plinefmt)502*53ee8cc1Swenshuai.xi void MApi_GFX_RectFrame(GFX_RectFillInfo *pblock, GFX_DrawLineInfo *plinefmt)
503*53ee8cc1Swenshuai.xi {
504*53ee8cc1Swenshuai.xi GFX_DrawLineInfo pline;
505*53ee8cc1Swenshuai.xi
506*53ee8cc1Swenshuai.xi //GE_GET_ReSource();
507*53ee8cc1Swenshuai.xi
508*53ee8cc1Swenshuai.xi //printf("MDrv_GE_RectFrame \n");
509*53ee8cc1Swenshuai.xi
510*53ee8cc1Swenshuai.xi memset(&pline, 0, sizeof(GFX_DrawLineInfo));
511*53ee8cc1Swenshuai.xi memcpy(&pline.colorRange.color_s, &pblock->colorRange.color_s, 4);
512*53ee8cc1Swenshuai.xi memcpy(&pline.colorRange.color_e, &pblock->colorRange.color_e, 4);
513*53ee8cc1Swenshuai.xi
514*53ee8cc1Swenshuai.xi // Top line
515*53ee8cc1Swenshuai.xi #if 0
516*53ee8cc1Swenshuai.xi clrline.x1 = pblock->x;
517*53ee8cc1Swenshuai.xi clrline.x2 = pblock->x + pblock->width ;
518*53ee8cc1Swenshuai.xi clrline.y1 =
519*53ee8cc1Swenshuai.xi clrline.y2 = pblock->y;
520*53ee8cc1Swenshuai.xi MDrv_GE_LineTo( &clrline, plinefmt );
521*53ee8cc1Swenshuai.xi #endif
522*53ee8cc1Swenshuai.xi pline.x1 = pblock->dstBlock.x;
523*53ee8cc1Swenshuai.xi pline.x2 = pblock->dstBlock.x + pblock->dstBlock.width ;
524*53ee8cc1Swenshuai.xi pline.y1 =
525*53ee8cc1Swenshuai.xi pline.y2 = pblock->dstBlock.y;
526*53ee8cc1Swenshuai.xi pline.flag = 0;
527*53ee8cc1Swenshuai.xi MApi_GFX_DrawLine(&pline);
528*53ee8cc1Swenshuai.xi
529*53ee8cc1Swenshuai.xi // Bottom line
530*53ee8cc1Swenshuai.xi #if 0
531*53ee8cc1Swenshuai.xi clrline.y1 =
532*53ee8cc1Swenshuai.xi clrline.y2 = pblock->y + pblock->height -1;
533*53ee8cc1Swenshuai.xi MDrv_GE_LineTo( &clrline, plinefmt );
534*53ee8cc1Swenshuai.xi #endif
535*53ee8cc1Swenshuai.xi
536*53ee8cc1Swenshuai.xi pline.y1 = pblock->dstBlock.y + pblock->dstBlock.height -1;
537*53ee8cc1Swenshuai.xi pline.y2 = pblock->dstBlock.y + pblock->dstBlock.height -1;
538*53ee8cc1Swenshuai.xi MApi_GFX_DrawLine(&pline);
539*53ee8cc1Swenshuai.xi
540*53ee8cc1Swenshuai.xi // Left line
541*53ee8cc1Swenshuai.xi #if 0
542*53ee8cc1Swenshuai.xi clrline.x2 = pblock->x;
543*53ee8cc1Swenshuai.xi clrline.y1 = pblock->y;
544*53ee8cc1Swenshuai.xi clrline.y2 = pblock->y + pblock->height ;
545*53ee8cc1Swenshuai.xi MDrv_GE_LineTo( &clrline, plinefmt );
546*53ee8cc1Swenshuai.xi #endif
547*53ee8cc1Swenshuai.xi
548*53ee8cc1Swenshuai.xi pline.x2 = pblock->dstBlock.x;
549*53ee8cc1Swenshuai.xi pline.y1 = pblock->dstBlock.y;
550*53ee8cc1Swenshuai.xi pline.y2 = pblock->dstBlock.y + pblock->dstBlock.height;
551*53ee8cc1Swenshuai.xi MApi_GFX_DrawLine(&pline);
552*53ee8cc1Swenshuai.xi
553*53ee8cc1Swenshuai.xi
554*53ee8cc1Swenshuai.xi // Right line
555*53ee8cc1Swenshuai.xi #if 0
556*53ee8cc1Swenshuai.xi clrline.x1 = pblock->x + pblock->width -1;
557*53ee8cc1Swenshuai.xi clrline.x2 = clrline.x1;
558*53ee8cc1Swenshuai.xi MDrv_GE_LineTo( &clrline, plinefmt );
559*53ee8cc1Swenshuai.xi #endif
560*53ee8cc1Swenshuai.xi pline.x1 = pblock->dstBlock.x + pblock->dstBlock.width -1;
561*53ee8cc1Swenshuai.xi pline.x2 = pline.x1;
562*53ee8cc1Swenshuai.xi MApi_GFX_DrawLine(&pline);
563*53ee8cc1Swenshuai.xi
564*53ee8cc1Swenshuai.xi
565*53ee8cc1Swenshuai.xi //GE_Free_ReSource();
566*53ee8cc1Swenshuai.xi
567*53ee8cc1Swenshuai.xi }
568*53ee8cc1Swenshuai.xi
569*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
570*53ee8cc1Swenshuai.xi /// GFX text out function for drawing characters in one line.
571*53ee8cc1Swenshuai.xi /// The function invokes the callback registered through MApi_GFX_RegisterGetFontCB for restrieving font info.
572*53ee8cc1Swenshuai.xi /// @param fhandle \b IN: font handle
573*53ee8cc1Swenshuai.xi /// @param pindex \b IN: pointer of character index array
574*53ee8cc1Swenshuai.xi /// @param strwidth \b IN: character index length(1:ONE_BYTE_CHAR, 2: TWO_BYTE_CHAR)
575*53ee8cc1Swenshuai.xi /// @param pfmt \b IN: pointer to text out info
576*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
577*53ee8cc1Swenshuai.xi /// @return GFX_INVALID_FONT_HANDLE - Invalid font handle
578*53ee8cc1Swenshuai.xi /// @return GFX_INVALID_PARAMETERS - Inavlid input parameters
579*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_TextOut(MS_S32 fhandle,MS_U8 * pindex,MS_U32 strwidth,GFX_TextOutInfo * pfmt)580*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_TextOut(MS_S32 fhandle, MS_U8 *pindex, MS_U32 strwidth, GFX_TextOutInfo *pfmt)
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi GFX_FontInfo tfontTable;
583*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
584*53ee8cc1Swenshuai.xi MS_U16 i;
585*53ee8cc1Swenshuai.xi
586*53ee8cc1Swenshuai.xi if(fpGFX_CBGetFont != NULL)
587*53ee8cc1Swenshuai.xi fpGFX_CBGetFont(fhandle, &tfontTable);
588*53ee8cc1Swenshuai.xi else
589*53ee8cc1Swenshuai.xi return GFX_INVALID_FONT_HANDLE;
590*53ee8cc1Swenshuai.xi
591*53ee8cc1Swenshuai.xi if (!tfontTable.inUsed)
592*53ee8cc1Swenshuai.xi {
593*53ee8cc1Swenshuai.xi return GFX_INVALID_FONT_HANDLE;
594*53ee8cc1Swenshuai.xi }
595*53ee8cc1Swenshuai.xi
596*53ee8cc1Swenshuai.xi if(pindex==NULL || pfmt ==NULL)
597*53ee8cc1Swenshuai.xi {
598*53ee8cc1Swenshuai.xi return GFX_FAIL;
599*53ee8cc1Swenshuai.xi }
600*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi GFX_TEXTOUT_ARGS GFXTextArgs;
603*53ee8cc1Swenshuai.xi GFX_TextOut_V2 GFXTextOut;
604*53ee8cc1Swenshuai.xi
605*53ee8cc1Swenshuai.xi memset(&GFXTextArgs, 0 , sizeof(GFX_TEXTOUT_ARGS));
606*53ee8cc1Swenshuai.xi memset(&GFXTextOut , 0 ,sizeof(GFX_TextOut_V2));
607*53ee8cc1Swenshuai.xi
608*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
609*53ee8cc1Swenshuai.xi GFXTextOut.fHandle =fhandle;
610*53ee8cc1Swenshuai.xi
611*53ee8cc1Swenshuai.xi if (strwidth == 2)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi MS_U16 * pCharAr = (MS_U16 *)(&GFXTextOut.charArray[0]);
614*53ee8cc1Swenshuai.xi MS_U16 * pUnicodeChar = (MS_U16 *)pindex;
615*53ee8cc1Swenshuai.xi for (i=0; i<128; i++)
616*53ee8cc1Swenshuai.xi {
617*53ee8cc1Swenshuai.xi *(pCharAr + i) = *(pUnicodeChar + i);
618*53ee8cc1Swenshuai.xi if (*(pUnicodeChar + i) == '\0')
619*53ee8cc1Swenshuai.xi {
620*53ee8cc1Swenshuai.xi break;
621*53ee8cc1Swenshuai.xi }
622*53ee8cc1Swenshuai.xi }
623*53ee8cc1Swenshuai.xi }
624*53ee8cc1Swenshuai.xi else
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi for (i=0; i<256; i++)
627*53ee8cc1Swenshuai.xi {
628*53ee8cc1Swenshuai.xi GFXTextOut.charArray[i] = *(pindex + i);
629*53ee8cc1Swenshuai.xi if (*(pindex + i) == '\0')
630*53ee8cc1Swenshuai.xi {
631*53ee8cc1Swenshuai.xi break;
632*53ee8cc1Swenshuai.xi }
633*53ee8cc1Swenshuai.xi }
634*53ee8cc1Swenshuai.xi }
635*53ee8cc1Swenshuai.xi
636*53ee8cc1Swenshuai.xi GFXTextOut.u32StrWidth =strwidth;
637*53ee8cc1Swenshuai.xi GFXTextOut.pTextInfo =pfmt;
638*53ee8cc1Swenshuai.xi GFXTextOut.pFonttable =&tfontTable;
639*53ee8cc1Swenshuai.xi GFXTextArgs.eGFX_TextType =E_LOADTEXTOUT;
640*53ee8cc1Swenshuai.xi GFXTextArgs.pGFX_TextOut =(void*)&GFXTextOut;
641*53ee8cc1Swenshuai.xi GFXTextArgs.u32Size =sizeof(GFX_TextOut_V2);
642*53ee8cc1Swenshuai.xi GFXTextOut.pFireInfo = &GFXFireInfo;
643*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_FONT, (void*)&GFXTextArgs) != UTOPIA_STATUS_SUCCESS)
644*53ee8cc1Swenshuai.xi {
645*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
646*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
649*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
650*53ee8cc1Swenshuai.xi
651*53ee8cc1Swenshuai.xi return eRet;
652*53ee8cc1Swenshuai.xi }
653*53ee8cc1Swenshuai.xi
654*53ee8cc1Swenshuai.xi
655*53ee8cc1Swenshuai.xi
656*53ee8cc1Swenshuai.xi
657*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
658*53ee8cc1Swenshuai.xi /// Query text display length
659*53ee8cc1Swenshuai.xi /// The function invokes the callback registered through MApi_GFX_RegisterGetFontCB for restrieving font info.
660*53ee8cc1Swenshuai.xi /// @param fhandle \b IN: font handle
661*53ee8cc1Swenshuai.xi /// @param pu8index \b IN: pointer of character index array
662*53ee8cc1Swenshuai.xi /// @param u32strwidth \b IN: character index length(1:ONE_BYTE_CHAR, 2: TWO_BYTE_CHAR)
663*53ee8cc1Swenshuai.xi /// @param pfmt \b IN: pointer to text out info
664*53ee8cc1Swenshuai.xi /// @param pu32DispLength \b OUT: pointer to display length.
665*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
666*53ee8cc1Swenshuai.xi /// @return GFX_INVALID_FONT_HANDLE - Invalid font handle
667*53ee8cc1Swenshuai.xi /// @return GFX_INVALID_PARAMETERS - Inavlid input parameters
668*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_QueryTextDispLength(MS_S32 fhandle,MS_U8 * pu8index,MS_U32 u32strwidth,GFX_TextOutInfo * pfmt,MS_U32 * pu32DispLength)669*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_QueryTextDispLength(MS_S32 fhandle, MS_U8 *pu8index, MS_U32 u32strwidth,
670*53ee8cc1Swenshuai.xi GFX_TextOutInfo *pfmt, MS_U32* pu32DispLength)
671*53ee8cc1Swenshuai.xi {
672*53ee8cc1Swenshuai.xi MS_U16* pu16TmpIndex;
673*53ee8cc1Swenshuai.xi MS_U8* pu8TmpIndex;
674*53ee8cc1Swenshuai.xi MS_U32 u32Length = 0;
675*53ee8cc1Swenshuai.xi MS_S8 dis;
676*53ee8cc1Swenshuai.xi
677*53ee8cc1Swenshuai.xi // OSD_RESOURCE_FONT_INFO osd_fonttable;
678*53ee8cc1Swenshuai.xi GFX_FontInfo fonttable;
679*53ee8cc1Swenshuai.xi GFX_FontInfo* pFont = &fonttable;
680*53ee8cc1Swenshuai.xi MS_VIRT ptr_addr;
681*53ee8cc1Swenshuai.xi
682*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
683*53ee8cc1Swenshuai.xi
684*53ee8cc1Swenshuai.xi //msAPI_OSD_RESOURCE_GetFontInfo(fhandle, &osd_fonttable);
685*53ee8cc1Swenshuai.xi if(fpGFX_CBGetFont != NULL)
686*53ee8cc1Swenshuai.xi fpGFX_CBGetFont(fhandle, &fonttable);
687*53ee8cc1Swenshuai.xi else
688*53ee8cc1Swenshuai.xi return GFX_INVALID_FONT_HANDLE;
689*53ee8cc1Swenshuai.xi #if 0
690*53ee8cc1Swenshuai.xi fonttable.addr = osd_fonttable.glyph_addr;
691*53ee8cc1Swenshuai.xi fonttable.fmt = osd_fonttable.fmt;
692*53ee8cc1Swenshuai.xi fonttable.height = osd_fonttable.height;
693*53ee8cc1Swenshuai.xi fonttable.len = osd_fonttable.char_glyph_bytes;
694*53ee8cc1Swenshuai.xi fonttable.offset = osd_fonttable.char_glyph_bytes;
695*53ee8cc1Swenshuai.xi fonttable.pBBox = (GFX_GlyphBbox*)osd_fonttable.bbox_addr;
696*53ee8cc1Swenshuai.xi fonttable.pitch = osd_fonttable.pitch;
697*53ee8cc1Swenshuai.xi fonttable.width = osd_fonttable.width;
698*53ee8cc1Swenshuai.xi fonttable.inUsed = osd_fonttable.inUsed;
699*53ee8cc1Swenshuai.xi #endif
700*53ee8cc1Swenshuai.xi if (!pFont->inUsed)
701*53ee8cc1Swenshuai.xi {
702*53ee8cc1Swenshuai.xi return GFX_INVALID_FONT_HANDLE;
703*53ee8cc1Swenshuai.xi }
704*53ee8cc1Swenshuai.xi if (pu8index == NULL)
705*53ee8cc1Swenshuai.xi {
706*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
707*53ee8cc1Swenshuai.xi }
708*53ee8cc1Swenshuai.xi
709*53ee8cc1Swenshuai.xi if(pfmt->flag & GFXFONT_FLAG_COMPACT)
710*53ee8cc1Swenshuai.xi {
711*53ee8cc1Swenshuai.xi dis = pfmt->dis;
712*53ee8cc1Swenshuai.xi }
713*53ee8cc1Swenshuai.xi else if (pfmt->flag & GFXFONT_FLAG_GAP)
714*53ee8cc1Swenshuai.xi {
715*53ee8cc1Swenshuai.xi dis = (0-pfmt->dis);
716*53ee8cc1Swenshuai.xi }
717*53ee8cc1Swenshuai.xi else
718*53ee8cc1Swenshuai.xi {
719*53ee8cc1Swenshuai.xi dis = 0;
720*53ee8cc1Swenshuai.xi }
721*53ee8cc1Swenshuai.xi
722*53ee8cc1Swenshuai.xi
723*53ee8cc1Swenshuai.xi if (u32strwidth == 1)
724*53ee8cc1Swenshuai.xi {
725*53ee8cc1Swenshuai.xi pu8TmpIndex = (MS_U8*)pu8index;
726*53ee8cc1Swenshuai.xi while(*pu8TmpIndex != 0)
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi if (pfmt->flag & GFXFONT_FLAG_SCALE)
729*53ee8cc1Swenshuai.xi {
730*53ee8cc1Swenshuai.xi u32Length = u32Length + pfmt->dstblk.width - dis;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi else
733*53ee8cc1Swenshuai.xi {
734*53ee8cc1Swenshuai.xi if ((pfmt->flag & GFXFONT_FLAG_VARWIDTH) &&
735*53ee8cc1Swenshuai.xi (pFont->pBBox != NULL))
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi u32Length = u32Length + pFont->pBBox[*pu8TmpIndex].u8Width - dis;
738*53ee8cc1Swenshuai.xi }
739*53ee8cc1Swenshuai.xi else
740*53ee8cc1Swenshuai.xi {
741*53ee8cc1Swenshuai.xi u32Length = u32Length + pFont->width - dis;
742*53ee8cc1Swenshuai.xi }
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi pu8TmpIndex++;
745*53ee8cc1Swenshuai.xi }
746*53ee8cc1Swenshuai.xi *pu32DispLength = u32Length + dis;
747*53ee8cc1Swenshuai.xi }
748*53ee8cc1Swenshuai.xi else if (u32strwidth == 2)
749*53ee8cc1Swenshuai.xi {
750*53ee8cc1Swenshuai.xi ptr_addr = (MS_VIRT)pu8index;
751*53ee8cc1Swenshuai.xi if(ptr_addr % 2 != 0)
752*53ee8cc1Swenshuai.xi {
753*53ee8cc1Swenshuai.xi GFX_ERR("%s: %d\n", __FUNCTION__ , __LINE__);
754*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
755*53ee8cc1Swenshuai.xi }
756*53ee8cc1Swenshuai.xi
757*53ee8cc1Swenshuai.xi pu16TmpIndex = (MS_U16*)ptr_addr;
758*53ee8cc1Swenshuai.xi while(*pu16TmpIndex != 0)
759*53ee8cc1Swenshuai.xi {
760*53ee8cc1Swenshuai.xi if (pfmt->flag & GFXFONT_FLAG_SCALE)
761*53ee8cc1Swenshuai.xi {
762*53ee8cc1Swenshuai.xi u32Length = u32Length + pfmt->dstblk.width - dis;
763*53ee8cc1Swenshuai.xi }
764*53ee8cc1Swenshuai.xi else
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi if ((pfmt->flag & GFXFONT_FLAG_VARWIDTH) &&
767*53ee8cc1Swenshuai.xi (pFont->pBBox != NULL))
768*53ee8cc1Swenshuai.xi {
769*53ee8cc1Swenshuai.xi u32Length = u32Length + pFont->pBBox[*pu16TmpIndex].u8Width - dis;
770*53ee8cc1Swenshuai.xi }
771*53ee8cc1Swenshuai.xi else
772*53ee8cc1Swenshuai.xi {
773*53ee8cc1Swenshuai.xi u32Length = u32Length + pFont->width - dis;
774*53ee8cc1Swenshuai.xi }
775*53ee8cc1Swenshuai.xi }
776*53ee8cc1Swenshuai.xi pu16TmpIndex++;
777*53ee8cc1Swenshuai.xi }
778*53ee8cc1Swenshuai.xi *pu32DispLength = u32Length + dis;
779*53ee8cc1Swenshuai.xi }
780*53ee8cc1Swenshuai.xi else
781*53ee8cc1Swenshuai.xi {
782*53ee8cc1Swenshuai.xi *pu32DispLength = u32Length;
783*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
784*53ee8cc1Swenshuai.xi }
785*53ee8cc1Swenshuai.xi
786*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
787*53ee8cc1Swenshuai.xi }
788*53ee8cc1Swenshuai.xi
789*53ee8cc1Swenshuai.xi
790*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
791*53ee8cc1Swenshuai.xi /// GFX text out one character without load font.
792*53ee8cc1Swenshuai.xi /// @param pChar \b IN: pointer to character information
793*53ee8cc1Swenshuai.xi /// @param pfmt \b IN: pointer to text out info
794*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
795*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
796*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_CharacterOut(GFX_CharInfo * pChar,GFX_TextOutInfo * pfmt)797*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_CharacterOut(GFX_CharInfo* pChar, GFX_TextOutInfo *pfmt)
798*53ee8cc1Swenshuai.xi {
799*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
800*53ee8cc1Swenshuai.xi
801*53ee8cc1Swenshuai.xi if(pChar==NULL || pfmt ==NULL)
802*53ee8cc1Swenshuai.xi {
803*53ee8cc1Swenshuai.xi return GFX_FAIL;
804*53ee8cc1Swenshuai.xi }
805*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
806*53ee8cc1Swenshuai.xi GFX_TEXTOUT_ARGS GFXTextArgs;
807*53ee8cc1Swenshuai.xi GFX_CharacterOut GFXCharacterout;
808*53ee8cc1Swenshuai.xi
809*53ee8cc1Swenshuai.xi memset(&GFXTextArgs, 0 , sizeof(GFX_TEXTOUT_ARGS));
810*53ee8cc1Swenshuai.xi memset(&GFXCharacterout , 0 ,sizeof(GFX_CharacterOut));
811*53ee8cc1Swenshuai.xi
812*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
813*53ee8cc1Swenshuai.xi GFXCharacterout.pChar =pChar;
814*53ee8cc1Swenshuai.xi GFXCharacterout.pTextInfo =pfmt;
815*53ee8cc1Swenshuai.xi GFXTextArgs.eGFX_TextType =E_CHARACTEROUT;
816*53ee8cc1Swenshuai.xi GFXTextArgs.pGFX_TextOut =(void*)&GFXCharacterout;
817*53ee8cc1Swenshuai.xi GFXTextArgs.u32Size =sizeof(GFX_CharacterOut);
818*53ee8cc1Swenshuai.xi GFXCharacterout.pFireInfo = &GFXFireInfo;
819*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_FONT, (void*)&GFXTextArgs) != UTOPIA_STATUS_SUCCESS)
820*53ee8cc1Swenshuai.xi {
821*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
822*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
823*53ee8cc1Swenshuai.xi }
824*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
825*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
826*53ee8cc1Swenshuai.xi
827*53ee8cc1Swenshuai.xi return eRet;
828*53ee8cc1Swenshuai.xi }
829*53ee8cc1Swenshuai.xi
830*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
831*53ee8cc1Swenshuai.xi /// GFX draw bitmap function
832*53ee8cc1Swenshuai.xi /// The function invokes the callback registered through MApi_GFX_RegisterGetBMPCB for restrieving BMP info.
833*53ee8cc1Swenshuai.xi /// @param handle \b IN: handle of bitmap
834*53ee8cc1Swenshuai.xi /// @param pbmpfmt \b IN: bitmap format
835*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
836*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
837*53ee8cc1Swenshuai.xi /// @return GFX_INVALID_BMP_HANDLE - Invalid bitmap handle
838*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_DrawBitmap(MS_S32 handle,GFX_DrawBmpInfo * pbmpfmt)839*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_DrawBitmap(MS_S32 handle, GFX_DrawBmpInfo *pbmpfmt)
840*53ee8cc1Swenshuai.xi {
841*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
842*53ee8cc1Swenshuai.xi GFX_BitmapInfo bmpinfo;
843*53ee8cc1Swenshuai.xi GFX_BufferInfo srcinfo;
844*53ee8cc1Swenshuai.xi
845*53ee8cc1Swenshuai.xi if(pbmpfmt ==NULL)
846*53ee8cc1Swenshuai.xi {
847*53ee8cc1Swenshuai.xi return GFX_FAIL;
848*53ee8cc1Swenshuai.xi }
849*53ee8cc1Swenshuai.xi
850*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
851*53ee8cc1Swenshuai.xi GFX_BITMAP_ARGS pGFXBitmap;
852*53ee8cc1Swenshuai.xi GFX_Bitmap pGFXBitmapInfo;
853*53ee8cc1Swenshuai.xi
854*53ee8cc1Swenshuai.xi memset(&pGFXBitmap, 0 , sizeof(GFX_BITMAP_ARGS));
855*53ee8cc1Swenshuai.xi memset(&pGFXBitmapInfo , 0 ,sizeof(GFX_Bitmap));
856*53ee8cc1Swenshuai.xi
857*53ee8cc1Swenshuai.xi if(fpGFX_CBGetBMP != NULL)
858*53ee8cc1Swenshuai.xi fpGFX_CBGetBMP(handle, &bmpinfo);
859*53ee8cc1Swenshuai.xi else
860*53ee8cc1Swenshuai.xi return GFX_INVALID_BMP_HANDLE;
861*53ee8cc1Swenshuai.xi
862*53ee8cc1Swenshuai.xi if (!bmpinfo.inUsed)
863*53ee8cc1Swenshuai.xi {
864*53ee8cc1Swenshuai.xi return GFX_INVALID_BMP_HANDLE;
865*53ee8cc1Swenshuai.xi }
866*53ee8cc1Swenshuai.xi
867*53ee8cc1Swenshuai.xi srcinfo.u32Addr = bmpinfo.addr;
868*53ee8cc1Swenshuai.xi srcinfo.u32Width = bmpinfo.width;
869*53ee8cc1Swenshuai.xi srcinfo.u32Height = bmpinfo.height;
870*53ee8cc1Swenshuai.xi srcinfo.u32Pitch = bmpinfo.pitch;
871*53ee8cc1Swenshuai.xi srcinfo.u32ColorFmt = bmpinfo.fmt;
872*53ee8cc1Swenshuai.xi
873*53ee8cc1Swenshuai.xi MApi_GFX_SetSrcBufferInfo(&srcinfo,0);
874*53ee8cc1Swenshuai.xi
875*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
876*53ee8cc1Swenshuai.xi pGFXBitmapInfo.handle =handle;
877*53ee8cc1Swenshuai.xi pGFXBitmapInfo.pBmpInfo =pbmpfmt;
878*53ee8cc1Swenshuai.xi pGFXBitmap.pGFX_Bitmap =(void*)&pGFXBitmapInfo;
879*53ee8cc1Swenshuai.xi pGFXBitmap.u32Size =sizeof(GFX_Bitmap);
880*53ee8cc1Swenshuai.xi pGFXBitmapInfo.pFireInfo = &GFXFireInfo;
881*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DST_INFO;
882*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance , MAPI_CMD_GFX_BITMAP, (void*)&pGFXBitmap) != UTOPIA_STATUS_SUCCESS)
883*53ee8cc1Swenshuai.xi {
884*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
885*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi else
888*53ee8cc1Swenshuai.xi {
889*53ee8cc1Swenshuai.xi eRet = GFX_SUCCESS;
890*53ee8cc1Swenshuai.xi }
891*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
892*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
893*53ee8cc1Swenshuai.xi
894*53ee8cc1Swenshuai.xi return eRet;
895*53ee8cc1Swenshuai.xi
896*53ee8cc1Swenshuai.xi }
897*53ee8cc1Swenshuai.xi #endif
898*53ee8cc1Swenshuai.xi
899*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
900*53ee8cc1Swenshuai.xi /// Initial PE engine
901*53ee8cc1Swenshuai.xi /// @return None
902*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_Init(GFX_Config * geConfig)903*53ee8cc1Swenshuai.xi void MApi_GFX_Init(GFX_Config *geConfig)
904*53ee8cc1Swenshuai.xi {
905*53ee8cc1Swenshuai.xi GFX_INIT_ARGS GFXInit;
906*53ee8cc1Swenshuai.xi GFX_Init_Config GFXInitInfo;
907*53ee8cc1Swenshuai.xi
908*53ee8cc1Swenshuai.xi memset(&GFXInit , 0 , sizeof(GFX_INIT_ARGS));
909*53ee8cc1Swenshuai.xi GFXInitInfo.u32VCmdQSize = geConfig->u32VCmdQSize;
910*53ee8cc1Swenshuai.xi GFXInitInfo.u32VCmdQAddr = geConfig->u32VCmdQAddr;
911*53ee8cc1Swenshuai.xi GFXInitInfo.bIsHK = geConfig->bIsHK;
912*53ee8cc1Swenshuai.xi GFXInitInfo.bIsCompt = geConfig->bIsCompt;
913*53ee8cc1Swenshuai.xi
914*53ee8cc1Swenshuai.xi GFXInit.pGFX_Init = (void*)&GFXInitInfo;
915*53ee8cc1Swenshuai.xi GFXInit.u32Size = sizeof(GFX_Init_Config);
916*53ee8cc1Swenshuai.xi
917*53ee8cc1Swenshuai.xi CheckGFXInstanceOpen();
918*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_INIT, (void*)&GFXInit) != UTOPIA_STATUS_SUCCESS)
919*53ee8cc1Swenshuai.xi {
920*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d] GFXIoctl Fail\n",__FUNCTION__, __LINE__);
921*53ee8cc1Swenshuai.xi }
922*53ee8cc1Swenshuai.xi _GFX_RegisterAllCBFunc();
923*53ee8cc1Swenshuai.xi
924*53ee8cc1Swenshuai.xi s32GEWrapperMutex = MsOS_CreateMutex(E_MSOS_FIFO, "GEWrapper_Mutex", MSOS_PROCESS_SHARED);
925*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
926*53ee8cc1Swenshuai.xi atexit(MApi_GE_Exit);
927*53ee8cc1Swenshuai.xi #endif
928*53ee8cc1Swenshuai.xi
929*53ee8cc1Swenshuai.xi }
930*53ee8cc1Swenshuai.xi
931*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
932*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
933*53ee8cc1Swenshuai.xi /// Set GFX Engine dither
934*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
935*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
936*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
937*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDither(MS_BOOL enable)938*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDither(MS_BOOL enable)
939*53ee8cc1Swenshuai.xi {
940*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
941*53ee8cc1Swenshuai.xi
942*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
943*53ee8cc1Swenshuai.xi GFXFireInfo.bDither = enable;
944*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DITHER_INFO;
945*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
946*53ee8cc1Swenshuai.xi
947*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
948*53ee8cc1Swenshuai.xi }
949*53ee8cc1Swenshuai.xi
950*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
951*53ee8cc1Swenshuai.xi /// Set GFX Engine dither
952*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
953*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
954*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
955*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetOnePixelMode(MS_BOOL enable)956*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetOnePixelMode(MS_BOOL enable)
957*53ee8cc1Swenshuai.xi {
958*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
959*53ee8cc1Swenshuai.xi
960*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
961*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
962*53ee8cc1Swenshuai.xi
963*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 , sizeof(GFX_SETCONFIG_ARGS));
964*53ee8cc1Swenshuai.xi
965*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_ONEPIXELMODE;
966*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&enable;
967*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_BOOL);
968*53ee8cc1Swenshuai.xi
969*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
970*53ee8cc1Swenshuai.xi {
971*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
972*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
973*53ee8cc1Swenshuai.xi }
974*53ee8cc1Swenshuai.xi
975*53ee8cc1Swenshuai.xi return eRet;
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi
978*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
979*53ee8cc1Swenshuai.xi /// Set PE source color key
980*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false\n
981*53ee8cc1Swenshuai.xi /// When enable is FALSE, do not care the other parameters.\n
982*53ee8cc1Swenshuai.xi /// @param opMode \b IN: source color key mode
983*53ee8cc1Swenshuai.xi /// The alpha channel does not matter\n
984*53ee8cc1Swenshuai.xi /// @param fmt \b IN: source color key format
985*53ee8cc1Swenshuai.xi /// @param ps_color \b IN: pointer of source color key start (GFX_RgbColor or GFX_BlinkData depend on color format).\n
986*53ee8cc1Swenshuai.xi /// For all RGB color, the color set as the ARGB8888 format.\n
987*53ee8cc1Swenshuai.xi /// Each color component need to shift to high bit.\n
988*53ee8cc1Swenshuai.xi /// Use ARGB1555 as the example, the source color key as the following:\n
989*53ee8cc1Swenshuai.xi /// ARGB1555 --> ARRRRRGGGGGBBBBB (every character represents one bit)\n
990*53ee8cc1Swenshuai.xi /// *ps_color --> A0000000RRRRR000GGGGG000BBBBB000 (every character represents one bit)\n\n
991*53ee8cc1Swenshuai.xi /// For GFX_FMT_I8 format, the index set to b component (ps_color->b = b).\n
992*53ee8cc1Swenshuai.xi /// For GFX_FMT_1BAAFGBG123433 foramt, the foramt set as the GFX_BlinkData.\n
993*53ee8cc1Swenshuai.xi /// @param pe_color \b IN: pointer of source color key end (GFX_RgbColor or GFX_BlinkData depend on color format).\n
994*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
995*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
996*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetSrcColorKey(MS_BOOL enable,GFX_ColorKeyMode opMode,GFX_Buffer_Format fmt,void * ps_color,void * pe_color)997*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetSrcColorKey(MS_BOOL enable,
998*53ee8cc1Swenshuai.xi GFX_ColorKeyMode opMode,
999*53ee8cc1Swenshuai.xi GFX_Buffer_Format fmt,
1000*53ee8cc1Swenshuai.xi void *ps_color,
1001*53ee8cc1Swenshuai.xi void *pe_color)
1002*53ee8cc1Swenshuai.xi {
1003*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1004*53ee8cc1Swenshuai.xi MS_U32 *pS_color = (MS_U32 *)ps_color;
1005*53ee8cc1Swenshuai.xi MS_U32 *pE_color = (MS_U32 *)pe_color;
1006*53ee8cc1Swenshuai.xi
1007*53ee8cc1Swenshuai.xi if(ps_color ==NULL || pe_color ==NULL)
1008*53ee8cc1Swenshuai.xi {
1009*53ee8cc1Swenshuai.xi return GFX_FAIL;
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi
1012*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1013*53ee8cc1Swenshuai.xi
1014*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1015*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetSrcColorKey.bEnable =enable;
1016*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetSrcColorKey.eOpMode =opMode;
1017*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetSrcColorKey.eFmt =fmt;
1018*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetSrcColorKey.S_color =*pS_color;
1019*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetSrcColorKey.E_color =*pE_color;
1020*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_SRC_CLRKEY_INFO;
1021*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1022*53ee8cc1Swenshuai.xi
1023*53ee8cc1Swenshuai.xi return eRet;
1024*53ee8cc1Swenshuai.xi
1025*53ee8cc1Swenshuai.xi }
1026*53ee8cc1Swenshuai.xi
1027*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1028*53ee8cc1Swenshuai.xi /// Set PE destination color key
1029*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false\n
1030*53ee8cc1Swenshuai.xi /// When enable is FALSE, do not care the other parameters.\n
1031*53ee8cc1Swenshuai.xi /// @param opMode \b IN: destination color key mode\n
1032*53ee8cc1Swenshuai.xi /// The alpha channel does not matter\n
1033*53ee8cc1Swenshuai.xi /// @param fmt \b IN: destination color key format
1034*53ee8cc1Swenshuai.xi /// @param ps_color \b IN: pointer of destination color key start (GFX_RgbColor or GFX_BlinkData depend on color format).\n
1035*53ee8cc1Swenshuai.xi /// For all RGB color, the color set as the ARGB8888 format.\n
1036*53ee8cc1Swenshuai.xi /// Each color component need to shift to high bit.\n
1037*53ee8cc1Swenshuai.xi /// Use ARGB1555 as the example, the source color key as the following:\n
1038*53ee8cc1Swenshuai.xi /// ARGB1555 --> ARRRRRGGGGGBBBBB (every character represents one bit)\n
1039*53ee8cc1Swenshuai.xi /// *ps_color --> A0000000RRRRR000GGGGG000BBBBBB000 (every character represents one bit)\n\n
1040*53ee8cc1Swenshuai.xi /// For GFX_FMT_I8 format, the index set to b component (ps_color->b = b).\n
1041*53ee8cc1Swenshuai.xi /// For GFX_FMT_1BAAFGBG123433 foramt, the foramt set as the GFX_BlinkData.\n
1042*53ee8cc1Swenshuai.xi /// @param pe_color \b IN: pointer of destination color key end (GFX_RgbColor or GFX_BlinkData depend on color format).\n
1043*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1044*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1045*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDstColorKey(MS_BOOL enable,GFX_ColorKeyMode opMode,GFX_Buffer_Format fmt,void * ps_color,void * pe_color)1046*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDstColorKey(MS_BOOL enable,
1047*53ee8cc1Swenshuai.xi GFX_ColorKeyMode opMode,
1048*53ee8cc1Swenshuai.xi GFX_Buffer_Format fmt,
1049*53ee8cc1Swenshuai.xi void *ps_color,
1050*53ee8cc1Swenshuai.xi void *pe_color)
1051*53ee8cc1Swenshuai.xi {
1052*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1053*53ee8cc1Swenshuai.xi MS_U32 *pS_color = (MS_U32 *)ps_color;
1054*53ee8cc1Swenshuai.xi MS_U32 *pE_color = (MS_U32 *)pe_color;
1055*53ee8cc1Swenshuai.xi
1056*53ee8cc1Swenshuai.xi if(ps_color ==NULL || pe_color ==NULL)
1057*53ee8cc1Swenshuai.xi {
1058*53ee8cc1Swenshuai.xi return GFX_FAIL;
1059*53ee8cc1Swenshuai.xi }
1060*53ee8cc1Swenshuai.xi
1061*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1062*53ee8cc1Swenshuai.xi
1063*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1064*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstColorKey.bEnable =enable;
1065*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstColorKey.eOpMode =opMode;
1066*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstColorKey.eFmt =fmt;
1067*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstColorKey.S_color =*pS_color;
1068*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstColorKey.E_color =*pE_color;
1069*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DST_CLRKEY_INFO;
1070*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1071*53ee8cc1Swenshuai.xi
1072*53ee8cc1Swenshuai.xi return eRet;
1073*53ee8cc1Swenshuai.xi
1074*53ee8cc1Swenshuai.xi }
1075*53ee8cc1Swenshuai.xi
1076*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1077*53ee8cc1Swenshuai.xi /// Set PE intensity : total 16 color Palette in PE
1078*53ee8cc1Swenshuai.xi /// @param id \b IN: id of intensity
1079*53ee8cc1Swenshuai.xi /// @param fmt \b IN: intensity color format (GFX_FMT_ARGB8888 , GFX_FMT_1BAAFGBG123433 or GFX_FMT_I8)
1080*53ee8cc1Swenshuai.xi /// @param pColor \b IN: pointer of intensity (GFX_RgbColor or GFX_BlinkData depend on color format)
1081*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1082*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1083*53ee8cc1Swenshuai.xi /// @return GFX_Result_INVALID_INTENSITY_ID - Inavlid index (id >= 16)
1084*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetIntensity(MS_U32 id,GFX_Buffer_Format fmt,MS_U32 * pColor)1085*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetIntensity(MS_U32 id, GFX_Buffer_Format fmt, MS_U32 *pColor)
1086*53ee8cc1Swenshuai.xi {
1087*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1088*53ee8cc1Swenshuai.xi
1089*53ee8cc1Swenshuai.xi if(pColor ==NULL)
1090*53ee8cc1Swenshuai.xi {
1091*53ee8cc1Swenshuai.xi return GFX_FAIL;
1092*53ee8cc1Swenshuai.xi }
1093*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1094*53ee8cc1Swenshuai.xi
1095*53ee8cc1Swenshuai.xi GFX_ABL_ARGS GFXSetABL_ARGS;
1096*53ee8cc1Swenshuai.xi GFX_Set_Intensity GFXSetIntensity;
1097*53ee8cc1Swenshuai.xi
1098*53ee8cc1Swenshuai.xi memset(&GFXSetABL_ARGS, 0 , sizeof(GFX_ABL_ARGS));
1099*53ee8cc1Swenshuai.xi memset(&GFXSetIntensity , 0 ,sizeof(GFX_Set_Intensity));
1100*53ee8cc1Swenshuai.xi
1101*53ee8cc1Swenshuai.xi GFXSetABL_ARGS.eGFX_SetABL =E_GFX_SET_INTENSITY;
1102*53ee8cc1Swenshuai.xi GFXSetABL_ARGS.pGFX_ABL =(void*)&GFXSetIntensity;
1103*53ee8cc1Swenshuai.xi GFXSetABL_ARGS.u32Size =sizeof(GFX_Set_Intensity);
1104*53ee8cc1Swenshuai.xi
1105*53ee8cc1Swenshuai.xi GFXSetIntensity.u32Id = id;
1106*53ee8cc1Swenshuai.xi GFXSetIntensity.eFmt = fmt;
1107*53ee8cc1Swenshuai.xi GFXSetIntensity.pColor = pColor;
1108*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_ABL, (void*)&GFXSetABL_ARGS) != UTOPIA_STATUS_SUCCESS)
1109*53ee8cc1Swenshuai.xi {
1110*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1111*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
1112*53ee8cc1Swenshuai.xi }
1113*53ee8cc1Swenshuai.xi
1114*53ee8cc1Swenshuai.xi return eRet;
1115*53ee8cc1Swenshuai.xi
1116*53ee8cc1Swenshuai.xi }
1117*53ee8cc1Swenshuai.xi
1118*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1119*53ee8cc1Swenshuai.xi /// Get GFX intensity : total 16 color Palette in GFX for I1/I2/I4 mode.
1120*53ee8cc1Swenshuai.xi /// @param idx \b IN: id of intensity
1121*53ee8cc1Swenshuai.xi /// @param color \b IN: Pointer of start of intensity point to
1122*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1123*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1124*53ee8cc1Swenshuai.xi /// @return GFX_Result_INVALID_INTENSITY_ID - Inavlid index (id >= 16)
1125*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_GetIntensity(MS_U32 idx,MS_U32 * color)1126*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetIntensity(MS_U32 idx, MS_U32 *color)
1127*53ee8cc1Swenshuai.xi {
1128*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1129*53ee8cc1Swenshuai.xi
1130*53ee8cc1Swenshuai.xi if(color == NULL)
1131*53ee8cc1Swenshuai.xi {
1132*53ee8cc1Swenshuai.xi return GFX_FAIL;
1133*53ee8cc1Swenshuai.xi }
1134*53ee8cc1Swenshuai.xi
1135*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1136*53ee8cc1Swenshuai.xi GFX_GETINFO_ARGS GFXGetInfo;
1137*53ee8cc1Swenshuai.xi GFX_Get_Intensity GFXGetIntensity;
1138*53ee8cc1Swenshuai.xi
1139*53ee8cc1Swenshuai.xi memset(&GFXGetInfo, 0 , sizeof(GFX_GETINFO_ARGS));
1140*53ee8cc1Swenshuai.xi memset(&GFXGetIntensity , 0 ,sizeof(GFX_Get_Intensity));
1141*53ee8cc1Swenshuai.xi
1142*53ee8cc1Swenshuai.xi GFXGetInfo.eGFX_GetConfig =E_GFX_GET_INTENSITY;
1143*53ee8cc1Swenshuai.xi GFXGetInfo.pGFX_GetInfo =(void*)&GFXGetIntensity;
1144*53ee8cc1Swenshuai.xi GFXGetInfo.u32Size =sizeof(GFX_Get_Intensity);
1145*53ee8cc1Swenshuai.xi
1146*53ee8cc1Swenshuai.xi GFXGetIntensity.u32Id =idx;
1147*53ee8cc1Swenshuai.xi GFXGetIntensity.pColor =color;
1148*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_GET_INFO, (void*)&GFXGetInfo) != UTOPIA_STATUS_SUCCESS)
1149*53ee8cc1Swenshuai.xi {
1150*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1151*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi
1154*53ee8cc1Swenshuai.xi return eRet;
1155*53ee8cc1Swenshuai.xi
1156*53ee8cc1Swenshuai.xi }
1157*53ee8cc1Swenshuai.xi
1158*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1159*53ee8cc1Swenshuai.xi /// Set GFX raster operation
1160*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1161*53ee8cc1Swenshuai.xi /// @param eRopMode \b IN: raster operation
1162*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1163*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetROP2(MS_BOOL enable,GFX_ROP2_Op eRopMode)1165*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetROP2(MS_BOOL enable, GFX_ROP2_Op eRopMode)
1166*53ee8cc1Swenshuai.xi {
1167*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1168*53ee8cc1Swenshuai.xi
1169*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1170*53ee8cc1Swenshuai.xi GFX_ABL_ARGS GFXSetABL_ARGS;
1171*53ee8cc1Swenshuai.xi GFX_Set_ROP GFXSetROP;
1172*53ee8cc1Swenshuai.xi
1173*53ee8cc1Swenshuai.xi memset(&GFXSetABL_ARGS, 0 , sizeof(GFX_ABL_ARGS));
1174*53ee8cc1Swenshuai.xi memset(&GFXSetROP , 0 ,sizeof(GFX_Set_ROP));
1175*53ee8cc1Swenshuai.xi
1176*53ee8cc1Swenshuai.xi GFXSetABL_ARGS.eGFX_SetABL =E_GFX_SET_ROP;
1177*53ee8cc1Swenshuai.xi GFXSetABL_ARGS.pGFX_ABL =(void*)&GFXSetROP;
1178*53ee8cc1Swenshuai.xi GFXSetABL_ARGS.u32Size =sizeof(GFX_Set_ROP);
1179*53ee8cc1Swenshuai.xi
1180*53ee8cc1Swenshuai.xi GFXSetROP.bEnable =enable;
1181*53ee8cc1Swenshuai.xi GFXSetROP.eRopMode =eRopMode;
1182*53ee8cc1Swenshuai.xi
1183*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_ABL, (void*)&GFXSetABL_ARGS) != UTOPIA_STATUS_SUCCESS)
1184*53ee8cc1Swenshuai.xi {
1185*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1186*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
1187*53ee8cc1Swenshuai.xi }
1188*53ee8cc1Swenshuai.xi
1189*53ee8cc1Swenshuai.xi return eRet;
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi }
1192*53ee8cc1Swenshuai.xi
1193*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1194*53ee8cc1Swenshuai.xi /// GFX draw line
1195*53ee8cc1Swenshuai.xi /// @param pline \b IN: pointer to line info
1196*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1197*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1198*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_DrawLine(GFX_DrawLineInfo * pline)1199*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_DrawLine(GFX_DrawLineInfo *pline)
1200*53ee8cc1Swenshuai.xi {
1201*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1202*53ee8cc1Swenshuai.xi
1203*53ee8cc1Swenshuai.xi if(pline == NULL)
1204*53ee8cc1Swenshuai.xi {
1205*53ee8cc1Swenshuai.xi return GFX_FAIL;
1206*53ee8cc1Swenshuai.xi }
1207*53ee8cc1Swenshuai.xi
1208*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1209*53ee8cc1Swenshuai.xi GFX_LINEDRAW_ARGS GFXDrawLine;
1210*53ee8cc1Swenshuai.xi GFX_Set_DrawLineInfo GFXDrawLineInfo;
1211*53ee8cc1Swenshuai.xi
1212*53ee8cc1Swenshuai.xi memset(&GFXDrawLine, 0 , sizeof(GFX_LINEDRAW_ARGS));
1213*53ee8cc1Swenshuai.xi memset(&GFXDrawLineInfo, 0 ,sizeof(GFX_Set_DrawLineInfo));
1214*53ee8cc1Swenshuai.xi
1215*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1216*53ee8cc1Swenshuai.xi GFXDrawLineInfo.pFireInfo = &GFXFireInfo;
1217*53ee8cc1Swenshuai.xi GFXDrawLineInfo.pDrawLineInfo = pline;
1218*53ee8cc1Swenshuai.xi GFXDrawLine.pLineInfo =(void*)&GFXDrawLineInfo;
1219*53ee8cc1Swenshuai.xi GFXDrawLine.u32Size =sizeof(GFX_Set_DrawLineInfo);
1220*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_LINEDRAW, (void*)&GFXDrawLine) != UTOPIA_STATUS_SUCCESS)
1221*53ee8cc1Swenshuai.xi {
1222*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1223*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
1224*53ee8cc1Swenshuai.xi }
1225*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
1226*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1227*53ee8cc1Swenshuai.xi
1228*53ee8cc1Swenshuai.xi return eRet;
1229*53ee8cc1Swenshuai.xi }
1230*53ee8cc1Swenshuai.xi
1231*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1232*53ee8cc1Swenshuai.xi /// GFX rectangle fill
1233*53ee8cc1Swenshuai.xi /// @param pfillblock \b IN: pointer to block info
1234*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1235*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1236*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_RectFill(GFX_RectFillInfo * pfillblock)1237*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_RectFill(GFX_RectFillInfo *pfillblock)
1238*53ee8cc1Swenshuai.xi {
1239*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1240*53ee8cc1Swenshuai.xi
1241*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(pfillblock);
1242*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1243*53ee8cc1Swenshuai.xi
1244*53ee8cc1Swenshuai.xi GFX_RECTFILL_ARGS GFXRectFill;
1245*53ee8cc1Swenshuai.xi GFX_Set_RectFillInfo GFXRectFillInfo;
1246*53ee8cc1Swenshuai.xi
1247*53ee8cc1Swenshuai.xi memset(&GFXRectFill, 0 , sizeof(GFX_RECTFILL_ARGS));
1248*53ee8cc1Swenshuai.xi memset(&GFXRectFillInfo, 0 ,sizeof(GFX_Set_RectFillInfo));
1249*53ee8cc1Swenshuai.xi
1250*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1251*53ee8cc1Swenshuai.xi GFXRectFillInfo.pFireInfo = &GFXFireInfo;
1252*53ee8cc1Swenshuai.xi GFXRectFillInfo.pRectFillInfo = pfillblock;
1253*53ee8cc1Swenshuai.xi GFXRectFill.pFillBlock =(void*)&GFXRectFillInfo;
1254*53ee8cc1Swenshuai.xi GFXRectFill.u32Size =sizeof(GFX_Set_RectFillInfo);
1255*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_RECTFILL, (void*)&GFXRectFill) != UTOPIA_STATUS_SUCCESS)
1256*53ee8cc1Swenshuai.xi {
1257*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1258*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
1259*53ee8cc1Swenshuai.xi }
1260*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
1261*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1262*53ee8cc1Swenshuai.xi
1263*53ee8cc1Swenshuai.xi return eRet;
1264*53ee8cc1Swenshuai.xi }
1265*53ee8cc1Swenshuai.xi
1266*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1267*53ee8cc1Swenshuai.xi /// GFX triangle fill
1268*53ee8cc1Swenshuai.xi /// @param ptriblock \b IN: pointer to block info
1269*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1270*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1271*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_TriFill(GFX_TriFillInfo * ptriblock)1272*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_TriFill(GFX_TriFillInfo *ptriblock)
1273*53ee8cc1Swenshuai.xi {
1274*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1275*53ee8cc1Swenshuai.xi
1276*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(ptriblock);
1277*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1278*53ee8cc1Swenshuai.xi
1279*53ee8cc1Swenshuai.xi GFX_TRIFILL_ARGS GFXTriFill;
1280*53ee8cc1Swenshuai.xi GFX_Set_TriFillInfo GFXTriFillInfo;
1281*53ee8cc1Swenshuai.xi
1282*53ee8cc1Swenshuai.xi memset(&GFXTriFill, 0 , sizeof(GFX_TRIFILL_ARGS));
1283*53ee8cc1Swenshuai.xi memset(&GFXTriFillInfo, 0 ,sizeof(GFX_Set_TriFillInfo));
1284*53ee8cc1Swenshuai.xi
1285*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1286*53ee8cc1Swenshuai.xi GFXTriFillInfo.pFireInfo = &GFXFireInfo;
1287*53ee8cc1Swenshuai.xi GFXTriFillInfo.pTriFillInfo = ptriblock;
1288*53ee8cc1Swenshuai.xi GFXTriFill.pFillBlock =(void*)&GFXTriFillInfo;
1289*53ee8cc1Swenshuai.xi GFXTriFill.u32Size =sizeof(GFX_Set_TriFillInfo);
1290*53ee8cc1Swenshuai.xi
1291*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_TRIFILL, (void*)&GFXTriFill) != UTOPIA_STATUS_SUCCESS)
1292*53ee8cc1Swenshuai.xi {
1293*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1294*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
1295*53ee8cc1Swenshuai.xi }
1296*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
1297*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1298*53ee8cc1Swenshuai.xi
1299*53ee8cc1Swenshuai.xi return eRet;
1300*53ee8cc1Swenshuai.xi }
1301*53ee8cc1Swenshuai.xi
1302*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1303*53ee8cc1Swenshuai.xi /// GFX span fill
1304*53ee8cc1Swenshuai.xi /// @param pspanblock \b IN: pointer to block info
1305*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1306*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1307*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SpanFill(GFX_SpanFillInfo * pspanblock)1308*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SpanFill(GFX_SpanFillInfo *pspanblock)
1309*53ee8cc1Swenshuai.xi {
1310*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1311*53ee8cc1Swenshuai.xi
1312*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(pspanblock);
1313*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1314*53ee8cc1Swenshuai.xi
1315*53ee8cc1Swenshuai.xi GFX_SPANFILL_ARGS GFXSpanFill;
1316*53ee8cc1Swenshuai.xi GFX_Set_SpanFillInfo GFXSpanFillInfo;
1317*53ee8cc1Swenshuai.xi
1318*53ee8cc1Swenshuai.xi memset(&GFXSpanFill, 0 , sizeof(GFX_SPANFILL_ARGS));
1319*53ee8cc1Swenshuai.xi memset(&GFXSpanFillInfo, 0 ,sizeof(GFX_Set_SpanFillInfo));
1320*53ee8cc1Swenshuai.xi
1321*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1322*53ee8cc1Swenshuai.xi GFXSpanFillInfo.pFireInfo = &GFXFireInfo;
1323*53ee8cc1Swenshuai.xi GFXSpanFillInfo.pSpanFillInfo = pspanblock;
1324*53ee8cc1Swenshuai.xi GFXSpanFill.pFillBlock =(void*)&GFXSpanFillInfo;
1325*53ee8cc1Swenshuai.xi GFXSpanFill.u32Size =sizeof(GFX_Set_SpanFillInfo);
1326*53ee8cc1Swenshuai.xi
1327*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SPANFILL, (void*)&GFXSpanFill) != UTOPIA_STATUS_SUCCESS)
1328*53ee8cc1Swenshuai.xi {
1329*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1330*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
1331*53ee8cc1Swenshuai.xi }
1332*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
1333*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1334*53ee8cc1Swenshuai.xi
1335*53ee8cc1Swenshuai.xi return eRet;
1336*53ee8cc1Swenshuai.xi }
1337*53ee8cc1Swenshuai.xi
1338*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1339*53ee8cc1Swenshuai.xi /// GFX trapezoid fill
1340*53ee8cc1Swenshuai.xi /// @param pGfxFillInfo \b IN: pointer to GFX_RectFillInfo which is union with Trapezoid struct.
1341*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1342*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1343*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_TrapezoidFill(GFX_RectFillInfo * pGfxFillInfo)1344*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_TrapezoidFill(GFX_RectFillInfo *pGfxFillInfo)
1345*53ee8cc1Swenshuai.xi {
1346*53ee8cc1Swenshuai.xi #if 0
1347*53ee8cc1Swenshuai.xi GE_Trapezoid geTrapezoid;
1348*53ee8cc1Swenshuai.xi MS_U32 u32ColorS, u32ColorE;
1349*53ee8cc1Swenshuai.xi MS_U32 flags = 0;
1350*53ee8cc1Swenshuai.xi
1351*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1352*53ee8cc1Swenshuai.xi
1353*53ee8cc1Swenshuai.xi //Prepare Fill Block:
1354*53ee8cc1Swenshuai.xi geTrapezoid.u16X0 = pGfxFillInfo->dstTrapezoidBlk.u16X0;
1355*53ee8cc1Swenshuai.xi geTrapezoid.u16Y0 = pGfxFillInfo->dstTrapezoidBlk.u16Y0;
1356*53ee8cc1Swenshuai.xi geTrapezoid.u16X1 = pGfxFillInfo->dstTrapezoidBlk.u16X1;
1357*53ee8cc1Swenshuai.xi geTrapezoid.u16Y1 = pGfxFillInfo->dstTrapezoidBlk.u16Y1;
1358*53ee8cc1Swenshuai.xi geTrapezoid.u16DeltaTop = pGfxFillInfo->dstTrapezoidBlk.u16DeltaTop;
1359*53ee8cc1Swenshuai.xi geTrapezoid.u16DeltaBottom = pGfxFillInfo->dstTrapezoidBlk.u16DeltaBottom;
1360*53ee8cc1Swenshuai.xi
1361*53ee8cc1Swenshuai.xi //Prepare Color:
1362*53ee8cc1Swenshuai.xi u32ColorS = (pGfxFillInfo->colorRange.color_s.a<<24) | (pGfxFillInfo->colorRange.color_s.r<<16)
1363*53ee8cc1Swenshuai.xi | (pGfxFillInfo->colorRange.color_s.g<<8) | (pGfxFillInfo->colorRange.color_s.b);
1364*53ee8cc1Swenshuai.xi u32ColorE = (pGfxFillInfo->colorRange.color_e.a<<24) | (pGfxFillInfo->colorRange.color_e.r<<16)
1365*53ee8cc1Swenshuai.xi | (pGfxFillInfo->colorRange.color_e.g<<8) | (pGfxFillInfo->colorRange.color_e.b);
1366*53ee8cc1Swenshuai.xi
1367*53ee8cc1Swenshuai.xi if(GFX_FMT_1ABFGBG12355 == pGfxFillInfo->fmt)
1368*53ee8cc1Swenshuai.xi {
1369*53ee8cc1Swenshuai.xi u32ColorS = MAKE_PRIMITIVE_COLOR_12355(pGfxFillInfo->blkDataRange.blink_data_s.background, pGfxFillInfo->blkDataRange.blink_data_s.foreground,
1370*53ee8cc1Swenshuai.xi pGfxFillInfo->blkDataRange.blink_data_s.Bits.Blink, pGfxFillInfo->blkDataRange.blink_data_s.Bits.Alpha);
1371*53ee8cc1Swenshuai.xi u32ColorE = MAKE_PRIMITIVE_COLOR_12355(pGfxFillInfo->blkDataRange.blink_data_e.background, pGfxFillInfo->blkDataRange.blink_data_e.foreground,
1372*53ee8cc1Swenshuai.xi pGfxFillInfo->blkDataRange.blink_data_e.Bits.Blink, pGfxFillInfo->blkDataRange.blink_data_e.Bits.Alpha);
1373*53ee8cc1Swenshuai.xi }
1374*53ee8cc1Swenshuai.xi
1375*53ee8cc1Swenshuai.xi if(GFX_FMT_FABAFGBG2266 == pGfxFillInfo->fmt)
1376*53ee8cc1Swenshuai.xi {
1377*53ee8cc1Swenshuai.xi u32ColorS = MAKE_PRIMITIVE_COLOR_2266(pGfxFillInfo->blkDataRange.blink_data_s.background, pGfxFillInfo->blkDataRange.blink_data_s.foreground,
1378*53ee8cc1Swenshuai.xi pGfxFillInfo->blkDataRange.blink_data_s.Bits3.Ba, pGfxFillInfo->blkDataRange.blink_data_s.Bits3.Fa);
1379*53ee8cc1Swenshuai.xi u32ColorE = MAKE_PRIMITIVE_COLOR_2266(pGfxFillInfo->blkDataRange.blink_data_e.background, pGfxFillInfo->blkDataRange.blink_data_e.foreground,
1380*53ee8cc1Swenshuai.xi pGfxFillInfo->blkDataRange.blink_data_e.Bits3.Ba, pGfxFillInfo->blkDataRange.blink_data_e.Bits3.Fa);
1381*53ee8cc1Swenshuai.xi }
1382*53ee8cc1Swenshuai.xi
1383*53ee8cc1Swenshuai.xi flags |= (pGfxFillInfo->flag & GFXRECT_FLAG_COLOR_GRADIENT_X) ? E_GE_FLAG_TRAPEZOID_GRADIENT_X : 0;
1384*53ee8cc1Swenshuai.xi flags |= (pGfxFillInfo->flag & GFXRECT_FLAG_COLOR_GRADIENT_Y) ? E_GE_FLAG_TRAPEZOID_GRADIENT_Y : 0;
1385*53ee8cc1Swenshuai.xi flags |= (pGfxFillInfo->flag & GFXRECT_FLAG_TRAPE_DIRECTION_X) ? E_GE_FLAG_TRAPEZOID_X : 0;
1386*53ee8cc1Swenshuai.xi flags |= (pGfxFillInfo->flag & GFXRECT_FLAG_TRAPE_DIRECTION_Y) ? E_GE_FLAG_TRAPEZOID_Y : 0;
1387*53ee8cc1Swenshuai.xi
1388*53ee8cc1Swenshuai.xi if((flags & E_GE_FLAG_TRAPEZOID_X) && (flags & E_GE_FLAG_TRAPEZOID_Y))
1389*53ee8cc1Swenshuai.xi {
1390*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
1391*53ee8cc1Swenshuai.xi }
1392*53ee8cc1Swenshuai.xi
1393*53ee8cc1Swenshuai.xi return (GFX_Result) MDrv_GE_FillTrapezoid(g_apiGFXLocal.g_pGEContext, &geTrapezoid, u32ColorS, u32ColorE, flags);
1394*53ee8cc1Swenshuai.xi #endif
1395*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1396*53ee8cc1Swenshuai.xi }
1397*53ee8cc1Swenshuai.xi
1398*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1399*53ee8cc1Swenshuai.xi /// Enable Trapezoid Antialiasing
1400*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable or Not
1401*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1402*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_EnableTrapezoidAA(MS_BOOL bEnable)1403*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EnableTrapezoidAA(MS_BOOL bEnable)
1404*53ee8cc1Swenshuai.xi {
1405*53ee8cc1Swenshuai.xi #if 0
1406*53ee8cc1Swenshuai.xi
1407*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1408*53ee8cc1Swenshuai.xi
1409*53ee8cc1Swenshuai.xi return (GFX_Result) MDrv_GE_EnableTrapezoidAA(g_apiGFXLocal.g_pGEContext, bEnable);
1410*53ee8cc1Swenshuai.xi #endif
1411*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1412*53ee8cc1Swenshuai.xi }
1413*53ee8cc1Swenshuai.xi
1414*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1415*53ee8cc1Swenshuai.xi /// Enable Trapezoid Subpixel Correction
1416*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable or Not
1417*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1418*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_EnableTrapSubPixCorr(MS_BOOL bEnable)1419*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EnableTrapSubPixCorr(MS_BOOL bEnable)
1420*53ee8cc1Swenshuai.xi {
1421*53ee8cc1Swenshuai.xi #if 0
1422*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1423*53ee8cc1Swenshuai.xi
1424*53ee8cc1Swenshuai.xi return (GFX_Result) MDrv_GE_EnableTrapSubPixCorr(g_apiGFXLocal.g_pGEContext, bEnable);
1425*53ee8cc1Swenshuai.xi #endif
1426*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1427*53ee8cc1Swenshuai.xi }
1428*53ee8cc1Swenshuai.xi
1429*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1430*53ee8cc1Swenshuai.xi /// Set GFX clipping window
1431*53ee8cc1Swenshuai.xi /// @param v0 \b IN: left-top position
1432*53ee8cc1Swenshuai.xi /// @param v1 \b IN: right-down position
1433*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1434*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1435*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetClip(GFX_Point * v0,GFX_Point * v1)1436*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetClip(GFX_Point* v0, GFX_Point* v1)
1437*53ee8cc1Swenshuai.xi {
1438*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1439*53ee8cc1Swenshuai.xi
1440*53ee8cc1Swenshuai.xi if((v0==NULL) || (v1==NULL))
1441*53ee8cc1Swenshuai.xi {
1442*53ee8cc1Swenshuai.xi return GFX_FAIL;
1443*53ee8cc1Swenshuai.xi }
1444*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1447*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetClip.V0.x =v0->x;
1448*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetClip.V0.y =v0->y;
1449*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetClip.V1.x =v1->x;
1450*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetClip.V1.y =v1->y;
1451*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_CLIP_INFO;
1452*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1453*53ee8cc1Swenshuai.xi
1454*53ee8cc1Swenshuai.xi return eRet;
1455*53ee8cc1Swenshuai.xi
1456*53ee8cc1Swenshuai.xi }
1457*53ee8cc1Swenshuai.xi
1458*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1459*53ee8cc1Swenshuai.xi /// Get GFX clipping window
1460*53ee8cc1Swenshuai.xi /// @param v0 \b IN: left-top position
1461*53ee8cc1Swenshuai.xi /// @param v1 \b IN: right-down position
1462*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1463*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1464*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_GetClip(GFX_Point * v0,GFX_Point * v1)1465*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetClip(GFX_Point* v0, GFX_Point* v1)
1466*53ee8cc1Swenshuai.xi {
1467*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1468*53ee8cc1Swenshuai.xi
1469*53ee8cc1Swenshuai.xi if(v0 ==NULL || v1==NULL)
1470*53ee8cc1Swenshuai.xi {
1471*53ee8cc1Swenshuai.xi return GFX_FAIL;
1472*53ee8cc1Swenshuai.xi }
1473*53ee8cc1Swenshuai.xi
1474*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1475*53ee8cc1Swenshuai.xi
1476*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1477*53ee8cc1Swenshuai.xi v0->x = GFXFireInfo.GFXSetClip.V0.x;
1478*53ee8cc1Swenshuai.xi v0->y = GFXFireInfo.GFXSetClip.V0.y;
1479*53ee8cc1Swenshuai.xi v1->x = GFXFireInfo.GFXSetClip.V1.x;
1480*53ee8cc1Swenshuai.xi v1->y = GFXFireInfo.GFXSetClip.V1.y;
1481*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1482*53ee8cc1Swenshuai.xi
1483*53ee8cc1Swenshuai.xi return eRet;
1484*53ee8cc1Swenshuai.xi }
1485*53ee8cc1Swenshuai.xi
1486*53ee8cc1Swenshuai.xi
1487*53ee8cc1Swenshuai.xi
1488*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1489*53ee8cc1Swenshuai.xi /// Set GFX alpha source
1490*53ee8cc1Swenshuai.xi /// @param eMode \b IN: alpha source come from , this indicate alpha channel output source
1491*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1492*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1493*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetAlphaSrcFrom(GFX_AlphaSrcFrom eMode)1494*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlphaSrcFrom(GFX_AlphaSrcFrom eMode)
1495*53ee8cc1Swenshuai.xi {
1496*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1497*53ee8cc1Swenshuai.xi
1498*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1499*53ee8cc1Swenshuai.xi
1500*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1501*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.eDb_abl = eMode;
1502*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ABL_INFO;
1503*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1504*53ee8cc1Swenshuai.xi
1505*53ee8cc1Swenshuai.xi return eRet;
1506*53ee8cc1Swenshuai.xi }
1507*53ee8cc1Swenshuai.xi
1508*53ee8cc1Swenshuai.xi
1509*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1510*53ee8cc1Swenshuai.xi /// Set GFX alpha compare OP
1511*53ee8cc1Swenshuai.xi /// @param enable \b IN: true: enable alpha compare, false: disable.
1512*53ee8cc1Swenshuai.xi /// @param eMode \b IN: alpha source come from MIN/MAX compare between source/dst,
1513*53ee8cc1Swenshuai.xi /// this indicate alpha channel output source
1514*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1515*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1516*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetAlphaCmp(MS_BOOL enable,GFX_ACmpOp eMode)1517*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlphaCmp(MS_BOOL enable, GFX_ACmpOp eMode)
1518*53ee8cc1Swenshuai.xi {
1519*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1520*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1521*53ee8cc1Swenshuai.xi
1522*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1523*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetAlphaCmp.enable = enable;
1524*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetAlphaCmp.eMode = eMode;
1525*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ALPHA_CMP_INFO;
1526*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1527*53ee8cc1Swenshuai.xi
1528*53ee8cc1Swenshuai.xi return eRet;
1529*53ee8cc1Swenshuai.xi
1530*53ee8cc1Swenshuai.xi }
1531*53ee8cc1Swenshuai.xi #endif
1532*53ee8cc1Swenshuai.xi
1533*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1534*53ee8cc1Swenshuai.xi /// Begin GFX Engine drawing, this function should be called before all PE drawing function,
1535*53ee8cc1Swenshuai.xi /// and it will lock PE engine resource, reset all PE register and static variable.
1536*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1537*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1538*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_BeginDraw(void)1539*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BeginDraw(void)
1540*53ee8cc1Swenshuai.xi {
1541*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
1542*53ee8cc1Swenshuai.xi MS_U32 value = 0;
1543*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
1544*53ee8cc1Swenshuai.xi
1545*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_BEGINE_DRAW;
1546*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&value;
1547*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_MISC_ARGS);
1548*53ee8cc1Swenshuai.xi
1549*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
1550*53ee8cc1Swenshuai.xi {
1551*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1552*53ee8cc1Swenshuai.xi }
1553*53ee8cc1Swenshuai.xi return (GFX_Result) GFX_SUCCESS;
1554*53ee8cc1Swenshuai.xi }
1555*53ee8cc1Swenshuai.xi
1556*53ee8cc1Swenshuai.xi
1557*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1558*53ee8cc1Swenshuai.xi /// End GFX engine drawing (pair with MApi_GFX_BeginDraw), this function should be called after
1559*53ee8cc1Swenshuai.xi /// all PE drawing function. And it will release PE engine resource.
1560*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1561*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1562*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_EndDraw(void)1563*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EndDraw(void)
1564*53ee8cc1Swenshuai.xi {
1565*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
1566*53ee8cc1Swenshuai.xi MS_U32 value = 0;
1567*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
1568*53ee8cc1Swenshuai.xi
1569*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_END_DRAW;
1570*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&value;
1571*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_MISC_ARGS);
1572*53ee8cc1Swenshuai.xi
1573*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
1574*53ee8cc1Swenshuai.xi {
1575*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1576*53ee8cc1Swenshuai.xi }
1577*53ee8cc1Swenshuai.xi
1578*53ee8cc1Swenshuai.xi return (GFX_Result) GFX_SUCCESS;
1579*53ee8cc1Swenshuai.xi }
1580*53ee8cc1Swenshuai.xi
1581*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
1582*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1583*53ee8cc1Swenshuai.xi /// Reset GFX line pattern
1584*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1585*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1586*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_Line_Pattern_Reset(void)1587*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_Line_Pattern_Reset(void)
1588*53ee8cc1Swenshuai.xi {
1589*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
1590*53ee8cc1Swenshuai.xi MS_U32 value = 0;
1591*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
1592*53ee8cc1Swenshuai.xi
1593*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_LINE_PATTERN_RESET;
1594*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&value;
1595*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_MISC_ARGS);
1596*53ee8cc1Swenshuai.xi
1597*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
1598*53ee8cc1Swenshuai.xi {
1599*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1600*53ee8cc1Swenshuai.xi }
1601*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1602*53ee8cc1Swenshuai.xi }
1603*53ee8cc1Swenshuai.xi
1604*53ee8cc1Swenshuai.xi
1605*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1606*53ee8cc1Swenshuai.xi /// Set GFX line pattern
1607*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1608*53ee8cc1Swenshuai.xi /// @param linePattern \b IN: p0-0x3F one bit represent draw(1) or not draw(0)
1609*53ee8cc1Swenshuai.xi /// @param repeatFactor \b IN: 0 : repeat once, 1 : repeat twice, 2: repeat 3, 3: repeat 4
1610*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1611*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1612*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_Set_Line_Pattern(MS_BOOL enable,MS_U8 linePattern,MS_U8 repeatFactor)1613*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_Set_Line_Pattern(MS_BOOL enable, MS_U8 linePattern, MS_U8 repeatFactor)
1614*53ee8cc1Swenshuai.xi {
1615*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
1616*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
1617*53ee8cc1Swenshuai.xi
1618*53ee8cc1Swenshuai.xi GFX_SetLinePattern Info;
1619*53ee8cc1Swenshuai.xi memset(&Info, 0, sizeof(GFX_SetLinePattern));
1620*53ee8cc1Swenshuai.xi
1621*53ee8cc1Swenshuai.xi Info.enable = enable;
1622*53ee8cc1Swenshuai.xi Info.linePattern = linePattern;
1623*53ee8cc1Swenshuai.xi Info.repeatFactor = repeatFactor;
1624*53ee8cc1Swenshuai.xi
1625*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_LINE_PATTERN;
1626*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&Info;
1627*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_SetLinePattern);
1628*53ee8cc1Swenshuai.xi
1629*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
1630*53ee8cc1Swenshuai.xi {
1631*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1632*53ee8cc1Swenshuai.xi }
1633*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1634*53ee8cc1Swenshuai.xi }
1635*53ee8cc1Swenshuai.xi
1636*53ee8cc1Swenshuai.xi
1637*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1638*53ee8cc1Swenshuai.xi /// Set GFX italic
1639*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1640*53ee8cc1Swenshuai.xi /// @param ini_line \b IN: initial line : default is 0, indicate which line start to get italic effect
1641*53ee8cc1Swenshuai.xi /// @param ini_dis \b IN: initial distance : default is 0, indicate which pixel start to get italic effect
1642*53ee8cc1Swenshuai.xi /// @param delta \b IN: italic delta 0-0x1f
1643*53ee8cc1Swenshuai.xi /// - D[4]: 0/1 left/right italic
1644*53ee8cc1Swenshuai.xi /// - D[3]-D[0] : delta value of italic
1645*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1646*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1647*53ee8cc1Swenshuai.xi /// @note
1648*53ee8cc1Swenshuai.xi /// The italic process can't perform with rotate process or mirror process.
1649*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetItalic(MS_BOOL enable,MS_U8 ini_line,MS_U8 ini_dis,MS_U8 delta)1650*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetItalic(MS_BOOL enable,MS_U8 ini_line, MS_U8 ini_dis, MS_U8 delta)
1651*53ee8cc1Swenshuai.xi {
1652*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1653*53ee8cc1Swenshuai.xi
1654*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1655*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
1656*53ee8cc1Swenshuai.xi GFX_Set_Italic GFXSetItalic;
1657*53ee8cc1Swenshuai.xi
1658*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
1659*53ee8cc1Swenshuai.xi memset(&GFXSetItalic, 0 ,sizeof(GFX_Set_Italic));
1660*53ee8cc1Swenshuai.xi
1661*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_ITALIC;
1662*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&GFXSetItalic;
1663*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(GFX_Set_Italic);
1664*53ee8cc1Swenshuai.xi
1665*53ee8cc1Swenshuai.xi GFXSetItalic.bEnable =enable;
1666*53ee8cc1Swenshuai.xi GFXSetItalic.u8Ini_line =ini_line;
1667*53ee8cc1Swenshuai.xi GFXSetItalic.u8Ini_dis =ini_dis;
1668*53ee8cc1Swenshuai.xi GFXSetItalic.u8Delta =delta;
1669*53ee8cc1Swenshuai.xi
1670*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
1671*53ee8cc1Swenshuai.xi {
1672*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
1673*53ee8cc1Swenshuai.xi return GFX_FAIL;
1674*53ee8cc1Swenshuai.xi }
1675*53ee8cc1Swenshuai.xi
1676*53ee8cc1Swenshuai.xi return eRet;
1677*53ee8cc1Swenshuai.xi }
1678*53ee8cc1Swenshuai.xi
1679*53ee8cc1Swenshuai.xi
1680*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1681*53ee8cc1Swenshuai.xi /// Set GFX rotate
1682*53ee8cc1Swenshuai.xi /// @param angle \b IN: rotate angle
1683*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1684*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1685*53ee8cc1Swenshuai.xi /// @note
1686*53ee8cc1Swenshuai.xi /// The rotate process can't perform with italic process.
1687*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetRotate(GFX_RotateAngle angle)1688*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetRotate(GFX_RotateAngle angle)
1689*53ee8cc1Swenshuai.xi {
1690*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1691*53ee8cc1Swenshuai.xi
1692*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1693*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetAngle = angle;
1694*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ROTATE_INFO;
1695*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1696*53ee8cc1Swenshuai.xi
1697*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1698*53ee8cc1Swenshuai.xi }
1699*53ee8cc1Swenshuai.xi
1700*53ee8cc1Swenshuai.xi
1701*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1702*53ee8cc1Swenshuai.xi // Description:
1703*53ee8cc1Swenshuai.xi // Arguments: eMode : ABL_FROM_CONST, ABL_FROM_ASRC, ABL_FROM_ADST
1704*53ee8cc1Swenshuai.xi // blendcoef : COEF_ONE, COEF_CONST, COEF_ASRC, COEF_ADST
1705*53ee8cc1Swenshuai.xi // COEF_ZERO, COEF_1_CONST, COEF_1_ASRC, COEF_1_ADST
1706*53ee8cc1Swenshuai.xi // blendfactor : value : [0,0xff]
1707*53ee8cc1Swenshuai.xi // Return: NONE
1708*53ee8cc1Swenshuai.xi //
1709*53ee8cc1Swenshuai.xi // Notes: if any
1710*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1711*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1712*53ee8cc1Swenshuai.xi /// Set PE alpha blending. Dst = A * Src + (1 - A) Dst
1713*53ee8cc1Swenshuai.xi /// @param blendcoef \b IN: alpha source from
1714*53ee8cc1Swenshuai.xi /// @param u8ConstantAlpha \b IN: Contant alpha when blendcoef is equal to COEF_CONST
1715*53ee8cc1Swenshuai.xi /// or COEF_1_CONST.
1716*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1717*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1718*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetAlphaBlending(GFX_BlendCoef blendcoef,MS_U8 u8ConstantAlpha)1719*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlphaBlending(GFX_BlendCoef blendcoef, MS_U8 u8ConstantAlpha)
1720*53ee8cc1Swenshuai.xi {
1721*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1722*53ee8cc1Swenshuai.xi
1723*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1724*53ee8cc1Swenshuai.xi
1725*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1726*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.eABLCoef = blendcoef;
1727*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.u8Alpha_Const = u8ConstantAlpha;
1728*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NOS
1729*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDFB.sRGBColor.a = u8ConstantAlpha;
1730*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DFB_INFO;
1731*53ee8cc1Swenshuai.xi #endif
1732*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ABL_INFO;
1733*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1734*53ee8cc1Swenshuai.xi
1735*53ee8cc1Swenshuai.xi return eRet;
1736*53ee8cc1Swenshuai.xi }
1737*53ee8cc1Swenshuai.xi
1738*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1739*53ee8cc1Swenshuai.xi /// Enable GFX alpha blending
1740*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1741*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1742*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1743*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_EnableAlphaBlending(MS_BOOL enable)1744*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EnableAlphaBlending(MS_BOOL enable)
1745*53ee8cc1Swenshuai.xi {
1746*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1747*53ee8cc1Swenshuai.xi
1748*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1749*53ee8cc1Swenshuai.xi
1750*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1751*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.bEnable = enable;
1752*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ABL_INFO;
1753*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1754*53ee8cc1Swenshuai.xi
1755*53ee8cc1Swenshuai.xi return eRet;
1756*53ee8cc1Swenshuai.xi
1757*53ee8cc1Swenshuai.xi }
1758*53ee8cc1Swenshuai.xi
1759*53ee8cc1Swenshuai.xi
1760*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1761*53ee8cc1Swenshuai.xi /// Query GFX supported DFB blending functions/flags.
1762*53ee8cc1Swenshuai.xi /// @param pU16SupportedBldFlags \b OUT: DFB Blending Functions/Flags supported by GFX.
1763*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1764*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1765*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_QueryDFBBldCaps(MS_U16 * pU16SupportedBldFlags)1766*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_QueryDFBBldCaps(MS_U16 *pU16SupportedBldFlags)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi GFX_Result gfxResult=GFX_FAIL;
1769*53ee8cc1Swenshuai.xi gfxResult = MApi_GFX_GetGECaps(E_GFX_CAP_DFB_BLENDING,(MS_U32*)(void*)pU16SupportedBldFlags,sizeof(MS_U16));
1770*53ee8cc1Swenshuai.xi return gfxResult;
1771*53ee8cc1Swenshuai.xi }
1772*53ee8cc1Swenshuai.xi
1773*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1774*53ee8cc1Swenshuai.xi /// Enable GFX DFB blending
1775*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1776*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1777*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1778*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_EnableDFBBlending(MS_BOOL enable)1779*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EnableDFBBlending(MS_BOOL enable)
1780*53ee8cc1Swenshuai.xi {
1781*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1782*53ee8cc1Swenshuai.xi
1783*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1784*53ee8cc1Swenshuai.xi
1785*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1786*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDFB.bEnable =enable;
1787*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DFB_INFO;
1788*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1789*53ee8cc1Swenshuai.xi return eRet;
1790*53ee8cc1Swenshuai.xi }
1791*53ee8cc1Swenshuai.xi
1792*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1793*53ee8cc1Swenshuai.xi /// Set GE DFB blending Flags.
1794*53ee8cc1Swenshuai.xi /// @param u16DFBBldFlag \b IN: DFB Blending Flags. The Flags will be
1795*53ee8cc1Swenshuai.xi /// The combination of Flags
1796*53ee8cc1Swenshuai.xi /// [GFX_DFB_BLD_FLAG_COLORALPHA, GFX_DFB_BLD_FLAG_ALPHACHANNEL,
1797*53ee8cc1Swenshuai.xi /// GFX_DFB_BLD_FLAG_COLORIZE, GFX_DFB_BLD_FLAG_SRCPREMUL,
1798*53ee8cc1Swenshuai.xi /// GFX_DFB_BLD_FLAG_SRCPREMULCOL, GFX_DFB_BLD_FLAG_DSTPREMUL,
1799*53ee8cc1Swenshuai.xi /// GFX_DFB_BLD_FLAG_XOR, GFX_DFB_BLD_FLAG_DEMULTIPLY,
1800*53ee8cc1Swenshuai.xi /// GFX_DFB_BLD_FLAG_SRCALPHAMASK, GFX_DFB_BLD_FLAG_SRCCOLORMASK]
1801*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1802*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1803*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDFBBldFlags(MS_U16 u16DFBBldFlags)1804*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldFlags(MS_U16 u16DFBBldFlags)
1805*53ee8cc1Swenshuai.xi {
1806*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1807*53ee8cc1Swenshuai.xi
1808*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1809*53ee8cc1Swenshuai.xi
1810*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1811*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDFB.u16DFBBldFlags =u16DFBBldFlags;
1812*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DFB_INFO;
1813*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1814*53ee8cc1Swenshuai.xi
1815*53ee8cc1Swenshuai.xi return eRet;
1816*53ee8cc1Swenshuai.xi }
1817*53ee8cc1Swenshuai.xi
1818*53ee8cc1Swenshuai.xi
1819*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1820*53ee8cc1Swenshuai.xi /// Set GFX DFB blending Functions/Operations.
1821*53ee8cc1Swenshuai.xi /// @param gfxSrcBldOP \b IN: source blending op
1822*53ee8cc1Swenshuai.xi /// @param gfxDstBldOP \b IN: dst blending op
1823*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1824*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1825*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDFBBldOP(GFX_DFBBldOP gfxSrcBldOP,GFX_DFBBldOP gfxDstBldOP)1826*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldOP(GFX_DFBBldOP gfxSrcBldOP, GFX_DFBBldOP gfxDstBldOP)
1827*53ee8cc1Swenshuai.xi {
1828*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1829*53ee8cc1Swenshuai.xi
1830*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1831*53ee8cc1Swenshuai.xi
1832*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1833*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDFB.eSrcBldOP =gfxSrcBldOP;
1834*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDFB.eDstBldOP =gfxDstBldOP;
1835*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DFB_INFO;
1836*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1837*53ee8cc1Swenshuai.xi
1838*53ee8cc1Swenshuai.xi return eRet;
1839*53ee8cc1Swenshuai.xi }
1840*53ee8cc1Swenshuai.xi
1841*53ee8cc1Swenshuai.xi
1842*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1843*53ee8cc1Swenshuai.xi /// Set GFX DFB blending const color.
1844*53ee8cc1Swenshuai.xi /// @param u32ConstColor \b IN: DFB Blending constant color
1845*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1846*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1847*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDFBBldConstColor(GFX_RgbColor gfxRgbColor)1848*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldConstColor(GFX_RgbColor gfxRgbColor)
1849*53ee8cc1Swenshuai.xi {
1850*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1851*53ee8cc1Swenshuai.xi
1852*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1853*53ee8cc1Swenshuai.xi
1854*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1855*53ee8cc1Swenshuai.xi memcpy(&(GFXFireInfo.GFXSetDFB.sRGBColor), &gfxRgbColor, sizeof(GFX_RgbColor));
1856*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NOS
1857*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.u8Alpha_Const = gfxRgbColor.a;
1858*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ABL_INFO;
1859*53ee8cc1Swenshuai.xi #endif
1860*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DFB_INFO;
1861*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1862*53ee8cc1Swenshuai.xi
1863*53ee8cc1Swenshuai.xi return eRet;
1864*53ee8cc1Swenshuai.xi
1865*53ee8cc1Swenshuai.xi }
1866*53ee8cc1Swenshuai.xi
1867*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1868*53ee8cc1Swenshuai.xi /// Set GFX DFB blending source color mask.
1869*53ee8cc1Swenshuai.xi /// @param u32ConstColor \b IN: DFB Blending constant color
1870*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1871*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1872*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDFBBldSrcColorMask(GFX_RgbColor gfxRgbColor)1873*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldSrcColorMask(GFX_RgbColor gfxRgbColor)
1874*53ee8cc1Swenshuai.xi {
1875*53ee8cc1Swenshuai.xi #if 0
1876*53ee8cc1Swenshuai.xi GE_RgbColor geRgbColor;
1877*53ee8cc1Swenshuai.xi
1878*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1879*53ee8cc1Swenshuai.xi
1880*53ee8cc1Swenshuai.xi geRgbColor.a = gfxRgbColor.a;
1881*53ee8cc1Swenshuai.xi geRgbColor.r = gfxRgbColor.r;
1882*53ee8cc1Swenshuai.xi geRgbColor.g = gfxRgbColor.g;
1883*53ee8cc1Swenshuai.xi geRgbColor.b = gfxRgbColor.b;
1884*53ee8cc1Swenshuai.xi
1885*53ee8cc1Swenshuai.xi return (GFX_Result) MDrv_GE_SetDFBBldSrcColorMask(g_apiGFXLocal.g_pGEContext, geRgbColor);
1886*53ee8cc1Swenshuai.xi #endif
1887*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1888*53ee8cc1Swenshuai.xi }
1889*53ee8cc1Swenshuai.xi
1890*53ee8cc1Swenshuai.xi
1891*53ee8cc1Swenshuai.xi /******************************************************************************/
1892*53ee8cc1Swenshuai.xi ///Disable/Enable and set Alpha Blending parameters.
1893*53ee8cc1Swenshuai.xi ///
1894*53ee8cc1Swenshuai.xi ///Alpha blending function will mix the source color and destination color.
1895*53ee8cc1Swenshuai.xi ///The alpha constant are applied to determine the ratio of source color and destination color.
1896*53ee8cc1Swenshuai.xi ///The operation mode will depends on the source/destination coefficient.
1897*53ee8cc1Swenshuai.xi ///
1898*53ee8cc1Swenshuai.xi ///@param enable \b IN :
1899*53ee8cc1Swenshuai.xi ///- 0: Disable
1900*53ee8cc1Swenshuai.xi ///- 1: Enable
1901*53ee8cc1Swenshuai.xi ///@param coef \b IN Source coefficient for blending. (source blending mode)
1902*53ee8cc1Swenshuai.xi ///@param db_abl \b IN Source of Destination Alpha.
1903*53ee8cc1Swenshuai.xi ///@param abl_const \b IN Alpha Blending constant
1904*53ee8cc1Swenshuai.xi ///@par Function Actions:
1905*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetAlpha(MS_BOOL enable,GFX_BlendCoef coef,GFX_AlphaSrcFrom db_abl,MS_U8 abl_const)1906*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlpha(MS_BOOL enable, GFX_BlendCoef coef, GFX_AlphaSrcFrom db_abl, MS_U8 abl_const)
1907*53ee8cc1Swenshuai.xi {
1908*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
1909*53ee8cc1Swenshuai.xi
1910*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1911*53ee8cc1Swenshuai.xi
1912*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1913*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.bEnable = enable;
1914*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.eABLCoef = coef;
1915*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.eDb_abl = db_abl;
1916*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetABL.u8Alpha_Const = abl_const;
1917*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NOS
1918*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDFB.sRGBColor.a = abl_const;
1919*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DFB_INFO;
1920*53ee8cc1Swenshuai.xi #endif
1921*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_ABL_INFO;
1922*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1923*53ee8cc1Swenshuai.xi
1924*53ee8cc1Swenshuai.xi return eRet;
1925*53ee8cc1Swenshuai.xi }
1926*53ee8cc1Swenshuai.xi
1927*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1928*53ee8cc1Swenshuai.xi /// Enable GFX mirror
1929*53ee8cc1Swenshuai.xi /// @param isMirrorX \b IN: true/false
1930*53ee8cc1Swenshuai.xi /// @param isMirrorY \b IN: true/false
1931*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1932*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1933*53ee8cc1Swenshuai.xi /// @note
1934*53ee8cc1Swenshuai.xi /// The mirror process can't perform on the source format is GFX_FMT_I1, GFX_FMT_I2 or GFX_FMT_I4.
1935*53ee8cc1Swenshuai.xi /// The mirror process can't perform with italic process.
1936*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetMirror(MS_BOOL isMirrorX,MS_BOOL isMirrorY)1937*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetMirror(MS_BOOL isMirrorX, MS_BOOL isMirrorY)
1938*53ee8cc1Swenshuai.xi {
1939*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1940*53ee8cc1Swenshuai.xi
1941*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1942*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetMirror.bMirrorX =isMirrorX;
1943*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetMirror.bMirrorY =isMirrorY;
1944*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_SRC_MIRROR_INFO;
1945*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1946*53ee8cc1Swenshuai.xi
1947*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1948*53ee8cc1Swenshuai.xi }
1949*53ee8cc1Swenshuai.xi
1950*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1951*53ee8cc1Swenshuai.xi /// Enable GFX destination mirror
1952*53ee8cc1Swenshuai.xi /// @param isMirrorX \b IN: true/false
1953*53ee8cc1Swenshuai.xi /// @param isMirrorY \b IN: true/false
1954*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1955*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1956*53ee8cc1Swenshuai.xi /// @note
1957*53ee8cc1Swenshuai.xi /// The mirror process can't perform on the source format is GFX_FMT_I1, GFX_FMT_I2 or GFX_FMT_I4.
1958*53ee8cc1Swenshuai.xi /// The mirror process can't perform with italic process.
1959*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDstMirror(MS_BOOL isMirrorX,MS_BOOL isMirrorY)1960*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDstMirror(MS_BOOL isMirrorX, MS_BOOL isMirrorY)
1961*53ee8cc1Swenshuai.xi {
1962*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1963*53ee8cc1Swenshuai.xi
1964*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1965*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstMirror.bMirrorX =isMirrorX;
1966*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetDstMirror.bMirrorY =isMirrorY;
1967*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DST_MIRROR_INFO;
1968*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1969*53ee8cc1Swenshuai.xi
1970*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1971*53ee8cc1Swenshuai.xi }
1972*53ee8cc1Swenshuai.xi
1973*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1974*53ee8cc1Swenshuai.xi /// Enable GFX NearestMode
1975*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1976*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1977*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1978*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetNearestMode(MS_BOOL enable)1979*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetNearestMode(MS_BOOL enable)
1980*53ee8cc1Swenshuai.xi {
1981*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
1982*53ee8cc1Swenshuai.xi
1983*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
1984*53ee8cc1Swenshuai.xi GFXFireInfo.bNearest = enable;
1985*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_NEAREST_INFO;
1986*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
1987*53ee8cc1Swenshuai.xi
1988*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
1989*53ee8cc1Swenshuai.xi }
1990*53ee8cc1Swenshuai.xi
1991*53ee8cc1Swenshuai.xi
1992*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1993*53ee8cc1Swenshuai.xi /// Configure GFX Patch mode
1994*53ee8cc1Swenshuai.xi /// @param enable \b IN: true/false
1995*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1996*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1997*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetPatchMode(MS_BOOL enable)1998*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetPatchMode(MS_BOOL enable)
1999*53ee8cc1Swenshuai.xi {
2000*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
2001*53ee8cc1Swenshuai.xi
2002*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
2003*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_PATCH_MODE;
2004*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&enable;
2005*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(MS_BOOL);
2006*53ee8cc1Swenshuai.xi
2007*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
2008*53ee8cc1Swenshuai.xi {
2009*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2010*53ee8cc1Swenshuai.xi }
2011*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
2012*53ee8cc1Swenshuai.xi }
2013*53ee8cc1Swenshuai.xi
2014*53ee8cc1Swenshuai.xi /******************************************************************************/
2015*53ee8cc1Swenshuai.xi ///Set GFX TLB
2016*53ee8cc1Swenshuai.xi /// @param TLBmode \b IN: TLB mode
2017*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2018*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2019*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetTLBMode(EN_GFX_TLB_Mode TLBmode)2020*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetTLBMode(EN_GFX_TLB_Mode TLBmode)
2021*53ee8cc1Swenshuai.xi {
2022*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2023*53ee8cc1Swenshuai.xi MS_U32 value = 0;
2024*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2025*53ee8cc1Swenshuai.xi
2026*53ee8cc1Swenshuai.xi GFX_TLB_ARGS GFXSetTLBConfig;
2027*53ee8cc1Swenshuai.xi
2028*53ee8cc1Swenshuai.xi memset(&GFXSetTLBConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2029*53ee8cc1Swenshuai.xi
2030*53ee8cc1Swenshuai.xi GFXSetTLBConfig.en_cmd =E_GFX_TLB_SET_MODE;
2031*53ee8cc1Swenshuai.xi GFXSetTLBConfig.psetting =(void*)&value;
2032*53ee8cc1Swenshuai.xi GFXSetTLBConfig.TLB_mode =TLBmode;
2033*53ee8cc1Swenshuai.xi GFXSetTLBConfig.u32Size =sizeof(GFX_TLB_ARGS);
2034*53ee8cc1Swenshuai.xi
2035*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_TLB, (void*)&GFXSetTLBConfig) != UTOPIA_STATUS_SUCCESS)
2036*53ee8cc1Swenshuai.xi {
2037*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2038*53ee8cc1Swenshuai.xi return GFX_FAIL;
2039*53ee8cc1Swenshuai.xi }
2040*53ee8cc1Swenshuai.xi
2041*53ee8cc1Swenshuai.xi return eRet;
2042*53ee8cc1Swenshuai.xi }
2043*53ee8cc1Swenshuai.xi
2044*53ee8cc1Swenshuai.xi /******************************************************************************/
2045*53ee8cc1Swenshuai.xi ///Set GFX TLB
2046*53ee8cc1Swenshuai.xi ///@param u32TLBSrcMiuAddr \b IN: TLB Source base address
2047*53ee8cc1Swenshuai.xi ///@param u32TLBDstMiuAddr \b IN: TLB Destination base address
2048*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2049*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2050*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetTLBBaseADDR(MS_PHY phyTLBSrcMiuAddr,MS_PHY phyTLBDstMiuAddr)2051*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetTLBBaseADDR(MS_PHY phyTLBSrcMiuAddr,MS_PHY phyTLBDstMiuAddr)
2052*53ee8cc1Swenshuai.xi {
2053*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2054*53ee8cc1Swenshuai.xi
2055*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2056*53ee8cc1Swenshuai.xi
2057*53ee8cc1Swenshuai.xi GFX_TLB_ARGS GFXTLBARGS;
2058*53ee8cc1Swenshuai.xi GFX_SetTLB_Addr GFXSetTLBAddr;
2059*53ee8cc1Swenshuai.xi
2060*53ee8cc1Swenshuai.xi memset(&GFXTLBARGS, 0 ,sizeof(GFX_TLB_ARGS));
2061*53ee8cc1Swenshuai.xi memset(&GFXSetTLBAddr, 0 ,sizeof(GFX_SetTLB_Addr));
2062*53ee8cc1Swenshuai.xi
2063*53ee8cc1Swenshuai.xi GFXTLBARGS.en_cmd =E_GFX_TLB_SET_ADDR;
2064*53ee8cc1Swenshuai.xi GFXTLBARGS.psetting =(void*)&GFXSetTLBAddr;
2065*53ee8cc1Swenshuai.xi GFXTLBARGS.u32Size =sizeof(GFX_SetTLB_Addr);
2066*53ee8cc1Swenshuai.xi
2067*53ee8cc1Swenshuai.xi GFXSetTLBAddr.tlb_src_addr =phyTLBSrcMiuAddr;
2068*53ee8cc1Swenshuai.xi GFXSetTLBAddr.tlb_dst_addr =phyTLBDstMiuAddr;
2069*53ee8cc1Swenshuai.xi
2070*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_TLB, (void*)&GFXTLBARGS) != UTOPIA_STATUS_SUCCESS)
2071*53ee8cc1Swenshuai.xi {
2072*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2073*53ee8cc1Swenshuai.xi return GFX_FAIL;
2074*53ee8cc1Swenshuai.xi }
2075*53ee8cc1Swenshuai.xi
2076*53ee8cc1Swenshuai.xi return eRet;
2077*53ee8cc1Swenshuai.xi }
2078*53ee8cc1Swenshuai.xi
2079*53ee8cc1Swenshuai.xi /******************************************************************************/
2080*53ee8cc1Swenshuai.xi ///Set GFX TLB
2081*53ee8cc1Swenshuai.xi ///@param enable \b IN: TLB Flush Enable
2082*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2083*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2084*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetTLBFlushTable(MS_BOOL enable)2085*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetTLBFlushTable(MS_BOOL enable)
2086*53ee8cc1Swenshuai.xi {
2087*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2088*53ee8cc1Swenshuai.xi
2089*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2090*53ee8cc1Swenshuai.xi
2091*53ee8cc1Swenshuai.xi GFX_TLB_ARGS GFXTLBARGS;
2092*53ee8cc1Swenshuai.xi
2093*53ee8cc1Swenshuai.xi memset(&GFXTLBARGS, 0 ,sizeof(GFX_TLB_ARGS));
2094*53ee8cc1Swenshuai.xi
2095*53ee8cc1Swenshuai.xi GFXTLBARGS.en_cmd =E_GFX_TLB_FLUSH_TABLE;
2096*53ee8cc1Swenshuai.xi GFXTLBARGS.psetting =(void*)&enable;
2097*53ee8cc1Swenshuai.xi GFXTLBARGS.u32Size =sizeof(MS_BOOL);
2098*53ee8cc1Swenshuai.xi
2099*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_TLB, (void*)&GFXTLBARGS) != UTOPIA_STATUS_SUCCESS)
2100*53ee8cc1Swenshuai.xi {
2101*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2102*53ee8cc1Swenshuai.xi return GFX_FAIL;
2103*53ee8cc1Swenshuai.xi }
2104*53ee8cc1Swenshuai.xi
2105*53ee8cc1Swenshuai.xi return eRet;
2106*53ee8cc1Swenshuai.xi }
2107*53ee8cc1Swenshuai.xi
2108*53ee8cc1Swenshuai.xi /******************************************************************************/
2109*53ee8cc1Swenshuai.xi ///Set GFX TLB
2110*53ee8cc1Swenshuai.xi ///@param tag \b IN: TLB TAG
2111*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2112*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2113*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetTLBTag(MS_U16 tag)2114*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetTLBTag(MS_U16 tag)
2115*53ee8cc1Swenshuai.xi {
2116*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2117*53ee8cc1Swenshuai.xi
2118*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2119*53ee8cc1Swenshuai.xi
2120*53ee8cc1Swenshuai.xi GFX_TLB_ARGS GFXTLBARGS;
2121*53ee8cc1Swenshuai.xi
2122*53ee8cc1Swenshuai.xi memset(&GFXTLBARGS, 0 ,sizeof(GFX_TLB_ARGS));
2123*53ee8cc1Swenshuai.xi
2124*53ee8cc1Swenshuai.xi GFXTLBARGS.en_cmd =E_GFX_TLB_TAG;
2125*53ee8cc1Swenshuai.xi GFXTLBARGS.psetting =(void*)&tag;
2126*53ee8cc1Swenshuai.xi GFXTLBARGS.u32Size =sizeof(MS_U16);
2127*53ee8cc1Swenshuai.xi
2128*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_TLB, (void*)&GFXTLBARGS) != UTOPIA_STATUS_SUCCESS)
2129*53ee8cc1Swenshuai.xi {
2130*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2131*53ee8cc1Swenshuai.xi return GFX_FAIL;
2132*53ee8cc1Swenshuai.xi }
2133*53ee8cc1Swenshuai.xi
2134*53ee8cc1Swenshuai.xi return eRet;
2135*53ee8cc1Swenshuai.xi }
2136*53ee8cc1Swenshuai.xi
2137*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2138*53ee8cc1Swenshuai.xi /// Set GFX source buffer info
2139*53ee8cc1Swenshuai.xi /// @param bufInfo \b IN: buffer handle
2140*53ee8cc1Swenshuai.xi /// @param offsetofByte \b IN: start offset (should be 128 bit aligned)
2141*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2142*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2143*53ee8cc1Swenshuai.xi /// @return GFX_Result_NON_ALIGN_PITCH - The pitch is not 16 bytes alignment
2144*53ee8cc1Swenshuai.xi /// @return GFX_Result_NON_ALIGN_ADDRESS - The address is not 16 bytes alignment
2145*53ee8cc1Swenshuai.xi /// @note
2146*53ee8cc1Swenshuai.xi /// The buffer start address must be 128 bits alignment.
2147*53ee8cc1Swenshuai.xi /// In GFX_FMT_I1, GFX_FMT_I2 and GFX_FMT_I4 format, the pitch must be 8 bits alignment.
2148*53ee8cc1Swenshuai.xi /// In other format, the pitch must be 128 bits alignment.
2149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetSrcBufferInfo(PGFX_BufferInfo bufInfo,MS_U32 offsetofByte)2150*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetSrcBufferInfo(PGFX_BufferInfo bufInfo, MS_U32 offsetofByte)
2151*53ee8cc1Swenshuai.xi {
2152*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2153*53ee8cc1Swenshuai.xi
2154*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(bufInfo);
2155*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2156*53ee8cc1Swenshuai.xi
2157*53ee8cc1Swenshuai.xi //Utopia2 not support this function. Only stroed in wrapper.
2158*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2159*53ee8cc1Swenshuai.xi memcpy(&(GFXFireInfo.SrcbufInfo), bufInfo, sizeof(GFX_BufferInfo));
2160*53ee8cc1Swenshuai.xi GFXFireInfo.u32SrcOffsetofByte =offsetofByte;
2161*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_SRC_INFO;
2162*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2163*53ee8cc1Swenshuai.xi
2164*53ee8cc1Swenshuai.xi return eRet;
2165*53ee8cc1Swenshuai.xi }
2166*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2167*53ee8cc1Swenshuai.xi /// Set GFX destination buffer info
2168*53ee8cc1Swenshuai.xi /// @param bufInfo \b IN: buffer handle
2169*53ee8cc1Swenshuai.xi /// @param offsetofByte \b IN: start offset (should be 128 bit aligned)
2170*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2171*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2172*53ee8cc1Swenshuai.xi /// @return GFX_Result_NON_ALIGN_PITCH - The pitch is not 16 bytes alignment
2173*53ee8cc1Swenshuai.xi /// @return GFX_Result_NON_ALIGN_ADDRESS - The address is not 16 bytes alignment
2174*53ee8cc1Swenshuai.xi /// @note
2175*53ee8cc1Swenshuai.xi /// The buffer start address and pitch smust be 128 bits alignment.
2176*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDstBufferInfo(PGFX_BufferInfo bufInfo,MS_U32 offsetofByte)2177*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDstBufferInfo(PGFX_BufferInfo bufInfo, MS_U32 offsetofByte)
2178*53ee8cc1Swenshuai.xi {
2179*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2180*53ee8cc1Swenshuai.xi
2181*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(bufInfo);
2182*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2183*53ee8cc1Swenshuai.xi
2184*53ee8cc1Swenshuai.xi //Utopia2 not support this function. Only stroed in wrapper.
2185*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2186*53ee8cc1Swenshuai.xi memcpy(&(GFXFireInfo.DstbufInfo), bufInfo, sizeof(GFX_BufferInfo));
2187*53ee8cc1Swenshuai.xi GFXFireInfo.u32DstOffsetofByte =offsetofByte;
2188*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_DST_INFO;
2189*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2190*53ee8cc1Swenshuai.xi
2191*53ee8cc1Swenshuai.xi return eRet;
2192*53ee8cc1Swenshuai.xi }
2193*53ee8cc1Swenshuai.xi
2194*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2195*53ee8cc1Swenshuai.xi /// Get GFX SRC/DST buffer info
2196*53ee8cc1Swenshuai.xi /// @param srcbufInfo \b IN: Pointer of src buffer info.
2197*53ee8cc1Swenshuai.xi /// @param dstbufInfo \b IN: Pointer of dst buffer info.
2198*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2199*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2200*53ee8cc1Swenshuai.xi /// @note
2201*53ee8cc1Swenshuai.xi /// none
2202*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_GetBufferInfo(PGFX_BufferInfo srcbufInfo,PGFX_BufferInfo dstbufInfo)2203*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetBufferInfo(PGFX_BufferInfo srcbufInfo, PGFX_BufferInfo dstbufInfo)
2204*53ee8cc1Swenshuai.xi {
2205*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2206*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(srcbufInfo);
2207*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(dstbufInfo);
2208*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2209*53ee8cc1Swenshuai.xi
2210*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2211*53ee8cc1Swenshuai.xi memcpy(srcbufInfo, &(GFXFireInfo.SrcbufInfo), sizeof(GFX_BufferInfo));
2212*53ee8cc1Swenshuai.xi memcpy(dstbufInfo, &(GFXFireInfo.DstbufInfo), sizeof(GFX_BufferInfo));
2213*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2214*53ee8cc1Swenshuai.xi
2215*53ee8cc1Swenshuai.xi return eRet;
2216*53ee8cc1Swenshuai.xi
2217*53ee8cc1Swenshuai.xi }
2218*53ee8cc1Swenshuai.xi
2219*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2220*53ee8cc1Swenshuai.xi /// Set GFX Bit blt
2221*53ee8cc1Swenshuai.xi /// @param drawbuf \b IN: pointer to drawbuf info
2222*53ee8cc1Swenshuai.xi /// @param drawflag \b IN: draw flag \n
2223*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_DEFAULT \n
2224*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_SCALE \n
2225*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_DUPLICAPE \n
2226*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_TRAPEZOID \n
2227*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2228*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2229*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_BitBlt(GFX_DrawRect * drawbuf,MS_U32 drawflag)2230*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BitBlt(GFX_DrawRect *drawbuf,MS_U32 drawflag)
2231*53ee8cc1Swenshuai.xi {
2232*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2233*53ee8cc1Swenshuai.xi GFX_ScaleInfo ScaleInfo;
2234*53ee8cc1Swenshuai.xi
2235*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(drawbuf);
2236*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2237*53ee8cc1Swenshuai.xi
2238*53ee8cc1Swenshuai.xi GFX_BITBLT_ARGS GFXBitBlt;
2239*53ee8cc1Swenshuai.xi GFX_BitBltInfo GFXBitBltInfo;
2240*53ee8cc1Swenshuai.xi
2241*53ee8cc1Swenshuai.xi memset(&GFXBitBlt, 0 , sizeof(GFX_BITBLT_ARGS));
2242*53ee8cc1Swenshuai.xi memset(&GFXBitBltInfo, 0 , sizeof(GFX_BitBltInfo));
2243*53ee8cc1Swenshuai.xi memset(&ScaleInfo, 0 , sizeof(GFX_ScaleInfo));
2244*53ee8cc1Swenshuai.xi
2245*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2246*53ee8cc1Swenshuai.xi GFXBitBlt.pGFX_BitBlt =(void*)&GFXBitBltInfo;
2247*53ee8cc1Swenshuai.xi GFXBitBlt.u32Size =sizeof(GFX_BitBltInfo);
2248*53ee8cc1Swenshuai.xi GFXBitBltInfo.pFireInfo = &GFXFireInfo;
2249*53ee8cc1Swenshuai.xi GFXBitBltInfo.pDrawRect =drawbuf;
2250*53ee8cc1Swenshuai.xi GFXBitBltInfo.u32DrawFlag =drawflag;
2251*53ee8cc1Swenshuai.xi GFXBitBltInfo.pScaleInfo = &ScaleInfo;
2252*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_BITBLT, (void*)&GFXBitBlt) != UTOPIA_STATUS_SUCCESS)
2253*53ee8cc1Swenshuai.xi {
2254*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2255*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2256*53ee8cc1Swenshuai.xi }
2257*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
2258*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2259*53ee8cc1Swenshuai.xi
2260*53ee8cc1Swenshuai.xi return eRet;
2261*53ee8cc1Swenshuai.xi }
2262*53ee8cc1Swenshuai.xi
2263*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2264*53ee8cc1Swenshuai.xi /// Set GFX Bit blt with explicitly scale info.
2265*53ee8cc1Swenshuai.xi /// @param drawbuf \b IN: pointer to drawbuf info
2266*53ee8cc1Swenshuai.xi /// @param drawflag \b IN: draw flag \n
2267*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_DEFAULT \n
2268*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_SCALE \n
2269*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_DUPLICAPE \n
2270*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_TRAPEZOID \n
2271*53ee8cc1Swenshuai.xi /// @param ScaleInfo \b IN: pointer to GFX_ScaleInfo assigned by AP.
2272*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2273*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2274*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_BitBltEx(GFX_DrawRect * drawbuf,MS_U32 drawflag,GFX_ScaleInfo * ScaleInfo)2275*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BitBltEx(GFX_DrawRect * drawbuf, MS_U32 drawflag, GFX_ScaleInfo * ScaleInfo)
2276*53ee8cc1Swenshuai.xi {
2277*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2278*53ee8cc1Swenshuai.xi
2279*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(drawbuf);
2280*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(ScaleInfo);
2281*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2282*53ee8cc1Swenshuai.xi
2283*53ee8cc1Swenshuai.xi GFX_BITBLT_ARGS GFXBitBlt;
2284*53ee8cc1Swenshuai.xi GFX_BitBltInfo GFXBitBltInfo;
2285*53ee8cc1Swenshuai.xi
2286*53ee8cc1Swenshuai.xi memset(&GFXBitBlt, 0 , sizeof(GFX_BITBLT_ARGS));
2287*53ee8cc1Swenshuai.xi memset(&GFXBitBltInfo, 0 , sizeof(GFX_BitBltInfo));
2288*53ee8cc1Swenshuai.xi
2289*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2290*53ee8cc1Swenshuai.xi GFXBitBlt.pGFX_BitBlt =(void*)&GFXBitBltInfo;
2291*53ee8cc1Swenshuai.xi GFXBitBlt.u32Size =sizeof(GFX_BitBltInfo);
2292*53ee8cc1Swenshuai.xi GFXBitBltInfo.pFireInfo = &GFXFireInfo;
2293*53ee8cc1Swenshuai.xi GFXBitBltInfo.pDrawRect = drawbuf;
2294*53ee8cc1Swenshuai.xi GFXBitBltInfo.u32DrawFlag = drawflag;
2295*53ee8cc1Swenshuai.xi GFXBitBltInfo.pScaleInfo = ScaleInfo;
2296*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_BITBLT, (void*)&GFXBitBlt) != UTOPIA_STATUS_SUCCESS)
2297*53ee8cc1Swenshuai.xi {
2298*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2299*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2300*53ee8cc1Swenshuai.xi }
2301*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
2302*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2303*53ee8cc1Swenshuai.xi
2304*53ee8cc1Swenshuai.xi return eRet;
2305*53ee8cc1Swenshuai.xi }
2306*53ee8cc1Swenshuai.xi
2307*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2308*53ee8cc1Swenshuai.xi /// Set GFX destination buffer info in two source buffer mode
2309*53ee8cc1Swenshuai.xi /// Attention, when two source buffer mode enable, raw DstBuffer will be one of two source.
2310*53ee8cc1Swenshuai.xi /// @param dstbufInfo \b IN: pointer to destination frame buffer infomation.\n
2311*53ee8cc1Swenshuai.xi /// @param pdrawbuf \b IN: pointer to two source rects info
2312*53ee8cc1Swenshuai.xi /// @param drawflag \b IN: draw flag \n
2313*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_DEFAULT \n
2314*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_SCALE \n
2315*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_DUPLICAPE \n
2316*53ee8cc1Swenshuai.xi /// GFXDRAW_FLAG_TRAPEZOID \n
2317*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2318*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2319*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_BitbltByTwoSourceBuffer(PGFX_BufferInfo dstbufInfo,GFX_DrawTwoSourceRect * pdrawbuf,MS_U32 drawflag)2320*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BitbltByTwoSourceBuffer(PGFX_BufferInfo dstbufInfo, GFX_DrawTwoSourceRect *pdrawbuf, MS_U32 drawflag)
2321*53ee8cc1Swenshuai.xi {
2322*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2323*53ee8cc1Swenshuai.xi
2324*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(dstbufInfo);
2325*53ee8cc1Swenshuai.xi APIGFX_CHECK_NULL(pdrawbuf);
2326*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2327*53ee8cc1Swenshuai.xi
2328*53ee8cc1Swenshuai.xi GFX_TWOSRC_BITBLT_ARGS GFXTwoSrcBitBlt;
2329*53ee8cc1Swenshuai.xi GFX_TwoSrc_BitBltInfo GFXTwoSrcBitBltInfo;
2330*53ee8cc1Swenshuai.xi GFX_Src_BufferInfo GFXDstBufferInfo;
2331*53ee8cc1Swenshuai.xi
2332*53ee8cc1Swenshuai.xi memset(&GFXTwoSrcBitBlt, 0 , sizeof(GFX_TWOSRC_BITBLT_ARGS));
2333*53ee8cc1Swenshuai.xi memset(&GFXTwoSrcBitBltInfo, 0 , sizeof(GFX_TwoSrc_BitBltInfo));
2334*53ee8cc1Swenshuai.xi memset(&GFXDstBufferInfo, 0 , sizeof(GFX_Dst_BufferInfo));
2335*53ee8cc1Swenshuai.xi
2336*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2337*53ee8cc1Swenshuai.xi GFXTwoSrcBitBlt.pGFX_TwoSrc_BitBlt =&GFXTwoSrcBitBltInfo;
2338*53ee8cc1Swenshuai.xi GFXTwoSrcBitBlt.u32Size =sizeof(GFX_TwoSrc_BitBltInfo);
2339*53ee8cc1Swenshuai.xi GFXTwoSrcBitBltInfo.pDstbufInfo = &GFXDstBufferInfo;
2340*53ee8cc1Swenshuai.xi GFXTwoSrcBitBltInfo.pFireInfo = &GFXFireInfo;
2341*53ee8cc1Swenshuai.xi GFXTwoSrcBitBltInfo.pDstbufInfo->pBufInfo = dstbufInfo;
2342*53ee8cc1Swenshuai.xi GFXTwoSrcBitBltInfo.pDstbufInfo->u32OffsetByte = 0;
2343*53ee8cc1Swenshuai.xi GFXTwoSrcBitBltInfo.pDrawTwoSrcRect = pdrawbuf;
2344*53ee8cc1Swenshuai.xi GFXTwoSrcBitBltInfo.u32DrawFlag = drawflag;
2345*53ee8cc1Swenshuai.xi
2346*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_TWOSRCBITBLT, (void*)&GFXTwoSrcBitBlt) != UTOPIA_STATUS_SUCCESS)
2347*53ee8cc1Swenshuai.xi {
2348*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2349*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2350*53ee8cc1Swenshuai.xi }
2351*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
2352*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2353*53ee8cc1Swenshuai.xi
2354*53ee8cc1Swenshuai.xi return eRet;
2355*53ee8cc1Swenshuai.xi
2356*53ee8cc1Swenshuai.xi }
2357*53ee8cc1Swenshuai.xi
2358*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2359*53ee8cc1Swenshuai.xi /// Set GFX palette table
2360*53ee8cc1Swenshuai.xi /// Palette entries started from u32PalStart to u32PalEnd will be updated according to the data pointed by pPalArray
2361*53ee8cc1Swenshuai.xi /// @param pPalArray \b IN: pointer to an array of GFX_PaletteEntry
2362*53ee8cc1Swenshuai.xi /// @param u32PalStart \b IN: Palette index from which the palette will be updated.
2363*53ee8cc1Swenshuai.xi /// @param u32PalEnd \b IN: Palette index to which the palette will be updated.
2364*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2365*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2366*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetPaletteOpt(GFX_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd)2367*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetPaletteOpt( GFX_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd)
2368*53ee8cc1Swenshuai.xi {
2369*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2370*53ee8cc1Swenshuai.xi
2371*53ee8cc1Swenshuai.xi if(pPalArray == NULL)
2372*53ee8cc1Swenshuai.xi {
2373*53ee8cc1Swenshuai.xi GFX_ERR("[%s][%d] pPalArray =NULL\n",__FUNCTION__,__LINE__);
2374*53ee8cc1Swenshuai.xi return GFX_FAIL;
2375*53ee8cc1Swenshuai.xi }
2376*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2377*53ee8cc1Swenshuai.xi
2378*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2379*53ee8cc1Swenshuai.xi GFX_Set_PaletteOpt GFXSetPaletteOpt;
2380*53ee8cc1Swenshuai.xi
2381*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 , sizeof(GFX_SETCONFIG_ARGS));
2382*53ee8cc1Swenshuai.xi memset(&GFXSetPaletteOpt , 0 ,sizeof(GFX_Set_PaletteOpt));
2383*53ee8cc1Swenshuai.xi
2384*53ee8cc1Swenshuai.xi GFXSetPaletteOpt.pPalArray = pPalArray;
2385*53ee8cc1Swenshuai.xi GFXSetPaletteOpt.u32PalStart = u32PalStart;
2386*53ee8cc1Swenshuai.xi GFXSetPaletteOpt.u32PalEnd = u32PalEnd;
2387*53ee8cc1Swenshuai.xi
2388*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig = E_GFX_SET_PALETTEOPT;
2389*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo = (void*)&GFXSetPaletteOpt;
2390*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size = sizeof(GFX_Set_PaletteOpt);
2391*53ee8cc1Swenshuai.xi
2392*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2393*53ee8cc1Swenshuai.xi {
2394*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2395*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2396*53ee8cc1Swenshuai.xi }
2397*53ee8cc1Swenshuai.xi return eRet;
2398*53ee8cc1Swenshuai.xi }
2399*53ee8cc1Swenshuai.xi
2400*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2401*53ee8cc1Swenshuai.xi /// Set GFX CSC format
2402*53ee8cc1Swenshuai.xi /// YUV/RGB conversion will be performed according to the spec specified in this function.
2403*53ee8cc1Swenshuai.xi /// @param mode \b IN: YUV mode: PC or 0~255
2404*53ee8cc1Swenshuai.xi /// @param yuv_out_range \b IN: output YUV mode: PC or 0~255
2405*53ee8cc1Swenshuai.xi /// @param uv_in_range \b IN: input YUV mode: 0~255 or -126~127
2406*53ee8cc1Swenshuai.xi /// @param srcfmt \b IN: YUV packing format for source
2407*53ee8cc1Swenshuai.xi /// @param dstfmt \b IN: YUV packing format for destination
2408*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2409*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2410*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_SetDC_CSC_FMT(GFX_YUV_Rgb2Yuv mode,GFX_YUV_OutRange yuv_out_range,GFX_YUV_InRange uv_in_range,GFX_YUV_422 srcfmt,GFX_YUV_422 dstfmt)2411*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDC_CSC_FMT(GFX_YUV_Rgb2Yuv mode, GFX_YUV_OutRange yuv_out_range, GFX_YUV_InRange uv_in_range, GFX_YUV_422 srcfmt, GFX_YUV_422 dstfmt)
2412*53ee8cc1Swenshuai.xi {
2413*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2414*53ee8cc1Swenshuai.xi
2415*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2416*53ee8cc1Swenshuai.xi
2417*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2418*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetCSC.mode = mode;
2419*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetCSC.yuv_out_range = yuv_out_range;
2420*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetCSC.uv_in_range = uv_in_range;
2421*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetCSC.srcfmt = srcfmt;
2422*53ee8cc1Swenshuai.xi GFXFireInfo.GFXSetCSC.dstfmt = dstfmt;
2423*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_CSC_INFO;
2424*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2425*53ee8cc1Swenshuai.xi
2426*53ee8cc1Swenshuai.xi return eRet;
2427*53ee8cc1Swenshuai.xi }
2428*53ee8cc1Swenshuai.xi
2429*53ee8cc1Swenshuai.xi /******************************************************************************/
2430*53ee8cc1Swenshuai.xi ///Set alpha parameter for ARGB1555.
2431*53ee8cc1Swenshuai.xi ///@param coef \b IN alpha coefficient for ARGB1555
2432*53ee8cc1Swenshuai.xi ///@par Function Actions:
2433*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2434*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2435*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetAlpha_ARGB1555(MS_U8 coef)2436*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlpha_ARGB1555(MS_U8 coef)
2437*53ee8cc1Swenshuai.xi {
2438*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2439*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
2440*53ee8cc1Swenshuai.xi
2441*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2442*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
2443*53ee8cc1Swenshuai.xi
2444*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_SET_ALB_1555;
2445*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&coef;
2446*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(MS_U8);
2447*53ee8cc1Swenshuai.xi
2448*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
2449*53ee8cc1Swenshuai.xi {
2450*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2451*53ee8cc1Swenshuai.xi }
2452*53ee8cc1Swenshuai.xi return eRet;
2453*53ee8cc1Swenshuai.xi }
2454*53ee8cc1Swenshuai.xi
2455*53ee8cc1Swenshuai.xi
2456*53ee8cc1Swenshuai.xi /******************************************************************************/
2457*53ee8cc1Swenshuai.xi ///Get alpha parameter for ARGB1555.
2458*53ee8cc1Swenshuai.xi ///@param coef \b IN alpha coefficient for ARGB1555
2459*53ee8cc1Swenshuai.xi ///@par Function Actions:
2460*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
2461*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
2462*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_GetAlpha_ARGB1555(MS_U8 * coef)2463*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetAlpha_ARGB1555(MS_U8* coef)
2464*53ee8cc1Swenshuai.xi {
2465*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2466*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
2467*53ee8cc1Swenshuai.xi
2468*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2469*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
2470*53ee8cc1Swenshuai.xi
2471*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_GET_ALB_1555;
2472*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)coef;
2473*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(MS_U8);
2474*53ee8cc1Swenshuai.xi
2475*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
2476*53ee8cc1Swenshuai.xi {
2477*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2478*53ee8cc1Swenshuai.xi }
2479*53ee8cc1Swenshuai.xi return eRet;
2480*53ee8cc1Swenshuai.xi }
2481*53ee8cc1Swenshuai.xi
2482*53ee8cc1Swenshuai.xi
2483*53ee8cc1Swenshuai.xi /******************************************************************************/
2484*53ee8cc1Swenshuai.xi ///Set TAGID
2485*53ee8cc1Swenshuai.xi ///@param tagID \b IN 16-bit TAGID
2486*53ee8cc1Swenshuai.xi ///@par Function Actions:
2487*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetTAGID(MS_U16 tagID)2488*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetTAGID(MS_U16 tagID)
2489*53ee8cc1Swenshuai.xi {
2490*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2491*53ee8cc1Swenshuai.xi
2492*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2493*53ee8cc1Swenshuai.xi
2494*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2495*53ee8cc1Swenshuai.xi
2496*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 , sizeof(GFX_SETCONFIG_ARGS));
2497*53ee8cc1Swenshuai.xi
2498*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_TAGID;
2499*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&tagID;
2500*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_U32);
2501*53ee8cc1Swenshuai.xi
2502*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2503*53ee8cc1Swenshuai.xi {
2504*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2505*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2506*53ee8cc1Swenshuai.xi }
2507*53ee8cc1Swenshuai.xi return eRet;
2508*53ee8cc1Swenshuai.xi }
2509*53ee8cc1Swenshuai.xi
2510*53ee8cc1Swenshuai.xi /******************************************************************************/
2511*53ee8cc1Swenshuai.xi ///Get TAGID
2512*53ee8cc1Swenshuai.xi ///@param tagID \b IN Pointer to 16-bit TAGID.
2513*53ee8cc1Swenshuai.xi ///@par Function Actions:
2514*53ee8cc1Swenshuai.xi /******************************************************************************/
2515*53ee8cc1Swenshuai.xi
MApi_GFX_GetTAGID(MS_U16 * tagID)2516*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetTAGID(MS_U16 *tagID)
2517*53ee8cc1Swenshuai.xi {
2518*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2519*53ee8cc1Swenshuai.xi
2520*53ee8cc1Swenshuai.xi if(tagID ==NULL)
2521*53ee8cc1Swenshuai.xi {
2522*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
2523*53ee8cc1Swenshuai.xi }
2524*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2525*53ee8cc1Swenshuai.xi
2526*53ee8cc1Swenshuai.xi GFX_GETINFO_ARGS GFXGetInfo;
2527*53ee8cc1Swenshuai.xi
2528*53ee8cc1Swenshuai.xi memset(&GFXGetInfo, 0 ,sizeof(GFX_GETINFO_ARGS));
2529*53ee8cc1Swenshuai.xi
2530*53ee8cc1Swenshuai.xi GFXGetInfo.eGFX_GetConfig =E_GFX_GET_TAGID;
2531*53ee8cc1Swenshuai.xi GFXGetInfo.u32Size =sizeof(MS_U16);
2532*53ee8cc1Swenshuai.xi
2533*53ee8cc1Swenshuai.xi GFXGetInfo.pGFX_GetInfo =tagID;
2534*53ee8cc1Swenshuai.xi
2535*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_GET_INFO, (void*)&GFXGetInfo) != UTOPIA_STATUS_SUCCESS)
2536*53ee8cc1Swenshuai.xi {
2537*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2538*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
2539*53ee8cc1Swenshuai.xi }
2540*53ee8cc1Swenshuai.xi
2541*53ee8cc1Swenshuai.xi return eRet;
2542*53ee8cc1Swenshuai.xi }
2543*53ee8cc1Swenshuai.xi #endif
2544*53ee8cc1Swenshuai.xi
2545*53ee8cc1Swenshuai.xi /******************************************************************************/
2546*53ee8cc1Swenshuai.xi ///Wait for TagID.
2547*53ee8cc1Swenshuai.xi ///@param tagID \b IN: tag to wait
2548*53ee8cc1Swenshuai.xi ///@par Function Actions:
2549*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_WaitForTAGID(MS_U16 tagID)2550*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_WaitForTAGID(MS_U16 tagID)
2551*53ee8cc1Swenshuai.xi {
2552*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2553*53ee8cc1Swenshuai.xi
2554*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2555*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2556*53ee8cc1Swenshuai.xi
2557*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2558*53ee8cc1Swenshuai.xi
2559*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_WAITFORTAGID;
2560*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&tagID;
2561*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_U32);
2562*53ee8cc1Swenshuai.xi
2563*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2564*53ee8cc1Swenshuai.xi {
2565*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2566*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2567*53ee8cc1Swenshuai.xi }
2568*53ee8cc1Swenshuai.xi return eRet;
2569*53ee8cc1Swenshuai.xi }
2570*53ee8cc1Swenshuai.xi
2571*53ee8cc1Swenshuai.xi /******************************************************************************/
2572*53ee8cc1Swenshuai.xi ///Polling TagID.
2573*53ee8cc1Swenshuai.xi ///@param tagID \b IN: tag to polling
2574*53ee8cc1Swenshuai.xi ///@par Function Actions:
2575*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_PollingTAGID(MS_U16 tagID)2576*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_PollingTAGID(MS_U16 tagID)
2577*53ee8cc1Swenshuai.xi {
2578*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2579*53ee8cc1Swenshuai.xi
2580*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2581*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2582*53ee8cc1Swenshuai.xi
2583*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2584*53ee8cc1Swenshuai.xi
2585*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_POLLINGTAGID;
2586*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&tagID;
2587*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_U32);
2588*53ee8cc1Swenshuai.xi
2589*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2590*53ee8cc1Swenshuai.xi {
2591*53ee8cc1Swenshuai.xi //GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2592*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2593*53ee8cc1Swenshuai.xi }
2594*53ee8cc1Swenshuai.xi return eRet;
2595*53ee8cc1Swenshuai.xi }
2596*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
2597*53ee8cc1Swenshuai.xi /******************************************************************************/
2598*53ee8cc1Swenshuai.xi ///Retrieve next TagID.
2599*53ee8cc1Swenshuai.xi ///@param bStepTagBefore \b IN: steps to the tagID.
2600*53ee8cc1Swenshuai.xi ///@par Function Actions:
2601*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_GetNextTAGID(MS_BOOL bStepTagBefore)2602*53ee8cc1Swenshuai.xi MS_U16 MApi_GFX_GetNextTAGID(MS_BOOL bStepTagBefore)
2603*53ee8cc1Swenshuai.xi {
2604*53ee8cc1Swenshuai.xi MS_U16 u16Ret;
2605*53ee8cc1Swenshuai.xi
2606*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2607*53ee8cc1Swenshuai.xi
2608*53ee8cc1Swenshuai.xi GFX_GETINFO_ARGS GFXGetInfo;
2609*53ee8cc1Swenshuai.xi GFX_Get_NextTagID GFXGetNextID;
2610*53ee8cc1Swenshuai.xi
2611*53ee8cc1Swenshuai.xi memset(&GFXGetInfo, 0 , sizeof(GFX_GETINFO_ARGS));
2612*53ee8cc1Swenshuai.xi memset(&GFXGetNextID, 0 , sizeof(GFX_Get_NextTagID));
2613*53ee8cc1Swenshuai.xi
2614*53ee8cc1Swenshuai.xi GFXGetInfo.eGFX_GetConfig =E_GFX_GET_NEXTTAGID;
2615*53ee8cc1Swenshuai.xi GFXGetInfo.pGFX_GetInfo =(void*)&GFXGetNextID;
2616*53ee8cc1Swenshuai.xi GFXGetInfo.u32Size =sizeof(GFX_Get_NextTagID);
2617*53ee8cc1Swenshuai.xi
2618*53ee8cc1Swenshuai.xi GFXGetNextID.bStepTagBefore = bStepTagBefore;
2619*53ee8cc1Swenshuai.xi GFXGetNextID.pTagID = &u16Ret;
2620*53ee8cc1Swenshuai.xi
2621*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_GET_INFO, (void*)&GFXGetInfo) != UTOPIA_STATUS_SUCCESS)
2622*53ee8cc1Swenshuai.xi {
2623*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2624*53ee8cc1Swenshuai.xi }
2625*53ee8cc1Swenshuai.xi
2626*53ee8cc1Swenshuai.xi return u16Ret;
2627*53ee8cc1Swenshuai.xi }
2628*53ee8cc1Swenshuai.xi #endif
2629*53ee8cc1Swenshuai.xi
2630*53ee8cc1Swenshuai.xi /******************************************************************************/
2631*53ee8cc1Swenshuai.xi ///Set next TagID Auto to HW.
2632*53ee8cc1Swenshuai.xi ///@par The Tage ID which has been set to HW
2633*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetNextTAGID(void)2634*53ee8cc1Swenshuai.xi MS_U16 MApi_GFX_SetNextTAGID(void)
2635*53ee8cc1Swenshuai.xi {
2636*53ee8cc1Swenshuai.xi MS_U16 tagID=0xFF;
2637*53ee8cc1Swenshuai.xi
2638*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2639*53ee8cc1Swenshuai.xi
2640*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2641*53ee8cc1Swenshuai.xi
2642*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2643*53ee8cc1Swenshuai.xi
2644*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_NEXTTAGID;
2645*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&tagID;
2646*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_U32);
2647*53ee8cc1Swenshuai.xi
2648*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2649*53ee8cc1Swenshuai.xi {
2650*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2651*53ee8cc1Swenshuai.xi }
2652*53ee8cc1Swenshuai.xi
2653*53ee8cc1Swenshuai.xi return tagID;
2654*53ee8cc1Swenshuai.xi }
2655*53ee8cc1Swenshuai.xi
2656*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
2657*53ee8cc1Swenshuai.xi /******************************************************************************/
2658*53ee8cc1Swenshuai.xi ///Enable GFX Virtual Command Queue
2659*53ee8cc1Swenshuai.xi ///@param blEnable \b IN: true: Enable, false: Disable
2660*53ee8cc1Swenshuai.xi ///@par Function Actions:
2661*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2662*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2663*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_EnableVCmdQueue(MS_U16 blEnable)2664*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EnableVCmdQueue(MS_U16 blEnable)
2665*53ee8cc1Swenshuai.xi {
2666*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2667*53ee8cc1Swenshuai.xi
2668*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2669*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2670*53ee8cc1Swenshuai.xi
2671*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 , sizeof(GFX_SETCONFIG_ARGS));
2672*53ee8cc1Swenshuai.xi
2673*53ee8cc1Swenshuai.xi GFXSerVQ.bEnable =blEnable;
2674*53ee8cc1Swenshuai.xi
2675*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_VQ;
2676*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&GFXSerVQ;
2677*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(GFX_Set_VQ);
2678*53ee8cc1Swenshuai.xi
2679*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2680*53ee8cc1Swenshuai.xi {
2681*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2682*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2683*53ee8cc1Swenshuai.xi }
2684*53ee8cc1Swenshuai.xi
2685*53ee8cc1Swenshuai.xi return eRet;
2686*53ee8cc1Swenshuai.xi }
2687*53ee8cc1Swenshuai.xi
2688*53ee8cc1Swenshuai.xi /******************************************************************************/
2689*53ee8cc1Swenshuai.xi ///Configure GFX Virtual Command Queue buffer spec
2690*53ee8cc1Swenshuai.xi ///@param u32Addr \b IN: base adress for VCMQ buffer
2691*53ee8cc1Swenshuai.xi ///@param enBufSize \b IN: buffer size of VCMQ buffer
2692*53ee8cc1Swenshuai.xi ///@par Function Actions:
2693*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2694*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2695*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetVCmdBuffer(MS_PHY PhyAddr,GFX_VcmqBufSize enBufSize)2696*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetVCmdBuffer(MS_PHY PhyAddr, GFX_VcmqBufSize enBufSize)
2697*53ee8cc1Swenshuai.xi {
2698*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2699*53ee8cc1Swenshuai.xi
2700*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2701*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2702*53ee8cc1Swenshuai.xi
2703*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2704*53ee8cc1Swenshuai.xi
2705*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_VQ;
2706*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&GFXSerVQ;
2707*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(GFX_Set_VQ);
2708*53ee8cc1Swenshuai.xi
2709*53ee8cc1Swenshuai.xi GFXSerVQ.u32Addr =PhyAddr;
2710*53ee8cc1Swenshuai.xi GFXSerVQ.enBufSize =enBufSize;
2711*53ee8cc1Swenshuai.xi
2712*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2713*53ee8cc1Swenshuai.xi {
2714*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2715*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2716*53ee8cc1Swenshuai.xi }
2717*53ee8cc1Swenshuai.xi
2718*53ee8cc1Swenshuai.xi return eRet;
2719*53ee8cc1Swenshuai.xi
2720*53ee8cc1Swenshuai.xi }
2721*53ee8cc1Swenshuai.xi
2722*53ee8cc1Swenshuai.xi /******************************************************************************/
2723*53ee8cc1Swenshuai.xi ///Configure GFX Virtual Command Queue Write Threshold
2724*53ee8cc1Swenshuai.xi ///@param u8W_Threshold \b IN: Write threshold
2725*53ee8cc1Swenshuai.xi ///@par Function Actions:
2726*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2727*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2728*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GE_SetVCmd_W_Thread(MS_U8 u8W_Threshold)2729*53ee8cc1Swenshuai.xi GFX_Result MApi_GE_SetVCmd_W_Thread(MS_U8 u8W_Threshold)
2730*53ee8cc1Swenshuai.xi {
2731*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2732*53ee8cc1Swenshuai.xi
2733*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2734*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2735*53ee8cc1Swenshuai.xi
2736*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2737*53ee8cc1Swenshuai.xi
2738*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_VQ;
2739*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&GFXSerVQ;
2740*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(GFX_Set_VQ);
2741*53ee8cc1Swenshuai.xi
2742*53ee8cc1Swenshuai.xi GFXSerVQ.u8W_Threshold =u8W_Threshold;
2743*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2744*53ee8cc1Swenshuai.xi {
2745*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2746*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2747*53ee8cc1Swenshuai.xi }
2748*53ee8cc1Swenshuai.xi
2749*53ee8cc1Swenshuai.xi return eRet;
2750*53ee8cc1Swenshuai.xi }
2751*53ee8cc1Swenshuai.xi
2752*53ee8cc1Swenshuai.xi /******************************************************************************/
2753*53ee8cc1Swenshuai.xi ///Configure GFX Virtual Command Queue Read Threshold
2754*53ee8cc1Swenshuai.xi ///@param u8R_Threshold \b IN: Read threshold
2755*53ee8cc1Swenshuai.xi ///@par Function Actions:
2756*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2757*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2758*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GE_SetVCmd_R_Thread(MS_U8 u8R_Threshold)2759*53ee8cc1Swenshuai.xi GFX_Result MApi_GE_SetVCmd_R_Thread(MS_U8 u8R_Threshold)
2760*53ee8cc1Swenshuai.xi {
2761*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2762*53ee8cc1Swenshuai.xi
2763*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2764*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2765*53ee8cc1Swenshuai.xi
2766*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0, sizeof(GFX_SETCONFIG_ARGS));
2767*53ee8cc1Swenshuai.xi
2768*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_VQ;
2769*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&GFXSerVQ;
2770*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(GFX_Set_VQ);
2771*53ee8cc1Swenshuai.xi
2772*53ee8cc1Swenshuai.xi GFXSerVQ.u8R_Threshold =u8R_Threshold;
2773*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2774*53ee8cc1Swenshuai.xi {
2775*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2776*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
2777*53ee8cc1Swenshuai.xi }
2778*53ee8cc1Swenshuai.xi
2779*53ee8cc1Swenshuai.xi return eRet;
2780*53ee8cc1Swenshuai.xi }
2781*53ee8cc1Swenshuai.xi
2782*53ee8cc1Swenshuai.xi
2783*53ee8cc1Swenshuai.xi /******************************************************************************/
2784*53ee8cc1Swenshuai.xi ///Configure GFX DBG level
2785*53ee8cc1Swenshuai.xi ///@param level \b IN: debug level. 0 => no dbg.
2786*53ee8cc1Swenshuai.xi ///@par Function Actions:
2787*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetDbgLevel(MS_U32 level)2788*53ee8cc1Swenshuai.xi void MApi_GFX_SetDbgLevel(MS_U32 level)
2789*53ee8cc1Swenshuai.xi {
2790*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
2791*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
2792*53ee8cc1Swenshuai.xi MS_U32 u32level;
2793*53ee8cc1Swenshuai.xi
2794*53ee8cc1Swenshuai.xi u32level = level;
2795*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_DEBUG_LEVEL;
2796*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&u32level;
2797*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(MS_U32);
2798*53ee8cc1Swenshuai.xi
2799*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
2800*53ee8cc1Swenshuai.xi {
2801*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2802*53ee8cc1Swenshuai.xi }
2803*53ee8cc1Swenshuai.xi }
2804*53ee8cc1Swenshuai.xi
2805*53ee8cc1Swenshuai.xi
2806*53ee8cc1Swenshuai.xi /******************************************************************************/
2807*53ee8cc1Swenshuai.xi ///Explicitly wait for GFX queue empty
2808*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2809*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2810*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_FlushQueue(void)2811*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_FlushQueue(void)
2812*53ee8cc1Swenshuai.xi {
2813*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2814*53ee8cc1Swenshuai.xi MS_U32 value = 0;
2815*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2816*53ee8cc1Swenshuai.xi
2817*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
2818*53ee8cc1Swenshuai.xi
2819*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 ,sizeof(GFX_SETCONFIG_ARGS));
2820*53ee8cc1Swenshuai.xi
2821*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_FLUSHQUEUE;
2822*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(0);
2823*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =&value;
2824*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
2825*53ee8cc1Swenshuai.xi {
2826*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2827*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
2828*53ee8cc1Swenshuai.xi }
2829*53ee8cc1Swenshuai.xi
2830*53ee8cc1Swenshuai.xi return eRet;
2831*53ee8cc1Swenshuai.xi }
2832*53ee8cc1Swenshuai.xi
2833*53ee8cc1Swenshuai.xi /******************************************************************************/
2834*53ee8cc1Swenshuai.xi ///Configure the Color Key edge refine function.
2835*53ee8cc1Swenshuai.xi ///@param type \b IN: type of refine.
2836*53ee8cc1Swenshuai.xi ///@param color \b IN: when type is GFX_REPLACE_KEY_2_CUS, color of the customized color.
2837*53ee8cc1Swenshuai.xi ///@par Function Actions:
2838*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2839*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2840*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetStrBltSckType(GFX_StretchCKType type,GFX_RgbColor * color)2841*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetStrBltSckType(GFX_StretchCKType type, GFX_RgbColor *color)
2842*53ee8cc1Swenshuai.xi {
2843*53ee8cc1Swenshuai.xi
2844*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2845*53ee8cc1Swenshuai.xi GFXFireInfo.sttype.type = type;
2846*53ee8cc1Swenshuai.xi GFXFireInfo.sttype.color = *color;
2847*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo |= GFX_STR_BLT_SCK_INFO;
2848*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2849*53ee8cc1Swenshuai.xi
2850*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
2851*53ee8cc1Swenshuai.xi }
2852*53ee8cc1Swenshuai.xi
2853*53ee8cc1Swenshuai.xi
2854*53ee8cc1Swenshuai.xi /******************************************************************************/
2855*53ee8cc1Swenshuai.xi ///Check if GFX lib is running as HouseKeeping.
2856*53ee8cc1Swenshuai.xi ///@param bIsHK \b IN: pointer to a bool denoting true/false
2857*53ee8cc1Swenshuai.xi ///@par Function Actions:
2858*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2859*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2860*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_GetHK(MS_BOOL * bIsHK)2861*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetHK(MS_BOOL *bIsHK)
2862*53ee8cc1Swenshuai.xi {
2863*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
2864*53ee8cc1Swenshuai.xi MS_BOOL IsHK;
2865*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
2866*53ee8cc1Swenshuai.xi
2867*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_GET_HK;
2868*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&IsHK;
2869*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(MS_BOOL);
2870*53ee8cc1Swenshuai.xi
2871*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
2872*53ee8cc1Swenshuai.xi {
2873*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2874*53ee8cc1Swenshuai.xi }
2875*53ee8cc1Swenshuai.xi *bIsHK = IsHK;
2876*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
2877*53ee8cc1Swenshuai.xi }
2878*53ee8cc1Swenshuai.xi
2879*53ee8cc1Swenshuai.xi /******************************************************************************/
2880*53ee8cc1Swenshuai.xi ///Set the GFX lib running as HouseKeeping
2881*53ee8cc1Swenshuai.xi ///@param bIsHK \b IN: true => As HK, false => Not HK
2882*53ee8cc1Swenshuai.xi ///@par Function Actions:
2883*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2884*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2885*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetHK(MS_BOOL bIsHK)2886*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetHK(MS_BOOL bIsHK)
2887*53ee8cc1Swenshuai.xi {
2888*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
2889*53ee8cc1Swenshuai.xi MS_BOOL IsHK;
2890*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
2891*53ee8cc1Swenshuai.xi IsHK = bIsHK;
2892*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_SET_HK;
2893*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&IsHK;
2894*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(MS_BOOL);
2895*53ee8cc1Swenshuai.xi
2896*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
2897*53ee8cc1Swenshuai.xi {
2898*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2899*53ee8cc1Swenshuai.xi }
2900*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
2901*53ee8cc1Swenshuai.xi }
2902*53ee8cc1Swenshuai.xi
2903*53ee8cc1Swenshuai.xi
2904*53ee8cc1Swenshuai.xi /******************************************************************************/
2905*53ee8cc1Swenshuai.xi ///Draw Oval. Oval is not directly supported by HW. Software implemented by DrawLine.
2906*53ee8cc1Swenshuai.xi ///@param pOval \b IN: Oval info
2907*53ee8cc1Swenshuai.xi ///@par Function Actions:
2908*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2909*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2910*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_DrawOval(GFX_OvalFillInfo * pOval)2911*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_DrawOval(GFX_OvalFillInfo *pOval)
2912*53ee8cc1Swenshuai.xi {
2913*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2914*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2915*53ee8cc1Swenshuai.xi
2916*53ee8cc1Swenshuai.xi GFX_DRAW_OVAL_ARGS GFXDrawOval;
2917*53ee8cc1Swenshuai.xi GFX_Set_DrawOvalInfo GFXDrawOvalInfo;
2918*53ee8cc1Swenshuai.xi
2919*53ee8cc1Swenshuai.xi memset(&GFXDrawOval, 0 ,sizeof(GFX_DRAW_OVAL_ARGS));
2920*53ee8cc1Swenshuai.xi memset(&GFXDrawOvalInfo, 0 ,sizeof(GFX_Set_DrawOvalInfo));
2921*53ee8cc1Swenshuai.xi
2922*53ee8cc1Swenshuai.xi GFX_FireInfoLock();
2923*53ee8cc1Swenshuai.xi GFXDrawOvalInfo.pFireInfo = &GFXFireInfo;
2924*53ee8cc1Swenshuai.xi GFXDrawOvalInfo.pDrawOvalInfo = pOval;
2925*53ee8cc1Swenshuai.xi GFXDrawOval.psetting =(void*)&GFXDrawOvalInfo;
2926*53ee8cc1Swenshuai.xi GFXDrawOval.u32Size =sizeof(GFX_Set_DrawOvalInfo);
2927*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_DRAW_OVAL, (void*)&GFXDrawOval) != UTOPIA_STATUS_SUCCESS)
2928*53ee8cc1Swenshuai.xi {
2929*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2930*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
2931*53ee8cc1Swenshuai.xi }
2932*53ee8cc1Swenshuai.xi GFXFireInfo.eFireInfo = 0;
2933*53ee8cc1Swenshuai.xi GFX_FireInfoUnLock();
2934*53ee8cc1Swenshuai.xi
2935*53ee8cc1Swenshuai.xi return eRet;
2936*53ee8cc1Swenshuai.xi }
2937*53ee8cc1Swenshuai.xi
2938*53ee8cc1Swenshuai.xi
2939*53ee8cc1Swenshuai.xi /******************************************************************************/
2940*53ee8cc1Swenshuai.xi ///Get GFX version string
2941*53ee8cc1Swenshuai.xi ///@param ppVersion \b IN: version string
2942*53ee8cc1Swenshuai.xi ///@par Function Actions:
2943*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2944*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2945*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_GetLibVer(const MSIF_Version ** ppVersion)2946*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetLibVer(const MSIF_Version **ppVersion)
2947*53ee8cc1Swenshuai.xi {
2948*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2949*53ee8cc1Swenshuai.xi
2950*53ee8cc1Swenshuai.xi if (!ppVersion)
2951*53ee8cc1Swenshuai.xi {
2952*53ee8cc1Swenshuai.xi return GFX_FAIL;
2953*53ee8cc1Swenshuai.xi }
2954*53ee8cc1Swenshuai.xi
2955*53ee8cc1Swenshuai.xi *ppVersion = &_drv_gfx_version;
2956*53ee8cc1Swenshuai.xi
2957*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
2958*53ee8cc1Swenshuai.xi }
2959*53ee8cc1Swenshuai.xi
2960*53ee8cc1Swenshuai.xi /******************************************************************************/
2961*53ee8cc1Swenshuai.xi ///Get GFX debug information
2962*53ee8cc1Swenshuai.xi ///@param dbg \b IN: pointer to debug struct.
2963*53ee8cc1Swenshuai.xi ///@par Function Actions:
2964*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
2965*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
2966*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_GetInfo(GFX_DbgInfo * dbg)2967*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetInfo( GFX_DbgInfo *dbg )
2968*53ee8cc1Swenshuai.xi {
2969*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
2970*53ee8cc1Swenshuai.xi
2971*53ee8cc1Swenshuai.xi if(dbg == NULL)
2972*53ee8cc1Swenshuai.xi {
2973*53ee8cc1Swenshuai.xi return GFX_FAIL;
2974*53ee8cc1Swenshuai.xi }
2975*53ee8cc1Swenshuai.xi
2976*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
2977*53ee8cc1Swenshuai.xi GFX_GETINFO_ARGS GFXGetInfo;
2978*53ee8cc1Swenshuai.xi GFX_DbgInfo GFXDbgInfo;
2979*53ee8cc1Swenshuai.xi
2980*53ee8cc1Swenshuai.xi memset(&GFXGetInfo, 0, sizeof(GFX_GETINFO_ARGS));
2981*53ee8cc1Swenshuai.xi memset(&GFXDbgInfo, 0 ,sizeof(GFX_DbgInfo));
2982*53ee8cc1Swenshuai.xi
2983*53ee8cc1Swenshuai.xi GFXGetInfo.eGFX_GetConfig =E_GFX_GET_DBGINFO;
2984*53ee8cc1Swenshuai.xi GFXGetInfo.pGFX_GetInfo =(void*)&GFXDbgInfo;
2985*53ee8cc1Swenshuai.xi GFXGetInfo.u32Size =sizeof(GFX_DbgInfo);
2986*53ee8cc1Swenshuai.xi
2987*53ee8cc1Swenshuai.xi GFXGetInfo.pGFX_GetInfo =dbg;
2988*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_GET_INFO, (void*)&GFXGetInfo) != UTOPIA_STATUS_SUCCESS)
2989*53ee8cc1Swenshuai.xi {
2990*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
2991*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
2992*53ee8cc1Swenshuai.xi }
2993*53ee8cc1Swenshuai.xi return eRet;
2994*53ee8cc1Swenshuai.xi }
2995*53ee8cc1Swenshuai.xi
2996*53ee8cc1Swenshuai.xi /******************************************************************************/
2997*53ee8cc1Swenshuai.xi ///Get GFX internal status
2998*53ee8cc1Swenshuai.xi ///@param pStatus \b IN: pointer to debug struct.
2999*53ee8cc1Swenshuai.xi ///@par Function Actions:
3000*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
3001*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
3002*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_GetStatus(MS_BOOL * pStatus)3003*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetStatus( MS_BOOL *pStatus )
3004*53ee8cc1Swenshuai.xi {
3005*53ee8cc1Swenshuai.xi #if 0
3006*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3007*53ee8cc1Swenshuai.xi
3008*53ee8cc1Swenshuai.xi MDrv_GE_GetStatus(g_apiGFXLocal.g_pGEContext, pStatus);
3009*53ee8cc1Swenshuai.xi #endif
3010*53ee8cc1Swenshuai.xi *pStatus = TRUE;
3011*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
3012*53ee8cc1Swenshuai.xi }
3013*53ee8cc1Swenshuai.xi
3014*53ee8cc1Swenshuai.xi
3015*53ee8cc1Swenshuai.xi /******************************************************************************/
3016*53ee8cc1Swenshuai.xi ///Set GFX Power On
3017*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
3018*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
3019*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_PowerOn(void)3020*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_PowerOn(void)
3021*53ee8cc1Swenshuai.xi {
3022*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
3023*53ee8cc1Swenshuai.xi
3024*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3025*53ee8cc1Swenshuai.xi
3026*53ee8cc1Swenshuai.xi MS_BOOL bVal =TRUE;
3027*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
3028*53ee8cc1Swenshuai.xi
3029*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0, sizeof(GFX_SETCONFIG_ARGS));
3030*53ee8cc1Swenshuai.xi
3031*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_POWERON;
3032*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&bVal;
3033*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_BOOL);
3034*53ee8cc1Swenshuai.xi
3035*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
3036*53ee8cc1Swenshuai.xi {
3037*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3038*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
3039*53ee8cc1Swenshuai.xi }
3040*53ee8cc1Swenshuai.xi return eRet;
3041*53ee8cc1Swenshuai.xi }
3042*53ee8cc1Swenshuai.xi
3043*53ee8cc1Swenshuai.xi
3044*53ee8cc1Swenshuai.xi /******************************************************************************/
3045*53ee8cc1Swenshuai.xi ///Set GFX Power Off
3046*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
3047*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
3048*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_PowerOff(void)3049*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_PowerOff(void)
3050*53ee8cc1Swenshuai.xi {
3051*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
3052*53ee8cc1Swenshuai.xi
3053*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3054*53ee8cc1Swenshuai.xi
3055*53ee8cc1Swenshuai.xi MS_BOOL bVal =FALSE;
3056*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
3057*53ee8cc1Swenshuai.xi
3058*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0 , sizeof(GFX_SETCONFIG_ARGS));
3059*53ee8cc1Swenshuai.xi
3060*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_POWERON;
3061*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&bVal;
3062*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(MS_BOOL);
3063*53ee8cc1Swenshuai.xi
3064*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
3065*53ee8cc1Swenshuai.xi {
3066*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3067*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
3068*53ee8cc1Swenshuai.xi }
3069*53ee8cc1Swenshuai.xi
3070*53ee8cc1Swenshuai.xi return eRet;
3071*53ee8cc1Swenshuai.xi }
3072*53ee8cc1Swenshuai.xi
3073*53ee8cc1Swenshuai.xi /******************************************************************************/
3074*53ee8cc1Swenshuai.xi ///Set GFX Write Protect
3075*53ee8cc1Swenshuai.xi /// @param miu \b IN: miu being procted
3076*53ee8cc1Swenshuai.xi /// @param addr_low \b IN: low address of specified area
3077*53ee8cc1Swenshuai.xi /// @param addr_high \b IN: high address of specified area
3078*53ee8cc1Swenshuai.xi /// @param eWPType \b IN: GE protect operator
3079*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
3080*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
3081*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_WriteProtect(MS_U8 miu,MS_PHY addr_low,MS_PHY addr_high,GFX_WPType eWPType)3082*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_WriteProtect(MS_U8 miu,MS_PHY addr_low,MS_PHY addr_high,GFX_WPType eWPType)
3083*53ee8cc1Swenshuai.xi {
3084*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
3085*53ee8cc1Swenshuai.xi
3086*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3087*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
3088*53ee8cc1Swenshuai.xi GFX_Set_WriteProtect GFXSetMiuProtect;
3089*53ee8cc1Swenshuai.xi
3090*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0, sizeof(GFX_SETCONFIG_ARGS));
3091*53ee8cc1Swenshuai.xi memset(&GFXSetMiuProtect, 0 ,sizeof(GFX_Set_WriteProtect));
3092*53ee8cc1Swenshuai.xi
3093*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig =E_GFX_SET_WRITEPROTECT;
3094*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo =(void*)&GFXSetMiuProtect;
3095*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size =sizeof(GFX_Set_WriteProtect);
3096*53ee8cc1Swenshuai.xi
3097*53ee8cc1Swenshuai.xi GFXSetMiuProtect.u8Miu =miu;
3098*53ee8cc1Swenshuai.xi GFXSetMiuProtect.u32Addr_Low =addr_low;
3099*53ee8cc1Swenshuai.xi GFXSetMiuProtect.u32Addr_High =addr_high;
3100*53ee8cc1Swenshuai.xi GFXSetMiuProtect.eWPType =eWPType;
3101*53ee8cc1Swenshuai.xi
3102*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
3103*53ee8cc1Swenshuai.xi {
3104*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3105*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
3106*53ee8cc1Swenshuai.xi }
3107*53ee8cc1Swenshuai.xi return eRet;
3108*53ee8cc1Swenshuai.xi }
3109*53ee8cc1Swenshuai.xi
MApi_GFX_GetAlignCaps(GFX_FmtAlignCapsInfo * pAlignCapsInfo)3110*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetAlignCaps(GFX_FmtAlignCapsInfo* pAlignCapsInfo)
3111*53ee8cc1Swenshuai.xi {
3112*53ee8cc1Swenshuai.xi MApi_GFX_GetGECaps(E_GFX_CAP_ALIGN,(MS_U32* )(void*)pAlignCapsInfo,sizeof(GFX_FmtAlignCapsInfo));
3113*53ee8cc1Swenshuai.xi return GFX_SUCCESS;
3114*53ee8cc1Swenshuai.xi }
3115*53ee8cc1Swenshuai.xi
3116*53ee8cc1Swenshuai.xi /******************************************************************************/
3117*53ee8cc1Swenshuai.xi ///Set GFX Config
3118*53ee8cc1Swenshuai.xi /// @param enType \b IN: enType
3119*53ee8cc1Swenshuai.xi /// @param plist \b IN: plist
3120*53ee8cc1Swenshuai.xi /// @param u32Len \b IN: u32Len
3121*53ee8cc1Swenshuai.xi ///@return GFX_SUCCESS - Success
3122*53ee8cc1Swenshuai.xi ///@return GFX_FAIL - Failure
3123*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetConfig(EN_GFX_CONFIG_TYPE enType,void * plist,MS_U32 u32Len)3124*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetConfig(EN_GFX_CONFIG_TYPE enType,void *plist,MS_U32 u32Len)
3125*53ee8cc1Swenshuai.xi {
3126*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
3127*53ee8cc1Swenshuai.xi
3128*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3129*53ee8cc1Swenshuai.xi GFX_SETCONFIG_ARGS GFXSetConfig;
3130*53ee8cc1Swenshuai.xi
3131*53ee8cc1Swenshuai.xi memset(&GFXSetConfig, 0, sizeof(GFX_SETCONFIG_ARGS));
3132*53ee8cc1Swenshuai.xi switch(enType)
3133*53ee8cc1Swenshuai.xi {
3134*53ee8cc1Swenshuai.xi case E_GFX_CONFIG_BURST_MIU_LENGTH:
3135*53ee8cc1Swenshuai.xi {
3136*53ee8cc1Swenshuai.xi if( u32Len != sizeof(GFX_Set_BurstMiuLen) )
3137*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
3138*53ee8cc1Swenshuai.xi
3139*53ee8cc1Swenshuai.xi GFXSetConfig.eGFX_SetConfig = E_GFX_SET_BURSTMIULEN;
3140*53ee8cc1Swenshuai.xi GFXSetConfig.pGFX_ConfigInfo = plist;
3141*53ee8cc1Swenshuai.xi GFXSetConfig.u32Size = u32Len;
3142*53ee8cc1Swenshuai.xi break;
3143*53ee8cc1Swenshuai.xi }
3144*53ee8cc1Swenshuai.xi default:
3145*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
3146*53ee8cc1Swenshuai.xi }
3147*53ee8cc1Swenshuai.xi
3148*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_SET_CONFIG, (void*)&GFXSetConfig) != UTOPIA_STATUS_SUCCESS)
3149*53ee8cc1Swenshuai.xi {
3150*53ee8cc1Swenshuai.xi printf("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3151*53ee8cc1Swenshuai.xi eRet= GFX_FAIL;
3152*53ee8cc1Swenshuai.xi }
3153*53ee8cc1Swenshuai.xi return eRet;
3154*53ee8cc1Swenshuai.xi }
3155*53ee8cc1Swenshuai.xi
MApi_GFX_GetConfig(EN_GFX_CONFIG_INIT enType,void * plist,MS_U32 u32Len)3156*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetConfig(EN_GFX_CONFIG_INIT enType,void *plist,MS_U32 u32Len)
3157*53ee8cc1Swenshuai.xi {
3158*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
3159*53ee8cc1Swenshuai.xi GFX_GETCONFIG_ARGS GFXGetConfig;
3160*53ee8cc1Swenshuai.xi
3161*53ee8cc1Swenshuai.xi if(NULL == pGEInstance)
3162*53ee8cc1Swenshuai.xi {
3163*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_GFX | GFXDRIVER_BASE, &pGEInstance, 0, NULL))
3164*53ee8cc1Swenshuai.xi {
3165*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d] GFXOpen Fail\n",__FUNCTION__, __LINE__);
3166*53ee8cc1Swenshuai.xi return GFX_FAIL;
3167*53ee8cc1Swenshuai.xi }
3168*53ee8cc1Swenshuai.xi }
3169*53ee8cc1Swenshuai.xi memset(&GFXGetConfig, 0, sizeof(GFX_GETCONFIG_ARGS));
3170*53ee8cc1Swenshuai.xi switch(enType)
3171*53ee8cc1Swenshuai.xi {
3172*53ee8cc1Swenshuai.xi case E_GFX_CONFIG_INIT:
3173*53ee8cc1Swenshuai.xi {
3174*53ee8cc1Swenshuai.xi if( u32Len != sizeof(GFX_GETCONFIG_ARGS) )
3175*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
3176*53ee8cc1Swenshuai.xi
3177*53ee8cc1Swenshuai.xi GFXGetConfig.eGFX_GetConfig = E_GFX_GET_INIT;
3178*53ee8cc1Swenshuai.xi GFXGetConfig.pGFX_ConfigInfo = plist;
3179*53ee8cc1Swenshuai.xi GFXGetConfig.u32Size = u32Len;
3180*53ee8cc1Swenshuai.xi break;
3181*53ee8cc1Swenshuai.xi }
3182*53ee8cc1Swenshuai.xi default:
3183*53ee8cc1Swenshuai.xi return GFX_INVALID_PARAMETERS;
3184*53ee8cc1Swenshuai.xi }
3185*53ee8cc1Swenshuai.xi
3186*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_GET_CONFIG, (void*)&GFXGetConfig) != UTOPIA_STATUS_SUCCESS)
3187*53ee8cc1Swenshuai.xi {
3188*53ee8cc1Swenshuai.xi printf("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3189*53ee8cc1Swenshuai.xi return GFX_FAIL;
3190*53ee8cc1Swenshuai.xi }
3191*53ee8cc1Swenshuai.xi
3192*53ee8cc1Swenshuai.xi return eRet;
3193*53ee8cc1Swenshuai.xi }
3194*53ee8cc1Swenshuai.xi
3195*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
3196*53ee8cc1Swenshuai.xi /// GE Exit
3197*53ee8cc1Swenshuai.xi /// @param void \b IN: none
3198*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GE_Exit(void)3199*53ee8cc1Swenshuai.xi void MApi_GE_Exit(void)
3200*53ee8cc1Swenshuai.xi {
3201*53ee8cc1Swenshuai.xi
3202*53ee8cc1Swenshuai.xi GFX_MISC_ARGS GFXInfo;
3203*53ee8cc1Swenshuai.xi MS_U32 value = 0;
3204*53ee8cc1Swenshuai.xi memset(&GFXInfo, 0, sizeof(GFX_MISC_ARGS));
3205*53ee8cc1Swenshuai.xi
3206*53ee8cc1Swenshuai.xi GFXInfo.eGFX_MISCType = E_MISC_EXIT;
3207*53ee8cc1Swenshuai.xi GFXInfo.pGFX_Info = (void*)&value;
3208*53ee8cc1Swenshuai.xi GFXInfo.u32Size = sizeof(GFX_MISC_ARGS);
3209*53ee8cc1Swenshuai.xi
3210*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_MISC, (void*)&GFXInfo) != UTOPIA_STATUS_SUCCESS)
3211*53ee8cc1Swenshuai.xi {
3212*53ee8cc1Swenshuai.xi GFX_DBUG("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3213*53ee8cc1Swenshuai.xi }
3214*53ee8cc1Swenshuai.xi }
3215*53ee8cc1Swenshuai.xi
MApi_GFX_GetGECaps(EN_GFX_CAPS eCapType,MS_U32 * pRet,MS_U32 ret_size)3216*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetGECaps(EN_GFX_CAPS eCapType, MS_U32* pRet, MS_U32 ret_size)
3217*53ee8cc1Swenshuai.xi {
3218*53ee8cc1Swenshuai.xi GFX_Result eRet = GFX_SUCCESS;
3219*53ee8cc1Swenshuai.xi
3220*53ee8cc1Swenshuai.xi if(pRet ==NULL)
3221*53ee8cc1Swenshuai.xi {
3222*53ee8cc1Swenshuai.xi return GFX_FAIL;
3223*53ee8cc1Swenshuai.xi }
3224*53ee8cc1Swenshuai.xi
3225*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3226*53ee8cc1Swenshuai.xi
3227*53ee8cc1Swenshuai.xi GFX_GETCAPS_ARGS GFXGetCaps;
3228*53ee8cc1Swenshuai.xi GFX_Get_CAPS GetCaps;
3229*53ee8cc1Swenshuai.xi
3230*53ee8cc1Swenshuai.xi memset(&GFXGetCaps, 0 ,sizeof(GFX_GETCAPS_ARGS));
3231*53ee8cc1Swenshuai.xi memset(&GetCaps, 0 ,sizeof(GFX_Get_CAPS));
3232*53ee8cc1Swenshuai.xi
3233*53ee8cc1Swenshuai.xi GFXGetCaps.eCaps = eCapType;
3234*53ee8cc1Swenshuai.xi GFXGetCaps.pGFX_GetCaps =(void*)&GetCaps;
3235*53ee8cc1Swenshuai.xi GFXGetCaps.u32Size =sizeof(GFX_Get_CAPS);
3236*53ee8cc1Swenshuai.xi
3237*53ee8cc1Swenshuai.xi GetCaps.eCapType =eCapType;
3238*53ee8cc1Swenshuai.xi GetCaps.pRet =pRet;
3239*53ee8cc1Swenshuai.xi GetCaps.Ret_Size =ret_size;
3240*53ee8cc1Swenshuai.xi
3241*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_GET_CAPS, (void*)&GFXGetCaps) != UTOPIA_STATUS_SUCCESS)
3242*53ee8cc1Swenshuai.xi {
3243*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3244*53ee8cc1Swenshuai.xi eRet = GFX_FAIL;
3245*53ee8cc1Swenshuai.xi }
3246*53ee8cc1Swenshuai.xi
3247*53ee8cc1Swenshuai.xi return eRet;
3248*53ee8cc1Swenshuai.xi }
3249*53ee8cc1Swenshuai.xi
3250*53ee8cc1Swenshuai.xi /// Wrapper ///
3251*53ee8cc1Swenshuai.xi
3252*53ee8cc1Swenshuai.xi #if 1
3253*53ee8cc1Swenshuai.xi
3254*53ee8cc1Swenshuai.xi /******************************************************************************/
3255*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_ClearFrameBuffer for backward compatibility.
3256*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_ClearFrameBuffer section for detail.
3257*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_ClearFrameBuffer(MS_PHY StrAddr,MS_U32 length,MS_U8 ClearValue)3258*53ee8cc1Swenshuai.xi void MDrv_GE_ClearFrameBuffer( MS_PHY StrAddr, MS_U32 length, MS_U8 ClearValue) //jupiter no miu
3259*53ee8cc1Swenshuai.xi {
3260*53ee8cc1Swenshuai.xi MApi_GFX_ClearFrameBuffer( StrAddr, length, ClearValue);
3261*53ee8cc1Swenshuai.xi }
3262*53ee8cc1Swenshuai.xi #endif
3263*53ee8cc1Swenshuai.xi
3264*53ee8cc1Swenshuai.xi /******************************************************************************/
3265*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_SetPaletteOpt for backward compatibility.
3266*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_SetPaletteOpt section for detail.
3267*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_SetPaletteOpt(GFX_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd)3268*53ee8cc1Swenshuai.xi void MDrv_GE_SetPaletteOpt( GFX_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd)
3269*53ee8cc1Swenshuai.xi {
3270*53ee8cc1Swenshuai.xi MApi_GFX_SetPaletteOpt( pPalArray, u32PalStart, u32PalEnd);
3271*53ee8cc1Swenshuai.xi }
3272*53ee8cc1Swenshuai.xi
3273*53ee8cc1Swenshuai.xi
3274*53ee8cc1Swenshuai.xi /******************************************************************************/
3275*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_SetAlpha for backward compatibility.
3276*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_SetAlpha section for detail.
3277*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_SetAlpha(MS_BOOL enable,MS_U8 coef,MS_U8 db_abl,MS_U8 abl_const)3278*53ee8cc1Swenshuai.xi void MDrv_GE_SetAlpha(MS_BOOL enable, MS_U8 coef, MS_U8 db_abl, MS_U8 abl_const)
3279*53ee8cc1Swenshuai.xi {
3280*53ee8cc1Swenshuai.xi MApi_GFX_SetAlpha(enable, (GFX_BlendCoef)coef, (GFX_AlphaSrcFrom)db_abl, abl_const); // DANGER
3281*53ee8cc1Swenshuai.xi }
3282*53ee8cc1Swenshuai.xi
3283*53ee8cc1Swenshuai.xi /******************************************************************************/
3284*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_SetPatchMode for backward compatibility.
3285*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_SetPatchMode section for detail.
3286*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_SetPatchMode(MS_BOOL repeat)3287*53ee8cc1Swenshuai.xi void MDrv_GE_SetPatchMode(MS_BOOL repeat)
3288*53ee8cc1Swenshuai.xi {
3289*53ee8cc1Swenshuai.xi MApi_GFX_SetPatchMode(repeat);
3290*53ee8cc1Swenshuai.xi }
3291*53ee8cc1Swenshuai.xi
3292*53ee8cc1Swenshuai.xi /******************************************************************************/
3293*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_SetNearestMode for backward compatibility.
3294*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_SetNearestMode section for detail.
3295*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_SetNearestMode(MS_BOOL enable)3296*53ee8cc1Swenshuai.xi void MDrv_GE_SetNearestMode(MS_BOOL enable)
3297*53ee8cc1Swenshuai.xi {
3298*53ee8cc1Swenshuai.xi MApi_GFX_SetNearestMode(enable);
3299*53ee8cc1Swenshuai.xi }
3300*53ee8cc1Swenshuai.xi
3301*53ee8cc1Swenshuai.xi /******************************************************************************/
3302*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_EnableAlphaBlending for backward compatibility.
3303*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_EnableAlphaBlending section for detail.
3304*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_EnableAlphaBlending(MS_BOOL enable)3305*53ee8cc1Swenshuai.xi GFX_Result MDrv_GE_EnableAlphaBlending(MS_BOOL enable)
3306*53ee8cc1Swenshuai.xi {
3307*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3308*53ee8cc1Swenshuai.xi
3309*53ee8cc1Swenshuai.xi return MApi_GFX_EnableAlphaBlending(enable);
3310*53ee8cc1Swenshuai.xi }
3311*53ee8cc1Swenshuai.xi
3312*53ee8cc1Swenshuai.xi /******************************************************************************/
3313*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_SetAlphaBlending for backward compatibility.
3314*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_SetAlphaBlending section for detail.
3315*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_SetAlphaBlending(GFX_BlendCoef blendcoef,MS_U8 u8ConstantAlpha)3316*53ee8cc1Swenshuai.xi GFX_Result MDrv_GE_SetAlphaBlending(GFX_BlendCoef blendcoef, MS_U8 u8ConstantAlpha)
3317*53ee8cc1Swenshuai.xi {
3318*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3319*53ee8cc1Swenshuai.xi
3320*53ee8cc1Swenshuai.xi return MApi_GFX_SetAlphaBlending( blendcoef, u8ConstantAlpha); // DANGER
3321*53ee8cc1Swenshuai.xi }
3322*53ee8cc1Swenshuai.xi
3323*53ee8cc1Swenshuai.xi /******************************************************************************/
3324*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_ClearFrameBufferByWord for backward compatibility.
3325*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_ClearFrameBufferByWord section for detail.
3326*53ee8cc1Swenshuai.xi /******************************************************************************/
msAPI_GE_ClearFrameBufferByWord(MS_PHY StrAddr,MS_U32 length,MS_U32 ClearValue)3327*53ee8cc1Swenshuai.xi void msAPI_GE_ClearFrameBufferByWord (MS_PHY StrAddr, MS_U32 length, MS_U32 ClearValue)
3328*53ee8cc1Swenshuai.xi {
3329*53ee8cc1Swenshuai.xi MApi_GFX_ClearFrameBufferByWord( StrAddr, length, ClearValue);
3330*53ee8cc1Swenshuai.xi }
3331*53ee8cc1Swenshuai.xi
3332*53ee8cc1Swenshuai.xi
3333*53ee8cc1Swenshuai.xi /******************************************************************************/
3334*53ee8cc1Swenshuai.xi ///Wrapper of MApi_GFX_SetIntensity for backward compatibility.
3335*53ee8cc1Swenshuai.xi ///Please see MApi_GFX_SetIntensity section for detail.
3336*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_GE_PE_SetIntensity(MS_U8 id,GFX_Buffer_Format fmt,MS_U32 * pcolor)3337*53ee8cc1Swenshuai.xi void MDrv_GE_PE_SetIntensity(MS_U8 id, GFX_Buffer_Format fmt, MS_U32* pcolor)
3338*53ee8cc1Swenshuai.xi {
3339*53ee8cc1Swenshuai.xi MApi_GFX_SetIntensity( id, fmt, pcolor);
3340*53ee8cc1Swenshuai.xi }
3341*53ee8cc1Swenshuai.xi
3342*53ee8cc1Swenshuai.xi /******************************************************************************/
3343*53ee8cc1Swenshuai.xi ///GFX STR Mode
3344*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GFX_SetPowerState(EN_POWER_MODE u16PowerState)3345*53ee8cc1Swenshuai.xi MS_U32 MApi_GFX_SetPowerState(EN_POWER_MODE u16PowerState)
3346*53ee8cc1Swenshuai.xi {
3347*53ee8cc1Swenshuai.xi MS_U32 u32Return = UTOPIA_STATUS_FAIL;
3348*53ee8cc1Swenshuai.xi APIGFX_CHECK_INIT();
3349*53ee8cc1Swenshuai.xi
3350*53ee8cc1Swenshuai.xi GFX_POWERSTATE_ARGS pGFXPowerStateArg;
3351*53ee8cc1Swenshuai.xi
3352*53ee8cc1Swenshuai.xi memset(&pGFXPowerStateArg, 0 , sizeof(GFX_POWERSTATE_ARGS));
3353*53ee8cc1Swenshuai.xi pGFXPowerStateArg.eGFX_PowerStateType = u16PowerState;
3354*53ee8cc1Swenshuai.xi
3355*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pGEInstance, MAPI_CMD_GFX_POWERSTATE, (void*)&pGFXPowerStateArg) != UTOPIA_STATUS_SUCCESS)
3356*53ee8cc1Swenshuai.xi {
3357*53ee8cc1Swenshuai.xi GFX_ERR("%s fail [LINE:%d]\n",__FUNCTION__, __LINE__);
3358*53ee8cc1Swenshuai.xi u32Return= UTOPIA_STATUS_FAIL;
3359*53ee8cc1Swenshuai.xi }
3360*53ee8cc1Swenshuai.xi else
3361*53ee8cc1Swenshuai.xi {
3362*53ee8cc1Swenshuai.xi u32Return= UTOPIA_STATUS_SUCCESS;
3363*53ee8cc1Swenshuai.xi }
3364*53ee8cc1Swenshuai.xi
3365*53ee8cc1Swenshuai.xi return u32Return;
3366*53ee8cc1Swenshuai.xi
3367*53ee8cc1Swenshuai.xi }
3368*53ee8cc1Swenshuai.xi #endif
3369*53ee8cc1Swenshuai.xi
3370*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_Init);
3371*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetDFBBldOP);
3372*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetRotate);
3373*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetSrcColorKey);
3374*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetDC_CSC_FMT);
3375*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetSrcBufferInfo);
3376*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetDstBufferInfo);
3377*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_EndDraw);
3378*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetClip);
3379*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetMirror);
3380*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_EnableAlphaBlending);
3381*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_WaitForTAGID);
3382*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_BeginDraw);
3383*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_EnableDFBBlending);
3384*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_BitBlt);
3385*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetROP2);
3386*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_RectFill);
3387*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetDstColorKey);
3388*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetNextTAGID);
3389*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_PollingTAGID);
3390*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_EnableVCmdQueue);
3391*53ee8cc1Swenshuai.xi EXPORT_SYMBOL(MApi_GFX_SetVCmdBuffer);
3392