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