Merge remote-tracking branch 'origin/NR_UE_handling_MCS_for_retransmission_v2' into integration_2023_w44
This commit is contained in:
@@ -101,27 +101,23 @@ static bool nr_ue_postDecode(PHY_VARS_NR_UE *phy_vars_ue,
|
||||
LOG_D(PHY, "DLSCH %d in error\n", rdata->dlsch_id);
|
||||
}
|
||||
|
||||
uint32_t tbs;
|
||||
if (dlsch->dlsch_config.targetCodeRate > 0)
|
||||
tbs = dlsch->dlsch_config.TBS;
|
||||
else
|
||||
tbs = harq_process->tb_size;
|
||||
|
||||
// if all segments are done
|
||||
if (last) {
|
||||
kpiStructure.nb_total++;
|
||||
kpiStructure.blockSize = tbs;
|
||||
kpiStructure.blockSize = dlsch->dlsch_config.TBS;
|
||||
kpiStructure.dl_mcs = dlsch->dlsch_config.mcs;
|
||||
kpiStructure.nofRBs = dlsch->dlsch_config.number_rbs;
|
||||
|
||||
if (*num_seg_ok == harq_process->C) {
|
||||
if (harq_process->C > 1) {
|
||||
int A = dlsch->dlsch_config.TBS;
|
||||
/* check global CRC */
|
||||
// we have regrouped the transport block, so it is "1" segment
|
||||
if (!check_crc(b, lenWithCrc(1, tbs), crcType(1, tbs))) {
|
||||
if (!check_crc(b, lenWithCrc(1, A), crcType(1, A))) {
|
||||
harq_process->ack = 0;
|
||||
dlsch->last_iteration_cnt = dlsch->max_ldpc_iterations + 1;
|
||||
LOG_E(PHY, " Frame %d.%d LDPC global CRC fails, but individual LDPC CRC succeeded. %d segs\n", proc->frame_rx, proc->nr_slot_rx, harq_process->C);
|
||||
LOG_E(PHY, " Frame %d.%d LDPC global CRC fails, but individual LDPC CRC succeeded. %d segs\n",
|
||||
proc->frame_rx, proc->nr_slot_rx, harq_process->C);
|
||||
LOG_D(PHY, "DLSCH received nok \n");
|
||||
return true; //stop
|
||||
}
|
||||
@@ -343,13 +339,7 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
||||
}
|
||||
*/
|
||||
nb_rb = dlsch->dlsch_config.number_rbs;
|
||||
uint32_t A;
|
||||
if (dlsch->dlsch_config.targetCodeRate > 0) {
|
||||
A = dlsch->dlsch_config.TBS;
|
||||
harq_process->tb_size = A;
|
||||
}
|
||||
else
|
||||
A = harq_process->tb_size;
|
||||
uint32_t A = dlsch->dlsch_config.TBS;
|
||||
ret = dlsch->max_ldpc_iterations + 1;
|
||||
dlsch->last_iteration_cnt = ret;
|
||||
harq_process->G = nr_get_G(nb_rb, nb_symb_sch, nb_re_dmrs, dmrs_length, dlsch->dlsch_config.qamModOrder,dlsch->Nl);
|
||||
|
||||
@@ -91,8 +91,6 @@ typedef struct {
|
||||
uint8_t BG;
|
||||
// LDPC lifting size
|
||||
uint32_t Z;
|
||||
// TB size
|
||||
uint32_t tb_size;
|
||||
} NR_UL_UE_HARQ_t;
|
||||
|
||||
typedef struct {
|
||||
@@ -115,6 +113,8 @@ typedef struct {
|
||||
uint8_t Ndi;
|
||||
/// DLSCH status flag indicating
|
||||
SCH_status_t status;
|
||||
/// Transport block size
|
||||
uint32_t TBS;
|
||||
/// Pointers to transport block segments
|
||||
uint8_t **c;
|
||||
/// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
|
||||
@@ -140,8 +140,6 @@ typedef struct {
|
||||
/// Used for computing LDPC decoder R
|
||||
int llrLen;
|
||||
decode_abort_t abort_decode;
|
||||
// TB size
|
||||
uint32_t tb_size;
|
||||
} NR_DL_UE_HARQ_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -131,16 +131,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
||||
NR_UL_UE_HARQ_t *harq_process_ul_ue = &UE->ul_harq_processes[harq_pid];
|
||||
const nfapi_nr_ue_pusch_pdu_t *pusch_pdu = &ulsch_ue->pusch_pdu;
|
||||
|
||||
uint32_t tb_size;
|
||||
// MCS > limit -> retransmission
|
||||
// Take TB size from previois transmission
|
||||
if (pusch_pdu->target_code_rate == 0)
|
||||
tb_size = harq_process_ul_ue->tb_size;
|
||||
else {
|
||||
tb_size = pusch_pdu->pusch_data.tb_size;
|
||||
harq_process_ul_ue->tb_size = tb_size;
|
||||
}
|
||||
|
||||
uint32_t tb_size = pusch_pdu->pusch_data.tb_size;
|
||||
int start_symbol = pusch_pdu->start_symbol_index;
|
||||
uint16_t ul_dmrs_symb_pos = pusch_pdu->ul_dmrs_symb_pos;
|
||||
uint8_t number_of_symbols = pusch_pdu->nr_of_symbols;
|
||||
|
||||
@@ -132,7 +132,7 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
||||
dl_harq0 = &ue->dl_harq_processes[0][dlsch0->dlsch_config.harq_process_nbr];
|
||||
trace_NRpdu(DIRECTION_DOWNLINK,
|
||||
b,
|
||||
dl_harq0->tb_size / 8,
|
||||
dlsch0->dlsch_config.TBS / 8,
|
||||
t,
|
||||
dlsch0->rnti,
|
||||
proc->frame_rx,
|
||||
@@ -148,7 +148,7 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
||||
rx_ind->rx_indication_body[n_pdus - 1].pdsch_pdu.harq_pid = dlsch0->dlsch_config.harq_process_nbr;
|
||||
rx_ind->rx_indication_body[n_pdus - 1].pdsch_pdu.ack_nack = dl_harq0->ack;
|
||||
rx_ind->rx_indication_body[n_pdus - 1].pdsch_pdu.pdu = b;
|
||||
rx_ind->rx_indication_body[n_pdus - 1].pdsch_pdu.pdu_length = dl_harq0->tb_size / 8;
|
||||
rx_ind->rx_indication_body[n_pdus - 1].pdsch_pdu.pdu_length = dlsch0->dlsch_config.TBS / 8;
|
||||
}
|
||||
if(dlsch1) {
|
||||
AssertFatal(1==0,"Second codeword currently not supported\n");
|
||||
@@ -764,7 +764,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
|
||||
nr_fill_dl_indication(&dl_indication, NULL, &rx_ind, proc, ue, NULL);
|
||||
nr_fill_rx_indication(&rx_ind, ind_type, ue, &dlsch[0], NULL, number_pdus, proc, NULL, p_b);
|
||||
|
||||
LOG_D(PHY, "DL PDU length in bits: %d, in bytes: %d \n", dl_harq0->tb_size, dl_harq0->tb_size / 8);
|
||||
LOG_D(PHY, "DL PDU length in bits: %d, in bytes: %d \n", dlsch[0].dlsch_config.TBS, dlsch[0].dlsch_config.TBS / 8);
|
||||
|
||||
stop_meas(&ue->dlsch_decoding_stats);
|
||||
if (cpumeas(CPUMEAS_GETSTATE)) {
|
||||
@@ -814,7 +814,7 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
|
||||
LOG_D(PHY, "AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f\n",
|
||||
frame_rx%1024, nr_slot_rx,(ue->dlsch_decoding_stats.p_time)/(cpuf*1000.0));
|
||||
}
|
||||
LOG_D(PHY, "harq_pid: %d, TBS expected dlsch1: %d \n", harq_pid, dl_harq1->tb_size);
|
||||
LOG_D(PHY, "harq_pid: %d, TBS expected dlsch1: %d \n", harq_pid, dlsch[1].dlsch_config.TBS);
|
||||
}
|
||||
|
||||
// send to mac
|
||||
|
||||
Reference in New Issue
Block a user