1*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2*53ee8cc1Swenshuai.xi // Include Files
3*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
4*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
5*53ee8cc1Swenshuai.xi #include <stdio.h>
6*53ee8cc1Swenshuai.xi #include <string.h>
7*53ee8cc1Swenshuai.xi #include <sys/types.h>
8*53ee8cc1Swenshuai.xi #include <signal.h>
9*53ee8cc1Swenshuai.xi #include <errno.h>
10*53ee8cc1Swenshuai.xi #else
11*53ee8cc1Swenshuai.xi #include <linux/slab.h>
12*53ee8cc1Swenshuai.xi #endif
13*53ee8cc1Swenshuai.xi #include "utopia.h"
14*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
15*53ee8cc1Swenshuai.xi #include "util_symbol.h"
16*53ee8cc1Swenshuai.xi #include "MsTypes.h"
17*53ee8cc1Swenshuai.xi #include "MsOS.h"
18*53ee8cc1Swenshuai.xi #include "MsCommon.h"
19*53ee8cc1Swenshuai.xi #include "MsVersion.h"
20*53ee8cc1Swenshuai.xi #include "apiGOP.h"
21*53ee8cc1Swenshuai.xi #include "apiGOP_priv.h"
22*53ee8cc1Swenshuai.xi #include "drvGOP.h"
23*53ee8cc1Swenshuai.xi #include "drvGFLIP.h"
24*53ee8cc1Swenshuai.xi #include "drvGOP_priv.h"
25*53ee8cc1Swenshuai.xi #include "halGOP.h"
26*53ee8cc1Swenshuai.xi #include "halCHIP.h"
27*53ee8cc1Swenshuai.xi
28*53ee8cc1Swenshuai.xi enum
29*53ee8cc1Swenshuai.xi {
30*53ee8cc1Swenshuai.xi GOP_POOL_ID_GOP0=0
31*53ee8cc1Swenshuai.xi } eGOPPoolID;
32*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
33*53ee8cc1Swenshuai.xi // Local Compiler Options
34*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
35*53ee8cc1Swenshuai.xi #define DUMP_INFO 0
36*53ee8cc1Swenshuai.xi
37*53ee8cc1Swenshuai.xi #define FPGA_TEST 0UL
38*53ee8cc1Swenshuai.xi
39*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
40*53ee8cc1Swenshuai.xi // Local Defines
41*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
42*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
43*53ee8cc1Swenshuai.xi #define atoi(str) simple_strtoul(((str != NULL) ? str : ""), NULL, 0)
44*53ee8cc1Swenshuai.xi #endif
45*53ee8cc1Swenshuai.xi
46*53ee8cc1Swenshuai.xi #define GetMaxActiveGwinFalse 4UL
47*53ee8cc1Swenshuai.xi #define GetMaxActiveGwinFalse_op 5UL
48*53ee8cc1Swenshuai.xi #define GetMaxActiveGwinFalse_opened 6UL
49*53ee8cc1Swenshuai.xi #define GWIN_SDRAM_NULL 0x30UL
50*53ee8cc1Swenshuai.xi #define msWarning(c) do {} while (0)
51*53ee8cc1Swenshuai.xi #define XC_MAIN_WINDOW 0UL
52*53ee8cc1Swenshuai.xi
53*53ee8cc1Swenshuai.xi
54*53ee8cc1Swenshuai.xi // Define return values of check align
55*53ee8cc1Swenshuai.xi #define CHECKALIGN_SUCCESS 1UL
56*53ee8cc1Swenshuai.xi #define CHECKALIGN_FORMAT_FAIL 2UL
57*53ee8cc1Swenshuai.xi #define CHECKALIGN_PARA_FAIL 3UL
58*53ee8cc1Swenshuai.xi
59*53ee8cc1Swenshuai.xi //#define GWIN_SDRAM_PG_UNIT 0x00000010 // 16-byte page-unit for gwin_sdram
60*53ee8cc1Swenshuai.xi #define GWIN_SDRAM_PG_ALIGN(_x) ALIGN_32(_x)
61*53ee8cc1Swenshuai.xi #define IS_GWIN_SDRAM_ALIGN(_x) ((_x)== GWIN_SDRAM_PG_ALIGN(_x))
62*53ee8cc1Swenshuai.xi
63*53ee8cc1Swenshuai.xi static MS_BOOL bInitFWR = FALSE;
64*53ee8cc1Swenshuai.xi static MS_BOOL bInitBkFWR[SHARED_GOP_MAX_COUNT]={[0 ... (SHARED_GOP_MAX_COUNT-1)] = FALSE};
65*53ee8cc1Swenshuai.xi
66*53ee8cc1Swenshuai.xi static MS_BOOL bFirstInit = FALSE;
67*53ee8cc1Swenshuai.xi
68*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
69*53ee8cc1Swenshuai.xi #define g_pGOPCtxLocal psGOPInstPri->g_pGOPCtxLocal
70*53ee8cc1Swenshuai.xi #else
71*53ee8cc1Swenshuai.xi MS_GOP_CTX_LOCAL *g_pGOPCtxLocal = NULL;
72*53ee8cc1Swenshuai.xi #endif
73*53ee8cc1Swenshuai.xi static GOP_TYPE_DEF GOPTYPE;
74*53ee8cc1Swenshuai.xi
75*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
76*53ee8cc1Swenshuai.xi static MS_U8 _devGFLIPCnt =0;
77*53ee8cc1Swenshuai.xi #endif
78*53ee8cc1Swenshuai.xi
79*53ee8cc1Swenshuai.xi #include "ULog.h"
80*53ee8cc1Swenshuai.xi MS_U32 u32GOPDbgLevel_mapi;
81*53ee8cc1Swenshuai.xi
82*53ee8cc1Swenshuai.xi // Debug Logs, level form low(INFO) to high(FATAL, always show)
83*53ee8cc1Swenshuai.xi // Function information, ex function entry
84*53ee8cc1Swenshuai.xi #define GOP_M_INFO(x, args...) if(u32GOPDbgLevel_mapi >= E_GOP_Debug_Level_HIGH) { ULOGI("GOP mAPI", x, ##args); }
85*53ee8cc1Swenshuai.xi // Warning, illegal paramter but can be self fixed in functions
86*53ee8cc1Swenshuai.xi #define GOP_M_WARN(x, args...) if(u32GOPDbgLevel_mapi >= E_GOP_Debug_Level_HIGH) { ULOGW("GOP mAPI", x, ##args); }
87*53ee8cc1Swenshuai.xi // Need debug, illegal paramter.
88*53ee8cc1Swenshuai.xi #define GOP_M_DBUG(x, args...) if(u32GOPDbgLevel_mapi >= E_GOP_Debug_Level_MED) { ULOGD("GOP mAPI", x, ##args); }
89*53ee8cc1Swenshuai.xi // Error, function will be terminated but system not crash
90*53ee8cc1Swenshuai.xi #define GOP_M_ERR(x, args...) if(u32GOPDbgLevel_mapi >= E_GOP_Debug_Level_LOW) { ULOGE("GOP mAPI", x, ##args); }
91*53ee8cc1Swenshuai.xi // Critical, system crash. (ex. assert)
92*53ee8cc1Swenshuai.xi #define GOP_M_FATAL(x, args...) if(u32GOPDbgLevel_mapi >= E_GOP_Debug_Level_LOW) { ULOGF("GOP mAPI", x, ##args); }
93*53ee8cc1Swenshuai.xi
94*53ee8cc1Swenshuai.xi #define APIGOP_RetFailPri(FailType) \
95*53ee8cc1Swenshuai.xi do {\
96*53ee8cc1Swenshuai.xi switch ((E_GOP_API_Result)FailType)\
97*53ee8cc1Swenshuai.xi {\
98*53ee8cc1Swenshuai.xi case GOP_API_FAIL:\
99*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_FAIL");\
100*53ee8cc1Swenshuai.xi break;\
101*53ee8cc1Swenshuai.xi case GOP_API_NON_ALIGN_ADDRESS:\
102*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_NON_ALIGN_ADDRESS");\
103*53ee8cc1Swenshuai.xi break;\
104*53ee8cc1Swenshuai.xi case GOP_API_NON_ALIGN_PITCH:\
105*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_NON_ALIGN_PITCH");\
106*53ee8cc1Swenshuai.xi break;\
107*53ee8cc1Swenshuai.xi case GOP_API_DEPEND_NOAVAIL:\
108*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_DEPEND_NOAVAIL");\
109*53ee8cc1Swenshuai.xi break;\
110*53ee8cc1Swenshuai.xi case GOP_API_MUTEX_OBTAIN_FAIL:\
111*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_MUTEX_OBTAIN_FAIL");\
112*53ee8cc1Swenshuai.xi break;\
113*53ee8cc1Swenshuai.xi case GOP_API_MUTEX_OBTAINED:\
114*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_MUTEX_OBTAINED");\
115*53ee8cc1Swenshuai.xi break;\
116*53ee8cc1Swenshuai.xi case GOP_API_INVALID_BUFF_INFO:\
117*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_INVALID_BUFF_INFO");\
118*53ee8cc1Swenshuai.xi break;\
119*53ee8cc1Swenshuai.xi case GOP_API_INVALID_PARAMETERS:\
120*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_INVALID_PARAMETERS");\
121*53ee8cc1Swenshuai.xi break;\
122*53ee8cc1Swenshuai.xi case GOP_API_FUN_NOT_SUPPORTED:\
123*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_FUN_NOT_SUPPORTED");\
124*53ee8cc1Swenshuai.xi break;\
125*53ee8cc1Swenshuai.xi case GOP_API_ENUM_NOT_SUPPORTED:\
126*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_ENUM_NOT_SUPPORTED");\
127*53ee8cc1Swenshuai.xi break;\
128*53ee8cc1Swenshuai.xi case GOP_API_CRT_GWIN_FAIL:\
129*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_CRT_GWIN_FAIL");\
130*53ee8cc1Swenshuai.xi break;\
131*53ee8cc1Swenshuai.xi case GOP_API_CRT_GWIN_NOAVAIL:\
132*53ee8cc1Swenshuai.xi GOP_M_DBUG("\nGOP_CRT_GWIN_NOAVAIL");\
133*53ee8cc1Swenshuai.xi break;\
134*53ee8cc1Swenshuai.xi case GOP_API_SUCCESS:\
135*53ee8cc1Swenshuai.xi break;\
136*53ee8cc1Swenshuai.xi default:\
137*53ee8cc1Swenshuai.xi break;\
138*53ee8cc1Swenshuai.xi }\
139*53ee8cc1Swenshuai.xi }while(0)
140*53ee8cc1Swenshuai.xi
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xi #define APIGOP_CHECK_INIT() \
143*53ee8cc1Swenshuai.xi { \
144*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal ==NULL) \
145*53ee8cc1Swenshuai.xi { \
146*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nshould call MApi_GOP_Init first\n")); \
147*53ee8cc1Swenshuai.xi return GOP_API_FAIL;\
148*53ee8cc1Swenshuai.xi } \
149*53ee8cc1Swenshuai.xi }
150*53ee8cc1Swenshuai.xi
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi // Local Structures
153*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
154*53ee8cc1Swenshuai.xi /// GOP HVMirror GWIN position option define
155*53ee8cc1Swenshuai.xi typedef enum
156*53ee8cc1Swenshuai.xi {
157*53ee8cc1Swenshuai.xi E_Set_HPos,
158*53ee8cc1Swenshuai.xi E_Set_VPos,
159*53ee8cc1Swenshuai.xi E_Set_X,
160*53ee8cc1Swenshuai.xi E_Set_Y,
161*53ee8cc1Swenshuai.xi }HMirror_Opt;
162*53ee8cc1Swenshuai.xi
163*53ee8cc1Swenshuai.xi static MS_U32 (*fpSetFBFmt)(MS_U16 ,MS_PHY , MS_U16 ) = NULL;
164*53ee8cc1Swenshuai.xi MS_BOOL (*_fpXCIsInterlace)(void) = NULL;
165*53ee8cc1Swenshuai.xi MS_U16 (*_fpXCGetCapHStart)(void) = NULL;
166*53ee8cc1Swenshuai.xi static void (*fpXCReduceBWForOSD)(MS_U8 , MS_BOOL) = NULL;
167*53ee8cc1Swenshuai.xi static void (*fpEventNotify)(MS_U32 , void* ) = NULL;
168*53ee8cc1Swenshuai.xi static MS_BOOL (*fpXCSetDwinInfo)(MS_U16 cmd,MS_U32 *arg,MS_U16 size) = NULL;
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi
171*53ee8cc1Swenshuai.xi
_GOP_IsFbIdValid(void * pInstance,MS_U32 u32FbId)172*53ee8cc1Swenshuai.xi static MS_BOOL _GOP_IsFbIdValid(void* pInstance,MS_U32 u32FbId)
173*53ee8cc1Swenshuai.xi {
174*53ee8cc1Swenshuai.xi if (u32FbId > DRV_MAX_GWIN_FB_SUPPORT)
175*53ee8cc1Swenshuai.xi return FALSE;
176*53ee8cc1Swenshuai.xi else
177*53ee8cc1Swenshuai.xi return TRUE;
178*53ee8cc1Swenshuai.xi }
179*53ee8cc1Swenshuai.xi
180*53ee8cc1Swenshuai.xi
_GetWinFB(void * pInstance,MS_U32 FbId)181*53ee8cc1Swenshuai.xi static GOP_WinFB_INFO* _GetWinFB(void* pInstance,MS_U32 FbId)
182*53ee8cc1Swenshuai.xi {
183*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
184*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
185*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
186*53ee8cc1Swenshuai.xi #endif
187*53ee8cc1Swenshuai.xi
188*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,FbId))
189*53ee8cc1Swenshuai.xi {
190*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)FbId);
191*53ee8cc1Swenshuai.xi return NULL;
192*53ee8cc1Swenshuai.xi }
193*53ee8cc1Swenshuai.xi #if WINFB_INSHARED
194*53ee8cc1Swenshuai.xi //memcpy(pWinFB,&(g_pGOPCtxLocal->pGOPCtxShared->winFB[FbId]),sizeof(GOP_WinFB_INFO));
195*53ee8cc1Swenshuai.xi return &(g_pGOPCtxLocal->pGOPCtxShared->winFB[FbId]);
196*53ee8cc1Swenshuai.xi #else
197*53ee8cc1Swenshuai.xi //memcpy(pWinFB,g_pGOPCtxLocal->winFB[FbId],sizeof(GOP_WinFB_INFO));
198*53ee8cc1Swenshuai.xi return &g_pGOPCtxLocal->winFB[FbId];
199*53ee8cc1Swenshuai.xi #endif
200*53ee8cc1Swenshuai.xi
201*53ee8cc1Swenshuai.xi }
202*53ee8cc1Swenshuai.xi
_GOP_MAP_FBID_AFBCCmd(void * pInstance,MS_U32 u32fbId,EN_DRV_GOP_AFBC_CNTL * AFBC_Cmd,MS_BOOL * AFBC_Enable)203*53ee8cc1Swenshuai.xi static void _GOP_MAP_FBID_AFBCCmd(void* pInstance,MS_U32 u32fbId,EN_DRV_GOP_AFBC_CNTL* AFBC_Cmd, MS_BOOL* AFBC_Enable)
204*53ee8cc1Swenshuai.xi {
205*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
206*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
207*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
208*53ee8cc1Swenshuai.xi #endif
209*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
210*53ee8cc1Swenshuai.xi
211*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
212*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
213*53ee8cc1Swenshuai.xi {
214*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
215*53ee8cc1Swenshuai.xi return;
216*53ee8cc1Swenshuai.xi }
217*53ee8cc1Swenshuai.xi
218*53ee8cc1Swenshuai.xi switch(pwinFB->FBString)
219*53ee8cc1Swenshuai.xi {
220*53ee8cc1Swenshuai.xi case E_DRV_GOP_FB_AFBC_SPLT_YUVTRNSFER_ARGB8888:
221*53ee8cc1Swenshuai.xi *AFBC_Enable = TRUE;
222*53ee8cc1Swenshuai.xi *AFBC_Cmd = E_DRV_GOP_AFBC_SPILT|E_DRV_GOP_AFBC_YUV_TRANSFER|E_DRV_GOP_AFBC_ARGB8888;
223*53ee8cc1Swenshuai.xi break;
224*53ee8cc1Swenshuai.xi case E_DRV_GOP_FB_AFBC_NONSPLT_YUVTRS_ARGB8888:
225*53ee8cc1Swenshuai.xi *AFBC_Enable = TRUE;
226*53ee8cc1Swenshuai.xi *AFBC_Cmd = E_DRV_GOP_AFBC_YUV_TRANSFER|E_DRV_GOP_AFBC_ARGB8888;
227*53ee8cc1Swenshuai.xi break;
228*53ee8cc1Swenshuai.xi case E_DRV_GOP_FB_AFBC_SPLT_NONYUVTRS_ARGB8888:
229*53ee8cc1Swenshuai.xi *AFBC_Enable = TRUE;
230*53ee8cc1Swenshuai.xi *AFBC_Cmd = E_DRV_GOP_AFBC_SPILT|E_DRV_GOP_AFBC_ARGB8888;
231*53ee8cc1Swenshuai.xi break;
232*53ee8cc1Swenshuai.xi case E_DRV_GOP_FB_AFBC_NONSPLT_NONYUVTRS_ARGB8888:
233*53ee8cc1Swenshuai.xi *AFBC_Enable = TRUE;
234*53ee8cc1Swenshuai.xi *AFBC_Cmd = E_DRV_GOP_AFBC_ARGB8888;
235*53ee8cc1Swenshuai.xi break;
236*53ee8cc1Swenshuai.xi default:
237*53ee8cc1Swenshuai.xi *AFBC_Enable = FALSE;
238*53ee8cc1Swenshuai.xi *AFBC_Cmd = E_DRV_GOP_FB_NULL;
239*53ee8cc1Swenshuai.xi break;
240*53ee8cc1Swenshuai.xi }
241*53ee8cc1Swenshuai.xi }
242*53ee8cc1Swenshuai.xi
243*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
244*53ee8cc1Swenshuai.xi // Debug Functions
245*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
246*53ee8cc1Swenshuai.xi
_GOP_GetMaxGOPNum(void * pInstance)247*53ee8cc1Swenshuai.xi static MS_U8 _GOP_GetMaxGOPNum(void* pInstance)
248*53ee8cc1Swenshuai.xi {
249*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
250*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
251*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
252*53ee8cc1Swenshuai.xi #endif
253*53ee8cc1Swenshuai.xi
254*53ee8cc1Swenshuai.xi return MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal);
255*53ee8cc1Swenshuai.xi }
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi
_GOP_IsGopNumValid(void * pInstance,MS_U32 gop)258*53ee8cc1Swenshuai.xi static MS_BOOL _GOP_IsGopNumValid(void* pInstance,MS_U32 gop)
259*53ee8cc1Swenshuai.xi {
260*53ee8cc1Swenshuai.xi if (gop>=_GOP_GetMaxGOPNum(pInstance))
261*53ee8cc1Swenshuai.xi return FALSE;
262*53ee8cc1Swenshuai.xi else
263*53ee8cc1Swenshuai.xi return TRUE;
264*53ee8cc1Swenshuai.xi }
_GOP_IsGwinIdValid(void * pInstance,MS_U8 u8GwinID)265*53ee8cc1Swenshuai.xi static MS_BOOL _GOP_IsGwinIdValid(void* pInstance,MS_U8 u8GwinID)
266*53ee8cc1Swenshuai.xi {
267*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
268*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
269*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
270*53ee8cc1Swenshuai.xi #endif
271*53ee8cc1Swenshuai.xi
272*53ee8cc1Swenshuai.xi if(u8GwinID>=SHARED_GWIN_MAX_COUNT)
273*53ee8cc1Swenshuai.xi return FALSE;
274*53ee8cc1Swenshuai.xi else if (u8GwinID>=g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum)
275*53ee8cc1Swenshuai.xi return FALSE;
276*53ee8cc1Swenshuai.xi else
277*53ee8cc1Swenshuai.xi return TRUE;
278*53ee8cc1Swenshuai.xi }
279*53ee8cc1Swenshuai.xi
280*53ee8cc1Swenshuai.xi
_GOP_GetGop0WinInfo(void * pInstance,MS_U8 u8win,GOP_GwinInfo * pinfo)281*53ee8cc1Swenshuai.xi static void _GOP_GetGop0WinInfo(void* pInstance,MS_U8 u8win, GOP_GwinInfo* pinfo)
282*53ee8cc1Swenshuai.xi {
283*53ee8cc1Swenshuai.xi DRV_GOP_GWIN_INFO sGetInfo;
284*53ee8cc1Swenshuai.xi DRV_GOPDstType Gop0Dst =E_DRV_GOP_DST_INVALID;
285*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
286*53ee8cc1Swenshuai.xi
287*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
288*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
289*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
290*53ee8cc1Swenshuai.xi #endif
291*53ee8cc1Swenshuai.xi
292*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
293*53ee8cc1Swenshuai.xi {
294*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
295*53ee8cc1Swenshuai.xi return;
296*53ee8cc1Swenshuai.xi }
297*53ee8cc1Swenshuai.xi
298*53ee8cc1Swenshuai.xi
299*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8win].u32CurFBId);
300*53ee8cc1Swenshuai.xi
301*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
302*53ee8cc1Swenshuai.xi {
303*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : gwinMap[%d].u32CurFBId=%td\n",__FUNCTION__,__LINE__,u8win,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8win].u32CurFBId);
304*53ee8cc1Swenshuai.xi return;
305*53ee8cc1Swenshuai.xi }
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, 0, &Gop0Dst);
308*53ee8cc1Swenshuai.xi if (Gop0Dst ==E_DRV_GOP_DST_INVALID)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n Get GOP destination fail!\n"));
311*53ee8cc1Swenshuai.xi return;
312*53ee8cc1Swenshuai.xi }
313*53ee8cc1Swenshuai.xi memset(&sGetInfo, 0, sizeof(DRV_GOP_GWIN_INFO));
314*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinInfo(g_pGOPCtxLocal, u8win, &sGetInfo);
315*53ee8cc1Swenshuai.xi pinfo->u16RBlkHPixSize = sGetInfo.u16RBlkHPixSize;
316*53ee8cc1Swenshuai.xi pinfo->u16RBlkVPixSize = sGetInfo.u16RBlkVPixSize;
317*53ee8cc1Swenshuai.xi //2009.03.14 Fix the TTX,CC position error
318*53ee8cc1Swenshuai.xi sGetInfo.u16WinX = pwinFB->s_x;
319*53ee8cc1Swenshuai.xi sGetInfo.u16WinY = pwinFB->s_y;
320*53ee8cc1Swenshuai.xi
321*53ee8cc1Swenshuai.xi pinfo->clrType = (EN_GOP_COLOR_TYPE)sGetInfo.clrType;
322*53ee8cc1Swenshuai.xi
323*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_VMirror_VPos, u8win))
324*53ee8cc1Swenshuai.xi {
325*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVStr;
326*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd= g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVEnd;
327*53ee8cc1Swenshuai.xi
328*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
329*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (pinfo->u16DispVPixelEnd + pinfo->u16DispVPixelStart) >> 1; // pix
330*53ee8cc1Swenshuai.xi }
331*53ee8cc1Swenshuai.xi else
332*53ee8cc1Swenshuai.xi {
333*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = sGetInfo.u16DispVPixelStart; // pix
334*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
337*53ee8cc1Swenshuai.xi
338*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
339*53ee8cc1Swenshuai.xi if( ((Gop0Dst == E_DRV_GOP_DST_IP0) || (Gop0Dst == E_DRV_GOP_DST_IP1)) && bInterlace)
340*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart) >> 1;
341*53ee8cc1Swenshuai.xi else if((Gop0Dst == E_DRV_GOP_DST_VE) || (Gop0Dst == E_DRV_GOP_DST_OP1))
342*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart) >> 1;
343*53ee8cc1Swenshuai.xi else
344*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (sGetInfo.u16DispVPixelEnd + pinfo->u16DispVPixelStart) >> 1; // pix
345*53ee8cc1Swenshuai.xi }
346*53ee8cc1Swenshuai.xi else
347*53ee8cc1Swenshuai.xi {
348*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
349*53ee8cc1Swenshuai.xi
350*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
351*53ee8cc1Swenshuai.xi if( ((Gop0Dst == E_DRV_GOP_DST_IP0) || (Gop0Dst == E_DRV_GOP_DST_IP1)) && bInterlace)
352*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
353*53ee8cc1Swenshuai.xi else if((Gop0Dst == E_DRV_GOP_DST_VE) || (Gop0Dst == E_DRV_GOP_DST_OP1))
354*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
355*53ee8cc1Swenshuai.xi else if (((Gop0Dst == E_DRV_GOP_DST_OP0) || (Gop0Dst == E_DRV_GOP_DST_FRC) || (Gop0Dst == E_DRV_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,0))
356*53ee8cc1Swenshuai.xi {
357*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
358*53ee8cc1Swenshuai.xi }
359*53ee8cc1Swenshuai.xi else
360*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = sGetInfo.u16DispVPixelEnd; // pix
361*53ee8cc1Swenshuai.xi }
362*53ee8cc1Swenshuai.xi }
363*53ee8cc1Swenshuai.xi
364*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_HMirror_HPos, u8win))
365*53ee8cc1Swenshuai.xi {
366*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHStr;
367*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd= g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHEnd;
368*53ee8cc1Swenshuai.xi
369*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
370*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (pinfo->u16DispHPixelEnd + pinfo->u16DispHPixelStart) >> 1; // pix
371*53ee8cc1Swenshuai.xi }
372*53ee8cc1Swenshuai.xi else
373*53ee8cc1Swenshuai.xi {
374*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart = sGetInfo.u16DispHPixelStart; // pix
375*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = sGetInfo.u16DispHPixelEnd; // pix
376*53ee8cc1Swenshuai.xi
377*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
378*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (pinfo->u16DispHPixelEnd + pinfo->u16DispHPixelStart) >> 1; // pix
379*53ee8cc1Swenshuai.xi }
380*53ee8cc1Swenshuai.xi
381*53ee8cc1Swenshuai.xi pinfo->u16RBlkHRblkSize = sGetInfo.u16RBlkHRblkSize; //3
382*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = sGetInfo.u64DRAMRBlkStart;
383*53ee8cc1Swenshuai.xi pinfo->u16WinY = sGetInfo.u16WinY; //Original Y pix of FB
384*53ee8cc1Swenshuai.xi pinfo->u16WinX= sGetInfo.u16WinX; //Original X pix of FB
385*53ee8cc1Swenshuai.xi }
386*53ee8cc1Swenshuai.xi
_GOP_GetGop1WinInfo(void * pInstance,MS_U8 u8win,GOP_GwinInfo * pinfo)387*53ee8cc1Swenshuai.xi static void _GOP_GetGop1WinInfo(void* pInstance,MS_U8 u8win, GOP_GwinInfo* pinfo)
388*53ee8cc1Swenshuai.xi {
389*53ee8cc1Swenshuai.xi DRV_GOP_GWIN_INFO sGetInfo;
390*53ee8cc1Swenshuai.xi DRV_GOPDstType Gop1Dst =E_DRV_GOP_DST_INVALID;
391*53ee8cc1Swenshuai.xi
392*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
393*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
394*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
395*53ee8cc1Swenshuai.xi #endif
396*53ee8cc1Swenshuai.xi
397*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
400*53ee8cc1Swenshuai.xi return;
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi
403*53ee8cc1Swenshuai.xi
404*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, 1, &Gop1Dst);
405*53ee8cc1Swenshuai.xi if (Gop1Dst ==E_DRV_GOP_DST_INVALID)
406*53ee8cc1Swenshuai.xi {
407*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n Get GOP destination fail!\n"));
408*53ee8cc1Swenshuai.xi return;
409*53ee8cc1Swenshuai.xi }
410*53ee8cc1Swenshuai.xi
411*53ee8cc1Swenshuai.xi memset(&sGetInfo, 0, sizeof(DRV_GOP_GWIN_INFO));
412*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinInfo(g_pGOPCtxLocal, u8win, &sGetInfo);
413*53ee8cc1Swenshuai.xi pinfo->u16RBlkHPixSize = sGetInfo.u16RBlkHPixSize;
414*53ee8cc1Swenshuai.xi pinfo->u16RBlkVPixSize = sGetInfo.u16RBlkVPixSize;
415*53ee8cc1Swenshuai.xi pinfo->clrType = (EN_GOP_COLOR_TYPE)sGetInfo.clrType;
416*53ee8cc1Swenshuai.xi
417*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_VMirror_VPos, u8win))
418*53ee8cc1Swenshuai.xi {
419*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVStr;
420*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVEnd;
421*53ee8cc1Swenshuai.xi
422*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
423*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (pinfo->u16DispVPixelEnd + pinfo->u16DispVPixelStart) >> 1; // pix
424*53ee8cc1Swenshuai.xi }
425*53ee8cc1Swenshuai.xi else
426*53ee8cc1Swenshuai.xi {
427*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = sGetInfo.u16DispVPixelStart; // pix
428*53ee8cc1Swenshuai.xi
429*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
430*53ee8cc1Swenshuai.xi {
431*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
432*53ee8cc1Swenshuai.xi
433*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
434*53ee8cc1Swenshuai.xi if( ((Gop1Dst == E_DRV_GOP_DST_IP0) || (Gop1Dst == E_DRV_GOP_DST_IP1)) && bInterlace)
435*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart) >> 1;
436*53ee8cc1Swenshuai.xi else if((Gop1Dst == E_DRV_GOP_DST_VE) || (Gop1Dst == E_DRV_GOP_DST_OP1))
437*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart) >> 1;
438*53ee8cc1Swenshuai.xi else
439*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (sGetInfo.u16DispVPixelEnd + pinfo->u16DispVPixelStart) >> 1; // pix
440*53ee8cc1Swenshuai.xi }
441*53ee8cc1Swenshuai.xi else
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
444*53ee8cc1Swenshuai.xi
445*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
446*53ee8cc1Swenshuai.xi if( ((Gop1Dst == E_DRV_GOP_DST_IP0) || (Gop1Dst == E_DRV_GOP_DST_IP1)) && bInterlace)
447*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
448*53ee8cc1Swenshuai.xi else if((Gop1Dst == E_DRV_GOP_DST_VE) || (Gop1Dst == E_DRV_GOP_DST_OP1))
449*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
450*53ee8cc1Swenshuai.xi else if (((Gop1Dst == E_DRV_GOP_DST_OP0) || (Gop1Dst == E_DRV_GOP_DST_FRC) || (Gop1Dst == E_DRV_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,1))
451*53ee8cc1Swenshuai.xi {
452*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
453*53ee8cc1Swenshuai.xi }
454*53ee8cc1Swenshuai.xi else
455*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = sGetInfo.u16DispVPixelEnd; // pix
456*53ee8cc1Swenshuai.xi }
457*53ee8cc1Swenshuai.xi }
458*53ee8cc1Swenshuai.xi
459*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_HMirror_HPos, u8win))
460*53ee8cc1Swenshuai.xi {
461*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHStr;
462*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHEnd;
463*53ee8cc1Swenshuai.xi
464*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
465*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (pinfo->u16DispHPixelEnd + pinfo->u16DispHPixelStart) >> 1; // pix
466*53ee8cc1Swenshuai.xi }
467*53ee8cc1Swenshuai.xi else
468*53ee8cc1Swenshuai.xi {
469*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart = sGetInfo.u16DispHPixelStart; // pix
470*53ee8cc1Swenshuai.xi
471*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
472*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (sGetInfo.u16DispHPixelEnd + pinfo->u16DispHPixelStart) >> 1; // pix
473*53ee8cc1Swenshuai.xi else
474*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = sGetInfo.u16DispHPixelEnd; // pix
475*53ee8cc1Swenshuai.xi }
476*53ee8cc1Swenshuai.xi
477*53ee8cc1Swenshuai.xi pinfo->u16RBlkHRblkSize = sGetInfo.u16RBlkHRblkSize;
478*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = sGetInfo.u64DRAMRBlkStart;
479*53ee8cc1Swenshuai.xi
480*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr, u8win) ||
481*53ee8cc1Swenshuai.xi HAS_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, u8win))
482*53ee8cc1Swenshuai.xi {
483*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u64NonMirrorFBAdr;
484*53ee8cc1Swenshuai.xi }
485*53ee8cc1Swenshuai.xi }
486*53ee8cc1Swenshuai.xi
_GOP_GetGop23WinInfo(void * pInstance,MS_U8 u8win,GOP_GwinInfo * pinfo)487*53ee8cc1Swenshuai.xi static void _GOP_GetGop23WinInfo(void* pInstance,MS_U8 u8win, GOP_GwinInfo* pinfo)
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi DRV_GOP_GWIN_INFO sGetInfo;
490*53ee8cc1Swenshuai.xi DRV_GOPDstType Gop23Dst =E_DRV_GOP_DST_INVALID;
491*53ee8cc1Swenshuai.xi
492*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
493*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
494*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
495*53ee8cc1Swenshuai.xi #endif
496*53ee8cc1Swenshuai.xi
497*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
498*53ee8cc1Swenshuai.xi {
499*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
500*53ee8cc1Swenshuai.xi return;
501*53ee8cc1Swenshuai.xi }
502*53ee8cc1Swenshuai.xi
503*53ee8cc1Swenshuai.xi
504*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8win), &Gop23Dst);
505*53ee8cc1Swenshuai.xi if (Gop23Dst ==E_DRV_GOP_DST_INVALID)
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n Get GOP destination fail!\n"));
508*53ee8cc1Swenshuai.xi return;
509*53ee8cc1Swenshuai.xi }
510*53ee8cc1Swenshuai.xi
511*53ee8cc1Swenshuai.xi memset(&sGetInfo, 0, sizeof(DRV_GOP_GWIN_INFO));
512*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinInfo(g_pGOPCtxLocal, u8win, &sGetInfo);
513*53ee8cc1Swenshuai.xi pinfo->u16RBlkHPixSize = sGetInfo.u16RBlkHPixSize;
514*53ee8cc1Swenshuai.xi pinfo->u16RBlkVPixSize = sGetInfo.u16RBlkVPixSize;
515*53ee8cc1Swenshuai.xi pinfo->clrType = (EN_GOP_COLOR_TYPE)sGetInfo.clrType;
516*53ee8cc1Swenshuai.xi
517*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_VMirror_VPos, u8win))
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVStr;
520*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVEnd;
521*53ee8cc1Swenshuai.xi
522*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
523*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (pinfo->u16DispVPixelEnd + pinfo->u16DispVPixelStart) >> 1; // pix
524*53ee8cc1Swenshuai.xi }
525*53ee8cc1Swenshuai.xi else
526*53ee8cc1Swenshuai.xi {
527*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = sGetInfo.u16DispVPixelStart; // pix
528*53ee8cc1Swenshuai.xi
529*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
530*53ee8cc1Swenshuai.xi {
531*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
532*53ee8cc1Swenshuai.xi
533*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
534*53ee8cc1Swenshuai.xi if( ((Gop23Dst == E_DRV_GOP_DST_IP0) || (Gop23Dst == E_DRV_GOP_DST_IP1)) && bInterlace)
535*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart) >> 1;
536*53ee8cc1Swenshuai.xi else if((Gop23Dst == E_DRV_GOP_DST_VE) || (Gop23Dst == E_DRV_GOP_DST_OP1))
537*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart) >> 1;
538*53ee8cc1Swenshuai.xi else
539*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (sGetInfo.u16DispVPixelEnd + pinfo->u16DispVPixelStart) >> 1; // pix
540*53ee8cc1Swenshuai.xi }
541*53ee8cc1Swenshuai.xi else
542*53ee8cc1Swenshuai.xi {
543*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
544*53ee8cc1Swenshuai.xi
545*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
546*53ee8cc1Swenshuai.xi if( ((Gop23Dst == E_DRV_GOP_DST_IP0) || (Gop23Dst == E_DRV_GOP_DST_IP1)) && bInterlace)
547*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
548*53ee8cc1Swenshuai.xi else if((Gop23Dst == E_DRV_GOP_DST_VE) || (Gop23Dst == E_DRV_GOP_DST_OP1))
549*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
550*53ee8cc1Swenshuai.xi else if (((Gop23Dst == E_DRV_GOP_DST_OP0) || (Gop23Dst == E_DRV_GOP_DST_FRC) || (Gop23Dst == E_DRV_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal, MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8win)))
551*53ee8cc1Swenshuai.xi {
552*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = ((sGetInfo.u16DispVPixelEnd - pinfo->u16DispVPixelStart) << 1) + pinfo->u16DispVPixelStart;
553*53ee8cc1Swenshuai.xi }
554*53ee8cc1Swenshuai.xi else
555*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = sGetInfo.u16DispVPixelEnd; // pix
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi }
558*53ee8cc1Swenshuai.xi
559*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_HMirror_HPos, u8win))
560*53ee8cc1Swenshuai.xi {
561*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHStr;
562*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHEnd;
563*53ee8cc1Swenshuai.xi
564*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
565*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (pinfo->u16DispHPixelEnd + pinfo->u16DispHPixelStart) >> 1; // pix
566*53ee8cc1Swenshuai.xi }
567*53ee8cc1Swenshuai.xi else
568*53ee8cc1Swenshuai.xi {
569*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart = sGetInfo.u16DispHPixelStart; // pix
570*53ee8cc1Swenshuai.xi
571*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
572*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (sGetInfo.u16DispHPixelEnd + pinfo->u16DispHPixelStart) >> 1; // pix
573*53ee8cc1Swenshuai.xi else
574*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = sGetInfo.u16DispHPixelEnd; // pix
575*53ee8cc1Swenshuai.xi }
576*53ee8cc1Swenshuai.xi
577*53ee8cc1Swenshuai.xi pinfo->u16RBlkHRblkSize = sGetInfo.u16RBlkHRblkSize;
578*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = sGetInfo.u64DRAMRBlkStart;
579*53ee8cc1Swenshuai.xi
580*53ee8cc1Swenshuai.xi if (HAS_BIT(g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr, u8win) ||
581*53ee8cc1Swenshuai.xi HAS_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, u8win))
582*53ee8cc1Swenshuai.xi {
583*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = g_pGOPCtxLocal->sMirrorInfo[u8win].u64NonMirrorFBAdr;
584*53ee8cc1Swenshuai.xi }
585*53ee8cc1Swenshuai.xi }
586*53ee8cc1Swenshuai.xi
587*53ee8cc1Swenshuai.xi
588*53ee8cc1Swenshuai.xi
589*53ee8cc1Swenshuai.xi
_GOP_SelGwinId2(void * pInstance,MS_U32 u32GOP,MS_U32 u8GwinIdx)590*53ee8cc1Swenshuai.xi MS_U8 _GOP_SelGwinId2(void* pInstance,MS_U32 u32GOP, MS_U32 u8GwinIdx)
591*53ee8cc1Swenshuai.xi {
592*53ee8cc1Swenshuai.xi MS_U8 tmp;
593*53ee8cc1Swenshuai.xi
594*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
595*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
596*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
597*53ee8cc1Swenshuai.xi #endif
598*53ee8cc1Swenshuai.xi
599*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u32GOP))
600*53ee8cc1Swenshuai.xi {
601*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %td is out of range\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32GOP);
602*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
603*53ee8cc1Swenshuai.xi }
604*53ee8cc1Swenshuai.xi tmp = MDrv_GOP_SelGwinIdByGOP(g_pGOPCtxLocal, u32GOP, u8GwinIdx);
605*53ee8cc1Swenshuai.xi
606*53ee8cc1Swenshuai.xi return tmp;
607*53ee8cc1Swenshuai.xi
608*53ee8cc1Swenshuai.xi }
609*53ee8cc1Swenshuai.xi
_GOP_MAP_MUX_Enum(void * pInstance,EN_Gop_MuxSel GOPMux,Gop_MuxSel * pGOPMux)610*53ee8cc1Swenshuai.xi static E_GOP_API_Result _GOP_MAP_MUX_Enum(void* pInstance,EN_Gop_MuxSel GOPMux, Gop_MuxSel *pGOPMux)
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi E_GOP_API_Result ret = GOP_API_FAIL;
613*53ee8cc1Swenshuai.xi
614*53ee8cc1Swenshuai.xi switch (GOPMux)
615*53ee8cc1Swenshuai.xi {
616*53ee8cc1Swenshuai.xi case EN_GOP_MUX0:
617*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_MUX0;
618*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
619*53ee8cc1Swenshuai.xi break;
620*53ee8cc1Swenshuai.xi case EN_GOP_MUX1:
621*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_MUX1;
622*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
623*53ee8cc1Swenshuai.xi break;
624*53ee8cc1Swenshuai.xi case EN_GOP_MUX2:
625*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_MUX2;
626*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
627*53ee8cc1Swenshuai.xi break;
628*53ee8cc1Swenshuai.xi case EN_GOP_MUX3:
629*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_MUX3;
630*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
631*53ee8cc1Swenshuai.xi break;
632*53ee8cc1Swenshuai.xi case EN_GOP_MUX4:
633*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_MUX4;
634*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
635*53ee8cc1Swenshuai.xi break;
636*53ee8cc1Swenshuai.xi case EN_GOP_IP0_MUX:
637*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_IP0_MUX;
638*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
639*53ee8cc1Swenshuai.xi break;
640*53ee8cc1Swenshuai.xi case EN_GOP_IP1_MUX:
641*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_IP1_MUX;
642*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
643*53ee8cc1Swenshuai.xi break;
644*53ee8cc1Swenshuai.xi case EN_GOP_VOP0_MUX:
645*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_VOP0_MUX;
646*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
647*53ee8cc1Swenshuai.xi break;
648*53ee8cc1Swenshuai.xi case EN_GOP_VOP1_MUX:
649*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_VOP1_MUX;
650*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
651*53ee8cc1Swenshuai.xi break;
652*53ee8cc1Swenshuai.xi case EN_GOP_FRC_MUX0:
653*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_FRC_MUX0;
654*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
655*53ee8cc1Swenshuai.xi break;
656*53ee8cc1Swenshuai.xi case EN_GOP_FRC_MUX1:
657*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_FRC_MUX1;
658*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
659*53ee8cc1Swenshuai.xi break;
660*53ee8cc1Swenshuai.xi case EN_GOP_FRC_MUX2:
661*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_FRC_MUX2;
662*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
663*53ee8cc1Swenshuai.xi break;
664*53ee8cc1Swenshuai.xi case EN_GOP_FRC_MUX3:
665*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_FRC_MUX3;
666*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
667*53ee8cc1Swenshuai.xi break;
668*53ee8cc1Swenshuai.xi case EN_GOP_BYPASS_MUX0:
669*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_BYPASS_MUX0;
670*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
671*53ee8cc1Swenshuai.xi break;
672*53ee8cc1Swenshuai.xi case EN_GOP_IP0_SUB_MUX:
673*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_IP0_SUB_MUX;
674*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
675*53ee8cc1Swenshuai.xi break;
676*53ee8cc1Swenshuai.xi case EN_GOP_VOP0_SUB_MUX:
677*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_VOP0_SUB_MUX;
678*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
679*53ee8cc1Swenshuai.xi break;
680*53ee8cc1Swenshuai.xi case EN_GOP_OP1_MUX:
681*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_OP1_MUX;
682*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
683*53ee8cc1Swenshuai.xi break;
684*53ee8cc1Swenshuai.xi case EN_GOP_DIP_MUX:
685*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_DIP_MUX;
686*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
687*53ee8cc1Swenshuai.xi break;
688*53ee8cc1Swenshuai.xi case EN_GOP_GS_MUX:
689*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_GS_MUX;
690*53ee8cc1Swenshuai.xi ret = GOP_API_SUCCESS;
691*53ee8cc1Swenshuai.xi break;
692*53ee8cc1Swenshuai.xi default:
693*53ee8cc1Swenshuai.xi *pGOPMux = E_GOP_MUX_INVAILD;
694*53ee8cc1Swenshuai.xi GOP_M_ERR("\n MAP GOP Mux error!! \n");
695*53ee8cc1Swenshuai.xi ret = GOP_API_FAIL;
696*53ee8cc1Swenshuai.xi break;
697*53ee8cc1Swenshuai.xi }
698*53ee8cc1Swenshuai.xi return ret;
699*53ee8cc1Swenshuai.xi }
_GOP_Map_APIDst2DRV_Enum(void * pInstance,EN_GOP_DST_TYPE GopDst,DRV_GOPDstType * pGopDst)700*53ee8cc1Swenshuai.xi static MS_U32 _GOP_Map_APIDst2DRV_Enum(void* pInstance,EN_GOP_DST_TYPE GopDst, DRV_GOPDstType *pGopDst)
701*53ee8cc1Swenshuai.xi {
702*53ee8cc1Swenshuai.xi MS_U32 ret = GOP_API_FAIL;
703*53ee8cc1Swenshuai.xi
704*53ee8cc1Swenshuai.xi switch (GopDst)
705*53ee8cc1Swenshuai.xi {
706*53ee8cc1Swenshuai.xi case E_GOP_DST_IP0:
707*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_IP0;
708*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
709*53ee8cc1Swenshuai.xi break;
710*53ee8cc1Swenshuai.xi case E_GOP_DST_MIXER2VE:
711*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_MIXER2VE;
712*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
713*53ee8cc1Swenshuai.xi break;
714*53ee8cc1Swenshuai.xi case E_GOP_DST_OP0:
715*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_OP0;
716*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
717*53ee8cc1Swenshuai.xi break;
718*53ee8cc1Swenshuai.xi case E_GOP_DST_VOP:
719*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_VOP;
720*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
721*53ee8cc1Swenshuai.xi break;
722*53ee8cc1Swenshuai.xi case E_GOP_DST_IP1:
723*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_IP1;
724*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
725*53ee8cc1Swenshuai.xi break;
726*53ee8cc1Swenshuai.xi case E_GOP_DST_IP_MAIN:
727*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_IP0; //For compatible temporaily
728*53ee8cc1Swenshuai.xi GOP_M_ERR("\n %s, E_GOP_DST_IP_MAIN is going to be removed, please choose E_GOP_DST_IP0!! \n", __FUNCTION__);
729*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
730*53ee8cc1Swenshuai.xi break;
731*53ee8cc1Swenshuai.xi case E_GOP_DST_IP_SUB: //For compatible temporaily
732*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_IP0_SUB;
733*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
734*53ee8cc1Swenshuai.xi break;
735*53ee8cc1Swenshuai.xi case E_GOP_DST_MIXER2OP:
736*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_MIXER2OP;
737*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
738*53ee8cc1Swenshuai.xi break;
739*53ee8cc1Swenshuai.xi case E_GOP_DST_VOP_SUB:
740*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_VOP_SUB;
741*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
742*53ee8cc1Swenshuai.xi break;
743*53ee8cc1Swenshuai.xi case E_GOP_DST_FRC:
744*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_FRC;
745*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
746*53ee8cc1Swenshuai.xi break;
747*53ee8cc1Swenshuai.xi case E_GOP_DST_VE:
748*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_VE;
749*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
750*53ee8cc1Swenshuai.xi break;
751*53ee8cc1Swenshuai.xi case E_GOP_DST_BYPASS:
752*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_BYPASS;
753*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
754*53ee8cc1Swenshuai.xi break;
755*53ee8cc1Swenshuai.xi case E_GOP_DST_OP1:
756*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_OP1;
757*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
758*53ee8cc1Swenshuai.xi break;
759*53ee8cc1Swenshuai.xi case E_GOP_DST_MIXER2OP1:
760*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_MIXER2OP1;
761*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
762*53ee8cc1Swenshuai.xi break;
763*53ee8cc1Swenshuai.xi case E_GOP_DST_DIP:
764*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_DIP;
765*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
766*53ee8cc1Swenshuai.xi break;
767*53ee8cc1Swenshuai.xi case E_GOP_DST_GOPScaling:
768*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_GOPScaling;
769*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
770*53ee8cc1Swenshuai.xi break;
771*53ee8cc1Swenshuai.xi case E_GOP_DST_OP_DUAL_RATE:
772*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_OP_DUAL_RATE;
773*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
774*53ee8cc1Swenshuai.xi break;
775*53ee8cc1Swenshuai.xi default:
776*53ee8cc1Swenshuai.xi *pGopDst = E_DRV_GOP_DST_INVALID;
777*53ee8cc1Swenshuai.xi GOP_M_ERR("\n MAP GOP Dst plane error!! \n");
778*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_FAIL;
779*53ee8cc1Swenshuai.xi break;
780*53ee8cc1Swenshuai.xi }
781*53ee8cc1Swenshuai.xi return ret;
782*53ee8cc1Swenshuai.xi }
783*53ee8cc1Swenshuai.xi
_GOP_Map_DRVDst2API_Enum_(void * pInstance,EN_GOP_DST_TYPE * pGopDst,DRV_GOPDstType GopDst)784*53ee8cc1Swenshuai.xi static MS_U32 _GOP_Map_DRVDst2API_Enum_(void* pInstance,EN_GOP_DST_TYPE *pGopDst, DRV_GOPDstType GopDst)
785*53ee8cc1Swenshuai.xi {
786*53ee8cc1Swenshuai.xi MS_U32 ret = 0;
787*53ee8cc1Swenshuai.xi
788*53ee8cc1Swenshuai.xi switch (GopDst)
789*53ee8cc1Swenshuai.xi {
790*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0:
791*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_IP0;
792*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
793*53ee8cc1Swenshuai.xi break;
794*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2VE:
795*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_MIXER2VE;
796*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
797*53ee8cc1Swenshuai.xi break;
798*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP0:
799*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_OP0;
800*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
801*53ee8cc1Swenshuai.xi break;
802*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP:
803*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_VOP;
804*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
805*53ee8cc1Swenshuai.xi break;
806*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP1:
807*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_IP1;
808*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
809*53ee8cc1Swenshuai.xi break;
810*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0_SUB: //For compatible temporaily
811*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_IP_SUB;
812*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
813*53ee8cc1Swenshuai.xi break;
814*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2OP:
815*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_MIXER2OP;
816*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
817*53ee8cc1Swenshuai.xi break;
818*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP_SUB:
819*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_VOP_SUB;
820*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
821*53ee8cc1Swenshuai.xi break;
822*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_FRC:
823*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_FRC;
824*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
825*53ee8cc1Swenshuai.xi break;
826*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VE:
827*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_VE;
828*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
829*53ee8cc1Swenshuai.xi break;
830*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_BYPASS:
831*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_BYPASS;
832*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
833*53ee8cc1Swenshuai.xi break;
834*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP1:
835*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_OP1;
836*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
837*53ee8cc1Swenshuai.xi break;
838*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2OP1:
839*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_MIXER2OP1;
840*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
841*53ee8cc1Swenshuai.xi break;
842*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_DIP:
843*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_DIP;
844*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
845*53ee8cc1Swenshuai.xi break;
846*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_GOPScaling:
847*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_GOPScaling;
848*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
849*53ee8cc1Swenshuai.xi break;
850*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP_DUAL_RATE :
851*53ee8cc1Swenshuai.xi *pGopDst = E_GOP_DST_OP_DUAL_RATE;
852*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_SUCCESS;
853*53ee8cc1Swenshuai.xi break;
854*53ee8cc1Swenshuai.xi default:
855*53ee8cc1Swenshuai.xi *pGopDst = (EN_GOP_DST_TYPE)0xff;
856*53ee8cc1Swenshuai.xi GOP_M_ERR("\n MAP GOP Dst plane error!! \n");
857*53ee8cc1Swenshuai.xi ret = (MS_U32)GOP_API_FAIL;
858*53ee8cc1Swenshuai.xi break;
859*53ee8cc1Swenshuai.xi }
860*53ee8cc1Swenshuai.xi return ret;
861*53ee8cc1Swenshuai.xi }
862*53ee8cc1Swenshuai.xi
_GOP_CalcPitch(void * pInstance,MS_U8 fbFmt,MS_U16 width)863*53ee8cc1Swenshuai.xi static MS_U32 _GOP_CalcPitch(void* pInstance,MS_U8 fbFmt, MS_U16 width)
864*53ee8cc1Swenshuai.xi {
865*53ee8cc1Swenshuai.xi MS_U16 pitch=0;
866*53ee8cc1Swenshuai.xi
867*53ee8cc1Swenshuai.xi switch ( fbFmt )
868*53ee8cc1Swenshuai.xi {
869*53ee8cc1Swenshuai.xi case E_MS_FMT_I1 :
870*53ee8cc1Swenshuai.xi pitch = (width) >> 3;
871*53ee8cc1Swenshuai.xi break;
872*53ee8cc1Swenshuai.xi case E_MS_FMT_I2 :
873*53ee8cc1Swenshuai.xi pitch = (width<<1) >> 3;
874*53ee8cc1Swenshuai.xi break;
875*53ee8cc1Swenshuai.xi case E_MS_FMT_I4 :
876*53ee8cc1Swenshuai.xi pitch = (width<<2) >> 3;
877*53ee8cc1Swenshuai.xi break;
878*53ee8cc1Swenshuai.xi case E_MS_FMT_I8 :
879*53ee8cc1Swenshuai.xi pitch = width;
880*53ee8cc1Swenshuai.xi break;
881*53ee8cc1Swenshuai.xi case E_MS_FMT_RGB565 :
882*53ee8cc1Swenshuai.xi case E_MS_FMT_BGR565 :
883*53ee8cc1Swenshuai.xi case E_MS_FMT_ARGB1555 :
884*53ee8cc1Swenshuai.xi case E_MS_FMT_ABGR1555 :
885*53ee8cc1Swenshuai.xi case E_MS_FMT_BGRA5551 :
886*53ee8cc1Swenshuai.xi case E_MS_FMT_RGBA5551 :
887*53ee8cc1Swenshuai.xi case E_MS_FMT_ARGB4444 :
888*53ee8cc1Swenshuai.xi case E_MS_FMT_RGBA4444 :
889*53ee8cc1Swenshuai.xi case E_MS_FMT_ABGR4444 :
890*53ee8cc1Swenshuai.xi case E_MS_FMT_BGRA4444 :
891*53ee8cc1Swenshuai.xi case E_MS_FMT_1ABFgBg12355:
892*53ee8cc1Swenshuai.xi case E_MS_FMT_FaBaFgBg2266:
893*53ee8cc1Swenshuai.xi case E_MS_FMT_YUV422:
894*53ee8cc1Swenshuai.xi case E_MS_FMT_ARGB1555_DST :
895*53ee8cc1Swenshuai.xi pitch = width << 1;
896*53ee8cc1Swenshuai.xi break;
897*53ee8cc1Swenshuai.xi case E_MS_FMT_AYUV8888 :
898*53ee8cc1Swenshuai.xi case E_MS_FMT_ARGB8888 :
899*53ee8cc1Swenshuai.xi case E_MS_FMT_RGBA8888 :
900*53ee8cc1Swenshuai.xi case E_MS_FMT_BGRA8888:
901*53ee8cc1Swenshuai.xi case E_MS_FMT_ABGR8888 :
902*53ee8cc1Swenshuai.xi pitch = width << 2;
903*53ee8cc1Swenshuai.xi break;
904*53ee8cc1Swenshuai.xi default :
905*53ee8cc1Swenshuai.xi //print err
906*53ee8cc1Swenshuai.xi pitch = 0;
907*53ee8cc1Swenshuai.xi break;
908*53ee8cc1Swenshuai.xi }
909*53ee8cc1Swenshuai.xi return pitch;
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi
_GOP_GetBPP(void * pInstance,EN_GOP_COLOR_TYPE fbFmt)912*53ee8cc1Swenshuai.xi static MS_U16 _GOP_GetBPP(void* pInstance,EN_GOP_COLOR_TYPE fbFmt)
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi MS_U16 bpp=0;
915*53ee8cc1Swenshuai.xi
916*53ee8cc1Swenshuai.xi switch ( fbFmt )
917*53ee8cc1Swenshuai.xi {
918*53ee8cc1Swenshuai.xi case E_GOP_COLOR_RGB555_BLINK :
919*53ee8cc1Swenshuai.xi case E_GOP_COLOR_RGB565 :
920*53ee8cc1Swenshuai.xi case E_GOP_COLOR_BGR565 :
921*53ee8cc1Swenshuai.xi case E_GOP_COLOR_ARGB1555:
922*53ee8cc1Swenshuai.xi case E_GOP_COLOR_ABGR1555:
923*53ee8cc1Swenshuai.xi case E_GOP_COLOR_ARGB4444 :
924*53ee8cc1Swenshuai.xi case E_GOP_COLOR_RGBA4444 :
925*53ee8cc1Swenshuai.xi case E_GOP_COLOR_ABGR4444 :
926*53ee8cc1Swenshuai.xi case E_GOP_COLOR_BGRA4444 :
927*53ee8cc1Swenshuai.xi case E_GOP_COLOR_RGB555YUV422:
928*53ee8cc1Swenshuai.xi case E_GOP_COLOR_YUV422:
929*53ee8cc1Swenshuai.xi case E_GOP_COLOR_2266:
930*53ee8cc1Swenshuai.xi case E_GOP_COLOR_RGBA5551:
931*53ee8cc1Swenshuai.xi case E_GOP_COLOR_BGRA5551:
932*53ee8cc1Swenshuai.xi bpp = 16;
933*53ee8cc1Swenshuai.xi break;
934*53ee8cc1Swenshuai.xi case E_GOP_COLOR_AYUV8888 :
935*53ee8cc1Swenshuai.xi case E_GOP_COLOR_ARGB8888 :
936*53ee8cc1Swenshuai.xi case E_GOP_COLOR_ABGR8888 :
937*53ee8cc1Swenshuai.xi case E_GOP_COLOR_RGBA8888 :
938*53ee8cc1Swenshuai.xi case E_GOP_COLOR_BGRA8888 :
939*53ee8cc1Swenshuai.xi bpp = 32;
940*53ee8cc1Swenshuai.xi break;
941*53ee8cc1Swenshuai.xi
942*53ee8cc1Swenshuai.xi case E_GOP_COLOR_I8 :
943*53ee8cc1Swenshuai.xi bpp = 8;
944*53ee8cc1Swenshuai.xi break;
945*53ee8cc1Swenshuai.xi default :
946*53ee8cc1Swenshuai.xi //print err
947*53ee8cc1Swenshuai.xi //__ASSERT(0);
948*53ee8cc1Swenshuai.xi bpp = 0xFFFF;
949*53ee8cc1Swenshuai.xi break;
950*53ee8cc1Swenshuai.xi }
951*53ee8cc1Swenshuai.xi return bpp;
952*53ee8cc1Swenshuai.xi
953*53ee8cc1Swenshuai.xi }
954*53ee8cc1Swenshuai.xi
_GOP_GWIN_IsGwinCreated(void * pInstance,MS_U8 gId)955*53ee8cc1Swenshuai.xi static MS_U8 _GOP_GWIN_IsGwinCreated(void* pInstance,MS_U8 gId)
956*53ee8cc1Swenshuai.xi {
957*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
958*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
959*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
960*53ee8cc1Swenshuai.xi #endif
961*53ee8cc1Swenshuai.xi
962*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gId))
963*53ee8cc1Swenshuai.xi {
964*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,gId);
965*53ee8cc1Swenshuai.xi return FALSE;
966*53ee8cc1Swenshuai.xi }
967*53ee8cc1Swenshuai.xi
968*53ee8cc1Swenshuai.xi if((gId< g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum)
969*53ee8cc1Swenshuai.xi && (GWIN_ID_INVALID ==g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId))
970*53ee8cc1Swenshuai.xi {
971*53ee8cc1Swenshuai.xi return FALSE;
972*53ee8cc1Swenshuai.xi }
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi GOP_M_INFO("IsGwinCreated Debug: gId=%d\n", gId);
975*53ee8cc1Swenshuai.xi return TRUE;
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi
978*53ee8cc1Swenshuai.xi
bCursorSupport(void * pInstance,MS_U8 u8GOP)979*53ee8cc1Swenshuai.xi static MS_BOOL bCursorSupport(void* pInstance,MS_U8 u8GOP)
980*53ee8cc1Swenshuai.xi {
981*53ee8cc1Swenshuai.xi #if CURSOR_SUPPORT
982*53ee8cc1Swenshuai.xi //if cursor GOP, dont need to do adjust
983*53ee8cc1Swenshuai.xi if(u8GOP == 3)
984*53ee8cc1Swenshuai.xi return TRUE;
985*53ee8cc1Swenshuai.xi else
986*53ee8cc1Swenshuai.xi return FALSE;
987*53ee8cc1Swenshuai.xi #else
988*53ee8cc1Swenshuai.xi return FALSE;
989*53ee8cc1Swenshuai.xi #endif
990*53ee8cc1Swenshuai.xi }
991*53ee8cc1Swenshuai.xi
992*53ee8cc1Swenshuai.xi // Alignment stretch window value
_GOP_GWIN_Align_StretchWin(void * pInstance,MS_U8 u8GOP,EN_GOP_DST_TYPE eDstType,MS_U16 * pu16x,MS_U16 * pu16y,MS_U16 * pu16Width,MS_U16 * pu16height,MS_U16 BPP)993*53ee8cc1Swenshuai.xi static void _GOP_GWIN_Align_StretchWin(void* pInstance, MS_U8 u8GOP, EN_GOP_DST_TYPE eDstType, MS_U16 *pu16x, MS_U16 *pu16y, MS_U16 *pu16Width, MS_U16 *pu16height, MS_U16 BPP)
994*53ee8cc1Swenshuai.xi {
995*53ee8cc1Swenshuai.xi MS_U16 u16align_offset;
996*53ee8cc1Swenshuai.xi MS_U16 u16GOP_Unit;
997*53ee8cc1Swenshuai.xi
998*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
999*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1000*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1001*53ee8cc1Swenshuai.xi #endif
1002*53ee8cc1Swenshuai.xi
1003*53ee8cc1Swenshuai.xi u16GOP_Unit = MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8GOP);
1004*53ee8cc1Swenshuai.xi
1005*53ee8cc1Swenshuai.xi if((eDstType == E_GOP_DST_IP0) || (eDstType == E_GOP_DST_IP1))
1006*53ee8cc1Swenshuai.xi {
1007*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1008*53ee8cc1Swenshuai.xi
1009*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1010*53ee8cc1Swenshuai.xi if( bInterlace )
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi *pu16height /=2;
1013*53ee8cc1Swenshuai.xi *pu16y = *pu16y/2;
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi }
1016*53ee8cc1Swenshuai.xi else if(eDstType == E_GOP_DST_VE)
1017*53ee8cc1Swenshuai.xi {
1018*53ee8cc1Swenshuai.xi *pu16height /=2;
1019*53ee8cc1Swenshuai.xi *pu16y = *pu16y/2 + g_pGOPCtxLocal->pGopChipProperty->GOP_VE_V_Offset;
1020*53ee8cc1Swenshuai.xi }
1021*53ee8cc1Swenshuai.xi else if(eDstType == E_GOP_DST_OP1)
1022*53ee8cc1Swenshuai.xi {
1023*53ee8cc1Swenshuai.xi *pu16height /=2;
1024*53ee8cc1Swenshuai.xi *pu16y = *pu16y/2;
1025*53ee8cc1Swenshuai.xi }
1026*53ee8cc1Swenshuai.xi else if (((eDstType == E_GOP_DST_OP0) || (eDstType == E_GOP_DST_FRC) || (eDstType == E_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,u8GOP))
1027*53ee8cc1Swenshuai.xi {
1028*53ee8cc1Swenshuai.xi *pu16height /=2;
1029*53ee8cc1Swenshuai.xi *pu16y = *pu16y/2;
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi
1032*53ee8cc1Swenshuai.xi
1033*53ee8cc1Swenshuai.xi if(u16GOP_Unit ==1)
1034*53ee8cc1Swenshuai.xi {
1035*53ee8cc1Swenshuai.xi *pu16Width =((*pu16Width + 1)>> 1) << 1; //do 2 pixel align
1036*53ee8cc1Swenshuai.xi }
1037*53ee8cc1Swenshuai.xi else
1038*53ee8cc1Swenshuai.xi {
1039*53ee8cc1Swenshuai.xi u16align_offset = (u16GOP_Unit * 8 /BPP -1);
1040*53ee8cc1Swenshuai.xi *pu16Width = (*pu16Width + u16align_offset)&(~u16align_offset) ; //do 8-byte align
1041*53ee8cc1Swenshuai.xi }
1042*53ee8cc1Swenshuai.xi }
1043*53ee8cc1Swenshuai.xi
1044*53ee8cc1Swenshuai.xi //Adjust stretch window for GOP 3D
_GOP_GWIN_Adjust_3DStretchWin(void * pInstance,MS_U8 u8Gop,MS_U16 * pu16x,MS_U16 * pu16y,MS_U16 * pu16Width,MS_U16 * pu16Height)1045*53ee8cc1Swenshuai.xi static void _GOP_GWIN_Adjust_3DStretchWin(void* pInstance,MS_U8 u8Gop, MS_U16 *pu16x, MS_U16 *pu16y, MS_U16 *pu16Width, MS_U16 *pu16Height)
1046*53ee8cc1Swenshuai.xi {
1047*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1048*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1049*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1050*53ee8cc1Swenshuai.xi #endif
1051*53ee8cc1Swenshuai.xi
1052*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->enGOP3DType == E_DRV_3D_DUP_HALF)
1053*53ee8cc1Swenshuai.xi {
1054*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGOPCtxShared->GOP_StereoMode[u8Gop] == E_DRV_GOP_3D_LINE_ALTERNATIVE) ||
1055*53ee8cc1Swenshuai.xi (g_pGOPCtxLocal->pGOPCtxShared->GOP_StereoMode[u8Gop] == E_DRV_GOP_3D_TOP_BOTTOM)
1056*53ee8cc1Swenshuai.xi )
1057*53ee8cc1Swenshuai.xi {
1058*53ee8cc1Swenshuai.xi *pu16Height = *pu16Height <<1;
1059*53ee8cc1Swenshuai.xi //Line by line, do not need middle
1060*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->GOP_StereoMode[u8Gop] == E_DRV_GOP_3D_TOP_BOTTOM)
1061*53ee8cc1Swenshuai.xi {
1062*53ee8cc1Swenshuai.xi *pu16Height +=g_pGOPCtxLocal->u16GOPGWinMiddle[u8Gop]; //Stretch win includes middle
1063*53ee8cc1Swenshuai.xi }
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi else if(g_pGOPCtxLocal->pGOPCtxShared->GOP_StereoMode[u8Gop] == E_DRV_GOP_3D_LINE_FRAMEPACKING)
1066*53ee8cc1Swenshuai.xi {
1067*53ee8cc1Swenshuai.xi //Frame packing, no middle, always full screen
1068*53ee8cc1Swenshuai.xi //Adjust Gap only
1069*53ee8cc1Swenshuai.xi *pu16Height = (*pu16Height << 1) + g_pGOPCtxLocal->GOP_FramePacking_Gap;
1070*53ee8cc1Swenshuai.xi }
1071*53ee8cc1Swenshuai.xi else if(g_pGOPCtxLocal->pGOPCtxShared->GOP_StereoMode[u8Gop] == E_DRV_GOP_3D_SIDE_BY_SYDE)
1072*53ee8cc1Swenshuai.xi {
1073*53ee8cc1Swenshuai.xi *pu16Width = *pu16Width <<1;
1074*53ee8cc1Swenshuai.xi *pu16Width +=g_pGOPCtxLocal->u16GOPGWinMiddle[u8Gop]; //Stretch win includes middle
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi }
1077*53ee8cc1Swenshuai.xi }
1078*53ee8cc1Swenshuai.xi
_GOP_GWIN_SetHVMirrorWinPos(void * pInstance,MS_U8 u8GwinID,HMirror_Opt opt,GOP_GwinInfo * pGWINInfo)1079*53ee8cc1Swenshuai.xi static void _GOP_GWIN_SetHVMirrorWinPos(void* pInstance,MS_U8 u8GwinID, HMirror_Opt opt, GOP_GwinInfo* pGWINInfo)
1080*53ee8cc1Swenshuai.xi {
1081*53ee8cc1Swenshuai.xi MS_U16 u16GWINWidth=0, u16GWINHeight=0;
1082*53ee8cc1Swenshuai.xi MS_S16 s16MirrorHStr=-1, s16MirrorVStr=-1;
1083*53ee8cc1Swenshuai.xi MS_U8 u8Gop=INVALID_GOP_NUM;
1084*53ee8cc1Swenshuai.xi
1085*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1086*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1087*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1088*53ee8cc1Swenshuai.xi #endif
1089*53ee8cc1Swenshuai.xi
1090*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8GwinID))
1091*53ee8cc1Swenshuai.xi {
1092*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8GwinID);
1093*53ee8cc1Swenshuai.xi return;
1094*53ee8cc1Swenshuai.xi }
1095*53ee8cc1Swenshuai.xi u8Gop = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8GwinID);
1096*53ee8cc1Swenshuai.xi u16GWINWidth = pGWINInfo->u16DispHPixelEnd - pGWINInfo->u16DispHPixelStart;
1097*53ee8cc1Swenshuai.xi u16GWINHeight = pGWINInfo->u16DispVPixelEnd - pGWINInfo->u16DispVPixelStart;
1098*53ee8cc1Swenshuai.xi
1099*53ee8cc1Swenshuai.xi switch (opt)
1100*53ee8cc1Swenshuai.xi {
1101*53ee8cc1Swenshuai.xi case E_Set_HPos:
1102*53ee8cc1Swenshuai.xi {
1103*53ee8cc1Swenshuai.xi pGWINInfo->u16DispHPixelEnd = g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchWidth[u8Gop] - pGWINInfo->u16DispHPixelStart;
1104*53ee8cc1Swenshuai.xi s16MirrorHStr = pGWINInfo->u16DispHPixelEnd - u16GWINWidth;
1105*53ee8cc1Swenshuai.xi if (s16MirrorHStr<0)
1106*53ee8cc1Swenshuai.xi {
1107*53ee8cc1Swenshuai.xi pGWINInfo->u16DispHPixelStart = 0;
1108*53ee8cc1Swenshuai.xi pGWINInfo->u16DispHPixelEnd = u16GWINWidth;
1109*53ee8cc1Swenshuai.xi }
1110*53ee8cc1Swenshuai.xi else
1111*53ee8cc1Swenshuai.xi {
1112*53ee8cc1Swenshuai.xi pGWINInfo->u16DispHPixelStart = s16MirrorHStr;
1113*53ee8cc1Swenshuai.xi }
1114*53ee8cc1Swenshuai.xi SET_BIT(g_pGOPCtxLocal->u16GOP_HMirror_HPos, u8GwinID);
1115*53ee8cc1Swenshuai.xi break;
1116*53ee8cc1Swenshuai.xi }
1117*53ee8cc1Swenshuai.xi case E_Set_VPos:
1118*53ee8cc1Swenshuai.xi {
1119*53ee8cc1Swenshuai.xi pGWINInfo->u16DispVPixelEnd = g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchHeight[u8Gop] - pGWINInfo->u16DispVPixelStart;
1120*53ee8cc1Swenshuai.xi s16MirrorVStr = pGWINInfo->u16DispVPixelEnd - u16GWINHeight;
1121*53ee8cc1Swenshuai.xi if (s16MirrorVStr<0)
1122*53ee8cc1Swenshuai.xi {
1123*53ee8cc1Swenshuai.xi pGWINInfo->u16DispVPixelStart = 0;
1124*53ee8cc1Swenshuai.xi pGWINInfo->u16DispVPixelEnd = u16GWINHeight;
1125*53ee8cc1Swenshuai.xi }
1126*53ee8cc1Swenshuai.xi else
1127*53ee8cc1Swenshuai.xi {
1128*53ee8cc1Swenshuai.xi pGWINInfo->u16DispVPixelStart = s16MirrorVStr;
1129*53ee8cc1Swenshuai.xi }
1130*53ee8cc1Swenshuai.xi SET_BIT(g_pGOPCtxLocal->u16GOP_VMirror_VPos, u8GwinID);
1131*53ee8cc1Swenshuai.xi break;
1132*53ee8cc1Swenshuai.xi }
1133*53ee8cc1Swenshuai.xi case E_Set_X:
1134*53ee8cc1Swenshuai.xi {
1135*53ee8cc1Swenshuai.xi if(u8Gop == GOPTYPE.GOP0)
1136*53ee8cc1Swenshuai.xi {
1137*53ee8cc1Swenshuai.xi #if ENABLE_GOP0_RBLK_MIRROR
1138*53ee8cc1Swenshuai.xi MS_U16 bpp=MDrv_GOP_GetBPP(g_pGOPCtxLocal, (DRV_GOPColorType)pGWINInfo->clrType);
1139*53ee8cc1Swenshuai.xi MS_U16 u16HPixelSize;
1140*53ee8cc1Swenshuai.xi if((bpp != 0) && (bpp != 0xFFFF))
1141*53ee8cc1Swenshuai.xi {
1142*53ee8cc1Swenshuai.xi u16HPixelSize = pGWINInfo->u16RBlkHRblkSize / (bpp>>3);
1143*53ee8cc1Swenshuai.xi }
1144*53ee8cc1Swenshuai.xi else
1145*53ee8cc1Swenshuai.xi {
1146*53ee8cc1Swenshuai.xi u16HPixelSize = pGWINInfo->u16RBlkHPixSize;
1147*53ee8cc1Swenshuai.xi }
1148*53ee8cc1Swenshuai.xi if((u16HPixelSize != 0))
1149*53ee8cc1Swenshuai.xi {
1150*53ee8cc1Swenshuai.xi pGWINInfo->u16WinX = u16HPixelSize - ((pGWINInfo->u16WinX + pGWINInfo->u16DispHPixelEnd- pGWINInfo->u16DispHPixelStart) % u16HPixelSize);
1151*53ee8cc1Swenshuai.xi pGWINInfo->u16WinX %= u16HPixelSize;
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi else
1154*53ee8cc1Swenshuai.xi #endif //ENABLE_GOP0_RBLK_MIRROR
1155*53ee8cc1Swenshuai.xi {
1156*53ee8cc1Swenshuai.xi pGWINInfo->u16WinX = 0 ;
1157*53ee8cc1Swenshuai.xi }
1158*53ee8cc1Swenshuai.xi }
1159*53ee8cc1Swenshuai.xi break;
1160*53ee8cc1Swenshuai.xi }
1161*53ee8cc1Swenshuai.xi case E_Set_Y:
1162*53ee8cc1Swenshuai.xi {
1163*53ee8cc1Swenshuai.xi if(u8Gop == GOPTYPE.GOP0)
1164*53ee8cc1Swenshuai.xi {
1165*53ee8cc1Swenshuai.xi #if ENABLE_GOP0_RBLK_MIRROR
1166*53ee8cc1Swenshuai.xi if(pGWINInfo->u16RBlkVPixSize != 0)
1167*53ee8cc1Swenshuai.xi {
1168*53ee8cc1Swenshuai.xi pGWINInfo->u16WinY = (pGWINInfo->u16WinY + (pGWINInfo->u16DispVPixelEnd-pGWINInfo->u16DispVPixelStart-1)) % pGWINInfo->u16RBlkVPixSize;
1169*53ee8cc1Swenshuai.xi }
1170*53ee8cc1Swenshuai.xi else
1171*53ee8cc1Swenshuai.xi #endif//ENABLE_GOP0_RBLK_MIRROR
1172*53ee8cc1Swenshuai.xi {
1173*53ee8cc1Swenshuai.xi pGWINInfo->u16WinY = (pGWINInfo->u16DispVPixelEnd-pGWINInfo->u16DispVPixelStart-1);
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi }
1176*53ee8cc1Swenshuai.xi break;
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi default:
1179*53ee8cc1Swenshuai.xi {
1180*53ee8cc1Swenshuai.xi //ASSERT(0);
1181*53ee8cc1Swenshuai.xi break;
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi }
1184*53ee8cc1Swenshuai.xi }
1185*53ee8cc1Swenshuai.xi
1186*53ee8cc1Swenshuai.xi
_GOP_GWIN_IsGwinExistInClient(void * pInstance,MS_U8 gId)1187*53ee8cc1Swenshuai.xi static MS_U8 _GOP_GWIN_IsGwinExistInClient(void* pInstance,MS_U8 gId)
1188*53ee8cc1Swenshuai.xi {
1189*53ee8cc1Swenshuai.xi MS_BOOL result0, result1, result2, result3, result4;
1190*53ee8cc1Swenshuai.xi MS_U32 MaxGwinSupport;
1191*53ee8cc1Swenshuai.xi
1192*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
1193*53ee8cc1Swenshuai.xi
1194*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1195*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1196*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1197*53ee8cc1Swenshuai.xi #endif
1198*53ee8cc1Swenshuai.xi
1199*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gId))
1200*53ee8cc1Swenshuai.xi {
1201*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,gId);
1202*53ee8cc1Swenshuai.xi return FALSE;
1203*53ee8cc1Swenshuai.xi }
1204*53ee8cc1Swenshuai.xi
1205*53ee8cc1Swenshuai.xi MaxGwinSupport = g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum;
1206*53ee8cc1Swenshuai.xi
1207*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId);
1208*53ee8cc1Swenshuai.xi
1209*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
1210*53ee8cc1Swenshuai.xi {
1211*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : gwinMap[%d].u32CurFBId=%td\n",__FUNCTION__,__LINE__,gId,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId);
1212*53ee8cc1Swenshuai.xi return FALSE;
1213*53ee8cc1Swenshuai.xi }
1214*53ee8cc1Swenshuai.xi
1215*53ee8cc1Swenshuai.xi result0 = (MaxGwinSupport<=gId);
1216*53ee8cc1Swenshuai.xi result1 = (FALSE == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].bIsShared);
1217*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
1218*53ee8cc1Swenshuai.xi MS_U32 pid = (GETPIDTYPE)getpid();
1219*53ee8cc1Swenshuai.xi result2 = (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32GOPClientId != pid);
1220*53ee8cc1Swenshuai.xi #else
1221*53ee8cc1Swenshuai.xi result2 = (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32GOPClientId != g_pGOPCtxLocal->u32GOPClientId);
1222*53ee8cc1Swenshuai.xi #endif
1223*53ee8cc1Swenshuai.xi result3 = (DRV_MAX_GWIN_FB_SUPPORT <= g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId);
1224*53ee8cc1Swenshuai.xi result4 = (0 == pwinFB->in_use);
1225*53ee8cc1Swenshuai.xi
1226*53ee8cc1Swenshuai.xi if ( result0 || (result1 && (result2 || result3 || result4) ) )
1227*53ee8cc1Swenshuai.xi {
1228*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
1229*53ee8cc1Swenshuai.xi GOP_M_INFO("result0 = %d,result1 = %d,result2 = %d,result3 = %d,result4 = %d\n",result0,result1,result2,result3,result4);
1230*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d]GWIN %d is not exist\n",__FUNCTION__,__LINE__,gId);
1231*53ee8cc1Swenshuai.xi #else
1232*53ee8cc1Swenshuai.xi GOP_M_INFO("IsGwinExistInClient Debug: gId =%d, \n" , gId);
1233*53ee8cc1Swenshuai.xi GOP_M_INFO("gwinMap[gId].u32GOPClientId: gId =%d, \n" , (ptrdiff_t)(g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32GOPClientId) );
1234*53ee8cc1Swenshuai.xi GOP_M_INFO("_pGOPCtxLocal->u32GOPClientId =%d, \n" , (ptrdiff_t)(g_pGOPCtxLocal->u32GOPClientId) );
1235*53ee8cc1Swenshuai.xi GOP_M_INFO("gwinMap[gId].u32CurFBId =%d, \n" , (ptrdiff_t)(g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId));
1236*53ee8cc1Swenshuai.xi GOP_M_INFO("gwinMap[gId].u32CurFBId].in_use =%d, \n" , pwinFB->in_use);
1237*53ee8cc1Swenshuai.xi #endif
1238*53ee8cc1Swenshuai.xi return FALSE;
1239*53ee8cc1Swenshuai.xi }
1240*53ee8cc1Swenshuai.xi return TRUE;
1241*53ee8cc1Swenshuai.xi
1242*53ee8cc1Swenshuai.xi }
1243*53ee8cc1Swenshuai.xi
1244*53ee8cc1Swenshuai.xi
1245*53ee8cc1Swenshuai.xi
_GOP_GWIN_IsEnableMirror(void * pInstance,DRV_GOPDstType eGopDst,MS_BOOL * pbHMirror,MS_BOOL * pbVMirror)1246*53ee8cc1Swenshuai.xi static void _GOP_GWIN_IsEnableMirror(void* pInstance,DRV_GOPDstType eGopDst, MS_BOOL *pbHMirror, MS_BOOL *pbVMirror)
1247*53ee8cc1Swenshuai.xi {
1248*53ee8cc1Swenshuai.xi
1249*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1250*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1251*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1252*53ee8cc1Swenshuai.xi #endif
1253*53ee8cc1Swenshuai.xi
1254*53ee8cc1Swenshuai.xi if((pbHMirror == NULL) || (pbVMirror == NULL))
1255*53ee8cc1Swenshuai.xi {
1256*53ee8cc1Swenshuai.xi return;
1257*53ee8cc1Swenshuai.xi }
1258*53ee8cc1Swenshuai.xi
1259*53ee8cc1Swenshuai.xi if( (eGopDst == E_DRV_GOP_DST_OP0)
1260*53ee8cc1Swenshuai.xi ||(eGopDst == E_DRV_GOP_DST_OP_DUAL_RATE)
1261*53ee8cc1Swenshuai.xi ||(eGopDst == E_DRV_GOP_DST_BYPASS)
1262*53ee8cc1Swenshuai.xi ||(eGopDst == E_DRV_GOP_DST_FRC)
1263*53ee8cc1Swenshuai.xi ||( ((eGopDst == E_DRV_GOP_DST_IP0) || (eGopDst == E_DRV_GOP_DST_IP0_SUB))
1264*53ee8cc1Swenshuai.xi &&(E_GOP_VIDEOTIMING_MIRROR_BYMVOP == Mdrv_GOP_GetVideoTimingMirrorType(g_pGOPCtxLocal, TRUE)))
1265*53ee8cc1Swenshuai.xi )
1266*53ee8cc1Swenshuai.xi {
1267*53ee8cc1Swenshuai.xi *pbHMirror = g_pGOPCtxLocal->pGOPCtxShared->bHMirror;
1268*53ee8cc1Swenshuai.xi *pbVMirror = g_pGOPCtxLocal->pGOPCtxShared->bVMirror;
1269*53ee8cc1Swenshuai.xi }
1270*53ee8cc1Swenshuai.xi else
1271*53ee8cc1Swenshuai.xi {
1272*53ee8cc1Swenshuai.xi #if (FPGA_TEST) //FPGA use VOP path to verify mirror.
1273*53ee8cc1Swenshuai.xi *pbHMirror = g_pGOPCtxLocal->pGOPCtxShared->bHMirror;
1274*53ee8cc1Swenshuai.xi *pbVMirror = g_pGOPCtxLocal->pGOPCtxShared->bVMirror;
1275*53ee8cc1Swenshuai.xi #else
1276*53ee8cc1Swenshuai.xi *pbHMirror = FALSE;
1277*53ee8cc1Swenshuai.xi *pbVMirror = FALSE;
1278*53ee8cc1Swenshuai.xi #endif
1279*53ee8cc1Swenshuai.xi }
1280*53ee8cc1Swenshuai.xi }
1281*53ee8cc1Swenshuai.xi
_GetGOPEnum(void * pInstance)1282*53ee8cc1Swenshuai.xi static MS_BOOL _GetGOPEnum(void* pInstance)
1283*53ee8cc1Swenshuai.xi {
1284*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1285*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1286*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1287*53ee8cc1Swenshuai.xi #endif
1288*53ee8cc1Swenshuai.xi
1289*53ee8cc1Swenshuai.xi memset(&GOPTYPE, 0xff, sizeof(GOP_TYPE_DEF));
1290*53ee8cc1Swenshuai.xi return MDrv_GOP_GetGOPEnum(g_pGOPCtxLocal, &GOPTYPE);
1291*53ee8cc1Swenshuai.xi }
1292*53ee8cc1Swenshuai.xi
1293*53ee8cc1Swenshuai.xi
_GOP_Init_Ctx(void * pInstance,MS_BOOL * pbFirstDrvInstant)1294*53ee8cc1Swenshuai.xi static MS_BOOL _GOP_Init_Ctx(void* pInstance,MS_BOOL *pbFirstDrvInstant)
1295*53ee8cc1Swenshuai.xi {
1296*53ee8cc1Swenshuai.xi MS_BOOL bNeedInitShared =FALSE;
1297*53ee8cc1Swenshuai.xi MS_U16 u16LoopTime = 0x0;
1298*53ee8cc1Swenshuai.xi
1299*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1300*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1301*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1302*53ee8cc1Swenshuai.xi #endif
1303*53ee8cc1Swenshuai.xi
1304*53ee8cc1Swenshuai.xi _GetGOPEnum(pInstance);
1305*53ee8cc1Swenshuai.xi
1306*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal)
1307*53ee8cc1Swenshuai.xi {
1308*53ee8cc1Swenshuai.xi if(bFirstInit)
1309*53ee8cc1Swenshuai.xi {
1310*53ee8cc1Swenshuai.xi *pbFirstDrvInstant = TRUE;
1311*53ee8cc1Swenshuai.xi }
1312*53ee8cc1Swenshuai.xi else
1313*53ee8cc1Swenshuai.xi {
1314*53ee8cc1Swenshuai.xi *pbFirstDrvInstant = FALSE;
1315*53ee8cc1Swenshuai.xi }
1316*53ee8cc1Swenshuai.xi
1317*53ee8cc1Swenshuai.xi return TRUE;
1318*53ee8cc1Swenshuai.xi }
1319*53ee8cc1Swenshuai.xi g_pGOPCtxLocal = Drv_GOP_Init_Context(pInstance,&bNeedInitShared);
1320*53ee8cc1Swenshuai.xi if(NULL == g_pGOPCtxLocal)
1321*53ee8cc1Swenshuai.xi {
1322*53ee8cc1Swenshuai.xi GOP_M_ERR("Error : g_pGOPCtxLocal = NULL\n");
1323*53ee8cc1Swenshuai.xi return FALSE;
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bInitShared = bNeedInitShared;
1326*53ee8cc1Swenshuai.xi
1327*53ee8cc1Swenshuai.xi if(pbFirstDrvInstant)
1328*53ee8cc1Swenshuai.xi *pbFirstDrvInstant = bNeedInitShared;
1329*53ee8cc1Swenshuai.xi
1330*53ee8cc1Swenshuai.xi
1331*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
1332*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u32GOPClientId = (GETPIDTYPE)getpid();
1333*53ee8cc1Swenshuai.xi #else
1334*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u32GOPClientId = ++g_pGOPCtxLocal->pGOPCtxShared->u32ClientIdAllocator;
1335*53ee8cc1Swenshuai.xi if(0 == g_pGOPCtxLocal->u32GOPClientId)
1336*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u32GOPClientId = ++g_pGOPCtxLocal->pGOPCtxShared->u32ClientIdAllocator;
1337*53ee8cc1Swenshuai.xi #endif
1338*53ee8cc1Swenshuai.xi
1339*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo = NULL;
1340*53ee8cc1Swenshuai.xi u16LoopTime = 0;
1341*53ee8cc1Swenshuai.xi while (u16LoopTime<0xFF)
1342*53ee8cc1Swenshuai.xi {
1343*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1344*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->sMirrorInfo ==NULL)
1345*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo = kmalloc(g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum * sizeof(GOP_GwinMirror_Info), GFP_KERNEL);
1346*53ee8cc1Swenshuai.xi #else
1347*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->sMirrorInfo ==NULL)
1348*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo = malloc(g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum * sizeof(GOP_GwinMirror_Info));
1349*53ee8cc1Swenshuai.xi #endif
1350*53ee8cc1Swenshuai.xi
1351*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->sMirrorInfo!=NULL)
1352*53ee8cc1Swenshuai.xi {
1353*53ee8cc1Swenshuai.xi break;
1354*53ee8cc1Swenshuai.xi }
1355*53ee8cc1Swenshuai.xi u16LoopTime++;
1356*53ee8cc1Swenshuai.xi
1357*53ee8cc1Swenshuai.xi }
1358*53ee8cc1Swenshuai.xi
1359*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->sMirrorInfo==NULL)
1360*53ee8cc1Swenshuai.xi {
1361*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nallocate memory for gwin mirror info fail!!!"));
1362*53ee8cc1Swenshuai.xi }
1363*53ee8cc1Swenshuai.xi else
1364*53ee8cc1Swenshuai.xi {
1365*53ee8cc1Swenshuai.xi memset(g_pGOPCtxLocal->sMirrorInfo, 0, g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum * sizeof(GOP_GwinMirror_Info));
1366*53ee8cc1Swenshuai.xi }
1367*53ee8cc1Swenshuai.xi
1368*53ee8cc1Swenshuai.xi memset(&g_pGOPCtxLocal->sGOPConfig, 0, sizeof(GOP_Config));
1369*53ee8cc1Swenshuai.xi
1370*53ee8cc1Swenshuai.xi memset(g_pGOPCtxLocal->MS_MuxGop, 0, MAX_GOP_MUX_SUPPORT*sizeof(MS_U8));
1371*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= FALSE;
1372*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsClkClosed= FALSE;
1373*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u8ChgIpMuxGop = 0xFF;
1374*53ee8cc1Swenshuai.xi #if GOP_LOCK_SUPPORT
1375*53ee8cc1Swenshuai.xi char GOP_MUTEX[] = "GOP_Mutex";
1376*53ee8cc1Swenshuai.xi
1377*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPMutexCnt = 0;
1378*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPMutex = MsOS_CreateMutex(E_MSOS_FIFO, (char *)GOP_MUTEX, MSOS_PROCESS_SHARED);
1379*53ee8cc1Swenshuai.xi if (0 > g_pGOPCtxLocal->s32GOPMutex)
1380*53ee8cc1Swenshuai.xi {
1381*53ee8cc1Swenshuai.xi GOP_M_ERR("%screate gop mutex fail\n", __FUNCTION__);
1382*53ee8cc1Swenshuai.xi return FALSE;
1383*53ee8cc1Swenshuai.xi }
1384*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPLock = -1;
1385*53ee8cc1Swenshuai.xi #endif
1386*53ee8cc1Swenshuai.xi
1387*53ee8cc1Swenshuai.xi #if GOP_XC_LOCK_SUPPORT
1388*53ee8cc1Swenshuai.xi char XC_MUTEX[] = "_XC_Mutex";
1389*53ee8cc1Swenshuai.xi
1390*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_MutexCnt = 0;
1391*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, (char *)XC_MUTEX, MSOS_PROCESS_SHARED);
1392*53ee8cc1Swenshuai.xi if (0 > g_pGOPCtxLocal->s32GOPXC_Mutex)
1393*53ee8cc1Swenshuai.xi {
1394*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%06d] create XC mutex fail _GOPXC_Mutex=0x%x\n", __FUNCTION__, __LINE__, g_pGOPCtxLocal->s32GOPXC_Mutex);
1395*53ee8cc1Swenshuai.xi }
1396*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_Lock = -1;
1397*53ee8cc1Swenshuai.xi #endif
1398*53ee8cc1Swenshuai.xi return TRUE;
1399*53ee8cc1Swenshuai.xi }
1400*53ee8cc1Swenshuai.xi
1401*53ee8cc1Swenshuai.xi
1402*53ee8cc1Swenshuai.xi
1403*53ee8cc1Swenshuai.xi
1404*53ee8cc1Swenshuai.xi
_GOP_TestPattern(void * pInstance,DRV_GOP_TSTPATTERN * TstPattern)1405*53ee8cc1Swenshuai.xi static void _GOP_TestPattern(void* pInstance,DRV_GOP_TSTPATTERN *TstPattern)
1406*53ee8cc1Swenshuai.xi {
1407*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1408*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1409*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1410*53ee8cc1Swenshuai.xi #endif
1411*53ee8cc1Swenshuai.xi
1412*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetHVDuplicate(g_pGOPCtxLocal, TstPattern->u8TSTClr_Hdup, TstPattern->u8TSTClr_Vdup);
1413*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetStartClr(g_pGOPCtxLocal,TstPattern->u8R_stc, TstPattern->u8G_stc, TstPattern->u8B_stc);
1414*53ee8cc1Swenshuai.xi
1415*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetHInitColor(g_pGOPCtxLocal, TstPattern->u8HR_inc, TstPattern->u8HG_inc, TstPattern->u8HB_inc);
1416*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetHIncremental_Signz(g_pGOPCtxLocal,TstPattern->u8HR_inc_signz, TstPattern->u8HG_inc_signz, TstPattern->u8HB_inc_signz);
1417*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetHStep(g_pGOPCtxLocal, TstPattern->u8HR_step, TstPattern->u8HG_step, TstPattern->u8HB_step);
1418*53ee8cc1Swenshuai.xi
1419*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetVInitColor(g_pGOPCtxLocal, TstPattern->u8VR_inc, TstPattern->u8VG_inc, TstPattern->u8VB_inc);
1420*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetVIncremental_Signz(g_pGOPCtxLocal, TstPattern->u8VR_inc_signz, TstPattern->u8VG_inc_signz, TstPattern->u8VB_inc_signz);
1421*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern_SetVStep(g_pGOPCtxLocal, TstPattern->u8VR_step, TstPattern->u8VG_step, TstPattern->u8VB_step);
1422*53ee8cc1Swenshuai.xi
1423*53ee8cc1Swenshuai.xi MDrv_GOP_TestPattern(g_pGOPCtxLocal, TstPattern->bTSTClr_En, TstPattern->u8TSTClr_Alpha);
1424*53ee8cc1Swenshuai.xi
1425*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal, 0x0); //only gop0 has test pattern
1426*53ee8cc1Swenshuai.xi }
1427*53ee8cc1Swenshuai.xi
1428*53ee8cc1Swenshuai.xi
1429*53ee8cc1Swenshuai.xi
1430*53ee8cc1Swenshuai.xi
1431*53ee8cc1Swenshuai.xi
1432*53ee8cc1Swenshuai.xi
_GOP_GWIN_SetHVMirrorDRAMAddr(void * pInstance,MS_U8 u8win,MS_BOOL bHMirror,MS_BOOL bVMirror,GOP_GwinInfo * pinfo)1433*53ee8cc1Swenshuai.xi static void _GOP_GWIN_SetHVMirrorDRAMAddr(void* pInstance,MS_U8 u8win, MS_BOOL bHMirror, MS_BOOL bVMirror, GOP_GwinInfo* pinfo)
1434*53ee8cc1Swenshuai.xi {
1435*53ee8cc1Swenshuai.xi MS_PHY u64AddrTemp=0;
1436*53ee8cc1Swenshuai.xi MS_U8 u8Gop = 0;
1437*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pinfo, GOP_M_FATAL("\npinfo is Null\n"));
1438*53ee8cc1Swenshuai.xi
1439*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1440*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1441*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1442*53ee8cc1Swenshuai.xi #endif
1443*53ee8cc1Swenshuai.xi
1444*53ee8cc1Swenshuai.xi u8Gop = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8win);
1445*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
1446*53ee8cc1Swenshuai.xi {
1447*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
1448*53ee8cc1Swenshuai.xi return;
1449*53ee8cc1Swenshuai.xi }
1450*53ee8cc1Swenshuai.xi
1451*53ee8cc1Swenshuai.xi if(u8Gop != GOPTYPE.GOP0)
1452*53ee8cc1Swenshuai.xi {
1453*53ee8cc1Swenshuai.xi if(bHMirror)
1454*53ee8cc1Swenshuai.xi {
1455*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGopChipProperty->bAutoAdjustMirrorHSize)
1456*53ee8cc1Swenshuai.xi {
1457*53ee8cc1Swenshuai.xi //if Vmirror is not enable, shift HRblkSize. Otherwise, Dram start will be re-calculated at v-mirror.
1458*53ee8cc1Swenshuai.xi if(!bVMirror)
1459*53ee8cc1Swenshuai.xi {
1460*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = pinfo->u32DRAMRBlkStart + (MS_U32)pinfo->u16RBlkHRblkSize;
1461*53ee8cc1Swenshuai.xi }
1462*53ee8cc1Swenshuai.xi
1463*53ee8cc1Swenshuai.xi u64AddrTemp = pinfo->u32DRAMRBlkStart + (MS_U32)pinfo->u16RBlkHRblkSize;
1464*53ee8cc1Swenshuai.xi
1465*53ee8cc1Swenshuai.xi if (u64AddrTemp >= MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8Gop) )
1466*53ee8cc1Swenshuai.xi {
1467*53ee8cc1Swenshuai.xi if(MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8Gop) != 1)
1468*53ee8cc1Swenshuai.xi {
1469*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = u64AddrTemp - MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8Gop);//Back to last MIU word of the line
1470*53ee8cc1Swenshuai.xi }
1471*53ee8cc1Swenshuai.xi else
1472*53ee8cc1Swenshuai.xi {
1473*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = u64AddrTemp;
1474*53ee8cc1Swenshuai.xi }
1475*53ee8cc1Swenshuai.xi }
1476*53ee8cc1Swenshuai.xi else
1477*53ee8cc1Swenshuai.xi {
1478*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = u64AddrTemp;
1479*53ee8cc1Swenshuai.xi }
1480*53ee8cc1Swenshuai.xi
1481*53ee8cc1Swenshuai.xi if(pinfo->u16RBlkHRblkSize > (pinfo->u16DispHPixelEnd*_GOP_GetBPP(pInstance,pinfo->clrType)/8)) //Pitch and width not equal
1482*53ee8cc1Swenshuai.xi {
1483*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart -=(pinfo->u16RBlkHRblkSize - (pinfo->u16DispHPixelEnd*_GOP_GetBPP(pInstance,pinfo->clrType)/8));
1484*53ee8cc1Swenshuai.xi }
1485*53ee8cc1Swenshuai.xi }
1486*53ee8cc1Swenshuai.xi else
1487*53ee8cc1Swenshuai.xi {
1488*53ee8cc1Swenshuai.xi if(pinfo->u16RBlkHRblkSize > ((pinfo->u16DispHPixelEnd - pinfo->u16DispHPixelStart)*_GOP_GetBPP(pInstance,pinfo->clrType)/8)) //Pitch and width not equal
1489*53ee8cc1Swenshuai.xi {
1490*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart -= (pinfo->u16RBlkHRblkSize - ((pinfo->u16DispHPixelEnd - pinfo->u16DispHPixelStart)*_GOP_GetBPP(pInstance,pinfo->clrType)/8));
1491*53ee8cc1Swenshuai.xi }
1492*53ee8cc1Swenshuai.xi }
1493*53ee8cc1Swenshuai.xi SET_BIT(g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr, u8win);
1494*53ee8cc1Swenshuai.xi }
1495*53ee8cc1Swenshuai.xi if(bVMirror)
1496*53ee8cc1Swenshuai.xi {
1497*53ee8cc1Swenshuai.xi //reg_dram_rblk_str += reg_rblk_hsize * (reg_gwin_vend - reg_gwin_vstr)
1498*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGOPCtxShared->b32TileMode[u8Gop]) //if tile mode, we should not change dram address
1499*53ee8cc1Swenshuai.xi {
1500*53ee8cc1Swenshuai.xi //Warning message
1501*53ee8cc1Swenshuai.xi if( pinfo->u16RBlkVPixSize != (pinfo->u16DispVPixelEnd-pinfo->u16DispVPixelStart))
1502*53ee8cc1Swenshuai.xi {
1503*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(GOP_M_WARN("[%s][%d]Please to Check GwinInfo: u16RBlkVPixSize:0x%x not match (u16DispVPixelEnd=0x%x- u16DispVPixelStart=0x%x)\n",
1504*53ee8cc1Swenshuai.xi __FUNCTION__,__LINE__,pinfo->u16RBlkVPixSize, pinfo->u16DispVPixelEnd, pinfo->u16DispVPixelStart));
1505*53ee8cc1Swenshuai.xi }
1506*53ee8cc1Swenshuai.xi
1507*53ee8cc1Swenshuai.xi if(pinfo->u16RBlkVPixSize != 0)
1508*53ee8cc1Swenshuai.xi {
1509*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart += (pinfo->u16RBlkHRblkSize*(pinfo->u16RBlkVPixSize-1));
1510*53ee8cc1Swenshuai.xi }
1511*53ee8cc1Swenshuai.xi else
1512*53ee8cc1Swenshuai.xi {
1513*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart += (pinfo->u16RBlkHRblkSize*(pinfo->u16DispVPixelEnd-pinfo->u16DispVPixelStart-1));
1514*53ee8cc1Swenshuai.xi }
1515*53ee8cc1Swenshuai.xi SET_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, u8win);
1516*53ee8cc1Swenshuai.xi }
1517*53ee8cc1Swenshuai.xi }
1518*53ee8cc1Swenshuai.xi }
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi
_GOP_GWIN_SetTLBHVMirrorDRAMAddr(void * pInstance,MS_U8 u8win,MS_BOOL bHMirror,MS_BOOL bVMirror,GOP_GwinInfo * pinfo)1521*53ee8cc1Swenshuai.xi static void _GOP_GWIN_SetTLBHVMirrorDRAMAddr(void* pInstance,MS_U8 u8win, MS_BOOL bHMirror, MS_BOOL bVMirror, GOP_GwinInfo* pinfo)
1522*53ee8cc1Swenshuai.xi {
1523*53ee8cc1Swenshuai.xi MS_PHY u64AddrTemp=0;
1524*53ee8cc1Swenshuai.xi MS_U8 u8Gop = 0;
1525*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pinfo, GOP_M_FATAL("\npinfo is Null\n"));
1526*53ee8cc1Swenshuai.xi
1527*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1528*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1529*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1530*53ee8cc1Swenshuai.xi #endif
1531*53ee8cc1Swenshuai.xi u8Gop = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8win);
1532*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
1533*53ee8cc1Swenshuai.xi {
1534*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
1535*53ee8cc1Swenshuai.xi return;
1536*53ee8cc1Swenshuai.xi }
1537*53ee8cc1Swenshuai.xi
1538*53ee8cc1Swenshuai.xi if(bHMirror)
1539*53ee8cc1Swenshuai.xi {
1540*53ee8cc1Swenshuai.xi //if Vmirror is not enable, shift HRblkSize. Otherwise, Dram start will be re-calculated at v-mirror.
1541*53ee8cc1Swenshuai.xi if(!bVMirror)
1542*53ee8cc1Swenshuai.xi {
1543*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = pinfo->u32DRAMRBlkStart + (MS_U32)pinfo->u16RBlkHRblkSize;
1544*53ee8cc1Swenshuai.xi }
1545*53ee8cc1Swenshuai.xi
1546*53ee8cc1Swenshuai.xi u64AddrTemp = pinfo->u32DRAMRBlkStart + (MS_U32)pinfo->u16RBlkHRblkSize;
1547*53ee8cc1Swenshuai.xi
1548*53ee8cc1Swenshuai.xi if (u64AddrTemp >= MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8Gop) )
1549*53ee8cc1Swenshuai.xi {
1550*53ee8cc1Swenshuai.xi if(MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8Gop) != 1)
1551*53ee8cc1Swenshuai.xi {
1552*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = u64AddrTemp - MDrv_GOP_GetWordUnit(g_pGOPCtxLocal, u8Gop);//Back to last MIU word of the line
1553*53ee8cc1Swenshuai.xi }
1554*53ee8cc1Swenshuai.xi else
1555*53ee8cc1Swenshuai.xi {
1556*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = u64AddrTemp;
1557*53ee8cc1Swenshuai.xi }
1558*53ee8cc1Swenshuai.xi }
1559*53ee8cc1Swenshuai.xi else
1560*53ee8cc1Swenshuai.xi {
1561*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart = u64AddrTemp;
1562*53ee8cc1Swenshuai.xi }
1563*53ee8cc1Swenshuai.xi
1564*53ee8cc1Swenshuai.xi if(pinfo->u16RBlkHRblkSize > (pinfo->u16DispHPixelEnd*_GOP_GetBPP(pInstance,pinfo->clrType)/8)) //Pitch and width not equal
1565*53ee8cc1Swenshuai.xi {
1566*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart -=(pinfo->u16RBlkHRblkSize - (pinfo->u16DispHPixelEnd*_GOP_GetBPP(pInstance,pinfo->clrType)/8));
1567*53ee8cc1Swenshuai.xi }
1568*53ee8cc1Swenshuai.xi
1569*53ee8cc1Swenshuai.xi
1570*53ee8cc1Swenshuai.xi SET_BIT(g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr, u8win);
1571*53ee8cc1Swenshuai.xi }
1572*53ee8cc1Swenshuai.xi
1573*53ee8cc1Swenshuai.xi if(bVMirror)
1574*53ee8cc1Swenshuai.xi {
1575*53ee8cc1Swenshuai.xi //Warning message
1576*53ee8cc1Swenshuai.xi if( pinfo->u16RBlkVPixSize != (pinfo->u16DispVPixelEnd-pinfo->u16DispVPixelStart))
1577*53ee8cc1Swenshuai.xi {
1578*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(GOP_M_WARN("[%s][%d]Please to Check GwinInfo: u16RBlkVPixSize:0x%x not match (u16DispVPixelEnd=0x%x- u16DispVPixelStart=0x%x)\n",
1579*53ee8cc1Swenshuai.xi __FUNCTION__,__LINE__,pinfo->u16RBlkVPixSize, pinfo->u16DispVPixelEnd, pinfo->u16DispVPixelStart));
1580*53ee8cc1Swenshuai.xi }
1581*53ee8cc1Swenshuai.xi if(pinfo->u16RBlkVPixSize != 0)
1582*53ee8cc1Swenshuai.xi {
1583*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart += (pinfo->u16RBlkHRblkSize*(pinfo->u16RBlkVPixSize-1));
1584*53ee8cc1Swenshuai.xi }
1585*53ee8cc1Swenshuai.xi else
1586*53ee8cc1Swenshuai.xi {
1587*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart += (pinfo->u16RBlkHRblkSize*(pinfo->u16DispVPixelEnd-pinfo->u16DispVPixelStart-1));
1588*53ee8cc1Swenshuai.xi }
1589*53ee8cc1Swenshuai.xi SET_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, u8win);
1590*53ee8cc1Swenshuai.xi }
1591*53ee8cc1Swenshuai.xi }
1592*53ee8cc1Swenshuai.xi
GOP_GetWinInfo(void * pInstance,MS_U32 u32win,GOP_GwinInfo * pinfo)1593*53ee8cc1Swenshuai.xi MS_BOOL GOP_GetWinInfo(void* pInstance,MS_U32 u32win, GOP_GwinInfo* pinfo)
1594*53ee8cc1Swenshuai.xi {
1595*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
1596*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1597*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1598*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1599*53ee8cc1Swenshuai.xi #endif
1600*53ee8cc1Swenshuai.xi
1601*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance, u32win))
1602*53ee8cc1Swenshuai.xi {
1603*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32win);
1604*53ee8cc1Swenshuai.xi return FALSE;
1605*53ee8cc1Swenshuai.xi }
1606*53ee8cc1Swenshuai.xi memset(pinfo, 0, sizeof(GOP_GwinInfo));
1607*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u32win);
1608*53ee8cc1Swenshuai.xi
1609*53ee8cc1Swenshuai.xi if(u8GOP == GOPTYPE.GOP0)
1610*53ee8cc1Swenshuai.xi {
1611*53ee8cc1Swenshuai.xi _GOP_GetGop0WinInfo(pInstance,u32win, pinfo);
1612*53ee8cc1Swenshuai.xi }
1613*53ee8cc1Swenshuai.xi else if (u8GOP == GOPTYPE.GOP1)
1614*53ee8cc1Swenshuai.xi {
1615*53ee8cc1Swenshuai.xi _GOP_GetGop1WinInfo(pInstance,u32win, pinfo);
1616*53ee8cc1Swenshuai.xi }
1617*53ee8cc1Swenshuai.xi else
1618*53ee8cc1Swenshuai.xi {
1619*53ee8cc1Swenshuai.xi _GOP_GetGop23WinInfo(pInstance,u32win, pinfo);
1620*53ee8cc1Swenshuai.xi }
1621*53ee8cc1Swenshuai.xi
1622*53ee8cc1Swenshuai.xi return TRUE;
1623*53ee8cc1Swenshuai.xi }
1624*53ee8cc1Swenshuai.xi
_SetGop0WinInfo(void * pInstance,MS_U8 u8win,GOP_GwinInfo * pinfo)1625*53ee8cc1Swenshuai.xi static void _SetGop0WinInfo(void* pInstance,MS_U8 u8win, GOP_GwinInfo* pinfo)
1626*53ee8cc1Swenshuai.xi {
1627*53ee8cc1Swenshuai.xi DRV_GOPDstType Gop0Dst =E_DRV_GOP_DST_INVALID;
1628*53ee8cc1Swenshuai.xi GOP_OupputColor gopOut;
1629*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
1630*53ee8cc1Swenshuai.xi MS_BOOL bRIUHMirror = FALSE, bRIUVMirror = FALSE;
1631*53ee8cc1Swenshuai.xi MS_PHY TLBMainAddr=0;
1632*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1633*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1634*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1635*53ee8cc1Swenshuai.xi #endif
1636*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, E_GOP0, &Gop0Dst);
1637*53ee8cc1Swenshuai.xi
1638*53ee8cc1Swenshuai.xi if (Gop0Dst ==E_DRV_GOP_DST_INVALID)
1639*53ee8cc1Swenshuai.xi {
1640*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n Get GOP destination fail!\n"));
1641*53ee8cc1Swenshuai.xi return;
1642*53ee8cc1Swenshuai.xi }
1643*53ee8cc1Swenshuai.xi
1644*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[E_GOP0])
1645*53ee8cc1Swenshuai.xi {
1646*53ee8cc1Swenshuai.xi if(u8win != 0)
1647*53ee8cc1Swenshuai.xi {
1648*53ee8cc1Swenshuai.xi GOP_M_DBUG("\n[%s] not support TLB mode, gwin id:%d ", __FUNCTION__, u8win);
1649*53ee8cc1Swenshuai.xi }
1650*53ee8cc1Swenshuai.xi }
1651*53ee8cc1Swenshuai.xi
1652*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,Gop0Dst, &bHMirror, &bVMirror);
1653*53ee8cc1Swenshuai.xi
1654*53ee8cc1Swenshuai.xi if(( Gop0Dst == E_DRV_GOP_DST_OP0) ||( Gop0Dst == E_DRV_GOP_DST_FRC) || ( Gop0Dst == E_DRV_GOP_DST_BYPASS) || ( Gop0Dst == E_DRV_GOP_DST_OP_DUAL_RATE))//GOP destination is OP
1655*53ee8cc1Swenshuai.xi {
1656*53ee8cc1Swenshuai.xi
1657*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP0])
1658*53ee8cc1Swenshuai.xi {
1659*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_RGB;
1660*53ee8cc1Swenshuai.xi }
1661*53ee8cc1Swenshuai.xi else
1662*53ee8cc1Swenshuai.xi {
1663*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP0];
1664*53ee8cc1Swenshuai.xi }
1665*53ee8cc1Swenshuai.xi
1666*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP0, gopOut);
1667*53ee8cc1Swenshuai.xi
1668*53ee8cc1Swenshuai.xi if ((g_pGOPCtxLocal->pGopChipProperty->bOpInterlace == TRUE) && ( Gop0Dst == E_DRV_GOP_DST_OP0))
1669*53ee8cc1Swenshuai.xi {
1670*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, FALSE);
1671*53ee8cc1Swenshuai.xi }
1672*53ee8cc1Swenshuai.xi else
1673*53ee8cc1Swenshuai.xi {
1674*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, TRUE);
1675*53ee8cc1Swenshuai.xi }
1676*53ee8cc1Swenshuai.xi
1677*53ee8cc1Swenshuai.xi }
1678*53ee8cc1Swenshuai.xi else if( Gop0Dst == E_DRV_GOP_DST_IP0 || Gop0Dst == E_DRV_GOP_DST_IP0_SUB || Gop0Dst == E_DRV_GOP_DST_IP1 || Gop0Dst == E_DRV_GOP_DST_VOP || Gop0Dst == E_DRV_GOP_DST_VOP_SUB)//GOP destination is IP
1679*53ee8cc1Swenshuai.xi {
1680*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1681*53ee8cc1Swenshuai.xi
1682*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1683*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP0])
1684*53ee8cc1Swenshuai.xi {
1685*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_YUV;
1686*53ee8cc1Swenshuai.xi }
1687*53ee8cc1Swenshuai.xi else
1688*53ee8cc1Swenshuai.xi {
1689*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP0];
1690*53ee8cc1Swenshuai.xi }
1691*53ee8cc1Swenshuai.xi
1692*53ee8cc1Swenshuai.xi if( bInterlace ) //interlace mode
1693*53ee8cc1Swenshuai.xi {
1694*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP0, gopOut);
1695*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, FALSE);
1696*53ee8cc1Swenshuai.xi }
1697*53ee8cc1Swenshuai.xi else //Progressive mode
1698*53ee8cc1Swenshuai.xi {
1699*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP0, gopOut);
1700*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, TRUE);
1701*53ee8cc1Swenshuai.xi }
1702*53ee8cc1Swenshuai.xi }
1703*53ee8cc1Swenshuai.xi else // GOP destination is VE,MVOP
1704*53ee8cc1Swenshuai.xi {
1705*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP0])
1706*53ee8cc1Swenshuai.xi {
1707*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_YUV;
1708*53ee8cc1Swenshuai.xi }
1709*53ee8cc1Swenshuai.xi else
1710*53ee8cc1Swenshuai.xi {
1711*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP0];
1712*53ee8cc1Swenshuai.xi }
1713*53ee8cc1Swenshuai.xi
1714*53ee8cc1Swenshuai.xi #if (FPGA_TEST)
1715*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, TRUE); //progressive output in FPGA environement.
1716*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP0, DRV_GOPOUT_RGB);
1717*53ee8cc1Swenshuai.xi #else
1718*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP0, gopOut);
1719*53ee8cc1Swenshuai.xi if(( Gop0Dst == E_DRV_GOP_DST_MIXER2VE) || ( Gop0Dst == E_DRV_GOP_DST_MIXER2OP) || ( Gop0Dst == E_DRV_GOP_DST_DIP))
1720*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, TRUE);
1721*53ee8cc1Swenshuai.xi else
1722*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP0, FALSE);
1723*53ee8cc1Swenshuai.xi #endif
1724*53ee8cc1Swenshuai.xi }
1725*53ee8cc1Swenshuai.xi
1726*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bHMirror || g_pGOPCtxLocal->pGOPCtxShared->bVMirror)
1727*53ee8cc1Swenshuai.xi {
1728*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u64NonMirrorFBAdr = pinfo->u32DRAMRBlkStart;
1729*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[E_GOP0])
1730*53ee8cc1Swenshuai.xi {
1731*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,u8win, bHMirror, bVMirror, pinfo);
1732*53ee8cc1Swenshuai.xi }
1733*53ee8cc1Swenshuai.xi }
1734*53ee8cc1Swenshuai.xi MDrv_GOP_IsGOPMirrorEnable(g_pGOPCtxLocal ,E_GOP0, &bRIUHMirror , &bRIUVMirror);
1735*53ee8cc1Swenshuai.xi
1736*53ee8cc1Swenshuai.xi if(bHMirror)
1737*53ee8cc1Swenshuai.xi {
1738*53ee8cc1Swenshuai.xi /*save gwin postion before h mirror setting*/
1739*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHStr = pinfo->u16DispHPixelStart;
1740*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHEnd = pinfo->u16DispHPixelEnd;
1741*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorGOP0WinX = pinfo->u16WinX;
1742*53ee8cc1Swenshuai.xi
1743*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, E_GOP0, TRUE);
1744*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_HPos, pinfo);
1745*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_X, pinfo);
1746*53ee8cc1Swenshuai.xi }
1747*53ee8cc1Swenshuai.xi else
1748*53ee8cc1Swenshuai.xi {
1749*53ee8cc1Swenshuai.xi //System is mirror, but bHMirror=FALSE, so need GOP mirror off
1750*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bHMirror || (bRIUHMirror==TRUE) )
1751*53ee8cc1Swenshuai.xi {
1752*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, E_GOP0, FALSE);
1753*53ee8cc1Swenshuai.xi }
1754*53ee8cc1Swenshuai.xi }
1755*53ee8cc1Swenshuai.xi if (!(g_pGOPCtxLocal->pGOPCtxShared->bHMirror && ((Gop0Dst == E_DRV_GOP_DST_OP0)||( Gop0Dst == E_DRV_GOP_DST_FRC) ||(Gop0Dst == E_DRV_GOP_DST_BYPASS))))
1756*53ee8cc1Swenshuai.xi {
1757*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_H_Dup)
1758*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd = (pinfo->u16DispHPixelEnd<< 1) - pinfo->u16DispHPixelStart;
1759*53ee8cc1Swenshuai.xi }
1760*53ee8cc1Swenshuai.xi
1761*53ee8cc1Swenshuai.xi if(bVMirror)
1762*53ee8cc1Swenshuai.xi {
1763*53ee8cc1Swenshuai.xi /*save gwin postion before V mirror setting*/
1764*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVStr = pinfo->u16DispVPixelStart;
1765*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVEnd = pinfo->u16DispVPixelEnd;
1766*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorGOP0WinY = pinfo->u16WinY;
1767*53ee8cc1Swenshuai.xi
1768*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, E_GOP0, TRUE);
1769*53ee8cc1Swenshuai.xi //SET_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, u8win);
1770*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_VPos, pinfo);
1771*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_Y, pinfo);
1772*53ee8cc1Swenshuai.xi }
1773*53ee8cc1Swenshuai.xi else
1774*53ee8cc1Swenshuai.xi {
1775*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bVMirror || (bRIUVMirror==TRUE) )//System is mirror, but bHMirror=FALSE, so need GOP mirror off
1776*53ee8cc1Swenshuai.xi {
1777*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, E_GOP0, FALSE);
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi }
1780*53ee8cc1Swenshuai.xi
1781*53ee8cc1Swenshuai.xi //if (!(g_pGOPCtxLocal->pGOPCtxShared->bVMirror))
1782*53ee8cc1Swenshuai.xi {
1783*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
1784*53ee8cc1Swenshuai.xi {
1785*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1786*53ee8cc1Swenshuai.xi
1787*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1788*53ee8cc1Swenshuai.xi if( ((Gop0Dst == E_DRV_GOP_DST_IP0) || (Gop0Dst == E_DRV_GOP_DST_IP1) || (Gop0Dst == E_DRV_GOP_DST_IP0_SUB) || (Gop0Dst == E_DRV_GOP_DST_VOP) || (Gop0Dst == E_DRV_GOP_DST_VOP_SUB)) && bInterlace )
1789*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (((pinfo->u16DispVPixelEnd<<1) - pinfo->u16DispVPixelStart) / 2);
1790*53ee8cc1Swenshuai.xi else if((Gop0Dst == E_DRV_GOP_DST_VE) || (Gop0Dst == E_DRV_GOP_DST_OP1))
1791*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (((pinfo->u16DispVPixelEnd<<1) - pinfo->u16DispVPixelStart) / 2);
1792*53ee8cc1Swenshuai.xi else
1793*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (pinfo->u16DispVPixelEnd << 1) - pinfo->u16DispVPixelStart;
1794*53ee8cc1Swenshuai.xi }
1795*53ee8cc1Swenshuai.xi else
1796*53ee8cc1Swenshuai.xi {
1797*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1798*53ee8cc1Swenshuai.xi
1799*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1800*53ee8cc1Swenshuai.xi if( ((Gop0Dst == E_DRV_GOP_DST_IP0) || (Gop0Dst == E_DRV_GOP_DST_IP1) || (Gop0Dst == E_DRV_GOP_DST_IP0_SUB) || (Gop0Dst == E_DRV_GOP_DST_VOP) || (Gop0Dst == E_DRV_GOP_DST_VOP_SUB)) && bInterlace )
1801*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart) / 2;
1802*53ee8cc1Swenshuai.xi else if((Gop0Dst == E_DRV_GOP_DST_VE) || (Gop0Dst == E_DRV_GOP_DST_OP1))
1803*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart) / 2;
1804*53ee8cc1Swenshuai.xi else if (((Gop0Dst == E_DRV_GOP_DST_OP0) || (Gop0Dst == E_DRV_GOP_DST_FRC) || (Gop0Dst == E_DRV_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,0))
1805*53ee8cc1Swenshuai.xi {
1806*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = pinfo->u16DispVPixelStart/2;
1807*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelEnd/2;;
1808*53ee8cc1Swenshuai.xi }
1809*53ee8cc1Swenshuai.xi }
1810*53ee8cc1Swenshuai.xi }
1811*53ee8cc1Swenshuai.xi
1812*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetWinFmt(g_pGOPCtxLocal, u8win, (DRV_GOPColorType)pinfo->clrType);
1813*53ee8cc1Swenshuai.xi //MDrv_GOP_GWIN_UpdateRegOnce(g_pGOPCtxLocal, FALSE);
1814*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[E_GOP0])
1815*53ee8cc1Swenshuai.xi {
1816*53ee8cc1Swenshuai.xi TLBMainAddr = (pinfo->u32DRAMRBlkStart/PAGE_SIZE)*TLB_PER_ENTRY_SIZE + g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[E_GOP0];
1817*53ee8cc1Swenshuai.xi MDrv_GOP_SetTLBAddr(g_pGOPCtxLocal,E_GOP0,TLBMainAddr,g_pGOPCtxLocal->pGOPCtxShared->bHMirror,g_pGOPCtxLocal->pGOPCtxShared->bVMirror,(DRV_GOP_GWIN_INFO*)pinfo);
1818*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart= g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[E_GOP0] % (PAGE_SIZE*PER_MIU_TLB_ENTRY_COUNT);
1819*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinInfo(g_pGOPCtxLocal, u8win, (DRV_GOP_GWIN_INFO*)pinfo);
1820*53ee8cc1Swenshuai.xi }
1821*53ee8cc1Swenshuai.xi else
1822*53ee8cc1Swenshuai.xi {
1823*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinInfo(g_pGOPCtxLocal, u8win, (DRV_GOP_GWIN_INFO*)pinfo);
1824*53ee8cc1Swenshuai.xi }
1825*53ee8cc1Swenshuai.xi GOP_M_INFO("GWIN_SetWin(%d): [adr(B), RBsz, offset] = [%td, %d, %d]\n", \
1826*53ee8cc1Swenshuai.xi u8win,\
1827*53ee8cc1Swenshuai.xi (ptrdiff_t)pinfo->u32DRAMRBlkStart,\
1828*53ee8cc1Swenshuai.xi pinfo->u16RBlkHPixSize * pinfo->u16RBlkVPixSize / (64/_GOP_GetBPP(pInstance,pinfo->clrType)),\
1829*53ee8cc1Swenshuai.xi (pinfo->u16WinY * pinfo->u16RBlkHPixSize + pinfo->u16WinX)/(64/_GOP_GetBPP(pInstance,pinfo->clrType)) );
1830*53ee8cc1Swenshuai.xi GOP_M_INFO("\t[Vst, Vend, Hst, Hend, GwinHsz] = [%d, %d, %d, %d, %d]\n",\
1831*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart, \
1832*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd, \
1833*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelStart/(64/_GOP_GetBPP(pInstance,pinfo->clrType)), \
1834*53ee8cc1Swenshuai.xi pinfo->u16DispHPixelEnd/(64/_GOP_GetBPP(pInstance,pinfo->clrType)),\
1835*53ee8cc1Swenshuai.xi pinfo->u16RBlkHPixSize/(64/_GOP_GetBPP(pInstance,pinfo->clrType)) );
1836*53ee8cc1Swenshuai.xi }
1837*53ee8cc1Swenshuai.xi
_SetGop1WinInfo(void * pInstance,MS_U8 u8win,GOP_GwinInfo * pinfo)1838*53ee8cc1Swenshuai.xi static void _SetGop1WinInfo(void* pInstance,MS_U8 u8win, GOP_GwinInfo* pinfo)
1839*53ee8cc1Swenshuai.xi {
1840*53ee8cc1Swenshuai.xi DRV_GOPDstType Gop1Dst =E_DRV_GOP_DST_INVALID;
1841*53ee8cc1Swenshuai.xi GOP_OupputColor gopOut;
1842*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
1843*53ee8cc1Swenshuai.xi MS_BOOL bRIUHMirror = FALSE, bRIUVMirror = FALSE;
1844*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
1845*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
1846*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
1847*53ee8cc1Swenshuai.xi #endif
1848*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, E_GOP1, &Gop1Dst);
1849*53ee8cc1Swenshuai.xi if (Gop1Dst ==E_DRV_GOP_DST_INVALID)
1850*53ee8cc1Swenshuai.xi {
1851*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n Get GOP destination fail!\n"));
1852*53ee8cc1Swenshuai.xi return;
1853*53ee8cc1Swenshuai.xi }
1854*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,Gop1Dst, &bHMirror, &bVMirror);
1855*53ee8cc1Swenshuai.xi if(( Gop1Dst == E_DRV_GOP_DST_OP0 )||( Gop1Dst == E_DRV_GOP_DST_FRC) || ( Gop1Dst == E_DRV_GOP_DST_BYPASS) || (Gop1Dst == E_DRV_GOP_DST_OP_DUAL_RATE)) //GOP destination is OP
1856*53ee8cc1Swenshuai.xi {
1857*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP1])
1858*53ee8cc1Swenshuai.xi {
1859*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_RGB;
1860*53ee8cc1Swenshuai.xi }
1861*53ee8cc1Swenshuai.xi else
1862*53ee8cc1Swenshuai.xi {
1863*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP1];
1864*53ee8cc1Swenshuai.xi }
1865*53ee8cc1Swenshuai.xi
1866*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP1, gopOut);
1867*53ee8cc1Swenshuai.xi
1868*53ee8cc1Swenshuai.xi if ((g_pGOPCtxLocal->pGopChipProperty->bOpInterlace == TRUE) && ( Gop1Dst == E_DRV_GOP_DST_OP0))
1869*53ee8cc1Swenshuai.xi {
1870*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, FALSE);
1871*53ee8cc1Swenshuai.xi }
1872*53ee8cc1Swenshuai.xi else
1873*53ee8cc1Swenshuai.xi {
1874*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, TRUE);
1875*53ee8cc1Swenshuai.xi }
1876*53ee8cc1Swenshuai.xi }
1877*53ee8cc1Swenshuai.xi else if(Gop1Dst == E_DRV_GOP_DST_IP0 || Gop1Dst == E_DRV_GOP_DST_IP0_SUB || Gop1Dst == E_DRV_GOP_DST_IP1 || Gop1Dst == E_DRV_GOP_DST_VOP || Gop1Dst == E_DRV_GOP_DST_VOP_SUB)// GOP destination is IP
1878*53ee8cc1Swenshuai.xi {
1879*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1880*53ee8cc1Swenshuai.xi
1881*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1882*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP1])
1883*53ee8cc1Swenshuai.xi {
1884*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_YUV;
1885*53ee8cc1Swenshuai.xi }
1886*53ee8cc1Swenshuai.xi else
1887*53ee8cc1Swenshuai.xi {
1888*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP1];
1889*53ee8cc1Swenshuai.xi }
1890*53ee8cc1Swenshuai.xi
1891*53ee8cc1Swenshuai.xi if( bInterlace ) //interlace mode
1892*53ee8cc1Swenshuai.xi {
1893*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP1, gopOut);
1894*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, FALSE);
1895*53ee8cc1Swenshuai.xi }
1896*53ee8cc1Swenshuai.xi else //Progressive mode
1897*53ee8cc1Swenshuai.xi {
1898*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP1, gopOut);
1899*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, TRUE);
1900*53ee8cc1Swenshuai.xi }
1901*53ee8cc1Swenshuai.xi }
1902*53ee8cc1Swenshuai.xi else // GOP destination is VE,MVOP
1903*53ee8cc1Swenshuai.xi {
1904*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[E_GOP1])
1905*53ee8cc1Swenshuai.xi {
1906*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_YUV;
1907*53ee8cc1Swenshuai.xi }
1908*53ee8cc1Swenshuai.xi else
1909*53ee8cc1Swenshuai.xi {
1910*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[1];
1911*53ee8cc1Swenshuai.xi }
1912*53ee8cc1Swenshuai.xi
1913*53ee8cc1Swenshuai.xi #if(FPGA_TEST)
1914*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, TRUE); //progressive output in FPGA environement.
1915*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP1, DRV_GOPOUT_RGB);
1916*53ee8cc1Swenshuai.xi #else
1917*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,E_GOP1, DRV_GOPOUT_YUV);
1918*53ee8cc1Swenshuai.xi if(( Gop1Dst == E_DRV_GOP_DST_MIXER2VE) || ( Gop1Dst == E_DRV_GOP_DST_MIXER2OP) || ( Gop1Dst == E_DRV_GOP_DST_DIP))
1919*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, TRUE);
1920*53ee8cc1Swenshuai.xi else
1921*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, E_GOP1, FALSE);
1922*53ee8cc1Swenshuai.xi #endif
1923*53ee8cc1Swenshuai.xi
1924*53ee8cc1Swenshuai.xi }
1925*53ee8cc1Swenshuai.xi
1926*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bHMirror || g_pGOPCtxLocal->pGOPCtxShared->bVMirror)
1927*53ee8cc1Swenshuai.xi {
1928*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u64NonMirrorFBAdr = pinfo->u32DRAMRBlkStart;
1929*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,u8win, bHMirror, bVMirror, pinfo);
1930*53ee8cc1Swenshuai.xi }
1931*53ee8cc1Swenshuai.xi
1932*53ee8cc1Swenshuai.xi MDrv_GOP_IsGOPMirrorEnable(g_pGOPCtxLocal ,E_GOP1, &bRIUHMirror , &bRIUVMirror);
1933*53ee8cc1Swenshuai.xi
1934*53ee8cc1Swenshuai.xi if(bHMirror)
1935*53ee8cc1Swenshuai.xi {
1936*53ee8cc1Swenshuai.xi /*save gwin postion before h mirror setting*/
1937*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHStr = pinfo->u16DispHPixelStart;
1938*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHEnd = pinfo->u16DispHPixelEnd;
1939*53ee8cc1Swenshuai.xi
1940*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, E_GOP1, TRUE);
1941*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_HPos, pinfo);
1942*53ee8cc1Swenshuai.xi }
1943*53ee8cc1Swenshuai.xi else
1944*53ee8cc1Swenshuai.xi {
1945*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGOPCtxShared->bHMirror || (bRIUHMirror==TRUE)) )//System is mirror, but bHMirror=FALSE, so need GOP mirror off
1946*53ee8cc1Swenshuai.xi {
1947*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, E_GOP1, FALSE);
1948*53ee8cc1Swenshuai.xi }
1949*53ee8cc1Swenshuai.xi }
1950*53ee8cc1Swenshuai.xi
1951*53ee8cc1Swenshuai.xi if(bVMirror)
1952*53ee8cc1Swenshuai.xi {
1953*53ee8cc1Swenshuai.xi /*save gwin postion before V mirror setting*/
1954*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVStr = pinfo->u16DispVPixelStart;
1955*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVEnd = pinfo->u16DispVPixelEnd;
1956*53ee8cc1Swenshuai.xi
1957*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, E_GOP1, TRUE);
1958*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_VPos, pinfo);
1959*53ee8cc1Swenshuai.xi }
1960*53ee8cc1Swenshuai.xi else
1961*53ee8cc1Swenshuai.xi {
1962*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGOPCtxShared->bVMirror || (bRIUVMirror==TRUE)))//System is mirror, but bHMirror=FALSE, so need GOP mirror off
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, E_GOP1, FALSE);
1965*53ee8cc1Swenshuai.xi }
1966*53ee8cc1Swenshuai.xi }
1967*53ee8cc1Swenshuai.xi
1968*53ee8cc1Swenshuai.xi //if (!g_pGOPCtxLocal->pGOPCtxShared->bVMirror)
1969*53ee8cc1Swenshuai.xi {
1970*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
1971*53ee8cc1Swenshuai.xi {
1972*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1973*53ee8cc1Swenshuai.xi
1974*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1975*53ee8cc1Swenshuai.xi if( ((Gop1Dst == E_DRV_GOP_DST_IP0) || (Gop1Dst == E_DRV_GOP_DST_IP1) || (Gop1Dst == E_DRV_GOP_DST_IP0_SUB) || (Gop1Dst == E_DRV_GOP_DST_VOP) || (Gop1Dst == E_DRV_GOP_DST_VOP_SUB)) && bInterlace )
1976*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (((pinfo->u16DispVPixelEnd<<1) - pinfo->u16DispVPixelStart) / 2);
1977*53ee8cc1Swenshuai.xi else if((Gop1Dst == E_DRV_GOP_DST_VE) || (Gop1Dst == E_DRV_GOP_DST_OP1))
1978*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (((pinfo->u16DispVPixelEnd<<1) - pinfo->u16DispVPixelStart) / 2);
1979*53ee8cc1Swenshuai.xi else
1980*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (pinfo->u16DispVPixelEnd << 1) - pinfo->u16DispVPixelStart;
1981*53ee8cc1Swenshuai.xi }
1982*53ee8cc1Swenshuai.xi else
1983*53ee8cc1Swenshuai.xi {
1984*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
1985*53ee8cc1Swenshuai.xi
1986*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
1987*53ee8cc1Swenshuai.xi if( ((Gop1Dst == E_DRV_GOP_DST_IP0) || (Gop1Dst == E_DRV_GOP_DST_IP1) || (Gop1Dst == E_DRV_GOP_DST_IP0_SUB) || (Gop1Dst == E_DRV_GOP_DST_VOP) || (Gop1Dst == E_DRV_GOP_DST_VOP_SUB)) && bInterlace )
1988*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart) / 2;
1989*53ee8cc1Swenshuai.xi else if((Gop1Dst == E_DRV_GOP_DST_VE) || (Gop1Dst == E_DRV_GOP_DST_OP1))
1990*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart) / 2;
1991*53ee8cc1Swenshuai.xi else if (((Gop1Dst == E_DRV_GOP_DST_OP0) || (Gop1Dst == E_DRV_GOP_DST_FRC) || (Gop1Dst == E_DRV_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,1))
1992*53ee8cc1Swenshuai.xi {
1993*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = pinfo->u16DispVPixelStart/2;
1994*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelEnd/2;
1995*53ee8cc1Swenshuai.xi }
1996*53ee8cc1Swenshuai.xi }
1997*53ee8cc1Swenshuai.xi }
1998*53ee8cc1Swenshuai.xi
1999*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetWinFmt(g_pGOPCtxLocal, u8win, (DRV_GOPColorType)pinfo->clrType);
2000*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinInfo(g_pGOPCtxLocal, u8win, (DRV_GOP_GWIN_INFO*)pinfo);
2001*53ee8cc1Swenshuai.xi }
2002*53ee8cc1Swenshuai.xi
_SetGop23WinInfo(void * pInstance,MS_U8 u8win,GOP_GwinInfo * pinfo)2003*53ee8cc1Swenshuai.xi static void _SetGop23WinInfo(void* pInstance,MS_U8 u8win, GOP_GwinInfo* pinfo)
2004*53ee8cc1Swenshuai.xi {
2005*53ee8cc1Swenshuai.xi DRV_GOPDstType Gop23Dst =E_DRV_GOP_DST_INVALID;
2006*53ee8cc1Swenshuai.xi GOP_OupputColor gopOut;
2007*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
2008*53ee8cc1Swenshuai.xi MS_BOOL bRIUHMirror = FALSE, bRIUVMirror = FALSE;
2009*53ee8cc1Swenshuai.xi MS_PHY TLBMainAddr=0;
2010*53ee8cc1Swenshuai.xi MS_U8 u8GOP=0;
2011*53ee8cc1Swenshuai.xi MS_U8 u8GWinBase=0;
2012*53ee8cc1Swenshuai.xi MS_U8 i;
2013*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2014*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2015*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2016*53ee8cc1Swenshuai.xi #endif
2017*53ee8cc1Swenshuai.xi if( !MDrv_GOP_HasGop1GPalette(g_pGOPCtxLocal) && (pinfo->clrType==E_GOP_COLOR_I8 || pinfo->clrType==E_GOP_COLOR_2266\
2018*53ee8cc1Swenshuai.xi ||pinfo->clrType==E_GOP_COLOR_RGB555_BLINK))
2019*53ee8cc1Swenshuai.xi {
2020*53ee8cc1Swenshuai.xi GOP_M_ERR("\n[%s] not support gwin id:%d index mode", __FUNCTION__, u8win);
2021*53ee8cc1Swenshuai.xi return;
2022*53ee8cc1Swenshuai.xi }
2023*53ee8cc1Swenshuai.xi
2024*53ee8cc1Swenshuai.xi u8GOP=MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8win);
2025*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOP, &Gop23Dst);
2026*53ee8cc1Swenshuai.xi if (Gop23Dst ==E_DRV_GOP_DST_INVALID)
2027*53ee8cc1Swenshuai.xi {
2028*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n Get GOP destination fail!\n"));
2029*53ee8cc1Swenshuai.xi return;
2030*53ee8cc1Swenshuai.xi }
2031*53ee8cc1Swenshuai.xi
2032*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP])
2033*53ee8cc1Swenshuai.xi {
2034*53ee8cc1Swenshuai.xi u8GWinBase=0;
2035*53ee8cc1Swenshuai.xi for(i=0;i<u8GOP;i++)
2036*53ee8cc1Swenshuai.xi {
2037*53ee8cc1Swenshuai.xi u8GWinBase += MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, i);
2038*53ee8cc1Swenshuai.xi }
2039*53ee8cc1Swenshuai.xi if(u8win != u8GWinBase)
2040*53ee8cc1Swenshuai.xi {
2041*53ee8cc1Swenshuai.xi GOP_M_DBUG("\n[%s] not support TLB mode, gwin id:%d ", __FUNCTION__, u8win);
2042*53ee8cc1Swenshuai.xi }
2043*53ee8cc1Swenshuai.xi }
2044*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,Gop23Dst, &bHMirror, &bVMirror);
2045*53ee8cc1Swenshuai.xi if(( Gop23Dst == E_DRV_GOP_DST_OP0)||( Gop23Dst == E_DRV_GOP_DST_FRC)|| ( Gop23Dst == E_DRV_GOP_DST_BYPASS) || ( Gop23Dst == E_DRV_GOP_DST_OP_DUAL_RATE)) //GOP destination is OP
2046*53ee8cc1Swenshuai.xi {
2047*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP])
2048*53ee8cc1Swenshuai.xi {
2049*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_RGB;
2050*53ee8cc1Swenshuai.xi }
2051*53ee8cc1Swenshuai.xi else
2052*53ee8cc1Swenshuai.xi {
2053*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP];
2054*53ee8cc1Swenshuai.xi }
2055*53ee8cc1Swenshuai.xi
2056*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, gopOut);
2057*53ee8cc1Swenshuai.xi
2058*53ee8cc1Swenshuai.xi if ((g_pGOPCtxLocal->pGopChipProperty->bOpInterlace == TRUE) && ( Gop23Dst == E_DRV_GOP_DST_OP0))
2059*53ee8cc1Swenshuai.xi {
2060*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
2061*53ee8cc1Swenshuai.xi }
2062*53ee8cc1Swenshuai.xi else
2063*53ee8cc1Swenshuai.xi {
2064*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
2065*53ee8cc1Swenshuai.xi }
2066*53ee8cc1Swenshuai.xi }
2067*53ee8cc1Swenshuai.xi else if (Gop23Dst == E_DRV_GOP_DST_IP0 || Gop23Dst==E_DRV_GOP_DST_IP0_SUB || Gop23Dst == E_DRV_GOP_DST_IP1 || Gop23Dst == E_DRV_GOP_DST_VOP || Gop23Dst == E_DRV_GOP_DST_VOP_SUB) // GOP destination is IP
2068*53ee8cc1Swenshuai.xi {
2069*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
2070*53ee8cc1Swenshuai.xi
2071*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
2072*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP])
2073*53ee8cc1Swenshuai.xi {
2074*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_YUV;
2075*53ee8cc1Swenshuai.xi }
2076*53ee8cc1Swenshuai.xi else
2077*53ee8cc1Swenshuai.xi {
2078*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP];
2079*53ee8cc1Swenshuai.xi }
2080*53ee8cc1Swenshuai.xi
2081*53ee8cc1Swenshuai.xi if(bInterlace) //interlace mode
2082*53ee8cc1Swenshuai.xi {
2083*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, gopOut);
2084*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
2085*53ee8cc1Swenshuai.xi }
2086*53ee8cc1Swenshuai.xi else //Progressive mode
2087*53ee8cc1Swenshuai.xi {
2088*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, gopOut);
2089*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
2090*53ee8cc1Swenshuai.xi }
2091*53ee8cc1Swenshuai.xi }
2092*53ee8cc1Swenshuai.xi else // GOP destination is VE,MVOP
2093*53ee8cc1Swenshuai.xi {
2094*53ee8cc1Swenshuai.xi if((-1)==g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP])
2095*53ee8cc1Swenshuai.xi {
2096*53ee8cc1Swenshuai.xi gopOut = DRV_GOPOUT_YUV;
2097*53ee8cc1Swenshuai.xi }
2098*53ee8cc1Swenshuai.xi else
2099*53ee8cc1Swenshuai.xi {
2100*53ee8cc1Swenshuai.xi gopOut = (GOP_OupputColor)g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP];
2101*53ee8cc1Swenshuai.xi }
2102*53ee8cc1Swenshuai.xi
2103*53ee8cc1Swenshuai.xi #if(FPGA_TEST)
2104*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE); //progressive output in FPGA environement.
2105*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, DRV_GOPOUT_RGB);
2106*53ee8cc1Swenshuai.xi #else
2107*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, DRV_GOPOUT_YUV);
2108*53ee8cc1Swenshuai.xi if(( Gop23Dst == E_DRV_GOP_DST_MIXER2VE) || ( Gop23Dst == E_DRV_GOP_DST_MIXER2OP) || ( Gop23Dst == E_DRV_GOP_DST_DIP))
2109*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
2110*53ee8cc1Swenshuai.xi else
2111*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
2112*53ee8cc1Swenshuai.xi #endif
2113*53ee8cc1Swenshuai.xi
2114*53ee8cc1Swenshuai.xi }
2115*53ee8cc1Swenshuai.xi
2116*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bHMirror || g_pGOPCtxLocal->pGOPCtxShared->bVMirror)
2117*53ee8cc1Swenshuai.xi {
2118*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u64NonMirrorFBAdr = pinfo->u32DRAMRBlkStart;
2119*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP])
2120*53ee8cc1Swenshuai.xi {
2121*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,u8win, bHMirror, bVMirror, pinfo);
2122*53ee8cc1Swenshuai.xi }
2123*53ee8cc1Swenshuai.xi else
2124*53ee8cc1Swenshuai.xi {
2125*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,u8win, bHMirror, bVMirror, pinfo);
2126*53ee8cc1Swenshuai.xi }
2127*53ee8cc1Swenshuai.xi }
2128*53ee8cc1Swenshuai.xi
2129*53ee8cc1Swenshuai.xi MDrv_GOP_IsGOPMirrorEnable(g_pGOPCtxLocal ,u8GOP, &bRIUHMirror , &bRIUVMirror);
2130*53ee8cc1Swenshuai.xi
2131*53ee8cc1Swenshuai.xi if(bHMirror)
2132*53ee8cc1Swenshuai.xi {
2133*53ee8cc1Swenshuai.xi /*save gwin postion before h mirror setting*/
2134*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHStr = pinfo->u16DispHPixelStart;
2135*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorHEnd = pinfo->u16DispHPixelEnd;
2136*53ee8cc1Swenshuai.xi
2137*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, u8GOP, TRUE);
2138*53ee8cc1Swenshuai.xi
2139*53ee8cc1Swenshuai.xi if(!bCursorSupport(pInstance,u8GOP))
2140*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_HPos, pinfo);
2141*53ee8cc1Swenshuai.xi }
2142*53ee8cc1Swenshuai.xi else
2143*53ee8cc1Swenshuai.xi {
2144*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGOPCtxShared->bHMirror || (bRIUHMirror==TRUE)))//System is mirror, but bHMirror=FALSE, so need GOP mirror off
2145*53ee8cc1Swenshuai.xi {
2146*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, u8GOP, FALSE);
2147*53ee8cc1Swenshuai.xi }
2148*53ee8cc1Swenshuai.xi }
2149*53ee8cc1Swenshuai.xi
2150*53ee8cc1Swenshuai.xi if(bVMirror)
2151*53ee8cc1Swenshuai.xi {
2152*53ee8cc1Swenshuai.xi /*save gwin postion before V mirror setting*/
2153*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVStr = pinfo->u16DispVPixelStart;
2154*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u8win].u16NonMirrorVEnd = pinfo->u16DispVPixelEnd;
2155*53ee8cc1Swenshuai.xi
2156*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, u8GOP, TRUE);
2157*53ee8cc1Swenshuai.xi
2158*53ee8cc1Swenshuai.xi if(!bCursorSupport(pInstance,u8GOP))
2159*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorWinPos(pInstance,u8win, E_Set_VPos, pinfo);
2160*53ee8cc1Swenshuai.xi }
2161*53ee8cc1Swenshuai.xi else
2162*53ee8cc1Swenshuai.xi {
2163*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGOPCtxShared->bVMirror || (bRIUVMirror==TRUE)))//System is mirror, but bHMirror=FALSE, so need GOP mirror off
2164*53ee8cc1Swenshuai.xi {
2165*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, u8GOP, FALSE);
2166*53ee8cc1Swenshuai.xi }
2167*53ee8cc1Swenshuai.xi }
2168*53ee8cc1Swenshuai.xi
2169*53ee8cc1Swenshuai.xi //if (!g_pGOPCtxLocal->pGOPCtxShared->bVMirror)
2170*53ee8cc1Swenshuai.xi {
2171*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->Gwin_V_Dup)
2172*53ee8cc1Swenshuai.xi {
2173*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
2174*53ee8cc1Swenshuai.xi
2175*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
2176*53ee8cc1Swenshuai.xi if( ((Gop23Dst == E_DRV_GOP_DST_IP0) || (Gop23Dst == E_DRV_GOP_DST_IP1) || (Gop23Dst == E_DRV_GOP_DST_IP0_SUB) || (Gop23Dst == E_DRV_GOP_DST_VOP) || (Gop23Dst == E_DRV_GOP_DST_VOP_SUB)) && bInterlace )
2177*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (((pinfo->u16DispVPixelEnd<<1) - pinfo->u16DispVPixelStart) / 2);
2178*53ee8cc1Swenshuai.xi else if((Gop23Dst == E_DRV_GOP_DST_VE) || (Gop23Dst == E_DRV_GOP_DST_OP1))
2179*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (((pinfo->u16DispVPixelEnd<<1) - pinfo->u16DispVPixelStart) / 2);
2180*53ee8cc1Swenshuai.xi else
2181*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = (pinfo->u16DispVPixelEnd << 1) - pinfo->u16DispVPixelStart;
2182*53ee8cc1Swenshuai.xi }
2183*53ee8cc1Swenshuai.xi else
2184*53ee8cc1Swenshuai.xi {
2185*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
2186*53ee8cc1Swenshuai.xi
2187*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
2188*53ee8cc1Swenshuai.xi if( ((Gop23Dst == E_DRV_GOP_DST_IP0) || (Gop23Dst == E_DRV_GOP_DST_IP1) || (Gop23Dst == E_DRV_GOP_DST_IP0_SUB) || (Gop23Dst == E_DRV_GOP_DST_VOP) || (Gop23Dst == E_DRV_GOP_DST_VOP_SUB)) && bInterlace )
2189*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart) / 2;
2190*53ee8cc1Swenshuai.xi else if((Gop23Dst == E_DRV_GOP_DST_VE) || (Gop23Dst == E_DRV_GOP_DST_OP1))
2191*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelStart + (pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart) / 2;
2192*53ee8cc1Swenshuai.xi else if (((Gop23Dst == E_DRV_GOP_DST_OP0) || (Gop23Dst == E_DRV_GOP_DST_FRC) || (Gop23Dst == E_DRV_GOP_DST_BYPASS)) && !MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,u8GOP))
2193*53ee8cc1Swenshuai.xi {
2194*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelStart = pinfo->u16DispVPixelStart/2;
2195*53ee8cc1Swenshuai.xi pinfo->u16DispVPixelEnd = pinfo->u16DispVPixelEnd/2;
2196*53ee8cc1Swenshuai.xi }
2197*53ee8cc1Swenshuai.xi }
2198*53ee8cc1Swenshuai.xi }
2199*53ee8cc1Swenshuai.xi
2200*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP])
2201*53ee8cc1Swenshuai.xi {
2202*53ee8cc1Swenshuai.xi TLBMainAddr = (pinfo->u32DRAMRBlkStart/PAGE_SIZE)*TLB_PER_ENTRY_SIZE + g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[u8GOP];
2203*53ee8cc1Swenshuai.xi MDrv_GOP_SetTLBAddr(g_pGOPCtxLocal,u8GOP,TLBMainAddr,g_pGOPCtxLocal->pGOPCtxShared->bHMirror,g_pGOPCtxLocal->pGOPCtxShared->bVMirror,(DRV_GOP_GWIN_INFO*)pinfo);
2204*53ee8cc1Swenshuai.xi pinfo->u32DRAMRBlkStart= g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[u8GOP] % (PAGE_SIZE*PER_MIU_TLB_ENTRY_COUNT);
2205*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinInfo(g_pGOPCtxLocal, u8win, (DRV_GOP_GWIN_INFO*)pinfo);
2206*53ee8cc1Swenshuai.xi }
2207*53ee8cc1Swenshuai.xi else
2208*53ee8cc1Swenshuai.xi {
2209*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinInfo(g_pGOPCtxLocal, u8win, (DRV_GOP_GWIN_INFO*)pinfo);
2210*53ee8cc1Swenshuai.xi }
2211*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetWinFmt(g_pGOPCtxLocal, u8win, (DRV_GOPColorType)pinfo->clrType);
2212*53ee8cc1Swenshuai.xi }
2213*53ee8cc1Swenshuai.xi
_GOP_ArrangePoolMem(void * pInstance,GOP_FB_POOL * pFBPool)2214*53ee8cc1Swenshuai.xi static void _GOP_ArrangePoolMem(void* pInstance,GOP_FB_POOL *pFBPool)
2215*53ee8cc1Swenshuai.xi {
2216*53ee8cc1Swenshuai.xi MS_PHY lastAddr, curStartAdr;
2217*53ee8cc1Swenshuai.xi MS_U64 size2move, moveSize, gapSize, count;
2218*53ee8cc1Swenshuai.xi GOP_GwinInfo gWin;
2219*53ee8cc1Swenshuai.xi MS_PHY *src_PA,*dst_PA;
2220*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
2221*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
2222*53ee8cc1Swenshuai.xi MS_U8 u8WinID;
2223*53ee8cc1Swenshuai.xi
2224*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2225*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2226*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2227*53ee8cc1Swenshuai.xi #endif
2228*53ee8cc1Swenshuai.xi
2229*53ee8cc1Swenshuai.xi MS_U32 u32NextFBId = pFBPool->u32FirstFBIdInPool;
2230*53ee8cc1Swenshuai.xi
2231*53ee8cc1Swenshuai.xi memset(&gWin, 0, sizeof(GOP_GwinInfo));
2232*53ee8cc1Swenshuai.xi
2233*53ee8cc1Swenshuai.xi if(0 == pFBPool->u32GWinFB_Pool_MemLen)
2234*53ee8cc1Swenshuai.xi return;
2235*53ee8cc1Swenshuai.xi GOP_M_INFO("Arrange GOP pool %d\n", pFBPool->poolId);
2236*53ee8cc1Swenshuai.xi lastAddr = pFBPool->GWinFB_Pool_BaseAddr;
2237*53ee8cc1Swenshuai.xi
2238*53ee8cc1Swenshuai.xi
2239*53ee8cc1Swenshuai.xi if(fpEventNotify != NULL)
2240*53ee8cc1Swenshuai.xi fpEventNotify(E_GOP_EVENT_BUF_ARRANGE_BEGIN, NULL);
2241*53ee8cc1Swenshuai.xi else
2242*53ee8cc1Swenshuai.xi {
2243*53ee8cc1Swenshuai.xi //APIGOP_ASSERT(TRUE, printf("\nfpEvenNotifyBegin is Null"));
2244*53ee8cc1Swenshuai.xi GOP_M_INFO("%s: fpEvenNotifyBegin is not hooked. Bypass switch...\n", __FUNCTION__);
2245*53ee8cc1Swenshuai.xi }
2246*53ee8cc1Swenshuai.xi
2247*53ee8cc1Swenshuai.xi while(INVALID_POOL_NEXT_FBID != u32NextFBId)
2248*53ee8cc1Swenshuai.xi {
2249*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32NextFBId);
2250*53ee8cc1Swenshuai.xi
2251*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
2252*53ee8cc1Swenshuai.xi {
2253*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32NextFBId);
2254*53ee8cc1Swenshuai.xi return;
2255*53ee8cc1Swenshuai.xi }
2256*53ee8cc1Swenshuai.xi
2257*53ee8cc1Swenshuai.xi APIGOP_ASSERT(DRV_MAX_GWIN_FB_SUPPORT>u32NextFBId, GOP_M_FATAL("\nInvalid next fbid %td", (ptrdiff_t)u32NextFBId));
2258*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pwinFB->in_use && pwinFB->poolId==pFBPool->poolId
2259*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at fbid %td", (ptrdiff_t)u32NextFBId));
2260*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pwinFB->addr >= lastAddr
2261*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at fbid %td", (ptrdiff_t)u32NextFBId));
2262*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pwinFB->addr>= pFBPool->GWinFB_Pool_BaseAddr &&
2263*53ee8cc1Swenshuai.xi (pwinFB->addr+pwinFB->size)<= (pFBPool->GWinFB_Pool_BaseAddr+pFBPool->u32GWinFB_Pool_MemLen)
2264*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at fbid %td", (ptrdiff_t)u32NextFBId));
2265*53ee8cc1Swenshuai.xi
2266*53ee8cc1Swenshuai.xi APIGOP_ASSERT(IS_GWIN_SDRAM_ALIGN(pwinFB->addr)
2267*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nInvalid alignment for addr 0x%tx", (ptrdiff_t)pwinFB->addr));
2268*53ee8cc1Swenshuai.xi if(pwinFB->addr == lastAddr)
2269*53ee8cc1Swenshuai.xi {
2270*53ee8cc1Swenshuai.xi lastAddr += GWIN_SDRAM_PG_ALIGN(pwinFB->size);
2271*53ee8cc1Swenshuai.xi u32NextFBId = pwinFB->nextFBIdInPool;
2272*53ee8cc1Swenshuai.xi continue;
2273*53ee8cc1Swenshuai.xi }
2274*53ee8cc1Swenshuai.xi
2275*53ee8cc1Swenshuai.xi curStartAdr = pwinFB->addr;
2276*53ee8cc1Swenshuai.xi gapSize = curStartAdr - lastAddr;
2277*53ee8cc1Swenshuai.xi moveSize = count = 0;
2278*53ee8cc1Swenshuai.xi size2move = pwinFB->size;
2279*53ee8cc1Swenshuai.xi
2280*53ee8cc1Swenshuai.xi while (moveSize < size2move)
2281*53ee8cc1Swenshuai.xi {
2282*53ee8cc1Swenshuai.xi count = (moveSize + gapSize > size2move) ? (size2move - moveSize) : gapSize;
2283*53ee8cc1Swenshuai.xi src_PA = (MS_PHY *)MS_PA2KSEG1(curStartAdr + moveSize);
2284*53ee8cc1Swenshuai.xi dst_PA = (MS_PHY *)MS_PA2KSEG1(lastAddr + moveSize);
2285*53ee8cc1Swenshuai.xi memcpy(dst_PA,src_PA, count);
2286*53ee8cc1Swenshuai.xi moveSize += count;
2287*53ee8cc1Swenshuai.xi }
2288*53ee8cc1Swenshuai.xi
2289*53ee8cc1Swenshuai.xi pwinFB->addr = lastAddr;
2290*53ee8cc1Swenshuai.xi
2291*53ee8cc1Swenshuai.xi for (u8WinID = 0; (MS_U8)u8WinID < (MS_U8)g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum; u8WinID++)
2292*53ee8cc1Swenshuai.xi {
2293*53ee8cc1Swenshuai.xi if ((g_pGOPCtxLocal->pGOPCtxShared->gwinMap[(MS_U8)u8WinID].u32CurFBId ==u32NextFBId)
2294*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
2295*53ee8cc1Swenshuai.xi && (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[(MS_U8)u8WinID].u32GOPClientId == (GETPIDTYPE)getpid())
2296*53ee8cc1Swenshuai.xi #else
2297*53ee8cc1Swenshuai.xi && (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[(MS_U8)u8WinID].u32GOPClientId ==g_pGOPCtxLocal->u32GOPClientId)
2298*53ee8cc1Swenshuai.xi #endif
2299*53ee8cc1Swenshuai.xi )
2300*53ee8cc1Swenshuai.xi {
2301*53ee8cc1Swenshuai.xi if(GOP_GetWinInfo(pInstance,(MS_U8)u8WinID, &gWin))
2302*53ee8cc1Swenshuai.xi {
2303*53ee8cc1Swenshuai.xi gWin.u32DRAMRBlkStart = lastAddr;
2304*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8WinID);
2305*53ee8cc1Swenshuai.xi
2306*53ee8cc1Swenshuai.xi if(u8GOP == GOPTYPE.GOP0)
2307*53ee8cc1Swenshuai.xi {
2308*53ee8cc1Swenshuai.xi _SetGop0WinInfo(pInstance,(MS_U8)u8WinID, &gWin);
2309*53ee8cc1Swenshuai.xi }
2310*53ee8cc1Swenshuai.xi else if(u8GOP == GOPTYPE.GOP1)
2311*53ee8cc1Swenshuai.xi {
2312*53ee8cc1Swenshuai.xi _SetGop1WinInfo(pInstance,(MS_U8)u8WinID, &gWin);
2313*53ee8cc1Swenshuai.xi }
2314*53ee8cc1Swenshuai.xi else
2315*53ee8cc1Swenshuai.xi {
2316*53ee8cc1Swenshuai.xi _SetGop23WinInfo(pInstance,(MS_U8)u8WinID, &gWin);
2317*53ee8cc1Swenshuai.xi }
2318*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
2319*53ee8cc1Swenshuai.xi }
2320*53ee8cc1Swenshuai.xi else
2321*53ee8cc1Swenshuai.xi {
2322*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("!!!Alert!!! Serious error in arrange pool memory\n"));
2323*53ee8cc1Swenshuai.xi }
2324*53ee8cc1Swenshuai.xi }
2325*53ee8cc1Swenshuai.xi }
2326*53ee8cc1Swenshuai.xi
2327*53ee8cc1Swenshuai.xi lastAddr = GWIN_SDRAM_PG_ALIGN(pwinFB->addr + pwinFB->size);
2328*53ee8cc1Swenshuai.xi u32NextFBId = pwinFB->nextFBIdInPool;
2329*53ee8cc1Swenshuai.xi
2330*53ee8cc1Swenshuai.xi }
2331*53ee8cc1Swenshuai.xi
2332*53ee8cc1Swenshuai.xi if(fpEventNotify != NULL)
2333*53ee8cc1Swenshuai.xi fpEventNotify(E_GOP_EVENT_BUF_ARRANGE_END, NULL);
2334*53ee8cc1Swenshuai.xi else
2335*53ee8cc1Swenshuai.xi {
2336*53ee8cc1Swenshuai.xi APIGOP_ASSERT(TRUE, GOP_M_FATAL("\nfpEvenNotifyEnd is Null"));
2337*53ee8cc1Swenshuai.xi GOP_M_INFO("%s: fpEvenNotifyEnd is not hooked. Bypass switch...\n", __FUNCTION__);
2338*53ee8cc1Swenshuai.xi }
2339*53ee8cc1Swenshuai.xi }
2340*53ee8cc1Swenshuai.xi
_GOP_FreePoolMem(void * pInstance,GOP_FB_POOL * pFBPool,MS_U32 u32fbId)2341*53ee8cc1Swenshuai.xi static void _GOP_FreePoolMem(void* pInstance,GOP_FB_POOL *pFBPool, MS_U32 u32fbId)
2342*53ee8cc1Swenshuai.xi {
2343*53ee8cc1Swenshuai.xi MS_U32 u32CurFBId, u32PreFBId;
2344*53ee8cc1Swenshuai.xi MS_PHY lastAddr;
2345*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
2346*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pPrewinFB;
2347*53ee8cc1Swenshuai.xi
2348*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
2349*53ee8cc1Swenshuai.xi {
2350*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
2351*53ee8cc1Swenshuai.xi return;
2352*53ee8cc1Swenshuai.xi }
2353*53ee8cc1Swenshuai.xi
2354*53ee8cc1Swenshuai.xi u32CurFBId = pFBPool->u32FirstFBIdInPool;
2355*53ee8cc1Swenshuai.xi u32PreFBId = INVALID_POOL_NEXT_FBID;
2356*53ee8cc1Swenshuai.xi lastAddr = pFBPool->GWinFB_Pool_BaseAddr;
2357*53ee8cc1Swenshuai.xi
2358*53ee8cc1Swenshuai.xi while(INVALID_POOL_NEXT_FBID != u32CurFBId)
2359*53ee8cc1Swenshuai.xi {
2360*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32CurFBId);
2361*53ee8cc1Swenshuai.xi
2362*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
2363*53ee8cc1Swenshuai.xi {
2364*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32CurFBId);
2365*53ee8cc1Swenshuai.xi return;
2366*53ee8cc1Swenshuai.xi }
2367*53ee8cc1Swenshuai.xi
2368*53ee8cc1Swenshuai.xi APIGOP_ASSERT(DRV_MAX_GWIN_FB_SUPPORT>u32CurFBId, GOP_M_FATAL("\nInvalid next fbid %td", (ptrdiff_t)u32CurFBId));
2369*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pwinFB->in_use && pwinFB->poolId==pFBPool->poolId
2370*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at fbid %td", (ptrdiff_t)u32CurFBId));
2371*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pwinFB->addr >= lastAddr
2372*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at fbid %td", (ptrdiff_t)u32CurFBId));
2373*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pwinFB->addr>= pFBPool->GWinFB_Pool_BaseAddr &&
2374*53ee8cc1Swenshuai.xi (pwinFB->addr+pwinFB->size)<= (pFBPool->GWinFB_Pool_BaseAddr+pFBPool->u32GWinFB_Pool_MemLen)
2375*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at fbid %td", (ptrdiff_t)u32CurFBId));
2376*53ee8cc1Swenshuai.xi if(u32CurFBId == u32fbId)
2377*53ee8cc1Swenshuai.xi break;
2378*53ee8cc1Swenshuai.xi lastAddr = pwinFB->addr+pwinFB->size;
2379*53ee8cc1Swenshuai.xi u32PreFBId = u32CurFBId;
2380*53ee8cc1Swenshuai.xi u32CurFBId = pwinFB->nextFBIdInPool;
2381*53ee8cc1Swenshuai.xi }
2382*53ee8cc1Swenshuai.xi APIGOP_ASSERT(INVALID_POOL_NEXT_FBID!=u32CurFBId, GOP_M_FATAL("\n Inconsistent pool list for %td", (ptrdiff_t)u32CurFBId));
2383*53ee8cc1Swenshuai.xi
2384*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32CurFBId);
2385*53ee8cc1Swenshuai.xi
2386*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
2387*53ee8cc1Swenshuai.xi {
2388*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32CurFBId);
2389*53ee8cc1Swenshuai.xi return;
2390*53ee8cc1Swenshuai.xi }
2391*53ee8cc1Swenshuai.xi
2392*53ee8cc1Swenshuai.xi if(INVALID_POOL_NEXT_FBID == u32PreFBId)
2393*53ee8cc1Swenshuai.xi pFBPool->u32FirstFBIdInPool = pwinFB->nextFBIdInPool;
2394*53ee8cc1Swenshuai.xi else
2395*53ee8cc1Swenshuai.xi {
2396*53ee8cc1Swenshuai.xi pPrewinFB = _GetWinFB(pInstance,u32PreFBId);
2397*53ee8cc1Swenshuai.xi
2398*53ee8cc1Swenshuai.xi if(pPrewinFB == NULL)
2399*53ee8cc1Swenshuai.xi {
2400*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32PreFBId);
2401*53ee8cc1Swenshuai.xi return;
2402*53ee8cc1Swenshuai.xi }
2403*53ee8cc1Swenshuai.xi
2404*53ee8cc1Swenshuai.xi pPrewinFB->nextFBIdInPool = pwinFB->nextFBIdInPool;
2405*53ee8cc1Swenshuai.xi }
2406*53ee8cc1Swenshuai.xi pwinFB->nextFBIdInPool = INVALID_POOL_NEXT_FBID;
2407*53ee8cc1Swenshuai.xi
2408*53ee8cc1Swenshuai.xi }
2409*53ee8cc1Swenshuai.xi
_GOP_GWIN_CreatePoolFB(void * pInstance,MS_U32 u32fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt,EN_GOP_FRAMEBUFFER_STRING FBString)2410*53ee8cc1Swenshuai.xi static MS_U8 _GOP_GWIN_CreatePoolFB(void* pInstance,MS_U32 u32fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height, MS_U16 fbFmt, EN_GOP_FRAMEBUFFER_STRING FBString)
2411*53ee8cc1Swenshuai.xi {
2412*53ee8cc1Swenshuai.xi GOP_FB_POOL *pFBPool;
2413*53ee8cc1Swenshuai.xi MS_U32 u32CurFBId, u32PreFBId;
2414*53ee8cc1Swenshuai.xi MS_PHY lastAddr;
2415*53ee8cc1Swenshuai.xi MS_U32 size;
2416*53ee8cc1Swenshuai.xi MS_BOOL bPoolArranged = FALSE;
2417*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
2418*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pCurwinFB;
2419*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pPrewinFB;
2420*53ee8cc1Swenshuai.xi
2421*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2422*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2423*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2424*53ee8cc1Swenshuai.xi #endif
2425*53ee8cc1Swenshuai.xi
2426*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
2427*53ee8cc1Swenshuai.xi {
2428*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
2429*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2430*53ee8cc1Swenshuai.xi }
2431*53ee8cc1Swenshuai.xi
2432*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
2433*53ee8cc1Swenshuai.xi
2434*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
2435*53ee8cc1Swenshuai.xi {
2436*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
2437*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2438*53ee8cc1Swenshuai.xi }
2439*53ee8cc1Swenshuai.xi
2440*53ee8cc1Swenshuai.xi if(pwinFB->in_use)
2441*53ee8cc1Swenshuai.xi {
2442*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_ALREADY_ALLOCATED);
2443*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is already exist\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
2444*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2445*53ee8cc1Swenshuai.xi
2446*53ee8cc1Swenshuai.xi }
2447*53ee8cc1Swenshuai.xi
2448*53ee8cc1Swenshuai.xi switch(g_pGOPCtxLocal->pGOPCtxShared->fb_currentPoolId)
2449*53ee8cc1Swenshuai.xi {
2450*53ee8cc1Swenshuai.xi case GOP_WINFB_POOL1:
2451*53ee8cc1Swenshuai.xi pFBPool = &g_pGOPCtxLocal->pGOPCtxShared->fbPool1;
2452*53ee8cc1Swenshuai.xi break;
2453*53ee8cc1Swenshuai.xi case GOP_WINFB_POOL2:
2454*53ee8cc1Swenshuai.xi pFBPool = &g_pGOPCtxLocal->pGOPCtxShared->fbPool2;
2455*53ee8cc1Swenshuai.xi break;
2456*53ee8cc1Swenshuai.xi default:
2457*53ee8cc1Swenshuai.xi msWarning(ERR_FB_OUT_OF_MEMORY);
2458*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2459*53ee8cc1Swenshuai.xi }
2460*53ee8cc1Swenshuai.xi
2461*53ee8cc1Swenshuai.xi TRY_AGAIN:
2462*53ee8cc1Swenshuai.xi
2463*53ee8cc1Swenshuai.xi u32CurFBId = pFBPool->u32FirstFBIdInPool;
2464*53ee8cc1Swenshuai.xi u32PreFBId = INVALID_POOL_NEXT_FBID;
2465*53ee8cc1Swenshuai.xi lastAddr = pFBPool->GWinFB_Pool_BaseAddr;
2466*53ee8cc1Swenshuai.xi
2467*53ee8cc1Swenshuai.xi while(INVALID_POOL_NEXT_FBID != u32CurFBId)
2468*53ee8cc1Swenshuai.xi {
2469*53ee8cc1Swenshuai.xi pCurwinFB = _GetWinFB(pInstance,u32CurFBId);
2470*53ee8cc1Swenshuai.xi
2471*53ee8cc1Swenshuai.xi if(pCurwinFB == NULL)
2472*53ee8cc1Swenshuai.xi {
2473*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32CurFBId);
2474*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2475*53ee8cc1Swenshuai.xi }
2476*53ee8cc1Swenshuai.xi
2477*53ee8cc1Swenshuai.xi APIGOP_ASSERT(DRV_MAX_GWIN_FB_SUPPORT>u32CurFBId, GOP_M_FATAL("\nInvalid next u32fbId %td", (ptrdiff_t)u32CurFBId));
2478*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pCurwinFB->in_use && pCurwinFB->poolId==pFBPool->poolId
2479*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at u32fbId %td", (ptrdiff_t)u32CurFBId));
2480*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pCurwinFB->addr >= lastAddr
2481*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at u32fbId %td", (ptrdiff_t)u32CurFBId));
2482*53ee8cc1Swenshuai.xi APIGOP_ASSERT(pCurwinFB->addr>= pFBPool->GWinFB_Pool_BaseAddr &&
2483*53ee8cc1Swenshuai.xi (pCurwinFB->addr+pCurwinFB->size)<= (pFBPool->GWinFB_Pool_BaseAddr+pFBPool->u32GWinFB_Pool_MemLen)
2484*53ee8cc1Swenshuai.xi , GOP_M_FATAL("\nSerious error, inconsistant Pool list at u32fbId %td", (ptrdiff_t)u32CurFBId));
2485*53ee8cc1Swenshuai.xi lastAddr = GWIN_SDRAM_PG_ALIGN(pCurwinFB->addr+pCurwinFB->size);
2486*53ee8cc1Swenshuai.xi u32PreFBId = u32CurFBId;
2487*53ee8cc1Swenshuai.xi u32CurFBId = pCurwinFB->nextFBIdInPool;
2488*53ee8cc1Swenshuai.xi
2489*53ee8cc1Swenshuai.xi }
2490*53ee8cc1Swenshuai.xi
2491*53ee8cc1Swenshuai.xi size = _GOP_CalcPitch(pInstance,fbFmt, width)*height;
2492*53ee8cc1Swenshuai.xi
2493*53ee8cc1Swenshuai.xi if((pFBPool->u32GWinFB_Pool_MemLen-(lastAddr-pFBPool->GWinFB_Pool_BaseAddr)) < size)
2494*53ee8cc1Swenshuai.xi {
2495*53ee8cc1Swenshuai.xi if(bPoolArranged)
2496*53ee8cc1Swenshuai.xi {
2497*53ee8cc1Swenshuai.xi msWarning(ERR_FB_OUT_OF_MEMORY);
2498*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2499*53ee8cc1Swenshuai.xi }
2500*53ee8cc1Swenshuai.xi _GOP_ArrangePoolMem(pInstance,pFBPool);
2501*53ee8cc1Swenshuai.xi bPoolArranged = TRUE;
2502*53ee8cc1Swenshuai.xi goto TRY_AGAIN;
2503*53ee8cc1Swenshuai.xi }
2504*53ee8cc1Swenshuai.xi
2505*53ee8cc1Swenshuai.xi pwinFB->enable = FALSE;
2506*53ee8cc1Swenshuai.xi pwinFB->in_use = 1;
2507*53ee8cc1Swenshuai.xi pwinFB->obtain = 1;
2508*53ee8cc1Swenshuai.xi //g_pGOPCtxLocal->winFB[u32fbId].gWinId = gId; // set by calling functions
2509*53ee8cc1Swenshuai.xi pwinFB->x0 = dispX;
2510*53ee8cc1Swenshuai.xi pwinFB->y0 = dispY;
2511*53ee8cc1Swenshuai.xi pwinFB->width = width;
2512*53ee8cc1Swenshuai.xi pwinFB->height= height;
2513*53ee8cc1Swenshuai.xi pwinFB->x1 = pwinFB->x0 + pwinFB->width;
2514*53ee8cc1Swenshuai.xi pwinFB->y1 = pwinFB->y0 + pwinFB->height;
2515*53ee8cc1Swenshuai.xi // g_pGOPCtxLocal->winFB[u32fbId].pitch = width & 0xFFFC;//width; //(width & 0xFFF8); // pitch must be 4-pix alignment
2516*53ee8cc1Swenshuai.xi pwinFB->addr = lastAddr;
2517*53ee8cc1Swenshuai.xi pwinFB->size = size;
2518*53ee8cc1Swenshuai.xi
2519*53ee8cc1Swenshuai.xi pwinFB->s_x = dispX;
2520*53ee8cc1Swenshuai.xi pwinFB->s_y = dispY;
2521*53ee8cc1Swenshuai.xi pwinFB->dispWidth = width ;
2522*53ee8cc1Swenshuai.xi pwinFB->dispHeight = height;
2523*53ee8cc1Swenshuai.xi pwinFB->poolId = pFBPool->poolId;
2524*53ee8cc1Swenshuai.xi pwinFB->pitch = _GOP_CalcPitch(pInstance,fbFmt, width);
2525*53ee8cc1Swenshuai.xi
2526*53ee8cc1Swenshuai.xi
2527*53ee8cc1Swenshuai.xi pCurwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GWIN_OSD_DEFAULT].u32CurFBId);
2528*53ee8cc1Swenshuai.xi
2529*53ee8cc1Swenshuai.xi if(pCurwinFB == NULL)
2530*53ee8cc1Swenshuai.xi {
2531*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GWIN_OSD_DEFAULT].u32CurFBId);
2532*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2533*53ee8cc1Swenshuai.xi }
2534*53ee8cc1Swenshuai.xi
2535*53ee8cc1Swenshuai.xi // FB format
2536*53ee8cc1Swenshuai.xi pwinFB->fbFmt = (fbFmt != FB_FMT_AS_DEFAULT) ? fbFmt : pCurwinFB->fbFmt;
2537*53ee8cc1Swenshuai.xi
2538*53ee8cc1Swenshuai.xi
2539*53ee8cc1Swenshuai.xi pwinFB->string = FBString;
2540*53ee8cc1Swenshuai.xi pwinFB->u32GOPClientId = (GETPIDTYPE)getpid();
2541*53ee8cc1Swenshuai.xi pwinFB->nextFBIdInPool = INVALID_POOL_NEXT_FBID;
2542*53ee8cc1Swenshuai.xi if(INVALID_POOL_NEXT_FBID == u32PreFBId)
2543*53ee8cc1Swenshuai.xi pFBPool->u32FirstFBIdInPool = u32fbId;
2544*53ee8cc1Swenshuai.xi else
2545*53ee8cc1Swenshuai.xi {
2546*53ee8cc1Swenshuai.xi pPrewinFB = _GetWinFB(pInstance,u32PreFBId);
2547*53ee8cc1Swenshuai.xi
2548*53ee8cc1Swenshuai.xi if(pPrewinFB == NULL)
2549*53ee8cc1Swenshuai.xi {
2550*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32PreFBId);
2551*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
2552*53ee8cc1Swenshuai.xi }
2553*53ee8cc1Swenshuai.xi
2554*53ee8cc1Swenshuai.xi pPrewinFB->nextFBIdInPool = u32fbId;
2555*53ee8cc1Swenshuai.xi }
2556*53ee8cc1Swenshuai.xi return GWIN_OK;
2557*53ee8cc1Swenshuai.xi }
2558*53ee8cc1Swenshuai.xi
_GOP_GetPDByDst(void * pInstance,MS_U8 u8GOP_num,DRV_GOPDstType GopDst,MS_U16 * u16StrwinStr)2559*53ee8cc1Swenshuai.xi static void _GOP_GetPDByDst(void* pInstance,MS_U8 u8GOP_num, DRV_GOPDstType GopDst,MS_U16 *u16StrwinStr)
2560*53ee8cc1Swenshuai.xi {
2561*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2562*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2563*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2564*53ee8cc1Swenshuai.xi #endif
2565*53ee8cc1Swenshuai.xi MS_BOOL bHDREnable=FALSE;
2566*53ee8cc1Swenshuai.xi
2567*53ee8cc1Swenshuai.xi switch(GopDst)
2568*53ee8cc1Swenshuai.xi {
2569*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0:
2570*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bIgnoreIPHPD)
2571*53ee8cc1Swenshuai.xi *u16StrwinStr = 0;
2572*53ee8cc1Swenshuai.xi else
2573*53ee8cc1Swenshuai.xi {
2574*53ee8cc1Swenshuai.xi MS_U32 u32Hstart = 0;
2575*53ee8cc1Swenshuai.xi
2576*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPCaptureHStart(g_pGOPCtxLocal,&u32Hstart,E_DRV_GOP_MAIN_WINDOW);
2577*53ee8cc1Swenshuai.xi *u16StrwinStr = u32Hstart + g_pGOPCtxLocal->pGopChipProperty->GOP_IP_PD;
2578*53ee8cc1Swenshuai.xi }
2579*53ee8cc1Swenshuai.xi break;
2580*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP1:
2581*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bIgnoreIP1HPD)
2582*53ee8cc1Swenshuai.xi *u16StrwinStr = 0;
2583*53ee8cc1Swenshuai.xi break;
2584*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP1:
2585*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGopChipProperty->GOP_OP1_PD;
2586*53ee8cc1Swenshuai.xi break;
2587*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP0:
2588*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_GOPScaling:
2589*53ee8cc1Swenshuai.xi MDrv_GOP_IsHDREnabled(g_pGOPCtxLocal, &bHDREnable);
2590*53ee8cc1Swenshuai.xi if(bHDREnable==FALSE)
2591*53ee8cc1Swenshuai.xi {
2592*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOP_num] + g_pGOPCtxLocal->pGopChipProperty->GOP_PD;
2593*53ee8cc1Swenshuai.xi }
2594*53ee8cc1Swenshuai.xi else
2595*53ee8cc1Swenshuai.xi {
2596*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOP_num] + g_pGOPCtxLocal->pGopChipProperty->GOP_HDR_OP_PD;
2597*53ee8cc1Swenshuai.xi }
2598*53ee8cc1Swenshuai.xi break;
2599*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_FRC:
2600*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_DIP:
2601*53ee8cc1Swenshuai.xi *u16StrwinStr =0;
2602*53ee8cc1Swenshuai.xi break;
2603*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_BYPASS:
2604*53ee8cc1Swenshuai.xi *u16StrwinStr =g_pGOPCtxLocal->pGopChipProperty->GOP_Mux_FRC_offset;
2605*53ee8cc1Swenshuai.xi break;
2606*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP:
2607*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGopChipProperty->GOP_MVOP_PD;
2608*53ee8cc1Swenshuai.xi break;
2609*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2VE:
2610*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2OP:
2611*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGopChipProperty->GOP_MIXER_PD;
2612*53ee8cc1Swenshuai.xi break;
2613*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VE:
2614*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGopChipProperty->GOP_VE_PD;
2615*53ee8cc1Swenshuai.xi break;
2616*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP_DUAL_RATE:
2617*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGopChipProperty->GOP_DUAL_OP_PD;
2618*53ee8cc1Swenshuai.xi break;
2619*53ee8cc1Swenshuai.xi default:
2620*53ee8cc1Swenshuai.xi *u16StrwinStr = g_pGOPCtxLocal->pGopChipProperty->GOP_PD;
2621*53ee8cc1Swenshuai.xi break;
2622*53ee8cc1Swenshuai.xi }
2623*53ee8cc1Swenshuai.xi
2624*53ee8cc1Swenshuai.xi }
2625*53ee8cc1Swenshuai.xi
_GOP_AdjustHSPD(void * pInstance,MS_U8 u8GOP_num,MS_U16 u16StrwinStr,DRV_GOPDstType GopDst)2626*53ee8cc1Swenshuai.xi static void _GOP_AdjustHSPD(void* pInstance,MS_U8 u8GOP_num, MS_U16 u16StrwinStr, DRV_GOPDstType GopDst)
2627*53ee8cc1Swenshuai.xi {
2628*53ee8cc1Swenshuai.xi MS_U8 u8Offset;
2629*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2630*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2631*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2632*53ee8cc1Swenshuai.xi #endif
2633*53ee8cc1Swenshuai.xi
2634*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP_num))
2635*53ee8cc1Swenshuai.xi {
2636*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP_num);
2637*53ee8cc1Swenshuai.xi return;
2638*53ee8cc1Swenshuai.xi }
2639*53ee8cc1Swenshuai.xi
2640*53ee8cc1Swenshuai.xi switch(GopDst)
2641*53ee8cc1Swenshuai.xi {
2642*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0:
2643*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_DIP:
2644*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP1:
2645*53ee8cc1Swenshuai.xi u8Offset = 0;
2646*53ee8cc1Swenshuai.xi break;
2647*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2VE:
2648*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2OP:
2649*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VE:
2650*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_FRC:
2651*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bIgnoreVEHPD)
2652*53ee8cc1Swenshuai.xi u8Offset = 0;
2653*53ee8cc1Swenshuai.xi else
2654*53ee8cc1Swenshuai.xi u8Offset = MDrv_GOP_GetHPipeOfst(g_pGOPCtxLocal,u8GOP_num, GopDst);
2655*53ee8cc1Swenshuai.xi break;
2656*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP0:
2657*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP:
2658*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_BYPASS:
2659*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP_DUAL_RATE:
2660*53ee8cc1Swenshuai.xi default:
2661*53ee8cc1Swenshuai.xi u8Offset = MDrv_GOP_GetHPipeOfst(g_pGOPCtxLocal,u8GOP_num, GopDst);
2662*53ee8cc1Swenshuai.xi break;
2663*53ee8cc1Swenshuai.xi }
2664*53ee8cc1Swenshuai.xi
2665*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetHSPipe(g_pGOPCtxLocal, u8GOP_num, u8Offset+u16StrwinStr);
2666*53ee8cc1Swenshuai.xi }
2667*53ee8cc1Swenshuai.xi
_GOP_InitHSPDByGOP(void * pInstance,MS_U8 u8GOP_num)2668*53ee8cc1Swenshuai.xi static void _GOP_InitHSPDByGOP(void* pInstance,MS_U8 u8GOP_num)
2669*53ee8cc1Swenshuai.xi {
2670*53ee8cc1Swenshuai.xi MS_U16 u16StrwinStr=0;
2671*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst = E_DRV_GOP_DST_OP0;
2672*53ee8cc1Swenshuai.xi
2673*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2674*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2675*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2676*53ee8cc1Swenshuai.xi #endif
2677*53ee8cc1Swenshuai.xi
2678*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP_num))
2679*53ee8cc1Swenshuai.xi {
2680*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP_num);
2681*53ee8cc1Swenshuai.xi return;
2682*53ee8cc1Swenshuai.xi }
2683*53ee8cc1Swenshuai.xi
2684*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOP_num, &GopDst);
2685*53ee8cc1Swenshuai.xi _GOP_GetPDByDst(pInstance,u8GOP_num, GopDst,&u16StrwinStr);
2686*53ee8cc1Swenshuai.xi _GOP_AdjustHSPD(pInstance,u8GOP_num, u16StrwinStr, GopDst);
2687*53ee8cc1Swenshuai.xi }
2688*53ee8cc1Swenshuai.xi
2689*53ee8cc1Swenshuai.xi
2690*53ee8cc1Swenshuai.xi
_IsGopInMux0(void * pInstance,MS_U8 u8GopNum)2691*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInMux0(void* pInstance,MS_U8 u8GopNum)
2692*53ee8cc1Swenshuai.xi {
2693*53ee8cc1Swenshuai.xi MS_U8 GetGopNum=0;
2694*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2695*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2696*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2697*53ee8cc1Swenshuai.xi #endif
2698*53ee8cc1Swenshuai.xi
2699*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, E_GOP_MUX0);
2700*53ee8cc1Swenshuai.xi
2701*53ee8cc1Swenshuai.xi if (u8GopNum == GetGopNum)
2702*53ee8cc1Swenshuai.xi {
2703*53ee8cc1Swenshuai.xi return TRUE;
2704*53ee8cc1Swenshuai.xi }
2705*53ee8cc1Swenshuai.xi else
2706*53ee8cc1Swenshuai.xi {
2707*53ee8cc1Swenshuai.xi return FALSE;
2708*53ee8cc1Swenshuai.xi }
2709*53ee8cc1Swenshuai.xi }
_IsGopInMux1(void * pInstance,MS_U8 u8GopNum)2710*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInMux1(void* pInstance,MS_U8 u8GopNum)
2711*53ee8cc1Swenshuai.xi {
2712*53ee8cc1Swenshuai.xi MS_U8 GetGopNum=0;
2713*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2714*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2715*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2716*53ee8cc1Swenshuai.xi #endif
2717*53ee8cc1Swenshuai.xi
2718*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, E_GOP_MUX1);
2719*53ee8cc1Swenshuai.xi if (u8GopNum==GetGopNum)
2720*53ee8cc1Swenshuai.xi {
2721*53ee8cc1Swenshuai.xi return TRUE;
2722*53ee8cc1Swenshuai.xi }
2723*53ee8cc1Swenshuai.xi return FALSE;
2724*53ee8cc1Swenshuai.xi }
_IsGopInMux2(void * pInstance,MS_U8 u8GopNum)2725*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInMux2(void* pInstance,MS_U8 u8GopNum)
2726*53ee8cc1Swenshuai.xi {
2727*53ee8cc1Swenshuai.xi MS_U8 GetGopNum=0;
2728*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2729*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2730*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2731*53ee8cc1Swenshuai.xi #endif
2732*53ee8cc1Swenshuai.xi
2733*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, E_GOP_MUX2);
2734*53ee8cc1Swenshuai.xi
2735*53ee8cc1Swenshuai.xi if (u8GopNum == GetGopNum)
2736*53ee8cc1Swenshuai.xi {
2737*53ee8cc1Swenshuai.xi return TRUE;
2738*53ee8cc1Swenshuai.xi }
2739*53ee8cc1Swenshuai.xi return FALSE;
2740*53ee8cc1Swenshuai.xi }
_IsGopInMux3(void * pInstance,MS_U8 u8GopNum)2741*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInMux3(void* pInstance,MS_U8 u8GopNum)
2742*53ee8cc1Swenshuai.xi {
2743*53ee8cc1Swenshuai.xi MS_U8 GetGopNum=0;
2744*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2745*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2746*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2747*53ee8cc1Swenshuai.xi #endif
2748*53ee8cc1Swenshuai.xi
2749*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, E_GOP_MUX3);
2750*53ee8cc1Swenshuai.xi if (u8GopNum==GetGopNum)
2751*53ee8cc1Swenshuai.xi {
2752*53ee8cc1Swenshuai.xi return TRUE;
2753*53ee8cc1Swenshuai.xi }
2754*53ee8cc1Swenshuai.xi return FALSE;
2755*53ee8cc1Swenshuai.xi }
2756*53ee8cc1Swenshuai.xi
_IsGopInMux0To2(void * pInstance,MS_U8 u8GopNum)2757*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInMux0To2(void* pInstance,MS_U8 u8GopNum)
2758*53ee8cc1Swenshuai.xi {
2759*53ee8cc1Swenshuai.xi if (_IsGopInMux0(pInstance,u8GopNum) || _IsGopInMux1(pInstance,u8GopNum) || _IsGopInMux2(pInstance,u8GopNum))
2760*53ee8cc1Swenshuai.xi {
2761*53ee8cc1Swenshuai.xi return TRUE;
2762*53ee8cc1Swenshuai.xi }
2763*53ee8cc1Swenshuai.xi return FALSE;
2764*53ee8cc1Swenshuai.xi }
2765*53ee8cc1Swenshuai.xi
_IsGopInMux0To3(void * pInstance,MS_U8 u8GopNum)2766*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInMux0To3(void* pInstance,MS_U8 u8GopNum)
2767*53ee8cc1Swenshuai.xi {
2768*53ee8cc1Swenshuai.xi if (_IsGopInMux0(pInstance,u8GopNum) || _IsGopInMux1(pInstance,u8GopNum) || _IsGopInMux2(pInstance,u8GopNum) || _IsGopInMux3(pInstance,u8GopNum))
2769*53ee8cc1Swenshuai.xi {
2770*53ee8cc1Swenshuai.xi return TRUE;
2771*53ee8cc1Swenshuai.xi }
2772*53ee8cc1Swenshuai.xi return FALSE;
2773*53ee8cc1Swenshuai.xi }
2774*53ee8cc1Swenshuai.xi
_GetNonUseOPMux(void * pInstance)2775*53ee8cc1Swenshuai.xi static Gop_MuxSel _GetNonUseOPMux(void* pInstance)
2776*53ee8cc1Swenshuai.xi {
2777*53ee8cc1Swenshuai.xi MS_S8 i;
2778*53ee8cc1Swenshuai.xi MS_U8 GetGopNum = 0;
2779*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2780*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2781*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2782*53ee8cc1Swenshuai.xi #endif
2783*53ee8cc1Swenshuai.xi for (i=MAX_GOP_MUX_OPNum-1; i>=0; i--)
2784*53ee8cc1Swenshuai.xi {
2785*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, (Gop_MuxSel)i);
2786*53ee8cc1Swenshuai.xi if (GetGopNum == 0x7)
2787*53ee8cc1Swenshuai.xi return (Gop_MuxSel)i;
2788*53ee8cc1Swenshuai.xi }
2789*53ee8cc1Swenshuai.xi return MAX_GOP_MUX_SUPPORT;
2790*53ee8cc1Swenshuai.xi }
2791*53ee8cc1Swenshuai.xi
_GetNonUseDualOPMux(void * pInstance)2792*53ee8cc1Swenshuai.xi static Gop_MuxSel _GetNonUseDualOPMux(void* pInstance)
2793*53ee8cc1Swenshuai.xi {
2794*53ee8cc1Swenshuai.xi MS_S8 i;
2795*53ee8cc1Swenshuai.xi MS_U8 GetGopNum = 0;
2796*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2797*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2798*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2799*53ee8cc1Swenshuai.xi #endif
2800*53ee8cc1Swenshuai.xi for (i=E_GOP_DUALRATE_OP_MUX0; i<=E_GOP_DUALRATE_OP_MUX2; i++)
2801*53ee8cc1Swenshuai.xi {
2802*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, (Gop_MuxSel)i);
2803*53ee8cc1Swenshuai.xi if (GetGopNum == MAX_GOP_DualMUX_Num)
2804*53ee8cc1Swenshuai.xi return (Gop_MuxSel)i;
2805*53ee8cc1Swenshuai.xi }
2806*53ee8cc1Swenshuai.xi return MAX_GOP_MUX_SUPPORT;
2807*53ee8cc1Swenshuai.xi }
2808*53ee8cc1Swenshuai.xi
_GOP_Get_StretchWin(void * pInstance,MS_U8 gop,MS_U16 * x,MS_U16 * y,MS_U16 * w,MS_U16 * h)2809*53ee8cc1Swenshuai.xi static void _GOP_Get_StretchWin(void* pInstance,MS_U8 gop,MS_U16 *x,MS_U16 *y,MS_U16 *w,MS_U16 *h)
2810*53ee8cc1Swenshuai.xi {
2811*53ee8cc1Swenshuai.xi DRV_GOPDstType eDstType = E_DRV_GOP_DST_INVALID;
2812*53ee8cc1Swenshuai.xi
2813*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2814*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2815*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2816*53ee8cc1Swenshuai.xi #endif
2817*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Get_StretchWin(g_pGOPCtxLocal, gop, x, y, w, h);
2818*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal,gop, &eDstType);
2819*53ee8cc1Swenshuai.xi
2820*53ee8cc1Swenshuai.xi if((eDstType == E_DRV_GOP_DST_IP0) || (eDstType == E_DRV_GOP_DST_IP1))
2821*53ee8cc1Swenshuai.xi {
2822*53ee8cc1Swenshuai.xi MS_BOOL bInterlace = FALSE;
2823*53ee8cc1Swenshuai.xi
2824*53ee8cc1Swenshuai.xi MDrv_GOP_GetIPInterlace(g_pGOPCtxLocal,&bInterlace,E_DRV_GOP_MAIN_WINDOW);
2825*53ee8cc1Swenshuai.xi if( bInterlace )
2826*53ee8cc1Swenshuai.xi {
2827*53ee8cc1Swenshuai.xi (*h) *=2;
2828*53ee8cc1Swenshuai.xi (*y) = (*y)*2;
2829*53ee8cc1Swenshuai.xi }
2830*53ee8cc1Swenshuai.xi }
2831*53ee8cc1Swenshuai.xi else if(eDstType == E_DRV_GOP_DST_VE)
2832*53ee8cc1Swenshuai.xi {
2833*53ee8cc1Swenshuai.xi (*h) *=2;
2834*53ee8cc1Swenshuai.xi (*y) = ((*y)*2) - g_pGOPCtxLocal->pGopChipProperty->GOP_VE_V_Offset;
2835*53ee8cc1Swenshuai.xi }
2836*53ee8cc1Swenshuai.xi else if(eDstType == E_DRV_GOP_DST_OP1)
2837*53ee8cc1Swenshuai.xi {
2838*53ee8cc1Swenshuai.xi (*h) *=2;
2839*53ee8cc1Swenshuai.xi (*y) = ((*y)*2);
2840*53ee8cc1Swenshuai.xi }
2841*53ee8cc1Swenshuai.xi if((eDstType == E_DRV_GOP_DST_OP0) || (eDstType == E_DRV_GOP_DST_FRC) || (eDstType == E_DRV_GOP_DST_BYPASS))
2842*53ee8cc1Swenshuai.xi {
2843*53ee8cc1Swenshuai.xi if (!MDrv_GOP_GWIN_IsProgressive(g_pGOPCtxLocal,gop))
2844*53ee8cc1Swenshuai.xi {
2845*53ee8cc1Swenshuai.xi (*h) *=2;
2846*53ee8cc1Swenshuai.xi (*y) = (*y)*2;
2847*53ee8cc1Swenshuai.xi }
2848*53ee8cc1Swenshuai.xi }
2849*53ee8cc1Swenshuai.xi }
2850*53ee8cc1Swenshuai.xi
_GOP_SetOCCapability(void * pInstance,MS_U8 u8GOP,DRV_GOPDstType GopDst)2851*53ee8cc1Swenshuai.xi static void _GOP_SetOCCapability(void* pInstance,MS_U8 u8GOP, DRV_GOPDstType GopDst)
2852*53ee8cc1Swenshuai.xi {
2853*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2854*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2855*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2856*53ee8cc1Swenshuai.xi #endif
2857*53ee8cc1Swenshuai.xi
2858*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
2859*53ee8cc1Swenshuai.xi {
2860*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
2861*53ee8cc1Swenshuai.xi return;
2862*53ee8cc1Swenshuai.xi }
2863*53ee8cc1Swenshuai.xi
2864*53ee8cc1Swenshuai.xi switch(GopDst)
2865*53ee8cc1Swenshuai.xi {
2866*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0:
2867*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, FALSE);
2868*53ee8cc1Swenshuai.xi MDrv_GOP_OC_SetOCEn(g_pGOPCtxLocal, u8GOP, FALSE);
2869*53ee8cc1Swenshuai.xi break;
2870*53ee8cc1Swenshuai.xi
2871*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP:
2872*53ee8cc1Swenshuai.xi MDrv_GOP_OC_SetOCEn(g_pGOPCtxLocal, u8GOP, FALSE);
2873*53ee8cc1Swenshuai.xi break;
2874*53ee8cc1Swenshuai.xi
2875*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP0:
2876*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_BYPASS:
2877*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_GOPScaling:
2878*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP_DUAL_RATE:
2879*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, TRUE);
2880*53ee8cc1Swenshuai.xi MDrv_GOP_OC_SetOCEn(g_pGOPCtxLocal, u8GOP, FALSE);
2881*53ee8cc1Swenshuai.xi break;
2882*53ee8cc1Swenshuai.xi
2883*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_FRC:
2884*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, TRUE);
2885*53ee8cc1Swenshuai.xi MDrv_GOP_OC_SetOCEn(g_pGOPCtxLocal, u8GOP, TRUE);
2886*53ee8cc1Swenshuai.xi break;
2887*53ee8cc1Swenshuai.xi
2888*53ee8cc1Swenshuai.xi default:
2889*53ee8cc1Swenshuai.xi break;
2890*53ee8cc1Swenshuai.xi }
2891*53ee8cc1Swenshuai.xi
2892*53ee8cc1Swenshuai.xi }
2893*53ee8cc1Swenshuai.xi
2894*53ee8cc1Swenshuai.xi #if (DUMP_INFO)
2895*53ee8cc1Swenshuai.xi static void _GOP_GWIN_UpdateAllInfo(void* pInstance,)
2896*53ee8cc1Swenshuai.xi {
2897*53ee8cc1Swenshuai.xi MS_U8 u8Index = 0,u16Index = 0;
2898*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
2899*53ee8cc1Swenshuai.xi
2900*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2901*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2902*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2903*53ee8cc1Swenshuai.xi #endif
2904*53ee8cc1Swenshuai.xi GOP_M_INFO("GwinNo. CurFBId IsShared SharedCnt ClientId\n");
2905*53ee8cc1Swenshuai.xi GOP_M_INFO("========================================================================\n");
2906*53ee8cc1Swenshuai.xi for (u8Index=0; u8Index<(MS_U8)g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum; u8Index++)
2907*53ee8cc1Swenshuai.xi {
2908*53ee8cc1Swenshuai.xi GOP_M_INFO("%02d\t\t%04ld\t\t%02d\t\t%04d\t\t%04ld\n",u8Index,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8Index].u32CurFBId,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8Index].bIsShared ,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8Index].u16SharedCnt,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8Index].u32GOPClientId);
2909*53ee8cc1Swenshuai.xi }
2910*53ee8cc1Swenshuai.xi GOP_M_INFO("========================================================================\n");
2911*53ee8cc1Swenshuai.xi GOP_M_INFO("FbNo. in_use addr size widthxheight pitch fmt ClientId\n");
2912*53ee8cc1Swenshuai.xi GOP_M_INFO("===========================================================================\n");
2913*53ee8cc1Swenshuai.xi for (u16Index=0; u16Index<DRV_MAX_GWIN_FB_SUPPORT; u16Index++)
2914*53ee8cc1Swenshuai.xi {
2915*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u16Index);
2916*53ee8cc1Swenshuai.xi if(pwinFB)
2917*53ee8cc1Swenshuai.xi {
2918*53ee8cc1Swenshuai.xi GOP_M_INFO("[%02d]\t%02d\t%08lx\t%08lx\t%04d x %04d\t%04d\t%02d\t%04ld\n",u16Index,pwinFB->in_use,pwinFB->addr,pwinFB->size,pwinFB->width,pwinFB->height,pwinFB->pitch,pwinFB->fbFmt,pwinFB->u32GOPClientId);
2919*53ee8cc1Swenshuai.xi }
2920*53ee8cc1Swenshuai.xi }
2921*53ee8cc1Swenshuai.xi GOP_M_INFO("===========================================================================\n");
2922*53ee8cc1Swenshuai.xi }
2923*53ee8cc1Swenshuai.xi #endif
2924*53ee8cc1Swenshuai.xi
GOP_FB_Destroy(void * pInstance,MS_U32 u32fbId)2925*53ee8cc1Swenshuai.xi static MS_U32 GOP_FB_Destroy(void* pInstance,MS_U32 u32fbId)
2926*53ee8cc1Swenshuai.xi {
2927*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
2928*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2929*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2930*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2931*53ee8cc1Swenshuai.xi #endif
2932*53ee8cc1Swenshuai.xi
2933*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
2934*53ee8cc1Swenshuai.xi
2935*53ee8cc1Swenshuai.xi
2936*53ee8cc1Swenshuai.xi switch(pwinFB->poolId)
2937*53ee8cc1Swenshuai.xi {
2938*53ee8cc1Swenshuai.xi case GOP_WINFB_POOL1:
2939*53ee8cc1Swenshuai.xi _GOP_FreePoolMem(pInstance,&g_pGOPCtxLocal->pGOPCtxShared->fbPool1, u32fbId);
2940*53ee8cc1Swenshuai.xi break;
2941*53ee8cc1Swenshuai.xi case GOP_WINFB_POOL2:
2942*53ee8cc1Swenshuai.xi _GOP_FreePoolMem(pInstance,&g_pGOPCtxLocal->pGOPCtxShared->fbPool1, u32fbId);
2943*53ee8cc1Swenshuai.xi break;
2944*53ee8cc1Swenshuai.xi default:
2945*53ee8cc1Swenshuai.xi break;
2946*53ee8cc1Swenshuai.xi }
2947*53ee8cc1Swenshuai.xi
2948*53ee8cc1Swenshuai.xi pwinFB->poolId = GOP_WINFB_POOL_NULL;
2949*53ee8cc1Swenshuai.xi pwinFB->enable = FALSE;
2950*53ee8cc1Swenshuai.xi pwinFB->in_use = 0;
2951*53ee8cc1Swenshuai.xi pwinFB->obtain = 0;
2952*53ee8cc1Swenshuai.xi pwinFB->x0 = 0;
2953*53ee8cc1Swenshuai.xi pwinFB->y0 = 0;
2954*53ee8cc1Swenshuai.xi pwinFB->x1 = 0;
2955*53ee8cc1Swenshuai.xi pwinFB->y1 = 0;
2956*53ee8cc1Swenshuai.xi
2957*53ee8cc1Swenshuai.xi pwinFB->gWinId = GWIN_ID_INVALID;
2958*53ee8cc1Swenshuai.xi pwinFB->width = 0;
2959*53ee8cc1Swenshuai.xi pwinFB->height= 0;
2960*53ee8cc1Swenshuai.xi pwinFB->pitch = 0;
2961*53ee8cc1Swenshuai.xi pwinFB->fbFmt =0;
2962*53ee8cc1Swenshuai.xi pwinFB->addr = 0;
2963*53ee8cc1Swenshuai.xi pwinFB->size = 0;
2964*53ee8cc1Swenshuai.xi pwinFB->dispHeight = 0;
2965*53ee8cc1Swenshuai.xi pwinFB->dispWidth = 0;
2966*53ee8cc1Swenshuai.xi pwinFB->s_x = 0;
2967*53ee8cc1Swenshuai.xi pwinFB->s_y = 0;
2968*53ee8cc1Swenshuai.xi pwinFB->string = E_GOP_FB_NULL;
2969*53ee8cc1Swenshuai.xi pwinFB->u32GOPClientId = INVALID_CLIENT_PID;
2970*53ee8cc1Swenshuai.xi
2971*53ee8cc1Swenshuai.xi return GWIN_OK;
2972*53ee8cc1Swenshuai.xi }
2973*53ee8cc1Swenshuai.xi
GOP_SetWinInfo(void * pInstance,MS_U32 u32Gwin,GOP_GwinInfo * pinfo)2974*53ee8cc1Swenshuai.xi static MS_U32 GOP_SetWinInfo(void* pInstance,MS_U32 u32Gwin, GOP_GwinInfo* pinfo)
2975*53ee8cc1Swenshuai.xi {
2976*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
2977*53ee8cc1Swenshuai.xi
2978*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
2979*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
2980*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
2981*53ee8cc1Swenshuai.xi #endif
2982*53ee8cc1Swenshuai.xi
2983*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u32Gwin))
2984*53ee8cc1Swenshuai.xi {
2985*53ee8cc1Swenshuai.xi GOP_M_ERR("\n[%s] not support gwin id:%td in this chip version", __FUNCTION__, (ptrdiff_t)u32Gwin);
2986*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
2987*53ee8cc1Swenshuai.xi }
2988*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u32Gwin);
2989*53ee8cc1Swenshuai.xi
2990*53ee8cc1Swenshuai.xi
2991*53ee8cc1Swenshuai.xi switch(u8GOP)
2992*53ee8cc1Swenshuai.xi {
2993*53ee8cc1Swenshuai.xi case E_GOP0:
2994*53ee8cc1Swenshuai.xi _SetGop0WinInfo(pInstance,u32Gwin, pinfo);
2995*53ee8cc1Swenshuai.xi break;
2996*53ee8cc1Swenshuai.xi case E_GOP1:
2997*53ee8cc1Swenshuai.xi _SetGop1WinInfo(pInstance,u32Gwin, pinfo);
2998*53ee8cc1Swenshuai.xi break;
2999*53ee8cc1Swenshuai.xi case E_GOP2:
3000*53ee8cc1Swenshuai.xi case E_GOP3:
3001*53ee8cc1Swenshuai.xi case E_GOP4:
3002*53ee8cc1Swenshuai.xi case E_GOP5:
3003*53ee8cc1Swenshuai.xi _SetGop23WinInfo(pInstance,u32Gwin, pinfo);
3004*53ee8cc1Swenshuai.xi break;
3005*53ee8cc1Swenshuai.xi default:
3006*53ee8cc1Swenshuai.xi break;
3007*53ee8cc1Swenshuai.xi }
3008*53ee8cc1Swenshuai.xi
3009*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
3010*53ee8cc1Swenshuai.xi
3011*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3012*53ee8cc1Swenshuai.xi }
3013*53ee8cc1Swenshuai.xi
GOP_Win_Destroy(void * pInstance,MS_U32 gId)3014*53ee8cc1Swenshuai.xi static MS_U32 GOP_Win_Destroy(void* pInstance,MS_U32 gId)
3015*53ee8cc1Swenshuai.xi {
3016*53ee8cc1Swenshuai.xi MS_U32 u32fbId;
3017*53ee8cc1Swenshuai.xi GOP_GwinInfo gWin;
3018*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
3019*53ee8cc1Swenshuai.xi MS_U8 u8GOP,u8MIU;
3020*53ee8cc1Swenshuai.xi
3021*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3022*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3023*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3024*53ee8cc1Swenshuai.xi #endif
3025*53ee8cc1Swenshuai.xi
3026*53ee8cc1Swenshuai.xi GOP_M_INFO("\33[0;36m %s:%d gId = %td \33[m \n",__FUNCTION__,__LINE__,(ptrdiff_t)gId);
3027*53ee8cc1Swenshuai.xi
3028*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gId))
3029*53ee8cc1Swenshuai.xi {
3030*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gId);
3031*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
3032*53ee8cc1Swenshuai.xi }
3033*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,gId))
3034*53ee8cc1Swenshuai.xi {
3035*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is not exist\n",__FUNCTION__,__LINE__,(ptrdiff_t)gId);
3036*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
3037*53ee8cc1Swenshuai.xi }
3038*53ee8cc1Swenshuai.xi
3039*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, gId, FALSE);
3040*53ee8cc1Swenshuai.xi u32fbId = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId;
3041*53ee8cc1Swenshuai.xi
3042*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
3043*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
3044*53ee8cc1Swenshuai.xi {
3045*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
3046*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
3047*53ee8cc1Swenshuai.xi }
3048*53ee8cc1Swenshuai.xi
3049*53ee8cc1Swenshuai.xi if ((GOP_WINFB_POOL_NULL!=pwinFB->poolId) && (GOP_FB_Destroy(pInstance,u32fbId) != GWIN_OK))
3050*53ee8cc1Swenshuai.xi {
3051*53ee8cc1Swenshuai.xi MS_DEBUG_MSG( GOP_M_ERR( "[%s][%d], failed to delete FB %td\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId ) );
3052*53ee8cc1Swenshuai.xi
3053*53ee8cc1Swenshuai.xi }
3054*53ee8cc1Swenshuai.xi
3055*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId= GWIN_ID_INVALID;
3056*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32GOPClientId = 0;
3057*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].bIsShared = FALSE;
3058*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u16SharedCnt = 0;
3059*53ee8cc1Swenshuai.xi
3060*53ee8cc1Swenshuai.xi memset(&gWin, 0, sizeof(GOP_GwinInfo));
3061*53ee8cc1Swenshuai.xi gWin.clrType = E_GOP_COLOR_ARGB8888;
3062*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,(gId));
3063*53ee8cc1Swenshuai.xi u8MIU = MDrv_GOP_Get_MIU_Sel(g_pGOPCtxLocal,u8GOP);
3064*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP] != TRUE)
3065*53ee8cc1Swenshuai.xi {
3066*53ee8cc1Swenshuai.xi _miu_offset_to_phy(u8MIU,gWin.u32DRAMRBlkStart,gWin.u32DRAMRBlkStart);
3067*53ee8cc1Swenshuai.xi }
3068*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,gId,&gWin);
3069*53ee8cc1Swenshuai.xi
3070*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, gId);
3071*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr, gId);
3072*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_HMirror_HPos, gId);
3073*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_VMirror_VPos, gId);
3074*53ee8cc1Swenshuai.xi
3075*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ClearFlipQueue(g_pGOPCtxLocal,gId);
3076*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3077*53ee8cc1Swenshuai.xi }
3078*53ee8cc1Swenshuai.xi
3079*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
GOP_AtExit(void * pInstance)3080*53ee8cc1Swenshuai.xi static void GOP_AtExit(void* pInstance)
3081*53ee8cc1Swenshuai.xi {
3082*53ee8cc1Swenshuai.xi MS_U32 u32TempID=0, u32GWinFBID=DRV_MAX_GWIN_FB_SUPPORT;
3083*53ee8cc1Swenshuai.xi MS_U32 u32CurPID = (GETPIDTYPE)getpid();
3084*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet = GOP_API_FAIL;
3085*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
3086*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3087*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3088*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3089*53ee8cc1Swenshuai.xi #endif
3090*53ee8cc1Swenshuai.xi
3091*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal ==NULL)
3092*53ee8cc1Swenshuai.xi {
3093*53ee8cc1Swenshuai.xi return;
3094*53ee8cc1Swenshuai.xi }
3095*53ee8cc1Swenshuai.xi
3096*53ee8cc1Swenshuai.xi #if GOP_LOCK_SUPPORT
3097*53ee8cc1Swenshuai.xi GOP_M_INFO("---%s %d: PID[%tu], TID[%td] exited, MutexCnt=%d\n", __FUNCTION__, __LINE__, (ptrdiff_t)u32CurPID, (ptrdiff_t)MsOS_GetOSThreadID(), g_pGOPCtxLocal->s32GOPMutexCnt);
3098*53ee8cc1Swenshuai.xi #else
3099*53ee8cc1Swenshuai.xi GOP_M_INFO("---%s %d: PID[%tu], TID[%td] exited\n", __FUNCTION__, __LINE__, (ptrdiff_t)u32CurPID, (ptrdiff_t)MsOS_GetOSThreadID());
3100*53ee8cc1Swenshuai.xi #endif
3101*53ee8cc1Swenshuai.xi for(u32TempID=0; u32TempID < g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum; u32TempID++)
3102*53ee8cc1Swenshuai.xi {
3103*53ee8cc1Swenshuai.xi //Check and release APP's GWIN resource
3104*53ee8cc1Swenshuai.xi if(((FALSE == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32TempID].bIsShared)
3105*53ee8cc1Swenshuai.xi && (DRV_MAX_GWIN_FB_SUPPORT>g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32TempID].u32CurFBId)
3106*53ee8cc1Swenshuai.xi && (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32TempID].u32GOPClientId==u32CurPID))
3107*53ee8cc1Swenshuai.xi || ((TRUE == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32TempID].bIsShared)
3108*53ee8cc1Swenshuai.xi && (0x0 == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32TempID].u16SharedCnt)))
3109*53ee8cc1Swenshuai.xi
3110*53ee8cc1Swenshuai.xi {
3111*53ee8cc1Swenshuai.xi u32GWinFBID = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32TempID].u32CurFBId;
3112*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)GOP_Win_Destroy(pInstance,u32TempID);
3113*53ee8cc1Swenshuai.xi GOP_M_INFO("\n---%s %d: Try DestroyWIN[%tu], return[%u]\n", __FUNCTION__, __LINE__, (ptrdiff_t)u32TempID, (MS_U8)enRet);
3114*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)GOP_FB_Destroy(pInstance,u32GWinFBID);
3115*53ee8cc1Swenshuai.xi GOP_M_INFO("\n---%s %d: Try DestroyWIN's FB[%tu], return[%u]\n", __FUNCTION__, __LINE__, (ptrdiff_t)u32GWinFBID, (MS_U8)enRet);
3116*53ee8cc1Swenshuai.xi }
3117*53ee8cc1Swenshuai.xi }
3118*53ee8cc1Swenshuai.xi
3119*53ee8cc1Swenshuai.xi
3120*53ee8cc1Swenshuai.xi for(u32TempID=0; u32TempID < DRV_MAX_GWIN_FB_SUPPORT; u32TempID++)
3121*53ee8cc1Swenshuai.xi {
3122*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32TempID);
3123*53ee8cc1Swenshuai.xi // Check and release APP1's un-maped FB resource
3124*53ee8cc1Swenshuai.xi // Note: If this APP1's FB is currently mapped to GWIN, means this FB is used by APP2
3125*53ee8cc1Swenshuai.xi if( (pwinFB->u32GOPClientId == u32CurPID)
3126*53ee8cc1Swenshuai.xi &&(pwinFB->gWinId == GWIN_ID_INVALID))
3127*53ee8cc1Swenshuai.xi {
3128*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)GOP_Win_Destroy(pInstance,u32TempID);
3129*53ee8cc1Swenshuai.xi GOP_M_INFO("\n---%s %d: Try DestroyFB[%tu], return[%u]\n", __FUNCTION__, __LINE__,(ptrdiff_t)u32TempID, (MS_U8)enRet);
3130*53ee8cc1Swenshuai.xi }
3131*53ee8cc1Swenshuai.xi }
3132*53ee8cc1Swenshuai.xi
3133*53ee8cc1Swenshuai.xi #if GOP_LOCK_SUPPORT
3134*53ee8cc1Swenshuai.xi
3135*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->s32GOPMutexCnt > 0)
3136*53ee8cc1Swenshuai.xi {
3137*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPMutexCnt = 0;
3138*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(g_pGOPCtxLocal->s32GOPMutex);
3139*53ee8cc1Swenshuai.xi }
3140*53ee8cc1Swenshuai.xi #endif
3141*53ee8cc1Swenshuai.xi
3142*53ee8cc1Swenshuai.xi #if GOP_XC_LOCK_SUPPORT
3143*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->s32GOPXC_MutexCnt > 0)
3144*53ee8cc1Swenshuai.xi {
3145*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_MutexCnt = 0;
3146*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(g_pGOPCtxLocal->s32GOPXC_Mutex);
3147*53ee8cc1Swenshuai.xi }
3148*53ee8cc1Swenshuai.xi #endif
3149*53ee8cc1Swenshuai.xi }
3150*53ee8cc1Swenshuai.xi #endif
3151*53ee8cc1Swenshuai.xi
GOP_PreInit_Ctx(void * pInstance,MS_BOOL * pbFirstDrvInstant)3152*53ee8cc1Swenshuai.xi static MS_BOOL GOP_PreInit_Ctx(void* pInstance,MS_BOOL *pbFirstDrvInstant)
3153*53ee8cc1Swenshuai.xi {
3154*53ee8cc1Swenshuai.xi MS_BOOL bNeedInitShared =FALSE;
3155*53ee8cc1Swenshuai.xi MS_U16 u16LoopTime = 0x0;
3156*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3157*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3158*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3159*53ee8cc1Swenshuai.xi #endif
3160*53ee8cc1Swenshuai.xi
3161*53ee8cc1Swenshuai.xi _GetGOPEnum(pInstance);
3162*53ee8cc1Swenshuai.xi
3163*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal)
3164*53ee8cc1Swenshuai.xi {
3165*53ee8cc1Swenshuai.xi if(bFirstInit)
3166*53ee8cc1Swenshuai.xi {
3167*53ee8cc1Swenshuai.xi *pbFirstDrvInstant = TRUE;
3168*53ee8cc1Swenshuai.xi }
3169*53ee8cc1Swenshuai.xi else
3170*53ee8cc1Swenshuai.xi {
3171*53ee8cc1Swenshuai.xi *pbFirstDrvInstant = FALSE;
3172*53ee8cc1Swenshuai.xi }
3173*53ee8cc1Swenshuai.xi
3174*53ee8cc1Swenshuai.xi return TRUE;
3175*53ee8cc1Swenshuai.xi }
3176*53ee8cc1Swenshuai.xi g_pGOPCtxLocal = Drv_GOP_Init_Context(pInstance,&bNeedInitShared);
3177*53ee8cc1Swenshuai.xi if(NULL == g_pGOPCtxLocal)
3178*53ee8cc1Swenshuai.xi return FALSE;
3179*53ee8cc1Swenshuai.xi if(pbFirstDrvInstant)
3180*53ee8cc1Swenshuai.xi *pbFirstDrvInstant = bNeedInitShared;
3181*53ee8cc1Swenshuai.xi
3182*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bDummyInit = bNeedInitShared;
3183*53ee8cc1Swenshuai.xi
3184*53ee8cc1Swenshuai.xi #if 0
3185*53ee8cc1Swenshuai.xi if(bNeedInitShared)
3186*53ee8cc1Swenshuai.xi {
3187*53ee8cc1Swenshuai.xi MS_U32 gId;
3188*53ee8cc1Swenshuai.xi
3189*53ee8cc1Swenshuai.xi u16LoopTime = 0;
3190*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap = NULL;
3191*53ee8cc1Swenshuai.xi while (u16LoopTime<0xFF)
3192*53ee8cc1Swenshuai.xi {
3193*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap = malloc(MDrv_GOP_GetTotalGwinNum(g_pGOPCtxLocal)*sizeof(GWIN_MAP));
3194*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->gwinMap!=NULL)
3195*53ee8cc1Swenshuai.xi {
3196*53ee8cc1Swenshuai.xi break;
3197*53ee8cc1Swenshuai.xi }
3198*53ee8cc1Swenshuai.xi u16LoopTime++;
3199*53ee8cc1Swenshuai.xi }
3200*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->gwinMap!=NULL)
3201*53ee8cc1Swenshuai.xi {
3202*53ee8cc1Swenshuai.xi for( gId=0; gId<MApi_GOP_GWIN_GetTotalGwinNum(); gId++)
3203*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId= GWIN_ID_INVALID;
3204*53ee8cc1Swenshuai.xi }
3205*53ee8cc1Swenshuai.xi else
3206*53ee8cc1Swenshuai.xi {
3207*53ee8cc1Swenshuai.xi printf("\n[%s]allocate memory for gwinMap info fail!!!!!!!", __FUNCTION__);
3208*53ee8cc1Swenshuai.xi }
3209*53ee8cc1Swenshuai.xi
3210*53ee8cc1Swenshuai.xi u16LoopTime = 0;
3211*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType = NULL;
3212*53ee8cc1Swenshuai.xi while (u16LoopTime<0xFF)
3213*53ee8cc1Swenshuai.xi {
3214*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType = malloc(MApi_GOP_GWIN_GetMaxGOPNum()*sizeof(MS_S32));
3215*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType!=NULL)
3216*53ee8cc1Swenshuai.xi {
3217*53ee8cc1Swenshuai.xi break;
3218*53ee8cc1Swenshuai.xi }
3219*53ee8cc1Swenshuai.xi u16LoopTime++;
3220*53ee8cc1Swenshuai.xi }
3221*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType!=NULL)
3222*53ee8cc1Swenshuai.xi {
3223*53ee8cc1Swenshuai.xi for( gId=0; gId<MApi_GOP_GWIN_GetMaxGOPNum(); gId++)
3224*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[gId] = -1;
3225*53ee8cc1Swenshuai.xi }
3226*53ee8cc1Swenshuai.xi else
3227*53ee8cc1Swenshuai.xi {
3228*53ee8cc1Swenshuai.xi printf("\n[%s]allocate memory for s32OutputColorType info fail!!!!!!!", __FUNCTION__);
3229*53ee8cc1Swenshuai.xi }
3230*53ee8cc1Swenshuai.xi }
3231*53ee8cc1Swenshuai.xi #endif
3232*53ee8cc1Swenshuai.xi
3233*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
3234*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u32GOPClientId = (GETPIDTYPE)getpid();
3235*53ee8cc1Swenshuai.xi #else
3236*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u32GOPClientId = ++g_pGOPCtxLocal->pGOPCtxShared->u32ClientIdAllocator;
3237*53ee8cc1Swenshuai.xi if(0 == g_pGOPCtxLocal->u32GOPClientId)
3238*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u32GOPClientId = ++g_pGOPCtxLocal->pGOPCtxShared->u32ClientIdAllocator;
3239*53ee8cc1Swenshuai.xi #endif
3240*53ee8cc1Swenshuai.xi
3241*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo = NULL;
3242*53ee8cc1Swenshuai.xi u16LoopTime = 0;
3243*53ee8cc1Swenshuai.xi while (u16LoopTime<0xFF)
3244*53ee8cc1Swenshuai.xi {
3245*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
3246*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->sMirrorInfo ==NULL)
3247*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo = kmalloc(g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum * sizeof(GOP_GwinMirror_Info), GFP_KERNEL);
3248*53ee8cc1Swenshuai.xi #else
3249*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->sMirrorInfo ==NULL)
3250*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo = malloc(g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum * sizeof(GOP_GwinMirror_Info));
3251*53ee8cc1Swenshuai.xi #endif
3252*53ee8cc1Swenshuai.xi
3253*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->sMirrorInfo!=NULL)
3254*53ee8cc1Swenshuai.xi {
3255*53ee8cc1Swenshuai.xi break;
3256*53ee8cc1Swenshuai.xi }
3257*53ee8cc1Swenshuai.xi u16LoopTime++;
3258*53ee8cc1Swenshuai.xi
3259*53ee8cc1Swenshuai.xi }
3260*53ee8cc1Swenshuai.xi
3261*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->sMirrorInfo==NULL)
3262*53ee8cc1Swenshuai.xi {
3263*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n [%s][%d]allocate memory for gwin mirror info fail!!!",__FUNCTION__,__LINE__));
3264*53ee8cc1Swenshuai.xi }
3265*53ee8cc1Swenshuai.xi else
3266*53ee8cc1Swenshuai.xi {
3267*53ee8cc1Swenshuai.xi memset(g_pGOPCtxLocal->sMirrorInfo, 0, g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum * sizeof(GOP_GwinMirror_Info));
3268*53ee8cc1Swenshuai.xi }
3269*53ee8cc1Swenshuai.xi
3270*53ee8cc1Swenshuai.xi memset(&g_pGOPCtxLocal->sGOPConfig, 0, sizeof(GOP_Config));
3271*53ee8cc1Swenshuai.xi
3272*53ee8cc1Swenshuai.xi memset(g_pGOPCtxLocal->MS_MuxGop, 0, MAX_GOP_MUX_SUPPORT*sizeof(MS_U8));
3273*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= FALSE;
3274*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsClkClosed= FALSE;
3275*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u8ChgIpMuxGop = 0xFF;
3276*53ee8cc1Swenshuai.xi #if GOP_LOCK_SUPPORT
3277*53ee8cc1Swenshuai.xi char GOP_MUTEX[] = "GOP_Mutex";
3278*53ee8cc1Swenshuai.xi
3279*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPMutexCnt = 0;
3280*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPMutex = MsOS_CreateMutex(E_MSOS_FIFO, (char *)GOP_MUTEX, MSOS_PROCESS_SHARED);
3281*53ee8cc1Swenshuai.xi if (0 > g_pGOPCtxLocal->s32GOPMutex)
3282*53ee8cc1Swenshuai.xi {
3283*53ee8cc1Swenshuai.xi GOP_M_ERR("%s %d create gop mutex fail\n", __FUNCTION__,__LINE__);
3284*53ee8cc1Swenshuai.xi return FALSE;
3285*53ee8cc1Swenshuai.xi }
3286*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPLock = -1;
3287*53ee8cc1Swenshuai.xi #endif
3288*53ee8cc1Swenshuai.xi
3289*53ee8cc1Swenshuai.xi #if GOP_XC_LOCK_SUPPORT
3290*53ee8cc1Swenshuai.xi char XC_MUTEX[] = "_XC_Mutex";
3291*53ee8cc1Swenshuai.xi
3292*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_MutexCnt = 0;
3293*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, (char *)XC_MUTEX, MSOS_PROCESS_SHARED);
3294*53ee8cc1Swenshuai.xi if (0 > g_pGOPCtxLocal->s32GOPXC_Mutex)
3295*53ee8cc1Swenshuai.xi {
3296*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%06d] create XC mutex fail _GOPXC_Mutex=0x%lx\n", __FUNCTION__, __LINE__, g_pGOPCtxLocal->s32GOPXC_Mutex);
3297*53ee8cc1Swenshuai.xi }
3298*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->s32GOPXC_Lock = -1;
3299*53ee8cc1Swenshuai.xi #endif
3300*53ee8cc1Swenshuai.xi
3301*53ee8cc1Swenshuai.xi return TRUE;
3302*53ee8cc1Swenshuai.xi }
3303*53ee8cc1Swenshuai.xi
3304*53ee8cc1Swenshuai.xi
GOP_MapFB2Win(void * pInstance,MS_U32 u32fbId,MS_U32 GwinId)3305*53ee8cc1Swenshuai.xi MS_U32 GOP_MapFB2Win(void* pInstance,MS_U32 u32fbId, MS_U32 GwinId)
3306*53ee8cc1Swenshuai.xi {
3307*53ee8cc1Swenshuai.xi GOP_GwinInfo gWin;
3308*53ee8cc1Swenshuai.xi MS_U32 u32Temp;
3309*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
3310*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB2;
3311*53ee8cc1Swenshuai.xi
3312*53ee8cc1Swenshuai.xi MS_BOOL bAFBC_Enable=FALSE;
3313*53ee8cc1Swenshuai.xi MS_U8 u8GOP=0;
3314*53ee8cc1Swenshuai.xi DRV_GOP_AFBC_Info sAFBCWinProperty;
3315*53ee8cc1Swenshuai.xi EN_DRV_GOP_AFBC_CNTL eAFBC_cmd=E_DRV_GOP_AFBC_MAX;
3316*53ee8cc1Swenshuai.xi memset(&sAFBCWinProperty, 0, sizeof(DRV_GOP_AFBC_Info));
3317*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3318*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3319*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3320*53ee8cc1Swenshuai.xi #endif
3321*53ee8cc1Swenshuai.xi
3322*53ee8cc1Swenshuai.xi if (u32fbId >= DRV_MAX_GWIN_FB_SUPPORT)
3323*53ee8cc1Swenshuai.xi {
3324*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_OUT_OF_RANGE);
3325*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]: fbId max already reached! FBId: %td, winId: %td\n",__FUNCTION__, __LINE__, (ptrdiff_t)u32fbId, (ptrdiff_t)GwinId);
3326*53ee8cc1Swenshuai.xi return (GOP_API_FAIL);
3327*53ee8cc1Swenshuai.xi }
3328*53ee8cc1Swenshuai.xi
3329*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,GwinId))
3330*53ee8cc1Swenshuai.xi {
3331*53ee8cc1Swenshuai.xi GOP_M_ERR("\n[%s][%d] not support gwin id:%td in this chip version",__FUNCTION__, __LINE__, (ptrdiff_t)GwinId);
3332*53ee8cc1Swenshuai.xi return (GOP_API_FAIL);
3333*53ee8cc1Swenshuai.xi }
3334*53ee8cc1Swenshuai.xi memset(&gWin, 0, sizeof(GOP_GwinInfo));
3335*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
3336*53ee8cc1Swenshuai.xi
3337*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
3338*53ee8cc1Swenshuai.xi {
3339*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
3340*53ee8cc1Swenshuai.xi return (GOP_API_FAIL);
3341*53ee8cc1Swenshuai.xi }
3342*53ee8cc1Swenshuai.xi //Add support to Map a Non-Created Gwin with a dedicated FB:
3343*53ee8cc1Swenshuai.xi if(!_GOP_GWIN_IsGwinCreated(pInstance,GwinId))
3344*53ee8cc1Swenshuai.xi {
3345*53ee8cc1Swenshuai.xi //Create GWin for The client:
3346*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GwinId].u32CurFBId = u32fbId;
3347*53ee8cc1Swenshuai.xi
3348*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
3349*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GwinId].u32GOPClientId= (GETPIDTYPE)getpid();
3350*53ee8cc1Swenshuai.xi #else
3351*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GwinId].u32GOPClientId= g_pGOPCtxLocal->u32GOPClientId;
3352*53ee8cc1Swenshuai.xi #endif
3353*53ee8cc1Swenshuai.xi
3354*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, GwinId, FALSE);
3355*53ee8cc1Swenshuai.xi
3356*53ee8cc1Swenshuai.xi pwinFB->enable = TRUE;
3357*53ee8cc1Swenshuai.xi }
3358*53ee8cc1Swenshuai.xi u32Temp = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GwinId].u32CurFBId;
3359*53ee8cc1Swenshuai.xi if (DRV_MAX_GWIN_FB_SUPPORT > u32Temp)
3360*53ee8cc1Swenshuai.xi {
3361*53ee8cc1Swenshuai.xi pwinFB2 = _GetWinFB(pInstance,u32Temp);
3362*53ee8cc1Swenshuai.xi
3363*53ee8cc1Swenshuai.xi if(pwinFB2 == NULL)
3364*53ee8cc1Swenshuai.xi {
3365*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32Temp);
3366*53ee8cc1Swenshuai.xi return (GOP_API_FAIL);
3367*53ee8cc1Swenshuai.xi }
3368*53ee8cc1Swenshuai.xi
3369*53ee8cc1Swenshuai.xi msWarning(ERR_GWIN_ID_ALREADY_MAPPED);
3370*53ee8cc1Swenshuai.xi GOP_M_INFO("Warning: [%s][%d]: u8gwinId already assigned to fbId2(%td), fbId(%td)\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32Temp, (ptrdiff_t)u32fbId);
3371*53ee8cc1Swenshuai.xi pwinFB2->gWinId = GWIN_ID_INVALID;
3372*53ee8cc1Swenshuai.xi }
3373*53ee8cc1Swenshuai.xi
3374*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GwinId].u32CurFBId= u32fbId;
3375*53ee8cc1Swenshuai.xi
3376*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,GwinId ))
3377*53ee8cc1Swenshuai.xi {
3378*53ee8cc1Swenshuai.xi msWarning(ERR_GWIN_ID_OUT_OF_RANGE);
3379*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]: winId=%td is not in existence\n",__FUNCTION__,__LINE__,(ptrdiff_t)GwinId);
3380*53ee8cc1Swenshuai.xi return (GOP_API_FAIL);
3381*53ee8cc1Swenshuai.xi }
3382*53ee8cc1Swenshuai.xi
3383*53ee8cc1Swenshuai.xi pwinFB->gWinId = GwinId;
3384*53ee8cc1Swenshuai.xi
3385*53ee8cc1Swenshuai.xi gWin.u16DispHPixelStart = pwinFB->x0;
3386*53ee8cc1Swenshuai.xi gWin.u16DispVPixelStart = pwinFB->y0;
3387*53ee8cc1Swenshuai.xi gWin.u16RBlkHPixSize = pwinFB->width;
3388*53ee8cc1Swenshuai.xi gWin.u16RBlkVPixSize = pwinFB->height;
3389*53ee8cc1Swenshuai.xi u32Temp = _GOP_CalcPitch(pInstance,pwinFB->fbFmt, pwinFB->width);
3390*53ee8cc1Swenshuai.xi if(pwinFB->pitch < u32Temp)
3391*53ee8cc1Swenshuai.xi {
3392*53ee8cc1Swenshuai.xi gWin.u16RBlkHRblkSize = (MS_U16)u32Temp;//FB's pitch is invalid
3393*53ee8cc1Swenshuai.xi }
3394*53ee8cc1Swenshuai.xi else
3395*53ee8cc1Swenshuai.xi {
3396*53ee8cc1Swenshuai.xi gWin.u16RBlkHRblkSize = pwinFB->pitch;//FB's pitch is ok
3397*53ee8cc1Swenshuai.xi }
3398*53ee8cc1Swenshuai.xi gWin.u16DispHPixelEnd = pwinFB->x1;
3399*53ee8cc1Swenshuai.xi gWin.u16DispVPixelEnd = pwinFB->y1;
3400*53ee8cc1Swenshuai.xi gWin.u32DRAMRBlkStart = pwinFB->addr;
3401*53ee8cc1Swenshuai.xi gWin.u16WinX = gWin.u16WinY = 0;
3402*53ee8cc1Swenshuai.xi gWin.clrType = (EN_GOP_COLOR_TYPE)pwinFB->fbFmt;
3403*53ee8cc1Swenshuai.xi
3404*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,GwinId,&gWin);
3405*53ee8cc1Swenshuai.xi
3406*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,GwinId);
3407*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bAFBC_Support[u8GOP]==TRUE)
3408*53ee8cc1Swenshuai.xi {
3409*53ee8cc1Swenshuai.xi _GOP_MAP_FBID_AFBCCmd(pInstance,u32fbId,&eAFBC_cmd,&bAFBC_Enable);
3410*53ee8cc1Swenshuai.xi
3411*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16HPixelStart = gWin.u16DispHPixelStart;
3412*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16HPixelEnd = gWin.u16DispHPixelEnd;
3413*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16Pitch = gWin.u16RBlkHRblkSize;
3414*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16VPixelStart = gWin.u16DispVPixelStart;
3415*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16VPixelEnd= gWin.u16DispVPixelEnd;
3416*53ee8cc1Swenshuai.xi sAFBCWinProperty.u64DRAMAddr = gWin.u32DRAMRBlkStart;
3417*53ee8cc1Swenshuai.xi sAFBCWinProperty.u8Fmt = (MS_U8)eAFBC_cmd;
3418*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_AFBCSetWindow(g_pGOPCtxLocal, u8GOP, &sAFBCWinProperty, TRUE);
3419*53ee8cc1Swenshuai.xi
3420*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_AFBCMode(g_pGOPCtxLocal, u8GOP, bAFBC_Enable,eAFBC_cmd);
3421*53ee8cc1Swenshuai.xi }
3422*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3423*53ee8cc1Swenshuai.xi }
3424*53ee8cc1Swenshuai.xi
3425*53ee8cc1Swenshuai.xi
GOP_Set_Hscale(void * pInstance,MS_U8 u8GOP,MS_BOOL bEnable,MS_U16 src,MS_U16 dst)3426*53ee8cc1Swenshuai.xi MS_U32 GOP_Set_Hscale(void* pInstance,MS_U8 u8GOP,MS_BOOL bEnable, MS_U16 src, MS_U16 dst)
3427*53ee8cc1Swenshuai.xi {
3428*53ee8cc1Swenshuai.xi
3429*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3430*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3431*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3432*53ee8cc1Swenshuai.xi #endif
3433*53ee8cc1Swenshuai.xi
3434*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGopChipProperty->bPixelModeSupport)
3435*53ee8cc1Swenshuai.xi {
3436*53ee8cc1Swenshuai.xi if (src > dst)
3437*53ee8cc1Swenshuai.xi {
3438*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP can not scaling down\n",__FUNCTION__,__LINE__);
3439*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
3440*53ee8cc1Swenshuai.xi }
3441*53ee8cc1Swenshuai.xi }
3442*53ee8cc1Swenshuai.xi
3443*53ee8cc1Swenshuai.xi if (bEnable)
3444*53ee8cc1Swenshuai.xi {
3445*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16HScaleDst[u8GOP] = dst;
3446*53ee8cc1Swenshuai.xi }
3447*53ee8cc1Swenshuai.xi else
3448*53ee8cc1Swenshuai.xi {
3449*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16HScaleDst[u8GOP] = 0;
3450*53ee8cc1Swenshuai.xi }
3451*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_HSCALE(g_pGOPCtxLocal,u8GOP, bEnable, src, dst);
3452*53ee8cc1Swenshuai.xi MDrv_GOP_Set3DOSD_Middle(g_pGOPCtxLocal, u8GOP);
3453*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
3454*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3455*53ee8cc1Swenshuai.xi }
3456*53ee8cc1Swenshuai.xi
GOP_Get_Hscale(void * pInstance,MS_U32 u32GopId)3457*53ee8cc1Swenshuai.xi MS_U16 GOP_Get_Hscale(void* pInstance,MS_U32 u32GopId)
3458*53ee8cc1Swenshuai.xi {
3459*53ee8cc1Swenshuai.xi MS_U16 HScaleRatio = SCALING_MULITPLIER;
3460*53ee8cc1Swenshuai.xi MS_U16 VScaleRatio = SCALING_MULITPLIER;
3461*53ee8cc1Swenshuai.xi
3462*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3463*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3464*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3465*53ee8cc1Swenshuai.xi #endif
3466*53ee8cc1Swenshuai.xi
3467*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Get_HVScaleRatio(g_pGOPCtxLocal, (MS_U8)u32GopId, &HScaleRatio, &VScaleRatio);
3468*53ee8cc1Swenshuai.xi return HScaleRatio;
3469*53ee8cc1Swenshuai.xi }
3470*53ee8cc1Swenshuai.xi
GOP_Get_Vscale(void * pInstance,MS_U32 u32GopId)3471*53ee8cc1Swenshuai.xi MS_U16 GOP_Get_Vscale(void* pInstance,MS_U32 u32GopId)
3472*53ee8cc1Swenshuai.xi {
3473*53ee8cc1Swenshuai.xi MS_U16 HScaleRatio = SCALING_MULITPLIER;
3474*53ee8cc1Swenshuai.xi MS_U16 VScaleRatio = SCALING_MULITPLIER;
3475*53ee8cc1Swenshuai.xi
3476*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3477*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3478*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3479*53ee8cc1Swenshuai.xi #endif
3480*53ee8cc1Swenshuai.xi
3481*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Get_HVScaleRatio(g_pGOPCtxLocal, (MS_U8)u32GopId, &HScaleRatio, &VScaleRatio);
3482*53ee8cc1Swenshuai.xi return VScaleRatio;
3483*53ee8cc1Swenshuai.xi }
3484*53ee8cc1Swenshuai.xi
GOP_Set_Vscale(void * pInstance,MS_U8 u8GOP,MS_BOOL bEnable,MS_U16 src,MS_U16 dst)3485*53ee8cc1Swenshuai.xi MS_U32 GOP_Set_Vscale(void* pInstance,MS_U8 u8GOP,MS_BOOL bEnable, MS_U16 src, MS_U16 dst)
3486*53ee8cc1Swenshuai.xi {
3487*53ee8cc1Swenshuai.xi
3488*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3489*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3490*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3491*53ee8cc1Swenshuai.xi #endif
3492*53ee8cc1Swenshuai.xi
3493*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGopChipProperty->bPixelModeSupport)
3494*53ee8cc1Swenshuai.xi {
3495*53ee8cc1Swenshuai.xi if (src > dst)
3496*53ee8cc1Swenshuai.xi {
3497*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP can not scaling down\n",__FUNCTION__,__LINE__);
3498*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
3499*53ee8cc1Swenshuai.xi }
3500*53ee8cc1Swenshuai.xi }
3501*53ee8cc1Swenshuai.xi
3502*53ee8cc1Swenshuai.xi if (bEnable)
3503*53ee8cc1Swenshuai.xi {
3504*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16VScaleDst[u8GOP] = dst;
3505*53ee8cc1Swenshuai.xi }
3506*53ee8cc1Swenshuai.xi else
3507*53ee8cc1Swenshuai.xi {
3508*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16VScaleDst[u8GOP] = 0;
3509*53ee8cc1Swenshuai.xi }
3510*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_VSCALE(g_pGOPCtxLocal, u8GOP,bEnable, src, dst);
3511*53ee8cc1Swenshuai.xi MDrv_GOP_Set3DOSD_Middle(g_pGOPCtxLocal, u8GOP);
3512*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
3513*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3514*53ee8cc1Swenshuai.xi
3515*53ee8cc1Swenshuai.xi }
3516*53ee8cc1Swenshuai.xi
GOP_SetStretchWin(void * pInstance,MS_U8 u8GOP_num,EN_GOP_DST_TYPE eDstType,MS_U16 x,MS_U16 y,MS_U16 width,MS_U16 height)3517*53ee8cc1Swenshuai.xi MS_U32 GOP_SetStretchWin(void* pInstance,MS_U8 u8GOP_num, EN_GOP_DST_TYPE eDstType,MS_U16 x, MS_U16 y, MS_U16 width, MS_U16 height)
3518*53ee8cc1Swenshuai.xi {
3519*53ee8cc1Swenshuai.xi MS_U16 u16OrgWidth, u16Temp;
3520*53ee8cc1Swenshuai.xi
3521*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3522*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3523*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3524*53ee8cc1Swenshuai.xi #endif
3525*53ee8cc1Swenshuai.xi
3526*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP_num))
3527*53ee8cc1Swenshuai.xi {
3528*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP_num);
3529*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
3530*53ee8cc1Swenshuai.xi }
3531*53ee8cc1Swenshuai.xi
3532*53ee8cc1Swenshuai.xi //Get real original hw Stretch win width
3533*53ee8cc1Swenshuai.xi _GOP_Get_StretchWin(pInstance,u8GOP_num, &u16Temp, &u16Temp, &u16OrgWidth, &u16Temp);
3534*53ee8cc1Swenshuai.xi _GOP_GWIN_Align_StretchWin(pInstance, u8GOP_num, eDstType, &x, &y, &width, &height, 16);
3535*53ee8cc1Swenshuai.xi //Store API use stretch window
3536*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchWidth[u8GOP_num] = width;
3537*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchHeight[u8GOP_num]= height;
3538*53ee8cc1Swenshuai.xi
3539*53ee8cc1Swenshuai.xi _GOP_GWIN_Adjust_3DStretchWin(pInstance,u8GOP_num, &x, &y, &width, &height);
3540*53ee8cc1Swenshuai.xi if (u16OrgWidth <= width)//Set a large one, set htt first
3541*53ee8cc1Swenshuai.xi {
3542*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetHTotal(g_pGOPCtxLocal,u8GOP_num ,width);
3543*53ee8cc1Swenshuai.xi }
3544*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetStretchWin(g_pGOPCtxLocal, u8GOP_num, x, y, width, height);
3545*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP_num);
3546*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP_num);
3547*53ee8cc1Swenshuai.xi
3548*53ee8cc1Swenshuai.xi if (u16OrgWidth > width)//Set a small one, set htt after Gwin regsiter updated
3549*53ee8cc1Swenshuai.xi {
3550*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetHTotal(g_pGOPCtxLocal,u8GOP_num ,width);
3551*53ee8cc1Swenshuai.xi }
3552*53ee8cc1Swenshuai.xi
3553*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3554*53ee8cc1Swenshuai.xi }
3555*53ee8cc1Swenshuai.xi
GOP_SetStretchWinPosition(void * pInstance,MS_U8 u8GOPNum,MS_U16 u16DispX,MS_U16 u16DispY)3556*53ee8cc1Swenshuai.xi MS_U32 GOP_SetStretchWinPosition(void* pInstance,MS_U8 u8GOPNum, MS_U16 u16DispX, MS_U16 u16DispY)
3557*53ee8cc1Swenshuai.xi {
3558*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3559*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3560*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3561*53ee8cc1Swenshuai.xi #endif
3562*53ee8cc1Swenshuai.xi
3563*53ee8cc1Swenshuai.xi MS_U16 u16SrcWidth;
3564*53ee8cc1Swenshuai.xi MS_U16 u16SrcHeight;
3565*53ee8cc1Swenshuai.xi MS_U16 u16StrenthWidth = g_pGOPCtxLocal->pGOPCtxShared->u16HScaleDst[u8GOPNum];
3566*53ee8cc1Swenshuai.xi MS_U16 u16StrenthHeight = g_pGOPCtxLocal->pGOPCtxShared->u16VScaleDst[u8GOPNum];
3567*53ee8cc1Swenshuai.xi MS_U16 u16PnlWidth = g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8GOPNum];
3568*53ee8cc1Swenshuai.xi MS_U16 u16PnlHeight = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8GOPNum];
3569*53ee8cc1Swenshuai.xi MS_U16 u16HStart = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOPNum];
3570*53ee8cc1Swenshuai.xi EN_GOP_DST_TYPE GopDst = MAX_GOP_DST_SUPPORT;
3571*53ee8cc1Swenshuai.xi DRV_GOPDstType enDst = E_DRV_GOP_DST_INVALID;
3572*53ee8cc1Swenshuai.xi MS_U16 u16Tmp = 0;
3573*53ee8cc1Swenshuai.xi
3574*53ee8cc1Swenshuai.xi (MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOPNum, &enDst));
3575*53ee8cc1Swenshuai.xi //Fix me : tmp only for OP
3576*53ee8cc1Swenshuai.xi if(enDst != E_DRV_GOP_DST_OP0)
3577*53ee8cc1Swenshuai.xi {
3578*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3579*53ee8cc1Swenshuai.xi }
3580*53ee8cc1Swenshuai.xi
3581*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Get_StretchWin(g_pGOPCtxLocal, u8GOPNum, &u16Tmp, &u16Tmp, &u16SrcWidth, &u16SrcHeight);
3582*53ee8cc1Swenshuai.xi
3583*53ee8cc1Swenshuai.xi if ((0 == u16StrenthWidth) || (0 == u16StrenthHeight))
3584*53ee8cc1Swenshuai.xi {
3585*53ee8cc1Swenshuai.xi MS_U16 u16HRatio = SCALING_MULITPLIER;
3586*53ee8cc1Swenshuai.xi MS_U16 u16VRatio = SCALING_MULITPLIER;
3587*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Get_HVScaleRatio(g_pGOPCtxLocal, u8GOPNum, &u16HRatio, &u16VRatio);
3588*53ee8cc1Swenshuai.xi //get u16StrenthWidth or u16StrenthHeight from current ratio
3589*53ee8cc1Swenshuai.xi
3590*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bHMirror && (0 != u16DispX))
3591*53ee8cc1Swenshuai.xi {
3592*53ee8cc1Swenshuai.xi // if x!=0 bHMirror = 1, up alignment the u16StrenthWidth, to make sure there is space lefted in the left of mirror panel
3593*53ee8cc1Swenshuai.xi u16StrenthWidth = (MS_U16)(((u16SrcWidth * SCALING_MULITPLIER) + u16HRatio) / u16HRatio);
3594*53ee8cc1Swenshuai.xi }
3595*53ee8cc1Swenshuai.xi else //None mirror or mirror+x=0
3596*53ee8cc1Swenshuai.xi {
3597*53ee8cc1Swenshuai.xi // if x=0 bHMirror = 1, down alignment the u16StrenthWidth, to make sure there is no space lefted in the left of mirror panel
3598*53ee8cc1Swenshuai.xi u16StrenthWidth = (MS_U16)((u16SrcWidth * SCALING_MULITPLIER) / u16HRatio);
3599*53ee8cc1Swenshuai.xi }
3600*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bVMirror && (0 != u16DispY))
3601*53ee8cc1Swenshuai.xi {
3602*53ee8cc1Swenshuai.xi // if y!=0 bVMirror = 1, up alignment the u16StrenthHeight, to make sure there is space lefted in the top of mirror panel
3603*53ee8cc1Swenshuai.xi u16StrenthHeight = (MS_U16)(((u16SrcHeight * SCALING_MULITPLIER) + u16VRatio) / u16VRatio);
3604*53ee8cc1Swenshuai.xi }
3605*53ee8cc1Swenshuai.xi else
3606*53ee8cc1Swenshuai.xi {
3607*53ee8cc1Swenshuai.xi // if y=0 bVMirror = 1, down alignment the u16StrenthHeight, to make sure there is no space lefted in the top of mirror panel
3608*53ee8cc1Swenshuai.xi u16StrenthHeight = (MS_U16)((u16SrcHeight * SCALING_MULITPLIER) / u16VRatio);
3609*53ee8cc1Swenshuai.xi }
3610*53ee8cc1Swenshuai.xi }
3611*53ee8cc1Swenshuai.xi
3612*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->enGOP3DType == E_DRV_3D_DUP_FULL)
3613*53ee8cc1Swenshuai.xi {
3614*53ee8cc1Swenshuai.xi switch (g_pGOPCtxLocal->pGOPCtxShared->GOP_StereoMode[u8GOPNum])
3615*53ee8cc1Swenshuai.xi {
3616*53ee8cc1Swenshuai.xi case E_DRV_GOP_3D_LINE_ALTERNATIVE:
3617*53ee8cc1Swenshuai.xi case E_DRV_GOP_3D_TOP_BOTTOM:
3618*53ee8cc1Swenshuai.xi u16StrenthHeight = u16StrenthHeight <<1;
3619*53ee8cc1Swenshuai.xi break;
3620*53ee8cc1Swenshuai.xi case E_DRV_GOP_3D_LINE_FRAMEPACKING:
3621*53ee8cc1Swenshuai.xi u16StrenthHeight = u16StrenthHeight <<1;
3622*53ee8cc1Swenshuai.xi u16StrenthHeight += g_pGOPCtxLocal->u16GOPGWinMiddle[u8GOPNum];
3623*53ee8cc1Swenshuai.xi break;
3624*53ee8cc1Swenshuai.xi case E_DRV_GOP_3D_SIDE_BY_SYDE:
3625*53ee8cc1Swenshuai.xi u16StrenthWidth = u16StrenthWidth <<1;
3626*53ee8cc1Swenshuai.xi break;
3627*53ee8cc1Swenshuai.xi default:
3628*53ee8cc1Swenshuai.xi break;
3629*53ee8cc1Swenshuai.xi }
3630*53ee8cc1Swenshuai.xi }
3631*53ee8cc1Swenshuai.xi //error protect: width < panel width
3632*53ee8cc1Swenshuai.xi if (u16PnlWidth < u16StrenthWidth)
3633*53ee8cc1Swenshuai.xi {
3634*53ee8cc1Swenshuai.xi u16DispX = 0;
3635*53ee8cc1Swenshuai.xi u16StrenthWidth = u16PnlWidth;
3636*53ee8cc1Swenshuai.xi }
3637*53ee8cc1Swenshuai.xi else
3638*53ee8cc1Swenshuai.xi {
3639*53ee8cc1Swenshuai.xi //error protect: x+width < panel width +Hstart
3640*53ee8cc1Swenshuai.xi if (u16PnlWidth + u16HStart < u16DispX + u16StrenthWidth)
3641*53ee8cc1Swenshuai.xi {
3642*53ee8cc1Swenshuai.xi // allow strench win out of panel limited by HTT with OP dst
3643*53ee8cc1Swenshuai.xi u16DispX = 0;
3644*53ee8cc1Swenshuai.xi }
3645*53ee8cc1Swenshuai.xi }
3646*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bHMirror)
3647*53ee8cc1Swenshuai.xi {
3648*53ee8cc1Swenshuai.xi MS_U16 u16RightEnd = u16DispX + u16StrenthWidth;
3649*53ee8cc1Swenshuai.xi // adjust x axis for mirror
3650*53ee8cc1Swenshuai.xi if (u16PnlWidth > u16RightEnd)
3651*53ee8cc1Swenshuai.xi {
3652*53ee8cc1Swenshuai.xi u16DispX = u16PnlWidth - u16RightEnd;
3653*53ee8cc1Swenshuai.xi }
3654*53ee8cc1Swenshuai.xi else
3655*53ee8cc1Swenshuai.xi {
3656*53ee8cc1Swenshuai.xi u16DispX = 0;
3657*53ee8cc1Swenshuai.xi }
3658*53ee8cc1Swenshuai.xi }
3659*53ee8cc1Swenshuai.xi
3660*53ee8cc1Swenshuai.xi //error protect: height < panel height
3661*53ee8cc1Swenshuai.xi if (u16PnlHeight < u16StrenthHeight)
3662*53ee8cc1Swenshuai.xi {
3663*53ee8cc1Swenshuai.xi u16DispY = 0;
3664*53ee8cc1Swenshuai.xi u16StrenthHeight = u16PnlHeight;
3665*53ee8cc1Swenshuai.xi }
3666*53ee8cc1Swenshuai.xi //error protect: y+height < panel height
3667*53ee8cc1Swenshuai.xi else if (u16PnlHeight < u16DispY + u16StrenthHeight)
3668*53ee8cc1Swenshuai.xi {
3669*53ee8cc1Swenshuai.xi u16DispY = 0;
3670*53ee8cc1Swenshuai.xi }
3671*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bVMirror)
3672*53ee8cc1Swenshuai.xi {
3673*53ee8cc1Swenshuai.xi // adjust y axis for mirror
3674*53ee8cc1Swenshuai.xi u16DispY = u16PnlHeight - u16DispY - u16StrenthHeight;
3675*53ee8cc1Swenshuai.xi }
3676*53ee8cc1Swenshuai.xi
3677*53ee8cc1Swenshuai.xi _GOP_Map_DRVDst2API_Enum_(pInstance,&GopDst, enDst);
3678*53ee8cc1Swenshuai.xi _GOP_GWIN_Align_StretchWin(pInstance, u8GOPNum, GopDst, &u16DispX, &u16DispY, &u16Tmp, &u16Tmp, 16);
3679*53ee8cc1Swenshuai.xi
3680*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetStretchWinPosition(g_pGOPCtxLocal, u8GOPNum, u16DispX, u16DispY);
3681*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOPNum);
3682*53ee8cc1Swenshuai.xi
3683*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
3684*53ee8cc1Swenshuai.xi }
3685*53ee8cc1Swenshuai.xi
GOP_MultiSwitchByAddr(void * pInstance,PGOP_GWIN_FLIP_MULTI_WIN_INFO pMultiflip)3686*53ee8cc1Swenshuai.xi MS_BOOL GOP_MultiSwitchByAddr(void* pInstance,PGOP_GWIN_FLIP_MULTI_WIN_INFO pMultiflip)
3687*53ee8cc1Swenshuai.xi {
3688*53ee8cc1Swenshuai.xi MS_U8 u8GwinGOP,i = 0;
3689*53ee8cc1Swenshuai.xi MS_U32 u32GwinIdx = 0;
3690*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
3691*53ee8cc1Swenshuai.xi MS_GFLIP_MULTIINFO Multiinfo;
3692*53ee8cc1Swenshuai.xi MS_TLB_GFLIP_MULTIINFO TLBMultiinfo;
3693*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel=0xFF;
3694*53ee8cc1Swenshuai.xi MS_U8 u8GWinBase=0;
3695*53ee8cc1Swenshuai.xi MS_BOOL bTLBenable=FALSE;
3696*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3697*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3698*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3699*53ee8cc1Swenshuai.xi #endif
3700*53ee8cc1Swenshuai.xi
3701*53ee8cc1Swenshuai.xi Multiinfo.u8GopInfoCnt = pMultiflip->u8InfoCnt;
3702*53ee8cc1Swenshuai.xi for(i = 0;i < (pMultiflip->u8InfoCnt);i++)
3703*53ee8cc1Swenshuai.xi {
3704*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,pMultiflip->FlipInfo[i].GwinId))
3705*53ee8cc1Swenshuai.xi {
3706*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)pMultiflip->FlipInfo[i].GwinId);
3707*53ee8cc1Swenshuai.xi return FALSE;
3708*53ee8cc1Swenshuai.xi }
3709*53ee8cc1Swenshuai.xi
3710*53ee8cc1Swenshuai.xi u8GwinGOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,pMultiflip->FlipInfo[i].GwinId);
3711*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGOP])
3712*53ee8cc1Swenshuai.xi {
3713*53ee8cc1Swenshuai.xi u8GWinBase=0;
3714*53ee8cc1Swenshuai.xi for(i=0;i<u8GwinGOP;i++)
3715*53ee8cc1Swenshuai.xi {
3716*53ee8cc1Swenshuai.xi u8GWinBase += MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, i);
3717*53ee8cc1Swenshuai.xi }
3718*53ee8cc1Swenshuai.xi if(pMultiflip->FlipInfo[i].GwinId != u8GWinBase)
3719*53ee8cc1Swenshuai.xi {
3720*53ee8cc1Swenshuai.xi GOP_M_INFO("\n[%s] not support TLB mode, gwin id:0x%tx ", __FUNCTION__, (ptrdiff_t)pMultiflip->FlipInfo[i].GwinId);
3721*53ee8cc1Swenshuai.xi }
3722*53ee8cc1Swenshuai.xi }
3723*53ee8cc1Swenshuai.xi switch(u8GwinGOP)
3724*53ee8cc1Swenshuai.xi {
3725*53ee8cc1Swenshuai.xi case E_GOP0:
3726*53ee8cc1Swenshuai.xi u32GwinIdx=pMultiflip->FlipInfo[i].GwinId;
3727*53ee8cc1Swenshuai.xi break;
3728*53ee8cc1Swenshuai.xi case E_GOP1:
3729*53ee8cc1Swenshuai.xi u32GwinIdx=pMultiflip->FlipInfo[i].GwinId-MAX_GOP0_GWIN;
3730*53ee8cc1Swenshuai.xi break;
3731*53ee8cc1Swenshuai.xi case E_GOP2:
3732*53ee8cc1Swenshuai.xi u32GwinIdx=pMultiflip->FlipInfo[i].GwinId-GOP2_Gwin0Id;
3733*53ee8cc1Swenshuai.xi break;
3734*53ee8cc1Swenshuai.xi case E_GOP3:
3735*53ee8cc1Swenshuai.xi u32GwinIdx=pMultiflip->FlipInfo[i].GwinId-GOP3_Gwin0Id;
3736*53ee8cc1Swenshuai.xi break;
3737*53ee8cc1Swenshuai.xi case E_GOP4:
3738*53ee8cc1Swenshuai.xi u32GwinIdx=pMultiflip->FlipInfo[i].GwinId-GOP4_Gwin0Id;
3739*53ee8cc1Swenshuai.xi break;
3740*53ee8cc1Swenshuai.xi case E_GOP5:
3741*53ee8cc1Swenshuai.xi u32GwinIdx=pMultiflip->FlipInfo[i].GwinId-GOP5_Gwin0Id;
3742*53ee8cc1Swenshuai.xi break;
3743*53ee8cc1Swenshuai.xi default:
3744*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GwinGOP);
3745*53ee8cc1Swenshuai.xi break;
3746*53ee8cc1Swenshuai.xi }
3747*53ee8cc1Swenshuai.xi
3748*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u32GopIdx = (MS_U32)u8GwinGOP;
3749*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u32GwinIdx = u32GwinIdx;
3750*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64MainAddr = pMultiflip->FlipInfo[i].FlipAddr;
3751*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64SubAddr = pMultiflip->FlipInfo[i].SubFlipAddr;
3752*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u32TagId = pMultiflip->FlipInfo[i].WaitTagID;
3753*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u32QEntry = *(pMultiflip->FlipInfo[i].pQueueCnt);
3754*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u32Result = TRUE;
3755*53ee8cc1Swenshuai.xi
3756*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bGOP3DLRSwitch[u8GwinGOP])
3757*53ee8cc1Swenshuai.xi {
3758*53ee8cc1Swenshuai.xi //Do L/R switch
3759*53ee8cc1Swenshuai.xi MS_PHY u64Temp = Multiinfo.astGopInfo[i].u64MainAddr;
3760*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64MainAddr = Multiinfo.astGopInfo[i].u64SubAddr;
3761*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64SubAddr = u64Temp;
3762*53ee8cc1Swenshuai.xi }
3763*53ee8cc1Swenshuai.xi
3764*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGOP])
3765*53ee8cc1Swenshuai.xi {
3766*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
3767*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
3768*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GwinGOP, &GopDst);
3769*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
3770*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
3771*53ee8cc1Swenshuai.xi {
3772*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
3773*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,pMultiflip->FlipInfo[i].GwinId, &stGwinInfo);
3774*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = Multiinfo.astGopInfo[i].u64MainAddr;
3775*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u32GwinIdx].u64NonMirrorFBAdr = stGwinInfo.u32DRAMRBlkStart;
3776*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,pMultiflip->FlipInfo[i].GwinId, bHMirror, bVMirror, &stGwinInfo);
3777*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64MainAddr = stGwinInfo.u32DRAMRBlkStart;
3778*53ee8cc1Swenshuai.xi
3779*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = Multiinfo.astGopInfo[i].u64SubAddr;
3780*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,pMultiflip->FlipInfo[i].GwinId, bHMirror, bVMirror, &stGwinInfo);
3781*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64SubAddr = stGwinInfo.u32DRAMRBlkStart;
3782*53ee8cc1Swenshuai.xi }
3783*53ee8cc1Swenshuai.xi }
3784*53ee8cc1Swenshuai.xi else
3785*53ee8cc1Swenshuai.xi {
3786*53ee8cc1Swenshuai.xi if(u8GwinGOP > GOPTYPE.GOP0)
3787*53ee8cc1Swenshuai.xi {
3788*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
3789*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
3790*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GwinGOP, &GopDst);
3791*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
3792*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
3793*53ee8cc1Swenshuai.xi {
3794*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
3795*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,pMultiflip->FlipInfo[i].GwinId, &stGwinInfo);
3796*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = Multiinfo.astGopInfo[i].u64MainAddr;
3797*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[u32GwinIdx].u64NonMirrorFBAdr = stGwinInfo.u32DRAMRBlkStart;
3798*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,pMultiflip->FlipInfo[i].GwinId, bHMirror, bVMirror, &stGwinInfo);
3799*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64MainAddr = stGwinInfo.u32DRAMRBlkStart;
3800*53ee8cc1Swenshuai.xi
3801*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = Multiinfo.astGopInfo[i].u64SubAddr;
3802*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,pMultiflip->FlipInfo[i].GwinId, bHMirror, bVMirror, &stGwinInfo);
3803*53ee8cc1Swenshuai.xi Multiinfo.astGopInfo[i].u64SubAddr = stGwinInfo.u32DRAMRBlkStart;
3804*53ee8cc1Swenshuai.xi
3805*53ee8cc1Swenshuai.xi }
3806*53ee8cc1Swenshuai.xi }
3807*53ee8cc1Swenshuai.xi }
3808*53ee8cc1Swenshuai.xi //GOP HW just read the relative offset of each MIU
3809*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, Multiinfo.astGopInfo[i].u64MainAddr, Multiinfo.astGopInfo[i].u64MainAddr);
3810*53ee8cc1Swenshuai.xi
3811*53ee8cc1Swenshuai.xi //GOP HW just read the relative offset of each MIU
3812*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, Multiinfo.astGopInfo[i].u64SubAddr, Multiinfo.astGopInfo[i].u64SubAddr);
3813*53ee8cc1Swenshuai.xi
3814*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u32GopIdx = Multiinfo.astGopInfo[i].u32GopIdx;
3815*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u32GwinIdx = Multiinfo.astGopInfo[i].u32GwinIdx;
3816*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u64MainAddr = Multiinfo.astGopInfo[i].u64MainAddr;
3817*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u32TagId = Multiinfo.astGopInfo[i].u32TagId;
3818*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u32QEntry = Multiinfo.astGopInfo[i].u32QEntry;
3819*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u32Result = Multiinfo.astGopInfo[i].u32Result;
3820*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u64SubAddr = Multiinfo.astGopInfo[i].u64SubAddr;
3821*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].bTLBEnable = g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGOP];
3822*53ee8cc1Swenshuai.xi TLBMultiinfo.astTLBGopInfo[i].u64TLBAddr = g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[u8GwinGOP];
3823*53ee8cc1Swenshuai.xi
3824*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGOP])
3825*53ee8cc1Swenshuai.xi {
3826*53ee8cc1Swenshuai.xi bTLBenable=TRUE;
3827*53ee8cc1Swenshuai.xi }
3828*53ee8cc1Swenshuai.xi }
3829*53ee8cc1Swenshuai.xi TLBMultiinfo.u8GopInfoCnt=Multiinfo.u8GopInfoCnt;
3830*53ee8cc1Swenshuai.xi
3831*53ee8cc1Swenshuai.xi if(bTLBenable == TRUE)
3832*53ee8cc1Swenshuai.xi {
3833*53ee8cc1Swenshuai.xi if(MDrv_GFLIP_SetTLBMultiFlipInfo(g_pGOPCtxLocal,&TLBMultiinfo))
3834*53ee8cc1Swenshuai.xi {
3835*53ee8cc1Swenshuai.xi for(i = 0;i < (pMultiflip->u8InfoCnt);i++)
3836*53ee8cc1Swenshuai.xi {
3837*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->gwinMap[pMultiflip->FlipInfo[i].GwinId].u32CurFBId<DRV_MAX_GWIN_FB_SUPPORT)
3838*53ee8cc1Swenshuai.xi {
3839*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[pMultiflip->FlipInfo[i].GwinId].u32CurFBId);
3840*53ee8cc1Swenshuai.xi pwinFB->gWinId = GWIN_ID_INVALID;
3841*53ee8cc1Swenshuai.xi }
3842*53ee8cc1Swenshuai.xi *(pMultiflip->FlipInfo[i].pQueueCnt) = Multiinfo.astGopInfo[i].u32QEntry;
3843*53ee8cc1Swenshuai.xi }
3844*53ee8cc1Swenshuai.xi return TRUE;
3845*53ee8cc1Swenshuai.xi }
3846*53ee8cc1Swenshuai.xi }
3847*53ee8cc1Swenshuai.xi else
3848*53ee8cc1Swenshuai.xi {
3849*53ee8cc1Swenshuai.xi if(MDrv_GFLIP_SetMultiFlipInfo(g_pGOPCtxLocal,&Multiinfo))
3850*53ee8cc1Swenshuai.xi {
3851*53ee8cc1Swenshuai.xi for(i = 0;i < (pMultiflip->u8InfoCnt);i++)
3852*53ee8cc1Swenshuai.xi {
3853*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->gwinMap[pMultiflip->FlipInfo[i].GwinId].u32CurFBId<DRV_MAX_GWIN_FB_SUPPORT)
3854*53ee8cc1Swenshuai.xi {
3855*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[pMultiflip->FlipInfo[i].GwinId].u32CurFBId);
3856*53ee8cc1Swenshuai.xi pwinFB->gWinId = GWIN_ID_INVALID;
3857*53ee8cc1Swenshuai.xi }
3858*53ee8cc1Swenshuai.xi *(pMultiflip->FlipInfo[i].pQueueCnt) = Multiinfo.astGopInfo[i].u32QEntry;
3859*53ee8cc1Swenshuai.xi }
3860*53ee8cc1Swenshuai.xi return TRUE;
3861*53ee8cc1Swenshuai.xi }
3862*53ee8cc1Swenshuai.xi }
3863*53ee8cc1Swenshuai.xi return FALSE;
3864*53ee8cc1Swenshuai.xi }
3865*53ee8cc1Swenshuai.xi
GOP_SwitchByAddr(void * pInstance,MS_U32 gWinId,MS_PHY u64MainFlipAddr,MS_PHY u64SubFlipAddr,MS_U16 u32WaitTagID,MS_U32 * pU32QueueCnt,MS_BOOL b3DEn)3866*53ee8cc1Swenshuai.xi MS_BOOL GOP_SwitchByAddr(void* pInstance,MS_U32 gWinId, MS_PHY u64MainFlipAddr, MS_PHY u64SubFlipAddr, MS_U16 u32WaitTagID, MS_U32 *pU32QueueCnt, MS_BOOL b3DEn)
3867*53ee8cc1Swenshuai.xi {
3868*53ee8cc1Swenshuai.xi MS_U8 u8GwinGOP;
3869*53ee8cc1Swenshuai.xi MS_U32 u32QueueCnt=0;
3870*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
3871*53ee8cc1Swenshuai.xi MS_U8 u8GWinBase=0;
3872*53ee8cc1Swenshuai.xi MS_U8 i;
3873*53ee8cc1Swenshuai.xi
3874*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3875*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3876*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3877*53ee8cc1Swenshuai.xi #endif
3878*53ee8cc1Swenshuai.xi
3879*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gWinId))
3880*53ee8cc1Swenshuai.xi {
3881*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gWinId);
3882*53ee8cc1Swenshuai.xi return FALSE;
3883*53ee8cc1Swenshuai.xi }
3884*53ee8cc1Swenshuai.xi
3885*53ee8cc1Swenshuai.xi u8GwinGOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,gWinId);
3886*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGOP])
3887*53ee8cc1Swenshuai.xi {
3888*53ee8cc1Swenshuai.xi u8GWinBase=0;
3889*53ee8cc1Swenshuai.xi for(i=0;i<u8GwinGOP;i++)
3890*53ee8cc1Swenshuai.xi {
3891*53ee8cc1Swenshuai.xi u8GWinBase += MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, i);
3892*53ee8cc1Swenshuai.xi }
3893*53ee8cc1Swenshuai.xi if(gWinId != u8GWinBase)
3894*53ee8cc1Swenshuai.xi {
3895*53ee8cc1Swenshuai.xi GOP_M_INFO("\n[%s] not support TLB mode, gwin id:0x%tx ", __FUNCTION__, (ptrdiff_t)gWinId);
3896*53ee8cc1Swenshuai.xi }
3897*53ee8cc1Swenshuai.xi }
3898*53ee8cc1Swenshuai.xi
3899*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bGOP3DLRSwitch[u8GwinGOP])
3900*53ee8cc1Swenshuai.xi {
3901*53ee8cc1Swenshuai.xi //Do L/R switch
3902*53ee8cc1Swenshuai.xi MS_PHY u64Temp = u64MainFlipAddr;
3903*53ee8cc1Swenshuai.xi u64MainFlipAddr = u64SubFlipAddr;
3904*53ee8cc1Swenshuai.xi u64SubFlipAddr = u64Temp;
3905*53ee8cc1Swenshuai.xi }
3906*53ee8cc1Swenshuai.xi
3907*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGOP])
3908*53ee8cc1Swenshuai.xi {
3909*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
3910*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
3911*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GwinGOP, &GopDst);
3912*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
3913*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
3914*53ee8cc1Swenshuai.xi {
3915*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
3916*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,gWinId, &stGwinInfo);
3917*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = u64MainFlipAddr;
3918*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[gWinId].u64NonMirrorFBAdr = u64MainFlipAddr;
3919*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,gWinId, bHMirror, bVMirror, &stGwinInfo);
3920*53ee8cc1Swenshuai.xi u64MainFlipAddr = stGwinInfo.u32DRAMRBlkStart;
3921*53ee8cc1Swenshuai.xi
3922*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = u64SubFlipAddr;
3923*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,gWinId, bHMirror, bVMirror, &stGwinInfo);
3924*53ee8cc1Swenshuai.xi u64SubFlipAddr = stGwinInfo.u32DRAMRBlkStart;
3925*53ee8cc1Swenshuai.xi }
3926*53ee8cc1Swenshuai.xi }
3927*53ee8cc1Swenshuai.xi else
3928*53ee8cc1Swenshuai.xi {
3929*53ee8cc1Swenshuai.xi if(u8GwinGOP > GOPTYPE.GOP0)
3930*53ee8cc1Swenshuai.xi {
3931*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
3932*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
3933*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GwinGOP, &GopDst);
3934*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
3935*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
3936*53ee8cc1Swenshuai.xi {
3937*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
3938*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,gWinId, &stGwinInfo);
3939*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = u64MainFlipAddr;
3940*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[gWinId].u64NonMirrorFBAdr = u64MainFlipAddr;
3941*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,gWinId, bHMirror, bVMirror, &stGwinInfo);
3942*53ee8cc1Swenshuai.xi u64MainFlipAddr = stGwinInfo.u32DRAMRBlkStart;
3943*53ee8cc1Swenshuai.xi
3944*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = u64SubFlipAddr;
3945*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,gWinId, bHMirror, bVMirror, &stGwinInfo);
3946*53ee8cc1Swenshuai.xi u64SubFlipAddr = stGwinInfo.u32DRAMRBlkStart;
3947*53ee8cc1Swenshuai.xi
3948*53ee8cc1Swenshuai.xi }
3949*53ee8cc1Swenshuai.xi }
3950*53ee8cc1Swenshuai.xi }
3951*53ee8cc1Swenshuai.xi u32QueueCnt = *pU32QueueCnt;
3952*53ee8cc1Swenshuai.xi
3953*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gWinId].u32CurFBId);
3954*53ee8cc1Swenshuai.xi
3955*53ee8cc1Swenshuai.xi if(b3DEn == 0)
3956*53ee8cc1Swenshuai.xi {
3957*53ee8cc1Swenshuai.xi u64SubFlipAddr = 0;
3958*53ee8cc1Swenshuai.xi }
3959*53ee8cc1Swenshuai.xi
3960*53ee8cc1Swenshuai.xi if(MDrv_GOP_SwitchGWIN2Addr(g_pGOPCtxLocal, gWinId, u64MainFlipAddr, u64SubFlipAddr, u32WaitTagID, &u32QueueCnt))
3961*53ee8cc1Swenshuai.xi {
3962*53ee8cc1Swenshuai.xi if( g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gWinId].u32CurFBId<DRV_MAX_GWIN_FB_SUPPORT)
3963*53ee8cc1Swenshuai.xi pwinFB->gWinId = GWIN_ID_INVALID;
3964*53ee8cc1Swenshuai.xi
3965*53ee8cc1Swenshuai.xi *pU32QueueCnt = (MS_U16)u32QueueCnt;
3966*53ee8cc1Swenshuai.xi return TRUE;
3967*53ee8cc1Swenshuai.xi }
3968*53ee8cc1Swenshuai.xi
3969*53ee8cc1Swenshuai.xi return FALSE;
3970*53ee8cc1Swenshuai.xi }
3971*53ee8cc1Swenshuai.xi
GOP_SwitchByFBID(void * pInstance,MS_U32 gWinId,MS_U32 u32fbId,MS_U32 u32WaitTagID,MS_U32 * pU32QueueCnt)3972*53ee8cc1Swenshuai.xi MS_BOOL GOP_SwitchByFBID(void* pInstance,MS_U32 gWinId, MS_U32 u32fbId, MS_U32 u32WaitTagID, MS_U32* pU32QueueCnt)
3973*53ee8cc1Swenshuai.xi {
3974*53ee8cc1Swenshuai.xi MS_U8 u8GwinGop;
3975*53ee8cc1Swenshuai.xi MS_PHY u64FlipAddr;
3976*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
3977*53ee8cc1Swenshuai.xi MS_U8 u8GWinBase=0;
3978*53ee8cc1Swenshuai.xi MS_U8 i;
3979*53ee8cc1Swenshuai.xi
3980*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
3981*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
3982*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
3983*53ee8cc1Swenshuai.xi #endif
3984*53ee8cc1Swenshuai.xi
3985*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
3986*53ee8cc1Swenshuai.xi {
3987*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
3988*53ee8cc1Swenshuai.xi return FALSE;
3989*53ee8cc1Swenshuai.xi }
3990*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gWinId))
3991*53ee8cc1Swenshuai.xi {
3992*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gWinId);
3993*53ee8cc1Swenshuai.xi return FALSE;
3994*53ee8cc1Swenshuai.xi }
3995*53ee8cc1Swenshuai.xi if(!_GOP_GWIN_IsGwinExistInClient(pInstance,gWinId))
3996*53ee8cc1Swenshuai.xi {
3997*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_OUT_OF_RANGE);
3998*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is not exist\n",__FUNCTION__,__LINE__,(ptrdiff_t)gWinId);
3999*53ee8cc1Swenshuai.xi return FALSE;
4000*53ee8cc1Swenshuai.xi }
4001*53ee8cc1Swenshuai.xi
4002*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
4003*53ee8cc1Swenshuai.xi
4004*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
4005*53ee8cc1Swenshuai.xi {
4006*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
4007*53ee8cc1Swenshuai.xi return FALSE;
4008*53ee8cc1Swenshuai.xi }
4009*53ee8cc1Swenshuai.xi
4010*53ee8cc1Swenshuai.xi if(pwinFB->in_use == 0)
4011*53ee8cc1Swenshuai.xi {
4012*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_NOT_ALLOCATED);
4013*53ee8cc1Swenshuai.xi GOP_M_ERR("%s: fbId=%td is not in existence\n",__FUNCTION__,(ptrdiff_t)u32fbId);
4014*53ee8cc1Swenshuai.xi return FALSE;
4015*53ee8cc1Swenshuai.xi }
4016*53ee8cc1Swenshuai.xi
4017*53ee8cc1Swenshuai.xi u8GwinGop = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,gWinId);
4018*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGop])
4019*53ee8cc1Swenshuai.xi {
4020*53ee8cc1Swenshuai.xi u8GWinBase=0;
4021*53ee8cc1Swenshuai.xi for(i=0;i<u8GwinGop;i++)
4022*53ee8cc1Swenshuai.xi {
4023*53ee8cc1Swenshuai.xi u8GWinBase += MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, i);
4024*53ee8cc1Swenshuai.xi }
4025*53ee8cc1Swenshuai.xi if(gWinId != u8GWinBase)
4026*53ee8cc1Swenshuai.xi {
4027*53ee8cc1Swenshuai.xi GOP_M_INFO("\n[%s] not support TLB mode, gwin id:0x%tx ", __FUNCTION__, (ptrdiff_t)gWinId);
4028*53ee8cc1Swenshuai.xi }
4029*53ee8cc1Swenshuai.xi }
4030*53ee8cc1Swenshuai.xi u64FlipAddr = pwinFB->addr;
4031*53ee8cc1Swenshuai.xi
4032*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GwinGop])
4033*53ee8cc1Swenshuai.xi {
4034*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
4035*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
4036*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GwinGop, &GopDst);
4037*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
4038*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
4039*53ee8cc1Swenshuai.xi {
4040*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
4041*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,gWinId, &stGwinInfo);
4042*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = u64FlipAddr;
4043*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[gWinId].u64NonMirrorFBAdr = u64FlipAddr;
4044*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,gWinId, bHMirror, bVMirror, &stGwinInfo);
4045*53ee8cc1Swenshuai.xi u64FlipAddr = stGwinInfo.u32DRAMRBlkStart;
4046*53ee8cc1Swenshuai.xi }
4047*53ee8cc1Swenshuai.xi }
4048*53ee8cc1Swenshuai.xi else
4049*53ee8cc1Swenshuai.xi {
4050*53ee8cc1Swenshuai.xi if(u8GwinGop > GOPTYPE.GOP0)
4051*53ee8cc1Swenshuai.xi {
4052*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
4053*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
4054*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GwinGop, &GopDst);
4055*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
4056*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
4057*53ee8cc1Swenshuai.xi {
4058*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
4059*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,gWinId, &stGwinInfo);
4060*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = u64FlipAddr;
4061*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sMirrorInfo[gWinId].u64NonMirrorFBAdr = u64FlipAddr;
4062*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,gWinId, bHMirror, bVMirror, &stGwinInfo);
4063*53ee8cc1Swenshuai.xi u64FlipAddr = stGwinInfo.u32DRAMRBlkStart;
4064*53ee8cc1Swenshuai.xi }
4065*53ee8cc1Swenshuai.xi }
4066*53ee8cc1Swenshuai.xi }
4067*53ee8cc1Swenshuai.xi if(MDrv_GOP_SwitchGWIN2Addr(g_pGOPCtxLocal, gWinId, u64FlipAddr, (MS_U32)0, u32WaitTagID, pU32QueueCnt))
4068*53ee8cc1Swenshuai.xi {
4069*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pCurwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gWinId].u32CurFBId);
4070*53ee8cc1Swenshuai.xi
4071*53ee8cc1Swenshuai.xi if(pCurwinFB == NULL)
4072*53ee8cc1Swenshuai.xi {
4073*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gWinId].u32CurFBId);
4074*53ee8cc1Swenshuai.xi return FALSE;
4075*53ee8cc1Swenshuai.xi }
4076*53ee8cc1Swenshuai.xi
4077*53ee8cc1Swenshuai.xi if( g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gWinId].u32CurFBId<DRV_MAX_GWIN_FB_SUPPORT)
4078*53ee8cc1Swenshuai.xi pCurwinFB->gWinId = GWIN_ID_INVALID;
4079*53ee8cc1Swenshuai.xi
4080*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gWinId].u32CurFBId = u32fbId;
4081*53ee8cc1Swenshuai.xi return TRUE;
4082*53ee8cc1Swenshuai.xi }
4083*53ee8cc1Swenshuai.xi
4084*53ee8cc1Swenshuai.xi return FALSE;
4085*53ee8cc1Swenshuai.xi }
4086*53ee8cc1Swenshuai.xi
4087*53ee8cc1Swenshuai.xi
GOP_MIUSel(void * pInstance,MS_U8 u8GOP,EN_GOP_SEL_TYPE MiuSel)4088*53ee8cc1Swenshuai.xi MS_U32 GOP_MIUSel(void* pInstance,MS_U8 u8GOP, EN_GOP_SEL_TYPE MiuSel )
4089*53ee8cc1Swenshuai.xi {
4090*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4091*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4092*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4093*53ee8cc1Swenshuai.xi #endif
4094*53ee8cc1Swenshuai.xi
4095*53ee8cc1Swenshuai.xi MDrv_GOP_MIU_Sel(g_pGOPCtxLocal,u8GOP,(E_DRV_GOP_SEL_TYPE)MiuSel);
4096*53ee8cc1Swenshuai.xi
4097*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4098*53ee8cc1Swenshuai.xi }
4099*53ee8cc1Swenshuai.xi
GOP_GetMIUSel(void * pInstance,MS_U8 u8GOP)4100*53ee8cc1Swenshuai.xi MS_U8 GOP_GetMIUSel(void* pInstance,MS_U8 u8GOP)
4101*53ee8cc1Swenshuai.xi {
4102*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4103*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4104*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4105*53ee8cc1Swenshuai.xi #endif
4106*53ee8cc1Swenshuai.xi
4107*53ee8cc1Swenshuai.xi return MDrv_GOP_Get_MIU_Sel(g_pGOPCtxLocal,u8GOP);
4108*53ee8cc1Swenshuai.xi
4109*53ee8cc1Swenshuai.xi }
4110*53ee8cc1Swenshuai.xi
GOP_SetAlphaInverse(void * pInstance,MS_U32 gop,MS_BOOL bEn)4111*53ee8cc1Swenshuai.xi MS_U32 GOP_SetAlphaInverse(void* pInstance,MS_U32 gop, MS_BOOL bEn)
4112*53ee8cc1Swenshuai.xi {
4113*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4114*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4115*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4116*53ee8cc1Swenshuai.xi #endif
4117*53ee8cc1Swenshuai.xi
4118*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, gop, bEn);
4119*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4120*53ee8cc1Swenshuai.xi }
GOP_GetAlphaInverse(void * pInstance,MS_U32 gop)4121*53ee8cc1Swenshuai.xi MS_BOOL GOP_GetAlphaInverse(void* pInstance,MS_U32 gop)
4122*53ee8cc1Swenshuai.xi {
4123*53ee8cc1Swenshuai.xi MS_BOOL bEn;
4124*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4125*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4126*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4127*53ee8cc1Swenshuai.xi #endif
4128*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetAlphaInverse(g_pGOPCtxLocal,gop, &bEn);
4129*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4130*53ee8cc1Swenshuai.xi }
4131*53ee8cc1Swenshuai.xi
GOP_SetContrast(void * pInstance,MS_U8 u8GOP,MS_U16 u16YContrast,MS_U16 u16UContrast,MS_U16 u16VContrast)4132*53ee8cc1Swenshuai.xi MS_U32 GOP_SetContrast(void* pInstance,MS_U8 u8GOP, MS_U16 u16YContrast, MS_U16 u16UContrast, MS_U16 u16VContrast )
4133*53ee8cc1Swenshuai.xi {
4134*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet = GOP_API_FAIL;
4135*53ee8cc1Swenshuai.xi
4136*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4137*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4138*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4139*53ee8cc1Swenshuai.xi #endif
4140*53ee8cc1Swenshuai.xi
4141*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_SetGOPContrast( g_pGOPCtxLocal, u8GOP, u16YContrast, u16UContrast, u16VContrast );
4142*53ee8cc1Swenshuai.xi
4143*53ee8cc1Swenshuai.xi return enRet;
4144*53ee8cc1Swenshuai.xi }
4145*53ee8cc1Swenshuai.xi
GOP_GetContrast(void * pInstance,MS_U8 u8GOP,MS_U32 * YContrast,MS_U32 * UContrast,MS_U32 * VContrast)4146*53ee8cc1Swenshuai.xi MS_U32 GOP_GetContrast(void* pInstance,MS_U8 u8GOP, MS_U32* YContrast, MS_U32* UContrast, MS_U32* VContrast )
4147*53ee8cc1Swenshuai.xi {
4148*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet= GOP_API_FAIL;
4149*53ee8cc1Swenshuai.xi
4150*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4151*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4152*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4153*53ee8cc1Swenshuai.xi #endif
4154*53ee8cc1Swenshuai.xi
4155*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_GetGOPContrast( g_pGOPCtxLocal, u8GOP, YContrast, UContrast, VContrast );
4156*53ee8cc1Swenshuai.xi return enRet;
4157*53ee8cc1Swenshuai.xi }
4158*53ee8cc1Swenshuai.xi
4159*53ee8cc1Swenshuai.xi
4160*53ee8cc1Swenshuai.xi
GOP_SetBrightness(void * pInstance,MS_U8 u8GOP,MS_U16 u16BriVal,MS_BOOL bMSB)4161*53ee8cc1Swenshuai.xi MS_U32 GOP_SetBrightness(void* pInstance,MS_U8 u8GOP,MS_U16 u16BriVal,MS_BOOL bMSB)
4162*53ee8cc1Swenshuai.xi {
4163*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
4164*53ee8cc1Swenshuai.xi
4165*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4166*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4167*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4168*53ee8cc1Swenshuai.xi #endif
4169*53ee8cc1Swenshuai.xi
4170*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_SetGOPBrightness(g_pGOPCtxLocal, u8GOP, u16BriVal,bMSB);
4171*53ee8cc1Swenshuai.xi
4172*53ee8cc1Swenshuai.xi return enRet;
4173*53ee8cc1Swenshuai.xi }
4174*53ee8cc1Swenshuai.xi
GOP_GetBrightness(void * pInstance,MS_U8 u8GOP,MS_U16 * u16BriVal,MS_BOOL * bMSB)4175*53ee8cc1Swenshuai.xi MS_U32 GOP_GetBrightness(void* pInstance,MS_U8 u8GOP,MS_U16* u16BriVal,MS_BOOL* bMSB)
4176*53ee8cc1Swenshuai.xi {
4177*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
4178*53ee8cc1Swenshuai.xi
4179*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4180*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4181*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4182*53ee8cc1Swenshuai.xi #endif
4183*53ee8cc1Swenshuai.xi
4184*53ee8cc1Swenshuai.xi enRet =(E_GOP_API_Result)MDrv_GOP_GetGOPBrightness(g_pGOPCtxLocal,u8GOP,u16BriVal,bMSB);
4185*53ee8cc1Swenshuai.xi
4186*53ee8cc1Swenshuai.xi return enRet;
4187*53ee8cc1Swenshuai.xi }
4188*53ee8cc1Swenshuai.xi
4189*53ee8cc1Swenshuai.xi
GOP_SetOutputColor(void * pInstance,MS_U8 u8GOP,EN_GOP_OUTPUT_COLOR type)4190*53ee8cc1Swenshuai.xi MS_U32 GOP_SetOutputColor(void* pInstance,MS_U8 u8GOP, EN_GOP_OUTPUT_COLOR type)
4191*53ee8cc1Swenshuai.xi {
4192*53ee8cc1Swenshuai.xi
4193*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4194*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4195*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4196*53ee8cc1Swenshuai.xi #endif
4197*53ee8cc1Swenshuai.xi
4198*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32OutputColorType[u8GOP] = (MS_S32)type;
4199*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, (GOP_OupputColor)type);
4200*53ee8cc1Swenshuai.xi
4201*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4202*53ee8cc1Swenshuai.xi }
4203*53ee8cc1Swenshuai.xi
GOP_SetUVSwap(void * pInstance,MS_U8 u8GOP,MS_BOOL bEn)4204*53ee8cc1Swenshuai.xi MS_U32 GOP_SetUVSwap(void* pInstance,MS_U8 u8GOP, MS_BOOL bEn)
4205*53ee8cc1Swenshuai.xi {
4206*53ee8cc1Swenshuai.xi
4207*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4208*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4209*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4210*53ee8cc1Swenshuai.xi #endif
4211*53ee8cc1Swenshuai.xi
4212*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4213*53ee8cc1Swenshuai.xi {
4214*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4215*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4216*53ee8cc1Swenshuai.xi }
4217*53ee8cc1Swenshuai.xi
4218*53ee8cc1Swenshuai.xi MDrv_GOP_SetUVSwap(g_pGOPCtxLocal, u8GOP, bEn);
4219*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
4220*53ee8cc1Swenshuai.xi
4221*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4222*53ee8cc1Swenshuai.xi
4223*53ee8cc1Swenshuai.xi }
4224*53ee8cc1Swenshuai.xi
4225*53ee8cc1Swenshuai.xi
GOP_SetYCSwap(void * pInstance,MS_U8 u8GOP,MS_BOOL bEn)4226*53ee8cc1Swenshuai.xi MS_U32 GOP_SetYCSwap(void* pInstance,MS_U8 u8GOP, MS_BOOL bEn)
4227*53ee8cc1Swenshuai.xi {
4228*53ee8cc1Swenshuai.xi
4229*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4230*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4231*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4232*53ee8cc1Swenshuai.xi #endif
4233*53ee8cc1Swenshuai.xi
4234*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4235*53ee8cc1Swenshuai.xi {
4236*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4237*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4238*53ee8cc1Swenshuai.xi }
4239*53ee8cc1Swenshuai.xi
4240*53ee8cc1Swenshuai.xi
4241*53ee8cc1Swenshuai.xi MDrv_GOP_SetYCSwap(g_pGOPCtxLocal, u8GOP, bEn);
4242*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
4243*53ee8cc1Swenshuai.xi
4244*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4245*53ee8cc1Swenshuai.xi
4246*53ee8cc1Swenshuai.xi }
4247*53ee8cc1Swenshuai.xi
GOP_SetProgressive(void * pInstance,MS_U8 gop,MS_BOOL bEn)4248*53ee8cc1Swenshuai.xi MS_U32 GOP_SetProgressive(void* pInstance,MS_U8 gop,MS_BOOL bEn)
4249*53ee8cc1Swenshuai.xi {
4250*53ee8cc1Swenshuai.xi MS_U8 u8WinIdx = 0x0;
4251*53ee8cc1Swenshuai.xi MS_U8 u8GopIdx = 0x0;
4252*53ee8cc1Swenshuai.xi MS_U8 u8StartWin = 0x0;
4253*53ee8cc1Swenshuai.xi MS_U8 u8EndWin = 0x0;
4254*53ee8cc1Swenshuai.xi MS_U8 i = 0x0;
4255*53ee8cc1Swenshuai.xi MS_U8 u8GOPGwinMaxCount = 0x0;
4256*53ee8cc1Swenshuai.xi MS_U16 u16StretchX = 0x0;
4257*53ee8cc1Swenshuai.xi MS_U16 u16StretchY = 0x0;
4258*53ee8cc1Swenshuai.xi MS_U16 u16StretchW = 0x0;
4259*53ee8cc1Swenshuai.xi MS_U16 u16StretchH = 0x0;
4260*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
4261*53ee8cc1Swenshuai.xi DRV_GOPDstType enDst = E_DRV_GOP_DST_INVALID;
4262*53ee8cc1Swenshuai.xi EN_GOP_DST_TYPE GopDst = E_GOP_DST_OP0;
4263*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4264*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4265*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4266*53ee8cc1Swenshuai.xi #endif
4267*53ee8cc1Swenshuai.xi
4268*53ee8cc1Swenshuai.xi for (i=0; i < MAX_GOP_SUPPORT; i++)
4269*53ee8cc1Swenshuai.xi {
4270*53ee8cc1Swenshuai.xi if(u8GOPGwinMaxCount<MDrv_GOP_GetGwinNum(pInstance, i))
4271*53ee8cc1Swenshuai.xi u8GOPGwinMaxCount=MDrv_GOP_GetGwinNum(pInstance, i);
4272*53ee8cc1Swenshuai.xi }
4273*53ee8cc1Swenshuai.xi GOP_GwinInfo winInfo[u8GOPGwinMaxCount];
4274*53ee8cc1Swenshuai.xi MS_BOOL bGwinFBInit[u8GOPGwinMaxCount];
4275*53ee8cc1Swenshuai.xi memset(winInfo,0,sizeof(GOP_GwinInfo)*u8GOPGwinMaxCount);
4276*53ee8cc1Swenshuai.xi memset(bGwinFBInit,0,sizeof(MS_BOOL)*u8GOPGwinMaxCount);
4277*53ee8cc1Swenshuai.xi
4278*53ee8cc1Swenshuai.xi for (u8GopIdx = 0; u8GopIdx < gop; u8GopIdx++)
4279*53ee8cc1Swenshuai.xi {
4280*53ee8cc1Swenshuai.xi u8StartWin += MDrv_GOP_GetGwinNum(pInstance, u8GopIdx);
4281*53ee8cc1Swenshuai.xi }
4282*53ee8cc1Swenshuai.xi u8EndWin = u8StartWin + MDrv_GOP_GetGwinNum(pInstance, gop);
4283*53ee8cc1Swenshuai.xi
4284*53ee8cc1Swenshuai.xi if((u8EndWin-u8StartWin)>u8GOPGwinMaxCount)
4285*53ee8cc1Swenshuai.xi {
4286*53ee8cc1Swenshuai.xi printf("[%s][%d]GWINCount %d is out of range\n",__FUNCTION__,__LINE__,u8EndWin-u8StartWin);
4287*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4288*53ee8cc1Swenshuai.xi }
4289*53ee8cc1Swenshuai.xi
4290*53ee8cc1Swenshuai.xi for (i=0,u8WinIdx=u8StartWin; u8WinIdx<u8EndWin; u8WinIdx++,i++)
4291*53ee8cc1Swenshuai.xi {
4292*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8WinIdx].u32CurFBId))
4293*53ee8cc1Swenshuai.xi {
4294*53ee8cc1Swenshuai.xi continue;
4295*53ee8cc1Swenshuai.xi }
4296*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u8WinIdx].u32CurFBId);
4297*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
4298*53ee8cc1Swenshuai.xi bGwinFBInit[i]=FALSE;
4299*53ee8cc1Swenshuai.xi else
4300*53ee8cc1Swenshuai.xi bGwinFBInit[i]=TRUE;
4301*53ee8cc1Swenshuai.xi }
4302*53ee8cc1Swenshuai.xi
4303*53ee8cc1Swenshuai.xi for (i=0,u8WinIdx=u8StartWin; u8WinIdx<u8EndWin; u8WinIdx++,i++)
4304*53ee8cc1Swenshuai.xi {
4305*53ee8cc1Swenshuai.xi if(bGwinFBInit[i])
4306*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance, u8WinIdx, &winInfo[i]);
4307*53ee8cc1Swenshuai.xi }
4308*53ee8cc1Swenshuai.xi _GOP_Get_StretchWin(pInstance, gop, &u16StretchX, &u16StretchY, &u16StretchW, &u16StretchH);
4309*53ee8cc1Swenshuai.xi
4310*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, gop, bEn);
4311*53ee8cc1Swenshuai.xi
4312*53ee8cc1Swenshuai.xi for (i=0,u8WinIdx=u8StartWin; u8WinIdx<u8EndWin; u8WinIdx++,i++)
4313*53ee8cc1Swenshuai.xi {
4314*53ee8cc1Swenshuai.xi if(bGwinFBInit[i])
4315*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance, u8WinIdx, &winInfo[i]);
4316*53ee8cc1Swenshuai.xi }
4317*53ee8cc1Swenshuai.xi
4318*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, gop, &enDst);
4319*53ee8cc1Swenshuai.xi _GOP_Map_DRVDst2API_Enum_(pInstance,&GopDst, enDst);
4320*53ee8cc1Swenshuai.xi GOP_SetStretchWin(pInstance, gop, GopDst, u16StretchX, u16StretchY, u16StretchW, u16StretchH);
4321*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,gop);
4322*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4323*53ee8cc1Swenshuai.xi }
4324*53ee8cc1Swenshuai.xi
GOP_SetHStart(void * pInstance,MS_U8 u8GOP,MS_U16 u16PanelHStr)4325*53ee8cc1Swenshuai.xi MS_U32 GOP_SetHStart(void* pInstance,MS_U8 u8GOP,MS_U16 u16PanelHStr)
4326*53ee8cc1Swenshuai.xi {
4327*53ee8cc1Swenshuai.xi
4328*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4329*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4330*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4331*53ee8cc1Swenshuai.xi #endif
4332*53ee8cc1Swenshuai.xi
4333*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4334*53ee8cc1Swenshuai.xi {
4335*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4336*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4337*53ee8cc1Swenshuai.xi }
4338*53ee8cc1Swenshuai.xi
4339*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOP] = u16PanelHStr;
4340*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
4341*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal, u8GOP);
4342*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4343*53ee8cc1Swenshuai.xi
4344*53ee8cc1Swenshuai.xi }
4345*53ee8cc1Swenshuai.xi
GOP_SetPanelTiming(void * pInstance,MS_U8 u8GOP,PST_GOP_TIMING_INFO pstInfo)4346*53ee8cc1Swenshuai.xi MS_U32 GOP_SetPanelTiming(void* pInstance,MS_U8 u8GOP,PST_GOP_TIMING_INFO pstInfo)
4347*53ee8cc1Swenshuai.xi {
4348*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4349*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4350*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4351*53ee8cc1Swenshuai.xi #endif
4352*53ee8cc1Swenshuai.xi
4353*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4354*53ee8cc1Swenshuai.xi {
4355*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4356*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4357*53ee8cc1Swenshuai.xi }
4358*53ee8cc1Swenshuai.xi
4359*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOP] = pstInfo->u16DEHStart;
4360*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8GOP] = pstInfo->u16DEHSize;
4361*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8GOP] = pstInfo->u16DEVSize;
4362*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
4363*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4364*53ee8cc1Swenshuai.xi }
4365*53ee8cc1Swenshuai.xi
GOP_GetPanelTiming(void * pInstance,MS_U8 u8GOP,PST_GOP_TIMING_INFO pstInfo)4366*53ee8cc1Swenshuai.xi MS_U32 GOP_GetPanelTiming(void* pInstance,MS_U8 u8GOP,PST_GOP_TIMING_INFO pstInfo)
4367*53ee8cc1Swenshuai.xi {
4368*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4369*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4370*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4371*53ee8cc1Swenshuai.xi #endif
4372*53ee8cc1Swenshuai.xi
4373*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4374*53ee8cc1Swenshuai.xi {
4375*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4376*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4377*53ee8cc1Swenshuai.xi }
4378*53ee8cc1Swenshuai.xi
4379*53ee8cc1Swenshuai.xi pstInfo->u16DEHStart = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOP];
4380*53ee8cc1Swenshuai.xi pstInfo->u16DEHSize = g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8GOP];
4381*53ee8cc1Swenshuai.xi pstInfo->u16DEVSize = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8GOP];
4382*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4383*53ee8cc1Swenshuai.xi }
4384*53ee8cc1Swenshuai.xi
GOP_CreateBuffer(void * pInstance,PGOP_BUFFER_INFO pBuff,MS_U32 fbid)4385*53ee8cc1Swenshuai.xi MS_U32 GOP_CreateBuffer(void* pInstance,PGOP_BUFFER_INFO pBuff,MS_U32 fbid)
4386*53ee8cc1Swenshuai.xi {
4387*53ee8cc1Swenshuai.xi _GOP_GWIN_CreatePoolFB(pInstance,fbid,pBuff->disp_rect.x,pBuff->disp_rect.y,pBuff->disp_rect.w,pBuff->disp_rect.h,pBuff->fbFmt,pBuff->FBString);
4388*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4389*53ee8cc1Swenshuai.xi }
GOP_CreateBufferByAddr(void * pInstance,PGOP_BUFFER_INFO pBuff,MS_U32 u32fbId)4390*53ee8cc1Swenshuai.xi MS_U32 GOP_CreateBufferByAddr(void* pInstance,PGOP_BUFFER_INFO pBuff,MS_U32 u32fbId)
4391*53ee8cc1Swenshuai.xi {
4392*53ee8cc1Swenshuai.xi MS_U32 size;
4393*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
4394*53ee8cc1Swenshuai.xi MS_U32 width;
4395*53ee8cc1Swenshuai.xi MS_U32 height;
4396*53ee8cc1Swenshuai.xi MS_U32 pitch;
4397*53ee8cc1Swenshuai.xi MS_U32 fbFmt;
4398*53ee8cc1Swenshuai.xi MS_U32 u32FbAddr;
4399*53ee8cc1Swenshuai.xi MS_U32 dispX,dispY;
4400*53ee8cc1Swenshuai.xi EN_GOP_FRAMEBUFFER_STRING FBString;
4401*53ee8cc1Swenshuai.xi
4402*53ee8cc1Swenshuai.xi
4403*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
4404*53ee8cc1Swenshuai.xi {
4405*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
4406*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
4407*53ee8cc1Swenshuai.xi }
4408*53ee8cc1Swenshuai.xi
4409*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
4410*53ee8cc1Swenshuai.xi
4411*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
4412*53ee8cc1Swenshuai.xi {
4413*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
4414*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
4415*53ee8cc1Swenshuai.xi }
4416*53ee8cc1Swenshuai.xi
4417*53ee8cc1Swenshuai.xi if(pwinFB->in_use)
4418*53ee8cc1Swenshuai.xi {
4419*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_ALREADY_ALLOCATED);
4420*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is already allocated\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
4421*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
4422*53ee8cc1Swenshuai.xi
4423*53ee8cc1Swenshuai.xi }
4424*53ee8cc1Swenshuai.xi
4425*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d]: new gwinFBId = %td \n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
4426*53ee8cc1Swenshuai.xi
4427*53ee8cc1Swenshuai.xi
4428*53ee8cc1Swenshuai.xi width = pBuff->width;
4429*53ee8cc1Swenshuai.xi height = pBuff->height;
4430*53ee8cc1Swenshuai.xi pitch = pBuff->pitch;
4431*53ee8cc1Swenshuai.xi fbFmt = pBuff->fbFmt;
4432*53ee8cc1Swenshuai.xi dispX = pBuff->disp_rect.x;
4433*53ee8cc1Swenshuai.xi dispY = pBuff->disp_rect.y;
4434*53ee8cc1Swenshuai.xi u32FbAddr = pBuff->addr;
4435*53ee8cc1Swenshuai.xi FBString = pBuff->FBString;
4436*53ee8cc1Swenshuai.xi
4437*53ee8cc1Swenshuai.xi size = _GOP_CalcPitch(pInstance,fbFmt, width) *height;
4438*53ee8cc1Swenshuai.xi
4439*53ee8cc1Swenshuai.xi pwinFB->enable = FALSE;
4440*53ee8cc1Swenshuai.xi pwinFB->in_use = 1;
4441*53ee8cc1Swenshuai.xi pwinFB->obtain = 1;
4442*53ee8cc1Swenshuai.xi pwinFB->x0 = dispX;
4443*53ee8cc1Swenshuai.xi pwinFB->y0 = dispY;
4444*53ee8cc1Swenshuai.xi pwinFB->width = width;
4445*53ee8cc1Swenshuai.xi pwinFB->height= height;
4446*53ee8cc1Swenshuai.xi pwinFB->x1 = pwinFB->x0 + width;
4447*53ee8cc1Swenshuai.xi pwinFB->y1 = pwinFB->y0 +height;
4448*53ee8cc1Swenshuai.xi pwinFB->addr = u32FbAddr; //addr;
4449*53ee8cc1Swenshuai.xi pwinFB->size = size;
4450*53ee8cc1Swenshuai.xi pwinFB->FBString = (EN_DRV_FRAMEBUFFER_STRING)FBString;
4451*53ee8cc1Swenshuai.xi
4452*53ee8cc1Swenshuai.xi // FB format
4453*53ee8cc1Swenshuai.xi pwinFB->fbFmt = (fbFmt != FB_FMT_AS_DEFAULT) ? fbFmt : E_MS_FMT_ARGB1555;//g_pGOPCtxLocal->winFB[g_pGOPCtxLocal->pGOPCtxShared->gwinMap[GWIN_OSD_DEFAULT]].fbFmt;
4454*53ee8cc1Swenshuai.xi if(pitch ==0)
4455*53ee8cc1Swenshuai.xi {
4456*53ee8cc1Swenshuai.xi pwinFB->pitch = _GOP_CalcPitch(pInstance,fbFmt, width);
4457*53ee8cc1Swenshuai.xi }
4458*53ee8cc1Swenshuai.xi else
4459*53ee8cc1Swenshuai.xi {
4460*53ee8cc1Swenshuai.xi pwinFB->pitch = pitch;
4461*53ee8cc1Swenshuai.xi }
4462*53ee8cc1Swenshuai.xi // update ptrs
4463*53ee8cc1Swenshuai.xi pwinFB->poolId = GOP_WINFB_POOL_NULL;
4464*53ee8cc1Swenshuai.xi pwinFB->nextFBIdInPool = INVALID_POOL_NEXT_FBID;
4465*53ee8cc1Swenshuai.xi pwinFB->string = E_GOP_FB_NULL;
4466*53ee8cc1Swenshuai.xi pwinFB->u32GOPClientId = (GETPIDTYPE)getpid();
4467*53ee8cc1Swenshuai.xi GOP_M_INFO("\33[0;36m %s:%d FBId = %td \33[m \n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
4468*53ee8cc1Swenshuai.xi
4469*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4470*53ee8cc1Swenshuai.xi }
4471*53ee8cc1Swenshuai.xi
4472*53ee8cc1Swenshuai.xi
GOP_Win_Destroy_Abnormal(void * pInstance,MS_U32 gId)4473*53ee8cc1Swenshuai.xi MS_U32 GOP_Win_Destroy_Abnormal(void* pInstance,MS_U32 gId)
4474*53ee8cc1Swenshuai.xi {
4475*53ee8cc1Swenshuai.xi MS_U32 u32fbId;
4476*53ee8cc1Swenshuai.xi GOP_GwinInfo gWin;
4477*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
4478*53ee8cc1Swenshuai.xi MS_U8 u8GOP,u8MIU;
4479*53ee8cc1Swenshuai.xi
4480*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4481*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4482*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4483*53ee8cc1Swenshuai.xi #endif
4484*53ee8cc1Swenshuai.xi
4485*53ee8cc1Swenshuai.xi GOP_M_INFO("\33[0;36m %s:%d gId = %td \33[m \n",__FUNCTION__,__LINE__,(ptrdiff_t)gId);
4486*53ee8cc1Swenshuai.xi
4487*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gId))
4488*53ee8cc1Swenshuai.xi {
4489*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gId);
4490*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4491*53ee8cc1Swenshuai.xi }
4492*53ee8cc1Swenshuai.xi
4493*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, gId, FALSE);
4494*53ee8cc1Swenshuai.xi u32fbId = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId;
4495*53ee8cc1Swenshuai.xi
4496*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
4497*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
4498*53ee8cc1Swenshuai.xi {
4499*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
4500*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4501*53ee8cc1Swenshuai.xi }
4502*53ee8cc1Swenshuai.xi
4503*53ee8cc1Swenshuai.xi if ((GOP_WINFB_POOL_NULL!=pwinFB->poolId) && (GOP_FB_Destroy(pInstance,u32fbId) != GWIN_OK))
4504*53ee8cc1Swenshuai.xi {
4505*53ee8cc1Swenshuai.xi MS_DEBUG_MSG( GOP_M_INFO( "[%s][%d], failed to delete FB %td\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId ) );
4506*53ee8cc1Swenshuai.xi
4507*53ee8cc1Swenshuai.xi }
4508*53ee8cc1Swenshuai.xi
4509*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32CurFBId= GWIN_ID_INVALID;
4510*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u32GOPClientId = 0;
4511*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].bIsShared = FALSE;
4512*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gId].u16SharedCnt = 0;
4513*53ee8cc1Swenshuai.xi
4514*53ee8cc1Swenshuai.xi memset(&gWin, 0, sizeof(GOP_GwinInfo));
4515*53ee8cc1Swenshuai.xi gWin.clrType = E_GOP_COLOR_ARGB8888;
4516*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,(gId));
4517*53ee8cc1Swenshuai.xi u8MIU = MDrv_GOP_Get_MIU_Sel(g_pGOPCtxLocal,u8GOP);
4518*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP] != TRUE)
4519*53ee8cc1Swenshuai.xi {
4520*53ee8cc1Swenshuai.xi _miu_offset_to_phy(u8MIU,gWin.u32DRAMRBlkStart,gWin.u32DRAMRBlkStart);
4521*53ee8cc1Swenshuai.xi }
4522*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,gId,&gWin);
4523*53ee8cc1Swenshuai.xi
4524*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr, gId);
4525*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr, gId);
4526*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_HMirror_HPos, gId);
4527*53ee8cc1Swenshuai.xi RESET_BIT(g_pGOPCtxLocal->u16GOP_VMirror_VPos, gId);
4528*53ee8cc1Swenshuai.xi
4529*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ClearFlipQueue(g_pGOPCtxLocal,gId);
4530*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4531*53ee8cc1Swenshuai.xi
4532*53ee8cc1Swenshuai.xi }
4533*53ee8cc1Swenshuai.xi
4534*53ee8cc1Swenshuai.xi
GOP_ResetGOP(void * pInstance,MS_U8 u8GOP)4535*53ee8cc1Swenshuai.xi void GOP_ResetGOP(void* pInstance,MS_U8 u8GOP)
4536*53ee8cc1Swenshuai.xi {
4537*53ee8cc1Swenshuai.xi MS_U32 i = 0,j = 0;
4538*53ee8cc1Swenshuai.xi MS_U8 u8GwinId;
4539*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
4540*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet = GOP_API_FAIL;
4541*53ee8cc1Swenshuai.xi
4542*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4543*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4544*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4545*53ee8cc1Swenshuai.xi #endif
4546*53ee8cc1Swenshuai.xi
4547*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal ==NULL)
4548*53ee8cc1Swenshuai.xi {
4549*53ee8cc1Swenshuai.xi MS_BOOL bFirstInstance;
4550*53ee8cc1Swenshuai.xi GOP_PreInit_Ctx(pInstance, &bFirstInstance);
4551*53ee8cc1Swenshuai.xi if (MDrv_GOP_SetIOMapBase(g_pGOPCtxLocal) != TRUE)
4552*53ee8cc1Swenshuai.xi {
4553*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nget IO base fail"));
4554*53ee8cc1Swenshuai.xi return ;
4555*53ee8cc1Swenshuai.xi }
4556*53ee8cc1Swenshuai.xi }
4557*53ee8cc1Swenshuai.xi
4558*53ee8cc1Swenshuai.xi u8GwinId = _GOP_SelGwinId2(pInstance,u8GOP, 0);
4559*53ee8cc1Swenshuai.xi for(i = u8GwinId; i < u8GwinId + MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,u8GOP); i++)
4560*53ee8cc1Swenshuai.xi {
4561*53ee8cc1Swenshuai.xi //Check and release APP's GWIN resource
4562*53ee8cc1Swenshuai.xi if(((FALSE == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].bIsShared)
4563*53ee8cc1Swenshuai.xi && (DRV_MAX_GWIN_FB_SUPPORT>g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].u32CurFBId))
4564*53ee8cc1Swenshuai.xi || ((TRUE == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].bIsShared)
4565*53ee8cc1Swenshuai.xi && (0x0 == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].u16SharedCnt)))
4566*53ee8cc1Swenshuai.xi
4567*53ee8cc1Swenshuai.xi {
4568*53ee8cc1Swenshuai.xi for(j=0; j < DRV_MAX_GWIN_FB_SUPPORT; j++)
4569*53ee8cc1Swenshuai.xi {
4570*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,j);
4571*53ee8cc1Swenshuai.xi if(pwinFB != NULL)
4572*53ee8cc1Swenshuai.xi {
4573*53ee8cc1Swenshuai.xi if ((pwinFB->u32GOPClientId == g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].u32GOPClientId)
4574*53ee8cc1Swenshuai.xi && (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].u32CurFBId != j))
4575*53ee8cc1Swenshuai.xi {
4576*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)GOP_FB_Destroy(pInstance,j);
4577*53ee8cc1Swenshuai.xi GOP_M_INFO("\n---%s %d: Try DestroyWIN's FB[%tu], return[%u]\n", __FUNCTION__, __LINE__, (ptrdiff_t)j, (MS_U8)enRet);
4578*53ee8cc1Swenshuai.xi }
4579*53ee8cc1Swenshuai.xi }
4580*53ee8cc1Swenshuai.xi }
4581*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->gwinMap[i].u32GOPClientId != 0)
4582*53ee8cc1Swenshuai.xi {
4583*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)GOP_Win_Destroy_Abnormal(pInstance,i);
4584*53ee8cc1Swenshuai.xi GOP_M_INFO("\n---%s %d: Try DestroyWIN[%tu], return[%u]\n", __FUNCTION__, __LINE__,(ptrdiff_t) i, (MS_U8)enRet);
4585*53ee8cc1Swenshuai.xi }
4586*53ee8cc1Swenshuai.xi }
4587*53ee8cc1Swenshuai.xi }
4588*53ee8cc1Swenshuai.xi }
4589*53ee8cc1Swenshuai.xi
GOP_GWIN_InitByGOP(void * pInstance,MS_BOOL bFirstIntance,MS_U8 u8GOP)4590*53ee8cc1Swenshuai.xi static void GOP_GWIN_InitByGOP(void* pInstance,MS_BOOL bFirstIntance, MS_U8 u8GOP)
4591*53ee8cc1Swenshuai.xi {
4592*53ee8cc1Swenshuai.xi MS_U8 i;
4593*53ee8cc1Swenshuai.xi MS_U8 bytePerPix = 2;
4594*53ee8cc1Swenshuai.xi MS_U16 width=0, height=0, pitch=0, fbFmt=0;
4595*53ee8cc1Swenshuai.xi MS_U32 addr=0;
4596*53ee8cc1Swenshuai.xi MS_U32 u32index;
4597*53ee8cc1Swenshuai.xi GOP_GwinInfo gWin;
4598*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
4599*53ee8cc1Swenshuai.xi MS_U32 MaxGwinSupport;
4600*53ee8cc1Swenshuai.xi MS_U8 u8MIU;
4601*53ee8cc1Swenshuai.xi
4602*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4603*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4604*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4605*53ee8cc1Swenshuai.xi #endif
4606*53ee8cc1Swenshuai.xi
4607*53ee8cc1Swenshuai.xi //GE_BufInfo buffinfo;
4608*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4609*53ee8cc1Swenshuai.xi {
4610*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4611*53ee8cc1Swenshuai.xi return;
4612*53ee8cc1Swenshuai.xi }
4613*53ee8cc1Swenshuai.xi GOP_M_INFO("MDrv_GOP_GWIN_Init\n");
4614*53ee8cc1Swenshuai.xi memset(&gWin, 0, sizeof(GOP_GwinInfo));
4615*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bInitShared)
4616*53ee8cc1Swenshuai.xi {
4617*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bInitShared = FALSE;
4618*53ee8cc1Swenshuai.xi //First init of whole GOP Driver
4619*53ee8cc1Swenshuai.xi for (u32index = 0; u32index <DRV_MAX_GWIN_FB_SUPPORT; u32index++)
4620*53ee8cc1Swenshuai.xi {
4621*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32index);
4622*53ee8cc1Swenshuai.xi
4623*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
4624*53ee8cc1Swenshuai.xi {
4625*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32index);
4626*53ee8cc1Swenshuai.xi return;
4627*53ee8cc1Swenshuai.xi }
4628*53ee8cc1Swenshuai.xi
4629*53ee8cc1Swenshuai.xi pwinFB->enable = FALSE;
4630*53ee8cc1Swenshuai.xi pwinFB->in_use = 0;
4631*53ee8cc1Swenshuai.xi pwinFB->obtain = 0;
4632*53ee8cc1Swenshuai.xi pwinFB->gWinId = GWIN_ID_INVALID; // orig GWIN_OSD_DEFAULT;
4633*53ee8cc1Swenshuai.xi pwinFB->x0 = gWin.u16DispHPixelStart = 0;
4634*53ee8cc1Swenshuai.xi pwinFB->y0 = gWin.u16DispVPixelStart = 0;
4635*53ee8cc1Swenshuai.xi pwinFB->width = gWin.u16RBlkHPixSize = 0;
4636*53ee8cc1Swenshuai.xi pwinFB->height= gWin.u16RBlkVPixSize = 0;
4637*53ee8cc1Swenshuai.xi pwinFB->x1 = gWin.u16DispHPixelEnd = 0;
4638*53ee8cc1Swenshuai.xi pwinFB->y1 = gWin.u16DispVPixelEnd = 0;
4639*53ee8cc1Swenshuai.xi pwinFB->pitch = 0;
4640*53ee8cc1Swenshuai.xi pwinFB->addr = gWin.u32DRAMRBlkStart = 0;
4641*53ee8cc1Swenshuai.xi pwinFB->size = 0;
4642*53ee8cc1Swenshuai.xi gWin.u16WinX = gWin.u16WinY = 0;
4643*53ee8cc1Swenshuai.xi // FB format
4644*53ee8cc1Swenshuai.xi pwinFB->fbFmt = FB_FMT_AS_DEFAULT;
4645*53ee8cc1Swenshuai.xi // update ptrs
4646*53ee8cc1Swenshuai.xi pwinFB->poolId = GOP_WINFB_POOL_NULL;
4647*53ee8cc1Swenshuai.xi pwinFB->nextFBIdInPool = INVALID_POOL_NEXT_FBID;
4648*53ee8cc1Swenshuai.xi pwinFB->string = E_GOP_FB_NULL;
4649*53ee8cc1Swenshuai.xi pwinFB->u32GOPClientId = INVALID_CLIENT_PID;
4650*53ee8cc1Swenshuai.xi }
4651*53ee8cc1Swenshuai.xi }
4652*53ee8cc1Swenshuai.xi if(FALSE ==g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[u8GOP])
4653*53ee8cc1Swenshuai.xi {
4654*53ee8cc1Swenshuai.xi memset(&gWin, 0, sizeof(GOP_GwinInfo));
4655*53ee8cc1Swenshuai.xi MS_BOOL bGwinEnable = FALSE;
4656*53ee8cc1Swenshuai.xi for (i = 0; i<MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,u8GOP); i++)
4657*53ee8cc1Swenshuai.xi {
4658*53ee8cc1Swenshuai.xi u8MIU = MDrv_GOP_Get_MIU_Sel(g_pGOPCtxLocal,u8GOP);
4659*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP] != TRUE)
4660*53ee8cc1Swenshuai.xi {
4661*53ee8cc1Swenshuai.xi _miu_offset_to_phy(u8MIU,gWin.u32DRAMRBlkStart,gWin.u32DRAMRBlkStart);
4662*53ee8cc1Swenshuai.xi }
4663*53ee8cc1Swenshuai.xi u32index = _GOP_SelGwinId2(pInstance,u8GOP, i);
4664*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[u32index].u32CurFBId= GWIN_ID_INVALID;
4665*53ee8cc1Swenshuai.xi gWin.clrType = (EN_GOP_COLOR_TYPE)E_GOP_COLOR_ARGB1555;
4666*53ee8cc1Swenshuai.xi //Disable all Gwin when GOP first init
4667*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_GWIN))
4668*53ee8cc1Swenshuai.xi {
4669*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_IsGWINEnabled(g_pGOPCtxLocal, u32index, &bGwinEnable);
4670*53ee8cc1Swenshuai.xi if (bGwinEnable == TRUE)
4671*53ee8cc1Swenshuai.xi {
4672*53ee8cc1Swenshuai.xi //GWIN must be turn off in Vsync to avoid garbage
4673*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ForceWrite_Update(g_pGOPCtxLocal, u8GOP, FALSE);
4674*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, u32index, FALSE);
4675*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ForceWrite_Update(g_pGOPCtxLocal, u8GOP, TRUE);
4676*53ee8cc1Swenshuai.xi }
4677*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,u32index, &gWin);
4678*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetBlending(g_pGOPCtxLocal, u32index, FALSE, 0x0);
4679*53ee8cc1Swenshuai.xi }
4680*53ee8cc1Swenshuai.xi }
4681*53ee8cc1Swenshuai.xi }
4682*53ee8cc1Swenshuai.xi /*
4683*53ee8cc1Swenshuai.xi width = MDrv_Read2Byte(GE_REG_STBB_S_W+GE_REG_BASE)+1;
4684*53ee8cc1Swenshuai.xi height = MDrv_Read2Byte(GE_REG_STBB_S_H+GE_REG_BASE)+1;
4685*53ee8cc1Swenshuai.xi pitch = MDrv_Read2Byte(GE_REG_DB_PIT+GE_REG_BASE);
4686*53ee8cc1Swenshuai.xi fbFmt = MDrv_Read2Byte(GE_REG_B_FM+GE_REG_BASE);
4687*53ee8cc1Swenshuai.xi addr = MDrv_Read4Byte(GE_REG_DB_BASE0+GE_REG_BASE);
4688*53ee8cc1Swenshuai.xi MDrv_GE_GetFrameBufferInfo(&width, &height, &pitch, &fbFmt, &addr);
4689*53ee8cc1Swenshuai.xi */
4690*53ee8cc1Swenshuai.xi //MDrv_GE_GetBufferInfo(&buffinfo);
4691*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,DRV_MAX_GWIN_FB_SUPPORT);
4692*53ee8cc1Swenshuai.xi MaxGwinSupport = g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum;
4693*53ee8cc1Swenshuai.xi
4694*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
4695*53ee8cc1Swenshuai.xi {
4696*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%ld\n",__FUNCTION__,__LINE__,DRV_MAX_GWIN_FB_SUPPORT);
4697*53ee8cc1Swenshuai.xi return;
4698*53ee8cc1Swenshuai.xi }
4699*53ee8cc1Swenshuai.xi
4700*53ee8cc1Swenshuai.xi pwinFB->enable = TRUE;
4701*53ee8cc1Swenshuai.xi pwinFB->in_use = 1;
4702*53ee8cc1Swenshuai.xi pwinFB->obtain = 1;
4703*53ee8cc1Swenshuai.xi pwinFB->gWinId = MaxGwinSupport;
4704*53ee8cc1Swenshuai.xi pwinFB->x0 = 0;
4705*53ee8cc1Swenshuai.xi pwinFB->y0 = 0;
4706*53ee8cc1Swenshuai.xi pwinFB->width = width;
4707*53ee8cc1Swenshuai.xi pwinFB->height = height;
4708*53ee8cc1Swenshuai.xi pwinFB->x1 = pwinFB->x0 + pwinFB->width;
4709*53ee8cc1Swenshuai.xi pwinFB->y1 = pwinFB->y0 + pwinFB->height;
4710*53ee8cc1Swenshuai.xi pwinFB->pitch = (pitch & 0xFFF8); // pitch must be 4-pix alignment;
4711*53ee8cc1Swenshuai.xi pwinFB->addr = addr;
4712*53ee8cc1Swenshuai.xi pwinFB->size = ((MS_U32)width) * ((MS_U32)height) * ((MS_U32)bytePerPix);
4713*53ee8cc1Swenshuai.xi // FB format
4714*53ee8cc1Swenshuai.xi pwinFB->fbFmt = fbFmt;
4715*53ee8cc1Swenshuai.xi // update ptrs
4716*53ee8cc1Swenshuai.xi pwinFB->poolId = GOP_WINFB_POOL_NULL;
4717*53ee8cc1Swenshuai.xi pwinFB->nextFBIdInPool = INVALID_POOL_NEXT_FBID;
4718*53ee8cc1Swenshuai.xi pwinFB->string = E_GOP_FB_NULL;
4719*53ee8cc1Swenshuai.xi pwinFB->u32GOPClientId = INVALID_CLIENT_PID;
4720*53ee8cc1Swenshuai.xi
4721*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[MaxGwinSupport].u32CurFBId= DRV_MAX_GWIN_FB_SUPPORT;
4722*53ee8cc1Swenshuai.xi
4723*53ee8cc1Swenshuai.xi }
4724*53ee8cc1Swenshuai.xi
4725*53ee8cc1Swenshuai.xi
GOP_GWIN_OutputLayerSwitch(void * pInstance,MS_U8 u8GOP)4726*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_OutputLayerSwitch(void* pInstance,MS_U8 u8GOP)
4727*53ee8cc1Swenshuai.xi {
4728*53ee8cc1Swenshuai.xi E_GOP_API_Result GOPRet;
4729*53ee8cc1Swenshuai.xi
4730*53ee8cc1Swenshuai.xi
4731*53ee8cc1Swenshuai.xi //#ifndef MSOS_TYPE_LINUX
4732*53ee8cc1Swenshuai.xi MS_U8 i;
4733*53ee8cc1Swenshuai.xi
4734*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4735*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4736*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4737*53ee8cc1Swenshuai.xi #endif
4738*53ee8cc1Swenshuai.xi
4739*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
4740*53ee8cc1Swenshuai.xi {
4741*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
4742*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4743*53ee8cc1Swenshuai.xi }
4744*53ee8cc1Swenshuai.xi
4745*53ee8cc1Swenshuai.xi GOPRet = (E_GOP_API_Result)MDrv_GOP_SetGOPHighPri(g_pGOPCtxLocal, u8GOP);
4746*53ee8cc1Swenshuai.xi for (i=0; i<_GOP_GetMaxGOPNum(pInstance); i++)
4747*53ee8cc1Swenshuai.xi {
4748*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,i);
4749*53ee8cc1Swenshuai.xi }
4750*53ee8cc1Swenshuai.xi
4751*53ee8cc1Swenshuai.xi return GOPRet;
4752*53ee8cc1Swenshuai.xi }
GOP_GetCurrentGOP(void * pInstance)4753*53ee8cc1Swenshuai.xi MS_U32 GOP_GetCurrentGOP(void* pInstance)
4754*53ee8cc1Swenshuai.xi {
4755*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4756*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4757*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4758*53ee8cc1Swenshuai.xi #endif
4759*53ee8cc1Swenshuai.xi
4760*53ee8cc1Swenshuai.xi return MDrv_GOP_Get(g_pGOPCtxLocal);
4761*53ee8cc1Swenshuai.xi }
4762*53ee8cc1Swenshuai.xi
GOP_GetCurrentGWin(void * pInstance)4763*53ee8cc1Swenshuai.xi MS_U32 GOP_GetCurrentGWin(void* pInstance)
4764*53ee8cc1Swenshuai.xi {
4765*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4766*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4767*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4768*53ee8cc1Swenshuai.xi #endif
4769*53ee8cc1Swenshuai.xi
4770*53ee8cc1Swenshuai.xi return g_pGOPCtxLocal->current_winId;
4771*53ee8cc1Swenshuai.xi }
4772*53ee8cc1Swenshuai.xi
GOP_GetCurrentFBID(void * pInstance)4773*53ee8cc1Swenshuai.xi MS_U32 GOP_GetCurrentFBID(void* pInstance)
4774*53ee8cc1Swenshuai.xi {
4775*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
4776*53ee8cc1Swenshuai.xi
4777*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4778*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4779*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4780*53ee8cc1Swenshuai.xi #endif
4781*53ee8cc1Swenshuai.xi
4782*53ee8cc1Swenshuai.xi MS_U8 curWinId = GOP_GetCurrentGWin(pInstance);
4783*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,curWinId))
4784*53ee8cc1Swenshuai.xi {
4785*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is not exist\n",__FUNCTION__,__LINE__,curWinId);
4786*53ee8cc1Swenshuai.xi return GWIN_ID_INVALID;
4787*53ee8cc1Swenshuai.xi }
4788*53ee8cc1Swenshuai.xi
4789*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[curWinId].u32CurFBId);
4790*53ee8cc1Swenshuai.xi
4791*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
4792*53ee8cc1Swenshuai.xi {
4793*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[curWinId].u32CurFBId);
4794*53ee8cc1Swenshuai.xi return GWIN_ID_INVALID;
4795*53ee8cc1Swenshuai.xi }
4796*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[curWinId].u32CurFBId))
4797*53ee8cc1Swenshuai.xi {
4798*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[curWinId].u32CurFBId);
4799*53ee8cc1Swenshuai.xi return GWIN_ID_INVALID;
4800*53ee8cc1Swenshuai.xi }
4801*53ee8cc1Swenshuai.xi
4802*53ee8cc1Swenshuai.xi if (0==pwinFB->in_use)
4803*53ee8cc1Swenshuai.xi {
4804*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is not allocated\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[curWinId].u32CurFBId);
4805*53ee8cc1Swenshuai.xi return GWIN_ID_INVALID;
4806*53ee8cc1Swenshuai.xi
4807*53ee8cc1Swenshuai.xi }
4808*53ee8cc1Swenshuai.xi return g_pGOPCtxLocal->pGOPCtxShared->gwinMap[curWinId].u32CurFBId;
4809*53ee8cc1Swenshuai.xi
4810*53ee8cc1Swenshuai.xi }
4811*53ee8cc1Swenshuai.xi
4812*53ee8cc1Swenshuai.xi
GOP_GWIN_SetHMirror(void * pInstance,MS_BOOL bEnable)4813*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetHMirror(void* pInstance,MS_BOOL bEnable)
4814*53ee8cc1Swenshuai.xi {
4815*53ee8cc1Swenshuai.xi MS_U8 u8GwinID=0, u8GWinBase=0, u8GOPWinNum=0, u8GOPIdx=0;
4816*53ee8cc1Swenshuai.xi MS_U16 u16GwinState = 0;
4817*53ee8cc1Swenshuai.xi GOP_GwinInfo sGWININfo;
4818*53ee8cc1Swenshuai.xi MS_BOOL bUpdateRegOnce = FALSE, bHMirror = FALSE, bVMirror = FALSE;
4819*53ee8cc1Swenshuai.xi
4820*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4821*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4822*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4823*53ee8cc1Swenshuai.xi #endif
4824*53ee8cc1Swenshuai.xi
4825*53ee8cc1Swenshuai.xi bUpdateRegOnce = g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE];
4826*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bHMirror = bEnable;
4827*53ee8cc1Swenshuai.xi
4828*53ee8cc1Swenshuai.xi for(u8GOPIdx=0; u8GOPIdx < MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal);u8GOPIdx++)
4829*53ee8cc1Swenshuai.xi {
4830*53ee8cc1Swenshuai.xi MDrv_GOP_IsGOPMirrorEnable(g_pGOPCtxLocal, u8GOPIdx, &bHMirror, &bVMirror);
4831*53ee8cc1Swenshuai.xi if(bHMirror == bEnable)
4832*53ee8cc1Swenshuai.xi {
4833*53ee8cc1Swenshuai.xi continue; //Duplicate mirror setting, skip it
4834*53ee8cc1Swenshuai.xi }
4835*53ee8cc1Swenshuai.xi
4836*53ee8cc1Swenshuai.xi u8GOPWinNum = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, u8GOPIdx);
4837*53ee8cc1Swenshuai.xi if(u8GOPWinNum == 0xff)
4838*53ee8cc1Swenshuai.xi {
4839*53ee8cc1Swenshuai.xi continue; //NO Gwin, skip it
4840*53ee8cc1Swenshuai.xi }
4841*53ee8cc1Swenshuai.xi
4842*53ee8cc1Swenshuai.xi u8GWinBase = _GOP_SelGwinId2(pInstance, u8GOPIdx, 0);
4843*53ee8cc1Swenshuai.xi u16GwinState = 0; //Clear GWIN on/off state
4844*53ee8cc1Swenshuai.xi //Turn off all on state GWIN
4845*53ee8cc1Swenshuai.xi for (u8GwinID=u8GWinBase; u8GwinID<u8GWinBase+u8GOPWinNum; u8GwinID++)
4846*53ee8cc1Swenshuai.xi {
4847*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8GwinID))
4848*53ee8cc1Swenshuai.xi {
4849*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8GwinID);
4850*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4851*53ee8cc1Swenshuai.xi }
4852*53ee8cc1Swenshuai.xi
4853*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bGWINEnable[u8GwinID] != TRUE)
4854*53ee8cc1Swenshuai.xi {
4855*53ee8cc1Swenshuai.xi continue;
4856*53ee8cc1Swenshuai.xi }
4857*53ee8cc1Swenshuai.xi
4858*53ee8cc1Swenshuai.xi if(_GOP_GWIN_IsGwinExistInClient(pInstance,u8GwinID)== TRUE)
4859*53ee8cc1Swenshuai.xi {
4860*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, u8GwinID, FALSE);
4861*53ee8cc1Swenshuai.xi u16GwinState |= (1<<u8GwinID);
4862*53ee8cc1Swenshuai.xi }
4863*53ee8cc1Swenshuai.xi else
4864*53ee8cc1Swenshuai.xi {
4865*53ee8cc1Swenshuai.xi u16GwinState = 0xFFFF;
4866*53ee8cc1Swenshuai.xi break; //This GWIn does not exist in current client, skip gop mirror setting
4867*53ee8cc1Swenshuai.xi }
4868*53ee8cc1Swenshuai.xi }
4869*53ee8cc1Swenshuai.xi
4870*53ee8cc1Swenshuai.xi if(u16GwinState == 0xFFFF)
4871*53ee8cc1Swenshuai.xi {
4872*53ee8cc1Swenshuai.xi continue;//This GWIn does not exist in current client, skip gop mirror setting
4873*53ee8cc1Swenshuai.xi }
4874*53ee8cc1Swenshuai.xi
4875*53ee8cc1Swenshuai.xi //Enable mirror
4876*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableHMirror(g_pGOPCtxLocal, u8GOPIdx, bEnable);
4877*53ee8cc1Swenshuai.xi //Reset ON state GWIN info after mirror enable
4878*53ee8cc1Swenshuai.xi if(u16GwinState !=0)
4879*53ee8cc1Swenshuai.xi {
4880*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = TRUE; //Update GWIN info and GWIN enable one time
4881*53ee8cc1Swenshuai.xi for (u8GwinID=u8GWinBase; u8GwinID<u8GWinBase+u8GOPWinNum; u8GwinID++)
4882*53ee8cc1Swenshuai.xi {
4883*53ee8cc1Swenshuai.xi if(u16GwinState & (1<<u8GwinID))
4884*53ee8cc1Swenshuai.xi {
4885*53ee8cc1Swenshuai.xi if(GOP_GetWinInfo(pInstance,u8GwinID, &sGWININfo) == TRUE)
4886*53ee8cc1Swenshuai.xi {
4887*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,u8GwinID, &sGWININfo);
4888*53ee8cc1Swenshuai.xi }
4889*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, u8GwinID, TRUE);
4890*53ee8cc1Swenshuai.xi }
4891*53ee8cc1Swenshuai.xi }
4892*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = bUpdateRegOnce;
4893*53ee8cc1Swenshuai.xi }
4894*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal, u8GOPIdx);
4895*53ee8cc1Swenshuai.xi }
4896*53ee8cc1Swenshuai.xi
4897*53ee8cc1Swenshuai.xi if (bEnable == FALSE)
4898*53ee8cc1Swenshuai.xi {
4899*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u16GOP_HMirror_HPos = 0;
4900*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u16GOP_HMirrorRBLK_Adr = 0;
4901*53ee8cc1Swenshuai.xi }
4902*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4903*53ee8cc1Swenshuai.xi }
4904*53ee8cc1Swenshuai.xi
4905*53ee8cc1Swenshuai.xi
GOP_GWIN_SetVMirror(void * pInstance,MS_BOOL bEnable)4906*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetVMirror(void* pInstance,MS_BOOL bEnable)
4907*53ee8cc1Swenshuai.xi {
4908*53ee8cc1Swenshuai.xi MS_U8 u8GwinID=0, u8GWinBase=0, u8GOPWinNum=0, u8GOPIdx=0;
4909*53ee8cc1Swenshuai.xi MS_U16 u16GwinState = 0;
4910*53ee8cc1Swenshuai.xi GOP_GwinInfo sGWININfo;
4911*53ee8cc1Swenshuai.xi MS_BOOL bUpdateRegOnce = FALSE, bHMirror = FALSE, bVMirror = FALSE;
4912*53ee8cc1Swenshuai.xi
4913*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
4914*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
4915*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
4916*53ee8cc1Swenshuai.xi #endif
4917*53ee8cc1Swenshuai.xi
4918*53ee8cc1Swenshuai.xi bUpdateRegOnce = g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE];
4919*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bVMirror = bEnable;
4920*53ee8cc1Swenshuai.xi
4921*53ee8cc1Swenshuai.xi for(u8GOPIdx=0; u8GOPIdx < MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal);u8GOPIdx++)
4922*53ee8cc1Swenshuai.xi {
4923*53ee8cc1Swenshuai.xi MDrv_GOP_IsGOPMirrorEnable(g_pGOPCtxLocal, u8GOPIdx, &bHMirror, &bVMirror);
4924*53ee8cc1Swenshuai.xi if(bVMirror == bEnable)
4925*53ee8cc1Swenshuai.xi {
4926*53ee8cc1Swenshuai.xi continue; //Duplicate mirror setting, skip it
4927*53ee8cc1Swenshuai.xi }
4928*53ee8cc1Swenshuai.xi
4929*53ee8cc1Swenshuai.xi u8GOPWinNum = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, u8GOPIdx);
4930*53ee8cc1Swenshuai.xi if(u8GOPWinNum == 0xff)
4931*53ee8cc1Swenshuai.xi {
4932*53ee8cc1Swenshuai.xi continue; //NO Gwin, skip it
4933*53ee8cc1Swenshuai.xi }
4934*53ee8cc1Swenshuai.xi
4935*53ee8cc1Swenshuai.xi u8GWinBase = _GOP_SelGwinId2(pInstance, u8GOPIdx, 0);
4936*53ee8cc1Swenshuai.xi u16GwinState = 0; //Clear GWIN on/off state
4937*53ee8cc1Swenshuai.xi //Turn off all on state GWIN
4938*53ee8cc1Swenshuai.xi for (u8GwinID=u8GWinBase; u8GwinID<u8GWinBase+u8GOPWinNum; u8GwinID++)
4939*53ee8cc1Swenshuai.xi {
4940*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8GwinID))
4941*53ee8cc1Swenshuai.xi {
4942*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8GwinID);
4943*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
4944*53ee8cc1Swenshuai.xi }
4945*53ee8cc1Swenshuai.xi
4946*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bGWINEnable[u8GwinID] != TRUE)
4947*53ee8cc1Swenshuai.xi {
4948*53ee8cc1Swenshuai.xi continue;
4949*53ee8cc1Swenshuai.xi }
4950*53ee8cc1Swenshuai.xi
4951*53ee8cc1Swenshuai.xi if(_GOP_GWIN_IsGwinExistInClient(pInstance,u8GwinID)== TRUE)
4952*53ee8cc1Swenshuai.xi {
4953*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, u8GwinID, FALSE);
4954*53ee8cc1Swenshuai.xi u16GwinState |= (1<<u8GwinID);
4955*53ee8cc1Swenshuai.xi }
4956*53ee8cc1Swenshuai.xi else
4957*53ee8cc1Swenshuai.xi {
4958*53ee8cc1Swenshuai.xi u16GwinState = 0xFFFF;
4959*53ee8cc1Swenshuai.xi break; //This GWIn does not exist in current client, skip gop mirror setting
4960*53ee8cc1Swenshuai.xi }
4961*53ee8cc1Swenshuai.xi }
4962*53ee8cc1Swenshuai.xi
4963*53ee8cc1Swenshuai.xi if(u16GwinState == 0xFFFF)
4964*53ee8cc1Swenshuai.xi {
4965*53ee8cc1Swenshuai.xi continue; //There is GWIn does not exist in current client, skip gop mirror setting
4966*53ee8cc1Swenshuai.xi }
4967*53ee8cc1Swenshuai.xi
4968*53ee8cc1Swenshuai.xi //Enable mirror
4969*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableVMirror(g_pGOPCtxLocal, u8GOPIdx, bEnable);
4970*53ee8cc1Swenshuai.xi //Reset ON state GWIN info after mirror enable
4971*53ee8cc1Swenshuai.xi if(u16GwinState !=0)
4972*53ee8cc1Swenshuai.xi {
4973*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = TRUE; //Update GWIN info and GWIN enable one time
4974*53ee8cc1Swenshuai.xi for (u8GwinID=u8GWinBase; u8GwinID<u8GWinBase+u8GOPWinNum; u8GwinID++)
4975*53ee8cc1Swenshuai.xi {
4976*53ee8cc1Swenshuai.xi if(u16GwinState & (1<<u8GwinID))
4977*53ee8cc1Swenshuai.xi {
4978*53ee8cc1Swenshuai.xi if(GOP_GetWinInfo(pInstance,u8GwinID, &sGWININfo) == TRUE)
4979*53ee8cc1Swenshuai.xi {
4980*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,u8GwinID, &sGWININfo);
4981*53ee8cc1Swenshuai.xi }
4982*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, u8GwinID, TRUE);
4983*53ee8cc1Swenshuai.xi }
4984*53ee8cc1Swenshuai.xi }
4985*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = bUpdateRegOnce;
4986*53ee8cc1Swenshuai.xi }
4987*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal, u8GOPIdx);
4988*53ee8cc1Swenshuai.xi }
4989*53ee8cc1Swenshuai.xi
4990*53ee8cc1Swenshuai.xi if (bEnable == FALSE)
4991*53ee8cc1Swenshuai.xi {
4992*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u16GOP_VMirrorRBLK_Adr = 0;
4993*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u16GOP_VMirror_VPos = 0;
4994*53ee8cc1Swenshuai.xi }
4995*53ee8cc1Swenshuai.xi
4996*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
4997*53ee8cc1Swenshuai.xi
4998*53ee8cc1Swenshuai.xi }
4999*53ee8cc1Swenshuai.xi
GOP_GWIN_SetNewAlphaMode(void * pInstance,MS_U8 gwin,MS_BOOL bEn)5000*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetNewAlphaMode(void* pInstance,MS_U8 gwin, MS_BOOL bEn)
5001*53ee8cc1Swenshuai.xi {
5002*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5003*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5004*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5005*53ee8cc1Swenshuai.xi #endif
5006*53ee8cc1Swenshuai.xi
5007*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gwin))
5008*53ee8cc1Swenshuai.xi {
5009*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,gwin);
5010*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
5011*53ee8cc1Swenshuai.xi }
5012*53ee8cc1Swenshuai.xi
5013*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetNewAlphaMode(g_pGOPCtxLocal, gwin, bEn);
5014*53ee8cc1Swenshuai.xi
5015*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5016*53ee8cc1Swenshuai.xi
5017*53ee8cc1Swenshuai.xi }
5018*53ee8cc1Swenshuai.xi
GOP_GWIN_IsEnable(void * pInstance,MS_U8 winId)5019*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_IsEnable(void* pInstance,MS_U8 winId)
5020*53ee8cc1Swenshuai.xi {
5021*53ee8cc1Swenshuai.xi MS_BOOL IsEnable =FALSE;
5022*53ee8cc1Swenshuai.xi
5023*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5024*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5025*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5026*53ee8cc1Swenshuai.xi #endif
5027*53ee8cc1Swenshuai.xi
5028*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,winId))
5029*53ee8cc1Swenshuai.xi {
5030*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,winId);
5031*53ee8cc1Swenshuai.xi return FALSE;
5032*53ee8cc1Swenshuai.xi }
5033*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_IsGWINEnabled(g_pGOPCtxLocal, winId, &IsEnable);
5034*53ee8cc1Swenshuai.xi return IsEnable;
5035*53ee8cc1Swenshuai.xi }
5036*53ee8cc1Swenshuai.xi
GOP_GWIN_SetEnable(void * pInstance,MS_U8 winId,MS_BOOL bEnable)5037*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetEnable(void* pInstance,MS_U8 winId, MS_BOOL bEnable)
5038*53ee8cc1Swenshuai.xi {
5039*53ee8cc1Swenshuai.xi MS_U16 regval2 =0,i;
5040*53ee8cc1Swenshuai.xi MS_U32 u32fbId;
5041*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
5042*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5043*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5044*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5045*53ee8cc1Swenshuai.xi #endif
5046*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,winId))
5047*53ee8cc1Swenshuai.xi {
5048*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,winId);
5049*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
5050*53ee8cc1Swenshuai.xi }
5051*53ee8cc1Swenshuai.xi
5052*53ee8cc1Swenshuai.xi //printf("GWINID=%d,Enable=%d\n",(MS_U8)winId,(MS_U8)bEnable);
5053*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,winId))
5054*53ee8cc1Swenshuai.xi {
5055*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is not exist\n",__FUNCTION__,__LINE__,winId);
5056*53ee8cc1Swenshuai.xi //__ASSERT(0);
5057*53ee8cc1Swenshuai.xi }
5058*53ee8cc1Swenshuai.xi
5059*53ee8cc1Swenshuai.xi // printf(" u8win=%02bx, bEnable=%02bx\n",winId,bEnable);
5060*53ee8cc1Swenshuai.xi u32fbId = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[winId].u32CurFBId;
5061*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
5062*53ee8cc1Swenshuai.xi
5063*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
5064*53ee8cc1Swenshuai.xi {
5065*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%d\n",__FUNCTION__,__LINE__,(unsigned int)u32fbId);
5066*53ee8cc1Swenshuai.xi goto fail;
5067*53ee8cc1Swenshuai.xi }
5068*53ee8cc1Swenshuai.xi
5069*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
5070*53ee8cc1Swenshuai.xi {
5071*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %d is out of range\n",__FUNCTION__,__LINE__,(unsigned int)u32fbId);
5072*53ee8cc1Swenshuai.xi goto fail;
5073*53ee8cc1Swenshuai.xi }
5074*53ee8cc1Swenshuai.xi
5075*53ee8cc1Swenshuai.xi if (0 == pwinFB->in_use)
5076*53ee8cc1Swenshuai.xi {
5077*53ee8cc1Swenshuai.xi msWarning(ERR_GWIN_ID_NOT_ALLOCATED);
5078*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d not allocated\n",__FUNCTION__,__LINE__,winId);
5079*53ee8cc1Swenshuai.xi goto fail;
5080*53ee8cc1Swenshuai.xi }
5081*53ee8cc1Swenshuai.xi pwinFB->enable = bEnable;
5082*53ee8cc1Swenshuai.xi
5083*53ee8cc1Swenshuai.xi //regval2 = MApi_GOP_GWIN_GetActiveGWIN();
5084*53ee8cc1Swenshuai.xi
5085*53ee8cc1Swenshuai.xi for(i = 0; i < g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum ; i++)
5086*53ee8cc1Swenshuai.xi {
5087*53ee8cc1Swenshuai.xi if(GOP_GWIN_IsEnable(pInstance,i) == TRUE)
5088*53ee8cc1Swenshuai.xi {
5089*53ee8cc1Swenshuai.xi regval2 |= 1<<i;
5090*53ee8cc1Swenshuai.xi }
5091*53ee8cc1Swenshuai.xi }
5092*53ee8cc1Swenshuai.xi
5093*53ee8cc1Swenshuai.xi if (bEnable == 0) // Turn off GOP
5094*53ee8cc1Swenshuai.xi {
5095*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, winId, FALSE);
5096*53ee8cc1Swenshuai.xi if ((regval2 & ~(1<<winId)) == 0)
5097*53ee8cc1Swenshuai.xi {
5098*53ee8cc1Swenshuai.xi if(fpXCReduceBWForOSD!=NULL)
5099*53ee8cc1Swenshuai.xi {
5100*53ee8cc1Swenshuai.xi fpXCReduceBWForOSD(XC_MAIN_WINDOW, FALSE);
5101*53ee8cc1Swenshuai.xi }
5102*53ee8cc1Swenshuai.xi }
5103*53ee8cc1Swenshuai.xi }
5104*53ee8cc1Swenshuai.xi else //turn on GOP
5105*53ee8cc1Swenshuai.xi {
5106*53ee8cc1Swenshuai.xi //printf("gop on, interlace=%bx\n", IsSrcInterlace());
5107*53ee8cc1Swenshuai.xi if(fpXCReduceBWForOSD!=NULL)
5108*53ee8cc1Swenshuai.xi {
5109*53ee8cc1Swenshuai.xi fpXCReduceBWForOSD(XC_MAIN_WINDOW, TRUE);
5110*53ee8cc1Swenshuai.xi }
5111*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, winId, TRUE);
5112*53ee8cc1Swenshuai.xi }
5113*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5114*53ee8cc1Swenshuai.xi
5115*53ee8cc1Swenshuai.xi fail:
5116*53ee8cc1Swenshuai.xi if (bEnable == 0) // Turn off GOP
5117*53ee8cc1Swenshuai.xi {
5118*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, winId, FALSE);
5119*53ee8cc1Swenshuai.xi }
5120*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
5121*53ee8cc1Swenshuai.xi }
5122*53ee8cc1Swenshuai.xi
GOP_GWIN_SetBlending(void * pInstance,MS_U8 u8win,MS_BOOL bEnable,MS_U8 u8coef)5123*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetBlending(void* pInstance,MS_U8 u8win, MS_BOOL bEnable, MS_U8 u8coef)
5124*53ee8cc1Swenshuai.xi {
5125*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5126*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5127*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5128*53ee8cc1Swenshuai.xi #endif
5129*53ee8cc1Swenshuai.xi
5130*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
5131*53ee8cc1Swenshuai.xi {
5132*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
5133*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
5134*53ee8cc1Swenshuai.xi }
5135*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetBlending(g_pGOPCtxLocal, u8win,bEnable,u8coef);
5136*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5137*53ee8cc1Swenshuai.xi
5138*53ee8cc1Swenshuai.xi }
5139*53ee8cc1Swenshuai.xi
GOP_GWIN_SetBlink(void * pInstance,MS_U8 winId,MS_BOOL bEnable,MS_U8 u8rate)5140*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetBlink(void* pInstance,MS_U8 winId,MS_BOOL bEnable, MS_U8 u8rate)
5141*53ee8cc1Swenshuai.xi {
5142*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5143*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5144*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5145*53ee8cc1Swenshuai.xi #endif
5146*53ee8cc1Swenshuai.xi
5147*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetBlink(g_pGOPCtxLocal,winId, bEnable, u8rate);
5148*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5149*53ee8cc1Swenshuai.xi }
GOP_GWIN_Set_VStretchMode(void * pInstance,MS_U8 u8GOP,EN_GOP_STRETCH_VMODE VStrchMode)5150*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_Set_VStretchMode(void* pInstance,MS_U8 u8GOP,EN_GOP_STRETCH_VMODE VStrchMode)
5151*53ee8cc1Swenshuai.xi {
5152*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5153*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5154*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5155*53ee8cc1Swenshuai.xi #endif
5156*53ee8cc1Swenshuai.xi switch(VStrchMode)
5157*53ee8cc1Swenshuai.xi {
5158*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_LINEAR:
5159*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_LINEAR_GAIN0:
5160*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_LINEAR_GAIN1:
5161*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_VStretchMode(g_pGOPCtxLocal,u8GOP,E_DRV_GOP_VSTRCH_LINEAR);
5162*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Load_VStretchModeTable(g_pGOPCtxLocal,u8GOP,(DRV_GOPStrchVMode)VStrchMode);
5163*53ee8cc1Swenshuai.xi break;
5164*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_DUPLICATE:
5165*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_NEAREST:
5166*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_LINEAR_GAIN2:
5167*53ee8cc1Swenshuai.xi case E_GOP_VSTRCH_4TAP:
5168*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_VStretchMode(g_pGOPCtxLocal,u8GOP, (DRV_GOPStrchVMode)VStrchMode);
5169*53ee8cc1Swenshuai.xi break;
5170*53ee8cc1Swenshuai.xi default:
5171*53ee8cc1Swenshuai.xi return(GOP_API_ENUM_NOT_SUPPORTED);
5172*53ee8cc1Swenshuai.xi break;
5173*53ee8cc1Swenshuai.xi }
5174*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5175*53ee8cc1Swenshuai.xi }
GOP_GWIN_Set_HStretchMode(void * pInstance,MS_U8 u8GOP,EN_GOP_STRETCH_HMODE HStrchMode)5176*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_Set_HStretchMode(void* pInstance,MS_U8 u8GOP,EN_GOP_STRETCH_HMODE HStrchMode)
5177*53ee8cc1Swenshuai.xi {
5178*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5179*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5180*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5181*53ee8cc1Swenshuai.xi #endif
5182*53ee8cc1Swenshuai.xi switch(HStrchMode)
5183*53ee8cc1Swenshuai.xi {
5184*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_DUPLICATE:
5185*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_HStretchMode(g_pGOPCtxLocal,u8GOP, (DRV_GOPStrchHMode)E_GOP_HSTRCH_DUPLICATE);
5186*53ee8cc1Swenshuai.xi break;
5187*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE:
5188*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_LINEAR:
5189*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_NEAREST:
5190*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_GAIN0:
5191*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_GAIN1:
5192*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_GAIN2:
5193*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_GAIN3:
5194*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_GAIN4:
5195*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_6TAPE_GAIN5:
5196*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_2TAPE:
5197*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_HStretchMode(g_pGOPCtxLocal,u8GOP, (DRV_GOPStrchHMode)E_GOP_HSTRCH_6TAPE);
5198*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Load_HStretchModeTable(g_pGOPCtxLocal,u8GOP,(DRV_GOPStrchHMode)HStrchMode);
5199*53ee8cc1Swenshuai.xi break;
5200*53ee8cc1Swenshuai.xi case E_GOP_HSTRCH_4TAPE:
5201*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Set_HStretchMode(g_pGOPCtxLocal,u8GOP, (DRV_GOPStrchHMode)E_GOP_HSTRCH_4TAPE);
5202*53ee8cc1Swenshuai.xi break;
5203*53ee8cc1Swenshuai.xi default:
5204*53ee8cc1Swenshuai.xi return(GOP_API_ENUM_NOT_SUPPORTED);
5205*53ee8cc1Swenshuai.xi break;
5206*53ee8cc1Swenshuai.xi }
5207*53ee8cc1Swenshuai.xi
5208*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5209*53ee8cc1Swenshuai.xi }
GOP_GWIN_Set_TranspColorStretchMode(void * pInstance,MS_U8 u8GOP,EN_GOP_STRCH_TRANSPCOLORMODE TColorStrchMode)5210*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_Set_TranspColorStretchMode(void* pInstance,MS_U8 u8GOP,EN_GOP_STRCH_TRANSPCOLORMODE TColorStrchMode)
5211*53ee8cc1Swenshuai.xi {
5212*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
5213*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5214*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5215*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5216*53ee8cc1Swenshuai.xi #endif
5217*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_GWIN_Set_TranspColorStretchMode(g_pGOPCtxLocal,u8GOP, (DRV_GOPSTRCH_TRANSPCOLORMODE)TColorStrchMode);
5218*53ee8cc1Swenshuai.xi return enRet;
5219*53ee8cc1Swenshuai.xi }
5220*53ee8cc1Swenshuai.xi
GOP_DWIN_GetDWinIntInfoTimeout(void * pInstance,GOP_DWinIntInfo * pDWinIntInfo,MS_U32 u32Timeout)5221*53ee8cc1Swenshuai.xi MS_U32 GOP_DWIN_GetDWinIntInfoTimeout(void* pInstance,GOP_DWinIntInfo *pDWinIntInfo,MS_U32 u32Timeout)
5222*53ee8cc1Swenshuai.xi {
5223*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
5224*53ee8cc1Swenshuai.xi DRV_GOP_DWinIntInfo gopDWinIntInfo;
5225*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5226*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5227*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5228*53ee8cc1Swenshuai.xi #endif
5229*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_DWIN_GetDWinIntInfo(g_pGOPCtxLocal, &gopDWinIntInfo,u32Timeout);
5230*53ee8cc1Swenshuai.xi pDWinIntInfo->u8DWinIntInfo = gopDWinIntInfo.u8DWinIntInfo;
5231*53ee8cc1Swenshuai.xi return enRet;
5232*53ee8cc1Swenshuai.xi }
5233*53ee8cc1Swenshuai.xi
GOP_GWIN_EnableT3DMode(void * pInstance,MS_BOOL bEnable)5234*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_EnableT3DMode(void* pInstance,MS_BOOL bEnable)
5235*53ee8cc1Swenshuai.xi {
5236*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5237*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5238*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5239*53ee8cc1Swenshuai.xi #endif
5240*53ee8cc1Swenshuai.xi
5241*53ee8cc1Swenshuai.xi #ifdef ENABLE_GOP_T3DPATCH
5242*53ee8cc1Swenshuai.xi MS_U8 u8GOPNum = 0;
5243*53ee8cc1Swenshuai.xi DRV_GOPDstType enGopDst = E_DRV_GOP_DST_INVALID;
5244*53ee8cc1Swenshuai.xi MS_U16 u16StrwinStr;
5245*53ee8cc1Swenshuai.xi
5246*53ee8cc1Swenshuai.xi if (bEnable)
5247*53ee8cc1Swenshuai.xi {
5248*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGopChipProperty->GOP_PD = GOP_PD_T3D;
5249*53ee8cc1Swenshuai.xi }
5250*53ee8cc1Swenshuai.xi else
5251*53ee8cc1Swenshuai.xi {
5252*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGopChipProperty->GOP_PD = GOP_PD_NORMAL;
5253*53ee8cc1Swenshuai.xi }
5254*53ee8cc1Swenshuai.xi
5255*53ee8cc1Swenshuai.xi for (u8GOPNum = 0; u8GOPNum < MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal); u8GOPNum++)
5256*53ee8cc1Swenshuai.xi {
5257*53ee8cc1Swenshuai.xi if (!(g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[u8GOPNum]))
5258*53ee8cc1Swenshuai.xi {
5259*53ee8cc1Swenshuai.xi continue;
5260*53ee8cc1Swenshuai.xi }
5261*53ee8cc1Swenshuai.xi
5262*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOPNum, &enGopDst);
5263*53ee8cc1Swenshuai.xi if (E_DRV_GOP_DST_OP0 == enGopDst)
5264*53ee8cc1Swenshuai.xi {
5265*53ee8cc1Swenshuai.xi _GOP_GetPDByDst(pInstance,u8GOPNum, enGopDst, &u16StrwinStr);
5266*53ee8cc1Swenshuai.xi _GOP_AdjustHSPD(pInstance,u8GOPNum, u16StrwinStr, enGopDst);
5267*53ee8cc1Swenshuai.xi }
5268*53ee8cc1Swenshuai.xi }
5269*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateRegWithSync(g_pGOPCtxLocal, u8GOPNum, TRUE);
5270*53ee8cc1Swenshuai.xi #endif
5271*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5272*53ee8cc1Swenshuai.xi }
5273*53ee8cc1Swenshuai.xi
GOP_PowerOn(void * pInstance)5274*53ee8cc1Swenshuai.xi MS_U32 GOP_PowerOn(void* pInstance)
5275*53ee8cc1Swenshuai.xi {
5276*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5277*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5278*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5279*53ee8cc1Swenshuai.xi #endif
5280*53ee8cc1Swenshuai.xi
5281*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->IsClkClosed)
5282*53ee8cc1Swenshuai.xi {
5283*53ee8cc1Swenshuai.xi GOP_M_ERR("\n%s, The GOP has been powered on!!!\n",__FUNCTION__);
5284*53ee8cc1Swenshuai.xi MDrv_GOP_SetClock(g_pGOPCtxLocal,TRUE);
5285*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsClkClosed = FALSE;
5286*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5287*53ee8cc1Swenshuai.xi }
5288*53ee8cc1Swenshuai.xi else
5289*53ee8cc1Swenshuai.xi {
5290*53ee8cc1Swenshuai.xi GOP_M_ERR("\n%s,Warning!!! No need to power on again!\n",__FUNCTION__);
5291*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5292*53ee8cc1Swenshuai.xi }
5293*53ee8cc1Swenshuai.xi }
GOP_PowerOff(void * pInstance)5294*53ee8cc1Swenshuai.xi MS_U32 GOP_PowerOff(void* pInstance)
5295*53ee8cc1Swenshuai.xi {
5296*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5297*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5298*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5299*53ee8cc1Swenshuai.xi #endif
5300*53ee8cc1Swenshuai.xi
5301*53ee8cc1Swenshuai.xi if (!g_pGOPCtxLocal->IsClkClosed)
5302*53ee8cc1Swenshuai.xi {
5303*53ee8cc1Swenshuai.xi GOP_M_ERR("\n%s,Warning!!! The GOP has been powered off, please turn on it if you want to use\n",__FUNCTION__);
5304*53ee8cc1Swenshuai.xi MDrv_GOP_SetClock(g_pGOPCtxLocal,FALSE);
5305*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsClkClosed =TRUE;
5306*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5307*53ee8cc1Swenshuai.xi }
5308*53ee8cc1Swenshuai.xi else
5309*53ee8cc1Swenshuai.xi {
5310*53ee8cc1Swenshuai.xi GOP_M_ERR("\n%s,Warning!!! No need to power off again!\n",__FUNCTION__);
5311*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5312*53ee8cc1Swenshuai.xi }
5313*53ee8cc1Swenshuai.xi }
5314*53ee8cc1Swenshuai.xi
GOP_GetRTStatus(void * pInstance,GOP_ApiStatus * pGopApiSts)5315*53ee8cc1Swenshuai.xi MS_U32 GOP_GetRTStatus(void* pInstance,GOP_ApiStatus *pGopApiSts)
5316*53ee8cc1Swenshuai.xi {
5317*53ee8cc1Swenshuai.xi MS_U8 i, j;
5318*53ee8cc1Swenshuai.xi
5319*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5320*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5321*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5322*53ee8cc1Swenshuai.xi #endif
5323*53ee8cc1Swenshuai.xi
5324*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal); i++)
5325*53ee8cc1Swenshuai.xi {
5326*53ee8cc1Swenshuai.xi pGopApiSts->eGOPNumDstType[i] = (EN_GOP_DST_TYPE)0xFF;
5327*53ee8cc1Swenshuai.xi pGopApiSts->u16GopNumStrWinHSize[i] = pGopApiSts->u16GopNumStrWinVSize[i] = 0xFF;
5328*53ee8cc1Swenshuai.xi
5329*53ee8cc1Swenshuai.xi switch (i)
5330*53ee8cc1Swenshuai.xi {
5331*53ee8cc1Swenshuai.xi case 0: //gop0
5332*53ee8cc1Swenshuai.xi {
5333*53ee8cc1Swenshuai.xi MS_U8 u8GWinNum = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,i);
5334*53ee8cc1Swenshuai.xi for (j=0; j < u8GWinNum; j++)
5335*53ee8cc1Swenshuai.xi {
5336*53ee8cc1Swenshuai.xi pGopApiSts->Gop0GwinIsEnable[j] = FALSE;
5337*53ee8cc1Swenshuai.xi }
5338*53ee8cc1Swenshuai.xi }
5339*53ee8cc1Swenshuai.xi break;
5340*53ee8cc1Swenshuai.xi case 1: //gop1
5341*53ee8cc1Swenshuai.xi {
5342*53ee8cc1Swenshuai.xi MS_U8 u8GWinNum = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,i);
5343*53ee8cc1Swenshuai.xi for (j=0; j < u8GWinNum; j++)
5344*53ee8cc1Swenshuai.xi {
5345*53ee8cc1Swenshuai.xi pGopApiSts->Gop1GwinIsEnable[j] = FALSE;
5346*53ee8cc1Swenshuai.xi }
5347*53ee8cc1Swenshuai.xi }
5348*53ee8cc1Swenshuai.xi break;
5349*53ee8cc1Swenshuai.xi case 2: //gop2
5350*53ee8cc1Swenshuai.xi {
5351*53ee8cc1Swenshuai.xi pGopApiSts->Gop2GwinIsEnable = FALSE;
5352*53ee8cc1Swenshuai.xi }
5353*53ee8cc1Swenshuai.xi break;
5354*53ee8cc1Swenshuai.xi case 3: //gop3
5355*53ee8cc1Swenshuai.xi {
5356*53ee8cc1Swenshuai.xi pGopApiSts->Gop3GwinIsEnable = FALSE;
5357*53ee8cc1Swenshuai.xi }
5358*53ee8cc1Swenshuai.xi break;
5359*53ee8cc1Swenshuai.xi case 4: //gop4
5360*53ee8cc1Swenshuai.xi {
5361*53ee8cc1Swenshuai.xi pGopApiSts->Gop4GwinIsEnable = FALSE;
5362*53ee8cc1Swenshuai.xi }
5363*53ee8cc1Swenshuai.xi break;
5364*53ee8cc1Swenshuai.xi case 5: //gop5
5365*53ee8cc1Swenshuai.xi {
5366*53ee8cc1Swenshuai.xi pGopApiSts->Gop5GwinIsEnable = FALSE;
5367*53ee8cc1Swenshuai.xi }
5368*53ee8cc1Swenshuai.xi break;
5369*53ee8cc1Swenshuai.xi default:
5370*53ee8cc1Swenshuai.xi break;
5371*53ee8cc1Swenshuai.xi }
5372*53ee8cc1Swenshuai.xi }
5373*53ee8cc1Swenshuai.xi
5374*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal); i++)
5375*53ee8cc1Swenshuai.xi {
5376*53ee8cc1Swenshuai.xi //need refine check using DRV_GOPDstType or EN_GOP_DST_TYPE
5377*53ee8cc1Swenshuai.xi DRV_GOPDstType enGOPDst = E_DRV_GOP_DST_INVALID;
5378*53ee8cc1Swenshuai.xi pGopApiSts->u16GopNumStrWinHSize[i] = g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchWidth[i];
5379*53ee8cc1Swenshuai.xi pGopApiSts->u16GopNumStrWinVSize[i] = g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchHeight[i];
5380*53ee8cc1Swenshuai.xi //need refine check using DRV_GOPDstType or EN_GOP_DST_TYPE
5381*53ee8cc1Swenshuai.xi (MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, i, &enGOPDst));
5382*53ee8cc1Swenshuai.xi (_GOP_Map_DRVDst2API_Enum_(pInstance,&(pGopApiSts->eGOPNumDstType[i]), enGOPDst));
5383*53ee8cc1Swenshuai.xi
5384*53ee8cc1Swenshuai.xi switch (i)
5385*53ee8cc1Swenshuai.xi {
5386*53ee8cc1Swenshuai.xi case 0: //gop0
5387*53ee8cc1Swenshuai.xi {
5388*53ee8cc1Swenshuai.xi MS_U8 u8GWinNum = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,i);
5389*53ee8cc1Swenshuai.xi for (j=0; j < u8GWinNum; j++)
5390*53ee8cc1Swenshuai.xi {
5391*53ee8cc1Swenshuai.xi pGopApiSts->Gop0GwinIsEnable[j] = GOP_GWIN_IsEnable(pInstance,j);
5392*53ee8cc1Swenshuai.xi }
5393*53ee8cc1Swenshuai.xi }
5394*53ee8cc1Swenshuai.xi break;
5395*53ee8cc1Swenshuai.xi case 1: //gop1
5396*53ee8cc1Swenshuai.xi {
5397*53ee8cc1Swenshuai.xi MS_U8 u8GWinNum = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,i);
5398*53ee8cc1Swenshuai.xi for (j=0; j < u8GWinNum; j++)
5399*53ee8cc1Swenshuai.xi {
5400*53ee8cc1Swenshuai.xi pGopApiSts->Gop1GwinIsEnable[j] = GOP_GWIN_IsEnable(pInstance,_GOP_SelGwinId2(pInstance,GOPTYPE.GOP1, (MS_U32)j));
5401*53ee8cc1Swenshuai.xi }
5402*53ee8cc1Swenshuai.xi }
5403*53ee8cc1Swenshuai.xi break;
5404*53ee8cc1Swenshuai.xi case 2: //gop2
5405*53ee8cc1Swenshuai.xi {
5406*53ee8cc1Swenshuai.xi pGopApiSts->Gop2GwinIsEnable = GOP_GWIN_IsEnable(pInstance,_GOP_SelGwinId2(pInstance,GOPTYPE.GOP2, 0));
5407*53ee8cc1Swenshuai.xi }
5408*53ee8cc1Swenshuai.xi break;
5409*53ee8cc1Swenshuai.xi case 3: //gop3
5410*53ee8cc1Swenshuai.xi {
5411*53ee8cc1Swenshuai.xi pGopApiSts->Gop3GwinIsEnable = GOP_GWIN_IsEnable(pInstance,_GOP_SelGwinId2(pInstance,GOPTYPE.GOP3, 0));
5412*53ee8cc1Swenshuai.xi }
5413*53ee8cc1Swenshuai.xi break;
5414*53ee8cc1Swenshuai.xi case 4: //gop4
5415*53ee8cc1Swenshuai.xi {
5416*53ee8cc1Swenshuai.xi pGopApiSts->Gop4GwinIsEnable = GOP_GWIN_IsEnable(pInstance,_GOP_SelGwinId2(pInstance,GOPTYPE.GOP4, 0));
5417*53ee8cc1Swenshuai.xi }
5418*53ee8cc1Swenshuai.xi break;
5419*53ee8cc1Swenshuai.xi case 5: //gop5
5420*53ee8cc1Swenshuai.xi {
5421*53ee8cc1Swenshuai.xi pGopApiSts->Gop5GwinIsEnable = GOP_GWIN_IsEnable(pInstance,_GOP_SelGwinId2(pInstance,GOPTYPE.GOP5, 0));
5422*53ee8cc1Swenshuai.xi }
5423*53ee8cc1Swenshuai.xi break;
5424*53ee8cc1Swenshuai.xi default:
5425*53ee8cc1Swenshuai.xi break;
5426*53ee8cc1Swenshuai.xi }
5427*53ee8cc1Swenshuai.xi }
5428*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5429*53ee8cc1Swenshuai.xi }
5430*53ee8cc1Swenshuai.xi
GOP_GetInfo(void * pInstance,GOP_ApiInfo * pGopApiInfo)5431*53ee8cc1Swenshuai.xi MS_U32 GOP_GetInfo(void* pInstance,GOP_ApiInfo* pGopApiInfo)
5432*53ee8cc1Swenshuai.xi {
5433*53ee8cc1Swenshuai.xi MS_U8 u8GwinNum=0, i;
5434*53ee8cc1Swenshuai.xi EN_GOP_DST_TYPE GopDst;
5435*53ee8cc1Swenshuai.xi
5436*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5437*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5438*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5439*53ee8cc1Swenshuai.xi #endif
5440*53ee8cc1Swenshuai.xi
5441*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal); i++)
5442*53ee8cc1Swenshuai.xi {
5443*53ee8cc1Swenshuai.xi u8GwinNum += MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,i);
5444*53ee8cc1Swenshuai.xi }
5445*53ee8cc1Swenshuai.xi
5446*53ee8cc1Swenshuai.xi for (i=0; i < MAX_GOP_DST_SUPPORT; i++)
5447*53ee8cc1Swenshuai.xi {
5448*53ee8cc1Swenshuai.xi //need refine check using DRV_GOPDstType or EN_GOP_DST_TYPE
5449*53ee8cc1Swenshuai.xi if (MDrv_GOP_GWIN_SetDstPlane(g_pGOPCtxLocal, 0, (DRV_GOPDstType)i,TRUE)==GOP_SUCCESS)
5450*53ee8cc1Swenshuai.xi {
5451*53ee8cc1Swenshuai.xi _GOP_Map_DRVDst2API_Enum_(pInstance,&GopDst, (DRV_GOPDstType)i);
5452*53ee8cc1Swenshuai.xi pGopApiInfo->SupportGOPDst[i] = GopDst;
5453*53ee8cc1Swenshuai.xi }
5454*53ee8cc1Swenshuai.xi else
5455*53ee8cc1Swenshuai.xi {
5456*53ee8cc1Swenshuai.xi pGopApiInfo->SupportGOPDst[i] = (EN_GOP_DST_TYPE)0xFF;
5457*53ee8cc1Swenshuai.xi }
5458*53ee8cc1Swenshuai.xi }
5459*53ee8cc1Swenshuai.xi
5460*53ee8cc1Swenshuai.xi pGopApiInfo->u8MaxGOPNum = MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal);
5461*53ee8cc1Swenshuai.xi pGopApiInfo->u8MaxGwinNum = u8GwinNum;
5462*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5463*53ee8cc1Swenshuai.xi }
GOP_GWIN_SetGWinShared(void * pInstance,MS_U8 winId,MS_BOOL bIsShared)5464*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetGWinShared(void* pInstance,MS_U8 winId, MS_BOOL bIsShared)
5465*53ee8cc1Swenshuai.xi {
5466*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5467*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5468*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5469*53ee8cc1Swenshuai.xi #endif
5470*53ee8cc1Swenshuai.xi
5471*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,winId))
5472*53ee8cc1Swenshuai.xi {
5473*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,winId);
5474*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5475*53ee8cc1Swenshuai.xi }
5476*53ee8cc1Swenshuai.xi
5477*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[winId].bIsShared = true;
5478*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5479*53ee8cc1Swenshuai.xi }
GOP_GWIN_SetGWinSharedCnt(void * pInstance,MS_U8 winId,MS_U16 u16SharedCnt)5480*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetGWinSharedCnt(void* pInstance,MS_U8 winId, MS_U16 u16SharedCnt)
5481*53ee8cc1Swenshuai.xi {
5482*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5483*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5484*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5485*53ee8cc1Swenshuai.xi #endif
5486*53ee8cc1Swenshuai.xi
5487*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,winId))
5488*53ee8cc1Swenshuai.xi {
5489*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,winId);
5490*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5491*53ee8cc1Swenshuai.xi }
5492*53ee8cc1Swenshuai.xi
5493*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->gwinMap[winId].u16SharedCnt = u16SharedCnt;
5494*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5495*53ee8cc1Swenshuai.xi }
5496*53ee8cc1Swenshuai.xi
GOP_GWIN_Switch2Gwin(void * pInstance,MS_U8 winId,void * pSet)5497*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_Switch2Gwin(void* pInstance,MS_U8 winId, void* pSet)
5498*53ee8cc1Swenshuai.xi {
5499*53ee8cc1Swenshuai.xi MS_U32 u32fbId;
5500*53ee8cc1Swenshuai.xi MS_U16 fbFmt;
5501*53ee8cc1Swenshuai.xi MS_PHY u64GeDstAdr=0;
5502*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
5503*53ee8cc1Swenshuai.xi DRV_GOP_CBFmtInfo* FmtInfo = (DRV_GOP_CBFmtInfo*)pSet;
5504*53ee8cc1Swenshuai.xi
5505*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5506*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5507*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5508*53ee8cc1Swenshuai.xi #endif
5509*53ee8cc1Swenshuai.xi
5510*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,winId))
5511*53ee8cc1Swenshuai.xi {
5512*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,winId);
5513*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5514*53ee8cc1Swenshuai.xi }
5515*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,winId))
5516*53ee8cc1Swenshuai.xi {
5517*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is not exist\n",__FUNCTION__,__LINE__,winId);
5518*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5519*53ee8cc1Swenshuai.xi }
5520*53ee8cc1Swenshuai.xi
5521*53ee8cc1Swenshuai.xi u32fbId = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[winId].u32CurFBId;
5522*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
5523*53ee8cc1Swenshuai.xi
5524*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
5525*53ee8cc1Swenshuai.xi {
5526*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
5527*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5528*53ee8cc1Swenshuai.xi }
5529*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
5530*53ee8cc1Swenshuai.xi {
5531*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
5532*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5533*53ee8cc1Swenshuai.xi }
5534*53ee8cc1Swenshuai.xi
5535*53ee8cc1Swenshuai.xi if (0==pwinFB->in_use)
5536*53ee8cc1Swenshuai.xi {
5537*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is not allocated\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
5538*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5539*53ee8cc1Swenshuai.xi
5540*53ee8cc1Swenshuai.xi }
5541*53ee8cc1Swenshuai.xi
5542*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->current_winId = winId;
5543*53ee8cc1Swenshuai.xi u64GeDstAdr=pwinFB->addr;
5544*53ee8cc1Swenshuai.xi MDrv_GOP_ConvertAPIAddr2HAL(g_pGOPCtxLocal, winId, &u64GeDstAdr);
5545*53ee8cc1Swenshuai.xi fbFmt = pwinFB->fbFmt;
5546*53ee8cc1Swenshuai.xi if ( (pwinFB->fbFmt & 0xFF) == E_MS_FMT_ARGB1555 )
5547*53ee8cc1Swenshuai.xi fbFmt = E_MS_FMT_ARGB1555_DST | (E_MS_FMT_ARGB1555_DST << 8);
5548*53ee8cc1Swenshuai.xi
5549*53ee8cc1Swenshuai.xi if(fpSetFBFmt != NULL)
5550*53ee8cc1Swenshuai.xi {
5551*53ee8cc1Swenshuai.xi fpSetFBFmt(pwinFB->pitch, u64GeDstAdr,fbFmt);
5552*53ee8cc1Swenshuai.xi FmtInfo->u64Addr = u64GeDstAdr;
5553*53ee8cc1Swenshuai.xi FmtInfo->u16Pitch = pwinFB->pitch;
5554*53ee8cc1Swenshuai.xi FmtInfo->u16Fmt = fbFmt;
5555*53ee8cc1Swenshuai.xi }
5556*53ee8cc1Swenshuai.xi else
5557*53ee8cc1Swenshuai.xi {
5558*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(GOP_M_INFO("%s: SetFBFmt is not hooked. Bypass switch...\n", __FUNCTION__));
5559*53ee8cc1Swenshuai.xi }
5560*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5561*53ee8cc1Swenshuai.xi }
5562*53ee8cc1Swenshuai.xi
GOP_GWIN_IsGwinExist(void * pInstance,MS_U8 gId)5563*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_IsGwinExist(void* pInstance,MS_U8 gId)
5564*53ee8cc1Swenshuai.xi {
5565*53ee8cc1Swenshuai.xi MS_U32 ret;
5566*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gId))
5567*53ee8cc1Swenshuai.xi {
5568*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,gId);
5569*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5570*53ee8cc1Swenshuai.xi }
5571*53ee8cc1Swenshuai.xi ret = _GOP_GWIN_IsGwinExistInClient(pInstance,gId);
5572*53ee8cc1Swenshuai.xi return ret;
5573*53ee8cc1Swenshuai.xi }
GOP_GWIN_GetFreeWinID(void * pInstance)5574*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_GetFreeWinID(void* pInstance)
5575*53ee8cc1Swenshuai.xi {
5576*53ee8cc1Swenshuai.xi MS_U8 GWID = GWIN_ID_INVALID;
5577*53ee8cc1Swenshuai.xi MS_U8 i=0,j=0;
5578*53ee8cc1Swenshuai.xi MS_U16 k=0,l=0;
5579*53ee8cc1Swenshuai.xi
5580*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5581*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5582*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5583*53ee8cc1Swenshuai.xi #endif
5584*53ee8cc1Swenshuai.xi
5585*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,MDrv_GOP_Get(g_pGOPCtxLocal)))
5586*53ee8cc1Swenshuai.xi {
5587*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,MDrv_GOP_Get(g_pGOPCtxLocal));
5588*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5589*53ee8cc1Swenshuai.xi }
5590*53ee8cc1Swenshuai.xi
5591*53ee8cc1Swenshuai.xi if (MDrv_GOP_Get(g_pGOPCtxLocal)==1) //gop1
5592*53ee8cc1Swenshuai.xi {
5593*53ee8cc1Swenshuai.xi i = _GOP_SelGwinId2(pInstance,GOPTYPE.GOP1,0);
5594*53ee8cc1Swenshuai.xi j = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,GOPTYPE.GOP1);
5595*53ee8cc1Swenshuai.xi }
5596*53ee8cc1Swenshuai.xi else if (MDrv_GOP_Get(g_pGOPCtxLocal)==0)
5597*53ee8cc1Swenshuai.xi {
5598*53ee8cc1Swenshuai.xi i = _GOP_SelGwinId2(pInstance,GOPTYPE.GOP0,0);
5599*53ee8cc1Swenshuai.xi j = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,GOPTYPE.GOP0);
5600*53ee8cc1Swenshuai.xi }
5601*53ee8cc1Swenshuai.xi else if (MDrv_GOP_Get(g_pGOPCtxLocal)==2)
5602*53ee8cc1Swenshuai.xi {
5603*53ee8cc1Swenshuai.xi i = _GOP_SelGwinId2(pInstance,GOPTYPE.GOP2,0);
5604*53ee8cc1Swenshuai.xi j = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,GOPTYPE.GOP2);
5605*53ee8cc1Swenshuai.xi }
5606*53ee8cc1Swenshuai.xi else if (MDrv_GOP_Get(g_pGOPCtxLocal)==3)
5607*53ee8cc1Swenshuai.xi {
5608*53ee8cc1Swenshuai.xi i = _GOP_SelGwinId2(pInstance,GOPTYPE.GOP3,0);
5609*53ee8cc1Swenshuai.xi j = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,GOPTYPE.GOP3);
5610*53ee8cc1Swenshuai.xi }
5611*53ee8cc1Swenshuai.xi else if (MDrv_GOP_Get(g_pGOPCtxLocal)==4)
5612*53ee8cc1Swenshuai.xi {
5613*53ee8cc1Swenshuai.xi i = _GOP_SelGwinId2(pInstance,GOPTYPE.GOP4,0);
5614*53ee8cc1Swenshuai.xi j = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,GOPTYPE.GOP4);
5615*53ee8cc1Swenshuai.xi }
5616*53ee8cc1Swenshuai.xi else if (MDrv_GOP_Get(g_pGOPCtxLocal)==5)
5617*53ee8cc1Swenshuai.xi {
5618*53ee8cc1Swenshuai.xi i = _GOP_SelGwinId2(pInstance,GOPTYPE.GOP5,0);
5619*53ee8cc1Swenshuai.xi j = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,GOPTYPE.GOP5);
5620*53ee8cc1Swenshuai.xi }
5621*53ee8cc1Swenshuai.xi else
5622*53ee8cc1Swenshuai.xi {
5623*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5624*53ee8cc1Swenshuai.xi }
5625*53ee8cc1Swenshuai.xi
5626*53ee8cc1Swenshuai.xi if(!_GOP_IsGwinIdValid(pInstance,i))
5627*53ee8cc1Swenshuai.xi {
5628*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,i);
5629*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5630*53ee8cc1Swenshuai.xi }
5631*53ee8cc1Swenshuai.xi k = i+j;
5632*53ee8cc1Swenshuai.xi for(l=i; l < k; l++)
5633*53ee8cc1Swenshuai.xi {
5634*53ee8cc1Swenshuai.xi if(DRV_MAX_GWIN_FB_SUPPORT<=g_pGOPCtxLocal->pGOPCtxShared->gwinMap[l].u32CurFBId)
5635*53ee8cc1Swenshuai.xi {
5636*53ee8cc1Swenshuai.xi GWID = l;
5637*53ee8cc1Swenshuai.xi break;
5638*53ee8cc1Swenshuai.xi }
5639*53ee8cc1Swenshuai.xi }
5640*53ee8cc1Swenshuai.xi return(GWID);
5641*53ee8cc1Swenshuai.xi }
GOP_GWIN_GetFBfromGWIN(void * pInstance,MS_U8 gwinId)5642*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_GetFBfromGWIN(void* pInstance,MS_U8 gwinId)
5643*53ee8cc1Swenshuai.xi {
5644*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
5645*53ee8cc1Swenshuai.xi
5646*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5647*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5648*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5649*53ee8cc1Swenshuai.xi #endif
5650*53ee8cc1Swenshuai.xi
5651*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gwinId))
5652*53ee8cc1Swenshuai.xi {
5653*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,gwinId);
5654*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5655*53ee8cc1Swenshuai.xi }
5656*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,gwinId))
5657*53ee8cc1Swenshuai.xi {
5658*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is not exist\n",__FUNCTION__,__LINE__,gwinId);
5659*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5660*53ee8cc1Swenshuai.xi }
5661*53ee8cc1Swenshuai.xi
5662*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gwinId].u32CurFBId);
5663*53ee8cc1Swenshuai.xi
5664*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
5665*53ee8cc1Swenshuai.xi {
5666*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gwinId].u32CurFBId);
5667*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5668*53ee8cc1Swenshuai.xi }
5669*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gwinId].u32CurFBId))
5670*53ee8cc1Swenshuai.xi {
5671*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gwinId].u32CurFBId);
5672*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5673*53ee8cc1Swenshuai.xi }
5674*53ee8cc1Swenshuai.xi if (0 == pwinFB->in_use)
5675*53ee8cc1Swenshuai.xi {
5676*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d not allocated\n",__FUNCTION__,__LINE__,gwinId);
5677*53ee8cc1Swenshuai.xi return(GWIN_ID_INVALID);
5678*53ee8cc1Swenshuai.xi }
5679*53ee8cc1Swenshuai.xi
5680*53ee8cc1Swenshuai.xi return(g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gwinId].u32CurFBId);
5681*53ee8cc1Swenshuai.xi }
5682*53ee8cc1Swenshuai.xi
GOP_FB_Get(void * pInstance)5683*53ee8cc1Swenshuai.xi MS_U32 GOP_FB_Get(void* pInstance)
5684*53ee8cc1Swenshuai.xi {
5685*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5686*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5687*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5688*53ee8cc1Swenshuai.xi #endif
5689*53ee8cc1Swenshuai.xi
5690*53ee8cc1Swenshuai.xi if(GOP_WINFB_POOL2 == g_pGOPCtxLocal->pGOPCtxShared->fb_currentPoolId)
5691*53ee8cc1Swenshuai.xi {
5692*53ee8cc1Swenshuai.xi return 1;
5693*53ee8cc1Swenshuai.xi }
5694*53ee8cc1Swenshuai.xi else
5695*53ee8cc1Swenshuai.xi {
5696*53ee8cc1Swenshuai.xi return 0;
5697*53ee8cc1Swenshuai.xi }
5698*53ee8cc1Swenshuai.xi /* //Change to if to fix parasoft error
5699*53ee8cc1Swenshuai.xi switch(g_pGOPCtxLocal->pGOPCtxShared->fb_currentPoolId)
5700*53ee8cc1Swenshuai.xi {
5701*53ee8cc1Swenshuai.xi case GOP_WINFB_POOL2:
5702*53ee8cc1Swenshuai.xi return 1;
5703*53ee8cc1Swenshuai.xi default:
5704*53ee8cc1Swenshuai.xi return 0;
5705*53ee8cc1Swenshuai.xi }*/
5706*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5707*53ee8cc1Swenshuai.xi }
GOP_FB_SEL(void * pInstance,MS_U8 u8FB)5708*53ee8cc1Swenshuai.xi MS_U32 GOP_FB_SEL(void* pInstance,MS_U8 u8FB)
5709*53ee8cc1Swenshuai.xi {
5710*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5711*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5712*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5713*53ee8cc1Swenshuai.xi #endif
5714*53ee8cc1Swenshuai.xi
5715*53ee8cc1Swenshuai.xi switch(u8FB)
5716*53ee8cc1Swenshuai.xi {
5717*53ee8cc1Swenshuai.xi case 0: // gwinFB1
5718*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fb_currentPoolId = GOP_WINFB_POOL1;
5719*53ee8cc1Swenshuai.xi break;
5720*53ee8cc1Swenshuai.xi case 1: // gwinFB2
5721*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fb_currentPoolId = GOP_WINFB_POOL2;
5722*53ee8cc1Swenshuai.xi break;
5723*53ee8cc1Swenshuai.xi default:
5724*53ee8cc1Swenshuai.xi break;
5725*53ee8cc1Swenshuai.xi }
5726*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5727*53ee8cc1Swenshuai.xi }
GOP_GWIN_Is32FBExist(void * pInstance,MS_U32 u32fbId)5728*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_Is32FBExist(void* pInstance,MS_U32 u32fbId)
5729*53ee8cc1Swenshuai.xi {
5730*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
5731*53ee8cc1Swenshuai.xi
5732*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
5733*53ee8cc1Swenshuai.xi {
5734*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
5735*53ee8cc1Swenshuai.xi return FALSE;
5736*53ee8cc1Swenshuai.xi }
5737*53ee8cc1Swenshuai.xi
5738*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
5739*53ee8cc1Swenshuai.xi
5740*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
5741*53ee8cc1Swenshuai.xi {
5742*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
5743*53ee8cc1Swenshuai.xi return FALSE;
5744*53ee8cc1Swenshuai.xi }
5745*53ee8cc1Swenshuai.xi
5746*53ee8cc1Swenshuai.xi return pwinFB->obtain;
5747*53ee8cc1Swenshuai.xi }
5748*53ee8cc1Swenshuai.xi
GOP_GWIN_GetFreeFbID(void * pInstance)5749*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_GetFreeFbID(void* pInstance)
5750*53ee8cc1Swenshuai.xi {
5751*53ee8cc1Swenshuai.xi MS_U32 i;
5752*53ee8cc1Swenshuai.xi MS_U32 u32FBId = 0xFFFFFFFF;
5753*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
5754*53ee8cc1Swenshuai.xi for(i=0; i<DRV_MAX_GWIN_FB_SUPPORT; i++)
5755*53ee8cc1Swenshuai.xi {
5756*53ee8cc1Swenshuai.xi if(!GOP_GWIN_Is32FBExist(pInstance,i))
5757*53ee8cc1Swenshuai.xi {
5758*53ee8cc1Swenshuai.xi u32FBId = i;
5759*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32FBId);
5760*53ee8cc1Swenshuai.xi pwinFB->obtain = 1;
5761*53ee8cc1Swenshuai.xi break;
5762*53ee8cc1Swenshuai.xi }
5763*53ee8cc1Swenshuai.xi }
5764*53ee8cc1Swenshuai.xi return u32FBId;
5765*53ee8cc1Swenshuai.xi }
5766*53ee8cc1Swenshuai.xi
GOP_Set3DOSDMode(void * pInstance,MS_U8 u8Gwin,MS_U16 u16MainFBId,MS_U16 u16SubFBId,EN_GOP_3D_MODETYPE en3DMode)5767*53ee8cc1Swenshuai.xi MS_U32 GOP_Set3DOSDMode(void* pInstance,MS_U8 u8Gwin, MS_U16 u16MainFBId, MS_U16 u16SubFBId,EN_GOP_3D_MODETYPE en3DMode)
5768*53ee8cc1Swenshuai.xi {
5769*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
5770*53ee8cc1Swenshuai.xi GOP_Result enRet = GOP_FAIL;
5771*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
5772*53ee8cc1Swenshuai.xi MS_PHY TLBSubAddr=0;
5773*53ee8cc1Swenshuai.xi
5774*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5775*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5776*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5777*53ee8cc1Swenshuai.xi #endif
5778*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u16SubFBId);
5779*53ee8cc1Swenshuai.xi
5780*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,u8Gwin);
5781*53ee8cc1Swenshuai.xi
5782*53ee8cc1Swenshuai.xi switch(en3DMode)
5783*53ee8cc1Swenshuai.xi {
5784*53ee8cc1Swenshuai.xi case E_GOP_3D_DISABLE:
5785*53ee8cc1Swenshuai.xi {
5786*53ee8cc1Swenshuai.xi enRet = MDrv_GOP_Set3DOSD_Mode(g_pGOPCtxLocal, u8GOP, E_DRV_GOP_3D_DISABLE);
5787*53ee8cc1Swenshuai.xi if(enRet != GOP_SUCCESS)
5788*53ee8cc1Swenshuai.xi {
5789*53ee8cc1Swenshuai.xi return((E_GOP_API_Result)enRet);
5790*53ee8cc1Swenshuai.xi }
5791*53ee8cc1Swenshuai.xi break;
5792*53ee8cc1Swenshuai.xi }
5793*53ee8cc1Swenshuai.xi case E_GOP_3D_SWITH_BY_FRAME:
5794*53ee8cc1Swenshuai.xi case E_GOP_3D_SIDE_BY_SYDE:
5795*53ee8cc1Swenshuai.xi case E_GOP_3D_TOP_BOTTOM:
5796*53ee8cc1Swenshuai.xi case E_GOP_3D_LINE_ALTERNATIVE:
5797*53ee8cc1Swenshuai.xi case E_GOP_3D_FRAMEPACKING:
5798*53ee8cc1Swenshuai.xi {
5799*53ee8cc1Swenshuai.xi
5800*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
5801*53ee8cc1Swenshuai.xi {
5802*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%d\n",__FUNCTION__,__LINE__,u16SubFBId);
5803*53ee8cc1Swenshuai.xi return(GWIN_NO_AVAILABLE);
5804*53ee8cc1Swenshuai.xi }
5805*53ee8cc1Swenshuai.xi
5806*53ee8cc1Swenshuai.xi if(pwinFB->height == 1080)
5807*53ee8cc1Swenshuai.xi {
5808*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->GOP_FramePacking_Gap = 45;
5809*53ee8cc1Swenshuai.xi }
5810*53ee8cc1Swenshuai.xi else if( pwinFB->height == 720)
5811*53ee8cc1Swenshuai.xi {
5812*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->GOP_FramePacking_Gap = 30;
5813*53ee8cc1Swenshuai.xi }
5814*53ee8cc1Swenshuai.xi else
5815*53ee8cc1Swenshuai.xi {
5816*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->GOP_FramePacking_Gap = 0;
5817*53ee8cc1Swenshuai.xi }
5818*53ee8cc1Swenshuai.xi
5819*53ee8cc1Swenshuai.xi enRet = MDrv_GOP_Set3DOSD_Mode(g_pGOPCtxLocal, u8GOP, (EN_DRV_GOP_3D_MODE)en3DMode);
5820*53ee8cc1Swenshuai.xi if(enRet != GOP_SUCCESS)
5821*53ee8cc1Swenshuai.xi {
5822*53ee8cc1Swenshuai.xi return((E_GOP_API_Result)enRet);
5823*53ee8cc1Swenshuai.xi }
5824*53ee8cc1Swenshuai.xi break;
5825*53ee8cc1Swenshuai.xi }
5826*53ee8cc1Swenshuai.xi default:
5827*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s]not support 3D OSD case: %d\n",__FUNCTION__, en3DMode);
5828*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5829*53ee8cc1Swenshuai.xi }
5830*53ee8cc1Swenshuai.xi
5831*53ee8cc1Swenshuai.xi if(GOP_MapFB2Win(pInstance,u16MainFBId,u8Gwin) != GOP_API_SUCCESS)
5832*53ee8cc1Swenshuai.xi {
5833*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] can't map Main fbid:%d to gwin:%d\n",__FUNCTION__,u16MainFBId,u8Gwin);
5834*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5835*53ee8cc1Swenshuai.xi }
5836*53ee8cc1Swenshuai.xi
5837*53ee8cc1Swenshuai.xi if(en3DMode != E_GOP_3D_DISABLE)
5838*53ee8cc1Swenshuai.xi {
5839*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP])
5840*53ee8cc1Swenshuai.xi {
5841*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
5842*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
5843*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOP, &GopDst);
5844*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
5845*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
5846*53ee8cc1Swenshuai.xi {
5847*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
5848*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,u8Gwin, &stGwinInfo);
5849*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = pwinFB->addr;
5850*53ee8cc1Swenshuai.xi _GOP_GWIN_SetTLBHVMirrorDRAMAddr(pInstance,u8Gwin, bHMirror, bVMirror, &stGwinInfo);
5851*53ee8cc1Swenshuai.xi pwinFB->addr = stGwinInfo.u32DRAMRBlkStart;
5852*53ee8cc1Swenshuai.xi }
5853*53ee8cc1Swenshuai.xi }
5854*53ee8cc1Swenshuai.xi else
5855*53ee8cc1Swenshuai.xi {
5856*53ee8cc1Swenshuai.xi if(u8GOP > GOPTYPE.GOP0)
5857*53ee8cc1Swenshuai.xi {
5858*53ee8cc1Swenshuai.xi MS_BOOL bHMirror = FALSE, bVMirror = FALSE;
5859*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst =E_DRV_GOP_DST_INVALID;
5860*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOP, &GopDst);
5861*53ee8cc1Swenshuai.xi _GOP_GWIN_IsEnableMirror(pInstance,GopDst, &bHMirror, &bVMirror);
5862*53ee8cc1Swenshuai.xi if(bHMirror || bVMirror)
5863*53ee8cc1Swenshuai.xi {
5864*53ee8cc1Swenshuai.xi GOP_GwinInfo stGwinInfo;
5865*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,u8Gwin, &stGwinInfo);
5866*53ee8cc1Swenshuai.xi stGwinInfo.u32DRAMRBlkStart = pwinFB->addr;
5867*53ee8cc1Swenshuai.xi _GOP_GWIN_SetHVMirrorDRAMAddr(pInstance,u8Gwin, bHMirror, bVMirror, &stGwinInfo);
5868*53ee8cc1Swenshuai.xi pwinFB->addr = stGwinInfo.u32DRAMRBlkStart;
5869*53ee8cc1Swenshuai.xi }
5870*53ee8cc1Swenshuai.xi }
5871*53ee8cc1Swenshuai.xi }
5872*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bTLB[u8GOP])
5873*53ee8cc1Swenshuai.xi {
5874*53ee8cc1Swenshuai.xi TLBSubAddr = (pwinFB->addr/PAGE_SIZE)*TLB_PER_ENTRY_SIZE + g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[u8GOP];
5875*53ee8cc1Swenshuai.xi MDrv_GOP_SetTLBSubAddr(g_pGOPCtxLocal,u8GOP,TLBSubAddr);
5876*53ee8cc1Swenshuai.xi MDrv_GOP_Set3DOSD_Sub(g_pGOPCtxLocal,u8Gwin, pwinFB->addr%(PAGE_SIZE*PER_MIU_TLB_ENTRY_COUNT));
5877*53ee8cc1Swenshuai.xi }
5878*53ee8cc1Swenshuai.xi else
5879*53ee8cc1Swenshuai.xi {
5880*53ee8cc1Swenshuai.xi MDrv_GOP_Set3DOSD_Sub(g_pGOPCtxLocal,u8Gwin, pwinFB->addr);
5881*53ee8cc1Swenshuai.xi }
5882*53ee8cc1Swenshuai.xi }
5883*53ee8cc1Swenshuai.xi else
5884*53ee8cc1Swenshuai.xi {
5885*53ee8cc1Swenshuai.xi MDrv_GOP_Set3DOSD_Sub(g_pGOPCtxLocal,u8Gwin, 0x0); //clear sub address
5886*53ee8cc1Swenshuai.xi }
5887*53ee8cc1Swenshuai.xi MDrv_GOP_Set3DOSD_Middle(g_pGOPCtxLocal, u8GOP);
5888*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
5889*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5890*53ee8cc1Swenshuai.xi }
5891*53ee8cc1Swenshuai.xi
GOP_GWIN_SetGPUtileMode(void * pInstance,MS_U8 u8Gwin,EN_GOP_GPU_TILE_MODE tilemode)5892*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetGPUtileMode(void* pInstance,MS_U8 u8Gwin, EN_GOP_GPU_TILE_MODE tilemode)
5893*53ee8cc1Swenshuai.xi {
5894*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5895*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5896*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5897*53ee8cc1Swenshuai.xi #endif
5898*53ee8cc1Swenshuai.xi
5899*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8Gwin))
5900*53ee8cc1Swenshuai.xi {
5901*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8Gwin);
5902*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
5903*53ee8cc1Swenshuai.xi }
5904*53ee8cc1Swenshuai.xi
5905*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGPUTileMode(g_pGOPCtxLocal, u8Gwin, tilemode);
5906*53ee8cc1Swenshuai.xi
5907*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5908*53ee8cc1Swenshuai.xi }
5909*53ee8cc1Swenshuai.xi
GOP_SetGOPClk(void * pInstance,MS_U8 gopNum,EN_GOP_DST_TYPE eDstType)5910*53ee8cc1Swenshuai.xi MS_U32 GOP_SetGOPClk(void* pInstance,MS_U8 gopNum, EN_GOP_DST_TYPE eDstType)
5911*53ee8cc1Swenshuai.xi {
5912*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst;
5913*53ee8cc1Swenshuai.xi
5914*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5915*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5916*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5917*53ee8cc1Swenshuai.xi #endif
5918*53ee8cc1Swenshuai.xi
5919*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,gopNum))
5920*53ee8cc1Swenshuai.xi {
5921*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,gopNum);
5922*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5923*53ee8cc1Swenshuai.xi }
5924*53ee8cc1Swenshuai.xi (_GOP_Map_APIDst2DRV_Enum(pInstance,eDstType, &GopDst));
5925*53ee8cc1Swenshuai.xi (MDrv_GOP_SetGOPClk(g_pGOPCtxLocal, gopNum, GopDst));
5926*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5927*53ee8cc1Swenshuai.xi }
GOP_GWIN_SetBnkForceWrite(void * pInstance,MS_U8 u8GOP,MS_BOOL bEnable)5928*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetBnkForceWrite(void* pInstance,MS_U8 u8GOP, MS_BOOL bEnable)
5929*53ee8cc1Swenshuai.xi {
5930*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5931*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5932*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5933*53ee8cc1Swenshuai.xi #endif
5934*53ee8cc1Swenshuai.xi
5935*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal == NULL)
5936*53ee8cc1Swenshuai.xi {
5937*53ee8cc1Swenshuai.xi bInitBkFWR[u8GOP] = bEnable;
5938*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5939*53ee8cc1Swenshuai.xi }
5940*53ee8cc1Swenshuai.xi else
5941*53ee8cc1Swenshuai.xi {
5942*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGopChipProperty->bBnkForceWrite)
5943*53ee8cc1Swenshuai.xi {
5944*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] GOP not support bank force write function in this chip version \n",__FUNCTION__,__LINE__);
5945*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5946*53ee8cc1Swenshuai.xi }
5947*53ee8cc1Swenshuai.xi else
5948*53ee8cc1Swenshuai.xi {
5949*53ee8cc1Swenshuai.xi bInitBkFWR[u8GOP] = bEnable;
5950*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetBnkForceWrite(g_pGOPCtxLocal, u8GOP, bEnable);
5951*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5952*53ee8cc1Swenshuai.xi }
5953*53ee8cc1Swenshuai.xi }
5954*53ee8cc1Swenshuai.xi }
GOP_GWIN_SetForceWrite(void * pInstance,MS_BOOL bEnable)5955*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetForceWrite(void* pInstance,MS_BOOL bEnable)
5956*53ee8cc1Swenshuai.xi {
5957*53ee8cc1Swenshuai.xi //It's used for supernova special used. (by Jupiter)
5958*53ee8cc1Swenshuai.xi //There should no driver request before init.
5959*53ee8cc1Swenshuai.xi //Supernova wants to easly control AP flow, it will set gop force write before gop init.
5960*53ee8cc1Swenshuai.xi //Driver must recode the FRWR status and set it during gop init.
5961*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5962*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5963*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5964*53ee8cc1Swenshuai.xi #endif
5965*53ee8cc1Swenshuai.xi
5966*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal == NULL)
5967*53ee8cc1Swenshuai.xi {
5968*53ee8cc1Swenshuai.xi bInitFWR = bEnable;
5969*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
5970*53ee8cc1Swenshuai.xi }
5971*53ee8cc1Swenshuai.xi else
5972*53ee8cc1Swenshuai.xi {
5973*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bInitFWR = bEnable;
5974*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetForceWrite(g_pGOPCtxLocal, bEnable);
5975*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
5976*53ee8cc1Swenshuai.xi }
5977*53ee8cc1Swenshuai.xi }
GOP_Set3D_LR_FrameExchange(void * pInstance,MS_U8 u8GOP)5978*53ee8cc1Swenshuai.xi MS_U32 GOP_Set3D_LR_FrameExchange(void* pInstance,MS_U8 u8GOP)
5979*53ee8cc1Swenshuai.xi {
5980*53ee8cc1Swenshuai.xi GOP_Result enRet = GOP_FAIL;
5981*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
5982*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
5983*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
5984*53ee8cc1Swenshuai.xi #endif
5985*53ee8cc1Swenshuai.xi
5986*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
5987*53ee8cc1Swenshuai.xi {
5988*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
5989*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
5990*53ee8cc1Swenshuai.xi }
5991*53ee8cc1Swenshuai.xi
5992*53ee8cc1Swenshuai.xi enRet = MDrv_GOP_Set3D_LR_FrameExchange(g_pGOPCtxLocal, u8GOP);
5993*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
5994*53ee8cc1Swenshuai.xi return enRet;
5995*53ee8cc1Swenshuai.xi }
GOP_Enable_VEOSD(void * pInstance,MS_U8 u8GOP,MS_BOOL bEn)5996*53ee8cc1Swenshuai.xi MS_U32 GOP_Enable_VEOSD(void* pInstance,MS_U8 u8GOP, MS_BOOL bEn)
5997*53ee8cc1Swenshuai.xi {
5998*53ee8cc1Swenshuai.xi MS_U8 GOPNum = u8GOP;
5999*53ee8cc1Swenshuai.xi MS_BOOL bret;
6000*53ee8cc1Swenshuai.xi DRV_GOPDstType pGopDst = E_DRV_GOP_DST_INVALID;
6001*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6002*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6003*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6004*53ee8cc1Swenshuai.xi #endif
6005*53ee8cc1Swenshuai.xi
6006*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, u8GOP, &pGopDst);
6007*53ee8cc1Swenshuai.xi
6008*53ee8cc1Swenshuai.xi if((pGopDst == E_DRV_GOP_DST_MIXER2VE) || (pGopDst == E_DRV_GOP_DST_MIXER2OP) || (pGopDst == E_DRV_GOP_DST_MIXER2OP1))
6009*53ee8cc1Swenshuai.xi {
6010*53ee8cc1Swenshuai.xi GOPNum = GOPTYPE.MIXER-1;
6011*53ee8cc1Swenshuai.xi }
6012*53ee8cc1Swenshuai.xi else if(pGopDst == E_DRV_GOP_DST_INVALID)
6013*53ee8cc1Swenshuai.xi {
6014*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]Wrong GOP Destination!",__FUNCTION__,__LINE__);
6015*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6016*53ee8cc1Swenshuai.xi }
6017*53ee8cc1Swenshuai.xi
6018*53ee8cc1Swenshuai.xi bret = MDrv_GOP_Set_VE_MUX(g_pGOPCtxLocal, GOPNum, bEn);
6019*53ee8cc1Swenshuai.xi
6020*53ee8cc1Swenshuai.xi if(bret)
6021*53ee8cc1Swenshuai.xi {
6022*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6023*53ee8cc1Swenshuai.xi }
6024*53ee8cc1Swenshuai.xi else
6025*53ee8cc1Swenshuai.xi {
6026*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6027*53ee8cc1Swenshuai.xi }
6028*53ee8cc1Swenshuai.xi }
6029*53ee8cc1Swenshuai.xi
GOP_OutputLayerSwitch(void * pInstance,MS_U8 u8GOP)6030*53ee8cc1Swenshuai.xi MS_U32 GOP_OutputLayerSwitch(void* pInstance,MS_U8 u8GOP)
6031*53ee8cc1Swenshuai.xi {
6032*53ee8cc1Swenshuai.xi MS_U8 i;
6033*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6034*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6035*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6036*53ee8cc1Swenshuai.xi #endif
6037*53ee8cc1Swenshuai.xi
6038*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
6039*53ee8cc1Swenshuai.xi {
6040*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
6041*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6042*53ee8cc1Swenshuai.xi }
6043*53ee8cc1Swenshuai.xi
6044*53ee8cc1Swenshuai.xi GOP_M_INFO("---%s %d: PID[%td], TID[%td] u8GOP=%u\n", __FUNCTION__, __LINE__, (ptrdiff_t)getpid(), (ptrdiff_t)MsOS_GetOSThreadID(), u8GOP);
6045*53ee8cc1Swenshuai.xi
6046*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPHighPri(g_pGOPCtxLocal, u8GOP);
6047*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal); i++)
6048*53ee8cc1Swenshuai.xi {
6049*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,i);
6050*53ee8cc1Swenshuai.xi }
6051*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6052*53ee8cc1Swenshuai.xi }
GOP_GWIN_SwapOverlapWin(void * pInstance,MS_U8 u8GOP,MS_U8 u8win)6053*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SwapOverlapWin(void* pInstance,MS_U8 u8GOP, MS_U8 u8win)
6054*53ee8cc1Swenshuai.xi {
6055*53ee8cc1Swenshuai.xi MS_U8 i, *temp;
6056*53ee8cc1Swenshuai.xi GOP_GwinPriority GopGwinPri;
6057*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6058*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6059*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6060*53ee8cc1Swenshuai.xi #endif
6061*53ee8cc1Swenshuai.xi
6062*53ee8cc1Swenshuai.xi
6063*53ee8cc1Swenshuai.xi memset(&GopGwinPri, 0, sizeof(GOP_GwinPriority));
6064*53ee8cc1Swenshuai.xi
6065*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8win))
6066*53ee8cc1Swenshuai.xi {
6067*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %d is out of range\n",__FUNCTION__,__LINE__,u8win);
6068*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6069*53ee8cc1Swenshuai.xi }
6070*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
6071*53ee8cc1Swenshuai.xi {
6072*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
6073*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6074*53ee8cc1Swenshuai.xi }
6075*53ee8cc1Swenshuai.xi
6076*53ee8cc1Swenshuai.xi if (u8GOP==1) //GOP1
6077*53ee8cc1Swenshuai.xi {
6078*53ee8cc1Swenshuai.xi if(4 == MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,1))
6079*53ee8cc1Swenshuai.xi {
6080*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinPriority(g_pGOPCtxLocal, 1, &GopGwinPri);
6081*53ee8cc1Swenshuai.xi temp = (MS_U8*)&GopGwinPri.Gop0_GwinPri;
6082*53ee8cc1Swenshuai.xi
6083*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GOP_GetGwinNum(g_pGOPCtxLocal, 1); i++)
6084*53ee8cc1Swenshuai.xi {
6085*53ee8cc1Swenshuai.xi if (temp[i] == (u8win-MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,0))) //find
6086*53ee8cc1Swenshuai.xi {
6087*53ee8cc1Swenshuai.xi temp[i] = temp[0];
6088*53ee8cc1Swenshuai.xi temp[0] = (u8win-MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,0));
6089*53ee8cc1Swenshuai.xi break;
6090*53ee8cc1Swenshuai.xi }
6091*53ee8cc1Swenshuai.xi }
6092*53ee8cc1Swenshuai.xi
6093*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinPriority(g_pGOPCtxLocal, 1, &GopGwinPri);
6094*53ee8cc1Swenshuai.xi }
6095*53ee8cc1Swenshuai.xi else
6096*53ee8cc1Swenshuai.xi {
6097*53ee8cc1Swenshuai.xi GopGwinPri.Gop1_1stGwin = u8win-MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,0);
6098*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinPriority(g_pGOPCtxLocal, 1, &GopGwinPri);
6099*53ee8cc1Swenshuai.xi }
6100*53ee8cc1Swenshuai.xi }
6101*53ee8cc1Swenshuai.xi else //GOP0
6102*53ee8cc1Swenshuai.xi {
6103*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinPriority(g_pGOPCtxLocal, 0, &GopGwinPri);
6104*53ee8cc1Swenshuai.xi temp = (MS_U8*)&GopGwinPri.Gop0_GwinPri;
6105*53ee8cc1Swenshuai.xi
6106*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,0); i++)
6107*53ee8cc1Swenshuai.xi {
6108*53ee8cc1Swenshuai.xi if (temp[i] == u8win) //find
6109*53ee8cc1Swenshuai.xi {
6110*53ee8cc1Swenshuai.xi temp[i] = temp[0];
6111*53ee8cc1Swenshuai.xi temp[0] = u8win;
6112*53ee8cc1Swenshuai.xi break;
6113*53ee8cc1Swenshuai.xi }
6114*53ee8cc1Swenshuai.xi }
6115*53ee8cc1Swenshuai.xi
6116*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinPriority(g_pGOPCtxLocal, 0, &GopGwinPri);
6117*53ee8cc1Swenshuai.xi }
6118*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6119*53ee8cc1Swenshuai.xi }
GOP_SetGOPBWStrength(void * pInstance,EN_GOP_BW_STRENGTH eGOPBWStr,MS_U8 u8GOP)6120*53ee8cc1Swenshuai.xi MS_U32 GOP_SetGOPBWStrength(void* pInstance,EN_GOP_BW_STRENGTH eGOPBWStr, MS_U8 u8GOP)
6121*53ee8cc1Swenshuai.xi {
6122*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6123*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6124*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6125*53ee8cc1Swenshuai.xi #endif
6126*53ee8cc1Swenshuai.xi
6127*53ee8cc1Swenshuai.xi if (u8GOP !=0xc && !_GOP_IsGwinIdValid(pInstance,u8GOP))
6128*53ee8cc1Swenshuai.xi {
6129*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nInvaild gop num!!"));
6130*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6131*53ee8cc1Swenshuai.xi }
6132*53ee8cc1Swenshuai.xi
6133*53ee8cc1Swenshuai.xi if(eGOPBWStr == E_GOP_BW_STRONG)
6134*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPBWStrength(g_pGOPCtxLocal, u8GOP,E_GOP_BURSTLEN_LONG);
6135*53ee8cc1Swenshuai.xi else if(eGOPBWStr == E_GOP_BW_MIDDLE)
6136*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPBWStrength(g_pGOPCtxLocal, u8GOP,E_GOP_BURSTLEN_MIDDLE);
6137*53ee8cc1Swenshuai.xi else if(eGOPBWStr == E_GOP_BW_WEAK)
6138*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPBWStrength(g_pGOPCtxLocal, u8GOP,E_GOP_BURSTLEN_SHORT);
6139*53ee8cc1Swenshuai.xi else
6140*53ee8cc1Swenshuai.xi {
6141*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6142*53ee8cc1Swenshuai.xi }
6143*53ee8cc1Swenshuai.xi
6144*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6145*53ee8cc1Swenshuai.xi }
GOP_GetGOPBWStrength(void * pInstance,MS_U8 u8GOP,EN_GOP_BW_STRENGTH * curBW)6146*53ee8cc1Swenshuai.xi MS_U32 GOP_GetGOPBWStrength(void* pInstance,MS_U8 u8GOP, EN_GOP_BW_STRENGTH* curBW)
6147*53ee8cc1Swenshuai.xi {
6148*53ee8cc1Swenshuai.xi MS_U32 gopbw;
6149*53ee8cc1Swenshuai.xi EN_GOP_BW_STRENGTH ret;
6150*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6151*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6152*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6153*53ee8cc1Swenshuai.xi #endif
6154*53ee8cc1Swenshuai.xi
6155*53ee8cc1Swenshuai.xi
6156*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,u8GOP))
6157*53ee8cc1Swenshuai.xi {
6158*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nInvaild gop num!!"));
6159*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6160*53ee8cc1Swenshuai.xi }
6161*53ee8cc1Swenshuai.xi gopbw = MDrv_GOP_GetGOPBWStrength(g_pGOPCtxLocal, u8GOP);
6162*53ee8cc1Swenshuai.xi
6163*53ee8cc1Swenshuai.xi if(gopbw == E_GOP_BURSTLEN_LONG )
6164*53ee8cc1Swenshuai.xi ret = E_GOP_BW_STRONG;
6165*53ee8cc1Swenshuai.xi else if(gopbw == E_GOP_BURSTLEN_MIDDLE )
6166*53ee8cc1Swenshuai.xi ret = E_GOP_BW_MIDDLE;
6167*53ee8cc1Swenshuai.xi else if(gopbw == E_GOP_BURSTLEN_SHORT )
6168*53ee8cc1Swenshuai.xi ret = E_GOP_BW_WEAK;
6169*53ee8cc1Swenshuai.xi else
6170*53ee8cc1Swenshuai.xi ret = E_GOP_BW_UNKNOWN;
6171*53ee8cc1Swenshuai.xi
6172*53ee8cc1Swenshuai.xi if(curBW != NULL)
6173*53ee8cc1Swenshuai.xi *curBW = ret;
6174*53ee8cc1Swenshuai.xi else
6175*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6176*53ee8cc1Swenshuai.xi
6177*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6178*53ee8cc1Swenshuai.xi }
GOP_EnableLBCouple(void * pInstance,MS_U8 u8GOP,MS_BOOL bEnable)6179*53ee8cc1Swenshuai.xi MS_U32 GOP_EnableLBCouple(void* pInstance,MS_U8 u8GOP, MS_BOOL bEnable)
6180*53ee8cc1Swenshuai.xi {
6181*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6182*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6183*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6184*53ee8cc1Swenshuai.xi #endif
6185*53ee8cc1Swenshuai.xi
6186*53ee8cc1Swenshuai.xi MDrv_GOP_EnableLBCouple(g_pGOPCtxLocal, u8GOP, bEnable);
6187*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
6188*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6189*53ee8cc1Swenshuai.xi }
6190*53ee8cc1Swenshuai.xi
GOP_SetGOPYUV(void * pInstance,MS_U8 u8GOP)6191*53ee8cc1Swenshuai.xi MS_U32 GOP_SetGOPYUV(void* pInstance,MS_U8 u8GOP)
6192*53ee8cc1Swenshuai.xi {
6193*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6194*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6195*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6196*53ee8cc1Swenshuai.xi #endif
6197*53ee8cc1Swenshuai.xi
6198*53ee8cc1Swenshuai.xi if(u8GOP !=0xC &&!_GOP_IsGwinIdValid(pInstance,u8GOP))
6199*53ee8cc1Swenshuai.xi {
6200*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nInvaild gop num!!"));
6201*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6202*53ee8cc1Swenshuai.xi }
6203*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPYUV(g_pGOPCtxLocal, u8GOP);
6204*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6205*53ee8cc1Swenshuai.xi }
6206*53ee8cc1Swenshuai.xi
GOP_IsRegUpdated(void * pInstance,MS_U8 u8GopType)6207*53ee8cc1Swenshuai.xi MS_U32 GOP_IsRegUpdated(void* pInstance,MS_U8 u8GopType)
6208*53ee8cc1Swenshuai.xi {
6209*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6210*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6211*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6212*53ee8cc1Swenshuai.xi #endif
6213*53ee8cc1Swenshuai.xi
6214*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetGOPACK(g_pGOPCtxLocal, u8GopType))
6215*53ee8cc1Swenshuai.xi {
6216*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6217*53ee8cc1Swenshuai.xi }
6218*53ee8cc1Swenshuai.xi return(GOP_API_FAIL);
6219*53ee8cc1Swenshuai.xi }
6220*53ee8cc1Swenshuai.xi
GOP_TestPatternAlpha_Enable(void * pInstance,MS_BOOL bTSTAlpha)6221*53ee8cc1Swenshuai.xi MS_U32 GOP_TestPatternAlpha_Enable(void* pInstance,MS_BOOL bTSTAlpha)
6222*53ee8cc1Swenshuai.xi {
6223*53ee8cc1Swenshuai.xi DRV_GOP_TSTPATTERN drv_TstPattern;
6224*53ee8cc1Swenshuai.xi memset(&drv_TstPattern, 0, sizeof(DRV_GOP_TSTPATTERN));
6225*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6226*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6227*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6228*53ee8cc1Swenshuai.xi #endif
6229*53ee8cc1Swenshuai.xi
6230*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_Alpha_En = bTSTAlpha;
6231*53ee8cc1Swenshuai.xi MDrv_GOP_TestPatternAlpha_Enable(g_pGOPCtxLocal, drv_TstPattern.bTSTClr_Alpha_En);
6232*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6233*53ee8cc1Swenshuai.xi }
6234*53ee8cc1Swenshuai.xi
GOP_OC_SetOCFBinfo(void * pInstance,MS_PHY u64Addr,EN_GOP_OC_SEL_TYPE BankMode,MS_U32 enBufSize)6235*53ee8cc1Swenshuai.xi MS_U32 GOP_OC_SetOCFBinfo(void* pInstance,MS_PHY u64Addr, EN_GOP_OC_SEL_TYPE BankMode, MS_U32 enBufSize)
6236*53ee8cc1Swenshuai.xi {
6237*53ee8cc1Swenshuai.xi DRV_GOP_OC_INFO OCinfo;
6238*53ee8cc1Swenshuai.xi MS_U16 PanelWidth,PanelHeight;
6239*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet = GOP_API_FAIL;
6240*53ee8cc1Swenshuai.xi MS_U8 u8CurGOP = 0;
6241*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6242*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6243*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6244*53ee8cc1Swenshuai.xi #endif
6245*53ee8cc1Swenshuai.xi
6246*53ee8cc1Swenshuai.xi u8CurGOP = MDrv_GOP_Get(g_pGOPCtxLocal);
6247*53ee8cc1Swenshuai.xi memset(&OCinfo, 0, sizeof(DRV_GOP_OC_INFO));
6248*53ee8cc1Swenshuai.xi
6249*53ee8cc1Swenshuai.xi PanelWidth = g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP];
6250*53ee8cc1Swenshuai.xi PanelHeight = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8CurGOP];
6251*53ee8cc1Swenshuai.xi
6252*53ee8cc1Swenshuai.xi OCinfo.u16GOP_OC_HSIZE = PanelWidth;
6253*53ee8cc1Swenshuai.xi OCinfo.u16GOP_OC_VSIZE = PanelHeight;
6254*53ee8cc1Swenshuai.xi OCinfo.u32GOP_OC_FETCH = ( ((PanelWidth >>1) + (PanelWidth /10)) << 2) * PanelHeight; // PanelWidth *0.6(Compression Ratio) *4(8888fmt)
6255*53ee8cc1Swenshuai.xi
6256*53ee8cc1Swenshuai.xi if(enBufSize < (OCinfo.u32GOP_OC_FETCH << BankMode))
6257*53ee8cc1Swenshuai.xi {
6258*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] ERROR, OC Buffer size not enough , input BufSize:0x%tx\n",__FUNCTION__,(ptrdiff_t)enBufSize);
6259*53ee8cc1Swenshuai.xi return (GOP_API_FAIL);
6260*53ee8cc1Swenshuai.xi }
6261*53ee8cc1Swenshuai.xi else
6262*53ee8cc1Swenshuai.xi {
6263*53ee8cc1Swenshuai.xi switch(BankMode)
6264*53ee8cc1Swenshuai.xi {
6265*53ee8cc1Swenshuai.xi case E_GOP_OC_SEL_2BankMode:
6266*53ee8cc1Swenshuai.xi OCinfo.u8GOP_OC_BANK_MODE = 1;
6267*53ee8cc1Swenshuai.xi break;
6268*53ee8cc1Swenshuai.xi case E_GOP_OC_SEL_4BankMode:
6269*53ee8cc1Swenshuai.xi OCinfo.u8GOP_OC_BANK_MODE = 0;
6270*53ee8cc1Swenshuai.xi break;
6271*53ee8cc1Swenshuai.xi default:
6272*53ee8cc1Swenshuai.xi OCinfo.u8GOP_OC_BANK_MODE = 1;
6273*53ee8cc1Swenshuai.xi break;
6274*53ee8cc1Swenshuai.xi }
6275*53ee8cc1Swenshuai.xi }
6276*53ee8cc1Swenshuai.xi
6277*53ee8cc1Swenshuai.xi OCinfo.u64GOP_OC_DRAM_RBLK = u64Addr ;
6278*53ee8cc1Swenshuai.xi OCinfo.u64GOP_OC_ADDRPROTECT_STR = u64Addr;
6279*53ee8cc1Swenshuai.xi OCinfo.u64GOP_OC_ADDRPROTECT_END = u64Addr + enBufSize;
6280*53ee8cc1Swenshuai.xi
6281*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_OC_SetOCInfo(g_pGOPCtxLocal,&OCinfo);
6282*53ee8cc1Swenshuai.xi
6283*53ee8cc1Swenshuai.xi return(enRet);
6284*53ee8cc1Swenshuai.xi }
6285*53ee8cc1Swenshuai.xi
GOP_VE_SetOutputTiming(void * pInstance,GOP_VE_TIMINGTYPE mode)6286*53ee8cc1Swenshuai.xi MS_U32 GOP_VE_SetOutputTiming(void* pInstance,GOP_VE_TIMINGTYPE mode)
6287*53ee8cc1Swenshuai.xi {
6288*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6289*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6290*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6291*53ee8cc1Swenshuai.xi #endif
6292*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
6293*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_VE_SetOutputTiming(g_pGOPCtxLocal, mode);
6294*53ee8cc1Swenshuai.xi return enRet;
6295*53ee8cc1Swenshuai.xi }
6296*53ee8cc1Swenshuai.xi
GOP_MIXER_SetOutputTiming(void * pInstance,GOP_MIXER_TIMINGTYPE mode,GOP_MixerTiming * pMT)6297*53ee8cc1Swenshuai.xi MS_U32 GOP_MIXER_SetOutputTiming(void* pInstance,GOP_MIXER_TIMINGTYPE mode, GOP_MixerTiming *pMT)
6298*53ee8cc1Swenshuai.xi {
6299*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
6300*53ee8cc1Swenshuai.xi GOP_DRV_MixerTiming MT;
6301*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6302*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6303*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6304*53ee8cc1Swenshuai.xi #endif
6305*53ee8cc1Swenshuai.xi
6306*53ee8cc1Swenshuai.xi if(pMT != NULL)
6307*53ee8cc1Swenshuai.xi {
6308*53ee8cc1Swenshuai.xi MT.hstart = pMT->hstart;
6309*53ee8cc1Swenshuai.xi MT.vstart = pMT->vstart;
6310*53ee8cc1Swenshuai.xi MT.vend = pMT->vend;
6311*53ee8cc1Swenshuai.xi MT.hend = pMT->hend;
6312*53ee8cc1Swenshuai.xi MT.htotal = pMT->htotal;
6313*53ee8cc1Swenshuai.xi MT.hsyncdelay = 0;
6314*53ee8cc1Swenshuai.xi }
6315*53ee8cc1Swenshuai.xi
6316*53ee8cc1Swenshuai.xi if(pMT == NULL)
6317*53ee8cc1Swenshuai.xi {
6318*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6319*53ee8cc1Swenshuai.xi }
6320*53ee8cc1Swenshuai.xi
6321*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_MIXER_SetOutputTiming(g_pGOPCtxLocal, mode, &MT);
6322*53ee8cc1Swenshuai.xi return(enRet);
6323*53ee8cc1Swenshuai.xi }
GOP_MIXER_SetMIXER2OPOutputTiming(void * pInstance,GOP_Mixer2OPTiming * pMT)6324*53ee8cc1Swenshuai.xi MS_U32 GOP_MIXER_SetMIXER2OPOutputTiming(void* pInstance,GOP_Mixer2OPTiming *pMT)
6325*53ee8cc1Swenshuai.xi {
6326*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
6327*53ee8cc1Swenshuai.xi GOP_DRV_MixerTiming MT;
6328*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6329*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6330*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6331*53ee8cc1Swenshuai.xi #endif
6332*53ee8cc1Swenshuai.xi
6333*53ee8cc1Swenshuai.xi
6334*53ee8cc1Swenshuai.xi if(pMT != NULL)
6335*53ee8cc1Swenshuai.xi {
6336*53ee8cc1Swenshuai.xi MT.hstart = pMT->hstart;
6337*53ee8cc1Swenshuai.xi MT.vstart = pMT->vstart;
6338*53ee8cc1Swenshuai.xi MT.vend = pMT->vend;
6339*53ee8cc1Swenshuai.xi MT.hend = pMT->hend;
6340*53ee8cc1Swenshuai.xi MT.htotal = pMT->htotal;
6341*53ee8cc1Swenshuai.xi MT.hsyncdelay = pMT->hsyncdelay;
6342*53ee8cc1Swenshuai.xi }
6343*53ee8cc1Swenshuai.xi
6344*53ee8cc1Swenshuai.xi if(pMT == NULL)
6345*53ee8cc1Swenshuai.xi {
6346*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6347*53ee8cc1Swenshuai.xi }
6348*53ee8cc1Swenshuai.xi
6349*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_MIXER_SetOutputTiming(g_pGOPCtxLocal, GOP_CUSTOM_OP , &MT);
6350*53ee8cc1Swenshuai.xi return(enRet);
6351*53ee8cc1Swenshuai.xi }
GOP_MIXER_EnableVfilter(void * pInstance,MS_BOOL bEnable)6352*53ee8cc1Swenshuai.xi MS_U32 GOP_MIXER_EnableVfilter(void* pInstance,MS_BOOL bEnable)
6353*53ee8cc1Swenshuai.xi {
6354*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
6355*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6356*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6357*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6358*53ee8cc1Swenshuai.xi #endif
6359*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_MIXER_EnableVfilter(g_pGOPCtxLocal, bEnable);
6360*53ee8cc1Swenshuai.xi
6361*53ee8cc1Swenshuai.xi return(enRet);
6362*53ee8cc1Swenshuai.xi }
6363*53ee8cc1Swenshuai.xi
GOP_MIXER_EnableOldBlendingMode(void * pInstance,MS_U8 u8GOP,MS_BOOL bEnable)6364*53ee8cc1Swenshuai.xi MS_U32 GOP_MIXER_EnableOldBlendingMode(void* pInstance, MS_U8 u8GOP, MS_BOOL bEnable)
6365*53ee8cc1Swenshuai.xi {
6366*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet=GOP_API_FAIL;
6367*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6368*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6369*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6370*53ee8cc1Swenshuai.xi #endif
6371*53ee8cc1Swenshuai.xi enRet = (E_GOP_API_Result)MDrv_GOP_MIXER_EnableOldBlendMode(g_pGOPCtxLocal, u8GOP, bEnable);
6372*53ee8cc1Swenshuai.xi
6373*53ee8cc1Swenshuai.xi return(enRet);
6374*53ee8cc1Swenshuai.xi }
6375*53ee8cc1Swenshuai.xi
GOP_GWIN_SetRelativeWinPrio(void * pInstance,MS_U8 u8GOP,GOP_GwinPri * pGwinPri)6376*53ee8cc1Swenshuai.xi MS_U32 GOP_GWIN_SetRelativeWinPrio(void* pInstance,MS_U8 u8GOP, GOP_GwinPri *pGwinPri)
6377*53ee8cc1Swenshuai.xi {
6378*53ee8cc1Swenshuai.xi GOP_GwinPriority GopGwinPri;
6379*53ee8cc1Swenshuai.xi MS_U8 u8Idx;
6380*53ee8cc1Swenshuai.xi MS_U8 u8Idx2;
6381*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6382*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6383*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6384*53ee8cc1Swenshuai.xi #endif
6385*53ee8cc1Swenshuai.xi
6386*53ee8cc1Swenshuai.xi //Parameter check:
6387*53ee8cc1Swenshuai.xi if(u8GOP>=MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal)|| (NULL == pGwinPri)
6388*53ee8cc1Swenshuai.xi || (pGwinPri->u8GwinNum > 4) || (pGwinPri->u8GwinNum <= 0))
6389*53ee8cc1Swenshuai.xi {
6390*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6391*53ee8cc1Swenshuai.xi }
6392*53ee8cc1Swenshuai.xi
6393*53ee8cc1Swenshuai.xi u8Idx2 = (u8GOP==0) ? MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,0) : (MS_U8)g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum;
6394*53ee8cc1Swenshuai.xi for(u8Idx=0; u8Idx<pGwinPri->u8GwinNum; u8Idx++)
6395*53ee8cc1Swenshuai.xi {
6396*53ee8cc1Swenshuai.xi if(pGwinPri->u8GwinPri[u8Idx]>=u8Idx2)
6397*53ee8cc1Swenshuai.xi {
6398*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6399*53ee8cc1Swenshuai.xi }
6400*53ee8cc1Swenshuai.xi }
6401*53ee8cc1Swenshuai.xi
6402*53ee8cc1Swenshuai.xi //for GOP2,GOP3.no need to set the relative prio
6403*53ee8cc1Swenshuai.xi if ((u8GOP==2) || (u8GOP==3))
6404*53ee8cc1Swenshuai.xi {
6405*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6406*53ee8cc1Swenshuai.xi }
6407*53ee8cc1Swenshuai.xi
6408*53ee8cc1Swenshuai.xi //Handle GOP1:
6409*53ee8cc1Swenshuai.xi if(u8GOP==1)
6410*53ee8cc1Swenshuai.xi {
6411*53ee8cc1Swenshuai.xi u8Idx2 = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,0);
6412*53ee8cc1Swenshuai.xi if(pGwinPri->u8GwinPri[0]<u8Idx2)
6413*53ee8cc1Swenshuai.xi {
6414*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6415*53ee8cc1Swenshuai.xi }
6416*53ee8cc1Swenshuai.xi GopGwinPri.Gop1_1stGwin = pGwinPri->u8GwinPri[0] - u8Idx2;
6417*53ee8cc1Swenshuai.xi //Adjust currently hw priority to app requested relative priority:
6418*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinPriority(g_pGOPCtxLocal, 1, &GopGwinPri);
6419*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6420*53ee8cc1Swenshuai.xi }
6421*53ee8cc1Swenshuai.xi
6422*53ee8cc1Swenshuai.xi //Handle GOP0:
6423*53ee8cc1Swenshuai.xi //Get Currently HW Setting:
6424*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinPriority(g_pGOPCtxLocal, u8GOP, &GopGwinPri);
6425*53ee8cc1Swenshuai.xi
6426*53ee8cc1Swenshuai.xi
6427*53ee8cc1Swenshuai.xi u8Idx2 = 0x0;
6428*53ee8cc1Swenshuai.xi for(u8Idx=0; u8Idx<pGwinPri->u8GwinNum; u8Idx++)
6429*53ee8cc1Swenshuai.xi {
6430*53ee8cc1Swenshuai.xi if(pGwinPri->u8GwinPri[u8Idx] == GopGwinPri.Gop0_GwinPri.u81stGwin)
6431*53ee8cc1Swenshuai.xi {
6432*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x1)
6433*53ee8cc1Swenshuai.xi {
6434*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6435*53ee8cc1Swenshuai.xi }
6436*53ee8cc1Swenshuai.xi
6437*53ee8cc1Swenshuai.xi u8Idx2 |= 0x1;
6438*53ee8cc1Swenshuai.xi }
6439*53ee8cc1Swenshuai.xi else if(pGwinPri->u8GwinPri[u8Idx] == GopGwinPri.Gop0_GwinPri.u82stGwin)
6440*53ee8cc1Swenshuai.xi {
6441*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x2)
6442*53ee8cc1Swenshuai.xi {
6443*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6444*53ee8cc1Swenshuai.xi }
6445*53ee8cc1Swenshuai.xi
6446*53ee8cc1Swenshuai.xi u8Idx2 |= 0x2;
6447*53ee8cc1Swenshuai.xi }
6448*53ee8cc1Swenshuai.xi else if(pGwinPri->u8GwinPri[u8Idx] == GopGwinPri.Gop0_GwinPri.u83stGwin)
6449*53ee8cc1Swenshuai.xi {
6450*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x4)
6451*53ee8cc1Swenshuai.xi {
6452*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6453*53ee8cc1Swenshuai.xi }
6454*53ee8cc1Swenshuai.xi
6455*53ee8cc1Swenshuai.xi u8Idx2 |= 0x4;
6456*53ee8cc1Swenshuai.xi }
6457*53ee8cc1Swenshuai.xi else if(pGwinPri->u8GwinPri[u8Idx] == GopGwinPri.Gop0_GwinPri.u84stGwin)
6458*53ee8cc1Swenshuai.xi {
6459*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x8)
6460*53ee8cc1Swenshuai.xi {
6461*53ee8cc1Swenshuai.xi return(GOP_API_INVALID_PARAMETERS);
6462*53ee8cc1Swenshuai.xi }
6463*53ee8cc1Swenshuai.xi
6464*53ee8cc1Swenshuai.xi u8Idx2 |= 0x8;
6465*53ee8cc1Swenshuai.xi }
6466*53ee8cc1Swenshuai.xi }
6467*53ee8cc1Swenshuai.xi
6468*53ee8cc1Swenshuai.xi u8Idx=0;
6469*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x1)
6470*53ee8cc1Swenshuai.xi {
6471*53ee8cc1Swenshuai.xi GopGwinPri.Gop0_GwinPri.u81stGwin = pGwinPri->u8GwinPri[u8Idx];
6472*53ee8cc1Swenshuai.xi u8Idx++;
6473*53ee8cc1Swenshuai.xi }
6474*53ee8cc1Swenshuai.xi
6475*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x2)
6476*53ee8cc1Swenshuai.xi {
6477*53ee8cc1Swenshuai.xi GopGwinPri.Gop0_GwinPri.u82stGwin = pGwinPri->u8GwinPri[u8Idx];
6478*53ee8cc1Swenshuai.xi u8Idx++;
6479*53ee8cc1Swenshuai.xi }
6480*53ee8cc1Swenshuai.xi
6481*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x4)
6482*53ee8cc1Swenshuai.xi {
6483*53ee8cc1Swenshuai.xi GopGwinPri.Gop0_GwinPri.u83stGwin = pGwinPri->u8GwinPri[u8Idx];
6484*53ee8cc1Swenshuai.xi u8Idx++;
6485*53ee8cc1Swenshuai.xi }
6486*53ee8cc1Swenshuai.xi
6487*53ee8cc1Swenshuai.xi if(u8Idx2 & 0x8)
6488*53ee8cc1Swenshuai.xi {
6489*53ee8cc1Swenshuai.xi GopGwinPri.Gop0_GwinPri.u84stGwin = pGwinPri->u8GwinPri[u8Idx];
6490*53ee8cc1Swenshuai.xi u8Idx++;
6491*53ee8cc1Swenshuai.xi }
6492*53ee8cc1Swenshuai.xi
6493*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetGwinPriority(g_pGOPCtxLocal, 0, &GopGwinPri);
6494*53ee8cc1Swenshuai.xi
6495*53ee8cc1Swenshuai.xi return(GOP_API_SUCCESS);
6496*53ee8cc1Swenshuai.xi }
6497*53ee8cc1Swenshuai.xi
6498*53ee8cc1Swenshuai.xi
6499*53ee8cc1Swenshuai.xi //==================================================================
Ioctl_GOP_DWIN_Init(void * pInstance)6500*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_DWIN_Init(void* pInstance)
6501*53ee8cc1Swenshuai.xi {
6502*53ee8cc1Swenshuai.xi E_GOPD_FIFO_DEPTH gopdFifoDepth;
6503*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6504*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6505*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6506*53ee8cc1Swenshuai.xi #endif
6507*53ee8cc1Swenshuai.xi
6508*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal ==NULL)
6509*53ee8cc1Swenshuai.xi {
6510*53ee8cc1Swenshuai.xi MS_BOOL bFirstInstance;
6511*53ee8cc1Swenshuai.xi GOP_PreInit_Ctx(pInstance, &bFirstInstance);
6512*53ee8cc1Swenshuai.xi if (MDrv_GOP_SetIOMapBase(g_pGOPCtxLocal) != TRUE)
6513*53ee8cc1Swenshuai.xi {
6514*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nget IO base fail"));
6515*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6516*53ee8cc1Swenshuai.xi }
6517*53ee8cc1Swenshuai.xi }
6518*53ee8cc1Swenshuai.xi
6519*53ee8cc1Swenshuai.xi // MDrv_GOP_DWIN_SelectSourceFmt(GOPDWIN_DATA_FMT_YUV);
6520*53ee8cc1Swenshuai.xi //MDrv_GOP_DWIN_SelectSource(GOPDWIN_DATA_SRC_SCALAR);
6521*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_Set_CTRL0(g_pGOPCtxLocal, 0x0000, 0xFFFF); // Clear all
6522*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_Set_CTRL0(g_pGOPCtxLocal, 0x0000, 0x0080); // Set continuous capture
6523*53ee8cc1Swenshuai.xi
6524*53ee8cc1Swenshuai.xi
6525*53ee8cc1Swenshuai.xi // Set DMA burst access length
6526*53ee8cc1Swenshuai.xi gopdFifoDepth = (E_GOPD_FIFO_DEPTH)MDrv_GOP_GetRegForm(g_pGOPCtxLocal, GOPTYPE.DWIN, 0xff);
6527*53ee8cc1Swenshuai.xi switch(gopdFifoDepth)
6528*53ee8cc1Swenshuai.xi {
6529*53ee8cc1Swenshuai.xi case E_GOPD_FIFO_DEPTH_64:
6530*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPBWStrength(g_pGOPCtxLocal, 0xC, E_GOP_BURSTLEN_MIDDLE);
6531*53ee8cc1Swenshuai.xi break;
6532*53ee8cc1Swenshuai.xi case E_GOPD_FIFO_DEPTH_128:
6533*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPBWStrength(g_pGOPCtxLocal, 0xC, E_GOP_BURSTLEN_LONG);
6534*53ee8cc1Swenshuai.xi break;
6535*53ee8cc1Swenshuai.xi case E_GOPD_FIFO_DEPTH_256:
6536*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPBWStrength(g_pGOPCtxLocal, 0xC, E_GOP_BURSTLEN_LONG);
6537*53ee8cc1Swenshuai.xi break;
6538*53ee8cc1Swenshuai.xi default:
6539*53ee8cc1Swenshuai.xi GOP_M_ERR("\n[%s][%d] Not supported GOPD FIFO depth: %d\n", __FUNCTION__,__LINE__, gopdFifoDepth); // bob.fu
6540*53ee8cc1Swenshuai.xi }
6541*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6542*53ee8cc1Swenshuai.xi }
6543*53ee8cc1Swenshuai.xi
Ioctl_GOP_Get_ScaleDst(void * pInstance,MS_U8 u8GOPNum,MS_U16 * pHScaleDst,MS_U16 * pVScaleDst)6544*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Get_ScaleDst(void* pInstance,MS_U8 u8GOPNum,MS_U16 *pHScaleDst,MS_U16 *pVScaleDst)
6545*53ee8cc1Swenshuai.xi {
6546*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6547*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6548*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6549*53ee8cc1Swenshuai.xi #endif
6550*53ee8cc1Swenshuai.xi
6551*53ee8cc1Swenshuai.xi *pHScaleDst = g_pGOPCtxLocal->pGOPCtxShared->u16HScaleDst[u8GOPNum];
6552*53ee8cc1Swenshuai.xi *pVScaleDst = g_pGOPCtxLocal->pGOPCtxShared->u16VScaleDst[u8GOPNum];
6553*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6554*53ee8cc1Swenshuai.xi }
6555*53ee8cc1Swenshuai.xi
6556*53ee8cc1Swenshuai.xi //==================================================================
6557*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////
6558*53ee8cc1Swenshuai.xi // - GOP ioctl function.
6559*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////
6560*53ee8cc1Swenshuai.xi
Ioctl_GOP_Init(void * pInstance,MS_U8 u8GOP,GOP_InitInfo * pGopInit)6561*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Init(void* pInstance,MS_U8 u8GOP,GOP_InitInfo *pGopInit)
6562*53ee8cc1Swenshuai.xi {
6563*53ee8cc1Swenshuai.xi MS_U16 u8Idx;
6564*53ee8cc1Swenshuai.xi #if 0
6565*53ee8cc1Swenshuai.xi DRV_GopPaletteEntry pPalArray[256];
6566*53ee8cc1Swenshuai.xi #else
6567*53ee8cc1Swenshuai.xi DRV_GopPaletteEntry *pPalArray = NULL;
6568*53ee8cc1Swenshuai.xi #endif
6569*53ee8cc1Swenshuai.xi MS_BOOL bFirstInstance = FALSE;
6570*53ee8cc1Swenshuai.xi MS_BOOL resCtxInit;
6571*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst;
6572*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6573*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6574*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6575*53ee8cc1Swenshuai.xi #endif
6576*53ee8cc1Swenshuai.xi
6577*53ee8cc1Swenshuai.xi //NULL pointer protect
6578*53ee8cc1Swenshuai.xi if(NULL == pGopInit)
6579*53ee8cc1Swenshuai.xi {
6580*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] input parameter is NULL\n",__FUNCTION__,__LINE__);
6581*53ee8cc1Swenshuai.xi //GOP_LIB_VER GOPLib;
6582*53ee8cc1Swenshuai.xi resCtxInit = _GOP_Init_Ctx(pInstance,&bFirstInstance);
6583*53ee8cc1Swenshuai.xi APIGOP_ASSERT(resCtxInit, GOP_M_FATAL("failed to init GOP context\n"));
6584*53ee8cc1Swenshuai.xi if (bFirstInstance)
6585*53ee8cc1Swenshuai.xi {
6586*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bDummyInit = TRUE;
6587*53ee8cc1Swenshuai.xi }
6588*53ee8cc1Swenshuai.xi
6589*53ee8cc1Swenshuai.xi if (MDrv_GOP_SetIOMapBase(g_pGOPCtxLocal) != TRUE)
6590*53ee8cc1Swenshuai.xi {
6591*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nget IO base fail"));
6592*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6593*53ee8cc1Swenshuai.xi }
6594*53ee8cc1Swenshuai.xi }
6595*53ee8cc1Swenshuai.xi else
6596*53ee8cc1Swenshuai.xi {
6597*53ee8cc1Swenshuai.xi //GOP_LIB_VER GOPLib;
6598*53ee8cc1Swenshuai.xi resCtxInit = _GOP_Init_Ctx(pInstance,&bFirstInstance);
6599*53ee8cc1Swenshuai.xi APIGOP_ASSERT(resCtxInit, GOP_M_FATAL("failed to init GOP context\n"));
6600*53ee8cc1Swenshuai.xi bFirstInit = FALSE;
6601*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bDummyInit)
6602*53ee8cc1Swenshuai.xi {
6603*53ee8cc1Swenshuai.xi //other GOP init should work as the first instance flow
6604*53ee8cc1Swenshuai.xi bFirstInstance = TRUE;
6605*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bInitShared = TRUE;
6606*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bDummyInit = FALSE;
6607*53ee8cc1Swenshuai.xi }
6608*53ee8cc1Swenshuai.xi
6609*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,u8GOP))
6610*53ee8cc1Swenshuai.xi {
6611*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
6612*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6613*53ee8cc1Swenshuai.xi }
6614*53ee8cc1Swenshuai.xi
6615*53ee8cc1Swenshuai.xi //init GOP global variable
6616*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bInitShared)
6617*53ee8cc1Swenshuai.xi {
6618*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->Gwin_H_Dup = FALSE;
6619*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->Gwin_V_Dup = FALSE;
6620*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->current_winId = GOP0_Gwin0Id;
6621*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool1.GWinFB_Pool_BaseAddr = pGopInit->u32GOPRBAdr;
6622*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool1.u32GWinFB_Pool_MemLen = pGopInit->u32GOPRBLen;
6623*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool1.u32FirstFBIdInPool = INVALID_POOL_NEXT_FBID;
6624*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool1.poolId= GOP_WINFB_POOL1;
6625*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool2.GWinFB_Pool_BaseAddr = 0;
6626*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool2.u32GWinFB_Pool_MemLen = 0;
6627*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool2.u32FirstFBIdInPool = INVALID_POOL_NEXT_FBID;
6628*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fbPool2.poolId= GOP_WINFB_POOL2;
6629*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->fb_currentPoolId = GOP_WINFB_POOL1;
6630*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->phyGOPRegdmaAdr = pGopInit->u32GOPRegdmaAdr;
6631*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u32GOPRegdmaLen = pGopInit->u32GOPRegdmaLen;
6632*53ee8cc1Swenshuai.xi }
6633*53ee8cc1Swenshuai.xi
6634*53ee8cc1Swenshuai.xi if(pGopInit->bEnableVsyncIntFlip == TRUE)
6635*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bEnableVsyncIntFlip = TRUE;
6636*53ee8cc1Swenshuai.xi
6637*53ee8cc1Swenshuai.xi if (MDrv_GOP_SetIOMapBase(g_pGOPCtxLocal) != TRUE)
6638*53ee8cc1Swenshuai.xi {
6639*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\nget IO base fail"));
6640*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6641*53ee8cc1Swenshuai.xi }
6642*53ee8cc1Swenshuai.xi
6643*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8GOP] = pGopInit->u16PanelWidth;
6644*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8GOP] = pGopInit->u16PanelHeight;
6645*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[u8GOP] = pGopInit->u16PanelHStr;
6646*53ee8cc1Swenshuai.xi
6647*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ForceWrite_Update(g_pGOPCtxLocal, u8GOP, TRUE);//if use double buffer write in GOP init state, GOP HW cannot wait V-Sync to update register
6648*53ee8cc1Swenshuai.xi
6649*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGOPCtxShared->bInitShared)
6650*53ee8cc1Swenshuai.xi {
6651*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_MUX))
6652*53ee8cc1Swenshuai.xi MDrv_GOP_InitMux(g_pGOPCtxLocal);
6653*53ee8cc1Swenshuai.xi }
6654*53ee8cc1Swenshuai.xi if(FALSE == g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[u8GOP])
6655*53ee8cc1Swenshuai.xi {
6656*53ee8cc1Swenshuai.xi
6657*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bPixelModeSupport)
6658*53ee8cc1Swenshuai.xi {
6659*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bPixelMode[u8GOP] = TRUE;
6660*53ee8cc1Swenshuai.xi }
6661*53ee8cc1Swenshuai.xi //Not initialized yet:
6662*53ee8cc1Swenshuai.xi GOP_GWIN_InitByGOP(pInstance,bFirstInstance, u8GOP);
6663*53ee8cc1Swenshuai.xi
6664*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_GWIN))
6665*53ee8cc1Swenshuai.xi MDrv_GOP_Init(g_pGOPCtxLocal, u8GOP, pGopInit->u32GOPRegdmaAdr, pGopInit->u32GOPRegdmaLen, pGopInit->bEnableVsyncIntFlip);
6666*53ee8cc1Swenshuai.xi #if (FPGA_TEST)
6667*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
6668*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetDstPlane(g_pGOPCtxLocal, u8GOP, E_DRV_GOP_DST_VOP,FALSE);
6669*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetStretchWin(u8GOP, E_GOP_DST_VOP,0, 0, g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth, g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight) ;
6670*53ee8cc1Swenshuai.xi
6671*53ee8cc1Swenshuai.xi (_GOP_Map_APIDst2DRV_Enum(pInstance,E_GOP_DST_VOP, &GopDst));
6672*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPClk(g_pGOPCtxLocal, u8GOP, E_GOP_DST_VOP);
6673*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP,DRV_GOPOUT_RGB);
6674*53ee8cc1Swenshuai.xi #else
6675*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_SET_DST_OP))
6676*53ee8cc1Swenshuai.xi {
6677*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
6678*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal,u8GOP,TRUE);
6679*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetDstPlane(g_pGOPCtxLocal, u8GOP, E_DRV_GOP_DST_OP0,FALSE);
6680*53ee8cc1Swenshuai.xi (_GOP_Map_APIDst2DRV_Enum(pInstance,E_GOP_DST_OP0, &GopDst));
6681*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPClk(g_pGOPCtxLocal, u8GOP, GopDst);
6682*53ee8cc1Swenshuai.xi }
6683*53ee8cc1Swenshuai.xi
6684*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_STRETCHWIN))
6685*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetStretchWin(g_pGOPCtxLocal,u8GOP,0, 0, g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8GOP], g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8GOP]) ;
6686*53ee8cc1Swenshuai.xi #endif
6687*53ee8cc1Swenshuai.xi if (u8GOP==0)
6688*53ee8cc1Swenshuai.xi {
6689*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP0);
6690*53ee8cc1Swenshuai.xi }
6691*53ee8cc1Swenshuai.xi else if (u8GOP==1)
6692*53ee8cc1Swenshuai.xi {
6693*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP1);
6694*53ee8cc1Swenshuai.xi }
6695*53ee8cc1Swenshuai.xi else if (u8GOP==2)
6696*53ee8cc1Swenshuai.xi {
6697*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP2);
6698*53ee8cc1Swenshuai.xi }
6699*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_ENABLE_TRANSCLR))
6700*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableTransClr(g_pGOPCtxLocal,u8GOP, (GOP_TransClrFmt)0, FALSE);
6701*53ee8cc1Swenshuai.xi
6702*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGopChipProperty->bInitNotEnableGOPToSC) //u4 mux init setting, enable GOP to SC in GOP init would cause problem
6703*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, TRUE);
6704*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_GWIN))
6705*53ee8cc1Swenshuai.xi {
6706*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[u8GOP] = TRUE;
6707*53ee8cc1Swenshuai.xi }
6708*53ee8cc1Swenshuai.xi }
6709*53ee8cc1Swenshuai.xi
6710*53ee8cc1Swenshuai.xi MDrv_GOP_PerClientInit(g_pGOPCtxLocal, u8GOP, pGopInit->u32GOPRegdmaAdr, pGopInit->u32GOPRegdmaLen, pGopInit->bEnableVsyncIntFlip);
6711*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP); //Fix me, temporary solution for removing calling of "MApi_GOP_GWIN_OutputLayerSwitch"
6712*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_IGNORE_PALETTE))
6713*53ee8cc1Swenshuai.xi {
6714*53ee8cc1Swenshuai.xi pPalArray = malloc(sizeof(DRV_GopPaletteEntry)*256);
6715*53ee8cc1Swenshuai.xi if(pPalArray != NULL)
6716*53ee8cc1Swenshuai.xi {
6717*53ee8cc1Swenshuai.xi for (u8Idx=0; u8Idx<256; u8Idx++)
6718*53ee8cc1Swenshuai.xi {
6719*53ee8cc1Swenshuai.xi pPalArray[u8Idx].RGB.u8A = pPalArray[u8Idx].RGB.u8R = pPalArray[u8Idx].RGB.u8G = pPalArray[u8Idx].RGB.u8B = 0;
6720*53ee8cc1Swenshuai.xi }
6721*53ee8cc1Swenshuai.xi
6722*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetPaletteOpt(g_pGOPCtxLocal,u8GOP, pPalArray, 0, 255, E_DRV_GOP_PAL_ARGB8888);
6723*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_2GSetPaletteOpt(g_pGOPCtxLocal,u8GOP, pPalArray, 0, 255);
6724*53ee8cc1Swenshuai.xi //MApi_GOP_GWIN_SetPalette();
6725*53ee8cc1Swenshuai.xi
6726*53ee8cc1Swenshuai.xi if(pPalArray != NULL)
6727*53ee8cc1Swenshuai.xi {
6728*53ee8cc1Swenshuai.xi free(pPalArray);
6729*53ee8cc1Swenshuai.xi pPalArray = NULL;
6730*53ee8cc1Swenshuai.xi }
6731*53ee8cc1Swenshuai.xi }
6732*53ee8cc1Swenshuai.xi else
6733*53ee8cc1Swenshuai.xi {
6734*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("[%s][%d]Error!! malloc fail, pPalArray[256]\n", __FUNCTION__, __LINE__));
6735*53ee8cc1Swenshuai.xi }
6736*53ee8cc1Swenshuai.xi }
6737*53ee8cc1Swenshuai.xi
6738*53ee8cc1Swenshuai.xi if(bFirstInstance)
6739*53ee8cc1Swenshuai.xi {
6740*53ee8cc1Swenshuai.xi MDrv_GOP_SetVOPNBL(g_pGOPCtxLocal,FALSE);
6741*53ee8cc1Swenshuai.xi }
6742*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ForceWrite_Update(g_pGOPCtxLocal, u8GOP, FALSE);
6743*53ee8cc1Swenshuai.xi }
6744*53ee8cc1Swenshuai.xi
6745*53ee8cc1Swenshuai.xi //restore force write setting
6746*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetForceWrite(g_pGOPCtxLocal, g_pGOPCtxLocal->bInitFWR);
6747*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetBnkForceWrite(g_pGOPCtxLocal,u8GOP,bInitBkFWR[u8GOP]);
6748*53ee8cc1Swenshuai.xi // apiGOP_DBG("[OUT]\n");
6749*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
6750*53ee8cc1Swenshuai.xi }
6751*53ee8cc1Swenshuai.xi
6752*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetCaps(void * pInstance,EN_GOP_CAPS eCapType,MS_U32 * pRet,MS_U32 ret_size)6753*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetCaps(void* pInstance,EN_GOP_CAPS eCapType, MS_U32* pRet, MS_U32 ret_size)
6754*53ee8cc1Swenshuai.xi {
6755*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6756*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6757*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6758*53ee8cc1Swenshuai.xi #endif
6759*53ee8cc1Swenshuai.xi
6760*53ee8cc1Swenshuai.xi if(eCapType != E_GOP_CAP_VERSION)
6761*53ee8cc1Swenshuai.xi APIGOP_CHECK_INIT();
6762*53ee8cc1Swenshuai.xi
6763*53ee8cc1Swenshuai.xi E_GOP_API_Result enRet = GOP_API_SUCCESS;
6764*53ee8cc1Swenshuai.xi switch(eCapType)
6765*53ee8cc1Swenshuai.xi {
6766*53ee8cc1Swenshuai.xi case E_GOP_CAP_WORD_UNIT:
6767*53ee8cc1Swenshuai.xi {
6768*53ee8cc1Swenshuai.xi *((MS_U16 *)pRet) = g_pGOPCtxLocal->pGopChipProperty->WordUnit;
6769*53ee8cc1Swenshuai.xi break;
6770*53ee8cc1Swenshuai.xi }
6771*53ee8cc1Swenshuai.xi case E_GOP_CAP_GWIN_NUM:
6772*53ee8cc1Swenshuai.xi {
6773*53ee8cc1Swenshuai.xi *pRet = g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum;
6774*53ee8cc1Swenshuai.xi break;
6775*53ee8cc1Swenshuai.xi }
6776*53ee8cc1Swenshuai.xi case E_GOP_CAP_VERSION:
6777*53ee8cc1Swenshuai.xi {
6778*53ee8cc1Swenshuai.xi char ver[] = MSIF_GOP_LIBVER;
6779*53ee8cc1Swenshuai.xi char blnum[] = MSIF_GOP_BUILDNUM;
6780*53ee8cc1Swenshuai.xi char cl[] = MSIF_GOP_CHANGELIST;
6781*53ee8cc1Swenshuai.xi GOP_LIB_VER * pLibVer;
6782*53ee8cc1Swenshuai.xi
6783*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
6784*53ee8cc1Swenshuai.xi if(ret_size != sizeof(GOP_LIB_VER))
6785*53ee8cc1Swenshuai.xi {
6786*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] ERROR, invalid input structure size :%td on E_GOP_CAP_VERSION\n",__FUNCTION__,(ptrdiff_t)ret_size);
6787*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6788*53ee8cc1Swenshuai.xi }
6789*53ee8cc1Swenshuai.xi #endif
6790*53ee8cc1Swenshuai.xi pLibVer = (GOP_LIB_VER *)pRet;
6791*53ee8cc1Swenshuai.xi
6792*53ee8cc1Swenshuai.xi pLibVer->GOP_LibVer = atoi(ver);
6793*53ee8cc1Swenshuai.xi pLibVer->GOP_BuildNum = atoi(blnum);
6794*53ee8cc1Swenshuai.xi pLibVer->GOP_ChangeList = atoi(cl);
6795*53ee8cc1Swenshuai.xi
6796*53ee8cc1Swenshuai.xi break;
6797*53ee8cc1Swenshuai.xi }
6798*53ee8cc1Swenshuai.xi case E_GOP_CAP_CONSALPHA_VALIDBITS:
6799*53ee8cc1Swenshuai.xi {
6800*53ee8cc1Swenshuai.xi *pRet = g_pGOPCtxLocal->pGopChipProperty->Default_ConsAlpha_bits;
6801*53ee8cc1Swenshuai.xi break;
6802*53ee8cc1Swenshuai.xi }
6803*53ee8cc1Swenshuai.xi case E_GOP_CAP_PALETTE:
6804*53ee8cc1Swenshuai.xi {
6805*53ee8cc1Swenshuai.xi MS_U32 i;
6806*53ee8cc1Swenshuai.xi MS_U16 tmp;
6807*53ee8cc1Swenshuai.xi GOP_CAP_PAL_TYPE* pPal;
6808*53ee8cc1Swenshuai.xi
6809*53ee8cc1Swenshuai.xi pPal = (GOP_CAP_PAL_TYPE *)pRet;
6810*53ee8cc1Swenshuai.xi memset(pPal,0,sizeof(GOP_CAP_PAL_TYPE));
6811*53ee8cc1Swenshuai.xi
6812*53ee8cc1Swenshuai.xi for(i=0;i< _GOP_GetMaxGOPNum(pInstance);i++)
6813*53ee8cc1Swenshuai.xi {
6814*53ee8cc1Swenshuai.xi tmp = MDrv_GOP_GetRegForm(g_pGOPCtxLocal,i,0xff);
6815*53ee8cc1Swenshuai.xi if(tmp & E_GOP_CAP_PAL_SIZE_MASK)
6816*53ee8cc1Swenshuai.xi {
6817*53ee8cc1Swenshuai.xi pPal->GOP_NumOfTbl++;
6818*53ee8cc1Swenshuai.xi pPal->GOP_PalTbl[i] = tmp & E_GOP_CAP_PAL_SIZE_MASK ;
6819*53ee8cc1Swenshuai.xi pPal->GOP_PalTblIdx |= 1<<i;
6820*53ee8cc1Swenshuai.xi }
6821*53ee8cc1Swenshuai.xi }
6822*53ee8cc1Swenshuai.xi
6823*53ee8cc1Swenshuai.xi break;
6824*53ee8cc1Swenshuai.xi }
6825*53ee8cc1Swenshuai.xi case E_GOP_CAP_DWIN:
6826*53ee8cc1Swenshuai.xi {
6827*53ee8cc1Swenshuai.xi PGOP_DWIN_CAP pDwinCap;
6828*53ee8cc1Swenshuai.xi pDwinCap = (PGOP_DWIN_CAP)pRet;
6829*53ee8cc1Swenshuai.xi Mdrv_GOP_GetDWinCapability(g_pGOPCtxLocal, (PDRV_GOP_DWIN_CAP)pDwinCap);
6830*53ee8cc1Swenshuai.xi break;
6831*53ee8cc1Swenshuai.xi }
6832*53ee8cc1Swenshuai.xi case E_GOP_CAP_GOP_MUX:
6833*53ee8cc1Swenshuai.xi {
6834*53ee8cc1Swenshuai.xi if(pRet != NULL)
6835*53ee8cc1Swenshuai.xi {
6836*53ee8cc1Swenshuai.xi PST_DRV_GOP_MUX_CAP_EX pstDrvMuxCapEx = (PST_DRV_GOP_MUX_CAP_EX)(void*)pRet;
6837*53ee8cc1Swenshuai.xi if(Mdrv_GOP_GetMuxPriority(g_pGOPCtxLocal, (PST_DRV_GOP_MUX_CAP_EX)pstDrvMuxCapEx))
6838*53ee8cc1Swenshuai.xi {
6839*53ee8cc1Swenshuai.xi pstDrvMuxCapEx->bNeedSetMUX1ToIP0 = g_pGOPCtxLocal->pGopChipProperty->bNeedSetMUX1ToIP0;
6840*53ee8cc1Swenshuai.xi pstDrvMuxCapEx->bNeedSetMUX3ToIP0 = g_pGOPCtxLocal->pGopChipProperty->bNeedSetMUX3ToIP0;
6841*53ee8cc1Swenshuai.xi pstDrvMuxCapEx->bNewMux = g_pGOPCtxLocal->pGopChipProperty->bNewMux;
6842*53ee8cc1Swenshuai.xi }
6843*53ee8cc1Swenshuai.xi else
6844*53ee8cc1Swenshuai.xi {
6845*53ee8cc1Swenshuai.xi enRet = GOP_API_FAIL;
6846*53ee8cc1Swenshuai.xi }
6847*53ee8cc1Swenshuai.xi }
6848*53ee8cc1Swenshuai.xi else
6849*53ee8cc1Swenshuai.xi {
6850*53ee8cc1Swenshuai.xi APIGOP_ASSERT(0, GOP_M_FATAL("Invalid input parameter: NULL pointer\n"));
6851*53ee8cc1Swenshuai.xi }
6852*53ee8cc1Swenshuai.xi
6853*53ee8cc1Swenshuai.xi break;
6854*53ee8cc1Swenshuai.xi }
6855*53ee8cc1Swenshuai.xi case E_GOP_CAP_PIXELMODE_SUPPORT:
6856*53ee8cc1Swenshuai.xi {
6857*53ee8cc1Swenshuai.xi *pRet = g_pGOPCtxLocal->pGopChipProperty->bPixelModeSupport;
6858*53ee8cc1Swenshuai.xi break;
6859*53ee8cc1Swenshuai.xi }
6860*53ee8cc1Swenshuai.xi case E_GOP_CAP_STRETCH:
6861*53ee8cc1Swenshuai.xi {
6862*53ee8cc1Swenshuai.xi if(pRet != NULL)
6863*53ee8cc1Swenshuai.xi {
6864*53ee8cc1Swenshuai.xi MS_U8 i;
6865*53ee8cc1Swenshuai.xi PGOP_CAP_STRETCH_INFO pGOPStretchInfo= (PGOP_CAP_STRETCH_INFO)pRet;
6866*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
6867*53ee8cc1Swenshuai.xi if(ret_size != sizeof(GOP_CAP_STRETCH_INFO))
6868*53ee8cc1Swenshuai.xi {
6869*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] ERROR, invalid input structure size :%td on E_GOP_CAP_STRETCH\n",__FUNCTION__,(ptrdiff_t)ret_size);
6870*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6871*53ee8cc1Swenshuai.xi }
6872*53ee8cc1Swenshuai.xi #endif
6873*53ee8cc1Swenshuai.xi pGOPStretchInfo->GOP_VStretch_Support=0;
6874*53ee8cc1Swenshuai.xi for(i=0;i<MIN(sizeof(g_pGOPCtxLocal->pGopChipProperty->bGOPWithVscale),(sizeof(pGOPStretchInfo->GOP_VStretch_Support)*8));i++)
6875*53ee8cc1Swenshuai.xi {
6876*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bGOPWithVscale[i])
6877*53ee8cc1Swenshuai.xi {
6878*53ee8cc1Swenshuai.xi pGOPStretchInfo->GOP_VStretch_Support |= BIT(i);
6879*53ee8cc1Swenshuai.xi }
6880*53ee8cc1Swenshuai.xi else
6881*53ee8cc1Swenshuai.xi {
6882*53ee8cc1Swenshuai.xi pGOPStretchInfo->GOP_VStretch_Support &= ~(BIT(i));
6883*53ee8cc1Swenshuai.xi }
6884*53ee8cc1Swenshuai.xi }
6885*53ee8cc1Swenshuai.xi }
6886*53ee8cc1Swenshuai.xi else
6887*53ee8cc1Swenshuai.xi {
6888*53ee8cc1Swenshuai.xi APIGOP_ASSERT(0, GOP_M_FATAL("Invalid input parameter: NULL pointer\n"));
6889*53ee8cc1Swenshuai.xi }
6890*53ee8cc1Swenshuai.xi break;
6891*53ee8cc1Swenshuai.xi }
6892*53ee8cc1Swenshuai.xi case E_GOP_CAP_TLBMODE_SUPPORT:
6893*53ee8cc1Swenshuai.xi {
6894*53ee8cc1Swenshuai.xi if(pRet != NULL)
6895*53ee8cc1Swenshuai.xi {
6896*53ee8cc1Swenshuai.xi MS_U8 i;
6897*53ee8cc1Swenshuai.xi PGOP_CAP_TLB_INFO pGOPTLBInfo= (PGOP_CAP_TLB_INFO)pRet;
6898*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
6899*53ee8cc1Swenshuai.xi if(ret_size != sizeof(GOP_CAP_TLB_INFO))
6900*53ee8cc1Swenshuai.xi {
6901*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] ERROR, invalid input structure size :%td on E_GOP_CAP_TLBMODE_SUPPORT\n",__FUNCTION__,(ptrdiff_t)ret_size);
6902*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6903*53ee8cc1Swenshuai.xi }
6904*53ee8cc1Swenshuai.xi #endif
6905*53ee8cc1Swenshuai.xi pGOPTLBInfo->GOP_TLB_Support=0;
6906*53ee8cc1Swenshuai.xi for(i=0; i < MAX_GOP_SUPPORT; i++)
6907*53ee8cc1Swenshuai.xi {
6908*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bTLBSupport[i])
6909*53ee8cc1Swenshuai.xi {
6910*53ee8cc1Swenshuai.xi pGOPTLBInfo->GOP_TLB_Support |= BIT(i);
6911*53ee8cc1Swenshuai.xi }
6912*53ee8cc1Swenshuai.xi else
6913*53ee8cc1Swenshuai.xi {
6914*53ee8cc1Swenshuai.xi pGOPTLBInfo->GOP_TLB_Support &= ~(BIT(i));
6915*53ee8cc1Swenshuai.xi }
6916*53ee8cc1Swenshuai.xi }
6917*53ee8cc1Swenshuai.xi }
6918*53ee8cc1Swenshuai.xi else
6919*53ee8cc1Swenshuai.xi {
6920*53ee8cc1Swenshuai.xi APIGOP_ASSERT(0, GOP_M_FATAL("Invalid input parameter: NULL pointer\n"));
6921*53ee8cc1Swenshuai.xi }
6922*53ee8cc1Swenshuai.xi break;
6923*53ee8cc1Swenshuai.xi }
6924*53ee8cc1Swenshuai.xi case E_GOP_CAP_AFBC_SUPPORT:
6925*53ee8cc1Swenshuai.xi {
6926*53ee8cc1Swenshuai.xi if(pRet != NULL)
6927*53ee8cc1Swenshuai.xi {
6928*53ee8cc1Swenshuai.xi MS_U8 i;
6929*53ee8cc1Swenshuai.xi PGOP_CAP_AFBC_INFO pGOPAFBCInfo= (PGOP_CAP_AFBC_INFO)pRet;
6930*53ee8cc1Swenshuai.xi if(ret_size != sizeof(GOP_CAP_AFBC_INFO))
6931*53ee8cc1Swenshuai.xi {
6932*53ee8cc1Swenshuai.xi printf("[%s] ERROR, invalid input structure size :%td on E_GOP_CAP_AFBC_MODE_SUPPORT\n",__FUNCTION__,(ptrdiff_t)ret_size);
6933*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
6934*53ee8cc1Swenshuai.xi }
6935*53ee8cc1Swenshuai.xi pGOPAFBCInfo->GOP_AFBC_Support=0;
6936*53ee8cc1Swenshuai.xi for(i=0; i < MAX_GOP_SUPPORT; i++)
6937*53ee8cc1Swenshuai.xi {
6938*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bAFBC_Support[i])
6939*53ee8cc1Swenshuai.xi {
6940*53ee8cc1Swenshuai.xi pGOPAFBCInfo->GOP_AFBC_Support |= BIT(i);
6941*53ee8cc1Swenshuai.xi }
6942*53ee8cc1Swenshuai.xi else
6943*53ee8cc1Swenshuai.xi {
6944*53ee8cc1Swenshuai.xi pGOPAFBCInfo->GOP_AFBC_Support &= ~(BIT(i));
6945*53ee8cc1Swenshuai.xi }
6946*53ee8cc1Swenshuai.xi }
6947*53ee8cc1Swenshuai.xi }
6948*53ee8cc1Swenshuai.xi else
6949*53ee8cc1Swenshuai.xi {
6950*53ee8cc1Swenshuai.xi APIGOP_ASSERT(0, printf("Invalid input parameter: NULL pointer\n"));
6951*53ee8cc1Swenshuai.xi }
6952*53ee8cc1Swenshuai.xi break;
6953*53ee8cc1Swenshuai.xi }
6954*53ee8cc1Swenshuai.xi case E_GOP_CAP_BNKFORCEWRITE:
6955*53ee8cc1Swenshuai.xi {
6956*53ee8cc1Swenshuai.xi *pRet = g_pGOPCtxLocal->pGopChipProperty->bBnkForceWrite;
6957*53ee8cc1Swenshuai.xi break;
6958*53ee8cc1Swenshuai.xi }
6959*53ee8cc1Swenshuai.xi default:
6960*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s]not support GOP capability case: %d\n",__FUNCTION__, eCapType);
6961*53ee8cc1Swenshuai.xi enRet = GOP_API_FAIL;
6962*53ee8cc1Swenshuai.xi }
6963*53ee8cc1Swenshuai.xi
6964*53ee8cc1Swenshuai.xi return enRet;
6965*53ee8cc1Swenshuai.xi }
6966*53ee8cc1Swenshuai.xi
6967*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetConfig(void * pInstance,EN_GOP_CONFIG_TYPE cfg_type,MS_U32 * pCfg,MS_U32 u32Size)6968*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetConfig(void* pInstance,EN_GOP_CONFIG_TYPE cfg_type,MS_U32* pCfg,MS_U32 u32Size)
6969*53ee8cc1Swenshuai.xi {
6970*53ee8cc1Swenshuai.xi MS_BOOL bFirstInstance;
6971*53ee8cc1Swenshuai.xi MS_BOOL resCtxInit;
6972*53ee8cc1Swenshuai.xi EN_GOP_IGNOREINIT *pGOPIgnoreInit;
6973*53ee8cc1Swenshuai.xi DRV_GOP_CONSALPHA_BITS *pGOPAlphaBits;
6974*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
6975*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
6976*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
6977*53ee8cc1Swenshuai.xi #endif
6978*53ee8cc1Swenshuai.xi
6979*53ee8cc1Swenshuai.xi switch(cfg_type)
6980*53ee8cc1Swenshuai.xi {
6981*53ee8cc1Swenshuai.xi case E_GOP_IGNOREINIT:
6982*53ee8cc1Swenshuai.xi resCtxInit = GOP_PreInit_Ctx(pInstance,&bFirstInstance);
6983*53ee8cc1Swenshuai.xi APIGOP_ASSERT(resCtxInit, GOP_M_FATAL("failed to init GOP context\n"));
6984*53ee8cc1Swenshuai.xi
6985*53ee8cc1Swenshuai.xi pGOPIgnoreInit = (EN_GOP_IGNOREINIT *)(pCfg);
6986*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit = (DRV_GOP_IGNOREINIT)(*pGOPIgnoreInit);
6987*53ee8cc1Swenshuai.xi /*To control that do not affect the normal flow in MApi_GOP_Init and MApi_GOP_InitByGOP*/
6988*53ee8cc1Swenshuai.xi if(E_GOP_IGNORE_DISABLE != *pGOPIgnoreInit)
6989*53ee8cc1Swenshuai.xi {
6990*53ee8cc1Swenshuai.xi bFirstInit = TRUE;
6991*53ee8cc1Swenshuai.xi }
6992*53ee8cc1Swenshuai.xi break;
6993*53ee8cc1Swenshuai.xi case E_GOP_CONSALPHA_BITS:
6994*53ee8cc1Swenshuai.xi
6995*53ee8cc1Swenshuai.xi
6996*53ee8cc1Swenshuai.xi pGOPAlphaBits = (DRV_GOP_CONSALPHA_BITS *)(pCfg);
6997*53ee8cc1Swenshuai.xi *(g_pGOPCtxLocal->pGopConsAlphaBits) = *pGOPAlphaBits;
6998*53ee8cc1Swenshuai.xi break;
6999*53ee8cc1Swenshuai.xi default:
7000*53ee8cc1Swenshuai.xi
7001*53ee8cc1Swenshuai.xi break;
7002*53ee8cc1Swenshuai.xi }
7003*53ee8cc1Swenshuai.xi
7004*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
7005*53ee8cc1Swenshuai.xi
7006*53ee8cc1Swenshuai.xi
7007*53ee8cc1Swenshuai.xi
7008*53ee8cc1Swenshuai.xi
7009*53ee8cc1Swenshuai.xi }
7010*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetConfig(void * pInstance,EN_GOP_CONFIG_TYPE cfg_type,MS_U32 * pCfg,MS_U32 u32Size)7011*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetConfig(void* pInstance,EN_GOP_CONFIG_TYPE cfg_type,MS_U32* pCfg,MS_U32 u32Size)
7012*53ee8cc1Swenshuai.xi {
7013*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
7014*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
7015*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
7016*53ee8cc1Swenshuai.xi #endif
7017*53ee8cc1Swenshuai.xi
7018*53ee8cc1Swenshuai.xi switch(cfg_type)
7019*53ee8cc1Swenshuai.xi {
7020*53ee8cc1Swenshuai.xi case E_GOP_IGNOREINIT:
7021*53ee8cc1Swenshuai.xi {
7022*53ee8cc1Swenshuai.xi EN_GOP_IGNOREINIT *penGOPIgnoreInit;
7023*53ee8cc1Swenshuai.xi penGOPIgnoreInit = (EN_GOP_IGNOREINIT*)pCfg;
7024*53ee8cc1Swenshuai.xi *penGOPIgnoreInit = (EN_GOP_IGNOREINIT)g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit;
7025*53ee8cc1Swenshuai.xi break;
7026*53ee8cc1Swenshuai.xi }
7027*53ee8cc1Swenshuai.xi case E_GOP_CONSALPHA_BITS:
7028*53ee8cc1Swenshuai.xi {
7029*53ee8cc1Swenshuai.xi DRV_GOP_CONSALPHA_BITS *penGOPAlphaBits;
7030*53ee8cc1Swenshuai.xi penGOPAlphaBits = (DRV_GOP_CONSALPHA_BITS *)pCfg;
7031*53ee8cc1Swenshuai.xi penGOPAlphaBits = g_pGOPCtxLocal->pGopConsAlphaBits;
7032*53ee8cc1Swenshuai.xi break;
7033*53ee8cc1Swenshuai.xi }
7034*53ee8cc1Swenshuai.xi default:
7035*53ee8cc1Swenshuai.xi
7036*53ee8cc1Swenshuai.xi break;
7037*53ee8cc1Swenshuai.xi }
7038*53ee8cc1Swenshuai.xi
7039*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
7040*53ee8cc1Swenshuai.xi }
7041*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetProperty(void * pInstance,EN_GOP_PROPERTY type,MS_U32 gop,MS_U32 * pSet,MS_U32 u32Size)7042*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetProperty(void* pInstance,EN_GOP_PROPERTY type,MS_U32 gop, MS_U32* pSet, MS_U32 u32Size)
7043*53ee8cc1Swenshuai.xi {
7044*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
7045*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
7046*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
7047*53ee8cc1Swenshuai.xi #endif
7048*53ee8cc1Swenshuai.xi
7049*53ee8cc1Swenshuai.xi switch(type)
7050*53ee8cc1Swenshuai.xi {
7051*53ee8cc1Swenshuai.xi case E_GOP_MIUSEL:
7052*53ee8cc1Swenshuai.xi {
7053*53ee8cc1Swenshuai.xi E_DRV_GOP_SEL_TYPE miusel;
7054*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_SEL_TYPE))
7055*53ee8cc1Swenshuai.xi {
7056*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7057*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7058*53ee8cc1Swenshuai.xi }
7059*53ee8cc1Swenshuai.xi
7060*53ee8cc1Swenshuai.xi miusel = (E_DRV_GOP_SEL_TYPE)*pSet;
7061*53ee8cc1Swenshuai.xi GOP_MIUSel(pInstance,gop,(EN_GOP_SEL_TYPE)miusel);
7062*53ee8cc1Swenshuai.xi
7063*53ee8cc1Swenshuai.xi break;
7064*53ee8cc1Swenshuai.xi }
7065*53ee8cc1Swenshuai.xi case E_GOP_CONTRAST:
7066*53ee8cc1Swenshuai.xi {
7067*53ee8cc1Swenshuai.xi PGOP_CONTRAST pRGB = (PGOP_CONTRAST)pSet;
7068*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_CONTRAST))
7069*53ee8cc1Swenshuai.xi {
7070*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7071*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7072*53ee8cc1Swenshuai.xi }
7073*53ee8cc1Swenshuai.xi
7074*53ee8cc1Swenshuai.xi GOP_SetContrast(pInstance,gop,pRGB->y, pRGB->u, pRGB->v);
7075*53ee8cc1Swenshuai.xi
7076*53ee8cc1Swenshuai.xi
7077*53ee8cc1Swenshuai.xi break;
7078*53ee8cc1Swenshuai.xi }
7079*53ee8cc1Swenshuai.xi case E_GOP_BRIGHTNESS:
7080*53ee8cc1Swenshuai.xi {
7081*53ee8cc1Swenshuai.xi PGOP_BRIGHTNESS pBri = (PGOP_BRIGHTNESS)pSet;
7082*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_BRIGHTNESS))
7083*53ee8cc1Swenshuai.xi {
7084*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7085*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7086*53ee8cc1Swenshuai.xi }
7087*53ee8cc1Swenshuai.xi
7088*53ee8cc1Swenshuai.xi GOP_SetBrightness(pInstance,gop,pBri->Brightness, pBri->bMSB);
7089*53ee8cc1Swenshuai.xi break;
7090*53ee8cc1Swenshuai.xi }
7091*53ee8cc1Swenshuai.xi case E_GOP_OUTPUT_COLOR:
7092*53ee8cc1Swenshuai.xi {
7093*53ee8cc1Swenshuai.xi EN_GOP_OUTPUT_COLOR output;
7094*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_OUTPUT_COLOR))
7095*53ee8cc1Swenshuai.xi {
7096*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7097*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7098*53ee8cc1Swenshuai.xi }
7099*53ee8cc1Swenshuai.xi
7100*53ee8cc1Swenshuai.xi output = (EN_GOP_OUTPUT_COLOR)*pSet;
7101*53ee8cc1Swenshuai.xi GOP_SetOutputColor(pInstance,gop,output);
7102*53ee8cc1Swenshuai.xi
7103*53ee8cc1Swenshuai.xi break;
7104*53ee8cc1Swenshuai.xi
7105*53ee8cc1Swenshuai.xi }
7106*53ee8cc1Swenshuai.xi case E_GOP_UV_SWAP:
7107*53ee8cc1Swenshuai.xi {
7108*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7109*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7110*53ee8cc1Swenshuai.xi {
7111*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7112*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7113*53ee8cc1Swenshuai.xi }
7114*53ee8cc1Swenshuai.xi
7115*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7116*53ee8cc1Swenshuai.xi GOP_SetUVSwap(pInstance,gop,bEn);
7117*53ee8cc1Swenshuai.xi
7118*53ee8cc1Swenshuai.xi break;
7119*53ee8cc1Swenshuai.xi }
7120*53ee8cc1Swenshuai.xi case E_GOP_YC_SWAP:
7121*53ee8cc1Swenshuai.xi {
7122*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7123*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7124*53ee8cc1Swenshuai.xi {
7125*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7126*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7127*53ee8cc1Swenshuai.xi }
7128*53ee8cc1Swenshuai.xi
7129*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7130*53ee8cc1Swenshuai.xi GOP_SetYCSwap(pInstance,gop,bEn);
7131*53ee8cc1Swenshuai.xi
7132*53ee8cc1Swenshuai.xi break;
7133*53ee8cc1Swenshuai.xi }
7134*53ee8cc1Swenshuai.xi case E_GOP_HSTART:
7135*53ee8cc1Swenshuai.xi {
7136*53ee8cc1Swenshuai.xi MS_U16 u16PanelHStr;
7137*53ee8cc1Swenshuai.xi
7138*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U16))
7139*53ee8cc1Swenshuai.xi {
7140*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7141*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7142*53ee8cc1Swenshuai.xi }
7143*53ee8cc1Swenshuai.xi
7144*53ee8cc1Swenshuai.xi u16PanelHStr = (MS_U16)*pSet;
7145*53ee8cc1Swenshuai.xi GOP_SetHStart(pInstance,gop,u16PanelHStr);
7146*53ee8cc1Swenshuai.xi
7147*53ee8cc1Swenshuai.xi break;
7148*53ee8cc1Swenshuai.xi }
7149*53ee8cc1Swenshuai.xi case E_GOP_TRANSCOLOR:
7150*53ee8cc1Swenshuai.xi {
7151*53ee8cc1Swenshuai.xi PGOP_TRANSCOLOR ptrans_clr;
7152*53ee8cc1Swenshuai.xi MS_U32 clr;
7153*53ee8cc1Swenshuai.xi MS_U32 fullclr = 0;
7154*53ee8cc1Swenshuai.xi EN_GOP_TRANSCLR_FMT fmt;
7155*53ee8cc1Swenshuai.xi
7156*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_TRANSCOLOR))
7157*53ee8cc1Swenshuai.xi {
7158*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7159*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7160*53ee8cc1Swenshuai.xi }
7161*53ee8cc1Swenshuai.xi
7162*53ee8cc1Swenshuai.xi ptrans_clr = (PGOP_TRANSCOLOR)pSet;
7163*53ee8cc1Swenshuai.xi
7164*53ee8cc1Swenshuai.xi clr = ptrans_clr->color;
7165*53ee8cc1Swenshuai.xi fmt = ptrans_clr->fmt;
7166*53ee8cc1Swenshuai.xi
7167*53ee8cc1Swenshuai.xi if(ptrans_clr->transclr_property == EN_TRANSCLR_SET_COLOR)
7168*53ee8cc1Swenshuai.xi {
7169*53ee8cc1Swenshuai.xi if(fmt == GOPTRANSCLR_FMT0)
7170*53ee8cc1Swenshuai.xi {
7171*53ee8cc1Swenshuai.xi /***** !RGB555 *****/
7172*53ee8cc1Swenshuai.xi fullclr = ((clr>>10)&0x1f)<<3; // R
7173*53ee8cc1Swenshuai.xi fullclr |= ((clr>>12)&0x7);
7174*53ee8cc1Swenshuai.xi fullclr = fullclr << 8;
7175*53ee8cc1Swenshuai.xi fullclr |= ((clr>>5)&0x1f)<<3; // G
7176*53ee8cc1Swenshuai.xi fullclr |= ((clr>>7)&0x7);
7177*53ee8cc1Swenshuai.xi fullclr = fullclr << 8;
7178*53ee8cc1Swenshuai.xi fullclr |= (clr&0x1f)<<3; // B
7179*53ee8cc1Swenshuai.xi fullclr |= ((clr>>2)&0x7); // B
7180*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetTransClr_8888(g_pGOPCtxLocal,gop, fullclr, 0);
7181*53ee8cc1Swenshuai.xi }
7182*53ee8cc1Swenshuai.xi else if(fmt == GOPTRANSCLR_FMT1)
7183*53ee8cc1Swenshuai.xi {
7184*53ee8cc1Swenshuai.xi /***** index mode *****/
7185*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ReadPalette(g_pGOPCtxLocal,gop, clr, &fullclr);
7186*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetTransClr_8888(g_pGOPCtxLocal,gop, fullclr, 0);
7187*53ee8cc1Swenshuai.xi }
7188*53ee8cc1Swenshuai.xi else if(fmt == GOPTRANSCLR_FMT2) //ARGB8888
7189*53ee8cc1Swenshuai.xi {
7190*53ee8cc1Swenshuai.xi fullclr = ptrans_clr->color;
7191*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetTransClr_8888(g_pGOPCtxLocal,gop, fullclr, 0);
7192*53ee8cc1Swenshuai.xi }else if(fmt == GOPTRANSCLR_FMT3)
7193*53ee8cc1Swenshuai.xi {
7194*53ee8cc1Swenshuai.xi fullclr = (clr&0xff)<<16; //V
7195*53ee8cc1Swenshuai.xi fullclr |= ((clr>>8)&0xff)<<8; //Y
7196*53ee8cc1Swenshuai.xi fullclr |= ((clr>>16)&0xff); //U
7197*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetTransClr_YUV(g_pGOPCtxLocal, gop, fullclr, 0x0);
7198*53ee8cc1Swenshuai.xi }
7199*53ee8cc1Swenshuai.xi
7200*53ee8cc1Swenshuai.xi //MDrv_GOP_GWIN_SetTransClr_8888(g_pGOPCtxLocal,gop, fullclr, 0);
7201*53ee8cc1Swenshuai.xi }
7202*53ee8cc1Swenshuai.xi else if(ptrans_clr->transclr_property == EN_TRANSCLR_ENABLE)
7203*53ee8cc1Swenshuai.xi {
7204*53ee8cc1Swenshuai.xi //MDrv_GOP_GWIN_EnableTransClr(g_pGOPCtxLocal,gop, (GOP_TransClrFmt)GOPTRANSCLR_FMT0,ptrans_clr->bEn);
7205*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableTransClr(g_pGOPCtxLocal,gop, (GOP_TransClrFmt)fmt,ptrans_clr->bEn);
7206*53ee8cc1Swenshuai.xi if((fmt==GOPTRANSCLR_FMT0)&&((fmt != GOPTRANSCLR_FMT0)&&(fmt != GOPTRANSCLR_FMT2)))
7207*53ee8cc1Swenshuai.xi {
7208*53ee8cc1Swenshuai.xi printf("%s,Fail: GOPTRANSCLR FMT0 not Match Format\n",__FUNCTION__);
7209*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7210*53ee8cc1Swenshuai.xi }
7211*53ee8cc1Swenshuai.xi else if((fmt==GOPTRANSCLR_FMT1)&&(fmt != GOPTRANSCLR_FMT1))
7212*53ee8cc1Swenshuai.xi {
7213*53ee8cc1Swenshuai.xi printf("%s,Fail: GOPTRANSCLR FMT1 not Match Format\n",__FUNCTION__);
7214*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7215*53ee8cc1Swenshuai.xi }
7216*53ee8cc1Swenshuai.xi }
7217*53ee8cc1Swenshuai.xi break;
7218*53ee8cc1Swenshuai.xi
7219*53ee8cc1Swenshuai.xi }
7220*53ee8cc1Swenshuai.xi case E_GOP_PROGRESSIVE:
7221*53ee8cc1Swenshuai.xi {
7222*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7223*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7224*53ee8cc1Swenshuai.xi {
7225*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7226*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7227*53ee8cc1Swenshuai.xi }
7228*53ee8cc1Swenshuai.xi
7229*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7230*53ee8cc1Swenshuai.xi GOP_SetProgressive(pInstance,gop,bEn);
7231*53ee8cc1Swenshuai.xi break;
7232*53ee8cc1Swenshuai.xi }
7233*53ee8cc1Swenshuai.xi case E_GOP_ALPHAINVERSE:
7234*53ee8cc1Swenshuai.xi {
7235*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7236*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7237*53ee8cc1Swenshuai.xi {
7238*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7239*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7240*53ee8cc1Swenshuai.xi }
7241*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7242*53ee8cc1Swenshuai.xi GOP_SetAlphaInverse(pInstance,gop, bEn);
7243*53ee8cc1Swenshuai.xi break;
7244*53ee8cc1Swenshuai.xi }
7245*53ee8cc1Swenshuai.xi case E_GOP_PREALPHAMODE:
7246*53ee8cc1Swenshuai.xi {
7247*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7248*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7249*53ee8cc1Swenshuai.xi {
7250*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7251*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7252*53ee8cc1Swenshuai.xi }
7253*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7254*53ee8cc1Swenshuai.xi
7255*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2Mode1(g_pGOPCtxLocal, gop, bEn);
7256*53ee8cc1Swenshuai.xi
7257*53ee8cc1Swenshuai.xi break;
7258*53ee8cc1Swenshuai.xi }
7259*53ee8cc1Swenshuai.xi case E_GOP_FIELD_INVERSE:
7260*53ee8cc1Swenshuai.xi {
7261*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7262*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7263*53ee8cc1Swenshuai.xi {
7264*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7265*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7266*53ee8cc1Swenshuai.xi }
7267*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7268*53ee8cc1Swenshuai.xi
7269*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetFieldInver(g_pGOPCtxLocal,gop ,bEn);
7270*53ee8cc1Swenshuai.xi
7271*53ee8cc1Swenshuai.xi break;
7272*53ee8cc1Swenshuai.xi }
7273*53ee8cc1Swenshuai.xi case E_GOP_OUTPUT_TIMING:
7274*53ee8cc1Swenshuai.xi {
7275*53ee8cc1Swenshuai.xi PST_GOP_TIMING_INFO pstInfo;
7276*53ee8cc1Swenshuai.xi if(u32Size != sizeof(ST_GOP_TIMING_INFO))
7277*53ee8cc1Swenshuai.xi {
7278*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7279*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7280*53ee8cc1Swenshuai.xi }
7281*53ee8cc1Swenshuai.xi pstInfo = (PST_GOP_TIMING_INFO)pSet;
7282*53ee8cc1Swenshuai.xi GOP_SetPanelTiming(pInstance,gop, pstInfo);
7283*53ee8cc1Swenshuai.xi break;
7284*53ee8cc1Swenshuai.xi }
7285*53ee8cc1Swenshuai.xi case E_GOP_PIXELBASE_ENABLE:
7286*53ee8cc1Swenshuai.xi {
7287*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7288*53ee8cc1Swenshuai.xi {
7289*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7290*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7291*53ee8cc1Swenshuai.xi }
7292*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bPixelMode[gop]=(MS_BOOL)*pSet;
7293*53ee8cc1Swenshuai.xi break;
7294*53ee8cc1Swenshuai.xi }
7295*53ee8cc1Swenshuai.xi case E_GOP_CLK:
7296*53ee8cc1Swenshuai.xi {
7297*53ee8cc1Swenshuai.xi EN_GOP_DST_TYPE eDstType;
7298*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_DST_TYPE))
7299*53ee8cc1Swenshuai.xi {
7300*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7301*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7302*53ee8cc1Swenshuai.xi }
7303*53ee8cc1Swenshuai.xi eDstType = (EN_GOP_DST_TYPE)*pSet;
7304*53ee8cc1Swenshuai.xi GOP_SetGOPClk(pInstance,gop,eDstType);
7305*53ee8cc1Swenshuai.xi break;
7306*53ee8cc1Swenshuai.xi }
7307*53ee8cc1Swenshuai.xi case E_GOP_FORCE_WRITE:
7308*53ee8cc1Swenshuai.xi {
7309*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7310*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7311*53ee8cc1Swenshuai.xi {
7312*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7313*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7314*53ee8cc1Swenshuai.xi }
7315*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7316*53ee8cc1Swenshuai.xi GOP_GWIN_SetForceWrite(pInstance,bEn);
7317*53ee8cc1Swenshuai.xi break;
7318*53ee8cc1Swenshuai.xi }
7319*53ee8cc1Swenshuai.xi case E_GOP_BANK_FORCE_WRITE:
7320*53ee8cc1Swenshuai.xi {
7321*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7322*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7323*53ee8cc1Swenshuai.xi {
7324*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7325*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7326*53ee8cc1Swenshuai.xi }
7327*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7328*53ee8cc1Swenshuai.xi GOP_GWIN_SetBnkForceWrite(pInstance,gop,bEn);
7329*53ee8cc1Swenshuai.xi break;
7330*53ee8cc1Swenshuai.xi }
7331*53ee8cc1Swenshuai.xi case E_GOP_3D_LR_EXCHANGE:
7332*53ee8cc1Swenshuai.xi {
7333*53ee8cc1Swenshuai.xi GOP_Set3D_LR_FrameExchange(pInstance,gop);
7334*53ee8cc1Swenshuai.xi break;
7335*53ee8cc1Swenshuai.xi }
7336*53ee8cc1Swenshuai.xi case E_GOP_VE_OSD:
7337*53ee8cc1Swenshuai.xi {
7338*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7339*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7340*53ee8cc1Swenshuai.xi {
7341*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7342*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7343*53ee8cc1Swenshuai.xi }
7344*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7345*53ee8cc1Swenshuai.xi GOP_Enable_VEOSD(pInstance,gop,bEn);
7346*53ee8cc1Swenshuai.xi break;
7347*53ee8cc1Swenshuai.xi }
7348*53ee8cc1Swenshuai.xi case E_GOP_OUTPUT_LAYER_SWITCH:
7349*53ee8cc1Swenshuai.xi {
7350*53ee8cc1Swenshuai.xi GOP_OutputLayerSwitch(pInstance,gop);
7351*53ee8cc1Swenshuai.xi break;
7352*53ee8cc1Swenshuai.xi }
7353*53ee8cc1Swenshuai.xi case E_GOP_SWAP_OVERLAP_WIN:
7354*53ee8cc1Swenshuai.xi {
7355*53ee8cc1Swenshuai.xi MS_U8 u8win;
7356*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
7357*53ee8cc1Swenshuai.xi {
7358*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7359*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7360*53ee8cc1Swenshuai.xi }
7361*53ee8cc1Swenshuai.xi u8win = (MS_U8)*pSet;
7362*53ee8cc1Swenshuai.xi GOP_GWIN_SwapOverlapWin(pInstance,gop,u8win);
7363*53ee8cc1Swenshuai.xi break;
7364*53ee8cc1Swenshuai.xi }
7365*53ee8cc1Swenshuai.xi case E_GOP_BW_STRENGTH:
7366*53ee8cc1Swenshuai.xi {
7367*53ee8cc1Swenshuai.xi EN_GOP_BW_STRENGTH eGOPBWStr;
7368*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_BW_STRENGTH))
7369*53ee8cc1Swenshuai.xi {
7370*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7371*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7372*53ee8cc1Swenshuai.xi }
7373*53ee8cc1Swenshuai.xi eGOPBWStr = (EN_GOP_BW_STRENGTH)*pSet;
7374*53ee8cc1Swenshuai.xi GOP_SetGOPBWStrength(pInstance,eGOPBWStr,gop);
7375*53ee8cc1Swenshuai.xi break;
7376*53ee8cc1Swenshuai.xi }
7377*53ee8cc1Swenshuai.xi case E_GOP_LB_COUPLE:
7378*53ee8cc1Swenshuai.xi {
7379*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7380*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7381*53ee8cc1Swenshuai.xi {
7382*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7383*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7384*53ee8cc1Swenshuai.xi }
7385*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7386*53ee8cc1Swenshuai.xi GOP_EnableLBCouple(pInstance,gop,bEn);
7387*53ee8cc1Swenshuai.xi break;
7388*53ee8cc1Swenshuai.xi }
7389*53ee8cc1Swenshuai.xi case E_GOP_RELATIVE_WIN_PRIO:
7390*53ee8cc1Swenshuai.xi {
7391*53ee8cc1Swenshuai.xi GOP_GwinPri *pGwinPri = (GOP_GwinPri *)pSet;
7392*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_GwinPri))
7393*53ee8cc1Swenshuai.xi {
7394*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7395*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7396*53ee8cc1Swenshuai.xi }
7397*53ee8cc1Swenshuai.xi GOP_GWIN_SetRelativeWinPrio(pInstance,gop,pGwinPri);
7398*53ee8cc1Swenshuai.xi break;
7399*53ee8cc1Swenshuai.xi }
7400*53ee8cc1Swenshuai.xi case E_GOP_YUV:
7401*53ee8cc1Swenshuai.xi {
7402*53ee8cc1Swenshuai.xi GOP_SetGOPYUV(pInstance,gop);
7403*53ee8cc1Swenshuai.xi break;
7404*53ee8cc1Swenshuai.xi }
7405*53ee8cc1Swenshuai.xi case E_GOP_REG_UPDATED:
7406*53ee8cc1Swenshuai.xi {
7407*53ee8cc1Swenshuai.xi break;
7408*53ee8cc1Swenshuai.xi }
7409*53ee8cc1Swenshuai.xi case E_GOP_RESOURCE:
7410*53ee8cc1Swenshuai.xi {
7411*53ee8cc1Swenshuai.xi GOP_ResetGOP(pInstance,gop);
7412*53ee8cc1Swenshuai.xi break;
7413*53ee8cc1Swenshuai.xi }
7414*53ee8cc1Swenshuai.xi
7415*53ee8cc1Swenshuai.xi case E_GOP_MULTI_ALPHA_ENABLE:
7416*53ee8cc1Swenshuai.xi {
7417*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7418*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7419*53ee8cc1Swenshuai.xi {
7420*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7421*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7422*53ee8cc1Swenshuai.xi }
7423*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7424*53ee8cc1Swenshuai.xi
7425*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableMultiAlpha(g_pGOPCtxLocal, gop, bEn);
7426*53ee8cc1Swenshuai.xi break;
7427*53ee8cc1Swenshuai.xi }
7428*53ee8cc1Swenshuai.xi case E_GOP_GWIN_TLB_ENABLE:
7429*53ee8cc1Swenshuai.xi {
7430*53ee8cc1Swenshuai.xi PGOP_TLB_Enable pTLB_Enable = (PGOP_TLB_Enable)pSet;
7431*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
7432*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_TLB_Enable))
7433*53ee8cc1Swenshuai.xi {
7434*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
7435*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7436*53ee8cc1Swenshuai.xi }
7437*53ee8cc1Swenshuai.xi #endif
7438*53ee8cc1Swenshuai.xi if(!g_pGOPCtxLocal->pGopChipProperty->bTLBSupport[pTLB_Enable->gop_idx])
7439*53ee8cc1Swenshuai.xi {
7440*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d Not Support TLB\n",__FUNCTION__,__LINE__,pTLB_Enable->gop_idx);
7441*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7442*53ee8cc1Swenshuai.xi }
7443*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->bTLB[pTLB_Enable->gop_idx] = pTLB_Enable->bEn;
7444*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u64TLBAddress[pTLB_Enable->gop_idx] = pTLB_Enable->u64TLBAddr;
7445*53ee8cc1Swenshuai.xi //Enable TLB
7446*53ee8cc1Swenshuai.xi MDrv_GOP_TLBEnable(g_pGOPCtxLocal,pTLB_Enable->gop_idx, pTLB_Enable->bEn);
7447*53ee8cc1Swenshuai.xi break;
7448*53ee8cc1Swenshuai.xi }
7449*53ee8cc1Swenshuai.xi case E_GOP_AFBC_CORE_RESET:
7450*53ee8cc1Swenshuai.xi {
7451*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7452*53ee8cc1Swenshuai.xi {
7453*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7454*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7455*53ee8cc1Swenshuai.xi }
7456*53ee8cc1Swenshuai.xi MDrv_GOP_AFBC_Core_Reset(g_pGOPCtxLocal,gop);
7457*53ee8cc1Swenshuai.xi break;
7458*53ee8cc1Swenshuai.xi }
7459*53ee8cc1Swenshuai.xi case E_GOP_AFBC_CORE_ENABLE:
7460*53ee8cc1Swenshuai.xi {
7461*53ee8cc1Swenshuai.xi MS_BOOL bEn;
7462*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7463*53ee8cc1Swenshuai.xi {
7464*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7465*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7466*53ee8cc1Swenshuai.xi }
7467*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
7468*53ee8cc1Swenshuai.xi MDrv_GOP_AFBC_Core_Enable(g_pGOPCtxLocal,gop,bEn);
7469*53ee8cc1Swenshuai.xi break;
7470*53ee8cc1Swenshuai.xi }
7471*53ee8cc1Swenshuai.xi default:
7472*53ee8cc1Swenshuai.xi {
7473*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] invalid input case:%d\n",__FUNCTION__, type);
7474*53ee8cc1Swenshuai.xi }
7475*53ee8cc1Swenshuai.xi
7476*53ee8cc1Swenshuai.xi }
7477*53ee8cc1Swenshuai.xi
7478*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
7479*53ee8cc1Swenshuai.xi
7480*53ee8cc1Swenshuai.xi }
7481*53ee8cc1Swenshuai.xi
7482*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetProperty(void * pInstance,EN_GOP_PROPERTY type,MS_U32 gop,MS_U32 * pSet,MS_U32 u32Size)7483*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetProperty(void* pInstance,EN_GOP_PROPERTY type,MS_U32 gop, MS_U32* pSet, MS_U32 u32Size)
7484*53ee8cc1Swenshuai.xi {
7485*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
7486*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
7487*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
7488*53ee8cc1Swenshuai.xi #endif
7489*53ee8cc1Swenshuai.xi
7490*53ee8cc1Swenshuai.xi switch(type)
7491*53ee8cc1Swenshuai.xi {
7492*53ee8cc1Swenshuai.xi case E_GOP_MIUSEL:
7493*53ee8cc1Swenshuai.xi {
7494*53ee8cc1Swenshuai.xi E_DRV_GOP_SEL_TYPE *pMIUSel = (E_DRV_GOP_SEL_TYPE *)pSet;
7495*53ee8cc1Swenshuai.xi if(u32Size != sizeof(E_DRV_GOP_SEL_TYPE))
7496*53ee8cc1Swenshuai.xi {
7497*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7498*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7499*53ee8cc1Swenshuai.xi }
7500*53ee8cc1Swenshuai.xi
7501*53ee8cc1Swenshuai.xi *pMIUSel = (E_DRV_GOP_SEL_TYPE)GOP_GetMIUSel(pInstance,gop);
7502*53ee8cc1Swenshuai.xi
7503*53ee8cc1Swenshuai.xi break;
7504*53ee8cc1Swenshuai.xi }
7505*53ee8cc1Swenshuai.xi case E_GOP_CONTRAST:
7506*53ee8cc1Swenshuai.xi {
7507*53ee8cc1Swenshuai.xi PGOP_CONTRAST pRGB = (PGOP_CONTRAST)pSet;
7508*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_CONTRAST))
7509*53ee8cc1Swenshuai.xi {
7510*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7511*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7512*53ee8cc1Swenshuai.xi }
7513*53ee8cc1Swenshuai.xi
7514*53ee8cc1Swenshuai.xi GOP_GetContrast(pInstance,gop,&(pRGB->y), &(pRGB->u), &(pRGB->v));
7515*53ee8cc1Swenshuai.xi
7516*53ee8cc1Swenshuai.xi break;
7517*53ee8cc1Swenshuai.xi }
7518*53ee8cc1Swenshuai.xi case E_GOP_BRIGHTNESS:
7519*53ee8cc1Swenshuai.xi {
7520*53ee8cc1Swenshuai.xi PGOP_BRIGHTNESS pBri = (PGOP_BRIGHTNESS)pSet;
7521*53ee8cc1Swenshuai.xi MS_U16* pu16Brightness = (MS_U16*)&(pBri->Brightness);
7522*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_BRIGHTNESS))
7523*53ee8cc1Swenshuai.xi {
7524*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7525*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7526*53ee8cc1Swenshuai.xi }
7527*53ee8cc1Swenshuai.xi
7528*53ee8cc1Swenshuai.xi GOP_GetBrightness(pInstance,gop, pu16Brightness, &(pBri->bMSB));
7529*53ee8cc1Swenshuai.xi break;
7530*53ee8cc1Swenshuai.xi }
7531*53ee8cc1Swenshuai.xi case E_GOP_ALPHAINVERSE:
7532*53ee8cc1Swenshuai.xi {
7533*53ee8cc1Swenshuai.xi MS_BOOL *pbAlphaInverse = (MS_BOOL *)pSet;
7534*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7535*53ee8cc1Swenshuai.xi {
7536*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7537*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7538*53ee8cc1Swenshuai.xi }
7539*53ee8cc1Swenshuai.xi
7540*53ee8cc1Swenshuai.xi *pbAlphaInverse = GOP_GetAlphaInverse(pInstance,gop);
7541*53ee8cc1Swenshuai.xi
7542*53ee8cc1Swenshuai.xi break;
7543*53ee8cc1Swenshuai.xi }
7544*53ee8cc1Swenshuai.xi case E_GOP_HSCALE_RATIO:
7545*53ee8cc1Swenshuai.xi {
7546*53ee8cc1Swenshuai.xi MS_U16 *pHscale = (MS_U16 *)pSet;
7547*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U16))
7548*53ee8cc1Swenshuai.xi {
7549*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7550*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7551*53ee8cc1Swenshuai.xi }
7552*53ee8cc1Swenshuai.xi *pHscale = GOP_Get_Hscale(pInstance,gop);
7553*53ee8cc1Swenshuai.xi break;
7554*53ee8cc1Swenshuai.xi }
7555*53ee8cc1Swenshuai.xi case E_GOP_VSCALE_RATIO:
7556*53ee8cc1Swenshuai.xi {
7557*53ee8cc1Swenshuai.xi MS_U16 *pVscale = (MS_U16 *)pSet;
7558*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U16))
7559*53ee8cc1Swenshuai.xi {
7560*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7561*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7562*53ee8cc1Swenshuai.xi }
7563*53ee8cc1Swenshuai.xi *pVscale = GOP_Get_Vscale(pInstance,gop);
7564*53ee8cc1Swenshuai.xi break;
7565*53ee8cc1Swenshuai.xi }
7566*53ee8cc1Swenshuai.xi case E_GOP_HSTART:
7567*53ee8cc1Swenshuai.xi {
7568*53ee8cc1Swenshuai.xi MS_U16 *pu16HStart = (MS_U16 *)pSet;
7569*53ee8cc1Swenshuai.xi if (u32Size != sizeof(MS_U16))
7570*53ee8cc1Swenshuai.xi {
7571*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7572*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7573*53ee8cc1Swenshuai.xi }
7574*53ee8cc1Swenshuai.xi *pu16HStart = g_pGOPCtxLocal->pGOPCtxShared->u16PnlHStr[gop];
7575*53ee8cc1Swenshuai.xi break;
7576*53ee8cc1Swenshuai.xi }
7577*53ee8cc1Swenshuai.xi case E_GOP_OUTPUT_TIMING:
7578*53ee8cc1Swenshuai.xi {
7579*53ee8cc1Swenshuai.xi PST_GOP_TIMING_INFO pstInfo;
7580*53ee8cc1Swenshuai.xi if(u32Size != sizeof(ST_GOP_TIMING_INFO))
7581*53ee8cc1Swenshuai.xi {
7582*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7583*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7584*53ee8cc1Swenshuai.xi }
7585*53ee8cc1Swenshuai.xi pstInfo = (PST_GOP_TIMING_INFO)pSet;
7586*53ee8cc1Swenshuai.xi GOP_GetPanelTiming(pInstance,gop, pstInfo);
7587*53ee8cc1Swenshuai.xi break;
7588*53ee8cc1Swenshuai.xi }
7589*53ee8cc1Swenshuai.xi case E_GOP_PIXELBASE_ENABLE:
7590*53ee8cc1Swenshuai.xi {
7591*53ee8cc1Swenshuai.xi PGOP_SET_PROPERTY_PARAM pstInfo;
7592*53ee8cc1Swenshuai.xi MS_BOOL *pbEn;
7593*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7594*53ee8cc1Swenshuai.xi {
7595*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7596*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7597*53ee8cc1Swenshuai.xi }
7598*53ee8cc1Swenshuai.xi pstInfo = (PGOP_SET_PROPERTY_PARAM)(void*)pSet;
7599*53ee8cc1Swenshuai.xi pbEn = (MS_BOOL*)(pstInfo->pSetting);
7600*53ee8cc1Swenshuai.xi *pbEn = g_pGOPCtxLocal->pGOPCtxShared->bPixelMode[pstInfo->gop_idx];
7601*53ee8cc1Swenshuai.xi break;
7602*53ee8cc1Swenshuai.xi }
7603*53ee8cc1Swenshuai.xi case E_GOP_MULTI_ALPHA_ENABLE:
7604*53ee8cc1Swenshuai.xi {
7605*53ee8cc1Swenshuai.xi PGOP_SET_PROPERTY_PARAM pstInfo;
7606*53ee8cc1Swenshuai.xi MS_BOOL *pbEn;
7607*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7608*53ee8cc1Swenshuai.xi {
7609*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7610*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7611*53ee8cc1Swenshuai.xi }
7612*53ee8cc1Swenshuai.xi pstInfo = (PGOP_SET_PROPERTY_PARAM)(void*)pSet;
7613*53ee8cc1Swenshuai.xi pbEn = (MS_BOOL*)(pstInfo->pSetting);
7614*53ee8cc1Swenshuai.xi *pbEn = MDrv_GOP_GWIN_IsMultiAlphaEnable(g_pGOPCtxLocal, pstInfo->gop_idx);
7615*53ee8cc1Swenshuai.xi break;
7616*53ee8cc1Swenshuai.xi }
7617*53ee8cc1Swenshuai.xi
7618*53ee8cc1Swenshuai.xi case E_GOP_PREALPHAMODE:
7619*53ee8cc1Swenshuai.xi case E_GOP_FIELD_INVERSE:
7620*53ee8cc1Swenshuai.xi case E_GOP_FORCE_WRITE:
7621*53ee8cc1Swenshuai.xi case E_GOP_BANK_FORCE_WRITE:
7622*53ee8cc1Swenshuai.xi case E_GOP_3D_LR_EXCHANGE:
7623*53ee8cc1Swenshuai.xi case E_GOP_VE_OSD:
7624*53ee8cc1Swenshuai.xi case E_GOP_OUTPUT_LAYER_SWITCH:
7625*53ee8cc1Swenshuai.xi case E_GOP_SWAP_OVERLAP_WIN:
7626*53ee8cc1Swenshuai.xi case E_GOP_LB_COUPLE:
7627*53ee8cc1Swenshuai.xi case E_GOP_YUV:
7628*53ee8cc1Swenshuai.xi case E_GOP_OUTPUT_COLOR:
7629*53ee8cc1Swenshuai.xi case E_GOP_UV_SWAP:
7630*53ee8cc1Swenshuai.xi case E_GOP_YC_SWAP:
7631*53ee8cc1Swenshuai.xi case E_GOP_RELATIVE_WIN_PRIO:
7632*53ee8cc1Swenshuai.xi break;
7633*53ee8cc1Swenshuai.xi case E_GOP_BW_STRENGTH:
7634*53ee8cc1Swenshuai.xi {
7635*53ee8cc1Swenshuai.xi EN_GOP_BW_STRENGTH *peGOPBWStr = (EN_GOP_BW_STRENGTH *)pSet;;
7636*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_BW_STRENGTH))
7637*53ee8cc1Swenshuai.xi {
7638*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7639*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7640*53ee8cc1Swenshuai.xi }
7641*53ee8cc1Swenshuai.xi GOP_GetGOPBWStrength(pInstance,gop,peGOPBWStr);
7642*53ee8cc1Swenshuai.xi break;
7643*53ee8cc1Swenshuai.xi }
7644*53ee8cc1Swenshuai.xi case E_GOP_REG_UPDATED:
7645*53ee8cc1Swenshuai.xi {
7646*53ee8cc1Swenshuai.xi MS_BOOL *pUpdated = (MS_BOOL *)pSet;
7647*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
7648*53ee8cc1Swenshuai.xi {
7649*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7650*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7651*53ee8cc1Swenshuai.xi }
7652*53ee8cc1Swenshuai.xi *pUpdated = GOP_IsRegUpdated(pInstance,gop);
7653*53ee8cc1Swenshuai.xi break;
7654*53ee8cc1Swenshuai.xi }
7655*53ee8cc1Swenshuai.xi case E_GOP_MAXFBNUM:
7656*53ee8cc1Swenshuai.xi {
7657*53ee8cc1Swenshuai.xi MS_U32 *pMAXFBNum = (MS_U32 *)pSet;
7658*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
7659*53ee8cc1Swenshuai.xi {
7660*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7661*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7662*53ee8cc1Swenshuai.xi }
7663*53ee8cc1Swenshuai.xi *pMAXFBNum = DRV_MAX_GWIN_FB_SUPPORT;
7664*53ee8cc1Swenshuai.xi break;
7665*53ee8cc1Swenshuai.xi }
7666*53ee8cc1Swenshuai.xi case E_GOP_NUM_IS_INIT:
7667*53ee8cc1Swenshuai.xi {
7668*53ee8cc1Swenshuai.xi GOP_InitInfo *pGOPInitInfo = (GOP_InitInfo *)pSet;
7669*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_InitInfo))
7670*53ee8cc1Swenshuai.xi {
7671*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] input structure size ERROR!! \n",__FUNCTION__,__LINE__);
7672*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7673*53ee8cc1Swenshuai.xi }
7674*53ee8cc1Swenshuai.xi GOP_CTX_DRV_SHARED *pDrvGOPShared;
7675*53ee8cc1Swenshuai.xi MS_BOOL bNeedInitShared = FALSE;
7676*53ee8cc1Swenshuai.xi pDrvGOPShared = (GOP_CTX_DRV_SHARED*)MDrv_GOP_GetShareMemory(&bNeedInitShared);
7677*53ee8cc1Swenshuai.xi if(pDrvGOPShared->apiCtxShared.bGopHasInitialized[gop])
7678*53ee8cc1Swenshuai.xi {
7679*53ee8cc1Swenshuai.xi pGOPInitInfo->u16PanelWidth = pDrvGOPShared->apiCtxShared.u16PnlWidth[gop];
7680*53ee8cc1Swenshuai.xi pGOPInitInfo->u16PanelHeight = pDrvGOPShared->apiCtxShared.u16PnlHeight[gop];
7681*53ee8cc1Swenshuai.xi pGOPInitInfo->u16PanelHStr = pDrvGOPShared->apiCtxShared.u16PnlHStr[gop];
7682*53ee8cc1Swenshuai.xi pGOPInitInfo->bEnableVsyncIntFlip = pDrvGOPShared->apiCtxShared.bEnableVsyncIntFlip;
7683*53ee8cc1Swenshuai.xi pGOPInitInfo->u32GOPRBAdr = pDrvGOPShared->apiCtxShared.fbPool1.GWinFB_Pool_BaseAddr;
7684*53ee8cc1Swenshuai.xi pGOPInitInfo->u32GOPRBLen = pDrvGOPShared->apiCtxShared.fbPool1.u32GWinFB_Pool_MemLen;
7685*53ee8cc1Swenshuai.xi pGOPInitInfo->u32GOPRegdmaAdr = pDrvGOPShared->apiCtxShared.phyGOPRegdmaAdr;
7686*53ee8cc1Swenshuai.xi pGOPInitInfo->u32GOPRegdmaLen = pDrvGOPShared->apiCtxShared.u32GOPRegdmaLen;
7687*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u16PanelWidth=%d\n",pGOPInitInfo->u16PanelWidth);
7688*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u16PanelHeight=%d\n",pGOPInitInfo->u16PanelHeight);
7689*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u16PanelHStr=%d\n",pGOPInitInfo->u16PanelHStr);
7690*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->bEnableVsyncIntFlip=%d\n",pGOPInitInfo->bEnableVsyncIntFlip);
7691*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u32GOPRBAdr=0x%x\n",pGOPInitInfo->u32GOPRBAdr);
7692*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u32GOPRBLen=%d\n",pGOPInitInfo->u32GOPRBLen);
7693*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u32GOPRegdmaAdr=0x%x\n",pGOPInitInfo->u32GOPRegdmaAdr);
7694*53ee8cc1Swenshuai.xi //printf("pGOPInitInfo->u32GOPRegdmaLen=%d\n",pGOPInitInfo->u32GOPRegdmaLen);
7695*53ee8cc1Swenshuai.xi }
7696*53ee8cc1Swenshuai.xi else
7697*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7698*53ee8cc1Swenshuai.xi break;
7699*53ee8cc1Swenshuai.xi }
7700*53ee8cc1Swenshuai.xi default:
7701*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] This status(%d) can't be query\n",__FUNCTION__,type);
7702*53ee8cc1Swenshuai.xi break;
7703*53ee8cc1Swenshuai.xi
7704*53ee8cc1Swenshuai.xi }
7705*53ee8cc1Swenshuai.xi
7706*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
7707*53ee8cc1Swenshuai.xi
7708*53ee8cc1Swenshuai.xi }
7709*53ee8cc1Swenshuai.xi
_IsGopInOPMux(void * pInstance,MS_U8 u8GopNum)7710*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInOPMux(void* pInstance,MS_U8 u8GopNum)
7711*53ee8cc1Swenshuai.xi {
7712*53ee8cc1Swenshuai.xi MS_U8 i, GetGopNum = 0;
7713*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
7714*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
7715*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
7716*53ee8cc1Swenshuai.xi #endif
7717*53ee8cc1Swenshuai.xi for (i=0; i<MDrv_GetMaxMuxOPNum(); i++)
7718*53ee8cc1Swenshuai.xi {
7719*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, (Gop_MuxSel)i);
7720*53ee8cc1Swenshuai.xi if (u8GopNum==GetGopNum)
7721*53ee8cc1Swenshuai.xi {
7722*53ee8cc1Swenshuai.xi return TRUE;
7723*53ee8cc1Swenshuai.xi }
7724*53ee8cc1Swenshuai.xi }
7725*53ee8cc1Swenshuai.xi return FALSE;
7726*53ee8cc1Swenshuai.xi }
7727*53ee8cc1Swenshuai.xi
_IsGopInDualOPMux(void * pInstance,MS_U8 u8GopNum)7728*53ee8cc1Swenshuai.xi static MS_BOOL _IsGopInDualOPMux(void* pInstance, MS_U8 u8GopNum)
7729*53ee8cc1Swenshuai.xi {
7730*53ee8cc1Swenshuai.xi MS_U8 i, GetGopNum = 0;
7731*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
7732*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
7733*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
7734*53ee8cc1Swenshuai.xi #endif
7735*53ee8cc1Swenshuai.xi for (i=E_GOP_DUALRATE_OP_MUX0; i<=E_GOP_DUALRATE_OP_MUX2; i++)
7736*53ee8cc1Swenshuai.xi {
7737*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &GetGopNum, (Gop_MuxSel)i);
7738*53ee8cc1Swenshuai.xi if (u8GopNum==GetGopNum)
7739*53ee8cc1Swenshuai.xi {
7740*53ee8cc1Swenshuai.xi return TRUE;
7741*53ee8cc1Swenshuai.xi }
7742*53ee8cc1Swenshuai.xi }
7743*53ee8cc1Swenshuai.xi return FALSE;
7744*53ee8cc1Swenshuai.xi }
7745*53ee8cc1Swenshuai.xi
7746*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetDst(void * pInstance,MS_U8 u8GOP,EN_GOP_DST_TYPE dsttype)7747*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetDst(void* pInstance,MS_U8 u8GOP, EN_GOP_DST_TYPE dsttype)
7748*53ee8cc1Swenshuai.xi {
7749*53ee8cc1Swenshuai.xi MS_U8 u8GetGOPNum =0, u8Mux0GopNum =0, i;
7750*53ee8cc1Swenshuai.xi DRV_GOPDstType GopDst;
7751*53ee8cc1Swenshuai.xi Gop_MuxSel OPMux = MAX_GOP_MUX_SUPPORT;
7752*53ee8cc1Swenshuai.xi
7753*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
7754*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
7755*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
7756*53ee8cc1Swenshuai.xi #endif
7757*53ee8cc1Swenshuai.xi
7758*53ee8cc1Swenshuai.xi if ((!_GOP_IsGopNumValid(pInstance,u8GOP)))
7759*53ee8cc1Swenshuai.xi {
7760*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %d is out of range\n",__FUNCTION__,__LINE__,u8GOP);
7761*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
7762*53ee8cc1Swenshuai.xi }
7763*53ee8cc1Swenshuai.xi
7764*53ee8cc1Swenshuai.xi GOP_M_INFO("---%s %d: PID[%td], TID[%td] u8GOP=%u, DstType=0x%tx\n", __FUNCTION__, __LINE__, (ptrdiff_t)getpid(), (ptrdiff_t)MsOS_GetOSThreadID(), u8GOP, (ptrdiff_t)dsttype);
7765*53ee8cc1Swenshuai.xi
7766*53ee8cc1Swenshuai.xi /*Set GOP dst and check input dst type is vaild or not for different chip first */
7767*53ee8cc1Swenshuai.xi (_GOP_Map_APIDst2DRV_Enum(pInstance,dsttype, &GopDst));
7768*53ee8cc1Swenshuai.xi (MDrv_GOP_GWIN_SetDstPlane(g_pGOPCtxLocal, u8GOP, GopDst,FALSE));
7769*53ee8cc1Swenshuai.xi
7770*53ee8cc1Swenshuai.xi // Set GOP dst output blending to SC/Mixer
7771*53ee8cc1Swenshuai.xi switch(GopDst)
7772*53ee8cc1Swenshuai.xi {
7773*53ee8cc1Swenshuai.xi
7774*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0:
7775*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux) //t8, there are new mux for ip/mvop
7776*53ee8cc1Swenshuai.xi {
7777*53ee8cc1Swenshuai.xi //printf("\n=============%s===============\n",__FUNCTION__);
7778*53ee8cc1Swenshuai.xi //printf("Set to New IP Mux GOP:%d\n",u8GOP);
7779*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_IP0_MUX);
7780*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
7781*53ee8cc1Swenshuai.xi }
7782*53ee8cc1Swenshuai.xi else //In IP case, gop should open in OP mux0 ~ mux3
7783*53ee8cc1Swenshuai.xi {
7784*53ee8cc1Swenshuai.xi
7785*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGopChipProperty->bNeedSetMUX1ToIP0)
7786*53ee8cc1Swenshuai.xi {
7787*53ee8cc1Swenshuai.xi if (!_IsGopInMux1(pInstance,u8GOP))
7788*53ee8cc1Swenshuai.xi {
7789*53ee8cc1Swenshuai.xi /*save current mux setting*/
7790*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7791*53ee8cc1Swenshuai.xi {
7792*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
7793*53ee8cc1Swenshuai.xi }
7794*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
7795*53ee8cc1Swenshuai.xi /*force change input parameter u8GOP to mux1*/
7796*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7797*53ee8cc1Swenshuai.xi {
7798*53ee8cc1Swenshuai.xi
7799*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
7800*53ee8cc1Swenshuai.xi if (u8GOP == u8GetGOPNum)
7801*53ee8cc1Swenshuai.xi {
7802*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8Mux0GopNum, E_GOP_MUX1);
7803*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8Mux0GopNum, (Gop_MuxSel)i);
7804*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_MUX1);
7805*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u8ChgIpMuxGop = u8Mux0GopNum;
7806*53ee8cc1Swenshuai.xi if( u8Mux0GopNum < _GOP_GetMaxGOPNum(pInstance))
7807*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8Mux0GopNum);
7808*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
7809*53ee8cc1Swenshuai.xi }
7810*53ee8cc1Swenshuai.xi }
7811*53ee8cc1Swenshuai.xi
7812*53ee8cc1Swenshuai.xi }
7813*53ee8cc1Swenshuai.xi }
7814*53ee8cc1Swenshuai.xi else if(g_pGOPCtxLocal->pGopChipProperty->bNeedSetMUX3ToIP0)
7815*53ee8cc1Swenshuai.xi {
7816*53ee8cc1Swenshuai.xi if (!_IsGopInMux3(pInstance,u8GOP))
7817*53ee8cc1Swenshuai.xi {
7818*53ee8cc1Swenshuai.xi /*save current mux setting*/
7819*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7820*53ee8cc1Swenshuai.xi {
7821*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
7822*53ee8cc1Swenshuai.xi }
7823*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
7824*53ee8cc1Swenshuai.xi /*force change input parameter u8GOP to mux3*/
7825*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7826*53ee8cc1Swenshuai.xi {
7827*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
7828*53ee8cc1Swenshuai.xi if (u8GOP == u8GetGOPNum)
7829*53ee8cc1Swenshuai.xi {
7830*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8Mux0GopNum, E_GOP_MUX3);
7831*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8Mux0GopNum, (Gop_MuxSel)i);
7832*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_MUX3);
7833*53ee8cc1Swenshuai.xi if( u8Mux0GopNum < _GOP_GetMaxGOPNum(pInstance))
7834*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8Mux0GopNum);
7835*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
7836*53ee8cc1Swenshuai.xi }
7837*53ee8cc1Swenshuai.xi }
7838*53ee8cc1Swenshuai.xi }
7839*53ee8cc1Swenshuai.xi }
7840*53ee8cc1Swenshuai.xi else
7841*53ee8cc1Swenshuai.xi {
7842*53ee8cc1Swenshuai.xi if (!_IsGopInMux0(pInstance,u8GOP)) //jasmine:FIXME
7843*53ee8cc1Swenshuai.xi {
7844*53ee8cc1Swenshuai.xi /*save current mux setting*/
7845*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7846*53ee8cc1Swenshuai.xi {
7847*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
7848*53ee8cc1Swenshuai.xi }
7849*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
7850*53ee8cc1Swenshuai.xi /*force change input parameter u8GOP to mux0*/
7851*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7852*53ee8cc1Swenshuai.xi {
7853*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
7854*53ee8cc1Swenshuai.xi if (u8GOP == u8GetGOPNum)
7855*53ee8cc1Swenshuai.xi {
7856*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8Mux0GopNum, E_GOP_MUX0);
7857*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8Mux0GopNum, (Gop_MuxSel)i);
7858*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_MUX0);
7859*53ee8cc1Swenshuai.xi if( u8Mux0GopNum < _GOP_GetMaxGOPNum(pInstance))
7860*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8Mux0GopNum);
7861*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
7862*53ee8cc1Swenshuai.xi }
7863*53ee8cc1Swenshuai.xi }
7864*53ee8cc1Swenshuai.xi }
7865*53ee8cc1Swenshuai.xi }
7866*53ee8cc1Swenshuai.xi }
7867*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
7868*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
7869*53ee8cc1Swenshuai.xi if (u8GOP==0)
7870*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_IP0_SEL_GOP0);
7871*53ee8cc1Swenshuai.xi else if (u8GOP==1)
7872*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_IP0_SEL_GOP1);
7873*53ee8cc1Swenshuai.xi else
7874*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_IP0_SEL_GOP2);
7875*53ee8cc1Swenshuai.xi //MApi_GOP_GWIN_OutputColor(GOPOUT_YUV);
7876*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, TRUE);
7877*53ee8cc1Swenshuai.xi break;
7878*53ee8cc1Swenshuai.xi
7879*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2VE:
7880*53ee8cc1Swenshuai.xi //jasmine:FIXME
7881*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bGOPMixerToVE)
7882*53ee8cc1Swenshuai.xi {
7883*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
7884*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
7885*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP,DRV_GOPOUT_YUV);
7886*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, TRUE);
7887*53ee8cc1Swenshuai.xi
7888*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPClk(g_pGOPCtxLocal,u8GOP,E_DRV_GOP_DST_MIXER2VE);
7889*53ee8cc1Swenshuai.xi
7890*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMixerDstPlane(g_pGOPCtxLocal,u8GOP,GopDst);
7891*53ee8cc1Swenshuai.xi
7892*53ee8cc1Swenshuai.xi (MDrv_GOP_MIXER_SetGOPEnable2Mixer(g_pGOPCtxLocal, u8GOP, TRUE));
7893*53ee8cc1Swenshuai.xi (MDrv_GOP_Set_VE_MUX(g_pGOPCtxLocal, (GOPTYPE.MIXER-1),TRUE));
7894*53ee8cc1Swenshuai.xi }
7895*53ee8cc1Swenshuai.xi else
7896*53ee8cc1Swenshuai.xi {
7897*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Not Support GOPMixerToVE in this chip version.\n",__FUNCTION__,__LINE__);
7898*53ee8cc1Swenshuai.xi }
7899*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
7900*53ee8cc1Swenshuai.xi break;
7901*53ee8cc1Swenshuai.xi
7902*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP0:
7903*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
7904*53ee8cc1Swenshuai.xi
7905*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGopChipProperty->bNewMux) && (!_IsGopInOPMux(pInstance,u8GOP)))
7906*53ee8cc1Swenshuai.xi {
7907*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
7908*53ee8cc1Swenshuai.xi OPMux = _GetNonUseOPMux(pInstance);
7909*53ee8cc1Swenshuai.xi if(OPMux != MAX_GOP_MUX_SUPPORT)
7910*53ee8cc1Swenshuai.xi {
7911*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, OPMux);
7912*53ee8cc1Swenshuai.xi }
7913*53ee8cc1Swenshuai.xi else
7914*53ee8cc1Swenshuai.xi {
7915*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_MUX2);
7916*53ee8cc1Swenshuai.xi }
7917*53ee8cc1Swenshuai.xi }
7918*53ee8cc1Swenshuai.xi
7919*53ee8cc1Swenshuai.xi /*
7920*53ee8cc1Swenshuai.xi For U4, mux value may has mixer and at least one GOP is not in mux
7921*53ee8cc1Swenshuai.xi To check if the GOP number is in MUX0 to MUX3
7922*53ee8cc1Swenshuai.xi If not, find the mux value which is mixer, replace mixer by the GOP number
7923*53ee8cc1Swenshuai.xi */
7924*53ee8cc1Swenshuai.xi if(!_IsGopInMux0To3(pInstance,u8GOP))
7925*53ee8cc1Swenshuai.xi {
7926*53ee8cc1Swenshuai.xi /*save current mux setting*/
7927*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7928*53ee8cc1Swenshuai.xi {
7929*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
7930*53ee8cc1Swenshuai.xi }
7931*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
7932*53ee8cc1Swenshuai.xi /*force set input parameter u8GOP to the mux which is mixer*/
7933*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7934*53ee8cc1Swenshuai.xi {
7935*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
7936*53ee8cc1Swenshuai.xi if ((GOPTYPE.MIXER-1) == u8GetGOPNum) //Find mixer(0x4)
7937*53ee8cc1Swenshuai.xi {
7938*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, (Gop_MuxSel)i);
7939*53ee8cc1Swenshuai.xi }
7940*53ee8cc1Swenshuai.xi }
7941*53ee8cc1Swenshuai.xi }
7942*53ee8cc1Swenshuai.xi
7943*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNeedSetMUX3ToIP0) //For u4 and k1, mux3 only to IP (can not to OP)
7944*53ee8cc1Swenshuai.xi {
7945*53ee8cc1Swenshuai.xi if (_IsGopInMux3(pInstance,u8GOP))
7946*53ee8cc1Swenshuai.xi {
7947*53ee8cc1Swenshuai.xi /*save current mux setting*/
7948*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7949*53ee8cc1Swenshuai.xi {
7950*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
7951*53ee8cc1Swenshuai.xi }
7952*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
7953*53ee8cc1Swenshuai.xi
7954*53ee8cc1Swenshuai.xi /*force change input parameter u8GOP exchange mux with GOP3*/
7955*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7956*53ee8cc1Swenshuai.xi {
7957*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
7958*53ee8cc1Swenshuai.xi if (GOPTYPE.GOP3 == u8GetGOPNum)
7959*53ee8cc1Swenshuai.xi {
7960*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, (Gop_MuxSel)i);
7961*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, GOPTYPE.GOP3, E_GOP_MUX3);
7962*53ee8cc1Swenshuai.xi }
7963*53ee8cc1Swenshuai.xi }
7964*53ee8cc1Swenshuai.xi }
7965*53ee8cc1Swenshuai.xi }
7966*53ee8cc1Swenshuai.xi else if(g_pGOPCtxLocal->pGopChipProperty->bNeedSetMUX1ToIP0)
7967*53ee8cc1Swenshuai.xi {
7968*53ee8cc1Swenshuai.xi if (_IsGopInMux1(pInstance,u8GOP)&&_IsGopInMux0To3(pInstance,g_pGOPCtxLocal->u8ChgIpMuxGop))
7969*53ee8cc1Swenshuai.xi {
7970*53ee8cc1Swenshuai.xi /*save current mux setting*/
7971*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7972*53ee8cc1Swenshuai.xi {
7973*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
7974*53ee8cc1Swenshuai.xi }
7975*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
7976*53ee8cc1Swenshuai.xi
7977*53ee8cc1Swenshuai.xi /*force change input parameter u8GOP exchange mux with GOP3*/
7978*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
7979*53ee8cc1Swenshuai.xi {
7980*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
7981*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->u8ChgIpMuxGop == u8GetGOPNum)
7982*53ee8cc1Swenshuai.xi {
7983*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, (Gop_MuxSel)i);
7984*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GetGOPNum, E_GOP_MUX1);
7985*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->u8ChgIpMuxGop = 0xFF;
7986*53ee8cc1Swenshuai.xi if( u8GetGOPNum < _GOP_GetMaxGOPNum(pInstance))
7987*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GetGOPNum);
7988*53ee8cc1Swenshuai.xi }
7989*53ee8cc1Swenshuai.xi }
7990*53ee8cc1Swenshuai.xi }
7991*53ee8cc1Swenshuai.xi }
7992*53ee8cc1Swenshuai.xi
7993*53ee8cc1Swenshuai.xi if (u8GOP==0)
7994*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP0);
7995*53ee8cc1Swenshuai.xi else if (u8GOP==1)
7996*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP1);
7997*53ee8cc1Swenshuai.xi else
7998*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP2);
7999*53ee8cc1Swenshuai.xi
8000*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, TRUE);
8001*53ee8cc1Swenshuai.xi
8002*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8003*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGopChipProperty->bOpInterlace == TRUE)
8004*53ee8cc1Swenshuai.xi {
8005*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
8006*53ee8cc1Swenshuai.xi }
8007*53ee8cc1Swenshuai.xi else
8008*53ee8cc1Swenshuai.xi {
8009*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
8010*53ee8cc1Swenshuai.xi }
8011*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8012*53ee8cc1Swenshuai.xi break;
8013*53ee8cc1Swenshuai.xi
8014*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP1:
8015*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8016*53ee8cc1Swenshuai.xi {
8017*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8018*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_OP1_MUX);
8019*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8020*53ee8cc1Swenshuai.xi }
8021*53ee8cc1Swenshuai.xi
8022*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_SC1OP_SEL);
8023*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
8024*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, TRUE);
8025*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetVSyncinverse(g_pGOPCtxLocal,u8GOP, FALSE);
8026*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8027*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8028*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8029*53ee8cc1Swenshuai.xi break;
8030*53ee8cc1Swenshuai.xi
8031*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP:
8032*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8033*53ee8cc1Swenshuai.xi {
8034*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8035*53ee8cc1Swenshuai.xi GOP_M_INFO("\n=============%s===============\n",__FUNCTION__);
8036*53ee8cc1Swenshuai.xi GOP_M_INFO("Set to New MVOP Mux GOP:%d\n",u8GOP);
8037*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_VOP0_MUX);
8038*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8039*53ee8cc1Swenshuai.xi }
8040*53ee8cc1Swenshuai.xi else if (!_IsGopInMux0(pInstance,u8GOP))
8041*53ee8cc1Swenshuai.xi {
8042*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
8043*53ee8cc1Swenshuai.xi /*save current mux setting*/
8044*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
8045*53ee8cc1Swenshuai.xi {
8046*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
8047*53ee8cc1Swenshuai.xi }
8048*53ee8cc1Swenshuai.xi
8049*53ee8cc1Swenshuai.xi /*force change input parameter u8GOP to mux0*/
8050*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
8051*53ee8cc1Swenshuai.xi {
8052*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
8053*53ee8cc1Swenshuai.xi if (u8GOP == u8GetGOPNum)
8054*53ee8cc1Swenshuai.xi {
8055*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8Mux0GopNum, E_GOP_MUX0);
8056*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8Mux0GopNum, (Gop_MuxSel)i);
8057*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_MUX0);
8058*53ee8cc1Swenshuai.xi if( u8Mux0GopNum < _GOP_GetMaxGOPNum(pInstance))
8059*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8Mux0GopNum);
8060*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8061*53ee8cc1Swenshuai.xi }
8062*53ee8cc1Swenshuai.xi }
8063*53ee8cc1Swenshuai.xi }
8064*53ee8cc1Swenshuai.xi
8065*53ee8cc1Swenshuai.xi #if (FPGA_TEST)
8066*53ee8cc1Swenshuai.xi GOP_SetOutputColor(pInstance,u8GOP,GOPOUT_RGB);
8067*53ee8cc1Swenshuai.xi #else
8068*53ee8cc1Swenshuai.xi GOP_SetOutputColor(pInstance,u8GOP,GOPOUT_YUV);
8069*53ee8cc1Swenshuai.xi #endif
8070*53ee8cc1Swenshuai.xi
8071*53ee8cc1Swenshuai.xi if (u8GOP==0)
8072*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP0);
8073*53ee8cc1Swenshuai.xi else if (u8GOP==1)
8074*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP1);
8075*53ee8cc1Swenshuai.xi else
8076*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP2);
8077*53ee8cc1Swenshuai.xi
8078*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_MVOP_SEL);
8079*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8080*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
8081*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8082*53ee8cc1Swenshuai.xi break;
8083*53ee8cc1Swenshuai.xi
8084*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VOP_SUB:
8085*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8086*53ee8cc1Swenshuai.xi {
8087*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_VOP0_SUB_MUX);
8088*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8089*53ee8cc1Swenshuai.xi }
8090*53ee8cc1Swenshuai.xi
8091*53ee8cc1Swenshuai.xi #if (FPGA_TEST)
8092*53ee8cc1Swenshuai.xi GOP_SetOutputColor(pInstance,u8GOP,GOPOUT_RGB);
8093*53ee8cc1Swenshuai.xi #else
8094*53ee8cc1Swenshuai.xi GOP_SetOutputColor(pInstance,u8GOP,GOPOUT_YUV);
8095*53ee8cc1Swenshuai.xi #endif
8096*53ee8cc1Swenshuai.xi if (u8GOP==0)
8097*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP0);
8098*53ee8cc1Swenshuai.xi else if (u8GOP==1)
8099*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP1);
8100*53ee8cc1Swenshuai.xi else
8101*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP2);
8102*53ee8cc1Swenshuai.xi
8103*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_SUBMVOP_SEL);
8104*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8105*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8106*53ee8cc1Swenshuai.xi break;
8107*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP1:
8108*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8109*53ee8cc1Swenshuai.xi {
8110*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8111*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_IP1_MUX);
8112*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8113*53ee8cc1Swenshuai.xi }
8114*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8115*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, FALSE);
8116*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_IP1_SEL);
8117*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPClk(g_pGOPCtxLocal,u8GOP,E_DRV_GOP_DST_IP1);
8118*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, TRUE);
8119*53ee8cc1Swenshuai.xi break;
8120*53ee8cc1Swenshuai.xi
8121*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_IP0_SUB:
8122*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8123*53ee8cc1Swenshuai.xi {
8124*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8125*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_IP0_SUB_MUX);
8126*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8127*53ee8cc1Swenshuai.xi }
8128*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8129*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, FALSE);
8130*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_SUBIP0_SEL);
8131*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, TRUE);
8132*53ee8cc1Swenshuai.xi break;
8133*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_DIP:
8134*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8135*53ee8cc1Swenshuai.xi {
8136*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8137*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_DIP_MUX);
8138*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8139*53ee8cc1Swenshuai.xi }
8140*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8141*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP, FALSE);
8142*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_DIP_SEL);
8143*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8144*53ee8cc1Swenshuai.xi break;
8145*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2OP:
8146*53ee8cc1Swenshuai.xi
8147*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bNewMux)
8148*53ee8cc1Swenshuai.xi {
8149*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8150*53ee8cc1Swenshuai.xi if(!_IsGopInMux0To2(pInstance,(GOPTYPE.MIXER-1)))
8151*53ee8cc1Swenshuai.xi {
8152*53ee8cc1Swenshuai.xi OPMux = _GetNonUseOPMux(pInstance);
8153*53ee8cc1Swenshuai.xi if(OPMux != MAX_GOP_MUX_SUPPORT)
8154*53ee8cc1Swenshuai.xi {
8155*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, (GOPTYPE.MIXER-1), OPMux);
8156*53ee8cc1Swenshuai.xi }
8157*53ee8cc1Swenshuai.xi else
8158*53ee8cc1Swenshuai.xi {
8159*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, (GOPTYPE.MIXER-1), E_GOP_MUX2);
8160*53ee8cc1Swenshuai.xi }
8161*53ee8cc1Swenshuai.xi }
8162*53ee8cc1Swenshuai.xi }
8163*53ee8cc1Swenshuai.xi else
8164*53ee8cc1Swenshuai.xi {
8165*53ee8cc1Swenshuai.xi
8166*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->IsChgMux= TRUE;
8167*53ee8cc1Swenshuai.xi /*save current mux setting*/
8168*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
8169*53ee8cc1Swenshuai.xi {
8170*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &g_pGOPCtxLocal->MS_MuxGop[i], (Gop_MuxSel)i);
8171*53ee8cc1Swenshuai.xi //printf("\n %s, before E_GOP_DST_MIXER2VE--->MS_MuxGop[%d]=%d\n",__FUNCTION__,i,u8GetGOPNum);
8172*53ee8cc1Swenshuai.xi }
8173*53ee8cc1Swenshuai.xi /*Set current mux to mixer.*/
8174*53ee8cc1Swenshuai.xi for (i=0; i<MAX_GOP_MUX_SUPPORT; i++)
8175*53ee8cc1Swenshuai.xi {
8176*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8GetGOPNum, (Gop_MuxSel)i);
8177*53ee8cc1Swenshuai.xi if (u8GOP == u8GetGOPNum)
8178*53ee8cc1Swenshuai.xi {
8179*53ee8cc1Swenshuai.xi //Set current GOP mux to mixer
8180*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, (GOPTYPE.MIXER-1), (Gop_MuxSel)i);
8181*53ee8cc1Swenshuai.xi break;
8182*53ee8cc1Swenshuai.xi }
8183*53ee8cc1Swenshuai.xi }
8184*53ee8cc1Swenshuai.xi
8185*53ee8cc1Swenshuai.xi }
8186*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, (GOPTYPE.MIXER-1), TRUE); //To find the mux which is mixer, open SC blending
8187*53ee8cc1Swenshuai.xi //MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8188*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, TRUE);
8189*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, DRV_GOPOUT_YUV);
8190*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP,TRUE);
8191*53ee8cc1Swenshuai.xi
8192*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMixerDstPlane(g_pGOPCtxLocal,u8GOP,GopDst);
8193*53ee8cc1Swenshuai.xi //MDrv_GOP_GWIN_SetHSPipe(g_pGOPCtxLocal, u8GOP, 0);
8194*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8195*53ee8cc1Swenshuai.xi (MDrv_GOP_MIXER_SetGOPEnable2Mixer(g_pGOPCtxLocal, u8GOP, TRUE));
8196*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8197*53ee8cc1Swenshuai.xi break;
8198*53ee8cc1Swenshuai.xi
8199*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_MIXER2OP1:
8200*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, (GOPTYPE.MIXER-1), E_GOP_OP1_MUX);
8201*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_SC1OP_SEL);
8202*53ee8cc1Swenshuai.xi //MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, GOPTYPE.MIXER, TRUE); //To find the mux which is mixer, open SC blending
8203*53ee8cc1Swenshuai.xi //MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8204*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
8205*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP, DRV_GOPOUT_YUV);
8206*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal, u8GOP,TRUE);
8207*53ee8cc1Swenshuai.xi
8208*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMixerDstPlane(g_pGOPCtxLocal,u8GOP,GopDst);
8209*53ee8cc1Swenshuai.xi //MDrv_GOP_GWIN_SetHSPipe(g_pGOPCtxLocal, u8GOP, 0);
8210*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8211*53ee8cc1Swenshuai.xi (MDrv_GOP_MIXER_SetGOPEnable2Mixer(g_pGOPCtxLocal, u8GOP, TRUE));
8212*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8213*53ee8cc1Swenshuai.xi break;
8214*53ee8cc1Swenshuai.xi
8215*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_FRC:
8216*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8217*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP); //require update registers at the end of this function after dwin capture in OP
8218*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
8219*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8220*53ee8cc1Swenshuai.xi break;
8221*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_VE:
8222*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8223*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableProgressive(g_pGOPCtxLocal, u8GOP, FALSE);
8224*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_OutputColor(g_pGOPCtxLocal,u8GOP,DRV_GOPOUT_YUV);
8225*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetAlphaInverse(g_pGOPCtxLocal,u8GOP,FALSE);
8226*53ee8cc1Swenshuai.xi
8227*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPClk(g_pGOPCtxLocal,u8GOP,E_DRV_GOP_DST_VE);
8228*53ee8cc1Swenshuai.xi
8229*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetVSyncinverse(g_pGOPCtxLocal,u8GOP, TRUE);
8230*53ee8cc1Swenshuai.xi //MDrv_GOP_Mask_First_Hsync(g_pGOPCtxLocal,u8GOP, TRUE );
8231*53ee8cc1Swenshuai.xi if(!(g_pGOPCtxLocal->sGOPConfig.eGopIgnoreInit & E_GOP_BOOTLOGO_IGNORE_VEOSDEN))
8232*53ee8cc1Swenshuai.xi {
8233*53ee8cc1Swenshuai.xi (MDrv_GOP_Set_VE_MUX(g_pGOPCtxLocal, u8GOP, TRUE));
8234*53ee8cc1Swenshuai.xi }
8235*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8236*53ee8cc1Swenshuai.xi break;
8237*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_GOPScaling:
8238*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
8239*53ee8cc1Swenshuai.xi if((g_pGOPCtxLocal->pGopChipProperty->bNewMux) && (!_IsGopInMux0To2(pInstance,u8GOP)))
8240*53ee8cc1Swenshuai.xi {
8241*53ee8cc1Swenshuai.xi //_CleanGopMux(u8GOP);
8242*53ee8cc1Swenshuai.xi OPMux = _GetNonUseOPMux(pInstance);
8243*53ee8cc1Swenshuai.xi if(OPMux != MAX_GOP_MUX_SUPPORT)
8244*53ee8cc1Swenshuai.xi {
8245*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, OPMux);
8246*53ee8cc1Swenshuai.xi }
8247*53ee8cc1Swenshuai.xi else
8248*53ee8cc1Swenshuai.xi {
8249*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_MUX2);
8250*53ee8cc1Swenshuai.xi }
8251*53ee8cc1Swenshuai.xi }
8252*53ee8cc1Swenshuai.xi
8253*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_GS_MUX);
8254*53ee8cc1Swenshuai.xi
8255*53ee8cc1Swenshuai.xi if (u8GOP==0)
8256*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP0);
8257*53ee8cc1Swenshuai.xi else if (u8GOP==1)
8258*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP1);
8259*53ee8cc1Swenshuai.xi else
8260*53ee8cc1Swenshuai.xi MDrv_GOP_SetIPSel2SC(g_pGOPCtxLocal, MS_DRV_NIP_SEL_GOP2);
8261*53ee8cc1Swenshuai.xi
8262*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, TRUE);
8263*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8264*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8265*53ee8cc1Swenshuai.xi break;
8266*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_BYPASS:
8267*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
8268*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8269*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, E_GOP_BYPASS_MUX0);
8270*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8271*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8272*53ee8cc1Swenshuai.xi break;
8273*53ee8cc1Swenshuai.xi
8274*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP_DUAL_RATE:
8275*53ee8cc1Swenshuai.xi _GOP_SetOCCapability(pInstance,u8GOP, GopDst);
8276*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance,u8GOP);
8277*53ee8cc1Swenshuai.xi if((!_IsGopInDualOPMux(pInstance,u8GOP)))
8278*53ee8cc1Swenshuai.xi {
8279*53ee8cc1Swenshuai.xi OPMux = _GetNonUseDualOPMux(pInstance);
8280*53ee8cc1Swenshuai.xi if(OPMux != MAX_GOP_MUX_SUPPORT)
8281*53ee8cc1Swenshuai.xi {
8282*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, u8GOP, OPMux);
8283*53ee8cc1Swenshuai.xi }
8284*53ee8cc1Swenshuai.xi }
8285*53ee8cc1Swenshuai.xi MDrv_GOP_SetGOPEnable2SC(g_pGOPCtxLocal, u8GOP, FALSE);
8286*53ee8cc1Swenshuai.xi MDrv_GOP_SelfFirstHs(g_pGOPCtxLocal, u8GOP, FALSE);
8287*53ee8cc1Swenshuai.xi break;
8288*53ee8cc1Swenshuai.xi
8289*53ee8cc1Swenshuai.xi default:
8290*53ee8cc1Swenshuai.xi MS_ASSERT(0);
8291*53ee8cc1Swenshuai.xi return GOP_API_ENUM_NOT_SUPPORTED;
8292*53ee8cc1Swenshuai.xi }
8293*53ee8cc1Swenshuai.xi
8294*53ee8cc1Swenshuai.xi (MDrv_GOP_SetGOPClk(g_pGOPCtxLocal, u8GOP, GopDst));
8295*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal, u8GOP);
8296*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8297*53ee8cc1Swenshuai.xi }
8298*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetDst(void * pInstance,MS_U32 gop,MS_U32 * pDst)8299*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetDst(void* pInstance,MS_U32 gop, MS_U32* pDst)
8300*53ee8cc1Swenshuai.xi {
8301*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8302*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8303*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8304*53ee8cc1Swenshuai.xi #endif
8305*53ee8cc1Swenshuai.xi
8306*53ee8cc1Swenshuai.xi DRV_GOPDstType enDst = E_DRV_GOP_DST_INVALID;
8307*53ee8cc1Swenshuai.xi
8308*53ee8cc1Swenshuai.xi (MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, gop, &enDst));
8309*53ee8cc1Swenshuai.xi _GOP_Map_DRVDst2API_Enum_(pInstance,(EN_GOP_DST_TYPE *)pDst, enDst);
8310*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8311*53ee8cc1Swenshuai.xi
8312*53ee8cc1Swenshuai.xi }
8313*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetMux(void * pInstance,PGOP_SETMUX pGopMuxConfig,MS_U32 u32SizeOfMuxInfo)8314*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetMux(void* pInstance,PGOP_SETMUX pGopMuxConfig, MS_U32 u32SizeOfMuxInfo)
8315*53ee8cc1Swenshuai.xi {
8316*53ee8cc1Swenshuai.xi MS_U8 i;
8317*53ee8cc1Swenshuai.xi Gop_MuxSel EnGOPMux;
8318*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8319*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8320*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8321*53ee8cc1Swenshuai.xi #endif
8322*53ee8cc1Swenshuai.xi
8323*53ee8cc1Swenshuai.xi if(u32SizeOfMuxInfo != sizeof(GOP_SETMUX) || (pGopMuxConfig == NULL))
8324*53ee8cc1Swenshuai.xi {
8325*53ee8cc1Swenshuai.xi GOP_M_ERR("\nthe GOP_MuxConfig is NULL or struct mismatch in drivr\n");
8326*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
8327*53ee8cc1Swenshuai.xi }
8328*53ee8cc1Swenshuai.xi GOP_M_INFO("---%s %d: PID[%td], TID[%td] MuxCount=%tu\n", __FUNCTION__, __LINE__, (ptrdiff_t)getpid(), (ptrdiff_t)MsOS_GetOSThreadID(), (ptrdiff_t)pGopMuxConfig->MuxCount);
8329*53ee8cc1Swenshuai.xi
8330*53ee8cc1Swenshuai.xi #if 0
8331*53ee8cc1Swenshuai.xi for(i=0; i<pGopMuxConfig->u8MuxCounts; i++)
8332*53ee8cc1Swenshuai.xi {
8333*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, pGopMuxConfig->GopMux[i].u8GopIndex, (Gop_MuxSel) pGopMuxConfig->GopMux[i].u8MuxIndex);
8334*53ee8cc1Swenshuai.xi }
8335*53ee8cc1Swenshuai.xi
8336*53ee8cc1Swenshuai.xi #endif
8337*53ee8cc1Swenshuai.xi
8338*53ee8cc1Swenshuai.xi for(i=0; i<pGopMuxConfig->MuxCount; i++)
8339*53ee8cc1Swenshuai.xi {
8340*53ee8cc1Swenshuai.xi _GOP_MAP_MUX_Enum(pInstance,(EN_Gop_MuxSel)pGopMuxConfig->mux[i], &EnGOPMux);
8341*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, pGopMuxConfig->gop[i], EnGOPMux);
8342*53ee8cc1Swenshuai.xi }
8343*53ee8cc1Swenshuai.xi
8344*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8345*53ee8cc1Swenshuai.xi
8346*53ee8cc1Swenshuai.xi }
8347*53ee8cc1Swenshuai.xi
8348*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetMirror(void * pInstance,MS_U32 gop,EN_GOP_MIRROR_TYPE mirror)8349*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetMirror(void* pInstance,MS_U32 gop, EN_GOP_MIRROR_TYPE mirror)
8350*53ee8cc1Swenshuai.xi {
8351*53ee8cc1Swenshuai.xi // To do: to modify and control each gop mirror setting.
8352*53ee8cc1Swenshuai.xi switch(mirror)
8353*53ee8cc1Swenshuai.xi {
8354*53ee8cc1Swenshuai.xi case E_GOP_MIRROR_NONE:
8355*53ee8cc1Swenshuai.xi default:
8356*53ee8cc1Swenshuai.xi {
8357*53ee8cc1Swenshuai.xi GOP_GWIN_SetHMirror(pInstance,FALSE);
8358*53ee8cc1Swenshuai.xi GOP_GWIN_SetVMirror(pInstance,FALSE);
8359*53ee8cc1Swenshuai.xi break;
8360*53ee8cc1Swenshuai.xi }
8361*53ee8cc1Swenshuai.xi case E_GOP_MIRROR_H_ONLY:
8362*53ee8cc1Swenshuai.xi {
8363*53ee8cc1Swenshuai.xi GOP_GWIN_SetHMirror(pInstance,TRUE);
8364*53ee8cc1Swenshuai.xi //GOP_GWIN_SetVMirror(pInstance,FALSE);
8365*53ee8cc1Swenshuai.xi break;
8366*53ee8cc1Swenshuai.xi }
8367*53ee8cc1Swenshuai.xi case E_GOP_MIRROR_H_NONE:
8368*53ee8cc1Swenshuai.xi {
8369*53ee8cc1Swenshuai.xi GOP_GWIN_SetHMirror(pInstance,FALSE);
8370*53ee8cc1Swenshuai.xi break;
8371*53ee8cc1Swenshuai.xi }
8372*53ee8cc1Swenshuai.xi case E_GOP_MIRROR_V_ONLY:
8373*53ee8cc1Swenshuai.xi {
8374*53ee8cc1Swenshuai.xi //GOP_GWIN_SetHMirror(pInstance,FALSE);
8375*53ee8cc1Swenshuai.xi GOP_GWIN_SetVMirror(pInstance,TRUE);
8376*53ee8cc1Swenshuai.xi break;
8377*53ee8cc1Swenshuai.xi }
8378*53ee8cc1Swenshuai.xi case E_GOP_MIRROR_V_NONE:
8379*53ee8cc1Swenshuai.xi {
8380*53ee8cc1Swenshuai.xi GOP_GWIN_SetVMirror(pInstance,FALSE);
8381*53ee8cc1Swenshuai.xi break;
8382*53ee8cc1Swenshuai.xi }
8383*53ee8cc1Swenshuai.xi case E_GOP_MIRROR_HV:
8384*53ee8cc1Swenshuai.xi {
8385*53ee8cc1Swenshuai.xi GOP_GWIN_SetHMirror(pInstance,TRUE);
8386*53ee8cc1Swenshuai.xi GOP_GWIN_SetVMirror(pInstance,TRUE);
8387*53ee8cc1Swenshuai.xi break;
8388*53ee8cc1Swenshuai.xi }
8389*53ee8cc1Swenshuai.xi
8390*53ee8cc1Swenshuai.xi }
8391*53ee8cc1Swenshuai.xi
8392*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8393*53ee8cc1Swenshuai.xi }
8394*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetMirror(void * pInstance,MS_U32 gop,EN_GOP_MIRROR_TYPE * mirror)8395*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetMirror(void* pInstance,MS_U32 gop, EN_GOP_MIRROR_TYPE* mirror)
8396*53ee8cc1Swenshuai.xi {
8397*53ee8cc1Swenshuai.xi MS_BOOL bHMirror;
8398*53ee8cc1Swenshuai.xi MS_BOOL bVMirror;
8399*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8400*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8401*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8402*53ee8cc1Swenshuai.xi #endif
8403*53ee8cc1Swenshuai.xi //need refine
8404*53ee8cc1Swenshuai.xi bHMirror = g_pGOPCtxLocal->pGOPCtxShared->bHMirror;
8405*53ee8cc1Swenshuai.xi bVMirror = g_pGOPCtxLocal->pGOPCtxShared->bVMirror;
8406*53ee8cc1Swenshuai.xi
8407*53ee8cc1Swenshuai.xi if((bHMirror == TRUE)&&(bVMirror == TRUE))
8408*53ee8cc1Swenshuai.xi {
8409*53ee8cc1Swenshuai.xi *mirror = E_GOP_MIRROR_HV;
8410*53ee8cc1Swenshuai.xi }
8411*53ee8cc1Swenshuai.xi else if((bHMirror == TRUE)&&(bVMirror == FALSE))
8412*53ee8cc1Swenshuai.xi {
8413*53ee8cc1Swenshuai.xi *mirror = E_GOP_MIRROR_H_ONLY;
8414*53ee8cc1Swenshuai.xi }
8415*53ee8cc1Swenshuai.xi else if((bHMirror == FALSE)&&(bVMirror == TRUE))
8416*53ee8cc1Swenshuai.xi {
8417*53ee8cc1Swenshuai.xi *mirror = E_GOP_MIRROR_V_ONLY;
8418*53ee8cc1Swenshuai.xi }
8419*53ee8cc1Swenshuai.xi else
8420*53ee8cc1Swenshuai.xi {
8421*53ee8cc1Swenshuai.xi *mirror = E_GOP_MIRROR_NONE;
8422*53ee8cc1Swenshuai.xi }
8423*53ee8cc1Swenshuai.xi
8424*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8425*53ee8cc1Swenshuai.xi }
8426*53ee8cc1Swenshuai.xi
8427*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetStatus(void * pInstance,EN_GOP_STATUS type,MS_U32 * pStatus,MS_U32 u32Size)8428*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetStatus(void* pInstance,EN_GOP_STATUS type, MS_U32* pStatus, MS_U32 u32Size)
8429*53ee8cc1Swenshuai.xi {
8430*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8431*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8432*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8433*53ee8cc1Swenshuai.xi #endif
8434*53ee8cc1Swenshuai.xi
8435*53ee8cc1Swenshuai.xi if(pStatus == NULL)
8436*53ee8cc1Swenshuai.xi {
8437*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] ERROR - Input null pointer on type:%d\n",__FUNCTION__,__LINE__,type);
8438*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8439*53ee8cc1Swenshuai.xi }
8440*53ee8cc1Swenshuai.xi
8441*53ee8cc1Swenshuai.xi switch(type)
8442*53ee8cc1Swenshuai.xi {
8443*53ee8cc1Swenshuai.xi case E_GOP_STATUS_INIT:
8444*53ee8cc1Swenshuai.xi {
8445*53ee8cc1Swenshuai.xi PGOP_INIT_STATUS ptr = (PGOP_INIT_STATUS)pStatus;
8446*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_INIT_STATUS))
8447*53ee8cc1Swenshuai.xi {
8448*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8449*53ee8cc1Swenshuai.xi }
8450*53ee8cc1Swenshuai.xi ptr->bInit = g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[ptr->gop_idx];
8451*53ee8cc1Swenshuai.xi
8452*53ee8cc1Swenshuai.xi break;
8453*53ee8cc1Swenshuai.xi }
8454*53ee8cc1Swenshuai.xi case E_GOP_STATUS_GOP_MAXNUM:
8455*53ee8cc1Swenshuai.xi {
8456*53ee8cc1Swenshuai.xi MS_U8 *pMaxGopNum = (MS_U8 *) pStatus;
8457*53ee8cc1Swenshuai.xi *pMaxGopNum = MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal);
8458*53ee8cc1Swenshuai.xi break;
8459*53ee8cc1Swenshuai.xi }
8460*53ee8cc1Swenshuai.xi case E_GOP_STATUS_GWIN_MAXNUM:
8461*53ee8cc1Swenshuai.xi {
8462*53ee8cc1Swenshuai.xi PGOP_GWIN_NUM ptr = (PGOP_GWIN_NUM)pStatus;
8463*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_GWIN_NUM))
8464*53ee8cc1Swenshuai.xi {
8465*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] Error (%d)\n",__FUNCTION__,__LINE__);
8466*53ee8cc1Swenshuai.xi return (GOP_API_INVALID_PARAMETERS);
8467*53ee8cc1Swenshuai.xi }
8468*53ee8cc1Swenshuai.xi if(ptr->gop_idx > MDrv_GOP_GetMaxGOPNum(g_pGOPCtxLocal))
8469*53ee8cc1Swenshuai.xi {
8470*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] Error (%d)\n",__FUNCTION__,__LINE__);
8471*53ee8cc1Swenshuai.xi return (GOP_API_INVALID_PARAMETERS);
8472*53ee8cc1Swenshuai.xi }
8473*53ee8cc1Swenshuai.xi
8474*53ee8cc1Swenshuai.xi ptr->gwin_num = MDrv_GOP_GetGwinNum(g_pGOPCtxLocal,ptr->gop_idx);
8475*53ee8cc1Swenshuai.xi break;
8476*53ee8cc1Swenshuai.xi }
8477*53ee8cc1Swenshuai.xi case E_GOP_STATUS_GWIN_TOTALNUM:
8478*53ee8cc1Swenshuai.xi {
8479*53ee8cc1Swenshuai.xi MS_U8 *pGwinNum = (MS_U8 *) pStatus;
8480*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
8481*53ee8cc1Swenshuai.xi {
8482*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] Error (%d)\n",__FUNCTION__,__LINE__);
8483*53ee8cc1Swenshuai.xi return (GOP_API_INVALID_PARAMETERS);
8484*53ee8cc1Swenshuai.xi }
8485*53ee8cc1Swenshuai.xi *pGwinNum = (MS_U8)g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum;
8486*53ee8cc1Swenshuai.xi break;
8487*53ee8cc1Swenshuai.xi
8488*53ee8cc1Swenshuai.xi }
8489*53ee8cc1Swenshuai.xi case E_GOP_STATUS_VERSION:
8490*53ee8cc1Swenshuai.xi {
8491*53ee8cc1Swenshuai.xi break;
8492*53ee8cc1Swenshuai.xi }
8493*53ee8cc1Swenshuai.xi case E_GOP_STATUS_MUX:
8494*53ee8cc1Swenshuai.xi {
8495*53ee8cc1Swenshuai.xi
8496*53ee8cc1Swenshuai.xi break;
8497*53ee8cc1Swenshuai.xi }
8498*53ee8cc1Swenshuai.xi case E_GOP_STATUS_CURRENT_GOP:
8499*53ee8cc1Swenshuai.xi {
8500*53ee8cc1Swenshuai.xi MS_U32* pCurrentGop = (MS_U32*)pStatus;
8501*53ee8cc1Swenshuai.xi *pCurrentGop = GOP_GetCurrentGOP(pInstance);
8502*53ee8cc1Swenshuai.xi break;
8503*53ee8cc1Swenshuai.xi }
8504*53ee8cc1Swenshuai.xi case E_GOP_STATUS_CURRENT_GWIN:
8505*53ee8cc1Swenshuai.xi {
8506*53ee8cc1Swenshuai.xi MS_U32* pCurrentGwin = (MS_U32*)pStatus;
8507*53ee8cc1Swenshuai.xi *pCurrentGwin = GOP_GetCurrentGWin(pInstance);
8508*53ee8cc1Swenshuai.xi break;
8509*53ee8cc1Swenshuai.xi }
8510*53ee8cc1Swenshuai.xi case E_GOP_STATUS_CURRENT_FBID:
8511*53ee8cc1Swenshuai.xi {
8512*53ee8cc1Swenshuai.xi MS_U32* pCurrentFbid = (MS_U32*)pStatus;
8513*53ee8cc1Swenshuai.xi *pCurrentFbid = GOP_GetCurrentFBID(pInstance);
8514*53ee8cc1Swenshuai.xi break;
8515*53ee8cc1Swenshuai.xi }
8516*53ee8cc1Swenshuai.xi default:
8517*53ee8cc1Swenshuai.xi {
8518*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] invalid input case:%d\n",__FUNCTION__, type);
8519*53ee8cc1Swenshuai.xi }
8520*53ee8cc1Swenshuai.xi
8521*53ee8cc1Swenshuai.xi }
8522*53ee8cc1Swenshuai.xi
8523*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8524*53ee8cc1Swenshuai.xi
8525*53ee8cc1Swenshuai.xi }
8526*53ee8cc1Swenshuai.xi
8527*53ee8cc1Swenshuai.xi
8528*53ee8cc1Swenshuai.xi
8529*53ee8cc1Swenshuai.xi
8530*53ee8cc1Swenshuai.xi //******************************************************************************
8531*53ee8cc1Swenshuai.xi /// API for Test Pattern Type Select
8532*53ee8cc1Swenshuai.xi /// @param eTstPatternType \b IN: Test Pattern Type
8533*53ee8cc1Swenshuai.xi /// @param MS_U32 u32ARGB \b IN: ARGB Color
8534*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
8535*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
8536*53ee8cc1Swenshuai.xi //******************************************************************************
Ioctl_GOP_TestPattern(void * pInstance,EN_GOP_TST_PATTERN eTstPatternType,MS_U32 u32ARGB)8537*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_TestPattern(void* pInstance,EN_GOP_TST_PATTERN eTstPatternType, MS_U32 u32ARGB)
8538*53ee8cc1Swenshuai.xi {
8539*53ee8cc1Swenshuai.xi DRV_GOP_TSTPATTERN drv_TstPattern;
8540*53ee8cc1Swenshuai.xi EN_GOP_TST_PATTERN eCurTPMode;
8541*53ee8cc1Swenshuai.xi MS_U8 u8CurGOP = 0;
8542*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8543*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8544*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8545*53ee8cc1Swenshuai.xi #endif
8546*53ee8cc1Swenshuai.xi
8547*53ee8cc1Swenshuai.xi
8548*53ee8cc1Swenshuai.xi u8CurGOP = MDrv_GOP_Get(g_pGOPCtxLocal);
8549*53ee8cc1Swenshuai.xi
8550*53ee8cc1Swenshuai.xi if( MDrv_GOP_TestPattern_IsVaild(g_pGOPCtxLocal) != GOP_SUCCESS)
8551*53ee8cc1Swenshuai.xi {
8552*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
8553*53ee8cc1Swenshuai.xi }
8554*53ee8cc1Swenshuai.xi
8555*53ee8cc1Swenshuai.xi //Back up
8556*53ee8cc1Swenshuai.xi eCurTPMode = (EN_GOP_TST_PATTERN)g_pGOPCtxLocal->pGOPCtxShared->GOP_TestPatternMode;
8557*53ee8cc1Swenshuai.xi if(eCurTPMode == E_GOP_TP_DISABLE)
8558*53ee8cc1Swenshuai.xi {
8559*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s (%d)] cur:%d input mode:%d GOPBK Read\n",__FUNCTION__,__LINE__,eCurTPMode, eTstPatternType);
8560*53ee8cc1Swenshuai.xi MDrv_GOP_BNK(g_pGOPCtxLocal, E_DRV_GOP_BNK_READ);
8561*53ee8cc1Swenshuai.xi }
8562*53ee8cc1Swenshuai.xi
8563*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOP_TestPatternMode = eTstPatternType;
8564*53ee8cc1Swenshuai.xi
8565*53ee8cc1Swenshuai.xi memset(&drv_TstPattern, 0, sizeof(DRV_GOP_TSTPATTERN));
8566*53ee8cc1Swenshuai.xi
8567*53ee8cc1Swenshuai.xi switch(eTstPatternType)
8568*53ee8cc1Swenshuai.xi {
8569*53ee8cc1Swenshuai.xi case E_GOP_TP_DISABLE:
8570*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En = 0;
8571*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s (%d)] cur:%d input mode:%d GOPBK write\n",__FUNCTION__,__LINE__,eCurTPMode, eTstPatternType);
8572*53ee8cc1Swenshuai.xi MDrv_GOP_BNK(g_pGOPCtxLocal, E_DRV_GOP_BNK_WRITE);
8573*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8574*53ee8cc1Swenshuai.xi break;
8575*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY16:
8576*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En = 1;
8577*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc= 256/(16-1);
8578*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=1;
8579*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step= (g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /16);
8580*53ee8cc1Swenshuai.xi break;
8581*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY16_INVERSE:
8582*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8583*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = 0xFF;
8584*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = 0xFF;
8585*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = 0xFF;
8586*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(16-1);
8587*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=0;
8588*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /16);
8589*53ee8cc1Swenshuai.xi break;
8590*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY32:
8591*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8592*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(32-1);
8593*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=1;
8594*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /32)-1;
8595*53ee8cc1Swenshuai.xi break;
8596*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY32_INVERSE:
8597*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8598*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = 0xFF;
8599*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = 0xFF;
8600*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = 0xFF;
8601*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(32-1);
8602*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=0;
8603*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /32)-1;
8604*53ee8cc1Swenshuai.xi break;
8605*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY64:
8606*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8607*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(64-1);
8608*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=1;
8609*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /64);
8610*53ee8cc1Swenshuai.xi break;
8611*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY64_INVERSE:
8612*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8613*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = 0xFF;
8614*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = 0xFF;
8615*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = 0xFF;
8616*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(64-1);
8617*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=0;
8618*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /64);
8619*53ee8cc1Swenshuai.xi break;
8620*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY256:
8621*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8622*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(256-1);
8623*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=1;
8624*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /256);
8625*53ee8cc1Swenshuai.xi break;
8626*53ee8cc1Swenshuai.xi case E_GOP_TP_GRAY256_INVERSE:
8627*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8628*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = 0xFF;
8629*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = 0xFF;
8630*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = 0xFF;
8631*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=256/(256-1);
8632*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=0;
8633*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=drv_TstPattern.u8HG_step=drv_TstPattern.u8HB_step=(g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /256);
8634*53ee8cc1Swenshuai.xi break;
8635*53ee8cc1Swenshuai.xi case E_GOP_TP_BLACK:
8636*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8637*53ee8cc1Swenshuai.xi break;
8638*53ee8cc1Swenshuai.xi case E_GOP_TP_WHITE:
8639*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8640*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = 0xFF;
8641*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = 0xFF;
8642*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = 0xFF;
8643*53ee8cc1Swenshuai.xi break;
8644*53ee8cc1Swenshuai.xi case E_GOP_TP_CLR:
8645*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8646*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = u32ARGB>>16;
8647*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = u32ARGB>>8;
8648*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = u32ARGB;
8649*53ee8cc1Swenshuai.xi break;
8650*53ee8cc1Swenshuai.xi case E_GOP_TP_BW_DOT:
8651*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8652*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=127;
8653*53ee8cc1Swenshuai.xi drv_TstPattern.u8VR_inc=drv_TstPattern.u8VG_inc=drv_TstPattern.u8VB_inc=127;
8654*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step=0x1;
8655*53ee8cc1Swenshuai.xi drv_TstPattern.u8HG_step=0x1;
8656*53ee8cc1Swenshuai.xi drv_TstPattern.u8HB_step=0x1;
8657*53ee8cc1Swenshuai.xi drv_TstPattern.u8VR_step=0x1;
8658*53ee8cc1Swenshuai.xi drv_TstPattern.u8VG_step=0x1;
8659*53ee8cc1Swenshuai.xi drv_TstPattern.u8VB_step=0x1;
8660*53ee8cc1Swenshuai.xi break;
8661*53ee8cc1Swenshuai.xi case E_GOP_TP_BW_CROSS:
8662*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8663*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=0xFF;
8664*53ee8cc1Swenshuai.xi drv_TstPattern.u8VR_inc=drv_TstPattern.u8VG_inc=drv_TstPattern.u8VB_inc=0xFF;
8665*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step = drv_TstPattern.u8HG_step = drv_TstPattern.u8HB_step = 128*g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /1920-1;
8666*53ee8cc1Swenshuai.xi drv_TstPattern.u8VR_step = drv_TstPattern.u8VG_step = drv_TstPattern.u8VB_step = 128*g_pGOPCtxLocal->pGOPCtxShared->u16PnlHeight[u8CurGOP] /1080-1;
8667*53ee8cc1Swenshuai.xi break;
8668*53ee8cc1Swenshuai.xi case E_GOP_TP_BW_LINE:
8669*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8670*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=127;
8671*53ee8cc1Swenshuai.xi drv_TstPattern.u8VR_inc=drv_TstPattern.u8VG_inc=drv_TstPattern.u8VB_inc=0;
8672*53ee8cc1Swenshuai.xi break;
8673*53ee8cc1Swenshuai.xi case E_GOP_TP_CLR_BAR:
8674*53ee8cc1Swenshuai.xi drv_TstPattern.u8R_stc = 0xFF;
8675*53ee8cc1Swenshuai.xi drv_TstPattern.u8G_stc = 0xFF;
8676*53ee8cc1Swenshuai.xi drv_TstPattern.u8B_stc = 0xFF;
8677*53ee8cc1Swenshuai.xi break;
8678*53ee8cc1Swenshuai.xi case E_GOP_TP_CLR_BAR_INVERSE:
8679*53ee8cc1Swenshuai.xi drv_TstPattern.bTSTClr_En=1;
8680*53ee8cc1Swenshuai.xi drv_TstPattern.u8TSTClr_Hdup=3;
8681*53ee8cc1Swenshuai.xi drv_TstPattern.u8TSTClr_Vdup=0;
8682*53ee8cc1Swenshuai.xi
8683*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc=drv_TstPattern.u8HG_inc=drv_TstPattern.u8HB_inc=255;
8684*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_inc_signz=drv_TstPattern.u8HG_inc_signz=drv_TstPattern.u8HB_inc_signz=1;
8685*53ee8cc1Swenshuai.xi drv_TstPattern.u8HB_step = 60*g_pGOPCtxLocal->pGOPCtxShared->u16PnlWidth[u8CurGOP] /1920;
8686*53ee8cc1Swenshuai.xi drv_TstPattern.u8HR_step = (drv_TstPattern.u8HB_step << 1) + 1;
8687*53ee8cc1Swenshuai.xi drv_TstPattern.u8HG_step = (drv_TstPattern.u8HR_step << 1) + 1;
8688*53ee8cc1Swenshuai.xi break;
8689*53ee8cc1Swenshuai.xi default:
8690*53ee8cc1Swenshuai.xi return GOP_API_ENUM_NOT_SUPPORTED;
8691*53ee8cc1Swenshuai.xi break;
8692*53ee8cc1Swenshuai.xi }
8693*53ee8cc1Swenshuai.xi
8694*53ee8cc1Swenshuai.xi drv_TstPattern.u8TSTClr_Alpha = u32ARGB>>24;
8695*53ee8cc1Swenshuai.xi
8696*53ee8cc1Swenshuai.xi _GOP_TestPattern(pInstance,&drv_TstPattern);
8697*53ee8cc1Swenshuai.xi
8698*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8699*53ee8cc1Swenshuai.xi
8700*53ee8cc1Swenshuai.xi }
8701*53ee8cc1Swenshuai.xi
8702*53ee8cc1Swenshuai.xi
8703*53ee8cc1Swenshuai.xi
Ioctl_GOP_Set_Stretch(void * pInstance,EN_GOP_STRETCH_TYPE enStretchType,MS_U32 gop,PGOP_STRETCH_INFO pStretchInfo)8704*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Set_Stretch(void* pInstance,EN_GOP_STRETCH_TYPE enStretchType,MS_U32 gop ,PGOP_STRETCH_INFO pStretchInfo)
8705*53ee8cc1Swenshuai.xi {
8706*53ee8cc1Swenshuai.xi MS_BOOL bEn = FALSE;
8707*53ee8cc1Swenshuai.xi DRV_GOPDstType enGopDst = E_DRV_GOP_DST_INVALID;
8708*53ee8cc1Swenshuai.xi EN_GOP_DST_TYPE enApiGopDst = MAX_GOP_DST_SUPPORT;
8709*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8710*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8711*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8712*53ee8cc1Swenshuai.xi #endif
8713*53ee8cc1Swenshuai.xi
8714*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal,gop, &enGopDst);
8715*53ee8cc1Swenshuai.xi
8716*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_WIN)
8717*53ee8cc1Swenshuai.xi {
8718*53ee8cc1Swenshuai.xi _GOP_Map_DRVDst2API_Enum_(pInstance,&enApiGopDst, enGopDst);
8719*53ee8cc1Swenshuai.xi GOP_SetStretchWin(pInstance, gop, enApiGopDst, pStretchInfo->SrcRect.x, pStretchInfo->SrcRect.y,pStretchInfo->SrcRect.w,pStretchInfo->SrcRect.h);
8720*53ee8cc1Swenshuai.xi }
8721*53ee8cc1Swenshuai.xi
8722*53ee8cc1Swenshuai.xi if (enStretchType & E_GOP_STRETCH_WIN_POSITION)
8723*53ee8cc1Swenshuai.xi {
8724*53ee8cc1Swenshuai.xi GOP_SetStretchWinPosition(pInstance,gop, pStretchInfo->SrcRect.x, pStretchInfo->SrcRect.y);
8725*53ee8cc1Swenshuai.xi }
8726*53ee8cc1Swenshuai.xi
8727*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_HSCALE)
8728*53ee8cc1Swenshuai.xi {
8729*53ee8cc1Swenshuai.xi if(pStretchInfo->SrcRect.w != pStretchInfo->DstRect.w)
8730*53ee8cc1Swenshuai.xi {
8731*53ee8cc1Swenshuai.xi bEn = TRUE;
8732*53ee8cc1Swenshuai.xi }
8733*53ee8cc1Swenshuai.xi GOP_Set_Hscale(pInstance,gop,bEn,pStretchInfo->SrcRect.w,pStretchInfo->DstRect.w);
8734*53ee8cc1Swenshuai.xi }
8735*53ee8cc1Swenshuai.xi
8736*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_VSCALE)
8737*53ee8cc1Swenshuai.xi {
8738*53ee8cc1Swenshuai.xi if(pStretchInfo->SrcRect.h != pStretchInfo->DstRect.h)
8739*53ee8cc1Swenshuai.xi {
8740*53ee8cc1Swenshuai.xi bEn = TRUE;
8741*53ee8cc1Swenshuai.xi }
8742*53ee8cc1Swenshuai.xi GOP_Set_Vscale(pInstance,gop,bEn,pStretchInfo->SrcRect.h,pStretchInfo->DstRect.h);
8743*53ee8cc1Swenshuai.xi }
8744*53ee8cc1Swenshuai.xi
8745*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_HSTRETCH_MODE)
8746*53ee8cc1Swenshuai.xi {
8747*53ee8cc1Swenshuai.xi GOP_GWIN_Set_HStretchMode(pInstance,gop,pStretchInfo->enHMode);
8748*53ee8cc1Swenshuai.xi }
8749*53ee8cc1Swenshuai.xi
8750*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_VSTRETCH_MODE)
8751*53ee8cc1Swenshuai.xi {
8752*53ee8cc1Swenshuai.xi GOP_GWIN_Set_VStretchMode(pInstance,gop,pStretchInfo->enVMode);
8753*53ee8cc1Swenshuai.xi }
8754*53ee8cc1Swenshuai.xi
8755*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_TRANSPCOLOR_MODE)
8756*53ee8cc1Swenshuai.xi {
8757*53ee8cc1Swenshuai.xi GOP_GWIN_Set_TranspColorStretchMode(pInstance,gop,pStretchInfo->enTColorMode);
8758*53ee8cc1Swenshuai.xi }
8759*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8760*53ee8cc1Swenshuai.xi }
8761*53ee8cc1Swenshuai.xi
8762*53ee8cc1Swenshuai.xi
Ioctl_GOP_Get_Stretch(void * pInstance,EN_GOP_STRETCH_TYPE enStretchType,MS_U32 gop,PGOP_STRETCH_INFO pStretchInfo)8763*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Get_Stretch(void* pInstance,EN_GOP_STRETCH_TYPE enStretchType,MS_U32 gop ,PGOP_STRETCH_INFO pStretchInfo)
8764*53ee8cc1Swenshuai.xi {
8765*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8766*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8767*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8768*53ee8cc1Swenshuai.xi #endif
8769*53ee8cc1Swenshuai.xi
8770*53ee8cc1Swenshuai.xi if(enStretchType & E_GOP_STRETCH_WIN)
8771*53ee8cc1Swenshuai.xi {
8772*53ee8cc1Swenshuai.xi MS_U16 x,y,w,h;
8773*53ee8cc1Swenshuai.xi
8774*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Get_StretchWin(g_pGOPCtxLocal, gop, &x, &y, &w, &h);
8775*53ee8cc1Swenshuai.xi pStretchInfo->SrcRect.x = (MS_U32)x;
8776*53ee8cc1Swenshuai.xi pStretchInfo->SrcRect.y = (MS_U32)y;
8777*53ee8cc1Swenshuai.xi pStretchInfo->SrcRect.w = (MS_U32)w;
8778*53ee8cc1Swenshuai.xi pStretchInfo->SrcRect.h = (MS_U32)h;
8779*53ee8cc1Swenshuai.xi }
8780*53ee8cc1Swenshuai.xi
8781*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8782*53ee8cc1Swenshuai.xi }
8783*53ee8cc1Swenshuai.xi
8784*53ee8cc1Swenshuai.xi
Ioctl_GOP_GWin_SetProperty(void * pInstance,EN_GOP_GWIN_PROPERTY type,MS_U32 gwin,MS_U32 * pSet,MS_U32 u32Size)8785*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GWin_SetProperty(void* pInstance,EN_GOP_GWIN_PROPERTY type,MS_U32 gwin, MS_U32* pSet, MS_U32 u32Size)
8786*53ee8cc1Swenshuai.xi {
8787*53ee8cc1Swenshuai.xi switch(type)
8788*53ee8cc1Swenshuai.xi {
8789*53ee8cc1Swenshuai.xi case E_GOP_GWIN_BLENDING:
8790*53ee8cc1Swenshuai.xi {
8791*53ee8cc1Swenshuai.xi MS_BOOL bEn;
8792*53ee8cc1Swenshuai.xi PGOP_GWIN_BLENDING pInfo = (PGOP_GWIN_BLENDING)pSet;
8793*53ee8cc1Swenshuai.xi
8794*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_GWIN_BLENDING))
8795*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8796*53ee8cc1Swenshuai.xi
8797*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
8798*53ee8cc1Swenshuai.xi
8799*53ee8cc1Swenshuai.xi GOP_GWIN_SetBlending(pInstance,gwin,pInfo->bEn, pInfo->Coef);
8800*53ee8cc1Swenshuai.xi
8801*53ee8cc1Swenshuai.xi break;
8802*53ee8cc1Swenshuai.xi }
8803*53ee8cc1Swenshuai.xi case E_GOP_GWIN_NEWAPLHA:
8804*53ee8cc1Swenshuai.xi {
8805*53ee8cc1Swenshuai.xi MS_BOOL bEn;
8806*53ee8cc1Swenshuai.xi
8807*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
8808*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8809*53ee8cc1Swenshuai.xi
8810*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
8811*53ee8cc1Swenshuai.xi
8812*53ee8cc1Swenshuai.xi GOP_GWIN_SetNewAlphaMode(pInstance,gwin,bEn);
8813*53ee8cc1Swenshuai.xi break;
8814*53ee8cc1Swenshuai.xi }
8815*53ee8cc1Swenshuai.xi case E_GOP_GWIN_ENABLE:
8816*53ee8cc1Swenshuai.xi {
8817*53ee8cc1Swenshuai.xi MS_BOOL bEn;
8818*53ee8cc1Swenshuai.xi
8819*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
8820*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8821*53ee8cc1Swenshuai.xi
8822*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
8823*53ee8cc1Swenshuai.xi
8824*53ee8cc1Swenshuai.xi GOP_GWIN_SetEnable(pInstance,gwin,bEn);
8825*53ee8cc1Swenshuai.xi
8826*53ee8cc1Swenshuai.xi break;
8827*53ee8cc1Swenshuai.xi }
8828*53ee8cc1Swenshuai.xi case E_GOP_GWIN_BLINK:
8829*53ee8cc1Swenshuai.xi {
8830*53ee8cc1Swenshuai.xi PGOP_GWIN_BLINK pRate = (PGOP_GWIN_BLINK)pSet;
8831*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_GWIN_BLINK))
8832*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8833*53ee8cc1Swenshuai.xi
8834*53ee8cc1Swenshuai.xi GOP_GWIN_SetBlink(pInstance,pRate->bEn,gwin, pRate->rate);
8835*53ee8cc1Swenshuai.xi break;
8836*53ee8cc1Swenshuai.xi }
8837*53ee8cc1Swenshuai.xi case E_GOP_GWIN_SHARE:
8838*53ee8cc1Swenshuai.xi {
8839*53ee8cc1Swenshuai.xi MS_BOOL bEn;
8840*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
8841*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8842*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
8843*53ee8cc1Swenshuai.xi GOP_GWIN_SetGWinShared(pInstance,gwin, bEn);
8844*53ee8cc1Swenshuai.xi break;
8845*53ee8cc1Swenshuai.xi }
8846*53ee8cc1Swenshuai.xi case E_GOP_GWIN_SHARE_CNT:
8847*53ee8cc1Swenshuai.xi {
8848*53ee8cc1Swenshuai.xi MS_U16 u16SharedCnt;
8849*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U16))
8850*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8851*53ee8cc1Swenshuai.xi u16SharedCnt = (MS_U16)*pSet;
8852*53ee8cc1Swenshuai.xi GOP_GWIN_SetGWinSharedCnt(pInstance,gwin, u16SharedCnt);
8853*53ee8cc1Swenshuai.xi break;
8854*53ee8cc1Swenshuai.xi }
8855*53ee8cc1Swenshuai.xi case E_GOP_GWIN_SWITCH_2_GWIN:
8856*53ee8cc1Swenshuai.xi {
8857*53ee8cc1Swenshuai.xi GOP_GWIN_Switch2Gwin(pInstance,gwin,(void*)pSet);
8858*53ee8cc1Swenshuai.xi break;
8859*53ee8cc1Swenshuai.xi }
8860*53ee8cc1Swenshuai.xi case E_GOP_GWIN_3D_MODE:
8861*53ee8cc1Swenshuai.xi {
8862*53ee8cc1Swenshuai.xi GOP_GWIN_3D_MODE *pst3DMode = (GOP_GWIN_3D_MODE *)pSet;
8863*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_GWIN_3D_MODE))
8864*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8865*53ee8cc1Swenshuai.xi GOP_Set3DOSDMode(pInstance,gwin,(MS_U16)pst3DMode->u32MainFBId,(MS_U16)pst3DMode->u32SubFBId,pst3DMode->en3DMode);
8866*53ee8cc1Swenshuai.xi break;
8867*53ee8cc1Swenshuai.xi }
8868*53ee8cc1Swenshuai.xi case E_GOP_GWIN_EXIST:
8869*53ee8cc1Swenshuai.xi {
8870*53ee8cc1Swenshuai.xi break;
8871*53ee8cc1Swenshuai.xi }
8872*53ee8cc1Swenshuai.xi case E_GOP_GWIN_FREE_ID:
8873*53ee8cc1Swenshuai.xi {
8874*53ee8cc1Swenshuai.xi break;
8875*53ee8cc1Swenshuai.xi }
8876*53ee8cc1Swenshuai.xi case E_GOP_GWIN_GET_FB:
8877*53ee8cc1Swenshuai.xi {
8878*53ee8cc1Swenshuai.xi break;
8879*53ee8cc1Swenshuai.xi }
8880*53ee8cc1Swenshuai.xi case E_GOP_GWIN_GET_GOP:
8881*53ee8cc1Swenshuai.xi {
8882*53ee8cc1Swenshuai.xi break;
8883*53ee8cc1Swenshuai.xi }
8884*53ee8cc1Swenshuai.xi case E_GOP_GWIN_GPUTILE:
8885*53ee8cc1Swenshuai.xi {
8886*53ee8cc1Swenshuai.xi EN_GOP_GPU_TILE_MODE tilemode;
8887*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_GPU_TILE_MODE))
8888*53ee8cc1Swenshuai.xi {
8889*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8890*53ee8cc1Swenshuai.xi }
8891*53ee8cc1Swenshuai.xi tilemode = (EN_GOP_GPU_TILE_MODE)*pSet;
8892*53ee8cc1Swenshuai.xi GOP_GWIN_SetGPUtileMode(pInstance,gwin,tilemode);
8893*53ee8cc1Swenshuai.xi break;
8894*53ee8cc1Swenshuai.xi }
8895*53ee8cc1Swenshuai.xi }
8896*53ee8cc1Swenshuai.xi
8897*53ee8cc1Swenshuai.xi
8898*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
8899*53ee8cc1Swenshuai.xi
8900*53ee8cc1Swenshuai.xi }
8901*53ee8cc1Swenshuai.xi
8902*53ee8cc1Swenshuai.xi
8903*53ee8cc1Swenshuai.xi
Ioctl_GOP_GWin_GetProperty(void * pInstance,EN_GOP_GWIN_PROPERTY type,MS_U32 gwin,MS_U32 * pSet,MS_U32 u32Size)8904*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GWin_GetProperty(void* pInstance,EN_GOP_GWIN_PROPERTY type,MS_U32 gwin, MS_U32* pSet, MS_U32 u32Size)
8905*53ee8cc1Swenshuai.xi {
8906*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
8907*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
8908*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
8909*53ee8cc1Swenshuai.xi #endif
8910*53ee8cc1Swenshuai.xi switch(type)
8911*53ee8cc1Swenshuai.xi {
8912*53ee8cc1Swenshuai.xi case E_GOP_GWIN_BLENDING:
8913*53ee8cc1Swenshuai.xi {
8914*53ee8cc1Swenshuai.xi break;
8915*53ee8cc1Swenshuai.xi }
8916*53ee8cc1Swenshuai.xi case E_GOP_GWIN_NEWAPLHA:
8917*53ee8cc1Swenshuai.xi {
8918*53ee8cc1Swenshuai.xi MS_BOOL bEn=FALSE;
8919*53ee8cc1Swenshuai.xi
8920*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
8921*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8922*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetGwinNewAlphaModeEnable(g_pGOPCtxLocal, gwin, &bEn);
8923*53ee8cc1Swenshuai.xi *pSet = bEn;
8924*53ee8cc1Swenshuai.xi
8925*53ee8cc1Swenshuai.xi break;
8926*53ee8cc1Swenshuai.xi }
8927*53ee8cc1Swenshuai.xi case E_GOP_GWIN_ENABLE:
8928*53ee8cc1Swenshuai.xi {
8929*53ee8cc1Swenshuai.xi MS_BOOL *pbEn = (MS_BOOL*)pSet;
8930*53ee8cc1Swenshuai.xi
8931*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
8932*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8933*53ee8cc1Swenshuai.xi
8934*53ee8cc1Swenshuai.xi *pbEn = GOP_GWIN_IsEnable(pInstance,gwin);
8935*53ee8cc1Swenshuai.xi
8936*53ee8cc1Swenshuai.xi break;
8937*53ee8cc1Swenshuai.xi }
8938*53ee8cc1Swenshuai.xi case E_GOP_GWIN_BLINK:
8939*53ee8cc1Swenshuai.xi {
8940*53ee8cc1Swenshuai.xi break;
8941*53ee8cc1Swenshuai.xi }
8942*53ee8cc1Swenshuai.xi case E_GOP_GWIN_SHARE:
8943*53ee8cc1Swenshuai.xi {
8944*53ee8cc1Swenshuai.xi break;
8945*53ee8cc1Swenshuai.xi }
8946*53ee8cc1Swenshuai.xi case E_GOP_GWIN_SHARE_CNT:
8947*53ee8cc1Swenshuai.xi {
8948*53ee8cc1Swenshuai.xi break;
8949*53ee8cc1Swenshuai.xi }
8950*53ee8cc1Swenshuai.xi case E_GOP_GWIN_SWITCH_2_GWIN:
8951*53ee8cc1Swenshuai.xi {
8952*53ee8cc1Swenshuai.xi break;
8953*53ee8cc1Swenshuai.xi }
8954*53ee8cc1Swenshuai.xi case E_GOP_GWIN_3D_MODE:
8955*53ee8cc1Swenshuai.xi {
8956*53ee8cc1Swenshuai.xi break;
8957*53ee8cc1Swenshuai.xi }
8958*53ee8cc1Swenshuai.xi case E_GOP_GWIN_EXIST:
8959*53ee8cc1Swenshuai.xi {
8960*53ee8cc1Swenshuai.xi MS_U8 *pExist = (MS_U8*)pSet;
8961*53ee8cc1Swenshuai.xi
8962*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
8963*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8964*53ee8cc1Swenshuai.xi
8965*53ee8cc1Swenshuai.xi *pExist = (MS_U8)GOP_GWIN_IsGwinExist(pInstance,gwin);
8966*53ee8cc1Swenshuai.xi break;
8967*53ee8cc1Swenshuai.xi }
8968*53ee8cc1Swenshuai.xi case E_GOP_GWIN_FREE_ID:
8969*53ee8cc1Swenshuai.xi {
8970*53ee8cc1Swenshuai.xi MS_U8 *pFreeId = (MS_U8*)pSet;
8971*53ee8cc1Swenshuai.xi
8972*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
8973*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8974*53ee8cc1Swenshuai.xi *pFreeId = (MS_U8)GOP_GWIN_GetFreeWinID(pInstance);
8975*53ee8cc1Swenshuai.xi break;
8976*53ee8cc1Swenshuai.xi }
8977*53ee8cc1Swenshuai.xi case E_GOP_GWIN_GET_FB:
8978*53ee8cc1Swenshuai.xi {
8979*53ee8cc1Swenshuai.xi MS_U32 *pFbId = (MS_U32*)pSet;
8980*53ee8cc1Swenshuai.xi
8981*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
8982*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8983*53ee8cc1Swenshuai.xi
8984*53ee8cc1Swenshuai.xi *pFbId = GOP_GWIN_GetFBfromGWIN(pInstance,gwin);
8985*53ee8cc1Swenshuai.xi break;
8986*53ee8cc1Swenshuai.xi }
8987*53ee8cc1Swenshuai.xi case E_GOP_GWIN_GET_GOP:
8988*53ee8cc1Swenshuai.xi {
8989*53ee8cc1Swenshuai.xi MS_U32 *pGOP = (MS_U32*)pSet;
8990*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
8991*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
8992*53ee8cc1Swenshuai.xi
8993*53ee8cc1Swenshuai.xi *pGOP = (MS_U32)MDrv_DumpGopByGwinId(g_pGOPCtxLocal,gwin);
8994*53ee8cc1Swenshuai.xi break;
8995*53ee8cc1Swenshuai.xi }
8996*53ee8cc1Swenshuai.xi case E_GOP_GWIN_GPUTILE:
8997*53ee8cc1Swenshuai.xi {
8998*53ee8cc1Swenshuai.xi break;
8999*53ee8cc1Swenshuai.xi }
9000*53ee8cc1Swenshuai.xi }
9001*53ee8cc1Swenshuai.xi
9002*53ee8cc1Swenshuai.xi
9003*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9004*53ee8cc1Swenshuai.xi
9005*53ee8cc1Swenshuai.xi }
9006*53ee8cc1Swenshuai.xi
Ioctl_GOP_FB_SetProperty(void * pInstance,EN_GOP_FB_PROPERTY type,MS_U32 FBId,MS_U32 * pSet,MS_U32 u32Size)9007*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_FB_SetProperty(void* pInstance,EN_GOP_FB_PROPERTY type,MS_U32 FBId, MS_U32* pSet, MS_U32 u32Size)
9008*53ee8cc1Swenshuai.xi {
9009*53ee8cc1Swenshuai.xi switch(type)
9010*53ee8cc1Swenshuai.xi {
9011*53ee8cc1Swenshuai.xi case E_GOP_FB_POOLID:
9012*53ee8cc1Swenshuai.xi {
9013*53ee8cc1Swenshuai.xi MS_U8 *pPool = (MS_U8*)pSet;
9014*53ee8cc1Swenshuai.xi
9015*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
9016*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9017*53ee8cc1Swenshuai.xi
9018*53ee8cc1Swenshuai.xi GOP_FB_SEL(pInstance,*pPool);
9019*53ee8cc1Swenshuai.xi break;
9020*53ee8cc1Swenshuai.xi }
9021*53ee8cc1Swenshuai.xi case E_GOP_FB_EXIST:
9022*53ee8cc1Swenshuai.xi {
9023*53ee8cc1Swenshuai.xi break;
9024*53ee8cc1Swenshuai.xi }
9025*53ee8cc1Swenshuai.xi case E_GOP_FB_OBTAIN:
9026*53ee8cc1Swenshuai.xi {
9027*53ee8cc1Swenshuai.xi break;
9028*53ee8cc1Swenshuai.xi }
9029*53ee8cc1Swenshuai.xi }
9030*53ee8cc1Swenshuai.xi
9031*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9032*53ee8cc1Swenshuai.xi }
9033*53ee8cc1Swenshuai.xi
Ioctl_GOP_FB_GetProperty(void * pInstance,EN_GOP_FB_PROPERTY type,MS_U32 FBId,MS_U32 * pSet,MS_U32 u32Size)9034*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_FB_GetProperty(void* pInstance,EN_GOP_FB_PROPERTY type,MS_U32 FBId, MS_U32* pSet, MS_U32 u32Size)
9035*53ee8cc1Swenshuai.xi {
9036*53ee8cc1Swenshuai.xi switch(type)
9037*53ee8cc1Swenshuai.xi {
9038*53ee8cc1Swenshuai.xi case E_GOP_FB_POOLID:
9039*53ee8cc1Swenshuai.xi {
9040*53ee8cc1Swenshuai.xi MS_U8 *pPool = (MS_U8*)pSet;
9041*53ee8cc1Swenshuai.xi
9042*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
9043*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9044*53ee8cc1Swenshuai.xi
9045*53ee8cc1Swenshuai.xi *pPool = (MS_U8)GOP_FB_Get(pInstance);
9046*53ee8cc1Swenshuai.xi break;
9047*53ee8cc1Swenshuai.xi }
9048*53ee8cc1Swenshuai.xi
9049*53ee8cc1Swenshuai.xi case E_GOP_FB_EXIST:
9050*53ee8cc1Swenshuai.xi {
9051*53ee8cc1Swenshuai.xi MS_U8 *pExist = (MS_U8*)pSet;
9052*53ee8cc1Swenshuai.xi
9053*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
9054*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9055*53ee8cc1Swenshuai.xi *pExist = (MS_U8)GOP_GWIN_Is32FBExist(pInstance,FBId);
9056*53ee8cc1Swenshuai.xi break;
9057*53ee8cc1Swenshuai.xi }
9058*53ee8cc1Swenshuai.xi case E_GOP_FB_OBTAIN:
9059*53ee8cc1Swenshuai.xi {
9060*53ee8cc1Swenshuai.xi MS_U32 *pFreeFbID = (MS_U32*)pSet;
9061*53ee8cc1Swenshuai.xi
9062*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
9063*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9064*53ee8cc1Swenshuai.xi *pFreeFbID = (MS_U32)GOP_GWIN_GetFreeFbID(pInstance);
9065*53ee8cc1Swenshuai.xi break;
9066*53ee8cc1Swenshuai.xi }
9067*53ee8cc1Swenshuai.xi }
9068*53ee8cc1Swenshuai.xi
9069*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9070*53ee8cc1Swenshuai.xi }
9071*53ee8cc1Swenshuai.xi
Ioctl_GOP_DWIN_SetProperty(void * pInstance,EN_GOP_DWIN_PROPERTY type,MS_U32 * pSet,MS_U32 u32Size)9072*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_DWIN_SetProperty(void* pInstance,EN_GOP_DWIN_PROPERTY type,MS_U32* pSet, MS_U32 u32Size)
9073*53ee8cc1Swenshuai.xi {
9074*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9075*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9076*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9077*53ee8cc1Swenshuai.xi #endif
9078*53ee8cc1Swenshuai.xi
9079*53ee8cc1Swenshuai.xi switch(type)
9080*53ee8cc1Swenshuai.xi {
9081*53ee8cc1Swenshuai.xi case E_GOP_DWIN_R2Y:
9082*53ee8cc1Swenshuai.xi {
9083*53ee8cc1Swenshuai.xi MS_BOOL bEn;
9084*53ee8cc1Swenshuai.xi
9085*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
9086*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9087*53ee8cc1Swenshuai.xi
9088*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
9089*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_EnableR2YCSC(g_pGOPCtxLocal, bEn);
9090*53ee8cc1Swenshuai.xi break;
9091*53ee8cc1Swenshuai.xi }
9092*53ee8cc1Swenshuai.xi case E_GOP_DWIN_UV_SWAP:
9093*53ee8cc1Swenshuai.xi {
9094*53ee8cc1Swenshuai.xi MS_BOOL bEn;
9095*53ee8cc1Swenshuai.xi
9096*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
9097*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9098*53ee8cc1Swenshuai.xi
9099*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
9100*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetUVSwap(g_pGOPCtxLocal, bEn);
9101*53ee8cc1Swenshuai.xi break;
9102*53ee8cc1Swenshuai.xi }
9103*53ee8cc1Swenshuai.xi case E_GOP_DWIN_UV_SAMPLE:
9104*53ee8cc1Swenshuai.xi {
9105*53ee8cc1Swenshuai.xi EN_GOP_DWIN_UVSAMPLE_Mode enMode;
9106*53ee8cc1Swenshuai.xi
9107*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_DWIN_UVSAMPLE_Mode))
9108*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9109*53ee8cc1Swenshuai.xi
9110*53ee8cc1Swenshuai.xi enMode = (EN_GOP_DWIN_UVSAMPLE_Mode)*pSet;
9111*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetUVSample(g_pGOPCtxLocal, (MS_U8)enMode);
9112*53ee8cc1Swenshuai.xi break;
9113*53ee8cc1Swenshuai.xi }
9114*53ee8cc1Swenshuai.xi case E_GOP_DWIN_SOURCE_SCAN_TYPE:
9115*53ee8cc1Swenshuai.xi {
9116*53ee8cc1Swenshuai.xi EN_GOP_DWIN_SCAN_MODE enMode;
9117*53ee8cc1Swenshuai.xi
9118*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_DWIN_SCAN_MODE))
9119*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9120*53ee8cc1Swenshuai.xi
9121*53ee8cc1Swenshuai.xi enMode = (EN_GOP_DWIN_SCAN_MODE)*pSet;
9122*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SelectSourceScanType(g_pGOPCtxLocal,(EN_GOP_DWIN_SCAN_TYPE)enMode);
9123*53ee8cc1Swenshuai.xi break;
9124*53ee8cc1Swenshuai.xi }
9125*53ee8cc1Swenshuai.xi case E_GOP_DWIN_ALPHA_VALUE:
9126*53ee8cc1Swenshuai.xi {
9127*53ee8cc1Swenshuai.xi MS_U8 u8Value;
9128*53ee8cc1Swenshuai.xi
9129*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
9130*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9131*53ee8cc1Swenshuai.xi
9132*53ee8cc1Swenshuai.xi u8Value = (MS_U8)*pSet;
9133*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetAlphaValue(g_pGOPCtxLocal, u8Value);
9134*53ee8cc1Swenshuai.xi break;
9135*53ee8cc1Swenshuai.xi }
9136*53ee8cc1Swenshuai.xi case E_GOP_DWIN_ALPHA_SOURCE:
9137*53ee8cc1Swenshuai.xi {
9138*53ee8cc1Swenshuai.xi EN_GOP_DWIN_ALPHA_SRC enSource;
9139*53ee8cc1Swenshuai.xi
9140*53ee8cc1Swenshuai.xi if(u32Size != sizeof(EN_GOP_DWIN_ALPHA_SRC))
9141*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9142*53ee8cc1Swenshuai.xi
9143*53ee8cc1Swenshuai.xi enSource = (EN_GOP_DWIN_ALPHA_SRC)*pSet;
9144*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetAlphaSrc(g_pGOPCtxLocal, (MS_U8)enSource);
9145*53ee8cc1Swenshuai.xi break;
9146*53ee8cc1Swenshuai.xi }
9147*53ee8cc1Swenshuai.xi case E_GOP_DWIN_ALPHA_INVERSE:
9148*53ee8cc1Swenshuai.xi {
9149*53ee8cc1Swenshuai.xi MS_BOOL bEn;
9150*53ee8cc1Swenshuai.xi
9151*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
9152*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9153*53ee8cc1Swenshuai.xi
9154*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
9155*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetAlphaInverse(g_pGOPCtxLocal, bEn);
9156*53ee8cc1Swenshuai.xi break;
9157*53ee8cc1Swenshuai.xi }
9158*53ee8cc1Swenshuai.xi case E_GOP_DWIN_SKIP_FRAME:
9159*53ee8cc1Swenshuai.xi {
9160*53ee8cc1Swenshuai.xi MS_U32 u32Count;
9161*53ee8cc1Swenshuai.xi
9162*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
9163*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9164*53ee8cc1Swenshuai.xi
9165*53ee8cc1Swenshuai.xi u32Count = (MS_U32)*pSet;
9166*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetSkipFrame(g_pGOPCtxLocal, u32Count);
9167*53ee8cc1Swenshuai.xi break;
9168*53ee8cc1Swenshuai.xi }
9169*53ee8cc1Swenshuai.xi case E_GOP_DWIN_PINPON:
9170*53ee8cc1Swenshuai.xi {
9171*53ee8cc1Swenshuai.xi PGOP_PINPON_INFO pPinpon = (PGOP_PINPON_INFO)pSet;
9172*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_PINPON_INFO))
9173*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9174*53ee8cc1Swenshuai.xi MDrv_GOP_Set_BufferPINPON(g_pGOPCtxLocal,pPinpon->u64Addr0,pPinpon->u64Addr1);
9175*53ee8cc1Swenshuai.xi break;
9176*53ee8cc1Swenshuai.xi }
9177*53ee8cc1Swenshuai.xi case E_GOP_DWIN_INTERRUP_INFO:
9178*53ee8cc1Swenshuai.xi {
9179*53ee8cc1Swenshuai.xi break;
9180*53ee8cc1Swenshuai.xi }
9181*53ee8cc1Swenshuai.xi case E_GOP_DWIN_CAPTURE_INFO:
9182*53ee8cc1Swenshuai.xi {
9183*53ee8cc1Swenshuai.xi break;
9184*53ee8cc1Swenshuai.xi }
9185*53ee8cc1Swenshuai.xi }
9186*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9187*53ee8cc1Swenshuai.xi }
Ioctl_GOP_DWIN_GetProperty(void * pInstance,EN_GOP_DWIN_PROPERTY type,MS_U32 * pSet,MS_U32 u32Size)9188*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_DWIN_GetProperty(void* pInstance,EN_GOP_DWIN_PROPERTY type,MS_U32* pSet, MS_U32 u32Size)
9189*53ee8cc1Swenshuai.xi {
9190*53ee8cc1Swenshuai.xi switch(type)
9191*53ee8cc1Swenshuai.xi {
9192*53ee8cc1Swenshuai.xi case E_GOP_DWIN_R2Y:
9193*53ee8cc1Swenshuai.xi {
9194*53ee8cc1Swenshuai.xi break;
9195*53ee8cc1Swenshuai.xi }
9196*53ee8cc1Swenshuai.xi case E_GOP_DWIN_UV_SWAP:
9197*53ee8cc1Swenshuai.xi {
9198*53ee8cc1Swenshuai.xi break;
9199*53ee8cc1Swenshuai.xi }
9200*53ee8cc1Swenshuai.xi case E_GOP_DWIN_UV_SAMPLE:
9201*53ee8cc1Swenshuai.xi {
9202*53ee8cc1Swenshuai.xi break;
9203*53ee8cc1Swenshuai.xi }
9204*53ee8cc1Swenshuai.xi case E_GOP_DWIN_SOURCE_SCAN_TYPE:
9205*53ee8cc1Swenshuai.xi {
9206*53ee8cc1Swenshuai.xi break;
9207*53ee8cc1Swenshuai.xi }
9208*53ee8cc1Swenshuai.xi case E_GOP_DWIN_ALPHA_VALUE:
9209*53ee8cc1Swenshuai.xi {
9210*53ee8cc1Swenshuai.xi break;
9211*53ee8cc1Swenshuai.xi }
9212*53ee8cc1Swenshuai.xi case E_GOP_DWIN_ALPHA_SOURCE:
9213*53ee8cc1Swenshuai.xi {
9214*53ee8cc1Swenshuai.xi break;
9215*53ee8cc1Swenshuai.xi }
9216*53ee8cc1Swenshuai.xi case E_GOP_DWIN_ALPHA_INVERSE:
9217*53ee8cc1Swenshuai.xi {
9218*53ee8cc1Swenshuai.xi break;
9219*53ee8cc1Swenshuai.xi }
9220*53ee8cc1Swenshuai.xi case E_GOP_DWIN_SKIP_FRAME:
9221*53ee8cc1Swenshuai.xi {
9222*53ee8cc1Swenshuai.xi break;
9223*53ee8cc1Swenshuai.xi }
9224*53ee8cc1Swenshuai.xi case E_GOP_DWIN_PINPON:
9225*53ee8cc1Swenshuai.xi {
9226*53ee8cc1Swenshuai.xi break;
9227*53ee8cc1Swenshuai.xi }
9228*53ee8cc1Swenshuai.xi case E_GOP_DWIN_INTERRUP_INFO:
9229*53ee8cc1Swenshuai.xi {
9230*53ee8cc1Swenshuai.xi break;
9231*53ee8cc1Swenshuai.xi }
9232*53ee8cc1Swenshuai.xi case E_GOP_DWIN_CAPTURE_INFO:
9233*53ee8cc1Swenshuai.xi {
9234*53ee8cc1Swenshuai.xi break;
9235*53ee8cc1Swenshuai.xi }
9236*53ee8cc1Swenshuai.xi
9237*53ee8cc1Swenshuai.xi }
9238*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9239*53ee8cc1Swenshuai.xi }
9240*53ee8cc1Swenshuai.xi
Ioctl_GOP_MIXER_SetProperty(void * pInstance,EN_GOP_MIXER_PROPERTY type,MS_U32 * pSet,MS_U32 u32Size)9241*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_MIXER_SetProperty(void* pInstance,EN_GOP_MIXER_PROPERTY type,MS_U32* pSet, MS_U32 u32Size)
9242*53ee8cc1Swenshuai.xi {
9243*53ee8cc1Swenshuai.xi switch(type)
9244*53ee8cc1Swenshuai.xi {
9245*53ee8cc1Swenshuai.xi case E_GOP_MIXER_OUTPUT_TIMING:
9246*53ee8cc1Swenshuai.xi {
9247*53ee8cc1Swenshuai.xi PGOP_MIXER_TIMING_INFO pMTInfo = (PGOP_MIXER_TIMING_INFO )pSet;
9248*53ee8cc1Swenshuai.xi
9249*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_MIXER_TIMING_INFO))
9250*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9251*53ee8cc1Swenshuai.xi GOP_MIXER_SetOutputTiming(pInstance,pMTInfo->mode,&(pMTInfo->pMT));
9252*53ee8cc1Swenshuai.xi break;
9253*53ee8cc1Swenshuai.xi }
9254*53ee8cc1Swenshuai.xi case E_GOP_MIXER_TO_OP_OUTPUT_TIMING:
9255*53ee8cc1Swenshuai.xi {
9256*53ee8cc1Swenshuai.xi GOP_Mixer2OPTiming *pMT = (GOP_Mixer2OPTiming *)pSet;
9257*53ee8cc1Swenshuai.xi
9258*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_Mixer2OPTiming))
9259*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9260*53ee8cc1Swenshuai.xi GOP_MIXER_SetMIXER2OPOutputTiming(pInstance,pMT);
9261*53ee8cc1Swenshuai.xi break;
9262*53ee8cc1Swenshuai.xi }
9263*53ee8cc1Swenshuai.xi case E_GOP_MIXER_V_FILTER:
9264*53ee8cc1Swenshuai.xi {
9265*53ee8cc1Swenshuai.xi MS_BOOL bEn;
9266*53ee8cc1Swenshuai.xi
9267*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
9268*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9269*53ee8cc1Swenshuai.xi
9270*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
9271*53ee8cc1Swenshuai.xi GOP_MIXER_EnableVfilter(pInstance,bEn);
9272*53ee8cc1Swenshuai.xi break;
9273*53ee8cc1Swenshuai.xi }
9274*53ee8cc1Swenshuai.xi case E_GOP_MIXER_OLD_BLENDING_MODE:
9275*53ee8cc1Swenshuai.xi {
9276*53ee8cc1Swenshuai.xi GOP_MixerOldBlendingMode* pMOBM;
9277*53ee8cc1Swenshuai.xi
9278*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_MixerOldBlendingMode))
9279*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9280*53ee8cc1Swenshuai.xi
9281*53ee8cc1Swenshuai.xi pMOBM = (GOP_MixerOldBlendingMode*)pSet;
9282*53ee8cc1Swenshuai.xi GOP_MIXER_EnableOldBlendingMode(pInstance, pMOBM->u8GOP, pMOBM->bEnable);
9283*53ee8cc1Swenshuai.xi break;
9284*53ee8cc1Swenshuai.xi }
9285*53ee8cc1Swenshuai.xi }
9286*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9287*53ee8cc1Swenshuai.xi }
9288*53ee8cc1Swenshuai.xi
Ioctl_GOP_MIXER_GetProperty(void * pInstance,EN_GOP_MIXER_PROPERTY type,MS_U32 * pSet,MS_U32 u32Size)9289*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_MIXER_GetProperty(void* pInstance,EN_GOP_MIXER_PROPERTY type,MS_U32* pSet, MS_U32 u32Size)
9290*53ee8cc1Swenshuai.xi {
9291*53ee8cc1Swenshuai.xi switch(type)
9292*53ee8cc1Swenshuai.xi {
9293*53ee8cc1Swenshuai.xi case E_GOP_MIXER_OUTPUT_TIMING:
9294*53ee8cc1Swenshuai.xi {
9295*53ee8cc1Swenshuai.xi break;
9296*53ee8cc1Swenshuai.xi }
9297*53ee8cc1Swenshuai.xi case E_GOP_MIXER_TO_OP_OUTPUT_TIMING:
9298*53ee8cc1Swenshuai.xi {
9299*53ee8cc1Swenshuai.xi break;
9300*53ee8cc1Swenshuai.xi }
9301*53ee8cc1Swenshuai.xi case E_GOP_MIXER_V_FILTER:
9302*53ee8cc1Swenshuai.xi {
9303*53ee8cc1Swenshuai.xi break;
9304*53ee8cc1Swenshuai.xi }
9305*53ee8cc1Swenshuai.xi case E_GOP_MIXER_OLD_BLENDING_MODE:
9306*53ee8cc1Swenshuai.xi {
9307*53ee8cc1Swenshuai.xi break;
9308*53ee8cc1Swenshuai.xi }
9309*53ee8cc1Swenshuai.xi }
9310*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9311*53ee8cc1Swenshuai.xi }
9312*53ee8cc1Swenshuai.xi
Ioctl_GOP_VE_SetProperty(void * pInstance,EN_GOP_VE_PROPERTY type,MS_U32 * pSet,MS_U32 u32Size)9313*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_VE_SetProperty(void* pInstance,EN_GOP_VE_PROPERTY type,MS_U32* pSet, MS_U32 u32Size)
9314*53ee8cc1Swenshuai.xi {
9315*53ee8cc1Swenshuai.xi switch(type)
9316*53ee8cc1Swenshuai.xi {
9317*53ee8cc1Swenshuai.xi case E_GOP_VE_OUTPUT_TIMING:
9318*53ee8cc1Swenshuai.xi {
9319*53ee8cc1Swenshuai.xi PGOP_VE_TIMING_INFO pVEInfo = (PGOP_VE_TIMING_INFO )pSet;
9320*53ee8cc1Swenshuai.xi
9321*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_VE_TIMING_INFO))
9322*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9323*53ee8cc1Swenshuai.xi GOP_VE_SetOutputTiming(pInstance, pVEInfo->mode);
9324*53ee8cc1Swenshuai.xi break;
9325*53ee8cc1Swenshuai.xi }
9326*53ee8cc1Swenshuai.xi }
9327*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9328*53ee8cc1Swenshuai.xi }
9329*53ee8cc1Swenshuai.xi
Ioctl_GOP_MapFB2Win(void * pInstance,MS_U32 fbid,MS_U32 gwin)9330*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_MapFB2Win(void* pInstance,MS_U32 fbid, MS_U32 gwin)
9331*53ee8cc1Swenshuai.xi {
9332*53ee8cc1Swenshuai.xi E_GOP_API_Result eRet=GOP_API_FAIL;
9333*53ee8cc1Swenshuai.xi
9334*53ee8cc1Swenshuai.xi eRet = GOP_MapFB2Win(pInstance,fbid,gwin);
9335*53ee8cc1Swenshuai.xi return eRet;
9336*53ee8cc1Swenshuai.xi }
9337*53ee8cc1Swenshuai.xi
Ioctl_GOP_Dwin_Capture(void * pInstance,PGOP_CAPTURE_INFO pinfo)9338*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Dwin_Capture(void* pInstance,PGOP_CAPTURE_INFO pinfo)
9339*53ee8cc1Swenshuai.xi {
9340*53ee8cc1Swenshuai.xi DRV_GOP_DWIN_INFO DwinInfo;
9341*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9342*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9343*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9344*53ee8cc1Swenshuai.xi #endif
9345*53ee8cc1Swenshuai.xi
9346*53ee8cc1Swenshuai.xi memset(&DwinInfo,0, sizeof(DRV_GOP_DWIN_INFO));
9347*53ee8cc1Swenshuai.xi
9348*53ee8cc1Swenshuai.xi DwinInfo.u16HPixelStart = pinfo->rect.x;
9349*53ee8cc1Swenshuai.xi DwinInfo.u16HPixelEnd = pinfo->rect.x + pinfo->rect.w;
9350*53ee8cc1Swenshuai.xi DwinInfo.u16VPixelStart = pinfo->rect.y;
9351*53ee8cc1Swenshuai.xi DwinInfo.u16VPixelEnd = pinfo->rect.y + pinfo->rect.h;
9352*53ee8cc1Swenshuai.xi
9353*53ee8cc1Swenshuai.xi DwinInfo.u64TFDRAMAddr = pinfo->addr[0];
9354*53ee8cc1Swenshuai.xi DwinInfo.u64BFDRAMAddr = pinfo->addr1[0];
9355*53ee8cc1Swenshuai.xi
9356*53ee8cc1Swenshuai.xi DwinInfo.u8fmt = pinfo->fmt;
9357*53ee8cc1Swenshuai.xi //Fix me : pinfo->pitch is Number of pixels per horizontal line.
9358*53ee8cc1Swenshuai.xi if (pinfo->pitch == pinfo->rect.w)
9359*53ee8cc1Swenshuai.xi {
9360*53ee8cc1Swenshuai.xi DwinInfo.u16DRAMJumpLen = 0; //Pitch and width are qual
9361*53ee8cc1Swenshuai.xi }
9362*53ee8cc1Swenshuai.xi else
9363*53ee8cc1Swenshuai.xi {
9364*53ee8cc1Swenshuai.xi if (GOP_DWIN_FMT_ARGB8888 == pinfo->fmt)
9365*53ee8cc1Swenshuai.xi {
9366*53ee8cc1Swenshuai.xi DwinInfo.u16DRAMJumpLen = (pinfo->pitch - pinfo->rect.w) * 4; // 1 pixel occupy 4 bytes
9367*53ee8cc1Swenshuai.xi }
9368*53ee8cc1Swenshuai.xi else
9369*53ee8cc1Swenshuai.xi {
9370*53ee8cc1Swenshuai.xi DwinInfo.u16DRAMJumpLen = (pinfo->pitch - pinfo->rect.w) * 2; // 1 pixel occupy 2 bytes
9371*53ee8cc1Swenshuai.xi }
9372*53ee8cc1Swenshuai.xi }
9373*53ee8cc1Swenshuai.xi
9374*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetDataFmt(g_pGOPCtxLocal,(DRV_GOP_DWIN_DATA_FMT)pinfo->fmt);
9375*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetSourceSel(g_pGOPCtxLocal,(DRV_GOP_DWIN_SRC_SEL)pinfo->src);
9376*53ee8cc1Swenshuai.xi MDrv_GOP_SetClkForCapture(g_pGOPCtxLocal, (DRV_GOP_DWIN_SRC_SEL)pinfo->src);
9377*53ee8cc1Swenshuai.xi
9378*53ee8cc1Swenshuai.xi
9379*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetMIULen(g_pGOPCtxLocal)< pinfo->addr[0])
9380*53ee8cc1Swenshuai.xi {
9381*53ee8cc1Swenshuai.xi //Check DWIN MIU Setting is correct
9382*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetDWINMIU(g_pGOPCtxLocal)!=1)
9383*53ee8cc1Swenshuai.xi {
9384*53ee8cc1Swenshuai.xi GOP_M_INFO("\n %s %d DWIN fb addr > MIUO length\n", __FUNCTION__,__LINE__);
9385*53ee8cc1Swenshuai.xi MDrv_GOP_SetDWINMIU(g_pGOPCtxLocal, 1);
9386*53ee8cc1Swenshuai.xi }
9387*53ee8cc1Swenshuai.xi }
9388*53ee8cc1Swenshuai.xi else //dwin FB address < MIU0, FB should be in MIU 0
9389*53ee8cc1Swenshuai.xi {
9390*53ee8cc1Swenshuai.xi //Check DWIN MIU Setting is correct, Error handling
9391*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetDWINMIU(g_pGOPCtxLocal)==1)
9392*53ee8cc1Swenshuai.xi {
9393*53ee8cc1Swenshuai.xi GOP_M_INFO("\n %s %d, DWIN MIU setting should be MIU 0\n",__FUNCTION__,__LINE__);
9394*53ee8cc1Swenshuai.xi MDrv_GOP_SetDWINMIU(g_pGOPCtxLocal, 0);
9395*53ee8cc1Swenshuai.xi }
9396*53ee8cc1Swenshuai.xi }
9397*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetMIULen(g_pGOPCtxLocal)< pinfo->addr1[0])
9398*53ee8cc1Swenshuai.xi {
9399*53ee8cc1Swenshuai.xi //Check DWIN MIU Setting is correct
9400*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetDWINMIU(g_pGOPCtxLocal)!=1)
9401*53ee8cc1Swenshuai.xi {
9402*53ee8cc1Swenshuai.xi GOP_M_INFO("\n %s %d DWIN fb addr > MIUO length\n",__FUNCTION__,__LINE__);
9403*53ee8cc1Swenshuai.xi MDrv_GOP_SetDWINMIU(g_pGOPCtxLocal, 1);
9404*53ee8cc1Swenshuai.xi }
9405*53ee8cc1Swenshuai.xi }
9406*53ee8cc1Swenshuai.xi else //dwin FB address < MIU0, FB should be in MIU 0
9407*53ee8cc1Swenshuai.xi {
9408*53ee8cc1Swenshuai.xi //Check DWIN MIU Setting is correct, Error handling
9409*53ee8cc1Swenshuai.xi if (MDrv_GOP_GetDWINMIU(g_pGOPCtxLocal)==1)
9410*53ee8cc1Swenshuai.xi {
9411*53ee8cc1Swenshuai.xi GOP_M_INFO("\n %s %d DWIN MIU setting should be MIU 0\n",__FUNCTION__,__LINE__);
9412*53ee8cc1Swenshuai.xi MDrv_GOP_SetDWINMIU(g_pGOPCtxLocal, 0);
9413*53ee8cc1Swenshuai.xi }
9414*53ee8cc1Swenshuai.xi }
9415*53ee8cc1Swenshuai.xi
9416*53ee8cc1Swenshuai.xi if((DwinInfo.u64TFDRAMAddr-DwinInfo.u64BFDRAMAddr)!=0)
9417*53ee8cc1Swenshuai.xi {
9418*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SetWinInfo(g_pGOPCtxLocal, &DwinInfo);
9419*53ee8cc1Swenshuai.xi }
9420*53ee8cc1Swenshuai.xi else
9421*53ee8cc1Swenshuai.xi {
9422*53ee8cc1Swenshuai.xi if(pinfo->bEn ==TRUE)
9423*53ee8cc1Swenshuai.xi {
9424*53ee8cc1Swenshuai.xi GOP_M_INFO("\n %s %d, DWIN fb addr is invalid\n",__FUNCTION__,__LINE__);
9425*53ee8cc1Swenshuai.xi }
9426*53ee8cc1Swenshuai.xi }
9427*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_SelectSourceScanType(g_pGOPCtxLocal, (EN_GOP_DWIN_SCAN_TYPE)pinfo->bInterlace);
9428*53ee8cc1Swenshuai.xi
9429*53ee8cc1Swenshuai.xi if((pinfo->framecount == 1) && (pinfo->bEn == FALSE)){
9430*53ee8cc1Swenshuai.xi if(pinfo->bWait == TRUE)
9431*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_CaptureOneFrame(g_pGOPCtxLocal);
9432*53ee8cc1Swenshuai.xi else
9433*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_CaptureOneFrame2(g_pGOPCtxLocal);
9434*53ee8cc1Swenshuai.xi }else
9435*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_EnableCaptureStream(g_pGOPCtxLocal, pinfo->bEn);
9436*53ee8cc1Swenshuai.xi
9437*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9438*53ee8cc1Swenshuai.xi }
9439*53ee8cc1Swenshuai.xi
9440*53ee8cc1Swenshuai.xi
Ioctl_GOP_Dwin_Intr(void * pInstance,EN_GOP_DWIN_INTR intr_type,MS_U32 * pIntr,MS_U32 u32Size)9441*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Dwin_Intr(void* pInstance,EN_GOP_DWIN_INTR intr_type, MS_U32* pIntr ,MS_U32 u32Size)
9442*53ee8cc1Swenshuai.xi {
9443*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9444*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9445*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9446*53ee8cc1Swenshuai.xi #endif
9447*53ee8cc1Swenshuai.xi
9448*53ee8cc1Swenshuai.xi switch(intr_type)
9449*53ee8cc1Swenshuai.xi {
9450*53ee8cc1Swenshuai.xi case E_GOP_DWIN_INTR_CONTROL:
9451*53ee8cc1Swenshuai.xi {
9452*53ee8cc1Swenshuai.xi MS_BOOL bEn;
9453*53ee8cc1Swenshuai.xi MS_U32 IntrMask;
9454*53ee8cc1Swenshuai.xi PGOP_DWIN_INTR_CTRL pIntrCtrl = (PGOP_DWIN_INTR_CTRL)pIntr;
9455*53ee8cc1Swenshuai.xi
9456*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_DWIN_INTR_CTRL))
9457*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9458*53ee8cc1Swenshuai.xi
9459*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)pIntrCtrl->intrEn;
9460*53ee8cc1Swenshuai.xi IntrMask = pIntrCtrl->mask;
9461*53ee8cc1Swenshuai.xi
9462*53ee8cc1Swenshuai.xi MDrv_GOP_DWIN_EnableIntr(g_pGOPCtxLocal, IntrMask, bEn);
9463*53ee8cc1Swenshuai.xi
9464*53ee8cc1Swenshuai.xi break;
9465*53ee8cc1Swenshuai.xi }
9466*53ee8cc1Swenshuai.xi case E_GOP_DWIN_INTR_GETINFO:
9467*53ee8cc1Swenshuai.xi {
9468*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U16))
9469*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9470*53ee8cc1Swenshuai.xi
9471*53ee8cc1Swenshuai.xi *pIntr = MDrv_GOP_DWIN_GetIntrStatus(g_pGOPCtxLocal);
9472*53ee8cc1Swenshuai.xi
9473*53ee8cc1Swenshuai.xi break;
9474*53ee8cc1Swenshuai.xi }
9475*53ee8cc1Swenshuai.xi case E_GOP_DWIN_INTR_GETINFO_TIMEOUT:
9476*53ee8cc1Swenshuai.xi {
9477*53ee8cc1Swenshuai.xi PGOP_DWIN_INTR_TIME_OUT pIntrTimeout = (PGOP_DWIN_INTR_TIME_OUT)pIntr;
9478*53ee8cc1Swenshuai.xi
9479*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_DWIN_INTR_TIME_OUT))
9480*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
9481*53ee8cc1Swenshuai.xi GOP_DWIN_GetDWinIntInfoTimeout(pInstance,&pIntrTimeout->DWinIntInfo,pIntrTimeout->u32Timeout);
9482*53ee8cc1Swenshuai.xi break;
9483*53ee8cc1Swenshuai.xi }
9484*53ee8cc1Swenshuai.xi }
9485*53ee8cc1Swenshuai.xi
9486*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9487*53ee8cc1Swenshuai.xi
9488*53ee8cc1Swenshuai.xi }
9489*53ee8cc1Swenshuai.xi
9490*53ee8cc1Swenshuai.xi
9491*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetWinInfo(void * pInstance,MS_U32 gwinId,PGOP_BUFFER_INFO pInfo)9492*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetWinInfo(void* pInstance,MS_U32 gwinId,PGOP_BUFFER_INFO pInfo)
9493*53ee8cc1Swenshuai.xi {
9494*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
9495*53ee8cc1Swenshuai.xi GOP_GwinInfo wininfo;
9496*53ee8cc1Swenshuai.xi DRV_GOP_AFBC_Info sAFBCWinProperty;
9497*53ee8cc1Swenshuai.xi memset(&sAFBCWinProperty, 0, sizeof(DRV_GOP_AFBC_Info));
9498*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9499*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9500*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9501*53ee8cc1Swenshuai.xi #endif
9502*53ee8cc1Swenshuai.xi
9503*53ee8cc1Swenshuai.xi wininfo.clrType = (EN_GOP_COLOR_TYPE)pInfo->fbFmt;
9504*53ee8cc1Swenshuai.xi wininfo.u16DispHPixelStart = pInfo->disp_rect.x;
9505*53ee8cc1Swenshuai.xi wininfo.u16DispVPixelStart = pInfo->disp_rect.y;
9506*53ee8cc1Swenshuai.xi wininfo.u16RBlkHPixSize = pInfo->width;
9507*53ee8cc1Swenshuai.xi wininfo.u16RBlkVPixSize = pInfo->height;
9508*53ee8cc1Swenshuai.xi wininfo.u32DRAMRBlkStart = pInfo->addr;
9509*53ee8cc1Swenshuai.xi wininfo.u16RBlkHRblkSize = pInfo->pitch;
9510*53ee8cc1Swenshuai.xi wininfo.u16DispHPixelEnd = pInfo->disp_rect.x + pInfo->disp_rect.w;
9511*53ee8cc1Swenshuai.xi wininfo.u16DispVPixelEnd = pInfo->disp_rect.y + pInfo->disp_rect.h;
9512*53ee8cc1Swenshuai.xi wininfo.u16WinX = 0;
9513*53ee8cc1Swenshuai.xi wininfo.u16WinY = 0;
9514*53ee8cc1Swenshuai.xi
9515*53ee8cc1Swenshuai.xi if ((wininfo.u16DispHPixelEnd - wininfo.u16DispHPixelStart) > wininfo.u16RBlkHPixSize)
9516*53ee8cc1Swenshuai.xi {
9517*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] display H Area > Buffer, x=%td, w=%td, disp_w=%td\n",__FUNCTION__,__LINE__, (ptrdiff_t)pInfo->disp_rect.x, (ptrdiff_t)pInfo->disp_rect.w, (ptrdiff_t)pInfo->width);
9518*53ee8cc1Swenshuai.xi wininfo.u16DispHPixelEnd = wininfo.u16DispHPixelStart + wininfo.u16RBlkHPixSize;
9519*53ee8cc1Swenshuai.xi }
9520*53ee8cc1Swenshuai.xi if ((wininfo.u16DispVPixelEnd - wininfo.u16DispVPixelStart) > wininfo.u16RBlkVPixSize)
9521*53ee8cc1Swenshuai.xi {
9522*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] display V Area > Buffer, y=%td, h=%td, disp_h=%td\n",__FUNCTION__,__LINE__, (ptrdiff_t)pInfo->disp_rect.y, (ptrdiff_t)pInfo->disp_rect.h, (ptrdiff_t)pInfo->height);
9523*53ee8cc1Swenshuai.xi wininfo.u16DispVPixelEnd = wininfo.u16DispVPixelStart + wininfo.u16RBlkVPixSize;
9524*53ee8cc1Swenshuai.xi }
9525*53ee8cc1Swenshuai.xi
9526*53ee8cc1Swenshuai.xi GOP_M_INFO("\33[0;36m %s:%d u8win = %td \33[m \n",__FUNCTION__,__LINE__, (ptrdiff_t)gwinId);
9527*53ee8cc1Swenshuai.xi
9528*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gwinId))
9529*53ee8cc1Swenshuai.xi {
9530*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gwinId);
9531*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9532*53ee8cc1Swenshuai.xi }
9533*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,gwinId);
9534*53ee8cc1Swenshuai.xi
9535*53ee8cc1Swenshuai.xi if(u8GOP == GOPTYPE.GOP0)
9536*53ee8cc1Swenshuai.xi {
9537*53ee8cc1Swenshuai.xi _SetGop0WinInfo(pInstance,gwinId, &wininfo);
9538*53ee8cc1Swenshuai.xi }
9539*53ee8cc1Swenshuai.xi else if(u8GOP == GOPTYPE.GOP1)
9540*53ee8cc1Swenshuai.xi {
9541*53ee8cc1Swenshuai.xi _SetGop1WinInfo(pInstance,gwinId, &wininfo);
9542*53ee8cc1Swenshuai.xi }
9543*53ee8cc1Swenshuai.xi else
9544*53ee8cc1Swenshuai.xi {
9545*53ee8cc1Swenshuai.xi _SetGop23WinInfo(pInstance,gwinId, &wininfo);
9546*53ee8cc1Swenshuai.xi }
9547*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal->pGopChipProperty->bAFBC_Support[u8GOP]==TRUE)
9548*53ee8cc1Swenshuai.xi {
9549*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16HPixelStart = wininfo.u16DispHPixelStart;
9550*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16HPixelEnd = wininfo.u16DispHPixelEnd;
9551*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16Pitch = wininfo.u16RBlkHRblkSize;
9552*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16VPixelStart = wininfo.u16DispVPixelStart;
9553*53ee8cc1Swenshuai.xi sAFBCWinProperty.u16VPixelEnd= wininfo.u16DispVPixelEnd;
9554*53ee8cc1Swenshuai.xi sAFBCWinProperty.u64DRAMAddr = wininfo.u32DRAMRBlkStart;
9555*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_AFBCSetWindow(g_pGOPCtxLocal, u8GOP, &sAFBCWinProperty,FALSE);
9556*53ee8cc1Swenshuai.xi }
9557*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateReg(g_pGOPCtxLocal,u8GOP);
9558*53ee8cc1Swenshuai.xi
9559*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9560*53ee8cc1Swenshuai.xi }
9561*53ee8cc1Swenshuai.xi
9562*53ee8cc1Swenshuai.xi
9563*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetWinInfo(void * pInstance,MS_U32 gwinId,PGOP_BUFFER_INFO pInfo)9564*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetWinInfo(void* pInstance,MS_U32 gwinId,PGOP_BUFFER_INFO pInfo)
9565*53ee8cc1Swenshuai.xi {
9566*53ee8cc1Swenshuai.xi GOP_GwinInfo wininfo;
9567*53ee8cc1Swenshuai.xi
9568*53ee8cc1Swenshuai.xi
9569*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gwinId))
9570*53ee8cc1Swenshuai.xi {
9571*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gwinId);
9572*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9573*53ee8cc1Swenshuai.xi }
9574*53ee8cc1Swenshuai.xi
9575*53ee8cc1Swenshuai.xi if (pInfo == NULL)
9576*53ee8cc1Swenshuai.xi {
9577*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]pinfo is NULL\n",__FUNCTION__,__LINE__);
9578*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9579*53ee8cc1Swenshuai.xi }
9580*53ee8cc1Swenshuai.xi
9581*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,gwinId)) //To check the gwin is exist
9582*53ee8cc1Swenshuai.xi {
9583*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is not exist\n",__FUNCTION__,__LINE__,(ptrdiff_t)gwinId);
9584*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9585*53ee8cc1Swenshuai.xi //ASSERT(0);
9586*53ee8cc1Swenshuai.xi }
9587*53ee8cc1Swenshuai.xi
9588*53ee8cc1Swenshuai.xi GOP_GetWinInfo(pInstance,gwinId, &wininfo);
9589*53ee8cc1Swenshuai.xi
9590*53ee8cc1Swenshuai.xi pInfo->addr = wininfo.u32DRAMRBlkStart;
9591*53ee8cc1Swenshuai.xi pInfo->disp_rect.x = wininfo.u16DispHPixelStart;
9592*53ee8cc1Swenshuai.xi pInfo->disp_rect.y = wininfo.u16DispVPixelStart;
9593*53ee8cc1Swenshuai.xi pInfo->disp_rect.w = wininfo.u16DispHPixelEnd - wininfo.u16DispHPixelStart;
9594*53ee8cc1Swenshuai.xi pInfo->disp_rect.h = wininfo.u16DispVPixelEnd - wininfo.u16DispVPixelStart;
9595*53ee8cc1Swenshuai.xi pInfo->width = wininfo.u16RBlkHPixSize;
9596*53ee8cc1Swenshuai.xi pInfo->height = wininfo.u16RBlkVPixSize;
9597*53ee8cc1Swenshuai.xi pInfo->pitch = wininfo.u16RBlkHRblkSize;
9598*53ee8cc1Swenshuai.xi pInfo->fbFmt = (MS_U32)wininfo.clrType;
9599*53ee8cc1Swenshuai.xi
9600*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9601*53ee8cc1Swenshuai.xi
9602*53ee8cc1Swenshuai.xi }
9603*53ee8cc1Swenshuai.xi
9604*53ee8cc1Swenshuai.xi
Ioctl_GOP_Win_Enable(void * pInstance,MS_U32 gwinId,MS_BOOL bEn)9605*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Win_Enable(void* pInstance,MS_U32 gwinId,MS_BOOL bEn)
9606*53ee8cc1Swenshuai.xi {
9607*53ee8cc1Swenshuai.xi MS_U16 regval2;
9608*53ee8cc1Swenshuai.xi MS_U32 u32fbId;
9609*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
9610*53ee8cc1Swenshuai.xi MS_U8 gwinNum = 0;
9611*53ee8cc1Swenshuai.xi MS_U8 i;
9612*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9613*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9614*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9615*53ee8cc1Swenshuai.xi #endif
9616*53ee8cc1Swenshuai.xi
9617*53ee8cc1Swenshuai.xi
9618*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,gwinId))
9619*53ee8cc1Swenshuai.xi {
9620*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)gwinId);
9621*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9622*53ee8cc1Swenshuai.xi }
9623*53ee8cc1Swenshuai.xi
9624*53ee8cc1Swenshuai.xi //printf("GWINID=%d,Enable=%d\n",(MS_U8)winId,(MS_U8)bEnable);
9625*53ee8cc1Swenshuai.xi if (!_GOP_GWIN_IsGwinExistInClient(pInstance,gwinId))
9626*53ee8cc1Swenshuai.xi {
9627*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td is not exist\n",__FUNCTION__,__LINE__,(ptrdiff_t)gwinId);
9628*53ee8cc1Swenshuai.xi //__ASSERT(0);
9629*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9630*53ee8cc1Swenshuai.xi }
9631*53ee8cc1Swenshuai.xi
9632*53ee8cc1Swenshuai.xi // printf(" u8win=%02bx, bEnable=%02bx\n",u8win,bEnable);
9633*53ee8cc1Swenshuai.xi u32fbId = g_pGOPCtxLocal->pGOPCtxShared->gwinMap[gwinId].u32CurFBId;
9634*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
9635*53ee8cc1Swenshuai.xi
9636*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
9637*53ee8cc1Swenshuai.xi {
9638*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9639*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9640*53ee8cc1Swenshuai.xi }
9641*53ee8cc1Swenshuai.xi
9642*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
9643*53ee8cc1Swenshuai.xi {
9644*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9645*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9646*53ee8cc1Swenshuai.xi }
9647*53ee8cc1Swenshuai.xi
9648*53ee8cc1Swenshuai.xi if (0 == pwinFB->in_use)
9649*53ee8cc1Swenshuai.xi {
9650*53ee8cc1Swenshuai.xi msWarning(ERR_GWIN_ID_NOT_ALLOCATED);
9651*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GWIN %td not allocated\n",__FUNCTION__,__LINE__,(ptrdiff_t)gwinId);
9652*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9653*53ee8cc1Swenshuai.xi }
9654*53ee8cc1Swenshuai.xi pwinFB->enable = bEn;
9655*53ee8cc1Swenshuai.xi
9656*53ee8cc1Swenshuai.xi for(i = 0; i < (MS_U8)g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum ; i++)
9657*53ee8cc1Swenshuai.xi {
9658*53ee8cc1Swenshuai.xi if(GOP_GWIN_IsEnable(pInstance,i) == TRUE)
9659*53ee8cc1Swenshuai.xi {
9660*53ee8cc1Swenshuai.xi gwinNum |= 1<<i;
9661*53ee8cc1Swenshuai.xi }
9662*53ee8cc1Swenshuai.xi }
9663*53ee8cc1Swenshuai.xi
9664*53ee8cc1Swenshuai.xi regval2 = gwinNum;
9665*53ee8cc1Swenshuai.xi
9666*53ee8cc1Swenshuai.xi if (bEn == 0) // Turn off GOP
9667*53ee8cc1Swenshuai.xi {
9668*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, gwinId, FALSE);
9669*53ee8cc1Swenshuai.xi if ((regval2 & ~(1<<gwinId)) == 0)
9670*53ee8cc1Swenshuai.xi {
9671*53ee8cc1Swenshuai.xi if(fpXCReduceBWForOSD!=NULL)
9672*53ee8cc1Swenshuai.xi {
9673*53ee8cc1Swenshuai.xi fpXCReduceBWForOSD(XC_MAIN_WINDOW, FALSE);
9674*53ee8cc1Swenshuai.xi }
9675*53ee8cc1Swenshuai.xi }
9676*53ee8cc1Swenshuai.xi }
9677*53ee8cc1Swenshuai.xi else //turn on GOP
9678*53ee8cc1Swenshuai.xi {
9679*53ee8cc1Swenshuai.xi //printf("gop on, interlace=%bx\n", IsSrcInterlace());
9680*53ee8cc1Swenshuai.xi if(fpXCReduceBWForOSD!=NULL)
9681*53ee8cc1Swenshuai.xi {
9682*53ee8cc1Swenshuai.xi fpXCReduceBWForOSD(XC_MAIN_WINDOW, TRUE);
9683*53ee8cc1Swenshuai.xi }
9684*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_EnableGwin(g_pGOPCtxLocal, gwinId, TRUE);
9685*53ee8cc1Swenshuai.xi }
9686*53ee8cc1Swenshuai.xi
9687*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9688*53ee8cc1Swenshuai.xi
9689*53ee8cc1Swenshuai.xi }
9690*53ee8cc1Swenshuai.xi
9691*53ee8cc1Swenshuai.xi
9692*53ee8cc1Swenshuai.xi //******************************************************************************
9693*53ee8cc1Swenshuai.xi /// API for set GWIN resolution in one function
9694*53ee8cc1Swenshuai.xi /// @param u8GwinId \b IN: GWin ID
9695*53ee8cc1Swenshuai.xi /// @param u8FbId \b IN: Frame Buffer ID
9696*53ee8cc1Swenshuai.xi /// @param pGwinInfo \b IN: pointer to GOP_GwinInfo structure
9697*53ee8cc1Swenshuai.xi /// @param pStretchInfo \b IN: pointer to GOP_StretchInfo
9698*53ee8cc1Swenshuai.xi /// @param direction \b IN: to decide which direction to stretch
9699*53ee8cc1Swenshuai.xi /// @param u16DstWidth \b IN: set scaled width if H direction is specified
9700*53ee8cc1Swenshuai.xi /// @param u16DstHeight \b IN: set scaled height if V direction is specified
9701*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
9702*53ee8cc1Swenshuai.xi //******************************************************************************
Ioctl_GOP_SetDisplay(void * pInstance,PGOP_GWINDISPLAY_INFO pInfo)9703*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetDisplay(void* pInstance,PGOP_GWINDISPLAY_INFO pInfo)
9704*53ee8cc1Swenshuai.xi {
9705*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
9706*53ee8cc1Swenshuai.xi MS_U32 GwinId = pInfo->gwin;
9707*53ee8cc1Swenshuai.xi MS_U16 u16Tmp, u16OrigWidth = 0;
9708*53ee8cc1Swenshuai.xi MS_U16 gwin_w, stretch_w;
9709*53ee8cc1Swenshuai.xi MS_BOOL u16OrgUpdateRegOnce = FALSE;
9710*53ee8cc1Swenshuai.xi GOP_StretchInfo* pStretchInfo;
9711*53ee8cc1Swenshuai.xi GOP_GwinInfo* pGwinInfo = NULL;
9712*53ee8cc1Swenshuai.xi MS_U32 u32FbId;
9713*53ee8cc1Swenshuai.xi EN_GOP_STRETCH_DIRECTION direction;
9714*53ee8cc1Swenshuai.xi MS_U16 u16DstWidth, u16DstHeight;
9715*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9716*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9717*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9718*53ee8cc1Swenshuai.xi #endif
9719*53ee8cc1Swenshuai.xi
9720*53ee8cc1Swenshuai.xi u32FbId = pInfo->fbid;
9721*53ee8cc1Swenshuai.xi direction = pInfo->dir;
9722*53ee8cc1Swenshuai.xi u16DstWidth = pInfo->dst_size.w;
9723*53ee8cc1Swenshuai.xi u16DstHeight = pInfo->dst_size.h;
9724*53ee8cc1Swenshuai.xi
9725*53ee8cc1Swenshuai.xi pGwinInfo = &(pInfo->gwin_info);
9726*53ee8cc1Swenshuai.xi pStretchInfo = &(pInfo->stretch_info);
9727*53ee8cc1Swenshuai.xi
9728*53ee8cc1Swenshuai.xi u16OrgUpdateRegOnce = g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE];
9729*53ee8cc1Swenshuai.xi //Save old update_reg_once state, and change to update_reg_once=TRUE internally
9730*53ee8cc1Swenshuai.xi if(u16OrgUpdateRegOnce == FALSE)
9731*53ee8cc1Swenshuai.xi {
9732*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = TRUE;
9733*53ee8cc1Swenshuai.xi }
9734*53ee8cc1Swenshuai.xi GOP_MapFB2Win(pInstance,u32FbId,GwinId);
9735*53ee8cc1Swenshuai.xi
9736*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal,GwinId);
9737*53ee8cc1Swenshuai.xi //MApi_GOP_GWIN_Set_STRETCHWIN(u8GOP, pStretchInfo->eDstType,pStretchInfo->x, pStretchInfo->y
9738*53ee8cc1Swenshuai.xi // , pStretchInfo->width, pStretchInfo->height);
9739*53ee8cc1Swenshuai.xi _GOP_Get_StretchWin(pInstance,u8GOP, &u16Tmp, &u16Tmp, &u16OrigWidth, &u16Tmp);
9740*53ee8cc1Swenshuai.xi
9741*53ee8cc1Swenshuai.xi gwin_w = pGwinInfo->u16DispHPixelEnd - pGwinInfo->u16DispHPixelStart;
9742*53ee8cc1Swenshuai.xi
9743*53ee8cc1Swenshuai.xi if(gwin_w > pStretchInfo->width)
9744*53ee8cc1Swenshuai.xi stretch_w = gwin_w;
9745*53ee8cc1Swenshuai.xi else
9746*53ee8cc1Swenshuai.xi stretch_w = pStretchInfo->width;
9747*53ee8cc1Swenshuai.xi
9748*53ee8cc1Swenshuai.xi _GOP_GWIN_Align_StretchWin(pInstance,u8GOP,pStretchInfo->eDstType , &pStretchInfo->x, &pStretchInfo->y, &stretch_w, &pStretchInfo->height, _GOP_GetBPP(pInstance,pGwinInfo->clrType));
9749*53ee8cc1Swenshuai.xi //Store API use stretch window
9750*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchWidth[u8GOP] = stretch_w;
9751*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->u16APIStretchHeight[u8GOP]= pStretchInfo->height;
9752*53ee8cc1Swenshuai.xi
9753*53ee8cc1Swenshuai.xi _GOP_GWIN_Adjust_3DStretchWin(pInstance,u8GOP, &pStretchInfo->x, &pStretchInfo->y, &stretch_w, &pStretchInfo->height);
9754*53ee8cc1Swenshuai.xi if (u16OrigWidth <= stretch_w)//Set a large one, set htt first
9755*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetHTotal(g_pGOPCtxLocal, u8GOP, stretch_w);
9756*53ee8cc1Swenshuai.xi
9757*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetStretchWin(g_pGOPCtxLocal, u8GOP, pStretchInfo->x, pStretchInfo->y, stretch_w, pStretchInfo->height);
9758*53ee8cc1Swenshuai.xi
9759*53ee8cc1Swenshuai.xi if(u16DstWidth <= pStretchInfo->width)
9760*53ee8cc1Swenshuai.xi GOP_Set_Hscale(pInstance,u8GOP,FALSE, pStretchInfo->width, u16DstWidth);
9761*53ee8cc1Swenshuai.xi else if (direction & E_GOP_H_STRETCH)
9762*53ee8cc1Swenshuai.xi GOP_Set_Hscale(pInstance,u8GOP,TRUE, pStretchInfo->width, u16DstWidth);
9763*53ee8cc1Swenshuai.xi
9764*53ee8cc1Swenshuai.xi if(u16DstHeight < pStretchInfo->height)
9765*53ee8cc1Swenshuai.xi GOP_Set_Vscale(pInstance,u8GOP,FALSE, pStretchInfo->height, u16DstHeight);
9766*53ee8cc1Swenshuai.xi else if (direction & E_GOP_V_STRETCH)
9767*53ee8cc1Swenshuai.xi GOP_Set_Vscale(pInstance,u8GOP,TRUE, pStretchInfo->height, u16DstHeight);
9768*53ee8cc1Swenshuai.xi
9769*53ee8cc1Swenshuai.xi GOP_SetWinInfo(pInstance,GwinId,pGwinInfo);
9770*53ee8cc1Swenshuai.xi
9771*53ee8cc1Swenshuai.xi //Restore update_reg_once and trigger register writes in
9772*53ee8cc1Swenshuai.xi if(u16OrgUpdateRegOnce == FALSE)
9773*53ee8cc1Swenshuai.xi {
9774*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = u16OrgUpdateRegOnce;
9775*53ee8cc1Swenshuai.xi }
9776*53ee8cc1Swenshuai.xi
9777*53ee8cc1Swenshuai.xi if (u16OrigWidth > stretch_w)//Set a small one, set htt after Gwin regsiter updated
9778*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetHTotal(g_pGOPCtxLocal, u8GOP, stretch_w);
9779*53ee8cc1Swenshuai.xi
9780*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9781*53ee8cc1Swenshuai.xi }
9782*53ee8cc1Swenshuai.xi
9783*53ee8cc1Swenshuai.xi
9784*53ee8cc1Swenshuai.xi
Ioctl_GOP_Win_Destroy(void * pInstance,MS_U32 gId)9785*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Win_Destroy(void* pInstance,MS_U32 gId)
9786*53ee8cc1Swenshuai.xi {
9787*53ee8cc1Swenshuai.xi E_GOP_API_Result eRet=GOP_API_FAIL;
9788*53ee8cc1Swenshuai.xi eRet = GOP_Win_Destroy(pInstance,gId);
9789*53ee8cc1Swenshuai.xi return eRet;
9790*53ee8cc1Swenshuai.xi }
9791*53ee8cc1Swenshuai.xi
9792*53ee8cc1Swenshuai.xi
Ioctl_GFlip_ClearFlipQueue(void * pInstance,MS_U32 gwin)9793*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GFlip_ClearFlipQueue(void* pInstance,MS_U32 gwin)
9794*53ee8cc1Swenshuai.xi {
9795*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9796*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9797*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9798*53ee8cc1Swenshuai.xi #endif
9799*53ee8cc1Swenshuai.xi return (E_GOP_API_Result)MDrv_GOP_GWIN_ClearFlipQueue(g_pGOPCtxLocal,gwin);
9800*53ee8cc1Swenshuai.xi
9801*53ee8cc1Swenshuai.xi }
9802*53ee8cc1Swenshuai.xi
9803*53ee8cc1Swenshuai.xi
9804*53ee8cc1Swenshuai.xi
Ioctl_GFlip_SwitchGwin(void * pInstance,PGOP_GWIN_FLIP_WIN_INFO pflip)9805*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GFlip_SwitchGwin(void* pInstance,PGOP_GWIN_FLIP_WIN_INFO pflip)
9806*53ee8cc1Swenshuai.xi {
9807*53ee8cc1Swenshuai.xi
9808*53ee8cc1Swenshuai.xi
9809*53ee8cc1Swenshuai.xi switch(pflip->enFlip)
9810*53ee8cc1Swenshuai.xi {
9811*53ee8cc1Swenshuai.xi case GOP_FLIP_BY_FBID:
9812*53ee8cc1Swenshuai.xi GOP_SwitchByFBID(pInstance,pflip->GwinId, pflip->FbId, pflip->WaitTagID, pflip->pQueueCnt);
9813*53ee8cc1Swenshuai.xi break;
9814*53ee8cc1Swenshuai.xi case GOP_FLIP_BY_ADDR:
9815*53ee8cc1Swenshuai.xi GOP_SwitchByAddr(pInstance,pflip->GwinId, pflip->FlipAddr, pflip->SubFlipAddr, pflip->WaitTagID, pflip->pQueueCnt, pflip->b3DEnable);
9816*53ee8cc1Swenshuai.xi break;
9817*53ee8cc1Swenshuai.xi
9818*53ee8cc1Swenshuai.xi }
9819*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9820*53ee8cc1Swenshuai.xi
9821*53ee8cc1Swenshuai.xi }
9822*53ee8cc1Swenshuai.xi
Ioctl_GFlip_SwitchMultiGwin(void * pInstance,PGOP_GWIN_FLIP_MULTI_WIN_INFO pMultiflip)9823*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GFlip_SwitchMultiGwin(void* pInstance,PGOP_GWIN_FLIP_MULTI_WIN_INFO pMultiflip)
9824*53ee8cc1Swenshuai.xi {
9825*53ee8cc1Swenshuai.xi
9826*53ee8cc1Swenshuai.xi
9827*53ee8cc1Swenshuai.xi GOP_MultiSwitchByAddr(pInstance,pMultiflip);
9828*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9829*53ee8cc1Swenshuai.xi
9830*53ee8cc1Swenshuai.xi }
9831*53ee8cc1Swenshuai.xi
9832*53ee8cc1Swenshuai.xi
Ioctl_GOP_FBCreate(void * pInstance,EN_GOP_CREATEBUFFER_TYPE fbtype,PGOP_BUFFER_INFO pBuff,MS_U32 fbId)9833*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_FBCreate(void* pInstance,EN_GOP_CREATEBUFFER_TYPE fbtype,PGOP_BUFFER_INFO pBuff,MS_U32 fbId)
9834*53ee8cc1Swenshuai.xi {
9835*53ee8cc1Swenshuai.xi
9836*53ee8cc1Swenshuai.xi
9837*53ee8cc1Swenshuai.xi if(fbtype == GOP_CREATE_BUFFER)
9838*53ee8cc1Swenshuai.xi GOP_CreateBuffer(pInstance,pBuff,fbId);
9839*53ee8cc1Swenshuai.xi else if(fbtype == GOP_CREATE_BUFFER_BYADDR)
9840*53ee8cc1Swenshuai.xi GOP_CreateBufferByAddr(pInstance,pBuff,fbId);
9841*53ee8cc1Swenshuai.xi
9842*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9843*53ee8cc1Swenshuai.xi
9844*53ee8cc1Swenshuai.xi }
9845*53ee8cc1Swenshuai.xi
9846*53ee8cc1Swenshuai.xi
Ioctl_GOP_FBDestroy(void * pInstance,MS_U32 * pId)9847*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_FBDestroy(void* pInstance,MS_U32* pId)
9848*53ee8cc1Swenshuai.xi {
9849*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
9850*53ee8cc1Swenshuai.xi MS_U32 u32fbId;
9851*53ee8cc1Swenshuai.xi
9852*53ee8cc1Swenshuai.xi u32fbId = *pId;
9853*53ee8cc1Swenshuai.xi
9854*53ee8cc1Swenshuai.xi if (DRV_MAX_GWIN_FB_SUPPORT <= u32fbId)
9855*53ee8cc1Swenshuai.xi {
9856*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_OUT_OF_RANGE);
9857*53ee8cc1Swenshuai.xi MS_DEBUG_MSG( GOP_M_ERR( "%s(u32fbId:%d....), fbId out of bound\n",__FUNCTION__, (ptrdiff_t)u32fbId) );
9858*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
9859*53ee8cc1Swenshuai.xi
9860*53ee8cc1Swenshuai.xi }
9861*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
9862*53ee8cc1Swenshuai.xi
9863*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
9864*53ee8cc1Swenshuai.xi {
9865*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
9866*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
9867*53ee8cc1Swenshuai.xi }
9868*53ee8cc1Swenshuai.xi
9869*53ee8cc1Swenshuai.xi if(0 == pwinFB->in_use)
9870*53ee8cc1Swenshuai.xi {
9871*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_NOT_ALLOCATED);
9872*53ee8cc1Swenshuai.xi MS_DEBUG_MSG( GOP_M_ERR("[%s][%d]: u32fbId=%d is not in existence\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId));
9873*53ee8cc1Swenshuai.xi return GWIN_NO_AVAILABLE;
9874*53ee8cc1Swenshuai.xi
9875*53ee8cc1Swenshuai.xi }
9876*53ee8cc1Swenshuai.xi
9877*53ee8cc1Swenshuai.xi GOP_FB_Destroy(pInstance,u32fbId);
9878*53ee8cc1Swenshuai.xi
9879*53ee8cc1Swenshuai.xi return GWIN_OK;
9880*53ee8cc1Swenshuai.xi
9881*53ee8cc1Swenshuai.xi }
9882*53ee8cc1Swenshuai.xi
Ioctl_GOP_GetFBInfo(void * pInstance,MS_U32 u32fbId,PGOP_BUFFER_INFO pBuff)9883*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_GetFBInfo(void* pInstance,MS_U32 u32fbId, PGOP_BUFFER_INFO pBuff)
9884*53ee8cc1Swenshuai.xi {
9885*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
9886*53ee8cc1Swenshuai.xi
9887*53ee8cc1Swenshuai.xi
9888*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
9889*53ee8cc1Swenshuai.xi {
9890*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9891*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9892*53ee8cc1Swenshuai.xi }
9893*53ee8cc1Swenshuai.xi
9894*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
9895*53ee8cc1Swenshuai.xi
9896*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
9897*53ee8cc1Swenshuai.xi {
9898*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9899*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9900*53ee8cc1Swenshuai.xi }
9901*53ee8cc1Swenshuai.xi
9902*53ee8cc1Swenshuai.xi if(pwinFB->in_use ==0)
9903*53ee8cc1Swenshuai.xi {
9904*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_NOT_ALLOCATED);
9905*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]: u32fbId=%td is not in existence\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9906*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9907*53ee8cc1Swenshuai.xi }
9908*53ee8cc1Swenshuai.xi
9909*53ee8cc1Swenshuai.xi pBuff->addr= pwinFB->addr;
9910*53ee8cc1Swenshuai.xi pBuff->fbFmt = pwinFB->fbFmt;
9911*53ee8cc1Swenshuai.xi pBuff->width = pwinFB->width;
9912*53ee8cc1Swenshuai.xi pBuff->height = pwinFB->height;
9913*53ee8cc1Swenshuai.xi pBuff->pitch = pwinFB->pitch;
9914*53ee8cc1Swenshuai.xi pBuff->disp_rect.x = pwinFB->x0;
9915*53ee8cc1Swenshuai.xi pBuff->disp_rect.w = pwinFB->x1 - pwinFB->x0;
9916*53ee8cc1Swenshuai.xi pBuff->disp_rect.y = pwinFB->y0;
9917*53ee8cc1Swenshuai.xi pBuff->disp_rect.h = pwinFB->y1 - pwinFB->y0;
9918*53ee8cc1Swenshuai.xi
9919*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9920*53ee8cc1Swenshuai.xi
9921*53ee8cc1Swenshuai.xi }
9922*53ee8cc1Swenshuai.xi
Ioctl_GOP_SetFBInfo(void * pInstance,MS_U32 u32fbId,PGOP_BUFFER_INFO pBuff)9923*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_SetFBInfo(void* pInstance,MS_U32 u32fbId, PGOP_BUFFER_INFO pBuff)
9924*53ee8cc1Swenshuai.xi {
9925*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
9926*53ee8cc1Swenshuai.xi
9927*53ee8cc1Swenshuai.xi
9928*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,u32fbId))
9929*53ee8cc1Swenshuai.xi {
9930*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9931*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9932*53ee8cc1Swenshuai.xi }
9933*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,u32fbId);
9934*53ee8cc1Swenshuai.xi
9935*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
9936*53ee8cc1Swenshuai.xi {
9937*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32fbId);
9938*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
9939*53ee8cc1Swenshuai.xi }
9940*53ee8cc1Swenshuai.xi
9941*53ee8cc1Swenshuai.xi pwinFB->enable = 1 ;
9942*53ee8cc1Swenshuai.xi pwinFB->gWinId = 0xFF ;
9943*53ee8cc1Swenshuai.xi pwinFB->fbFmt = pBuff->fbFmt ;
9944*53ee8cc1Swenshuai.xi pwinFB->width = pBuff->width ;
9945*53ee8cc1Swenshuai.xi pwinFB->height = pBuff->height ;
9946*53ee8cc1Swenshuai.xi
9947*53ee8cc1Swenshuai.xi pwinFB->x0 = pBuff->disp_rect.x;
9948*53ee8cc1Swenshuai.xi pwinFB->x1 = pBuff->disp_rect.x + pBuff->disp_rect.w;
9949*53ee8cc1Swenshuai.xi pwinFB->y0 = pBuff->disp_rect.y ;
9950*53ee8cc1Swenshuai.xi pwinFB->y1 = pBuff->disp_rect.y + pBuff->disp_rect.h;
9951*53ee8cc1Swenshuai.xi pwinFB->s_x = 0;
9952*53ee8cc1Swenshuai.xi pwinFB->s_y = 0;
9953*53ee8cc1Swenshuai.xi pwinFB->dispWidth = pBuff->disp_rect.w ;
9954*53ee8cc1Swenshuai.xi pwinFB->dispHeight = pBuff->disp_rect.h;
9955*53ee8cc1Swenshuai.xi
9956*53ee8cc1Swenshuai.xi if(pwinFB->in_use && GOP_WINFB_POOL_NULL== pwinFB->poolId)
9957*53ee8cc1Swenshuai.xi {
9958*53ee8cc1Swenshuai.xi pwinFB->addr = pBuff->addr ;
9959*53ee8cc1Swenshuai.xi pwinFB->size = pBuff->pitch * pBuff->height;
9960*53ee8cc1Swenshuai.xi pwinFB->pitch = pBuff->pitch ;
9961*53ee8cc1Swenshuai.xi }
9962*53ee8cc1Swenshuai.xi
9963*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9964*53ee8cc1Swenshuai.xi }
9965*53ee8cc1Swenshuai.xi
9966*53ee8cc1Swenshuai.xi
GOP_TriggerRegWriteIn(void * pInstance,MS_U32 gop,MS_BOOL bForceWriteIn,MS_BOOL bSync)9967*53ee8cc1Swenshuai.xi MS_U32 GOP_TriggerRegWriteIn(void* pInstance,MS_U32 gop, MS_BOOL bForceWriteIn, MS_BOOL bSync)
9968*53ee8cc1Swenshuai.xi {
9969*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9970*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9971*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9972*53ee8cc1Swenshuai.xi #endif
9973*53ee8cc1Swenshuai.xi
9974*53ee8cc1Swenshuai.xi MDrv_GOP_TriggerRegWriteIn(g_pGOPCtxLocal, gop, bForceWriteIn, bSync);
9975*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9976*53ee8cc1Swenshuai.xi
9977*53ee8cc1Swenshuai.xi
9978*53ee8cc1Swenshuai.xi }
GOP_UpdateOnce(void * pInstance,MS_U32 gop,MS_BOOL bUpdateOnce,MS_BOOL bSync)9979*53ee8cc1Swenshuai.xi MS_U32 GOP_UpdateOnce(void* pInstance,MS_U32 gop, MS_BOOL bUpdateOnce, MS_BOOL bSync)
9980*53ee8cc1Swenshuai.xi {
9981*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9982*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9983*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
9984*53ee8cc1Swenshuai.xi #endif
9985*53ee8cc1Swenshuai.xi
9986*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[GOP_PUBLIC_UPDATE] = bUpdateOnce;
9987*53ee8cc1Swenshuai.xi if(bUpdateOnce == FALSE)
9988*53ee8cc1Swenshuai.xi {
9989*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateRegWithSync(g_pGOPCtxLocal, gop, bSync);
9990*53ee8cc1Swenshuai.xi }
9991*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
9992*53ee8cc1Swenshuai.xi
9993*53ee8cc1Swenshuai.xi }
9994*53ee8cc1Swenshuai.xi
GOP_UpdateCurrentOnce(void * pInstance,MS_U16 u16GopMask,MS_BOOL bUpdateOnce,MS_BOOL bSync)9995*53ee8cc1Swenshuai.xi MS_U32 GOP_UpdateCurrentOnce(void* pInstance, MS_U16 u16GopMask, MS_BOOL bUpdateOnce, MS_BOOL bSync)
9996*53ee8cc1Swenshuai.xi {
9997*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
9998*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
9999*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10000*53ee8cc1Swenshuai.xi #endif
10001*53ee8cc1Swenshuai.xi MS_U16 u16GopIdx = 0;
10002*53ee8cc1Swenshuai.xi for (u16GopIdx = 0; u16GopIdx < MAX_GOP_SUPPORT; u16GopIdx++)
10003*53ee8cc1Swenshuai.xi {
10004*53ee8cc1Swenshuai.xi if ((u16GopMask & (1<<u16GopIdx)) != 0)
10005*53ee8cc1Swenshuai.xi {
10006*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->bUpdateRegOnce[u16GopIdx] = bUpdateOnce;
10007*53ee8cc1Swenshuai.xi }
10008*53ee8cc1Swenshuai.xi }
10009*53ee8cc1Swenshuai.xi if(bUpdateOnce == FALSE)
10010*53ee8cc1Swenshuai.xi {
10011*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_UpdateRegWithMaskSync(g_pGOPCtxLocal, u16GopMask, bSync);
10012*53ee8cc1Swenshuai.xi }
10013*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10014*53ee8cc1Swenshuai.xi
10015*53ee8cc1Swenshuai.xi }
10016*53ee8cc1Swenshuai.xi
Ioctl_GOP_TriggerRegWriteIn(void * pInstance,MS_U32 gop,EN_GOP_UPDATE_TYPE update_type,MS_BOOL bEn,MS_BOOL bSync)10017*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_TriggerRegWriteIn(void* pInstance,MS_U32 gop, EN_GOP_UPDATE_TYPE update_type, MS_BOOL bEn, MS_BOOL bSync)
10018*53ee8cc1Swenshuai.xi {
10019*53ee8cc1Swenshuai.xi
10020*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10021*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10022*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10023*53ee8cc1Swenshuai.xi #endif
10024*53ee8cc1Swenshuai.xi
10025*53ee8cc1Swenshuai.xi switch(update_type)
10026*53ee8cc1Swenshuai.xi {
10027*53ee8cc1Swenshuai.xi case E_GOP_UPDATE_FORCEWRITE:
10028*53ee8cc1Swenshuai.xi {
10029*53ee8cc1Swenshuai.xi GOP_TriggerRegWriteIn(pInstance,gop, bEn, bSync);
10030*53ee8cc1Swenshuai.xi break;
10031*53ee8cc1Swenshuai.xi }
10032*53ee8cc1Swenshuai.xi case E_GOP_UPDATE_CURRENT_ONCE:
10033*53ee8cc1Swenshuai.xi {
10034*53ee8cc1Swenshuai.xi GOP_UpdateCurrentOnce(pInstance, gop, bEn, bSync);
10035*53ee8cc1Swenshuai.xi break;
10036*53ee8cc1Swenshuai.xi }
10037*53ee8cc1Swenshuai.xi default:
10038*53ee8cc1Swenshuai.xi case E_GOP_UPDATE_ONCE:
10039*53ee8cc1Swenshuai.xi {
10040*53ee8cc1Swenshuai.xi GOP_UpdateOnce(pInstance,gop, bEn, bSync);
10041*53ee8cc1Swenshuai.xi break;
10042*53ee8cc1Swenshuai.xi }
10043*53ee8cc1Swenshuai.xi
10044*53ee8cc1Swenshuai.xi }
10045*53ee8cc1Swenshuai.xi
10046*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10047*53ee8cc1Swenshuai.xi
10048*53ee8cc1Swenshuai.xi }
10049*53ee8cc1Swenshuai.xi
10050*53ee8cc1Swenshuai.xi
Ioctl_GOP_Select(void * pInstance,EN_GOP_SELECT_TYPE sel,MS_U32 id,MS_U32 * pSet)10051*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Select(void* pInstance,EN_GOP_SELECT_TYPE sel, MS_U32 id, MS_U32* pSet)
10052*53ee8cc1Swenshuai.xi {
10053*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10054*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10055*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10056*53ee8cc1Swenshuai.xi #endif
10057*53ee8cc1Swenshuai.xi DRV_GOP_CBFmtInfo* FmtInfo = (DRV_GOP_CBFmtInfo*)pSet;
10058*53ee8cc1Swenshuai.xi
10059*53ee8cc1Swenshuai.xi switch(sel)
10060*53ee8cc1Swenshuai.xi {
10061*53ee8cc1Swenshuai.xi case EN_GOP_SEL_GOP:
10062*53ee8cc1Swenshuai.xi {
10063*53ee8cc1Swenshuai.xi if (!_GOP_IsGopNumValid(pInstance,id))
10064*53ee8cc1Swenshuai.xi {
10065*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GOP %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)id);
10066*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10067*53ee8cc1Swenshuai.xi }
10068*53ee8cc1Swenshuai.xi MDrv_GOP_Sel(g_pGOPCtxLocal, id);
10069*53ee8cc1Swenshuai.xi break;
10070*53ee8cc1Swenshuai.xi }
10071*53ee8cc1Swenshuai.xi case EN_GOP_SEL_GWIN:
10072*53ee8cc1Swenshuai.xi break;
10073*53ee8cc1Swenshuai.xi case EN_GOP_SEL_FB:
10074*53ee8cc1Swenshuai.xi {
10075*53ee8cc1Swenshuai.xi MS_U16 fbFmt;
10076*53ee8cc1Swenshuai.xi GOP_WinFB_INFO* pwinFB;
10077*53ee8cc1Swenshuai.xi
10078*53ee8cc1Swenshuai.xi // printf("[%s] We DO NOT suggest to use this function\n",__FUNCTION__);
10079*53ee8cc1Swenshuai.xi // printf("[%s] Please use GFX MApi_GFX_SetDstBufferInfo() !!\n",__FUNCTION__);
10080*53ee8cc1Swenshuai.xi
10081*53ee8cc1Swenshuai.xi if (!_GOP_IsFbIdValid(pInstance,id))
10082*53ee8cc1Swenshuai.xi {
10083*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]FbId %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)id);
10084*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10085*53ee8cc1Swenshuai.xi }
10086*53ee8cc1Swenshuai.xi pwinFB = _GetWinFB(pInstance,id);
10087*53ee8cc1Swenshuai.xi
10088*53ee8cc1Swenshuai.xi if(pwinFB == NULL)
10089*53ee8cc1Swenshuai.xi {
10090*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]GetWinFB Fail : WrongFBID=%td\n",__FUNCTION__,__LINE__,(ptrdiff_t)id);
10091*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10092*53ee8cc1Swenshuai.xi }
10093*53ee8cc1Swenshuai.xi
10094*53ee8cc1Swenshuai.xi if(0 == pwinFB->in_use)
10095*53ee8cc1Swenshuai.xi {
10096*53ee8cc1Swenshuai.xi msWarning(ERR_FB_ID_NOT_ALLOCATED);
10097*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d]: u32fbId=%td is not in existence\n",__FUNCTION__,__LINE__,(ptrdiff_t)id);
10098*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10099*53ee8cc1Swenshuai.xi }
10100*53ee8cc1Swenshuai.xi
10101*53ee8cc1Swenshuai.xi fbFmt = pwinFB->fbFmt;
10102*53ee8cc1Swenshuai.xi if ( (pwinFB->fbFmt & 0xFF) == E_MS_FMT_ARGB1555 )
10103*53ee8cc1Swenshuai.xi fbFmt = E_MS_FMT_ARGB1555_DST | (E_MS_FMT_ARGB1555_DST << 8);
10104*53ee8cc1Swenshuai.xi
10105*53ee8cc1Swenshuai.xi if(fpSetFBFmt != NULL)
10106*53ee8cc1Swenshuai.xi {
10107*53ee8cc1Swenshuai.xi fpSetFBFmt(pwinFB->pitch, pwinFB->addr,fbFmt);
10108*53ee8cc1Swenshuai.xi FmtInfo->u64Addr = pwinFB->addr;
10109*53ee8cc1Swenshuai.xi FmtInfo->u16Pitch = pwinFB->pitch;
10110*53ee8cc1Swenshuai.xi FmtInfo->u16Fmt = fbFmt;
10111*53ee8cc1Swenshuai.xi }
10112*53ee8cc1Swenshuai.xi else
10113*53ee8cc1Swenshuai.xi {
10114*53ee8cc1Swenshuai.xi FmtInfo->u64Addr = pwinFB->addr;
10115*53ee8cc1Swenshuai.xi FmtInfo->u16Pitch = pwinFB->pitch;
10116*53ee8cc1Swenshuai.xi FmtInfo->u16Fmt = fbFmt;
10117*53ee8cc1Swenshuai.xi }
10118*53ee8cc1Swenshuai.xi break;
10119*53ee8cc1Swenshuai.xi }
10120*53ee8cc1Swenshuai.xi }
10121*53ee8cc1Swenshuai.xi
10122*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10123*53ee8cc1Swenshuai.xi
10124*53ee8cc1Swenshuai.xi }
10125*53ee8cc1Swenshuai.xi
Ioctl_GOP_Register_CB(void * pInstance,GOP_CB_TYPE cb_type,void * pCB,MS_U32 u32Size)10126*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Register_CB(void* pInstance,GOP_CB_TYPE cb_type, void* pCB, MS_U32 u32Size)
10127*53ee8cc1Swenshuai.xi {
10128*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
10129*53ee8cc1Swenshuai.xi
10130*53ee8cc1Swenshuai.xi #else
10131*53ee8cc1Swenshuai.xi switch(cb_type)
10132*53ee8cc1Swenshuai.xi {
10133*53ee8cc1Swenshuai.xi case GOP_CB_XC_INTERLACE:
10134*53ee8cc1Swenshuai.xi {
10135*53ee8cc1Swenshuai.xi _fpXCIsInterlace = pCB;
10136*53ee8cc1Swenshuai.xi break;
10137*53ee8cc1Swenshuai.xi }
10138*53ee8cc1Swenshuai.xi case GOP_CB_XC_REDUCE_BW:
10139*53ee8cc1Swenshuai.xi {
10140*53ee8cc1Swenshuai.xi fpXCReduceBWForOSD = pCB;
10141*53ee8cc1Swenshuai.xi break;
10142*53ee8cc1Swenshuai.xi }
10143*53ee8cc1Swenshuai.xi case GOP_CB_XC_PANEL_HSTART:
10144*53ee8cc1Swenshuai.xi {
10145*53ee8cc1Swenshuai.xi _fpXCGetCapHStart = pCB;
10146*53ee8cc1Swenshuai.xi break;
10147*53ee8cc1Swenshuai.xi }
10148*53ee8cc1Swenshuai.xi case GOP_CB_GFX_FBFMT:
10149*53ee8cc1Swenshuai.xi {
10150*53ee8cc1Swenshuai.xi fpSetFBFmt = pCB;
10151*53ee8cc1Swenshuai.xi break;
10152*53ee8cc1Swenshuai.xi }
10153*53ee8cc1Swenshuai.xi case GOP_CB_EVENT_NOTIFY:
10154*53ee8cc1Swenshuai.xi {
10155*53ee8cc1Swenshuai.xi fpEventNotify = pCB;
10156*53ee8cc1Swenshuai.xi break;
10157*53ee8cc1Swenshuai.xi }
10158*53ee8cc1Swenshuai.xi case GOP_CB_DWIN_INFO:
10159*53ee8cc1Swenshuai.xi {
10160*53ee8cc1Swenshuai.xi fpXCSetDwinInfo = pCB;
10161*53ee8cc1Swenshuai.xi break;
10162*53ee8cc1Swenshuai.xi }
10163*53ee8cc1Swenshuai.xi default:
10164*53ee8cc1Swenshuai.xi {
10165*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] invalid input call back function type\n",__FUNCTION__,__LINE__);
10166*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
10167*53ee8cc1Swenshuai.xi }
10168*53ee8cc1Swenshuai.xi }
10169*53ee8cc1Swenshuai.xi #endif
10170*53ee8cc1Swenshuai.xi return (GOP_API_SUCCESS);
10171*53ee8cc1Swenshuai.xi }
10172*53ee8cc1Swenshuai.xi
10173*53ee8cc1Swenshuai.xi
10174*53ee8cc1Swenshuai.xi
10175*53ee8cc1Swenshuai.xi
10176*53ee8cc1Swenshuai.xi
Ioctl_GOP_Palette_EntrySet(void * pInstance,PGOP_PALETTE_ENTRY pClutEntry)10177*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Palette_EntrySet(void* pInstance,PGOP_PALETTE_ENTRY pClutEntry)
10178*53ee8cc1Swenshuai.xi {
10179*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10180*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10181*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10182*53ee8cc1Swenshuai.xi #endif
10183*53ee8cc1Swenshuai.xi
10184*53ee8cc1Swenshuai.xi if(pClutEntry->palSrc == E_GOP_4G_PALETTE)
10185*53ee8cc1Swenshuai.xi {
10186*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetPaletteOpt(g_pGOPCtxLocal,pClutEntry->gop_idx, (DRV_GopPaletteEntry*)pClutEntry->pClut, pClutEntry->start, pClutEntry->end, E_DRV_GOP_PAL_ARGB8888);
10187*53ee8cc1Swenshuai.xi }
10188*53ee8cc1Swenshuai.xi else
10189*53ee8cc1Swenshuai.xi {
10190*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_2GSetPaletteOpt(g_pGOPCtxLocal,pClutEntry->gop_idx, (DRV_GopPaletteEntry*)pClutEntry->pClut, pClutEntry->start, pClutEntry->end);
10191*53ee8cc1Swenshuai.xi }
10192*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10193*53ee8cc1Swenshuai.xi
10194*53ee8cc1Swenshuai.xi }
10195*53ee8cc1Swenshuai.xi
Ioctl_GOP_Palette_EntryGet(void * pInstance,PGOP_PALETTE_ENTRY pClutEntry)10196*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Palette_EntryGet(void* pInstance,PGOP_PALETTE_ENTRY pClutEntry)
10197*53ee8cc1Swenshuai.xi {
10198*53ee8cc1Swenshuai.xi MS_U32 i =0;
10199*53ee8cc1Swenshuai.xi MS_U32 PalVal=0;
10200*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10201*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10202*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10203*53ee8cc1Swenshuai.xi #endif
10204*53ee8cc1Swenshuai.xi
10205*53ee8cc1Swenshuai.xi if(pClutEntry->palSrc == E_GOP_4G_PALETTE)
10206*53ee8cc1Swenshuai.xi {
10207*53ee8cc1Swenshuai.xi for(i=pClutEntry->start; i< pClutEntry->end; i++)
10208*53ee8cc1Swenshuai.xi {
10209*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_ReadPalette(g_pGOPCtxLocal,pClutEntry->gop_idx, i, &PalVal);
10210*53ee8cc1Swenshuai.xi *pClutEntry->pClut = PalVal;
10211*53ee8cc1Swenshuai.xi }
10212*53ee8cc1Swenshuai.xi }
10213*53ee8cc1Swenshuai.xi else
10214*53ee8cc1Swenshuai.xi {
10215*53ee8cc1Swenshuai.xi for(i=pClutEntry->start; i< pClutEntry->end; i++)
10216*53ee8cc1Swenshuai.xi {
10217*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_2GReadPalette(g_pGOPCtxLocal,pClutEntry->gop_idx, i, &PalVal);
10218*53ee8cc1Swenshuai.xi }
10219*53ee8cc1Swenshuai.xi }
10220*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10221*53ee8cc1Swenshuai.xi
10222*53ee8cc1Swenshuai.xi }
10223*53ee8cc1Swenshuai.xi
10224*53ee8cc1Swenshuai.xi
Ioctl_GOP_Palette_Set_Config(void * pInstance,MS_U32 gop,DRV_GopPalReadType type,EN_GOP_PALETTE src)10225*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Palette_Set_Config(void* pInstance,MS_U32 gop, DRV_GopPalReadType type,EN_GOP_PALETTE src)
10226*53ee8cc1Swenshuai.xi {
10227*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10228*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10229*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10230*53ee8cc1Swenshuai.xi #endif
10231*53ee8cc1Swenshuai.xi
10232*53ee8cc1Swenshuai.xi if(src == E_GOP_4G_PALETTE)
10233*53ee8cc1Swenshuai.xi {
10234*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetPaletteRead(g_pGOPCtxLocal,gop, type);
10235*53ee8cc1Swenshuai.xi }
10236*53ee8cc1Swenshuai.xi else
10237*53ee8cc1Swenshuai.xi {
10238*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_2GSetPaletteRead(g_pGOPCtxLocal,gop, type);
10239*53ee8cc1Swenshuai.xi }
10240*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10241*53ee8cc1Swenshuai.xi }
10242*53ee8cc1Swenshuai.xi
Ioctl_GOP_MISC(void * pInstance,EN_GOP_MISC_TYPE type,MS_U32 * pSet,MS_U32 u32Size)10243*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_MISC(void* pInstance,EN_GOP_MISC_TYPE type, MS_U32* pSet, MS_U32 u32Size)
10244*53ee8cc1Swenshuai.xi {
10245*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10246*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10247*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10248*53ee8cc1Swenshuai.xi #endif
10249*53ee8cc1Swenshuai.xi
10250*53ee8cc1Swenshuai.xi switch(type)
10251*53ee8cc1Swenshuai.xi {
10252*53ee8cc1Swenshuai.xi case E_GOP_MISC_ENABLE_T3D:
10253*53ee8cc1Swenshuai.xi {
10254*53ee8cc1Swenshuai.xi MS_BOOL bEn;
10255*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
10256*53ee8cc1Swenshuai.xi {
10257*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10258*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10259*53ee8cc1Swenshuai.xi }
10260*53ee8cc1Swenshuai.xi
10261*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
10262*53ee8cc1Swenshuai.xi GOP_GWIN_EnableT3DMode(pInstance,bEn);
10263*53ee8cc1Swenshuai.xi break;
10264*53ee8cc1Swenshuai.xi }
10265*53ee8cc1Swenshuai.xi case E_GOP_MISC_SET_CAPTURE_CLK:
10266*53ee8cc1Swenshuai.xi {
10267*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
10268*53ee8cc1Swenshuai.xi {
10269*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10270*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10271*53ee8cc1Swenshuai.xi }
10272*53ee8cc1Swenshuai.xi MDrv_GOP_SetClkForCapture(g_pGOPCtxLocal, GOP_DRV_DWIN_SRC_OP);
10273*53ee8cc1Swenshuai.xi break;
10274*53ee8cc1Swenshuai.xi }
10275*53ee8cc1Swenshuai.xi case E_GOP_MISC_POWER_OFF:
10276*53ee8cc1Swenshuai.xi {
10277*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
10278*53ee8cc1Swenshuai.xi {
10279*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10280*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10281*53ee8cc1Swenshuai.xi }
10282*53ee8cc1Swenshuai.xi GOP_PowerOff(pInstance);
10283*53ee8cc1Swenshuai.xi break;
10284*53ee8cc1Swenshuai.xi }
10285*53ee8cc1Swenshuai.xi case E_GOP_MISC_POWER_ON:
10286*53ee8cc1Swenshuai.xi {
10287*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
10288*53ee8cc1Swenshuai.xi {
10289*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10290*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10291*53ee8cc1Swenshuai.xi }
10292*53ee8cc1Swenshuai.xi GOP_PowerOn(pInstance);
10293*53ee8cc1Swenshuai.xi break;
10294*53ee8cc1Swenshuai.xi }
10295*53ee8cc1Swenshuai.xi case E_GOP_MISC_GET_RT_STATUS:
10296*53ee8cc1Swenshuai.xi {
10297*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_ApiStatus))
10298*53ee8cc1Swenshuai.xi {
10299*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10300*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10301*53ee8cc1Swenshuai.xi }
10302*53ee8cc1Swenshuai.xi GOP_ApiStatus *pGopApiSts = (GOP_ApiStatus *)pSet;
10303*53ee8cc1Swenshuai.xi GOP_GetRTStatus(pInstance,pGopApiSts);
10304*53ee8cc1Swenshuai.xi break;
10305*53ee8cc1Swenshuai.xi }
10306*53ee8cc1Swenshuai.xi case E_GOP_MISC_GET_INFO:
10307*53ee8cc1Swenshuai.xi {
10308*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_ApiInfo))
10309*53ee8cc1Swenshuai.xi {
10310*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10311*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10312*53ee8cc1Swenshuai.xi }
10313*53ee8cc1Swenshuai.xi GOP_ApiInfo *pGopApiInfo = (GOP_ApiInfo *)pSet;
10314*53ee8cc1Swenshuai.xi GOP_GetInfo(pInstance,pGopApiInfo);
10315*53ee8cc1Swenshuai.xi break;
10316*53ee8cc1Swenshuai.xi }
10317*53ee8cc1Swenshuai.xi case E_GOP_MISC_AT_EXIT:
10318*53ee8cc1Swenshuai.xi {
10319*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
10320*53ee8cc1Swenshuai.xi {
10321*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10322*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10323*53ee8cc1Swenshuai.xi }
10324*53ee8cc1Swenshuai.xi Ioctl_GOP_AtExit(pInstance);
10325*53ee8cc1Swenshuai.xi break;
10326*53ee8cc1Swenshuai.xi }
10327*53ee8cc1Swenshuai.xi case E_GOP_MISC_OC_FB_INFO:
10328*53ee8cc1Swenshuai.xi {
10329*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_OC_FB_INFO))
10330*53ee8cc1Swenshuai.xi {
10331*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10332*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10333*53ee8cc1Swenshuai.xi }
10334*53ee8cc1Swenshuai.xi PGOP_OC_FB_INFO pOCFbInfo = (PGOP_OC_FB_INFO)(void*)pSet;
10335*53ee8cc1Swenshuai.xi GOP_OC_SetOCFBinfo(pInstance,pOCFbInfo->u64Addr,pOCFbInfo->BankMode,pOCFbInfo->enBufSize);
10336*53ee8cc1Swenshuai.xi break;
10337*53ee8cc1Swenshuai.xi }
10338*53ee8cc1Swenshuai.xi case E_GOP_MISC_TESTPATTERN_ALPHA:
10339*53ee8cc1Swenshuai.xi {
10340*53ee8cc1Swenshuai.xi MS_BOOL bEn;
10341*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_BOOL))
10342*53ee8cc1Swenshuai.xi {
10343*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10344*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10345*53ee8cc1Swenshuai.xi }
10346*53ee8cc1Swenshuai.xi
10347*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*pSet;
10348*53ee8cc1Swenshuai.xi GOP_TestPatternAlpha_Enable(pInstance,bEn);
10349*53ee8cc1Swenshuai.xi break;
10350*53ee8cc1Swenshuai.xi }
10351*53ee8cc1Swenshuai.xi case E_GOP_MISC_DELETE_GWINSIZE:
10352*53ee8cc1Swenshuai.xi {
10353*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_DeleteWinSize_PARAM))
10354*53ee8cc1Swenshuai.xi {
10355*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10356*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10357*53ee8cc1Swenshuai.xi }
10358*53ee8cc1Swenshuai.xi
10359*53ee8cc1Swenshuai.xi GOP_DeleteWinSize_PARAM* gop_VaildSize = (GOP_DeleteWinSize_PARAM*)pSet;
10360*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_DeleteWinHVSize(g_pGOPCtxLocal, gop_VaildSize->u32GOP_idx, gop_VaildSize->u32HSize, gop_VaildSize->u32VSize);
10361*53ee8cc1Swenshuai.xi break;
10362*53ee8cc1Swenshuai.xi }
10363*53ee8cc1Swenshuai.xi case E_GOP_MISC_SET_DBG_LEVEL:
10364*53ee8cc1Swenshuai.xi {
10365*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U32))
10366*53ee8cc1Swenshuai.xi {
10367*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10368*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10369*53ee8cc1Swenshuai.xi }
10370*53ee8cc1Swenshuai.xi u32GOPDbgLevel_mapi= (MS_U32)*pSet;
10371*53ee8cc1Swenshuai.xi MDrv_GOP_SetDbgLevel(*pSet);
10372*53ee8cc1Swenshuai.xi break;
10373*53ee8cc1Swenshuai.xi }
10374*53ee8cc1Swenshuai.xi }
10375*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10376*53ee8cc1Swenshuai.xi }
10377*53ee8cc1Swenshuai.xi
Ioctl_GOP_PowerState(void * pInstance,MS_U32 u32PowerState,void * pModule)10378*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_PowerState(void* pInstance,MS_U32 u32PowerState, void* pModule)
10379*53ee8cc1Swenshuai.xi {
10380*53ee8cc1Swenshuai.xi static MS_U16 u16ActWin = 0;
10381*53ee8cc1Swenshuai.xi
10382*53ee8cc1Swenshuai.xi MS_U8 i=0;
10383*53ee8cc1Swenshuai.xi MS_U32 u32Return = GOP_API_FAIL;
10384*53ee8cc1Swenshuai.xi MS_U8 u8GwinIdx = INVALID_GWIN_ID;
10385*53ee8cc1Swenshuai.xi MS_U16 u16WinNum = 0;
10386*53ee8cc1Swenshuai.xi
10387*53ee8cc1Swenshuai.xi GOP_CTX_DRV_SHARED* pDrvGOPShared=NULL;
10388*53ee8cc1Swenshuai.xi MS_BOOL bNeedInitShared = FALSE;
10389*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10390*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10391*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10392*53ee8cc1Swenshuai.xi #endif
10393*53ee8cc1Swenshuai.xi
10394*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] IoctlGOP STR PowerState=%tx\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32PowerState);
10395*53ee8cc1Swenshuai.xi
10396*53ee8cc1Swenshuai.xi pDrvGOPShared = (GOP_CTX_DRV_SHARED*)MDrv_GOP_GetShareMemory(&bNeedInitShared);
10397*53ee8cc1Swenshuai.xi
10398*53ee8cc1Swenshuai.xi if(pDrvGOPShared->apiCtxShared.bEnableVsyncIntFlip ==FALSE)//Usr RedLine:GFLIP Suspend/Resume
10399*53ee8cc1Swenshuai.xi {
10400*53ee8cc1Swenshuai.xi switch(u32PowerState)
10401*53ee8cc1Swenshuai.xi {
10402*53ee8cc1Swenshuai.xi case E_POWER_SUSPEND:
10403*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] IoctlGOP STR Suspend Start!!!!!\n",__FUNCTION__,__LINE__);
10404*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_PowerState(pInstance, u32PowerState, pModule);
10405*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] IoctlGOP STR Suspend End!!!!!\n",__FUNCTION__,__LINE__);
10406*53ee8cc1Swenshuai.xi u32Return=GOP_API_SUCCESS;
10407*53ee8cc1Swenshuai.xi break;
10408*53ee8cc1Swenshuai.xi case E_POWER_RESUME:
10409*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] IoctlGOP Resume Start!!!!!\n",__FUNCTION__,__LINE__);
10410*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_PowerState(pInstance, u32PowerState, pModule);
10411*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] IoctlGOP STR Resume End!!!!!\n",__FUNCTION__,__LINE__);
10412*53ee8cc1Swenshuai.xi u32Return=GOP_API_SUCCESS;
10413*53ee8cc1Swenshuai.xi break;
10414*53ee8cc1Swenshuai.xi default:
10415*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] PowerState:%tx not Implement now!!!\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32PowerState);
10416*53ee8cc1Swenshuai.xi break;
10417*53ee8cc1Swenshuai.xi }
10418*53ee8cc1Swenshuai.xi }
10419*53ee8cc1Swenshuai.xi else//Kernel RedLine:GFLIP Suspend/Resume
10420*53ee8cc1Swenshuai.xi {
10421*53ee8cc1Swenshuai.xi u16WinNum = (MS_U8)g_pGOPCtxLocal->pGopChipProperty->TotalGwinNum;
10422*53ee8cc1Swenshuai.xi
10423*53ee8cc1Swenshuai.xi switch(u32PowerState)
10424*53ee8cc1Swenshuai.xi {
10425*53ee8cc1Swenshuai.xi case E_POWER_SUSPEND:
10426*53ee8cc1Swenshuai.xi {
10427*53ee8cc1Swenshuai.xi for(i = 0; i < u16WinNum ; i++)
10428*53ee8cc1Swenshuai.xi {
10429*53ee8cc1Swenshuai.xi if(GOP_GWIN_IsEnable(pInstance,i) == TRUE)
10430*53ee8cc1Swenshuai.xi {
10431*53ee8cc1Swenshuai.xi u16ActWin |= 1<<i;
10432*53ee8cc1Swenshuai.xi GOP_GWIN_SetEnable(pInstance,i, FALSE);
10433*53ee8cc1Swenshuai.xi }
10434*53ee8cc1Swenshuai.xi }
10435*53ee8cc1Swenshuai.xi
10436*53ee8cc1Swenshuai.xi }
10437*53ee8cc1Swenshuai.xi break;
10438*53ee8cc1Swenshuai.xi case E_POWER_RESUME:
10439*53ee8cc1Swenshuai.xi {
10440*53ee8cc1Swenshuai.xi if (u16ActWin != INVALID_GWIN_ID)
10441*53ee8cc1Swenshuai.xi {
10442*53ee8cc1Swenshuai.xi for (u8GwinIdx = 0; u8GwinIdx < u16WinNum; u8GwinIdx++)
10443*53ee8cc1Swenshuai.xi {
10444*53ee8cc1Swenshuai.xi if (0 != (u16ActWin & (1<<u8GwinIdx)))
10445*53ee8cc1Swenshuai.xi {
10446*53ee8cc1Swenshuai.xi GOP_GWIN_SetEnable(pInstance,u8GwinIdx, TRUE);
10447*53ee8cc1Swenshuai.xi GOP_GWIN_SetForceWrite(pInstance,TRUE);
10448*53ee8cc1Swenshuai.xi GOP_GWIN_SetForceWrite(pInstance,FALSE);
10449*53ee8cc1Swenshuai.xi }
10450*53ee8cc1Swenshuai.xi }
10451*53ee8cc1Swenshuai.xi }
10452*53ee8cc1Swenshuai.xi else
10453*53ee8cc1Swenshuai.xi {
10454*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] Error!!! Need suspend first!!!\n",__FUNCTION__);
10455*53ee8cc1Swenshuai.xi }
10456*53ee8cc1Swenshuai.xi u16ActWin = 0;
10457*53ee8cc1Swenshuai.xi }
10458*53ee8cc1Swenshuai.xi break;
10459*53ee8cc1Swenshuai.xi default:
10460*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] PowerState:%tx not Implement now!!!\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32PowerState);
10461*53ee8cc1Swenshuai.xi break;
10462*53ee8cc1Swenshuai.xi }
10463*53ee8cc1Swenshuai.xi u32Return=GOP_API_SUCCESS;
10464*53ee8cc1Swenshuai.xi }
10465*53ee8cc1Swenshuai.xi
10466*53ee8cc1Swenshuai.xi return u32Return;
10467*53ee8cc1Swenshuai.xi }
10468*53ee8cc1Swenshuai.xi
Ioctl_GOP_PINPON(void * pInstance,EN_GOP_PINPON_PROPERTY en_pro,MS_U32 * pSet,MS_U32 u32Size)10469*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_PINPON(void* pInstance,EN_GOP_PINPON_PROPERTY en_pro, MS_U32* pSet, MS_U32 u32Size)
10470*53ee8cc1Swenshuai.xi {
10471*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10472*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10473*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10474*53ee8cc1Swenshuai.xi #endif
10475*53ee8cc1Swenshuai.xi switch(en_pro)
10476*53ee8cc1Swenshuai.xi {
10477*53ee8cc1Swenshuai.xi case E_GOP_SET_PINPON:
10478*53ee8cc1Swenshuai.xi {
10479*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_SET_PINPON_INFO))
10480*53ee8cc1Swenshuai.xi {
10481*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10482*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10483*53ee8cc1Swenshuai.xi }
10484*53ee8cc1Swenshuai.xi PGOP_SET_PINPON_INFO pPINPONInfo = (PGOP_SET_PINPON_INFO)pSet;
10485*53ee8cc1Swenshuai.xi
10486*53ee8cc1Swenshuai.xi MS_U8 u8GOP;
10487*53ee8cc1Swenshuai.xi MS_U8 u8FirstGwinByGOP;
10488*53ee8cc1Swenshuai.xi
10489*53ee8cc1Swenshuai.xi u8GOP = MDrv_DumpGopByGwinId(g_pGOPCtxLocal, pPINPONInfo->GwinId);
10490*53ee8cc1Swenshuai.xi u8FirstGwinByGOP = MDrv_GOP_SelGwinIdByGOP(g_pGOPCtxLocal, u8GOP, 0);
10491*53ee8cc1Swenshuai.xi
10492*53ee8cc1Swenshuai.xi //check it is the first gwin on this GOP
10493*53ee8cc1Swenshuai.xi if(pPINPONInfo->GwinId != u8FirstGwinByGOP)
10494*53ee8cc1Swenshuai.xi {
10495*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] gwin:%d PINPON mode only support the first gwin on GOP:%d\n",__FUNCTION__,__LINE__,pPINPONInfo->GwinId,u8GOP);
10496*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10497*53ee8cc1Swenshuai.xi }
10498*53ee8cc1Swenshuai.xi
10499*53ee8cc1Swenshuai.xi MDrv_GOP_Set_PINPON(g_pGOPCtxLocal, u8GOP, pPINPONInfo->bEnable, pPINPONInfo->mode);
10500*53ee8cc1Swenshuai.xi break;
10501*53ee8cc1Swenshuai.xi }
10502*53ee8cc1Swenshuai.xi }
10503*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10504*53ee8cc1Swenshuai.xi }
10505*53ee8cc1Swenshuai.xi
Ioctl_GOP_Fade(void * pInstance,EN_GOP_FADE_SET_TYPE type,MS_U32 * pSet,MS_U32 u32Size)10506*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Fade(void* pInstance,EN_GOP_FADE_SET_TYPE type, MS_U32* pSet, MS_U32 u32Size)
10507*53ee8cc1Swenshuai.xi {
10508*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10509*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10510*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10511*53ee8cc1Swenshuai.xi #endif
10512*53ee8cc1Swenshuai.xi E_GOP_API_Result ret = GOP_API_FAIL;
10513*53ee8cc1Swenshuai.xi switch(type)
10514*53ee8cc1Swenshuai.xi {
10515*53ee8cc1Swenshuai.xi case E_GOP_FADE_CONFIG:
10516*53ee8cc1Swenshuai.xi {
10517*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_FADE_INFO))
10518*53ee8cc1Swenshuai.xi {
10519*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10520*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10521*53ee8cc1Swenshuai.xi }
10522*53ee8cc1Swenshuai.xi PGOP_FADE_INFO pFadeInfo = (PGOP_FADE_INFO)pSet;
10523*53ee8cc1Swenshuai.xi if (!_GOP_IsGwinIdValid(pInstance,pFadeInfo->gwin_idx))
10524*53ee8cc1Swenshuai.xi {
10525*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] GWIN %td is out of range\n",__FUNCTION__,__LINE__,(ptrdiff_t)pFadeInfo->gwin_idx);
10526*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10527*53ee8cc1Swenshuai.xi }
10528*53ee8cc1Swenshuai.xi if ( (pFadeInfo->eGwinFadeType!=E_GOP_GWIN_FADE_TYPE_IN) && (pFadeInfo->eGwinFadeType!=E_GOP_GWIN_FADE_TYPE_OUT))
10529*53ee8cc1Swenshuai.xi {
10530*53ee8cc1Swenshuai.xi APIGOP_ASSERT(FALSE, GOP_M_FATAL("\n[%s][%d] unknow gop fade type", __FUNCTION__,__LINE__));
10531*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10532*53ee8cc1Swenshuai.xi }
10533*53ee8cc1Swenshuai.xi
10534*53ee8cc1Swenshuai.xi ret= (E_GOP_API_Result)MDrv_GOP_GWIN_SetFadeInOut(g_pGOPCtxLocal, pFadeInfo->gwin_idx, (DRV_GOP_FADE_TYPE)pFadeInfo->eGwinFadeType, pFadeInfo->bEnable, pFadeInfo->u8FadeRate);
10535*53ee8cc1Swenshuai.xi break;
10536*53ee8cc1Swenshuai.xi }
10537*53ee8cc1Swenshuai.xi }
10538*53ee8cc1Swenshuai.xi return ret;
10539*53ee8cc1Swenshuai.xi }
10540*53ee8cc1Swenshuai.xi
10541*53ee8cc1Swenshuai.xi
Ioctl_GOP_Scroll(void * pInstance,EN_GOP_SCROLL_TYPE type,MS_U32 * pSet,MS_U32 u32Size)10542*53ee8cc1Swenshuai.xi MS_U32 Ioctl_GOP_Scroll(void* pInstance,EN_GOP_SCROLL_TYPE type, MS_U32* pSet, MS_U32 u32Size)
10543*53ee8cc1Swenshuai.xi {
10544*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10545*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10546*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10547*53ee8cc1Swenshuai.xi #endif
10548*53ee8cc1Swenshuai.xi
10549*53ee8cc1Swenshuai.xi switch(type)
10550*53ee8cc1Swenshuai.xi {
10551*53ee8cc1Swenshuai.xi case E_GOP_SCROLL_CONFIG:
10552*53ee8cc1Swenshuai.xi {
10553*53ee8cc1Swenshuai.xi if(u32Size != sizeof(GOP_SCROLL_INFO))
10554*53ee8cc1Swenshuai.xi {
10555*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10556*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10557*53ee8cc1Swenshuai.xi }
10558*53ee8cc1Swenshuai.xi PGOP_SCROLL_INFO pScrollInfo = (PGOP_SCROLL_INFO)pSet;
10559*53ee8cc1Swenshuai.xi if (pScrollInfo->type == E_GOP_SCROLL_DOWN || pScrollInfo->type == E_GOP_SCROLL_UP)
10560*53ee8cc1Swenshuai.xi {
10561*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetVScroll(g_pGOPCtxLocal, pScrollInfo->u8WinId, (E_GOP_SCROLL_TYPE)pScrollInfo->type, (MS_U32)pScrollInfo->u16Offset, pScrollInfo->bEnable);
10562*53ee8cc1Swenshuai.xi }
10563*53ee8cc1Swenshuai.xi else
10564*53ee8cc1Swenshuai.xi {
10565*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetHScroll(g_pGOPCtxLocal,pScrollInfo->u8WinId, (E_GOP_SCROLL_TYPE)pScrollInfo->type, (MS_U32)pScrollInfo->u16Offset, pScrollInfo->bEnable);
10566*53ee8cc1Swenshuai.xi }
10567*53ee8cc1Swenshuai.xi break;
10568*53ee8cc1Swenshuai.xi }
10569*53ee8cc1Swenshuai.xi case E_GOP_SCROLL_RATE:
10570*53ee8cc1Swenshuai.xi {
10571*53ee8cc1Swenshuai.xi MS_U8 u8rate;
10572*53ee8cc1Swenshuai.xi if(u32Size != sizeof(MS_U8))
10573*53ee8cc1Swenshuai.xi {
10574*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] size ERROR!! \n",__FUNCTION__,__LINE__);
10575*53ee8cc1Swenshuai.xi return GOP_API_FAIL;
10576*53ee8cc1Swenshuai.xi }
10577*53ee8cc1Swenshuai.xi
10578*53ee8cc1Swenshuai.xi u8rate = (MS_U8)*pSet;
10579*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetScrollRate(g_pGOPCtxLocal, u8rate);
10580*53ee8cc1Swenshuai.xi break;
10581*53ee8cc1Swenshuai.xi }
10582*53ee8cc1Swenshuai.xi }
10583*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10584*53ee8cc1Swenshuai.xi }
10585*53ee8cc1Swenshuai.xi
Ioctl_GOP_Interrupt(void * pInstance,MS_U8 u8Gop,MS_BOOL bEnable)10586*53ee8cc1Swenshuai.xi static int Ioctl_GOP_Interrupt(void* pInstance,MS_U8 u8Gop,MS_BOOL bEnable)
10587*53ee8cc1Swenshuai.xi {
10588*53ee8cc1Swenshuai.xi #ifdef INSTANT_PRIVATE
10589*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10590*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psGOPInstPri);
10591*53ee8cc1Swenshuai.xi #endif
10592*53ee8cc1Swenshuai.xi
10593*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_Interrupt(g_pGOPCtxLocal,u8Gop,bEnable);
10594*53ee8cc1Swenshuai.xi return GOP_API_SUCCESS;
10595*53ee8cc1Swenshuai.xi }
10596*53ee8cc1Swenshuai.xi
Ioctl_GOP_AtExit(void * pInstance)10597*53ee8cc1Swenshuai.xi void Ioctl_GOP_AtExit(void* pInstance)
10598*53ee8cc1Swenshuai.xi {
10599*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10600*53ee8cc1Swenshuai.xi GOP_AtExit(pInstance);
10601*53ee8cc1Swenshuai.xi #else
10602*53ee8cc1Swenshuai.xi GOP_M_INFO("not enable MSOS_TYPE_LINUX\n");
10603*53ee8cc1Swenshuai.xi #endif
10604*53ee8cc1Swenshuai.xi }
10605*53ee8cc1Swenshuai.xi
10606*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
GOPStr(MS_U32 u32PowerState,void * pModule)10607*53ee8cc1Swenshuai.xi MS_U32 GOPStr(MS_U32 u32PowerState, void* pModule)
10608*53ee8cc1Swenshuai.xi {
10609*53ee8cc1Swenshuai.xi MS_U32 u32Return=UTOPIA_STATUS_FAIL;
10610*53ee8cc1Swenshuai.xi
10611*53ee8cc1Swenshuai.xi #if(GFLIP_ENABLE==FALSE)
10612*53ee8cc1Swenshuai.xi switch(u32PowerState)
10613*53ee8cc1Swenshuai.xi {
10614*53ee8cc1Swenshuai.xi case E_POWER_SUSPEND:
10615*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Kernel STR Suspend Start!!!!!\n",__FUNCTION__,__LINE__);
10616*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_PowerState(NULL, u32PowerState, pModule);
10617*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Kernel STR Suspend End!!!!!\n",__FUNCTION__,__LINE__);
10618*53ee8cc1Swenshuai.xi u32Return=UTOPIA_STATUS_SUCCESS;
10619*53ee8cc1Swenshuai.xi break;
10620*53ee8cc1Swenshuai.xi case E_POWER_RESUME:
10621*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Kernel STR Resume Start!!!!!\n",__FUNCTION__,__LINE__);
10622*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_PowerState(NULL, u32PowerState, pModule);
10623*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Kernel STR Resume End!!!!!\n",__FUNCTION__,__LINE__);
10624*53ee8cc1Swenshuai.xi u32Return=UTOPIA_STATUS_SUCCESS;
10625*53ee8cc1Swenshuai.xi break;
10626*53ee8cc1Swenshuai.xi default:
10627*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] PowerState:%x not Implement now!!!\n",__FUNCTION__,__LINE__,u32PowerState);
10628*53ee8cc1Swenshuai.xi break;
10629*53ee8cc1Swenshuai.xi }
10630*53ee8cc1Swenshuai.xi #else
10631*53ee8cc1Swenshuai.xi //Kernel RedLine:GFLIP Suspend/Resume
10632*53ee8cc1Swenshuai.xi u32Return=UTOPIA_STATUS_SUCCESS;
10633*53ee8cc1Swenshuai.xi #endif
10634*53ee8cc1Swenshuai.xi return u32Return;
10635*53ee8cc1Swenshuai.xi }
10636*53ee8cc1Swenshuai.xi #endif
10637*53ee8cc1Swenshuai.xi
10638*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
GOPMdbIoctl(MS_U32 u32Cmd,const void * const pArgs)10639*53ee8cc1Swenshuai.xi MS_U32 GOPMdbIoctl(MS_U32 u32Cmd, const void* const pArgs)
10640*53ee8cc1Swenshuai.xi {
10641*53ee8cc1Swenshuai.xi MDBCMD_CMDLINE_PARAMETER *paraCmdLine;
10642*53ee8cc1Swenshuai.xi MDBCMD_GETINFO_PARAMETER *paraGetInfo;
10643*53ee8cc1Swenshuai.xi void* pInstance = NULL;
10644*53ee8cc1Swenshuai.xi pInstance = UtopiaModuleGetLocalInstantList(MODULE_GOP, pInstance);
10645*53ee8cc1Swenshuai.xi
10646*53ee8cc1Swenshuai.xi switch(u32Cmd)
10647*53ee8cc1Swenshuai.xi {
10648*53ee8cc1Swenshuai.xi case MDBCMD_CMDLINE:
10649*53ee8cc1Swenshuai.xi paraCmdLine = (MDBCMD_CMDLINE_PARAMETER *)pArgs;
10650*53ee8cc1Swenshuai.xi //MdbPrint(paraCmdLine->u64ReqHdl,"LINE:%d, MDBCMD_CMDLINE\n", __LINE__);
10651*53ee8cc1Swenshuai.xi //MdbPrint(paraCmdLine->u64ReqHdl,"u32CmdSize: %d\n", paraCmdLine->u32CmdSize);
10652*53ee8cc1Swenshuai.xi //MdbPrint(paraCmdLine->u64ReqHdl,"pcCmdLine: %s\n", paraCmdLine->pcCmdLine);
10653*53ee8cc1Swenshuai.xi MDrv_GOP_MDCMD_EchoCmd(pInstance, paraCmdLine->u64ReqHdl, paraCmdLine->pcCmdLine);
10654*53ee8cc1Swenshuai.xi paraCmdLine->result = MDBRESULT_SUCCESS_FIN;
10655*53ee8cc1Swenshuai.xi break;
10656*53ee8cc1Swenshuai.xi case MDBCMD_GETINFO:
10657*53ee8cc1Swenshuai.xi paraGetInfo = (MDBCMD_GETINFO_PARAMETER *)pArgs;
10658*53ee8cc1Swenshuai.xi MDrv_GOP_MDCMD_GETINFO(pInstance, paraGetInfo->u64ReqHdl);
10659*53ee8cc1Swenshuai.xi paraGetInfo->result = MDBRESULT_SUCCESS_FIN;
10660*53ee8cc1Swenshuai.xi break;
10661*53ee8cc1Swenshuai.xi default:
10662*53ee8cc1Swenshuai.xi break;
10663*53ee8cc1Swenshuai.xi }
10664*53ee8cc1Swenshuai.xi return 0;
10665*53ee8cc1Swenshuai.xi }
10666*53ee8cc1Swenshuai.xi #endif
10667*53ee8cc1Swenshuai.xi
10668*53ee8cc1Swenshuai.xi // this func will be call to init by utopia20 framework
GOPRegisterToUtopia(void)10669*53ee8cc1Swenshuai.xi void GOPRegisterToUtopia(void)
10670*53ee8cc1Swenshuai.xi {
10671*53ee8cc1Swenshuai.xi // 1. deal with module
10672*53ee8cc1Swenshuai.xi void* pUtopiaModule = NULL;
10673*53ee8cc1Swenshuai.xi UtopiaModuleCreate(MODULE_GOP, 8, &pUtopiaModule);
10674*53ee8cc1Swenshuai.xi UtopiaModuleRegister(pUtopiaModule);
10675*53ee8cc1Swenshuai.xi // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
10676*53ee8cc1Swenshuai.xi UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)GOPOpen, (FUtopiaClose)GOPClose, (FUtopiaIOctl)GOPIoctl);
10677*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
10678*53ee8cc1Swenshuai.xi UtopiaModuleRegisterMdbNode("gop", (FUtopiaMdbIoctl)GOPMdbIoctl);
10679*53ee8cc1Swenshuai.xi #endif
10680*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
10681*53ee8cc1Swenshuai.xi UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule, (FUtopiaSTR)GOPStr);
10682*53ee8cc1Swenshuai.xi UtopiaModuleSetSTRPrivate(pUtopiaModule, sizeof(GFLIP_REGS_SAVE_AREA));
10683*53ee8cc1Swenshuai.xi #endif
10684*53ee8cc1Swenshuai.xi
10685*53ee8cc1Swenshuai.xi // 2. deal with resource
10686*53ee8cc1Swenshuai.xi void* psResource = NULL;
10687*53ee8cc1Swenshuai.xi // start func to add res, call once will create 2 access in resource. Also can declare BDMA_POOL_ID_BDMA1 for another channel depend on driver owner.
10688*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceStart(pUtopiaModule, GOP_POOL_ID_GOP0);
10689*53ee8cc1Swenshuai.xi // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
10690*53ee8cc1Swenshuai.xi UtopiaResourceCreate("gop0", sizeof(GOP_RESOURCE_PRIVATE), &psResource);
10691*53ee8cc1Swenshuai.xi // func to reg res
10692*53ee8cc1Swenshuai.xi UtopiaResourceRegister(pUtopiaModule, psResource, GOP_POOL_ID_GOP0);
10693*53ee8cc1Swenshuai.xi
10694*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceEnd(pUtopiaModule, GOP_POOL_ID_GOP0);
10695*53ee8cc1Swenshuai.xi
10696*53ee8cc1Swenshuai.xi
10697*53ee8cc1Swenshuai.xi }
10698*53ee8cc1Swenshuai.xi
GOPOpen(void ** ppInstance,const void * const pAttribute)10699*53ee8cc1Swenshuai.xi MS_U32 GOPOpen(void** ppInstance, const void* const pAttribute)
10700*53ee8cc1Swenshuai.xi {
10701*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE *pGopPri = NULL;
10702*53ee8cc1Swenshuai.xi GOP_M_INFO("\n[GOP INFO] gop open\n");
10703*53ee8cc1Swenshuai.xi //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,printf("enter %s %d\n",__FUNCTION__,__LINE__));
10704*53ee8cc1Swenshuai.xi // instance is allocated here, also can allocate private for internal use, ex, BDMA_INSTANT_PRIVATE
10705*53ee8cc1Swenshuai.xi UtopiaInstanceCreate(sizeof(GOP_INSTANT_PRIVATE), ppInstance);
10706*53ee8cc1Swenshuai.xi // setup func in private and assign the calling func in func ptr in instance private
10707*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(*ppInstance, (void**)&pGopPri);
10708*53ee8cc1Swenshuai.xi
10709*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
10710*53ee8cc1Swenshuai.xi #if GFLIP_ENABLE
10711*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_GFLIP_InitTimer(void);
10712*53ee8cc1Swenshuai.xi if(_devGFLIPCnt==0)
10713*53ee8cc1Swenshuai.xi {
10714*53ee8cc1Swenshuai.xi MDrv_GFLIP_InitTimer();
10715*53ee8cc1Swenshuai.xi }
10716*53ee8cc1Swenshuai.xi _devGFLIPCnt++;
10717*53ee8cc1Swenshuai.xi #endif
10718*53ee8cc1Swenshuai.xi #endif
10719*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
10720*53ee8cc1Swenshuai.xi }
10721*53ee8cc1Swenshuai.xi
GOPIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)10722*53ee8cc1Swenshuai.xi MS_U32 GOPIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
10723*53ee8cc1Swenshuai.xi {
10724*53ee8cc1Swenshuai.xi void* pModule = NULL;
10725*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
10726*53ee8cc1Swenshuai.xi MS_U32 u32Ret = GOP_API_SUCCESS;
10727*53ee8cc1Swenshuai.xi GOP_INSTANT_PRIVATE* psGOPInstPri = NULL;
10728*53ee8cc1Swenshuai.xi MS_BOOL bLocked = FALSE;
10729*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psGOPInstPri);
10730*53ee8cc1Swenshuai.xi
10731*53ee8cc1Swenshuai.xi if(u32Cmd == MAPI_CMD_GOP_RESETPOOL)
10732*53ee8cc1Swenshuai.xi {
10733*53ee8cc1Swenshuai.xi GOP_CTX_DRV_SHARED* pDrvGOPShared=NULL;
10734*53ee8cc1Swenshuai.xi MS_BOOL bNeedInitShared = FALSE;
10735*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10736*53ee8cc1Swenshuai.xi pDrvGOPShared = (GOP_CTX_DRV_SHARED*)(void*)MDrv_GOP_GetShareMemory(&bNeedInitShared);
10737*53ee8cc1Swenshuai.xi if(pDrvGOPShared == NULL)
10738*53ee8cc1Swenshuai.xi {
10739*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] [%d] Shm pointer is NULL!!!! \n",__FUNCTION__,__LINE__);
10740*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
10741*53ee8cc1Swenshuai.xi }
10742*53ee8cc1Swenshuai.xi if((pDrvGOPShared->apiCtxShared.GOPLockPid != 0))
10743*53ee8cc1Swenshuai.xi {
10744*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX)
10745*53ee8cc1Swenshuai.xi if (kill(pDrvGOPShared->apiCtxShared.GOPLockPid, 0) == ESRCH)
10746*53ee8cc1Swenshuai.xi #endif
10747*53ee8cc1Swenshuai.xi {
10748*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] [%d] apiCtxShared.GOPLockPid 0x%tx not existance!!! \n",__FUNCTION__,__LINE__, (ptrdiff_t)pDrvGOPShared->apiCtxShared.GOPLockPid);
10749*53ee8cc1Swenshuai.xi UtopiaModuleResetPool(pModule,GOP_POOL_ID_GOP0);
10750*53ee8cc1Swenshuai.xi }
10751*53ee8cc1Swenshuai.xi }
10752*53ee8cc1Swenshuai.xi #endif
10753*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
10754*53ee8cc1Swenshuai.xi }
10755*53ee8cc1Swenshuai.xi
10756*53ee8cc1Swenshuai.xi if( (u32Cmd != MAPI_CMD_GOP_INTERRUPT) && (u32Cmd != MAPI_CMD_GOP_MUTEX) && (g_pGOPCtxLocal != NULL) && (g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid != MsOS_GetOSThreadID()) )
10757*53ee8cc1Swenshuai.xi {
10758*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, GOP_POOL_ID_GOP0, &(psGOPInstPri->pResource)) != 0)
10759*53ee8cc1Swenshuai.xi {
10760*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s %d]UtopiaResourceObtainToInstant fail\n",__FUNCTION__,__LINE__);
10761*53ee8cc1Swenshuai.xi return 0xFFFFFFFF;
10762*53ee8cc1Swenshuai.xi }
10763*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10764*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = (GETPIDTYPE)getpid();
10765*53ee8cc1Swenshuai.xi #endif
10766*53ee8cc1Swenshuai.xi bLocked=TRUE;
10767*53ee8cc1Swenshuai.xi }
10768*53ee8cc1Swenshuai.xi //printf("[%s] cmd:%lx\n",__FUNCTION__,u32Cmd);
10769*53ee8cc1Swenshuai.xi
10770*53ee8cc1Swenshuai.xi switch(u32Cmd)
10771*53ee8cc1Swenshuai.xi {
10772*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_INIT:
10773*53ee8cc1Swenshuai.xi {
10774*53ee8cc1Swenshuai.xi PGOP_INIT_PARAM ptr = (PGOP_INIT_PARAM)pArgs;
10775*53ee8cc1Swenshuai.xi
10776*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
10777*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_InitInfo))
10778*53ee8cc1Swenshuai.xi {
10779*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] input structure size non match!! (input:%tx require:%tx\n",__FUNCTION__,__LINE__,(ptrdiff_t)ptr->u32Size, sizeof(GOP_INIT_PARAM));
10780*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
10781*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10782*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
10783*53ee8cc1Swenshuai.xi #endif
10784*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
10785*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
10786*53ee8cc1Swenshuai.xi }
10787*53ee8cc1Swenshuai.xi #endif
10788*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Init(pInstance,ptr->gop_idx,(GOP_InitInfo*)(void*)ptr->pInfo);
10789*53ee8cc1Swenshuai.xi
10790*53ee8cc1Swenshuai.xi break;
10791*53ee8cc1Swenshuai.xi }
10792*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_CHIPCAPS:
10793*53ee8cc1Swenshuai.xi {
10794*53ee8cc1Swenshuai.xi PGOP_GETCAPS_PARAM ptr = (PGOP_GETCAPS_PARAM)pArgs;
10795*53ee8cc1Swenshuai.xi
10796*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetCaps(pInstance,(EN_GOP_CAPS)ptr->caps,ptr->pInfo,ptr->u32Size);
10797*53ee8cc1Swenshuai.xi
10798*53ee8cc1Swenshuai.xi break;
10799*53ee8cc1Swenshuai.xi }
10800*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_CONFIG:
10801*53ee8cc1Swenshuai.xi {
10802*53ee8cc1Swenshuai.xi PGOP_SETCONFIG_PARAM ptr = (PGOP_SETCONFIG_PARAM)pArgs;
10803*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetConfig(pInstance,ptr->cfg_type, ptr->pCfg, ptr->u32Size);
10804*53ee8cc1Swenshuai.xi break;
10805*53ee8cc1Swenshuai.xi
10806*53ee8cc1Swenshuai.xi }
10807*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_CONFIG:
10808*53ee8cc1Swenshuai.xi {
10809*53ee8cc1Swenshuai.xi PGOP_SETCONFIG_PARAM ptr = (PGOP_SETCONFIG_PARAM)pArgs;
10810*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetConfig(pInstance,ptr->cfg_type, ptr->pCfg, ptr->u32Size);
10811*53ee8cc1Swenshuai.xi break;
10812*53ee8cc1Swenshuai.xi }
10813*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_PROPERTY:
10814*53ee8cc1Swenshuai.xi {
10815*53ee8cc1Swenshuai.xi PGOP_SET_PROPERTY_PARAM ptr = (PGOP_SET_PROPERTY_PARAM)pArgs;
10816*53ee8cc1Swenshuai.xi
10817*53ee8cc1Swenshuai.xi
10818*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetProperty(pInstance,ptr->en_pro ,ptr->gop_idx, ptr->pSetting,ptr->u32Size);
10819*53ee8cc1Swenshuai.xi
10820*53ee8cc1Swenshuai.xi break;
10821*53ee8cc1Swenshuai.xi }
10822*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_PROPERTY:
10823*53ee8cc1Swenshuai.xi {
10824*53ee8cc1Swenshuai.xi PGOP_SET_PROPERTY_PARAM ptr = (PGOP_SET_PROPERTY_PARAM)pArgs;
10825*53ee8cc1Swenshuai.xi
10826*53ee8cc1Swenshuai.xi
10827*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetProperty(pInstance,ptr->en_pro ,ptr->gop_idx, ptr->pSetting,ptr->u32Size);
10828*53ee8cc1Swenshuai.xi
10829*53ee8cc1Swenshuai.xi break;
10830*53ee8cc1Swenshuai.xi }
10831*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_DST:
10832*53ee8cc1Swenshuai.xi {
10833*53ee8cc1Swenshuai.xi PGOP_SETDST_PARAM ptr = (PGOP_SETDST_PARAM)pArgs;
10834*53ee8cc1Swenshuai.xi
10835*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetDst(pInstance,ptr->gop_idx, ptr->en_dst);
10836*53ee8cc1Swenshuai.xi break;
10837*53ee8cc1Swenshuai.xi }
10838*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_DST:
10839*53ee8cc1Swenshuai.xi {
10840*53ee8cc1Swenshuai.xi PGOP_GETDST_PARAM ptr = (PGOP_GETDST_PARAM)pArgs;
10841*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(EN_GOP_DST_TYPE))
10842*53ee8cc1Swenshuai.xi {
10843*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Cmd:%td input structure size non match!! (input:0x%tx require:0x%tx\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32Cmd,(ptrdiff_t)ptr->u32Size, sizeof(EN_GOP_DST_TYPE));
10844*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
10845*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10846*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
10847*53ee8cc1Swenshuai.xi #endif
10848*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
10849*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
10850*53ee8cc1Swenshuai.xi }
10851*53ee8cc1Swenshuai.xi
10852*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetDst(pInstance,ptr->gop_idx, ptr->pDst);
10853*53ee8cc1Swenshuai.xi break;
10854*53ee8cc1Swenshuai.xi }
10855*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_MUX:
10856*53ee8cc1Swenshuai.xi {
10857*53ee8cc1Swenshuai.xi PGOP_SETMUX_PARAM ptr = (PGOP_SETMUX_PARAM)pArgs;
10858*53ee8cc1Swenshuai.xi //PGOP_MuxConfig pMux = (PGOP_MuxConfig)ptr->pMuxInfo;
10859*53ee8cc1Swenshuai.xi PGOP_SETMUX pMux = (PGOP_SETMUX)ptr->pMuxInfo;
10860*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
10861*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_SETMUX))
10862*53ee8cc1Swenshuai.xi {
10863*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
10864*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10865*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
10866*53ee8cc1Swenshuai.xi #endif
10867*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
10868*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
10869*53ee8cc1Swenshuai.xi }
10870*53ee8cc1Swenshuai.xi #endif
10871*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetMux(pInstance,pMux, ptr->u32Size);
10872*53ee8cc1Swenshuai.xi break;
10873*53ee8cc1Swenshuai.xi }
10874*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_LAYER:
10875*53ee8cc1Swenshuai.xi {
10876*53ee8cc1Swenshuai.xi PGOP_SETLAYER_PARAM ptr = (PGOP_SETLAYER_PARAM)pArgs;
10877*53ee8cc1Swenshuai.xi PGOP_SETLayer pLayer = (PGOP_SETLayer)ptr->pLayerInfo;
10878*53ee8cc1Swenshuai.xi MS_U16 i = 0;
10879*53ee8cc1Swenshuai.xi Gop_MuxSel enMux = E_GOP_MUX_INVAILD;
10880*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
10881*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_SETLayer))
10882*53ee8cc1Swenshuai.xi {
10883*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
10884*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10885*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
10886*53ee8cc1Swenshuai.xi #endif
10887*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
10888*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
10889*53ee8cc1Swenshuai.xi }
10890*53ee8cc1Swenshuai.xi #endif
10891*53ee8cc1Swenshuai.xi if(g_pGOPCtxLocal == NULL)
10892*53ee8cc1Swenshuai.xi {
10893*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
10894*53ee8cc1Swenshuai.xi }
10895*53ee8cc1Swenshuai.xi for (i = 0; i < pLayer->u32LayerCount; i++)
10896*53ee8cc1Swenshuai.xi {
10897*53ee8cc1Swenshuai.xi MDrv_GOP_MapLayer2Mux(g_pGOPCtxLocal, pLayer->u32Layer[i], pLayer->u32Gop[i], (MS_U32 *)&enMux);
10898*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_SetMux(g_pGOPCtxLocal, pLayer->u32Gop[i], enMux);
10899*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[pLayer->u32Gop[i]])
10900*53ee8cc1Swenshuai.xi {
10901*53ee8cc1Swenshuai.xi _GOP_InitHSPDByGOP(pInstance, pLayer->u32Gop[i]);
10902*53ee8cc1Swenshuai.xi }
10903*53ee8cc1Swenshuai.xi }
10904*53ee8cc1Swenshuai.xi break;
10905*53ee8cc1Swenshuai.xi }
10906*53ee8cc1Swenshuai.xi
10907*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_LAYER:
10908*53ee8cc1Swenshuai.xi {
10909*53ee8cc1Swenshuai.xi PGOP_SETLAYER_PARAM ptr = (PGOP_SETLAYER_PARAM)pArgs;
10910*53ee8cc1Swenshuai.xi PGOP_SETLayer pLayer = (PGOP_SETLayer)ptr->pLayerInfo;
10911*53ee8cc1Swenshuai.xi MS_U16 i = 0;
10912*53ee8cc1Swenshuai.xi DRV_GOPDstType enDst[MAX_GOP_SUPPORT] = {E_DRV_GOP_DST_INVALID};
10913*53ee8cc1Swenshuai.xi MS_BOOL bHasOP0 = FALSE;
10914*53ee8cc1Swenshuai.xi MS_BOOL bHasDualOP0 = FALSE;
10915*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
10916*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_SETLayer))
10917*53ee8cc1Swenshuai.xi {
10918*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
10919*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
10920*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
10921*53ee8cc1Swenshuai.xi #endif
10922*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
10923*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
10924*53ee8cc1Swenshuai.xi }
10925*53ee8cc1Swenshuai.xi #endif
10926*53ee8cc1Swenshuai.xi //get all gop dst
10927*53ee8cc1Swenshuai.xi for (i = 0; i < MAX_GOP_SUPPORT; i++)
10928*53ee8cc1Swenshuai.xi {
10929*53ee8cc1Swenshuai.xi enDst[i] = E_DRV_GOP_DST_INVALID;
10930*53ee8cc1Swenshuai.xi if (g_pGOPCtxLocal->pGOPCtxShared->bGopHasInitialized[i])
10931*53ee8cc1Swenshuai.xi {
10932*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetDstPlane(g_pGOPCtxLocal, i, &enDst[i]);
10933*53ee8cc1Swenshuai.xi }
10934*53ee8cc1Swenshuai.xi }
10935*53ee8cc1Swenshuai.xi
10936*53ee8cc1Swenshuai.xi pLayer->u32LayerCount = 0;
10937*53ee8cc1Swenshuai.xi // record all gop
10938*53ee8cc1Swenshuai.xi for (i = 0; i < MAX_GOP_SUPPORT; i++)
10939*53ee8cc1Swenshuai.xi {
10940*53ee8cc1Swenshuai.xi switch (enDst[i])
10941*53ee8cc1Swenshuai.xi {
10942*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP0:
10943*53ee8cc1Swenshuai.xi {
10944*53ee8cc1Swenshuai.xi if (!bHasOP0)
10945*53ee8cc1Swenshuai.xi {
10946*53ee8cc1Swenshuai.xi MS_U32 u32Layer = 0;
10947*53ee8cc1Swenshuai.xi // record all op gop
10948*53ee8cc1Swenshuai.xi for (u32Layer = 0; u32Layer < MAX_GOP_MUX_OPNum; u32Layer++)
10949*53ee8cc1Swenshuai.xi {
10950*53ee8cc1Swenshuai.xi MS_U8 u8Gop = 0;
10951*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8Gop, g_pGOPCtxLocal->pGopChipProperty->GOP_MapLayer2Mux[u32Layer]);
10952*53ee8cc1Swenshuai.xi if ((u8Gop < MAX_GOP_SUPPORT) && (enDst[u8Gop] == E_DRV_GOP_DST_OP0))
10953*53ee8cc1Swenshuai.xi {
10954*53ee8cc1Swenshuai.xi pLayer->u32Gop[pLayer->u32LayerCount] = u8Gop;
10955*53ee8cc1Swenshuai.xi pLayer->u32Layer[pLayer->u32LayerCount] = u32Layer;
10956*53ee8cc1Swenshuai.xi pLayer->u32LayerCount++;
10957*53ee8cc1Swenshuai.xi }
10958*53ee8cc1Swenshuai.xi }
10959*53ee8cc1Swenshuai.xi bHasOP0 = TRUE;
10960*53ee8cc1Swenshuai.xi }
10961*53ee8cc1Swenshuai.xi break;
10962*53ee8cc1Swenshuai.xi }
10963*53ee8cc1Swenshuai.xi case E_DRV_GOP_DST_OP_DUAL_RATE:
10964*53ee8cc1Swenshuai.xi if (!bHasDualOP0)
10965*53ee8cc1Swenshuai.xi {
10966*53ee8cc1Swenshuai.xi MS_U32 u32Layer = 0;
10967*53ee8cc1Swenshuai.xi
10968*53ee8cc1Swenshuai.xi for (u32Layer = 0; u32Layer < MAX_GOP_DualMUX_Num; u32Layer++)
10969*53ee8cc1Swenshuai.xi {
10970*53ee8cc1Swenshuai.xi MS_U8 u8Gop = 0;
10971*53ee8cc1Swenshuai.xi MDrv_GOP_GWIN_GetMux(g_pGOPCtxLocal, &u8Gop, g_pGOPCtxLocal->pGopChipProperty->GOP_MapLayer2DualOpMux[u32Layer]);
10972*53ee8cc1Swenshuai.xi if ((u8Gop < MAX_GOP_SUPPORT) && (enDst[u8Gop] == E_DRV_GOP_DST_OP_DUAL_RATE))
10973*53ee8cc1Swenshuai.xi {
10974*53ee8cc1Swenshuai.xi pLayer->u32Gop[pLayer->u32LayerCount] = u8Gop;
10975*53ee8cc1Swenshuai.xi pLayer->u32Layer[pLayer->u32LayerCount] = u32Layer;
10976*53ee8cc1Swenshuai.xi pLayer->u32LayerCount++;
10977*53ee8cc1Swenshuai.xi }
10978*53ee8cc1Swenshuai.xi }
10979*53ee8cc1Swenshuai.xi bHasDualOP0 = TRUE;
10980*53ee8cc1Swenshuai.xi }
10981*53ee8cc1Swenshuai.xi break;
10982*53ee8cc1Swenshuai.xi default:
10983*53ee8cc1Swenshuai.xi break;
10984*53ee8cc1Swenshuai.xi
10985*53ee8cc1Swenshuai.xi }
10986*53ee8cc1Swenshuai.xi }
10987*53ee8cc1Swenshuai.xi break;
10988*53ee8cc1Swenshuai.xi }
10989*53ee8cc1Swenshuai.xi
10990*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_MIRROR:
10991*53ee8cc1Swenshuai.xi {
10992*53ee8cc1Swenshuai.xi PGOP_SETMIRROR_PARAM ptr = (PGOP_SETMIRROR_PARAM)pArgs;
10993*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetMirror(pInstance,ptr->gop_idx, ptr->dir);
10994*53ee8cc1Swenshuai.xi
10995*53ee8cc1Swenshuai.xi break;
10996*53ee8cc1Swenshuai.xi }
10997*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_MIRROR:
10998*53ee8cc1Swenshuai.xi {
10999*53ee8cc1Swenshuai.xi PGOP_GETMIRROR_PARAM ptr = (PGOP_GETMIRROR_PARAM)pArgs;
11000*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetMirror(pInstance,ptr->gop_idx, ptr->pdir);
11001*53ee8cc1Swenshuai.xi
11002*53ee8cc1Swenshuai.xi break;
11003*53ee8cc1Swenshuai.xi }
11004*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GET_STATUS:
11005*53ee8cc1Swenshuai.xi {
11006*53ee8cc1Swenshuai.xi PGOP_GET_STATUS_PARAM ptr = (PGOP_GET_STATUS_PARAM)pArgs;
11007*53ee8cc1Swenshuai.xi
11008*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetStatus(pInstance,ptr->en_status, ptr->pStatus,ptr->u32Size);
11009*53ee8cc1Swenshuai.xi
11010*53ee8cc1Swenshuai.xi break;
11011*53ee8cc1Swenshuai.xi }
11012*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_TESTPATTERN:
11013*53ee8cc1Swenshuai.xi {
11014*53ee8cc1Swenshuai.xi PGOP_TEST_PATTERN_PARAM ptr = (PGOP_TEST_PATTERN_PARAM)pArgs;
11015*53ee8cc1Swenshuai.xi
11016*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_TestPattern(pInstance,ptr->TestPatternType,ptr->u32ARGB);
11017*53ee8cc1Swenshuai.xi break;
11018*53ee8cc1Swenshuai.xi }
11019*53ee8cc1Swenshuai.xi //Stretch Win
11020*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_SET_STRETCH:
11021*53ee8cc1Swenshuai.xi {
11022*53ee8cc1Swenshuai.xi PGOP_STRETCH_SET_PARAM ptr = (PGOP_STRETCH_SET_PARAM)pArgs;
11023*53ee8cc1Swenshuai.xi PGOP_STRETCH_INFO pInfo = (PGOP_STRETCH_INFO)ptr->pStretch;
11024*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_STRETCH_INFO))
11025*53ee8cc1Swenshuai.xi {
11026*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11027*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
11028*53ee8cc1Swenshuai.xi }
11029*53ee8cc1Swenshuai.xi
11030*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Set_Stretch(pInstance,ptr->enStrtchType,ptr->gop_idx,pInfo);
11031*53ee8cc1Swenshuai.xi break;
11032*53ee8cc1Swenshuai.xi }
11033*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_GET_STRETCH:
11034*53ee8cc1Swenshuai.xi {
11035*53ee8cc1Swenshuai.xi PGOP_STRETCH_SET_PARAM ptr = (PGOP_STRETCH_SET_PARAM)pArgs;
11036*53ee8cc1Swenshuai.xi PGOP_STRETCH_INFO pInfo = (PGOP_STRETCH_INFO)ptr->pStretch;
11037*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_STRETCH_INFO))
11038*53ee8cc1Swenshuai.xi {
11039*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11040*53ee8cc1Swenshuai.xi return GOP_API_INVALID_PARAMETERS;
11041*53ee8cc1Swenshuai.xi }
11042*53ee8cc1Swenshuai.xi
11043*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Get_Stretch(pInstance,ptr->enStrtchType,ptr->gop_idx,pInfo);
11044*53ee8cc1Swenshuai.xi break;
11045*53ee8cc1Swenshuai.xi }
11046*53ee8cc1Swenshuai.xi
11047*53ee8cc1Swenshuai.xi //GWIN info
11048*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_SET_PROPERTY:
11049*53ee8cc1Swenshuai.xi {
11050*53ee8cc1Swenshuai.xi PGOP_GWIN_PROPERTY_PARAM ptr = (PGOP_GWIN_PROPERTY_PARAM)pArgs;
11051*53ee8cc1Swenshuai.xi
11052*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GWin_SetProperty(pInstance,ptr->en_property, ptr->GwinId, ptr->pSet, ptr->u32Size);
11053*53ee8cc1Swenshuai.xi
11054*53ee8cc1Swenshuai.xi break;
11055*53ee8cc1Swenshuai.xi }
11056*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_GET_PROPERTY:
11057*53ee8cc1Swenshuai.xi {
11058*53ee8cc1Swenshuai.xi PGOP_GWIN_PROPERTY_PARAM ptr = (PGOP_GWIN_PROPERTY_PARAM)pArgs;
11059*53ee8cc1Swenshuai.xi
11060*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GWin_GetProperty(pInstance,ptr->en_property, ptr->GwinId, ptr->pSet, ptr->u32Size);
11061*53ee8cc1Swenshuai.xi
11062*53ee8cc1Swenshuai.xi break;
11063*53ee8cc1Swenshuai.xi }
11064*53ee8cc1Swenshuai.xi
11065*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_MAPFB2WIN:
11066*53ee8cc1Swenshuai.xi {
11067*53ee8cc1Swenshuai.xi PGOP_GWIN_MAPFBINFO_PARAM ptr = (PGOP_GWIN_MAPFBINFO_PARAM)pArgs;
11068*53ee8cc1Swenshuai.xi //PGOP_BUFFER_INFO pInfo = (PGOP_BUFFER_INFO)ptr->pinfo;
11069*53ee8cc1Swenshuai.xi
11070*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_MapFB2Win(pInstance,ptr->fbid,ptr->GwinId);
11071*53ee8cc1Swenshuai.xi
11072*53ee8cc1Swenshuai.xi break;
11073*53ee8cc1Swenshuai.xi }
11074*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_SET_WININFO:
11075*53ee8cc1Swenshuai.xi {
11076*53ee8cc1Swenshuai.xi PGOP_GWIN_SETWININFO_PARAM ptr = (PGOP_GWIN_SETWININFO_PARAM)pArgs;
11077*53ee8cc1Swenshuai.xi PGOP_BUFFER_INFO pInfo = (PGOP_BUFFER_INFO)ptr->pinfo;
11078*53ee8cc1Swenshuai.xi
11079*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11080*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_BUFFER_INFO))
11081*53ee8cc1Swenshuai.xi {
11082*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11083*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11084*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11085*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11086*53ee8cc1Swenshuai.xi #endif
11087*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11088*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11089*53ee8cc1Swenshuai.xi }
11090*53ee8cc1Swenshuai.xi #endif
11091*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetWinInfo(pInstance,ptr->GwinId,pInfo);
11092*53ee8cc1Swenshuai.xi
11093*53ee8cc1Swenshuai.xi break;
11094*53ee8cc1Swenshuai.xi }
11095*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_GET_WININFO:
11096*53ee8cc1Swenshuai.xi {
11097*53ee8cc1Swenshuai.xi PGOP_GWIN_SETWININFO_PARAM ptr = (PGOP_GWIN_SETWININFO_PARAM)pArgs;
11098*53ee8cc1Swenshuai.xi PGOP_BUFFER_INFO pInfo = (PGOP_BUFFER_INFO)ptr->pinfo;
11099*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11100*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_BUFFER_INFO))
11101*53ee8cc1Swenshuai.xi {
11102*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11103*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11104*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11105*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11106*53ee8cc1Swenshuai.xi #endif
11107*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11108*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11109*53ee8cc1Swenshuai.xi }
11110*53ee8cc1Swenshuai.xi #endif
11111*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetWinInfo(pInstance,ptr->GwinId,pInfo);
11112*53ee8cc1Swenshuai.xi
11113*53ee8cc1Swenshuai.xi break;
11114*53ee8cc1Swenshuai.xi }
11115*53ee8cc1Swenshuai.xi
11116*53ee8cc1Swenshuai.xi #if 0
11117*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_ENABLE:
11118*53ee8cc1Swenshuai.xi {
11119*53ee8cc1Swenshuai.xi PGOP_GWIN_WIN_ENABLE_PARAM ptr = (PGOP_GWIN_WIN_ENABLE_PARAM)pArgs;
11120*53ee8cc1Swenshuai.xi MS_BOOL bEn;
11121*53ee8cc1Swenshuai.xi
11122*53ee8cc1Swenshuai.xi bEn = (MS_BOOL)*(ptr->pEn);
11123*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Win_Enable(ptr->GwinId, bEn);
11124*53ee8cc1Swenshuai.xi
11125*53ee8cc1Swenshuai.xi break;
11126*53ee8cc1Swenshuai.xi }
11127*53ee8cc1Swenshuai.xi #endif
11128*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_SETDISPLAY:
11129*53ee8cc1Swenshuai.xi {
11130*53ee8cc1Swenshuai.xi PGOP_GWIN_DISPLAY_PARAM ptr = (PGOP_GWIN_DISPLAY_PARAM)pArgs;
11131*53ee8cc1Swenshuai.xi PGOP_GWINDISPLAY_INFO pInfo = (PGOP_GWINDISPLAY_INFO)ptr->pDisplayInfo;
11132*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11133*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_GWINDISPLAY_INFO))
11134*53ee8cc1Swenshuai.xi {
11135*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11136*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11137*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11138*53ee8cc1Swenshuai.xi #endif
11139*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11140*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11141*53ee8cc1Swenshuai.xi }
11142*53ee8cc1Swenshuai.xi #endif
11143*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetDisplay(pInstance,pInfo);
11144*53ee8cc1Swenshuai.xi break;
11145*53ee8cc1Swenshuai.xi }
11146*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_DESTROY:
11147*53ee8cc1Swenshuai.xi {
11148*53ee8cc1Swenshuai.xi PGOP_GWIN_DESTROY_PARAM ptr = (PGOP_GWIN_DESTROY_PARAM)pArgs;
11149*53ee8cc1Swenshuai.xi
11150*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Win_Destroy(pInstance,ptr->GwinId);
11151*53ee8cc1Swenshuai.xi }
11152*53ee8cc1Swenshuai.xi break;
11153*53ee8cc1Swenshuai.xi //GFLIP
11154*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GFLIP_CLEARQUEUE:
11155*53ee8cc1Swenshuai.xi {
11156*53ee8cc1Swenshuai.xi PGOP_GWIN_CLEARQUEUE_PARAM ptr = (PGOP_GWIN_CLEARQUEUE_PARAM)pArgs;
11157*53ee8cc1Swenshuai.xi PGOP_GWIN_CLEARQUEUE_INFO pInfo = (PGOP_GWIN_CLEARQUEUE_INFO)ptr->pClearInfo;
11158*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11159*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_GWIN_CLEARQUEUE_INFO))
11160*53ee8cc1Swenshuai.xi {
11161*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11162*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11163*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11164*53ee8cc1Swenshuai.xi #endif
11165*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11166*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11167*53ee8cc1Swenshuai.xi }
11168*53ee8cc1Swenshuai.xi #endif
11169*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GFlip_ClearFlipQueue(pInstance,pInfo->GwinId);
11170*53ee8cc1Swenshuai.xi }
11171*53ee8cc1Swenshuai.xi break;
11172*53ee8cc1Swenshuai.xi
11173*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GFLIP_SWITCHGWIN:
11174*53ee8cc1Swenshuai.xi {
11175*53ee8cc1Swenshuai.xi PGOP_GWIN_GFLIP_SWITCH_GWIN_PARAM ptr = (PGOP_GWIN_GFLIP_SWITCH_GWIN_PARAM)pArgs;
11176*53ee8cc1Swenshuai.xi PGOP_GWIN_FLIP_WIN_INFO pFlip = (PGOP_GWIN_FLIP_WIN_INFO)ptr->pFlipInfo;
11177*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11178*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_GWIN_FLIP_WIN_INFO))
11179*53ee8cc1Swenshuai.xi {
11180*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11181*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11182*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11183*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11184*53ee8cc1Swenshuai.xi #endif
11185*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11186*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11187*53ee8cc1Swenshuai.xi }
11188*53ee8cc1Swenshuai.xi #endif
11189*53ee8cc1Swenshuai.xi if(bLocked)
11190*53ee8cc1Swenshuai.xi {
11191*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11192*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11193*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11194*53ee8cc1Swenshuai.xi #endif
11195*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11196*53ee8cc1Swenshuai.xi bLocked = FALSE;
11197*53ee8cc1Swenshuai.xi }
11198*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GFlip_SwitchGwin(pInstance,pFlip);
11199*53ee8cc1Swenshuai.xi break;
11200*53ee8cc1Swenshuai.xi }
11201*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GFLIP_SWITCHMULTIGWIN:
11202*53ee8cc1Swenshuai.xi {
11203*53ee8cc1Swenshuai.xi PGOP_GWIN_GFLIP_SWITCH_MULTI_GWIN_PARAM ptr = (PGOP_GWIN_GFLIP_SWITCH_MULTI_GWIN_PARAM)pArgs;
11204*53ee8cc1Swenshuai.xi PGOP_GWIN_FLIP_MULTI_WIN_INFO pMultiFlip = (PGOP_GWIN_FLIP_MULTI_WIN_INFO)ptr->pMultiFlipInfo;
11205*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11206*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_GWIN_FLIP_MULTI_WIN_INFO))
11207*53ee8cc1Swenshuai.xi {
11208*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11209*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11210*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11211*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11212*53ee8cc1Swenshuai.xi #endif
11213*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11214*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11215*53ee8cc1Swenshuai.xi }
11216*53ee8cc1Swenshuai.xi #endif
11217*53ee8cc1Swenshuai.xi if(bLocked)
11218*53ee8cc1Swenshuai.xi {
11219*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11220*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11221*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11222*53ee8cc1Swenshuai.xi #endif
11223*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11224*53ee8cc1Swenshuai.xi bLocked = FALSE;
11225*53ee8cc1Swenshuai.xi }
11226*53ee8cc1Swenshuai.xi
11227*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GFlip_SwitchMultiGwin(pInstance,pMultiFlip);
11228*53ee8cc1Swenshuai.xi break;
11229*53ee8cc1Swenshuai.xi }
11230*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GFLIP_RESTORE_VSYNC_LMT:
11231*53ee8cc1Swenshuai.xi {
11232*53ee8cc1Swenshuai.xi if(FALSE == MDrv_GOP_RestoreFromVsyncLimitation(g_pGOPCtxLocal))
11233*53ee8cc1Swenshuai.xi {
11234*53ee8cc1Swenshuai.xi u32Ret = GOP_API_FAIL;
11235*53ee8cc1Swenshuai.xi }
11236*53ee8cc1Swenshuai.xi u32Ret = GOP_API_SUCCESS;
11237*53ee8cc1Swenshuai.xi
11238*53ee8cc1Swenshuai.xi break;
11239*53ee8cc1Swenshuai.xi }
11240*53ee8cc1Swenshuai.xi //FB Info
11241*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_FB_CREATE:
11242*53ee8cc1Swenshuai.xi {
11243*53ee8cc1Swenshuai.xi PGOP_CREATE_BUFFER_PARAM ptr = (PGOP_CREATE_BUFFER_PARAM)pArgs;
11244*53ee8cc1Swenshuai.xi PGOP_BUFFER_INFO pBuff = (PGOP_BUFFER_INFO)ptr->pBufInfo;
11245*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11246*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_BUFFER_INFO)) //error handling for invalid ptr
11247*53ee8cc1Swenshuai.xi {
11248*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11249*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11250*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11251*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11252*53ee8cc1Swenshuai.xi #endif
11253*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11254*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11255*53ee8cc1Swenshuai.xi }
11256*53ee8cc1Swenshuai.xi #endif
11257*53ee8cc1Swenshuai.xi
11258*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_FBCreate(pInstance,ptr->fb_type,pBuff,ptr->fbid);
11259*53ee8cc1Swenshuai.xi break;
11260*53ee8cc1Swenshuai.xi }
11261*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_FB_DESTROY:
11262*53ee8cc1Swenshuai.xi {
11263*53ee8cc1Swenshuai.xi PGOP_DELETE_BUFFER_PARAM ptr = (PGOP_DELETE_BUFFER_PARAM)pArgs;
11264*53ee8cc1Swenshuai.xi
11265*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(MS_U32)) //error handling for invalid ptr
11266*53ee8cc1Swenshuai.xi {
11267*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11268*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11269*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11270*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11271*53ee8cc1Swenshuai.xi #endif
11272*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11273*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11274*53ee8cc1Swenshuai.xi }
11275*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_FBDestroy(pInstance,ptr->pBufId);
11276*53ee8cc1Swenshuai.xi
11277*53ee8cc1Swenshuai.xi break;
11278*53ee8cc1Swenshuai.xi }
11279*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_FB_SETINFO:
11280*53ee8cc1Swenshuai.xi {
11281*53ee8cc1Swenshuai.xi PGOP_FB_INFO_PARAM ptr = (PGOP_FB_INFO_PARAM)pArgs;
11282*53ee8cc1Swenshuai.xi PGOP_BUFFER_INFO pBuff = (PGOP_BUFFER_INFO)ptr->pBufInfo;
11283*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11284*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_BUFFER_INFO)) //error handling for invalid ptr
11285*53ee8cc1Swenshuai.xi {
11286*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s] (%d) Info structure Error!!\n",__FUNCTION__,__LINE__);
11287*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11288*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11289*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11290*53ee8cc1Swenshuai.xi #endif
11291*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11292*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11293*53ee8cc1Swenshuai.xi }
11294*53ee8cc1Swenshuai.xi #endif
11295*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_SetFBInfo(pInstance,ptr->fbid,pBuff);
11296*53ee8cc1Swenshuai.xi
11297*53ee8cc1Swenshuai.xi break;
11298*53ee8cc1Swenshuai.xi }
11299*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_FB_GETINFO:
11300*53ee8cc1Swenshuai.xi {
11301*53ee8cc1Swenshuai.xi PGOP_FB_INFO_PARAM ptr = (PGOP_FB_INFO_PARAM)pArgs;
11302*53ee8cc1Swenshuai.xi PGOP_BUFFER_INFO pBuff = (PGOP_BUFFER_INFO)ptr->pBufInfo;
11303*53ee8cc1Swenshuai.xi
11304*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_GetFBInfo(pInstance,ptr->fbid,pBuff);
11305*53ee8cc1Swenshuai.xi break;
11306*53ee8cc1Swenshuai.xi }
11307*53ee8cc1Swenshuai.xi
11308*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_FB_SET_PROPERTY:
11309*53ee8cc1Swenshuai.xi {
11310*53ee8cc1Swenshuai.xi PGOP_FB_PROPERTY_PARAM ptr = (PGOP_FB_PROPERTY_PARAM)pArgs;
11311*53ee8cc1Swenshuai.xi
11312*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_FB_SetProperty(pInstance,ptr->en_property, ptr->FBId, ptr->pSet, ptr->u32Size);
11313*53ee8cc1Swenshuai.xi
11314*53ee8cc1Swenshuai.xi break;
11315*53ee8cc1Swenshuai.xi }
11316*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_FB_GET_PROPERTY:
11317*53ee8cc1Swenshuai.xi {
11318*53ee8cc1Swenshuai.xi PGOP_FB_PROPERTY_PARAM ptr = (PGOP_FB_PROPERTY_PARAM)pArgs;
11319*53ee8cc1Swenshuai.xi
11320*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_FB_GetProperty(pInstance,ptr->en_property, ptr->FBId, ptr->pSet, ptr->u32Size);
11321*53ee8cc1Swenshuai.xi
11322*53ee8cc1Swenshuai.xi break;
11323*53ee8cc1Swenshuai.xi }
11324*53ee8cc1Swenshuai.xi
11325*53ee8cc1Swenshuai.xi //palette
11326*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_PALETTE_SET_CONFIG:
11327*53ee8cc1Swenshuai.xi {
11328*53ee8cc1Swenshuai.xi PGOP_PALETTE_CONFIG_PARAM ptr = (PGOP_PALETTE_CONFIG_PARAM)pArgs;
11329*53ee8cc1Swenshuai.xi PGOP_PAL_OPT pPalSet = (PGOP_PAL_OPT)ptr->pPaletteInfo;
11330*53ee8cc1Swenshuai.xi
11331*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_PAL_OPT))
11332*53ee8cc1Swenshuai.xi {
11333*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11334*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11335*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11336*53ee8cc1Swenshuai.xi #endif
11337*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11338*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11339*53ee8cc1Swenshuai.xi }
11340*53ee8cc1Swenshuai.xi
11341*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Palette_Set_Config(pInstance,pPalSet->gop_idx, (DRV_GopPalReadType)pPalSet->paltype,pPalSet->palSrc);
11342*53ee8cc1Swenshuai.xi
11343*53ee8cc1Swenshuai.xi }
11344*53ee8cc1Swenshuai.xi break;
11345*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_PALETTE_SET_ENTRY:
11346*53ee8cc1Swenshuai.xi {
11347*53ee8cc1Swenshuai.xi PGOP_PALETTE_SET_PARAM ptr = (PGOP_PALETTE_SET_PARAM)pArgs;
11348*53ee8cc1Swenshuai.xi PGOP_PALETTE_ENTRY pPal = (PGOP_PALETTE_ENTRY)ptr->pClut;
11349*53ee8cc1Swenshuai.xi
11350*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11351*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_PALETTE_ENTRY))
11352*53ee8cc1Swenshuai.xi {
11353*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11354*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11355*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11356*53ee8cc1Swenshuai.xi #endif
11357*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11358*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11359*53ee8cc1Swenshuai.xi }
11360*53ee8cc1Swenshuai.xi #endif
11361*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Palette_EntrySet(pInstance,pPal);
11362*53ee8cc1Swenshuai.xi }
11363*53ee8cc1Swenshuai.xi break;
11364*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_PALETTE_GET_ENTRY:
11365*53ee8cc1Swenshuai.xi {
11366*53ee8cc1Swenshuai.xi PGOP_PALETTE_SET_PARAM ptr = (PGOP_PALETTE_SET_PARAM)pArgs;
11367*53ee8cc1Swenshuai.xi PGOP_PALETTE_ENTRY pPal = (PGOP_PALETTE_ENTRY)ptr->pClut;
11368*53ee8cc1Swenshuai.xi
11369*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11370*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_PALETTE_ENTRY))
11371*53ee8cc1Swenshuai.xi {
11372*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11373*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11374*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11375*53ee8cc1Swenshuai.xi #endif
11376*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11377*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11378*53ee8cc1Swenshuai.xi }
11379*53ee8cc1Swenshuai.xi #endif
11380*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Palette_EntryGet(pInstance,pPal);
11381*53ee8cc1Swenshuai.xi break;
11382*53ee8cc1Swenshuai.xi }
11383*53ee8cc1Swenshuai.xi //Fade
11384*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_GWIN_SET_FADE:
11385*53ee8cc1Swenshuai.xi {
11386*53ee8cc1Swenshuai.xi PGOP_SET_FADE_PARAM ptr = (PGOP_SET_FADE_PARAM)pArgs;
11387*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Fade(pInstance,ptr->en_type,ptr->pSetting,ptr->u32Size);
11388*53ee8cc1Swenshuai.xi break;
11389*53ee8cc1Swenshuai.xi }
11390*53ee8cc1Swenshuai.xi //Scroll
11391*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_SCROLL:
11392*53ee8cc1Swenshuai.xi {
11393*53ee8cc1Swenshuai.xi PGOP_SCROLL_PARAM ptr = (PGOP_SCROLL_PARAM)pArgs;
11394*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Scroll(pInstance,ptr->scroll_type,ptr->pCfg,ptr->u32Size);
11395*53ee8cc1Swenshuai.xi break;
11396*53ee8cc1Swenshuai.xi }
11397*53ee8cc1Swenshuai.xi //PINPON
11398*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SET_PINPON:
11399*53ee8cc1Swenshuai.xi {
11400*53ee8cc1Swenshuai.xi PGOP_SET_PINPON_PARAM ptr = (PGOP_SET_PINPON_PARAM)pArgs;
11401*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_PINPON(pInstance,ptr->en_pro,ptr->pSetting,ptr->u32Size);
11402*53ee8cc1Swenshuai.xi break;
11403*53ee8cc1Swenshuai.xi }
11404*53ee8cc1Swenshuai.xi //DWIN
11405*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_DWIN_INIT:
11406*53ee8cc1Swenshuai.xi {
11407*53ee8cc1Swenshuai.xi Ioctl_GOP_DWIN_Init(pInstance);
11408*53ee8cc1Swenshuai.xi break;
11409*53ee8cc1Swenshuai.xi }
11410*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_DWIN_CAPTURE:
11411*53ee8cc1Swenshuai.xi {
11412*53ee8cc1Swenshuai.xi PGOP_DWIN_CAPTURE_PARAM pDwinCapture = (PGOP_DWIN_CAPTURE_PARAM)pArgs;
11413*53ee8cc1Swenshuai.xi PGOP_CAPTURE_INFO pinfo = (PGOP_CAPTURE_INFO)pDwinCapture->pDwin;
11414*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11415*53ee8cc1Swenshuai.xi if(pDwinCapture->u32Size != sizeof(GOP_CAPTURE_INFO)) //error handling for invalid ptr
11416*53ee8cc1Swenshuai.xi {
11417*53ee8cc1Swenshuai.xi GOP_M_INFO("[%s][%d] Capture Info structure Error!!\n",__FUNCTION__,__LINE__);
11418*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11419*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11420*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11421*53ee8cc1Swenshuai.xi #endif
11422*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11423*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11424*53ee8cc1Swenshuai.xi }
11425*53ee8cc1Swenshuai.xi #endif
11426*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Dwin_Capture(pInstance,pinfo);
11427*53ee8cc1Swenshuai.xi break;
11428*53ee8cc1Swenshuai.xi }
11429*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_DWIN_SET_PROPERTY:
11430*53ee8cc1Swenshuai.xi {
11431*53ee8cc1Swenshuai.xi PGOP_DWIN_PROPERTY_PARAM ptr = (PGOP_DWIN_PROPERTY_PARAM)pArgs;
11432*53ee8cc1Swenshuai.xi
11433*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_DWIN_SetProperty(pInstance,ptr->en_dwin_property,ptr->pDwinProp,ptr->u32Size);
11434*53ee8cc1Swenshuai.xi break;
11435*53ee8cc1Swenshuai.xi }
11436*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_DWIN_GET_PROPERTY:
11437*53ee8cc1Swenshuai.xi {
11438*53ee8cc1Swenshuai.xi PGOP_DWIN_PROPERTY_PARAM ptr = (PGOP_DWIN_PROPERTY_PARAM)pArgs;
11439*53ee8cc1Swenshuai.xi
11440*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_DWIN_GetProperty(pInstance,ptr->en_dwin_property,ptr->pDwinProp,ptr->u32Size);
11441*53ee8cc1Swenshuai.xi break;
11442*53ee8cc1Swenshuai.xi }
11443*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_DWIN_INTR:
11444*53ee8cc1Swenshuai.xi {
11445*53ee8cc1Swenshuai.xi PGOP_DWIN_INTR_STATUS_PARAM pDwinIntr = (PGOP_DWIN_INTR_STATUS_PARAM)pArgs;
11446*53ee8cc1Swenshuai.xi
11447*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Dwin_Intr(pInstance,pDwinIntr->intr_type, pDwinIntr->pIntrInfo, pDwinIntr->u32Size);
11448*53ee8cc1Swenshuai.xi break;
11449*53ee8cc1Swenshuai.xi }
11450*53ee8cc1Swenshuai.xi
11451*53ee8cc1Swenshuai.xi
11452*53ee8cc1Swenshuai.xi //MISC
11453*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_UPDATE:
11454*53ee8cc1Swenshuai.xi {
11455*53ee8cc1Swenshuai.xi PGOP_UPDATE_PARAM ptr = (PGOP_UPDATE_PARAM)pArgs;
11456*53ee8cc1Swenshuai.xi PGOP_UPDATE_INFO pInfo = (PGOP_UPDATE_INFO)ptr->pUpdateInfo;
11457*53ee8cc1Swenshuai.xi
11458*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_UPDATE_INFO))
11459*53ee8cc1Swenshuai.xi {
11460*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11461*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11462*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11463*53ee8cc1Swenshuai.xi #endif
11464*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11465*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11466*53ee8cc1Swenshuai.xi }
11467*53ee8cc1Swenshuai.xi
11468*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_TriggerRegWriteIn(pInstance,pInfo->gop_idx,pInfo->update_type,pInfo->bEn,pInfo->bSync);
11469*53ee8cc1Swenshuai.xi break;
11470*53ee8cc1Swenshuai.xi }
11471*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_SELECTION:
11472*53ee8cc1Swenshuai.xi {
11473*53ee8cc1Swenshuai.xi PGOP_SELECTION_PROPERTY_PARAM ptr = (PGOP_SELECTION_PROPERTY_PARAM)pArgs;
11474*53ee8cc1Swenshuai.xi
11475*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Select(pInstance,ptr->sel_type, ptr->id, ptr->pinfo);
11476*53ee8cc1Swenshuai.xi
11477*53ee8cc1Swenshuai.xi break;
11478*53ee8cc1Swenshuai.xi }
11479*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_REGISTER_CB:
11480*53ee8cc1Swenshuai.xi {
11481*53ee8cc1Swenshuai.xi PGOP_REGISTER_CB_PARAM ptr = (PGOP_REGISTER_CB_PARAM)pArgs;
11482*53ee8cc1Swenshuai.xi
11483*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Register_CB(pInstance,ptr->cb_type, ptr->pCB, ptr->u32Size);
11484*53ee8cc1Swenshuai.xi
11485*53ee8cc1Swenshuai.xi break;
11486*53ee8cc1Swenshuai.xi }
11487*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_MUTEX:
11488*53ee8cc1Swenshuai.xi {
11489*53ee8cc1Swenshuai.xi GOP_MUTEX_PARAM *ptr = (GOP_MUTEX_PARAM*)pArgs;
11490*53ee8cc1Swenshuai.xi
11491*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL //Check size error when if(is_compat_task()==1)
11492*53ee8cc1Swenshuai.xi if(ptr->u32Size != sizeof(GOP_MUTEX_PARAM))
11493*53ee8cc1Swenshuai.xi {
11494*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_PARAMETER_ERROR;
11495*53ee8cc1Swenshuai.xi }
11496*53ee8cc1Swenshuai.xi #endif
11497*53ee8cc1Swenshuai.xi if(ptr->en_mutex == E_GOP_LOCK)
11498*53ee8cc1Swenshuai.xi {
11499*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, GOP_POOL_ID_GOP0, &(psGOPInstPri->pResource)) != 0)
11500*53ee8cc1Swenshuai.xi {
11501*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s %d]UtopiaResourceObtainToInstant fail\n",__FUNCTION__,__LINE__);
11502*53ee8cc1Swenshuai.xi return 0xFFFFFFFF;
11503*53ee8cc1Swenshuai.xi }
11504*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = MsOS_GetOSThreadID();
11505*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11506*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = (GETPIDTYPE)getpid();
11507*53ee8cc1Swenshuai.xi #endif
11508*53ee8cc1Swenshuai.xi }
11509*53ee8cc1Swenshuai.xi else if(ptr->en_mutex == E_GOP_UNLOCK)
11510*53ee8cc1Swenshuai.xi {
11511*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11512*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11513*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11514*53ee8cc1Swenshuai.xi #endif
11515*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11516*53ee8cc1Swenshuai.xi }
11517*53ee8cc1Swenshuai.xi break;
11518*53ee8cc1Swenshuai.xi }
11519*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_MIXER_SET_PROPERTY:
11520*53ee8cc1Swenshuai.xi {
11521*53ee8cc1Swenshuai.xi PGOP_MIXER_PROPERTY_PARAM ptr = (PGOP_MIXER_PROPERTY_PARAM)pArgs;
11522*53ee8cc1Swenshuai.xi
11523*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_MIXER_SetProperty(pInstance,ptr->en_mixer_property,ptr->pMixerProp,ptr->u32Size);
11524*53ee8cc1Swenshuai.xi break;
11525*53ee8cc1Swenshuai.xi }
11526*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_MIXER_GET_PROPERTY:
11527*53ee8cc1Swenshuai.xi {
11528*53ee8cc1Swenshuai.xi PGOP_MIXER_PROPERTY_PARAM ptr = (PGOP_MIXER_PROPERTY_PARAM)pArgs;
11529*53ee8cc1Swenshuai.xi
11530*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_MIXER_GetProperty(pInstance,ptr->en_mixer_property,ptr->pMixerProp,ptr->u32Size);
11531*53ee8cc1Swenshuai.xi break;
11532*53ee8cc1Swenshuai.xi }
11533*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_VE_SET_PROPERTY:
11534*53ee8cc1Swenshuai.xi {
11535*53ee8cc1Swenshuai.xi PGOP_VE_PROPERTY_PARAM ptr = (PGOP_VE_PROPERTY_PARAM)pArgs;
11536*53ee8cc1Swenshuai.xi
11537*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_VE_SetProperty(pInstance,ptr->en_ve_property,ptr->pVEProp,ptr->u32Size);
11538*53ee8cc1Swenshuai.xi break;
11539*53ee8cc1Swenshuai.xi }
11540*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_MISC:
11541*53ee8cc1Swenshuai.xi {
11542*53ee8cc1Swenshuai.xi PGOP_MISC_PARAM ptr = (PGOP_MISC_PARAM)pArgs;
11543*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_MISC(pInstance,ptr->misc_type,ptr->pMISC,ptr->u32Size);
11544*53ee8cc1Swenshuai.xi break;
11545*53ee8cc1Swenshuai.xi }
11546*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_POWERSTATE:
11547*53ee8cc1Swenshuai.xi {
11548*53ee8cc1Swenshuai.xi PGOP_POWERSTATE_PARAM ptr = (PGOP_POWERSTATE_PARAM)pArgs;
11549*53ee8cc1Swenshuai.xi MS_U8* u8Val = ptr->pInfo;
11550*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_PowerState(pInstance, (MS_U32)*u8Val, pModule);
11551*53ee8cc1Swenshuai.xi break;
11552*53ee8cc1Swenshuai.xi }
11553*53ee8cc1Swenshuai.xi case MAPI_CMD_GOP_INTERRUPT:
11554*53ee8cc1Swenshuai.xi {
11555*53ee8cc1Swenshuai.xi PGOP_INTERRUPT_PARAM ptr = (PGOP_INTERRUPT_PARAM)pArgs;
11556*53ee8cc1Swenshuai.xi MS_BOOL *pbEnable =(MS_BOOL *)ptr->pSetting;
11557*53ee8cc1Swenshuai.xi u32Ret = Ioctl_GOP_Interrupt(pInstance,ptr->gop_idx,*pbEnable);
11558*53ee8cc1Swenshuai.xi break;
11559*53ee8cc1Swenshuai.xi }
11560*53ee8cc1Swenshuai.xi default:
11561*53ee8cc1Swenshuai.xi break;
11562*53ee8cc1Swenshuai.xi }
11563*53ee8cc1Swenshuai.xi
11564*53ee8cc1Swenshuai.xi if(bLocked)
11565*53ee8cc1Swenshuai.xi {
11566*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->s32GOPLockTid = 0;
11567*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
11568*53ee8cc1Swenshuai.xi g_pGOPCtxLocal->pGOPCtxShared->GOPLockPid = 0;
11569*53ee8cc1Swenshuai.xi #endif
11570*53ee8cc1Swenshuai.xi UtopiaResourceRelease(psGOPInstPri->pResource);
11571*53ee8cc1Swenshuai.xi }
11572*53ee8cc1Swenshuai.xi if(u32Ret != GOP_API_SUCCESS)
11573*53ee8cc1Swenshuai.xi {
11574*53ee8cc1Swenshuai.xi GOP_M_ERR("[%s][%d] ERROR on cmd:0x%tx\n",__FUNCTION__,__LINE__, (ptrdiff_t)u32Cmd);
11575*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
11576*53ee8cc1Swenshuai.xi }
11577*53ee8cc1Swenshuai.xi
11578*53ee8cc1Swenshuai.xi //printf("(%s) Done\n\n",__FUNCTION__);
11579*53ee8cc1Swenshuai.xi
11580*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
11581*53ee8cc1Swenshuai.xi }
11582*53ee8cc1Swenshuai.xi
GOPClose(void * pInstance)11583*53ee8cc1Swenshuai.xi MS_U32 GOPClose(void* pInstance)
11584*53ee8cc1Swenshuai.xi {
11585*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
11586*53ee8cc1Swenshuai.xi extern MS_U32 MDrv_GFLIP_Del_Timer(void);
11587*53ee8cc1Swenshuai.xi if(_devGFLIPCnt==1)
11588*53ee8cc1Swenshuai.xi {
11589*53ee8cc1Swenshuai.xi MDrv_GFLIP_Del_Timer();
11590*53ee8cc1Swenshuai.xi }
11591*53ee8cc1Swenshuai.xi #endif
11592*53ee8cc1Swenshuai.xi
11593*53ee8cc1Swenshuai.xi Ioctl_GOP_AtExit(pInstance);
11594*53ee8cc1Swenshuai.xi UtopiaInstanceDelete(pInstance);
11595*53ee8cc1Swenshuai.xi
11596*53ee8cc1Swenshuai.xi return TRUE;
11597*53ee8cc1Swenshuai.xi }
11598*53ee8cc1Swenshuai.xi
11599