From 312cf0bf56d9ac4019a92a68c2141fd5b24056b5 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Wed, 11 Apr 2018 12:06:39 +0200 Subject: [PATCH] NR config file --- openair1/PHY/INIT/defs.h | 1 + openair1/PHY/INIT/nr_init.c | 264 +++--------------- openair1/PHY/defs.h | 2 +- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 6 +- .../CONF/gnb.band78.tm1.106PRB.usrpx300.conf | 219 +++++++++++++++ targets/RT/USER/nr-gnb.c | 23 +- targets/RT/USER/nr-ru.c | 14 +- targets/RT/USER/nr-softmodem.c | 10 +- 8 files changed, 289 insertions(+), 250 deletions(-) create mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf diff --git a/openair1/PHY/INIT/defs.h b/openair1/PHY/INIT/defs.h index be3e5c160b..2222b2900c 100644 --- a/openair1/PHY/INIT/defs.h +++ b/openair1/PHY/INIT/defs.h @@ -372,6 +372,7 @@ void phy_config_request(PHY_Config_t *phy_config); int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf); void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms); +void nr_phy_config_request(PHY_VARS_gNB *gNB); /** @} */ #endif diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 0e30ebfa62..dfd06e2329 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -61,6 +61,7 @@ int l1_north_init_gNB() { LOG_I(PHY,"%s() RC.gNB[%d][%d] installing callbacks\n", __FUNCTION__, i, j); RC.gNB[i][j]->if_inst->PHY_config_req = phy_config_request; + nr_phy_config_request(RC.gNB[i][j]); RC.gNB[i][j]->if_inst->schedule_response = schedule_response; } } @@ -80,7 +81,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, // shortcuts NR_DL_FRAME_PARMS* const fp = &gNB->frame_parms; - nfapi_config_request_t* cfg = gNB->gNB_config; + nfapi_config_request_t* cfg = &gNB->gNB_config; NR_gNB_COMMON* const common_vars = &gNB->common_vars; LTE_eNB_PUSCH** const pusch_vars = gNB->pusch_vars; LTE_eNB_SRS* const srs_vars = gNB->srs_vars; @@ -128,7 +129,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, gNB->first_run_I0_measurements = 1; ///This flag used to be static. With multiple gNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here. - + common_vars->rxdata = (int32_t **)NULL; common_vars->txdataF = (int32_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(int32_t*)); common_vars->rxdataF = (int32_t **)malloc16(64*sizeof(int32_t*)); @@ -215,17 +216,14 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, return (0); } - /* - void phy_config_request(PHY_Config_t *phy_config) { uint8_t Mod_id = phy_config->Mod_id; int CC_id = phy_config->CC_id; nfapi_config_request_t *cfg = phy_config->cfg; - - LTE_DL_FRAME_PARMS *fp; + NR_DL_FRAME_PARMS *fp; PHICH_RESOURCE_t phich_resource_table[4]={oneSixth,half,one,two}; int eutra_band = cfg->nfapi_config.rf_bands.rf_band[0]; int dl_Bandwidth = cfg->rf_config.dl_channel_bandwidth.value; @@ -235,241 +233,37 @@ void phy_config_request(PHY_Config_t *phy_config) { int p_eNB = cfg->rf_config.tx_antenna_ports.value; uint32_t dl_CarrierFreq = cfg->nfapi_config.earfcn.value; - LOG_I(PHY,"Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d, N_RB_UL %d, Nid_cell %d,eNB_tx_antenna_ports %d,Ncp %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n", - Mod_id, CC_id, eutra_band, dl_Bandwidth, ul_Bandwidth, Nid_cell, p_eNB,Ncp,dl_CarrierFreq, - cfg->phich_config.phich_resource.value, - cfg->phich_config.phich_duration.value); + LOG_I(PHY,"Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d, N_RB_UL %d, Nid_cell %d,gNB_tx_antenna_ports %d,Ncp %d,DL freq %u)\n", + Mod_id, CC_id, eutra_band, dl_Bandwidth, ul_Bandwidth, Nid_cell, p_eNB,Ncp,dl_CarrierFreq ); - AssertFatal(RC.eNB != NULL, "PHY instance pointer doesn't exist\n"); - AssertFatal(RC.eNB[Mod_id] != NULL, "PHY instance %d doesn't exist\n",Mod_id); - AssertFatal(RC.eNB[Mod_id][CC_id] != NULL, "PHY instance %d, CCid %d doesn't exist\n",Mod_id,CC_id); + AssertFatal(RC.gNB != NULL, "PHY instance pointer doesn't exist\n"); + AssertFatal(RC.gNB[Mod_id] != NULL, "PHY instance %d doesn't exist\n",Mod_id); + AssertFatal(RC.gNB[Mod_id][CC_id] != NULL, "PHY instance %d, CCid %d doesn't exist\n",Mod_id,CC_id); - if (RC.eNB[Mod_id][CC_id]->configured == 1) + if (RC.gNB[Mod_id][CC_id]->configured == 1) { LOG_E(PHY,"Already eNB already configured, do nothing\n"); return; } - RC.eNB[Mod_id][CC_id]->mac_enabled = 1; + RC.gNB[Mod_id][CC_id]->mac_enabled = 1; - fp = &RC.eNB[Mod_id][CC_id]->frame_parms; - - fp->N_RB_DL = dl_Bandwidth; - fp->N_RB_UL = ul_Bandwidth; - fp->Nid_cell = Nid_cell; - fp->nushift = fp->Nid_cell%6; - fp->eutra_band = eutra_band; - fp->Ncp = Ncp; - fp->Ncp_UL = Ncp; - fp->nb_antenna_ports_eNB = p_eNB; + fp = &RC.gNB[Mod_id][CC_id]->frame_parms; fp->threequarter_fs = 0; - AssertFatal(cfg->phich_config.phich_resource.value<4, "Illegal phich_Resource\n"); + nr_init_frame_parms(fp,1); - fp->phich_config_common.phich_resource = phich_resource_table[cfg->phich_config.phich_resource.value]; - fp->phich_config_common.phich_duration = cfg->phich_config.phich_duration.value; - // Note: "from_earfcn" has to be in a common library with MACRLC - fp->dl_CarrierFreq = from_earfcn(eutra_band,dl_CarrierFreq); - fp->ul_CarrierFreq = fp->dl_CarrierFreq - (get_uldl_offset(eutra_band)*100000); - - fp->tdd_config = 0; - fp->tdd_config_S = 0; - - if (fp->dl_CarrierFreq==fp->ul_CarrierFreq) - fp->frame_type = TDD; - else - fp->frame_type = FDD; - - init_frame_parms(fp,1); - init_lte_top(fp); - - if (cfg->subframe_config.duplex_mode.value == 0) { - fp->tdd_config = cfg->tdd_frame_structure_config.subframe_assignment.value; - fp->tdd_config_S = cfg->tdd_frame_structure_config.special_subframe_patterns.value; - fp->frame_type = TDD; - } - else { - fp->frame_type = FDD; - } - - fp->prach_config_common.rootSequenceIndex = cfg->prach_config.root_sequence_index.value; - LOG_I(PHY,"prach_config_common.rootSequenceIndex = %d\n",cfg->prach_config.root_sequence_index.value); - - fp->prach_config_common.prach_Config_enabled=1; - - fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex =cfg->prach_config.configuration_index.value; - LOG_I(PHY,"prach_config_common.prach_ConfigInfo.prach_ConfigIndex = %d\n",cfg->prach_config.configuration_index.value); - - fp->prach_config_common.prach_ConfigInfo.highSpeedFlag =cfg->prach_config.high_speed_flag.value; - LOG_I(PHY,"prach_config_common.prach_ConfigInfo.highSpeedFlag = %d\n",cfg->prach_config.high_speed_flag.value); - fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig =cfg->prach_config.zero_correlation_zone_configuration.value; - LOG_I(PHY,"prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig = %d\n",cfg->prach_config.zero_correlation_zone_configuration.value); - fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset =cfg->prach_config.frequency_offset.value; - LOG_I(PHY,"prach_config_common.prach_ConfigInfo.prach_FreqOffset = %d\n",cfg->prach_config.frequency_offset.value); - - init_prach_tables(839); - compute_prach_seq(fp->prach_config_common.rootSequenceIndex, - fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex, - fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, - fp->prach_config_common.prach_ConfigInfo.highSpeedFlag, - fp->frame_type, - RC.eNB[Mod_id][CC_id]->X_u); - -#ifdef Rel14 - fp->prach_emtc_config_common.prach_Config_enabled=1; - - fp->prach_emtc_config_common.rootSequenceIndex = cfg->emtc_config.prach_catm_root_sequence_index.value; - - fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag = cfg->emtc_config.prach_catm_high_speed_flag.value; - fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig = cfg->emtc_config.prach_catm_zero_correlation_zone_configuration.value; - - // CE Level 3 parameters - fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[3] = cfg->emtc_config.prach_ce_level_3_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[3] = cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[3] = cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value; - AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[3]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[3], - "prach_starting_subframe_periodicity[3] < prach_numPetitionPerPreambleAttempt[3]\n"); - - - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3] = cfg->emtc_config.prach_ce_level_3_configuration_index.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[3] = cfg->emtc_config.prach_ce_level_3_frequency_offset.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[3] = cfg->emtc_config.prach_ce_level_3_hopping_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[3] = cfg->emtc_config.prach_ce_level_3_hopping_offset.value; - if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[3] == 1) - compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex, - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3], - fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, - fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag, - fp->frame_type, - RC.eNB[Mod_id][CC_id]->X_u_br[3]); - - // CE Level 2 parameters - fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[2] = cfg->emtc_config.prach_ce_level_2_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[2] = cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[2] = cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value; - AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[2]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[2], - "prach_starting_subframe_periodicity[2] < prach_numPetitionPerPreambleAttempt[2]\n"); - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[2] = cfg->emtc_config.prach_ce_level_2_configuration_index.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[2] = cfg->emtc_config.prach_ce_level_2_frequency_offset.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[2] = cfg->emtc_config.prach_ce_level_2_hopping_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[2] = cfg->emtc_config.prach_ce_level_2_hopping_offset.value; - if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[2] == 1) - compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex, - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3], - fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, - fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag, - fp->frame_type, - RC.eNB[Mod_id][CC_id]->X_u_br[2]); - - // CE Level 1 parameters - fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[1] = cfg->emtc_config.prach_ce_level_1_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[1] = cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[1] = cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value; - AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[1]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[1], - "prach_starting_subframe_periodicity[1] < prach_numPetitionPerPreambleAttempt[1]\n"); - - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[1] = cfg->emtc_config.prach_ce_level_1_configuration_index.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[1] = cfg->emtc_config.prach_ce_level_1_frequency_offset.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[1] = cfg->emtc_config.prach_ce_level_1_hopping_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[1] = cfg->emtc_config.prach_ce_level_1_hopping_offset.value; - if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[1] == 1) - compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex, - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3], - fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, - fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag, - fp->frame_type, - RC.eNB[Mod_id][CC_id]->X_u_br[1]); - - // CE Level 0 parameters - fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0] = cfg->emtc_config.prach_ce_level_0_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0] = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value; - AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0], - "prach_starting_subframe_periodicity[0] %d < prach_numPetitionPerPreambleAttempt[0] %d\n", - fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0], - fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]); -#if 0 - AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] > 0, - "prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]==0\n"); -#else - LOG_E(PHY,"***DJP*** removed assert on preamble fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]:%d expecting >0 %s:%d\n\n\n", fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0], __FILE__, __LINE__); -#endif - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0] = cfg->emtc_config.prach_ce_level_0_configuration_index.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0] = cfg->emtc_config.prach_ce_level_0_frequency_offset.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0] = cfg->emtc_config.prach_ce_level_0_hopping_enable.value; - fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[0] = cfg->emtc_config.prach_ce_level_0_hopping_offset.value; - if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0] == 1) - compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex, - fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3], - fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig, - fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag, - fp->frame_type, - RC.eNB[Mod_id][CC_id]->X_u_br[0]); -#endif - - - - fp->pucch_config_common.deltaPUCCH_Shift = 1+cfg->pucch_config.delta_pucch_shift.value; - fp->pucch_config_common.nRB_CQI = cfg->pucch_config.n_cqi_rb.value; - fp->pucch_config_common.nCS_AN = cfg->pucch_config.n_an_cs.value; - fp->pucch_config_common.n1PUCCH_AN = cfg->pucch_config.n1_pucch_an.value; - - fp->pdsch_config_common.referenceSignalPower = cfg->rf_config.reference_signal_power.value; - fp->pdsch_config_common.p_b = cfg->subframe_config.pb.value; - - fp->pusch_config_common.n_SB = cfg->pusch_config.number_of_subbands.value; - LOG_I(PHY,"pusch_config_common.n_SB = %d\n",fp->pusch_config_common.n_SB ); - - fp->pusch_config_common.hoppingMode = cfg->pusch_config.hopping_mode.value; - LOG_I(PHY,"pusch_config_common.hoppingMode = %d\n",fp->pusch_config_common.hoppingMode); - - fp->pusch_config_common.pusch_HoppingOffset = cfg->pusch_config.hopping_offset.value; - LOG_I(PHY,"pusch_config_common.pusch_HoppingOffset = %d\n",fp->pusch_config_common.pusch_HoppingOffset); - - fp->pusch_config_common.enable64QAM = 0;//radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM; - LOG_I(PHY,"pusch_config_common.enable64QAM = %d\n",fp->pusch_config_common.enable64QAM ); - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0; - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0; - if (cfg->uplink_reference_signal_config.uplink_rs_hopping.value == 1) - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1; - if (cfg->uplink_reference_signal_config.uplink_rs_hopping.value == 2) - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 1; - LOG_I(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = %d\n",fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled); - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = cfg->uplink_reference_signal_config.group_assignment.value; - LOG_I(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = %d\n",fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); - - LOG_I(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = %d\n",fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); - - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = dmrs1_tab[cfg->uplink_reference_signal_config.cyclic_shift_1_for_drms.value]; - LOG_I(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = %d\n",fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift); - - init_ul_hopping(fp); - - fp->soundingrs_ul_config_common.enabled_flag = 0;// 1; Don't know how to turn this off in NFAPI - fp->soundingrs_ul_config_common.srs_BandwidthConfig = cfg->srs_config.bandwidth_configuration.value; - fp->soundingrs_ul_config_common.srs_SubframeConfig = cfg->srs_config.srs_subframe_configuration.value; - fp->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = cfg->srs_config.srs_acknack_srs_simultaneous_transmission.value; - fp->soundingrs_ul_config_common.srs_MaxUpPts = cfg->srs_config.max_up_pts.value; - - fp->num_MBSFN_config = 0; - - init_ncs_cell(fp,RC.eNB[Mod_id][CC_id]->ncs_cell); - - - init_ul_hopping(fp); - RC.eNB[Mod_id][CC_id]->configured = 1; - LOG_I(PHY,"eNB %d/%d configured\n",Mod_id,CC_id); -} - -*/ + RC.gNB[Mod_id][CC_id]->configured = 1; + LOG_I(PHY,"gNB %d/%d configured\n",Mod_id,CC_id); +}*/ void phy_free_nr_gNB(PHY_VARS_gNB *gNB) { // NR_DL_FRAME_PARMS* const fp = &gNB->frame_parms; - nfapi_config_request_t *cfg = gNB->gNB_config; + nfapi_config_request_t *cfg = &gNB->gNB_config; NR_gNB_COMMON* const common_vars = &gNB->common_vars; LTE_eNB_PUSCH** const pusch_vars = gNB->pusch_vars; LTE_eNB_SRS* const srs_vars = gNB->srs_vars; @@ -536,3 +330,27 @@ void install_schedule_handlers(IF_Module_t *if_inst) if_inst->PHY_config_req = phy_config_request; if_inst->schedule_response = schedule_response; }*/ + +/// this function is a temporary addition for NR configuration +void nr_phy_config_request(PHY_VARS_gNB *gNB) +{ + NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; + nfapi_config_request_t *gNB_config = &gNB->gNB_config; + + //overwrite for new NR parameters + gNB_config->subframe_config.numerology_index_mu.value = 1; + gNB_config->rf_config.dl_channel_bandwidth.value = 106; + gNB_config->rf_config.ul_channel_bandwidth.value = 106; + gNB_config->sch_config.half_frame_index = 0; + gNB_config->sch_config.ssb_subcarrier_offset.value = 0; + + + gNB->mac_enabled = 1; + + fp->threequarter_fs = 0; + + nr_init_frame_parms(fp,1); + + gNB->configured = 1; + LOG_I(PHY,"gNB configured\n"); +} diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index c1a1b8e85c..a5d48e3e39 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -1929,7 +1929,7 @@ typedef struct PHY_VARS_gNB_s { int rx_total_gain_dB; int (*start_if)(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB); uint8_t local_flag; - nfapi_config_request_t *gNB_config; + nfapi_config_request_t gNB_config; NR_DL_FRAME_PARMS frame_parms; PHY_MEASUREMENTS_gNB measurements; IF_Module_t *if_inst; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 563f503f0e..f0f50c5b74 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -43,14 +43,14 @@ extern uint8_t nfapi_mode; void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) { NR_DL_FRAME_PARMS *fp=&gNB->frame_parms; - nfapi_config_request_t *cfg = gNB->gNB_config; + nfapi_config_request_t *cfg = &gNB->gNB_config; int **txdataF = gNB->common_vars.txdataF; uint8_t *pbch_pdu=&gNB->pbch_pdu[0]; LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe); int ssb_start_symbol = nr_get_ssb_start_symbol(cfg, fp); - nr_set_ssb_first_subcarrier(cfg); + //nr_set_ssb_first_subcarrier(cfg); if (subframe == (cfg->sch_config.half_frame_index)? 0:5) { @@ -69,7 +69,7 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, int subframe=proc->subframe_tx; NR_DL_FRAME_PARMS *fp=&gNB->frame_parms; - nfapi_config_request_t *cfg = gNB->gNB_config; + nfapi_config_request_t *cfg = &gNB->gNB_config; int offset = gNB->CC_id; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf new file mode 100644 index 0000000000..3e6178c2df --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf @@ -0,0 +1,219 @@ +Active_eNBs = ( "gNB-Eurecom-LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "gNB-Eurecom-LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "93"; + + tr_s_preference = "local_mac" + + ////////// Physical parameters: + + component_carriers = ( + { + node_function = "3GPP_gNODEB"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 22; + downlink_frequency = 3510000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 100; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 125; + pbch_repetition = "FALSE"; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 0; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -27; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -96; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -104; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + ue_TransmissionMode = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.12.26"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.59/24"; + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.59/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + } +); + +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + } +); + +L1s = ( + { + num_cc = 1; + tr_n_preference = "local_mac"; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 0 + att_rx = 0; + bands = [7]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; + eNB_instances = [0]; + + } +); + +NETWORK_CONTROLLER : +{ + FLEXRAN_ENABLED = "no"; + FLEXRAN_INTERFACE_NAME = "lo"; + FLEXRAN_IPV4_ADDRESS = "127.0.0.1"; + FLEXRAN_PORT = 2210; + FLEXRAN_CACHE = "/mnt/oai_agent_cache"; + FLEXRAN_AWAIT_RECONF = "no"; +}; + + log_config : + { + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + diff --git a/targets/RT/USER/nr-gnb.c b/targets/RT/USER/nr-gnb.c index b40b34e843..ab10f99b20 100644 --- a/targets/RT/USER/nr-gnb.c +++ b/targets/RT/USER/nr-gnb.c @@ -827,7 +827,7 @@ void init_eNB_afterRU(void) { // map antennas and PRACH signals to gNB RX if (0) AssertFatal(gNB->num_RU>0,"Number of RU attached to gNB %d is zero\n",gNB->Mod_id); LOG_I(PHY,"Mapping RX ports from %d RUs to gNB %d\n",gNB->num_RU,gNB->Mod_id); - gNB->gNB_config->rf_config.tx_antenna_ports.value = 0; + gNB->gNB_config.rf_config.tx_antenna_ports.value = 0; //LOG_I(PHY,"Overwriting gNB->prach_vars.rxsigF[0]:%p\n", gNB->prach_vars.rxsigF[0]); @@ -836,7 +836,7 @@ void init_eNB_afterRU(void) { LOG_I(PHY,"gNB->num_RU:%d\n", gNB->num_RU); for (ru_id=0,aa=0;ru_idnum_RU;ru_id++) { - gNB->gNB_config->rf_config.tx_antenna_ports.value += gNB->RU_list[ru_id]->nb_rx; + gNB->gNB_config.rf_config.tx_antenna_ports.value += gNB->RU_list[ru_id]->nb_rx; AssertFatal(gNB->RU_list[ru_id]->common.rxdataF!=NULL, "RU %d : common.rxdataF is NULL\n", @@ -859,29 +859,29 @@ void init_eNB_afterRU(void) { * In monolithic mode, we come here with nb_antennas_rx == 0 * (not tested in other modes). */ - if (gNB->gNB_config->rf_config.tx_antenna_ports.value < 1) + if (gNB->gNB_config.rf_config.tx_antenna_ports.value < 1) { - LOG_I(PHY, "%s() ************* DJP ***** gNB->gNB_config->rf_config.tx_antenna_ports:%d - GOING TO HARD CODE TO 1", __FUNCTION__, gNB->gNB_config->rf_config.tx_antenna_ports.value); - gNB->gNB_config->rf_config.tx_antenna_ports.value = 1; + LOG_I(PHY, "%s() ************* DJP ***** gNB->gNB_config.rf_config.tx_antenna_ports:%d - GOING TO HARD CODE TO 1", __FUNCTION__, gNB->gNB_config.rf_config.tx_antenna_ports.value); + gNB->gNB_config.rf_config.tx_antenna_ports.value = 1; } else { //LOG_I(PHY," Delete code\n"); } - if (gNB->gNB_config->rf_config.tx_antenna_ports.value < 1) + if (gNB->gNB_config.rf_config.tx_antenna_ports.value < 1) { - LOG_I(PHY, "%s() ************* DJP ***** gNB->gNB_config->rf_config.tx_antenna_ports:%d - GOING TO HARD CODE TO 1", __FUNCTION__, gNB->gNB_config->rf_config.tx_antenna_ports.value); - gNB->gNB_config->rf_config.tx_antenna_ports.value = 1; + LOG_I(PHY, "%s() ************* DJP ***** gNB->gNB_config.rf_config.tx_antenna_ports:%d - GOING TO HARD CODE TO 1", __FUNCTION__, gNB->gNB_config.rf_config.tx_antenna_ports.value); + gNB->gNB_config.rf_config.tx_antenna_ports.value = 1; } else { //LOG_I(PHY," Delete code\n"); } - AssertFatal(gNB->gNB_config->rf_config.tx_antenna_ports.value >0, - "inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,gNB->gNB_config->rf_config.tx_antenna_ports.value); - LOG_I(PHY,"inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,gNB->gNB_config->rf_config.tx_antenna_ports.value); + AssertFatal(gNB->gNB_config.rf_config.tx_antenna_ports.value >0, + "inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,gNB->gNB_config.rf_config.tx_antenna_ports.value); + LOG_I(PHY,"inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,gNB->gNB_config.rf_config.tx_antenna_ports.value); /// Transport init necessary for NR synchro //init_transport(gNB); //init_precoding_weights(RC.gNB[inst][CC_id]); @@ -932,6 +932,7 @@ void init_gNB(int single_thread_flag,int wait_for_sync) { AssertFatal((gNB->if_inst = IF_Module_init(inst))!=NULL,"Cannot register interface"); gNB->if_inst->schedule_response = schedule_response; gNB->if_inst->PHY_config_req = phy_config_request; + nr_phy_config_request(gNB); memset((void*)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO)); memset((void*)&gNB->Sched_INFO,0,sizeof(gNB->Sched_INFO)); LOG_I(PHY,"Setting indication lists\n"); diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c index 2dba1f6d1b..e9537b625e 100644 --- a/targets/RT/USER/nr-ru.c +++ b/targets/RT/USER/nr-ru.c @@ -590,7 +590,7 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *subframe) { void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) { NR_DL_FRAME_PARMS *fp = &ru->nr_frame_parms; - nfapi_config_request_t *cfg = ru->gNB_list[0]->gNB_config; + nfapi_config_request_t *cfg = &ru->gNB_list[0]->gNB_config; RU_proc_t *proc = &ru->proc; uint16_t packet_type; @@ -772,7 +772,7 @@ void tx_rf(RU_t *ru) { RU_proc_t *proc = &ru->proc; NR_DL_FRAME_PARMS *fp = &ru->nr_frame_parms; - nfapi_config_request_t *cfg = ru->gNB_list[0]->gNB_config; + nfapi_config_request_t *cfg = &ru->gNB_list[0]->gNB_config; void *txp[ru->nb_tx]; unsigned int txs; int i; @@ -883,7 +883,7 @@ static void* ru_thread_asynch_rxtx( void* param ) { if (ru->fh_south_asynch_in) ru->fh_south_asynch_in(ru,&frame,&subframe); // asynchronous receive from north (RRU IF4/IF5) else if (ru->fh_north_asynch_in) { - if (nr_subframe_select(ru->gNB_list[0]->gNB_config,subframe)!=SF_UL) + if (nr_subframe_select(&ru->gNB_list[0]->gNB_config,subframe)!=SF_UL) ru->fh_north_asynch_in(ru,&frame,&subframe); } else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n"); @@ -1165,7 +1165,7 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) { int i; NR_DL_FRAME_PARMS *fp = &ru->nr_frame_parms; - nfapi_config_request_t *gNB_config = ru->gNB_list[0]->gNB_config; //tmp index + nfapi_config_request_t *gNB_config = &ru->gNB_list[0]->gNB_config; //tmp index openair0_config_t *cfg = &ru->openair0_cfg; int N_RB = gNB_config->rf_config.dl_channel_bandwidth.value; int mu = gNB_config->subframe_config.numerology_index_mu.value; @@ -1827,7 +1827,7 @@ void configure_ru(int idx, RU_t *ru = RC.ru[idx]; RRU_config_t *config = (RRU_config_t *)arg; RRU_capabilities_t *capabilities = (RRU_capabilities_t*)arg; - nfapi_config_request_t *gNB_config = ru->gNB_list[0]->gNB_config; + nfapi_config_request_t *gNB_config = &ru->gNB_list[0]->gNB_config; int ret; LOG_I(PHY, "Received capabilities from RRU %d\n",idx); @@ -1862,7 +1862,7 @@ void configure_ru(int idx, LOG_I(PHY,"REMOTE_IF4p5: prach_FrequOffset %d, prach_ConfigIndex %d\n", config->prach_FreqOffset[0],config->prach_ConfigIndex[0]);*/ - nr_init_frame_parms(ru->gNB_list[0]->gNB_config, &ru->nr_frame_parms); + nr_init_frame_parms(&ru->gNB_list[0]->gNB_config, &ru->nr_frame_parms); phy_init_RU(ru); } @@ -1871,7 +1871,7 @@ void configure_rru(int idx, RRU_config_t *config = (RRU_config_t *)arg; RU_t *ru = RC.ru[idx]; - nfapi_config_request_t *gNB_config = ru->gNB_list[0]->gNB_config; + nfapi_config_request_t *gNB_config = &ru->gNB_list[0]->gNB_config; ru->nr_frame_parms.eutra_band = config->band_list[0]; ru->nr_frame_parms.dl_CarrierFreq = config->tx_freq[0]; diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c index a2e979fcf8..e4e8a3046d 100644 --- a/targets/RT/USER/nr-softmodem.c +++ b/targets/RT/USER/nr-softmodem.c @@ -689,8 +689,8 @@ void init_openair0(void) { openair0_cfg[card].duplex_mode = duplex_mode_FDD; printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card, - RC.gNB[0][0]->gNB_config->rf_config.tx_antenna_ports.value, - RC.gNB[0][0]->gNB_config->rf_config.tx_antenna_ports.value ); + RC.gNB[0][0]->gNB_config.rf_config.tx_antenna_ports.value, + RC.gNB[0][0]->gNB_config.rf_config.tx_antenna_ports.value ); openair0_cfg[card].Mod_id = 0; openair0_cfg[card].num_rb_dl=config[0]->rf_config.dl_channel_bandwidth.value; @@ -698,8 +698,8 @@ void init_openair0(void) { openair0_cfg[card].clock_source = clock_source; - openair0_cfg[card].tx_num_channels=min(2,RC.gNB[0][0]->gNB_config->rf_config.tx_antenna_ports.value ); - openair0_cfg[card].rx_num_channels=min(2,RC.gNB[0][0]->gNB_config->rf_config.tx_antenna_ports.value ); + openair0_cfg[card].tx_num_channels=min(2,RC.gNB[0][0]->gNB_config.rf_config.tx_antenna_ports.value ); + openair0_cfg[card].rx_num_channels=min(2,RC.gNB[0][0]->gNB_config.rf_config.tx_antenna_ports.value ); for (i=0; i<4; i++) { @@ -760,7 +760,7 @@ void wait_gNBs(void) { for (j=0;jconfigured==0) { - waiting=0; //skip gNB configuration check + waiting=1; break; } }