[ISSUE ID = ODUHIGH-321] Implementation of cell delete req and rsp
[o-du/l2.git] / src / 5gnrmac / mac_ue_mgr.c
index 0f38987..8262eee 100644 (file)
@@ -50,6 +50,34 @@ MacSchModUeConfigReqFunc macSchModUeConfigReqOpts[] =
    packMacSchModUeConfigReq     /* packing for light weight loosely coupled */
 };
 
+MacSchUeDeleteReqFunc macSchUeDeleteReqOpts[] =
+{
+   packMacSchUeDeleteReq,    /* packing for loosely coupled */
+   MacSchUeDeleteReq,        /* packing for tightly coupled */
+   packMacSchUeDeleteReq     /* packing for light weight loosely coupled */
+};
+
+MacDuUeDeleteRspFunc macDuUeDeleteRspOpts[] =
+{
+   packDuMacUeDeleteRsp,   /* packing for loosely coupled */
+   DuProcMacUeDeleteRsp,   /* packing for tightly coupled */
+   packDuMacUeDeleteRsp   /* packing for light weight loosly coupled */
+};
+
+MacSchCellDeleteReqFunc macSchCellDeleteReqOpts[]=
+{
+   packMacSchCellDeleteReq,    /* packing for loosely coupled */
+   MacSchCellDeleteReq,        /* packing for tightly coupled */
+   packMacSchCellDeleteReq     /* packing for light weight loosely coupled */
+};
+
+MacDuCellDeleteRspFunc macDuCellDeleteRspOpts[] =
+{
+   packDuMacCellDeleteRsp,   /* packing for loosely coupled */
+   DuProcMacCellDeleteRsp,   /* packing for tightly coupled */
+   packDuMacCellDeleteRsp   /* packing for light weight loosly coupled */
+};
+
 /*******************************************************************
  *
  * @brief Fills mac cell group config to be sent to scheduler
@@ -77,7 +105,7 @@ uint8_t fillMacCellGroupCfg(MacCellGrpCfg macCellGrp, SchMacCellGrpCfg  *macCell
    schedReqCfg->addModListCount = macCellGrp.schReqCfg.addModListCount;
    if(schedReqCfg->addModListCount > MAX_NUM_SR_CFG_PER_CELL_GRP)
    {
-      DU_LOG("\nMAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \
+      DU_LOG("\nERROR  -->  MAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \
            schedReqCfg->addModListCount, MAX_NUM_SR_CFG_PER_CELL_GRP);
       return RFAILED;
    }
@@ -97,7 +125,7 @@ uint8_t fillMacCellGroupCfg(MacCellGrpCfg macCellGrp, SchMacCellGrpCfg  *macCell
    tagCfg->addModListCount = macCellGrp.tagCfg.addModListCount;
    if(tagCfg->addModListCount > MAX_NUM_TAGS)
    {
-      DU_LOG("\nMAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \
+      DU_LOG("\nERROR  -->  MAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \
            tagCfg->addModListCount, MAX_NUM_TAGS);
       return RFAILED;
    }
@@ -174,7 +202,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg *
          MAC_ALLOC_SHRABL_BUF(schPdschCfg->maxMimoLayers, sizeof(uint8_t));
         if(!schPdschCfg->maxMimoLayers)
         {
-            DU_LOG("\nMAC :Memory Alloc MimoLayers Failed at fillPdschServCellCfg()");
+            DU_LOG("\nERROR  -->  MAC :Memory Alloc MimoLayers Failed at fillPdschServCellCfg()");
            return RFAILED;
         }
       }
@@ -195,7 +223,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg *
          MAC_ALLOC_SHRABL_BUF(schPdschCfg->maxCodeBlkGrpPerTb, sizeof(SchMaxCodeBlkGrpPerTB));
         if(!schPdschCfg->maxCodeBlkGrpPerTb)
         {
-            DU_LOG("\nMAC :Memory Alloc for code Block Failed at fillPdschServCellCfg()");
+            DU_LOG("\nERROR  -->  MAC :Memory Alloc for code Block Failed at fillPdschServCellCfg()");
            return RFAILED;
         }
       }
@@ -213,7 +241,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg *
          MAC_ALLOC_SHRABL_BUF(schPdschCfg->codeBlkGrpFlushInd, sizeof(bool));
         if(!schPdschCfg->codeBlkGrpFlushInd)
         {
-            DU_LOG("\nMAC :Memory Alloc for Flush Ind Failed at fillPdschServCellCfg()");
+            DU_LOG("\nERROR  -->  MAC :Memory Alloc for Flush Ind Failed at fillPdschServCellCfg()");
            return RFAILED;
         }
       }
@@ -231,7 +259,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg *
          MAC_ALLOC_SHRABL_BUF(schPdschCfg->xOverhead, sizeof(SchPdschXOverhead));
         if(!schPdschCfg->xOverhead)
         {
-            DU_LOG("\nMAC :Memory Alloc for xOverHead Failed at fillPdschServCellCfg()");
+            DU_LOG("\nERROR  -->  MAC :Memory Alloc for xOverHead Failed at fillPdschServCellCfg()");
            return RFAILED;
         }
       }
@@ -276,7 +304,7 @@ uint8_t fillInitalUlBwpPuschCfg(PuschCfg macPuschCfg, SchPuschCfg *schPuschCfg)
    schPuschCfg->numTimeDomRsrcAlloc = macPuschCfg.numTimeDomRsrcAlloc;
    if(schPuschCfg->numTimeDomRsrcAlloc > MAX_NUM_UL_ALLOC)
    {
-      DU_LOG("\nMAC : Number of Time domain resource allocation [%d] exceeds max limit [%d]",\
+      DU_LOG("\nERROR  -->  MAC : Number of Time domain resource allocation [%d] exceeds max limit [%d]",\
            schPuschCfg->numTimeDomRsrcAlloc, MAX_NUM_UL_ALLOC);
       return RFAILED;
    }    
@@ -380,7 +408,7 @@ uint8_t fillResrcList(PucchResrcCfg *macResrcCfg, SchPucchResrcCfg *schResrcCfg)
          MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0, sizeof(SchPucchFormat0));
          if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0 == NULLP)
          {
-             DU_LOG("\nERROR  --> MAC : Failed to allocate memory for Format0 in fillResrcList()");
+             DU_LOG("\nERROR  -->  MAC : Failed to allocate memory for Format0 in fillResrcList()");
              return RFAILED;
          }
          schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0->initialCyclicShift =\
@@ -396,7 +424,7 @@ uint8_t fillResrcList(PucchResrcCfg *macResrcCfg, SchPucchResrcCfg *schResrcCfg)
          MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1, sizeof(SchPucchFormat1));
          if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1 == NULLP)
          {
-             DU_LOG("\nERROR  --> MAC : Failed to allocate memory for Format1 in fillResrcList()");
+             DU_LOG("\nERROR  -->  MAC : Failed to allocate memory for Format1 in fillResrcList()");
              return RFAILED;
          }
          schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1->initialCyclicShift =\
@@ -1089,7 +1117,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC
    schPdcchCfg->numCRsetToAddMod = macPdcchCfg.numCRsetToAddMod;
    if(schPdcchCfg->numCRsetToAddMod > MAX_NUM_CRSET)
    {
-      DU_LOG("\nMAC : Number of CORESET to ADD/MOD [%d] exceeds max limit [%d]",\
+      DU_LOG("\nERROR  -->  MAC : Number of CORESET to ADD/MOD [%d] exceeds max limit [%d]",\
            schPdcchCfg->numCRsetToAddMod, MAX_NUM_CRSET);
       return RFAILED;
    }
@@ -1113,7 +1141,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC
    schPdcchCfg->numCRsetToRel = macPdcchCfg.numCRsetToRel;
    if(schPdcchCfg->numCRsetToAddMod > MAX_NUM_CRSET)
    {
-      DU_LOG("\nMAC : Number of CORESET to release [%d] exceeds max limit [%d]",\
+      DU_LOG("\nERROR  -->  MAC : Number of CORESET to release [%d] exceeds max limit [%d]",\
            schPdcchCfg->numCRsetToRel, MAX_NUM_CRSET);
       return RFAILED;
    }
@@ -1127,7 +1155,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC
    schPdcchCfg->numSearchSpcToAddMod = macPdcchCfg.numSearchSpcToAddMod;
    if(schPdcchCfg->numSearchSpcToAddMod > MAX_NUM_SEARCH_SPC)
    {
-      DU_LOG("\nMAC : Number of search space to ADD/MOD [%d] exceeds max [%d]", \
+      DU_LOG("\nERROR  -->  MAC : Number of search space to ADD/MOD [%d] exceeds max [%d]", \
            schPdcchCfg->numSearchSpcToAddMod, MAX_NUM_SEARCH_SPC);
       return RFAILED;
    }
@@ -1161,7 +1189,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC
    schPdcchCfg->numSearchSpcToRel = macPdcchCfg.numSearchSpcToRel;
    if(schPdcchCfg->numSearchSpcToRel > MAX_NUM_SEARCH_SPC)
    {
-      DU_LOG("\nMAC : Number of search space to release [%d] exceeds max [%d]", \
+      DU_LOG("\nERROR  -->  MAC : Number of search space to release [%d] exceeds max [%d]", \
            schPdcchCfg->numSearchSpcToRel, MAX_NUM_SEARCH_SPC);
       return RFAILED;
    }
@@ -1200,7 +1228,7 @@ uint8_t fillInitDlBwpPdschCfg(PdschConfig macPdschCfg, SchPdschConfig *schPdschC
    schPdschCfg->numTimeDomRsrcAlloc = macPdschCfg.numTimeDomRsrcAlloc;
    if(schPdschCfg->numTimeDomRsrcAlloc > MAX_NUM_DL_ALLOC)
    {
-      DU_LOG("\nMAC : Number of time domain resource allocation [%d], exceeds\
+      DU_LOG("\nERROR  -->  MAC : Number of time domain resource allocation [%d], exceeds\
            max limit [%d]", schPdschCfg->numTimeDomRsrcAlloc, MAX_NUM_DL_ALLOC);
       return RFAILED;
    }
@@ -1253,7 +1281,7 @@ uint8_t fillInitialDlBwp(InitialDlBwp macInitDlBwp, SchInitalDlBwp *schInitDlBwp
    {
       if(fillInitDlBwpPdcchCfg(macInitDlBwp.pdcchCfg, &schInitDlBwp->pdcchCfg) != ROK)
       {
-        DU_LOG("\nMAC : fillInitDlBwpPdcchCfg() failed");
+        DU_LOG("\nERROR  -->  MAC : fillInitDlBwpPdcchCfg() failed");
         return RFAILED;
       }
    }
@@ -1263,7 +1291,7 @@ uint8_t fillInitialDlBwp(InitialDlBwp macInitDlBwp, SchInitalDlBwp *schInitDlBwp
    {
       if(fillInitDlBwpPdschCfg(macInitDlBwp.pdschCfg,&schInitDlBwp->pdschCfg) != ROK)
       {
-        DU_LOG("\nMAC : fillInitDlBwpPdschCfg() failed");
+        DU_LOG("\nERROR  -->  MAC : fillInitDlBwpPdschCfg() failed");
         return RFAILED;
       }
    }
@@ -1298,14 +1326,14 @@ uint8_t fillSpCellCfg(SpCellCfg macSpCellCfg, SchSpCellCfg *schSpCellCfg)
    if(fillInitialDlBwp(macSpCellCfg.servCellCfg.initDlBwp, \
            &servCellCfg->initDlBwp) != ROK )
    {
-      DU_LOG("\nMAC : fillInitialDlBwp() failed");
+      DU_LOG("\nERROR  -->  MAC : fillInitialDlBwp() failed");
       return RFAILED;
    }
 
    servCellCfg->numDlBwpToAdd = macSpCellCfg.servCellCfg.numDlBwpToAdd;
    if(servCellCfg->numDlBwpToAdd > MAX_NUM_BWP)
    {
-      DU_LOG("\nMAC : Number of DL BWP to ADD/MOD [%d] exceeds max limit [%d]",\
+      DU_LOG("\nERROR  -->  MAC : Number of DL BWP to ADD/MOD [%d] exceeds max limit [%d]",\
            servCellCfg->numDlBwpToAdd, MAX_NUM_BWP);
       return RFAILED;
    }
@@ -1326,7 +1354,7 @@ uint8_t fillSpCellCfg(SpCellCfg macSpCellCfg, SchSpCellCfg *schSpCellCfg)
    if(fillPdschServCellCfg(macSpCellCfg.servCellCfg.pdschServCellCfg, \
            &servCellCfg->pdschServCellCfg) != ROK)
    {
-      DU_LOG("\nMAC : fillPdschServCellCfg() failed");
+      DU_LOG("\nERROR  -->  MAC : fillPdschServCellCfg() failed");
       return RFAILED;
    }
 
@@ -1334,14 +1362,14 @@ uint8_t fillSpCellCfg(SpCellCfg macSpCellCfg, SchSpCellCfg *schSpCellCfg)
    if(fillInitialUlBwp(macSpCellCfg.servCellCfg.initUlBwp, \
            &servCellCfg->initUlBwp) != ROK)
    {
-      DU_LOG("\nMAC : fillInitialUlBwp() failed");
+      DU_LOG("\nERROR  -->  MAC : fillInitialUlBwp() failed");
       return RFAILED;
    }
 
    servCellCfg->numUlBwpToAdd = macSpCellCfg.servCellCfg.numUlBwpToAdd;
    if(servCellCfg->numUlBwpToAdd > MAX_NUM_BWP)
    {
-      DU_LOG("\nMAC : Number of UL BWP to ADD/MOD [%d] exceeds max limit [%d]",\
+      DU_LOG("\nERROR  -->  MAC : Number of UL BWP to ADD/MOD [%d] exceeds max limit [%d]",\
            servCellCfg->numUlBwpToAdd, MAX_NUM_BWP);
       return RFAILED;
    }
@@ -1383,7 +1411,7 @@ uint8_t sendUeReqToSch(Pst *pst, SchUeCfg *schUeCfg)
         FILL_PST_MAC_TO_SCH(schPst, EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH);
         return(*macSchModUeConfigReqOpts[schPst.selector])(&schPst,schUeCfg);
       default: 
-        DU_LOG("\n Invalid Pst received %d", pst->event);
+        DU_LOG("\nERROR  -->  Invalid Pst received %d", pst->event);
         return RFAILED;
    }
 }
@@ -1493,7 +1521,7 @@ uint8_t fillLogicalChannelCfg(SchLcCfg *schLcCfg, LcCfg *macLcCfg)
         MAC_ALLOC(schLcCfg->drbQos, sizeof(SchDrbQosInfo));
        if(!schLcCfg->drbQos)
         {
-           DU_LOG("\nMAC : Memory alloc failed at drbQos at fillLogicalChannelCfg()");
+           DU_LOG("\nERROR  -->  MAC : Memory alloc failed at drbQos at fillLogicalChannelCfg()");
           ret = RFAILED;
        }
      }
@@ -1518,7 +1546,7 @@ uint8_t fillLogicalChannelCfg(SchLcCfg *schLcCfg, LcCfg *macLcCfg)
             MAC_ALLOC(schLcCfg->snssai, sizeof(SchSnssai));
             if(!schLcCfg->snssai)
             {
-               DU_LOG("\nMAC : Memory alloc failed at snssai at fillLogicalChannelCfg()");
+               DU_LOG("\nERROR  -->  MAC : Memory alloc failed at snssai at fillLogicalChannelCfg()");
                ret = RFAILED;
             }
          }
@@ -1575,7 +1603,7 @@ uint8_t fillSchLcCfgList(SchUeCfg *schUeCfg, MacUeCfg *ueCfg)
    {
       if(fillLogicalChannelCfg(&schUeCfg->schLcCfg[lcIdx], &ueCfg->lcCfgList[lcIdx]) != ROK)
       {
-        DU_LOG("\nMAC : fillLogicalChannelCfg() failed for lc Idx[%d]", lcIdx);
+        DU_LOG("\nERROR  -->  MAC : fillLogicalChannelCfg() failed for lc Idx[%d]", lcIdx);
         return RFAILED;
       }
       schUeCfg->numLcs++;
@@ -1606,39 +1634,48 @@ uint8_t fillSchUeCfg(Pst *pst, SchUeCfg *schUeCfg, MacUeCfg *ueCfg)
    schUeCfg->crnti = ueCfg->crnti;
 
    /* Copy MAC cell group config */
-   memset(&schUeCfg->macCellGrpCfg, 0, sizeof(SchMacCellGrpCfg));
-   if(fillMacCellGroupCfg(ueCfg->macCellGrpCfg, &schUeCfg->macCellGrpCfg) != ROK)
+   if(ueCfg->macCellGrpCfgPres == true)
    {
-      DU_LOG("\nMAC : fillMacCellGroupCfg() failed");
-      return RFAILED;
+      schUeCfg->macCellGrpCfgPres = true;
+      memset(&schUeCfg->macCellGrpCfg, 0, sizeof(SchMacCellGrpCfg));
+      if(fillMacCellGroupCfg(ueCfg->macCellGrpCfg, &schUeCfg->macCellGrpCfg) != ROK)
+      {
+         DU_LOG("\nERROR  -->  MAC : fillMacCellGroupCfg() failed");
+         return RFAILED;
+      }
    }
-
-   /* Copy Physical cell group config */
-   memset(&schUeCfg->phyCellGrpCfg, 0,sizeof(SchPhyCellGrpCfg));
-   if(fillPhyCellGroupCfg(ueCfg->phyCellGrpCfg, &schUeCfg->phyCellGrpCfg) != ROK)
+   if(ueCfg->phyCellGrpCfgPres == true)
    {
-      DU_LOG("\nMAC : fillPhyCellGroupCfg() failed");
-      return RFAILED;
+     schUeCfg->phyCellGrpCfgPres = true;
+     /* Copy Physical cell group config */
+      memset(&schUeCfg->phyCellGrpCfg, 0,sizeof(SchPhyCellGrpCfg));
+      if(fillPhyCellGroupCfg(ueCfg->phyCellGrpCfg, &schUeCfg->phyCellGrpCfg) != ROK)
+      {
+         DU_LOG("\nERROR  -->  MAC : fillPhyCellGroupCfg() failed");
+         return RFAILED;
+      }
    }
 
-   /* Copy sp cell config */
-   memset(&schUeCfg->spCellCfg, 0, sizeof(SchSpCellCfg));
-   if(fillSpCellCfg(ueCfg->spCellCfg, &schUeCfg->spCellCfg) != ROK)
+   if(ueCfg->spCellCfgPres == true)
    {
-      DU_LOG("\nMAC : fillSpCellCfg() failed");
-      return RFAILED;
+      schUeCfg->spCellCfgPres = true;
+      /* Copy sp cell config */
+      memset(&schUeCfg->spCellCfg, 0, sizeof(SchSpCellCfg));
+      if(fillSpCellCfg(ueCfg->spCellCfg, &schUeCfg->spCellCfg) != ROK)
+      {
+         DU_LOG("\nERROR  -->  MAC : fillSpCellCfg() failed");
+         return RFAILED;
+      }
    }
-
    if(ueCfg->ambrCfg != NULLP)
    {
       MAC_ALLOC(schUeCfg->ambrCfg, sizeof(SchAmbrCfg));
       if(!schUeCfg->ambrCfg)
       {
-        DU_LOG("\nMAC : Memory allocation failed in sendReconfigReqToSch");
-        return RFAILED;
+         DU_LOG("\nERROR  -->  MAC : Memory allocation failed in sendReconfigReqToSch");
+         return RFAILED;
       }
       schUeCfg->ambrCfg->ulBr = ueCfg->ambrCfg->ulBr;
-      schUeCfg->ambrCfg->dlBr = ueCfg->ambrCfg->dlBr;
    }
    else
       schUeCfg->ambrCfg = NULLP;
@@ -1657,7 +1694,7 @@ uint8_t fillSchUeCfg(Pst *pst, SchUeCfg *schUeCfg, MacUeCfg *ueCfg)
    ret  = fillSchLcCfgList(schUeCfg, ueCfg);
    if(ret == RFAILED)
    {
-      DU_LOG("\nMAC : Failed to copy LCs at fillSchUeCfg()");
+      DU_LOG("\nERROR  -->  MAC : Failed to copy LCs at fillSchUeCfg()");
       return ret;
    }
    return ret;
@@ -1765,7 +1802,7 @@ uint8_t fillMacLcCfgList(MacUeCb *ueCb, MacUeCfg *ueCfg)
                     /*Nothing to Modify in DL LC CB */
                      /*Modify UL LC CB */
                      ueCb->ulInfo.lcCb[ueLcIdx].lcGrpId = ueCfg->lcCfgList[lcIdx].ulLcCfg.lcGroup;
-                     DU_LOG("\nMAC: Successfully Modified LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId);
+                     DU_LOG("\nINFO  -->  MAC: Successfully Modified LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId);
                      break;
                  }
                  if(ueCfg->lcCfgList[lcIdx].configType == CONFIG_DEL)
@@ -1777,7 +1814,7 @@ uint8_t fillMacLcCfgList(MacUeCb *ueCb, MacUeCfg *ueCfg)
                      memset(&ueCb->ulInfo.lcCb[ueLcIdx], 0, sizeof(UlLcCb));
                      (ueCb->ulInfo.numUlLc)--;
                      updateMacUlCb(ueLcIdx, &ueCb->ulInfo);
-                     DU_LOG("\nMAC: Successfully Deleted LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId);
+                     DU_LOG("\nINFO  -->  MAC: Successfully Deleted LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId);
                      break;
                  }
               }
@@ -1812,17 +1849,23 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx)
    ueCb->ueIdx = ueCfg->ueIdx;
    ueCb->crnti = ueCfg->crnti;
    ueCb->cellCb = macCb.macCell[cellIdx];
-   ueCb->dlInfo.dlHarqEnt.numHarqProcs = \
+   if(ueCfg->spCellCfgPres)
+   {
+      ueCb->dlInfo.dlHarqEnt.numHarqProcs = \
       ueCfg->spCellCfg.servCellCfg.pdschServCellCfg.numHarqProcForPdsch; 
+   }
    ueCb->state = UE_STATE_ACTIVE;
    /*TODO: To check the bsr value during implementation */
-   ueCb->bsrTmrCfg.periodicTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.periodicTimer;
-   ueCb->bsrTmrCfg.retxTimer     = ueCfg->macCellGrpCfg.bsrTmrCfg.retxTimer;
-   ueCb->bsrTmrCfg.srDelayTimer  = ueCfg->macCellGrpCfg.bsrTmrCfg.srDelayTimer;
+   if(ueCfg->macCellGrpCfgPres)
+   {
+      ueCb->bsrTmrCfg.periodicTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.periodicTimer;
+      ueCb->bsrTmrCfg.retxTimer     = ueCfg->macCellGrpCfg.bsrTmrCfg.retxTimer;
+      ueCb->bsrTmrCfg.srDelayTimer  = ueCfg->macCellGrpCfg.bsrTmrCfg.srDelayTimer;
+   }
    ret = fillMacLcCfgList(ueCb, ueCfg);
    if(ret == RFAILED)
    {
-      DU_LOG("\nMAC: Failed while filing MAC LC List at fillMacUeCb()");
+      DU_LOG("\nERROR  -->  MAC: Failed while filing MAC LC List at fillMacUeCb()");
    }
    return ret;
 }
@@ -1920,7 +1963,7 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
    if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\
       &&(ueCb->state == UE_STATE_ACTIVE))
    {
-      DU_LOG("\n MAC : CRNTI %d already configured ", ueCfg->crnti);
+      DU_LOG("\nERROR  -->  MAC : CRNTI %d already configured ", ueCfg->crnti);
       return ROKDUP;
    }
    else
@@ -1929,7 +1972,7 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
       ret = fillMacUeCb(ueCb, ueCfg, cellIdx);
       if(ret != ROK)
       {
-         DU_LOG("\nMAC : Failed to create Ue Cb at createUeCb()");
+         DU_LOG("\nERROR  -->  MAC : Failed to create Ue Cb at createUeCb()");
          return ret;
       }
       else
@@ -1965,11 +2008,11 @@ uint8_t modifyUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg)
    if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\
       &&(ueCb->state == UE_STATE_ACTIVE))
    {
-      DU_LOG("\n MAC : Modifying Ue config Req for CRNTI %d ", ueCfg->crnti);
+      DU_LOG("\nINFO  -->  MAC : Modifying Ue config Req for CRNTI %d ", ueCfg->crnti);
       ret = fillMacUeCb(ueCb, ueCfg, cellIdx);
       if(ret != ROK)
       {
-         DU_LOG("\nMAC : Failed to modify MacUeCb at modifyUeCb()");
+         DU_LOG("\nERROR  -->  MAC : Failed to modify MacUeCb at modifyUeCb()");
          return ret;
       }
       else
@@ -2010,14 +2053,14 @@ uint8_t procMacUeCfgData(Pst *pst, MacUeCfg *ueCfg)
    /* Validate cell id */
    if(macCb.macCell[cellIdx]->cellId != ueCfg->cellId)
    {
-      DU_LOG("\nMAC : Cell Id %d not configured", ueCfg->cellId);
+      DU_LOG("\nERROR  -->  MAC : Cell Id %d not configured", ueCfg->cellId);
       return RFAILED;
    }
 
    /* Check if max number of UE configured */
    if(macCb.macCell[cellIdx]->numActvUe > MAX_NUM_UE)
    {
-      DU_LOG("MAC : Max number of UE [%d] already configured", MAX_NUM_UE);
+      DU_LOG("\nERROR  -->  MAC : Max number of UE [%d] already configured", MAX_NUM_UE);
       return RFAILED;
    }
 
@@ -2028,12 +2071,12 @@ uint8_t procMacUeCfgData(Pst *pst, MacUeCfg *ueCfg)
       case EVENT_UE_CONFIG_RSP_TO_MAC:
         ret = createUeCb(cellIdx, ueCb, ueCfg);
         if(ret != ROK)
-            DU_LOG("\nMAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx);
+            DU_LOG("\nERROR  -->  MAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx);
         break;
       case EVENT_UE_RECONFIG_RSP_TO_MAC:
         ret = modifyUeCb(cellIdx, ueCb, ueCfg);
         if(ret != ROK)
-            DU_LOG("\nMAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx);
+            DU_LOG("\nERROR  -->  MAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx);
         break;
       default:
         break;
@@ -2066,7 +2109,7 @@ uint8_t copyToTmpData(MacUeCfg *ueCfg)
    MAC_ALLOC(tmpData, sizeof(MacUeCfg));
    if(!tmpData)
    {
-      DU_LOG("\nMAC: Memory Alloc Failed at copyToTmpData()");
+      DU_LOG("\nERROR  -->  MAC: Memory Alloc Failed at copyToTmpData()");
       return RFAILED;
    }
    memcpy(tmpData, ueCfg, sizeof(MacUeCfg));
@@ -2096,7 +2139,7 @@ uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg)
    SchUeCfg   schUeCfg;
    memset(&schUeCfg, 0, sizeof(SchUeCfg));
 
-   DU_LOG("\nMAC : UE Create Request for CRNTI[%d]", ueCfg->crnti);
+   DU_LOG("\nINFO  -->  MAC : UE Create Request for CRNTI[%d]", ueCfg->crnti);
 
    if(ueCfg)
    {
@@ -2107,23 +2150,23 @@ uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg)
          /*Sending Cfg Req to SCH */
         ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
         if(ret != ROK)
-           DU_LOG("\nMAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()");
+           DU_LOG("\nERROR  -->  MAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()");
         else
         {
             /* Fill event and send UE create request to SCH */
             ret = sendUeReqToSch(pst, &schUeCfg);
            if(ret != ROK)
-              DU_LOG("\nMAC : Failed to send UE Create request to SCH");
+              DU_LOG("\nERROR  -->  MAC : Failed to send UE Create request to SCH");
         }
       }
       else 
       {
-        DU_LOG("\nMAC : Failed to store MAC UE CFG ");
+        DU_LOG("\nERROR  -->  MAC : Failed to store MAC UE CFG ");
       }
    }
    else
    {
-      DU_LOG("\nMAC : MAC UE Create request processing failed");
+      DU_LOG("\nERROR  -->  MAC : MAC UE Create request processing failed");
       ret = RFAILED;
    }
    /* FREE shared memory */
@@ -2156,7 +2199,7 @@ uint8_t MacSendUeCreateRsp(MacRsp result, SchUeCfgRsp *schCfgRsp)
    MAC_ALLOC_SHRABL_BUF(cfgRsp, sizeof(MacUeCfgRsp));
    if(!cfgRsp)
    {
-      DU_LOG("\nMAC: Memory allocation for UE config response failed");
+      DU_LOG("\nERROR  -->  MAC: Memory allocation for UE config response failed");
       return RFAILED;
    }
 
@@ -2196,7 +2239,7 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp)
    MAC_ALLOC_SHRABL_BUF(cfgRsp, sizeof(MacUeCfgRsp));
    if(!cfgRsp)
    {
-      DU_LOG("\nMAC: Memory allocation for UE Reconfig response failed");
+      DU_LOG("\nERROR  -->  MAC: Memory allocation for UE Reconfig response failed");
       return RFAILED;
    }
 
@@ -2239,7 +2282,7 @@ MacUeCfg *getMacUeCfg(uint16_t cellIdx, uint8_t ueIdx)
    }
    else
    {
-      DU_LOG("\nMAC: Failed to get macCellCb in getMacUeCfg()");
+      DU_LOG("\nERROR  -->  MAC: Failed to get macCellCb in getMacUeCfg()");
    }
    return ueCfg;
 }
@@ -2273,7 +2316,7 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
    ueCfg = getMacUeCfg(cellIdx, schCfgRsp->ueIdx);
    if(ueCfg == NULLP)
    {
-      DU_LOG("\nMAC : Failed to find the Mac Ue Cfg for event [%d] in MacProcSchUeCfgRsp()", pst->event);
+      DU_LOG("\nERROR  -->  MAC : Failed to find the Mac Ue Cfg for event [%d] in MacProcSchUeCfgRsp()", pst->event);
       ret = RFAILED;
    }
 
@@ -2283,7 +2326,7 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
       {
          if(schCfgRsp->rsp != RSP_NOK)
         {
-            DU_LOG("\nMAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
+            DU_LOG("\nINFO  -->  MAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
            if(ret == ROK)
            {
               ret = procMacUeCfgData(pst, ueCfg);
@@ -2295,7 +2338,7 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
         }
         else
         {
-            DU_LOG("\nMAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
+            DU_LOG("\nERROR  -->  MAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
         }
          ret = MacSendUeCreateRsp(result, schCfgRsp);
       }
@@ -2305,7 +2348,7 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
       {
          if(schCfgRsp->rsp != RSP_NOK)
         {
-            DU_LOG("\nMAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
+            DU_LOG("\nINFO  -->  MAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
            if(ret == ROK)
            {
               ret = procMacUeCfgData(pst, ueCfg);
@@ -2317,7 +2360,7 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp)
         }
         else
         {
-            DU_LOG("\nMAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
+            DU_LOG("\nERROR  -->  MAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti);
         }
          ret = MacSendUeReconfigRsp(result, schCfgRsp);
       }
@@ -2353,7 +2396,7 @@ uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg)
    SchUeCfg   schUeCfg;
    memset(&schUeCfg, 0, sizeof(SchUeCfg));
 
-   DU_LOG("\nMAC : UE Reconfig Request for CRNTI[%d]", ueCfg->crnti);
+   DU_LOG("\nINFO  -->  MAC : UE Reconfig Request for CRNTI[%d]", ueCfg->crnti);
 
    if(ueCfg)
    {
@@ -2362,25 +2405,25 @@ uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg)
       if(ret == ROK)
       {
          /*Sending Cfg Req to SCH */
-        ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
-        if(ret != ROK)
-           DU_LOG("\nMAC : Failed to fill sch Ue Cfg at MacProcUeReconfigReq()");
+         ret = fillSchUeCfg(pst, &schUeCfg, ueCfg);
+         if(ret != ROK)
+            DU_LOG("\nERROR  -->  MAC : Failed to fill sch Ue Cfg at MacProcUeReconfigReq()");
          else
-        {
+         {
             /* Fill event and send UE create request to SCH */
             ret = sendUeReqToSch(pst, &schUeCfg);
-           if(ret != ROK)
-              DU_LOG("\nMAC : Failed to send UE Reconfig Request to SCH");
-        }
+            if(ret != ROK)
+               DU_LOG("\nERROR  -->  MAC : Failed to send UE Reconfig Request to SCH");
+         }
       }
       else 
       {
-        DU_LOG("\nMAC : Failed to store MAC UE Cb ");
+         DU_LOG("\nERROR  -->  MAC : Failed to store MAC UE Cb ");
       }
    }
    else
    {
-      DU_LOG("\nMAC : MAC UE Create request processing failed");
+      DU_LOG("\nERROR  -->  MAC : MAC UE Create request processing failed");
       ret = RFAILED;
    }
    /* FREE shared memory */
@@ -2388,6 +2431,611 @@ uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg)
    return ROK;
 }
 
+/*******************************************************************
+*
+* @brief Fill and Send UE Delete response from MAC to DU APP
+*
+* @details
+*
+*    Function : MacSendUeDeleteRsp 
+*
+*    Functionality: Fill and Send UE Delete response from MAC to DUAPP
+*
+* @params[in] MAC UE delete result
+*             SCH UE delete response
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+
+uint8_t MacSendUeDeleteRsp(uint16_t cellId, uint16_t crnti, UeDeleteStatus result)
+{
+   MacUeDeleteRsp *deleteRsp;
+   Pst            rspPst;
+
+   MAC_ALLOC_SHRABL_BUF(deleteRsp, sizeof(MacUeDeleteRsp));
+   if(!deleteRsp)
+   {
+      DU_LOG("\nERROR  -->  MAC : Memory allocation for UE delete response failed");
+      return RFAILED;
+   }
+
+   /* Filling UE delete response */
+   deleteRsp->cellId = cellId;
+   GET_UE_IDX(crnti,deleteRsp->ueIdx);
+   deleteRsp->result = result;
+
+   /* Fill Post structure and send UE delete response*/
+   memset(&rspPst, 0, sizeof(Pst));
+   FILL_PST_MAC_TO_DUAPP(rspPst, EVENT_MAC_UE_DELETE_RSP);
+   return (*macDuUeDeleteRspOpts[rspPst.selector])(&rspPst, deleteRsp);
+}
+
+/*******************************************************************
+*
+* @brief freeing the Pucch Resrc Cfg 
+*
+* @details
+*
+*    Function : deletePucchResourcesCfg 
+*
+*    Functionality: freeing the Pucch Resrc Cfg
+*
+* @params[in] PucchResrcCfg *resrcCfg
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+
+void deletePucchResourcesCfg(PucchResrcCfg *resrcCfg)
+{
+   uint8_t resrcIdx;
+   for(resrcIdx =0; resrcIdx< resrcCfg->resrcToAddModListCount;resrcIdx++)
+   {
+      switch(resrcCfg->resrcToAddModList[resrcIdx].pucchFormat)
+      {
+         case PUCCH_FORMAT_0:
+         {
+            MAC_FREE(resrcCfg->resrcToAddModList[resrcIdx].PucchFormat.format0, sizeof(PucchFormat0));
+            break;
+         }
+         case PUCCH_FORMAT_1:
+         {
+            MAC_FREE(resrcCfg->resrcToAddModList[resrcIdx].PucchFormat.format1, sizeof(PucchFormat1));
+            break;
+         }
+         case PUCCH_FORMAT_2:
+         {
+            MAC_FREE(resrcCfg->resrcToAddModList[resrcIdx].PucchFormat.format2, sizeof(PucchFormat2_3));
+            break;
+         }
+         case PUCCH_FORMAT_3:
+         {
+            MAC_FREE(resrcCfg->resrcToAddModList[resrcIdx].PucchFormat.format3, sizeof(PucchFormat2_3));
+            break;
+         }
+         case PUCCH_FORMAT_4:
+         {
+            MAC_FREE(resrcCfg->resrcToAddModList[resrcIdx].PucchFormat.format4, sizeof(PucchFormat4));
+            break;
+         }
+      }
+   }
+
+}
+
+/*******************************************************************
+*
+* @brief Function to delete MAC Pdsch ServCellCfg
+*
+* @details
+*
+*    Function : deleteMacPdschServCellCfg
+*
+*    Functionality: Function to delete MAC Pdsch ServCellCfg
+*
+* @params[in] PdschServCellCfg *pdschServCellCfg
+* @return void
+*
+* ****************************************************************/
+
+void deleteMacPdschServCellCfg(PdschServCellCfg *pdschServCellCfg)
+{
+   MAC_FREE(pdschServCellCfg->maxMimoLayers, sizeof(uint8_t));
+   MAC_FREE(pdschServCellCfg->maxCodeBlkGrpPerTb, sizeof(MaxCodeBlkGrpPerTB));
+   MAC_FREE(pdschServCellCfg->codeBlkGrpFlushInd, sizeof(bool));
+   MAC_FREE(pdschServCellCfg->xOverhead, sizeof(PdschXOverhead));
+}
+
+/*******************************************************************
+*
+* @brief Handles UE Delete requst from DU APP
+*
+* @details
+*
+*    Function : deleteMacUeCb 
+*
+*    Functionality: Handles UE Delete requst from DU APP
+*
+* @params[in] MacCellCb *cellCb,uint16_t ueIdx
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+
+void deleteMacUeCb(MacUeCb  *ueCb)
+{
+   MacUeCfg *ueCfg = NULLP;
+   ServCellCfgInfo *servCellCfg;
+   
+   if(ueCb->cellCb)
+   {
+      MAC_FREE(ueCb->cellCb->macRaCb[ueCb->ueIdx-1].msg4Pdu,  ueCb->cellCb->macRaCb[ueCb->ueIdx-1].msg4PduLen);
+      MAC_FREE(ueCb->cellCb->macRaCb[ueCb->ueIdx-1].msg4TxPdu, ueCb->cellCb->macRaCb[ueCb->ueIdx-1].msg4TbSize);
+      
+      if(ueCb->cellCb->ueCfgTmpData[ueCb->ueIdx-1])
+      {
+         ueCfg =ueCb->cellCb->ueCfgTmpData[ueCb->ueIdx-1]; 
+         MAC_FREE(ueCfg->ambrCfg, sizeof(AmbrCfg));
+         if(ueCfg->spCellCfgPres)
+         {
+            servCellCfg = &ueCfg->spCellCfg.servCellCfg;
+            MAC_FREE(servCellCfg->bwpInactivityTmr, sizeof(uint8_t));
+            
+            if(servCellCfg->initUlBwp.pucchPresent)
+            {
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.resrcSet, sizeof(PucchResrcSetCfg));
+               
+               if(servCellCfg->initUlBwp.pucchCfg.resrc)
+               {
+                  deletePucchResourcesCfg(servCellCfg->initUlBwp.pucchCfg.resrc);
+                  MAC_FREE(servCellCfg->initUlBwp.pucchCfg.resrc, sizeof(PucchResrcCfg));
+               }
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.format1, sizeof(PucchFormatCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.format2, sizeof(PucchFormatCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.format3, sizeof(PucchFormatCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.format4, sizeof(PucchFormatCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.schedReq, sizeof(PucchSchedReqCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.multiCsiCfg, sizeof(PucchMultiCsiCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.spatialInfo, sizeof(PucchSpatialCfg));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.dlDataToUlAck , sizeof(PucchDlDataToUlAck));
+               MAC_FREE(servCellCfg->initUlBwp.pucchCfg.powerControl, sizeof(PucchPowerControl));
+               deleteMacPdschServCellCfg(&servCellCfg->pdschServCellCfg);
+            }
+         }
+         for(uint8_t idx=0 ;idx < ueCfg->numLcs; idx++)
+         {
+            MAC_FREE(ueCfg->lcCfgList[idx].drbQos, sizeof(DrbQosInfo));
+            MAC_FREE(ueCfg->lcCfgList[idx].snssai, sizeof(Snssai));
+         }
+         MAC_FREE(ueCb->cellCb->ueCfgTmpData[ueCb->ueIdx-1],sizeof(MacUeCfg));
+      }
+   }
+   memset(ueCb, 0, sizeof(MacUeCb));
+}
+
+/*******************************************************************
+*
+* @brief  Processes UE delete response from scheduler
+*
+* @details
+*
+*    Function : MacProcSchUeCfgRsp
+*
+*    Functionality:
+*      Processes UE create delete from scheduler
+*
+* @params[in] Pst : Post structure
+*             schUeDelRsp : Scheduler UE delete respons
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+
+uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp)
+{
+   uint8_t ueIdx =0;
+   uint16_t cellIdx=0;
+   uint8_t ret = RFAILED;
+   UeDeleteStatus result;
+   
+   if(schUeDelRsp)
+   {
+      if(schUeDelRsp->rsp == RSP_OK)
+      {
+         DU_LOG("\nINFO   -->  MAC : SCH UE Delete response for CRNTI[%d] is successful", schUeDelRsp->crnti);
+         GET_CELL_IDX(schUeDelRsp->cellId, cellIdx);
+         if(macCb.macCell[cellIdx])
+         {
+            GET_UE_IDX(schUeDelRsp->crnti, ueIdx);
+            if(macCb.macCell[cellIdx]->ueCb[ueIdx -1].crnti == schUeDelRsp->crnti)
+            {
+               deleteMacUeCb(&macCb.macCell[cellIdx]->ueCb[ueIdx -1]);
+               macCb.macCell[cellIdx]->numActvUe--;
+               result = SUCCESS;
+               ret = ROK;
+            }
+            else
+            {
+               DU_LOG("\nERROR  -->  MAC : MacProcSchUeDeleteRsp(): crnti[%d] does not exist ",schUeDelRsp->crnti);
+               result = UEIDX_INVALID;
+            }
+         }
+         else
+         {
+            DU_LOG("\nERROR  -->  MAC : MacProcSchUeDeleteRsp(): cellId[%d] does not exist ",schUeDelRsp->cellId);
+            result = CELLID_INVALID;
+         }
+      }
+      else
+      {
+         result = (schUeDelRsp->cause == INVALID_CELLID) ? CELLID_INVALID : UEIDX_INVALID;
+      }
+      if(MacSendUeDeleteRsp(schUeDelRsp->cellId, schUeDelRsp->crnti, result) != ROK)
+      {
+         DU_LOG("\nERROR  -->  MAC: MacProcSchUeDeleteRsp(): Failed to send UE delete response");
+      }
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  MAC: MacProcSchUeDeleteRsp(): Failed to receive UE delete response by SCH");
+      ret = RFAILED;
+   }
+   return ret;
+}
+
+/*******************************************************************
+*
+* @brief Sends UE delete req to Scheduler
+*
+* @details
+*
+*    Function : sendUeDelReqToSch
+*
+*    Functionality: sends UE delete req to Scheduler
+*
+* @params[in] Pst *pst,  MacUeDelete *ueDelete
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+
+uint8_t sendUeDelReqToSch(Pst *pst, MacUeDelete *ueDelete)
+{
+   if(ueDelete != NULLP)
+   {
+      Pst schPst;
+      SchUeDelete schUeDel;
+
+      memset(&schUeDel, 0, sizeof(SchUeDelete));
+      schUeDel.cellId = ueDelete->cellId;
+      schUeDel.crnti  = ueDelete->crnti;
+      MAC_FREE_SHRABL_BUF(pst->region, pst->pool, ueDelete, sizeof(MacUeDelete));
+      FILL_PST_MAC_TO_SCH(schPst, EVENT_UE_DELETE_REQ_TO_SCH);
+      return(*macSchUeDeleteReqOpts[schPst.selector])(&schPst, &schUeDel);
+   }
+   else
+   {
+      DU_LOG("\nERROR  --> SCH: sendUeDelReqToSch():MAC Ue Delete is NULL");
+      return RFAILED;
+   }
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Handles UE Delete requst from DU APP
+ *
+ * @details
+ *
+ *    Function : MacProcUeDeleteReq
+ *
+ *    Functionality: Handles UE Delete requst from DU APP
+ *
+ * @params[in] Pst *pst, MacUeDelete *ueDelete
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+
+uint8_t MacProcUeDeleteReq(Pst *pst, MacUeDelete *ueDelete)
+{
+   uint8_t ret = ROK;
+   uint8_t cellIdx=0;
+   UeDeleteStatus result=SUCCESS;
+   MacUeCb  *ueCb = NULLP;
+   MacCellCb *cellCb = NULLP;
+
+   DU_LOG("\nINFO   -->  MAC : UE Delete Request received for ueIdx[%d]", ueDelete->ueIdx);
+
+   if(ueDelete)
+   {
+      GET_CELL_IDX(ueDelete->cellId, cellIdx);     
+      cellCb = macCb.macCell[cellIdx];
+      if(cellCb)
+      {
+         ueCb = &cellCb->ueCb[ueDelete->ueIdx-1];
+         if(ueCb->crnti == ueDelete->crnti)
+         {
+            ret = sendUeDelReqToSch(pst, ueDelete);
+            if(ret != ROK)
+            {
+               DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): Failed to send UE Delete Request to SCH");
+               ret = RFAILED;
+            }
+         }
+         else
+         {
+            DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): CRNTI is not matched");
+            result = UEIDX_INVALID;
+         }
+      }
+      else
+      {
+         DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): Failed to find the MacUeCb of UeIdx = %d",ueDelete->ueIdx);
+         result = CELLID_INVALID;
+      }
+
+      if(result != SUCCESS)
+      {
+         MacSendUeDeleteRsp(ueDelete->cellId, ueDelete->crnti, result);
+         MAC_FREE_SHRABL_BUF(pst->region, pst->pool, ueDelete, sizeof(MacUeDelete));
+         ret = RFAILED;
+      }
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  MAC : MacProcUeDeleteReq(): MAC UE delete request processing failed");
+      ret = RFAILED;
+   }
+   return ret;
+}
+
+/*******************************************************************
+ *
+ * @brief Fill and Send Cell Delete response from MAC to DU APP
+ *
+ * @details
+ *
+ *    Function : MacSendCellDeleteRsp
+ *
+ *    Functionality: Fill and Send Cell Delete response from MAC to DUAPP
+ *
+ * @params[in] MAC Cell delete result
+ *             SCH Cell delete response
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t MacSendCellDeleteRsp(CellDeleteStatus result, uint8_t cellId)
+{
+   MacCellDeleteRsp *deleteRsp=NULLP;
+   Pst            rspPst;
+
+   MAC_ALLOC_SHRABL_BUF(deleteRsp, sizeof(MacCellDeleteRsp));
+   if(!deleteRsp)
+   {
+      DU_LOG("\nERROR  -->  MAC : MacSendCellDeleteRsp(): Memory allocation for Cell delete response failed");
+      return RFAILED;
+   }
+
+   /* Filling CELL delete response */
+   deleteRsp->cellId = cellId;
+   deleteRsp->result = result;
+
+   /* Fill Post structure and send CELL delete response*/
+   memset(&rspPst, 0, sizeof(Pst));
+   FILL_PST_MAC_TO_DUAPP(rspPst, EVENT_MAC_CELL_DELETE_RSP);
+   return (*macDuCellDeleteRspOpts[rspPst.selector])(&rspPst, deleteRsp);
+}
+
+/*******************************************************************
+ *
+ * @brief  delete MAC CellCb information
+ *
+ * @details
+ *
+ *    Function : deleteMacCellCb 
+ *
+ *    Functionality:
+ *      delete MAC CellCb information
+ *
+ * @params[in] MacCellCb * cellCb 
+ *             
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+void deleteMacCellCb(MacCellCb * cellCb)
+{
+   uint8_t idx;
+   for(idx=0; idx<MAX_SLOTS; idx++)  
+   {
+      MAC_FREE(cellCb->dlSlot[idx].dlInfo.rarAlloc, sizeof(RarAlloc));
+      if(cellCb->dlSlot[idx].dlInfo.ulGrant)
+      {
+         MAC_FREE(cellCb->dlSlot[idx].dlInfo.ulGrant->dciInfo.pdschCfg, sizeof(PdschCfg));
+         MAC_FREE(cellCb->dlSlot[idx].dlInfo.ulGrant, sizeof(DciInfo));
+      }
+      if(cellCb->dlSlot[idx].dlInfo.dlMsgAlloc)
+      {
+         MAC_FREE(cellCb->dlSlot[idx].dlInfo.dlMsgAlloc->dlMsgInfo.dlMsgPdu,\
+               cellCb->dlSlot[idx].dlInfo.dlMsgAlloc->dlMsgInfo.dlMsgPduLen);
+         MAC_FREE(cellCb->dlSlot[idx].dlInfo.dlMsgAlloc, sizeof(DlMsgAlloc));
+      }
+   }
+
+   memset(cellCb, 0, sizeof(MacCellCb));
+}
+
+/*******************************************************************
+ *
+ * @brief  Processes CELL delete response from scheduler
+ *
+ * @details
+ *
+ *    Function : MacProcSchCellDeleteRsp 
+ *
+ *    Functionality:
+ *      Processes CELL delete from scheduler
+ *
+ * @params[in] Pst : Post structure
+ *             schCellDelRsp : Scheduler CELL delete respons
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * * ****************************************************************/
+uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDelRsp)
+{
+   uint8_t  ret = ROK;
+   uint16_t cellIdx=0;
+   CellDeleteStatus status;
+   
+   if(schCellDelRsp)
+   {
+      if(schCellDelRsp->rsp == RSP_OK)
+      {
+         DU_LOG("\nINFO   -->  MAC : SCH CELL Delete response for cellId[%d] is successful ", \
+         schCellDelRsp->cellId);
+         GET_CELL_IDX(schCellDelRsp->cellId, cellIdx);
+         if(macCb.macCell[cellIdx]) 
+         {
+            if(macCb.macCell[cellIdx]->cellId == schCellDelRsp->cellId)
+            {
+               deleteMacCellCb(macCb.macCell[cellIdx]);
+               status  = SUCCESSFUL_RSP;
+               MAC_FREE(macCb.macCell[cellIdx], sizeof(MacCellCb));
+            }
+            else
+            {
+                DU_LOG("ERROR  -->  MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId);
+                status = CELL_ID_INVALID;
+                ret = RFAILED;
+            }
+         }
+         else
+         {
+            DU_LOG("ERROR  -->  MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId);
+            status = CELL_ID_INVALID;
+            ret = RFAILED;
+         }
+      }
+      else
+      {
+         DU_LOG("ERROR  -->  MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId);
+         status = CELL_ID_INVALID;
+         ret = RFAILED;
+      }
+      if(MacSendCellDeleteRsp(status, schCellDelRsp->cellId) != ROK)
+      {
+         DU_LOG("\nERROR  -->  MAC: MacProcSchCellDeleteRsp(): Failed to send CELL delete response");
+         ret = RFAILED;
+      }
+
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  MAC: MacProcSchCellDeleteRsp(): schCellDelRsp is NULL");
+      ret = RFAILED;
+   }
+   return ret;
+}
+
+/*******************************************************************
+ *
+ * @brief Sends Cell delete req to Scheduler
+ *
+ * @details
+ *
+ *    Function : sendCellDelReqToSch
+ *
+ *    Functionality: sends Cell delete req to Scheduler
+ *
+ * @params[in]  SchCellDelete *schCellDel
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+
+uint8_t sendCellDelReqToSch(SchCellDelete *schCellDel)
+{
+   Pst schPst;
+   FILL_PST_MAC_TO_SCH(schPst, EVENT_CELL_DELETE_REQ_TO_SCH);
+   return(*macSchCellDeleteReqOpts[schPst.selector])(&schPst, schCellDel);
+}
+
+/*******************************************************************
+ *
+ * @brief Handles CELL Delete requst from DU APP
+ *
+ * @details
+ *
+ *    Function : MacProcCellDeleteReq
+ *
+ *    Functionality: Handles CELL Delete requst from DU APP
+ *
+ * @params[in] Pst *pst, MacCellDelete *cellDelete
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ *
+ * ****************************************************************/
+uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDelete *cellDelete)
+{
+   uint8_t ret = ROK, cellIdx=0;
+   SchCellDelete schCellDelete;
+
+   DU_LOG("\nINFO   -->  MAC : Cell Delete Request received for cellId[%d]", cellDelete->cellId);
+
+   if(cellDelete)
+   {
+      GET_CELL_IDX(cellDelete->cellId, cellIdx);
+      if(macCb.macCell[cellIdx])
+      {
+         if(macCb.macCell[cellIdx]->cellId == cellDelete->cellId)
+         {
+            memset(&schCellDelete, 0, sizeof(SchCellDelete));
+            schCellDelete.cellId =  cellDelete->cellId;
+            ret = sendCellDelReqToSch(&schCellDelete);
+            if(ret != ROK)
+            {
+               DU_LOG("\nERROR  -->  MAC : MacProcCellDeleteReq(): Failed to send UE Delete Request to SCH");
+               ret = RFAILED;
+            }
+         }
+         else
+         {
+            DU_LOG("\nERROR  -->  MAC : MacProcCellDeleteReq(): Failed to find the MacUeCb of CellId = %d",\
+            cellDelete->cellId);
+            ret = RFAILED;
+         }
+      }
+      else
+      {
+         DU_LOG("\nERROR  -->  MAC : MacProcCellDeleteReq(): Failed to find the MacUeCb of CellId = %d",\
+               cellDelete->cellId);
+         ret = RFAILED;
+      }
+
+      if(ret == RFAILED)
+      {
+          DU_LOG("\nERROR  -->  MAC : MacProcCellDeleteReq(): Sending failure response to DU");
+          if(MacSendCellDeleteRsp(CELL_ID_INVALID, cellDelete->cellId) != ROK)
+          {
+             DU_LOG("\nERROR  -->  MAC : MacProcCellDeleteReq(): failed to send cell delete rsp for cellID[%d]",\
+             cellDelete->cellId);
+          }
+
+      }
+      MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellDelete, sizeof(MacCellDelete));
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  MAC : MacProcCellDeleteReq(): Received MacCellDelete is NULL");
+      ret = RFAILED;
+   }
+   return ret;
+}
 
 /**********************************************************************
   End of file