diff src/g23m-gprs/grr/grr.h @ 1:fa8dc04885d8

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