xref: /utopia/UTPA2-700.0.x/modules/vd/drv/vbi/mdrvVBI.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #include "MsTypes.h"
2*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
3*53ee8cc1Swenshuai.xi     #include <linux/slab.h>
4*53ee8cc1Swenshuai.xi     #include <linux/string.h>
5*53ee8cc1Swenshuai.xi #else
6*53ee8cc1Swenshuai.xi #include <stdio.h>
7*53ee8cc1Swenshuai.xi #include <string.h>
8*53ee8cc1Swenshuai.xi #endif
9*53ee8cc1Swenshuai.xi #include "drvVBI_v2.h"
10*53ee8cc1Swenshuai.xi #include "drvVBI_private.h"
11*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
12*53ee8cc1Swenshuai.xi #include "drvVBI.h"
13*53ee8cc1Swenshuai.xi #include "drvDMX_TTX.h"
14*53ee8cc1Swenshuai.xi #include "MsOS.h"
15*53ee8cc1Swenshuai.xi #include "utopia.h"
16*53ee8cc1Swenshuai.xi #include "ULog.h"
17*53ee8cc1Swenshuai.xi #define VBI_DEBUG 0
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi #if (VBI_DEBUG == 1)
20*53ee8cc1Swenshuai.xi   #define VBI_DEBUG_MSG(x)       x
21*53ee8cc1Swenshuai.xi #else
22*53ee8cc1Swenshuai.xi   #define VBI_DEBUG_MSG(x)
23*53ee8cc1Swenshuai.xi #endif
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi 
VBIRegisterToUtopia(FUtopiaOpen ModuleType)26*53ee8cc1Swenshuai.xi void VBIRegisterToUtopia(FUtopiaOpen ModuleType)
27*53ee8cc1Swenshuai.xi {
28*53ee8cc1Swenshuai.xi     void* pUtopiaModule = NULL;
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi     VBI_DEBUG_MSG(ULOGD("VBI", "\n[VBI INFO] vbi register start\n"));
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi     // 1. deal with module
33*53ee8cc1Swenshuai.xi     UtopiaModuleCreate(MODULE_VBI, 8, &pUtopiaModule);
34*53ee8cc1Swenshuai.xi     UtopiaModuleRegister(pUtopiaModule);
35*53ee8cc1Swenshuai.xi     UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)VBIOpen, (FUtopiaClose)VBIClose, (FUtopiaIOctl)VBIIoctl);
36*53ee8cc1Swenshuai.xi     #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
37*53ee8cc1Swenshuai.xi     UtopiaModuleRegisterMdbNode("vbi", (FUtopiaMdbIoctl)VBIMdbIoctl);
38*53ee8cc1Swenshuai.xi     #endif
39*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
40*53ee8cc1Swenshuai.xi     UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule,(FUtopiaSTR)VBIStr);
41*53ee8cc1Swenshuai.xi     UtopiaModuleSetSTRPrivate(pUtopiaModule, sizeof(VBI_INSTANT_PRIVATE));
42*53ee8cc1Swenshuai.xi #endif
43*53ee8cc1Swenshuai.xi 
44*53ee8cc1Swenshuai.xi     // 2. deal with resource (2 resources for DTV & ATV)
45*53ee8cc1Swenshuai.xi     void* psResource = NULL;
46*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceStart(pUtopiaModule, VBI_POOL_ID_VBI0);
47*53ee8cc1Swenshuai.xi     UtopiaResourceCreate("VBI0", sizeof(VBI_RESOURCE_PRIVATE), &psResource);
48*53ee8cc1Swenshuai.xi     UtopiaResourceRegister(pUtopiaModule, psResource, VBI_POOL_ID_VBI0);
49*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceEnd(pUtopiaModule, VBI_POOL_ID_VBI0);
50*53ee8cc1Swenshuai.xi 
51*53ee8cc1Swenshuai.xi     psResource = NULL;
52*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceStart(pUtopiaModule, VBI_POOL_ID_VBI1);
53*53ee8cc1Swenshuai.xi     UtopiaResourceCreate("VBI1", sizeof(VBI_RESOURCE_PRIVATE), &psResource);
54*53ee8cc1Swenshuai.xi     UtopiaResourceRegister(pUtopiaModule, psResource, VBI_POOL_ID_VBI1);
55*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceEnd(pUtopiaModule, VBI_POOL_ID_VBI1);
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi }
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
VBIMdbIoctl(MS_U32 cmd,const void * const pArgs)60*53ee8cc1Swenshuai.xi MS_U32 VBIMdbIoctl(MS_U32 cmd, const void* const pArgs)
61*53ee8cc1Swenshuai.xi {
62*53ee8cc1Swenshuai.xi     MDBCMD_CMDLINE_PARAMETER *paraCmdLine;
63*53ee8cc1Swenshuai.xi     MDBCMD_GETINFO_PARAMETER *paraGetInfo;
64*53ee8cc1Swenshuai.xi     VBI_DrvStatus _vbiStatus;
65*53ee8cc1Swenshuai.xi     switch(cmd)
66*53ee8cc1Swenshuai.xi     {
67*53ee8cc1Swenshuai.xi         case MDBCMD_CMDLINE:
68*53ee8cc1Swenshuai.xi             paraCmdLine = (MDBCMD_CMDLINE_PARAMETER *)pArgs;
69*53ee8cc1Swenshuai.xi             paraCmdLine->result = MDBRESULT_SUCCESS_FIN;
70*53ee8cc1Swenshuai.xi             break;
71*53ee8cc1Swenshuai.xi         case MDBCMD_GETINFO:
72*53ee8cc1Swenshuai.xi             paraGetInfo = (MDBCMD_GETINFO_PARAMETER *)pArgs;
73*53ee8cc1Swenshuai.xi             MdbPrint(paraGetInfo->u64ReqHdl,"---------MStar vbi state---------\n");
74*53ee8cc1Swenshuai.xi             if(FALSE == MDrv_VBI_GetStatus(&_vbiStatus))
75*53ee8cc1Swenshuai.xi             {
76*53ee8cc1Swenshuai.xi                 MdbPrint(paraGetInfo->u64ReqHdl,"Not Initialized\n", _vbiStatus.eInitType);
77*53ee8cc1Swenshuai.xi             }
78*53ee8cc1Swenshuai.xi             else
79*53ee8cc1Swenshuai.xi             {
80*53ee8cc1Swenshuai.xi                 switch(_vbiStatus.eInitType)
81*53ee8cc1Swenshuai.xi                 {
82*53ee8cc1Swenshuai.xi                     case E_VBI_TELETEXT:
83*53ee8cc1Swenshuai.xi                         MdbPrint(paraGetInfo->u64ReqHdl,"state : TTX\n");
84*53ee8cc1Swenshuai.xi                         MdbPrint(paraGetInfo->u64ReqHdl,"pktcnt : %d\n", MDrv_VBI_TTX_GetPacketCount());
85*53ee8cc1Swenshuai.xi                         break;
86*53ee8cc1Swenshuai.xi                     case E_VBI_CC:
87*53ee8cc1Swenshuai.xi                         MdbPrint(paraGetInfo->u64ReqHdl,"state : CC\n");
88*53ee8cc1Swenshuai.xi                         MdbPrint(paraGetInfo->u64ReqHdl,"pktcnt : %d\n", MDrv_VBI_CC_GetInfo(VBI_CC_PACKET_COUNT));
89*53ee8cc1Swenshuai.xi                         break;
90*53ee8cc1Swenshuai.xi                     case E_VBI_WSS:
91*53ee8cc1Swenshuai.xi                         MdbPrint(paraGetInfo->u64ReqHdl,"state : WSS\n");
92*53ee8cc1Swenshuai.xi                         break;
93*53ee8cc1Swenshuai.xi                     default:
94*53ee8cc1Swenshuai.xi                         break;
95*53ee8cc1Swenshuai.xi                 }
96*53ee8cc1Swenshuai.xi             }
97*53ee8cc1Swenshuai.xi             paraGetInfo->result = MDBRESULT_SUCCESS_FIN;
98*53ee8cc1Swenshuai.xi             break;
99*53ee8cc1Swenshuai.xi         default:
100*53ee8cc1Swenshuai.xi             break;
101*53ee8cc1Swenshuai.xi     }
102*53ee8cc1Swenshuai.xi     return 0;
103*53ee8cc1Swenshuai.xi }
104*53ee8cc1Swenshuai.xi #endif
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
VBIStr(MS_U32 u32PowerState,void * pModule)107*53ee8cc1Swenshuai.xi MS_U32 VBIStr(MS_U32 u32PowerState, void* pModule)
108*53ee8cc1Swenshuai.xi {
109*53ee8cc1Swenshuai.xi     MS_U32 u32Return = UTOPIA_STATUS_FAIL;
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi     if ((u32PowerState == E_POWER_SUSPEND) || (u32PowerState == E_POWER_RESUME))
112*53ee8cc1Swenshuai.xi     {
113*53ee8cc1Swenshuai.xi         u32Return = _MDrv_VBI_SetPowerState(u32PowerState);
114*53ee8cc1Swenshuai.xi     }
115*53ee8cc1Swenshuai.xi     else
116*53ee8cc1Swenshuai.xi     {
117*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_FAIL;
118*53ee8cc1Swenshuai.xi     }
119*53ee8cc1Swenshuai.xi     return u32Return;// for success
120*53ee8cc1Swenshuai.xi }
121*53ee8cc1Swenshuai.xi #endif
122*53ee8cc1Swenshuai.xi 
VBIOpen(void ** ppInstance,const void * const pAttribute)123*53ee8cc1Swenshuai.xi MS_U32 VBIOpen(void** ppInstance, const void* const pAttribute)
124*53ee8cc1Swenshuai.xi {
125*53ee8cc1Swenshuai.xi     VBI_DEBUG_MSG(ULOGD("VBI", "\n[VBI INFO] vbi open start\n"));
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi     VBI_INSTANT_PRIVATE *pVbiPri = NULL;
128*53ee8cc1Swenshuai.xi     void *pVbiPriVoid = NULL;
129*53ee8cc1Swenshuai.xi     //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,ULOGD("VBI", "enter %s %d\n",__FUNCTION__,__LINE__));
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi     UtopiaInstanceCreate(sizeof(VBI_INSTANT_PRIVATE), ppInstance);
132*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(*ppInstance, &pVbiPriVoid);
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi     pVbiPri = (VBI_INSTANT_PRIVATE*)pVbiPriVoid;
135*53ee8cc1Swenshuai.xi     // For ATV
136*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIGetLibVer                       = (IOCTL_VBI_GETLIBVER                       )MDrv_VBI_GetLibVer;
137*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIGetInfo                         = (IOCTL_VBI_GETINFO                         )MDrv_VBI_GetInfo;
138*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIGetStatus                       = (IOCTL_VBI_GETSTATUS                       )_MDrv_VBI_GetStatus;
139*53ee8cc1Swenshuai.xi     pVbiPri->fpVBISetDbgLevel                     = (IOCTL_VBI_SET_DBGLEVEL                    )MDrv_VBI_SetDbgLevel;
140*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIInit                            = (IOCTL_VBI_INIT                            )_MDrv_VBI_Init;
141*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIExit                            = (IOCTL_VBI_EXIT                            )_MDrv_VBI_Exit;
142*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIRegisterCB                      = (IOCTL_VBI_REGISTERCB                      )_MDrv_VBI_RegisterCB;
143*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIRingBufferReset                 = (IOCTL_VBI_RINGBUFFER_RESET                )_MDrv_VBI_RingBuffer_Reset;
144*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIInitializeTTXSlicer             = (IOCTL_VBI_INITIALIZETTXSLICER             )_MDrv_VBI_InitializeTTXSlicer;
145*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIEnableTTXSlicer                 = (IOCTL_VBI_ENABLETTXSLICER                 )_MDrv_VBI_EnableTTXSlicer;
146*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIIsVPSReady                      = (IOCTL_VBI_ISVPS_READY                     )_MDrv_VBI_IsVPS_Ready;
147*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIIsTTXReady                      = (IOCTL_VBI_ISTTX_READY                     )_MDrv_VBI_IsTTX_Ready;
148*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIIsWSSReady                      = (IOCTL_VBI_ISWSS_READY                     )_MDrv_VBI_IsWSS_Ready;
149*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIGetWSSData                      = (IOCTL_VBI_GETWSS_DATA                     )_MDrv_VBI_GetWSS_Data;
150*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIGetVPSData                      = (IOCTL_VBI_GETVPS_DATA                     )_MDrv_VBI_GetVPS_Data;
151*53ee8cc1Swenshuai.xi     pVbiPri->fpVBISetVideoStandard                = (IOCTL_VBI_SETVIDEOSTANDARD                )_MDrv_VBI_SetVideoStandard;
152*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXPacketBufferIsEmpty          = (IOCTL_VBI_TTX_PACKETBUFFERISEMPTY         )_MDrv_VBI_TTX_PacketBufferIsEmpty;
153*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXCheckCircuitReady            = (IOCTL_VBI_TTX_CHECKCIRCUITREADY           )_MDrv_VBI_TTX_CheckCircuitReady;
154*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXGetPacketCount               = (IOCTL_VBI_TTX_GETPACKETCOUNT              )_MDrv_VBI_TTX_GetPacketCount;
155*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXGetPackets                   = (IOCTL_VBI_TTX_GETPACKETS                  )_MDrv_VBI_TTX_GetPackets;
156*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXGetPacket                    = (IOCTL_VBI_TTX_GETPACKET                   )_MDrv_VBI_TTX_GetPacket;
157*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXPacktetBufferIsOverflow      = (IOCTL_VBI_TTX_PACKETBUFFERISOVERFLOW      )_MDrv_VBI_TTX_PacketBufferIsOverflow;
158*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXPacketBufferGetNoOfOverflows = (IOCTL_VBI_TTX_PACKETBUFFERGETNOOFOVERFLOWS)_MDrv_VBI_TTX_PacketBufferGetNoOfOverflows;
159*53ee8cc1Swenshuai.xi     pVbiPri->fpVBITTXEnableLine                   = (IOCTL_VBI_TTX_ENABLELINE                  )_MDrv_VBI_TTX_EnableLine;
160*53ee8cc1Swenshuai.xi     pVbiPri->fpVBISyncMemory                      = (IOCTL_VBI_SYNCMEMORY                      )_MDrv_VBI_SyncMemory;
161*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCInitSlicer                    = (IOCTL_VBI_CC_INITSLICER                   )_MDrv_VBI_CC_InitSlicer;
162*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCInitYPbYr                     = (IOCTL_VBI_CC_INITYPBYR                    )_MDrv_VBI_CC_InitYPbYr;
163*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCSetDataRate                   = (IOCTL_VBI_CC_SETDATARATE                  )_MDrv_VBI_CC_SetDataRate;
164*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCGetInfo                       = (IOCTL_VBI_CC_GETINFO                      )_MDrv_VBI_CC_GetInfo;
165*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCSetFrameCnt                   = (IOCTL_VBI_CC_SETFRAMECNT                  )_MDrv_VBI_CC_SetFrameCnt;
166*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCEnableSlicer                  = (IOCTL_VBI_CC_ENABLESLICER                 )_MDrv_VBI_CC_EnableSlicer;
167*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCEnableLine                    = (IOCTL_VBI_CC_ENABLELINE                   )_MDrv_VBI_CC_EnableLine;
168*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCSetSCWindowLen                = (IOCTL_VBI_CC_SETSCWINDOWLEN               )_MDrv_VBI_CC_SetSCWindowLen;
169*53ee8cc1Swenshuai.xi     pVbiPri->fpVBICCSetVideoStandard              = (IOCTL_VBI_CC_SETVIDEOSTANDARD             )_MDrv_VBI_CC_SetStandard;
170*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIWSSSetVpsByteNum                = (IOCTL_VBI_WSS_SETVPSBYTENUM               )_MDrv_VBI_WSS_SetVpsByteNum;
171*53ee8cc1Swenshuai.xi     pVbiPri->fpVBISuspend                         = (IOCTL_VBI_SUSPEND                         )_MDrv_VBI_Suspend;
172*53ee8cc1Swenshuai.xi     pVbiPri->fpVBIResume                          = (IOCTL_VBI_RESUME                          )_MDrv_VBI_Resume;
173*53ee8cc1Swenshuai.xi     pVbiPri->fpVBISetPowerState                   = (IOCTL_VBI_SETPOWERSTATE                   )_MDrv_VBI_SetPowerState;
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi     // For DTV
176*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXRingBufferReset              = (IOCTL_DMX_TTX_RINGBUFFER_RESET            )_MDrv_DMX_TTX_RingBuffer_Reset;
177*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXInit                         = (IOCTL_DMX_TTX_INIT                        )_MDrv_DMX_TTX_Init;
178*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXExit                         = (IOCTL_DMX_TTX_EXIT                        )_MDrv_DMX_TTX_Exit;
179*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXSetFilterID                  = (IOCTL_DMX_TTX_SETFILTERID                 )_MDrv_DMX_TTX_SetFilterID;
180*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXSetCB                        = (IOCTL_DMX_TTX_SETCB                       )_MDrv_DMX_TTX_SetCB;
181*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXPacketBufferIsEmpty          = (IOCTL_DMX_TTX_PACKETBUFFERISEMPTY         )_MDrv_DMX_TTX_PacketBufferIsEmpty;
182*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXGetPackets                   = (IOCTL_DMX_TTX_GETPACKETS                  )_MDrv_DMX_TTX_GetPackets;
183*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXGetPacket                    = (IOCTL_DMX_TTX_GETPACKET                   )_MDrv_DMX_TTX_GetPacket;
184*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXPacketBufferIsOverflow       = (IOCTL_DMX_TTX_PACKETBUFFERISOVERFLOW      )_MDrv_DMX_TTX_PacketBufferIsOverflow;
185*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXPacketBufferGetNoOfOverflows = (IOCTL_DMX_TTX_PACKETBUFFERGETNOOFOVERFLOWS)_MDrv_DMX_TTX_PacketBufferGetNoOfOverflows;
186*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXSuspend                      = (IOCTL_DMX_TTX_SUSPEND                     )_MDrv_DMX_TTX_Suspend;
187*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXResume                       = (IOCTL_DMX_TTX_RESUME                      )_MDrv_DMX_TTX_Resume;
188*53ee8cc1Swenshuai.xi     pVbiPri->fpDMXTTXSetPowerState                = (IOCTL_DMX_TTX_SETPOWERSTATE               )_MDrv_DMX_TTX_SetPowerState;
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
191*53ee8cc1Swenshuai.xi }
192*53ee8cc1Swenshuai.xi 
VBIIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)193*53ee8cc1Swenshuai.xi MS_U32 VBIIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
194*53ee8cc1Swenshuai.xi {
195*53ee8cc1Swenshuai.xi     //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,ULOGD("VBI", "enter %s %d\n",__FUNCTION__,__LINE__));
196*53ee8cc1Swenshuai.xi     VBI_DEBUG_MSG(ULOGD("VBI", "\n[VBI INFO] vbi ioctl cmd = %ld\n",u32Cmd));
197*53ee8cc1Swenshuai.xi     MS_U32 u32Ret = UTOPIA_STATUS_FAIL;
198*53ee8cc1Swenshuai.xi     VBI_INSTANT_PRIVATE*  psVbiInstPri = NULL;
199*53ee8cc1Swenshuai.xi     void* pModule       = NULL;
200*53ee8cc1Swenshuai.xi     void* pResource_atv = NULL;
201*53ee8cc1Swenshuai.xi     void* pResource_dtv = NULL;
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
204*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psVbiInstPri); // Get instance
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi     PVBI_GETLIBVER              pGetLibVer            = NULL;
207*53ee8cc1Swenshuai.xi     PVBI_GETINFO_PARAM          pGetInfoParam         = NULL;
208*53ee8cc1Swenshuai.xi     PVBI_GETSTATUS              pGetStatus            = NULL;
209*53ee8cc1Swenshuai.xi     PVBI_SETDBGLEVEL            pSetDbgLevel          = NULL;
210*53ee8cc1Swenshuai.xi     PVBI_INIT_TYPE              pInitType             = NULL;
211*53ee8cc1Swenshuai.xi     PVBI_REGISTER_CB            pRegisterCB           = NULL;
212*53ee8cc1Swenshuai.xi     PVBI_INITIALIZER_TTX_SLICER pInitializerTTXSlicer = NULL;
213*53ee8cc1Swenshuai.xi     PVBI_ENABLE_TTX_SLICER      pEnableTTXSlicer      = NULL;
214*53ee8cc1Swenshuai.xi     PVBI_GET_VPS_DATA           pGetVPSData           = NULL;
215*53ee8cc1Swenshuai.xi     PVBI_SET_VIDEO_STANDARD     pSetVideoStandard     = NULL;
216*53ee8cc1Swenshuai.xi     PVBI_TTX_GET_PACKETS        pGetPackets           = NULL;
217*53ee8cc1Swenshuai.xi     PVBI_TTX_GET_PACKET         pGetPacket            = NULL;
218*53ee8cc1Swenshuai.xi     PVBI_TTX_ENABLE_LINE        pEnableLine           = NULL;
219*53ee8cc1Swenshuai.xi     PVBI_SYNC_MEMORY            pSyncMemory           = NULL;
220*53ee8cc1Swenshuai.xi     PVBI_CC_INIT_SLICER         pCCInitSlicer         = NULL;
221*53ee8cc1Swenshuai.xi     PVBI_CC_INIT_YPBYR          pCCInitYPbYr          = NULL;
222*53ee8cc1Swenshuai.xi     PVBI_CC_SETDATARATE         pCCSetDataRate        = NULL;
223*53ee8cc1Swenshuai.xi     PVBI_CC_GETINFO             pGetInfo              = NULL;
224*53ee8cc1Swenshuai.xi     PVBI_CC_SET_FRAMECNT        pCCSetFrameCnt        = NULL;
225*53ee8cc1Swenshuai.xi     PVBI_CC_ENABLE_SLICER       pCCEnableSlicer       = NULL;
226*53ee8cc1Swenshuai.xi     PVBI_CC_ENABLE_LINE         pCCEnableLine         = NULL;
227*53ee8cc1Swenshuai.xi     PVBI_CC_SET_SC_WND_LEN      pCCSetWndLen          = NULL;
228*53ee8cc1Swenshuai.xi     PVBI_VBI_WSS_VPSBYTENUM     pWSSSetVpsByteCnt     = NULL;
229*53ee8cc1Swenshuai.xi     PVBI_GET_RAW_VPS_DATA       pGetRawVPSData        = NULL;
230*53ee8cc1Swenshuai.xi     PDMX_TTX_SET_FILTERID       pDMXSetFilterID       = NULL;
231*53ee8cc1Swenshuai.xi     PDMX_TTX_SET_CB             pDMXSetCB             = NULL;
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi     PVBI_CMD                    pVbiCmd               = NULL;
234*53ee8cc1Swenshuai.xi     PDMX_TTX_CMD                pDmxTtxCmd            = NULL;
235*53ee8cc1Swenshuai.xi 
236*53ee8cc1Swenshuai.xi     PVBI_GET_DATA pGetData        = NULL;
237*53ee8cc1Swenshuai.xi     PVBI_BOOL     pCheckTureFalse = NULL;
238*53ee8cc1Swenshuai.xi     PVBI_GET_RESULT             pGetResult            = NULL;
239*53ee8cc1Swenshuai.xi     PVBI_PROTECT_MEMORY         pProtectMemory        = NULL;
240*53ee8cc1Swenshuai.xi 
241*53ee8cc1Swenshuai.xi     VBI_DrvInfo *pVBIInfo;
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi     if(u32Cmd <= MDrv_CMD_VBI_WSS_SetVpsByteNum ||  u32Cmd == MDrv_CMD_VBI_Exit)
244*53ee8cc1Swenshuai.xi     {
245*53ee8cc1Swenshuai.xi         if(UtopiaResourceObtain(pModule, VBI_POOL_ID_VBI0, &pResource_atv) == UTOPIA_STATUS_FAIL)
246*53ee8cc1Swenshuai.xi         {
247*53ee8cc1Swenshuai.xi             return UTOPIA_STATUS_ERR_RESOURCE;
248*53ee8cc1Swenshuai.xi         }
249*53ee8cc1Swenshuai.xi     }
250*53ee8cc1Swenshuai.xi     else
251*53ee8cc1Swenshuai.xi     {
252*53ee8cc1Swenshuai.xi         if(UtopiaResourceObtain(pModule, VBI_POOL_ID_VBI1, &pResource_dtv) == UTOPIA_STATUS_FAIL)
253*53ee8cc1Swenshuai.xi         {
254*53ee8cc1Swenshuai.xi             return UTOPIA_STATUS_ERR_RESOURCE;
255*53ee8cc1Swenshuai.xi         }
256*53ee8cc1Swenshuai.xi     }
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi     switch(u32Cmd)
259*53ee8cc1Swenshuai.xi     {
260*53ee8cc1Swenshuai.xi         //=============================================
261*53ee8cc1Swenshuai.xi         // ATV - TTX, CC
262*53ee8cc1Swenshuai.xi         //=============================================
263*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_GetLibVer:
264*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_GetLibVer\n");
265*53ee8cc1Swenshuai.xi             pGetLibVer = (PVBI_GETLIBVER)pArgs;
266*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBIGetLibVer(pGetLibVer->ppVersion) == TRUE)
267*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
268*53ee8cc1Swenshuai.xi             break;
269*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_GetInfo:
270*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_GetInfo\n");
271*53ee8cc1Swenshuai.xi             pGetInfoParam = (PVBI_GETINFO_PARAM)pArgs;
272*53ee8cc1Swenshuai.xi             pVBIInfo = psVbiInstPri->fpVBIGetInfo();
273*53ee8cc1Swenshuai.xi             memcpy (pGetInfoParam,pVBIInfo,sizeof(VBI_DrvInfo));
274*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
275*53ee8cc1Swenshuai.xi             break;
276*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_GetStatus:
277*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_GetStatus\n");
278*53ee8cc1Swenshuai.xi             pGetStatus = (PVBI_GETSTATUS)pArgs;
279*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBIGetStatus(pGetStatus->pDrvStatus) == TRUE)
280*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
281*53ee8cc1Swenshuai.xi             break;
282*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_SetDbgLevel:
283*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_SetDbgLevel\n");
284*53ee8cc1Swenshuai.xi             pSetDbgLevel = (PVBI_SETDBGLEVEL)pArgs;
285*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBISetDbgLevel(pSetDbgLevel->u16DbgSwitch) == TRUE)
286*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
287*53ee8cc1Swenshuai.xi             break;
288*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_Init:
289*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_Init\n");
290*53ee8cc1Swenshuai.xi             pInitType = (PVBI_INIT_TYPE)pArgs;
291*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBIInit(pInitType->cmd, pInitType->type) == TRUE)
292*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
293*53ee8cc1Swenshuai.xi             break;
294*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_RegisterCB:
295*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_RegisterCB\n");
296*53ee8cc1Swenshuai.xi             pRegisterCB = (PVBI_REGISTER_CB)pArgs;
297*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIRegisterCB(pRegisterCB->pFN,
298*53ee8cc1Swenshuai.xi                                           pRegisterCB->bufferAddr,
299*53ee8cc1Swenshuai.xi                                           pRegisterCB->length);
300*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
301*53ee8cc1Swenshuai.xi             break;
302*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_RingBuffer_Reset:
303*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_RingBuffer_Reset\n");
304*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIRingBufferReset();
305*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
306*53ee8cc1Swenshuai.xi             break;
307*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_InitializeTTXSlicer:
308*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_InitializeTTXSlicer\n");
309*53ee8cc1Swenshuai.xi             pInitializerTTXSlicer = (PVBI_INITIALIZER_TTX_SLICER)pArgs;
310*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIInitializeTTXSlicer(pInitializerTTXSlicer->bufferAddr,
311*53ee8cc1Swenshuai.xi                                                    pInitializerTTXSlicer->packetCount);
312*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
313*53ee8cc1Swenshuai.xi             break;
314*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_EnableTTXSlicer:
315*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_EnableTTXSlicer\n");
316*53ee8cc1Swenshuai.xi             pEnableTTXSlicer = (PVBI_ENABLE_TTX_SLICER)pArgs;
317*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIEnableTTXSlicer(pEnableTTXSlicer->bEnable);
318*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
319*53ee8cc1Swenshuai.xi             break;
320*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_IsVPS_Ready:
321*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_IsVPS_Ready\n");
322*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
323*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBIIsVPSReady();
324*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
325*53ee8cc1Swenshuai.xi             break;
326*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_IsTTX_Ready:
327*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_IsTTX_Ready\n");
328*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
329*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBIIsTTXReady();
330*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
331*53ee8cc1Swenshuai.xi             break;
332*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_IsWSS_Ready:
333*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_IsWSS_Ready\n");
334*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
335*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBIIsWSSReady();
336*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
337*53ee8cc1Swenshuai.xi             break;
338*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_GetWSS_Data:
339*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_GetWSS_Data\n");
340*53ee8cc1Swenshuai.xi             pGetData = (PVBI_GET_DATA)pArgs;
341*53ee8cc1Swenshuai.xi             pGetData->u16data = psVbiInstPri->fpVBIGetWSSData();
342*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
343*53ee8cc1Swenshuai.xi             break;
344*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_GetVPS_Data:
345*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_GetVPS_Data\n");
346*53ee8cc1Swenshuai.xi             pGetVPSData = (PVBI_GET_VPS_DATA)pArgs;
347*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIGetVPSData(pGetVPSData->lowerWord, pGetVPSData->higherWord);
348*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
349*53ee8cc1Swenshuai.xi             break;
350*53ee8cc1Swenshuai.xi 		case MDrv_CMD_VBI_GetRawVPS_Data:
351*53ee8cc1Swenshuai.xi             //printf("VBIIoctl - MDrv_CMD_VBI_GetVPS_Data\n");
352*53ee8cc1Swenshuai.xi             pGetRawVPSData = (PVBI_GET_RAW_VPS_DATA)pArgs;
353*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIGetRawVPSData(&pGetRawVPSData->byte0, &pGetRawVPSData->byte1, &pGetRawVPSData->byte2, &pGetRawVPSData->byte3);
354*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
355*53ee8cc1Swenshuai.xi             break;
356*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_SetVideoStandard:
357*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_SetVideoStandard\n");
358*53ee8cc1Swenshuai.xi             pSetVideoStandard = (PVBI_SET_VIDEO_STANDARD)pArgs;
359*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBISetVideoStandard(pSetVideoStandard->eStandard);
360*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
361*53ee8cc1Swenshuai.xi             break;
362*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_PacketBufferIsEmpty:
363*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_PacketBufferIsEmpty\n");
364*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
365*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck= psVbiInstPri->fpVBITTXPacketBufferIsEmpty();
366*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
367*53ee8cc1Swenshuai.xi             break;
368*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_CheckCircuitReady:
369*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_CheckCircuitReady\n");
370*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
371*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBITTXCheckCircuitReady();
372*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
373*53ee8cc1Swenshuai.xi             break;
374*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_GetPacketCount:
375*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_GetPacketCount\n");
376*53ee8cc1Swenshuai.xi             pGetData = (PVBI_GET_DATA)pArgs;
377*53ee8cc1Swenshuai.xi             pGetData->u16data = psVbiInstPri->fpVBITTXGetPacketCount();
378*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
379*53ee8cc1Swenshuai.xi             break;
380*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_GetPackets:
381*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_GetPackets\n");
382*53ee8cc1Swenshuai.xi             pGetPackets = (PVBI_TTX_GET_PACKETS)pArgs;
383*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBITTXGetPackets(pGetPackets->dataAddr, pGetPackets->length) == TRUE)
384*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
385*53ee8cc1Swenshuai.xi             break;
386*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_GetPacket:
387*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_GetPacket\n");
388*53ee8cc1Swenshuai.xi             pGetPacket = (PVBI_TTX_GET_PACKET)pArgs;
389*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBITTXGetPacket(pGetPacket->packetAddress) == TRUE)
390*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
391*53ee8cc1Swenshuai.xi             break;
392*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_PacketBufferIsOverflow:
393*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_PacketBufferIsOverflow\n");
394*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
395*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBITTXPacktetBufferIsOverflow();
396*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
397*53ee8cc1Swenshuai.xi             break;
398*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_PacketBufferGetNoOfOverflows:
399*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_PacketBufferGetNoOfOverflows\n");
400*53ee8cc1Swenshuai.xi             pGetData = (PVBI_GET_DATA)pArgs;
401*53ee8cc1Swenshuai.xi             pGetData->u16data = psVbiInstPri->fpVBITTXPacketBufferGetNoOfOverflows();
402*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
403*53ee8cc1Swenshuai.xi             break;
404*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_TTX_EnableLine:
405*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_TTX_EnableLine\n");
406*53ee8cc1Swenshuai.xi             pEnableLine = (PVBI_TTX_ENABLE_LINE)pArgs;
407*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBITTXEnableLine(pEnableLine->StartLine,
408*53ee8cc1Swenshuai.xi                                              pEnableLine->EndLine);
409*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
410*53ee8cc1Swenshuai.xi             break;
411*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_SyncMemory:
412*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_SyncMemory\n");
413*53ee8cc1Swenshuai.xi             pSyncMemory = (PVBI_SYNC_MEMORY)pArgs;
414*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBISyncMemory(pSyncMemory->u32Start, pSyncMemory->u32Size) == TRUE)
415*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
416*53ee8cc1Swenshuai.xi             break;
417*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_InitSlicer:
418*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_InitSlicer\n");
419*53ee8cc1Swenshuai.xi             pCCInitSlicer = (PVBI_CC_INIT_SLICER)pArgs;
420*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBICCInitSlicer(pCCInitSlicer->u32RiuAddr,
421*53ee8cc1Swenshuai.xi                                             pCCInitSlicer->bufferAddr,
422*53ee8cc1Swenshuai.xi                                             pCCInitSlicer->packetCount);
423*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
424*53ee8cc1Swenshuai.xi             break;
425*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_InitYPbYr:
426*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_InitYPbYr\n");
427*53ee8cc1Swenshuai.xi             pCCInitYPbYr = (PVBI_CC_INIT_YPBYR)pArgs;
428*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBICCInitYPbYr(pCCInitYPbYr->cvbs_no);
429*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
430*53ee8cc1Swenshuai.xi             break;
431*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_SetDataRate:
432*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_SetDataRate\n");
433*53ee8cc1Swenshuai.xi             pCCSetDataRate = (PVBI_CC_SETDATARATE)pArgs;
434*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBICCSetDataRate(pCCSetDataRate->ptable) == TRUE)
435*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
436*53ee8cc1Swenshuai.xi             break;
437*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_GetInfo:
438*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_GetInfo\n");
439*53ee8cc1Swenshuai.xi             pGetInfo = (PVBI_CC_GETINFO)pArgs;
440*53ee8cc1Swenshuai.xi             pGetInfo->info = psVbiInstPri->fpVBICCGetInfo(pGetInfo->selector);
441*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
442*53ee8cc1Swenshuai.xi             break;
443*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_SetFrameCnt:
444*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_SetFrameCnt\n");
445*53ee8cc1Swenshuai.xi             pCCSetFrameCnt = (PVBI_CC_SET_FRAMECNT)pArgs;
446*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBICCSetFrameCnt(pCCSetFrameCnt->cnt);
447*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
448*53ee8cc1Swenshuai.xi             break;
449*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_EnableSlicer:
450*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_EnableSlicer\n");
451*53ee8cc1Swenshuai.xi             pCCEnableSlicer = (PVBI_CC_ENABLE_SLICER)pArgs;
452*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBICCEnableSlicer(pCCEnableSlicer->bEnable);
453*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
454*53ee8cc1Swenshuai.xi             break;
455*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_EnableLine:
456*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_EnableLine\n");
457*53ee8cc1Swenshuai.xi             pCCEnableLine = (PVBI_CC_ENABLE_LINE)pArgs;
458*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBICCEnableLine(pCCEnableLine->StartLine,
459*53ee8cc1Swenshuai.xi                                             pCCEnableLine->EndLine,
460*53ee8cc1Swenshuai.xi                                             pCCEnableLine->mode);
461*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
462*53ee8cc1Swenshuai.xi             break;
463*53ee8cc1Swenshuai.xi 
464*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_SetSCWindowLen:
465*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_SetSCWindowLen\n");
466*53ee8cc1Swenshuai.xi             pCCSetWndLen = (PVBI_CC_SET_SC_WND_LEN)pArgs;
467*53ee8cc1Swenshuai.xi             pCCSetWndLen->bRet = psVbiInstPri->fpVBICCSetSCWindowLen(pCCSetWndLen->u8Len);
468*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
469*53ee8cc1Swenshuai.xi             break;
470*53ee8cc1Swenshuai.xi 
471*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_CC_SetVideoStandard:
472*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_CC_SetVideoStandard\n");
473*53ee8cc1Swenshuai.xi             pSetVideoStandard = (PVBI_SET_VIDEO_STANDARD)pArgs;
474*53ee8cc1Swenshuai.xi             pSetVideoStandard->bRet = psVbiInstPri->fpVBICCSetVideoStandard(pSetVideoStandard->eStandard);
475*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
476*53ee8cc1Swenshuai.xi             break;
477*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_WSS_SetVpsByteNum:
478*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_WSS_SetVpsByteNum\n");
479*53ee8cc1Swenshuai.xi             pWSSSetVpsByteCnt = (PVBI_VBI_WSS_VPSBYTENUM)pArgs;
480*53ee8cc1Swenshuai.xi             psVbiInstPri->fpVBIWSSSetVpsByteNum(pWSSSetVpsByteCnt->cnt);
481*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
482*53ee8cc1Swenshuai.xi             break;
483*53ee8cc1Swenshuai.xi 
484*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_Suspend:
485*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_Suspend\n");
486*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
487*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBISuspend();
488*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
489*53ee8cc1Swenshuai.xi             break;
490*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_Resume:
491*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_Resume\n");
492*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
493*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpVBIResume();
494*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
495*53ee8cc1Swenshuai.xi             break;
496*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_SetPowerState:
497*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_SetPowerState\n");
498*53ee8cc1Swenshuai.xi             pGetResult = (PVBI_GET_RESULT)pArgs;
499*53ee8cc1Swenshuai.xi             pGetResult->u32result= psVbiInstPri->fpVBISetPowerState(pGetResult->u16PowerState);
500*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
501*53ee8cc1Swenshuai.xi             break;
502*53ee8cc1Swenshuai.xi 
503*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_ProtectMemory:
504*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_ProtectMemory\n");
505*53ee8cc1Swenshuai.xi             pProtectMemory = (PVBI_PROTECT_MEMORY)pArgs;
506*53ee8cc1Swenshuai.xi             pProtectMemory->bRet = psVbiInstPri->fpVBIProtectMemory(pProtectMemory->bEnable,
507*53ee8cc1Swenshuai.xi                                                                     pProtectMemory->phyAddr,
508*53ee8cc1Swenshuai.xi                                                                     pProtectMemory->u32Size);
509*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
510*53ee8cc1Swenshuai.xi             break;
511*53ee8cc1Swenshuai.xi         //=============================================
512*53ee8cc1Swenshuai.xi         // DTV - TTX
513*53ee8cc1Swenshuai.xi         //=============================================
514*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_RingBuffer_Reset:
515*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_RingBuffer_Reset\n");
516*53ee8cc1Swenshuai.xi             psVbiInstPri->fpDMXTTXRingBufferReset();
517*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
518*53ee8cc1Swenshuai.xi             break;
519*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_Init:
520*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_Init\n");
521*53ee8cc1Swenshuai.xi             pInitializerTTXSlicer = (PVBI_INITIALIZER_TTX_SLICER)pArgs;
522*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpDMXTTXInit(pInitializerTTXSlicer->cmd, pInitializerTTXSlicer->bufferAddr, pInitializerTTXSlicer->packetCount) == TRUE)
523*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
524*53ee8cc1Swenshuai.xi             break;
525*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_SetFilterID:
526*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_SetFilterID\n");
527*53ee8cc1Swenshuai.xi             pDMXSetFilterID = (PDMX_TTX_SET_FILTERID)pArgs;
528*53ee8cc1Swenshuai.xi             psVbiInstPri->fpDMXTTXSetFilterID(pDMXSetFilterID->fid);
529*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
530*53ee8cc1Swenshuai.xi             break;
531*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_SetCB:
532*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_SetCB\n");
533*53ee8cc1Swenshuai.xi             pDMXSetCB = (PDMX_TTX_SET_CB)pArgs;
534*53ee8cc1Swenshuai.xi             psVbiInstPri->fpDMXTTXSetCB(pDMXSetCB->fn);
535*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
536*53ee8cc1Swenshuai.xi             break;
537*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_PacketBufferIsEmpty:
538*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_PacketBufferIsEmpty\n");
539*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
540*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpDMXTTXPacketBufferIsEmpty();
541*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
542*53ee8cc1Swenshuai.xi             break;
543*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_GetPackets:
544*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_GetPackets\n");
545*53ee8cc1Swenshuai.xi             pGetPackets = (PVBI_TTX_GET_PACKETS)pArgs;
546*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpDMXTTXGetPackets(pGetPackets->dataAddr, pGetPackets->length) == TRUE)
547*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
548*53ee8cc1Swenshuai.xi             break;
549*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_GetPacket:
550*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_GetPacket\n");
551*53ee8cc1Swenshuai.xi             pGetPacket = (PVBI_TTX_GET_PACKET)pArgs;
552*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpDMXTTXGetPacket(pGetPacket->packetAddress) == TRUE)
553*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
554*53ee8cc1Swenshuai.xi             break;
555*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_PacketBufferIsOverflow:
556*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_PacketBufferIsOverflow\n");
557*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
558*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpDMXTTXPacketBufferIsOverflow();
559*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
560*53ee8cc1Swenshuai.xi             break;
561*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_PacketBufferGetNoOfOverflows:
562*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_PacketBufferGetNoOfOverflows\n");
563*53ee8cc1Swenshuai.xi             pGetData = (PVBI_GET_DATA)pArgs;
564*53ee8cc1Swenshuai.xi             pGetData->u16data = psVbiInstPri->fpDMXTTXPacketBufferGetNoOfOverflows();
565*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
566*53ee8cc1Swenshuai.xi             break;
567*53ee8cc1Swenshuai.xi         case MDrv_CMD_VBI_Exit:
568*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_VBI_Exit\n");
569*53ee8cc1Swenshuai.xi             pVbiCmd = (PVBI_CMD)pArgs;
570*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpVBIExit(pVbiCmd->cmd) == TRUE)
571*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
572*53ee8cc1Swenshuai.xi             break;
573*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_Exit:
574*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_Exit\n");
575*53ee8cc1Swenshuai.xi             pDmxTtxCmd = (PDMX_TTX_CMD)pArgs;
576*53ee8cc1Swenshuai.xi             if(psVbiInstPri->fpDMXTTXExit(pDmxTtxCmd->cmd) == TRUE)
577*53ee8cc1Swenshuai.xi                 u32Ret = UTOPIA_STATUS_SUCCESS;
578*53ee8cc1Swenshuai.xi             break;
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_Suspend:
581*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_Suspend\n");
582*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
583*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpDMXTTXSuspend();
584*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
585*53ee8cc1Swenshuai.xi             break;
586*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_Resume:
587*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_Resume\n");
588*53ee8cc1Swenshuai.xi             pCheckTureFalse = (PVBI_BOOL)pArgs;
589*53ee8cc1Swenshuai.xi             pCheckTureFalse->bCheck = psVbiInstPri->fpDMXTTXResume();
590*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
591*53ee8cc1Swenshuai.xi             break;
592*53ee8cc1Swenshuai.xi         case MDrv_CMD_DMX_TTX_SetPowerState:
593*53ee8cc1Swenshuai.xi             //ULOGD("VBI", "VBIIoctl - MDrv_CMD_DMX_TTX_SetPowerState\n");
594*53ee8cc1Swenshuai.xi             pGetResult = (PVBI_GET_RESULT)pArgs;
595*53ee8cc1Swenshuai.xi             pGetResult->u32result= psVbiInstPri->fpDMXTTXSetPowerState(pGetResult->u16PowerState);
596*53ee8cc1Swenshuai.xi             u32Ret = UTOPIA_STATUS_SUCCESS;
597*53ee8cc1Swenshuai.xi             break;
598*53ee8cc1Swenshuai.xi         default:
599*53ee8cc1Swenshuai.xi             break;
600*53ee8cc1Swenshuai.xi     };
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi     if(u32Cmd <= MDrv_CMD_VBI_WSS_SetVpsByteNum ||  u32Cmd == MDrv_CMD_VBI_Exit )
603*53ee8cc1Swenshuai.xi     {
604*53ee8cc1Swenshuai.xi         UtopiaResourceRelease(pResource_atv);
605*53ee8cc1Swenshuai.xi     }
606*53ee8cc1Swenshuai.xi     else
607*53ee8cc1Swenshuai.xi     {
608*53ee8cc1Swenshuai.xi         UtopiaResourceRelease(pResource_dtv);
609*53ee8cc1Swenshuai.xi     }
610*53ee8cc1Swenshuai.xi 
611*53ee8cc1Swenshuai.xi     //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,ULOGD("VBI", "leave %s %d\n",__FUNCTION__,__LINE__));
612*53ee8cc1Swenshuai.xi     return u32Ret; // FIXME: error code
613*53ee8cc1Swenshuai.xi }
614*53ee8cc1Swenshuai.xi 
VBIClose(void * pInstance)615*53ee8cc1Swenshuai.xi MS_U32 VBIClose(void* pInstance)
616*53ee8cc1Swenshuai.xi {
617*53ee8cc1Swenshuai.xi     UtopiaInstanceDelete(pInstance);
618*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
619*53ee8cc1Swenshuai.xi }
620*53ee8cc1Swenshuai.xi 
621