view src/g23m-gprs/grr/grr_f.h @ 632:d968a3216ba0

new tangomdm build target TCS211/Magnetite built for target leonardo runs just fine on the Tango-based Caramel board, but a more proper tangomdm build target is preferable in order to better market these Tango modems to prospective commercial customers. The only differences are in GPIO and MCSI config: * MCSI is enabled in the tangomdm build config. * GPIO 1 is loudspeaker amplifier control on Leonardo, but on Tango platforms it can be used for anything. On Caramel boards this GPIO should be configured as an output driving high. * GPIO 2 needs to be configured as Calypso input on Leonardo, but on Tango platforms it can be used for anything. On Caramel boards this GPIO should be configured as an output, either high or low is OK.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 04 Jan 2020 19:27:41 +0000
parents 219afcfc6250
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 */