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 {
/// RRC context variables
struct eNB_RRC_INST_s **rrc;
/// 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
struct eNB_MAC_INST_s **mac;
/// 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 @@
*/
/*
platform_types.h
platform_types_NB_IoT.h
-------------------
AUTHOR : Lionel GAUTHIER
COMPANY : EURECOM
......@@ -47,19 +47,30 @@ typedef uint16_t rnti_NB_IoT_t;
#ifndef _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)
#define TRUE (boolean_NB_IoT_t)0x01
#define TRUE (boolean_t)0x01
#endif
#if !defined(FALSE)
#define FALSE (boolean_NB_IoT_t)0x00
#define FALSE (boolean_t)0x00
#endif
#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
......
......@@ -280,60 +280,6 @@ typedef struct RrcConfigurationReq_s {
long ue_TimersAndConstants_n310[MAX_NUM_CCs];
long ue_TimersAndConstants_n311[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 eMTC_configured;
int SL_configured;
......
File mode changed from 100644 to 100755
......@@ -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) {
uint32_t enb_id;
......
......@@ -22,9 +22,11 @@
#include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
#include "config_NB_IoT.h"
// MAC definition
#define MAX_FRAME 0xfffff
#define NUM_FRAME 0x100000
#define MAX_SUBFRAME 10485760
//#define MAX_FRAME 0xfffff
//#define NUM_FRAME 0x100000
//#define MAX_SUBFRAME 10485760
#define MAX_FRAME 0xfff
#define MAX_SUBFRAME 40960
#define MAX(a, b) (((a)>(b))?(a):(b))
......@@ -62,8 +64,8 @@
/*!\brief DTCH DRB1 logical channel */
#define DTCH 3 // LCID
/*!\brief MCCH logical channel */
//#define MCCH 4
#define MCCH 62
#define MCCH 4
//#define MCCH 62
/*!\brief MTCH logical channel */
#define MTCH 1
// DLSCH LCHAN ID
......@@ -209,9 +211,12 @@ typedef struct {
int prev;
// MSG4 complete
int RRC_connected;
uint8_t flag_schedule_success;
// UE active flag
int active;
//boolean_t active;
uint8_t allocated_data_size_ul;
} UE_TEMPLATE_NB_IoT;
// link list of uplink resource node
......@@ -327,6 +332,7 @@ typedef struct {
/// DCI template and MAC connection parameters for UEs
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_config_dedicated_NB_IoT_t NPDCCH_config_dedicated;
//int next[MAX_MAX_MOBILES_PER_ENB_NB_IoT];
......@@ -631,6 +637,8 @@ typedef struct {
nprach_parameters_NB_IoT_t nprach_list[3];
nfapi_config_request_t config;
//DLSF Table
DLSF_INFO_t DLSF_information;
......
......@@ -31,16 +31,6 @@
#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 "LAYER2/MAC/mac.h"
#include "LAYER2/MAC/mac_extern.h"
......
......@@ -37,7 +37,7 @@
#include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h"
#include "LAYER2/MAC/defs_NB_IoT.h"
#include "COMMON/platform_types.h"
#include "openair2/RRC/LTE/defs_NB_IoT.h"
#include "openair2/RRC/LITE/defs_NB_IoT.h"
/** \addtogroup _mac
* @{
*/
......@@ -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_schedule_result_DL(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);
// SIBs
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
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
void mac_top_init_eNB_NB_IoT(void);
uint32_t to_earfcn_NB_IoT(int eutra_bandP,uint32_t dl_CarrierFreq, float m_dl);
......
......@@ -56,7 +56,7 @@
#include "UTIL/OSA/osa_defs.h"
#include "openair2/RRC/NAS/nas_config.h"
# include "intertask_interface.h"
#include "enb_paramdef.h"
# include "gtpv1u_eNB_task.h"
# include "gtpv1u.h"
......@@ -82,13 +82,15 @@ hash_table_t *pdcp_coll_p = NULL;
static int mbms_socket = -1;
#endif
#ifdef NB_IOT
ccparams_NB_IoT_t NBconfig ;
memset((void *)&NBconfig,0,sizeof(ccparams_NB_IoT_t));
if (NBconfig.NB_IoT_configured > 0)
{
#include "openair2/RRC/LITE/proto_NB_IoT.h"
#undef maxDRB
#define maxDRB maxDRB_NB_r13
#endif
}
/* pdcp module parameters and related functions*/
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
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);
pdcp_data_ind_func_t get_pdcp_data_ind_func(void);
//NB-IoT
void pdcp_layer_init_NB_IoT(void);
//-----------------------------------------------------------------------------
......
......@@ -42,9 +42,10 @@
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
#include "LTE_PMCH-InfoList-r9.h"
#endif
#include "ENB_APP/enb_paramdef_NB_IoT.h"
#include "LAYER2/MAC/mac_extern.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,
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
case LTE_RLC_Config_PR_NOTHING:
break;
case RLC_Config_PR_am:
// case RLC_Config_PR_am:
/****************************************config srb1********************************************/
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 (
ctxt_pP,
SRB_FLAG_YES,
&srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
rb_id, lc_id);
} else {
LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n",
PROTOCOL_CTXT_ARGS(ctxt_pP),
rb_id);
}
// 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 (
// ctxt_pP,
// SRB_FLAG_YES,
// &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
// rb_id, lc_id);
// } else {
// LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n",
// PROTOCOL_CTXT_ARGS(ctxt_pP),
// rb_id);
// }
/***********************************************************************************************/
/****************************************config srb1bis********************************************/
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",
PROTOCOL_CTXT_ARGS(ctxt_pP),
rb_id);
}
// 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",
// PROTOCOL_CTXT_ARGS(ctxt_pP),
// rb_id);
// }
/***************************************************************************************************/
break;
// break;
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
......@@ -148,7 +149,20 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
SRB_FLAG_YES,
&srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
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",
PROTOCOL_CTXT_ARGS(ctxt_pP),
rb_id);
......@@ -599,7 +613,7 @@ rlc_op_status_t rrc_rlc_remove_rlc (
#endif
#if defined(Rel10) || defined(Rel14)
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
rlc_mbms_id_t *mbms_id_p = NULL;
#endif rrc_rlc_remove_rlc
#ifdef OAI_EMU
......
......@@ -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
//RRC configuration
RrcConfigurationReq configuration; //rrc_messages_types.h
NbIoTRrcConfigurationReq configuration; //rrc_messages_types.h
// other PLMN parameters
/// Mobile country code
......
......@@ -68,7 +68,7 @@ uint8_t get_NB_IoT_SIB23_size(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----------------------------------------*/
......@@ -414,7 +414,7 @@ void rrc_config_buffer_NB_IoT(
char openair_rrc_eNB_configuration_NB_IoT(
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
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.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",
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.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,
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_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
wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx);
#endif
}
if (NFAPI_MODE!=NFAPI_MODE_PNF) {
release_UE_in_freeList(eNB->Mod_id);
} else {
release_rnti_of_phy(eNB->Mod_id);
}
// UE-specific RX processing for subframe n
if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) {
phy_procedures_eNB_uespec_RX(eNB, proc);
......@@ -441,7 +443,7 @@ static void *L1_thread( void *param ) {
if (oai_exit) break;
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);
......@@ -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->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->subframe_tx = L1_proc->subframe_tx;
......@@ -955,7 +957,7 @@ void init_eNB_proc(int inst) {
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))
pthread_create( &proc->pthread_prach_br, attr_prach_br, eNB_thread_prach_br, eNB );
#endif
......@@ -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) {
......@@ -1182,13 +1282,6 @@ void init_eNB_afterRU(void) {
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++) {
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) {
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.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_raw_pdu_list = eNB->cqi_raw_pdu_list;
eNB->UL_INFO.cqi_ind.cqi_indication_body.cqi_pdu_list = eNB->cqi_pdu_list;
eNB->UL_INFO.cqi_ind.cqi_indication_body.cqi_raw_pdu_list = eNB->cqi_raw_pdu_list;
eNB->prach_energy_counter = 0;
}
}
......@@ -1321,6 +1414,7 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
}
void stop_eNB(int nb_inst) {
for (int inst=0; inst<nb_inst; 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