From 4f884db3d65d122fd2c57bf84fa77c1cc120161b Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 22 Mar 2024 09:48:13 +0100 Subject: [PATCH 1/2] correct use of dataScramblingID for PDSCH at UE --- .../nfapi/public_inc/fapi_nr_ue_interface.h | 1 + openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 4 ++-- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 18 ++++++++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h index f370927378..f0c31b9682 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h @@ -494,6 +494,7 @@ typedef struct { uint32_t tbslbrm; uint8_t nscid; uint16_t dlDmrsScramblingId; + uint16_t dlDataScramblingId; uint16_t pduBitmap; uint32_t k1_feedback; uint8_t ldpcBaseGraph; diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 7bb1683507..0c253bb198 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -691,7 +691,7 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t * nr_dlsch_unscrambling(llr[0], dl_harq0->G, 0, - ue->frame_parms.Nid_cell, + dlsch[0].dlsch_config.dlDataScramblingId, dlsch[0].rnti); @@ -787,7 +787,7 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t * nr_dlsch_unscrambling(llr[1], dl_harq1->G, 0, - ue->frame_parms.Nid_cell, + dlsch[1].dlsch_config.dlDataScramblingId, dlsch[1].rnti); stop_meas(&ue->dlsch_unscrambling_stats); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 3ef15ce4d4..a926429d2b 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -189,10 +189,8 @@ int get_rnti_type(const NR_UE_MAC_INST_t *mac, const uint16_t rnti) } else { AssertFatal(1 == 0, "Not identified/handled rnti %d \n", rnti); } - - LOG_D(MAC, "Returning rnti_type %s \n", rnti_types(rnti_type)); - - return rnti_type; + LOG_D(MAC, "Returning rnti_type %s \n", rnti_types(rnti_type)); + return rnti_type; } void nr_ue_decode_mib(NR_UE_MAC_INST_t *mac, int cc_id) @@ -664,6 +662,13 @@ static int nr_ue_process_dci_dl_10(NR_UE_MAC_INST_t *mac, else dlsch_pdu->dlDmrsScramblingId = mac->physCellId; + if (get_rnti_type(mac, dci_ind->rnti) == TYPE_C_RNTI_ + && dci_ind->ss_type != NR_SearchSpace__searchSpaceType_PR_common + && pdsch_config->dataScramblingIdentityPDSCH) + dlsch_pdu->dlDataScramblingId = *pdsch_config->dataScramblingIdentityPDSCH; + else + dlsch_pdu->dlDataScramblingId = mac->physCellId; + /* dmrs symbol positions*/ dlsch_pdu->dlDmrsSymbPos = fill_dmrs_mask(pdsch_config, NR_DL_DCI_FORMAT_1_0, @@ -975,6 +980,11 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac, return -1; } + if (pdsch_Config->dataScramblingIdentityPDSCH) + dlsch_pdu->dlDataScramblingId = *pdsch_Config->dataScramblingIdentityPDSCH; + else + dlsch_pdu->dlDataScramblingId = mac->physCellId; + dlsch_pdu->dmrsConfigType = dl_dmrs_config->dmrs_Type == NULL ? NFAPI_NR_DMRS_TYPE1 : NFAPI_NR_DMRS_TYPE2; /* TODO: fix number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214, From 91e5d80002a28db1f07b6633ee8a682b6e195fff Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 22 Mar 2024 11:08:19 +0100 Subject: [PATCH 2/2] correct use of dataScramblingID for PUSCH at UE --- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 15 ++------ openair2/LAYER2/NR_MAC_UE/mac_proto.h | 1 + openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 13 +++++-- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 39 ++++++++++---------- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 9c59535e16..885fcd403a 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -55,11 +55,7 @@ //extern int32_t uplink_counter; -void nr_pusch_codeword_scrambling_uci(uint8_t *in, - uint32_t size, - uint32_t Nid, - uint32_t n_RNTI, - uint32_t* out) +void nr_pusch_codeword_scrambling_uci(uint8_t *in, uint32_t size, uint32_t Nid, uint32_t n_RNTI, uint32_t* out) { uint8_t reset, b_idx; uint32_t x1 = 0, x2 = 0, s = 0, temp_out = 0; @@ -93,12 +89,7 @@ void nr_pusch_codeword_scrambling_uci(uint8_t *in, } } -void nr_pusch_codeword_scrambling(uint8_t *in, - uint32_t size, - uint32_t Nid, - uint32_t n_RNTI, - bool uci_on_pusch, - uint32_t* out) +void nr_pusch_codeword_scrambling(uint8_t *in, uint32_t size, uint32_t Nid, uint32_t n_RNTI, bool uci_on_pusch, uint32_t* out) { if (uci_on_pusch) nr_pusch_codeword_scrambling_uci(in, size, Nid, n_RNTI, out); @@ -221,7 +212,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, nr_pusch_codeword_scrambling(harq_process_ul_ue->f, available_bits, - ulsch_ue->Nid_cell, + pusch_pdu->data_scrambling_id, rnti, false, scrambled_output); diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 7322024e7b..e4d8cdaecd 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -413,6 +413,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, + int ss_type, const nr_dci_format_t dci_format); int nr_rrc_mac_config_req_sl_preconfig(module_id_t module_id, diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index a926429d2b..0e19702ee8 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -445,7 +445,7 @@ static int nr_ue_process_dci_ul_00(NR_UE_MAC_INST_t *mac, if (!pdu) return -1; - int ret = nr_config_pusch_pdu(mac, &tda_info, &pdu->pusch_config_pdu, dci, NULL, dci_ind->rnti, NR_UL_DCI_FORMAT_0_0); + int ret = nr_config_pusch_pdu(mac, &tda_info, &pdu->pusch_config_pdu, dci, NULL, dci_ind->rnti, dci_ind->ss_type, NR_UL_DCI_FORMAT_0_0); if (ret != 0) remove_ul_config_last_item(pdu); release_ul_config(pdu, false); @@ -518,7 +518,7 @@ static int nr_ue_process_dci_ul_01(NR_UE_MAC_INST_t *mac, fapi_nr_ul_config_request_pdu_t *pdu = lockGet_ul_config(mac, frame_tx, slot_tx, FAPI_NR_UL_CONFIG_TYPE_PUSCH); if (!pdu) return -1; - int ret = nr_config_pusch_pdu(mac, &tda_info, &pdu->pusch_config_pdu, dci, NULL, dci_ind->rnti, NR_UL_DCI_FORMAT_0_1); + int ret = nr_config_pusch_pdu(mac, &tda_info, &pdu->pusch_config_pdu, dci, NULL, dci_ind->rnti, dci_ind->ss_type, NR_UL_DCI_FORMAT_0_1); if (ret != 0) remove_ul_config_last_item(pdu); release_ul_config(pdu, false); @@ -3990,7 +3990,14 @@ static void nr_ue_process_rar(NR_UE_MAC_INST_t *mac, nr_downlink_indication_t *d if (!pdu) return; // Config Msg3 PDU - int ret = nr_config_pusch_pdu(mac, &tda_info, &pdu->pusch_config_pdu, NULL, &rar_grant, rnti, NR_DCI_NONE); + int ret = nr_config_pusch_pdu(mac, + &tda_info, + &pdu->pusch_config_pdu, + NULL, + &rar_grant, + rnti, + NR_SearchSpace__searchSpaceType_PR_common, + NR_DCI_NONE); if (ret != 0) remove_ul_config_last_item(pdu); release_ul_config(pdu, false); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index e9b188cfba..a9ea346441 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -437,6 +437,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, + int ss_type, const nr_dci_format_t dci_format) { uint16_t l_prime_mask = 0; @@ -448,10 +449,10 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, // Common configuration pusch_config_pdu->dmrs_config_type = pusch_dmrs_type1; - pusch_config_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA; - pusch_config_pdu->nrOfLayers = 1; - pusch_config_pdu->Tpmi = 0; - pusch_config_pdu->rnti = rnti; + pusch_config_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA; + pusch_config_pdu->nrOfLayers = 1; + pusch_config_pdu->Tpmi = 0; + pusch_config_pdu->rnti = rnti; pusch_dmrs_AdditionalPosition_t add_pos = pusch_dmrs_pos2; int dmrslength = 1; @@ -560,16 +561,13 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, pusch_config_pdu->transform_precoding = get_transformPrecoding(current_UL_BWP, dci_format, 0); /*DCI format-related configuration*/ - int target_ss; if (dci_format == NR_UL_DCI_FORMAT_0_0) { - target_ss = NR_SearchSpace__searchSpaceType_PR_common; if ((pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_disabled) && pusch_config_pdu->nr_of_symbols < 3) pusch_config_pdu->num_dmrs_cdm_grps_no_data = 1; else pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2; } else if (dci_format == NR_UL_DCI_FORMAT_0_1) { - target_ss = NR_SearchSpace__searchSpaceType_PR_ue_Specific; ul_layers_config(mac, pusch_config_pdu, dci, dci_format); ul_ports_config(mac, &dmrslength, pusch_config_pdu, dci, dci_format); } else { @@ -587,6 +585,12 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, } pusch_config_pdu->scid = 0; + pusch_config_pdu->data_scrambling_id = mac->physCellId; + if (pusch_Config->dataScramblingIdentityPUSCH + && rnti_type == TYPE_C_RNTI_ + && !(dci_format == NR_UL_DCI_FORMAT_0_0 && ss_type == NR_SearchSpace__searchSpaceType_PR_common)) + pusch_config_pdu->data_scrambling_id = *pusch_Config->dataScramblingIdentityPUSCH; + pusch_config_pdu->ul_dmrs_scrambling_id = mac->physCellId; if (dci_format == NR_UL_DCI_FORMAT_0_1) pusch_config_pdu->scid = dci->dmrs_sequence_initialization.val; @@ -641,7 +645,9 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, } /* FREQ_HOPPING_FLAG */ - if ((pusch_Config!=NULL) && (pusch_Config->frequencyHopping!=NULL) && (pusch_Config->resourceAllocation != NR_PUSCH_Config__resourceAllocation_resourceAllocationType0)){ + if ((pusch_Config != NULL) + && (pusch_Config->frequencyHopping != NULL) + && (pusch_Config->resourceAllocation != NR_PUSCH_Config__resourceAllocation_resourceAllocationType0)) { pusch_config_pdu->frequency_hopping = dci->frequency_hopping_flag.val; } @@ -649,17 +655,12 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, pusch_config_pdu->mcs_index = dci->mcs; /* MCS TABLE */ - if (pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_disabled) { - pusch_config_pdu->mcs_table = - get_pusch_mcs_table(pusch_Config ? pusch_Config->mcs_Table : NULL, 0, dci_format, rnti_type, target_ss, false); - } else { - pusch_config_pdu->mcs_table = get_pusch_mcs_table(pusch_Config ? pusch_Config->mcs_TableTransformPrecoder : NULL, - 1, - dci_format, - rnti_type, - target_ss, - false); - } + pusch_config_pdu->mcs_table = get_pusch_mcs_table(pusch_Config ? pusch_Config->mcs_TableTransformPrecoder : NULL, + pusch_config_pdu->transform_precoding != NR_PUSCH_Config__transformPrecoder_disabled, + dci_format, + rnti_type, + ss_type, + false); /* NDI */ NR_UL_HARQ_INFO_t *harq = &mac->ul_harq_info[dci->harq_pid];