From 0d6e8ea0fbba4dc3457c4b1305671649f2e77df0 Mon Sep 17 00:00:00 2001 From: cig <guido.casati@iis.fraunhofer.de> Date: Tue, 25 Feb 2020 11:14:03 +0100 Subject: [PATCH] Interface MAC-PHY for RA: passing FAPI PRACH PDU params to PHY --- openair1/PHY/INIT/nr_parms.c | 8 ------ openair1/PHY/NR_UE_TRANSPORT/nr_prach.c | 15 +++++++---- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 30 ++++++++++++++------- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 4 --- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c index 70fa9e824f..1ae0a47d59 100644 --- a/openair1/PHY/INIT/nr_parms.c +++ b/openair1/PHY/INIT/nr_parms.c @@ -344,14 +344,6 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp, fp->ssb_start_subcarrier = (12 * config->ssb_table.ssb_offset_point_a + sco); - // WIP temporary hardcoded - fp->prach_config_common.rootSequenceIndex = 22; // 0 - fp->prach_config_common.prach_Config_enabled = 1; - fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig = 1; // 13 - fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex = 0; // 98 - fp->prach_config_common.prach_ConfigInfo.highSpeedFlag = 0; - fp->prach_config_common.prach_ConfigInfo.msg1_frequencystart = 0; - // definition of Lmax according to ts 38.213 section 4.1 if (fp->dl_CarrierFreq < 6e9) { if(fp->frame_type && (fp->ssb_type==2)) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c index 34331a957d..bfe8179c14 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c @@ -65,9 +65,9 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t subframe) //uint8_t tdd_config = ue->frame_parms.tdd_config; NR_DL_FRAME_PARMS *fp=&ue->frame_parms; uint16_t rootSequenceIndex = fp->prach_config_common.rootSequenceIndex; - uint8_t prach_ConfigIndex = fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex; uint8_t Ncs_config = fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig; uint8_t restricted_set = fp->prach_config_common.prach_ConfigInfo.highSpeedFlag; + uint16_t prach_fmt = ue->prach_resources[gNB_id]->prach_format; uint8_t preamble_index = ue->prach_resources[gNB_id]->ra_PreambleIndex; //uint8_t tdd_mapindex = ue->prach_resources[gNB_id]->ra_TDD_map_index; int16_t *prachF = ue->prach_vars[gNB_id]->prachF; @@ -82,7 +82,6 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t subframe) uint16_t preamble_index0,n_shift_ra,n_shift_ra_bar; uint16_t d_start,numshift; - uint16_t prach_fmt = get_nr_prach_fmt(prach_ConfigIndex,fp->frame_type,fp->freq_range); //uint8_t Nsp=2; //uint8_t f_ra,t1_ra; uint16_t N_ZC = (prach_fmt<4)?839:139; @@ -224,9 +223,15 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t subframe) #ifdef NR_PRACH_DEBUG if (NCS>0) - LOG_I(PHY,"Generate PRACH for RootSeqIndex %d, Preamble Index %d, PRACH Format %x, prach_ConfigIndex %d, NCS %d (NCS_config %d, N_ZC/NCS %d): Preamble_offset %d, Preamble_shift %d\n", - rootSequenceIndex,preamble_index,prach_fmt,prach_ConfigIndex,NCS,Ncs_config,N_ZC/NCS, - preamble_offset,preamble_shift); + LOG_I(PHY,"Generate PRACH for RootSeqIndex %d, Preamble Index %d, PRACH Format %x, NCS %d (NCS_config %d, N_ZC/NCS %d): Preamble_offset %d, Preamble_shift %d\n", + rootSequenceIndex, + preamble_index, + prach_fmt, + NCS, + Ncs_config, + N_ZC/NCS, + preamble_offset, + preamble_shift); #endif diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index f365d00c89..cb53fe4920 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -54,8 +54,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ NR_UE_PDCCH *pdcch_vars = PHY_vars_UE_g[module_id][cc_id]->pdcch_vars[thread_id][0]; NR_UE_DLSCH_t *dlsch0 = PHY_vars_UE_g[module_id][cc_id]->dlsch[thread_id][0][0]; NR_UE_ULSCH_t *ulsch0 = PHY_vars_UE_g[module_id][cc_id]->ulsch[thread_id][0][0]; - //NR_DL_FRAME_PARMS frame_parms = PHY_vars_UE_g[module_id][cc_id]->frame_parms; - //NR_PRACH_RESOURCES_t *prach_resources = PHY_vars_UE_g[module_id][cc_id]->prach_resources[0]; if(scheduled_response->dl_config != NULL){ fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config; @@ -112,10 +110,16 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ for (i = 0; i < ul_config->number_pdus; ++i){ - uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type, pucch_resource_id, current_harq_pid, format; + uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type, pucch_resource_id, current_harq_pid, format, gNB_id = 0; + /* PRACH */ + NR_DL_FRAME_PARMS *fp; + NR_PRACH_RESOURCES_t *prach_resources; + NR_PRACH_CONFIG_COMMON *prach_config_common; + fapi_nr_ul_config_prach_pdu *prach_config_pdu; + /* PUSCH */ fapi_nr_ul_config_pusch_pdu_rel15_t *pusch_config_pdu; + /* PUCCH */ fapi_nr_ul_config_pucch_pdu *pucch_config_pdu; - fapi_nr_ul_config_prach_pdu *prach_config_pdu; PUCCH_ConfigCommon_nr_t *pucch_config_common_nr; PUCCH_Config_t *pucch_config_dedicated_nr; PUCCH_format_t *format_params; @@ -183,13 +187,19 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ case (FAPI_NR_UL_CONFIG_TYPE_PRACH): // prach config pdu + fp = &PHY_vars_UE_g[module_id][cc_id]->frame_parms; + prach_resources = &PHY_vars_UE_g[module_id][cc_id]->prach_resources[gNB_id]; + prach_config_common = &fp->prach_config_common; prach_config_pdu = &ul_config->ul_config_list[i].prach_config_pdu; - /*frame_parms.prach_config_common.rootSequenceIndex = prach_config_pdu->root_sequence_index; - frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex = prach_config_pdu->prach_configuration_index; - frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig = prach_config_pdu->zero_correlation_zone_config; - frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag = prach_config_pdu->restrictedset_config; - frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset = prach_config_pdu->prach_freq_offset;*/ - ////prach_resources->ra_PreambleIndex = prach_config_pdu->preamble_index; + + prach_config_common->prach_Config_enabled = 1; + prach_config_common->rootSequenceIndex = prach_config_pdu->root_seq_id; + prach_config_common->prach_ConfigInfo.zeroCorrelationZoneConfig = prach_config_pdu->num_cs; + prach_config_common->prach_ConfigInfo.highSpeedFlag = prach_config_pdu->restricted_set; + prach_config_common->prach_ConfigInfo.msg1_frequencystart = prach_config_pdu->freq_msg1; + + prach_resources->prach_format = prach_config_pdu->prach_format; + break; default: diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 36a2316ebe..ceb523f94c 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -2273,11 +2273,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, /* RACH */ if ((ue->UE_mode[gNB_id] == PRACH) && (ue->frame_parms.prach_config_common.prach_Config_enabled == 1)) { - - // check if we have PRACH opportunity - if (is_nr_prach_subframe(&ue->frame_parms, frame_tx, slot_tx)) { nr_ue_prach_procedures(ue, proc, gNB_id, mode); - } } else { ue->generate_nr_prach = 0; -- 2.26.2