X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_ue_mgr.c;h=d55defdc5fba6cc4741160fef6fe896235882204;hb=d677deafcfd8b9984be18a25398502a84684d44c;hp=7bfd110b8b2dbf8f150eebcd1babc3d627856a82;hpb=c9ee9d5360e8cad2cb2f807f5ebfabe9304d88c4;p=o-du%2Fl2.git diff --git a/src/du_app/du_ue_mgr.c b/src/du_app/du_ue_mgr.c index 7bfd110b8..d55defdc5 100644 --- a/src/du_app/du_ue_mgr.c +++ b/src/du_app/du_ue_mgr.c @@ -29,8 +29,8 @@ #include "du_app_mac_inf.h" #include "du_app_rlc_inf.h" #include "du_cfg.h" -#include "du_utils.h" #include "du_mgr.h" +#include "du_utils.h" #include "du_f1ap_msg_hdl.h" #include "du_ue_mgr.h" @@ -81,11 +81,25 @@ DuMacUeReconfigReq packMacUeReconfigReqOpts[] = packDuMacUeReconfigReq /* Light weight-loose coupling */ }; +DuMacRachRsrcReq packMacRachRsrcReqOpts[] = +{ + packDuMacRachRsrcReq, /* Loose coupling */ + MacProcRachRsrcReq, /* Tight coupling */ + packDuMacRachRsrcReq /* Light weight-loose coupling */ +}; + DuRlcDlUserDataToRlcFunc duSendRlcDlUserDataToRlcOpts[] = { - packRlcDlUserDataToRlc, /* Loose coupling */ + packRlcDlUserDataToRlc, /* Loose coupling */ RlcProcDlUserDataTransfer, /* Tight coupling */ - packRlcDlUserDataToRlc /* Light weight-loose coupling */ + packRlcDlUserDataToRlc /* Light weight-loose coupling */ +}; + +DuMacRachRsrcRel packMacRachRsrcRelOpts[] = +{ + packDuMacRachRsrcRel, /* Loose coupling */ + MacProcRachRsrcRel, /* Tight coupling */ + packDuMacRachRsrcRel /* Light weight-loose coupling */ }; DuMacUeDeleteReq packMacUeDeleteReqOpts[] = @@ -862,7 +876,7 @@ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg) { uint8_t idx; MacCellGrpCfg *cellGrp = NULL; - + if(macUeCfg) cellGrp = &macUeCfg->macCellGrpCfg; @@ -874,12 +888,12 @@ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg) cellGrp->schReqCfg.addModListCount = 1; if(cellGrp->schReqCfg.addModListCount <= MAX_NUM_SR_CFG_PER_CELL_GRP) { - for(idx = 0; idx < cellGrp->schReqCfg.addModListCount; idx++) - { - cellGrp->schReqCfg.addModList[idx].schedReqId = SCH_REQ_ID; - cellGrp->schReqCfg.addModList[idx].srProhibitTmr = SR_PROHIBIT_MS_32; - cellGrp->schReqCfg.addModList[idx].srTransMax = SR_TRANS_MAX_N_16; - } + for(idx = 0; idx < cellGrp->schReqCfg.addModListCount; idx++) + { + cellGrp->schReqCfg.addModList[idx].schedReqId = SCH_REQ_ID; + cellGrp->schReqCfg.addModList[idx].srProhibitTmr = SR_PROHIBIT_MS_32; + cellGrp->schReqCfg.addModList[idx].srTransMax = SR_TRANS_MAX_N_16; + } } cellGrp->schReqCfg.relListCount = 0; @@ -887,11 +901,11 @@ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg) cellGrp->tagCfg.addModListCount = 1; if(cellGrp->tagCfg.addModListCount <= MAC_NUM_TAGS) { - for(idx = 0; idx < cellGrp->tagCfg.addModListCount; idx++) - { - cellGrp->tagCfg.addModList[idx].tagId = TAG_ID; - cellGrp->tagCfg.addModList[idx].timeAlignTimer = TIME_ALIGNMENT_TIMER_INFINITY; - } + for(idx = 0; idx < cellGrp->tagCfg.addModListCount; idx++) + { + cellGrp->tagCfg.addModList[idx].tagId = TAG_ID; + cellGrp->tagCfg.addModList[idx].timeAlignTimer = TIME_ALIGNMENT_TIMER_INFINITY; + } } cellGrp->tagCfg.relListCount = 0; @@ -910,6 +924,31 @@ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg) cellGrp->phrCfg.phrType2OtherCell = false; cellGrp->phrCfg.phrOtherCG = PHR_MODE_OTHER_CG_REAL; + /* Filling Drx Config */ +#ifdef NR_DRX + cellGrp->drxCfg.drxOnDurationTimer.onDurationTimerValInMs = DRX_ONDURATION_TIMER_VALUE_PRESENT_IN_MS; + if(!cellGrp->drxCfg.drxOnDurationTimer.onDurationTimerValInMs) + cellGrp->drxCfg.drxOnDurationTimer.onDurationtimerValue.subMilliSeconds = \ + DRX_ONDURATION_TIMER_VALUE_IN_SUBMS; + else + cellGrp->drxCfg.drxOnDurationTimer.onDurationtimerValue.milliSeconds = \ + DRX_ONDURATION_TIMER_VALUE_IN_MS; + cellGrp->drxCfg.drxInactivityTimer = DRX_INACTIVITY_TIMER; + cellGrp->drxCfg.drxHarqRttTimerDl = DRX_HARQ_RTT_TIMER_DL; + cellGrp->drxCfg.drxHarqRttTimerUl = DRX_HARQ_RTT_TIMER_UL; + cellGrp->drxCfg.drxRetransmissionTimerDl = DRX_RETRANSMISSION_TIMER_DL; + cellGrp->drxCfg.drxRetransmissionTimerUl = DRX_RETRANSMISSION_TIMER_UL; + cellGrp->drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetVal = DRX_LONG_CYCLE_START_OFFSET_VAL; + cellGrp->drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetChoice = DRX_LONG_CYCLE_START_OFFSET_CHOICE; + cellGrp->drxCfg.shortDrxPres = DRX_SHORT_CYCLE_PRESENT; + if(cellGrp->drxCfg.shortDrxPres) + { + cellGrp->drxCfg.shortDrx.drxShortCycle = DRX_SHORT_CYCLE; + cellGrp->drxCfg.shortDrx.drxShortCycleTimer = DRX_SHORT_CYCLE_TIMER; + } + cellGrp->drxCfg.drxSlotOffset = DRX_SLOT_OFFSET; +#endif + } else { @@ -1163,7 +1202,7 @@ uint8_t sendUeReCfgReqToMac(MacUeCfg *macUeCfg) * @return ROK/RFAILED * *****************************************************************/ -uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg) +uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, uint16_t crnti, DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg) { uint8_t ret = ROK, dbIdx = 0, lcIdx = 0, cellIdx = 0; bool lcIdFound = false; @@ -1171,7 +1210,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, DuUeCfg *ueCfgDb, M macUeCfg->cellId = cellId; macUeCfg->ueId = gnbDuUef1apId; - GET_CRNTI(macUeCfg->crnti, macUeCfg->ueId); + macUeCfg->crnti = crnti; if(!ueCfgDb) { @@ -1240,8 +1279,29 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t gnbDuUef1apId, DuUeCfg *ueCfgDb, M fillDefaultPhyCellGrpInfo(macUeCfg); fillDefaultSpCellGrpInfo(macUeCfg); fillDefaultModulation(macUeCfg); + macUeCfg->ambrCfg = NULLP; } +#ifdef NR_DRX + + macUeCfg->drxConfigIndicatorRelease = ueCfgDb->drxConfigIndicatorRelease; + + if(ueCfgDb->drxCyclePres) + { + macUeCfg->macCellGrpCfg.drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetChoice = ueCfgDb->drxCycle.drxLongCycleLength; + if(ueCfgDb->drxCycle.shortDrxCyclePres) + { + macUeCfg->macCellGrpCfg.drxCfg.shortDrxPres = true; + macUeCfg->macCellGrpCfg.drxCfg.shortDrx.drxShortCycle = ueCfgDb->drxCycle.shortDrxCycle.drxShortCycle; + macUeCfg->macCellGrpCfg.drxCfg.shortDrx.drxShortCycleTimer = ueCfgDb->drxCycle.shortDrxCycle.drxShortCycleTimer; + } + else + { + macUeCfg->macCellGrpCfg.drxCfg.shortDrxPres = false; + } + } +#endif + /* Filling LC Context */ for(dbIdx = 0; (dbIdx < ueCfgDb->numMacLcs && ret == ROK); dbIdx++) { @@ -1719,7 +1779,7 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId) /* Filling Mac Ue Config */ memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg, 0, sizeof(MacUeCfg)); - ret = duBuildAndSendUeCreateReqToMac(ueCcchCtxt->cellId, ueCcchCtxt->gnbDuUeF1apId, NULL, + ret = duBuildAndSendUeCreateReqToMac(ueCcchCtxt->cellId, ueCcchCtxt->gnbDuUeF1apId, ueCcchCtxt->crnti, NULL, &duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to send UE create request to MAC"); @@ -1759,7 +1819,7 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId) * * ****************************************************************/ -uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t gnbDuUeF1apId, DuUeCfg *ueCfgDb, MacUeCfg *duMacUeCfg) +uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t gnbDuUeF1apId, uint16_t crnti, DuUeCfg *ueCfgDb, MacUeCfg *duMacUeCfg) { uint8_t ret = ROK; MacUeCfg *macUeCfg = NULLP; @@ -1767,7 +1827,7 @@ uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t gnbDuUeF1apId, D memset(&pst, 0, sizeof(Pst)); - ret = fillMacUeCfg(cellId, gnbDuUeF1apId, ueCfgDb, duMacUeCfg); + ret = fillMacUeCfg(cellId, gnbDuUeF1apId, crnti, ueCfgDb, duMacUeCfg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to fill MacUeCfg at duBuildAndSendUeCreateReqToMac()"); @@ -1801,6 +1861,130 @@ uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t gnbDuUeF1apId, D return ret; } +/******************************************************************* + * + * @brief Build and send RACH Resource request to MAC + * + * @details + * + * Function : duBuildAndSendRachRsrcReqToMac + * Functionality: + * Build and send RACH Resource request to MAC + * + * @params[in] Cell Id + * UE Id + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t duBuildAndSendRachRsrcReqToMac(uint16_t cellId, uint16_t ueId) +{ + uint16_t cellIdx = 0, ssbIdx = 0; + Pst pst; + MacRachRsrcReq *rachRsrcReq = NULLP; + + GET_CELL_IDX(cellId, cellIdx); + if(duCb.actvCellLst[cellIdx] == NULLP) + { + DU_LOG("\nERROR --> DU APP : Cell Id [%d] not found in duBuildAndSendRachRsrcReqToMac()", cellId); + return RFAILED; + } + + DU_ALLOC_SHRABL_BUF(rachRsrcReq, sizeof(MacRachRsrcReq)); + if(!rachRsrcReq) + { + DU_LOG("\nERROR --> DU APP : Failed to allocate memory for RACH Resource Request in \ + duBuildAndSendRachRsrcReqToMac()"); + return RFAILED; + } + + rachRsrcReq->cellId = cellId; + rachRsrcReq->ueId = ueId; + rachRsrcReq->numSsb = duCfgParam.macCellCfg.prachCfg.ssbPerRach; + for(ssbIdx = 0; ssbIdx < rachRsrcReq->numSsb; ssbIdx++) + { + rachRsrcReq->ssbIdx[ssbIdx] = ssbIdx; + } + + /* Fill Pst */ + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_RACH_RESOURCE_REQ); + + if(((*packMacRachRsrcReqOpts[pst.selector])(&pst, rachRsrcReq)) != ROK) + { + DU_LOG("\nERROR --> DU_APP : Failure in sending RACH Resource Request to MAC at \ + duBuildAndSendRachRsrcReqToMac()"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rachRsrcReq, sizeof(MacRachRsrcReq)); + return RFAILED; + } + + return ROK; +} + +/******************************************************************* + * + * @brief Process RACH resource response from MAC + * + * @details + * + * Function : DuProcMacRachRsrcRsp + * Functionality: + * Process RACH resource response from MAC + * + * @params[in] Post structure + * RACH resource response + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t DuProcMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp) +{ + uint8_t ret = RFAILED; + uint16_t cellIdx = 0; + DuCellCb *cellCb = NULLP; + DuUeCb *ueCb = NULLP; + + DU_LOG("\nINFO --> DU APP : Received RACH Resource Response from MAC. Cell ID [%d] UE ID [%d]", + rachRsrcRsp->cellId, rachRsrcRsp->ueId); + + if(rachRsrcRsp->result == MAC_DU_APP_RSP_OK) + { + DU_LOG("\nINFO : DU APP : RACH Resource Response from MAC : Result [SUCCESS]"); + + /* Fetch Cell Cb */ + GET_CELL_IDX(rachRsrcRsp->cellId, cellIdx); + if(duCb.actvCellLst[cellIdx] && (duCb.actvCellLst[cellIdx]->cellId == rachRsrcRsp->cellId)) + { + cellCb = duCb.actvCellLst[cellIdx]; + + /* Fetch UE CB */ + if(cellCb->ueCb[rachRsrcRsp->ueId-1].gnbDuUeF1apId == rachRsrcRsp->ueId) + { + ueCb = &cellCb->ueCb[rachRsrcRsp->ueId-1]; + + /* Store CRNTI alloted to this UE by MAC */ + ueCb->crnti = rachRsrcRsp->newCrnti; + + /* Store the assigned CF-RA resources */ + memcpy(&ueCb->cfraResource, &rachRsrcRsp->cfraResource, sizeof(MacCfraResource)); + + /* RACH resources allocated to UE is sent to CU in UE Context Setup Response + * along with the result of UE Context setup requested by CU */ + if((ret = BuildAndSendUeCtxtRsp(rachRsrcRsp->cellId, rachRsrcRsp->ueId)) != ROK) + DU_LOG("\nERROR -> DU APP : Failure in BuildAndSendUeCtxtRsp()"); + } + else + DU_LOG("\nERROR --> DU APP : UE ID [%d] not found in DuProcMacRachRsrcRsp", rachRsrcRsp->ueId); + } + else + DU_LOG("\nERROR --> DU APP : Cell ID [%d] not found in DuProcMacRachRsrcRsp", rachRsrcRsp->cellId); + } + else + DU_LOG("\nINFO : DU APP : RACH Resource Response from MAC : Result [FAILURE]"); + + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rachRsrcRsp, sizeof(MacRachRsrcRsp)); + return ret; +} + /******************************************************************* * * @brief To update DuUeCb Mac Cfg @@ -1832,6 +2016,9 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) /*Filling Cell Group Cfg*/ ret = procUeReCfgCellInfo(macUeCfg, &f1UeDb->duUeCfg.copyOfmacUeCfg, f1UeDb->duUeCfg.cellGrpCfg); +#ifdef NR_DRX + memcpy(&macUeCfg->macCellGrpCfg.drxCfg, &f1UeDb->duUeCfg.copyOfmacUeCfg.macCellGrpCfg.drxCfg, sizeof(DrxCfg)); +#endif if(ret == ROK) { if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent) @@ -2334,29 +2521,32 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) { DU_LOG("\nINFO --> DU APP : MAC UE Create Response : SUCCESS [DU UE F1AP ID : %d]", cfgRsp->ueId); - if(duCb.actvCellLst[cellIdx] && - (duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].gnbDuUeF1apId == cfgRsp->ueId)) + if(duCb.actvCellLst[cellIdx] && (duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].gnbDuUeF1apId == cfgRsp->ueId)) { duCb.actvCellLst[cellIdx]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_CREATE_COMPLETE; if((duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].ueState == UE_HANDIN_IN_PROGRESS) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState == UE_CREATE_COMPLETE) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) - { - if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK) - { - if((BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId)) != ROK) - { - DU_LOG("\nERROR -> DU APP : Failure in BuildAndSendUeCtxtRsp()"); - return RFAILED; - } - } - else - { - DU_LOG("\nERROR -> DU APP : Failure in updating DU UE CB"); - return RFAILED; - } - } + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState == UE_CREATE_COMPLETE) && + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) + { + if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK) + { + /* If UE is in handover, RACH resource needs to be requested + * from MAC for CFRA */ + if((duBuildAndSendRachRsrcReqToMac(cfgRsp->cellId, cfgRsp->ueId)) != ROK) + { + DU_LOG("\nERROR --> DU APP : Failed to send RACH Resource Request to MAC"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp)); + return RFAILED; + } + } + else + { + DU_LOG("\nERROR -> DU APP : Failure in updating DU UE CB"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp)); + return RFAILED; + } + } } } else if(pst->event == EVENT_MAC_UE_RECONFIG_RSP) @@ -2374,12 +2564,14 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) if((BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId)) != ROK) { DU_LOG("\nERROR -> DU APP : Failure in BuildAndSendUeCtxtRsp()"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp)); return RFAILED; } } else { DU_LOG("\nERROR -> DU APP : Failure in updating DU UE CB"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp)); return RFAILED; } } @@ -2495,20 +2687,25 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState = UE_CREATE_COMPLETE; if((duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].ueState == UE_HANDIN_IN_PROGRESS) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState == UE_CREATE_COMPLETE) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState == UE_CREATE_COMPLETE) && + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) { if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK) { - if((BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId)) != ROK) + /* If UE is in handover, RACH resource needs to be requested + * from MAC for CFRA */ + if((duBuildAndSendRachRsrcReqToMac(cfgRsp->cellId, cfgRsp->ueId)) != ROK) { - DU_LOG("\nERROR --> DU APP : Failure in BuildAndSendUeCtxtRsp"); + DU_LOG("\nERROR --> DU APP : Failed to send RACH Resource Request to MAC"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp)); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(RlcUeCfgRsp)); return RFAILED; } } else { DU_LOG("\nERROR --> DU APP : Failure in updating DU UE CB"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(RlcUeCfgRsp)); return RFAILED; } } @@ -2526,12 +2723,14 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) if((BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId)) != ROK) { DU_LOG("\nERROR --> DU APP : Failure in BuildAndSendUeCtxtRsp"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(RlcUeCfgRsp)); return RFAILED; } } else { DU_LOG("\nERROR --> DU APP : Failure in updating DU UE CB"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(RlcUeCfgRsp)); return RFAILED; } } @@ -2625,7 +2824,7 @@ uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t duUeF1apId, uint8_ if(macUeCfg) { memset(macUeCfg, 0, sizeof(MacUeCfg)); - ret = fillMacUeCfg(cellId, duUeF1apId, ueCfgDb, macUeCfg); + ret = fillMacUeCfg(cellId, duUeF1apId, crnti, ueCfgDb, macUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to fill Mac Ue Cfg at duBuildAndSendUeReCfgReqToMac()"); else @@ -2685,7 +2884,7 @@ uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, DuUeCb *ueCb) memset(&ueCb->macUeCfg, 0, sizeof(MacUeCfg)); /* Since UE attach has not yet happened, crnti is unknow. Hence passing 0 */ - ret = duBuildAndSendUeCreateReqToMac(cellId, ueCb->gnbDuUeF1apId, duUeCfg, &ueCb->macUeCfg); + ret = duBuildAndSendUeCreateReqToMac(cellId, ueCb->gnbDuUeF1apId, 0, duUeCfg, &ueCb->macUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to send UE create request to MAC"); @@ -2941,25 +3140,50 @@ uint8_t duProcUeContextModReq(DuUeCb *ueCb) /******************************************************************* * -* @brief Function to delete Pdsch ServCellCfg +* @brief Build and send dedicated RACH resource release request to MAC * * @details * -* Function : deletePdschServCellCfg +* Function : duBuildAndSendRachRsrcRelToMac * -* Functionality: Function to delete Pdsch ServCellCfg +* Functionality: Function to Build and send dedicated RACH resource +* release request to MAC * -* @params[in] PdschServCellCfg *pdschServCellCfg -* @return void +* @params[in] Cell ID +* UE CB +* @return ROK - Success +* RFAILED - Failure * * ****************************************************************/ - -void deletePdschServCellCfg(PdschServCellCfg *pdschServCellCfg) +uint8_t duBuildAndSendRachRsrcRelToMac(uint16_t cellId, DuUeCb *ueCb) { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->maxMimoLayers, sizeof(uint8_t)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->maxCodeBlkGrpPerTb, sizeof(MaxCodeBlkGrpPerTB)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->codeBlkGrpFlushInd, sizeof(bool)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->xOverhead, sizeof(PdschXOverhead)); + Pst pst; + MacRachRsrcRel *rachRsrcRel = NULLP; + + DU_ALLOC_SHRABL_BUF(rachRsrcRel, sizeof(MacRachRsrcRel)); + if(!rachRsrcRel) + { + DU_LOG("\nERROR --> DU APP : Failed to allocate memory for RACH Resource Release in \ + duBuildAndSendRachRsrcRelToMac()"); + return RFAILED; + } + + rachRsrcRel->cellId = cellId; + rachRsrcRel->ueId = ueCb->gnbDuUeF1apId; + rachRsrcRel->crnti = ueCb->crnti; + + /* Fill Pst */ + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_RACH_RESOURCE_REL); + + if(((*packMacRachRsrcRelOpts[pst.selector])(&pst, rachRsrcRel)) != ROK) + { + DU_LOG("\nERROR --> DU_APP : Failure in sending RACH Resource Release to MAC at \ + duBuildAndSendRachRsrcRelToMac()"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rachRsrcRel, sizeof(MacRachRsrcRel)); + return RFAILED; + } + + return ROK; } /******************************************************************* @@ -3080,7 +3304,7 @@ uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp) if(deleteRsp) { - if(deleteRsp->result == SUCCESS) + if(deleteRsp->result == DEL_SUCCESSFUL) { DU_LOG("\nINFO --> DU APP : MAC UE Delete Response : SUCCESS [UE IDX : %d]", deleteRsp->ueId); GET_CELL_IDX(deleteRsp->cellId, cellIdx);