comparison src/g23m-gsm/alr/alr_main.c @ 104:27a4235405c6

src/g23m-gsm: import from LoCosto source
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 04 Oct 2016 18:24:05 +0000
parents
children
comparison
equal deleted inserted replaced
103:76d139c7a25e 104:27a4235405c6
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GSM-PS
4 | Modul : ALR_MAIN
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 Modul defines the functions for the SDL process
18 | Main_Control of the ALR functionality.
19 +-----------------------------------------------------------------------------
20 */
21
22 #ifndef ALR_MAIN_C
23 #define ALR_MAIN_C
24
25 #define ENTITY_PL
26
27 /*==== INCLUDES ===================================================*/
28 #include <string.h>
29 #include <stdlib.h>
30 #include <ctype.h>
31 #include "typedefs.h"
32 #include "message.h"
33 #include "ccdapi.h"
34 #include "vsi.h"
35 #include "custom.h"
36 #include "gsm.h"
37 #include "prim.h"
38 #include "cnf_alr.h"
39 #include "mon_alr.h"
40 #include "pei.h"
41 #include "tok.h"
42 #include "pcm.h"
43
44 #ifdef GPRS
45 #include "alr_gprs.h"
46 #endif
47
48 #if defined (WIN32)
49 #define TRACING
50 #else
51 /* #define TRACING */
52 /* #define DL_TRACE_ENABLED */
53 #endif
54
55 #include "alr.h"
56 #include "alr_em.h"
57
58 #if defined (TRACING)
59 #define ALR_TRACE_MAIN(a) ALR_TRACE(a)
60 #else
61 #define ALR_TRACE_MAIN(a)
62 #endif
63
64 #if defined (TRACING)
65
66 #define ALR_TRACE_MAIN_BSIC_REQ(s) TRACE_EVENT_P1 ("bsic_req state %d",s)
67 #define ALR_TRACE_MAIN_RAND_ACC(s,m) TRACE_EVENT_P2 ("con est on for: %d %d times", s, m);
68 #define ALR_TRACE_MAIN_SCELL(o,s) TRACE_EVENT_P2 ("SC [%d]->[%d]", o, s)
69 #define ALR_TRACE_MAIN_VALID_BLOCK(m) TRACE_EVENT_P1 ("VALID BLOCK %d", m)
70 #define ALR_TRACE_MAIN_SI_UNEQ(c) TRACE_EVENT_P1 ("si uneq %d", c)
71 #define ALR_TRACE_MAIN_CR(m) TRACE_EVENT_P1 ("VALID BLOCK CR %d",m)
72 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
73 #define ALR_TRACE_MAIN_RACH(t) TRACE_EVENT_P1 ("powerclass txpwr %d", t)
74 #else
75 #define ALR_TRACE_MAIN_RACH(p,t) TRACE_EVENT_P2 ("powerclass gsm %d txpwr %d", p, t)
76 #endif
77 #define ALR_TRACE_MAIN_POWER_CNF { USHORT i; \
78 TRACE_EVENT_P1 ("power cnf: %d channels", mph_power_cnf->num_of_chan)\
79 for (i = 0; i < mph_power_cnf->num_of_chan; i++) { \
80 TRACE_EVENT_P2 ("rx_lev[%4d]= %d", \
81 mph_power_cnf->arfcn[i]&ARFCN_MASK, \
82 mph_power_cnf->rx_lev[i]);} }
83 #define ALR_TRACE_MAIN_RA_CNF(t1,t2,t3) TRACE_EVENT_P3 ("af: %d %d %d", t1,t2,t3)
84
85 #else /* TRACING */
86
87 #define ALR_TRACE_MAIN_BSIC_REQ(s)
88 #define ALR_TRACE_MAIN_RAND_ACC(s,m)
89 #define ALR_TRACE_MAIN_SCELL(o,s)
90 #define ALR_TRACE_MAIN_VALID_BLOCK(m)
91 #define ALR_TRACE_MAIN_SI_UNEQ(c)
92 #define ALR_TRACE_MAIN_CR(m)
93 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
94 #define ALR_TRACE_MAIN_RACH(t)
95 #else
96 #define ALR_TRACE_MAIN_RACH(p,t)
97 #endif
98 #define ALR_TRACE_MAIN_POWER_CNF
99 #define ALR_TRACE_MAIN_RA_CNF(t1,t2,t3)
100
101 #endif /* TRACING */
102
103 /*==== EXPORT =====================================================*/
104
105 /*==== PRIVAT =====================================================*/
106
107 /*==== VARIABLES ==================================================*/
108 LOCAL UBYTE from_dedicated = FALSE;
109
110 /*==== FUNCTIONS ==================================================*/
111
112 LOCAL BOOL ma_compare_dedi_sys_buffer (T_MPHC_DATA_IND *mphc_data_ind,
113 UBYTE msg_t);
114 LOCAL void ma_fill_dedi_sys_buffer (T_MPHC_DATA_IND *mphc_data_ind,
115 UBYTE msg_t);
116 LOCAL void ma_stop_rxlev_periodic_req (void);
117 LOCAL BOOL ma_compare_sys_buffer (T_MPHC_DATA_IND *mphc_data_ind,
118 UBYTE msg_t);
119 LOCAL void ma_send_dedi_unitdata (T_MPHC_DATA_IND *data_ind);
120 LOCAL void ma_sync_ind (UBYTE cause, USHORT arfcn);
121 LOCAL void ma_set_si_bitmap (UBYTE msg_t);
122 LOCAL void ma_fill_sys_buffer (T_MPHC_DATA_IND *data_ind, UBYTE msg_t);
123 LOCAL void ma_dedi_data_out (T_PH_DATA_IND *data_ind);
124 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
125 LOCAL void compare_l1_frequency_band_with_ffs (T_MPHC_INIT_L1_CON *init_l1_cnf);
126 #endif
127
128 /*
129 +--------------------------------------------------------------------+
130 | PROJECT : GSM-PS (6103) MODULE : ALR_CS |
131 | STATE : code ROUTINE : ma_init |
132 +--------------------------------------------------------------------+
133
134 PURPOSE : Initialize Main Control.
135
136 */
137
138 GLOBAL void ma_init (void)
139 {
140 GET_INSTANCE_DATA;
141 memset (alr_data, 0, sizeof (T_ALR_DATA));
142 alr_data->state[STATE_MA] = MA_NULL;
143
144 alr_data->mmi = 2; /* EVA 4 Board */
145 alr_data->keypad = 2; /* EVA 4 Board */
146 alr_data->ext_display = FALSE; /* internal display */
147 alr_data->pch_data.last_start_ccch_req.bs_pa_mfrms = NOT_PRESENT_8BIT;
148 ma_clean_sys_buffer (IND_ALL_SI);
149 ma_clean_dedi_sys_buffer ();
150 }
151
152 /*
153 +--------------------------------------------------------------------+
154 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
155 | STATE : code ROUTINE : ma_mph_idle_req |
156 +--------------------------------------------------------------------+
157
158 PURPOSE : Process the primitive MPH_IDLE_REQ.
159
160 */
161
162 UBYTE v_eotd = 0; /* for test automation */
163
164 GLOBAL void ma_mph_idle_req (T_MPH_IDLE_REQ* idle)
165 {
166 GET_INSTANCE_DATA;
167 if(idle->mod EQ MODE_CELL_SELECTION)
168 {
169 alr_data->nc_data.eotd_avail = idle->eotd_avail | v_eotd;
170 #if defined (REL99) && defined (TI_PS_FF_EMR)
171 if(idle->si2quater_status EQ SI2QUATER_CONFIGURE)
172 {
173 alr_data->nc_data.si2quater_status = SI2QUATER_CONFIGURE;
174 alr_data->nc_data.si2quater_pos = idle->si2quater_pos;
175 }
176 else if(idle->si2quater_status EQ SI2QUATER_ABSENT )
177 {
178 alr_data->nc_data.si2quater_status = SI2QUATER_ABSENT;
179 }
180 alr_data->nc_data.si2_count = NOT_PRESENT_8BIT;
181 #endif
182 }
183
184 switch (GET_STATE (STATE_MA))
185 {
186 case MA_DEDICATED:
187 ALR_TRACE_MAIN ("leave dedi");
188 ma_stop_active_procs(DONT_STOP_PCH_READING);
189 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
190 nc_new_serving_cell (idle->arfcn);
191
192 switch(idle->mod)
193 {
194 case MODE_CELL_RESELECTION:
195 ALR_TRACE_MAIN ("CR");
196 trc_state_transition(__LINE__, MA_CELL_RESELECTION);
197 SET_STATE (STATE_MA, MA_CELL_RESELECTION);
198 #ifdef GPRS
199 /*
200 * if going to a PBCCH cell we have to update the
201 * ncell states with GRR
202 */
203 gprs_alr_init();
204 alr_data->nc_sync_with_grr = TRUE;
205 #endif
206 from_dedicated = TRUE;
207 rach_init ();
208 rach_configure_power (idle->power);
209 pch_configure (idle, PGM_REORG);
210 pch_save_pgm(PGM_REORG_CS); /* reset saved pgm to REORG_CS */
211 nc_suspend (); /* to set the nc state */
212 nc_start_reselect (idle->arfcn);
213 break;
214 case MODE_CELL_SELECTION:
215 ALR_TRACE_MAIN ("CS");
216 if (idle->arfcn NEQ alr_data->old_serving_cell)
217 {
218 ALR_TRACE_MAIN ("CS but different cell!!!");
219 }
220 trc_state_transition(__LINE__, MA_IDLE);
221 SET_STATE(STATE_MA, MA_IDLE);
222 nc_suspend(); /* stop dedicated mode activity */
223 nc_add_offset();
224 #ifdef GPRS
225 set_gprs_support(idle->gprs_support);
226 #endif
227 pch_configure (idle, SAVED_PGM);
228 pch_start_ccch_req();
229 cb_start();
230
231 nc_start_monitoring();
232 break;
233 #ifdef GPRS
234 case MODE_CONFIG_PL: /* Cell has PBCCH */
235 ma_stop_active_procs(STOP_PCH_READING);
236 nc_suspend(); /* stop dedicated mode activity */
237 gprs_alr_init();
238 set_gprs_support(idle->gprs_support);
239 alr_data->nc_sync_with_grr = TRUE;
240 alr_data->gprs_data.pbcch = TRUE;
241 nc_add_offset(); /* convert counters */
242
243
244 rach_init ();
245 rach_configure_power (idle->power);
246 pch_configure (idle, PGM_NORMAL);
247 alr_data->nc_sync_with_grr = TRUE;
248 SET_STATE(STATE_MA, MA_IDLE);
249 break;
250 #endif
251 default:
252 break;
253 }
254 break;
255 case MA_CON_EST:
256 #ifdef GPRS
257 if(idle->mod EQ MODE_PACKET_TRANSFER) /* transition to PTM */
258 { /*
259 * NC BCCH reading doesn't need to be stopped, because it has
260 * already been stopped when entering MA_CON_EST
261 */
262 ma_stop_active_procs(STOP_PCH_READING);
263 SET_STATE (STATE_MA, MA_PTM);
264 }
265 else
266 {
267 #endif /* GPRS */
268 ma_stop_active_procs(DONT_STOP_PCH_READING);
269 rach_configure_power (idle->power);
270 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
271 nc_new_serving_cell (idle->arfcn);
272 #ifdef GPRS
273 if(idle->mod EQ MODE_CONFIG_PL)
274 {
275 ma_stop_active_procs(STOP_PCH_READING);
276 gprs_alr_init();
277 set_gprs_support(idle->gprs_support);
278 alr_data->gprs_data.pbcch = TRUE;
279 alr_data->nc_sync_with_grr = TRUE;
280 rach_init ();
281 rach_configure_power (idle->power);
282 pch_configure (idle, PGM_NORMAL);
283 SET_STATE(STATE_MA, MA_IDLE);
284 }
285 else
286 {
287 #endif
288 if (idle->arfcn EQ alr_data->old_serving_cell)
289 {
290 /* coming back after RACH failure */
291 trc_state_transition(__LINE__, MA_IDLE);
292 SET_STATE (STATE_MA, MA_IDLE);
293 #ifdef GPRS
294 set_gprs_support(idle->gprs_support);
295 #endif
296 pch_configure (idle, SAVED_PGM);
297 pch_start_ccch_req();
298 cb_start();
299 nc_start_monitoring();
300 }
301 else
302 {
303 trc_state_transition(__LINE__, MA_CELL_RESELECTION);
304 SET_STATE (STATE_MA, MA_CELL_RESELECTION);
305 #ifdef GPRS
306 /*
307 * if going to a PBCCH cell we have to update the
308 * ncell states with GRR
309 */
310 gprs_alr_init();
311 alr_data->nc_sync_with_grr = TRUE;
312
313 #endif
314 pch_configure (idle, PGM_REORG);
315 pch_save_pgm(PGM_REORG_CS); /* reset saved pgm to REORG_CS */
316 nc_start_reselect (idle->arfcn);
317 }
318 #ifdef GPRS
319 }
320 }
321 #endif
322 break;
323 case MA_CELL_SELECTION:
324 TRACE_EVENT_P1 ("SC[%u] in use, leave CS", idle->arfcn);
325
326 #ifdef GPRS
327 if(idle->mod EQ MODE_CONFIG_PL)
328 {
329 ma_stop_active_procs(STOP_PCH_READING);
330 gprs_alr_init();
331 set_gprs_support(idle->gprs_support);
332 alr_data->gprs_data.pbcch = TRUE;
333 alr_data->nc_sync_with_grr = TRUE;
334 rach_init ();
335 rach_configure_power (idle->power);
336 nc_new_serving_cell (idle->arfcn);
337 pch_configure (idle, PGM_NORMAL);
338 SET_STATE(STATE_MA, MA_IDLE);
339 break;
340 }
341 #endif
342
343 ALR_EM_CONFIGURE_IDLE_MODE;
344
345 ma_stop_active_procs(DONT_STOP_PCH_READING);
346
347 trc_state_transition(__LINE__, MA_IDLE);
348 SET_STATE (STATE_MA, MA_IDLE);
349 #ifdef GPRS
350 alr_data->nc_sync_with_grr=FALSE;
351 set_gprs_support(idle->gprs_support);
352 #endif
353 rach_configure_power (idle->power);
354 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
355 nc_check_new_ncc_permitted (idle->ncc_permitted);
356 nc_new_serving_cell (idle->arfcn);
357 pch_configure (idle, PGM_REORG_CS);
358 pch_save_pgm(0); /* reset saved pgm to REORG_CS */
359 pch_start_ccch_req();
360 /*
361 * nc_start_monitoring will be called when ncell list from RR
362 * is received
363 */
364 break;
365
366 case MA_IDLE:
367 switch (idle->mod)
368 {
369 #ifdef GPRS
370 case MODE_PACKET_TRANSFER: /* transition to PTM */
371 /*NC BCCH reading will be stopped when leaving idle*/
372 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS);
373 SET_STATE (STATE_MA, MA_PTM);
374 break;
375 case MODE_CONFIG_PL:
376 ma_stop_active_procs(STOP_PCH_READING|STOP_MEASUREMENTS);
377 gprs_alr_init();
378 set_gprs_support(idle->gprs_support);
379 /* PBCCH activated in cell */
380 alr_data->nc_sync_with_grr = TRUE;
381 alr_data->gprs_data.pbcch = TRUE;
382 rach_init ();
383 rach_configure_power (idle->power);
384 pch_configure (idle, PGM_NORMAL);
385 SET_STATE(STATE_MA, MA_IDLE);
386 break;
387 #endif /* GPRS */
388
389 case MODE_CELL_RESELECTION:
390 ALR_TRACE_MAIN ("idle mode cr");
391
392 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS);
393
394 trc_state_transition(__LINE__, MA_CELL_RESELECTION);
395 SET_STATE (STATE_MA, MA_CELL_RESELECTION);
396 #ifdef GPRS
397 /*
398 * if going to a PBCCH cell we have to update the
399 * ncell states with GRR
400 */
401 gprs_alr_init();
402 alr_data->nc_sync_with_grr = TRUE;
403 #endif
404 rach_init ();
405 rach_configure_power (idle->power);
406 TRACE_EVENT("IDLE_REQ : Cell found after CR");
407 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
408 // nc_check_new_ncc_permitted(idle->ncc_permitted);
409 nc_new_serving_cell (idle->arfcn);
410 pch_configure (idle, PGM_REORG);
411 pch_save_pgm(PGM_REORG_CS); /* reset saved pgm to REORG_CS */
412 nc_start_reselect (idle->arfcn);
413 break;
414 #ifdef GPRS
415 case MODE_CELL_RESELECTION_SYNC_ONLY:
416 if(alr_data->gprs_data.pbcch)
417 {
418 alr_data->gprs_data.sync_only=1;
419 alr_data->gprs_data.ptm=0;
420 ma_stop_active_procs(STOP_PCH_READING);
421 trc_state_transition(__LINE__, MA_CELL_RESELECTION);
422 SET_STATE (STATE_MA, MA_CELL_RESELECTION);
423 nc_new_serving_cell (idle->arfcn);
424 nc_start_reselect (idle->arfcn);
425 }
426 break;
427 #endif
428 case MODE_SYS_INFO_CHANGE:
429 ALR_TRACE_MAIN ("idle mode sys info changed");
430 rach_init ();
431 rach_configure_power (idle->power);
432
433 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
434 nc_check_new_ncc_permitted (idle->ncc_permitted);
435
436 if((idle->tn/2) NEQ
437 (alr_data->pch_data.pl_idle.ccch_group)
438 #ifdef GPRS
439 OR alr_data->gprs_data.pbcch
440 #endif
441 )
442 {
443 /* stop CCCH reading beforehand */
444 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS);
445 #ifdef GPRS
446 gprs_alr_init();
447 set_gprs_support(idle->gprs_support);
448 #endif
449 pch_configure (idle, PGM_REORG_CS);
450 pch_save_pgm(PGM_REORG_CS); /* reset saved pgm to REORG_CS */
451 pch_start_ccch_req();
452
453 nc_start_monitoring ();
454 }
455 else
456 {
457 #ifdef GPRS
458 if(idle->reorg_only EQ NORMAL_PGM AND
459 alr_data->gprs_data.ign_pgm EQ TRUE)
460 {
461 /*
462 * use last page mode read on PCH
463 * when the NON_DRX_TIMER has expired
464 */
465 pch_configure (idle, SAVED_PGM);
466 pch_start_ccch_req();
467 alr_data->gprs_data.ign_pgm = FALSE;
468 }
469 else if(alr_data->gprs_data.ign_pgm EQ FALSE)
470 {
471 set_gprs_support(idle->gprs_support);
472 if(gprs_alr_is_supported())
473 {
474 gprs_alr_init();
475 set_gprs_support(idle->gprs_support);
476 ma_stop_scell_bcch_req();
477 }
478 #endif
479 pch_save_pgm(0); /* save current pgm */
480 pch_configure (idle, SAVED_PGM);
481 pch_start_ccch_req();
482 #ifdef GPRS
483 }
484 /* other case should not happen */
485 #endif
486
487 }
488 break;
489 case MODE_CELL_SELECTION:
490 /* XXX does not seem to be used by RR*/
491 break;
492 default:
493 break;
494 }
495 break;
496 case MA_CELL_RESELECTION:
497 switch(idle->mod)
498 {
499 case MODE_CELL_SELECTION:
500
501 ALR_TRACE_MAIN ("from cr use cell");
502 /* we have found a suitable cell */
503 ma_stop_active_procs(DONT_STOP_PCH_READING);
504 rach_init ();
505 rach_configure_power (idle->power);
506 TRACE_EVENT("IDLE_REQ : PM config after CR");
507 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
508 nc_check_new_ncc_permitted (idle->ncc_permitted);
509 if (from_dedicated)
510 {
511 from_dedicated = FALSE;
512 nc_add_offset ();
513 }
514 pch_configure (idle, SAVED_PGM);
515
516 /* For OMAPS#90692 - Move to MA_IDLE before configuring
517 * the serving cell BCCH request, so as not to reset the
518 * si_bitmap again
519 */
520 trc_state_transition(__LINE__, MA_IDLE);
521 SET_STATE (STATE_MA, MA_IDLE);
522 pch_start_ccch_req();
523 #ifdef GPRS
524 alr_data->nc_sync_with_grr=FALSE;
525 set_gprs_support(idle->gprs_support);
526 #endif
527
528 /*
529 * resume neighbourcell operation
530 */
531 nc_start_monitoring ();
532 break;
533 case MODE_CELL_RESELECTION:
534 /* the last cell wasn't the right one, try again */
535 ma_stop_active_procs(STOP_PCH_READING);/* don´t forget to stop all processes */
536 #ifdef GPRS
537 gprs_alr_init();
538 #endif
539 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
540 // nc_check_new_ncc_permitted (idle->ncc_permitted);
541 nc_new_serving_cell (idle->arfcn);
542 pch_configure (idle, PGM_REORG);
543 pch_save_pgm(PGM_REORG_CS); /* reset saved pgm to REORG_CS */
544 nc_start_reselect (idle->arfcn);
545 break;
546 #ifdef GPRS
547 case MODE_CONFIG_PL:
548 ma_stop_active_procs(STOP_PCH_READING);
549 if (from_dedicated) from_dedicated = FALSE;
550
551 gprs_alr_init();
552 set_gprs_support(idle->gprs_support);
553 alr_data->gprs_data.pbcch = TRUE;
554 alr_data->nc_sync_with_grr = TRUE;
555 rach_init ();
556 rach_configure_power (idle->power);
557 pch_configure (idle, PGM_NORMAL);
558 SET_STATE(STATE_MA, MA_IDLE);
559 break;
560 #endif
561 default:
562 break;
563 }
564 break;
565 #ifdef GPRS
566 case MA_PTM:
567 /* back to packet idle */
568 ma_stop_active_procs(DONT_STOP_PCH_READING);
569 rach_configure_power (idle->power);
570 alr_data->bs_pa_mfrms = idle->bs_pa_mfrms;
571 nc_new_serving_cell (idle->arfcn);
572 nc_suspend();
573 if (idle->arfcn EQ alr_data->old_serving_cell)
574 {
575 trc_state_transition(__LINE__, MA_IDLE);
576 SET_STATE(STATE_MA, MA_IDLE);
577 #ifdef GPRS
578 set_gprs_support(idle->gprs_support);
579 #endif
580
581 if(idle->reorg_only EQ REORG_ONLY)
582 {
583 pch_configure (idle, PGM_REORG_CS);
584 alr_data->gprs_data.ign_pgm = TRUE;
585 }
586 else
587 {
588 pch_configure (idle, SAVED_PGM);
589 alr_data->gprs_data.ign_pgm = FALSE;
590 }
591 pch_start_ccch_req();
592 cb_start();
593 nc_start_monitoring();
594 }
595 else
596 {
597 trc_state_transition(__LINE__, MA_CELL_RESELECTION);
598 SET_STATE (STATE_MA, MA_CELL_RESELECTION);
599 #ifdef GPRS
600 /*
601 * if going to a PBCCH cell we have to update the
602 * ncell states with GRR
603 */
604 gprs_alr_init();
605 alr_data->nc_sync_with_grr = TRUE;
606 #endif
607 pch_configure (idle, PGM_REORG);
608 pch_save_pgm(PGM_REORG_CS); /* reset saved pgm to REORG_CS */
609 nc_start_reselect (idle->arfcn);
610 }
611 break;
612 #endif
613 default:
614 break;
615 }
616 PFREE (idle);
617 }
618
619
620 /*
621 +--------------------------------------------------------------------+
622 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
623 | STATE : code ROUTINE : ma_mph_neighbourcell_req |
624 +--------------------------------------------------------------------+
625
626 PURPOSE : Process the primitive MPH_NEIGHBOURCELL_REQ.
627
628 */
629
630 GLOBAL void ma_mph_neighbourcell_req (T_MPH_NEIGHBOURCELL_REQ* mph_neighbourcell_req)
631 {
632 GET_INSTANCE_DATA;
633
634 switch (GET_STATE (STATE_MA))
635 {
636 case MA_IDLE:
637 case MA_DEDICATED:
638 nc_ncell_list (mph_neighbourcell_req);
639
640 ALR_EM_CONFIGURE_NEIGHBOUERCELL_LIST;
641
642 break;
643 #ifdef GPRS
644 case MA_PTM:
645 /*In PTM just update the BA list. No need to start monitoring at L1 through MPHC*/
646 /*
647 * mix new list with old list
648 */
649 nc_update_ba_list (alr_data->serving_cell, mph_neighbourcell_req);
650 break;
651 #endif
652
653 default:
654 break;
655 }
656 PFREE (mph_neighbourcell_req);
657 }
658
659
660 /*
661 +--------------------------------------------------------------------+
662 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
663 | STATE : code ROUTINE : ma_mph_dedicated_req |
664 +--------------------------------------------------------------------+
665
666 PURPOSE : Process the primitive MPH_DEDICATED_REQ.
667
668 */
669
670 GLOBAL void ma_mph_dedicated_req (T_MPH_DEDICATED_REQ* dedi)
671 {
672 GET_INSTANCE_DATA;
673 switch (GET_STATE (STATE_MA))
674 {
675 case MA_CON_EST:
676 ALR_TRACE_MAIN ("dedi on");
677
678 ma_stop_active_procs (STOP_PCH_READING);
679 trc_state_transition(__LINE__, MA_DEDICATED);
680 SET_STATE (STATE_MA, MA_DEDICATED);
681 dedi_req (dedi);
682 ma_clean_dedi_sys_buffer ();
683 nc_start_dedicated (dedi->tr_para.pwrc, dedi->tr_para.dtx);
684 break;
685
686 case MA_DEDICATED:
687 dedi_req (dedi);
688 break;
689
690 default:
691 break;
692 }
693 PFREE (dedi);
694 }
695
696
697 /*
698 +--------------------------------------------------------------------+
699 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
700 | STATE : code ROUTINE : ma_mph_dedicated_fail_req |
701 +--------------------------------------------------------------------+
702
703 PURPOSE : Process the primitive MPH_DEDICATED_FAIL_REQ.
704
705 */
706
707 GLOBAL void ma_mph_dedicated_fail_req (T_MPH_DEDICATED_FAIL_REQ* mph_dedicated_fail_req)
708 {
709 dedi_fail_req ();
710 PFREE (mph_dedicated_fail_req);
711 }
712
713
714 /*
715 +--------------------------------------------------------------------+
716 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
717 | STATE : code ROUTINE : ma_mph_ciphering_req |
718 +--------------------------------------------------------------------+
719
720 PURPOSE : Process the primitive MPH_CIPHERING_REQ.
721
722 */
723
724 GLOBAL void ma_mph_ciphering_req (T_MPH_CIPHERING_REQ* mph_ciphering_req)
725 {
726 dedi_ciph_req (mph_ciphering_req);
727 PFREE(mph_ciphering_req);
728 }
729
730 /*
731 +--------------------------------------------------------------------+
732 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
733 | STATE : code ROUTINE : ma_mph_freq_redef_req |
734 +--------------------------------------------------------------------+
735
736 PURPOSE : Process the primitive MPH_FREQ_REDEF_REQ.
737
738 */
739
740 GLOBAL void ma_mph_freq_redef_req (T_MPH_FREQ_REDEF_REQ* mph_freq_redef_req)
741 {
742 dedi_freq_redef_req(mph_freq_redef_req);
743 PFREE(mph_freq_redef_req);
744 }
745
746 /*
747 +--------------------------------------------------------------------+
748 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
749 | STATE : code ROUTINE : ma_mph_channel_mode_req |
750 +--------------------------------------------------------------------+
751
752 PURPOSE : Process the primitive MPH_CHANNEL_MODE_REQ.
753
754 */
755
756 GLOBAL void ma_mph_channel_mode_req (T_MPH_CHANNEL_MODE_REQ* mph_channel_mode_req)
757 {
758 dedi_chan_mode_req (mph_channel_mode_req);
759 PFREE(mph_channel_mode_req);
760 }
761
762
763 /*
764 +--------------------------------------------------------------------+
765 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
766 | STATE : code ROUTINE : ma_mph_deactivate_req |
767 +--------------------------------------------------------------------+
768
769 PURPOSE : Process the primitive MPH_DEACTIVATE_REQ.
770
771 */
772
773 GLOBAL void ma_mph_deactivate_req (T_MPH_DEACTIVATE_REQ* mph_deactivate_req)
774 {
775 GET_INSTANCE_DATA;
776 UBYTE flags = 0;
777 PREUSE (mph_deactivate_req, mphc_deactivate_req, MPHC_DEACTIVATE_REQ);
778
779 if (alr_data->pch_data.last_start_ccch_req.bs_pa_mfrms NEQ NOT_PRESENT_8BIT)
780 flags |= STOP_PCH_READING;
781
782 switch (GET_STATE(STATE_MA))
783 {
784 case MA_CELL_SELECTION:
785 case MA_CELL_RESELECTION:
786 case MA_CON_EST:
787 case MA_DEDICATED:
788 #ifdef GPRS
789 case MA_PTM:
790 #endif
791 break;
792 case MA_IDLE:
793 #ifdef GPRS
794 if (alr_data->gprs_data.pbcch EQ TRUE)
795 break;
796 #endif
797 /*lint -fallthrough*/
798 default:
799 flags |= STOP_MEASUREMENTS;
800 break;
801 }
802
803 ma_stop_active_procs(flags);
804
805 ALR_EM_DEACTIVATE_L1;
806
807 /*
808 * There is no activation request for ALR. Therefore ALR is prepared
809 * here for the next powering on by stopping really all running processes
810 * and reinitialising the state variables.
811 */
812 nc_stop ();
813
814 cb_init ();
815 cs_init ();
816 pch_init ();
817 dedi_init ();
818 SET_STATE(STATE_MA, MA_NULL); /* it isn't clear whether the whole ma_init() should be performed */
819 ma_clean_sys_buffer (IND_ALL_SI);
820 ma_clean_dedi_sys_buffer ();
821
822 PSENDX(L1, mphc_deactivate_req);
823 }
824
825
826 /*
827 +--------------------------------------------------------------------+
828 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
829 | STATE : code ROUTINE : ma_mph_classmark_req |
830 +--------------------------------------------------------------------+
831
832 PURPOSE : Process the primitive MPH_CLASSMARK_REQ.
833
834 */
835
836 GLOBAL void ma_mph_classmark_req (T_MPH_CLASSMARK_REQ* classmark)
837 {
838 rach_configure_class (classmark->classmark.pclass,
839 classmark->classmark.pclass2);
840
841 ALR_EM_CONFIGURE_CLASSMARK;
842
843 PFREE (classmark);
844 }
845
846
847 /*
848 +--------------------------------------------------------------------+
849 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
850 | STATE : code ROUTINE : ma_mph_ext_meas_req |
851 +--------------------------------------------------------------------+
852
853 PURPOSE : Process the primitive MPH_EXT_MEAS_REQ.
854
855 */
856
857 GLOBAL void ma_mph_ext_meas_req (T_MPH_EXT_MEAS_REQ* mph_ext_meas_req)
858 {
859 GET_INSTANCE_DATA;
860 /* Process CS must be state CS_NULL (no Cell Selection active) */
861
862 if ( GET_STATE ( STATE_CS ) EQ CS_NULL )
863 {
864 mph_ext_meas_req->pch_interrupt = NO_PCH_INTERRUPT;
865
866 /* alr_data->cs_data.mph_ext_meas_req must be NULL */
867
868 if ( IS_EXT_MEAS_RUNNING ) /*alr_data->cs_data.mph_ext_meas_req NEQ NULL*/
869 {
870 PFREE ( alr_data->cs_data.mph_ext_meas_req );
871 }
872 alr_data->cs_data.mph_ext_meas_req = mph_ext_meas_req;
873 alr_data->cs_data.ext_meas_state_pend = CS_NULL;
874
875 ma_mph_power_req((T_MPH_POWER_REQ*) mph_ext_meas_req);
876 }
877 else
878 {
879 PALLOC ( mph_ext_meas_cnf, MPH_EXT_MEAS_CNF );
880 mph_ext_meas_cnf->num_of_chan = 0;
881 PSENDX ( RR, mph_ext_meas_cnf );
882
883 PFREE (mph_ext_meas_req);
884 }
885 }
886
887 /*
888 +--------------------------------------------------------------------+
889 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
890 | STATE : code ROUTINE : ma_mph_tch_loop_req |
891 +--------------------------------------------------------------------+
892
893 PURPOSE : Process the primitive MPH_TCH_LOOP_REQ.
894
895 */
896
897 GLOBAL void ma_mph_tch_loop_req (T_MPH_TCH_LOOP_REQ* mph_tch_loop_req)
898 {
899 dedi_tch_loop_req (mph_tch_loop_req);
900 PFREE(mph_tch_loop_req);
901 }
902
903
904 /*
905 +--------------------------------------------------------------------+
906 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
907 | STATE : code ROUTINE : ma_mph_dai_req |
908 +--------------------------------------------------------------------+
909
910 PURPOSE : Process the primitive MPH_DAI_REQ.
911
912 */
913
914 GLOBAL void ma_mph_dai_req (T_MPH_DAI_REQ* mph_dai_req)
915 {
916 dedi_dai_req (mph_dai_req);
917 PFREE(mph_dai_req);
918 }
919
920 /*
921 +--------------------------------------------------------------------+
922 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
923 | STATE : code ROUTINE : ma_mph_cbch_req |
924 +--------------------------------------------------------------------+
925
926 PURPOSE : Process the primitive MPH_CBCH_REQ.
927
928 */
929
930
931 GLOBAL void ma_mph_cbch_req (T_MPH_CBCH_REQ* cbch_req)
932 {
933 cb_mph_cbch_req( &cbch_req->cbch);
934 PFREE (cbch_req);
935 }
936
937 /*
938 +--------------------------------------------------------------------+
939 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
940 | STATE : code ROUTINE : ma_mph_identity_req |
941 +--------------------------------------------------------------------+
942
943 PURPOSE : Process the primitive MPH_IDENTITY_REQ.
944
945 */
946
947 GLOBAL void ma_mph_identity_req (T_MPH_IDENTITY_REQ* mph_identity_req)
948 {
949 pch_identity_req (mph_identity_req);
950 PFREE (mph_identity_req);
951 }
952
953 /*
954 +--------------------------------------------------------------------+
955 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
956 | STATE : code ROUTINE : ma_mph_sync_req |
957 +--------------------------------------------------------------------+
958
959 PURPOSE : Process the primitive MPH_SYNC_REQ.
960
961 */
962
963 GLOBAL void ma_mph_sync_req (T_MPH_SYNC_REQ* mph_sync_req)
964 {
965 GET_INSTANCE_DATA;
966 switch (mph_sync_req->cs)
967 {
968 case CS_CLEAN_SYS_INFO:
969 /*
970 * clean stored system information messages to force
971 * sending to RR.
972 */
973 ma_clean_dedi_sys_buffer ();
974 break;
975
976 case CS_STOP_BCCH_READING:
977 switch (GET_STATE (STATE_MA))
978 {
979 case MA_CELL_SELECTION:
980 cs_stop ();
981 break;
982 case MA_IDLE:
983 nc_stop_rr_activity (FALSE);
984 break;
985 }
986 break;
987
988 case CS_STOP_PLMN_SEARCH:
989 switch (GET_STATE (STATE_MA))
990 {
991 case MA_CELL_SELECTION:
992 cs_stop ();
993 break;
994 case MA_IDLE:
995 /*
996 * PLMN search is stopped. If mobile was in REORG before
997 * PLMN search, this is set again after finishing all BCCH reading.
998 */
999 if(alr_data->pch_data.pl_idle.page_mode EQ PGM_REORG_NC_SYNC)
1000 {
1001 alr_data->pch_data.pl_idle.page_mode = page_mode_before_hplmn_search;
1002 pch_start_ccch_req ();
1003 ALR_TRACE_MAIN ("PLMN search complete - REORG reestablished");
1004 }
1005 cs_stop ();
1006 nc_stop_rr_activity (TRUE);
1007 break;
1008 }
1009 break;
1010 case CS_STOP_PLMN_SEARCH_AND_DEACTIVATE:
1011 switch (GET_STATE (STATE_MA))
1012 {
1013 case MA_CELL_SELECTION:
1014 cs_stop ();
1015 break;
1016 case MA_IDLE:
1017 /*
1018 * If mobile was in REORG before PLMN search, this is set again after
1019 * finishing PLMN search. L1 is not configured, because PCH reading
1020 * is stopped anyway
1021 */
1022 if(alr_data->pch_data.pl_idle.page_mode EQ PGM_REORG_NC_SYNC)
1023 {
1024 alr_data->pch_data.pl_idle.page_mode = page_mode_before_hplmn_search;
1025 ALR_TRACE_MAIN ("PLMN search complete - REORG reestablished");
1026 }
1027 cs_stop ();
1028 nc_stop_rr_activity (TRUE);
1029 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS);
1030 break;
1031 }
1032 {
1033 PALLOC(deact_req, MPHC_DEACTIVATE_REQ);
1034 PSENDX(L1, deact_req);
1035 }
1036 break;
1037 #ifdef GPRS
1038 case CS_START_PCCO:
1039 alr_data->gprs_data.pcco_active = TRUE;
1040 if ( GET_STATE(STATE_MA) EQ MA_PTM )
1041 {
1042 ma_stop_active_procs(STOP_MEASUREMENTS |STOP_PCH_READING);
1043 SET_STATE(STATE_MA, MA_IDLE);
1044 }
1045 break;
1046 #endif
1047 case CS_RXLEV_VAL_REQ:
1048 switch (GET_STATE(STATE_MA))
1049 {
1050 #ifdef GPRS
1051 case MA_PTM:
1052 case MA_IDLE:
1053 break;
1054 #endif /* GPRS */
1055 case MA_DEDICATED:
1056 /* EMO */
1057 break;
1058 }
1059 break;
1060 case CS_SYS_INFO_2BIS_SUPPORT_CHANGED:
1061 if((GET_STATE(STATE_MA) EQ MA_IDLE) AND
1062 (alr_data->pch_data.pl_idle.page_mode EQ PGM_NORMAL OR
1063 alr_data->pch_data.pl_idle.page_mode EQ PGM_EXTENDED) AND
1064 (alr_data->pch_data.reorg_bcch_reading EQ FALSE))
1065 {
1066 ma_stop_scell_bcch_req ();
1067 if(alr_data->cs_data.si_bitmap & SI_2BIS_READ)
1068 alr_data->cs_data.si_bitmap &= ~(SI_2BIS_READ);
1069 else
1070 alr_data->cs_data.si_bitmap |= SI_2BIS_READ;
1071 sc_start_periodic();
1072 }
1073 break;
1074 case CS_SYS_INFO_2TER_SUPPORT_CHANGED:
1075 /* Dont start periodic reading if we are in PGM_REORG */
1076 if((GET_STATE(STATE_MA) EQ MA_IDLE) AND
1077 (alr_data->pch_data.pl_idle.page_mode EQ PGM_NORMAL OR
1078 alr_data->pch_data.pl_idle.page_mode EQ PGM_EXTENDED) AND
1079 (alr_data->pch_data.reorg_bcch_reading EQ FALSE))
1080 {
1081 ma_stop_scell_bcch_req ();
1082 if(alr_data->cs_data.si_bitmap & SI_2TER_READ)
1083 alr_data->cs_data.si_bitmap &= ~(SI_2TER_READ);
1084 else
1085 alr_data->cs_data.si_bitmap |= SI_2TER_READ;
1086 sc_start_periodic();
1087 }
1088 break;
1089 default:
1090 break;
1091 }
1092
1093 PFREE (mph_sync_req);
1094 }
1095
1096 /*
1097 +--------------------------------------------------------------------+
1098 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1099 | STATE : code ROUTINE : ma_mph_clean_buf_req |
1100 +--------------------------------------------------------------------+
1101
1102 PURPOSE : Process the primitive MPH_CLEAN_BUF_REQ.
1103
1104 */
1105
1106 GLOBAL void ma_mph_clean_buf_req (T_MPH_CLEAN_BUF_REQ* mph_clean_buf_req)
1107 {
1108 ma_clean_sys_buffer(mph_clean_buf_req->si_to_clean);
1109 PFREE(mph_clean_buf_req);
1110 }
1111
1112 /*
1113 +--------------------------------------------------------------------+
1114 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1115 | STATE : code ROUTINE : ma_mph_stop_dedi_req |
1116 +--------------------------------------------------------------------+
1117
1118 PURPOSE : Process the primitive MPH_STOP_DEDICATED_REQ.
1119
1120 */
1121 GLOBAL void ma_mph_stop_dedi_req(T_MPH_STOP_DEDICATED_REQ *stop_dedi)
1122 {
1123 dedi_stop();
1124 PFREE(stop_dedi);
1125 }
1126
1127 /*
1128 +--------------------------------------------------------------------+
1129 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1130 | STATE : code ROUTINE : ma_mph_power_req |
1131 +--------------------------------------------------------------------+
1132
1133 PURPOSE : Process the primitive MPH_POWER_REQ and MPH_EXT_MEAS_REQ.
1134
1135 */
1136
1137 GLOBAL void ma_mph_power_req(T_MPH_POWER_REQ* mph_power_req)
1138 {
1139 GET_INSTANCE_DATA;
1140 if ( D_OPC(mph_power_req) EQ MPH_POWER_REQ && IS_EXT_MEAS_RUNNING )
1141 {
1142 PALLOC ( mph_power_cnf, MPH_POWER_CNF );
1143 mph_power_cnf->num_of_chan = 0;
1144 PSENDX ( RR, mph_power_cnf );
1145 TRACE_ERROR ( "Cell Sel during Ext Meas");
1146 PFREE (mph_power_req);
1147 return;
1148 }
1149
1150 if (mph_power_req->freq_bands EQ 0)
1151 {
1152 TRACE_ERROR ("MPH_POWER_REQ with freq_bands=0 (Invalid value)!");
1153 TRACE_ASSERT (mph_power_req->freq_bands EQ 0);
1154 }
1155
1156 if(!IS_EXT_MEAS_RUNNING)
1157 {
1158 /* CSI-LLD Section : 4.1.3.4.2.2 */
1159 if(alr_data->cs_data.p_power_req NEQ NULL)
1160 {
1161 TRACE_ERROR("MPH_POWER_REQ buffer leakage");
1162 PFREE(alr_data->cs_data.p_power_req);
1163 }
1164 /* Store the MPH_POWER_REQ pointer for later usage */
1165 alr_data->cs_data.p_power_req = mph_power_req;
1166 }
1167
1168 alr_data->cs_data.freq_bands = mph_power_req->freq_bands;
1169
1170 ALR_EM_POWER_MEASSUREMENT_REQUEST;
1171
1172 switch (mph_power_req->pch_interrupt)
1173 {
1174 case NO_PCH_INTERRUPT:
1175 /*
1176 * Full list power measurements without changing the current state
1177 */
1178 alr_data->plmn_search_running = TRUE;
1179 nc_suspend();
1180 cs_power_req (NO_PCH_INTERRUPT);
1181 break;
1182 case PCH_INTERRUPT:
1183 /*
1184 * Full list power measurements for Cell Selection
1185 */
1186 alr_data->plmn_search_running = FALSE;
1187 alr_multiband_std = NOT_PRESENT_8BIT;
1188 #ifdef GPRS
1189 gprs_alr_init();
1190 #endif
1191 switch (GET_STATE(STATE_MA))
1192 {
1193 case MA_NULL:
1194 case MA_CELL_SELECTION:
1195 ma_stop_active_procs(DONT_STOP_PCH_READING);
1196 SET_STATE(STATE_MA, MA_CELL_SELECTION);
1197 cs_power_req (PCH_INTERRUPT);
1198 break;
1199 case MA_CELL_RESELECTION:
1200 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS);
1201 nc_stop();
1202 SET_STATE(STATE_MA, MA_CELL_SELECTION);
1203 cs_power_req (PCH_INTERRUPT);
1204 break;
1205 case MA_CON_EST:
1206 case MA_DEDICATED:
1207 case MA_IDLE:
1208 #ifdef GPRS
1209 case MA_PTM:
1210 alr_data->nc_sync_with_grr = TRUE;
1211 #endif
1212 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS);
1213 /*
1214 * call this explicitly here, because stop_active_procs only
1215 * suspends ncell procedures
1216 */
1217 nc_stop();
1218 SET_STATE(STATE_MA, MA_CELL_SELECTION);
1219 cs_power_req (PCH_INTERRUPT);
1220 break;
1221 default:
1222 if(!IS_EXT_MEAS_RUNNING)
1223 {
1224 PFREE (mph_power_req);
1225 alr_data->cs_data.p_power_req = NULL;
1226 TRACE_ERROR ("MPH_POWER_REQ received in invalid MA state");
1227 }
1228 break;
1229 }
1230 break;
1231 default:
1232 if(!IS_EXT_MEAS_RUNNING)
1233 {
1234 PFREE (mph_power_req);
1235 alr_data->cs_data.p_power_req = NULL;
1236 TRACE_ERROR ("MPH_POWER_REQ: Invalid search type");
1237 }
1238 break;
1239 }
1240 }
1241
1242 /*
1243 +--------------------------------------------------------------------+
1244 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1245 | STATE : code ROUTINE : ma_mph_bsic_req |
1246 +--------------------------------------------------------------------+
1247
1248 PURPOSE : Process the primitive MPH_BSIC_REQ.
1249
1250 */
1251
1252 GLOBAL void ma_mph_bsic_req (T_MPH_BSIC_REQ* mph_bsic_req)
1253 {
1254 GET_INSTANCE_DATA;
1255 ALR_TRACE_MAIN_BSIC_REQ (GET_STATE(STATE_MA));
1256
1257 #ifdef GPRS
1258 if(alr_data->gprs_data.pcco_active)
1259 {
1260 cs_bsic_req(mph_bsic_req);
1261 PFREE (mph_bsic_req);
1262 return;
1263 }
1264 #endif
1265
1266 switch (GET_STATE (STATE_MA))
1267 {
1268 case MA_CELL_SELECTION:
1269 cs_bsic_req (mph_bsic_req);
1270 break;
1271 case MA_IDLE:
1272 nc_bsic_req (mph_bsic_req);
1273 break;
1274 #ifdef GPRS
1275 case MA_DEDICATED:
1276
1277 ma_stop_active_procs(STOP_PCH_READING | STOP_MEASUREMENTS); /* DEDI-state is now DEDI_INACTIVE */
1278 /* DEDI-state is now DEDI_INACTIVE */
1279 SET_STATE(STATE_NC, NC_NULL);
1280 #ifdef NOT_YET
1281 nc_suspend(); /* stop dedicated mode activity */
1282 #endif
1283
1284 SET_STATE(STATE_MA, MA_CELL_SELECTION);
1285 cs_bsic_req (mph_bsic_req);
1286 break;
1287 #endif
1288 default:
1289 break;
1290 }
1291
1292 PFREE (mph_bsic_req);
1293 }
1294
1295
1296 /*
1297 +--------------------------------------------------------------------+
1298 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1299 | STATE : code ROUTINE : ma_mph_meas_rep_req |
1300 +--------------------------------------------------------------------+
1301
1302 PURPOSE : Process the primitive MPH_MEAS_REP_REQ.
1303 */
1304
1305 #ifdef GPRS
1306 GLOBAL void ma_mph_meas_rep_req(T_MPH_MEAS_REP_REQ * mph_meas_rep_req)
1307 {
1308 GET_INSTANCE_DATA;
1309 USHORT i;
1310 TRACE_EVENT("mph_meas_rep_req");
1311
1312
1313 switch(mph_meas_rep_req->cause)
1314 {
1315 case NC_START_MEAS:
1316 /*
1317 * Reset nc mease results database
1318 */
1319 for(i=0;i<=BA_LIST_SIZE;i++)
1320 {
1321 alr_data->nc_data.cell[i].nc_rxlev = 0;
1322 alr_data->nc_data.cell[i].c_nc_rxlev = 0;
1323 }
1324 /*
1325 * activate rx_lev averaging when NC=1 or NC=2
1326 */
1327 alr_data->nwctrl_meas_active = TRUE;
1328 break;
1329 case NC_REPORT_MEAS:
1330 /*
1331 * Calculate rx_lev average and send the report to RR. RR forwards this to GRR
1332 */
1333 if(alr_data->nwctrl_meas_active)
1334 {
1335 PALLOC(mph_meas_rep_cnf, MPH_MEAS_REP_CNF);
1336 memset(mph_meas_rep_cnf,0,sizeof(T_MPH_MEAS_REP_CNF));
1337 nc_build_nwctrl_rr_report(mph_meas_rep_cnf);
1338 PSENDX ( RR, mph_meas_rep_cnf);
1339 for(i=0;i<=BA_LIST_SIZE;i++)
1340 {
1341 alr_data->nc_data.cell[i].nc_rxlev = 0;
1342 alr_data->nc_data.cell[i].c_nc_rxlev = 0;
1343 }
1344 }
1345 break;
1346 case NC_STOP_MEAS:
1347 /*
1348 * De-activate rx_lev averaging for Network control
1349 */
1350 alr_data->nwctrl_meas_active = FALSE;
1351 break;
1352 default:
1353 break;
1354 }
1355 PFREE(mph_meas_rep_req);
1356 }
1357 #endif
1358
1359
1360 /*
1361 +--------------------------------------------------------------------+
1362 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1363 | STATE : code ROUTINE : ma_mph_random_access_req |
1364 +--------------------------------------------------------------------+
1365
1366 PURPOSE : Process the primitive MPH_RANDOM_ACCESS_REQ.
1367
1368 */
1369
1370 GLOBAL void ma_mph_random_access_req (T_MPH_RANDOM_ACCESS_REQ* mph_random_access_req)
1371 {
1372 GET_INSTANCE_DATA;
1373 switch (GET_STATE (STATE_MA))
1374 {
1375 case MA_IDLE:
1376 ALR_TRACE_MAIN_RAND_ACC(alr_data->serving_cell, mph_random_access_req->send_mode.no);
1377
1378 /*
1379 * suspend neighbour cell procedures
1380 */
1381 ma_stop_active_procs(DONT_STOP_PCH_READING | STOP_MEASUREMENTS);
1382 SET_STATE (STATE_MA, MA_CON_EST);
1383 /*
1384 * switch to full downlink CCCH listening
1385 */
1386 pch_save_pgm(0);
1387 pch_configure(NULL, PGM_REORG_CS);
1388 pch_start_ccch_req ();
1389 /*
1390 * Send uplink Random Bursts
1391 */
1392 rach_random_req (mph_random_access_req);
1393 break;
1394 #ifdef GPRS
1395 case MA_PTM:
1396 ma_stop_active_procs(DONT_STOP_PCH_READING| STOP_MEASUREMENTS);
1397 // nc_suspend(); gprs_alr_nc_leave_ptm();
1398 SET_STATE (STATE_MA, MA_CON_EST);
1399 /*
1400 * switch to full downlink CCCH listening
1401 */
1402 /*pch_save_pgm(0);*/
1403 pch_configure(NULL, PGM_REORG_CS);
1404 pch_start_ccch_req ();
1405 /*
1406 * Send uplink Random Bursts
1407 */
1408 rach_random_req (mph_random_access_req);
1409 break;
1410 #endif
1411 case MA_CON_EST:
1412 SET_STATE (STATE_MA, MA_CON_EST);
1413 rach_random_req (mph_random_access_req);
1414 break;
1415
1416 default:
1417 break;
1418 }
1419
1420 PFREE (mph_random_access_req);
1421 }
1422
1423 /*
1424 +--------------------------------------------------------------------+
1425 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1426 | STATE : code ROUTINE : ma_mph_mph_emo_req |
1427 +--------------------------------------------------------------------+
1428
1429 PURPOSE : Process the primitive MPH_MPH_EMO_REQ.
1430
1431 */
1432
1433 GLOBAL void ma_mph_emo_req (T_MPH_EMO_REQ *mph_emo_req)
1434 {
1435 GET_INSTANCE_DATA;
1436 switch (GET_STATE (STATE_MA))
1437 {
1438 case MA_DEDICATED:
1439 {
1440 UBYTE i,n;
1441 USHORT *radio_freq;
1442 USHORT *arfcn;
1443 USHORT sc = alr_data->serving_cell;
1444 BOOL sc_ok;
1445 PALLOC (mphc_update_ba_list, MPHC_UPDATE_BA_LIST);
1446
1447 alr_data->dedi_data.emo_ba_id = mph_emo_req->ba_id;
1448
1449 n = mph_emo_req->c_arfcn;
1450 if ( n >= BA_LIST_SIZE )
1451 n = BA_LIST_SIZE;
1452
1453 /*
1454 * Initialize the outgoing primitive MPHC_UPDATE_BA_LIST.
1455 */
1456
1457 radio_freq = &mphc_update_ba_list->chan_list.radio_freq[0];
1458 arfcn = &mph_emo_req->arfcn[0];
1459 sc_ok = FALSE;
1460
1461 for ( i = 0; i < n; i++ )
1462 {
1463 radio_freq[i] = ARFCN_TO_L1 (arfcn[i]);
1464 if ( radio_freq[i] EQ sc )
1465 {
1466 sc_ok = TRUE;
1467 }
1468 }
1469 if ( !sc_ok AND n < BA_LIST_SIZE ) /* add the serving cell ARFCN */
1470 {
1471 radio_freq[n++] = sc;
1472 }
1473 mphc_update_ba_list->num_of_chans = n;
1474 mphc_update_ba_list->pwrc = alr_data->nc_data.pwrc;
1475 mphc_update_ba_list->dtx_allowed = alr_data->nc_data.dtx;
1476 mphc_update_ba_list->ba_id = mph_emo_req->ba_id;
1477
1478 PSENDX (L1, mphc_update_ba_list);
1479
1480 break;
1481 }
1482 }
1483 PFREE (mph_emo_req);
1484 }
1485 /*
1486 +--------------------------------------------------------------------+
1487 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1488 | STATE : code ROUTINE : ma_mph_mph_emo_req |
1489 +--------------------------------------------------------------------+
1490
1491 PURPOSE : Process the primitive MPH_MPH_EMO_REQ.
1492
1493 */
1494
1495 GLOBAL void ma_mph_ncell_pos_req (T_MPH_NCELL_POS_REQ *mph_ncell_pos_req)
1496 {
1497 nc_ncell_pos_req(mph_ncell_pos_req);
1498 }
1499 /* ------------------------------------------------------------------
1500 * ------------------------------------------------------------------
1501 * Functions for the lower layer(MPHC) primitive processing
1502 * ------------------------------------------------------------------
1503 * ------------------------------------------------------------------
1504 */
1505
1506
1507 /*
1508 +--------------------------------------------------------------------+
1509 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1510 | STATE : code ROUTINE : ma_mphc_rxlev_con |
1511 +--------------------------------------------------------------------+
1512
1513 PURPOSE : Process the primitive MPHC_RXLEV_CON.
1514
1515 */
1516
1517 GLOBAL void ma_mphc_rxlev_ind (T_MPHC_RXLEV_IND* rxlev_ind)
1518 {
1519 GET_INSTANCE_DATA;
1520
1521 USHORT cs_state = GET_STATE (STATE_CS);
1522 switch (cs_state)
1523 {
1524 default:
1525 TRACE_EVENT_P1 ("wrong CS state (%u) in ma_mphc_rxlev_ind()", cs_state);
1526 /*lint -fallthrough*/
1527 case CS_ACTIVE_MEASURE:
1528 SET_STATE(STATE_CS, CS_MEASURED);
1529 break;
1530 }
1531
1532 ALR_EM_FIELDSTRENGTH_MEASUREMENT_CONFIRM;
1533 cs_rxlev_ind (rxlev_ind);
1534 PFREE (rxlev_ind);
1535 }
1536
1537 /*
1538 +--------------------------------------------------------------------+
1539 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1540 | STATE : code ROUTINE : ma_mphc_stop_rxlev_con |
1541 +--------------------------------------------------------------------+
1542
1543 PURPOSE : Process the primitive MPHC_RXLEV_CON.
1544
1545 */
1546
1547 GLOBAL void ma_mphc_stop_rxlev_cnf (T_MPHC_STOP_RXLEV_CON * rxlev_cnf)
1548 {
1549 GET_INSTANCE_DATA;
1550 if ( IS_EXT_MEAS_RUNNING )
1551 {
1552 nc_stop_ext_meas_ind();
1553 alr_data->cs_data.ext_meas_state_pend = CS_NULL;
1554 }
1555 PFREE(rxlev_cnf);
1556 }
1557
1558
1559 /*
1560 +--------------------------------------------------------------------+
1561 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1562 | STATE : code ROUTINE : ma_stop_cnf |
1563 +--------------------------------------------------------------------+
1564
1565 PURPOSE : Processes the primitives MPHC_STOP_*_CON.
1566
1567 */
1568
1569 GLOBAL void ma_mphc_empty_cnf (void *cnf)
1570 {
1571 PFREE (cnf);
1572 }
1573
1574 /*
1575 +--------------------------------------------------------------------+
1576 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1577 | STATE : code ROUTINE : ma_mphc_network_sync_ind |
1578 +--------------------------------------------------------------------+
1579
1580 PURPOSE : Process the primitive MPHC_NETWORK_SYNC_IND.
1581
1582 */
1583
1584 GLOBAL void ma_mphc_network_sync_ind (T_MPHC_NETWORK_SYNC_IND* sync_ind)
1585 {
1586 TIMERSTOP(TIM_NW_SYNC_GUARD);
1587 cs_network_sync_ind (sync_ind);
1588 PFREE(sync_ind);
1589 }
1590
1591 #if defined(STOP_SYNC_TASK)
1592 /*
1593 +----------------------------------------------------------------------------+
1594 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1595 | STATE : code ROUTINE : ma_mphc_stop_network_sync_req |
1596 +----------------------------------------------------------------------------+
1597
1598 PURPOSE : Process the primitive MPHC_STOP_NETWORK_SYNC_REQ.
1599
1600 */
1601
1602 GLOBAL void ma_cs_stop_network_sync_req(void)
1603 {
1604 GET_INSTANCE_DATA;
1605 if (alr_data->cs_data.sync_active)
1606 {
1607 PALLOC (stop_sync_task, MPHC_STOP_NETWORK_SYNC_REQ); /* T_MPHC_STOP_NETWORK_SYNC_REQ */
1608 TRACE_EVENT ("STOP_NETWORK_SYNC_REQ");
1609 PSENDX(L1, stop_sync_task);
1610 }
1611 }
1612
1613 /*
1614 +----------------------------------------------------------------------------+
1615 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1616 | STATE : code ROUTINE : ma_mphc_stop_network_sync_cnf |
1617 +----------------------------------------------------------------------------+
1618
1619 PURPOSE : Process the primitive MPHC_STOP_NETWORK_SYNC_CON.
1620
1621 */
1622
1623 GLOBAL void ma_mphc_stop_network_sync_cnf(T_MPHC_STOP_NETWORK_SYNC_CON *stop_network_sync_cnf)
1624 {
1625 GET_INSTANCE_DATA;
1626 alr_data->cs_data.sync_active = FALSE;
1627 switch(GET_STATE(STATE_CS))
1628 {
1629 case CS_STOP_SYNC:
1630 SET_STATE (STATE_CS, CS_STOP_SYNC_DONE);
1631 cs_bsic_req(NULL);
1632 break;
1633
1634 case CS_NW_SYNC_TIMEOUT:
1635 /* Inform RR that no BCCH was found */
1636 SET_STATE (STATE_CS, CS_ACTIVE_SYNC);
1637
1638 {
1639 PALLOC (mph_bsic_cnf, MPH_BSIC_CNF);
1640 mph_bsic_cnf->cs = CS_NO_BCCH_AVAIL;
1641 PSENDX (RR, mph_bsic_cnf);
1642 }
1643 break;
1644
1645 default:
1646 break;
1647 }
1648
1649 PFREE(stop_network_sync_cnf);
1650 }
1651 #endif /* STOP_SYNC_TASK */
1652
1653 /*
1654 +--------------------------------------------------------------------+
1655 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1656 | STATE : code ROUTINE : ma_mphc_new_scell_cnf |
1657 +--------------------------------------------------------------------+
1658
1659 PURPOSE : Process the primitive MPHC_NEW_SCELL_CON.
1660
1661 */
1662
1663 GLOBAL void ma_mphc_new_scell_cnf (T_MPHC_NEW_SCELL_CON* new_scell_cnf)
1664 {
1665 GET_INSTANCE_DATA;
1666 /* we have a new serving cell */
1667 vsi_t_sleep(VSI_CALLER 10);
1668
1669 switch (GET_STATE(STATE_MA))
1670 {
1671 case MA_CELL_SELECTION:
1672 /*
1673 * we are synchronized to the new cell
1674 * now read the BCCH to check if the cell
1675 * is suitable
1676 */
1677 cs_read_scell_bcch ();
1678 break;
1679 case MA_CELL_RESELECTION:
1680 ALR_TRACE_MAIN ("new sc in cr");
1681 if (alr_data->old_serving_cell NEQ alr_data->serving_cell)
1682 {
1683 ALR_TRACE_MAIN_SCELL(alr_data->old_serving_cell, alr_data->serving_cell);
1684 ALR_TRACE_MAIN ("update timebase");
1685 /*
1686 * update the timebase now
1687 */
1688 nc_update_list (alr_data->serving_cell);
1689 /*
1690 * removing of the old serving cell only just if
1691 * RR gives a positive receipt for cell selection.
1692 * obsolet: nc_update_serving_cell (alr_data->old_serving_cell);
1693 */
1694
1695 /*
1696 * In case the serving cell has been changed, the last CCCH configuration
1697 * is not valid anymore! It will delete now, so that the sucessful
1698 * comparison inside ma_pch_start_ccch_req() will not prevent a new
1699 * CCCH configuration of L1.
1700 */
1701 memset (&alr_data->pch_data.last_start_ccch_req, 0,
1702 sizeof (alr_data->pch_data.last_start_ccch_req));
1703 }
1704 #ifdef GPRS
1705 if(alr_data->gprs_data.sync_only)
1706 {
1707 PALLOC(sync, MPH_SYNC_IND);
1708 sync->cs = CS_SCELL_IS_SYNCED;
1709 alr_data->gprs_data.sync_only=0;
1710 SET_STATE(STATE_MA, MA_IDLE);
1711 PSENDX (RR, sync);
1712 }
1713 else
1714 {
1715 #endif
1716 pch_start_ccch_req();
1717 #ifdef GPRS
1718 }
1719 #endif
1720 break;
1721 case MA_IDLE:
1722 ALR_TRACE_MAIN ("new sc in idle");
1723 if (alr_data->old_serving_cell NEQ alr_data->serving_cell)
1724 nc_update_list (alr_data->serving_cell);
1725 break;
1726 case MA_CON_EST:
1727 break;
1728 default:
1729 break;
1730 }
1731
1732 PFREE (new_scell_cnf);
1733 }
1734
1735 /*
1736 +--------------------------------------------------------------------+
1737 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1738 | STATE : code ROUTINE : ma_mphc_ncell_bcch_ind |
1739 +--------------------------------------------------------------------+
1740
1741 PURPOSE : Process the primitive MPHC_NCELL_BCCH_IND.
1742
1743 */
1744
1745 GLOBAL void ma_mphc_ncell_bcch_ind (T_MPHC_NCELL_BCCH_IND* ncell_bcch_ind)
1746 {
1747 nc_bcch_ind (ncell_bcch_ind);
1748 PFREE (ncell_bcch_ind);
1749 }
1750
1751 /*
1752 +--------------------------------------------------------------------+
1753 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1754 | STATE : code ROUTINE : ma_mphc_ncell_sync_ind |
1755 +--------------------------------------------------------------------+
1756
1757 PURPOSE : Process the primitive MPHC_NCELL_SYNC_IND.
1758
1759 */
1760
1761 GLOBAL void ma_mphc_ncell_sync_ind (T_MPHC_NCELL_SYNC_IND* ncell_sync_ind)
1762 {
1763 nc_sync_ind (ncell_sync_ind);
1764 PFREE (ncell_sync_ind);
1765 }
1766
1767 /*
1768 +--------------------------------------------------------------------+
1769 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1770 | STATE : code ROUTINE : ma_mphc_stop_ncell_sync_cnf |
1771 +--------------------------------------------------------------------+
1772
1773 PURPOSE : Process the primitive MPHC_NCELL_SYNC_IND.
1774
1775 */
1776
1777 GLOBAL void ma_mphc_stop_ncell_sync_cnf (T_MPHC_STOP_NCELL_SYNC_CON *cnf )
1778 {
1779 GET_INSTANCE_DATA;
1780 if ( IS_EXT_MEAS_RUNNING )
1781 {
1782 nc_stop_ext_meas_ind();
1783 alr_data->cs_data.ext_meas_state_pend = CS_NULL;
1784 }
1785 PFREE (cnf);
1786 }
1787
1788 /*
1789 +--------------------------------------------------------------------+
1790 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1791 | STATE : code ROUTINE : ma_mphc_ncell_bcch_ind |
1792 +--------------------------------------------------------------------+
1793
1794 PURPOSE : Process the primitive MPHC_RXLEV_PERIODIC_IND.
1795
1796 */
1797
1798 GLOBAL void ma_mphc_rxlev_periodic_ind (T_MPHC_RXLEV_PERIODIC_IND*
1799 rxlev_periodic_ind)
1800 {
1801 GET_INSTANCE_DATA;
1802
1803 switch (GET_STATE (STATE_MA))
1804 {
1805 case MA_CELL_RESELECTION:
1806 case MA_CON_EST:
1807 case MA_IDLE:
1808 nc_report (rxlev_periodic_ind);
1809 #ifdef TI_PS_HCOMM_CHANGE
1810 PSIGNAL (_hCommDL, PH_TRACE_IND, NULL);
1811 #else
1812 PSIGNAL (hCommDL, PH_TRACE_IND, NULL);
1813 #endif /* TI_PS_HCOMM_CHANGE */
1814 alr_trc_read (8);
1815 break;
1816
1817 default:
1818 break;
1819 }
1820 PFREE (rxlev_periodic_ind);
1821 }
1822
1823 /*
1824 +--------------------------------------------------------------------+
1825 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1826 | STATE : code ROUTINE : ma_mphc_ra_cnf |
1827 +--------------------------------------------------------------------+
1828
1829 PURPOSE : Process the primitive MPHC_RA_CON.
1830
1831 */
1832
1833 GLOBAL void ma_mphc_ra_cnf (T_MPHC_RA_CON* ra_cnf)
1834 {
1835 GET_INSTANCE_DATA;
1836
1837 switch (GET_STATE (STATE_MA))
1838 {
1839 case MA_CON_EST:
1840 rach_ra_cnf (ra_cnf);
1841 break;
1842 default:
1843 break;
1844 }
1845 PFREE (ra_cnf);
1846 }
1847
1848 /*
1849 +--------------------------------------------------------------------+
1850 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
1851 | STATE : code ROUTINE : ma_trc_data_ind |
1852 +--------------------------------------------------------------------+
1853
1854 PURPOSE : Trace the primitive MPHC_DATA_IND.
1855
1856 configure the output with the following command:
1857 CONFIG TRC_DATA_IND=n
1858
1859 the available decimal values of the bit mask 'n' are:
1860 ID_TRC_DATA_IND_ALL 255
1861 ID_TRC_DATA_IND_VALID 127
1862 ID_TRC_DATA_IND_INVALID 128
1863 ID_TRC_DATA_IND_BCCH 1 normal and extended BCCH
1864 ID_TRC_DATA_IND_PCH 2 normal and extended PCH
1865 ID_TRC_DATA_IND_CCCH 4
1866 ID_TRC_DATA_IND_CBCH 8
1867 ID_TRC_DATA_IND_SCCH 16 SACCH and SDCCH
1868 ID_TRC_DATA_IND_FCCH 32 full and half rate FACCH
1869 ID_TRC_DATA_IND_STATE 64 MA status
1870
1871 ID_TRC_DATA_IND_INIT 63 all valid frames without stati
1872 ID_TRC_DATA_IND_INIT2 31 ... without FACCH
1873 */
1874 #if !defined(NCONFIG)
1875 static void ma_trc_data_ind(T_MPHC_DATA_IND* data_ind)
1876 {
1877 GET_INSTANCE_DATA;
1878 char *msg_s = "";
1879 UBYTE msg_t = 0;
1880
1881 if (data_ind->error_flag NEQ VALID_BLOCK)
1882 {
1883 if (v_mon_trc_data_ind & ID_TRC_DATA_IND_INVALID)
1884 {
1885 #if !defined(DL_TRACE_ENABLED)
1886 SYST_TRACE ("invalid block");
1887 #else /* !DL_TRACE_ENABLED */
1888 DL_OFFLINE_TRACE ("invalid block");
1889 #endif /* !DL_TRACE_ENABLED */
1890 }
1891 return;
1892 }
1893
1894 switch (data_ind->l2_channel)
1895 {
1896 case L2_CHANNEL_SACCH:
1897 case L2_CHANNEL_SDCCH:
1898 if ((v_mon_trc_data_ind & ID_TRC_DATA_IND_SCCH) EQ 0)
1899 msg_t = (UBYTE)-1;
1900 break;
1901 case L2_CHANNEL_FACCH_H:
1902 case L2_CHANNEL_FACCH_F:
1903 if ((v_mon_trc_data_ind & ID_TRC_DATA_IND_FCCH) EQ 0)
1904 msg_t = (UBYTE)-1;
1905 break;
1906 case L2_CHANNEL_CCCH:
1907 if ((v_mon_trc_data_ind & ID_TRC_DATA_IND_CCCH) EQ 0)
1908 return;
1909 break;
1910 case L2_CHANNEL_NBCCH:
1911 case L2_CHANNEL_EBCCH:
1912 if ((v_mon_trc_data_ind & ID_TRC_DATA_IND_BCCH) EQ 0)
1913 msg_t = (UBYTE)-1;
1914 break;
1915 case L2_CHANNEL_PCH:
1916 case L2_CHANNEL_EPCH:
1917 if ((v_mon_trc_data_ind & ID_TRC_DATA_IND_PCH) EQ 0)
1918 msg_t = (UBYTE)-1;
1919 break;
1920 case L2_CHANNEL_CBCH:
1921 if ((v_mon_trc_data_ind & ID_TRC_DATA_IND_CBCH) EQ 0)
1922 msg_t = (UBYTE)-1;
1923 break;
1924 default:
1925 msg_t = (UBYTE)-1;
1926 SYST_TRACE_P((SYST, "trc_data_ind %02x ch=%d",
1927 v_mon_trc_data_ind, data_ind->l2_channel));
1928 break;
1929 }
1930
1931 if (msg_t)
1932 {
1933 return;
1934 }
1935
1936 if (data_ind->error_flag EQ VALID_BLOCK)
1937 {
1938 msg_t = data_ind->l2_frame.content[SI_CONTENTS_MSG_T];
1939 switch (msg_t)
1940 {
1941 case D_IMM_ASSIGN:
1942 msg_s = "IMM_ASS";
1943 break;
1944 case D_IMM_ASSIGN_EXT:
1945 msg_s = "IMM_ASS_EXT";
1946 break;
1947 case D_IMM_ASSIGN_REJ:
1948 msg_s = "IMM_ASS_REJ";
1949 break;
1950 case D_PAG_REQ_1:
1951 msg_s = "PAG1";
1952 break;
1953 case D_PAG_REQ_2:
1954 msg_s = "PAG2";
1955 break;
1956 case D_PAG_REQ_3:
1957 msg_s = "PAG3";
1958 break;
1959 case D_SYS_INFO_1:
1960 msg_s = "SI 1";
1961 break;
1962 case D_SYS_INFO_2:
1963 msg_s = "SI 2";
1964 break;
1965 case D_SYS_INFO_2BIS:
1966 msg_s = "SI 2bis";
1967 break;
1968 case D_SYS_INFO_2TER:
1969 msg_s = "SI 2ter";
1970 break;
1971 #if defined (REL99) && defined (TI_PS_FF_EMR)
1972 case D_SYS_INFO_2QUATER:
1973 msg_s = "SI 2quater";
1974 break;
1975 #endif
1976 case D_SYS_INFO_3:
1977 msg_s = "SI 3";
1978 /*
1979 TRACE_EVENT_P8 ("SI3: lai=%x%x%x %x%x%x %02x%02x",
1980 data_ind->l2_frame.content[5]&0x0f,
1981 data_ind->l2_frame.content[5]>>4,
1982 data_ind->l2_frame.content[6]&0x0f,
1983
1984 data_ind->l2_frame.content[7]&0x0f,
1985 data_ind->l2_frame.content[7]>>4,
1986 data_ind->l2_frame.content[6]>>4,
1987
1988 data_ind->l2_frame.content[8],
1989 data_ind->l2_frame.content[9]);
1990 */
1991 break;
1992 case D_SYS_INFO_4:
1993 msg_s = "SI 4";
1994 /*
1995 TRACE_EVENT_P8 ("SI4: lai=%x%x%x %x%x%x %02x%02x",
1996 data_ind->l2_frame.content[3]&0x0f,
1997 data_ind->l2_frame.content[3]>>4,
1998 data_ind->l2_frame.content[4]&0x0f,
1999
2000 data_ind->l2_frame.content[5]&0x0f,
2001 data_ind->l2_frame.content[5]>>4,
2002 data_ind->l2_frame.content[4]>>4,
2003
2004 data_ind->l2_frame.content[6],
2005 data_ind->l2_frame.content[7]);
2006 */
2007 break;
2008 case D_SYS_INFO_5:
2009 msg_s = "SI 5";
2010 break;
2011 case D_SYS_INFO_5BIS:
2012 msg_s = "SI 5bis";
2013 break;
2014 case D_SYS_INFO_5TER:
2015 msg_s = "SI 5ter";
2016 break;
2017 case D_SYS_INFO_6:
2018 msg_s = "SI 6";
2019 break;
2020 #ifdef GPRS
2021 case D_SYS_INFO_13:
2022 msg_s = "SI 13";
2023 break;
2024 #endif /* GPRS */
2025 default:
2026 if (data_ind->l2_channel EQ L2_CHANNEL_CBCH)
2027 msg_s = "CBCH";
2028 else
2029 msg_s = 0;
2030 break;
2031 }
2032 }
2033
2034 #if !defined(DL_TRACE_ENABLED)
2035 if (msg_s)
2036 {
2037 if (v_mon_trc_data_ind & ID_TRC_DATA_IND_STATE)
2038 {
2039 SYST_TRACE_P((SYST, "[%u] %s %s",
2040 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK,
2041 msg_s, STATE_MA_NAME[GET_STATE (STATE_MA)]));
2042 }
2043 else
2044 {
2045 SYST_TRACE_P((SYST, "[%u] %s",
2046 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, msg_s));
2047 }
2048 }
2049 else
2050 {
2051 /* protocol discriminator */
2052 UBYTE pd = data_ind->l2_frame.content[SI_CONTENTS_MSG_T-1];
2053 char buf[47];
2054
2055 if (v_mon_trc_data_ind & ID_TRC_DATA_IND_STATE)
2056 {
2057 SYST_TRACE_P((SYST, "[%u] unknown %02x (PD%02x, ch=%d) %s",
2058 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, msg_t, pd,
2059 data_ind->l2_channel, STATE_MA_NAME[GET_STATE (STATE_MA)]));
2060 }
2061 else
2062 {
2063 SYST_TRACE_P((SYST, "[%u] unknown %02x (PD%02x, ch=%d)",
2064 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK,
2065 msg_t, pd, data_ind->l2_channel));
2066 }
2067 for (pd=0; pd<23; pd++)
2068 sprintf (buf+(pd<<1), "%02x", (UBYTE)data_ind->l2_frame.content[pd]);
2069 SYST_TRACE(buf);
2070 }
2071 #else /* !DL_TRACE_ENABLED */
2072 {
2073 if (msg_s)
2074 {
2075 if (v_mon_trc_data_ind & ID_TRC_DATA_IND_STATE)
2076 {
2077 sprintf (dl_trace_buf, "[%u] %s %s",
2078 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK,
2079 msg_s, STATE_MA_NAME[GET_STATE (STATE_MA)]);
2080 }
2081 else
2082 {
2083 sprintf (dl_trace_buf, "[%u] %s",
2084 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, msg_s);
2085 }
2086 }
2087 else
2088 {
2089 /* protocol discriminator */
2090 UBYTE pd = data_ind->l2_frame.content[SI_CONTENTS_MSG_T-1];
2091
2092 sprintf (dl_trace_buf, "[%u] unknown %02x (PD%02x, ch=%d)",
2093 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK,
2094 msg_t, pd, data_ind->l2_channel);
2095 }
2096 DL_OFFLINE_TRACE (dl_trace_buf);
2097 }
2098 #endif /* !DL_TRACE_ENABLED */
2099 }
2100
2101 /*
2102 +--------------------------------------------------------------------+
2103 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
2104 | STATE : code ROUTINE : trc_state_transition |
2105 +--------------------------------------------------------------------+
2106
2107 PURPOSE : Traces state transition
2108
2109 */
2110
2111
2112 #if !defined(NTRACE) && defined(TRACE_STATE_TRANSITION)
2113 void trc_state_transition(int line, UBYTE newstate)
2114 {
2115 #if defined(DL_TRACE_ENABLED)
2116 sprintf (dl_trace_buf, "%s->%s (#%u)",
2117 STATE_MA_NAME[GET_STATE (STATE_MA)], STATE_MA_NAME[newstate], line);
2118 DL_OFFLINE_TRACE (dl_trace_buf);
2119 #else /* DL_TRACE_ENABLED */
2120 SYST_TRACE_P((SYST, "%s->%s (#%u)",
2121 STATE_MA_NAME[GET_STATE (STATE_MA)], STATE_MA_NAME[newstate], line));
2122 #endif /* DL_TRACE_ENABLED */
2123 }
2124 #endif /* !NTRACE && TRACE_STATE_TRANSITION */
2125 #endif /* !NCONFIG */
2126
2127 /*
2128 +--------------------------------------------------------------------+
2129 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
2130 | STATE : code ROUTINE : trc_paging |
2131 +--------------------------------------------------------------------+
2132
2133 PURPOSE : Traces state transition
2134
2135 */
2136
2137
2138 #if !defined(NTRACE) && 0
2139 void trc_paging(T_MPHC_DATA_IND* data_ind)
2140 {
2141 if ((data_ind->error_flag EQ VALID_BLOCK) AND
2142 ((data_ind->l2_channel EQ L2_CHANNEL_PCH) OR
2143 (data_ind->l2_channel EQ L2_CHANNEL_EPCH)))
2144 {
2145 char *str;
2146
2147 switch (data_ind->l2_frame.content[SI_CONTENTS_MSG_T]) // SI_CONTENTS_MSG_T=2
2148 {
2149 case D_PAG_REQ_1:
2150 str="D_PAG_REQ_1";
2151 break;
2152 case D_PAG_REQ_2:
2153 str="D_PAG_REQ_2";
2154 break;
2155 case D_PAG_REQ_3:
2156 str="D_PAG_REQ_3";
2157 break;
2158 default:
2159 str = NULL;
2160 break;
2161 }
2162
2163 if (str)
2164 {
2165 /* TRACE_BINDUMP first available with FRAME_2.9.18 */
2166 #ifdef TI_PS_HCOMM_CHANGE
2167 TRACE_BINDUMP(_hCommPL ,TC_EVENT, str, data_ind->l2_frame.content,
2168 MAX_L2_FRAME_SIZE);
2169 #else
2170 TRACE_BINDUMP(hCommPL ,TC_EVENT, str, data_ind->l2_frame.content,
2171 MAX_L2_FRAME_SIZE);
2172 #endif /* TI_PS_HCOMM_CHANGE */
2173 }
2174 }
2175
2176 }
2177 #endif /* !NTRACE */
2178
2179 /*
2180 +--------------------------------------------------------------------+
2181 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
2182 | STATE : code ROUTINE : ma_mphc_data_ind |
2183 +--------------------------------------------------------------------+
2184
2185 PURPOSE : Process the primitive MPHC_DATA_IND.
2186
2187 */
2188
2189 GLOBAL void ma_mphc_data_ind (T_MPHC_DATA_IND* data_ind)
2190 {
2191 GET_INSTANCE_DATA;
2192 USHORT length=0, valid=0;
2193 UBYTE msg_t;
2194
2195 alr_trc_read (1);
2196
2197 #if !defined(NTRACE) && 0
2198 trc_paging(data_ind);
2199 #endif /* !NTRACE */
2200
2201 #if !defined(NCONFIG)
2202 if (v_mon_trc_data_ind)
2203 ma_trc_data_ind(data_ind);
2204
2205 /* IOT and FT trace */
2206 if (data_ind->l2_channel NEQ L2_CHANNEL_CBCH AND
2207 data_ind->l2_channel NEQ L2_CHANNEL_SACCH)
2208 {
2209 /* Implements Measure#32: Row 90,...,101 */
2210 if(data_ind->error_flag EQ VALID_BLOCK)
2211 {
2212 length = MAX_L2_FRAME_SIZE;
2213 valid = 1;
2214 }
2215 switch (data_ind->l2_frame.content[SI_CONTENTS_MSG_T])
2216 {
2217 case D_SYS_INFO_1:
2218 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_1 block: Valid=%d",
2219 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2220 break;
2221 case D_SYS_INFO_2:
2222 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_2 block: Valid=%d",
2223 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2224 break;
2225 case D_SYS_INFO_2BIS:
2226 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_2BIS block: Valid=%d",
2227 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2228 break;
2229 case D_SYS_INFO_2TER:
2230 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_2TER block: Valid=%d",
2231 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2232 break;
2233 #if defined (REL99) && defined (TI_PS_FF_EMR)
2234 case D_SYS_INFO_2QUATER:
2235 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_2QUATER block: Valid=%d",
2236 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2237 break;
2238 #endif
2239 case D_SYS_INFO_3:
2240 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_3 block: Valid=%d",
2241 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2242 break;
2243 case D_SYS_INFO_4:
2244 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_4 block: Valid=%d",
2245 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2246 break;
2247 #ifdef GPRS
2248 case D_SYS_INFO_13:
2249 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_SYS_INFO_13 block: Valid=%d",
2250 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2251 break;
2252 #endif
2253 case D_IMM_ASSIGN:
2254 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_IMM_ASSIGN block: Valid=%d",
2255 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2256 break;
2257 case D_IMM_ASSIGN_EXT:
2258 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_IMM_ASSIGN_EXT block: Valid=%d",
2259 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2260 break;
2261 case D_IMM_ASSIGN_REJ:
2262 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] D_IMM_ASSIGN_REJ block: Valid=%d",
2263 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2264 break;
2265 case D_PAG_REQ_1:
2266 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] PAG_REQ_1 DL block: Valid=%d",
2267 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2268 break;
2269 case D_PAG_REQ_2:
2270 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] PAG_REQ_2 DL block: Valid=%d",
2271 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2272 break;
2273 case D_PAG_REQ_3:
2274 TRACE_USER_CLASS_P2 (TC_USER4, "[%u] PAG_REQ_3 DL block: Valid=%d",
2275 ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK, valid);
2276 break;
2277 default:
2278 break;
2279 }
2280 switch (data_ind->l2_frame.content[SI_CONTENTS_MSG_T])
2281 {
2282 case D_SYS_INFO_1:
2283 #ifdef TI_PS_HCOMM_CHANGE
2284 TRACE_BINDUMP(_hCommPL , TC_USER4,
2285 "D_SYS_INFO_1",
2286 data_ind->l2_frame.content,
2287 length);
2288 #else /* not TI_PS_HCOMM_CHANGE */
2289 TRACE_BINDUMP(hCommPL , TC_USER4,
2290 "D_SYS_INFO_1",
2291 data_ind->l2_frame.content,
2292 length);
2293 #endif /* TI_PS_HCOMM_CHANGE */
2294 break;
2295 case D_SYS_INFO_2:
2296 #ifdef TI_PS_HCOMM_CHANGE
2297 TRACE_BINDUMP(_hCommPL , TC_USER4,
2298 "D_SYS_INFO_2",
2299 data_ind->l2_frame.content,
2300 length);
2301 #else /* not TI_PS_HCOMM_CHANGE */
2302 TRACE_BINDUMP(hCommPL , TC_USER4,
2303 "D_SYS_INFO_2",
2304 data_ind->l2_frame.content,
2305 length);
2306 #endif /* TI_PS_HCOMM_CHANGE */
2307 break;
2308 case D_SYS_INFO_2BIS:
2309 #ifdef TI_PS_HCOMM_CHANGE
2310 TRACE_BINDUMP(_hCommPL , TC_USER4,
2311 "D_SYS_INFO_2BIS",
2312 data_ind->l2_frame.content,
2313 length);
2314 #else /* not TI_PS_HCOMM_CHANGE */
2315 TRACE_BINDUMP(hCommPL , TC_USER4,
2316 "D_SYS_INFO_2BIS",
2317 data_ind->l2_frame.content,
2318 length);
2319 #endif /* TI_PS_HCOMM_CHANGE */
2320 break;
2321 case D_SYS_INFO_2TER:
2322 #ifdef TI_PS_HCOMM_CHANGE
2323 TRACE_BINDUMP(_hCommPL , TC_USER4,
2324 "D_SYS_INFO_2TER",
2325 data_ind->l2_frame.content,
2326 length);
2327 #else /* not TI_PS_HCOMM_CHANGE */
2328 TRACE_BINDUMP(hCommPL , TC_USER4,
2329 "D_SYS_INFO_2TER",
2330 data_ind->l2_frame.content,
2331 length);
2332 #endif /* TI_PS_HCOMM_CHANGE */
2333 break;
2334 #if defined (REL99) && defined (TI_PS_FF_EMR)
2335 case D_SYS_INFO_2QUATER:
2336 #ifdef TI_PS_HCOMM_CHANGE
2337 TRACE_BINDUMP(_hCommPL , TC_USER4,
2338 "D_SYS_INFO_2QUATER",
2339 data_ind->l2_frame.content,
2340 length);
2341 #else /* not TI_PS_HCOMM_CHANGE */
2342 TRACE_BINDUMP(hCommPL , TC_USER4,
2343 "D_SYS_INFO_2QUATER",
2344 data_ind->l2_frame.content,
2345 length);
2346 #endif /* TI_PS_HCOMM_CHANGE */
2347 break;
2348 #endif
2349 case D_SYS_INFO_3:
2350 #ifdef TI_PS_HCOMM_CHANGE
2351 TRACE_BINDUMP(_hCommPL , TC_USER4,
2352 "D_SYS_INFO_3",
2353 data_ind->l2_frame.content,
2354 length);
2355 #else /* not TI_PS_HCOMM_CHANGE */
2356 TRACE_BINDUMP(hCommPL , TC_USER4,
2357 "D_SYS_INFO_3",
2358 data_ind->l2_frame.content,
2359 length);
2360 #endif /* TI_PS_HCOMM_CHANGE */
2361 break;
2362 case D_SYS_INFO_4:
2363 #ifdef TI_PS_HCOMM_CHANGE
2364 TRACE_BINDUMP(_hCommPL , TC_USER4,
2365 "D_SYS_INFO_4",
2366 data_ind->l2_frame.content,
2367 length);
2368 #else /* not TI_PS_HCOMM_CHANGE */
2369 TRACE_BINDUMP(hCommPL , TC_USER4,
2370 "D_SYS_INFO_4",
2371 data_ind->l2_frame.content,
2372 length);
2373 #endif /* TI_PS_HCOMM_CHANGE */
2374 break;
2375 #ifdef GPRS
2376 case D_SYS_INFO_13:
2377 #ifdef TI_PS_HCOMM_CHANGE
2378 TRACE_BINDUMP(_hCommPL , TC_USER4,
2379 "D_SYS_INFO_13",
2380 data_ind->l2_frame.content,
2381 length);
2382 #else /* not TI_PS_HCOMM_CHANGE */
2383 TRACE_BINDUMP(hCommPL , TC_USER4,
2384 "D_SYS_INFO_13",
2385 data_ind->l2_frame.content,
2386 length);
2387 #endif /* TI_PS_HCOMM_CHANGE */
2388 break;
2389 #endif
2390 case D_IMM_ASSIGN:
2391 #ifdef TI_PS_HCOMM_CHANGE
2392 TRACE_BINDUMP(_hCommPL , TC_USER4,
2393 "D_IMM_ASSIGN",
2394 data_ind->l2_frame.content,
2395 length);
2396 #else /* not TI_PS_HCOMM_CHANGE */
2397 TRACE_BINDUMP(hCommPL , TC_USER4,
2398 "D_IMM_ASSIGN",
2399 data_ind->l2_frame.content,
2400 length);
2401 #endif /* TI_PS_HCOMM_CHANGE */
2402 break;
2403 case D_IMM_ASSIGN_EXT:
2404 #ifdef TI_PS_HCOMM_CHANGE
2405 TRACE_BINDUMP(_hCommPL , TC_USER4,
2406 "D_IMM_ASSIGN_EXT",
2407 data_ind->l2_frame.content,
2408 length);
2409 #else /* not TI_PS_HCOMM_CHANGE */
2410 TRACE_BINDUMP(hCommPL , TC_USER4,
2411 "D_IMM_ASSIGN_EXT",
2412 data_ind->l2_frame.content,
2413 length);
2414 #endif /* TI_PS_HCOMM_CHANGE */
2415 break;
2416 case D_IMM_ASSIGN_REJ:
2417 #ifdef TI_PS_HCOMM_CHANGE
2418 TRACE_BINDUMP(_hCommPL , TC_USER4,
2419 "D_IMM_ASSIGN_REJ",
2420 data_ind->l2_frame.content,
2421 length);
2422 #else /* not TI_PS_HCOMM_CHANGE */
2423 TRACE_BINDUMP(hCommPL , TC_USER4,
2424 "D_IMM_ASSIGN_REJ",
2425 data_ind->l2_frame.content,
2426 length);
2427 #endif /* TI_PS_HCOMM_CHANGE */
2428 break;
2429 case D_PAG_REQ_1:
2430 #ifdef TI_PS_HCOMM_CHANGE
2431 TRACE_BINDUMP(_hCommPL , TC_USER4,
2432 "PAG_REQ_1 DL",
2433 data_ind->l2_frame.content,
2434 length);
2435 #else /* not TI_PS_HCOMM_CHANGE */
2436 TRACE_BINDUMP(hCommPL , TC_USER4,
2437 "PAG_REQ_1 DL",
2438 data_ind->l2_frame.content,
2439 length);
2440 #endif /* TI_PS_HCOMM_CHANGE */
2441 break;
2442 case D_PAG_REQ_2:
2443 #ifdef TI_PS_HCOMM_CHANGE
2444 TRACE_BINDUMP(_hCommPL , TC_USER4,
2445 "PAG_REQ_2 DL",
2446 data_ind->l2_frame.content,
2447 length);
2448 #else /* not TI_PS_HCOMM_CHANGE */
2449 TRACE_BINDUMP(hCommPL , TC_USER4,
2450 "PAG_REQ_2 DL",
2451 data_ind->l2_frame.content,
2452 length);
2453 #endif /* TI_PS_HCOMM_CHANGE */
2454 break;
2455 case D_PAG_REQ_3:
2456 #ifdef TI_PS_HCOMM_CHANGE
2457 TRACE_BINDUMP(_hCommPL , TC_USER4,
2458 "PAG_REQ_3 DL",
2459 data_ind->l2_frame.content,
2460 length);
2461 #else /* not TI_PS_HCOMM_CHANGE */
2462 TRACE_BINDUMP(hCommPL , TC_USER4,
2463 "PAG_REQ_3 DL",
2464 data_ind->l2_frame.content,
2465 length);
2466 #endif /* TI_PS_HCOMM_CHANGE */
2467 break;
2468 default:
2469 break;
2470 }
2471 }
2472 #endif /* !NCONFIG */
2473
2474
2475 if (data_ind->l2_channel EQ L2_CHANNEL_CBCH)
2476 {
2477 cb_data_ind (data_ind);
2478 }
2479 else
2480 {
2481 if (data_ind->error_flag EQ VALID_BLOCK AND
2482 data_ind->l2_channel EQ L2_CHANNEL_SACCH)
2483 {
2484 /*
2485 * store Timing Advance contained in every decodable downlink SACCH frame
2486 */
2487 nc_store_tav((USHORT)(data_ind->l2_frame.content[1] & 63));
2488 }
2489
2490 msg_t = data_ind->l2_frame.content[SI_CONTENTS_MSG_T];
2491 switch (GET_STATE (STATE_MA))
2492 {
2493 case MA_NULL:
2494 /*
2495 * no message expected
2496 */
2497 break;
2498 case MA_CELL_SELECTION:
2499 if (data_ind->error_flag EQ VALID_BLOCK)
2500 {
2501 ALR_TRACE_MAIN_VALID_BLOCK(msg_t);
2502
2503 switch (msg_t)
2504 {
2505 case D_SYS_INFO_1:
2506 case D_SYS_INFO_2:
2507 case D_SYS_INFO_2BIS:
2508 case D_SYS_INFO_2TER:
2509 #if defined (REL99) && defined (TI_PS_FF_EMR)
2510 case D_SYS_INFO_2QUATER:
2511 #endif
2512 case D_SYS_INFO_3:
2513 case D_SYS_INFO_4:
2514 #ifdef GPRS
2515 case D_SYS_INFO_13:
2516 #endif
2517 switch(data_ind->l2_channel)
2518 {
2519 case L2_CHANNEL_NBCCH:
2520 if (data_ind->tc EQ 0 AND msg_t NEQ D_SYS_INFO_1)
2521 ma_sync_ind (CS_SYS_INFO_1_NOT_NEEDED,
2522 ARFCN_TO_G23(data_ind->radio_freq));
2523 /*lint -fallthrough*/
2524 case L2_CHANNEL_EBCCH:
2525 ma_send_unitdata (data_ind);
2526 ma_fill_sys_buffer (data_ind, msg_t);
2527
2528 ma_set_si_bitmap(msg_t);
2529
2530 ALR_EM_IDLE_MODE_BCCH_PARAMETER_CHANGED;
2531 cs_increment_bfc();
2532
2533 break;
2534 default:
2535 ALR_TRACE_MAIN ("stray SI");
2536 break;
2537 }
2538 break;
2539 default:
2540 break;
2541 }
2542 }
2543 else
2544 {
2545 ALR_TRACE_MAIN ("INVALID BLOCK");
2546 if (data_ind->l2_channel EQ L2_CHANNEL_NBCCH OR
2547 data_ind->l2_channel EQ L2_CHANNEL_EBCCH)
2548 {
2549 ma_error_ind (CS_BCCH_READ_ERROR,
2550 ARFCN_TO_G23(data_ind->radio_freq));
2551 cs_decrement_bfc();
2552 }
2553 }
2554 break;
2555 case MA_IDLE:
2556 if (data_ind->error_flag EQ VALID_BLOCK)
2557 {
2558 switch (msg_t)
2559 {
2560 case D_SYS_INFO_2:
2561 /*
2562 * setting ncc permitted directly after receive sys info 2
2563 */
2564 nc_check_new_ncc_permitted (data_ind->l2_frame.content[SI_CONTENTS_MSG_T+17]);
2565 /*lint -fallthrough*/
2566 case D_SYS_INFO_1:
2567 case D_SYS_INFO_2BIS:
2568 case D_SYS_INFO_2TER:
2569 case D_SYS_INFO_3:
2570 case D_SYS_INFO_4:
2571 if(data_ind->l2_channel NEQ L2_CHANNEL_NBCCH)
2572 {
2573 ALR_TRACE_MAIN ("stray SI");
2574 }
2575
2576 if (data_ind->tc EQ 0 AND msg_t NEQ D_SYS_INFO_1)
2577 {
2578 ma_sync_ind (CS_SYS_INFO_1_NOT_NEEDED,
2579 ARFCN_TO_G23(data_ind->radio_freq));
2580 alr_data->pch_data.si_bitmap |= SYSTEM_INFO_1_READ;
2581 }
2582
2583 if( alr_data->pch_data.reorg_bcch_reading EQ TRUE)
2584 {
2585 if(msg_t EQ D_SYS_INFO_1)
2586 alr_data->pch_data.si_bitmap |= SYSTEM_INFO_1_READ;
2587 else if(msg_t EQ D_SYS_INFO_2)
2588 alr_data->pch_data.si_bitmap |= SYSTEM_INFO_2_READ;
2589 else if(msg_t EQ D_SYS_INFO_3)
2590 alr_data->pch_data.si_bitmap |= SYSTEM_INFO_3_READ;
2591 else if(msg_t EQ D_SYS_INFO_4)
2592 alr_data->pch_data.si_bitmap |= SYSTEM_INFO_4_READ;
2593
2594 ma_set_si_bitmap(msg_t);
2595
2596 #ifdef GPRS
2597 if( !gprs_alr_is_supported() )
2598 #endif
2599 {
2600 if( (alr_data->pch_data.si_bitmap & ALL_SI_READ_EXCEPT_SI13)
2601 EQ ALL_SI_READ_EXCEPT_SI13)
2602 {
2603 alr_data->pch_data.reorg_bcch_reading = FALSE;
2604 if((alr_data->pch_data.pl_idle.page_mode EQ PGM_NORMAL) OR
2605 (alr_data->pch_data.pl_idle.page_mode EQ PGM_EXTENDED))
2606 {
2607 sc_start_periodic();
2608 }
2609 }
2610 }
2611 }
2612 if (!ma_compare_sys_buffer (data_ind, msg_t))
2613 {
2614 ALR_TRACE_MAIN_SI_UNEQ(data_ind->l2_channel);
2615
2616 ma_send_unitdata (data_ind);
2617 ma_fill_sys_buffer (data_ind, msg_t);
2618
2619 ALR_EM_IDLE_MODE_BCCH_PARAMETER_CHANGED;
2620
2621 }
2622 #if defined (REL99) && defined (TI_PS_FF_EMR)
2623 if ( (msg_t EQ D_SYS_INFO_2) OR (msg_t EQ D_SYS_INFO_2BIS) OR (msg_t EQ D_SYS_INFO_2TER) )
2624 {
2625 if ( (alr_data->nc_data.si2_count NEQ NOT_PRESENT_8BIT ) AND
2626 (alr_data->nc_data.si2_count NEQ 0) )
2627 alr_data->nc_data.si2_count--;
2628 /*Required SI-2 variants have been acquired, now we will configure
2629 L1 for SI-2quater if it's required to be configured*/
2630 if ((alr_data->nc_data.si2quater_status NEQ SI2QUATER_ABSENT ) AND
2631 (alr_data->nc_data.si2quater_pos EQ SI2QUATER_ON_EBCCH) AND
2632 (alr_data->nc_data.si2_count EQ 0))
2633 {
2634 ma_scell_mon_si2quater_ebcch();
2635 alr_data->nc_data.si2_count = NOT_PRESENT_8BIT;
2636 }
2637 }
2638 break;
2639 case D_SYS_INFO_2QUATER:
2640 ALR_TRACE_MAIN_SI_UNEQ(data_ind->l2_channel);
2641 ma_send_unitdata (data_ind);
2642 #endif
2643 break;
2644 #ifdef GPRS
2645 case D_SYS_INFO_13:
2646 if(gprs_alr_is_supported())
2647 {
2648 alr_data->pch_data.si_bitmap |= SYSTEM_INFO_13_READ;
2649 alr_data->pch_data.reorg_bcch_reading = FALSE;
2650 }
2651 if(! pch_mode_reorg() AND gprs_alr_is_supported())
2652 {
2653 /* stop scell BCCH */
2654 ma_stop_scell_bcch_req();
2655 }
2656 ma_send_unitdata (data_ind);
2657 ma_fill_sys_buffer (data_ind, msg_t);
2658
2659 ALR_EM_IDLE_MODE_BCCH_PARAMETER_CHANGED;
2660
2661 ALR_TRACE_MAIN ("SI13");
2662 break;
2663 #endif /* GPRS */
2664
2665 case D_PAG_REQ_1:
2666 ALR_TRACE_MAIN("PG1");
2667
2668 pch_check_pag_1 (data_ind);
2669
2670 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2671 {
2672 /*
2673 * check only if it is the own paging group
2674 */
2675 #ifdef GPRS
2676 gprs_check_page_mode(data_ind);
2677 #else
2678 pch_check_page_mode (data_ind);
2679 #endif /* GPRS */
2680 pch_increment_dlt ();
2681 }
2682 break;
2683 case D_PAG_REQ_2:
2684 ALR_TRACE_MAIN ("PG2");
2685 if (alr_data->pch_data.pl_idle.page_mode EQ PGM_NORMAL)
2686 {
2687 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2688 pch_check_pag_2 (data_ind);
2689 else
2690 {
2691 ALR_TRACE_MAIN ("PCH block skipped");
2692 }
2693 }
2694 else
2695 pch_check_pag_2 (data_ind);
2696 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2697 {
2698 /* check only if it is the own paging group */
2699 #ifdef GPRS
2700 gprs_check_page_mode(data_ind);
2701 #else
2702 pch_check_page_mode (data_ind);
2703 #endif /* GPRS */
2704 pch_increment_dlt ();
2705 }
2706 break;
2707 case D_PAG_REQ_3:
2708 ALR_TRACE_MAIN ("PG3");
2709
2710 if (alr_data->pch_data.pl_idle.page_mode EQ PGM_NORMAL)
2711 {
2712 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2713 pch_check_pag_3 (data_ind);
2714 else
2715 {
2716 ALR_TRACE_MAIN ("PCH block skipped");
2717 }
2718 }
2719 else
2720 pch_check_pag_3 (data_ind);
2721 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2722 {
2723 /* check only if it is the own paging group */
2724 #ifdef GPRS
2725 gprs_check_page_mode(data_ind);
2726 #else
2727 pch_check_page_mode (data_ind);
2728 #endif/* GPRS */
2729 pch_increment_dlt ();
2730 }
2731 break;
2732 case D_IMM_ASSIGN:
2733 #ifdef GPRS
2734 gprs_alr_check_downlink_assign(data_ind);
2735 /*lint -fallthrough*/
2736 #endif
2737 case D_IMM_ASSIGN_EXT:
2738 case D_IMM_ASSIGN_REJ:
2739 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2740 {
2741 /* check only if it is the own paging group */
2742 #ifdef GPRS
2743 gprs_check_page_mode(data_ind);
2744 #else
2745 pch_check_page_mode (data_ind);
2746 #endif /* GPRS */
2747 pch_increment_dlt ();
2748 }
2749 break;
2750 default:
2751 break;
2752 } /* message type */
2753 }
2754 else
2755 {
2756 /*
2757 * invalid block
2758 */
2759 ALR_TRACE_MAIN ("INVALID");
2760 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2761 pch_decrement_dlt ();
2762 }
2763 break;
2764 #ifdef GPRS
2765 case MA_PTM:
2766 if (data_ind->error_flag EQ VALID_BLOCK)
2767 {
2768 switch (msg_t)
2769 {
2770 case D_SYS_INFO_2:
2771 /*
2772 * setting ncc permitted directly after receive sys info 2
2773 */
2774 nc_check_new_ncc_permitted (data_ind->l2_frame.content[SI_CONTENTS_MSG_T+17]);
2775 /*lint -fallthrough*/
2776 case D_SYS_INFO_1:
2777 case D_SYS_INFO_2BIS:
2778 case D_SYS_INFO_2TER:
2779 #if defined (REL99) && defined (TI_PS_FF_EMR)
2780 case D_SYS_INFO_2QUATER:
2781 #endif
2782 case D_SYS_INFO_3:
2783 case D_SYS_INFO_4:
2784 if(data_ind->l2_channel NEQ L2_CHANNEL_NBCCH)
2785 {
2786 ALR_TRACE_MAIN ("stray SI");
2787 }
2788 if (data_ind->tc EQ 0 AND msg_t NEQ D_SYS_INFO_1)
2789 ma_sync_ind (CS_SYS_INFO_1_NOT_NEEDED,
2790 ARFCN_TO_G23(data_ind->radio_freq));
2791 if (!ma_compare_sys_buffer (data_ind, msg_t))
2792 {
2793 ALR_TRACE_MAIN_SI_UNEQ(data_ind->l2_channel);
2794
2795 ma_send_unitdata (data_ind);
2796 ma_fill_sys_buffer (data_ind, msg_t);
2797
2798 ALR_EM_IDLE_MODE_BCCH_PARAMETER_CHANGED;
2799
2800 }
2801 break;
2802 case D_SYS_INFO_13:
2803 /* stop scell BCCH */
2804 ma_stop_scell_bcch_req();
2805
2806 ma_send_unitdata (data_ind);
2807
2808 ALR_EM_IDLE_MODE_BCCH_PARAMETER_CHANGED;
2809
2810 ma_fill_sys_buffer (data_ind, msg_t);
2811 break;
2812 case D_PAG_REQ_1:
2813 ALR_TRACE_MAIN("PG1");
2814
2815 pch_check_pag_1 (data_ind);
2816
2817 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2818 {
2819 /*
2820 * check only if it is the own paging group
2821 */
2822 //pch_increment_dlt ();
2823 }
2824 break;
2825 case D_PAG_REQ_2:
2826 pch_check_pag_2 (data_ind);
2827 //pch_increment_dlt ();
2828
2829 break;
2830 case D_PAG_REQ_3:
2831 pch_check_pag_3 (data_ind);
2832 //pch_increment_dlt ();
2833 break;
2834 default:
2835 break;
2836 }
2837 }
2838 break;
2839 #endif /* GPRS */
2840 case MA_CELL_RESELECTION:
2841 if (data_ind->error_flag EQ VALID_BLOCK)
2842 {
2843 ALR_TRACE_MAIN_CR(msg_t);
2844
2845 switch (msg_t)
2846 {
2847 case D_IMM_ASSIGN:
2848 #ifdef GPRS
2849 TRACE_EVENT_P1 ("downlink assign %02x", data_ind->l2_frame.content[3]);
2850 gprs_alr_check_downlink_assign(data_ind);
2851 /*lint -fallthrough*/
2852 #endif
2853 case D_IMM_ASSIGN_EXT:
2854 case D_IMM_ASSIGN_REJ:
2855 break;
2856 case D_PAG_REQ_1:
2857 ALR_TRACE_MAIN ("PG1");
2858 pch_check_pag_1 (data_ind);
2859 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2860 {
2861 pch_increment_dlt ();
2862 pch_check_page_mode_cr (data_ind);
2863 }
2864 break;
2865 case D_PAG_REQ_2:
2866 ALR_TRACE_MAIN ("PG2");
2867 pch_check_pag_2 (data_ind);
2868 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2869 {
2870 pch_increment_dlt ();
2871 pch_check_page_mode_cr (data_ind);
2872 }
2873 break;
2874 case D_PAG_REQ_3:
2875 ALR_TRACE_MAIN ("PG3");
2876 pch_check_pag_3 (data_ind);
2877 if (data_ind->l2_channel EQ L2_CHANNEL_PCH)
2878 {
2879 pch_increment_dlt ();
2880 pch_check_page_mode_cr (data_ind);
2881 }
2882 break;
2883 case D_SYS_INFO_1:
2884 case D_SYS_INFO_2:
2885 case D_SYS_INFO_2BIS:
2886 case D_SYS_INFO_2TER:
2887 #if defined (REL99) && defined (TI_PS_FF_EMR)
2888 case D_SYS_INFO_2QUATER:
2889 #endif
2890 case D_SYS_INFO_3:
2891 case D_SYS_INFO_4:
2892 #ifdef GPRS
2893 case D_SYS_INFO_13:
2894 #endif
2895 ALR_TRACE_MAIN ("cr si");
2896 if (data_ind->tc EQ 0 AND msg_t NEQ D_SYS_INFO_1)
2897 ma_sync_ind (CS_SYS_INFO_1_NOT_NEEDED, ARFCN_TO_G23(data_ind->radio_freq));
2898 ma_send_unitdata (data_ind);
2899 ma_fill_sys_buffer (data_ind, msg_t);
2900
2901 ma_set_si_bitmap(msg_t);
2902 ALR_EM_IDLE_MODE_BCCH_PARAMETER_CHANGED;
2903
2904 /*
2905 * When having received all SI in cell reselection state RR will
2906 * send an MPH_IDLE_REQ and ALR will send an MPHC_START_CCCH_REQ
2907 * This is not a good timing for FTA 20.19 because L1 is then
2908 * unable to detect a paging for some blocks. The test device will
2909 * not send the paging near the SI3. Therefore the
2910 * MPHC_START_CCCH_REQ is sent here (and may be overwritten be the
2911 * later when ALR receives the MPH_IDLE_REQ with other parameters).
2912 */
2913 if (msg_t EQ D_SYS_INFO_3 AND
2914 alr_data->pch_data.imsi[0] AND
2915 ARFCN_TO_G23(data_ind->radio_freq) EQ alr_data->serving_cell)
2916 pch_config_resel(data_ind);
2917 break;
2918 default:
2919 break;
2920 }
2921 }
2922 else /* invalid block */
2923 {
2924 if (data_ind->l2_channel EQ L2_CHANNEL_NBCCH OR
2925 data_ind->l2_channel EQ L2_CHANNEL_EBCCH)
2926 {
2927 ALR_TRACE_MAIN ("INVALID BLOCK");
2928 ma_error_ind (CS_BCCH_READ_ERROR,
2929 ARFCN_TO_G23(data_ind->radio_freq));
2930 cs_decrement_bfc();
2931 }
2932 }
2933
2934 break;
2935 case MA_CON_EST:
2936 if (data_ind->error_flag EQ VALID_BLOCK)
2937 {
2938 switch (msg_t)
2939 {
2940 case D_IMM_ASSIGN:
2941 case D_IMM_ASSIGN_EXT:
2942 case D_IMM_ASSIGN_REJ:
2943 ALR_TRACE_MAIN ("IA");
2944 ma_send_unitdata (data_ind);
2945 break;
2946 #ifdef GPRS
2947 case D_PAG_REQ_1:
2948 pch_check_pag_1 (data_ind);
2949 break;
2950 case D_PAG_REQ_2:
2951 pch_check_pag_2 (data_ind);
2952 break;
2953 case D_PAG_REQ_3:
2954 pch_check_pag_3 (data_ind);
2955 break;
2956 #endif /* GPRS */
2957 default:
2958 break;
2959 }
2960 }
2961 break;
2962 case MA_DEDICATED:
2963 if (data_ind->error_flag EQ VALID_BLOCK)
2964 {
2965 switch (data_ind->l2_channel)
2966 {
2967 case L2_CHANNEL_SACCH:
2968 if ((data_ind->l2_frame.content[3] & 0xEF) EQ 3) /* layer 2 Control field octet */
2969 {
2970 /*
2971 * check control field of l2 header
2972 * UI Frame received
2973 */
2974 UBYTE msg_t = data_ind->l2_frame.content[6]; /* layer 3 Message Type octet */
2975
2976 switch (msg_t)
2977 {
2978 case D_SYS_INFO_6:
2979 /*
2980 * setting ncc permitted directly after receive sys info 6
2981 */
2982 nc_check_new_ncc_permitted (data_ind->l2_frame.content[15]);
2983
2984 /*lint -fallthrough*/
2985 case D_SYS_INFO_5:
2986 case D_SYS_INFO_5BIS:
2987 case D_SYS_INFO_5TER:
2988
2989 if (!ma_compare_dedi_sys_buffer (data_ind, msg_t))
2990 {
2991 ma_send_dedi_unitdata (data_ind);
2992 ma_fill_dedi_sys_buffer (data_ind, msg_t);
2993 }
2994 break;
2995
2996 case D_EXT_MEAS_ORDER:
2997 ma_send_dedi_unitdata (data_ind);
2998 break;
2999
3000 default:
3001 break;
3002 }
3003 }
3004 else
3005 {
3006 /*
3007 * no unacknowledged frame or short PD header (format type Bter)
3008 * must be handled by DL
3009 * is forwarded in original primitive format
3010 */
3011 ma_dedi_data_out ((T_PH_DATA_IND *)data_ind);
3012 data_ind = NULL; /* must not be freed by ALR */
3013 }
3014 dedi_increment_rlt ();
3015 break;
3016 default:
3017 break;
3018 } /*l2_channel*/
3019 }
3020 else
3021 {
3022 /* invalid block */
3023 if (data_ind->l2_channel EQ L2_CHANNEL_SACCH)
3024 dedi_decrement_rlt ();
3025 }
3026 break;
3027 default:
3028 break;
3029 }
3030 }
3031
3032 if (data_ind)
3033 {
3034 PFREE (data_ind);
3035 }
3036 }
3037
3038
3039 /*
3040 +----------------------------------------------------------------------+
3041 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3042 | STATE : code ROUTINE : ma_mphc_change_frequency_cnf |
3043 +----------------------------------------------------------------------+
3044
3045 PURPOSE : Process the primitive MPHC_CHANGE_FREQUENCY_CON.
3046
3047 */
3048
3049 GLOBAL void ma_mphc_change_frequency_cnf (T_MPHC_CHANGE_FREQUENCY_CON* change_frequency_cnf)
3050 {
3051 PFREE (change_frequency_cnf);
3052 dedi_change_freq_cnf ();
3053 }
3054
3055 /*
3056 +--------------------------------------------------------------------+
3057 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3058 | STATE : code ROUTINE : ma_mphc_async_ho_cnf |
3059 +--------------------------------------------------------------------+
3060
3061 PURPOSE : Process the primitive MPHC_ASYNC_HO_CNF.
3062
3063 */
3064
3065 GLOBAL void ma_mphc_async_ho_cnf (T_MPHC_ASYNC_HO_CON* async_ho_cnf)
3066 {
3067 PFREE (async_ho_cnf);
3068 dedi_ho_cnf(HO_TYPE_ASYNC);
3069 }
3070
3071 /*
3072 +---------------------------------------------------------------------+
3073 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3074 | STATE : code ROUTINE : ma_mphc_channel_assign_cnf |
3075 +---------------------------------------------------------------------+
3076
3077 PURPOSE : Process the primitive MPHC_CHANNEL_ASSIGN_CON.
3078
3079 */
3080
3081 GLOBAL void ma_mphc_channel_assign_cnf (T_MPHC_CHANNEL_ASSIGN_CON* channel_assign_cnf)
3082 {
3083 PFREE (channel_assign_cnf);
3084 #if defined(DL_TRACE_ENABLED)
3085 DL_OFFLINE_TRACE ("MPHC_CHANNEL_ASSIGN_CON");
3086 #else
3087 SYST_TRACE ("dedi chan ass con");
3088 #endif /* DL_TRACE_ENABLED */
3089 dedi_chan_ass_cnf ();
3090 }
3091
3092 /*
3093 +--------------------------------------------------------------------+
3094 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3095 | STATE : code ROUTINE : ma_mphc_handover_fail_cnf |
3096 +--------------------------------------------------------------------+
3097
3098 PURPOSE : Process the primitive MPHC_HANDOVER_FAIL_CON.
3099
3100 */
3101
3102 GLOBAL void ma_mphc_handover_fail_cnf (T_MPHC_HANDOVER_FAIL_CON* handover_fail_cnf)
3103 {
3104 PFREE (handover_fail_cnf);
3105 dedi_ho_fail_cnf ();
3106 }
3107
3108 /*
3109 +--------------------------------------------------------------------+
3110 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3111 | STATE : code ROUTINE : ma_mphc_immed_assign_cnf |
3112 +--------------------------------------------------------------------+
3113
3114 PURPOSE : Process the primitive MPHC_IMMED_ASSIGN_CON.
3115
3116 */
3117
3118 GLOBAL void ma_mphc_immed_assign_cnf (T_MPHC_IMMED_ASSIGN_CON* immed_assign_cnf)
3119 {
3120 PFREE (immed_assign_cnf);
3121 #if defined(DL_TRACE_ENABLED)
3122 DL_OFFLINE_TRACE ("MPHC_IMMED_ASSIGN_CON");
3123 #endif /* DL_TRACE_ENABLED */
3124 dedi_imm_ass_cnf ();
3125 }
3126
3127 /*
3128 +--------------------------------------------------------------------+
3129 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3130 | STATE : code ROUTINE : ma_mphc_pre_sync_ho_cnf |
3131 +--------------------------------------------------------------------+
3132
3133 PURPOSE : Process the primitive MPHC_PRE_SYNC_HO_CON.
3134
3135 */
3136
3137 GLOBAL void ma_mphc_pre_sync_ho_cnf (T_MPHC_PRE_SYNC_HO_CON* pre_sync_ho_cnf)
3138 {
3139 PFREE (pre_sync_ho_cnf);
3140 dedi_ho_cnf(HO_TYPE_PRE_SYNC);
3141 }
3142
3143
3144 /*
3145 +--------------------------------------------------------------------+
3146 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3147 | STATE : code ROUTINE : ma_mphc_sync_ho_cnf |
3148 +--------------------------------------------------------------------+
3149
3150 PURPOSE : Process the primitive MPHC_SYNC_HO_CON.
3151
3152 */
3153
3154 GLOBAL void ma_mphc_sync_ho_cnf (T_MPHC_SYNC_HO_CON* sync_ho_cnf)
3155 {
3156 PFREE (sync_ho_cnf);
3157 dedi_ho_cnf(HO_TYPE_SYNC);
3158 }
3159
3160 /*
3161 +--------------------------------------------------------------------+
3162 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3163 | STATE : code ROUTINE : ma_mphc_ta_fail_ind |
3164 +--------------------------------------------------------------------+
3165
3166 PURPOSE : Process the primitive MPHC_TA_FAIL_IND.
3167
3168 */
3169
3170 GLOBAL void ma_mphc_ta_fail_ind (T_MPHC_TA_FAIL_IND* ta_fail_ind)
3171 {
3172 PFREE (ta_fail_ind);
3173 dedi_ta_fail_ind ();
3174 }
3175
3176 /*
3177 +-----------------------------------------------------------------------+
3178 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3179 | STATE : code ROUTINE : ma_mphc_handover_finished_ind |
3180 +-----------------------------------------------------------------------+
3181
3182 PURPOSE : Process the primitive MPHC_HANDOVER_FINISHED.
3183
3184 */
3185
3186 GLOBAL void ma_mphc_handover_finished_ind (T_MPHC_HANDOVER_FINISHED* ho_finished)
3187 {
3188 dedi_ho_finished (ho_finished);
3189 PFREE (ho_finished);
3190 }
3191
3192 /*
3193 +--------------------------------------------------------------------+
3194 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3195 | STATE : code ROUTINE : ma_mphc_meas_report_ind_emo|
3196 +--------------------------------------------------------------------+
3197
3198 PURPOSE : Process the primitive MPHC_MEAS_REPORT for
3199 Extended Measurement procedure.
3200
3201 */
3202
3203 LOCAL BOOL ma_mphc_meas_report_ind_emo (T_MPHC_MEAS_REPORT* mphc_meas_report)
3204 {
3205 GET_INSTANCE_DATA;
3206 UBYTE emo_ba_id = alr_data->dedi_data.emo_ba_id;
3207 UBYTE rep_ba_id = mphc_meas_report->ba_id;
3208
3209 if ( INRANGE(RR_BA_LOW,rep_ba_id,RR_BA_HIGH) AND
3210 mphc_meas_report->meas_valid )
3211 {
3212 if ( rep_ba_id EQ emo_ba_id )
3213 {
3214 T_ncell_meas *ncell_meas = &mphc_meas_report->ncell_meas;
3215 T_res_list *res_list = &ncell_meas->res_list[0];
3216 T_meas_results *meas_results;
3217 USHORT k,n;
3218 UBYTE nmax;
3219
3220 PALLOC (mph_emo_meas_ind, MPH_EMO_MEAS_IND);
3221
3222 meas_results = &mph_emo_meas_ind->meas_results[0];
3223
3224 mph_emo_meas_ind->ba_id = mphc_meas_report->ba_id;
3225 mph_emo_meas_ind->dtx = mphc_meas_report->dtx_used;
3226
3227 nmax = sizeof mph_emo_meas_ind->meas_results /
3228 sizeof mph_emo_meas_ind->meas_results[0];
3229
3230 if ( mphc_meas_report->no_of_ncells_meas > nmax )
3231 mphc_meas_report->no_of_ncells_meas = nmax;
3232
3233 n = mph_emo_meas_ind->c_meas_results = mphc_meas_report->no_of_ncells_meas;
3234 for ( k = 0; k < n; k++ )
3235 {
3236 SHORT rx_lev = (SHORT)res_list[k].rxlev_acc /
3237 (BYTE) res_list[k].rxlev_nbr_meas;
3238
3239 if ( rx_lev < 0 )
3240 rx_lev = 0;
3241
3242 meas_results[k].rx_lev = (UBYTE) rx_lev;
3243 meas_results[k].arfcn = ARFCN_TO_G23 ( res_list[k].bcch_freq );
3244 }
3245
3246 PSENDX(RR, mph_emo_meas_ind);
3247 }
3248 return TRUE; /* primitive handled */
3249 }
3250
3251 return FALSE; /* indicate that the primitive has not been handled */
3252 }
3253
3254 /*
3255 +--------------------------------------------------------------------+
3256 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3257 | STATE : code ROUTINE : ma_mphc_meas_report_ind |
3258 +--------------------------------------------------------------------+
3259
3260 PURPOSE : Process the primitive MPHC_MEAS_REPORT.
3261
3262 */
3263
3264 GLOBAL void ma_mphc_meas_report_ind (T_MPHC_MEAS_REPORT* report)
3265 {
3266 GET_INSTANCE_DATA;
3267 switch (GET_STATE (STATE_MA))
3268 {
3269 case MA_DEDICATED:
3270
3271 if (report->meas_valid)
3272 {
3273 if ( ma_mphc_meas_report_ind_emo ( report ) )
3274 {
3275 PFREE ( report ); /*report isn't used any more*/
3276 return;
3277 }
3278 nc_report_dedicated (report);
3279 }
3280 else
3281 {
3282 PALLOC (rr_report, MPH_MEASUREMENT_IND);
3283 memset (rr_report, 0, sizeof (T_MPH_MEASUREMENT_IND));
3284
3285 #ifdef GPRS
3286 rr_report->gprs_sync = NORMAL_MEAS_REP;
3287 #endif
3288
3289 if (alr_data->nc_data.update)
3290 nc_fill_report_sc_dedi (rr_report, 0);
3291 ma_nc_report_res (rr_report);
3292 }
3293 alr_data->nc_data.update = FALSE;
3294 break;
3295 default:
3296 break;
3297 }
3298
3299 PFREE (report);
3300 }
3301
3302 /*
3303 +--------------------------------------------------------------------+
3304 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3305 | STATE : code ROUTINE : mphc_adc_ind |
3306 +--------------------------------------------------------------------+
3307
3308 PURPOSE : Process the primitive CST_ADC_RESULT.
3309 */
3310
3311
3312 GLOBAL void ma_mphc_adc_ind (T_MPHC_ADC_IND *adc_results)
3313 {
3314 PFREE (adc_results);
3315
3316 }
3317
3318 /* -------------------------------------------------------------------
3319 * -------------------------------------------------------------------
3320 * SIGNAL Processing functions
3321 * These are called by the other ALR processes
3322 * -------------------------------------------------------------------
3323 * -------------------------------------------------------------------
3324 */
3325
3326 /*
3327 +--------------------------------------------------------------------+
3328 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3329 | STATE : code ROUTINE : ma_rach_ra_req |
3330 +--------------------------------------------------------------------+
3331
3332 PURPOSE : Process the signal rach_ra_req from SDL process
3333 RACH_Control.
3334
3335 */
3336
3337 GLOBAL void ma_rach_ra_req (T_MPHC_RA_REQ * mph_ra_req)
3338 {
3339 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
3340 ALR_TRACE_MAIN_RACH (mph_ra_req->txpwr);
3341 #else
3342 ALR_TRACE_MAIN_RACH (mph_ra_req->powerclass_gsm, mph_ra_req->txpwr);
3343 #endif
3344 #ifdef TI_PS_HCOMM_CHANGE
3345 TRACE_BINDUMP(_hCommPL,
3346 TC_USER4,
3347 "CHANNEL_REQ UL",
3348 &mph_ra_req->channel_request,
3349 sizeof(mph_ra_req->channel_request));
3350 #else
3351 TRACE_BINDUMP(hCommPL,
3352 TC_USER4,
3353 "CHANNEL_REQ UL",
3354 &mph_ra_req->channel_request,
3355 sizeof(mph_ra_req->channel_request));
3356 #endif /* TI_PS_HCOMM_CHANGE */
3357
3358 PSENDX (L1, mph_ra_req);
3359 }
3360
3361 /*
3362 +--------------------------------------------------------------------+
3363 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3364 | STATE : code ROUTINE : ma_cs_power_cnf |
3365 +--------------------------------------------------------------------+
3366
3367 PURPOSE : Sends the power measurement results to RR.
3368
3369 */
3370
3371 GLOBAL void ma_cs_power_cnf (T_MPH_POWER_CNF *mph_power_cnf)
3372 {
3373 GET_INSTANCE_DATA;
3374 #if 0 || defined(TRACING)
3375 int i;
3376 TRACE_EVENT_P1 ("mph_power_cnf: %u freq.", mph_power_cnf->num_of_chan);
3377
3378 for (i = 0; i < mph_power_cnf->num_of_chan AND i<10; i++)
3379 TRACE_EVENT_P3("[%u] std=%u rx_lev=%u",
3380 mph_power_cnf->arfcn[i]&ARFCN_MASK,
3381 STD_GET_FROM_ARFCN(mph_power_cnf->arfcn[i]),
3382 mph_power_cnf->rx_lev[i]);
3383 #endif /* TRACING */
3384
3385 if ( IS_EXT_MEAS_RUNNING ) /*alr_data->cs_data.mph_ext_meas_req NEQ NULL */
3386 {
3387 D_OPC ( mph_power_cnf ) = MPH_EXT_MEAS_CNF;
3388 }
3389
3390 PSENDX (RR, mph_power_cnf);
3391 }
3392
3393 /*
3394 +--------------------------------------------------------------------+
3395 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3396 | STATE : code ROUTINE : ma_cs_rxlev_req |
3397 +--------------------------------------------------------------------+
3398
3399 PURPOSE : Process the signal cs_rxlev_req from SDL process
3400 Cell_Selection.
3401
3402 */
3403
3404 GLOBAL void ma_cs_rxlev_req (void)
3405 {
3406 GET_INSTANCE_DATA;
3407 T_POWER_MEAS* power_meas = NULL;
3408
3409 TRACE_FUNCTION ("ma_cs_rxlev_req()");
3410
3411 switch (GET_STATE (STATE_CS))
3412 {
3413 case CS_INIT_L1:
3414 power_meas = cs_prepare_power_req();
3415 /* init radio band before measurement */
3416 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
3417 ma_cs_init_l1_req();
3418 #else
3419 ma_cs_init_l1_req(alr_data->cs_data.std);
3420 #endif
3421 SET_STATE(STATE_CS, CS_INIT_ACTIVE);
3422 return; /* wait of MPHC_INIT_L1_CON */
3423 case CS_INIT_ACTIVE:
3424 return; /* wait of MPHC_INIT_L1_CON */
3425 case CS_INIT_DONE:
3426 /* go through and wait or start the first resp. next measurement */
3427 case CS_START_MEASURE:
3428 /* without or after configuration of radio band */
3429 if (IS_TIMER_ACTIVE(TIM_POWERMEAS))
3430 {
3431 /*
3432 * use time to spread power measurements also to write out
3433 * possible available DL offline traces
3434 */
3435 #ifdef TI_PS_HCOMM_CHANGE
3436 PSIGNAL (_hCommDL, PH_TRACE_IND, NULL);
3437 #else
3438 PSIGNAL (hCommDL, PH_TRACE_IND, NULL);
3439 #endif /* TI_PS_HCOMM_CHANGE */
3440 return; /* do nothing and wait for timer delay */
3441 }
3442 break; /* OK start the first resp. next measurement */
3443 default:
3444 TRACE_EVENT_P1 ("wrong CS state (%u) in ma_cs_rxlev_req()", GET_STATE (STATE_CS));
3445 return;
3446 }
3447
3448 power_meas = cs_prepare_power_req();
3449 if (power_meas)
3450 {
3451 PALLOC(rxlev_req, MPHC_RXLEV_REQ);
3452 rxlev_req->shared_ptr = (ULONG) power_meas;
3453 SET_STATE(STATE_CS, CS_ACTIVE_MEASURE);
3454 PSENDX(L1, rxlev_req);
3455 /* start timer new */
3456 TIMERSTART(TIM_POWERMEAS, alr_data->cs_data.c_tim_meas);
3457
3458 ALR_EM_FIELDSTRENGTH_MEASUREMENT_REQUEST;
3459
3460 }
3461 }
3462
3463
3464 /*
3465 +--------------------------------------------------------------------+
3466 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3467 | STATE : code ROUTINE : ma_cs_init_l1_req |
3468 +--------------------------------------------------------------------+
3469
3470 PURPOSE : set the radio band configuration.
3471 */
3472
3473 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
3474 GLOBAL void ma_cs_init_l1_req ()
3475 #else
3476 GLOBAL void ma_cs_init_l1_req (UBYTE radio_band_config)
3477 #endif
3478 {
3479 PALLOC (init_l1_req, MPHC_INIT_L1_REQ); /* T_MPHC_INIT_L1_REQ */
3480 /* No need to configure L1 for different bands. l1 is capable of scanning across different bands */
3481 #ifndef TI_PS_FF_QUAD_BAND_SUPPORT
3482 init_l1_req->radio_band_config = radio_band_config;
3483 TRACE_EVENT_P1 ("radio_band_config=%u", init_l1_req->radio_band_config);
3484 #endif
3485 PSENDX(L1, init_l1_req);
3486 cs_set_wideband_sync();
3487 }
3488
3489 /*
3490 +--------------------------------------------------------------------+
3491 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3492 | STATE : code ROUTINE : ma_cs_network_sync_req |
3493 +--------------------------------------------------------------------+
3494
3495 PURPOSE : Process the signal cs_network_sync_req from SDL process
3496 Cell_Selection.
3497 */
3498
3499 GLOBAL void ma_cs_network_sync_req (USHORT channel)
3500 {
3501 GET_INSTANCE_DATA;
3502 PALLOC (network_sync_req, MPHC_NETWORK_SYNC_REQ);
3503
3504 network_sync_req->radio_freq = channel;
3505 network_sync_req->fn_offset = 0;
3506 network_sync_req->time_alignment = 0;
3507 network_sync_req->timing_validity = TV_INVALID_TIMING_INFO;
3508 network_sync_req->search_mode = alr_data->cs_data.search_mode;
3509 alr_data->cs_data.sync_active = TRUE;
3510 PSENDX(L1, network_sync_req);
3511
3512 TIMERSTART(TIM_NW_SYNC_GUARD, TIM_NW_SYNC_GUARD_VALUE);
3513
3514 }
3515
3516
3517 /*
3518 +--------------------------------------------------------------------+
3519 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3520 | STATE : code ROUTINE : ma_nc_rxlev_periodic_req |
3521 +--------------------------------------------------------------------+
3522
3523 PURPOSE : Process the signal nc_rxlev_periodic_req from SDL process
3524 Idle_Neighbour_Cell.
3525
3526 */
3527
3528 GLOBAL void ma_nc_rxlev_periodic_req (T_MPHC_RXLEV_PERIODIC_REQ* update)
3529 {
3530 GET_INSTANCE_DATA;
3531 switch (GET_STATE (STATE_MA))
3532 {
3533 case MA_CELL_RESELECTION:
3534 case MA_IDLE:
3535 PSENDX (L1, update);
3536 break;
3537
3538 default:
3539 PFREE (update);
3540 break;
3541 }
3542 }
3543
3544
3545 /*
3546 +--------------------------------------------------------------------+
3547 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3548 | STATE : code ROUTINE : ma_nc_stop_ncell_bcch_req |
3549 +--------------------------------------------------------------------+
3550
3551 PURPOSE : Process the signal nc_stop_ncell_bcch_req from SDL process
3552 Idle_Neighbour_Cell.
3553
3554 */
3555
3556 GLOBAL void ma_nc_stop_ncell_bcch_req (USHORT arfcn)
3557 {
3558 PALLOC(stop_req, MPHC_STOP_NCELL_BCCH_REQ);
3559
3560 memset (stop_req, 0, sizeof(T_MPHC_STOP_NCELL_BCCH_REQ));
3561 stop_req->radio_freq_array_size = 1;
3562 stop_req->radio_freq_array[0] = ARFCN_TO_L1(arfcn);
3563
3564 PSENDX(L1, stop_req);
3565
3566 }
3567
3568 /*
3569 +--------------------------------------------------------------------+
3570 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3571 | STATE : code ROUTINE : ma_nc_stop_ncell_bcch_req |
3572 +--------------------------------------------------------------------+
3573
3574 PURPOSE : Process the signal nc_stop_ncell_bcch_req from SDL process
3575 Idle_Neighbour_Cell.
3576
3577 */
3578
3579 GLOBAL void ma_nc_stop_ncell_sync_req (USHORT arfcn)
3580 {
3581 PALLOC (mphc_stop_ncell_sync_req, MPHC_STOP_NCELL_SYNC_REQ);
3582
3583 mphc_stop_ncell_sync_req->radio_freq_array_size = 1;
3584 mphc_stop_ncell_sync_req->radio_freq_array[0] = ARFCN_TO_L1(arfcn);
3585
3586 PSENDX(L1, mphc_stop_ncell_sync_req);
3587 }
3588 /*
3589 +--------------------------------------------------------------------+
3590 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3591 | STATE : code ROUTINE : ma_nc_sync_req |
3592 +--------------------------------------------------------------------+
3593
3594 PURPOSE : Process the signal nc_sync_req from SDL process
3595 Idle_Neighbour_Cell.
3596
3597 */
3598
3599 GLOBAL void ma_nc_sync_req (T_MPHC_NCELL_SYNC_REQ *sync_req)
3600 {
3601 PSENDX(L1, sync_req);
3602 }
3603
3604 /*
3605 +--------------------------------------------------------------------+
3606 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3607 | STATE : code ROUTINE : ma_nc_list_sync_req |
3608 +--------------------------------------------------------------------+
3609
3610 PURPOSE : Process the signal nc_list_sync_req from SDL process
3611 Idle_Neighbour_Cell.
3612
3613 */
3614
3615 GLOBAL void ma_nc_list_sync_req (T_MPHC_NCELL_LIST_SYNC_REQ *list_sync_req)
3616 {
3617 PSENDX(L1, list_sync_req);
3618 }
3619
3620 /*
3621 +--------------------------------------------------------------------+
3622 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3623 | STATE : code ROUTINE : ma_nc_bcch_req |
3624 +--------------------------------------------------------------------+
3625
3626 PURPOSE : Process the signal nc_bcch_req from SDL process
3627 Idle_Neighbour_Cell.
3628
3629 */
3630
3631 GLOBAL void ma_nc_bcch_req (T_MPHC_NCELL_BCCH_REQ *bcch_req)
3632 {
3633
3634 ALR_EM_READ_NEIGHBOURCELL_BCCH;
3635
3636 PSENDX(L1, bcch_req);
3637 }
3638
3639 /*
3640 +--------------------------------------------------------------------+
3641 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3642 | STATE : code ROUTINE : ma_nc_update_ba_list |
3643 +--------------------------------------------------------------------+
3644
3645 PURPOSE : Process the signal nc_update_ba_list from SDL process
3646 Idle_Neighbour_Cell.
3647
3648 */
3649
3650 GLOBAL void ma_nc_update_ba_list (T_MPHC_UPDATE_BA_LIST *update_ba_list)
3651 {
3652 GET_INSTANCE_DATA;
3653 switch (GET_STATE (STATE_MA))
3654 {
3655 case MA_DEDICATED:
3656 PSENDX (L1, update_ba_list);
3657 break;
3658
3659 default:
3660 PFREE (update_ba_list);
3661 break;
3662 }
3663 }
3664
3665
3666 /*
3667 +--------------------------------------------------------------------+
3668 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3669 | STATE : code ROUTINE : ma_nc_report_res |
3670 +--------------------------------------------------------------------+
3671
3672 PURPOSE : Process the signal nc_report_res from SDL process
3673 Idle_Neighbour_Cell.
3674
3675 */
3676
3677 GLOBAL void ma_nc_report_res (T_MPH_MEASUREMENT_IND *mph_measurement_ind)
3678 {
3679 /* Implements Measure#32: Row 112 */
3680 GET_INSTANCE_DATA;
3681 TRACE_ASSERT((GET_STATE(STATE_MA) NEQ MA_NULL) OR (GET_STATE(STATE_MA) NEQ MA_CELL_SELECTION));
3682
3683 switch (GET_STATE (STATE_MA))
3684 {
3685 case MA_IDLE:
3686 #ifdef GPRS
3687 case MA_PTM:
3688 #endif
3689 case MA_CON_EST:
3690 case MA_CELL_RESELECTION:
3691 case MA_DEDICATED:
3692 PSENDX (RR, mph_measurement_ind);
3693 break;
3694 default:
3695 PFREE (mph_measurement_ind);
3696 break;
3697 }
3698 }
3699
3700 /*
3701 +--------------------------------------------------------------------+
3702 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3703 | STATE : code ROUTINE : ma_dedi_stop_req |
3704 +--------------------------------------------------------------------+
3705
3706 PURPOSE : Process the signal ma_dedi_stop_req from SDL process
3707 Dedicated_Control.
3708
3709 */
3710
3711 GLOBAL void ma_dedi_stop_req (void)
3712 {
3713 PALLOC (stop_dedicated, MPHC_STOP_DEDICATED_REQ);
3714 #if defined(DL_TRACE_ENABLED)
3715 DL_OFFLINE_TRACE ("MPHC_STOP_DEDICATED_REQ");
3716 #endif /* DL_TRACE_ENABLED */
3717 PSENDX (L1, stop_dedicated);
3718 }
3719
3720 /*
3721 +--------------------------------------------------------------------+
3722 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3723 | STATE : code ROUTINE : ma_dedi_cnf |
3724 +--------------------------------------------------------------------+
3725
3726 PURPOSE : Process the signal ma_dedi_cnf from SDL process
3727 Dedicated_Control.
3728
3729 */
3730
3731 GLOBAL void ma_dedi_cnf (UBYTE cause)
3732 {
3733 PALLOC (dedicated_cnf, MPH_DEDICATED_CNF);
3734
3735 dedicated_cnf->dedi_res = cause;
3736 PSENDX (RR, dedicated_cnf);
3737 }
3738
3739 /*
3740 +--------------------------------------------------------------------+
3741 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3742 | STATE : code ROUTINE : ma_dedi_chan_ass_req |
3743 +--------------------------------------------------------------------+
3744
3745 PURPOSE : Process the signal ma_dedi_chan_ass_req from SDL process
3746 Dedi Control.
3747
3748 */
3749
3750 GLOBAL void ma_dedi_chan_ass_req (T_MPHC_CHANNEL_ASSIGN_REQ *mphc_channel_assign_req)
3751 {
3752 #if defined(DL_TRACE_ENABLED)
3753 DL_OFFLINE_TRACE ("MPHC_CHANNEL_ASSIGN_REQ");
3754 #else
3755 SYST_TRACE_P ((SYST, "dedi chan ass req %d",
3756 mphc_channel_assign_req->channel_desc_1.channel_type));
3757 #endif /* DL_TRACE_ENABLED */
3758 PSENDX (L1, mphc_channel_assign_req);
3759 }
3760
3761 /*
3762 +--------------------------------------------------------------------+
3763 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3764 | STATE : code ROUTINE : ma_dedi_async_ho_req |
3765 +--------------------------------------------------------------------+
3766
3767 PURPOSE : Process the signal ma_dedi_async_ho_req from SDL process
3768 Dedi Control.
3769
3770 */
3771
3772 GLOBAL void ma_dedi_async_ho_req (T_MPHC_ASYNC_HO_REQ *async_ho_req)
3773 {
3774 PSENDX (L1, async_ho_req);
3775 }
3776
3777 /*
3778 +--------------------------------------------------------------------+
3779 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3780 | STATE : code ROUTINE : ma_dedi_sync_ho_req |
3781 +--------------------------------------------------------------------+
3782
3783 PURPOSE : Process the signal ma_dedi_sync_ho_req from SDL process
3784 Dedi Control.
3785
3786 */
3787
3788 GLOBAL void ma_dedi_sync_ho_req (T_MPHC_SYNC_HO_REQ * sync_ho_req)
3789 {
3790 PSENDX (L1, sync_ho_req);
3791 }
3792
3793 /*
3794 +--------------------------------------------------------------------+
3795 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3796 | STATE : code ROUTINE : ma_dedi_pre_sync_ho_req |
3797 +--------------------------------------------------------------------+
3798
3799 PURPOSE : Process the signal ma_dedi_pre_sync_ho_req from
3800 SDL process Dedi Control.
3801
3802 */
3803
3804 GLOBAL void ma_dedi_pre_sync_ho_req (T_MPHC_PRE_SYNC_HO_REQ *pre_sync_ho_req)
3805 {
3806 PSENDX (L1, pre_sync_ho_req);
3807 }
3808
3809 /*
3810 +--------------------------------------------------------------------+
3811 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3812 | STATE : code ROUTINE : ma_dedi_fail_cnf |
3813 +--------------------------------------------------------------------+
3814
3815 PURPOSE : Process the signal ma_dedi_fail_cnf from SDL process
3816 Dedicated_Control.
3817
3818 */
3819
3820 GLOBAL void ma_dedi_fail_cnf (void)
3821 {
3822 PALLOC (mph_dedicated_fail_cnf, MPH_DEDICATED_FAIL_CNF);
3823 PSENDX (RR, mph_dedicated_fail_cnf);
3824 }
3825
3826 /*
3827 +--------------------------------------------------------------------+
3828 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3829 | STATE : code ROUTINE : ma_dedi_ho_fail_req |
3830 +--------------------------------------------------------------------+
3831
3832 PURPOSE : Process the signal ma_dedi_ho_fail_req from SDL process
3833 Dedicated_Control.
3834
3835 */
3836
3837 GLOBAL void ma_dedi_ho_fail_req (void)
3838 {
3839 PALLOC (handover_fail_req, MPHC_HANDOVER_FAIL_REQ);
3840 PSENDX (L1, handover_fail_req);
3841 }
3842
3843 /*
3844 +--------------------------------------------------------------------+
3845 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3846 | STATE : code ROUTINE : ma_dedi_imm_ass_req |
3847 +--------------------------------------------------------------------+
3848
3849 PURPOSE : Process the signal ma_dedi_imm_ass_req from SDL process
3850 Dedicated_Control.
3851
3852 */
3853
3854 GLOBAL void ma_dedi_imm_ass_req (T_MPHC_IMMED_ASSIGN_REQ *immed_assign_req)
3855 {
3856 #if defined(DL_TRACE_ENABLED)
3857 DL_OFFLINE_TRACE ("MPHC_IMMED_ASSIGN_REQ");
3858 #else
3859 SYST_TRACE_P ((SYST, "dedi imm ass req %d",
3860 immed_assign_req->channel_desc.channel_type));
3861 #endif /* DL_TRACE_ENABLED */
3862 PSENDX (L1, immed_assign_req);
3863 }
3864
3865 /*
3866 +--------------------------------------------------------------------+
3867 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3868 | STATE : code ROUTINE : ma_dedi_change_freq_req |
3869 +--------------------------------------------------------------------+
3870
3871 PURPOSE : Process the signal ma_dedi_change_freq_req from
3872 SDL process Dedicated_Control.
3873
3874 */
3875
3876 GLOBAL void ma_dedi_change_freq_req (T_MPHC_CHANGE_FREQUENCY *change_frequency)
3877 {
3878 PSENDX (L1, change_frequency);
3879 }
3880
3881 /*
3882 +--------------------------------------------------------------------+
3883 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3884 | STATE : code ROUTINE : ma_dedi_chan_mode_req |
3885 +--------------------------------------------------------------------+
3886
3887 PURPOSE : Process the signal ma_dedi_chan_mode_req from
3888 SDL process Dedicated_Control.
3889
3890 */
3891
3892 GLOBAL void ma_dedi_chan_mode_req (T_MPHC_CHANNEL_MODE_MODIFY_REQ *channel_mode_modify_req)
3893 {
3894 PSENDX (L1, channel_mode_modify_req);
3895 }
3896
3897
3898 /*
3899 +--------------------------------------------------------------------+
3900 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3901 | STATE : code ROUTINE : ma_dedi_ciph_req |
3902 +--------------------------------------------------------------------+
3903
3904 PURPOSE : Process the signal ma_dedi_ciph_req from
3905 SDL process Dedicated_Control.
3906
3907 */
3908
3909 GLOBAL void ma_dedi_ciph_req (T_MPHC_SET_CIPHERING_REQ *set_ciphering_req)
3910 {
3911 PSENDX (L1, set_ciphering_req);
3912 }
3913
3914 /*
3915 +--------------------------------------------------------------------+
3916 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3917 | STATE : code ROUTINE : ma_dedi_data_out |
3918 +--------------------------------------------------------------------+
3919
3920 PURPOSE : Acknowledged frame or short PD header (format type Bter)
3921 Forward the message to DL. Uses the original primitive format.
3922
3923 */
3924
3925 LOCAL void ma_dedi_data_out (T_PH_DATA_IND *data_ind)
3926 {
3927 PPASS (data_ind, ph_data_ind, PH_DATA_IND);
3928 PSENDX (DL, ph_data_ind);
3929 }
3930
3931
3932 /*
3933 +--------------------------------------------------------------------+
3934 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
3935 | STATE : code ROUTINE : ma_send_dedi_unitdata |
3936 +--------------------------------------------------------------------+
3937
3938 PURPOSE : Sends an unacknowledged message on SACCH to RR.
3939
3940 */
3941
3942 LOCAL void ma_send_dedi_unitdata (T_MPHC_DATA_IND *data_ind)
3943 {
3944 USHORT len_in_bits = 19 * 8;
3945 PALLOC_SDU (data_out, MPH_UNITDATA_IND, len_in_bits);
3946
3947 data_out->sdu.l_buf = 18 * 8;
3948 data_out->sdu.o_buf = 8;
3949 data_out->sdu.buf[0] = 0;
3950 /*lint -e{419} (Warning -- Apparent data overrun) */
3951 memcpy (&data_out->sdu.buf[1], &data_ind->l2_frame.content[5], 18);
3952 data_out->arfcn = ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK;
3953 data_out->fn = data_ind->fn;
3954
3955 PSENDX (RR, data_out);
3956 }
3957 /*
3958 +--------------------------------------------------------------------+
3959 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3960 | STATE : code ROUTINE : ma_dedi_open_tch_loop_req |
3961 +--------------------------------------------------------------------+
3962
3963 PURPOSE : Process the signal ma_dedi_open_tch_loop_req from
3964 SDL process Dedicated_Control.
3965
3966 */
3967
3968 GLOBAL void ma_dedi_open_tch_loop_req (void)
3969 {
3970 PALLOC (oml1_open_tch_loop_req, OML1_OPEN_TCH_LOOP_REQ);
3971 PSENDX (L1, oml1_open_tch_loop_req);
3972 }
3973
3974
3975 /*
3976 +--------------------------------------------------------------------+
3977 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3978 | STATE : code ROUTINE : ma_dedi_stop_dai_req |
3979 +--------------------------------------------------------------------+
3980
3981 PURPOSE : Process the signal ma_dedi_stop_dai_req from
3982 SDL process Dedicated_Control.
3983
3984 */
3985 GLOBAL void ma_dedi_stop_dai_req (void)
3986 {
3987 PALLOC (oml1_stop_dai_test_req, OML1_STOP_DAI_TEST_REQ);
3988 PSENDX (L1, oml1_stop_dai_test_req);
3989 }
3990
3991
3992 /*
3993 +--------------------------------------------------------------------+
3994 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
3995 | STATE : code ROUTINE : ma_dedi_close_tch_loop_req |
3996 +--------------------------------------------------------------------+
3997
3998 PURPOSE : Process the signal ma_dedi_close_tch_loop_req from
3999 SDL process Dedicated_Control.
4000
4001 */
4002
4003 GLOBAL void ma_dedi_close_tch_loop_req (T_OML1_CLOSE_TCH_LOOP_REQ *oml1_close_tch_loop_req)
4004 {
4005 PSENDX (L1, oml1_close_tch_loop_req);
4006 }
4007
4008
4009 /*
4010 +--------------------------------------------------------------------+
4011 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
4012 | STATE : code ROUTINE : ma_dedi_start_dai_req |
4013 +--------------------------------------------------------------------+
4014
4015 PURPOSE : Process the signal ma_dedi_start_dai_req from
4016 SDL process Dedicated_Control.
4017
4018 */
4019
4020 GLOBAL void ma_dedi_start_dai_req (T_OML1_START_DAI_TEST_REQ *oml1_start_dai_test_req)
4021 {
4022 PSENDX (L1, oml1_start_dai_test_req);
4023 }
4024
4025 /*
4026 +--------------------------------------------------------------------+
4027 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4028 | STATE : code ROUTINE : ma_rach_stop_ra_req |
4029 +--------------------------------------------------------------------+
4030
4031 PURPOSE : Process the signal rach_stop_ra_req from SDL process
4032 RACH_Control.
4033
4034 */
4035
4036 GLOBAL void ma_rach_stop_ra_req (void)
4037 {
4038 PALLOC (stop_ra_req, MPHC_STOP_RA_REQ);
4039
4040 PSENDX (L1, stop_ra_req);
4041 }
4042
4043 /*
4044 +--------------------------------------------------------------------+
4045 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4046 | STATE : code ROUTINE : ma_pch_start_ccch_req |
4047 +--------------------------------------------------------------------+
4048
4049 PURPOSE : Process the signal pch_start_ccch_req from SDL process
4050 PCH_Control.
4051
4052 */
4053
4054 GLOBAL void ma_pch_start_ccch_req (T_MPHC_START_CCCH_REQ *pl_idle)
4055 {
4056 GET_INSTANCE_DATA;
4057 if (memcmp ( &(alr_data->pch_data.last_start_ccch_req),
4058 pl_idle,
4059 sizeof(T_MPHC_START_CCCH_REQ) ) NEQ 0)
4060 {
4061 memcpy ( &(alr_data->pch_data.last_start_ccch_req),
4062 pl_idle,
4063 sizeof(T_MPHC_START_CCCH_REQ));
4064 PSENDX (L1, pl_idle);
4065 }
4066 else
4067 {
4068 PFREE(pl_idle);
4069 }
4070 }
4071
4072 /*
4073 +--------------------------------------------------------------------+
4074 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4075 | STATE : code ROUTINE : ma_rach_random_cnf |
4076 +--------------------------------------------------------------------+
4077
4078 PURPOSE : Process the signal rach_random_cnf from SDL process
4079 RACH_Control.
4080
4081 */
4082
4083 GLOBAL void ma_rach_random_cnf (T_MPH_RANDOM_ACCESS_CNF * mph_random_access_cnf)
4084 {
4085 GET_INSTANCE_DATA;
4086 switch (GET_STATE (STATE_MA))
4087 {
4088 case MA_CON_EST:
4089 ALR_TRACE_MAIN_RA_CNF(mph_random_access_cnf->frame_no.t1,
4090 mph_random_access_cnf->frame_no.t2,
4091 mph_random_access_cnf->frame_no.t3);
4092
4093 #if !defined (NCONFIG)
4094 if(v_cfg_rach_failure)
4095 memset(mph_random_access_cnf,0, sizeof(T_MPH_RANDOM_ACCESS_CNF));
4096 #endif
4097
4098 PSENDX (RR, mph_random_access_cnf);
4099 break;
4100
4101 default:
4102 PFREE (mph_random_access_cnf);
4103 break;
4104 }
4105 }
4106
4107 /*
4108 +--------------------------------------------------------------------+
4109 | PROJECT : GSM-PS (6103) MODULE : ALR_PCH |
4110 | STATE : code ROUTINE : ma_pch_paging_ind |
4111 +--------------------------------------------------------------------+
4112
4113 PURPOSE : Sends a paging indication to RR.
4114
4115 */
4116
4117 GLOBAL void ma_pch_paging_ind (UBYTE id_type, UBYTE channel_needed)
4118 {
4119 PALLOC (mph_paging_ind, MPH_PAGING_IND);
4120
4121 ALR_EM_PAGING_DETECTED;
4122
4123 mph_paging_ind->identity_type = id_type;
4124 mph_paging_ind->channel_needed = channel_needed;
4125
4126 // vsi_o_ttrace(VSI_CALLER 0xFFFF, "PAG IND ch=%x", channel_needed);
4127 #if defined(DL_TRACE_ENABLED)
4128 {
4129 sprintf (dl_trace_buf, "PAG%u ch=%u", id_type,channel_needed);
4130 DL_OFFLINE_TRACE (dl_trace_buf);
4131 }
4132 #else /* DL_TRACE_ENABLED */
4133 SYST_TRACE_P ((SYST, "PAG%u ch=%u", id_type,channel_needed));
4134 #endif /* DL_TRACE_ENABLED */
4135
4136
4137 PSENDX (RR, mph_paging_ind);
4138 }
4139
4140 /*
4141 +--------------------------------------------------------------------+
4142 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4143 | STATE : code ROUTINE : ma_pch_stop |
4144 +--------------------------------------------------------------------+
4145
4146 PURPOSE : Stop CCCH reading.
4147 */
4148
4149 GLOBAL void ma_pch_stop(void)
4150 {
4151 GET_INSTANCE_DATA;
4152 PALLOC(stop_req, MPHC_STOP_CCCH_REQ);
4153 alr_data->pch_data.last_start_ccch_req.bs_pa_mfrms = NOT_PRESENT_8BIT;
4154 PSENDX(L1, stop_req);
4155 }
4156
4157
4158
4159 /*
4160 +--------------------------------------------------------------------+
4161 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4162 | STATE : code ROUTINE : ma_mmi_cbch_req |
4163 +--------------------------------------------------------------------+
4164
4165 PURPOSE : Process the primitive MMI_CBCH_REQ.
4166
4167 */
4168
4169 GLOBAL void ma_mmi_cbch_req (T_MMI_CBCH_REQ *cbch_req)
4170 {
4171 TRACE_EVENT ("MMI_CBCH_REQ");
4172 cb_mmi_cbch_req (cbch_req);
4173 PFREE (cbch_req);
4174 }
4175
4176 /*
4177 +--------------------------------------------------------------------+
4178 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4179 | STATE : code ROUTINE : ma_mmi_cbch_req |
4180 +--------------------------------------------------------------------+
4181
4182 PURPOSE : Process the primitive MMI_CBCH_REQ.
4183
4184 */
4185
4186 GLOBAL void ma_mmi_sat_cbch_dwnld_req (T_MMI_SAT_CBCH_DWNLD_REQ *cbch_req)
4187 {
4188 TRACE_EVENT ("MMI_SAT_CBCH_DWNLD_REQ");
4189 cb_mmi_sat_cbch_req (cbch_req);
4190 PFREE (cbch_req);
4191 }
4192
4193 /*
4194 +--------------------------------------------------------------------+
4195 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4196 | STATE : code ROUTINE : ma_cb_stop_cbch_req |
4197 +--------------------------------------------------------------------+
4198
4199 PURPOSE : Process the signal ma_cb_stop_cbch_req.
4200
4201 */
4202 GLOBAL void ma_cb_stop_cbch_req (void)
4203 {
4204 PALLOC(stop_cbch_req, MPHC_STOP_CBCH_REQ);
4205
4206 stop_cbch_req->normal_cbch = CBCH_STOP;
4207 stop_cbch_req->extended_cbch = CBCH_STOP;
4208 TRACE_EVENT ("MPHC_STOP_CBCH_REQ");
4209 PSENDX(L1, stop_cbch_req);
4210 }
4211
4212 /*
4213 +--------------------------------------------------------------------+
4214 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4215 | STATE : code ROUTINE : ma_cb_sched_req |
4216 +--------------------------------------------------------------------+
4217
4218 PURPOSE : Process the signal ma_cb_sched_req.
4219
4220 */
4221 GLOBAL void ma_cb_sched_req (T_MPHC_CBCH_SCHEDULE_REQ *sched_req)
4222 {
4223 /*
4224 TRACE_EVENT ("MPHC_CBCH_SCHEDULE_REQ");
4225 */
4226 PSENDX (L1, sched_req);
4227 }
4228
4229 /*
4230 +--------------------------------------------------------------------+
4231 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4232 | STATE : code ROUTINE : ma_cb_config_cbch |
4233 +--------------------------------------------------------------------+
4234
4235 PURPOSE : Process the signal ma_cb_config_cbch.
4236
4237 */
4238 GLOBAL void ma_cb_config_cbch (T_MPHC_CONFIG_CBCH_REQ *config_cbch)
4239 {
4240 TRACE_EVENT ("MPHC_CONFIG_CBCH_REQ");
4241 PSENDX(L1, config_cbch);
4242 }
4243
4244 /*
4245 +--------------------------------------------------------------------+
4246 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4247 | STATE : code ROUTINE : ma_cb_mmi_cbch_ind |
4248 +--------------------------------------------------------------------+
4249
4250 PURPOSE : Process the signal ma_cb_mmi_cbch_ind.
4251
4252 */
4253 GLOBAL void ma_cb_mmi_cbch_ind (T_MMI_CBCH_IND *mmi_cbch_ind)
4254 {
4255 TRACE_EVENT ("MMI_CBCH_IND");
4256 PSENDX (MMI, mmi_cbch_ind);
4257 }
4258
4259 /*
4260 +--------------------------------------------------------------------+
4261 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4262 | STATE : code ROUTINE : ma_cb_info_req |
4263 +--------------------------------------------------------------------+
4264
4265 PURPOSE : Process the signal ma_cb_info_req.
4266
4267 */
4268 GLOBAL void ma_cb_info_req (UBYTE bitmap)
4269 {
4270 PALLOC(info_req, MPHC_CBCH_INFO_REQ);
4271
4272 info_req->tb_bitmap = bitmap;
4273 TRACE_EVENT ("MPHC_CBCH_INFO_REQ");
4274 PSENDX (L1, info_req);
4275 }
4276 /*====================================================================
4277 *Functions used by more than one process
4278 *====================================================================
4279
4280 +--------------------------------------------------------------------+
4281 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4282 | STATE : code ROUTINE : ma_scell_nbcch_req |
4283 +--------------------------------------------------------------------+
4284
4285 PURPOSE : Process the signal ma_scell_nbcch_req .
4286
4287 */
4288
4289 GLOBAL void ma_scell_full_nbcch (void)
4290 {
4291 GET_INSTANCE_DATA;
4292 PALLOC(scell_nbcch_req, MPHC_SCELL_NBCCH_REQ);
4293
4294 ALR_TRACE_MAIN ("start full sc bcch");
4295
4296 switch(GET_STATE(STATE_MA))
4297 {
4298 case MA_CELL_SELECTION:
4299 case MA_CELL_RESELECTION:
4300 alr_data->cs_data.si_bitmap = 0;
4301 break;
4302 }
4303 scell_nbcch_req->schedule_array_size = 1;
4304 scell_nbcch_req->schedule_array[0].modulus = 1;
4305 scell_nbcch_req->schedule_array[0].relative_position = 0;
4306 ma_scell_nbcch_req(scell_nbcch_req);
4307 }
4308
4309 GLOBAL void ma_scell_nbcch_req (T_MPHC_SCELL_NBCCH_REQ *nbcch_req)
4310 {
4311 ALR_TRACE_MAIN ("start sc bcch");
4312
4313 PSENDX (L1, nbcch_req);
4314 }
4315
4316 /*
4317 +--------------------------------------------------------------------+
4318 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4319 | STATE : code ROUTINE : ma_scell_ebcch_req |
4320 +--------------------------------------------------------------------+
4321
4322 PURPOSE : Process the signal cs_scell_nbcch_req from SDL process
4323 Cell_Selection.
4324 */
4325
4326 GLOBAL void ma_scell_ebcch_req (T_MPHC_SCELL_EBCCH_REQ *ebcch_req)
4327 {
4328 PSENDX (L1, ebcch_req);
4329 }
4330
4331
4332 /*
4333 +--------------------------------------------------------------------+
4334 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4335 | STATE : code ROUTINE : ma_stop_active_procs |
4336 +--------------------------------------------------------------------+
4337
4338 PURPOSE : Stop all active procedures.
4339 */
4340 GLOBAL void ma_stop_active_procs (UBYTE flags)
4341 {
4342 GET_INSTANCE_DATA;
4343 if (flags & STOP_PCH_READING)
4344 {
4345 pch_stop();
4346 }
4347
4348 if (flags & STOP_MEASUREMENTS)
4349 {
4350 ma_stop_rxlev_periodic_req();
4351 }
4352
4353 switch (GET_STATE(STATE_MA))
4354 {
4355 case MA_CELL_SELECTION:
4356 /*
4357 * if we are doing measurements or synchronising or
4358 * reading the BCCH of a cell, stop the process
4359 */
4360 cs_stop();
4361 break;
4362 case MA_CELL_RESELECTION:
4363 ma_stop_scell_bcch_req ();
4364 break;
4365 case MA_CON_EST:
4366 /*
4367 * Stop Uplink Random Burst Sending
4368 */
4369 rach_stop();
4370 break;
4371 case MA_DEDICATED:
4372 dedi_stop();
4373 break;
4374 case MA_IDLE:
4375 /* if we are reading the FCH or SCH of a ncell
4376 or reading its BCCH, stop it */
4377 nc_suspend();
4378 #if defined (REL99) && defined (TI_PS_FF_EMR)
4379 /* before stop reading the scell BCCH reset the SIq_status to configure
4380 when it is in pending state, so that it is easy to reconfigure again*/
4381 if((alr_data->nc_data.si2quater_status EQ SI2QUATER_ACQ_PENDING) OR
4382 (alr_data->nc_data.si2quater_status EQ SI2QUATER_ACQ_FULL_BCCH))
4383 {
4384 alr_data->nc_data.si2quater_status = SI2QUATER_CONFIGURE;
4385 }
4386 #endif
4387 /* if we are reading the BCCH of the serving cell,
4388 stop it */
4389 ma_stop_scell_bcch_req();
4390 /* if we are reading the CBCH, stop it */
4391 cb_stop();
4392 break;
4393 #ifdef GPRS
4394 case MA_PTM:
4395 /* if we are reading the FCH or SCH of a ncell
4396 or reading its BCCH, stop it */
4397 nc_suspend();
4398 /* if we are reading the BCCH of the serving cell,
4399 stop it */
4400 /*
4401 ma_stop_scell_bcch_req();
4402 */
4403 break;
4404 #endif /* GPRS */
4405 };
4406 }
4407
4408 /*
4409 +--------------------------------------------------------------------+
4410 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4411 | STATE : code ROUTINE : ma_send_unitdata |
4412 +--------------------------------------------------------------------+
4413
4414 PURPOSE : Cut pseudo length and send data directly to RR.
4415
4416 */
4417
4418 GLOBAL void ma_send_unitdata (T_MPHC_DATA_IND * data_ind)
4419 {
4420 #define SYS_INFO_LEN 24
4421
4422 USHORT len_in_bits = SYS_INFO_LEN * BITS_PER_BYTE;
4423
4424 PALLOC_SDU (data_out, MPH_UNITDATA_IND, len_in_bits);
4425
4426 /* No IE and Pseudo Length */
4427 data_out->sdu.l_buf = (SYS_INFO_LEN - 2) * BITS_PER_BYTE;
4428 /* Pseudo Length */
4429 data_out->sdu.o_buf = 1 * BITS_PER_BYTE;
4430 /* No IE */
4431 /*lint -e{419} (Warning -- Apparent data overrun) */
4432 memcpy (data_out->sdu.buf, &data_ind->l2_frame, SYS_INFO_LEN - 1);
4433 data_out->arfcn = ARFCN_TO_G23(data_ind->radio_freq)&ARFCN_MASK;
4434 data_out->fn = data_ind->fn;
4435
4436 #if 0 && defined(DL_TRACE_ENABLED)
4437 {
4438 sprintf (dl_trace_buf, "DATA ind msg=%u", msg_t);
4439 DL_OFFLINE_TRACE (dl_trace_buf);
4440 }
4441 #endif /* DL_TRACE_ENABLED */
4442
4443 PSENDX (RR, data_out);
4444 }
4445
4446 /*
4447 +--------------------------------------------------------------------+
4448 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
4449 | STATE : code ROUTINE : ma_error_ind |
4450 +--------------------------------------------------------------------+
4451
4452 PURPOSE : send a MPH_ERROR_IND to RR.
4453
4454 */
4455
4456 GLOBAL void ma_error_ind (UBYTE cause, USHORT arfcn)
4457 {
4458 PALLOC (error_ind, MPH_ERROR_IND);
4459
4460 ALR_TRACE_MAIN ("err ind");
4461
4462 ALR_EM_ERROR_IND(cause, arfcn);
4463
4464 error_ind->cs = cause;
4465 error_ind->arfcn = arfcn;
4466
4467 PSENDX (RR, error_ind);
4468 /*
4469 * These errors could mean that the AFC value in L1 might be srewed
4470 * up somehow. So go back to wide band search mode for next CS to be
4471 * safe.
4472 */
4473 if( (cause EQ CS_DOWN_LINK_FAIL) OR (cause EQ CS_RADIO_LINK_FAIL))
4474 cs_set_wideband_sync();
4475 }
4476
4477 /*
4478 +--------------------------------------------------------------------+
4479 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
4480 | STATE : code ROUTINE : ma_sync_ind |
4481 +--------------------------------------------------------------------+
4482
4483 PURPOSE : Send a synchronisation primitive to RR.
4484
4485 */
4486
4487 LOCAL void ma_sync_ind (UBYTE cause,
4488 USHORT arfcn)
4489 {
4490 PALLOC (sync_ind, MPH_SYNC_IND);
4491
4492 TRACE_FUNCTION ("ma_sync_ind()");
4493
4494 sync_ind->cs = cause;
4495 sync_ind->arfcn = arfcn;
4496 PSENDX (RR, sync_ind);
4497 }
4498
4499
4500 /*
4501 +--------------------------------------------------------------------+
4502 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4503 | STATE : code ROUTINE : ma_stop_scell_bcch_req |
4504 +--------------------------------------------------------------------+
4505
4506 PURPOSE : Process the signal cs_stop_bcch_reading from SDL processes
4507 Cell_Selection or Serving_Cell.
4508
4509 */
4510
4511 GLOBAL void ma_stop_scell_bcch_req (void)
4512 {
4513 PALLOC (stop_bcch_req, MPHC_STOP_SCELL_BCCH_REQ);
4514
4515 ALR_TRACE_MAIN ("stop sc bcch");
4516
4517 PSENDX (L1, stop_bcch_req);
4518 }
4519
4520 /*
4521 +--------------------------------------------------------------------+
4522 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4523 | STATE : code ROUTINE : ma_stop_rxlev_periodic_req |
4524 +--------------------------------------------------------------------+
4525
4526 PURPOSE : Stops the periodic fieldstrength measurements during
4527 idle mode.
4528
4529 */
4530
4531
4532 LOCAL void ma_stop_rxlev_periodic_req (void)
4533 {
4534 PALLOC (stop_rxlev_req, MPHC_STOP_RXLEV_PERIODIC_REQ);
4535
4536 ALR_TRACE_MAIN ("stop rxlev perio.");
4537
4538 PSENDX (L1, stop_rxlev_req);
4539 }
4540
4541
4542
4543 /*
4544 +--------------------------------------------------------------------+
4545 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4546 | STATE : code ROUTINE : ma_bsic_cnf |
4547 +--------------------------------------------------------------------+
4548
4549 PURPOSE : Sends the synchronisation result to RR.
4550
4551 */
4552
4553 GLOBAL void ma_bsic_cnf (T_MPH_BSIC_CNF* mph_bsic_cnf)
4554 {
4555 PSENDX (RR, mph_bsic_cnf);
4556 }
4557
4558 /*
4559 +--------------------------------------------------------------------+
4560 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4561 | STATE : code ROUTINE : ma_new_scell_req |
4562 +--------------------------------------------------------------------+
4563
4564 PURPOSE : Sends a new scell request to layer 1.
4565
4566 */
4567
4568 GLOBAL void ma_new_scell_req(T_MPHC_NEW_SCELL_REQ *new_scell)
4569 {
4570 GET_INSTANCE_DATA;
4571 alr_data->bsic = new_scell->tsc;
4572 PSENDX(L1, new_scell);
4573 }
4574
4575 /*
4576 +--------------------------------------------------------------------+
4577 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
4578 | STATE : code ROUTINE : ma_mphc_init_l1_cnf |
4579 +--------------------------------------------------------------------+
4580
4581 PURPOSE : Process the primitive MPHC_INIT_L1_CON.
4582
4583 */
4584
4585 GLOBAL void ma_mphc_init_l1_cnf (T_MPHC_INIT_L1_CON *init_l1_cnf)
4586 {
4587 GET_INSTANCE_DATA;
4588
4589 switch (GET_STATE (STATE_CS))
4590 {
4591 case CS_INIT_ACTIVE:
4592 SET_STATE (STATE_CS, CS_INIT_DONE);
4593 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
4594 compare_l1_frequency_band_with_ffs (init_l1_cnf);
4595 #endif
4596 ma_cs_rxlev_req ();
4597 break;
4598 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
4599 default :
4600 TRACE_EVENT_P1 ("MPHC_INIT_L1_CON received in the wrong CS state %d", GET_STATE (STATE_CS));
4601 break;
4602 #else
4603 case CS_INIT_SYNC:
4604 SET_STATE (STATE_CS, CS_INIT_DONE);
4605 cs_bsic_req (NULL);
4606 #endif
4607 }
4608 PFREE (init_l1_cnf);
4609 }
4610
4611 /*
4612 +--------------------------------------------------------------------+
4613 | PROJECT : GSM-PS (6302) MODULE : ALR_MAIN |
4614 | STATE : code ROUTINE : ma_mphc_stop_dedi_con |
4615 +--------------------------------------------------------------------+
4616
4617 PURPOSE : Process the primitive MPHC_STOP_DEDICATED_CON.
4618
4619 */
4620
4621 GLOBAL void ma_mphc_stop_dedi_con (T_MPHC_STOP_DEDICATED_CON *stop_cnf)
4622 {
4623 #ifdef GPRS
4624 GET_INSTANCE_DATA;
4625 #endif
4626 PFREE (stop_cnf);
4627
4628 #ifdef GPRS
4629 if(alr_data->dedi_data.act_mode EQ MODE_PDCH_ASSIGN)
4630 {
4631 /*
4632 * Notify RR about the actions performed due to PDCH Assignment.
4633 * Note that MPH_DEDICATED_CNF is misleading as L1 is in Idle Mode now.
4634 */
4635 ma_dedi_cnf (DEDI_RES_OK);
4636 trc_state_transition(0, MA_IDLE);
4637 SET_STATE(STATE_MA, MA_IDLE); /* allow PTM with next MPH_IDLE_REQ(PTM) */
4638 return;
4639 }
4640 #endif
4641 {
4642 PALLOC(mph_dedi_cnf, MPH_STOP_DEDICATED_CNF);
4643 PSENDX ( RR, mph_dedi_cnf );
4644 }
4645 }
4646
4647 /*
4648 +--------------------------------------------------------------------+
4649 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4650 | STATE : code ROUTINE : convert_arfcn_to_l1 |
4651 +--------------------------------------------------------------------+
4652
4653 PURPOSE : Convert_arfcn_to_l1 converts the arfcn given by the upper
4654 layer (ETSI GSM spec.) to the internal format of layer 1.
4655
4656 Frequency Band config. ETSI GSM spec. coding used in L1
4657 GSM 900 STD_900 1-124 1-124
4658 E-GSM STD_EGSM 1-124, 1-124,
4659 975-1023, 0 975-1023, 0
4660 PCS 1900 STD_1900 512-810 1024-1322
4661 DCS 1800 STD_1800 512-885 512-885
4662 GSM 900/DCS 1800 STD_DUAL 1-124, 1-124,
4663 512-885 512-885
4664 E-GSM/DCS 1800 STD_DUAL_EGSM 1-124, 1-124,
4665 975-1023,0 975-1023,0
4666 512-885 512-885
4667 GSM 850 STD_850 128-251 128-251
4668 GSM 850/PCS 1900 STD_DUAL_US 128-251, 128-251,
4669 512-810 1024-1322
4670 GSM 850/DCS 1800 STD_850_1800 128-251, 128-251,
4671 512-885 512-885
4672 GSM 900/PCS 1900 STD_900_1900 1-124, 1-124,
4673 512-810 1024-1322
4674 */
4675
4676 GLOBAL USHORT convert_arfcn_to_l1 (USHORT arfcn, UBYTE local_std)
4677 {
4678 #ifdef WIN32
4679 GET_INSTANCE_DATA;
4680 if (!alr_data->mb_testing)
4681 arfcn = arfcn&ARFCN_MASK;
4682 else
4683 {
4684 #endif
4685 if (local_std EQ 0)
4686 local_std = std;
4687 arfcn &= ARFCN_MASK;
4688 switch (local_std)
4689 {
4690 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
4691 case STD_1900:
4692 case STD_DUAL_US:
4693 case STD_900_1900:
4694 case STD_850_900_1900:
4695 if ((arfcn >= LOW_CHANNEL_1900) AND (arfcn <= HIGH_CHANNEL_1900))
4696 arfcn += LOW_CHANNEL_1900;
4697 break;
4698 #else
4699 case STD_DUAL:
4700 if (arfcn >= LOW_CHANNEL_1800)
4701 arfcn -= (LOW_CHANNEL_1800-125);
4702 break;
4703
4704 case STD_EGSM:
4705 case STD_DUAL_EGSM:
4706 if (arfcn >= LOW_CHANNEL_EGSM)
4707 arfcn -= (LOW_CHANNEL_EGSM-125);
4708 else if (arfcn >= LOW_CHANNEL_1800)
4709 arfcn -= (LOW_CHANNEL_1800-175);
4710 else if (arfcn EQ CHANNEL_0)
4711 arfcn = 174;
4712 break;
4713
4714 case STD_DUAL_US:
4715 if (arfcn >= LOW_CHANNEL_1900)
4716 arfcn -= (LOW_CHANNEL_1900-125);
4717 else
4718 arfcn -= (LOW_CHANNEL_850-1);
4719 break;
4720 #endif
4721 default:
4722 break;
4723 }
4724 #ifdef WIN32
4725 }
4726 #endif
4727 return arfcn;
4728 }
4729
4730 /*
4731 +--------------------------------------------------------------------+
4732 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4733 | STATE : code ROUTINE : convert_arfcn_to_g23 |
4734 +--------------------------------------------------------------------+
4735
4736 PURPOSE : Convert_arfcn_to_g23 converts the radio frequence given by
4737 layer 1 to the common format of the upper layer (ETSI GSM spec.).
4738
4739 Frequency Band config. ETSI GSM spec. coding used in L1
4740 GSM 900 STD_900 1-124 1-124
4741 E-GSM STD_EGSM 1-124, 1-124,
4742 975-1023, 0 975-1023, 0
4743 PCS 1900 STD_1900 512-810 1024-1322
4744 DCS 1800 STD_1800 512-885 512-885
4745 GSM 900/DCS 1800 STD_DUAL 1-124, 1-124,
4746 512-885 512-885
4747 E-GSM/DCS 1800 STD_DUAL_EGSM 1-124, 1-124,
4748 975-1023,0 975-1023,0
4749 512-885 512-885
4750 GSM 850 STD_850 128-251 128-251
4751 GSM 850/PCS 1900 STD_DUAL_US 128-251, 128-251,
4752 512-810 1024-1322
4753 GSM 850/DCS 1800 STD_850_1800 128-251, 128-251,
4754 512-885 512-885
4755 GSM 900/PCS 1900 STD_900_1900 1-124, 1-124,
4756 512-810 1024-1322
4757 */
4758
4759 GLOBAL USHORT convert_arfcn_to_g23 (USHORT arfcn, UBYTE local_std)
4760 {
4761 #ifdef WIN32
4762 GET_INSTANCE_DATA;
4763 if (!alr_data->mb_testing)
4764 arfcn = arfcn&ARFCN_MASK;
4765 else
4766 {
4767 #endif
4768 if (local_std EQ 0)
4769 local_std = std;
4770 arfcn &= ARFCN_MASK;
4771 switch (local_std)
4772 {
4773 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
4774 case STD_1900:
4775 case STD_DUAL_US:
4776 case STD_900_1900:
4777 case STD_850_900_1900:
4778 if (arfcn >= LOW_CHANNEL_1900_INTERNAL)
4779 arfcn -= LOW_CHANNEL_1900;
4780 break;
4781 #else
4782 case STD_DUAL:
4783 if (arfcn >=125)
4784 arfcn += (LOW_CHANNEL_1800-125);
4785 break;
4786
4787 case STD_EGSM:
4788 case STD_DUAL_EGSM:
4789 if (arfcn >= 175)
4790 arfcn += (LOW_CHANNEL_1800-175);
4791 else if (arfcn EQ 174)
4792 arfcn = CHANNEL_0;
4793 else if (arfcn >= 125)
4794 arfcn += (LOW_CHANNEL_EGSM-125);
4795 break;
4796
4797 case STD_DUAL_US:
4798 if (arfcn >= 125)
4799 arfcn += (LOW_CHANNEL_1900-125);
4800 else
4801 arfcn += (LOW_CHANNEL_850-1);
4802 /*lint -fallthrough*/
4803 case STD_850:
4804 case STD_1900:
4805 /* only for MPH_POWER_CNF and MPH_BSIC_CNF
4806 arfcn |= US_BIT;
4807 */
4808 break;
4809 #endif
4810 default:
4811 break;
4812 }
4813 #ifdef WIN32
4814 }
4815 #endif
4816 return arfcn;
4817 }
4818
4819 /*
4820 +--------------------------------------------------------------------+
4821 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4822 | STATE : code ROUTINE : ma_clean_dedi_sys_buffer |
4823 +--------------------------------------------------------------------+
4824
4825 PURPOSE : Cleans System Information Message from SACCH.
4826
4827 */
4828
4829 GLOBAL void ma_clean_dedi_sys_buffer (void)
4830 {
4831 GET_INSTANCE_DATA;
4832 memset (alr_data->ma_data.sys_info_5, 0, 18);
4833 memset (alr_data->ma_data.sys_info_5bis, 0, 18);
4834 memset (alr_data->ma_data.sys_info_5ter, 0, 18);
4835 memset (alr_data->ma_data.sys_info_6, 0, 18);
4836 }
4837
4838
4839 /*
4840 +--------------------------------------------------------------------+
4841 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4842 | STATE : code ROUTINE : ma_set_si_bitmap |
4843 +--------------------------------------------------------------------+
4844
4845 PURPOSE : Updates the si_bitmap.
4846
4847 */
4848
4849 LOCAL void ma_set_si_bitmap (UBYTE msg_t)
4850 {
4851 GET_INSTANCE_DATA;
4852 switch(msg_t)
4853 {
4854 case D_SYS_INFO_1:
4855 alr_data->cs_data.si_bitmap |= SI_1_READ;
4856 break;
4857 case D_SYS_INFO_2:
4858 alr_data->cs_data.si_bitmap |= SI_2_READ;
4859 break;
4860 case D_SYS_INFO_3:
4861 alr_data->cs_data.si_bitmap |= SI_3_READ;
4862 break;
4863 case D_SYS_INFO_4:
4864 alr_data->cs_data.si_bitmap |= SI_4_READ;
4865 break;
4866 case D_SYS_INFO_2BIS:
4867 alr_data->cs_data.si_bitmap |= SI_2BIS_READ;
4868 break;
4869 case D_SYS_INFO_2TER:
4870 alr_data->cs_data.si_bitmap |= SI_2TER_READ;
4871 break;
4872 default:
4873 break;
4874 }
4875 }
4876 /*
4877 +--------------------------------------------------------------------+
4878 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4879 | STATE : code ROUTINE : ma_fill_sys_buffer |
4880 +--------------------------------------------------------------------+
4881
4882 PURPOSE : Stores a System Information Message.
4883
4884 */
4885
4886 LOCAL void ma_fill_sys_buffer (T_MPHC_DATA_IND* data_ind, UBYTE msg_t)
4887 {
4888 GET_INSTANCE_DATA;
4889 switch (msg_t)
4890 {
4891 case D_SYS_INFO_1:
4892 memcpy (alr_data->ma_data.sys_info_1,
4893 &data_ind->l2_frame.content[1], 22);
4894 break;
4895 case D_SYS_INFO_2:
4896 memcpy (alr_data->ma_data.sys_info_2,
4897 &data_ind->l2_frame.content[1], 22);
4898 break;
4899 case D_SYS_INFO_2BIS:
4900 memcpy (alr_data->ma_data.sys_info_2bis,
4901 &data_ind->l2_frame.content[1], 22);
4902 break;
4903 case D_SYS_INFO_2TER:
4904 memcpy (alr_data->ma_data.sys_info_2ter,
4905 &data_ind->l2_frame.content[1], 22);
4906 break;
4907 #if defined (REL99) && defined (TI_PS_FF_EMR)
4908 case D_SYS_INFO_2QUATER:
4909 memcpy (alr_data->ma_data.sys_info_2quater,
4910 &data_ind->l2_frame.content[1], 22);
4911 break;
4912 #endif
4913 case D_SYS_INFO_3:
4914 memcpy (alr_data->ma_data.sys_info_3,
4915 &data_ind->l2_frame.content[1], 22);
4916 break;
4917 case D_SYS_INFO_4:
4918 memcpy (alr_data->ma_data.sys_info_4,
4919 &data_ind->l2_frame.content[1], 22);
4920 break;
4921 #ifdef GPRS
4922 case D_SYS_INFO_13:
4923 memcpy (alr_data->ma_data.sys_info_13,
4924 &data_ind->l2_frame.content[1], 22);
4925 break;
4926 #endif /* GPRS */
4927 default:
4928 break;
4929 }
4930 }
4931
4932 /*
4933 +--------------------------------------------------------------------+
4934 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
4935 | STATE : code ROUTINE : ma_compare_sys_buffer |
4936 +--------------------------------------------------------------------+
4937
4938 PURPOSE : Compares a System Information Message.
4939
4940 */
4941 LOCAL BOOL ma_compare_sys_buffer (T_MPHC_DATA_IND *mphc_data_ind,
4942 UBYTE msg_t)
4943 {
4944 GET_INSTANCE_DATA;
4945 switch (msg_t)
4946 {
4947 case D_SYS_INFO_1:
4948 return (!memcmp (alr_data->ma_data.sys_info_1,
4949 &mphc_data_ind->l2_frame.content[1], 22));
4950 /*break;*/
4951 case D_SYS_INFO_2:
4952 return (!memcmp (alr_data->ma_data.sys_info_2,
4953 &mphc_data_ind->l2_frame.content[1], 22));
4954 /*break;*/
4955 case D_SYS_INFO_2BIS:
4956 return (!memcmp (alr_data->ma_data.sys_info_2bis,
4957 &mphc_data_ind->l2_frame.content[1], 22));
4958 /*break;*/
4959 case D_SYS_INFO_2TER:
4960 return (!memcmp (alr_data->ma_data.sys_info_2ter,
4961 &mphc_data_ind->l2_frame.content[1], 18));/* Ignore si2ter_rest_octets changes */
4962 /*break;*/
4963 #if defined (REL99) && defined (TI_PS_FF_EMR)
4964 case D_SYS_INFO_2QUATER:
4965 return 0;
4966 /*break;*/
4967 #endif
4968 case D_SYS_INFO_3:
4969 return (!memcmp (alr_data->ma_data.sys_info_3,
4970 &mphc_data_ind->l2_frame.content[1], 22));
4971 /*break;*/
4972 case D_SYS_INFO_4:
4973 return (!memcmp (alr_data->ma_data.sys_info_4,
4974 &mphc_data_ind->l2_frame.content[1], 22));
4975 /*break;*/
4976 #ifdef GPRS
4977 case D_SYS_INFO_13:
4978 return (!memcmp (alr_data->ma_data.sys_info_13,
4979 &mphc_data_ind->l2_frame.content[1], 22));
4980 /*break;*/
4981 #endif /* GPRS */
4982 default:
4983 break;
4984 }
4985 return 0;
4986 }
4987
4988
4989 GLOBAL void sc_start_periodic (void)
4990 {
4991 GET_INSTANCE_DATA;
4992 #ifdef GPRS
4993 if(gprs_check_read_si13_only())
4994 #endif /* GPRS */
4995 {
4996 USHORT i;
4997 UBYTE k, si_bitmap = alr_data->cs_data.si_bitmap;
4998 PALLOC(scell_bcch_req, MPHC_SCELL_NBCCH_REQ);
4999
5000 /* 3GPP TS 05.02 Section 6.3.1.3: If only one of SI2bis and
5001 * SI2ter is there it will be sent when TC=5
5002 */
5003 if((si_bitmap&SI_2BIS_READ) EQ 0 AND
5004 (si_bitmap&SI_2TER_READ) NEQ 0)
5005 si_bitmap = (si_bitmap & ~(SI_2TER_READ)) | SI_2BIS_READ;
5006
5007 /* we want to read all SYSTEM INFO's broadcasted, TC=0..7 */
5008 for (i=0,k=0; i < 8; i++ )
5009 {
5010 if( (si_bitmap&(1<<i)) != 0)
5011 {
5012 scell_bcch_req->schedule_array[k].modulus = THIRTY_SECONDS_SCELL_BCCH;
5013 scell_bcch_req->schedule_array[k].relative_position = i;
5014 k++;
5015 }
5016 }
5017 scell_bcch_req->schedule_array_size = k;
5018 ma_scell_nbcch_req(scell_bcch_req);
5019 }
5020
5021 }
5022
5023 /*
5024 +--------------------------------------------------------------------+
5025 | PROJECT : GSM-PS (6103) MODULE : alr_MAIN |
5026 | STATE : code ROUTINE : ma_is_ptm |
5027 +--------------------------------------------------------------------+
5028
5029 PURPOSE : Returns True if the current state is MA_PTM,
5030 otherwise returns FALSE.
5031
5032 */
5033
5034
5035 #ifdef GPRS
5036 GLOBAL BOOL ma_is_ptm(void)
5037 {
5038 GET_INSTANCE_DATA;
5039 if(GET_STATE(STATE_MA) EQ MA_PTM)
5040 return TRUE;
5041 else
5042 return FALSE;
5043 }
5044 #endif /* GPRS */
5045
5046 /*
5047 +--------------------------------------------------------------------+
5048 | PROJECT : GSM-PS (6103) MODULE : alr_MAIN |
5049 | STATE : code ROUTINE : ma_nc_rxlev_sc_req |
5050 +--------------------------------------------------------------------+
5051
5052 PURPOSE : A new RXLEV value of the serving cell has been measured.
5053 Inform GPL in case it is necessary.
5054
5055 */
5056 #ifdef GPRS
5057
5058 GLOBAL void ma_nc_rxlev_sc_req (T_TB_RXLEV_SC_REQ *rxlev_sc_req)
5059 {
5060 GET_INSTANCE_DATA;
5061 if(GET_STATE (STATE_MA) EQ MA_IDLE AND
5062 gprs_alr_is_supported( ) EQ TRUE )
5063 {
5064 PSENDX (GPL, rxlev_sc_req);
5065 }
5066 else
5067 {
5068 PFREE (rxlev_sc_req);
5069 }
5070 }
5071
5072 #endif /* #ifdef GPRS */
5073
5074 /*
5075 *--------------------------------------------------------------------
5076 * helper functions for main process
5077 * these should all be LOCAL
5078 *--------------------------------------------------------------------
5079 */
5080
5081 /*
5082 +--------------------------------------------------------------------+
5083 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5084 | STATE : code ROUTINE : ma_clean_sys_buffer |
5085 +--------------------------------------------------------------------+
5086
5087 PURPOSE : Cleans System Information Message from BCCH.
5088
5089 */
5090
5091 GLOBAL void ma_clean_sys_buffer (USHORT si_mask)
5092 {
5093 GET_INSTANCE_DATA;
5094 if ( si_mask & IND_SI_1 ) memset (alr_data->ma_data.sys_info_1, 0, 22);
5095 if ( si_mask & IND_SI_2 ) memset (alr_data->ma_data.sys_info_2, 0, 22);
5096 if ( si_mask & IND_SI_2BIS ) memset (alr_data->ma_data.sys_info_2bis, 0, 22);
5097 if ( si_mask & IND_SI_3 ) memset (alr_data->ma_data.sys_info_3, 0, 22);
5098 if ( si_mask & IND_SI_4 ) memset (alr_data->ma_data.sys_info_4, 0, 22);
5099 if ( si_mask & IND_SI_2TER ) memset (alr_data->ma_data.sys_info_2ter, 0, 22);
5100 #if defined (REL99) && defined (TI_PS_FF_EMR)
5101 if ( si_mask & IND_SI_2QUATER ) memset (alr_data->ma_data.sys_info_2quater, 0, 22);
5102 #endif
5103 #ifdef GPRS
5104 if ( si_mask & IND_SI_13 ) memset (alr_data->ma_data.sys_info_13, 0, 22);
5105 #endif
5106 if ( si_mask & IND_SI_5 ) memset (alr_data->ma_data.sys_info_5, 0, 18);
5107 if ( si_mask & IND_SI_5BIS ) memset (alr_data->ma_data.sys_info_5bis, 0, 18);
5108 if ( si_mask & IND_SI_5TER ) memset (alr_data->ma_data.sys_info_5ter, 0, 18);
5109 if ( si_mask & IND_SI_6 ) memset (alr_data->ma_data.sys_info_6, 0, 18);
5110 }
5111
5112
5113
5114 /*
5115 +--------------------------------------------------------------------+
5116 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5117 | STATE : code ROUTINE : ma_fill_dedi_sys_buffer |
5118 +--------------------------------------------------------------------+
5119
5120 PURPOSE : Stores a System Information Message from SACCH.
5121
5122 */
5123 LOCAL void ma_fill_dedi_sys_buffer (T_MPHC_DATA_IND * mphc_data_ind,
5124 UBYTE msg_t)
5125 {
5126 GET_INSTANCE_DATA;
5127 switch (msg_t)
5128 {
5129 case D_SYS_INFO_5:
5130 memcpy (alr_data->ma_data.sys_info_5,
5131 &mphc_data_ind->l2_frame.content[5], 18);
5132 break;
5133 case D_SYS_INFO_5BIS:
5134 memcpy (alr_data->ma_data.sys_info_5bis,
5135 &mphc_data_ind->l2_frame.content[5], 18);
5136 break;
5137 case D_SYS_INFO_5TER:
5138 memcpy (alr_data->ma_data.sys_info_5ter,
5139 &mphc_data_ind->l2_frame.content[5], 18);
5140 break;
5141 case D_SYS_INFO_6:
5142 memcpy (alr_data->ma_data.sys_info_6,
5143 &mphc_data_ind->l2_frame.content[5], 18);
5144 break;
5145 }
5146 }
5147
5148 /*
5149 +--------------------------------------------------------------------+
5150 | PROJECT : GSM-PS (6103) MODULE : alr_MAIN |
5151 | STATE : code ROUTINE : ma_compare_dedi_sys_buffer |
5152 +--------------------------------------------------------------------+
5153
5154 PURPOSE : Compares a System Information Message on SACCH.
5155
5156 */
5157
5158 LOCAL BOOL ma_compare_dedi_sys_buffer (T_MPHC_DATA_IND * mphc_data_ind,
5159 UBYTE msg_t)
5160 {
5161 GET_INSTANCE_DATA;
5162 switch (msg_t)
5163 {
5164 case D_SYS_INFO_5:
5165 return (!memcmp (alr_data->ma_data.sys_info_5,
5166 &mphc_data_ind->l2_frame.content[5], 18));
5167 /*break;*/
5168 case D_SYS_INFO_5BIS:
5169 return (!memcmp (alr_data->ma_data.sys_info_5bis,
5170 &mphc_data_ind->l2_frame.content[5], 18));
5171 /*break;*/
5172 case D_SYS_INFO_5TER:
5173 return (!memcmp (alr_data->ma_data.sys_info_5ter,
5174 &mphc_data_ind->l2_frame.content[5], 18));
5175 /*break;*/
5176 case D_SYS_INFO_6:
5177 return (!memcmp (alr_data->ma_data.sys_info_6,
5178 &mphc_data_ind->l2_frame.content[5], 18));
5179 /*break;*/
5180 default:
5181 break;
5182 }
5183 return FALSE;
5184 }
5185
5186 /*
5187 +--------------------------------------------------------------------+
5188 | PROJECT : GSM-PS (6147) MODULE : RR_ATT |
5189 | STATE : code ROUTINE : tim_stop_sync_to_nw |
5190 +--------------------------------------------------------------------+
5191
5192 PURPOSE : Timeout of TIM_NW_SYNC_GUARD - Time to cancel Nw
5193 search as it is taking too long
5194
5195 */
5196 GLOBAL void tim_stop_sync_to_nw( void )
5197 {
5198 GET_INSTANCE_DATA;
5199 /* Change the CS State to CS_NW_SYNC_TIMEOUT only if NW Sync is active */
5200 if(alr_data->cs_data.sync_active)
5201 {
5202 SET_STATE(STATE_CS, CS_NW_SYNC_TIMEOUT);
5203 ma_cs_stop_network_sync_req();
5204 }
5205 }
5206
5207 #ifdef _TARGET_
5208 #ifndef FAX_AND_DATA
5209 /*
5210 * Dummy functions for RA (needed when building voice-only PS w/ F&D TI
5211 * layer 1 libs).
5212 */
5213 GLOBAL void dll_data_ul
5214 (
5215 USHORT *_ul_buffer_address,
5216 USHORT *_d_ra_conf,
5217 USHORT *_d_ra_act,
5218 USHORT *_d_ra_test,
5219 USHORT *_d_ra_statu,
5220 USHORT *_d_fax
5221 )
5222 {
5223 /* do nothing */
5224 }
5225
5226 GLOBAL void dll_data_dl
5227 (
5228 USHORT *_dl_buffer_address,
5229 USHORT *_d_ra_act,
5230 USHORT *_d_ra_statd
5231 )
5232 {
5233 /* do nothing */
5234 }
5235 #endif /* !_FAX_AND_DATA_ */
5236
5237 #ifndef GPRS
5238 /*
5239 * Dummy functions for GRR (needed when building non-GPRS PS w/ GPRS TI
5240 * layer 1 libs).
5241 */
5242 typedef void T_ul_poll_resp;
5243 typedef void T_ul_data;
5244 typedef void T_dl_struct;
5245 typedef UBYTE UWORD8;
5246 typedef ULONG UWORD32;
5247 #define WORD8 UBYTE
5248 #define UWORD16 USHORT
5249
5250 GLOBAL void maca_power_control ( UWORD8 assignment_id,
5251 BOOL crc_error,
5252 WORD8 bcch_level,
5253 UWORD16 *radio_freq,
5254 WORD8 *burst_level,
5255 UWORD8 *pch )
5256 {
5257 /* do nothing */
5258 }
5259
5260 GLOBAL void rlc_uplink ( UWORD8 assignment_id,
5261 UWORD8 tx_data_no,
5262 UWORD32 fn,
5263 UWORD8 timing_advance_value,
5264 T_ul_poll_resp * ul_poll_response,
5265 T_ul_data * ul_data,
5266 BOOL allocation_exhausted)
5267 {
5268 /* do nothing */
5269 }
5270
5271 GLOBAL void rlc_downlink ( UWORD8 assignment_id,
5272 UWORD32 fn,
5273 T_dl_struct *data_ptr,
5274 UWORD8 rlc_blocks_sent,
5275 UWORD8 last_poll_response)
5276 {
5277 /* do nothing */
5278 }
5279 #endif /* !GPRS */
5280 #endif /* _TARGET_ */
5281 #if defined (REL99) && defined (TI_PS_FF_EMR)
5282 /*
5283 +--------------------------------------------------------------------+
5284 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5285 | STATE : code ROUTINE : ma_mph_enhpara_update_req |
5286 +--------------------------------------------------------------------+
5287
5288 PURPOSE : Process the primitive MPH_ENHPARA_UPDATE_REQ.
5289
5290 */
5291
5292 GLOBAL void ma_mph_enhpara_update_req (T_MPH_ENHPARA_UPDATE_REQ* p_enh)
5293 {
5294 GET_INSTANCE_DATA;
5295 /*UBYTE i=0;*/
5296
5297 alr_data->nc_data.emr_data.rep_type = p_enh->rep_type;
5298 alr_data->nc_data.emr_data.enh_para = p_enh->enh_para;
5299 PFREE(p_enh);
5300 return;
5301 }
5302
5303 /*
5304 +--------------------------------------------------------------------+
5305 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5306 | STATE : code ROUTINE : ma_mph_mon_ctrl_req |
5307 +--------------------------------------------------------------------+
5308
5309 PURPOSE : Process the primitive MPH_MON_CTRL_REQ.
5310
5311 */
5312 GLOBAL void ma_mph_mon_ctrl_req(T_MPH_MON_CTRL_REQ* ctrl_req)
5313 {
5314 GET_INSTANCE_DATA;
5315 TRACE_EVENT ("ma_mph_mon_ctrl_req");
5316 /*Note: Request for monitoring SI-2quater will always be
5317 given for serving cell and when it is in stable IDLE state
5318 So, no need to check for MA_STATE here*/
5319 if ( (ctrl_req->action EQ START_MON_NBCCH ) AND
5320 (ctrl_req->si_to_read EQ UPDATE_SI2QUATER ) )
5321 {
5322 if(alr_data->ma_data.sys_info_2quater[1] EQ D_SYS_INFO_2QUATER)
5323 {
5324 ma_send_stored_SI2qtr(&alr_data->ma_data.sys_info_2quater[0]);
5325 memset (alr_data->ma_data.sys_info_2quater, 0, 22);
5326 }
5327 ma_scell_mon_si2quater_nbcch();
5328 }
5329 else if ( (ctrl_req->action EQ START_MON_EBCCH ) AND
5330 (ctrl_req->si_to_read EQ UPDATE_SI2QUATER ) )
5331 {
5332 if(alr_data->ma_data.sys_info_2quater[1] EQ D_SYS_INFO_2QUATER)
5333 {
5334 ma_send_stored_SI2qtr(&alr_data->ma_data.sys_info_2quater[0]);
5335 memset (alr_data->ma_data.sys_info_2quater, 0, 22);
5336 }
5337 ma_scell_mon_si2quater_ebcch();
5338 }
5339 else if((ctrl_req->si_to_read EQ UPDATE_SI2QUATER_AGAIN) AND
5340 (ctrl_req->action EQ START_MON_EBCCH ))
5341 {
5342 ma_scell_mon_si2quater_ebcch();
5343 }
5344 else if((ctrl_req->si_to_read EQ UPDATE_SI2QUATER_AGAIN) AND
5345 (ctrl_req->action EQ START_MON_NBCCH ))
5346 {
5347 ma_scell_mon_si2quater_nbcch();
5348 }
5349
5350 else if ( (ctrl_req->action EQ STOP_MON_BCCH)AND
5351 (ctrl_req->si_to_read EQ UPDATE_SI2QUATER ) )
5352 {
5353 if ( alr_data->nc_data.si2quater_status EQ SI2QUATER_ACQ_PENDING)
5354 {
5355 if(alr_data->nc_data.si2quater_pos EQ SI2QUATER_ON_EBCCH)
5356 {
5357 ma_stop_scell_bcch_req();
5358 }
5359 sc_start_periodic();
5360 }
5361 alr_data->nc_data.si2quater_status = SI2QUATER_ACQ_COMP;
5362 }
5363 else if((ctrl_req->action EQ STOP_MON_BCCH)AND
5364 (ctrl_req->si_to_read EQ UPDATE_SI2QUATER_AGAIN) )
5365 {
5366 if (alr_data->nc_data.si2quater_status EQ SI2QUATER_ACQ_PENDING)
5367 {
5368 if(alr_data->nc_data.si2quater_pos EQ SI2QUATER_ON_EBCCH)
5369 {
5370 ma_stop_scell_bcch_req();
5371 }
5372 sc_start_periodic();
5373 }
5374 alr_data->nc_data.si2quater_status = SI2QUATER_ACQ_WRONG_BAIND;
5375 }
5376
5377 #ifdef GPRS
5378 else
5379 {
5380 gprs_alr_mon_ctrl_req(ctrl_req);
5381 return;
5382 }
5383 #endif
5384
5385 #ifdef _SIMULATION_
5386 switch(alr_data->nc_data.si2quater_status) {
5387 case SI2QUATER_ACQ_PENDING:
5388 TRACE_EVENT ("Status of SI-2quater : SI2QUATER_ACQ_PENDING");
5389 break;
5390 case SI2QUATER_ACQ_FULL_BCCH:
5391 TRACE_EVENT ("Status of SI-2quater : SI2QUATER_ACQ_FULL_BCCH");
5392 break;
5393 case SI2QUATER_ACQ_COMP:
5394 TRACE_EVENT ("Status of SI-2quater : SI2QUATER_ACQ_COMP");
5395 break;
5396 case SI2QUATER_ACQ_WRONG_BAIND:
5397 TRACE_EVENT ("Status of SI-2quater : SI2QUATER_ACQ_WRONG_BAIND");
5398 break;
5399 default:
5400 TRACE_EVENT ("Status of SI-2quater : SI2QUATER_ABSENT");
5401 }
5402 #endif
5403 PFREE(ctrl_req);
5404 return;
5405 }
5406
5407 /*
5408 +--------------------------------------------------------------------+
5409 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5410 | STATE : code ROUTINE : ma_scell_mon_si2quater_ebcch |
5411 +--------------------------------------------------------------------+
5412
5413 PURPOSE : configure L1 for monitoring SI-2quater on EBCCH.
5414
5415 */
5416 GLOBAL void ma_scell_mon_si2quater_ebcch(void)
5417 {
5418 GET_INSTANCE_DATA;
5419 PALLOC(req, MPHC_SCELL_EBCCH_REQ);
5420 TRACE_EVENT ("ma_scell_mon_si2quater_ebcch");
5421 req->schedule_array_size = 1;
5422 req->schedule_array[0].relative_position = 5;
5423 req->schedule_array[0].modulus = 8;
5424 ma_scell_ebcch_req(req);
5425 alr_data->nc_data.si2quater_status = SI2QUATER_ACQ_PENDING;
5426 }
5427
5428 /*
5429 +--------------------------------------------------------------------+
5430 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5431 | STATE : code ROUTINE : ma_scell_mon_si2quater_nbcch |
5432 +--------------------------------------------------------------------+
5433
5434 PURPOSE : configure L1 for monitoring SI-2quater on NBCCH.
5435
5436 */
5437 GLOBAL void ma_scell_mon_si2quater_nbcch(void)
5438 {
5439 GET_INSTANCE_DATA;
5440 PALLOC(req, MPHC_SCELL_NBCCH_REQ);
5441 TRACE_EVENT ("ma_scell_mon_si2quater_nbcch");
5442 /*on N-BCCH, SI-2quater can be received on either
5443 TC = 5 or 4 depending on scheduling of SI-2bis/ter */
5444 req->schedule_array_size = 2;
5445 req->schedule_array[0].relative_position = 5;
5446 req->schedule_array[0].modulus = 8;
5447 req->schedule_array[1].relative_position = 4;
5448 req->schedule_array[1].modulus = 8;
5449 ma_scell_nbcch_req(req);
5450 alr_data->nc_data.si2quater_status = SI2QUATER_ACQ_PENDING;
5451 return;
5452 }
5453
5454 /* BCCH MAPPING
5455 ====================================================================
5456 System Information Message | Sent when TC = | Allocation
5457 ====================================================================
5458 Type 1 0 BCCH Norm
5459 -----------------------------------------------------------------
5460 Type 2 1 BCCH Norm
5461 -----------------------------------------------------------------
5462 Type 2 bis 5 BCCH Norm
5463 -----------------------------------------------------------------
5464 Type 2 ter 5 or 4 BCCH Norm
5465 -----------------------------------------------------------------
5466 Type 2 quater 5 BCCH Norm
5467 or
5468 4or5 BCCH Ext
5469 -----------------------------------------------------------------
5470 Type 3 2 and 6 BCCH Norm
5471 -----------------------------------------------------------------
5472 Type 4 3 and 7 BCCH Norm
5473 -----------------------------------------------------------------
5474 Type 7 7 BCCH Ext
5475 -----------------------------------------------------------------
5476 Type 8 3 BCCH Ext
5477 -----------------------------------------------------------------
5478 Type 9 4 BCCH Norm
5479 -----------------------------------------------------------------
5480 Type 13 4 BCCH Norm
5481 or
5482 0 BCCH Ext
5483 -----------------------------------------------------------------
5484 Type 16 6 BCCH Ext
5485 -----------------------------------------------------------------
5486 Type 17 2 BCCH Ext
5487 -----------------------------------------------------------------
5488 */
5489
5490 /*
5491 +--------------------------------------------------------------------+
5492 | PROJECT : GSM-PS (6103) MODULE : ALR_MAIN |
5493 | STATE : code ROUTINE : ma_send_stored_SI2qtr |
5494 +--------------------------------------------------------------------+
5495
5496 PURPOSE : Cut pseudo length and send the stored SI2qtr data to RR.
5497
5498 */
5499 GLOBAL void ma_send_stored_SI2qtr(UBYTE* si_2quater)
5500 {
5501 GET_INSTANCE_DATA;
5502 USHORT len_in_bits = 22 * BITS_PER_BYTE;
5503 PALLOC_SDU (data_out, MPH_UNITDATA_IND, len_in_bits);
5504
5505 /* No IE and Pseudo Length */
5506 data_out->sdu.l_buf = (22 ) * BITS_PER_BYTE;
5507 /* Pseudo Length */
5508 data_out->sdu.o_buf = 0;
5509 /* No IE */
5510 /*lint -e{419} (Warning -- Apparent data overrun) */
5511 memcpy (data_out->sdu.buf, &si_2quater[0], 22 );
5512 data_out->arfcn = alr_data->serving_cell;
5513 TRACE_EVENT("SI2qtr sent from the function ma_send_stored_SI2qtr");
5514 PSENDX (RR, data_out);
5515 }
5516 #endif
5517
5518 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT
5519 LOCAL void compare_l1_frequency_band_with_ffs (T_MPHC_INIT_L1_CON *init_l1_cnf)
5520 {
5521 GET_INSTANCE_DATA;
5522 int i;
5523 U16 freq_band ;
5524
5525 PALLOC(mph_init_rr_ind, MPH_INIT_RR_IND);
5526
5527 for (i=0; i<NB_MAX_GSM_BANDS; i++)
5528 {
5529 if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_PGSM900)
5530 {
5531 freq_band |= BAND_GSM_900;
5532 mph_init_rr_ind->pclass_900 = init_l1_cnf->multiband_power_class[i].power_class;
5533 }
5534 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_GSM850)
5535 {
5536 freq_band |= BAND_GSM_850;
5537 mph_init_rr_ind->pclass_850 = init_l1_cnf->multiband_power_class[i].power_class;
5538 }
5539 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_PCS1900)
5540 {
5541 freq_band |= BAND_PCS_1900;
5542 mph_init_rr_ind->pclass_1900 = init_l1_cnf->multiband_power_class[i].power_class;
5543 }
5544 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_DCS1800)
5545 {
5546 freq_band |= BAND_DCS_1800;
5547 mph_init_rr_ind->pclass_1800 = init_l1_cnf->multiband_power_class[i].power_class;
5548 }
5549 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_GSM480)
5550 {
5551 freq_band |= BAND_GSM_480;
5552 }
5553 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_GSM450)
5554 {
5555 freq_band |= BAND_GSM_450;
5556 }
5557 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_EGSM900)
5558 {
5559 freq_band |= BAND_E_GSM;
5560 mph_init_rr_ind->pclass_900 = init_l1_cnf->multiband_power_class[i].power_class;
5561 }
5562 else if (init_l1_cnf->multiband_power_class[i].radio_band == RADIO_BAND_RGSM900)
5563 {
5564 freq_band |= BAND_R_GSM;
5565 }
5566 }
5567
5568 mph_init_rr_ind->freq_bands = freq_band;
5569 PSENDX (RR, mph_init_rr_ind);
5570 /*
5571 if (freq_band NEQ alr_data->cs_data.freq_bands)
5572 {
5573 TRACE_EVENT_P2 ("FFS data %x, doen't match L1 compilation flag %x", alr_data->cs_data.freq_bands, freq_band);
5574 TRACE_ERROR ("FFS data doesn't match L1 compilation flag");
5575 TRACE_ASSERT (freq_band NEQ alr_data->cs_data.freq_bands);
5576 }*/
5577 }
5578 #endif
5579
5580 #endif /* ALR_MAIN_C */