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