xref: /utopia/UTPA2-700.0.x/modules/graphic/api/gfx/apiGFX.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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