X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_slot_ind.c;h=29869154a86d32e4ec692f4b12d300e2fd7f9c06;hb=07a3604e42e6b03158e5ce6f1f2bc0e551572079;hp=5ad429c505660ed42ff679e62e005f944f06971a;hpb=45d134510deb6902b870b4a0fb574b6075fba601;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_slot_ind.c b/src/5gnrsch/sch_slot_ind.c index 5ad429c50..29869154a 100644 --- a/src/5gnrsch/sch_slot_ind.c +++ b/src/5gnrsch/sch_slot_ind.c @@ -139,13 +139,13 @@ void schCalcSlotValues(SlotIndInfo slotInd, SchSlotValue *schSlotValue) uint8_t schProcessSlotInd(SlotIndInfo *slotInd, Inst schInst) { int ret = ROK; - uint8_t ssb_rep; + uint8_t ssb_rep, ueIdx, lcgIdx; uint16_t slot, sfnSlot = 0; DlSchedInfo dlSchedInfo; memset(&dlSchedInfo,0,sizeof(DlSchedInfo)); DlBrdcstAlloc *dlBrdcstAlloc = &dlSchedInfo.brdcstAlloc; - RarAlloc *rarAlloc; - Msg4Alloc *msg4Alloc; + RarAlloc *rarAlloc = NULLP; + Msg4Alloc *msg4Alloc = NULLP; dlBrdcstAlloc->ssbTrans = NO_SSB; dlBrdcstAlloc->sib1Trans = NO_SIB1; @@ -256,7 +256,49 @@ uint8_t schProcessSlotInd(SlotIndInfo *slotInd, Inst schInst) SCH_FREE(cell->schDlSlotInfo[dlSchedInfo.schSlotValue.msg4Time.slot]->msg4Info, sizeof(Msg4Info)); cell->schDlSlotInfo[dlSchedInfo.schSlotValue.msg4Time.slot]->msg4Info = NULL; } - + /* check if UL grant must be sent in this slot for a SR/BSR that had been received */ + for(ueIdx=0; ueIdxnumActvUe; ueIdx++) + { + uint32_t totDataReq = 0; /* in bytes */ + DciInfo *dciInfo = NULLP; + SchUeCb *ueCb = NULLP; + + ueCb = &cell->ueCb[ueIdx]; + /* check for SR */ + if(ueCb->srRcvd) + { + totDataReq = UL_GRANT_SIZE; /*fixing so that all control msgs can be handled in SR */ + ueCb->srRcvd = false; + } + /* check for BSR */ + for(lcgIdx=0; lcgIdxbsrInfo[lcgIdx].dataVol; + ueCb->bsrInfo[lcgIdx].dataVol = 0; + } + if(totDataReq > 0) /* UL grant must be provided for this UE in this slot */ + { + SchPuschInfo schPuschInfo; + memset(&schPuschInfo, 0, sizeof(SchPuschInfo)); + + SCH_ALLOC(dciInfo, sizeof(DciInfo)); + if(!dciInfo) + { + DU_LOG("\nMAC: Memory Allocation failed for dciInfo alloc"); + return RFAILED; + } + memset(dciInfo,0,sizeof(DciInfo)); + /* update the SFN and SLOT */ + memcpy(&dlSchedInfo.schSlotValue.ulDciTime, slotInd, sizeof(SlotIndInfo)); + slot = dlSchedInfo.schSlotValue.ulDciTime.slot; + /* Update PUSCH allocation */ + schFillPuschAlloc(ueCb, slot, totDataReq, &schPuschInfo); + /* Fill DCI for UL grant */ + schFillUlDci(ueCb, schPuschInfo, dciInfo); + memcpy(&dciInfo->slotIndInfo, &dlSchedInfo.schSlotValue.ulDciTime, sizeof(SlotIndInfo)); + dlSchedInfo.ulGrant = dciInfo; + } + } /* send msg to MAC */ ret = sendDlAllocToMac(&dlSchedInfo, schInst); @@ -266,9 +308,9 @@ uint8_t schProcessSlotInd(SlotIndInfo *slotInd, Inst schInst) RETVALUE(ret); } + schInitDlSlot(cell->schDlSlotInfo[slot]); schUlResAlloc(cell, schInst); - memset(cell->schDlSlotInfo[slot], 0, sizeof(SchDlSlotInfo)); return ret; }