xref: /utopia/UTPA2-700.0.x/modules/msos/utopia_core/ecos/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 
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