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