FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/g23m-aci/gdd_dio/gdd_dio_pei.c @ 775:eedbf248bac0
gsm-fw/g23m-aci subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Oct 2014 01:45:14 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
774:40a721fd9854 | 775:eedbf248bac0 |
---|---|
1 /* | |
2 +------------------------------------------------------------------------------ | |
3 | File: gdd_dio_pei.c | |
4 +------------------------------------------------------------------------------ | |
5 | Copyright 2002 Texas Instruments Berlin, AG | |
6 | All rights reserved. | |
7 | | |
8 | This file is confidential and a trade secret of Texas | |
9 | Instruments Berlin, AG | |
10 | The receipt of or possession of this file does not convey | |
11 | any rights to reproduce or disclose its contents or to | |
12 | manufacture, use, or sell anything it may describe, in | |
13 | whole, or in part, without the specific written consent of | |
14 | Texas Instruments Berlin, AG. | |
15 +----------------------------------------------------------------------------- | |
16 | Purpose : This module implements the PEI interface | |
17 | for the entity gdd_dio. | |
18 +----------------------------------------------------------------------------- | |
19 */ | |
20 | |
21 #define GDD_DIO_PEI_C | |
22 | |
23 #define ENTITY_GDD_DIO | |
24 | |
25 /*==== INCLUDES =============================================================*/ | |
26 | |
27 #include "typedefs.h" /* to get standard types */ | |
28 #include "vsi.h" /* to get a lot of macros */ | |
29 #include "gsm.h" /* to get a lot of macros */ | |
30 #include "custom.h" /* to get GDD_DIO_NAME */ | |
31 #include "prim.h" /* to get the definitions of used SAP and directions */ | |
32 #include "pei.h" /* to get PEI interface */ | |
33 #include "tools.h" /* to get common tools */ | |
34 #include "mon_gdd_dio.h" /* to get mon-definitions */ | |
35 #include "gdd_dio.h" /* to get the global entity definitions */ | |
36 #include "string.h" /* for strncmp */ | |
37 | |
38 #include "gdd_dio_kerf.h" | |
39 | |
40 #include "gdd_dio_rxf.h" /* Needed for gdd_dio_rx_sig_send_data() */ | |
41 #include "gdd_dio_drxf.h" /* Needed for gdd_dio_drx_sig_receive_data */ | |
42 | |
43 | |
44 /*==== CONSTS ================================================================*/ | |
45 | |
46 /* | |
47 * Wait as long as possible. This is the time in ms that is waited for a | |
48 * message in the input queue in the active variant. | |
49 * It can be decreased by the customer. | |
50 */ | |
51 #define GDD_DIO_TIMEOUT 0xffffffff | |
52 | |
53 /*==== TYPES =================================================================*/ | |
54 | |
55 /* Entry point for testing BAT via the BAT adapter (this entity) */ | |
56 GLOBAL void gdd_dio_test_bat(const char * in_string); | |
57 | |
58 /*==== LOCALS ================================================================*/ | |
59 | |
60 static T_MONITOR gdd_dio_mon; | |
61 | |
62 /* | |
63 * Function is needed for grr_table[]. This declaration can be removed | |
64 * as soon as this function is no more called (i.e. all primitives are | |
65 * handled). | |
66 */ | |
67 static void primitive_not_supported (void *data); | |
68 | |
69 | |
70 | |
71 #ifdef _SIMULATION_ | |
72 /* Function to activate/de-activate the PSI STUB for simulation */ | |
73 void dio_il_sim_activate_psi_stub(BOOL b); | |
74 void dio_il_psi_stub_activate_batlib_test(BOOL b); | |
75 #endif /* _SIMULATION */ | |
76 | |
77 | |
78 /*==== PRIVATE FUNCTIONS ====================================================*/ | |
79 | |
80 /* | |
81 +------------------------------------------------------------------------------ | |
82 | Function : primitive_not_supported | |
83 +------------------------------------------------------------------------------ | |
84 | Description : This function handles unsupported primitives. | |
85 | | |
86 | Parameters : data - not used | |
87 | | |
88 | Return : void | |
89 +------------------------------------------------------------------------------ | |
90 */ | |
91 static void primitive_not_supported (void *data) | |
92 { | |
93 TRACE_FUNCTION ("[GDD] primitive_not_supported()"); | |
94 | |
95 PFREE (data); | |
96 } | |
97 | |
98 /* | |
99 +------------------------------------------------------------------------------ | |
100 | Function : pei_primitive | |
101 +------------------------------------------------------------------------------ | |
102 | Description : Process protocol specific primitive. | |
103 | | |
104 | Parameters : prim - pointer to the received primitive | |
105 | | |
106 | Return : PEI_OK - function succeeded | |
107 | PEI_ERROR - function failed | |
108 +------------------------------------------------------------------------------ | |
109 */ | |
110 static short pei_primitive (void * ptr) | |
111 { | |
112 T_PRIM *prim = (T_PRIM*)ptr; | |
113 | |
114 | |
115 TRACE_FUNCTION ("[GDD] pei_primitive()"); | |
116 | |
117 if (prim NEQ NULL) | |
118 { | |
119 unsigned long opc = prim->custom.opc; | |
120 unsigned short n; | |
121 const T_FUNC *table; | |
122 | |
123 /* | |
124 * This must be called for Partition Pool supervision. Will be replaced | |
125 * by another macro some time. | |
126 */ | |
127 VSI_PPM_REC (&prim->custom, __FILE__, __LINE__); | |
128 | |
129 PTRACE_IN (opc); | |
130 | |
131 switch (opc & OPC_MASK) | |
132 { | |
133 default: | |
134 table = NULL; | |
135 n = 0; | |
136 break; | |
137 } | |
138 | |
139 if (table != NULL) | |
140 { | |
141 if ((opc & PRM_MASK) < n) | |
142 { | |
143 table += opc & PRM_MASK; | |
144 #ifdef PALLOC_TRANSITION | |
145 P_SDU(prim) = table->soff ? | |
146 (T_sdu*) (((char*)&prim->data) + table->soff) : 0; | |
147 #ifndef NO_COPY_ROUTING | |
148 P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER); | |
149 #endif /* #ifndef NO_COPY_ROUTING */ | |
150 #endif /* #ifdef PALLOC_TRANSITION */ | |
151 JUMP (table->func) (P2D(prim)); | |
152 } | |
153 else | |
154 { | |
155 primitive_not_supported (P2D(prim)); | |
156 } | |
157 return PEI_OK; | |
158 } | |
159 | |
160 /* | |
161 * primitive is not a GSM primitive - forward it to the environment | |
162 */ | |
163 if (opc & SYS_MASK) | |
164 vsi_c_primitive (VSI_CALLER prim); | |
165 else | |
166 { | |
167 PFREE (P2D(prim)); | |
168 return PEI_ERROR; | |
169 } | |
170 } | |
171 return PEI_OK; | |
172 } | |
173 | |
174 /* | |
175 +------------------------------------------------------------------------------ | |
176 | Function : pei_init | |
177 +------------------------------------------------------------------------------ | |
178 | Description : Initialize Protocol Stack Entity | |
179 | | |
180 | Parameters : handle - task handle | |
181 | | |
182 | Return : PEI_OK - entity initialised | |
183 | PEI_ERROR - entity not (yet) initialised | |
184 +------------------------------------------------------------------------------ | |
185 */ | |
186 static short pei_init (T_HANDLE handle) | |
187 { | |
188 TRACE_FUNCTION ("[GDD] pei_init()"); | |
189 | |
190 /* Initialize task handle */ | |
191 GDD_DIO_handle = handle; | |
192 | |
193 /* | |
194 * Open communication channels | |
195 */ | |
196 if (hCommGDD_DIO < VSI_OK) | |
197 { | |
198 if ((hCommGDD_DIO = vsi_c_open (VSI_CALLER GDD_DIO_NAME)) < VSI_OK) | |
199 return PEI_ERROR; | |
200 } | |
201 /* | |
202 * Initialize entity data (call init function of every service) | |
203 */ | |
204 gdd_dio_ker_init(); | |
205 | |
206 return (PEI_OK); | |
207 } | |
208 | |
209 /* | |
210 +------------------------------------------------------------------------------ | |
211 | Function : pei_timeout | |
212 +------------------------------------------------------------------------------ | |
213 | Description : Process timeout. | |
214 | | |
215 | Parameters : index - timer index | |
216 | | |
217 | Return : PEI_OK - timeout processed | |
218 | PEI_ERROR - timeout not processed | |
219 +------------------------------------------------------------------------------ | |
220 */ | |
221 static short pei_timeout (unsigned short index) | |
222 { | |
223 TRACE_FUNCTION ("[GDD] pei_timeout()"); | |
224 | |
225 /* Process timeout */ | |
226 switch (index) | |
227 { | |
228 case 0: | |
229 /* Call of timeout routine */ | |
230 break; | |
231 default: | |
232 TRACE_ERROR("[GDD] Unknown Timeout()"); | |
233 return PEI_ERROR; | |
234 } | |
235 | |
236 return PEI_OK; | |
237 } | |
238 | |
239 /* | |
240 +------------------------------------------------------------------------------ | |
241 | Function : pei_signal | |
242 +------------------------------------------------------------------------------ | |
243 | Description : Process signal. | |
244 | | |
245 | Parameters : opc - signal operation code | |
246 | data - pointer to primitive | |
247 | | |
248 | Return : PEI_OK - signal processed | |
249 | PEI_ERROR - signal not processed | |
250 +------------------------------------------------------------------------------ | |
251 */ | |
252 static short pei_signal (unsigned long opc, void* data) | |
253 { | |
254 #ifdef GDD_MAKE_DTX_CONTEXT_SWITCH | |
255 U32 con_handle = opc & GDD_DIO_SIGNAL_CON_HANDLE_MASK; | |
256 #else /* GDD_MAKE_DTX_CONTEXT_SWITCH */ | |
257 U32 con_handle = opc; | |
258 #endif /* GDD_MAKE_DTX_CONTEXT_SWITCH */ | |
259 | |
260 TRACE_FUNCTION ("[GDD] pei_signal()"); | |
261 | |
262 #ifdef GDD_MAKE_DTX_CONTEXT_SWITCH | |
263 /* Process signal */ | |
264 switch (opc & GDD_DIO_SIGNAL_MASK) | |
265 { | |
266 case GDD_DIO_SIGNAL_SEND_DATA: | |
267 gdd_dio_rx_sig_send_data(con_handle, (T_dio_buffer *)data); | |
268 break; | |
269 | |
270 case GDD_DIO_SIGNAL_RECEIVE_DATA: | |
271 gdd_dio_drx_sig_receive_data(con_handle, (T_dio_buffer *)data); | |
272 break; | |
273 | |
274 default: | |
275 TRACE_ERROR("[GDD] Unknown Signal OPC"); | |
276 return PEI_ERROR; | |
277 } | |
278 #else /* GDD_MAKE_DTX_CONTEXT_SWITCH */ | |
279 /* If no context switch is done, there is only one signal to be handled. */ | |
280 gdd_dio_drx_sig_receive_data(con_handle, (T_dio_buffer *)data); | |
281 #endif /* GDD_MAKE_DTX_CONTEXT_SWITCH */ | |
282 | |
283 return PEI_OK; | |
284 } | |
285 | |
286 /* | |
287 +------------------------------------------------------------------------------ | |
288 | Function : pei_exit | |
289 +------------------------------------------------------------------------------ | |
290 | Description : Close Resources and terminate. | |
291 | | |
292 | Parameters : - | |
293 | | |
294 | Return : PEI_OK - exit sucessful | |
295 +------------------------------------------------------------------------------ | |
296 */ | |
297 static short pei_exit (void) | |
298 { | |
299 TRACE_FUNCTION ("[GDD] pei_exit"); | |
300 | |
301 /* | |
302 * Close communication channels | |
303 */ | |
304 vsi_c_close (VSI_CALLER hCommGDD_DIO); | |
305 hCommGDD_DIO = VSI_ERROR; | |
306 | |
307 | |
308 return PEI_OK; | |
309 } | |
310 | |
311 | |
312 /* | |
313 +------------------------------------------------------------------------------ | |
314 | Function : pei_config | |
315 +------------------------------------------------------------------------------ | |
316 | Description : Dynamic Configuration. | |
317 | | |
318 | Parameters : in_string - configuration string | |
319 | | |
320 | Return : PEI_OK - sucessful | |
321 | PEI_ERROR - not successful | |
322 +------------------------------------------------------------------------------ | |
323 */ | |
324 static short pei_config (char *in_string) | |
325 { | |
326 TRACE_FUNCTION ("[GDD] pei_config()"); | |
327 TRACE_FUNCTION (in_string); | |
328 | |
329 if ( ConfigTimer ( VSI_CALLER in_string, NULL ) == VSI_OK ) | |
330 return PEI_OK; | |
331 | |
332 /* | |
333 * further dynamic configuration | |
334 */ | |
335 #ifdef _SIMULATION_ | |
336 if (!strncmp("sizeof(T_GDD_DIO_CON_DATA)",in_string,7)) | |
337 { | |
338 TRACE_EVENT_P1("[GDD] sizeof(T_GDD_DIO_CON_DATA) = %d", sizeof(T_GDD_DIO_CON_DATA)); | |
339 } | |
340 else if (!strncmp("PSI STUB ON",in_string, 11)) | |
341 { | |
342 TRACE_EVENT("[GDD] Activating the PSI STUB"); | |
343 dio_il_sim_activate_psi_stub (TRUE); | |
344 } | |
345 else if (!strncmp("PSI STUB OFF",in_string, 12)) | |
346 { | |
347 TRACE_EVENT("[GDD] Deactivating the PSI STUB"); | |
348 dio_il_sim_activate_psi_stub (FALSE); | |
349 } | |
350 else if (!strncmp("BATLIB TEST ON",in_string, 14)) | |
351 { | |
352 TRACE_EVENT("[GDD] Activating BATlib testing in PSI stub"); | |
353 dio_il_psi_stub_activate_batlib_test (TRUE); | |
354 } | |
355 else if (!strncmp("BATLIB TEST OFF",in_string, 15)) | |
356 { | |
357 TRACE_EVENT("[GDD] Deactivating BATlib testing in PSI stub"); | |
358 dio_il_psi_stub_activate_batlib_test (FALSE); | |
359 } | |
360 | |
361 #endif /* _SIMULATION_ */ | |
362 | |
363 return PEI_OK; | |
364 } | |
365 | |
366 /* | |
367 +------------------------------------------------------------------------------ | |
368 | Function : pei_monitor | |
369 +------------------------------------------------------------------------------ | |
370 | Description : Monitoring of physical Parameters. | |
371 | | |
372 | Parameters : out_monitor - return the address of the data to be monitored | |
373 | | |
374 | Return : PEI_OK - sucessful (address in out_monitor is valid) | |
375 | PEI_ERROR - not successful | |
376 +------------------------------------------------------------------------------ | |
377 */ | |
378 static short pei_monitor (void ** out_monitor) | |
379 { | |
380 TRACE_FUNCTION ("[GDD] pei_monitor()"); | |
381 | |
382 /* | |
383 * Version = "0.S" (S = Step). | |
384 */ | |
385 gdd_dio_mon.version = "gdd_dio 0.1"; | |
386 *out_monitor = &gdd_dio_mon; | |
387 | |
388 return PEI_OK; | |
389 } | |
390 | |
391 /*==== PUBLIC FUNCTIONS =====================================================*/ | |
392 | |
393 /* | |
394 +------------------------------------------------------------------------------ | |
395 | Function : pei_create | |
396 +------------------------------------------------------------------------------ | |
397 | Description : Create the Protocol Stack Entity. | |
398 | | |
399 | Parameters : info - Pointer to the structure of entity parameters | |
400 | | |
401 | Return : PEI_OK - entity created successfully | |
402 | | |
403 +------------------------------------------------------------------------------ | |
404 */ | |
405 short gdd_dio_pei_create (T_PEI_INFO **info) | |
406 { | |
407 static T_PEI_INFO pei_info = | |
408 { | |
409 GDD_DIO_NAME, /* name */ | |
410 { /* pei-table */ | |
411 pei_init, | |
412 #ifdef _SIMULATION_ | |
413 pei_exit, | |
414 #else | |
415 NULL, | |
416 #endif | |
417 pei_primitive, | |
418 pei_timeout, | |
419 pei_signal, | |
420 NULL, /* No pei_run function */ | |
421 pei_config, | |
422 pei_monitor | |
423 }, | |
424 /*1024,*/ /* stack size */ | |
425 2048, /* :TODO: check why we need to increase the stack size */ | |
426 10, /* queue entries */ | |
427 100, /* priority (1->low, 255->high) */ | |
428 0, /* number of timers */ | |
429 0x03 /* flags: bit 0 active(0) body/passive(1) */ | |
430 }; /* bit 1 com by copy(0)/reference(1) */ | |
431 | |
432 /* | |
433 * Export startup configuration data | |
434 */ | |
435 *info = &pei_info; | |
436 | |
437 return PEI_OK; | |
438 } | |
439 | |
440 /*==== END OF FILE ==========================================================*/ |