comparison g23m-gsm/mm/mm_pei.c @ 0:75a11d740a02

initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 09 Jun 2016 00:02:41 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:75a11d740a02
1 /*
2 +-----------------------------------------------------------------------------
3 | Project :
4 | Modul :
5 +-----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : This module implements the process body interface
18 | for the entity MM of the mobile station.
19 +-----------------------------------------------------------------------------
20 */
21
22
23 #ifndef MM_PEI_C
24 #define MM_PEI_C
25
26 #include "config.h"
27 #include "fixedconf.h"
28 #include "condat-features.h"
29
30 #define ENTITY_MM
31
32 /*==== INCLUDES ===================================================*/
33 #if defined (NEW_FRAME)
34
35 #include <string.h>
36 #include <stdlib.h>
37 #include <stddef.h>
38 #include "typedefs.h"
39 #include "pcm.h"
40 #include "pconst.cdg"
41 #include "mconst.cdg"
42 #include "message.h"
43 #include "ccdapi.h"
44 #include "vsi.h"
45 #include "custom.h"
46 #include "gsm.h"
47 #include "prim.h"
48 #include "cnf_mm.h"
49 #include "mon_mm.h"
50 #include "pei.h"
51 #include "tok.h"
52 #include "mm.h"
53 #include "mm_em.h"
54
55 #else
56
57 #include <string.h>
58 #include <stdlib.h>
59 #include <stddef.h>
60 #include "stddefs.h"
61 #include "pcm.h"
62 #include "pconst.cdg"
63 #include "mconst.cdg"
64 #include "message.h"
65 #include "ccdapi.h"
66 #include "custom.h"
67 #include "gsm.h"
68 #include "prim.h"
69 #include "cnf_mm.h"
70 #include "mon_mm.h"
71 #include "vsi.h"
72 #include "pei.h"
73 #include "tok.h"
74 #include "mm.h"
75 #include "mm_em.h"
76
77 #endif
78
79 /*==== TEST =====================================================*/
80
81 /*==== EXPORT =====================================================*/
82 #if defined (NEW_FRAME)
83 #ifdef TI_PS_HCOMM_CHANGE
84 #else
85 GLOBAL T_HANDLE hCommMMI = VSI_ERROR; /* MMI Communication */
86 GLOBAL T_HANDLE hCommCC = VSI_ERROR; /* CC Communication */
87 GLOBAL T_HANDLE hCommSS = VSI_ERROR; /* SS Communication */
88 GLOBAL T_HANDLE hCommSMS = VSI_ERROR; /* SMS Communication */
89 GLOBAL T_HANDLE hCommSIM = VSI_ERROR; /* SIM Communication */
90 GLOBAL T_HANDLE hCommDL = VSI_ERROR; /* DL Communication */
91 GLOBAL T_HANDLE hCommRR = VSI_ERROR; /* RR Communication */
92 #endif /* TI_PS_HCOMM_CHANGE */
93 #ifdef GPRS
94 GLOBAL T_HANDLE hCommGMM = VSI_ERROR; /* GMM Communication */
95 #endif
96 GLOBAL T_HANDLE mm_handle;
97 #else
98 #ifdef TI_PS_HCOMM_CHANGE
99 #else
100 GLOBAL T_VSI_CHANDLE hCommMMI = VSI_ERROR; /* MMI Communication */
101 GLOBAL T_VSI_CHANDLE hCommCC = VSI_ERROR; /* CC Communication */
102 GLOBAL T_VSI_CHANDLE hCommSS = VSI_ERROR; /* SS Communication */
103 GLOBAL T_VSI_CHANDLE hCommSMS = VSI_ERROR; /* SMS Communication */
104 GLOBAL T_VSI_CHANDLE hCommSIM = VSI_ERROR; /* SIM Communication */
105 GLOBAL T_VSI_CHANDLE hCommDL = VSI_ERROR; /* DL Communication */
106 GLOBAL T_VSI_CHANDLE hCommRR = VSI_ERROR; /* RR Communication */
107 #endif /* TI_PS_HCOMM_CHANGE */
108 GLOBAL T_VSI_THANDLE mm_act_handle = VSI_ERROR;
109 #endif /* NEW_FRAME */
110 T_MM_DATA mm_data_base;
111
112 /*==== PRIVATE ====================================================*/
113
114 LOCAL void pei_not_supported (void *);
115
116 /*==== VARIABLES ==================================================*/
117
118 #ifdef _SIMULATION_
119 LOCAL BOOL first_access = TRUE;
120 #endif /* _SIMULATION_ */
121 LOCAL T_MONITOR mm_mon;
122
123 /*==== FUNCTIONS ==================================================*/
124
125 #ifdef GPRS
126 LOCAL const T_FUNC mmgmm_table[] = {
127 MAK_FUNC_0 (mm_mmgmm_reg_req , MMGMM_REG_REQ ), /* 0x00 */
128 MAK_FUNC_0 (mm_mmgmm_nreg_req , MMGMM_NREG_REQ ), /* 0x01 */
129 MAK_FUNC_0 (mm_mmgmm_net_req , MMGMM_NET_REQ ), /* 0x02 */
130 MAK_FUNC_0 (mm_mmgmm_plmn_res , MMGMM_PLMN_RES ), /* 0x03 */
131 MAK_FUNC_0 (mm_mmgmm_plmn_mode_req , MMGMM_PLMN_MODE_REQ ), /* 0x04 */
132 MAK_FUNC_0 (mm_mmgmm_auth_rej_req , MMGMM_AUTH_REJ_REQ ), /* 0x05 */
133 MAK_FUNC_0 (mm_mmgmm_cm_establish_res,MMGMM_CM_ESTABLISH_RES), /* 0x06 */
134 MAK_FUNC_0 (mm_mmgmm_attach_started_req, MMGMM_ATTACH_STARTED_REQ),
135 MAK_FUNC_0 (mm_mmgmm_attach_acc_req, MMGMM_ATTACH_ACC_REQ ), /* 0x08 */
136 MAK_FUNC_0 (mm_mmgmm_attach_rej_req, MMGMM_ATTACH_REJ_REQ ), /* 0x09 */
137 MAK_FUNC_0 (mm_mmgmm_detach_started_req, MMGMM_DETACH_STARTED_REQ),
138 MAK_FUNC_0 (mm_mmgmm_start_t3212_req, MMGMM_START_T3212_REQ ), /* 0x0b */
139 MAK_FUNC_0 (mm_mmgmm_cm_emergency_res,MMGMM_CM_EMERGENCY_RES), /* 0x0c */
140 MAK_FUNC_0 (mm_mmgmm_allowed_req , MMGMM_ALLOWED_REQ ), /* 0x0d */
141 MAK_FUNC_0 (pei_not_supported , MMGMM_TRIGGER_REQ ) /* 0x0e */
142 };
143 #else
144 LOCAL const T_FUNC mmreg_table[] = {
145 MAK_FUNC_0 (reg_mmr_reg_req , MMR_REG_REQ ),
146 MAK_FUNC_0 (reg_mmr_nreg_req , MMR_NREG_REQ ),
147 MAK_FUNC_0 (reg_mmr_net_req , MMR_NET_REQ ),
148 MAK_FUNC_0 (reg_mmr_plmn_res , MMR_PLMN_RES ),
149 MAK_FUNC_0 (reg_mmr_plmn_mode_req , MMR_PLMN_MODE_REQ )
150 };
151 #endif
152
153 LOCAL const T_FUNC mmcm_table[] = {
154 MAK_FUNC_0 (mm_mmcm_establish_req , MMCM_ESTABLISH_REQ ), /* 0x00 */
155 MAK_FUNC_S (mm_mmcm_data_req , MMCM_DATA_REQ ), /* 0x01 */
156 MAK_FUNC_0 (mm_mmcm_release_req , MMCM_RELEASE_REQ ), /* 0x02 */
157 MAK_FUNC_0 (mm_mmcm_reestablish_req, MMCM_REESTABLISH_REQ ), /* 0x03 */
158 MAK_FUNC_0 (mm_mmcm_prompt_res , MMCM_PROMPT_RES ), /* 0x04 */
159 MAK_FUNC_0 (mm_mmcm_prompt_rej , MMCM_PROMPT_REJ ) /* 0x05 */
160 };
161
162 LOCAL const T_FUNC mmss_table[] = {
163 MAK_FUNC_0 (mm_mmss_establish_req , MMSS_ESTABLISH_REQ ),
164 MAK_FUNC_0 (mm_mmss_release_req , MMSS_RELEASE_REQ ),
165 MAK_FUNC_S (mm_mmss_data_req , MMSS_DATA_REQ )
166 };
167
168 LOCAL const T_FUNC mmsms_table[] = {
169 MAK_FUNC_0 (mm_mmsms_establish_req , MMSMS_ESTABLISH_REQ ),
170 MAK_FUNC_0 (mm_mmsms_release_req , MMSMS_RELEASE_REQ ),
171 MAK_FUNC_S (mm_mmsms_data_req , MMSMS_DATA_REQ )
172 };
173
174 LOCAL const T_FUNC sim_table[] = {
175 MAK_FUNC_0 (reg_sim_read_cnf , SIM_READ_CNF ), /* 0x00 */
176 MAK_FUNC_0 (pei_not_supported , SIM_UPDATE_CNF ),
177 MAK_FUNC_0 (pei_not_supported , SIM_READ_RECORD_CNF ),
178 MAK_FUNC_N (pei_not_supported , 0 ),
179 MAK_FUNC_0 (pei_not_supported , SIM_UPDATE_RECORD_CNF ),
180 MAK_FUNC_N (pei_not_supported , 0 ),
181 MAK_FUNC_N (pei_not_supported , 0 ),
182 MAK_FUNC_N (pei_not_supported , 0 ),
183 MAK_FUNC_0 (pei_not_supported , SIM_INCREMENT_CNF ),
184 MAK_FUNC_0 (pei_not_supported , SIM_VERIFY_PIN_CNF ),
185 MAK_FUNC_0 (pei_not_supported , SIM_CHANGE_PIN_CNF ),
186 MAK_FUNC_0 (pei_not_supported , SIM_DISABLE_PIN_CNF ),
187 MAK_FUNC_0 (pei_not_supported , SIM_ENABLE_PIN_CNF ),
188 MAK_FUNC_0 (pei_not_supported , SIM_UNBLOCK_CNF ),
189 MAK_FUNC_0 (reg_sim_auth_cnf , SIM_AUTHENTICATION_CNF ),
190 MAK_FUNC_0 (pei_not_supported , SIM_MMI_INSERT_IND ),
191 MAK_FUNC_0 (reg_sim_mm_insert_ind , SIM_MM_INSERT_IND ),
192 MAK_FUNC_0 (reg_sim_remove_ind , SIM_REMOVE_IND ),
193 MAK_FUNC_0 (reg_sim_sync_cnf , SIM_SYNC_CNF ),
194 MAK_FUNC_0 (pei_not_supported , SIM_ACTIVATE_CNF ),
195 MAK_FUNC_0 (pei_not_supported , SIM_SMS_INSERT_IND ), /* 0x14 */
196 MAK_FUNC_0 (pei_not_supported , SIM_TOOLKIT_IND ), /* 0x15 */
197 MAK_FUNC_0 (pei_not_supported , SIM_TOOLKIT_CNF ), /* 0x16 */
198 MAK_FUNC_0 (pei_not_supported , SIM_ACTIVATE_IND ), /* 0x17 */
199 MAK_FUNC_0 (reg_sim_mm_info_ind , SIM_MM_INFO_IND ), /* 0x18 */
200 MAK_FUNC_0 (pei_not_supported , SIM_ACCESS_CNF ), /* 0x19 */
201 MAK_FUNC_0 (reg_sim_file_upd_ind , SIM_FILE_UPDATE_IND ) /* 0x1a */
202 };
203
204 #ifdef FF_EM_MODE
205 LOCAL const T_FUNC em_ul_table[] = {
206 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E00 */
207 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E01 */
208 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E02 */
209 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E03 */
210 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E04 */
211 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E05 */
212 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E06 */
213 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E07 */
214 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E08 */
215 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E09 */
216 MAK_FUNC_0 (mm_em_dl_event_req , EM_DL_EVENT_REQ ), /* 0x3E0A */
217 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x3E0B */
218 MAK_FUNC_0 (mm_em_mm_event_req , EM_MM_EVENT_REQ ) /* 0x3E0C */
219 };
220
221 LOCAL const T_FUNC em_dl_table[] = {
222 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E00 */
223 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E01 */
224 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E02 */
225 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E03 */
226 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E04 */
227 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E05 */
228 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E06 */
229 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E07 */
230 MAK_FUNC_N (pei_not_supported , 0 ), /* 0x7E08 */
231 MAK_FUNC_N( pei_not_supported , 0 ), /* 0x7E09 */
232 MAK_FUNC_N( pei_not_supported , 0 ), /* 0x7E0A */
233 MAK_FUNC_0( pei_not_supported , EM_DATA_IND ), /* 0x7E0B */
234 };
235 #endif /* FF_EM_MODE */
236
237 LOCAL const T_FUNC rr_table[] = {
238 MAK_FUNC_0 (mm_rr_abort_ind , RR_ABORT_IND ),
239 MAK_FUNC_0 (mm_rr_activate_cnf , RR_ACTIVATE_CNF ),
240 MAK_FUNC_0 (mm_rr_activate_ind , RR_ACTIVATE_IND ),
241 MAK_FUNC_S (for_rr_data_ind , RR_DATA_IND ),
242 MAK_FUNC_0 (mm_rr_establish_cnf , RR_ESTABLISH_CNF ),
243 MAK_FUNC_0 (mm_rr_establish_ind , RR_ESTABLISH_IND ),
244 MAK_FUNC_N (pei_not_supported , 0 ),
245 MAK_FUNC_0 (mm_rr_release_ind , RR_RELEASE_IND ),
246 MAK_FUNC_0 (mm_rr_sync_ind , RR_SYNC_IND )
247 #if defined (FF_EOTD) AND defined (REL99)
248 ,
249 MAK_FUNC_0 (mm_rr_rrlp_start_ind , RR_RRLP_START_IND ),
250 MAK_FUNC_0 (mm_rr_rrlp_stop_ind , RR_RRLP_STOP_IND )
251 #else
252 ,
253 MAK_FUNC_N (pei_not_supported , 0 ),
254 MAK_FUNC_N (pei_not_supported , 0 )
255 #endif /* (FF_EOTD) AND defined (REL99) */
256 };
257
258 LOCAL const T_FUNC mdl_table[] = {
259 MAK_FUNC_0 (mm_mdl_error_ind , MDL_ERROR_IND )
260 };
261
262
263 /*
264 +--------------------------------------------------------------------+
265 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
266 | STATE : code ROUTINE : pei_primitive |
267 +--------------------------------------------------------------------+
268
269 PURPOSE : Process protocol specific primitive.
270
271 */
272
273 #if defined (NEW_FRAME)
274 LOCAL SHORT pei_primitive (void * ptr)
275 #else
276 GLOBAL T_PEI_RETURN pei_primitive (T_PRIM * prim)
277 #endif
278 {
279 GET_INSTANCE_DATA;
280 #if defined (NEW_FRAME)
281 T_PRIM *prim = ptr;
282 #endif
283 /*
284 * | | | | |
285 * MMREG MMCM MMSS MMSMS EM UPLINK
286 * | | | | |
287 * +---v-----v-----v-----v-----v---+
288 * | |
289 * | MM |
290 * | |
291 * +---^---------^--------^--------+
292 * | | |
293 * SIM RR MDL DOWNLINK
294 * | | |
295 *
296 */
297
298 TRACE_FUNCTION ("pei_primitive()");
299 if (prim NEQ NULL)
300 {
301 ULONG opc = prim->custom.opc;
302 USHORT n;
303 const T_FUNC *table;
304
305 #if defined (NEW_FRAME)
306 VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__);
307 #endif
308
309 PTRACE_IN (opc);
310
311 switch (SAP_NR(opc))
312 {
313 case SAP_NR(MMCM_UL): table = mmcm_table; n = TAB_SIZE ( mmcm_table); break;
314 case SAP_NR(MMSS_UL): table = mmss_table; n = TAB_SIZE ( mmss_table); break;
315 case SAP_NR(MMSMS_UL): table = mmsms_table; n = TAB_SIZE (mmsms_table); break;
316 case SAP_NR(SIM_UL): table = sim_table; n = TAB_SIZE ( sim_table); break;
317 #ifdef FF_EM_MODE
318 case EM_Ul: table = em_ul_table; n = TAB_SIZE (em_ul_table); break;
319 #endif /* FF_EM_MODE */
320 case SAP_NR(RR_DL): table = rr_table; n = TAB_SIZE ( rr_table); break;
321 case SAP_NR(MDL_UL): table = mdl_table; n = TAB_SIZE ( mdl_table); break;
322 #ifdef GPRS
323 case MMGMM_UL: table = mmgmm_table; n = TAB_SIZE (mmgmm_table); break;
324 #else
325 case SAP_NR(MMREG_UL): table = mmreg_table; n = TAB_SIZE (mmreg_table); break;
326 #endif
327 #ifdef FF_EM_MODE
328 case EM_Dl: table = em_dl_table; n = TAB_SIZE (em_dl_table); break;
329 #endif /* FF_EM_MODE */
330 default : table = NULL; n = 0; break;
331 }
332
333 if (table != NULL )
334 {
335 if (PRIM_NR(opc) < n)
336 {
337 table += PRIM_NR(opc);
338 #ifdef PALLOC_TRANSITION
339 P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0;
340 #ifndef NO_COPY_ROUTING
341 P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER);
342 #endif /* NO_COPY_ROUTING */
343 #endif /* PALLOC_TRANSITION */
344 JUMP (table->func) (P2D(prim));
345
346 while (ENTITY_DATA->use_stored_entries)
347 {
348 ENTITY_DATA->use_stored_entries = FALSE;
349 mm_use_entry();
350 }
351
352 }
353 else
354 {
355 pei_not_supported (P2D(prim));
356 }
357 return PEI_OK;
358 }
359
360 #ifdef GSM_ONLY
361 PFREE (P2D(prim))
362 return PEI_ERROR;
363 #else
364 if (opc & SYS_MASK)
365 vsi_c_primitive (VSI_CALLER prim);
366 else
367 {
368 PFREE (P2D(prim))
369 return PEI_ERROR;
370 }
371 #endif
372 }
373 return PEI_OK;
374 }
375
376 #if defined (NEW_FRAME)
377 /*
378 +--------------------------------------------------------------------+
379 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
380 | STATE : code ROUTINE : mm_pei_primitive |
381 +--------------------------------------------------------------------+
382
383 PURPOSE : used to restart a stored primitive.
384
385 */
386 GLOBAL void mm_pei_primitive (T_PRIM * prim)
387 {
388 pei_primitive (prim);
389 }
390 #endif
391
392 /*
393 +--------------------------------------------------------------------+
394 | PROJECT : GSM-PS (8410) MODULE : SMS_PEI |
395 | STATE : code ROUTINE : pei_not_supported |
396 +--------------------------------------------------------------------+
397
398 PURPOSE : An unsupported primitive is received.
399
400 */
401
402 static void pei_not_supported (void *data)
403 {
404 TRACE_FUNCTION ("pei_not_supported()");
405
406 PFREE (data);
407 }
408
409 /*
410 +--------------------------------------------------------------------+
411 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
412 | STATE : code ROUTINE : pei_init |
413 +--------------------------------------------------------------------+
414
415 PURPOSE : Initialize Protocol Stack Entity
416
417 */
418
419 #if defined (NEW_FRAME)
420 LOCAL SHORT pei_init (T_HANDLE handle)
421 #else
422 GLOBAL T_PEI_RETURN pei_init (void)
423 #endif
424 {
425 #if defined (NEW_FRAME)
426 mm_handle = handle;
427 #endif
428
429 TRACE_FUNCTION ("pei_init()");
430
431 #ifdef TI_PS_HCOMM_CHANGE
432 if (!cl_hcom_all_handles_open())
433 {
434 return PEI_ERROR;
435 }
436 #else /* for hCommHandles backward compatibility */
437 if (hCommMMI < VSI_OK)
438 {
439 /*
440 * Open MMI (Layer 4)
441 */
442
443 if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK)
444 return PEI_ERROR;
445 }
446
447 if (hCommCC < VSI_OK)
448 {
449 if ((hCommCC = vsi_c_open (VSI_CALLER CC_NAME)) < VSI_OK)
450 return PEI_ERROR;
451 }
452
453 if (hCommSS < VSI_OK)
454 {
455 if ((hCommSS = vsi_c_open (VSI_CALLER SS_NAME)) < VSI_OK)
456 return PEI_ERROR;
457 }
458
459 if (hCommSMS < VSI_OK)
460 {
461 if ((hCommSMS = vsi_c_open (VSI_CALLER SMS_NAME)) < VSI_OK)
462 return PEI_ERROR;
463 }
464
465 if (hCommRR < VSI_OK)
466 {
467 if ((hCommRR = vsi_c_open (VSI_CALLER RR_NAME)) < VSI_OK)
468 return PEI_ERROR;
469 }
470
471 if (hCommDL < VSI_OK)
472 {
473 if ((hCommDL = vsi_c_open (VSI_CALLER DL_NAME)) < VSI_OK)
474 return PEI_ERROR;
475 }
476
477 if (hCommSIM < VSI_OK)
478 {
479 if ((hCommSIM = vsi_c_open (VSI_CALLER SIM_NAME)) < VSI_OK)
480 return PEI_ERROR;
481 }
482 #endif /* TI_PS_HCOMM_CHANGE */
483 #ifdef GPRS
484 if (hCommGMM < VSI_OK)
485 {
486 if ((hCommGMM = vsi_c_open (VSI_CALLER GMM_NAME)) < VSI_OK)
487 return PEI_ERROR;
488 }
489 #endif
490
491 /*
492 * Open Timer Resources
493 */
494
495 mm_init_mm_data ();
496
497 #ifdef FF_EM_MODE
498 em_init_mm_event_trace();
499 #endif /* FF_EM_MODE */
500
501 #if defined (OPTION_TIMER)
502 tim_init_timer ();
503 #endif
504 ccd_init ();
505
506 return PEI_OK;
507 }
508
509 /*
510 +--------------------------------------------------------------------+
511 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
512 | STATE : code ROUTINE : pei_timeout |
513 +--------------------------------------------------------------------+
514
515 PURPOSE : Process timeout
516
517 */
518 #if defined (NEW_FRAME)
519 LOCAL SHORT pei_timeout (USHORT index)
520 {
521 GET_INSTANCE_DATA;
522
523 tim_exec_timeout (index);
524
525 while (ENTITY_DATA->use_stored_entries)
526 {
527 ENTITY_DATA->use_stored_entries = FALSE;
528 mm_use_entry();
529 }
530
531 return PEI_OK;
532 }
533
534 #else
535
536 GLOBAL T_PEI_RETURN pei_timeout (T_VSI_THANDLE handle)
537 {
538 /*
539 * Set Timeout Flag according
540 * to timer handle
541 */
542 if (mm_act_handle NEQ handle)
543 tim_set_timeout_flag (handle, &t_flag);
544
545 #ifdef OPTION_TIMEOUT_SYNC
546 while (t_flag)
547 {
548 /*
549 * Handle Timeouts
550 */
551 tim_handle_timeout (&t_flag);
552 }
553 #else
554 vsi_c_awake (VSI_CALLER_SINGLE);
555 #endif
556
557 while (ENTITY_DATA->use_stored_entries)
558 {
559 ENTITY_DATA->use_stored_entries = FALSE;
560 mm_use_entry();
561 }
562
563 return PEI_OK;
564 }
565 #endif
566
567 #ifdef _SIMULATION_
568 /*
569 +--------------------------------------------------------------------+
570 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
571 | STATE : code ROUTINE : pei_exit |
572 +--------------------------------------------------------------------+
573
574 PURPOSE : Close Resources and terminate
575
576 */
577 #if defined (NEW_FRAME)
578 LOCAL SHORT pei_exit (void)
579 #else
580 GLOBAL T_PEI_RETURN pei_exit (void)
581 #endif
582 {
583 TRACE_FUNCTION ("pei_exit()");
584
585 /*
586 * clean up communication
587 */
588 #ifdef TI_PS_HCOMM_CHANGE
589 #else /* for hCommHandles backward compatibility */
590 vsi_c_close (VSI_CALLER hCommMMI);
591 hCommMMI = VSI_ERROR;
592
593 vsi_c_close (VSI_CALLER hCommCC);
594 hCommCC = VSI_ERROR;
595
596 vsi_c_close (VSI_CALLER hCommSS);
597 hCommSS = VSI_ERROR;
598
599 vsi_c_close (VSI_CALLER hCommSMS);
600 hCommSMS = VSI_ERROR;
601
602 vsi_c_close (VSI_CALLER hCommRR);
603 hCommRR = VSI_ERROR;
604
605 vsi_c_close (VSI_CALLER hCommDL);
606 hCommDL = VSI_ERROR;
607
608 vsi_c_close (VSI_CALLER hCommSIM);
609 hCommSIM = VSI_ERROR;
610 #endif /* TI_PS_HCOMM_CHANGE */
611 #ifdef GPRS
612 vsi_c_close (VSI_CALLER hCommGMM);
613 hCommGMM = VSI_ERROR;
614 #endif
615
616 return PEI_OK;
617 }
618 #endif /* _SIMULATION_ */
619
620 /*
621 +--------------------------------------------------------------------+
622 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
623 | STATE : code ROUTINE : pei_config |
624 +--------------------------------------------------------------------+
625
626 PURPOSE : Dynamic Configuration
627
628 */
629
630 /* Implements Measure#36 */
631 #if !defined (NCONFIG)
632 LOCAL const KW_DATA kwtab[] = {
633 #ifdef OPTION_TIMER
634 MM_TIMER_SET, TIMER_SET,
635 MM_TIMER_RESET, TIMER_RESET,
636 MM_TIMER_SPEED_UP, TIMER_SPEED_UP,
637 MM_TIMER_SLOW_DOWN, TIMER_SLOW_DOWN,
638 MM_TIMER_SUPPRESS, TIMER_SUPPRESS,
639 #endif
640 MM_T3212_CNT, T3212_CNT,
641 MM_USE_STORED_BCCH, USE_STORED_BCCH,
642 MM_FFS_RESET_EPLMN, FFS_RESET_EPLMN,
643 MM_FFS_READ_EPLMN, FFS_READ_EPLMN,
644 MM_FFS_READ_EPLMN_INIT, FFS_READ_EPLMN_INIT,
645 MM_FFS_WRITE_EPLMN, FFS_WRITE_EPLMN,
646 "", 0
647 };
648 #endif /* (NCONFIG) */
649
650 GLOBAL const KW_DATA partab[] = {
651 #ifdef OPTION_TIMER
652 T_REG_NAME, T_REGISTRATION,
653 T3210_NAME, T3210,
654 T3211_NAME, T3211,
655 T3212_NAME, T3212,
656 T3213_NAME, T3213,
657 T3220_NAME, T3220,
658 T3230_NAME, T3230,
659 T3240_NAME, T3240,
660 T_HPLMN_NAME, T_HPLMN,
661 #ifdef REL99
662 T3241_NAME, T3241,
663 #endif
664 #endif
665 "", 0
666 };
667
668 /* Implements Measure#36 */
669 #if !defined (NCONFIG)
670 #if defined (NEW_FRAME)
671 LOCAL SHORT pei_config (T_PEI_CONFIG inString)
672 #else
673 GLOBAL T_PEI_RETURN pei_config (T_PEI_CONFIG inString,
674 T_PEI_CONFIG outString)
675 #endif
676 {
677 GET_INSTANCE_DATA;
678 {
679 char * s = inString;
680 SHORT valno;
681 SHORT keyno;
682 char * keyw;
683 char * val [10];
684 #if defined (OPTION_TIMER)
685 BOOL t_man = FALSE;
686 SHORT t_num;
687 LONG t_val;
688 UBYTE t_mod;
689 #endif /* #if defined (OPTION_TIMER) */
690
691 TRACE_FUNCTION ("pei_config()");
692
693 TRACE_EVENT (s);
694
695 #if defined TM_SPECIAL
696 if (!strcmp (inString, "RESET_2"))
697 {
698 /*
699 * Hardware Reset
700 */
701 csf_hardware_reset_2 ();
702 return PEI_OK;
703 }
704
705 if (!strcmp (inString, "RESET_3"))
706 {
707 /*
708 * Init RF
709 */
710 csf_hardware_reset_3 ();
711 return PEI_OK;
712 }
713 #endif /* #if defined TM_SPECIAL */
714
715 tok_init(s);
716
717 /*
718 * Parse next keyword and number of variables
719 */
720 while ((valno = tok_next(&keyw,val)) != TOK_EOCS)
721 {
722 switch ((keyno = tok_key((KW_DATA *)kwtab,keyw)))
723 {
724 case TOK_NOT_FOUND:
725 TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword");
726 break;
727
728 #if defined (OPTION_TIMER)
729 case TIMER_SET:
730 if (valno EQ 2)
731 {
732 t_man = TRUE;
733 t_num = tok_key((KW_DATA *)partab,val[0]);
734 t_mod = TIMER_SET;
735 t_val = atoi(val[1]);
736 if (t_val < 0L)
737 t_val = 0L;
738 }
739 else
740 {
741 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters");
742 }
743 break;
744 case TIMER_RESET:
745 case TIMER_SUPPRESS:
746 if (valno == 1)
747 {
748 t_man = TRUE; /* Timermanipulation */
749 t_num = tok_key((KW_DATA *)partab,val[0]);
750 t_mod = (UBYTE)keyno;
751 t_val = 0L;
752 }
753 else
754 {
755 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters");
756 }
757 break;
758 case TIMER_SPEED_UP:
759 case TIMER_SLOW_DOWN:
760 if (valno == 2)
761 {
762 t_man = TRUE;
763 t_num = tok_key((KW_DATA *)partab,val[0]);
764 t_mod = (UBYTE)keyno;
765 t_val = atoi(val[1]);
766 if (t_val <= 0L)
767 t_val = 1L;
768 }
769 else
770 {
771 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters");
772 }
773 break;
774 #endif /* #if defined (OPTION_TIMER) */
775 case T3212_CNT:
776 if (valno == 1)
777 mm_data->t3212_cfg_counter = atoi(val[0]);
778 else
779 {
780 TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters");
781 }
782 break;
783
784 case USE_STORED_BCCH:
785 mm_data->config_use_stored_bcch = TRUE;
786 TRACE_EVENT ("MS uses stored BCCH lists also with test SIM");
787 break;
788
789 case FFS_RESET_EPLMN:
790 mm_reset_ffs();
791 break;
792
793 case FFS_READ_EPLMN:
794 mm_read_ffs();
795 mm_display_eplmn();
796 break;
797
798 case FFS_READ_EPLMN_INIT:
799 mm_read_ffs_init();
800 break;
801
802 case FFS_WRITE_EPLMN:
803 {
804 UBYTE samplelist[18] ={'S','A','M','P','L','E',' ','L','I','S','T',' ','E','P','L','M','N'};
805 memcpy(mm_data->reg.eqv_plmns.eqv_plmn_list, samplelist, 18);
806 mm_write_eplmn_to_ffs();
807 }
808 break;
809
810 default:
811 break;
812 } /* switch */
813
814 #if defined (OPTION_TIMER)
815 /*
816 * If timer manipulation
817 */
818
819 if (t_man)
820 {
821 t_man = FALSE;
822 /*lint -e644 variable may not have been initialized*/
823 if (t_num >= 0)
824 tim_config_timer ( (UBYTE) t_num, t_mod, t_val);
825 else
826 {
827 TRACE_ERROR ("[PEI_CONFIG]: Parameter out of Range");
828 }
829 /*lint +e644 variable may not have been initialized*/
830 } /* if (t_man) */
831 #endif /* #if defined (OPTION_TIMER) */
832 } /* while */
833 }
834 return PEI_OK;
835 }
836 #endif /* (NCONFIG) */
837
838
839 #if defined (NEW_FRAME)
840 /*
841 +--------------------------------------------------------------------+
842 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
843 | STATE : code ROUTINE : mm_pei_config |
844 +--------------------------------------------------------------------+
845
846 PURPOSE : Dynamic Configuration
847
848 */
849 /* Implements Measure#36 */
850 #if !defined (NCONFIG)
851 GLOBAL SHORT mm_pei_config ( char * inString, char * dummy )
852 {
853 pei_config ( inString );
854
855 return PEI_OK;
856 }
857 #endif /* (NCONFIG) */
858 #endif
859
860 /*
861 +--------------------------------------------------------------------+
862 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
863 | STATE : code ROUTINE : pei_monitor |
864 +--------------------------------------------------------------------+
865
866 PURPOSE : Monitoring of physical Parameters
867
868 */
869 #if defined (NEW_FRAME)
870 LOCAL SHORT pei_monitor (void ** monitor)
871 #else
872 GLOBAL T_PEI_RETURN pei_monitor (void ** monitor)
873 #endif
874 {
875 TRACE_FUNCTION ("pei_monitor()");
876
877 /* Implements Measure#32: Row 76 */
878
879 *monitor = &mm_mon;
880
881 return PEI_OK;
882 }
883
884
885 /*
886 +--------------------------------------------------------------------+
887 | PROJECT : GSM-PS (6147) MODULE : MM_PEI |
888 | STATE : code ROUTINE : pei_create |
889 +--------------------------------------------------------------------+
890
891 PURPOSE : Create the Protocol Stack Entity
892
893 */
894
895
896 #if defined (NEW_FRAME)
897
898 GLOBAL SHORT mm_pei_create (T_PEI_INFO **info)
899 {
900 static const T_PEI_INFO pei_info =
901 {
902 "MM",
903 {
904 pei_init,
905 #ifdef _SIMULATION_
906 pei_exit,
907 #else
908 NULL,
909 #endif
910 pei_primitive,
911 pei_timeout,
912 NULL, /* no signal function */
913 NULL, /* no run function */
914 /* Implements Measure#36 */
915 #if defined(NCONFIG)
916 NULL, /* no pei_config function */
917 #else /* not (NCONFIG) */
918 pei_config,
919 #endif /* (NCONFIG) */
920 pei_monitor,
921 },
922 1024, /* Stack Size */
923 10, /* Queue Entries */
924 195, /* Priority */
925 NUM_OF_MM_TIMERS, /* number of timer */
926 PASSIVE_BODY|COPY_BY_REF|PRIM_NO_SUSPEND /* flags */
927 };
928
929 TRACE_FUNCTION ("pei_create()");
930
931 /*
932 * Close Resources if open
933 */
934
935 #ifdef _SIMULATION_
936 if (first_access)
937 first_access = FALSE;
938 else
939 pei_exit ();
940 #endif
941
942 /*
943 * Export startup configuration data
944 */
945
946 *info = (T_PEI_INFO *)&pei_info;
947
948 pcm_Init ();
949
950 return PEI_OK;
951 }
952
953 #else
954
955 T_PEI_RETURN pei_create (T_VSI_CNAME * name)
956 {
957 TRACE_FUNCTION ("pei_create()")
958
959 /*
960 * Close Resources if open
961 */
962
963 #ifdef _SIMULATION_
964 if (first_access)
965 first_access = FALSE;
966 else
967 pei_exit ();
968 #endif
969
970 /*
971 * Initialize entity data
972 */
973
974 *name = MM_NAME;
975
976 pcm_Init ();
977
978 return PEI_OK;
979 }
980
981 #endif
982
983 #endif