X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_ue_mgr.c;h=3e94b75dcd01a74844b42587abcd7dc6cc3699a1;hb=d677deafcfd8b9984be18a25398502a84684d44c;hp=2dcbee080b2daa6806ccbcb6336ad436e316bb5f;hpb=51bda2db4a40fa138861660403c8588160a08795;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_ue_mgr.c b/src/5gnrsch/sch_ue_mgr.c index 2dcbee080..3e94b75dc 100644 --- a/src/5gnrsch/sch_ue_mgr.c +++ b/src/5gnrsch/sch_ue_mgr.c @@ -28,6 +28,9 @@ #include "mac_sch_interface.h" #include "sch.h" #include "sch_utils.h" +#ifdef NR_DRX +#include "sch_drx.h" +#endif /* local defines */ SchUeCfgRspFunc SchUeCfgRspOpts[] = @@ -256,8 +259,56 @@ uint8_t fillSchUeCb(Inst inst, SchUeCb *ueCb, SchUeCfg *ueCfg) { memcpy(&ueCb->ueCfg.macCellGrpCfg , &ueCfg->macCellGrpCfg, sizeof(SchMacCellGrpCfg)); ueCb->ueCfg.macCellGrpCfgPres = true; +#ifdef NR_DRX + if(ueCfg->macCellGrpCfg.drxCfgPresent == true) + { + if(ueCb->ueDrxInfoPres == false) + { + ueCb->ueDrxInfoPres = true; + /* intialize the drxUeCb */ + schInitDrxUeCb(ueCb); + + /* intialize the Dl drxHarqCb */ + for(idx =0; idxdlHqEnt.numHqPrcs; idx++) + { + schInitDrxHarqCb(&ueCb->dlHqEnt.procs[idx].dlDrxHarqCb); + } + /* intialize the Ul drxHarqCb */ + for(idx =0; idxulHqEnt.numHqPrcs; idx++) + { + schInitDrxHarqCb(&ueCb->ulHqEnt.procs[idx].ulDrxHarqCb); + } + /* convert all the drx configuration recived in ms/subms into number of slots and store into the drxUeCb */ + schFillDrxUeCb(ueCb->cellCb->cellCfg.numerology, ueCfg->macCellGrpCfg.drxCfg, &ueCb->drxUeCb); + /* Calculate the onduration timer and short cycle timer (if shortcycle configuration is present) as soon as we + * recived ueCfg request */ + schAddUeInOndurationList(ueCb->cellCb, ueCb, 0); + + } + else + { + /* convert all the drx configuration recived in ms/subms into number + * of slots and store into the drxUeCb */ + schFillDrxUeCb(ueCb->cellCb->cellCfg.numerology, ueCfg->macCellGrpCfg.drxCfg, &ueCb->drxUeCb); + + /* Recalculate/Restart timer based on their presence */ + schDrxUeReCfgTimer(ueCb->cellCb, ueCb); + } + } +#endif } +#ifdef NR_DRX + if(ueCfg->drxConfigIndicatorRelease == true) + { + if(ueCb->ueDrxInfoPres == true) + { + schDeleteUeDrxInfo(ueCb->cellCb, ueCb); + ueCb->ueDrxInfoPres = false; + } + } +#endif + if(ueCfg->phyCellGrpCfgPres == true) { memcpy(&ueCb->ueCfg.phyCellGrpCfg , &ueCfg->phyCellGrpCfg, sizeof(SchPhyCellGrpCfg)); @@ -1072,7 +1123,6 @@ void deleteSchUeCb(SchUeCb *ueCb) uint8_t timeDomRsrcIdx = 0, ueLcIdx = 0, idx =0; SchPucchCfg *pucchCfg = NULLP; SchPdschConfig *pdschCfg = NULLP; - CmLList *node = NULLP, *next = NULLP; if(ueCb) { @@ -1140,7 +1190,14 @@ void deleteSchUeCb(SchUeCb *ueCb) SCH_FREE(ueCb->ulInfo.ulLcCtxt[ueLcIdx].snssai, sizeof(Snssai)); SCH_FREE(ueCb->dlInfo.dlLcCtxt[ueLcIdx].snssai, sizeof(Snssai)); } - +#ifdef NR_DRX + if(ueCb->ueDrxInfoPres) + { + /* Removing all the calculated drx configuration timer list */ + schDeleteUeDrxInfo(ueCb->cellCb, ueCb); + ueCb->ueDrxInfoPres = false; + } +#endif memset(ueCb, 0, sizeof(SchUeCb)); } } @@ -1244,7 +1301,7 @@ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) * RFAILED - failure * * ****************************************************************/ -uint8_t SchSendCellDeleteRspToMac(SchCellDelete *ueDelete, Inst inst, SchMacRsp result) +uint8_t SchSendCellDeleteRspToMac(SchCellDeleteReq *ueDelete, Inst inst, SchMacRsp result) { Pst rspPst; uint8_t ret=0; @@ -1385,7 +1442,7 @@ void deleteSchCellCb(SchCellCb *cellCb) * * ****************************************************************/ -uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDelete *cellDelete) +uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDeleteReq *cellDelete) { uint8_t cellIdx=0, ret = RFAILED; Inst inst = pst->dstInst - SCH_INST_START;