Commit 026d20c2 authored by Eric's avatar Eric

Finish separating NB-IoT from LTE

parent 18695eb2
This diff is collapsed.
...@@ -88,7 +88,7 @@ typedef struct { ...@@ -88,7 +88,7 @@ typedef struct {
/// RRC context variables /// RRC context variables
struct eNB_RRC_INST_s **rrc; struct eNB_RRC_INST_s **rrc;
/// NB_IoT RRC context variables /// NB_IoT RRC context variables
//struct eNB_RRC_INST_NB_IoT_s **nb_iot_rrc; struct eNB_RRC_INST_NB_IoT_s **nbiotrrc;
/// MAC context variables /// MAC context variables
struct eNB_MAC_INST_s **mac; struct eNB_MAC_INST_s **mac;
/// NB_IoT MAC context variables /// NB_IoT MAC context variables
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
*/ */
/* /*
platform_types.h platform_types_NB_IoT.h
------------------- -------------------
AUTHOR : Lionel GAUTHIER AUTHOR : Lionel GAUTHIER
COMPANY : EURECOM COMPANY : EURECOM
...@@ -47,19 +47,30 @@ typedef uint16_t rnti_NB_IoT_t; ...@@ -47,19 +47,30 @@ typedef uint16_t rnti_NB_IoT_t;
#ifndef _BOOLEAN_T_DEFINED_NB_IoT_ #ifndef _BOOLEAN_T_DEFINED_NB_IoT_
#define _BOOLEAN_T_DEFINED_NB_IoT_ #define _BOOLEAN_T_DEFINED_NB_IoT_
typedef signed char boolean_NB_IoT_t; typedef signed char boolean_t;
#if !defined(TRUE) #if !defined(TRUE)
#define TRUE (boolean_NB_IoT_t)0x01 #define TRUE (boolean_t)0x01
#endif #endif
#if !defined(FALSE) #if !defined(FALSE)
#define FALSE (boolean_NB_IoT_t)0x00 #define FALSE (boolean_t)0x00
#endif #endif
#define BOOL_NOT(b) (b^TRUE) #define BOOL_NOT(b) (b^TRUE)
#endif /* _BOOLEAN_T_DEFINED_ */ #endif
///NB-IoT
typedef boolean_t srb1bis_flag_t;
#define SRB1BIS_FLAG_NO FALSE
#define SRB1BIS_FLAG_YES TRUE
typedef boolean_t mib_flag_t;
#define MIB_FLAG_YES TRUE
#define MIB_FLAG_NO FALSE
/* _BOOLEAN_T_DEFINED_ */
/* /*
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// GENERIC ACCESS STRATUM TYPES // GENERIC ACCESS STRATUM TYPES
......
...@@ -280,60 +280,6 @@ typedef struct RrcConfigurationReq_s { ...@@ -280,60 +280,6 @@ typedef struct RrcConfigurationReq_s {
long ue_TimersAndConstants_n310[MAX_NUM_CCs]; long ue_TimersAndConstants_n310[MAX_NUM_CCs];
long ue_TimersAndConstants_n311[MAX_NUM_CCs]; long ue_TimersAndConstants_n311[MAX_NUM_CCs];
long ue_TransmissionMode[MAX_NUM_CCs]; long ue_TransmissionMode[MAX_NUM_CCs];
//NB-IoT------------------------------------------------------------
//RACH
long rach_raResponseWindowSize_NB[MAX_NUM_CCs];
long rach_macContentionResolutionTimer_NB[MAX_NUM_CCs];
long rach_powerRampingStep_NB[MAX_NUM_CCs];
long rach_preambleInitialReceivedTargetPower_NB[MAX_NUM_CCs];
long rach_preambleTransMax_CE_NB[MAX_NUM_CCs];
//BCCH
long bcch_modificationPeriodCoeff_NB[MAX_NUM_CCs];
//PCCH
long pcch_defaultPagingCycle_NB[MAX_NUM_CCs];
long pcch_nB_NB[MAX_NUM_CCs];
long pcch_npdcch_NumRepetitionPaging_NB[MAX_NUM_CCs];
//NPRACH
long nprach_CP_Length[MAX_NUM_CCs];
long nprach_rsrp_range[MAX_NUM_CCs];
long nprach_Periodicity[MAX_NUM_CCs];
long nprach_StartTime[MAX_NUM_CCs];
long nprach_SubcarrierOffset[MAX_NUM_CCs];
long nprach_NumSubcarriers[MAX_NUM_CCs];
long nprach_SubcarrierMSG3_RangeStart[MAX_NUM_CCs];
long maxNumPreambleAttemptCE_NB[MAX_NUM_CCs];
long numRepetitionsPerPreambleAttempt_NB[MAX_NUM_CCs];
long npdcch_NumRepetitions_RA[MAX_NUM_CCs];
long npdcch_StartSF_CSS_RA[MAX_NUM_CCs];
long npdcch_Offset_RA[MAX_NUM_CCs];
//NPDSCH
long npdsch_nrs_Power[MAX_NUM_CCs];
//NPUSCH
long npusch_ack_nack_numRepetitions_NB[MAX_NUM_CCs];
long npusch_srs_SubframeConfig_NB[MAX_NUM_CCs];
long npusch_threeTone_CyclicShift_r13[MAX_NUM_CCs];
long npusch_sixTone_CyclicShift_r13[MAX_NUM_CCs];
BOOLEAN_t npusch_groupHoppingEnabled[MAX_NUM_CCs];
long npusch_groupAssignmentNPUSCH_r13[MAX_NUM_CCs];
//DL_GapConfig
long dl_GapThreshold_NB[MAX_NUM_CCs];
long dl_GapPeriodicity_NB[MAX_NUM_CCs];
long dl_GapDurationCoeff_NB[MAX_NUM_CCs];
//Uplink power control Common
long npusch_p0_NominalNPUSCH[MAX_NUM_CCs];
long npusch_alpha[MAX_NUM_CCs];
long deltaPreambleMsg3[MAX_NUM_CCs];
//UE timers and constants
long ue_TimersAndConstants_t300_NB[MAX_NUM_CCs];
long ue_TimersAndConstants_t301_NB[MAX_NUM_CCs];
long ue_TimersAndConstants_t310_NB[MAX_NUM_CCs];
long ue_TimersAndConstants_t311_NB[MAX_NUM_CCs];
long ue_TimersAndConstants_n310_NB[MAX_NUM_CCs];
long ue_TimersAndConstants_n311_NB[MAX_NUM_CCs];
//---------------------------------------------------------------------------
int eMBMS_configured; int eMBMS_configured;
int eMTC_configured; int eMTC_configured;
int SL_configured; int SL_configured;
......
File mode changed from 100644 to 100755
...@@ -59,64 +59,6 @@ extern RAN_CONTEXT_t RC; ...@@ -59,64 +59,6 @@ extern RAN_CONTEXT_t RC;
///////////////////////////// NB-IoT parameters /////////////////////////////////////
//NB-IoT------------------------------------------------------------
//RACH
RRC_CONFIGURATION_REQ (msg_p).rach_raResponseWindowSize_NB[CC_id] = enb_properties->properties[enb_id]->rach_raResponseWindowSize_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).rach_macContentionResolutionTimer_NB[CC_id] = enb_properties->properties[enb_id]->rach_macContentionResolutionTimer_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).rach_powerRampingStep_NB[CC_id] = enb_properties->properties[enb_id]->rach_powerRampingStep_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).rach_preambleInitialReceivedTargetPower_NB[CC_id] = enb_properties->properties[enb_id]->rach_preambleInitialReceivedTargetPower_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).rach_preambleTransMax_CE_NB[CC_id] = enb_properties->properties[enb_id]->rach_preambleTransMax_CE_NB[CC_id];
//BCCH
RRC_CONFIGURATION_REQ (msg_p).bcch_modificationPeriodCoeff_NB[CC_id] = enb_properties->properties[enb_id]->bcch_modificationPeriodCoeff_NB[CC_id];
//PCCH
RRC_CONFIGURATION_REQ (msg_p).pcch_defaultPagingCycle_NB[CC_id] = enb_properties->properties[enb_id]->pcch_defaultPagingCycle_NB[CC_id];
//NPRACH
RRC_CONFIGURATION_REQ (msg_p).nprach_CP_Length[CC_id] = enb_properties->properties[enb_id]->nprach_CP_Length[CC_id];
RRC_CONFIGURATION_REQ (msg_p).nprach_rsrp_range[CC_id] = enb_properties->properties[enb_id]->nprach_rsrp_range[CC_id];
RRC_CONFIGURATION_REQ (msg_p).nprach_Periodicity[CC_id] = enb_properties->properties[enb_id]->nprach_Periodicity[CC_id];
RRC_CONFIGURATION_REQ (msg_p).nprach_StartTime[CC_id] = enb_properties->properties[enb_id]->nprach_StartTime[CC_id];
RRC_CONFIGURATION_REQ (msg_p).nprach_SubcarrierOffset[CC_id] = enb_properties->properties[enb_id]->nprach_SubcarrierOffset[CC_id];
RRC_CONFIGURATION_REQ (msg_p).nprach_NumSubcarriers[CC_id] = enb_properties->properties[enb_id]->nprach_NumSubcarriers[CC_id];
RRC_CONFIGURATION_REQ (msg_p).nprach_SubcarrierMSG3_RangeStart[CC_id] = enb_properties->properties[enb_id]->nprach_SubcarrierMSG3_RangeStart[CC_id];
RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_NB[CC_id] = enb_properties->properties[enb_id]->maxNumPreambleAttemptCE_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npdcch_NumRepetitions_RA[CC_id] = enb_properties->properties[enb_id]->npdcch_NumRepetitions_RA[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npdcch_StartSF_CSS_RA[CC_id] = enb_properties->properties[enb_id]->npdcch_StartSF_CSS_RA[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npdcch_Offset_RA[CC_id] = enb_properties->properties[enb_id]->npdcch_Offset_RA[CC_id];
//NPDSCH
RRC_CONFIGURATION_REQ (msg_p).npdsch_nrs_Power[CC_id] = enb_properties->properties[enb_id]->npdsch_nrs_Power[CC_id];
//NPUSCH
RRC_CONFIGURATION_REQ (msg_p).npusch_ack_nack_numRepetitions_NB[CC_id] = enb_properties->properties[enb_id]->npusch_ack_nack_numRepetitions_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npusch_srs_SubframeConfig_NB[CC_id] = enb_properties->properties[enb_id]->npusch_srs_SubframeConfig_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npusch_threeTone_CyclicShift_r13[CC_id] = enb_properties->properties[enb_id]->npusch_threeTone_CyclicShift_r13[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npusch_sixTone_CyclicShift_r13[CC_id] = enb_properties->properties[enb_id]->npusch_sixTone_CyclicShift_r13[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npusch_groupHoppingEnabled[CC_id] = enb_properties->properties[enb_id]->npusch_groupHoppingEnabled[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npusch_groupAssignmentNPUSCH_r13[CC_id] = enb_properties->properties[enb_id]->npusch_groupAssignmentNPUSCH_r13[CC_id];
//DL_GapConfig
RRC_CONFIGURATION_REQ (msg_p).dl_GapThreshold_NB[CC_id] = enb_properties->properties[enb_id]->dl_GapThreshold_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).dl_GapPeriodicity_NB[CC_id] = enb_properties->properties[enb_id]->dl_GapPeriodicity_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).dl_GapDurationCoeff_NB[CC_id] = enb_properties->properties[enb_id]->dl_GapDurationCoeff_NB[CC_id];
//Uplink power control Common
RRC_CONFIGURATION_REQ (msg_p).npusch_p0_NominalNPUSCH[CC_id] = enb_properties->properties[enb_id]->npusch_p0_NominalNPUSCH[CC_id];
RRC_CONFIGURATION_REQ (msg_p).npusch_alpha[CC_id] = enb_properties->properties[enb_id]->npusch_alpha[CC_id];
RRC_CONFIGURATION_REQ (msg_p).deltaPreambleMsg3[CC_id] = enb_properties->properties[enb_id]->deltaPreambleMsg3[CC_id];
//UE timers and constants
RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_t300_NB[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_t300_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_t301_NB[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_t301_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_t310_NB[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_t310_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_t311_NB[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_t311_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_n310_NB[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_n310_NB[CC_id];
RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_n311_NB[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_n311_NB[CC_id];
////////////////////////////////////////////////////////////////////////////////////
}
itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
}
/*------------------------------------------------------------------------------*/
static uint32_t eNB_app_register(ngran_node_t node_type,uint32_t enb_id_start, uint32_t enb_id_end) { static uint32_t eNB_app_register(ngran_node_t node_type,uint32_t enb_id_start, uint32_t enb_id_end) {
uint32_t enb_id; uint32_t enb_id;
......
...@@ -22,9 +22,11 @@ ...@@ -22,9 +22,11 @@
#include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h" #include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
#include "config_NB_IoT.h" #include "config_NB_IoT.h"
// MAC definition // MAC definition
#define MAX_FRAME 0xfffff //#define MAX_FRAME 0xfffff
#define NUM_FRAME 0x100000 //#define NUM_FRAME 0x100000
#define MAX_SUBFRAME 10485760 //#define MAX_SUBFRAME 10485760
#define MAX_FRAME 0xfff
#define MAX_SUBFRAME 40960
#define MAX(a, b) (((a)>(b))?(a):(b)) #define MAX(a, b) (((a)>(b))?(a):(b))
...@@ -62,8 +64,8 @@ ...@@ -62,8 +64,8 @@
/*!\brief DTCH DRB1 logical channel */ /*!\brief DTCH DRB1 logical channel */
#define DTCH 3 // LCID #define DTCH 3 // LCID
/*!\brief MCCH logical channel */ /*!\brief MCCH logical channel */
//#define MCCH 4 #define MCCH 4
#define MCCH 62 //#define MCCH 62
/*!\brief MTCH logical channel */ /*!\brief MTCH logical channel */
#define MTCH 1 #define MTCH 1
// DLSCH LCHAN ID // DLSCH LCHAN ID
...@@ -209,9 +211,12 @@ typedef struct { ...@@ -209,9 +211,12 @@ typedef struct {
int prev; int prev;
// MSG4 complete // MSG4 complete
int RRC_connected; int RRC_connected;
uint8_t flag_schedule_success;
// UE active flag // UE active flag
int active; int active;
//boolean_t active;
uint8_t allocated_data_size_ul;
} UE_TEMPLATE_NB_IoT; } UE_TEMPLATE_NB_IoT;
// link list of uplink resource node // link list of uplink resource node
...@@ -327,6 +332,7 @@ typedef struct { ...@@ -327,6 +332,7 @@ typedef struct {
/// DCI template and MAC connection parameters for UEs /// DCI template and MAC connection parameters for UEs
UE_TEMPLATE_NB_IoT UE_template_NB_IoT[MAX_MAX_MOBILES_PER_ENB_NB_IoT]; UE_TEMPLATE_NB_IoT UE_template_NB_IoT[MAX_MAX_MOBILES_PER_ENB_NB_IoT];
UE_SCHED_CTRL_NB_IoT_t UE_sched_ctrl_NB_IoT[MAX_MAX_MOBILES_PER_ENB_NB_IoT];
/// NPDCCH Period and searching space info /// NPDCCH Period and searching space info
NPDCCH_config_dedicated_NB_IoT_t NPDCCH_config_dedicated; NPDCCH_config_dedicated_NB_IoT_t NPDCCH_config_dedicated;
//int next[MAX_MAX_MOBILES_PER_ENB_NB_IoT]; //int next[MAX_MAX_MOBILES_PER_ENB_NB_IoT];
...@@ -631,6 +637,8 @@ typedef struct { ...@@ -631,6 +637,8 @@ typedef struct {
nprach_parameters_NB_IoT_t nprach_list[3]; nprach_parameters_NB_IoT_t nprach_list[3];
nfapi_config_request_t config;
//DLSF Table //DLSF Table
DLSF_INFO_t DLSF_information; DLSF_INFO_t DLSF_information;
......
...@@ -31,16 +31,6 @@ ...@@ -31,16 +31,6 @@
#include "assertions.h" #include "assertions.h"
#include "PHY/defs.h"
#include "PHY/extern.h"
//#include "PHY/LTE_TRANSPORT/dci_NB_IoT.h"
#include "SCHED/defs.h"
#include "SCHED/extern.h"
#include "LAYER2/MAC/defs.h"
#include "targets/RT/USER/lte-softmodem.h" #include "targets/RT/USER/lte-softmodem.h"
#include "LAYER2/MAC/mac.h" #include "LAYER2/MAC/mac.h"
#include "LAYER2/MAC/mac_extern.h" #include "LAYER2/MAC/mac_extern.h"
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h" #include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h"
#include "LAYER2/MAC/defs_NB_IoT.h" #include "LAYER2/MAC/defs_NB_IoT.h"
#include "COMMON/platform_types.h" #include "COMMON/platform_types.h"
#include "openair2/RRC/LTE/defs_NB_IoT.h" #include "openair2/RRC/LITE/defs_NB_IoT.h"
/** \addtogroup _mac /** \addtogroup _mac
* @{ * @{
*/ */
...@@ -114,7 +114,7 @@ available_resource_DL_t *check_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, int ch ...@@ -114,7 +114,7 @@ available_resource_DL_t *check_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst, int ch
void print_available_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst); void print_available_resource_DL(eNB_MAC_INST_NB_IoT *mac_inst);
void print_schedule_result_DL(void); void print_schedule_result_DL(void);
void print_schedule_result_UL(void); void print_schedule_result_UL(void);
void add_ue(eNB_MAC_INST_NB_IoT *mac_inst, uint16_t rnti, ce_level_t ce, uint32_t PHR, uint32_t ul_total_buffer); void add_ue_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, uint16_t rnti, ce_level_t ce, uint32_t PHR, uint32_t ul_total_buffer);
void remove_ue(eNB_MAC_INST_NB_IoT *mac_inst, uint16_t rnti, ce_level_t ce); void remove_ue(eNB_MAC_INST_NB_IoT *mac_inst, uint16_t rnti, ce_level_t ce);
// SIBs // SIBs
void schedule_sibs(eNB_MAC_INST_NB_IoT *mac_inst, uint32_t sibs_order, int start_subframe); void schedule_sibs(eNB_MAC_INST_NB_IoT *mac_inst, uint32_t sibs_order, int start_subframe);
...@@ -232,7 +232,6 @@ void rx_sdu_NB_IoT(module_id_t module_id, int CC_id, frame_t frame, sub_frame_t ...@@ -232,7 +232,6 @@ void rx_sdu_NB_IoT(module_id_t module_id, int CC_id, frame_t frame, sub_frame_t
int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_id, uint32_t hypersfn, uint32_t frame, uint32_t subframe, uint8_t MIB_flag, uint8_t SIB1_flag, uint32_t current_time); int output_handler(eNB_MAC_INST_NB_IoT *mac_inst, module_id_t module_id, int CC_id, uint32_t hypersfn, uint32_t frame, uint32_t subframe, uint8_t MIB_flag, uint8_t SIB1_flag, uint32_t current_time);
// main // main
void mac_top_init_eNB_NB_IoT(void);
uint32_t to_earfcn_NB_IoT(int eutra_bandP,uint32_t dl_CarrierFreq, float m_dl); uint32_t to_earfcn_NB_IoT(int eutra_bandP,uint32_t dl_CarrierFreq, float m_dl);
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
#include "UTIL/OSA/osa_defs.h" #include "UTIL/OSA/osa_defs.h"
#include "openair2/RRC/NAS/nas_config.h" #include "openair2/RRC/NAS/nas_config.h"
# include "intertask_interface.h" # include "intertask_interface.h"
#include "enb_paramdef.h"
# include "gtpv1u_eNB_task.h" # include "gtpv1u_eNB_task.h"
# include "gtpv1u.h" # include "gtpv1u.h"
...@@ -82,13 +82,15 @@ hash_table_t *pdcp_coll_p = NULL; ...@@ -82,13 +82,15 @@ hash_table_t *pdcp_coll_p = NULL;
static int mbms_socket = -1; static int mbms_socket = -1;
#endif #endif
ccparams_NB_IoT_t NBconfig ;
memset((void *)&NBconfig,0,sizeof(ccparams_NB_IoT_t));
#ifdef NB_IOT if (NBconfig.NB_IoT_configured > 0)
{
#include "openair2/RRC/LITE/proto_NB_IoT.h" #include "openair2/RRC/LITE/proto_NB_IoT.h"
#undef maxDRB #undef maxDRB
#define maxDRB maxDRB_NB_r13 #define maxDRB maxDRB_NB_r13
#endif #endif
}
/* pdcp module parameters and related functions*/ /* pdcp module parameters and related functions*/
static pdcp_params_t pdcp_params= {0,NULL}; static pdcp_params_t pdcp_params= {0,NULL};
......
...@@ -415,6 +415,8 @@ void pdcp_fifo_read_input_sdus_from_otg ( const protocol_ctxt_t *const ct ...@@ -415,6 +415,8 @@ void pdcp_fifo_read_input_sdus_from_otg ( const protocol_ctxt_t *const ct
void pdcp_set_rlc_data_req_func(send_rlc_data_req_func_t send_rlc_data_req); void pdcp_set_rlc_data_req_func(send_rlc_data_req_func_t send_rlc_data_req);
void pdcp_set_pdcp_data_ind_func(pdcp_data_ind_func_t pdcp_data_ind); void pdcp_set_pdcp_data_ind_func(pdcp_data_ind_func_t pdcp_data_ind);
pdcp_data_ind_func_t get_pdcp_data_ind_func(void); pdcp_data_ind_func_t get_pdcp_data_ind_func(void);
//NB-IoT
void pdcp_layer_init_NB_IoT(void);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -42,9 +42,10 @@ ...@@ -42,9 +42,10 @@
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0)) #if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
#include "LTE_PMCH-InfoList-r9.h" #include "LTE_PMCH-InfoList-r9.h"
#endif #endif
#include "ENB_APP/enb_paramdef_NB_IoT.h"
#include "LAYER2/MAC/mac_extern.h" #include "LAYER2/MAC/mac_extern.h"
#include "assertions.h" #include "assertions.h"
#include "RRC/LITE/proto_NB_IoT.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP, rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP,
const LTE_SRB_ToAddModList_t * const srb2add_listP, const LTE_SRB_ToAddModList_t * const srb2add_listP,
...@@ -105,36 +106,36 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP ...@@ -105,36 +106,36 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
case LTE_RLC_Config_PR_NOTHING: case LTE_RLC_Config_PR_NOTHING:
break; break;
case RLC_Config_PR_am: // case RLC_Config_PR_am:
/****************************************config srb1********************************************/ /****************************************config srb1********************************************/
if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_AM) != NULL) { // if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_AM) != NULL) {
config_req_rlc_am_asn1 ( // config_req_rlc_am_asn1 (
ctxt_pP, // ctxt_pP,
SRB_FLAG_YES, // SRB_FLAG_YES,
&srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am, // &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
rb_id, lc_id); // rb_id, lc_id);
} else { // } else {
LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n", // LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n",
PROTOCOL_CTXT_ARGS(ctxt_pP), // PROTOCOL_CTXT_ARGS(ctxt_pP),
rb_id); // rb_id);
} // }
/***********************************************************************************************/ /***********************************************************************************************/
/****************************************config srb1bis********************************************/ /****************************************config srb1bis********************************************/
if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, 3, 3, RLC_MODE_AM) != NULL) { // if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, 3, 3, RLC_MODE_AM) != NULL) {
config_req_rlc_am_asn1 ( // config_req_rlc_am_asn1 (
ctxt_pP, // ctxt_pP,
SRB_FLAG_YES, // SRB_FLAG_YES,
&srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am, // &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
3, 3); // 3, 3);
} else { // } else {
LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n", // LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n",
PROTOCOL_CTXT_ARGS(ctxt_pP), // PROTOCOL_CTXT_ARGS(ctxt_pP),
rb_id); // rb_id);
} // }
/***************************************************************************************************/ /***************************************************************************************************/
break; // break;
case LTE_RLC_Config_PR_am: case LTE_RLC_Config_PR_am:
if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_AM if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_AM
...@@ -148,7 +149,20 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP ...@@ -148,7 +149,20 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
SRB_FLAG_YES, SRB_FLAG_YES,
&srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am, &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
rb_id, lc_id); rb_id, lc_id);
} else { }
/****************************************config srb1bis for NB-IoT********************************************/
else if(NBconfig.NB_IoT_configured > 0)
{
if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, 3, 3, RLC_MODE_AM) != NULL) {
config_req_rlc_am_asn1 (
ctxt_pP,
SRB_FLAG_YES,
&srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
3, 3);
}
}
/************************************************************************************************************/
else {
LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n", LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n",
PROTOCOL_CTXT_ARGS(ctxt_pP), PROTOCOL_CTXT_ARGS(ctxt_pP),
rb_id); rb_id);
...@@ -599,7 +613,7 @@ rlc_op_status_t rrc_rlc_remove_rlc ( ...@@ -599,7 +613,7 @@ rlc_op_status_t rrc_rlc_remove_rlc (
#endif #endif
#if defined(Rel10) || defined(Rel14) #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
rlc_mbms_id_t *mbms_id_p = NULL; rlc_mbms_id_t *mbms_id_p = NULL;
#endif rrc_rlc_remove_rlc #endif rrc_rlc_remove_rlc
#ifdef OAI_EMU #ifdef OAI_EMU
......
...@@ -443,7 +443,7 @@ typedef struct eNB_RRC_INST_NB_IoT_s { ...@@ -443,7 +443,7 @@ typedef struct eNB_RRC_INST_NB_IoT_s {
hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t
//RRC configuration //RRC configuration
RrcConfigurationReq configuration; //rrc_messages_types.h NbIoTRrcConfigurationReq configuration; //rrc_messages_types.h
// other PLMN parameters // other PLMN parameters
/// Mobile country code /// Mobile country code
......
...@@ -68,7 +68,7 @@ uint8_t get_NB_IoT_SIB23_size(void); ...@@ -68,7 +68,7 @@ uint8_t get_NB_IoT_SIB23_size(void);
long *get_NB_IoT_SIB1_eutracontrolregionsize(void); long *get_NB_IoT_SIB1_eutracontrolregionsize(void);
void init_testing_NB_IoT(uint8_t Mod_id, int CC_id, rrc_eNB_carrier_data_NB_IoT_t *carrier, RrcConfigurationReq *configuration, uint32_t frame, uint32_t hyper_frame); void init_testing_NB_IoT(uint8_t Mod_id, int CC_id, rrc_eNB_carrier_data_NB_IoT_t *carrier, NbIoTRrcConfigurationReq *configuration, uint32_t frame, uint32_t hyper_frame);
/*------------------------common_nb_iot.c----------------------------------------*/ /*------------------------common_nb_iot.c----------------------------------------*/
...@@ -414,7 +414,7 @@ void rrc_config_buffer_NB_IoT( ...@@ -414,7 +414,7 @@ void rrc_config_buffer_NB_IoT(
char openair_rrc_eNB_configuration_NB_IoT( char openair_rrc_eNB_configuration_NB_IoT(
const module_id_t enb_mod_idP, const module_id_t enb_mod_idP,
RrcConfigurationReq* configuration NbIoTRrcConfigurationReq* configuration
); );
//----------------------------- //-----------------------------
......
This diff is collapsed.
...@@ -204,14 +204,14 @@ static inline int rxtx(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, char *thread_name ...@@ -204,14 +204,14 @@ static inline int rxtx(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, char *thread_name
eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs || eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs ||
eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs || eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs ||
eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles || eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles ||
eNB->UL_INFO.cqi_ind.number_of_cqis eNB->UL_INFO.cqi_ind.cqi_indication_body.number_of_cqis
) { ) {
LOG_D(PHY, "UL_info[rx_ind:%05d:%d harqs:%05d:%d crcs:%05d:%d preambles:%05d:%d cqis:%d] RX:%04d%d TX:%04d%d num_pdcch_symbols:%d\n", LOG_D(PHY, "UL_info[rx_ind:%05d:%d harqs:%05d:%d crcs:%05d:%d preambles:%05d:%d cqis:%d] RX:%04d%d TX:%04d%d num_pdcch_symbols:%d\n",
NFAPI_SFNSF2DEC(eNB->UL_INFO.rx_ind.sfn_sf), eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(eNB->UL_INFO.rx_ind.sfn_sf), eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus,
NFAPI_SFNSF2DEC(eNB->UL_INFO.harq_ind.sfn_sf), eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs, NFAPI_SFNSF2DEC(eNB->UL_INFO.harq_ind.sfn_sf), eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs,
NFAPI_SFNSF2DEC(eNB->UL_INFO.crc_ind.sfn_sf), eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(eNB->UL_INFO.crc_ind.sfn_sf), eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs,
NFAPI_SFNSF2DEC(eNB->UL_INFO.rach_ind.sfn_sf), eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles, NFAPI_SFNSF2DEC(eNB->UL_INFO.rach_ind.sfn_sf), eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles,
eNB->UL_INFO.cqi_ind.number_of_cqis, eNB->UL_INFO.cqi_ind.cqi_indication_body.number_of_cqis,
proc->frame_rx, proc->subframe_rx, proc->frame_rx, proc->subframe_rx,
proc->frame_tx, proc->subframe_tx, eNB->pdcch_vars[proc->subframe_tx&1].num_pdcch_symbols); proc->frame_tx, proc->subframe_tx, eNB->pdcch_vars[proc->subframe_tx&1].num_pdcch_symbols);
} }
...@@ -233,9 +233,11 @@ static inline int rxtx(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, char *thread_name ...@@ -233,9 +233,11 @@ static inline int rxtx(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, char *thread_name
wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx); wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx);
#endif #endif
} }
if (NFAPI_MODE!=NFAPI_MODE_PNF) {
release_UE_in_freeList(eNB->Mod_id); release_UE_in_freeList(eNB->Mod_id);
} else {
release_rnti_of_phy(eNB->Mod_id);
}
// UE-specific RX processing for subframe n // UE-specific RX processing for subframe n
if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) { if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) {
phy_procedures_eNB_uespec_RX(eNB, proc); phy_procedures_eNB_uespec_RX(eNB, proc);
...@@ -441,7 +443,7 @@ static void *L1_thread( void *param ) { ...@@ -441,7 +443,7 @@ static void *L1_thread( void *param ) {
if (oai_exit) break; if (oai_exit) break;
if (eNB->CC_id==0) { if (eNB->CC_id==0) {
if (rxtx(eNB,proc,thread_name) < 0) break; if (rxtx_NB_IoT(eNB,proc,thread_name) < 0) break; // Call rxtx_NB_IoT
} }
LOG_D(PHY,"L1 RX %d.%d done\n",proc->frame_rx,proc->subframe_rx); LOG_D(PHY,"L1 RX %d.%d done\n",proc->frame_rx,proc->subframe_rx);
...@@ -481,7 +483,7 @@ void eNB_top(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, char *string,RU_t ...@@ -481,7 +483,7 @@ void eNB_top(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, char *string,RU_t
L1_proc->frame_tx = (L1_proc->subframe_rx > (9-sf_ahead)) ? (L1_proc->frame_rx+1)&1023 : L1_proc->frame_rx; L1_proc->frame_tx = (L1_proc->subframe_rx > (9-sf_ahead)) ? (L1_proc->frame_rx+1)&1023 : L1_proc->frame_rx;
L1_proc->subframe_tx = (L1_proc->subframe_rx + sf_ahead)%10; L1_proc->subframe_tx = (L1_proc->subframe_rx + sf_ahead)%10;
if (rxtx(eNB,L1_proc,string) < 0) LOG_E(PHY,"eNB %d CC_id %d failed during execution\n",eNB->Mod_id,eNB->CC_id); if (rxtx_NB_IoT(eNB,L1_proc,string) < 0) LOG_E(PHY,"eNB %d CC_id %d failed during execution\n",eNB->Mod_id,eNB->CC_id); //Call rxtx_NB_IoT
ru_proc->timestamp_tx = L1_proc->timestamp_tx; ru_proc->timestamp_tx = L1_proc->timestamp_tx;
ru_proc->subframe_tx = L1_proc->subframe_tx; ru_proc->subframe_tx = L1_proc->subframe_tx;
...@@ -955,7 +957,7 @@ void init_eNB_proc(int inst) { ...@@ -955,7 +957,7 @@ void init_eNB_proc(int inst) {
pthread_create( &L1_proc_tx->pthread, attr1, L1_thread, L1_proc_tx); pthread_create( &L1_proc_tx->pthread, attr1, L1_thread, L1_proc_tx);
} }
pthread_create( &proc->pthread_prach, attr_prach, eNB_thread_prach, eNB ); pthread_create( &proc->pthread_prach, attr_prach, eNB_thread_prach_NB_IoT, eNB ); // Call eNB_thread_prach_NB_IoT
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
pthread_create( &proc->pthread_prach_br, attr_prach_br, eNB_thread_prach_br, eNB ); pthread_create( &proc->pthread_prach_br, attr_prach_br, eNB_thread_prach_br, eNB );
#endif #endif
...@@ -1072,6 +1074,104 @@ void kill_eNB_proc(int inst) { ...@@ -1072,6 +1074,104 @@ void kill_eNB_proc(int inst) {
} }
/******************************************Define in original NB-IoT branch*************************************************/
/* this function maps the phy_vars_eNB tx and rx buffers to the available rf chains.
Each rf chain is is addressed by the card number and the chain on the card. The
rf_map specifies for each CC, on which rf chain the mapping should start. Multiple
antennas are mapped to successive RF chains on the same card. */
int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_cfg) {
int i,j;
int CC_id,card,ant;
//uint16_t N_TA_offset = 0;
LTE_DL_FRAME_PARMS *frame_parms;
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
if (phy_vars_eNB[CC_id]) {
frame_parms = &(phy_vars_eNB[CC_id]->frame_parms);
printf("setup_eNB_buffers: frame_parms = %p\n",frame_parms);
} else {
printf("phy_vars_eNB[%d] not initialized\n", CC_id);
return(-1);
}
/*
if (frame_parms->frame_type == TDD) {
if (frame_parms->N_RB_DL == 100)
N_TA_offset = 624;
else if (frame_parms->N_RB_DL == 50)
N_TA_offset = 624/2;
else if (frame_parms->N_RB_DL == 25)
N_TA_offset = 624/4;
}
*/
if (openair0_cfg[CC_id].mmapped_dma == 1) {
// replace RX signal buffers with mmaped HW versions
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
card = i/4;
ant = i%4;
printf("Mapping eNB CC_id %d, rx_ant %d, on card %d, chain %d\n",CC_id,i,phy_vars_eNB[CC_id]->rf_map.card+card, phy_vars_eNB[CC_id]->rf_map.chain+ant);
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = openair0_cfg[phy_vars_eNB[CC_id]->rf_map.card+card].rxbase[phy_vars_eNB[CC_id]->rf_map.chain+ant];
printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
for (j=0; j<16; j++) {
printf("rxbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j]);
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j] = 16-j;
}
}
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
card = i/4;
ant = i%4;
printf("Mapping eNB CC_id %d, tx_ant %d, on card %d, chain %d\n",CC_id,i,phy_vars_eNB[CC_id]->rf_map.card+card, phy_vars_eNB[CC_id]->rf_map.chain+ant);
free(phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
phy_vars_eNB[CC_id]->common_vars.txdata[0][i] = openair0_cfg[phy_vars_eNB[CC_id]->rf_map.card+card].txbase[phy_vars_eNB[CC_id]->rf_map.chain+ant];
printf("txdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
for (j=0; j<16; j++) {
printf("txbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.txdata[0][i][j]);
phy_vars_eNB[CC_id]->common_vars.txdata[0][i][j] = 16-j;
}
}
}
else { // not memory-mapped DMA
//nothing to do, everything already allocated in lte_init
/*
rxdata = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*));
txdata = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*));
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
rxdata[i] = (int32_t*)(32 + malloc16(32+frame_parms->samples_per_tti*10*sizeof(int32_t))); // FIXME broken memory allocation
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = rxdata[i]; //-N_TA_offset; // N_TA offset for TDD FIXME! N_TA_offset > 16 => access of unallocated memory
memset(rxdata[i], 0, frame_parms->samples_per_tti*10*sizeof(int32_t));
printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->common_vars.rxdata[0][i],rxdata[i],N_TA_offset);
}
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
free(phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
txdata[i] = (int32_t*)(32 + malloc16(32 + frame_parms->samples_per_tti*10*sizeof(int32_t))); // FIXME broken memory allocation
phy_vars_eNB[CC_id]->common_vars.txdata[0][i] = txdata[i];
memset(txdata[i],0, frame_parms->samples_per_tti*10*sizeof(int32_t));
printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
}
*/
}
}
return(0);
}
/**************************************************************************************************************************/
void reset_opp_meas(void) { void reset_opp_meas(void) {
...@@ -1182,13 +1282,6 @@ void init_eNB_afterRU(void) { ...@@ -1182,13 +1282,6 @@ void init_eNB_afterRU(void) {
LOG_I(PHY,"RC.nb_CC[inst]:%d\n", RC.nb_CC[inst]); LOG_I(PHY,"RC.nb_CC[inst]:%d\n", RC.nb_CC[inst]);
/////// IF-Module initialization ///////////////
LOG_I(PHY,"Registering with MAC interface module start\n");
AssertFatal((eNB->if_inst = IF_Module_init_NB_IoT(inst))!=NULL,"Cannot register interface");
eNB->if_inst->schedule_response = schedule_response_NB_IoT;
eNB->if_inst->PHY_config_req = PHY_config_req_NB_IoT;
LOG_I(PHY,"Registering with MAC interface module sucessfully\n");
for (CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) { for (CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
LOG_I(PHY,"RC.nb_CC[inst:%d][CC_id:%d]:%p\n", inst, CC_id, RC.eNB[inst][CC_id]); LOG_I(PHY,"RC.nb_CC[inst:%d][CC_id:%d]:%p\n", inst, CC_id, RC.eNB[inst][CC_id]);
...@@ -1307,8 +1400,8 @@ void init_eNB(int single_thread_flag,int wait_for_sync) { ...@@ -1307,8 +1400,8 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
eNB->UL_INFO.crc_ind.crc_indication_body.crc_pdu_list = eNB->crc_pdu_list; eNB->UL_INFO.crc_ind.crc_indication_body.crc_pdu_list = eNB->crc_pdu_list;
eNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = eNB->sr_pdu_list; eNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = eNB->sr_pdu_list;
eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = eNB->harq_pdu_list; eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = eNB->harq_pdu_list;
eNB->UL_INFO.cqi_ind.cqi_pdu_list = eNB->cqi_pdu_list; eNB->UL_INFO.cqi_ind.cqi_indication_body.cqi_pdu_list = eNB->cqi_pdu_list;
eNB->UL_INFO.cqi_ind.cqi_raw_pdu_list = eNB->cqi_raw_pdu_list; eNB->UL_INFO.cqi_ind.cqi_indication_body.cqi_raw_pdu_list = eNB->cqi_raw_pdu_list;
eNB->prach_energy_counter = 0; eNB->prach_energy_counter = 0;
} }
} }
...@@ -1321,6 +1414,7 @@ void init_eNB(int single_thread_flag,int wait_for_sync) { ...@@ -1321,6 +1414,7 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
} }
void stop_eNB(int nb_inst) { void stop_eNB(int nb_inst) {
for (int inst=0; inst<nb_inst; inst++) { for (int inst=0; inst<nb_inst; inst++) {
LOG_I(PHY,"Killing eNB %d processing threads\n",inst); LOG_I(PHY,"Killing eNB %d processing threads\n",inst);
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment