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
10 //Global Variable===================================================
11 UTOPIA_PRIVATE* psUtopiaPrivate;
12
13 char moduleNames[][40] = {
14 #define PREFIX(MODULE) "MODULE_"#MODULE,
15 INCLUDED_MODULE
16 #undef PREFIX
17 };
18
19 char rpoolNames[][40] = {
20 #define PREFIX(MODULE) "RPOOL_"#MODULE,
21 INCLUDED_MODULE
22 #undef PREFIX
23 };
24
25 char ResourceNames[][40] = {
26 #define PREFIX(MODULE) "RESOURCE_"#MODULE,
27 INCLUDED_MODULE
28 #undef PREFIX
29 };
30
31 void BDMARegisterToUtopia(FUtopiaOpen ModuleType);
32 void CPURegisterToUtopia(FUtopiaOpen ModuleType);
33 void FLASHRegisterToUtopia(FUtopiaOpen ModuleType);
34 void IRRegisterToUtopia(FUtopiaOpen ModuleType);
35 void MBXRegisterToUtopia(FUtopiaOpen ModuleType);
36 void MVOPRegisterToUtopia(FUtopiaOpen ModuleType);
37 void MSPIRegisterToUtopia(FUtopiaOpen ModuleType);
38 void PWMRegisterToUtopia(FUtopiaOpen ModuleType);
39 void PWSRegisterToUtopia(FUtopiaOpen ModuleType);
40 void RTCRegisterToUtopia(FUtopiaOpen ModuleType);
41 #ifdef CONFIG_MSTAR_UTPA2K_SAR_ENABLE
42 void SARRegisterToUtopia(FUtopiaOpen ModuleType);
43 #endif
44 void ACERegisterToUtopia(FUtopiaOpen ModuleType);
45 void DLCRegisterToUtopia(FUtopiaOpen ModuleType);
46 void DMXRegisterToUtopia(FUtopiaOpen ModuleType);
47 void GFXRegisterToUtopia(FUtopiaOpen ModuleType);
48 void GOPRegisterToUtopia(FUtopiaOpen ModuleType);
49 void PNLRegisterToUtopia(FUtopiaOpen ModuleType);
50 void XCRegisterToUtopia(FUtopiaOpen ModuleType);
51 void CECRegisterToUtopia(FUtopiaOpen ModuleType);
52
53 void HDMIRXRegisterToUtopia(FUtopiaOpen ModuleType);
54 void PQRegisterToUtopia(FUtopiaOpen ModuleType);
55
56 void VDEC_EXRegisterToUtopia(FUtopiaOpen ModuleType);
57 void SYSRegisterToUtopia(FUtopiaOpen ModuleType);
58 void UARTRegisterToUtopia(FUtopiaOpen ModuleType);
59 void TVENCODERRegisterToUtopia(FUtopiaOpen ModuleType);
60 #ifdef CONFIG_API_JPEG_EX
61 void JPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType);
62 #endif
63 #ifdef CONFIG_API_NJPEG_EX
64 void NJPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType);
65 #endif
66 void GPDRegisterToUtopia(FUtopiaOpen ModuleType);
67
68 void DACRegisterToUtopia(void);
69 void SEMRegisterToUtopia(void);
70 void DSCMBRegisterToUtopia(void);
71 void AESDMARegisterToUtopia(FUtopiaOpen ModuleType);
72 void HDMITXRegisterToUtopia(FUtopiaOpen ModuleType);
73 void CARegisterToUtopia(void);
74 void CIPHERRegisterToUtopia(void);
75
76 void MIURegisterToUtopia(FUtopiaOpen ModuleType);
77
UtopiaInit()78 MS_U32 UtopiaInit()
79 {
80 MS_U32 u32Ret = 0;
81 printf("\033[35m[eCos] UtopiaInit\033[m\n\n");
82
83 psUtopiaPrivate = (UTOPIA_PRIVATE*)malloc(sizeof(UTOPIA_PRIVATE));
84 memset(psUtopiaPrivate, 0, sizeof(UTOPIA_PRIVATE));
85 psUtopiaPrivate->u32MutexID = MsOS_CreateMutex(E_MSOS_FIFO, "UtopiaPrivateMutex", MSOS_PROCESS_SHARED);
86
87 MsOS_ObtainMutex(psUtopiaPrivate->u32MutexID, MSOS_WAIT_FOREVER);
88
89 /*
90 * to avoid weak attribute malfunction in static lib,
91 * we explicitly call needed functions
92 */
93 UTOPIARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_UTOPIA_FULL);
94 BDMARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_BDMA_FULL);
95
96 CPURegisterToUtopia((FUtopiaOpen)MODULE_TYPE_CPU_FULL);
97 FLASHRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_FLASH_FULL);
98 IRRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_IR_FULL);
99 MBXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MBX_FULL);
100 MVOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MVOP_FULL);
101 MSPIRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MSPI_FULL);
102 PWMRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PWM_FULL);
103 PWSRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PWS_FULL);
104 RTCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_RTC_FULL);
105 #ifdef CONFIG_MSTAR_UTPA2K_SAR_ENABLE
106 SARRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SAR_FULL);
107 #endif
108 CECRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_CEC_FULL);
109
110 ACERegisterToUtopia((FUtopiaOpen)MODULE_TYPE_ACE_FULL);
111 DLCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_DLC_FULL);
112 DMXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_DMX_FULL);
113 GFXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GFX_FULL);
114 GOPRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GOP_FULL);
115 PNLRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_PNL_FULL);
116 XCRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_FULL);
117
118 HDMIRXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_FULL);
119 PQRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_XC_FULL);
120
121 VDEC_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_VDEC_EX_FULL);
122 SYSRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_SYS_FULL);
123 UARTRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_UART_FULL);
124 TVENCODERRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_TVENCODER_FULL);
125 #ifdef CONFIG_API_JPEG_EX
126 JPEG_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_NJPEG_EX_FULL);
127 #endif
128 #ifdef CONFIG_API_NJPEG_EX
129 NJPEG_EXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_NJPEG_EX_FULL);
130 #endif
131 GPDRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_GPD_FULL);
132
133 DACRegisterToUtopia();
134 SEMRegisterToUtopia();
135 DSCMBRegisterToUtopia();
136 AESDMARegisterToUtopia((FUtopiaOpen)MODULE_TYPE_AESDMA_FULL);
137 HDMITXRegisterToUtopia((FUtopiaOpen)MODULE_TYPE_HDMITX_FULL);
138 CARegisterToUtopia();
139 CIPHERRegisterToUtopia();
140
141 MIURegisterToUtopia((FUtopiaOpen)MODULE_TYPE_MIU_FULL);
142
143 DVBSRegisterToUtopia();
144 DVBCRegisterToUtopia();
145
146 MsOS_ReleaseMutex(psUtopiaPrivate->u32MutexID);
147
148 return u32Ret;
149 }
150
UtopiaOpen(MS_U32 u32ModuleID,void ** ppInstanceTmp,MS_U32 u32ModuleVersion,const void * const pAttribute)151 MS_U32 UtopiaOpen(MS_U32 u32ModuleID, void** ppInstanceTmp
152 , MS_U32 u32ModuleVersion, const void* const pAttribute)
153 {
154 UTOPIA_MODULE* psUtopiaModule = psUtopiaPrivate->psModuleHead;
155 UTOPIA_INSTANCE** ppInstance = (UTOPIA_INSTANCE**)ppInstanceTmp;
156
157 while(psUtopiaModule != NULL)
158 {
159 if(psUtopiaModule->u32ModuleID == u32ModuleID)
160 {
161 int ret = psUtopiaModule->fpOpen((void**)ppInstance, pAttribute);
162
163 if(ret)
164 {
165 printf("[utopia error] fail to create instance\n");
166 return ret;
167 }
168
169 (*ppInstance)->psModule = psUtopiaModule;
170 (*ppInstance)->u32AppRequireModuleVersion = u32ModuleVersion;
171 return ret;
172 }
173 psUtopiaModule = psUtopiaModule->psNext;
174 }
175
176 printf("\033[35mFunction = %s, Line = %d, UtopiaOpen strange failed\033[m\n", __FUNCTION__, __LINE__);
177
178 return UTOPIA_STATUS_FAIL;
179 }
180
UtopiaIoctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)181 MS_U32 UtopiaIoctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
182 {
183 UTOPIA_INSTANCE* pInstance = (UTOPIA_INSTANCE*)pInstanceTmp;
184 /* check param. */
185 if (pInstance == NULL)
186 {
187 printf("[utopia error] instance pointer should not be null\n");
188 return UTOPIA_STATUS_FAIL;
189 }
190
191 return TO_INSTANCE_PTR(pInstance)->psModule->fpIoctl(pInstance, u32Cmd, pArgs);
192 }
193
UtopiaClose(void * pInstantTmp)194 MS_U32 UtopiaClose(void* pInstantTmp)
195 {
196 UTOPIA_INSTANCE* pInstant = (UTOPIA_INSTANCE*)pInstantTmp;
197
198 printf("\n[utopia info] close module id: %s\n",
199 moduleNames[pInstant->psModule->u32ModuleID]);
200
201 UTOPIA_MODULE* psUtopiaModule = psUtopiaPrivate->psModuleHead;
202 while(psUtopiaModule != NULL)
203 {
204 if(psUtopiaModule->u32ModuleID == pInstant->psModule->u32ModuleID)
205 {
206 return psUtopiaModule->fpClose(pInstant);
207 }
208 psUtopiaModule = psUtopiaModule->psNext;
209 }
210 return 0;
211 }
212
213