Remove commented/unused code in DLSCH/phytest scheduler
This commit is contained in:
@@ -483,9 +483,6 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
|||||||
&& (is_xlsch_in_slot(dlsch_in_slot_bitmap, slot % num_slots_per_tdd))
|
&& (is_xlsch_in_slot(dlsch_in_slot_bitmap, slot % num_slots_per_tdd))
|
||||||
&& slot < 10) {
|
&& slot < 10) {
|
||||||
ue_sched_ctl->current_harq_pid = slot % num_slots_per_tdd;
|
ue_sched_ctl->current_harq_pid = slot % num_slots_per_tdd;
|
||||||
//int pucch_sched;
|
|
||||||
//nr_update_pucch_scheduling(module_idP, UE_id, frame, slot, num_slots_per_tdd,&pucch_sched);
|
|
||||||
//nr_schedule_uss_dlsch_phytest(module_idP, frame, slot, &UE_info->UE_sched_ctrl[UE_id].sched_pucch[pucch_sched], NULL);
|
|
||||||
nr_schedule_ue_spec(module_idP, frame, slot, num_slots_per_tdd);
|
nr_schedule_ue_spec(module_idP, frame, slot, num_slots_per_tdd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -785,8 +785,6 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
header_length_last = 1 + 1 + (sdu_lengths[num_sdus] >= 128);
|
header_length_last = 1 + 1 + (sdu_lengths[num_sdus] >= 128);
|
||||||
header_length_total += header_length_last;
|
header_length_total += header_length_last;
|
||||||
num_sdus++;
|
num_sdus++;
|
||||||
|
|
||||||
//ue_sched_ctl->uplane_inactivity_timer = 0;
|
|
||||||
}
|
}
|
||||||
else if (get_softmodem_params()->phy_test) {
|
else if (get_softmodem_params()->phy_test) {
|
||||||
LOG_D(MAC, "Configuring DL_TX in %d.%d: random data\n", frame, slot);
|
LOG_D(MAC, "Configuring DL_TX in %d.%d: random data\n", frame, slot);
|
||||||
@@ -803,10 +801,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
UE_info->mac_stats[UE_id].dlsch_total_bytes += TBS;
|
UE_info->mac_stats[UE_id].dlsch_total_bytes += TBS;
|
||||||
UE_info->mac_stats[UE_id].lc_bytes_tx[lcid] += sdu_length_total;
|
UE_info->mac_stats[UE_id].lc_bytes_tx[lcid] += sdu_length_total;
|
||||||
|
|
||||||
// Check if there is data from RLC or CE
|
|
||||||
const int post_padding = TBS >= 2 + header_length_total + sdu_length_total + ta_len;
|
const int post_padding = TBS >= 2 + header_length_total + sdu_length_total + ta_len;
|
||||||
// padding param currently not in use
|
|
||||||
//padding = TBS - header_length_total - sdu_length_total - ta_len - 1;
|
|
||||||
|
|
||||||
const int ntx_req = gNB_mac->TX_req[CC_id].Number_of_PDUs;
|
const int ntx_req = gNB_mac->TX_req[CC_id].Number_of_PDUs;
|
||||||
nfapi_nr_pdu_t *tx_req = &gNB_mac->TX_req[CC_id].pdu_list[ntx_req];
|
nfapi_nr_pdu_t *tx_req = &gNB_mac->TX_req[CC_id].pdu_list[ntx_req];
|
||||||
|
|||||||
@@ -352,241 +352,6 @@ void nr_preprocessor_phytest(module_id_t module_id,
|
|||||||
vrb_map[rb + sched_ctrl->rbStart] = 1;
|
vrb_map[rb + sched_ctrl->rbStart] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int configure_fapi_dl_pdu_phytest(int Mod_idP,
|
|
||||||
nfapi_nr_dl_tti_request_body_t *dl_req,
|
|
||||||
NR_sched_pucch *pucch_sched,
|
|
||||||
uint8_t *mcsIndex,
|
|
||||||
uint16_t *rbSize,
|
|
||||||
uint16_t *rbStart) {
|
|
||||||
gNB_MAC_INST *nr_mac = RC.nrmac[Mod_idP];
|
|
||||||
NR_COMMON_channels_t *cc = nr_mac->common_channels;
|
|
||||||
NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon;
|
|
||||||
|
|
||||||
nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdcch_pdu;
|
|
||||||
nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdsch_pdu;
|
|
||||||
|
|
||||||
int TBS;
|
|
||||||
int bwp_id=1;
|
|
||||||
int UE_id = 0;
|
|
||||||
|
|
||||||
NR_UE_info_t *UE_info = &RC.nrmac[Mod_idP]->UE_info;
|
|
||||||
|
|
||||||
NR_CellGroupConfig_t *secondaryCellGroup = UE_info->secondaryCellGroup[UE_id];
|
|
||||||
AssertFatal(secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count == 1,
|
|
||||||
"downlinkBWP_ToAddModList has %d BWP!\n",
|
|
||||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count);
|
|
||||||
NR_BWP_Downlink_t *bwp=secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[bwp_id-1];
|
|
||||||
|
|
||||||
AssertFatal(bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList!=NULL,"searchPsacesToAddModList is null\n");
|
|
||||||
AssertFatal(bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list.count>0,
|
|
||||||
"searchPsacesToAddModList is empty\n");
|
|
||||||
|
|
||||||
dl_tti_pdcch_pdu = &dl_req->dl_tti_pdu_list[dl_req->nPDUs];
|
|
||||||
memset((void*)dl_tti_pdcch_pdu,0,sizeof(nfapi_nr_dl_tti_request_pdu_t));
|
|
||||||
dl_tti_pdcch_pdu->PDUType = NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE;
|
|
||||||
dl_tti_pdcch_pdu->PDUSize = (uint8_t)(2+sizeof(nfapi_nr_dl_tti_pdcch_pdu));
|
|
||||||
|
|
||||||
dl_tti_pdsch_pdu = &dl_req->dl_tti_pdu_list[dl_req->nPDUs+1];
|
|
||||||
memset((void*)dl_tti_pdsch_pdu,0,sizeof(nfapi_nr_dl_tti_request_pdu_t));
|
|
||||||
dl_tti_pdsch_pdu->PDUType = NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE;
|
|
||||||
dl_tti_pdsch_pdu->PDUSize = (uint8_t)(2+sizeof(nfapi_nr_dl_tti_pdsch_pdu));
|
|
||||||
|
|
||||||
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &dl_tti_pdcch_pdu->pdcch_pdu.pdcch_pdu_rel15;
|
|
||||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = &dl_tti_pdsch_pdu->pdsch_pdu.pdsch_pdu_rel15;
|
|
||||||
|
|
||||||
|
|
||||||
pdsch_pdu_rel15->pduBitmap = 0;
|
|
||||||
pdsch_pdu_rel15->rnti = UE_info->rnti[UE_id];
|
|
||||||
pdsch_pdu_rel15->pduIndex = 0;
|
|
||||||
|
|
||||||
// BWP
|
|
||||||
pdsch_pdu_rel15->BWPSize = NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth,275);
|
|
||||||
pdsch_pdu_rel15->BWPStart = NRRIV2PRBOFFSET(bwp->bwp_Common->genericParameters.locationAndBandwidth,275);
|
|
||||||
pdsch_pdu_rel15->SubcarrierSpacing = bwp->bwp_Common->genericParameters.subcarrierSpacing;
|
|
||||||
if (bwp->bwp_Common->genericParameters.cyclicPrefix) pdsch_pdu_rel15->CyclicPrefix = *bwp->bwp_Common->genericParameters.cyclicPrefix;
|
|
||||||
else pdsch_pdu_rel15->CyclicPrefix=0;
|
|
||||||
|
|
||||||
pdsch_pdu_rel15->NrOfCodewords = 1;
|
|
||||||
int mcs = (mcsIndex!=NULL) ? *mcsIndex : 9;
|
|
||||||
int current_harq_pid = UE_info->UE_sched_ctrl[UE_id].current_harq_pid;
|
|
||||||
pdsch_pdu_rel15->targetCodeRate[0] = nr_get_code_rate_dl(mcs,0);
|
|
||||||
pdsch_pdu_rel15->qamModOrder[0] = 2;
|
|
||||||
pdsch_pdu_rel15->mcsIndex[0] = mcs;
|
|
||||||
pdsch_pdu_rel15->mcsTable[0] = 0;
|
|
||||||
pdsch_pdu_rel15->rvIndex[0] = nr_rv_round_map[UE_info->UE_sched_ctrl[UE_id].harq_processes[current_harq_pid].round];
|
|
||||||
pdsch_pdu_rel15->dataScramblingId = *scc->physCellId;
|
|
||||||
pdsch_pdu_rel15->nrOfLayers = 1;
|
|
||||||
pdsch_pdu_rel15->transmissionScheme = 0;
|
|
||||||
pdsch_pdu_rel15->refPoint = 0; // Point A
|
|
||||||
UE_info->mac_stats[UE_id].dlsch_rounds[UE_info->UE_sched_ctrl[UE_id].harq_processes[current_harq_pid].round]++;
|
|
||||||
pdsch_pdu_rel15->dmrsConfigType = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? 0 : 1;
|
|
||||||
pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId;
|
|
||||||
pdsch_pdu_rel15->SCID = 0;
|
|
||||||
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = 1;
|
|
||||||
pdsch_pdu_rel15->dmrsPorts = 1;
|
|
||||||
pdsch_pdu_rel15->resourceAlloc = 1;
|
|
||||||
pdsch_pdu_rel15->rbStart = (rbStart!=NULL) ? *rbStart : 0;
|
|
||||||
pdsch_pdu_rel15->rbSize = (rbSize!=NULL) ? *rbSize : pdsch_pdu_rel15->BWPSize;
|
|
||||||
pdsch_pdu_rel15->VRBtoPRBMapping = 1; // non-interleaved, check if this is ok for initialBWP
|
|
||||||
|
|
||||||
int startSymbolAndLength=0;
|
|
||||||
int time_domain_assignment=2;
|
|
||||||
int StartSymbolIndex,NrOfSymbols;
|
|
||||||
|
|
||||||
AssertFatal(time_domain_assignment<bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count,"time_domain_assignment %d>=%d\n",time_domain_assignment,bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count);
|
|
||||||
startSymbolAndLength = bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[time_domain_assignment]->startSymbolAndLength;
|
|
||||||
SLIV2SL(startSymbolAndLength,&StartSymbolIndex,&NrOfSymbols);
|
|
||||||
pdsch_pdu_rel15->StartSymbolIndex = StartSymbolIndex;
|
|
||||||
pdsch_pdu_rel15->NrOfSymbols = NrOfSymbols;
|
|
||||||
|
|
||||||
// k0 = *bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->k0;
|
|
||||||
pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup,
|
|
||||||
scc->dmrs_TypeA_Position,
|
|
||||||
pdsch_pdu_rel15->NrOfSymbols);
|
|
||||||
|
|
||||||
dci_pdu_rel15_t *dci_pdu_rel15 = calloc(MAX_DCI_CORESET,sizeof(dci_pdu_rel15_t));
|
|
||||||
|
|
||||||
// bwp indicator
|
|
||||||
int n_dl_bwp = secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count;
|
|
||||||
if (n_dl_bwp < 4)
|
|
||||||
dci_pdu_rel15[0].bwp_indicator.val = bwp_id;
|
|
||||||
else
|
|
||||||
dci_pdu_rel15[0].bwp_indicator.val = bwp_id - 1; // as per table 7.3.1.1.2-1 in 38.212
|
|
||||||
// frequency domain assignment
|
|
||||||
if (bwp->bwp_Dedicated->pdsch_Config->choice.setup->resourceAllocation==NR_PDSCH_Config__resourceAllocation_resourceAllocationType1)
|
|
||||||
dci_pdu_rel15[0].frequency_domain_assignment.val = PRBalloc_to_locationandbandwidth0(pdsch_pdu_rel15->rbSize,
|
|
||||||
pdsch_pdu_rel15->rbStart,
|
|
||||||
NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth,275));
|
|
||||||
else
|
|
||||||
AssertFatal(1==0,"Only frequency resource allocation type 1 is currently supported\n");
|
|
||||||
// time domain assignment
|
|
||||||
dci_pdu_rel15[0].time_domain_assignment.val = time_domain_assignment; // row index used here instead of SLIV;
|
|
||||||
// mcs and rv
|
|
||||||
dci_pdu_rel15[0].mcs = pdsch_pdu_rel15->mcsIndex[0];
|
|
||||||
dci_pdu_rel15[0].rv = pdsch_pdu_rel15->rvIndex[0];
|
|
||||||
// harq pid and ndi
|
|
||||||
dci_pdu_rel15[0].harq_pid = current_harq_pid;
|
|
||||||
dci_pdu_rel15[0].ndi = UE_info->UE_sched_ctrl[UE_id].harq_processes[current_harq_pid].ndi;
|
|
||||||
// DAI
|
|
||||||
dci_pdu_rel15[0].dai[0].val = (pucch_sched->dai_c-1)&3;
|
|
||||||
// TPC for PUCCH
|
|
||||||
dci_pdu_rel15[0].tpc = UE_info->UE_sched_ctrl[UE_id].tpc1; // table 7.2.1-1 in 38.213
|
|
||||||
// PUCCH resource indicator
|
|
||||||
dci_pdu_rel15[0].pucch_resource_indicator = pucch_sched->resource_indicator;
|
|
||||||
// PDSCH to HARQ TI
|
|
||||||
dci_pdu_rel15[0].pdsch_to_harq_feedback_timing_indicator.val = pucch_sched->timing_indicator;
|
|
||||||
UE_info->UE_sched_ctrl[UE_id].harq_processes[current_harq_pid].feedback_slot = pucch_sched->ul_slot;
|
|
||||||
UE_info->UE_sched_ctrl[UE_id].harq_processes[current_harq_pid].is_waiting = 1;
|
|
||||||
// antenna ports
|
|
||||||
dci_pdu_rel15[0].antenna_ports.val = 0; // nb of cdm groups w/o data 1 and dmrs port 0
|
|
||||||
// dmrs sequence initialization
|
|
||||||
dci_pdu_rel15[0].dmrs_sequence_initialization.val = pdsch_pdu_rel15->SCID;
|
|
||||||
LOG_D(MAC, "[gNB scheduler phytest] DCI type 1 payload: freq_alloc %d (%d,%d,%d), time_alloc %d, vrb to prb %d, mcs %d tb_scaling %d ndi %d rv %d\n",
|
|
||||||
dci_pdu_rel15[0].frequency_domain_assignment.val,
|
|
||||||
pdsch_pdu_rel15->rbStart,
|
|
||||||
pdsch_pdu_rel15->rbSize,
|
|
||||||
NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth,275),
|
|
||||||
dci_pdu_rel15[0].time_domain_assignment.val,
|
|
||||||
dci_pdu_rel15[0].vrb_to_prb_mapping.val,
|
|
||||||
dci_pdu_rel15[0].mcs,
|
|
||||||
dci_pdu_rel15[0].tb_scaling,
|
|
||||||
dci_pdu_rel15[0].ndi,
|
|
||||||
dci_pdu_rel15[0].rv);
|
|
||||||
|
|
||||||
NR_SearchSpace_t *ss;
|
|
||||||
int target_ss = NR_SearchSpace__searchSpaceType_PR_ue_Specific;
|
|
||||||
|
|
||||||
AssertFatal(bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList!=NULL,"searchPsacesToAddModList is null\n");
|
|
||||||
AssertFatal(bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list.count>0,
|
|
||||||
"searchPsacesToAddModList is empty\n");
|
|
||||||
|
|
||||||
int found=0;
|
|
||||||
|
|
||||||
for (int i=0;i<bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list.count;i++) {
|
|
||||||
ss=bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list.array[i];
|
|
||||||
AssertFatal(ss->controlResourceSetId != NULL,"ss->controlResourceSetId is null\n");
|
|
||||||
AssertFatal(ss->searchSpaceType != NULL,"ss->searchSpaceType is null\n");
|
|
||||||
if (ss->searchSpaceType->present == target_ss) {
|
|
||||||
found=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AssertFatal(found==1,"Couldn't find an adequate searchspace\n");
|
|
||||||
|
|
||||||
uint8_t nr_of_candidates, aggregation_level;
|
|
||||||
find_aggregation_candidates(&aggregation_level, &nr_of_candidates, ss);
|
|
||||||
NR_ControlResourceSet_t *coreset = get_coreset(bwp, ss, 1 /* dedicated */);
|
|
||||||
const int cid = coreset->controlResourceSetId;
|
|
||||||
const uint16_t Y = UE_info->Y[UE_id][cid][nr_mac->current_slot];
|
|
||||||
const int m = UE_info->num_pdcch_cand[UE_id][cid];
|
|
||||||
int CCEIndex = allocate_nr_CCEs(nr_mac,
|
|
||||||
bwp,
|
|
||||||
coreset,
|
|
||||||
aggregation_level,
|
|
||||||
Y,
|
|
||||||
m,
|
|
||||||
nr_of_candidates);
|
|
||||||
if (CCEIndex < 0) {
|
|
||||||
LOG_E(MAC, "%s(): CCE list not empty, couldn't schedule PDSCH\n", __func__);
|
|
||||||
free(dci_pdu_rel15);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
UE_info->num_pdcch_cand[UE_id][cid]++;
|
|
||||||
|
|
||||||
nr_configure_pdcch(nr_mac,
|
|
||||||
pdcch_pdu_rel15,
|
|
||||||
UE_info->rnti[UE_id],
|
|
||||||
ss,
|
|
||||||
coreset,
|
|
||||||
scc,
|
|
||||||
bwp,
|
|
||||||
aggregation_level,
|
|
||||||
CCEIndex);
|
|
||||||
|
|
||||||
int dci_formats[2];
|
|
||||||
int rnti_types[2];
|
|
||||||
|
|
||||||
if (ss->searchSpaceType->choice.ue_Specific->dci_Formats)
|
|
||||||
dci_formats[0] = NR_DL_DCI_FORMAT_1_1;
|
|
||||||
else
|
|
||||||
dci_formats[0] = NR_DL_DCI_FORMAT_1_0;
|
|
||||||
|
|
||||||
rnti_types[0] = NR_RNTI_C;
|
|
||||||
|
|
||||||
fill_dci_pdu_rel15(scc,secondaryCellGroup,pdcch_pdu_rel15,dci_pdu_rel15,dci_formats,rnti_types,pdsch_pdu_rel15->BWPSize,bwp_id);
|
|
||||||
|
|
||||||
LOG_D(MAC, "DCI params: rnti %x, rnti_type %d, dci_format %d\n \
|
|
||||||
coreset params: FreqDomainResource %llx, start_symbol %d n_symb %d\n",
|
|
||||||
pdcch_pdu_rel15->dci_pdu.RNTI[0],
|
|
||||||
rnti_types[0],
|
|
||||||
dci_formats[0],
|
|
||||||
(unsigned long long)pdcch_pdu_rel15->FreqDomainResource,
|
|
||||||
pdcch_pdu_rel15->StartSymbolIndex,
|
|
||||||
pdcch_pdu_rel15->DurationSymbols);
|
|
||||||
|
|
||||||
int x_Overhead = 0; // should be 0 for initialBWP
|
|
||||||
nr_get_tbs_dl(&dl_tti_pdsch_pdu->pdsch_pdu,x_Overhead,pdsch_pdu_rel15->numDmrsCdmGrpsNoData,0);
|
|
||||||
|
|
||||||
// Hardcode it for now
|
|
||||||
TBS = dl_tti_pdsch_pdu->pdsch_pdu.pdsch_pdu_rel15.TBSize[0];
|
|
||||||
if (UE_info->UE_sched_ctrl[UE_id].harq_processes[current_harq_pid].round==0)
|
|
||||||
UE_info->mac_stats[UE_id].dlsch_total_bytes += TBS;
|
|
||||||
|
|
||||||
LOG_D(MAC, "DLSCH PDU: start PRB %d n_PRB %d startSymbolAndLength %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS: %d\n",
|
|
||||||
pdsch_pdu_rel15->rbStart,
|
|
||||||
pdsch_pdu_rel15->rbSize,
|
|
||||||
startSymbolAndLength,
|
|
||||||
pdsch_pdu_rel15->StartSymbolIndex,
|
|
||||||
pdsch_pdu_rel15->NrOfSymbols,
|
|
||||||
pdsch_pdu_rel15->nrOfLayers,
|
|
||||||
pdsch_pdu_rel15->NrOfCodewords,
|
|
||||||
pdsch_pdu_rel15->mcsIndex[0],
|
|
||||||
TBS);
|
|
||||||
|
|
||||||
free(dci_pdu_rel15);
|
|
||||||
return TBS; //Return TBS in bytes
|
|
||||||
}
|
|
||||||
|
|
||||||
void config_uldci(NR_BWP_Uplink_t *ubwp,
|
void config_uldci(NR_BWP_Uplink_t *ubwp,
|
||||||
nfapi_nr_pusch_pdu_t *pusch_pdu,
|
nfapi_nr_pusch_pdu_t *pusch_pdu,
|
||||||
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15,
|
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15,
|
||||||
@@ -663,231 +428,6 @@ void config_uldci(NR_BWP_Uplink_t *ubwp,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void configure_fapi_dl_Tx(module_id_t Mod_idP,
|
|
||||||
frame_t frameP,
|
|
||||||
sub_frame_t slotP,
|
|
||||||
nfapi_nr_dl_tti_request_body_t *dl_req,
|
|
||||||
nfapi_nr_pdu_t *tx_req,
|
|
||||||
int tbs_bytes,
|
|
||||||
int16_t pdu_index){
|
|
||||||
|
|
||||||
int CC_id = 0;
|
|
||||||
|
|
||||||
nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdsch_pdu = &dl_req->dl_tti_pdu_list[dl_req->nPDUs+1];
|
|
||||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = &dl_tti_pdsch_pdu->pdsch_pdu.pdsch_pdu_rel15;
|
|
||||||
gNB_MAC_INST *nr_mac = RC.nrmac[Mod_idP];
|
|
||||||
|
|
||||||
LOG_D(MAC, "DLSCH PDU: start PRB %d n_PRB %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS (bytes): %d\n",
|
|
||||||
pdsch_pdu_rel15->rbStart,
|
|
||||||
pdsch_pdu_rel15->rbSize,
|
|
||||||
pdsch_pdu_rel15->StartSymbolIndex,
|
|
||||||
pdsch_pdu_rel15->NrOfSymbols,
|
|
||||||
pdsch_pdu_rel15->nrOfLayers,
|
|
||||||
pdsch_pdu_rel15->NrOfCodewords,
|
|
||||||
pdsch_pdu_rel15->mcsIndex[0],
|
|
||||||
tbs_bytes);
|
|
||||||
|
|
||||||
dl_req->nPDUs+=2;
|
|
||||||
|
|
||||||
tx_req->PDU_length = pdsch_pdu_rel15->TBSize[0];
|
|
||||||
tx_req->PDU_index = nr_mac->pdu_index[0]++;
|
|
||||||
tx_req->num_TLV = 1;
|
|
||||||
tx_req->TLVs[0].length = tbs_bytes +2;
|
|
||||||
|
|
||||||
memcpy((void*)&tx_req->TLVs[0].value.direct[0], (void*)&nr_mac->UE_info.DLSCH_pdu[0][0].payload[0], tbs_bytes);
|
|
||||||
|
|
||||||
nr_mac->TX_req[CC_id].Number_of_PDUs++;
|
|
||||||
nr_mac->TX_req[CC_id].SFN = frameP;
|
|
||||||
nr_mac->TX_req[CC_id].Slot = slotP;
|
|
||||||
}
|
|
||||||
|
|
||||||
void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|
||||||
frame_t frameP,
|
|
||||||
sub_frame_t slotP,
|
|
||||||
NR_sched_pucch *pucch_sched,
|
|
||||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *dlsch_config){
|
|
||||||
|
|
||||||
LOG_D(MAC, "In nr_schedule_uss_dlsch_phytest frame %d slot %d\n",frameP,slotP);
|
|
||||||
|
|
||||||
int post_padding = 0, header_length_total = 0, sdu_length_total = 0, num_sdus = 0;
|
|
||||||
int lcid, offset, i, header_length_last, TBS_bytes = 0;
|
|
||||||
int UE_id = 0, CC_id = 0;
|
|
||||||
|
|
||||||
gNB_MAC_INST *gNB_mac = RC.nrmac[module_idP];
|
|
||||||
//NR_COMMON_channels_t *cc = nr_mac->common_channels;
|
|
||||||
//NR_ServingCellConfigCommon_t *scc=cc->ServingCellConfigCommon;
|
|
||||||
nfapi_nr_dl_tti_request_body_t *dl_req = &gNB_mac->DL_req[CC_id].dl_tti_request_body;
|
|
||||||
nfapi_nr_pdu_t *tx_req = &gNB_mac->TX_req[CC_id].pdu_list[gNB_mac->TX_req[CC_id].Number_of_PDUs];
|
|
||||||
|
|
||||||
mac_rlc_status_resp_t rlc_status;
|
|
||||||
|
|
||||||
NR_UE_info_t *UE_info = &gNB_mac->UE_info;
|
|
||||||
|
|
||||||
if (UE_info->num_UEs ==0) return;
|
|
||||||
|
|
||||||
unsigned char sdu_lcids[NB_RB_MAX] = {0};
|
|
||||||
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
|
||||||
uint16_t rnti = UE_info->rnti[UE_id];
|
|
||||||
NR_UE_sched_ctrl_t *ue_sched_ctl = &UE_info->UE_sched_ctrl[UE_id];
|
|
||||||
|
|
||||||
uint8_t mac_sdus[MAX_NR_DLSCH_PAYLOAD_BYTES];
|
|
||||||
|
|
||||||
LOG_D(MAC, "Scheduling UE specific search space DCI type 1\n");
|
|
||||||
|
|
||||||
int ta_len = (ue_sched_ctl->ta_apply)?2:0;
|
|
||||||
|
|
||||||
TBS_bytes = configure_fapi_dl_pdu_phytest(
|
|
||||||
module_idP,
|
|
||||||
dl_req,
|
|
||||||
pucch_sched,
|
|
||||||
dlsch_config != NULL ? dlsch_config->mcsIndex : NULL,
|
|
||||||
dlsch_config != NULL ? &dlsch_config->rbSize : NULL,
|
|
||||||
dlsch_config != NULL ? &dlsch_config->rbStart : NULL);
|
|
||||||
|
|
||||||
if (TBS_bytes == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lcid = DL_SCH_LCID_DTCH;
|
|
||||||
|
|
||||||
//for (lcid = NB_RB_MAX - 1; lcid >= DTCH; lcid--) {
|
|
||||||
|
|
||||||
// TODO: check if the lcid is active
|
|
||||||
|
|
||||||
LOG_D(MAC, "[gNB %d], Frame %d, DTCH%d->DLSCH, Checking RLC status (TBS %d bytes, len %d)\n",
|
|
||||||
module_idP, frameP, lcid, TBS_bytes, TBS_bytes - ta_len - header_length_total - sdu_length_total - 3);
|
|
||||||
|
|
||||||
//if (TBS_bytes - ta_len - header_length_total - sdu_length_total - 3 > 0) {
|
|
||||||
rlc_status = mac_rlc_status_ind(module_idP,
|
|
||||||
rnti,
|
|
||||||
module_idP,
|
|
||||||
frameP,
|
|
||||||
slotP,
|
|
||||||
ENB_FLAG_YES,
|
|
||||||
MBMS_FLAG_NO,
|
|
||||||
lcid,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
|
|
||||||
if (rlc_status.bytes_in_buffer > 0) {
|
|
||||||
|
|
||||||
LOG_I(MAC, "configure fapi due to data availability \n");
|
|
||||||
|
|
||||||
LOG_I(MAC, "[gNB %d][USER-PLANE DEFAULT DRB] Frame %d : DTCH->DLSCH, Requesting %d bytes from RLC (lcid %d total hdr len %d), TBS_bytes: %d \n \n",
|
|
||||||
module_idP, frameP, TBS_bytes - ta_len - header_length_total - sdu_length_total - 3,
|
|
||||||
lcid, header_length_total, TBS_bytes);
|
|
||||||
|
|
||||||
sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,
|
|
||||||
rnti,
|
|
||||||
module_idP,
|
|
||||||
frameP,
|
|
||||||
ENB_FLAG_YES,
|
|
||||||
MBMS_FLAG_NO,
|
|
||||||
lcid,
|
|
||||||
TBS_bytes - ta_len - header_length_total - sdu_length_total - 3,
|
|
||||||
(char *)&mac_sdus[sdu_length_total],
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
|
|
||||||
LOG_W(MAC, "[gNB %d][USER-PLANE DEFAULT DRB] Got %d bytes for DTCH %d \n", module_idP, sdu_lengths[num_sdus], lcid);
|
|
||||||
|
|
||||||
sdu_lcids[num_sdus] = lcid;
|
|
||||||
sdu_length_total += sdu_lengths[num_sdus];
|
|
||||||
header_length_last = 1 + 1 + (sdu_lengths[num_sdus] >= 128);
|
|
||||||
header_length_total += header_length_last;
|
|
||||||
|
|
||||||
num_sdus++;
|
|
||||||
|
|
||||||
//ue_sched_ctl->uplane_inactivity_timer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
LOG_D(MAC,"Configuring DL_TX in %d.%d\n", frameP, slotP);
|
|
||||||
|
|
||||||
// fill dlsch_buffer with random data
|
|
||||||
for (i = 0; i < TBS_bytes; i++){
|
|
||||||
mac_sdus[i] = (unsigned char) (lrand48()&0xff);
|
|
||||||
//((uint8_t *)gNB_mac->UE_info.DLSCH_pdu[0][0].payload[0])[i] = (unsigned char) (lrand48()&0xff);
|
|
||||||
}
|
|
||||||
//Sending SDUs with size 1
|
|
||||||
//Initialize elements of sdu_lcids and sdu_lengths
|
|
||||||
sdu_lcids[0] = 0x3f; // DRB
|
|
||||||
sdu_lengths[0] = TBS_bytes - ta_len - 3;
|
|
||||||
header_length_total += 2 + (sdu_lengths[0] >= 128);
|
|
||||||
sdu_length_total += sdu_lengths[0];
|
|
||||||
num_sdus +=1;
|
|
||||||
|
|
||||||
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
|
||||||
if (frameP%100 == 0){
|
|
||||||
LOG_I(MAC, "Printing first 10 payload bytes at the gNB side, Frame: %d, slot: %d, TBS size: %d \n", frameP, slotP, TBS_bytes);
|
|
||||||
for(int i = 0; i < 10; i++) {
|
|
||||||
LOG_I(MAC, "%x. ", ((uint8_t *)gNB_mac->UE_info.DLSCH_pdu[CC_id][0][0].payload[0])[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
UE_info->mac_stats[UE_id].lc_bytes_tx[lcid] += sdu_length_total;
|
|
||||||
|
|
||||||
// there is at least one SDU or TA command
|
|
||||||
// if (num_sdus > 0 ){
|
|
||||||
if (ta_len + sdu_length_total + header_length_total > 0) {
|
|
||||||
|
|
||||||
// Check if there is data from RLC or CE
|
|
||||||
if (TBS_bytes >= 2 + header_length_total + sdu_length_total + ta_len) {
|
|
||||||
// we have to consider padding
|
|
||||||
// padding param currently not in use
|
|
||||||
//padding = TBS_bytes - header_length_total - sdu_length_total - ta_len - 1;
|
|
||||||
post_padding = 1;
|
|
||||||
} else {
|
|
||||||
//padding = 0;
|
|
||||||
post_padding = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
offset = nr_generate_dlsch_pdu(module_idP,
|
|
||||||
&UE_info->UE_sched_ctrl[UE_id],
|
|
||||||
(unsigned char *) mac_sdus,
|
|
||||||
(unsigned char *) gNB_mac->UE_info.DLSCH_pdu[0][0].payload[0],
|
|
||||||
num_sdus, //num_sdus
|
|
||||||
sdu_lengths,
|
|
||||||
sdu_lcids,
|
|
||||||
255, // no drx
|
|
||||||
NULL, // contention res id
|
|
||||||
post_padding);
|
|
||||||
|
|
||||||
// Padding: fill remainder of DLSCH with 0
|
|
||||||
if (post_padding > 0){
|
|
||||||
for (int j = 0; j < (TBS_bytes - offset); j++)
|
|
||||||
gNB_mac->UE_info.DLSCH_pdu[0][0].payload[0][offset + j] = 0; // mac_pdu[offset + j] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
configure_fapi_dl_Tx(module_idP, frameP, slotP, dl_req, tx_req, TBS_bytes, gNB_mac->pdu_index[CC_id]);
|
|
||||||
|
|
||||||
if(IS_SOFTMODEM_NOS1){
|
|
||||||
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
|
||||||
LOG_I(MAC, "Printing first 10 payload bytes at the gNB side, Frame: %d, slot: %d, TBS size: %d \n \n", frameP, slotP, TBS_bytes);
|
|
||||||
for(int i = 0; i < 10; i++) { // TBS_bytes dlsch_pdu_rel15->transport_block_size/8 6784/8
|
|
||||||
LOG_I(MAC, "%x. ", mac_payload[i]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
|
||||||
if (frameP%100 == 0){
|
|
||||||
LOG_I(MAC, "Printing first 10 payload bytes at the gNB side, Frame: %d, slot: %d, TBS size: %d \n", frameP, slotP, TBS_bytes);
|
|
||||||
for(int i = 0; i < 10; i++) {
|
|
||||||
LOG_I(MAC, "byte %d : %x\n", i,((uint8_t *)gNB_mac->UE_info.DLSCH_pdu[0][0].payload[0])[i]); //LOG_I(MAC, "%x. ", mac_payload[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else { // There is no data from RLC or MAC header, so don't schedule
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int8_t select_ul_harq_pid(NR_UE_sched_ctrl_t *sched_ctrl) {
|
int8_t select_ul_harq_pid(NR_UE_sched_ctrl_t *sched_ctrl) {
|
||||||
|
|
||||||
uint8_t hrq_id;
|
uint8_t hrq_id;
|
||||||
|
|||||||
@@ -525,7 +525,6 @@ void nr_fill_nfapi_dl_pdu(int Mod_idP,
|
|||||||
pdsch_pdu_rel15->StartSymbolIndex = StartSymbolIndex;
|
pdsch_pdu_rel15->StartSymbolIndex = StartSymbolIndex;
|
||||||
pdsch_pdu_rel15->NrOfSymbols = NrOfSymbols;
|
pdsch_pdu_rel15->NrOfSymbols = NrOfSymbols;
|
||||||
|
|
||||||
// k0 = *bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->k0;
|
|
||||||
pdsch_pdu_rel15->dlDmrsSymbPos =
|
pdsch_pdu_rel15->dlDmrsSymbPos =
|
||||||
fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup,
|
fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup,
|
||||||
scc->dmrs_TypeA_Position,
|
scc->dmrs_TypeA_Position,
|
||||||
@@ -618,17 +617,6 @@ void nr_fill_nfapi_dl_pdu(int Mod_idP,
|
|||||||
pdcch_pdu_rel15->StartSymbolIndex,
|
pdcch_pdu_rel15->StartSymbolIndex,
|
||||||
pdcch_pdu_rel15->DurationSymbols);
|
pdcch_pdu_rel15->DurationSymbols);
|
||||||
|
|
||||||
// I don't know why the following is not needed, but in this case we don't
|
|
||||||
// need additional calculations:
|
|
||||||
//const uint16_t N_RE_prime = NR_NB_SC_PER_RB * N_sh_symb - N_PRB_DMRS - N_PRB_oh;
|
|
||||||
//LOG_D(MAC,
|
|
||||||
// "N_RE_prime %d for %d symbols %d DMRS per PRB and %d overhead\n",
|
|
||||||
// N_RE_prime,
|
|
||||||
// N_sh_symb,
|
|
||||||
// N_PRB_DMRS,
|
|
||||||
// N_PRB_oh);
|
|
||||||
//pdsch_pdu_rel15->nb_mod_symbols = N_RE_prime*pdsch_pdu_rel15->n_prb*pdsch_pdu_rel15->nb_codewords;
|
|
||||||
|
|
||||||
LOG_D(MAC,
|
LOG_D(MAC,
|
||||||
"DLSCH PDU: start PRB %d n_PRB %d start symbol %d nb_symbols %d "
|
"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",
|
"nb_layers %d nb_codewords %d mcs %d TBS: %d\n",
|
||||||
|
|||||||
@@ -167,13 +167,6 @@ void nr_fill_nfapi_dl_pdu(int Mod_id,
|
|||||||
int ndi,
|
int ndi,
|
||||||
int round);
|
int round);
|
||||||
|
|
||||||
int configure_fapi_dl_pdu_phytest(int Mod_id,
|
|
||||||
nfapi_nr_dl_tti_request_body_t *dl_req,
|
|
||||||
NR_sched_pucch *pucch_sched,
|
|
||||||
uint8_t *mcsIndex,
|
|
||||||
uint16_t *rbSize,
|
|
||||||
uint16_t *rbStart);
|
|
||||||
|
|
||||||
void nr_rx_acknack(nfapi_nr_uci_pusch_pdu_t *uci_pusch,
|
void nr_rx_acknack(nfapi_nr_uci_pusch_pdu_t *uci_pusch,
|
||||||
nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_01,
|
nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_01,
|
||||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_234,
|
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_234,
|
||||||
@@ -187,20 +180,6 @@ void config_uldci(NR_BWP_Uplink_t *ubwp,
|
|||||||
int time_domain_assignment, uint8_t tpc,
|
int time_domain_assignment, uint8_t tpc,
|
||||||
int n_ubwp, int bwp_id);
|
int n_ubwp, int bwp_id);
|
||||||
|
|
||||||
void configure_fapi_dl_Tx(module_id_t Mod_idP,
|
|
||||||
frame_t frameP,
|
|
||||||
sub_frame_t slotP,
|
|
||||||
nfapi_nr_dl_tti_request_body_t *dl_req,
|
|
||||||
nfapi_nr_pdu_t *tx_req,
|
|
||||||
int tbs_bytes,
|
|
||||||
int16_t pdu_index);
|
|
||||||
|
|
||||||
void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
|
||||||
frame_t frameP,
|
|
||||||
sub_frame_t slotP,
|
|
||||||
NR_sched_pucch *pucch_sched,
|
|
||||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_config);
|
|
||||||
|
|
||||||
void nr_schedule_pusch(int Mod_idP,
|
void nr_schedule_pusch(int Mod_idP,
|
||||||
int UE_id,
|
int UE_id,
|
||||||
int num_slots_per_tdd,
|
int num_slots_per_tdd,
|
||||||
|
|||||||
Reference in New Issue
Block a user