diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 672bc3c3a2..6bd3ad9fbe 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -843,10 +843,23 @@ static int nr_ue_process_dci_dl_10(NR_UE_MAC_INST_t *mac, dlsch_pdu->number_symbols = tda_info.nrOfSymbols; dlsch_pdu->start_symbol = tda_info.startSymbolIndex; - struct NR_DMRS_DownlinkConfig *dl_dmrs_config = NULL; - if (pdsch_config) - dl_dmrs_config = (tda_info.mapping_type == typeA) ? pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup - : pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + mappingType_t type = tda_info.mapping_type; + NR_DMRS_DownlinkConfig_t *dl_dmrs_config = NULL; + if (pdsch_config) { + if (type == typeA) { + if (!pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA) { + LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeA but not configured\n"); + return -1; + } else + dl_dmrs_config = pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup; + } else { // typeB + if (!pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB) { + LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeB but not configured\n"); + return -1; + } else + dl_dmrs_config = pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + } + } dlsch_pdu->nscid = 0; if (dl_dmrs_config && dl_dmrs_config->scramblingID0) @@ -1184,9 +1197,23 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac, dlsch_pdu->number_symbols = tda_info.nrOfSymbols; dlsch_pdu->start_symbol = tda_info.startSymbolIndex; - struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (tda_info.mapping_type == typeA) - ? pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup - : pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + mappingType_t type = tda_info.mapping_type; + NR_DMRS_DownlinkConfig_t *dl_dmrs_config = NULL; + if (pdsch_Config) { + if (type == typeA) { + if (!pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA) { + LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeA but not configured\n"); + return -1; + } else + dl_dmrs_config = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup; + } else { // typeB + if (!pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB) { + LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeB but not configured\n"); + return -1; + } else + dl_dmrs_config = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + } + } switch (dci->dmrs_sequence_initialization.val) { case 0: @@ -1417,9 +1444,9 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac, dlsch_pdu->tbslbrm = nr_compute_tbslbrm(dlsch_pdu->mcs_table, sc_info->dl_bw_tbslbrm, nl_tbslbrm); /*PTRS configuration */ dlsch_pdu->pduBitmap = 0; - if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS != NULL) { + if (dl_dmrs_config->phaseTrackingRS != NULL) { bool valid_ptrs_setup = - set_dl_ptrs_values(pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup, + set_dl_ptrs_values(dl_dmrs_config->phaseTrackingRS->choice.setup, dlsch_pdu->number_rbs, dlsch_pdu->mcs, dlsch_pdu->mcs_table, diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index fcc977d9e5..d06c8302a6 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -598,12 +598,21 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, } int mappingtype = tda_info->mapping_type; - NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = NULL; - if(pusch_Config) { - NR_DMRS_ulconfig = (mappingtype == NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA) - ? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup - : pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup; + if (pusch_Config) { + if (mappingtype == NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA) { + if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) { + LOG_E(MAC, "Invalid PUSCH DMRS configuration, expected typeA but not configured\n"); + return -1; + } else + NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup; + } else { // typeB + if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB) { + LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeB but not configured\n"); + return -1; + } else + NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup; + } } pusch_config_pdu->scid = 0;