NR UE: skip DLSCH ACK/NACK reporting for harq pid where feedback is disabled
This commit is contained in:
@@ -2064,6 +2064,8 @@ static void configure_servingcell_info(NR_UE_MAC_INST_t *mac, NR_ServingCellConf
|
|||||||
free(sc_info->maxMIMO_Layers_PDSCH);
|
free(sc_info->maxMIMO_Layers_PDSCH);
|
||||||
sc_info->maxMIMO_Layers_PDSCH = NULL;
|
sc_info->maxMIMO_Layers_PDSCH = NULL;
|
||||||
}
|
}
|
||||||
|
if (sc_info->downlinkHARQ_FeedbackDisabled_r17)
|
||||||
|
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc_info->downlinkHARQ_FeedbackDisabled_r17);
|
||||||
break;
|
break;
|
||||||
case NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup: {
|
case NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup: {
|
||||||
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig = scd->pdsch_ServingCellConfig->choice.setup;
|
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig = scd->pdsch_ServingCellConfig->choice.setup;
|
||||||
@@ -2075,6 +2077,28 @@ static void configure_servingcell_info(NR_UE_MAC_INST_t *mac, NR_ServingCellConf
|
|||||||
UPDATE_IE(sc_info->xOverhead_PDSCH, pdsch_servingcellconfig->xOverhead, long);
|
UPDATE_IE(sc_info->xOverhead_PDSCH, pdsch_servingcellconfig->xOverhead, long);
|
||||||
if (pdsch_servingcellconfig->ext1 && pdsch_servingcellconfig->ext1->maxMIMO_Layers)
|
if (pdsch_servingcellconfig->ext1 && pdsch_servingcellconfig->ext1->maxMIMO_Layers)
|
||||||
UPDATE_IE(sc_info->maxMIMO_Layers_PDSCH, pdsch_servingcellconfig->ext1->maxMIMO_Layers, long);
|
UPDATE_IE(sc_info->maxMIMO_Layers_PDSCH, pdsch_servingcellconfig->ext1->maxMIMO_Layers, long);
|
||||||
|
if (pdsch_servingcellconfig->ext3 && pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17) {
|
||||||
|
switch (pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->present) {
|
||||||
|
case NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_NOTHING:
|
||||||
|
break;
|
||||||
|
case NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_release:
|
||||||
|
if (sc_info->downlinkHARQ_FeedbackDisabled_r17)
|
||||||
|
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc_info->downlinkHARQ_FeedbackDisabled_r17);
|
||||||
|
break;
|
||||||
|
case NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_setup:
|
||||||
|
if (sc_info->downlinkHARQ_FeedbackDisabled_r17 == NULL) {
|
||||||
|
sc_info->downlinkHARQ_FeedbackDisabled_r17 = calloc(1, sizeof(*sc_info->downlinkHARQ_FeedbackDisabled_r17));
|
||||||
|
sc_info->downlinkHARQ_FeedbackDisabled_r17->buf = calloc(4, sizeof(*sc_info->downlinkHARQ_FeedbackDisabled_r17->buf));
|
||||||
|
}
|
||||||
|
sc_info->downlinkHARQ_FeedbackDisabled_r17->size = pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->choice.setup.size;
|
||||||
|
sc_info->downlinkHARQ_FeedbackDisabled_r17->bits_unused = pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->choice.setup.bits_unused;
|
||||||
|
for (int i = 0; i < sc_info->downlinkHARQ_FeedbackDisabled_r17->size; i++)
|
||||||
|
sc_info->downlinkHARQ_FeedbackDisabled_r17->buf[i] = pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->choice.setup.buf[i];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(false, "Invalid case\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac,
|
|||||||
asn1cFreeStruc(asn_DEF_NR_CSI_MeasConfig, sc->csi_MeasConfig);
|
asn1cFreeStruc(asn_DEF_NR_CSI_MeasConfig, sc->csi_MeasConfig);
|
||||||
asn1cFreeStruc(asn_DEF_NR_CSI_AperiodicTriggerStateList, sc->aperiodicTriggerStateList);
|
asn1cFreeStruc(asn_DEF_NR_CSI_AperiodicTriggerStateList, sc->aperiodicTriggerStateList);
|
||||||
asn1cFreeStruc(asn_DEF_NR_NTN_Config_r17, sc->ntn_Config_r17);
|
asn1cFreeStruc(asn_DEF_NR_NTN_Config_r17, sc->ntn_Config_r17);
|
||||||
|
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc->downlinkHARQ_FeedbackDisabled_r17);
|
||||||
free(sc->xOverhead_PDSCH);
|
free(sc->xOverhead_PDSCH);
|
||||||
free(sc->nrofHARQ_ProcessesForPDSCH);
|
free(sc->nrofHARQ_ProcessesForPDSCH);
|
||||||
free(sc->rateMatching_PUSCH);
|
free(sc->rateMatching_PUSCH);
|
||||||
|
|||||||
@@ -2341,7 +2341,17 @@ bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sche
|
|||||||
"Value of pucch_resource_indicator %d not matching with what set before %d (Possibly due to a false DCI) \n",
|
"Value of pucch_resource_indicator %d not matching with what set before %d (Possibly due to a false DCI) \n",
|
||||||
current_harq->pucch_resource_indicator,
|
current_harq->pucch_resource_indicator,
|
||||||
res_ind);
|
res_ind);
|
||||||
else{
|
else {
|
||||||
|
if (!current_harq->ack_received)
|
||||||
|
LOG_E(NR_MAC, "DLSCH ACK/NACK reporting initiated for harq pid %d before DLSCH decoding completed\n", dl_harq_pid);
|
||||||
|
|
||||||
|
if (get_FeedbackDisabled(mac->sc_info.downlinkHARQ_FeedbackDisabled_r17, dl_harq_pid)) {
|
||||||
|
LOG_D(NR_MAC, "skipping DLSCH ACK/NACK reporting for harq pid %d\n", dl_harq_pid);
|
||||||
|
current_harq->active = false;
|
||||||
|
current_harq->ack_received = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (current_harq->dai_cumul == 0) {
|
if (current_harq->dai_cumul == 0) {
|
||||||
LOG_E(NR_MAC,"PUCCH Downlink DAI is invalid\n");
|
LOG_E(NR_MAC,"PUCCH Downlink DAI is invalid\n");
|
||||||
return false;
|
return false;
|
||||||
@@ -2356,7 +2366,6 @@ bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sche
|
|||||||
current_harq->active = false;
|
current_harq->active = false;
|
||||||
current_harq->ack_received = false;
|
current_harq->ack_received = false;
|
||||||
} else {
|
} else {
|
||||||
LOG_E(NR_MAC, "DLSCH ACK/NACK reporting initiated for harq pid %d before DLSCH decoding completed\n", dl_harq_pid);
|
|
||||||
ack_data[code_word][dai_index] = 0;
|
ack_data[code_word][dai_index] = 0;
|
||||||
}
|
}
|
||||||
dai[code_word][dai_index] = (dai_index % 4) + 1; // value between 1 and 4
|
dai[code_word][dai_index] = (dai_index % 4) + 1; // value between 1 and 4
|
||||||
|
|||||||
Reference in New Issue
Block a user