lte-softmodem.h 11.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#ifndef LTE_SOFTMODEM_H
#define LTE_SOFTMODEM_H

#define _GNU_SOURCE
#include <execinfo.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/sched.h>
#include "rt_wrapper.h"
#include <sched.h>
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syscall.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/sysinfo.h>
#include <sys/types.h>
#include <unistd.h>
yilmazt's avatar
yilmazt committed
23
#include "threads_t.h"
24 25
#include "rt_wrapper.h"
#include "../../ARCH/COMMON/common_lib.h"
Wang Tsu-Han's avatar
Wang Tsu-Han committed
26
//#undef MALLOC
27 28 29
#include "assertions.h"
#include "msc.h"
#include "PHY/types.h"
30
#include "PHY/defs_eNB.h"
31
#include "PHY/defs_UE.h"
32
#include "flexran_agent.h"
33 34
#include "s1ap_eNB.h"
#include "SIMULATION/ETH_TRANSPORT/proto.h"
35
#include "proto_agent.h"
yilmazt's avatar
yilmazt committed
36
#include "executables/softmodem-common.h"
37

38

39

40
/***************************************************************************************************************************************/
41
/* command line options definitions, CMDLINE_XXXX_DESC macros are used to initialize paramdef_t arrays which are then used as argument
42 43 44 45 46
   when calling config_get or config_getlist functions                                                                                 */


/*------------------------------------------------------------------------------------------------------------------------------------------*/
/*                                            command line parameters defining UE running mode                                              */
47
/*   optname                     helpstr                paramflags        XXXptr                      defXXXval           type      numelt  */
48 49
/*------------------------------------------------------------------------------------------------------------------------------------------*/
#define CMDLINE_UEMODEPARAMS_DESC {  \
50 51 52 53 54 55 56 57
    {"calib-ue-rx",              CONFIG_HLP_CALUER,     0,                iptr:&rx_input_level_dBm,   defintval:0,        TYPE_INT,   0},    \
    {"calib-ue-rx-med",          CONFIG_HLP_CALUERM,    0,                iptr:&rx_input_level_dBm,   defintval:0,        TYPE_INT,   0},    \
    {"calib-ue-rx-byp",          CONFIG_HLP_CALUERB,    0,                iptr:&rx_input_level_dBm,   defintval:0,        TYPE_INT,   0},    \
    {"debug-ue-prach",           CONFIG_HLP_DBGUEPR,    PARAMFLAG_BOOL,   uptr:NULL,                  defuintval:1,       TYPE_INT,   0},    \
    {"no-L2-connect",            CONFIG_HLP_NOL2CN,     PARAMFLAG_BOOL,   uptr:NULL,                  defuintval:1,       TYPE_INT,   0},    \
    {"calib-prach-tx",           CONFIG_HLP_CALPRACH,   PARAMFLAG_BOOL,   uptr:NULL,                  defuintval:1,       TYPE_INT,   0},    \
    {"loop-memory",              CONFIG_HLP_UELOOP,     0,                strptr:&loopfile,           defstrval:"iqs.in", TYPE_STRING,0},    \
    {"ue-dump-frame",            CONFIG_HLP_DUMPFRAME,  PARAMFLAG_BOOL,   iptr:&dumpframe,            defintval:0,        TYPE_INT,   0},    \
58
  }
59 60 61 62 63 64 65
#define CMDLINE_CALIBUERX_IDX                   0
#define CMDLINE_CALIBUERXMED_IDX                1
#define CMDLINE_CALIBUERXBYP_IDX                2
#define CMDLINE_DEBUGUEPRACH_IDX                3
#define CMDLINE_NOL2CONNECT_IDX                 4
#define CMDLINE_CALIBPRACHTX_IDX                5
#define CMDLINE_MEMLOOP_IDX                     6
66 67
#define CMDLINE_DUMPMEMORY_IDX                  7
/*------------------------------------------------------------------------------------------------------------------------------------------*/
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */


#define CONFIG_HLP_SIML1         "activate RF simulator instead of HW\n"
#define CONFIG_HLP_NUMUE         "number of UE instances\n"
#define CONFIG_HLP_UERXG         "set UE RX gain\n"
#define CONFIG_HLP_UERXGOFF      "external UE amplifier offset\n"
#define CONFIG_HLP_UETXG         "set UE TX gain\n"
#define CONFIG_HLP_UENANTR       "set UE number of rx antennas\n"
#define CONFIG_HLP_UENANTT       "set UE number of tx antennas\n"
#define CONFIG_HLP_UESCAN        "set UE to scan around carrier\n"
#define CONFIG_HLP_EMULIFACE     "Set the interface name for the multicast transport for emulation mode (e.g. eth0, lo, etc.)  \n"
#define CONFIG_HLP_PRB           "Set the PRB, valid values: 6, 25, 50, 100  \n"
#define CONFIG_HLP_DLSHIFT       "dynamic shift for LLR compuation for TM3/4 (default 0)\n"
#define CONFIG_HLP_USRP_ARGS     "set the arguments to identify USRP (same syntax as in UHD)\n"
#define CONFIG_HLP_DMAMAP        "sets flag for improved EXMIMO UE performance\n"
#define CONFIG_HLP_TDD           "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n"
#define CONFIG_HLP_TADV          "Set timing_advance\n"






92

93

94 95
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*                                            command line parameters specific to UE                                                                     */
96
/*   optname                     helpstr             paramflags          XXXptr                          defXXXval            type          numelt       */
97
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
98 99

#define CMDLINE_UEPARAMS_DESC {  \
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
    {"siml1",             CONFIG_HLP_SIML1,       PARAMFLAG_BOOL,  iptr:&simL1flag,                    defintval:0,          TYPE_INT,      0},   \
    {"U",                 CONFIG_HLP_NUMUE,       0,               u16ptr:&NB_UE_INST,                 defuintval:1,         TYPE_UINT16,   0},   \
    {"ue-rxgain",         CONFIG_HLP_UERXG,       0,               dblptr:&(rx_gain[0][0]),            defdblval:130,        TYPE_DOUBLE,   0},   \
    {"ue-rxgain-off",     CONFIG_HLP_UERXGOFF,    0,               dblptr:&rx_gain_off,                defdblval:0,          TYPE_DOUBLE,   0},   \
    {"ue-txgain",         CONFIG_HLP_UETXG,       0,               dblptr:&(tx_gain[0][0]),            defdblval:0,          TYPE_DOUBLE,   0},   \
    {"ue-nb-ant-rx",      CONFIG_HLP_UENANTR,     0,               u8ptr:&nb_antenna_rx,               defuintval:1,         TYPE_UINT8,    0},   \
    {"ue-nb-ant-tx",      CONFIG_HLP_UENANTT,     0,               u8ptr:&nb_antenna_tx,               defuintval:1,         TYPE_UINT8,    0},   \
    {"ue-scan-carrier",   CONFIG_HLP_UESCAN,      PARAMFLAG_BOOL,  iptr:&UE_scan_carrier,              defintval:0,          TYPE_INT,      0},   \
    {"ue-max-power",      NULL,                   0,               iptr:&(tx_max_power[0]),            defintval:23,         TYPE_INT,      0},   \
    {"emul-iface",        CONFIG_HLP_EMULIFACE,   0,               strptr:&emul_iface,                 defstrval:"lo",       TYPE_STRING, 100},   \
    {"L2-emul",           NULL,                   0,               u8ptr:&nfapi_mode,                  defuintval:3,         TYPE_UINT8,    0},   \
    {"num-ues",           NULL,                   0,               u16ptr:&(NB_UE_INST),               defuintval:1,         TYPE_UINT16,   0},   \
    {"nums_ue_thread",    NULL,                   0,               u16ptr:&(NB_THREAD_INST),           defuintval:1,         TYPE_UINT16,   0},   \
    {"r"  ,               CONFIG_HLP_PRB,         0,               u8ptr:&(frame_parms[0]->N_RB_DL),   defintval:25,         TYPE_UINT8,    0},   \
    {"dlsch-demod-shift", CONFIG_HLP_DLSHIFT,     0,               iptr:(int32_t *)&dlsch_demod_shift, defintval:0,          TYPE_INT,      0},   \
    {"usrp-args",         CONFIG_HLP_USRP_ARGS,   0,               strptr:(char **)&usrp_args,         defstrval:"type=b200",TYPE_STRING,   0},   \
    {"mmapped-dma",       CONFIG_HLP_DMAMAP,      PARAMFLAG_BOOL,  uptr:&mmapped_dma,                  defintval:0,          TYPE_INT,      0},   \
    {"T" ,                CONFIG_HLP_TDD,         PARAMFLAG_BOOL,  iptr:&tddflag,                      defintval:0,          TYPE_INT,      0},   \
    {"A",                 CONFIG_HLP_TADV,        0,               iptr:&(timingadv),                  defintval:0,          TYPE_INT,      0}    \
119
  }
120

121 122 123 124
/*-----------------------------------------------------------------------------------------------------------------------------*/
/*                                            command line parameters specific to UE threads                                   */
/*   optname                   helpstr     paramflags     XXXptr                       defXXXval        type          numelt   */
/*-----------------------------------------------------------------------------------------------------------------------------*/
125
#define CMDLINE_UETHREADSPARAMS_DESC {  \
126 127 128 129 130
    {"threadOneSubframe",       NULL,      0,     iptr:&(threads.one),                defintval:1,     TYPE_INT,       0},   \
    {"threadTwoSubframe",       NULL,      0,     iptr:&(threads.two),                defintval:1,     TYPE_INT,       0},   \
    {"threadThreeSubframe",     NULL,      0,     iptr:&(threads.three),              defintval:1,     TYPE_INT,       0},   \
    {"threadSlot1ProcOne",      NULL,      0,     iptr:&(threads.slot1_proc_one),     defintval:1,     TYPE_INT,       0},   \
    {"threadSlot1ProcTwo",      NULL,      0,     iptr:&(threads.slot1_proc_two),     defintval:1,     TYPE_INT,       0},   \
131
  }
132
//    {"threadIQ",                NULL,      0,     iptr:&(threads.iq),                 defintval:1,     TYPE_INT,       0},
133

134
#define DEFAULT_DLF 2680000000
135

136 137

uint64_t get_pdcp_optmask(void);
138 139 140 141
extern pthread_cond_t sync_cond;
extern pthread_mutex_t sync_mutex;
extern int sync_var;

142
extern uint64_t downlink_frequency[MAX_NUM_CCs][4];
143
extern int32_t  uplink_frequency_offset[MAX_NUM_CCs][4];
144 145 146 147 148

extern int rx_input_level_dBm;
extern uint64_t num_missed_slots; // counter for the number of missed slots

extern int oaisim_flag;
yilmazt's avatar
yilmazt committed
149
extern volatile int oai_exit;
150 151 152 153 154 155 156 157

extern openair0_config_t openair0_cfg[MAX_CARDS];
extern pthread_cond_t sync_cond;
extern pthread_mutex_t sync_mutex;
extern int sync_var;
extern int transmission_mode;
extern double cpuf;

158 159 160 161
extern int emulate_rf;
extern int numerology;
extern int usrp_tx_thread;

162 163 164
// In lte-enb.c
extern void stop_eNB(int);
extern void kill_eNB_proc(int inst);
yilmazt's avatar
yilmazt committed
165
extern void init_eNB(int single_thread_flag, int wait_for_sync);
166

167
// In lte-ru.c
Wang Tsu-Han's avatar
Wang Tsu-Han committed
168
extern void stop_ru(RU_t *ru);
169
extern void init_ru_vnf(void);
170 171
extern void init_RU_proc(RU_t *ru);
extern void stop_RU(int nb_ru);
Robert Schmidt's avatar
Robert Schmidt committed
172
extern void kill_RU_proc(RU_t *ru);
173
extern void set_function_spec_param(RU_t *ru);
174
extern void init_RU(char *, int send_dmrssync);
175

176 177 178
// In lte-ue.c
extern int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg);
extern void fill_ue_band_info(void);
179

180
extern void init_UE(int nb_inst,
yilmazt's avatar
yilmazt committed
181 182 183 184 185 186 187 188 189
                    int eMBMS_active,
                    int uecap_xer_in,
                    int timing_correction,
                    int phy_test,
                    int UE_scan,
                    int UE_scan_carrier,
                    runmode_t mode,
                    int rxgain,
                    int txpowermax,
190
                    LTE_DL_FRAME_PARMS *fp);
yilmazt's avatar
yilmazt committed
191

192
extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name);
193

194 195 196
extern void reset_opp_meas(void);
extern void print_opp_meas(void);

Wang Tsu-Han's avatar
Wang Tsu-Han committed
197 198 199 200
extern void init_td_thread(PHY_VARS_eNB *);
extern void init_te_thread(PHY_VARS_eNB *);
extern void kill_td_thread(PHY_VARS_eNB *);
extern void kill_te_thread(PHY_VARS_eNB *);
201

Wang Tsu-Han's avatar
Wang Tsu-Han committed
202
extern void RCConfig_sim(void);
203
extern void init_ocm(void);
Wang Tsu-Han's avatar
Wang Tsu-Han committed
204 205
extern void init_ue_devices(PHY_VARS_UE *);

yilmazt's avatar
yilmazt committed
206
PHY_VARS_UE *init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag);
Cedric Roux's avatar
Cedric Roux committed
207 208

void init_eNB_afterRU(void);
209 210
extern int stop_L1L2(module_id_t enb_id);
extern int restart_L1L2(module_id_t enb_id);
211

yilmazt's avatar
yilmazt committed
212
extern void init_UE_stub_single_thread(int nb_inst, int eMBMS_active, int uecap_xer_in, char *emul_iface);
Wang Tsu-Han's avatar
Wang Tsu-Han committed
213

yilmazt's avatar
yilmazt committed
214
extern PHY_VARS_UE *init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag);
Wang Tsu-Han's avatar
Wang Tsu-Han committed
215

216
#endif