FreeCalypso > hg > fc-magnetite
comparison src/g23m-gprs/grlc/grlc_gffp.c @ 183:219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 13 Oct 2016 04:24:13 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 182:f02d0a0e1849 | 183:219afcfc6250 |
|---|---|
| 1 /* | |
| 2 +----------------------------------------------------------------------------- | |
| 3 | Project : GPRS (8441) | |
| 4 | Modul : GRLC | |
| 5 +----------------------------------------------------------------------------- | |
| 6 | Copyright 2002 Texas Instruments Berlin, AG | |
| 7 | All rights reserved. | |
| 8 | | |
| 9 | This file is confidential and a trade secret of Texas | |
| 10 | Instruments Berlin, AG | |
| 11 | The receipt of or possession of this file does not convey | |
| 12 | any rights to reproduce or disclose its contents or to | |
| 13 | manufacture, use, or sell anything it may describe, in | |
| 14 | whole, or in part, without the specific written consent of | |
| 15 | Texas Instruments Berlin, AG. | |
| 16 +----------------------------------------------------------------------------- | |
| 17 | Purpose : This module implements primitive handler functions for service | |
| 18 | GFF of entity GRLC. | |
| 19 +----------------------------------------------------------------------------- | |
| 20 */ | |
| 21 | |
| 22 #ifndef GRLC_GFFP_C | |
| 23 #define GRLC_GFFP_C | |
| 24 #endif | |
| 25 | |
| 26 #define ENTITY_GRLC | |
| 27 | |
| 28 /*==== INCLUDES =============================================================*/ | |
| 29 | |
| 30 #include <stdio.h> | |
| 31 #include "typedefs.h" /* to get Condat data types */ | |
| 32 #include "vsi.h" /* to get a lot of macros */ | |
| 33 #include "macdef.h" | |
| 34 #include "gprs.h" | |
| 35 #include "gsm.h" /* to get a lot of macros */ | |
| 36 #include "ccdapi.h" /* to get CCD API */ | |
| 37 #include "prim.h" /* to get the definitions of used SAP and directions */ | |
| 38 #include "message.h" | |
| 39 #include "grlc.h" /* to get the global entity definitions */ | |
| 40 #include "grlc_gfff.h" | |
| 41 #include "grlc_f.h" | |
| 42 #include <string.h> | |
| 43 #include "grlc_rus.h" | |
| 44 #include "grlc_rds.h" | |
| 45 #include "grlc_func.h" | |
| 46 #include "grlc_tpcs.h" | |
| 47 #include "grlc_meass.h" | |
| 48 #include "cl_rlcmac.h" | |
| 49 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH | |
| 50 #include "grlc_tms.h" | |
| 51 #endif | |
| 52 | |
| 53 /*==== CONST ================================================================*/ | |
| 54 | |
| 55 #define BITS_PER_RADIO_BLOCK 456 | |
| 56 | |
| 57 /*==== LOCAL VARS ===========================================================*/ | |
| 58 | |
| 59 /*==== PRIVATE FUNCTIONS ====================================================*/ | |
| 60 | |
| 61 /*==== PUBLIC FUNCTIONS =====================================================*/ | |
| 62 /* | |
| 63 +------------------------------------------------------------------------------ | |
| 64 | Function : gff_mac_pwr_ctrl_ind | |
| 65 +------------------------------------------------------------------------------ | |
| 66 | Description : Handles the primitive MAC_PWR_CTRL_IND | |
| 67 | | |
| 68 | Parameters : *mac_pwr_ctrl_ind - Ptr to primitive payload | |
| 69 | | |
| 70 +------------------------------------------------------------------------------ | |
| 71 */ | |
| 72 GLOBAL void gff_mac_pwr_ctrl_ind ( T_MAC_PWR_CTRL_IND * mac_pwr_ctrl_ind ) | |
| 73 { | |
| 74 TRACE_FUNCTION( "gff_mac_pwr_ctrl_ind" ); | |
| 75 | |
| 76 #if defined _TARGET_ && !defined (NTRACE) | |
| 77 | |
| 78 if( grlc_data->tpc.n_tpc_trace & M_TPC_TRACE_FUNCTION ) | |
| 79 { | |
| 80 T_L1TEST_CALL_MPHP_POWER_CONTROL l1test_call; | |
| 81 | |
| 82 UBYTE i; | |
| 83 | |
| 84 l1test_call.assignment_id = ( U8 )mac_pwr_ctrl_ind->assignment_id; | |
| 85 l1test_call.crc_error = mac_pwr_ctrl_ind->crc_error; | |
| 86 l1test_call.bcch_level = ( S8 )mac_pwr_ctrl_ind->bcch_level; | |
| 87 | |
| 88 for( i = 0; i < L1TEST_BURST_PER_BLOCK; i++ ) | |
| 89 { | |
| 90 l1test_call.burst_level[i] = ( S8 )mac_pwr_ctrl_ind->burst_level[i]; | |
| 91 l1test_call.radio_freq [i] = mac_pwr_ctrl_ind->radio_freq[i]; | |
| 92 } | |
| 93 | |
| 94 TRACE_MEMORY_PRIM ( hCommL1, hCommGRLC, L1TEST_CALL_MPHP_POWER_CONTROL, | |
| 95 &l1test_call, sizeof( T_L1TEST_CALL_MPHP_POWER_CONTROL ) ); | |
| 96 } | |
| 97 | |
| 98 #endif /* #if defined _TARGET_ && !defined (NTRACE) */ | |
| 99 | |
| 100 gff_clip_rxlev( &mac_pwr_ctrl_ind->bcch_level, | |
| 101 &mac_pwr_ctrl_ind->bcch_level, 1 ); | |
| 102 | |
| 103 gff_clip_rxlev( mac_pwr_ctrl_ind->burst_level, | |
| 104 mac_pwr_ctrl_ind->burst_level, | |
| 105 MAC_BURST_PER_BLOCK ); | |
| 106 | |
| 107 sig_gff_tpc_pwr_ctrl_ind( mac_pwr_ctrl_ind ); | |
| 108 | |
| 109 #if defined _TARGET_ && !defined (NTRACE) | |
| 110 | |
| 111 if( grlc_data->tpc.n_tpc_trace & M_TPC_TRACE_FUNCTION ) | |
| 112 { | |
| 113 T_L1TEST_RETURN_MPHP_POWER_CONTROL l1test_return; | |
| 114 | |
| 115 tpc_get_pch( &l1test_return.pch[0] ); | |
| 116 | |
| 117 TRACE_MEMORY_PRIM ( hCommGRLC, hCommL1, L1TEST_RETURN_MPHP_POWER_CONTROL, | |
| 118 &l1test_return, sizeof( T_L1TEST_RETURN_MPHP_POWER_CONTROL ) ); | |
| 119 } | |
| 120 | |
| 121 #endif /* #if defined _TARGET_ && !defined (NTRACE) */ | |
| 122 | |
| 123 } /* gff_mac_pwr_ctrl_ind() */ | |
| 124 | |
| 125 /* | |
| 126 +------------------------------------------------------------------------------ | |
| 127 | Function : gff_mac_data_ind | |
| 128 +------------------------------------------------------------------------------ | |
| 129 | Description : Handles the primitive MAC_DATA_IND | |
| 130 | | |
| 131 | Parameters : *mac_data_ind - Ptr to primitive payload | |
| 132 | | |
| 133 +------------------------------------------------------------------------------ | |
| 134 */ | |
| 135 GLOBAL void gff_mac_data_ind ( T_MAC_DATA_IND * mac_data_ind ) | |
| 136 { | |
| 137 UBYTE i; | |
| 138 USHORT rx_no; | |
| 139 | |
| 140 TRACE_FUNCTION( "mac_data_ind" ); | |
| 141 | |
| 142 rx_no = grlc_data->func.dl_blocks.data_ptr.rx_no; | |
| 143 | |
| 144 #ifdef _SIMULATION_ | |
| 145 { | |
| 146 /* | |
| 147 * copy received primitive to grlc_data->func.mac_data_ind | |
| 148 */ | |
| 149 | |
| 150 TRACE_EVENT_P5("mac_data_ind fn=%ld tn= %d -> mask=%x UL_MASK=%x DL_MASK=%x" | |
| 151 ,mac_data_ind->fn | |
| 152 ,mac_data_ind->dl_data.tn | |
| 153 ,0x80>>mac_data_ind->dl_data.tn | |
| 154 ,grlc_data->ul_tn_mask | |
| 155 ,grlc_data->dl_tn_mask); | |
| 156 | |
| 157 grlc_data->dl_fn = mac_data_ind->fn; | |
| 158 grlc_data->ul_fn = mac_data_ind->fn; | |
| 159 memcpy ( | |
| 160 &(grlc_data->func.mac_data_ind), | |
| 161 mac_data_ind, | |
| 162 sizeof(T_MAC_DATA_IND)); | |
| 163 PFREE(mac_data_ind); | |
| 164 mac_data_ind = &(grlc_data->func.mac_data_ind); | |
| 165 rx_no = 1; | |
| 166 } | |
| 167 #endif | |
| 168 | |
| 169 switch( GET_STATE( GFF ) ) | |
| 170 { | |
| 171 case GFF_ACTIVE: | |
| 172 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH | |
| 173 case GFF_TWO_PHASE: | |
| 174 #endif | |
| 175 { | |
| 176 T_BER_IND ber_ind; | |
| 177 | |
| 178 ber_ind.num_dl_blck = 0; | |
| 179 | |
| 180 for(i=0; i< rx_no; i++) | |
| 181 { | |
| 182 | |
| 183 | |
| 184 #ifdef _TARGET_ | |
| 185 { | |
| 186 /* | |
| 187 * copy next primitive to grlc_data->func.mac_data_ind | |
| 188 */ | |
| 189 grlc_data->func.mac_data_ind.fn = grlc_data->func.dl_blocks.fn; | |
| 190 grlc_data->func.mac_data_ind.rx_no = grlc_data->func.dl_blocks.data_ptr.rx_no; | |
| 191 grlc_data->func.mac_data_ind.dl_data = grlc_data->func.dl_blocks.data_ptr.dl_data[i]; | |
| 192 mac_data_ind = &(grlc_data->func.mac_data_ind); | |
| 193 } | |
| 194 | |
| 195 TRACE_MEMORY_PRIM ( hCommL1, hCommGRLC, MAC_DATA_IND, | |
| 196 mac_data_ind, sizeof( T_MAC_DATA_IND ) ); | |
| 197 | |
| 198 #endif /* #ifdef _TARGET_ */ | |
| 199 | |
| 200 /* | |
| 201 * In Test mode B,if there is CRC error on the payload data the MS will, | |
| 202 * where required by the USF, transmit the decoded payload data. The block | |
| 203 * transmitted will be a valid uplink block format. | |
| 204 */ | |
| 205 | |
| 206 if( ( (mac_data_ind->dl_data.block_status & 0x0100) EQ 0x0000) OR ( (grlc_data->testmode.mode EQ CGRLC_LOOP) ) ) | |
| 207 { | |
| 208 /* | |
| 209 * Only successfully decoded blocks shall be considered | |
| 210 */ | |
| 211 | |
| 212 if( gff_analyse_dl_data( mac_data_ind->fn, &( mac_data_ind->dl_data ) ) ) | |
| 213 { | |
| 214 /* | |
| 215 * Only blocks intended for that MS shall be considered | |
| 216 */ | |
| 217 | |
| 218 if( ber_ind.num_dl_blck < MAC_MAX_DL_DATA_BLCKS ) | |
| 219 { | |
| 220 ber_ind.be_info[ber_ind.num_dl_blck].total = BITS_PER_RADIO_BLOCK; | |
| 221 | |
| 222 if( ( mac_data_ind->dl_data.block_status & 0x000F ) EQ 0x0006 ) | |
| 223 { | |
| 224 /* | |
| 225 * If CS4 is used, the MS is allowed to report RXQUAL = 7, | |
| 226 * so just set the BER to 100% | |
| 227 */ | |
| 228 ber_ind.be_info[ber_ind.num_dl_blck].fault = | |
| 229 BITS_PER_RADIO_BLOCK; | |
| 230 } | |
| 231 else | |
| 232 { | |
| 233 ber_ind.be_info[ber_ind.num_dl_blck].fault = | |
| 234 grlc_data->func.mac_data_ind.dl_data.d_nerr; | |
| 235 } | |
| 236 | |
| 237 ber_ind.num_dl_blck++; | |
| 238 } | |
| 239 else | |
| 240 { | |
| 241 TRACE_ERROR( "be_info overflow in gff_mac_data_ind" ); | |
| 242 } | |
| 243 } | |
| 244 } | |
| 245 else | |
| 246 { | |
| 247 TRACE_ERROR( "MAC_DATA_IND with bad CRC" ); | |
| 248 | |
| 249 TRACE_BINDUMP | |
| 250 ( hCommGRLC, TC_USER5, | |
| 251 cl_rlcmac_get_msg_name( D_MSG_TYPE_CRC_ERROR_c, RLC_MAC_ROUTE_DL ), | |
| 252 mac_data_ind->dl_data.dl_block, MAX_L2_FRAME_SIZE ); /*lint !e569*/ | |
| 253 | |
| 254 /* grlc_data->nr_of_crc_errors++; */ | |
| 255 } | |
| 256 } | |
| 257 | |
| 258 if( ber_ind.num_dl_blck NEQ 0 ) | |
| 259 { | |
| 260 meas_sq_update( &ber_ind ); | |
| 261 } | |
| 262 } | |
| 263 break; | |
| 264 default: | |
| 265 /*TRACE_ERROR( "MAC_DATA_IND unexpected" );*/ | |
| 266 break; | |
| 267 } | |
| 268 | |
| 269 /*call control of asyn part TARGET DEBUGGING*/ | |
| 270 #if defined (_TARGET_) | |
| 271 grlc_data->dl_cnt_asyn = grlc_data->dl_cnt_syn; | |
| 272 #endif /* defined (_TARGET_) */ | |
| 273 | |
| 274 } /* gff_mac_data_ind() */ | |
| 275 | |
| 276 | |
| 277 | |
| 278 /* | |
| 279 +------------------------------------------------------------------------------ | |
| 280 | Function : gff_mac_ready_ind | |
| 281 +------------------------------------------------------------------------------ | |
| 282 | Description : Handles the primitive MAC_READY_IND | |
| 283 | | |
| 284 | Parameters : *mac_ready_ind - Ptr to primitive payload | |
| 285 | | |
| 286 +------------------------------------------------------------------------------ | |
| 287 */ | |
| 288 GLOBAL void gff_mac_ready_ind ( T_MAC_READY_IND * mac_ready_ind ) | |
| 289 { | |
| 290 TRACE_FUNCTION( "mac_ready_ind" ); | |
| 291 | |
| 292 /* | |
| 293 * calculate the frame number from downlink call | |
| 294 */ | |
| 295 #ifdef _TARGET_ | |
| 296 { | |
| 297 ULONG current_dl_fn; | |
| 298 ULONG last_dl_fn; | |
| 299 ULONG last_ul_fn; | |
| 300 ULONG current_ul_fn; | |
| 301 BOOL trace_dl_gap = TRUE; | |
| 302 | |
| 303 current_dl_fn = grlc_data->func.mac_ready_ind.fn; | |
| 304 last_dl_fn = grlc_data->last_dl_fn; | |
| 305 last_ul_fn = grlc_data->last_ul_fn; | |
| 306 | |
| 307 grlc_data->func.mac_ready_ind.fn = grlc_data->ul_fn ; | |
| 308 current_ul_fn = grlc_data->ul_fn; | |
| 309 | |
| 310 if(grlc_data->func.mac_ready_ind.last_poll_resp) | |
| 311 { | |
| 312 TRACE_EVENT_P5("POLL NOT SENT BY LAYER 1 fn=%ld last_poll_resp=0x%x np_fn=%ld,bs=%d,ind=%d" | |
| 313 ,grlc_data->func.mac_ready_ind.fn | |
| 314 ,grlc_data->func.mac_ready_ind.last_poll_resp | |
| 315 ,grlc_data->next_poll_fn | |
| 316 ,grlc_data->ul_poll_resp[0].block_status | |
| 317 ,grlc_data->ul_poll_pos_index); | |
| 318 } | |
| 319 | |
| 320 /* handle gaps*/ | |
| 321 if ((grlc_data->next_poll_fn EQ 2) OR (grlc_data->next_poll_fn EQ 1)) | |
| 322 { /* last poll is sent*/ | |
| 323 grlc_data->func.mac_ready_ind.last_poll_resp = 0; /* no ul gap for poll */ | |
| 324 } | |
| 325 else if( grlc_data->ul_call_errors AND | |
| 326 (grlc_data->ul_fn_errors[grlc_data->ul_call_errors-1] EQ grlc_data->next_poll_fn )) | |
| 327 { | |
| 328 trace_dl_gap = FALSE; | |
| 329 TRACE_EVENT_P7("CALL ERR:c_dl_fn=%ld l_dl_fn=%ld c_ul_fn=%ld l_ul_fn=%ld callerr=%d err_fn=%ld lp_fn=%ld", | |
| 330 current_dl_fn, | |
| 331 last_dl_fn, | |
| 332 current_ul_fn, | |
| 333 last_ul_fn, | |
| 334 grlc_data->ul_call_errors, | |
| 335 grlc_data->ul_fn_errors[grlc_data->ul_call_errors-1], | |
| 336 grlc_data->next_poll_fn); | |
| 337 | |
| 338 grlc_data->func.mac_ready_ind.last_poll_resp = 0xFF; | |
| 339 grlc_data->next_poll_fn =2 ; | |
| 340 } | |
| 341 else if(current_ul_fn >= grlc_data->next_poll_fn) | |
| 342 { | |
| 343 trace_dl_gap = FALSE; | |
| 344 TRACE_EVENT_P6("2UL GAP NO POLL:c_dl_fn=%ld l_dl_fn=%ld c_ul_fn=%ld l_ul_fn=%ld lpr=%d lp_fn=%ld", | |
| 345 current_dl_fn, | |
| 346 last_dl_fn, | |
| 347 current_ul_fn, | |
| 348 last_ul_fn, | |
| 349 grlc_data->func.mac_ready_ind.last_poll_resp, | |
| 350 grlc_data->next_poll_fn); | |
| 351 | |
| 352 grlc_data->func.mac_ready_ind.last_poll_resp = 0xFF; | |
| 353 grlc_data->next_poll_fn =2 ; | |
| 354 } | |
| 355 else if((grlc_data->next_poll_fn > current_ul_fn) AND (current_ul_fn < 52)) /*fn overflow*/ | |
| 356 { | |
| 357 trace_dl_gap = FALSE; | |
| 358 TRACE_EVENT_P6("3UL GAP NO POLL:c_dl_fn=%ld l_dl_fn=%ld c_ul_fn=%ld l_ul_fn=%ld lpr=%d lp_fn=%ld", | |
| 359 current_dl_fn, | |
| 360 last_dl_fn, | |
| 361 current_ul_fn, | |
| 362 last_ul_fn, | |
| 363 grlc_data->func.mac_ready_ind.last_poll_resp, | |
| 364 grlc_data->next_poll_fn); | |
| 365 grlc_data->func.mac_ready_ind.last_poll_resp = 0xFF; | |
| 366 grlc_data->next_poll_fn =2 ; | |
| 367 } | |
| 368 | |
| 369 if( trace_dl_gap AND | |
| 370 ( ( current_dl_fn - last_dl_fn ) > 5 ) AND | |
| 371 ( grlc_data->dl_cnt_syn OR grlc_data->dl_fn_store[0] OR grlc_data->dl_fn_store[1] ) ) | |
| 372 { | |
| 373 TRACE_EVENT_P2( "DL GAP: c_dl_fn=%ld l_dl_fn=%ld", current_dl_fn, last_dl_fn ); | |
| 374 } | |
| 375 } | |
| 376 #endif /* _TARGET_ */ | |
| 377 | |
| 378 #ifdef _SIMULATION_ | |
| 379 { | |
| 380 /* | |
| 381 * copy received primitive to grlc_data->func.mac_ready_ind | |
| 382 */ | |
| 383 grlc_data->ul_fn = mac_ready_ind->fn; | |
| 384 memcpy ( | |
| 385 &(grlc_data->func.mac_ready_ind), | |
| 386 mac_ready_ind, | |
| 387 sizeof(T_MAC_READY_IND)); | |
| 388 PFREE(mac_ready_ind); | |
| 389 } | |
| 390 #endif | |
| 391 | |
| 392 | |
| 393 mac_ready_ind = &(grlc_data->func.mac_ready_ind); | |
| 394 | |
| 395 #ifdef _TARGET_ | |
| 396 | |
| 397 TRACE_MEMORY_PRIM ( hCommL1, hCommGRLC, MAC_READY_IND, | |
| 398 mac_ready_ind, sizeof( T_MAC_READY_IND ) ); | |
| 399 | |
| 400 #endif /* #ifdef _TARGET_ */ | |
| 401 | |
| 402 /* | |
| 403 * handle ta value | |
| 404 */ | |
| 405 gff_handle_continious_ta(); | |
| 406 | |
| 407 | |
| 408 switch( GET_STATE(GFF) ) | |
| 409 { | |
| 410 case GFF_ACTIVE: | |
| 411 if(grlc_data->tfi_change NEQ TFI_CHANGE_NULL) | |
| 412 { | |
| 413 grlc_activate_tfi(mac_ready_ind->fn); | |
| 414 } | |
| 415 grlc_data->ul_poll_pos_index = 0; | |
| 416 if(grlc_data->gff.rlc_status EQ RLC_STATUS_BOTH) | |
| 417 { | |
| 418 sig_gff_ru_mac_ready_ind(mac_ready_ind); | |
| 419 sig_gff_rd_mac_ready_ind(mac_ready_ind); | |
| 420 } | |
| 421 else if(grlc_data->gff.rlc_status EQ RLC_STATUS_UL) | |
| 422 sig_gff_ru_mac_ready_ind(mac_ready_ind); | |
| 423 else if(grlc_data->gff.rlc_status EQ RLC_STATUS_DL) | |
| 424 sig_gff_rd_mac_ready_ind(mac_ready_ind); | |
| 425 else | |
| 426 { | |
| 427 TRACE_ERROR("unknown rlc status: gff active but no tbf"); | |
| 428 } | |
| 429 break; | |
| 430 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH | |
| 431 case GFF_TWO_PHASE: | |
| 432 grlc_data->ul_poll_pos_index = 0; | |
| 433 sig_gff_tm_mac_ready_ind_two_phase(mac_ready_ind); | |
| 434 break; | |
| 435 #endif | |
| 436 default: | |
| 437 /*TRACE_ERROR( "MAC_READY_IND unexpected" );*/ | |
| 438 break; | |
| 439 } | |
| 440 | |
| 441 #if defined (_TARGET_) | |
| 442 /*call control of asyn part*/ | |
| 443 grlc_data->ul_cnt_asyn = grlc_data->ul_cnt_syn; | |
| 444 #endif /* defined (_TARGET_) */ | |
| 445 | |
| 446 | |
| 447 } /* gff_mac_ready_ind() */ | |
| 448 | |
| 449 /* | |
| 450 +------------------------------------------------------------------------------ | |
| 451 | Function : gff_l1test_call_mphp_power_control | |
| 452 +------------------------------------------------------------------------------ | |
| 453 | Description : Handles the primitive L1TEST_CALL_MPHP_POWER_CONTROL | |
| 454 | | |
| 455 | Parameters : *mphp_power_control - Ptr to primitive payload | |
| 456 | | |
| 457 +------------------------------------------------------------------------------ | |
| 458 */ | |
| 459 | |
| 460 #ifdef _SIMULATION_ | |
| 461 | |
| 462 GLOBAL void gff_l1test_call_mphp_power_control | |
| 463 ( T_L1TEST_CALL_MPHP_POWER_CONTROL *call_mphp_power_control ) | |
| 464 { | |
| 465 PALLOC( return_mphp_power_control, L1TEST_RETURN_MPHP_POWER_CONTROL ); | |
| 466 | |
| 467 maca_power_control( call_mphp_power_control->assignment_id, | |
| 468 call_mphp_power_control->crc_error, | |
| 469 call_mphp_power_control->bcch_level, | |
| 470 call_mphp_power_control->radio_freq, | |
| 471 call_mphp_power_control->burst_level, | |
| 472 return_mphp_power_control->pch ); | |
| 473 | |
| 474 PSEND( hCommL1, return_mphp_power_control ); | |
| 475 | |
| 476 TRACE_FUNCTION( "gff_l1test_call_mphp_power_control" ); | |
| 477 | |
| 478 PFREE( call_mphp_power_control ); | |
| 479 | |
| 480 } /* gff_l1test_call_mphp_power_control() */ | |
| 481 | |
| 482 #endif /* #ifdef _SIMULATION_ */ |
