nr-ip-over-LTE: Modification to support both use cases: DLSCH phy-test scheduling (random data generation in every opportunity) AND DLSCH scheduling only when there is IP traffic arriving through the LTE stack (noS1 mode)
This commit is contained in:
@@ -33,6 +33,7 @@
|
|||||||
#include "mac_proto.h"
|
#include "mac_proto.h"
|
||||||
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
||||||
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
||||||
|
#include "targets/RT/USER/lte-softmodem.h"
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
|
|
||||||
/*Scheduling of DLSCH with associated DCI in common search space
|
/*Scheduling of DLSCH with associated DCI in common search space
|
||||||
@@ -171,6 +172,117 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int configure_fapi_dl_Tx(nfapi_nr_dl_config_request_body_t *dl_req,
|
||||||
|
nfapi_tx_request_pdu_t *TX_req,
|
||||||
|
nfapi_nr_config_request_t *cfg,
|
||||||
|
nfapi_nr_coreset_t* coreset,
|
||||||
|
nfapi_nr_search_space_t* search_space,
|
||||||
|
int16_t pdu_index){
|
||||||
|
|
||||||
|
nfapi_nr_dl_config_request_pdu_t *dl_config_dci_pdu;
|
||||||
|
nfapi_nr_dl_config_request_pdu_t *dl_config_dlsch_pdu;
|
||||||
|
int TBS;
|
||||||
|
uint16_t rnti = 0x1234;
|
||||||
|
int dl_carrier_bandwidth = cfg->rf_config.dl_carrier_bandwidth.value;
|
||||||
|
|
||||||
|
|
||||||
|
dl_config_dci_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
||||||
|
memset((void*)dl_config_dci_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
|
||||||
|
dl_config_dci_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DCI_DL_PDU_TYPE;
|
||||||
|
dl_config_dci_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dci_dl_pdu));
|
||||||
|
|
||||||
|
dl_config_dlsch_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu+1];
|
||||||
|
memset((void*)dl_config_dlsch_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
|
||||||
|
dl_config_dlsch_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DLSCH_PDU_TYPE;
|
||||||
|
dl_config_dlsch_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dlsch_pdu));
|
||||||
|
|
||||||
|
nfapi_nr_dl_config_dci_dl_pdu_rel15_t *pdu_rel15 = &dl_config_dci_pdu->dci_dl_pdu.dci_dl_pdu_rel15;
|
||||||
|
nfapi_nr_dl_config_pdcch_parameters_rel15_t *params_rel15 = &dl_config_dci_pdu->dci_dl_pdu.pdcch_params_rel15;
|
||||||
|
nfapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu_rel15 = &dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15;
|
||||||
|
|
||||||
|
dlsch_pdu_rel15->start_prb = 0;
|
||||||
|
dlsch_pdu_rel15->n_prb = 50;
|
||||||
|
dlsch_pdu_rel15->start_symbol = 2;
|
||||||
|
dlsch_pdu_rel15->nb_symbols = 9;
|
||||||
|
dlsch_pdu_rel15->rnti = rnti;
|
||||||
|
dlsch_pdu_rel15->nb_layers =1;
|
||||||
|
dlsch_pdu_rel15->nb_codewords = 1;
|
||||||
|
dlsch_pdu_rel15->mcs_idx = 9;
|
||||||
|
dlsch_pdu_rel15->ndi = 1;
|
||||||
|
dlsch_pdu_rel15->redundancy_version = 0;
|
||||||
|
|
||||||
|
nr_configure_dci_from_pdcch_config(params_rel15,
|
||||||
|
coreset,
|
||||||
|
search_space,
|
||||||
|
*cfg,
|
||||||
|
dl_carrier_bandwidth);
|
||||||
|
|
||||||
|
pdu_rel15->frequency_domain_assignment = get_RIV(dlsch_pdu_rel15->start_prb, dlsch_pdu_rel15->n_prb, cfg->rf_config.dl_carrier_bandwidth.value);
|
||||||
|
pdu_rel15->time_domain_assignment = 3; // row index used here instead of SLIV;
|
||||||
|
pdu_rel15->vrb_to_prb_mapping = 1;
|
||||||
|
pdu_rel15->mcs = 9;
|
||||||
|
pdu_rel15->tb_scaling = 1;
|
||||||
|
|
||||||
|
pdu_rel15->ra_preamble_index = 25;
|
||||||
|
pdu_rel15->format_indicator = 1;
|
||||||
|
pdu_rel15->ndi = 1;
|
||||||
|
pdu_rel15->rv = 0;
|
||||||
|
pdu_rel15->harq_pid = 0;
|
||||||
|
pdu_rel15->dai = 2;
|
||||||
|
pdu_rel15->tpc = 2;
|
||||||
|
pdu_rel15->pucch_resource_indicator = 7;
|
||||||
|
pdu_rel15->pdsch_to_harq_feedback_timing_indicator = 7;
|
||||||
|
|
||||||
|
LOG_I(MAC, "[gNB scheduler phytest] DCI type 1 payload: freq_alloc %d, time_alloc %d, vrb to prb %d, mcs %d tb_scaling %d ndi %d rv %d\n",
|
||||||
|
pdu_rel15->frequency_domain_assignment,
|
||||||
|
pdu_rel15->time_domain_assignment,
|
||||||
|
pdu_rel15->vrb_to_prb_mapping,
|
||||||
|
pdu_rel15->mcs,
|
||||||
|
pdu_rel15->tb_scaling,
|
||||||
|
pdu_rel15->ndi,
|
||||||
|
pdu_rel15->rv);
|
||||||
|
|
||||||
|
params_rel15->rnti = rnti;
|
||||||
|
params_rel15->rnti_type = NFAPI_NR_RNTI_C;
|
||||||
|
params_rel15->dci_format = NFAPI_NR_DL_DCI_FORMAT_1_0;
|
||||||
|
|
||||||
|
//params_rel15->aggregation_level = 1;
|
||||||
|
LOG_I(MAC, "DCI params: rnti %d, rnti_type %d, dci_format %d, config type %d\n \
|
||||||
|
coreset params: mux_pattern %d, n_rb %d, n_symb %d, rb_offset %d \n \
|
||||||
|
ss params : first symb %d, ss type %d\n",
|
||||||
|
params_rel15->rnti,
|
||||||
|
params_rel15->rnti_type,
|
||||||
|
params_rel15->config_type,
|
||||||
|
params_rel15->dci_format,
|
||||||
|
params_rel15->mux_pattern,
|
||||||
|
params_rel15->n_rb,
|
||||||
|
params_rel15->n_symb,
|
||||||
|
params_rel15->rb_offset,
|
||||||
|
params_rel15->first_symbol,
|
||||||
|
params_rel15->search_space_type);
|
||||||
|
nr_get_tbs(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
|
||||||
|
// Hardcode it for now
|
||||||
|
TBS = dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15.transport_block_size;
|
||||||
|
LOG_I(MAC, "DLSCH PDU: start PRB %d n_PRB %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS: %d\n",
|
||||||
|
dlsch_pdu_rel15->start_prb,
|
||||||
|
dlsch_pdu_rel15->n_prb,
|
||||||
|
dlsch_pdu_rel15->start_symbol,
|
||||||
|
dlsch_pdu_rel15->nb_symbols,
|
||||||
|
dlsch_pdu_rel15->nb_layers,
|
||||||
|
dlsch_pdu_rel15->nb_codewords,
|
||||||
|
dlsch_pdu_rel15->mcs_idx,
|
||||||
|
TBS);
|
||||||
|
|
||||||
|
dl_req->number_dci++;
|
||||||
|
dl_req->number_pdsch_rnti++;
|
||||||
|
dl_req->number_pdu+=2;
|
||||||
|
|
||||||
|
TX_req->pdu_length = dlsch_pdu_rel15->transport_block_size/8;
|
||||||
|
TX_req->pdu_index = pdu_index++;
|
||||||
|
TX_req->num_segments = 1;
|
||||||
|
|
||||||
|
return TBS/8; //Return TBS in bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
||||||
@@ -183,21 +295,19 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
gNB_MAC_INST *nr_mac = RC.nrmac[module_idP];
|
gNB_MAC_INST *nr_mac = RC.nrmac[module_idP];
|
||||||
//NR_COMMON_channels_t *cc = nr_mac->common_channels;
|
//NR_COMMON_channels_t *cc = nr_mac->common_channels;
|
||||||
nfapi_nr_dl_config_request_body_t *dl_req;
|
nfapi_nr_dl_config_request_body_t *dl_req;
|
||||||
nfapi_nr_dl_config_request_pdu_t *dl_config_dci_pdu;
|
|
||||||
nfapi_nr_dl_config_request_pdu_t *dl_config_dlsch_pdu;
|
|
||||||
nfapi_tx_request_pdu_t *TX_req;
|
nfapi_tx_request_pdu_t *TX_req;
|
||||||
|
|
||||||
nfapi_nr_config_request_t *cfg = &nr_mac->config[0];
|
|
||||||
uint16_t rnti = 0x1234;
|
uint16_t rnti = 0x1234;
|
||||||
|
|
||||||
|
nfapi_nr_config_request_t *cfg = &nr_mac->config[0];
|
||||||
|
|
||||||
uint16_t sfn_sf = frameP << 7 | slotP;
|
uint16_t sfn_sf = frameP << 7 | slotP;
|
||||||
int dl_carrier_bandwidth = cfg->rf_config.dl_carrier_bandwidth.value;
|
|
||||||
|
|
||||||
// everything here is hard-coded to 30 kHz
|
// everything here is hard-coded to 30 kHz
|
||||||
//int scs = get_dlscs(cfg);
|
//int scs = get_dlscs(cfg);
|
||||||
//int slots_per_frame = get_spf(cfg);
|
//int slots_per_frame = get_spf(cfg);
|
||||||
|
|
||||||
int TBS;
|
int TBS;
|
||||||
|
int TBS_bytes;
|
||||||
int lcid;
|
int lcid;
|
||||||
int ta_len = 0;
|
int ta_len = 0;
|
||||||
int header_length_total=0;
|
int header_length_total=0;
|
||||||
@@ -208,7 +318,7 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
int num_sdus = 0;
|
int num_sdus = 0;
|
||||||
unsigned char dlsch_buffer[MAX_DLSCH_PAYLOAD_BYTES];
|
unsigned char dlsch_buffer[MAX_DLSCH_PAYLOAD_BYTES];
|
||||||
int offset;
|
int offset;
|
||||||
int UE_id;
|
int UE_id = 0;
|
||||||
unsigned char sdu_lcids[NB_RB_MAX];
|
unsigned char sdu_lcids[NB_RB_MAX];
|
||||||
int padding = 0, post_padding = 0;
|
int padding = 0, post_padding = 0;
|
||||||
UE_list_t *UE_list = &nr_mac->UE_list;
|
UE_list_t *UE_list = &nr_mac->UE_list;
|
||||||
@@ -218,36 +328,22 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
|
|
||||||
|
|
||||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
memset(&DLSCH_pdu, 0, sizeof(DLSCH_pdu));
|
|
||||||
LOG_D(MAC, "Scheduling UE specific search space DCI type 1 for CC_id %d\n",CC_id);
|
|
||||||
|
|
||||||
nfapi_nr_coreset_t* coreset = &nr_mac->coreset[CC_id][1];
|
LOG_D(MAC, "Scheduling UE specific search space DCI type 1 for CC_id %d\n",CC_id);
|
||||||
nfapi_nr_search_space_t* search_space = &nr_mac->search_space[CC_id][1];
|
|
||||||
|
|
||||||
//Not sure if TA update procedures are required at this point. Maybe we can skip
|
dl_req = &nr_mac->DL_req[CC_id].dl_config_request_body;
|
||||||
//lines 326-337
|
TX_req = &nr_mac->TX_req[CC_id].tx_request_body.tx_pdu_list[nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus];
|
||||||
|
|
||||||
|
//The --NOS1 use case currently schedules DLSCH transmissions only when there is IP traffic arriving
|
||||||
|
//through the LTE stack
|
||||||
|
if (IS_SOFTMODEM_NOS1){
|
||||||
|
|
||||||
/*ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
memset(&DLSCH_pdu, 0, sizeof(DLSCH_pdu));
|
||||||
int ta_update;
|
|
||||||
if (ue_sched_ctl->ta_timer == 0) {
|
|
||||||
ta_update = ue_sched_ctl->ta_update;
|
|
||||||
// if we send TA then set timer to not send it for a while
|
|
||||||
if (ta_update != 31)
|
|
||||||
ue_sched_ctl->ta_timer = 20;
|
|
||||||
// reset ta_update
|
|
||||||
ue_sched_ctl->ta_update = 31;
|
|
||||||
} else {
|
|
||||||
ta_update = 31;
|
|
||||||
}
|
|
||||||
|
|
||||||
ta_len = (ta_update != 31) ? 2 : 0;*/
|
|
||||||
|
|
||||||
int ta_update = 31;
|
int ta_update = 31;
|
||||||
ta_len = 0;
|
ta_len = 0;
|
||||||
|
|
||||||
// Hardcode it for now
|
// Hardcode it for now
|
||||||
TBS = 6784;
|
TBS = 6784/8; //TBS in bytes
|
||||||
//nr_get_tbs(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
|
//nr_get_tbs(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
|
||||||
//TBS = dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15.transport_block_size;
|
//TBS = dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15.transport_block_size;
|
||||||
|
|
||||||
@@ -290,10 +386,7 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
//#endif
|
//#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
/* T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP),
|
|
||||||
T_INT(CC_id), T_INT(rnti), T_INT(frameP),
|
|
||||||
T_INT(subframeP), T_INT(harq_pid),
|
|
||||||
T_INT(lcid), T_INT(sdu_lengths[num_sdus]));*/
|
|
||||||
|
|
||||||
LOG_I(MAC,
|
LOG_I(MAC,
|
||||||
"[eNB %d][USER-PLANE DEFAULT DRB] Got %d bytes for DTCH %d \n",
|
"[eNB %d][USER-PLANE DEFAULT DRB] Got %d bytes for DTCH %d \n",
|
||||||
@@ -319,7 +412,7 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* last header does not have length field */
|
// last header does not have length field
|
||||||
if (header_length_total) {
|
if (header_length_total) {
|
||||||
header_length_total -= header_length_last;
|
header_length_total -= header_length_last;
|
||||||
header_length_total++;
|
header_length_total++;
|
||||||
@@ -337,15 +430,6 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
post_padding = 1;
|
post_padding = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since we do not have an active UE_list for now we replace with a single DLSCH_pdu
|
|
||||||
/*offset = generate_dlsch_header((unsigned char *) UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
|
||||||
num_sdus, //num_sdus
|
|
||||||
sdu_lengths, //
|
|
||||||
sdu_lcids, 255, // no drx
|
|
||||||
ta_update, // timing advance
|
|
||||||
NULL, // contention res id
|
|
||||||
padding, post_padding);*/
|
|
||||||
|
|
||||||
offset = generate_dlsch_header((unsigned char *) DLSCH_pdu.payload[0],
|
offset = generate_dlsch_header((unsigned char *) DLSCH_pdu.payload[0],
|
||||||
num_sdus, //num_sdus
|
num_sdus, //num_sdus
|
||||||
sdu_lengths, //
|
sdu_lengths, //
|
||||||
@@ -369,135 +453,46 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|||||||
DLSCH_pdu.payload[0][offset + sdu_length_total + j] = 0;
|
DLSCH_pdu.payload[0][offset + sdu_length_total + j] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl_req = &nr_mac->DL_req[CC_id].dl_config_request_body;
|
TBS_bytes = configure_fapi_dl_Tx(dl_req, TX_req, cfg, &nr_mac->coreset[CC_id][1], &nr_mac->search_space[CC_id][1], nr_mac->pdu_index[CC_id]);
|
||||||
dl_config_dci_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
|
||||||
memset((void*)dl_config_dci_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
|
|
||||||
dl_config_dci_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DCI_DL_PDU_TYPE;
|
|
||||||
dl_config_dci_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dci_dl_pdu));
|
|
||||||
|
|
||||||
dl_config_dlsch_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu+1];
|
memcpy(nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0],DLSCH_pdu.payload[0],TBS_bytes);
|
||||||
memset((void*)dl_config_dlsch_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
|
|
||||||
dl_config_dlsch_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DLSCH_PDU_TYPE;
|
|
||||||
dl_config_dlsch_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dlsch_pdu));
|
|
||||||
|
|
||||||
nfapi_nr_dl_config_dci_dl_pdu_rel15_t *pdu_rel15 = &dl_config_dci_pdu->dci_dl_pdu.dci_dl_pdu_rel15;
|
LOG_I(MAC, "Printing payload bytes at the gNB side: \n");
|
||||||
nfapi_nr_dl_config_pdcch_parameters_rel15_t *params_rel15 = &dl_config_dci_pdu->dci_dl_pdu.pdcch_params_rel15;
|
for(int i = 0; i < TBS_bytes; i++) { //dlsch_pdu_rel15->transport_block_size/8 6784/8
|
||||||
nfapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu_rel15 = &dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15;
|
LOG_I(MAC, "%x. ", ((uint8_t *)nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0])[i]);
|
||||||
|
}
|
||||||
|
|
||||||
dlsch_pdu_rel15->start_prb = 0;
|
//TX_req->segments[0].segment_length = 8;
|
||||||
dlsch_pdu_rel15->n_prb = 50;
|
TX_req->segments[0].segment_length = TBS_bytes +2;
|
||||||
dlsch_pdu_rel15->start_symbol = 2;
|
TX_req->segments[0].segment_data = nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0];
|
||||||
dlsch_pdu_rel15->nb_symbols = 9;
|
|
||||||
dlsch_pdu_rel15->rnti = rnti;
|
|
||||||
dlsch_pdu_rel15->nb_layers =1;
|
|
||||||
dlsch_pdu_rel15->nb_codewords = 1;
|
|
||||||
dlsch_pdu_rel15->mcs_idx = 9;
|
|
||||||
dlsch_pdu_rel15->ndi = 1;
|
|
||||||
dlsch_pdu_rel15->redundancy_version = 0;
|
|
||||||
|
|
||||||
nr_configure_dci_from_pdcch_config(params_rel15,
|
|
||||||
coreset,
|
|
||||||
search_space,
|
|
||||||
*cfg,
|
|
||||||
dl_carrier_bandwidth);
|
|
||||||
|
|
||||||
pdu_rel15->frequency_domain_assignment = get_RIV(dlsch_pdu_rel15->start_prb, dlsch_pdu_rel15->n_prb, cfg->rf_config.dl_carrier_bandwidth.value);
|
|
||||||
pdu_rel15->time_domain_assignment = 3; // row index used here instead of SLIV;
|
|
||||||
pdu_rel15->vrb_to_prb_mapping = 1;
|
|
||||||
pdu_rel15->mcs = 9;
|
|
||||||
pdu_rel15->tb_scaling = 1;
|
|
||||||
|
|
||||||
pdu_rel15->ra_preamble_index = 25;
|
|
||||||
pdu_rel15->format_indicator = 1;
|
|
||||||
pdu_rel15->ndi = 1;
|
|
||||||
pdu_rel15->rv = 0;
|
|
||||||
pdu_rel15->harq_pid = 0;
|
|
||||||
pdu_rel15->dai = 2;
|
|
||||||
pdu_rel15->tpc = 2;
|
|
||||||
pdu_rel15->pucch_resource_indicator = 7;
|
|
||||||
pdu_rel15->pdsch_to_harq_feedback_timing_indicator = 7;
|
|
||||||
|
|
||||||
LOG_I(MAC, "[gNB scheduler phytest] DCI type 1 payload: freq_alloc %d, time_alloc %d, vrb to prb %d, mcs %d tb_scaling %d ndi %d rv %d\n",
|
|
||||||
pdu_rel15->frequency_domain_assignment,
|
|
||||||
pdu_rel15->time_domain_assignment,
|
|
||||||
pdu_rel15->vrb_to_prb_mapping,
|
|
||||||
pdu_rel15->mcs,
|
|
||||||
pdu_rel15->tb_scaling,
|
|
||||||
pdu_rel15->ndi,
|
|
||||||
pdu_rel15->rv);
|
|
||||||
|
|
||||||
params_rel15->rnti = rnti;
|
|
||||||
params_rel15->rnti_type = NFAPI_NR_RNTI_C;
|
|
||||||
params_rel15->dci_format = NFAPI_NR_DL_DCI_FORMAT_1_0;
|
|
||||||
|
|
||||||
//params_rel15->aggregation_level = 1;
|
|
||||||
LOG_I(MAC, "DCI params: rnti %d, rnti_type %d, dci_format %d, config type %d\n \
|
|
||||||
coreset params: mux_pattern %d, n_rb %d, n_symb %d, rb_offset %d \n \
|
|
||||||
ss params : first symb %d, ss type %d\n",
|
|
||||||
params_rel15->rnti,
|
|
||||||
params_rel15->rnti_type,
|
|
||||||
params_rel15->config_type,
|
|
||||||
params_rel15->dci_format,
|
|
||||||
params_rel15->mux_pattern,
|
|
||||||
params_rel15->n_rb,
|
|
||||||
params_rel15->n_symb,
|
|
||||||
params_rel15->rb_offset,
|
|
||||||
params_rel15->first_symbol,
|
|
||||||
params_rel15->search_space_type);
|
|
||||||
nr_get_tbs(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
|
|
||||||
// Hardcode it for now
|
|
||||||
TBS = dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15.transport_block_size;
|
|
||||||
LOG_I(MAC, "DLSCH PDU: start PRB %d n_PRB %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS: %d\n",
|
|
||||||
dlsch_pdu_rel15->start_prb,
|
|
||||||
dlsch_pdu_rel15->n_prb,
|
|
||||||
dlsch_pdu_rel15->start_symbol,
|
|
||||||
dlsch_pdu_rel15->nb_symbols,
|
|
||||||
dlsch_pdu_rel15->nb_layers,
|
|
||||||
dlsch_pdu_rel15->nb_codewords,
|
|
||||||
dlsch_pdu_rel15->mcs_idx,
|
|
||||||
TBS);
|
|
||||||
|
|
||||||
dl_req->number_dci++;
|
|
||||||
dl_req->number_pdsch_rnti++;
|
|
||||||
dl_req->number_pdu+=2;
|
|
||||||
|
|
||||||
TX_req = &nr_mac->TX_req[CC_id].tx_request_body.tx_pdu_list[nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus];
|
|
||||||
TX_req->pdu_length = dlsch_pdu_rel15->transport_block_size;
|
|
||||||
TX_req->pdu_index = nr_mac->pdu_index[CC_id]++;
|
|
||||||
TX_req->num_segments = 1;
|
|
||||||
|
|
||||||
// HOT FIX for all zero pdu problem
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
/*for(int i = 0; i < dlsch_pdu_rel15->transport_block_size/8; i++) {
|
nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||||
((uint8_t *)nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0])[i] = (unsigned char) rand();
|
nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
|
||||||
printf("%d : %d \n", i, ((uint8_t *)nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0])[i]);
|
nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
||||||
}*/
|
nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||||
// ------------------------------------------------------------------------------------------------
|
} //if (ta_len + sdu_length_total + header_length_total > 0)
|
||||||
|
} //if (IS_SOFTMODEM_NOS1)
|
||||||
|
|
||||||
|
//When the --NOS1 option is not enabled, DLSCH transmissions with random data
|
||||||
|
//occur every time that the current function is called (dlsch phytest mode)
|
||||||
|
else{
|
||||||
|
TBS_bytes = configure_fapi_dl_Tx(dl_req, TX_req, cfg, &nr_mac->coreset[CC_id][1], &nr_mac->search_space[CC_id][1], nr_mac->pdu_index[CC_id]);
|
||||||
|
// HOT FIX for all zero pdu problem
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
for(int i = 0; i < TBS_bytes; i++) {
|
||||||
|
((uint8_t *)nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0])[i] = (unsigned char) rand();
|
||||||
|
LOG_I(MAC, "%x. ", ((uint8_t *)nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0])[i]);
|
||||||
|
}
|
||||||
|
//TX_req->segments[0].segment_length = 8;
|
||||||
|
TX_req->segments[0].segment_length = TBS_bytes +2;
|
||||||
|
TX_req->segments[0].segment_data = nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0];
|
||||||
|
|
||||||
memcpy(nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0],DLSCH_pdu.payload[0],TBS/8);
|
nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||||
|
nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
|
||||||
LOG_I(MAC, "Printing payload bytes at the gNB side: \n");
|
nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
||||||
for(int i = 0; i < dlsch_pdu_rel15->transport_block_size/8; i++) {
|
nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||||
printf("%d : %x \n", i, ((uint8_t *)nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0])[i]);
|
// ------------------------------------------------------------------------------------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
//TX_req->segments[0].segment_length = 8;
|
|
||||||
TX_req->segments[0].segment_length = dlsch_pdu_rel15->transport_block_size+2;
|
|
||||||
TX_req->segments[0].segment_data = nr_mac->UE_list.DLSCH_pdu[CC_id][0][0].payload[0];
|
|
||||||
|
|
||||||
|
|
||||||
nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
|
||||||
nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
|
|
||||||
nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
|
||||||
nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
|
||||||
|
|
||||||
} //if (ta_len + sdu_length_total + header_length_total > 0)
|
|
||||||
|
|
||||||
|
|
||||||
//} //for (UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id])
|
|
||||||
} //for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
|
} //for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,13 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP,
|
|||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP);
|
sub_frame_t subframeP);
|
||||||
|
|
||||||
|
int configure_fapi_dl_Tx(nfapi_nr_dl_config_request_body_t *dl_req,
|
||||||
|
nfapi_tx_request_pdu_t *TX_req,
|
||||||
|
nfapi_nr_config_request_t *cfg,
|
||||||
|
nfapi_nr_coreset_t* coreset,
|
||||||
|
nfapi_nr_search_space_t* search_space,
|
||||||
|
int16_t pdu_index);
|
||||||
|
|
||||||
void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t slotP);
|
sub_frame_t slotP);
|
||||||
|
|||||||
Reference in New Issue
Block a user