xref: /utopia/UTPA2-700.0.x/modules/graphic/api/gop/apiGOP.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi //  [Doxygen]
97*53ee8cc1Swenshuai.xi /// file apiGOP.c
98*53ee8cc1Swenshuai.xi /// This file includes MStar application interface for Graphic output path
99*53ee8cc1Swenshuai.xi /// @brief API for Graphics output path (GOP)
100*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor, Inc.
101*53ee8cc1Swenshuai.xi //
102*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
105*53ee8cc1Swenshuai.xi //  Include Files
106*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
107*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_LINUX_KERNEL)
108*53ee8cc1Swenshuai.xi #include <stdio.h>
109*53ee8cc1Swenshuai.xi #include <string.h>
110*53ee8cc1Swenshuai.xi #include <pthread.h>
111*53ee8cc1Swenshuai.xi #else
112*53ee8cc1Swenshuai.xi #include <linux/string.h>
113*53ee8cc1Swenshuai.xi #include <linux/slab.h>
114*53ee8cc1Swenshuai.xi #endif
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi #include "utopia.h"
117*53ee8cc1Swenshuai.xi #include "MsTypes.h"
118*53ee8cc1Swenshuai.xi #include "MsCommon.h"
119*53ee8cc1Swenshuai.xi #include "MsVersion.h"
120*53ee8cc1Swenshuai.xi #include "apiGOP.h"
121*53ee8cc1Swenshuai.xi #include "apiGOP_priv.h"
122*53ee8cc1Swenshuai.xi #include "util_symbol.h"
123*53ee8cc1Swenshuai.xi #include "drvGOP.h"
124*53ee8cc1Swenshuai.xi #include "MsOS.h"
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
128*53ee8cc1Swenshuai.xi #include "apiXC.h"
129*53ee8cc1Swenshuai.xi #include "apiXC_v2.h"
130*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
133*53ee8cc1Swenshuai.xi //  Local Compiler Options
134*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
135*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) || defined(MSOS_TYPE_LINUX_KERNEL)
136*53ee8cc1Swenshuai.xi #ifndef GOP_UTOPIA2K
137*53ee8cc1Swenshuai.xi #define GOP_UTOPIA2K
138*53ee8cc1Swenshuai.xi #endif
139*53ee8cc1Swenshuai.xi #endif
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi #define DUMP_INFO   0UL
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi #define FPGA_TEST   0UL
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
146*53ee8cc1Swenshuai.xi //  Local Defines
147*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
149*53ee8cc1Swenshuai.xi #define atoi(str) simple_strtoul(((str != NULL) ? str : ""), NULL, 0)
150*53ee8cc1Swenshuai.xi #endif
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX)
153*53ee8cc1Swenshuai.xi     #include <sys/types.h>
154*53ee8cc1Swenshuai.xi     #include <unistd.h>
155*53ee8cc1Swenshuai.xi #elif defined(MSOS_TYPE_LINUX_KERNEL)
156*53ee8cc1Swenshuai.xi     #define getpid()    pInstantGOP
157*53ee8cc1Swenshuai.xi #else
158*53ee8cc1Swenshuai.xi #define getpid() 0UL
159*53ee8cc1Swenshuai.xi #endif
160*53ee8cc1Swenshuai.xi 
161*53ee8cc1Swenshuai.xi #define GetMaxActiveGwinFalse 4UL
162*53ee8cc1Swenshuai.xi #define GetMaxActiveGwinFalse_op 5UL
163*53ee8cc1Swenshuai.xi #define GetMaxActiveGwinFalse_opened 6UL
164*53ee8cc1Swenshuai.xi #define PALETTE_ENTRY_NUM   32UL
165*53ee8cc1Swenshuai.xi #define GWIN_SDRAM_NULL 0x30UL
166*53ee8cc1Swenshuai.xi #define msWarning(c)    do {} while (0)
167*53ee8cc1Swenshuai.xi #define XC_MAIN_WINDOW  0UL
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi #define SCALING_MULITPLIER 0x1000UL
170*53ee8cc1Swenshuai.xi #define UNUSED( var )                   (void)((var) = (var))
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi //=============================================================
173*53ee8cc1Swenshuai.xi #include "ULog.h"
174*53ee8cc1Swenshuai.xi MS_U32 u32GOPDbgLevel_api;
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi // Debug Logs, level form low(INFO) to high(FATAL, always show)
177*53ee8cc1Swenshuai.xi // Function information, ex function entry
178*53ee8cc1Swenshuai.xi #define GOP_INFO(x, args...) if(u32GOPDbgLevel_api >= E_GOP_Debug_Level_HIGH) { ULOGI("GOP API", x, ##args); }
179*53ee8cc1Swenshuai.xi // Warning, illegal paramter but can be self fixed in functions
180*53ee8cc1Swenshuai.xi #define GOP_WARN(x, args...) if(u32GOPDbgLevel_api >= E_GOP_Debug_Level_HIGH) { ULOGW("GOP API", x, ##args); }
181*53ee8cc1Swenshuai.xi //  Need debug, illegal paramter.
182*53ee8cc1Swenshuai.xi #define GOP_DBUG(x, args...) if(u32GOPDbgLevel_api >= E_GOP_Debug_Level_MED) { ULOGD("GOP API", x, ##args); }
183*53ee8cc1Swenshuai.xi // Error, function will be terminated but system not crash
184*53ee8cc1Swenshuai.xi #define GOP_ERR(x, args...) if(u32GOPDbgLevel_api >= E_GOP_Debug_Level_LOW) { ULOGE("GOP API", x, ##args); }
185*53ee8cc1Swenshuai.xi // Critical, system crash. (ex. assert)
186*53ee8cc1Swenshuai.xi #define GOP_FATAL(x, args...) if(u32GOPDbgLevel_api >= E_GOP_Debug_Level_LOW) { ULOGF("GOP API", x, ##args); }
187*53ee8cc1Swenshuai.xi 
188*53ee8cc1Swenshuai.xi //=============================================================
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi #ifdef  MSOS_TYPE_LINUX
191*53ee8cc1Swenshuai.xi #include <assert.h>
192*53ee8cc1Swenshuai.xi #include <unistd.h>
193*53ee8cc1Swenshuai.xi #define GOP_ASSERT(_bool, pri)  if (!(_bool)) {GOP_FATAL("\nAssert in %s,%d\n", __FUNCTION__, __LINE__); (pri); MsOS_DelayTask(100); assert(0);}
194*53ee8cc1Swenshuai.xi #else
195*53ee8cc1Swenshuai.xi #define GOP_ASSERT(_bool, pri)  if (!(_bool)) {GOP_FATAL("\nAssert in %s,%d\n", __FUNCTION__, __LINE__); (pri);};
196*53ee8cc1Swenshuai.xi #endif
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
199*53ee8cc1Swenshuai.xi static pthread_mutex_t          GOP_XC_Instance_Mutex = PTHREAD_MUTEX_INITIALIZER;
200*53ee8cc1Swenshuai.xi #endif
201*53ee8cc1Swenshuai.xi 
_GOP_XC_Instance_Lock(void)202*53ee8cc1Swenshuai.xi static void _GOP_XC_Instance_Lock(void)
203*53ee8cc1Swenshuai.xi {
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
206*53ee8cc1Swenshuai.xi     pthread_mutex_lock(&GOP_XC_Instance_Mutex);
207*53ee8cc1Swenshuai.xi #endif
208*53ee8cc1Swenshuai.xi 
209*53ee8cc1Swenshuai.xi }
210*53ee8cc1Swenshuai.xi 
_GOP_XC_Instance_UnLock(void)211*53ee8cc1Swenshuai.xi static void _GOP_XC_Instance_UnLock(void)
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
215*53ee8cc1Swenshuai.xi     pthread_mutex_unlock(&GOP_XC_Instance_Mutex);
216*53ee8cc1Swenshuai.xi #endif
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi }
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi #define CheckGOPInstanceOpen() do{\
222*53ee8cc1Swenshuai.xi     if(pInstantGOP == NULL)\
223*53ee8cc1Swenshuai.xi     {\
224*53ee8cc1Swenshuai.xi         if(UtopiaOpen(MODULE_GOP | GOPDRIVER_BASE, &pInstantGOP, 0, pAttributeGOP) !=  UTOPIA_STATUS_SUCCESS)\
225*53ee8cc1Swenshuai.xi         {\
226*53ee8cc1Swenshuai.xi             GOP_ERR("Open GOP fail\n");\
227*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;\
228*53ee8cc1Swenshuai.xi         }\
229*53ee8cc1Swenshuai.xi     }\
230*53ee8cc1Swenshuai.xi }while(0)
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi void* pInstantGOP_XC = NULL;
234*53ee8cc1Swenshuai.xi 
235*53ee8cc1Swenshuai.xi #define CheckXCOpen()   do{\
236*53ee8cc1Swenshuai.xi      _GOP_XC_Instance_Lock();\
237*53ee8cc1Swenshuai.xi      if(pInstantGOP_XC==NULL)\
238*53ee8cc1Swenshuai.xi      {\
239*53ee8cc1Swenshuai.xi          XC_INSTANT_ATTRIBUTE stXCInstantAttribute;\
240*53ee8cc1Swenshuai.xi          memset(&stXCInstantAttribute, 0, sizeof(stXCInstantAttribute));\
241*53ee8cc1Swenshuai.xi          stXCInstantAttribute.u32DeviceID = 0;\
242*53ee8cc1Swenshuai.xi          stXCInstantAttribute.eXCType     = E_XC_INSTANT_TYPE_GOP;\
243*53ee8cc1Swenshuai.xi         if(UtopiaOpen(MODULE_XC, &pInstantGOP_XC, 0, &stXCInstantAttribute) != UTOPIA_STATUS_SUCCESS)\
244*53ee8cc1Swenshuai.xi         {\
245*53ee8cc1Swenshuai.xi             GOP_ERR("UtopiaOpen XC failed\n");\
246*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;\
247*53ee8cc1Swenshuai.xi         }\
248*53ee8cc1Swenshuai.xi      }\
249*53ee8cc1Swenshuai.xi      _GOP_XC_Instance_UnLock();\
250*53ee8cc1Swenshuai.xi }while(0)
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi #define GOP_ENTRY()                 do{ \
254*53ee8cc1Swenshuai.xi                                         APIGOP_ASSERT(bInit, GOP_FATAL("\n [Function   %s] [%d] Need GOP Driver Init First !!!!!!!\n",__FUNCTION__,__LINE__));\
255*53ee8cc1Swenshuai.xi                                         _GOP_Entry();\
256*53ee8cc1Swenshuai.xi                                     }while(0);
257*53ee8cc1Swenshuai.xi //{if(TRUE != MDrv_GOP_GWIN_BeginDraw()){GOP_ASSERT(FALSE, printf("\nError: Obtain GOP mutex fail\n"));}}
258*53ee8cc1Swenshuai.xi #define GOP_RETURN(_ret)             do{\
259*53ee8cc1Swenshuai.xi                                         return _ret;\
260*53ee8cc1Swenshuai.xi                                      }while(0);//{if(TRUE == MDrv_GOP_GWIN_EndDraw()){return _ret;}else{GOP_ASSERT(FALSE, printf("\nError: Release GOP mutex fail\n"));return _ret;}}
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
263*53ee8cc1Swenshuai.xi //  Local Structures
264*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
265*53ee8cc1Swenshuai.xi 
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
268*53ee8cc1Swenshuai.xi //  Global Variables
269*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi 
272*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
273*53ee8cc1Swenshuai.xi //  Local Variables
274*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
275*53ee8cc1Swenshuai.xi //GOP Lib Version Control
276*53ee8cc1Swenshuai.xi static MSIF_Version _api_gop_version =
277*53ee8cc1Swenshuai.xi {
278*53ee8cc1Swenshuai.xi     .DDI = { GOP_API_VERSION },
279*53ee8cc1Swenshuai.xi };
280*53ee8cc1Swenshuai.xi 
281*53ee8cc1Swenshuai.xi 
282*53ee8cc1Swenshuai.xi static MS_U32 (*fpSetFBFmt)(MS_U16 ,MS_PHY , MS_U16 ) = NULL;
283*53ee8cc1Swenshuai.xi static MS_BOOL (*fpXCIsInterlace)(void) = NULL;
284*53ee8cc1Swenshuai.xi static MS_U16 (*fpXCGetCapHStart)(void) = NULL;
285*53ee8cc1Swenshuai.xi static void (*fpXCReduceBWForOSD)(MS_U8 , MS_BOOL) = NULL;
286*53ee8cc1Swenshuai.xi static void (*fpEventNotify)(MS_U32 , void* ) = NULL;
287*53ee8cc1Swenshuai.xi static MS_BOOL (*fpXCSetDwinInfo)(MS_U16 cmd,MS_U32 *arg,MS_U16 size) = NULL;
288*53ee8cc1Swenshuai.xi static MS_BOOL bInit = FALSE;
289*53ee8cc1Swenshuai.xi MS_U32 u32TransColor = 0x00000000;
290*53ee8cc1Swenshuai.xi 
291*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
292*53ee8cc1Swenshuai.xi //  Utopia 2.0
293*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi void* pInstantGOP = NULL;
296*53ee8cc1Swenshuai.xi void* pAttributeGOP = NULL;
297*53ee8cc1Swenshuai.xi 
298*53ee8cc1Swenshuai.xi GOP_Palette PaletteEntry[PALETTE_ENTRY_NUM] =
299*53ee8cc1Swenshuai.xi {
300*53ee8cc1Swenshuai.xi     //   A,    R,    G,    B
301*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x00, 0x00 },   // black           0
302*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0x00, 0x00 },   // red             1
303*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0xff, 0x00 },   // green           2
304*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0xff, 0x00 },   // yellow          3
305*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x00, 0xff },   // blue            4
306*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0x00, 0xff },   // magenta         5
307*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0xff, 0xff },   // cyan            6
308*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0xff, 0xff },   // white           7
309*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0x08, 0xff },   // transparent     8
310*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x00, 0x00 },   // half red        9
311*53ee8cc1Swenshuai.xi     { 0x00, 0xCC, 0xCC, 0xCC },   // half green      10
312*53ee8cc1Swenshuai.xi     { 0x00, 0x54, 0x54, 0x54 },   // half yellow     11
313*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x00, 0x7f },   // half blue       12
314*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x00, 0x7f },   // half magenta    13
315*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x7f, 0x7f },   // half cyan       14
316*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x7f, 0x7f },   // gray            15
317*53ee8cc1Swenshuai.xi     { 0x00, 0x0f, 0x0f, 0x0f },
318*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0x00, 0x00 },
319*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0xff, 0x00 },
320*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0xff, 0x00 },
321*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x00, 0xff },
322*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0x00, 0xff },
323*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0xff, 0xff },
324*53ee8cc1Swenshuai.xi     { 0x00, 0xff, 0xff, 0xff },
325*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x00, 0x00 },   // Transparent      24
326*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x00, 0x00 },
327*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x7f, 0x00 },
328*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x7f, 0x00 },
329*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x00, 0x7f },
330*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x00, 0x7f },
331*53ee8cc1Swenshuai.xi     { 0x00, 0x00, 0x7f, 0x7f },
332*53ee8cc1Swenshuai.xi     { 0x00, 0x7f, 0x7f, 0x7f },
333*53ee8cc1Swenshuai.xi };
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
336*53ee8cc1Swenshuai.xi //  Debug Functions
337*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
340*53ee8cc1Swenshuai.xi //  Local Functions
341*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
GOP_CalcPitch(MS_U8 fbFmt,MS_U16 width)342*53ee8cc1Swenshuai.xi static MS_U32 GOP_CalcPitch(MS_U8 fbFmt, MS_U16 width)
343*53ee8cc1Swenshuai.xi {
344*53ee8cc1Swenshuai.xi     MS_U16 pitch=0;
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi     switch ( fbFmt )
347*53ee8cc1Swenshuai.xi     {
348*53ee8cc1Swenshuai.xi     case E_MS_FMT_I1 :
349*53ee8cc1Swenshuai.xi         pitch = (width) >> 3;
350*53ee8cc1Swenshuai.xi         break;
351*53ee8cc1Swenshuai.xi     case E_MS_FMT_I2 :
352*53ee8cc1Swenshuai.xi         pitch = (width<<1) >> 3;
353*53ee8cc1Swenshuai.xi         break;
354*53ee8cc1Swenshuai.xi     case E_MS_FMT_I4 :
355*53ee8cc1Swenshuai.xi         pitch = (width<<2) >> 3;
356*53ee8cc1Swenshuai.xi         break;
357*53ee8cc1Swenshuai.xi     case E_MS_FMT_I8 :
358*53ee8cc1Swenshuai.xi         pitch = width;
359*53ee8cc1Swenshuai.xi         break;
360*53ee8cc1Swenshuai.xi     case E_MS_FMT_RGB565 :
361*53ee8cc1Swenshuai.xi     case E_MS_FMT_BGR565 :
362*53ee8cc1Swenshuai.xi     case E_MS_FMT_ARGB1555 :
363*53ee8cc1Swenshuai.xi     case E_MS_FMT_ABGR1555 :
364*53ee8cc1Swenshuai.xi     case E_MS_FMT_BGRA5551 :
365*53ee8cc1Swenshuai.xi     case E_MS_FMT_RGBA5551 :
366*53ee8cc1Swenshuai.xi     case E_MS_FMT_ARGB4444 :
367*53ee8cc1Swenshuai.xi     case E_MS_FMT_RGBA4444 :
368*53ee8cc1Swenshuai.xi     case E_MS_FMT_ABGR4444 :
369*53ee8cc1Swenshuai.xi     case E_MS_FMT_BGRA4444 :
370*53ee8cc1Swenshuai.xi     case E_MS_FMT_1ABFgBg12355:
371*53ee8cc1Swenshuai.xi     case E_MS_FMT_FaBaFgBg2266:
372*53ee8cc1Swenshuai.xi     case E_MS_FMT_YUV422:
373*53ee8cc1Swenshuai.xi     case E_MS_FMT_ARGB1555_DST :
374*53ee8cc1Swenshuai.xi         pitch = width << 1;
375*53ee8cc1Swenshuai.xi         break;
376*53ee8cc1Swenshuai.xi     case E_MS_FMT_AYUV8888 :
377*53ee8cc1Swenshuai.xi     case E_MS_FMT_ARGB8888 :
378*53ee8cc1Swenshuai.xi     case E_MS_FMT_RGBA8888 :
379*53ee8cc1Swenshuai.xi     case E_MS_FMT_BGRA8888:
380*53ee8cc1Swenshuai.xi     case E_MS_FMT_ABGR8888 :
381*53ee8cc1Swenshuai.xi         pitch = width << 2;
382*53ee8cc1Swenshuai.xi         break;
383*53ee8cc1Swenshuai.xi     default :
384*53ee8cc1Swenshuai.xi         //print err
385*53ee8cc1Swenshuai.xi         pitch = 0;
386*53ee8cc1Swenshuai.xi         break;
387*53ee8cc1Swenshuai.xi     }
388*53ee8cc1Swenshuai.xi     return pitch;
389*53ee8cc1Swenshuai.xi }
390*53ee8cc1Swenshuai.xi 
GOP_GetBPP(EN_GOP_COLOR_TYPE fbFmt)391*53ee8cc1Swenshuai.xi static MS_U16 GOP_GetBPP(EN_GOP_COLOR_TYPE fbFmt)
392*53ee8cc1Swenshuai.xi {
393*53ee8cc1Swenshuai.xi     MS_U16 bpp=0;
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi     switch ( fbFmt )
396*53ee8cc1Swenshuai.xi     {
397*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_RGB555_BLINK :
398*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_RGB565 :
399*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_BGR565 :
400*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_ARGB1555:
401*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_ABGR1555:
402*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_ARGB4444 :
403*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_RGBA4444 :
404*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_ABGR4444 :
405*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_BGRA4444 :
406*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_RGB555YUV422:
407*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_YUV422:
408*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_2266:
409*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_RGBA5551:
410*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_BGRA5551:
411*53ee8cc1Swenshuai.xi         bpp = 16;
412*53ee8cc1Swenshuai.xi         break;
413*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_AYUV8888 :
414*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_ARGB8888 :
415*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_ABGR8888 :
416*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_RGBA8888 :
417*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_BGRA8888 :
418*53ee8cc1Swenshuai.xi         bpp = 32;
419*53ee8cc1Swenshuai.xi         break;
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi     case E_GOP_COLOR_I8 :
422*53ee8cc1Swenshuai.xi         bpp = 8;
423*53ee8cc1Swenshuai.xi         break;
424*53ee8cc1Swenshuai.xi     default :
425*53ee8cc1Swenshuai.xi         //print err
426*53ee8cc1Swenshuai.xi         //__ASSERT(0);
427*53ee8cc1Swenshuai.xi         bpp = FB_FMT_AS_DEFAULT;
428*53ee8cc1Swenshuai.xi         break;
429*53ee8cc1Swenshuai.xi     }
430*53ee8cc1Swenshuai.xi     return bpp;
431*53ee8cc1Swenshuai.xi 
432*53ee8cc1Swenshuai.xi }
433*53ee8cc1Swenshuai.xi 
434*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
_XCGetCapHStartCB(void)435*53ee8cc1Swenshuai.xi static E_GOP_API_Result _XCGetCapHStartCB(void)
436*53ee8cc1Swenshuai.xi {
437*53ee8cc1Swenshuai.xi     MS_XC_DST_DispInfo dstDispInfo;
438*53ee8cc1Swenshuai.xi     MS_U32 u32XCHStart=0;
439*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
440*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi     CheckXCOpen();
443*53ee8cc1Swenshuai.xi 
444*53ee8cc1Swenshuai.xi     MApi_XC_GetDstInfo(&dstDispInfo,sizeof(MS_XC_DST_DispInfo),E_GOP_XCDST_IP1_MAIN);
445*53ee8cc1Swenshuai.xi     u32XCHStart = dstDispInfo.DEHST;
446*53ee8cc1Swenshuai.xi 
447*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
448*53ee8cc1Swenshuai.xi     {
449*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_XC_PANEL_HSTART;
450*53ee8cc1Swenshuai.xi         ioctl_info.pCB = (void*)&u32XCHStart;
451*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
452*53ee8cc1Swenshuai.xi         {
453*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
454*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
455*53ee8cc1Swenshuai.xi         }
456*53ee8cc1Swenshuai.xi     }
457*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi 
_XCGetXCInterlaceCB(void)460*53ee8cc1Swenshuai.xi static E_GOP_API_Result _XCGetXCInterlaceCB(void)
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi     XC_ApiStatus xcStatus;
463*53ee8cc1Swenshuai.xi     MS_BOOL bInterlace=0;
464*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
465*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi     CheckXCOpen();
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi     MApi_XC_GetStatus(&xcStatus,MAIN_WINDOW);
470*53ee8cc1Swenshuai.xi     bInterlace = xcStatus.bInterlace;
471*53ee8cc1Swenshuai.xi 
472*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
473*53ee8cc1Swenshuai.xi     {
474*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_XC_INTERLACE;
475*53ee8cc1Swenshuai.xi         ioctl_info.pCB = &bInterlace;
476*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
477*53ee8cc1Swenshuai.xi         {
478*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
479*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
480*53ee8cc1Swenshuai.xi         }
481*53ee8cc1Swenshuai.xi     }
482*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
483*53ee8cc1Swenshuai.xi }
484*53ee8cc1Swenshuai.xi #endif
485*53ee8cc1Swenshuai.xi 
_GOP_Entry(void)486*53ee8cc1Swenshuai.xi static void _GOP_Entry(void)
487*53ee8cc1Swenshuai.xi {
488*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
489*53ee8cc1Swenshuai.xi     //_XCGetCapHStartCB();
490*53ee8cc1Swenshuai.xi     //_XCGetXCInterlaceCB();
491*53ee8cc1Swenshuai.xi #endif
492*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_ResetPool(void)493*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_ResetPool(void)
494*53ee8cc1Swenshuai.xi {
495*53ee8cc1Swenshuai.xi     MS_U32 i;
496*53ee8cc1Swenshuai.xi     static MS_BOOL bPoolReseted = FALSE;
497*53ee8cc1Swenshuai.xi 
498*53ee8cc1Swenshuai.xi     if (bPoolReseted)
499*53ee8cc1Swenshuai.xi     {
500*53ee8cc1Swenshuai.xi         return GOP_API_SUCCESS;
501*53ee8cc1Swenshuai.xi     }
502*53ee8cc1Swenshuai.xi     else
503*53ee8cc1Swenshuai.xi     {
504*53ee8cc1Swenshuai.xi         bPoolReseted = TRUE;
505*53ee8cc1Swenshuai.xi     }
506*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
507*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_RESETPOOL,&i) != UTOPIA_STATUS_SUCCESS)
508*53ee8cc1Swenshuai.xi     {
509*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
510*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
511*53ee8cc1Swenshuai.xi     }
512*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
513*53ee8cc1Swenshuai.xi 
514*53ee8cc1Swenshuai.xi }
515*53ee8cc1Swenshuai.xi 
Mapi_GOP_GWIN_ResetGOP(MS_U32 u32Gop)516*53ee8cc1Swenshuai.xi E_GOP_API_Result Mapi_GOP_GWIN_ResetGOP(MS_U32 u32Gop)
517*53ee8cc1Swenshuai.xi {
518*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
519*53ee8cc1Swenshuai.xi     MS_U32 i;
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
522*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_RESOURCE;
523*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u32Gop;
524*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&i;
525*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
526*53ee8cc1Swenshuai.xi 
527*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
528*53ee8cc1Swenshuai.xi     {
529*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
530*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
531*53ee8cc1Swenshuai.xi     }
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
534*53ee8cc1Swenshuai.xi }
535*53ee8cc1Swenshuai.xi 
536*53ee8cc1Swenshuai.xi /********************************************************************************/
537*53ee8cc1Swenshuai.xi /// Open API function:
538*53ee8cc1Swenshuai.xi ///     Read GWIN information from GOP registers
539*53ee8cc1Swenshuai.xi /// @param u8win \b IN  GWINID
540*53ee8cc1Swenshuai.xi /// @param pinfo \b OUT buffer to store GWIN information
541*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
542*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
543*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_GetWinInfo(MS_U8 u8win,GOP_GwinInfo * pinfo)544*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetWinInfo(MS_U8 u8win, GOP_GwinInfo* pinfo)
545*53ee8cc1Swenshuai.xi {
546*53ee8cc1Swenshuai.xi     GOP_ENTRY();
547*53ee8cc1Swenshuai.xi 
548*53ee8cc1Swenshuai.xi     GOP_GWIN_SETWININFO_PARAM ioctl_info;
549*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO win_info;
550*53ee8cc1Swenshuai.xi 
551*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_SETWININFO_PARAM));
552*53ee8cc1Swenshuai.xi     memset(&win_info, 0x0, sizeof(GOP_BUFFER_INFO));
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8win;
555*53ee8cc1Swenshuai.xi     ioctl_info.pinfo = (MS_U32*)&win_info;
556*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
557*53ee8cc1Swenshuai.xi 
558*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_WININFO,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
559*53ee8cc1Swenshuai.xi     {
560*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
561*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
562*53ee8cc1Swenshuai.xi     }
563*53ee8cc1Swenshuai.xi 
564*53ee8cc1Swenshuai.xi     pinfo->u32DRAMRBlkStart   =  win_info.addr;
565*53ee8cc1Swenshuai.xi     pinfo->u16DispHPixelStart =  win_info.disp_rect.x ;
566*53ee8cc1Swenshuai.xi     pinfo->u16DispVPixelStart =  win_info.disp_rect.y;
567*53ee8cc1Swenshuai.xi     pinfo->u16DispHPixelEnd   =  win_info.disp_rect.x + win_info.disp_rect.w;
568*53ee8cc1Swenshuai.xi     pinfo->u16DispVPixelEnd   =  win_info.disp_rect.y + win_info.disp_rect.h;
569*53ee8cc1Swenshuai.xi     pinfo->u16RBlkHPixSize    =  win_info.width;
570*53ee8cc1Swenshuai.xi     pinfo->u16RBlkVPixSize    =  win_info.height;
571*53ee8cc1Swenshuai.xi     pinfo->clrType            =  (EN_GOP_COLOR_TYPE)win_info.fbFmt;
572*53ee8cc1Swenshuai.xi     pinfo->u16RBlkHRblkSize   =  win_info.pitch;
573*53ee8cc1Swenshuai.xi 
574*53ee8cc1Swenshuai.xi 
575*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
576*53ee8cc1Swenshuai.xi 
577*53ee8cc1Swenshuai.xi }
578*53ee8cc1Swenshuai.xi MS_U32 _GOP_RegisterAllCBFunc(void);
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi /********************************************************************************/
581*53ee8cc1Swenshuai.xi /// Set transparent color (ARGB domain). Note that this funcion just set transparent color to gop hareware but
582*53ee8cc1Swenshuai.xi /// does not enable gop transparent function yet.
583*53ee8cc1Swenshuai.xi /// @param clr \b IN: transparent color
584*53ee8cc1Swenshuai.xi /// @param mask \b IN: alpha value
585*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
586*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetTransClr_8888_EX(MS_U8 u8GOP,MS_U32 clr,MS_U32 mask)587*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetTransClr_8888_EX(MS_U8 u8GOP,MS_U32 clr, MS_U32 mask)
588*53ee8cc1Swenshuai.xi {
589*53ee8cc1Swenshuai.xi 
590*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
591*53ee8cc1Swenshuai.xi     GOP_TRANSCOLOR trans_set;
592*53ee8cc1Swenshuai.xi 
593*53ee8cc1Swenshuai.xi     GOP_ENTRY();
594*53ee8cc1Swenshuai.xi 
595*53ee8cc1Swenshuai.xi     trans_set.bEn = TRUE;
596*53ee8cc1Swenshuai.xi     trans_set.color = clr;
597*53ee8cc1Swenshuai.xi     trans_set.fmt = GOPTRANSCLR_FMT2;
598*53ee8cc1Swenshuai.xi     trans_set.transclr_property = EN_TRANSCLR_SET_COLOR;
599*53ee8cc1Swenshuai.xi 
600*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_TRANSCOLOR;
601*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
602*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&trans_set;
603*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_TRANSCOLOR);
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi     u32TransColor = clr;
606*53ee8cc1Swenshuai.xi 
607*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
608*53ee8cc1Swenshuai.xi     {
609*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
610*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
611*53ee8cc1Swenshuai.xi     }
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
614*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_SetTransClr_8888(MS_U32 clr,MS_U32 mask)615*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetTransClr_8888(MS_U32 clr, MS_U32 mask)
616*53ee8cc1Swenshuai.xi {
617*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
618*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
621*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetTransClr_8888_EX(u8GOP,clr,mask);
622*53ee8cc1Swenshuai.xi     return ret;
623*53ee8cc1Swenshuai.xi }
624*53ee8cc1Swenshuai.xi 
625*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_EnableT3DMode(MS_BOOL bEnable)626*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableT3DMode(MS_BOOL bEnable)
627*53ee8cc1Swenshuai.xi {
628*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
629*53ee8cc1Swenshuai.xi     MS_BOOL  bEna;
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi     GOP_ENTRY();
632*53ee8cc1Swenshuai.xi 
633*53ee8cc1Swenshuai.xi     bEna = bEnable;
634*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_ENABLE_T3D;
635*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (void*)&bEna;
636*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
639*53ee8cc1Swenshuai.xi     {
640*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
641*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
642*53ee8cc1Swenshuai.xi     }
643*53ee8cc1Swenshuai.xi 
644*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
645*53ee8cc1Swenshuai.xi }
646*53ee8cc1Swenshuai.xi 
647*53ee8cc1Swenshuai.xi /********************************************************************************/
648*53ee8cc1Swenshuai.xi /// Set clock for gop dwin (for dwin source is OP)
649*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
650*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_SetClkForCapture(void)651*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetClkForCapture(void)
652*53ee8cc1Swenshuai.xi {
653*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
654*53ee8cc1Swenshuai.xi     MS_U32  value = 0;
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi     GOP_ENTRY();
657*53ee8cc1Swenshuai.xi 
658*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_SET_CAPTURE_CLK;
659*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&value;
660*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
661*53ee8cc1Swenshuai.xi 
662*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
663*53ee8cc1Swenshuai.xi     {
664*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
665*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
666*53ee8cc1Swenshuai.xi     }
667*53ee8cc1Swenshuai.xi 
668*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
669*53ee8cc1Swenshuai.xi }
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi GOP_CAPTURE_INFO g_CaptureInfo;
672*53ee8cc1Swenshuai.xi 
673*53ee8cc1Swenshuai.xi /********************************************************************************/
674*53ee8cc1Swenshuai.xi /// Set gop dwin capture one frame
675*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
676*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_DWIN_CaptureOneFrame(void)677*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_CaptureOneFrame(void)
678*53ee8cc1Swenshuai.xi {
679*53ee8cc1Swenshuai.xi     GOP_ENTRY();
680*53ee8cc1Swenshuai.xi 
681*53ee8cc1Swenshuai.xi     GOP_DWIN_CAPTURE_PARAM ioctl_info;
682*53ee8cc1Swenshuai.xi     GOP_CAPTURE_INFO dwin_info;
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi     ioctl_info.pDwin = (MS_U32*)&dwin_info;
685*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_CAPTURE_INFO);
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi     g_CaptureInfo.framecount = 1;
688*53ee8cc1Swenshuai.xi     g_CaptureInfo.bEn = FALSE;
689*53ee8cc1Swenshuai.xi     g_CaptureInfo.bWait = TRUE;
690*53ee8cc1Swenshuai.xi     memcpy(&dwin_info, &g_CaptureInfo, sizeof(GOP_CAPTURE_INFO));
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_CAPTURE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
693*53ee8cc1Swenshuai.xi     {
694*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
695*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
696*53ee8cc1Swenshuai.xi     }
697*53ee8cc1Swenshuai.xi 
698*53ee8cc1Swenshuai.xi     MsOS_ReadMemory();  //make mips can read the dram without cache coherence issue.
699*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
700*53ee8cc1Swenshuai.xi 
701*53ee8cc1Swenshuai.xi }
702*53ee8cc1Swenshuai.xi 
703*53ee8cc1Swenshuai.xi 
704*53ee8cc1Swenshuai.xi /********************************************************************************/
705*53ee8cc1Swenshuai.xi /// Set gop dwin capture one frame
706*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
707*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_DWIN_CaptureOneFrame2(void)708*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_CaptureOneFrame2(void)
709*53ee8cc1Swenshuai.xi {
710*53ee8cc1Swenshuai.xi     GOP_ENTRY();
711*53ee8cc1Swenshuai.xi 
712*53ee8cc1Swenshuai.xi     GOP_DWIN_CAPTURE_PARAM ioctl_info;
713*53ee8cc1Swenshuai.xi     GOP_CAPTURE_INFO dwin_info;
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi     ioctl_info.pDwin = (MS_U32*)&dwin_info;
716*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_CAPTURE_INFO);
717*53ee8cc1Swenshuai.xi 
718*53ee8cc1Swenshuai.xi     g_CaptureInfo.framecount = 1;
719*53ee8cc1Swenshuai.xi     g_CaptureInfo.bEn = FALSE;
720*53ee8cc1Swenshuai.xi     g_CaptureInfo.bWait = FALSE;
721*53ee8cc1Swenshuai.xi     memcpy(&dwin_info, &g_CaptureInfo, sizeof(GOP_CAPTURE_INFO));
722*53ee8cc1Swenshuai.xi 
723*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_CAPTURE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
724*53ee8cc1Swenshuai.xi     {
725*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
726*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
727*53ee8cc1Swenshuai.xi     }
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi     MsOS_ReadMemory();  //make mips can read the dram without cache coherence issue.
730*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi }
733*53ee8cc1Swenshuai.xi 
734*53ee8cc1Swenshuai.xi /********************************************************************************/
735*53ee8cc1Swenshuai.xi /// Config Dwin source (OP or MVOP).
736*53ee8cc1Swenshuai.xi /// @param enScanMode \b IN: EN_GOP_DWIN_SCAN_MODE
737*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
738*53ee8cc1Swenshuai.xi ///            GOP_API_INVALID_PARAMETERS - don't support this dwin source
739*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_DWIN_SetSourceSel(EN_GOP_DWIN_SRC_SEL enSrcSel)740*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetSourceSel(EN_GOP_DWIN_SRC_SEL enSrcSel)
741*53ee8cc1Swenshuai.xi {
742*53ee8cc1Swenshuai.xi     GOP_ENTRY();
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi     g_CaptureInfo.src = (EN_GOP_DWIN_SRC)enSrcSel;
745*53ee8cc1Swenshuai.xi 
746*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
747*53ee8cc1Swenshuai.xi }
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi /******************************************************************************/
750*53ee8cc1Swenshuai.xi /// Set interrupt mask of GOP DWIN.
751*53ee8cc1Swenshuai.xi /// @param u8mask \b IN bitmask of interrupt type
752*53ee8cc1Swenshuai.xi ///   - bit7 DWIN VSYNC interrupt mask
753*53ee8cc1Swenshuai.xi ///   - bit6 Dump Window interlace Bottom Field ACK Interrupt Mask
754*53ee8cc1Swenshuai.xi ///   - bit5 Dump Window interlace Top Field ACK Interrupt Mask
755*53ee8cc1Swenshuai.xi ///   - bit4 Dump Window Progressive ACK Interrupt Mask
756*53ee8cc1Swenshuai.xi ///   - bit3:1 Reserved
757*53ee8cc1Swenshuai.xi ///   - bit0 GWIN VSYNC Interrupt Mask
758*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
759*53ee8cc1Swenshuai.xi ///   - # TRUE enable interrupts specified by u8mask
760*53ee8cc1Swenshuai.xi ///   - # FALSE disable interrupts specified by u8mask
761*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
762*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_DWIN_EnableIntr(MS_U16 u8mask,MS_BOOL bEnable)763*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_EnableIntr(MS_U16 u8mask, MS_BOOL bEnable)
764*53ee8cc1Swenshuai.xi {
765*53ee8cc1Swenshuai.xi     GOP_ENTRY();
766*53ee8cc1Swenshuai.xi 
767*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_STATUS_PARAM ioctl_info;
768*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_CTRL intrInfo;
769*53ee8cc1Swenshuai.xi 
770*53ee8cc1Swenshuai.xi     ioctl_info.intr_type = E_GOP_DWIN_INTR_CONTROL;
771*53ee8cc1Swenshuai.xi     ioctl_info.pIntrInfo = (MS_U32*)&intrInfo;
772*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_DWIN_INTR_CTRL);
773*53ee8cc1Swenshuai.xi 
774*53ee8cc1Swenshuai.xi     intrInfo.mask = u8mask;
775*53ee8cc1Swenshuai.xi     intrInfo.intrEn = (MS_U32)bEnable;
776*53ee8cc1Swenshuai.xi 
777*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_INTR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
778*53ee8cc1Swenshuai.xi     {
779*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
780*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
781*53ee8cc1Swenshuai.xi     }
782*53ee8cc1Swenshuai.xi 
783*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi }
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi 
788*53ee8cc1Swenshuai.xi /********************************************************************************/
789*53ee8cc1Swenshuai.xi /// Set gop output color type
790*53ee8cc1Swenshuai.xi /// @param type \b IN: gop output color type
791*53ee8cc1Swenshuai.xi ///   - # GOPOUT_RGB => RGB mode
792*53ee8cc1Swenshuai.xi ///   - # GOPOUT_YUV => YUV mode
793*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
794*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_OutputColor_EX(MS_U8 u8GOP,EN_GOP_OUTPUT_COLOR type)795*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_OutputColor_EX(MS_U8 u8GOP,EN_GOP_OUTPUT_COLOR type)
796*53ee8cc1Swenshuai.xi {
797*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
798*53ee8cc1Swenshuai.xi     EN_GOP_OUTPUT_COLOR  output;
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi     GOP_ENTRY();
801*53ee8cc1Swenshuai.xi 
802*53ee8cc1Swenshuai.xi     output = type;
803*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_OUTPUT_COLOR;
804*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
805*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&output;
806*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(EN_GOP_OUTPUT_COLOR);
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
809*53ee8cc1Swenshuai.xi     {
810*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
811*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
812*53ee8cc1Swenshuai.xi     }
813*53ee8cc1Swenshuai.xi 
814*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
815*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_OutputColor(EN_GOP_OUTPUT_COLOR type)816*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_OutputColor(EN_GOP_OUTPUT_COLOR type)
817*53ee8cc1Swenshuai.xi {
818*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
819*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
820*53ee8cc1Swenshuai.xi 
821*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
822*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_OutputColor_EX(u8GOP,type);
823*53ee8cc1Swenshuai.xi     return ret;
824*53ee8cc1Swenshuai.xi }
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi 
827*53ee8cc1Swenshuai.xi /********************************************************************************/
828*53ee8cc1Swenshuai.xi /// Get GOP Dwin interrupt status
829*53ee8cc1Swenshuai.xi /// @return GOP Dwin interrupt status
830*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_DWIN_GetIntrStatus(void)831*53ee8cc1Swenshuai.xi MS_U16 MApi_GOP_DWIN_GetIntrStatus(void)
832*53ee8cc1Swenshuai.xi {
833*53ee8cc1Swenshuai.xi     MS_U16 ret = 0;
834*53ee8cc1Swenshuai.xi     GOP_ENTRY();
835*53ee8cc1Swenshuai.xi 
836*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_STATUS_PARAM ioctl_info;
837*53ee8cc1Swenshuai.xi     MS_U16 intrStatus;
838*53ee8cc1Swenshuai.xi 
839*53ee8cc1Swenshuai.xi     ioctl_info.intr_type = E_GOP_DWIN_INTR_GETINFO;
840*53ee8cc1Swenshuai.xi     ioctl_info.pIntrInfo = (void*)&intrStatus;
841*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U16);
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_INTR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
844*53ee8cc1Swenshuai.xi     {
845*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
846*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
847*53ee8cc1Swenshuai.xi     }
848*53ee8cc1Swenshuai.xi 
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi     GOP_RETURN(ret);
851*53ee8cc1Swenshuai.xi 
852*53ee8cc1Swenshuai.xi }
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi 
855*53ee8cc1Swenshuai.xi //******************************************************************************
856*53ee8cc1Swenshuai.xi /// clear DWIN interrupt
857*53ee8cc1Swenshuai.xi /// @param u8mask \b IN: interrup mask
858*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
859*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_ClearIntr(MS_U16 u8mask)860*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_ClearIntr(MS_U16 u8mask)
861*53ee8cc1Swenshuai.xi {
862*53ee8cc1Swenshuai.xi     GOP_ENTRY();
863*53ee8cc1Swenshuai.xi 
864*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_STATUS_PARAM ioctl_info;
865*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_CTRL intrInfo;
866*53ee8cc1Swenshuai.xi 
867*53ee8cc1Swenshuai.xi     ioctl_info.intr_type = E_GOP_DWIN_INTR_CONTROL;
868*53ee8cc1Swenshuai.xi     ioctl_info.pIntrInfo = (MS_U32*)&intrInfo;
869*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_DWIN_INTR_CTRL);
870*53ee8cc1Swenshuai.xi 
871*53ee8cc1Swenshuai.xi     intrInfo.mask = u8mask;
872*53ee8cc1Swenshuai.xi     intrInfo.intrEn  = 0x0;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_INTR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
875*53ee8cc1Swenshuai.xi     {
876*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
877*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
878*53ee8cc1Swenshuai.xi     }
879*53ee8cc1Swenshuai.xi 
880*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi }
883*53ee8cc1Swenshuai.xi 
884*53ee8cc1Swenshuai.xi //******************************************************************************
885*53ee8cc1Swenshuai.xi /// Get DWIN interrupt Information.
886*53ee8cc1Swenshuai.xi /// @param pDWinIntInfo \b OUT: dwin interrup flag
887*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
888*53ee8cc1Swenshuai.xi //******************************************************************************
889*53ee8cc1Swenshuai.xi #define DWIN_TIMEOUT_CNT     60UL
MApi_GOP_DWIN_GetDWinIntInfoTimeout(GOP_DWinIntInfo * pDWinIntInfo,MS_U32 u32Timeout)890*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_GetDWinIntInfoTimeout(GOP_DWinIntInfo *pDWinIntInfo,MS_U32 u32Timeout)
891*53ee8cc1Swenshuai.xi {
892*53ee8cc1Swenshuai.xi     MS_U16 ret = 0;
893*53ee8cc1Swenshuai.xi     GOP_ENTRY();
894*53ee8cc1Swenshuai.xi 
895*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_STATUS_PARAM ioctl_info;
896*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_TIME_OUT DWinIntinfoTimeout;
897*53ee8cc1Swenshuai.xi 
898*53ee8cc1Swenshuai.xi     memset(&DWinIntinfoTimeout, 0x0, sizeof(GOP_DWIN_INTR_TIME_OUT));
899*53ee8cc1Swenshuai.xi     memcpy(&DWinIntinfoTimeout.DWinIntInfo, pDWinIntInfo, sizeof(GOP_DWinIntInfo));
900*53ee8cc1Swenshuai.xi     DWinIntinfoTimeout.u32Timeout = u32Timeout;
901*53ee8cc1Swenshuai.xi 
902*53ee8cc1Swenshuai.xi     ioctl_info.intr_type = E_GOP_DWIN_INTR_GETINFO_TIMEOUT;
903*53ee8cc1Swenshuai.xi     ioctl_info.pIntrInfo = (MS_U32*)&DWinIntinfoTimeout;
904*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_DWIN_INTR_TIME_OUT);
905*53ee8cc1Swenshuai.xi 
906*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_INTR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
907*53ee8cc1Swenshuai.xi     {
908*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
909*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
910*53ee8cc1Swenshuai.xi     }
911*53ee8cc1Swenshuai.xi 
912*53ee8cc1Swenshuai.xi     memcpy(pDWinIntInfo, &DWinIntinfoTimeout.DWinIntInfo, sizeof(GOP_DWinIntInfo));
913*53ee8cc1Swenshuai.xi 
914*53ee8cc1Swenshuai.xi     GOP_RETURN(ret);
915*53ee8cc1Swenshuai.xi 
916*53ee8cc1Swenshuai.xi }
917*53ee8cc1Swenshuai.xi 
918*53ee8cc1Swenshuai.xi 
919*53ee8cc1Swenshuai.xi //******************************************************************************
920*53ee8cc1Swenshuai.xi /// Get DWIN interrupt Information.
921*53ee8cc1Swenshuai.xi /// @param pDWinIntInfo \b OUT: dwin interrup flag
922*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
923*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_GetDWinIntInfo(GOP_DWinIntInfo * pDWinIntInfo)924*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_GetDWinIntInfo(GOP_DWinIntInfo *pDWinIntInfo)
925*53ee8cc1Swenshuai.xi {
926*53ee8cc1Swenshuai.xi     GOP_ENTRY();
927*53ee8cc1Swenshuai.xi 
928*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_STATUS_PARAM ioctl_info;
929*53ee8cc1Swenshuai.xi     GOP_DWIN_INTR_TIME_OUT DWinIntinfoTimeout;
930*53ee8cc1Swenshuai.xi 
931*53ee8cc1Swenshuai.xi     memset(&DWinIntinfoTimeout, 0x0, sizeof(GOP_DWIN_INTR_TIME_OUT));
932*53ee8cc1Swenshuai.xi     memcpy(&DWinIntinfoTimeout.DWinIntInfo, pDWinIntInfo, sizeof(GOP_DWinIntInfo));
933*53ee8cc1Swenshuai.xi     DWinIntinfoTimeout.u32Timeout = 0;
934*53ee8cc1Swenshuai.xi 
935*53ee8cc1Swenshuai.xi     ioctl_info.intr_type = E_GOP_DWIN_INTR_GETINFO_TIMEOUT;
936*53ee8cc1Swenshuai.xi     ioctl_info.pIntrInfo = (MS_U32*)&DWinIntinfoTimeout;
937*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_DWIN_INTR_TIME_OUT);
938*53ee8cc1Swenshuai.xi 
939*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_INTR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
940*53ee8cc1Swenshuai.xi     {
941*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
942*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
943*53ee8cc1Swenshuai.xi     }
944*53ee8cc1Swenshuai.xi 
945*53ee8cc1Swenshuai.xi     memcpy(pDWinIntInfo, &DWinIntinfoTimeout.DWinIntInfo, sizeof(GOP_DWinIntInfo));
946*53ee8cc1Swenshuai.xi 
947*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
948*53ee8cc1Swenshuai.xi 
949*53ee8cc1Swenshuai.xi }
950*53ee8cc1Swenshuai.xi /******************************************************************************/
951*53ee8cc1Swenshuai.xi /// Enable/Disable gop alpha inverse
952*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE or FALSE
953*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
954*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetAlphaInverse_EX(MS_U8 u8GOP,MS_BOOL bEnable)955*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetAlphaInverse_EX(MS_U8 u8GOP,MS_BOOL bEnable)
956*53ee8cc1Swenshuai.xi {
957*53ee8cc1Swenshuai.xi     MS_BOOL bAlphaInv;
958*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
959*53ee8cc1Swenshuai.xi 
960*53ee8cc1Swenshuai.xi     GOP_ENTRY();
961*53ee8cc1Swenshuai.xi 
962*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
963*53ee8cc1Swenshuai.xi     bAlphaInv = bEnable;
964*53ee8cc1Swenshuai.xi 
965*53ee8cc1Swenshuai.xi 
966*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_ALPHAINVERSE;
967*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
968*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bAlphaInv;
969*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
970*53ee8cc1Swenshuai.xi 
971*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
972*53ee8cc1Swenshuai.xi     {
973*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
974*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
975*53ee8cc1Swenshuai.xi     }
976*53ee8cc1Swenshuai.xi 
977*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
978*53ee8cc1Swenshuai.xi 
979*53ee8cc1Swenshuai.xi 
980*53ee8cc1Swenshuai.xi }
981*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetAlphaInverse(MS_BOOL bEnable)982*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetAlphaInverse(MS_BOOL bEnable)
983*53ee8cc1Swenshuai.xi {
984*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
985*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
986*53ee8cc1Swenshuai.xi 
987*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
988*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetAlphaInverse_EX(u8GOP,bEnable);
989*53ee8cc1Swenshuai.xi     return ret;
990*53ee8cc1Swenshuai.xi }
991*53ee8cc1Swenshuai.xi 
992*53ee8cc1Swenshuai.xi /******************************************************************************/
993*53ee8cc1Swenshuai.xi /// Get gop alpha inverse setting
994*53ee8cc1Swenshuai.xi /// @param bEnable \b OUT: TRUE or FALSE
995*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
996*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetAlphaInverse_EX(MS_U8 u8GOP,MS_BOOL * bEnable)997*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetAlphaInverse_EX(MS_U8 u8GOP,MS_BOOL *bEnable)
998*53ee8cc1Swenshuai.xi {
999*53ee8cc1Swenshuai.xi     MS_BOOL bAlphaInv;
1000*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
1005*53ee8cc1Swenshuai.xi 
1006*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_ALPHAINVERSE;
1007*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
1008*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bAlphaInv;
1009*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
1010*53ee8cc1Swenshuai.xi 
1011*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1012*53ee8cc1Swenshuai.xi     {
1013*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1014*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1015*53ee8cc1Swenshuai.xi     }
1016*53ee8cc1Swenshuai.xi     *bEnable      = bAlphaInv;
1017*53ee8cc1Swenshuai.xi 
1018*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1019*53ee8cc1Swenshuai.xi 
1020*53ee8cc1Swenshuai.xi }
1021*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_GetAlphaInverse(MS_BOOL * bEnable)1022*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetAlphaInverse(MS_BOOL *bEnable)
1023*53ee8cc1Swenshuai.xi {
1024*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1025*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1026*53ee8cc1Swenshuai.xi 
1027*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1028*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_GetAlphaInverse_EX(u8GOP,bEnable);
1029*53ee8cc1Swenshuai.xi     return ret;
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi 
1032*53ee8cc1Swenshuai.xi /********************************************************************************/
1033*53ee8cc1Swenshuai.xi /// Set GOP bank force write mode for update register. When enable bank force write mode, update gop num registers action will directly
1034*53ee8cc1Swenshuai.xi /// take effect (do not wait next v-sync to update gop register!).
1035*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FALSE
1036*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1037*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetBnkForceWrite(MS_U8 u8GOP,MS_BOOL bEnable)1038*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetBnkForceWrite(MS_U8 u8GOP, MS_BOOL bEnable)
1039*53ee8cc1Swenshuai.xi {
1040*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
1041*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
1042*53ee8cc1Swenshuai.xi 
1043*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
1044*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
1045*53ee8cc1Swenshuai.xi     bEna = bEnable;
1046*53ee8cc1Swenshuai.xi 
1047*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_BANK_FORCE_WRITE;
1048*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
1049*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bEna;
1050*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
1051*53ee8cc1Swenshuai.xi 
1052*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1053*53ee8cc1Swenshuai.xi     {
1054*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1055*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
1056*53ee8cc1Swenshuai.xi     }
1057*53ee8cc1Swenshuai.xi 
1058*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
1059*53ee8cc1Swenshuai.xi }
1060*53ee8cc1Swenshuai.xi 
1061*53ee8cc1Swenshuai.xi 
1062*53ee8cc1Swenshuai.xi /********************************************************************************/
1063*53ee8cc1Swenshuai.xi /// Set GOP force write mode for update register. When enable force write mode, all update gop registers action will directly
1064*53ee8cc1Swenshuai.xi /// take effect (do not wait next v-sync to update gop register!).
1065*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FALSE
1066*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1067*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetForceWrite(MS_BOOL bEnable)1068*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetForceWrite(MS_BOOL bEnable)
1069*53ee8cc1Swenshuai.xi {
1070*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
1071*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
1072*53ee8cc1Swenshuai.xi 
1073*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
1074*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
1075*53ee8cc1Swenshuai.xi     bEna = bEnable;
1076*53ee8cc1Swenshuai.xi 
1077*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_FORCE_WRITE;
1078*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = 0x0;
1079*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bEna;
1080*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
1081*53ee8cc1Swenshuai.xi 
1082*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1083*53ee8cc1Swenshuai.xi     {
1084*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1085*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
1086*53ee8cc1Swenshuai.xi     }
1087*53ee8cc1Swenshuai.xi 
1088*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
1089*53ee8cc1Swenshuai.xi }
1090*53ee8cc1Swenshuai.xi 
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi /********************************************************************************/
1093*53ee8cc1Swenshuai.xi /// Write optional palette values to GOP0 registers
1094*53ee8cc1Swenshuai.xi /// Note that this GOP0 palette table only support 256 group palette data
1095*53ee8cc1Swenshuai.xi /// @param *pPalArray \b IN Pointer to pallete list gonna set into pallete table
1096*53ee8cc1Swenshuai.xi /// @param u32PalStart \b IN start of pallete table gonna be overwrite
1097*53ee8cc1Swenshuai.xi /// @param u32PalEnd \b IN end of pallete table gonna be overwrite
1098*53ee8cc1Swenshuai.xi /// @param ePalType \b IN Pallete format, true/false ARGB8888
1099*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1100*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetPaletteOpt_EX(MS_U8 u8GOP,GOP_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd,EN_GOP_PALETTE_TYPE ePalType)1101*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetPaletteOpt_EX(MS_U8 u8GOP,GOP_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd, EN_GOP_PALETTE_TYPE ePalType)
1102*53ee8cc1Swenshuai.xi {
1103*53ee8cc1Swenshuai.xi     GOP_PALETTE_SET_PARAM  ioctl_info;
1104*53ee8cc1Swenshuai.xi     GOP_PALETTE_ENTRY  palEntry;
1105*53ee8cc1Swenshuai.xi 
1106*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1107*53ee8cc1Swenshuai.xi 
1108*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_SET_PARAM));
1109*53ee8cc1Swenshuai.xi     memset(&palEntry, 0x0, sizeof(GOP_PALETTE_ENTRY));
1110*53ee8cc1Swenshuai.xi 
1111*53ee8cc1Swenshuai.xi     palEntry.gop_idx = u8GOP;
1112*53ee8cc1Swenshuai.xi     palEntry.pClut = (void*)pPalArray;
1113*53ee8cc1Swenshuai.xi     palEntry.start = u32PalStart;
1114*53ee8cc1Swenshuai.xi     palEntry.end   = u32PalEnd;
1115*53ee8cc1Swenshuai.xi     palEntry.palType = ePalType;
1116*53ee8cc1Swenshuai.xi     palEntry.palSrc = E_GOP_4G_PALETTE;
1117*53ee8cc1Swenshuai.xi 
1118*53ee8cc1Swenshuai.xi     ioctl_info.pClut = (void*)&palEntry;
1119*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PALETTE_ENTRY);
1120*53ee8cc1Swenshuai.xi 
1121*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_SET_ENTRY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1122*53ee8cc1Swenshuai.xi     {
1123*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1124*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1125*53ee8cc1Swenshuai.xi     }
1126*53ee8cc1Swenshuai.xi 
1127*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1128*53ee8cc1Swenshuai.xi 
1129*53ee8cc1Swenshuai.xi }
1130*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetPaletteOpt(GOP_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd,EN_GOP_PALETTE_TYPE ePalType)1131*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetPaletteOpt( GOP_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd, EN_GOP_PALETTE_TYPE ePalType)
1132*53ee8cc1Swenshuai.xi {
1133*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1134*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1135*53ee8cc1Swenshuai.xi 
1136*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();//GOP0 support only(X) , STB is GOP2 support palette
1137*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetPaletteOpt_EX(u8GOP,pPalArray,u32PalStart,u32PalEnd,ePalType);
1138*53ee8cc1Swenshuai.xi     return ret;
1139*53ee8cc1Swenshuai.xi 
1140*53ee8cc1Swenshuai.xi }
1141*53ee8cc1Swenshuai.xi /********************************************************************************/
1142*53ee8cc1Swenshuai.xi /// Set GOP0 palette table read out control
1143*53ee8cc1Swenshuai.xi /// @param type \b IN \copydoc EN_GOP_PALETTE_READTYPE
1144*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1145*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetPaletteRead_EX(MS_U8 u8GOP,EN_GOP_PALETTE_READTYPE type)1146*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetPaletteRead_EX(MS_U8 u8GOP,EN_GOP_PALETTE_READTYPE type)
1147*53ee8cc1Swenshuai.xi {
1148*53ee8cc1Swenshuai.xi 
1149*53ee8cc1Swenshuai.xi     GOP_PALETTE_CONFIG_PARAM  ioctl_info;
1150*53ee8cc1Swenshuai.xi     GOP_PAL_OPT  palOpt;
1151*53ee8cc1Swenshuai.xi 
1152*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1153*53ee8cc1Swenshuai.xi 
1154*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_CONFIG_PARAM));
1155*53ee8cc1Swenshuai.xi     memset(&palOpt, 0x0, sizeof(GOP_PAL_OPT));
1156*53ee8cc1Swenshuai.xi 
1157*53ee8cc1Swenshuai.xi     palOpt.gop_idx = u8GOP;
1158*53ee8cc1Swenshuai.xi     palOpt.paltype = type;
1159*53ee8cc1Swenshuai.xi     palOpt.palSrc = E_GOP_4G_PALETTE;
1160*53ee8cc1Swenshuai.xi 
1161*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = palOpt.gop_idx;
1162*53ee8cc1Swenshuai.xi     ioctl_info.pPaletteInfo = (MS_U32*)&palOpt;
1163*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PAL_OPT);
1164*53ee8cc1Swenshuai.xi 
1165*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_SET_CONFIG,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1166*53ee8cc1Swenshuai.xi     {
1167*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1168*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1169*53ee8cc1Swenshuai.xi     }
1170*53ee8cc1Swenshuai.xi 
1171*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1172*53ee8cc1Swenshuai.xi 
1173*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_SetPaletteRead(EN_GOP_PALETTE_READTYPE type)1174*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetPaletteRead(EN_GOP_PALETTE_READTYPE type)
1175*53ee8cc1Swenshuai.xi {
1176*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1177*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1178*53ee8cc1Swenshuai.xi 
1179*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1180*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetPaletteRead_EX(u8GOP,type);
1181*53ee8cc1Swenshuai.xi     return ret;
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi /********************************************************************************/
1184*53ee8cc1Swenshuai.xi /// Read GOP0 palette values From Pallete
1185*53ee8cc1Swenshuai.xi /// @param idx \b IN Index for pallete wanna retrieve
1186*53ee8cc1Swenshuai.xi /// @param clr \b OUT color of specific pallete index
1187*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1188*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_ReadPalette_EX(MS_U8 u8GOP,MS_U8 idx,MS_U32 * clr)1189*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_ReadPalette_EX(MS_U8 u8GOP,MS_U8 idx, MS_U32* clr)
1190*53ee8cc1Swenshuai.xi {
1191*53ee8cc1Swenshuai.xi     GOP_PALETTE_SET_PARAM  ioctl_info;
1192*53ee8cc1Swenshuai.xi     GOP_PALETTE_ENTRY  palEntry;
1193*53ee8cc1Swenshuai.xi     MS_U32 u32Color;
1194*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1195*53ee8cc1Swenshuai.xi 
1196*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_SET_PARAM));
1197*53ee8cc1Swenshuai.xi     memset(&palEntry, 0x0, sizeof(GOP_PALETTE_ENTRY));
1198*53ee8cc1Swenshuai.xi 
1199*53ee8cc1Swenshuai.xi     palEntry.gop_idx = u8GOP;
1200*53ee8cc1Swenshuai.xi     palEntry.pClut = (MS_U32*)&u32Color;
1201*53ee8cc1Swenshuai.xi     palEntry.start = idx;
1202*53ee8cc1Swenshuai.xi     palEntry.end   = idx+1;
1203*53ee8cc1Swenshuai.xi     palEntry.palType = E_GOP_PAL_ARGB8888;
1204*53ee8cc1Swenshuai.xi     palEntry.palSrc = E_GOP_4G_PALETTE;
1205*53ee8cc1Swenshuai.xi 
1206*53ee8cc1Swenshuai.xi     ioctl_info.pClut = (void*)&palEntry;
1207*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PALETTE_ENTRY);
1208*53ee8cc1Swenshuai.xi 
1209*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_GET_ENTRY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1210*53ee8cc1Swenshuai.xi     {
1211*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1212*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1213*53ee8cc1Swenshuai.xi     }
1214*53ee8cc1Swenshuai.xi     *clr = u32Color;
1215*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1216*53ee8cc1Swenshuai.xi }
1217*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_ReadPalette(MS_U8 idx,MS_U32 * clr)1218*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_ReadPalette(MS_U8 idx, MS_U32* clr)
1219*53ee8cc1Swenshuai.xi {
1220*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1221*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1222*53ee8cc1Swenshuai.xi 
1223*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1224*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_ReadPalette_EX(u8GOP,idx,clr);
1225*53ee8cc1Swenshuai.xi     return ret;
1226*53ee8cc1Swenshuai.xi }
1227*53ee8cc1Swenshuai.xi 
1228*53ee8cc1Swenshuai.xi /********************************************************************************/
1229*53ee8cc1Swenshuai.xi /// Write optional palette values to GOP1 registers
1230*53ee8cc1Swenshuai.xi /// Note that this GOP1 palette table only support 64 group palette data
1231*53ee8cc1Swenshuai.xi /// @param *pPalArray \b IN Pointer to pallete list gonna set into pallete table
1232*53ee8cc1Swenshuai.xi /// @param u32PalStart \b IN start of pallete table gonna be overwrite
1233*53ee8cc1Swenshuai.xi /// @param u32PalEnd \b IN end of pallete table gonna be overwrite
1234*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1235*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_2GSetPaletteOpt_EX(MS_U8 u8GOP,GOP_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd)1236*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_2GSetPaletteOpt_EX(MS_U8 u8GOP,GOP_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd)
1237*53ee8cc1Swenshuai.xi {
1238*53ee8cc1Swenshuai.xi #ifndef CONFIG_GOP_2ND_PAL
1239*53ee8cc1Swenshuai.xi     GOP_ERR("\33[0;36m   %s: #define CONFIG_GOP_2ND_PAL not opened\33[m \n",__FUNCTION__);
1240*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
1241*53ee8cc1Swenshuai.xi #else
1242*53ee8cc1Swenshuai.xi     GOP_PALETTE_SET_PARAM  ioctl_info;
1243*53ee8cc1Swenshuai.xi     GOP_PALETTE_ENTRY  palEntry;
1244*53ee8cc1Swenshuai.xi 
1245*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1246*53ee8cc1Swenshuai.xi 
1247*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_SET_PARAM));
1248*53ee8cc1Swenshuai.xi     memset(&palEntry, 0x0, sizeof(GOP_PALETTE_ENTRY));
1249*53ee8cc1Swenshuai.xi 
1250*53ee8cc1Swenshuai.xi     palEntry.gop_idx = u8GOP;
1251*53ee8cc1Swenshuai.xi     palEntry.pClut = (MS_U32*)(void*)pPalArray;
1252*53ee8cc1Swenshuai.xi     palEntry.start = u32PalStart;
1253*53ee8cc1Swenshuai.xi     palEntry.end   = u32PalEnd;
1254*53ee8cc1Swenshuai.xi     palEntry.palType = E_GOP_PAL_ARGB8888;
1255*53ee8cc1Swenshuai.xi     palEntry.palSrc = E_GOP_2G_PALETTE;
1256*53ee8cc1Swenshuai.xi 
1257*53ee8cc1Swenshuai.xi     ioctl_info.pClut = (void*)&palEntry;
1258*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PALETTE_ENTRY);
1259*53ee8cc1Swenshuai.xi 
1260*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_SET_ENTRY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1261*53ee8cc1Swenshuai.xi     {
1262*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1263*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1264*53ee8cc1Swenshuai.xi     }
1265*53ee8cc1Swenshuai.xi 
1266*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1267*53ee8cc1Swenshuai.xi #endif
1268*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_2GSetPaletteOpt(GOP_PaletteEntry * pPalArray,MS_U16 u32PalStart,MS_U16 u32PalEnd)1269*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_2GSetPaletteOpt(GOP_PaletteEntry *pPalArray, MS_U16 u32PalStart, MS_U16 u32PalEnd)
1270*53ee8cc1Swenshuai.xi {
1271*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1272*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1273*53ee8cc1Swenshuai.xi 
1274*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1275*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_2GSetPaletteOpt_EX(u8GOP,pPalArray,u32PalStart,u32PalEnd);
1276*53ee8cc1Swenshuai.xi     return ret;
1277*53ee8cc1Swenshuai.xi 
1278*53ee8cc1Swenshuai.xi }
1279*53ee8cc1Swenshuai.xi /********************************************************************************/
1280*53ee8cc1Swenshuai.xi /// Set GOP1 palette table read out control
1281*53ee8cc1Swenshuai.xi /// @param type \b IN \copydoc EN_GOP_PALETTE_READTYPE
1282*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1283*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_2GSetPaletteRead_EX(MS_U8 u8GOP,EN_GOP_PALETTE_READTYPE type)1284*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_2GSetPaletteRead_EX(MS_U8 u8GOP,EN_GOP_PALETTE_READTYPE type)
1285*53ee8cc1Swenshuai.xi {
1286*53ee8cc1Swenshuai.xi #ifndef CONFIG_GOP_2ND_PAL
1287*53ee8cc1Swenshuai.xi     GOP_ERR("\33[0;36m   %s: #define CONFIG_GOP_2ND_PAL not opened\33[m \n",__FUNCTION__);
1288*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
1289*53ee8cc1Swenshuai.xi #else
1290*53ee8cc1Swenshuai.xi     GOP_PALETTE_CONFIG_PARAM  ioctl_info;
1291*53ee8cc1Swenshuai.xi     GOP_PAL_OPT  palOpt;
1292*53ee8cc1Swenshuai.xi 
1293*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1294*53ee8cc1Swenshuai.xi 
1295*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_CONFIG_PARAM));
1296*53ee8cc1Swenshuai.xi     memset(&palOpt, 0x0, sizeof(GOP_PAL_OPT));
1297*53ee8cc1Swenshuai.xi 
1298*53ee8cc1Swenshuai.xi     palOpt.gop_idx = u8GOP;
1299*53ee8cc1Swenshuai.xi     palOpt.paltype = type;
1300*53ee8cc1Swenshuai.xi     palOpt.palSrc = E_GOP_2G_PALETTE;
1301*53ee8cc1Swenshuai.xi 
1302*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = palOpt.gop_idx;
1303*53ee8cc1Swenshuai.xi     ioctl_info.pPaletteInfo = (MS_U32*)&palOpt;
1304*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PAL_OPT);
1305*53ee8cc1Swenshuai.xi 
1306*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_SET_CONFIG,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1307*53ee8cc1Swenshuai.xi     {
1308*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1309*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1310*53ee8cc1Swenshuai.xi     }
1311*53ee8cc1Swenshuai.xi 
1312*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1313*53ee8cc1Swenshuai.xi 
1314*53ee8cc1Swenshuai.xi #endif
1315*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_2GSetPaletteRead(EN_GOP_PALETTE_READTYPE type)1316*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_2GSetPaletteRead(EN_GOP_PALETTE_READTYPE type)
1317*53ee8cc1Swenshuai.xi {
1318*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1319*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1320*53ee8cc1Swenshuai.xi 
1321*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1322*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_2GSetPaletteRead_EX(u8GOP,type);
1323*53ee8cc1Swenshuai.xi     return ret;
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi /********************************************************************************/
1326*53ee8cc1Swenshuai.xi /// Read GOP2G(GOP1) palette values From Pallete
1327*53ee8cc1Swenshuai.xi /// @param idx \b IN Index for pallete wanna retrieve
1328*53ee8cc1Swenshuai.xi /// @param clr \b OUT color of specific pallete index
1329*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1330*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_2GReadPalette_EX(MS_U8 u8GOP,MS_U8 idx,MS_U32 * clr)1331*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_2GReadPalette_EX(MS_U8 u8GOP,MS_U8 idx, MS_U32* clr)
1332*53ee8cc1Swenshuai.xi {
1333*53ee8cc1Swenshuai.xi #ifndef CONFIG_GOP_2ND_PAL
1334*53ee8cc1Swenshuai.xi     GOP_ERR("\33[0;36m   %s: #define CONFIG_GOP_2ND_PAL not opened\33[m \n",__FUNCTION__);
1335*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
1336*53ee8cc1Swenshuai.xi #else
1337*53ee8cc1Swenshuai.xi     GOP_PALETTE_SET_PARAM  ioctl_info;
1338*53ee8cc1Swenshuai.xi     GOP_PALETTE_ENTRY  palEntry;
1339*53ee8cc1Swenshuai.xi     MS_U32 u32Color;
1340*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1341*53ee8cc1Swenshuai.xi 
1342*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_SET_PARAM));
1343*53ee8cc1Swenshuai.xi     memset(&palEntry, 0x0, sizeof(GOP_PALETTE_ENTRY));
1344*53ee8cc1Swenshuai.xi 
1345*53ee8cc1Swenshuai.xi     palEntry.gop_idx = u8GOP;
1346*53ee8cc1Swenshuai.xi     palEntry.pClut = (MS_U32*)&u32Color;
1347*53ee8cc1Swenshuai.xi     palEntry.start = idx;
1348*53ee8cc1Swenshuai.xi     palEntry.end   = idx+1;
1349*53ee8cc1Swenshuai.xi     palEntry.palType = E_GOP_PAL_ARGB8888;
1350*53ee8cc1Swenshuai.xi     palEntry.palSrc = E_GOP_2G_PALETTE;
1351*53ee8cc1Swenshuai.xi 
1352*53ee8cc1Swenshuai.xi     ioctl_info.pClut = (void*)&palEntry;
1353*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PALETTE_ENTRY);
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_GET_ENTRY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1356*53ee8cc1Swenshuai.xi     {
1357*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1358*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1359*53ee8cc1Swenshuai.xi     }
1360*53ee8cc1Swenshuai.xi     *clr = u32Color;
1361*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1362*53ee8cc1Swenshuai.xi #endif
1363*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_2GReadPalette(MS_U8 idx,MS_U32 * clr)1364*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_2GReadPalette(MS_U8 idx, MS_U32* clr)
1365*53ee8cc1Swenshuai.xi {
1366*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1367*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1368*53ee8cc1Swenshuai.xi 
1369*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1370*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_2GReadPalette_EX(u8GOP,idx,clr);
1371*53ee8cc1Swenshuai.xi     return ret;
1372*53ee8cc1Swenshuai.xi }
1373*53ee8cc1Swenshuai.xi /********************************************************************************/
1374*53ee8cc1Swenshuai.xi /// Set stretch window H-Stretch ratio.
1375*53ee8cc1Swenshuai.xi /// Example: gwin size:960*540  target gwin size: 1920*1080
1376*53ee8cc1Swenshuai.xi ///     step1: MApi_GOP_GWIN_Set_HSCALE(TRUE, 960, 1920);
1377*53ee8cc1Swenshuai.xi ///     step2: MApi_GOP_GWIN_Set_VSCALE(TRUE, 540, 1080);
1378*53ee8cc1Swenshuai.xi ///     step3: MApi_GOP_GWIN_Set_STRETCHWIN(u8GOPNum, E_GOP_DST_OP0, 0, 0, 960, 540);
1379*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
1380*53ee8cc1Swenshuai.xi ///   - # TRUE enable
1381*53ee8cc1Swenshuai.xi ///   - # FALSE disable
1382*53ee8cc1Swenshuai.xi /// @param src \b IN: original size
1383*53ee8cc1Swenshuai.xi /// @param dst \b IN: target size
1384*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1385*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_Set_HSCALE_EX(MS_U8 u8GOP,MS_BOOL bEnable,MS_U16 src,MS_U16 dst)1386*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_HSCALE_EX(MS_U8 u8GOP,MS_BOOL bEnable, MS_U16 src, MS_U16 dst)
1387*53ee8cc1Swenshuai.xi {
1388*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_info;
1389*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
1390*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1391*53ee8cc1Swenshuai.xi 
1392*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_STRETCH_SET_PARAM));
1393*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
1394*53ee8cc1Swenshuai.xi 
1395*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.w = src;
1396*53ee8cc1Swenshuai.xi     if (bEnable)
1397*53ee8cc1Swenshuai.xi     {
1398*53ee8cc1Swenshuai.xi         stretch_info.DstRect.w = dst;
1399*53ee8cc1Swenshuai.xi     }
1400*53ee8cc1Swenshuai.xi     else
1401*53ee8cc1Swenshuai.xi     {
1402*53ee8cc1Swenshuai.xi         stretch_info.DstRect.w = src;
1403*53ee8cc1Swenshuai.xi     }
1404*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
1405*53ee8cc1Swenshuai.xi     ioctl_info.enStrtchType = E_GOP_STRETCH_HSCALE;
1406*53ee8cc1Swenshuai.xi     ioctl_info.pStretch = (MS_U32*)&stretch_info;
1407*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_STRETCH_INFO);
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
1410*53ee8cc1Swenshuai.xi     {
1411*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1412*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
1413*53ee8cc1Swenshuai.xi     }
1414*53ee8cc1Swenshuai.xi 
1415*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1416*53ee8cc1Swenshuai.xi }
1417*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Set_HSCALE(MS_BOOL bEnable,MS_U16 src,MS_U16 dst)1418*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_HSCALE(MS_BOOL bEnable, MS_U16 src, MS_U16 dst)
1419*53ee8cc1Swenshuai.xi {
1420*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1421*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1422*53ee8cc1Swenshuai.xi 
1423*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1424*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_Set_HSCALE_EX(u8GOP,bEnable,src,dst);
1425*53ee8cc1Swenshuai.xi     return ret;
1426*53ee8cc1Swenshuai.xi }
1427*53ee8cc1Swenshuai.xi /********************************************************************************/
1428*53ee8cc1Swenshuai.xi /// Set stretch window V-Stretch ratio.
1429*53ee8cc1Swenshuai.xi /// Example: gwin size:960*540  target gwin size: 1920*1080
1430*53ee8cc1Swenshuai.xi ///     step1: MApi_GOP_GWIN_Set_HSCALE(TRUE, 960, 1920);
1431*53ee8cc1Swenshuai.xi ///     step2: MApi_GOP_GWIN_Set_VSCALE(TRUE, 540, 1080);
1432*53ee8cc1Swenshuai.xi ///     step3: MApi_GOP_GWIN_Set_STRETCHWIN(u8GOPNum, E_GOP_DST_OP0, 0, 0, 960, 540);
1433*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
1434*53ee8cc1Swenshuai.xi ///   - # TRUE enable
1435*53ee8cc1Swenshuai.xi ///   - # FALSE disable
1436*53ee8cc1Swenshuai.xi /// @param src \b IN: original size
1437*53ee8cc1Swenshuai.xi /// @param dst \b IN: target size
1438*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1439*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_Set_VSCALE_EX(MS_U8 u8GOP,MS_BOOL bEnable,MS_U16 src,MS_U16 dst)1440*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_VSCALE_EX(MS_U8 u8GOP,MS_BOOL bEnable, MS_U16 src, MS_U16 dst)
1441*53ee8cc1Swenshuai.xi {
1442*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_info;
1443*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
1444*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1445*53ee8cc1Swenshuai.xi 
1446*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_STRETCH_SET_PARAM));
1447*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
1448*53ee8cc1Swenshuai.xi 
1449*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.h = src;
1450*53ee8cc1Swenshuai.xi     if (bEnable)
1451*53ee8cc1Swenshuai.xi     {
1452*53ee8cc1Swenshuai.xi         stretch_info.DstRect.h = dst;
1453*53ee8cc1Swenshuai.xi     }
1454*53ee8cc1Swenshuai.xi     else
1455*53ee8cc1Swenshuai.xi     {
1456*53ee8cc1Swenshuai.xi         stretch_info.DstRect.h = src;
1457*53ee8cc1Swenshuai.xi     }
1458*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
1459*53ee8cc1Swenshuai.xi     ioctl_info.enStrtchType = E_GOP_STRETCH_VSCALE;
1460*53ee8cc1Swenshuai.xi     ioctl_info.pStretch = (MS_U32*)&stretch_info;
1461*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_STRETCH_INFO);
1462*53ee8cc1Swenshuai.xi 
1463*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
1464*53ee8cc1Swenshuai.xi     {
1465*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1466*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
1467*53ee8cc1Swenshuai.xi     }
1468*53ee8cc1Swenshuai.xi 
1469*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1470*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_Set_VSCALE(MS_BOOL bEnable,MS_U16 src,MS_U16 dst)1471*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_VSCALE(MS_BOOL bEnable, MS_U16 src, MS_U16 dst)
1472*53ee8cc1Swenshuai.xi {
1473*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1474*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1475*53ee8cc1Swenshuai.xi 
1476*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1477*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_Set_VSCALE_EX(u8GOP,bEnable,src,dst);
1478*53ee8cc1Swenshuai.xi     return ret;
1479*53ee8cc1Swenshuai.xi }
1480*53ee8cc1Swenshuai.xi /********************************************************************************/
1481*53ee8cc1Swenshuai.xi /// Set GOP H stretch mode
1482*53ee8cc1Swenshuai.xi /// @param HStrchMode \b IN:
1483*53ee8cc1Swenshuai.xi ///   - # E_GOP_HSTRCH_6TAPE
1484*53ee8cc1Swenshuai.xi ///   - # E_GOP_HSTRCH_DUPLICATE
1485*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1486*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_Set_HStretchMode_EX(MS_U8 u8GOP,EN_GOP_STRETCH_HMODE HStrchMode)1487*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_HStretchMode_EX(MS_U8 u8GOP,EN_GOP_STRETCH_HMODE HStrchMode)
1488*53ee8cc1Swenshuai.xi {
1489*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_info;
1490*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
1491*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_STRETCH_SET_PARAM));
1494*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
1495*53ee8cc1Swenshuai.xi 
1496*53ee8cc1Swenshuai.xi     stretch_info.enHMode = HStrchMode;
1497*53ee8cc1Swenshuai.xi 
1498*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
1499*53ee8cc1Swenshuai.xi     ioctl_info.enStrtchType = E_GOP_STRETCH_HSTRETCH_MODE;
1500*53ee8cc1Swenshuai.xi     ioctl_info.pStretch = (MS_U32*)&stretch_info;
1501*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_STRETCH_INFO);
1502*53ee8cc1Swenshuai.xi 
1503*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
1504*53ee8cc1Swenshuai.xi     {
1505*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1506*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
1507*53ee8cc1Swenshuai.xi     }
1508*53ee8cc1Swenshuai.xi 
1509*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1510*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_Set_HStretchMode(EN_GOP_STRETCH_HMODE HStrchMode)1511*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_HStretchMode(EN_GOP_STRETCH_HMODE HStrchMode)
1512*53ee8cc1Swenshuai.xi {
1513*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1514*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1515*53ee8cc1Swenshuai.xi 
1516*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1517*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_Set_HStretchMode_EX(u8GOP,HStrchMode);
1518*53ee8cc1Swenshuai.xi     return ret;
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi 
1521*53ee8cc1Swenshuai.xi /********************************************************************************/
1522*53ee8cc1Swenshuai.xi /// Set GOP Transparent color Stretch Mode
1523*53ee8cc1Swenshuai.xi /// @param VStrchMode \b IN:
1524*53ee8cc1Swenshuai.xi ///   - # E_GOP_TRANSPCOLOR_STRCH_DUPLICATE
1525*53ee8cc1Swenshuai.xi ///   - # E_GOP_TRANSPCOLOR_STRCH_ASNORMAL
1526*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1527*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_Set_TranspColorStretchMode_EX(MS_U8 u8GOP,EN_GOP_STRCH_TRANSPCOLORMODE TColorStrchMode)1528*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_TranspColorStretchMode_EX(MS_U8 u8GOP,EN_GOP_STRCH_TRANSPCOLORMODE  TColorStrchMode)
1529*53ee8cc1Swenshuai.xi {
1530*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_info;
1531*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
1532*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1533*53ee8cc1Swenshuai.xi 
1534*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_STRETCH_SET_PARAM));
1535*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
1536*53ee8cc1Swenshuai.xi 
1537*53ee8cc1Swenshuai.xi     stretch_info.enTColorMode = TColorStrchMode;
1538*53ee8cc1Swenshuai.xi 
1539*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
1540*53ee8cc1Swenshuai.xi     ioctl_info.enStrtchType = E_GOP_STRETCH_TRANSPCOLOR_MODE;
1541*53ee8cc1Swenshuai.xi     ioctl_info.pStretch = (MS_U32*)&stretch_info;
1542*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_STRETCH_INFO);
1543*53ee8cc1Swenshuai.xi 
1544*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
1545*53ee8cc1Swenshuai.xi     {
1546*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1547*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
1548*53ee8cc1Swenshuai.xi     }
1549*53ee8cc1Swenshuai.xi 
1550*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1551*53ee8cc1Swenshuai.xi }
1552*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Set_TranspColorStretchMode(EN_GOP_STRCH_TRANSPCOLORMODE TColorStrchMode)1553*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_TranspColorStretchMode(EN_GOP_STRCH_TRANSPCOLORMODE  TColorStrchMode)
1554*53ee8cc1Swenshuai.xi {
1555*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1556*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1557*53ee8cc1Swenshuai.xi 
1558*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1559*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_Set_TranspColorStretchMode_EX(u8GOP,TColorStrchMode);
1560*53ee8cc1Swenshuai.xi     return ret;
1561*53ee8cc1Swenshuai.xi }
1562*53ee8cc1Swenshuai.xi 
1563*53ee8cc1Swenshuai.xi /********************************************************************************/
1564*53ee8cc1Swenshuai.xi /// Set GOP V stretch mode
1565*53ee8cc1Swenshuai.xi /// @param VStrchMode \b IN:
1566*53ee8cc1Swenshuai.xi ///   - # E_GOP_VSTRCH_LINEAR
1567*53ee8cc1Swenshuai.xi ///   - # E_GOP_VSTRCH_DUPLICATE
1568*53ee8cc1Swenshuai.xi ///   - # E_GOP_VSTRCH_NEAREST
1569*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1570*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_Set_VStretchMode_EX(MS_U8 u8GOP,EN_GOP_STRETCH_VMODE VStrchMode)1571*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_VStretchMode_EX(MS_U8 u8GOP,EN_GOP_STRETCH_VMODE VStrchMode)
1572*53ee8cc1Swenshuai.xi {
1573*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_info;
1574*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
1575*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1576*53ee8cc1Swenshuai.xi 
1577*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_STRETCH_SET_PARAM));
1578*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
1579*53ee8cc1Swenshuai.xi 
1580*53ee8cc1Swenshuai.xi     stretch_info.enVMode = VStrchMode;
1581*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
1582*53ee8cc1Swenshuai.xi     ioctl_info.enStrtchType = E_GOP_STRETCH_VSTRETCH_MODE;
1583*53ee8cc1Swenshuai.xi     ioctl_info.pStretch = (MS_U32*)&stretch_info;
1584*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_STRETCH_INFO);
1585*53ee8cc1Swenshuai.xi 
1586*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
1587*53ee8cc1Swenshuai.xi     {
1588*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1589*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
1590*53ee8cc1Swenshuai.xi     }
1591*53ee8cc1Swenshuai.xi 
1592*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1593*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_Set_VStretchMode(EN_GOP_STRETCH_VMODE VStrchMode)1594*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_VStretchMode(EN_GOP_STRETCH_VMODE VStrchMode)
1595*53ee8cc1Swenshuai.xi {
1596*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1597*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1598*53ee8cc1Swenshuai.xi 
1599*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1600*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_Set_VStretchMode_EX(u8GOP,VStrchMode);
1601*53ee8cc1Swenshuai.xi     return ret;
1602*53ee8cc1Swenshuai.xi }
1603*53ee8cc1Swenshuai.xi 
1604*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1605*53ee8cc1Swenshuai.xi /// set gop destination path clock
1606*53ee8cc1Swenshuai.xi /// @param gopNum \b IN: Number of GOP
1607*53ee8cc1Swenshuai.xi /// @param eDstType \b IN: gop destination type
1608*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1609*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_SetGOPClk(MS_U8 gopNum,EN_GOP_DST_TYPE eDstType)1610*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetGOPClk(MS_U8 gopNum, EN_GOP_DST_TYPE eDstType)
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
1613*53ee8cc1Swenshuai.xi     EN_GOP_DST_TYPE eType;
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1616*53ee8cc1Swenshuai.xi 
1617*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
1618*53ee8cc1Swenshuai.xi     eType = eDstType;
1619*53ee8cc1Swenshuai.xi 
1620*53ee8cc1Swenshuai.xi 
1621*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_CLK;
1622*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = gopNum;
1623*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&eType;
1624*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(EN_GOP_DST_TYPE);
1625*53ee8cc1Swenshuai.xi 
1626*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1627*53ee8cc1Swenshuai.xi     {
1628*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1629*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1630*53ee8cc1Swenshuai.xi     }
1631*53ee8cc1Swenshuai.xi 
1632*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1633*53ee8cc1Swenshuai.xi }
1634*53ee8cc1Swenshuai.xi 
1635*53ee8cc1Swenshuai.xi 
1636*53ee8cc1Swenshuai.xi //******************************************************************************
1637*53ee8cc1Swenshuai.xi /// Enable gop progressive mode
1638*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
1639*53ee8cc1Swenshuai.xi ///   - # TRUE Enable gop progressive mode
1640*53ee8cc1Swenshuai.xi ///   - # FALSE Disable gop progressive mode
1641*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1642*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_EnableProgressive_EX(MS_U8 u8GOP,MS_BOOL bEnable)1643*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableProgressive_EX(MS_U8 u8GOP,MS_BOOL bEnable)
1644*53ee8cc1Swenshuai.xi {
1645*53ee8cc1Swenshuai.xi 
1646*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
1647*53ee8cc1Swenshuai.xi     MS_U32  Progressive;
1648*53ee8cc1Swenshuai.xi 
1649*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1650*53ee8cc1Swenshuai.xi 
1651*53ee8cc1Swenshuai.xi     Progressive = bEnable;
1652*53ee8cc1Swenshuai.xi 
1653*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_PROGRESSIVE;
1654*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
1655*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&Progressive;
1656*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
1657*53ee8cc1Swenshuai.xi 
1658*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1659*53ee8cc1Swenshuai.xi     {
1660*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1661*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1662*53ee8cc1Swenshuai.xi     }
1663*53ee8cc1Swenshuai.xi 
1664*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1665*53ee8cc1Swenshuai.xi }
1666*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_EnableProgressive(MS_BOOL bEnable)1667*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableProgressive(MS_BOOL bEnable)
1668*53ee8cc1Swenshuai.xi {
1669*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1670*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1671*53ee8cc1Swenshuai.xi 
1672*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1673*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_EnableProgressive_EX(u8GOP,bEnable);
1674*53ee8cc1Swenshuai.xi     return ret;
1675*53ee8cc1Swenshuai.xi 
1676*53ee8cc1Swenshuai.xi }
1677*53ee8cc1Swenshuai.xi 
1678*53ee8cc1Swenshuai.xi //******************************************************************************
1679*53ee8cc1Swenshuai.xi /// Set gop update register method by only once.
1680*53ee8cc1Swenshuai.xi /// Example: if you want to update GOP function A, B, C in the same V sync, please write down your code like below
1681*53ee8cc1Swenshuai.xi /// MApi_GOP_GWIN_UpdateRegOnce(TRUE);
1682*53ee8cc1Swenshuai.xi /// GOP_FUN_A;
1683*53ee8cc1Swenshuai.xi /// GOP_FUN_B;
1684*53ee8cc1Swenshuai.xi /// GOP_FUN_C;
1685*53ee8cc1Swenshuai.xi /// MApi_GOP_GWIN_UpdateRegOnce(FALSE);
1686*53ee8cc1Swenshuai.xi /// @param bWriteRegOnce \b IN: TRUE/FALSE
1687*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1688*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_UpdateRegOnce(MS_BOOL bWriteRegOnce)1689*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_UpdateRegOnce(MS_BOOL bWriteRegOnce)
1690*53ee8cc1Swenshuai.xi {
1691*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_UpdateRegOnceEx(bWriteRegOnce, TRUE);
1692*53ee8cc1Swenshuai.xi }
1693*53ee8cc1Swenshuai.xi 
1694*53ee8cc1Swenshuai.xi //******************************************************************************
1695*53ee8cc1Swenshuai.xi /// Extend MApi_GOP_GWIN_UpdateRegOnceEx, update special gop.
1696*53ee8cc1Swenshuai.xi /// Set gop update register method by only once.
1697*53ee8cc1Swenshuai.xi /// Example: if you want to update GOP function A, B, C in the same V sync, please write down your code like below
1698*53ee8cc1Swenshuai.xi /// MApi_GOP_GWIN_UpdateRegOnceByMask(u16GopMask,TRUE, TRUE);
1699*53ee8cc1Swenshuai.xi /// GOP_FUN_A;
1700*53ee8cc1Swenshuai.xi /// GOP_FUN_B;
1701*53ee8cc1Swenshuai.xi /// GOP_FUN_C;
1702*53ee8cc1Swenshuai.xi /// MApi_GOP_GWIN_UpdateRegOnceByMask(u16GopMask,FALSE, TRUE);
1703*53ee8cc1Swenshuai.xi /// @param u16GopMask    \b IN:bit0-gop0, bit1-gop1...
1704*53ee8cc1Swenshuai.xi /// @param bWriteRegOnce    \b IN: TRUE/FALSE
1705*53ee8cc1Swenshuai.xi /// @param bSync            \b IN: TRUE/FALSE
1706*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1707*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_UpdateRegOnceByMask(MS_U16 u16GopMask,MS_BOOL bWriteRegOnce,MS_BOOL bSync)1708*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_UpdateRegOnceByMask(MS_U16 u16GopMask,MS_BOOL bWriteRegOnce, MS_BOOL bSync)
1709*53ee8cc1Swenshuai.xi {
1710*53ee8cc1Swenshuai.xi     GOP_UPDATE_PARAM ioctl_info;
1711*53ee8cc1Swenshuai.xi     GOP_UPDATE_INFO update;
1712*53ee8cc1Swenshuai.xi 
1713*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1714*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_UPDATE_PARAM));
1715*53ee8cc1Swenshuai.xi     memset(&update, 0x0, sizeof(GOP_UPDATE_INFO));
1716*53ee8cc1Swenshuai.xi 
1717*53ee8cc1Swenshuai.xi     update.gop_idx = u16GopMask;
1718*53ee8cc1Swenshuai.xi     update.update_type = E_GOP_UPDATE_CURRENT_ONCE;
1719*53ee8cc1Swenshuai.xi     update.bEn = bWriteRegOnce;
1720*53ee8cc1Swenshuai.xi     update.bSync = bSync;
1721*53ee8cc1Swenshuai.xi 
1722*53ee8cc1Swenshuai.xi     ioctl_info.pUpdateInfo = (MS_U32*)&update;
1723*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_UPDATE_INFO);
1724*53ee8cc1Swenshuai.xi 
1725*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_UPDATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1726*53ee8cc1Swenshuai.xi     {
1727*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1728*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1729*53ee8cc1Swenshuai.xi     }
1730*53ee8cc1Swenshuai.xi 
1731*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1732*53ee8cc1Swenshuai.xi 
1733*53ee8cc1Swenshuai.xi }
1734*53ee8cc1Swenshuai.xi 
1735*53ee8cc1Swenshuai.xi //******************************************************************************
1736*53ee8cc1Swenshuai.xi /// Extend MApi_GOP_GWIN_UpdateRegOnce, add parameter bSync.
1737*53ee8cc1Swenshuai.xi /// Set gop update register method by only once.
1738*53ee8cc1Swenshuai.xi /// Example: if you want to update GOP function A, B, C in the same V sync, please write down your code like below
1739*53ee8cc1Swenshuai.xi /// MApi_GOP_GWIN_UpdateRegOnceEx(TRUE, TRUE);
1740*53ee8cc1Swenshuai.xi /// GOP_FUN_A;
1741*53ee8cc1Swenshuai.xi /// GOP_FUN_B;
1742*53ee8cc1Swenshuai.xi /// GOP_FUN_C;
1743*53ee8cc1Swenshuai.xi /// MApi_GOP_GWIN_UpdateRegOnceEx(FALSE, TRUE);
1744*53ee8cc1Swenshuai.xi /// @param bWriteRegOnce    \b IN: TRUE/FALSE
1745*53ee8cc1Swenshuai.xi /// @param bSync            \b IN: TRUE/FALSE
1746*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1747*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_UpdateRegOnceEx2(MS_U8 u8GOP,MS_BOOL bWriteRegOnce,MS_BOOL bSync)1748*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_UpdateRegOnceEx2(MS_U8 u8GOP,MS_BOOL bWriteRegOnce, MS_BOOL bSync)
1749*53ee8cc1Swenshuai.xi {
1750*53ee8cc1Swenshuai.xi     GOP_UPDATE_PARAM ioctl_info;
1751*53ee8cc1Swenshuai.xi     GOP_UPDATE_INFO update;
1752*53ee8cc1Swenshuai.xi 
1753*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1754*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_UPDATE_PARAM));
1755*53ee8cc1Swenshuai.xi     memset(&update, 0x0, sizeof(GOP_UPDATE_INFO));
1756*53ee8cc1Swenshuai.xi 
1757*53ee8cc1Swenshuai.xi     update.gop_idx = u8GOP;
1758*53ee8cc1Swenshuai.xi     update.update_type = E_GOP_UPDATE_ONCE;
1759*53ee8cc1Swenshuai.xi     update.bEn = bWriteRegOnce;
1760*53ee8cc1Swenshuai.xi     update.bSync = bSync;
1761*53ee8cc1Swenshuai.xi 
1762*53ee8cc1Swenshuai.xi     ioctl_info.pUpdateInfo = (MS_U32*)&update;
1763*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_UPDATE_INFO);
1764*53ee8cc1Swenshuai.xi 
1765*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_UPDATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1766*53ee8cc1Swenshuai.xi     {
1767*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1768*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1769*53ee8cc1Swenshuai.xi     }
1770*53ee8cc1Swenshuai.xi 
1771*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1772*53ee8cc1Swenshuai.xi 
1773*53ee8cc1Swenshuai.xi }
1774*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_UpdateRegOnceEx(MS_BOOL bWriteRegOnce,MS_BOOL bSync)1775*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_UpdateRegOnceEx(MS_BOOL bWriteRegOnce, MS_BOOL bSync)
1776*53ee8cc1Swenshuai.xi {
1777*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
1778*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
1781*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_UpdateRegOnceEx2(u8GOP,bWriteRegOnce,bSync);
1782*53ee8cc1Swenshuai.xi     return ret;
1783*53ee8cc1Swenshuai.xi 
1784*53ee8cc1Swenshuai.xi }
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi //******************************************************************************
1787*53ee8cc1Swenshuai.xi /// API for initialize the GOP DWIN
1788*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1789*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_Init(void)1790*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_Init(void)
1791*53ee8cc1Swenshuai.xi {
1792*53ee8cc1Swenshuai.xi     MS_U32 ioctl_info = 0;
1793*53ee8cc1Swenshuai.xi 
1794*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
1795*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_INIT,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1796*53ee8cc1Swenshuai.xi     {
1797*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1798*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
1799*53ee8cc1Swenshuai.xi     }
1800*53ee8cc1Swenshuai.xi     bInit =TRUE;
1801*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
1802*53ee8cc1Swenshuai.xi }
1803*53ee8cc1Swenshuai.xi 
1804*53ee8cc1Swenshuai.xi //******************************************************************************
1805*53ee8cc1Swenshuai.xi /// API for enable or disable DWIN
1806*53ee8cc1Swenshuai.xi /// @param bEnable \b IN DWIN enable or not
1807*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1808*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_Enable(MS_BOOL bEnable)1809*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_Enable(MS_BOOL bEnable)
1810*53ee8cc1Swenshuai.xi {
1811*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1812*53ee8cc1Swenshuai.xi 
1813*53ee8cc1Swenshuai.xi 
1814*53ee8cc1Swenshuai.xi     GOP_DWIN_CAPTURE_PARAM ioctl_info;
1815*53ee8cc1Swenshuai.xi     GOP_CAPTURE_INFO dwin_info;
1816*53ee8cc1Swenshuai.xi     MS_U32 bpp;
1817*53ee8cc1Swenshuai.xi     MS_U16 fCnt;
1818*53ee8cc1Swenshuai.xi 
1819*53ee8cc1Swenshuai.xi 
1820*53ee8cc1Swenshuai.xi     ioctl_info.pDwin = (MS_U32*)&dwin_info;
1821*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_CAPTURE_INFO);
1822*53ee8cc1Swenshuai.xi 
1823*53ee8cc1Swenshuai.xi     g_CaptureInfo.bEn = bEnable;
1824*53ee8cc1Swenshuai.xi 
1825*53ee8cc1Swenshuai.xi     if(g_CaptureInfo.fmt == GOP_DWIN_FMT_ARGB8888)
1826*53ee8cc1Swenshuai.xi         bpp = 4;
1827*53ee8cc1Swenshuai.xi     else
1828*53ee8cc1Swenshuai.xi         bpp = 2;
1829*53ee8cc1Swenshuai.xi 
1830*53ee8cc1Swenshuai.xi     if(g_CaptureInfo.rect.w*g_CaptureInfo.rect.h *bpp ==0)
1831*53ee8cc1Swenshuai.xi     {
1832*53ee8cc1Swenshuai.xi         fCnt=0;
1833*53ee8cc1Swenshuai.xi     }
1834*53ee8cc1Swenshuai.xi     else
1835*53ee8cc1Swenshuai.xi     {
1836*53ee8cc1Swenshuai.xi         fCnt = (g_CaptureInfo.addr1[0]-g_CaptureInfo.addr[0])/(g_CaptureInfo.rect.w*g_CaptureInfo.rect.h *bpp);
1837*53ee8cc1Swenshuai.xi     }
1838*53ee8cc1Swenshuai.xi     g_CaptureInfo.framecount = fCnt;
1839*53ee8cc1Swenshuai.xi 
1840*53ee8cc1Swenshuai.xi 
1841*53ee8cc1Swenshuai.xi     memcpy(&dwin_info, &g_CaptureInfo, sizeof(GOP_CAPTURE_INFO));
1842*53ee8cc1Swenshuai.xi 
1843*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_CAPTURE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1844*53ee8cc1Swenshuai.xi     {
1845*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1846*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1847*53ee8cc1Swenshuai.xi     }
1848*53ee8cc1Swenshuai.xi 
1849*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1850*53ee8cc1Swenshuai.xi 
1851*53ee8cc1Swenshuai.xi }
1852*53ee8cc1Swenshuai.xi 
1853*53ee8cc1Swenshuai.xi //******************************************************************************
1854*53ee8cc1Swenshuai.xi /// API for enable or disable DWIN
1855*53ee8cc1Swenshuai.xi /// @param bEnable \b IN DWIN enable or not
1856*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1857*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_EnableR2YCSC(MS_BOOL bEnable)1858*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_EnableR2YCSC(MS_BOOL bEnable)
1859*53ee8cc1Swenshuai.xi {
1860*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
1863*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
1864*53ee8cc1Swenshuai.xi 
1865*53ee8cc1Swenshuai.xi     bEna = bEnable;
1866*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_R2Y;
1867*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (void*)&bEna;
1868*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
1869*53ee8cc1Swenshuai.xi 
1870*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1871*53ee8cc1Swenshuai.xi     {
1872*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1873*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1874*53ee8cc1Swenshuai.xi     }
1875*53ee8cc1Swenshuai.xi 
1876*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1877*53ee8cc1Swenshuai.xi }
1878*53ee8cc1Swenshuai.xi 
1879*53ee8cc1Swenshuai.xi 
1880*53ee8cc1Swenshuai.xi //******************************************************************************
1881*53ee8cc1Swenshuai.xi /// API for enable or disable DWIN UV SWAP
1882*53ee8cc1Swenshuai.xi /// @param bEnable \b IN DWIN enable or not
1883*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1884*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_SetUVSwap(MS_BOOL bEnable)1885*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetUVSwap(MS_BOOL bEnable)
1886*53ee8cc1Swenshuai.xi {
1887*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1888*53ee8cc1Swenshuai.xi 
1889*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
1890*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
1891*53ee8cc1Swenshuai.xi 
1892*53ee8cc1Swenshuai.xi     bEna = bEnable;
1893*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_UV_SWAP;
1894*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (void*)&bEna;
1895*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
1896*53ee8cc1Swenshuai.xi 
1897*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1898*53ee8cc1Swenshuai.xi     {
1899*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1900*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1901*53ee8cc1Swenshuai.xi     }
1902*53ee8cc1Swenshuai.xi 
1903*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1904*53ee8cc1Swenshuai.xi }
1905*53ee8cc1Swenshuai.xi 
1906*53ee8cc1Swenshuai.xi 
1907*53ee8cc1Swenshuai.xi //******************************************************************************
1908*53ee8cc1Swenshuai.xi /// Get DWIN property
1909*53ee8cc1Swenshuai.xi /// @param pproperty \b OUT buffer to store DWIN property
1910*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1911*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_GetWinProperty(GOP_DwinProperty * pproperty)1912*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_GetWinProperty(GOP_DwinProperty *pproperty)
1913*53ee8cc1Swenshuai.xi {
1914*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
1915*53ee8cc1Swenshuai.xi     pproperty->u16x = g_CaptureInfo.rect.x;
1916*53ee8cc1Swenshuai.xi     pproperty->u16y = g_CaptureInfo.rect.y;
1917*53ee8cc1Swenshuai.xi     pproperty->u16w = g_CaptureInfo.rect.w;
1918*53ee8cc1Swenshuai.xi     pproperty->u16h = g_CaptureInfo.rect.h;
1919*53ee8cc1Swenshuai.xi     pproperty->u16fbw = g_CaptureInfo.pitch;
1920*53ee8cc1Swenshuai.xi 
1921*53ee8cc1Swenshuai.xi     pproperty->u32fbaddr0 = g_CaptureInfo.addr[0];
1922*53ee8cc1Swenshuai.xi     pproperty->u32fbaddr1 = g_CaptureInfo.addr1[0];
1923*53ee8cc1Swenshuai.xi 
1924*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
1925*53ee8cc1Swenshuai.xi }
1926*53ee8cc1Swenshuai.xi 
1927*53ee8cc1Swenshuai.xi //******************************************************************************
1928*53ee8cc1Swenshuai.xi /// Set DWIN property
1929*53ee8cc1Swenshuai.xi /// @param pproperty \b IN buffer to store DWIN property
1930*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1931*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_SetWinProperty(GOP_DwinProperty * pproperty)1932*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetWinProperty(GOP_DwinProperty *pproperty)
1933*53ee8cc1Swenshuai.xi {
1934*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1935*53ee8cc1Swenshuai.xi 
1936*53ee8cc1Swenshuai.xi     if((pproperty->u16h <=0) || (pproperty->u16w<=0))
1937*53ee8cc1Swenshuai.xi     {
1938*53ee8cc1Swenshuai.xi         GOP_ERR("\n %s DWIN Width(%d) or Height(%d) <= 0\n", __FUNCTION__,pproperty->u16w,pproperty->u16h);
1939*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
1940*53ee8cc1Swenshuai.xi     }
1941*53ee8cc1Swenshuai.xi 
1942*53ee8cc1Swenshuai.xi     g_CaptureInfo.rect.x = pproperty->u16x;
1943*53ee8cc1Swenshuai.xi     g_CaptureInfo.rect.y = pproperty->u16y;
1944*53ee8cc1Swenshuai.xi     g_CaptureInfo.rect.w = pproperty->u16w;
1945*53ee8cc1Swenshuai.xi     g_CaptureInfo.rect.h = pproperty->u16h;
1946*53ee8cc1Swenshuai.xi     g_CaptureInfo.pitch  = pproperty->u16fbw;
1947*53ee8cc1Swenshuai.xi 
1948*53ee8cc1Swenshuai.xi     g_CaptureInfo.addr[0] = pproperty->u32fbaddr0;
1949*53ee8cc1Swenshuai.xi     g_CaptureInfo.addr1[0] = pproperty->u32fbaddr1;
1950*53ee8cc1Swenshuai.xi 
1951*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1952*53ee8cc1Swenshuai.xi 
1953*53ee8cc1Swenshuai.xi }
1954*53ee8cc1Swenshuai.xi 
1955*53ee8cc1Swenshuai.xi //******************************************************************************
1956*53ee8cc1Swenshuai.xi /// Set DWIN data source scan type
1957*53ee8cc1Swenshuai.xi /// @param enScanMode \b IN: EN_GOP_DWIN_SCAN_MODE
1958*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1959*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_SelectSourceScanType(EN_GOP_DWIN_SCAN_MODE enScanMode)1960*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SelectSourceScanType(EN_GOP_DWIN_SCAN_MODE enScanMode)
1961*53ee8cc1Swenshuai.xi {
1962*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1963*53ee8cc1Swenshuai.xi 
1964*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
1965*53ee8cc1Swenshuai.xi     EN_GOP_DWIN_SCAN_MODE enMode;
1966*53ee8cc1Swenshuai.xi 
1967*53ee8cc1Swenshuai.xi     enMode = enScanMode;
1968*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_SOURCE_SCAN_TYPE;
1969*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (MS_U32*)&enMode;
1970*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(EN_GOP_DWIN_SCAN_MODE);
1971*53ee8cc1Swenshuai.xi 
1972*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
1973*53ee8cc1Swenshuai.xi     {
1974*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
1975*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
1976*53ee8cc1Swenshuai.xi     }
1977*53ee8cc1Swenshuai.xi 
1978*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1979*53ee8cc1Swenshuai.xi }
1980*53ee8cc1Swenshuai.xi 
1981*53ee8cc1Swenshuai.xi //******************************************************************************
1982*53ee8cc1Swenshuai.xi /// Set DWIN Capture format
1983*53ee8cc1Swenshuai.xi /// @param fmt \b IN: buffer format to store DWIN content
1984*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
1985*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_DWIN_SetDataFmt(EN_GOP_DWIN_DATA_FMT fmt)1986*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetDataFmt(EN_GOP_DWIN_DATA_FMT fmt)
1987*53ee8cc1Swenshuai.xi {
1988*53ee8cc1Swenshuai.xi     GOP_ENTRY();
1989*53ee8cc1Swenshuai.xi 
1990*53ee8cc1Swenshuai.xi     g_CaptureInfo.fmt = (EN_GOP_DWIN_FMT)fmt;
1991*53ee8cc1Swenshuai.xi 
1992*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
1993*53ee8cc1Swenshuai.xi 
1994*53ee8cc1Swenshuai.xi }
1995*53ee8cc1Swenshuai.xi 
1996*53ee8cc1Swenshuai.xi /*****************************************************************************/
1997*53ee8cc1Swenshuai.xi /// Set DWIN Capture constant alpha value for format ARGB8888
1998*53ee8cc1Swenshuai.xi /// @param u8AlphaVal \b IN: constant alpha value
1999*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2000*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_DWIN_SetAlphaValue(MS_U8 u8AlphaVal)2001*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetAlphaValue(MS_U8 u8AlphaVal)
2002*53ee8cc1Swenshuai.xi {
2003*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2004*53ee8cc1Swenshuai.xi 
2005*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
2006*53ee8cc1Swenshuai.xi     MS_U8 u8Value;
2007*53ee8cc1Swenshuai.xi 
2008*53ee8cc1Swenshuai.xi     u8Value = u8AlphaVal;
2009*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_ALPHA_VALUE;
2010*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (void*)&u8Value;
2011*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
2012*53ee8cc1Swenshuai.xi 
2013*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2014*53ee8cc1Swenshuai.xi     {
2015*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2016*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2017*53ee8cc1Swenshuai.xi     }
2018*53ee8cc1Swenshuai.xi 
2019*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2020*53ee8cc1Swenshuai.xi }
2021*53ee8cc1Swenshuai.xi 
2022*53ee8cc1Swenshuai.xi /*****************************************************************************/
2023*53ee8cc1Swenshuai.xi /// Set DWIN Capture alpha source
2024*53ee8cc1Swenshuai.xi /// @param source \b IN: alpha source
2025*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2026*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_DWIN_SetAlphaSrc(EN_GOP_DWIN_ALPHA_SRC source)2027*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetAlphaSrc(EN_GOP_DWIN_ALPHA_SRC source)
2028*53ee8cc1Swenshuai.xi {
2029*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2030*53ee8cc1Swenshuai.xi 
2031*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
2032*53ee8cc1Swenshuai.xi     EN_GOP_DWIN_ALPHA_SRC enSource;
2033*53ee8cc1Swenshuai.xi 
2034*53ee8cc1Swenshuai.xi     enSource = source;
2035*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_ALPHA_SOURCE;
2036*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (MS_U32*)&enSource;
2037*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(EN_GOP_DWIN_ALPHA_SRC);
2038*53ee8cc1Swenshuai.xi 
2039*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2040*53ee8cc1Swenshuai.xi     {
2041*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2042*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2043*53ee8cc1Swenshuai.xi     }
2044*53ee8cc1Swenshuai.xi 
2045*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2046*53ee8cc1Swenshuai.xi }
2047*53ee8cc1Swenshuai.xi 
2048*53ee8cc1Swenshuai.xi /*****************************************************************************/
2049*53ee8cc1Swenshuai.xi /// Set DWIN Capture alpha inverse
2050*53ee8cc1Swenshuai.xi /// @param source \b IN: enable alpha inverse
2051*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2052*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_DWIN_SetAlphaInverse(MS_BOOL bEnable)2053*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetAlphaInverse(MS_BOOL bEnable)
2054*53ee8cc1Swenshuai.xi {
2055*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2056*53ee8cc1Swenshuai.xi 
2057*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
2058*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
2059*53ee8cc1Swenshuai.xi 
2060*53ee8cc1Swenshuai.xi     bEna = bEnable;
2061*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_ALPHA_INVERSE;
2062*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (void*)&bEna;
2063*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
2064*53ee8cc1Swenshuai.xi 
2065*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2066*53ee8cc1Swenshuai.xi     {
2067*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2068*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2069*53ee8cc1Swenshuai.xi     }
2070*53ee8cc1Swenshuai.xi 
2071*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2072*53ee8cc1Swenshuai.xi }
2073*53ee8cc1Swenshuai.xi 
2074*53ee8cc1Swenshuai.xi /*****************************************************************************/
2075*53ee8cc1Swenshuai.xi /// Set DWIN UVSample mode
2076*53ee8cc1Swenshuai.xi /// @param mode \b IN: UVSample mode
2077*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2078*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_DWIN_SetUVSample(EN_GOP_DWIN_UVSAMPLE_Mode mode)2079*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetUVSample(EN_GOP_DWIN_UVSAMPLE_Mode mode)
2080*53ee8cc1Swenshuai.xi {
2081*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2082*53ee8cc1Swenshuai.xi 
2083*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
2084*53ee8cc1Swenshuai.xi     EN_GOP_DWIN_UVSAMPLE_Mode enMode;
2085*53ee8cc1Swenshuai.xi 
2086*53ee8cc1Swenshuai.xi     enMode = mode;
2087*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_UV_SAMPLE;
2088*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (MS_U32*)&enMode;
2089*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(EN_GOP_DWIN_UVSAMPLE_Mode);
2090*53ee8cc1Swenshuai.xi 
2091*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2092*53ee8cc1Swenshuai.xi     {
2093*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2094*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2095*53ee8cc1Swenshuai.xi     }
2096*53ee8cc1Swenshuai.xi 
2097*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2098*53ee8cc1Swenshuai.xi }
2099*53ee8cc1Swenshuai.xi 
2100*53ee8cc1Swenshuai.xi /*****************************************************************************/
2101*53ee8cc1Swenshuai.xi /// Set DWIN skipframe count
2102*53ee8cc1Swenshuai.xi /// @param mode \b IN: skipframe count
2103*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2104*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_DWIN_SetSkipFrame(MS_U32 framecount)2105*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetSkipFrame(MS_U32 framecount)
2106*53ee8cc1Swenshuai.xi {
2107*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2108*53ee8cc1Swenshuai.xi 
2109*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
2110*53ee8cc1Swenshuai.xi     MS_U32 u32Count;
2111*53ee8cc1Swenshuai.xi 
2112*53ee8cc1Swenshuai.xi     u32Count = framecount;
2113*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_SKIP_FRAME;
2114*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (MS_U32*)&u32Count;
2115*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
2116*53ee8cc1Swenshuai.xi 
2117*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2118*53ee8cc1Swenshuai.xi     {
2119*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2120*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2121*53ee8cc1Swenshuai.xi     }
2122*53ee8cc1Swenshuai.xi 
2123*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2124*53ee8cc1Swenshuai.xi 
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi 
2127*53ee8cc1Swenshuai.xi 
2128*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
2129*53ee8cc1Swenshuai.xi /// Get current active gop
2130*53ee8cc1Swenshuai.xi /// @return current gop number
2131*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_GWIN_GetCurrentGOP(void)2132*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetCurrentGOP(void)
2133*53ee8cc1Swenshuai.xi {
2134*53ee8cc1Swenshuai.xi     GOP_GET_STATUS_PARAM ioctl_info;
2135*53ee8cc1Swenshuai.xi     MS_U32 u32Gop = INVALID_GOP_NUM;
2136*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2137*53ee8cc1Swenshuai.xi     ioctl_info.type = 0;
2138*53ee8cc1Swenshuai.xi     ioctl_info.en_status = E_GOP_STATUS_CURRENT_GOP;
2139*53ee8cc1Swenshuai.xi     ioctl_info.pStatus = (MS_U32*) &u32Gop;
2140*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
2141*53ee8cc1Swenshuai.xi 
2142*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_STATUS,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2143*53ee8cc1Swenshuai.xi     {
2144*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2145*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2146*53ee8cc1Swenshuai.xi     }
2147*53ee8cc1Swenshuai.xi     GOP_RETURN((MS_U8)(u32Gop&0xFF));
2148*53ee8cc1Swenshuai.xi }
2149*53ee8cc1Swenshuai.xi 
2150*53ee8cc1Swenshuai.xi /********************************************************************************/
2151*53ee8cc1Swenshuai.xi /// Set GWIN information to GOP registers
2152*53ee8cc1Swenshuai.xi /// @param u8win \b IN: GWINID
2153*53ee8cc1Swenshuai.xi /// @param pinfo \b IN: GWIN Information
2154*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2155*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2156*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetWinInfo(MS_U8 u8win,GOP_GwinInfo * pinfo)2157*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetWinInfo(MS_U8 u8win, GOP_GwinInfo* pinfo)
2158*53ee8cc1Swenshuai.xi {
2159*53ee8cc1Swenshuai.xi     GOP_GWIN_SETWININFO_PARAM ioctl_info;
2160*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO win_info;
2161*53ee8cc1Swenshuai.xi 
2162*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2163*53ee8cc1Swenshuai.xi 
2164*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_SETWININFO_PARAM));
2165*53ee8cc1Swenshuai.xi     memset(&win_info, 0x0, sizeof(GOP_BUFFER_INFO));
2166*53ee8cc1Swenshuai.xi 
2167*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8win;
2168*53ee8cc1Swenshuai.xi     ioctl_info.pinfo = (MS_U32*)&win_info;
2169*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
2170*53ee8cc1Swenshuai.xi 
2171*53ee8cc1Swenshuai.xi 
2172*53ee8cc1Swenshuai.xi     win_info.addr = pinfo->u32DRAMRBlkStart;
2173*53ee8cc1Swenshuai.xi     win_info.disp_rect.x = pinfo->u16DispHPixelStart;
2174*53ee8cc1Swenshuai.xi     win_info.disp_rect.y = pinfo->u16DispVPixelStart;
2175*53ee8cc1Swenshuai.xi     win_info.disp_rect.w = pinfo->u16DispHPixelEnd - pinfo->u16DispHPixelStart;
2176*53ee8cc1Swenshuai.xi     win_info.disp_rect.h = pinfo->u16DispVPixelEnd - pinfo->u16DispVPixelStart;
2177*53ee8cc1Swenshuai.xi     win_info.width  = pinfo->u16RBlkHPixSize;
2178*53ee8cc1Swenshuai.xi     win_info.height = pinfo->u16RBlkVPixSize;
2179*53ee8cc1Swenshuai.xi     win_info.fbFmt  = pinfo->clrType;
2180*53ee8cc1Swenshuai.xi     win_info.pitch  = pinfo->u16RBlkHRblkSize;
2181*53ee8cc1Swenshuai.xi 
2182*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_WININFO,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2183*53ee8cc1Swenshuai.xi     {
2184*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2185*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2186*53ee8cc1Swenshuai.xi     }
2187*53ee8cc1Swenshuai.xi 
2188*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2189*53ee8cc1Swenshuai.xi }
2190*53ee8cc1Swenshuai.xi 
2191*53ee8cc1Swenshuai.xi /******************************************************************************/
2192*53ee8cc1Swenshuai.xi /// Get current frame buffer pool id
2193*53ee8cc1Swenshuai.xi /// @return current frame buffer pool id. 0: first frame buffer pool, 1: second frame buffer pool
2194*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_FB_Get(void)2195*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_FB_Get(void)
2196*53ee8cc1Swenshuai.xi {
2197*53ee8cc1Swenshuai.xi     GOP_FB_PROPERTY_PARAM ioctl_info;
2198*53ee8cc1Swenshuai.xi     MS_U8 u8PoolId = 0x0;
2199*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2200*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_FB_POOLID;
2201*53ee8cc1Swenshuai.xi     ioctl_info.FBId = 0x0;
2202*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&u8PoolId;
2203*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
2204*53ee8cc1Swenshuai.xi 
2205*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2206*53ee8cc1Swenshuai.xi     {
2207*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2208*53ee8cc1Swenshuai.xi         GOP_RETURN(u8PoolId);
2209*53ee8cc1Swenshuai.xi     }
2210*53ee8cc1Swenshuai.xi 
2211*53ee8cc1Swenshuai.xi     GOP_RETURN(u8PoolId);
2212*53ee8cc1Swenshuai.xi }
2213*53ee8cc1Swenshuai.xi 
2214*53ee8cc1Swenshuai.xi //******************************************************************************
2215*53ee8cc1Swenshuai.xi /// Set GWin Attribute to Shared. If shared GWin, More than one process could
2216*53ee8cc1Swenshuai.xi /// access this GWin.
2217*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN ID for shared
2218*53ee8cc1Swenshuai.xi /// @param bIsShared \b IN: shared or not
2219*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2220*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_SetGWinShared(MS_U8 winId,MS_BOOL bIsShared)2221*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetGWinShared(MS_U8 winId, MS_BOOL bIsShared)
2222*53ee8cc1Swenshuai.xi {
2223*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
2224*53ee8cc1Swenshuai.xi     MS_BOOL bShared;
2225*53ee8cc1Swenshuai.xi 
2226*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2227*53ee8cc1Swenshuai.xi 
2228*53ee8cc1Swenshuai.xi     bShared = bIsShared;
2229*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_SHARE;
2230*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2231*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&bShared;
2232*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
2233*53ee8cc1Swenshuai.xi 
2234*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2235*53ee8cc1Swenshuai.xi     {
2236*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2237*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2238*53ee8cc1Swenshuai.xi     }
2239*53ee8cc1Swenshuai.xi 
2240*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2241*53ee8cc1Swenshuai.xi }
2242*53ee8cc1Swenshuai.xi 
2243*53ee8cc1Swenshuai.xi //******************************************************************************
2244*53ee8cc1Swenshuai.xi /// Set Reference cnt of shared GWin.
2245*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN ID for shared
2246*53ee8cc1Swenshuai.xi /// @param u16SharedCnt \b IN: shared reference cnt.
2247*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2248*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_SetGWinSharedCnt(MS_U8 winId,MS_U16 u16SharedCnt)2249*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetGWinSharedCnt(MS_U8 winId, MS_U16 u16SharedCnt)
2250*53ee8cc1Swenshuai.xi {
2251*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
2252*53ee8cc1Swenshuai.xi     MS_U16 u16Cnt;
2253*53ee8cc1Swenshuai.xi 
2254*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2255*53ee8cc1Swenshuai.xi 
2256*53ee8cc1Swenshuai.xi     u16Cnt = u16SharedCnt;
2257*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_SHARE_CNT;
2258*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2259*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&u16Cnt;
2260*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U16);
2261*53ee8cc1Swenshuai.xi 
2262*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2263*53ee8cc1Swenshuai.xi     {
2264*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2265*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2266*53ee8cc1Swenshuai.xi     }
2267*53ee8cc1Swenshuai.xi 
2268*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2269*53ee8cc1Swenshuai.xi }
2270*53ee8cc1Swenshuai.xi 
2271*53ee8cc1Swenshuai.xi //******************************************************************************
2272*53ee8cc1Swenshuai.xi /// Create GWIN
2273*53ee8cc1Swenshuai.xi /// @param width \b IN: GWIN width
2274*53ee8cc1Swenshuai.xi /// @param height \b IN: GWIN height
2275*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: frame buffer pixel format
2276*53ee8cc1Swenshuai.xi ///   - #0xFFFF default FB format
2277*53ee8cc1Swenshuai.xi /// @return The id for the created GWIN, if return 0xff, it represents create gwin fail
2278*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_CreateWin(MS_U16 width,MS_U16 height,MS_U16 fbFmt)2279*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateWin(MS_U16 width, MS_U16 height, MS_U16 fbFmt)
2280*53ee8cc1Swenshuai.xi {
2281*53ee8cc1Swenshuai.xi     MS_U32 u32FBId = INVALID_POOL_NEXT_FBID;
2282*53ee8cc1Swenshuai.xi     MS_U8 winId =INVALID_GWIN_ID;
2283*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2284*53ee8cc1Swenshuai.xi 
2285*53ee8cc1Swenshuai.xi     u32FBId = MApi_GOP_GWIN_GetFree32FBID();
2286*53ee8cc1Swenshuai.xi 
2287*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Create32FB(u32FBId,0,0,width,height,fbFmt);
2288*53ee8cc1Swenshuai.xi 
2289*53ee8cc1Swenshuai.xi     winId = MApi_GOP_GWIN_GetFreeWinID();
2290*53ee8cc1Swenshuai.xi 
2291*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Map32FB2Win(u32FBId,winId);
2292*53ee8cc1Swenshuai.xi 
2293*53ee8cc1Swenshuai.xi     GOP_RETURN(winId);
2294*53ee8cc1Swenshuai.xi }
2295*53ee8cc1Swenshuai.xi 
2296*53ee8cc1Swenshuai.xi 
2297*53ee8cc1Swenshuai.xi //******************************************************************************
2298*53ee8cc1Swenshuai.xi /// Create GWIN
2299*53ee8cc1Swenshuai.xi /// @param width \b IN: GWIN width
2300*53ee8cc1Swenshuai.xi /// @param height \b IN: GWIN height
2301*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: frame buffer pixel format
2302*53ee8cc1Swenshuai.xi ///   - #0xFFFF default FB format
2303*53ee8cc1Swenshuai.xi /// @param FBString \b IN: open by which one application
2304*53ee8cc1Swenshuai.xi /// @return The id for the created GWIN, if return 0xff, it represents create gwin fail
2305*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_CreateWin2(MS_U16 width,MS_U16 height,MS_U16 fbFmt,EN_GOP_FRAMEBUFFER_STRING FBString)2306*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateWin2(MS_U16 width, MS_U16 height, MS_U16 fbFmt, EN_GOP_FRAMEBUFFER_STRING FBString)
2307*53ee8cc1Swenshuai.xi {
2308*53ee8cc1Swenshuai.xi     MS_U32 u32FBId = INVALID_POOL_NEXT_FBID;
2309*53ee8cc1Swenshuai.xi     MS_U8 winId =INVALID_GWIN_ID;
2310*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2311*53ee8cc1Swenshuai.xi 
2312*53ee8cc1Swenshuai.xi     u32FBId = MApi_GOP_GWIN_GetFree32FBID();
2313*53ee8cc1Swenshuai.xi 
2314*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Create32FB2_EXT(u32FBId, 0, 0, width, height, fbFmt ,FBString);
2315*53ee8cc1Swenshuai.xi 
2316*53ee8cc1Swenshuai.xi     winId = MApi_GOP_GWIN_GetFreeWinID();
2317*53ee8cc1Swenshuai.xi 
2318*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Map32FB2Win(u32FBId,winId);
2319*53ee8cc1Swenshuai.xi 
2320*53ee8cc1Swenshuai.xi     GOP_RETURN(winId);
2321*53ee8cc1Swenshuai.xi 
2322*53ee8cc1Swenshuai.xi 
2323*53ee8cc1Swenshuai.xi }
2324*53ee8cc1Swenshuai.xi 
2325*53ee8cc1Swenshuai.xi 
2326*53ee8cc1Swenshuai.xi //******************************************************************************
2327*53ee8cc1Swenshuai.xi /// Create GWIN and assign frame buffer to this GWIN
2328*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: GOP number
2329*53ee8cc1Swenshuai.xi /// @param FBId \b IN: frame buffer ID
2330*53ee8cc1Swenshuai.xi /// @param dispX \b IN: frame buffer starting x position
2331*53ee8cc1Swenshuai.xi /// @param dispY \b IN: frame buffer starting y position
2332*53ee8cc1Swenshuai.xi /// @return The id for the created GWIN, if return 0xff, it represents create gwin fail
2333*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_CreateWin_Assign_FB(MS_U8 u8GOP,MS_U8 FBId,MS_U16 dispX,MS_U16 dispY)2334*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateWin_Assign_FB(MS_U8 u8GOP, MS_U8 FBId, MS_U16 dispX, MS_U16 dispY)
2335*53ee8cc1Swenshuai.xi {
2336*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_CreateWin_Assign_32FB(u8GOP, (MS_U32)FBId, dispX, dispY);
2337*53ee8cc1Swenshuai.xi }
2338*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_CreateWin_Assign_32FB(MS_U8 u8GOP,MS_U32 u32FBId,MS_U16 dispX,MS_U16 dispY)2339*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateWin_Assign_32FB(MS_U8 u8GOP, MS_U32 u32FBId, MS_U16 dispX, MS_U16 dispY)
2340*53ee8cc1Swenshuai.xi {
2341*53ee8cc1Swenshuai.xi     MS_U8 winId =INVALID_GWIN_ID;
2342*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2343*53ee8cc1Swenshuai.xi 
2344*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_SwitchGOP(u8GOP);
2345*53ee8cc1Swenshuai.xi 
2346*53ee8cc1Swenshuai.xi     winId = MApi_GOP_GWIN_GetFreeWinID();
2347*53ee8cc1Swenshuai.xi 
2348*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Map32FB2Win(u32FBId,winId);
2349*53ee8cc1Swenshuai.xi 
2350*53ee8cc1Swenshuai.xi     GOP_RETURN(winId);
2351*53ee8cc1Swenshuai.xi 
2352*53ee8cc1Swenshuai.xi }
2353*53ee8cc1Swenshuai.xi 
2354*53ee8cc1Swenshuai.xi //******************************************************************************
2355*53ee8cc1Swenshuai.xi /// Create given GWIN id
2356*53ee8cc1Swenshuai.xi /// @param u8WinId \b IN: GWIN id
2357*53ee8cc1Swenshuai.xi /// @param width \b IN: GWIN width
2358*53ee8cc1Swenshuai.xi /// @param height \b IN: GWIN height
2359*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: GWIN color format
2360*53ee8cc1Swenshuai.xi /// @return The id for the created GWIN, if return 0xff, it represents create gwin fail
2361*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_CreateStaticWin(MS_U8 u8WinId,MS_U16 width,MS_U16 height,MS_U16 fbFmt)2362*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateStaticWin(MS_U8 u8WinId, MS_U16 width, MS_U16 height, MS_U16 fbFmt)
2363*53ee8cc1Swenshuai.xi {
2364*53ee8cc1Swenshuai.xi     E_GOP_API_Result eRet=GOP_API_FAIL;
2365*53ee8cc1Swenshuai.xi     MS_U32 u32FBId = INVALID_POOL_NEXT_FBID;
2366*53ee8cc1Swenshuai.xi 
2367*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2368*53ee8cc1Swenshuai.xi     u32FBId = MApi_GOP_GWIN_GetFree32FBID();
2369*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Create32FB(u32FBId,0,0,width,height,fbFmt);
2370*53ee8cc1Swenshuai.xi     eRet = MApi_GOP_GWIN_Map32FB2Win(u32FBId,u8WinId);
2371*53ee8cc1Swenshuai.xi     GOP_RETURN(eRet);
2372*53ee8cc1Swenshuai.xi }
2373*53ee8cc1Swenshuai.xi 
2374*53ee8cc1Swenshuai.xi 
2375*53ee8cc1Swenshuai.xi //******************************************************************************
2376*53ee8cc1Swenshuai.xi /// Create GWIN by given GWIN id
2377*53ee8cc1Swenshuai.xi /// @param u8WinId \b IN: GWIN id
2378*53ee8cc1Swenshuai.xi /// @param width \b IN: GWIN width
2379*53ee8cc1Swenshuai.xi /// @param height \b IN: GWIN height
2380*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: GWIN color format
2381*53ee8cc1Swenshuai.xi /// @param FBString \b IN: open by which one application
2382*53ee8cc1Swenshuai.xi /// @return The id for the created GWIN, if return 0xff, it represents create gwin fail
2383*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_CreateStaticWin2(MS_U8 u8WinId,MS_U16 width,MS_U16 height,MS_U16 fbFmt,EN_GOP_FRAMEBUFFER_STRING FBString)2384*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateStaticWin2(MS_U8 u8WinId, MS_U16 width, MS_U16 height, MS_U16 fbFmt, EN_GOP_FRAMEBUFFER_STRING FBString)
2385*53ee8cc1Swenshuai.xi {
2386*53ee8cc1Swenshuai.xi     E_GOP_API_Result eRet=GOP_API_FAIL;
2387*53ee8cc1Swenshuai.xi     MS_U32 u32FBId = INVALID_POOL_NEXT_FBID;
2388*53ee8cc1Swenshuai.xi 
2389*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2390*53ee8cc1Swenshuai.xi     u32FBId = MApi_GOP_GWIN_GetFree32FBID();
2391*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Create32FB2_EXT(u32FBId, 0, 0, width, height, fbFmt ,FBString);
2392*53ee8cc1Swenshuai.xi     eRet = MApi_GOP_GWIN_Map32FB2Win(u32FBId,u8WinId);
2393*53ee8cc1Swenshuai.xi     GOP_RETURN(eRet);
2394*53ee8cc1Swenshuai.xi 
2395*53ee8cc1Swenshuai.xi }
2396*53ee8cc1Swenshuai.xi 
2397*53ee8cc1Swenshuai.xi 
2398*53ee8cc1Swenshuai.xi //******************************************************************************
2399*53ee8cc1Swenshuai.xi /// Create GWIN by given GWIN id and frame buffer id
2400*53ee8cc1Swenshuai.xi /// @param u8WinId \b IN: GWIN id
2401*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: GOP number
2402*53ee8cc1Swenshuai.xi /// @param FBId \b IN: frame buffer id
2403*53ee8cc1Swenshuai.xi /// @param dispX \b IN: gwin's frame buffer starting x
2404*53ee8cc1Swenshuai.xi /// @param dispY \b IN: gwin's frame buffer starting y
2405*53ee8cc1Swenshuai.xi /// @return The id for the created GWIN, if return 0xff, it represents create gwin fail
2406*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_CreateStaticWin_Assign_FB(MS_U8 u8WinId,MS_U8 u8GOP,MS_U8 FBId,MS_U16 dispX,MS_U16 dispY)2407*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateStaticWin_Assign_FB(MS_U8 u8WinId, MS_U8 u8GOP, MS_U8 FBId, MS_U16 dispX, MS_U16 dispY)
2408*53ee8cc1Swenshuai.xi {
2409*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_CreateStaticWin_Assign_32FB(u8WinId, u8GOP, (MS_U32)FBId, dispX, dispY);
2410*53ee8cc1Swenshuai.xi }
2411*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_CreateStaticWin_Assign_32FB(MS_U8 u8WinId,MS_U8 u8GOP,MS_U32 u32FBId,MS_U16 dispX,MS_U16 dispY)2412*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateStaticWin_Assign_32FB(MS_U8 u8WinId, MS_U8 u8GOP, MS_U32 u32FBId, MS_U16 dispX, MS_U16 dispY)
2413*53ee8cc1Swenshuai.xi {
2414*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2415*53ee8cc1Swenshuai.xi 
2416*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Map32FB2Win(u32FBId,u8WinId);
2417*53ee8cc1Swenshuai.xi 
2418*53ee8cc1Swenshuai.xi     GOP_RETURN(u8WinId);
2419*53ee8cc1Swenshuai.xi }
2420*53ee8cc1Swenshuai.xi 
2421*53ee8cc1Swenshuai.xi 
2422*53ee8cc1Swenshuai.xi /******************************************************************************/
2423*53ee8cc1Swenshuai.xi /// Check if GWIN is created
2424*53ee8cc1Swenshuai.xi /// @param gId \b IN: GWINID
2425*53ee8cc1Swenshuai.xi /// @return TRUE or FALSE
2426*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_IsGwinExist(MS_U8 gId)2427*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_IsGwinExist(MS_U8 gId)
2428*53ee8cc1Swenshuai.xi {
2429*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
2430*53ee8cc1Swenshuai.xi     MS_U8 u8Exist = FALSE;
2431*53ee8cc1Swenshuai.xi 
2432*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2433*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_EXIST;
2434*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = gId;
2435*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&u8Exist;
2436*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
2437*53ee8cc1Swenshuai.xi 
2438*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2439*53ee8cc1Swenshuai.xi     {
2440*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2441*53ee8cc1Swenshuai.xi         GOP_RETURN(u8Exist);
2442*53ee8cc1Swenshuai.xi     }
2443*53ee8cc1Swenshuai.xi 
2444*53ee8cc1Swenshuai.xi     GOP_RETURN(u8Exist);
2445*53ee8cc1Swenshuai.xi }
2446*53ee8cc1Swenshuai.xi 
2447*53ee8cc1Swenshuai.xi /******************************************************************************/
2448*53ee8cc1Swenshuai.xi /// Get total active gwin number
2449*53ee8cc1Swenshuai.xi /// @return total active gwin number
2450*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetActiveGWIN(void)2451*53ee8cc1Swenshuai.xi MS_U16   MApi_GOP_GWIN_GetActiveGWIN(void)
2452*53ee8cc1Swenshuai.xi {
2453*53ee8cc1Swenshuai.xi     MS_U8 gwinNum = 0;
2454*53ee8cc1Swenshuai.xi     MS_U8 i;
2455*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2456*53ee8cc1Swenshuai.xi 
2457*53ee8cc1Swenshuai.xi     for(i = 0; i < MAX_GWIN_SUPPORT ; i++)
2458*53ee8cc1Swenshuai.xi     {
2459*53ee8cc1Swenshuai.xi         if(MApi_GOP_GWIN_IsGWINEnabled(i) == TRUE)
2460*53ee8cc1Swenshuai.xi         {
2461*53ee8cc1Swenshuai.xi             gwinNum |= 1<<i;
2462*53ee8cc1Swenshuai.xi         }
2463*53ee8cc1Swenshuai.xi     }
2464*53ee8cc1Swenshuai.xi     GOP_RETURN(gwinNum);
2465*53ee8cc1Swenshuai.xi 
2466*53ee8cc1Swenshuai.xi }
2467*53ee8cc1Swenshuai.xi 
2468*53ee8cc1Swenshuai.xi //******************************************************************************
2469*53ee8cc1Swenshuai.xi /// Enable GWIN for display
2470*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN id
2471*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
2472*53ee8cc1Swenshuai.xi ///   - # TRUE Show GWIN
2473*53ee8cc1Swenshuai.xi ///   - # FALSE Hide GWIN
2474*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2475*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2476*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_Enable(MS_U8 winId,MS_BOOL bEnable)2477*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Enable(MS_U8 winId, MS_BOOL bEnable)
2478*53ee8cc1Swenshuai.xi {
2479*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
2480*53ee8cc1Swenshuai.xi 
2481*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2482*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_ENABLE;
2483*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2484*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*) &bEnable;
2485*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
2486*53ee8cc1Swenshuai.xi 
2487*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2488*53ee8cc1Swenshuai.xi     {
2489*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2490*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2491*53ee8cc1Swenshuai.xi     }
2492*53ee8cc1Swenshuai.xi 
2493*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2494*53ee8cc1Swenshuai.xi 
2495*53ee8cc1Swenshuai.xi }
2496*53ee8cc1Swenshuai.xi 
2497*53ee8cc1Swenshuai.xi /********************************************************************************/
2498*53ee8cc1Swenshuai.xi /// Check if GWIN is enabled
2499*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_IsEnabled(void)2500*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_GWIN_IsEnabled(void)
2501*53ee8cc1Swenshuai.xi {
2502*53ee8cc1Swenshuai.xi     MS_U8 i = 0;
2503*53ee8cc1Swenshuai.xi     MS_BOOL bEnable =FALSE;
2504*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2505*53ee8cc1Swenshuai.xi 
2506*53ee8cc1Swenshuai.xi     while(i<MAX_GWIN_SUPPORT)
2507*53ee8cc1Swenshuai.xi     {
2508*53ee8cc1Swenshuai.xi         bEnable = MApi_GOP_GWIN_IsGWINEnabled(i);
2509*53ee8cc1Swenshuai.xi         if (bEnable==TRUE)
2510*53ee8cc1Swenshuai.xi         {
2511*53ee8cc1Swenshuai.xi             GOP_RETURN(TRUE);
2512*53ee8cc1Swenshuai.xi         }
2513*53ee8cc1Swenshuai.xi         i++;
2514*53ee8cc1Swenshuai.xi     }
2515*53ee8cc1Swenshuai.xi     GOP_RETURN(FALSE);
2516*53ee8cc1Swenshuai.xi }
2517*53ee8cc1Swenshuai.xi 
2518*53ee8cc1Swenshuai.xi //******************************************************************************
2519*53ee8cc1Swenshuai.xi /// Check if all GWIN is currently enabled
2520*53ee8cc1Swenshuai.xi /// @return  - # TRUE GWins are enabled
2521*53ee8cc1Swenshuai.xi /// @return  - # FALSE not all GWins are enabled
2522*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_IsAllGWINDisabled(void)2523*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_GWIN_IsAllGWINDisabled(void)
2524*53ee8cc1Swenshuai.xi {
2525*53ee8cc1Swenshuai.xi     MS_BOOL ret;
2526*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2527*53ee8cc1Swenshuai.xi 
2528*53ee8cc1Swenshuai.xi     ret =  MApi_GOP_GWIN_IsEnabled();
2529*53ee8cc1Swenshuai.xi     GOP_RETURN(ret);
2530*53ee8cc1Swenshuai.xi 
2531*53ee8cc1Swenshuai.xi }
2532*53ee8cc1Swenshuai.xi 
2533*53ee8cc1Swenshuai.xi //******************************************************************************
2534*53ee8cc1Swenshuai.xi /// Check if all some GWIN is currently enabled
2535*53ee8cc1Swenshuai.xi /// @param  winId \b IN: gwin id
2536*53ee8cc1Swenshuai.xi /// @return  - the according GWin is enabled or not
2537*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_IsGWINEnabled(MS_U8 winId)2538*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_GWIN_IsGWINEnabled(MS_U8 winId)
2539*53ee8cc1Swenshuai.xi {
2540*53ee8cc1Swenshuai.xi     MS_BOOL bEn;
2541*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
2542*53ee8cc1Swenshuai.xi 
2543*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2544*53ee8cc1Swenshuai.xi 
2545*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_ENABLE;
2546*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2547*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*) &bEn;
2548*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
2549*53ee8cc1Swenshuai.xi 
2550*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2551*53ee8cc1Swenshuai.xi     {
2552*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2553*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2554*53ee8cc1Swenshuai.xi     }
2555*53ee8cc1Swenshuai.xi 
2556*53ee8cc1Swenshuai.xi     GOP_RETURN(bEn);
2557*53ee8cc1Swenshuai.xi 
2558*53ee8cc1Swenshuai.xi 
2559*53ee8cc1Swenshuai.xi }
2560*53ee8cc1Swenshuai.xi 
2561*53ee8cc1Swenshuai.xi //******************************************************************************
2562*53ee8cc1Swenshuai.xi /// [Obsolete Function]
2563*53ee8cc1Swenshuai.xi /// @param hext \b IN
2564*53ee8cc1Swenshuai.xi ///   - 0 disable horizontal pixel duplication
2565*53ee8cc1Swenshuai.xi ///   - 1 enable  horizontal pixel duplication
2566*53ee8cc1Swenshuai.xi /// @param vext \b IN
2567*53ee8cc1Swenshuai.xi ///   - 0 disable vertical line duplication
2568*53ee8cc1Swenshuai.xi ///   - 1 enable  vertical line duplication
2569*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2570*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_SetDuplication(MS_U8 hext,MS_U8 vext)2571*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetDuplication(MS_U8 hext, MS_U8 vext)
2572*53ee8cc1Swenshuai.xi {
2573*53ee8cc1Swenshuai.xi //NOT USE FOR COVERITY HAPPY -_-~
2574*53ee8cc1Swenshuai.xi // THE CODE BELOW is useless
2575*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2576*53ee8cc1Swenshuai.xi     UNUSED(hext);
2577*53ee8cc1Swenshuai.xi     UNUSED(vext);
2578*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2579*53ee8cc1Swenshuai.xi 
2580*53ee8cc1Swenshuai.xi }
2581*53ee8cc1Swenshuai.xi 
2582*53ee8cc1Swenshuai.xi 
2583*53ee8cc1Swenshuai.xi /******************************************************************************/
2584*53ee8cc1Swenshuai.xi /// Delete the GWIN, free corresponding frame buffer
2585*53ee8cc1Swenshuai.xi /// @param winId \b IN GWIN id
2586*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2587*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2588*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_DeleteWin(MS_U8 winId)2589*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_DeleteWin(MS_U8 winId)
2590*53ee8cc1Swenshuai.xi {
2591*53ee8cc1Swenshuai.xi     GOP_GWIN_DESTROY_PARAM ioctl_info;
2592*53ee8cc1Swenshuai.xi     MS_U32 u32FBID=DRV_MAX_GWIN_FB_SUPPORT;
2593*53ee8cc1Swenshuai.xi 
2594*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2595*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_DESTROY_PARAM));
2596*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2597*53ee8cc1Swenshuai.xi 
2598*53ee8cc1Swenshuai.xi     u32FBID = MApi_GOP_GWIN_Get32FBfromGWIN(winId);
2599*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_DESTROY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2600*53ee8cc1Swenshuai.xi     {
2601*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2602*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2603*53ee8cc1Swenshuai.xi     }
2604*53ee8cc1Swenshuai.xi 
2605*53ee8cc1Swenshuai.xi     if(MApi_GOP_GWIN_Is32FBExist(u32FBID)==TRUE)
2606*53ee8cc1Swenshuai.xi     {
2607*53ee8cc1Swenshuai.xi         MApi_GOP_GWIN_Destroy32FB(u32FBID);
2608*53ee8cc1Swenshuai.xi     }
2609*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2610*53ee8cc1Swenshuai.xi 
2611*53ee8cc1Swenshuai.xi }
2612*53ee8cc1Swenshuai.xi 
2613*53ee8cc1Swenshuai.xi /******************************************************************************/
2614*53ee8cc1Swenshuai.xi /// Set the GWIN's position
2615*53ee8cc1Swenshuai.xi /// @param winId  \b IN: GWIN id
2616*53ee8cc1Swenshuai.xi /// @param dispX \b IN: x coordinate
2617*53ee8cc1Swenshuai.xi /// @param dispY \b IN: y coordinate
2618*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2619*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2620*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetWinPosition(MS_U8 winId,MS_U16 dispX,MS_U16 dispY)2621*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetWinPosition(MS_U8 winId, MS_U16 dispX, MS_U16 dispY)
2622*53ee8cc1Swenshuai.xi {
2623*53ee8cc1Swenshuai.xi 
2624*53ee8cc1Swenshuai.xi     GOP_GWIN_SETWININFO_PARAM ioctl_info;
2625*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO win_info;
2626*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2627*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_SETWININFO_PARAM));
2628*53ee8cc1Swenshuai.xi     memset(&win_info, 0x0, sizeof(GOP_BUFFER_INFO));
2629*53ee8cc1Swenshuai.xi 
2630*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2631*53ee8cc1Swenshuai.xi     ioctl_info.pinfo = (MS_U32*)&win_info;
2632*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
2633*53ee8cc1Swenshuai.xi 
2634*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_WININFO,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2635*53ee8cc1Swenshuai.xi     {
2636*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2637*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2638*53ee8cc1Swenshuai.xi     }
2639*53ee8cc1Swenshuai.xi 
2640*53ee8cc1Swenshuai.xi 
2641*53ee8cc1Swenshuai.xi     win_info.disp_rect.x = dispX;
2642*53ee8cc1Swenshuai.xi     win_info.disp_rect.y = dispY;
2643*53ee8cc1Swenshuai.xi 
2644*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_WININFO,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2645*53ee8cc1Swenshuai.xi     {
2646*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2647*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2648*53ee8cc1Swenshuai.xi     }
2649*53ee8cc1Swenshuai.xi 
2650*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2651*53ee8cc1Swenshuai.xi 
2652*53ee8cc1Swenshuai.xi }
2653*53ee8cc1Swenshuai.xi 
2654*53ee8cc1Swenshuai.xi /******************************************************************************/
2655*53ee8cc1Swenshuai.xi /// [Obstacle Function]
2656*53ee8cc1Swenshuai.xi /// @return 0
2657*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_Get_HSTART(void)2658*53ee8cc1Swenshuai.xi MS_U16 MApi_GOP_GWIN_Get_HSTART(void)
2659*53ee8cc1Swenshuai.xi {
2660*53ee8cc1Swenshuai.xi     return 0;
2661*53ee8cc1Swenshuai.xi }
2662*53ee8cc1Swenshuai.xi 
2663*53ee8cc1Swenshuai.xi 
2664*53ee8cc1Swenshuai.xi /******************************************************************************/
2665*53ee8cc1Swenshuai.xi /// Set the GWIN's frame buffer offset
2666*53ee8cc1Swenshuai.xi /// @param winId  \b IN: GWIN id
2667*53ee8cc1Swenshuai.xi /// @param x \b IN: x coordinate
2668*53ee8cc1Swenshuai.xi /// @param y \b IN: y coordinate
2669*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2670*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2671*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetWinPositionOffset(MS_U8 winId,MS_U16 x,MS_U16 y)2672*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetWinPositionOffset(MS_U8 winId, MS_U16 x, MS_U16 y)
2673*53ee8cc1Swenshuai.xi {
2674*53ee8cc1Swenshuai.xi     GOP_GwinInfo gwin;
2675*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2676*53ee8cc1Swenshuai.xi     memset(&gwin, 0, sizeof(GOP_GwinInfo));
2677*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_GetWinInfo(winId, &gwin);
2678*53ee8cc1Swenshuai.xi     gwin.u16WinX = x;
2679*53ee8cc1Swenshuai.xi     gwin.u16WinY = y;
2680*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_SetWinInfo(winId, &gwin);
2681*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2682*53ee8cc1Swenshuai.xi 
2683*53ee8cc1Swenshuai.xi }
2684*53ee8cc1Swenshuai.xi 
2685*53ee8cc1Swenshuai.xi 
2686*53ee8cc1Swenshuai.xi /******************************************************************************/
2687*53ee8cc1Swenshuai.xi /// Set gwin property
2688*53ee8cc1Swenshuai.xi /// @param WinProperty  \b IN: gwin property info
2689*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2690*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2691*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetWinProperty(GOP_GwinDispProperty WinProperty)2692*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetWinProperty(GOP_GwinDispProperty WinProperty)
2693*53ee8cc1Swenshuai.xi {
2694*53ee8cc1Swenshuai.xi     GOP_GwinInfo gWin;
2695*53ee8cc1Swenshuai.xi     MS_U32 u32fbId;
2696*53ee8cc1Swenshuai.xi     GOP_GwinFBAttr  fbInfo;
2697*53ee8cc1Swenshuai.xi 
2698*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2699*53ee8cc1Swenshuai.xi 
2700*53ee8cc1Swenshuai.xi     u32fbId = MApi_GOP_GWIN_GetFBfromGWIN(WinProperty.gId);
2701*53ee8cc1Swenshuai.xi 
2702*53ee8cc1Swenshuai.xi     memset(&gWin, 0, sizeof(GOP_GwinInfo));
2703*53ee8cc1Swenshuai.xi     memset(&fbInfo, 0x0, sizeof(GOP_GwinFBAttr));
2704*53ee8cc1Swenshuai.xi 
2705*53ee8cc1Swenshuai.xi     if(MApi_GOP_GWIN_GetWinInfo(WinProperty.gId,&gWin)!=GOP_API_SUCCESS)
2706*53ee8cc1Swenshuai.xi     {
2707*53ee8cc1Swenshuai.xi         GOP_WARN("[%s][%d] Fail!!!!\n",__FUNCTION__,__LINE__);
2708*53ee8cc1Swenshuai.xi     }
2709*53ee8cc1Swenshuai.xi     if(MApi_GOP_GWIN_Get32FBInfo(u32fbId,  &fbInfo)!=GOP_API_SUCCESS)
2710*53ee8cc1Swenshuai.xi     {
2711*53ee8cc1Swenshuai.xi         GOP_WARN("[%s][%d] Fail!!!!\n",__FUNCTION__,__LINE__);
2712*53ee8cc1Swenshuai.xi     }
2713*53ee8cc1Swenshuai.xi 
2714*53ee8cc1Swenshuai.xi     gWin.u16DispHPixelStart = WinProperty.StartX;
2715*53ee8cc1Swenshuai.xi     gWin.u16DispVPixelStart = WinProperty.StartY;
2716*53ee8cc1Swenshuai.xi     gWin.u16DispHPixelEnd = WinProperty.StartX + WinProperty.Win_Width;
2717*53ee8cc1Swenshuai.xi     gWin.u16DispVPixelEnd = WinProperty.StartY + WinProperty.Win_Height;
2718*53ee8cc1Swenshuai.xi     gWin.u16WinX = WinProperty.FBOffset_X;
2719*53ee8cc1Swenshuai.xi     gWin.u16WinY = WinProperty.FBOffset_Y;
2720*53ee8cc1Swenshuai.xi     gWin.u16RBlkVPixSize = fbInfo.height;
2721*53ee8cc1Swenshuai.xi     gWin.u16RBlkHPixSize = fbInfo.width;
2722*53ee8cc1Swenshuai.xi     gWin.u16RBlkHRblkSize = GOP_CalcPitch(fbInfo.fbFmt, fbInfo.width);
2723*53ee8cc1Swenshuai.xi     gWin.u32DRAMRBlkStart = fbInfo.addr;
2724*53ee8cc1Swenshuai.xi     gWin.clrType = (EN_GOP_COLOR_TYPE)fbInfo.fbFmt;
2725*53ee8cc1Swenshuai.xi 
2726*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_SetWinInfo(WinProperty.gId, &gWin);
2727*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2728*53ee8cc1Swenshuai.xi 
2729*53ee8cc1Swenshuai.xi }
2730*53ee8cc1Swenshuai.xi 
2731*53ee8cc1Swenshuai.xi /******************************************************************************/
2732*53ee8cc1Swenshuai.xi /// Switch GE to render on a GWIN's frame buffer
2733*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN id
2734*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2735*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
2736*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_Switch2Gwin(MS_U8 winId)2737*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Switch2Gwin(MS_U8 winId)
2738*53ee8cc1Swenshuai.xi {
2739*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
2740*53ee8cc1Swenshuai.xi     GOP_CBFmtInfo* pCBFmtInfo=NULL;
2741*53ee8cc1Swenshuai.xi 
2742*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2743*53ee8cc1Swenshuai.xi     pCBFmtInfo = (PGOP_CBFmtInfo)malloc(sizeof(GOP_CBFmtInfo));
2744*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_SWITCH_2_GWIN;
2745*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = winId;
2746*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)pCBFmtInfo;
2747*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
2748*53ee8cc1Swenshuai.xi 
2749*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2750*53ee8cc1Swenshuai.xi     {
2751*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2752*53ee8cc1Swenshuai.xi         free(pCBFmtInfo);
2753*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2754*53ee8cc1Swenshuai.xi     }
2755*53ee8cc1Swenshuai.xi 
2756*53ee8cc1Swenshuai.xi     free(pCBFmtInfo);
2757*53ee8cc1Swenshuai.xi 
2758*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2759*53ee8cc1Swenshuai.xi }
2760*53ee8cc1Swenshuai.xi 
2761*53ee8cc1Swenshuai.xi 
2762*53ee8cc1Swenshuai.xi /*****************************************************************************/
2763*53ee8cc1Swenshuai.xi /// Get current active GWIN id
2764*53ee8cc1Swenshuai.xi /// @return current active GWIN id
2765*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetCurrentWinId()2766*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetCurrentWinId()
2767*53ee8cc1Swenshuai.xi {
2768*53ee8cc1Swenshuai.xi     GOP_GET_STATUS_PARAM ioctl_info;
2769*53ee8cc1Swenshuai.xi     MS_U32 u32GWin = INVALID_WIN_ID;
2770*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2771*53ee8cc1Swenshuai.xi     ioctl_info.type = 0;
2772*53ee8cc1Swenshuai.xi     ioctl_info.en_status = E_GOP_STATUS_CURRENT_GWIN;
2773*53ee8cc1Swenshuai.xi     ioctl_info.pStatus = (MS_U32*) &u32GWin;
2774*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
2775*53ee8cc1Swenshuai.xi 
2776*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_STATUS,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
2777*53ee8cc1Swenshuai.xi     {
2778*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2779*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
2780*53ee8cc1Swenshuai.xi     }
2781*53ee8cc1Swenshuai.xi     GOP_RETURN((MS_U8)(u32GWin&0xFF));
2782*53ee8cc1Swenshuai.xi }
2783*53ee8cc1Swenshuai.xi 
2784*53ee8cc1Swenshuai.xi /********************************************************************************/
2785*53ee8cc1Swenshuai.xi /// Set which one gop show in the top when different gop do alpha blending.
2786*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: GOP number
2787*53ee8cc1Swenshuai.xi ///   - # u8GOP is 0 => gop0's gwins will be shown in the top
2788*53ee8cc1Swenshuai.xi ///   - # u8GOP is 1 => gop1's gwins will be shown in the top
2789*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2790*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_OutputLayerSwitch(MS_U8 u8GOP)2791*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_OutputLayerSwitch(MS_U8 u8GOP)
2792*53ee8cc1Swenshuai.xi {
2793*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
2794*53ee8cc1Swenshuai.xi     MS_U32 value = 0;
2795*53ee8cc1Swenshuai.xi 
2796*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2797*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
2798*53ee8cc1Swenshuai.xi 
2799*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_OUTPUT_LAYER_SWITCH;
2800*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
2801*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&value;
2802*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
2803*53ee8cc1Swenshuai.xi 
2804*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2805*53ee8cc1Swenshuai.xi     {
2806*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2807*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2808*53ee8cc1Swenshuai.xi     }
2809*53ee8cc1Swenshuai.xi 
2810*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2811*53ee8cc1Swenshuai.xi }
2812*53ee8cc1Swenshuai.xi 
2813*53ee8cc1Swenshuai.xi 
2814*53ee8cc1Swenshuai.xi /*******************************************************************************/
2815*53ee8cc1Swenshuai.xi //Set which MUX select which GOP ,when different gop do the alpha blending
2816*53ee8cc1Swenshuai.xi //@param pGopMuxConfig \b IN:information about GOP and corresponding level
2817*53ee8cc1Swenshuai.xi //   #u8GopNum: the total GOP counts who need to select change Mux
2818*53ee8cc1Swenshuai.xi //   #GopMux[i].u8GopIndex :the GOP which need to change Mux
2819*53ee8cc1Swenshuai.xi //   #GopMux[i].u8MuxIndex :the GOP corresponding Mux
2820*53ee8cc1Swenshuai.xi //@return GOP_API_SUCCESS - Success
2821*53ee8cc1Swenshuai.xi /*******************************************************************************/
2822*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetMux(GOP_MuxConfig * pGopMuxConfig,MS_U32 u32SizeOfMuxInfo)2823*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetMux(GOP_MuxConfig * pGopMuxConfig, MS_U32 u32SizeOfMuxInfo)
2824*53ee8cc1Swenshuai.xi {
2825*53ee8cc1Swenshuai.xi     GOP_SETMUX_PARAM  ioctl_info;
2826*53ee8cc1Swenshuai.xi     GOP_SETMUX  MuxSet;
2827*53ee8cc1Swenshuai.xi     MS_U32 i;
2828*53ee8cc1Swenshuai.xi 
2829*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2830*53ee8cc1Swenshuai.xi 
2831*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SETMUX_PARAM));
2832*53ee8cc1Swenshuai.xi     memset(&MuxSet, 0x0, sizeof(GOP_MuxConfig));
2833*53ee8cc1Swenshuai.xi 
2834*53ee8cc1Swenshuai.xi     MuxSet.MuxCount = pGopMuxConfig->u8MuxCounts;
2835*53ee8cc1Swenshuai.xi 
2836*53ee8cc1Swenshuai.xi     for(i=0; i< pGopMuxConfig->u8MuxCounts; i++)
2837*53ee8cc1Swenshuai.xi     {
2838*53ee8cc1Swenshuai.xi         MuxSet.gop[i] = pGopMuxConfig->GopMux[i].u8GopIndex;
2839*53ee8cc1Swenshuai.xi         MuxSet.mux[i] = pGopMuxConfig->GopMux[i].u8MuxIndex;
2840*53ee8cc1Swenshuai.xi     }
2841*53ee8cc1Swenshuai.xi 
2842*53ee8cc1Swenshuai.xi     ioctl_info.pMuxInfo = (MS_U32*)&MuxSet;
2843*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_SETMUX);
2844*53ee8cc1Swenshuai.xi 
2845*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_MUX,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2846*53ee8cc1Swenshuai.xi     {
2847*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2848*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2849*53ee8cc1Swenshuai.xi     }
2850*53ee8cc1Swenshuai.xi 
2851*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2852*53ee8cc1Swenshuai.xi }
2853*53ee8cc1Swenshuai.xi 
2854*53ee8cc1Swenshuai.xi /*******************************************************************************/
2855*53ee8cc1Swenshuai.xi //Set which OSD Layer select which GOP
2856*53ee8cc1Swenshuai.xi //@param pGopLayer \b IN:information about GOP and corresponding Layer
2857*53ee8cc1Swenshuai.xi //   #u32LayerCounts: the total GOP/Layer counts to set
2858*53ee8cc1Swenshuai.xi //   #stGopLayer[i].u32GopIndex :the GOP which need to change Layer
2859*53ee8cc1Swenshuai.xi //   #stGopLayer[i].u32LayerIndex :the GOP corresponding Layer
2860*53ee8cc1Swenshuai.xi //@return GOP_API_SUCCESS - Success
2861*53ee8cc1Swenshuai.xi /*******************************************************************************/
MApi_GOP_GWIN_SetLayer(GOP_LayerConfig * pGopLayer,MS_U32 u32SizeOfLayerInfo)2862*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetLayer(GOP_LayerConfig *pGopLayer, MS_U32 u32SizeOfLayerInfo)
2863*53ee8cc1Swenshuai.xi {
2864*53ee8cc1Swenshuai.xi     GOP_SETLAYER_PARAM  ioctl_info;
2865*53ee8cc1Swenshuai.xi     GOP_SETLayer  stLayerSetting;
2866*53ee8cc1Swenshuai.xi     MS_U32 i;
2867*53ee8cc1Swenshuai.xi 
2868*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2869*53ee8cc1Swenshuai.xi 
2870*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SETLAYER_PARAM));
2871*53ee8cc1Swenshuai.xi     memset(&stLayerSetting, 0x0, sizeof(GOP_SETLayer));
2872*53ee8cc1Swenshuai.xi 
2873*53ee8cc1Swenshuai.xi     stLayerSetting.u32LayerCount = pGopLayer->u32LayerCounts;
2874*53ee8cc1Swenshuai.xi 
2875*53ee8cc1Swenshuai.xi     for(i=0; i< stLayerSetting.u32LayerCount; i++)
2876*53ee8cc1Swenshuai.xi     {
2877*53ee8cc1Swenshuai.xi         stLayerSetting.u32Gop[i] = pGopLayer->stGopLayer[i].u32GopIndex;
2878*53ee8cc1Swenshuai.xi         stLayerSetting.u32Layer[i] = pGopLayer->stGopLayer[i].u32LayerIndex;
2879*53ee8cc1Swenshuai.xi     }
2880*53ee8cc1Swenshuai.xi 
2881*53ee8cc1Swenshuai.xi     ioctl_info.pLayerInfo= (MS_U32*)&stLayerSetting;
2882*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_SETLayer);
2883*53ee8cc1Swenshuai.xi 
2884*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_LAYER,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2885*53ee8cc1Swenshuai.xi     {
2886*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2887*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2888*53ee8cc1Swenshuai.xi     }
2889*53ee8cc1Swenshuai.xi 
2890*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2891*53ee8cc1Swenshuai.xi }
2892*53ee8cc1Swenshuai.xi 
2893*53ee8cc1Swenshuai.xi /*******************************************************************************/
2894*53ee8cc1Swenshuai.xi //Get which OSD Layer select which GOP
2895*53ee8cc1Swenshuai.xi //@param pGopLayer \b OUT:information about GOP and corresponding Layer
2896*53ee8cc1Swenshuai.xi //   #u32LayerCounts: the total GOP/Layer inited
2897*53ee8cc1Swenshuai.xi //   #stGopLayer[i].u32GopIndex :the GOP which need to change Layer
2898*53ee8cc1Swenshuai.xi //   #stGopLayer[i].u32LayerIndex :the GOP corresponding Layer
2899*53ee8cc1Swenshuai.xi //@return GOP_API_SUCCESS - Success
2900*53ee8cc1Swenshuai.xi /*******************************************************************************/
MApi_GOP_GWIN_GetLayer(GOP_LayerConfig * pGopLayer,MS_U32 u32SizeOfLayerInfo)2901*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetLayer(GOP_LayerConfig *pGopLayer, MS_U32 u32SizeOfLayerInfo)
2902*53ee8cc1Swenshuai.xi {
2903*53ee8cc1Swenshuai.xi     GOP_SETLAYER_PARAM  ioctl_info;
2904*53ee8cc1Swenshuai.xi     GOP_SETLayer  stLayerSetting;
2905*53ee8cc1Swenshuai.xi 
2906*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2907*53ee8cc1Swenshuai.xi 
2908*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SETLAYER_PARAM));
2909*53ee8cc1Swenshuai.xi     memset(&stLayerSetting, 0x0, sizeof(GOP_SETLayer));
2910*53ee8cc1Swenshuai.xi 
2911*53ee8cc1Swenshuai.xi     ioctl_info.pLayerInfo= (MS_U32*)&stLayerSetting;
2912*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_SETLayer);
2913*53ee8cc1Swenshuai.xi 
2914*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_LAYER,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
2915*53ee8cc1Swenshuai.xi     {
2916*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
2917*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
2918*53ee8cc1Swenshuai.xi     }
2919*53ee8cc1Swenshuai.xi     if (pGopLayer != NULL)
2920*53ee8cc1Swenshuai.xi     {
2921*53ee8cc1Swenshuai.xi         MS_U32 u32GOP;
2922*53ee8cc1Swenshuai.xi         pGopLayer->u32LayerCounts = stLayerSetting.u32LayerCount;
2923*53ee8cc1Swenshuai.xi         for (u32GOP = 0; u32GOP < pGopLayer->u32LayerCounts; u32GOP++)
2924*53ee8cc1Swenshuai.xi         {
2925*53ee8cc1Swenshuai.xi             pGopLayer->stGopLayer[u32GOP].u32GopIndex = stLayerSetting.u32Gop[u32GOP];
2926*53ee8cc1Swenshuai.xi             pGopLayer->stGopLayer[u32GOP].u32LayerIndex = stLayerSetting.u32Layer[u32GOP];
2927*53ee8cc1Swenshuai.xi         }
2928*53ee8cc1Swenshuai.xi     }
2929*53ee8cc1Swenshuai.xi 
2930*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
2931*53ee8cc1Swenshuai.xi }
2932*53ee8cc1Swenshuai.xi 
2933*53ee8cc1Swenshuai.xi /*******************************************************************************/
2934*53ee8cc1Swenshuai.xi //Get Layer From GOP
2935*53ee8cc1Swenshuai.xi //@param u32GOP \b IN: gop id
2936*53ee8cc1Swenshuai.xi //@return MS_U32 - the layer id which the gop is on, LAYER_ID_INVALID for invalid
2937*53ee8cc1Swenshuai.xi /*******************************************************************************/
MApi_GOP_GWIN_GetLayerFromGOP(MS_U32 u32GOP)2938*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_GetLayerFromGOP(MS_U32 u32GOP)
2939*53ee8cc1Swenshuai.xi {
2940*53ee8cc1Swenshuai.xi     GOP_LayerConfig stGOPLayerConfig;
2941*53ee8cc1Swenshuai.xi     MS_U32 u32Layer = LAYER_ID_INVALID;
2942*53ee8cc1Swenshuai.xi     memset(&stGOPLayerConfig, 0, sizeof(GOP_LayerConfig));
2943*53ee8cc1Swenshuai.xi     if (GOP_API_SUCCESS == MApi_GOP_GWIN_GetLayer(&stGOPLayerConfig, sizeof(GOP_LayerConfig)))
2944*53ee8cc1Swenshuai.xi     {
2945*53ee8cc1Swenshuai.xi         MS_U32 u32Index;
2946*53ee8cc1Swenshuai.xi         for (u32Index = 0; u32Index < stGOPLayerConfig.u32LayerCounts; u32Index++)
2947*53ee8cc1Swenshuai.xi         {
2948*53ee8cc1Swenshuai.xi             if (stGOPLayerConfig.stGopLayer[u32Index].u32GopIndex == u32GOP)
2949*53ee8cc1Swenshuai.xi             {
2950*53ee8cc1Swenshuai.xi                 u32Layer = stGOPLayerConfig.stGopLayer[u32Index].u32LayerIndex;
2951*53ee8cc1Swenshuai.xi                 break;
2952*53ee8cc1Swenshuai.xi             }
2953*53ee8cc1Swenshuai.xi         }
2954*53ee8cc1Swenshuai.xi     }
2955*53ee8cc1Swenshuai.xi     return u32Layer;
2956*53ee8cc1Swenshuai.xi }
2957*53ee8cc1Swenshuai.xi 
2958*53ee8cc1Swenshuai.xi /*******************************************************************************/
2959*53ee8cc1Swenshuai.xi //Get GOP From layer
2960*53ee8cc1Swenshuai.xi //@param u32Layer \b IN: layer id
2961*53ee8cc1Swenshuai.xi //@return MS_U32 - the gop id which the layer have,  INVALID_GOP_NUM for invalid
2962*53ee8cc1Swenshuai.xi /*******************************************************************************/
MApi_GOP_GWIN_GetGOPFromLayer(MS_U32 u32Layer)2963*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_GetGOPFromLayer(MS_U32 u32Layer)
2964*53ee8cc1Swenshuai.xi {
2965*53ee8cc1Swenshuai.xi     MS_U32 u32GOP = INVALID_GOP_NUM;
2966*53ee8cc1Swenshuai.xi     GOP_LayerConfig stGOPLayerConfig;
2967*53ee8cc1Swenshuai.xi     memset(&stGOPLayerConfig, 0, sizeof(GOP_LayerConfig));
2968*53ee8cc1Swenshuai.xi     if (GOP_API_SUCCESS == MApi_GOP_GWIN_GetLayer(&stGOPLayerConfig, sizeof(GOP_LayerConfig)))
2969*53ee8cc1Swenshuai.xi     {
2970*53ee8cc1Swenshuai.xi         MS_U32 u32Index;
2971*53ee8cc1Swenshuai.xi         for (u32Index = 0; u32Index < stGOPLayerConfig.u32LayerCounts; u32Index++)
2972*53ee8cc1Swenshuai.xi         {
2973*53ee8cc1Swenshuai.xi             if (stGOPLayerConfig.stGopLayer[u32Index].u32LayerIndex == u32Layer)
2974*53ee8cc1Swenshuai.xi             {
2975*53ee8cc1Swenshuai.xi                 u32GOP = stGOPLayerConfig.stGopLayer[u32Index].u32GopIndex;
2976*53ee8cc1Swenshuai.xi                 break;
2977*53ee8cc1Swenshuai.xi             }
2978*53ee8cc1Swenshuai.xi         }
2979*53ee8cc1Swenshuai.xi     }
2980*53ee8cc1Swenshuai.xi 
2981*53ee8cc1Swenshuai.xi     return u32GOP;
2982*53ee8cc1Swenshuai.xi }
2983*53ee8cc1Swenshuai.xi 
2984*53ee8cc1Swenshuai.xi /******************************************************************************/
2985*53ee8cc1Swenshuai.xi /// Switch current active GOP
2986*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN : Number of GOP
2987*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
2988*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SwitchGOP(MS_U8 u8GOP)2989*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SwitchGOP(MS_U8 u8GOP)
2990*53ee8cc1Swenshuai.xi {
2991*53ee8cc1Swenshuai.xi     GOP_SELECTION_PROPERTY_PARAM ioctl_info;
2992*53ee8cc1Swenshuai.xi     GOP_CBFmtInfo* pCBFmtInfo=NULL;
2993*53ee8cc1Swenshuai.xi 
2994*53ee8cc1Swenshuai.xi     GOP_ENTRY();
2995*53ee8cc1Swenshuai.xi     pCBFmtInfo = (PGOP_CBFmtInfo)malloc(sizeof(GOP_CBFmtInfo));
2996*53ee8cc1Swenshuai.xi     ioctl_info.sel_type = EN_GOP_SEL_GOP;
2997*53ee8cc1Swenshuai.xi     ioctl_info.id = u8GOP;
2998*53ee8cc1Swenshuai.xi     ioctl_info.pinfo = (MS_U32*)pCBFmtInfo;
2999*53ee8cc1Swenshuai.xi 
3000*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SELECTION,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3001*53ee8cc1Swenshuai.xi     {
3002*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3003*53ee8cc1Swenshuai.xi         free(pCBFmtInfo);
3004*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3005*53ee8cc1Swenshuai.xi     }
3006*53ee8cc1Swenshuai.xi 
3007*53ee8cc1Swenshuai.xi     free(pCBFmtInfo);
3008*53ee8cc1Swenshuai.xi 
3009*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3010*53ee8cc1Swenshuai.xi }
3011*53ee8cc1Swenshuai.xi 
3012*53ee8cc1Swenshuai.xi /******************************************************************************/
3013*53ee8cc1Swenshuai.xi /// Configure the destination of a specific GOP
3014*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN : Number of GOP
3015*53ee8cc1Swenshuai.xi /// @param dsttype \b IN : GOP destination
3016*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3017*53ee8cc1Swenshuai.xi /// @return GOP_API_ENUM_NOT_SUPPORTED - GOP destination not support
3018*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetGOPDst(MS_U8 u8GOP,EN_GOP_DST_TYPE dsttype)3019*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetGOPDst(MS_U8 u8GOP, EN_GOP_DST_TYPE dsttype)
3020*53ee8cc1Swenshuai.xi {
3021*53ee8cc1Swenshuai.xi 
3022*53ee8cc1Swenshuai.xi     GOP_SETDST_PARAM ioctl_info;
3023*53ee8cc1Swenshuai.xi 
3024*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3025*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SETDST_PARAM));
3026*53ee8cc1Swenshuai.xi 
3027*53ee8cc1Swenshuai.xi     ioctl_info.en_dst  = dsttype;
3028*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
3029*53ee8cc1Swenshuai.xi 
3030*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_DST,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3031*53ee8cc1Swenshuai.xi     {
3032*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3033*53ee8cc1Swenshuai.xi         GOP_RETURN (GOP_API_FAIL);
3034*53ee8cc1Swenshuai.xi     }
3035*53ee8cc1Swenshuai.xi 
3036*53ee8cc1Swenshuai.xi     GOP_RETURN( GOP_API_SUCCESS);
3037*53ee8cc1Swenshuai.xi }
3038*53ee8cc1Swenshuai.xi 
3039*53ee8cc1Swenshuai.xi 
3040*53ee8cc1Swenshuai.xi /*****************************************************************************/
3041*53ee8cc1Swenshuai.xi /// Get the free GWIN id
3042*53ee8cc1Swenshuai.xi /// @return the GWIN id
3043*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetFreeWinID(void)3044*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetFreeWinID(void)
3045*53ee8cc1Swenshuai.xi {
3046*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
3047*53ee8cc1Swenshuai.xi     MS_U8 u8FreeId = (MS_U8)INVALID_POOL_NEXT_FBID;
3048*53ee8cc1Swenshuai.xi 
3049*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3050*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_FREE_ID;
3051*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = 0x0;
3052*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&u8FreeId;
3053*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
3054*53ee8cc1Swenshuai.xi 
3055*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3056*53ee8cc1Swenshuai.xi     {
3057*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3058*53ee8cc1Swenshuai.xi         GOP_RETURN(u8FreeId);
3059*53ee8cc1Swenshuai.xi     }
3060*53ee8cc1Swenshuai.xi 
3061*53ee8cc1Swenshuai.xi     GOP_RETURN(u8FreeId);
3062*53ee8cc1Swenshuai.xi 
3063*53ee8cc1Swenshuai.xi }
3064*53ee8cc1Swenshuai.xi 
3065*53ee8cc1Swenshuai.xi /******************************************************************************/
3066*53ee8cc1Swenshuai.xi /// Check if a frame buffer is allocated
3067*53ee8cc1Swenshuai.xi /// @param fbId \b IN frame buffer id
3068*53ee8cc1Swenshuai.xi /// @return
3069*53ee8cc1Swenshuai.xi ///   - # TRUE fbId is allocated
3070*53ee8cc1Swenshuai.xi ///   - # FALSE fbId is invalid or not allocated
3071*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_IsFBExist(MS_U8 fbId)3072*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_IsFBExist(MS_U8 fbId)
3073*53ee8cc1Swenshuai.xi {
3074*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Is32FBExist((MS_U32)fbId);
3075*53ee8cc1Swenshuai.xi }
3076*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Is32FBExist(MS_U32 u32fbId)3077*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Is32FBExist(MS_U32 u32fbId)
3078*53ee8cc1Swenshuai.xi {
3079*53ee8cc1Swenshuai.xi     GOP_FB_PROPERTY_PARAM ioctl_info;
3080*53ee8cc1Swenshuai.xi     MS_U8 u8Exist = FALSE;
3081*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3082*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_FB_EXIST;
3083*53ee8cc1Swenshuai.xi     ioctl_info.FBId = u32fbId;
3084*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&u8Exist;
3085*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
3086*53ee8cc1Swenshuai.xi 
3087*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3088*53ee8cc1Swenshuai.xi     {
3089*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3090*53ee8cc1Swenshuai.xi         GOP_RETURN(u8Exist);
3091*53ee8cc1Swenshuai.xi     }
3092*53ee8cc1Swenshuai.xi 
3093*53ee8cc1Swenshuai.xi     GOP_RETURN(u8Exist);
3094*53ee8cc1Swenshuai.xi }
3095*53ee8cc1Swenshuai.xi 
3096*53ee8cc1Swenshuai.xi 
3097*53ee8cc1Swenshuai.xi /******************************************************************************/
3098*53ee8cc1Swenshuai.xi /// Get free frame buffer id
3099*53ee8cc1Swenshuai.xi /// @return frame buffer id. If return oxFF, it represents no free frame buffer id for use.
3100*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetFreeFBID(void)3101*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetFreeFBID(void)
3102*53ee8cc1Swenshuai.xi {
3103*53ee8cc1Swenshuai.xi     MS_U32 u32FreeFBId;
3104*53ee8cc1Swenshuai.xi 
3105*53ee8cc1Swenshuai.xi     u32FreeFBId = MApi_GOP_GWIN_GetFree32FBID();
3106*53ee8cc1Swenshuai.xi     if( u32FreeFBId > 256) //Out of MS_U8
3107*53ee8cc1Swenshuai.xi     {
3108*53ee8cc1Swenshuai.xi         GOP_WARN( "[Warning] %s %d( u32FreeFBId:%td....)out of MS_U8 bound, please to use MApi_GOP_GWIN_GetFree32FBID()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32FreeFBId );
3109*53ee8cc1Swenshuai.xi     }
3110*53ee8cc1Swenshuai.xi 
3111*53ee8cc1Swenshuai.xi     return u32FreeFBId;
3112*53ee8cc1Swenshuai.xi }
3113*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_GetFree32FBID(void)3114*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_GetFree32FBID(void)
3115*53ee8cc1Swenshuai.xi {
3116*53ee8cc1Swenshuai.xi     GOP_FB_PROPERTY_PARAM ioctl_info;
3117*53ee8cc1Swenshuai.xi     MS_U32 u32FBId = 0xFFFFFFFF;
3118*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3119*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_FB_OBTAIN;
3120*53ee8cc1Swenshuai.xi     ioctl_info.FBId = 0x0;
3121*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)&u32FBId;
3122*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
3123*53ee8cc1Swenshuai.xi 
3124*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3125*53ee8cc1Swenshuai.xi     {
3126*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3127*53ee8cc1Swenshuai.xi         GOP_RETURN(u32FBId);
3128*53ee8cc1Swenshuai.xi     }
3129*53ee8cc1Swenshuai.xi     GOP_RETURN(u32FBId);
3130*53ee8cc1Swenshuai.xi }
3131*53ee8cc1Swenshuai.xi 
3132*53ee8cc1Swenshuai.xi 
3133*53ee8cc1Swenshuai.xi /******************************************************************************/
3134*53ee8cc1Swenshuai.xi /// Create frame buffer - take alignment factor into consideration
3135*53ee8cc1Swenshuai.xi /// @param FBId  \b IN frame buffer id
3136*53ee8cc1Swenshuai.xi /// @param x  \b IN frame buffer starting x
3137*53ee8cc1Swenshuai.xi /// @param y  \b IN frame buffer starting y
3138*53ee8cc1Swenshuai.xi /// @param width \b IN width
3139*53ee8cc1Swenshuai.xi /// @param height \b IN height
3140*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN frame buffer format
3141*53ee8cc1Swenshuai.xi /// @return TRUE: create OK,  FALSE: create fail
3142*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_CreateFB2(MS_U8 FBId,MS_U16 x,MS_U16 y,MS_U16 width,MS_U16 height,MS_U16 fbFmt)3143*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateFB2(MS_U8 FBId, MS_U16 x, MS_U16 y, MS_U16 width, MS_U16 height, MS_U16 fbFmt)
3144*53ee8cc1Swenshuai.xi {
3145*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Create32FB2((MS_U32)FBId, x, y, width, height, fbFmt);
3146*53ee8cc1Swenshuai.xi }
3147*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Create32FB2(MS_U32 u32FBId,MS_U16 x,MS_U16 y,MS_U16 width,MS_U16 height,MS_U16 fbFmt)3148*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Create32FB2(MS_U32 u32FBId, MS_U16 x, MS_U16 y, MS_U16 width, MS_U16 height, MS_U16 fbFmt)
3149*53ee8cc1Swenshuai.xi {
3150*53ee8cc1Swenshuai.xi     GOP_CREATE_BUFFER_PARAM ioctl_info;
3151*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
3152*53ee8cc1Swenshuai.xi 
3153*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3154*53ee8cc1Swenshuai.xi 
3155*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_CREATE_BUFFER_PARAM));
3156*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
3157*53ee8cc1Swenshuai.xi 
3158*53ee8cc1Swenshuai.xi     ioctl_info.fb_type  = GOP_CREATE_BUFFER;
3159*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
3160*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
3161*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32FBId;
3162*53ee8cc1Swenshuai.xi 
3163*53ee8cc1Swenshuai.xi     BuffInfo.addr = 0x0;
3164*53ee8cc1Swenshuai.xi     BuffInfo.fbFmt = fbFmt;
3165*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = x;
3166*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = y;
3167*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = width;
3168*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.h = height;
3169*53ee8cc1Swenshuai.xi 
3170*53ee8cc1Swenshuai.xi     BuffInfo.width = width;
3171*53ee8cc1Swenshuai.xi     BuffInfo.height = height;
3172*53ee8cc1Swenshuai.xi 
3173*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_CREATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3174*53ee8cc1Swenshuai.xi     {
3175*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3176*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
3177*53ee8cc1Swenshuai.xi     }
3178*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3179*53ee8cc1Swenshuai.xi }
3180*53ee8cc1Swenshuai.xi 
3181*53ee8cc1Swenshuai.xi /******************************************************************************/
3182*53ee8cc1Swenshuai.xi /// Destroy the frame buffer and return the memory to mmgr
3183*53ee8cc1Swenshuai.xi /// @param fbId  \b IN frame buffer id
3184*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3185*53ee8cc1Swenshuai.xi /// @return GOP_API_CRT_GWIN_NOAVAIL - destory frame buffer fail
3186*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_DestroyFB(MS_U8 fbId)3187*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_DestroyFB(MS_U8 fbId)
3188*53ee8cc1Swenshuai.xi {
3189*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Destroy32FB((MS_U32)fbId);
3190*53ee8cc1Swenshuai.xi }
3191*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Destroy32FB(MS_U32 u32fbId)3192*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Destroy32FB(MS_U32 u32fbId)
3193*53ee8cc1Swenshuai.xi {
3194*53ee8cc1Swenshuai.xi     GOP_DELETE_BUFFER_PARAM ioctl_info;
3195*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3196*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_DELETE_BUFFER_PARAM));
3197*53ee8cc1Swenshuai.xi 
3198*53ee8cc1Swenshuai.xi     ioctl_info.pBufId = (MS_U32*)&u32fbId;
3199*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
3200*53ee8cc1Swenshuai.xi 
3201*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_DESTROY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3202*53ee8cc1Swenshuai.xi     {
3203*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3204*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
3205*53ee8cc1Swenshuai.xi     }
3206*53ee8cc1Swenshuai.xi 
3207*53ee8cc1Swenshuai.xi     GOP_RETURN(GWIN_OK);
3208*53ee8cc1Swenshuai.xi }
3209*53ee8cc1Swenshuai.xi 
3210*53ee8cc1Swenshuai.xi 
3211*53ee8cc1Swenshuai.xi /******************************************************************************/
3212*53ee8cc1Swenshuai.xi /// Destroy a frame buffer
3213*53ee8cc1Swenshuai.xi /// @param fbId \b IN frame buffer id
3214*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3215*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_DeleteFB(MS_U8 fbId)3216*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_DeleteFB(MS_U8 fbId)
3217*53ee8cc1Swenshuai.xi {
3218*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Delete32FB((MS_U32)fbId);
3219*53ee8cc1Swenshuai.xi }
3220*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Delete32FB(MS_U32 u32fbId)3221*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Delete32FB(MS_U32 u32fbId)
3222*53ee8cc1Swenshuai.xi {
3223*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3224*53ee8cc1Swenshuai.xi     GOP_INFO("\33[0;36m   %s:%d   FBId = %td \33[m \n",__FUNCTION__,__LINE__, (ptrdiff_t)u32fbId);
3225*53ee8cc1Swenshuai.xi     if ((MApi_GOP_GWIN_Destroy32FB(u32fbId)) != GWIN_OK)
3226*53ee8cc1Swenshuai.xi     {
3227*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3228*53ee8cc1Swenshuai.xi     }
3229*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3230*53ee8cc1Swenshuai.xi 
3231*53ee8cc1Swenshuai.xi }
3232*53ee8cc1Swenshuai.xi 
3233*53ee8cc1Swenshuai.xi /********************************************************************************/
3234*53ee8cc1Swenshuai.xi /// Set GWIN alpha blending
3235*53ee8cc1Swenshuai.xi /// @param u8win \b IN GWIN id
3236*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
3237*53ee8cc1Swenshuai.xi ///   - # TRUE enable pixel alpha
3238*53ee8cc1Swenshuai.xi ///   - # FALSE disable pixel alpha
3239*53ee8cc1Swenshuai.xi /// @param u8coef \b IN alpha blending coefficient (0-7)
3240*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3241*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetBlending(MS_U8 u8win,MS_BOOL bEnable,MS_U8 u8coef)3242*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetBlending(MS_U8 u8win, MS_BOOL bEnable, MS_U8 u8coef)
3243*53ee8cc1Swenshuai.xi {
3244*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
3245*53ee8cc1Swenshuai.xi     GOP_GWIN_BLENDING blendInfo;
3246*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3247*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_BLENDING;
3248*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8win;
3249*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)&blendInfo;
3250*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_GWIN_BLENDING);
3251*53ee8cc1Swenshuai.xi 
3252*53ee8cc1Swenshuai.xi     blendInfo.Coef = u8coef;
3253*53ee8cc1Swenshuai.xi     blendInfo.bEn = bEnable;
3254*53ee8cc1Swenshuai.xi 
3255*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3256*53ee8cc1Swenshuai.xi     {
3257*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3258*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3259*53ee8cc1Swenshuai.xi     }
3260*53ee8cc1Swenshuai.xi 
3261*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3262*53ee8cc1Swenshuai.xi 
3263*53ee8cc1Swenshuai.xi }
3264*53ee8cc1Swenshuai.xi 
3265*53ee8cc1Swenshuai.xi 
3266*53ee8cc1Swenshuai.xi /********************************************************************************/
3267*53ee8cc1Swenshuai.xi /// Set transparent color for the GWIN
3268*53ee8cc1Swenshuai.xi /// @param fmt \b IN:
3269*53ee8cc1Swenshuai.xi ///  # GOPTRANSCLR_FMT0: RGB mode
3270*53ee8cc1Swenshuai.xi ///  # GOPTRANSCLR_FMT1: index mode
3271*53ee8cc1Swenshuai.xi /// @param clr \b IN Transparent color for in specific color format. Note that this is only for
3272*53ee8cc1Swenshuai.xi /// GOPTRANSCLR_FMT0(RGB mode) use. If you use GOPTRANSCLR_FMT1 (index mode), do not care this
3273*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3274*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetTransClr_EX(MS_U8 u8GOP,EN_GOP_TRANSCLR_FMT fmt,MS_U16 clr)3275*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetTransClr_EX(MS_U8 u8GOP,EN_GOP_TRANSCLR_FMT fmt, MS_U16 clr)
3276*53ee8cc1Swenshuai.xi {
3277*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
3278*53ee8cc1Swenshuai.xi     GOP_TRANSCOLOR trans_set;
3279*53ee8cc1Swenshuai.xi 
3280*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3281*53ee8cc1Swenshuai.xi 
3282*53ee8cc1Swenshuai.xi     trans_set.bEn = TRUE;
3283*53ee8cc1Swenshuai.xi     trans_set.color = clr;
3284*53ee8cc1Swenshuai.xi     trans_set.fmt = fmt;
3285*53ee8cc1Swenshuai.xi     trans_set.transclr_property = EN_TRANSCLR_SET_COLOR;
3286*53ee8cc1Swenshuai.xi 
3287*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_TRANSCOLOR;
3288*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
3289*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&trans_set;
3290*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_TRANSCOLOR);
3291*53ee8cc1Swenshuai.xi 
3292*53ee8cc1Swenshuai.xi     u32TransColor = clr;
3293*53ee8cc1Swenshuai.xi 
3294*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3295*53ee8cc1Swenshuai.xi     {
3296*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3297*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3298*53ee8cc1Swenshuai.xi     }
3299*53ee8cc1Swenshuai.xi 
3300*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3301*53ee8cc1Swenshuai.xi 
3302*53ee8cc1Swenshuai.xi }
3303*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetTransClr(EN_GOP_TRANSCLR_FMT fmt,MS_U16 clr)3304*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetTransClr(EN_GOP_TRANSCLR_FMT fmt, MS_U16 clr)
3305*53ee8cc1Swenshuai.xi {
3306*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
3307*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
3308*53ee8cc1Swenshuai.xi 
3309*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
3310*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetTransClr_EX(u8GOP,fmt,clr);
3311*53ee8cc1Swenshuai.xi     return ret;
3312*53ee8cc1Swenshuai.xi 
3313*53ee8cc1Swenshuai.xi }
3314*53ee8cc1Swenshuai.xi /********************************************************************************/
3315*53ee8cc1Swenshuai.xi /// Set transparent color for the GWIN
3316*53ee8cc1Swenshuai.xi /// @param fmt \b IN GOP number
3317*53ee8cc1Swenshuai.xi /// @param fmt \b IN:
3318*53ee8cc1Swenshuai.xi ///  # GOPTRANSCLR_FMT0: RGB mode
3319*53ee8cc1Swenshuai.xi ///  # GOPTRANSCLR_FMT1: index mode
3320*53ee8cc1Swenshuai.xi ///  # GOPTRANSCLR_FMT2: ARGB8888 mode
3321*53ee8cc1Swenshuai.xi ///  # GOPTRANSCLR_FMT3: YUV mode
3322*53ee8cc1Swenshuai.xi /// @param ST_Transparent_Color \b IN This structure has an element color which is used for trans color.
3323*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3324*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetTransparentClr(MS_U8 u8GOP,EN_GOP_TRANSCLR_FMT fmt,ST_Transparent_Color * st_Transcolor)3325*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetTransparentClr(MS_U8 u8GOP, EN_GOP_TRANSCLR_FMT fmt, ST_Transparent_Color *st_Transcolor)
3326*53ee8cc1Swenshuai.xi {
3327*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
3328*53ee8cc1Swenshuai.xi     GOP_TRANSCOLOR trans_set;
3329*53ee8cc1Swenshuai.xi 
3330*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3331*53ee8cc1Swenshuai.xi 
3332*53ee8cc1Swenshuai.xi     trans_set.bEn = TRUE;
3333*53ee8cc1Swenshuai.xi     trans_set.color = st_Transcolor->color;
3334*53ee8cc1Swenshuai.xi     trans_set.fmt = fmt;
3335*53ee8cc1Swenshuai.xi     trans_set.transclr_property = EN_TRANSCLR_SET_COLOR;
3336*53ee8cc1Swenshuai.xi 
3337*53ee8cc1Swenshuai.xi     u32TransColor = st_Transcolor->color;
3338*53ee8cc1Swenshuai.xi 
3339*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_TRANSCOLOR;
3340*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
3341*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&trans_set;
3342*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_TRANSCOLOR);
3343*53ee8cc1Swenshuai.xi 
3344*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3345*53ee8cc1Swenshuai.xi     {
3346*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3347*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3348*53ee8cc1Swenshuai.xi     }
3349*53ee8cc1Swenshuai.xi 
3350*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3351*53ee8cc1Swenshuai.xi }
3352*53ee8cc1Swenshuai.xi /********************************************************************************/
3353*53ee8cc1Swenshuai.xi /// Set transparent color (ARGB domain) and enable it for the GWIN
3354*53ee8cc1Swenshuai.xi /// @param clr \b IN: transparent color
3355*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3356*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetFMT0TransClr_EX(MS_U8 u8GOP,MS_U16 clr)3357*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetFMT0TransClr_EX(MS_U8 u8GOP,MS_U16 clr)
3358*53ee8cc1Swenshuai.xi {
3359*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
3360*53ee8cc1Swenshuai.xi     GOP_TRANSCOLOR trans_set;
3361*53ee8cc1Swenshuai.xi 
3362*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3363*53ee8cc1Swenshuai.xi 
3364*53ee8cc1Swenshuai.xi     trans_set.bEn = TRUE;
3365*53ee8cc1Swenshuai.xi     trans_set.color = clr;
3366*53ee8cc1Swenshuai.xi     trans_set.fmt = GOPTRANSCLR_FMT0;
3367*53ee8cc1Swenshuai.xi     trans_set.transclr_property = EN_TRANSCLR_SET_COLOR;
3368*53ee8cc1Swenshuai.xi 
3369*53ee8cc1Swenshuai.xi     u32TransColor = clr;
3370*53ee8cc1Swenshuai.xi 
3371*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_TRANSCOLOR;
3372*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
3373*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&trans_set;
3374*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_TRANSCOLOR);
3375*53ee8cc1Swenshuai.xi 
3376*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3377*53ee8cc1Swenshuai.xi     {
3378*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3379*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3380*53ee8cc1Swenshuai.xi     }
3381*53ee8cc1Swenshuai.xi 
3382*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3383*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_SetFMT0TransClr(MS_U16 clr)3384*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetFMT0TransClr(MS_U16 clr)
3385*53ee8cc1Swenshuai.xi {
3386*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
3387*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
3388*53ee8cc1Swenshuai.xi 
3389*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
3390*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetFMT0TransClr_EX(u8GOP,clr);
3391*53ee8cc1Swenshuai.xi     return ret;
3392*53ee8cc1Swenshuai.xi }
3393*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
3394*53ee8cc1Swenshuai.xi /// Get maximum support frame buffer number
3395*53ee8cc1Swenshuai.xi /// @return maximum support frame buffer number
3396*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_GWIN_GetMAXFBID(void)3397*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetMAXFBID(void)
3398*53ee8cc1Swenshuai.xi {
3399*53ee8cc1Swenshuai.xi     MS_U32 u32MaxFBID;
3400*53ee8cc1Swenshuai.xi     u32MaxFBID = MApi_GOP_GWIN_GetMAX32FBID();
3401*53ee8cc1Swenshuai.xi     if( u32MaxFBID> 256) //Out of MS_U8
3402*53ee8cc1Swenshuai.xi     {
3403*53ee8cc1Swenshuai.xi         GOP_WARN( "[Warning] %s %d( u32MaxFBID:%td....)out of MS_U8 bound, please to use MApi_GOP_GWIN_GetMAX32FBID()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32MaxFBID );
3404*53ee8cc1Swenshuai.xi     }
3405*53ee8cc1Swenshuai.xi     return u32MaxFBID;
3406*53ee8cc1Swenshuai.xi }
3407*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_GetMAX32FBID(void)3408*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_GetMAX32FBID(void)
3409*53ee8cc1Swenshuai.xi {
3410*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_GetMax32FBNum();
3411*53ee8cc1Swenshuai.xi }
3412*53ee8cc1Swenshuai.xi 
3413*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
3414*53ee8cc1Swenshuai.xi /// Get maximum support gop number
3415*53ee8cc1Swenshuai.xi /// @return maximum support gop number
3416*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_GWIN_GetMaxGOPNum(void)3417*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetMaxGOPNum(void)
3418*53ee8cc1Swenshuai.xi {
3419*53ee8cc1Swenshuai.xi     MS_U8 u8MaxGop;
3420*53ee8cc1Swenshuai.xi     GOP_GET_STATUS_PARAM ioctl_info;
3421*53ee8cc1Swenshuai.xi 
3422*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
3423*53ee8cc1Swenshuai.xi     ioctl_info.type = 0;
3424*53ee8cc1Swenshuai.xi     ioctl_info.en_status = E_GOP_STATUS_GOP_MAXNUM;
3425*53ee8cc1Swenshuai.xi     ioctl_info.pStatus = (void*) &u8MaxGop;
3426*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
3427*53ee8cc1Swenshuai.xi 
3428*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_STATUS,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3429*53ee8cc1Swenshuai.xi     {
3430*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3431*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
3432*53ee8cc1Swenshuai.xi     }
3433*53ee8cc1Swenshuai.xi 
3434*53ee8cc1Swenshuai.xi     return u8MaxGop;
3435*53ee8cc1Swenshuai.xi 
3436*53ee8cc1Swenshuai.xi }
3437*53ee8cc1Swenshuai.xi 
3438*53ee8cc1Swenshuai.xi 
3439*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
3440*53ee8cc1Swenshuai.xi /// Get maximum gwin number by individual gop
3441*53ee8cc1Swenshuai.xi /// @param u8GopNum \b IN: Number of GOP
3442*53ee8cc1Swenshuai.xi /// @return maximum gwin number by individual gop
3443*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_GWIN_GetGwinNum(MS_U8 u8GopNum)3444*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetGwinNum(MS_U8 u8GopNum)
3445*53ee8cc1Swenshuai.xi {
3446*53ee8cc1Swenshuai.xi     GOP_GET_STATUS_PARAM ioctl_info;
3447*53ee8cc1Swenshuai.xi     GOP_GWIN_NUM  gwin_num;
3448*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
3449*53ee8cc1Swenshuai.xi     ioctl_info.type = 0;
3450*53ee8cc1Swenshuai.xi     ioctl_info.en_status = E_GOP_STATUS_GWIN_MAXNUM;
3451*53ee8cc1Swenshuai.xi     ioctl_info.pStatus = (MS_U32*)&gwin_num;
3452*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_GWIN_NUM);
3453*53ee8cc1Swenshuai.xi 
3454*53ee8cc1Swenshuai.xi     gwin_num.gop_idx = u8GopNum;
3455*53ee8cc1Swenshuai.xi 
3456*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_STATUS,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3457*53ee8cc1Swenshuai.xi     {
3458*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3459*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
3460*53ee8cc1Swenshuai.xi     }
3461*53ee8cc1Swenshuai.xi 
3462*53ee8cc1Swenshuai.xi     return gwin_num.gwin_num;
3463*53ee8cc1Swenshuai.xi }
3464*53ee8cc1Swenshuai.xi 
3465*53ee8cc1Swenshuai.xi 
3466*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
3467*53ee8cc1Swenshuai.xi /// Get maximum support gwin number by all gop
3468*53ee8cc1Swenshuai.xi /// @return maximum support gwin number by all gop
3469*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_GWIN_GetTotalGwinNum(void)3470*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetTotalGwinNum(void)
3471*53ee8cc1Swenshuai.xi {
3472*53ee8cc1Swenshuai.xi     MS_U8 u8TotalWin;
3473*53ee8cc1Swenshuai.xi     GOP_GET_STATUS_PARAM ioctl_info;
3474*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
3475*53ee8cc1Swenshuai.xi     ioctl_info.type = 0;
3476*53ee8cc1Swenshuai.xi     ioctl_info.en_status = E_GOP_STATUS_GWIN_TOTALNUM;
3477*53ee8cc1Swenshuai.xi     ioctl_info.pStatus = (void*)&u8TotalWin;
3478*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
3479*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_STATUS,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3480*53ee8cc1Swenshuai.xi     {
3481*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3482*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
3483*53ee8cc1Swenshuai.xi     }
3484*53ee8cc1Swenshuai.xi 
3485*53ee8cc1Swenshuai.xi     return u8TotalWin;
3486*53ee8cc1Swenshuai.xi }
3487*53ee8cc1Swenshuai.xi 
3488*53ee8cc1Swenshuai.xi 
3489*53ee8cc1Swenshuai.xi /*****************************************************************************/
3490*53ee8cc1Swenshuai.xi /// Get max GWIN id
3491*53ee8cc1Swenshuai.xi /// @return the maximum number of GWIN id
3492*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetMAXWinID(void)3493*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetMAXWinID(void)
3494*53ee8cc1Swenshuai.xi {
3495*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_GetTotalGwinNum();
3496*53ee8cc1Swenshuai.xi }
3497*53ee8cc1Swenshuai.xi 
3498*53ee8cc1Swenshuai.xi /******************************************************************************/
3499*53ee8cc1Swenshuai.xi /// Enable/Disable multi alpha for one gop
3500*53ee8cc1Swenshuai.xi /// @param u32GopIdx \b IN: gop ID
3501*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FALSE
3502*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3503*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_EnableMultiAlpha(MS_U32 u32GopIdx,MS_BOOL bEnable)3504*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableMultiAlpha(MS_U32 u32GopIdx, MS_BOOL bEnable)
3505*53ee8cc1Swenshuai.xi {
3506*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
3507*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3508*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_MULTI_ALPHA_ENABLE;
3509*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u32GopIdx;
3510*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bEnable;
3511*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
3512*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3513*53ee8cc1Swenshuai.xi     {
3514*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3515*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3516*53ee8cc1Swenshuai.xi     }
3517*53ee8cc1Swenshuai.xi 
3518*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3519*53ee8cc1Swenshuai.xi 
3520*53ee8cc1Swenshuai.xi }
3521*53ee8cc1Swenshuai.xi 
3522*53ee8cc1Swenshuai.xi /******************************************************************************/
3523*53ee8cc1Swenshuai.xi /// get multi alpha status for one gop
3524*53ee8cc1Swenshuai.xi /// @param u32GopIdx \b IN: gop ID
3525*53ee8cc1Swenshuai.xi /// @return multi alpha status
3526*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_IsMultiAlphaEnable(MS_U32 u32GopIdx)3527*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_GWIN_IsMultiAlphaEnable(MS_U32 u32GopIdx)
3528*53ee8cc1Swenshuai.xi {
3529*53ee8cc1Swenshuai.xi     MS_BOOL bEnable = FALSE;
3530*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
3531*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3532*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_MULTI_ALPHA_ENABLE;
3533*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u32GopIdx;
3534*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bEnable;
3535*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
3536*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3537*53ee8cc1Swenshuai.xi     {
3538*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3539*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3540*53ee8cc1Swenshuai.xi     }
3541*53ee8cc1Swenshuai.xi 
3542*53ee8cc1Swenshuai.xi     GOP_RETURN(bEnable);
3543*53ee8cc1Swenshuai.xi }
3544*53ee8cc1Swenshuai.xi 
3545*53ee8cc1Swenshuai.xi /******************************************************************************/
3546*53ee8cc1Swenshuai.xi /// Set alpha value of GOP0 4 Gwins
3547*53ee8cc1Swenshuai.xi /// @param Gwin01AlphaValue \b IN: Alpha coefficient and Enable status of Gwin 0/1
3548*53ee8cc1Swenshuai.xi /// @param Gwin23AlphaValue \b IN: Alpha coefficient and Enable status of Gwin 2/3
3549*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3550*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetAlphaValue(MS_U16 * Gwin01AlphaValue,MS_U16 * Gwin23AlphaValue)3551*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetAlphaValue(MS_U16 * Gwin01AlphaValue, MS_U16 * Gwin23AlphaValue)
3552*53ee8cc1Swenshuai.xi {
3553*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3554*53ee8cc1Swenshuai.xi 
3555*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not Support \n",__FUNCTION__);
3556*53ee8cc1Swenshuai.xi 
3557*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3558*53ee8cc1Swenshuai.xi 
3559*53ee8cc1Swenshuai.xi }
3560*53ee8cc1Swenshuai.xi 
3561*53ee8cc1Swenshuai.xi 
3562*53ee8cc1Swenshuai.xi /********************************************************************************/
3563*53ee8cc1Swenshuai.xi /// Get GOP0 4 gwin alpha blending setting
3564*53ee8cc1Swenshuai.xi /// @param Gwin01AlphaValue \b OUT: gwin0 and gwin1 alpha setting
3565*53ee8cc1Swenshuai.xi /// @param Gwin23AlphaValue \b OUT: gwin2 and gwin3 alpha setting
3566*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3567*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_GetAlphaValue(MS_U16 * Gwin01AlphaValue,MS_U16 * Gwin23AlphaValue)3568*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetAlphaValue(MS_U16 * Gwin01AlphaValue, MS_U16 * Gwin23AlphaValue)
3569*53ee8cc1Swenshuai.xi {
3570*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3571*53ee8cc1Swenshuai.xi 
3572*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not Support \n",__FUNCTION__);
3573*53ee8cc1Swenshuai.xi 
3574*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3575*53ee8cc1Swenshuai.xi 
3576*53ee8cc1Swenshuai.xi }
3577*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetPreAlphaMode(MS_U8 u8GOP,MS_BOOL bEnble)3578*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetPreAlphaMode(MS_U8 u8GOP, MS_BOOL bEnble)
3579*53ee8cc1Swenshuai.xi {
3580*53ee8cc1Swenshuai.xi     MS_BOOL bPreAlpha;
3581*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
3582*53ee8cc1Swenshuai.xi 
3583*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3584*53ee8cc1Swenshuai.xi 
3585*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
3586*53ee8cc1Swenshuai.xi     bPreAlpha = bEnble;
3587*53ee8cc1Swenshuai.xi 
3588*53ee8cc1Swenshuai.xi 
3589*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_PREALPHAMODE;
3590*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
3591*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bPreAlpha;
3592*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
3593*53ee8cc1Swenshuai.xi 
3594*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3595*53ee8cc1Swenshuai.xi     {
3596*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3597*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
3598*53ee8cc1Swenshuai.xi     }
3599*53ee8cc1Swenshuai.xi 
3600*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3601*53ee8cc1Swenshuai.xi 
3602*53ee8cc1Swenshuai.xi }
3603*53ee8cc1Swenshuai.xi 
3604*53ee8cc1Swenshuai.xi 
3605*53ee8cc1Swenshuai.xi /******************************************************************************/
3606*53ee8cc1Swenshuai.xi /// Set gop driver internal palette table to GOP0
3607*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3608*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetPalette(void)3609*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetPalette(void)
3610*53ee8cc1Swenshuai.xi {
3611*53ee8cc1Swenshuai.xi     MS_U32 i;
3612*53ee8cc1Swenshuai.xi     GOP_PALETTE_SET_PARAM  ioctl_info;
3613*53ee8cc1Swenshuai.xi     GOP_PALETTE_ENTRY  palEntry;
3614*53ee8cc1Swenshuai.xi 
3615*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3616*53ee8cc1Swenshuai.xi     for (i=0;i<(256/PALETTE_ENTRY_NUM);i++)
3617*53ee8cc1Swenshuai.xi     {
3618*53ee8cc1Swenshuai.xi         memset(&ioctl_info, 0x0, sizeof(GOP_PALETTE_SET_PARAM));
3619*53ee8cc1Swenshuai.xi         memset(&palEntry, 0x0, sizeof(GOP_PALETTE_ENTRY));
3620*53ee8cc1Swenshuai.xi 
3621*53ee8cc1Swenshuai.xi         palEntry.gop_idx = 0x0;
3622*53ee8cc1Swenshuai.xi         palEntry.pClut = (void*)&PaletteEntry;
3623*53ee8cc1Swenshuai.xi         palEntry.start = i;
3624*53ee8cc1Swenshuai.xi         palEntry.end   = ((i+1)*PALETTE_ENTRY_NUM - 1);
3625*53ee8cc1Swenshuai.xi         palEntry.palType = E_GOP_PAL_ARGB8888;
3626*53ee8cc1Swenshuai.xi         palEntry.palSrc = E_GOP_4G_PALETTE;
3627*53ee8cc1Swenshuai.xi 
3628*53ee8cc1Swenshuai.xi         ioctl_info.pClut = (void*)&palEntry;
3629*53ee8cc1Swenshuai.xi         ioctl_info.u32Size = sizeof(GOP_PALETTE_ENTRY);
3630*53ee8cc1Swenshuai.xi 
3631*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_PALETTE_SET_ENTRY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3632*53ee8cc1Swenshuai.xi         {
3633*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3634*53ee8cc1Swenshuai.xi             GOP_RETURN( GOP_API_FAIL);
3635*53ee8cc1Swenshuai.xi         }
3636*53ee8cc1Swenshuai.xi     }
3637*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3638*53ee8cc1Swenshuai.xi }
3639*53ee8cc1Swenshuai.xi 
3640*53ee8cc1Swenshuai.xi 
3641*53ee8cc1Swenshuai.xi /******************************************************************************/
3642*53ee8cc1Swenshuai.xi /// Get GWin position info
3643*53ee8cc1Swenshuai.xi /// @param winId  \b IN: gwin id
3644*53ee8cc1Swenshuai.xi /// @param dispX \b OUT: position-X
3645*53ee8cc1Swenshuai.xi /// @param dispY \b OUT: position-Y
3646*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3647*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
3648*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetWinPosition(MS_U8 winId,MS_U16 * dispX,MS_U16 * dispY)3649*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetWinPosition(MS_U8 winId, MS_U16 * dispX, MS_U16 *dispY)
3650*53ee8cc1Swenshuai.xi {
3651*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3652*53ee8cc1Swenshuai.xi     GOP_GwinInfo info;
3653*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_GetWinInfo(winId,&info);
3654*53ee8cc1Swenshuai.xi     *dispX = info.u16DispHPixelStart;
3655*53ee8cc1Swenshuai.xi     *dispY = info.u16DispVPixelStart;
3656*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3657*53ee8cc1Swenshuai.xi }
3658*53ee8cc1Swenshuai.xi 
3659*53ee8cc1Swenshuai.xi 
3660*53ee8cc1Swenshuai.xi /******************************************************************************/
3661*53ee8cc1Swenshuai.xi /// Get frame buffer address
3662*53ee8cc1Swenshuai.xi /// @param fbID \b IN: frame buffer id
3663*53ee8cc1Swenshuai.xi /// @param pAddr \b OUT: frame buffer address
3664*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3665*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetFBAddr(MS_U8 fbID,MS_PHY * pAddr)3666*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetFBAddr(MS_U8 fbID, MS_PHY *pAddr)
3667*53ee8cc1Swenshuai.xi {
3668*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Get32FBAddr((MS_U32)fbID, pAddr);
3669*53ee8cc1Swenshuai.xi }
3670*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Get32FBAddr(MS_U32 u32fbID,MS_PHY * pAddr)3671*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Get32FBAddr(MS_U32 u32fbID, MS_PHY *pAddr)
3672*53ee8cc1Swenshuai.xi {
3673*53ee8cc1Swenshuai.xi     GOP_GwinFBAttr fbAttr;
3674*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3675*53ee8cc1Swenshuai.xi 
3676*53ee8cc1Swenshuai.xi     if(MApi_GOP_GWIN_Get32FBInfo(u32fbID, &fbAttr) == GOP_API_SUCCESS)
3677*53ee8cc1Swenshuai.xi     {
3678*53ee8cc1Swenshuai.xi         *pAddr = fbAttr.addr;
3679*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_SUCCESS);
3680*53ee8cc1Swenshuai.xi     }
3681*53ee8cc1Swenshuai.xi     else
3682*53ee8cc1Swenshuai.xi     {
3683*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3684*53ee8cc1Swenshuai.xi     }
3685*53ee8cc1Swenshuai.xi 
3686*53ee8cc1Swenshuai.xi }
3687*53ee8cc1Swenshuai.xi 
3688*53ee8cc1Swenshuai.xi /******************************************************************************/
3689*53ee8cc1Swenshuai.xi /// Reset the gwin info. Note that no free any frame buffer in this interface!!
3690*53ee8cc1Swenshuai.xi /// @param gId  \b IN: gwin id
3691*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3692*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
3693*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_ReleaseWin(MS_U8 gId)3694*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_ReleaseWin(MS_U8 gId)
3695*53ee8cc1Swenshuai.xi {
3696*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3697*53ee8cc1Swenshuai.xi 
3698*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Enable(gId, FALSE);
3699*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_DestroyWin(gId);
3700*53ee8cc1Swenshuai.xi 
3701*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3702*53ee8cc1Swenshuai.xi 
3703*53ee8cc1Swenshuai.xi }
3704*53ee8cc1Swenshuai.xi 
3705*53ee8cc1Swenshuai.xi 
3706*53ee8cc1Swenshuai.xi /******************************************************************************/
3707*53ee8cc1Swenshuai.xi /// Get frame bufferid from the gwin id
3708*53ee8cc1Swenshuai.xi /// @param gwinId  \b IN gwin id
3709*53ee8cc1Swenshuai.xi /// @return return frame buffer id. If return 0xFF, it represents this function fail
3710*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetFBfromGWIN(MS_U8 gwinId)3711*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetFBfromGWIN(MS_U8 gwinId)
3712*53ee8cc1Swenshuai.xi {
3713*53ee8cc1Swenshuai.xi     MS_U32 u32CurFBId;
3714*53ee8cc1Swenshuai.xi 
3715*53ee8cc1Swenshuai.xi     u32CurFBId = MApi_GOP_GWIN_Get32FBfromGWIN(gwinId);
3716*53ee8cc1Swenshuai.xi     if( u32CurFBId > 256) //Out of MS_U8
3717*53ee8cc1Swenshuai.xi     {
3718*53ee8cc1Swenshuai.xi         GOP_WARN( "[Warning] %s %d( u32CurFBId:%td....)out of MS_U8 bound, please to use MApi_GOP_GWIN_Get32FBfromGWIN()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32CurFBId );
3719*53ee8cc1Swenshuai.xi     }
3720*53ee8cc1Swenshuai.xi     return u32CurFBId;
3721*53ee8cc1Swenshuai.xi }
3722*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Get32FBfromGWIN(MS_U8 gwinId)3723*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_Get32FBfromGWIN(MS_U8 gwinId)
3724*53ee8cc1Swenshuai.xi {
3725*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
3726*53ee8cc1Swenshuai.xi     MS_U32 u32FB = INVALID_POOL_NEXT_FBID;
3727*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3728*53ee8cc1Swenshuai.xi 
3729*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_GET_FB;
3730*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = gwinId;
3731*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)&u32FB;
3732*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
3733*53ee8cc1Swenshuai.xi 
3734*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3735*53ee8cc1Swenshuai.xi     {
3736*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3737*53ee8cc1Swenshuai.xi         GOP_RETURN(u32FB);
3738*53ee8cc1Swenshuai.xi     }
3739*53ee8cc1Swenshuai.xi 
3740*53ee8cc1Swenshuai.xi     GOP_RETURN(u32FB);
3741*53ee8cc1Swenshuai.xi 
3742*53ee8cc1Swenshuai.xi }
3743*53ee8cc1Swenshuai.xi 
3744*53ee8cc1Swenshuai.xi 
3745*53ee8cc1Swenshuai.xi /******************************************************************************/
3746*53ee8cc1Swenshuai.xi /// Get region info for a frame buffer
3747*53ee8cc1Swenshuai.xi /// @param fbID  \b IN frame buffer id 0 ~ (MAX_GWIN_FB_SUPPORT - 1)
3748*53ee8cc1Swenshuai.xi /// @param pX \b OUT position-X
3749*53ee8cc1Swenshuai.xi /// @param pY \b OUT position-Y
3750*53ee8cc1Swenshuai.xi /// @param pW \b OUT width
3751*53ee8cc1Swenshuai.xi /// @param pH \b OUT height
3752*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3753*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetFBRegion(MS_U8 fbID,MS_U16 * pX,MS_U16 * pY,MS_U16 * pW,MS_U16 * pH)3754*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetFBRegion(MS_U8 fbID, MS_U16 *pX, MS_U16 *pY, MS_U16 *pW, MS_U16 *pH)
3755*53ee8cc1Swenshuai.xi {
3756*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Get32FBRegion((MS_U32)fbID, pX, pY, pW, pH);
3757*53ee8cc1Swenshuai.xi }
3758*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Get32FBRegion(MS_U32 u32fbID,MS_U16 * pX,MS_U16 * pY,MS_U16 * pW,MS_U16 * pH)3759*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Get32FBRegion(MS_U32 u32fbID, MS_U16 *pX, MS_U16 *pY, MS_U16 *pW, MS_U16 *pH)
3760*53ee8cc1Swenshuai.xi {
3761*53ee8cc1Swenshuai.xi     GOP_GwinFBAttr fbAttr;
3762*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3763*53ee8cc1Swenshuai.xi 
3764*53ee8cc1Swenshuai.xi     if(MApi_GOP_GWIN_Get32FBInfo(u32fbID, &fbAttr) == GOP_API_SUCCESS)
3765*53ee8cc1Swenshuai.xi     {
3766*53ee8cc1Swenshuai.xi         *pX = fbAttr.x0;
3767*53ee8cc1Swenshuai.xi         *pY = fbAttr.y0;
3768*53ee8cc1Swenshuai.xi         *pW = fbAttr.width;
3769*53ee8cc1Swenshuai.xi         *pH = fbAttr.height;
3770*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_SUCCESS);
3771*53ee8cc1Swenshuai.xi     }
3772*53ee8cc1Swenshuai.xi     else
3773*53ee8cc1Swenshuai.xi     {
3774*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3775*53ee8cc1Swenshuai.xi     }
3776*53ee8cc1Swenshuai.xi 
3777*53ee8cc1Swenshuai.xi }
3778*53ee8cc1Swenshuai.xi 
3779*53ee8cc1Swenshuai.xi /******************************************************************************/
3780*53ee8cc1Swenshuai.xi /// Get position info for a frame buffer
3781*53ee8cc1Swenshuai.xi /// @param fbID  \b IN frame buffer id 0 ~ (MAX_GWIN_FB_SUPPORT - 1)
3782*53ee8cc1Swenshuai.xi /// @param pX \b OUT position-X
3783*53ee8cc1Swenshuai.xi /// @param pY \b OUT position-Y
3784*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3785*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetFBPosition(MS_U8 fbID,MS_U16 * pX,MS_U16 * pY)3786*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetFBPosition(MS_U8 fbID, MS_U16 *pX, MS_U16 *pY)
3787*53ee8cc1Swenshuai.xi {
3788*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Get32FBPosition((MS_U32)fbID, pX, pY);
3789*53ee8cc1Swenshuai.xi }
3790*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Get32FBPosition(MS_U32 u32fbID,MS_U16 * pX,MS_U16 * pY)3791*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Get32FBPosition(MS_U32 u32fbID, MS_U16 *pX, MS_U16 *pY)
3792*53ee8cc1Swenshuai.xi {
3793*53ee8cc1Swenshuai.xi     GOP_GwinFBAttr fbAttr;
3794*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3795*53ee8cc1Swenshuai.xi     if(MApi_GOP_GWIN_Get32FBInfo(u32fbID, &fbAttr) == GOP_API_SUCCESS)
3796*53ee8cc1Swenshuai.xi     {
3797*53ee8cc1Swenshuai.xi         *pX = fbAttr.x0;
3798*53ee8cc1Swenshuai.xi         *pY = fbAttr.y0;
3799*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_SUCCESS);
3800*53ee8cc1Swenshuai.xi     }
3801*53ee8cc1Swenshuai.xi     else
3802*53ee8cc1Swenshuai.xi     {
3803*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3804*53ee8cc1Swenshuai.xi     }
3805*53ee8cc1Swenshuai.xi 
3806*53ee8cc1Swenshuai.xi }
3807*53ee8cc1Swenshuai.xi 
3808*53ee8cc1Swenshuai.xi 
3809*53ee8cc1Swenshuai.xi /******************************************************************************/
3810*53ee8cc1Swenshuai.xi /// Create frame buffer - take alignment factor into consideration
3811*53ee8cc1Swenshuai.xi /// @param FBId  \b IN frame buffer id
3812*53ee8cc1Swenshuai.xi /// @param x  \b IN frame buffer starting x
3813*53ee8cc1Swenshuai.xi /// @param y  \b IN frame buffer starting y
3814*53ee8cc1Swenshuai.xi /// @param width \b IN width
3815*53ee8cc1Swenshuai.xi /// @param height \b IN height
3816*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN frame buffer format
3817*53ee8cc1Swenshuai.xi /// @param FBString \n IN create frame buffer by which one application
3818*53ee8cc1Swenshuai.xi /// @return TRUE: create OK,  FALSE: create fail
3819*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_CreateFB2_EXT(MS_U8 FBId,MS_U16 x,MS_U16 y,MS_U16 width,MS_U16 height,MS_U16 fbFmt,EN_GOP_FRAMEBUFFER_STRING FBString)3820*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateFB2_EXT(MS_U8 FBId, MS_U16 x, MS_U16 y, MS_U16 width, MS_U16 height, MS_U16 fbFmt, EN_GOP_FRAMEBUFFER_STRING FBString)
3821*53ee8cc1Swenshuai.xi {
3822*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Create32FB2_EXT((MS_U32)FBId, x, y, width, height, fbFmt ,FBString);
3823*53ee8cc1Swenshuai.xi }
3824*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Create32FB2_EXT(MS_U32 u32FBId,MS_U16 x,MS_U16 y,MS_U16 width,MS_U16 height,MS_U16 fbFmt,EN_GOP_FRAMEBUFFER_STRING FBString)3825*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Create32FB2_EXT(MS_U32 u32FBId, MS_U16 x, MS_U16 y, MS_U16 width, MS_U16 height, MS_U16 fbFmt, EN_GOP_FRAMEBUFFER_STRING FBString)
3826*53ee8cc1Swenshuai.xi {
3827*53ee8cc1Swenshuai.xi     GOP_CREATE_BUFFER_PARAM ioctl_info;
3828*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
3829*53ee8cc1Swenshuai.xi 
3830*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3831*53ee8cc1Swenshuai.xi 
3832*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_CREATE_BUFFER_PARAM));
3833*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
3834*53ee8cc1Swenshuai.xi 
3835*53ee8cc1Swenshuai.xi     ioctl_info.fb_type  = GOP_CREATE_BUFFER;
3836*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
3837*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
3838*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32FBId;
3839*53ee8cc1Swenshuai.xi 
3840*53ee8cc1Swenshuai.xi     BuffInfo.addr = 0x0;
3841*53ee8cc1Swenshuai.xi     BuffInfo.fbFmt = fbFmt;
3842*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = x;
3843*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = y;
3844*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = width;
3845*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.h = height;
3846*53ee8cc1Swenshuai.xi 
3847*53ee8cc1Swenshuai.xi     BuffInfo.width = width;
3848*53ee8cc1Swenshuai.xi     BuffInfo.height = height;
3849*53ee8cc1Swenshuai.xi     BuffInfo.FBString = FBString;
3850*53ee8cc1Swenshuai.xi 
3851*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_CREATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
3852*53ee8cc1Swenshuai.xi     {
3853*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3854*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
3855*53ee8cc1Swenshuai.xi     }
3856*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
3857*53ee8cc1Swenshuai.xi 
3858*53ee8cc1Swenshuai.xi }
3859*53ee8cc1Swenshuai.xi 
3860*53ee8cc1Swenshuai.xi /********************************************************************************/
3861*53ee8cc1Swenshuai.xi /// Check if GOP destination is op mode
3862*53ee8cc1Swenshuai.xi /// @return TRUE:op mode  FALSE: not in op mode
3863*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_CheckOpmodeIsOn_EX(MS_U8 u8GOP)3864*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_GWIN_CheckOpmodeIsOn_EX(MS_U8 u8GOP)
3865*53ee8cc1Swenshuai.xi {
3866*53ee8cc1Swenshuai.xi     EN_GOP_DST_TYPE enGopDst;
3867*53ee8cc1Swenshuai.xi     GOP_GETDST_PARAM ioctl_info;
3868*53ee8cc1Swenshuai.xi     memset(&ioctl_info,0x0, sizeof(GOP_GETDST_PARAM));
3869*53ee8cc1Swenshuai.xi 
3870*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3871*53ee8cc1Swenshuai.xi 
3872*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
3873*53ee8cc1Swenshuai.xi     ioctl_info.pDst = (MS_U32*) &enGopDst;
3874*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(EN_GOP_DST_TYPE);
3875*53ee8cc1Swenshuai.xi 
3876*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_DST,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
3877*53ee8cc1Swenshuai.xi     {
3878*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
3879*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3880*53ee8cc1Swenshuai.xi     }
3881*53ee8cc1Swenshuai.xi 
3882*53ee8cc1Swenshuai.xi     if (enGopDst == E_GOP_DST_OP0)
3883*53ee8cc1Swenshuai.xi     {
3884*53ee8cc1Swenshuai.xi         GOP_RETURN(TRUE);
3885*53ee8cc1Swenshuai.xi     }
3886*53ee8cc1Swenshuai.xi     else
3887*53ee8cc1Swenshuai.xi     {
3888*53ee8cc1Swenshuai.xi         GOP_RETURN(FALSE);
3889*53ee8cc1Swenshuai.xi     }
3890*53ee8cc1Swenshuai.xi }
3891*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_CheckOpmodeIsOn(void)3892*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_GWIN_CheckOpmodeIsOn(void)
3893*53ee8cc1Swenshuai.xi {
3894*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
3895*53ee8cc1Swenshuai.xi     MS_BOOL ret;
3896*53ee8cc1Swenshuai.xi 
3897*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
3898*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_CheckOpmodeIsOn_EX(u8GOP);
3899*53ee8cc1Swenshuai.xi     return ret;
3900*53ee8cc1Swenshuai.xi }
3901*53ee8cc1Swenshuai.xi /*****************************************************************************/
3902*53ee8cc1Swenshuai.xi /// Get Active GWIN id with max vertical pixel length
3903*53ee8cc1Swenshuai.xi /// Active means that displaying OSD currently on screen
3904*53ee8cc1Swenshuai.xi /// @return the active GWIN's length  with the maximum vertical pixel length
3905*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetMaxActiveGwin_v(void)3906*53ee8cc1Swenshuai.xi MS_U16 MApi_GOP_GWIN_GetMaxActiveGwin_v(void)
3907*53ee8cc1Swenshuai.xi {
3908*53ee8cc1Swenshuai.xi     MS_U16 v_length=0;
3909*53ee8cc1Swenshuai.xi     MS_U8 i=0;
3910*53ee8cc1Swenshuai.xi     GOP_GwinInfo gwin;
3911*53ee8cc1Swenshuai.xi     MS_U16 maxvlength=0;
3912*53ee8cc1Swenshuai.xi     MS_U16 h_length=0;
3913*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3914*53ee8cc1Swenshuai.xi 
3915*53ee8cc1Swenshuai.xi     if (MApi_GOP_GWIN_CheckOpmodeIsOn()==false)
3916*53ee8cc1Swenshuai.xi     {
3917*53ee8cc1Swenshuai.xi         GOP_RETURN(GetMaxActiveGwinFalse_op);
3918*53ee8cc1Swenshuai.xi     }
3919*53ee8cc1Swenshuai.xi     else
3920*53ee8cc1Swenshuai.xi     {
3921*53ee8cc1Swenshuai.xi         // Check which GWINS are active
3922*53ee8cc1Swenshuai.xi         if (MApi_GOP_GWIN_IsEnabled()==false)
3923*53ee8cc1Swenshuai.xi         {
3924*53ee8cc1Swenshuai.xi             GOP_RETURN(GetMaxActiveGwinFalse_opened);
3925*53ee8cc1Swenshuai.xi         }
3926*53ee8cc1Swenshuai.xi         else
3927*53ee8cc1Swenshuai.xi         //if gwin are active then compare their vertical size
3928*53ee8cc1Swenshuai.xi         // Initialize
3929*53ee8cc1Swenshuai.xi         {
3930*53ee8cc1Swenshuai.xi             for (i=0;i<MAX_GWIN_SUPPORT;i++)
3931*53ee8cc1Swenshuai.xi             {
3932*53ee8cc1Swenshuai.xi                 //printf("\n(1) i:0x%bx",i);
3933*53ee8cc1Swenshuai.xi                 if (MApi_GOP_GWIN_IsGWINEnabled(i)==true)
3934*53ee8cc1Swenshuai.xi                 {
3935*53ee8cc1Swenshuai.xi                     memset(&gwin, 0, sizeof(GOP_GwinInfo));
3936*53ee8cc1Swenshuai.xi                     MApi_GOP_GWIN_GetWinInfo(i,&gwin);
3937*53ee8cc1Swenshuai.xi                     h_length=gwin.u16DispHPixelEnd-gwin.u16DispHPixelStart;
3938*53ee8cc1Swenshuai.xi                     if (gwin.u16DispVPixelEnd>gwin.u16DispVPixelStart)
3939*53ee8cc1Swenshuai.xi                     {
3940*53ee8cc1Swenshuai.xi 
3941*53ee8cc1Swenshuai.xi                         if (h_length>4)
3942*53ee8cc1Swenshuai.xi                         {
3943*53ee8cc1Swenshuai.xi                             v_length=gwin.u16DispVPixelEnd-gwin.u16DispVPixelStart;
3944*53ee8cc1Swenshuai.xi                             if (v_length>maxvlength)
3945*53ee8cc1Swenshuai.xi                             {
3946*53ee8cc1Swenshuai.xi                                 maxvlength=v_length;
3947*53ee8cc1Swenshuai.xi                             }
3948*53ee8cc1Swenshuai.xi                         }
3949*53ee8cc1Swenshuai.xi                     }
3950*53ee8cc1Swenshuai.xi                     else
3951*53ee8cc1Swenshuai.xi                     {
3952*53ee8cc1Swenshuai.xi                         GOP_RETURN(GetMaxActiveGwinFalse);
3953*53ee8cc1Swenshuai.xi                     }
3954*53ee8cc1Swenshuai.xi                 }
3955*53ee8cc1Swenshuai.xi 
3956*53ee8cc1Swenshuai.xi             }
3957*53ee8cc1Swenshuai.xi 
3958*53ee8cc1Swenshuai.xi             GOP_RETURN(maxvlength);
3959*53ee8cc1Swenshuai.xi 
3960*53ee8cc1Swenshuai.xi         }
3961*53ee8cc1Swenshuai.xi 
3962*53ee8cc1Swenshuai.xi     }
3963*53ee8cc1Swenshuai.xi }
3964*53ee8cc1Swenshuai.xi 
3965*53ee8cc1Swenshuai.xi 
3966*53ee8cc1Swenshuai.xi /*****************************************************************************/
3967*53ee8cc1Swenshuai.xi /// API for acquiring displaying GWIN's properties
3968*53ee8cc1Swenshuai.xi /// @param WinProperty  \b OUT: pointer of GOP_GwinDispProperty
3969*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
3970*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetWinProperty(GOP_GwinDispProperty * WinProperty)3971*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetWinProperty(GOP_GwinDispProperty *WinProperty)
3972*53ee8cc1Swenshuai.xi {
3973*53ee8cc1Swenshuai.xi     GOP_GwinInfo gWin;
3974*53ee8cc1Swenshuai.xi     GOP_ENTRY();
3975*53ee8cc1Swenshuai.xi 
3976*53ee8cc1Swenshuai.xi     memset(&gWin, 0, sizeof(GOP_GwinInfo));
3977*53ee8cc1Swenshuai.xi 
3978*53ee8cc1Swenshuai.xi     if(GOP_API_SUCCESS == MApi_GOP_GWIN_GetWinInfo(WinProperty->gId,&gWin))
3979*53ee8cc1Swenshuai.xi     {
3980*53ee8cc1Swenshuai.xi         WinProperty->StartX=gWin.u16DispHPixelStart;
3981*53ee8cc1Swenshuai.xi         WinProperty->StartY=gWin.u16DispVPixelStart;
3982*53ee8cc1Swenshuai.xi         //WinProperty->GOPWinWidth=gWin.u16DispVPixelEnd-gWin.u16DispHPixelStart;
3983*53ee8cc1Swenshuai.xi         WinProperty->Win_Width=gWin.u16DispHPixelEnd-gWin.u16DispHPixelStart+1;
3984*53ee8cc1Swenshuai.xi         WinProperty->Win_Height=gWin.u16DispVPixelEnd-gWin.u16DispVPixelStart+1;
3985*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_SUCCESS);
3986*53ee8cc1Swenshuai.xi     }
3987*53ee8cc1Swenshuai.xi     else
3988*53ee8cc1Swenshuai.xi     {
3989*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
3990*53ee8cc1Swenshuai.xi     }
3991*53ee8cc1Swenshuai.xi 
3992*53ee8cc1Swenshuai.xi }
3993*53ee8cc1Swenshuai.xi 
3994*53ee8cc1Swenshuai.xi /*****************************************************************************/
3995*53ee8cc1Swenshuai.xi /// API for acquiring color format of some Framebuffer
3996*53ee8cc1Swenshuai.xi /// @param fbId  \b IN frame buffer id
3997*53ee8cc1Swenshuai.xi /// @return the format of Frame buffer. If return 0xF, it represents get frame buffer format fail.
3998*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetFBFmt(MS_U8 fbId)3999*53ee8cc1Swenshuai.xi MS_U16 MApi_GOP_GWIN_GetFBFmt(MS_U8 fbId)
4000*53ee8cc1Swenshuai.xi {
4001*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Get32FBFmt((MS_U32)fbId);
4002*53ee8cc1Swenshuai.xi }
4003*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Get32FBFmt(MS_U32 u32fbId)4004*53ee8cc1Swenshuai.xi MS_U16 MApi_GOP_GWIN_Get32FBFmt(MS_U32 u32fbId)
4005*53ee8cc1Swenshuai.xi {
4006*53ee8cc1Swenshuai.xi    GOP_GwinFBAttr fbAttr;
4007*53ee8cc1Swenshuai.xi    GOP_ENTRY();
4008*53ee8cc1Swenshuai.xi 
4009*53ee8cc1Swenshuai.xi     if (!MApi_GOP_GWIN_Is32FBExist(u32fbId))
4010*53ee8cc1Swenshuai.xi     {
4011*53ee8cc1Swenshuai.xi         MS_DEBUG_MSG( GOP_ERR("MApi_GOP_GWIN_Get32FBFmt: u32fbId=%d is not in existence\n",u32fbId));
4012*53ee8cc1Swenshuai.xi         GOP_RETURN(GWIN_NO_AVAILABLE);
4013*53ee8cc1Swenshuai.xi     }
4014*53ee8cc1Swenshuai.xi     else
4015*53ee8cc1Swenshuai.xi     {
4016*53ee8cc1Swenshuai.xi         if(MApi_GOP_GWIN_Get32FBInfo(u32fbId, &fbAttr) == GOP_API_SUCCESS)
4017*53ee8cc1Swenshuai.xi         {
4018*53ee8cc1Swenshuai.xi             GOP_RETURN(fbAttr.fbFmt);
4019*53ee8cc1Swenshuai.xi         }
4020*53ee8cc1Swenshuai.xi         else
4021*53ee8cc1Swenshuai.xi         {
4022*53ee8cc1Swenshuai.xi             GOP_RETURN(GOP_API_FAIL);
4023*53ee8cc1Swenshuai.xi         }
4024*53ee8cc1Swenshuai.xi     }
4025*53ee8cc1Swenshuai.xi }
4026*53ee8cc1Swenshuai.xi 
4027*53ee8cc1Swenshuai.xi 
4028*53ee8cc1Swenshuai.xi /*****************************************************************************/
4029*53ee8cc1Swenshuai.xi /// API for acquiring current FB's ID
4030*53ee8cc1Swenshuai.xi /// @ return current FB'id. if return is 0xFF, it represents get current frame buffer fail
4031*53ee8cc1Swenshuai.xi /*****************************************************************************/
MApi_GOP_GWIN_GetCurrentFBID(void)4032*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetCurrentFBID(void)
4033*53ee8cc1Swenshuai.xi {
4034*53ee8cc1Swenshuai.xi     MS_U32 u32CurFBID;
4035*53ee8cc1Swenshuai.xi 
4036*53ee8cc1Swenshuai.xi     u32CurFBID = MApi_GOP_GWIN_GetCurrent32FBID();
4037*53ee8cc1Swenshuai.xi     if( u32CurFBID > 256) //Out of MS_U8
4038*53ee8cc1Swenshuai.xi     {
4039*53ee8cc1Swenshuai.xi         GOP_WARN( "[Warning] %s %d( u32CurFBID:%td....)out of MS_U8 bound, please to use MApi_GOP_GWIN_GetCurrent32FBID()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32CurFBID );
4040*53ee8cc1Swenshuai.xi     }
4041*53ee8cc1Swenshuai.xi     return u32CurFBID;
4042*53ee8cc1Swenshuai.xi }
4043*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_GetCurrent32FBID(void)4044*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_GetCurrent32FBID(void)
4045*53ee8cc1Swenshuai.xi {
4046*53ee8cc1Swenshuai.xi     GOP_GET_STATUS_PARAM ioctl_info;
4047*53ee8cc1Swenshuai.xi     MS_U32 u32FbId = INVALID_POOL_NEXT_FBID;
4048*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4049*53ee8cc1Swenshuai.xi     ioctl_info.type = 0;
4050*53ee8cc1Swenshuai.xi     ioctl_info.en_status = E_GOP_STATUS_CURRENT_FBID;
4051*53ee8cc1Swenshuai.xi     ioctl_info.pStatus = (MS_U32*) &u32FbId;
4052*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U32);
4053*53ee8cc1Swenshuai.xi 
4054*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_STATUS,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4055*53ee8cc1Swenshuai.xi     {
4056*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4057*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4058*53ee8cc1Swenshuai.xi     }
4059*53ee8cc1Swenshuai.xi     GOP_RETURN(u32FbId);
4060*53ee8cc1Swenshuai.xi 
4061*53ee8cc1Swenshuai.xi }
4062*53ee8cc1Swenshuai.xi 
4063*53ee8cc1Swenshuai.xi 
4064*53ee8cc1Swenshuai.xi /********************************************************************************/
4065*53ee8cc1Swenshuai.xi /// Enable/disable GOP field inverse
4066*53ee8cc1Swenshuai.xi /// @param enable  \b IN TRUE/FALSE
4067*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4068*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetFieldInver_EX(MS_U8 u8GOP,MS_BOOL enable)4069*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetFieldInver_EX(MS_U8 u8GOP,MS_BOOL enable)
4070*53ee8cc1Swenshuai.xi {
4071*53ee8cc1Swenshuai.xi     MS_BOOL bFieldInv;
4072*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
4073*53ee8cc1Swenshuai.xi 
4074*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4075*53ee8cc1Swenshuai.xi 
4076*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
4077*53ee8cc1Swenshuai.xi     bFieldInv = enable;
4078*53ee8cc1Swenshuai.xi 
4079*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_FIELD_INVERSE;
4080*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
4081*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bFieldInv;
4082*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
4083*53ee8cc1Swenshuai.xi 
4084*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
4085*53ee8cc1Swenshuai.xi     {
4086*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4087*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
4088*53ee8cc1Swenshuai.xi     }
4089*53ee8cc1Swenshuai.xi 
4090*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4091*53ee8cc1Swenshuai.xi 
4092*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_SetFieldInver(MS_BOOL enable)4093*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetFieldInver(MS_BOOL enable)
4094*53ee8cc1Swenshuai.xi {
4095*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
4096*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
4097*53ee8cc1Swenshuai.xi 
4098*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
4099*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetFieldInver_EX(u8GOP,enable);
4100*53ee8cc1Swenshuai.xi     return ret;
4101*53ee8cc1Swenshuai.xi }
4102*53ee8cc1Swenshuai.xi 
4103*53ee8cc1Swenshuai.xi //******************************************************************************
4104*53ee8cc1Swenshuai.xi /// Enable gop transparent color
4105*53ee8cc1Swenshuai.xi /// @param fmt \b IN: RGB mode or u8Index mode color format
4106*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
4107*53ee8cc1Swenshuai.xi ///   - # TRUE Enable gop transparent color
4108*53ee8cc1Swenshuai.xi ///   - # FALSE Disable gop transparent color
4109*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4110*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_EnableTransClr_EX(MS_U8 u8GOP,EN_GOP_TRANSCLR_FMT fmt,MS_BOOL bEnable)4111*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableTransClr_EX(MS_U8 u8GOP,EN_GOP_TRANSCLR_FMT fmt, MS_BOOL bEnable)
4112*53ee8cc1Swenshuai.xi {
4113*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
4114*53ee8cc1Swenshuai.xi     GOP_TRANSCOLOR trans_set;
4115*53ee8cc1Swenshuai.xi 
4116*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4117*53ee8cc1Swenshuai.xi     trans_set.bEn = bEnable;
4118*53ee8cc1Swenshuai.xi     trans_set.color = u32TransColor;
4119*53ee8cc1Swenshuai.xi     trans_set.fmt = fmt;
4120*53ee8cc1Swenshuai.xi     trans_set.transclr_property =  EN_TRANSCLR_ENABLE;
4121*53ee8cc1Swenshuai.xi 
4122*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_TRANSCOLOR;
4123*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
4124*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&trans_set;
4125*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_TRANSCOLOR);
4126*53ee8cc1Swenshuai.xi 
4127*53ee8cc1Swenshuai.xi 
4128*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4129*53ee8cc1Swenshuai.xi     {
4130*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4131*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4132*53ee8cc1Swenshuai.xi     }
4133*53ee8cc1Swenshuai.xi 
4134*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4135*53ee8cc1Swenshuai.xi 
4136*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_EnableTransClr(EN_GOP_TRANSCLR_FMT fmt,MS_BOOL bEnable)4137*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableTransClr(EN_GOP_TRANSCLR_FMT fmt, MS_BOOL bEnable)
4138*53ee8cc1Swenshuai.xi {
4139*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
4140*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
4141*53ee8cc1Swenshuai.xi 
4142*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
4143*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_EnableTransClr_EX(u8GOP,fmt,bEnable);
4144*53ee8cc1Swenshuai.xi     return ret;
4145*53ee8cc1Swenshuai.xi }
4146*53ee8cc1Swenshuai.xi /********************************************************************************/
4147*53ee8cc1Swenshuai.xi /// Set GWIN Blink
4148*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
4149*53ee8cc1Swenshuai.xi ///   - # TRUE enable
4150*53ee8cc1Swenshuai.xi ///   - # FALSE disable
4151*53ee8cc1Swenshuai.xi /// @param u8rate \b IN Blink frame rate
4152*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4153*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetBlink(MS_BOOL bEnable,MS_U8 u8rate)4154*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetBlink(MS_BOOL bEnable, MS_U8 u8rate)
4155*53ee8cc1Swenshuai.xi {
4156*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
4157*53ee8cc1Swenshuai.xi     GOP_GWIN_BLINK blinkInfo;
4158*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4159*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_BLINK;
4160*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = 0x0;
4161*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)&blinkInfo;
4162*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_GWIN_BLINK);
4163*53ee8cc1Swenshuai.xi 
4164*53ee8cc1Swenshuai.xi     blinkInfo.rate = u8rate;
4165*53ee8cc1Swenshuai.xi     blinkInfo.bEn = bEnable;
4166*53ee8cc1Swenshuai.xi 
4167*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4168*53ee8cc1Swenshuai.xi     {
4169*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4170*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4171*53ee8cc1Swenshuai.xi     }
4172*53ee8cc1Swenshuai.xi 
4173*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4174*53ee8cc1Swenshuai.xi 
4175*53ee8cc1Swenshuai.xi }
4176*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Enable_BGWIN(MS_U8 bgwID,MS_BOOL bEnable)4177*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Enable_BGWIN(MS_U8 bgwID, MS_BOOL bEnable)
4178*53ee8cc1Swenshuai.xi {
4179*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4180*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not Support \n",__FUNCTION__);
4181*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4182*53ee8cc1Swenshuai.xi }
4183*53ee8cc1Swenshuai.xi 
4184*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Set_BGWIN(MS_U8 bgwID,MS_U16 x0,MS_U16 y0,MS_U16 w,MS_U16 h,MS_U16 color)4185*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_BGWIN(MS_U8 bgwID, MS_U16 x0, MS_U16 y0, MS_U16 w, MS_U16 h, MS_U16 color)
4186*53ee8cc1Swenshuai.xi {
4187*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4188*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not Support \n",__FUNCTION__);
4189*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4190*53ee8cc1Swenshuai.xi }
4191*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Set_BGWIN_Alpha(MS_U8 bgwID,MS_BOOL bEnable,MS_U8 alpha)4192*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_BGWIN_Alpha(MS_U8 bgwID, MS_BOOL bEnable, MS_U8 alpha)
4193*53ee8cc1Swenshuai.xi {
4194*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4195*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not Support \n",__FUNCTION__);
4196*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4197*53ee8cc1Swenshuai.xi }
4198*53ee8cc1Swenshuai.xi 
4199*53ee8cc1Swenshuai.xi // Alignment stretch window value
4200*53ee8cc1Swenshuai.xi 
4201*53ee8cc1Swenshuai.xi /********************************************************************************/
4202*53ee8cc1Swenshuai.xi /// Set stretch window property
4203*53ee8cc1Swenshuai.xi /// @param u8GOP_num \b IN 0: GOP0  1:GOP1
4204*53ee8cc1Swenshuai.xi /// @param eDstType \b IN \copydoc EN_GOP_DST_TYPE
4205*53ee8cc1Swenshuai.xi /// @param x \b IN stretch window horizontal start position
4206*53ee8cc1Swenshuai.xi /// @param y \b IN stretch window vertical start position
4207*53ee8cc1Swenshuai.xi /// @param width \b IN stretch window width
4208*53ee8cc1Swenshuai.xi /// @param height \b IN stretch window height
4209*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4210*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4211*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_Set_STRETCHWIN(MS_U8 u8GOP_num,EN_GOP_DST_TYPE eDstType,MS_U16 x,MS_U16 y,MS_U16 width,MS_U16 height)4212*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set_STRETCHWIN(MS_U8 u8GOP_num, EN_GOP_DST_TYPE eDstType,MS_U16 x, MS_U16 y, MS_U16 width, MS_U16 height)
4213*53ee8cc1Swenshuai.xi {
4214*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_info;
4215*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
4216*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4217*53ee8cc1Swenshuai.xi 
4218*53ee8cc1Swenshuai.xi     memset(&ioctl_info,0x0, sizeof(GOP_STRETCH_SET_PARAM));
4219*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
4220*53ee8cc1Swenshuai.xi 
4221*53ee8cc1Swenshuai.xi     stretch_info.DstRect.x = x;
4222*53ee8cc1Swenshuai.xi     stretch_info.DstRect.y = y;
4223*53ee8cc1Swenshuai.xi     stretch_info.DstRect.w = width;
4224*53ee8cc1Swenshuai.xi     stretch_info.DstRect.h = height;
4225*53ee8cc1Swenshuai.xi 
4226*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.x = x;
4227*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.y = y;
4228*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.w = width;
4229*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.h = height;
4230*53ee8cc1Swenshuai.xi 
4231*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP_num;
4232*53ee8cc1Swenshuai.xi     ioctl_info.enStrtchType = E_GOP_STRETCH_WIN;
4233*53ee8cc1Swenshuai.xi     ioctl_info.pStretch = (MS_U32*)&stretch_info;
4234*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_STRETCH_INFO);
4235*53ee8cc1Swenshuai.xi 
4236*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4237*53ee8cc1Swenshuai.xi     {
4238*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4239*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4240*53ee8cc1Swenshuai.xi     }
4241*53ee8cc1Swenshuai.xi 
4242*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4243*53ee8cc1Swenshuai.xi 
4244*53ee8cc1Swenshuai.xi }
4245*53ee8cc1Swenshuai.xi 
4246*53ee8cc1Swenshuai.xi /********************************************************************************/
4247*53ee8cc1Swenshuai.xi /// Set stretch window position
4248*53ee8cc1Swenshuai.xi /// @param u8GOPNum \b IN 0: GOP0  1:GOP1
4249*53ee8cc1Swenshuai.xi /// @param u16DispX \b IN stretch window horizontal start position
4250*53ee8cc1Swenshuai.xi /// @param u16DispY \b IN stretch window vertical start position
4251*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4252*53ee8cc1Swenshuai.xi /// @return GOP_API_INVALID_PARAMETERS - Failure
4253*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetStretchWinPosition(MS_U8 u8GOPNum,MS_U16 u16DispX,MS_U16 u16DispY)4254*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetStretchWinPosition(MS_U8 u8GOPNum, MS_U16 u16DispX, MS_U16 u16DispY)
4255*53ee8cc1Swenshuai.xi {
4256*53ee8cc1Swenshuai.xi     GOP_STRETCH_SET_PARAM ioctl_StrrtchInfo;
4257*53ee8cc1Swenshuai.xi     GOP_STRETCH_INFO stretch_info;
4258*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4259*53ee8cc1Swenshuai.xi 
4260*53ee8cc1Swenshuai.xi     memset(&ioctl_StrrtchInfo, 0x0, sizeof(GOP_STRETCH_SET_PARAM));
4261*53ee8cc1Swenshuai.xi     memset(&stretch_info, 0x0, sizeof(GOP_STRETCH_INFO));
4262*53ee8cc1Swenshuai.xi 
4263*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.x = u16DispX;
4264*53ee8cc1Swenshuai.xi     stretch_info.SrcRect.y = u16DispY;
4265*53ee8cc1Swenshuai.xi 
4266*53ee8cc1Swenshuai.xi     ioctl_StrrtchInfo.gop_idx = u8GOPNum;
4267*53ee8cc1Swenshuai.xi     ioctl_StrrtchInfo.enStrtchType = E_GOP_STRETCH_WIN_POSITION;
4268*53ee8cc1Swenshuai.xi     ioctl_StrrtchInfo.pStretch = (MS_U32*)&stretch_info;
4269*53ee8cc1Swenshuai.xi     ioctl_StrrtchInfo.u32Size = sizeof(GOP_STRETCH_INFO);
4270*53ee8cc1Swenshuai.xi 
4271*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_STRETCH,(void*)&ioctl_StrrtchInfo) != UTOPIA_STATUS_SUCCESS)
4272*53ee8cc1Swenshuai.xi     {
4273*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4274*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
4275*53ee8cc1Swenshuai.xi     }
4276*53ee8cc1Swenshuai.xi 
4277*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4278*53ee8cc1Swenshuai.xi 
4279*53ee8cc1Swenshuai.xi }
4280*53ee8cc1Swenshuai.xi 
4281*53ee8cc1Swenshuai.xi 
4282*53ee8cc1Swenshuai.xi /********************************************************************************/
4283*53ee8cc1Swenshuai.xi /// Restore initial stretch window setting of GOP. It will set gop to OP path and stretch window width/height
4284*53ee8cc1Swenshuai.xi /// to panel width/height
4285*53ee8cc1Swenshuai.xi /// @param u8GOPNum \b IN : Number of GOP
4286*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4287*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_Initialize_StretchWindow(MS_U8 u8GOPNum)4288*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_Initialize_StretchWindow(MS_U8 u8GOPNum)
4289*53ee8cc1Swenshuai.xi {
4290*53ee8cc1Swenshuai.xi #ifndef CONFIG_GOP_GWIN_MISC
4291*53ee8cc1Swenshuai.xi     GOP_ERR("\33[0;36m   %s: #define CONFIG_GOP_GWIN_MISC not opened\33[m \n",__FUNCTION__);
4292*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
4293*53ee8cc1Swenshuai.xi #else
4294*53ee8cc1Swenshuai.xi     ST_GOP_TIMING_INFO stTimingInfo;
4295*53ee8cc1Swenshuai.xi     MS_PHY *plist;
4296*53ee8cc1Swenshuai.xi 
4297*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4298*53ee8cc1Swenshuai.xi     plist = (MS_PHY *)(void*)&stTimingInfo;
4299*53ee8cc1Swenshuai.xi 
4300*53ee8cc1Swenshuai.xi     MApi_GOP_GetConfigEx(u8GOPNum,E_GOP_TIMING_INFO,plist);
4301*53ee8cc1Swenshuai.xi 
4302*53ee8cc1Swenshuai.xi #if (FPGA_TEST)
4303*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Set_STRETCHWIN(u8GOPNum, E_GOP_DST_VOP,0, 0
4304*53ee8cc1Swenshuai.xi         , stTimingInfo.u16DEHSize, stTimingInfo.u16DEVSize);
4305*53ee8cc1Swenshuai.xi #else
4306*53ee8cc1Swenshuai.xi     MApi_GOP_GWIN_Set_STRETCHWIN(u8GOPNum, E_GOP_DST_OP0,0, 0
4307*53ee8cc1Swenshuai.xi         , stTimingInfo.u16DEHSize, stTimingInfo.u16DEVSize);
4308*53ee8cc1Swenshuai.xi #endif
4309*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4310*53ee8cc1Swenshuai.xi #endif
4311*53ee8cc1Swenshuai.xi }
4312*53ee8cc1Swenshuai.xi 
4313*53ee8cc1Swenshuai.xi 
4314*53ee8cc1Swenshuai.xi 
4315*53ee8cc1Swenshuai.xi /********************************************************************************/
4316*53ee8cc1Swenshuai.xi /// Set GOP H-Mirror
4317*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
4318*53ee8cc1Swenshuai.xi ///   - # TRUE enable
4319*53ee8cc1Swenshuai.xi ///   - # FALSE disable
4320*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4321*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetHMirror_EX(MS_U8 u8GOP,MS_BOOL bEnable)4322*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetHMirror_EX(MS_U8 u8GOP,MS_BOOL bEnable)
4323*53ee8cc1Swenshuai.xi {
4324*53ee8cc1Swenshuai.xi     GOP_SETMIRROR_PARAM ioctl_info;
4325*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4326*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SETMIRROR_PARAM));
4327*53ee8cc1Swenshuai.xi 
4328*53ee8cc1Swenshuai.xi 
4329*53ee8cc1Swenshuai.xi     if(bEnable == TRUE)
4330*53ee8cc1Swenshuai.xi         ioctl_info.dir = E_GOP_MIRROR_H_ONLY;
4331*53ee8cc1Swenshuai.xi     else
4332*53ee8cc1Swenshuai.xi         ioctl_info.dir = E_GOP_MIRROR_H_NONE;
4333*53ee8cc1Swenshuai.xi 
4334*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = (MS_U32)u8GOP;  //get current gop for driver capability
4335*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_MIRROR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4336*53ee8cc1Swenshuai.xi     {
4337*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4338*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4339*53ee8cc1Swenshuai.xi     }
4340*53ee8cc1Swenshuai.xi 
4341*53ee8cc1Swenshuai.xi 
4342*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4343*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_SetHMirror(MS_BOOL bEnable)4344*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetHMirror(MS_BOOL bEnable)
4345*53ee8cc1Swenshuai.xi {
4346*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
4347*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
4348*53ee8cc1Swenshuai.xi 
4349*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
4350*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetHMirror_EX(u8GOP,bEnable);
4351*53ee8cc1Swenshuai.xi     return ret;
4352*53ee8cc1Swenshuai.xi }
4353*53ee8cc1Swenshuai.xi //******************************************************************************
4354*53ee8cc1Swenshuai.xi /// Get gop h-mirror and v-mirror status
4355*53ee8cc1Swenshuai.xi /// @param *bHMirror \b OUT TRUE:h-Mirror on, FALSE: h-Mirror off
4356*53ee8cc1Swenshuai.xi /// @param *bVMirror \b OUT TRUE:v-Mirror on, FALSE: v-Mirror off
4357*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4358*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_IsMirrorOn_EX(MS_U8 u8GOP,MS_BOOL * bHMirror,MS_BOOL * bVMirror)4359*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_IsMirrorOn_EX(MS_U8 u8GOP,MS_BOOL *bHMirror, MS_BOOL *bVMirror)
4360*53ee8cc1Swenshuai.xi {
4361*53ee8cc1Swenshuai.xi     GOP_GETMIRROR_PARAM ioctl_info;
4362*53ee8cc1Swenshuai.xi     EN_GOP_MIRROR_TYPE mirror_type;
4363*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4364*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GETMIRROR_PARAM));
4365*53ee8cc1Swenshuai.xi 
4366*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = (MS_U32)u8GOP;  //get current gop for driver capability
4367*53ee8cc1Swenshuai.xi     ioctl_info.pdir    = &mirror_type;
4368*53ee8cc1Swenshuai.xi 
4369*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_MIRROR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4370*53ee8cc1Swenshuai.xi     {
4371*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4372*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4373*53ee8cc1Swenshuai.xi     }
4374*53ee8cc1Swenshuai.xi 
4375*53ee8cc1Swenshuai.xi     if(mirror_type == E_GOP_MIRROR_HV)
4376*53ee8cc1Swenshuai.xi     {
4377*53ee8cc1Swenshuai.xi         *bHMirror = TRUE;
4378*53ee8cc1Swenshuai.xi         *bVMirror = TRUE;
4379*53ee8cc1Swenshuai.xi     }
4380*53ee8cc1Swenshuai.xi     else if(mirror_type == E_GOP_MIRROR_H_ONLY)
4381*53ee8cc1Swenshuai.xi     {
4382*53ee8cc1Swenshuai.xi         *bHMirror = TRUE;
4383*53ee8cc1Swenshuai.xi         *bVMirror = FALSE;
4384*53ee8cc1Swenshuai.xi     }
4385*53ee8cc1Swenshuai.xi     else if(mirror_type == E_GOP_MIRROR_V_ONLY)
4386*53ee8cc1Swenshuai.xi     {
4387*53ee8cc1Swenshuai.xi         *bHMirror = FALSE;
4388*53ee8cc1Swenshuai.xi         *bVMirror = TRUE;
4389*53ee8cc1Swenshuai.xi     }
4390*53ee8cc1Swenshuai.xi     else
4391*53ee8cc1Swenshuai.xi     {
4392*53ee8cc1Swenshuai.xi         *bHMirror = FALSE;
4393*53ee8cc1Swenshuai.xi         *bVMirror = FALSE;
4394*53ee8cc1Swenshuai.xi     }
4395*53ee8cc1Swenshuai.xi 
4396*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4397*53ee8cc1Swenshuai.xi 
4398*53ee8cc1Swenshuai.xi }
MApi_GOP_GWIN_IsMirrorOn(MS_BOOL * bHMirror,MS_BOOL * bVMirror)4399*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_IsMirrorOn(MS_BOOL *bHMirror, MS_BOOL *bVMirror)
4400*53ee8cc1Swenshuai.xi {
4401*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
4402*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
4403*53ee8cc1Swenshuai.xi 
4404*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
4405*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_IsMirrorOn_EX(u8GOP,bHMirror,bVMirror);
4406*53ee8cc1Swenshuai.xi     return ret;
4407*53ee8cc1Swenshuai.xi }
4408*53ee8cc1Swenshuai.xi /********************************************************************************/
4409*53ee8cc1Swenshuai.xi /// Set GOP V-Mirror
4410*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
4411*53ee8cc1Swenshuai.xi ///   - # TRUE enable
4412*53ee8cc1Swenshuai.xi ///   - # FALSE disable
4413*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4414*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetVMirror_EX(MS_U8 u8GOP,MS_BOOL bEnable)4415*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetVMirror_EX(MS_U8 u8GOP,MS_BOOL bEnable)
4416*53ee8cc1Swenshuai.xi {
4417*53ee8cc1Swenshuai.xi     GOP_SETMIRROR_PARAM ioctl_info;
4418*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4419*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SETMIRROR_PARAM));
4420*53ee8cc1Swenshuai.xi 
4421*53ee8cc1Swenshuai.xi     if( bEnable == TRUE )
4422*53ee8cc1Swenshuai.xi         ioctl_info.dir = E_GOP_MIRROR_V_ONLY;
4423*53ee8cc1Swenshuai.xi     else
4424*53ee8cc1Swenshuai.xi         ioctl_info.dir = E_GOP_MIRROR_V_NONE;
4425*53ee8cc1Swenshuai.xi 
4426*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = (MS_U32)u8GOP;  //get current gop for driver capability
4427*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_MIRROR,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4428*53ee8cc1Swenshuai.xi     {
4429*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4430*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4431*53ee8cc1Swenshuai.xi     }
4432*53ee8cc1Swenshuai.xi 
4433*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4434*53ee8cc1Swenshuai.xi 
4435*53ee8cc1Swenshuai.xi }
4436*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetVMirror(MS_BOOL bEnable)4437*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetVMirror(MS_BOOL bEnable)
4438*53ee8cc1Swenshuai.xi {
4439*53ee8cc1Swenshuai.xi     MS_U8 u8GOP;
4440*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
4441*53ee8cc1Swenshuai.xi     u8GOP = MApi_GOP_GWIN_GetCurrentGOP();
4442*53ee8cc1Swenshuai.xi     ret = MApi_GOP_GWIN_SetVMirror_EX(u8GOP,bEnable);
4443*53ee8cc1Swenshuai.xi     return ret;
4444*53ee8cc1Swenshuai.xi }
4445*53ee8cc1Swenshuai.xi 
4446*53ee8cc1Swenshuai.xi /********************************************************************************/
4447*53ee8cc1Swenshuai.xi /// Set GWIN Tile Mode
4448*53ee8cc1Swenshuai.xi /// @param u8win \b IN GWIN id
4449*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
4450*53ee8cc1Swenshuai.xi ///   - # TRUE Gwin Tile Mode
4451*53ee8cc1Swenshuai.xi ///   - # FALSE Gwin Tile Mode
4452*53ee8cc1Swenshuai.xi /// @param u8coef \b IN alpha blending coefficient (0-7)
4453*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4454*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetGPUTile(MS_U8 u8win,EN_GOP_GPU_TILE_MODE TileMode)4455*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetGPUTile(MS_U8 u8win, EN_GOP_GPU_TILE_MODE TileMode)
4456*53ee8cc1Swenshuai.xi {
4457*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
4458*53ee8cc1Swenshuai.xi     EN_GOP_GPU_TILE_MODE mode;
4459*53ee8cc1Swenshuai.xi     mode = TileMode;
4460*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4461*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_GPUTILE;
4462*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8win;
4463*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)&mode;
4464*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(EN_GOP_GPU_TILE_MODE);
4465*53ee8cc1Swenshuai.xi 
4466*53ee8cc1Swenshuai.xi 
4467*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4468*53ee8cc1Swenshuai.xi     {
4469*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4470*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4471*53ee8cc1Swenshuai.xi     }
4472*53ee8cc1Swenshuai.xi 
4473*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4474*53ee8cc1Swenshuai.xi 
4475*53ee8cc1Swenshuai.xi }
4476*53ee8cc1Swenshuai.xi 
4477*53ee8cc1Swenshuai.xi /********************************************************************************/
4478*53ee8cc1Swenshuai.xi /// Set GOP TLB Mode
4479*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: only init by which gop
4480*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
4481*53ee8cc1Swenshuai.xi ///   - # TRUE enable
4482*53ee8cc1Swenshuai.xi ///   - # FALSE disable
4483*53ee8cc1Swenshuai.xi /// @param tlbaddr \b TLB entry base address
4484*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4485*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_TLB_Enable(MS_U8 u8GOP,MS_BOOL bEnable,MS_PHY phytlbaddr)4486*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_TLB_Enable(MS_U8 u8GOP,MS_BOOL bEnable, MS_PHY phytlbaddr)
4487*53ee8cc1Swenshuai.xi {
4488*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
4489*53ee8cc1Swenshuai.xi     GOP_TLB_Enable tlb_enable;
4490*53ee8cc1Swenshuai.xi 
4491*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4492*53ee8cc1Swenshuai.xi     tlb_enable.gop_idx = (MS_U32)u8GOP;
4493*53ee8cc1Swenshuai.xi     tlb_enable.bEn = bEnable;
4494*53ee8cc1Swenshuai.xi     tlb_enable.u64TLBAddr = phytlbaddr;
4495*53ee8cc1Swenshuai.xi 
4496*53ee8cc1Swenshuai.xi     ioctl_info.en_pro = E_GOP_GWIN_TLB_ENABLE;
4497*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
4498*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&tlb_enable;
4499*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_TLB_Enable);
4500*53ee8cc1Swenshuai.xi 
4501*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4502*53ee8cc1Swenshuai.xi     {
4503*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4504*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4505*53ee8cc1Swenshuai.xi     }
4506*53ee8cc1Swenshuai.xi 
4507*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4508*53ee8cc1Swenshuai.xi 
4509*53ee8cc1Swenshuai.xi }
4510*53ee8cc1Swenshuai.xi 
4511*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
4512*53ee8cc1Swenshuai.xi /// GOP Exit
4513*53ee8cc1Swenshuai.xi /// @param  void                \b IN: none
4514*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_Exit()4515*53ee8cc1Swenshuai.xi void MApi_GOP_Exit()
4516*53ee8cc1Swenshuai.xi {
4517*53ee8cc1Swenshuai.xi     //App call exit, should wait mutex return to avoid mutex conflict use with other thread.
4518*53ee8cc1Swenshuai.xi     //But do not need GOP_RETURN, because all mutex and resouce has been released in atexit.
4519*53ee8cc1Swenshuai.xi     GOP_INFO("---%s %d: PID[%td], TID[%td] tries to exit\n", __FUNCTION__, __LINE__, (ptrdiff_t)getpid(), (ptrdiff_t)MsOS_GetOSThreadID());
4520*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4521*53ee8cc1Swenshuai.xi #ifdef  MSOS_TYPE_LINUX
4522*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
4523*53ee8cc1Swenshuai.xi     MS_U32  value = 0;
4524*53ee8cc1Swenshuai.xi 
4525*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_AT_EXIT;
4526*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&value;
4527*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
4528*53ee8cc1Swenshuai.xi 
4529*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
4530*53ee8cc1Swenshuai.xi     {
4531*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4532*53ee8cc1Swenshuai.xi         return;
4533*53ee8cc1Swenshuai.xi     }
4534*53ee8cc1Swenshuai.xi #else
4535*53ee8cc1Swenshuai.xi     GOP_INFO("not enable MSOS_TYPE_LINUX\n");
4536*53ee8cc1Swenshuai.xi #endif
4537*53ee8cc1Swenshuai.xi }
4538*53ee8cc1Swenshuai.xi 
4539*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
4540*53ee8cc1Swenshuai.xi /// Initial individual GOP driver
4541*53ee8cc1Swenshuai.xi /// @param pGopInit \b IN:gop driver init info
4542*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: only init by which gop
4543*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4544*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4545*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_InitByGOP(GOP_InitInfo * pGopInit,MS_U8 u8GOP)4546*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_InitByGOP(GOP_InitInfo *pGopInit, MS_U8 u8GOP)
4547*53ee8cc1Swenshuai.xi {
4548*53ee8cc1Swenshuai.xi 
4549*53ee8cc1Swenshuai.xi     GOP_INIT_PARAM  ioctl_info;
4550*53ee8cc1Swenshuai.xi 
4551*53ee8cc1Swenshuai.xi     CheckXCOpen();
4552*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
4553*53ee8cc1Swenshuai.xi     _GOP_RegisterAllCBFunc();
4554*53ee8cc1Swenshuai.xi 
4555*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
4556*53ee8cc1Swenshuai.xi     ioctl_info.pInfo = (MS_U32*) pGopInit;
4557*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_InitInfo);
4558*53ee8cc1Swenshuai.xi 
4559*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_INIT,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4560*53ee8cc1Swenshuai.xi     {
4561*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4562*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
4563*53ee8cc1Swenshuai.xi     }
4564*53ee8cc1Swenshuai.xi #ifdef  MSOS_TYPE_LINUX
4565*53ee8cc1Swenshuai.xi     atexit(MApi_GOP_Exit);
4566*53ee8cc1Swenshuai.xi #endif
4567*53ee8cc1Swenshuai.xi     bInit =TRUE;
4568*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
4569*53ee8cc1Swenshuai.xi }
4570*53ee8cc1Swenshuai.xi 
4571*53ee8cc1Swenshuai.xi 
4572*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
4573*53ee8cc1Swenshuai.xi /// Initial all GOP driver (include gop0, gop1 ext..)
4574*53ee8cc1Swenshuai.xi /// @param pGopInit \b IN:gop driver init info
4575*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4576*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4577*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_GOP_Init(GOP_InitInfo * pGopInit)4578*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_Init(GOP_InitInfo *pGopInit)
4579*53ee8cc1Swenshuai.xi {
4580*53ee8cc1Swenshuai.xi     GOP_INIT_PARAM  ioctl_info;
4581*53ee8cc1Swenshuai.xi     MS_U32 i =0;
4582*53ee8cc1Swenshuai.xi 
4583*53ee8cc1Swenshuai.xi     CheckXCOpen();
4584*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
4585*53ee8cc1Swenshuai.xi     //init GOP0
4586*53ee8cc1Swenshuai.xi     _GOP_RegisterAllCBFunc();
4587*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = 0;
4588*53ee8cc1Swenshuai.xi     ioctl_info.pInfo = (MS_U32*) pGopInit;
4589*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_InitInfo);
4590*53ee8cc1Swenshuai.xi 
4591*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_INIT,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4592*53ee8cc1Swenshuai.xi     {
4593*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4594*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
4595*53ee8cc1Swenshuai.xi     }
4596*53ee8cc1Swenshuai.xi     //init others
4597*53ee8cc1Swenshuai.xi     for(i = 1;i<MApi_GOP_GWIN_GetMaxGOPNum();i++)
4598*53ee8cc1Swenshuai.xi     {
4599*53ee8cc1Swenshuai.xi         ioctl_info.gop_idx = i;
4600*53ee8cc1Swenshuai.xi         if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_INIT,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4601*53ee8cc1Swenshuai.xi         {
4602*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4603*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
4604*53ee8cc1Swenshuai.xi         }
4605*53ee8cc1Swenshuai.xi     }
4606*53ee8cc1Swenshuai.xi     bInit =TRUE;
4607*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
4608*53ee8cc1Swenshuai.xi }
4609*53ee8cc1Swenshuai.xi 
4610*53ee8cc1Swenshuai.xi /******************************************************************************/
4611*53ee8cc1Swenshuai.xi /// Set gwin fade in/out
4612*53ee8cc1Swenshuai.xi /// @param gId  \b IN: gwin id
4613*53ee8cc1Swenshuai.xi /// @param Width \b IN: gwin display width
4614*53ee8cc1Swenshuai.xi /// @param X_Start \b IN: gwin display H display starting position
4615*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4616*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4617*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetFadeInOut(MS_U8 gId,EN_GOP_FADE_TYPE eGwinFadeType,MS_BOOL bEnable,MS_U8 u8FadeRate)4618*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetFadeInOut(MS_U8 gId, EN_GOP_FADE_TYPE eGwinFadeType, MS_BOOL bEnable, MS_U8 u8FadeRate)
4619*53ee8cc1Swenshuai.xi {
4620*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret = GOP_API_SUCCESS;
4621*53ee8cc1Swenshuai.xi     GOP_SET_FADE_PARAM ioctl_info;
4622*53ee8cc1Swenshuai.xi     GOP_FADE_INFO fade_info;
4623*53ee8cc1Swenshuai.xi 
4624*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4625*53ee8cc1Swenshuai.xi 
4626*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_FADE_PARAM));
4627*53ee8cc1Swenshuai.xi     memset(&fade_info, 0x0, sizeof(GOP_FADE_INFO));
4628*53ee8cc1Swenshuai.xi 
4629*53ee8cc1Swenshuai.xi     fade_info.gwin_idx = gId;
4630*53ee8cc1Swenshuai.xi     fade_info.bEnable = bEnable;
4631*53ee8cc1Swenshuai.xi     fade_info.eGwinFadeType = (EN_GOP_SET_FADE_TYPE)eGwinFadeType;
4632*53ee8cc1Swenshuai.xi     fade_info.u8FadeRate = u8FadeRate;
4633*53ee8cc1Swenshuai.xi 
4634*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&fade_info;
4635*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_FADE_INFO);
4636*53ee8cc1Swenshuai.xi 
4637*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_FADE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
4638*53ee8cc1Swenshuai.xi     {
4639*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4640*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
4641*53ee8cc1Swenshuai.xi     }
4642*53ee8cc1Swenshuai.xi 
4643*53ee8cc1Swenshuai.xi     GOP_RETURN(ret);
4644*53ee8cc1Swenshuai.xi }
4645*53ee8cc1Swenshuai.xi 
4646*53ee8cc1Swenshuai.xi /******************************************************************************/
4647*53ee8cc1Swenshuai.xi /// Set a GWIN's H display size
4648*53ee8cc1Swenshuai.xi /// @param gId  \b IN: gwin id
4649*53ee8cc1Swenshuai.xi /// @param Width \b IN: gwin display width
4650*53ee8cc1Swenshuai.xi /// @param X_Start \b IN: gwin display H display starting position
4651*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4652*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4653*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetHDisplaySize(MS_U8 gId,MS_U16 Width,MS_U16 X_Start)4654*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetHDisplaySize(MS_U8 gId, MS_U16 Width,MS_U16 X_Start)
4655*53ee8cc1Swenshuai.xi {
4656*53ee8cc1Swenshuai.xi     GOP_GWIN_SETWININFO_PARAM WinInfo;
4657*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO  BuffInfo;
4658*53ee8cc1Swenshuai.xi 
4659*53ee8cc1Swenshuai.xi 
4660*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4661*53ee8cc1Swenshuai.xi 
4662*53ee8cc1Swenshuai.xi     memset(&WinInfo, 0, sizeof(GOP_GWIN_SETWININFO_PARAM));
4663*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0, sizeof(GOP_BUFFER_INFO));
4664*53ee8cc1Swenshuai.xi 
4665*53ee8cc1Swenshuai.xi 
4666*53ee8cc1Swenshuai.xi     WinInfo.GwinId = gId;
4667*53ee8cc1Swenshuai.xi     WinInfo.pinfo = (MS_U32*)&BuffInfo;
4668*53ee8cc1Swenshuai.xi     WinInfo.u32Size = sizeof(GOP_BUFFER_INFO);
4669*53ee8cc1Swenshuai.xi 
4670*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_WININFO,(void*)&WinInfo) != UTOPIA_STATUS_SUCCESS)
4671*53ee8cc1Swenshuai.xi     {
4672*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4673*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4674*53ee8cc1Swenshuai.xi     }
4675*53ee8cc1Swenshuai.xi 
4676*53ee8cc1Swenshuai.xi 
4677*53ee8cc1Swenshuai.xi     if (X_Start % 4 != 0 )
4678*53ee8cc1Swenshuai.xi     {
4679*53ee8cc1Swenshuai.xi        X_Start = (X_Start +2) / 4; // rounding
4680*53ee8cc1Swenshuai.xi        X_Start = X_Start * 4;
4681*53ee8cc1Swenshuai.xi     }
4682*53ee8cc1Swenshuai.xi 
4683*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = X_Start;
4684*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = Width;
4685*53ee8cc1Swenshuai.xi     BuffInfo.width = Width;
4686*53ee8cc1Swenshuai.xi 
4687*53ee8cc1Swenshuai.xi 
4688*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_WININFO,(void*)&WinInfo) != UTOPIA_STATUS_SUCCESS)
4689*53ee8cc1Swenshuai.xi     {
4690*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4691*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4692*53ee8cc1Swenshuai.xi     }
4693*53ee8cc1Swenshuai.xi 
4694*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4695*53ee8cc1Swenshuai.xi 
4696*53ee8cc1Swenshuai.xi }
4697*53ee8cc1Swenshuai.xi 
4698*53ee8cc1Swenshuai.xi /******************************************************************************/
4699*53ee8cc1Swenshuai.xi /// Move a GWIN's display left top position
4700*53ee8cc1Swenshuai.xi /// @param gId  \b IN : GWINID
4701*53ee8cc1Swenshuai.xi /// @param dispX \b IN: left top x
4702*53ee8cc1Swenshuai.xi /// @param dispY \b IN: left top y
4703*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4704*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4705*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetWinDispPosition(MS_U8 gId,MS_U16 dispX,MS_U16 dispY)4706*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetWinDispPosition(MS_U8 gId, MS_U16 dispX, MS_U16 dispY)
4707*53ee8cc1Swenshuai.xi {
4708*53ee8cc1Swenshuai.xi 
4709*53ee8cc1Swenshuai.xi     GOP_GWIN_SETWININFO_PARAM WinInfo;
4710*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO  BuffInfo;
4711*53ee8cc1Swenshuai.xi 
4712*53ee8cc1Swenshuai.xi 
4713*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4714*53ee8cc1Swenshuai.xi 
4715*53ee8cc1Swenshuai.xi     memset(&WinInfo, 0, sizeof(GOP_GWIN_SETWININFO_PARAM));
4716*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0, sizeof(GOP_BUFFER_INFO));
4717*53ee8cc1Swenshuai.xi 
4718*53ee8cc1Swenshuai.xi 
4719*53ee8cc1Swenshuai.xi     WinInfo.GwinId = gId;
4720*53ee8cc1Swenshuai.xi     WinInfo.pinfo = (MS_U32*)&BuffInfo;
4721*53ee8cc1Swenshuai.xi     WinInfo.u32Size = sizeof(GOP_BUFFER_INFO);
4722*53ee8cc1Swenshuai.xi 
4723*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_WININFO,(void*)&WinInfo) != UTOPIA_STATUS_SUCCESS)
4724*53ee8cc1Swenshuai.xi     {
4725*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4726*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4727*53ee8cc1Swenshuai.xi     }
4728*53ee8cc1Swenshuai.xi 
4729*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = dispX;
4730*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = dispY;
4731*53ee8cc1Swenshuai.xi 
4732*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_WININFO,(void*)&WinInfo) != UTOPIA_STATUS_SUCCESS)
4733*53ee8cc1Swenshuai.xi     {
4734*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4735*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4736*53ee8cc1Swenshuai.xi     }
4737*53ee8cc1Swenshuai.xi 
4738*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4739*53ee8cc1Swenshuai.xi 
4740*53ee8cc1Swenshuai.xi }
4741*53ee8cc1Swenshuai.xi 
4742*53ee8cc1Swenshuai.xi 
4743*53ee8cc1Swenshuai.xi /******************************************************************************/
4744*53ee8cc1Swenshuai.xi /// Delete the GWIN, free corresponding frame buffer
4745*53ee8cc1Swenshuai.xi /// @param gId \b IN \copydoc GWINID
4746*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4747*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4748*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_DestroyWin(MS_U8 gId)4749*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_DestroyWin(MS_U8 gId)
4750*53ee8cc1Swenshuai.xi {
4751*53ee8cc1Swenshuai.xi     GOP_GWIN_DESTROY_PARAM ioctl_info;
4752*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4753*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_DESTROY_PARAM));
4754*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = gId;
4755*53ee8cc1Swenshuai.xi 
4756*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_DESTROY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
4757*53ee8cc1Swenshuai.xi     {
4758*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4759*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4760*53ee8cc1Swenshuai.xi     }
4761*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4762*53ee8cc1Swenshuai.xi 
4763*53ee8cc1Swenshuai.xi }
4764*53ee8cc1Swenshuai.xi 
4765*53ee8cc1Swenshuai.xi 
4766*53ee8cc1Swenshuai.xi /******************************************************************************/
4767*53ee8cc1Swenshuai.xi /// Get corresponding frame buffer attribute from a GWIN id
4768*53ee8cc1Swenshuai.xi /// @param gId \b IN GWINID
4769*53ee8cc1Swenshuai.xi /// @param x0 \b OUT buffer to store left top x
4770*53ee8cc1Swenshuai.xi /// @param y0 \b OUT buffer to store left top y
4771*53ee8cc1Swenshuai.xi /// @param width \b OUT buffer to store width
4772*53ee8cc1Swenshuai.xi /// @param height \b OUT buffer to store height
4773*53ee8cc1Swenshuai.xi /// @param fbPitch \b OUT buffer to store pitch
4774*53ee8cc1Swenshuai.xi /// @param fbFmt \b OUT buffer to store FB format
4775*53ee8cc1Swenshuai.xi /// @param addr \b OUT buffer to store addr
4776*53ee8cc1Swenshuai.xi /// @param size \b OUT buffer to store size
4777*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4778*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4779*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetWinAttr(MS_U8 gId,MS_U16 * x0,MS_U16 * y0,MS_U16 * width,MS_U16 * height,MS_U16 * fbPitch,MS_U16 * fbFmt,MS_PHY * addr,MS_U32 * size)4780*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetWinAttr(MS_U8 gId, MS_U16 *x0, MS_U16 *y0, MS_U16 *width, MS_U16 *height,  MS_U16 *fbPitch, MS_U16 *fbFmt, MS_PHY *addr, MS_U32 *size)
4781*53ee8cc1Swenshuai.xi {
4782*53ee8cc1Swenshuai.xi 
4783*53ee8cc1Swenshuai.xi     GOP_GWIN_SETWININFO_PARAM WinInfo;
4784*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO  BuffInfo;
4785*53ee8cc1Swenshuai.xi 
4786*53ee8cc1Swenshuai.xi 
4787*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4788*53ee8cc1Swenshuai.xi 
4789*53ee8cc1Swenshuai.xi     memset(&WinInfo, 0, sizeof(GOP_GWIN_SETWININFO_PARAM));
4790*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0, sizeof(GOP_BUFFER_INFO));
4791*53ee8cc1Swenshuai.xi 
4792*53ee8cc1Swenshuai.xi 
4793*53ee8cc1Swenshuai.xi     WinInfo.GwinId = gId;
4794*53ee8cc1Swenshuai.xi     WinInfo.pinfo = (MS_U32*)&BuffInfo;
4795*53ee8cc1Swenshuai.xi     WinInfo.u32Size = sizeof(GOP_BUFFER_INFO);
4796*53ee8cc1Swenshuai.xi 
4797*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_WININFO,(void*)&WinInfo) != UTOPIA_STATUS_SUCCESS)
4798*53ee8cc1Swenshuai.xi     {
4799*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4800*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4801*53ee8cc1Swenshuai.xi     }
4802*53ee8cc1Swenshuai.xi 
4803*53ee8cc1Swenshuai.xi     *x0 = BuffInfo.disp_rect.x;
4804*53ee8cc1Swenshuai.xi     *y0 = BuffInfo.disp_rect.y;
4805*53ee8cc1Swenshuai.xi     *width = BuffInfo.width;
4806*53ee8cc1Swenshuai.xi     *height = BuffInfo.height;
4807*53ee8cc1Swenshuai.xi     *fbPitch = BuffInfo.pitch;
4808*53ee8cc1Swenshuai.xi     *fbFmt = BuffInfo.fbFmt;
4809*53ee8cc1Swenshuai.xi     *addr = BuffInfo.addr;
4810*53ee8cc1Swenshuai.xi     *size = BuffInfo.width * BuffInfo.height * GOP_GetBPP((EN_GOP_COLOR_TYPE)BuffInfo.fbFmt)/8;
4811*53ee8cc1Swenshuai.xi 
4812*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4813*53ee8cc1Swenshuai.xi }
4814*53ee8cc1Swenshuai.xi 
4815*53ee8cc1Swenshuai.xi /********************************************************************************/
4816*53ee8cc1Swenshuai.xi /// Get max V-End from all GWIN
4817*53ee8cc1Swenshuai.xi /// @param bActive \b IN
4818*53ee8cc1Swenshuai.xi ///   - # TRUE enable
4819*53ee8cc1Swenshuai.xi ///   - # FALSE disable
4820*53ee8cc1Swenshuai.xi /// @return max V-End value from all GWIN
4821*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_GetMaxVEnd(MS_BOOL bActive)4822*53ee8cc1Swenshuai.xi MS_U16 MApi_GOP_GWIN_GetMaxVEnd(MS_BOOL bActive)
4823*53ee8cc1Swenshuai.xi {
4824*53ee8cc1Swenshuai.xi 
4825*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4826*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT\n",__FUNCTION__);
4827*53ee8cc1Swenshuai.xi     GOP_RETURN(0);
4828*53ee8cc1Swenshuai.xi }
4829*53ee8cc1Swenshuai.xi 
4830*53ee8cc1Swenshuai.xi 
4831*53ee8cc1Swenshuai.xi /******************************************************************************/
4832*53ee8cc1Swenshuai.xi /// Get maximum frame buffer number
4833*53ee8cc1Swenshuai.xi /// @return maximum frame buffer number
4834*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetMaxFBNum(void)4835*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_GetMaxFBNum(void)
4836*53ee8cc1Swenshuai.xi {
4837*53ee8cc1Swenshuai.xi     MS_U32 u32MaxFBNum;
4838*53ee8cc1Swenshuai.xi     u32MaxFBNum = MApi_GOP_GWIN_GetMax32FBNum ();
4839*53ee8cc1Swenshuai.xi     if( u32MaxFBNum > 256) //Out of MS_U8
4840*53ee8cc1Swenshuai.xi     {
4841*53ee8cc1Swenshuai.xi         GOP_WARN( "[Warning] %s %d( u32MaxFBNum:%td....)out of MS_U8 bound, please to use MApi_GOP_GWIN_GetMax32FBNum()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32MaxFBNum );
4842*53ee8cc1Swenshuai.xi     }
4843*53ee8cc1Swenshuai.xi     return u32MaxFBNum;
4844*53ee8cc1Swenshuai.xi }
4845*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_GetMax32FBNum(void)4846*53ee8cc1Swenshuai.xi MS_U32 MApi_GOP_GWIN_GetMax32FBNum(void)
4847*53ee8cc1Swenshuai.xi {
4848*53ee8cc1Swenshuai.xi     MS_PHY u32FBIDNum=INVALID_POOL_NEXT_FBID;
4849*53ee8cc1Swenshuai.xi     MApi_GOP_GetConfigEx(0, E_GOP_GET_MAXFBNUM, &u32FBIDNum);
4850*53ee8cc1Swenshuai.xi     return u32FBIDNum;
4851*53ee8cc1Swenshuai.xi }
4852*53ee8cc1Swenshuai.xi 
4853*53ee8cc1Swenshuai.xi 
4854*53ee8cc1Swenshuai.xi /********************************************************************************/
4855*53ee8cc1Swenshuai.xi /// Set second frame buffer pool
4856*53ee8cc1Swenshuai.xi /// @param u32DblHeapAdr \b IN: second frame buffer pool starting address
4857*53ee8cc1Swenshuai.xi /// @param u32DblHeapLen \b IN: second frame buffer pool length
4858*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4859*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4860*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetDoubleHeap(MS_U32 u32DblHeapAdr,MS_U32 u32DblHeapLen)4861*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetDoubleHeap(MS_U32 u32DblHeapAdr, MS_U32 u32DblHeapLen)
4862*53ee8cc1Swenshuai.xi {
4863*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT\n",__FUNCTION__);
4864*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
4865*53ee8cc1Swenshuai.xi }
4866*53ee8cc1Swenshuai.xi 
4867*53ee8cc1Swenshuai.xi 
4868*53ee8cc1Swenshuai.xi /******************************************************************************/
4869*53ee8cc1Swenshuai.xi /// Create frame buffer from given frame buffer id . User should call MApi_GOP_GWIN_GetFree32FBID()
4870*53ee8cc1Swenshuai.xi /// first and then use this frame buffer id as this function input parameter
4871*53ee8cc1Swenshuai.xi /// @param fbId  \b IN frame buffer id
4872*53ee8cc1Swenshuai.xi /// @param dispX \b IN display x
4873*53ee8cc1Swenshuai.xi /// @param dispY \b IN display y
4874*53ee8cc1Swenshuai.xi /// @param width \b IN width
4875*53ee8cc1Swenshuai.xi /// @param height \b IN height
4876*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN frame buffer format
4877*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4878*53ee8cc1Swenshuai.xi /// @return GOP_API_CRT_GWIN_NOAVAIL - Failure
4879*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_CreateFB(MS_U8 fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt)4880*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateFB(MS_U8 fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height,  MS_U16 fbFmt)
4881*53ee8cc1Swenshuai.xi {
4882*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Create32FB((MS_U32)fbId, dispX, dispY, width, height, fbFmt);
4883*53ee8cc1Swenshuai.xi }
4884*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Create32FB(MS_U32 u32fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt)4885*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Create32FB(MS_U32 u32fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height,  MS_U16 fbFmt)
4886*53ee8cc1Swenshuai.xi {
4887*53ee8cc1Swenshuai.xi     GOP_CREATE_BUFFER_PARAM ioctl_info;
4888*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
4889*53ee8cc1Swenshuai.xi 
4890*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4891*53ee8cc1Swenshuai.xi 
4892*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_CREATE_BUFFER_PARAM));
4893*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
4894*53ee8cc1Swenshuai.xi 
4895*53ee8cc1Swenshuai.xi     ioctl_info.fb_type  = GOP_CREATE_BUFFER;
4896*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
4897*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
4898*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32fbId;
4899*53ee8cc1Swenshuai.xi 
4900*53ee8cc1Swenshuai.xi     BuffInfo.addr = 0x0;
4901*53ee8cc1Swenshuai.xi     BuffInfo.fbFmt = fbFmt;
4902*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = dispX;
4903*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = dispY;
4904*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = width;
4905*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.h = height;
4906*53ee8cc1Swenshuai.xi 
4907*53ee8cc1Swenshuai.xi     BuffInfo.width = width;
4908*53ee8cc1Swenshuai.xi     BuffInfo.height = height;
4909*53ee8cc1Swenshuai.xi 
4910*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_CREATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
4911*53ee8cc1Swenshuai.xi     {
4912*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4913*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
4914*53ee8cc1Swenshuai.xi     }
4915*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4916*53ee8cc1Swenshuai.xi 
4917*53ee8cc1Swenshuai.xi }
4918*53ee8cc1Swenshuai.xi 
4919*53ee8cc1Swenshuai.xi 
4920*53ee8cc1Swenshuai.xi /******************************************************************************/
4921*53ee8cc1Swenshuai.xi /// Create frame buffer from given frame buffer id and dram address. User should call MApi_GOP_GWIN_GetFree32FBID()
4922*53ee8cc1Swenshuai.xi /// first and then use this frame buffer id as this function input parameter
4923*53ee8cc1Swenshuai.xi /// @param fbId  \b IN: frame buffer id
4924*53ee8cc1Swenshuai.xi /// @param dispX \b IN: frame buffer starting x
4925*53ee8cc1Swenshuai.xi /// @param dispY \b IN: frame buffer starting y
4926*53ee8cc1Swenshuai.xi /// @param width \b IN: frame buffer width
4927*53ee8cc1Swenshuai.xi /// @param height \b IN: frame buffer height
4928*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: frame buffer color format
4929*53ee8cc1Swenshuai.xi /// @param u32FbAddr \b IN: frame buffer starting address
4930*53ee8cc1Swenshuai.xi /// @param FBString \b IN: create frame buffer by which one application
4931*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4932*53ee8cc1Swenshuai.xi /// @return GOP_API_CRT_GWIN_NOAVAIL - Failure
4933*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_CreateFBbyStaticAddr2(MS_U8 fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt,MS_PHY phyFbAddr,EN_GOP_FRAMEBUFFER_STRING FBString)4934*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateFBbyStaticAddr2(MS_U8 fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height,  MS_U16 fbFmt, MS_PHY phyFbAddr ,EN_GOP_FRAMEBUFFER_STRING FBString)
4935*53ee8cc1Swenshuai.xi {
4936*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Create32FBbyStaticAddr2((MS_U32)fbId, dispX, dispY, width, height, fbFmt, phyFbAddr, FBString);
4937*53ee8cc1Swenshuai.xi }
4938*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Create32FBbyStaticAddr2(MS_U32 u32fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt,MS_PHY phyFbAddr,EN_GOP_FRAMEBUFFER_STRING FBString)4939*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Create32FBbyStaticAddr2(MS_U32 u32fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height,  MS_U16 fbFmt, MS_PHY phyFbAddr ,EN_GOP_FRAMEBUFFER_STRING FBString)
4940*53ee8cc1Swenshuai.xi {
4941*53ee8cc1Swenshuai.xi     GOP_CREATE_BUFFER_PARAM ioctl_info;
4942*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
4943*53ee8cc1Swenshuai.xi     GOP_ENTRY();
4944*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_CREATE_BUFFER_PARAM));
4945*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
4946*53ee8cc1Swenshuai.xi 
4947*53ee8cc1Swenshuai.xi     ioctl_info.fb_type  = GOP_CREATE_BUFFER_BYADDR;
4948*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
4949*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
4950*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32fbId;
4951*53ee8cc1Swenshuai.xi 
4952*53ee8cc1Swenshuai.xi     BuffInfo.addr = phyFbAddr;
4953*53ee8cc1Swenshuai.xi     BuffInfo.fbFmt = fbFmt;
4954*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = dispX;
4955*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = dispY;
4956*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = width;
4957*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.h = height;
4958*53ee8cc1Swenshuai.xi 
4959*53ee8cc1Swenshuai.xi     BuffInfo.width = width;
4960*53ee8cc1Swenshuai.xi     BuffInfo.height = height;
4961*53ee8cc1Swenshuai.xi     BuffInfo.FBString = FBString;
4962*53ee8cc1Swenshuai.xi 
4963*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_CREATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
4964*53ee8cc1Swenshuai.xi     {
4965*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
4966*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
4967*53ee8cc1Swenshuai.xi     }
4968*53ee8cc1Swenshuai.xi 
4969*53ee8cc1Swenshuai.xi 
4970*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
4971*53ee8cc1Swenshuai.xi 
4972*53ee8cc1Swenshuai.xi }
4973*53ee8cc1Swenshuai.xi 
4974*53ee8cc1Swenshuai.xi 
4975*53ee8cc1Swenshuai.xi /******************************************************************************/
4976*53ee8cc1Swenshuai.xi /// Create frame buffer from given dram address
4977*53ee8cc1Swenshuai.xi /// @param width  \b IN: frame buffer width
4978*53ee8cc1Swenshuai.xi /// @param height \b IN: frame buffer height
4979*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: frame buffer color format
4980*53ee8cc1Swenshuai.xi /// @param u32FbAddr \b IN: frame buffer starting address
4981*53ee8cc1Swenshuai.xi /// @param pitch \b IN: frame buffer pitch
4982*53ee8cc1Swenshuai.xi /// @param ret_FBId \b OUT: frame buffer id
4983*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
4984*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
4985*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_CreateFBFrom3rdSurf(MS_U16 width,MS_U16 height,MS_U16 fbFmt,MS_PHY phyFbAddr,MS_U16 pitch,MS_U8 * ret_FBId)4986*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateFBFrom3rdSurf(MS_U16 width, MS_U16 height,  MS_U16 fbFmt, MS_PHY phyFbAddr, MS_U16 pitch, MS_U8* ret_FBId)
4987*53ee8cc1Swenshuai.xi {
4988*53ee8cc1Swenshuai.xi     MS_U32 u32ret_FBID = 0;
4989*53ee8cc1Swenshuai.xi     MS_U8 u8result = 0;
4990*53ee8cc1Swenshuai.xi     u8result = MApi_GOP_GWIN_Create32FBFrom3rdSurf(width, height, fbFmt, phyFbAddr, pitch, &u32ret_FBID);
4991*53ee8cc1Swenshuai.xi     if(u32ret_FBID > 256)//Out of MS_U8
4992*53ee8cc1Swenshuai.xi     {
4993*53ee8cc1Swenshuai.xi         GOP_WARN( "[Warning] %s %d( ret_FBID:%td....)out of MS_U8 bound, please to use MApi_GOP_GWIN_Create32FBFrom3rdSurf()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32ret_FBID );
4994*53ee8cc1Swenshuai.xi     }
4995*53ee8cc1Swenshuai.xi     *ret_FBId = (MS_U8)u32ret_FBID;
4996*53ee8cc1Swenshuai.xi     return u8result;
4997*53ee8cc1Swenshuai.xi }
4998*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Create32FBFrom3rdSurf(MS_U16 width,MS_U16 height,MS_U16 fbFmt,MS_PHY phyFbAddr,MS_U16 pitch,MS_U32 * u32ret_FBId)4999*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Create32FBFrom3rdSurf(MS_U16 width, MS_U16 height,  MS_U16 fbFmt, MS_PHY phyFbAddr, MS_U16 pitch, MS_U32* u32ret_FBId)
5000*53ee8cc1Swenshuai.xi {
5001*53ee8cc1Swenshuai.xi 
5002*53ee8cc1Swenshuai.xi     GOP_CREATE_BUFFER_PARAM ioctl_info;
5003*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
5004*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5005*53ee8cc1Swenshuai.xi 
5006*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_CREATE_BUFFER_PARAM));
5007*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
5008*53ee8cc1Swenshuai.xi 
5009*53ee8cc1Swenshuai.xi     ioctl_info.fb_type  = GOP_CREATE_BUFFER_BYADDR;
5010*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
5011*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
5012*53ee8cc1Swenshuai.xi     *u32ret_FBId = MApi_GOP_GWIN_GetFree32FBID();
5013*53ee8cc1Swenshuai.xi     ioctl_info.fbid = *u32ret_FBId;
5014*53ee8cc1Swenshuai.xi 
5015*53ee8cc1Swenshuai.xi     BuffInfo.addr = phyFbAddr;
5016*53ee8cc1Swenshuai.xi     BuffInfo.fbFmt = fbFmt;
5017*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = 0;
5018*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = 0;
5019*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = width;
5020*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.h = height;
5021*53ee8cc1Swenshuai.xi 
5022*53ee8cc1Swenshuai.xi     BuffInfo.width = width;
5023*53ee8cc1Swenshuai.xi     BuffInfo.height = height;
5024*53ee8cc1Swenshuai.xi     BuffInfo.pitch = pitch;
5025*53ee8cc1Swenshuai.xi 
5026*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_CREATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5027*53ee8cc1Swenshuai.xi     {
5028*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5029*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
5030*53ee8cc1Swenshuai.xi     }
5031*53ee8cc1Swenshuai.xi 
5032*53ee8cc1Swenshuai.xi 
5033*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5034*53ee8cc1Swenshuai.xi 
5035*53ee8cc1Swenshuai.xi }
5036*53ee8cc1Swenshuai.xi 
5037*53ee8cc1Swenshuai.xi 
5038*53ee8cc1Swenshuai.xi /******************************************************************************/
5039*53ee8cc1Swenshuai.xi /// Create frame buffer from given frame buffer id and dram address. User should call MApi_GOP_GWIN_GetFree32FBID()
5040*53ee8cc1Swenshuai.xi /// first and then use this frame buffer id as this function input parameter
5041*53ee8cc1Swenshuai.xi /// @param fbId  \b IN: frame buffer id
5042*53ee8cc1Swenshuai.xi /// @param dispX \b IN: frame buffer starting x
5043*53ee8cc1Swenshuai.xi /// @param dispY \b IN: frame buffer starting y
5044*53ee8cc1Swenshuai.xi /// @param width \b IN: frame buffer width
5045*53ee8cc1Swenshuai.xi /// @param height \b IN: frame buffer height
5046*53ee8cc1Swenshuai.xi /// @param fbFmt \b IN: frame buffer color format
5047*53ee8cc1Swenshuai.xi /// @param u32FbAddr \b IN: frame buffer starting address
5048*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5049*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5050*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_CreateFBbyStaticAddr(MS_U8 fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt,MS_PHY phyFbAddr)5051*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_CreateFBbyStaticAddr(MS_U8 fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height,  MS_U16 fbFmt, MS_PHY phyFbAddr)
5052*53ee8cc1Swenshuai.xi {
5053*53ee8cc1Swenshuai.xi      return MApi_GOP_GWIN_Create32FBbyStaticAddr((MS_U32)fbId, dispX, dispY, width, height,  fbFmt, phyFbAddr);
5054*53ee8cc1Swenshuai.xi }
5055*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Create32FBbyStaticAddr(MS_U32 u32fbId,MS_U16 dispX,MS_U16 dispY,MS_U16 width,MS_U16 height,MS_U16 fbFmt,MS_PHY phyFbAddr)5056*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GWIN_Create32FBbyStaticAddr(MS_U32 u32fbId, MS_U16 dispX, MS_U16 dispY, MS_U16 width, MS_U16 height,  MS_U16 fbFmt, MS_PHY phyFbAddr)
5057*53ee8cc1Swenshuai.xi {
5058*53ee8cc1Swenshuai.xi      return MApi_GOP_GWIN_Create32FBbyStaticAddr2(u32fbId, dispX, dispY, width, height,  fbFmt, phyFbAddr, E_GOP_FB_NULL);
5059*53ee8cc1Swenshuai.xi }
5060*53ee8cc1Swenshuai.xi 
5061*53ee8cc1Swenshuai.xi /******************************************************************************/
5062*53ee8cc1Swenshuai.xi /// Set GE to render on the frame buffer
5063*53ee8cc1Swenshuai.xi /// @param fbId \b IN: frame buffer id
5064*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5065*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5066*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_Switch2FB(MS_U8 fbId)5067*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Switch2FB(MS_U8 fbId)
5068*53ee8cc1Swenshuai.xi {
5069*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Switch2_32FB((MS_U32)fbId);
5070*53ee8cc1Swenshuai.xi }
5071*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Switch2_32FB(MS_U32 u32fbId)5072*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Switch2_32FB(MS_U32 u32fbId)
5073*53ee8cc1Swenshuai.xi {
5074*53ee8cc1Swenshuai.xi     GOP_SELECTION_PROPERTY_PARAM ioctl_info;
5075*53ee8cc1Swenshuai.xi     GOP_CBFmtInfo* pCBFmtInfo=NULL;
5076*53ee8cc1Swenshuai.xi 
5077*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5078*53ee8cc1Swenshuai.xi     pCBFmtInfo = (PGOP_CBFmtInfo)malloc(sizeof(GOP_CBFmtInfo));
5079*53ee8cc1Swenshuai.xi 	memset(pCBFmtInfo, 0x0, sizeof(GOP_CBFmtInfo));
5080*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SELECTION_PROPERTY_PARAM));
5081*53ee8cc1Swenshuai.xi     ioctl_info.sel_type = EN_GOP_SEL_FB;
5082*53ee8cc1Swenshuai.xi     ioctl_info.id = u32fbId;
5083*53ee8cc1Swenshuai.xi     ioctl_info.pinfo = (MS_U32*)pCBFmtInfo;
5084*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_CBFmtInfo);
5085*53ee8cc1Swenshuai.xi 
5086*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SELECTION,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5087*53ee8cc1Swenshuai.xi     {
5088*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5089*53ee8cc1Swenshuai.xi         free(pCBFmtInfo);
5090*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5091*53ee8cc1Swenshuai.xi     }
5092*53ee8cc1Swenshuai.xi     fpSetFBFmt(pCBFmtInfo->u16Pitch,pCBFmtInfo->u64Addr,pCBFmtInfo->u16Fmt);
5093*53ee8cc1Swenshuai.xi 
5094*53ee8cc1Swenshuai.xi     free(pCBFmtInfo);
5095*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5096*53ee8cc1Swenshuai.xi 
5097*53ee8cc1Swenshuai.xi }
5098*53ee8cc1Swenshuai.xi 
5099*53ee8cc1Swenshuai.xi 
5100*53ee8cc1Swenshuai.xi /******************************************************************************/
5101*53ee8cc1Swenshuai.xi /// Set Flip GWIN frame buffer
5102*53ee8cc1Swenshuai.xi /// @param gWinId \b IN: gwin id
5103*53ee8cc1Swenshuai.xi /// @param fbId \b IN: frame buffer id
5104*53ee8cc1Swenshuai.xi /// @param u16WaitTagID \b IN: WaitTagID
5105*53ee8cc1Swenshuai.xi /// @param pU16QueueCnt \b IN: Queue count
5106*53ee8cc1Swenshuai.xi /// @return TRUE or FALSE
5107*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_Switch_GWIN_2_FB(MS_U8 gWinId,MS_U8 fbId,MS_U16 u16WaitTagID,MS_U16 * pU16QueueCnt)5108*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_Switch_GWIN_2_FB(MS_U8 gWinId, MS_U8 fbId, MS_U16 u16WaitTagID, MS_U16 *pU16QueueCnt)
5109*53ee8cc1Swenshuai.xi {
5110*53ee8cc1Swenshuai.xi     MS_U32 u32QueueCnt = 0;
5111*53ee8cc1Swenshuai.xi     MS_BOOL bResult = FALSE;
5112*53ee8cc1Swenshuai.xi 
5113*53ee8cc1Swenshuai.xi     u32QueueCnt = (MS_U32)*pU16QueueCnt;
5114*53ee8cc1Swenshuai.xi     bResult = MApi_GOP_Switch_GWIN_2_32FB(gWinId, (MS_U32)fbId, (MS_U32)u16WaitTagID, &u32QueueCnt);
5115*53ee8cc1Swenshuai.xi     *pU16QueueCnt = (MS_U16)u32QueueCnt;
5116*53ee8cc1Swenshuai.xi     if( u32QueueCnt > 65536) //Out of MS_U16
5117*53ee8cc1Swenshuai.xi     {
5118*53ee8cc1Swenshuai.xi         printf( "[Warning] %s %d( QueueCnt:%td....)out of MS_U16 bound, please to use MApi_GOP_Switch_GWIN_2_32FB()\n",__FUNCTION__,__LINE__,(ptrdiff_t)u32QueueCnt);
5119*53ee8cc1Swenshuai.xi     }
5120*53ee8cc1Swenshuai.xi 
5121*53ee8cc1Swenshuai.xi     return bResult;
5122*53ee8cc1Swenshuai.xi 
5123*53ee8cc1Swenshuai.xi }
5124*53ee8cc1Swenshuai.xi 
MApi_GOP_Switch_GWIN_2_32FB(MS_U8 gWinId,MS_U32 u32fbId,MS_U32 u32WaitTagID,MS_U32 * pU32QueueCnt)5125*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_Switch_GWIN_2_32FB(MS_U8 gWinId, MS_U32 u32fbId, MS_U32 u32WaitTagID, MS_U32* pU32QueueCnt)
5126*53ee8cc1Swenshuai.xi {
5127*53ee8cc1Swenshuai.xi 
5128*53ee8cc1Swenshuai.xi     GOP_GWIN_GFLIP_SWITCH_GWIN_PARAM ioctl_info;
5129*53ee8cc1Swenshuai.xi     GOP_GWIN_FLIP_WIN_INFO flipInfo;
5130*53ee8cc1Swenshuai.xi 
5131*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5132*53ee8cc1Swenshuai.xi 
5133*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_GFLIP_SWITCH_GWIN_PARAM));
5134*53ee8cc1Swenshuai.xi     memset(&flipInfo, 0x0, sizeof(GOP_GWIN_FLIP_WIN_INFO));
5135*53ee8cc1Swenshuai.xi 
5136*53ee8cc1Swenshuai.xi     flipInfo.enFlip    = GOP_FLIP_BY_FBID;
5137*53ee8cc1Swenshuai.xi     flipInfo.b3DEnable = FALSE;
5138*53ee8cc1Swenshuai.xi     flipInfo.GwinId    = gWinId;
5139*53ee8cc1Swenshuai.xi     flipInfo.FbId      = u32fbId;
5140*53ee8cc1Swenshuai.xi     flipInfo.SubFbId   = u32fbId;
5141*53ee8cc1Swenshuai.xi     flipInfo.WaitTagID = u32WaitTagID;
5142*53ee8cc1Swenshuai.xi     flipInfo.pQueueCnt = (MS_U32*)pU32QueueCnt;
5143*53ee8cc1Swenshuai.xi 
5144*53ee8cc1Swenshuai.xi     ioctl_info.pFlipInfo = (void*)&flipInfo;
5145*53ee8cc1Swenshuai.xi     ioctl_info.u32Size   = sizeof(GOP_GWIN_FLIP_WIN_INFO);
5146*53ee8cc1Swenshuai.xi 
5147*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GFLIP_SWITCHGWIN,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5148*53ee8cc1Swenshuai.xi     {
5149*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5150*53ee8cc1Swenshuai.xi         GOP_RETURN(FALSE);
5151*53ee8cc1Swenshuai.xi     }
5152*53ee8cc1Swenshuai.xi 
5153*53ee8cc1Swenshuai.xi     GOP_RETURN(TRUE);
5154*53ee8cc1Swenshuai.xi }
MApi_GOP_Switch_Multi_GWIN_2_FB_BY_ADDR(GOP_MultiFlipInfo GopMultiFlipInfo)5155*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_Switch_Multi_GWIN_2_FB_BY_ADDR(GOP_MultiFlipInfo GopMultiFlipInfo)
5156*53ee8cc1Swenshuai.xi {
5157*53ee8cc1Swenshuai.xi     GOP_GWIN_GFLIP_SWITCH_MULTI_GWIN_PARAM ioctl_info;
5158*53ee8cc1Swenshuai.xi     GOP_GWIN_FLIP_MULTI_WIN_INFO multiflipInfo;
5159*53ee8cc1Swenshuai.xi     MS_U32 u32QueueCnt[GOP_MULTIINFO_NUM] = {0};
5160*53ee8cc1Swenshuai.xi     MS_U8 i = 0;
5161*53ee8cc1Swenshuai.xi 
5162*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_GFLIP_SWITCH_MULTI_GWIN_PARAM));
5163*53ee8cc1Swenshuai.xi     memset(&multiflipInfo, 0x0, sizeof(GOP_GWIN_FLIP_MULTI_WIN_INFO));
5164*53ee8cc1Swenshuai.xi     for(i =0;i < GOP_MULTIINFO_NUM;i++ )
5165*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].pQueueCnt = &u32QueueCnt[i];
5166*53ee8cc1Swenshuai.xi 
5167*53ee8cc1Swenshuai.xi     multiflipInfo.u8InfoCnt = GopMultiFlipInfo.u8InfoCnt;
5168*53ee8cc1Swenshuai.xi     for(i =0;i < (multiflipInfo.u8InfoCnt);i++ )
5169*53ee8cc1Swenshuai.xi     {
5170*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].enFlip = GOP_FLIP_BY_ADDR;
5171*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].b3DEnable = FALSE;
5172*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].GwinId = GopMultiFlipInfo.astGopInfo[i].gWinId;;
5173*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].FlipAddr = GopMultiFlipInfo.astGopInfo[i].u32FlipAddr;;
5174*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].SubFlipAddr = GopMultiFlipInfo.astGopInfo[i].u32SubAddr;
5175*53ee8cc1Swenshuai.xi         multiflipInfo.FlipInfo[i].WaitTagID = GopMultiFlipInfo.astGopInfo[i].u16WaitTagID;
5176*53ee8cc1Swenshuai.xi 
5177*53ee8cc1Swenshuai.xi         /*One platform would coredump, check*/
5178*53ee8cc1Swenshuai.xi         if(GopMultiFlipInfo.astGopInfo[i].pU16QueueCnt==NULL)
5179*53ee8cc1Swenshuai.xi         {
5180*53ee8cc1Swenshuai.xi             u32QueueCnt[i]=0;
5181*53ee8cc1Swenshuai.xi         }
5182*53ee8cc1Swenshuai.xi         else
5183*53ee8cc1Swenshuai.xi         {
5184*53ee8cc1Swenshuai.xi             memcpy(&u32QueueCnt[i], GopMultiFlipInfo.astGopInfo[i].pU16QueueCnt, sizeof(MS_U16));
5185*53ee8cc1Swenshuai.xi         }
5186*53ee8cc1Swenshuai.xi         //u32QueueCnt[i] =(MS_U32) *GopMultiFlipInfo.astGopInfo[i].pU16QueueCnt;
5187*53ee8cc1Swenshuai.xi     }
5188*53ee8cc1Swenshuai.xi     ioctl_info.pMultiFlipInfo = (void*)&multiflipInfo;
5189*53ee8cc1Swenshuai.xi     ioctl_info.u32Size   = sizeof(GOP_GWIN_FLIP_MULTI_WIN_INFO);
5190*53ee8cc1Swenshuai.xi 
5191*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GFLIP_SWITCHMULTIGWIN,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5192*53ee8cc1Swenshuai.xi     {
5193*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5194*53ee8cc1Swenshuai.xi         return FALSE;
5195*53ee8cc1Swenshuai.xi     }
5196*53ee8cc1Swenshuai.xi     for(i =0;i < (multiflipInfo.u8InfoCnt);i++ )
5197*53ee8cc1Swenshuai.xi     {
5198*53ee8cc1Swenshuai.xi         *(GopMultiFlipInfo.astGopInfo[i].pU16QueueCnt) = (MS_U16)u32QueueCnt[i];
5199*53ee8cc1Swenshuai.xi     }
5200*53ee8cc1Swenshuai.xi     return TRUE;
5201*53ee8cc1Swenshuai.xi }
5202*53ee8cc1Swenshuai.xi 
MApi_GOP_Switch_GWIN_2_FB_BY_ADDR(MS_U8 gWinId,MS_PHY phyFlipAddr,MS_U16 u16WaitTagID,MS_U16 * pU16QueueCnt)5203*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_Switch_GWIN_2_FB_BY_ADDR(MS_U8 gWinId, MS_PHY phyFlipAddr, MS_U16 u16WaitTagID, MS_U16 *pU16QueueCnt)
5204*53ee8cc1Swenshuai.xi {
5205*53ee8cc1Swenshuai.xi     GOP_GWIN_GFLIP_SWITCH_GWIN_PARAM ioctl_info;
5206*53ee8cc1Swenshuai.xi     GOP_GWIN_FLIP_WIN_INFO flipInfo;
5207*53ee8cc1Swenshuai.xi     MS_U32 QueueCnt;
5208*53ee8cc1Swenshuai.xi 
5209*53ee8cc1Swenshuai.xi 
5210*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_GFLIP_SWITCH_GWIN_PARAM));
5211*53ee8cc1Swenshuai.xi     memset(&flipInfo, 0x0, sizeof(GOP_GWIN_FLIP_WIN_INFO));
5212*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5213*53ee8cc1Swenshuai.xi     QueueCnt = *pU16QueueCnt;
5214*53ee8cc1Swenshuai.xi 
5215*53ee8cc1Swenshuai.xi     flipInfo.enFlip    = GOP_FLIP_BY_ADDR;
5216*53ee8cc1Swenshuai.xi     flipInfo.b3DEnable = FALSE;
5217*53ee8cc1Swenshuai.xi     flipInfo.GwinId    = gWinId;
5218*53ee8cc1Swenshuai.xi     flipInfo.FlipAddr  = phyFlipAddr;
5219*53ee8cc1Swenshuai.xi     flipInfo.SubFlipAddr = phyFlipAddr;
5220*53ee8cc1Swenshuai.xi     flipInfo.WaitTagID = u16WaitTagID;
5221*53ee8cc1Swenshuai.xi     flipInfo.pQueueCnt = &QueueCnt;
5222*53ee8cc1Swenshuai.xi 
5223*53ee8cc1Swenshuai.xi     ioctl_info.pFlipInfo = (void*)&flipInfo;
5224*53ee8cc1Swenshuai.xi     ioctl_info.u32Size   = sizeof(GOP_GWIN_FLIP_WIN_INFO);
5225*53ee8cc1Swenshuai.xi 
5226*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GFLIP_SWITCHGWIN,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5227*53ee8cc1Swenshuai.xi     {
5228*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5229*53ee8cc1Swenshuai.xi         GOP_RETURN(FALSE);
5230*53ee8cc1Swenshuai.xi     }
5231*53ee8cc1Swenshuai.xi     *pU16QueueCnt = QueueCnt;
5232*53ee8cc1Swenshuai.xi     GOP_RETURN(TRUE);
5233*53ee8cc1Swenshuai.xi }
5234*53ee8cc1Swenshuai.xi 
5235*53ee8cc1Swenshuai.xi //Flip out GOP 3D output
MApi_GOP_Switch_3DGWIN_2_FB_BY_ADDR(MS_U8 gWinId,MS_PHY phyMainFlipAddr,MS_PHY phySubFlipAddr,MS_U16 u16WaitTagID,MS_U16 * pu16QueueCnt)5236*53ee8cc1Swenshuai.xi MS_BOOL MApi_GOP_Switch_3DGWIN_2_FB_BY_ADDR(MS_U8 gWinId, MS_PHY phyMainFlipAddr, MS_PHY phySubFlipAddr, MS_U16 u16WaitTagID, MS_U16 *pu16QueueCnt)
5237*53ee8cc1Swenshuai.xi {
5238*53ee8cc1Swenshuai.xi 
5239*53ee8cc1Swenshuai.xi     GOP_GWIN_GFLIP_SWITCH_GWIN_PARAM ioctl_info;
5240*53ee8cc1Swenshuai.xi     GOP_GWIN_FLIP_WIN_INFO flipInfo;
5241*53ee8cc1Swenshuai.xi     MS_U32 QueueCnt;
5242*53ee8cc1Swenshuai.xi 
5243*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5244*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_GFLIP_SWITCH_GWIN_PARAM));
5245*53ee8cc1Swenshuai.xi     memset(&flipInfo, 0x0, sizeof(GOP_GWIN_FLIP_WIN_INFO));
5246*53ee8cc1Swenshuai.xi 
5247*53ee8cc1Swenshuai.xi     QueueCnt = *pu16QueueCnt;
5248*53ee8cc1Swenshuai.xi 
5249*53ee8cc1Swenshuai.xi     flipInfo.enFlip    = GOP_FLIP_BY_ADDR;
5250*53ee8cc1Swenshuai.xi     flipInfo.b3DEnable = TRUE;
5251*53ee8cc1Swenshuai.xi     flipInfo.GwinId    = gWinId;
5252*53ee8cc1Swenshuai.xi     flipInfo.FlipAddr  = phyMainFlipAddr;
5253*53ee8cc1Swenshuai.xi     flipInfo.SubFlipAddr = phySubFlipAddr;
5254*53ee8cc1Swenshuai.xi     flipInfo.WaitTagID = u16WaitTagID;
5255*53ee8cc1Swenshuai.xi     flipInfo.pQueueCnt = &QueueCnt;
5256*53ee8cc1Swenshuai.xi 
5257*53ee8cc1Swenshuai.xi     ioctl_info.pFlipInfo = (void*)&flipInfo;
5258*53ee8cc1Swenshuai.xi     ioctl_info.u32Size   = sizeof(GOP_GWIN_FLIP_WIN_INFO);
5259*53ee8cc1Swenshuai.xi 
5260*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GFLIP_SWITCHGWIN,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5261*53ee8cc1Swenshuai.xi     {
5262*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5263*53ee8cc1Swenshuai.xi         GOP_RETURN(FALSE);
5264*53ee8cc1Swenshuai.xi     }
5265*53ee8cc1Swenshuai.xi     *pu16QueueCnt = QueueCnt;
5266*53ee8cc1Swenshuai.xi     GOP_RETURN(TRUE);
5267*53ee8cc1Swenshuai.xi }
5268*53ee8cc1Swenshuai.xi 
5269*53ee8cc1Swenshuai.xi /******************************************************************************/
5270*53ee8cc1Swenshuai.xi /// Change a GWIN's frame buffer, this enables an off screen buffer to be shown
5271*53ee8cc1Swenshuai.xi /// @param fbId \b IN frame buffer id
5272*53ee8cc1Swenshuai.xi /// @param gwinId \b IN \copydoc GWINID
5273*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5274*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5275*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_MapFB2Win(MS_U8 fbId,MS_U8 gwinId)5276*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_MapFB2Win(MS_U8 fbId, MS_U8 gwinId)
5277*53ee8cc1Swenshuai.xi {
5278*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Map32FB2Win((MS_U32)fbId, gwinId);
5279*53ee8cc1Swenshuai.xi }
5280*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Map32FB2Win(MS_U32 u32fbId,MS_U8 u8gwinId)5281*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Map32FB2Win(MS_U32 u32fbId, MS_U8 u8gwinId)
5282*53ee8cc1Swenshuai.xi {
5283*53ee8cc1Swenshuai.xi 
5284*53ee8cc1Swenshuai.xi     GOP_GWIN_MAPFBINFO_PARAM ioctl_info;
5285*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_MAPFBINFO_PARAM));
5286*53ee8cc1Swenshuai.xi 
5287*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5288*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32fbId;
5289*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8gwinId;
5290*53ee8cc1Swenshuai.xi 
5291*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_MAPFB2WIN,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5292*53ee8cc1Swenshuai.xi     {
5293*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5294*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
5295*53ee8cc1Swenshuai.xi     }
5296*53ee8cc1Swenshuai.xi 
5297*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5298*53ee8cc1Swenshuai.xi 
5299*53ee8cc1Swenshuai.xi }
5300*53ee8cc1Swenshuai.xi 
5301*53ee8cc1Swenshuai.xi 
5302*53ee8cc1Swenshuai.xi /******************************************************************************/
5303*53ee8cc1Swenshuai.xi /// Get frame buffer information
5304*53ee8cc1Swenshuai.xi /// @param fbId \b IN frame buffer id
5305*53ee8cc1Swenshuai.xi /// @param fbAttr \b OUT buffer to store \copydoc GOP_GwinFBAttr
5306*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5307*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5308*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_GetFBInfo(MS_U8 fbId,GOP_GwinFBAttr * fbAttr)5309*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_GetFBInfo(MS_U8 fbId, GOP_GwinFBAttr *fbAttr)
5310*53ee8cc1Swenshuai.xi {
5311*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Get32FBInfo((MS_U32)fbId, fbAttr);
5312*53ee8cc1Swenshuai.xi }
5313*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Get32FBInfo(MS_U32 u32fbId,GOP_GwinFBAttr * fbAttr)5314*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Get32FBInfo(MS_U32 u32fbId, GOP_GwinFBAttr *fbAttr)
5315*53ee8cc1Swenshuai.xi {
5316*53ee8cc1Swenshuai.xi     GOP_FB_INFO_PARAM ioctl_info;
5317*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
5318*53ee8cc1Swenshuai.xi 
5319*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5320*53ee8cc1Swenshuai.xi 
5321*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_FB_INFO_PARAM));
5322*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
5323*53ee8cc1Swenshuai.xi 
5324*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
5325*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
5326*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32fbId;
5327*53ee8cc1Swenshuai.xi 
5328*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_GETINFO,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5329*53ee8cc1Swenshuai.xi     {
5330*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5331*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5332*53ee8cc1Swenshuai.xi     }
5333*53ee8cc1Swenshuai.xi 
5334*53ee8cc1Swenshuai.xi     memset(fbAttr, 0x0, sizeof(GOP_GwinFBAttr));
5335*53ee8cc1Swenshuai.xi 
5336*53ee8cc1Swenshuai.xi     fbAttr->width   = BuffInfo.width;
5337*53ee8cc1Swenshuai.xi     fbAttr->height  = BuffInfo.height;
5338*53ee8cc1Swenshuai.xi     fbAttr->fbFmt   = BuffInfo.fbFmt;
5339*53ee8cc1Swenshuai.xi     fbAttr->pitch   = BuffInfo.pitch;
5340*53ee8cc1Swenshuai.xi     fbAttr->x0      = BuffInfo.disp_rect.x;
5341*53ee8cc1Swenshuai.xi     fbAttr->y0      = BuffInfo.disp_rect.y;
5342*53ee8cc1Swenshuai.xi     fbAttr->x1      = BuffInfo.disp_rect.x + BuffInfo.disp_rect.w;
5343*53ee8cc1Swenshuai.xi     fbAttr->y1      = BuffInfo.disp_rect.y + BuffInfo.disp_rect.h;
5344*53ee8cc1Swenshuai.xi     fbAttr->s_x     = BuffInfo.disp_rect.x;
5345*53ee8cc1Swenshuai.xi     fbAttr->s_y     = BuffInfo.disp_rect.y;
5346*53ee8cc1Swenshuai.xi     fbAttr->addr    = BuffInfo.addr;
5347*53ee8cc1Swenshuai.xi 
5348*53ee8cc1Swenshuai.xi     fbAttr->size    = GOP_CalcPitch(BuffInfo.fbFmt, BuffInfo.width) * BuffInfo.height;
5349*53ee8cc1Swenshuai.xi 
5350*53ee8cc1Swenshuai.xi     //printf("[%s] buff size:%lx addr:%lx (%d,%d)\n",__FUNCTION__,fbAttr->size,fbAttr->addr, fbAttr->width, fbAttr->height);
5351*53ee8cc1Swenshuai.xi 
5352*53ee8cc1Swenshuai.xi     fbAttr->dispWidth  = BuffInfo.disp_rect.w;
5353*53ee8cc1Swenshuai.xi     fbAttr->dispHeight = BuffInfo.disp_rect.h;
5354*53ee8cc1Swenshuai.xi 
5355*53ee8cc1Swenshuai.xi     //fbAttr->allocated = pwinFB->in_use;
5356*53ee8cc1Swenshuai.xi     //fbAttr->enable = pwinFB->enable;
5357*53ee8cc1Swenshuai.xi     //fbAttr->gWinId = pwinFB->gWinId;
5358*53ee8cc1Swenshuai.xi     //fbAttr->string = pwinFB->string;
5359*53ee8cc1Swenshuai.xi 
5360*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5361*53ee8cc1Swenshuai.xi 
5362*53ee8cc1Swenshuai.xi }
5363*53ee8cc1Swenshuai.xi 
5364*53ee8cc1Swenshuai.xi 
5365*53ee8cc1Swenshuai.xi /******************************************************************************/
5366*53ee8cc1Swenshuai.xi /// Set frame buffer info
5367*53ee8cc1Swenshuai.xi /// @param fbId  \b IN: frame buffer id
5368*53ee8cc1Swenshuai.xi /// @param fbAttr \b IN: frame buffer attribute
5369*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5370*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5371*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_SetFBInfo(MS_U8 fbId,GOP_GwinFBAttr * fbAttr)5372*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetFBInfo(MS_U8 fbId, GOP_GwinFBAttr *fbAttr)
5373*53ee8cc1Swenshuai.xi {
5374*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_Set32FBInfo((MS_U32)fbId, fbAttr);
5375*53ee8cc1Swenshuai.xi }
5376*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_Set32FBInfo(MS_U32 u32fbId,GOP_GwinFBAttr * fbAttr)5377*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_Set32FBInfo(MS_U32 u32fbId, GOP_GwinFBAttr *fbAttr)
5378*53ee8cc1Swenshuai.xi {
5379*53ee8cc1Swenshuai.xi     GOP_FB_INFO_PARAM ioctl_info;
5380*53ee8cc1Swenshuai.xi     GOP_BUFFER_INFO BuffInfo;
5381*53ee8cc1Swenshuai.xi 
5382*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5383*53ee8cc1Swenshuai.xi 
5384*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_FB_INFO_PARAM));
5385*53ee8cc1Swenshuai.xi     memset(&BuffInfo, 0x0, sizeof(GOP_BUFFER_INFO));
5386*53ee8cc1Swenshuai.xi 
5387*53ee8cc1Swenshuai.xi     BuffInfo.addr = fbAttr->addr;
5388*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.x = fbAttr->x0;
5389*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.y = fbAttr->y0;
5390*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.w = fbAttr->x1 - fbAttr->x0;
5391*53ee8cc1Swenshuai.xi     BuffInfo.disp_rect.h = fbAttr->y1 - fbAttr->y0;
5392*53ee8cc1Swenshuai.xi     BuffInfo.fbFmt       = fbAttr->fbFmt;
5393*53ee8cc1Swenshuai.xi     BuffInfo.pitch       = fbAttr->pitch;
5394*53ee8cc1Swenshuai.xi 
5395*53ee8cc1Swenshuai.xi     BuffInfo.width  = fbAttr->width;
5396*53ee8cc1Swenshuai.xi     BuffInfo.height = fbAttr->height;
5397*53ee8cc1Swenshuai.xi 
5398*53ee8cc1Swenshuai.xi 
5399*53ee8cc1Swenshuai.xi     ioctl_info.pBufInfo = (MS_U32*)&BuffInfo;
5400*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_BUFFER_INFO);
5401*53ee8cc1Swenshuai.xi     ioctl_info.fbid = u32fbId;
5402*53ee8cc1Swenshuai.xi 
5403*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_SETINFO,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5404*53ee8cc1Swenshuai.xi     {
5405*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5406*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5407*53ee8cc1Swenshuai.xi     }
5408*53ee8cc1Swenshuai.xi 
5409*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5410*53ee8cc1Swenshuai.xi }
5411*53ee8cc1Swenshuai.xi 
5412*53ee8cc1Swenshuai.xi 
5413*53ee8cc1Swenshuai.xi /********************************************************************************/
5414*53ee8cc1Swenshuai.xi /// Set GWIN high priority when GWIN overlap in the same gop. If different gwins overlap in the same gop, only
5415*53ee8cc1Swenshuai.xi /// high priority gwin can be shown
5416*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
5417*53ee8cc1Swenshuai.xi /// @param u8win \b IN: Gwin ID
5418*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5419*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5420*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SwapOverlapWin(MS_U8 u8GOP,MS_U8 u8win)5421*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SwapOverlapWin(MS_U8 u8GOP, MS_U8 u8win)
5422*53ee8cc1Swenshuai.xi {
5423*53ee8cc1Swenshuai.xi     MS_U8 u8WinId;
5424*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
5425*53ee8cc1Swenshuai.xi 
5426*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5427*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
5428*53ee8cc1Swenshuai.xi     u8WinId = u8win;
5429*53ee8cc1Swenshuai.xi 
5430*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_SWAP_OVERLAP_WIN;
5431*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
5432*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&u8WinId;
5433*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U8);
5434*53ee8cc1Swenshuai.xi 
5435*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5436*53ee8cc1Swenshuai.xi     {
5437*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5438*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5439*53ee8cc1Swenshuai.xi     }
5440*53ee8cc1Swenshuai.xi 
5441*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5442*53ee8cc1Swenshuai.xi }
5443*53ee8cc1Swenshuai.xi 
5444*53ee8cc1Swenshuai.xi /********************************************************************************/
5445*53ee8cc1Swenshuai.xi /// Set GWIN relative Priority
5446*53ee8cc1Swenshuai.xi /// Will Ensure Gwin Priority in the same sequence in hw as pGwinPri defined
5447*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
5448*53ee8cc1Swenshuai.xi /// @param pGwinPri \b IN: Relative Gwin ID Priority Defines
5449*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5450*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5451*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GWIN_SetRelativeWinPrio(MS_U8 u8GOP,GOP_GwinPri * pGwinPri)5452*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetRelativeWinPrio(MS_U8 u8GOP, GOP_GwinPri *pGwinPri)
5453*53ee8cc1Swenshuai.xi {
5454*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
5455*53ee8cc1Swenshuai.xi     GOP_GwinPri GwinPri;
5456*53ee8cc1Swenshuai.xi 
5457*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5458*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
5459*53ee8cc1Swenshuai.xi     memcpy(&GwinPri, pGwinPri, sizeof(GOP_GwinPri));
5460*53ee8cc1Swenshuai.xi 
5461*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_RELATIVE_WIN_PRIO;
5462*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
5463*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&GwinPri;
5464*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_GwinPri);
5465*53ee8cc1Swenshuai.xi 
5466*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5467*53ee8cc1Swenshuai.xi     {
5468*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5469*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5470*53ee8cc1Swenshuai.xi     }
5471*53ee8cc1Swenshuai.xi 
5472*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5473*53ee8cc1Swenshuai.xi 
5474*53ee8cc1Swenshuai.xi }
5475*53ee8cc1Swenshuai.xi 
5476*53ee8cc1Swenshuai.xi /********************************************************************************/
5477*53ee8cc1Swenshuai.xi /// Switch frame buffer pool. This function is used for when user use MApi_GOP_GWIN_SetDoubleHeap to set second
5478*53ee8cc1Swenshuai.xi /// frame buffer pool. User can control frame buffer opened in first or second buffer pool pool
5479*53ee8cc1Swenshuai.xi /// @param u8FB \b IN 0: first frame buffer pool , 1: second frame buffer pool
5480*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5481*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_FB_SEL(MS_U8 u8FB)5482*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_FB_SEL(MS_U8 u8FB)
5483*53ee8cc1Swenshuai.xi {
5484*53ee8cc1Swenshuai.xi     GOP_FB_PROPERTY_PARAM ioctl_info;
5485*53ee8cc1Swenshuai.xi     MS_U8 u8PoolId = u8FB;
5486*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5487*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_FB_POOLID;
5488*53ee8cc1Swenshuai.xi     ioctl_info.FBId = 0x0;
5489*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*)&u8PoolId;
5490*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_U8);
5491*53ee8cc1Swenshuai.xi 
5492*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_FB_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
5493*53ee8cc1Swenshuai.xi     {
5494*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5495*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
5496*53ee8cc1Swenshuai.xi     }
5497*53ee8cc1Swenshuai.xi 
5498*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5499*53ee8cc1Swenshuai.xi }
5500*53ee8cc1Swenshuai.xi 
5501*53ee8cc1Swenshuai.xi /********************************************************************************/
5502*53ee8cc1Swenshuai.xi /// Get GOP version number
5503*53ee8cc1Swenshuai.xi ///@param ppVersion \b OUT: GOP Version
5504*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5505*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5506*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GetLibVer(const MSIF_Version ** ppVersion)5507*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetLibVer(const MSIF_Version **ppVersion)
5508*53ee8cc1Swenshuai.xi {
5509*53ee8cc1Swenshuai.xi     if (!ppVersion)
5510*53ee8cc1Swenshuai.xi     {
5511*53ee8cc1Swenshuai.xi         return GOP_API_INVALID_PARAMETERS;
5512*53ee8cc1Swenshuai.xi     }
5513*53ee8cc1Swenshuai.xi     *ppVersion = &_api_gop_version;
5514*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5515*53ee8cc1Swenshuai.xi }
5516*53ee8cc1Swenshuai.xi 
5517*53ee8cc1Swenshuai.xi /********************************************************************************/
5518*53ee8cc1Swenshuai.xi /// Set Debug level of GOP
5519*53ee8cc1Swenshuai.xi /// @param level \b IN debug level
5520*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5521*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5522*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_SetDbgLevel(EN_GOP_DEBUG_LEVEL level)5523*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetDbgLevel(EN_GOP_DEBUG_LEVEL level)
5524*53ee8cc1Swenshuai.xi {
5525*53ee8cc1Swenshuai.xi 	GOP_MISC_PARAM ioctl_info;
5526*53ee8cc1Swenshuai.xi 
5527*53ee8cc1Swenshuai.xi     u32GOPDbgLevel_api= level;
5528*53ee8cc1Swenshuai.xi 
5529*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5530*53ee8cc1Swenshuai.xi 
5531*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_SET_DBG_LEVEL;
5532*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&level;
5533*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
5534*53ee8cc1Swenshuai.xi 
5535*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5536*53ee8cc1Swenshuai.xi     {
5537*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5538*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5539*53ee8cc1Swenshuai.xi     }
5540*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5541*53ee8cc1Swenshuai.xi }
5542*53ee8cc1Swenshuai.xi 
5543*53ee8cc1Swenshuai.xi 
5544*53ee8cc1Swenshuai.xi /********************************************************************************/
5545*53ee8cc1Swenshuai.xi /// GOP call back function: Set destination buffer pitch,addr,fmt to GE.
5546*53ee8cc1Swenshuai.xi /// This function should be registered before MApi_GOP_Init!!
5547*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5548*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5549*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_RegisterFBFmtCB(MS_U32 (* fpGOP_CB)(MS_U16 pitch,MS_PHY addr,MS_U16 fmt))5550*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RegisterFBFmtCB(MS_U32 (*fpGOP_CB)(MS_U16 pitch,MS_PHY addr , MS_U16 fmt )  )
5551*53ee8cc1Swenshuai.xi {
5552*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5553*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5554*53ee8cc1Swenshuai.xi 
5555*53ee8cc1Swenshuai.xi     fpSetFBFmt = fpGOP_CB;
5556*53ee8cc1Swenshuai.xi 
5557*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5558*53ee8cc1Swenshuai.xi #else
5559*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
5560*53ee8cc1Swenshuai.xi     {
5561*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_GFX_FBFMT;
5562*53ee8cc1Swenshuai.xi         ioctl_info.pCB = fpSetFBFmt;
5563*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5564*53ee8cc1Swenshuai.xi         {
5565*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5566*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
5567*53ee8cc1Swenshuai.xi         }
5568*53ee8cc1Swenshuai.xi     }
5569*53ee8cc1Swenshuai.xi #endif
5570*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5571*53ee8cc1Swenshuai.xi }
5572*53ee8cc1Swenshuai.xi 
5573*53ee8cc1Swenshuai.xi 
5574*53ee8cc1Swenshuai.xi 
5575*53ee8cc1Swenshuai.xi /********************************************************************************/
5576*53ee8cc1Swenshuai.xi /// GOP call back function: Get vedio status (is interlace mode?) from scaler.
5577*53ee8cc1Swenshuai.xi /// This function should be registered before MApi_GOP_Init!!
5578*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5579*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5580*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_RegisterXCIsInterlaceCB(MS_BOOL (* fpGOP_CB)(void))5581*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RegisterXCIsInterlaceCB(MS_BOOL (*fpGOP_CB)(void))
5582*53ee8cc1Swenshuai.xi {
5583*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5584*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5585*53ee8cc1Swenshuai.xi 
5586*53ee8cc1Swenshuai.xi     fpXCIsInterlace = fpGOP_CB;
5587*53ee8cc1Swenshuai.xi 
5588*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5589*53ee8cc1Swenshuai.xi #else
5590*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
5591*53ee8cc1Swenshuai.xi     {
5592*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_XC_INTERLACE;
5593*53ee8cc1Swenshuai.xi         ioctl_info.pCB = fpXCIsInterlace;
5594*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5595*53ee8cc1Swenshuai.xi         {
5596*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5597*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
5598*53ee8cc1Swenshuai.xi         }
5599*53ee8cc1Swenshuai.xi     }
5600*53ee8cc1Swenshuai.xi #endif
5601*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5602*53ee8cc1Swenshuai.xi }
5603*53ee8cc1Swenshuai.xi 
5604*53ee8cc1Swenshuai.xi /********************************************************************************/
5605*53ee8cc1Swenshuai.xi /// GOP call back function: Get capture window h-start from scaler.
5606*53ee8cc1Swenshuai.xi /// This function should be registered before MApi_GOP_Init!!
5607*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5608*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5609*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_RegisterXCGetCapHStartCB(MS_U16 (* fpGOP_CB)(void))5610*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RegisterXCGetCapHStartCB(MS_U16 (*fpGOP_CB)(void))
5611*53ee8cc1Swenshuai.xi {
5612*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5613*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5614*53ee8cc1Swenshuai.xi 
5615*53ee8cc1Swenshuai.xi     fpXCGetCapHStart = fpGOP_CB;
5616*53ee8cc1Swenshuai.xi 
5617*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5618*53ee8cc1Swenshuai.xi #else
5619*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
5620*53ee8cc1Swenshuai.xi     {
5621*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_XC_PANEL_HSTART;
5622*53ee8cc1Swenshuai.xi         ioctl_info.pCB = fpXCGetCapHStart;
5623*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5624*53ee8cc1Swenshuai.xi         {
5625*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5626*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
5627*53ee8cc1Swenshuai.xi         }
5628*53ee8cc1Swenshuai.xi     }
5629*53ee8cc1Swenshuai.xi #endif
5630*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5631*53ee8cc1Swenshuai.xi }
5632*53ee8cc1Swenshuai.xi 
5633*53ee8cc1Swenshuai.xi 
5634*53ee8cc1Swenshuai.xi /********************************************************************************/
5635*53ee8cc1Swenshuai.xi /// GOP call back function: Notify callback for the end of GOP events such as buffer rearrange.
5636*53ee8cc1Swenshuai.xi /// This function should be registered before MApi_GOP_Init!!
5637*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5638*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5639*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_RegisterEventNotify(void (* fpGOP_CB)(MS_U32 u32EventID,void * reserved0))5640*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RegisterEventNotify(void (*fpGOP_CB)(MS_U32 u32EventID, void* reserved0))
5641*53ee8cc1Swenshuai.xi {
5642*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5643*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5644*53ee8cc1Swenshuai.xi 
5645*53ee8cc1Swenshuai.xi     fpEventNotify = fpGOP_CB;
5646*53ee8cc1Swenshuai.xi 
5647*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5648*53ee8cc1Swenshuai.xi #else
5649*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
5650*53ee8cc1Swenshuai.xi     {
5651*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_EVENT_NOTIFY;
5652*53ee8cc1Swenshuai.xi         ioctl_info.pCB = fpEventNotify;
5653*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5654*53ee8cc1Swenshuai.xi         {
5655*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5656*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
5657*53ee8cc1Swenshuai.xi         }
5658*53ee8cc1Swenshuai.xi     }
5659*53ee8cc1Swenshuai.xi #endif
5660*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5661*53ee8cc1Swenshuai.xi }
5662*53ee8cc1Swenshuai.xi 
5663*53ee8cc1Swenshuai.xi 
5664*53ee8cc1Swenshuai.xi /********************************************************************************/
5665*53ee8cc1Swenshuai.xi /// GOP call back function: Reduce scaler bandwidth when OSD on.
5666*53ee8cc1Swenshuai.xi /// This function should be registered before MApi_GOP_Init!!
5667*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5668*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5669*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_RegisterXCReduceBWForOSDCB(void (* fpGOP_CB)(MS_U8 PqWin,MS_BOOL enable))5670*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RegisterXCReduceBWForOSDCB(void (*fpGOP_CB)(MS_U8 PqWin, MS_BOOL enable))
5671*53ee8cc1Swenshuai.xi {
5672*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5673*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5674*53ee8cc1Swenshuai.xi 
5675*53ee8cc1Swenshuai.xi     fpXCReduceBWForOSD = fpGOP_CB;
5676*53ee8cc1Swenshuai.xi 
5677*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5678*53ee8cc1Swenshuai.xi #else
5679*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
5680*53ee8cc1Swenshuai.xi     {
5681*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_XC_REDUCE_BW;
5682*53ee8cc1Swenshuai.xi         ioctl_info.pCB = fpXCReduceBWForOSD;
5683*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5684*53ee8cc1Swenshuai.xi         {
5685*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5686*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
5687*53ee8cc1Swenshuai.xi         }
5688*53ee8cc1Swenshuai.xi     }
5689*53ee8cc1Swenshuai.xi #endif
5690*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5691*53ee8cc1Swenshuai.xi }
5692*53ee8cc1Swenshuai.xi /********************************************************************************/
5693*53ee8cc1Swenshuai.xi /// GOP call back function: Register XC DIP call back
5694*53ee8cc1Swenshuai.xi /// This function should be registered before MApi_GOP_Init!!
5695*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5696*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5697*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_RegisterXCSetDwinInfo(MS_BOOL (* fpGOP_CB)(MS_U16 cmd,MS_U32 * arg,MS_U16 size))5698*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RegisterXCSetDwinInfo(MS_BOOL (*fpGOP_CB)(MS_U16 cmd,MS_U32 *arg,MS_U16 size))
5699*53ee8cc1Swenshuai.xi {
5700*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5701*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5702*53ee8cc1Swenshuai.xi 
5703*53ee8cc1Swenshuai.xi     fpXCSetDwinInfo = fpGOP_CB;
5704*53ee8cc1Swenshuai.xi 
5705*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5706*53ee8cc1Swenshuai.xi #else
5707*53ee8cc1Swenshuai.xi     if(pInstantGOP != NULL)
5708*53ee8cc1Swenshuai.xi     {
5709*53ee8cc1Swenshuai.xi         ioctl_info.cb_type = GOP_CB_DWIN_INFO;
5710*53ee8cc1Swenshuai.xi         ioctl_info.pCB = fpXCSetDwinInfo;
5711*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5712*53ee8cc1Swenshuai.xi         {
5713*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5714*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
5715*53ee8cc1Swenshuai.xi         }
5716*53ee8cc1Swenshuai.xi     }
5717*53ee8cc1Swenshuai.xi #endif
5718*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5719*53ee8cc1Swenshuai.xi }
5720*53ee8cc1Swenshuai.xi 
5721*53ee8cc1Swenshuai.xi 
_GOP_RegisterAllCBFunc()5722*53ee8cc1Swenshuai.xi MS_U32 _GOP_RegisterAllCBFunc()
5723*53ee8cc1Swenshuai.xi {
5724*53ee8cc1Swenshuai.xi #ifdef GOP_UTOPIA2K
5725*53ee8cc1Swenshuai.xi #else
5726*53ee8cc1Swenshuai.xi     GOP_REGISTER_CB_PARAM ioctl_info;
5727*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_REGISTER_CB_PARAM));
5728*53ee8cc1Swenshuai.xi 
5729*53ee8cc1Swenshuai.xi     if(fpSetFBFmt == NULL)
5730*53ee8cc1Swenshuai.xi     {
5731*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_NOS
5732*53ee8cc1Swenshuai.xi         GOP_INFO("[%s][%d] fpSetFBFmt is NULL.(If on STR state, this is a normal message) \n",__FUNCTION__,__LINE__);
5733*53ee8cc1Swenshuai.xi #endif
5734*53ee8cc1Swenshuai.xi     }
5735*53ee8cc1Swenshuai.xi     ioctl_info.cb_type = GOP_CB_GFX_FBFMT;
5736*53ee8cc1Swenshuai.xi     ioctl_info.pCB = fpSetFBFmt;
5737*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5738*53ee8cc1Swenshuai.xi     {
5739*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5740*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
5741*53ee8cc1Swenshuai.xi     }
5742*53ee8cc1Swenshuai.xi 
5743*53ee8cc1Swenshuai.xi     if(fpXCIsInterlace == NULL)
5744*53ee8cc1Swenshuai.xi     {
5745*53ee8cc1Swenshuai.xi         GOP_INFO("[%s][%d] fpXCIsInterlace is NULL.(If on STR state, this is a normal message) \n",__FUNCTION__,__LINE__);
5746*53ee8cc1Swenshuai.xi     }
5747*53ee8cc1Swenshuai.xi     ioctl_info.cb_type = GOP_CB_XC_INTERLACE;
5748*53ee8cc1Swenshuai.xi     ioctl_info.pCB = fpXCIsInterlace;
5749*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5750*53ee8cc1Swenshuai.xi     {
5751*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5752*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
5753*53ee8cc1Swenshuai.xi     }
5754*53ee8cc1Swenshuai.xi 
5755*53ee8cc1Swenshuai.xi     if(fpXCGetCapHStart == NULL)
5756*53ee8cc1Swenshuai.xi     {
5757*53ee8cc1Swenshuai.xi         GOP_INFO("[%s][%d] fpXCGetCapHStart is NULL.(If on STR state, this is a normal message) \n",__FUNCTION__,__LINE__);
5758*53ee8cc1Swenshuai.xi     }
5759*53ee8cc1Swenshuai.xi     ioctl_info.cb_type = GOP_CB_XC_PANEL_HSTART;
5760*53ee8cc1Swenshuai.xi     ioctl_info.pCB = fpXCGetCapHStart;
5761*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5762*53ee8cc1Swenshuai.xi     {
5763*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5764*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
5765*53ee8cc1Swenshuai.xi     }
5766*53ee8cc1Swenshuai.xi 
5767*53ee8cc1Swenshuai.xi     if(fpXCReduceBWForOSD == NULL)
5768*53ee8cc1Swenshuai.xi     {
5769*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_NOS
5770*53ee8cc1Swenshuai.xi         GOP_INFO("[%s][%d] fpXCReduceBWForOSD is NULL.(If on STR state, this is a normal message) \n",__FUNCTION__,__LINE__);
5771*53ee8cc1Swenshuai.xi #endif
5772*53ee8cc1Swenshuai.xi     }
5773*53ee8cc1Swenshuai.xi     ioctl_info.cb_type = GOP_CB_XC_REDUCE_BW;
5774*53ee8cc1Swenshuai.xi     ioctl_info.pCB = fpXCReduceBWForOSD;
5775*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5776*53ee8cc1Swenshuai.xi     {
5777*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5778*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
5779*53ee8cc1Swenshuai.xi     }
5780*53ee8cc1Swenshuai.xi 
5781*53ee8cc1Swenshuai.xi     if(fpEventNotify == NULL)
5782*53ee8cc1Swenshuai.xi     {
5783*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_NOS
5784*53ee8cc1Swenshuai.xi         GOP_INFO("[%s][%d] fpEventNotify is NULL.(If on STR state, this is a normal message) \n",__FUNCTION__,__LINE__);
5785*53ee8cc1Swenshuai.xi #endif
5786*53ee8cc1Swenshuai.xi     }
5787*53ee8cc1Swenshuai.xi     ioctl_info.cb_type = GOP_CB_EVENT_NOTIFY;
5788*53ee8cc1Swenshuai.xi     ioctl_info.pCB = fpEventNotify;
5789*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5790*53ee8cc1Swenshuai.xi     {
5791*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5792*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
5793*53ee8cc1Swenshuai.xi     }
5794*53ee8cc1Swenshuai.xi 
5795*53ee8cc1Swenshuai.xi     if(fpXCSetDwinInfo == NULL)
5796*53ee8cc1Swenshuai.xi     {
5797*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_NOS
5798*53ee8cc1Swenshuai.xi         GOP_INFO("[%s][%d] fpXCSetDwinInfo is NULL.(If on STR state, this is a normal message) \n",__FUNCTION__,__LINE__);
5799*53ee8cc1Swenshuai.xi #endif
5800*53ee8cc1Swenshuai.xi     }
5801*53ee8cc1Swenshuai.xi     ioctl_info.cb_type = GOP_CB_DWIN_INFO;
5802*53ee8cc1Swenshuai.xi     ioctl_info.pCB = fpXCSetDwinInfo;
5803*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_REGISTER_CB,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5804*53ee8cc1Swenshuai.xi     {
5805*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5806*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
5807*53ee8cc1Swenshuai.xi     }
5808*53ee8cc1Swenshuai.xi #endif
5809*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
5810*53ee8cc1Swenshuai.xi }
5811*53ee8cc1Swenshuai.xi 
5812*53ee8cc1Swenshuai.xi 
5813*53ee8cc1Swenshuai.xi /********************************************************************************/
5814*53ee8cc1Swenshuai.xi /// Get gop static api info.
5815*53ee8cc1Swenshuai.xi /// @param *pGopApiInfo \b OUT pointer to api info structure
5816*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5817*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5818*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GetInfo(GOP_ApiInfo * pGopApiInfo)5819*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetInfo(GOP_ApiInfo* pGopApiInfo)
5820*53ee8cc1Swenshuai.xi {
5821*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
5822*53ee8cc1Swenshuai.xi     GOP_ApiInfo  GopApiInfo;
5823*53ee8cc1Swenshuai.xi 
5824*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5825*53ee8cc1Swenshuai.xi 
5826*53ee8cc1Swenshuai.xi     memcpy(&GopApiInfo, pGopApiInfo, sizeof(GOP_ApiInfo));
5827*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_GET_INFO;
5828*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&GopApiInfo;
5829*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_ApiInfo);
5830*53ee8cc1Swenshuai.xi 
5831*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5832*53ee8cc1Swenshuai.xi     {
5833*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5834*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5835*53ee8cc1Swenshuai.xi     }
5836*53ee8cc1Swenshuai.xi     memcpy(pGopApiInfo, &GopApiInfo, sizeof(GOP_ApiInfo));
5837*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5838*53ee8cc1Swenshuai.xi }
5839*53ee8cc1Swenshuai.xi 
5840*53ee8cc1Swenshuai.xi 
5841*53ee8cc1Swenshuai.xi /********************************************************************************/
5842*53ee8cc1Swenshuai.xi /// Get gop run time api status.
5843*53ee8cc1Swenshuai.xi /// @param *GOP_ApiStatus \b OUT pointer to api status structure
5844*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5845*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5846*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GetStatus(GOP_ApiStatus * pGopApiSts)5847*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetStatus(GOP_ApiStatus *pGopApiSts)
5848*53ee8cc1Swenshuai.xi {
5849*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
5850*53ee8cc1Swenshuai.xi     GOP_ApiStatus  GopApiSts;
5851*53ee8cc1Swenshuai.xi 
5852*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5853*53ee8cc1Swenshuai.xi 
5854*53ee8cc1Swenshuai.xi     memcpy(&GopApiSts, pGopApiSts, sizeof(GOP_ApiStatus));
5855*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_GET_RT_STATUS;
5856*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&GopApiSts;
5857*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_ApiStatus);
5858*53ee8cc1Swenshuai.xi 
5859*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5860*53ee8cc1Swenshuai.xi     {
5861*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5862*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5863*53ee8cc1Swenshuai.xi     }
5864*53ee8cc1Swenshuai.xi     memcpy(pGopApiSts, &GopApiSts, sizeof(GOP_ApiStatus));
5865*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5866*53ee8cc1Swenshuai.xi }
5867*53ee8cc1Swenshuai.xi 
5868*53ee8cc1Swenshuai.xi 
5869*53ee8cc1Swenshuai.xi /********************************************************************************/
5870*53ee8cc1Swenshuai.xi /// Set GOP Power ON.
5871*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5872*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5873*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_PowerOn(void)5874*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_PowerOn(void)
5875*53ee8cc1Swenshuai.xi {
5876*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
5877*53ee8cc1Swenshuai.xi     MS_U32  value = 0;
5878*53ee8cc1Swenshuai.xi 
5879*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5880*53ee8cc1Swenshuai.xi 
5881*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_POWER_ON;
5882*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&value;
5883*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
5884*53ee8cc1Swenshuai.xi 
5885*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5886*53ee8cc1Swenshuai.xi     {
5887*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5888*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5889*53ee8cc1Swenshuai.xi     }
5890*53ee8cc1Swenshuai.xi 
5891*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5892*53ee8cc1Swenshuai.xi 
5893*53ee8cc1Swenshuai.xi }
5894*53ee8cc1Swenshuai.xi /********************************************************************************/
5895*53ee8cc1Swenshuai.xi /// Set GOP Power OFF for saving power.
5896*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5897*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5898*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_PowerOff(void)5899*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_PowerOff(void)
5900*53ee8cc1Swenshuai.xi {
5901*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
5902*53ee8cc1Swenshuai.xi     MS_U32  value = 0;
5903*53ee8cc1Swenshuai.xi 
5904*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5905*53ee8cc1Swenshuai.xi 
5906*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_POWER_OFF;
5907*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&value;
5908*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
5909*53ee8cc1Swenshuai.xi 
5910*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5911*53ee8cc1Swenshuai.xi     {
5912*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5913*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5914*53ee8cc1Swenshuai.xi     }
5915*53ee8cc1Swenshuai.xi 
5916*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5917*53ee8cc1Swenshuai.xi 
5918*53ee8cc1Swenshuai.xi }
5919*53ee8cc1Swenshuai.xi 
5920*53ee8cc1Swenshuai.xi 
5921*53ee8cc1Swenshuai.xi /********************************************************************************/
5922*53ee8cc1Swenshuai.xi /// Set GOP bandwidth saving mode.
5923*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5924*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5925*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_SetGOPBWStrength(EN_GOP_BW_STRENGTH eGOPBWStr,MS_U8 u8GOP)5926*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetGOPBWStrength(EN_GOP_BW_STRENGTH eGOPBWStr, MS_U8 u8GOP)
5927*53ee8cc1Swenshuai.xi {
5928*53ee8cc1Swenshuai.xi     EN_GOP_BW_STRENGTH eBWStr;
5929*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
5930*53ee8cc1Swenshuai.xi 
5931*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5932*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
5933*53ee8cc1Swenshuai.xi     eBWStr = eGOPBWStr;
5934*53ee8cc1Swenshuai.xi 
5935*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_BW_STRENGTH;
5936*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
5937*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&eBWStr;
5938*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(EN_GOP_BW_STRENGTH);
5939*53ee8cc1Swenshuai.xi 
5940*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5941*53ee8cc1Swenshuai.xi     {
5942*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5943*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5944*53ee8cc1Swenshuai.xi     }
5945*53ee8cc1Swenshuai.xi 
5946*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5947*53ee8cc1Swenshuai.xi }
5948*53ee8cc1Swenshuai.xi 
5949*53ee8cc1Swenshuai.xi 
5950*53ee8cc1Swenshuai.xi /********************************************************************************/
5951*53ee8cc1Swenshuai.xi /// Get GOP Power OFF for saving power.
5952*53ee8cc1Swenshuai.xi /// @return EN_GOP_BW_STRENGTH - mode of GOP bw saving .
5953*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GetGOPBWStrength(MS_U8 u8GOP,EN_GOP_BW_STRENGTH * curBW)5954*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetGOPBWStrength(MS_U8 u8GOP, EN_GOP_BW_STRENGTH* curBW)
5955*53ee8cc1Swenshuai.xi {
5956*53ee8cc1Swenshuai.xi 
5957*53ee8cc1Swenshuai.xi     EN_GOP_BW_STRENGTH eBWStr;
5958*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
5959*53ee8cc1Swenshuai.xi 
5960*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5961*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
5962*53ee8cc1Swenshuai.xi 
5963*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_BW_STRENGTH;
5964*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
5965*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&eBWStr;
5966*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(EN_GOP_BW_STRENGTH);
5967*53ee8cc1Swenshuai.xi 
5968*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5969*53ee8cc1Swenshuai.xi     {
5970*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5971*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
5972*53ee8cc1Swenshuai.xi     }
5973*53ee8cc1Swenshuai.xi     * curBW = eBWStr;
5974*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
5975*53ee8cc1Swenshuai.xi 
5976*53ee8cc1Swenshuai.xi }
5977*53ee8cc1Swenshuai.xi 
5978*53ee8cc1Swenshuai.xi /********************************************************************************/
5979*53ee8cc1Swenshuai.xi /// Set GOP bandwidth saving mode.
5980*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
5981*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
5982*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_SetGOPYUV(MS_U8 u8GOP)5983*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetGOPYUV(MS_U8 u8GOP)
5984*53ee8cc1Swenshuai.xi {
5985*53ee8cc1Swenshuai.xi     MS_U32  value = 0;
5986*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
5987*53ee8cc1Swenshuai.xi 
5988*53ee8cc1Swenshuai.xi     GOP_ENTRY();
5989*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
5990*53ee8cc1Swenshuai.xi 
5991*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_YUV;
5992*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
5993*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&value;
5994*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
5995*53ee8cc1Swenshuai.xi 
5996*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
5997*53ee8cc1Swenshuai.xi     {
5998*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
5999*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6000*53ee8cc1Swenshuai.xi     }
6001*53ee8cc1Swenshuai.xi 
6002*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6003*53ee8cc1Swenshuai.xi 
6004*53ee8cc1Swenshuai.xi }
6005*53ee8cc1Swenshuai.xi 
6006*53ee8cc1Swenshuai.xi /********************************************************************************/
6007*53ee8cc1Swenshuai.xi /// Configure panel hstart timing for GOP; For configuring correct OSD position.
6008*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6009*53ee8cc1Swenshuai.xi /// @param u16PanelHStr \b IN horizontal start
6010*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6011*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6012*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_SetGOPHStart(MS_U8 u8GOP,MS_U16 u16PanelHStr)6013*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetGOPHStart(MS_U8 u8GOP,MS_U16 u16PanelHStr)
6014*53ee8cc1Swenshuai.xi {
6015*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6016*53ee8cc1Swenshuai.xi     MS_U32 u32PHstart;
6017*53ee8cc1Swenshuai.xi 
6018*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6019*53ee8cc1Swenshuai.xi 
6020*53ee8cc1Swenshuai.xi     u32PHstart = u16PanelHStr;
6021*53ee8cc1Swenshuai.xi 
6022*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_HSTART;
6023*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6024*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = &u32PHstart;
6025*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U16);
6026*53ee8cc1Swenshuai.xi 
6027*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6028*53ee8cc1Swenshuai.xi     {
6029*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6030*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6031*53ee8cc1Swenshuai.xi     }
6032*53ee8cc1Swenshuai.xi 
6033*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6034*53ee8cc1Swenshuai.xi 
6035*53ee8cc1Swenshuai.xi }
6036*53ee8cc1Swenshuai.xi 
6037*53ee8cc1Swenshuai.xi /********************************************************************************/
6038*53ee8cc1Swenshuai.xi /// Configure panel hstart timing for GOP; For configuring correct OSD position.
6039*53ee8cc1Swenshuai.xi /// @param u16PanelHStr \b IN horizontal start
6040*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6041*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6042*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_VE_SetOutputTiming(GOP_VE_TIMINGTYPE mode)6043*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_VE_SetOutputTiming(GOP_VE_TIMINGTYPE mode)
6044*53ee8cc1Swenshuai.xi {
6045*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6046*53ee8cc1Swenshuai.xi 
6047*53ee8cc1Swenshuai.xi     GOP_VE_PROPERTY_PARAM ioctl_info;
6048*53ee8cc1Swenshuai.xi     GOP_VE_TIMING_INFO VETimingInfo;
6049*53ee8cc1Swenshuai.xi 
6050*53ee8cc1Swenshuai.xi     VETimingInfo.mode = mode;
6051*53ee8cc1Swenshuai.xi 
6052*53ee8cc1Swenshuai.xi     ioctl_info.en_ve_property = E_GOP_VE_OUTPUT_TIMING;
6053*53ee8cc1Swenshuai.xi     ioctl_info.pVEProp = (MS_U32*)&VETimingInfo;
6054*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_VE_TIMING_INFO);
6055*53ee8cc1Swenshuai.xi 
6056*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_VE_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6057*53ee8cc1Swenshuai.xi     {
6058*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6059*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6060*53ee8cc1Swenshuai.xi     }
6061*53ee8cc1Swenshuai.xi 
6062*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6063*53ee8cc1Swenshuai.xi 
6064*53ee8cc1Swenshuai.xi }
6065*53ee8cc1Swenshuai.xi 
6066*53ee8cc1Swenshuai.xi /********************************************************************************/
6067*53ee8cc1Swenshuai.xi /// Configure panel hstart timing for GOP; For configuring correct OSD position.
6068*53ee8cc1Swenshuai.xi /// @param u16PanelHStr \b IN horizontal start
6069*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6070*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6071*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_MIXER_SetOutputTiming(GOP_MIXER_TIMINGTYPE mode,GOP_MixerTiming * pMT)6072*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_MIXER_SetOutputTiming(GOP_MIXER_TIMINGTYPE mode,  GOP_MixerTiming *pMT)
6073*53ee8cc1Swenshuai.xi {
6074*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6075*53ee8cc1Swenshuai.xi 
6076*53ee8cc1Swenshuai.xi     GOP_MIXER_PROPERTY_PARAM ioctl_info;
6077*53ee8cc1Swenshuai.xi     GOP_MIXER_TIMING_INFO MixerTimingInfo;
6078*53ee8cc1Swenshuai.xi 
6079*53ee8cc1Swenshuai.xi     memcpy(&MixerTimingInfo.pMT, pMT, sizeof(GOP_MixerTiming));
6080*53ee8cc1Swenshuai.xi     MixerTimingInfo.mode = mode;
6081*53ee8cc1Swenshuai.xi 
6082*53ee8cc1Swenshuai.xi     ioctl_info.en_mixer_property = E_GOP_MIXER_OUTPUT_TIMING;
6083*53ee8cc1Swenshuai.xi     ioctl_info.pMixerProp = (MS_U32*)&MixerTimingInfo;
6084*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_MIXER_TIMING_INFO);
6085*53ee8cc1Swenshuai.xi 
6086*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MIXER_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6087*53ee8cc1Swenshuai.xi     {
6088*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6089*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6090*53ee8cc1Swenshuai.xi     }
6091*53ee8cc1Swenshuai.xi 
6092*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6093*53ee8cc1Swenshuai.xi }
6094*53ee8cc1Swenshuai.xi 
6095*53ee8cc1Swenshuai.xi /********************************************************************************/
6096*53ee8cc1Swenshuai.xi /// Configure mixer timing for GOP destination MIXER2OP; For configuring correct OSD position.
6097*53ee8cc1Swenshuai.xi /// @param pMT \b IN:  mixer timing
6098*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6099*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6100*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_MIXER_SetMIXER2OPOutputTiming(GOP_Mixer2OPTiming * pMT)6101*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_MIXER_SetMIXER2OPOutputTiming(GOP_Mixer2OPTiming *pMT)
6102*53ee8cc1Swenshuai.xi {
6103*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6104*53ee8cc1Swenshuai.xi 
6105*53ee8cc1Swenshuai.xi     GOP_MIXER_PROPERTY_PARAM ioctl_info;
6106*53ee8cc1Swenshuai.xi     GOP_Mixer2OPTiming Mixer2OPTiming;
6107*53ee8cc1Swenshuai.xi 
6108*53ee8cc1Swenshuai.xi     memcpy(&Mixer2OPTiming, pMT, sizeof(GOP_Mixer2OPTiming));
6109*53ee8cc1Swenshuai.xi 
6110*53ee8cc1Swenshuai.xi     ioctl_info.en_mixer_property = E_GOP_MIXER_TO_OP_OUTPUT_TIMING;
6111*53ee8cc1Swenshuai.xi     ioctl_info.pMixerProp = (MS_U32*)&Mixer2OPTiming;
6112*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_Mixer2OPTiming);
6113*53ee8cc1Swenshuai.xi 
6114*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MIXER_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6115*53ee8cc1Swenshuai.xi     {
6116*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6117*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6118*53ee8cc1Swenshuai.xi     }
6119*53ee8cc1Swenshuai.xi 
6120*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6121*53ee8cc1Swenshuai.xi }
6122*53ee8cc1Swenshuai.xi 
6123*53ee8cc1Swenshuai.xi /********************************************************************************/
6124*53ee8cc1Swenshuai.xi /// Enable Mixer for Vfilter
6125*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6126*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Vfilter
6127*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Vfilter
6128*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6129*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6130*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_MIXER_EnableVfilter(MS_BOOL bEnable)6131*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_MIXER_EnableVfilter(MS_BOOL bEnable)
6132*53ee8cc1Swenshuai.xi {
6133*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6134*53ee8cc1Swenshuai.xi 
6135*53ee8cc1Swenshuai.xi     GOP_MIXER_PROPERTY_PARAM ioctl_info;
6136*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
6137*53ee8cc1Swenshuai.xi 
6138*53ee8cc1Swenshuai.xi     bEna = bEnable;
6139*53ee8cc1Swenshuai.xi 
6140*53ee8cc1Swenshuai.xi     ioctl_info.en_mixer_property = E_GOP_MIXER_V_FILTER;
6141*53ee8cc1Swenshuai.xi     ioctl_info.pMixerProp = (void*)&bEna;
6142*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
6143*53ee8cc1Swenshuai.xi 
6144*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MIXER_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6145*53ee8cc1Swenshuai.xi     {
6146*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6147*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6148*53ee8cc1Swenshuai.xi     }
6149*53ee8cc1Swenshuai.xi 
6150*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6151*53ee8cc1Swenshuai.xi }
6152*53ee8cc1Swenshuai.xi 
6153*53ee8cc1Swenshuai.xi /*******************************************************************************/
6154*53ee8cc1Swenshuai.xi //Set which MUX select which GOP of mixer, when different gop do the alpha blending
6155*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6156*53ee8cc1Swenshuai.xi /// @param u8Mux \b IN:  Mux number
6157*53ee8cc1Swenshuai.xi /// @param bEn \b IN:
6158*53ee8cc1Swenshuai.xi ///   - # TRUE Enable u8GOP to mixer u8Mux
6159*53ee8cc1Swenshuai.xi ///   - # FALSE Disable u8GOP to mixer u8Mux
6160*53ee8cc1Swenshuai.xi //@return GOP_API_SUCCESS - Success
6161*53ee8cc1Swenshuai.xi /*******************************************************************************/
MApi_GOP_MIXER_SetMux(MS_U8 u8GOP,MS_U8 u8Mux,MS_BOOL bEn)6162*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_MIXER_SetMux(MS_U8 u8GOP,MS_U8 u8Mux, MS_BOOL bEn) //jasmine2
6163*53ee8cc1Swenshuai.xi {
6164*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6165*53ee8cc1Swenshuai.xi 
6166*53ee8cc1Swenshuai.xi     //Need to implement
6167*53ee8cc1Swenshuai.xi 
6168*53ee8cc1Swenshuai.xi 
6169*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6170*53ee8cc1Swenshuai.xi }
6171*53ee8cc1Swenshuai.xi 
6172*53ee8cc1Swenshuai.xi /********************************************************************************/
6173*53ee8cc1Swenshuai.xi /// Enable Mixer for old mode blending
6174*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6175*53ee8cc1Swenshuai.xi ///   - # TRUE Enable old mode
6176*53ee8cc1Swenshuai.xi ///   - # FALSE Disable old mode
6177*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6178*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6179*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_MIXER_EnableOldBlendMode(MS_U8 u8GOP,MS_BOOL bEnable)6180*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_MIXER_EnableOldBlendMode(MS_U8 u8GOP, MS_BOOL bEnable)
6181*53ee8cc1Swenshuai.xi {
6182*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6183*53ee8cc1Swenshuai.xi 
6184*53ee8cc1Swenshuai.xi     GOP_MIXER_PROPERTY_PARAM ioctl_info;
6185*53ee8cc1Swenshuai.xi     GOP_MixerOldBlendingMode MixerOldBlendingMode;
6186*53ee8cc1Swenshuai.xi     MixerOldBlendingMode.bEnable = bEnable;
6187*53ee8cc1Swenshuai.xi     MixerOldBlendingMode.u8GOP = u8GOP;
6188*53ee8cc1Swenshuai.xi 
6189*53ee8cc1Swenshuai.xi     ioctl_info.en_mixer_property = E_GOP_MIXER_OLD_BLENDING_MODE;
6190*53ee8cc1Swenshuai.xi     ioctl_info.pMixerProp = (void*)&MixerOldBlendingMode;
6191*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_MixerOldBlendingMode);
6192*53ee8cc1Swenshuai.xi 
6193*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MIXER_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6194*53ee8cc1Swenshuai.xi     {
6195*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6196*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6197*53ee8cc1Swenshuai.xi     }
6198*53ee8cc1Swenshuai.xi 
6199*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6200*53ee8cc1Swenshuai.xi 
6201*53ee8cc1Swenshuai.xi }
6202*53ee8cc1Swenshuai.xi 
6203*53ee8cc1Swenshuai.xi 
6204*53ee8cc1Swenshuai.xi //******************************************************************************
6205*53ee8cc1Swenshuai.xi /// Call this API to Nofify GOP could restore from vsync. limitation. That
6206*53ee8cc1Swenshuai.xi /// means App. could switch back to its dst.
6207*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6208*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_RestoreFromVsyncLimitation(void)6209*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_RestoreFromVsyncLimitation(void)
6210*53ee8cc1Swenshuai.xi {
6211*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6212*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT\n",__FUNCTION__);
6213*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6214*53ee8cc1Swenshuai.xi }
6215*53ee8cc1Swenshuai.xi 
6216*53ee8cc1Swenshuai.xi /********************************************************************************/
6217*53ee8cc1Swenshuai.xi /// Configure GOP brightness
6218*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6219*53ee8cc1Swenshuai.xi /// @param u16BriVal \b IN brightness value
6220*53ee8cc1Swenshuai.xi /// @param bMSB \b IN MSB
6221*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6222*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6223*53ee8cc1Swenshuai.xi /********************************************************************************/
6224*53ee8cc1Swenshuai.xi 
MApi_GOP_SetGOPBrightness(MS_U8 u8GOP,MS_U16 u16BriVal,MS_BOOL bMSB)6225*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetGOPBrightness(MS_U8 u8GOP,MS_U16 u16BriVal,MS_BOOL bMSB)
6226*53ee8cc1Swenshuai.xi {
6227*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6228*53ee8cc1Swenshuai.xi     GOP_BRIGHTNESS  bri;
6229*53ee8cc1Swenshuai.xi 
6230*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6231*53ee8cc1Swenshuai.xi 
6232*53ee8cc1Swenshuai.xi     bri.bMSB = bMSB;
6233*53ee8cc1Swenshuai.xi     bri.Brightness = u16BriVal;
6234*53ee8cc1Swenshuai.xi 
6235*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_BRIGHTNESS;
6236*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6237*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&bri;
6238*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_BRIGHTNESS);
6239*53ee8cc1Swenshuai.xi 
6240*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6241*53ee8cc1Swenshuai.xi     {
6242*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6243*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6244*53ee8cc1Swenshuai.xi     }
6245*53ee8cc1Swenshuai.xi 
6246*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6247*53ee8cc1Swenshuai.xi 
6248*53ee8cc1Swenshuai.xi }
6249*53ee8cc1Swenshuai.xi 
6250*53ee8cc1Swenshuai.xi /********************************************************************************/
6251*53ee8cc1Swenshuai.xi /// Enable LB Couple Feature to enlarge GOP FIFO for BW issue
6252*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6253*53ee8cc1Swenshuai.xi /// @param bEnable \b IN Enable or Disable
6254*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6255*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6256*53ee8cc1Swenshuai.xi /********************************************************************************/
6257*53ee8cc1Swenshuai.xi 
MApi_GOP_EnableLBCouple(MS_U8 u8GOP,MS_BOOL bEnable)6258*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_EnableLBCouple(MS_U8 u8GOP, MS_BOOL bEnable)
6259*53ee8cc1Swenshuai.xi {
6260*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
6261*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6262*53ee8cc1Swenshuai.xi 
6263*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6264*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
6265*53ee8cc1Swenshuai.xi     bEna = bEnable;
6266*53ee8cc1Swenshuai.xi 
6267*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_LB_COUPLE;
6268*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6269*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bEna;
6270*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
6271*53ee8cc1Swenshuai.xi 
6272*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6273*53ee8cc1Swenshuai.xi     {
6274*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6275*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6276*53ee8cc1Swenshuai.xi     }
6277*53ee8cc1Swenshuai.xi 
6278*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6279*53ee8cc1Swenshuai.xi }
6280*53ee8cc1Swenshuai.xi 
6281*53ee8cc1Swenshuai.xi /********************************************************************************/
6282*53ee8cc1Swenshuai.xi /// Get GOP brightness value
6283*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6284*53ee8cc1Swenshuai.xi /// @param u16BriVal \b OUT brightness value
6285*53ee8cc1Swenshuai.xi /// @param bMSB \b OUT MSB
6286*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6287*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6288*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GetGOPBrightness(MS_U8 u8GOP,MS_U16 * u16BriVal,MS_BOOL * bMSB)6289*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetGOPBrightness(MS_U8 u8GOP,MS_U16* u16BriVal,MS_BOOL* bMSB)
6290*53ee8cc1Swenshuai.xi {
6291*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6292*53ee8cc1Swenshuai.xi     GOP_BRIGHTNESS  bri;
6293*53ee8cc1Swenshuai.xi 
6294*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6295*53ee8cc1Swenshuai.xi 
6296*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
6297*53ee8cc1Swenshuai.xi     memset(&bri, 0x0, sizeof(GOP_BRIGHTNESS));
6298*53ee8cc1Swenshuai.xi 
6299*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_BRIGHTNESS;
6300*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6301*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bri;
6302*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_BRIGHTNESS);
6303*53ee8cc1Swenshuai.xi 
6304*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6305*53ee8cc1Swenshuai.xi     {
6306*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6307*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6308*53ee8cc1Swenshuai.xi     }
6309*53ee8cc1Swenshuai.xi 
6310*53ee8cc1Swenshuai.xi     *bMSB      = bri.bMSB;
6311*53ee8cc1Swenshuai.xi     *u16BriVal = bri.Brightness;
6312*53ee8cc1Swenshuai.xi 
6313*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6314*53ee8cc1Swenshuai.xi 
6315*53ee8cc1Swenshuai.xi }
6316*53ee8cc1Swenshuai.xi 
6317*53ee8cc1Swenshuai.xi //******************************************************************************
6318*53ee8cc1Swenshuai.xi /// API for enable or disable Tile mode for GWIN
6319*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN id
6320*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6321*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Tile Mode for GWIN
6322*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Tile Mode for GWIN
6323*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6324*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6325*53ee8cc1Swenshuai.xi 
6326*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_EnableTileMode(MS_U8 winId,MS_BOOL bEnable,EN_GOP_TILE_DATA_TYPE tiletype)6327*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EnableTileMode(MS_U8 winId, MS_BOOL bEnable, EN_GOP_TILE_DATA_TYPE tiletype )
6328*53ee8cc1Swenshuai.xi {
6329*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6330*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT bEn:%d type:%d\n",__FUNCTION__,bEnable, tiletype);
6331*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6332*53ee8cc1Swenshuai.xi }
6333*53ee8cc1Swenshuai.xi 
6334*53ee8cc1Swenshuai.xi 
6335*53ee8cc1Swenshuai.xi //******************************************************************************
6336*53ee8cc1Swenshuai.xi /// API for set gop miu selection
6337*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6338*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Tile Mode for GWIN
6339*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Tile Mode for GWIN
6340*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6341*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6342*53ee8cc1Swenshuai.xi 
6343*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_MIUSel(MS_U8 u8GOP,EN_GOP_SEL_TYPE MiuSel)6344*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_MIUSel(MS_U8 u8GOP, EN_GOP_SEL_TYPE MiuSel )
6345*53ee8cc1Swenshuai.xi {
6346*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6347*53ee8cc1Swenshuai.xi     EN_GOP_SEL_TYPE  miu;
6348*53ee8cc1Swenshuai.xi 
6349*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6350*53ee8cc1Swenshuai.xi 
6351*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
6352*53ee8cc1Swenshuai.xi     memset(&miu, 0x0, sizeof(EN_GOP_SEL_TYPE));
6353*53ee8cc1Swenshuai.xi 
6354*53ee8cc1Swenshuai.xi 
6355*53ee8cc1Swenshuai.xi     miu = MiuSel;
6356*53ee8cc1Swenshuai.xi 
6357*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_MIUSEL;
6358*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&miu;
6359*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx = u8GOP;
6360*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(EN_GOP_SEL_TYPE);
6361*53ee8cc1Swenshuai.xi 
6362*53ee8cc1Swenshuai.xi 
6363*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6364*53ee8cc1Swenshuai.xi     {
6365*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6366*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6367*53ee8cc1Swenshuai.xi     }
6368*53ee8cc1Swenshuai.xi 
6369*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6370*53ee8cc1Swenshuai.xi 
6371*53ee8cc1Swenshuai.xi }
6372*53ee8cc1Swenshuai.xi 
6373*53ee8cc1Swenshuai.xi //******************************************************************************
6374*53ee8cc1Swenshuai.xi /// API for query gop miu selection
6375*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6376*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Tile Mode for GWIN
6377*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Tile Mode for GWIN
6378*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6379*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6380*53ee8cc1Swenshuai.xi 
6381*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GetMIUSel(MS_U8 u8GOP)6382*53ee8cc1Swenshuai.xi MS_U8 MApi_GOP_GetMIUSel(MS_U8 u8GOP)
6383*53ee8cc1Swenshuai.xi {
6384*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6385*53ee8cc1Swenshuai.xi     EN_GOP_SEL_TYPE  miu;
6386*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6387*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_MIUSEL;
6388*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6389*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&miu;
6390*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(EN_GOP_SEL_TYPE);
6391*53ee8cc1Swenshuai.xi 
6392*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6393*53ee8cc1Swenshuai.xi     {
6394*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6395*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6396*53ee8cc1Swenshuai.xi     }
6397*53ee8cc1Swenshuai.xi 
6398*53ee8cc1Swenshuai.xi     GOP_RETURN( (MS_U8)miu);
6399*53ee8cc1Swenshuai.xi }
6400*53ee8cc1Swenshuai.xi 
6401*53ee8cc1Swenshuai.xi 
6402*53ee8cc1Swenshuai.xi //******************************************************************************
6403*53ee8cc1Swenshuai.xi /// API for set gop pinpong
6404*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN id
6405*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6406*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Tile Mode for GWIN
6407*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Tile Mode for GWIN
6408*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6409*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6410*53ee8cc1Swenshuai.xi 
6411*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_SetPINPON(MS_U8 winId,MS_BOOL bEn,GOP_PINPON_MODE PINPON_Mode)6412*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetPINPON(MS_U8 winId, MS_BOOL bEn,GOP_PINPON_MODE PINPON_Mode)
6413*53ee8cc1Swenshuai.xi {
6414*53ee8cc1Swenshuai.xi     GOP_SET_PINPON_INFO pinpon_info;
6415*53ee8cc1Swenshuai.xi     switch(PINPON_Mode)
6416*53ee8cc1Swenshuai.xi     {
6417*53ee8cc1Swenshuai.xi         case GOP_PINPON_G3D:
6418*53ee8cc1Swenshuai.xi             pinpon_info.mode = E_GOP_PINPON_G3D;
6419*53ee8cc1Swenshuai.xi             break;
6420*53ee8cc1Swenshuai.xi         case GOP_PINPON_VE:
6421*53ee8cc1Swenshuai.xi             pinpon_info.mode = E_GOP_PINPON_VE;
6422*53ee8cc1Swenshuai.xi             break;
6423*53ee8cc1Swenshuai.xi         case GOP_PINPON_DWIN:
6424*53ee8cc1Swenshuai.xi             pinpon_info.mode = E_GOP_PINPON_DWIN;
6425*53ee8cc1Swenshuai.xi             break;
6426*53ee8cc1Swenshuai.xi         case GOP_PINPON_DIP:
6427*53ee8cc1Swenshuai.xi             pinpon_info.mode = E_GOP_PINPON_DIP;
6428*53ee8cc1Swenshuai.xi             break;
6429*53ee8cc1Swenshuai.xi         case GOP_PINPON_DWIN0:
6430*53ee8cc1Swenshuai.xi             pinpon_info.mode = E_GOP_PINPON_DWIN0;
6431*53ee8cc1Swenshuai.xi             break;
6432*53ee8cc1Swenshuai.xi         case GOP_PINPON_DWIN1:
6433*53ee8cc1Swenshuai.xi             pinpon_info.mode = E_GOP_PINPON_DWIN1;
6434*53ee8cc1Swenshuai.xi             break;
6435*53ee8cc1Swenshuai.xi         default:
6436*53ee8cc1Swenshuai.xi             GOP_ERR("MApi_GOP_SetPINPON Enum not mapping!\n");
6437*53ee8cc1Swenshuai.xi             return GOP_API_INVALID_PARAMETERS;
6438*53ee8cc1Swenshuai.xi     }
6439*53ee8cc1Swenshuai.xi     pinpon_info.GwinId  = winId;
6440*53ee8cc1Swenshuai.xi     pinpon_info.bEnable = bEn;
6441*53ee8cc1Swenshuai.xi 
6442*53ee8cc1Swenshuai.xi     GOP_SET_PINPON_PARAM ioctl_info;
6443*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6444*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_SET_PINPON;
6445*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&pinpon_info;
6446*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_SET_PINPON_INFO);
6447*53ee8cc1Swenshuai.xi 
6448*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PINPON,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6449*53ee8cc1Swenshuai.xi     {
6450*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6451*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
6452*53ee8cc1Swenshuai.xi     }
6453*53ee8cc1Swenshuai.xi 
6454*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6455*53ee8cc1Swenshuai.xi }
6456*53ee8cc1Swenshuai.xi 
MApi_GOP_DWIN_SetBufferPINPON(MS_PHY phyfbaddr0,MS_PHY phyfbaddr1)6457*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_DWIN_SetBufferPINPON(MS_PHY phyfbaddr0,MS_PHY phyfbaddr1)
6458*53ee8cc1Swenshuai.xi {
6459*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6460*53ee8cc1Swenshuai.xi 
6461*53ee8cc1Swenshuai.xi     GOP_DWIN_PROPERTY_PARAM ioctl_info;
6462*53ee8cc1Swenshuai.xi     GOP_PINPON_INFO stPinpon;
6463*53ee8cc1Swenshuai.xi 
6464*53ee8cc1Swenshuai.xi     stPinpon.u64Addr0 = phyfbaddr0;
6465*53ee8cc1Swenshuai.xi     stPinpon.u64Addr1 = phyfbaddr1;
6466*53ee8cc1Swenshuai.xi     ioctl_info.en_dwin_property = E_GOP_DWIN_PINPON;
6467*53ee8cc1Swenshuai.xi     ioctl_info.pDwinProp = (MS_U32*)&stPinpon;
6468*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_PINPON_INFO);
6469*53ee8cc1Swenshuai.xi 
6470*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_DWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6471*53ee8cc1Swenshuai.xi     {
6472*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6473*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6474*53ee8cc1Swenshuai.xi     }
6475*53ee8cc1Swenshuai.xi 
6476*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6477*53ee8cc1Swenshuai.xi }
6478*53ee8cc1Swenshuai.xi //******************************************************************************
6479*53ee8cc1Swenshuai.xi /// API for set U/V SWAP
6480*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: GOP number
6481*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6482*53ee8cc1Swenshuai.xi ///   - # TRUE Enable U/V SWAP for GOP
6483*53ee8cc1Swenshuai.xi ///   - # FALSE Disable U/V SWAP for GOP
6484*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6485*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6486*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_SetUVSwap(MS_U8 u8GOP,MS_BOOL bEn)6487*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetUVSwap(MS_U8 u8GOP, MS_BOOL bEn)
6488*53ee8cc1Swenshuai.xi {
6489*53ee8cc1Swenshuai.xi 
6490*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6491*53ee8cc1Swenshuai.xi     MS_U32  UVSwapEn;
6492*53ee8cc1Swenshuai.xi 
6493*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6494*53ee8cc1Swenshuai.xi 
6495*53ee8cc1Swenshuai.xi     UVSwapEn = bEn;
6496*53ee8cc1Swenshuai.xi 
6497*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_UV_SWAP;
6498*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6499*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&UVSwapEn;
6500*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
6501*53ee8cc1Swenshuai.xi 
6502*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6503*53ee8cc1Swenshuai.xi     {
6504*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6505*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6506*53ee8cc1Swenshuai.xi     }
6507*53ee8cc1Swenshuai.xi 
6508*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6509*53ee8cc1Swenshuai.xi }
6510*53ee8cc1Swenshuai.xi 
6511*53ee8cc1Swenshuai.xi //******************************************************************************
6512*53ee8cc1Swenshuai.xi /// API for set Y/C SWAP
6513*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: GOP number
6514*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6515*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Y/C SWAP for GOP
6516*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Y/C SWAP for GOP
6517*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6518*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6519*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_SetYCSwap(MS_U8 u8GOP,MS_BOOL bEn)6520*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetYCSwap(MS_U8 u8GOP, MS_BOOL bEn)
6521*53ee8cc1Swenshuai.xi {
6522*53ee8cc1Swenshuai.xi 
6523*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6524*53ee8cc1Swenshuai.xi     MS_U32  YCSwapEn;
6525*53ee8cc1Swenshuai.xi 
6526*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6527*53ee8cc1Swenshuai.xi 
6528*53ee8cc1Swenshuai.xi     YCSwapEn = bEn;
6529*53ee8cc1Swenshuai.xi 
6530*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_YC_SWAP;
6531*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6532*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&YCSwapEn;
6533*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
6534*53ee8cc1Swenshuai.xi 
6535*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6536*53ee8cc1Swenshuai.xi     {
6537*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6538*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6539*53ee8cc1Swenshuai.xi     }
6540*53ee8cc1Swenshuai.xi 
6541*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6542*53ee8cc1Swenshuai.xi }
6543*53ee8cc1Swenshuai.xi 
6544*53ee8cc1Swenshuai.xi //******************************************************************************
6545*53ee8cc1Swenshuai.xi /// API for set GWIN New Alpha Mode
6546*53ee8cc1Swenshuai.xi /// @param gWinId \b IN: GWin ID
6547*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
6548*53ee8cc1Swenshuai.xi ///   - # TRUE enable new alpha mode
6549*53ee8cc1Swenshuai.xi ///   - # FALSE disable new alpha mode
6550*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6551*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6552*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_SetNewAlphaMode(MS_U8 gWinId,MS_BOOL bEnable)6553*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetNewAlphaMode(MS_U8 gWinId, MS_BOOL bEnable)
6554*53ee8cc1Swenshuai.xi {
6555*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
6556*53ee8cc1Swenshuai.xi 
6557*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6558*53ee8cc1Swenshuai.xi 
6559*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_NEWAPLHA;
6560*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = gWinId;
6561*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (void*) &bEnable;
6562*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(MS_BOOL);
6563*53ee8cc1Swenshuai.xi 
6564*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6565*53ee8cc1Swenshuai.xi     {
6566*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6567*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6568*53ee8cc1Swenshuai.xi     }
6569*53ee8cc1Swenshuai.xi 
6570*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6571*53ee8cc1Swenshuai.xi }
6572*53ee8cc1Swenshuai.xi 
6573*53ee8cc1Swenshuai.xi //******************************************************************************
6574*53ee8cc1Swenshuai.xi /// API for Trigger reg writes in
6575*53ee8cc1Swenshuai.xi /// @param u8win \b IN: GWin ID
6576*53ee8cc1Swenshuai.xi /// @param bForceWriteIn \b IN:
6577*53ee8cc1Swenshuai.xi ///   - # TRUE , Register will take effect immediately
6578*53ee8cc1Swenshuai.xi ///   - # FALSE, Register will take effect after the next vsync
6579*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6580*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6581*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_TriggerRegWriteIn(MS_U8 u8win,MS_BOOL bForceWriteIn)6582*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_TriggerRegWriteIn(MS_U8 u8win, MS_BOOL bForceWriteIn)
6583*53ee8cc1Swenshuai.xi {
6584*53ee8cc1Swenshuai.xi     E_GOP_API_Result ret;
6585*53ee8cc1Swenshuai.xi     ret = MApi_GOP_TriggerRegWriteIn_Ex(u8win, bForceWriteIn, TRUE);
6586*53ee8cc1Swenshuai.xi     return ret;
6587*53ee8cc1Swenshuai.xi }
6588*53ee8cc1Swenshuai.xi 
6589*53ee8cc1Swenshuai.xi //******************************************************************************
6590*53ee8cc1Swenshuai.xi /// API for Trigger reg writes in
6591*53ee8cc1Swenshuai.xi /// @param u8win \b IN: GWin ID
6592*53ee8cc1Swenshuai.xi /// @param bForceWriteIn \b IN:
6593*53ee8cc1Swenshuai.xi ///   - # TRUE , Register will take effect immediately
6594*53ee8cc1Swenshuai.xi ///   - # FALSE, Register will take effect after the next vsync
6595*53ee8cc1Swenshuai.xi /// @param bSync \b IN:
6596*53ee8cc1Swenshuai.xi ///   - # FALSE , Register will fire without waiting vsync (driver will not polling the vsync)
6597*53ee8cc1Swenshuai.xi ///   - # TRUE, Register will fire and waiting vsync
6598*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6599*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6600*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_TriggerRegWriteIn_Ex(MS_U8 u8win,MS_BOOL bForceWriteIn,MS_BOOL bSync)6601*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_TriggerRegWriteIn_Ex(MS_U8 u8win, MS_BOOL bForceWriteIn, MS_BOOL bSync)
6602*53ee8cc1Swenshuai.xi {
6603*53ee8cc1Swenshuai.xi     GOP_UPDATE_PARAM ioctl_info;
6604*53ee8cc1Swenshuai.xi     GOP_UPDATE_INFO update;
6605*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_gwin_info;
6606*53ee8cc1Swenshuai.xi     MS_U32 gop = INVAILD_GOP_NUM;
6607*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6608*53ee8cc1Swenshuai.xi 
6609*53ee8cc1Swenshuai.xi     ioctl_gwin_info.en_property = E_GOP_GWIN_GET_GOP;
6610*53ee8cc1Swenshuai.xi     ioctl_gwin_info.GwinId = u8win;
6611*53ee8cc1Swenshuai.xi     ioctl_gwin_info.pSet = (MS_U32*)&gop;
6612*53ee8cc1Swenshuai.xi     ioctl_gwin_info.u32Size = sizeof(MS_U32);
6613*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_GET_PROPERTY,(void*)&ioctl_gwin_info) != UTOPIA_STATUS_SUCCESS)
6614*53ee8cc1Swenshuai.xi     {
6615*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6616*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
6617*53ee8cc1Swenshuai.xi     }
6618*53ee8cc1Swenshuai.xi 
6619*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_UPDATE_PARAM));
6620*53ee8cc1Swenshuai.xi     memset(&update, 0x0, sizeof(GOP_UPDATE_INFO));
6621*53ee8cc1Swenshuai.xi 
6622*53ee8cc1Swenshuai.xi     update.gop_idx = gop;
6623*53ee8cc1Swenshuai.xi     update.update_type = E_GOP_UPDATE_FORCEWRITE;
6624*53ee8cc1Swenshuai.xi     update.bEn = bForceWriteIn;
6625*53ee8cc1Swenshuai.xi     update.bSync = bSync;
6626*53ee8cc1Swenshuai.xi 
6627*53ee8cc1Swenshuai.xi     ioctl_info.pUpdateInfo = (MS_U32*)&update;
6628*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_UPDATE_INFO);
6629*53ee8cc1Swenshuai.xi 
6630*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_UPDATE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6631*53ee8cc1Swenshuai.xi     {
6632*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6633*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6634*53ee8cc1Swenshuai.xi     }
6635*53ee8cc1Swenshuai.xi 
6636*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6637*53ee8cc1Swenshuai.xi 
6638*53ee8cc1Swenshuai.xi 
6639*53ee8cc1Swenshuai.xi }
6640*53ee8cc1Swenshuai.xi 
6641*53ee8cc1Swenshuai.xi 
6642*53ee8cc1Swenshuai.xi 
MApi_GOP_SetGOPContrast(MS_U8 u8GOP,MS_U16 u16YContrast,MS_U16 u16UContrast,MS_U16 u16VContrast)6643*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetGOPContrast( MS_U8 u8GOP, MS_U16 u16YContrast
6644*53ee8cc1Swenshuai.xi     , MS_U16 u16UContrast, MS_U16 u16VContrast )
6645*53ee8cc1Swenshuai.xi {
6646*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6647*53ee8cc1Swenshuai.xi     GOP_CONTRAST  contrast;
6648*53ee8cc1Swenshuai.xi 
6649*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6650*53ee8cc1Swenshuai.xi 
6651*53ee8cc1Swenshuai.xi     contrast.y = u16YContrast;
6652*53ee8cc1Swenshuai.xi     contrast.u = u16UContrast;
6653*53ee8cc1Swenshuai.xi     contrast.v = u16VContrast;
6654*53ee8cc1Swenshuai.xi 
6655*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_CONTRAST;
6656*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6657*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&contrast;
6658*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_CONTRAST);
6659*53ee8cc1Swenshuai.xi 
6660*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6661*53ee8cc1Swenshuai.xi     {
6662*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6663*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6664*53ee8cc1Swenshuai.xi     }
6665*53ee8cc1Swenshuai.xi 
6666*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6667*53ee8cc1Swenshuai.xi }
6668*53ee8cc1Swenshuai.xi 
MApi_GOP_GetGOPContrast(MS_U8 u8GOP,MS_U16 * u16YContrast,MS_U16 * u16UContrast,MS_U16 * u16VContrast)6669*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetGOPContrast( MS_U8 u8GOP, MS_U16* u16YContrast
6670*53ee8cc1Swenshuai.xi     , MS_U16* u16UContrast, MS_U16* u16VContrast )
6671*53ee8cc1Swenshuai.xi {
6672*53ee8cc1Swenshuai.xi 
6673*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6674*53ee8cc1Swenshuai.xi     GOP_CONTRAST  contrast;
6675*53ee8cc1Swenshuai.xi 
6676*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6677*53ee8cc1Swenshuai.xi 
6678*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_CONTRAST;
6679*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6680*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&contrast;
6681*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_CONTRAST);
6682*53ee8cc1Swenshuai.xi 
6683*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6684*53ee8cc1Swenshuai.xi     {
6685*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6686*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6687*53ee8cc1Swenshuai.xi     }
6688*53ee8cc1Swenshuai.xi 
6689*53ee8cc1Swenshuai.xi     *u16YContrast = contrast.y;
6690*53ee8cc1Swenshuai.xi     *u16UContrast = contrast.u;
6691*53ee8cc1Swenshuai.xi     *u16VContrast = contrast.v;
6692*53ee8cc1Swenshuai.xi 
6693*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6694*53ee8cc1Swenshuai.xi 
6695*53ee8cc1Swenshuai.xi }
6696*53ee8cc1Swenshuai.xi 
MApi_GOP_GetVECaptureState(PMS_GOP_VECAPTURESTATE pstVECapState)6697*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetVECaptureState(PMS_GOP_VECAPTURESTATE pstVECapState)
6698*53ee8cc1Swenshuai.xi {
6699*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT in utopia2\n",__FUNCTION__);
6700*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
6701*53ee8cc1Swenshuai.xi }
6702*53ee8cc1Swenshuai.xi 
MApi_GOP_VECaptureWaitOnFrame(PMS_GOP_VECAPTURESTATE pstVECapState)6703*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_VECaptureWaitOnFrame(PMS_GOP_VECAPTURESTATE pstVECapState)
6704*53ee8cc1Swenshuai.xi {
6705*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT in utopia2\n",__FUNCTION__);
6706*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
6707*53ee8cc1Swenshuai.xi }
6708*53ee8cc1Swenshuai.xi 
MApi_GOP_EnaVECapture(PMS_GOP_VECAPTURESTATE pstVECapState)6709*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_EnaVECapture(PMS_GOP_VECAPTURESTATE pstVECapState)
6710*53ee8cc1Swenshuai.xi {
6711*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT in utopia2\n",__FUNCTION__);
6712*53ee8cc1Swenshuai.xi     return GOP_API_FUN_NOT_SUPPORTED;
6713*53ee8cc1Swenshuai.xi }
6714*53ee8cc1Swenshuai.xi 
6715*53ee8cc1Swenshuai.xi //******************************************************************************
6716*53ee8cc1Swenshuai.xi /// API for Enable VEOSD
6717*53ee8cc1Swenshuai.xi /// @param u8win \b IN: GOP ID
6718*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6719*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6720*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_Enable_VEOSD(MS_U8 u8GOP,MS_BOOL bEn)6721*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_Enable_VEOSD(MS_U8 u8GOP, MS_BOOL bEn)
6722*53ee8cc1Swenshuai.xi {
6723*53ee8cc1Swenshuai.xi     MS_BOOL bEna;
6724*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
6725*53ee8cc1Swenshuai.xi 
6726*53ee8cc1Swenshuai.xi     GOP_ENTRY();
6727*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
6728*53ee8cc1Swenshuai.xi     bEna = bEn;
6729*53ee8cc1Swenshuai.xi 
6730*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_VE_OSD;
6731*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
6732*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bEna;
6733*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
6734*53ee8cc1Swenshuai.xi 
6735*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
6736*53ee8cc1Swenshuai.xi     {
6737*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6738*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
6739*53ee8cc1Swenshuai.xi     }
6740*53ee8cc1Swenshuai.xi 
6741*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
6742*53ee8cc1Swenshuai.xi }
6743*53ee8cc1Swenshuai.xi 
6744*53ee8cc1Swenshuai.xi 
6745*53ee8cc1Swenshuai.xi /*******************************************************************************/
6746*53ee8cc1Swenshuai.xi //Set configuration for special cases
6747*53ee8cc1Swenshuai.xi ///        - This is for special case usage. Do NOT overuse this function
6748*53ee8cc1Swenshuai.xi /// @param type \b IN:  Config type
6749*53ee8cc1Swenshuai.xi ///        - Think twice if you are going to add one type
6750*53ee8cc1Swenshuai.xi ///        - Be careful to create config type. Do NOT affect the normal code flow
6751*53ee8cc1Swenshuai.xi /// @param plist \b IN:  Config list for the specific type
6752*53ee8cc1Swenshuai.xi //         - This list could be an enum or a structure
6753*53ee8cc1Swenshuai.xi //@return GOP_API_SUCCESS - Success
6754*53ee8cc1Swenshuai.xi /*******************************************************************************/
MApi_GOP_SetConfig(EN_GOP_CONFIG_TYPE type,void * plist)6755*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetConfig(EN_GOP_CONFIG_TYPE type, void *plist)
6756*53ee8cc1Swenshuai.xi {
6757*53ee8cc1Swenshuai.xi     GOP_SETCONFIG_PARAM ioctl_info;
6758*53ee8cc1Swenshuai.xi     MS_U32 u32Size =0;
6759*53ee8cc1Swenshuai.xi 
6760*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
6761*53ee8cc1Swenshuai.xi 
6762*53ee8cc1Swenshuai.xi     switch(type)
6763*53ee8cc1Swenshuai.xi     {
6764*53ee8cc1Swenshuai.xi         case E_GOP_IGNOREINIT:
6765*53ee8cc1Swenshuai.xi         {
6766*53ee8cc1Swenshuai.xi             u32Size = sizeof(EN_GOP_IGNOREINIT);
6767*53ee8cc1Swenshuai.xi             break;
6768*53ee8cc1Swenshuai.xi         }
6769*53ee8cc1Swenshuai.xi         case E_GOP_CONSALPHA_BITS:
6770*53ee8cc1Swenshuai.xi         {
6771*53ee8cc1Swenshuai.xi             u32Size = sizeof(EN_GOP_CONSALPHA_BITS);
6772*53ee8cc1Swenshuai.xi             break;
6773*53ee8cc1Swenshuai.xi         }
6774*53ee8cc1Swenshuai.xi         default:
6775*53ee8cc1Swenshuai.xi             u32Size = 0;
6776*53ee8cc1Swenshuai.xi             break;
6777*53ee8cc1Swenshuai.xi     }
6778*53ee8cc1Swenshuai.xi 
6779*53ee8cc1Swenshuai.xi 
6780*53ee8cc1Swenshuai.xi     ioctl_info.cfg_type = type;
6781*53ee8cc1Swenshuai.xi     ioctl_info.pCfg = plist;
6782*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = u32Size;
6783*53ee8cc1Swenshuai.xi 
6784*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_CONFIG,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
6785*53ee8cc1Swenshuai.xi     {
6786*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6787*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
6788*53ee8cc1Swenshuai.xi     }
6789*53ee8cc1Swenshuai.xi 
6790*53ee8cc1Swenshuai.xi 
6791*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
6792*53ee8cc1Swenshuai.xi 
6793*53ee8cc1Swenshuai.xi 
6794*53ee8cc1Swenshuai.xi }
6795*53ee8cc1Swenshuai.xi 
6796*53ee8cc1Swenshuai.xi /********************************************************************************/
6797*53ee8cc1Swenshuai.xi /// Set config by GOP; For dynamic usage.
6798*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6799*53ee8cc1Swenshuai.xi /// @param pstInfo \b IN misc info
6800*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6801*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6802*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_SetConfigEx(MS_U8 u8Gop,EN_GOP_CONFIG_TYPE enType,void * plist)6803*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetConfigEx(MS_U8 u8Gop, EN_GOP_CONFIG_TYPE enType, void *plist)
6804*53ee8cc1Swenshuai.xi {
6805*53ee8cc1Swenshuai.xi     E_GOP_API_CMD_TYPE enApiCmdType;
6806*53ee8cc1Swenshuai.xi     GOP_SETCONFIG_PARAM ioctl_ConfigInfo;
6807*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_PropInfo;
6808*53ee8cc1Swenshuai.xi     void *pInfo = NULL;
6809*53ee8cc1Swenshuai.xi 
6810*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
6811*53ee8cc1Swenshuai.xi 
6812*53ee8cc1Swenshuai.xi     switch(enType)
6813*53ee8cc1Swenshuai.xi     {
6814*53ee8cc1Swenshuai.xi         case E_GOP_IGNOREINIT:
6815*53ee8cc1Swenshuai.xi         {
6816*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.cfg_type = enType;
6817*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.pCfg = plist;
6818*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.u32Size = sizeof(EN_GOP_IGNOREINIT);
6819*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_ConfigInfo;
6820*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_SET_CONFIG;
6821*53ee8cc1Swenshuai.xi             break;
6822*53ee8cc1Swenshuai.xi         }
6823*53ee8cc1Swenshuai.xi         case E_GOP_CONSALPHA_BITS:
6824*53ee8cc1Swenshuai.xi         {
6825*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.cfg_type = enType;
6826*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.pCfg = plist;
6827*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.u32Size = sizeof(EN_GOP_CONSALPHA_BITS);
6828*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_ConfigInfo;
6829*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_SET_CONFIG;
6830*53ee8cc1Swenshuai.xi             break;
6831*53ee8cc1Swenshuai.xi         }
6832*53ee8cc1Swenshuai.xi         case E_GOP_TIMING_INFO:
6833*53ee8cc1Swenshuai.xi         {
6834*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_OUTPUT_TIMING;
6835*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6836*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6837*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(ST_GOP_TIMING_INFO);
6838*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6839*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_SET_PROPERTY;
6840*53ee8cc1Swenshuai.xi             break;
6841*53ee8cc1Swenshuai.xi         }
6842*53ee8cc1Swenshuai.xi         case E_GOP_IS_PIXELBASE_ENABLE:
6843*53ee8cc1Swenshuai.xi         {
6844*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_PIXELBASE_ENABLE;
6845*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6846*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6847*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(MS_BOOL);
6848*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6849*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_SET_PROPERTY;
6850*53ee8cc1Swenshuai.xi             break;
6851*53ee8cc1Swenshuai.xi         }
6852*53ee8cc1Swenshuai.xi         case E_GOP_AFBC_RESET:
6853*53ee8cc1Swenshuai.xi         {
6854*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_AFBC_CORE_RESET;
6855*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6856*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6857*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(MS_BOOL);
6858*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6859*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_SET_PROPERTY;
6860*53ee8cc1Swenshuai.xi             break;
6861*53ee8cc1Swenshuai.xi         }
6862*53ee8cc1Swenshuai.xi         case E_GOP_AFBC_ENABLE:
6863*53ee8cc1Swenshuai.xi         {
6864*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_AFBC_CORE_ENABLE;
6865*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6866*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6867*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(MS_BOOL);
6868*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6869*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_SET_PROPERTY;
6870*53ee8cc1Swenshuai.xi             break;
6871*53ee8cc1Swenshuai.xi         }
6872*53ee8cc1Swenshuai.xi         default:
6873*53ee8cc1Swenshuai.xi             return GOP_API_INVALID_PARAMETERS;
6874*53ee8cc1Swenshuai.xi             break;
6875*53ee8cc1Swenshuai.xi     }
6876*53ee8cc1Swenshuai.xi 
6877*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP, enApiCmdType, pInfo) != UTOPIA_STATUS_SUCCESS)
6878*53ee8cc1Swenshuai.xi     {
6879*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6880*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
6881*53ee8cc1Swenshuai.xi     }
6882*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
6883*53ee8cc1Swenshuai.xi }
6884*53ee8cc1Swenshuai.xi 
6885*53ee8cc1Swenshuai.xi /********************************************************************************/
6886*53ee8cc1Swenshuai.xi /// Get config by GOP.
6887*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN:  GOP number
6888*53ee8cc1Swenshuai.xi /// @param pstInfo \b IN misc info
6889*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6890*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
6891*53ee8cc1Swenshuai.xi /********************************************************************************/
MApi_GOP_GetConfigEx(MS_U8 u8Gop,EN_GOP_CONFIG_TYPE enType,void * plist)6892*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetConfigEx(MS_U8 u8Gop, EN_GOP_CONFIG_TYPE enType, void *plist)
6893*53ee8cc1Swenshuai.xi {
6894*53ee8cc1Swenshuai.xi     E_GOP_API_CMD_TYPE enApiCmdType;
6895*53ee8cc1Swenshuai.xi     GOP_SETCONFIG_PARAM ioctl_ConfigInfo;
6896*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_PropInfo;
6897*53ee8cc1Swenshuai.xi     void *pInfo = NULL;
6898*53ee8cc1Swenshuai.xi 
6899*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
6900*53ee8cc1Swenshuai.xi 
6901*53ee8cc1Swenshuai.xi     switch(enType)
6902*53ee8cc1Swenshuai.xi     {
6903*53ee8cc1Swenshuai.xi         case E_GOP_IGNOREINIT:
6904*53ee8cc1Swenshuai.xi         {
6905*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.cfg_type = enType;
6906*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.pCfg = plist;
6907*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.u32Size = sizeof(EN_GOP_IGNOREINIT);
6908*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_ConfigInfo;
6909*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_GET_CONFIG;
6910*53ee8cc1Swenshuai.xi             break;
6911*53ee8cc1Swenshuai.xi         }
6912*53ee8cc1Swenshuai.xi         case E_GOP_CONSALPHA_BITS:
6913*53ee8cc1Swenshuai.xi         {
6914*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.cfg_type = enType;
6915*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.pCfg = plist;
6916*53ee8cc1Swenshuai.xi             ioctl_ConfigInfo.u32Size = sizeof(EN_GOP_CONSALPHA_BITS);
6917*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_ConfigInfo;
6918*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_GET_CONFIG;
6919*53ee8cc1Swenshuai.xi             break;
6920*53ee8cc1Swenshuai.xi         }
6921*53ee8cc1Swenshuai.xi         case E_GOP_TIMING_INFO:
6922*53ee8cc1Swenshuai.xi         {
6923*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_OUTPUT_TIMING;
6924*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6925*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6926*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(ST_GOP_TIMING_INFO);
6927*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6928*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_GET_PROPERTY;
6929*53ee8cc1Swenshuai.xi             break;
6930*53ee8cc1Swenshuai.xi         }
6931*53ee8cc1Swenshuai.xi         case E_GOP_IS_PIXELBASE_ENABLE:
6932*53ee8cc1Swenshuai.xi         {
6933*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_PIXELBASE_ENABLE;
6934*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6935*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6936*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(MS_BOOL);
6937*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6938*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_GET_PROPERTY;
6939*53ee8cc1Swenshuai.xi             break;
6940*53ee8cc1Swenshuai.xi         }
6941*53ee8cc1Swenshuai.xi         case E_GOP_GET_MAXFBNUM:
6942*53ee8cc1Swenshuai.xi         {
6943*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_MAXFBNUM;
6944*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6945*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6946*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(MS_U32);
6947*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6948*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_GET_PROPERTY;
6949*53ee8cc1Swenshuai.xi             break;
6950*53ee8cc1Swenshuai.xi         }
6951*53ee8cc1Swenshuai.xi         case E_GOP_IS_INIT:
6952*53ee8cc1Swenshuai.xi         {
6953*53ee8cc1Swenshuai.xi             ioctl_PropInfo.en_pro = E_GOP_NUM_IS_INIT;
6954*53ee8cc1Swenshuai.xi             ioctl_PropInfo.gop_idx = u8Gop;
6955*53ee8cc1Swenshuai.xi             ioctl_PropInfo.pSetting = plist;
6956*53ee8cc1Swenshuai.xi             ioctl_PropInfo.u32Size = sizeof(GOP_InitInfo);
6957*53ee8cc1Swenshuai.xi             pInfo = (void*)&ioctl_PropInfo;
6958*53ee8cc1Swenshuai.xi             enApiCmdType = MAPI_CMD_GOP_GET_PROPERTY;
6959*53ee8cc1Swenshuai.xi             break;
6960*53ee8cc1Swenshuai.xi         }
6961*53ee8cc1Swenshuai.xi         default:
6962*53ee8cc1Swenshuai.xi             return GOP_API_INVALID_PARAMETERS;
6963*53ee8cc1Swenshuai.xi             break;
6964*53ee8cc1Swenshuai.xi     }
6965*53ee8cc1Swenshuai.xi 
6966*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP, enApiCmdType, pInfo) != UTOPIA_STATUS_SUCCESS)
6967*53ee8cc1Swenshuai.xi     {
6968*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
6969*53ee8cc1Swenshuai.xi         return GOP_API_FAIL;
6970*53ee8cc1Swenshuai.xi     }
6971*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
6972*53ee8cc1Swenshuai.xi }
6973*53ee8cc1Swenshuai.xi 
6974*53ee8cc1Swenshuai.xi //******************************************************************************
6975*53ee8cc1Swenshuai.xi /// API for set GWIN resolution in one function
6976*53ee8cc1Swenshuai.xi /// @param u8GwinId \b IN: GWin ID
6977*53ee8cc1Swenshuai.xi /// @param u8FbId \b IN: Frame Buffer ID
6978*53ee8cc1Swenshuai.xi /// @param pGwinInfo \b IN: pointer to GOP_GwinInfo structure
6979*53ee8cc1Swenshuai.xi /// @param pStretchInfo \b IN: pointer to GOP_StretchInfo
6980*53ee8cc1Swenshuai.xi /// @param direction \b IN: to decide which direction to stretch
6981*53ee8cc1Swenshuai.xi /// @param u16DstWidth \b IN: set scaled width if H direction is specified
6982*53ee8cc1Swenshuai.xi /// @param u16DstHeight \b IN: set scaled height if V direction is specified
6983*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
6984*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_SetResolution(MS_U8 u8GwinId,MS_U8 u8FbId,GOP_GwinInfo * pGwinInfo,GOP_StretchInfo * pStretchInfo,EN_GOP_STRETCH_DIRECTION direction,MS_U16 u16DstWidth,MS_U16 u16DstHeight)6985*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetResolution(MS_U8 u8GwinId, MS_U8 u8FbId
6986*53ee8cc1Swenshuai.xi     , GOP_GwinInfo* pGwinInfo, GOP_StretchInfo* pStretchInfo, EN_GOP_STRETCH_DIRECTION direction
6987*53ee8cc1Swenshuai.xi     , MS_U16 u16DstWidth, MS_U16 u16DstHeight)
6988*53ee8cc1Swenshuai.xi {
6989*53ee8cc1Swenshuai.xi     return MApi_GOP_GWIN_SetResolution_32FB(u8GwinId, (MS_U32)u8FbId, pGwinInfo, pStretchInfo, direction, u16DstWidth, u16DstHeight);
6990*53ee8cc1Swenshuai.xi }
6991*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetResolution_32FB(MS_U8 u8GwinId,MS_U32 u32FbId,GOP_GwinInfo * pGwinInfo,GOP_StretchInfo * pStretchInfo,EN_GOP_STRETCH_DIRECTION direction,MS_U16 u16DstWidth,MS_U16 u16DstHeight)6992*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetResolution_32FB(MS_U8 u8GwinId, MS_U32 u32FbId
6993*53ee8cc1Swenshuai.xi     , GOP_GwinInfo* pGwinInfo, GOP_StretchInfo* pStretchInfo, EN_GOP_STRETCH_DIRECTION direction
6994*53ee8cc1Swenshuai.xi     , MS_U16 u16DstWidth, MS_U16 u16DstHeight)
6995*53ee8cc1Swenshuai.xi {
6996*53ee8cc1Swenshuai.xi 
6997*53ee8cc1Swenshuai.xi     GOP_GWIN_DISPLAY_PARAM ioctl_info;
6998*53ee8cc1Swenshuai.xi     GOP_GWINDISPLAY_INFO DispInfo;
6999*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7000*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_DISPLAY_PARAM));
7001*53ee8cc1Swenshuai.xi     memset(&DispInfo, 0x0, sizeof(GOP_GWINDISPLAY_INFO));
7002*53ee8cc1Swenshuai.xi 
7003*53ee8cc1Swenshuai.xi     DispInfo.dir = direction;
7004*53ee8cc1Swenshuai.xi     DispInfo.gwin = u8GwinId;
7005*53ee8cc1Swenshuai.xi     DispInfo.fbid = u32FbId;
7006*53ee8cc1Swenshuai.xi     DispInfo.dst_size.w = u16DstWidth;
7007*53ee8cc1Swenshuai.xi     DispInfo.dst_size.h = u16DstHeight;
7008*53ee8cc1Swenshuai.xi 
7009*53ee8cc1Swenshuai.xi     memcpy(&DispInfo.gwin_info, pGwinInfo, sizeof(GOP_GwinInfo));
7010*53ee8cc1Swenshuai.xi     memcpy(&DispInfo.stretch_info, pStretchInfo, sizeof(GOP_StretchInfo));
7011*53ee8cc1Swenshuai.xi 
7012*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8GwinId;
7013*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_GWINDISPLAY_INFO);
7014*53ee8cc1Swenshuai.xi     ioctl_info.pDisplayInfo = (MS_U32*)&DispInfo;
7015*53ee8cc1Swenshuai.xi 
7016*53ee8cc1Swenshuai.xi 
7017*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SETDISPLAY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7018*53ee8cc1Swenshuai.xi     {
7019*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7020*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7021*53ee8cc1Swenshuai.xi     }
7022*53ee8cc1Swenshuai.xi 
7023*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7024*53ee8cc1Swenshuai.xi }
7025*53ee8cc1Swenshuai.xi 
7026*53ee8cc1Swenshuai.xi //******************************************************************************
7027*53ee8cc1Swenshuai.xi /// API for change L/R frame for GOP 3D function
7028*53ee8cc1Swenshuai.xi /// @param u8GOP \b IN: GOP ID
7029*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7030*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_Set3D_LR_FrameExchange(MS_U8 u8GOP)7031*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_Set3D_LR_FrameExchange(MS_U8 u8GOP)
7032*53ee8cc1Swenshuai.xi {
7033*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
7034*53ee8cc1Swenshuai.xi     MS_U32 value = 0;
7035*53ee8cc1Swenshuai.xi 
7036*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7037*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
7038*53ee8cc1Swenshuai.xi 
7039*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_3D_LR_EXCHANGE;
7040*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GOP;
7041*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (MS_U32*)&value;
7042*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U32);
7043*53ee8cc1Swenshuai.xi 
7044*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7045*53ee8cc1Swenshuai.xi     {
7046*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7047*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7048*53ee8cc1Swenshuai.xi     }
7049*53ee8cc1Swenshuai.xi 
7050*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7051*53ee8cc1Swenshuai.xi }
7052*53ee8cc1Swenshuai.xi 
7053*53ee8cc1Swenshuai.xi //******************************************************************************
7054*53ee8cc1Swenshuai.xi /// API for set GWIN 3D Mode
7055*53ee8cc1Swenshuai.xi /// @param u8GwinId \b IN: GWin ID
7056*53ee8cc1Swenshuai.xi /// @param u16MainFBId \b IN: Main-Frame Buffer ID
7057*53ee8cc1Swenshuai.xi /// @param u16SubFBId \b IN: Sub-Frame Buffer ID
7058*53ee8cc1Swenshuai.xi /// @param EN_3DOSD_Mode \b IN: 3D Osd mode select.
7059*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7060*53ee8cc1Swenshuai.xi //******************************************************************************
7061*53ee8cc1Swenshuai.xi 
MApi_GOP_Set3DOSDMode(MS_U8 u8Gwin,MS_U16 u16MainFBId,MS_U16 u16SubFBId,EN_GOP_3D_MODETYPE en3DMode)7062*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_Set3DOSDMode(MS_U8 u8Gwin, MS_U16 u16MainFBId, MS_U16 u16SubFBId,EN_GOP_3D_MODETYPE en3DMode)
7063*53ee8cc1Swenshuai.xi {
7064*53ee8cc1Swenshuai.xi     GOP_GWIN_PROPERTY_PARAM ioctl_info;
7065*53ee8cc1Swenshuai.xi     GOP_GWIN_3D_MODE st3DMode;
7066*53ee8cc1Swenshuai.xi 
7067*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7068*53ee8cc1Swenshuai.xi 
7069*53ee8cc1Swenshuai.xi     st3DMode.u32MainFBId = u16MainFBId;
7070*53ee8cc1Swenshuai.xi     st3DMode.u32SubFBId = u16SubFBId;
7071*53ee8cc1Swenshuai.xi     st3DMode.en3DMode = en3DMode;
7072*53ee8cc1Swenshuai.xi 
7073*53ee8cc1Swenshuai.xi     ioctl_info.en_property = E_GOP_GWIN_3D_MODE;
7074*53ee8cc1Swenshuai.xi     ioctl_info.GwinId = u8Gwin;
7075*53ee8cc1Swenshuai.xi     ioctl_info.pSet = (MS_U32*)&st3DMode;
7076*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_GWIN_3D_MODE);
7077*53ee8cc1Swenshuai.xi 
7078*53ee8cc1Swenshuai.xi     if (UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GWIN_SET_PROPERTY,(void*)&ioctl_info) != UTOPIA_STATUS_SUCCESS)
7079*53ee8cc1Swenshuai.xi     {
7080*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7081*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
7082*53ee8cc1Swenshuai.xi     }
7083*53ee8cc1Swenshuai.xi 
7084*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7085*53ee8cc1Swenshuai.xi }
7086*53ee8cc1Swenshuai.xi 
7087*53ee8cc1Swenshuai.xi //******************************************************************************
7088*53ee8cc1Swenshuai.xi /// API for notify kernel about 3D gpio pin
7089*53ee8cc1Swenshuai.xi /// @param u32GPIO3DPin \b IN: GPIO 3D pin
7090*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7091*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_Set_GPIO3DPin(MS_U32 u32GPIO3DPin)7092*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_Set_GPIO3DPin(MS_U32 u32GPIO3DPin)
7093*53ee8cc1Swenshuai.xi {
7094*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT in utopia2\n",__FUNCTION__);
7095*53ee8cc1Swenshuai.xi 
7096*53ee8cc1Swenshuai.xi     return GOP_API_FAIL;
7097*53ee8cc1Swenshuai.xi }
7098*53ee8cc1Swenshuai.xi 
7099*53ee8cc1Swenshuai.xi //******************************************************************************
7100*53ee8cc1Swenshuai.xi /// API for Clear GOP GWIN FlipQueue
7101*53ee8cc1Swenshuai.xi /// @param u8GwinId \b IN: GWin ID
7102*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7103*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_ClearFlipQueue(MS_U8 gWinId)7104*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_ClearFlipQueue(MS_U8 gWinId)
7105*53ee8cc1Swenshuai.xi {
7106*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7107*53ee8cc1Swenshuai.xi 
7108*53ee8cc1Swenshuai.xi     GOP_GWIN_CLEARQUEUE_PARAM ioctl_info;
7109*53ee8cc1Swenshuai.xi     GOP_GWIN_CLEARQUEUE_INFO flipQinfo;
7110*53ee8cc1Swenshuai.xi 
7111*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_GWIN_CLEARQUEUE_PARAM));
7112*53ee8cc1Swenshuai.xi     memset(&flipQinfo, 0x0, sizeof(GOP_GWIN_CLEARQUEUE_INFO));
7113*53ee8cc1Swenshuai.xi 
7114*53ee8cc1Swenshuai.xi     flipQinfo.GwinId = gWinId;
7115*53ee8cc1Swenshuai.xi 
7116*53ee8cc1Swenshuai.xi     ioctl_info.pClearInfo = (MS_U32*)&flipQinfo;
7117*53ee8cc1Swenshuai.xi     ioctl_info.u32Size = sizeof(GOP_GWIN_CLEARQUEUE_INFO);
7118*53ee8cc1Swenshuai.xi 
7119*53ee8cc1Swenshuai.xi 
7120*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GFLIP_CLEARQUEUE,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7121*53ee8cc1Swenshuai.xi     {
7122*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7123*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7124*53ee8cc1Swenshuai.xi     }
7125*53ee8cc1Swenshuai.xi 
7126*53ee8cc1Swenshuai.xi     GOP_RETURN( GOP_API_SUCCESS);
7127*53ee8cc1Swenshuai.xi 
7128*53ee8cc1Swenshuai.xi }
7129*53ee8cc1Swenshuai.xi 
7130*53ee8cc1Swenshuai.xi 
7131*53ee8cc1Swenshuai.xi //******************************************************************************
7132*53ee8cc1Swenshuai.xi /// API for Query GOP Capability
7133*53ee8cc1Swenshuai.xi /// @param eCapType \b IN: Capability type
7134*53ee8cc1Swenshuai.xi /// @param pRet     \b OUT: return value
7135*53ee8cc1Swenshuai.xi /// @param ret_size \b IN: input structure size
7136*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7137*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GetChipCaps(EN_GOP_CAPS eCapType,void * pRet,MS_U32 ret_size)7138*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GetChipCaps(EN_GOP_CAPS eCapType, void* pRet, MS_U32 ret_size)
7139*53ee8cc1Swenshuai.xi {
7140*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
7141*53ee8cc1Swenshuai.xi     if(eCapType == E_GOP_CAP_VERSION)
7142*53ee8cc1Swenshuai.xi     {
7143*53ee8cc1Swenshuai.xi         char ver[] = MSIF_GOP_LIBVER;
7144*53ee8cc1Swenshuai.xi         char blnum[] = MSIF_GOP_BUILDNUM;
7145*53ee8cc1Swenshuai.xi         char cl[] = MSIF_GOP_CHANGELIST;
7146*53ee8cc1Swenshuai.xi         GOP_LIB_VER * pLibVer;
7147*53ee8cc1Swenshuai.xi 
7148*53ee8cc1Swenshuai.xi         if(ret_size != sizeof(GOP_LIB_VER))
7149*53ee8cc1Swenshuai.xi         {
7150*53ee8cc1Swenshuai.xi             GOP_ERR("[%s] [%d]ERROR, invalid input structure size :0x%tx on E_GOP_CAP_VERSION\n",__FUNCTION__,__LINE__,(ptrdiff_t)ret_size);
7151*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
7152*53ee8cc1Swenshuai.xi         }
7153*53ee8cc1Swenshuai.xi 
7154*53ee8cc1Swenshuai.xi         pLibVer = (GOP_LIB_VER *)pRet;
7155*53ee8cc1Swenshuai.xi 
7156*53ee8cc1Swenshuai.xi         pLibVer->GOP_LibVer = atoi(ver);
7157*53ee8cc1Swenshuai.xi         pLibVer->GOP_BuildNum = atoi(blnum);
7158*53ee8cc1Swenshuai.xi         pLibVer->GOP_ChangeList = atoi(cl);
7159*53ee8cc1Swenshuai.xi 
7160*53ee8cc1Swenshuai.xi     }
7161*53ee8cc1Swenshuai.xi     else if (eCapType == E_GOP_CAP_WORD_UNIT)
7162*53ee8cc1Swenshuai.xi     {
7163*53ee8cc1Swenshuai.xi         GOP_GETCAPS_PARAM gopcaps;
7164*53ee8cc1Swenshuai.xi         MS_U16 u16Align = 0x0;
7165*53ee8cc1Swenshuai.xi 
7166*53ee8cc1Swenshuai.xi         memset(&gopcaps, 0x0, sizeof(GOP_GETCAPS_PARAM));
7167*53ee8cc1Swenshuai.xi 
7168*53ee8cc1Swenshuai.xi         gopcaps.caps = eCapType;
7169*53ee8cc1Swenshuai.xi         gopcaps.pInfo = &u16Align;
7170*53ee8cc1Swenshuai.xi         gopcaps.u32Size = sizeof(u16Align);
7171*53ee8cc1Swenshuai.xi 
7172*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_CHIPCAPS,&gopcaps)!= UTOPIA_STATUS_SUCCESS)
7173*53ee8cc1Swenshuai.xi         {
7174*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7175*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
7176*53ee8cc1Swenshuai.xi         }
7177*53ee8cc1Swenshuai.xi 
7178*53ee8cc1Swenshuai.xi         if (ret_size == sizeof(MS_U8))
7179*53ee8cc1Swenshuai.xi         {
7180*53ee8cc1Swenshuai.xi             *((MS_U8 *)pRet) = (MS_U8)u16Align;
7181*53ee8cc1Swenshuai.xi         }
7182*53ee8cc1Swenshuai.xi         if (ret_size == sizeof(MS_U16))
7183*53ee8cc1Swenshuai.xi         {
7184*53ee8cc1Swenshuai.xi             *((MS_U16 *)pRet) = u16Align;
7185*53ee8cc1Swenshuai.xi         }
7186*53ee8cc1Swenshuai.xi         else if (ret_size == sizeof(MS_U32))
7187*53ee8cc1Swenshuai.xi         {
7188*53ee8cc1Swenshuai.xi             *((MS_U32 *)pRet) = (MS_U32)u16Align;
7189*53ee8cc1Swenshuai.xi         }
7190*53ee8cc1Swenshuai.xi     }
7191*53ee8cc1Swenshuai.xi     else if (eCapType == E_GOP_CAP_GOP_MUX)
7192*53ee8cc1Swenshuai.xi     {
7193*53ee8cc1Swenshuai.xi         GOP_GETCAPS_PARAM gopcaps;
7194*53ee8cc1Swenshuai.xi         PST_GOP_MUX_CAP pstDrvMuxCap = (PST_GOP_MUX_CAP)pRet;
7195*53ee8cc1Swenshuai.xi         ST_DRV_GOP_MUX_CAP_EX stDrvMuxCapEx;
7196*53ee8cc1Swenshuai.xi         MS_U8 u8num = 0;
7197*53ee8cc1Swenshuai.xi         memset(&gopcaps, 0x0, sizeof(GOP_GETCAPS_PARAM));
7198*53ee8cc1Swenshuai.xi         memset(&stDrvMuxCapEx, 0x0, sizeof(ST_DRV_GOP_MUX_CAP_EX));
7199*53ee8cc1Swenshuai.xi 
7200*53ee8cc1Swenshuai.xi         stDrvMuxCapEx.u8MuxNumber=pstDrvMuxCap->u8MuxNumber;
7201*53ee8cc1Swenshuai.xi         for(u8num=0;u8num<pstDrvMuxCap->u8MuxNumber;u8num++)
7202*53ee8cc1Swenshuai.xi         {
7203*53ee8cc1Swenshuai.xi             stDrvMuxCapEx.pu8MuxProrityArray[u8num]=pstDrvMuxCap->pu8MuxProrityArray[u8num];
7204*53ee8cc1Swenshuai.xi         }
7205*53ee8cc1Swenshuai.xi         stDrvMuxCapEx.bNewMux = pstDrvMuxCap->bNewMux;
7206*53ee8cc1Swenshuai.xi         stDrvMuxCapEx.bNeedSetMUX1ToIP0 = pstDrvMuxCap->bNeedSetMUX1ToIP0;
7207*53ee8cc1Swenshuai.xi         stDrvMuxCapEx.bNeedSetMUX3ToIP0 = pstDrvMuxCap->bNeedSetMUX3ToIP0;
7208*53ee8cc1Swenshuai.xi 
7209*53ee8cc1Swenshuai.xi         gopcaps.caps = eCapType;
7210*53ee8cc1Swenshuai.xi         gopcaps.pInfo = (MS_U32*)&stDrvMuxCapEx;
7211*53ee8cc1Swenshuai.xi         gopcaps.u32Size = sizeof(ST_DRV_GOP_MUX_CAP_EX);;
7212*53ee8cc1Swenshuai.xi 
7213*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_CHIPCAPS,&gopcaps)!= UTOPIA_STATUS_SUCCESS)
7214*53ee8cc1Swenshuai.xi         {
7215*53ee8cc1Swenshuai.xi             printf("Ioctl %s fail\n",__FUNCTION__);
7216*53ee8cc1Swenshuai.xi             GOP_RETURN(GOP_API_FAIL);
7217*53ee8cc1Swenshuai.xi         }
7218*53ee8cc1Swenshuai.xi         pstDrvMuxCap->u8MuxNumber=stDrvMuxCapEx.u8MuxNumber;
7219*53ee8cc1Swenshuai.xi         for(u8num=0;u8num<stDrvMuxCapEx.u8MuxNumber;u8num++)
7220*53ee8cc1Swenshuai.xi         {
7221*53ee8cc1Swenshuai.xi             pstDrvMuxCap->pu8MuxProrityArray[u8num]=stDrvMuxCapEx.pu8MuxProrityArray[u8num];
7222*53ee8cc1Swenshuai.xi         }
7223*53ee8cc1Swenshuai.xi         pstDrvMuxCap->bNewMux = stDrvMuxCapEx.bNewMux;
7224*53ee8cc1Swenshuai.xi         pstDrvMuxCap->bNeedSetMUX1ToIP0 = stDrvMuxCapEx.bNeedSetMUX1ToIP0;
7225*53ee8cc1Swenshuai.xi         pstDrvMuxCap->bNeedSetMUX3ToIP0 = stDrvMuxCapEx.bNeedSetMUX3ToIP0;
7226*53ee8cc1Swenshuai.xi     }
7227*53ee8cc1Swenshuai.xi     else
7228*53ee8cc1Swenshuai.xi     {
7229*53ee8cc1Swenshuai.xi         GOP_GETCAPS_PARAM gopcaps;
7230*53ee8cc1Swenshuai.xi 
7231*53ee8cc1Swenshuai.xi         memset(&gopcaps, 0x0, sizeof(GOP_GETCAPS_PARAM));
7232*53ee8cc1Swenshuai.xi 
7233*53ee8cc1Swenshuai.xi         gopcaps.caps = eCapType;
7234*53ee8cc1Swenshuai.xi         gopcaps.pInfo = pRet;
7235*53ee8cc1Swenshuai.xi         gopcaps.u32Size = ret_size;
7236*53ee8cc1Swenshuai.xi 
7237*53ee8cc1Swenshuai.xi         if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_CHIPCAPS,&gopcaps)!= UTOPIA_STATUS_SUCCESS)
7238*53ee8cc1Swenshuai.xi         {
7239*53ee8cc1Swenshuai.xi             GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7240*53ee8cc1Swenshuai.xi             return GOP_API_FAIL;
7241*53ee8cc1Swenshuai.xi         }
7242*53ee8cc1Swenshuai.xi     }
7243*53ee8cc1Swenshuai.xi     return GOP_API_SUCCESS;
7244*53ee8cc1Swenshuai.xi }
7245*53ee8cc1Swenshuai.xi 
7246*53ee8cc1Swenshuai.xi //******************************************************************************
7247*53ee8cc1Swenshuai.xi /// API for Set Scroll rate for Gwin
7248*53ee8cc1Swenshuai.xi /// @param winId \b IN: GWIN id
7249*53ee8cc1Swenshuai.xi /// @param bEnable \b IN:
7250*53ee8cc1Swenshuai.xi ///   - # TRUE Enable Tile Mode for GWIN
7251*53ee8cc1Swenshuai.xi ///   - # FALSE Disable Tile Mode for GWIN
7252*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7253*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
7254*53ee8cc1Swenshuai.xi 
7255*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_GWIN_SetScrollRate(MS_U8 u8rate)7256*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetScrollRate(MS_U8 u8rate)
7257*53ee8cc1Swenshuai.xi {
7258*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7259*53ee8cc1Swenshuai.xi     GOP_SCROLL_PARAM ioctl_info;
7260*53ee8cc1Swenshuai.xi     MS_U8 u8ScrollRate;
7261*53ee8cc1Swenshuai.xi 
7262*53ee8cc1Swenshuai.xi     u8ScrollRate = u8rate;
7263*53ee8cc1Swenshuai.xi     ioctl_info.scroll_type = E_GOP_SCROLL_RATE;
7264*53ee8cc1Swenshuai.xi     ioctl_info.pCfg = (void*)&u8ScrollRate;
7265*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_U8);
7266*53ee8cc1Swenshuai.xi 
7267*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_SCROLL,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7268*53ee8cc1Swenshuai.xi     {
7269*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7270*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7271*53ee8cc1Swenshuai.xi     }
7272*53ee8cc1Swenshuai.xi 
7273*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7274*53ee8cc1Swenshuai.xi 
7275*53ee8cc1Swenshuai.xi }
7276*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetScrollType(MS_U8 u8WinId,GOP_SCROLL_TYPE type,MS_U16 u16Offset,MS_BOOL bEnable)7277*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetScrollType(MS_U8 u8WinId, GOP_SCROLL_TYPE type,  MS_U16 u16Offset, MS_BOOL bEnable )
7278*53ee8cc1Swenshuai.xi {
7279*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7280*53ee8cc1Swenshuai.xi     GOP_SCROLL_PARAM ioctl_info;
7281*53ee8cc1Swenshuai.xi     GOP_SCROLL_INFO scroll_info;
7282*53ee8cc1Swenshuai.xi 
7283*53ee8cc1Swenshuai.xi     scroll_info.u8WinId = u8WinId;
7284*53ee8cc1Swenshuai.xi     scroll_info.type = type;
7285*53ee8cc1Swenshuai.xi     scroll_info.u16Offset = u16Offset;
7286*53ee8cc1Swenshuai.xi     scroll_info.bEnable = bEnable;
7287*53ee8cc1Swenshuai.xi 
7288*53ee8cc1Swenshuai.xi     ioctl_info.scroll_type = E_GOP_SCROLL_CONFIG;
7289*53ee8cc1Swenshuai.xi     ioctl_info.pCfg = (MS_U32*)&scroll_info;
7290*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_SCROLL_INFO);
7291*53ee8cc1Swenshuai.xi 
7292*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_SET_SCROLL,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7293*53ee8cc1Swenshuai.xi     {
7294*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7295*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7296*53ee8cc1Swenshuai.xi     }
7297*53ee8cc1Swenshuai.xi 
7298*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7299*53ee8cc1Swenshuai.xi }
7300*53ee8cc1Swenshuai.xi 
7301*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_SetSWScrollBuffer(MS_U16 bufNum,MS_U32 * pBuffer)7302*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_SetSWScrollBuffer(MS_U16 bufNum, MS_U32* pBuffer)
7303*53ee8cc1Swenshuai.xi {
7304*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7305*53ee8cc1Swenshuai.xi     GOP_ERR("[%s] Not SUPPORT in utopia2\n",__FUNCTION__);
7306*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7307*53ee8cc1Swenshuai.xi 
7308*53ee8cc1Swenshuai.xi 
7309*53ee8cc1Swenshuai.xi }
7310*53ee8cc1Swenshuai.xi 
7311*53ee8cc1Swenshuai.xi /******************************************************************************/
7312*53ee8cc1Swenshuai.xi /// Map FBinfo to OCinfo
7313*53ee8cc1Swenshuai.xi /// @param u32Addr\b IN Bank Start Addr
7314*53ee8cc1Swenshuai.xi /// @param BankMode\b IN Bank Mode
7315*53ee8cc1Swenshuai.xi /// @param enBufSize\b IN Bank Sizee
7316*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_OC_SetOCFBinfo(MS_PHY phyAddr,EN_GOP_OC_SEL_TYPE BankMode,MS_U32 enBufSize)7317*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_OC_SetOCFBinfo(MS_PHY phyAddr, EN_GOP_OC_SEL_TYPE BankMode, MS_U32 enBufSize)
7318*53ee8cc1Swenshuai.xi {
7319*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
7320*53ee8cc1Swenshuai.xi     GOP_OC_FB_INFO stOCFbInfo;
7321*53ee8cc1Swenshuai.xi 
7322*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7323*53ee8cc1Swenshuai.xi 
7324*53ee8cc1Swenshuai.xi     stOCFbInfo.u64Addr = phyAddr;
7325*53ee8cc1Swenshuai.xi     stOCFbInfo.BankMode = BankMode;
7326*53ee8cc1Swenshuai.xi     stOCFbInfo.enBufSize = enBufSize;
7327*53ee8cc1Swenshuai.xi 
7328*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_OC_FB_INFO;
7329*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&stOCFbInfo;
7330*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_OC_FB_INFO);
7331*53ee8cc1Swenshuai.xi 
7332*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7333*53ee8cc1Swenshuai.xi     {
7334*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7335*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7336*53ee8cc1Swenshuai.xi     }
7337*53ee8cc1Swenshuai.xi 
7338*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7339*53ee8cc1Swenshuai.xi }
7340*53ee8cc1Swenshuai.xi 
7341*53ee8cc1Swenshuai.xi 
7342*53ee8cc1Swenshuai.xi //******************************************************************************
7343*53ee8cc1Swenshuai.xi /// API for Test Pattern Type Select
7344*53ee8cc1Swenshuai.xi /// @param eTstPatternType \b IN: Test Pattern Type
7345*53ee8cc1Swenshuai.xi /// @param MS_U32 u32ARGB  \b IN: ARGB Color
7346*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7347*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
7348*53ee8cc1Swenshuai.xi //******************************************************************************
MApi_GOP_TestPatternAlpha_Enable(MS_BOOL bTSTAlpha)7349*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_TestPatternAlpha_Enable(MS_BOOL bTSTAlpha)
7350*53ee8cc1Swenshuai.xi {
7351*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
7352*53ee8cc1Swenshuai.xi     MS_BOOL  bEna;
7353*53ee8cc1Swenshuai.xi 
7354*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7355*53ee8cc1Swenshuai.xi 
7356*53ee8cc1Swenshuai.xi     bEna = bTSTAlpha;
7357*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_TESTPATTERN_ALPHA;
7358*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (void*)&bEna;
7359*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
7360*53ee8cc1Swenshuai.xi 
7361*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7362*53ee8cc1Swenshuai.xi     {
7363*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7364*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7365*53ee8cc1Swenshuai.xi     }
7366*53ee8cc1Swenshuai.xi 
7367*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7368*53ee8cc1Swenshuai.xi 
7369*53ee8cc1Swenshuai.xi }
7370*53ee8cc1Swenshuai.xi 
MApi_GOP_IsRegUpdated(MS_U8 u8GopType)7371*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_IsRegUpdated(MS_U8 u8GopType)
7372*53ee8cc1Swenshuai.xi {
7373*53ee8cc1Swenshuai.xi     MS_BOOL bUpdate = FALSE;
7374*53ee8cc1Swenshuai.xi     GOP_SET_PROPERTY_PARAM ioctl_info;
7375*53ee8cc1Swenshuai.xi 
7376*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7377*53ee8cc1Swenshuai.xi     memset(&ioctl_info, 0x0, sizeof(GOP_SET_PROPERTY_PARAM));
7378*53ee8cc1Swenshuai.xi 
7379*53ee8cc1Swenshuai.xi     ioctl_info.en_pro   = E_GOP_REG_UPDATED;
7380*53ee8cc1Swenshuai.xi     ioctl_info.gop_idx  = u8GopType;
7381*53ee8cc1Swenshuai.xi     ioctl_info.pSetting = (void*)&bUpdate;
7382*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(MS_BOOL);
7383*53ee8cc1Swenshuai.xi 
7384*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_GET_PROPERTY,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7385*53ee8cc1Swenshuai.xi     {
7386*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7387*53ee8cc1Swenshuai.xi         GOP_RETURN((E_GOP_API_Result)bUpdate);
7388*53ee8cc1Swenshuai.xi     }
7389*53ee8cc1Swenshuai.xi     GOP_RETURN((E_GOP_API_Result)bUpdate);
7390*53ee8cc1Swenshuai.xi 
7391*53ee8cc1Swenshuai.xi }
7392*53ee8cc1Swenshuai.xi 
MApi_GOP_TestPattern(EN_GOP_TST_PATTERN eTstPatternType,MS_U32 u32ARGB)7393*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_TestPattern(EN_GOP_TST_PATTERN eTstPatternType, MS_U32 u32ARGB)
7394*53ee8cc1Swenshuai.xi {
7395*53ee8cc1Swenshuai.xi     GOP_TEST_PATTERN_PARAM TestPatternPar;
7396*53ee8cc1Swenshuai.xi 
7397*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7398*53ee8cc1Swenshuai.xi 
7399*53ee8cc1Swenshuai.xi     memset(&TestPatternPar,0x0,sizeof(GOP_TEST_PATTERN_PARAM));
7400*53ee8cc1Swenshuai.xi 
7401*53ee8cc1Swenshuai.xi     TestPatternPar.gop_idx = 0x0;
7402*53ee8cc1Swenshuai.xi     TestPatternPar.TestPatternType = eTstPatternType;
7403*53ee8cc1Swenshuai.xi     TestPatternPar.u32ARGB = u32ARGB;
7404*53ee8cc1Swenshuai.xi     TestPatternPar.u32Size = sizeof(GOP_TEST_PATTERN_PARAM);
7405*53ee8cc1Swenshuai.xi 
7406*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_TESTPATTERN,&TestPatternPar)!= UTOPIA_STATUS_SUCCESS)
7407*53ee8cc1Swenshuai.xi     {
7408*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7409*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
7410*53ee8cc1Swenshuai.xi     }
7411*53ee8cc1Swenshuai.xi 
7412*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7413*53ee8cc1Swenshuai.xi 
7414*53ee8cc1Swenshuai.xi }
7415*53ee8cc1Swenshuai.xi 
7416*53ee8cc1Swenshuai.xi /******************************************************************************/
7417*53ee8cc1Swenshuai.xi /// set GOP power state
7418*53ee8cc1Swenshuai.xi /// @param enPowerState\b IN power status
7419*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_SetPowerState(EN_POWER_MODE enPowerState)7420*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_SetPowerState(EN_POWER_MODE enPowerState)
7421*53ee8cc1Swenshuai.xi {
7422*53ee8cc1Swenshuai.xi 
7423*53ee8cc1Swenshuai.xi     CheckGOPInstanceOpen();
7424*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7425*53ee8cc1Swenshuai.xi     _GOP_RegisterAllCBFunc();
7426*53ee8cc1Swenshuai.xi     GOP_POWERSTATE_PARAM PowerState;
7427*53ee8cc1Swenshuai.xi 
7428*53ee8cc1Swenshuai.xi     memset(&PowerState,0x0,sizeof(GOP_POWERSTATE_PARAM));
7429*53ee8cc1Swenshuai.xi     PowerState.pInfo = &enPowerState;
7430*53ee8cc1Swenshuai.xi     PowerState.u32Size = sizeof(GOP_POWERSTATE_PARAM);
7431*53ee8cc1Swenshuai.xi 
7432*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_POWERSTATE,&PowerState)!= UTOPIA_STATUS_SUCCESS)
7433*53ee8cc1Swenshuai.xi             {
7434*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7435*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
7436*53ee8cc1Swenshuai.xi     }
7437*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7438*53ee8cc1Swenshuai.xi }
7439*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_BeginDraw(void)7440*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_BeginDraw(void)
7441*53ee8cc1Swenshuai.xi {
7442*53ee8cc1Swenshuai.xi     GOP_MUTEX_PARAM stMutexPara;
7443*53ee8cc1Swenshuai.xi 
7444*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7445*53ee8cc1Swenshuai.xi 
7446*53ee8cc1Swenshuai.xi     memset(&stMutexPara,0x0,sizeof(GOP_MUTEX_PARAM));
7447*53ee8cc1Swenshuai.xi     stMutexPara.en_mutex = E_GOP_LOCK;
7448*53ee8cc1Swenshuai.xi     stMutexPara.u32Size = sizeof(GOP_MUTEX_PARAM);
7449*53ee8cc1Swenshuai.xi 
7450*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MUTEX,&stMutexPara)!= UTOPIA_STATUS_SUCCESS)
7451*53ee8cc1Swenshuai.xi     {
7452*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7453*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
7454*53ee8cc1Swenshuai.xi     }
7455*53ee8cc1Swenshuai.xi 
7456*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7457*53ee8cc1Swenshuai.xi 
7458*53ee8cc1Swenshuai.xi }
7459*53ee8cc1Swenshuai.xi 
MApi_GOP_GWIN_EndDraw(void)7460*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_EndDraw(void)
7461*53ee8cc1Swenshuai.xi {
7462*53ee8cc1Swenshuai.xi     GOP_MUTEX_PARAM stMutexPara;
7463*53ee8cc1Swenshuai.xi 
7464*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7465*53ee8cc1Swenshuai.xi 
7466*53ee8cc1Swenshuai.xi     memset(&stMutexPara,0x0,sizeof(GOP_MUTEX_PARAM));
7467*53ee8cc1Swenshuai.xi     stMutexPara.en_mutex = E_GOP_UNLOCK;
7468*53ee8cc1Swenshuai.xi     stMutexPara.u32Size = sizeof(GOP_MUTEX_PARAM);
7469*53ee8cc1Swenshuai.xi 
7470*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MUTEX,&stMutexPara)!= UTOPIA_STATUS_SUCCESS)
7471*53ee8cc1Swenshuai.xi     {
7472*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7473*53ee8cc1Swenshuai.xi         GOP_RETURN(GOP_API_FAIL);
7474*53ee8cc1Swenshuai.xi     }
7475*53ee8cc1Swenshuai.xi 
7476*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7477*53ee8cc1Swenshuai.xi }
7478*53ee8cc1Swenshuai.xi 
7479*53ee8cc1Swenshuai.xi /******************************************************************************/
7480*53ee8cc1Swenshuai.xi /// API for GOP delete upexpect H/V win size for output
7481*53ee8cc1Swenshuai.xi /// @param MS_U8 u8GOP\b IN: GOP ID
7482*53ee8cc1Swenshuai.xi /// @param MS_U32 u32ARGB  \b IN: ARGB Color
7483*53ee8cc1Swenshuai.xi /// @return GOP_API_SUCCESS - Success
7484*53ee8cc1Swenshuai.xi /// @return GOP_API_FAIL - Failure
7485*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_GOP_GWIN_DeleteWinHVSize(MS_U8 u8GOP,MS_U16 u16HSize,MS_U16 u16VSize)7486*53ee8cc1Swenshuai.xi E_GOP_API_Result MApi_GOP_GWIN_DeleteWinHVSize(MS_U8 u8GOP, MS_U16 u16HSize, MS_U16 u16VSize)
7487*53ee8cc1Swenshuai.xi {
7488*53ee8cc1Swenshuai.xi     GOP_MISC_PARAM ioctl_info;
7489*53ee8cc1Swenshuai.xi     GOP_DeleteWinSize_PARAM GOP_VaildSize;
7490*53ee8cc1Swenshuai.xi 
7491*53ee8cc1Swenshuai.xi     GOP_ENTRY();
7492*53ee8cc1Swenshuai.xi     memset(&ioctl_info,0x0,sizeof(GOP_MISC_PARAM));
7493*53ee8cc1Swenshuai.xi     memset(&GOP_VaildSize,0x0,sizeof(GOP_DeleteWinSize_PARAM));
7494*53ee8cc1Swenshuai.xi 
7495*53ee8cc1Swenshuai.xi     GOP_VaildSize.u32GOP_idx = u8GOP;
7496*53ee8cc1Swenshuai.xi     GOP_VaildSize.u32HSize = (MS_U32)u16HSize;
7497*53ee8cc1Swenshuai.xi     GOP_VaildSize.u32VSize = (MS_U32)u16VSize;
7498*53ee8cc1Swenshuai.xi 
7499*53ee8cc1Swenshuai.xi     ioctl_info.misc_type = E_GOP_MISC_DELETE_GWINSIZE;
7500*53ee8cc1Swenshuai.xi     ioctl_info.pMISC = (MS_U32*)&GOP_VaildSize;
7501*53ee8cc1Swenshuai.xi     ioctl_info.u32Size  = sizeof(GOP_DeleteWinSize_PARAM);
7502*53ee8cc1Swenshuai.xi 
7503*53ee8cc1Swenshuai.xi     if(UtopiaIoctl(pInstantGOP,MAPI_CMD_GOP_MISC,&ioctl_info)!= UTOPIA_STATUS_SUCCESS)
7504*53ee8cc1Swenshuai.xi     {
7505*53ee8cc1Swenshuai.xi         GOP_ERR("Ioctl %s fail\n",__FUNCTION__);
7506*53ee8cc1Swenshuai.xi         GOP_RETURN( GOP_API_FAIL);
7507*53ee8cc1Swenshuai.xi     }
7508*53ee8cc1Swenshuai.xi 
7509*53ee8cc1Swenshuai.xi     GOP_RETURN(GOP_API_SUCCESS);
7510*53ee8cc1Swenshuai.xi }
7511*53ee8cc1Swenshuai.xi 
7512*53ee8cc1Swenshuai.xi #undef MApi_GOP_C
7513