Commit 7c5b67a1 authored by Robert Schmidt's avatar Robert Schmidt

Refactor configure_fapi_dl_pdu()

- Clean up
- Add new parameters for configurability:
  * UE ID
  * CCE index
  * MCS
  * number of RBs and start
parent 41e910cb
...@@ -176,8 +176,21 @@ int nr_generate_dlsch_pdu(module_id_t module_idP, ...@@ -176,8 +176,21 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
return offset; return offset;
} }
uint16_t getBWPsize(module_id_t Mod_id, int UE_id, int bwp_id, int N_RB) {
NR_UE_list_t *UE_list = &RC.nrmac[Mod_id]->UE_list;
NR_CellGroupConfig_t *secondaryCellGroup = UE_list->secondaryCellGroup[UE_id];
struct NR_ServingCellConfig__downlinkBWP_ToAddModList *BWP_ToAddModList =
secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList;
AssertFatal(BWP_ToAddModList->list.count == 1,
"downlinkBWP_ToAddModList has %d BWP!\n",
BWP_ToAddModList->list.count);
NR_BWP_Downlink_t *bwp = BWP_ToAddModList->list.array[bwp_id - 1];
return NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth, N_RB);
}
void nr_schedule_ue_spec(module_id_t module_idP, frame_t frameP, sub_frame_t slotP){ void nr_schedule_ue_spec(module_id_t module_idP, frame_t frameP, sub_frame_t slotP){
const int UE_id = 0; const int UE_id = 0;
const int bwp_id = 1;
const int CC_id = 0; const int CC_id = 0;
gNB_MAC_INST *gNB_mac = RC.nrmac[module_idP]; gNB_MAC_INST *gNB_mac = RC.nrmac[module_idP];
...@@ -197,7 +210,7 @@ void nr_schedule_ue_spec(module_id_t module_idP, frame_t frameP, sub_frame_t slo ...@@ -197,7 +210,7 @@ void nr_schedule_ue_spec(module_id_t module_idP, frame_t frameP, sub_frame_t slo
LOG_D(MAC, "Scheduling UE specific search space DCI type 1\n"); LOG_D(MAC, "Scheduling UE specific search space DCI type 1\n");
int CCEIndex = allocate_nr_CCEs(gNB_mac, int CCEIndex = allocate_nr_CCEs(gNB_mac,
1, // bwp_id bwp_id, // bwp_id
0, // coreset_id 0, // coreset_id
4, // aggregation, 4, // aggregation,
1, // search_space, 0 common, 1 ue-specific 1, // search_space, 0 common, 1 ue-specific
...@@ -208,9 +221,18 @@ void nr_schedule_ue_spec(module_id_t module_idP, frame_t frameP, sub_frame_t slo ...@@ -208,9 +221,18 @@ void nr_schedule_ue_spec(module_id_t module_idP, frame_t frameP, sub_frame_t slo
return; return;
} }
int CCEIndices[2] = {CCEIndex, 0}; const int mcsIndex = 9;
int TBS_bytes = const int N_RB = 275;
configure_fapi_dl_pdu(module_idP, CCEIndices, dl_req, NULL, NULL, NULL); const uint16_t rbSize = getBWPsize(module_idP, UE_id, bwp_id, N_RB);
const uint16_t rbStart = 0;
int TBS_bytes = configure_fapi_dl_pdu(gNB_mac,
CC_id,
UE_id,
bwp_id,
CCEIndex,
mcsIndex,
rbSize,
rbStart);
int ta_len = gNB_mac->ta_len; int ta_len = gNB_mac->ta_len;
int header_length_total = 0; int header_length_total = 0;
......
...@@ -291,15 +291,15 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP, ...@@ -291,15 +291,15 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
if (CCEIndex == -1) return; if (CCEIndex == -1) return;
AssertFatal(CCEIndex>0,"CCEIndex is negative\n"); AssertFatal(CCEIndex>0,"CCEIndex is negative\n");
int CCEIndices[2];
CCEIndices[0] = CCEIndex; TBS_bytes = configure_fapi_dl_pdu(gNB_mac,
CC_id,
TBS_bytes = configure_fapi_dl_pdu(module_idP, UE_id,
CCEIndices, 1, // bwp_id
dl_req, CCEIndex,
dlsch_config!=NULL ? dlsch_config->mcsIndex : NULL, dlsch_config!=NULL ? dlsch_config->mcsIndex[0] : 9,
dlsch_config!=NULL ? &dlsch_config->rbSize : NULL, dlsch_config!=NULL ? dlsch_config->rbSize : 106,
dlsch_config!=NULL ? &dlsch_config->rbStart : NULL); dlsch_config!=NULL ? dlsch_config->rbStart : 0);
//The --NOS1 use case currently schedules DLSCH transmissions only when there is IP traffic arriving //The --NOS1 use case currently schedules DLSCH transmissions only when there is IP traffic arriving
//through the LTE stack //through the LTE stack
......
...@@ -1331,32 +1331,55 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP){ ...@@ -1331,32 +1331,55 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP){
} }
*/ */
int configure_fapi_dl_pdu(int Mod_idP, uint32_t configure_fapi_dl_pdu(gNB_MAC_INST *nr_mac,
int *CCEIndex, int CC_id,
nfapi_nr_dl_tti_request_body_t *dl_req, int UE_id,
uint8_t *mcsIndex, int bwp_id,
uint16_t *rbSize, int CCEIndex,
uint16_t *rbStart) { uint8_t mcsIndex,
gNB_MAC_INST *nr_mac = RC.nrmac[Mod_idP]; uint16_t rbSize,
NR_COMMON_channels_t *cc = nr_mac->common_channels; uint16_t rbStart) {
NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon; nfapi_nr_dl_tti_request_body_t *dl_req = &nr_mac->DL_req[CC_id].dl_tti_request_body;
NR_ServingCellConfigCommon_t *scc = nr_mac->common_channels->ServingCellConfigCommon;
const int bwp_id = 1; NR_UE_list_t *UE_list = &nr_mac->UE_list;
const int UE_id = 0;
NR_UE_list_t *UE_list = &RC.nrmac[Mod_idP]->UE_list;
NR_CellGroupConfig_t *secondaryCellGroup = UE_list->secondaryCellGroup[UE_id]; NR_CellGroupConfig_t *secondaryCellGroup = UE_list->secondaryCellGroup[UE_id];
AssertFatal(secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count == 1, struct NR_ServingCellConfig__downlinkBWP_ToAddModList *dlBWP_ToAddModList =
"downlinkBWP_ToAddModList has %d BWP!\n", secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList;
secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count); AssertFatal(dlBWP_ToAddModList->list.count == 1,
NR_BWP_Downlink_t *bwp=secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[bwp_id-1]; "downlinkBWP_ToAddModList has %d BWP!\n",
dlBWP_ToAddModList->list.count);
nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdcch_pdu; NR_BWP_Downlink_t *bwp = dlBWP_ToAddModList->list.array[bwp_id - 1];
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)); const int N_RB = 275;
dl_tti_pdcch_pdu->PDUType = NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE; const uint16_t BWPsize = NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth, N_RB);
dl_tti_pdcch_pdu->PDUSize = (uint8_t)(2+sizeof(nfapi_nr_dl_tti_pdcch_pdu)); const uint16_t BWPStart = NRRIV2PRBOFFSET(bwp->bwp_Common->genericParameters.locationAndBandwidth, N_RB);
const uint8_t dmrsConfigType = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? 0 : 1;
const uint8_t nrOfLayers = 1;
const uint8_t tableIndex = 0;
// choose shortest PDSCH
const int time_domain_assignment = 2;
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);
const int startSymbolAndLength = bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[time_domain_assignment]->startSymbolAndLength;
int StartSymbolIndex, nrOfSymbols;
SLIV2SL(startSymbolAndLength, &StartSymbolIndex, &nrOfSymbols);
const uint16_t n_PRB_oh = 0; // should be 0 for initialBWP
// This only works for antenna port 1000
const uint8_t n_PRB_DMRS = dmrsConfigType == NFAPI_NR_DMRS_TYPE1 ? 6 : 4;
const uint32_t R = nr_get_code_rate_dl(mcsIndex, tableIndex);
const uint8_t Qm = nr_get_Qm_dl(mcsIndex, tableIndex);
const uint32_t TBS = nr_compute_tbs(Qm,
R,
rbSize,
nrOfSymbols,
n_PRB_DMRS,
n_PRB_oh,
nrOfLayers) >> 3;
nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdsch_pdu; nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdsch_pdu;
dl_tti_pdsch_pdu = &dl_req->dl_tti_pdu_list[dl_req->nPDUs+1]; dl_tti_pdsch_pdu = &dl_req->dl_tti_pdu_list[dl_req->nPDUs+1];
...@@ -1369,61 +1392,53 @@ int configure_fapi_dl_pdu(int Mod_idP, ...@@ -1369,61 +1392,53 @@ int configure_fapi_dl_pdu(int Mod_idP,
pdsch_pdu_rel15->rnti = UE_list->rnti[UE_id]; pdsch_pdu_rel15->rnti = UE_list->rnti[UE_id];
pdsch_pdu_rel15->pduIndex = 0; pdsch_pdu_rel15->pduIndex = 0;
// BWP // BWP
pdsch_pdu_rel15->BWPSize = NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth,275); pdsch_pdu_rel15->BWPSize = BWPsize;
pdsch_pdu_rel15->BWPStart = NRRIV2PRBOFFSET(bwp->bwp_Common->genericParameters.locationAndBandwidth,275); pdsch_pdu_rel15->BWPStart = BWPStart;
pdsch_pdu_rel15->SubcarrierSpacing = bwp->bwp_Common->genericParameters.subcarrierSpacing; pdsch_pdu_rel15->SubcarrierSpacing = bwp->bwp_Common->genericParameters.subcarrierSpacing;
if (bwp->bwp_Common->genericParameters.cyclicPrefix) pdsch_pdu_rel15->CyclicPrefix = *bwp->bwp_Common->genericParameters.cyclicPrefix; if (bwp->bwp_Common->genericParameters.cyclicPrefix)
else pdsch_pdu_rel15->CyclicPrefix=0; pdsch_pdu_rel15->CyclicPrefix = *bwp->bwp_Common->genericParameters.cyclicPrefix;
else
pdsch_pdu_rel15->CyclicPrefix = 0;
pdsch_pdu_rel15->NrOfCodewords = 1; pdsch_pdu_rel15->NrOfCodewords = 1;
int mcs = (mcsIndex!=NULL) ? *mcsIndex : 9; pdsch_pdu_rel15->targetCodeRate[0] = R;
pdsch_pdu_rel15->targetCodeRate[0] = nr_get_code_rate_dl(mcs,0); pdsch_pdu_rel15->qamModOrder[0] = Qm;
pdsch_pdu_rel15->qamModOrder[0] = 2; pdsch_pdu_rel15->mcsIndex[0] = mcsIndex;
pdsch_pdu_rel15->mcsIndex[0] = mcs; pdsch_pdu_rel15->mcsTable[0] = tableIndex;
pdsch_pdu_rel15->mcsTable[0] = 0;
pdsch_pdu_rel15->rvIndex[0] = 0; pdsch_pdu_rel15->rvIndex[0] = 0;
pdsch_pdu_rel15->TBSize[0] = TBS;
//pdsch_pdu_rel15->nb_mod_symbols = N_RE_prime * pdsch_pdu_rel15->n_prb * pdsch_pdu_rel15->nb_codewords;
pdsch_pdu_rel15->dataScramblingId = *scc->physCellId; pdsch_pdu_rel15->dataScramblingId = *scc->physCellId;
pdsch_pdu_rel15->nrOfLayers = 1; pdsch_pdu_rel15->nrOfLayers = nrOfLayers;
pdsch_pdu_rel15->transmissionScheme = 0; pdsch_pdu_rel15->transmissionScheme = 0;
pdsch_pdu_rel15->refPoint = 0; // Point A pdsch_pdu_rel15->refPoint = 0; // Point A
pdsch_pdu_rel15->dmrsConfigType = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? 0 : 1; pdsch_pdu_rel15->dmrsConfigType = dmrsConfigType;
pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId; pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId;
pdsch_pdu_rel15->SCID = 0; pdsch_pdu_rel15->SCID = 0;
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = 1; pdsch_pdu_rel15->numDmrsCdmGrpsNoData = 1;
pdsch_pdu_rel15->dmrsPorts = 1; pdsch_pdu_rel15->dmrsPorts = 1;
pdsch_pdu_rel15->resourceAlloc = 1; pdsch_pdu_rel15->resourceAlloc = 1;
pdsch_pdu_rel15->rbStart = (rbStart!=NULL) ? *rbStart : 0; pdsch_pdu_rel15->rbStart = rbStart;
pdsch_pdu_rel15->rbSize = (rbSize!=NULL) ? *rbSize : pdsch_pdu_rel15->BWPSize; pdsch_pdu_rel15->rbSize = rbSize;
pdsch_pdu_rel15->VRBtoPRBMapping = 1; // non-interleaved, check if this is ok for initialBWP pdsch_pdu_rel15->VRBtoPRBMapping = 1; // non-interleaved, check if this is ok for initialBWP
// choose shortest PDSCH
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->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; // 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, pdsch_pdu_rel15->dlDmrsSymbPos =
scc->dmrs_TypeA_Position, fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup,
pdsch_pdu_rel15->NrOfSymbols); scc->dmrs_TypeA_Position,
nrOfSymbols);
dci_pdu_rel15_t dci_pdu_rel15[MAX_DCI_CORESET]; dci_pdu_rel15_t dci_pdu_rel15[MAX_DCI_CORESET];
dci_pdu_rel15[0].frequency_domain_assignment = PRBalloc_to_locationandbandwidth0(pdsch_pdu_rel15->rbSize, dci_pdu_rel15[0].frequency_domain_assignment =
pdsch_pdu_rel15->rbStart, PRBalloc_to_locationandbandwidth0(rbSize, rbStart, BWPsize);
NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth,275));
dci_pdu_rel15[0].time_domain_assignment = time_domain_assignment; // row index used here instead of SLIV; dci_pdu_rel15[0].time_domain_assignment = time_domain_assignment; // row index used here instead of SLIV;
dci_pdu_rel15[0].vrb_to_prb_mapping = 1; dci_pdu_rel15[0].vrb_to_prb_mapping = 1;
dci_pdu_rel15[0].mcs = pdsch_pdu_rel15->mcsIndex[0]; dci_pdu_rel15[0].mcs = mcsIndex;
dci_pdu_rel15[0].tb_scaling = 1; dci_pdu_rel15[0].tb_scaling = 1;
dci_pdu_rel15[0].ra_preamble_index = 25; dci_pdu_rel15[0].ra_preamble_index = 25;
dci_pdu_rel15[0].format_indicator = 1; dci_pdu_rel15[0].format_indicator = 1;
...@@ -1438,9 +1453,9 @@ int configure_fapi_dl_pdu(int Mod_idP, ...@@ -1438,9 +1453,9 @@ int configure_fapi_dl_pdu(int Mod_idP,
"[gNB scheduler phytest] DCI type 1 payload: freq_alloc %d (%d,%d,%d), " "[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", "time_alloc %d, vrb to prb %d, mcs %d tb_scaling %d ndi %d rv %d\n",
dci_pdu_rel15[0].frequency_domain_assignment, dci_pdu_rel15[0].frequency_domain_assignment,
pdsch_pdu_rel15->rbStart, rbStart,
pdsch_pdu_rel15->rbSize, rbSize,
NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth, 275), BWPsize,
dci_pdu_rel15[0].time_domain_assignment, dci_pdu_rel15[0].time_domain_assignment,
dci_pdu_rel15[0].vrb_to_prb_mapping, dci_pdu_rel15[0].vrb_to_prb_mapping,
dci_pdu_rel15[0].mcs, dci_pdu_rel15[0].mcs,
...@@ -1448,23 +1463,26 @@ int configure_fapi_dl_pdu(int Mod_idP, ...@@ -1448,23 +1463,26 @@ int configure_fapi_dl_pdu(int Mod_idP,
dci_pdu_rel15[0].ndi, dci_pdu_rel15[0].ndi,
dci_pdu_rel15[0].rv); dci_pdu_rel15[0].rv);
nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdcch_pdu;
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));
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &dl_tti_pdcch_pdu->pdcch_pdu.pdcch_pdu_rel15; nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &dl_tti_pdcch_pdu->pdcch_pdu.pdcch_pdu_rel15;
nr_configure_pdcch(pdcch_pdu_rel15, nr_configure_pdcch(pdcch_pdu_rel15, 1, scc, bwp);
1, // ue-specific
scc,
bwp);
pdcch_pdu_rel15->numDlDci = 1; pdcch_pdu_rel15->numDlDci = 1;
pdcch_pdu_rel15->AggregationLevel[0] = 4; pdcch_pdu_rel15->AggregationLevel[0] = 4;
pdcch_pdu_rel15->RNTI[0]=UE_list->rnti[0]; pdcch_pdu_rel15->RNTI[0] = UE_list->rnti[UE_id];
pdcch_pdu_rel15->CceIndex[0] = CCEIndex[0]; pdcch_pdu_rel15->CceIndex[0] = CCEIndex;
pdcch_pdu_rel15->beta_PDCCH_1_0[0]=0; pdcch_pdu_rel15->beta_PDCCH_1_0[0] = 0;
pdcch_pdu_rel15->powerControlOffsetSS[0]=1; pdcch_pdu_rel15->powerControlOffsetSS[0] = 1;
int dci_formats[2] = {NR_DL_DCI_FORMAT_1_0, 0}; int dci_formats[2] = {NR_DL_DCI_FORMAT_1_0, 0};
int rnti_types[2] = {NR_RNTI_C, 0}; int rnti_types[2] = {NR_RNTI_C, 0};
pdcch_pdu_rel15->PayloadSizeBits[0] = pdcch_pdu_rel15->PayloadSizeBits[0] =
nr_dci_size(dci_formats[0], rnti_types[0], pdcch_pdu_rel15->BWPSize); nr_dci_size(dci_formats[0], rnti_types[0], BWPsize);
fill_dci_pdu_rel15(pdcch_pdu_rel15,&dci_pdu_rel15[0],dci_formats,rnti_types); fill_dci_pdu_rel15(pdcch_pdu_rel15,&dci_pdu_rel15[0],dci_formats,rnti_types);
LOG_D(MAC, LOG_D(MAC,
...@@ -1477,22 +1495,31 @@ int configure_fapi_dl_pdu(int Mod_idP, ...@@ -1477,22 +1495,31 @@ int configure_fapi_dl_pdu(int Mod_idP,
pdcch_pdu_rel15->StartSymbolIndex, pdcch_pdu_rel15->StartSymbolIndex,
pdcch_pdu_rel15->DurationSymbols); pdcch_pdu_rel15->DurationSymbols);
int x_Overhead = 0; // should be 0 for initialBWP const uint16_t N_RE_prime = NR_NB_SC_PER_RB * nrOfSymbols - n_PRB_DMRS - n_PRB_oh;
nr_get_tbs_dl(&dl_tti_pdsch_pdu->pdsch_pdu, x_Overhead); LOG_D(MAC,
"TBS %d bytes: n_PRB_DMRS %d nrOfSymbols %d n_PRB_oh %d R %d Qm %d "
"table %d nb_symbols %d\n",
TBS,
n_PRB_DMRS,
nrOfSymbols,
n_PRB_oh,
R,
Qm,
tableIndex,
N_RE_prime * pdsch_pdu_rel15->rbSize * pdsch_pdu_rel15->NrOfCodewords);
// Hardcode it for now // Hardcode it for now
int TBS = dl_tti_pdsch_pdu->pdsch_pdu.pdsch_pdu_rel15.TBSize[0];
LOG_D(MAC, LOG_D(MAC,
"DLSCH PDU: start PRB %d n_PRB %d startSymbolAndLength %d start symbol " "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", "%d nb_symbols %d nb_layers %d nb_codewords %d mcs %d TBS: %d\n",
pdsch_pdu_rel15->rbStart, rbStart,
pdsch_pdu_rel15->rbSize, rbSize,
startSymbolAndLength, startSymbolAndLength,
pdsch_pdu_rel15->StartSymbolIndex, pdsch_pdu_rel15->StartSymbolIndex,
pdsch_pdu_rel15->NrOfSymbols, pdsch_pdu_rel15->NrOfSymbols,
pdsch_pdu_rel15->nrOfLayers, pdsch_pdu_rel15->nrOfLayers,
pdsch_pdu_rel15->NrOfCodewords, pdsch_pdu_rel15->NrOfCodewords,
pdsch_pdu_rel15->mcsIndex[0], mcsIndex,
TBS); TBS);
return TBS; //Return TBS in bytes return TBS; //Return TBS in bytes
......
...@@ -80,12 +80,14 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP, ...@@ -80,12 +80,14 @@ 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_pdu(int Mod_idP, uint32_t configure_fapi_dl_pdu(gNB_MAC_INST *nr_mac,
int *CCEIndex, int CC_id,
nfapi_nr_dl_tti_request_body_t *dl_req, int UE_id,
uint8_t *mcsIndex, int bwp_id,
uint16_t *rbSize, int CCEIndex,
uint16_t *rbStart); uint8_t mcsIndex,
uint16_t rbSize,
uint16_t rbStart);
void config_uldci(NR_BWP_Uplink_t *ubwp,nfapi_nr_pusch_pdu_t *pusch_pdu,nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, dci_pdu_rel15_t *dci_pdu_rel15, int *dci_formats, int *rnti_types); void config_uldci(NR_BWP_Uplink_t *ubwp,nfapi_nr_pusch_pdu_t *pusch_pdu,nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, dci_pdu_rel15_t *dci_pdu_rel15, int *dci_formats, int *rnti_types);
......
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