comparison src/g23m-aci/aci/psa_gmmp.c @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
comparison
equal deleted inserted replaced
0:4e78acac3d88 1:fa8dc04885d8
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 defines the processing functions for the
18 | primitives send to the protocol stack adapter by the
19 | registrations part of GPRS mobility management ( GMM ).
20 +-----------------------------------------------------------------------------
21 */
22
23 #if defined (GPRS) && defined (DTI)
24
25 #ifndef PSA_GMMP_C
26 #define PSA_GMMP_C
27 #endif
28
29 #include "aci_all.h"
30 /*==== INCLUDES ===================================================*/
31 #include "dti.h" /* functionality of the dti library */
32 #include "aci_cmh.h"
33 #include "ati_cmd.h"
34 #include "aci_cmd.h"
35
36 #include "aci.h"
37
38 #include "dti.h"
39 #include "dti_conn_mng.h"
40 #include "dti_cntrl_mng.h"
41
42 #include "gaci.h"
43 #include "gaci_cmh.h"
44 #include "psa.h"
45 #include "psa_gmm.h"
46 #include "psa_mm.h"
47 #include "cmh.h"
48 #include "cmh_gmm.h"
49
50 #ifdef FF_GPF_TCPIP
51 #include "dcm_utils.h"
52 #include "dcm_state.h"
53 #include "dcm_env.h"
54 #endif
55 #include "dcm_f.h"
56 #include "rvm/rvm_api.h"
57
58
59
60 /*==== CONSTANTS ==================================================*/
61
62 /*==== TYPES ======================================================*/
63
64
65 /*==== EXPORT =====================================================*/
66
67
68 /*==== VARIABLES ==================================================*/
69
70
71 /*==== FUNCTIONS ==================================================*/
72
73 /*
74 +-------------------------------------------------------------------+
75 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
76 | ROUTINE : psa_gmmreg_attach_cnf |
77 +-------------------------------------------------------------------+
78
79 PURPOSE : processes the GMMREG_ATTACH_CNF primitive send by GMM.
80 this confirms a successful attach.
81 */
82 GLOBAL void psa_gmmreg_attach_cnf ( T_GMMREG_ATTACH_CNF *gmmreg_attach_cnf )
83 {
84
85 TRACE_FUNCTION ("psa_gmmreg_attach_cnf()");
86
87 GMM_PRIM_TRACE_2("ATT_CNF",dbg_attachType(gmmreg_attach_cnf->attach_type),
88 dbg_searchRunning(gmmreg_attach_cnf->search_running));
89
90
91 /* Attach Cnf will be sent when RR starts the power scanning
92 and hence ignore it */
93 if (gmmreg_attach_cnf->bootup_cause EQ PWR_SCAN_START)
94 {
95 TRACE_EVENT("Dummy cnf from the lower layer");
96 PFREE(gmmreg_attach_cnf);
97 return;
98 }
99
100 /*
101 *-------------------------------------------------------------------
102 * notify ACI
103 *-------------------------------------------------------------------
104 */
105 cmhGMM_setPLMN(&gmmreg_attach_cnf->plmn);
106 gmmShrdPrm.lac = gmmreg_attach_cnf->lac;
107 gmmShrdPrm.cid = gmmreg_attach_cnf->cid;
108
109 /* ACI-SPR-17218: Map gprs_indicator to ACI state */
110 switch( gmmreg_attach_cnf->gprs_indicator )
111 {
112 case GMM_GPRS_SUPP_NO:
113 gmmShrdPrm.gprs_indicator = P_CREG_GPRS_Not_Supported;
114 break;
115 case GMM_GPRS_SUPP_LIMITED:
116 gmmShrdPrm.gprs_indicator = P_CREG_GPRS_Supported_Limited_Serv;
117 break;
118 case GMM_GPRS_SUPP_YES:
119 gmmShrdPrm.gprs_indicator = P_CREG_GPRS_Supported;
120 break;
121 default:
122 gmmShrdPrm.gprs_indicator = P_CREG_GPRS_Support_Unknown;
123 break;
124 }
125 gmmShrdPrm.rt = gmmreg_attach_cnf->rt;
126
127 TRACE_EVENT_P2("NEW ! gmmShrdPrm.lac: %04X, gmmShrdPrm.cid: %04X", gmmShrdPrm.lac, gmmShrdPrm.cid);
128
129 psaGMM_NetworkRegistrationStatus(GMMREG_ATTACH_CNF, gmmreg_attach_cnf);
130
131 cmhGMM_Attached( gmmreg_attach_cnf->attach_type, &gmmreg_attach_cnf->plmn, gmmreg_attach_cnf->search_running );
132
133 switch ( gmmreg_attach_cnf->attach_type )
134 {
135 case GMMREG_AT_GPRS:
136 case GMMREG_AT_COMB:
137 case GMMREG_AT_IMSI:
138 {
139 PALLOC (mmr_reg_cnf, MMR_REG_CNF);
140 memcpy(&mmr_reg_cnf->plmn, &gmmreg_attach_cnf->plmn, sizeof(T_plmn));
141 mmr_reg_cnf->lac = gmmreg_attach_cnf->lac;
142 mmr_reg_cnf->cid = gmmreg_attach_cnf->cid;
143 mmr_reg_cnf->bootup_cause = gmmreg_attach_cnf->bootup_cause;
144 psa_mmr_reg_cnf(mmr_reg_cnf);
145 }
146 break;
147 }
148
149 /*
150 *-------------------------------------------------------------------
151 * free the primitive buffer
152 *-------------------------------------------------------------------
153 */
154 PFREE (gmmreg_attach_cnf);
155 }
156
157 /*
158 +-------------------------------------------------------------------+
159 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
160 | ROUTINE : psa_gmmreg_attach_rej |
161 +-------------------------------------------------------------------+
162
163 PURPOSE : processes the GMMREG_ATTACH_REJ primitive send by GMM.
164 this confirms a failed attach.
165 */
166
167 #ifdef FF_GPF_TCPIP
168 EXTERN T_DCM_ENV_CTRL_BLK *dcm_env_ctrl_blk_p;
169 #endif
170
171 GLOBAL void psa_gmmreg_attach_rej ( T_GMMREG_ATTACH_REJ *gmmreg_attach_rej )
172 {
173
174 TRACE_FUNCTION ("psa_gmmreg_attach_rej()");
175
176 GMM_PRIM_TRACE_2("ATT_REJ",dbg_detachType(gmmreg_attach_rej->detach_type),
177 dbg_searchRunning(gmmreg_attach_rej->search_running));
178 /*
179 *-------------------------------------------------------------------
180 * notify ACI
181 *-------------------------------------------------------------------
182 */
183 //pinghua add to avoid no net signal case
184 #ifdef FF_GPF_TCPIP
185 if(is_gpf_tcpip_call())
186 {
187 T_DCM_STATUS_IND_MSG msg;
188 msg.hdr.msg_id = DCM_NEXT_CMD_STOP_MSG;
189 dcm_send_message(msg, dcm_env_ctrl_blk_p->substate[0]);
190
191 }
192 #endif /* FF_GPF_TCPIP */
193
194 //end
195
196 psaGMM_NetworkRegistrationStatus(GMMREG_ATTACH_REJ, gmmreg_attach_rej);
197
198 cmhGMM_NoAttach (gmmreg_attach_rej->detach_type,gmmreg_attach_rej->service,
199 gmmreg_attach_rej->search_running );
200
201 switch ( gmmreg_attach_rej->detach_type )
202 {
203 case GMMREG_DT_COMB:
204 case GMMREG_DT_IMSI:
205 /*
206 * No MM information, if
207 * IMSI wasn' t registered and wasn' t requested
208 */
209 if ( ( gmmShrdPrm.last_attach_type EQ ATTACH_TYPE_DETACHED OR /* wasn' t registered */
210 gmmShrdPrm.last_attach_type EQ GMMREG_AT_GPRS ) AND
211 ( gmmShrdPrm.requested_attach_type EQ ATTACH_TYPE_DETACHED OR /* wasn' t requested */
212 gmmShrdPrm.requested_attach_type EQ GMMREG_AT_GPRS ) )
213 break;
214
215 /* else walk through */
216 /*lint -fallthrough */
217 case GMMREG_DT_LIMITED_SERVICE:
218 case GMMREG_DT_SIM_REMOVED:
219 {
220 PALLOC (mmr_nreg_ind, MMR_NREG_IND); /* T_MMR_NREG_IND */
221 mmr_nreg_ind->cause = gmmreg_attach_rej->cause;
222 mmr_nreg_ind->service =
223 cmhGMM_translate_gmm_cause_to_nreg_cs(gmmreg_attach_rej->service);
224 mmr_nreg_ind->search_running = gmmreg_attach_rej->search_running;
225 psa_mmr_nreg_ind(mmr_nreg_ind);
226 }
227 break;
228 case GMMREG_DT_POWER_OFF:
229 case GMMREG_DT_GPRS:
230 case GMMREG_DT_DISABLE_GPRS:
231 default:
232 break;
233 }
234
235 /*
236 *-------------------------------------------------------------------
237 * free the primitive buffer
238 *-------------------------------------------------------------------
239 */
240 PFREE (gmmreg_attach_rej);
241
242 }
243
244 /*
245 +-------------------------------------------------------------------+
246 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
247 | ROUTINE : psa_gmmreg_detach_cnf |
248 +-------------------------------------------------------------------+
249
250 PURPOSE : processes the GMMREG_DETACH_CNF primitive send by GMM.
251 this confirms a successful detach.
252 */
253 GLOBAL void psa_gmmreg_detach_cnf ( T_GMMREG_DETACH_CNF *gmmreg_detach_cnf )
254 {
255 TRACE_FUNCTION ("psa_gmmreg_detach_cnf()");
256
257 GMM_PRIM_TRACE_1("DET_CNF",
258 dbg_detachType(gmmreg_detach_cnf->detach_type));
259
260 /*
261 *-------------------------------------------------------------------
262 * notify ACI
263 *-------------------------------------------------------------------
264 */
265 psaGMM_NetworkRegistrationStatus(GMMREG_DETACH_CNF, gmmreg_detach_cnf);
266
267 cmhGMM_Detached( gmmreg_detach_cnf->detach_type );
268
269 switch ( gmmreg_detach_cnf->detach_type )
270 {
271 case GMMREG_DT_SOFT_OFF:
272 {
273 PALLOC (mmr_nreg_cnf, MMR_NREG_CNF);
274 mmr_nreg_cnf->detach_cause = CS_SOFT_OFF;
275 psa_mmr_nreg_cnf(mmr_nreg_cnf);
276 }
277 break;
278
279 case GMMREG_DT_POWER_OFF:
280 {
281 PALLOC (mmr_nreg_cnf, MMR_NREG_CNF);
282 mmr_nreg_cnf->detach_cause = CS_POW_OFF;
283 psa_mmr_nreg_cnf(mmr_nreg_cnf);
284 }
285 break;
286
287 case GMMREG_DT_COMB: /* is set for e.g. AT+COPS=2 or AT%NRG=0,2 */
288 case GMMREG_DT_SIM_REMOVED:
289 {
290 PALLOC (mmr_nreg_cnf, MMR_NREG_CNF);
291 mmr_nreg_cnf->detach_cause = CS_SIM_REM;
292 psa_mmr_nreg_cnf(mmr_nreg_cnf);
293 }
294 break;
295
296 case GMMREG_DT_GPRS:
297 case GMMREG_DT_IMSI:
298 case GMMREG_DT_DISABLE_GPRS:
299 case GMMREG_DT_LIMITED_SERVICE:
300 break;
301 }
302
303 /*
304 *-------------------------------------------------------------------
305 * free the primitive buffer
306 *-------------------------------------------------------------------
307 */
308 PFREE (gmmreg_detach_cnf);
309 }
310
311 /*
312 +-------------------------------------------------------------------+
313 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
314 | ROUTINE : psa_gmmreg_detach_ind |
315 +-------------------------------------------------------------------+
316
317 PURPOSE : processes the GMMREG_DETACH_IND primitive send by GMM.
318 the network initiated detach.
319 */
320
321 GLOBAL void psa_gmmreg_detach_ind ( T_GMMREG_DETACH_IND *gmmreg_detach_ind )
322 {
323
324 TRACE_FUNCTION ("psa_gmmreg_detach_ind()");
325
326 GMM_PRIM_TRACE_2("DET_IND",dbg_detachType(gmmreg_detach_ind->detach_type),
327 dbg_searchRunning(gmmreg_detach_ind->search_running));
328
329
330
331 //pinghua add to avoid net drop off due to no signal
332 #ifdef FF_GPF_TCPIP
333 if(is_gpf_tcpip_call())
334 {
335
336 if(dcm_env_ctrl_blk_p->state[0] == DCM_CONN_ACTIVATED AND
337 dcm_env_ctrl_blk_p->substate[0] == DCM_SUB_NO_ACTION )
338 {
339 T_DCM_CLOSE_CONN_REQ_MSG dcm_close_conn_req_msg;
340 U8 current_row = dcm_env_ctrl_blk_p->current_row ;
341
342 memset(&dcm_close_conn_req_msg, 0x00, sizeof(T_DCM_CLOSE_CONN_REQ_MSG));
343
344 dcm_close_conn_req_msg.hdr.msg_id = DCM_CLOSE_CONN_REQ_MSG;
345 dcm_close_conn_req_msg.close_req.api_instance = dcm_env_ctrl_blk_p->ipu_list[current_row].api_instance;
346 dcm_close_conn_req_msg.close_req.bearer_handle = dcm_env_ctrl_blk_p->ipu_list[current_row].bearer_handle;
347 dcm_process_network_drop(&dcm_close_conn_req_msg);
348
349
350 }
351 }
352 #endif /* FF_GPF_TCPIP */
353
354 //end
355
356
357 /*
358 *-------------------------------------------------------------------
359 * notify ACI
360 *-------------------------------------------------------------------
361 */
362 psaGMM_NetworkRegistrationStatus(GMMREG_DETACH_IND, gmmreg_detach_ind);
363
364 cmhGMM_NetDetach( gmmreg_detach_ind->detach_type,
365 gmmreg_detach_ind->service,
366 gmmreg_detach_ind->search_running );
367 switch ( gmmreg_detach_ind->detach_type )
368 {
369 case GMMREG_DT_COMB:
370 case GMMREG_DT_IMSI:
371 case GMMREG_DT_LIMITED_SERVICE:
372 {
373 PALLOC (mmr_nreg_ind, MMR_NREG_IND);
374 mmr_nreg_ind->cause = gmmreg_detach_ind->cause;
375 mmr_nreg_ind->service =
376 cmhGMM_translate_gmm_cause_to_nreg_cs(gmmreg_detach_ind->service);
377 mmr_nreg_ind->search_running = gmmreg_detach_ind->search_running;
378 psa_mmr_nreg_ind(mmr_nreg_ind);
379 }
380 break;
381 case GMMREG_DT_POWER_OFF:
382 case GMMREG_DT_SIM_REMOVED:
383 case GMMREG_DT_GPRS:
384 case GMMREG_DT_DISABLE_GPRS:
385 cmhGMM_send_NetworkRegistrationStatus( CGREG_STAT_NOT_REG, P_CGREG_STAT_NOT_REG );
386 /*lint -fallthrough */
387 default:
388 break;
389 }
390
391 /*
392 *-------------------------------------------------------------------
393 * free the primitive buffer
394 *-------------------------------------------------------------------
395 */
396 PFREE (gmmreg_detach_ind);
397
398 }
399
400 /*
401 +-------------------------------------------------------------------+
402 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
403 | ROUTINE : psa_gmmreg_plmn_ind |
404 +-------------------------------------------------------------------+
405
406 PURPOSE : processes the GMMREG_PLMN_IND primitive send by GMM.
407 this indicate a PLMN list to the MMI.
408 */
409
410 GLOBAL void psa_gmmreg_plmn_ind ( T_GMMREG_PLMN_IND *gmmreg_plmn_ind )
411 {
412 short i;
413 TRACE_FUNCTION ("psa_gmmreg_plmn_ind()");
414
415 /*
416 *-------------------------------------------------------------------
417 * copy primitive for MM and update shared parameter from GMM
418 *-------------------------------------------------------------------
419 */
420 {
421 PALLOC (mmr_plmn_ind, MMR_PLMN_IND); /* T_MMR_PLMN_IND */
422
423 mmr_plmn_ind->cause = gmmreg_plmn_ind->cause;
424
425 for (i = 0; i < MAX_PLMN_ID; i++)
426 {
427 mmr_plmn_ind->plmn[i] = gmmreg_plmn_ind->plmn[i];
428 mmr_plmn_ind->forb_ind[i] = gmmreg_plmn_ind->forb_ind[i];
429 mmr_plmn_ind->rxlevel[i] = gmmreg_plmn_ind->rxlevel[i];
430 mmr_plmn_ind->lac_list[i] = gmmreg_plmn_ind->lac_list[i];
431 /* shared parameter */
432 gmmShrdPrm.gprs_status[i] = gmmreg_plmn_ind->gprs_status[i];
433
434 if ( mmr_plmn_ind->plmn[i].v_plmn EQ INVLD_PLMN )
435 break;
436 }
437
438 /*
439 *-------------------------------------------------------------------
440 * call MM primitive handler for update shared parameter and notify ACI
441 *-------------------------------------------------------------------
442 */
443 psa_mmr_plmn_ind(mmr_plmn_ind);
444 }
445 /*
446 *-------------------------------------------------------------------
447 * notify ACI
448 *-------------------------------------------------------------------
449 */
450 cmhGMM_Plmn();
451
452 /*
453 *-------------------------------------------------------------------
454 * free the primitive buffer
455 *-------------------------------------------------------------------
456 */
457 PFREE (gmmreg_plmn_ind);
458 }
459
460 /*
461 +-------------------------------------------------------------------+
462 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
463 | ROUTINE : psa_gmmreg_suspend_ind |
464 +-------------------------------------------------------------------+
465
466 PURPOSE : processes the GMMREG_SUSPEND_IND primitive send by GMM.
467 this inform MMI if whether full service or limited service is available.
468 */
469 GLOBAL void psa_gmmreg_suspend_ind( T_GMMREG_SUSPEND_IND *gmmreg_suspend_ind )
470 {
471
472 TRACE_FUNCTION ("psa_gmmreg_suspend_ind()");
473
474 GMM_PRIM_TRACE_1("SUS_IND",dbg_cellState(gmmreg_suspend_ind->cell_state));
475
476 /*
477 *-------------------------------------------------------------------
478 * notify ACI
479 *-------------------------------------------------------------------
480 */
481 psaGMM_NetworkRegistrationStatus(GMMREG_SUSPEND_IND, gmmreg_suspend_ind);
482
483 cmhGMM_Suspend( gmmreg_suspend_ind->cell_state );
484
485 /*
486 *-------------------------------------------------------------------
487 * free the primitive buffer
488 *-------------------------------------------------------------------
489 */
490 PFREE (gmmreg_suspend_ind);
491
492 }
493
494 /*
495 +-------------------------------------------------------------------+
496 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
497 | ROUTINE : psa_gmmreg_resume_ind |
498 +-------------------------------------------------------------------+
499
500 PURPOSE : processes the GMMREG_RESUME_IND primitive send by GMM.
501 this inform MMI that GPRS full service is now available.
502 */
503 GLOBAL void psa_gmmreg_resume_ind( T_GMMREG_RESUME_IND *gmmreg_resume_ind )
504 {
505
506 TRACE_FUNCTION ("psa_gmmreg_resume_ind()");
507
508 /*
509 *-------------------------------------------------------------------
510 * notify ACI
511 *-------------------------------------------------------------------
512 */
513 psaGMM_NetworkRegistrationStatus(GMMREG_RESUME_IND, gmmreg_resume_ind);
514
515 cmhGMM_Resume();
516
517 /*
518 *-------------------------------------------------------------------
519 * free the primitive buffer
520 *-------------------------------------------------------------------
521 */
522 PFREE (gmmreg_resume_ind);
523
524 }
525
526 /*
527 +-------------------------------------------------------------------+
528 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
529 | ROUTINE : psa_gmmreg_info_ind |
530 +-------------------------------------------------------------------+
531
532 PURPOSE : processes the GMMREG_INFO_IND primitive send by GMM.
533 this transmit the information provided by the GMM INFORMATION message to the MMI.
534 */
535 GLOBAL void psa_gmmreg_info_ind( T_GMMREG_INFO_IND *gmmreg_info_ind )
536 {
537
538 TRACE_FUNCTION ("psa_gmmreg_info_ind()");
539
540 /*
541 *-------------------------------------------------------------------
542 * notify ACI
543 *-------------------------------------------------------------------
544 */
545 {
546 PALLOC (mmr_info_ind, MMR_INFO_IND);
547 memcpy (&(mmr_info_ind->plmn), &(gmmreg_info_ind->plmn), sizeof (T_plmn));
548 memcpy (&(mmr_info_ind->full_name), &(gmmreg_info_ind->full_net_name_gmm), sizeof (T_full_net_name_gmm));
549 memcpy (&(mmr_info_ind->short_name), &(gmmreg_info_ind->short_net_name_gmm), sizeof (T_short_net_name_gmm));
550 memcpy (&(mmr_info_ind->ntz), &(gmmreg_info_ind->net_time_zone), sizeof (T_net_time_zone));
551 memcpy (&(mmr_info_ind->time), &(gmmreg_info_ind->net_time), sizeof (T_net_time));
552
553 psa_mmr_info_ind(mmr_info_ind);
554 }
555
556 /*cmhGMM_Info();*/
557
558 /*
559 *-------------------------------------------------------------------
560 * free the primitive buffer
561 *-------------------------------------------------------------------
562 */
563 PFREE (gmmreg_info_ind);
564
565 }
566
567
568 /*
569 +-------------------------------------------------------------------+
570 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
571 | ROUTINE : psa_gmmreg_ciphering_ind|
572 +-------------------------------------------------------------------+
573
574 PURPOSE : processes the GMMREG_CIPHERING_IND primitive send by GMM.
575 */
576 GLOBAL void psa_gmmreg_ciphering_ind(T_GMMREG_CIPHERING_IND *gmmreg_ciphering_ind)
577 {
578
579 TRACE_FUNCTION ("psa_gmmreg_ciphering_ind()");
580
581 cmhGMM_CipheringInd (gmmreg_ciphering_ind->gsm_ciph,gmmreg_ciphering_ind->gprs_ciph);
582
583
584 /*
585 *-------------------------------------------------------------------
586 * free the primitive buffer
587 *-------------------------------------------------------------------
588 */
589 PFREE (gmmreg_ciphering_ind);
590
591 }
592
593 /*
594 +-------------------------------------------------------------------+
595 | PROJECT : GPRS (8441) MODULE : PSA_GMMP |
596 | ROUTINE : psa_gmmreg_ahplmn_ind |
597 +-------------------------------------------------------------------+
598
599 PURPOSE : processes the GMMREG_AHPLMN_IND primitive send by GMM.
600 */
601 GLOBAL void psa_gmmreg_ahplmn_ind(T_GMMREG_AHPLMN_IND *gmmreg_ahplmn_ind)
602 {
603 TRACE_FUNCTION("psa_gmmreg_ahplmn_ind()");
604
605 {
606 PALLOC(mmr_ahplmn_ind, MMR_AHPLMN_IND);
607 mmr_ahplmn_ind->ahplmn = gmmreg_ahplmn_ind->ahplmn;
608 psa_mmr_ahplmn_ind(mmr_ahplmn_ind);
609 }
610
611 psaGMM_NetworkRegistrationStatus(GMMREG_AHPLMN_IND, gmmreg_ahplmn_ind);
612
613 PFREE(gmmreg_ahplmn_ind);
614 }
615
616
617 #endif /* GPRS */
618 /*==== EOF =========================================================*/