FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/gpf/tst_pei/tst_pei.c @ 322:5d1e22505446
GPF: tif library sources imported from Leonardo version
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 13 Apr 2014 07:21:57 +0000 |
parents | |
children | 7228920a0834 |
comparison
equal
deleted
inserted
replaced
321:439afc1139b2 | 322:5d1e22505446 |
---|---|
1 /* | |
2 +------------------------------------------------------------------------------ | |
3 | File: tst_pei.c | |
4 +------------------------------------------------------------------------------ | |
5 | Copyright 2004 Texas Instruments Deutschland, 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 Deutschland, AG. | |
15 +----------------------------------------------------------------------------- | |
16 | Purpose : This Modul contains the PEI interface of TST | |
17 +----------------------------------------------------------------------------- | |
18 */ | |
19 | |
20 #ifndef __TST_PEI_C__ | |
21 #define __TST_PEI_C__ | |
22 #endif | |
23 | |
24 #define ENTITY_TST | |
25 | |
26 /*==== INCLUDES ===================================================*/ | |
27 | |
28 #include <string.h> | |
29 #include <stdio.h> | |
30 #include <stdlib.h> | |
31 | |
32 #ifdef _TOOLS_ | |
33 #include "frame_const.h" | |
34 #include <stdlib.h> | |
35 #endif /* _TOOLS_ */ | |
36 | |
37 #ifndef _TARGET_ | |
38 #include "printtofile.h" | |
39 #endif | |
40 | |
41 #include "typedefs.h" | |
42 #include "vsi.h" | |
43 #include "frame.h" | |
44 #include "pei.h" | |
45 #include "os.h" | |
46 #include "tools.h" | |
47 #include "gdi.h" | |
48 #include "os.h" | |
49 #include "frm_defs.h" | |
50 #include "frm_types.h" | |
51 #include "frm_glob.h" | |
52 #include "route.h" | |
53 #include "drvconf.h" | |
54 #include "tstdriver.h" | |
55 #include "tstheader.h" | |
56 #include "tst_mux.h" | |
57 #include "pcon.h" | |
58 | |
59 #ifdef CTB | |
60 #include "tst_primitives.h" | |
61 #endif | |
62 | |
63 #ifdef _PSOS_ | |
64 #include "pna.h" | |
65 #endif | |
66 | |
67 #ifdef _FF_RV_EXIST_ | |
68 #include "ffs/ffs_api.h" | |
69 #endif | |
70 | |
71 /*==== TYPES ======================================================*/ | |
72 | |
73 #undef VSI_CALLER | |
74 #ifdef _TOOLS_ | |
75 #define VSI_CALLER TST_Handle, | |
76 #else | |
77 #define VSI_CALLER e_running[os_MyHandle()], | |
78 #endif | |
79 | |
80 /*==== CONSTANTS ==================================================*/ | |
81 | |
82 #ifdef _VXWORKS_ | |
83 #define TST_STACKSIZE 8192 | |
84 #define TST_PRIORITY 190 /* priority (1->high, 255->low) */ | |
85 #else | |
86 #ifdef _TOOLS_ | |
87 #define TST_STACKSIZE 4096 | |
88 #define TST_PRIORITY 15 | |
89 #define TST_SND_PRIORITY 15 /* priority (1->low, 255->high) */ | |
90 #define TST_RCV_PRIORITY 15 /* priority (1->low, 255->high) */ | |
91 #else | |
92 #define TST_STACKSIZE 1024 | |
93 #define TST_PRIORITY 2 | |
94 #define TST_SND_PRIORITY 6 /* priority (1->low, 255->high) */ | |
95 #define TST_RCV_PRIORITY 7 /* priority (1->low, 255->high) */ | |
96 #endif | |
97 #endif | |
98 | |
99 #ifdef _TOOLS_ | |
100 #define TST_TIMERS 2 | |
101 #define GET_STACK_TIME_TIMER_INDEX 0 | |
102 #define GET_STACK_TIME_TIMER_DURATION 60000 | |
103 #define TST_SYNC_TIMER_INDEX 1 | |
104 #define TST_SYNC_TIMER_DURATION 2000 | |
105 #else | |
106 #define TST_TIMERS 0 | |
107 #endif | |
108 | |
109 #ifdef _FF_RV_EXIST_ | |
110 #define TRACEMASKFILE "/var/dbg/tracemask" | |
111 #endif | |
112 | |
113 #define DRV_CALLBACK_OPC 0 | |
114 | |
115 #ifdef _TOOLS_ | |
116 #define TR_RCV_BUF_SIZE (MAX_PRIM_PARTITION_SIZE) | |
117 #define TR_MAX_IND (TR_RCV_BUF_SIZE-1) | |
118 USHORT MaxEntities = MAX_ENTITIES; | |
119 #endif /* _TOOLS_ */ | |
120 | |
121 /*==== EXTERNALS ==================================================*/ | |
122 | |
123 #ifndef _TOOLS_ | |
124 extern const T_PCON_PROPERTIES *pcon; | |
125 extern const USHORT TST_SndQueueEntries; | |
126 extern const USHORT TST_RcvQueueEntries; | |
127 extern const USHORT TST_SndStacksize; | |
128 extern const USHORT TST_RcvStacksize; | |
129 extern UBYTE FrameEnv; | |
130 #endif | |
131 | |
132 #ifdef _TOOLS_ | |
133 __declspec (dllimport) UBYTE SuppressOK; | |
134 #else | |
135 extern char *str2ind_version; | |
136 extern UBYTE SuppressOK; | |
137 #endif | |
138 | |
139 #ifdef CTB | |
140 static T_HANDLE hCommIDLE = VSI_ERROR; | |
141 extern short idle_pei_create (T_PEI_INFO const ** info); | |
142 #endif | |
143 | |
144 #ifdef _FF_RV_EXIST_ | |
145 extern char TaskName[]; | |
146 #endif | |
147 | |
148 /*==== VARIABLES ==================================================*/ | |
149 | |
150 #ifndef RUN_INT_RAM | |
151 | |
152 T_HANDLE TST_Handle; | |
153 T_HANDLE RCV_Handle; | |
154 T_HANDLE TIF_Handle; | |
155 | |
156 UBYTE TST_DrvState = TST_DRV_DISCONNECTED; | |
157 static char const *ok_string = "OK"; | |
158 static UBYTE frmenv; | |
159 | |
160 #ifdef _TOOLS_ | |
161 ULONG TR_RcvBufferSize = TR_RCV_BUF_SIZE; | |
162 ULONG TR_MaxInd = TR_MAX_IND; | |
163 int tst_syncronized = 0; | |
164 int tst_message_received = 0; | |
165 int tst_sync_timeout_cnt = 0; | |
166 int tst_max_sync_timeout = 0; | |
167 int tst_sync_mode = 0; | |
168 int tst_sync_sucess = 1; | |
169 int tst_sync_started = 0; | |
170 int tst_status_received = 0; | |
171 T_HANDLE tst_sync_req_handle = VSI_ERROR; | |
172 char sync_req_name[RESOURCE_NAMELEN]; | |
173 char sync_req_time[16]; | |
174 | |
175 #endif /* _TOOLS_ */ | |
176 | |
177 GLOBAL USHORT tst_task_priority = TST_PRIORITY; | |
178 GLOBAL ULONG tst_task_stack_size = TST_STACKSIZE; | |
179 | |
180 extern SHORT tst_pei_primitive (void *primitive); | |
181 | |
182 #endif /* RUN_INT_RAM */ | |
183 | |
184 #ifdef RUN_INT_RAM | |
185 | |
186 extern T_HANDLE TST_Handle; | |
187 extern T_HANDLE RCV_Handle; | |
188 extern T_HANDLE TIF_Handle; | |
189 extern UBYTE TST_DrvState; | |
190 | |
191 #endif | |
192 | |
193 #ifdef CTB | |
194 static char ctb_rcv[4]; | |
195 static U32 ctb_remaining_tick_time=0; | |
196 BOOL ctb_tick_enabled = FALSE; | |
197 BOOL ctb_sent_to_tap = FALSE; | |
198 T_HANDLE idle_handle; | |
199 #endif | |
200 | |
201 /*==== FUNCTIONS ==================================================*/ | |
202 | |
203 #ifndef RUN_FLASH | |
204 /* | |
205 +--------------------------------------------------------------------+ | |
206 | PROJECT : GSM-GPF (8415) MODULE : TST_PEI | | |
207 | STATE : code ROUTINE : pei_primitive | | |
208 +--------------------------------------------------------------------+ | |
209 */ | |
210 | |
211 SHORT tst_pei_primitive (void *primitive) | |
212 { | |
213 T_PRIM_HEADER *prim = (T_PRIM_HEADER*)primitive; | |
214 #ifndef _TOOLS_ | |
215 T_VOID_STRUCT *prim_ptr = NULL; | |
216 #endif | |
217 SHORT ret = PEI_OK; | |
218 | |
219 #ifdef _TOOLS_ | |
220 if ( ((SAP_NR(prim->opc)==TRACE_SAP) || (prim->opc==TRACE_OPC)) && (P_SHO(prim)!=0) ) | |
221 { | |
222 prim->opc = SYS_MASK; | |
223 } | |
224 #endif | |
225 | |
226 if ( (SAP_NR(prim->opc)!=TRACE_SAP) && (prim->opc!=TRACE_OPC) && !(prim->opc & SYS_MASK) ) | |
227 { | |
228 #ifndef _TOOLS_ | |
229 prim_ptr = (T_VOID_STRUCT*)(((T_PRIM_X*)prim)->prim_ptr); | |
230 #endif | |
231 VSI_PPM_RCV(prim_ptr); | |
232 PTRACE_OUT(prim->opc ); | |
233 } | |
234 | |
235 if ( TST_DrvState == TST_DRV_CONNECTED ) | |
236 { | |
237 if ( vsi_d_write ( TST_Handle, TIF_Handle, primitive, prim->len ) != VSI_OK ) | |
238 ret = PEI_ERROR; | |
239 #ifdef _TOOLS_ | |
240 vsi_t_sleep(TST_Handle,10); | |
241 #endif | |
242 } | |
243 | |
244 #ifndef _TOOLS_ | |
245 if ( prim_ptr != NULL ) | |
246 { | |
247 FREE(P2D(prim_ptr)); | |
248 } | |
249 #endif | |
250 vsi_trc_free (0, (T_VOID_STRUCT**)&prim); | |
251 | |
252 return ( ret ); | |
253 } | |
254 #endif | |
255 | |
256 #ifndef RUN_INT_RAM | |
257 /* | |
258 +--------------------------------------------------------------------+ | |
259 | PROJECT : GSM-GPF (8415) MODULE : TST_PEI | | |
260 | STATE : code ROUTINE : pei_init | | |
261 +--------------------------------------------------------------------+ | |
262 */ | |
263 | |
264 LOCAL SHORT pei_init ( T_HANDLE handle ) | |
265 { | |
266 #ifdef _TOOLS_ | |
267 T_HANDLE h_pco; | |
268 #endif | |
269 | |
270 #ifdef _FF_RV_EXIST_ | |
271 T_HANDLE entityTraceMask; | |
272 ULONG actual; | |
273 T_FFS_FD fd; | |
274 T_RV_RETURN retPath; | |
275 BOOL gotAll = TRUE; | |
276 #endif | |
277 | |
278 TST_Handle = handle; | |
279 #ifdef _TOOLS_ | |
280 while (vsi_c_open (0, FRM_RCV_NAME) < VSI_OK) | |
281 { | |
282 vsi_t_sleep(0,100); | |
283 } | |
284 frmenv = (UBYTE) pf_get_frameenv (); | |
285 if ( os_OpenQueue (0, FRM_PCO_NAME, &h_pco) == OS_OK || | |
286 os_create_extq (FRM_PCO_NAME, &h_pco) == OS_OK) | |
287 { | |
288 vsi_o_set_htrace (h_pco); | |
289 #ifdef _DEBUG | |
290 fprintf (stdout,"TST: %s commH set to %d\n", FRM_PCO_NAME,h_pco); | |
291 #endif | |
292 } | |
293 vsi_t_start ( handle, GET_STACK_TIME_TIMER_INDEX, GET_STACK_TIME_TIMER_DURATION ); | |
294 #else | |
295 if ( vsi_c_open (TST_Handle, FRM_RCV_NAME) < VSI_OK ) | |
296 return PEI_ERROR; | |
297 RCV_Handle = vsi_e_handle ( TST_Handle, FRM_RCV_NAME ); | |
298 frmenv = FrameEnv; | |
299 #endif | |
300 #ifndef _TARGET_ | |
301 initPrintToFile(); | |
302 #endif | |
303 if ( vsi_d_init ( TST_Handle ) != VSI_OK ) | |
304 { | |
305 #ifndef _TARGET_ | |
306 printf("SYSTEM ERROR: Driver initialization failed\n"); | |
307 vsi_o_assert ( TST_Handle, OS_SYST_ERR, __FILE__, __LINE__, "SYSTEM ERROR: Testinterface driver initialization failed" ); | |
308 #else | |
309 ; | |
310 #endif | |
311 } | |
312 TIF_Handle = vsi_d_open ( TST_Handle, (char*)TIF_NAME ); | |
313 vsi_d_setsignal ( TST_Handle, 0, DRV_SIGTYPE_READ|DRV_SIGTYPE_CONNECT|DRV_SIGTYPE_DISCONNECT); | |
314 vsi_d_setconfig ( TST_Handle, 0, NULL ); | |
315 vsi_trcsuspend ( TST_Handle, TST_Handle, OS_NO_SUSPEND ); | |
316 SuppressOK = FALSE; | |
317 tst_mux_init(); | |
318 | |
319 #ifdef _FF_RV_EXIST_ | |
320 fd = ffs_open(TRACEMASKFILE, FFS_O_RDWR); | |
321 if (fd < 0) | |
322 { | |
323 // could not open nor create /var/dbg/tracemask warning | |
324 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_init: no trace mask in FFS"); | |
325 } | |
326 else | |
327 { | |
328 InitializeTrace(); | |
329 TraceMask[0] = 0; | |
330 TraceMask[0] |= TC_SYSTEM|TC_ERROR; | |
331 for (entityTraceMask = 0; entityTraceMask < (MaxEntities + 1); entityTraceMask++) | |
332 { | |
333 actual = TraceMask[entityTraceMask]; | |
334 if (ffs_read(fd, (void*)&TraceMask[entityTraceMask], sizeof(ULONG) ) != sizeof(ULONG) ) | |
335 { | |
336 gotAll = FALSE; | |
337 } | |
338 else | |
339 { | |
340 if (entityTraceMask == 0) // first element | |
341 { | |
342 TraceMask[0] = 0; | |
343 TraceMask[0] |= TC_SYSTEM|TC_ERROR; | |
344 } | |
345 if (actual != TraceMask[entityTraceMask]) | |
346 { | |
347 // not the default trace mask, generate warning | |
348 if ( vsi_e_name ( 0, entityTraceMask, TaskName ) == VSI_OK ) | |
349 { | |
350 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_init: FFS trace mask gave 0x%08x for %s (default 0x%08x)", TraceMask[entityTraceMask], TaskName, actual); | |
351 } | |
352 } | |
353 } | |
354 } | |
355 } | |
356 ffs_close(fd); | |
357 if (!gotAll) | |
358 { | |
359 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_init: some trace masks can't be read from FFS"); | |
360 } | |
361 #endif | |
362 | |
363 return PEI_OK; | |
364 } | |
365 #endif | |
366 | |
367 | |
368 | |
369 #ifndef RUN_INT_RAM | |
370 /* | |
371 +--------------------------------------------------------------------+ | |
372 | PROJECT : GSM-GPF (8415) MODULE : TST_PEI | | |
373 | STATE : code ROUTINE : pei_exit | | |
374 +--------------------------------------------------------------------+ | |
375 */ | |
376 | |
377 static SHORT pei_exit (void) | |
378 { | |
379 #ifdef _TOOLS_ | |
380 T_HANDLE rcvh=vsi_p_handle (0, FRM_RCV_NAME); | |
381 if (rcvh > VSI_OK) | |
382 { | |
383 /* exit RCV process */ | |
384 vsi_p_exit ( TST_Handle, vsi_p_handle (0, FRM_RCV_NAME)); | |
385 } | |
386 /* exit all drivers */ | |
387 vsi_d_exit ( TST_Handle, 0); | |
388 #endif /* _TOOLS_ */ | |
389 | |
390 return PEI_OK; | |
391 } | |
392 #endif | |
393 | |
394 #ifndef RUN_INT_RAM | |
395 #ifdef _TOOLS_ | |
396 /* | |
397 +--------------------------------------------------------------------+ | |
398 | PROJECT : GSM-GPF (8415) MODULE : TST_PEI | | |
399 | STATE : code ROUTINE : pei_timeout | | |
400 +--------------------------------------------------------------------+ | |
401 */ | |
402 | |
403 LOCAL SHORT pei_timeout (USHORT index) | |
404 { | |
405 | |
406 switch ( index ) | |
407 { | |
408 case GET_STACK_TIME_TIMER_INDEX: | |
409 #if 0 | |
410 if ( tst_message_received == 1 ) | |
411 { | |
412 tst_drv_write ( NO_TASK, SYS_MASK, FRM_TST_NAME, (char*)SYSPRIM_GET_STACK_TIME ); | |
413 } | |
414 vsi_t_start ( VSI_CALLER GET_STACK_TIME_TIMER_INDEX, GET_STACK_TIME_TIMER_DURATION ); | |
415 #endif | |
416 break; | |
417 case TST_SYNC_TIMER_INDEX: | |
418 if ( tst_sync_timeout_cnt++ >= tst_max_sync_timeout-1 ) | |
419 { | |
420 T_HANDLE tif_handle; | |
421 T_VOID_STRUCT *ptr; | |
422 | |
423 tst_status_received = 0; | |
424 tst_sync_timeout_cnt = 0; | |
425 tst_sync_mode = 0; | |
426 tst_sync_sucess = 0; | |
427 tif_handle = vsi_d_open ( TST_Handle, (char*)TIF_NAME ); | |
428 vsi_d_setconfig ( TST_Handle, tif_handle, DISABLE_SYNC_MODE ); | |
429 vsi_t_stop ( TST_Handle, TST_SYNC_TIMER_INDEX ); | |
430 ptr = vsi_c_pnew ( sizeof(T_PRIM_HEADER)+strlen(SYSPRIM_TST_SYNC_REJ), 0x8000 FILE_LINE ); | |
431 strcpy ( (char*)ptr, SYSPRIM_TST_SYNC_REJ ); | |
432 vsi_c_psend ( tst_sync_req_handle, ptr ); | |
433 } | |
434 else | |
435 { | |
436 if ( tst_syncronized == 0 ) | |
437 { | |
438 T_HANDLE tif_handle; | |
439 tst_sync_sucess = 1; | |
440 tst_status_received = 0; | |
441 tif_handle = vsi_d_open ( TST_Handle, (char*)TIF_NAME ); | |
442 vsi_d_setconfig ( TST_Handle, tif_handle, ENABLE_SYNC_MODE ); | |
443 tst_drv_write ( NO_TASK, SYS_MASK, FRM_RCV_NAME, (char*)"TRACECLASS 0x10" ); | |
444 vsi_t_sleep ( TST_Handle, 100 ); | |
445 tst_drv_write ( NO_TASK, SYS_MASK, FRM_RCV_NAME, (char*)"STATUS TASK" ); | |
446 vsi_t_start ( TST_Handle, TST_SYNC_TIMER_INDEX, TST_SYNC_TIMER_DURATION ); | |
447 vsi_t_sleep ( TST_Handle, 200 ); | |
448 tst_drv_write ( NO_TASK, SYS_MASK, FRM_RCV_NAME, (char*)"ROUTING" ); | |
449 } | |
450 } | |
451 break; | |
452 default: | |
453 break; | |
454 } | |
455 return PEI_OK; | |
456 } | |
457 #endif | |
458 #endif | |
459 | |
460 #ifndef RUN_INT_RAM | |
461 /* | |
462 +--------------------------------------------------------------------+ | |
463 | PROJECT : GSM-GPF (8415) MODULE : TST_PEI | | |
464 | STATE : code ROUTINE : pei_signal | | |
465 +--------------------------------------------------------------------+ | |
466 */ | |
467 LOCAL SHORT pei_signal (ULONG SignalType, void *ptr) | |
468 { | |
469 /* | |
470 * the following line of code causes a warning on tms470 compiler, that cannot be avoided | |
471 * without changing the PEI interface. Warning will not cause a problem | |
472 */ | |
473 T_VOID_STRUCT *sig_ptr = (T_VOID_STRUCT*)ptr; | |
474 T_PRIM_HEADER *prim; | |
475 T_S_HEADER *s_hdr; | |
476 T_HANDLE DestTaskHandle, DestComHandle; | |
477 T_HANDLE min, max, i; | |
478 unsigned int Length; | |
479 ULONG Suspend, TraceMask, OldTraceMask; | |
480 unsigned int Offset = 0; | |
481 char token[81]; | |
482 UBYTE FreePrim = 1; | |
483 SHORT ret = PEI_OK; | |
484 USHORT processed = FALSE; | |
485 | |
486 switch ( SignalType ) | |
487 { | |
488 case DRV_SIGTYPE_READ: | |
489 VSI_PPM_RCV(sig_ptr); | |
490 if ( (prim = ((T_PRIM_X*)sig_ptr)->prim_ptr) != NULL ) | |
491 { | |
492 VSI_PPM_RCV (prim); | |
493 s_hdr = (T_S_HEADER*)((ULONG*)prim + prim->sh_offset); | |
494 DestTaskHandle = vsi_e_handle ( TST_Handle, s_hdr->rcv ); | |
495 if ( DestTaskHandle == VSI_ERROR ) | |
496 { | |
497 if ( !strcmp ( "IRQ", s_hdr->rcv ) ) | |
498 { | |
499 DestTaskHandle = 0; | |
500 OldTraceMask = TC_SYSTEM; | |
501 TraceMask = 0; | |
502 } | |
503 else | |
504 { | |
505 if ( !strcmp ( "SYST", s_hdr->rcv ) ) | |
506 { | |
507 DestTaskHandle = 0; | |
508 vsi_gettracemask ( DestTaskHandle, 0, &OldTraceMask); | |
509 TraceMask = TC_SYSTEM; | |
510 } | |
511 else | |
512 { | |
513 OldTraceMask = 0; | |
514 TraceMask = 0; | |
515 } | |
516 } | |
517 } | |
518 else | |
519 { | |
520 /* to satisfy LINT */ | |
521 OldTraceMask = 0; | |
522 TraceMask = 0; | |
523 } | |
524 if ( DestTaskHandle != VSI_ERROR ) | |
525 { | |
526 if ( prim->opc & SYS_MASK ) | |
527 { | |
528 Length = GetNextToken ((char*)(P2D(prim)), token, " #"); | |
529 Offset = Length+1; | |
530 if ( frmenv == ENV_STACK ) | |
531 { | |
532 /* Set Traceclass for non-frame tasks/HISRs */ | |
533 if ( DestTaskHandle == 0 && !strcmp (token, SYSPRIM_TRACECLASS_TOKEN) ) | |
534 { | |
535 Length = GetNextToken ((char *)(P2D(prim))+Offset, token, " #"); | |
536 TraceMask = ASCIIToHex(token, CHARS_FOR_32BIT); | |
537 vsi_settracemask ( DestTaskHandle, 0, TraceMask|OldTraceMask); /* it is not allowed to switch of system traces */ | |
538 sprintf ( token, "%s (%s %s)", ok_string, (char*)(P2D(prim)), s_hdr->rcv ); | |
539 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
540 processed = TRUE; | |
541 } | |
542 if (!strcmp (token, SYSPRIM_TRC_SUSPEND)) | |
543 { | |
544 processed = TRUE; | |
545 /* | |
546 * set suspend for traces to SUSPEND or NO_SUSPEND | |
547 */ | |
548 Length = GetNextToken ((char *)(P2D(prim))+Offset, token, " #"); | |
549 Offset += (Length+1); | |
550 | |
551 if ( !strcmp ( token, "ALL" ) ) | |
552 { | |
553 min = 1; | |
554 max = MaxEntities; | |
555 GetNextToken ((char *)(P2D(prim))+Offset, token, " #"); | |
556 } | |
557 else | |
558 { | |
559 min = DestTaskHandle; | |
560 max = min; | |
561 } | |
562 if ( !strcmp ( token, "YES" ) ) | |
563 Suspend = 0xffffffff; | |
564 else | |
565 Suspend = 0; | |
566 | |
567 for ( i = min; i <= max; i++ ) | |
568 vsi_trcsuspend ( TST_Handle, i, Suspend ); | |
569 sprintf ( token, "%s (%s %s)", ok_string, (char*)(P2D(prim)), s_hdr->rcv ); | |
570 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
571 } | |
572 else if (!strcmp (token, SYSPRIM_MEMCHECK_TOKEN)) | |
573 { | |
574 processed = TRUE; | |
575 /* | |
576 * Memory Check | |
577 */ | |
578 for ( i = 1; i <= MaxEntities; i++ ) | |
579 { | |
580 if ( vsi_object_info (TST_Handle, OS_OBJTASK, (USHORT)i, token, sizeof(token)) != VSI_ERROR ) | |
581 { | |
582 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
583 } | |
584 } | |
585 } | |
586 #ifdef CTB | |
587 #ifndef _TOOLS_ | |
588 else if (!strcmp (token, SYSPRIM_TIMER_TICK_REQ)) | |
589 { | |
590 processed = TRUE; | |
591 ctb_sent_to_tap = FALSE; | |
592 if(strlen(ctb_rcv)<3) | |
593 { | |
594 strcpy(ctb_rcv, P_SND(prim)); | |
595 } | |
596 ctb_remaining_tick_time = P_TIME(prim); //The time parameter is sent in the time stap. | |
597 /*sprintf ( token, "Requesting ticking for %d from %s", ctb_remaining_tick_time, ctb_rcv); | |
598 tst_drv_write ( NO_TASK, 0, NULL, token );*/ | |
599 PSIGNAL(hCommIDLE, IDLE_REQ, NULL); | |
600 } | |
601 else if (!strcmp (token, SYSPRIM_INT_TICK_MODE_REQ)) | |
602 { | |
603 processed = TRUE; | |
604 if(ctb_tick_enabled) | |
605 { | |
606 vsi_p_delete (TST_Handle,idle_handle); | |
607 ctb_tick_enabled = FALSE; | |
608 ctb_sent_to_tap = FALSE; | |
609 sprintf ( token, "Disabling Common Timer Base"); | |
610 ctb_rcv[0]='\0'; | |
611 os_StartTicking(); | |
612 } | |
613 else | |
614 sprintf ( token, "Common Timer Base already disabled"); | |
615 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
616 if(!strcmp(P_SND(prim), "TAP")) | |
617 { | |
618 tst_drv_write ( NO_TASK, SYS_MASK, "TAP", "INT_TICK_MODE_CNF"); | |
619 } | |
620 } | |
621 else if (!strcmp (token, SYSPRIM_EXT_TICK_MODE_REQ)) | |
622 { | |
623 processed = TRUE; | |
624 if(!ctb_tick_enabled) | |
625 { | |
626 if ( (idle_handle = vsi_p_create (TST_Handle, idle_pei_create, NULL, 1)) == VSI_ERROR ) | |
627 { | |
628 vsi_o_assert ( TST_Handle, OS_SYST_ERR, __FILE__, __LINE__, "CTB: Cannot create IDLE task" ); | |
629 } | |
630 vsi_p_start (TST_Handle, idle_handle); | |
631 while ( (hCommIDLE = vsi_e_handle ( TST_Handle, "IDLE" ))<VSI_OK) | |
632 { | |
633 vsi_t_sleep(0,1000); | |
634 } | |
635 os_StopTicking(); | |
636 sprintf ( token, "Enabling Common Timer Base"); | |
637 ctb_tick_enabled = TRUE; | |
638 } | |
639 else | |
640 sprintf ( token, "Common Timer Base already enabled"); | |
641 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
642 if(!strcmp(P_SND(prim), "TAP")) | |
643 { | |
644 char send_str[50]; | |
645 char tmp_str[8]; | |
646 //Get process id and put in this syst primitive. | |
647 strcpy(send_str,"EXT_TICK_MODE_CNF#"); | |
648 _itoa(os_GetProcessId(), tmp_str, 10); | |
649 strcat(send_str, tmp_str); | |
650 tst_drv_write ( NO_TASK, SYS_MASK, "TAP", send_str); | |
651 } | |
652 } | |
653 #endif | |
654 #endif //CTB | |
655 | |
656 #ifndef _TARGET_ | |
657 else if (!strcmp (token, SYSPRIM_SUPPRESS_OK)) | |
658 { | |
659 processed = TRUE; | |
660 SuppressOK = TRUE; | |
661 } | |
662 #endif | |
663 else if (!strcmp (token, SYSPRIM_GET_STACK_TIME)) | |
664 { | |
665 processed = TRUE; | |
666 tst_drv_write ( NO_TASK, SYS_MASK, FRM_TST_NAME, (char*)SYSPRIM_IS_STACK_TIME ); | |
667 } | |
668 else if (!strcmp (token, SYSPRIM_READ_ROUTING)) | |
669 { | |
670 processed = TRUE; | |
671 i = 0; | |
672 while ( rt_RouteRead ( DestTaskHandle, token ) != RT_ERROR ) | |
673 { | |
674 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
675 i++; | |
676 } | |
677 if ( !i ) | |
678 { | |
679 sprintf ( token, "NO %s ROUTINGS STORED", s_hdr->rcv ); | |
680 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
681 } | |
682 } | |
683 #ifndef _TOOLS_ | |
684 else if (!strcmp (token, SYSPRIM_STR2IND_VERSION)) | |
685 { | |
686 processed = TRUE; | |
687 tst_drv_write ( NO_TASK, 0, NULL, str2ind_version ); | |
688 } | |
689 #endif | |
690 } | |
691 } | |
692 } | |
693 #ifdef _TOOLS_ | |
694 else | |
695 { | |
696 /* synchronization with protocol stack */ | |
697 if ( tst_sync_mode == 1 ) | |
698 { | |
699 char *pos; | |
700 char task_status; | |
701 T_VOID_STRUCT *cmd_ptr; | |
702 | |
703 pos = strstr ( (char*)(P2D(prim)), "Name:" ); | |
704 if ( pos != NULL ) | |
705 { | |
706 tst_sync_started = 1; | |
707 GetNextToken ((char *)(P2D(prim))+strlen("Name:"), token, " #"); | |
708 if ( strcmp(token,FRM_RCV_NAME) && strcmp(token,FRM_TST_NAME) && strcmp(token,"EXTR") ) | |
709 { | |
710 pos = strstr ( (char*)(P2D(prim)), "Stat:" ); | |
711 if ( pos != NULL ) | |
712 { | |
713 tst_status_received = 1; | |
714 task_status = atoi(pos+strlen("Stat:")); | |
715 if ( task_status != 6 ) | |
716 { | |
717 tst_sync_sucess = 0; | |
718 } | |
719 } | |
720 } | |
721 } | |
722 else | |
723 { | |
724 if ( tst_sync_started == 1 ) | |
725 { | |
726 pos = strstr ( (char*)(P2D(prim)), "ROUTING" ); | |
727 if ( pos != NULL ) | |
728 { | |
729 if ( tst_sync_sucess == 1 && tst_status_received == 1 ) | |
730 { | |
731 T_HANDLE tif_handle = vsi_d_open ( TST_Handle, (char*)TIF_NAME ); | |
732 vsi_d_setconfig ( TST_Handle, tif_handle, DISABLE_SYNC_MODE ); | |
733 vsi_t_stop ( TST_Handle, TST_SYNC_TIMER_INDEX ); | |
734 cmd_ptr = vsi_c_pnew ( sizeof(T_PRIM_HEADER)+strlen(SYSPRIM_TST_SYNC_CNF), 0x8000 FILE_LINE ); | |
735 strcpy ( (char*)cmd_ptr, SYSPRIM_TST_SYNC_CNF ); | |
736 vsi_o_ttrace ( TST_Handle, TC_TIMER, "SYNC DONE") ; | |
737 vsi_c_psend ( tst_sync_req_handle, cmd_ptr ); | |
738 tst_sync_mode = 0; | |
739 tst_sync_timeout_cnt = 0; | |
740 tst_syncronized = 1; | |
741 } | |
742 } | |
743 } | |
744 } | |
745 } | |
746 } | |
747 #endif /* _TOOLS_ */ | |
748 if ( processed == FALSE ) | |
749 { | |
750 if ( ( DestComHandle = vsi_c_open ( TST_Handle, s_hdr->rcv ) ) != VSI_ERROR ) | |
751 { | |
752 /* free carrier */ | |
753 PFREE(P2D(sig_ptr)); | |
754 FreePrim = 0; | |
755 vsi_c_psend (DestComHandle, (T_VOID_STRUCT*)P2D(prim) FILE_LINE_MACRO); | |
756 } | |
757 else | |
758 { | |
759 #ifndef _TOOLS_ | |
760 if ( frmenv == ENV_STACK ) | |
761 { | |
762 sprintf ( token, "SYSTEM WARNING: Receiver Process '%s' unknown", s_hdr->rcv ); | |
763 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
764 ret = PEI_ERROR; | |
765 } | |
766 #endif /* _TOOLS_ */ | |
767 /* free dyn_ptr if unknown receiver */ | |
768 FREE(P2D(prim)); | |
769 } | |
770 } | |
771 else | |
772 { | |
773 /* free dyn_ptr if processed in TST */ | |
774 FREE(P2D(prim)); | |
775 } | |
776 } | |
777 | |
778 if ( FreePrim ) | |
779 { | |
780 /* free carrier */ | |
781 PFREE(P2D(sig_ptr)); | |
782 } | |
783 break; | |
784 case DRV_SIGTYPE_CONNECT: | |
785 TST_DrvState = TST_DRV_CONNECTED; | |
786 #ifndef _TOOLS_ | |
787 tst_drv_write ( NO_TASK, SYS_MASK, FRM_TST_NAME, (char*)SYSPRIM_IS_STACK_TIME ); | |
788 tst_drv_write ( NO_TASK, 0, NULL, str2ind_version ); | |
789 #endif | |
790 break; | |
791 case DRV_SIGTYPE_DISCONNECT: | |
792 TST_DrvState = TST_DRV_DISCONNECTED; | |
793 #ifdef _PSOS_ | |
794 /* for pSOS: send empty message to TST */ | |
795 if ( vsi_d_open ( TST_Handle, "SOCKET" ) != VSI_ERROR ) | |
796 { | |
797 T_QMSG Message; | |
798 static T_HANDLE tst_handle = 0; | |
799 | |
800 if( TST_Handle > 0 ) | |
801 { | |
802 Message.MsgType = MSG_PRIMITIVE; | |
803 Message.Msg.Primitive.Prim = NULL; | |
804 Message.Msg.Primitive.PrimLen = 0; | |
805 #ifdef MEMORY_SUPERVISION | |
806 vsi_c_send (TST_Handle, TST_Handle, &Message, __FILE__, __LINE__); | |
807 #else | |
808 vsi_c_send (TST_Handle, TST_Handle, &Message); | |
809 #endif | |
810 } | |
811 } | |
812 #endif | |
813 break; | |
814 #ifdef CTB | |
815 case IDLE_CNF: | |
816 if(ctb_remaining_tick_time > 0 && ctb_tick_enabled && !ctb_sent_to_tap) | |
817 { | |
818 os_Tick(); | |
819 PSIGNAL(hCommIDLE, IDLE_REQ, NULL); | |
820 ctb_remaining_tick_time = ctb_remaining_tick_time-50; | |
821 } | |
822 else | |
823 { | |
824 /*sprintf ( token, "Ticking finished - remaining time %d", ctb_remaining_tick_time); | |
825 tst_drv_write ( NO_TASK, 0, NULL, token );*/ | |
826 if(!strcmp(ctb_rcv, "TAP")) | |
827 tst_drv_write ( NO_TASK, SYS_MASK, FRM_TST_NAME, SYSPRIM_IS_STACK_TIME ); //Synchronize time with tools | |
828 tst_drv_write ( NO_TASK, SYS_MASK, ctb_rcv, "TIMER_TICK_CNF"); | |
829 } | |
830 break; | |
831 #endif | |
832 default: | |
833 sprintf ( token, "Unhandled PSIGNAL"); | |
834 tst_drv_write ( NO_TASK, 0, NULL, token ); | |
835 break; | |
836 } | |
837 return ( ret ); | |
838 } | |
839 #endif | |
840 | |
841 #ifndef RUN_INT_RAM | |
842 /* | |
843 +--------------------------------------------------------------------+ | |
844 | PROJECT : GSM-GPF (8415) MODULE : TST_PEI | | |
845 | STATE : code ROUTINE : pei_config | | |
846 +--------------------------------------------------------------------+ | |
847 */ | |
848 | |
849 LOCAL SHORT pei_config (char * inString) | |
850 { | |
851 T_HANDLE drv_handle; | |
852 char token[80]; | |
853 unsigned int length, offset; | |
854 BOOL select = 0,config = 0; | |
855 T_TST_DRV_ENTRY *tst_drv_info; | |
856 | |
857 length = GetNextToken (inString, token, " #"); | |
858 offset = length+1; | |
859 if ( !strcmp ( token, "DRIVER") ) | |
860 { | |
861 length = GetNextToken (inString+offset, token, " #"); | |
862 offset += (length+1); | |
863 if ( !strcmp ( token, "FLUSH") ) | |
864 { | |
865 vsi_d_flush ( TST_Handle, 0 ); | |
866 } | |
867 if ( !strcmp ( token, "SELECT") ) | |
868 { | |
869 select = 1; | |
870 } | |
871 if ( !strcmp ( token, "CONFIG") ) | |
872 { | |
873 config = 1; | |
874 #ifdef _TOOLS_ | |
875 tst_syncronized = 0; | |
876 #endif | |
877 } | |
878 length = GetNextToken (inString+offset, token, " #"); | |
879 offset += (length+1); | |
880 if ( select ) | |
881 { | |
882 #ifdef _TOOLS_ | |
883 if ( !strcmp(NODRV_NAME,token) ) | |
884 { | |
885 if ( tst_drv_open ( token, &tst_drv_info ) == VSI_ERROR || | |
886 vsi_d_create ( TST_Handle, tst_drv_info ) == VSI_ERROR) | |
887 { | |
888 return PEI_ERROR; | |
889 } | |
890 PrintToFile("TST: all drivers unloaded\n"); | |
891 } | |
892 else | |
893 #endif | |
894 { | |
895 /* check if driver is already loaded */ | |
896 if ( (drv_handle = vsi_d_open ( TST_Handle, token )) == VSI_ERROR ) | |
897 { | |
898 if ( tst_drv_open ( token, &tst_drv_info ) == VSI_ERROR || | |
899 vsi_d_create ( TST_Handle, tst_drv_info ) == VSI_ERROR ) | |
900 { | |
901 return PEI_ERROR; | |
902 } | |
903 } | |
904 else | |
905 { | |
906 #ifdef _TOOLS_ | |
907 #ifdef _DEBUG | |
908 PrintToFile("TST: keeping %s loaded\n",token); | |
909 #endif | |
910 #endif | |
911 vsi_d_close( TST_Handle, drv_handle ); | |
912 } | |
913 } | |
914 } | |
915 if ( config ) | |
916 { | |
917 if ( ( drv_handle = vsi_d_open ( TST_Handle, token ) ) == VSI_ERROR ) | |
918 { | |
919 return PEI_ERROR; | |
920 } | |
921 if (vsi_d_setconfig ( TST_Handle, drv_handle, inString+offset) != VSI_OK) | |
922 { | |
923 #ifdef _TOOLS_ | |
924 char text[99]; | |
925 _snprintf(text,98,"TST: Error configuring driver %s with \"%s\" :-(",token, inString+offset); | |
926 vsi_o_ttrace(NO_TASK, TC_SYSTEM, text); | |
927 #endif /* _TOOLS_ */ | |
928 } | |
929 vsi_d_close( TST_Handle, drv_handle ); | |
930 } | |
931 } | |
932 else if ( !strcmp ( token, "THIF") ) | |
933 { | |
934 T_HANDLE tif_handle; | |
935 tif_handle = vsi_d_open ( TST_Handle, (char*)TIF_NAME ); | |
936 length = GetNextToken (inString+offset, token, " #"); | |
937 offset += (length+1); | |
938 | |
939 if ( !strcmp ( token, "OPEN") ) | |
940 { | |
941 vsi_d_setconfig ( TST_Handle, tif_handle, token ); | |
942 } | |
943 else if ( !strcmp ( token, "CLOSE") ) | |
944 { | |
945 vsi_d_setconfig ( TST_Handle, tif_handle, token ); | |
946 } | |
947 } | |
948 #ifdef _TOOLS_ | |
949 else if ( !strcmp ( token, SYSPRIM_TST_SYNC_REQ) ) | |
950 { | |
951 T_HANDLE tif_handle; | |
952 unsigned int len; | |
953 | |
954 len = GetNextToken (inString+offset, sync_req_name, " #"); | |
955 offset += len; | |
956 len = GetNextToken (inString+offset, sync_req_time, " #"); | |
957 tst_max_sync_timeout = (atoi(sync_req_time) - 1000)/TST_SYNC_TIMER_DURATION; | |
958 | |
959 tst_sync_req_handle = vsi_c_open ( TST_Handle, sync_req_name ); | |
960 if ( tst_sync_req_handle != VSI_ERROR ) | |
961 { | |
962 if ( tst_syncronized == 0 ) | |
963 { | |
964 tst_sync_started = 0; | |
965 tst_status_received = 0; | |
966 tst_sync_mode = 1; | |
967 tst_sync_sucess = 1; | |
968 tif_handle = vsi_d_open ( TST_Handle, (char*)TIF_NAME ); | |
969 vsi_d_setconfig ( TST_Handle, tif_handle, ENABLE_SYNC_MODE ); | |
970 tst_drv_write ( NO_TASK, SYS_MASK, FRM_RCV_NAME, (char*)"TRACECLASS 0x10" ); | |
971 vsi_t_sleep ( TST_Handle, 100 ); | |
972 tst_drv_write ( NO_TASK, SYS_MASK, FRM_RCV_NAME, (char*)"STATUS TASK" ); | |
973 vsi_t_start ( TST_Handle, TST_SYNC_TIMER_INDEX, TST_SYNC_TIMER_DURATION ); | |
974 vsi_t_sleep ( TST_Handle, 200 ); | |
975 tst_drv_write ( NO_TASK, SYS_MASK, FRM_RCV_NAME, (char*)"ROUTING" ); | |
976 } | |
977 } | |
978 } | |
979 #endif | |
980 #ifdef _FF_RV_EXIST_ | |
981 else if ( !strcmp ( token, "TRACEMASK_IN_FFS") ) | |
982 { | |
983 int amount; | |
984 T_FFS_FD fd; | |
985 T_FFS_RET ret; | |
986 T_FFS_SIZE written; | |
987 T_FFS_DIR dir; | |
988 BOOL writeFailed = FALSE; | |
989 if (vsi_e_handle ( TST_Handle, FRM_RCV_NAME ) == e_running[os_MyHandle()]) // config prim processing only allowed in RCV, not TST! | |
990 { | |
991 fd = ffs_open(TRACEMASKFILE, FFS_O_RDWR | FFS_O_CREATE | FFS_O_TRUNC); | |
992 if (fd < 0) | |
993 { | |
994 // could not open nor create /var/dbg/tracemask warning | |
995 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: could not open/create FFS trace mask, reason is 0x%x", fd); | |
996 } | |
997 else | |
998 { | |
999 TraceMask[0] = 0; | |
1000 TraceMask[0] |= TC_SYSTEM|TC_ERROR; | |
1001 amount = sizeof(ULONG) * (MaxEntities + 1); | |
1002 written = ffs_write(fd, (void*)&TraceMask[0], amount); | |
1003 if (written != amount) | |
1004 { | |
1005 if (written >= 0) | |
1006 { | |
1007 amount -= written; | |
1008 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: writing to FFS, second try"); | |
1009 written = ffs_write(fd, (void*)&TraceMask[0], amount); | |
1010 if (written != amount) | |
1011 { | |
1012 writeFailed = TRUE; | |
1013 } | |
1014 } | |
1015 else | |
1016 { | |
1017 writeFailed = TRUE; | |
1018 } | |
1019 } | |
1020 if (writeFailed) | |
1021 { | |
1022 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: ffs_write to FFS failed with 0x%x, did open with", written, fd); | |
1023 } | |
1024 else | |
1025 { | |
1026 if (ffs_fdatasync(fd) == EFFS_OK) | |
1027 { | |
1028 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: successfully written trace mask to FFS"); | |
1029 } | |
1030 else | |
1031 { | |
1032 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: flushing FFS trace mask failed!"); | |
1033 } | |
1034 } | |
1035 ffs_close(fd); | |
1036 } | |
1037 } | |
1038 } | |
1039 else if ( !strcmp ( token, "NO_TRACEMASK_IN_FFS") ) | |
1040 { | |
1041 T_FFS_RET ret; | |
1042 | |
1043 InitializeTrace(); | |
1044 TraceMask[0] = 0; | |
1045 TraceMask[0] |= TC_SYSTEM|TC_ERROR; | |
1046 if (vsi_e_handle ( TST_Handle, FRM_RCV_NAME ) == e_running[os_MyHandle()]) // config prim processing only allowed in RCV, not TST! | |
1047 { | |
1048 ret = ffs_remove(TRACEMASKFILE); | |
1049 if (ret != EFFS_OK) | |
1050 { | |
1051 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: failed to remove FFS trace mask, reason is 0x%x", ret); | |
1052 } | |
1053 else | |
1054 { | |
1055 vsi_o_ttrace(NO_TASK, TC_SYSTEM, "pei_config: successfully removed FFS trace mask"); | |
1056 } | |
1057 } | |
1058 } | |
1059 #endif | |
1060 return PEI_OK; | |
1061 } | |
1062 #endif | |
1063 | |
1064 #ifndef RUN_INT_RAM | |
1065 GLOBAL SHORT tstsnd_pei_create ( T_PEI_INFO ** info) | |
1066 { | |
1067 static T_PEI_INFO data = | |
1068 { "TST", | |
1069 { | |
1070 pei_init, | |
1071 pei_exit, | |
1072 tst_pei_primitive, | |
1073 #ifdef _TOOLS_ | |
1074 pei_timeout, | |
1075 #else | |
1076 NULL, | |
1077 #endif | |
1078 NULL, | |
1079 NULL, | |
1080 pei_config, | |
1081 NULL | |
1082 }, | |
1083 TST_STACKSIZE, | |
1084 0, | |
1085 TST_SND_PRIORITY, | |
1086 TST_TIMERS, | |
1087 (PASSIVE_BODY|COPY_BY_REF|SYSTEM_PROCESS|TRC_NO_SUSPEND) | |
1088 }; | |
1089 | |
1090 #ifdef _TOOLS_ | |
1091 data.QueueEntries = TST_QUEUE_ENTRIES; | |
1092 #else | |
1093 data.QueueEntries = TST_SndQueueEntries; | |
1094 /* | |
1095 * This way of setting the TST and RCV stacksize is chosen to keep it backwardscompatible, | |
1096 * i.e. not change the behavior if the stacksizes are not define in the configuration | |
1097 * file xxxconst.h. | |
1098 */ | |
1099 if ( TST_SndStacksize > 0 ) | |
1100 { | |
1101 data.StackSize = TST_SndStacksize; | |
1102 } | |
1103 if ( pcon != NULL ) | |
1104 { | |
1105 data.StackSize += pcon->stack_offset; | |
1106 } | |
1107 #endif | |
1108 *info = &data; | |
1109 return PEI_OK; | |
1110 } | |
1111 #endif | |
1112 | |
1113 #ifndef RUN_INT_RAM | |
1114 GLOBAL SHORT tstrcv_pei_create ( T_PEI_INFO ** info) | |
1115 { | |
1116 static T_PEI_INFO data = | |
1117 { "RCV", | |
1118 { | |
1119 NULL, | |
1120 NULL, | |
1121 NULL, | |
1122 NULL, | |
1123 pei_signal, | |
1124 NULL, | |
1125 pei_config, | |
1126 NULL | |
1127 }, | |
1128 TST_STACKSIZE, | |
1129 0, | |
1130 TST_RCV_PRIORITY, | |
1131 TST_TIMERS, | |
1132 (PASSIVE_BODY|COPY_BY_REF|SYSTEM_PROCESS|TRC_NO_SUSPEND) | |
1133 }; | |
1134 | |
1135 #ifdef _TOOLS_ | |
1136 data.QueueEntries = TST_QUEUE_ENTRIES; | |
1137 #else | |
1138 data.QueueEntries = TST_RcvQueueEntries; | |
1139 /* | |
1140 * This way of setting the TST and RCV stacksize is chosen to keep it backwardscompatible, | |
1141 * i.e. not change the behavior if the stacksizes are not define in the configuration | |
1142 * file xxxconst.h. | |
1143 */ | |
1144 if ( TST_RcvStacksize > 0 ) | |
1145 { | |
1146 data.StackSize = TST_RcvStacksize; | |
1147 } | |
1148 if ( pcon != NULL ) | |
1149 { | |
1150 data.StackSize += pcon->stack_offset; | |
1151 } | |
1152 #endif | |
1153 *info = &data; | |
1154 return PEI_OK; | |
1155 } | |
1156 #endif | |
1157 |