xref: /utopia/UTPA2-700.0.x/modules/msos/utopia_core/nos/utopia.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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