Commit c7875ce2 authored by Melissa Elkadi's avatar Melissa Elkadi

Properly filling the dci_format

This commit properly is filing the dci_format but the
rx_ind and dl_ind has not been updated in the NR UE
prior to sending to gNB. The chnages in this commit
to properly fill the dci_format include:
- filling the dci canidates every slot indiction
- checking for a dl_tti/ul_tti containing a dci
- when dci payload is received we use the filled
  dci canidates to update the dci_format

Also, a bug in LTE UE is found where we are indexing
passed the end of ue_sdu array. We added a check for this.
Furthermore, in the nr_ue_scheduler we were utilizing
tx_req but the memory wasnt properly initialized.
parent 9cce04ef
......@@ -179,6 +179,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
{
NR_PRACH_RESOURCES_t prach_resources;
memset(&prach_resources, 0, sizeof(prach_resources));
NR_UL_TIME_ALIGNMENT_t ul_time_alignment;
memset(&ul_time_alignment, 0, sizeof(ul_time_alignment));
int last_sfn_slot = -1;
while (!oai_exit)
{
......@@ -199,7 +201,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
module_id_t mod_id = 0;
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
if (mac->scc == NULL) {
if (mac->scc == NULL)
{
continue;
}
......@@ -218,11 +221,28 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
ul_info.slot_rx = slot;
ul_info.slot_tx = (slot + slot_ahead) % slots_per_frame;
ul_info.frame_tx = (ul_info.slot_rx + slot_ahead >= slots_per_frame) ? ul_info.frame_rx + 1 : ul_info.frame_rx;
if (is_nr_UL_slot(mac->scc, ul_info.slot_tx)) {
LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__);
memset(&mac->dl_info, 0, sizeof(mac->dl_info));
mac->dl_info.cc_id = CC_id;
mac->dl_info.gNB_index = gNB_id;
mac->dl_info.module_id = mod_id;
mac->dl_info.frame = frame;
mac->dl_info.slot = slot;
mac->dl_info.thread_id = 0;
mac->dl_info.dci_ind = NULL;
mac->dl_info.rx_ind = NULL;
if (is_nr_UL_slot(mac->scc, ul_info.slot_rx))
{
nr_ue_dl_indication(&mac->dl_info, &ul_time_alignment);
}
if (is_nr_UL_slot(mac->scc, ul_info.slot_tx))
{
LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__);
nr_ue_ul_indication(&ul_info);
fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, ul_info.slot_tx);
if (!ul_config) {
if (!ul_config)
{
LOG_E(NR_MAC, "mac->ul_config is null! \n");
continue;
}
......@@ -243,12 +263,10 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
else if (nr_prach == 2)
{
LOG_I(NR_PHY, "In %s: [UE %d] RA completed, setting UE mode to PUSCH\n", __FUNCTION__, mod_id);
//UE->UE_mode[0] = PUSCH;
}
else if(nr_prach == 3)
{
LOG_I(NR_PHY, "In %s: [UE %d] RA failed, setting UE mode to PRACH\n", __FUNCTION__, mod_id);
//UE->UE_mode[0] = PRACH;
}
}
}
......
......@@ -47,10 +47,10 @@ const char *ul_pdu_type[]={"PRACH", "PUCCH", "PUSCH", "SRS"};
int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) {
if(scheduled_response != NULL){
if (scheduled_response->ul_config != NULL){
if(scheduled_response != NULL)
{
if (scheduled_response->ul_config != NULL)
{
fapi_nr_ul_config_request_t *ul_config = scheduled_response->ul_config;
AssertFatal(ul_config->number_pdus < sizeof(ul_config->ul_config_list) / sizeof(ul_config->ul_config_list[0]),
"Too many ul_config pdus %d", ul_config->number_pdus);
......@@ -99,6 +99,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
{
crc_ind->crc_list[j].handle = pusch_config_pdu->handle;
crc_ind->crc_list[j].harq_id = pusch_config_pdu->pusch_data.harq_process_id;
LOG_I(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j);
crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb;
crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti;
crc_ind->crc_list[j].tb_crc_status = 0;
......@@ -123,6 +124,36 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
}
scheduled_response->ul_config->number_pdus = 0;
}
if (scheduled_response->dl_config != NULL)
{
//scheduled_response->dl_config->number_pdus = 0;
/* After calling nr_ue_dl_indiction then the dl_config is here.
We will have dl_config and a tx_req. Then we need to
if(ret<dlsch0->max_ldpc_iterations+1){
switch (pdsch) {
case RA_PDSCH:
nr_fill_dl_indication(&dl_indication, NULL, &rx_ind, proc, ue, eNB_id);
nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_RAR, eNB_id, ue, dlsch0, number_pdus);
ue->UE_mode[eNB_id] = RA_RESPONSE;
break;
case PDSCH:
nr_fill_dl_indication(&dl_indication, NULL, &rx_ind, proc, ue, eNB_id);
nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_DLSCH, eNB_id, ue, dlsch0, number_pdus);
break;
case SI_PDSCH:
rx_ind.rx_indication_body[0].pdu_type = FAPI_NR_RX_PDU_TYPE_SIB;
break;
default:
break;
}
// send to mac
if (ue->if_inst && ue->if_inst->dl_indication) {
ue->if_inst->dl_indication(&dl_indication, ul_time_alignment);
}
*/
}
}
return 0;
}
......
......@@ -35,6 +35,7 @@
#include "NR_IF_Module.h"
#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h"
#include "openair2/LAYER2/NR_MAC_UE/mac_proto.h"
/**\brief NR UE FAPI-like P7 messages, scheduled response from L2 indicating L1
\param scheduled_response including transmission config(dl_config, ul_config) and data transmission (tx_req)*/
......
......@@ -2614,6 +2614,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
scheduling_info.BSR_bytes[UE_mac_inst[module_idP].
scheduling_info.LCGID
[lcid]]);
AssertFatal(num_sdus < sizeof(sdu_lengths) / sizeof(sdu_lengths[0]), "num_sdus %d > num sdu_length elements\n", num_sdus);
sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,
UE_mac_inst
[module_idP].
......
......@@ -372,6 +372,8 @@ typedef struct {
NR_SearchSpace_t *search_space_zero;
NR_ControlResourceSet_t *coreset0;
nr_downlink_indication_t dl_info;
} NR_UE_MAC_INST_t;
typedef enum seach_space_mask_e {
......
......@@ -136,12 +136,6 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
rel15->SubcarrierSpacing = bwp_Common->genericParameters.subcarrierSpacing;
for (int i = 0; i < rel15->num_dci_options; i++) {
rel15->dci_length_options[i] = nr_dci_size(scc, mac->scg, def_dci_pdu_rel15+i, rel15->dci_format_options[i], NR_RNTI_C, rel15->BWPSize, bwp_id);
AssertFatal(mac->dl_config_request.number_pdus <
sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]),
"mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus);
for (int j = 0; j < mac->dl_config_request.number_pdus; j++) {
mac->dl_config_request.dl_config_list[j].dci_config_pdu.dci_config_rel15.dci_length_options[i] = rel15->dci_length_options[i];
}
}
break;
case NR_RNTI_RA:
......@@ -153,12 +147,6 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
rel15->BWPStart = NRRIV2PRBOFFSET(bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE); //NRRIV2PRBOFFSET(initialDownlinkBWP->genericParameters.locationAndBandwidth, 275);
rel15->SubcarrierSpacing = initialDownlinkBWP->genericParameters.subcarrierSpacing;
rel15->dci_length_options[0] = nr_dci_size(scc, mac->scg, def_dci_pdu_rel15, rel15->dci_format_options[0], NR_RNTI_RA, rel15->BWPSize, bwp_id);
AssertFatal(mac->dl_config_request.number_pdus <
sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]),
"mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus);
for (int i = 0; i < mac->dl_config_request.number_pdus; i++) {
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_length_options[0] = rel15->dci_length_options[0];
}
break;
case NR_RNTI_P:
break;
......@@ -261,14 +249,6 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
rel15->num_dci_options = 1;
rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_0;
config_dci_pdu(mac, rel15, dl_config, NR_RNTI_RA, ss_id);
AssertFatal(mac->dl_config_request.number_pdus <
sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]),
"mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus);
for (int i = 0; i < mac->dl_config_request.number_pdus; i++) {
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.num_dci_options = 1;
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_length_options[0] = rel15->dci_length_options[0];
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_format_options[0] = NR_DL_DCI_FORMAT_1_0;
}
fill_dci_search_candidates(ss, rel15);
break;
case WAIT_CONTENTION_RESOLUTION:
......@@ -342,14 +322,6 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
rel15->num_dci_options = 2;
rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_1;
rel15->dci_format_options[1] = NR_UL_DCI_FORMAT_0_1;
AssertFatal(mac->dl_config_request.number_pdus <
sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]),
"mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus);
for (int i = 0; i < mac->dl_config_request.number_pdus; i++) {
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.num_dci_options = 2;
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_format_options[0] = NR_DL_DCI_FORMAT_1_1;
mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_format_options[1] = NR_UL_DCI_FORMAT_0_1;
}
config_dci_pdu(mac, rel15, dl_config, NR_RNTI_C, ss_id);
fill_dci_search_candidates(ss, rel15);
......
......@@ -471,7 +471,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
const uint16_t n_RB_DLBWP = (ra->ra_state == WAIT_RAR) ? NRRIV2BW(mac->scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE) : NRRIV2BW(mac->DLbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
LOG_D(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP);
LOG_I(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP);
switch(dci_format){
case NR_UL_DCI_FORMAT_0_0: {
......
......@@ -838,6 +838,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
dcireq.slot = rx_slot;
dcireq.dl_config_req.number_pdus = 0;
nr_ue_dcireq(&dcireq); //to be replaced with function pointer later
mac->dl_config_request = dcireq.dl_config_req;
fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id);
if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL){
......@@ -885,6 +886,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
uint8_t data_existing = 0;
nr_scheduled_response_t scheduled_response;
fapi_nr_tx_request_t tx_req;
memset(&tx_req, 0, sizeof(tx_req));
for (int j = 0; j < ul_config->number_pdus; j++) {
......
......@@ -200,47 +200,6 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id)
}
}
static void set_dci_format(fapi_nr_dci_indication_pdu_t *dci_list, NR_UE_MAC_INST_t *UE_mac)
{
/* Melissa: If the dci_list comes in slot 7, and has a PDCCH payload then it must be the RAR.
If it is the RAR, we have not handled the RX_IND from the tx_data request yet, so the
mac->dl_config_request in the mac instance hasnt been updated with the num_pdus > 0, meaning
that when we try to fill this dci_format in the function call below, the num_pdus = 0 and we never
fill it. Since the dci_format field is initialized to zero this is not incorrectly setting the format,
but it is also not explicityly setting it, which I think is bad.
Maybe we just set dci_format = NR_DL_DCI_FORMAT_1_0 since we know this is the RAR? */
int num_pdus = UE_mac->dl_config_request.number_pdus;
if (num_pdus <= 0)
{
LOG_E(NR_PHY, "%s: dl_config_request number of PDUS (%d) <= 0\n", __FUNCTION__, num_pdus);
return;
}
AssertFatal(num_pdus < sizeof(UE_mac->dl_config_request.dl_config_list) / sizeof(UE_mac->dl_config_request.dl_config_list[0]),
"Number of PDUs (%d) exceeds dl_config_pdu list size.", num_pdus);
for (int i = 0; i < num_pdus; i++)
{
fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15_dci = &UE_mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15;
int num_dci_options = rel15_dci->num_dci_options;
LOG_I(NR_MAC, "Melissa this is the num_dci_opts %d\n", rel15_dci->num_dci_options);
int len = sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]);
AssertFatal(len <= sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]),
"num_dci_options %d > dci_options array\n", num_dci_options);
AssertFatal(len <= sizeof(rel15_dci->dci_format_options) / sizeof(rel15_dci->dci_format_options[0]),
"num_dci_options %d > dci_options array\n", num_dci_options);
for (int j = 0; j < len; j++)
{
LOG_I(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n",
dci_list->payloadSize, j, rel15_dci->dci_length_options[j],
dci_list->dci_format, j, rel15_dci->dci_format_options[j]);
if (rel15_dci->dci_length_options[j] == dci_list->payloadSize)
{
dci_list->dci_format = rel15_dci->dci_format_options[j];
}
}
}
}
static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_dl_tti_request_t *dl_tti_request)
{
int num_pdus = dl_tti_request->dl_tti_request_body.nPDUs;
......@@ -250,7 +209,6 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_
abort();
}
NR_UE_MAC_INST_t *UE_mac = get_mac_inst(0);
for (int i = 0; i < num_pdus; i++)
{
nfapi_nr_dl_tti_request_pdu_t *pdu_list = &dl_tti_request->dl_tti_request_body.dl_tti_pdu_list[i];
......@@ -284,13 +242,6 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_
}
dl_info->dci_ind->dci_list[j].payloadSize = dci_pdu_list->PayloadSizeBits;
dl_info->dci_ind->dci_list[j].rnti = dci_pdu_list->RNTI;
if (dci_pdu_list->PayloadSizeBits == 37) //Melissa: hack. This size is for RAR
dl_info->dci_ind->dci_list[j].dci_format = 0;
if (dci_pdu_list->PayloadSizeBits == 40) //Melissa: hack. This size is for UL_DCI
dl_info->dci_ind->dci_list[j].dci_format = 7;
if (dci_pdu_list->PayloadSizeBits == 46) //Melissa: hack. This size is for DLSCH
dl_info->dci_ind->dci_list[j].dci_format = 1;
//set_dci_format(&dl_info->dci_ind->dci_list[j], UE_mac);
}
}
}
......@@ -345,7 +296,6 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
abort();
}
NR_UE_MAC_INST_t *UE_mac = get_mac_inst(0);
for (int i = 0; i < num_pdus; i++)
{
nfapi_nr_ul_dci_request_pdus_t *pdu_list = &ul_dci_req->ul_dci_pdu_list[i];
......@@ -371,13 +321,6 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
}
dl_info->dci_ind->dci_list[j].payloadSize = dci_pdu_list->PayloadSizeBits;
dl_info->dci_ind->dci_list[j].rnti = dci_pdu_list->RNTI;
if (dci_pdu_list->PayloadSizeBits == 37) //Melissa: hack. This size is for RAR
dl_info->dci_ind->dci_list[j].dci_format = 0;
if (dci_pdu_list->PayloadSizeBits == 40) //Melissa: hack. This size is for UL_DCI
dl_info->dci_ind->dci_list[j].dci_format = 7;
if (dci_pdu_list->PayloadSizeBits == 46) //Melissa: hack. This size is for DLSCH
dl_info->dci_ind->dci_list[j].dci_format = 1;
//set_dci_format(&dl_info->dci_ind->dci_list[j], UE_mac);
}
}
}
......@@ -385,6 +328,53 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
dl_info->slot = ul_dci_req->Slot;
}
static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_config_request_t *dl_config)
{
if (!dl_ind->dci_ind)
{
return;
}
AssertFatal(dl_config->number_pdus < sizeof(dl_config->dl_config_list) / sizeof(dl_config->dl_config_list[0]),
"Too many dl_config pdus %d", dl_config->number_pdus);
for (int i = 0; i < dl_config->number_pdus; i++)
{
LOG_I(PHY, "In %s: filling DCI with a total of %d total DL PDUs (dl_config %p) \n",
__FUNCTION__, dl_config->number_pdus, dl_config);
fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15_dci = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15;
int num_dci_options = rel15_dci->num_dci_options;
if (num_dci_options <= 0)
{
LOG_I(NR_MAC, "num_dci_opts = %d for %dth pdu in dl_config_list\n", rel15_dci->num_dci_options, i);
}
AssertFatal(num_dci_options <= sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]),
"num_dci_options %d > dci_length_options array\n", num_dci_options);
AssertFatal(num_dci_options <= sizeof(rel15_dci->dci_format_options) / sizeof(rel15_dci->dci_format_options[0]),
"num_dci_options %d > dci_format_options array\n", num_dci_options);
for (int j = 0; j < num_dci_options; j++)
{
int num_dcis = dl_ind->dci_ind->number_of_dcis;
AssertFatal(num_dcis <= sizeof(dl_ind->dci_ind->dci_list) / sizeof(dl_ind->dci_ind->dci_list[0]),
"dl_config->number_pdus %d > dci_ind->dci_list array\n", num_dcis);
for (int k = 0; k < num_dcis; k++)
{
LOG_I(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n",
dl_ind->dci_ind->dci_list[k].payloadSize, j, rel15_dci->dci_length_options[j],
dl_ind->dci_ind->dci_list[k].dci_format, j, rel15_dci->dci_format_options[j]);
if (rel15_dci->dci_length_options[j] == dl_ind->dci_ind->dci_list[k].payloadSize)
{
dl_ind->dci_ind->dci_list[k].dci_format = rel15_dci->dci_format_options[j];
}
int CCEind = rel15_dci->CCE[j];
int L = rel15_dci->L[j];
dl_ind->dci_ind->dci_list[k].n_CCE = CCEind;
dl_ind->dci_ind->dci_list[k].N_CCE = L;
}
}
}
}
static void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
nfapi_nr_tx_data_request_t *tx_data_request,
nfapi_nr_ul_dci_request_t *ul_dci_request)
......@@ -395,27 +385,29 @@ static void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request,
return;
}
nr_downlink_indication_t dl_info;
memset(&dl_info, 0, sizeof(dl_info));
if (dl_tti_request)
{
LOG_I(NR_PHY, "[%d, %d] dl_tti_request\n", dl_tti_request->SFN, dl_tti_request->Slot);
copy_dl_tti_req_to_dl_info(&dl_info, dl_tti_request);
copy_dl_tti_req_to_dl_info(&mac->dl_info, dl_tti_request);
}
if (tx_data_request)
{
LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", tx_data_request->SFN, tx_data_request->Slot);
copy_tx_data_req_to_dl_info(&dl_info, tx_data_request);
copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request);
}
if (ul_dci_request)
{
LOG_I(NR_PHY, "[%d, %d] ul_dci_request\n", ul_dci_request->SFN, ul_dci_request->Slot);
copy_ul_dci_data_req_to_dl_info(&dl_info, ul_dci_request);
copy_ul_dci_data_req_to_dl_info(&mac->dl_info, ul_dci_request);
}
NR_UL_TIME_ALIGNMENT_t ul_time_alignment;
memset(&ul_time_alignment, 0, sizeof(ul_time_alignment));
nr_ue_dl_indication(&dl_info, &ul_time_alignment);
fill_dci_from_dl_config(&mac->dl_info, &mac->dl_config_request);
nr_ue_dl_indication(&mac->dl_info, &ul_time_alignment);
#if 0 //Melissa may want to free this
free(dl_info.dci_ind);
dl_info.dci_ind = NULL;
......
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