From: lal.harshita Date: Wed, 22 Feb 2023 04:54:40 +0000 (+0530) Subject: [Epic-ID: ODUHIGH-488][Task-ID: ODUHIGH-493] WG8 Alignment | DL paging Alloc X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fl2.git;a=commitdiff_plain;h=6fee61a10e1ad48ff7105b3201038ac8a337fd4a [Epic-ID: ODUHIGH-488][Task-ID: ODUHIGH-493] WG8 Alignment | DL paging Alloc Signed-off-by: lal.harshita Change-Id: I2994193099433f376ab7eba8cf5c72a57f697a29 Signed-off-by: lal.harshita --- diff --git a/src/5gnrmac/lwr_mac_fsm.c b/src/5gnrmac/lwr_mac_fsm.c index a03b69ad0..85f97bcfd 100644 --- a/src/5gnrmac/lwr_mac_fsm.c +++ b/src/5gnrmac/lwr_mac_fsm.c @@ -2635,7 +2635,7 @@ void fillSib1DlDciPdu(fapi_dl_dci_t *dlDciPtr, PdcchCfg *sib1PdcchInfo) * ******************************************************************/ -void fillPageDlDciPdu(fapi_dl_dci_t *dlDciPtr, DlPageAlloc *dlPageAlloc) +void fillPageDlDciPdu(fapi_dl_dci_t *dlDciPtr, DlPageAlloc *dlPageAlloc, MacCellCfg *macCellCfg) { if(dlDciPtr != NULLP) { @@ -2666,18 +2666,18 @@ void fillPageDlDciPdu(fapi_dl_dci_t *dlDciPtr, DlPageAlloc *dlPageAlloc) uint8_t tbScalingSize = 2; uint8_t reservedSize = 6; - dlDciPtr->rnti = dlPageAlloc->pagePdcchCfg.dci.rnti; - dlDciPtr->scramblingId = dlPageAlloc->pagePdcchCfg.dci.scramblingId; - dlDciPtr->scramblingRnti = dlPageAlloc->pagePdcchCfg.dci.scramblingRnti; - dlDciPtr->cceIndex = dlPageAlloc->pagePdcchCfg.dci.cceIndex; - dlDciPtr->aggregationLevel = dlPageAlloc->pagePdcchCfg.dci.aggregLevel; - dlDciPtr->pc_and_bform.numPrgs = dlPageAlloc->pagePdcchCfg.dci.beamPdcchInfo.numPrgs; - dlDciPtr->pc_and_bform.prgSize = dlPageAlloc->pagePdcchCfg.dci.beamPdcchInfo.prgSize; - dlDciPtr->pc_and_bform.digBfInterfaces = dlPageAlloc->pagePdcchCfg.dci.beamPdcchInfo.digBfInterfaces; - dlDciPtr->pc_and_bform.pmi_bfi[0].pmIdx = dlPageAlloc->pagePdcchCfg.dci.beamPdcchInfo.prg[0].pmIdx; - dlDciPtr->pc_and_bform.pmi_bfi[0].beamIdx[0].beamidx = dlPageAlloc->pagePdcchCfg.dci.beamPdcchInfo.prg[0].beamIdx[0]; - dlDciPtr->beta_pdcch_1_0 = dlPageAlloc->pagePdcchCfg.dci.txPdcchPower.beta_pdcch_1_0; - dlDciPtr->powerControlOffsetSS = dlPageAlloc->pagePdcchCfg.dci.txPdcchPower.powerControlOffsetSS; + dlDciPtr->rnti = P_RNTI; + dlDciPtr->scramblingId = macCellCfg->cellCfg.phyCellId; + dlDciPtr->scramblingRnti = 0; + dlDciPtr->cceIndex = dlPageAlloc->pageDlDci.cceIndex; + dlDciPtr->aggregationLevel = dlPageAlloc->pageDlDci.aggregLevel; + dlDciPtr->pc_and_bform.numPrgs = 1; + dlDciPtr->pc_and_bform.prgSize = 1; + dlDciPtr->pc_and_bform.digBfInterfaces = 0; + dlDciPtr->pc_and_bform.pmi_bfi[0].pmIdx = 0; + dlDciPtr->pc_and_bform.pmi_bfi[0].beamIdx[0].beamidx = 0; + dlDciPtr->beta_pdcch_1_0 = 0; + dlDciPtr->powerControlOffsetSS = 0; /* Calculating freq domain resource allocation field value and size * coreset0Size = Size of coreset 0 @@ -2685,9 +2685,9 @@ void fillPageDlDciPdu(fapi_dl_dci_t *dlDciPtr, DlPageAlloc *dlPageAlloc) * RBLen = length of contiguously allocted RBs * Spec 38.214 Sec 5.1.2.2.2 */ - coreset0Size = dlPageAlloc->pagePdcchCfg.coresetCfg.coreSetSize; - rbStart = dlPageAlloc->pagePdcchCfg.dci.pdschCfg->pdschFreqAlloc.startPrb; - rbLen = dlPageAlloc->pagePdcchCfg.dci.pdschCfg->pdschFreqAlloc.numPrb; + coreset0Size = dlPageAlloc->pageDlDci.coreSetSize; + rbStart = dlPageAlloc->pageDlSch.freqAlloc.startPrb; + rbLen = dlPageAlloc->pageDlSch.freqAlloc.numPrb; if((rbLen >=1) && (rbLen <= coreset0Size - rbStart)) { @@ -2712,7 +2712,7 @@ void fillPageDlDciPdu(fapi_dl_dci_t *dlDciPtr, DlPageAlloc *dlPageAlloc) else { /*Short Msg is Present*/ - if(dlPageAlloc->dlPagePduLen == 0 || dlPageAlloc->dlPagePdu == NULLP) + if(dlPageAlloc->pageDlSch.dlPagePduLen == 0 || dlPageAlloc->pageDlSch.dlPagePdu == NULLP) { /*When Paging Msg is absent*/ shortMsgInd = 2; @@ -2725,9 +2725,9 @@ void fillPageDlDciPdu(fapi_dl_dci_t *dlDciPtr, DlPageAlloc *dlPageAlloc) shortMsg = dlPageAlloc->shortMsg; } - timeDomResAssign = dlPageAlloc->pagePdcchCfg.dci.pdschCfg->pdschTimeAlloc.rowIndex -1; - VRB2PRBMap = dlPageAlloc->pagePdcchCfg.dci.pdschCfg->pdschFreqAlloc.vrbPrbMapping; - modNCodScheme = dlPageAlloc->pagePdcchCfg.dci.pdschCfg->codeword[0].mcsIndex; + timeDomResAssign = 0; + VRB2PRBMap = dlPageAlloc->pageDlSch.vrbPrbMapping; + modNCodScheme = dlPageAlloc->pageDlSch.tbInfo.mcs; tbScaling = 0; reserved = 0; @@ -3087,6 +3087,62 @@ void fillDlMsgDlDciPdu(fapi_dl_dci_t *dlDciPtr, PdcchCfg *pdcchInfo,\ } } +/******************************************************************* + * + * @brief fills Dl PDCCH Info from DL PageAlloc + * + * @details + * + * Function : fillPdcchInfoFrmPageAlloc + * + * Functionality: + * -Fills the PdcchInfo + * + * @params[in] Pointer to DlPageAlloc + * Pointer to PdcchCfg + * @return ROK + * + ******************************************************************/ +void fillPagePdcchPdu(fapi_dl_tti_req_pdu_t *dlTtiReqPdu, fapi_vendor_dl_tti_req_pdu_t *dlTtiVendorPdu, DlPageAlloc *pageAlloc, MacCellCfg *macCellCfg) +{ + if(dlTtiReqPdu != NULLP) + { + BwpCfg *bwp = NULLP; + + memset(&dlTtiReqPdu->pdu.pdcch_pdu, 0, sizeof(fapi_dl_pdcch_pdu_t)); + bwp = &pageAlloc->bwp; + fillPageDlDciPdu(dlTtiReqPdu->pdu.pdcch_pdu.dlDci, pageAlloc, macCellCfg); + + dlTtiReqPdu->pduType = PDCCH_PDU_TYPE; + + dlTtiReqPdu->pdu.pdcch_pdu.bwpSize = bwp->freqAlloc.numPrb; + dlTtiReqPdu->pdu.pdcch_pdu.bwpStart = bwp->freqAlloc.startPrb; + dlTtiReqPdu->pdu.pdcch_pdu.subCarrierSpacing = bwp->subcarrierSpacing; + dlTtiReqPdu->pdu.pdcch_pdu.cyclicPrefix = bwp->cyclicPrefix; + + dlTtiReqPdu->pdu.pdcch_pdu.startSymbolIndex = pageAlloc->pageDlDci.ssStartSymbolIndex; + dlTtiReqPdu->pdu.pdcch_pdu.durationSymbols = pageAlloc->pageDlDci.durationSymbols; + memcpy(dlTtiReqPdu->pdu.pdcch_pdu.freqDomainResource, pageAlloc->pageDlDci.freqDomainResource, 6*sizeof(uint8_t)); + dlTtiReqPdu->pdu.pdcch_pdu.cceRegMappingType = pageAlloc->pageDlDci.cceRegMappingType; + dlTtiReqPdu->pdu.pdcch_pdu.regBundleSize = pageAlloc->pageDlDci.cceReg.interleaved.regBundleSize; + dlTtiReqPdu->pdu.pdcch_pdu.interleaverSize = pageAlloc->pageDlDci.cceReg.interleaved.interleaverSize; + dlTtiReqPdu->pdu.pdcch_pdu.shiftIndex = pageAlloc->pageDlDci.cceReg.interleaved.shiftIndex; + dlTtiReqPdu->pdu.pdcch_pdu.precoderGranularity = pageAlloc->pageDlDci.precoderGranularity; + dlTtiReqPdu->pdu.pdcch_pdu.numDlDci = 1; + dlTtiReqPdu->pdu.pdcch_pdu.coreSetType = CORESET_TYPE0; + + /* Calculating PDU length. Considering only one dl dci pdu for now */ + dlTtiReqPdu->pduSize = sizeof(fapi_dl_pdcch_pdu_t); + + /* Filling Vendor message PDU */ + dlTtiVendorPdu->pdu_type = FAPI_PDCCH_PDU_TYPE; + dlTtiVendorPdu->pdu_size = sizeof(fapi_vendor_dl_pdcch_pdu_t); + dlTtiVendorPdu->pdu.pdcch_pdu.num_dl_dci = dlTtiReqPdu->pdu.pdcch_pdu.numDlDci; + dlTtiVendorPdu->pdu.pdcch_pdu.dl_dci[0].epre_ratio_of_pdcch_to_ssb = 0; + dlTtiVendorPdu->pdu.pdcch_pdu.dl_dci[0].epre_ratio_of_dmrs_to_ssb = 0; + } +} + /******************************************************************* * * @brief fills PDCCH PDU required for DL TTI info in MAC @@ -3119,12 +3175,6 @@ uint8_t fillPdcchPdu(fapi_dl_tti_req_pdu_t *dlTtiReqPdu, fapi_vendor_dl_tti_req_ bwp = &dlSlot->dlInfo.brdcstAlloc.sib1Alloc.bwp; fillSib1DlDciPdu(dlTtiReqPdu->pdu.pdcch_pdu.dlDci, pdcchInfo); } - else if(rntiType == P_RNTI_TYPE) - { - pdcchInfo = &dlSlot->pageAllocInfo->pagePdcchCfg; - bwp = &dlSlot->pageAllocInfo->bwp; - fillPageDlDciPdu(dlTtiReqPdu->pdu.pdcch_pdu.dlDci, dlSlot->pageAllocInfo); - } else if(rntiType == RA_RNTI_TYPE) { pdcchInfo = &dlSlot->dlInfo.rarAlloc[ueIdx]->rarPdcchCfg; @@ -3148,6 +3198,7 @@ uint8_t fillPdcchPdu(fapi_dl_tti_req_pdu_t *dlTtiReqPdu, fapi_vendor_dl_tti_req_ dlTtiReqPdu->pdu.pdcch_pdu.bwpStart = bwp->freqAlloc.startPrb; dlTtiReqPdu->pdu.pdcch_pdu.subCarrierSpacing = bwp->subcarrierSpacing; dlTtiReqPdu->pdu.pdcch_pdu.cyclicPrefix = bwp->cyclicPrefix; + dlTtiReqPdu->pdu.pdcch_pdu.startSymbolIndex = pdcchInfo->coresetCfg.startSymbolIndex; dlTtiReqPdu->pdu.pdcch_pdu.durationSymbols = pdcchInfo->coresetCfg.durationSymbols; memcpy(dlTtiReqPdu->pdu.pdcch_pdu.freqDomainResource, pdcchInfo->coresetCfg.freqDomainResource, 6); @@ -3173,6 +3224,91 @@ uint8_t fillPdcchPdu(fapi_dl_tti_req_pdu_t *dlTtiReqPdu, fapi_vendor_dl_tti_req_ return ROK; } +/******************************************************************* + * + * @brief fills PDSCH PDU from PageAlloc required for DL TTI info in MAC + * + * @details + * + * Function : fillPagePdschPdu + * + * Functionality: + * -Fills the Pdsch PDU info + * stored in MAC + * + * @params[in] Pointer to FAPI DL TTI Req + * Pointer to PdschCfg + * Pointer to msgLen of DL TTI Info + * @return ROK + * + ******************************************************************/ +void fillPagePdschPdu(fapi_dl_tti_req_pdu_t *dlTtiReqPdu, fapi_vendor_dl_tti_req_pdu_t *dlTtiVendorPdu, DlPageAlloc *pageAlloc, + uint16_t pduIndex, MacCellCfg *macCellCfg) +{ + uint8_t idx; + + if(dlTtiReqPdu != NULLP) + { + dlTtiReqPdu->pduType = PDSCH_PDU_TYPE; + memset(&dlTtiReqPdu->pdu.pdsch_pdu, 0, sizeof(fapi_dl_pdsch_pdu_t)); + dlTtiReqPdu->pdu.pdsch_pdu.pduBitMap = 0; /* PTRS and CBG params are excluded */ + dlTtiReqPdu->pdu.pdsch_pdu.rnti = P_RNTI; + dlTtiReqPdu->pdu.pdsch_pdu.pdu_index = pduIndex; + dlTtiReqPdu->pdu.pdsch_pdu.bwpSize = pageAlloc->bwp.freqAlloc.numPrb; + dlTtiReqPdu->pdu.pdsch_pdu.bwpStart = pageAlloc->bwp.freqAlloc.startPrb; + dlTtiReqPdu->pdu.pdsch_pdu.subCarrierSpacing = pageAlloc->bwp.subcarrierSpacing; + dlTtiReqPdu->pdu.pdsch_pdu.cyclicPrefix = pageAlloc->bwp.cyclicPrefix; + dlTtiReqPdu->pdu.pdsch_pdu.nrOfCodeWords = 1; + for(idx = 0; idx < MAX_CODEWORDS ; idx++) + { + dlTtiReqPdu->pdu.pdsch_pdu.cwInfo[idx].targetCodeRate = 308; + dlTtiReqPdu->pdu.pdsch_pdu.cwInfo[idx].qamModOrder = 2; + dlTtiReqPdu->pdu.pdsch_pdu.cwInfo[idx].mcsIndex = pageAlloc->pageDlSch.tbInfo.mcs; + dlTtiReqPdu->pdu.pdsch_pdu.cwInfo[idx].mcsTable = 0; + dlTtiReqPdu->pdu.pdsch_pdu.cwInfo[idx].rvIndex = 0; + dlTtiReqPdu->pdu.pdsch_pdu.cwInfo[idx].tbSize = pageAlloc->pageDlSch.tbInfo.tbSize; + } + dlTtiReqPdu->pdu.pdsch_pdu.dataScramblingId = macCellCfg->cellCfg.phyCellId; + dlTtiReqPdu->pdu.pdsch_pdu.nrOfLayers = 1; + dlTtiReqPdu->pdu.pdsch_pdu.transmissionScheme = 0; + dlTtiReqPdu->pdu.pdsch_pdu.refPoint = 0; + dlTtiReqPdu->pdu.pdsch_pdu.dlDmrsSymbPos = DL_DMRS_SYMBOL_POS; + dlTtiReqPdu->pdu.pdsch_pdu.dmrsConfigType = pageAlloc->pageDlSch.dmrs.dmrsType; + dlTtiReqPdu->pdu.pdsch_pdu.dlDmrsScramblingId = macCellCfg->cellCfg.phyCellId; + dlTtiReqPdu->pdu.pdsch_pdu.scid = 0; + dlTtiReqPdu->pdu.pdsch_pdu.numDmrsCdmGrpsNoData = 1; + dlTtiReqPdu->pdu.pdsch_pdu.dmrsPorts = 0x0001; + dlTtiReqPdu->pdu.pdsch_pdu.resourceAlloc = 1; + /* since we are using type-1, hence rbBitmap excluded */ + dlTtiReqPdu->pdu.pdsch_pdu.rbStart = pageAlloc->pageDlSch.freqAlloc.startPrb; + dlTtiReqPdu->pdu.pdsch_pdu.rbSize = pageAlloc->pageDlSch.freqAlloc.numPrb; + dlTtiReqPdu->pdu.pdsch_pdu.vrbToPrbMapping = pageAlloc->pageDlSch.vrbPrbMapping; + dlTtiReqPdu->pdu.pdsch_pdu.startSymbIndex = pageAlloc->pageDlSch.timeAlloc.startSymb; + dlTtiReqPdu->pdu.pdsch_pdu.nrOfSymbols = pageAlloc->pageDlSch.timeAlloc.numSymb; + dlTtiReqPdu->pdu.pdsch_pdu.preCodingAndBeamforming.numPrgs = 1; + dlTtiReqPdu->pdu.pdsch_pdu.preCodingAndBeamforming.prgSize = 0; + dlTtiReqPdu->pdu.pdsch_pdu.preCodingAndBeamforming.digBfInterfaces = 0; + dlTtiReqPdu->pdu.pdsch_pdu.preCodingAndBeamforming.pmi_bfi[0].pmIdx = 0; + dlTtiReqPdu->pdu.pdsch_pdu.preCodingAndBeamforming.pmi_bfi[0].beamIdx[0].beamidx = 0; + dlTtiReqPdu->pdu.pdsch_pdu.powerControlOffset = 0; + dlTtiReqPdu->pdu.pdsch_pdu.powerControlOffsetSS = 0; + dlTtiReqPdu->pdu.pdsch_pdu.mappingType = pageAlloc->pageDlSch.timeAlloc.mappingType; + dlTtiReqPdu->pdu.pdsch_pdu.nrOfDmrsSymbols = pageAlloc->pageDlSch.dmrs.nrOfDmrsSymbols; + dlTtiReqPdu->pdu.pdsch_pdu.dmrsAddPos = pageAlloc->pageDlSch.dmrs.dmrsAddPos; + + dlTtiReqPdu->pduSize = sizeof(fapi_dl_pdsch_pdu_t); + + /* DL TTI Request vendor message */ + dlTtiVendorPdu->pdu_type = FAPI_PDSCH_PDU_TYPE; + dlTtiVendorPdu->pdu_size = sizeof(fapi_vendor_dl_pdsch_pdu_t); + dlTtiVendorPdu->pdu.pdsch_pdu.nr_of_antenna_ports = 1; + for(int i =0; i< FAPI_VENDOR_MAX_TXRU_NUM; i++) + { + dlTtiVendorPdu->pdu.pdsch_pdu.tx_ru_idx[i] =0; + } + } +} + /******************************************************************* * * @brief fills PDSCH PDU required for DL TTI info in MAC @@ -3457,8 +3593,7 @@ uint8_t fillSib1TxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, MacCel * @return ROK * * ********************************************************************/ -uint8_t fillPageTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, DlPageAlloc *pageAllocInfo, - PdschCfg pdschCfg) +uint8_t fillPageTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, DlPageAlloc *pageAllocInfo) { uint32_t payloadSize = 0; uint8_t *pagePayload = NULLP; @@ -3471,7 +3606,7 @@ uint8_t fillPageTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, DlPage pduDesc[pduIndex].num_tlvs = 1; /* fill the TLV */ - payloadSize = pdschCfg.codeword[0].tbSize; + payloadSize = pageAllocInfo->pageDlSch.tbInfo.tbSize; pduDesc[pduIndex].tlvs[0].tl.tag = ((payloadSize & 0xff0000) >> 8) | FAPI_TX_DATA_PTR_TO_PAYLOAD_64; pduDesc[pduIndex].tlvs[0].tl.length = (payloadSize & 0x0000ffff); LWR_MAC_ALLOC(pagePayload, payloadSize); @@ -3481,8 +3616,8 @@ uint8_t fillPageTxDataReq(fapi_tx_pdu_desc_t *pduDesc, uint16_t pduIndex, DlPage } payloadElem = (fapi_api_queue_elem_t *)pagePayload; FILL_FAPI_LIST_ELEM(payloadElem, NULLP, FAPI_VENDOR_MSG_PHY_ZBC_BLOCK_REQ, 1, \ - pageAllocInfo->dlPagePduLen); - memcpy(pagePayload + TX_PAYLOAD_HDR_LEN, pageAllocInfo->dlPagePdu, pageAllocInfo->dlPagePduLen); + pageAllocInfo->pageDlSch.dlPagePduLen); + memcpy(pagePayload + TX_PAYLOAD_HDR_LEN, pageAllocInfo->pageDlSch.dlPagePdu, pageAllocInfo->pageDlSch.dlPagePduLen); #ifdef INTEL_WLS_MEM mtGetWlsHdl(&wlsHdlr); @@ -3773,13 +3908,11 @@ uint16_t fillDlTtiReq(SlotTimingInfo currTimingInfo) if(numPduEncoded != nPdu) { rntiType = P_RNTI_TYPE; - fillPdcchPdu(&dlTtiReq->pdus[numPduEncoded], &vendorMsg->p7_req_vendor.dl_tti_req.pdus[numPduEncoded], currDlSlot, -1, \ - rntiType, CORESET_TYPE0, MAX_NUM_UE); + fillPagePdcchPdu(&dlTtiReq->pdus[numPduEncoded], &vendorMsg->p7_req_vendor.dl_tti_req.pdus[numPduEncoded], \ + currDlSlot->pageAllocInfo, &macCellCfg); numPduEncoded++; - fillPdschPdu(&dlTtiReq->pdus[numPduEncoded], &vendorMsg->p7_req_vendor.dl_tti_req.pdus[numPduEncoded], - &currDlSlot->pageAllocInfo->pagePdschCfg, - currDlSlot->pageAllocInfo->bwp, - pduIndex); + fillPagePdschPdu(&dlTtiReq->pdus[numPduEncoded], &vendorMsg->p7_req_vendor.dl_tti_req.pdus[numPduEncoded], + currDlSlot->pageAllocInfo, pduIndex, &macCellCfg); dlTtiReq->ue_grp_info[dlTtiReq->nGroup].pduIdx[pduIndex] = pduIndex; pduIndex++; numPduEncoded++; @@ -4009,11 +4142,10 @@ uint16_t sendTxDataReq(SlotTimingInfo currTimingInfo, MacDlSlot *dlSlot, p_fapi_ } if(dlSlot->pageAllocInfo != NULLP) { - fillPageTxDataReq(txDataReq->pdu_desc, pduIndex, dlSlot->pageAllocInfo, \ - dlSlot->pageAllocInfo->pagePdschCfg); + fillPageTxDataReq(txDataReq->pdu_desc, pduIndex, dlSlot->pageAllocInfo); pduIndex++; txDataReq->num_pdus++; - MAC_FREE(dlSlot->pageAllocInfo->dlPagePdu, sizeof(dlSlot->pageAllocInfo->dlPagePduLen)); + MAC_FREE(dlSlot->pageAllocInfo->pageDlSch.dlPagePdu, sizeof(dlSlot->pageAllocInfo->pageDlSch.dlPagePduLen)); MAC_FREE(dlSlot->pageAllocInfo,sizeof(DlPageAlloc)); } diff --git a/src/5gnrmac/mac_slot_ind.c b/src/5gnrmac/mac_slot_ind.c index d18588da1..042c89d2c 100644 --- a/src/5gnrmac/mac_slot_ind.c +++ b/src/5gnrmac/mac_slot_ind.c @@ -217,8 +217,6 @@ uint8_t MacProcDlPageAlloc(Pst *pst, DlPageAlloc *dlPageAlloc) return RFAILED; } memcpy(currDlSlot->pageAllocInfo, dlPageAlloc, sizeof(DlPageAlloc)); - currDlSlot->pageAllocInfo->pagePdcchCfg.dci.pdschCfg = \ - &currDlSlot->pageAllocInfo->pagePdschCfg; } else { diff --git a/src/5gnrsch/sch.c b/src/5gnrsch/sch.c index 85f6d76d8..3c8d5fe3b 100644 --- a/src/5gnrsch/sch.c +++ b/src/5gnrsch/sch.c @@ -738,7 +738,7 @@ uint8_t fillSchSib1Cfg(uint8_t mu, uint8_t bandwidth, uint8_t numSlots,SchPdcchC pdsch->numLayers = 1; pdsch->transmissionScheme = 0; pdsch->refPoint = 0; - pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ + pdsch->dmrs.dlDmrsSymbPos = DL_DMRS_SYMBOL_POS; pdsch->dmrs.dmrsConfigType = 0; /* type-1 */ pdsch->dmrs.dlDmrsScramblingId = pci; pdsch->dmrs.scid = 0; diff --git a/src/5gnrsch/sch.h b/src/5gnrsch/sch.h index 169ef8c13..44149aad1 100644 --- a/src/5gnrsch/sch.h +++ b/src/5gnrsch/sch.h @@ -745,7 +745,7 @@ void updateBsrAndLcList(CmLListCp *lcLL, BsrInfo *bsrInfo, uint8_t status); void schProcPagingCfg(SchCellCb *cell); void schCfgPdcchMonOccOfPO(SchCellCb *cell); void schIncrSlot(SlotTimingInfo *timingInfo, uint8_t incr, uint16_t numSlotsPerRF); -uint8_t schFillPagePdschCfg(SchCellCb *cell, PdschCfg *pagePdschCfg, SlotTimingInfo slotTime, \ +uint8_t schFillPagePdschCfg(SchCellCb *cell, PageDlSch *pageDlSch, SlotTimingInfo slotTime, \ uint16_t tbSize, uint8_t mcs, uint16_t startPrb); /*DL HARQ Functions*/ void schDlHqEntInit(SchCellCb *cellCb, SchUeCb *ueCb); diff --git a/src/5gnrsch/sch_common.c b/src/5gnrsch/sch_common.c index 6b01730c0..cb97e8f6e 100644 --- a/src/5gnrsch/sch_common.c +++ b/src/5gnrsch/sch_common.c @@ -671,7 +671,7 @@ uint8_t schDlRsrcAllocMsg4(SchCellCb *cell, SlotTimingInfo msg4Time, uint8_t ueI pdsch->numLayers = 1; pdsch->transmissionScheme = 0; pdsch->refPoint = 0; - pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ + pdsch->dmrs.dlDmrsSymbPos = DL_DMRS_SYMBOL_POS; pdsch->dmrs.dmrsConfigType = 0; /* type-1 */ pdsch->dmrs.dlDmrsScramblingId = cell->cellCfg.phyCellId; pdsch->dmrs.scid = 0; @@ -864,7 +864,7 @@ uint8_t schDlRsrcAllocDlMsg(SchCellCb *cell, SlotTimingInfo slotTime, uint16_t c pdsch->numLayers = 1; pdsch->transmissionScheme = 0; pdsch->refPoint = 0; - pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ + pdsch->dmrs.dlDmrsSymbPos = DL_DMRS_SYMBOL_POS; pdsch->dmrs.dmrsConfigType = 0; /* type-1 */ pdsch->dmrs.dlDmrsScramblingId = cell->cellCfg.phyCellId; pdsch->dmrs.scid = 0; @@ -2056,83 +2056,51 @@ void schIncrSlot(SlotTimingInfo *timingInfo, uint8_t incr, uint16_t numSlotsPerR * @return pointer to return Value(ROK, RFAILED) * * ****************************************************************/ -uint8_t schFillPagePdschCfg(SchCellCb *cell, PdschCfg *pagePdschCfg, SlotTimingInfo slotTime, uint16_t tbSize, uint8_t mcs, uint16_t startPrb) +uint8_t schFillPagePdschCfg(SchCellCb *cell, PageDlSch *pageDlSch, SlotTimingInfo slotTime, uint16_t tbSize, uint8_t mcs, uint16_t startPrb) { - uint8_t cwCount = 0; uint8_t dmrsStartSymbol, startSymbol, numSymbol; /* fill the PDSCH PDU */ - pagePdschCfg->pduBitmap = 0; /* PTRS and CBG params are excluded */ - pagePdschCfg->rnti = P_RNTI; /* SI-RNTI */ - pagePdschCfg->pduIndex = 0; - pagePdschCfg->numCodewords = 1; - for(cwCount = 0; cwCount < pagePdschCfg->numCodewords; cwCount++) - { - pagePdschCfg->codeword[cwCount].targetCodeRate = 308; - pagePdschCfg->codeword[cwCount].qamModOrder = 2; - pagePdschCfg->codeword[cwCount].mcsIndex = mcs; - pagePdschCfg->codeword[cwCount].mcsTable = 0; /* notqam256 */ - pagePdschCfg->codeword[cwCount].rvIndex = 0; - tbSize = tbSize + TX_PAYLOAD_HDR_LEN; - pagePdschCfg->codeword[cwCount].tbSize = tbSize; - } - pagePdschCfg->dataScramblingId = cell->cellCfg.phyCellId; - pagePdschCfg->numLayers = 1; - pagePdschCfg->transmissionScheme = 0; - pagePdschCfg->refPoint = 0; - pagePdschCfg->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ - pagePdschCfg->dmrs.dmrsConfigType = 0; /* type-1 */ - pagePdschCfg->dmrs.dlDmrsScramblingId = cell->cellCfg.phyCellId; - pagePdschCfg->dmrs.scid = 0; - pagePdschCfg->dmrs.numDmrsCdmGrpsNoData = 1; - pagePdschCfg->dmrs.dmrsPorts = 0x0001; - pagePdschCfg->dmrs.mappingType = DMRS_MAP_TYPE_A; /* Type-A */ - pagePdschCfg->dmrs.nrOfDmrsSymbols = NUM_DMRS_SYMBOLS; - pagePdschCfg->dmrs.dmrsAddPos = DMRS_ADDITIONAL_POS; - - pagePdschCfg->pdschFreqAlloc.resourceAllocType = 1; /* RAT type-1 RIV format */ + pageDlSch->tbInfo.mcs = mcs; + tbSize = tbSize + TX_PAYLOAD_HDR_LEN; + pageDlSch->tbInfo.tbSize = tbSize; + pageDlSch->dmrs.dmrsType = 0; /* type-1 */ + pageDlSch->dmrs.nrOfDmrsSymbols = NUM_DMRS_SYMBOLS; + pageDlSch->dmrs.dmrsAddPos = DMRS_ADDITIONAL_POS; + /* the RB numbering starts from coreset0, and PDSCH is always above SSB */ - pagePdschCfg->pdschFreqAlloc.startPrb = startPrb; - pagePdschCfg->pdschFreqAlloc.numPrb = schCalcNumPrb(tbSize, mcs, NUM_PDSCH_SYMBOL); - pagePdschCfg->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */ - pagePdschCfg->pdschTimeAlloc.rowIndex = 1; + pageDlSch->freqAlloc.startPrb = startPrb; + pageDlSch->freqAlloc.numPrb = schCalcNumPrb(tbSize, mcs, NUM_PDSCH_SYMBOL); + pageDlSch->vrbPrbMapping = 0; /* non-interleaved */ /* This is Intel's requirement. PDSCH should start after PDSCH DRMS symbol */ - pagePdschCfg->pdschTimeAlloc.startSymb = 3; /* spec-38.214, Table 5.1.2.1-1 */ - pagePdschCfg->pdschTimeAlloc.numSymb = NUM_PDSCH_SYMBOL; + pageDlSch->timeAlloc.mappingType = DMRS_MAP_TYPE_A; /* Type-A */ + pageDlSch->timeAlloc.startSymb = 3; /* spec-38.214, Table 5.1.2.1-1 */ + pageDlSch->timeAlloc.numSymb = NUM_PDSCH_SYMBOL; /* Find total symbols occupied including DMRS */ - dmrsStartSymbol = findDmrsStartSymbol(pagePdschCfg->dmrs.dlDmrsSymbPos); + dmrsStartSymbol = findDmrsStartSymbol(4); /* If there are no DRMS symbols, findDmrsStartSymbol() returns MAX_SYMB_PER_SLOT, * in that case only PDSCH symbols are marked as occupied */ if(dmrsStartSymbol == MAX_SYMB_PER_SLOT) { - startSymbol = pagePdschCfg->pdschTimeAlloc.startSymb; - numSymbol = pagePdschCfg->pdschTimeAlloc.numSymb; + startSymbol = pageDlSch->timeAlloc.startSymb; + numSymbol = pageDlSch->timeAlloc.numSymb; } /* If DMRS symbol is found, mark DMRS and PDSCH symbols as occupied */ else { startSymbol = dmrsStartSymbol; - numSymbol = pagePdschCfg->dmrs.nrOfDmrsSymbols + pagePdschCfg->pdschTimeAlloc.numSymb; + numSymbol = pageDlSch->dmrs.nrOfDmrsSymbols + pageDlSch->timeAlloc.numSymb; } /* Allocate the number of PRBs required for DL PDSCH */ if((allocatePrbDl(cell, slotTime, startSymbol, numSymbol,\ - &pagePdschCfg->pdschFreqAlloc.startPrb, pagePdschCfg->pdschFreqAlloc.numPrb)) != ROK) + &pageDlSch->freqAlloc.startPrb, pageDlSch->freqAlloc.numPrb)) != ROK) { DU_LOG("\nERROR --> SCH : allocatePrbDl() failed for DL MSG"); return RFAILED; } - - pagePdschCfg->beamPdschInfo.numPrgs = 1; - pagePdschCfg->beamPdschInfo.prgSize = 1; - pagePdschCfg->beamPdschInfo.digBfInterfaces = 0; - pagePdschCfg->beamPdschInfo.prg[0].pmIdx = 0; - pagePdschCfg->beamPdschInfo.prg[0].beamIdx[0] = 0; - pagePdschCfg->txPdschPower.powerControlOffset = 0; - pagePdschCfg->txPdschPower.powerControlOffsetSS = 0; - return ROK; } diff --git a/src/5gnrsch/sch_rach.c b/src/5gnrsch/sch_rach.c index ed8414b78..461d766d7 100644 --- a/src/5gnrsch/sch_rach.c +++ b/src/5gnrsch/sch_rach.c @@ -82,7 +82,7 @@ bool schCheckPrachOcc(SchCellCb *cell, SlotTimingInfo prachOccasionTimingInfo) /* prach ocassion present in this subframe */ #ifdef NR_TDD if(UL_SLOT != schGetSlotSymbFrmt(prachOccasionTimingInfo.slot % cell->numSlotsInPeriodicity,\ - cell->slotFrmtBitMap)) + cell->slotFrmtBitMap)) { DU_LOG("\nERROR --> SCH : PrachCfgIdx %d doesn't support UL slot", prachCfgIdx); return FALSE; @@ -938,7 +938,7 @@ uint8_t schFillRar(SchCellCb *cell, SlotTimingInfo rarTime, uint16_t ueId, RarAl pdsch->numLayers = 1; pdsch->transmissionScheme = 0; pdsch->refPoint = 0; - pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ + pdsch->dmrs.dlDmrsSymbPos = DL_DMRS_SYMBOL_POS; pdsch->dmrs.dmrsConfigType = 0; /* type-1 */ pdsch->dmrs.dlDmrsScramblingId = cell->cellCfg.phyCellId; pdsch->dmrs.scid = 0; diff --git a/src/5gnrsch/sch_slot_ind.c b/src/5gnrsch/sch_slot_ind.c index cd425b8f2..861d14a61 100644 --- a/src/5gnrsch/sch_slot_ind.c +++ b/src/5gnrsch/sch_slot_ind.c @@ -553,38 +553,45 @@ uint8_t schProcDlPageAlloc(SchCellCb *cell, SlotTimingInfo currTime, Inst schIns break; } /*Fill PDCCH: PDCCH Cfg is same as SIB1 as Paging will be a broadcast message*/ - memcpy(&dlPageAlloc.pagePdcchCfg, &cell->sib1SchCfg.sib1PdcchCfg, sizeof(PdcchCfg)); - dlPageAlloc.pagePdcchCfg.dci.rnti = P_RNTI; - + memcpy(dlPageAlloc.pageDlDci.freqDomainResource, cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.freqDomainResource, 6 * sizeof(uint8_t)); + dlPageAlloc.pageDlDci.durationSymbols = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.durationSymbols; + dlPageAlloc.pageDlDci.cceRegMappingType = INTERLEAVED_CCE_REG_MAPPING; + dlPageAlloc.pageDlDci.cceReg.interleaved.regBundleSize = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.regBundleSize; + dlPageAlloc.pageDlDci.cceReg.interleaved.interleaverSize = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.interleaverSize; + dlPageAlloc.pageDlDci.cceReg.interleaved.shiftIndex = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.shiftIndex; + dlPageAlloc.pageDlDci.ssStartSymbolIndex = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.startSymbolIndex; + dlPageAlloc.pageDlDci.cceIndex = cell->sib1SchCfg.sib1PdcchCfg.dci.cceIndex; + dlPageAlloc.pageDlDci.aggregLevel = cell->sib1SchCfg.sib1PdcchCfg.dci.aggregLevel; + dlPageAlloc.pageDlDci.precoderGranularity = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.precoderGranularity; + dlPageAlloc.pageDlDci.coreSetSize = cell->sib1SchCfg.sib1PdcchCfg.coresetCfg.coreSetSize; /*Fill BWP*/ memcpy(&dlPageAlloc.bwp, &cell->sib1SchCfg.bwp, sizeof(BwpCfg)); /*Fill PDSCH*/ - if(schFillPagePdschCfg(cell, &dlPageAlloc.pagePdschCfg, pdschTime, tbSize, pageInfo->mcs, startPrb) != ROK) + if(schFillPagePdschCfg(cell, &dlPageAlloc.pageDlSch, pdschTime, tbSize, pageInfo->mcs, startPrb) != ROK) { DU_LOG("\nERROR --> SCH: Issue in PDSCH Allocation for Paging at SFN:%d, SLOT:%d",\ pdschTime.sfn, pdschTime.slot); break; } - dlPageAlloc.pagePdcchCfg.dci.pdschCfg = &dlPageAlloc.pagePdschCfg; /*Fill Page PDU information*/ - dlPageAlloc.dlPagePduLen = pageInfo->msgLen; + dlPageAlloc.pageDlSch.dlPagePduLen = pageInfo->msgLen; - SCH_ALLOC(dlPageAlloc.dlPagePdu, sizeof(dlPageAlloc.dlPagePduLen)); + SCH_ALLOC(dlPageAlloc.pageDlSch.dlPagePdu, sizeof(dlPageAlloc.pageDlSch.dlPagePduLen)); - if(dlPageAlloc.dlPagePdu == NULLP) + if(dlPageAlloc.pageDlSch.dlPagePdu == NULLP) { DU_LOG("\nERROR --> SCH: Memory Allocation Failed during Page Resource allocation"); break; } - memcpy(dlPageAlloc.dlPagePdu, pageInfo->pagePdu, dlPageAlloc.dlPagePduLen); + memcpy(dlPageAlloc.pageDlSch.dlPagePdu, pageInfo->pagePdu, dlPageAlloc.pageDlSch.dlPagePduLen); /* Send msg to MAC */ if(sendDlPageAllocToMac(&dlPageAlloc, schInst) != ROK) { DU_LOG("\nERROR --> SCH : Sending DL Paging allocation from SCH to MAC failed"); - SCH_FREE(dlPageAlloc.dlPagePdu, sizeof(dlPageAlloc.dlPagePduLen)); + SCH_FREE(dlPageAlloc.pageDlSch.dlPagePdu, sizeof(dlPageAlloc.pageDlSch.dlPagePduLen)); break; } ret = ROK; diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index 5851797cc..2c7d5ceea 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -107,6 +107,7 @@ #define DEFAULT_K2_VALUE_FOR_SCS120 3 #define MAX_PLMN 2 +#define DL_DMRS_SYMBOL_POS 4 /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */ #define ADD_DELTA_TO_TIME(crntTime, toFill, incr, numOfSlot) \ { \ @@ -1124,6 +1125,65 @@ typedef struct dlSchedInfo }DlSchedInfo; +/*Reference: O-RAN.WG8.AAD.v7.0.0, Sec 11.2.3.3.13 Downlink Paging Allocation*/ +typedef struct interleaved_t +{ + uint8_t regBundleSize; + uint8_t interleaverSize; + uint16_t shiftIndex; +}Interleaved; + +typedef struct pageDlDci +{ + uint8_t freqDomainResource[6]; + uint8_t durationSymbols; + uint8_t cceRegMappingType; + union + { + Interleaved interleaved; + uint8_t nonInterleaved; + }cceReg; + uint8_t ssStartSymbolIndex; + uint8_t cceIndex; + uint8_t aggregLevel; + uint8_t precoderGranularity; + uint8_t coreSetSize; +}PageDlDci; + +typedef struct resAllocType1 PageFreqDomainAlloc; + +typedef struct pageTimeDomainAlloc +{ + uint8_t mappingType; + uint16_t startSymb; + uint16_t numSymb; +}PageTimeDomainAlloc; + +typedef struct pageDmrsConfig +{ + uint8_t dmrsType; + uint8_t dmrsAddPos; + uint8_t nrOfDmrsSymbols; +}PageDmrsConfig; + +typedef struct pageTbInfo +{ + uint8_t mcs; + uint32_t tbSize; +}PageTbInfo; + +typedef struct pageDlSch +{ + PageFreqDomainAlloc freqAlloc; + PageTimeDomainAlloc timeAlloc; + PageDmrsConfig dmrs; + uint8_t vrbPrbMapping; + PageTbInfo tbInfo; + uint8_t tbScaling; + uint16_t dlPagePduLen; + uint8_t *dlPagePdu; +}PageDlSch; + typedef struct dlPageAlloc { uint16_t cellId; @@ -1132,10 +1192,8 @@ typedef struct dlPageAlloc bool shortMsgInd; uint8_t shortMsg; BwpCfg bwp; - PdcchCfg pagePdcchCfg; - PdschCfg pagePdschCfg; - uint16_t dlPagePduLen; - uint8_t *dlPagePdu; + PageDlDci pageDlDci; + PageDlSch pageDlSch; }DlPageAlloc; typedef struct tbInfo