view src/g23m-gprs/grr/grr_f.h @ 192:4f40ae165be4

abb.c & init.c: sync with Magnetite for Luna additions These Luna target-specific additions are conditionalized on CONFIG_TARGET_LUNA, a C preprocessor symbol that will never be defined in Selenite, hence this change has exactly zero impact on FC Selenite. However, they are being pulled in as a sync in order to keep the diff between Magnetite and Selenite to a minimum; keeping this diff to a minimum increases our opportunities for possible evolution of future FC firmwares.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 23 May 2020 07:03:46 +0000
parents d393cd9bb723
children
line wrap: on
line source

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

#ifndef GRR_F_H
#define GRR_F_H

 
#define END_OF_LIST 0xff

#define DELETE_MESSAGE 0xff


#define COMPUTE_DATA   0x00
#define INITIALIZE     0x01

#define DB_MODE_INIT      0 /* initialisation                      */
#define DB_MODE_CC_REQ    1 /* cell change request                 */
#define DB_MODE_CC_ACC    2 /* confirmation of cell change request */
                            /* (acceptance of new cell)            */
#define DB_MODE_CC_REJ    3 /* rejection of cell change request    */
                            /* (back to old cell)                  */
#define DB_MODE_SWAP      4 /* swap between the two databases      */

#define PLEV_RND_INDEX    0 
#define S_T_RND_INDEX     1 
#define PCR_RND_INDEX     2 

typedef UBYTE T_DB_MODE;

EXTERN void grr_set_pg_nmo(void);
EXTERN BOOL grr_check_tmsi( BUF_tmsi_field * tmsi_i);              
EXTERN BOOL grr_check_ptmsi( BUF_ptmsi * ptmsi_i);                
EXTERN ULONG grr_buffer2ulong ( BUF_ptmsi * ptmsi);
EXTERN BOOL grr_check_all_tlli ( BUF_tlli_value * tlli_i );
EXTERN void grr_init ( void );
EXTERN UBYTE grr_decode_grr ( T_MSGBUF *  msg_ptr_i );
EXTERN UBYTE grr_decode_rr ( T_MSGBUF *  msg_ptr_i );

EXTERN void grr_encode_ctrl ( UBYTE * ptr_in_i, 
                              T_MSGBUF * ptr_out_i, 
                              UBYTE r_bit_i);
EXTERN BOOL grr_check_address ( UBYTE msg_type_i,UBYTE tn_i );
EXTERN void grr_save_persistence_level ( T_pers_lev * ptr2persistence_level_i );
EXTERN ULONG grr_calc_new_poll_pos ( ULONG fn_i, UBYTE rrbp_i );
EXTERN ULONG grr_random_value (UBYTE index, ULONG max_i);
EXTERN BOOL grr_is_pbcch_present (void);
EXTERN ULONG grr_decode_tbf_start_abs(T_abs *ptr2tbf_abs);
EXTERN ULONG grr_decode_tbf_start_rel(ULONG start_fn, USHORT rel_pos);

EXTERN UBYTE grr_calc_nr_of_set_bits (  UBYTE value  );

EXTERN T_DB_MODE grr_get_db_mode( void );
EXTERN void grr_set_db_ptr( T_DB_MODE mode );
EXTERN void grr_init_db( T_SC_DATABASE *db );

EXTERN BOOL grr_check_dist ( ULONG high_i, ULONG low_i, ULONG dist_i);
EXTERN BOOL handle_ms_cap (UBYTE msg_type );

/* the following functions are used by service MEAS, CS and PSI */
EXTERN void grr_prcs_xmeas_struct    ( T_XMEAS         *db_xmeas,
                                       T_xmeas_par     *air_xmeas,
                                       BOOL             cpy_prm_set,
                                       UBYTE            new_inst_idx,
                                       UBYTE           *start_ext_lst_idx,
                                       UBYTE           *stop_ext_lst_idx   );
EXTERN void grr_init_xmeas_struct    ( T_XMEAS         *xmeas              );
EXTERN BOOL grr_prcs_nc_freq_list    ( T_NC_LIST       *db_list,
                                       T_NC_RFREQ_LIST *rfreq_list,
                                       BOOL             v_air_list,
                                       T_nc_freq_list  *air_list,
                                       T_INFO_TYPE      type,
                                       UBYTE            instance           );
EXTERN void grr_prcs_nc_freq_final   ( T_NC_LIST       *dest_list,
                                       T_NC_RFREQ_LIST *dest_rfreq,
                                       BOOL            *v_src_list_rfreq,
                                       T_NC_LIST       *src_list,
                                       T_NC_RFREQ_LIST *src_rfreq          );
EXTERN void grr_prcs_nc_param_struct ( T_NC_PARAM      *db_nc,
                                       T_nc_meas_par   *ext_nc,
                                       UBYTE            new_idx            );
EXTERN void grr_prcs_nc_param_final  ( T_NC_PARAM      *dest_nc,
                                       BOOL            *v_src_nc,
                                       T_NC_PARAM      *src_nc             );
EXTERN void grr_init_ncmeas_extd_struct
                                     ( T_NCMEAS_EXTENDED *extd,
                                       BOOL               is_cw            );
EXTERN void grr_init_nc_list         ( T_NC_LIST       *list               );

EXTERN void grr_init_nc_param        ( T_NC_PARAM      *param,
                                       BOOL             is_cw              );
EXTERN void grr_sort_ext_lst_freq    ( T_EXT_FREQ_LIST  *list,
                                       UBYTE             max_number,
                                       T_EXT_START_STOP *start_stop        );

/* the above functions are used by service MEAS, CS and PSI */

/*
 * Refrence frequency list, hopping frequencies etc.
 */
EXTERN void grr_create_channel_list(T_rfl* rfl, UBYTE* list);
EXTERN BOOL grr_create_freq_list(UBYTE ma_num, UBYTE maio, T_p_chan_sel *chan_sel, T_p_freq_list *freq_list);
EXTERN void grr_ma_filter_list( 
                               USHORT* list1, /* input*/
                               USHORT* list2, /* output*/
                               const T_gprs_ms_alloc_ie* gp_ma
                               );



/*
 * Cell Reselection functions
 */
EXTERN void grr_prepare_db_for_new_cell (void );

/*
 * NON DRX Functions
 */
EXTERN BOOL grr_is_non_drx_mode( void );
EXTERN BOOL grr_is_non_drx_period(void);
EXTERN void grr_handle_non_drx_period ( T_NON_DRX_TYPE non_drx_type,
                                        BOOL           non_drx_timer_running );

EXTERN void grr_store_g_pwr_par ( T_g_pwr_par      *g_pwr_par );
EXTERN void grr_store_type_pwr_par
                                ( T_pwr_par        *pwr_par,
                                  BOOL              use_prev  );
EXTERN void grr_store_type_tn_alloc_pwr
                                ( T_tn_alloc_pwr   *pwr_par   );
EXTERN void grr_store_type_dyn_alloc
                                ( T_dyn_alloc      *pwr_par   );
EXTERN void grr_store_type_alf_gam
                                ( T_alf_gam        *pwr_par,
                                  UBYTE             tn        );
EXTERN void grr_store_type_pck_upl_ass_ia
                                ( T_tfi_ass_alloc  *pwr_par,
                                  UBYTE             tn        );
EXTERN void grr_store_type_pck_snbl_ass_ia 
                                ( T_sngl_block_alloc *pwr_par,
                                  UBYTE             tn        );

EXTERN void grr_store_type_tfi_ass_rlc
                                ( T_tfi_ass_rlc    *pwr_par,
                                  UBYTE             tn        );

EXTERN void grr_store_type_alpha_gamma
                                ( T_alpha_gamma    *pwr_par,
                                  UBYTE             tn        );

EXTERN void grr_store_type_pwr_ctrl
                                ( T_pwr_ctrl       *pwr_par   );


EXTERN void grr_set_tbf_cfg_req_param
                                ( T_MPHP_ASSIGNMENT_REQ *tbf_cfg_req );

EXTERN void grr_update_pacch( void );

EXTERN USHORT grr_imsi_mod ( void );

EXTERN ULONG grr_get_tlli ( void );

EXTERN void grr_set_buf_tlli ( BUF_tlli_value *buf_tlli_o, ULONG tlli_i );


EXTERN void  grr_set_tlli           ( USHORT * l_tlli,
                                     USHORT * o_tlli,
                                     UBYTE  * b_tlli,
                                     ULONG    tlli          );

EXTERN UBYTE grr_calculate_Ttb (UBYTE ul_usage,UBYTE dl_usage);

EXTERN UBYTE grr_calculate_Tra (UBYTE ul_usage,UBYTE dl_usage);

EXTERN UBYTE grr_reconstruct_dl_usage(UBYTE dl_usage);

EXTERN void grr_encode_ul_ctrl_block ( UBYTE *ul_ctrl_block,
                                       UBYTE *ul_ctrl_data );

EXTERN UBYTE grr_get_ul_ctrl_block_header ( UBYTE r_bit );

EXTERN BOOL grr_check_if_tbf_start_is_elapsed ( ULONG start_fn, ULONG current_fn);

EXTERN UBYTE grr_get_gprs_ms_class( void );

EXTERN BOOL grr_store_cs_param   ( T_NC_LIST    *nc_list,
                                   BOOL          v_cs_par,
                                   T_cs_par     *cs_par,
                                   T_INFO_TYPE   type,
                                   UBYTE         instance,
                                   UBYTE        *number,
                                   USHORT       *last_arfcn,
                                   USHORT        arfcn,
                                   UBYTE         bsic          );
EXTERN void grr_store_si13_pbcch_location
                                 ( T_CR_PAR     *cr_par,
                                   BOOL          v_si13_pbcch,
                                   T_si13_pbcch *si13_pbcch    );
EXTERN void grr_restore_cs_param ( T_ncell_info *curr_info,
                                   T_ncell_info *prev_info,
                                   UBYTE         curr_idx      );
EXTERN T_ncell_info* grr_get_next_ncell_param 
                                 ( UBYTE         max_number,
                                   T_NC_LIST    *list,
                                   T_INFO_SRC    info_src      );
EXTERN T_ncell_info* grr_get_next_bigger_ncell_param 
                                 ( T_NC_LIST    *list,
                                   T_INFO_SRC    info_src      );

EXTERN void grr_handle_ta ( UBYTE v_tav,
                            UBYTE tav,
                            UBYTE v_ul_tai,
                            UBYTE ul_tai,
                            UBYTE ul_tatn, 
                            UBYTE v_dl_tai,
                            UBYTE dl_tai,
                            UBYTE dl_tatn,
                            T_p_timing_advance *ptr2ta);
/*NEWFILES*/
EXTERN void grr_decode_rlcmac ( UBYTE * ptr_msg_i, T_D_HEADER * ptr_d_header_i );
EXTERN T_MSGBUF * grr_handle_rlcmac_header ( T_PACKET_MODE   mode_i, 
                                             T_D_HEADER    * ptr_header_i,
                                             ULONG           fn_i );
EXTERN void grr_increase_dsc ( void );
EXTERN BOOL grr_decrease_dsc ( void );

#define grr_g23_arfcn_to_l1(arfcn)  convert_arfcn_to_l1(arfcn,0)
#define grr_l1_arfcn_to_g23(arfcn)  convert_arfcn_to_g23(arfcn,0)

EXTERN USHORT convert_arfcn_to_l1 (USHORT arfcn, UBYTE std);
EXTERN USHORT convert_arfcn_to_g23 (USHORT arfcn, UBYTE std);

EXTERN T_TIME grr_t_status( USHORT t_index );

#define SET_GPRS_RXLEV_ACCESS_MIN(a,v_b,b) (a=(v_b?b:GPRS_RXLEV_ACCESS_MIN_INVALID))
#define SET_GPRS_MS_TXPWR_MAX_CCH(a,v_b,b) (a=(v_b?b:GPRS_MS_TXPWR_MAX_CCH_INVALID))
#define SET_GPRS_TEMP_OFFSET(a,v_b,b)      (a=(v_b?b:GPRS_TEMPORARY_OFFSET_INVALID))
#define SET_GPRS_PENALTY_TIME(a,v_b,b)     (a=(v_b?b:GPRS_PENALTY_TIME_INVALID    ))
#define SET_GPRS_RESEL_OFF(a,v_b,b)                                                  \
  (a=(v_b?b:(grr_is_pbcch_present()?GPRS_RESEL_OFF_DEFAULT:GPRS_RESEL_OFF_INVALID)))
#define SET_GPRS_HCS_THR(a,v_b,b)          (a=(v_b?b:GPRS_HCS_THR_INVALID         ))
#define SET_GPRS_PRIO_CLASS(a,v_b,b)       (a=(v_b?b:GPRS_PRIORITY_CLASS_INVALID  ))

EXTERN T_NC_MVAL*    grr_get_nc_mval    ( USHORT arfcn, UBYTE bsic, UBYTE *idx );
EXTERN T_ncell_info* grr_get_ncell_info ( USHORT arfcn, UBYTE bsic );

EXTERN void grr_set_pbcch         ( BOOL               pbcch_presence );
EXTERN void grr_set_freq_par      ( T_p_frequency_par *freq_par       );
EXTERN BOOL grr_get_pccch_freq_par( UBYTE              pccch_group, 
                                    T_p_chan_sel      *chan_sel,
                                    T_p_freq_list     *freq_list );

EXTERN void  grr_cgrlc_pwr_ctrl_cnf  ( T_CGRLC_PWR_CTRL_CNF *cgrlc_pwr_ctrl_cnf     );
EXTERN void  grr_cgrlc_pwr_ctrl_req  ( BOOL                  v_c_value              );
EXTERN void  grr_prcs_pwr_ctrl       ( T_CGRLC_pwr_ctrl     *pwr_ctrl,
                                       BOOL                  v_c_value              );
EXTERN UBYTE grr_get_ms_txpwr_max_cch( USHORT                arfcn,
                                       UBYTE                 pwr_offset,
                                       UBYTE                 gprs_ms_txpwr_max_cch  );
EXTERN UBYTE grr_get_pms_max         ( USHORT                arfcn,
                                       UBYTE                 pwr_offset,
                                       UBYTE                 gprs_ms_txpwr_max_cch,
                                       T_MS_PWR_CAP         *mspc                   );
EXTERN void  grr_get_ms_pwr_cap      ( USHORT                arfcn,
                                       UBYTE                 pow_offset,
                                       T_MS_PWR_CAP         *mspc                   );
EXTERN UBYTE grr_get_pcl             ( UBYTE const          *p_ctrl,
                                       SHORT                 nop );

EXTERN void  grr_get_ms_pwr_cap_gsm900 ( UBYTE         rf_pow_cap,
                                         T_MS_PWR_CAP *mspc        );
EXTERN void  grr_get_ms_pwr_cap_dcs1800( UBYTE         rf_pow_cap,
                                         UBYTE         pow_offset,
                                         T_MS_PWR_CAP *mspc        );
EXTERN void  grr_get_ms_pwr_cap_pcs1900( UBYTE         rf_pow_cap,
                                         UBYTE         pow_offset,
                                         T_MS_PWR_CAP *mspc        );
EXTERN UBYTE grr_get_power_class       ( UBYTE         index       );

EXTERN void grr_set_cell_info_service( void );

EXTERN BOOL grr_is_packet_idle_mode( void );

EXTERN void grr_clip_rxlev ( UBYTE *clipp,
                             UBYTE *rxlev, 
                             UBYTE  number );

EXTERN T_gprs_ms_alloc_ie* grr_get_gprs_ma (UBYTE ma_num);

EXTERN BOOL grr_validate_ma_num_in_freq_par (const T_freq_par *freq_par,UBYTE msg_type);

EXTERN BOOL grr_get_ref_list_or_cell_allocation (T_LIST *list1,
                                                 const T_gprs_ms_alloc_ie *gp_ma,
                                                 UBYTE ma_num);
EXTERN BOOL grr_validate_and_count_frequencies ( USHORT radio_freq_list[MPHP_NUMC_MA],
                                                 USHORT* ptr_cnt);

#ifdef REL99

EXTERN T_TIME grr_get_time_to_send_poll(UBYTE rrbp);

/* 
 * Though this funciton is called only by TC, it is placed in
 * grr_f.c so that the temporary static arrays ussed by this
 * fuction can be shared by other function[grr_cnv_freq_para_in_psi8_direct_enc_2]
 * used by CTRL.
 */
EXTERN BOOL grr_cnv_freq_para_in_assignment_direct_enc_2 (T_p_frequency_par *frequency_par,
                                                          T_freq_par *freq_par);

EXTERN BOOL grr_cnv_freq_para_in_psi8_direct_enc_2 (T_cbch *cbch_req,
                                                    const T_freq_par *freq_par);

#ifdef TI_PS_FF_EMR
EXTERN void grr_init_ba_bcch_nc_list ( T_SC_DATABASE   *db                 );

EXTERN void grr_init_enh_param       ( T_GRR_ENH_PARA      *param, 
                                       BOOL             rep_prio_pres      );

GLOBAL void grr_init_enh_cell_list   ( void                                );

EXTERN void grr_prcs_enh_param_cw_temp ( T_GRR_ENH_PARA  *db_enh,
                                         T_enh_rep_param_struct *air_enh,
                                         UBYTE            new_idx          );

EXTERN void grr_prcs_enh_param_pmo   ( T_GRR_ENH_PARA  *db_enh, 
                                       T_enh_meas_param_pmo *air_enh, 
                                       UBYTE  new_idx, UBYTE *pmo_ind      );
EXTERN void grr_prcs_enh_param_pcco  ( T_SC_DATABASE  *db, 
                                       T_enh_meas_param_pcco *air_enh      );

EXTERN void grr_copy_enh_and_nc_params_from_si2qtr
                                     (T_RRGRR_SI2QUATER_IND 
                                      *rrgrr_si2quater_ind                 );

EXTERN UBYTE grr_get_psi3_cm(void);
#endif

#endif

#endif /* !GRR_F_H */