Commit 60dca065 authored by David Kim's avatar David Kim

processing crc_ind and rx_ind per pdu in gNB.

1. If matched rnti does not exist between crc_ind pdus and rx_ind puds, the ind or unmatched pdus will be requeued.
2. Sending crc_ind and rx_ind togetehr with crc_ind first in nrUE.
parent 79aeea60
...@@ -366,15 +366,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ...@@ -366,15 +366,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
free(rach_ind); free(rach_ind);
nr_Msg1_transmitted(mod_id, CC_id, frame, gNB_id); nr_Msg1_transmitted(mod_id, CC_id, frame, gNB_id);
} }
if (rx_ind && rx_ind->number_of_pdus > 0)
{
NR_UL_IND_t UL_INFO = {
.rx_ind = *rx_ind,
};
send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id);
free(rx_ind->pdu_list);
free(rx_ind);
}
if (crc_ind && crc_ind->number_crcs > 0) if (crc_ind && crc_ind->number_crcs > 0)
{ {
NR_UL_IND_t UL_INFO = { NR_UL_IND_t UL_INFO = {
...@@ -384,6 +375,15 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ...@@ -384,6 +375,15 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
free(crc_ind->crc_list); free(crc_ind->crc_list);
free(crc_ind); free(crc_ind);
} }
if (rx_ind && rx_ind->number_of_pdus > 0)
{
NR_UL_IND_t UL_INFO = {
.rx_ind = *rx_ind,
};
send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id);
free(rx_ind->pdu_list);
free(rx_ind);
}
} }
return NULL; return NULL;
} }
......
...@@ -209,7 +209,7 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info) ...@@ -209,7 +209,7 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info)
if (!crc_ind) if (!crc_ind)
{ {
LOG_D(NR_PHY, "No crc indication with the same SFN SLOT of rx indication %u %u\n", rx_ind->sfn, rx_ind->slot); LOG_D(NR_PHY, "No crc indication with the same SFN SLOT of rx indication %u %u\n", rx_ind->sfn, rx_ind->slot);
requeue(&gnb_rx_ind_queue, rx_ind); put_queue(&gnb_rx_ind_queue, rx_ind);
return; return;
} }
...@@ -227,8 +227,9 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info) ...@@ -227,8 +227,9 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info)
); );
if (rx_ind && UL_INFO.rx_ind.number_of_pdus > 0 && crc_ind && UL_INFO.crc_ind.number_crcs > 0) { if (rx_ind && UL_INFO.rx_ind.number_of_pdus > 0 && crc_ind && UL_INFO.crc_ind.number_crcs > 0) {
for (int i = 0; i < UL_INFO.rx_ind.number_of_pdus; i++) { int i, j;
for (int j = 0; j < UL_INFO.crc_ind.number_crcs; j++) { for (i = 0; i < UL_INFO.rx_ind.number_of_pdus; i++) {
for (j = 0; j < UL_INFO.crc_ind.number_crcs; j++) {
// find crc_indication j corresponding rx_indication i // find crc_indication j corresponding rx_indication i
const nfapi_nr_rx_data_pdu_t *rx = &UL_INFO.rx_ind.pdu_list[i]; const nfapi_nr_rx_data_pdu_t *rx = &UL_INFO.rx_ind.pdu_list[i];
const nfapi_nr_crc_t *crc = &UL_INFO.crc_ind.crc_list[j]; const nfapi_nr_crc_t *crc = &UL_INFO.crc_ind.crc_list[j];
...@@ -267,14 +268,70 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info) ...@@ -267,14 +268,70 @@ void handle_nr_ulsch(NR_UL_IND_t *UL_info)
handle_nr_ul_harq(UL_INFO.CC_id, UL_INFO.module_id, UL_INFO.frame, UL_INFO.slot, crc); handle_nr_ul_harq(UL_INFO.CC_id, UL_INFO.module_id, UL_INFO.frame, UL_INFO.slot, crc);
break; break;
} // for (j=0;j<UL_INFO.crc_ind.number_crcs;j++) } // for (j=0;j<UL_INFO.crc_ind.number_crcs;j++)
int last = UL_INFO.crc_ind.number_crcs -1;
if (j < last)
{
crc_ind->crc_list[j].handle = crc_ind->crc_list[last].handle;
crc_ind->crc_list[j].harq_id = crc_ind->crc_list[last].harq_id;
crc_ind->crc_list[j].num_cb = crc_ind->crc_list[last].num_cb;
crc_ind->crc_list[j].rnti = crc_ind->crc_list[last].rnti;
crc_ind->crc_list[j].tb_crc_status = crc_ind->crc_list[last].tb_crc_status;
crc_ind->crc_list[j].timing_advance = crc_ind->crc_list[last].timing_advance;
crc_ind->crc_list[j].ul_cqi = crc_ind->crc_list[last].ul_cqi;
UL_INFO.crc_ind.number_crcs--;
}
else if (j == last)
{
UL_INFO.crc_ind.number_crcs--;
}
last = UL_INFO.rx_ind.number_of_pdus -1;
if (i < last)
{
int last = UL_INFO.rx_ind.number_of_pdus -1;
rx_ind->pdu_list[i].handle = rx_ind->pdu_list[last].handle;
rx_ind->pdu_list[i].harq_id = rx_ind->pdu_list[last].harq_id;
rx_ind->pdu_list[i].pdu = rx_ind->pdu_list[last].pdu;
rx_ind->pdu_list[i].pdu_length = rx_ind->pdu_list[last].pdu_length;
rx_ind->pdu_list[i].rnti = rx_ind->pdu_list[last].rnti;
rx_ind->pdu_list[i].timing_advance = rx_ind->pdu_list[last].timing_advance;
rx_ind->pdu_list[i].ul_cqi = rx_ind->pdu_list[last].ul_cqi;
UL_INFO.rx_ind.number_of_pdus--;
i--;
}
else if (i == last)
{
UL_INFO.rx_ind.number_of_pdus--;
}
} // for (i=0;i<UL_INFO.rx_ind.number_of_pdus;i++) } // for (i=0;i<UL_INFO.rx_ind.number_of_pdus;i++)
if (crc_ind && crc_ind->number_crcs > 0) if (UL_INFO.crc_ind.number_crcs > 0)
{
crc_ind->number_crcs = UL_INFO.crc_ind.number_crcs;
requeue(&gnb_crc_ind_queue, crc_ind);
}
if (UL_INFO.rx_ind.number_of_pdus > 0)
{
rx_ind->number_of_pdus = UL_INFO.rx_ind.number_of_pdus;
requeue(&gnb_rx_ind_queue, rx_ind);
}
if (UL_INFO.crc_ind.number_crcs == 0)
{
free(crc_ind->crc_list); free(crc_ind->crc_list);
crc_ind->crc_list = NULL;
free(crc_ind); free(crc_ind);
if (rx_ind && rx_ind->number_of_pdus > 0) crc_ind = NULL;
}
if (UL_INFO.rx_ind.number_of_pdus == 0)
{
free(rx_ind->pdu_list); free(rx_ind->pdu_list);
rx_ind->pdu_list = NULL;
free(rx_ind); free(rx_ind);
rx_ind = NULL;
}
} else if ((rx_ind && UL_INFO.rx_ind.number_of_pdus != 0) } else if ((rx_ind && UL_INFO.rx_ind.number_of_pdus != 0)
|| (crc_ind && UL_INFO.crc_ind.number_crcs != 0)) { || (crc_ind && UL_INFO.crc_ind.number_crcs != 0)) {
LOG_E(NR_PHY, LOG_E(NR_PHY,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment