comparison gsm-fw/g23m-gsm/mm/mm.h @ 673:2f7df7a314f8

gsm-fw/g23m-gsm subtree: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 28 Sep 2014 23:20:04 +0000
parents
children 470f87d36741
comparison
equal deleted inserted replaced
672:0dc6f9e8e980 673:2f7df7a314f8
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GSM-PS (8410)
4 | Modul : MM
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 : Definitions for the Protocol Stack Entity
18 | Radio Resource
19 +-----------------------------------------------------------------------------
20 */
21
22 #ifndef MM_H
23 #define MM_H
24
25 #ifdef GPRS
26 #include "mm_gprs.h"
27 #endif /* GPRS */
28 #if defined (TI_PS_HCOMM_CHANGE)
29 #include "cl_hComm_handle.h"
30 #endif
31
32 #ifdef TI_GSP_STR2IND_S2I_STRING
33 typedef unsigned int T_S2I_STRING;
34 #else
35 typedef char * T_S2I_STRING;
36 #define S2I_STRING(x) (x)
37 #endif
38
39 #ifdef TI_PS_OP_VSI_NO_CALL_ID
40 #define TIMER_START(C,I,T) vsi_t_start_nc(I,T)
41 #define TIMER_PSTART(C,I,T,R) vsi_t_pstart_nc(I,T,R)
42 #define TIMER_STOP(C,I) vsi_t_stop_nc(I)
43 #define TIMER_STATUS(C,I,T) vsi_t_status_nc(I,T)
44 #define SUSPEND_SELF(C,T) vsi_t_sleep_nc(T)
45 #define SYSTEM_TIME(C,T) vsi_t_time_nc(T)
46 #else /* TI_PS_OP_VSI_NO_CALL_ID */
47 #define TIMER_START(C,I,T) vsi_t_start(C,I,T)
48 #define TIMER_PSTART(C,I,T,R) vsi_t_pstart(C,I,T,R)
49 #define TIMER_STOP(C,I) vsi_t_stop(C,I)
50 #define TIMER_STATUS(C,I,T) vsi_t_status(C,I,T)
51 #define SUSPEND_SELF(C,T) vsi_t_sleep(C,T)
52 #define SYSTEM_TIME(C,T) vsi_t_time(C,T)
53 #endif /* TI_PS_OP_VSI_NO_CALL_ID */
54
55 #if !defined(_SIMULATION_) && defined(WIN32)
56 #define _SIMULATION_
57 #endif /* !_SIMULATION_ && WIN32 */
58
59
60 /*==== TEST =====================================================*/
61
62 /*
63 * Dynamic Configuration Numbers
64 */
65 #define TIMER_SET 1
66 #define TIMER_RESET 2
67 #define TIMER_SPEED_UP 3
68 #define TIMER_SLOW_DOWN 4
69 #define TIMER_SUPPRESS 5
70 #define T3212_CNT 6
71 #define USE_STORED_BCCH 7
72 #define FFS_READ_EPLMN 8
73 #define FFS_WRITE_EPLMN 9
74 #define FFS_RESET_EPLMN 10
75 #define FFS_READ_EPLMN_INIT 11
76
77
78 #define ENTITY_DATA mm_data
79
80 /*
81 * PLMN constants
82 */
83 #define MAX_FORB_PLMN_ID 8 /* Arbitrary, >= MAX_SIM_FORB_PLMN_ID */
84 #define MAX_SIM_FORB_PLMN_ID 4
85 #define UBYTES_PER_PLMN 3 /* Number of UBYTEs for packed PLMN */
86
87 #ifdef REL99
88 #define UBYTES_PER_PLMN_WITH_ACC_TECH 5 /* Number of UBYTEs for packed PLMN with access technology*/
89 #endif
90
91 #ifdef GPRS
92 #define MAX_GPRS_FORB_PLMN_ID 4
93 #endif /* #ifdef GPRS */
94
95 #define MAX_PREF_PLMN_ID (MAX_PREF_PLMN/UBYTES_PER_PLMN)
96
97 #define SIZE_LOC_INFO 11
98 #define PD_MM_TI_0 PD_MM
99 #ifdef REL99
100 #define MAX_DEFINED_CAUSES 23
101 #else
102 #define MAX_DEFINED_CAUSES 22
103 #endif
104 #define TMSI_INVALID_VALUE 0xFFFFFFFFL
105 #define LAC_INVALID_VALUE 0xFFFE
106
107 /*
108 * initial HPLMN search after switch on delayed for ms
109 */
110 #define HPLMN_INITIAL_DELAY 120000 /* 2 minutes */
111
112 /*
113 * HPLMN search constants in steps of 6 minutes
114 */
115 #define HPLMN_REARM_DELAY 1 /* 6 minutes */
116 #define HPLMN_DEF_SEARCH_PERIOD 10 /* 1 hour */
117 #define HPLMN_MAX_SEARCH_PERIOD 80 /* 8 hours */
118
119 /*
120 * Flags for creating a plmn list
121 */
122 #define WITH_OTHER_PLMNS 0 /* Non-forbidden, RPLMN no or low prio */
123 #define WITH_ALL_PLMNS 1 /* All available PLMNs */
124 #define WITH_RPLMN 2 /* Non-forbidden */
125
126 /*
127 * Timer Identifier
128 */
129 #define T_REGISTRATION 0
130 #define T3210 1
131 #define T3211 2
132 #define T3212 3
133 #define T3213 4
134 #define T3220 5
135 #define T3230 6
136 #define T3240 7
137 #define T_HPLMN 8
138 #ifdef REL99
139 #define T3241 9
140 #define NUM_OF_MM_TIMERS 10
141 #else
142 #define NUM_OF_MM_TIMERS 9
143 #endif
144
145 #define MAX_REST_T3213 2
146
147
148 /*
149 * CM_SERVICE_TYPES
150 */
151 #define NO_CM_SERVICE 0
152 #define CALL_SERVICE ST_MOC
153 #define EMERGENCY_SERVICE ST_EMERGENCY
154 #define SMS_SERVICE ST_SMS
155 #define SS_SERVICE ST_SS
156
157
158 /*
159 * MM Cause
160 */
161 #define MM_CAUSE MMCM_MM_CAUSE
162
163
164
165 /*
166 * COMPONENTS
167 */
168 #define CC_COMP MMCM_ORG_ENTITY_CC
169 #define SS_COMP MMCM_ORG_ENTITY_SS
170 #define SMS_COMP MMCM_ORG_ENTITY_SMS
171
172 #define REG_COMP 3
173 #define TIMEOUT 4
174
175 /*
176 * FAILURES
177 */
178 #define OPTIONAL_INFO_ERROR 102
179
180 /*
181 * LOC-UPD-TYPES
182 */
183 #define NORMAL_LUP 0
184 #define PERIODIC_LUP 1
185 #define IMSI_ATTACH_LUP 2
186 #define NOT_RUNNING 3
187
188 /*
189 * MISC.CONSTANTS FOR QEUEING
190 */
191 #define ENTRY_FREE 0
192 #define USE 1
193 #define STORED 2
194
195 /*
196 * Constants describing the stored information type
197 */
198 #define NO_ENTRY 0
199 #define PRIMITIVE_ENTRY 1
200 #define EVENT_ENTRY 2
201
202 /*
203 * UPDATE-STATUS
204 */
205 #define MS_UPDATED 0
206 #define MS_NOT_UPDATED 1
207 #define MS_LA_NOT_ALLOWED 3
208
209
210 typedef enum
211 {
212 MSG_RR_ACT,
213 MSG_MM_REE,
214 MSG_MM_CIPH,
215 MSG_MM_MODE
216 }T_MSG_TYPE;
217
218 typedef enum
219 {
220 PRIM_EST_IND,
221 PRIM_DATA_IND
222 }T_PRIM_TYPE;
223
224
225 /*
226 * Macros
227 */
228 #ifdef FRAME_OFFSET_ZERO
229
230 #define GET_PD(s,p) p=s.buf[3] & 0x0F
231 #define GET_TI(s,t) t=(s.buf[3] & 0xF0)>>4
232
233 #else
234
235 #define GET_PD(s,p) ccd_decodeByte(s.buf, (USHORT)(s.o_buf+4), 4, &p)
236 #define GET_TI(s,t) ccd_decodeByte(s.buf, s.o_buf, 4, &t)
237
238 #endif
239
240 #define MSG(TYPE) ((T_##TYPE *)(_decodedMsg))
241 #define USE_STORED_ENTRIES() { ENTITY_DATA->use_stored_entries = TRUE; }
242
243 /*
244 * The assert() macro as defined by the frame stops the task,
245 * not only in simulation but also on the target. For the
246 * simulation this is a desired behaviour, for the target it is not.
247 */
248 #ifndef WIN32
249 #undef assert
250 #define assert(x) if (!(x)) { TRACE_ERROR ("Assertion failed"); }
251 #endif
252
253 /*
254 * Bitoffset for encoding/decoding
255 */
256 #define ENCODE_OFFSET 24
257
258 /*
259 * a modified version of the S/GET_STATE macros for tracing CM_INST states
260 */
261
262 #define CMSTATE(PROCESS,N) ENTITY_DATA->conn_state[(PROCESS)][(N)]
263
264 #ifdef NTRACE
265 #define CM_SET_STATE(PROCESS,N,STATE) CMSTATE((PROCESS),(N)) = (STATE)
266 #define CM_GET_STATE(PROCESS,N) CMSTATE((PROCESS),(N))
267 #else
268 #if defined (NEW_FRAME)
269 #define CM_SET_STATE(PROCESS,N,STATE)\
270 {\
271 vsi_o_strace (VSI_CALLER\
272 PROCESS_NAME_CM[(PROCESS)],\
273 STATE_CM_NAME [(PROCESS)] [ CMSTATE(PROCESS,N) ],\
274 STATE_CM_NAME [(PROCESS)] [ (STATE) ]);\
275 CMSTATE((PROCESS),(N)) = (STATE);\
276 }
277
278 #define CM_GET_STATE(PROCESS,N)\
279 (vsi_o_strace (VSI_CALLER\
280 PROCESS_NAME_CM[(PROCESS)],\
281 STATE_CM_NAME [(PROCESS)] [ CMSTATE((PROCESS),(N)) ],\
282 NULL), CMSTATE((PROCESS),(N)))
283 #else
284 #define CM_SET_STATE(PROCESS,N,STATE)\
285 CMSTATE((PROCESS),(N)) =\
286 vsi_o_strace (VSI_CALLER\
287 PROCESS_NAME_CM[(PROCESS)],\
288 STATE_CM_NAME [(PROCESS)] [ CMSTATE(PROCESS,N) ],\
289 STATE_CM_NAME [(PROCESS)] [ (STATE) ],\
290 (STATE) )
291 #define CM_GET_STATE(PROCESS,N)\
292 vsi_o_strace (VSI_CALLER\
293 PROCESS_NAME_CM[(PROCESS)],\
294 STATE_CM_NAME [(PROCESS)] [ CMSTATE((PROCESS),(N)) ],\
295 NULL ,\
296 CMSTATE((PROCESS),(N)) )
297 #endif /* NEW_FRAME */
298 #endif /* NTRACE */
299
300 /*
301 * buffer sizes
302 */
303 #define SIZE_BCCH 16
304 #define NUM_OF_CM_ENT 3
305 #define NUM_OF_CONN_PER_CM_ENT 16
306
307 /*
308 * CONNECTION STATES
309 */
310 #define CM_IDLE 0
311 #define CM_PENDING 1
312 #define CM_ACTIVE 2
313 #define CM_REEST_PENDING 3
314 #define CM_STORE 4
315 #define CM_NOT_IDLE 0xff
316
317 EXTERN const char * const * const STATE_CM_NAME[];
318
319 #define STATE_CM_CC_NAME_INIT \
320 "CM_CC_IDLE", \
321 "CM_CC_PENDING", \
322 "CM_CC_ACTIVE", \
323 "CM_CC_REEST_PENDING", \
324 "CM_CC_STORE"
325
326 #define STATE_CM_SS_NAME_INIT \
327 "CM_SS_IDLE", \
328 "CM_SS_PENDING", \
329 "CM_SS_ACTIVE", \
330 "CM_SS_REEST_PENDING", \
331 "CM_SS_STORE"
332
333 #define STATE_CM_SMS_NAME_INIT \
334 "CM_SMS_IDLE", \
335 "CM_SMS_PENDING", \
336 "CM_SMS_ACTIVE", \
337 "CM_SMS_REEST_PENDING", \
338 "CM_SMS_STORE"
339
340 /*
341 * CM manages 3 (NUM_OF_CM_ENT) states: CC, SS, SMS
342 */
343 #define STATE_CC CC_COMP
344 #define STATE_SS SS_COMP
345 #define STATE_SMS SMS_COMP
346
347 #define UNSPEC 0
348 #define CM_LUP_TRIGGER 1
349
350 EXTERN const char * const
351 PROCESS_NAME_CM[];
352 #define PROCESS_NAME_CM_INIT \
353 "STATE_CC" , \
354 "STATE_SS" , \
355 "STATE_SMS"
356
357 /*
358 * A definition of the states of CMSTATE is provided in MM_PEI.C
359 */
360 #if defined(MM_PEI_C) && ! defined(NTRACE)
361 LOCAL const char * const STATE_CC_NAME [] = { STATE_CM_CC_NAME_INIT };
362 LOCAL const char * const STATE_SS_NAME [] = { STATE_CM_SS_NAME_INIT };
363 LOCAL const char * const STATE_SMS_NAME[] = { STATE_CM_SMS_NAME_INIT };
364 GLOBAL const char * const * const STATE_CM_NAME [] = { STATE_CC_NAME,
365 STATE_SS_NAME,
366 STATE_SMS_NAME };
367 GLOBAL const char * const PROCESS_NAME_CM[] = { PROCESS_NAME_CM_INIT };
368
369 #endif
370
371 /*
372 * States of the Mobility Management
373 */
374 #define MM_NULL 0
375 #define MM_LUP_INITIATED 3
376 #define MM_WAIT_FOR_OUTG_MM_CONN 5
377 #define MM_CONN_ACTIVE 6
378 #define MM_IMSI_DETACH_INIT 7
379 #define MM_PROCESS_PROMPT 8
380 #define MM_WAIT_FOR_NW_CMD 9
381 #define MM_LUP_REJECTED 10
382 #define MM_WAIT_FOR_RR_CONN_LUP 13
383 #define MM_WAIT_FOR_RR_CONN_MM 14
384 #define MM_WAIT_FOR_RR_CONN_DETACH 15
385 #define MM_WAIT_FOR_REESTABLISH 17
386 #define MM_WAIT_FOR_RR_ACTIVE 18
387 #define MM_IDLE_NORMAL_SERVICE 19 /* 19.1 */
388 #define MM_LOCATION_UPDATING_PENDING 23 /* Not defined for GSM only stack */
389 #define MM_IMSI_DETACH_PENDING 24 /* Not defined for GSM only stack */
390 #ifdef REL99
391 #define MM_RR_CONN_RELEASE_NOT_ALLOWED 25
392 #define MM_IDLE_ATTEMPT_TO_UPDATE 26 // 19.2
393 #define MM_IDLE_LIMITED_SERVICE 27 // 19.3
394 #define MM_IDLE_NO_IMSI 28 // 19.4
395 #define MM_IDLE_NO_CELL_AVAILABLE 29 // 19.5
396 #define MM_IDLE_LUP_NEEDED 30 // 19.6, not used by GSM only stack
397 #define MM_IDLE_PLMN_SEARCH 31 // 19.7
398 #define MM_PLMN_SEARCH_NORMAL_SERVICE 32 // 19.8
399 #else
400 #define MM_IDLE_ATTEMPT_TO_UPDATE 25 // 19.2
401 #define MM_IDLE_LIMITED_SERVICE 26 // 19.3
402 #define MM_IDLE_NO_IMSI 27 // 19.4
403 #define MM_IDLE_NO_CELL_AVAILABLE 28 // 19.5
404 #define MM_IDLE_LUP_NEEDED 29 // 19.6, not used by GSM only stack
405 #define MM_IDLE_PLMN_SEARCH 30 // 19.7
406 #define MM_PLMN_SEARCH_NORMAL_SERVICE 31 // 19.8
407 #endif
408
409 /* N950 Memory Optimization - Implements Measure #39*/
410 EXTERN T_S2I_STRING const STATE_MM_NAME[];
411 #ifdef GPRS
412
413 /*
414 * States of CM establishment if GPRS is present
415 */
416 #define CM_GPRS_EST_IDLE 0 /* No outstanding MMGMM_CM_ESTABLISH_RES */
417 #define CM_GPRS_EST_PEND 1 /* MMGMM_CM_ESTABLISH_RES outstanding */
418 #define CM_GPRS_EMERGE_PEND 2 /* MMGMM_CM_EMERGENCY_RES outstanding */
419 #define CM_GPRS_EST_OK 3 /* MM is allowed to establish RR connection */
420
421 /*
422 * States for connection management. You may think of a process
423 * in terms of SDL here, but this is not obvious by looking into the C code,
424 * as the separation of state machines is not elaborated at all.
425 */
426 EXTERN const char * const STATE_GPRS_CM_EST_NAME[];
427 #define STATE_GPRS_CM_EST_INIT \
428 "CM_GPRS_EST_IDLE", \
429 "CM_GPRS_EST_PEND", \
430 "CM_GPRS_EMERGE_PEND", \
431 "CM_GPRS_EST_OK"
432
433 /*
434 * States for registration control.
435 * Don't think of a state and a process in term of SDL here.
436 * The only reason why this is a state and not only a ordinary variable
437 * is because it eases debugging a lot for now.
438 */
439 EXTERN const char * const STATE_REG_TYPE_NAME[];
440 #endif /* GPRS */
441
442 /*
443 * MM manages 1 (NUM_OF_MM_STATES) state (GSM only) : MM
444 * MM manages 3 (NUM_OF_MM_STATES) states (GPRS present): MM, GPRS_CM_EST, REG_TYPE
445 */
446 #ifdef OPTION_MULTITHREAD
447 #define PROCESS_NAME _ENTITY_PREFIXED(PROCESS_NAME)
448 #endif
449
450 EXTERN const char * const PROCESS_NAME[];
451 #ifdef GPRS
452 #define STATE_MM 0
453 #define STATE_GPRS_CM_EST 1
454 #define STATE_REG_TYPE 2
455 #define NUM_OF_MM_STATES 3
456 #define PROCESS_NAME_INIT \
457 "MM", \
458 "GPRS_CM_EST", \
459 "REG_TYPE"
460 #else
461 #define STATE_MM 0
462 #define NUM_OF_MM_STATES 1
463 #define PROCESS_NAME_INIT \
464 "MM"
465 #endif /* GPRS */
466
467 /*
468 * A definition of the states is provided in MM_PEI.C
469 */
470 #if defined(MM_PEI_C) && ! defined(NTRACE)
471 /* N950 Memory Optimization - Implements Measure #39*/
472 GLOBAL T_S2I_STRING const STATE_MM_NAME[] =
473 {
474 S2I_STRING("MM_NULL"),
475 S2I_STRING("MM_1_INVALID"),
476 S2I_STRING("MM_2_INVALID"),
477 S2I_STRING("MM_LUP_INITIATED"),
478 S2I_STRING("MM_4_INVALID"),
479 S2I_STRING("MM_WAIT_FOR_OUTG_MM_CONN"),
480 S2I_STRING("MM_CONN_ACTIVE"),
481 S2I_STRING("MM_IMSI_DETACH_INIT"),
482 S2I_STRING("MM_PROCESS_PROMPT"),
483 S2I_STRING("MM_WAIT_FOR_NW_CMD"),
484 S2I_STRING("MM_LUP_REJECTED"),
485 S2I_STRING("MM_11_INVALID"),
486 S2I_STRING("MM_12_INVALID"),
487 S2I_STRING("MM_WAIT_FOR_RR_CONN_LUP"),
488 S2I_STRING("MM_WAIT_FOR_RR_CONN_MM"),
489 S2I_STRING("MM_WAIT_FOR_RR_CONN_DETACH"),
490 S2I_STRING("MM_16_INVALID"),
491 S2I_STRING("MM_WAIT_FOR_REESTABLISH"),
492 S2I_STRING("MM_WAIT_FOR_RR_ACTIVE"),
493 S2I_STRING("MM_IDLE_NORMAL_SERVICE"),
494 S2I_STRING("MM_20_INVALID"),
495 S2I_STRING("MM_21_INVALID"),
496 S2I_STRING("MM_22_INVALID"),
497 S2I_STRING("MM_LOCATION_UPDATING_PENDING"),
498 S2I_STRING("MM_IMSI_DETACH_PENDING"),
499 #ifdef REL99
500 S2I_STRING("MM_RR_CONN_RELEASE_NOT_ALLOWED"),
501 #endif
502 S2I_STRING("MM_IDLE_ATTEMPT_TO_UPDATE"),
503 S2I_STRING("MM_IDLE_LIMITED_SERVICE"),
504 S2I_STRING("MM_IDLE_NO_IMSI"),
505 S2I_STRING("MM_IDLE_NO_CELL_AVAILABLE"),
506 S2I_STRING("MM_IDLE_LUP_NEEDED"),
507 S2I_STRING("MM_IDLE_PLMN_SEARCH"),
508 S2I_STRING("MM_PLMN_SEARCH_NORMAL_SERVICE")
509 };
510 #ifdef GPRS
511
512 GLOBAL const char * const STATE_GPRS_CM_EST_NAME[] =
513 { STATE_GPRS_CM_EST_INIT };
514
515 GLOBAL const char * const STATE_REG_TYPE_NAME[] =
516 { "REG_GPRS_INACTIVE",
517 "REG_REMOTE_CONTROLLED",
518 "REG_CELL_SEARCH_ONLY"
519 };
520
521 #endif /* GPRS */
522 GLOBAL const char * const PROCESS_NAME[] = { PROCESS_NAME_INIT };
523 #endif /* defined(MM_PEI_C) && ! defined(NTRACE) */
524
525 #ifndef NTRACE
526 #define UNEXPECTED_IN_STATE "Unexpected in state"
527 #define UNEXPECTED_DEFAULT "Unexpected default"
528 #define UNEXPECTED_PARAMETER "Unexpected parameter"
529 #define PRIMITIVE_IGNORED "Primitive ignored"
530 #endif
531
532 /*
533 * State of elementary file after SIM_FILE_CHANGE_IND
534 */
535 #define SAT_UNCHANGED 0 /* SAT didn't change the file */
536 #define SAT_READ_FILE 1 /* SAT changed file, still to read */
537 #define SAT_PEND_CNF 2 /* SIM_READ_REQ underway for elementary file */
538 #define SAT_PEND_ACT 3 /* File read, but not yet activated */
539
540 /*
541 * Get registration type. Use this macro to make it easy for the optimizer
542 * to optimize some expressions away if compiling a GSM only protocol stack.
543 * These macros help to avoid making an #ifdef grave from MM.
544 */
545 #ifdef GPRS
546 #define mm_gsm_alone() (GET_STATE (STATE_REG_TYPE) EQ REG_GPRS_INACTIVE)
547 #define mm_cm_est_allowed() (GET_STATE (STATE_GPRS_CM_EST) EQ CM_GPRS_EST_OK)
548 #define mm_lup_allowed_by_gmm() (GET_STATE (STATE_REG_TYPE) NEQ REG_CELL_SEARCH_ONLY)
549 #else
550 #define mm_gsm_alone() TRUE
551 #define mm_cm_est_allowed() TRUE
552 #define mm_lup_allowed_by_gmm() TRUE
553 #endif /* GPRS */
554
555 #define EPLMNLIST_SIZE 6
556
557 /******************Specially for Cingular********************/
558 #define MAX_CINGULAR_PLMN 14
559
560 /*==== TYPES ======================================================*/
561
562 typedef struct
563 {
564 /* IMSI EPLMNList was received with */
565 T_imsi_struct eqv_plmn_imsi;
566
567 /* Contains a list of Equivalent PLMNs provided by the network. The list is
568 * replaced or deleted at the end of each location update procedure, routing
569 * area update procedure and GPRS attach procedure. */
570 UBYTE eqv_plmn_list[EPLMNLIST_SIZE*UBYTES_PER_PLMN];
571 } T_ffs_eplmn_imsi;
572
573
574 typedef struct
575 {
576 /* Access class for RR from the SIM */
577 USHORT acc_class;
578
579 /* PLMN on which MM actually tries to register */
580 T_plmn actual_plmn;
581
582 /* Room for BCCH information from the SIM/RR.
583 * The better way would be to define this as T_bcch_info */
584 UBYTE bcch[SIZE_BCCH];
585
586 /* TRUE if the BCCH information shall be used. The sense of this variable
587 * is questionable */
588 BOOL bcch_encode;
589
590 /* Cell test mode, possible values are
591 * CELL_TEST_ENABLE and CELL_TEST_DISABLE */
592 UBYTE cell_test;
593
594 /* The ciphering key sequence number */
595 UBYTE cksn;
596
597 /* The list of forbidden PLMNs, copy of SIM data */
598 UBYTE forb_plmn[MAX_FORB_PLMN_ID * UBYTES_PER_PLMN];
599
600 #ifdef GPRS
601 /* The list of forbidden PLMNs for GPRS services */
602 UBYTE gprs_forb_plmn[MAX_GPRS_FORB_PLMN_ID * UBYTES_PER_PLMN];
603 #endif /* #ifdef GPRS */
604
605 /* The PLMN which sent recently a LUP reject with cause #13 */
606 T_plmn low_prio_plmn;
607
608 /* The IMSI, copy of SIM data */
609 T_imsi_struct imsi_struct;
610
611 /* The ciphering key */
612 UBYTE kc[MAX_KC];
613
614 /* The location area where the mobile currently is registered */
615 T_loc_area_ident lai;
616
617 /* Operation mode. Valid flag v_op set to valid after first reg. attempt
618 * Also contains information whether a sim and a test sim is inserted. */
619 T_op op;
620
621 /* Length of MNC in IMSI.SIM should send the length of mnc and MM should use
622 * this value to see if third digit of MNC is valid or not
623 */
624 U8 length_mnc;
625
626 /* The found PLMNs during network search */
627 UBYTE plmn[MAX_PLMN_ID * UBYTES_PER_PLMN];
628
629 /* The LACs of the found PLMNs */
630 USHORT plmn_lac [MAX_PLMN_ID];
631
632 /* The reception levels of the found PLMNs */
633 UBYTE plmn_rx [MAX_PLMN_ID];
634
635 #ifdef GPRS
636 /* The GPRS capabilities of the found PLMNs */
637 UBYTE gprs_status[MAX_PLMN_ID];
638
639 /* The indicated value of the TMSI */
640 ULONG indicated_tmsi;
641 #endif /* #ifdef GPRS */
642
643 /* Number of found PLMN */
644 UBYTE plmn_cnt;
645
646 /* Index of currently checked PLMN in automatic mode */
647 UBYTE plmn_index;
648
649 /* Preferred PLMN list */
650 UBYTE pref_plmn[MAX_PREF_PLMN_ID * UBYTES_PER_PLMN];
651
652 #ifdef REL99
653
654 /*
655 * Actual length of User controlled PLMN Selector with Access Technology (EFPLMNwAcT)
656 * as indicated in sim_mm_insert_ind
657 */
658 USHORT sim_ucps_at_len;
659 /*
660 * Actual length of Operator controlled PLMN Selector with Access Technology (EFOPLMNwAcT)
661 * as indicated in sim_mm_insert_ind
662 */
663 USHORT sim_ocps_at_len;
664
665 /*
666 * Flag indicates which SIM EFs are being used for pref_plmn
667 * TRUE: Indicated SIM EFs EFPLMNwAcT and EFOPLMNwAcT are being used.
668 * FALSE: Indicated SIM EF EFPLMNsel is being used.
669 */
670 BOOL sim_uocps_at_used;
671 #endif
672
673 /*Actual length of PLMN Selector (EFPLMNsel) as indicated in sim_mm_insert_ind*/
674 USHORT sim_plmnsel_len;
675
676 /*
677 * Flag indicates if the SIM INSERT INDICATION is in progress i.e. after SIM_MM_INSERT_IND,
678 * MM is reading SIM files.
679 * TRUE: SIM MM insert indication and Reading of files is in progress
680 */
681 BOOL sim_read_in_progress;
682
683 /* This variable will be used to decide if SIM_SYNC_REQ should be sent or not.
684 * After receiving SIM_MM_INSERT_IND, MM should respond with a SIM_SYNC_REQ.
685 * This SIM_SYNC_REQ will be sent after reading either EFPLMNSel or EFPLMNwAct
686 * and EFOPLMNwAct
687 */
688 BOOL sim_sync_req_pending;
689
690 /*SET true is sim file update indication is received*/
691 BOOL sim_file_upd_ind_rec;
692
693
694
695 /* HPLMN search period, this is forwarded to RR and not evaluated by MM */
696 UBYTE thplmn;
697
698 /* TMSI, copy of the SIM data */
699 ULONG tmsi;
700
701 /* The update state as it is on the SIM. Possible values are
702 * MS_UPDATED, MS_NOT_UPDATED and MS_LA_NOT_ALLOWED */
703 UBYTE update_stat;
704
705 /* MMXXX_REG_CNF sent to MMI only if this has not already been done
706 * after last registration attempt / last loss of service or
707 * the cell has changed. */
708 BOOL full_service_indicated;
709
710 /* New cell from RR after last MMXXX_REG_CNF */
711 BOOL new_cell_ind;
712
713 /* Access class updated by SAT, update state */
714 UBYTE upd_sim_acc;
715
716 /* Preferred PLMN list updated by SAT, update state */
717 UBYTE upd_sim_plmnsel;
718
719 /* HPLMN search period updated by SAT, update state */
720 UBYTE upd_sim_hplmn;
721
722 /* Forbidden PLMN list updated by SAT, update state */
723 UBYTE upd_sim_fplmn;
724
725 #ifdef REL99
726
727 /* User controlled PLMN Selector with Access Technology update state */
728 UBYTE upd_sim_ucps_at;
729
730 /* User controlled PLMN Selector with Access Technology update state */
731 UBYTE upd_sim_ocps_at;
732
733 #endif
734
735 /* Acting HPLMN value updated by SAT, update state */
736 UBYTE upd_sim_act_hplmn;
737
738 /* If NEQ NULL, MM is performing the MM Restart procedure */
739 T_SIM_MM_INSERT_IND *sim_insert_info;
740
741 /* Contains a list of Equivalent PLMNs provided by the network. The list is
742 * replaced or deleted at the end of each location update procedure, routing
743 * area update procedure and GPRS attach procedure. */
744 //UBYTE eqv_plmn_list[EPLMNLIST_SIZE*UBYTES_PER_PLMN];
745
746 /*
747 * EPLMN List and IMSI store in Non-volatile memory
748 */
749 T_ffs_eplmn_imsi eqv_plmns;
750
751 /* If sim supports AHPLMN and the file has valid value acting_hplmn.v_plmn is TRUE and the
752 * actual value of AHPLMN will be contained in acting_hplmn. If sim doesnt support this
753 * feature or the value for AHPLMN is invalid acting_hplmn.v_plmn is FALSE and acting_hplmn
754 * contains 0xff 0xff 0xff
755 */
756
757 T_plmn acting_hplmn;
758
759 /* If the value read for AHPLMN is FFFFFF then acting_hplmn_invalid will be
760 * true.This will only be used if AHPLMN is modified via OTA
761 */
762 BOOL acting_hplmn_invalid;
763
764 /* If the PLMN is registered to AHPLMN at the time of REFRESH command by SMS,
765 * then this flag should be set to true.
766 */
767 BOOL reg_plmn_equal_ahplmn;
768
769 /* This flag shall be used to indicate Cingular Network */
770 BOOL is_cingular_sim;
771
772 /* This flag enables a quick search when coming back from VPLMN to HPLMN and RR_ABORT_IND gives
773 HPLMN as a part of its List*/
774 BOOL quick_hplmn_search;
775
776
777 } T_REG;
778
779 /*
780 This struct is used to store timer events and establishment requests
781 */
782 typedef struct
783 {
784 UBYTE comp;
785 UBYTE ti;
786 USHORT estcs;
787 } T_STORE_1;
788
789 typedef union
790 {
791 T_STORE_1 event;
792 T_PRIM_HEADER* primitive;
793 } T_STORE_MM;
794
795 typedef struct
796 {
797 UBYTE use;
798 U8 content_type;
799 U8 info;
800 T_STORE_MM content;
801 } T_STORE;
802
803 typedef struct
804 {
805 UBYTE comp;
806 UBYTE ti;
807 USHORT cause;
808 UBYTE service;
809 } T_PEND;
810
811 typedef struct
812 {
813 UBYTE state;
814 } T_CONN;
815
816 typedef struct
817 {
818 /* The BCCH information as delivered by the cell
819 * The better way would be to define this as T_bcch_info */
820 UBYTE bcch[SIZE_BCCH];
821
822 /* Location Area Identity of last/current selected cell,
823 * information will not be invalidated if coverage lost
824 * until new cell is selected. */
825 T_loc_area_ident lai;
826
827 /* Cell ID of last/current selected cell,
828 * information will not be invalidated if coverage lost
829 * until new cell is selected. */
830 USHORT cid;
831
832 /* Information broadcast by cell on BCCH */
833 T_mm_info mm_info;
834
835 #ifdef GPRS
836 /* Information braodcast on the BCCH whether the cell supports GPRS */
837 UBYTE gprs_indication;
838 #endif /* GPRS */
839 } T_MM;
840
841
842 #if defined (OPTION_TIMER)
843 typedef struct
844 {
845 UBYTE t_mode;
846 ULONG t_val;
847 } T_TIMER_CONFIG;
848 #endif /* #if defined (OPTION_TIMER) */
849
850
851
852 #ifdef GPRS
853
854 /*
855 * MM data solely used if GPRS is also delivered
856 */
857 typedef struct
858 {
859 /* TRUE if MM has to send MMGMM_REG_CNF after IDLE mode entry */
860 BOOL reg_cnf_on_idle_entry;
861
862 /* TRUE if SIM currently physically removed and SIM data not yet deleted.
863 * This variable is only used if GSM is not alone, otherwise MM can perform
864 * the necessary actions (e.g. IMSI detach) alone. */
865 BOOL sim_physically_removed;
866
867 /* TRUE if the MS is in a location area where combined attach is
868 * required (network mode I) and therefore MM shall not start T3212. */
869 BOOL combined_procedures;
870
871 /* The currently selected mobile class. Needed for reject cause #14. */
872 UBYTE mobile_class;
873
874 /* The current GPRS resumption state. Defaults to MMGMM_RESUMPTION_FAILURE
875 * excepts if processing RR_RELEASE_IND, in this case it is set according
876 * to the resumption state delivered by RR_RELEASE_IND. */
877 UBYTE resumption;
878
879 } T_GPRS_DATA;
880 #endif /* GPRS */
881
882
883 typedef struct
884 {
885 /* The variable ciphering_on is a write-only variable, not to be eliminated.
886 * It contains the state of ciphering on the air interface (on or off). */
887 BOOL ciphering_on;
888
889 /* The connection table. NUM_OF_CM_ENT equals to the number of CM entities,
890 * while NUM_OF_CONN_PER_CM_ENT equals to the number of parallel
891 * transactions each entitity can have */
892 UBYTE conn_state[NUM_OF_CM_ENT][NUM_OF_CONN_PER_CM_ENT];
893
894 /* May be zero, OPTIONAL_INFO_ERROR or RC_INVALID_MAND_MESSAGE.
895 * Related to the decoding of messages */
896 UBYTE error;
897
898 /* This variable is TRUE until either the first location updating
899 * procedure has ended either with an invalidation of the registration
900 * state or the first successful location updating. This variable should
901 * go into the registration data, but this is really only cosmetic.
902 * first_attach_mem holds the state of first attach before it is set to FALSE.
903 * It is used to determine if the HPLMN timer has to be started with 3 min for
904 * first search of HPLMN or if the normal hplmn timer value from registration
905 * data is to be used. After this check it is reset unconditional.
906 */
907 BOOL first_attach;
908 BOOL first_attach_mem;
909
910 /* RR release cause which leaded to idle entry after failed LUP. In case
911 * this is RELCS_ACCESS_BARRED or RELCS_RND_ACC_DELAY, MM is someway in
912 * state MM_IDLE_LUP_NEEDED, but this state is not used for this purpose
913 * in MM. A location updating attempt will be performed if RR informs MM
914 * by using RR_SYNC_IND with an appropriate cause. */
915 USHORT idle_entry;
916
917 /* Contains the type of the location update in progress and the state of
918 * the follow on request flag of this location update. */
919 T_loc_upd_type loc_upd_type;
920
921 /* Contains relevant data delivered by RR about the selected cell.
922 * A better name for this type instead T_MM may be T_CELL_DATA,
923 * for the variable itself cell_data */
924 T_MM mm;
925
926 /* The state of the MM state machines, the MM main state machine and
927 * the registration state machine. */
928 UBYTE state[NUM_OF_MM_STATES];
929
930 // TO_BE_DONE - write a good comment
931 UBYTE nreg_cause;
932
933 /* The variable nreg_request is TRUE if the deregistration was requested by
934 * MMR_NREG_REQ, otherwise FAISE. This is needed to decide whether MM
935 * will send an MMR_NREG_IND or MMR_NREG_CNF primitive at the end of the
936 * deregistration process. */
937 BOOL nreg_request;
938
939 /* All necessary information which is required for a pending connection
940 * is stored here. Note: There can be not more than one pending connection
941 * at a given time. */
942 T_PEND pend_conn;
943
944 /* The base for the internal random number generator, used to set the value
945 * for T3212 under certain cicumstances. */
946 ULONG rand_base;
947
948 /* All the data related to registration and SIM. */
949 T_REG reg;
950
951 /* In this location timer expiries and CM connection requests can be stored
952 * for later usage after a state change of one of the MM state machines */
953 T_STORE store[MAX_STORE_ENTRIES];
954
955 /* Use stored entries after end of transition */
956 BOOL use_stored_entries;
957
958 #if defined (NEW_FRAME)
959 /* TRUE if the appropriate timer is active */
960 BOOL t_running[NUM_OF_MM_TIMERS];
961 #else
962 /* The handles for all the MM timers. */
963 T_VSI_THANDLE t_handle[NUM_OF_MM_TIMERS];
964 #endif
965
966 /* This variable is a perfectly good substitute for missing MM state
967 * WAIT_FOR_ADDITIONAL_OUTGOING MM connection (#20). If in state
968 * MM_CONNECTION_ACTIVE (#6) and this flag is set,
969 * MM is really in state #20. */
970 // Identical with (TIMERACTIVE (T3230))
971 // Identical with (mm_count_connections (CM_PENDING) NEQ 0)
972 // => flag could be eliminated!
973 BOOL wait_for_accept;
974
975 /* Copy of the power field of the last RR_ACTIVATE_CNF/RR_ACTIVATE_IND */
976 UBYTE rf_power;
977
978 /* The counter for RR_ESTABLISH_REQ retransmissions for one CM connection
979 * attempt if a random access failure occured. */
980 UBYTE act_retrans;
981
982 /* The LOCATION UPDATE attempt counter */
983 UBYTE attempt_cnt;
984
985 /* The variables reject_cause and last_reject_cause store the
986 * current and the previous reject cause during location updating. */
987 USHORT rej_cause;
988 USHORT last_rej_cause;
989
990 /* Remember at RR establishment for emergency call and at start of the
991 * location update procedure the type of service state MM had. */
992 UBYTE idle_substate;
993
994 /* Variable solely used for debugging purposes */
995 USHORT debug_last_rej_cause;
996
997 /* Variable solely used for debugging purposes */
998 UBYTE mm_idle_no_imsi_marker;
999
1000 /* Faked T3212 value for test only, will be used if not equal zero */
1001 USHORT t3212_cfg_counter;
1002
1003 /* This variable stores whether a timeout of T3212 has occurred and
1004 * a periodic location updating procedure has to be performed ASAP. */
1005 BOOL t3212_timeout;
1006
1007 /* counts, how many times T3213 was started. Referres to the Note in 24.008 ch. 4.4.4.9
1008 * "the mobile station may as an option delay the repeated attempt for up to 8 seconds
1009 * to allow cell re-selection to take place" ---> 2 times T3213 as delay implemented.
1010 * 0 -> first run ...
1011 */
1012 U8 t3213_restart;
1013
1014 UBYTE reest_ti;
1015
1016 BOOL reest_cell_avail;
1017
1018 /* LOCATION UPDATING REJECT cause from the network or internal
1019 * cause for limited service (e.g. AUTHENTICATION REJECT received).
1020 * This is for MMR_NREG_IND to inform the MMI and is not intended to
1021 * be used by MM to control its own operation. */
1022 USHORT limited_cause;
1023
1024 /* A search for available networks was requested by the MMI */
1025 BOOL plmn_scan_mmi;
1026
1027 /* A search for available networks was requested by MM for own operation */
1028 BOOL plmn_scan_mm;
1029
1030 /* This boolean variable is used only together with available test SIM.
1031 * Is it set to a value of TRUE, the MS uses stored BCCH lists also
1032 * with test SIM. */
1033 BOOL config_use_stored_bcch;
1034
1035
1036 /* This variable is used to prevent an RR_ABORT_IND caused by a RR TABORT timer
1037 * timeout from interfering with FTA test 26.7.4.3.4
1038 */
1039 BOOL rr_abort_prior_to_tabort;
1040
1041
1042 /* Used to store the datafield used in the last sent SIM_READ_REQ. Default value will
1043 be NOT_PRESENT_16BIT, if no read request has been sent to SIM*/
1044 USHORT sim_read_req_data_field;
1045
1046 /* Sometimes the network sends multiple (two) authentication req messages
1047 * without waiting for an answer. SIM interface got modified to support
1048 * identifiers for requests sent to SIM. The following variable contains the req_id
1049 * in the last sent SIM_AUTHENTICATION_REQ.
1050 * On receiving SIM_AUTHENTICATION_CNF, response is sent to network only
1051 * if req_id matches the value in this variable. SIM_AUTHENTICATION_CNF with other
1052 * req_ids are ignored*/
1053 UBYTE last_auth_req_id;
1054
1055
1056 #if defined (FF_EOTD) AND defined (REL99)
1057 /* This flag is used to indicate if rrlp/lcs procedure is running. This flag is set
1058 * to true upon reception of RR_RRLP_START_IND. Flag will be set to false upon
1059 * reception of RR_RRLP_STOP_IND.
1060 */
1061 BOOL rrlp_lcs_started;
1062 #endif /* (FF_EOTD) AND defined (REL99) */
1063 /* This variable is used to keep count of repetitions for the network search if
1064 MM receives RR_ABORT_IND with cause RRCS_ABORT_PTM. Depending on its value
1065 MM behaviour will be decided.
1066 */
1067 UBYTE net_search_count;
1068
1069
1070 /* All the data needed for GPRS support */
1071 #ifdef GPRS
1072 T_GPRS_DATA gprs;
1073 #endif
1074 /* This is a bitwise mapping to indicate SIM which EFs are to be updated in SIM_MM_UPDATE_REQ */
1075 U8 ef_indicator;
1076 } T_MM_DATA;
1077
1078 /*==== EXPORT =====================================================*/
1079
1080 #define GET_BITS(value, shift, width) ((value >> shift) & ((1 << width) - 1))
1081
1082 /*
1083 * Prototypes Timer Modul
1084 */
1085 /*
1086 * If all entities are linked into one module this definitions
1087 * prefixes all this functions with the enity name
1088 */
1089 #ifdef OPTION_MULTITHREAD
1090 #define tim_t_reg _ENTITY_PREFIXED(tim_t_reg)
1091 #define tim_t3210 _ENTITY_PREFIXED(tim_t3210)
1092 #define tim_t3211 _ENTITY_PREFIXED(tim_t3211)
1093 #define tim_t3212 _ENTITY_PREFIXED(tim_t3212)
1094 #define tim_t3213 _ENTITY_PREFIXED(tim_t3213)
1095 #define tim_t3220 _ENTITY_PREFIXED(tim_t3220)
1096 #define tim_t3230 _ENTITY_PREFIXED(tim_t3230)
1097 #define tim_t3240 _ENTITY_PREFIXED(tim_t3240)
1098 #ifdef REL99
1099 #define tim_t3241 _ENTITY_PREFIXED(tim_t3241)
1100 #endif
1101 #define tim_t_hplmn _ENTITY_PREFIXED(tim_t_hplmn)
1102 #endif /* #ifdef OPTION_MULTITHREAD */
1103
1104 #if defined (NEW_FRAME)
1105 #ifdef OPTION_MULTITHREAD
1106 #define tim_exec_timeout _ENTITY_PREFIXED(tim_exec_timeout)
1107 #define tim_start_timer _ENTITY_PREFIXED(tim_start_timer)
1108 #define tim_stop_timer _ENTITY_PREFIXED(tim_stop_timer)
1109 #endif
1110 EXTERN void tim_exec_timeout (USHORT index);
1111 EXTERN void tim_start_timer (USHORT index, T_TIME value);
1112 EXTERN void tim_stop_timer (USHORT index);
1113 #else
1114
1115 #ifdef OPTION_MULTITHREAD
1116 #define tim_set_timeout_flag _ENTITY_PREFIXED(tim_set_timeout_flag)
1117 #define tim_handle_timeout _ENTITY_PREFIXED(tim_handle_timeout)
1118 #define tim_get_config_timer _ENTITY_PREFIXED(tim_get_config_timer)
1119 #define tim_start_timer _ENTITY_PREFIXED(tim_start_timer)
1120 #define tim_flush_fifo _ENTITY_PREFIXED(tim_flush_fifo)
1121 #endif
1122
1123 EXTERN void tim_set_timeout_flag (T_VSI_THANDLE handle,
1124 USHORT *t_flag);
1125 EXTERN void tim_handle_timeout (USHORT *t_flag);
1126 EXTERN void tim_get_config_timer (char *outString,
1127 UBYTE t_num,
1128 KW_DATA *t_name);
1129 EXTERN void tim_start_timer (UBYTE id,
1130 T_VSI_THANDLE handle,
1131 T_VSI_TVALUE value);
1132 EXTERN void tim_flush_fifo (T_VSI_THANDLE handle);
1133
1134 #endif /* else, #if defined (NEW_FRAME) */
1135
1136 #ifdef OPTION_MULTITHREAD
1137 #define tim_init_timer _ENTITY_PREFIXED(tim_init_timer)
1138 #define tim_config_timer _ENTITY_PREFIXED(tim_config_timer)
1139 #endif
1140
1141 EXTERN BOOL tim_init_timer (void);
1142
1143 EXTERN void tim_config_timer (UBYTE t_num,
1144 UBYTE t_mod,
1145 ULONG t_val);
1146
1147 /*
1148 * Prototypes MM
1149 */
1150
1151 /*
1152 * MM Mobility Management
1153 */
1154
1155 /*
1156 * mobility management primitives
1157 */
1158 EXTERN void mm_init_mm_data (void);
1159 EXTERN void mm_mdl_error_ind (T_MDL_ERROR_IND *mdl_error_ind);
1160 EXTERN void mm_mmcm_data_req (T_MMCM_DATA_REQ *mmcm_data_req);
1161 EXTERN void mm_mmcm_establish_req (T_MMCM_ESTABLISH_REQ *mmcm_establish_req);
1162 EXTERN void mm_mmcm_reestablish_req (T_MMCM_REESTABLISH_REQ *mmcm_reestablish_req);
1163 EXTERN void mm_mmcm_release_req (T_MMCM_RELEASE_REQ *mmcm_release_req);
1164 EXTERN void mm_mmcm_prompt_rej (T_MMCM_PROMPT_REJ *prompt_rej);
1165 EXTERN void mm_mmcm_prompt_res (T_MMCM_PROMPT_RES *prompt_rsp);
1166 EXTERN void mm_mmss_data_req (T_MMSS_DATA_REQ *mmss_data_req);
1167 EXTERN void mm_mmss_establish_req (T_MMSS_ESTABLISH_REQ *mmss_establish_req);
1168 EXTERN void mm_mmss_release_req (T_MMSS_RELEASE_REQ *mmss_release_req);
1169 EXTERN void mm_mmsms_data_req (T_MMSMS_DATA_REQ *mmsms_data_req);
1170 EXTERN void mm_mmsms_establish_req (T_MMSMS_ESTABLISH_REQ *mmsms_establish_req);
1171 EXTERN void mm_mmsms_release_req (T_MMSMS_RELEASE_REQ *mmsms_release_req);
1172 EXTERN void mm_mmxx_establish_req (UBYTE comp, UBYTE ti, USHORT estcs, U8 info);
1173 EXTERN void mm_rr_abort_ind (T_RR_ABORT_IND *rr_abort_ind);
1174 EXTERN void mm_rr_activate_cnf (T_RR_ACTIVATE_CNF *rr_activate_cnf);
1175 EXTERN void mm_rr_activate_ind (T_RR_ACTIVATE_IND *rr_activate_ind);
1176 EXTERN void mm_rr_establish_cnf (T_RR_ESTABLISH_CNF *rr_establish_cnf);
1177 EXTERN void mm_rr_establish_ind (T_RR_ESTABLISH_IND *rr_establish_ind);
1178 EXTERN void mm_rr_release_ind (T_RR_RELEASE_IND *rr_release_ind);
1179 EXTERN void mm_rr_sync_ind (T_RR_SYNC_IND *rr_sync_ind);
1180 #if defined (FF_EOTD) AND defined (REL99)
1181 EXTERN void mm_rr_rrlp_start_ind (T_RR_RRLP_START_IND *rr_rrlp_start_ind);
1182 EXTERN void mm_rr_rrlp_stop_ind (T_RR_RRLP_STOP_IND *rr_rrlp_stop_ind);
1183 #endif /* (FF_EOTD) AND defined (REL99) */
1184 EXTERN void mm_sim_set_imsi_marker (T_MSG_TYPE imsi_marker);
1185
1186
1187 /*
1188 * mobility management signalling
1189 */
1190 EXTERN void mm_abort (T_D_ABORT *d_abort);
1191 EXTERN void mm_auth_rej (void);
1192 EXTERN void mm_auth_req (T_D_AUTH_REQ *auth_req);
1193 EXTERN void mm_cm_message (UBYTE pd,
1194 UBYTE ti,
1195 T_RR_DATA_IND *rr_data_ind);
1196 EXTERN void mm_cm_serv_accept (void);
1197 EXTERN void mm_cm_serv_rej (T_D_CM_SERV_REJ *cm_serv_rej);
1198 EXTERN void mm_ident_req (T_D_IDENT_REQ *ident_req);
1199 EXTERN void mm_loc_upd_acc (T_D_LOC_UPD_ACCEPT *loc_upd_accept);
1200 EXTERN void mm_lup_rej (T_D_LOC_UPD_REJ *loc_upd_rej);
1201 EXTERN void mm_mm_status (void);
1202 EXTERN void mm_mmr_auth_cnf (T_SIM_AUTHENTICATION_CNF *sim_auth_cnf);
1203 EXTERN void mm_mmr_nreg_req (UBYTE nreg_cause,
1204 UBYTE detach_done);
1205 EXTERN void mm_mmr_reg_req (UBYTE func);
1206 EXTERN void mm_tmsi_realloc_cmd (T_D_TMSI_REALLOC_CMD *tmsi_realloc_cmd);
1207 EXTERN void mm_cm_service_prompt (T_D_CM_SERVICE_PROMPT *cm_service_prompt);
1208 EXTERN void mm_mm_information (T_D_MM_INFORMATION *mm_information);
1209
1210 /*
1211 * mobility management procedures
1212 */
1213 EXTERN void mm_auto_net_reg (void);
1214 EXTERN void mm_abort_connection (UBYTE abcs);
1215 EXTERN void mm_attach_loc_upd (void);
1216 EXTERN void mm_build_auth_res (T_SIM_AUTHENTICATION_CNF *sim_auth_cnf,
1217 T_U_AUTH_RES *auth_res);
1218 EXTERN void mm_build_ident_res (UBYTE id_type,
1219 T_U_IDENT_RES *ident_res);
1220 EXTERN void mm_build_mm_status (UBYTE cause,
1221 T_B_MM_STATUS *mm_status);
1222 EXTERN void mm_build_rr_sync_req_mode (void);
1223 EXTERN void mm_build_rr_sync_req_cause (USHORT cause);
1224 EXTERN void mm_build_rr_sync_req_ciph (void);
1225 EXTERN void mm_build_rr_sync_req (T_MSG_TYPE ciph);
1226 EXTERN void mm_build_rr_sync_req_tmsi (void);
1227 EXTERN void mm_build_rr_sync_hplmn_req (void);
1228 EXTERN void mm_check_error_flag (void);
1229 EXTERN BOOL mm_check_critical_error (void);
1230 EXTERN BOOL mm_send_status_on_error (void);
1231 EXTERN void mm_clear_mob_ident (T_imsi_struct *mob_ident);
1232 EXTERN void mm_clear_reg_data (void);
1233 EXTERN void mm_copy_rr_act_cnf_data (T_RR_ACTIVATE_CNF *rr_activate_cnf);
1234 EXTERN SHORT mm_count_connections (UBYTE conn_type);
1235 EXTERN void mm_create_est_message (USHORT est_cause,
1236 UBYTE service,
1237 UBYTE ti,
1238 USHORT *bit_size_message);
1239 EXTERN void mm_create_imsi_detach_message (void);
1240 EXTERN void mm_delete_entry (UBYTE comp,
1241 UBYTE ti);
1242 EXTERN void mm_init (void);
1243 EXTERN UBYTE mm_calculate_digits (const UBYTE *digits);
1244 EXTERN void mm_loc_upd_rej (void);
1245 EXTERN void mm_lup_restart (void);
1246 EXTERN void mm_mdl_rel_req (void);
1247 EXTERN void mm_mdl_rel_req_sapi_3 (void);
1248 EXTERN void mm_mmsms_rel_ind (USHORT cause,
1249 UBYTE conn_typ);
1250 EXTERN SHORT mm_mmxx_err_ind (USHORT cause);
1251 EXTERN void mm_mmxx_est_cnf (void);
1252 EXTERN void mm_mmxx_release_ind (UBYTE comp,
1253 UBYTE ti,
1254 USHORT relcs);
1255 EXTERN void mm_mmxx_rel_ind (USHORT cause,
1256 UBYTE conn_typ);
1257 EXTERN void mm_normal_loc_upd (void);
1258 EXTERN void mm_periodic_loc_upd (void);
1259 EXTERN void mm_power_off (void);
1260 EXTERN USHORT mm_random (USHORT n);
1261 EXTERN void mm_read_entry (void);
1262 EXTERN void mm_reest (UBYTE ti);
1263 EXTERN void mm_release_rr_connection (UBYTE resumption);
1264 EXTERN void mm_rr_act_req (void);
1265 EXTERN void mm_rr_data_req (USHORT est_cause,
1266 UBYTE service,
1267 UBYTE ti);
1268 EXTERN void mm_rr_est_req (USHORT est_cause,
1269 UBYTE service,
1270 UBYTE ti);
1271 EXTERN void mm_start_loc_upd (UBYTE lup_type);
1272 EXTERN void mm_continue_running_update (void);
1273 EXTERN void mm_start_net_req (void);
1274 EXTERN void mm_start_t3212_bcch (void);
1275 EXTERN void mm_change_t3212 (void);
1276 EXTERN void mm_use_entry (void);
1277 EXTERN void mm_write_entry (UBYTE comp,
1278 UBYTE ti,
1279 USHORT est_cs,
1280 U8 content_type,
1281 void* primitive,
1282 U8 info);
1283 EXTERN BOOL mm_check_lai (const T_loc_area_ident * lai1,
1284 const T_loc_area_ident * lai2);
1285 EXTERN BOOL mm_check_lai_from_RR (const T_loc_area_ident * lai1,
1286 const T_plmn * plmn2,
1287 USHORT lac2);
1288 EXTERN BOOL mm_normal_upd_needed (void);
1289 EXTERN BOOL mm_attach_upd_needed (void);
1290 EXTERN BOOL mm_periodic_upd_needed (void);
1291 EXTERN BOOL mm_set_follow_on_request (void);
1292 EXTERN void mm_end_of_detach (void);
1293 EXTERN UBYTE mm_get_service_state (void);
1294 EXTERN BOOL mm_full_service_pplmn_scan (void);
1295
1296 /* Implements Measure 29 and streamline encoding */
1297 EXTERN void mm_send_status (UBYTE cause);
1298
1299 /*
1300 * Registration
1301 */
1302
1303 /*
1304 * registration primitives and functions
1305 */
1306
1307 #ifndef GPRS
1308 EXTERN void reg_mmr_net_req (T_MMR_NET_REQ *mmr_net_req);
1309 EXTERN void reg_mmr_nreg_req (T_MMR_NREG_REQ *mmr_nreg_req);
1310 EXTERN void reg_mmr_plmn_mode_req (T_MMR_PLMN_MODE_REQ *plmn_mode_req);
1311 EXTERN void reg_mmr_plmn_res (T_MMR_PLMN_RES *mmr_plmn_res);
1312 EXTERN void reg_mmr_reg_req (T_MMR_REG_REQ *mmr_reg_req);
1313 #endif /* GPRS */
1314
1315 EXTERN void mm_func_mmgmm_net_req (void);
1316 EXTERN void mm_func_mmgmm_nreg_req (UBYTE detach_cause,
1317 UBYTE detach_done,
1318 USHORT cs);
1319 EXTERN void mm_func_mmgmm_plmn_mode_req (UBYTE mode);
1320 EXTERN void mm_func_mmgmm_plmn_res (const T_plmn *plmn,
1321 UBYTE reg_type,
1322 UBYTE mobile_class);
1323 EXTERN void mm_func_mmgmm_reg_req (UBYTE service_mode,
1324 UBYTE reg_type,
1325 UBYTE mobile_class,
1326 UBYTE bootup_act);
1327
1328 EXTERN void reg_sim_auth_cnf (T_SIM_AUTHENTICATION_CNF *sim_auth_cnf);
1329 EXTERN void reg_sim_mm_insert_ind (T_SIM_MM_INSERT_IND *sim_mm_insert_ind);
1330 EXTERN void reg_sim_remove_ind (T_SIM_REMOVE_IND *sim_remove_ind);
1331 EXTERN void reg_sim_mm_info_ind (T_SIM_MM_INFO_IND *sim_mm_info_ind);
1332 EXTERN void reg_sim_file_upd_ind (T_SIM_FILE_UPDATE_IND *file_upd);
1333 EXTERN void reg_sim_read_cnf (T_SIM_READ_CNF *sim_read_cnf);
1334 EXTERN void reg_sim_sync_cnf (T_SIM_SYNC_CNF *sim_sync_cnf);
1335 EXTERN void reg_send_sim_sync_req (void);
1336 /*
1337 * registration signalling
1338 */
1339 EXTERN void reg_mmr_auth_ind (T_SIM_AUTHENTICATION_REQ *sim_auth_req);
1340 EXTERN void reg_mm_success (UBYTE service);
1341 EXTERN void reg_mm_failure (UBYTE forb_ind);
1342 EXTERN void reg_net_list (const T_RR_ABORT_IND *rr_abort_ind);
1343 EXTERN void reg_mm_cell_selected (void);
1344
1345 /*
1346 * registration procedures
1347 */
1348 EXTERN BOOL reg_best_plmn_in_country (const T_plmn *bcch_plmn);
1349 EXTERN void reg_check_hplmn_tim (UBYTE decihours);
1350
1351 EXTERN void reg_build_sim_update (void);
1352 EXTERN void reg_copy_sim_data (const T_SIM_MM_INSERT_IND *sim_mm_insert_ind);
1353 EXTERN void reg_create_plmn_list (const T_RR_ABORT_IND *rr_abort_ind,
1354 UBYTE include_flag);
1355 EXTERN void reg_extract_hplmn (T_plmn *plmn);
1356 EXTERN void reg_init (void);
1357 EXTERN void reg_plmn_add_bad (UBYTE *forb_plmn_list,
1358 USHORT list_size,
1359 const T_plmn *plmn);
1360 EXTERN void reg_plmn_bad_del (UBYTE *forb_plmn_list,
1361 USHORT list_size,
1362 const T_plmn *plmn);
1363 EXTERN BOOL reg_plmn_empty (const T_plmn *plmn);
1364
1365 EXTERN BOOL reg_sim_ef_plmn_field_empty (UBYTE *plmn);
1366
1367 EXTERN BOOL reg_plmn_equal_sim (const T_plmn *bcch_plmn,
1368 const T_plmn *sim_plmn);
1369
1370 #ifdef REL99
1371 EXTERN BOOL reg_read_plmn_present (UBYTE* plmn_bytes);
1372 EXTERN BOOL reg_read_plmn_support_acctec(UBYTE* plmn_bytes);
1373 #endif
1374
1375 EXTERN BOOL reg_plmn_equal_eqv (const T_plmn *bcch_plmn,
1376 const T_plmn *req_plmn);
1377 EXTERN BOOL reg_plmn_is_NA_plmn (const T_plmn *bcch_plmn);
1378 EXTERN BOOL reg_plmn_equal_hplmn (const T_plmn *bcch_plmn);
1379 EXTERN BOOL reg_plmn_equal_rplmn (T_plmn *plmn);
1380 EXTERN BOOL reg_imsi_equal (const T_imsi_struct *imsi1,
1381 const T_imsi_struct *imsi2);
1382 EXTERN void reg_plmn_select (UBYTE forb_ind);
1383 EXTERN void reg_read_bcch_info (const T_SIM_MM_INSERT_IND *sim_mm_insert_ind);
1384
1385 EXTERN BOOL reg_sim_files_to_be_read (const T_SIM_MM_INSERT_IND *sim_mm_insert_ind);
1386
1387 EXTERN void reg_read_forb_plmn (const T_forb_plmn *forb_plmn);
1388 EXTERN void reg_read_imsi (T_imsi_struct *imsi_struct,
1389 const T_imsi_field *imsi_field);
1390 EXTERN void reg_read_kc_cksn (const T_SIM_MM_INSERT_IND *sim_mm_insert_ind);
1391 EXTERN void reg_read_loc_info (const T_loc_info *loc_info);
1392
1393 EXTERN void reg_read_pref_plmn (UBYTE* data,
1394 USHORT length);
1395 #ifdef REL99
1396 EXTERN void reg_read_ucps_acctec (UBYTE* data,
1397 USHORT length);
1398 EXTERN void reg_read_ocps_acctec (UBYTE* data,
1399 USHORT length);
1400 #endif
1401
1402 EXTERN void reg_copy_sim_ahplmn (const T_SIM_MM_INSERT_IND *sim_mm_insert_ind);
1403 EXTERN void reg_set_bcch_info (T_SIM_MM_UPDATE_REQ *sim_mm_update_req);
1404 EXTERN void reg_set_forb_plmns (T_SIM_MM_UPDATE_REQ *sim_mm_update_req);
1405 EXTERN void reg_set_kc (T_SIM_MM_UPDATE_REQ *sim_mm_update_req);
1406 EXTERN void reg_set_loc_info (T_SIM_MM_UPDATE_REQ *sim_mm_update_req);
1407 EXTERN void reg_set_pref_plmns (T_SIM_MM_UPDATE_REQ *sim_mm_update_req); // #####
1408 EXTERN void reg_clear_plmn (T_plmn *plmn);
1409 EXTERN BOOL reg_clear_plmn_list (UBYTE *plmn_list,
1410 USHORT list_size);
1411 EXTERN void reg_unpack_plmn (T_plmn *plmn,
1412 const UBYTE *packed,
1413 USHORT index);
1414 EXTERN void reg_pack_plmn (UBYTE *packed,
1415 USHORT index,
1416 const T_plmn *plmn);
1417 EXTERN BOOL reg_plmn_in_list (const UBYTE *forb_plmn_list,
1418 USHORT list_size,
1419 const T_plmn *plmn);
1420 EXTERN void reg_rr_failure (T_RR_ABORT_IND *rr_abort_ind);
1421 EXTERN BOOL reg_read_next_sim_file (void);
1422 EXTERN void reg_end_of_deregistration (UBYTE nreg_cause,
1423 UBYTE service);
1424 #ifdef REL99
1425 EXTERN void reg_invalidate_upd_state (UBYTE new_update_state, BOOL tmsi_cksn_kc_not_deleted);
1426 #else
1427 EXTERN void reg_invalidate_upd_state (UBYTE new_update_state);
1428 #endif
1429 GLOBAL void reg_select_network (const T_plmn *plmn);
1430 EXTERN BOOL reg_plmn_in_pref_list (const T_plmn *plmn);
1431 EXTERN BOOL reg_same_country_plmn (const T_plmn *plmn1,
1432 const T_plmn *plmn2);
1433 EXTERN void reg_check_plmn_search (USHORT cause,
1434 const T_RR_ABORT_IND *rr_abort_ind);
1435 EXTERN void reg_check_hplmn_tim (UBYTE decihours);
1436 EXTERN void reg_stop_hplmn_tim (void);
1437 /*
1438 * Equivalent plmn procedures
1439 */
1440 EXTERN BOOL reg_store_eqv_plmns (T_eqv_plmn_list *eqv_plmn_list, T_plmn *plmn);
1441 EXTERN void reg_read_acting_hplmn (const U8 acting_hplmn[]);
1442
1443 EXTERN BOOL valid_acting_hplmn (T_plmn *acting_hplmn);
1444 GLOBAL void mm_read_ffs_init (void);
1445 GLOBAL void mm_write_eplmn_to_ffs (void);
1446 GLOBAL void mm_display_eplmn (void);
1447
1448 GLOBAL void mm_reset_ffs (void);
1449 GLOBAL BOOL mm_read_ffs (void);
1450 GLOBAL void check_if_cingular_sim (void);
1451
1452 /*
1453 * Formatter
1454 */
1455
1456 /*
1457 * formatter primitives
1458 */
1459 #if 0 /* Not referenced */
1460 EXTERN void for_init_mm_data (void);
1461 #endif /* #if 0 */
1462 EXTERN void for_rr_data_ind (T_RR_DATA_IND *rr_data_ind);
1463
1464 /*
1465 * formatter signalling
1466 */
1467 /*
1468 * If all entities are linked into one module this definitions
1469 * prefixes the global data with the enity name
1470 */
1471 #ifdef OPTION_MULTITHREAD
1472 #define for_est_req _ENTITY_PREFIXED(for_est_req)
1473 #endif /*OPTION_MULTITHREAD*/
1474 EXTERN void for_cm_message (T_RR_DATA_REQ *rr_data_req);
1475 EXTERN void for_data_req (USHORT bit_size_message);
1476 EXTERN void for_est_req (USHORT est_cause,
1477 USHORT bit_size_message);
1478
1479 /*
1480 * formatter procedures
1481 */
1482 /*
1483 * If all entities are linked into one module this definitions
1484 * prefixes the global data with the enity name
1485 */
1486 #ifdef OPTION_MULTITHREAD
1487 #define for_check_mobile_identity _ENTITY_PREFIXED(for_check_mobile_identity)
1488 #endif /*OPTION_MULTITHREAD*/
1489 EXTERN BOOL for_check_identity_type (UBYTE id);
1490 EXTERN BOOL for_check_mobile_identity (T_mob_id *mob_ident);
1491 EXTERN UBYTE for_check_reject_cause (UBYTE cause);
1492 EXTERN void mm_for_set_error (U8 cause);
1493 #if 0 /* Not referenced; body bag; 02.10.2003 */
1494 EXTERN void for_set_mandatory_error (void);
1495 EXTERN void for_set_content_error (void);
1496 EXTERN void for_set_optional_error (UBYTE iei);
1497 #endif /* #if 0 */
1498
1499 /*
1500 * csf procedures
1501 */
1502 EXTERN void csf_read_mobile_class_1 (T_mob_class_1 *mob_class_1);
1503 EXTERN void csf_read_mobile_class_2 (T_mob_class_2 *mob_class_2);
1504 EXTERN void csf_read_imei (T_imsi_struct *imei_struct);
1505
1506 /*
1507 * timer procedures
1508 */
1509 EXTERN void tim_t3210 (void);
1510 EXTERN void tim_t3211 (void);
1511 EXTERN void tim_t3212 (void);
1512 EXTERN void tim_t3213 (void);
1513 EXTERN void tim_t3220 (void);
1514 EXTERN void tim_t3230 (void);
1515 EXTERN void tim_t3240 (void);
1516 #ifdef REL99
1517 EXTERN void tim_t3241 (void);
1518 #endif
1519 EXTERN void tim_t_reg (void);
1520 EXTERN void tim_t_hplmn (void);
1521
1522 /*
1523 * timer
1524 */
1525 #if defined (NEW_FRAME)
1526 #define TIMERSTART(i,v) tim_start_timer (i, v)
1527 #define TIMERSTOP(i) tim_stop_timer (i)
1528 #define TIMERACTIVE(i) (mm_data->t_running[i])
1529 #else
1530 #define TIMERSTART(t, v) csf_alloc_timer (t, v, &mm_data->t_handle[t])
1531 #define TIMERSTOP(t) \
1532 { csf_free_timer (mm_data->t_handle[t]); mm_data->t_handle[t] = VSI_ERROR; }
1533 #define TIMERACTIVE(t) (mm_data->t_handle[t] NEQ VSI_ERROR)
1534
1535 #define T_TIME T_VSI_TVALUE
1536
1537 #endif /*(NEW_FRAME)*/
1538
1539
1540
1541 #ifdef GPRS
1542 /*
1543 * Prototypes for the primitive interface MMGMM (MM to GMM)
1544 */
1545 EXTERN void mm_send_mmgmm_reg_cnf (UBYTE bootup_cause);
1546 EXTERN void mm_mmgmm_reg_cnf (void);
1547 EXTERN void mm_mmgmm_nreg_ind (UBYTE service,
1548 UBYTE search_running,
1549 UBYTE forb_ind);
1550 EXTERN void mm_mmgmm_nreg_cnf (UBYTE detach_cause);
1551 EXTERN void mm_mmgmm_plmn_ind (USHORT cause,
1552 const T_RR_ABORT_IND *rr_abort_ind);
1553 EXTERN void mm_mmgmm_ahplmn_ind (T_plmn *acting_hplmn);
1554 #else
1555 /*
1556 * Prototypes for the primitive interface MMR (MM to ACI)
1557 */
1558 EXTERN void reg_send_mmr_reg_cnf (UBYTE bootup_cause);
1559 EXTERN void reg_build_mmr_reg_cnf (void);
1560 EXTERN void reg_build_mmr_nreg_ind (UBYTE service,
1561 UBYTE search_running,
1562 UBYTE forb_ind);
1563 EXTERN void reg_build_mmr_nreg_cnf (UBYTE detach_cause);
1564 EXTERN void reg_build_mmr_plmn_ind (USHORT cause,
1565 const T_RR_ABORT_IND *rr_abort_ind);
1566 EXTERN void reg_build_mmr_ahplmn_ind (T_plmn *acting_hplmn);
1567
1568 /*
1569 * By using this definitions, we avoid having a lot of ifdefs
1570 * in the code itself.
1571 */
1572 #define mm_send_mmgmm_reg_cnf(b) reg_send_mmr_reg_cnf(b)
1573 #define mm_mmgmm_reg_cnf() reg_build_mmr_reg_cnf()
1574 #define mm_mmgmm_nreg_ind(a,b,c) reg_build_mmr_nreg_ind(a,b,c)
1575 #define mm_mmgmm_nreg_cnf(detach_cause) reg_build_mmr_nreg_cnf(detach_cause)
1576 #define mm_mmgmm_plmn_ind(cause,ab) reg_build_mmr_plmn_ind(cause,ab)
1577 #define mm_mmgmm_ahplmn_ind(ahplmn) reg_build_mmr_ahplmn_ind(ahplmn)
1578 #endif /* GPRS */
1579
1580 #ifdef GPRS
1581 /*
1582 * These functions are only used in the GPRS protocol stack.
1583 */
1584 EXTERN void mm_mmgmm_auth_rej_ind (void);
1585 EXTERN void mm_mmgmm_cm_establish_ind (void);
1586 EXTERN void mm_mmgmm_cm_emergency_ind (void);
1587 EXTERN void mm_mmgmm_cm_release_ind (UBYTE resumption);
1588 EXTERN void mm_mmgmm_activate_ind (UBYTE status);
1589 EXTERN void mm_mmgmm_t3212_val_ind (void);
1590 EXTERN void mm_mmgmm_lup_accept_ind (void);
1591 EXTERN void mm_mmgmm_lup_needed_ind (UBYTE reason);
1592 EXTERN void mm_mmgmm_tmsi_ind (ULONG tmsi);
1593 #else
1594 /*
1595 * Define the functions only needed in GPRS to nothing.
1596 * This will help the compiler's optimizer to generate
1597 * efficient code for a GSM only protocol stack.
1598 */
1599 #define mm_mmgmm_auth_rej_ind()
1600 #define mm_mmgmm_cm_establish_ind()
1601 #define mm_mmgmm_cm_emergency_ind()
1602 #define mm_mmgmm_cm_release_ind(resumption)
1603 #define mm_mmgmm_activate_ind(status)
1604 #define mm_mmgmm_t3212_val_ind()
1605 #define mm_mmgmm_lup_accept_ind(plmn, lac)
1606 #define mm_mmgmm_lup_needed_ind(reason)
1607 #define mm_mmgmm_tmsi_ind(tmsi)
1608
1609 /*
1610 * There are some additional parameters in some function calls which
1611 * are only used by GPRS. This have no meaning for GSM, but it is undesirable
1612 * to #ifdef out all places where they are used, so they will be defined here.
1613 */
1614 #define MMGMM_RESUMPTION_FAILURE 1
1615 #define MMGMM_PERFORM_DETACH 0
1616 #define REG_GPRS_INACTIVE 0
1617 #define MMGMM_NO_ERROR 0xff
1618 #define MMGMM_CLASS_CC 5
1619 #endif /* else, #ifdef GPRS */
1620
1621 EXTERN T_MM_DATA mm_data_base;
1622 #define GET_INSTANCE_DATA register T_MM_DATA *mm_data= &mm_data_base
1623
1624
1625 /*
1626 * If all entities are linked into one module this definitions
1627 * prefixes the global data with the enity name
1628 */
1629 #ifdef OPTION_MULTITHREAD
1630 #if defined (TI_PS_HCOMM_CHANGE)
1631 #else
1632 #define hCommMMI _ENTITY_PREFIXED(hCommMMI)
1633 #define hCommCC _ENTITY_PREFIXED(hCommCC)
1634 #define hCommSS _ENTITY_PREFIXED(hCommSS)
1635 #define hCommSMS _ENTITY_PREFIXED(hCommSMS)
1636 #define hCommRR _ENTITY_PREFIXED(hCommRR)
1637 #define hCommDL _ENTITY_PREFIXED(hCommDL)
1638 #define hCommSIM _ENTITY_PREFIXED(hCommSIM)
1639 #endif
1640 #endif /* OPTION_MULTITHREAD */
1641
1642 #if defined (NEW_FRAME)
1643 #if defined (TI_PS_HCOMM_CHANGE)
1644 #else
1645 EXTERN T_HANDLE hCommMMI; /* MMI Communication */
1646 EXTERN T_HANDLE hCommCC; /* CC Communication */
1647 EXTERN T_HANDLE hCommSS; /* SS Communication */
1648 EXTERN T_HANDLE hCommSMS; /* SMS Communication */
1649 EXTERN T_HANDLE hCommRR; /* RR Communication */
1650 EXTERN T_HANDLE hCommDL; /* DL Communication */
1651 EXTERN T_HANDLE hCommSIM; /* SIM Communication */
1652 #endif /* (TI_PS_HCOMM_CHANGE) */
1653 EXTERN T_HANDLE mm_handle;
1654 #else
1655 #if defined (TI_PS_HCOMM_CHANGE)
1656 #else
1657 EXTERN T_VSI_CHANDLE hCommMMI; /* MMI Communication */
1658 EXTERN T_VSI_CHANDLE hCommCC; /* CC Communication */
1659 EXTERN T_VSI_CHANDLE hCommSS; /* SS Communication */
1660 EXTERN T_VSI_CHANDLE hCommSMS; /* SMS Communication */
1661 EXTERN T_VSI_CHANDLE hCommRR; /* RR Communication */
1662 EXTERN T_VSI_CHANDLE hCommDL; /* DL Communication */
1663 EXTERN T_VSI_CHANDLE hCommSIM; /* SIM Communication */
1664 #endif /* (TI_PS_HCOMM_CHANGE) */
1665 EXTERN T_VSI_THANDLE mm_act_handle;
1666 #endif /*NEW FRAME*/
1667 /*
1668 * If all entities are linked into one module this definitions
1669 * prefixes the global data with the enity name
1670 */
1671 #ifdef OPTION_MULTITHREAD
1672 #define _decodedMsg _ENTITY_PREFIXED(_decodedMsg)
1673 #endif /*OPTION_MULTITHREAD*/
1674
1675 EXTERN UBYTE _decodedMsg [];
1676
1677 #ifdef OPTION_TIMER
1678 /*
1679 * If all entities are linked into one module this definitions
1680 * prefixes the global data with the entity name
1681 */
1682 #ifdef OPTION_MULTITHREAD
1683 #define partab _ENTITY_PREFIXED(partab)
1684 #endif /*OPTION_MULTITHREAD*/
1685
1686 EXTERN const KW_DATA partab[];
1687 #endif /*OPTION_TIMER*/
1688
1689 #ifndef _TMS470
1690 int sprintf( char *buffer, const char *format, ... );
1691 #define Sprintf sprintf
1692 #endif /*_TMS470*/
1693
1694 #endif