X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_common.c;h=89f565ecdc444ed6e8a1081772b835680fd3d57f;hb=e97e12fe1ca460ef5437675bb94ad61740cf29e2;hp=3cd0ff241393ed4d7e750cea33956232dcd1a9cf;hpb=154ac5a3676b120c741184f7e58627df8003b5c0;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_common.c b/src/5gnrsch/sch_common.c index 3cd0ff241..89f565ecd 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,21 @@ 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); + 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 +435,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 +503,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)); }