1*53ee8cc1Swenshuai.xi #include "utopia_private.h"
2*53ee8cc1Swenshuai.xi #include <stdio.h>
3*53ee8cc1Swenshuai.xi #include "utopia.h"
4*53ee8cc1Swenshuai.xi #include "utopia_module.h"
5*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
6*53ee8cc1Swenshuai.xi #include "string.h"
7*53ee8cc1Swenshuai.xi #include "MsOS.h"
8*53ee8cc1Swenshuai.xi #include "MsCommon.h"
9*53ee8cc1Swenshuai.xi #include "utopia_driver_id.h"
10*53ee8cc1Swenshuai.xi #include "MsTypes.h"
11*53ee8cc1Swenshuai.xi
12*53ee8cc1Swenshuai.xi //Global Variable===================================================
13*53ee8cc1Swenshuai.xi UTOPIA_PRIVATE* psUtopiaPrivate;
14*53ee8cc1Swenshuai.xi
15*53ee8cc1Swenshuai.xi char moduleNames[][40] = {
16*53ee8cc1Swenshuai.xi #define PREFIX(MODULE) "MODULE_"#MODULE,
17*53ee8cc1Swenshuai.xi INCLUDED_MODULE
18*53ee8cc1Swenshuai.xi #undef PREFIX
19*53ee8cc1Swenshuai.xi };
20*53ee8cc1Swenshuai.xi
21*53ee8cc1Swenshuai.xi char rpoolNames[][40] = {
22*53ee8cc1Swenshuai.xi #define PREFIX(MODULE) "RPOOL_"#MODULE,
23*53ee8cc1Swenshuai.xi INCLUDED_MODULE
24*53ee8cc1Swenshuai.xi #undef PREFIX
25*53ee8cc1Swenshuai.xi };
26*53ee8cc1Swenshuai.xi
27*53ee8cc1Swenshuai.xi char ResourceNames[][40] = {
28*53ee8cc1Swenshuai.xi #define PREFIX(MODULE) "RESOURCE_"#MODULE,
29*53ee8cc1Swenshuai.xi INCLUDED_MODULE
30*53ee8cc1Swenshuai.xi #undef PREFIX
31*53ee8cc1Swenshuai.xi };
32*53ee8cc1Swenshuai.xi
33*53ee8cc1Swenshuai.xi // NOS use CONFIG_MBOOT/CONFIG_CHAKRA2/CONFIG_PUMABOOT to define the XXXXRegisterToUtopia
34*53ee8cc1Swenshuai.xi
35*53ee8cc1Swenshuai.xi void BDMARegisterToUtopia(FUtopiaOpen ModuleType);
36*53ee8cc1Swenshuai.xi void SYSRegisterToUtopia(FUtopiaOpen ModuleType);
37*53ee8cc1Swenshuai.xi
38*53ee8cc1Swenshuai.xi #ifdef CONFIG_MBOOT
39*53ee8cc1Swenshuai.xi void CPURegisterToUtopia(FUtopiaOpen ModuleType);
40*53ee8cc1Swenshuai.xi void PNLRegisterToUtopia(FUtopiaOpen ModuleType);
41*53ee8cc1Swenshuai.xi void GOPRegisterToUtopia(FUtopiaOpen ModuleType);
42*53ee8cc1Swenshuai.xi void GFXRegisterToUtopia(FUtopiaOpen ModuleType);
43*53ee8cc1Swenshuai.xi void MIURegisterToUtopia(FUtopiaOpen ModuleType);
44*53ee8cc1Swenshuai.xi void AESDMARegisterToUtopia(FUtopiaOpen ModuleType);
45*53ee8cc1Swenshuai.xi void HDMITXRegisterToUtopia(FUtopiaOpen ModuleType);
46*53ee8cc1Swenshuai.xi void CECRegisterToUtopia(FUtopiaOpen ModuleType);
47*53ee8cc1Swenshuai.xi void DSCMBRegisterToUtopia(void);
48*53ee8cc1Swenshuai.xi void CIPHERRegisterToUtopia(void);
49*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_JPEG_EX
50*53ee8cc1Swenshuai.xi void JPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType);
51*53ee8cc1Swenshuai.xi #endif
52*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_NJPEG_EX
53*53ee8cc1Swenshuai.xi void NJPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType);
54*53ee8cc1Swenshuai.xi #endif
55*53ee8cc1Swenshuai.xi void XCRegisterToUtopia(FUtopiaOpen ModuleType);
56*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_DAC
57*53ee8cc1Swenshuai.xi void DACRegisterToUtopia(FUtopiaOpen ModuleType);
58*53ee8cc1Swenshuai.xi #endif
59*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_LOCALDIMM
60*53ee8cc1Swenshuai.xi void LDRegisterToUtopia(FUtopiaOpen ModuleType);
61*53ee8cc1Swenshuai.xi #endif
62*53ee8cc1Swenshuai.xi #endif
63*53ee8cc1Swenshuai.xi
64*53ee8cc1Swenshuai.xi #ifdef CONFIG_CHAKRA2
65*53ee8cc1Swenshuai.xi void PNLRegisterToUtopia(FUtopiaOpen ModuleType);
66*53ee8cc1Swenshuai.xi void GOPRegisterToUtopia(FUtopiaOpen ModuleType);
67*53ee8cc1Swenshuai.xi void GFXRegisterToUtopia(FUtopiaOpen ModuleType);
68*53ee8cc1Swenshuai.xi void NJPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType);
69*53ee8cc1Swenshuai.xi void XCRegisterToUtopia(FUtopiaOpen ModuleType);
70*53ee8cc1Swenshuai.xi void DMXRegisterToUtopia(FUtopiaOpen ModuleType);
71*53ee8cc1Swenshuai.xi void VDEC_EXRegisterToUtopia(FUtopiaOpen ModuleType);
72*53ee8cc1Swenshuai.xi void ACERegisterToUtopia(FUtopiaOpen ModuleType);
73*53ee8cc1Swenshuai.xi void DBCRegisterToUtopia(FUtopiaOpen ModuleType);
74*53ee8cc1Swenshuai.xi void DLCRegisterToUtopia(FUtopiaOpen ModuleType);
75*53ee8cc1Swenshuai.xi void AESDMARegisterToUtopia(FUtopiaOpen ModuleType);
76*53ee8cc1Swenshuai.xi void BDMARegisterToUtopia(FUtopiaOpen ModuleType);
77*53ee8cc1Swenshuai.xi void CPURegisterToUtopia(FUtopiaOpen ModuleType);
78*53ee8cc1Swenshuai.xi void IRRegisterToUtopia(FUtopiaOpen ModuleType);
79*53ee8cc1Swenshuai.xi void MVOPRegisterToUtopia(FUtopiaOpen ModuleType);
80*53ee8cc1Swenshuai.xi void PWMRegisterToUtopia(FUtopiaOpen ModuleType);
81*53ee8cc1Swenshuai.xi void PWSRegisterToUtopia(FUtopiaOpen ModuleType);
82*53ee8cc1Swenshuai.xi void SARRegisterToUtopia(FUtopiaOpen ModuleType);
83*53ee8cc1Swenshuai.xi void SEMRegisterToUtopia(FUtopiaOpen ModuleType);
84*53ee8cc1Swenshuai.xi void FLASHRegisterToUtopia(FUtopiaOpen ModuleType);
85*53ee8cc1Swenshuai.xi void SYSRegisterToUtopia(FUtopiaOpen ModuleType);
86*53ee8cc1Swenshuai.xi void UARTRegisterToUtopia(FUtopiaOpen ModuleType);
87*53ee8cc1Swenshuai.xi void VBIRegisterToUtopia(FUtopiaOpen ModuleType);
88*53ee8cc1Swenshuai.xi void MBXRegisterToUtopia(FUtopiaOpen ModuleType);
89*53ee8cc1Swenshuai.xi void TVENCODERRegisterToUtopia(FUtopiaOpen ModuleType);
90*53ee8cc1Swenshuai.xi void DIPRegisterToUtopia(FUtopiaOpen ModuleType);
91*53ee8cc1Swenshuai.xi #endif
92*53ee8cc1Swenshuai.xi
93*53ee8cc1Swenshuai.xi #ifdef CONFIG_PUMABOOT
94*53ee8cc1Swenshuai.xi void PNLRegisterToUtopia(FUtopiaOpen ModuleType);
95*53ee8cc1Swenshuai.xi void GOPRegisterToUtopia(FUtopiaOpen ModuleType);
96*53ee8cc1Swenshuai.xi void GFXRegisterToUtopia(FUtopiaOpen ModuleType);
97*53ee8cc1Swenshuai.xi void NJPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType);
98*53ee8cc1Swenshuai.xi void XCRegisterToUtopia(FUtopiaOpen ModuleType);
99*53ee8cc1Swenshuai.xi void DMXRegisterToUtopia(FUtopiaOpen ModuleType);
100*53ee8cc1Swenshuai.xi void VDEC_EXRegisterToUtopia(FUtopiaOpen ModuleType);
101*53ee8cc1Swenshuai.xi void ACERegisterToUtopia(FUtopiaOpen ModuleType);
102*53ee8cc1Swenshuai.xi void DBCRegisterToUtopia(FUtopiaOpen ModuleType);
103*53ee8cc1Swenshuai.xi void DLCRegisterToUtopia(FUtopiaOpen ModuleType);
104*53ee8cc1Swenshuai.xi void BDMARegisterToUtopia(FUtopiaOpen ModuleType);
105*53ee8cc1Swenshuai.xi void MVOPRegisterToUtopia(FUtopiaOpen ModuleType);
106*53ee8cc1Swenshuai.xi void PWMRegisterToUtopia(FUtopiaOpen ModuleType);
107*53ee8cc1Swenshuai.xi void SEMRegisterToUtopia(FUtopiaOpen ModuleType);
108*53ee8cc1Swenshuai.xi void SYSRegisterToUtopia(FUtopiaOpen ModuleType);
109*53ee8cc1Swenshuai.xi void UARTRegisterToUtopia(FUtopiaOpen ModuleType);
110*53ee8cc1Swenshuai.xi void VBIRegisterToUtopia(FUtopiaOpen ModuleType);
111*53ee8cc1Swenshuai.xi void MBXRegisterToUtopia(FUtopiaOpen ModuleType);
112*53ee8cc1Swenshuai.xi void MIURegisterToUtopia(FUtopiaOpen ModuleType);
113*53ee8cc1Swenshuai.xi #endif
114*53ee8cc1Swenshuai.xi
UtopiaInit()115*53ee8cc1Swenshuai.xi MS_U32 UtopiaInit()
116*53ee8cc1Swenshuai.xi {
117*53ee8cc1Swenshuai.xi MsOS_SHM_Init();
118*53ee8cc1Swenshuai.xi
119*53ee8cc1Swenshuai.xi psUtopiaPrivate = (UTOPIA_PRIVATE*)malloc(sizeof(UTOPIA_PRIVATE));
120*53ee8cc1Swenshuai.xi memset(psUtopiaPrivate, 0, sizeof(UTOPIA_PRIVATE));
121*53ee8cc1Swenshuai.xi psUtopiaPrivate->u32MutexID = MsOS_CreateMutex(E_MSOS_FIFO, "UtopiaPrivateMutex", MSOS_PROCESS_SHARED);
122*53ee8cc1Swenshuai.xi
123*53ee8cc1Swenshuai.xi MsOS_ObtainMutex(psUtopiaPrivate->u32MutexID, MSOS_WAIT_FOREVER);
124*53ee8cc1Swenshuai.xi
125*53ee8cc1Swenshuai.xi /*
126*53ee8cc1Swenshuai.xi * to avoid weak attribute malfunction in static lib,
127*53ee8cc1Swenshuai.xi * we explicitly call needed functions
128*53ee8cc1Swenshuai.xi */
129*53ee8cc1Swenshuai.xi UTOPIARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_UTOPIA_FULL);
130*53ee8cc1Swenshuai.xi BDMARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_BDMA_FULL);
131*53ee8cc1Swenshuai.xi SYSRegisterToUtopia(NULL);
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi #ifdef CONFIG_PUMABOOT
134*53ee8cc1Swenshuai.xi VBIRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_VBI_FULL);
135*53ee8cc1Swenshuai.xi XCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_FULL);
136*53ee8cc1Swenshuai.xi PNLRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PNL_FULL);
137*53ee8cc1Swenshuai.xi ACERegisterToUtopia((FUtopiaOpen)MODULE_TYPE_ACE_FULL);
138*53ee8cc1Swenshuai.xi NJPEG_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_NJPEG_EX_FULL);
139*53ee8cc1Swenshuai.xi MVOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MVOP_FULL);
140*53ee8cc1Swenshuai.xi PWMRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PWM_FULL);
141*53ee8cc1Swenshuai.xi SYSRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SYS_FULL);
142*53ee8cc1Swenshuai.xi UARTRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_UART_FULL);
143*53ee8cc1Swenshuai.xi MBXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MBX_FULL);
144*53ee8cc1Swenshuai.xi SEMRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SEM_FULL);
145*53ee8cc1Swenshuai.xi DMXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SEM_FULL);
146*53ee8cc1Swenshuai.xi VDEC_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_VDEC_EX_FULL);
147*53ee8cc1Swenshuai.xi GOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GOP_FULL);
148*53ee8cc1Swenshuai.xi GFXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GFX_FULL);
149*53ee8cc1Swenshuai.xi DLCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_DLC_FULL);
150*53ee8cc1Swenshuai.xi MIURegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MIU_FULL);
151*53ee8cc1Swenshuai.xi #endif
152*53ee8cc1Swenshuai.xi
153*53ee8cc1Swenshuai.xi #ifdef CONFIG_CHAKRA2
154*53ee8cc1Swenshuai.xi printf("\033[35m[Chakra2] Driver Register to Utopia\033[m\n");
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi VBIRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_VBI_FULL);
157*53ee8cc1Swenshuai.xi XCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_FULL);
158*53ee8cc1Swenshuai.xi PNLRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PNL_FULL);
159*53ee8cc1Swenshuai.xi ACERegisterToUtopia((FUtopiaOpen)MODULE_TYPE_ACE_FULL);
160*53ee8cc1Swenshuai.xi AESDMARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_AESDMA_FULL);
161*53ee8cc1Swenshuai.xi IRRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_IR_FULL);
162*53ee8cc1Swenshuai.xi NJPEG_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_NJPEG_EX_FULL);
163*53ee8cc1Swenshuai.xi MVOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MVOP_FULL);
164*53ee8cc1Swenshuai.xi PWMRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PWM_FULL);
165*53ee8cc1Swenshuai.xi PWSRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PWS_FULL);
166*53ee8cc1Swenshuai.xi FLASHRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_FLASH_FULL);
167*53ee8cc1Swenshuai.xi SYSRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SYS_FULL);
168*53ee8cc1Swenshuai.xi UARTRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_UART_FULL);
169*53ee8cc1Swenshuai.xi MBXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MBX_FULL);
170*53ee8cc1Swenshuai.xi TVENCODERRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_TVENCODER_FULL);
171*53ee8cc1Swenshuai.xi DIPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_DIP_FULL);
172*53ee8cc1Swenshuai.xi SARRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SAR_FULL);
173*53ee8cc1Swenshuai.xi CECRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_CEC_FULL);
174*53ee8cc1Swenshuai.xi SEMRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SEM_FULL);
175*53ee8cc1Swenshuai.xi DMXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SEM_FULL);
176*53ee8cc1Swenshuai.xi VDEC_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_VDEC_EX_FULL);
177*53ee8cc1Swenshuai.xi GOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GOP_FULL);
178*53ee8cc1Swenshuai.xi GFXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GFX_FULL);
179*53ee8cc1Swenshuai.xi DLCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_DLC_FULL);
180*53ee8cc1Swenshuai.xi #endif
181*53ee8cc1Swenshuai.xi
182*53ee8cc1Swenshuai.xi #ifdef CONFIG_MBOOT
183*53ee8cc1Swenshuai.xi CPURegisterToUtopia((FUtopiaOpen)MODULE_TYPE_CPU_FULL);
184*53ee8cc1Swenshuai.xi PNLRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PNL_FULL);
185*53ee8cc1Swenshuai.xi GOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GOP_FULL);
186*53ee8cc1Swenshuai.xi GFXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GFX_FULL);
187*53ee8cc1Swenshuai.xi MIURegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MIU_FULL);
188*53ee8cc1Swenshuai.xi //DSCMBRegisterToUtopia();
189*53ee8cc1Swenshuai.xi //CIPHERRegisterToUtopia();
190*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_JPEG_EX
191*53ee8cc1Swenshuai.xi JPEG_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_NJPEG_EX_FULL);
192*53ee8cc1Swenshuai.xi #endif
193*53ee8cc1Swenshuai.xi
194*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_NJPEG_EX
195*53ee8cc1Swenshuai.xi NJPEG_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_NJPEG_EX_FULL);
196*53ee8cc1Swenshuai.xi #endif
197*53ee8cc1Swenshuai.xi XCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_MINIMUM);
198*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_DAC
199*53ee8cc1Swenshuai.xi DACRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_DAC_FULL);
200*53ee8cc1Swenshuai.xi #endif
201*53ee8cc1Swenshuai.xi #ifdef CONFIG_API_LOCALDIMM
202*53ee8cc1Swenshuai.xi LDRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_LD_FULL);
203*53ee8cc1Swenshuai.xi #endif
204*53ee8cc1Swenshuai.xi AESDMARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_AESDMA_FULL);
205*53ee8cc1Swenshuai.xi HDMITXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_HDMITX_FULL);
206*53ee8cc1Swenshuai.xi #endif
207*53ee8cc1Swenshuai.xi
208*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(psUtopiaPrivate->u32MutexID);
209*53ee8cc1Swenshuai.xi return 0;
210*53ee8cc1Swenshuai.xi }
211*53ee8cc1Swenshuai.xi #ifdef CONFIG_MBOOT
UtopiaInit_str()212*53ee8cc1Swenshuai.xi MS_U32 UtopiaInit_str()
213*53ee8cc1Swenshuai.xi {
214*53ee8cc1Swenshuai.xi printf("\033[35m[NOS] UtopiaInit_str\033[m\n\n");
215*53ee8cc1Swenshuai.xi MsOS_SHM_Init();
216*53ee8cc1Swenshuai.xi
217*53ee8cc1Swenshuai.xi psUtopiaPrivate = (UTOPIA_PRIVATE*)malloc(sizeof(UTOPIA_PRIVATE));
218*53ee8cc1Swenshuai.xi memset(psUtopiaPrivate, 0, sizeof(UTOPIA_PRIVATE));
219*53ee8cc1Swenshuai.xi psUtopiaPrivate->u32MutexID = MsOS_CreateMutex(E_MSOS_FIFO, "UtopiaPrivateMutex", MSOS_PROCESS_SHARED);
220*53ee8cc1Swenshuai.xi
221*53ee8cc1Swenshuai.xi MsOS_ObtainMutex(psUtopiaPrivate->u32MutexID, MSOS_WAIT_FOREVER);
222*53ee8cc1Swenshuai.xi
223*53ee8cc1Swenshuai.xi /*
224*53ee8cc1Swenshuai.xi * to avoid weak attribute malfunction in static lib,
225*53ee8cc1Swenshuai.xi * we explicitly call needed functions
226*53ee8cc1Swenshuai.xi */
227*53ee8cc1Swenshuai.xi UTOPIARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_UTOPIA_FULL);
228*53ee8cc1Swenshuai.xi BDMARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_BDMA_FULL);
229*53ee8cc1Swenshuai.xi
230*53ee8cc1Swenshuai.xi printf("\033[35m[MBoot] Driver Register to Utopia\033[m\n");
231*53ee8cc1Swenshuai.xi CPURegisterToUtopia((FUtopiaOpen)MODULE_TYPE_CPU_FULL);
232*53ee8cc1Swenshuai.xi PNLRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PNL_FULL);
233*53ee8cc1Swenshuai.xi XCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_MINIMUM);
234*53ee8cc1Swenshuai.xi
235*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(psUtopiaPrivate->u32MutexID);
236*53ee8cc1Swenshuai.xi return 0;
237*53ee8cc1Swenshuai.xi }
238*53ee8cc1Swenshuai.xi #endif
239*53ee8cc1Swenshuai.xi
UtopiaOpen(MS_U32 u32ModuleID,void ** ppInstanceTmp,MS_U32 u32ModuleVersion,const void * const pAttribute)240*53ee8cc1Swenshuai.xi MS_U32 UtopiaOpen(MS_U32 u32ModuleID, void** ppInstanceTmp
241*53ee8cc1Swenshuai.xi , MS_U32 u32ModuleVersion, const void* const pAttribute)
242*53ee8cc1Swenshuai.xi {
243*53ee8cc1Swenshuai.xi UTOPIA_MODULE* psUtopiaModule = psUtopiaPrivate->psModuleHead;
244*53ee8cc1Swenshuai.xi UTOPIA_INSTANCE** ppInstance = (UTOPIA_INSTANCE**)ppInstanceTmp;
245*53ee8cc1Swenshuai.xi
246*53ee8cc1Swenshuai.xi //printf("application is going to open %s\n\n", moduleNames[u32ModuleID]);
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xi while(psUtopiaModule != NULL)
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi if(psUtopiaModule->u32ModuleID == u32ModuleID)//need modify to link list
251*53ee8cc1Swenshuai.xi {
252*53ee8cc1Swenshuai.xi int ret = psUtopiaModule->fpOpen((void**)ppInstance, pAttribute);
253*53ee8cc1Swenshuai.xi
254*53ee8cc1Swenshuai.xi if(ret)
255*53ee8cc1Swenshuai.xi {
256*53ee8cc1Swenshuai.xi printf("\033[35mFunction = %s, Line = %d, UtopiaOpen: create Instance failed\033[m\n", __PRETTY_FUNCTION__, __LINE__);
257*53ee8cc1Swenshuai.xi RET_OR_BLOCK(ret);
258*53ee8cc1Swenshuai.xi }
259*53ee8cc1Swenshuai.xi
260*53ee8cc1Swenshuai.xi (*ppInstance)->psModule = psUtopiaModule;
261*53ee8cc1Swenshuai.xi (*ppInstance)->u32AppRequireModuleVersion = u32ModuleVersion;
262*53ee8cc1Swenshuai.xi return ret;
263*53ee8cc1Swenshuai.xi }
264*53ee8cc1Swenshuai.xi psUtopiaModule = psUtopiaModule->psNext;
265*53ee8cc1Swenshuai.xi }
266*53ee8cc1Swenshuai.xi
267*53ee8cc1Swenshuai.xi printf("\033[35mFunction = %s, Line = %d, UtopiaOpen[%s] strange failed\033[m\n", __PRETTY_FUNCTION__, __LINE__, moduleNames[u32ModuleID]);
268*53ee8cc1Swenshuai.xi psUtopiaModule = psUtopiaPrivate->psModuleHead;
269*53ee8cc1Swenshuai.xi while(psUtopiaModule != NULL)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi printf("having %s\n", moduleNames[psUtopiaModule->u32ModuleID]);
272*53ee8cc1Swenshuai.xi psUtopiaModule = psUtopiaModule->psNext;
273*53ee8cc1Swenshuai.xi }
274*53ee8cc1Swenshuai.xi
275*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
276*53ee8cc1Swenshuai.xi }
277*53ee8cc1Swenshuai.xi
UtopiaIoctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)278*53ee8cc1Swenshuai.xi MS_U32 UtopiaIoctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
279*53ee8cc1Swenshuai.xi {
280*53ee8cc1Swenshuai.xi UTOPIA_INSTANCE* pInstance = (UTOPIA_INSTANCE*)pInstanceTmp;
281*53ee8cc1Swenshuai.xi return ((UTOPIA_INSTANCE*)pInstance)->psModule->fpIoctl(pInstance, u32Cmd, pArgs);
282*53ee8cc1Swenshuai.xi }
283*53ee8cc1Swenshuai.xi
UtopiaClose(void * pInstantTmp)284*53ee8cc1Swenshuai.xi MS_U32 UtopiaClose(void* pInstantTmp)
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi UTOPIA_INSTANCE* pInstant = (UTOPIA_INSTANCE*)pInstantTmp;
287*53ee8cc1Swenshuai.xi
288*53ee8cc1Swenshuai.xi printf("\n[UTOPIA INFO] close moduleNames[%tu]: %s\n\n", (ptrdiff_t)pInstant->psModule->u32ModuleID, moduleNames[pInstant->psModule->u32ModuleID]);
289*53ee8cc1Swenshuai.xi
290*53ee8cc1Swenshuai.xi UTOPIA_MODULE* psUtopiaModule = psUtopiaPrivate->psModuleHead;
291*53ee8cc1Swenshuai.xi while(psUtopiaModule != NULL)
292*53ee8cc1Swenshuai.xi {
293*53ee8cc1Swenshuai.xi if(psUtopiaModule->u32ModuleID == pInstant->psModule->u32ModuleID)
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi return psUtopiaModule->fpClose(pInstant);
296*53ee8cc1Swenshuai.xi }
297*53ee8cc1Swenshuai.xi psUtopiaModule = psUtopiaModule->psNext;
298*53ee8cc1Swenshuai.xi }
299*53ee8cc1Swenshuai.xi return 0;
300*53ee8cc1Swenshuai.xi }
301*53ee8cc1Swenshuai.xi
302