FreeCalypso > hg > fc-selenite
view src/g23m-gsm/rr/rr.h @ 2:e636eadcad21
src/g23m-gsm: TCS3.2 version of alr renamed to alr3
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:42:00 +0000 |
parents | d393cd9bb723 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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