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/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/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/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 0dfe61e3b1..dbd0bc94b5 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -374,6 +374,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 73a373af9b..5520c49315 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) @@ -447,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); @@ -520,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); @@ -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, @@ -3979,7 +3989,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 7bd757c977..1e92d08344 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -502,6 +502,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; @@ -513,10 +514,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; @@ -625,16 +626,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 { @@ -652,6 +650,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; @@ -706,7 +710,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; } @@ -714,17 +720,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];