xref: /utopia/UTPA2-700.0.x/modules/graphic/api/gfx/mapiGFX.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #include "MsTypes.h"
2*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
3*53ee8cc1Swenshuai.xi #include <stdio.h>
4*53ee8cc1Swenshuai.xi #include <string.h>
5*53ee8cc1Swenshuai.xi #else
6*53ee8cc1Swenshuai.xi #include <linux/slab.h>
7*53ee8cc1Swenshuai.xi #endif
8*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
9*53ee8cc1Swenshuai.xi #include "utopia.h"
10*53ee8cc1Swenshuai.xi #include "_apigfx_type.h"
11*53ee8cc1Swenshuai.xi #include "apiGFX.h"
12*53ee8cc1Swenshuai.xi #include "apiGFX_v2.h"
13*53ee8cc1Swenshuai.xi #include "drvGE.h"
14*53ee8cc1Swenshuai.xi #include "halGE.h"
15*53ee8cc1Swenshuai.xi #include "drvGE_private.h"
16*53ee8cc1Swenshuai.xi #include "apiGFX_private.h"
17*53ee8cc1Swenshuai.xi #include "MsOS.h"
18*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
19*53ee8cc1Swenshuai.xi #include <asm/div64.h>
20*53ee8cc1Swenshuai.xi #define do_remain(x,y) do_div(x,y)
21*53ee8cc1Swenshuai.xi #else
22*53ee8cc1Swenshuai.xi #define do_div(x,y) ((x)/=(y))
23*53ee8cc1Swenshuai.xi #define do_remain(x,y) ((x)%(y))
24*53ee8cc1Swenshuai.xi #endif
25*53ee8cc1Swenshuai.xi #include "ULog.h"
26*53ee8cc1Swenshuai.xi 
27*53ee8cc1Swenshuai.xi //==========================================================
28*53ee8cc1Swenshuai.xi //Macro and Define
29*53ee8cc1Swenshuai.xi //==========================================================
30*53ee8cc1Swenshuai.xi #if(GFX_UTOPIA20)
31*53ee8cc1Swenshuai.xi #define g_apiGFXLocal   psGFXInstPri->GFXPrivate_g_apiGFXLocal
32*53ee8cc1Swenshuai.xi #endif
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
35*53ee8cc1Swenshuai.xi #define CheckSize(u32InputSize, u32StuctSize, eCmd) do{\
36*53ee8cc1Swenshuai.xi                                     }while(0)
37*53ee8cc1Swenshuai.xi #else
38*53ee8cc1Swenshuai.xi #define CheckSize(u32InputSize, u32StuctSize, eCmd) do{\
39*53ee8cc1Swenshuai.xi                                         if(u32InputSize != u32StuctSize)\
40*53ee8cc1Swenshuai.xi                                         {\
41*53ee8cc1Swenshuai.xi                                             GFX_DEBUG_MSG(GFX_ERR("[%s][%d] GE Check Size Error, Invalid input structure size :0x%tx , except structure size is 0x%tx; [eCmd=%d]\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32InputSize, (ptrdiff_t)u32StuctSize, eCmd));\
42*53ee8cc1Swenshuai.xi                                             API_GE_RETURN(g_apiGFXLocal.g_pGEContext, UTOPIA_STATUS_FAIL, eCmd);\
43*53ee8cc1Swenshuai.xi                                         }\
44*53ee8cc1Swenshuai.xi                                     }while(0)
45*53ee8cc1Swenshuai.xi #endif
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi #define APICheckU02()               GFX_INSTANT_PRIVATE*    psGFXInstPri        =NULL;\
48*53ee8cc1Swenshuai.xi                                     UtopiaInstanceGetPrivate(pInstance, (void**)&psGFXInstPri);
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi #if (GE_API_MUTEX)
51*53ee8cc1Swenshuai.xi static MS_U32 u32CheckMutexCnt=0;
52*53ee8cc1Swenshuai.xi #define _GFX_CheckMutex(_ret)  do{\
53*53ee8cc1Swenshuai.xi                                         if(u32CheckMutexCnt !=0)\
54*53ee8cc1Swenshuai.xi                                         {\
55*53ee8cc1Swenshuai.xi                                             GFX_DBUG("\33[0;31m [%s][%d] Entry/Return Not pair!!!!! u32CheckMutexCnt=%td \33[m;\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32CheckMutexCnt);\
56*53ee8cc1Swenshuai.xi                                         }\
57*53ee8cc1Swenshuai.xi                                     }while(0)
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi 
60*53ee8cc1Swenshuai.xi #define GET_GE_ENTRY(pGECtx)       do{\
61*53ee8cc1Swenshuai.xi                                         _GE_MUXTEX_ENTRY(pGECtx, E_GE_POOL_ID_INTERNAL_VARIABLE);\
62*53ee8cc1Swenshuai.xi                                         if(u32CheckMutexCnt!=0)\
63*53ee8cc1Swenshuai.xi                                             GFX_DBUG("\33[0;31m [%s][%d] Entry not zero!!!! u32CheckMutexCnt=%tu \33[m;\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32CheckMutexCnt);\
64*53ee8cc1Swenshuai.xi                                         u32CheckMutexCnt++;\
65*53ee8cc1Swenshuai.xi                                     }while(0)
66*53ee8cc1Swenshuai.xi 
67*53ee8cc1Swenshuai.xi #define RELEASE_GE_RETURN(pGECtx, _ret) do{\
68*53ee8cc1Swenshuai.xi                                         u32CheckMutexCnt--;\
69*53ee8cc1Swenshuai.xi                                         _GFX_CheckMutex(_ret);\
70*53ee8cc1Swenshuai.xi                                         _GE_MUXTEX_RETURN(pGECtx, E_GE_POOL_ID_INTERNAL_VARIABLE);\
71*53ee8cc1Swenshuai.xi                                     }while(0)
72*53ee8cc1Swenshuai.xi 
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi #if GE_MUTEX_DBG
75*53ee8cc1Swenshuai.xi     #define API_GE_ENTRY(pGECtx)     do{\
76*53ee8cc1Swenshuai.xi                                         GET_GE_ENTRY(pGECtx);\
77*53ee8cc1Swenshuai.xi                                     }while(0)
78*53ee8cc1Swenshuai.xi 
79*53ee8cc1Swenshuai.xi     #define API_GE_RETURN(pGECtx, _ret, cmd) do{\
80*53ee8cc1Swenshuai.xi                                         RELEASE_GE_RETURN(pGECtx, _ret);\
81*53ee8cc1Swenshuai.xi                                         return _ret;\
82*53ee8cc1Swenshuai.xi                                     }while(0)
83*53ee8cc1Swenshuai.xi #else/*In order to deduce code size*/
84*53ee8cc1Swenshuai.xi     #define API_GE_ENTRY(pGECtx)    do{\
85*53ee8cc1Swenshuai.xi                                         _API_GE_ENTRY(pGECtx);\
86*53ee8cc1Swenshuai.xi                                     }while(0)
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi     #define API_GE_RETURN(pGECtx, _ret , cmd) do{\
89*53ee8cc1Swenshuai.xi                                         _API_GE_RETURN(pGECtx, _ret);\
90*53ee8cc1Swenshuai.xi                                         return _ret;\
91*53ee8cc1Swenshuai.xi                                     }while(0)
92*53ee8cc1Swenshuai.xi #endif
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi //===========================================================================================================================================
95*53ee8cc1Swenshuai.xi #else
96*53ee8cc1Swenshuai.xi     #define API_GE_ENTRY(pGECtx)    do{\
97*53ee8cc1Swenshuai.xi                                     }while(0)
98*53ee8cc1Swenshuai.xi 
99*53ee8cc1Swenshuai.xi     #define API_GE_RETURN(pGECtx, _ret , cmd) do{\
100*53ee8cc1Swenshuai.xi                                         return _ret;\
101*53ee8cc1Swenshuai.xi                                     }while(0)
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi #endif
104*53ee8cc1Swenshuai.xi // API level could only contains local parameters
105*53ee8cc1Swenshuai.xi #define DYNAMIC_POWER_ON_OFF 0UL
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi #define ABS(x)   ((x) > 0 ? (x) : -(x))
108*53ee8cc1Swenshuai.xi 
109*53ee8cc1Swenshuai.xi #define SETUP_DDA(xs,ys,xe,ye,dda)         \
110*53ee8cc1Swenshuai.xi      do {                                  \
111*53ee8cc1Swenshuai.xi           int dx = xe - xs;                \
112*53ee8cc1Swenshuai.xi           int dy = ye - ys;                \
113*53ee8cc1Swenshuai.xi           int result = 0;                  \
114*53ee8cc1Swenshuai.xi           dda.xi = xs;                     \
115*53ee8cc1Swenshuai.xi           if (dy != 0) {                   \
116*53ee8cc1Swenshuai.xi                result = dx;                \
117*53ee8cc1Swenshuai.xi                do_div(result,dy);          \
118*53ee8cc1Swenshuai.xi                dda.mi = result;            \
119*53ee8cc1Swenshuai.xi                dda.mf = 2*( do_remain(dx,dy) ); \
120*53ee8cc1Swenshuai.xi                dda.xf = -dy;               \
121*53ee8cc1Swenshuai.xi                dda._2dy = 2 * dy;          \
122*53ee8cc1Swenshuai.xi                if (dda.mf < 0) {           \
123*53ee8cc1Swenshuai.xi                     dda.mf += 2 * ABS(dy); \
124*53ee8cc1Swenshuai.xi                     dda.mi--;              \
125*53ee8cc1Swenshuai.xi                }                           \
126*53ee8cc1Swenshuai.xi           }                                \
127*53ee8cc1Swenshuai.xi           else {                           \
128*53ee8cc1Swenshuai.xi                dda.mi = 0;                 \
129*53ee8cc1Swenshuai.xi                dda.mf = 0;                 \
130*53ee8cc1Swenshuai.xi                dda.xf = 0;                 \
131*53ee8cc1Swenshuai.xi                dda._2dy = 0;               \
132*53ee8cc1Swenshuai.xi           }                                \
133*53ee8cc1Swenshuai.xi      } while (0)
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi #define INC_DDA(dda)                       \
137*53ee8cc1Swenshuai.xi      do {                                  \
138*53ee8cc1Swenshuai.xi           dda.xi += dda.mi;                \
139*53ee8cc1Swenshuai.xi           dda.xf += dda.mf;                \
140*53ee8cc1Swenshuai.xi           if (dda.xf > 0) {                \
141*53ee8cc1Swenshuai.xi                dda.xi++;                   \
142*53ee8cc1Swenshuai.xi                dda.xf -= dda._2dy;         \
143*53ee8cc1Swenshuai.xi           }                                \
144*53ee8cc1Swenshuai.xi      } while (0)
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi typedef struct {
147*53ee8cc1Swenshuai.xi     int xi;
148*53ee8cc1Swenshuai.xi     int xf;
149*53ee8cc1Swenshuai.xi     int mi;
150*53ee8cc1Swenshuai.xi     int mf;
151*53ee8cc1Swenshuai.xi     int _2dy;
152*53ee8cc1Swenshuai.xi } DDA;
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #if (!GFX_UTOPIA20)
155*53ee8cc1Swenshuai.xi GFX_API_LOCAL g_apiGFXLocal =
156*53ee8cc1Swenshuai.xi {
157*53ee8cc1Swenshuai.xi u32dbglvl: -1,
158*53ee8cc1Swenshuai.xi fpGetBMP:NULL,
159*53ee8cc1Swenshuai.xi fpGetFont:NULL,
160*53ee8cc1Swenshuai.xi _blendcoef:COEF_ASRC,
161*53ee8cc1Swenshuai.xi _angle:GEROTATE_0,
162*53ee8cc1Swenshuai.xi _bNearest:FALSE,
163*53ee8cc1Swenshuai.xi _bPatchMode:FALSE,
164*53ee8cc1Swenshuai.xi _bMirrorH:FALSE,
165*53ee8cc1Swenshuai.xi _bMirrorV:FALSE,
166*53ee8cc1Swenshuai.xi _bDstMirrorH:FALSE,
167*53ee8cc1Swenshuai.xi _bDstMirrorV:FALSE,
168*53ee8cc1Swenshuai.xi _bItalic:FALSE,
169*53ee8cc1Swenshuai.xi _line_enable:FALSE,
170*53ee8cc1Swenshuai.xi _line_pattern:0x00,
171*53ee8cc1Swenshuai.xi _line_factor:0,
172*53ee8cc1Swenshuai.xi #ifdef DBGLOG
173*53ee8cc1Swenshuai.xi _bOutFileLog:FALSE,
174*53ee8cc1Swenshuai.xi _pu16OutLogAddr:NULL,
175*53ee8cc1Swenshuai.xi _u16LogCount:0,
176*53ee8cc1Swenshuai.xi #endif
177*53ee8cc1Swenshuai.xi g_pGEContext:NULL,
178*53ee8cc1Swenshuai.xi pGeChipProperty:NULL,
179*53ee8cc1Swenshuai.xi u32LockStatus:0,
180*53ee8cc1Swenshuai.xi _bInit:0,
181*53ee8cc1Swenshuai.xi u32geRgbColor:0,
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi };
184*53ee8cc1Swenshuai.xi #endif
185*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
186*53ee8cc1Swenshuai.xi static MS_BOOL GFX_SetFireInfo(void* pInstance,GFX_FireInfo* pFireInfo);
187*53ee8cc1Swenshuai.xi #endif
188*53ee8cc1Swenshuai.xi #if (GE_API_MUTEX)
_API_GE_ENTRY(GE_Context * pGECtx)189*53ee8cc1Swenshuai.xi static void _API_GE_ENTRY(GE_Context* pGECtx)
190*53ee8cc1Swenshuai.xi {
191*53ee8cc1Swenshuai.xi     GET_GE_ENTRY(pGECtx);
192*53ee8cc1Swenshuai.xi }
193*53ee8cc1Swenshuai.xi 
_API_GE_RETURN(GE_Context * pGECtx,MS_U16 ret)194*53ee8cc1Swenshuai.xi static MS_U16 _API_GE_RETURN(GE_Context* pGECtx, MS_U16 ret)
195*53ee8cc1Swenshuai.xi {
196*53ee8cc1Swenshuai.xi     RELEASE_GE_RETURN(pGECtx, ret);
197*53ee8cc1Swenshuai.xi     return ret;
198*53ee8cc1Swenshuai.xi }
199*53ee8cc1Swenshuai.xi #endif
200*53ee8cc1Swenshuai.xi 
MapRet(GFX_Result eGFXResoult)201*53ee8cc1Swenshuai.xi static MS_S32 MapRet(GFX_Result eGFXResoult)
202*53ee8cc1Swenshuai.xi {
203*53ee8cc1Swenshuai.xi     MS_U32  u32Ret= UTOPIA_STATUS_FAIL;
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi     switch(eGFXResoult)
206*53ee8cc1Swenshuai.xi     {
207*53ee8cc1Swenshuai.xi         case GFX_FAIL:
208*53ee8cc1Swenshuai.xi                u32Ret = UTOPIA_STATUS_FAIL;
209*53ee8cc1Swenshuai.xi                break;
210*53ee8cc1Swenshuai.xi         case GFX_SUCCESS:
211*53ee8cc1Swenshuai.xi                u32Ret = UTOPIA_STATUS_SUCCESS;
212*53ee8cc1Swenshuai.xi                break;
213*53ee8cc1Swenshuai.xi         case GFX_DRV_NOT_SUPPORT:
214*53ee8cc1Swenshuai.xi                u32Ret = UTOPIA_STATUS_NOT_SUPPORTED;
215*53ee8cc1Swenshuai.xi                break;
216*53ee8cc1Swenshuai.xi         case GFX_NON_ALIGN_ADDRESS:
217*53ee8cc1Swenshuai.xi         case GFX_NON_ALIGN_PITCH:
218*53ee8cc1Swenshuai.xi         case GFX_INVALID_PARAMETERS:
219*53ee8cc1Swenshuai.xi                u32Ret = UTOPIA_STATUS_NOT_SUPPORTED;
220*53ee8cc1Swenshuai.xi                break;
221*53ee8cc1Swenshuai.xi         default:
222*53ee8cc1Swenshuai.xi                break;
223*53ee8cc1Swenshuai.xi     }
224*53ee8cc1Swenshuai.xi     return u32Ret;
225*53ee8cc1Swenshuai.xi }
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
MApi_GFX_MapStrSCKType(MS_U32 gfxOP,MS_U32 * geOP)228*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapStrSCKType(MS_U32 gfxOP, MS_U32* geOP)
229*53ee8cc1Swenshuai.xi {
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi     switch(gfxOP)
232*53ee8cc1Swenshuai.xi     {
233*53ee8cc1Swenshuai.xi         case GFX_DONOTHING:
234*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_DONOTHING;
235*53ee8cc1Swenshuai.xi             break;
236*53ee8cc1Swenshuai.xi         case GFX_NEAREST:
237*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_NEAREST;
238*53ee8cc1Swenshuai.xi             break;
239*53ee8cc1Swenshuai.xi         case GFX_REPLACE_KEY_2_CUS:
240*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_REPLACE_KEY_2_CUS;
241*53ee8cc1Swenshuai.xi             break;
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi         default:
244*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
245*53ee8cc1Swenshuai.xi             break;
246*53ee8cc1Swenshuai.xi     }
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
249*53ee8cc1Swenshuai.xi }
250*53ee8cc1Swenshuai.xi 
MApi_GFX_MapYUVOp(MS_U32 OpType,MS_U32 gfxOp,MS_U32 * geOP)251*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapYUVOp(MS_U32 OpType, MS_U32 gfxOp, MS_U32* geOP)
252*53ee8cc1Swenshuai.xi {
253*53ee8cc1Swenshuai.xi 
254*53ee8cc1Swenshuai.xi     switch(OpType)
255*53ee8cc1Swenshuai.xi     {
256*53ee8cc1Swenshuai.xi         case GFX_YUV_OP1:
257*53ee8cc1Swenshuai.xi             switch(gfxOp)
258*53ee8cc1Swenshuai.xi             {
259*53ee8cc1Swenshuai.xi                 case GFX_YUV_RGB2YUV_PC:
260*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_RGB2YUV_PC;
261*53ee8cc1Swenshuai.xi                     break;
262*53ee8cc1Swenshuai.xi                 case GFX_YUV_RGB2YUV_255:
263*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_RGB2YUV_255;
264*53ee8cc1Swenshuai.xi                     break;
265*53ee8cc1Swenshuai.xi                 default:
266*53ee8cc1Swenshuai.xi                     return (MS_U32)GFX_INVALID_PARAMETERS;
267*53ee8cc1Swenshuai.xi                     break;
268*53ee8cc1Swenshuai.xi             }
269*53ee8cc1Swenshuai.xi             break;
270*53ee8cc1Swenshuai.xi         case GFX_YUV_OP2:
271*53ee8cc1Swenshuai.xi             switch(gfxOp)
272*53ee8cc1Swenshuai.xi             {
273*53ee8cc1Swenshuai.xi                 case GFX_YUV_OUT_255:
274*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_OUT_255;
275*53ee8cc1Swenshuai.xi                     break;
276*53ee8cc1Swenshuai.xi                 case GFX_YUV_OUT_PC:
277*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_OUT_PC;
278*53ee8cc1Swenshuai.xi                     break;
279*53ee8cc1Swenshuai.xi                 default:
280*53ee8cc1Swenshuai.xi                     return (MS_U32)GFX_INVALID_PARAMETERS;
281*53ee8cc1Swenshuai.xi                     break;
282*53ee8cc1Swenshuai.xi             }
283*53ee8cc1Swenshuai.xi             break;
284*53ee8cc1Swenshuai.xi         case GFX_YUV_OP3:
285*53ee8cc1Swenshuai.xi             switch(gfxOp)
286*53ee8cc1Swenshuai.xi             {
287*53ee8cc1Swenshuai.xi                 case GFX_YUV_IN_255:
288*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_IN_255;
289*53ee8cc1Swenshuai.xi                     break;
290*53ee8cc1Swenshuai.xi                 case GFX_YUV_IN_127:
291*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_IN_127;
292*53ee8cc1Swenshuai.xi                     break;
293*53ee8cc1Swenshuai.xi                 default:
294*53ee8cc1Swenshuai.xi                     return (MS_U32)GFX_INVALID_PARAMETERS;
295*53ee8cc1Swenshuai.xi                     break;
296*53ee8cc1Swenshuai.xi             }
297*53ee8cc1Swenshuai.xi             break;
298*53ee8cc1Swenshuai.xi         case GFX_YUV_OP4:
299*53ee8cc1Swenshuai.xi             switch(gfxOp)
300*53ee8cc1Swenshuai.xi             {
301*53ee8cc1Swenshuai.xi                 case GFX_YUV_YVYU:
302*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_YVYU;
303*53ee8cc1Swenshuai.xi                     break;
304*53ee8cc1Swenshuai.xi                 case GFX_YUV_YUYV:
305*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_YUYV;
306*53ee8cc1Swenshuai.xi                     break;
307*53ee8cc1Swenshuai.xi                 case GFX_YUV_VYUY:
308*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_VYUY;
309*53ee8cc1Swenshuai.xi                     break;
310*53ee8cc1Swenshuai.xi                 case GFX_YUV_UYVY:
311*53ee8cc1Swenshuai.xi                     *geOP = (MS_U32)E_GE_YUV_UYVY;
312*53ee8cc1Swenshuai.xi                     break;
313*53ee8cc1Swenshuai.xi                 default:
314*53ee8cc1Swenshuai.xi                     return (MS_U32)GFX_INVALID_PARAMETERS;
315*53ee8cc1Swenshuai.xi                     break;
316*53ee8cc1Swenshuai.xi             }
317*53ee8cc1Swenshuai.xi             break;
318*53ee8cc1Swenshuai.xi         default:
319*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
320*53ee8cc1Swenshuai.xi             break;
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi     }
323*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
324*53ee8cc1Swenshuai.xi }
325*53ee8cc1Swenshuai.xi 
MApi_GFX_MapACmp(MS_U32 gfxACmp,MS_U32 * geACmp)326*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapACmp(MS_U32 gfxACmp, MS_U32* geACmp )
327*53ee8cc1Swenshuai.xi {
328*53ee8cc1Swenshuai.xi 
329*53ee8cc1Swenshuai.xi     switch(gfxACmp)
330*53ee8cc1Swenshuai.xi     {
331*53ee8cc1Swenshuai.xi         case GFX_ACMP_OP_MAX:
332*53ee8cc1Swenshuai.xi             *geACmp = (MS_U32)E_GE_ACMP_OP_MAX;
333*53ee8cc1Swenshuai.xi             break;
334*53ee8cc1Swenshuai.xi         case GFX_GE_ACMP_OP_MIN:
335*53ee8cc1Swenshuai.xi             *geACmp = (MS_U32)E_GE_ACMP_OP_MIN;
336*53ee8cc1Swenshuai.xi             break;
337*53ee8cc1Swenshuai.xi         default:
338*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
339*53ee8cc1Swenshuai.xi             break;
340*53ee8cc1Swenshuai.xi     }
341*53ee8cc1Swenshuai.xi 
342*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
343*53ee8cc1Swenshuai.xi }
344*53ee8cc1Swenshuai.xi 
MApi_GFX_MapBLDCOEF(MS_U32 gfxCOEF,MS_U32 * geCOEF)345*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapBLDCOEF(MS_U32 gfxCOEF, MS_U32* geCOEF )
346*53ee8cc1Swenshuai.xi {
347*53ee8cc1Swenshuai.xi     switch(gfxCOEF)
348*53ee8cc1Swenshuai.xi     {
349*53ee8cc1Swenshuai.xi         case COEF_ONE:
350*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ONE;
351*53ee8cc1Swenshuai.xi             break;
352*53ee8cc1Swenshuai.xi         case COEF_CONST:
353*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_CONST;
354*53ee8cc1Swenshuai.xi             break;
355*53ee8cc1Swenshuai.xi         case COEF_ASRC:
356*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ASRC;
357*53ee8cc1Swenshuai.xi             break;
358*53ee8cc1Swenshuai.xi         case COEF_ADST:
359*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ADST;
360*53ee8cc1Swenshuai.xi             break;
361*53ee8cc1Swenshuai.xi         case COEF_ZERO:
362*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ZERO;
363*53ee8cc1Swenshuai.xi             break;
364*53ee8cc1Swenshuai.xi         case COEF_1_CONST:
365*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_CONST_INV;
366*53ee8cc1Swenshuai.xi             break;
367*53ee8cc1Swenshuai.xi         case COEF_1_ASRC:
368*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ASRC_INV;
369*53ee8cc1Swenshuai.xi             break;
370*53ee8cc1Swenshuai.xi         case COEF_1_ADST:
371*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ADST_INV;
372*53ee8cc1Swenshuai.xi             break;
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi         case COEF_ROP8_ALPHA:
375*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ROP8_ALPHA;
376*53ee8cc1Swenshuai.xi             break;
377*53ee8cc1Swenshuai.xi         case COEF_ROP8_SRCOVER:
378*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ROP8_SRCOVER;
379*53ee8cc1Swenshuai.xi             break;
380*53ee8cc1Swenshuai.xi         case COEF_ROP8_DSTOVER:
381*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ROP8_DSTOVER;
382*53ee8cc1Swenshuai.xi             break;
383*53ee8cc1Swenshuai.xi         case COEF_CONST_SRC:
384*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_ALPHA_ADST;
385*53ee8cc1Swenshuai.xi             break;
386*53ee8cc1Swenshuai.xi         case COEF_1_CONST_SRC:
387*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_INV_CONST;
388*53ee8cc1Swenshuai.xi             break;
389*53ee8cc1Swenshuai.xi         case COEF_SRC_ATOP_DST:
390*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_SRC_ATOP_DST;
391*53ee8cc1Swenshuai.xi             break;
392*53ee8cc1Swenshuai.xi         case COEF_DST_ATOP_SRC:
393*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_DST_ATOP_SRC;
394*53ee8cc1Swenshuai.xi             break;
395*53ee8cc1Swenshuai.xi         case COEF_SRC_XOR_DST:
396*53ee8cc1Swenshuai.xi             *geCOEF = (MS_U32)E_GE_BLEND_SRC_XOR_DST;
397*53ee8cc1Swenshuai.xi             break;
398*53ee8cc1Swenshuai.xi         default:
399*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
400*53ee8cc1Swenshuai.xi             break;
401*53ee8cc1Swenshuai.xi     }
402*53ee8cc1Swenshuai.xi 
403*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
404*53ee8cc1Swenshuai.xi }
405*53ee8cc1Swenshuai.xi 
MApi_GFX_MapABLCOEF(MS_U32 gfxABL,MS_U32 * geABL)406*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapABLCOEF(MS_U32 gfxABL, MS_U32* geABL )
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi 
409*53ee8cc1Swenshuai.xi     switch(gfxABL)
410*53ee8cc1Swenshuai.xi     {
411*53ee8cc1Swenshuai.xi         case ABL_FROM_CONST:
412*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_CONST;
413*53ee8cc1Swenshuai.xi             break;
414*53ee8cc1Swenshuai.xi         case ABL_FROM_ASRC:
415*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ASRC;
416*53ee8cc1Swenshuai.xi             break;
417*53ee8cc1Swenshuai.xi         case ABL_FROM_ADST:
418*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ADST;
419*53ee8cc1Swenshuai.xi             break;
420*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_SRC:
421*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_SRC;
422*53ee8cc1Swenshuai.xi             break;
423*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_IN:
424*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_IN;
425*53ee8cc1Swenshuai.xi             break;
426*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_DSTOUT:
427*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_DSTOUT;
428*53ee8cc1Swenshuai.xi             break;
429*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_SRCOUT:
430*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_SRCOUT;
431*53ee8cc1Swenshuai.xi             break;
432*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_OVER:
433*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_OVER;
434*53ee8cc1Swenshuai.xi             break;
435*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_INV_CONST:
436*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_INV_CONST;
437*53ee8cc1Swenshuai.xi             break;
438*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_INV_ASRC:
439*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_INV_ASRC;
440*53ee8cc1Swenshuai.xi             break;
441*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_INV_ADST:
442*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_INV_ADST;
443*53ee8cc1Swenshuai.xi             break;
444*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_SRC_ATOP_DST:
445*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_SRC_ATOP_DST;
446*53ee8cc1Swenshuai.xi             break;
447*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_DST_ATOP_SRC:
448*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_DST_ATOP_SRC;
449*53ee8cc1Swenshuai.xi             break;
450*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_SRC_XOR_DST:
451*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_SRC_XOR_DST;
452*53ee8cc1Swenshuai.xi             break;
453*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_INV_SRC_ATOP_DST:
454*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_INV_SRC_ATOP_DST;
455*53ee8cc1Swenshuai.xi             break;
456*53ee8cc1Swenshuai.xi         case ABL_FROM_ROP8_INV_DST_ATOP_SRC:
457*53ee8cc1Swenshuai.xi             *geABL = (MS_U32)E_GE_ALPHA_ROP8_INV_DST_ATOP_SRC;
458*53ee8cc1Swenshuai.xi             break;
459*53ee8cc1Swenshuai.xi         default:
460*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
461*53ee8cc1Swenshuai.xi             break;
462*53ee8cc1Swenshuai.xi     }
463*53ee8cc1Swenshuai.xi 
464*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
465*53ee8cc1Swenshuai.xi }
466*53ee8cc1Swenshuai.xi 
MApi_GFX_MapROP2(MS_U32 gfxROP,MS_U32 * geROP)467*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapROP2(MS_U32 gfxROP, MS_U32* geROP )
468*53ee8cc1Swenshuai.xi {
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi     switch(gfxROP)
471*53ee8cc1Swenshuai.xi     {
472*53ee8cc1Swenshuai.xi         case ROP2_OP_ZERO:
473*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_ZERO;
474*53ee8cc1Swenshuai.xi             break;
475*53ee8cc1Swenshuai.xi         case ROP2_OP_NOT_PS_OR_PD:
476*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_NOT_PS_OR_PD;
477*53ee8cc1Swenshuai.xi             break;
478*53ee8cc1Swenshuai.xi         case ROP2_OP_NS_AND_PD:
479*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_NS_AND_PD;
480*53ee8cc1Swenshuai.xi             break;
481*53ee8cc1Swenshuai.xi         case ROP2_OP_NS:
482*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_NS;
483*53ee8cc1Swenshuai.xi             break;
484*53ee8cc1Swenshuai.xi         case ROP2_OP_PS_AND_ND:
485*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PS_AND_ND;
486*53ee8cc1Swenshuai.xi             break;
487*53ee8cc1Swenshuai.xi         case ROP2_OP_ND:
488*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_ND;
489*53ee8cc1Swenshuai.xi             break;
490*53ee8cc1Swenshuai.xi         case ROP2_OP_PS_XOR_PD:
491*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PS_XOR_PD;
492*53ee8cc1Swenshuai.xi             break;
493*53ee8cc1Swenshuai.xi         case ROP2_OP_NOT_PS_AND_PD:
494*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_NOT_PS_AND_PD;
495*53ee8cc1Swenshuai.xi             break;
496*53ee8cc1Swenshuai.xi         case ROP2_OP_PS_AND_PD:
497*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PS_AND_PD;
498*53ee8cc1Swenshuai.xi             break;
499*53ee8cc1Swenshuai.xi         case ROP2_OP_NOT_PS_XOR_PD:
500*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_NOT_PS_XOR_PD;
501*53ee8cc1Swenshuai.xi             break;
502*53ee8cc1Swenshuai.xi         case ROP2_OP_PD:
503*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PD;
504*53ee8cc1Swenshuai.xi             break;
505*53ee8cc1Swenshuai.xi         case ROP2_OP_NS_OR_PD:
506*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_NS_OR_PD;
507*53ee8cc1Swenshuai.xi             break;
508*53ee8cc1Swenshuai.xi         case ROP2_OP_PS:
509*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PS;
510*53ee8cc1Swenshuai.xi             break;
511*53ee8cc1Swenshuai.xi         case ROP2_OP_PS_OR_ND:
512*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PS_OR_ND;
513*53ee8cc1Swenshuai.xi             break;
514*53ee8cc1Swenshuai.xi         case ROP2_OP_PD_OR_PS:
515*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_PD_OR_PS;
516*53ee8cc1Swenshuai.xi             break;
517*53ee8cc1Swenshuai.xi         case ROP2_OP_ONE:
518*53ee8cc1Swenshuai.xi             *geROP = (MS_U32)E_GE_ROP2_ONE;
519*53ee8cc1Swenshuai.xi             break;
520*53ee8cc1Swenshuai.xi         default:
521*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
522*53ee8cc1Swenshuai.xi             break;
523*53ee8cc1Swenshuai.xi     }
524*53ee8cc1Swenshuai.xi 
525*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi 
528*53ee8cc1Swenshuai.xi 
529*53ee8cc1Swenshuai.xi 
MApi_GFX_MapCKOP(MS_U32 gfxCKOP,MS_U32 * geCKOP)530*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapCKOP(MS_U32 gfxCKOP, MS_U32* geCKOP)
531*53ee8cc1Swenshuai.xi {
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi     switch(gfxCKOP)
534*53ee8cc1Swenshuai.xi     {
535*53ee8cc1Swenshuai.xi         case CK_OP_EQUAL:
536*53ee8cc1Swenshuai.xi             *geCKOP = (MS_U32)E_GE_CK_EQ;
537*53ee8cc1Swenshuai.xi             break;
538*53ee8cc1Swenshuai.xi         case CK_OP_NOT_EQUAL:
539*53ee8cc1Swenshuai.xi             *geCKOP = (MS_U32)E_GE_CK_NE;
540*53ee8cc1Swenshuai.xi             break;
541*53ee8cc1Swenshuai.xi         case AK_OP_EQUAL:
542*53ee8cc1Swenshuai.xi             *geCKOP = (MS_U32)E_GE_ALPHA_EQ;
543*53ee8cc1Swenshuai.xi             break;
544*53ee8cc1Swenshuai.xi         case AK_OP_NOT_EQUAL:
545*53ee8cc1Swenshuai.xi             *geCKOP = (MS_U32)E_GE_ALPHA_NE;
546*53ee8cc1Swenshuai.xi             break;
547*53ee8cc1Swenshuai.xi         default:
548*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
549*53ee8cc1Swenshuai.xi             break;
550*53ee8cc1Swenshuai.xi     }
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
553*53ee8cc1Swenshuai.xi }
554*53ee8cc1Swenshuai.xi 
GFX_RectBltFlags(void * pInstance)555*53ee8cc1Swenshuai.xi static MS_U32 GFX_RectBltFlags(void* pInstance) // for legacy driver BitBlt and FillRect
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi     MS_U32 flags = 0;
558*53ee8cc1Swenshuai.xi     APICheckU02();
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi     if (g_apiGFXLocal._bItalic)
561*53ee8cc1Swenshuai.xi     {
562*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_ITALIC;
563*53ee8cc1Swenshuai.xi     }
564*53ee8cc1Swenshuai.xi     if (g_apiGFXLocal._bMirrorH)
565*53ee8cc1Swenshuai.xi     {
566*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_MIRROR_H;
567*53ee8cc1Swenshuai.xi     }
568*53ee8cc1Swenshuai.xi     if (g_apiGFXLocal._bMirrorV)
569*53ee8cc1Swenshuai.xi     {
570*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_MIRROR_V;
571*53ee8cc1Swenshuai.xi     }
572*53ee8cc1Swenshuai.xi     if (g_apiGFXLocal._bDstMirrorH)
573*53ee8cc1Swenshuai.xi     {
574*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_DST_MIRROR_H;
575*53ee8cc1Swenshuai.xi     }
576*53ee8cc1Swenshuai.xi     if (g_apiGFXLocal._bDstMirrorV)
577*53ee8cc1Swenshuai.xi     {
578*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_DST_MIRROR_V;
579*53ee8cc1Swenshuai.xi     }
580*53ee8cc1Swenshuai.xi     switch(g_apiGFXLocal._angle)
581*53ee8cc1Swenshuai.xi     {
582*53ee8cc1Swenshuai.xi     case GEROTATE_90:
583*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_ROTATE_90;
584*53ee8cc1Swenshuai.xi         break;
585*53ee8cc1Swenshuai.xi     case GEROTATE_180:
586*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_ROTATE_180;
587*53ee8cc1Swenshuai.xi         break;
588*53ee8cc1Swenshuai.xi     case GEROTATE_270:
589*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_ROTATE_270;
590*53ee8cc1Swenshuai.xi         break;
591*53ee8cc1Swenshuai.xi     default:
592*53ee8cc1Swenshuai.xi         break;
593*53ee8cc1Swenshuai.xi     }
594*53ee8cc1Swenshuai.xi     if (g_apiGFXLocal._bNearest)
595*53ee8cc1Swenshuai.xi     {
596*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_STRETCH_NEAREST;
597*53ee8cc1Swenshuai.xi     }
598*53ee8cc1Swenshuai.xi     return flags;
599*53ee8cc1Swenshuai.xi }
600*53ee8cc1Swenshuai.xi 
MApi_GFX_MapVCMQSZ(MS_U32 gfxOP,MS_U32 * geOP)601*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapVCMQSZ(MS_U32 gfxOP, MS_U32* geOP)
602*53ee8cc1Swenshuai.xi {
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi     switch(gfxOP)
605*53ee8cc1Swenshuai.xi     {
606*53ee8cc1Swenshuai.xi         case GFX_VCMD_4K:
607*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_4K;
608*53ee8cc1Swenshuai.xi             break;
609*53ee8cc1Swenshuai.xi         case GFX_VCMD_8K:
610*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_8K;
611*53ee8cc1Swenshuai.xi             break;
612*53ee8cc1Swenshuai.xi         case GFX_VCMD_16K:
613*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_16K;
614*53ee8cc1Swenshuai.xi             break;
615*53ee8cc1Swenshuai.xi         case GFX_VCMD_32K:
616*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_32K;
617*53ee8cc1Swenshuai.xi             break;
618*53ee8cc1Swenshuai.xi         case GFX_VCMD_64K:
619*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_64K;
620*53ee8cc1Swenshuai.xi             break;
621*53ee8cc1Swenshuai.xi         case GFX_VCMD_128K:
622*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_128K;
623*53ee8cc1Swenshuai.xi             break;
624*53ee8cc1Swenshuai.xi         case GFX_VCMD_256K:
625*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_256K;
626*53ee8cc1Swenshuai.xi             break;
627*53ee8cc1Swenshuai.xi         case GFX_VCMD_512K:
628*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_512K;
629*53ee8cc1Swenshuai.xi             break;
630*53ee8cc1Swenshuai.xi         case GFX_VCMD_1024K:
631*53ee8cc1Swenshuai.xi             *geOP = (MS_U32)E_GE_VCMD_1024K;
632*53ee8cc1Swenshuai.xi             break;
633*53ee8cc1Swenshuai.xi         default:
634*53ee8cc1Swenshuai.xi             return (MS_U32)GFX_INVALID_PARAMETERS;
635*53ee8cc1Swenshuai.xi             break;
636*53ee8cc1Swenshuai.xi     }
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
639*53ee8cc1Swenshuai.xi }
640*53ee8cc1Swenshuai.xi 
MApi_GFX_MapDFBBldFlag(MS_U16 gfxBldFlag,MS_U16 * geBldFlag)641*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapDFBBldFlag(MS_U16 gfxBldFlag, MS_U16* geBldFlag)
642*53ee8cc1Swenshuai.xi {
643*53ee8cc1Swenshuai.xi     //the bld flag is one-to-one map:
644*53ee8cc1Swenshuai.xi     *geBldFlag = gfxBldFlag;
645*53ee8cc1Swenshuai.xi 
646*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi 
MApi_GFX_MapDFBBldOP(GFX_DFBBldOP gfxBldOP,GE_DFBBldOP * geBldOP)649*53ee8cc1Swenshuai.xi static MS_U32 MApi_GFX_MapDFBBldOP(GFX_DFBBldOP gfxBldOP, GE_DFBBldOP* geBldOP)
650*53ee8cc1Swenshuai.xi {
651*53ee8cc1Swenshuai.xi     //the bld op is one-to-one map:
652*53ee8cc1Swenshuai.xi     *geBldOP = (GE_DFBBldOP)gfxBldOP;
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi     return (MS_U32)GFX_SUCCESS;
655*53ee8cc1Swenshuai.xi }
656*53ee8cc1Swenshuai.xi 
GFX_CheckInClipWindow(MS_U16 u16X1,MS_U16 u16Y1,MS_U16 u16X2,MS_U16 u16Y2)657*53ee8cc1Swenshuai.xi static MS_BOOL GFX_CheckInClipWindow(MS_U16 u16X1, MS_U16 u16Y1, MS_U16 u16X2, MS_U16 u16Y2)
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi     GFX_DEBUGINFO(GFX_ERR( "%s Not support\n", __FUNCTION__));
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi     return TRUE;
662*53ee8cc1Swenshuai.xi }
663*53ee8cc1Swenshuai.xi 
664*53ee8cc1Swenshuai.xi 
665*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
666*53ee8cc1Swenshuai.xi /// GFX tool function: Convert ARGB/index into the color format for intensity register.
667*53ee8cc1Swenshuai.xi /// @param Fmt \b IN: type of target color format.
668*53ee8cc1Swenshuai.xi /// @param colorinfo \b IN: pointer to color/index structure.
669*53ee8cc1Swenshuai.xi /// @param low \b OUT: pointer to 16-bit data to be filled in Intensity low word.
670*53ee8cc1Swenshuai.xi /// @param high \b OUT: pointer to 16-bit data to be filled in Intensity high word.
671*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
672*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
673*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
GFX_ConvertRGB2DBFmt(GFX_Buffer_Format Fmt,MS_U32 * colorinfo,MS_U16 * low,MS_U16 * high)674*53ee8cc1Swenshuai.xi void GFX_ConvertRGB2DBFmt(GFX_Buffer_Format Fmt, MS_U32 *colorinfo, MS_U16* low, MS_U16* high)
675*53ee8cc1Swenshuai.xi {
676*53ee8cc1Swenshuai.xi     GFX_RgbColor   *color = NULL;
677*53ee8cc1Swenshuai.xi     GFX_BlinkData  *blinkData = NULL;
678*53ee8cc1Swenshuai.xi     //MS_U8 a, r, g, b;
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi 
681*53ee8cc1Swenshuai.xi     if ((NULL == colorinfo) || (NULL == low) || (NULL == high)){
682*53ee8cc1Swenshuai.xi         GFX_ERR("Convert RGB2DB FAIL\n");
683*53ee8cc1Swenshuai.xi         return;
684*53ee8cc1Swenshuai.xi     }
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi     // @FIXME: Richard uses GFX_FMT_1ABFGBG12355 instead
688*53ee8cc1Swenshuai.xi     if ( (GFX_FMT_1ABFGBG12355== Fmt) || (GFX_FMT_FABAFGBG2266 == Fmt))
689*53ee8cc1Swenshuai.xi     // if (Fmt == GFX_FMT_1BAAFGBG123433)
690*53ee8cc1Swenshuai.xi     {
691*53ee8cc1Swenshuai.xi         blinkData =(GFX_BlinkData *)colorinfo;
692*53ee8cc1Swenshuai.xi     }
693*53ee8cc1Swenshuai.xi     else
694*53ee8cc1Swenshuai.xi     {
695*53ee8cc1Swenshuai.xi         color     =(GFX_RgbColor  *)colorinfo;
696*53ee8cc1Swenshuai.xi     }
697*53ee8cc1Swenshuai.xi 
698*53ee8cc1Swenshuai.xi     switch (Fmt)
699*53ee8cc1Swenshuai.xi     {
700*53ee8cc1Swenshuai.xi         case GFX_FMT_RGB565 :
701*53ee8cc1Swenshuai.xi             *low = ((color->b & 0xf8) + (color->b >> 5)) | (((color->g & 0xfc) + (color->g>>6))<<8);
702*53ee8cc1Swenshuai.xi             *high = ((color->r & 0xf8) + (color->r >> 5)) | ((color->a & 0xff) << 8);
703*53ee8cc1Swenshuai.xi             break;
704*53ee8cc1Swenshuai.xi         case GFX_FMT_RGBA5551:
705*53ee8cc1Swenshuai.xi             if (color->a > 0)
706*53ee8cc1Swenshuai.xi             {
707*53ee8cc1Swenshuai.xi                 *low = ((color->g & 0xf8) + (color->g >> 5)) | (0xff << 8);
708*53ee8cc1Swenshuai.xi             }
709*53ee8cc1Swenshuai.xi             else
710*53ee8cc1Swenshuai.xi             {
711*53ee8cc1Swenshuai.xi                 *low = ((color->g & 0xf8) + (color->g >> 5));
712*53ee8cc1Swenshuai.xi             }
713*53ee8cc1Swenshuai.xi             *high = ((color->g & 0xf8) + (color->g >> 5)) | (((color->r & 0xf8) + (color->r >> 5))<<8);
714*53ee8cc1Swenshuai.xi             break;
715*53ee8cc1Swenshuai.xi         case GFX_FMT_ARGB1555 :
716*53ee8cc1Swenshuai.xi             *low = ((color->b & 0xf8) + (color->b >> 5)) | (((color->g & 0xf8) + (color->g >> 5))<<8);
717*53ee8cc1Swenshuai.xi             if (color->a > 0)
718*53ee8cc1Swenshuai.xi             {
719*53ee8cc1Swenshuai.xi                 *high = ((color->r & 0xf8) + (color->r >> 5)) | (0xff << 8);
720*53ee8cc1Swenshuai.xi             }
721*53ee8cc1Swenshuai.xi             else
722*53ee8cc1Swenshuai.xi             {
723*53ee8cc1Swenshuai.xi                 *high = ((color->r & 0xf8) + (color->r >> 5));
724*53ee8cc1Swenshuai.xi             }
725*53ee8cc1Swenshuai.xi             break;
726*53ee8cc1Swenshuai.xi         case GFX_FMT_RGBA4444:
727*53ee8cc1Swenshuai.xi             *low = ((color->a & 0xf0) + (color->a >> 4)) | (((color->b & 0xf0) + (color->b >> 4))<<8);
728*53ee8cc1Swenshuai.xi             *high = ((color->g & 0xf0) + (color->g >> 4)) | (((color->r & 0xf0) + (color->r >> 4))<<8);
729*53ee8cc1Swenshuai.xi             break;
730*53ee8cc1Swenshuai.xi         case GFX_FMT_ARGB4444 :
731*53ee8cc1Swenshuai.xi             *low = ((color->b & 0xf0) + (color->b >> 4)) | (((color->g & 0xf0) + (color->g >> 4))<<8);
732*53ee8cc1Swenshuai.xi             *high = ((color->r & 0xf0) + (color->r >> 4)) | (((color->a & 0xf0) + (color->a >> 4))<<8);
733*53ee8cc1Swenshuai.xi             break;
734*53ee8cc1Swenshuai.xi         case GFX_FMT_ABGR8888:
735*53ee8cc1Swenshuai.xi             *low  =(color->r & 0xff) | ((color->g & 0xff) << 8);
736*53ee8cc1Swenshuai.xi             *high =(color->b & 0xff) | ((color->a & 0xff) << 8);
737*53ee8cc1Swenshuai.xi             break;
738*53ee8cc1Swenshuai.xi         case GFX_FMT_ARGB8888 :
739*53ee8cc1Swenshuai.xi             *low  =(color->b & 0xff) | ((color->g & 0xff) << 8);
740*53ee8cc1Swenshuai.xi             *high =(color->r & 0xff) | ((color->a & 0xff) << 8);
741*53ee8cc1Swenshuai.xi             break;
742*53ee8cc1Swenshuai.xi         case GFX_FMT_I8 :
743*53ee8cc1Swenshuai.xi             *low  = (color->b & 0xff)|((color->b & 0xff) << 8);
744*53ee8cc1Swenshuai.xi             *high = (color->b & 0xff)|((color->b & 0xff) << 8);
745*53ee8cc1Swenshuai.xi             break;
746*53ee8cc1Swenshuai.xi         // @FIXME: Richard uses GFX_FMT_1ABFGBG12355 instead
747*53ee8cc1Swenshuai.xi         //          1 A B Fg Bg
748*53ee8cc1Swenshuai.xi         //          1 2 3  5  5
749*53ee8cc1Swenshuai.xi         case GFX_FMT_1ABFGBG12355:
750*53ee8cc1Swenshuai.xi             *low = (0x1f & blinkData->background) |                     // Bg: 4..0
751*53ee8cc1Swenshuai.xi                    ((0x1f & blinkData->foreground)<< 5) |               // Fg: 9..5
752*53ee8cc1Swenshuai.xi                    ((0x1f & blinkData->ctrl_flag)<< 10) |               // [A, B]: [14..13, 12..10]
753*53ee8cc1Swenshuai.xi                    BIT15;                                               // Bit 15
754*53ee8cc1Swenshuai.xi             *high= (0x1f & blinkData->background) |                     // Bg: 4..0
755*53ee8cc1Swenshuai.xi                    ((0x1f & blinkData->foreground)<< 5) |               // Fg: 9..5
756*53ee8cc1Swenshuai.xi                    ((0x1f & blinkData->ctrl_flag)<< 10) |               // [A, B]: [14..13, 12..10]
757*53ee8cc1Swenshuai.xi                    BIT15;                                               // Bit 15
758*53ee8cc1Swenshuai.xi             break;
759*53ee8cc1Swenshuai.xi 
760*53ee8cc1Swenshuai.xi #if 0
761*53ee8cc1Swenshuai.xi                     1 B A A Fg Bg
762*53ee8cc1Swenshuai.xi                     1 2 3 4  3  3
763*53ee8cc1Swenshuai.xi         case GFX_FMT_1BAAFGBG123433 :
764*53ee8cc1Swenshuai.xi             *low = ((blinkData->background & 0x7)|((blinkData->foreground & 0x7) << 3)|((blinkData->ctrl_flag & 0x1ff)<<6)|(0x1 << 15));
765*53ee8cc1Swenshuai.xi             *high = ((blinkData->background & 0x7)|((blinkData->foreground & 0x7) << 3)|((blinkData->ctrl_flag & 0x1ff)<<6)|(0x1 << 15));
766*53ee8cc1Swenshuai.xi             break;
767*53ee8cc1Swenshuai.xi #endif
768*53ee8cc1Swenshuai.xi         case GFX_FMT_YUV422:
769*53ee8cc1Swenshuai.xi             //printf("[GE DRV][%06d] Are you sure to draw in YUV?\n", __LINE__);
770*53ee8cc1Swenshuai.xi             *low  =(color->b & 0xff) | ((color->g & 0xff) << 8);
771*53ee8cc1Swenshuai.xi             *high =(color->r & 0xff) | ((color->a & 0xff) << 8);
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi             break;
774*53ee8cc1Swenshuai.xi         case GFX_FMT_FABAFGBG2266:
775*53ee8cc1Swenshuai.xi             *low = ((blinkData->background & 0x3f)|((blinkData->foreground & 0x3f) << 6)|((blinkData->Bits3.Ba & 0x3)<<12)|((blinkData->Bits3.Fa & 0x3)<<14));
776*53ee8cc1Swenshuai.xi             *high = *low;
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi             break;
779*53ee8cc1Swenshuai.xi         default:
780*53ee8cc1Swenshuai.xi             GFX_ASSERT(0, GFX_FATAL("[GE DRV][%06d] Bad color format\n", __LINE__));
781*53ee8cc1Swenshuai.xi             *low  =(color->b & 0xff) | ((color->g & 0xff) << 8);
782*53ee8cc1Swenshuai.xi             *high =(color->r & 0xff) | ((color->a & 0xff) << 8);
783*53ee8cc1Swenshuai.xi             break;
784*53ee8cc1Swenshuai.xi     }
785*53ee8cc1Swenshuai.xi 
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi 
788*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
789*53ee8cc1Swenshuai.xi /// GFX tool function: Convert ARGB/index into the color format for Primitive color.
790*53ee8cc1Swenshuai.xi /// @param Fmt \b IN: type of target color format.
791*53ee8cc1Swenshuai.xi /// @param colorinfo \b IN: pointer to color/index structure.
792*53ee8cc1Swenshuai.xi /// @param low \b OUT: pointer to 16-bit data to be filled in Intensity low word.
793*53ee8cc1Swenshuai.xi /// @param high \b OUT: pointer to 16-bit data to be filled in Intensity high word.
794*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
795*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
796*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
GFX_ConvertRGB2PCFmt(GFX_Buffer_Format Fmt,MS_U32 * colorinfo,MS_U16 * low,MS_U16 * high)797*53ee8cc1Swenshuai.xi void GFX_ConvertRGB2PCFmt(GFX_Buffer_Format Fmt, MS_U32 *colorinfo, MS_U16* low, MS_U16* high)
798*53ee8cc1Swenshuai.xi {
799*53ee8cc1Swenshuai.xi     GFX_RgbColor   *color = NULL;
800*53ee8cc1Swenshuai.xi     GFX_BlinkData  *blinkData = NULL;
801*53ee8cc1Swenshuai.xi     //MS_U8 a, r, g, b;
802*53ee8cc1Swenshuai.xi 
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi     if ((NULL == colorinfo) || (NULL == low) || (NULL == high)){
805*53ee8cc1Swenshuai.xi         GFX_ERR("Convert RGB2DB FAIL\n");
806*53ee8cc1Swenshuai.xi         return;
807*53ee8cc1Swenshuai.xi     }
808*53ee8cc1Swenshuai.xi 
809*53ee8cc1Swenshuai.xi 
810*53ee8cc1Swenshuai.xi     // @FIXME: Richard uses GFX_FMT_1ABFGBG12355 instead
811*53ee8cc1Swenshuai.xi     if ( (GFX_FMT_1ABFGBG12355== Fmt) || (GFX_FMT_FABAFGBG2266 == Fmt))
812*53ee8cc1Swenshuai.xi     // if (Fmt == GFX_FMT_1BAAFGBG123433)
813*53ee8cc1Swenshuai.xi     {
814*53ee8cc1Swenshuai.xi         blinkData =(GFX_BlinkData *)colorinfo;
815*53ee8cc1Swenshuai.xi     }
816*53ee8cc1Swenshuai.xi     else
817*53ee8cc1Swenshuai.xi     {
818*53ee8cc1Swenshuai.xi         color     =(GFX_RgbColor  *)colorinfo;
819*53ee8cc1Swenshuai.xi     }
820*53ee8cc1Swenshuai.xi 
821*53ee8cc1Swenshuai.xi     switch (Fmt)
822*53ee8cc1Swenshuai.xi     {
823*53ee8cc1Swenshuai.xi         case GFX_FMT_RGB565 :
824*53ee8cc1Swenshuai.xi             *low = ((color->b & 0xf8) + (color->b >> 5)) | (((color->g & 0xfc) + (color->g>>6))<<8);
825*53ee8cc1Swenshuai.xi             *high = ((color->r & 0xf8) + (color->r >> 5)) | ((color->a & 0xff) << 8);
826*53ee8cc1Swenshuai.xi             break;
827*53ee8cc1Swenshuai.xi         case GFX_FMT_RGBA5551:
828*53ee8cc1Swenshuai.xi             if (color->a > 0)
829*53ee8cc1Swenshuai.xi             {
830*53ee8cc1Swenshuai.xi                 *low = ((color->g & 0xf8) + (color->g >> 5)) | (0xff << 8);
831*53ee8cc1Swenshuai.xi             }
832*53ee8cc1Swenshuai.xi             else
833*53ee8cc1Swenshuai.xi             {
834*53ee8cc1Swenshuai.xi                 *low = ((color->g & 0xf8) + (color->g >> 5));
835*53ee8cc1Swenshuai.xi             }
836*53ee8cc1Swenshuai.xi             *high = ((color->g & 0xf8) + (color->g >> 5)) | (((color->r & 0xf8) + (color->r >> 5))<<8);
837*53ee8cc1Swenshuai.xi             break;
838*53ee8cc1Swenshuai.xi         case GFX_FMT_ARGB1555 :
839*53ee8cc1Swenshuai.xi             *low = ((color->b & 0xf8) + (color->b >> 5)) | (((color->g & 0xf8) + (color->g >> 5))<<8);
840*53ee8cc1Swenshuai.xi             if (color->a > 0)
841*53ee8cc1Swenshuai.xi             {
842*53ee8cc1Swenshuai.xi                 *high = ((color->r & 0xf8) + (color->r >> 5)) | (0xff << 8);
843*53ee8cc1Swenshuai.xi             }
844*53ee8cc1Swenshuai.xi             else
845*53ee8cc1Swenshuai.xi             {
846*53ee8cc1Swenshuai.xi                 *high = ((color->r & 0xf8) + (color->r >> 5));
847*53ee8cc1Swenshuai.xi             }
848*53ee8cc1Swenshuai.xi             break;
849*53ee8cc1Swenshuai.xi         case GFX_FMT_RGBA4444:
850*53ee8cc1Swenshuai.xi             *low = ((color->a & 0xf0) + (color->a >> 4)) | (((color->b & 0xf0) + (color->b >> 4))<<8);
851*53ee8cc1Swenshuai.xi             *high = ((color->g & 0xf0) + (color->g >> 4)) | (((color->r & 0xf0) + (color->r >> 4))<<8);
852*53ee8cc1Swenshuai.xi             break;
853*53ee8cc1Swenshuai.xi         case GFX_FMT_ARGB4444 :
854*53ee8cc1Swenshuai.xi             *low = ((color->b & 0xf0) + (color->b >> 4)) | (((color->g & 0xf0) + (color->g >> 4))<<8);
855*53ee8cc1Swenshuai.xi             *high = ((color->r & 0xf0) + (color->r >> 4)) | (((color->a & 0xf0) + (color->a >> 4))<<8);
856*53ee8cc1Swenshuai.xi             break;
857*53ee8cc1Swenshuai.xi         case GFX_FMT_ABGR8888:
858*53ee8cc1Swenshuai.xi             *low  =(color->r & 0xff) | ((color->g & 0xff) << 8);
859*53ee8cc1Swenshuai.xi             *high =(color->b & 0xff) | ((color->a & 0xff) << 8);
860*53ee8cc1Swenshuai.xi             break;
861*53ee8cc1Swenshuai.xi         case GFX_FMT_ARGB8888 :
862*53ee8cc1Swenshuai.xi             *low  =(color->b & 0xff) | ((color->g & 0xff) << 8);
863*53ee8cc1Swenshuai.xi             *high =(color->r & 0xff) | ((color->a & 0xff) << 8);
864*53ee8cc1Swenshuai.xi             break;
865*53ee8cc1Swenshuai.xi         case GFX_FMT_I8 :
866*53ee8cc1Swenshuai.xi             *low  = (color->b & 0xff)|((color->b & 0xff) << 8);
867*53ee8cc1Swenshuai.xi             *high = (color->b & 0xff)|((color->b & 0xff) << 8);
868*53ee8cc1Swenshuai.xi             break;
869*53ee8cc1Swenshuai.xi         // @FIXME: Richard uses GFX_FMT_1ABFGBG12355 instead
870*53ee8cc1Swenshuai.xi         //          1 A B Fg Bg
871*53ee8cc1Swenshuai.xi         //          1 2 3  5  5
872*53ee8cc1Swenshuai.xi         case GFX_FMT_1ABFGBG12355:
873*53ee8cc1Swenshuai.xi             *low = ((0x1f & blinkData->background)<<3) |               //Bg
874*53ee8cc1Swenshuai.xi                    (((0x1f & blinkData->foreground)<<3)<<8);           //Fg
875*53ee8cc1Swenshuai.xi 
876*53ee8cc1Swenshuai.xi             *high= ((0x1f & blinkData->ctrl_flag)<<3) | BIT15;         //1AB
877*53ee8cc1Swenshuai.xi             break;
878*53ee8cc1Swenshuai.xi #if 0
879*53ee8cc1Swenshuai.xi                     1 B A A Fg Bg
880*53ee8cc1Swenshuai.xi                     1 2 3 4  3  3
881*53ee8cc1Swenshuai.xi         case GFX_FMT_1BAAFGBG123433 :
882*53ee8cc1Swenshuai.xi             *low = ((blinkData->background & 0x7)|((blinkData->foreground & 0x7) << 3)|((blinkData->ctrl_flag & 0x1ff)<<6)|(0x1 << 15));
883*53ee8cc1Swenshuai.xi             *high = ((blinkData->background & 0x7)|((blinkData->foreground & 0x7) << 3)|((blinkData->ctrl_flag & 0x1ff)<<6)|(0x1 << 15));
884*53ee8cc1Swenshuai.xi             break;
885*53ee8cc1Swenshuai.xi #endif
886*53ee8cc1Swenshuai.xi         case GFX_FMT_YUV422:
887*53ee8cc1Swenshuai.xi             //printf("[GE DRV][%06d] Are you sure to draw in YUV?\n", __LINE__);
888*53ee8cc1Swenshuai.xi             *low  =(color->b & 0xff) | ((color->g & 0xff) << 8);
889*53ee8cc1Swenshuai.xi             *high =(color->r & 0xff) | ((color->a & 0xff) << 8);
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi             break;
892*53ee8cc1Swenshuai.xi         case GFX_FMT_FABAFGBG2266:
893*53ee8cc1Swenshuai.xi             *low = ((blinkData->background & 0x3f)<<2)|(((blinkData->foreground & 0x3f)<<2)<<8);
894*53ee8cc1Swenshuai.xi             *high = ((blinkData->Bits3.Ba & 0x3)<<6)|(((blinkData->Bits3.Fa & 0x3)<<6)<<8);
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi             break;
897*53ee8cc1Swenshuai.xi         default:
898*53ee8cc1Swenshuai.xi             GFX_ASSERT(0, GFX_ASSERT("[GE DRV][%06d] Bad color format\n", __LINE__));
899*53ee8cc1Swenshuai.xi             *low  =(color->b & 0xff) | ((color->g & 0xff) << 8);
900*53ee8cc1Swenshuai.xi             *high =(color->r & 0xff) | ((color->a & 0xff) << 8);
901*53ee8cc1Swenshuai.xi             break;
902*53ee8cc1Swenshuai.xi     }
903*53ee8cc1Swenshuai.xi 
904*53ee8cc1Swenshuai.xi }
905*53ee8cc1Swenshuai.xi 
MApi_GFX_GetBufferInfo_U02(void * pInstance,PGFX_BufferInfo srcbufInfo,PGFX_BufferInfo dstbufInfo)906*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetBufferInfo_U02(void* pInstance, PGFX_BufferInfo srcbufInfo, PGFX_BufferInfo dstbufInfo)
907*53ee8cc1Swenshuai.xi {
908*53ee8cc1Swenshuai.xi     GE_BufInfo bufinfo;
909*53ee8cc1Swenshuai.xi     GE_Result ret;
910*53ee8cc1Swenshuai.xi 
911*53ee8cc1Swenshuai.xi     APICheckU02();
912*53ee8cc1Swenshuai.xi 
913*53ee8cc1Swenshuai.xi     ret = MDrv_GE_GetBufferInfo(g_apiGFXLocal.g_pGEContext, &bufinfo);
914*53ee8cc1Swenshuai.xi     srcbufInfo->u32ColorFmt = (GFX_Buffer_Format)bufinfo.srcfmt;  // DANGER, need refine.
915*53ee8cc1Swenshuai.xi     srcbufInfo->u32Pitch = bufinfo.srcpit;
916*53ee8cc1Swenshuai.xi     srcbufInfo->u32Addr = bufinfo.srcaddr;
917*53ee8cc1Swenshuai.xi 
918*53ee8cc1Swenshuai.xi     dstbufInfo->u32ColorFmt = (GFX_Buffer_Format)bufinfo.dstfmt;
919*53ee8cc1Swenshuai.xi     dstbufInfo->u32Pitch = bufinfo.dstpit;
920*53ee8cc1Swenshuai.xi     dstbufInfo->u32Addr = bufinfo.dstaddr;
921*53ee8cc1Swenshuai.xi 
922*53ee8cc1Swenshuai.xi     return (GFX_Result)ret;   // DANGER, need refine.
923*53ee8cc1Swenshuai.xi }
924*53ee8cc1Swenshuai.xi 
MApi_GFX_GetClip_U02(void * pInstance,GFX_Point * v0,GFX_Point * v1)925*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetClip_U02(void* pInstance, GFX_Point* v0, GFX_Point* v1)
926*53ee8cc1Swenshuai.xi {
927*53ee8cc1Swenshuai.xi     GE_Rect rect;
928*53ee8cc1Swenshuai.xi 
929*53ee8cc1Swenshuai.xi     APICheckU02();
930*53ee8cc1Swenshuai.xi 
931*53ee8cc1Swenshuai.xi     MDrv_GE_GetClipWindow(g_apiGFXLocal.g_pGEContext, &rect);
932*53ee8cc1Swenshuai.xi 
933*53ee8cc1Swenshuai.xi     v0->x = rect.x ; // dangerous if V0 > V1
934*53ee8cc1Swenshuai.xi     v0->y = rect.y ;
935*53ee8cc1Swenshuai.xi     v1->x = rect.width  + v0->x - 1;
936*53ee8cc1Swenshuai.xi     v1->y = rect.height + v0->y - 1;
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi 
MApi_GFX_GetGECaps_U02(void * pInstance,EN_GFX_CAPS eCapType,MS_U32 * pRet,MS_U32 ret_size)941*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetGECaps_U02(void* pInstance, EN_GFX_CAPS eCapType, MS_U32* pRet, MS_U32 ret_size)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi     APICheckU02();
944*53ee8cc1Swenshuai.xi 
945*53ee8cc1Swenshuai.xi     switch(eCapType)
946*53ee8cc1Swenshuai.xi     {
947*53ee8cc1Swenshuai.xi         case E_GFX_CAP_MULTI_PIXEL:
948*53ee8cc1Swenshuai.xi         {
949*53ee8cc1Swenshuai.xi             GFX_CapMultiPixelInfo *pMultiPixelInfo;
950*53ee8cc1Swenshuai.xi             if(ret_size != sizeof(GFX_CapMultiPixelInfo))
951*53ee8cc1Swenshuai.xi             {
952*53ee8cc1Swenshuai.xi                 GFX_ERR("[%s] ERROR, invalid input structure size :%td on GFX_CapMultiPixelInfo\n",__FUNCTION__,(ptrdiff_t)ret_size);
953*53ee8cc1Swenshuai.xi                 return GFX_INVALID_PARAMETERS;
954*53ee8cc1Swenshuai.xi             }
955*53ee8cc1Swenshuai.xi             pMultiPixelInfo = (GFX_CapMultiPixelInfo *)pRet;
956*53ee8cc1Swenshuai.xi             pMultiPixelInfo->bSupportMultiPixel = g_apiGFXLocal.pGeChipProperty->bSupportMultiPixel;
957*53ee8cc1Swenshuai.xi             pMultiPixelInfo->WordUnit = g_apiGFXLocal.pGeChipProperty->WordUnit;
958*53ee8cc1Swenshuai.xi         }
959*53ee8cc1Swenshuai.xi         break;
960*53ee8cc1Swenshuai.xi         case E_GFX_CAP_BLT_DOWN_SCALE:
961*53ee8cc1Swenshuai.xi         {
962*53ee8cc1Swenshuai.xi             GFX_BLT_DownScaleInfo *pBltDownScaleInfo;
963*53ee8cc1Swenshuai.xi             if(ret_size != sizeof(GFX_BLT_DownScaleInfo))
964*53ee8cc1Swenshuai.xi             {
965*53ee8cc1Swenshuai.xi                 GFX_ERR("[%s] ERROR, invalid input structure size :%td on GFX_BLT_DownScaleInfo\n",__FUNCTION__,(ptrdiff_t)ret_size);
966*53ee8cc1Swenshuai.xi                 return GFX_INVALID_PARAMETERS;
967*53ee8cc1Swenshuai.xi             }
968*53ee8cc1Swenshuai.xi             pBltDownScaleInfo = (GFX_BLT_DownScaleInfo *)pRet;
969*53ee8cc1Swenshuai.xi             pBltDownScaleInfo->bFullRangeSupport = g_apiGFXLocal.pGeChipProperty->BltDownScaleCaps.bFullRangeSupport;
970*53ee8cc1Swenshuai.xi             pBltDownScaleInfo->u8RangeMax = g_apiGFXLocal.pGeChipProperty->BltDownScaleCaps.u8RangeMax;
971*53ee8cc1Swenshuai.xi             pBltDownScaleInfo->u8RangeMin = g_apiGFXLocal.pGeChipProperty->BltDownScaleCaps.u8RangeMin;
972*53ee8cc1Swenshuai.xi             pBltDownScaleInfo->u8ContinuousRangeMin = g_apiGFXLocal.pGeChipProperty->BltDownScaleCaps.u8ContinuousRangeMin;
973*53ee8cc1Swenshuai.xi         }
974*53ee8cc1Swenshuai.xi         break;
975*53ee8cc1Swenshuai.xi         case E_GFX_CAP_DFB_BLENDING:
976*53ee8cc1Swenshuai.xi         {
977*53ee8cc1Swenshuai.xi             MS_U16 *pU16SupportedBldFlags;
978*53ee8cc1Swenshuai.xi             if(ret_size != sizeof(MS_U16))
979*53ee8cc1Swenshuai.xi             {
980*53ee8cc1Swenshuai.xi                 GFX_ERR("[%s] ERROR, invalid input structure size :%td on GFX_CAP_DFB_BLENDING\n",__FUNCTION__,(ptrdiff_t)ret_size);
981*53ee8cc1Swenshuai.xi                 return GFX_INVALID_PARAMETERS;
982*53ee8cc1Swenshuai.xi             }
983*53ee8cc1Swenshuai.xi             pU16SupportedBldFlags = (MS_U16 *)pRet;
984*53ee8cc1Swenshuai.xi             MDrv_GE_QueryDFBBldCaps(g_apiGFXLocal.g_pGEContext, pU16SupportedBldFlags);
985*53ee8cc1Swenshuai.xi         }
986*53ee8cc1Swenshuai.xi         break;
987*53ee8cc1Swenshuai.xi         case E_GFX_CAP_ALIGN:
988*53ee8cc1Swenshuai.xi         {
989*53ee8cc1Swenshuai.xi             GFX_FmtAlignCapsInfo* pAlignCapsInfo;
990*53ee8cc1Swenshuai.xi             GE_FmtCaps          caps;
991*53ee8cc1Swenshuai.xi             pAlignCapsInfo = (GFX_FmtAlignCapsInfo *)pRet;
992*53ee8cc1Swenshuai.xi             memset(&caps, 0, sizeof(GE_FmtCaps));
993*53ee8cc1Swenshuai.xi             MDrv_GE_GetFmtCaps(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)pAlignCapsInfo->u32ColorFmt, (GE_BufType)pAlignCapsInfo->eBufferType, &caps);
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi             switch(pAlignCapsInfo->eFmtCapsType)
996*53ee8cc1Swenshuai.xi             {
997*53ee8cc1Swenshuai.xi                 case E_GFX_FMT_CAP_NONE:
998*53ee8cc1Swenshuai.xi                     pAlignCapsInfo->u8BaseAlign = caps.u8BaseAlign;
999*53ee8cc1Swenshuai.xi                     pAlignCapsInfo->u8PitchAlign = caps.u8PitchAlign;
1000*53ee8cc1Swenshuai.xi                     break;
1001*53ee8cc1Swenshuai.xi                 case E_GFX_FMT_CAP_MULTI_PIXEL:
1002*53ee8cc1Swenshuai.xi                     pAlignCapsInfo->u8BaseAlign = caps.u8Non1pAlign;
1003*53ee8cc1Swenshuai.xi                     pAlignCapsInfo->u8PitchAlign = caps.u8Non1pAlign;
1004*53ee8cc1Swenshuai.xi                     if(FALSE == g_apiGFXLocal.pGeChipProperty->bSupportMultiPixel)
1005*53ee8cc1Swenshuai.xi                     {
1006*53ee8cc1Swenshuai.xi                         GFX_ERR("[%s] not support multi-pixel mode\n",__FUNCTION__);
1007*53ee8cc1Swenshuai.xi                         return GFX_INVALID_PARAMETERS;
1008*53ee8cc1Swenshuai.xi                     }
1009*53ee8cc1Swenshuai.xi                     break;
1010*53ee8cc1Swenshuai.xi                 default:
1011*53ee8cc1Swenshuai.xi                     GFX_DBUG("[%s] not support GFX format capability case: %d\n",__FUNCTION__, pAlignCapsInfo->eFmtCapsType);
1012*53ee8cc1Swenshuai.xi                     break;
1013*53ee8cc1Swenshuai.xi             }
1014*53ee8cc1Swenshuai.xi         }
1015*53ee8cc1Swenshuai.xi         break;
1016*53ee8cc1Swenshuai.xi         case E_GFX_CAP_TLB:
1017*53ee8cc1Swenshuai.xi         {
1018*53ee8cc1Swenshuai.xi             MS_BOOL *bSupportTLB;
1019*53ee8cc1Swenshuai.xi             if(ret_size != sizeof(MS_BOOL))
1020*53ee8cc1Swenshuai.xi             {
1021*53ee8cc1Swenshuai.xi                 GFX_ERR("[%s] ERROR, invalid input structure size :%td on MS_BOOL\n",__FUNCTION__,(ptrdiff_t)ret_size);
1022*53ee8cc1Swenshuai.xi                 return GFX_INVALID_PARAMETERS;
1023*53ee8cc1Swenshuai.xi             }
1024*53ee8cc1Swenshuai.xi             bSupportTLB = (MS_BOOL *)pRet;
1025*53ee8cc1Swenshuai.xi             *bSupportTLB = g_apiGFXLocal.pGeChipProperty->bSupportTLBMode;
1026*53ee8cc1Swenshuai.xi         }
1027*53ee8cc1Swenshuai.xi         break;
1028*53ee8cc1Swenshuai.xi         default:
1029*53ee8cc1Swenshuai.xi             GFX_ERR("[%s]not support GFX capability case: %d\n",__FUNCTION__, eCapType);
1030*53ee8cc1Swenshuai.xi             return GFX_INVALID_PARAMETERS;
1031*53ee8cc1Swenshuai.xi     }
1032*53ee8cc1Swenshuai.xi 
1033*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi 
MApi_GFX_GetDBGInfo_U02(void * pInstance,GFX_DbgInfo * dbg)1036*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetDBGInfo_U02(void* pInstance, GFX_DbgInfo *dbg)
1037*53ee8cc1Swenshuai.xi {
1038*53ee8cc1Swenshuai.xi     GE_DbgInfo tGEDBG;
1039*53ee8cc1Swenshuai.xi 
1040*53ee8cc1Swenshuai.xi     APICheckU02();
1041*53ee8cc1Swenshuai.xi 
1042*53ee8cc1Swenshuai.xi     memset(&tGEDBG,0,sizeof(GE_DbgInfo));
1043*53ee8cc1Swenshuai.xi 
1044*53ee8cc1Swenshuai.xi     MDrv_GE_GetInfo(g_apiGFXLocal.g_pGEContext, &tGEDBG);
1045*53ee8cc1Swenshuai.xi 
1046*53ee8cc1Swenshuai.xi     memcpy(dbg, &tGEDBG, sizeof(GE_DbgInfo));
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1049*53ee8cc1Swenshuai.xi }
1050*53ee8cc1Swenshuai.xi 
MApi_GFX_DrawLine_U02(void * pInstance,GFX_DrawLineInfo * pline)1051*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_DrawLine_U02(void* pInstance, GFX_DrawLineInfo *pline)
1052*53ee8cc1Swenshuai.xi {
1053*53ee8cc1Swenshuai.xi     GFX_RgbColor color_s, color_e;
1054*53ee8cc1Swenshuai.xi     MS_U32 u32data;
1055*53ee8cc1Swenshuai.xi     MS_U16 u16Color0=0, u16Color1=0;
1056*53ee8cc1Swenshuai.xi 
1057*53ee8cc1Swenshuai.xi     GE_Point v0, v1;
1058*53ee8cc1Swenshuai.xi     MS_U32 color, color2;
1059*53ee8cc1Swenshuai.xi     MS_U32 flags = 0;
1060*53ee8cc1Swenshuai.xi 
1061*53ee8cc1Swenshuai.xi     APICheckU02();
1062*53ee8cc1Swenshuai.xi 
1063*53ee8cc1Swenshuai.xi     v0.x = pline->x1;
1064*53ee8cc1Swenshuai.xi     v0.y = pline->y1;
1065*53ee8cc1Swenshuai.xi     color_s = pline->colorRange.color_s;
1066*53ee8cc1Swenshuai.xi     memcpy(&u32data, &color_s, 4);
1067*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2PCFmt(pline->fmt, (MS_U32*)&u32data, &u16Color0, &u16Color1);
1068*53ee8cc1Swenshuai.xi     color = (u16Color1<<16) | u16Color0;
1069*53ee8cc1Swenshuai.xi 
1070*53ee8cc1Swenshuai.xi     v1.x = pline->x2;
1071*53ee8cc1Swenshuai.xi     v1.y = pline->y2;
1072*53ee8cc1Swenshuai.xi     color_e = pline->colorRange.color_e;
1073*53ee8cc1Swenshuai.xi     memcpy(&u32data, &color_e, 4);
1074*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2PCFmt(pline->fmt, (MS_U32*)&u32data, &u16Color0, &u16Color1);
1075*53ee8cc1Swenshuai.xi     color2 = (u16Color1<<16) | u16Color0;
1076*53ee8cc1Swenshuai.xi 
1077*53ee8cc1Swenshuai.xi     if (pline->flag & GFXLINE_FLAG_COLOR_GRADIENT)
1078*53ee8cc1Swenshuai.xi     {
1079*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_LINE_GRADIENT;
1080*53ee8cc1Swenshuai.xi     }
1081*53ee8cc1Swenshuai.xi 
1082*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_DrawLine(g_apiGFXLocal.g_pGEContext, &v0, &v1, color, color2, flags, pline->width);
1083*53ee8cc1Swenshuai.xi }
1084*53ee8cc1Swenshuai.xi 
1085*53ee8cc1Swenshuai.xi 
MApi_GFX_RectFill_U02(void * pInstance,GFX_RectFillInfo * pfillblock)1086*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_RectFill_U02(void* pInstance, GFX_RectFillInfo *pfillblock)
1087*53ee8cc1Swenshuai.xi {
1088*53ee8cc1Swenshuai.xi     GFX_RgbColor color_s, color_e;
1089*53ee8cc1Swenshuai.xi     MS_U16 u16Color0=0, u16Color1=0;
1090*53ee8cc1Swenshuai.xi     GFX_BlinkData blinkData;
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi     GE_Rect rect;
1093*53ee8cc1Swenshuai.xi     MS_U32  color, color2;
1094*53ee8cc1Swenshuai.xi     MS_U32  flags = 0;
1095*53ee8cc1Swenshuai.xi 
1096*53ee8cc1Swenshuai.xi     APICheckU02();
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi     rect.x = pfillblock->dstBlock.x;
1099*53ee8cc1Swenshuai.xi     rect.y = pfillblock->dstBlock.y;
1100*53ee8cc1Swenshuai.xi     rect.width = pfillblock->dstBlock.width;
1101*53ee8cc1Swenshuai.xi     rect.height = pfillblock->dstBlock.height;
1102*53ee8cc1Swenshuai.xi 
1103*53ee8cc1Swenshuai.xi     color_s = pfillblock->colorRange.color_s;
1104*53ee8cc1Swenshuai.xi     if(pfillblock->fmt == GFX_FMT_1ABFGBG12355 || pfillblock->fmt == GFX_FMT_FABAFGBG2266)
1105*53ee8cc1Swenshuai.xi     {
1106*53ee8cc1Swenshuai.xi         if(pfillblock->fmt == GFX_FMT_1ABFGBG12355)
1107*53ee8cc1Swenshuai.xi         {
1108*53ee8cc1Swenshuai.xi             memcpy(&blinkData, &color_s, sizeof(GFX_BlinkData));
1109*53ee8cc1Swenshuai.xi             u16Color0=      (0x1F & blinkData.background)<<3 |
1110*53ee8cc1Swenshuai.xi                             ((0x1F & blinkData.foreground) << 11);
1111*53ee8cc1Swenshuai.xi             u16Color1=      (0x7 & blinkData.Bits.Blink)<<3 |
1112*53ee8cc1Swenshuai.xi                             ((0x3 & blinkData.Bits.Alpha) << 6) |
1113*53ee8cc1Swenshuai.xi                             0xff00;
1114*53ee8cc1Swenshuai.xi         }
1115*53ee8cc1Swenshuai.xi         if(pfillblock->fmt == GFX_FMT_FABAFGBG2266)
1116*53ee8cc1Swenshuai.xi         {
1117*53ee8cc1Swenshuai.xi             memcpy(&blinkData, &color_s, sizeof(GFX_BlinkData));
1118*53ee8cc1Swenshuai.xi             u16Color0=      ((0x3F & blinkData.background)<<2) |
1119*53ee8cc1Swenshuai.xi                             (((0x3F & blinkData.foreground)<<2) << 8);
1120*53ee8cc1Swenshuai.xi             u16Color1=      ((0x3 & blinkData.Bits3.Ba)<<6) |
1121*53ee8cc1Swenshuai.xi                             (((0x3 & blinkData.Bits3.Fa)<<6) << 8);
1122*53ee8cc1Swenshuai.xi         }
1123*53ee8cc1Swenshuai.xi         color = (u16Color1<<16) | u16Color0;
1124*53ee8cc1Swenshuai.xi     }
1125*53ee8cc1Swenshuai.xi     else
1126*53ee8cc1Swenshuai.xi     {
1127*53ee8cc1Swenshuai.xi         memcpy(&color, &color_s, sizeof(color));
1128*53ee8cc1Swenshuai.xi     }
1129*53ee8cc1Swenshuai.xi 
1130*53ee8cc1Swenshuai.xi 
1131*53ee8cc1Swenshuai.xi     color_e = pfillblock->colorRange.color_e;
1132*53ee8cc1Swenshuai.xi     if(pfillblock->fmt == GFX_FMT_1ABFGBG12355 || pfillblock->fmt == GFX_FMT_FABAFGBG2266)
1133*53ee8cc1Swenshuai.xi     {
1134*53ee8cc1Swenshuai.xi         if(pfillblock->fmt == GFX_FMT_1ABFGBG12355)
1135*53ee8cc1Swenshuai.xi         {
1136*53ee8cc1Swenshuai.xi             memcpy(&blinkData, &color_e, sizeof(GFX_BlinkData));
1137*53ee8cc1Swenshuai.xi             u16Color0=      (0x1F & blinkData.background)<<3 |
1138*53ee8cc1Swenshuai.xi                             ((0x1F & blinkData.foreground) << 11);
1139*53ee8cc1Swenshuai.xi             u16Color1=      (0x7 & blinkData.Bits.Blink)<<3 |
1140*53ee8cc1Swenshuai.xi                             ((0x3 & blinkData.Bits.Alpha) << 6) |
1141*53ee8cc1Swenshuai.xi                             0xff00;
1142*53ee8cc1Swenshuai.xi         }
1143*53ee8cc1Swenshuai.xi         if(pfillblock->fmt == GFX_FMT_FABAFGBG2266)
1144*53ee8cc1Swenshuai.xi         {
1145*53ee8cc1Swenshuai.xi             memcpy(&blinkData, &color_e, sizeof(GFX_BlinkData));
1146*53ee8cc1Swenshuai.xi             u16Color0=      ((0x3F & blinkData.background)<<2) |
1147*53ee8cc1Swenshuai.xi                             (((0x3F & blinkData.foreground)<<2) << 8);
1148*53ee8cc1Swenshuai.xi             u16Color1=      ((0x3 & blinkData.Bits3.Ba)<<6) |
1149*53ee8cc1Swenshuai.xi                             (((0x3 & blinkData.Bits3.Fa)<<6) << 8);
1150*53ee8cc1Swenshuai.xi         }
1151*53ee8cc1Swenshuai.xi         color2 = (u16Color1<<16) | u16Color0;
1152*53ee8cc1Swenshuai.xi 
1153*53ee8cc1Swenshuai.xi     }
1154*53ee8cc1Swenshuai.xi     else
1155*53ee8cc1Swenshuai.xi     {
1156*53ee8cc1Swenshuai.xi         memcpy(&color2, &color_e, sizeof(color));
1157*53ee8cc1Swenshuai.xi     }
1158*53ee8cc1Swenshuai.xi 
1159*53ee8cc1Swenshuai.xi     flags |= (pfillblock->flag & GFXRECT_FLAG_COLOR_GRADIENT_X) ? E_GE_FLAG_RECT_GRADIENT_X : 0;
1160*53ee8cc1Swenshuai.xi     flags |= (pfillblock->flag & GFXRECT_FLAG_COLOR_GRADIENT_Y) ? E_GE_FLAG_RECT_GRADIENT_Y : 0;
1161*53ee8cc1Swenshuai.xi 
1162*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_FillRect(g_apiGFXLocal.g_pGEContext, &rect, color, color2, flags);
1163*53ee8cc1Swenshuai.xi }
1164*53ee8cc1Swenshuai.xi 
MApi_GFX_TriFill_U02(void * pInstance,GFX_TriFillInfo * pfillblock)1165*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_TriFill_U02(void* pInstance, GFX_TriFillInfo *pfillblock)
1166*53ee8cc1Swenshuai.xi {
1167*53ee8cc1Swenshuai.xi     int y, yend;
1168*53ee8cc1Swenshuai.xi     DDA dda0 = { .xi = 0 }, dda1 = { .xi = 0 };
1169*53ee8cc1Swenshuai.xi     int clip_x0 = 0,clip_x1 = 0,clip_y0 = 0,clip_y1 = 0;
1170*53ee8cc1Swenshuai.xi     MS_BOOL bClip = 0;
1171*53ee8cc1Swenshuai.xi     GFX_RectFillInfo rectInfo;
1172*53ee8cc1Swenshuai.xi 
1173*53ee8cc1Swenshuai.xi     if( (pfillblock->clip_box.width != 0) && (pfillblock->clip_box.height != 0) )
1174*53ee8cc1Swenshuai.xi     {
1175*53ee8cc1Swenshuai.xi         bClip = 1;
1176*53ee8cc1Swenshuai.xi         clip_x0 = pfillblock->clip_box.x;
1177*53ee8cc1Swenshuai.xi         clip_x1 = pfillblock->clip_box.x + pfillblock->clip_box.width;
1178*53ee8cc1Swenshuai.xi         clip_y0 = pfillblock->clip_box.y;
1179*53ee8cc1Swenshuai.xi         clip_y1 = pfillblock->clip_box.y + pfillblock->clip_box.height;
1180*53ee8cc1Swenshuai.xi     }
1181*53ee8cc1Swenshuai.xi 
1182*53ee8cc1Swenshuai.xi     rectInfo.fmt = pfillblock->fmt;
1183*53ee8cc1Swenshuai.xi     rectInfo.colorRange.color_s = pfillblock->colorRange.color_s;
1184*53ee8cc1Swenshuai.xi     rectInfo.colorRange.color_e = pfillblock->colorRange.color_e;
1185*53ee8cc1Swenshuai.xi     rectInfo.flag = pfillblock->flag;
1186*53ee8cc1Swenshuai.xi 
1187*53ee8cc1Swenshuai.xi     y = pfillblock->tri.y0;
1188*53ee8cc1Swenshuai.xi     yend = pfillblock->tri.y2;
1189*53ee8cc1Swenshuai.xi 
1190*53ee8cc1Swenshuai.xi     if ( (bClip == 1) && (yend > clip_y1))
1191*53ee8cc1Swenshuai.xi       yend = clip_y1;
1192*53ee8cc1Swenshuai.xi 
1193*53ee8cc1Swenshuai.xi     SETUP_DDA(pfillblock->tri.x0, pfillblock->tri.y0, pfillblock->tri.x2, pfillblock->tri.y2, dda0);
1194*53ee8cc1Swenshuai.xi     SETUP_DDA(pfillblock->tri.x0, pfillblock->tri.y0, pfillblock->tri.x1, pfillblock->tri.y1, dda1);
1195*53ee8cc1Swenshuai.xi 
1196*53ee8cc1Swenshuai.xi     while (y <= yend) {
1197*53ee8cc1Swenshuai.xi       if (y == pfillblock->tri.y1) {
1198*53ee8cc1Swenshuai.xi            if (pfillblock->tri.y1 == pfillblock->tri.y2)
1199*53ee8cc1Swenshuai.xi                 return GFX_SUCCESS;
1200*53ee8cc1Swenshuai.xi            SETUP_DDA(pfillblock->tri.x1, pfillblock->tri.y1, pfillblock->tri.x2, pfillblock->tri.y2, dda1);
1201*53ee8cc1Swenshuai.xi       }
1202*53ee8cc1Swenshuai.xi 
1203*53ee8cc1Swenshuai.xi       rectInfo.dstBlock.width = ABS(dda0.xi - dda1.xi);
1204*53ee8cc1Swenshuai.xi       rectInfo.dstBlock.x = MIN(dda0.xi, dda1.xi);
1205*53ee8cc1Swenshuai.xi 
1206*53ee8cc1Swenshuai.xi       if ( (bClip == 1) && (clip_x1 < rectInfo.dstBlock.x + rectInfo.dstBlock.width) )
1207*53ee8cc1Swenshuai.xi            rectInfo.dstBlock.width = clip_x1 - rectInfo.dstBlock.x + 1;
1208*53ee8cc1Swenshuai.xi 
1209*53ee8cc1Swenshuai.xi       if (rectInfo.dstBlock.width > 0) {
1210*53ee8cc1Swenshuai.xi            if ( (bClip == 1) && (clip_x0 > rectInfo.dstBlock.x) ) {
1211*53ee8cc1Swenshuai.xi                 rectInfo.dstBlock.width -= (clip_x0 - rectInfo.dstBlock.x);
1212*53ee8cc1Swenshuai.xi                 rectInfo.dstBlock.x = clip_x0;
1213*53ee8cc1Swenshuai.xi            }
1214*53ee8cc1Swenshuai.xi            rectInfo.dstBlock.y = y;
1215*53ee8cc1Swenshuai.xi            rectInfo.dstBlock.height = 1;
1216*53ee8cc1Swenshuai.xi 
1217*53ee8cc1Swenshuai.xi            if (rectInfo.dstBlock.width > 0) {
1218*53ee8cc1Swenshuai.xi                 if( (bClip == 1) && (rectInfo.dstBlock.y >= clip_y0) )
1219*53ee8cc1Swenshuai.xi                      MApi_GFX_RectFill_U02(pInstance,&rectInfo);
1220*53ee8cc1Swenshuai.xi                 else if(bClip == 0)
1221*53ee8cc1Swenshuai.xi                      MApi_GFX_RectFill_U02(pInstance,&rectInfo);
1222*53ee8cc1Swenshuai.xi 
1223*53ee8cc1Swenshuai.xi            }
1224*53ee8cc1Swenshuai.xi       }
1225*53ee8cc1Swenshuai.xi 
1226*53ee8cc1Swenshuai.xi       INC_DDA(dda0);
1227*53ee8cc1Swenshuai.xi       INC_DDA(dda1);
1228*53ee8cc1Swenshuai.xi 
1229*53ee8cc1Swenshuai.xi       y++;
1230*53ee8cc1Swenshuai.xi     }
1231*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1232*53ee8cc1Swenshuai.xi }
1233*53ee8cc1Swenshuai.xi 
clip_rectangle(GFX_Block clip,GFX_Block * dstBlock)1234*53ee8cc1Swenshuai.xi MS_BOOL clip_rectangle(GFX_Block clip,GFX_Block  *dstBlock)
1235*53ee8cc1Swenshuai.xi {
1236*53ee8cc1Swenshuai.xi      if ((clip.x >= dstBlock->x + dstBlock->width) ||
1237*53ee8cc1Swenshuai.xi          ((clip.x + clip.width) < dstBlock->x) ||
1238*53ee8cc1Swenshuai.xi          (clip.y >= dstBlock->y + dstBlock->height) ||
1239*53ee8cc1Swenshuai.xi          ((clip.y + clip.height) < dstBlock->y))
1240*53ee8cc1Swenshuai.xi           return FALSE;
1241*53ee8cc1Swenshuai.xi 
1242*53ee8cc1Swenshuai.xi      if (clip.x > dstBlock->x) {
1243*53ee8cc1Swenshuai.xi           dstBlock->width += dstBlock->x - clip.x;
1244*53ee8cc1Swenshuai.xi           dstBlock->x = clip.x;
1245*53ee8cc1Swenshuai.xi      }
1246*53ee8cc1Swenshuai.xi 
1247*53ee8cc1Swenshuai.xi      if (clip.y > dstBlock->y) {
1248*53ee8cc1Swenshuai.xi           dstBlock->height += dstBlock->y - clip.y;
1249*53ee8cc1Swenshuai.xi           dstBlock->y = clip.y;
1250*53ee8cc1Swenshuai.xi      }
1251*53ee8cc1Swenshuai.xi 
1252*53ee8cc1Swenshuai.xi      if ((clip.x + clip.width) < dstBlock->x + dstBlock->width - 1)
1253*53ee8cc1Swenshuai.xi           dstBlock->width = (clip.x + clip.width) - dstBlock->x + 1;
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi      if ((clip.y + clip.height) < dstBlock->y + dstBlock->height - 1)
1256*53ee8cc1Swenshuai.xi           dstBlock->height = (clip.y + clip.height) - dstBlock->y + 1;
1257*53ee8cc1Swenshuai.xi 
1258*53ee8cc1Swenshuai.xi      return TRUE;
1259*53ee8cc1Swenshuai.xi }
1260*53ee8cc1Swenshuai.xi 
MApi_GFX_SpanFill_U02(void * pInstance,GFX_SpanFillInfo * pfillblock)1261*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SpanFill_U02(void* pInstance, GFX_SpanFillInfo *pfillblock)
1262*53ee8cc1Swenshuai.xi {
1263*53ee8cc1Swenshuai.xi     GFX_RectFillInfo rectInfo;
1264*53ee8cc1Swenshuai.xi     MS_BOOL bClip = 0;
1265*53ee8cc1Swenshuai.xi     int i;
1266*53ee8cc1Swenshuai.xi 
1267*53ee8cc1Swenshuai.xi     rectInfo.fmt = pfillblock->fmt;
1268*53ee8cc1Swenshuai.xi     rectInfo.colorRange.color_s = pfillblock->colorRange.color_s;
1269*53ee8cc1Swenshuai.xi     rectInfo.colorRange.color_e = pfillblock->colorRange.color_e;
1270*53ee8cc1Swenshuai.xi     rectInfo.flag = pfillblock->flag;
1271*53ee8cc1Swenshuai.xi 
1272*53ee8cc1Swenshuai.xi     if( (pfillblock->clip_box.width != 0) && (pfillblock->clip_box.height != 0) ){
1273*53ee8cc1Swenshuai.xi         bClip = 1;
1274*53ee8cc1Swenshuai.xi     }
1275*53ee8cc1Swenshuai.xi 
1276*53ee8cc1Swenshuai.xi     for (i = 0; i<pfillblock->span.num_spans; i++) {
1277*53ee8cc1Swenshuai.xi         rectInfo.dstBlock.x = pfillblock->span.spans[i].x;
1278*53ee8cc1Swenshuai.xi         rectInfo.dstBlock.y = pfillblock->span.y+i;
1279*53ee8cc1Swenshuai.xi         rectInfo.dstBlock.width = pfillblock->span.spans[i].w;
1280*53ee8cc1Swenshuai.xi         rectInfo.dstBlock.height = 1;
1281*53ee8cc1Swenshuai.xi 
1282*53ee8cc1Swenshuai.xi 
1283*53ee8cc1Swenshuai.xi        if ( bClip &&
1284*53ee8cc1Swenshuai.xi                 !clip_rectangle( pfillblock->clip_box, &rectInfo.dstBlock))
1285*53ee8cc1Swenshuai.xi                  continue;
1286*53ee8cc1Swenshuai.xi 
1287*53ee8cc1Swenshuai.xi         MApi_GFX_RectFill_U02(pInstance,&rectInfo);
1288*53ee8cc1Swenshuai.xi     }
1289*53ee8cc1Swenshuai.xi 
1290*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1291*53ee8cc1Swenshuai.xi }
1292*53ee8cc1Swenshuai.xi 
MApi_GFX_BitBlt_U02(void * pInstance,GFX_DrawRect * drawbuf,MS_U32 drawflag,GFX_ScaleInfo * ScaleInfo)1293*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BitBlt_U02(void* pInstance, GFX_DrawRect * drawbuf, MS_U32 drawflag, GFX_ScaleInfo * ScaleInfo)
1294*53ee8cc1Swenshuai.xi {
1295*53ee8cc1Swenshuai.xi     union
1296*53ee8cc1Swenshuai.xi     {
1297*53ee8cc1Swenshuai.xi         GFX_Block drawbufblk;
1298*53ee8cc1Swenshuai.xi         GE_Rect blk;
1299*53ee8cc1Swenshuai.xi         GE_DstBitBltType dstblk;
1300*53ee8cc1Swenshuai.xi         GFX_Trapezoid  dsttrapeblk;
1301*53ee8cc1Swenshuai.xi     }sBltSrcBlk, sBltDstBlk;
1302*53ee8cc1Swenshuai.xi 
1303*53ee8cc1Swenshuai.xi 
1304*53ee8cc1Swenshuai.xi     GE_ScaleInfo gecaleInfo;
1305*53ee8cc1Swenshuai.xi     MS_U32 flags = 0;
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi     APICheckU02();
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi     if(drawflag & GFXDRAW_FLAG_SCALE)
1310*53ee8cc1Swenshuai.xi     {
1311*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_STRETCH;
1312*53ee8cc1Swenshuai.xi     }
1313*53ee8cc1Swenshuai.xi 
1314*53ee8cc1Swenshuai.xi     if(drawflag & GFXDRAW_FLAG_TRAPEZOID_X)
1315*53ee8cc1Swenshuai.xi     {
1316*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_TRAPEZOID_X;
1317*53ee8cc1Swenshuai.xi     }
1318*53ee8cc1Swenshuai.xi 
1319*53ee8cc1Swenshuai.xi     if(drawflag & GFXDRAW_FLAG_TRAPEZOID_Y)
1320*53ee8cc1Swenshuai.xi     {
1321*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_TRAPEZOID_Y;
1322*53ee8cc1Swenshuai.xi     }
1323*53ee8cc1Swenshuai.xi 
1324*53ee8cc1Swenshuai.xi     flags |= GFX_RectBltFlags(pInstance);
1325*53ee8cc1Swenshuai.xi 
1326*53ee8cc1Swenshuai.xi     if(ScaleInfo != NULL){
1327*53ee8cc1Swenshuai.xi         if( (ScaleInfo->u32DeltaX != 0 ) && (ScaleInfo->u32DeltaY != 0 ) )
1328*53ee8cc1Swenshuai.xi         {
1329*53ee8cc1Swenshuai.xi             gecaleInfo.init_x = ScaleInfo->u32InitDelatX;
1330*53ee8cc1Swenshuai.xi             gecaleInfo.init_y = ScaleInfo->u32InitDelatY;
1331*53ee8cc1Swenshuai.xi             gecaleInfo.x = ScaleInfo->u32DeltaX;
1332*53ee8cc1Swenshuai.xi             gecaleInfo.y = ScaleInfo->u32DeltaY;
1333*53ee8cc1Swenshuai.xi 
1334*53ee8cc1Swenshuai.xi             flags |= E_GE_FLAG_BYPASS_STBCOEF;
1335*53ee8cc1Swenshuai.xi         }
1336*53ee8cc1Swenshuai.xi     }
1337*53ee8cc1Swenshuai.xi #if 1    // enable overlap
1338*53ee8cc1Swenshuai.xi     if ( !(flags & (
1339*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_STRETCH     |
1340*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ITALIC      |
1341*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_MIRROR_H    |
1342*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_MIRROR_V    |
1343*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ROTATE_90   |
1344*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ROTATE_180  |
1345*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ROTATE_270  )) )
1346*53ee8cc1Swenshuai.xi     {
1347*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_OVERLAP;
1348*53ee8cc1Swenshuai.xi     }
1349*53ee8cc1Swenshuai.xi #endif
1350*53ee8cc1Swenshuai.xi     sBltSrcBlk.drawbufblk = drawbuf->srcblk;
1351*53ee8cc1Swenshuai.xi     sBltDstBlk.dsttrapeblk = drawbuf->dsttrapeblk;
1352*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext, &sBltSrcBlk.blk, &sBltDstBlk.dstblk, flags, (ScaleInfo==NULL)? NULL: &gecaleInfo);
1353*53ee8cc1Swenshuai.xi }
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1356*53ee8cc1Swenshuai.xi /// Set GFX destination buffer info in two source buffer mode
1357*53ee8cc1Swenshuai.xi /// Attention, when two source buffer mode enable, raw DstBuffer will be one of two source.
1358*53ee8cc1Swenshuai.xi /// @param dstbufInfo   \b IN: pointer to destination frame buffer infomation.\n
1359*53ee8cc1Swenshuai.xi /// @param pdrawbuf \b IN: pointer to two source rects info
1360*53ee8cc1Swenshuai.xi /// @param drawflag \b IN: draw flag \n
1361*53ee8cc1Swenshuai.xi ///                  GFXDRAW_FLAG_DEFAULT \n
1362*53ee8cc1Swenshuai.xi ///                  GFXDRAW_FLAG_SCALE \n
1363*53ee8cc1Swenshuai.xi ///                  GFXDRAW_FLAG_DUPLICAPE \n
1364*53ee8cc1Swenshuai.xi ///                  GFXDRAW_FLAG_TRAPEZOID \n
1365*53ee8cc1Swenshuai.xi /// @return GFX_SUCCESS - Success
1366*53ee8cc1Swenshuai.xi /// @return GFX_FAIL - Failure
1367*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GFX_BitbltByTwoSourceBuffer_U02(void * pInstance,PGFX_BufferInfo dstbufInfo,GFX_DrawTwoSourceRect * pdrawbuf,MS_U32 drawflag)1368*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BitbltByTwoSourceBuffer_U02(void* pInstance, PGFX_BufferInfo dstbufInfo, GFX_DrawTwoSourceRect *pdrawbuf, MS_U32 drawflag)
1369*53ee8cc1Swenshuai.xi {
1370*53ee8cc1Swenshuai.xi     GE_Rect bitbltSrc0Rect;
1371*53ee8cc1Swenshuai.xi     GE_Rect bitbltSrc1Rect;
1372*53ee8cc1Swenshuai.xi     GE_Rect bitbltDestRect;
1373*53ee8cc1Swenshuai.xi     MS_U32 flags = 0;
1374*53ee8cc1Swenshuai.xi     APICheckU02();
1375*53ee8cc1Swenshuai.xi 
1376*53ee8cc1Swenshuai.xi     if(NULL == dstbufInfo || NULL == pdrawbuf)
1377*53ee8cc1Swenshuai.xi     {
1378*53ee8cc1Swenshuai.xi         return GFX_INVALID_PARAMETERS;
1379*53ee8cc1Swenshuai.xi     }
1380*53ee8cc1Swenshuai.xi 
1381*53ee8cc1Swenshuai.xi     if (drawflag & GFXDRAW_FLAG_SCALE)
1382*53ee8cc1Swenshuai.xi     {
1383*53ee8cc1Swenshuai.xi         if(pdrawbuf->srcblk0.width != pdrawbuf->dstblk.width &&
1384*53ee8cc1Swenshuai.xi             pdrawbuf->srcblk0.height != pdrawbuf->dstblk.height)
1385*53ee8cc1Swenshuai.xi         {
1386*53ee8cc1Swenshuai.xi             flags |= E_GE_FLAG_BLT_STRETCH;
1387*53ee8cc1Swenshuai.xi         }
1388*53ee8cc1Swenshuai.xi     }
1389*53ee8cc1Swenshuai.xi     if(drawflag & GFXDRAW_FLAG_TRAPEZOID_X)
1390*53ee8cc1Swenshuai.xi     {
1391*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_TRAPEZOID_X;
1392*53ee8cc1Swenshuai.xi     }
1393*53ee8cc1Swenshuai.xi     if(drawflag & GFXDRAW_FLAG_TRAPEZOID_Y)
1394*53ee8cc1Swenshuai.xi     {
1395*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_TRAPEZOID_Y;
1396*53ee8cc1Swenshuai.xi     }
1397*53ee8cc1Swenshuai.xi     flags |= GFX_RectBltFlags(pInstance);
1398*53ee8cc1Swenshuai.xi #if 1    // enable overlap
1399*53ee8cc1Swenshuai.xi     if ( !(flags & (
1400*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_STRETCH     |
1401*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ITALIC      |
1402*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_MIRROR_H    |
1403*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_MIRROR_V    |
1404*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ROTATE_90   |
1405*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ROTATE_180  |
1406*53ee8cc1Swenshuai.xi                      E_GE_FLAG_BLT_ROTATE_270  )) )
1407*53ee8cc1Swenshuai.xi     {
1408*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_OVERLAP;
1409*53ee8cc1Swenshuai.xi     }
1410*53ee8cc1Swenshuai.xi #endif
1411*53ee8cc1Swenshuai.xi     bitbltSrc0Rect.x = pdrawbuf->srcblk0.x;
1412*53ee8cc1Swenshuai.xi     bitbltSrc0Rect.y = pdrawbuf->srcblk0.y;
1413*53ee8cc1Swenshuai.xi     bitbltSrc0Rect.width = pdrawbuf->srcblk0.width;
1414*53ee8cc1Swenshuai.xi     bitbltSrc0Rect.height = pdrawbuf->srcblk0.height;
1415*53ee8cc1Swenshuai.xi     bitbltSrc1Rect.x = pdrawbuf->srcblk1.x;
1416*53ee8cc1Swenshuai.xi     bitbltSrc1Rect.y = pdrawbuf->srcblk1.y;
1417*53ee8cc1Swenshuai.xi     bitbltSrc1Rect.width = pdrawbuf->dstblk.width; //srcbuf1 width must be the same as dest width
1418*53ee8cc1Swenshuai.xi     bitbltSrc1Rect.height = pdrawbuf->dstblk.height; //srcbuf1 height must be the same as dest height
1419*53ee8cc1Swenshuai.xi     bitbltDestRect.x = pdrawbuf->dstblk.x;
1420*53ee8cc1Swenshuai.xi     bitbltDestRect.y = pdrawbuf->dstblk.y;
1421*53ee8cc1Swenshuai.xi     bitbltDestRect.width = pdrawbuf->dstblk.width;
1422*53ee8cc1Swenshuai.xi     bitbltDestRect.height = pdrawbuf->dstblk.height;
1423*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_BitBltByTwoSourceBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)dstbufInfo->u32ColorFmt,
1424*53ee8cc1Swenshuai.xi         &bitbltSrc0Rect, &bitbltSrc1Rect, &bitbltDestRect, dstbufInfo->u32Addr, dstbufInfo->u32Pitch, flags, NULL);
1425*53ee8cc1Swenshuai.xi }
1426*53ee8cc1Swenshuai.xi 
MApi_GFX_SetSrcColorKey_U02(void * pInstance,MS_BOOL enable,GFX_ColorKeyMode opMode,GFX_Buffer_Format fmt,void * ps_color,void * pe_color)1427*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetSrcColorKey_U02(void* pInstance, MS_BOOL enable,
1428*53ee8cc1Swenshuai.xi                                    GFX_ColorKeyMode opMode,
1429*53ee8cc1Swenshuai.xi                                    GFX_Buffer_Format fmt,
1430*53ee8cc1Swenshuai.xi                                    void *ps_color,
1431*53ee8cc1Swenshuai.xi                                    void *pe_color)
1432*53ee8cc1Swenshuai.xi {
1433*53ee8cc1Swenshuai.xi     MS_U32 ck_low, ck_high, u32op1=0, ret;
1434*53ee8cc1Swenshuai.xi     MS_U16 u16Color0=0, u16Color1=0;
1435*53ee8cc1Swenshuai.xi 
1436*53ee8cc1Swenshuai.xi     APICheckU02();
1437*53ee8cc1Swenshuai.xi 
1438*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2DBFmt(fmt, (MS_U32 *)ps_color, &u16Color0, &u16Color1);
1439*53ee8cc1Swenshuai.xi     ck_low = (u16Color1<<16) | u16Color0;
1440*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2DBFmt(fmt, (MS_U32 *)pe_color, &u16Color0, &u16Color1);
1441*53ee8cc1Swenshuai.xi     ck_high = (u16Color1<<16) | u16Color0;
1442*53ee8cc1Swenshuai.xi 
1443*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapCKOP(opMode, &u32op1 );
1444*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1445*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1446*53ee8cc1Swenshuai.xi 
1447*53ee8cc1Swenshuai.xi 
1448*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetSrcColorKey(g_apiGFXLocal.g_pGEContext, enable, (GE_CKOp)u32op1, ck_low, ck_high);
1449*53ee8cc1Swenshuai.xi }
1450*53ee8cc1Swenshuai.xi 
MApi_GFX_SetDstColorKey_U02(void * pInstance,MS_BOOL enable,GFX_ColorKeyMode opMode,GFX_Buffer_Format fmt,void * ps_color,void * pe_color)1451*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDstColorKey_U02(void* pInstance, MS_BOOL enable,
1452*53ee8cc1Swenshuai.xi                                    GFX_ColorKeyMode opMode,
1453*53ee8cc1Swenshuai.xi                                    GFX_Buffer_Format fmt,
1454*53ee8cc1Swenshuai.xi                                    void *ps_color,
1455*53ee8cc1Swenshuai.xi                                    void *pe_color)
1456*53ee8cc1Swenshuai.xi {
1457*53ee8cc1Swenshuai.xi     MS_U32 ck_low, ck_high, u32op1=0, ret;
1458*53ee8cc1Swenshuai.xi     MS_U16 u16Color0=0, u16Color1=0;
1459*53ee8cc1Swenshuai.xi 
1460*53ee8cc1Swenshuai.xi     APICheckU02();
1461*53ee8cc1Swenshuai.xi 
1462*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2DBFmt(fmt, (MS_U32 *)ps_color, &u16Color0, &u16Color1);
1463*53ee8cc1Swenshuai.xi     ck_low = (u16Color1<<16) | u16Color0;
1464*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2DBFmt(fmt, (MS_U32 *)pe_color, &u16Color0, &u16Color1);
1465*53ee8cc1Swenshuai.xi     ck_high = (u16Color1<<16) | u16Color0;
1466*53ee8cc1Swenshuai.xi 
1467*53ee8cc1Swenshuai.xi 
1468*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapCKOP(opMode, &u32op1 );
1469*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1470*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1471*53ee8cc1Swenshuai.xi 
1472*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetDstColorKey(g_apiGFXLocal.g_pGEContext, enable, (GE_CKOp)u32op1, ck_low, ck_high);
1473*53ee8cc1Swenshuai.xi }
1474*53ee8cc1Swenshuai.xi 
1475*53ee8cc1Swenshuai.xi 
MApi_GFX_SetROP2_U02(void * pInstance,MS_BOOL enable,GFX_ROP2_Op eRopMode)1476*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetROP2_U02(void* pInstance, MS_BOOL enable, GFX_ROP2_Op eRopMode)
1477*53ee8cc1Swenshuai.xi {
1478*53ee8cc1Swenshuai.xi     MS_U32 u32ROPmode=0, ret;
1479*53ee8cc1Swenshuai.xi 
1480*53ee8cc1Swenshuai.xi     APICheckU02();
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapROP2( eRopMode, &u32ROPmode );
1483*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1484*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1485*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetROP2(g_apiGFXLocal.g_pGEContext, enable, (GE_Rop2) u32ROPmode);
1486*53ee8cc1Swenshuai.xi }
1487*53ee8cc1Swenshuai.xi 
MApi_GFX_SetIntensity_U02(void * pInstance,MS_U32 id,GFX_Buffer_Format fmt,MS_U32 * pColor)1488*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetIntensity_U02(void* pInstance, MS_U32 id, GFX_Buffer_Format fmt, MS_U32 *pColor)
1489*53ee8cc1Swenshuai.xi {
1490*53ee8cc1Swenshuai.xi     MS_U16 u16Color0=0, u16Color1=0;
1491*53ee8cc1Swenshuai.xi 
1492*53ee8cc1Swenshuai.xi     APICheckU02();
1493*53ee8cc1Swenshuai.xi 
1494*53ee8cc1Swenshuai.xi     GFX_ConvertRGB2DBFmt(fmt, (MS_U32 *)pColor, &u16Color0, &u16Color1);
1495*53ee8cc1Swenshuai.xi 
1496*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetIntensity(g_apiGFXLocal.g_pGEContext, id, (u16Color1<<16)|u16Color0);
1497*53ee8cc1Swenshuai.xi }
1498*53ee8cc1Swenshuai.xi 
MApi_GFX_SetDFBBldOP_U02(void * pInstance,GFX_DFBBldOP gfxSrcBldOP,GFX_DFBBldOP gfxDstBldOP)1499*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldOP_U02(void* pInstance, GFX_DFBBldOP gfxSrcBldOP, GFX_DFBBldOP gfxDstBldOP)
1500*53ee8cc1Swenshuai.xi {
1501*53ee8cc1Swenshuai.xi     GE_DFBBldOP geSrcBldOP, geDstBldOP;
1502*53ee8cc1Swenshuai.xi     GFX_Result u32Ret;
1503*53ee8cc1Swenshuai.xi 
1504*53ee8cc1Swenshuai.xi     APICheckU02();
1505*53ee8cc1Swenshuai.xi 
1506*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_MapDFBBldOP(gfxSrcBldOP, &geSrcBldOP);
1507*53ee8cc1Swenshuai.xi     if(u32Ret != GFX_SUCCESS)
1508*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, u32Ret));
1509*53ee8cc1Swenshuai.xi 
1510*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_MapDFBBldOP(gfxDstBldOP, &geDstBldOP);
1511*53ee8cc1Swenshuai.xi     if(u32Ret != GFX_SUCCESS)
1512*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, u32Ret));
1513*53ee8cc1Swenshuai.xi 
1514*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetDFBBldOP(g_apiGFXLocal.g_pGEContext, geSrcBldOP, geDstBldOP);
1515*53ee8cc1Swenshuai.xi }
1516*53ee8cc1Swenshuai.xi 
MApi_GFX_SetDFBBldConstColor_U02(void * pInstance,GFX_RgbColor gfxRgbColor)1517*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldConstColor_U02(void* pInstance, GFX_RgbColor gfxRgbColor)
1518*53ee8cc1Swenshuai.xi {
1519*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
1520*53ee8cc1Swenshuai.xi 
1521*53ee8cc1Swenshuai.xi     APICheckU02();
1522*53ee8cc1Swenshuai.xi 
1523*53ee8cc1Swenshuai.xi     geRgbColor.a = gfxRgbColor.a;
1524*53ee8cc1Swenshuai.xi     geRgbColor.r = gfxRgbColor.r;
1525*53ee8cc1Swenshuai.xi     geRgbColor.g = gfxRgbColor.g;
1526*53ee8cc1Swenshuai.xi     geRgbColor.b = gfxRgbColor.b;
1527*53ee8cc1Swenshuai.xi 
1528*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
1529*53ee8cc1Swenshuai.xi }
1530*53ee8cc1Swenshuai.xi 
MApi_GFX_SetDFBBldFlags_U02(void * pInstance,MS_U16 u16DFBBldFlags)1531*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDFBBldFlags_U02(void* pInstance, MS_U16 u16DFBBldFlags)
1532*53ee8cc1Swenshuai.xi {
1533*53ee8cc1Swenshuai.xi     MS_U16 u16DrvDFBBldFlags;
1534*53ee8cc1Swenshuai.xi     GFX_Result u32Ret;
1535*53ee8cc1Swenshuai.xi 
1536*53ee8cc1Swenshuai.xi     APICheckU02();
1537*53ee8cc1Swenshuai.xi 
1538*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_MapDFBBldFlag(u16DFBBldFlags, &u16DrvDFBBldFlags);
1539*53ee8cc1Swenshuai.xi     if(u32Ret != GFX_SUCCESS)
1540*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, u32Ret));
1541*53ee8cc1Swenshuai.xi 
1542*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetDFBBldFlags(g_apiGFXLocal.g_pGEContext, u16DrvDFBBldFlags);
1543*53ee8cc1Swenshuai.xi }
1544*53ee8cc1Swenshuai.xi 
MApi_GFX_SetClip_U02(void * pInstance,GFX_Point * v0,GFX_Point * v1)1545*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetClip_U02(void* pInstance, GFX_Point* v0, GFX_Point* v1)
1546*53ee8cc1Swenshuai.xi {
1547*53ee8cc1Swenshuai.xi     GE_Rect rect;
1548*53ee8cc1Swenshuai.xi 
1549*53ee8cc1Swenshuai.xi     APICheckU02();
1550*53ee8cc1Swenshuai.xi 
1551*53ee8cc1Swenshuai.xi     rect.x = v0->x; // dangerous if V0 > V1
1552*53ee8cc1Swenshuai.xi     rect.y = v0->y;
1553*53ee8cc1Swenshuai.xi     rect.width = v1->x - v0->x + 1;
1554*53ee8cc1Swenshuai.xi     rect.height = v1->y - v0->y + 1;
1555*53ee8cc1Swenshuai.xi 
1556*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetClipWindow(g_apiGFXLocal.g_pGEContext, &rect);
1557*53ee8cc1Swenshuai.xi }
1558*53ee8cc1Swenshuai.xi 
MApi_GFX_SetPaletteOpt_U02(void * pInstance,GFX_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd)1559*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetPaletteOpt_U02( void* pInstance, GFX_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd)
1560*53ee8cc1Swenshuai.xi {
1561*53ee8cc1Swenshuai.xi     MS_U16 i;
1562*53ee8cc1Swenshuai.xi     //----------------------------------------------------------------------
1563*53ee8cc1Swenshuai.xi     // Write palette
1564*53ee8cc1Swenshuai.xi     //----------------------------------------------------------------------
1565*53ee8cc1Swenshuai.xi     //U32 clr;
1566*53ee8cc1Swenshuai.xi     MS_U16 j=0;
1567*53ee8cc1Swenshuai.xi     MS_U32 u32data;
1568*53ee8cc1Swenshuai.xi 
1569*53ee8cc1Swenshuai.xi     APICheckU02();
1570*53ee8cc1Swenshuai.xi 
1571*53ee8cc1Swenshuai.xi     for(i=u32PalStart; i<=u32PalEnd ; i++)
1572*53ee8cc1Swenshuai.xi     {
1573*53ee8cc1Swenshuai.xi 
1574*53ee8cc1Swenshuai.xi        GFX_DEBUGINFO(GFX_INFO("MDrv_GE_SetPaletteOpt :  Array[%03d]. u8A %02bX | u8R %02bX | u8G %02bX |u8B %02bX\n",i,
1575*53ee8cc1Swenshuai.xi                                                 pPalArray[j].RGB.u8A,
1576*53ee8cc1Swenshuai.xi                                                 pPalArray[j].RGB.u8R,
1577*53ee8cc1Swenshuai.xi                                                 pPalArray[j].RGB.u8G,
1578*53ee8cc1Swenshuai.xi                                                 pPalArray[j].RGB.u8B));
1579*53ee8cc1Swenshuai.xi 
1580*53ee8cc1Swenshuai.xi         memcpy(&u32data, &pPalArray[j], 4);
1581*53ee8cc1Swenshuai.xi         MDrv_GE_SetPalette(g_apiGFXLocal.g_pGEContext, i, 1, (MS_U32*)&u32data);
1582*53ee8cc1Swenshuai.xi 
1583*53ee8cc1Swenshuai.xi         j++;
1584*53ee8cc1Swenshuai.xi 
1585*53ee8cc1Swenshuai.xi     }
1586*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1587*53ee8cc1Swenshuai.xi 
1588*53ee8cc1Swenshuai.xi }
1589*53ee8cc1Swenshuai.xi 
MApi_GFX_SetVCmdBuffer_U02(void * pInstance,MS_PHY PhyAddr,GFX_VcmqBufSize enBufSize)1590*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetVCmdBuffer_U02(void* pInstance, MS_PHY PhyAddr, GFX_VcmqBufSize enBufSize)
1591*53ee8cc1Swenshuai.xi {
1592*53ee8cc1Swenshuai.xi     MS_U32 u32op1=0, ret;
1593*53ee8cc1Swenshuai.xi 
1594*53ee8cc1Swenshuai.xi     APICheckU02();
1595*53ee8cc1Swenshuai.xi 
1596*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapVCMQSZ(enBufSize, &u32op1 );
1597*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1598*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1599*53ee8cc1Swenshuai.xi 
1600*53ee8cc1Swenshuai.xi     if(E_GE_OK != MDrv_GE_SetVCmdBuffer(g_apiGFXLocal.g_pGEContext,  PhyAddr,  (GE_VcmqBufSize)u32op1))
1601*53ee8cc1Swenshuai.xi     {
1602*53ee8cc1Swenshuai.xi         return GFX_FAIL;
1603*53ee8cc1Swenshuai.xi     }
1604*53ee8cc1Swenshuai.xi 
1605*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1606*53ee8cc1Swenshuai.xi }
1607*53ee8cc1Swenshuai.xi 
MApi_GFX_EnableAlphaBlending_U02(void * pInstance,MS_BOOL enable)1608*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EnableAlphaBlending_U02(void* pInstance, MS_BOOL enable)
1609*53ee8cc1Swenshuai.xi {
1610*53ee8cc1Swenshuai.xi     MS_U32 u32op1 =0, ret;
1611*53ee8cc1Swenshuai.xi     APICheckU02();
1612*53ee8cc1Swenshuai.xi 
1613*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapBLDCOEF(g_apiGFXLocal.pABLInfo.eBldCoef, &u32op1 );
1614*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1615*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1616*53ee8cc1Swenshuai.xi 
1617*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetAlphaBlend(g_apiGFXLocal.g_pGEContext, enable, (GE_BlendOp)u32op1);
1618*53ee8cc1Swenshuai.xi }
1619*53ee8cc1Swenshuai.xi 
MApi_GFX_SetAlpha_U02(void * pInstance,MS_BOOL enable,GFX_BlendCoef coef,GFX_AlphaSrcFrom db_abl,MS_U8 abl_const)1620*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlpha_U02(void* pInstance, MS_BOOL enable, GFX_BlendCoef coef, GFX_AlphaSrcFrom db_abl, MS_U8 abl_const)
1621*53ee8cc1Swenshuai.xi {
1622*53ee8cc1Swenshuai.xi     MS_U32 u32op1=0, u32op2=0, ret;
1623*53ee8cc1Swenshuai.xi     APICheckU02();
1624*53ee8cc1Swenshuai.xi 
1625*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapBLDCOEF(coef, &u32op1 );
1626*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1627*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1628*53ee8cc1Swenshuai.xi 
1629*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapABLCOEF(db_abl, &u32op2 );
1630*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
1631*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
1632*53ee8cc1Swenshuai.xi 
1633*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaConst(g_apiGFXLocal.g_pGEContext, abl_const);
1634*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaSrc(g_apiGFXLocal.g_pGEContext, (GE_AlphaSrc)u32op2);
1635*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaBlend(g_apiGFXLocal.g_pGEContext, enable, (GE_BlendOp)u32op1);
1636*53ee8cc1Swenshuai.xi 
1637*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1638*53ee8cc1Swenshuai.xi }
1639*53ee8cc1Swenshuai.xi 
1640*53ee8cc1Swenshuai.xi 
MApi_GFX_DrawBitmap_U02(void * pInstance,GFX_BufferInfo srcbufinfo,GFX_DrawBmpInfo * pbmpfmt)1641*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_DrawBitmap_U02(void* pInstance, GFX_BufferInfo srcbufinfo, GFX_DrawBmpInfo *pbmpfmt)
1642*53ee8cc1Swenshuai.xi {
1643*53ee8cc1Swenshuai.xi     APICheckU02();
1644*53ee8cc1Swenshuai.xi 
1645*53ee8cc1Swenshuai.xi     GFX_DEBUGINFO( GFX_INFO( "MApi_GFX_DrawBitmap\n" ) );
1646*53ee8cc1Swenshuai.xi 
1647*53ee8cc1Swenshuai.xi     if (!GFX_CheckInClipWindow(pbmpfmt->x, pbmpfmt->y, pbmpfmt->x+pbmpfmt->width-1, pbmpfmt->y+pbmpfmt->height-1))
1648*53ee8cc1Swenshuai.xi     {
1649*53ee8cc1Swenshuai.xi         return GFX_FAIL;
1650*53ee8cc1Swenshuai.xi     }
1651*53ee8cc1Swenshuai.xi 
1652*53ee8cc1Swenshuai.xi #if 1
1653*53ee8cc1Swenshuai.xi {
1654*53ee8cc1Swenshuai.xi     MS_U32      flags = 0;
1655*53ee8cc1Swenshuai.xi     GE_Rect     src;
1656*53ee8cc1Swenshuai.xi     union
1657*53ee8cc1Swenshuai.xi     {
1658*53ee8cc1Swenshuai.xi         GE_Rect dstblk;
1659*53ee8cc1Swenshuai.xi         GE_DstBitBltType drvdstblk;
1660*53ee8cc1Swenshuai.xi     }dst;
1661*53ee8cc1Swenshuai.xi 
1662*53ee8cc1Swenshuai.xi     src.x = 0;
1663*53ee8cc1Swenshuai.xi     src.y = 0;
1664*53ee8cc1Swenshuai.xi     src.width = srcbufinfo.u32Width;
1665*53ee8cc1Swenshuai.xi     src.height = srcbufinfo.u32Height;
1666*53ee8cc1Swenshuai.xi     dst.dstblk.x = pbmpfmt->x;
1667*53ee8cc1Swenshuai.xi     dst.dstblk.y = pbmpfmt->y;
1668*53ee8cc1Swenshuai.xi     dst.dstblk.width = pbmpfmt->width;
1669*53ee8cc1Swenshuai.xi     dst.dstblk.height = pbmpfmt->height;
1670*53ee8cc1Swenshuai.xi     if (pbmpfmt->bScale == true)
1671*53ee8cc1Swenshuai.xi     {
1672*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_STRETCH;
1673*53ee8cc1Swenshuai.xi     }
1674*53ee8cc1Swenshuai.xi 
1675*53ee8cc1Swenshuai.xi     flags |= GFX_RectBltFlags(pInstance);
1676*53ee8cc1Swenshuai.xi 
1677*53ee8cc1Swenshuai.xi     if (flags & E_GE_FLAG_BLT_MIRROR_H)
1678*53ee8cc1Swenshuai.xi     {
1679*53ee8cc1Swenshuai.xi         src.x = src.width;
1680*53ee8cc1Swenshuai.xi     }
1681*53ee8cc1Swenshuai.xi 
1682*53ee8cc1Swenshuai.xi     if (flags & E_GE_FLAG_BLT_MIRROR_V)
1683*53ee8cc1Swenshuai.xi     {
1684*53ee8cc1Swenshuai.xi         src.y = src.height;
1685*53ee8cc1Swenshuai.xi     }
1686*53ee8cc1Swenshuai.xi 
1687*53ee8cc1Swenshuai.xi     MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext, &src, &dst.drvdstblk, flags, NULL);
1688*53ee8cc1Swenshuai.xi }
1689*53ee8cc1Swenshuai.xi #else
1690*53ee8cc1Swenshuai.xi /*
1691*53ee8cc1Swenshuai.xi     MS_U32 u32Width, u32Height;
1692*53ee8cc1Swenshuai.xi     MS_U32 u32Value, u32Value2, u32Addr, u32Pitch;
1693*53ee8cc1Swenshuai.xi 
1694*53ee8cc1Swenshuai.xi     GE_WaitCmdQAvail(24);
1695*53ee8cc1Swenshuai.xi 
1696*53ee8cc1Swenshuai.xi     u32Value = PE_ReadReg(PE_REG_SB_DB_MODE);
1697*53ee8cc1Swenshuai.xi     u32Value &= ~(PE_MSK_SB_FMT);
1698*53ee8cc1Swenshuai.xi 
1699*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_SB_DB_MODE, (u32Value|_BitmapTable[handle].fmt));
1700*53ee8cc1Swenshuai.xi 
1701*53ee8cc1Swenshuai.xi     u32Value2 = PE_ReadReg(PE_REG_FMT_BLT);
1702*53ee8cc1Swenshuai.xi 
1703*53ee8cc1Swenshuai.xi     u32Addr   = (_BitmapTable[handle].addr ) ;
1704*53ee8cc1Swenshuai.xi     u32Width  = _BitmapTable[handle].width;
1705*53ee8cc1Swenshuai.xi     u32Height = _BitmapTable[handle].height;
1706*53ee8cc1Swenshuai.xi     u32Pitch  = _BitmapTable[handle].pitch;
1707*53ee8cc1Swenshuai.xi 
1708*53ee8cc1Swenshuai.xi     // Set source address
1709*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_SB_BASE0, u32Addr & 0xffff);
1710*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_SB_BASE1, u32Addr >> 16);
1711*53ee8cc1Swenshuai.xi 
1712*53ee8cc1Swenshuai.xi     // Set source pitch
1713*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_SB_PIT, u32Pitch);
1714*53ee8cc1Swenshuai.xi 
1715*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_STBB_WIDTH, u32Width);
1716*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_STBB_HEIGHT, u32Height);
1717*53ee8cc1Swenshuai.xi 
1718*53ee8cc1Swenshuai.xi     // Set source coordinate
1719*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_PRI_V2_X, 0);
1720*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_PRI_V2_Y, 0);
1721*53ee8cc1Swenshuai.xi 
1722*53ee8cc1Swenshuai.xi     //------------------------------------------------------------
1723*53ee8cc1Swenshuai.xi     // BLT scale delta value
1724*53ee8cc1Swenshuai.xi     //------------------------------------------------------------
1725*53ee8cc1Swenshuai.xi     if ((u32Width != pbmpfmt->width) || (u32Height != pbmpfmt->height))
1726*53ee8cc1Swenshuai.xi     {
1727*53ee8cc1Swenshuai.xi         if (pbmpfmt->bScale == true)
1728*53ee8cc1Swenshuai.xi         {
1729*53ee8cc1Swenshuai.xi             u32Value = Divide2Fixed(u32Width, pbmpfmt->width, 1, 12);//<< 2 ; //sc
1730*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_DX, u32Value & 0xffff);
1731*53ee8cc1Swenshuai.xi             u32Value = Divide2Fixed((u32Width - pbmpfmt->width), 2* pbmpfmt->width, 1, 12);// << 2; //sc
1732*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_INIT_DX, u32Value);
1733*53ee8cc1Swenshuai.xi 
1734*53ee8cc1Swenshuai.xi 
1735*53ee8cc1Swenshuai.xi             u32Value = Divide2Fixed(u32Height, pbmpfmt->height, 1, 12);// << 2 ; //sc
1736*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_DY, u32Value & 0xffff);
1737*53ee8cc1Swenshuai.xi             u32Value = Divide2Fixed((u32Height- pbmpfmt->height), 2* pbmpfmt->height, 1, 12);// << 2; //sc
1738*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_INIT_DY, u32Value);
1739*53ee8cc1Swenshuai.xi 
1740*53ee8cc1Swenshuai.xi             u32Width = pbmpfmt->width;
1741*53ee8cc1Swenshuai.xi             u32Height = pbmpfmt->height;
1742*53ee8cc1Swenshuai.xi             u32Value2 |= PE_VAL_EN_STRETCH_BITBLT;
1743*53ee8cc1Swenshuai.xi         }
1744*53ee8cc1Swenshuai.xi         else
1745*53ee8cc1Swenshuai.xi         {
1746*53ee8cc1Swenshuai.xi             u32Width = pbmpfmt->width;
1747*53ee8cc1Swenshuai.xi             u32Height = pbmpfmt->height;
1748*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_DX, 0x1000);
1749*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_DY, 0x1000);
1750*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_INIT_DX, 0);
1751*53ee8cc1Swenshuai.xi             PE_WriteReg(PE_REG_STBB_INIT_DY, 0);
1752*53ee8cc1Swenshuai.xi             u32Value2 |= PE_VAL_EN_STRETCH_BITBLT;
1753*53ee8cc1Swenshuai.xi         }
1754*53ee8cc1Swenshuai.xi     }
1755*53ee8cc1Swenshuai.xi     else
1756*53ee8cc1Swenshuai.xi     {
1757*53ee8cc1Swenshuai.xi         PE_WriteReg(PE_REG_STBB_DX, 0x1000);
1758*53ee8cc1Swenshuai.xi         PE_WriteReg(PE_REG_STBB_DY, 0x1000);
1759*53ee8cc1Swenshuai.xi         u32Value2 &= ~PE_VAL_EN_STRETCH_BITBLT;
1760*53ee8cc1Swenshuai.xi     }
1761*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_FMT_BLT, u32Value2);
1762*53ee8cc1Swenshuai.xi 
1763*53ee8cc1Swenshuai.xi     if (u32Value2 & PE_VAL_EN_STRETCH_BITBLT)
1764*53ee8cc1Swenshuai.xi     {
1765*53ee8cc1Swenshuai.xi         _u32Reg60hFlag |= PE_VAL_STBB_PATCH;
1766*53ee8cc1Swenshuai.xi     }
1767*53ee8cc1Swenshuai.xi 
1768*53ee8cc1Swenshuai.xi     //------------------------------------------------------------
1769*53ee8cc1Swenshuai.xi     // Destination coordinate
1770*53ee8cc1Swenshuai.xi     //------------------------------------------------------------
1771*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_PRI_V0_X, pbmpfmt->x);
1772*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_PRI_V0_Y, pbmpfmt->y);
1773*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_PRI_V1_X, pbmpfmt->x + u32Width - 1);
1774*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_PRI_V1_Y, pbmpfmt->y + u32Height - 1);
1775*53ee8cc1Swenshuai.xi 
1776*53ee8cc1Swenshuai.xi     if (_u32Reg60hFlag & PE_VAL_DRAW_SRC_DIR_X_NEG)
1777*53ee8cc1Swenshuai.xi     {
1778*53ee8cc1Swenshuai.xi         PE_WriteReg(PE_REG_PRI_V2_X, _BitmapTable[handle].width - 1);
1779*53ee8cc1Swenshuai.xi     }
1780*53ee8cc1Swenshuai.xi 
1781*53ee8cc1Swenshuai.xi     if (_u32Reg60hFlag & PE_VAL_DRAW_SRC_DIR_Y_NEG)
1782*53ee8cc1Swenshuai.xi     {
1783*53ee8cc1Swenshuai.xi         PE_WriteReg(PE_REG_PRI_V2_Y, _BitmapTable[handle].height - 1);
1784*53ee8cc1Swenshuai.xi     }
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi     PE_WriteReg(PE_REG_CMD, (PE_VAL_PRIM_BITBLT|_u32Reg60hFlag));
1787*53ee8cc1Swenshuai.xi */
1788*53ee8cc1Swenshuai.xi #endif
1789*53ee8cc1Swenshuai.xi 
1790*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1791*53ee8cc1Swenshuai.xi }
1792*53ee8cc1Swenshuai.xi 
GFX_TextOutEx(void * pInstance,MS_S32 fhandle,MS_U8 * pindex,MS_U32 strwidth,GFX_TextOutInfo * pfmt,GFX_FontInfo * pFonttable)1793*53ee8cc1Swenshuai.xi static GFX_Result GFX_TextOutEx(void* pInstance,MS_S32 fhandle,
1794*53ee8cc1Swenshuai.xi                              MS_U8 *pindex,
1795*53ee8cc1Swenshuai.xi                              MS_U32 strwidth,
1796*53ee8cc1Swenshuai.xi                              GFX_TextOutInfo *pfmt,
1797*53ee8cc1Swenshuai.xi                              GFX_FontInfo * pFonttable)
1798*53ee8cc1Swenshuai.xi {
1799*53ee8cc1Swenshuai.xi     GFX_DEBUGINFO(GFX_INFO( "MApi_GFX_TextOut\n" ));
1800*53ee8cc1Swenshuai.xi 
1801*53ee8cc1Swenshuai.xi     MS_U32              flags = 0, offset;
1802*53ee8cc1Swenshuai.xi     MS_PHY              addr;
1803*53ee8cc1Swenshuai.xi     MS_U16              char_idx;
1804*53ee8cc1Swenshuai.xi     MS_U32              pitch;
1805*53ee8cc1Swenshuai.xi     MS_S32              dis;
1806*53ee8cc1Swenshuai.xi     GE_Rect             src;
1807*53ee8cc1Swenshuai.xi     GE_BufFmt           fmt;
1808*53ee8cc1Swenshuai.xi     MS_VIRT             ptr_addr;
1809*53ee8cc1Swenshuai.xi     union
1810*53ee8cc1Swenshuai.xi     {
1811*53ee8cc1Swenshuai.xi         GE_Rect dstblk;
1812*53ee8cc1Swenshuai.xi         GE_DstBitBltType drvdstblk;
1813*53ee8cc1Swenshuai.xi     }dst;
1814*53ee8cc1Swenshuai.xi    // OSD_RESOURCE_FONT_INFO osd_fonttable;
1815*53ee8cc1Swenshuai.xi     APICheckU02();
1816*53ee8cc1Swenshuai.xi 
1817*53ee8cc1Swenshuai.xi     if (pFonttable == NULL)
1818*53ee8cc1Swenshuai.xi     {
1819*53ee8cc1Swenshuai.xi         return GFX_INVALID_FONT_HANDLE;
1820*53ee8cc1Swenshuai.xi     }
1821*53ee8cc1Swenshuai.xi 
1822*53ee8cc1Swenshuai.xi     if (!pFonttable->inUsed)
1823*53ee8cc1Swenshuai.xi     {
1824*53ee8cc1Swenshuai.xi         return GFX_INVALID_FONT_HANDLE;
1825*53ee8cc1Swenshuai.xi     }
1826*53ee8cc1Swenshuai.xi 
1827*53ee8cc1Swenshuai.xi     if (pindex == NULL)
1828*53ee8cc1Swenshuai.xi     {
1829*53ee8cc1Swenshuai.xi         return GFX_INVALID_PARAMETERS;
1830*53ee8cc1Swenshuai.xi     }
1831*53ee8cc1Swenshuai.xi 
1832*53ee8cc1Swenshuai.xi     if (!GFX_CheckInClipWindow(pfmt->dstblk.x, pfmt->dstblk.y,
1833*53ee8cc1Swenshuai.xi                               pfmt->dstblk.x+pfmt->dstblk.width-1, pfmt->dstblk.y+pfmt->dstblk.height-1))
1834*53ee8cc1Swenshuai.xi     {
1835*53ee8cc1Swenshuai.xi         return GFX_FAIL;
1836*53ee8cc1Swenshuai.xi     }
1837*53ee8cc1Swenshuai.xi 
1838*53ee8cc1Swenshuai.xi     if(pfmt->flag & GFXFONT_FLAG_COMPACT)
1839*53ee8cc1Swenshuai.xi     {
1840*53ee8cc1Swenshuai.xi         dis = pfmt->dis;
1841*53ee8cc1Swenshuai.xi     }
1842*53ee8cc1Swenshuai.xi     else if (pfmt->flag & GFXFONT_FLAG_GAP)
1843*53ee8cc1Swenshuai.xi     {
1844*53ee8cc1Swenshuai.xi         dis = (0-pfmt->dis);
1845*53ee8cc1Swenshuai.xi     }
1846*53ee8cc1Swenshuai.xi     else
1847*53ee8cc1Swenshuai.xi     {
1848*53ee8cc1Swenshuai.xi         dis = 0;
1849*53ee8cc1Swenshuai.xi     }
1850*53ee8cc1Swenshuai.xi 
1851*53ee8cc1Swenshuai.xi     offset = pFonttable->offset;
1852*53ee8cc1Swenshuai.xi     addr = pFonttable->addr;
1853*53ee8cc1Swenshuai.xi     fmt = (GE_BufFmt)pFonttable->fmt;
1854*53ee8cc1Swenshuai.xi     pitch = pFonttable->pitch;
1855*53ee8cc1Swenshuai.xi 
1856*53ee8cc1Swenshuai.xi     // first font character
1857*53ee8cc1Swenshuai.xi     if (strwidth == 2)
1858*53ee8cc1Swenshuai.xi     {
1859*53ee8cc1Swenshuai.xi         ptr_addr = (MS_VIRT)pindex;
1860*53ee8cc1Swenshuai.xi         if(ptr_addr % 2 != 0)
1861*53ee8cc1Swenshuai.xi         {
1862*53ee8cc1Swenshuai.xi             GFX_DEBUGINFO(GFX_ERR("%s: %d\n", __FUNCTION__ , __LINE__);)
1863*53ee8cc1Swenshuai.xi             return GFX_INVALID_PARAMETERS;
1864*53ee8cc1Swenshuai.xi         }
1865*53ee8cc1Swenshuai.xi         char_idx = *(MS_U16*)ptr_addr;
1866*53ee8cc1Swenshuai.xi         pindex += 2;
1867*53ee8cc1Swenshuai.xi     }
1868*53ee8cc1Swenshuai.xi     else
1869*53ee8cc1Swenshuai.xi     {
1870*53ee8cc1Swenshuai.xi         char_idx = *(MS_U8*)pindex;
1871*53ee8cc1Swenshuai.xi         pindex += 1;
1872*53ee8cc1Swenshuai.xi     }
1873*53ee8cc1Swenshuai.xi     src.x = 0;
1874*53ee8cc1Swenshuai.xi     src.y = 0;
1875*53ee8cc1Swenshuai.xi     src.width = pFonttable->width;
1876*53ee8cc1Swenshuai.xi     src.height = pFonttable->height;
1877*53ee8cc1Swenshuai.xi     dst.dstblk.x = pfmt->dstblk.x;
1878*53ee8cc1Swenshuai.xi     dst.dstblk.y = pfmt->dstblk.y;
1879*53ee8cc1Swenshuai.xi     if (pfmt->flag & GFXFONT_FLAG_SCALE)
1880*53ee8cc1Swenshuai.xi     {
1881*53ee8cc1Swenshuai.xi         dst.dstblk.width = pfmt->dstblk.width;
1882*53ee8cc1Swenshuai.xi         dst.dstblk.height = pfmt->dstblk.height;
1883*53ee8cc1Swenshuai.xi         flags |= E_GE_FLAG_BLT_STRETCH;
1884*53ee8cc1Swenshuai.xi     }
1885*53ee8cc1Swenshuai.xi     else
1886*53ee8cc1Swenshuai.xi     {
1887*53ee8cc1Swenshuai.xi         //NOTE: it's because some legacy code does not specify dstblk.width/height
1888*53ee8cc1Swenshuai.xi         dst.dstblk.width = pFonttable->width;
1889*53ee8cc1Swenshuai.xi         dst.dstblk.height = pFonttable->height;
1890*53ee8cc1Swenshuai.xi     }
1891*53ee8cc1Swenshuai.xi 
1892*53ee8cc1Swenshuai.xi     while (char_idx != '\0')
1893*53ee8cc1Swenshuai.xi     {
1894*53ee8cc1Swenshuai.xi         MDrv_GE_SetSrcBuffer(g_apiGFXLocal.g_pGEContext, fmt, src.width, src.height, (addr + char_idx*offset), pitch, 0);
1895*53ee8cc1Swenshuai.xi 
1896*53ee8cc1Swenshuai.xi         flags |= GFX_RectBltFlags(pInstance);
1897*53ee8cc1Swenshuai.xi         MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext,&src, &dst.drvdstblk, flags, NULL);
1898*53ee8cc1Swenshuai.xi 
1899*53ee8cc1Swenshuai.xi         if (strwidth == 2)
1900*53ee8cc1Swenshuai.xi         {
1901*53ee8cc1Swenshuai.xi             ptr_addr = (MS_VIRT)pindex;
1902*53ee8cc1Swenshuai.xi             if(ptr_addr % 2 != 0)
1903*53ee8cc1Swenshuai.xi             {
1904*53ee8cc1Swenshuai.xi                 GFX_DEBUGINFO(GFX_ERR("%s: %d\n", __FUNCTION__ , __LINE__);)
1905*53ee8cc1Swenshuai.xi                 return GFX_INVALID_PARAMETERS;
1906*53ee8cc1Swenshuai.xi             }
1907*53ee8cc1Swenshuai.xi             char_idx = *(MS_U16*)ptr_addr;
1908*53ee8cc1Swenshuai.xi             pindex += 2;
1909*53ee8cc1Swenshuai.xi         }
1910*53ee8cc1Swenshuai.xi         else
1911*53ee8cc1Swenshuai.xi         {
1912*53ee8cc1Swenshuai.xi             char_idx = *(MS_U8*)pindex;
1913*53ee8cc1Swenshuai.xi             pindex += 1;
1914*53ee8cc1Swenshuai.xi         }
1915*53ee8cc1Swenshuai.xi         dst.dstblk.x += dst.dstblk.width - dis; // next position
1916*53ee8cc1Swenshuai.xi     }
1917*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
1918*53ee8cc1Swenshuai.xi }
1919*53ee8cc1Swenshuai.xi 
MApi_GFX_TextOut_U02(void * pInstance,MS_S32 fhandle,MS_U8 * pindex,MS_U32 strwidth,GFX_TextOutInfo * pfmt,GFX_FontInfo * pFonttable)1920*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_TextOut_U02(void* pInstance, MS_S32 fhandle, MS_U8 *pindex, MS_U32 strwidth, GFX_TextOutInfo *pfmt, GFX_FontInfo * pFonttable)
1921*53ee8cc1Swenshuai.xi {
1922*53ee8cc1Swenshuai.xi     GFX_DEBUGINFO(GFX_INFO( "MApi_GFX_TextOut\n" ));
1923*53ee8cc1Swenshuai.xi //    OSD_RESOURCE_FONT_INFO osd_fonttable;
1924*53ee8cc1Swenshuai.xi     GFX_GlyphDispInfo *pGlyInfo = pfmt->pGlyphDispInfo;
1925*53ee8cc1Swenshuai.xi     MS_U16 glyph_index, char_code;
1926*53ee8cc1Swenshuai.xi     //msAPI_OSD_RESOURCE_GetFontInfo(fhandle, &osd_fonttable);
1927*53ee8cc1Swenshuai.xi     GFX_RgbColor tmpclr1, tmpclr2;
1928*53ee8cc1Swenshuai.xi     MS_VIRT ptr_addr;
1929*53ee8cc1Swenshuai.xi     MS_U16* ptr_u16;
1930*53ee8cc1Swenshuai.xi     MS_BOOL bTextOutPatch;
1931*53ee8cc1Swenshuai.xi //    GFX_Result Gfx_Ret = GFX_SUCCESS;
1932*53ee8cc1Swenshuai.xi 
1933*53ee8cc1Swenshuai.xi     APICheckU02();
1934*53ee8cc1Swenshuai.xi 
1935*53ee8cc1Swenshuai.xi     if (pFonttable == NULL)
1936*53ee8cc1Swenshuai.xi     {
1937*53ee8cc1Swenshuai.xi         return GFX_INVALID_FONT_HANDLE;
1938*53ee8cc1Swenshuai.xi     }
1939*53ee8cc1Swenshuai.xi 
1940*53ee8cc1Swenshuai.xi     bTextOutPatch = _GE_TextOutPatch(g_apiGFXLocal.g_pGEContext);
1941*53ee8cc1Swenshuai.xi 
1942*53ee8cc1Swenshuai.xi     if(bTextOutPatch == TRUE)
1943*53ee8cc1Swenshuai.xi     {
1944*53ee8cc1Swenshuai.xi         //This is for A6 U02 alpha constant HW bug, when alpha value = 0x0 in  alpha constant mode.It desnt work.
1945*53ee8cc1Swenshuai.xi         //So we dont use alpha constant mode when color.a = 0x0
1946*53ee8cc1Swenshuai.xi         if(pfmt->color.a != 0x0)
1947*53ee8cc1Swenshuai.xi             MApi_GFX_SetAlpha_U02(pInstance, true, COEF_ASRC, ABL_FROM_CONST, pfmt->color.a);
1948*53ee8cc1Swenshuai.xi     }
1949*53ee8cc1Swenshuai.xi     else
1950*53ee8cc1Swenshuai.xi     {
1951*53ee8cc1Swenshuai.xi         MApi_GFX_SetAlpha_U02(pInstance, true, COEF_ASRC, ABL_FROM_CONST, pfmt->color.a);
1952*53ee8cc1Swenshuai.xi         pfmt->color.a = 0xff;
1953*53ee8cc1Swenshuai.xi     }
1954*53ee8cc1Swenshuai.xi     // Forground color
1955*53ee8cc1Swenshuai.xi     if (pFonttable->fmt == GFX_FMT_I2)
1956*53ee8cc1Swenshuai.xi     {
1957*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xff) :(pfmt->color.a = 0x0);
1958*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 3, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1959*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xaa) :(pfmt->color.a = 0x0);
1960*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 2, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1961*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x55) :(pfmt->color.a = 0x0);
1962*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 1, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1963*53ee8cc1Swenshuai.xi 
1964*53ee8cc1Swenshuai.xi     }
1965*53ee8cc1Swenshuai.xi     else if (pFonttable->fmt == GFX_FMT_I4)
1966*53ee8cc1Swenshuai.xi     {
1967*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xff) :(pfmt->color.a = 0x0);
1968*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 15, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1969*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xee) :(pfmt->color.a = 0x0);
1970*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 14, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1971*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xdd) :(pfmt->color.a = 0x0);
1972*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 13, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1973*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xcc) :(pfmt->color.a = 0x0);
1974*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 12, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1975*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xbb) :(pfmt->color.a = 0x0);
1976*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 11, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1977*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xaa) :(pfmt->color.a = 0x0);
1978*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 10, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1979*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x99) :(pfmt->color.a = 0x0);
1980*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 9, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1981*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x88) :(pfmt->color.a = 0x0);
1982*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 8, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1983*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x77) :(pfmt->color.a = 0x0);
1984*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 7, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1985*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x66) :(pfmt->color.a = 0x0);
1986*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 6, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1987*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x55) :(pfmt->color.a = 0x0);
1988*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 5, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1989*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x44) :(pfmt->color.a = 0x0);
1990*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 4, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1991*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x33) :(pfmt->color.a = 0x0);
1992*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 3, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1993*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x22) :(pfmt->color.a = 0x0);
1994*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 2, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1995*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0x11) :(pfmt->color.a = 0x0);
1996*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 1, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
1997*53ee8cc1Swenshuai.xi     }
1998*53ee8cc1Swenshuai.xi     else
1999*53ee8cc1Swenshuai.xi     {
2000*53ee8cc1Swenshuai.xi         pfmt->color.a?(pfmt->color.a = 0xff) :(pfmt->color.a = 0x0);
2001*53ee8cc1Swenshuai.xi         MApi_GFX_SetIntensity_U02(pInstance, 1, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
2002*53ee8cc1Swenshuai.xi     }
2003*53ee8cc1Swenshuai.xi #if PATCH_T3_SCK_FAIL
2004*53ee8cc1Swenshuai.xi         pfmt->color.a = 0xff; //[2009.07.02]T3/U3 GE HW issue:set source alpha is max for filtering the background color
2005*53ee8cc1Swenshuai.xi         pfmt->color.r = pfmt->color.g = pfmt->color.b = 0x01;
2006*53ee8cc1Swenshuai.xi #else
2007*53ee8cc1Swenshuai.xi     pfmt->color.a = pfmt->color.r = pfmt->color.g = pfmt->color.b = 0x01;
2008*53ee8cc1Swenshuai.xi #endif
2009*53ee8cc1Swenshuai.xi     MApi_GFX_SetIntensity_U02(pInstance, 0, (GFX_Buffer_Format)GFX_FMT_ARGB8888, (MS_U32*)&(pfmt->u32data));
2010*53ee8cc1Swenshuai.xi 
2011*53ee8cc1Swenshuai.xi     // Color key
2012*53ee8cc1Swenshuai.xi     tmpclr1.a=tmpclr1.r=tmpclr1.g=tmpclr1.b=0;
2013*53ee8cc1Swenshuai.xi     tmpclr2.a = 0x01;
2014*53ee8cc1Swenshuai.xi     tmpclr2.r = 0x01;
2015*53ee8cc1Swenshuai.xi     tmpclr2.g = 0x01;
2016*53ee8cc1Swenshuai.xi     tmpclr2.b = 0x01;
2017*53ee8cc1Swenshuai.xi 
2018*53ee8cc1Swenshuai.xi     //MApi_GFX_SetDither(FALSE);   // FIXME. Not need to be set here. Need to find root cause.
2019*53ee8cc1Swenshuai.xi 
2020*53ee8cc1Swenshuai.xi     MApi_GFX_SetSrcColorKey_U02(pInstance, TRUE, CK_OP_EQUAL, GFX_FMT_ARGB8888, &tmpclr1, &tmpclr2);
2021*53ee8cc1Swenshuai.xi 
2022*53ee8cc1Swenshuai.xi 
2023*53ee8cc1Swenshuai.xi     if ((pfmt->flag & GFXFONT_FLAG_VARWIDTH) &&
2024*53ee8cc1Swenshuai.xi         (pFonttable->pBBox!= NULL))
2025*53ee8cc1Swenshuai.xi     {
2026*53ee8cc1Swenshuai.xi         MS_U32 i;
2027*53ee8cc1Swenshuai.xi         MS_U32 u32PosX = 0;
2028*53ee8cc1Swenshuai.xi         MS_U32 u32PosY = 0;
2029*53ee8cc1Swenshuai.xi         MS_U32 u32Width = 0;
2030*53ee8cc1Swenshuai.xi         MS_U32 u32Height = 0;
2031*53ee8cc1Swenshuai.xi         MS_S8 dis;
2032*53ee8cc1Swenshuai.xi         MS_U16 gap = 0;
2033*53ee8cc1Swenshuai.xi         MS_U32 start = 0;
2034*53ee8cc1Swenshuai.xi         GFX_FontInfo* pFont = pFonttable;
2035*53ee8cc1Swenshuai.xi 
2036*53ee8cc1Swenshuai.xi         GFX_CharInfo  Char;
2037*53ee8cc1Swenshuai.xi         GFX_TextOutInfo fmt;
2038*53ee8cc1Swenshuai.xi         MS_S32 spoint_overlay_x = 0;
2039*53ee8cc1Swenshuai.xi         MS_S32 spoint_overlay_y = 0;
2040*53ee8cc1Swenshuai.xi 
2041*53ee8cc1Swenshuai.xi         if (!pFont->inUsed)
2042*53ee8cc1Swenshuai.xi         {
2043*53ee8cc1Swenshuai.xi             return GFX_INVALID_FONT_HANDLE;
2044*53ee8cc1Swenshuai.xi         }
2045*53ee8cc1Swenshuai.xi         if (pindex == NULL)
2046*53ee8cc1Swenshuai.xi         {
2047*53ee8cc1Swenshuai.xi             return GFX_INVALID_PARAMETERS;
2048*53ee8cc1Swenshuai.xi         }
2049*53ee8cc1Swenshuai.xi 
2050*53ee8cc1Swenshuai.xi         if(pfmt->flag & GFXFONT_FLAG_COMPACT)
2051*53ee8cc1Swenshuai.xi         {
2052*53ee8cc1Swenshuai.xi             dis = pfmt->dis;
2053*53ee8cc1Swenshuai.xi         }
2054*53ee8cc1Swenshuai.xi         else if (pfmt->flag & GFXFONT_FLAG_GAP)
2055*53ee8cc1Swenshuai.xi         {
2056*53ee8cc1Swenshuai.xi             gap = pfmt->gap;
2057*53ee8cc1Swenshuai.xi             dis = 0;
2058*53ee8cc1Swenshuai.xi         }
2059*53ee8cc1Swenshuai.xi         else
2060*53ee8cc1Swenshuai.xi         {
2061*53ee8cc1Swenshuai.xi             dis = 0;
2062*53ee8cc1Swenshuai.xi         }
2063*53ee8cc1Swenshuai.xi 
2064*53ee8cc1Swenshuai.xi 
2065*53ee8cc1Swenshuai.xi         memcpy((void*)&fmt, pfmt, sizeof(GFX_TextOutInfo));
2066*53ee8cc1Swenshuai.xi         Char.fmt = pFont->fmt;
2067*53ee8cc1Swenshuai.xi         Char.Voffset = 0;
2068*53ee8cc1Swenshuai.xi         Char.height = pFont->height;
2069*53ee8cc1Swenshuai.xi         Char.pitch = pFont->pitch;
2070*53ee8cc1Swenshuai.xi 
2071*53ee8cc1Swenshuai.xi         i = 0;
2072*53ee8cc1Swenshuai.xi 
2073*53ee8cc1Swenshuai.xi         //pu16TmpIndex =(MS_U16 *)pindex;
2074*53ee8cc1Swenshuai.xi         //while (*pu16TmpIndex != '\0')
2075*53ee8cc1Swenshuai.xi         for( i = 0; i < 250; i++)
2076*53ee8cc1Swenshuai.xi         {
2077*53ee8cc1Swenshuai.xi 
2078*53ee8cc1Swenshuai.xi 
2079*53ee8cc1Swenshuai.xi             if (strwidth == 2)
2080*53ee8cc1Swenshuai.xi             {
2081*53ee8cc1Swenshuai.xi                 ptr_addr = (MS_VIRT)pindex;
2082*53ee8cc1Swenshuai.xi                 if(ptr_addr % 2 != 0)
2083*53ee8cc1Swenshuai.xi                 {
2084*53ee8cc1Swenshuai.xi                     GFX_DEBUGINFO(GFX_DBUG("%s: %d\n", __FUNCTION__ , __LINE__);)
2085*53ee8cc1Swenshuai.xi                     MApi_GFX_SetSrcColorKey_U02(pInstance, FALSE, CK_OP_EQUAL, GFX_FMT_ARGB8888, &tmpclr1, &tmpclr2);
2086*53ee8cc1Swenshuai.xi                     return GFX_INVALID_PARAMETERS;
2087*53ee8cc1Swenshuai.xi                 }
2088*53ee8cc1Swenshuai.xi                 ptr_u16 = (MS_U16*)ptr_addr;
2089*53ee8cc1Swenshuai.xi                 char_code = ((MS_U16*)ptr_u16)[i];
2090*53ee8cc1Swenshuai.xi             }
2091*53ee8cc1Swenshuai.xi             else
2092*53ee8cc1Swenshuai.xi             {
2093*53ee8cc1Swenshuai.xi                 char_code = (MS_U8)pindex[i];
2094*53ee8cc1Swenshuai.xi             }
2095*53ee8cc1Swenshuai.xi 
2096*53ee8cc1Swenshuai.xi             if(char_code == 0 )
2097*53ee8cc1Swenshuai.xi                 break;
2098*53ee8cc1Swenshuai.xi 
2099*53ee8cc1Swenshuai.xi             if (pfmt->pGlyphDispInfo == NULL)
2100*53ee8cc1Swenshuai.xi             {
2101*53ee8cc1Swenshuai.xi                 glyph_index = char_code;
2102*53ee8cc1Swenshuai.xi             }
2103*53ee8cc1Swenshuai.xi             else
2104*53ee8cc1Swenshuai.xi             {
2105*53ee8cc1Swenshuai.xi                 glyph_index = pGlyInfo[i].u16Index;
2106*53ee8cc1Swenshuai.xi             }
2107*53ee8cc1Swenshuai.xi 
2108*53ee8cc1Swenshuai.xi             if (i == 0)
2109*53ee8cc1Swenshuai.xi             {
2110*53ee8cc1Swenshuai.xi                 u32PosX = pfmt->dstblk.x;
2111*53ee8cc1Swenshuai.xi                 u32PosY = pfmt->dstblk.y;
2112*53ee8cc1Swenshuai.xi                 start = spoint_overlay_x = pfmt->dstblk.x;
2113*53ee8cc1Swenshuai.xi                 spoint_overlay_y = pfmt->dstblk.y;
2114*53ee8cc1Swenshuai.xi             }
2115*53ee8cc1Swenshuai.xi 
2116*53ee8cc1Swenshuai.xi             // Move to here: workaround for unicode string end detection issue.
2117*53ee8cc1Swenshuai.xi             if(pGlyInfo[i].u16Index == ERR_NULL_INDEX)
2118*53ee8cc1Swenshuai.xi             {
2119*53ee8cc1Swenshuai.xi                 GFX_DEBUGINFO(GFX_DBUG("\npGlyphDispInfo[%d].u16Index error", i););
2120*53ee8cc1Swenshuai.xi                 continue;
2121*53ee8cc1Swenshuai.xi             }
2122*53ee8cc1Swenshuai.xi 
2123*53ee8cc1Swenshuai.xi 
2124*53ee8cc1Swenshuai.xi 
2125*53ee8cc1Swenshuai.xi             if (fmt.flag & GFXFONT_FLAG_SCALE)
2126*53ee8cc1Swenshuai.xi             {
2127*53ee8cc1Swenshuai.xi                 u32Width = (pGlyInfo[i].u8Width)*(pfmt->dstblk.width/pFont->width);
2128*53ee8cc1Swenshuai.xi                 u32Height = (pFont->height)*(pfmt->dstblk.height/pFont->height);
2129*53ee8cc1Swenshuai.xi             }
2130*53ee8cc1Swenshuai.xi             else
2131*53ee8cc1Swenshuai.xi             {
2132*53ee8cc1Swenshuai.xi                 u32Width = pGlyInfo[i].u8Width;
2133*53ee8cc1Swenshuai.xi                 u32Height = pFont->height;
2134*53ee8cc1Swenshuai.xi             }
2135*53ee8cc1Swenshuai.xi             fmt.dstblk.x = u32PosX;
2136*53ee8cc1Swenshuai.xi             fmt.dstblk.y = u32PosY;
2137*53ee8cc1Swenshuai.xi             fmt.dstblk.width = u32Width;
2138*53ee8cc1Swenshuai.xi             fmt.dstblk.height = u32Height;
2139*53ee8cc1Swenshuai.xi 
2140*53ee8cc1Swenshuai.xi             Char.addr = pFont->addr + (glyph_index*pFont->offset);
2141*53ee8cc1Swenshuai.xi             Char.Hoffset = pGlyInfo[i].u8X0;
2142*53ee8cc1Swenshuai.xi             Char.width = pGlyInfo[i].u8Width;
2143*53ee8cc1Swenshuai.xi 
2144*53ee8cc1Swenshuai.xi             if ((pGlyInfo[i].overlap_info.s8Xoffset!=0)||(pGlyInfo[i].overlap_info.s8Yoffset!=0))
2145*53ee8cc1Swenshuai.xi             {
2146*53ee8cc1Swenshuai.xi                 Char.Hoffset = 0;//pGlyInfo[i].u8X0;
2147*53ee8cc1Swenshuai.xi                 Char.width = pFont->width;//pGlyInfo[i].u8Width;
2148*53ee8cc1Swenshuai.xi                 fmt.dstblk.width = pFont->width;
2149*53ee8cc1Swenshuai.xi                 fmt.dstblk.height = pFont->height;
2150*53ee8cc1Swenshuai.xi             }
2151*53ee8cc1Swenshuai.xi 
2152*53ee8cc1Swenshuai.xi #if 1
2153*53ee8cc1Swenshuai.xi {
2154*53ee8cc1Swenshuai.xi             MS_U32  flags = 0;
2155*53ee8cc1Swenshuai.xi             GE_Rect src;
2156*53ee8cc1Swenshuai.xi             union
2157*53ee8cc1Swenshuai.xi             {
2158*53ee8cc1Swenshuai.xi                 GE_Rect dstblk;
2159*53ee8cc1Swenshuai.xi                 GE_DstBitBltType drvdstblk;
2160*53ee8cc1Swenshuai.xi             }dst;
2161*53ee8cc1Swenshuai.xi 
2162*53ee8cc1Swenshuai.xi             MDrv_GE_SetSrcBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)Char.fmt, 0, 0, Char.addr, Char.pitch, 0);
2163*53ee8cc1Swenshuai.xi 
2164*53ee8cc1Swenshuai.xi             src.x = Char.Hoffset;
2165*53ee8cc1Swenshuai.xi             src.y = Char.Voffset;
2166*53ee8cc1Swenshuai.xi             src.width = Char.width;
2167*53ee8cc1Swenshuai.xi             src.height = Char.height;
2168*53ee8cc1Swenshuai.xi             if (pfmt->flag & GFXFONT_FLAG_SCALE)
2169*53ee8cc1Swenshuai.xi             {
2170*53ee8cc1Swenshuai.xi                 flags |= E_GE_FLAG_BLT_STRETCH;
2171*53ee8cc1Swenshuai.xi             }
2172*53ee8cc1Swenshuai.xi 
2173*53ee8cc1Swenshuai.xi             if (g_apiGFXLocal._bMirrorH)
2174*53ee8cc1Swenshuai.xi             {
2175*53ee8cc1Swenshuai.xi                 src.x =  pGlyInfo[i].u8X0 + pGlyInfo[i].u8Width - 1;//Char.Hoffset;
2176*53ee8cc1Swenshuai.xi             }
2177*53ee8cc1Swenshuai.xi             dst.dstblk.x = fmt.dstblk.x;
2178*53ee8cc1Swenshuai.xi             dst.dstblk.y = fmt.dstblk.y;
2179*53ee8cc1Swenshuai.xi             dst.dstblk.width = fmt.dstblk.width;
2180*53ee8cc1Swenshuai.xi             dst.dstblk.height = fmt.dstblk.height;
2181*53ee8cc1Swenshuai.xi 
2182*53ee8cc1Swenshuai.xi             flags |= GFX_RectBltFlags(pInstance);
2183*53ee8cc1Swenshuai.xi 
2184*53ee8cc1Swenshuai.xi             MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext,&src, &dst.drvdstblk, flags, NULL);
2185*53ee8cc1Swenshuai.xi 
2186*53ee8cc1Swenshuai.xi             if (pfmt->flag & GFXFONT_FLAG_BOLD)
2187*53ee8cc1Swenshuai.xi             {
2188*53ee8cc1Swenshuai.xi                 //left side
2189*53ee8cc1Swenshuai.xi                 dst.dstblk.x -=1;
2190*53ee8cc1Swenshuai.xi                 MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext,&src, &dst.drvdstblk, flags, NULL);
2191*53ee8cc1Swenshuai.xi 
2192*53ee8cc1Swenshuai.xi                 //right side
2193*53ee8cc1Swenshuai.xi                 dst.dstblk.x +=2;
2194*53ee8cc1Swenshuai.xi                 MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext,&src, &dst.drvdstblk, flags, NULL);
2195*53ee8cc1Swenshuai.xi 
2196*53ee8cc1Swenshuai.xi                 //up side
2197*53ee8cc1Swenshuai.xi                 dst.dstblk.y -=1;
2198*53ee8cc1Swenshuai.xi                 MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext,&src, &dst.drvdstblk, flags, NULL);
2199*53ee8cc1Swenshuai.xi 
2200*53ee8cc1Swenshuai.xi                 //down side
2201*53ee8cc1Swenshuai.xi                 dst.dstblk.y +=2;
2202*53ee8cc1Swenshuai.xi                 MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext,&src, &dst.drvdstblk, flags, NULL);
2203*53ee8cc1Swenshuai.xi             }
2204*53ee8cc1Swenshuai.xi 
2205*53ee8cc1Swenshuai.xi }
2206*53ee8cc1Swenshuai.xi #else
2207*53ee8cc1Swenshuai.xi             PE_CharacterOut(&Char, &fmt);
2208*53ee8cc1Swenshuai.xi #endif
2209*53ee8cc1Swenshuai.xi 
2210*53ee8cc1Swenshuai.xi 
2211*53ee8cc1Swenshuai.xi             if ((pGlyInfo[i+1].overlap_info.s8Xoffset==0)&&(pGlyInfo[i+1].overlap_info.s8Yoffset==0))
2212*53ee8cc1Swenshuai.xi 
2213*53ee8cc1Swenshuai.xi             {
2214*53ee8cc1Swenshuai.xi                 spoint_overlay_x = spoint_overlay_x +u32Width -dis +gap;
2215*53ee8cc1Swenshuai.xi                   u32PosX = spoint_overlay_x ;
2216*53ee8cc1Swenshuai.xi 
2217*53ee8cc1Swenshuai.xi                   u32PosY = pfmt->dstblk.y;
2218*53ee8cc1Swenshuai.xi 
2219*53ee8cc1Swenshuai.xi                 if (u32PosX <= start)
2220*53ee8cc1Swenshuai.xi                 {
2221*53ee8cc1Swenshuai.xi                    spoint_overlay_x = u32PosX = start;
2222*53ee8cc1Swenshuai.xi                 }
2223*53ee8cc1Swenshuai.xi             }
2224*53ee8cc1Swenshuai.xi             else
2225*53ee8cc1Swenshuai.xi             {
2226*53ee8cc1Swenshuai.xi                 u32PosX = spoint_overlay_x; //- dis + gap;
2227*53ee8cc1Swenshuai.xi                 u32PosX += pGlyInfo[i+1].overlap_info.s8Xoffset;
2228*53ee8cc1Swenshuai.xi                 u32PosY = spoint_overlay_y; //- dis + gap;
2229*53ee8cc1Swenshuai.xi                 u32PosY += pGlyInfo[i+1].overlap_info.s8Yoffset;
2230*53ee8cc1Swenshuai.xi                 start = u32PosX + pFont->width;
2231*53ee8cc1Swenshuai.xi             }
2232*53ee8cc1Swenshuai.xi         }
2233*53ee8cc1Swenshuai.xi         MApi_GFX_SetSrcColorKey_U02(pInstance, FALSE, CK_OP_EQUAL, GFX_FMT_ARGB8888, &tmpclr1, &tmpclr2);
2234*53ee8cc1Swenshuai.xi 
2235*53ee8cc1Swenshuai.xi         return GFX_SUCCESS;
2236*53ee8cc1Swenshuai.xi     }
2237*53ee8cc1Swenshuai.xi     else
2238*53ee8cc1Swenshuai.xi     {
2239*53ee8cc1Swenshuai.xi         MS_U32 ret;
2240*53ee8cc1Swenshuai.xi         ret = (MS_U32)GFX_TextOutEx(pInstance,fhandle, pindex, strwidth, pfmt, pFonttable);
2241*53ee8cc1Swenshuai.xi         MApi_GFX_SetSrcColorKey_U02(pInstance, FALSE, CK_OP_EQUAL, GFX_FMT_ARGB8888, &tmpclr1, &tmpclr2);
2242*53ee8cc1Swenshuai.xi         return (GFX_Result)ret ;
2243*53ee8cc1Swenshuai.xi     }
2244*53ee8cc1Swenshuai.xi 
2245*53ee8cc1Swenshuai.xi }
2246*53ee8cc1Swenshuai.xi 
MApi_GFX_CharacterOut_U02(void * pInstance,GFX_CharInfo * pChar,GFX_TextOutInfo * pfmt)2247*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_CharacterOut_U02(void* pInstance, GFX_CharInfo*  pChar, GFX_TextOutInfo *pfmt)
2248*53ee8cc1Swenshuai.xi {
2249*53ee8cc1Swenshuai.xi #if 1
2250*53ee8cc1Swenshuai.xi {
2251*53ee8cc1Swenshuai.xi                 MS_U32  flags = 0;
2252*53ee8cc1Swenshuai.xi                 GE_Rect src;
2253*53ee8cc1Swenshuai.xi                 union
2254*53ee8cc1Swenshuai.xi                 {
2255*53ee8cc1Swenshuai.xi                     GE_Rect dstblk;
2256*53ee8cc1Swenshuai.xi                     GE_DstBitBltType drvdstblk;
2257*53ee8cc1Swenshuai.xi                 }dst;
2258*53ee8cc1Swenshuai.xi 
2259*53ee8cc1Swenshuai.xi                 APICheckU02();
2260*53ee8cc1Swenshuai.xi 
2261*53ee8cc1Swenshuai.xi                 MDrv_GE_SetSrcBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)pChar->fmt, 0, 0, pChar->addr, pChar->pitch, 0);
2262*53ee8cc1Swenshuai.xi                 src.x = pChar->Hoffset;
2263*53ee8cc1Swenshuai.xi                 src.y = pChar->Voffset;
2264*53ee8cc1Swenshuai.xi                 src.width = pChar->width;
2265*53ee8cc1Swenshuai.xi                 src.height = pChar->height;
2266*53ee8cc1Swenshuai.xi                 if (pfmt->flag & GFXFONT_FLAG_SCALE)
2267*53ee8cc1Swenshuai.xi                 {
2268*53ee8cc1Swenshuai.xi                     flags |= E_GE_FLAG_BLT_STRETCH;
2269*53ee8cc1Swenshuai.xi                 }
2270*53ee8cc1Swenshuai.xi                 dst.dstblk.x = pfmt->dstblk.x;
2271*53ee8cc1Swenshuai.xi                 dst.dstblk.y = pfmt->dstblk.y;
2272*53ee8cc1Swenshuai.xi                 dst.dstblk.width = pfmt->dstblk.width;
2273*53ee8cc1Swenshuai.xi                 dst.dstblk.height = pfmt->dstblk.height;
2274*53ee8cc1Swenshuai.xi 
2275*53ee8cc1Swenshuai.xi                 flags |= GFX_RectBltFlags(pInstance);
2276*53ee8cc1Swenshuai.xi                 return (GFX_Result) MDrv_GE_BitBltEX(g_apiGFXLocal.g_pGEContext, &src, &dst.drvdstblk, flags, NULL);
2277*53ee8cc1Swenshuai.xi }
2278*53ee8cc1Swenshuai.xi #else
2279*53ee8cc1Swenshuai.xi     return PE_CharacterOut(pChar, pfmt);
2280*53ee8cc1Swenshuai.xi #endif
2281*53ee8cc1Swenshuai.xi }
2282*53ee8cc1Swenshuai.xi #endif
2283*53ee8cc1Swenshuai.xi 
MApi_GFX_ClearFrameBufferByWord_U02(void * pInstance,MS_PHY StrAddr,MS_U32 length,MS_U32 ClearValue)2284*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_ClearFrameBufferByWord_U02(void* pInstance,MS_PHY StrAddr, MS_U32 length, MS_U32 ClearValue)
2285*53ee8cc1Swenshuai.xi {
2286*53ee8cc1Swenshuai.xi #define CLRbW_FB_WIDTH    1024UL
2287*53ee8cc1Swenshuai.xi #define CLRbW_FB_PITCH    (CLRbW_FB_WIDTH*4)
2288*53ee8cc1Swenshuai.xi #define CLRbW_FB_HEIGHT   128UL
2289*53ee8cc1Swenshuai.xi #define CLRbW_FB_SIZE     CLRbW_FB_HEIGHT * CLRbW_FB_PITCH
2290*53ee8cc1Swenshuai.xi 
2291*53ee8cc1Swenshuai.xi     GE_Rect rect;
2292*53ee8cc1Swenshuai.xi     MS_U32  color, color2;
2293*53ee8cc1Swenshuai.xi     MS_PHY tmpaddr;
2294*53ee8cc1Swenshuai.xi     GE_BufInfo bufinfo;
2295*53ee8cc1Swenshuai.xi 
2296*53ee8cc1Swenshuai.xi     GE_Rect clip;
2297*53ee8cc1Swenshuai.xi     MS_U32  flags = 0;
2298*53ee8cc1Swenshuai.xi     MS_U16 u16RegGEEN=0;
2299*53ee8cc1Swenshuai.xi 
2300*53ee8cc1Swenshuai.xi     APICheckU02();
2301*53ee8cc1Swenshuai.xi 
2302*53ee8cc1Swenshuai.xi     if((length % 4) != 0)
2303*53ee8cc1Swenshuai.xi         return GFX_INVALID_PARAMETERS;
2304*53ee8cc1Swenshuai.xi 
2305*53ee8cc1Swenshuai.xi     MDrv_GE_RestoreRegInfo(g_apiGFXLocal.g_pGEContext,E_GE_SAVE_REG_GE_EN,&u16RegGEEN);
2306*53ee8cc1Swenshuai.xi     MDrv_GE_RestoreRegInfo(g_apiGFXLocal.g_pGEContext,E_GE_DISABLE_REG_EN,&u16RegGEEN);
2307*53ee8cc1Swenshuai.xi 
2308*53ee8cc1Swenshuai.xi     MDrv_GE_GetBufferInfo(g_apiGFXLocal.g_pGEContext, &bufinfo);
2309*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaSrc(g_apiGFXLocal.g_pGEContext, E_GE_ALPHA_ASRC);
2310*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaBlend(g_apiGFXLocal.g_pGEContext, FALSE, E_GE_BLEND_ONE);
2311*53ee8cc1Swenshuai.xi     clip.x = 0;
2312*53ee8cc1Swenshuai.xi     clip.y = 0;
2313*53ee8cc1Swenshuai.xi     clip.width = 1920;
2314*53ee8cc1Swenshuai.xi     clip.height = 1080;
2315*53ee8cc1Swenshuai.xi     MDrv_GE_SetClipWindow(g_apiGFXLocal.g_pGEContext, &clip);
2316*53ee8cc1Swenshuai.xi 
2317*53ee8cc1Swenshuai.xi 
2318*53ee8cc1Swenshuai.xi     color = ClearValue;
2319*53ee8cc1Swenshuai.xi     color2 = color;
2320*53ee8cc1Swenshuai.xi 
2321*53ee8cc1Swenshuai.xi     flags = 0;
2322*53ee8cc1Swenshuai.xi     tmpaddr = StrAddr;
2323*53ee8cc1Swenshuai.xi 
2324*53ee8cc1Swenshuai.xi     while(length >= CLRbW_FB_PITCH)
2325*53ee8cc1Swenshuai.xi     {
2326*53ee8cc1Swenshuai.xi         rect.height = length/CLRbW_FB_PITCH;
2327*53ee8cc1Swenshuai.xi         if(rect.height > 1080)
2328*53ee8cc1Swenshuai.xi             rect.height = 1080;
2329*53ee8cc1Swenshuai.xi 
2330*53ee8cc1Swenshuai.xi         rect.x = 0;
2331*53ee8cc1Swenshuai.xi         rect.y = 0;
2332*53ee8cc1Swenshuai.xi         rect.width = CLRbW_FB_WIDTH;
2333*53ee8cc1Swenshuai.xi //        rect.height = CLR_FB_HEIGHT;
2334*53ee8cc1Swenshuai.xi         MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, E_GE_FMT_ARGB8888, CLRbW_FB_WIDTH, 1, tmpaddr, CLRbW_FB_PITCH, 0);
2335*53ee8cc1Swenshuai.xi             MDrv_GE_FillRect(g_apiGFXLocal.g_pGEContext, &rect, color, color2, flags);
2336*53ee8cc1Swenshuai.xi         tmpaddr += (CLRbW_FB_PITCH*rect.height);
2337*53ee8cc1Swenshuai.xi         length -= (CLRbW_FB_PITCH*rect.height);
2338*53ee8cc1Swenshuai.xi     }
2339*53ee8cc1Swenshuai.xi 
2340*53ee8cc1Swenshuai.xi 
2341*53ee8cc1Swenshuai.xi     if( length > 0) {
2342*53ee8cc1Swenshuai.xi         rect.x = 0;
2343*53ee8cc1Swenshuai.xi         rect.y = 0;
2344*53ee8cc1Swenshuai.xi         rect.width = length/4;
2345*53ee8cc1Swenshuai.xi         rect.height = 1;
2346*53ee8cc1Swenshuai.xi         MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, E_GE_FMT_ARGB8888, CLRbW_FB_WIDTH, 1, tmpaddr, CLRbW_FB_PITCH, 0);
2347*53ee8cc1Swenshuai.xi         MDrv_GE_FillRect(g_apiGFXLocal.g_pGEContext, &rect, color, color2, flags);
2348*53ee8cc1Swenshuai.xi         tmpaddr += length;
2349*53ee8cc1Swenshuai.xi     }
2350*53ee8cc1Swenshuai.xi 
2351*53ee8cc1Swenshuai.xi     MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)bufinfo.dstfmt, 0, 0, bufinfo.dstaddr, bufinfo.dstpit, 0);
2352*53ee8cc1Swenshuai.xi     //MDrv_GE_WaitIdle();
2353*53ee8cc1Swenshuai.xi     MDrv_GE_RestoreRegInfo(g_apiGFXLocal.g_pGEContext,E_GE_RESTORE_REG_GE_EN,&u16RegGEEN);
2354*53ee8cc1Swenshuai.xi 
2355*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
2356*53ee8cc1Swenshuai.xi 
2357*53ee8cc1Swenshuai.xi }
2358*53ee8cc1Swenshuai.xi 
2359*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
MApi_GFX_ClearFrameBuffer_U02(void * pInstance,MS_PHY StrAddr,MS_U32 length,MS_U8 ClearValue)2360*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_ClearFrameBuffer_U02(void* pInstance,MS_PHY StrAddr, MS_U32 length, MS_U8 ClearValue)
2361*53ee8cc1Swenshuai.xi {
2362*53ee8cc1Swenshuai.xi #define CLR_FB_PITCH    1024UL
2363*53ee8cc1Swenshuai.xi #define CLR_FB_HEIGHT   256UL
2364*53ee8cc1Swenshuai.xi #define CLR_FB_SIZE     CLR_FB_HEIGHT * CLR_FB_PITCH
2365*53ee8cc1Swenshuai.xi 
2366*53ee8cc1Swenshuai.xi     GE_Rect rect;
2367*53ee8cc1Swenshuai.xi     MS_U32  color, color2;
2368*53ee8cc1Swenshuai.xi     MS_PHY tmpaddr;
2369*53ee8cc1Swenshuai.xi     GE_BufInfo bufinfo;
2370*53ee8cc1Swenshuai.xi     GE_Rect clip;
2371*53ee8cc1Swenshuai.xi     MS_U32  flags = 0;
2372*53ee8cc1Swenshuai.xi     MS_U16 u16RegGEEN=0;
2373*53ee8cc1Swenshuai.xi 
2374*53ee8cc1Swenshuai.xi     APICheckU02();
2375*53ee8cc1Swenshuai.xi 
2376*53ee8cc1Swenshuai.xi     MDrv_GE_RestoreRegInfo(g_apiGFXLocal.g_pGEContext,E_GE_SAVE_REG_GE_EN,&u16RegGEEN);
2377*53ee8cc1Swenshuai.xi     MDrv_GE_RestoreRegInfo(g_apiGFXLocal.g_pGEContext,E_GE_DISABLE_REG_EN,&u16RegGEEN);
2378*53ee8cc1Swenshuai.xi 
2379*53ee8cc1Swenshuai.xi     MDrv_GE_GetBufferInfo(g_apiGFXLocal.g_pGEContext, &bufinfo);
2380*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaSrc(g_apiGFXLocal.g_pGEContext, E_GE_ALPHA_ASRC);
2381*53ee8cc1Swenshuai.xi     MDrv_GE_SetAlphaBlend(g_apiGFXLocal.g_pGEContext, FALSE, E_GE_BLEND_ONE);
2382*53ee8cc1Swenshuai.xi 
2383*53ee8cc1Swenshuai.xi     clip.x = 0;
2384*53ee8cc1Swenshuai.xi     clip.y = 0;
2385*53ee8cc1Swenshuai.xi     clip.width = 1920;
2386*53ee8cc1Swenshuai.xi     clip.height = 1080;
2387*53ee8cc1Swenshuai.xi     MDrv_GE_SetClipWindow(g_apiGFXLocal.g_pGEContext, &clip);
2388*53ee8cc1Swenshuai.xi 
2389*53ee8cc1Swenshuai.xi     color = (ClearValue << 8) + ClearValue;
2390*53ee8cc1Swenshuai.xi     color2 = color;
2391*53ee8cc1Swenshuai.xi 
2392*53ee8cc1Swenshuai.xi     flags = 0;
2393*53ee8cc1Swenshuai.xi     tmpaddr = StrAddr;
2394*53ee8cc1Swenshuai.xi 
2395*53ee8cc1Swenshuai.xi     while(length >= CLR_FB_PITCH)
2396*53ee8cc1Swenshuai.xi     {
2397*53ee8cc1Swenshuai.xi         rect.height = length/CLR_FB_PITCH;
2398*53ee8cc1Swenshuai.xi         if(rect.height > 1080)
2399*53ee8cc1Swenshuai.xi             rect.height = 1080;
2400*53ee8cc1Swenshuai.xi 
2401*53ee8cc1Swenshuai.xi         rect.x = 0;
2402*53ee8cc1Swenshuai.xi         rect.y = 0;
2403*53ee8cc1Swenshuai.xi         rect.width = CLR_FB_PITCH;
2404*53ee8cc1Swenshuai.xi //        rect.height = CLR_FB_HEIGHT;
2405*53ee8cc1Swenshuai.xi         MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, E_GE_FMT_I8, CLR_FB_PITCH, 1, tmpaddr, CLR_FB_PITCH, 0);
2406*53ee8cc1Swenshuai.xi         MDrv_GE_FillRect(g_apiGFXLocal.g_pGEContext, &rect, color, color2, flags);
2407*53ee8cc1Swenshuai.xi         tmpaddr += (CLR_FB_PITCH*rect.height);
2408*53ee8cc1Swenshuai.xi         length -= (CLR_FB_PITCH*rect.height);
2409*53ee8cc1Swenshuai.xi     }
2410*53ee8cc1Swenshuai.xi 
2411*53ee8cc1Swenshuai.xi     if( length > 0) {
2412*53ee8cc1Swenshuai.xi         rect.x = 0;
2413*53ee8cc1Swenshuai.xi         rect.y = 0;
2414*53ee8cc1Swenshuai.xi         rect.width = length;
2415*53ee8cc1Swenshuai.xi         rect.height = 1;
2416*53ee8cc1Swenshuai.xi         MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, E_GE_FMT_I8, CLR_FB_PITCH, 1, tmpaddr, CLR_FB_PITCH, 0);
2417*53ee8cc1Swenshuai.xi         MDrv_GE_FillRect(g_apiGFXLocal.g_pGEContext, &rect, color, color2, flags);
2418*53ee8cc1Swenshuai.xi         tmpaddr += length;
2419*53ee8cc1Swenshuai.xi     }
2420*53ee8cc1Swenshuai.xi 
2421*53ee8cc1Swenshuai.xi     MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)bufinfo.dstfmt, 0, 0, bufinfo.dstaddr, bufinfo.dstpit, 0);
2422*53ee8cc1Swenshuai.xi     //MDrv_GE_WaitIdle();
2423*53ee8cc1Swenshuai.xi     MDrv_GE_RestoreRegInfo(g_apiGFXLocal.g_pGEContext,E_GE_RESTORE_REG_GE_EN,&u16RegGEEN);
2424*53ee8cc1Swenshuai.xi 
2425*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
2426*53ee8cc1Swenshuai.xi }
MApi_GFX_SetAlphaCmp_U02(void * pInstance,MS_BOOL enable,GFX_ACmpOp eMode)2427*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlphaCmp_U02(void* pInstance,MS_BOOL enable, GFX_ACmpOp eMode)
2428*53ee8cc1Swenshuai.xi {
2429*53ee8cc1Swenshuai.xi     MS_U32 u32op1=0, ret;
2430*53ee8cc1Swenshuai.xi 
2431*53ee8cc1Swenshuai.xi     APICheckU02();
2432*53ee8cc1Swenshuai.xi 
2433*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapACmp(eMode, &u32op1 );
2434*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
2435*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
2436*53ee8cc1Swenshuai.xi 
2437*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetAlphaCmp(g_apiGFXLocal.g_pGEContext, enable, (GE_ACmpOp)u32op1);
2438*53ee8cc1Swenshuai.xi }
2439*53ee8cc1Swenshuai.xi 
MApi_GFX_Set_Line_Pattern_U02(void * pInstance,MS_BOOL enable,MS_U8 linePattern,MS_U8 repeatFactor)2440*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_Set_Line_Pattern_U02(void* pInstance,MS_BOOL enable, MS_U8 linePattern, MS_U8 repeatFactor)
2441*53ee8cc1Swenshuai.xi {
2442*53ee8cc1Swenshuai.xi     APICheckU02();
2443*53ee8cc1Swenshuai.xi 
2444*53ee8cc1Swenshuai.xi     g_apiGFXLocal._line_enable  = enable;
2445*53ee8cc1Swenshuai.xi     g_apiGFXLocal._line_pattern = linePattern;
2446*53ee8cc1Swenshuai.xi     g_apiGFXLocal._line_factor  = repeatFactor;
2447*53ee8cc1Swenshuai.xi     return (GFX_Result) MDrv_GE_SetLinePattern(g_apiGFXLocal.g_pGEContext,
2448*53ee8cc1Swenshuai.xi                              g_apiGFXLocal._line_enable, g_apiGFXLocal._line_pattern,
2449*53ee8cc1Swenshuai.xi                                (GE_LinePatRep)g_apiGFXLocal._line_factor);
2450*53ee8cc1Swenshuai.xi }
2451*53ee8cc1Swenshuai.xi #endif
MApi_GFX_BeginDraw_U02(void * pInstance)2452*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_BeginDraw_U02(void* pInstance)
2453*53ee8cc1Swenshuai.xi {
2454*53ee8cc1Swenshuai.xi     APICheckU02();
2455*53ee8cc1Swenshuai.xi 
2456*53ee8cc1Swenshuai.xi     GFX_DEBUGINFO (GFX_INFO( "MApi_GFX_BeginDraw\n"));
2457*53ee8cc1Swenshuai.xi 
2458*53ee8cc1Swenshuai.xi #if DYNAMIC_POWER_ON_OFF
2459*53ee8cc1Swenshuai.xi     MDrv_PWR_ClockTurnOn(E_PWR_MODULE_GE);
2460*53ee8cc1Swenshuai.xi #endif
2461*53ee8cc1Swenshuai.xi 
2462*53ee8cc1Swenshuai.xi         GE_Get_Resource(g_apiGFXLocal.g_pGEContext,TRUE);
2463*53ee8cc1Swenshuai.xi 
2464*53ee8cc1Swenshuai.xi     g_apiGFXLocal.u32LockStatus++;
2465*53ee8cc1Swenshuai.xi     return (GFX_Result) E_GE_OK;
2466*53ee8cc1Swenshuai.xi }
MApi_GFX_EndDraw_U02(void * pInstance)2467*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_EndDraw_U02(void* pInstance)
2468*53ee8cc1Swenshuai.xi {
2469*53ee8cc1Swenshuai.xi     APICheckU02();
2470*53ee8cc1Swenshuai.xi 
2471*53ee8cc1Swenshuai.xi #if DYNAMIC_POWER_ON_OFF
2472*53ee8cc1Swenshuai.xi     GE_WaitIdle();
2473*53ee8cc1Swenshuai.xi     MDrv_PWR_ClockTurnOff(E_PWR_MODULE_GE);
2474*53ee8cc1Swenshuai.xi #endif
2475*53ee8cc1Swenshuai.xi 
2476*53ee8cc1Swenshuai.xi    if(g_apiGFXLocal.u32LockStatus==0)
2477*53ee8cc1Swenshuai.xi        return (GFX_Result)E_GE_FAIL_LOCKED;
2478*53ee8cc1Swenshuai.xi 
2479*53ee8cc1Swenshuai.xi         GE_Free_Resource(g_apiGFXLocal.g_pGEContext,TRUE);
2480*53ee8cc1Swenshuai.xi 
2481*53ee8cc1Swenshuai.xi     g_apiGFXLocal.u32LockStatus--;
2482*53ee8cc1Swenshuai.xi     return (GFX_Result) E_GE_OK;
2483*53ee8cc1Swenshuai.xi }
2484*53ee8cc1Swenshuai.xi 
2485*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
MApi_GFX_SetDbgLevel_U02(void * pInstance,MS_U32 level)2486*53ee8cc1Swenshuai.xi void MApi_GFX_SetDbgLevel_U02(void* pInstance,MS_U32 level)
2487*53ee8cc1Swenshuai.xi {
2488*53ee8cc1Swenshuai.xi     APICheckU02();
2489*53ee8cc1Swenshuai.xi 
2490*53ee8cc1Swenshuai.xi     g_apiGFXLocal.u32dbglvl = level;
2491*53ee8cc1Swenshuai.xi     MDrv_GE_SetDbgLevel(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.u32dbglvl);
2492*53ee8cc1Swenshuai.xi     GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s, Set DBG LEVEL to %d \n", GFX_DBG_HDR, g_apiGFXLocal.u32dbglvl));
2493*53ee8cc1Swenshuai.xi }
2494*53ee8cc1Swenshuai.xi 
MApi_GFX_GetHK_U02(void * pInstance,MS_BOOL * bIsHK)2495*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetHK_U02(void* pInstance,MS_BOOL *bIsHK)
2496*53ee8cc1Swenshuai.xi {
2497*53ee8cc1Swenshuai.xi     APICheckU02();
2498*53ee8cc1Swenshuai.xi 
2499*53ee8cc1Swenshuai.xi     MDrv_GE_Get_GetHK(g_apiGFXLocal.g_pGEContext, bIsHK);
2500*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
2501*53ee8cc1Swenshuai.xi 
2502*53ee8cc1Swenshuai.xi }
2503*53ee8cc1Swenshuai.xi 
MApi_GFX_SetHK_U02(void * pInstance,MS_BOOL bIsHK)2504*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetHK_U02(void* pInstance,MS_BOOL bIsHK)
2505*53ee8cc1Swenshuai.xi {
2506*53ee8cc1Swenshuai.xi     APICheckU02();
2507*53ee8cc1Swenshuai.xi 
2508*53ee8cc1Swenshuai.xi     MDrv_GE_Set_SetHK(g_apiGFXLocal.g_pGEContext, bIsHK);
2509*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
2510*53ee8cc1Swenshuai.xi 
2511*53ee8cc1Swenshuai.xi }
2512*53ee8cc1Swenshuai.xi 
MApi_GFX_DrawOval_U02(void * pInstance,GFX_OvalFillInfo * pOval)2513*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_DrawOval_U02(void* pInstance,GFX_OvalFillInfo *pOval)
2514*53ee8cc1Swenshuai.xi {
2515*53ee8cc1Swenshuai.xi     GE_OVAL_FILL_INFO stOval;
2516*53ee8cc1Swenshuai.xi 
2517*53ee8cc1Swenshuai.xi     APICheckU02();
2518*53ee8cc1Swenshuai.xi 
2519*53ee8cc1Swenshuai.xi     memcpy(&stOval, pOval, sizeof(GE_OVAL_FILL_INFO));
2520*53ee8cc1Swenshuai.xi     MDrv_GE_DrawOval(g_apiGFXLocal.g_pGEContext, &stOval);
2521*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
2522*53ee8cc1Swenshuai.xi }
MApi_GFX_SetDC_CSC_FMT_U02(void * pInstance,GFX_YUV_Rgb2Yuv mode,GFX_YUV_OutRange yuv_out_range,GFX_YUV_InRange uv_in_range,GFX_YUV_422 srcfmt,GFX_YUV_422 dstfmt)2523*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetDC_CSC_FMT_U02(void* pInstance,GFX_YUV_Rgb2Yuv mode, GFX_YUV_OutRange yuv_out_range, GFX_YUV_InRange uv_in_range, GFX_YUV_422 srcfmt, GFX_YUV_422 dstfmt)
2524*53ee8cc1Swenshuai.xi {
2525*53ee8cc1Swenshuai.xi     GE_YUVMode yuvmode;
2526*53ee8cc1Swenshuai.xi     MS_U32 u32op1 =0, ret;
2527*53ee8cc1Swenshuai.xi 
2528*53ee8cc1Swenshuai.xi     APICheckU02();
2529*53ee8cc1Swenshuai.xi 
2530*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapYUVOp(GFX_YUV_OP1, mode, &u32op1 );
2531*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
2532*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
2533*53ee8cc1Swenshuai.xi 
2534*53ee8cc1Swenshuai.xi     yuvmode.rgb2yuv = (GE_Csc_Rgb2Yuv)u32op1;
2535*53ee8cc1Swenshuai.xi 
2536*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapYUVOp(GFX_YUV_OP2, yuv_out_range, &u32op1 );
2537*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
2538*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
2539*53ee8cc1Swenshuai.xi 
2540*53ee8cc1Swenshuai.xi     yuvmode.out_range = (GE_YUV_OutRange)u32op1;
2541*53ee8cc1Swenshuai.xi 
2542*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapYUVOp(GFX_YUV_OP3, uv_in_range, &u32op1 );
2543*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
2544*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
2545*53ee8cc1Swenshuai.xi 
2546*53ee8cc1Swenshuai.xi     yuvmode.in_range = (GE_YUV_InRange)u32op1;
2547*53ee8cc1Swenshuai.xi 
2548*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapYUVOp(GFX_YUV_OP4, dstfmt, &u32op1 );
2549*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
2550*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
2551*53ee8cc1Swenshuai.xi 
2552*53ee8cc1Swenshuai.xi     yuvmode.dst_fmt = (GE_YUV_422)u32op1;
2553*53ee8cc1Swenshuai.xi 
2554*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapYUVOp(GFX_YUV_OP4, srcfmt, &u32op1 );
2555*53ee8cc1Swenshuai.xi     if(ret != GFX_SUCCESS)
2556*53ee8cc1Swenshuai.xi         GFX_DEBUGINFO_LEVEL(1, GFX_DBUG("%s%s %d, ERROR: %08lx\n", GFX_DBG_HDR, __FUNCTION__,  __LINE__, ret));
2557*53ee8cc1Swenshuai.xi 
2558*53ee8cc1Swenshuai.xi     yuvmode.src_fmt = (GE_YUV_422)u32op1;
2559*53ee8cc1Swenshuai.xi 
2560*53ee8cc1Swenshuai.xi     MDrv_GE_SetYUVMode(g_apiGFXLocal.g_pGEContext, &yuvmode);
2561*53ee8cc1Swenshuai.xi 
2562*53ee8cc1Swenshuai.xi     return GFX_SUCCESS;
2563*53ee8cc1Swenshuai.xi }
2564*53ee8cc1Swenshuai.xi 
MApi_GFX_SetStrBltSckType_U02(void * pInstance,GFX_StretchCKType type,GFX_RgbColor * color)2565*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetStrBltSckType_U02(void* pInstance,GFX_StretchCKType type, GFX_RgbColor *color)
2566*53ee8cc1Swenshuai.xi {
2567*53ee8cc1Swenshuai.xi     MS_U32 u32tmp=0, ret=0;
2568*53ee8cc1Swenshuai.xi 
2569*53ee8cc1Swenshuai.xi     APICheckU02();
2570*53ee8cc1Swenshuai.xi 
2571*53ee8cc1Swenshuai.xi     ret = MApi_GFX_MapStrSCKType(type, &u32tmp);
2572*53ee8cc1Swenshuai.xi 
2573*53ee8cc1Swenshuai.xi     if (ret == GFX_SUCCESS)
2574*53ee8cc1Swenshuai.xi     {
2575*53ee8cc1Swenshuai.xi         ret = (MS_U32)MDrv_GE_SetStrBltSckType(g_apiGFXLocal.g_pGEContext, (GE_StretchCKType)u32tmp, (MS_U32*)(void*)color);
2576*53ee8cc1Swenshuai.xi         return (GFX_Result)ret;
2577*53ee8cc1Swenshuai.xi     }
2578*53ee8cc1Swenshuai.xi     else
2579*53ee8cc1Swenshuai.xi     {
2580*53ee8cc1Swenshuai.xi         return GFX_INVALID_PARAMETERS;
2581*53ee8cc1Swenshuai.xi     }
2582*53ee8cc1Swenshuai.xi 
2583*53ee8cc1Swenshuai.xi }
2584*53ee8cc1Swenshuai.xi 
MApi_GFX_SetAlpha_ARGB1555_U02(void * pInstance,MS_U8 coef)2585*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_SetAlpha_ARGB1555_U02(void* pInstance,MS_U8 coef)
2586*53ee8cc1Swenshuai.xi {
2587*53ee8cc1Swenshuai.xi     APICheckU02();
2588*53ee8cc1Swenshuai.xi 
2589*53ee8cc1Swenshuai.xi     return (GFX_Result)MDrv_GE_SetAlpha_ARGB1555(g_apiGFXLocal.g_pGEContext, coef);  // DANGER
2590*53ee8cc1Swenshuai.xi 
2591*53ee8cc1Swenshuai.xi }
MApi_GFX_GetAlpha_ARGB1555_U02(void * pInstance,MS_U8 * coef)2592*53ee8cc1Swenshuai.xi GFX_Result MApi_GFX_GetAlpha_ARGB1555_U02(void* pInstance,MS_U8* coef)
2593*53ee8cc1Swenshuai.xi {
2594*53ee8cc1Swenshuai.xi     APICheckU02();
2595*53ee8cc1Swenshuai.xi 
2596*53ee8cc1Swenshuai.xi     return (GFX_Result)MDrv_GE_GetAlpha_ARGB1555(g_apiGFXLocal.g_pGEContext, coef);     // DANGER
2597*53ee8cc1Swenshuai.xi }
2598*53ee8cc1Swenshuai.xi 
GFX_SetFireInfo(void * pInstance,GFX_FireInfo * pFireInfo)2599*53ee8cc1Swenshuai.xi static MS_BOOL GFX_SetFireInfo(void* pInstance,GFX_FireInfo* pFireInfo)
2600*53ee8cc1Swenshuai.xi {
2601*53ee8cc1Swenshuai.xi     APICheckU02();
2602*53ee8cc1Swenshuai.xi 
2603*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_SRC_INFO){
2604*53ee8cc1Swenshuai.xi         MDrv_GE_SetSrcBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)pFireInfo->SrcbufInfo.u32ColorFmt\
2605*53ee8cc1Swenshuai.xi             ,pFireInfo->SrcbufInfo.u32Width, pFireInfo->SrcbufInfo.u32Height\
2606*53ee8cc1Swenshuai.xi             ,pFireInfo->SrcbufInfo.u32Addr\
2607*53ee8cc1Swenshuai.xi             ,pFireInfo->SrcbufInfo.u32Pitch\
2608*53ee8cc1Swenshuai.xi             ,pFireInfo->u32SrcOffsetofByte);
2609*53ee8cc1Swenshuai.xi      }
2610*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_DST_INFO){
2611*53ee8cc1Swenshuai.xi         MDrv_GE_SetDstBuffer(g_apiGFXLocal.g_pGEContext, (GE_BufFmt)pFireInfo->DstbufInfo.u32ColorFmt\
2612*53ee8cc1Swenshuai.xi             ,pFireInfo->DstbufInfo.u32Width, pFireInfo->DstbufInfo.u32Height\
2613*53ee8cc1Swenshuai.xi             ,pFireInfo->DstbufInfo.u32Addr\
2614*53ee8cc1Swenshuai.xi             ,pFireInfo->DstbufInfo.u32Pitch\
2615*53ee8cc1Swenshuai.xi             ,pFireInfo->u32DstOffsetofByte);
2616*53ee8cc1Swenshuai.xi     }
2617*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_CLIP_INFO){
2618*53ee8cc1Swenshuai.xi         MApi_GFX_SetClip_U02(pInstance,&(pFireInfo->GFXSetClip.V0),&(pFireInfo->GFXSetClip.V1));
2619*53ee8cc1Swenshuai.xi     }
2620*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_DFB_INFO){
2621*53ee8cc1Swenshuai.xi         g_apiGFXLocal.u32geRgbColor = (pFireInfo->GFXSetDFB.sRGBColor.a)<<24|(pFireInfo->GFXSetDFB.sRGBColor.r)<<16|(pFireInfo->GFXSetDFB.sRGBColor.g)<<8|(pFireInfo->GFXSetDFB.sRGBColor.b);
2622*53ee8cc1Swenshuai.xi         MDrv_GE_EnableDFBBlending(g_apiGFXLocal.g_pGEContext, pFireInfo->GFXSetDFB.bEnable);
2623*53ee8cc1Swenshuai.xi         MApi_GFX_SetDFBBldOP_U02(pInstance, pFireInfo->GFXSetDFB.eSrcBldOP, pFireInfo->GFXSetDFB.eDstBldOP);
2624*53ee8cc1Swenshuai.xi         MApi_GFX_SetDFBBldConstColor_U02(pInstance, pFireInfo->GFXSetDFB.sRGBColor);
2625*53ee8cc1Swenshuai.xi         MApi_GFX_SetDFBBldFlags_U02(pInstance, pFireInfo->GFXSetDFB.u16DFBBldFlags);
2626*53ee8cc1Swenshuai.xi     }
2627*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_ABL_INFO){
2628*53ee8cc1Swenshuai.xi         MS_U32  u32BLDCOEF = 0;
2629*53ee8cc1Swenshuai.xi         MS_U32  u32ABLSRC = 0;
2630*53ee8cc1Swenshuai.xi 
2631*53ee8cc1Swenshuai.xi         g_apiGFXLocal.u32geRgbColor = (g_apiGFXLocal.u32geRgbColor&0x00ffffff)|((pFireInfo->GFXSetABL.u8Alpha_Const)<<24);
2632*53ee8cc1Swenshuai.xi         MApi_GFX_MapBLDCOEF(pFireInfo->GFXSetABL.eABLCoef, &u32BLDCOEF);
2633*53ee8cc1Swenshuai.xi         MApi_GFX_MapABLCOEF(pFireInfo->GFXSetABL.eDb_abl, &u32ABLSRC);
2634*53ee8cc1Swenshuai.xi         g_apiGFXLocal.pABLInfo.eBldCoef =         (GE_BlendOp)u32BLDCOEF;
2635*53ee8cc1Swenshuai.xi         g_apiGFXLocal.pABLInfo.eABLSrc =          (GE_AlphaSrc)u32ABLSRC;
2636*53ee8cc1Swenshuai.xi         g_apiGFXLocal.pABLInfo.u32ABLConstCoef =  (MS_U32)pFireInfo->GFXSetABL.u8Alpha_Const;
2637*53ee8cc1Swenshuai.xi         MApi_GFX_SetAlpha_U02(pInstance, pFireInfo->GFXSetABL.bEnable, pFireInfo->GFXSetABL.eABLCoef, pFireInfo->GFXSetABL.eDb_abl, pFireInfo->GFXSetABL.u8Alpha_Const);
2638*53ee8cc1Swenshuai.xi     }
2639*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_SRC_CLRKEY_INFO){
2640*53ee8cc1Swenshuai.xi         MApi_GFX_SetSrcColorKey_U02(pInstance, pFireInfo->GFXSetSrcColorKey.bEnable,
2641*53ee8cc1Swenshuai.xi                                    pFireInfo->GFXSetSrcColorKey.eOpMode,
2642*53ee8cc1Swenshuai.xi                                    pFireInfo->GFXSetSrcColorKey.eFmt,
2643*53ee8cc1Swenshuai.xi                                    &(pFireInfo->GFXSetSrcColorKey.S_color),
2644*53ee8cc1Swenshuai.xi                                    &(pFireInfo->GFXSetSrcColorKey.E_color));
2645*53ee8cc1Swenshuai.xi     }
2646*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_DST_CLRKEY_INFO){
2647*53ee8cc1Swenshuai.xi         MApi_GFX_SetDstColorKey_U02(pInstance, pFireInfo->GFXSetDstColorKey.bEnable,
2648*53ee8cc1Swenshuai.xi                                    pFireInfo->GFXSetDstColorKey.eOpMode,
2649*53ee8cc1Swenshuai.xi                                    pFireInfo->GFXSetDstColorKey.eFmt,
2650*53ee8cc1Swenshuai.xi                                    &(pFireInfo->GFXSetDstColorKey.S_color),
2651*53ee8cc1Swenshuai.xi                                    &(pFireInfo->GFXSetDstColorKey.E_color));
2652*53ee8cc1Swenshuai.xi     }
2653*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_ALPHA_CMP_INFO){
2654*53ee8cc1Swenshuai.xi         MApi_GFX_SetAlphaCmp_U02(pInstance,pFireInfo->GFXSetAlphaCmp.enable,pFireInfo->GFXSetAlphaCmp.eMode);
2655*53ee8cc1Swenshuai.xi     }
2656*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_SRC_MIRROR_INFO){
2657*53ee8cc1Swenshuai.xi         g_apiGFXLocal._bMirrorH = pFireInfo->GFXSetMirror.bMirrorX;
2658*53ee8cc1Swenshuai.xi         g_apiGFXLocal._bMirrorV = pFireInfo->GFXSetMirror.bMirrorY;
2659*53ee8cc1Swenshuai.xi     }
2660*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_DST_MIRROR_INFO){
2661*53ee8cc1Swenshuai.xi         g_apiGFXLocal._bDstMirrorH = pFireInfo->GFXSetDstMirror.bMirrorX;
2662*53ee8cc1Swenshuai.xi         g_apiGFXLocal._bDstMirrorV = pFireInfo->GFXSetDstMirror.bMirrorY;
2663*53ee8cc1Swenshuai.xi     }
2664*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_ROTATE_INFO){
2665*53ee8cc1Swenshuai.xi         g_apiGFXLocal._angle = pFireInfo->GFXSetAngle;
2666*53ee8cc1Swenshuai.xi     }
2667*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_CSC_INFO){
2668*53ee8cc1Swenshuai.xi         MApi_GFX_SetDC_CSC_FMT_U02(pInstance,pFireInfo->GFXSetCSC.mode,pFireInfo->GFXSetCSC.yuv_out_range,pFireInfo->GFXSetCSC.uv_in_range,pFireInfo->GFXSetCSC.srcfmt,pFireInfo->GFXSetCSC.dstfmt);
2669*53ee8cc1Swenshuai.xi     }
2670*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_STR_BLT_SCK_INFO){
2671*53ee8cc1Swenshuai.xi         MApi_GFX_SetStrBltSckType_U02(pInstance,pFireInfo->sttype.type, &(pFireInfo->sttype.color));
2672*53ee8cc1Swenshuai.xi     }
2673*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_NEAREST_INFO){
2674*53ee8cc1Swenshuai.xi         g_apiGFXLocal._bNearest = pFireInfo->bNearest;
2675*53ee8cc1Swenshuai.xi     }
2676*53ee8cc1Swenshuai.xi     if(pFireInfo->eFireInfo & GFX_DITHER_INFO){
2677*53ee8cc1Swenshuai.xi         g_apiGFXLocal.bDither = pFireInfo->bDither;
2678*53ee8cc1Swenshuai.xi         MDrv_GE_SetDither(g_apiGFXLocal.g_pGEContext,g_apiGFXLocal.bDither);
2679*53ee8cc1Swenshuai.xi     }
2680*53ee8cc1Swenshuai.xi 
2681*53ee8cc1Swenshuai.xi     return 0;
2682*53ee8cc1Swenshuai.xi }
2683*53ee8cc1Swenshuai.xi #endif
2684*53ee8cc1Swenshuai.xi 
Ioctl_GFX_Init(void * pInstance,void * pArgs)2685*53ee8cc1Swenshuai.xi static MS_U16 Ioctl_GFX_Init(void* pInstance, void* pArgs)
2686*53ee8cc1Swenshuai.xi {
2687*53ee8cc1Swenshuai.xi     GFX_INIT_ARGS*          pGFXInit            =NULL;
2688*53ee8cc1Swenshuai.xi     GE_Config               cfg;
2689*53ee8cc1Swenshuai.xi 
2690*53ee8cc1Swenshuai.xi     APICheckU02();
2691*53ee8cc1Swenshuai.xi     pGFXInit = (GFX_INIT_ARGS*)pArgs;
2692*53ee8cc1Swenshuai.xi 
2693*53ee8cc1Swenshuai.xi     if (NULL == pGFXInit->pGFX_Init){
2694*53ee8cc1Swenshuai.xi         GFX_CRITIAL_MSG(GFX_ERR("GFX init FAIL\n"));
2695*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_FAIL;
2696*53ee8cc1Swenshuai.xi     }
2697*53ee8cc1Swenshuai.xi     memset(&cfg, 0 , sizeof(GE_Config));
2698*53ee8cc1Swenshuai.xi     cfg.bIsCompt = pGFXInit->pGFX_Init->bIsCompt;
2699*53ee8cc1Swenshuai.xi     cfg.bIsHK= pGFXInit->pGFX_Init->bIsHK;
2700*53ee8cc1Swenshuai.xi 
2701*53ee8cc1Swenshuai.xi     cfg.u32VCmdQSize = pGFXInit->pGFX_Init->u32VCmdQSize;
2702*53ee8cc1Swenshuai.xi     cfg.PhyVCmdQAddr = pGFXInit->pGFX_Init->u32VCmdQAddr;
2703*53ee8cc1Swenshuai.xi 
2704*53ee8cc1Swenshuai.xi     //escape the many thread modify the global variable
2705*53ee8cc1Swenshuai.xi     if(FALSE == g_apiGFXLocal._bInit)
2706*53ee8cc1Swenshuai.xi     {
2707*53ee8cc1Swenshuai.xi         MDrv_GE_Init(pInstance, (GE_Config*)&cfg, &g_apiGFXLocal.g_pGEContext);
2708*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode= E_GE_TLB_NONE;
2709*53ee8cc1Swenshuai.xi     }
2710*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2711*53ee8cc1Swenshuai.xi     CheckSize(pGFXInit->u32Size, sizeof(GFX_Init_Config), 0);
2712*53ee8cc1Swenshuai.xi     MDrv_GE_Chip_Proprity_Init(g_apiGFXLocal.g_pGEContext, &g_apiGFXLocal.pGeChipProperty);
2713*53ee8cc1Swenshuai.xi     MDrv_GE_SetOnePixelMode(g_apiGFXLocal.g_pGEContext,!(g_apiGFXLocal.pGeChipProperty->bFourPixelModeStable));
2714*53ee8cc1Swenshuai.xi     g_apiGFXLocal._bInit = TRUE;
2715*53ee8cc1Swenshuai.xi 
2716*53ee8cc1Swenshuai.xi #if (GE_PERFORMANCE_TEST)
2717*53ee8cc1Swenshuai.xi     MDrv_GE_BitbltPerformance(g_apiGFXLocal.g_pGEContext);
2718*53ee8cc1Swenshuai.xi #endif
2719*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(GFX_SUCCESS), 0);
2720*53ee8cc1Swenshuai.xi }
2721*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
Ioctl_GFX_GetCaps(void * pInstance,void * pArgs)2722*53ee8cc1Swenshuai.xi static MS_U16 Ioctl_GFX_GetCaps(void* pInstance, void* pArgs)
2723*53ee8cc1Swenshuai.xi {
2724*53ee8cc1Swenshuai.xi     GFX_GETCAPS_ARGS*       pGFXGetCaps         =NULL;
2725*53ee8cc1Swenshuai.xi     GFX_Get_CAPS*           pGFXGetCAPS         =NULL;
2726*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
2727*53ee8cc1Swenshuai.xi 
2728*53ee8cc1Swenshuai.xi     APICheckU02();
2729*53ee8cc1Swenshuai.xi     CMD(0);
2730*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2731*53ee8cc1Swenshuai.xi     pGFXGetCaps = (GFX_GETCAPS_ARGS*)pArgs;
2732*53ee8cc1Swenshuai.xi 
2733*53ee8cc1Swenshuai.xi     pGFXGetCAPS = (GFX_Get_CAPS*)pGFXGetCaps->pGFX_GetCaps;
2734*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_GetGECaps_U02(pInstance, pGFXGetCAPS->eCapType, pGFXGetCAPS->pRet, pGFXGetCAPS->Ret_Size);
2735*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret),0);
2736*53ee8cc1Swenshuai.xi }
2737*53ee8cc1Swenshuai.xi 
Ioctl_GFX_GetInfo(void * pInstance,void * pArgs)2738*53ee8cc1Swenshuai.xi static MS_U16 Ioctl_GFX_GetInfo(void* pInstance, void* pArgs)
2739*53ee8cc1Swenshuai.xi {
2740*53ee8cc1Swenshuai.xi     EN_GFX_GET_CONFIG       eCmd;
2741*53ee8cc1Swenshuai.xi     GFX_GETINFO_ARGS*       pGFXGetInfo         =NULL;
2742*53ee8cc1Swenshuai.xi     GFX_Get_BufferInfo*     pGFXGetBufferInfo   =NULL;
2743*53ee8cc1Swenshuai.xi     GFX_Get_NextTagID*      pGFXNextTagID       =NULL;
2744*53ee8cc1Swenshuai.xi     GFX_Get_Clip_Property*  pGFXGetClip         =NULL;
2745*53ee8cc1Swenshuai.xi     GFX_Get_Intensity*      pGFXGetIntensity    =NULL;
2746*53ee8cc1Swenshuai.xi     GFX_DbgInfo*            pGFXGetDBGInfo      =NULL;
2747*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
2748*53ee8cc1Swenshuai.xi     MS_U16                  pu16Val             =0;
2749*53ee8cc1Swenshuai.xi 
2750*53ee8cc1Swenshuai.xi     APICheckU02();
2751*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2752*53ee8cc1Swenshuai.xi     pGFXGetInfo = (GFX_GETINFO_ARGS*)pArgs;
2753*53ee8cc1Swenshuai.xi     eCmd = pGFXGetInfo->eGFX_GetConfig;
2754*53ee8cc1Swenshuai.xi     CMD(eCmd);
2755*53ee8cc1Swenshuai.xi 
2756*53ee8cc1Swenshuai.xi     switch(eCmd)
2757*53ee8cc1Swenshuai.xi     {
2758*53ee8cc1Swenshuai.xi         case E_GFX_GET_BUFFERINFO:
2759*53ee8cc1Swenshuai.xi             CheckSize(pGFXGetInfo->u32Size, sizeof(GFX_Get_BufferInfo), eCmd);
2760*53ee8cc1Swenshuai.xi             pGFXGetBufferInfo = (GFX_Get_BufferInfo*)pGFXGetInfo->pGFX_GetInfo;
2761*53ee8cc1Swenshuai.xi             u32Ret = MApi_GFX_GetBufferInfo_U02(pInstance, pGFXGetBufferInfo->pSrcbufInfo->pBufInfo, pGFXGetBufferInfo->pDstbufInfo->pBufInfo);
2762*53ee8cc1Swenshuai.xi             break;
2763*53ee8cc1Swenshuai.xi 
2764*53ee8cc1Swenshuai.xi         case E_GFX_GET_TAGID:
2765*53ee8cc1Swenshuai.xi             CheckSize(pGFXGetInfo->u32Size, sizeof(MS_U16), eCmd);
2766*53ee8cc1Swenshuai.xi             u32Ret = MDrv_GE_GetTAGID(g_apiGFXLocal.g_pGEContext, &pu16Val);
2767*53ee8cc1Swenshuai.xi             pGFXGetInfo->pGFX_GetInfo = (void*)&pu16Val;
2768*53ee8cc1Swenshuai.xi             break;
2769*53ee8cc1Swenshuai.xi 
2770*53ee8cc1Swenshuai.xi         case E_GFX_GET_NEXTTAGID:
2771*53ee8cc1Swenshuai.xi             CheckSize(pGFXGetInfo->u32Size, sizeof(GFX_Get_NextTagID), eCmd);
2772*53ee8cc1Swenshuai.xi             pGFXNextTagID = (GFX_Get_NextTagID*)pGFXGetInfo->pGFX_GetInfo;
2773*53ee8cc1Swenshuai.xi             u32Ret = MDrv_GE_GetNextTAGID(g_apiGFXLocal.g_pGEContext, pGFXNextTagID->bStepTagBefore, pGFXNextTagID->pTagID);
2774*53ee8cc1Swenshuai.xi             break;
2775*53ee8cc1Swenshuai.xi 
2776*53ee8cc1Swenshuai.xi         case E_GFX_GET_CLIP:
2777*53ee8cc1Swenshuai.xi             CheckSize(pGFXGetInfo->u32Size, sizeof(GFX_Get_Clip_Property), eCmd);
2778*53ee8cc1Swenshuai.xi             pGFXGetClip = (GFX_Get_Clip_Property*)pGFXGetInfo->pGFX_GetInfo ;
2779*53ee8cc1Swenshuai.xi             u32Ret =MApi_GFX_GetClip_U02(pInstance, pGFXGetClip->pV0, pGFXGetClip->pV1);
2780*53ee8cc1Swenshuai.xi             break;
2781*53ee8cc1Swenshuai.xi 
2782*53ee8cc1Swenshuai.xi         case E_GFX_GET_INTENSITY:
2783*53ee8cc1Swenshuai.xi             CheckSize(pGFXGetInfo->u32Size, sizeof(GFX_Get_Intensity), eCmd);
2784*53ee8cc1Swenshuai.xi             pGFXGetIntensity = (GFX_Get_Intensity*)pGFXGetInfo->pGFX_GetInfo;
2785*53ee8cc1Swenshuai.xi             u32Ret = MDrv_GE_GetIntensity(g_apiGFXLocal.g_pGEContext, pGFXGetIntensity->u32Id, pGFXGetIntensity->pColor);
2786*53ee8cc1Swenshuai.xi             break;
2787*53ee8cc1Swenshuai.xi 
2788*53ee8cc1Swenshuai.xi         case E_GFX_GET_DBGINFO: //Use?
2789*53ee8cc1Swenshuai.xi             CheckSize(pGFXGetInfo->u32Size, sizeof(GFX_DbgInfo), eCmd);
2790*53ee8cc1Swenshuai.xi             pGFXGetDBGInfo = (GFX_DbgInfo*)pGFXGetInfo->pGFX_GetInfo;
2791*53ee8cc1Swenshuai.xi             u32Ret = MApi_GFX_GetDBGInfo_U02(pInstance, pGFXGetDBGInfo);
2792*53ee8cc1Swenshuai.xi             break;
2793*53ee8cc1Swenshuai.xi 
2794*53ee8cc1Swenshuai.xi         default:
2795*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
2796*53ee8cc1Swenshuai.xi             break;
2797*53ee8cc1Swenshuai.xi     }
2798*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret),eCmd);
2799*53ee8cc1Swenshuai.xi }
2800*53ee8cc1Swenshuai.xi 
Ioctl_GFX_LineDraw(void * pInstance,void * pArgs)2801*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_LineDraw(void* pInstance, void* pArgs)
2802*53ee8cc1Swenshuai.xi {
2803*53ee8cc1Swenshuai.xi     GFX_LINEDRAW_ARGS*      pGFXLineDraw        =NULL;
2804*53ee8cc1Swenshuai.xi     GFX_Set_DrawLineInfo*   pGFXLineInfo        =NULL;
2805*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
2806*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
2807*53ee8cc1Swenshuai.xi 
2808*53ee8cc1Swenshuai.xi     APICheckU02();
2809*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2810*53ee8cc1Swenshuai.xi     pGFXLineDraw = (GFX_LINEDRAW_ARGS*)pArgs;
2811*53ee8cc1Swenshuai.xi     CheckSize(pGFXLineDraw->u32Size, sizeof(GFX_Set_DrawLineInfo), 0);
2812*53ee8cc1Swenshuai.xi     pGFXLineInfo = (GFX_Set_DrawLineInfo*)pGFXLineDraw->pLineInfo;
2813*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
2814*53ee8cc1Swenshuai.xi 
2815*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2816*53ee8cc1Swenshuai.xi     {
2817*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
2818*53ee8cc1Swenshuai.xi     }
2819*53ee8cc1Swenshuai.xi 
2820*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
2821*53ee8cc1Swenshuai.xi     {
2822*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
2823*53ee8cc1Swenshuai.xi     }
2824*53ee8cc1Swenshuai.xi 
2825*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXLineInfo->pFireInfo);
2826*53ee8cc1Swenshuai.xi 
2827*53ee8cc1Swenshuai.xi     geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
2828*53ee8cc1Swenshuai.xi     geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
2829*53ee8cc1Swenshuai.xi     geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
2830*53ee8cc1Swenshuai.xi     geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
2831*53ee8cc1Swenshuai.xi     MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
2832*53ee8cc1Swenshuai.xi 
2833*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_DrawLine_U02(pInstance, pGFXLineInfo->pDrawLineInfo);
2834*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2835*53ee8cc1Swenshuai.xi     {
2836*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
2837*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
2838*53ee8cc1Swenshuai.xi     }
2839*53ee8cc1Swenshuai.xi 
2840*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
2841*53ee8cc1Swenshuai.xi }
2842*53ee8cc1Swenshuai.xi 
Ioctl_GFX_RectFill(void * pInstance,void * pArgs)2843*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_RectFill(void* pInstance, void* pArgs)
2844*53ee8cc1Swenshuai.xi {
2845*53ee8cc1Swenshuai.xi     GFX_RECTFILL_ARGS*      pGFXRectFill        =NULL;
2846*53ee8cc1Swenshuai.xi     GFX_Set_RectFillInfo*   pGFXRectInfo        =NULL;
2847*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
2848*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
2849*53ee8cc1Swenshuai.xi 
2850*53ee8cc1Swenshuai.xi     APICheckU02();
2851*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2852*53ee8cc1Swenshuai.xi     pGFXRectFill = (GFX_RECTFILL_ARGS*)pArgs;
2853*53ee8cc1Swenshuai.xi     CheckSize(pGFXRectFill->u32Size, sizeof(GFX_Set_RectFillInfo), 0);
2854*53ee8cc1Swenshuai.xi     pGFXRectInfo = (GFX_Set_RectFillInfo*)pGFXRectFill->pFillBlock;
2855*53ee8cc1Swenshuai.xi 
2856*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
2857*53ee8cc1Swenshuai.xi 
2858*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2859*53ee8cc1Swenshuai.xi     {
2860*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
2861*53ee8cc1Swenshuai.xi     }
2862*53ee8cc1Swenshuai.xi 
2863*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
2864*53ee8cc1Swenshuai.xi     {
2865*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
2866*53ee8cc1Swenshuai.xi     }
2867*53ee8cc1Swenshuai.xi 
2868*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXRectInfo->pFireInfo);
2869*53ee8cc1Swenshuai.xi 
2870*53ee8cc1Swenshuai.xi     geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
2871*53ee8cc1Swenshuai.xi     geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
2872*53ee8cc1Swenshuai.xi     geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
2873*53ee8cc1Swenshuai.xi     geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
2874*53ee8cc1Swenshuai.xi     MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
2875*53ee8cc1Swenshuai.xi 
2876*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_RectFill_U02(pInstance, pGFXRectInfo->pRectFillInfo);
2877*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2878*53ee8cc1Swenshuai.xi     {
2879*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
2880*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
2881*53ee8cc1Swenshuai.xi     }
2882*53ee8cc1Swenshuai.xi 
2883*53ee8cc1Swenshuai.xi 
2884*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
2885*53ee8cc1Swenshuai.xi }
2886*53ee8cc1Swenshuai.xi 
Ioctl_GFX_TriFill(void * pInstance,void * pArgs)2887*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_TriFill(void* pInstance, void* pArgs)
2888*53ee8cc1Swenshuai.xi {
2889*53ee8cc1Swenshuai.xi     GFX_TRIFILL_ARGS*           pGFXTriFill         =NULL;
2890*53ee8cc1Swenshuai.xi     GFX_Set_TriFillInfo*        pGFXTriInfo         =NULL;
2891*53ee8cc1Swenshuai.xi     GFX_Result                  u32Ret              =GFX_FAIL;
2892*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
2893*53ee8cc1Swenshuai.xi 
2894*53ee8cc1Swenshuai.xi     APICheckU02();
2895*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2896*53ee8cc1Swenshuai.xi     pGFXTriFill = (GFX_TRIFILL_ARGS*)pArgs;
2897*53ee8cc1Swenshuai.xi     CheckSize(pGFXTriFill->u32Size, sizeof(GFX_Set_TriFillInfo), 0);
2898*53ee8cc1Swenshuai.xi     pGFXTriInfo = (GFX_Set_TriFillInfo*)pGFXTriFill->pFillBlock;
2899*53ee8cc1Swenshuai.xi 
2900*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
2901*53ee8cc1Swenshuai.xi 
2902*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2903*53ee8cc1Swenshuai.xi     {
2904*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
2905*53ee8cc1Swenshuai.xi     }
2906*53ee8cc1Swenshuai.xi 
2907*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
2908*53ee8cc1Swenshuai.xi     {
2909*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
2910*53ee8cc1Swenshuai.xi     }
2911*53ee8cc1Swenshuai.xi 
2912*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXTriInfo->pFireInfo);
2913*53ee8cc1Swenshuai.xi 
2914*53ee8cc1Swenshuai.xi     geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
2915*53ee8cc1Swenshuai.xi     geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
2916*53ee8cc1Swenshuai.xi     geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
2917*53ee8cc1Swenshuai.xi     geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
2918*53ee8cc1Swenshuai.xi     MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
2919*53ee8cc1Swenshuai.xi 
2920*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_TriFill_U02(pInstance, pGFXTriInfo->pTriFillInfo);
2921*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2922*53ee8cc1Swenshuai.xi     {
2923*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
2924*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
2925*53ee8cc1Swenshuai.xi     }
2926*53ee8cc1Swenshuai.xi 
2927*53ee8cc1Swenshuai.xi 
2928*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
2929*53ee8cc1Swenshuai.xi }
2930*53ee8cc1Swenshuai.xi 
Ioctl_GFX_SpanFill(void * pInstance,void * pArgs)2931*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_SpanFill(void* pInstance, void* pArgs)
2932*53ee8cc1Swenshuai.xi {
2933*53ee8cc1Swenshuai.xi     GFX_SPANFILL_ARGS*          pGFXSpanFill           =NULL;
2934*53ee8cc1Swenshuai.xi     GFX_Set_SpanFillInfo*       pGFXSpanInfo        =NULL;
2935*53ee8cc1Swenshuai.xi     GFX_Result                  u32Ret              =GFX_FAIL;
2936*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
2937*53ee8cc1Swenshuai.xi 
2938*53ee8cc1Swenshuai.xi     APICheckU02();
2939*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2940*53ee8cc1Swenshuai.xi     pGFXSpanFill = (GFX_SPANFILL_ARGS*)pArgs;
2941*53ee8cc1Swenshuai.xi     CheckSize(pGFXSpanFill->u32Size, sizeof(GFX_Set_SpanFillInfo), 0);
2942*53ee8cc1Swenshuai.xi     pGFXSpanInfo = (GFX_Set_SpanFillInfo*)pGFXSpanFill->pFillBlock;
2943*53ee8cc1Swenshuai.xi 
2944*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
2945*53ee8cc1Swenshuai.xi 
2946*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2947*53ee8cc1Swenshuai.xi     {
2948*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
2949*53ee8cc1Swenshuai.xi     }
2950*53ee8cc1Swenshuai.xi 
2951*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
2952*53ee8cc1Swenshuai.xi     {
2953*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
2954*53ee8cc1Swenshuai.xi     }
2955*53ee8cc1Swenshuai.xi 
2956*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXSpanInfo->pFireInfo);
2957*53ee8cc1Swenshuai.xi 
2958*53ee8cc1Swenshuai.xi     geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
2959*53ee8cc1Swenshuai.xi     geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
2960*53ee8cc1Swenshuai.xi     geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
2961*53ee8cc1Swenshuai.xi     geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
2962*53ee8cc1Swenshuai.xi     MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
2963*53ee8cc1Swenshuai.xi 
2964*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_SpanFill_U02(pInstance, pGFXSpanInfo->pSpanFillInfo);
2965*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2966*53ee8cc1Swenshuai.xi     {
2967*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
2968*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
2969*53ee8cc1Swenshuai.xi     }
2970*53ee8cc1Swenshuai.xi 
2971*53ee8cc1Swenshuai.xi 
2972*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
2973*53ee8cc1Swenshuai.xi }
2974*53ee8cc1Swenshuai.xi 
Ioctl_GFX_BitBlt(void * pInstance,void * pArgs)2975*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_BitBlt(void* pInstance, void* pArgs)
2976*53ee8cc1Swenshuai.xi {
2977*53ee8cc1Swenshuai.xi     GFX_BITBLT_ARGS*        pGFXBitblt          =NULL;
2978*53ee8cc1Swenshuai.xi     GFX_BitBltInfo*         pGFXBitBltInfo      =NULL;
2979*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
2980*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
2981*53ee8cc1Swenshuai.xi 
2982*53ee8cc1Swenshuai.xi     APICheckU02();
2983*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
2984*53ee8cc1Swenshuai.xi     pGFXBitblt = (GFX_BITBLT_ARGS*)pArgs;
2985*53ee8cc1Swenshuai.xi     CheckSize(pGFXBitblt->u32Size, sizeof(GFX_BitBltInfo), 0);
2986*53ee8cc1Swenshuai.xi     pGFXBitBltInfo = (GFX_BitBltInfo*)pGFXBitblt->pGFX_BitBlt;
2987*53ee8cc1Swenshuai.xi 
2988*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
2989*53ee8cc1Swenshuai.xi 
2990*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
2991*53ee8cc1Swenshuai.xi     {
2992*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
2993*53ee8cc1Swenshuai.xi     }
2994*53ee8cc1Swenshuai.xi 
2995*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
2996*53ee8cc1Swenshuai.xi     {
2997*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBSrcBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbsrcaddr);
2998*53ee8cc1Swenshuai.xi     }
2999*53ee8cc1Swenshuai.xi 
3000*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3001*53ee8cc1Swenshuai.xi     {
3002*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
3003*53ee8cc1Swenshuai.xi     }
3004*53ee8cc1Swenshuai.xi 
3005*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXBitBltInfo->pFireInfo);
3006*53ee8cc1Swenshuai.xi 
3007*53ee8cc1Swenshuai.xi     geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
3008*53ee8cc1Swenshuai.xi     geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
3009*53ee8cc1Swenshuai.xi     geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
3010*53ee8cc1Swenshuai.xi     geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
3011*53ee8cc1Swenshuai.xi     MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
3012*53ee8cc1Swenshuai.xi 
3013*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_BitBlt_U02(pInstance, pGFXBitBltInfo->pDrawRect, pGFXBitBltInfo->u32DrawFlag, pGFXBitBltInfo->pScaleInfo);
3014*53ee8cc1Swenshuai.xi 
3015*53ee8cc1Swenshuai.xi   /*  psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo = pGFXBitBltInfo->pBufInfo->pSrcbufInfo;
3016*53ee8cc1Swenshuai.xi         printf("\33[0;34m[GFX_INFO]Src BufferInfo [Addr=0x%lx],[Width=0x%lx], [Height=0x%lx], [Pitch=0x%lx], [ColorFmt=0x%x], [OffsetByte=0x%lx] \33[m\n"                                 \
3017*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo->pBufInfo->u32Addr      \
3018*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo->pBufInfo->u32Width     \
3019*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo->pBufInfo->u32Height    \
3020*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo->pBufInfo->u32Pitch     \
3021*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo->pBufInfo->u32ColorFmt  \
3022*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pSrcbufInfo->u32OffsetByte          );
3023*53ee8cc1Swenshuai.xi     psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo = pGFXBitBltInfo->pBufInfo->pDstbufInfo;
3024*53ee8cc1Swenshuai.xi         printf("\33[0;34m[GFX_INFO]Dst BufferInfo [Addr=0x%lx],[Width=0x%lx], [Height=0x%lx], [Pitch=0x%lx], [ColorFmt=0x%x], [OffsetByte=0x%lx] \33[m\n"                                 \
3025*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo->pBufInfo->u32Addr      \
3026*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo->pBufInfo->u32Width     \
3027*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo->pBufInfo->u32Height    \
3028*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo->pBufInfo->u32Pitch     \
3029*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo->pBufInfo->u32ColorFmt  \
3030*53ee8cc1Swenshuai.xi         ,psGFXInstPri->pGFXBufferInfo->pBufInfo->pDstbufInfo->u32OffsetByte          );*/
3031*53ee8cc1Swenshuai.xi 
3032*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3033*53ee8cc1Swenshuai.xi     {
3034*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
3035*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
3036*53ee8cc1Swenshuai.xi     }
3037*53ee8cc1Swenshuai.xi 
3038*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
3039*53ee8cc1Swenshuai.xi 
3040*53ee8cc1Swenshuai.xi }
3041*53ee8cc1Swenshuai.xi 
Ioctl_GFX_TwoSrcBitBlt(void * pInstance,void * pArgs)3042*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_TwoSrcBitBlt(void* pInstance, void* pArgs)
3043*53ee8cc1Swenshuai.xi {
3044*53ee8cc1Swenshuai.xi     GFX_TWOSRC_BITBLT_ARGS* pGFXTwoSrcBitblt     =NULL;
3045*53ee8cc1Swenshuai.xi     GFX_TwoSrc_BitBltInfo*  pGFXTwoSrcBitBltInfo =NULL;
3046*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret               =GFX_FAIL;
3047*53ee8cc1Swenshuai.xi 
3048*53ee8cc1Swenshuai.xi     APICheckU02();
3049*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3050*53ee8cc1Swenshuai.xi     pGFXTwoSrcBitblt = (GFX_TWOSRC_BITBLT_ARGS*)pArgs;
3051*53ee8cc1Swenshuai.xi     CheckSize(pGFXTwoSrcBitblt->u32Size, sizeof(GFX_TwoSrc_BitBltInfo), 0);
3052*53ee8cc1Swenshuai.xi     pGFXTwoSrcBitBltInfo = (GFX_TwoSrc_BitBltInfo*)pGFXTwoSrcBitblt->pGFX_TwoSrc_BitBlt;
3053*53ee8cc1Swenshuai.xi 
3054*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
3055*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3056*53ee8cc1Swenshuai.xi     {
3057*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
3058*53ee8cc1Swenshuai.xi     }
3059*53ee8cc1Swenshuai.xi 
3060*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3061*53ee8cc1Swenshuai.xi     {
3062*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBSrcBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbsrcaddr);
3063*53ee8cc1Swenshuai.xi     }
3064*53ee8cc1Swenshuai.xi 
3065*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3066*53ee8cc1Swenshuai.xi     {
3067*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
3068*53ee8cc1Swenshuai.xi     }
3069*53ee8cc1Swenshuai.xi 
3070*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXTwoSrcBitBltInfo->pFireInfo);
3071*53ee8cc1Swenshuai.xi 
3072*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_BitbltByTwoSourceBuffer_U02(pInstance, pGFXTwoSrcBitBltInfo->pDstbufInfo->pBufInfo, pGFXTwoSrcBitBltInfo->pDrawTwoSrcRect, pGFXTwoSrcBitBltInfo->u32DrawFlag);
3073*53ee8cc1Swenshuai.xi 
3074*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3075*53ee8cc1Swenshuai.xi     {
3076*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
3077*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
3078*53ee8cc1Swenshuai.xi     }
3079*53ee8cc1Swenshuai.xi 
3080*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
3081*53ee8cc1Swenshuai.xi }
3082*53ee8cc1Swenshuai.xi 
Ioctl_GFX_SetABL(void * pInstance,void * pArgs)3083*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_SetABL(void* pInstance, void* pArgs)
3084*53ee8cc1Swenshuai.xi {
3085*53ee8cc1Swenshuai.xi     EN_GFX_SET_ABL          eCmd;
3086*53ee8cc1Swenshuai.xi     GFX_ABL_ARGS*           pGFXABL             =NULL;
3087*53ee8cc1Swenshuai.xi     GFX_Set_ABL*            pGFXSetABL          =NULL;
3088*53ee8cc1Swenshuai.xi     GFX_Set_Colorkey*       pGFXSetColorKey     =NULL;
3089*53ee8cc1Swenshuai.xi     GFX_Set_ROP*            pGFXSetROP          =NULL;
3090*53ee8cc1Swenshuai.xi     GFX_Set_DFB*            pGFXSetDFB          =NULL;
3091*53ee8cc1Swenshuai.xi     GFX_Set_Intensity*      pGFXSetIntensity    =NULL;
3092*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
3093*53ee8cc1Swenshuai.xi     MS_U32                  u32BLDCOEF          =0;
3094*53ee8cc1Swenshuai.xi     MS_U32                  u32ABLSRC           =0;
3095*53ee8cc1Swenshuai.xi 
3096*53ee8cc1Swenshuai.xi     APICheckU02();
3097*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3098*53ee8cc1Swenshuai.xi     pGFXABL = (GFX_ABL_ARGS*)pArgs;
3099*53ee8cc1Swenshuai.xi     eCmd = pGFXABL->eGFX_SetABL;
3100*53ee8cc1Swenshuai.xi     CMD(eCmd);
3101*53ee8cc1Swenshuai.xi 
3102*53ee8cc1Swenshuai.xi     switch(eCmd)
3103*53ee8cc1Swenshuai.xi     {
3104*53ee8cc1Swenshuai.xi         case E_GFX_SET_ABL:
3105*53ee8cc1Swenshuai.xi             CheckSize(pGFXABL->u32Size, sizeof(GFX_Set_ABL),eCmd);
3106*53ee8cc1Swenshuai.xi             pGFXSetABL = (GFX_Set_ABL*)pGFXABL->pGFX_ABL;
3107*53ee8cc1Swenshuai.xi             g_apiGFXLocal.u32geRgbColor = (g_apiGFXLocal.u32geRgbColor&0x00ffffff)|((pGFXSetABL->u8Alpha_Const)<<24);
3108*53ee8cc1Swenshuai.xi             u32Ret = MApi_GFX_MapBLDCOEF(pGFXSetABL->eABLCoef, &u32BLDCOEF);
3109*53ee8cc1Swenshuai.xi             u32Ret = MApi_GFX_MapABLCOEF(pGFXSetABL->eDb_abl, &u32ABLSRC);
3110*53ee8cc1Swenshuai.xi             g_apiGFXLocal.pABLInfo.eBldCoef =         (GE_BlendOp)u32BLDCOEF;
3111*53ee8cc1Swenshuai.xi             g_apiGFXLocal.pABLInfo.eABLSrc =          (GE_AlphaSrc)u32ABLSRC;
3112*53ee8cc1Swenshuai.xi             g_apiGFXLocal.pABLInfo.u32ABLConstCoef =  (MS_U32)pGFXSetABL->u8Alpha_Const;
3113*53ee8cc1Swenshuai.xi             MApi_GFX_SetAlpha_U02(pInstance, pGFXSetABL->bEnable, pGFXSetABL->eABLCoef, pGFXSetABL->eDb_abl, pGFXSetABL->u8Alpha_Const);
3114*53ee8cc1Swenshuai.xi             break;
3115*53ee8cc1Swenshuai.xi 
3116*53ee8cc1Swenshuai.xi         case E_GFX_SET_COLORKEY:
3117*53ee8cc1Swenshuai.xi             CheckSize(pGFXABL->u32Size, sizeof(GFX_Set_Colorkey), eCmd);
3118*53ee8cc1Swenshuai.xi             pGFXSetColorKey = (GFX_Set_Colorkey*)pGFXABL->pGFX_ABL;
3119*53ee8cc1Swenshuai.xi             if( pGFXSetColorKey->ColorKey_Type & E_SRC_COLORKEY)
3120*53ee8cc1Swenshuai.xi             {
3121*53ee8cc1Swenshuai.xi                 MApi_GFX_SetSrcColorKey_U02(pInstance, pGFXSetColorKey->pSrcbufInfo->bEnable, pGFXSetColorKey->pSrcbufInfo->eOpMode, \
3122*53ee8cc1Swenshuai.xi                     pGFXSetColorKey->pSrcbufInfo->eFmt, pGFXSetColorKey->pSrcbufInfo->pS_color, pGFXSetColorKey->pSrcbufInfo->pE_color);
3123*53ee8cc1Swenshuai.xi             }
3124*53ee8cc1Swenshuai.xi             if( pGFXSetColorKey->ColorKey_Type & E_DST_COLORKEY)
3125*53ee8cc1Swenshuai.xi             {
3126*53ee8cc1Swenshuai.xi                 MApi_GFX_SetDstColorKey_U02(pInstance, pGFXSetColorKey->pDstbufInfo->bEnable, pGFXSetColorKey->pDstbufInfo->eOpMode, \
3127*53ee8cc1Swenshuai.xi                     pGFXSetColorKey->pDstbufInfo->eFmt, pGFXSetColorKey->pDstbufInfo->pS_color, pGFXSetColorKey->pDstbufInfo->pE_color);
3128*53ee8cc1Swenshuai.xi             }
3129*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3130*53ee8cc1Swenshuai.xi             break;
3131*53ee8cc1Swenshuai.xi 
3132*53ee8cc1Swenshuai.xi         case E_GFX_SET_ROP:
3133*53ee8cc1Swenshuai.xi             CheckSize(pGFXABL->u32Size, sizeof(GFX_Set_ROP), eCmd);
3134*53ee8cc1Swenshuai.xi             pGFXSetROP = (GFX_Set_ROP*)pGFXABL->pGFX_ABL;
3135*53ee8cc1Swenshuai.xi             MApi_GFX_SetROP2_U02(pInstance, pGFXSetROP->bEnable, pGFXSetROP->eRopMode);
3136*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3137*53ee8cc1Swenshuai.xi             break;
3138*53ee8cc1Swenshuai.xi 
3139*53ee8cc1Swenshuai.xi         case E_GFX_SET_DFB:
3140*53ee8cc1Swenshuai.xi             CheckSize(pGFXABL->u32Size, sizeof(GFX_Set_DFB), eCmd);
3141*53ee8cc1Swenshuai.xi             pGFXSetDFB = (GFX_Set_DFB*)pGFXABL->pGFX_ABL;
3142*53ee8cc1Swenshuai.xi             g_apiGFXLocal.u32geRgbColor = (pGFXSetDFB->sRGBColor.a)<<24|(pGFXSetDFB->sRGBColor.r)<<16|(pGFXSetDFB->sRGBColor.g)<<8|(pGFXSetDFB->sRGBColor.b);
3143*53ee8cc1Swenshuai.xi             MDrv_GE_EnableDFBBlending(g_apiGFXLocal.g_pGEContext, pGFXSetDFB->bEnable);
3144*53ee8cc1Swenshuai.xi             MApi_GFX_SetDFBBldOP_U02(pInstance, pGFXSetDFB->eSrcBldOP, pGFXSetDFB->eDstBldOP);
3145*53ee8cc1Swenshuai.xi             MApi_GFX_SetDFBBldConstColor_U02(pInstance, pGFXSetDFB->sRGBColor);
3146*53ee8cc1Swenshuai.xi             MApi_GFX_SetDFBBldFlags_U02(pInstance, pGFXSetDFB->u16DFBBldFlags);
3147*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3148*53ee8cc1Swenshuai.xi             break;
3149*53ee8cc1Swenshuai.xi 
3150*53ee8cc1Swenshuai.xi         case E_GFX_SET_INTENSITY:
3151*53ee8cc1Swenshuai.xi             CheckSize(pGFXABL->u32Size, sizeof(GFX_Set_Intensity), eCmd);
3152*53ee8cc1Swenshuai.xi             pGFXSetIntensity = (GFX_Set_Intensity*)pGFXABL->pGFX_ABL;
3153*53ee8cc1Swenshuai.xi             MApi_GFX_SetIntensity_U02(pInstance, pGFXSetIntensity->u32Id, pGFXSetIntensity->eFmt, pGFXSetIntensity->pColor);
3154*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3155*53ee8cc1Swenshuai.xi             break;
3156*53ee8cc1Swenshuai.xi         default:
3157*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3158*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3159*53ee8cc1Swenshuai.xi             break;
3160*53ee8cc1Swenshuai.xi 
3161*53ee8cc1Swenshuai.xi     }
3162*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), eCmd);
3163*53ee8cc1Swenshuai.xi }
3164*53ee8cc1Swenshuai.xi #endif
3165*53ee8cc1Swenshuai.xi 
Ioctl_GFX_SetConfig(void * pInstance,void * pArgs)3166*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_SetConfig(void* pInstance, void* pArgs)
3167*53ee8cc1Swenshuai.xi {
3168*53ee8cc1Swenshuai.xi     EN_GFX_SET_CONFIG       eCmd;
3169*53ee8cc1Swenshuai.xi     GFX_SETCONFIG_ARGS*     pGFXSetConfig       =NULL;
3170*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3171*53ee8cc1Swenshuai.xi     GFX_Set_VQ*             pGFXSetVQ           =NULL;
3172*53ee8cc1Swenshuai.xi     GFX_Set_Mirror*         pGFXSetMirror       =NULL;
3173*53ee8cc1Swenshuai.xi     GFX_Set_Italic*         pGFXSetItalic       =NULL;
3174*53ee8cc1Swenshuai.xi     GFX_Set_PaletteOpt*     pGFXSetPaletteOpt   =NULL;
3175*53ee8cc1Swenshuai.xi     GFX_Set_Clip_Property*  pGFXSetClip         =NULL;
3176*53ee8cc1Swenshuai.xi     GFX_Set_WriteProtect*   pGFXSetWP           =NULL;
3177*53ee8cc1Swenshuai.xi     GFX_Set_AlphaCompare*   pGFXSetCMP          =NULL;
3178*53ee8cc1Swenshuai.xi     GFX_Set_CSC*            pGFXSetCSC          =NULL;
3179*53ee8cc1Swenshuai.xi     GFX_Set_BurstMiuLen*    pGFXSetBurstMiuLen  =NULL;
3180*53ee8cc1Swenshuai.xi     MS_BOOL*                pbVal               =NULL;
3181*53ee8cc1Swenshuai.xi #endif
3182*53ee8cc1Swenshuai.xi     MS_U32*                 pu32Val             =NULL;
3183*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
3184*53ee8cc1Swenshuai.xi 
3185*53ee8cc1Swenshuai.xi     APICheckU02();
3186*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3187*53ee8cc1Swenshuai.xi     pGFXSetConfig = (GFX_SETCONFIG_ARGS*)pArgs;
3188*53ee8cc1Swenshuai.xi     eCmd = pGFXSetConfig->eGFX_SetConfig;
3189*53ee8cc1Swenshuai.xi     CMD(eCmd);
3190*53ee8cc1Swenshuai.xi 
3191*53ee8cc1Swenshuai.xi     switch(eCmd)
3192*53ee8cc1Swenshuai.xi     {
3193*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3194*53ee8cc1Swenshuai.xi         case E_GFX_SET_POWERON:
3195*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_BOOL), eCmd);
3196*53ee8cc1Swenshuai.xi             pbVal = (MS_BOOL*)pGFXSetConfig->pGFX_ConfigInfo;
3197*53ee8cc1Swenshuai.xi             MDrv_GE_SetClock(g_apiGFXLocal.g_pGEContext, *pbVal);
3198*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3199*53ee8cc1Swenshuai.xi             break;
3200*53ee8cc1Swenshuai.xi 
3201*53ee8cc1Swenshuai.xi         case E_GFX_SET_FLUSHQUEUE:
3202*53ee8cc1Swenshuai.xi             MDrv_GE_WaitIdle(g_apiGFXLocal.g_pGEContext);
3203*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3204*53ee8cc1Swenshuai.xi             break;
3205*53ee8cc1Swenshuai.xi 
3206*53ee8cc1Swenshuai.xi         case E_GFX_SET_TAGID:
3207*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_U32), eCmd);
3208*53ee8cc1Swenshuai.xi             pu32Val = (MS_U32*)pGFXSetConfig->pGFX_ConfigInfo;
3209*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->u32TagID = *pu32Val;
3210*53ee8cc1Swenshuai.xi             MDrv_GE_SetTAGID(g_apiGFXLocal.g_pGEContext, (MS_U16)*pu32Val);
3211*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3212*53ee8cc1Swenshuai.xi             break;
3213*53ee8cc1Swenshuai.xi #endif
3214*53ee8cc1Swenshuai.xi         case E_GFX_SET_NEXTTAGID:
3215*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_U32), eCmd);
3216*53ee8cc1Swenshuai.xi             MDrv_GE_SetNextTAGID(g_apiGFXLocal.g_pGEContext, (MS_U16*)pGFXSetConfig->pGFX_ConfigInfo);
3217*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3218*53ee8cc1Swenshuai.xi             break;
3219*53ee8cc1Swenshuai.xi 
3220*53ee8cc1Swenshuai.xi         case E_GFX_SET_WAITFORTAGID:
3221*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_U32), eCmd);
3222*53ee8cc1Swenshuai.xi             pu32Val = (MS_U32*)pGFXSetConfig->pGFX_ConfigInfo;
3223*53ee8cc1Swenshuai.xi             MDrv_GE_WaitTAGID(g_apiGFXLocal.g_pGEContext, (MS_U16)*pu32Val);
3224*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3225*53ee8cc1Swenshuai.xi             break;
3226*53ee8cc1Swenshuai.xi         case E_GFX_SET_POLLINGTAGID:
3227*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_U32), eCmd);
3228*53ee8cc1Swenshuai.xi             pu32Val = (MS_U32*)pGFXSetConfig->pGFX_ConfigInfo;
3229*53ee8cc1Swenshuai.xi             u32Ret = MDrv_GE_PollingTAGID(g_apiGFXLocal.g_pGEContext, (MS_U16)*pu32Val);
3230*53ee8cc1Swenshuai.xi             if (E_GE_OK == u32Ret)
3231*53ee8cc1Swenshuai.xi             {
3232*53ee8cc1Swenshuai.xi                 u32Ret = GFX_SUCCESS;
3233*53ee8cc1Swenshuai.xi             }
3234*53ee8cc1Swenshuai.xi             else
3235*53ee8cc1Swenshuai.xi             {
3236*53ee8cc1Swenshuai.xi                 u32Ret = GFX_FAIL;
3237*53ee8cc1Swenshuai.xi             }
3238*53ee8cc1Swenshuai.xi             break;
3239*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3240*53ee8cc1Swenshuai.xi         case E_GFX_SET_ONEPIXELMODE:
3241*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_BOOL), eCmd);
3242*53ee8cc1Swenshuai.xi             pbVal = (MS_BOOL*)pGFXSetConfig->pGFX_ConfigInfo;
3243*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->bOnePixelMode = *pbVal;
3244*53ee8cc1Swenshuai.xi             MDrv_GE_SetOnePixelMode(g_apiGFXLocal.g_pGEContext, *pbVal);
3245*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3246*53ee8cc1Swenshuai.xi             break;
3247*53ee8cc1Swenshuai.xi 
3248*53ee8cc1Swenshuai.xi         case E_GFX_SET_DITHER:
3249*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_BOOL), eCmd);
3250*53ee8cc1Swenshuai.xi             pbVal = (MS_BOOL*)pGFXSetConfig->pGFX_ConfigInfo;
3251*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->bDither = *pbVal;
3252*53ee8cc1Swenshuai.xi             g_apiGFXLocal.bDither = *pbVal;
3253*53ee8cc1Swenshuai.xi             MDrv_GE_SetDither(g_apiGFXLocal.g_pGEContext,g_apiGFXLocal.bDither);
3254*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3255*53ee8cc1Swenshuai.xi             break;
3256*53ee8cc1Swenshuai.xi 
3257*53ee8cc1Swenshuai.xi         //VQ switch can't dynamic disablb, cause of cmd losing.
3258*53ee8cc1Swenshuai.xi         case E_GFX_SET_VQ:
3259*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_VQ), eCmd);
3260*53ee8cc1Swenshuai.xi             pGFXSetVQ = (GFX_Set_VQ*)pGFXSetConfig->pGFX_ConfigInfo;
3261*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->bVQEnable = pGFXSetVQ->bEnable;
3262*53ee8cc1Swenshuai.xi             MDrv_GE_EnableVCmdQueue(g_apiGFXLocal.g_pGEContext, pGFXSetVQ->bEnable);
3263*53ee8cc1Swenshuai.xi             MApi_GFX_SetVCmdBuffer_U02(pInstance, pGFXSetVQ->u32Addr, pGFXSetVQ->enBufSize);
3264*53ee8cc1Swenshuai.xi             MDrv_GE_SetVCmd_R_Thread(g_apiGFXLocal.g_pGEContext, pGFXSetVQ->u8R_Threshold);
3265*53ee8cc1Swenshuai.xi             MDrv_GE_SetVCmd_W_Thread(g_apiGFXLocal.g_pGEContext, pGFXSetVQ->u8W_Threshold);
3266*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3267*53ee8cc1Swenshuai.xi             break;
3268*53ee8cc1Swenshuai.xi 
3269*53ee8cc1Swenshuai.xi         case E_GFX_SET_MIRROR:
3270*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_Mirror), eCmd);
3271*53ee8cc1Swenshuai.xi             pGFXSetMirror=(GFX_Set_Mirror*)pGFXSetConfig->pGFX_ConfigInfo;
3272*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->pMirror->bMirrorX = pGFXSetMirror->bMirrorX;
3273*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->pMirror->bMirrorY = pGFXSetMirror->bMirrorY;
3274*53ee8cc1Swenshuai.xi 
3275*53ee8cc1Swenshuai.xi             g_apiGFXLocal._bMirrorH = pGFXSetMirror->bMirrorX;
3276*53ee8cc1Swenshuai.xi             g_apiGFXLocal._bMirrorV = pGFXSetMirror->bMirrorY;
3277*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3278*53ee8cc1Swenshuai.xi             break;
3279*53ee8cc1Swenshuai.xi 
3280*53ee8cc1Swenshuai.xi         case E_GFX_SET_DST_MIRROR:
3281*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_Mirror), eCmd);
3282*53ee8cc1Swenshuai.xi             pGFXSetMirror=(GFX_Set_Mirror*)pGFXSetConfig->pGFX_ConfigInfo;
3283*53ee8cc1Swenshuai.xi             g_apiGFXLocal._bDstMirrorH = pGFXSetMirror->bMirrorX;
3284*53ee8cc1Swenshuai.xi             g_apiGFXLocal._bDstMirrorV = pGFXSetMirror->bMirrorY;
3285*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3286*53ee8cc1Swenshuai.xi             break;
3287*53ee8cc1Swenshuai.xi 
3288*53ee8cc1Swenshuai.xi         case E_GFX_SET_ROTATE:
3289*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_RotateAngle), eCmd);
3290*53ee8cc1Swenshuai.xi             pu32Val = (MS_U32*)pGFXSetConfig->pGFX_ConfigInfo;
3291*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->eRotate = pGFXSetRotate;
3292*53ee8cc1Swenshuai.xi 
3293*53ee8cc1Swenshuai.xi             g_apiGFXLocal._angle = (GFX_RotateAngle)*pu32Val;
3294*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3295*53ee8cc1Swenshuai.xi             break;
3296*53ee8cc1Swenshuai.xi 
3297*53ee8cc1Swenshuai.xi         case E_GFX_SET_ITALIC:
3298*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_Italic), eCmd);
3299*53ee8cc1Swenshuai.xi             pGFXSetItalic = (GFX_Set_Italic*)pGFXSetConfig->pGFX_ConfigInfo;
3300*53ee8cc1Swenshuai.xi             MDrv_GE_SetItalic(g_apiGFXLocal.g_pGEContext, pGFXSetItalic->u8Ini_dis, pGFXSetItalic->u8Ini_line, pGFXSetItalic->u8Delta);
3301*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3302*53ee8cc1Swenshuai.xi             break;
3303*53ee8cc1Swenshuai.xi 
3304*53ee8cc1Swenshuai.xi         case E_GFX_SET_NEARESTMODE:
3305*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(MS_BOOL), eCmd);
3306*53ee8cc1Swenshuai.xi             pbVal = (MS_BOOL*)pGFXSetConfig->pGFX_ConfigInfo;
3307*53ee8cc1Swenshuai.xi             g_apiGFXLocal._bNearest = *pbVal;
3308*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3309*53ee8cc1Swenshuai.xi             break;
3310*53ee8cc1Swenshuai.xi 
3311*53ee8cc1Swenshuai.xi         case E_GFX_SET_PALETTEOPT:
3312*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_PaletteOpt), eCmd);
3313*53ee8cc1Swenshuai.xi             pGFXSetPaletteOpt = (GFX_Set_PaletteOpt*)pGFXSetConfig->pGFX_ConfigInfo;
3314*53ee8cc1Swenshuai.xi             MApi_GFX_SetPaletteOpt_U02(pInstance, pGFXSetPaletteOpt->pPalArray, pGFXSetPaletteOpt->u32PalStart, pGFXSetPaletteOpt->u32PalEnd);
3315*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3316*53ee8cc1Swenshuai.xi             break;
3317*53ee8cc1Swenshuai.xi 
3318*53ee8cc1Swenshuai.xi         case E_GFX_SET_CLIP:
3319*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_Clip_Property), eCmd);
3320*53ee8cc1Swenshuai.xi             pGFXSetClip = (GFX_Set_Clip_Property*)pGFXSetConfig->pGFX_ConfigInfo;
3321*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->pClip->pV0 = pGFXSetClip->pV0;
3322*53ee8cc1Swenshuai.xi             //psGFXInstPri->pGFXSetConfig->pClip->pV1 = pGFXSetClip->pV1;
3323*53ee8cc1Swenshuai.xi             MApi_GFX_SetClip_U02(pInstance, pGFXSetClip->pV0, pGFXSetClip->pV1);
3324*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3325*53ee8cc1Swenshuai.xi             break;
3326*53ee8cc1Swenshuai.xi 
3327*53ee8cc1Swenshuai.xi         case E_GFX_SET_WRITEPROTECT:
3328*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_WriteProtect), eCmd);
3329*53ee8cc1Swenshuai.xi             pGFXSetWP = (GFX_Set_WriteProtect*)pGFXSetConfig->pGFX_ConfigInfo;
3330*53ee8cc1Swenshuai.xi             MDrv_GE_WriteProtect(g_apiGFXLocal.g_pGEContext, pGFXSetWP->u8Miu, pGFXSetWP->u32Addr_Low, pGFXSetWP->u32Addr_High, (GE_WPType)pGFXSetWP->eWPType);
3331*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3332*53ee8cc1Swenshuai.xi             break;
3333*53ee8cc1Swenshuai.xi         case E_GFX_SET_ALPHA_COMPARE:
3334*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_AlphaCompare), eCmd);
3335*53ee8cc1Swenshuai.xi             pGFXSetCMP = (GFX_Set_AlphaCompare*)pGFXSetConfig->pGFX_ConfigInfo;
3336*53ee8cc1Swenshuai.xi             MApi_GFX_SetAlphaCmp_U02(pInstance,pGFXSetCMP->enable,pGFXSetCMP->eMode);
3337*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3338*53ee8cc1Swenshuai.xi             break;
3339*53ee8cc1Swenshuai.xi         case E_GFX_SET_CSC:
3340*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_CSC), eCmd);
3341*53ee8cc1Swenshuai.xi             pGFXSetCSC = (GFX_Set_CSC*)pGFXSetConfig->pGFX_ConfigInfo;
3342*53ee8cc1Swenshuai.xi             MApi_GFX_SetDC_CSC_FMT_U02(pInstance,pGFXSetCSC->mode,pGFXSetCSC->yuv_out_range,pGFXSetCSC->uv_in_range,pGFXSetCSC->srcfmt,pGFXSetCSC->dstfmt);
3343*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3344*53ee8cc1Swenshuai.xi             break;
3345*53ee8cc1Swenshuai.xi         case E_GFX_SET_BURSTMIULEN:
3346*53ee8cc1Swenshuai.xi             CheckSize(pGFXSetConfig->u32Size, sizeof(GFX_Set_BurstMiuLen), eCmd);
3347*53ee8cc1Swenshuai.xi             pGFXSetBurstMiuLen = (GFX_Set_BurstMiuLen*)pGFXSetConfig->pGFX_ConfigInfo;
3348*53ee8cc1Swenshuai.xi             MDrv_GE_SetBurstMiuLen(g_apiGFXLocal.g_pGEContext,pGFXSetBurstMiuLen->bEnable,pGFXSetBurstMiuLen->u32BurstLen);
3349*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3350*53ee8cc1Swenshuai.xi             break;
3351*53ee8cc1Swenshuai.xi #endif
3352*53ee8cc1Swenshuai.xi         default:
3353*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3354*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3355*53ee8cc1Swenshuai.xi             break;
3356*53ee8cc1Swenshuai.xi     }
3357*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, u32Ret, eCmd);
3358*53ee8cc1Swenshuai.xi }
3359*53ee8cc1Swenshuai.xi 
Ioctl_GFX_GetConfig(void * pInstance,void * pArgs)3360*53ee8cc1Swenshuai.xi static MS_U16 Ioctl_GFX_GetConfig(void* pInstance, void* pArgs)
3361*53ee8cc1Swenshuai.xi {
3362*53ee8cc1Swenshuai.xi     EN_GFX_GET_CONFIG       eCmd;
3363*53ee8cc1Swenshuai.xi     GFX_GETCONFIG_ARGS*     pGFXGetConfig       =NULL;
3364*53ee8cc1Swenshuai.xi     GFX_Config*             stGFXcfg            =NULL;
3365*53ee8cc1Swenshuai.xi     GE_Config               cfg;
3366*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
3367*53ee8cc1Swenshuai.xi 
3368*53ee8cc1Swenshuai.xi     pGFXGetConfig = (GFX_GETCONFIG_ARGS*)pArgs;
3369*53ee8cc1Swenshuai.xi     eCmd = pGFXGetConfig->eGFX_GetConfig;
3370*53ee8cc1Swenshuai.xi     CMD(eCmd);
3371*53ee8cc1Swenshuai.xi 
3372*53ee8cc1Swenshuai.xi     switch(eCmd)
3373*53ee8cc1Swenshuai.xi     {
3374*53ee8cc1Swenshuai.xi         case E_GFX_GET_INIT:
3375*53ee8cc1Swenshuai.xi             memset(&cfg, 0 , sizeof(GE_Config));
3376*53ee8cc1Swenshuai.xi             if(FALSE==MDrv_GE_GetConfig((GE_Config*)&cfg))
3377*53ee8cc1Swenshuai.xi                 return UTOPIA_STATUS_FAIL;
3378*53ee8cc1Swenshuai.xi             stGFXcfg = (GFX_Config*)pGFXGetConfig->pGFX_ConfigInfo;
3379*53ee8cc1Swenshuai.xi             stGFXcfg->bIsCompt = cfg.bIsCompt;
3380*53ee8cc1Swenshuai.xi             stGFXcfg->bIsHK = cfg.bIsHK;
3381*53ee8cc1Swenshuai.xi             stGFXcfg->u32VCmdQSize = cfg.u32VCmdQSize;
3382*53ee8cc1Swenshuai.xi             stGFXcfg->u32VCmdQAddr = cfg.PhyVCmdQAddr;
3383*53ee8cc1Swenshuai.xi 
3384*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3385*53ee8cc1Swenshuai.xi             break;
3386*53ee8cc1Swenshuai.xi         default:
3387*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3388*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3389*53ee8cc1Swenshuai.xi             break;
3390*53ee8cc1Swenshuai.xi     }
3391*53ee8cc1Swenshuai.xi     return u32Ret;
3392*53ee8cc1Swenshuai.xi }
3393*53ee8cc1Swenshuai.xi 
3394*53ee8cc1Swenshuai.xi 
3395*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
Ioctl_GFX_Bitmap(void * pInstance,void * pArgs)3396*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_Bitmap(void* pInstance, void* pArgs)
3397*53ee8cc1Swenshuai.xi {
3398*53ee8cc1Swenshuai.xi     GFX_BITMAP_ARGS*        pGFXBitmap          =NULL;
3399*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
3400*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
3401*53ee8cc1Swenshuai.xi 
3402*53ee8cc1Swenshuai.xi     APICheckU02();
3403*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3404*53ee8cc1Swenshuai.xi     pGFXBitmap = (GFX_BITMAP_ARGS*)pArgs;
3405*53ee8cc1Swenshuai.xi     CheckSize(pGFXBitmap->u32Size, sizeof(GFX_Bitmap), 0);
3406*53ee8cc1Swenshuai.xi 
3407*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
3408*53ee8cc1Swenshuai.xi 
3409*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3410*53ee8cc1Swenshuai.xi     {
3411*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
3412*53ee8cc1Swenshuai.xi     }
3413*53ee8cc1Swenshuai.xi 
3414*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3415*53ee8cc1Swenshuai.xi     {
3416*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBSrcBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbsrcaddr);
3417*53ee8cc1Swenshuai.xi     }
3418*53ee8cc1Swenshuai.xi 
3419*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3420*53ee8cc1Swenshuai.xi     {
3421*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
3422*53ee8cc1Swenshuai.xi     }
3423*53ee8cc1Swenshuai.xi 
3424*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXBitmap->pGFX_Bitmap->pFireInfo);
3425*53ee8cc1Swenshuai.xi 
3426*53ee8cc1Swenshuai.xi     geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
3427*53ee8cc1Swenshuai.xi     geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
3428*53ee8cc1Swenshuai.xi     geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
3429*53ee8cc1Swenshuai.xi     geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
3430*53ee8cc1Swenshuai.xi     MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
3431*53ee8cc1Swenshuai.xi 
3432*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_DrawBitmap_U02(pInstance,pGFXBitmap->pGFX_Bitmap->pFireInfo->SrcbufInfo, pGFXBitmap->pGFX_Bitmap->pBmpInfo);
3433*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3434*53ee8cc1Swenshuai.xi     {
3435*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
3436*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
3437*53ee8cc1Swenshuai.xi     }
3438*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
3439*53ee8cc1Swenshuai.xi }
3440*53ee8cc1Swenshuai.xi 
Ioctl_GFX_Font(void * pInstance,void * pArgs)3441*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_Font(void* pInstance, void* pArgs)
3442*53ee8cc1Swenshuai.xi {
3443*53ee8cc1Swenshuai.xi     GFX_TEXTTYPE            eCmd;
3444*53ee8cc1Swenshuai.xi     GFX_TEXTOUT_ARGS*       pGFXTextOutArg      =NULL;
3445*53ee8cc1Swenshuai.xi     GFX_TextOut_V2*         pGFXTextOut         =NULL;
3446*53ee8cc1Swenshuai.xi     GFX_CharacterOut*       pGFXCharacterOut    =NULL;
3447*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
3448*53ee8cc1Swenshuai.xi     GE_RgbColor geRgbColor;
3449*53ee8cc1Swenshuai.xi 
3450*53ee8cc1Swenshuai.xi     APICheckU02();
3451*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3452*53ee8cc1Swenshuai.xi     pGFXTextOutArg = (GFX_TEXTOUT_ARGS*)pArgs;
3453*53ee8cc1Swenshuai.xi     eCmd = pGFXTextOutArg->eGFX_TextType;
3454*53ee8cc1Swenshuai.xi     CMD(eCmd);
3455*53ee8cc1Swenshuai.xi 
3456*53ee8cc1Swenshuai.xi     switch(eCmd)
3457*53ee8cc1Swenshuai.xi     {
3458*53ee8cc1Swenshuai.xi         case E_LOADTEXTOUT:
3459*53ee8cc1Swenshuai.xi             CheckSize(pGFXTextOutArg->u32Size, sizeof(GFX_TextOut_V2), eCmd);
3460*53ee8cc1Swenshuai.xi             pGFXTextOut = (GFX_TextOut_V2*)pGFXTextOutArg->pGFX_TextOut;
3461*53ee8cc1Swenshuai.xi 
3462*53ee8cc1Swenshuai.xi             MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
3463*53ee8cc1Swenshuai.xi 
3464*53ee8cc1Swenshuai.xi             if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3465*53ee8cc1Swenshuai.xi             {
3466*53ee8cc1Swenshuai.xi                 MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
3467*53ee8cc1Swenshuai.xi             }
3468*53ee8cc1Swenshuai.xi 
3469*53ee8cc1Swenshuai.xi             if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3470*53ee8cc1Swenshuai.xi             {
3471*53ee8cc1Swenshuai.xi                 MDrv_GE_SetTLBSrcBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbsrcaddr);
3472*53ee8cc1Swenshuai.xi             }
3473*53ee8cc1Swenshuai.xi 
3474*53ee8cc1Swenshuai.xi             if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3475*53ee8cc1Swenshuai.xi             {
3476*53ee8cc1Swenshuai.xi                 MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
3477*53ee8cc1Swenshuai.xi             }
3478*53ee8cc1Swenshuai.xi 
3479*53ee8cc1Swenshuai.xi             GFX_SetFireInfo(pInstance,pGFXTextOut->pFireInfo);
3480*53ee8cc1Swenshuai.xi 
3481*53ee8cc1Swenshuai.xi             geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
3482*53ee8cc1Swenshuai.xi             geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
3483*53ee8cc1Swenshuai.xi             geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
3484*53ee8cc1Swenshuai.xi             geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
3485*53ee8cc1Swenshuai.xi             MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
3486*53ee8cc1Swenshuai.xi 
3487*53ee8cc1Swenshuai.xi             MApi_GFX_TextOut_U02(pInstance, pGFXTextOut->fHandle, (MS_U8*)pGFXTextOut->charArray, pGFXTextOut->u32StrWidth, pGFXTextOut->pTextInfo, pGFXTextOut->pFonttable);
3488*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3489*53ee8cc1Swenshuai.xi             break;
3490*53ee8cc1Swenshuai.xi 
3491*53ee8cc1Swenshuai.xi         case E_CHARACTEROUT:
3492*53ee8cc1Swenshuai.xi             CheckSize(pGFXTextOutArg->u32Size, sizeof(GFX_CharacterOut), eCmd);
3493*53ee8cc1Swenshuai.xi             pGFXCharacterOut = (GFX_CharacterOut*)pGFXTextOutArg->pGFX_TextOut;
3494*53ee8cc1Swenshuai.xi 
3495*53ee8cc1Swenshuai.xi             MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
3496*53ee8cc1Swenshuai.xi 
3497*53ee8cc1Swenshuai.xi             if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3498*53ee8cc1Swenshuai.xi             {
3499*53ee8cc1Swenshuai.xi                 MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
3500*53ee8cc1Swenshuai.xi             }
3501*53ee8cc1Swenshuai.xi 
3502*53ee8cc1Swenshuai.xi             if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3503*53ee8cc1Swenshuai.xi             {
3504*53ee8cc1Swenshuai.xi                 MDrv_GE_SetTLBSrcBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbsrcaddr);
3505*53ee8cc1Swenshuai.xi             }
3506*53ee8cc1Swenshuai.xi 
3507*53ee8cc1Swenshuai.xi             if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3508*53ee8cc1Swenshuai.xi             {
3509*53ee8cc1Swenshuai.xi                 MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
3510*53ee8cc1Swenshuai.xi             }
3511*53ee8cc1Swenshuai.xi 
3512*53ee8cc1Swenshuai.xi             GFX_SetFireInfo(pInstance,pGFXCharacterOut->pFireInfo);
3513*53ee8cc1Swenshuai.xi 
3514*53ee8cc1Swenshuai.xi             geRgbColor.a= (g_apiGFXLocal.u32geRgbColor&0xff000000)>>24;
3515*53ee8cc1Swenshuai.xi             geRgbColor.r= (g_apiGFXLocal.u32geRgbColor&0x00ff0000)>>16;
3516*53ee8cc1Swenshuai.xi             geRgbColor.g= (g_apiGFXLocal.u32geRgbColor&0x0000ff00)>>8;
3517*53ee8cc1Swenshuai.xi             geRgbColor.b= (g_apiGFXLocal.u32geRgbColor&0x000000ff);
3518*53ee8cc1Swenshuai.xi             MDrv_GE_SetDFBBldConstColor(g_apiGFXLocal.g_pGEContext, geRgbColor);
3519*53ee8cc1Swenshuai.xi 
3520*53ee8cc1Swenshuai.xi             MApi_GFX_CharacterOut_U02(pInstance, pGFXCharacterOut->pChar, pGFXCharacterOut->pTextInfo);
3521*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3522*53ee8cc1Swenshuai.xi             break;
3523*53ee8cc1Swenshuai.xi 
3524*53ee8cc1Swenshuai.xi         default:
3525*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3526*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3527*53ee8cc1Swenshuai.xi             break;
3528*53ee8cc1Swenshuai.xi     }
3529*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3530*53ee8cc1Swenshuai.xi     {
3531*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
3532*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
3533*53ee8cc1Swenshuai.xi     }
3534*53ee8cc1Swenshuai.xi 
3535*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), eCmd);
3536*53ee8cc1Swenshuai.xi }
3537*53ee8cc1Swenshuai.xi 
Ioctl_GFX_PowerState(void * pInstance,void * pArgs)3538*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_PowerState(void* pInstance, void* pArgs)
3539*53ee8cc1Swenshuai.xi {
3540*53ee8cc1Swenshuai.xi     EN_POWER_MODE           eCmd;
3541*53ee8cc1Swenshuai.xi     GFX_POWERSTATE_ARGS*    pGFXPowerStateArg       =NULL;
3542*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret                  =GFX_FAIL;
3543*53ee8cc1Swenshuai.xi     void*                   pModule                =NULL;
3544*53ee8cc1Swenshuai.xi 
3545*53ee8cc1Swenshuai.xi     APICheckU02();
3546*53ee8cc1Swenshuai.xi     pGFXPowerStateArg = (GFX_POWERSTATE_ARGS*)pArgs;
3547*53ee8cc1Swenshuai.xi     eCmd = pGFXPowerStateArg->eGFX_PowerStateType;
3548*53ee8cc1Swenshuai.xi     CMD(eCmd);
3549*53ee8cc1Swenshuai.xi 
3550*53ee8cc1Swenshuai.xi     switch(eCmd)
3551*53ee8cc1Swenshuai.xi     {
3552*53ee8cc1Swenshuai.xi         case E_POWER_SUSPEND:
3553*53ee8cc1Swenshuai.xi             GFX_DEBUG_MSG(GFX_INFO(" [%s][%d] E_POWER_SUSPEND Start\n",__FUNCTION__,__LINE__));
3554*53ee8cc1Swenshuai.xi             GE_Get_Resource(g_apiGFXLocal.g_pGEContext,FALSE);
3555*53ee8cc1Swenshuai.xi             MDrv_GE_WaitIdle(g_apiGFXLocal.g_pGEContext);
3556*53ee8cc1Swenshuai.xi             MDrv_GE_SetPowerState(g_apiGFXLocal.g_pGEContext ,pGFXPowerStateArg->eGFX_PowerStateType, pModule);
3557*53ee8cc1Swenshuai.xi             GFX_DEBUG_MSG(GFX_INFO(" [%s][%d] E_POWER_SUSPEND End\n",__FUNCTION__,__LINE__));
3558*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3559*53ee8cc1Swenshuai.xi             break;
3560*53ee8cc1Swenshuai.xi 
3561*53ee8cc1Swenshuai.xi         case E_POWER_RESUME:
3562*53ee8cc1Swenshuai.xi             GFX_DEBUG_MSG(GFX_INFO(" [%s][%d] E_POWER_RESUME Start\n",__FUNCTION__,__LINE__));
3563*53ee8cc1Swenshuai.xi             MDrv_GE_SetClock(g_apiGFXLocal.g_pGEContext, TRUE);
3564*53ee8cc1Swenshuai.xi             UtopiaInstanceGetModule(pInstance, &pModule);
3565*53ee8cc1Swenshuai.xi             // HW Init
3566*53ee8cc1Swenshuai.xi             MDrv_GE_SetPowerState(g_apiGFXLocal.g_pGEContext ,pGFXPowerStateArg->eGFX_PowerStateType, pModule);
3567*53ee8cc1Swenshuai.xi             // Default setting : To avoid GE issues commands too frequently when VC in enabled
3568*53ee8cc1Swenshuai.xi             MDrv_GE_SetVCmd_W_Thread(g_apiGFXLocal.g_pGEContext, 0x4);
3569*53ee8cc1Swenshuai.xi             MDrv_GE_SetVCmd_R_Thread(g_apiGFXLocal.g_pGEContext, 0x4);
3570*53ee8cc1Swenshuai.xi             MDrv_GE_SetOnePixelMode(g_apiGFXLocal.g_pGEContext,!(g_apiGFXLocal.pGeChipProperty->bFourPixelModeStable));
3571*53ee8cc1Swenshuai.xi #if(defined(CrossThreadReleaseMutex) && (GE_LOCK_SUPPORT))  //for GE AN7.0
3572*53ee8cc1Swenshuai.xi             GE_CTX_LOCAL *pGECtxLocal = (GE_CTX_LOCAL*)g_apiGFXLocal.g_pGEContext;
3573*53ee8cc1Swenshuai.xi             pGECtxLocal->s32GELock=MsOS_GetOSThreadID();
3574*53ee8cc1Swenshuai.xi             MsOS_EnableCrossThreadReleaseMutex(pGECtxLocal->s32GEMutex,TRUE);
3575*53ee8cc1Swenshuai.xi             GE_Free_Resource(g_apiGFXLocal.g_pGEContext,FALSE);
3576*53ee8cc1Swenshuai.xi             MsOS_EnableCrossThreadReleaseMutex(pGECtxLocal->s32GEMutex,FALSE);
3577*53ee8cc1Swenshuai.xi #else
3578*53ee8cc1Swenshuai.xi             GE_Free_Resource(g_apiGFXLocal.g_pGEContext,FALSE);
3579*53ee8cc1Swenshuai.xi #endif
3580*53ee8cc1Swenshuai.xi             GFX_DEBUG_MSG(GFX_INFO(" [%s][%d] E_POWER_RESUME End\n",__FUNCTION__,__LINE__));
3581*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3582*53ee8cc1Swenshuai.xi             break;
3583*53ee8cc1Swenshuai.xi 
3584*53ee8cc1Swenshuai.xi         default:
3585*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3586*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3587*53ee8cc1Swenshuai.xi             break;
3588*53ee8cc1Swenshuai.xi     }
3589*53ee8cc1Swenshuai.xi     return u32Ret;
3590*53ee8cc1Swenshuai.xi }
3591*53ee8cc1Swenshuai.xi 
Ioctl_GFX_CB(void * pInstance,void * pArgs)3592*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_CB(void* pInstance, void* pArgs)
3593*53ee8cc1Swenshuai.xi {
3594*53ee8cc1Swenshuai.xi     EN_GFX_CB_MODE           eCmd;
3595*53ee8cc1Swenshuai.xi     GFX_CB_ARGS*            pGFXCBArg               =NULL;
3596*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret                  =GFX_FAIL;
3597*53ee8cc1Swenshuai.xi 
3598*53ee8cc1Swenshuai.xi     APICheckU02();
3599*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3600*53ee8cc1Swenshuai.xi     pGFXCBArg = (GFX_CB_ARGS*)pArgs;
3601*53ee8cc1Swenshuai.xi     eCmd = pGFXCBArg->eGFX_CBType;
3602*53ee8cc1Swenshuai.xi     CMD(eCmd);
3603*53ee8cc1Swenshuai.xi 
3604*53ee8cc1Swenshuai.xi     switch(eCmd)
3605*53ee8cc1Swenshuai.xi     {
3606*53ee8cc1Swenshuai.xi         case E_CB_GETFONT:
3607*53ee8cc1Swenshuai.xi             g_apiGFXLocal.fpGetFont = pGFXCBArg->pGFX_CBInfo;
3608*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3609*53ee8cc1Swenshuai.xi             break;
3610*53ee8cc1Swenshuai.xi 
3611*53ee8cc1Swenshuai.xi         case E_CB_GETBMP:
3612*53ee8cc1Swenshuai.xi             g_apiGFXLocal.fpGetBMP = pGFXCBArg->pGFX_CBInfo;
3613*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3614*53ee8cc1Swenshuai.xi             break;
3615*53ee8cc1Swenshuai.xi 
3616*53ee8cc1Swenshuai.xi         default:
3617*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3618*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3619*53ee8cc1Swenshuai.xi             break;
3620*53ee8cc1Swenshuai.xi     }
3621*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), eCmd);
3622*53ee8cc1Swenshuai.xi }
3623*53ee8cc1Swenshuai.xi #endif
3624*53ee8cc1Swenshuai.xi 
Ioctl_GFX_MISC(void * pInstance,void * pArgs)3625*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_MISC(void* pInstance, void* pArgs)
3626*53ee8cc1Swenshuai.xi {
3627*53ee8cc1Swenshuai.xi     EN_GFX_MISC_MODE        eCmd;
3628*53ee8cc1Swenshuai.xi     GFX_MISC_ARGS*          pGFXMISCArg             =NULL;
3629*53ee8cc1Swenshuai.xi     GFX_ClearFrameBuffer*   pGFXClearFrame          =NULL;
3630*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3631*53ee8cc1Swenshuai.xi     GFX_SetLinePattern*     pGFXSetLinePattern      =NULL;
3632*53ee8cc1Swenshuai.xi     GFX_SetStrBltSckType*   pStrBltSckType          =NULL;
3633*53ee8cc1Swenshuai.xi     MS_U32*                 pLevel                  =NULL;
3634*53ee8cc1Swenshuai.xi     MS_BOOL*                pIsHK                   =NULL;
3635*53ee8cc1Swenshuai.xi     MS_BOOL*                pbPatch                 =NULL;
3636*53ee8cc1Swenshuai.xi     MS_U8*                  pALB1555                =NULL;
3637*53ee8cc1Swenshuai.xi #endif
3638*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret                  =GFX_FAIL;
3639*53ee8cc1Swenshuai.xi 
3640*53ee8cc1Swenshuai.xi     APICheckU02();
3641*53ee8cc1Swenshuai.xi 
3642*53ee8cc1Swenshuai.xi     pGFXMISCArg = (GFX_MISC_ARGS*)pArgs;
3643*53ee8cc1Swenshuai.xi     eCmd = pGFXMISCArg->eGFX_MISCType;
3644*53ee8cc1Swenshuai.xi     CMD(eCmd);
3645*53ee8cc1Swenshuai.xi     if(eCmd == E_MISC_EXIT)
3646*53ee8cc1Swenshuai.xi     {
3647*53ee8cc1Swenshuai.xi         MDrv_GE_Exit(pInstance);
3648*53ee8cc1Swenshuai.xi         return GFX_SUCCESS;
3649*53ee8cc1Swenshuai.xi     }
3650*53ee8cc1Swenshuai.xi 
3651*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3652*53ee8cc1Swenshuai.xi     switch(eCmd)
3653*53ee8cc1Swenshuai.xi     {
3654*53ee8cc1Swenshuai.xi         case E_MISC_CLEAR_FRAME_BY_WORLD:
3655*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(GFX_ClearFrameBuffer),eCmd);
3656*53ee8cc1Swenshuai.xi             pGFXClearFrame = (GFX_ClearFrameBuffer*)pGFXMISCArg->pGFX_Info;
3657*53ee8cc1Swenshuai.xi             MApi_GFX_ClearFrameBufferByWord_U02(pInstance,pGFXClearFrame->StrAddr,pGFXClearFrame->length,pGFXClearFrame->ClearValue);
3658*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3659*53ee8cc1Swenshuai.xi             break;
3660*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3661*53ee8cc1Swenshuai.xi         case E_MISC_CLEAR_FRAME:
3662*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(GFX_ClearFrameBuffer),eCmd);
3663*53ee8cc1Swenshuai.xi             pGFXClearFrame = (GFX_ClearFrameBuffer*)pGFXMISCArg->pGFX_Info;
3664*53ee8cc1Swenshuai.xi             MApi_GFX_ClearFrameBuffer_U02(pInstance,pGFXClearFrame->StrAddr,pGFXClearFrame->length,pGFXClearFrame->ClearValue);
3665*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3666*53ee8cc1Swenshuai.xi             break;
3667*53ee8cc1Swenshuai.xi         case E_MISC_LINE_PATTERN_RESET:
3668*53ee8cc1Swenshuai.xi             MDrv_GE_ResetLinePattern(g_apiGFXLocal.g_pGEContext);
3669*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3670*53ee8cc1Swenshuai.xi             break;
3671*53ee8cc1Swenshuai.xi         case E_MISC_LINE_PATTERN:
3672*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(GFX_SetLinePattern),eCmd);
3673*53ee8cc1Swenshuai.xi             pGFXSetLinePattern = (GFX_SetLinePattern*)pGFXMISCArg->pGFX_Info;
3674*53ee8cc1Swenshuai.xi             MApi_GFX_Set_Line_Pattern_U02(pInstance,pGFXSetLinePattern->enable,pGFXSetLinePattern->linePattern,pGFXSetLinePattern->repeatFactor);
3675*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3676*53ee8cc1Swenshuai.xi             break;
3677*53ee8cc1Swenshuai.xi #endif
3678*53ee8cc1Swenshuai.xi         case E_MISC_BEGINE_DRAW:
3679*53ee8cc1Swenshuai.xi             MApi_GFX_BeginDraw_U02(pInstance);
3680*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3681*53ee8cc1Swenshuai.xi             break;
3682*53ee8cc1Swenshuai.xi         case E_MISC_END_DRAW:
3683*53ee8cc1Swenshuai.xi             MApi_GFX_EndDraw_U02(pInstance);
3684*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3685*53ee8cc1Swenshuai.xi             break;
3686*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3687*53ee8cc1Swenshuai.xi         case E_MISC_DEBUG_LEVEL:
3688*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(MS_U32),eCmd);
3689*53ee8cc1Swenshuai.xi             pLevel = (MS_U32*)pGFXMISCArg->pGFX_Info;
3690*53ee8cc1Swenshuai.xi             MApi_GFX_SetDbgLevel_U02(pInstance,*pLevel);
3691*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3692*53ee8cc1Swenshuai.xi             break;
3693*53ee8cc1Swenshuai.xi         case E_MISC_SET_HK:
3694*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(MS_BOOL),eCmd);
3695*53ee8cc1Swenshuai.xi             pIsHK = (MS_BOOL*)pGFXMISCArg->pGFX_Info;
3696*53ee8cc1Swenshuai.xi             MApi_GFX_SetHK_U02(pInstance,*pIsHK);
3697*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3698*53ee8cc1Swenshuai.xi             break;
3699*53ee8cc1Swenshuai.xi         case E_MISC_GET_HK:
3700*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(MS_BOOL),eCmd);
3701*53ee8cc1Swenshuai.xi             pIsHK = (MS_BOOL*)pGFXMISCArg->pGFX_Info;
3702*53ee8cc1Swenshuai.xi             MApi_GFX_GetHK_U02(pInstance,pIsHK);
3703*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3704*53ee8cc1Swenshuai.xi             break;
3705*53ee8cc1Swenshuai.xi         case E_MISC_PATCH_MODE:
3706*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(MS_BOOL),eCmd);
3707*53ee8cc1Swenshuai.xi             pbPatch = (MS_BOOL*)pGFXMISCArg->pGFX_Info;
3708*53ee8cc1Swenshuai.xi             g_apiGFXLocal._bPatchMode = *pbPatch;
3709*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3710*53ee8cc1Swenshuai.xi             break;
3711*53ee8cc1Swenshuai.xi         case E_MISC_STR_BLT_SCK_TYPE:
3712*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(GFX_SetStrBltSckType),eCmd);
3713*53ee8cc1Swenshuai.xi             pStrBltSckType = (GFX_SetStrBltSckType*)pGFXMISCArg->pGFX_Info;
3714*53ee8cc1Swenshuai.xi             MApi_GFX_SetStrBltSckType_U02(pInstance,pStrBltSckType->type, &(pStrBltSckType->color));
3715*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3716*53ee8cc1Swenshuai.xi             break;
3717*53ee8cc1Swenshuai.xi         case E_MISC_SET_ALB_1555:
3718*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(MS_U8),eCmd);
3719*53ee8cc1Swenshuai.xi             pALB1555 = (MS_U8*)pGFXMISCArg->pGFX_Info;
3720*53ee8cc1Swenshuai.xi             MApi_GFX_SetAlpha_ARGB1555_U02(pInstance,*pALB1555);
3721*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3722*53ee8cc1Swenshuai.xi             break;
3723*53ee8cc1Swenshuai.xi         case E_MISC_GET_ALB_1555:
3724*53ee8cc1Swenshuai.xi             CheckSize(pGFXMISCArg->u32Size, sizeof(MS_U8),eCmd);
3725*53ee8cc1Swenshuai.xi             pALB1555 = (MS_U8*)pGFXMISCArg->pGFX_Info;
3726*53ee8cc1Swenshuai.xi             MApi_GFX_GetAlpha_ARGB1555_U02(pInstance,pALB1555);
3727*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3728*53ee8cc1Swenshuai.xi             break;
3729*53ee8cc1Swenshuai.xi #endif
3730*53ee8cc1Swenshuai.xi         default:
3731*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, eCmd);
3732*53ee8cc1Swenshuai.xi             u32Ret = GFX_FAIL;
3733*53ee8cc1Swenshuai.xi             break;
3734*53ee8cc1Swenshuai.xi     }
3735*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), eCmd);
3736*53ee8cc1Swenshuai.xi 
3737*53ee8cc1Swenshuai.xi }
3738*53ee8cc1Swenshuai.xi 
3739*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
Ioctl_GFX_TLB(void * pInstance,void * pArgs)3740*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_TLB(void* pInstance, void* pArgs)
3741*53ee8cc1Swenshuai.xi {
3742*53ee8cc1Swenshuai.xi     GFX_TLB_ARGS*           pGFXTLB             =NULL;
3743*53ee8cc1Swenshuai.xi     EN_GFX_TLB_CMD          en_cmd;
3744*53ee8cc1Swenshuai.xi     GFX_Result              u32Ret              =GFX_FAIL;
3745*53ee8cc1Swenshuai.xi     GFX_SetTLB_Addr*        pGFX_SetTLB_Addr    =NULL;
3746*53ee8cc1Swenshuai.xi     MS_BOOL*                tlb_flush           =FALSE;
3747*53ee8cc1Swenshuai.xi     MS_U16*                 u16tag              =0;
3748*53ee8cc1Swenshuai.xi 
3749*53ee8cc1Swenshuai.xi     APICheckU02();
3750*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3751*53ee8cc1Swenshuai.xi 
3752*53ee8cc1Swenshuai.xi     pGFXTLB = (GFX_TLB_ARGS*)pArgs;
3753*53ee8cc1Swenshuai.xi     en_cmd = pGFXTLB->en_cmd;
3754*53ee8cc1Swenshuai.xi     CMD(en_cmd);
3755*53ee8cc1Swenshuai.xi 
3756*53ee8cc1Swenshuai.xi     switch(en_cmd)
3757*53ee8cc1Swenshuai.xi     {
3758*53ee8cc1Swenshuai.xi         case E_GFX_TLB_SET_MODE:
3759*53ee8cc1Swenshuai.xi             CheckSize(pGFXTLB->u32Size, sizeof(GFX_TLB_ARGS), 0);
3760*53ee8cc1Swenshuai.xi             g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode = (GE_TLB_Mode)pGFXTLB->TLB_mode;
3761*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3762*53ee8cc1Swenshuai.xi             break;
3763*53ee8cc1Swenshuai.xi 
3764*53ee8cc1Swenshuai.xi         case E_GFX_TLB_SET_ADDR:
3765*53ee8cc1Swenshuai.xi             CheckSize(pGFXTLB->u32Size, sizeof(GFX_SetTLB_Addr), 0);
3766*53ee8cc1Swenshuai.xi             pGFX_SetTLB_Addr = (GFX_SetTLB_Addr*)pGFXTLB->psetting;
3767*53ee8cc1Swenshuai.xi             g_apiGFXLocal.g_pGEContext->pBufInfo.tlbsrcaddr = pGFX_SetTLB_Addr->tlb_src_addr;
3768*53ee8cc1Swenshuai.xi             g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr = pGFX_SetTLB_Addr->tlb_dst_addr;
3769*53ee8cc1Swenshuai.xi             u32Ret = GFX_SUCCESS;
3770*53ee8cc1Swenshuai.xi             break;
3771*53ee8cc1Swenshuai.xi 
3772*53ee8cc1Swenshuai.xi         case E_GFX_TLB_FLUSH_TABLE:
3773*53ee8cc1Swenshuai.xi             CheckSize(pGFXTLB->u32Size, sizeof(MS_BOOL), 0);
3774*53ee8cc1Swenshuai.xi             tlb_flush = (MS_BOOL*)pGFXTLB->psetting;
3775*53ee8cc1Swenshuai.xi             g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable= *tlb_flush;
3776*53ee8cc1Swenshuai.xi             break;
3777*53ee8cc1Swenshuai.xi 
3778*53ee8cc1Swenshuai.xi         case E_GFX_TLB_TAG:
3779*53ee8cc1Swenshuai.xi             CheckSize(pGFXTLB->u32Size, sizeof(MS_U16), 0);
3780*53ee8cc1Swenshuai.xi             u16tag = (MS_U16*)pGFXTLB->psetting;
3781*53ee8cc1Swenshuai.xi             MDrv_GE_SetTLBTag(g_apiGFXLocal.g_pGEContext,*u16tag);
3782*53ee8cc1Swenshuai.xi             break;
3783*53ee8cc1Swenshuai.xi 
3784*53ee8cc1Swenshuai.xi         default:
3785*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] Error Cmd=%d \n",__FUNCTION__,__LINE__, en_cmd);
3786*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_FAIL;
3787*53ee8cc1Swenshuai.xi             break;
3788*53ee8cc1Swenshuai.xi     }
3789*53ee8cc1Swenshuai.xi 
3790*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
3791*53ee8cc1Swenshuai.xi }
Ioctl_GFX_DrawOval(void * pInstance,void * pArgs)3792*53ee8cc1Swenshuai.xi static MS_S32 Ioctl_GFX_DrawOval(void* pInstance, void* pArgs)
3793*53ee8cc1Swenshuai.xi {
3794*53ee8cc1Swenshuai.xi     GFX_DRAW_OVAL_ARGS*         pGFXOvalDraw        =NULL;
3795*53ee8cc1Swenshuai.xi     GFX_Set_DrawOvalInfo*       pGFXOvalInfo        =NULL;
3796*53ee8cc1Swenshuai.xi     GFX_Result                  u32Ret              =GFX_FAIL;
3797*53ee8cc1Swenshuai.xi 
3798*53ee8cc1Swenshuai.xi     APICheckU02();
3799*53ee8cc1Swenshuai.xi     API_GE_ENTRY(g_apiGFXLocal.g_pGEContext);
3800*53ee8cc1Swenshuai.xi 
3801*53ee8cc1Swenshuai.xi     pGFXOvalDraw = (GFX_DRAW_OVAL_ARGS*)pArgs;
3802*53ee8cc1Swenshuai.xi     CheckSize(pGFXOvalDraw->u32Size, sizeof(GFX_Set_DrawOvalInfo), 0);
3803*53ee8cc1Swenshuai.xi     pGFXOvalInfo = (GFX_Set_DrawOvalInfo*)pGFXOvalDraw->psetting;
3804*53ee8cc1Swenshuai.xi 
3805*53ee8cc1Swenshuai.xi     MDrv_GE_SetTLBMode(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode);
3806*53ee8cc1Swenshuai.xi 
3807*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3808*53ee8cc1Swenshuai.xi     {
3809*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,TRUE);
3810*53ee8cc1Swenshuai.xi     }
3811*53ee8cc1Swenshuai.xi 
3812*53ee8cc1Swenshuai.xi     if((g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_DST)||(g_apiGFXLocal.g_pGEContext->pBufInfo.tlbmode==E_GE_TLB_SRC_DST))
3813*53ee8cc1Swenshuai.xi     {
3814*53ee8cc1Swenshuai.xi         MDrv_GE_SetTLBDstBaseAddr(g_apiGFXLocal.g_pGEContext, g_apiGFXLocal.g_pGEContext->pBufInfo.tlbdstaddr);
3815*53ee8cc1Swenshuai.xi     }
3816*53ee8cc1Swenshuai.xi 
3817*53ee8cc1Swenshuai.xi     GFX_SetFireInfo(pInstance,pGFXOvalInfo->pFireInfo);
3818*53ee8cc1Swenshuai.xi 
3819*53ee8cc1Swenshuai.xi     u32Ret = MApi_GFX_DrawOval_U02(pInstance, pGFXOvalInfo->pDrawOvalInfo);
3820*53ee8cc1Swenshuai.xi 
3821*53ee8cc1Swenshuai.xi     if(g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable)
3822*53ee8cc1Swenshuai.xi     {
3823*53ee8cc1Swenshuai.xi         MDrv_GE_TLBFlushTable(g_apiGFXLocal.g_pGEContext,FALSE);
3824*53ee8cc1Swenshuai.xi         g_apiGFXLocal.g_pGEContext->pBufInfo.bEnflushtlbtable=FALSE;
3825*53ee8cc1Swenshuai.xi     }
3826*53ee8cc1Swenshuai.xi     API_GE_RETURN(g_apiGFXLocal.g_pGEContext, MapRet(u32Ret), 0);
3827*53ee8cc1Swenshuai.xi }
3828*53ee8cc1Swenshuai.xi #endif
3829*53ee8cc1Swenshuai.xi 
3830*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
GFXStr(MS_U32 u32PowerState,void * pModule)3831*53ee8cc1Swenshuai.xi MS_U32 GFXStr(MS_U32 u32PowerState, void* pModule)
3832*53ee8cc1Swenshuai.xi {
3833*53ee8cc1Swenshuai.xi     MS_U32 u32Return=UTOPIA_STATUS_FAIL;
3834*53ee8cc1Swenshuai.xi 
3835*53ee8cc1Swenshuai.xi     switch(u32PowerState)
3836*53ee8cc1Swenshuai.xi     {
3837*53ee8cc1Swenshuai.xi         case E_POWER_SUSPEND:
3838*53ee8cc1Swenshuai.xi             GFX_INFO("[%s][%d] Kernel STR Suspend Start!!!!!\n",__FUNCTION__,__LINE__);
3839*53ee8cc1Swenshuai.xi             MDrv_GE_STR_SetPowerState((EN_POWER_MODE)u32PowerState, pModule);
3840*53ee8cc1Swenshuai.xi             GFX_INFO("[%s][%d] Kernel STR Suspend End!!!!!\n",__FUNCTION__,__LINE__);
3841*53ee8cc1Swenshuai.xi             u32Return=UTOPIA_STATUS_SUCCESS;
3842*53ee8cc1Swenshuai.xi             break;
3843*53ee8cc1Swenshuai.xi         case E_POWER_RESUME:
3844*53ee8cc1Swenshuai.xi             GFX_INFO("[%s][%d] Kernel STR Resume Start!!!!!\n",__FUNCTION__,__LINE__);
3845*53ee8cc1Swenshuai.xi             MDrv_GE_STR_SetPowerState((EN_POWER_MODE)u32PowerState, pModule);
3846*53ee8cc1Swenshuai.xi             GFX_INFO("[%s][%d] Kernel STR Resume End!!!!!\n",__FUNCTION__,__LINE__);
3847*53ee8cc1Swenshuai.xi             u32Return=UTOPIA_STATUS_SUCCESS;
3848*53ee8cc1Swenshuai.xi             break;
3849*53ee8cc1Swenshuai.xi         default:
3850*53ee8cc1Swenshuai.xi             GFX_ERR("[%s][%d] PowerState:%tx not Implement now!!!\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32PowerState);
3851*53ee8cc1Swenshuai.xi             break;
3852*53ee8cc1Swenshuai.xi     }
3853*53ee8cc1Swenshuai.xi     return u32Return;
3854*53ee8cc1Swenshuai.xi }
3855*53ee8cc1Swenshuai.xi #endif
3856*53ee8cc1Swenshuai.xi 
3857*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
GFXMdbIoctl(MS_U32 u32Cmd,const void * const pArgs)3858*53ee8cc1Swenshuai.xi MS_U32 GFXMdbIoctl(MS_U32 u32Cmd, const void* const pArgs)
3859*53ee8cc1Swenshuai.xi {
3860*53ee8cc1Swenshuai.xi     void *pInstance = NULL;
3861*53ee8cc1Swenshuai.xi     pInstance = UtopiaModuleGetLocalInstantList(MODULE_GFX, pInstance);
3862*53ee8cc1Swenshuai.xi     APICheckU02();
3863*53ee8cc1Swenshuai.xi 
3864*53ee8cc1Swenshuai.xi     MDBCMD_CMDLINE_PARAMETER *paraCmdLine;
3865*53ee8cc1Swenshuai.xi     MDBCMD_GETINFO_PARAMETER *paraGetInfo;
3866*53ee8cc1Swenshuai.xi     switch(u32Cmd)
3867*53ee8cc1Swenshuai.xi     {
3868*53ee8cc1Swenshuai.xi         case MDBCMD_CMDLINE:
3869*53ee8cc1Swenshuai.xi             paraCmdLine = (MDBCMD_CMDLINE_PARAMETER *)pArgs;
3870*53ee8cc1Swenshuai.xi             break;
3871*53ee8cc1Swenshuai.xi         case MDBCMD_GETINFO:
3872*53ee8cc1Swenshuai.xi             paraGetInfo = (MDBCMD_GETINFO_PARAMETER *)pArgs;
3873*53ee8cc1Swenshuai.xi             MDrv_GE_GetGFXMdbInfo(g_apiGFXLocal.g_pGEContext,paraGetInfo->u64ReqHdl);
3874*53ee8cc1Swenshuai.xi             break;
3875*53ee8cc1Swenshuai.xi         default:
3876*53ee8cc1Swenshuai.xi             break;
3877*53ee8cc1Swenshuai.xi     }
3878*53ee8cc1Swenshuai.xi     return 0;
3879*53ee8cc1Swenshuai.xi }
3880*53ee8cc1Swenshuai.xi #endif
3881*53ee8cc1Swenshuai.xi 
GFXRegisterToUtopia(FUtopiaOpen ModuleType)3882*53ee8cc1Swenshuai.xi void GFXRegisterToUtopia(FUtopiaOpen ModuleType)
3883*53ee8cc1Swenshuai.xi {
3884*53ee8cc1Swenshuai.xi     // 1. deal with module
3885*53ee8cc1Swenshuai.xi     void* pUtopiaModule = NULL;
3886*53ee8cc1Swenshuai.xi     UtopiaModuleCreate(MODULE_GFX, 8, &pUtopiaModule);
3887*53ee8cc1Swenshuai.xi     UtopiaModuleRegister(pUtopiaModule);
3888*53ee8cc1Swenshuai.xi     UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)GFXOpen, (FUtopiaClose)GFXClose, (FUtopiaIOctl)GFXIoctl);
3889*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
3890*53ee8cc1Swenshuai.xi     UtopiaModuleRegisterMdbNode("gfx", (FUtopiaMdbIoctl)GFXMdbIoctl);
3891*53ee8cc1Swenshuai.xi #endif
3892*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
3893*53ee8cc1Swenshuai.xi     UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule, (FUtopiaSTR)GFXStr);
3894*53ee8cc1Swenshuai.xi     UtopiaModuleSetSTRPrivate(pUtopiaModule, sizeof(GE_STR_SAVE_AREA));
3895*53ee8cc1Swenshuai.xi #endif
3896*53ee8cc1Swenshuai.xi 
3897*53ee8cc1Swenshuai.xi     // 2. deal with resource
3898*53ee8cc1Swenshuai.xi     void* psResource = NULL;
3899*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceStart(pUtopiaModule, E_GE_POOL_ID_INTERNAL_REGISTER);
3900*53ee8cc1Swenshuai.xi     UtopiaResourceCreate("ge0", sizeof(GFX_Resource_PRIVATE), &psResource);
3901*53ee8cc1Swenshuai.xi     UtopiaResourceRegister(pUtopiaModule, psResource, E_GE_POOL_ID_INTERNAL_REGISTER);
3902*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceEnd(pUtopiaModule, E_GE_POOL_ID_INTERNAL_REGISTER);
3903*53ee8cc1Swenshuai.xi }
3904*53ee8cc1Swenshuai.xi 
GFXOpen(void ** ppInstance,const void * const pAttribute)3905*53ee8cc1Swenshuai.xi MS_U32 GFXOpen(void** ppInstance, const void* const pAttribute)
3906*53ee8cc1Swenshuai.xi {
3907*53ee8cc1Swenshuai.xi     UtopiaInstanceCreate(sizeof(GFX_INSTANT_PRIVATE), ppInstance);
3908*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
3909*53ee8cc1Swenshuai.xi }
3910*53ee8cc1Swenshuai.xi 
GFXIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)3911*53ee8cc1Swenshuai.xi MS_U32 GFXIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
3912*53ee8cc1Swenshuai.xi {
3913*53ee8cc1Swenshuai.xi     if(pInstance == NULL)
3914*53ee8cc1Swenshuai.xi     {
3915*53ee8cc1Swenshuai.xi         GFX_ERR("[%s:%s:%d]GFXIoctl's pInstance =NULL\n",__FILE__,__FUNCTION__,__LINE__);
3916*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_ERR_NOT_AVAIL;
3917*53ee8cc1Swenshuai.xi     }
3918*53ee8cc1Swenshuai.xi 
3919*53ee8cc1Swenshuai.xi     switch(u32Cmd)
3920*53ee8cc1Swenshuai.xi     {
3921*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_INIT:
3922*53ee8cc1Swenshuai.xi             Ioctl_GFX_Init(pInstance, pArgs);
3923*53ee8cc1Swenshuai.xi             break;
3924*53ee8cc1Swenshuai.xi 
3925*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3926*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_GET_INFO:
3927*53ee8cc1Swenshuai.xi             Ioctl_GFX_GetInfo(pInstance, pArgs);
3928*53ee8cc1Swenshuai.xi             break;
3929*53ee8cc1Swenshuai.xi 
3930*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_GET_CAPS:
3931*53ee8cc1Swenshuai.xi             Ioctl_GFX_GetCaps(pInstance, pArgs);
3932*53ee8cc1Swenshuai.xi             break;
3933*53ee8cc1Swenshuai.xi 
3934*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_LINEDRAW:
3935*53ee8cc1Swenshuai.xi             Ioctl_GFX_LineDraw(pInstance, pArgs);
3936*53ee8cc1Swenshuai.xi             break;
3937*53ee8cc1Swenshuai.xi 
3938*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_RECTFILL:
3939*53ee8cc1Swenshuai.xi             Ioctl_GFX_RectFill(pInstance, pArgs);
3940*53ee8cc1Swenshuai.xi             break;
3941*53ee8cc1Swenshuai.xi 
3942*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_TRIFILL:
3943*53ee8cc1Swenshuai.xi             Ioctl_GFX_TriFill(pInstance, pArgs);
3944*53ee8cc1Swenshuai.xi             break;
3945*53ee8cc1Swenshuai.xi 
3946*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_SPANFILL:
3947*53ee8cc1Swenshuai.xi             Ioctl_GFX_SpanFill(pInstance, pArgs);
3948*53ee8cc1Swenshuai.xi             break;
3949*53ee8cc1Swenshuai.xi 
3950*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_BITBLT:
3951*53ee8cc1Swenshuai.xi             Ioctl_GFX_BitBlt(pInstance, pArgs);
3952*53ee8cc1Swenshuai.xi             break;
3953*53ee8cc1Swenshuai.xi 
3954*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_TWOSRCBITBLT:
3955*53ee8cc1Swenshuai.xi             Ioctl_GFX_TwoSrcBitBlt(pInstance, pArgs);
3956*53ee8cc1Swenshuai.xi             break;
3957*53ee8cc1Swenshuai.xi 
3958*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_SET_ABL:
3959*53ee8cc1Swenshuai.xi             Ioctl_GFX_SetABL(pInstance, pArgs);
3960*53ee8cc1Swenshuai.xi             break;
3961*53ee8cc1Swenshuai.xi #endif
3962*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_SET_CONFIG:
3963*53ee8cc1Swenshuai.xi             if (GFX_FAIL == Ioctl_GFX_SetConfig(pInstance, pArgs))
3964*53ee8cc1Swenshuai.xi             {
3965*53ee8cc1Swenshuai.xi                 return UTOPIA_STATUS_FAIL;
3966*53ee8cc1Swenshuai.xi             }
3967*53ee8cc1Swenshuai.xi             break;
3968*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_GET_CONFIG:
3969*53ee8cc1Swenshuai.xi             if(GFX_FAIL==Ioctl_GFX_GetConfig(pInstance, pArgs))
3970*53ee8cc1Swenshuai.xi             {
3971*53ee8cc1Swenshuai.xi                 return UTOPIA_STATUS_FAIL;
3972*53ee8cc1Swenshuai.xi             }
3973*53ee8cc1Swenshuai.xi             break;
3974*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3975*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_BITMAP:
3976*53ee8cc1Swenshuai.xi             Ioctl_GFX_Bitmap(pInstance, pArgs);
3977*53ee8cc1Swenshuai.xi             break;
3978*53ee8cc1Swenshuai.xi 
3979*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_FONT:
3980*53ee8cc1Swenshuai.xi             Ioctl_GFX_Font(pInstance, pArgs);
3981*53ee8cc1Swenshuai.xi             break;
3982*53ee8cc1Swenshuai.xi 
3983*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_POWERSTATE:
3984*53ee8cc1Swenshuai.xi             Ioctl_GFX_PowerState(pInstance, pArgs);
3985*53ee8cc1Swenshuai.xi             break;
3986*53ee8cc1Swenshuai.xi 
3987*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_CB:
3988*53ee8cc1Swenshuai.xi             Ioctl_GFX_CB(pInstance, pArgs);
3989*53ee8cc1Swenshuai.xi             break;
3990*53ee8cc1Swenshuai.xi #endif
3991*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_MISC:
3992*53ee8cc1Swenshuai.xi             Ioctl_GFX_MISC(pInstance, pArgs);
3993*53ee8cc1Swenshuai.xi             break;
3994*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_OPTEE
3995*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_TLB:
3996*53ee8cc1Swenshuai.xi             Ioctl_GFX_TLB(pInstance, pArgs);
3997*53ee8cc1Swenshuai.xi             break;
3998*53ee8cc1Swenshuai.xi         case MAPI_CMD_GFX_DRAW_OVAL:
3999*53ee8cc1Swenshuai.xi             Ioctl_GFX_DrawOval(pInstance, pArgs);
4000*53ee8cc1Swenshuai.xi             break;
4001*53ee8cc1Swenshuai.xi #endif
4002*53ee8cc1Swenshuai.xi         default:
4003*53ee8cc1Swenshuai.xi             GFX_DBUG("[%s][%d]\n",__FUNCTION__,__LINE__);
4004*53ee8cc1Swenshuai.xi             break;
4005*53ee8cc1Swenshuai.xi     }
4006*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
4007*53ee8cc1Swenshuai.xi }
4008*53ee8cc1Swenshuai.xi 
GFXClose(void * pInstance)4009*53ee8cc1Swenshuai.xi MS_U32 GFXClose(void* pInstance)
4010*53ee8cc1Swenshuai.xi {
4011*53ee8cc1Swenshuai.xi     GFX_INFO("\n[GFX INFO] GFX close");
4012*53ee8cc1Swenshuai.xi     UtopiaInstanceDelete(pInstance);
4013*53ee8cc1Swenshuai.xi     return TRUE;
4014*53ee8cc1Swenshuai.xi }
4015*53ee8cc1Swenshuai.xi 
4016*53ee8cc1Swenshuai.xi 
4017*53ee8cc1Swenshuai.xi 
4018