view src/g23m-gsm/rr/rr_gprs.h @ 222:c336ed5691a5

FCHG: clear BCICTL2 on boot for extra safety
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Apr 2021 22:04:10 +0000
parents fa8dc04885d8
children
line wrap: on
line source

/*
+-----------------------------------------------------------------------------
|  Project :
|  Modul   :
+-----------------------------------------------------------------------------
|  Copyright 2002 Texas Instruments Berlin, AG
|                 All rights reserved.
|
|                 This file is confidential and a trade secret of Texas
|                 Instruments Berlin, AG
|                 The receipt of or possession of this file does not convey
|                 any rights to reproduce or disclose its contents or to
|                 manufacture, use, or sell anything it may describe, in
|                 whole, or in part, without the specific written consent of
|                 Texas Instruments Berlin, AG.
+-----------------------------------------------------------------------------
|  Purpose :  Declarations for the Protocol Stack Entity
|             Radio Resource / GPRS-enhancements
+-----------------------------------------------------------------------------
*/

#ifndef RR_GPRS_H
#define RR_GPRS_H

#define EXT_MEAS_START_CR  0x40

/* intermediate storage for data of paging indication */
typedef struct
{
  UBYTE id_type;
  UBYTE chan_need;
} T_PAGING_DATA;

typedef enum
{
  START_PROC_ACTIVATE_REQ,
  START_PROC_ENTER_LIMITED,
  START_PROC_NORMAL_CR,
  START_PROC_NORMAL_CS,
  START_PROC_CFG_CHG,
  START_PROC_GPRS_ACT,
  START_PROC_NOTHING
} T_START_PROC;

typedef struct
{
  UBYTE                 rr_sdu[24];
  UBYTE                 si13_sdu[24];
  UBYTE                 tma_in_progress;
  ULONG                 fn;
  UBYTE                 req_ref_idx;
  UBYTE                 gprs_indic;        /* flag MM wants GPRS or not         */
  UBYTE                 si13_received;     /* SI13 has been received            */
  ULONG                 ptmsi;             /* used PTMSI                        */
  ULONG                 ptmsi2;            /* used candidate PTMSI                        */
  ULONG                 tlli;              /* used tlli                         */
  T_p_chan_req_des      p_chan_req_des;    /* Requested channel characteristics */
  T_gprs_meas_results   gprs_meas_results; /* GPRS Measurement Results          */
  UBYTE                 mac_req;           /*                                   */
  T_PAGING_DATA         pag_dat;
  UBYTE                 cs_req;            /*                                   */
  UBYTE                 gprs_suspend;
  UBYTE                 gprs_resump;
  UBYTE                 rac;
  UBYTE                 page_mode;
  USHORT                split_pg;          /* split paging cycle                */
  UBYTE                 use_c31;
  UBYTE                 cr_pbcch_active;
  UBYTE                 cr_type;
  UBYTE                 cr_orig;
  T_START_PROC          start_proc;
  UBYTE                 reconn_cause;      /* cause sent with RRGRR_RECONNECT_REQ during PDCH Assignment procedure */
  UBYTE                 tbf_est;           /* indicate TBF establishment during PDCH Assignment / Cell Change Order */
  T_DL_DATA_IND        *dl_data_ind;       /* store DL primitive containing d_change_order until access to new cell */
  UBYTE                 bsic;          /* BSIC of the new cell during Cell Change Order and CR*/
  USHORT                arfcn;         /* ARFCN of the new cell during Cell Change Order and CR */
  BOOL                  cco_need_reconnect_cnf; /* Flag indicating the need to send RRGRR-RECONNECT-CNF */
  T_rai                 current_rai;       /* last rai assigned by the network to GMM */
  T_add_freq_list       add_freq_lists[RRGRR_BA_LIST_SIZE];  
  UBYTE                 num_add_freq_list;
  T_RRGRR_EXT_MEAS_REQ *rrgrr_ext_meas_req;     /* save the request for GPRS Ext Measurement */
  T_RRGRR_EXT_MEAS_CNF *rrgrr_ext_meas_cnf;     /* compiled result of the GPRS Ext Measurement */
  T_MPH_EXT_MEAS_CNF   *mph_ext_meas_cnf;       /* power measurement result during GPRS Ext Measurement */
  UBYTE                 mph_ext_meas_num;       /* number of carriers used in mph_ext_meas_cnf */
  UBYTE                 ext_meas_ctrl;          /* indicate a pending Ext Meas stop request  */
  BOOL                  is_nc2_used_in_si13;    /* NC state of SI13: NC2 or !NC2 */
  UBYTE                 nc_mode_of_pmo;         /* NC mode of Packet Measurement Order */
  BOOL                  cr_pcco_active;         /* PCCO in BCCH environment, cell not synced */
  BOOL                  ready_state;            /* TRUE  - we are in READY   STATE 
                                                 * FALSE - we are in STANDBY STATE 
                                                 * This is actually a GMM state, but has to 
                                                 * stored here for the NC2 handling and for
                                                 * calculating the C2/C32 values 
                                                 */

#ifdef REL99
  BOOL                  cbch_psi_valid;         /* CBCH info on PSI8 received from GRR */
  T_cbch                cbch_psi8;              /* This field is in GPRS data as this cbch info
                                                 * on PSI 8 could be present only when PBCCH
                                                 * is enabled. 
                                                 */
  BOOL                  cbch_info_rxvd_in_ptm;  /* This flag is set to indicate that CBCH information was received in
                                                 * packet transfer mode. MPH_CBCH_COFIG_REQ should be sent to ALR 
                                                 * only in idle mode. When transitioning again to idle mode
                                                 * if this flag is set, then CBCH info is given to ALR.
                                                 * During packet transfer mode, CBCH info could be received
                                                 * in SI4 or PSI8 or may need updateion because of dependent 
                                                 * parameters change in in PSI2 or other SI messages received in PTM.
                                                 */
  UBYTE                 nw_release;
#endif
  UBYTE                 ba_bcch_modified; /*This flag will be set only when BA(BCCH) is modified by PMO or PCCO*/
} T_GPRS_DATA;

#ifdef OPTION_MULTITHREAD
  #define hCommGRR        _ENTITY_PREFIXED(hCommGRR)
#endif

EXTERN T_HANDLE  hCommGRR;         /* GRR  Communication        */

/*
 * GPRS functions
 */
void  gprs_init_gprs_data                  (void);
void  gprs_get_table_n                     (const T_FUNC**                table,
                                            USHORT*                       n);

/* GPRS support functions for process DATA */
BOOL  dat_check_gprs_imm_ass               (T_MPH_UNITDATA_IND*           unitdata,
                                            T_D_IMM_ASSIGN*               imm_assign,
                                            UBYTE                         index);
void  dat_check_imm_ass_ext                (T_MPH_UNITDATA_IND*           unitdata,
                                            UBYTE                         index);
UBYTE dat_check_imm_assign_pch             (T_MPH_UNITDATA_IND*           unitdata,
                                            T_D_IMM_ASSIGN*               imm_assign);
UBYTE dat_check_imm_ass_rej                (UBYTE                         wait_ind);
UBYTE dat_check_packet_paging_ind          (T_MPH_PAGING_IND*             pag_ind);
void  dat_rrgrr_channel_req                (T_RRGRR_CHANNEL_REQ*          chan_req);

void  att_check_bsic                       (T_RRGRR_NCELL_SYNC_REQ*       check_bsic);
BOOL  dat_gprs_start_sabm                  (void);
void  dat_rrgrr_suspend_dcch_req           (T_RRGRR_SUSPEND_DCCH_REQ*     suspend_dcch_req);
void  dat_rrgrr_suspend_dcch_cnf           (void);
void  dat_rrgrr_reconnect_dcch_req         (T_RRGRR_RECONNECT_DCCH_REQ*   reconnect_dcch_req);
void  dat_rrgrr_reconnect_dcch_cnf         (UBYTE                         reconn_state);
void  dat_rrgrr_resumed_tbf_req            (T_RRGRR_RESUMED_TBF_REQ*      resumed_tbf_req);
void  dat_rrgrr_resumed_tbf_cnf            (void);
void  dat_rrgrr_data_ind                   (T_DL_DATA_IND*                dl_data_ind);
void  dat_rrgrr_change_order               (T_DL_DATA_IND*                dl_data_ind,
                                            T_D_CHANGE_ORDER*             d_change_order);
void  dat_ask_paging_ind                   (T_MPH_PAGING_IND*             pag_ind);
void  dat_ask_paging_ind_pa_only           (T_MPH_PAGING_IND*             pag_ind);
void  dat_stop_dcch_ind                    (UBYTE                         stop_cause);
void  dat_rrgrr_data_req                   (T_RRGRR_DATA_REQ*             data_req);
void  dat_rrgrr_gprs_data_req              (T_RRGRR_GPRS_DATA_REQ*        data_req);
BOOL  dat_check_packet_access              (void);
void  dat_rrgrr_rr_est_req                 (T_RRGRR_RR_EST_REQ*           est_req);
void  dat_rrgrr_rr_est_rsp                 (T_RRGRR_RR_EST_RSP*           rr_est_rsp);
void  dat_rrgrr_activate_req               (T_RRGRR_ACTIVATE_REQ*         act_req);
void  dat_set_gprs_resump                  (T_RR_RELEASE_IND*             rr_release_ind);
void  dat_gprs_suspend_req                 (void);
void  dat_gprs_set_suspended               (void);
#ifdef REL99
BOOL  dat_gprs_cell_in_ptm                 (void);
#endif


/* GPRS support functions for process ATTACHEMENT */
void  att_signal_gprs_support              (void);
void  att_for_sysinfo_type13               (T_MPH_UNITDATA_IND*          data_ind,
                                            T_D_SYS_INFO_13*             sys_info_13);
void  att_set_gprs_indication              (UBYTE                        gprs_indic);
void  att_add_ptmsi                        (T_MPH_IDENTITY_REQ*          mph_identity_req);
void  att_rrgrr_cr_ind                     (UBYTE                        type);
void  att_rrgrr_cr_req                     (T_RRGRR_CR_REQ*              cr_req);
void  att_rrgrr_stop_mon_ccch_req          (T_RRGRR_STOP_MON_CCCH_REQ*   stop_ccch);
void  att_check_gprs_supp                  (UBYTE                        v_gprs_ind,
                                            T_gprs_indic*                data);
void  att_rrgrr_start_mon_ccch_req         (T_RRGRR_START_MON_CCCH_REQ*  start_ccch);
void  att_rrgrr_start_mon_bcch_req         (T_RRGRR_START_MON_BCCH_REQ*  start_bcch);
BOOL  att_check_sync_results               (T_MPH_MEASUREMENT_IND*       mph_measurement_ind);
BOOL  att_gprs_is_avail                    (void);
BOOL  att_gprs_cell_has_pbcch              (void);
void  att_gprs_stop_pl                     (void);
void  att_rrgrr_update_ba_req              (T_RRGRR_UPDATE_BA_REQ*       ba_req);
void  att_gprs_cr_rsp                      (T_RRGRR_CR_RSP*              cr_rsp);
void  att_rrgrr_ext_meas_req               (T_RRGRR_EXT_MEAS_REQ*        ext_meas_req);
UBYTE rr_ext_meas_idx                      (USHORT                       arfcn);
void  att_rrgrr_ext_meas_stop_req          (T_RRGRR_EXT_MEAS_STOP_REQ*   ext_meas_stop_req);
void  att_rrgrr_meas_rep_req               (T_RRGRR_MEAS_REP_REQ*        s);
void  att_gprs_idle_req                    (T_MPH_IDLE_REQ*              idle_req);
BOOL  att_gprs_check_ncell                 (void);
void  att_start_cell_reselection_pbcch     (UBYTE mode);
void  att_cell_reselection_gprs_failed     (void);
/*XXX*/
void  gprs_rrgrr_stop_task                 (T_RRGRR_STOP_TASK_REQ*       stop_task);

void  gprs_rrgrr_fill_from_stored_sdu      (T_sdu*                       to,
                                            UBYTE*                       from);
void  gprs_rrgrr_store_sdu                 (UBYTE*                       to,
                                            T_sdu*                       from);
void  att_gprs_start_task                  (T_RRGRR_START_TASK_REQ*      start_task);
void  att_start_cell_selection_gprs        (UBYTE                        originator,U8 search_mode);
void  att_start_cell_reselection_gprs      (UBYTE                        mode);
void  gprs_init_data_cr                    (void);
void  att_convert_idle_c31_cr              (UBYTE                        index);
void  att_insert_c31_cr_data_in_cell       (UBYTE                        index);
BOOL  att_check_cell_c31                   (void);
void  att_check_c31_reselect_decision      (UBYTE                        start_now);
BOOL  att_check_c31_criterion              (UBYTE                        index);
UBYTE att_get_next_best_c32_index          (BOOL                         c31_calculated);
void  att_calculate_c31_c32                (UBYTE                        index);
void  att_rrgrr_standby_ind                (T_RRGRR_STANDBY_STATE_IND*   stdby);
void  att_rrgrr_ready_ind                  (T_RRGRR_READY_STATE_IND*     rdy);
#ifdef REL99
void  att_rrgrr_cbch_info_ind              (T_RRGRR_CBCH_INFO_IND*       cbch_info);
#endif
void att_gprs_sync_req( T_RRGRR_SYNC_REQ   *sync_req);
BOOL  is_nc2_used                          (void);
#ifdef REL99
UBYTE att_gprs_get_nw_release              (void);
#endif

/*
 * States of the GPRS Process
 * PIM   - Packet Idle Mode
 * PTM   - Packet Transfer Mode
 * PAM   - Packet Access Mode
 */
#define GPRS_NULL                  0 /* GPRS is not activated by MM */
#define GPRS_ACTIVATED             1 /* GPRS is activated by MM
                                      * and we are not on a cell */
#define GPRS_PIM_BCCH              2 /* RR has camped on a GPRS cell which has no PBCCH
                                      * RR is in idle mode
                                      */
#define GPRS_PAM_BCCH              3 /* GRR has requested the establishment of a TBF over CCCH */
#define GPRS_PTM_BCCH              4 /* GRR has established the TBF and transfer data */
#define GPRS_DEDI_SDCCH            5 /* GRR has requested a TBF but was assigned a SDCCH for further
                                      * signalling */
#define GPRS_PIM_PBCCH             6 /* GRR has camped on a GPRS cell which has a PBCCH
                                      * RR and GRR are in idle mode */
#define GPRS_PAM_PBCCH             7 /* GRR is establishing a TBF */
#define GPRS_PTM_PBCCH             8 /* GRR has established a TBF and transfers data */
#define GPRS_SUSPENDED_BCCH        9 /* RR is in or on its way to dedicated mode and was in a GPRS_*_BCCH state */
#define GPRS_SUSPENDED_PBCCH      10 /* RR is in or on its way to dedicated mode and was in a GPRS_*_PBCCH state */

EXTERN  const char * const
        STATE_GPRS_NAME[];
#define STATE_GPRS_NAME_INIT \
       "GPRS_NULL",          \
       "GPRS_ACTIVATED",     \
       "GPRS_PIM_BCCH",      \
       "GPRS_PAM_BCCH",      \
       "GPRS_PTM_BCCH",      \
       "GPRS_DEDI_SDCCH",    \
       "GPRS_PIM_PBCCH",     \
       "GPRS_PAM_PBCCH",     \
       "GPRS_PTM_PBCCH",     \
       "GPRS_SUSPENDED_BCCH",\
       "GPRS_SUSPENDED_PBCCH"


#define ESTCS_GPRS_1P     0x0478
#define ESTCS_GPRS_SB     0x0470
#define ESTCS_GPRS_PAGING 0x0481

#define TBF_EST_NONE      0
#define TBF_EST_PDCH      1
#define TBF_EST_CCO       2

#ifdef REL99
#define RR_GPRS_R97       0
#define RR_GPRS_R99       1
#define RR_GPRS_R4        2
#endif

#endif /* !RR_GPRS_H */