FreeCalypso > hg > fc-tourmaline
view src/g23m-gprs/grr/grr.h @ 303:f76436d19a7a default tip
!GPRS config: fix long-standing AT+COPS chance hanging bug
There has been a long-standing bug in FreeCalypso going back years:
sometimes in the AT command bring-up sequence of an ACI-only MS,
the AT+COPS command would produce only a power scan followed by
cessation of protocol stack activity (only L1 ADC traces), instead
of the expected network search sequence. This behaviour was seen
in different FC firmware versions going back to Citrine, and seemed
to follow some law of chance, not reliably repeatable.
This bug has been tracked down and found to be specific to !GPRS
configuration, stemming from our TCS2/TCS3 hybrid and reconstruction
of !GPRS support that was bitrotten in TCS3.2/LoCosto version.
ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3
version and had to be pulled from TCS2 - but as it turns out,
there is a new field in the MMR_REG_REQ primitive that needs to be
set correctly, and that psa_mms.c module is the place where this
initialization needed to be added.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 08 Jun 2023 08:23:37 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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 : Definitions for entity GRR. +----------------------------------------------------------------------------- */ #ifndef GRR_H #define GRR_H /* * Start defintions from entity RR */ /* **************************************************************************** * The following declarations shall be identical with the corresponding * declarations located in RR. **************************************************************************** */ EXTERN UBYTE std; EXTERN UBYTE rr_csf_get_radio_access_capability( T_ra_cap *ra_cap ); EXTERN T_rf_cap* rr_csf_get_rf_capability ( void ); #ifdef TI_PS_FF_QUAD_BAND_SUPPORT #ifdef _SIMULATION_ EXTERN void rr_csf_check_rfcap (UBYTE init); #endif #endif #if defined (REL99) AND defined (TI_PS_FF_EMR) EXTERN BOOL rr_get_support_for_emr ( void ); #endif #define MAX_CLASSES 5 EXTERN const SHORT p_dcs [MAX_CLASSES]; EXTERN const SHORT p_pcs [MAX_CLASSES]; EXTERN const SHORT p_gsm [MAX_CLASSES]; #define MAX_PCL 32 EXTERN const UBYTE p_control_gsm [MAX_PCL]; EXTERN const UBYTE p_control_dcs [MAX_PCL]; EXTERN const UBYTE p_control_pcs [MAX_PCL]; typedef struct { USHORT l_f; USHORT o_f; UBYTE b_f[32]; } T_f_range; typedef struct { UBYTE b_f[128]; } T_LIST; EXTERN void for_create_channel_list ( T_f_range *f_range, T_LIST *cha_list ); EXTERN void srv_merge_list ( T_LIST *target_list, T_LIST *list ); EXTERN int srv_create_list ( T_LIST *list, USHORT *channel_array, USHORT size, UBYTE start_with_zero, USHORT start_index ); #ifdef _TARGET_ EXTERN void srv_get_cell_alloc_list ( T_LIST *target_list ); #endif #define RX_QUAL_UNAVAILABLE 0xFF #ifdef FF_PS_RSSI #define RX_ACCE_UNAVAILABLE 0xFF EXTERN void RX_SetValue ( UBYTE new_value, UBYTE new_qual, UBYTE new_access); #else EXTERN void RX_SetValue ( UBYTE new_value ); #endif /* **************************************************************************** * The above declarations shall be identical with the corresponding * declarations located in RR. **************************************************************************** */ /* * End defintions from entity RR */ typedef struct /* T_MS_PWR_CAP */ { const SHORT *p; /* power class -> output power */ const UBYTE *p_control; /* power control level -> output power */ UBYTE ms_power; /* MS power class */ SHORT pwr_offset; /* POWER_OFFSET */ SHORT pwr_max; /* maximum nominal output power in the cell */ SHORT pwr_min; /* minimum nominal output power in the cell */ SHORT gamma_0; /* GAMMA 0 */ UBYTE band_ind; /* indicates the used frequency band */ } T_MS_PWR_CAP; /* * defines the user of the vsi interface */ #define VSI_CALLER GRR_handle, #define VSI_CALLER_SINGLE GRR_handle /* * Macros */ #ifdef REL99 #define MAX_PSI 9 /* Maximum number of PSIs: PSI1,2,3,3bis,3ter,4,5,8,13 */ #else #define MAX_PSI 7 /* Maximum number of PSIs: PSI1,2,3,3bis,4,5,13*/ #endif #define ENCODE_OFFSET 0 /* * Bit and byte length for encoding/decoding */ #define BIT_UL_CTRL_BLOCK_MAC_HEADER 8 #define BIT_UL_CTRL_BLOCK_CONTENTS 176 #define BIT_UL_CTRL_BLOCK (BIT_UL_CTRL_BLOCK_MAC_HEADER+BIT_UL_CTRL_BLOCK_CONTENTS) #define BYTE_UL_CTRL_BLOCK (BIT_UL_CTRL_BLOCK/BITS_PER_BYTE) /* * Constants */ /* * Disable Get State traces only for target enviroment */ #ifdef _TARGET_ #undef GET_STATE #define GET_STATE(P) (ENTITY_DATA->P state) #endif #define MA_NUMBER_4_PSI13_OR_CELL_ALLOC 14 /* MA_NUMBER used to reference a Mobile Allocation (MA) received in PSI13, which may referenced from an assignment message or which referes to the cell allocation defined for the cell in SI1 or PSI2*/ #define MA_NUMBER_4_ASSIGNMENT 15 /* MA_NUMBER used to reference a MA received in a previous assignent*/ #if 1 //#ifdef REL99 /* FreeCalypso change to pass !REL99 compilation */ #define GRR_FREQ_PARAM_RECEIVED_IN_ASSIGNMENT 0 /* * This refers to freq param that is received in non assignment * messages like PSI 8 and PSI 14 */ #define GRR_FREQ_PARAM_RECEIVED_IN_NON_ASSIGNMENT 1 #endif /* * Define the size of the GRR queue in frame */ #define PEI_PRIM_QUEUE_SIZE 20 #define FN_MAX 0x297000 #define GRR_INVALID_FN 0xFFFFFFFF /* * Macros for handling of individual bits within a value used as flags */ #define SET_FLAG(val,mask,flag,type) (val=(((val)&(~(type)(mask)))|(flag))) #define IS_FLAGGED(val,mask,flag) ((val & mask ) EQ flag) #define IS_NOT_FLAGGED(val,mask,flag) ((val & mask ) NEQ flag) /* * Defines for the gprs_database */ /* * Service states */ #define GPRS_SERVICE_NONE 0 /* no service */ #define GPRS_SERVICE_LIMITED 1 /* limited service */ #define GPRS_SERVICE_FULL 2 /* full service */ typedef UBYTE T_GPRS_SERVICE; /* * Access states */ #define GPRS_ACCESS_BARRED 0 /* access barred */ #define GPRS_ACCESS_ALLOWED 1 /* access allowed */ typedef UBYTE T_ACCESS_STATUS; /* * Maximum number of IMSI digits */ #define MAX_IMSI_DIGITS 16 #define SEG_CTRL_BLOCK_SIZE 8 #ifdef REL99 /* * Network Release */ #define BSS_NW_REL_97 0 #define BSS_NW_REL_99 1 #define BSS_NW_REL_04 2 #endif /* start constants for CTRL */ /* final states */ #define GLBL_PCKT_MODE_NULL 0 #define GLBL_PCKT_MODE_SUSP 1 #define GLBL_PCKT_MODE_SYNC 2 #define GLBL_PCKT_MODE_IDLE 3 #define GLBL_PCKT_MODE_ACCESS 4 #define GLBL_PCKT_MODE_ASSIGNED 5 #define GLBL_PCKT_MODE_TRANSFER 6 #define GLBL_PCKT_MODE_RELEASED 7 /* transitions states from NULL mode to others */ #define GLBL_PCKT_MODE_NULL_IDLE 8 /* transitions states from suspended mode to others */ #define GLBL_PCKT_MODE_SUSP_IDLE 9 /* transitions states from suspended mode to others */ #define GLBL_PCKT_MODE_SYNC_IDLE 10 /* transitions states from packet idle mode to others */ #define GLBL_PCKT_MODE_IDLE_ACCESS 11 #define GLBL_PCKT_MODE_IDLE_ASSIGNED 12 #define GLBL_PCKT_MODE_IDLE_TRANSFER 13 /* transitions states from packet access mode to others */ #define GLBL_PCKT_MODE_ACCESS_IDLE 14 #define GLBL_PCKT_MODE_ACCESS_ASSIGNED 15 #define GLBL_PCKT_MODE_ACCESS_TRANSFER 16 #define GLBL_PCKT_MODE_ACCESS_TWO_PHASE 17 /* transitions states from packet assigned mode to others */ #define GLBL_PCKT_MODE_ASSIGNED_IDLE 18 #define GLBL_PCKT_MODE_ASSIGNED_TRANSFER 19 /* transitions states from packet transfer mode to others */ #define GLBL_PCKT_MODE_TRANSFER_IDLE 20 #define GLBL_PCKT_MODE_TRANSFER_RELEASED 21 #define GLBL_PCKT_MODE_TRANSFER_ACCESS 22 /* transitions states from packet released mode to others */ #define GLBL_PCKT_MODE_RELEASED_IDLE 23 #define GLBL_PCKT_MODE_RELEASED_ACCESS 24 /* transitions states from measurement report mode to others */ #define GLBL_PCKT_MODE_MEAS_REP_IDLE 25 typedef UBYTE T_GLBL_PCKT_MODE; #define CTRL_TASK_NONE 0 #define CTRL_TASK_PBCCH_LEAVE_NULL 1 #define CTRL_TASK_PBCCH_LEAVE_SUSP 2 #define CTRL_TASK_PBCCH_LEAVE_SYNC 3 #define CTRL_TASK_PBCCH_LEAVE_IDLE 4 #define CTRL_TASK_PBCCH_LEAVE_ACCESS 5 #define CTRL_TASK_PBCCH_LEAVE_TRANSFER 6 #define CTRL_TASK_BCCH 7 typedef UBYTE T_CTRL_TASK; /* end constants for CTRL */ /* start constants for TC */ #define RADIO_PRIO_4 3 #define RFL_NUMBER_4_DIRECT_ENCODING_2 (RFL_NUMBER_4_DL_CTRL_MSG_MAX + 1) /* end constants for TC */ /* MAC HEADER TYPE*/ #define CTRL_BLK_NO_OPT 1 #define CTRL_BLK_OPT 2 /* start constants for MEAS */ /* maybe for later use */ /* #define M_ROUND_UP(x,meas_acrcy) (((x)>=0)? \ ((((x)%(meas_acrcy))< ((meas_acrcy)/ 2))? \ ( (x)/(meas_acrcy) ):(((x)/(meas_acrcy))+1)): \ ((((x)%(meas_acrcy))<=((meas_acrcy)/-2))? \ (((x)/(meas_acrcy))-1):( (x)/(meas_acrcy) ))) */ #define M_ROUND_UP(x,meas_acrcy) ((((x)%(meas_acrcy))< ((meas_acrcy)/ 2))? \ ( (x)/(meas_acrcy) ):(((x)/(meas_acrcy))+1)) #define NORM_POW_MIN (ULONG)1000 /* normalised math. power */ /* function maximum value */ #define NORM_TAVGW_FAC (ULONG)10 /* normalised Tavg_w factor */ #define DRX_NORM_FACTOR (NORM_TAVGW_FAC*NORM_POW_MIN) #define MEAS_ACRCY 1000 /* accuracy */ #define MIN_PCL_DCS1800 28 /* minimum power control level DCS 1800 */ #define MAX_PCL_DCS1800 29 /* maximum power control level DCS 1800 */ #define MIN_PCL_GSM900 31 /* minimum power control level GSM 900 */ #define MAX_PCL_GSM900 0 /* maximum power control level GSM 900 */ #define MIN_PCL_PCS1900 21 /* minimum power control level PCS 1900 */ #define MAX_PCL_PCS1900 22 /* maximum power control level PCS 1900 */ #define GAMMA_0_DCS1800 36 #define GAMMA_0_GSM900 39 #define GAMMA_0_PCS1900 36 /* end constants for MEAS */ /* start constants for CS */ #define CS_RLA_P_VALID 0x0 /* RLA_P value is available and valid */ #define CS_RLA_P_NOT_VALID 0x1 /* RLA_P value is available but not valid. */ #define CS_RLA_P_NOT_AVAIL 0x2 /* RLA_P value is not available and therefore not valid */ #define CS_KEEP_MEAS_RSLT 0x0 /* Keep all measurement results. */ #define CS_DELETE_MEAS_RSLT 0x1 /* Delete all measurement results. */ #define CS_CRMM_BA_GPRS 0x0 /* Cell re-selection measurement on BA(GPRS), forward results to GRR. */ #define CS_CRMM_BA_BCCH 0x1 /* Cell re-selection measurement on BA(BCCH), forward results to ALR. */ #define CS_MIN_RLA_P_SAMPLES 5 /* At least 5 received signal measurement */ /* samples are required for a valid RLA_P */ /* value. */ #define CS_MIN_RUN_AVG_PRD 1002 /* RLA_P shall be a running average */ /* determined using sample collected over */ /* a period of 5 sec. to ... sec., */ /* CS_MIN_RUN_AVG_PRD defines 5 sec. */ /* minus 7.5 % in units of frames. 7.5 % */ /* are substracted to be more tolerant */ /* in time which allows to validate also */ /* data which are colleted in less than */ /* 5 sec. */ #define CS_RPT_PRD_PTM 104 /* The MPHP_TCR_MEAS_IND primitive is */ /* sent every 104 TDMA frames. */ #define CS_NCSYNC_RPT_PRD_PIM 2080 /* CS_NCSYNC_RPT_PRD_PIM =2080 frame eqivalent to 10 second 104 TDMA frames. */ #define CS_MAX_MEAS_RSLT 10 /* a maximum number of measurement */ /* results are taken into account for */ /* RLA_P calculation, exceeding samples */ /* are ignored. */ #define CS_IDX_NOT_USED 0xFF /* band limitations for multiband reporting */ #define CS_NO_BAND_LIMITATION 0 #define CS_EXCLUDE_SC_BAND 1 #define CS_ONLY_SC_BAND 2 /* maximum number of strongest carrier consider for cell re-selection */ #if defined FF_EOTD #define CS_MAX_STRONG_CARRIER 12 #define CS_MAX_STRONG_CARRIER_CR 6 #if ( ! ( CS_MAX_STRONG_CARRIER_CR <= CS_MAX_STRONG_CARRIER ) ) #error CS_MAX_STRONG_CARRIER_CR <= CS_MAX_STRONG_CARRIER required #endif #else /* #if defined FF_EOTD */ #define CS_MAX_STRONG_CARRIER 6 #endif /* #if defined FF_EOTD */ #if ( ! ( CS_MAX_STRONG_CARRIER <= RRGRR_MAX_ARFCN_NCELL_SYNC_REQ ) ) #error CS_MAX_STRONG_CARRIER <= RRGRR_MAX_ARFCN_NCELL_SYNC_REQ required #endif #if defined (REL99) AND defined (TI_PS_FF_EMR) AND defined (TI_PS_FF_RTD) #else #if ( ! ( ( RRGRR_MEAS_REP_LIST_SIZE - 1 /* subtract serving cell */ ) <= CS_MAX_STRONG_CARRIER ) ) #error RRGRR_MEAS_REP_LIST_SIZE <= CS_MAX_STRONG_CARRIER required #endif #endif /* extrem values for signed 16 bit values */ #define CS_SMALLEST_SHORT_VALUE (-32768) #define BSIC_NCC_MASK 0x38 #define NC_GET_TYPE(info_src) ((info_src&0xF000)>>12) #define NC_SET_TYPE(info_src,type) (info_src=(USHORT)((info_src&0x0FFF)|((USHORT)type<<12))) #define NC_SET_INSTANCE(info_src,inst) (info_src=(USHORT)((info_src&0xF0FF)|((USHORT)inst<< 8))) #define NC_SET_NUMBER(info_src,num) (info_src= ((info_src&0xFF00)|((USHORT)num ))) #define CS_RESELECT_CAUSE_CTRL_NORMAL 0 #define CS_RESELECT_CAUSE_CTRL_ABNORMAL 1 #define CS_RESELECT_CAUSE_CTRL_SCELL 2 #define CS_RESELECT_CAUSE_CS_NORMAL 3 #define CS_RESELECT_CAUSE_CTRL_DL_SIG_FAIL 4 typedef UBYTE T_CS_RESELECT_CAUSE; typedef UBYTE T_CS_DC_STATUS; #define MAX_NR_OF_NC_MVAL ((2*MAX_NR_OF_NCELL)+1) /* end constants for CS */ /* start constants for PSI */ #define CLIP_T_AVG(x) ( (x) > 25 ? 25 : (x) ) #define CLIP_ALPHA(x) ( (x) > 10 ? 10 : (x) ) #define CLIP_BS_PAG_BLKS_RES(x) ( (x) > 12 ? 0 : (x) ) #define CLIP_BS_PRACH_BLKS(x) ( (x) > 12 ? 0 : (x) ) /* end constants for PSI */ /* start constants for interference measurements */ /* used in packet transfer mode */ #define MAX_IM_TRANSFER_CHANNELS 0x07 /* used in packet idle mode */ #define MAX_IM_CHAN_EMEAS 0x01 #define MAX_IM_CHAN_PCCCH 0x01 #define MAX_IM_IDLE_CHANNELS (MAX_CHAN_IMEAS + MAX_IM_CHAN_PCCCH + MAX_IM_CHAN_EMEAS) /* maximum number of channels measured in */ /* packet idle mode */ #define CHN_ID_INVALID 0xFF /* invalid identifier index */ #define CHN_ID_EM_BASE 0x00 /* EXT_FREQUENCY_LIST identifier index base */ #define CHN_ID_PCCCH_BASE ( CHN_ID_EM_BASE + MAX_IM_CHAN_EMEAS ) /* monitored PCCCH identifier index base */ #define CHN_ID_IM_BASE ( CHN_ID_PCCCH_BASE + MAX_IM_CHAN_PCCCH ) /* INT_MEAS_CHANNEL_LIST identifier index base */ /* used in packet idle and packet transfer mode */ #define IM_I_MASK_IDL 0x01 #define IM_I_MASK_TRNS 0x02 #define IM_I_NONE 0x00 #define IM_I_IDL 0x01 #define IM_I_TRNS 0x02 #define IM_U_MASK 0x01 #define IM_U_USED 0x01 #define IM_U_UNUSED 0x00 #define MAX_IM_HOP_ARFCN 548 #define MAX_IM_HOP_ARFCN_BIT_FIELD_SIZE ( ( ( MAX_IM_HOP_ARFCN - 1 ) / 8 ) + 1 ) #define MAX_IM_CHANNELS ( MAX_IM_IDLE_CHANNELS + MAX_IM_TRANSFER_CHANNELS ) /* maxmimum number of channels which are */ /* taken into account for interference */ /* measurement resumption */ /* end constants for interference measurements */ /* start constants for extended measurements */ #define MAX_NR_OF_INSTANCES_OF_PMO 8 #define EM_MAX_STRONG_CARRIER 6 #define EM_INVLD_BSIC 0xFF #define EM_VLDTY_ARFCN_MASK 0x8000 #define EM_NON_VLD_ARFCN 0x8000 #define EM_VLD_ARFCN 0x0000 #define PMO_NONE_VLD 0x00 #define PMO_EXT_VLD 0x01 #define PMO_NC_VLD 0x02 /* end constants for extended measurements */ /* start constants for NC measurements */ /* end constants for NC measurements */ /* start constants for packet measurement report sending */ #define PMR_MSG_TYPE_LEN 6 #define PMR_TLLI_LEN 32 #define PMR_FLAG_LEN 1 #define PMR_PSI5_CHNGE_MRK_LEN 2 #ifdef REL99 #define PMR_BA_IND_USED_LEN 1 #define PMR_PSI3_CHNGE_MRK_LEN 2 #define PMO_IND_USED_LEN 1 #endif /* end constants for packet measurement report sending */ #if defined (REL99) AND defined (TI_PS_FF_EMR) /* * start constants for ENH measurements */ #define SERVING_BAND_REPORTING_DEFAULT 3 #define NCC_PERMITTED_DEFAULT 0xFF #define NOT_APPLICABLE 0xFF #define BSIC_VALID 0x1 #define BSIC_INVALID 0x0 #define NC_INVBSIC_PEMR 17 #define MSG_SIZE_PEMR 184 #define MAND_SIZE_PEMR 48 #define MAX_NR_OF_GSM_NC 96 #define REP_THRESHOLD_DEF 0xFF /* * end constants for ENH measurements */ #endif #if defined (TI_PS_FF_RTD) AND defined (REL99) /* * start constants for RTD */ #define RTD_DEFAULT_INDEX 0 #define RTD_12BIT 0x8000 #define RTD_NOT_AVAILABLE 0xFFFF /* * end constants for RTD */ #endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ /* * Number of instances of PSI */ #define MAX_NR_OF_INSTANCES_OF_PSI2 8 /* 1-8 */ #define MAX_NR_OF_INSTANCES_OF_PSI3 1 /* 1 */ #define MAX_NR_OF_INSTANCES_OF_PSI3BIS 16 /* 1-16 */ #if defined (REL99) AND defined (TI_PS_FF_EMR) #define MAX_NR_OF_INSTANCES_OF_PSI3TER 16 /* 0-16 */ #endif #define MAX_NR_OF_INSTANCES_OF_PSI4 8 /* 0-8 */ #define MAX_NR_OF_INSTANCES_OF_PSI5 8 /* 0-8 */ #ifdef REL99 #define MAX_NR_OF_INSTANCES_OF_PSI8 8 /* 0-8 */ #endif #ifdef REL99 #define PBCCH_NOT_PRESENT 0x0 /* PBCCH not present in the cell */ #define PBCCH_PRESENT 0x1 /* PBCCH present in the cell */ #endif #define NOT_SET 255 /* * Service definitions. Used to access service data with GET/SET_STATE. */ #define CTRL ctrl. #define CTRL_GLBL ctrl_glbl. /* global data, managed by CTRL, used by */ /* all GRR services */ #define TC tc. #define CPAP cpap. #define PSI psi_assigned_data. #define PG pg. #define MEAS meas. #define MEAS_IM meas_im. /* service interference measurement */ #define MEAS_EM meas_em. /* service extended measurement */ #define CS cs. #define CS_MEAS cs_meas. /* service cell re-selection measurement */ #define GFP gfp. #if defined (TI_PS_FF_RTD) AND defined (REL99) typedef USHORT T_RTD_VALUE; #endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ /* * Timer definitions (also used by GRR_PEI.C) */ typedef enum { T3134 = 0, /* handled by service CTRL */ T3158, /* handled by service CS */ T3162, /* handled by service TC */ T3168, /* handled by service TC */ T3170, /* handled by service TC */ T3172_1, /* handled by service TC */ /* T3172_2, */ /* handeld by service TC */ /* T3172_3, */ /* handeld by service TC */ /* T3172_4, */ /* handeld by service TC */ /* T3172_5, */ /* handeld by service TC */ /* T3172_6, */ /* handeld by service TC */ /* T3172_7, */ /* handeld by service TC */ T3174, /* handled by service CTRL */ T3176, /* handled by service CS */ T3178, /* handled by service MEAS */ T3186, /* handled by service TC */ T_60_SEC, /* handled by service PSI */ T_30_SEC, /* handled by service PSI */ T_10_SEC, /* handled by service PSI */ T_IM_SYNC, /* handled by service MEAS */ T15_SEC_CC, /* handled by service CS */ T_TRANS_NON_DRX, /* handled by service PG */ T_NC2_NON_DRX, /* handled by service PG */ T_COMP_PSI, /* handled by service PSI */ T_RESELECT, /* handled by service CS */ #ifdef REL99 T_POLL_TIMER, /* handled by service CTRL */ #endif TIMER_COUNT /* !!! always the last entry !!! */ } T_TIMER_INDEX; /* T3142_VALUE - assigned in message */ /* T3158_VALUE - defined by parameter or random value */ #define T3162_VALUE 5000 /* ms */ /* T3168_VALUE - assigned in system info (in GPRS Cell Options) range 500,1000,...4000ms */ /* T3172_VALUE - assigned in message */ #define T3174_VALUE 15000 /* ms */ #define T3176_VALUE 15000 /* ms */ /* T3178_VALUE - defined by parameter or random value */ #define T3186_VALUE 5000 /* ms */ #define T3134_VALUE 5000 /* ms Timer to detect the lacks of respond from the network or for unvavailable target cell*/ /* T3200_VALUE - see T3198 */ /* T_IM_SYNC_VALUE - defined by service MEAS */ #define T_10_SEC_VALUE 10000 #define T_30_SEC_VALUE 30000 #define T_60_SEC_VALUE 60000 #define T_RESELECT_VALUE 10000 /* * Service name definitions for trace purposes. The service abbrevation * (e.g. CTRL) has to be the same as above for the service definitions. */ #ifndef NTRACE #define SERVICE_NAME_CTRL "CTRL" #define SERVICE_NAME_CTRL_GLBL "CTRL_GLBL" #define SERVICE_NAME_TC "TC" #define SERVICE_NAME_CPAP "CPAP" #define SERVICE_NAME_PG "PG" #define SERVICE_NAME_MEAS "MEAS" #define SERVICE_NAME_MEAS_IM "MEAS_IM" #define SERVICE_NAME_MEAS_EM "MEAS_EM" #define SERVICE_NAME_PSI "PSI" #define SERVICE_NAME_CS "CS" #define SERVICE_NAME_CS_MEAS "CS_MEAS" #define SERVICE_NAME_GFP "GFP" #endif /* !NTRACE */ /* * Service CTRL */ #define CTRL_CELL_RESEL_NONE 0x00 /* no initiated cell re-selection */ #define CTRL_CELL_RESEL_RR 0x40 /* RR initiated cell re-selection */ #define CTRL_CELL_RESEL_GRR 0x80 /* GRR initiated cell re-selection */ #define CTRL_CELL_RESEL_NW 0xC0 /* network initiated cell re-selection */ #define CTRL_CELL_RESEL_MASK 0xC0 /* bit maks for cell re-selection indication */ #define CTRL_SUSPENSION_NO 0x00 /* no suspension */ #define CTRL_SUSPENSION_YES 0x20 /* suspension */ #define CTRL_SUSPENSION_MASK 0x20 /* bit mask for suspension indication */ /* CTRL is in normal operation */ #define CTRL_NULL 0x00 /* GPRS functionality is disabled */ #define CTRL_READY 0x01 /* GPRS functionality is enabled, but service cannot be offered */ #define CTRL_ACCESS_DISABLED 0x02 /* service can be offered but is disabled */ #define CTRL_IN_PROGRESS 0x03 /* service is offered */ /* CTRL is waiting for several confirmations */ #define CTRL_WAIT_CS_PAGE_RES 0x04 /* waiting for response to circuit-switched paging */ #define CTRL_WAIT_FOR_CNF_OF_SUSPENSION 0x05 /* waiting for suspension of GRR sevices */ #define CTRL_WAIT_RSP_4_RR_CR 0x06 /* waiting for stopping of GRR services triggered by a RR indicated cell re-selection request */ /* CTRL is processing several cell change procedures */ #define CTRL_CR (0x07|CTRL_CELL_RESEL_GRR) /* GRR has triggered a MS controlled cell re-selection */ #define CTRL_FAILED_CR 0x08 /* GRR triggered MS controlled cell re-selection has failed */ #define CTRL_RR_NC_CCO (0x09|CTRL_CELL_RESEL_NW) /* RR has triggered a network controlled cell re-selection */ #define CTRL_GRR_NC_CCO (0x0A|CTRL_CELL_RESEL_NW) /* GRR has triggered a network controlled cell re-selection */ #define CTRL_AUTO_RR_CR (0x0B|CTRL_CELL_RESEL_RR) /* RR has indicated a request for a cell re-selection */ /* GRR is suspended */ #define CTRL_SUSPENDED (0x0C|CTRL_SUSPENSION_YES) /* GRR is suspended */ #define CTRL_NO_CELL_SUSP (0x0D|CTRL_SUSPENSION_YES) /* GRR is suspended and no cell is available */ #define CTRL_ACC_ENABLED_SUSP (0x0E|CTRL_SUSPENSION_YES) /* GRR is suspended but after resume service is available */ #define CTRL_RR_CR_IN_SUSP (0x0F|CTRL_CELL_RESEL_RR|CTRL_SUSPENSION_YES) /* GRR is suspended and RR has indicated a request for a cell re-selection */ #define CTRL_CR_IN_SUSP (0x10|CTRL_CELL_RESEL_GRR|CTRL_SUSPENSION_YES) /* GRR is suspended and has triggered a cell re-selection */ #define CTRL_FAILED_CR_IN_SUSP 0x11 /* GRR is suspended and has detected a failed cell re-selection */ #define CTRL_READY_TO_PROGRESS 0x12 /* service can be offered but a cell reselection is in progress */ /* * Service TC */ #define TC_ACCESS_DISABLED 0 #define TC_CPAP 1 #define TC_PIM 2 #define TC_WAIT_ASSIGN 3 #define TC_POLLING 4 #define TC_WAIT_2P_ASSIGN 5 #define TC_CONTENTION_RESOLUTION 6 #define TC_TBF_ACTIVE 7 #define TC_SINGLE_BLOCK 8 #define TC_WAIT_STOP_TASK_CNF 9 /* * Service CPAP */ #define CPAP_IDLE 0 #define CPAP_SB_STARTED 1 #define CPAP_1P_STARTED 2 #define CPAP_WAIT_PDCH_ASSIGN 3 #define CPAP_WAIT_DEDI_SUSPEND 4 #define CPAP_WAIT_STOP_TASK_CNF 5 /* * Service PSI */ #define PSI_NULL 0 #define PSI_IDLE 1 #define PSI_TRANSFER 2 #define PSI_SUSPENDED 3 #define PSI_BCCH_IDLE 4 #define PSI_BCCH_TRANSFER 5 #define READ_COMPLETE 0x0 /* Read PSI in all PBCCH blocks */ #define READ_PSI1_IN_PSI1_REPEAT_PERIODS 0x1 /* Read PSI1 in PSI1 repeat periods */ #define PSI_IN_HR 0x2 /* PSI in high repetition rate */ #define PSI_IN_LR 0x3 /* PSI in low repetition rate */ #define PSI_IN_HR_AND_LR 0x4 /* PSI in high and low repetition rate */ #define READ_PSI1_AND_IN_HR 0x5 /* PSI in high repetition rate and PSI1 */ #define READ_PSI1_AND_IN_LR 0x6 /* PSI in low repetition rate and PSI1 */ #define READ_PSI2 0x7 /* Read PSI2 */ #define READ_PSI3_3BIS 0x8 /* Read PSI3 and PSI3bis */ #define READ_PSI4 0x9 /* Read PSI4 */ #define READ_PSI5 0xa /* Read PSI5 */ #ifdef REL99 #ifdef TI_PS_FF_EMR #define READ_PSI3BIS 0xb /* Read PSI3bis */ #define READ_PSI3TER 0xc /* Read PSI3ter */ #define READ_PSI3_3BIS_3TER 0xd /* Read PSI3, PSI3bis and PSI3ter */ #endif #define READ_PSI8 0xe /* Read PSI8. this value is used while performing partial acquisition */ #endif /* * Service PG */ #define PG_NULL 0 #define PG_IDLE 1 #define PG_TRANSFER 2 #define PG_ACCESS 3 /* * Service MEAS */ #define MEAS_NULL 0 #define MEAS_IDLE 1 #define MEAS_ACCESS 2 #define MEAS_TRANSFER 3 /* * Service MEAS_IM */ #define MEAS_IM_NULL 0 #define MEAS_IM_START 1 #define MEAS_IM_STOP_REQ 2 /* * Service MEAS_EM */ #define MEAS_EM_NULL 0 /* no activity ongoing except that timer */ /* T3178 is maybe running */ #define MEAS_EM_REP_REQ 1 /* waiting for measurement report data */ #define MEAS_EM_PMR_SENDING 2 /* measurement report is currently sent to */ /* the network */ #define MEAS_EM_PENDING 3 /* measurements are paused, e.g. TBF is */ /* active */ #define MEAS_EM_SUSPEND 4 /* measurements are suspended, e.g. RR */ /* connection establishment in progress */ /* * Service CS */ #define CS_NULL 0 /* no activity ongoing */ #define CS_IDLE 1 /* service CS in idle mode, cell re-selection */ /* and/or NC measurements are performed */ #define CS_CR_MOBILE 2 /* MS controlled cell re-selection ongoing */ #define CS_CR_NETWORK 3 /* network controlled cell re-selection */ /* ongoing */ /* * Service CS_MEAS */ #define CS_MEAS_NULL 0 /* no activity ongoing */ #define CS_MEAS_REP_REQ 1 /* waiting for measurement report data */ #define CS_MEAS_PMR_SENDING 2 /* measurement report is currently sent to */ /* the network */ /* * Service CS_DC */ #define CS_DC_DEDICATED 0 /* CS is stopped due to dedicated connection */ #define CS_DC_OTHER 1 /* CS is stopped due to other reasons */ /* * Service GFP */ #define GFP_IDLE 0 #ifdef REL99 #define GRR_PCCO_POLL 1 #endif /*==== TYPES ======================================================*/ /* * GRR global typedefs */ /* enums */ typedef enum { REL_PERFORMED, REL_RUNNING }T_RELEASE_STATE; /* * mapping of the TC disable cause * * 7 6 5 4 3 2 1 0 - bit position * | | | | | * | | | +-+-- 00 OTHER * | | | +-+-- 01 SUSPEND * | | | +-+-- 10 CR * | | | * +-+-+------ 000 OTHER * +-+-+------ 001 NORMAL * +-+-+------ 010 IMM_REL * +-+-+------ 011 NETWORK * +-+-+------ 100 ABNORMAL */ /* disable cause class */ #define DCC_OTHER 0x00 #define DCC_SUSPEND 0x01 #define DCC_CR 0x02 typedef UBYTE T_TC_DC_CLASS; /* disable cause type */ #define DCT_OTHER (0x00<<2) #define DCT_NORMAL (0x01<<2) #define DCT_IMM_REL (0x02<<2) #define DCT_NETWORK (0x03<<2) #define DCT_ABNORMAL (0x04<<2) typedef UBYTE T_TC_DC_TYPE; /* disable cause mask */ #define DCM_CLASS 0x03 #define DCM_TYPE (0x07<<2) #define TC_DC_OTHER (DCC_OTHER |DCT_OTHER ) #define TC_DC_SUSPEND_NORMAL (DCC_SUSPEND|DCT_NORMAL ) #define TC_DC_SUSPEND_IMM_REL (DCC_SUSPEND|DCT_IMM_REL ) #define TC_DC_CR_NETWORK (DCC_CR |DCT_NETWORK ) #define TC_DC_CR_NORMAL (DCC_CR |DCT_NORMAL ) /* RRGRR_CR_IND( CR_NORMAL ) */ #define TC_DC_CR_IMM_REL (DCC_CR |DCT_IMM_REL ) /* RRGRR_CR_IND( CR_ABNORMAL ) */ #define TC_DC_CR_ABNORMAL (DCC_CR |DCT_ABNORMAL) /* abnormal TBF release with cell reselection */ typedef UBYTE T_TC_DISABLE_CAUSE; typedef enum { PSI_DC_OTHER, PSI_DC_READ_PSI, PSI_DC_PBCCH_RELEASED, PSI_DC_PBCCH_ESTABLISHED } T_PSI_DISABLE_CAUSE; typedef enum { TRANSFER_NDRX, GMM_NDRX, NC2_NDRX }T_NON_DRX_TYPE; typedef enum { PACKET_MODE_NULL, PACKET_MODE_PIM, /* Packet Idle Mode */ PACKET_MODE_PAM, /* Packet Access Mode */ PACKET_MODE_PTM, /* Packet Transfer Mode */ PACKET_MODE_2P_PTM /* Packet Transfer Mode in 2P Access*/ } T_PACKET_MODE; typedef UBYTE T_TBF_TYPE; /* macros are defined in cgrlc SAP*/ typedef enum { CTRL_PTRC_NONE, CTRL_PTRC_PBCCH_ESTABLISHED, CTRL_PTRC_COMPLETE_SI_READING, CTRL_PTRC_COMPLETE_PSI_READING } CTRL_PSI_TBF_REL_CAUSE; typedef enum /* CTRL_FOLLOWING_SUSPENSION*/ { ACTIVATE_RR, /* activate RR to monitor CCCH and BCCH*/ SEND_RR_EST_REQ, /* RR has to start RR establishment */ SEND_RR_EST_RSP /* RR can accept the RR connection request*/ }CTRL_FOLLOWING_SUSPENSION; typedef enum /*PG_STATES*/ { PG_NORMAL, PG_EXTENDED, PG_REORG }PG_STATES; typedef enum /*PG_CHANNEL for CS call*/ { PG_ON_CCCH, PG_ON_PCCCH }PG_CHANNEL; typedef enum /* ACQ_TYPE*/ { NONE, PARTIAL, COMPLETE, PERIODICAL_PSI1_READING, PERIODICAL_SI13_READING, FULL_PSI_IN_NEW_CELL }ACQ_TYPE; typedef enum /* T_FA_TYPE*/ { FA_NO_CURRENT, FA_NO_NEXT, FA_BITMAP, FA_REPEAT }T_FA_TYPE; /* start enum for TC */ /* * The following definitions are used for the management of single block * sending without TBF establishment. * * TC holds a queue of size MSG_OWNER_MAX_NUM to buffer the single blocks * requested by the services. Only services MEAS and CS can request single * blocks in parallel. In case service CTRL has requested a single block, * services MEAS and CS are not allowed to request any single blocks. * * Service CS uses the same buffer as the service CTRL. Only one single block * can be stored for both services. The service MEAS has an individual buffer. * At this time only one single block can be stored for this service but we are * free to increase the size just by increasing the value of MAX_CTRL_BLK_NUM. */ #define MAX_CTRL_BLK_NUM 5 /* number of single blocks that can be stored at */ /* the same time */ #define BLK_INDEX_CTRL 0 /* Packet Cell Change Failure */ #define BLK_INDEX_CS 0 /* Packet Measurement Report (NC Measurements) */ #define BLK_INDEX_TC 1 /* Packet Resource Request (Reallocation) */ #define BLK_INDEX_MEAS 2 /* Packet Measurement Report (EXT Measurements) */ #define BLK_STATE_NONE 0 /* no control message associated */ #define BLK_STATE_ALLOCATED 1 /* control message is allocated */ #define BLK_STATE_SENT_REQ 2 /* control message is sent, waiting for response */ typedef UBYTE T_BLK_STATE; typedef UBYTE T_BLK_OWNER; /* end um for TC */ /* start enum for CPAP */ /* * The following enum will be used for IA and IAEXT */ typedef enum { E_IA_NULL, /* unforeseen mesage content*/ E_IA_SB_WITHOUT_TBF, /* Single Block without TBF Establishment */ E_IA_SB_2PHASE_ACCESS, /* Allocation for 2 Phase of 2_Phase-Access */ E_IA_UL, /* Uplink tbf Allocation */ E_IA_DCCH, /* continue on DCCH */ E_IA_TMA, /* it is the 1st of a 2 message assignment */ E_IA_TMA_SECOND, /* it is the 2nd of a 2 message assignment */ E_IA_ERROR_RA } T_EVAL_IA; typedef enum { E_IA_DL_NOT_OURS, /* message is not adressed to MS */ E_IA_DL_IGNORE, /* no effect on current tbf */ E_IA_DL_TMA, /* it is the 1st of a 2 message dl assignment */ E_IA_DL_TMA_SECOND, /* it is the 2nd of a 2 message dl assignment */ E_IA_DL_DCCH, /* continue on DCCH */ E_IA_DL_SB, /* single block downlink */ E_IA_DL_ASSIGN /* valid message send mphp_assign_req */ } T_EVAL_IA_DL; #define IA_TYPE_UL 0 /* last immediate assignment was for uplink direction */ #define IA_TYPE_DL 1 /* last immediate assignment was for downlink direction */ typedef UBYTE T_IA_TYPE; /* start enum for CTRL */ typedef enum /* T_FAILURE_SIGNAL */ { FAIL_SIG_DSF_IND, FAIL_SIG_PSI1OR_PSI13_RECEIPTION_FAILURE, FAIL_SIG_CTRL_ACCESS_BARRED } T_FAILURE_SIGNAL; /* end enum for CTRL */ /* start enum for interference measurements */ #define IM_MODE_NONE 0 /* no interf. meas. at all */ #define IM_MODE_IDLE 1 /* interf. meas. only in Packet Idle Mode */ #define IM_MODE_TRANSFER 2 /* interf. meas. only in Packet Transfer Mode */ #define IM_MODE_IDLE_TRANSFER 3 /* interf. meas. in Packet Transfer and Packet */ /* Idle Mode */ typedef UBYTE T_MEAS_IM_MODE; #define IM_TRIG_SIGNAL_NULL 0 #define IM_TRIG_SIGNAL_PAM 2 #define IM_TRIG_SIGNAL_PAUSE 3 typedef UBYTE T_MEAS_IM_TRIG_SIGNAL; #define M_IM_TRACE_INPUT_VALUE 0x01 /* trace mask for the input values */ #define M_IM_TRACE_OUTPUT_VALUE 0x02 /* trace mask for the output values */ #define M_IM_TRACE_FREQUENCY 0x04 /* trace mask for the carrier frequencies */ /* end enum for interference measurements */ /* start enum for extended measurements */ typedef enum /* T_XMEAS_ORDER */ { EM_EM0, EM_EM1, EM_RESET, EM_EMPTY } T_XMEAS_ORDER; /* end enum for extended measurements */ /* start enum for NC measurements */ typedef enum { NC_NC0 = 0, NC_NC1, NC_NC2, NC_RESET, NC_EMPTY } T_NC_ORDER; /* !!! do not start with value 0, use 1 instead !!! */ #define INFO_TYPE_PSI3 1 /* Packet System Information Type 3 */ #define INFO_TYPE_PSI3BIS 2 /* Packet System Information Type 3bis */ /* !!! value of INFO_TYPE_PSI3 shall be less than value of INFO_TYPE_PSI3BIS !!! */ #define INFO_TYPE_PMO 3 /* Packet Measurement Order */ #define INFO_TYPE_PCCO 4 /* Packet Cell Change Order */ #define INFO_TYPE_BA_BCCH 5 /* BA(BCCH) passed by RR */ typedef UBYTE T_INFO_TYPE; /* end enum for NC measurements */ /* start enum for cell re-selection */ #define CS_MODE_IDLE 0 /* entry not touched in any way */ #define CS_MODE_SELECTION_PERFORMED 1 /* entry selected as next cell to be used */ /* for cell re-selection and we have */ /* performed reading of the new cell */ typedef UBYTE T_CS_MODE; #define STAT_SYNC_NONE 0 /* not synchronised */ #define STAT_SYNC_OK 1 /* synchronised */ #define STAT_SYNC_FAILED 2 /* synchronisation failed */ typedef UBYTE T_SYNC_STATUS; #define NC_MVAL_STAT_ASSIGNED 0 /* on current BA(GPRS) list, no member */ /* of the six strongest cells */ #define NC_MVAL_STAT_PENDING 1 /* not on current BA(GPRS) list, update */ /* from RR required */ #define NC_MVAL_STAT_NONE 2 /* not on current BA(GPRS) list, no */ /* update from RR required */ typedef UBYTE T_NC_MVAL_STATUS; /* end enum for cell re-selection */ /* * Structure */ typedef struct { UBYTE num; /* Current number -identification- of the rfl*/ UBYTE list[128]; /* Buffer containing received frequencies: * This is the same structure as the T_LIST in RR.h */ } T_RFL_LST; typedef struct /* T_CR_POW_PAR */ { UBYTE gprs_rxlev_access_min; /* GPRS_RXLEV_ACCESS_MIN */ UBYTE gprs_ms_txpwr_max_cch; /* GPRS_MS_TXPWR_MAX_CCH */ } T_CR_POW_PAR; typedef struct /* T_CR_PAR_1 */ { T_CR_POW_PAR cr_pow_par; /* GPRS power parameter */ UBYTE v_hcs_par; /* valid flag for HCS structure */ T_hcs_par hcs_par; /* HCS structure */ } T_CR_PAR_1; typedef struct /* T_SCELL_PAR */ { UBYTE cell_ba; UBYTE exc_acc; T_CR_PAR_1 cr_par_1; UBYTE multi_band_rep; } T_SCELL_PAR; typedef struct /* T_UL_TBF */ { UBYTE tfi; UBYTE st_tfi; /* tfi will be used after starting time elapsed */ UBYTE mac_mode; UBYTE polling_bit; UBYTE ts_mask; /* current timeslot mask */ UBYTE ts_usage; /* new assigned timeslot mask, becomes valid after starting time has elapsed */ UBYTE nts; /* number of timeslots allocated for tbf */ UBYTE cs_mode; UBYTE tlli_cs_mode; UBYTE ti; ULONG tbf_start_fn; USHORT rlc_db_granted; UBYTE access_type; UBYTE nr_blocks; UBYTE prio; UBYTE prim_type; USHORT peak; USHORT rlc_oct_cnt; } T_UL_TBF; typedef struct /* T_DL_TBF */ { ULONG tbf_start_fn; UBYTE tfi; UBYTE st_tfi; /* tfi will be used after starting time elapsed */ UBYTE rlc_mode; UBYTE mac_mode; UBYTE polling_bit; UBYTE ctrl_ack_bit; UBYTE ts_mask; /* current timeslot mask */ UBYTE ts_usage; /* new assigned timeslot mask, becomes valid after starting time has elapsed */ UBYTE nts; /* number of timeslots allocated for tbf */ BOOL t3192; /* if true t3192 is running, else timer is not running, triggerd by GRLC*/ UBYTE trans_id; /* transaction id */ } T_DL_TBF; typedef UBYTE T_RXLEV_AVG; #if defined (REL99) AND defined (TI_PS_FF_EMR) /* Start Enhanced Measurement Data Structures */ typedef struct /* T_GPRS_REPT_PRIO_DESC */ { UBYTE num_cells; /* No. of cells for which report priority is available */ UBYTE rept_prio[MAX_NR_OF_GSM_NC]; /* Report priority for cells in BA */ } T_GPRS_REPT_PRIO_DESC; /* * Enhanced data for reporting */ typedef struct /* T_ENH_REP_DATA */ { UBYTE rep_threshold; /* Reporting threshold */ UBYTE rep_offset; /* Reporting offset */ } T_ENH_REP_DATA; typedef struct /* T_GRR_ENH_PARA */ { UBYTE idx; /* to get on which instance of message */ /* the parameters are received */ UBYTE rept_type; /* PMR or PEMR */ UBYTE rep_rate; /* Reporting rate */ UBYTE inv_bsic_enabled; /* Is Invalid BSIC reporting enabled? */ UBYTE ncc_permitted; /* NCC permitted bitmap */ UBYTE multiband_rep; /* Number of cells, in each non-serving cell band, to be reported */ UBYTE servingband_rep; /* Number of cells, in serving cell band, to be reported */ UBYTE scale_order; /* scale order */ T_ENH_REP_DATA enh_rep_data[MAX_NUM_BANDS]; /* Enhanced data for reporting */ T_GPRS_REPT_PRIO_DESC gprs_rept_prio_desc; /* Report priority */ } T_GRR_ENH_PARA; /* / * Used to store GSM NC list formed in RR, when PBCCH is absent * / typedef struct / * T_BA_BCCH_NCELL_INFO * / { UBYTE index; / * index used for measurement reporting * / USHORT arfcn; / * Radio frequency * / UBYTE bsic; / * BSIC * / } T_BA_BCCH_NCELL_INFO; */ typedef struct /* T_MEAS */ { USHORT arfcn; UBYTE rxlev; /* Actually, this is RLA_P */ } T_MEAS; /* To form a ARFCN-RXLEV pair for coming out with list in desc order of RXLEV */ typedef struct /* T_ENH_STRNG_ARFCN_LIST */ { T_MEAS meas[MAX_NR_OF_NCELL]; UBYTE num; } T_ENH_STRNG_ARFCN_LIST; typedef struct /* T_BSIC */ { UBYTE bsic; /* Decoded BSIC */ UBYTE status; /* Valid, if present in BA-GPRS, Else, Invalid. */ } T_BSIC ; typedef struct /* T_ENH_CELL_LIST */ { UBYTE index; /* BA-GPRS Index */ USHORT arfcn; T_BSIC bsic; UBYTE rla_p; /* Actually, this is used for ENH meas criteria */ T_RXLEV_AVG rxlev_avg; /* running avg of RXLEV which is reported */ UBYTE rept_prio; } T_ENH_CELL_LIST; /* typedef struct / * T_ENH_BIN * / { UBYTE num_valid; / * No. of cells that are eligible for ENH measurement reporting * / T_ENH_CELL_LIST *enh_cell_list[MAX_NR_OF_NCELL]; } T_ENH_BIN; */ typedef struct /* T_ENH_BIN */ { UBYTE num_valid; /* No. of cells that are eligible for ENH measurement reporting */ UBYTE enh_index[MAX_NR_OF_NCELL]; } T_ENH_BIN; typedef struct /* T_PEMR_PARAMS */ { UBYTE scale_used; /* Scale used for RXLEV before ENH reporting */ } T_PEMR_PARAMS; /* End Enhanced Measurement Data Structures */ #endif typedef struct /* T_IMSI */ { UBYTE number_of_digits; /* number of valid digits in the following digit array */ UBYTE digit[MAX_IMSI_DIGITS];/* here are the valid imsi digits stored: received from GMM */ }T_IMSI; typedef struct /* T_MS_IDENT */ { ULONG ul_tlli; /* uplink tlli used for packet resource request and contention resolution */ ULONG received_tlli; /* tlli with which the MS is addressed */ ULONG old_tlli; /* old tlli received from GMM*/ ULONG new_tlli; /* new tlli received from GMM*/ ULONG old_ptmsi; /* current ptmsi paging */ ULONG new_ptmsi; /* candidate ptmsi stored: for paging */ ULONG tmsi; /* here is the valid tmsi stored: for paging */ T_IMSI imsi; /* imsi structure is stored in this parameter*/ T_rai rai; /* routing area code received from GMM to be passed to RR */ } T_MS_IDENT; typedef struct /* T_MS_DATA */ { USHORT access_ctrl_class; /* */ UBYTE class_of_mode; /* A, BC, BG, CC, CG */ USHORT split_pg_cycle; /* SPLIT_PAGING_CYCLE */ UBYTE reverts_NMO_III; /* Class B mobile reverts into Class C mobile in NMO III or not */ UBYTE tbf_mon_ccch; /* monitoring of CCCH during TBF allowed (TRUE) or not (FALSE) */ } T_MS_DATA; typedef struct /* T_SCELL */ { USHORT arfcn; /* ARFCN of the serving cell */ UBYTE bsic; /* BSIC of the serving cell */ BOOL pbcch_present; /* this value will be set by the procedure */ /* which handles the SI13 message */ } T_SCELL; typedef struct /* T_PBCCH */ { T_SCELL bcch; /* frequency and BSIC of BCCH carrier */ T_pbcch_des pbcch_des; /* this value contains the PBCCH description */ } T_PBCCH; typedef struct /* T_SPGC_CCCH_SUPP */ { UBYTE ms_supp; /* mobile station support of split */ /* paging cycle on CCCH */ UBYTE nw_supp; /* network support of split paging */ /* cycle on CCCH */ }T_SPGC_CCCH_SUPP; typedef struct /* T_NETWORK_CONTROL */ { T_SPGC_CCCH_SUPP spgc_ccch_supp; /* SPLIT_PG_CYCLE_SUPPORT: whether it is supported or not */ UBYTE priority_access_thr; /* packet access to the network according to priority level */ UBYTE bs_pa_mfrms; /* number of 51 multiframes between */ /* transmission of paging messages */ } T_NETWORK_CONTROL; typedef enum /* T_CR_IND_RETURN */ { CR_IND_RETURN_NONE, CR_IND_RETURN_RESPONSE, CR_IND_RETURN_COMPLETE } T_CR_IND_RETURN; typedef struct /* T_RR_STATES */ { BOOL monitoring_stopped; /* whether the monitoring on CCCH is released or not */ T_CR_IND_RETURN cr_ind_return; /* cell reselection started or not */ }T_RR_STATES; typedef enum /* T_GMM_STATES */ { STANDBY_STATE, /* GMM is in stand by state */ READY_STATE /* GMM is in ready state */ }T_GMM_STATES; typedef struct /* T_PCCCH: hopping and non hopping*/ { BOOL is_static; /* indicates whether the static parameters are valid or not*/ UBYTE tsc; /* common*/ UBYTE tn; /* common*/ USHORT arfcn; UBYTE maio; UBYTE ma_num; /* Mobile Allocation number*/ }T_PCCCH; typedef struct /* T_PAGING_GROUP */ { UBYTE kc; /* number of PCCCHs [1...16]*/ T_PCCCH pccch[MAX_PCCCH_DES]; /* this structure contains ARFCN, TSC, TN, MAIO (non) hopping*/ }T_PAGING_GROUP; typedef struct /* T_EXT_FREQ_LIST */ { UBYTE number; USHORT freq[RRGRR_MAX_ARFCN_EXT_MEAS]; } T_EXT_FREQ_LIST; typedef struct /* T_XMEAS_EM1_PARAM */ { UBYTE reporting_type; UBYTE ncc_permitted; UBYTE int_frequency; /* is set to NOT_SET, if no data available*/ UBYTE reporting_period; } T_XMEAS_EM1_PARAM; typedef struct /* T_XMEAS_EM1 */ { T_XMEAS_EM1_PARAM param; T_EXT_FREQ_LIST list; } T_XMEAS_EM1; typedef struct /* T_XMEAS */ { UBYTE idx; /* to get on which instance of message */ /* the parameters are received */ T_XMEAS_ORDER em_order_type; T_XMEAS_EM1 em1; } T_XMEAS; typedef struct /*T_int_meas_chan_lst*/ { UBYTE v_arfcn; /* valid-flag for arfcn */ USHORT arfcn; /* ARFCN */ UBYTE v_ma_num_maio; /* valid-flag for ma and maio */ UBYTE ma_num; /* MA_NUMBER */ UBYTE maio; /* MAIO */ UBYTE ts_alloc; /* TIMESLOT_ALLOCATION */ } T_int_meas_chan_lst; typedef struct /* T_si13_pbcch_loc*/ { UBYTE v_si13_location; /* valid flag for si13 location. If set: si13_location is valid. * Otherwise pbcch_location and psi1_repeat_period are valid. */ UBYTE si13_location; UBYTE pbcch_location; UBYTE psi1_repeat_period; } T_si13_pbcch_loc; typedef struct { U8 stat; /* Status of RLA_P value */ U8 lev; /* Received signal level measurement. */ } T_rla_p; typedef struct /* T_CR_CRITERIONS */ { SHORT c1; /* path loss criterion */ SHORT c31; /* signal level threshold criterion */ SHORT c32; /* cell ranking criterion */ } T_CR_CRITERIONS; //typedef UBYTE T_RXLEV_AVG; typedef struct /* T_scell_info */ { T_rla_p rla_p; /* running average of receive signal level */ T_RXLEV_AVG rxlev_avg; /* running average of RXLEV value */ T_CR_CRITERIONS cr_crit; /* cell re-selection criterions */ UBYTE cell_barred; /* in case CS is requested to re-select */ /* a new serving cell, this flag avoid */ /* indentifying the current serving cell */ /* as the best one and suppress re- */ /* selection */ } T_scell_info; typedef struct /* T_SYNC */ { T_SYNC_STATUS status; /* synchronisation status */ UBYTE sync_failed_cnt; /* number of failed synchronisation attempts */ } T_SYNC; typedef struct /* T_SYNC_INFO */ { T_SYNC sync; /* synchronisation */ UBYTE bsic; /* BSIC */ } T_SYNC_INFO; typedef struct /* T_CR_OFFSET */ { UBYTE gprs_temp_offset; /* GPRS_TEMPORARY_OFFSET */ UBYTE gprs_penalty_time; /* GPRS_PENALTY_TIME */ } T_CR_OFFSET; typedef struct /* T_CR_PAR */ { UBYTE cell_ba; /* CELL_BAR_ACCESS_2 */ UBYTE exc_acc; /* EXC_ACC */ UBYTE same_ra_scell; /* SAME_RA_AS_SERVING_CELL */ T_CR_PAR_1 cr_par_1; /* basic cell re-selection parameter */ T_CR_OFFSET cr_offset; /* parameter for GPRS temporary offset */ UBYTE gprs_resel_off; /* GPRS_RESELECT_OFFSET */ UBYTE v_si13_pbcch; /* whether SI13 PBCCH location is present or not * If not included, SI3 and SI4 in the neighbour * cell indicates if the neighbour cell supports GPRS */ T_si13_pbcch_loc si13_pbcch; /* SI13_PBCCH_LOCATION structure */ } T_CR_PAR; typedef USHORT T_INFO_SRC; typedef struct /* T_NC_MVAL, measured values of one neighbour cell */ { T_rla_p rla_p; /* running average of receive signal level */ T_RXLEV_AVG rxlev_avg; /* running average of RXLEV value */ T_SYNC_INFO sync_info; /* information about synchronisation */ USHORT arfcn; /* radio frequency */ T_NC_MVAL_STATUS status; /* status of the entry */ } T_NC_MVAL; typedef struct /* T_NC_MVAL_LIST */ { T_NC_MVAL nc_mval[MAX_NR_OF_NC_MVAL]; } T_NC_MVAL_LIST; typedef struct /* T_ncell_info */ { UBYTE index; /* index used for measurement reporting */ T_INFO_SRC info_src; /* indicates which air interface message */ /* was used to carry neighbour cell information */ USHORT arfcn; /* Radio frequency */ UBYTE bsic; /* BSIC */ UBYTE v_cr_par; /* indicates whether cell re-selection parameter are valid */ T_CR_PAR cr_par; /* cell re-selection parameter */ #if defined (REL99) AND defined (TI_PS_FF_EMR) UBYTE last_rxlev; /* RXLEV from the previous rep period */ UBYTE rep_count; /* this is used to get how many times a cell in enhanced neighbour cell list is reported. Will be of use when reporting low priority cells at reduced rate */ #endif } T_ncell_info; typedef struct /* T_NC_CHNG_MRK */ { UBYTE prev; /* old change mark value */ UBYTE curr; /* new change mark value */ } T_NC_CHNG_MRK; typedef struct /* T_NC_PARAM */ { T_NC_CHNG_MRK chng_mrk; /* change mark */ UBYTE idx; /* to get on which instance of message */ /* the parameters are received */ T_NC_ORDER ctrl_order; /* NETWORK_CONTROL_ORDER, NC0, NC1, NC2, RESET */ UBYTE non_drx_per; /* NC_NON_DRX_PERIOD */ UBYTE rep_per_i; /* NC_REPORTING_PERIOD_I */ UBYTE rep_per_t; /* NC_REPORTING_PERIOD_T */ } T_NC_PARAM; typedef struct /* T_NC_LIST */ { T_NC_CHNG_MRK chng_mrk; /* change mark */ UBYTE number; /* number of neighbour cells */ T_ncell_info info[MAX_NR_OF_NCELL]; /* neighbour cell info */ } T_NC_LIST; #if defined (REL99) AND defined (TI_PS_FF_EMR) typedef struct /* T_BA_BCCH_NC_LIST */ { UBYTE number; /* number of neighbour cells */ T_ncell_info info[MAX_NR_OF_NCELL]; /* neighbour cell info */ } T_BA_BCCH_NC_LIST; #endif typedef struct /* T_NCMEAS */ { T_NC_PARAM param; T_NC_LIST list; } T_NCMEAS; typedef struct /* T_NC_RFREQ_LIST */ { UBYTE number; UBYTE idx[MAX_NR_OF_NCELL]; } T_NC_RFREQ_LIST; typedef struct /* T_NCMEAS_EXTENDED */ { T_NCMEAS ncmeas; T_NC_RFREQ_LIST rfreq; #if defined (REL99) AND defined (TI_PS_FF_EMR) UBYTE psi3_cm; /* PSI3 CM received in PCCO */ UBYTE ba_ind; /* BA_IND received in PCCO */ UBYTE pmo_ind; /* PMO sequence number */ #endif } T_NCMEAS_EXTENDED; typedef struct /* T_CNT_NC_SIX_STRGST */ { UBYTE strgst; /* number of carriers which belongs to the */ /* strongest, valid RLA_P is required */ UBYTE candid; /* number of carriers which belongs to the */ /* strongest plus candidates which may */ /* become member of the strongest, available */ /* but not necessarily valid RLA_P is */ /* required */ } T_CNT_NC_SIX_STRGST; typedef struct /* T_NC_SIX_STRGST */ { UBYTE idx; T_CS_MODE mode; /* indicates the mode of an individual entry */ /* of the list of the six strongest cells */ ULONG avail_time; /* time when inserted in list */ T_CR_CRITERIONS cr_crit; /* cell re-selection criterions */ } T_NC_SIX_STRGST; typedef struct /* T_NC_REF_LIST */ { T_NC_PARAM *param; #if defined (REL99) AND defined (TI_PS_FF_EMR) T_GRR_ENH_PARA *enh_param; #endif UBYTE number; T_ncell_info *info[MAX_NR_OF_NCELL+1]; /* there are MAX_NR_OF_NCELL carriers for */ /* MS controlled cell re-selection and one for */ /* NW controlled in case the selected cell is */ /* not in the neighbour cell list */ } T_NC_REF_LIST; #if defined (REL99) AND defined (TI_PS_FF_EMR) typedef struct /* T_BA_BCCH_NC_REF_LIST */ { UBYTE number; T_ncell_info *info[2*MAX_NR_OF_NCELL]; } T_BA_BCCH_NC_REF_LIST; #endif /*start of structs for GFP */ typedef struct { U8 msg_type; U8 rrbp; U8 sp; U8 usf; U8 v_rbsn; U8 rbsn; U8 rti; U8 fs; U8 ac; U8 pr; U8 tfi; U8 d; } T_D_CTRL; typedef struct /* T_D_HEADER*/ { UBYTE payload; /* deceides if the downlink block is a data or control block*/ T_D_CTRL d_ctrl; /* saves the header of a dl rlc control block*/ UBYTE * ptr_block; UBYTE pctrl_ack; /* value sent with packet control acknowledgement */ } T_D_HEADER; typedef struct { USHORT l_buf; USHORT o_buf; UBYTE buf [BYTE_UL_CTRL_BLOCK]; } T_CS1BUF; typedef struct { USHORT l_buf; USHORT o_buf; UBYTE buf [2 * BYTE_UL_CTRL_BLOCK]; /* CAN's suggestion never more then 2 blocks */ /* or 8 blocks? ID's suggestion 'B_SIZE_D_PAGING_REQ\8+1' */ } T_CTRLBUF; typedef struct /* T_CTRL_BLK */ { UBYTE rbsn; UBYTE rti; ULONG T3200; T_CS1BUF ctrl_blk; }T_CTRL_BLK; typedef struct /* T_SEG_CTRL_BLK */ /*saves the first part of segmented control blocks*/ { UBYTE next; T_CTRL_BLK blk[SEG_CTRL_BLOCK_SIZE]; }T_SEG_CTRL_BLK; typedef struct /* parameterts of one fixed alloction*/ { T_p_fixed_alloc alloc; ULONG alloc_start_fn; ULONG alloc_end_fn; UBYTE final_alloc; } T_FIX_ALLOC; typedef struct /* fixed alloction control during uplink tbf*/ { T_FA_TYPE fa_type; T_FIX_ALLOC current_alloc; BOOL repeat_alloc; UBYTE ts_overr; UBYTE dl_ctrl_ts; /* downlink control timeslot */ } T_FA_CONTROL; typedef struct /* T_COMPLETE_ACQ */ { BOOL needed; /* complete acquisition needed???*/ BOOL psi1_ok; /* PSI1 complete read?*/ BOOL psi2_ok; /* PSI2 complete read?*/ BOOL made_at_least_one_attempt; /* made at least one attempt? */ }T_COMPLETE_ACQ; typedef struct /* T_PSI_STATE*/ { UBYTE state; /* NEEDED, RECEIPT_OK etc.*/ }T_PSI_STATE; typedef struct /* T_PSI1_PARAMS */ { UBYTE pbcch_change_mark; /**/ UBYTE psi_change_field; /**/ UBYTE psi_cnt_lr; /*low repetition rate*/ UBYTE psi_cnt_hr; /*high repetition rate*/ UBYTE psi1_repeat_period; /**/ BOOL psi_status_supported; /*Checks whether the network supports PSI STATUS message or not*/ BOOL first_psi1; /*whether the received PSI1 is the first one or not*/ }T_PSI1_PARAMS; typedef struct /* T_PSI2_PARAMS */ { UBYTE psi2_change_mark; /**/ UBYTE psi2_count; /**/ UBYTE instances[MAX_NR_OF_INSTANCES_OF_PSI2 + 1]; /*used for checking the consistency of PSI2. instances[0]: number of instances*/ }T_PSI2_PARAMS; typedef struct /* T_PSI3_PARAMS */ { UBYTE psi3_change_mark; /**/ UBYTE psi3_bis_count; /**/ }T_PSI3_PARAMS; typedef struct /* T_PSI3bis_PARAMS */ { UBYTE psi3bis_change_mark; /**/ UBYTE psi3bis_count; /**/ UBYTE psi3bis_index; UBYTE instances[MAX_NR_OF_INSTANCES_OF_PSI3BIS + 1]; /*used for checking the consistency of PSI3bis. instances[0]: number of instances*/ }T_PSI3BIS_PARAMS; #if defined (REL99) AND defined (TI_PS_FF_EMR) typedef struct /* T_PSI3ter_PARAMS */ { UBYTE psi3ter_change_mark; /**/ UBYTE psi3ter_count; /**/ UBYTE prev_psi3ter_index; UBYTE psi3ter_index; UBYTE instances[MAX_NR_OF_INSTANCES_OF_PSI3TER + 1]; /*used for checking the consistency of PSI3ter. instances[0]: number of instances*/ }T_PSI3TER_PARAMS; #endif typedef struct /* T_PSI4_PARAMS */ { UBYTE psi4_change_mark; /**/ UBYTE psi4_count; /**/ UBYTE psi4_index; UBYTE instances[MAX_NR_OF_INSTANCES_OF_PSI4 + 1]; /*used for checking the consistency of PSI4. instances[0]: number of instances*/ }T_PSI4_PARAMS; typedef struct /* T_EXT_START_STOP */ { UBYTE start; UBYTE stop; } T_EXT_START_STOP; typedef struct /* T_PSI5_PARAMS */ { UBYTE psi5_change_mark; /**/ UBYTE psi5_count; /**/ UBYTE psi5_index; UBYTE instances[MAX_NR_OF_INSTANCES_OF_PSI5 + 1]; /*used for checking the consistency of PSI5. instances[0]: number of instances*/ T_EXT_START_STOP idx[MAX_NR_OF_INSTANCES_OF_PSI5]; /* used for sorting the EXT frequency lists */ #if defined (REL99) AND defined (TI_PS_FF_EMR) BOOL v_enh_rep_param_struct; /* Will be set if ENH params are present */ #endif }T_PSI5_PARAMS; #ifdef REL99 typedef struct /* T_PSI8_PARAMS */ { UBYTE psi8_change_mark; /**/ UBYTE psi8_count; /**/ UBYTE psi8_index; UBYTE instances[MAX_NR_OF_INSTANCES_OF_PSI8 + 1];/*used for checking the consistency of PSI8. instances[0]: number of instances*/ }T_PSI8_PARAMS; #endif typedef struct /* T_PSI13_PARAMS */ { UBYTE bcch_change_mark; /**/ UBYTE si13_change_mark; /**/ }T_PSI13_PARAMS; typedef struct { UBYTE Rx; UBYTE Tx; UBYTE Sum; UBYTE Ttb; UBYTE Tra; } T_MS_CLASS_CAP; typedef struct { UBYTE ta_valid; /* 1: valid ta value present */ UBYTE ta_value; /* store recent value */ UBYTE ul_ta_i; /* store uplink ta index */ UBYTE ul_ta_tn; /* store uplink ta timeslot */ UBYTE dl_ta_i; /* store downlink ta index */ UBYTE dl_ta_tn; /* store downlink ta timeslot */ UBYTE l1_ta_value; /* ta_value stored in l1 */ UBYTE l1_ta_i; /* ta_index stored in l1 */ UBYTE l1_ta_tn; /* ta_timeslot stored in l1 */ } T_TA_PARAMS; /* structure for service internal data */ /* start structs for CS */ typedef struct { UBYTE cnt; /* number of measurements */ SHORT acc; /* accumulated measurement results */ USHORT rpt_prd; /* reporting period */ } T_MEAS_RSLT; typedef struct { BOOL ovrflw; /* indicates whether more than */ /* CS_MAX_MEAS_RSLT measurement */ /* results are already collected */ UBYTE loi; /* last occupied index */ T_MEAS_RSLT meas[CS_MAX_MEAS_RSLT]; /* measurement results */ } T_RLA_P_DATA; typedef USHORT T_RXLEV_DATA_NBR; typedef ULONG T_RXLEV_DATA_ACC; typedef struct { T_RXLEV_DATA_NBR nbr; /* number of accumulated RXLEV values */ T_RXLEV_DATA_ACC acc; /* accumulated RXLEV values */ } T_RXLEV_DATA; typedef struct { USHORT arfcn; /* BCCH carrier of neighbour cell */ T_RLA_P_DATA rla_p_data; /* raw data for deriving the RLA_P */ T_RXLEV_DATA rxlev_data; /* raw data for deriving the RXLEV */ /* average for packet measurement */ /* reporting */ } T_CELL; typedef struct { UBYTE c_cell; /* number of neigbhour cells */ T_CELL cell[MPHP_NUMC_BA_GPRS_SC]; /* array of neighbour cells */ } T_NC_DATA; typedef struct /* T_CTRL_DATA */ { UBYTE state; UBYTE last_state; /* last state of CTRL: needed in case of handling circuit switched call*/ T_RR_STATES rr_state;/*the state of the RR part: we may remove this variable and substitude it with another one*/ PG_CHANNEL cs_page_channel; /* on which channel the MS was paged for CS call*/ CTRL_FOLLOWING_SUSPENSION after_suspension; /* SZML-GLBL/009 */ CTRL_PSI_TBF_REL_CAUSE psi_tbf_rel_cause; UBYTE imm_rel; USHORT pcc_arfcn; USHORT old_arfcn; UBYTE pcc_bsic; UBYTE old_bsic; UBYTE is_susp_needed; /* indicates whether suspension has been needed or not*/ UBYTE new_cell_responded; BOOL parked_rrgrr_cr_ind; #ifdef REL99 UBYTE poll_for_msg; /* Values 0-Invalid, 1-PCCO */ T_D_CELL_CHAN_ORDER pcco; #endif #ifndef NTRACE char *name; char *state_name; #endif } T_CTRL_DATA; typedef struct /* T_CTRL_GLBL_DATA */ { T_GLBL_PCKT_MODE state; T_CTRL_TASK ctrl_task; #ifndef NTRACE char *name; char *state_name; #endif } T_CTRL_GLBL_DATA; typedef struct /* T_UL_CTRL_BLOCK */ { UBYTE owner; T_BLK_STATE state; UBYTE data[BYTE_UL_CTRL_BLOCK]; } T_UL_CTRL_BLOCK; typedef UBYTE T_BLK_INDEX; typedef struct /* T_UL_CTRL_BLOCK_ARRAY */ { T_UL_CTRL_BLOCK blk[MAX_CTRL_BLK_NUM]; T_BLK_INDEX seq[MAX_CTRL_BLK_NUM]; } T_UL_CTRL_BLOCK_ARRAY; typedef struct /* T_EVAL_ASSIGN_PARAM */ { UBYTE ccch_read; T_TBF_TYPE tbf_type; UBYTE state; } T_EVAL_ASSIGN_PARAM; typedef void ( * T_TC_DISABLE_CALLBACK_FUNC )( void ); typedef struct /* T_FREQ_SET */ { T_p_frequency_par freq_par; /* frequency parameter */ UBYTE tsc; /* training sequence code */ } T_FREQ_SET; typedef struct /* T_TC_DATA */ { UBYTE state; T_TC_DISABLE_CALLBACK_FUNC disable_callback_func; UBYTE disable_class; UBYTE dcch_present; UBYTE ra_once_sent; UBYTE n_acc_req; /* number of sent packet access request in current access procedure */ BOOL sending_req; /* sending of packet access requests in process */ UBYTE v_sb_without_tbf; T_UL_CTRL_BLOCK_ARRAY ul_ctrl_blk; /* holds all relevant information for */ /* sending uplink control blocks */ T_FA_CONTROL fa_ctrl; /* handles the fixed allocation parameters during uplink tbf*/ UBYTE two_2p_w_4_tbf_con; /* if true TC waits for TBF_CON after 2 phase access:*/ /* needed to abort single block procedure:default is true */ UBYTE num_of_rels_running; /* number releas confirms that have to be received */ UBYTE last_rec_nb_id; /* assignment id of single block downlink assignment*/ ULONG last_rec_nb_fn; /* fn starting time(receive fn numer) of single block dl assignment*/ T_EVAL_ASSIGN_PARAM last_eval_assign; T_D_DL_ASSIGN *p_assign; /* pointer to dynamically allocated memory */ T_TBF_TYPE last_tbf_type; BOOL v_freq_set; /* frequency params from an assignment are stored */ T_FREQ_SET freq_set; #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH BOOL tbf_est_pacch; #endif #ifdef _SIMULATION_ UBYTE res_random; #endif #ifndef NTRACE char *name; char *state_name; #endif } T_TC_DATA; typedef struct /* T_EVAL_IA_DL_PARAM */ { UBYTE state; T_EVAL_IA_DL eval_ia_dl; } T_EVAL_IA_DL_PARAM; typedef struct /* T_EVAL_IA_UL_PARAM */ { T_EVAL_IA eval_ia; } T_EVAL_IA_UL_PARAM; typedef union /* T_EVAL_IA_UNION */ { T_EVAL_IA_UL_PARAM param_ul; T_EVAL_IA_DL_PARAM param_dl; } T_EVAL_IA_UNION; typedef struct /* T_CPAP_DATA */ { UBYTE state; T_TBF_TYPE new_tbf_type; T_D_PDCH_ASS_CMD pdch_ass_cmd; UBYTE v_tma_ia; T_D_IMM_ASSIGN tma_ia; /* for 2 message assignments */ /* parameters from the first */ /* have to be stored until */ /* 2nd message has arrived */ T_IA_TYPE last_ia_type; T_EVAL_IA_UNION last_eval_ia; T_D_IMM_ASSIGN *p_d_imm_assign; /* pointer to dynamically allocated memory */ #ifndef NTRACE char *name; char *state_name; #endif } T_CPAP_DATA; /* * The service PSI holds its state in a variable assigned to one of * the serving cell databases (either sc_db_1 or sc_db_2). * This is used to simplify the procedure of returning to the old cell * in case it is not possible to access the cell choosen for cell * re-selection. */ typedef struct /* T_PSI_ASSIGNED_DATA */ { UBYTE state; #ifndef NTRACE char *name; char *state_name; #endif } T_PSI_ASSIGNED_DATA; /* * for more information see comment related to structure T_PSI_ASSIGNED_DATA */ typedef struct /* T_PSI_DATA */ { UBYTE last_psi_state; UBYTE is_start_of_10_sec_allowed; /* Indicates whether the starting of 10 second timer is allowed or not*/ BOOL is_pbcch_req_needed; /*PBCCH req. waiting for perform*/ BOOL is_pbcch_req_allowed; /*PBCCH req. allowed due to transition rules or not*/ UBYTE reading_type; BOOL v_nc_param; UBYTE psi2_pos[MAX_NR_OF_INSTANCES_OF_PSI2]; #if defined (REL99) AND defined (TI_PS_FF_EMR) UBYTE psi3_set_pos[MAX_NR_OF_INSTANCES_OF_PSI3TER+ MAX_NR_OF_INSTANCES_OF_PSI3BIS+ MAX_NR_OF_INSTANCES_OF_PSI3]; /* contains PSI3, 3bis and 3ter */ #else UBYTE psi3bis_pos[MAX_NR_OF_INSTANCES_OF_PSI3BIS+ MAX_NR_OF_INSTANCES_OF_PSI3]; /*contains PSI3 and 3bis*/ #endif UBYTE psi4_pos[MAX_NR_OF_INSTANCES_OF_PSI4]; UBYTE psi5_pos[MAX_NR_OF_INSTANCES_OF_PSI5]; #ifdef REL99 UBYTE psi8_pos[MAX_NR_OF_INSTANCES_OF_PSI8]; #endif T_NC_PARAM nc_param; #if defined (REL99) AND defined (TI_PS_FF_EMR) T_GRR_ENH_PARA enh_param; /* Temporary storage for enhanced measurement parameters received from PSIs */ #endif #if defined (TI_PS_FF_RTD) AND defined (REL99) T_RTD_VALUE rtd[MAX_NR_OF_NCELL];/* RTD values for the neighbour cell synchronisation */ #endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ } T_PSI_DATA; typedef struct /* T_PG_DATA */ { UBYTE state; /* some parameters needed for RR establishment request*/ UBYTE ch_needed; /* channel needed field*/ UBYTE v_emlpp_prio; /* valid flag for emlpp_priority*/ UBYTE emlpp_prio; /* value of eMLPP_PRIORITY*/ UBYTE type; /* type of paging for rr est: IMSI, TMSI*/ USHORT initial_dsc; USHORT dsc; UBYTE is_l1_ref_tn_changed; UBYTE nmo; /* network mode of operation for paging */ T_PACKET_MODE packet_mode; #ifndef NTRACE char *name; char *state_name; #endif } T_PG_DATA; typedef USHORT T_C_INDEX; typedef USHORT T_C_VALUE; typedef struct /* T_C_FILTER */ { T_C_VALUE value; /* current C value */ T_C_INDEX index; /* iteration index */ } T_C_FILTER; typedef struct /* T_MEAS_DATA */ { UBYTE state; UBYTE pwr_offset; /* POWER OFFSET parameter used */ /* by a DCS 1800 Class 3 MS */ T_C_FILTER c_filter; /* filtered C value */ #ifndef NTRACE char *name; char *state_name; #endif } T_MEAS_DATA; typedef USHORT T_IM_GAMMA; typedef struct /* T_MEAS_IM_GAMMA */ { UBYTE index; /* iteration index */ UBYTE m_gamma; /* multi-flag */ T_IM_GAMMA gamma; /* filtered interference level values */ LONG remain_time; /* remaining time to run until */ /* timer T_IM_SYNC expires */ } T_MEAS_IM_GAMMA; typedef UBYTE T_MEAS_IM_HOP_ARFCN_BIT_FIELD[MAX_IM_HOP_ARFCN_BIT_FIELD_SIZE]; typedef struct /* T_MEAS_IM_HOP_PARAM */ { UBYTE hsn; UBYTE maio; T_MEAS_IM_HOP_ARFCN_BIT_FIELD arfcn_bit_field; } T_MEAS_IM_HOP_PARAM; typedef union /* T_MEAS_IM_ALLOC */ { USHORT arfcn; T_MEAS_IM_HOP_PARAM hop_param; } T_MEAS_IM_ALLOC; typedef struct /* T_MEAS_IM_CARRIER */ { BOOL hopping; T_MEAS_IM_ALLOC alloc; } T_MEAS_IM_CARRIER; typedef struct /* T_MEAS_IM_FILTER */ { UBYTE used; /* indicates whether the filter is used */ T_MEAS_IM_GAMMA i_level [CGRLC_MAX_TIMESLOTS]; /* interference level for each timeslot */ T_MEAS_IM_CARRIER carrier; /* carrier used for measurement */ } T_MEAS_IM_FILTER; typedef struct /* T_MEAS_IM_CHANNEL */ { UBYTE index; /* actual channel that is measured */ UBYTE ident[MAX_IM_IDLE_CHANNELS]; /* identifies the channel to be measured */ } T_MEAS_IM_IDLE_CHN; typedef struct /* T_MEAS_IM_DATA */ { UBYTE state; /* sub-state of the interference */ /* measurement service */ T_MEAS_IM_MODE mode; /* mode of operation */ T_MEAS_IM_IDLE_CHN idle_chan; /* channels measured in packet */ /* idle mode */ T_MEAS_IM_FILTER filter [MAX_IM_CHANNELS]; /* running average filter */ USHORT carrier_id; /* carrier identifier */ T_MEAS_IM_CARRIER carrier; /* carrier currently measured */ T_MEAS_IM_TRIG_SIGNAL trig_signal; /* trigger signal */ BOOL v_cs_meas_active; /* indicates whether cell re- */ /* selection measurements are */ /* active */ BOOL v_ilev_abs; /* indicates whether at least one */ /* CGRLC_INT_LEVEL_REQ primitive */ /* was sent since last reset */ T_ilev_abs ilev_abs; /* stores the content of last */ /* sent CGRLC_INT_LEVEL_REQ */ /* primitive */ #if !defined (NTRACE) UBYTE n_im_trace; #endif /* #if !defined (NTRACE) */ #ifndef NTRACE char *name; char *state_name; #endif } T_MEAS_IM_DATA; typedef struct /* T_MEAS_EM_RSLT */ { UBYTE refidx; UBYTE rxlev; UBYTE bsic; } T_MEAS_EM_RSLT; typedef struct /* T_MEAS_EM_RSLT_LIST */ { UBYTE number; T_MEAS_EM_RSLT elem[RRGRR_MAX_ARFCN_EXT_MEAS]; } T_MEAS_EM_RSLT_LIST; typedef struct /* T_MEAS_EM_STRG_LIST */ { UBYTE number; UBYTE refidx[RRGRR_MAX_ARFCN_EXT_MEAS]; } T_MEAS_EM_STRG_LIST; typedef struct /* T_MEAS_PAR_PMO */ { UBYTE count; UBYTE instances[MAX_NR_OF_INSTANCES_OF_PMO]; T_EXT_START_STOP idx[MAX_NR_OF_INSTANCES_OF_PMO]; } T_MEAS_PAR_PMO; typedef struct /* T_MEAS_MSG_PMO */ { T_NCMEAS_EXTENDED nc; T_XMEAS extd; #if defined (REL99) AND defined (TI_PS_FF_EMR) BOOL v_enh_meas_param_pmo; /* Set if ENH params are present */ T_GRR_ENH_PARA enh; /* Temporary storage for enhanced measurement parameters received from PMO*/ #endif T_MEAS_PAR_PMO prm; } T_MEAS_MSG_PMO; typedef struct /* T_XMEAS_SET */ { UBYTE ident; /* identifier of valid EXT measurement parameter set */ T_XMEAS *param; /* pointer to valid EXT measurement parameter set */ } T_XMEAS_SET; typedef struct /* T_MEAS_EM_DATA */ { UBYTE state; T_XMEAS_SET xmeas_set; BOOL v_pmo_nc_ncmeas_param; BOOL v_pmo_nc_ncmeas_list_rfreq; T_MEAS_MSG_PMO pmo; /* used to store message packet measurement */ /* order temporarily */ T_MEAS_EM_RSLT_LIST rslt; /* EXT measurement results for all carriers */ T_MEAS_EM_STRG_LIST strg; /* EXT measurement results for 6 strongest */ /* carriers ( with/without BSIC decoding ) */ UBYTE pmr_snd_ref; /* reference to the next EXT measurement */ /* result which chould be sent to the */ /* network */ #ifndef NTRACE char *name; char *state_name; #endif } T_MEAS_EM_DATA; typedef struct /* T_GRR_CS_DATA */ { UBYTE state; T_GMM_STATES gmm_state; T_TIME last_cr; T_CS_RESELECT_CAUSE reselect_cause; UBYTE is_upd_ncell_stat_needed; UBYTE is_mval_initialized; UBYTE list_id; UBYTE stop_req; UBYTE cr_meas_mode; /* cell re-selection measurement mode */ BOOL cr_meas_update; UBYTE last_assignment_id; USHORT nc_sync_rep_pd; #if !defined (NTRACE) UBYTE v_crp_trace; #endif /* #if !defined (NTRACE) */ #ifndef NTRACE char *name; char *state_name; #endif } T_GRR_CS_DATA; typedef struct /* T_CS_MEAS_DATA */ { UBYTE state; UBYTE pmr_snd_ref; /* reference to the next NC measurement result */ /* which chould be sent to the network */ UBYTE nc_meas_cause;/*Indicates NC meas status in ALR when NC=1 or NC=2 */ T_PACKET_MODE packet_mode; #ifndef NTRACE char *name; char *state_name; #endif } T_CS_MEAS_DATA; typedef struct { U8 nc2_on; /* * Indicates whether it is allowed to use NC1 and NC2: * * TRUE = Use of NC1 and NC2 is allowed. * FALSE = Use of NC1 and NC2 is prohibited. */ } T_GRR_FFS; typedef struct /* T_GFP_DATA */ { UBYTE state; BOOL tfi_check_needed; /* if the tfi in optional header is correct, the ms shall ignore the tfi within the air message. This parameter indicates if a check for the tfi is needed(TRUE) or not(FALSE)*/ #ifndef NTRACE char *name; char *state_name; #endif } T_GFP_DATA; typedef struct { BOOL v_gamma; UBYTE gamma; } T_GAMMA_TN; typedef struct { BOOL v_alpha; UBYTE alpha; T_GAMMA_TN gamma_tn[CGRLC_MAX_TIMESLOTS]; } T_PWR_PAR; typedef struct /* T_CELL_INFO_FOR_GMM */ { T_cell_info cell_info; /* Cell information */ T_GPRS_SERVICE gprs_service; /* GPRS service */ T_ACCESS_STATUS access_status; /* Access status */ } T_CELL_INFO_FOR_GMM; typedef struct /* T_SC_DATABASE */ { T_PSI_ASSIGNED_DATA psi_assigned_data; T_PSI1_PARAMS psi1_params; /**/ T_PSI2_PARAMS psi2_params; /**/ T_PSI3_PARAMS psi3_params; /**/ T_PSI3BIS_PARAMS psi3bis_params; /**/ #if defined (REL99) AND defined (TI_PS_FF_EMR) T_PSI3TER_PARAMS psi3ter_params; /**/ #endif T_PSI4_PARAMS psi4_params; /**/ T_PSI5_PARAMS psi5_params; /**/ #ifdef REL99 T_PSI8_PARAMS psi8_params; /**/ #endif T_PSI13_PARAMS psi13_params; /**/ UBYTE is_access_enabled; /* This common parameter is used by services CTRL and PSI*/ T_COMPLETE_ACQ complete_acq; /**/ ACQ_TYPE acq_type; /*indicates whether the receiving of consistent set of PSI is in progress*/ BOOL measurement_order; /*FALSE: NC0, EM0 no PSI5; TRUE: PSI5 on PBCCH measurement needed*/ BOOL send_psi_status; /*Checks whether the PSI service should send PSI STATUS message or not*/ T_PSI_STATE state_of_PSI[MAX_PSI]; /* */ UBYTE si_to_acquire; /* UNSPECIFIED_SI, UPDATE_SI1, UPDATE_SI2_SI2BIS_OR_SI2TER, UPDATE_SI3_SI4_SI7_OR_SI8, UPDATE_SI9, UPDATE_SI13*/ T_MPHP_SCELL_PBCCH_REQ scell_pbcch; /* stores the primitive, and pass it after transition rules to layer1 */ T_PBCCH pbcch; /* PBCCH description */ T_NETWORK_CONTROL net_ctrl; /* Network control parameters*/ BOOL v_gprs_cell_opt; /* valid flag for GPRS Cell Options*/ T_gprs_cell_opt gprs_cell_opt; /* GPRS Cell Options */ BOOL v_prach; /* valid flag for PRACH Control Parameters*/ T_prach_ctrl_par prach; /* PRACH Control Parameters */ BOOL v_g_pwr_par; /* valid flag for Global Power Control Parameters*/ T_g_pwr_par g_pwr_par; /* Global Power Control Parameters */ BOOL v_pwr_par; /* valid flag for Power Control Parameters*/ T_PWR_PAR pwr_par; /* Power Control Parameters */ T_pccch_org_par pccch; /* PCCCH Organization Parameters */ T_PAGING_GROUP paging_group; /* This structure contains parameters to initialize paging (static)*/ UBYTE last_pg_mode; /* last page mode*/ UBYTE network_pg_mode; BOOL gprs_attach_is_running; /* indicates if the gprs procedure is running or not*/ UBYTE non_drx_timer; /* This value contains the values in seconds*/ BOOL non_drx_timer_running; BOOL nc2_non_drx_period_running; T_RFL_LST rfl[MAX_RFL+1]; /* Reference Frequency Lists */ BOOL v_cell_alloc; /* valid flag for Cell Allocation */ T_cell_alloc cell_alloc[MAX_CELL_ALLOC]; /* Cell Allocation */ T_gprs_ms_alloc gprs_ms_alloc_in_assignment; /* GPRS Mobile Allocations received in an assignment message*/ T_gprs_ms_alloc gprs_ms_alloc_in_psi2_psi13[MAX_GPRS_MS_ALLOC]; /* GPRS Mobile Allocations received in PSI2 and/or PSI13*/ #ifdef REL99 BOOL v_add_psi;/* valid-flag */ T_add_psi add_psi; /* additional PSI Messages broad cast information*/ #endif BOOL v_non_gprs_opt; /* valid flag for Non GPRS Cell Options */ T_non_gprs_opt non_gprs_opt; /* Non GPRS Cell Options */ T_SCELL_PAR scell_par; /* Serving Cell parameters from PSI 3 and PSI3 BIS */ T_gen_cell_par gen_cell_par; /* General Cell Selection parameter */ UBYTE number_of_valid_int_meas_channels; T_int_meas_chan_lst int_meas_chan_list[MAX_CHAN_IMEAS]; /* Channel List for Interference measurements (PSI 4) */ BOOL is_ext_psi5_valid; /* Is the extended structure in PSI5 is valid*/ T_XMEAS ext_psi5; /* EXT measurement parameters derived from PSI5 */ T_XMEAS ext_pmo; /* EXT measurement parameters derived from packet measurement order */ T_NCMEAS nc_cw; /* NC measurement parameters cell wide */ T_NCMEAS_EXTENDED nc_ms; /* NC measurement parameters MS specific */ T_CELL_INFO_FOR_GMM cell_info_for_gmm; /* Cell information composed for GMM */ #ifdef REL99 #ifdef TI_PS_FF_QUAD_BAND_SUPPORT UBYTE band_indicator; /* Band indicator received in PSI 1 */ #endif UBYTE sgsn_rel; /* SGSN release of the serving cell */ UBYTE network_rel; /*Network release*/ BOOL v_cbch_chan_desc; /* valid fla for CBCH channel description. */ T_cbch_chan_desc cbch_chan_desc; /* Stores CBCH channel description as received in PSI8 */ BOOL send_cbch_info_ind;/* This flag indicates if a CBCH info update has to be sent to RR */ #ifdef TI_PS_FF_EMR UBYTE ba_ind; /* BA-BCCH sequence number */ T_BA_BCCH_NC_LIST nc_ba_bcch_cw; /* GSM NC list formed in RR from BA-BCCH and BSIC */ T_GRR_ENH_PARA enh_cw; /* ENH measurement parameters cell wide */ T_GRR_ENH_PARA enh_ms; /* ENH measurement param */ BOOL si_status_ind; /* The network supports/does not support the PACKET SI STATUS message */ #endif #endif #if defined (TI_PS_FF_RTD) AND defined (REL99) T_RTD_VALUE rtd[MAX_NR_OF_NCELL];/* RTD values for the neighbour cell synchronisation */ #endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ } T_SC_DATABASE; typedef struct /* T_NC_NW_SELECTED */ { T_NC_SIX_STRGST strgst; /* this cell is used for network controlled */ /* cell re-selection but does not belong to */ /* the six strongest cells */ } T_NC_NW_SELECTED; typedef struct /* T_GPRS_DATABASE */ { T_MS_IDENT ms_id; /* some parameters to identify the MS: IMSI, PTMSI, TMSI */ T_scell_info scell_info; /* contains measurement values for serving cell */ T_SCELL old_scell; /* previous serving cell */ T_NC_REF_LIST nc_ref_lst; /* list of pointers to the neighbour cell lists */ T_NC_MVAL_LIST nc_mval_list; /* measured values of the neighbour cells */ T_NC_SIX_STRGST *cr_cell; T_CNT_NC_SIX_STRGST cnt_nc_six; T_NC_SIX_STRGST nc_six_strgst[CS_MAX_STRONG_CARRIER]; T_NC_NW_SELECTED nc_nw_slctd; #if defined (REL99) AND defined (TI_PS_FF_EMR) UBYTE cnt_enh_cell_list; /* Number of Cells in the ENH cell list */ T_ENH_CELL_LIST enh_cell_list[MAX_NR_OF_NCELL];/* Enhanced Measurement Cell list */ T_ENH_BIN sorted_enh_cell_list; /* ENH cell list sorted in descending order of rxlev */ T_PEMR_PARAMS pemr_params; /* PEMR parameters used during reporting */ T_BA_BCCH_NC_REF_LIST ba_bcch_nc_ref_lst; /* list of pointers to the neighbour cell lists */ #endif } T_GPRS_DATABASE; typedef struct /* T_PWR_CTRL_VALID_FLAGS */ { BOOL v_pwr_ctrl_param; BOOL v_glbl_pwr_ctrl_param; BOOL v_freq_param; BOOL v_c_value; } T_PWR_CTRL_VALID_FLAGS; typedef struct /* T_GRR_DATA */ { UBYTE sc_db_mode; T_SC_DATABASE sc_db_1; /* database 1 for serving cell: it contains all cell relevant * information, needed for to camp on a network, access to * the network, etc. */ T_SC_DATABASE sc_db_2; /* database 2 for serving cell: it contains all cell relevant * information, needed for to camp on a network, access to * the network, etc. */ T_GPRS_DATABASE db; /* db is the shortname for gprs_database */ T_MS_DATA ms; /* ms specific data */ T_UL_TBF uplink_tbf; /* This structure is used by TC,CPAP during uplink-tbf */ T_DL_TBF downlink_tbf; /* This structure is used by TC,CPAP during downlink-tbf */ T_TBF_TYPE tbf_type; ULONG ul_fn; ULONG dl_fn; ULONG l1_del_tbf_start_fn; /* When there is poll requested in a re-assignment message * sending of poll response successfully requires this * value to be sent to poll_fn+8. This is important when * the timeslot configuration changes between re-assignment. */ T_TA_PARAMS ta_params; UBYTE pdch_rel_ts_mask; USHORT tqi; T_req_ref_p req_ref[3]; /* to save the last 3 packet request_references */ UBYTE r_bit; /* current r-bit value - set by TC - read by RU/RD*/ T_SEG_CTRL_BLK seg_ctrl_blk; T_CTRLBUF ctrl_msg; T_MS_CLASS_CAP ms_cap[12]; /* * Some global parameters to control the whole functionality */ BOOL is_pg_started; /* Checks whether paging procedure has been started or not*/ BOOL cc_running; /* Assert if Cell change Order is running or not? */ UBYTE pcco_failure_cause; UBYTE test_mode; /* indicates the testmode status */ BOOL cell_res_status; /* indicates the status of GMMRR_CELL_RES primitive */ T_NC_DATA nc_data; T_PWR_CTRL_VALID_FLAGS pwr_ctrl_valid_flags; /* * Service data */ T_GFP_DATA gfp; T_CTRL_DATA ctrl; T_CTRL_GLBL_DATA ctrl_glbl; T_TC_DATA tc; T_CPAP_DATA cpap; T_PSI_DATA psi; T_PG_DATA pg; T_MEAS_DATA meas; T_MEAS_IM_DATA meas_im; T_MEAS_EM_DATA meas_em; T_GRR_CS_DATA cs; T_CS_MEAS_DATA cs_meas; UBYTE nc2_on; }T_GRR_DATA; /*==== EXPORT =====================================================*/ /* * data base */ #ifdef GRR_PEI_C T_GRR_DATA grr_data_base, *grr_data; #else EXTERN T_GRR_DATA grr_data_base, *grr_data; #endif /* * for more information see comment related to structure T_PSI_ASSIGNED_DATA */ #if defined GRR_PSIF_C OR defined GRR_PSIP_C OR defined GRR_PSIS_C #define ENTITY_DATA psc_db #else #define ENTITY_DATA grr_data #endif /* * Communication handles (see also GRR_PEI.C) */ #define hCommL1 ppc_hCommMAC #define hCommGMM grr_hCommGMM #define hCommGRR grr_hCommGRR #define hCommGRLC grr_hCommGRLC #define hCommRR grr_hCommRR #define hCommPL grr_hCommPL #ifdef FF_WAP /*FMM*/ #define hCommWAP grr_hCommWap /*In future an own FMM Entity is planned*/ #endif #define _decodedMsg grr__decodedMsg #ifdef GRR_PEI_C T_HANDLE hCommL1 = VSI_ERROR; T_HANDLE hCommGRLC = VSI_ERROR; T_HANDLE hCommGMM = VSI_ERROR; T_HANDLE hCommGRR = VSI_ERROR; T_HANDLE hCommRR = VSI_ERROR; T_HANDLE hCommPL = VSI_ERROR; #ifdef FF_WAP T_HANDLE hCommWAP = VSI_ERROR; #endif T_HANDLE GRR_handle; GLOBAL UBYTE _decodedMsg [MAX_MSTRUCT_LEN_GRR]; /* * make the pei_create function unique */ #define pei_create grr_pei_create /* * make the pei_func_primitive function unique */ #define pei_func_primitive grr_pei_func_primitive #else /* !GRR_PEI_C */ EXTERN T_HANDLE hCommL1; EXTERN T_HANDLE hCommGRLC; EXTERN T_HANDLE hCommGMM; EXTERN T_HANDLE hCommGRR; EXTERN T_HANDLE hCommLLC; EXTERN T_HANDLE hCommRR; EXTERN T_HANDLE hCommPL; #ifdef FF_WAP EXTERN T_HANDLE hCommWAP; #endif EXTERN T_HANDLE GRR_handle; #endif /* GRR_PEI_C */ EXTERN UBYTE _decodedMsg [MAX_MSTRUCT_LEN_GRR]; #ifdef GRR_PEI_C T_SC_DATABASE* psc_db; /* points to the current serving cell database */ T_SC_DATABASE* posc_db; /* points to the old serving cell database */ T_SC_DATABASE* prsc_db; /* points to the rejected serving cell database */ T_SC_DATABASE* pcr_db; /* points to the cell re-selection database */ #else EXTERN T_SC_DATABASE* psc_db; EXTERN T_SC_DATABASE* posc_db; EXTERN T_SC_DATABASE* prsc_db; EXTERN T_SC_DATABASE* pcr_db; #endif /* GRR_PEI_C */ #ifdef _TARGET_ #undef TRACE_FUNCTION #define TRACE_FUNCTION(a) #undef TRACE_ISIG #define TRACE_ISIG(a) #endif /* _TARGET_ */ #endif /* GRR_H */