+ uint8_t numTimeDomRsrcAlloc, rsrcIdx;
+
+ if(cuPdschCfg)
+ {
+ if(storePdschCfg->numTimeDomRsrcAlloc)
+ {
+ numTimeDomRsrcAlloc = cuPdschCfg->numTimeDomRsrcAlloc;
+ for(rsrcIdx =0 ; rsrcIdx<numTimeDomRsrcAlloc; rsrcIdx++)
+ {
+ if(cuPdschCfg->timeDomRsrcAllociList[rsrcIdx].k0)
+ {
+ if(storePdschCfg->timeDomRsrcAllociList[rsrcIdx].k0)
+ {
+ *(storePdschCfg->timeDomRsrcAllociList[rsrcIdx].k0) = *(cuPdschCfg->timeDomRsrcAllociList[rsrcIdx].k0);
+ if(storePdschCfg->timeDomRsrcAllociList[rsrcIdx].k0 != cuPdschCfg->timeDomRsrcAllociList[rsrcIdx].k0)
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cuPdschCfg->timeDomRsrcAllociList[rsrcIdx].k0, sizeof(uint8_t));
+ }
+ else
+ {
+ (storePdschCfg->timeDomRsrcAllociList[rsrcIdx].k0) = (cuPdschCfg->timeDomRsrcAllociList[rsrcIdx].k0);
+ }
+ }
+ }
+ }
+ }
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief To update DuUeCb Mac Cfg
+ *
+ * @details
+ *
+ * Function : duUpdateMacCfg
+ * Functionality: update DuUeCb MAC Cfg
+ *
+ * @params[in] DuUeCb Pointer
+ * F1UeContextSetupDb pointer
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t duUpdateMacCfg(DuMacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb)
+{
+ uint8_t ret, lcIdx, dbIdx, numLcs, lcDelIdx, cellIdx;
+ DuMacUeCfg *oldMacUeCfg;
+ ret = ROK;
+
+ GET_CELL_IDX(macUeCfg->cellId, cellIdx);
+ if(duCb.actvCellLst[cellIdx] == NULLP)
+ {
+ DU_LOG("\nERROR --> DU APP: CellId[%d] not found", macUeCfg->cellId);
+ return RFAILED;
+ }
+ oldMacUeCfg = &duCb.actvCellLst[cellIdx]->ueCb[macUeCfg->ueId-1].duMacUeCfg;
+
+ /*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)
+ {
+ /* update k0 values */
+ fillK0Values(&f1UeDb->duUeCfg.copyOfmacUeCfg.spCellCfg.servCellCfg.initDlBwp.pdschCfg, &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg);
+ fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\
+ &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL);
+ }
+ if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent)
+ {
+ fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\
+ NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg);
+ }
+ ret = fillAmbr(NULL, f1UeDb->duUeCfg.ambrCfg, &oldMacUeCfg->ambrCfg, true);
+ duFillModulationDetails(macUeCfg, oldMacUeCfg, f1UeDb->duUeCfg.ueNrCapability);
+ }
+
+ /* Filling LC Context */
+ for(dbIdx = 0; (dbIdx < f1UeDb->duUeCfg.numMacLcs && ret == ROK); dbIdx++)
+ {
+ numLcs = macUeCfg->numLcs;
+ for(lcIdx = 0; lcIdx < numLcs; lcIdx++)
+ {
+ if(f1UeDb->duUeCfg.macLcCfg[dbIdx].lcConfig.lcId == macUeCfg->lcCfgList[lcIdx].lcConfig.lcId)
+ {
+ if(f1UeDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_MOD)
+ {
+ ret = fillMacLcCfgToAddMod(NULL, &f1UeDb->duUeCfg.macLcCfg[dbIdx], &macUeCfg->lcCfgList[lcIdx], true);
+ }
+ else if(f1UeDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_DEL)
+ {
+ /* Free memory at matched lcIdx index */
+ freeMacLcCfg(&macUeCfg->lcCfgList[lcIdx].lcConfig);
+ macUeCfg->numLcs--;
+ for(lcDelIdx = lcIdx; lcDelIdx < macUeCfg->numLcs; lcDelIdx++)
+ {
+ /* moving all elements one index ahead */
+ ret = fillMacLcCfgToAddMod(NULL, &macUeCfg->lcCfgList[lcDelIdx+1], &macUeCfg->lcCfgList[lcDelIdx], true);
+ freeMacLcCfg(&macUeCfg->lcCfgList[lcDelIdx+1].lcConfig);
+ if(ret == RFAILED)
+ {
+ DU_LOG("\nERROR --> DU APP : Failed to delete LC at Idx %d in duUpdateMacCfg()", lcDelIdx);
+ break;
+ }
+ }
+ }
+ }
+ }
+ if(f1UeDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_ADD)
+ {
+ ret = fillMacLcCfgToAddMod(NULL, &f1UeDb->duUeCfg.macLcCfg[dbIdx], &macUeCfg->lcCfgList[numLcs], true);
+ if(ret == RFAILED)
+ {
+ DU_LOG("\nERROR --> DU APP : Failed to add LC at Idx %d in duUpdateMacCfg()", numLcs);
+ break;
+ }
+ macUeCfg->numLcs++;
+ }
+
+ }
+ return ret;
+}
+
+/******************************************************************
+ *
+ * @brief Function to fill the RLC Lc cfg from ueSetupReqDb
+ *
+ * @details
+ *
+ * Function : fillRlcCfgToAddMod
+ *
+ * Functionality: Function to fill the RLC Lc cfg from ueSetupReqDb
+ *
+ *
+ *****************************************************************/
+
+uint8_t fillRlcCfgToAddMod(DuRlcBearerCfg *lcCfg, DuRlcBearerCfg *f1UeDbLcCfg)
+{
+ lcCfg->configType = f1UeDbLcCfg->configType;
+ lcCfg->rlcBearerCfg.rbId = f1UeDbLcCfg->rlcBearerCfg.rbId;
+ lcCfg->rlcBearerCfg.rbType = f1UeDbLcCfg->rlcBearerCfg.rbType;
+ lcCfg->rlcBearerCfg.lcId = f1UeDbLcCfg->rlcBearerCfg.lcId;
+ lcCfg->rlcBearerCfg.lcType = f1UeDbLcCfg->rlcBearerCfg.lcType;
+ lcCfg->rlcBearerCfg.rlcMode = f1UeDbLcCfg->rlcBearerCfg.rlcMode;
+
+ switch(lcCfg->rlcBearerCfg.rlcMode)
+ {
+ case RLC_AM :
+ {
+ if(!lcCfg->rlcBearerCfg.u.amCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.amCfg, sizeof(AmBearerCfg));
+ if(!lcCfg->rlcBearerCfg.u.amCfg)
+ return RFAILED;
+ }
+ /* DL AM */
+ lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.snLenDl = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.snLenDl;
+ lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollRetxTmr = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollRetxTmr;
+ lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollPdu = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollPdu;
+ lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollByte = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollByte;
+ lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.maxRetxTh = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.maxRetxTh;
+
+ /* UL AM */
+ lcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.snLenUl = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.snLenUl;
+ lcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.reAssemTmr = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.reAssemTmr;
+ lcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.statProhTmr = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.statProhTmr;
+ break;
+ }
+ case RLC_UM_BI_DIRECTIONAL :
+ {
+ if(!lcCfg->rlcBearerCfg.u.umBiDirCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.umBiDirCfg, sizeof(UmBiDirBearerCfg));
+ if(!lcCfg->rlcBearerCfg.u.umBiDirCfg)
+ return RFAILED;
+ }
+ /* UL UM BI DIR INFO */
+ lcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.snLenUlUm;
+ lcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.reAssemTmr;
+ /* DL UM BI DIR INFO */
+ lcCfg->rlcBearerCfg.u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->rlcBearerCfg.u.umBiDirCfg->dlUmCfg.snLenDlUm;
+ break;
+ }
+ case RLC_UM_UNI_DIRECTIONAL_UL :
+ {
+ if(!lcCfg->rlcBearerCfg.u.umUniDirUlCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg));
+ if(!lcCfg->rlcBearerCfg.u.umUniDirUlCfg)
+ return RFAILED;
+ }
+ lcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.snLenUlUm;
+ lcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.reAssemTmr;
+ break;
+
+ }
+ case RLC_UM_UNI_DIRECTIONAL_DL :
+ {
+ if(!lcCfg->rlcBearerCfg.u.umUniDirDlCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg));
+ if(!lcCfg->rlcBearerCfg.u.umUniDirDlCfg)
+ return RFAILED;
+ }
+ lcCfg->rlcBearerCfg.u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->rlcBearerCfg.u.umUniDirDlCfg->dlUmCfg.snLenDlUm;
+ break;
+ }
+ default:
+ DU_LOG("\nERROR --> DU_APP: Invalid Rlc Mode %d at fillRlcCfgToAddMod()", lcCfg->rlcBearerCfg.rlcMode);
+ return RFAILED;
+ }
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief To update DuUeCb Rlc Lc Cfg
+ *
+ * @details
+ *
+ * Function : duUpdateRlcLcCfg
+ * Functionality: update DuUeCb Rlc Lc Cfg
+ *
+ * @params[in] DuUeCb Pointer
+ * F1UeContextSetupDb pointer
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+
+uint8_t duUpdateRlcLcCfg(DuRlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb)
+{
+ uint8_t ret, lcIdx, dbIdx, numLcs, lcDelIdx;