{
uint8_t dmrsStartSymbol, startSymbol, numSymbol ;
DmrsInfo dmrs;
- FreqDomainAlloc freqAlloc;
+ ResAllocType1 freqAlloc;
TimeDomainAlloc timeAlloc;
SchDlSlotInfo *schDlSlotInfo = NULLP;
{
if(resrcInfo->SchPucchFormat.format0)
{
- ulSchedPucch->fdAlloc.numPrb = PUCCH_NUM_PRB_FORMAT_0_1_4;
+ ulSchedPucch->fdAlloc.resAlloc.type1.numPrb = PUCCH_NUM_PRB_FORMAT_0_1_4;
ulSchedPucch->pucchFormat = PUCCH_FORMAT_0;
ulSchedPucch->initialCyclicShift = resrcInfo->SchPucchFormat.format0->initialCyclicShift;
ulSchedPucch->tdAlloc.numSymb = resrcInfo->SchPucchFormat.format0->numSymbols;
{
if(resrcInfo->SchPucchFormat.format1)
{
- ulSchedPucch->fdAlloc.numPrb = PUCCH_NUM_PRB_FORMAT_0_1_4;
+ ulSchedPucch->fdAlloc.resAlloc.type1.numPrb = PUCCH_NUM_PRB_FORMAT_0_1_4;
ulSchedPucch->pucchFormat = PUCCH_FORMAT_1;
ulSchedPucch->initialCyclicShift = resrcInfo->SchPucchFormat.format1->initialCyclicShift;
ulSchedPucch->tdAlloc.numSymb = resrcInfo->SchPucchFormat.format1->numSymbols;
{
case PUCCH_FORMAT_0:
{
- if(resrcInfo)
+ if(resrcInfo)
fillPucchFormat0(ulSchedPucch, resrcInfo);
return ret;
- }
+ }
case PUCCH_FORMAT_1:
{
- if(resrcInfo)
- {
+ if(resrcInfo)
+ {
fillPucchFormat1(ulSchedPucch, resrcInfo);
- }
- if(formatCfg)
- {
- memcpy(&ulSchedPucch->cmnFormatCfg, formatCfg, sizeof(SchPucchFormatCfg));
- }
- return ret;
- }/* To Add support for more Pucch Format */
-
+ }
+ if(formatCfg)
+ {
+ ulSchedPucch->addDmrs = formatCfg->addDmrs;
+ ulSchedPucch->pi2BPSK = formatCfg->pi2BPSK;
+ }
+ return ret;
+ }/* To Add support for more Pucch Format */
+
default:
DU_LOG("\nERROR --> SCH : Invalid PUCCH format[%d] in fillUlSchedPucchFormatCfg()", pucchFormat);
ret = RFAILED;
{
ulSchedPucch->intraFreqHop = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].intraFreqHop;
ulSchedPucch->secondPrbHop = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].secondPrbHop;
- ulSchedPucch->fdAlloc.startPrb = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].startPrb;
+ ulSchedPucch->fdAlloc.resAlloc.type1.startPrb = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].startPrb;
ulSchedPucch->pucchFormat = pucchDedCfg->resrc->resrcToAddModList[resrcIdx].pucchFormat;
ret = fillUlSchedPucchFormat(ulSchedPucch->pucchFormat, ulSchedPucch,\
&pucchDedCfg->resrc->resrcToAddModList[resrcIdx], NULLP);
if(pucchDedCfg->format1)
{
- memset(&ulSchedPucch->cmnFormatCfg, 0, sizeof(SchPucchFormatCfg));
ret = fillUlSchedPucchFormat(ulSchedPucch->pucchFormat, ulSchedPucch, NULLP, pucchDedCfg->format1);
if(ret == RFAILED)
return ret;
{
srPeriodicity = pucchDedCfg->schedReq->schedAddModList[schedReqIdx].periodicity;
srOffset = pucchDedCfg->schedReq->schedAddModList[schedReqIdx].offset;
- break;
+ break;
}
if(((numSlots * slotInfo->sfn + slotInfo->slot - srOffset) % srPeriodicity) == 0)
{
ulSchedPucch->srFlag = true;
- ulSchedPucch->uciFlag = true;
}
- ulSchedPucch->harqFlag = true;//check how to enable?
}
return ret;
}
* @return ROK/RFAILED
**/
-uint16_t fillPucchResourceInfo(SchPucchInfo *schPucchInfo, Inst inst, SlotTimingInfo slotInfo)
+uint16_t fillPucchResourceInfo(uint8_t ueId, SchPucchInfo *schPucchInfo, Inst inst, SlotTimingInfo slotInfo)
{
- uint8_t ret = ROK, ueId = 0, ueIdx = 0, pucchIdx = 0;
+ uint8_t ret = ROK, ueIdx = 0, pucchIdx = 0;
SchCellCb *cell = schCb[inst].cells[inst];
SchPucchCfgCmn *pucchCfg = NULLP;
SchBwpParams *ulBwp = NULLP;
+#ifdef NR_DRX
+ SchUeCb *ueCb = NULLP;
+#endif
uint16_t startPrb;
- GET_UE_ID(schPucchInfo->rnti, ueId);
ueIdx = ueId -1;
- if(cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfgPres)
+#ifdef NR_DRX
+ ueCb = &(cell->ueCb[ueIdx]);
+ if(ueCb->ueDrxInfoPres)
+ {
+ if(!ueCb->drxUeCb.drxUlUeActiveStatus)
+ return RFAILED;
+ }
+#endif
+ if(cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellRecfg.initUlBwp.pucchCfgPres)
{
/* fill pucch dedicated cfg */
ret = fillUlSchedPucchDedicatedCfg(cell,\
- &cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellCfg.initUlBwp.pucchCfg, &slotInfo, schPucchInfo);
+ &cell->ueCb[ueIdx].ueCfg.spCellCfg.servCellRecfg.initUlBwp.pucchCfg, &slotInfo, schPucchInfo);
if(ret == RFAILED)
{
memset(schPucchInfo, 0, sizeof(SchPucchInfo));
&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->fdAlloc.resAlloc.type1.startPrb = ulBwp->freqAlloc.startPrb + pucchResourceSet[pucchIdx][3];
+ schPucchInfo->fdAlloc.resAlloc.type1.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;
}
}
return ROK;
uint8_t schUlResAlloc(SchCellCb *cell, Inst schInst)
{
int ret = ROK;
+#ifdef NR_DRX
+ SchUeCb *ueCb;
+#endif
UlSchedInfo ulSchedInfo;
SchUlSlotInfo *schUlSlotInfo = NULLP;
SlotTimingInfo ulTimingInfo;
memset(&ulSchedInfo, 0, sizeof(UlSchedInfo));
/* add PHY delta */
- ADD_DELTA_TO_TIME(cell->slotInfo,ulTimingInfo,PHY_DELTA_UL+SCHED_DELTA);
+ ADD_DELTA_TO_TIME(cell->slotInfo,ulTimingInfo,PHY_DELTA_UL+SCHED_DELTA, cell->numSlots);
ulSchedInfo.cellId = cell->cellId;
ulSchedInfo.slotIndInfo.cellId = ulSchedInfo.cellId;
schUlSlotInfo = cell->schUlSlotInfo[ulTimingInfo.slot];
if(schUlSlotInfo->schPuschInfo)
{
- ulSchedInfo.crnti = schUlSlotInfo->schPuschInfo->crnti;
+ GET_CRNTI(ulSchedInfo.crnti, schUlSlotInfo->puschUe);
+ /* Check the ue drx status if the UE is active for uplink scheduling or not */
+#ifdef NR_DRX
+ ueCb = schGetUeCb(cell, ulSchedInfo.crnti);
+ if(ueCb->ueDrxInfoPres)
+ {
+ if(!ueCb->drxUeCb.drxUlUeActiveStatus)
+ return RFAILED;
+ }
+#endif
ulSchedInfo.dataType |= SCH_DATATYPE_PUSCH;
memcpy(&ulSchedInfo.schPuschInfo, schUlSlotInfo->schPuschInfo,
sizeof(SchPuschInfo));
if(schUlSlotInfo->pucchPres)
{
- ret = fillPucchResourceInfo(&schUlSlotInfo->schPucchInfo, schInst, ulTimingInfo);
+ GET_CRNTI(ulSchedInfo.crnti, schUlSlotInfo->pucchUe);
+ ret = fillPucchResourceInfo(schUlSlotInfo->pucchUe, &schUlSlotInfo->schPucchInfo, schInst, ulTimingInfo);
if (ret == ROK)
{
ulSchedInfo.dataType |= SCH_DATATYPE_UCI;
memcpy(&ulSchedInfo.schPucchInfo, &schUlSlotInfo->schPucchInfo,
sizeof(SchPucchInfo));
}
+ else
+ {
+ return RFAILED;
+ }
memset(&schUlSlotInfo->schPucchInfo, 0, sizeof(SchPucchInfo));
}
memset(&schUlSlotInfo->schPucchInfo, 0, sizeof(SchPucchInfo));
schUlSlotInfo->pucchPres = true;
- schUlSlotInfo->schPucchInfo.rnti = crnti;
if(ueCb != NULLP)
{
/* set HARQ flag to true */
- schUlSlotInfo->schPucchInfo.harqFlag = true;
- schUlSlotInfo->schPucchInfo.numHarqBits = 1; /* 1 bit for HARQ */
- ADD_DELTA_TO_TIME(pucchTime, pucchTime, 3); /* SLOT_DELAY=3 */
+ schUlSlotInfo->schPucchInfo.harqInfo.harqBitLength = 1; /* 1 bit for HARQ */
+ ADD_DELTA_TO_TIME(pucchTime, pucchTime, 3, cell->numSlots); /* SLOT_DELAY=3 */
cmLListAdd2Tail(&(ueCb->hqDlmap[pucchTime.slot]->hqList), &hqP->ulSlotLnk);
}
return ROK;
GET_UE_ID(crnti, ueId);
ueCb = cell->ueCb[ueId-1];
- coreset1 = ueCb.ueCfg.spCellCfg.servCellCfg.initDlBwp.pdcchCfg.cRSetToAddModList[0];
- pdschCfg = ueCb.ueCfg.spCellCfg.servCellCfg.initDlBwp.pdschCfg;
+ coreset1 = ueCb.ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdcchCfg.cRSetToAddModList[0];
+ pdschCfg = ueCb.ueCfg.spCellCfg.servCellRecfg.initDlBwp.pdschCfg;
/* fill BWP */
bwp->freqAlloc.numPrb = MAX_NUM_RB;
}
/* Calculating time frame to send DCI for SR */
- ADD_DELTA_TO_TIME(currTime, dciTime, PHY_DELTA_DL + SCHED_DELTA);
+ ADD_DELTA_TO_TIME(currTime, dciTime, PHY_DELTA_DL + SCHED_DELTA, cell->numSlots);
#ifdef NR_TDD
if(schGetSlotSymbFrmt(dciTime.slot, cell->slotFrmtBitMap) == DL_SLOT)
#endif
{
- if(ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.k2TblPrsnt)
- k2InfoTbl = &ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.k2InfoTbl;
+ if(ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.k2TblPrsnt)
+ k2InfoTbl = &ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.k2InfoTbl;
else
k2InfoTbl = &cell->cellCfg.schInitialUlBwp.k2InfoTbl;
{
k2Index = k2InfoTbl->k2TimingInfo[dciTime.slot].k2Indexes[k2TblIdx];
- if(!ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.k2TblPrsnt)
+ if(!ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.k2TblPrsnt)
{
k2Val = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[k2Index].k2;
startSymb = cell->cellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[k2Index].startSymbol;
}
else
{
- k2Val = ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.puschCfg.timeDomRsrcAllocList[k2Index].k2;
- startSymb = ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.puschCfg.timeDomRsrcAllocList[k2Index].startSymbol;
- symbLen = ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.puschCfg.timeDomRsrcAllocList[k2Index].symbolLength;
+ k2Val = ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.puschCfg.timeDomRsrcAllocList[k2Index].k2;
+ startSymb = ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.puschCfg.timeDomRsrcAllocList[k2Index].startSymbol;
+ symbLen = ueCb->ueCfg.spCellCfg.servCellRecfg.initUlBwp.puschCfg.timeDomRsrcAllocList[k2Index].symbolLength;
}
/* Check for number of Symbol of PUSCH should be same as original in case of transmisson*/
/* Calculating time frame to send PUSCH for SR */
- ADD_DELTA_TO_TIME(dciTime, puschTime, k2Val);
+ ADD_DELTA_TO_TIME(dciTime, puschTime, k2Val, cell->numSlots);
#ifdef NR_TDD
if(schGetSlotSymbFrmt(puschTime.slot, cell->slotFrmtBitMap) == DL_SLOT)
continue;
continue;
}
k2Found = true;
+ if(hqP)
+ {
+ ADD_DELTA_TO_TIME(puschTime, (*hqP)->puschTime, 0, cell->numSlots);
+ }
break;
}
}
if(k2Found == true)
{
ret = schCalculateUlTbs(ueCb, puschTime, symbLen, &startPrb, &totDataReq, isRetx, *hqP);
-
+
if(totDataReq > 0 && ret == ROK)
{
SCH_ALLOC(dciInfo, sizeof(DciInfo));