FreeCalypso > hg > freecalypso-sw
diff gsm-fw/g23m-gsm/rr/rr.h @ 673:2f7df7a314f8
gsm-fw/g23m-gsm subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 28 Sep 2014 23:20:04 +0000 |
parents | |
children | 68693b72670b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/g23m-gsm/rr/rr.h Sun Sep 28 23:20:04 2014 +0000 @@ -0,0 +1,2318 @@ +/* ++----------------------------------------------------------------------------- +| Project : +| Modul : ++----------------------------------------------------------------------------- +| 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 : Declarations for the Protocol Stack Entity +| Radio Resource ++----------------------------------------------------------------------------- +*/ + +#ifndef RR_H +#define RR_H + +#ifdef GPRS +#include "rr_gprs.h" +#endif + +#include "cl_list.h" +#ifdef TI_PS_HCOMM_CHANGE +#include "cl_hComm_handle.h" +#endif + +#ifdef TI_GSP_STR2IND_S2I_STRING +typedef unsigned int T_S2I_STRING; +#else +typedef char * T_S2I_STRING; +#define S2I_STRING(x) (x) +#endif + +#ifdef TI_PS_OP_VSI_NO_CALL_ID +#define TIMER_START(C,I,T) vsi_t_start_nc(I,T) +#define TIMER_PSTART(C,I,T,R) vsi_t_pstart_nc(I,T,R) +#define TIMER_STOP(C,I) vsi_t_stop_nc(I) +#define TIMER_STATUS(C,I,T) vsi_t_status_nc(I,T) +#define SUSPEND_SELF(C,T) vsi_t_sleep_nc(T) +#define SYSTEM_TIME(C,T) vsi_t_time_nc(T) +#else /* TI_PS_OP_VSI_NO_CALL_ID */ +#define TIMER_START(C,I,T) vsi_t_start(C,I,T) +#define TIMER_PSTART(C,I,T,R) vsi_t_pstart(C,I,T,R) +#define TIMER_STOP(C,I) vsi_t_stop(C,I) +#define TIMER_STATUS(C,I,T) vsi_t_status(C,I,T) +#define SUSPEND_SELF(C,T) vsi_t_sleep(C,T) +#define SYSTEM_TIME(C,T) vsi_t_time(C,T) +#endif /* TI_PS_OP_VSI_NO_CALL_ID */ + +#define _SIMULATION_FFS_ + +/* Enum values for clearing White List */ +enum clr_white_list_e +{ + CLR_WHITE_LIST_RAM = 1, + CLR_WHITE_LIST_SIM = (CLR_WHITE_LIST_RAM << 1), + CLR_WHITE_LIST_FFS = (CLR_WHITE_LIST_SIM << 1) +}; + +/* Enum values for clearing Black List + * CSI-LLD section:4.1.1.4 + */ +enum clr_black_list_e +{ + CLR_BLACK_LIST_RAM = 1, + CLR_BLACK_LIST_FFS = (CLR_BLACK_LIST_RAM << 1) +}; + +/* Enum values for identifying scan mode + * CSI-LLD section:4.4 + */ +enum scan_mode_e +{ + CS_NO_SCAN, + CS_FIRST_SCAN_FIRST_ATTEMPT, + CS_FIRST_SCAN_SECOND_ATTEMPT, + CS_SECOND_SCAN +}; + +/* Enum values for Initial PLMN search state + * CSI-LLD section:4.1.1.4 + */ +enum initial_plmn_search_e +{ + INITIAL_PLMN_SEARCH_NOT_ACTIVE, + INITIAL_PLMN_SEARCH_ACTIVE, + INITIAL_PLMN_SEARCH_DONE +}; + +/* + * look at explanations at rr_data->mode_after_dedi! +*/ +#define ARRAY_TRACE + +#if defined(_SIMULATION_) +#undef SET_STATE +#define SET_STATE(PROCESS,STATE)\ + { vsi_o_ttrace (VSI_CALLER 0x08, "%s:%s->%s (#%u %s)",\ + PROCESS_NAME[PROCESS],\ + PROCESS##_NAME [ ENTITY_DATA->state[PROCESS] ],\ + PROCESS##_NAME [ STATE ],\ + __LINE__, __FILE10__);\ + ENTITY_DATA->state[PROCESS] = STATE;} +#endif /* _SIMULATION_ */ + +#if !defined(NTRACE) +#define TRACE_DATA_IND(a,fn,t) TRACE_EVENT_P5 ("[%u] %s FN=%lu CR=%d SC=%d",\ + (a)&ARFCN_MASK, t, fn,\ + (short)(rr_data->nc_data[CR_INDEX].arfcn),\ + (short)(rr_data->nc_data[SC_INDEX].arfcn)) +#else /* !NTRACE */ +#define TRACE_DATA_IND(a,fn,t) +#endif /* !NTRACE */ + + + +#if !defined(NTRACE) +#define TRACE_DATA_IND(a,fn,t) TRACE_EVENT_P5 ("[%u] %s FN=%lu CR=%d SC=%d",\ + (a)&ARFCN_MASK, t, fn,\ + (short)(rr_data->nc_data[CR_INDEX].arfcn),\ + (short)(rr_data->nc_data[SC_INDEX].arfcn)) +#else /* !NTRACE */ +#define TRACE_DATA_IND(a,fn,t) +#endif /* !NTRACE */ + +#define RR_ALLOCATE_NEW_BA(v) ((((v)+1) % (RR_BA_HIGH-RR_BA_LOW+1)) + RR_BA_LOW) + +/*lint -esym(526,std) : not defined | defined in PCM */ +EXTERN UBYTE std; + +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT +EXTERN const UBYTE std_bands[12]; +#else +EXTERN const UBYTE std_bands[8]; +#endif + + +/* + * CS priorities + */ +#define CS_LOW_PRIORITY 0x00 +#define CS_MID_PRIORITY 0x01 +#define CS_HIGH_PRIORITY 0x02 +#define CS_PRIORITY 0x03 +#define CS_NON_CHECKED_BITS 0xF7 +#define CS_CHECK_FLAG 0x08 +#define CS_BCCH_READ 0x10 +#define CS_SET_TO_LOW_PRIORITY 0xFC +#define CS_BLACK_LIST_FLAG 0x04 /* CSI-LLD section:4.1.1.3 */ + +#define SC_INDEX 6 +#define CR_INDEX 7 +#define NCELL_SIZE 8 + + +#define LOW_PRIORITY_CELL 0x40 +#define EMERGENCY_CELL 0x20 +#define CHECKED_FLAG 0x08 + +#define MAX_MCC_SHIELD 4 + +/* CSI-LLD section:4.1.1.3 */ +#define MAX_SYNC_FAILURES 5 +#define MAX_SFC_PER_REGION 512 + +#define STD_NOT_PRESENT 0x00 + +/* + * Macros + */ +#ifdef FRAME_OFFSET_ZERO + +#define GET_PD(s,p) p=(UBYTE)(s.buf[3] & 0x0F) +#define GET_TI(s,t) t=(UBYTE)(s.buf[3] >> 4 ) + +#define GET_UI_PD(s,p) p=(UBYTE)(s.buf[1] & 0x0F) +#define GET_UI_TI(s,t) t=(UBYTE)(s.buf[1] >> 4 ) + +#else + +#define GET_PD(s,p) ccd_decodeByte(s.buf, (USHORT)(s.o_buf+4), 4, &p) +#define GET_TI(s,t) ccd_decodeByte(s.buf, (USHORT)(s.o_buf ), 4, &t) + +#define GET_UI_PD(s,p) ccd_decodeByte(s.buf, (USHORT)(s.o_buf+4), 4, &p) +#define GET_UI_TI(s,t) ccd_decodeByte(s.buf, (USHORT)(s.o_buf ), 4, &t) + +#endif + +#define USE_STORED_ENTRIES() { ENTITY_DATA->use_stored_entries = TRUE; } + +/* add resp. get the std value to resp. from arfcn */ +/*#define STD_ADD_TO_ARFCN(a,std) (((a)&~STD_BIT_MASK) | ((std)<<STD_BIT_SHIFT))*/ +#define STD_GET_FROM_ARFCN(a) ((((a)&STD_BIT_MASK)>>STD_BIT_SHIFT)) + + +/* Returns the region(european or american)the requested carrier belongs to + * CSI-LLD section:4.1.1.2.1 + */ +#define CS_GET_REGION_FROM_FREQ(arfcn) ((arfcn&US_BIT)?AMERICAN_REGION:EUROPEAN_REGION) + +/* Sets the current search mode + * CSI-LLD section:4.1.3.1.1 + */ +#define CS_SET_CURRENT_SEARCH_MODE(mode) (rr_data->cs_data.current_search_mode=mode) + +/* Returns the current search mode + * CSI-LLD section:4.1.3.1.1 + */ +#define CS_GET_CURRENT_SEARCH_MODE (rr_data->cs_data.current_search_mode) + +/* Sets the previous search mode + * CSI-LLD section:4.1.3.1.1 + */ +#define CS_SET_PREVIOUS_SEARCH_MODE(mode) (rr_data->cs_data.previous_search_mode=mode) + +/* Returns the previous search mode + * CSI-LLD section:4.1.3.1.1 + */ +#define CS_GET_PREVIOUS_SEARCH_MODE (rr_data->cs_data.previous_search_mode) + +/* This macro sets Bit : 2 of attributes[ ] field n T_CS_DATA structure for the + * carrier identified by the index. This bit indicates whether a carrier is a + * candidate for "Black List" or not. The BLACK_LIST_FLAG in the attribute filed + * shall be set during initial PLMN search( as indicated by the flag + * ini-tial_plmn_search_active) whenever MS fails to synchronize to a carrier. + * After the completion of initial PLMN search, Black list flag shall be used to + * update the Black List database based on the outcome of initial PLMN search. + * CSI-LLD section:4.1.1.2.2 + */ +#define CS_SET_BLACK_LIST_FLAG(index) (rr_data->cs_data.attributes[index]|=CS_BLACK_LIST_FLAG) + +/* Returns the value of bit:2 of attributes[]field in T_CS_DATA structure for the + * the carrier identified by index. This bit indicates whether a carrier is a + * candidate for "Black List" or not. This macro will be called while updating Black + * list database following the completion of initial PLMN search. + * CSI-LLD section:4.1.1.2.3 + */ +#define CS_GET_BLACK_LIST_FLAG(index) (rr_data->cs_data.attributes[index]&CS_BLACK_LIST_FLAG) + +/* + * Protocol Discriminator and + * Transaction Identifier of RR + */ +#define PD_RR_TI_0 0x06 +/* + * Ignore Value + */ +#define IG NOT_PRESENT_8BIT + +/* + * Paging Indication + */ +#define ANYCH 0 +#define SDCCHCH 1 +#define TCHFCH 2 +#define TCHHFCH 3 +#define TCHHCH 4 + +/* + * MS Capability + */ +#define FULL 0 +#define DUAL 1 +#define SIGN 2 + +/* + * Maximum value for cell ranking + */ +#define MAX_C2 255 + +/* + * Power Classes + */ +#define MAX_CLASSES 5 +#define P_CLASS_2_900 39 +#define P_CLASS_3_900 37 +#define P_CLASS_4_900 33 +#define P_CLASS_5_900 29 +#define P_CLASS_1_1800 30 +#define P_CLASS_2_1800 24 +#define P_CLASS_3_1800 36 +#define P_CLASS_1_1900 30 +#define P_CLASS_2_1900 24 +#define P_CLASS_3_1900 33 + +/* + * Values for BSIC status + */ +#define EMPTY 0 +#define NON_DECODED 1 +#define DECODED 2 + +#define CELL_IS_INSERTED 0 +#define BSIC_HAS_CHANGED 1 +#define CELL_IS_NOT_INSERTED 2 + +#ifdef GPRS +#define CR_PAR_INVALID 0 +#define CR_PAR_VALID 1 +#endif +/* + * Times defined by multiplies of TDMA frames + */ +#define PERIOD_1_SEC 217L +#define PERIOD_700_SEC 151680L + +/* + * Hierarchy defined by multiplies of TDMA frames + */ +#define HYPERFRAME 2715648 +#define STARTING_TIME_INTERVAL 42432 +#define STARTING_TIME_INTERVAL0 10808 +#define STARTING_TIME_INTERVAL1 31623 +/* The Starting Time IE can encode only an interval of time of 42 432 frames, + * that is to say around 195.8 s. To remove any ambiguity, the specification + * for a reception at time T is that the encoded interval is + * (FN-10808, FN+31623). In rigorous terms, if we note ST the starting time: + * + * - if 0 <= (ST-FN) mod 42432 <= 31623, the indicated time is the next time + * when FN mod 42432 is equal to ST + * - if 32024 <= (ST-FN) mod 42432 <= 42431, the indicated time has already + * elapsed. + * The reception time FN is not specified here precisely. To allow room for + * various MS implementations, the limit between the two behaviours above may + * be anywhere within the interval defined by + * + * - 31624 <= (ST-FN) mod 42432 <= 32023. + * + * 3GPP TS 04.18, section 10.5.2.38 Starting Time + */ + + +/* + * Flags for sending rr status message + */ +#define SEND_RR_STATUS 1 +#define SEND_NO_RR_STATUS 0 + +/* + * Bitoffset for encoding/decoding + */ +#define ENCODE_OFFSET 24 + +/* + * Protocol Discrimator + */ +#define PD_CC 3 +#define PD_MM 5 +#define PD_RR 6 +#define PD_SMS 9 +#define PD_SS 11 +#define PD_TST 15 + +/* + * Test Messages + */ +#define CLOSE_TCH_LOOP_CMD 0 +#define OPEN_LOOP_CMD 6 +#define TEST_INTERFACE 0x14 + +/* + * Delay for the CLOSE_TCH_LOOP_ACK to allow L1 switching + */ +#define DELAY_CLOSE_TCH_LOOP_ACK 35 + +/* + * Release Causes + */ +#define OPTIONAL_INFO_ERROR 0x66 + +/* + * System Information Type Flags + */ +#define CELL_SELECTION 0 +#define CELL_RESELECTION 1 +#define BACK_FROM_DEDICATED 2 +#define CELL_RESELECTION_NC 3 +#define BACK_FROM_DEDICATED_RLF 4 +#define CELL_RESELECTION_RACH 5 +#define CELL_RESELECTION_CR 6 +#ifdef GPRS +#define CELL_RESELECTION_ON_GPRS_ACT 7 +#endif +#define MM_ORIGINATED TRUE +#define RR_ORIGINATED FALSE + +#define CS_PARALLEL 1 +#define CS_NOT_PARALLEL 0 + +#define NO_SYS_INFO_READ 0 + +#ifdef GPRS +#define ALL_SYS_INFO_READ 0x007f +#else +#define ALL_SYS_INFO_READ 0x003f +#endif + +#define SYS_INFO_1_READ 0x0001 +#define SYS_INFO_2_READ 0x0002 +#define SYS_INFO_2BIS_READ 0x0004 +#define SYS_INFO_2TER_READ 0x0008 +#define SYS_INFO_3_READ 0x0010 +#define SYS_INFO_4_READ 0x0020 +#if defined (REL99) && defined (TI_PS_FF_EMR) +#define SYS_INFO_2QUATER_READ 0x2000 +#endif +#define SYS_INFO_EXCEPT_2TER (ALL_SYS_INFO_READ & (~SYS_INFO_2TER_READ)) + +#ifdef GPRS +#define SYS_INFO_13_READ 0x0040 +#define SYS_INFO_EXCEPT_SI13 (ALL_SYS_INFO_READ & (~SYS_INFO_13_READ)) +#endif + +#define SYS_INFO_5_READ 0x0100 +#define SYS_INFO_5BIS_READ 0x0200 +#define SYS_INFO_5TER_READ 0x0400 +#define ALL_DEDI_SYS_INFOS 0x0700 + +#define NO_AVAILABLE 255 + +#define SYS_INFO_2_MSG 0x1a +#define SYS_INFO_2bis_MSG 0x02 +#define SYS_INFO_2ter_MSG 0x03 + +#if defined (REL99) && defined (TI_PS_FF_EMR) +#define MAX_MULTI_INST 16 /* max.number of instances in multi-instance msg (SI-2quater or MI)*/ +#define MSG_SIZE_EMR 168 /* 21 * 8 */ +#define MAND_SIZE_EMR 15 /*Max mandatory bits in EMR*/ +#define SC_INFO_SIZE_EMR 23 /*size for serving cell, if included*/ +#define NC_INVBSIC_EMR 18 /* size for each neighbour cell, if included in Invalid BSIC structure of EMR*/ +#define NC_BMP_EMR 7 /* size for each neighbour cell, if included in BSIC BMP structure of EMR*/ +#endif + +/* + * Values for the V(SD) bit + */ +#define SET_ONLY 0 +#define SET_AND_RESET 1 +#define RESET_ONLY 2 + +/* + * Content Flags + */ +#define NO_CONTENT 0 +#define WITH_CHANGED_CONTENT 1 +#define WITH_CONTENT 2 + +/* + * Establishment Causes + */ +#define ESTCS_LOCATION_UPDATING 0x0400 +#define ESTCS_PAGING 0x0480 +#define ESTCS_EMERGENCY_CALL 0x04A0 +#define ESTCS_REESTABLISHMENT 0x04C0 +#define ESTCS_MOC_SPEECH 0x04E0 +#define ESTCS_MOC_DATA 0x04E1 +#define ESTCS_MOC_DATA_HR_SUFF 0x04E2 +#define ESTCS_MOC_SS_SMS 0x04F0 + +#define MAX_RACH_RETRANS_VAL 4 +#define MAX_TX_INTEGER 16 + +#define RX_QUAL_UNAVAILABLE 0xFF +#ifdef FF_PS_RSSI +#define RX_ACCE_UNAVAILABLE 0xFF +#endif + +/* + * Application Information: constant name synomyms + */ + +#define LAST_SEG ( L_SEG ) /* 0x00 */ +#define NOT_LAST_SEG (NL_SEG ) /* 0x01 */ +#define FIRST_SEG ( F_SEG ) /* 0x00 */ +#define NOT_FIRST_SEG (NF_SEG<<1) /* 0x02 */ + +#define APDU_FULL_L2_FRAME 247 +#define MAX_PRIMPART_SIZE 1600 /* actually defined in "frm_types.h" */ +#if defined FF_EOTD +#define MAX_APDU_SIZE (MAX_PRIMPART_SIZE-sizeof(T_PRIM_HEADER)-sizeof(T_RRRRLP_DATA_IND)) +#endif /* FF_EOTD */ + +#define NULLSTRING "" +#define ARFCN_NOT_PRESENT 0xFFFF +#define FRAME_NUM_NOT_PRESENT 0xFFFFFFFFL + +/* + * Timer + */ +enum timer_index_e +{ + T3110, /* Channel Release Timer */ + T3122, /* Wait Indication Timer */ + T3126, /* Imm Assignment Timer */ + T_RESELECT, /* Reselection Timer */ + TREG, /* Registration Timer */ + TABORT, /* RR_ABORT_IND Timer */ + T_NO_RESELECT, /* exception of path loss criteria after reselection */ + TIM_EXT_MEAS, /* Extended Measurement */ +#if defined FF_EOTD + TAPDU, /* Application PDU Timer */ +#endif /* FF_EOTD */ + TNNN, + TCSVALID, /* CS measurements are valid or not */ + T_DEDICATED_MODE,/* cell re-selection after leaving dedicated mode */ + T_PLMN_SEARCH, /* Manual cell selection timer */ + T_FAST_CS, /* controls FAST search */ + T_NORMAL_CS, /* controls NORMAL search */ + NUM_OF_RR_TIMERS +}; + +#define TIMER_TRACE + +#if defined(TIMER_TRACE) + #define TRACE_TIMER(FMT) TRACE_EVENT((FMT)) + #define TRACE_TIMER_P1(FMT,P1) TRACE_EVENT_P1((FMT),(P1)) + #define TRACE_TIMER_P2(FMT,P1,P2) TRACE_EVENT_P2((FMT),(P1),(P2)) + #define TRACE_TIMER_P3(FMT,P1,P2,P3) TRACE_EVENT_P3((FMT),(P1),(P2),(P3)) +#else + #define TRACE_TIMER(FMT) + #define TRACE_TIMER_P1(FMT,P1) + #define TRACE_TIMER_P2(FMT,P1,P2) + #define TRACE_TIMER_P3(FMT,P1,P2,P2) +#endif + +/* + * Dynamic Configuration Numbers + */ +#define TIMER_SET 1 +#define TIMER_RESET 2 +#define TIMER_SPEED_UP 3 +#define TIMER_SLOW_DOWN 4 +#define TIMER_SUPPRESS 5 +#define TIM_FAST 6 +#define TIM_NORMAL 7 + +#define NO_SYS_TIME 20 +#define FCR 21 +#define SCR 22 +#define DLE 23 +#define FCA 24 +#define FRL 25 +#define FHO 26 +#define GSM_OFFSET 27 +#define DCS_OFFSET 28 +#define CTO 29 +#define NKC 30 +#define INIT_FFS 31 +#define WRITE_FFS 32 +#define SET_LAST_USED_SC 33 +#define IHO 34 /* lock the DUT to the cell it is already camping */ +#define FBLS 35 + +#define ID_RESTRICTED_BAND 50 +#define ID_MULTISLOT_CLASS 51 +#if defined(_TARGET_) +#define ID_FFS_CHECK 52 +#endif /* _TARGET_ */ +#define ID_CMSP 54 +#define SCS 55 +#define SHIELD 56 + +#define RR_MT_CALL 37 +#define RR_MT_SMS_0 38 +#define RR_MT_SMS_2 39 +#define RR_SERVICE_FULL 40 +#define RR_SERVICE_LIMITED 41 +#define RR_SERVICE_NO 42 +#define RR_MO_CONNECT 43 +#define ID_PSEUDO_SYNC_HO 44 +#define ID_PCM 45 +#define DCS_PCLASS_3 46 +#define BL_CS 60 +#define U_RXT 61 +#define M_RXT 62 +#define L_RXT 63 +#define SHOW_BL 64 +#define SHOW_WL 65 +#define SET_NPS_DELAY 66 +#if defined (_SIMULATION_FFS_) +#define ERASE_WL 70 +#define ERASE_BL 71 +#endif +#define SET_WL 72 +#define SET_BL 73 +#define SET_WL_REGION 74 +#define SET_WL_PLMN 75 + +#ifdef TI_PS_FF_AT_P_CMD_CTREG +/* + * %CTREG tab_id value + */ +#define RR_MOD_NOSERVICE_TIME 1 +#define RR_MOD_LIMSERVICE_TIME 2 +#endif /* TI_PS_FF_AT_P_CMD_CTREG */ +typedef enum{ + SI_TYPE_NONE, + SI_TYPE_2, + SI_TYPE_2BIS, + SI_TYPE_2TER, + SI_TYPE_3, + SI_TYPE_4, + SI_TYPE_5, + SI_TYPE_5BIS +}T_SI_TYPE; + +typedef enum { + CR_STATUS_OFF = 0, + CR_STATUS_ON + } T_CR; + +typedef enum { + MOB_ALLOC_BEFORE = 0, + MOB_ALLOC_AFTER + } T_MOB_ALLOC_TYPE; + + +/* + * Parameter of dynamic configuration commands + */ +#if !defined(NTRACE) +#if defined(RR_PEI_C) +/* Implements Measure#32: Row 36, 39 and 40 */ +GLOBAL T_S2I_STRING const _rr_str_FUNC[] = { + S2I_STRING("LIM"), /* FUNC_LIM_SERV_ST_SRCH (0x0) limited service state search */ + S2I_STRING("PLMN"), /* FUNC_PLMN_SRCH (1) PLMN search */ + S2I_STRING("NET") /* FUNC_NET_SRCH_BY_MMI (0x2) Net search by MMI */ +}; +GLOBAL const char* const _rr_str_PARFUNC[] = { + "", /* (0) cleared */ + "", /* (1) invalid value */ + "parallel PLMN " /* FUNC_NET_SRCH_BY_MMI (0x2) Net search by MMI */ +}; +/* Implements Measure#32: Row 36, 39 and 40 */ +GLOBAL T_S2I_STRING const _rr_str_SERVICE[] = { + S2I_STRING("NO"), /* NO_SERVICE (0x0) no service available */ + S2I_STRING("LIM"), /* LIMITED_SERVICE (0x1) Limited service available */ + S2I_STRING("FULL") /* FULL_SERVICE (0x2) Full service available */ +}; +GLOBAL const char* const _rr_str_stored_bcch_info[]= +{ + "SI2", "SI2bis", "SI2ter", "SI2" +}; +#else /* RR_PEI_C */ +EXTERN const char* const _rr_str_FUNC[]; +EXTERN const char* const _rr_str_PARFUNC[]; +EXTERN const char* const _rr_str_SERVICE[]; +EXTERN const char* const _rr_str_stored_bcch_info[]; +#endif /* RR_PEI_C */ +#endif /* !NTRACE */ + +/* + * States of the Attachment + */ +#define ATT_NULL 0 +#define ATT_CS1 1 /* Power measurement, Sync (MPH_BSIC_REQ/CNF) */ +#define ATT_CS2 2 /* BCCH reading (Cell selection) */ +#define ATT_CS3 3 /* Cell reselection */ +#define ATT_DEDICATED 4 +#define ATT_IDLE 5 +#define ATT_NO_SERVICE 6 +#define ATT_CON_EST 7 +#define ATT_CS_INIT 8 /* Initial RR_ACTIVATE_REQ got and Power measurements started */ + +/* N950 Memory Optimization - Implements Measure #39*/ +EXTERN T_S2I_STRING const + STATE_ATT_NAME[]; + +/* + * States of the Process Data Transfer + */ +#define DAT_NULL 0 +#define DAT_CELL_RESELECT 1 +#define DAT_CHAN_ASS 2 +#define DAT_CHAN_ASS_1 3 +#define DAT_CHAN_ASS_2 4 +#define DAT_PDCH_ASS 5 +#define DAT_PDCH_ASS_1 6 +#define DAT_PDCH_ASS_2 7 +#define DAT_PDCH_ASS_3 8 +#define DAT_PDCH_ASS_4 9 +#define DAT_CCO_3 10 +#define DAT_CCO_4 11 +#define DAT_CHAN_REL 12 +#define DAT_DEDICATED 13 +#define DAT_HANDOVER 14 +#define DAT_HANDOVER_4 15 +#define DAT_HANDOVER_5 16 +#define DAT_IDLE 17 +#define DAT_IMM_ASS 18 +#define DAT_IMM_ASS_1 19 + +/* N950 Memory Optimization - Implements Measure #39*/ +EXTERN T_S2I_STRING const + STATE_DAT_NAME[]; +/* + * States for short message service (Sapi 3) + */ +#define SMS_IDLE 0 +#define SMS_PENDING 1 +#define SMS_ESTABLISHED 2 + +/* N950 Memory Optimization - Implements Measure #39*/ +EXTERN T_S2I_STRING const + STATE_SAPI_3_NAME[]; +/* + * States for cell selection + */ +#define CS_NULL 0 /* after system start or before 'cs_start_scan' */ +#define CS_NULL_ACTIVE 1 /* after MPH_POWER_REQ sent in CS_NULL */ +#define CS_CCO 2 +#define CS_XMEAS 3 +#define CS_IDLE 4 /* all ARFCNs provided by MPH_POWER_CNF are used by MPH_BSIC_REQ/CNF */ +#define CS_IDLE_ACTIVE 5 /* after MPH_POWER_REQ sent in CS_IDLE or MPH_BSIC_REQ sent */ + +/* N950 Memory Optimization - Implements Measure #39*/ +EXTERN T_S2I_STRING const + STATE_CELL_SEL_NAME[]; +/* + * RR manages 5 (MAX_STATE) states: ATT, DAT, SAPI_3, GPRS, CS + */ +#ifdef OPTION_MULTITHREAD + #define PROCESS_NAME _ENTITY_PREFIXED(PROCESS_NAME) +#endif + +#define STATE_ATT 0 +#define STATE_DAT 1 +#define STATE_SAPI_3 2 +#define STATE_CELL_SEL 3 +#ifdef GPRS +#define STATE_GPRS 4 +#define MAX_STATE 5 +#else +#define MAX_STATE 4 +#endif + +/* N950 Memory Optimization - Implements Measure #39*/ +EXTERN T_S2I_STRING const + PROCESS_NAME[]; + + +#define MAX_STK_LENGTH 80 +#define NOT_INITIALISED NOT_PRESENT_8BIT /*Used for initialising element 'c_ncell_bcch'*/ + +/* + * A definition is provided in RR_PEI.C + */ +#ifdef RR_PEI_C +/* N950 Memory Optimization - Implements Measure #39*/ +GLOBAL T_S2I_STRING const STATE_ATT_NAME[] = +{ + S2I_STRING("ATT_NULL") , + S2I_STRING("ATT_CS1") , + S2I_STRING("ATT_CS2") , + S2I_STRING("ATT_CS3") , + S2I_STRING("ATT_DEDICATED"), + S2I_STRING("ATT_IDLE") , + S2I_STRING("ATT_NO_SERVICE"), + S2I_STRING("ATT_CON_EST") +}; +GLOBAL T_S2I_STRING const STATE_DAT_NAME[] = +{ + S2I_STRING("DAT_NULL") , + S2I_STRING("DAT_CELL_RESELECT"), + S2I_STRING("DAT_CHAN_ASS") , + S2I_STRING("DAT_CHAN_ASS_1") , + S2I_STRING("DAT_CHAN_ASS_2") , + S2I_STRING("DAT_PDCH_ASS") , + S2I_STRING("DAT_PDCH_ASS_1") , + S2I_STRING("DAT_PDCH_ASS_2") , + S2I_STRING("DAT_PDCH_ASS_3") , + S2I_STRING("DAT_PDCH_ASS_4") , + S2I_STRING("DAT_CCO_3") , + S2I_STRING("DAT_CCO_4") , + S2I_STRING("DAT_CHAN_REL") , + S2I_STRING("DAT_HANDOVER") , + S2I_STRING("DAT_HANDOVER_4") , + S2I_STRING("DAT_HANDOVER_5") , + S2I_STRING("DAT_IDLE") , + S2I_STRING("DAT_IMM_ASS") , + S2I_STRING("DAT_IMM_ASS_1") +}; + +GLOBAL T_S2I_STRING const STATE_SAPI_3_NAME[] = +{ + S2I_STRING("SMS_IDLE") , + S2I_STRING("SMS_PENDING") , + S2I_STRING("SMS_ESTABLISHED") +}; + +GLOBAL T_S2I_STRING const STATE_CELL_SEL_NAME[] = +{ + + S2I_STRING("CS_NULL") , + S2I_STRING("CS_NULL_ACTIVE") , + S2I_STRING("CS_CCO") , + S2I_STRING("CS_XMEAS") , + S2I_STRING("CS_IDLE") , + S2I_STRING("CS_IDLE_ACTIVE") +}; +#ifdef GPRS +GLOBAL T_S2I_STRING const PROCESS_NAME[] = +{ + S2I_STRING("ATT") , + S2I_STRING("DAT") , + S2I_STRING("SAPI_3"), + S2I_STRING("CELL_SEL"), + S2I_STRING("GPRS") +}; +#else +GLOBAL T_S2I_STRING const PROCESS_NAME[] = +{ + S2I_STRING("ATT") , + S2I_STRING("DAT") , + S2I_STRING("SAPI_3"), + S2I_STRING("CELL_SEL") +}; +#endif + +#endif + +/* + * Shifts for 'operation_mode' + */ +#define SHIFT_FOR_SIM_TYPE 7 +#define SHIFT_FOR_SEARCH_OFFSET 6 +#define SHIFT_FOR_SIM_INSERTED 5 + +/* + * To check multiband restrictions + */ +#define UNKNOWN_BAND_USED 0 +#define INVALID_BAND_USED 1 +#define LOW_BAND_USED 2 +#define HIGH_BAND_USED 4 +#define EXT_BAND_USED 8 + +/* + * Defines for Equivalent PLMNs + */ +#define UBYTES_PER_PLMN 3 +#define RR_EPLMNLIST_SIZE (SIZE_EPLMN/UBYTES_PER_PLMN) + +/* + * Maximum lenght of the string that can be passed to sprintf + */ +#define MAX_SPRINTF_STRING_LEN 80 + +/*==== TYPES ======================================================*/ +typedef struct +{ + UBYTE length; + UBYTE count; +} T_W_PARAM; + +typedef struct +{ + UBYTE cs; + UBYTE val; +} T_ERROR; + + +/* range check with the fastest way for ARM */ +/* corresponds with ((min <= x) AND (x <= max)) */ +#define INRANGE(min, x, max) ((unsigned) ( (x)-(min) ) <= (unsigned)( (max)-(min) ) ) + +/* + * This data structure stores a list of frequencies. + * The frequencies are stored in bitmap format. + * In GSM the frequencies have a range of 0 - 1023 + * where some of the frequencies are not yet used. + * For the calculation of the needs of bytes and the bit representations of + * the channels within the T_LIST please have a look at rr_srv.c + * (comment with 'List processing Functions') + */ + +#define L3_SDU_BUF_SIZE 30 +typedef struct +{ + /*lint -esym(768,length) : not referenced */ + USHORT length; + USHORT offset; + UBYTE buffer [L3_SDU_BUF_SIZE]; +} T_L3_SDU; + +typedef enum +{ + SAI_NULL, /* no APDU transfer is ongoing */ + SAI_SEGM /* segmentation or re-segmentation is ongoing */ +} T_APPLIC_STATE; + +#if defined FF_EOTD +typedef struct +{ + T_APPLIC_STATE state; /* state of application procedure */ + T_RRRRLP_DATA_IND *rrrrlp_data_ind; /* APDU Data during re-segmentation */ +} T_APPLIC_RX; +#endif /* FF_EOTD */ + +typedef struct +{ + UBYTE param_ind; + UBYTE cbq; + UBYTE cell_reselect_offset; + UBYTE temp_offset; + UBYTE penalty_time; + UBYTE power_off_ind; + UBYTE power_off; + UBYTE two_ter; + UBYTE ecsc; +} T_C2_PARAMETER; + +typedef struct +{ + UBYTE ia_p; + UBYTE ia_maio; + UBYTE c_ia_mac; + UBYTE ia_mac[9]; +} T_IA_REST; + +#if defined(_SIMULATION_FFS_) +typedef struct +{ + UBYTE mcc[MAX_MCC_SHIELD][SIZE_MCC]; + UBYTE enabled; + UBYTE index; +}T_shield_mcc; +#endif + +/* CSI-LLD section:3.2.1 + * Black list contains the carriers that cannot be synchronized + * Carriers belonging to either european or american bands can + * be part of black list + */ +typedef struct +{ + T_LIST list[MAX_REGIONS]; /* Seperate lists for European & American regions */ + U8 sfc[MAX_REGIONS][MAX_SFC_PER_REGION]; /* Seperate sync fail counters for European & American regions */ +}T_CS_BLACK_LIST; + +/* CSI-LLD 3.2.2 + * White List Data of RR.White List contains carriers that are good candidates + * for full service. + */ +typedef struct +{ + T_LIST list; + T_loc_area_ident last_sc_lac; /* stores the LAC of the last serving cell */ + U16 last_sc_arfcn; /* stores the last serving cell ARFCN */ + U8 region; /* stores the region information */ +} T_CS_WHITE_LIST; + +typedef struct +{ + U8 si2[BA_BITMAP_SIZE]; /* stores the BA list received in SI2 */ + U8 si2bis[BA_BITMAP_SIZE]; /* stores the BA list received in SI2BIS */ + U8 si2ter[BA_BITMAP_SIZE]; /* stores the BA list received in SI2TER */ +} T_CR_WHITE_LIST; + +/* + * ms data of RR + */ +typedef struct +{ + UBYTE rr_service; /* actual rr service mode */ + UBYTE req_mm_service; /* by mm requested service mode*/ + BOOL multislot_class_configured; + BOOL cmsp_configured; + T_rf_cap rf_cap; /* MS RF Capability */ + T_mob_class_1 classmark1; /* mobile station classmark 1 */ + T_mob_class_2 classmark2; /* mobile station classmark 2 */ + T_mob_class_3 classmark3; /* mobile station classmark 3 */ +#ifdef GPRS + T_ra_cap ra_cap; /* MS Radio Access Capability */ +#endif + T_mob_ident imei; /* IMEI */ + UBYTE operation_mode; /* Operation Parameters from MM*/ + + /* + * The purpose of 'parallel_net_plmn_search_type?and ‘current_plmn_search_type? * is to record the request for a parallel search (i.e. to action a network + * search whilst an existing search (for a limited/plmn) is already underway) + * + * The original request is stored in ‘current_plmn_search_type?and the parallel + * net search request is stored in ‘parallel_net_plmn_search_type? + * + * When the NET search is completed, ‘parallel_net_plmn_search_type?is cleared + * and ‘mm_req_service?is set the stored search value in ‘current_plmn_search_type? + */ + UBYTE parallel_net_plmn_search_type; + UBYTE current_plmn_search_type; + + + T_plmn plmn; /* requested network by MM */ + BOOL v_eq_plmn; /* EPLMN List is valid or not */ + T_plmn eq_plmn_list[RR_EPLMNLIST_SIZE]; /* eq PLMN list from MM */ + UBYTE cksn; /* cipher key sequence number */ + UBYTE kc [KC_STRING_SIZE]; /* authentication parameter Kc */ + UBYTE new_kc [KC_STRING_SIZE]; /* new auth parameter from SIM */ + USHORT access_classes; /* access classes from SIM */ + T_mob_ident imsi; /* IMSI from SIM card */ + UBYTE imsi_available; /* IMSI available flag */ + ULONG tmsi_binary; /* binary representation TMSI */ + UBYTE tmsi_available; /* TMSI available flag */ + T_loc_area_ident forb_lac_list[MAX_LAI]; + /* forbidden lai list */ + T_loc_area_ident roam_forb_lac_list[MAX_LAI]; + /* roaming forbidden lai list */ + UBYTE c2_tab [NCELL_SIZE]; /* ranked list for C2 */ + UBYTE access_counter; /* counts random bursts */ + UBYTE all_conf_received; /* flag all randoms confirmed */ + UBYTE channel_needed; /* for mobile terminated call */ + T_ERROR error; /* in incoming messages */ + USHORT establish_cause; /* for outgoing call */ + ULONG fn_offset; /* time between measurements */ + T_synch_ind ho_type; /* handover type information */ + USHORT index; /* for random number generation*/ + T_L3_SDU l3msg; /* layer 3 message for establ. */ + UBYTE last_used_channel; /* for building random ref */ + UBYTE max_attempt; /* number of random bursts */ + T_MPH_MEASUREMENT_IND measurement_report;/* last measurement report */ + T_TIME reg_time_gap; /* Time gap between Non parallel search in Lim Ser */ + UBYTE reg_counter; /* registration counter */ + UBYTE old_cell_tried; /* flag during cell reselection*/ + T_plmn ahplmn; /* Acting HPLMN ID */ +#if defined (REL99) AND defined (TI_PS_FF_EMR) AND (GPRS) + BOOL enable_ps_emr; +#endif +} T_MS_DATA; + +#if defined (REL99) && defined (TI_PS_FF_EMR) +/* indicates from where the enhanced para are taken - SI2quater or MI*/ +#define ENH_PARA_IDLE 0 +#define ENH_PARA_DEDICATED 1 +#define ENH_PARA_INVALID_STATE 2 +#endif + +#if defined (TI_PS_FF_RTD) AND defined (REL99) +/* start of constants related to RTD */ +#define RTD_DEFAULT_INDEX 0 +#define RTD_NOT_AVAILABLE 0xFFFF +#define RTD_12BIT 0x8000 +#define MAX_NR_OF_NCELL 0x20 +/* end of constants related to RTD */ +#endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ + + +/* + * data area for cell selection / reselection + */ +typedef struct +{ + UBYTE v_cell_chan_desc; /* cell chan desc flag */ + T_LIST cell_chan_desc; /* cell channel description */ + T_chan_desc cbch_chan_desc; /* cbch channel description */ + UBYTE cbch_chan_desc_avail;/* cbch available flag */ + UBYTE cbch_mob_alloc [65]; /* cbch mobile allocation */ + UBYTE ncc_permitted; /* NCC permitted bitmap */ + T_cell_opt_sacch cell_options; /* cell options */ + UBYTE ncell_ext; /* neighbourcell extension flag*/ + UBYTE dtx; /* dtx flag */ + UBYTE dtx_half; + UBYTE dtx_full; + USHORT sys_info_read; /* bitmap of read sys infos */ + T_LIST ncell_list; /* neighbour cell list */ +#if defined (REL99) && defined (TI_PS_FF_EMR) + UBYTE si2quater_status; /*Indicates the SI-2quater status on cell that can be used + once the cell is selected */ + BOOL si2quater_pos; /* 0 - NBCCH, 1 - EBCCH*/ +#endif +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT + UBYTE band_indicator; /* 0 - 1800, 1 - 1900 */ +#endif +} T_CELL_DATA; + +typedef struct +{ + T_plmn plmn; /* Idetification of Network */ + USHORT lac; /* Location Area Code */ + USHORT arfcn; /* Frequency Number */ + UBYTE rxlev; /* The received signal level */ + UBYTE cell_ok; /* cell allows network access */ + UBYTE region; /* Identification of region */ +} T_FOUND_ELEMENT; + +typedef struct +{ + T_FOUND_ELEMENT element [MAX_PLMN]; +} T_FOUND_LIST; + +#if defined (REL99) && defined (TI_PS_FF_EMR) +typedef struct { + BOOL is_data_valid; /*Indicates whether the maintained Enhanced parameters + is valid or not.*/ + UBYTE mp_change_mark; /*Current change mark value of the measurement parameters + received in Air message*/ + UBYTE msg_count; /*Number of instances to be received*/ + UBYTE rep_type; /* 'Normal' or 'Enhanced': Report type to be used in dedicated mode*/ + UBYTE grr_rep_type; /* 'Normal' or 'Enhanced': Report type to be used in PIM/PTM*/ + T_enh_para_struct enh_para;/* Actual parameters */ +#ifdef GPRS + T_nc_para_struct nc_para; /*Network control parameters*/ +#endif + ULONG ba2bsic_map_pending;/*1 in a bit pos indicates BA-BSIC mapping is pending for that index + may be due to incomplete BA (SI-5ter awaited)*/ + UBYTE scale_used_last; +} T_rr_enh_para; + +/*In a multi instance message where this BSIC info is received, + not all instances carry BSIC list. The instance that carries + this info will have is_valid set to TRUE*/ +typedef struct { + BOOL is_valid; + T_gprs_bsic bsic_info; +} T_bsic_list; +#endif + +/* + * serving cell data of RR + */ +typedef struct +{ + UBYTE ciph_on; /* ciphering status */ + UBYTE algo; /* cipher algorithm */ + UBYTE ciph_received; /* flag ciphering received */ + UBYTE selection_type; /* type of cell selection */ + BOOL mm_started; /* originated of cell selection*/ + UBYTE found_entries; /* number of found PLMNs */ + T_FOUND_ELEMENT found[MAX_PLMN]; /* list of found PLMNs */ + UBYTE first_attempt; /* high priority attempt */ + + T_chan_desc chan_desc; /* actual channel description */ + UBYTE new_ta; /* timing advance */ + UBYTE ch_mode; /* actual channel mode */ + UBYTE ba_index; /* band allocation index */ + ULONG observed_ta; /* observed timing advance */ + T_LIST five_ter_list; /* contains sys info 5ter list */ + T_LIST ncell_list_idle; /* neighbour cell list build in idle mode */ + /* + * data area for cell selection / reselection + */ + T_CELL_DATA cd; /* cell data */ + T_multirate_conf amr_conf; /* MultiRate configuration */ +#if defined(STORE_FN) + ULONG fn; /* last indicated framenumber */ +#endif /* STORE_FN */ +#if defined (REL99) && defined (TI_PS_FF_EMR) + /* + * Data area for EMR + */ + /* + * Parameters that are permanent + */ + UBYTE enh_para_status; /* Indicates Whether the existing enh_para are from SI-2quater or MI*/ + T_rr_enh_para emr_data_current; /*Parameters for EMR - for RR in dedicated + mode and for GRR in PIM/PTM mode. Not required in Idle*/ + BOOL ba_list_ded; /*Indicates whether BA list is already received in dedicated mode*/ + BOOL ba_list_idle;/*Indicates whether BA list is already received in Idle mode*/ + /* + * Parameters that are required only during message processing + */ + T_rr_enh_para emr_data_temp; /* Temporary storage till we get all the instances of Air message*/ + UBYTE prev_highest_index; /*To keep track of highest index*/ + ULONG rep_bmp; /*temporary storage of report priority in bit map form*/ + USHORT instance_bmp; /*A bit set indicates that the instance is received. Bit 0- instance '0' + bit 15 - instance '15'*/ + T_bsic_list bsic_list[MAX_MULTI_INST]; /* To store the received BSIC lists before performing + BA-BSIC mapping*/ + UBYTE rep_count[MAX_NEIGHBOURCELLS]; /* 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*/ + UBYTE emr_count; /*Keeps track (MOD4) of number of EMR messages sent*/ + UBYTE ba_index_idle; /*To store BA_INDEX used in Idle before going to Dedicated*/ + UBYTE new_ba_index; +#endif +} T_SC_DATA; + +/* + * cell reselection data of RR (during handover or hplmn search) + */ +typedef struct +{ + UBYTE ciph_on; /* ciphering status */ + UBYTE algo; /* cipher algorithm */ + UBYTE ch_mode; /* actual channel mode */ + T_chan_desc chan_desc; /* actual channel description */ + T_CR_WHITE_LIST cr_white_list; /* stores si2x temporarily during BCCH reading */ + T_CELL_DATA cd; /* cell data */ + T_multirate_conf amr_conf; /* MultiRate configuration */ +#if defined (REL99) && defined (TI_PS_FF_EMR) + UBYTE ba_index; /* BA-IND received in BA(list) of SI-2*/ +#endif + +} T_CR_DATA; +#ifdef GPRS +typedef enum +{ + NORMAL_BCCH, + EXTENDED_BCCH, + SI13_NOT_PRESENT +} T_SI13_LOC_IND; +#endif +/* + * Neighbour cell data of RR + */ + +/* DRAM Optimization: This structure is re-allign with 4 bytes + * sothat will have minimum wastage */ +typedef struct +{ + T_ctrl_chan_desc control_descr; /* Control Channel Description */ + T_cell_select select_para; /* Cell Selection Parameter */ + T_rach_ctrl rach; /* random control parameter */ + T_loc_area_ident lai; /* location area identification*/ + + ULONG avail_time; /* time ncell is available */ + ULONG c1_counter; /* measurement report counter */ + ULONG bcch_counter; + + USHORT arfcn; /* channel number */ + SHORT c1; /* C1 Path Loss Criterion */ + SHORT c2; /* C2 Reselection Criterion */ + USHORT cell_id; /* cell identifier */ + + T_C2_PARAMETER c2_par; /* C2 Parameter for Calculation*/ + UBYTE rxlev; /* fieldstrength */ + UBYTE v_acs; /* read of sys info 7 & 8 */ + UBYTE c2_used; /* calculated c2 values */ + + UBYTE bcch_error; /* couter BCCH errors */ + UBYTE bcch_status; /* status of neighbour cell */ + UBYTE bsic; /* BSIC */ + UBYTE tnnn; /* 5 sec counter reselection */ + + SHORT c2_corr; +#ifdef GPRS + SHORT c31; + SHORT c32; + UBYTE c32_used; + UBYTE v_cr_par; + T_cr_par cr_par; +#endif + +#ifdef GPRS + T_SI13_LOC_IND si13_loc_ind; +#endif + +#ifdef GPRS + UBYTE rac; /* routing area color */ +#endif + +#ifdef REL99 + UBYTE mscr_flag; +#endif + +} T_NC_DATA; + +/* + * Cell Selection Process Data + */ +typedef struct +{ + UBYTE max_arfcn; /* number of valid channels */ + UBYTE act_index; /* actual index */ + BOOL check_hplmn; /* check HPLMN */ + USHORT arfcn [MAX_CHANNELS]; /* channel number */ + UBYTE rxlev [MAX_CHANNELS]; /* fieldstrength */ + UBYTE attributes[MAX_CHANNELS]; /* attributes of channel */ + /* Bit 7 Bcch Info List Flag + 0 : not member of the BCCH info List + 1 : member of the BCCH info List + Bit 6 Low Priority Flag + 0 : high priority flag + 1 : low priority flag + Bit 5 Emergency Cell Flag + 0 : emergency services possible + 1 : emergency services not possible + Bit 4 BCCH Detected Flag + 0 : BCCH not decoded + 1 : BCCH decoded + Bit 3 BCCH Checked Flag + 0 : BCCH not checked + 1 : BCCH checked + Bit 2 reserved + Bit 1/0 Priority + 0 : low priority + 1 : middle priority + 2 : high priority + */ + USHORT arfcn_sc; + USHORT arfcn_cr; + T_CS_BLACK_LIST black_list; /* Stores the black_list information */ + T_CS_WHITE_LIST white_list; /* Stores the white list information */ + U8 previous_search_mode; /* stores the previous search mode */ + U8 current_search_mode; /* stores the current search mode */ + U8 scan_mode; /* Identifies the scan mode */ + U8 initial_plmn_search; /* Identifies first FUNC_PLMN search */ + U8 black_list_search_pending; + U8 region; /* This stores the region */ + BOOL all_freq_area; /* Identifies presence of both Euro and American coverage */ + T_plmn last_reg_plmn; /* Stores the last registered PLMN */ +} T_CS_DATA; + +/* CSI-LLD Section 3.8 + * Dynamic configuration commands data + */ +typedef struct +{ + U32 tfast_cs_val; /* TFAST_CS timer value in minutes */ + U32 tnormal_cs_val; /* TNORMAL_CS timer value in minutes */ + U8 upper_rxlev_thr[MAX_NUM_BANDS]; /* Upper RxLev threshold */ + U8 medium_rxlev_thr[MAX_NUM_BANDS]; /* Medium RxLev threshold */ + U8 lower_rxlev_thr[MAX_NUM_BANDS]; /* Lower RxLev threshold */ + U8 bl_cs_en; /* Controls Black List search */ + U8 fcr; /* dynamic configuration, Fast Cell Recelection */ + U8 scr; /* dynamic configuration, Slow Cell Recelection */ + U8 fca; /* dynamic configuration, Failed Channel Assignment */ + U8 fho; /* dynamic configuration, Force Handover */ + U8 iho; /* dynamic configuration, lock the DUT to the cell it is already camping */ + U8 set_band; /* dynamic configuration, Frequency Band control */ + U8 no_sys_time; /* dynamic configuration, control time dependent random generation */ + S16 gsm_offset; /* dynamic configuration, offset to path loss criterium C1 */ + S16 dcs_offset; /* dynamic configuration, offset to path loss criterium C1 */ + U8 nkc; /* dynamic configuration, user specific, ciphering when no ciphering key available */ + T_TIME lim_ser_nps_delay;/* dynamic configuration, delay between Non parallel search in Lim ser in all freq area */ +#if defined(_SIMULATION_FFS_) + T_shield_mcc mcc_shield; /* This structure contains the shielded MCC values*/ +#endif +} T_DYNAMIC_CONFIG; + +typedef struct +{ + UBYTE state[MAX_STATE]; + T_MS_DATA ms_data; + T_SC_DATA sc_data; + T_CR_DATA cr_data; + T_NC_DATA nc_data [NCELL_SIZE]; /* 0-5 = ncell, 6 = serving cell + * 7 = cell reselection + */ + T_CS_DATA cs_data; +#ifdef GPRS + T_GPRS_DATA gprs_data; + T_LIST ba_ncell_list; /* Used to store Original BA list, when BA list is midified by PMO */ +#endif + UBYTE lup_rxlev; + UBYTE c1_offset; + /* + * primitive storing variables + */ + T_PRIM *stored_prim [MAX_RR_STORED_PRIM]; + UBYTE stored_prim_in; + UBYTE stored_prim_out; + UBYTE stored_prim_read; + UBYTE stored_prim_write; + /* + * must be checked ... + */ + UBYTE old_serving_cell; + USHORT old_cell_id; + T_loc_area_ident old_lai; + UBYTE page_identity_type; + USHORT power_on_low; + USHORT power_on_high; + USHORT rel_cause; + USHORT dcch_stop_cause; + UBYTE reselect_index; + UBYTE repeat_est; + UBYTE t_running[NUM_OF_RR_TIMERS]; + void (*t_expire[NUM_OF_RR_TIMERS])(void); + UBYTE treg_pending; + UBYTE tch_loop_subch; + UBYTE used_channel_ref[MAX_RACH_REQ]; + T_frame_no used_frame_no[MAX_RACH_REQ]; + UBYTE bcch_error; + + UBYTE pag_rec; + UBYTE imm_ass_rej_rec; + EF_MSCAP mscap; + USHORT act_ncell_list [MAX_NEIGHBOURCELLS]; + UBYTE ncell_mb; + UBYTE start_cell_reselection; + UBYTE first_meas_received; + UBYTE mode_after_dedi; /* MODE_CELL_RESELECTION or MODE_CELL_SELECTION or MODE_CELL_CHANGE_ORDER*/ + BOOL net_lost; /* a RLF Radio Link Failure or DSF Downlink Signalling Failure has occured */ + USHORT found_channel; /* ARFCN of requested PLMN (obtained from 'previous' Cell Selection data) */ + UBYTE ba_id; /* BA identifier used with Neighbour Cell Measurement */ + +#if defined FF_EOTD + USHORT eotd_req_id; /* indicate explicit position measurement requests */ + T_APPLIC_RX applic_rx; /* Application Information transfer */ +#endif /* FF_EOTD */ + + UBYTE emo_seq; /* EMO sequence number */ + UBYTE c_emo_arfcn; /* number of elements in emo_arfcn */ + USHORT *emo_arfcn; /* request list of EMO ARFCNs */ + + UBYTE resel_pending; /* cell reselection was deferred */ + UBYTE c_ncell_bcch; /* # of outstanding ncell BCCH info. Default=NOT_INITIALISED */ + UBYTE cell_test_operation; /* dynamic configuration, as defined in TS 11.11, section 10.3.18 EFAD (Administrative data) */ + T_DYNAMIC_CONFIG dyn_config; /* Holds dynamic configuration data */ +#ifdef GPRS + U8 old_rac; /* Holds old Routing area code */ +#endif + BOOL cr_treselect_exp; /* Flag to indicate whether cell reselection after TRESELECT + * expiry waiting for SI2TER is suceesfull or not */ + BOOL use_stored_entries; /* Use stored entries after end of transition */ +} T_RR_DATA; + +typedef struct +{ + USHORT l_f; + USHORT o_f; + UBYTE b_f[32]; +} T_f_range; + + +/* + * Used for requesting location information from RR for proactive polling in sim + */ +typedef struct +{ + /*lint -esym(768,stk_class) : not referenced */ + /*lint -esym(768,stk_subclass) */ + /*lint -esym(768,stk_type) */ + UBYTE stk_class; + UBYTE stk_subclass; + UBYTE stk_type; + UBYTE stk_length; + UBYTE stk_parameter [MAX_STK_LENGTH]; +} stk_data_type; + +/*==== EXPORT =====================================================*/ + +/* + * Prototypes Timer + */ +/* + * If all entities are linked into one module this definitions + * prefixes all this functions with the enity name + */ + +#ifdef OPTION_MULTITHREAD + #define tim_exec_timeout _ENTITY_PREFIXED(tim_exec_timeout) + #define tim_start_timer _ENTITY_PREFIXED(tim_start_timer) + #define tim_stop_timer _ENTITY_PREFIXED(tim_stop_timer) +#if defined(TIMER_TRACE) + #define tim_check_timer _ENTITY_PREFIXED(tim_check_timer) +#endif /* TIMER_TRACE */ +#endif /* OPTION_MULTITHREAD*/ +EXTERN void tim_exec_timeout (USHORT index); +EXTERN void tim_start_timer (USHORT index, T_TIME value); +EXTERN void tim_stop_timer (USHORT index); +#if defined(TIMER_TRACE) +EXTERN BOOL tim_check_timer(USHORT index); +#endif /* TIMER_TRACE */ + +EXTERN void tim_t3110 (void); +EXTERN void tim_t3122 (void); +EXTERN void tim_t3126 (void); +EXTERN void tim_treselect (void); +EXTERN void tim_treg (void); +EXTERN void tim_ext_meas (void); +#if defined FF_EOTD +EXTERN void tim_apdu (void); +#endif /* FF_EOTD */ +EXTERN void tim_tnnn (void); +EXTERN void set_tnnn (int index, + USHORT value); +EXTERN void reset_tnnn (int index); +EXTERN int is_tnnn (int index); +EXTERN void tim_tabort (void); +EXTERN void tstart_tabort (USHORT val); +EXTERN void tim_reset_registration_timer(void); +EXTERN void tim_plmn_search_expiry (void); +EXTERN void tim_tnormal_cs (void); +EXTERN void tim_tfast_cs (void); + +/* + * Prototypes Customer Specific Functions + */ + +/* + * Cell Selection + */ +EXTERN void cs_init_process (void); +EXTERN void cs_set_all (void); +EXTERN void cs_start_scan (void); +EXTERN void cs_start_sync (void); +EXTERN void cs_del_list (T_LIST * list); +EXTERN void cs_set_list (T_LIST * list); +EXTERN UBYTE cs_def_list (UBYTE attribute); +EXTERN BOOL cs_sync_next (void); +EXTERN void cs_set_null (void); +EXTERN void cs_set_attributes (UBYTE attribute, + USHORT arfcn); +EXTERN void cs_set_rxlev (UBYTE rxlev, USHORT arfcn); +EXTERN void cs_clear_attributes (UBYTE attribute, USHORT arfcn); +EXTERN void cs_mph_power_cnf (T_MPH_POWER_CNF * mph_power_cnf); +EXTERN void cs_mph_bsic_cnf (T_MPH_BSIC_CNF * mph_bsic_cnf); +EXTERN void cs_set_stop_active (void); +EXTERN void cs_set_bcch_info (T_bcch_info * sim_bcch_info); +EXTERN void cs_get_channel_from_found_list (void); +EXTERN void cs_clear_channel_from_found_list (void); +EXTERN UBYTE cs_get_freq_band (UBYTE pch_interrupt); +EXTERN void cs_clear_white_list(U8 clr_bcch_info); + +/* CSI-LLD section:4.1.1.5 */ +GLOBAL void cs_store_black_list(void); +GLOBAL void cs_add_to_black_list(U8 region,U16 arfcn,U8 rxlev); +GLOBAL void cs_del_from_black_list(U8 region,U16 arfcn); +GLOBAL void cs_clear_black_list(U8 erase_type); +GLOBAL void cs_remove_BA_MA_from_black_list(U8 region,T_LIST *source_list); +GLOBAL void cs_update_black_list(void); +EXTERN U8 cs_get_new_search_mode(void); +EXTERN void cs_handle_search_mode_timer(U8 search_mode); +GLOBAL void cs_rem_inactive_carriers_from_bl(T_MPH_POWER_CNF * mph_power_cnf); +GLOBAL BOOL cs_check_region(U8 region); +GLOBAL BOOL cs_check_arfcn_range(U16 arfcn); +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT +GLOBAL UBYTE cs_get_band_index(USHORT arfcn); +#endif + +/* + * RR Attachment + */ + +/* + * attachment primitives + */ +EXTERN void att_mph_error_ind (T_MPH_ERROR_IND * mph_error_ind); +EXTERN void att_mph_measurement_ind (T_MPH_MEASUREMENT_IND * mph_measurement_ind); +EXTERN void dat_mph_emo_meas_ind (T_MPH_EMO_MEAS_IND * mph_emo_meas_ind); +EXTERN void att_rr_activate_req (T_RR_ACTIVATE_REQ * rr_activate_req); +EXTERN void att_rr_deactivate_req (T_RR_DEACTIVATE_REQ * rr_deactivate_req); +EXTERN void att_rr_sync_req (T_RR_SYNC_REQ * rr_sync_req); +EXTERN void att_mph_sync_ind (T_MPH_SYNC_IND * mph_sync_ind); +EXTERN void att_mph_meas_order_cnf (T_MPH_MEAS_ORDER_CNF * mph_meas_order_cnf); +EXTERN void att_rr_sync_hplmn_req (T_RR_SYNC_HPLMN_REQ * rr_sync_hplmn_req); +EXTERN void att_mph_stop_dedicated_cnf (T_MPH_STOP_DEDICATED_CNF * mph_stop_dedi_cnf); +#ifdef GPRS +EXTERN void att_mph_meas_rep_cnf (T_MPH_MEAS_REP_CNF * mph_meas_rep_cnf); +EXTERN void att_mph_ext_meas_cnf (T_MPH_EXT_MEAS_CNF * mph_ext_meas_cnf); +EXTERN void att_ext_meas_end (BOOL destory_rrgrr_ext_meas_cnf); +EXTERN void att_ext_meas_next_bsic (void); +#endif +#if defined FF_EOTD +EXTERN void att_mph_ncell_pos_ind (T_MPH_NCELL_POS_IND * mph_ncell_pos_ind); +#endif /* FF_EOTD */ +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT +EXTERN void att_mph_init_rr_ind (T_MPH_INIT_RR_IND * mph_init_rr_ind); +#endif + + +/* + * attachment signalling + */ +EXTERN void att_dat_dedicated (void); +EXTERN void att_dat_con_est (void); +EXTERN void att_for_sysinfo_type1 (USHORT arfcn, + T_D_SYS_INFO_1 *sys_info_1, + T_LIST *cell_chan_desc); + + + +EXTERN void att_for_sysinfo_type2_2bis (USHORT arfcn, + T_VOID_STRUCT *sys_info_2_2bis, + T_LIST *new_2_2bis_list, + UBYTE ncell_ext, + T_SI_TYPE si_type); + + +EXTERN void att_for_sysinfo_type2ter (USHORT arfcn, + T_D_SYS_INFO_2TER *sys_info_2ter, + T_LIST *new_2ter_list); +EXTERN void att_for_sysinfo_type3 (USHORT arfcn, + T_D_SYS_INFO_3 *sys_info_3); +EXTERN void att_for_sysinfo_type4 (USHORT arfcn, + T_D_SYS_INFO_4 *sys_info_4); + + + +EXTERN void att_for_sysinfo_type5_5bis (USHORT arfcn, + T_LIST *new_5_5bis_list, + UBYTE old_index, + UBYTE ncell_ext, + T_SI_TYPE si_type); + + + +EXTERN void att_for_sysinfo_type5ter (USHORT arfcn, + T_LIST *new_5ter_list); +EXTERN void att_for_sysinfo_type6 (USHORT arfcn, + T_D_SYS_INFO_6 *sys_info_6); +EXTERN void att_for_sysinfo_type7_8 (USHORT arfcn, + T_D_SYS_INFO_8 *sys_info_8); +EXTERN void att_bsic_ind (USHORT arfcn, + UBYTE rxlev, + UBYTE bsic); +EXTERN void att_no_bsic_ind (void); +/* + * attachment procedures + */ +EXTERN UBYTE att_get_index (USHORT arfcn); + +enum forbidden_list_type_e +{ + FORBIDDEN_LIST_NORMAL, + FORBIDDEN_LIST_ROAMING +}; +EXTERN void att_add_to_forb_list (int list_type, + const T_plmn *plmn, + USHORT lac); +EXTERN void att_analyze_measure_report (T_MPH_MEASUREMENT_IND *report); +EXTERN void att_bcch_status_to_decoded (UBYTE index); +EXTERN void att_bits_to_byte (UBYTE *num, + UBYTE size, + UBYTE *bits); +#ifdef REL99 +EXTERN void att_config_cbch (void); +#else +EXTERN void att_build_cbch (void); +#endif +EXTERN void att_build_classmark_req (void); +EXTERN void att_build_idle_req (UBYTE index, + UBYTE mode); +EXTERN void att_calculate_c1 (UBYTE index); + +GLOBAL BOOL att_cell_barred_status_cr_no_cr (UBYTE index); + +EXTERN void att_check_bcch_carrier (void); +EXTERN void att_check_bcch_carrier_si (void); +EXTERN void att_check_neighbourcell (void); +EXTERN void att_check_neighbourcell_si_reestab (void); +EXTERN void att_check_fplmn_cell (void); +EXTERN void att_check_reselect_decision (UBYTE start_now); +EXTERN void att_check_barred_status_in_idle (void); +EXTERN UBYTE att_check_network (T_loc_area_ident *lai); +EXTERN void att_clear_registration_data (void); +EXTERN void att_clear_reg_without_imsi (void); +EXTERN void att_code_mph_ncell_req (UBYTE index); +EXTERN void att_code_mph_ncell_req_dedicated (void); + +EXTERN void att_code_rr_abort_ind_original (T_RR_DATA *rr_data, USHORT cause); +EXTERN void att_code_net_lost (void); +EXTERN void att_code_rr_act_cnf (void); +EXTERN void att_code_rr_act_ind (void); +EXTERN void att_continue_cell_reselect (void); + +EXTERN void att_copy_sys_info_1_par (UBYTE index, + T_D_SYS_INFO_1 *sys_info_1, + T_LIST *cell_chan_desc); +EXTERN void att_copy_sys_info_2_par (UBYTE index, + T_D_SYS_INFO_2 *sys_info_2, + T_LIST *new_2_list, + UBYTE ncell_ext, + UBYTE indicate_changes); +EXTERN void att_copy_sys_info_2bis_par (UBYTE index, + T_D_SYS_INFO_2BIS *sys_info_2bis, + T_LIST *new_2bis_list, + UBYTE ncell_ext, + UBYTE indicate_changes); +EXTERN void att_copy_sys_info_2ter_par (UBYTE index, + T_D_SYS_INFO_2TER *sys_info_2ter, + T_LIST *new_2ter_list, + UBYTE indicate_changes); +EXTERN void att_copy_sys_info_3_par (UBYTE index, + T_D_SYS_INFO_3 *sys_info_3, + UBYTE indicate_changes); +EXTERN void att_copy_sys_info_4_par (UBYTE index, + T_D_SYS_INFO_4 *sys_info_4, + UBYTE indicate_changes); +EXTERN void att_copy_sys_info_7_8_par (UBYTE index, + T_D_SYS_INFO_8 *sys_info_8); +EXTERN void att_copy_c2_parameter_si4 (UBYTE index, + T_si4_rest_oct *rest_oct); + + +EXTERN void att_handle_rr_act_req (UBYTE initial_act, + T_RR_ACTIVATE_REQ *rr_activate_req); +EXTERN void att_increase_power_on_time (USHORT inc); +EXTERN void att_init_cell_selection (UBYTE selection, + BOOL initiator); +EXTERN void att_init_gsm_data (void); +EXTERN void att_init_pl_status (void); +EXTERN SHORT att_max (SHORT a, + SHORT b); +EXTERN T_FOUND_ELEMENT *att_plmn_in_found_list (UBYTE *mcc, + UBYTE *mnc); +EXTERN void att_save_found_plmn (T_FOUND_ELEMENT *element, + UBYTE mcc[], + UBYTE mnc[], + USHORT arfcn, + UBYTE rxlev, + USHORT lac, + UBYTE cell_ok); + +EXTERN void att_remove_bad_ncell (T_MPH_MEASUREMENT_IND *report); +EXTERN void att_reset_old_lai_rac(); +EXTERN void att_copy_old_lai_rac (U8 index); +#if defined(_SIMULATION_FFS_) +GLOBAL UBYTE rr_csf_mcc_present (UBYTE* mcc_value); +#endif +EXTERN void att_clean_buf (USHORT si_to_clean); +EXTERN void att_remove_bad_rr_data_ncells(void); +EXTERN void att_rem_lai_from_forb_list (const T_plmn *plmn, + USHORT lac); +EXTERN void att_set_pl_in_idle_mode (void); +EXTERN void att_set_sys_info_read (USHORT mess_bit, + UBYTE index); +EXTERN void att_start_cell_reselection (UBYTE mode); +EXTERN void att_start_cr_in_pl (UBYTE index); +EXTERN void att_start_cell_selection (BOOL originator, BOOL parallel, U8 search_mode); + + +EXTERN void att_remove_multiple_channels(void); +EXTERN void att_mph_identity_req (void); +EXTERN void att_start_registration_timer(void); +EXTERN void att_set_func (UBYTE func); + + +EXTERN void att_copy_cr_data (void); +EXTERN void att_init_cr_data (void); + + + + +EXTERN void att_check_reestablishment (void); +EXTERN UBYTE att_get_power (void); +EXTERN void att_return_to_idle (void); +EXTERN void att_notify_stop_plmn_search (UBYTE deactivate_pl); +EXTERN void att_leave_dat_imm_ass (void); +EXTERN void att_leave_dedicated (void); +EXTERN void att_stop_dedicated (void); +EXTERN void att_copy_eplmn_list (T_eq_plmn_list *eq_plmn_list); +EXTERN void att_store_plmn_in_found_list (T_loc_area_ident *lai); +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN void attf_send_enh_para_to_alr (UBYTE rep_type,T_enh_para_struct *p_src); +#ifdef GPRS +EXTERN void att_send_enh_para_to_grr(T_rr_enh_para *p_src); +#endif +#endif + +#if !defined(NTRACE) +/* Implements Measure#32: Row 52, 53, 124 & 125 */ +EXTERN void att_print_mcc_mnc (USHORT arfcn, + UBYTE *mcc, + UBYTE *mnc, + T_S2I_STRING titel); /* a valid string is expected */ +#else +#define att_print_mcc_mnc(arfcn,mcc,mnc,titel) +#endif /* !NTRACE */ +EXTERN void att_check_dynamic_search_mode_config(void); +EXTERN void att_full_service_found(void); +EXTERN void att_set_rr_service_info(void); +EXTERN void att_set_tim_advance_info (void); +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT +EXTERN void att_update_std_band_indicator (UBYTE band_indicator); +#endif + + +/* + * Data-Transfer + */ + +/* + * data-transfer primitives + */ +EXTERN void dat_init_rr_data (void); +EXTERN void dat_dl_establish_cnf (T_DL_ESTABLISH_CNF *dl_establish_cnf); +EXTERN void dat_dl_establish_ind (T_DL_ESTABLISH_IND *dl_establish_ind); +EXTERN void dat_mph_random_access_cnf (T_MPH_RANDOM_ACCESS_CNF *mph_random_access_cnf); +EXTERN void dat_dl_release_cnf (T_DL_RELEASE_CNF *dl_release_cnf); +EXTERN void dat_dl_release_ind (T_DL_RELEASE_IND *dl_release_ind); +EXTERN void dat_mph_dedicated_cnf (T_MPH_DEDICATED_CNF *mph_dedicated_cnf); +EXTERN void dat_mph_dedicated_fail_cnf (T_MPH_DEDICATED_FAIL_CNF *mph_dedicated_fail_cnf); +EXTERN void dat_rr_abort_req (T_RR_ABORT_REQ *rr_abort_req); +EXTERN void dat_rr_data_req (T_RR_DATA_REQ *rr_data_req); +EXTERN void dat_rr_establish_req (T_RR_ESTABLISH_REQ *rr_establish_req); +EXTERN void dat_mph_paging_ind (T_MPH_PAGING_IND *mph_paging_ind); +EXTERN void dat_begin_start_immediate_assign (UBYTE id_type, UBYTE chan_need); +#if defined FF_EOTD +EXTERN void dat_rrlc_meas_req (T_RRLC_MEAS_REQ *rrlc_meas_req); +EXTERN void dat_rrrrlp_data_req (T_RRRRLP_DATA_REQ *rrrrlp_data_req); +#endif /* FF_EOTD */ +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN void dat_update_emr_rep_para (T_emp *p_em, T_enh_para_struct *p_enh); +#endif + +/* + * data-transfer signalling + */ +EXTERN void dat_att_cell_selected (void); +EXTERN void dat_att_null (void); +EXTERN void dat_for_assign_cmd (T_DL_DATA_IND *dl_data_ind, + T_D_ASSIGN_CMD *assign_cmd, + T_LIST *hop_list_after, + T_LIST *hop_list_before, + T_LIST *cell_chan_desc); +EXTERN void dat_for_chan_mod (T_DL_DATA_IND *dl_data_ind, + T_D_CHAN_MOD *chan_mod); +EXTERN void dat_for_chan_rel (T_DL_DATA_IND *dl_data_ind, + T_D_CHAN_REL *chan_rel); +#ifdef REL99 +EXTERN void dat_for_class_enq (T_DL_DATA_IND *dl_data_ind, + T_D_CLASS_ENQ *class_enq); +#else +EXTERN void dat_for_class_enq (T_DL_DATA_IND *dl_data_ind); +#endif +EXTERN void dat_for_close_loop_cmd (T_DL_DATA_IND *dl_data_ind, + UBYTE subchannel); +EXTERN void dat_for_ciph_cmd (T_DL_DATA_IND *dl_data_ind, + T_D_CIPH_CMD *ciph_cmd); +EXTERN void dat_for_freq_redef (T_DL_DATA_IND *dl_data_ind, + T_D_FREQ_REDEF *freq_redef, + T_LIST *cell_chan_desc); +EXTERN void dat_for_handov_cmd (T_DL_DATA_IND *dl_data_ind, + T_D_HANDOV_CMD *handov_cmd, + T_LIST *cell_chan_desc, + T_LIST *hop_list_after, + T_LIST *hop_list_before); +EXTERN void dat_for_l3_data_ind (T_DL_DATA_IND *dl_data_ind); +EXTERN void dat_for_open_loop_cmd (T_DL_DATA_IND *dl_data_ind); +EXTERN void dat_for_test_interface (T_DL_DATA_IND *dl_data_ind, + UBYTE device); +EXTERN void dat_for_imm_assign (T_MPH_UNITDATA_IND *mph_unitdata_ind, + T_D_IMM_ASSIGN *imm_assign); +EXTERN void dat_for_imm_assign_ext (T_MPH_UNITDATA_IND *mph_unitdata_ind, + T_D_IMM_ASSIGN_EXT *imm_assign_ext); +EXTERN void dat_for_imm_assign_rej (T_D_IMM_ASSIGN_REJ *imm_assign_rej); + +EXTERN void dat_for_ext_meas_order (T_D_EXT_MEAS_ORDER *ext_meas_order); +#if defined FF_EOTD +EXTERN void rr_applic_rx_init (T_APPLIC_RX *applic_rx); +EXTERN void dat_for_applic_info (T_B_APPLIC_INFO *b_applic_info); +#endif /* FF_EOTD */ +GLOBAL void dat_class_chng_data_req (void); +GLOBAL BOOL dat_hplmn (const UBYTE *mcc, const UBYTE *mnc); +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN BOOL dat_for_meas_inf (T_D_MEAS_INF *p_mi); +#endif + +/* + * data-transfer procedures + */ +EXTERN BOOL dat_access_allowed (USHORT estcs); +EXTERN UBYTE dat_calc_downlink_timeout (UBYTE index); +EXTERN UBYTE dat_calc_paging_group (UBYTE index); +EXTERN UBYTE dat_calc_tn (UBYTE index); +EXTERN BOOL dat_check_error_flag (BOOL send_rr_status); +EXTERN void dat_code_channel_mode_to_mm (void); +EXTERN void dat_code_reestablishment_fail (void); +EXTERN void dat_code_ciphering_to_mm (UBYTE ciph_on); +EXTERN void dat_code_measure_report (T_MPH_MEASUREMENT_IND *report); +EXTERN void dat_code_ext_meas_report (T_MPH_EMO_MEAS_IND *mph_emo_meas_ind); +EXTERN void dat_emo_stop (BOOL send_ncell_req); + + +EXTERN void dat_code_mph_chan_mode_req (T_D_CHAN_MOD *chan_mod); +EXTERN void dat_code_mph_ciphering_req (UBYTE ciph_on, + UBYTE algo, + UBYTE *kc); +EXTERN void dat_code_mph_imm_assign_req (T_start *start, + UBYTE power, + UBYTE maio, + T_LIST *hop_list_after, + T_LIST *hop_list_bef); +EXTERN void dat_code_sys_info_change (UBYTE dtx, + UBYTE pwrc, + UBYTE rlt); +EXTERN void dat_code_mph_freq_redef_req (T_start *start, + T_LIST *hop_list); +EXTERN void dat_code_mph_old_chan_req (void); +EXTERN void dat_code_prr_channel (UBYTE *ch_type, + UBYTE *sapi, + UBYTE chan_type); +EXTERN void dat_code_prr_channel_sms (T_DL_DATA_REQ *dl_data_req, + UBYTE chan_type); +EXTERN void dat_code_prr_bcch_info (UBYTE v_ba_range, + T_ba_range *ba_range); +EXTERN BOOL dat_compare_request_ref (T_req_ref *req_ref, + UBYTE *index); +EXTERN void dat_disconnect_link (USHORT cause); +EXTERN BOOL dat_forb_lai_check (UBYTE index); +EXTERN BOOL dat_roam_forb_lai_check (UBYTE index); + +EXTERN BOOL dat_plmn_equal_req (const UBYTE *bcch_mcc, + const UBYTE *bcch_mnc, + const UBYTE *sim_mcc, + const UBYTE *sim_mnc); + +EXTERN USHORT dat_random (USHORT n); +EXTERN void dat_release_connection (void); +EXTERN void dat_set_last_used_channel (T_chan_desc *chan_desc); +EXTERN void dat_start_immediate_assign (USHORT cause); +EXTERN void dat_start_sabm (void); +EXTERN BOOL dat_test_sim_available (void); +EXTERN BOOL dat_check_sim_available (void); +EXTERN void dat_vsd_bit_set (T_L3_SDU *m_buf, + UBYTE action); +EXTERN void dat_send_bcchinfo_mm (U8 *p); +EXTERN void dat_convert_white_list (void); +EXTERN void dat_store_neigh_cell_desc (U8 si, U8 index, BUF_neigh_cell_desc *cd, + T_LIST *new_neigh_list); + +EXTERN void dat_begin_start_immediate_assign (UBYTE id_type, UBYTE chan_need); +EXTERN void dat_rr_release_ind (USHORT relcs, UBYTE sapi); +EXTERN void dat_send_release_ind (USHORT relcs); +EXTERN void dat_send_assign_fail_msg (UBYTE cause); +EXTERN void dat_send_rr_status_msg (UBYTE cause); +EXTERN void dat_send_handov_fail_msg (UBYTE cause); +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN void dat_code_enh_measure_report (T_MPH_MEASUREMENT_IND *report); +#endif + +#if defined (TI_PS_FF_RTD) AND defined (REL99) +EXTERN void dat_update_rtd_data (T_D_MEAS_INF *p_mi,T_rr_enh_para *p_temp); +EXTERN void dat_update_common_rtd_struct (T_rtdd *rtdd_struct,T_rr_enh_para *p_temp); +#endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ +/* + * Formatter + */ + +/* + * formatter primitives + */ +EXTERN void for_mph_unitdata_ind (T_MPH_UNITDATA_IND *mph_unitdata_ind); +EXTERN void for_dl_data_ind (T_DL_DATA_IND *dl_data_ind); +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN void for_dl_short_unitdata_ind (T_DL_SHORT_UNITDATA_IND *dl_short_unitdata_ind); +#endif +EXTERN void for_rr_trace_message (UBYTE *payload, + USHORT length, + USHORT arfcn, + ULONG fn, + UBYTE direction); +/* + * formatter signalling + */ +EXTERN void for_dat_data_req (T_DL_DATA_REQ *data_req); +EXTERN void for_dat_est_req (T_DL_ESTABLISH_REQ *est_req); +EXTERN void for_dat_est_req_not_coding (T_DL_ESTABLISH_REQ *est_req); +EXTERN void for_dat_est_req_content (T_DL_ESTABLISH_REQ *est_req_content); +EXTERN void for_dat_l3_data_req (T_DL_DATA_REQ *dl_data_req); +EXTERN void for_dat_reconnect_req (T_DL_RECONNECT_REQ *reconnect_req); +EXTERN void for_dat_resume_req (T_DL_RESUME_REQ *resume_req); +EXTERN void for_dat_unitdata_req (T_DL_UNITDATA_REQ *unitdata_req); +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN void for_update_ba_ind (UBYTE index, UBYTE ba_ind); +EXTERN void for_check_and_configure_si2quater (UBYTE index); +EXTERN void for_att_update_ba2bsic_mapping (T_rr_enh_para *p_enh); +EXTERN BOOL for_dat_process_common_emr_data (T_gprs_rep_prio *p_rep, + T_gprs_bsic *p_bl, + UBYTE msg_index, + BOOL ba_available); +EXTERN void for_dat_spd_unitdata_req (T_DL_SHORT_UNITDATA_REQ *p_msg); +#endif + +/* + * formatter procedures + */ +EXTERN void for_check_assign_cmd (T_DL_DATA_IND *dl_data_ind, + T_D_ASSIGN_CMD *ass_cmd); +EXTERN BOOL for_check_ba_range (T_ba_range *ba_range); +EXTERN void for_check_cell_descr (T_cell_desc *cell_desc); +EXTERN void for_check_channel_descr (T_chan_desc *chan_desc); +EXTERN void for_check_channel_mode (UBYTE ch_mod); +EXTERN void for_check_multirate_conf (T_multirate_conf * multirate_conf, UBYTE chan_type); +EXTERN void for_check_cipher_mode_set (T_ciph_mode_set *ciph); +EXTERN void for_check_handov_cmd (T_DL_DATA_IND *dl_data_ind, + T_D_HANDOV_CMD *handov_cmd); +EXTERN void for_create_channel_list (T_f_range *f_range, + T_LIST *cha_list); + +EXTERN void for_suspend_layer_2 (void); +#if defined (REL99) && defined (TI_PS_FF_EMR) +EXTERN BOOL for_process_si2quater(T_si_2qua_octets *p_si2q); +EXTERN void for_update_emr_rep_para(T_si_2qua_octets *p_si2q,T_rr_enh_para *p_em); +EXTERN void for_set_default_emr_data(T_rr_enh_para *p_em); +EXTERN void for_send_enh_para(T_rr_enh_para *p_src); +EXTERN BOOL for_update_enh_cell_list (USHORT *p_list); +EXTERN BOOL for_process_common_emr_data (T_gprs_rep_prio *p_rep, + T_gprs_bsic *p_bsic, + UBYTE msg_index, + BOOL ba_available); +EXTERN void for_mon_si2quater_req(UBYTE action); +#endif + +#if defined (TI_PS_FF_RTD) AND defined (REL99) +EXTERN void for_store_rtd_data (T_si_2qua_octets *p_si2q,T_rr_enh_para *p_temp); +#endif /* #if defined (TI_PS_FF_RTD) AND defined (REL99) */ + + +/* + * If all entities are linked into one module this definitions + * prefixes all this functions with the enity name + */ +#ifdef OPTION_MULTITHREAD + #define for_set_content_error _ENTITY_PREFIXED(for_set_content_error) +#endif + +EXTERN UBYTE for_check_frequency (USHORT channel); +EXTERN void for_set_content_error (UBYTE value); + +EXTERN void rr_csf_read_imei (T_mob_ident *imei); + +/*---------------------------------------------------------------------- + * functions called from other entities + *---------------------------------------------------------------------*/ +/*lint -esym(759,rr_csf_get_radio_access_capability)*/ +/*lint -esym(759,rr_csf_get_classmark1)*/ +/*lint -esym(759,rr_csf_get_classmark2)*/ +/*lint -esym(759,rr_csf_get_rf_capability)*/ +#ifdef GPRS +EXTERN UBYTE rr_csf_get_radio_access_capability + (T_ra_cap *ra_cap); +#endif +EXTERN UBYTE rr_csf_get_classmark1 (T_mob_class_1 *mob_class_1); +EXTERN UBYTE rr_csf_get_classmark2 (T_mob_class_2 *mob_class_2); +EXTERN T_rf_cap* rr_csf_get_rf_capability (void); + + +EXTERN UBYTE rr_csf_fit_capability (void); +EXTERN void rr_csf_ms_cap (void); +EXTERN void rr_csf_read_rfcap (void); +EXTERN void rr_csf_check_rfcap (UBYTE init); +EXTERN void rr_csf_get_freq_bands (UBYTE *pfreq_bands); +GLOBAL void rr_csf_trace_power (void); + +#ifdef REL99 +/* + * Function added to get MSCR flag informaion that used in send sequence number + */ +EXTERN void get_msc_release_version(UBYTE* mscr); +#endif + +#if defined(_SIMULATION_FFS_) +GLOBAL void rr_csf_ffs_init (void); +GLOBAL void cs_store_white_list (void); +GLOBAL void rr_csf_write_black_list (T_LIST *black_list); +GLOBAL void rr_csf_read_black_list (void); +GLOBAL void rr_csf_write_white_list (T_CS_WHITE_LIST *white_list); +GLOBAL void rr_csf_read_white_list (void); +GLOBAL void rr_csf_write_rxlev_thr (UBYTE rxt, SHORT valno, char* val[MAX_NUM_BANDS]); +GLOBAL void rr_csf_read_rxlev_thr (void); +GLOBAL void rr_csf_write_mcc_shield_to_ffs (void); +#endif /* _SIMULATION_FFS_ */ + +/* + * timer + */ +#define TIMERSTART(i,v) tim_start_timer (i, v) +#define TIMERSTOP(i) tim_stop_timer (i) +#if defined(TIMER_TRACE) +#define IS_TIMER_ACTIVE(i) tim_check_timer(i) +#else /* TIMER_TRACE */ +#define IS_TIMER_ACTIVE(i) (rr_data->t_running[i]) +#endif /* TIMER_TRACE */ +/* + * RR services + */ +/* + * If all entities are linked into one module this definitions + * prefixes all this functions with the enity name + */ +#ifdef OPTION_MULTITHREAD + #define srv_store_prim _ENTITY_PREFIXED(srv_store_prim) + #define srv_use_stored_prim _ENTITY_PREFIXED(srv_use_stored_prim) + #define srv_clear_stored_prim _ENTITY_PREFIXED(srv_clear_stored_prim) + #define srv_check_stored_prim _ENTITY_PREFIXED(srv_check_stored_prim) +/* obsolete + #define srv_find_stored_prim _ENTITY_PREFIXED(srv_find_stored_prim) + #define srv_flush_stored_prim _ENTITY_PREFIXED(srv_flush_stored_prim) +*/ +#endif +EXTERN BOOL srv_store_prim (T_PRIM *prim); +EXTERN void srv_use_stored_prim (void); +EXTERN void srv_clear_stored_prim (ULONG opc); +EXTERN UBYTE srv_check_stored_prim (ULONG opc); +/* obsolete +EXTERN UBYTE srv_find_stored_prim (ULONG opc); +*/ + +#if defined (REL99) && defined (TI_PS_FF_EMR) +#define DEFAULT_SERV_BAND_REP 3 /*Number of cells to be reported in EMR for serving band*/ +#endif + +EXTERN void srv_remove_frequencies_in_array (USHORT* arfcn_list); +EXTERN UBYTE srv_remove_frequencies_in_array_gen (USHORT* arfcn_list, UBYTE c_arfcn_list); + +EXTERN int srv_create_chan_mob_alloc (T_LIST *clist, + T_LIST *list, + UBYTE *mobile_alloc); +EXTERN int srv_check_frequencies_in_list (T_LIST *clist); +EXTERN void srv_trace_black_list (void); +EXTERN void srv_trace_white_list (void); + +/* Access function in RR to get cell alloc list. Called from GRR*/ +/*lint -esym(759,srv_get_cell_alloc_list)*/ +/*lint -esym(759,srv_get_cell_alloc_list)*/ +EXTERN void srv_get_cell_alloc_list (T_LIST *target_list); + +EXTERN void rr_pei_primitive (T_PRIM *prim); +/* + * RX + * + */ + +#ifdef FF_PS_RSSI +EXTERN void RX_SetValue (UBYTE new_value, UBYTE new_qual, UBYTE new_access); +#else +EXTERN void RX_SetValue (UBYTE new_value); +#endif + +/* + * Radio resource primitives Engineering Mode + * Bitmask for the event tracing + */ +EXTERN T_RR_DATA rr_data_base; +#define GET_INSTANCE_DATA register T_RR_DATA *rr_data= &rr_data_base + +#define ENTITY_DATA rr_data + +/* +* These Functions are only temporary valid and should replaced as soon as possible +*/ +/*lint -esym(759,get_network_meas)*/ +/*lint -esym(759,get_bcch_chan_list)*/ +EXTERN UBYTE get_network_meas (UBYTE * chan_list); +EXTERN UBYTE get_bcch_chan_list (stk_data_type * out_stk_data); + +#if !defined (_SIMULATION_) +EXTERN UBYTE * dl_get_sacch_buffer (void); +#endif + + +/* + * If all entities are linked into one module this definitions + * prefixes the global data with the enity name + */ +#ifdef TI_PS_HCOMM_CHANGE +EXTERN T_HANDLE rr_handle; +#else /* for hCommHandles backward compatibility */ +#ifdef OPTION_MULTITHREAD + #define hCommMM _ENTITY_PREFIXED(hCommMM) +#if defined FF_EOTD + #define hCommLC _ENTITY_PREFIXED(hCommLC) + #define hCommRRLP _ENTITY_PREFIXED(hCommRRLP) +#endif /* FF_EOTD */ + #define hCommDL _ENTITY_PREFIXED(hCommDL) + #define hCommPL _ENTITY_PREFIXED(hCommPL) + #define hCommMMI _ENTITY_PREFIXED(hCommMMI) +#ifdef FF_WAP + #define hCommWAP _ENTITY_PREFIXED(hCommWAP) /*FMM */ +#endif +#endif + +EXTERN T_HANDLE hCommMM; /* MM Communication */ +#if defined FF_EOTD +EXTERN T_HANDLE hCommLC; /* LC Communication */ +EXTERN T_HANDLE hCommRRLP; /* RRLP Communication */ +#endif /* FF_EOTD */ +EXTERN T_HANDLE hCommDL; /* DL Communication */ +EXTERN T_HANDLE hCommPL; /* PL Communication */ +EXTERN T_HANDLE rr_handle; +EXTERN T_HANDLE hCommMMI; /* EM Communication */ +#ifdef FF_WAP + EXTERN T_HANDLE hCommWAP; /* FMM Communication */ +#endif +#endif /* TI_PS_HCOMM_CHANGE */ + +/* + * If all entities are linked into one module this definitions + * prefixes the global data with the enity name + */ +#ifdef OPTION_MULTITHREAD + #define _decodedMsg _ENTITY_PREFIXED(_decodedMsg) +#endif + +#if defined (REL99) && defined (TI_PS_FF_EMR) +#define MAX_MSTRUCT_CCD_RR MAXIMUM(MAX_MSTRUCT_LEN_RR_SHORT, MAX_MSTRUCT_LEN_RR) +EXTERN UBYTE _decodedMsg [MAX_MSTRUCT_CCD_RR]; +#else +EXTERN UBYTE _decodedMsg [MAX_MSTRUCT_LEN_RR]; +#endif + +#ifdef OPTION_TIMER + /* + * If all entities are linked into one module this definitions + * prefixes the global data with the entity name + */ + #ifdef OPTION_MULTITHREAD + #define partab _ENTITY_PREFIXED(partab) + #endif + +/* EXTERN const KW_DATA partab[];*/ +#endif + +/* + * backward compatibility for some channel modes + */ +#if !defined CM_DATA_14_4 +#define CM_DATA_14_4 0x0F +#define CM_EFR 0x21 +#endif + +/* +* Definitions for AMR +*/ +#define CM_AMR 0x41 +#define MAX_NO_ACS 0x04 +/*#define MAX_CODEC_MODES 0x03*/ + +#if !defined(_FILE10_) +#define __FILE10__ (__FILE__+sizeof(__FILE__)-11) +#endif /* !_FILE10_ */ + +#if defined(SYST_TRACE) +#undef SYST_TRACE +#undef SYST +#undef SYST_TRACE_P +#endif /* !SYST_TRACE */ +#if defined(NEW_FRAME) +#define SYST_TRACE(a) vsi_o_ttrace((T_HANDLE)0, (ULONG)-1,a) +#define SYST (T_HANDLE)0, (ULONG)-1 +#define SYST_TRACE_P(a) vsi_o_ttrace a +#else +#define SYST_TRACE(a) vsi_o_trace("", 0xFFFF,a) +#define SYST "", 0xffff +#define SYST_TRACE_P(a) vsi_o_trace a +#endif /* NEW_FRAME */ +/* + * use it as showed next line... + * SYST_TRACE_P((SYST, "e.g. two parameter: %d %d", p1, p2)); + */ + +#if defined(DL_TRACE_ENABLED) + EXTERN void dl_trace (UCHAR trace_type, + UCHAR channel, + UCHAR ch_type, + UCHAR * data); + #ifdef OPTION_MULTITHREAD + #define dl_trace_buf _ENTITY_PREFIXED(dl_trace_buf) + #endif + #if defined(RR_PEI_C) + GLOBAL char dl_trace_buf[100]; + #else /* RR_PEI_C */ + EXTERN char dl_trace_buf[100]; + #endif /* RR_PEI_C */ + #define TRACE_RR_EVENT 5 + #define DOES_NOT_MATTER 0 + #define DL_OFFLINE_TRACE(s) \ + dl_trace (TRACE_RR_EVENT, DOES_NOT_MATTER, DOES_NOT_MATTER, (UCHAR*)s) +#endif /* DL_TRACE_ENABLED */ + +#if defined(ARRAY_TRACE) + #ifdef OPTION_MULTITHREAD + #define array_trace _ENTITY_PREFIXED(array_trace) + #endif +EXTERN void array_trace (UBYTE*array, int size, char *titel); +#define TRACE_ARRAY(array, size, titel) array_trace(array, size, titel) +#else /* ARRAY_TRACE */ +#define TRACE_ARRAY(array, size, titel) +#endif /* ARRAY_TRACE */ + +#if defined(_SIMULATION_) +#define TRACE_EVENT_WIN(s) TRACE_EVENT(s) +#define TRACE_EVENT_WIN_P1(s,a1) TRACE_EVENT_P1(s,a1) +#define TRACE_EVENT_WIN_P2(s,a1,a2) TRACE_EVENT_P2(s,a1,a2) +#define TRACE_EVENT_WIN_P3(s,a1,a2,a3) TRACE_EVENT_P3(s,a1,a2,a3) +#define TRACE_EVENT_WIN_P4(s,a1,a2,a3,a4) TRACE_EVENT_P4(s,a1,a2,a3,a4) +#define TRACE_EVENT_WIN_P5(s,a1,a2,a3,a4,a5) TRACE_EVENT_P5(s,a1,a2,a3,a4,a5) +#define TRACE_EVENT_WIN_P6(s,a1,a2,a3,a4,a5,a6) TRACE_EVENT_P6(s,a1,a2,a3,a4,a5,a6) +#define TRACE_EVENT_WIN_P7(s,a1,a2,a3,a4,a5,a6,a7) TRACE_EVENT_P7(s,a1,a2,a3,a4,a5,a6,a7) +/*#define TRACE_EVENT_WIN_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) TRACE_EVENT_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) + #define TRACE_EVENT_WIN_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9) TRACE_EVENT_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9)*/ + +/* trace for call of att_code_rr_abort_ind() */ +/* Implements Measure#32: Row 18, 43, 90, 101, 111, 201, 211, and 324 + * Row 17, 41, 89, 100, 110, 200, 210, and 321 */ +#define att_code_rr_abort_ind_trace(c) \ +{ TRACE_EVENT_WIN_P2 ("att_code_rr_abort_ind(%x=%s)", c, S2I_STRING(#c));\ + att_code_rr_abort_ind_original(rr_data, c);} + + +#else /* _SIMULATION_ */ +#define TRACE_EVENT_WIN(s) +#define TRACE_EVENT_WIN_P1(s,a1) +#define TRACE_EVENT_WIN_P2(s,a1,a2) +#define TRACE_EVENT_WIN_P3(s,a1,a2,a3) +#define TRACE_EVENT_WIN_P4(s,a1,a2,a3,a4) +#define TRACE_EVENT_WIN_P5(s,a1,a2,a3,a4,a5) +#define TRACE_EVENT_WIN_P6(s,a1,a2,a3,a4,a5,a6) +#define TRACE_EVENT_WIN_P7(s,a1,a2,a3,a4,a5,a6,a7) +#define TRACE_EVENT_WIN_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) +#define TRACE_EVENT_WIN_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9) + +#define att_code_rr_abort_ind_trace(c) \ +{ TRACE_EVENT_P4 ("att_code_rr_abort_ind(%x=%s) #%u %s", c, #c, __LINE__, __FILE10__);\ + att_code_rr_abort_ind_original(rr_data, c);} + + +#endif /* _SIMULATION_ */ + +#define att_code_rr_abort_ind att_code_rr_abort_ind_trace + +/* + * Tracing of Layer 3 RR Messages. + */ + +#define RR_BINDUMP(payload,length,arfcn,fn,dir) for_rr_trace_message(payload,length,arfcn,fn,dir) + +#endif