FreeCalypso > hg > fc-tourmaline
diff src/g23m-gprs/grr/grr_tcp.c @ 1:fa8dc04885d8
src/g23m-*: import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:25:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gprs/grr/grr_tcp.c Fri Oct 16 06:25:50 2020 +0000 @@ -0,0 +1,768 @@ +/* ++----------------------------------------------------------------------------- +| Project : GPRS (8441) +| Modul : GRR ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : This module implements primitive handler functions for service +| TC of entity GRR. ++----------------------------------------------------------------------------- +*/ + +#ifndef GRR_TCP_C +#define GRR_TCP_C +#endif + +#define ENTITY_GRR + +/*==== INCLUDES =============================================================*/ + +#include "typedefs.h" /* to get Condat data types */ +#include "vsi.h" /* to get a lot of macros */ +#include <string.h> +#include "macdef.h" +#include "gprs.h" +#include "gsm.h" /* to get a lot of macros */ +#include "ccdapi.h" /* to get CCD API */ +#include "cnf_grr.h" /* to get cnf-definitions */ +#include "mon_grr.h" /* to get mon-definitions */ +#include "prim.h" /* to get the definitions of used SAP and directions */ +#include "message.h" /* to get air message definitions */ +#include "grr.h" /* to get the global entity definitions */ +#include "grr_f.h" /* to get the grr global function definitions */ +#include "grr_tcf.h" /* to get the service TC functions definitions */ +#include "grr_tcs.h" /* to get the service TC functions definitions */ +#include "grr_ctrls.h" /* to get the service CTRL signal definitions */ +#include "grr_cpaps.h" /* to get the service CPAP signal definitions */ +#include "grr_meass.h" + +/*==== CONST ================================================================*/ + +/*==== DIAGNOSTICS ==========================================================*/ + +/*==== LOCAL VARS ===========================================================*/ + +/*==== LOCAL TYPES ==========================================================*/ + +/*==== PRIVATE FUNCTIONS ====================================================*/ + +/*==== PUBLIC FUNCTIONS =====================================================*/ + + +/* ++------------------------------------------------------------------------------ +| Function : tc_t3162 ++------------------------------------------------------------------------------ +| Description : Handles the primitive T3162 +| +| Parameters : void +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_t3162 ( void ) +{ + TRACE_FUNCTION( "tc_t3162" ); + + switch( GET_STATE( TC ) ) + { + case TC_WAIT_ASSIGN: + case TC_POLLING: + SET_STATE(TC,TC_PIM); + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE); + break; + default: + TRACE_ERROR( "T3162 unexpected" ); + break; + } + +} /* tc_t3162() */ + + + +/* ++------------------------------------------------------------------------------ +| Function : tc_t3168 ++------------------------------------------------------------------------------ +| Description : Handles the primitive T3168 +| This timer is involved in 3 Procedures +| 1) Two Phase Access Procedure +| 2) Uplink TBF Setup on existing Downlink TBF +| 3) Uplink Realloaction Procedure on existing Uplink TBF +| +| Parameters : void +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_t3168 ( void ) +{ + TRACE_FUNCTION( "tc_t3168" ); + /* + * The expiry of this timer may occure in 1 case: + * + * b) two phase access procedure + * + */ + + switch( GET_STATE( TC ) ) + { + case TC_WAIT_2P_ASSIGN: + /* + * case b) stop for waiting assignment + */ + tc_stop_normal_burst_req( ); + if( grr_t_status( T3174 ) > 0 ) + { + TRACE_ERROR( " Contention Failure on the network commanded cell: 3168 expired" ); + grr_data->pcco_failure_cause = 1; + sig_tc_ctrl_access_reject_on_new_cell(); + } + break; + + default: + TRACE_ERROR( "T3168 unexpected" ); + break; + } + +} /* tc_t3168() */ + + + +/* ++------------------------------------------------------------------------------ +| Function : tc_t3170 ++------------------------------------------------------------------------------ +| Description : Handles the primitive T3170 +| +| Parameters : void +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_t3170 ( void ) +{ + + TRACE_FUNCTION( "tc_t3170" ); + + if(grr_t_status( T3176 ) > 0 )/*in case pcco running, t3170 should be ignored.*/ + { + TRACE_EVENT("t3170 expired when t3176 is running: ignore"); + return; + } + + switch( GET_STATE( TC ) ) + { + case TC_SINGLE_BLOCK: + /* + * MPHP_STOP_SINGLE_BLOCK_REQ was sent at receiving the packet access reject. + */ + SET_STATE(TC,TC_PIM); + TRACE_EVENT("T3170 expired in TC_SINGLE_BLOCK"); + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE); + tc_set_stop_ctrl_blk( FALSE, CGRLC_BLK_OWNER_NONE, 0 ); + break; + case TC_WAIT_2P_ASSIGN: + +#if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH + if(grr_data->tc.tbf_est_pacch) + { + TRACE_EVENT_P1("T3170 expired in TC_WAIT_2P_ASSIGN tbf_est_pacch = %d",grr_data->tc.tbf_est_pacch); + tc_handle_error_ra(); + } + else +#endif + { + /* + * GMMRR_STATUS_IND will send in tc_handle_error_ra after MPHP_STOP_SINGLE_BLOCK_CON + */ + TRACE_EVENT("T3170 expired in TC_WAIT_2P_ASSIGN/"); + tc_stop_normal_burst_req( ); + } + break; +#if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH + case TC_TBF_ACTIVE : + if(grr_data->tc.tbf_est_pacch) + { + TRACE_EVENT("T3170 expired in TC_TBF_ACTIVE tbf_est_pacch active"); + tc_handle_error_ra(); + } + else + { + TRACE_ERROR("T3170 expired when TC:TC_TBF_ACTIVE"); + } + break; +#endif + case TC_WAIT_ASSIGN: + case TC_POLLING: + SET_STATE(TC,TC_PIM); + TRACE_EVENT("T3170 expired in TC_WAIT_ASSIGN//TC_POLLING"); + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE); + tc_set_stop_ctrl_blk( FALSE, CGRLC_BLK_OWNER_NONE, 0 ); + sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE ); + break; + default: + TRACE_ERROR( "T3170 unexpected" ); + break; + } +} /* tc_t3170() */ + + + +/* ++------------------------------------------------------------------------------ +| Function : tc_t3172 ++------------------------------------------------------------------------------ +| Description : Handles the primitive T3172 +| +| Parameters : inctance_i - identifier of timer's inctance +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_t3172 ( UBYTE inctance_i ) +{ + TRACE_EVENT( "T3172 expired" ); + + switch( GET_STATE( TC ) ) + { + case TC_PIM: + tc_cgrlc_access_status_req(); + break; + case TC_CPAP: + /* + * set the CPAP state to CPAP_IDLE + */ + sig_tc_cpap_t3142(); + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ALL); + + /* + * Do we need to set the TC state to SET_STATE(TC, TC_PIM);?? + */ + SET_STATE(TC, TC_PIM); + break; + case TC_WAIT_ASSIGN: + case TC_POLLING: + SET_STATE(TC,TC_PIM); + vsi_t_stop(GRR_handle,T3170); + /* + * to set the states in services + */ + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ALL); + sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE ); + break; + case TC_WAIT_2P_ASSIGN: + /* Donot send stop single block req as it would have got + * sent on 3170 expiry */ + if(grr_t_status(T3170) > 0) + { + vsi_t_stop(GRR_handle,T3170); + tc_stop_normal_burst_req(); + } + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ALL); + sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE ); + SET_STATE(TC,TC_PIM); + break; + case TC_CONTENTION_RESOLUTION: + case TC_ACCESS_DISABLED: + case TC_TBF_ACTIVE: + break; + default: + TRACE_ERROR( "T3172 unexpected" ); + break; + } + +} /* tc_t3172() */ + + + +/* ++------------------------------------------------------------------------------ +| Function : tc_t3186 ++------------------------------------------------------------------------------ +| Description : Handles the primitive T3186 +| +| Parameters : void +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_t3186 ( void ) +{ + TRACE_FUNCTION( "tc_t3186" ); + TRACE_EVENT("T3186 expired"); + + + switch( GET_STATE( TC ) ) + { + case TC_WAIT_ASSIGN: + SET_STATE(TC, TC_PIM); + /* + * stop sending packet access request + */ + tc_send_ra_stop_req(); + tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE); + break; + default: + TRACE_ERROR( "T3186 unexpected" ); + break; + } + +} /* tc_t3186() */ + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_tbf_rel_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_tbf_rel_ind +| +| Parameters : cgrlc_tbf_rel_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_tbf_rel_ind ( T_CGRLC_TBF_REL_IND * cgrlc_tbf_rel_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_tbf_rel_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + if(( !grr_is_pbcch_present()) AND + ( grr_data->tc.dcch_present) AND + cgrlc_tbf_rel_ind->tbf_rel_cause EQ CGRLC_TBF_REL_CR_FAILED AND + cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_UL ) + { + SET_STATE(TC,TC_CPAP); + sig_tc_cpap_con_res_fail(); + break; + } + + /*lint -fallthrough*/ + + case TC_TBF_ACTIVE: + if( grr_data->cc_running OR grr_t_status( T3174 ) > 0 AND + cgrlc_tbf_rel_ind->tbf_rel_cause EQ CGRLC_TBF_REL_CR_FAILED AND + cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_UL) + { + TRACE_ERROR( " Contention Resolution failure on new cell" ); + sig_tc_ctrl_contention_failure(); + } + else if( cgrlc_tbf_rel_ind->tbf_rel_cause EQ CGRLC_TBF_REL_WITH_CELL_RESELECT AND + ( cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_UL OR + cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_DL_UL ) ) + { + sig_tc_ctrl_prepare_abnorm_rel_with_cr( ); + } + else + { + if( (grr_data->tbf_type EQ CGRLC_TBF_MODE_DL_UL OR + grr_data->tbf_type EQ cgrlc_tbf_rel_ind->tbf_mode) AND + cgrlc_tbf_rel_ind->tbf_mode NEQ CGRLC_TBF_MODE_NULL) + { + if( (grr_data->downlink_tbf.trans_id NEQ cgrlc_tbf_rel_ind->dl_trans_id) AND + cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_DL) + { + /* Dont perform REL_R as just configured L1 with TBF_R*/ + TRACE_EVENT_P2("GRR and GRLC DL Transaction Id Diff grr=%d grlc=%d", + grr_data->downlink_tbf.trans_id,cgrlc_tbf_rel_ind->dl_trans_id); + } + else + { + tc_send_tbf_rel (cgrlc_tbf_rel_ind->tbf_mode); + tc_deactivate_tbf(cgrlc_tbf_rel_ind->tbf_mode); + } + } + else + { + TRACE_EVENT_P2("cgrlc_tbf_rel_ind grr_data->tbf_type=%d,cgrlc_tbf_rel_ind->tbf_mode=%d" + ,grr_data->tbf_type + ,cgrlc_tbf_rel_ind->tbf_mode); + } + } + + if( cgrlc_tbf_rel_ind->v_c_value EQ TRUE ) + { + meas_c_set_c_value( &cgrlc_tbf_rel_ind->c_value ); + } + break; +#if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH + case TC_WAIT_2P_ASSIGN : + /* T3168 timer expires in GRLC */ + if((grr_data->tc.tbf_est_pacch) AND + (cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_2PA)) + { + tc_send_tbf_rel (cgrlc_tbf_rel_ind->tbf_mode); + tc_deactivate_tbf(cgrlc_tbf_rel_ind->tbf_mode); + } + break; +#endif + default: + TRACE_ERROR( "cgrlc_tbf_rel_ind unexpected" ); + break; + } + + PFREE(cgrlc_tbf_rel_ind); + +} /* tc_cgrlc_tbf_rel_ind() */ + + + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_ul_tbf_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_ul_tbf_ind +| +| Parameters : cgrlc_ul_tbf_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_ul_tbf_ind ( T_CGRLC_UL_TBF_IND * cgrlc_ul_tbf_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_ul_tbf_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_PIM: + grr_data->r_bit = 0; + grr_data->tc.sending_req = FALSE; + grr_data->tc.n_acc_req = 0; + grr_data->tc.ra_once_sent= 0; + + if(cgrlc_ul_tbf_ind->access_type EQ CGRLC_AT_NULL ) + { + /* + * check if single block access is required + */ + if(tc_get_num_ctrl_blck( ) NEQ 0) + { + grr_data->tc.v_sb_without_tbf = TRUE; + grr_data->uplink_tbf.nr_blocks = 1; + grr_data->uplink_tbf.prio = RADIO_PRIO_4; + grr_data->uplink_tbf.access_type = CGRLC_AT_SINGLE_BLOCK; + grr_data->uplink_tbf.ti = 0; /* contention resolution NOT required */ + tc_check_access_is_needed( CAC_OTHER ); + } + else + { + sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE ); + } + } + else + { + grr_data->uplink_tbf.access_type = cgrlc_ul_tbf_ind->access_type; + grr_data->uplink_tbf.prio = cgrlc_ul_tbf_ind->ra_prio; + grr_data->uplink_tbf.nr_blocks = cgrlc_ul_tbf_ind->nr_blocks; + grr_data->uplink_tbf.prim_type = cgrlc_ul_tbf_ind->llc_prim_type; + grr_data->uplink_tbf.peak = cgrlc_ul_tbf_ind->peak; + grr_data->uplink_tbf.rlc_oct_cnt = cgrlc_ul_tbf_ind->rlc_oct_cnt; + + if(grr_data->uplink_tbf.access_type EQ CGRLC_AT_TWO_PHASE) + grr_data->uplink_tbf.ti = 0; /* contention resolution NOT required */ + else + grr_data->uplink_tbf.ti = 1; /* contention resolution required */ + + + TRACE_EVENT_P1("tc_cgrlc_ul_tbf_ind: nr_block: %d", grr_data->uplink_tbf.nr_blocks); + + tc_check_access_is_needed( CAC_OTHER ); + /* + * forward control messages to GRLC + */ + if(tc_get_num_ctrl_blck( ) NEQ 0) + { + tc_send_control_msg_to_grlc(); + } + + } + break; +#if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH + case TC_CONTENTION_RESOLUTION: + case TC_TBF_ACTIVE: + /* TBF establishment on PACCH is initiated by GRLC */ + if(cgrlc_ul_tbf_ind->tbf_est_pacch) + { + /* Set TBF establishment on PACCH flag */ + grr_data->tc.tbf_est_pacch = TRUE; + + /* Contention resolution is not required */ + grr_data->uplink_tbf.ti = 0; + } + break; +#endif + default: + TRACE_ERROR( "cgrlc_ul_tbf_ind unexpected" ); + break; + } + + PFREE(cgrlc_ul_tbf_ind); + +} /* tc_cgrlc_ul_tbf_ind() */ + + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_ctrl_msg_sent_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_ctrl_msg_sent_ind +| +| Parameters : cgrlc_ctrl_msg_sent_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_ctrl_msg_sent_ind ( T_CGRLC_CTRL_MSG_SENT_IND * cgrlc_ctrl_msg_sent_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_ctrl_msg_sent_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + case TC_TBF_ACTIVE: + /* + * todo : delete the first ctrl msg. Only type of cntrl msgs will be stored + */ + + break; + default: + TRACE_ERROR( "cgrlc_ctrl_msg_sent_ind unexpected" ); + break; + } + + PFREE(cgrlc_ctrl_msg_sent_ind); + +} /* tc_cgrlc_ctrl_msg_sent_ind() */ + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_starting_time_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_starting_time_ind +| +| Parameters : cgrlc_starting_time_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_starting_time_ind ( T_CGRLC_STARTING_TIME_IND * cgrlc_starting_time_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_starting_time_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + case TC_TBF_ACTIVE: + /* + * store the tfi + */ + if(cgrlc_starting_time_ind->tbf_mode EQ CGRLC_TBF_MODE_UL) + { + grr_data->uplink_tbf.tfi = cgrlc_starting_time_ind->tfi; + grr_data->uplink_tbf.st_tfi = 0xFF; + grr_data->uplink_tbf.tbf_start_fn = CGRLC_STARTING_TIME_NOT_PRESENT; + grr_data->uplink_tbf.polling_bit = 0xFF; + grr_data->uplink_tbf.rlc_db_granted = 0; + if(grr_data->uplink_tbf.ts_usage) + { + grr_data->uplink_tbf.ts_mask = grr_data->uplink_tbf.ts_usage; + } + else + { + TRACE_EVENT("tc_cgrlc_starting_time_ind: uplink ts_usage is 0"); + } + grr_data->uplink_tbf.ts_usage = 0; + +#if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH + grr_data->tc.tbf_est_pacch = FALSE; +#endif + } + else + { + grr_data->downlink_tbf.tfi = cgrlc_starting_time_ind->tfi; + grr_data->downlink_tbf.st_tfi = 0xFF; + grr_data->downlink_tbf.tbf_start_fn = CGRLC_STARTING_TIME_NOT_PRESENT; + grr_data->downlink_tbf.polling_bit = 0xFF; + if(grr_data->downlink_tbf.ts_usage) + { + grr_data->downlink_tbf.ts_mask = grr_data->downlink_tbf.ts_usage; + } + else + { + TRACE_EVENT("tc_cgrlc_starting_time_ind: downlink ts_usage is 0"); + } + grr_data->downlink_tbf.ts_usage = 0; + } + + break; + default: + TRACE_ERROR( "cgrlc_starting_time_ind unexpected" ); + break; + } + + PFREE(cgrlc_starting_time_ind); + +} /* tc_cgrlc_starting_time_ind() */ + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_t3192_started_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_t3192_started_ind +| +| Parameters : cgrlc_t3192_started_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_t3192_started_ind ( T_CGRLC_T3192_STARTED_IND * cgrlc_t3192_started_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_t3192_started_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + case TC_TBF_ACTIVE: + grr_data->downlink_tbf.t3192 = TRUE; + break; + default: + TRACE_ERROR( "cgrlc_t3192_started_ind unexpected" ); + break; + } + + PFREE(cgrlc_t3192_started_ind); + +} /* tc_cgrlc_t3192_started_ind() */ + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_cont_res_done_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_cont_res_done_ind +| +| Parameters : cgrlc_cont_res_done_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_cont_res_done_ind ( T_CGRLC_CONT_RES_DONE_IND * cgrlc_cont_res_done_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_cont_res_done_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + SET_STATE(TC,TC_TBF_ACTIVE); + grr_data->uplink_tbf.ti = 0; + /*TRACE_EVENT_P1("CONT_RES:nacc set from %d to zero",grr_data->tc.n_acc_req_procedures);*/ + if(grr_data->cc_running OR grr_t_status( T3174 ) > 0) + { + sig_tc_ctrl_contention_ok(); + } + break; + default: + TRACE_ERROR( "cgrlc_cont_res_done_ind unexpected" ); + break; + } + + PFREE(cgrlc_cont_res_done_ind); + +} /* tc_cgrlc_cont_res_done_ind() */ + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_ta_value_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_ta_value_ind +| +| Parameters : cgrlc_ta_value_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_ta_value_ind ( T_CGRLC_TA_VALUE_IND * cgrlc_ta_value_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_ta_value_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + case TC_TBF_ACTIVE: +#if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH + case TC_WAIT_2P_ASSIGN: +#endif + grr_data->ta_params.ta_valid = TRUE; + grr_data->ta_params.ta_value = cgrlc_ta_value_ind->ta_value; +/* + + { + ULONG trace[2]; + + trace[0] = grr_data->ta_params.ul_ta_tn << 0; + trace[0] |= grr_data->ta_params.ul_ta_i << 8; + trace[0] |= grr_data->ta_params.ta_value << 16; + trace[0] |= grr_data->ta_params.ta_valid << 24; + + trace[1] = grr_data->ta_params.l1_ta_i << 0; + trace[1] |= grr_data->ta_params.l1_ta_value << 8; + trace[1] |= grr_data->ta_params.dl_ta_tn << 16; + trace[1] |= grr_data->ta_params.dl_ta_i << 24; + + TRACE_EVENT_P4( "TA_PARAM_2: %08X%08X%02X %02X", + trace[0], trace[1], grr_data->ta_params.l1_ta_tn, + grr_data->ta_params.ta_value ); + } + +*/ + + break; + default: + TRACE_ERROR( "cgrlc_ta_value_ind unexpected" ); + break; + } + + PFREE(cgrlc_ta_value_ind); + +} /* tc_cgrlc_ta_value_ind() */ + + +/* ++------------------------------------------------------------------------------ +| Function : tc_cgrlc_test_mode_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive cgrlc_test_mode_ind, GRLC is indicating +| that test mode is runnig +| +| Parameters : cgrlc_test_mode_ind - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tc_cgrlc_test_mode_ind ( T_CGRLC_TEST_MODE_IND * cgrlc_test_mode_ind ) +{ + TRACE_FUNCTION( "tc_cgrlc_test_mode_ind" ); + + + switch( GET_STATE( TC ) ) + { + case TC_CONTENTION_RESOLUTION: + case TC_TBF_ACTIVE: + case TC_PIM:/*testmode ended*/ + + grr_data->test_mode = cgrlc_test_mode_ind->test_mode_flag; + sig_tc_ctrl_test_mode_ind(); + + break; + default: + TRACE_ERROR( "cgrlc_test_mode_ind unexpected" ); + break; + } + + PFREE(cgrlc_test_mode_ind); + +} /* tc_cgrlc_test_mode_ind() */