From: barveankit Date: Thu, 18 Nov 2021 08:03:13 +0000 (+0530) Subject: [ODUHIGH-343]: PUCCH resource allocation (check for SR PRBs, if unavailable block... X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=c46d30fda6e5c60d375d72205da8197815b12d98;p=o-du%2Fl2.git [ODUHIGH-343]: PUCCH resource allocation (check for SR PRBs, if unavailable block SR scheduling) Change-Id: Ic21e6c51241bc8baa731073e918e096dac16037e Signed-off-by: barveankit --- diff --git a/src/5gnrsch/sch_common.c b/src/5gnrsch/sch_common.c index fa396ef11..55a6537d4 100644 --- a/src/5gnrsch/sch_common.c +++ b/src/5gnrsch/sch_common.c @@ -320,12 +320,14 @@ uint8_t fillUlSchedPucchFormat(uint8_t pucchFormat, SchPucchInfo *ulSchedPucch,\ * @return void **/ -uint8_t fillUlSchedPucchDedicatedCfg(uint16_t numSlots, SchPucchCfg *pucchDedCfg,\ +uint8_t fillUlSchedPucchDedicatedCfg(SchCellCb *cell, SchPucchCfg *pucchDedCfg,\ SlotTimingInfo *slotInfo, SchPucchInfo *ulSchedPucch) { uint8_t ret, resrcSetIdx, resrcIdx, schedReqIdx, srPeriodicity = 0; uint16_t srOffset = 0; - + uint16_t numSlots = cell->numSlots; + bool isAllocated = false; + uint16_t pucchStartPrb; ret = ROK; if(pucchDedCfg->resrcSet && pucchDedCfg->resrc) { @@ -335,20 +337,31 @@ uint8_t fillUlSchedPucchDedicatedCfg(uint16_t numSlots, SchPucchCfg *pucchDedCfg for(resrcIdx = 0; resrcIdx < pucchDedCfg->resrc->resrcToAddModListCount; resrcIdx++) { if(pucchDedCfg->resrcSet->resrcSetToAddModList[resrcSetIdx].resrcList[resrcSetIdx] ==\ - pucchDedCfg->resrc->resrcToAddModList[resrcIdx].resrcId) - { + pucchDedCfg->resrc->resrcToAddModList[resrcIdx].resrcId) + { ulSchedPucch->intraFreqHop = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].intraFreqHop; ulSchedPucch->secondPrbHop = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].secondPrbHop; ulSchedPucch->fdAlloc.startPrb = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].startPrb; - ulSchedPucch->pucchFormat = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].pucchFormat; - ret = fillUlSchedPucchFormat(ulSchedPucch->pucchFormat, ulSchedPucch,\ - &pucchDedCfg->resrc->resrcToAddModList[resrcIdx], NULLP); - if(ret == RFAILED) - return ret; - } + ulSchedPucch->pucchFormat = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].pucchFormat; + ret = fillUlSchedPucchFormat(ulSchedPucch->pucchFormat, ulSchedPucch,\ + &pucchDedCfg->resrc->resrcToAddModList[resrcIdx], NULLP); + if(ret == RFAILED) + return ret; + + pucchStartPrb = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].startPrb; + ret = allocatePrbUl(cell, *slotInfo, ulSchedPucch->tdAlloc.startSymb, ulSchedPucch->tdAlloc.numSymb, &pucchStartPrb, PUCCH_NUM_PRB_FORMAT_0_1_4); + if(ret == ROK) + { + isAllocated = true; + break; + } + } } + if(isAllocated) + break; } } + if(pucchDedCfg->format1) { memset(&ulSchedPucch->cmnFormatCfg, 0, sizeof(SchPucchFormatCfg)); @@ -356,7 +369,12 @@ uint8_t fillUlSchedPucchDedicatedCfg(uint16_t numSlots, SchPucchCfg *pucchDedCfg if(ret == RFAILED) return ret; } - + + if(!isAllocated) + { + return RFAILED; + } + /* setting SR and UCI flag */ if(pucchDedCfg->schedReq) { @@ -388,19 +406,20 @@ uint8_t fillUlSchedPucchDedicatedCfg(uint16_t numSlots, SchPucchCfg *pucchDedCfg * @return ROK/RFAILED **/ -uint16_t fillPucchResourceInfo(SchPucchInfo *schPucchInfo, Inst inst) +uint16_t fillPucchResourceInfo(SchPucchInfo *schPucchInfo, Inst inst, SlotTimingInfo slotInfo) { uint8_t ret = ROK, ueIdx = 0, pucchIdx = 0; SchCellCb *cell = schCb[inst].cells[inst]; SchPucchCfgCmn *pucchCfg = NULLP; SchBwpParams *ulBwp = NULLP; + uint16_t startPrb; GET_UE_IDX(schPucchInfo->rnti, ueIdx); if(cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfgPres) { /* fill pucch dedicated cfg */ - ret = fillUlSchedPucchDedicatedCfg(cell->numSlots,\ - &cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfg, &cell->slotInfo, schPucchInfo); + ret = fillUlSchedPucchDedicatedCfg(cell,\ + &cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfg, &slotInfo, schPucchInfo); if(ret == RFAILED) { memset(schPucchInfo, 0, sizeof(SchPucchInfo)); @@ -415,15 +434,21 @@ uint16_t fillPucchResourceInfo(SchPucchInfo *schPucchInfo, Inst inst) pucchCfg = &cell->cellCfg.schInitialUlBwp.pucchCommon; pucchIdx = pucchCfg->pucchResourceCommon; ulBwp = &cell->cellCfg.schInitialUlBwp.bwp; - schPucchInfo->fdAlloc.startPrb = ulBwp->freqAlloc.startPrb + pucchResourceSet[pucchIdx][3]; - schPucchInfo->fdAlloc.numPrb = PUCCH_NUM_PRB_FORMAT_0_1_4; - schPucchInfo->tdAlloc.startSymb = pucchResourceSet[pucchIdx][1]; - schPucchInfo->tdAlloc.numSymb = pucchResourceSet[pucchIdx][2]; - schPucchInfo->pucchFormat = pucchResourceSet[pucchIdx][0]; - - /* set SR and UCI flag to false */ - schPucchInfo->srFlag = true; - schPucchInfo->uciFlag = true; + startPrb = ulBwp->freqAlloc.startPrb + pucchResourceSet[pucchIdx][3]; + ret = allocatePrbUl(cell, slotInfo, pucchResourceSet[pucchIdx][1], pucchResourceSet[pucchIdx][2],\ + &startPrb, PUCCH_NUM_PRB_FORMAT_0_1_4); + if (ret == ROK) + { + schPucchInfo->fdAlloc.startPrb = ulBwp->freqAlloc.startPrb + pucchResourceSet[pucchIdx][3]; + schPucchInfo->fdAlloc.numPrb = PUCCH_NUM_PRB_FORMAT_0_1_4; + schPucchInfo->tdAlloc.startSymb = pucchResourceSet[pucchIdx][1]; + schPucchInfo->tdAlloc.numSymb = pucchResourceSet[pucchIdx][2]; + schPucchInfo->pucchFormat = pucchResourceSet[pucchIdx][0]; + + /* set SR and UCI flag to false */ + schPucchInfo->srFlag = true; + schPucchInfo->uciFlag = true; + } } /* set HARQ flag to true */ schPucchInfo->harqFlag = true; @@ -477,10 +502,13 @@ uint8_t schUlResAlloc(SchCellCb *cell, Inst schInst) if(schUlSlotInfo->pucchPres) { - ulSchedInfo.dataType |= SCH_DATATYPE_UCI; - fillPucchResourceInfo(&schUlSlotInfo->schPucchInfo, schInst); - memcpy(&ulSchedInfo.schPucchInfo, &schUlSlotInfo->schPucchInfo, - sizeof(SchPucchInfo)); + ret = fillPucchResourceInfo(&schUlSlotInfo->schPucchInfo, schInst, ulTimingInfo); + if (ret == ROK) + { + ulSchedInfo.dataType |= SCH_DATATYPE_UCI; + memcpy(&ulSchedInfo.schPucchInfo, &schUlSlotInfo->schPucchInfo, + sizeof(SchPucchInfo)); + } memset(&schUlSlotInfo->schPucchInfo, 0, sizeof(SchPucchInfo)); }