diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index d3362a4851..ca92f30d4f 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -572,6 +572,7 @@ int main(int argc, char **argv) } } + free_nrLDPC_coding_interface(&nrLDPC_coding_interface); free(pckg); return 0; } diff --git a/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface_load.c b/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface_load.c index 4819b68598..ab80eb77a0 100644 --- a/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface_load.c +++ b/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface_load.c @@ -70,5 +70,9 @@ int load_nrLDPC_coding_interface(char *version, nrLDPC_coding_interface_t *itf) int free_nrLDPC_coding_interface(nrLDPC_coding_interface_t *interface) { - return interface->nrLDPC_coding_shutdown(); + if (interface->nrLDPC_coding_shutdown) { + return interface->nrLDPC_coding_shutdown(); + } else { + return -1; + } } diff --git a/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c b/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c index fa5aa2d482..c16b21bfdc 100644 --- a/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c +++ b/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c @@ -559,8 +559,18 @@ set_ldpc_dec_op(struct rte_bbdev_dec_op **ops, ops[j]->ldpc_dec.op_flags |= RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK; } ops[j]->ldpc_dec.code_block_mode = 1; - ops[j]->ldpc_dec.harq_combined_input.offset = (((nrLDPC_slot_decoding_parameters->TBs[h].harq_unique_pid * NR_LDPC_MAX_NUM_CB) % HARQ_CODEBLOCK_ID_MAX) + i) * LDPC_MAX_CB_SIZE; - ops[j]->ldpc_dec.harq_combined_output.offset = (((nrLDPC_slot_decoding_parameters->TBs[h].harq_unique_pid * NR_LDPC_MAX_NUM_CB) % HARQ_CODEBLOCK_ID_MAX) + i) * LDPC_MAX_CB_SIZE; + + // Calculate offset in the HARQ combined buffers + // Unique segment offset + uint32_t segment_offset = (nrLDPC_slot_decoding_parameters->TBs[h].harq_unique_pid * NR_LDPC_MAX_NUM_CB) + i; + // Prune to avoid shooting above maximum id + uint32_t pruned_segment_offset = segment_offset % HARQ_CODEBLOCK_ID_MAX; + // Segment offset to byte offset + uint32_t harq_combined_offset = pruned_segment_offset * LDPC_MAX_CB_SIZE; + + ops[j]->ldpc_dec.harq_combined_input.offset = harq_combined_offset; + ops[j]->ldpc_dec.harq_combined_output.offset = harq_combined_offset; + if (bufs->hard_outputs != NULL) ops[j]->ldpc_dec.hard_output = bufs->hard_outputs[start_idx + j]; if (bufs->inputs != NULL) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 581338fa45..2b8ede1069 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -292,6 +292,9 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB) free_and_zero(pusch_vars->llr); } // ULSCH_id free(gNB->pusch_vars); + + free_nrLDPC_coding_interface(&gNB->nrLDPC_coding_interface); + } //Adding nr_schedule_handler diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c index 1730c91816..4062077ab7 100644 --- a/openair1/SIMULATION/NR_PHY/dlschsim.c +++ b/openair1/SIMULATION/NR_PHY/dlschsim.c @@ -661,8 +661,6 @@ int main(int argc, char **argv) free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list); free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list); - free_nrLDPC_coding_interface(&gNB->nrLDPC_coding_interface); - abortTpool(&gNB->threadPool); phy_free_nr_gNB(gNB); diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c index 8a39852995..12c3551566 100644 --- a/openair1/SIMULATION/NR_PHY/ulschsim.c +++ b/openair1/SIMULATION/NR_PHY/ulschsim.c @@ -603,8 +603,6 @@ int main(int argc, char **argv) free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list); free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list); - free_nrLDPC_coding_interface(&gNB->nrLDPC_coding_interface); - term_nr_ue_signal(UE, 1); free(UE);