[Epic-ID: ODUHIGH-461][Task-ID: ODUHIGH-468]Unused files and functions removed/disabled
[o-du/l2.git] / src / 5gnrmac / rg_tom.c
diff --git a/src/5gnrmac/rg_tom.c b/src/5gnrmac/rg_tom.c
deleted file mode 100755 (executable)
index ed39839..0000000
+++ /dev/null
@@ -1,2205 +0,0 @@
-/*******************************************************************************
-################################################################################
-#   Copyright (c) [2017-2019] [Radisys]                                        #
-#                                                                              #
-#   Licensed under the Apache License, Version 2.0 (the "License");            #
-#   you may not use this file except in compliance with the License.           #
-#   You may obtain a copy of the License at                                    #
-#                                                                              #
-#       http://www.apache.org/licenses/LICENSE-2.0                             #
-#                                                                              #
-#   Unless required by applicable law or agreed to in writing, software        #
-#   distributed under the License is distributed on an "AS IS" BASIS,          #
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
-#   See the License for the specific language governing permissions and        #
-#   limitations under the License.                                             #
-################################################################################
-*******************************************************************************/
-
-/************************************************************************
-     Name:     LTE-MAC layer
-  
-     Type:     C source file
-  
-     Desc:     C source code for Entry point fucntions
-  
-     File:     rg_tom.c 
-  
-**********************************************************************/
-
-/** @file rg_tom.c 
-@brief This module does processing related to handling of lower interface APIs 
-invoked by PHY towards MAC
-*/
-/* header include files -- defines (.h) */
-#include "common_def.h"
-#include "rgu.h"           /* RGU defines */
-#include "tfu.h"           /* RGU defines */
-#include "lrg.h"           /* layer management defines for LTE-MAC */
-#include "crg.h"           /* layer management defines for LTE-MAC */
-#include "rg_sch_inf.h"           /* layer management defines for LTE-MAC */
-#include "rg.h"            /* defines and macros for MAC */
-#include "rg_env.h"            /* defines and macros for MAC */
-#include "rg_err.h"            /* defines and macros for MAC */
-#include "rgm.h"           /* layer management typedefs for MAC */
-
-/* header/extern include files (.x) */
-#include "crg.x"           /* CRG interface typedefs */
-#include "rgu.x"           /* RGU types */
-#include "tfu.x"           /* RGU types */
-#include "lrg.x"           /* layer management typedefs for MAC */
-#include "rg_sch_inf.x"    /* SCH interface typedefs */
-#include "rg_prg.x"        /* PRG interface typedefs */
-#include "rgm.x"           /* layer management typedefs for MAC */
-#include "rg.x"            /* typedefs for MAC */
-#ifdef MAC_RLC_UL_RBUF
-#include "ss_rbuf.h"
-#include "ss_rbuf.x"
-#endif
-
-/* ADD Changes for Downlink UE Timing Optimization */
-#ifndef LTEMAC_DLUE_TMGOPTMZ 
-static S16 rgTOMUtlProcDlSf ARGS(( RgDlSf *dlSf, RgCellCb   *cellCb,
-                                    RgErrInfo  *err));
-#else
-S16 rgTOMUtlProcDlSf ARGS((RgDlSf *dlSf, RgCellCb *cellCb,
-                                  RgErrInfo  *err));
-#endif
-static S16 rgTOMProcCrntiCEInDatInd ARGS((
-RgMacPdu          *pdu,
-RgUeCb            *prevUeCb,
-RgCellCb          *cellCb,
-TfuDatInfo        *datInfo,
-RgInfCeInfo       *ceInfo,
-uint16_t          slot
-));
-
-static S16 rgTOMProcCCCHSduInDatInd ARGS((
-RgMacPdu          *pdu,
-RgUeCb            *prevUeCb,
-RgCellCb          *cellCb,
-TfuDatInfo        *datInfo,
-RgInfCeInfo       *ceInfo,
-uint16_t           slot
-));
-
-S16 rgHndlFlowCntrl
-(
-RgCellCb       *cell,
-RgInfSfAlloc        *sfInfo
-);
-
-S16 RgUiRguFlowCntrlInd(Pst* pst, SuId suId, RguFlowCntrlInd *flowCntrlInd);
-#ifdef EMTC_ENABLE
-S16 rgEmtcHndl(RgCellCb *cell,RgInfSfAlloc  *sfInfo);  
-S16 rgTOMEmtcUtlFillDatReqPdus(TfuDatReqInfo *datInfo, RgDlSf *dlSf, RgCellCb *cell, RgErrInfo *err);  
-Void rgTOMEmtcRlsSf(RgDlSf *dlSf);  
-#endif
-#ifdef LTE_L2_MEAS
-static Void rgTOML2MCompileActiveLCs ARGS
-((
- RgCellCb      *cellCb, 
- RgUeCb        *ueCb,
- RgMacPdu      *pdu,
- RgInfCeInfo   *ceInfo 
- ));
-static S16 rgTOMUtlL2MStoreBufSz ARGS
-((
- RgUeCb      *ueCb,
- RgInfCeInfo *ceInfo
- ));
-
-static S16 rgTomUtlPrepareL2MUlThrpInfo ARGS
-((
-   RgCellCb *cellCb,
-   RgUeCb  *ueCb,
-   RgRguDedDatInd  *dDatInd
-));
-
-
-/* The below table takes lower values of BSR Range for a BSR value
-     This is to ensure that outstanding can be decrease to zero upon reception of
-     TB, which is not guaranteed if higher Range values are used */
-   /* Note: taking value 10 for BSR index 1 */
-#ifndef MAC_5GTF_UPDATE
-static uint32_t rgLwrBsrTbl[64] = {
-   0, 10, 10, 12, 14, 17, 19, 22, 26,
-   31, 36, 42, 49, 57, 67, 78, 91,
-   107, 125, 146, 171, 200, 234, 274, 321,
-   376, 440, 515, 603, 706, 826, 967, 1132,
-   1326, 1552, 1817, 2127, 2490, 2915, 3413, 3995,
-   4677, 5476, 6411, 7505, 8787, 10287, 12043, 14099,
-   16507, 19325, 22624, 26487, 31009, 36304, 42502, 49759,
-   58255, 68201, 79846, 93479, 109439, 128125, 150000
-};
-#else
-
-static uint32_t rgLwrBsrTbl[64] = {
-0,10,13,16,19,23,29,35,43,53,65,80,98,120,147,181,223,274,337,414,
-509,625,769,945,1162,1429,1757,2161,2657,3267,4017,4940,6074,7469,
-9185,11294,13888,17077,20999,25822,31752,39045,48012,59039,72598,
-89272,109774,134986,165989,204111,250990,308634,379519,466683,
-573866,705666,867737,1067031,1312097,1613447,1984009,2439678,
-3000000};
-
-#endif
-
-#endif
-
-/* local defines */
-#define RG_TOM_INF_ALLOC(_pdu, _size, _dataPtr, _ret) {\
-   _ret = cmGetMem((Ptr)&_pdu->memCp, _size, (Ptr *)&_dataPtr); \
-}
-
-/* global variables */
-uint32_t rgUlrate_tfu;
-#ifdef EMTC_ENABLE
-uint32_t grgUlrate_tfu;
-#endif
-
-/** @brief This function fills the PDSCH data of a downlink subframe 
- *
- * @details
- *
- *     Function: rgTOMUtlFillDatReqPdus 
- *
- *         Processing steps:
- *         - Fill BCCH on DLSCH data using datInfo
- *         - Fill PCCH on DLSCH data using datInfo
- *         - Fill Dedicated data on DLSCH data using datInfo
- *         - Fill RA RSP data using datInfo
- *
- * @param  [out] TfuDatReqInfo *datInfo 
- * @param  [in]  RgDlSf     *dlSf
- * @param  [in]  RgCellCb   *cellCb
- * @param  [out] RgErrInfo *err
- * @return  S16
- *      -# ROK 
- *      -# RFAILED 
- */
-static S16 rgTOMUtlFillDatReqPdus (TfuDatReqInfo *datInfo,RgDlSf *dlSf,RgCellCb *cellCb, RgErrInfo *err)
-{
-   S16              ret;
-   TfuDatReqPduInfo *datReq=NULLP;
-   /* Moving node declaration to limited scope for optimization */
-   RgDlHqProcCb     *hqCb;
-   uint8_t               idx;
-   Inst             inst = cellCb->macInst - RG_INST_START;
-
-
-   /* first lets send the BCCH data down to PHY */
-   if (dlSf->bcch.tb != NULLP)
-   {
-      if ((ret = rgGetEventMem(inst,(Ptr *)&datReq, sizeof(TfuDatReqPduInfo),
-                 &(datInfo->memCp))) != ROK)
-      {
-        err->errCause = RGERR_TOM_MEM_EXHAUST;
-        DU_LOG("\nERROR  -->  MAC : Memory Exhaustion ");
-        return (ret);
-      }
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-#ifndef L2_OPTMZ      
-      datReq->mBuf[1] = 0;
-#else 
-      datReq->tbInfo[0].lchInfo[0].mBuf[0]=NULLP;
-#endif
-#endif
-      datReq->rnti                   =  RG_SI_RNTI;
-      datReq->dciInfo                =  dlSf->bcch.pdcch.dci;
-      /* Note: SCpyMsgMsg is not done since free of unsent buffer 
-       * has been taken care through cell delete by invoking rgTomRlsSf
-       * during shutdown */
-      datReq->nmbOfTBs               =  1;
-#ifndef L2_OPTMZ
-      datReq->mBuf[0]                =  dlSf->bcch.tb;
-#else
-      SFndLenMsg((Buffer *)dlSf->bcch.tb, &(datReq->tbInfo[0].tbSize));
-      datReq->tbInfo[0].tbPres             = TRUE;
-      datReq->tbInfo[0].lchInfo[0].mBuf[0] = dlSf->bcch.tb;
-      datReq->tbInfo[0].numLch             = 1;
-      datReq->tbInfo[0].lchInfo[0].numPdu  = 1;
-
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-      datReq->tbInfo[1].tbPres             = FALSE;
-      datReq->tbInfo[1].lchInfo[0].mBuf[0] = NULLP;
-#endif
-#endif
-      cmLListAdd2Tail(&datInfo->pdus, &(datReq->lnk));
-      datReq->lnk.node = (PTR)datReq;
-#ifdef TFU_UPGRADE      
-      /* ccpu00132314-ADD- Adding txPower offset for the PDSCH transmission */
-      datReq->txPwrOffset            = dlSf->bcch.txPwrOffset;
-#endif      
-      /* Setting the pointer to NULL post transmission */
-      dlSf->bcch.tb = NULLP;
-   }
-   /* Fill PCCH data */
-   if (dlSf->pcch.tb != NULLP)
-   {
-      if ((ret = rgGetEventMem(inst,(Ptr *)&datReq, sizeof(TfuDatReqPduInfo),
-                 &(datInfo->memCp))) != ROK)
-      {
-        err->errCause = RGERR_TOM_MEM_EXHAUST;
-        DU_LOG("\nERROR  -->  MAC : Memory Exhaustion CRNTI:%d",datReq->rnti);
-        return (ret);
-      }
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-#ifndef L2_OPTMZ      
-      datReq->mBuf[1] = 0;
-#endif     
-#endif     
-      datReq->rnti                   =  RG_P_RNTI;
-      datReq->dciInfo                = dlSf->pcch.pdcch.dci;
-      datReq->nmbOfTBs               =  1;
-#ifndef L2_OPTMZ
-      datReq->mBuf[0]                =  dlSf->pcch.tb;
-#else
-      SFndLenMsg((Buffer *)dlSf->pcch.tb, &datReq->tbInfo[0].tbSize);
-      datReq->tbInfo[0].tbPres             = TRUE;
-      datReq->tbInfo[0].lchInfo[0].mBuf[0] =  dlSf->pcch.tb;
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-      datReq->tbInfo[1].tbPres             = FALSE;
-      datReq->tbInfo[1].lchInfo[0].mBuf[0] = NULLP;
-#endif
-      datReq->tbInfo[0].numLch             = 1;
-      datReq->tbInfo[0].lchInfo[0].numPdu  = 1;
-#endif
-      cmLListAdd2Tail(&datInfo->pdus, &(datReq->lnk));
-      datReq->lnk.node = (PTR)datReq;
-#ifdef TFU_UPGRADE      
-      /* ccpu00132314-ADD- Adding txPower offset for the PDSCH transmission */
-      datReq->txPwrOffset            = dlSf->pcch.txPwrOffset;
-#endif      
-      dlSf->pcch.tb = NULLP;
-   }
-
-   for(idx=0; idx < dlSf->numRaRsp; idx++)
-   {
-      if ((ret = rgGetEventMem(inst,(Ptr *)&datReq, sizeof(TfuDatReqPduInfo),
-                 &(datInfo->memCp))) != ROK)
-      {
-        err->errCause = RGERR_TOM_MEM_EXHAUST;
-        DU_LOG("\nERROR  -->  MAC : Memory Exhaustion CRNTI:%d",
-              datReq->rnti);
-        return (ret);
-      }
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-#ifndef L2_OPTMZ      
-      datReq->mBuf[1] = 0;
-#endif    
-#endif    
-      datReq->rnti                   =  dlSf->raRsp[idx].pdcch.rnti;
-      datReq->dciInfo                = dlSf->raRsp[idx].pdcch.dci;
-      datReq->nmbOfTBs               =  1;
-#ifndef L2_OPTMZ
-      datReq->mBuf[0]                =  dlSf->raRsp[idx].rar;
-#else
-      SFndLenMsg((Buffer *)dlSf->raRsp[idx].rar, &datReq->tbInfo[0].tbSize);
-      datReq->tbInfo[0].tbPres             = TRUE;
-      datReq->tbInfo[0].lchInfo[0].mBuf[0] =  dlSf->raRsp[idx].rar;
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-      datReq->tbInfo[1].lchInfo[0].mBuf[0] = NULLP;
-      datReq->tbInfo[1].tbPres             = FALSE;
-#endif
-      datReq->tbInfo[0].numLch             = 1;
-      datReq->tbInfo[0].lchInfo[0].numPdu  = 1;
-      //   prc_trace_format_string(0x40,3,"UE Id=(%d) tbSz=(%d)",datReq->rnti, datReq->tbInfo[0].tbSize);
-#endif
-      cmLListAdd2Tail(&datInfo->pdus, &(datReq->lnk));
-      datReq->lnk.node = (PTR)datReq;
-#ifdef TFU_UPGRADE      
-      /* ccpu00132314-ADD- Adding txPower offset for the PDSCH transmission */
-      datReq->txPwrOffset            = dlSf->raRsp[idx].txPwrOffset;
-#endif
-      dlSf->raRsp[idx].rar = NULLP;
-   }
-
-   /* Fill Dedicated UE data */
-   if (dlSf->tbs.count != 0) 
-   {
-      CmLList          *node;
-      while (dlSf->tbs.first)
-      {
-        node = dlSf->tbs.first;
-        hqCb = (RgDlHqProcCb*)node->node;
-        if ((ret = rgDHMSndDatReq (cellCb, dlSf, datInfo, hqCb, err)) != ROK)
-        {
-           DU_LOG("\nERROR  -->  MAC : DHM unable to fill DATA request");
-           err->errType = RGERR_TOM_TTIIND;
-           continue;
-        }
-      } /* end of while */
-   } 
-
-   return ROK;
-} /* end of rgTOMUtlFillDatReqPdus*/ 
-
-/** @brief This function does all the processing related to a single downlink
- * subframe.
- *
- * @details 
- *
- *     Function: rgTOMUtlProcDlSf
- *
- *         Processing steps:
- *         - collate control data for all UEs and send to PHY 
- *         - collate data buffers for all UEs and send to PHY 
- *
- * @param  [in] RgDlSf     *dlSf
- * @param  [in] RgCellCb   *cellCb
- * @param  [out] RgErrInfo *err
- * @return S16
- */
-/* ADD Changes for Downlink UE Timing Optimization */
-#ifndef LTEMAC_DLUE_TMGOPTMZ 
-static S16 rgTOMUtlProcDlSf(RgDlSf *dlSf,RgCellCb *cellCb,RgErrInfo *err)
-#else
-S16 rgTOMUtlProcDlSf(RgDlSf *dlSf,RgCellCb *cellCb,RgErrInfo *err)
-#endif
-{
-   S16               ret;
-   TfuDatReqInfo     *datInfo;
-   Inst              inst = cellCb->macInst - RG_INST_START;
-
-
-   /* Fill Data Request Info from scheduler to PHY */   
-   if ((ret = rgAllocEventMem(inst,(Ptr *)&datInfo, 
-              sizeof(TfuDatReqInfo))) != ROK)
-   {
-      DU_LOG("\nERROR  -->  MAC : Unable to Allocate TfuDatReqInfo");
-      return (ret);
-   }
-   else
-   {
-      cmLListInit(&datInfo->pdus);
-#ifdef LTE_TDD
-      RGADDTOCRNTTIME(dlSf->schdTime, datInfo->timingInfo, TFU_DELTA);
-#else
-      RGADDTOCRNTTIME(dlSf->schdTime, datInfo->timingInfo, TFU_DLDATA_DLDELTA);
-#endif
-      datInfo->cellId = cellCb->cellId;
-      if((0 == (datInfo->timingInfo.sfn % 30)) && (0 == datInfo->timingInfo.slot))
-      {
-        //DU_LOG("5GTF_CHECK rgTOMUtlProcDlSf dat (%d : %d)\n", datInfo->timingInfo.sfn, datInfo->timingInfo.slot);
-      }
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-      datInfo->bchDat.pres = 0;
-#endif
-
-      /* Fill BCH data */
-      if (dlSf->bch.tb != NULLP)
-      {
-        datInfo->bchDat.pres = PRSNT_NODEF;
-        datInfo->bchDat.val  = dlSf->bch.tb;
-        dlSf->bch.tb = NULLP;
-      }
-#ifdef EMTC_ENABLE
-      /* Fill the DLSCH PDUs of BCCH, PCCH and Dedicated Channels */
-      if ((ret = rgTOMEmtcUtlFillDatReqPdus(datInfo, dlSf, cellCb, err)) != ROK)
-      {
-        RG_FREE_MEM(datInfo);
-        return (ret);
-      }
-#endif 
-      /* Fill the DLSCH PDUs of BCCH, PCCH and Dedicated Channels */
-      if ((ret = rgTOMUtlFillDatReqPdus(datInfo, dlSf, cellCb, err)) != ROK)
-      {
-        DU_LOG("\nERROR  -->  MAC : Unable to send data for cell");
-        RG_FREE_MEM(datInfo);
-        return (ret);
-      }
-      if((datInfo->pdus.count) || (datInfo->bchDat.pres == TRUE))
-      {
-        /* sending the data to Phy */
-        //if (rgLIMTfuDatReq(inst,datInfo) != ROK)
-        {
-           DU_LOG("\nERROR  -->  MAC : Unable to send data info for cell");               
-        }
-      }
-      else
-      {
-        /* Nothing to send: free the allocated datInfo */
-        RG_FREE_MEM(datInfo);
-      }
-   }
-   return ROK;
-} /* end of */
-
-uint32_t  rgMacGT;
-
-/** @brief This function allocates the RgMacPdu that will be populated by DEMUX
- * with the SubHeaders list and the values of the Control elements.
- *
- * @details
- *
- *     Function: rgTOMUtlAllocPduEvnt
- *
- *         Processing steps:
- *  @param[in]  Inst        inst
- * @param  [out] RgMacPdu   **pdu
- *
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- */
-static S16 rgTOMUtlAllocPduEvnt (Inst inst,RgMacPdu **pdu)
-{
-
-   Mem               evntMem;
-   RgUstaDgn         dgn;      /* Alarm diagnostics structure */
-   volatile uint32_t startTime=0;
-
-
-   evntMem.region = rgCb[inst].rgInit.region;
-   evntMem.pool   = rgCb[inst].rgInit.pool;
-
-   /*starting Task*/
-   SStartTask(&startTime, PID_TOMUTL_CMALLCEVT);
-
-#ifdef MS_MBUF_CORRUPTION /* Should be enabled when debugging mbuf corruption */
-   MS_BUF_ADD_ALLOC_CALLER();
-#endif /* */
-
-   if (cmAllocEvnt (sizeof (RgMacPdu), RG_BLKSZ, &evntMem, (Ptr*)pdu) != ROK)
-   {
-      rgFillDgnParams(inst,&dgn, LRG_USTA_DGNVAL_MEM);
-      rgLMMStaInd(inst,LCM_CATEGORY_RESOURCE, LCM_EVENT_DMEM_ALLOC_FAIL,
-           LCM_CAUSE_MEM_ALLOC_FAIL, &dgn);
-      DU_LOG("\nERROR  -->  MAC : Allocation of DUX event failed");
-      return RFAILED;
-   }
-
-   /*stoping Task*/
-   SStopTask(startTime, PID_TOMUTL_CMALLCEVT);
-
-   return ROK;
-} /* end of */ 
-
-/** @brief This function frees up the RgMacPdu structure that has been
- * populated by demux.
- *
- * @details
- *
- *     Function: rgTOMUtlFreePduEvnt
- *       - Function frees up the RgMacPdu structure, in case of error it shall
- *       free up the buffer's present in the different sdu.
- *
- *         Processing steps:
- * @param  [in]  Inst        inst
- * @param  [in] RgMacPdu   *pdu
- * @param  [in] Bool       *error
- * @return 
- */
-static Void rgTOMUtlFreePduEvnt( RgMacPdu *pdu,Bool  error)
-{
-
-   RgMacSdu       *sdu;
-   CmLList        *node;
-
-   /* Steps of freeing up the PDU.
-    * 1. loop through the subHdrLst and free up all the buffers.
-    * 2. free up the whole event
-    */
-   if ((error == TRUE) && (pdu->sduLst.count > 0))
-   {
-      node =  pdu->sduLst.first;
-      while (node)
-      {
-        sdu = (RgMacSdu*)node->node;
-        RG_FREE_MSG(sdu->mBuf);
-        node = node->next;
-      }
-   }
-   RG_FREE_MEM(pdu);
-   return;
-} /* end of rgTOMUtlFreePduEvnt */ 
-
-/** @brief This function allocates the RgMacPdu that will be populated by DEMUX
- * with the SubHeaders list and the values of the Control elements.
- *
- * @details
- *
- *     Function: rgTOMInfAllocPduEvnt
- *
- *         Processing steps:
- * @param  [in] Inst        inst
- * @param  [out] RgMacPdu   **pdu
- *
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- */
-static S16 rgTOMInfAllocPduEvnt (Inst inst,RgInfSfDatInd **sfInfo)
-{
-
-   Mem               evntMem;
-   RgUstaDgn         dgn;      /* Alarm diagnostics structure */
-   volatile uint32_t      startTime=0;
-
-
-   evntMem.region = rgCb[inst].rgInit.region;
-   evntMem.pool   = rgCb[inst].rgInit.pool;
-
-   /*starting Task*/
-   SStartTask(&startTime, PID_TOMINF_CMALLCEVT);
-
-#ifdef MS_MBUF_CORRUPTION /* Should be enabled when debugging mbuf corruption */
-   MS_BUF_ADD_ALLOC_CALLER();
-#endif /* */
-   if (cmAllocEvnt (sizeof (RgInfSfDatInd), RG_BLKSZ, &evntMem, (Ptr*)sfInfo) != ROK)
-   {
-      rgFillDgnParams(inst,&dgn, LRG_USTA_DGNVAL_MEM);
-      rgLMMStaInd(inst,LCM_CATEGORY_RESOURCE, LCM_EVENT_DMEM_ALLOC_FAIL,
-           LCM_CAUSE_MEM_ALLOC_FAIL, &dgn);
-      DU_LOG("\nERROR  -->  MAC : Allocation failed");
-      return RFAILED;
-   }
-
-   /*stoping Task*/
-   SStopTask(startTime, PID_TOMINF_CMALLCEVT);
-
-   return ROK;
-} /* end of */ 
-
-/** @brief This function frees up the RgMacPdu structure that has been
- * populated by demux.
- *
- * @details
- *
- *     Function: rgTOMInfFreePduEvnt
- *       - Function frees up the RgMacPdu structure, in case of error it shall
- *       free up the buffer's present in the different sdu.
- *
- *         Processing steps:
- * @param  [in] RgMacPdu   *pdu
- * @param  [in] Bool       *error
- * @return 
- */
-static Void rgTOMInfFreePduEvnt(RgInfSfDatInd *sfInfo)
-{
-
-   RG_FREE_MEM(sfInfo);
-   return;
-} /* end of rgTOMUtlFreePduEvnt */
-
-#ifdef LTE_L2_MEAS
-
-/** @brief This function performs the preparation of information needed to set
- * L2M Scheduled UL Throughput Information for a particular UE.
- *
- * @details
- *
- *     Function: rgTomUtlPrepareL2MUlThrpInfo
- *      This function performs the preparation of information needed to set
- *       L2M Scheduled UL Throughput Information for a particular UE.
- *
- *
- *         Processing steps:
- * @param  [in] RgCellCb   *cellCb
- * @param  [in] RgUeCb       *ueCb
- * @param  [out] RgRguDedDatInd *dDatInd
- * @return 
- */
-static S16 rgTomUtlPrepareL2MUlThrpInfo(RgCellCb *cellCb,RgUeCb *ueCb,RgRguDedDatInd *dDatInd)
-{
-   uint8_t lcId;
-   uint8_t lcgId;
-   uint8_t loop;
-
-   dDatInd->burstInd = RGU_L2M_UL_BURST_END;
-   for(loop=0;loop<dDatInd->numLch;loop++)
-   {
-      lcId=dDatInd->lchData[loop].lcId;
-      if (lcId)
-      {
-        lcgId = ueCb->ul.lcCb[lcId - 1].lcgId;
-        if(ueCb->ul.lcgArr[lcgId].lcgBsInfo.outStndngBs > 0)
-        {
-           dDatInd->burstInd = RGU_L2M_UL_BURST_START;
-           break;
-        }
-      }
-   }
-
-   return ROK;
-}
-
-#endif
-
-/** @brief This function is called by rgTOMDatInd. This function invokes the
- * scheduler with the information of the received Data and any Control Elements
- * if present. Also it generates Data indications towards the higher layers.
- *
- * @details
- *
- *     Function: 
- *
- *         Processing steps:
- *         - Retrieves the RaCb with the rnti provided, if it doesnt exist
- *         return failure. 
- *         - If UE exists then update the Schduler with any MAC CEs if present. 
- *         - Invoke RAM module to do Msg3 related processing rgRAMProcMsg3
- *         - Loop through the SDU subheaders and invoke either a common data
- *         indication (rgUIMSndCmnDatInd) or dedicated data indication
- *         (rgUIMSndDedDatInd) towards the higher layers. 
- *
- * @param  [in] RgCellCb   *cellCb
- * @param  [in] RgUeCb     *ueCb
- * @param  [in] CmLteRnti  rnti
- * @param  [in] RgMacPdu   *pdu
- * @param  [out] uint32_t       *lcgBytes
- *  
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- */
-RgUeCb  *glblueCb4;
-RgUeCb  *glblueCb5;
-
-#ifdef LTEMAC_SPS
-   static S16 rgTOMUtlProcMsg
-(
- RgCellCb      *cellCb, 
- RgUeCb        *ueCb,
- RgMacPdu      *pdu,
- Bool          isSpsRnti,
- Bool          *spsToBeActvtd,
- uint16_t      *sduSize,
- uint16_t      slot,
- uint32_t      *lcgBytes
- )
-#else /* LTEMAC_SPS */
-   static S16 rgTOMUtlProcMsg
-(
- RgCellCb      *cellCb, 
- RgUeCb        *ueCb,
- RgMacPdu      *pdu,
- uint16_t      slot,
- uint32_t      *lcgBytes
- )
-#endif
-{
-   Inst              inst = cellCb->macInst - RG_INST_START;
-   S16               ret;
-   RgRguCmnDatInd    *cDatInd;
-   RgRguDedDatInd    *dDatInd;
-   CmLList           *node;
-   RgMacSdu          *sdu;
-   MsgLen            ccchSz;
-   MsgLen            cpySz;
-#ifdef LTEMAC_SPS
-   Pst               schPst1;  
-   //   RgInfSpsRelInfo   relInfo;
-#endif
-
-#ifdef LTE_L2_MEAS
-   uint8_t                idx1;
-   uint8_t                idx2;
-   RgUlSf                 *ulSf;
-   uint16_t               totalBytesRcvd = 0;
-   uint16_t               sduLen[RGU_MAX_LC] = {0};
-   uint8_t                qciVal[RGU_MAX_LC] = {0};
-   uint8_t                numPrb = 0;
-
-#endif
-   uint8_t                lcgId;
-   MsgLen                 bufSz;
-
-   /* Moved outside of LTE_L2_MEAS
-    *          scope as this pointer will now be used to 
-    *          check for valid Logical Channel ID
-    */
-   RgUlLcCb          *ulLcCb;
-
-   cDatInd  = NULLP;
-   dDatInd  = NULLP;
-#ifdef LTE_L2_MEAS
-   ulSf   = NULLP;
-   idx1   = 0;
-   idx2   = 0;
-#endif
-#ifdef SS_RBUF 
-   Void *elem = NULLP;
-#endif
-
-   ulLcCb = NULLP;
-
-
-#ifndef LTE_L2_MEAS      
-   UNUSED(slot);
-#endif
-
-   if(pdu->sduLst.first)
-   {
-      sdu = (RgMacSdu*)(pdu->sduLst.first->node);
-      glblueCb4 = ueCb;
-      if ((sdu->lcId == RG_CCCH_LCID))
-      {
-        /* code for common channel dat indications */
-        if ((ret = rgAllocShrablSBuf (inst,(Data**)&cDatInd, sizeof(RgRguCmnDatInd))) != ROK)
-        {
-           return RFAILED;
-        }
-        cDatInd->cellId   = cellCb->cellId;
-        cDatInd->rnti     = ueCb->ueId;
-        /* rg001.101: Corrected lcId value for common data indication */
-        cDatInd->lcId     = cellCb->ulCcchId;
-        cDatInd->pdu      = sdu->mBuf;
-        SFndLenMsg (sdu->mBuf, &ccchSz);
-        /* Fix : syed Contention resolution ID copy should consider only
-         * 6 bytes of information from sdu->mBuf. Incase of CCCH sdu for reest
-         * message/psuedo reest message, ccchSz can go beyond 6 and can corrupt 
-         * other fields of ueCb. */
-        if (ccchSz >= RG_CRES_LEN)
-        {
-           SCpyMsgFix (sdu->mBuf, (MsgLen)0, RG_CRES_LEN, ueCb->contResId.resId,
-                 &cpySz);
-        }
-#ifdef XEON_SPECIFIC_CHANGES
-        CM_LOG_DEBUG(CM_LOG_ID_MAC, "CCCH SDU of size(%d) received for UE(%d) CRES[0x%x 0x%x 0x%x 0x%x 0x%x 0x%x] Time[%d %d]\n",  ((S16)ccchSz), ueCb->ueId,ueCb->contResId.resId[0], ueCb->contResId.resId[1], ueCb->contResId.resId[2], ueCb->contResId.resId[3], ueCb->contResId.resId[4], ueCb->contResId.resId[5], cellCb->crntTime.sfn,  cellCb->crntTime.slot);
-#endif
-        sdu->mBuf = NULLP;
-        rgUIMSndCmnDatInd(inst,cellCb->rguUlSap,cDatInd);
-        return ROK;
-      } /* end of common channel processing */
-#ifndef SS_RBUF 
-      if ((ret = rgAllocShrablSBuf (inst,(Data**)&dDatInd, sizeof(RgRguDedDatInd))) != ROK)
-      {
-        return RFAILED;
-      }
-#else
-      glblueCb5 = ueCb;
-      elem = SRngGetWIndx(SS_RNG_BUF_ULMAC_TO_ULRLC);
-      if (NULLP == elem)
-      { 
-        return RFAILED;
-      }
-      dDatInd = (RgRguDedDatInd *)elem;
-      memset(dDatInd, 0x00, sizeof(RgRguDedDatInd));
-#endif
-      dDatInd->cellId   = cellCb->cellId;
-      dDatInd->rnti     = ueCb->ueId;
-      dDatInd->numLch   = 0;
-   }
-#ifdef LTE_L2_MEAS
-   ulSf = &cellCb->ulSf[(slot % RG_NUM_SUB_FRAMES)];
-   if(ulSf->ueUlAllocInfo != NULLP)
-   {
-      for(idx1 = 0; idx1 < ulSf->numUe; idx1++)
-      {
-        if(ulSf->ueUlAllocInfo[idx1].rnti == ueCb->ueId)
-        {
-           numPrb = ulSf->ueUlAllocInfo[idx1].numPrb;
-           break;
-        }
-      }
-   }
-#endif
-   node =  pdu->sduLst.first;
-   while (node)
-   {
-      sdu = (RgMacSdu*)node->node;
-
-      ulLcCb = rgDBMGetUlDedLcCb (ueCb, sdu->lcId);
-
-      if(ulLcCb == NULLP)
-      {
-        DU_LOG("\nERROR  -->  MAC : Unconfigured LCID:%d CRNTI:%d"
-              ,sdu->lcId,ueCb->ueId);
-        /* ccpu00128443: Fix for memory leak */
-        /* Fix : syed Neccessary to set sdu->mBuf = NULLP */
-        RG_FREE_MSG(sdu->mBuf);         
-        node = node->next;
-        continue;
-      }
-#ifdef RLC_STA_PROC_IN_MAC/* RLC Status PDU Processing */
-      {
-        S16 rlcProcDlStatusPdu(Pst       *udxPst,SuId      suId,
-              CmLteCellId cellId,CmLteRnti rnti,CmLteLcId lcId,Buffer *rlcSdu);
-
-        if(ROK == rlcProcDlStatusPdu(&(cellCb->rguDlSap->sapCfg.sapPst),
-                 cellCb->rguDlSap->sapCfg.suId,
-                 cellCb->cellId,ueCb->ueId,sdu->lcId,sdu->mBuf))
-        {
-           RG_FREE_MSG(sdu->mBuf);           
-           node = node->next;
-           continue;
-        }
-      }
-#endif
-
-      /* ccpu00116477- Fixed the rgUIMSndDedDatInd condition when we receive 11 sdus in the 
-       * list we are losing 11th sdu and sending the first 10 sdus again which
-       * is causing the duplicate packets and eNB crashing due to access
-       * of the freed memory */
-      if (dDatInd->numLch >= RGU_MAX_LC)
-      {
-        if ((ret = rgUIMSndDedDatInd(inst,ueCb->rguUlSap,dDatInd)) != ROK)
-        {
-           DU_LOG("\nERROR  -->  MAC : Failed to send datIndication to RGU CRNTI:%d",ueCb->ueId);
-           return (ret);
-        }
-#ifndef SS_RBUF
-        if ((ret = rgAllocShrablSBuf (inst,(Data**)&dDatInd, sizeof(RgRguDedDatInd))) != ROK)
-        {
-           return RFAILED;
-        }
-#else
-        elem = SRngGetWIndx(SS_RNG_BUF_ULMAC_TO_ULRLC);
-        if (NULLP == elem)
-        { 
-           return RFAILED;
-        }
-        dDatInd = (RgRguDedDatInd *)elem;
-        memset(dDatInd, 0x00, sizeof(RgRguDedDatInd));
-#endif
-        dDatInd->cellId   = cellCb->cellId;
-        dDatInd->rnti     = ueCb->ueId;
-        dDatInd->numLch   = 0;
-      }
-      dDatInd->lchData[dDatInd->numLch].lcId = sdu->lcId;
-      dDatInd->lchData[dDatInd->numLch].pdu.mBuf[dDatInd->lchData[dDatInd->numLch].pdu.numPdu] = sdu->mBuf;
-      dDatInd->lchData[dDatInd->numLch].pdu.numPdu++;
-      lcgId = ulLcCb->lcgId;
-      SFndLenMsg(sdu->mBuf, &bufSz);
-#ifdef LTE_L2_MEAS
-      if(ulLcCb->measOn)
-      {
-        ueCb->ul.lcgArr[lcgId].lcgBsInfo.outStndngBs -= bufSz; 
-      }
-#endif
-      //if ((lcgBytes != NULLP) && (ueCb->ul.lcgArr[lcgId].isGbr == TRUE))
-      if (lcgBytes != NULLP)
-      {
-        lcgBytes[lcgId] += bufSz;
-      }
-      sdu->mBuf = NULLP;
-      dDatInd->numLch++;
-#ifdef LTEMAC_SPS
-      /* Check if data has come on SPS LC */
-      /* KWORK_FIX: Modified the index from lcId to lcId-1 for handling lcId 10 properly */
-      if (ueCb->ul.spsLcId[sdu->lcId-1] == TRUE)
-      {
-        ueCb->ul.spsDatRcvd++;
-      }
-
-      if(isSpsRnti)
-      {
-        /* Data rcvd on CRNTI*/
-        /* Retrieve the LCG ID of the LCID*/
-        /* SPS LCG has data whose size > SID Size */
-        /* Activate SPS if data recvd on SPS LCID and size > SID Packet Size */
-        if((ueCb->ul.spsLcId[sdu->lcId-1] == TRUE) &&
-              (sdu->len > RG_SPS_SID_PACKET_SIZE))
-        {
-           *spsToBeActvtd = TRUE;
-           *sduSize = sdu->len;
-        }
-      }
-
-#endif  
-
-#ifdef LTE_L2_MEAS
-      if(cellCb->qciArray[ulLcCb->qci].mask == TRUE)
-      {
-        sduLen[ulLcCb->qci] = sdu->len;
-        totalBytesRcvd += sdu->len;
-        qciVal[ulLcCb->qci] = ulLcCb->qci;
-      }
-#endif
-      node = node->next;
-   } /* end of while for SubHeaders */
-#ifdef LTE_L2_MEAS
-   for(idx2 = 0; idx2 < RGU_MAX_LC; idx2++)
-   {
-      if((cellCb->qciArray[qciVal[idx2]].mask == TRUE) &&
-           totalBytesRcvd > 0)
-      {
-        cellCb->qciArray[qciVal[idx2]].prbCount += 
-           ((numPrb * sduLen[idx2]) / totalBytesRcvd);
-      }
-
-      /* RRM_RBC_X */
-      if(totalBytesRcvd > 0 && qciVal[idx2] > 0)
-      {
-        RG_UPD_GBR_PRB(cellCb, qciVal[idx2], ((numPrb * sduLen[idx2])/totalBytesRcvd));
-      }
-      /* RRM_RBC_Y */
-   }
-#endif
-   /*Added for explicit release - start*/
-#ifdef LTEMAC_SPS
-
-   if(isSpsRnti && dDatInd && dDatInd->numLch)
-   {
-      if(ueCb->ul.spsDatRcvd != 0)
-      {
-        ueCb->ul.explRelCntr = 0;
-        ueCb->ul.spsDatRcvd = 0;
-      }
-      else
-      {
-        ueCb->ul.explRelCntr++;
-        if (ueCb->ul.explRelCntr == ueCb->ul.explRelCnt)
-        {
-           ueCb->ul.explRelCntr = 0;
-           /* Indicate scheduler for explicit release */
-           memset(&schPst1, 0, sizeof(Pst));
-           rgGetPstToInst(&schPst1,inst, cellCb->schInstMap.schInst);
-           //TODO: commented for compilation without SCH 
-#if 0
-           relInfo.cellSapId = cellCb->schInstMap.cellSapId;
-           relInfo.cRnti = ueCb->ueId;
-           relInfo.isExplRel = TRUE;
-           /* Release indicator is called now through the matrix in the function below */
-           //TODO: commented for compilation without SCH RgMacSchSpsRel( &schPst1, &relInfo );
-#endif
-           ueCb->ul.implRelCntr = 0;
-        }
-      }
-   } 
-   else
-   {
-      /* SPS_FIX */
-      if(ueCb->ul.spsDatRcvd != 0)
-      {
-        //ueCb->ul.implRelCntr = 0;
-        ueCb->ul.explRelCntr = 0;
-        ueCb->ul.spsDatRcvd = 0;
-      }
-   }
-#endif
-   /*Added for explicit release - end */
-
-   if((dDatInd) && (dDatInd->numLch))
-   {
-#ifdef LTE_L2_MEAS
-      rgTomUtlPrepareL2MUlThrpInfo(cellCb, ueCb,dDatInd);
-
-      RG_CALC_TTI_CNT(cellCb, dDatInd->ttiCnt); 
-#endif
-      if ((ret = rgUIMSndDedDatInd(inst,ueCb->rguUlSap,dDatInd)) != ROK)
-      {
-        DU_LOG("\nERROR  -->  MAC : Failed to send datIndication to RGU CRNTI:%d",ueCb->ueId);
-        return (ret);
-      }
-   }
-#ifndef SS_RBUF
-   else if((dDatInd) && (0 == dDatInd->numLch))
-   {
-      /* Free the memory allocated for dDatInd if we 
-       * have no valid LCH PDU to send to RLC.*/
-      rgFreeSharableSBuf(inst,(Data **)&dDatInd,sizeof(RgRguDedDatInd)); 
-   }
-#endif
-   return ROK;
-} /* end of */ 
-
-/** @brief This function frees up the RgMacPdu structure that has been
- * populated by demux.
- *
- * @details
- *
- *     Function: rgTOMUtlInsSchInfo
- *       - Function frees up the RgMacPdu structure, in case of error it shall
- *       free up the buffer's present in the different sdu.
- *
- *         Processing steps:
- * @param  [in] RgMacPdu   *pdu
- * @param  [in] Bool       *error
- * @return 
- */
-#ifdef LTEMAC_SPS
-   static S16 rgTOMUtlInsSchInfo
-(
- RgMacPdu *pdu,
- RgInfSfDatInd *sfInfo,
- RgInfCeInfo   *ceInfo,
- CmLteRnti      rnti,
- Bool           spsToBeActvtd,
- uint16_t       sduSize,
- uint32_t       *lcgBytes
- )
-#else
-   static S16 rgTOMUtlInsSchInfo
-(
- RgMacPdu *pdu,
- RgInfSfDatInd *sfInfo,
- RgInfCeInfo *ceInfo,
- CmLteRnti   rnti,
- uint32_t    *lcgBytes
- )
-#endif
-{
-   S16            ret;
-   RgInfUeDatInd *ueInfo;
-   uint32_t       lcgId = 0;
-   uint32_t       idx = 0;
-
-
-   RG_TOM_INF_ALLOC(sfInfo, sizeof(RgInfUeDatInd), ueInfo, ret);
-
-   if(ROK != ret)
-   {
-      return RFAILED;
-   }
-
-   ueInfo->rnti = rnti; 
-
-   ueInfo->ceInfo = *ceInfo;
-   ueInfo->ueLstEnt.node = (PTR)ueInfo;
-   for (lcgId = 1, idx = 0; lcgId < RGINF_MAX_LCG_PER_UE; lcgId++)
-   {
-      if (lcgBytes[lcgId] != 0)
-      {
-        /* Only GBR bytes */
-        ueInfo->lcgInfo[idx].lcgId     = lcgId;
-        ueInfo->lcgInfo[idx++].bytesRcvd = lcgBytes[lcgId];
-        lcgBytes[lcgId] = 0;
-      }
-   }
-   cmLListAdd2Tail(&sfInfo->ueLst, &ueInfo->ueLstEnt);
-   return ROK;
-} /* end of rgTOMUtlInsSchInfo */
-
-#include <stdlib.h>
-/**
- * @brief Handler for processing data indication recieved from PHY for UEs.
- *
- * @details
- *
- *     Function: rgTOMDatInd
- *
- *     Handler for processing data indication recieved from PHY for UEs.
- *
- *     Invoked by: RgLiTfuDatInd of LIM 
- *
- *     Processing Steps: 
- *     For each DataInfo recieved
- *      - Validate the information received and retrieve cellCb 
- *        Validate cellId, rnti 
- *      - Call De-Mux module to decode the data rgDUXDemuxData
- *      - If  received a CRNTI control element 
- *          - Check if a CCCH SDU is present, if it is return failure
- *          - Check for the existence of UE, if its isnt present return failure.
- *          - Delegate the remaining processing to rgTOMUtlProcMsg3 which
- *          primarily informs the scheduler about the data received and
- *          generates Data indications towards the higher layer.
- *      - If only CCCH SDU is present
- *        - Invoke rgTOMUtlProcMsg3 for further processing.
- *      - If its a non-Msg3 PDU i.e. received outside of a RA procedure
- *        - Retrieve the UeCB 
- *        - Validate that the received PDU contains only configured Logical
- *        Channels.
- *        - Invoke rgTOMUtlProcDatPdu for further processing. It informs the
- *        scheduler with the information of the received Data and generates
- *        DatIndications towards the higher layers. 
- *           
- * @param  [in] Inst        inst
- *  @param[in]  TfuDatIndInfo *datInd
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- **/
-S16 rgTOMDatInd(Inst inst, TfuDatIndInfo *datInd)
-{
-   S16               ret = ROK;
-   RgErrInfo         err;
-   RgUeCb            *ueCb;
-   RgUeCb            *prevUeCb = NULLP;
-   RgCellCb          *cellCb;
-   RgMacPdu          *pdu;
-   RgInfSfDatInd     *sfInfo;
-   RgInfCeInfo       ceInfo; 
-   Pst               schPst;
-   CmLList           *node;
-   TfuDatInfo        *datInfo;
-   RgLowSapCb        *tfuSap;
-   uint16_t          slot;
-#ifdef LTEMAC_SPS
-   Bool              isSpsRnti=FALSE;
-   Pst               schPst1;  
-   // RgInfSpsRelInfo   relInfo;
-   Bool              spsToBeActvtd = FALSE;
-   uint16_t          sduSize = 0;
-#endif
-   uint32_t          lcgBytes[RGINF_MAX_LCG_PER_UE];
-
-
-#ifdef STUB_TTI_HANDLING_5GTF 
-   node =  datInd->datIndLst.first;
-   for (;node; node=node->next)
-   {
-      datInfo = (TfuDatInfo*)node->node;
-      {
-        MsgLen len;
-        SFndLenMsg(datInfo->mBuf, &len);
-        rgUlrate_tfu += len;
-        if (rgUlrate_tfu > 100000)
-        {
-           DU_LOG("\nINFO  -->  MAC : rgTOMDatInd datInfo->mBuf len =%d rgUlrate_tfu=%d",len,rgUlrate_tfu);
-           rgUlrate_tfu = 0;
-        }
-      }
-   }
-   return(RFAILED);
-#endif      
-
-   memset(&lcgBytes, 0, sizeof(lcgBytes));
-
-   tfuSap = &(rgCb[inst].tfuSap);
-   ueCb = NULLP;
-   cellCb = rgCb[inst].cell;
-   if((cellCb == NULLP) ||
-        (cellCb->cellId != datInd->cellId))   
-   {
-
-      DU_LOG("\nERROR  -->  MAC : Unable to get the cellCb for cell");
-      return RFAILED;
-   }
-   /* Avoiding memset as all the fields are getting initialized further */
-
-   if (rgTOMInfAllocPduEvnt (inst,&sfInfo) != ROK)
-   {
-      err.errType = RGERR_TOM_DATIND;
-      DU_LOG("\nERROR  -->  MAC : Unable to Allocate PDU for DUX cell");
-      node =  datInd->datIndLst.first;
-      return RFAILED;
-   }
-   cmLListInit(&sfInfo->ueLst);
-   sfInfo->cellId = datInd->cellId;
-   sfInfo->timingInfo = datInd->timingInfo;
-   slot = datInd->timingInfo.slot;
-
-   node =  datInd->datIndLst.first;
-   for (;node; node=node->next)
-   {
-      datInfo = (TfuDatInfo*)node->node;
-      {
-        //uint32_t ulrate_tfu;
-        MsgLen len;
-        SFndLenMsg(datInfo->mBuf, &len);
-#ifdef STUB_TTI_HANDLING_5GTF         
-        //  DU_LOG(":rgTOMDatInd datInfo->mBuf len =%d",len);
-#endif
-        rgUlrate_tfu += len;
-#ifdef EMTC_ENABLE
-        grgUlrate_tfu += len;
-#endif
-      }
-#ifdef STUB_TTI_HANDLING_5GTF         
-      rgLIMUtlFreeDatIndEvnt(datInd,TRUE);
-#endif
-      /* We shall call De-Mux to process the received buffer. We shall try and find
-       * out the RaCb based on the following - 
-       * 1. If the incoming PDU contained a CCCH SDU i.e. this is message 3.
-       * 2. If the incoming PDU contained a CRNTI control element, i.e. we should
-       * have a ueCb also for this 
-       */
-      /* Lets allocate the event that needs to be passed to DUX */
-      if (rgTOMUtlAllocPduEvnt (inst,&pdu) != ROK)
-      {
-        err.errType = RGERR_TOM_DATIND;
-        DU_LOG("\nERROR  -->  MAC : Unable to Allocate PDU for DUX cell");
-        rgTOMInfFreePduEvnt (sfInfo);
-        return RFAILED;
-      }
-
-      if ((ret = rgDUXDemuxData (inst,pdu, &ceInfo, 
-                 &datInfo->mBuf, &err)) != ROK)
-      {
-        //exit(1);
-        /* Fix: sriky memory corruption precautions */
-        rgTOMUtlFreePduEvnt (pdu, TRUE);
-        err.errType = RGERR_TOM_DATIND;
-        DU_LOG("\nERROR  -->  MAC : DUX processing failed");
-        tfuSap->sapSts.numPduDrop++;
-        continue; 
-      }
-      /* It could be that a non-msg3 pdu contains a CRNTI Control element. We
-       * should check for CRNTI CE and if it exists the UECb must exist, also an
-       * if the CRNTI in the CE and the one with which the message came in are
-       * different we shall look for an raCb as well. 
-       */
-
-      if (ceInfo.bitMask & RG_CCCH_SDU_PRSNT)
-      {
-        ret = rgTOMProcCCCHSduInDatInd(pdu, prevUeCb, \
-              cellCb, datInfo, &ceInfo, slot);
-        if (ret == RFAILED)
-        {
-           rgTOMUtlFreePduEvnt (pdu, TRUE);
-           err.errType = RGERR_TOM_DATIND;
-           tfuSap->sapSts.numPduDrop++;
-           continue; 
-        }
-      } /* end of Msg3 processing */
-
-      else if (ceInfo.bitMask & RG_CRNTI_CE_PRSNT)
-      {
-        ret = rgTOMProcCrntiCEInDatInd(pdu, prevUeCb, \
-              cellCb, datInfo, &ceInfo, slot);
-        if (ret == RFAILED)
-        {
-           rgTOMUtlFreePduEvnt (pdu, TRUE);
-           err.errType = RGERR_TOM_DATIND;
-           tfuSap->sapSts.numPduDrop++;
-           continue; 
-        }
-
-      } /* end of CRNTI based message */
-      else
-      {
-        ueCb = rgDBMGetUeCb (cellCb, datInfo->rnti);
-        if (ueCb == NULLP)
-        {
-#ifdef LTEMAC_SPS
-           /* Try getting the UE using SPS-RNTI. */
-           ueCb = rgDBMGetSpsUeCb (cellCb, datInfo->rnti);
-           if (ueCb != NULLP)
-           {
-              isSpsRnti = TRUE;
-              /* Increment implrelCntr for an empty transmission */
-              if (pdu->sduLst.count == 0)
-              {
-                 ueCb->ul.implRelCntr++;
-                 if (ueCb->ul.implRelCntr == ueCb->ul.implRelCnt)
-                 {
-                    /* Indicate scheduler for implicit release */
-                    memset(&schPst1, 0, sizeof(Pst));
-                    rgGetPstToInst(&schPst1,inst, cellCb->schInstMap.schInst);
-
-                    ueCb->ul.implRelCntr = 0;
-                    ueCb->ul.explRelCntr = 0;
-#if 0                     
-                    relInfo.cellSapId = cellCb->schInstMap.cellSapId;
-                    relInfo.cRnti = ueCb->ueId;
-                    relInfo.isExplRel= FALSE;
-                    //TODO: commented for compilation without SCH RgMacSchSpsRel(&schPst1, &relInfo);
-#endif  
-                 }
-              }
-              else
-              {
-                 /* Reset the implrelCntr */
-                 ueCb->ul.implRelCntr = 0;
-              }
-           }
-           else
-#endif 
-           {
-              /* Perform failure if ueCb is still NULLP */
-              rgTOMUtlFreePduEvnt (pdu, TRUE);
-              err.errType = RGERR_TOM_DATIND;
-              DU_LOG("\nERROR  -->  MAC : RNTI:%d Unable to get the UE CB", 
-                    datInfo->rnti);
-              tfuSap->sapSts.numPduDrop++;
-              continue;
-           }
-        }
-#ifdef LTE_L2_MEAS         
-        rgTOMUtlL2MStoreBufSz(ueCb, &ceInfo);
-        rgTOML2MCompileActiveLCs (cellCb, ueCb, pdu, &ceInfo);
-#endif
-#ifdef LTEMAC_SPS
-        if ((ret = rgTOMUtlProcMsg(cellCb, ueCb, pdu, isSpsRnti,&spsToBeActvtd,&sduSize, slot, (uint32_t *)&lcgBytes)) != ROK)
-#else
-           if ((ret = rgTOMUtlProcMsg (cellCb, ueCb, pdu, slot, (uint32_t *)&lcgBytes)) != ROK)
-#endif /* LTEMAC_SPS */
-           {
-              rgTOMUtlFreePduEvnt (pdu, TRUE);
-              err.errType = RGERR_TOM_DATIND;
-              DU_LOG("\nERROR  -->  MAC : Unable to handle Data Indication CRNTI:%d",ueCb->ueId);
-              tfuSap->sapSts.numPduDrop++;
-              continue;
-           }
-      }
-
-
-#ifdef LTEMAC_SPS
-      if(rgTOMUtlInsSchInfo(pdu, sfInfo, &ceInfo, datInfo->rnti,spsToBeActvtd,sduSize, (uint32_t *)&lcgBytes) != ROK)
-#else
-        if(rgTOMUtlInsSchInfo(pdu, sfInfo, &ceInfo, datInfo->rnti, (uint32_t *)&lcgBytes) != ROK)
-#endif
-
-        {
-           rgTOMInfFreePduEvnt (sfInfo);
-           rgTOMUtlFreePduEvnt (pdu, FALSE);
-           return RFAILED;
-        }
-      /* free up the PDU memory */
-      rgTOMUtlFreePduEvnt (pdu, FALSE);
-   }
-   /* Free the allocated memory for ueUlAllocInfo here */
-#ifdef LTE_L2_MEAS
-   if(cellCb->ulSf[(slot % RG_NUM_SUB_FRAMES)].ueUlAllocInfo != NULLP)
-   {
-      /*ccpu00117052 - MOD - Passing double for proper NULLP
-       assignment */
-      rgFreeSBuf(inst,(Data **)&(cellCb->ulSf[(slot % RG_NUM_SUB_FRAMES)].ueUlAllocInfo), 
-           ((cellCb->ulSf[(slot % RG_NUM_SUB_FRAMES)].numUe) * sizeof(RgUeUlAlloc)));
-   }
-#endif
-   /* RRM_RBC_X */
-   /* Update PRB used for all GBR QCIs to scheduler */
-   memcpy( &sfInfo->qcisUlPrbCnt[0],
-        &cellCb->qcisUlPrbCnt[0],
-        (RGM_MAX_QCI_REPORTS * sizeof(uint32_t)));
-   /* clear the cellCb ul prb value */
-   memset(&cellCb->qcisUlPrbCnt[0], 0, 
-        (RGM_MAX_QCI_REPORTS * sizeof(uint32_t)));
-
-   /* RRM_RBC_Y */
-
-   rgGetPstToInst(&schPst, inst,cellCb->schInstMap.schInst);
-   sfInfo->cellSapId = cellCb->schInstMap.cellSapId;
-   //TODO: commented for compilation without SCH RgMacSchSfRecp(&schPst, sfInfo);
-   return ROK;
-}  /* rgTOMDatInd */
-
-/**
- * @brief Function handles allocation for common channels i.e. BCCH-BCH,
- * BCCH-DLSCH, PCCH-DLSCH.
- *
- * @details
- *
- *     Function : rgHndlCmnChnl
- *     
- *     This function is invoked from RgSchMacSfAllocReq. This function handles
- *     allocations made for common channels like BCCH and PCCH. 
- *
- *     Processing steps:
- *     1. If BCCH on BCH has been scheduled, send StatusIndication on RGU.
- *     2. If PCCH is scheduled, send StatusIndication on RGU.
- *     3. If BCCH on DLSCH has been scheduled and sndStatInd is TRUE, send
- *     StatusIndication on RGU, else copy the bcch buffer onto the downlink
- *     subframe. 
- *     
- *           
- *  @param[in] RgCellCb          *cell,
- *  @param[in] CmLteTimingInfo   timingInfo,
- *  @param[in] RgInfCmnLcInfo    *cmnLcInfo,
- *  @param[in/out] RgErrInfo     *err,
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED
- **/
-   static S16 rgHndlCmnChnl
-(
- RgCellCb            *cell,
- CmLteTimingInfo     timingInfo,
- RgInfCmnLcInfo      *cmnLcInfo,
- RgErrInfo           *err
- )
-{
-#if (ERRCLASS & ERRCLS_DEBUG)
-   RgPcchLcCb           *pcch;
-#endif
-#ifndef RGR_SI_SCH
-   RgBcchDlschLcCb      *bcch;
-#if (ERRCLASS & ERRCLS_DEBUG)
-   RgBcchBchLcCb        *bch;
-#endif
-#endif/*RGR_SI_SCH*/
-   RguCStaIndInfo       *staInd;
-   RgDlSf               *dlSf;
-   Inst                 inst = cell->macInst - RG_INST_START;
-
-
-   dlSf = &cell->subFrms[(timingInfo.slot % RG_NUM_SUB_FRAMES)];
-
-   if(cmnLcInfo->bitMask & RGINF_BCH_INFO)
-   {
-#ifndef RGR_SI_SCH
-#if (ERRCLASS & ERRCLS_DEBUG) 
-      if(NULLP == (bch = rgDBMGetBcchOnBch(cell)))
-      {
-        return RFAILED;
-      }
-      if(cmnLcInfo->bchInfo.lcId != bch->lcId)
-      {
-        return RFAILED;
-      }
-#endif
-
-      if (rgAllocShrablSBuf (inst,(Data**)&staInd, sizeof(RguCStaIndInfo)) != ROK)
-      {
-        err->errCause = RGERR_TOM_MEM_EXHAUST;
-        return RFAILED;
-      }
-      staInd->cellId = cell->cellId;
-      staInd->rnti   = RG_INVALID_RNTI;
-      staInd->lcId   = cmnLcInfo->bchInfo.lcId;
-      staInd->transId = (timingInfo.sfn << 8) | (timingInfo.slot);
-      /* ADD Changes for Downlink UE Timing Optimization */
-#ifdef LTEMAC_DLUE_TMGOPTMZ
-      dlSf->remDatReqCnt++;
-#endif
-      if (rgUIMSndCmnStaInd (inst,cell->rguDlSap,staInd) != ROK)
-      {
-        return RFAILED;
-      }
-#else
-      /*Store the received BCH Data in the scheduled subframe*/
-      dlSf->bch.tb = cmnLcInfo->bchInfo.pdu;
-#endif/*RGR_SI_SCH*/
-   }
-
-   if(cmnLcInfo->bitMask & RGINF_PCCH_INFO)
-   {
-#if (ERRCLASS & ERRCLS_DEBUG) 
-      if(NULLP == (pcch = rgDBMGetPcch(cell)))
-      {
-        return RFAILED;
-      }
-      if(cmnLcInfo->pcchInfo.lcId != pcch->lcId)
-      {
-        return RFAILED;
-      }
-#endif
-
-      dlSf->pcch.pdcch.rnti = 
-        cmnLcInfo->pcchInfo.rnti;
-      dlSf->pcch.pdcch.dci = 
-        cmnLcInfo->pcchInfo.dciInfo;
-#ifdef TFU_UPGRADE               
-      /* ccpu00132314-ADD-Fill the tx Pwr offset from scheduler */         
-      dlSf->pcch.txPwrOffset = cmnLcInfo->pcchInfo.txPwrOffset;         
-#endif
-      if (rgAllocShrablSBuf (inst,(Data**)&staInd, sizeof(RguCStaIndInfo)) != ROK)
-      {
-        err->errCause = RGERR_TOM_MEM_EXHAUST;
-        return RFAILED;
-      }
-      staInd->cellId = cell->cellId;
-      staInd->rnti   = RG_INVALID_RNTI;
-      staInd->lcId   = cmnLcInfo->pcchInfo.lcId;
-      staInd->transId = (timingInfo.sfn << 8) | (timingInfo.slot);
-      /* ADD Changes for Downlink UE Timing Optimization */
-#ifdef LTEMAC_DLUE_TMGOPTMZ
-      dlSf->remDatReqCnt++;
-#endif
-      /* for consolidated CmnStaInd calling below function from function 
-       * rgHndlSchedUe once CmnStaInd prepared for all UEs
-       */
-      if (rgUIMSndCmnStaInd (inst,cell->rguDlSap,staInd) != ROK)
-      {
-        return RFAILED;
-      }
-   }
-
-   if(cmnLcInfo->bitMask & RGINF_BCCH_INFO)
-   {
-      dlSf->bcch.pdcch.rnti = 
-        cmnLcInfo->bcchInfo.rnti;
-      dlSf->bcch.pdcch.dci = 
-        cmnLcInfo->bcchInfo.dciInfo;
-#ifdef TFU_UPGRADE               
-      /* ccpu00132314-ADD-Fill the tx Pwr offset from scheduler */         
-      dlSf->bcch.txPwrOffset = cmnLcInfo->bcchInfo.txPwrOffset;         
-#endif      
-#ifndef RGR_SI_SCH
-      if(NULLP == 
-           (bcch=rgDBMGetBcchOnDlsch(cell,cmnLcInfo->bcchInfo.lcId)))
-      {
-        return RFAILED;
-      }
-      if(TRUE == cmnLcInfo->bcchInfo.sndStatInd)
-      {
-        RG_FREE_MSG(bcch->tb);
-        if (rgAllocShrablSBuf (inst,(Data**)&staInd, 
-                 sizeof(RguCStaIndInfo)) != ROK)
-        {
-           err->errCause = RGERR_TOM_MEM_EXHAUST;
-           return RFAILED;
-        }
-        staInd->cellId = cell->cellId;
-        staInd->rnti   = RG_INVALID_RNTI;
-        staInd->lcId   = cmnLcInfo->bcchInfo.lcId;
-        staInd->transId = (timingInfo.sfn << 8) | (timingInfo.slot);
-        /* ADD Changes for Downlink UE Timing Optimization */
-#ifdef LTEMAC_DLUE_TMGOPTMZ
-        dlSf->remDatReqCnt++;
-#endif
-        if (rgUIMSndCmnStaInd (inst,cell->rguDlSap,staInd) != ROK)
-        {
-           return RFAILED;
-        }
-      }
-      else
-      {
-        SCpyMsgMsg(bcch->tb, RG_GET_MEM_REGION(rgCb[inst]),
-              RG_GET_MEM_POOL(rgCb[inst]), &dlSf->bcch.tb);
-      }
-#else
-      /*Store the received BCCH Data in the scheduled subframe*/
-      dlSf->bcch.tb = cmnLcInfo->bcchInfo.pdu;
-#endif/*RGR_SI_SCH*/
-   }
-
-   return ROK;
-} /* end of rgHndlCmnChnl */
-
-/**
- * @brief Function for handling allocations for dedicated channels for a
- * subframe.
- *
- * @details
- *
- *     Function : rgHndlSchdUe
- *     
- *     This function shall be invoked whenever scheduler is done with the
- *     allocations of dedicated channels for a subframe. Invoked by the function
- *     RgSchMacSfAllocReq.
- *
- *     Processing steps :
- *     1. Loops through the list of UE's scheduled looking for the corresponding
- *     ueCb/raCb. 
- *     2. Finds the corresponding HARQ process.
- *     3. Invokes the DHM function to issue StatusIndications on RGU.
- *
- *           
- *  @param[in] RgCellCb            *cell,
- *  @param[in] CmLteTimingInfo     timingInfo,
- *  @param[in] RgInfUeInfo         *ueInfo
- *  @param[in/out] RgErrInfo       *err
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- **/
-   static S16 rgHndlSchdUe
-(
- RgCellCb            *cell,
- CmLteTimingInfo     timingInfo,
- RgInfUeInfo         *ueInfo,
- RgErrInfo           *err
- )
-{
-
-
-   if(NULLP == ueInfo->allocInfo)
-   {
-      return RFAILED;
-   }
-
-   rgDHMSndConsolidatedStaInd(cell, ueInfo, timingInfo, err);
-
-   return ROK;
-} /* end of rgHndlSchdUe */
-
-#ifdef LTE_L2_MEAS
-/**
- * @brief Function for handling Uplink allocations for Ue for a
- * subframe.
- *
- * @details
- *
- *     Function : rgHndlUlUeInfo
- *     
- *  @param[in] RgCellCb            *cell,
- *  @param[in] CmLteTimingInfo     timingInfo,
- *  @param[in] RgInfUlUeInfo       *ueInfo
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- **/
-   static S16 rgHndlUlUeInfo
-(
- RgCellCb            *cell,
- CmLteTimingInfo     timingInfo,
- RgInfUlUeInfo       *ueInfo
- )
-{
-   Inst           inst = cell->macInst - RG_INST_START;
-   uint8_t        idx;
-   RgUlSf         *ulSf;
-   S16            ret;
-
-
-   ulSf = &cell->ulSf[(timingInfo.slot % RGSCH_NUM_SUB_FRAMES)];
-
-   /* rg003.301-MOD- Corrected the purifier memory leak */
-   if (ulSf->numUe != ueInfo->numUes)
-   {
-      if (ulSf->ueUlAllocInfo)
-      {
-        rgFreeSBuf(inst,(Data **)&(ulSf->ueUlAllocInfo),
-              ulSf->numUe * sizeof(RgUeUlAlloc));
-      }
-   }
-#ifdef XEON_SPECIFIC_CHANGES
-   CM_MEAS_TIME((cell->crntTime.slot % RGSCH_NUM_SUB_FRAMES), CM_DBG_MAC_TTI_IND, CM_DBG_MEAS_FREE);
-   CM_ADD_INFO((cell->crntTime.slot % RGSCH_NUM_SUB_FRAMES),  CM_DBG_MEAS_FREE, ulSf->numUe);
-#endif
-   ulSf->numUe         = ueInfo->numUes;
-   if((ulSf->ueUlAllocInfo == NULLP) && (ueInfo->numUes > 0))
-   {
-      /* Allocate memory for ulAllocInfo */
-      if((ret = rgAllocSBuf(inst,(Data**)&(cell->ulSf[(timingInfo.slot % RGSCH_NUM_SUB_FRAMES)].
-                    ueUlAllocInfo), ueInfo->numUes *  sizeof(RgUeUlAlloc))) != ROK)
-      {
-        return (ret);
-      }
-   }
-#ifdef XEON_SPECIFIC_CHANGES
-   CM_MEAS_TIME((cell->crntTime.slot % RGSCH_NUM_SUB_FRAMES), CM_DBG_MAC_TTI_IND, CM_DBG_MEAS_ALLOC);
-   CM_ADD_INFO((cell->crntTime.slot % RGSCH_NUM_SUB_FRAMES), CM_DBG_MEAS_ALLOC, ueInfo->numUes);
-#endif
-   if (ulSf->ueUlAllocInfo != NULLP)
-   {
-      for(idx = 0; idx < ueInfo->numUes; idx++)
-      {
-        ulSf->ueUlAllocInfo[idx].rnti   = ueInfo->ulAllocInfo[idx].rnti;
-        ulSf->ueUlAllocInfo[idx].numPrb = ueInfo->ulAllocInfo[idx].numPrb;
-      }
-   }
-   RGCPYTIMEINFO(timingInfo, ulSf->schdTime);
-   return ROK;
-} /* end of rgHndlUlUeInfo */
-#endif
-/**
- * @brief Function for handling RaResp request received from scheduler to MAC
- *
- * @details
- *
- *     Function : rgTOMRlsSf
- *     
- *     This function shall be invoked whenever scheduler is done with the
- *     allocations of random access responses for a subframe.
- *     This shall invoke RAM to create ueCbs for all the rapIds allocated and 
- *     shall invoke MUX to create RAR PDUs for raRntis allocated.
- *     
- *           
- *  @param[in] Inst        inst
- *  @param[in] CmLteCellId         cellId,
- *  @param[in] CmLteTimingInfo     timingInfo,
- *  @param[in] RaRespInfo          *rarInfo
- *  @return  S16
- *      -# ROK 
- **/
-Void rgTOMRlsSf(Inst inst,RgDlSf *dlSf)
-{
-   uint8_t          idx;
-
-
-   if(dlSf->txDone == FALSE)
-   {
-      DU_LOG("\nERROR  -->  MAC : SUBFRAME Not pushed to the PHY");
-
-      if (dlSf->bch.tb != NULLP)
-      {
-        RG_FREE_MSG(dlSf->bch.tb);
-      }
-      if (dlSf->bcch.tb != NULLP)
-      {
-        RG_FREE_MSG(dlSf->bcch.tb);
-      }
-      if (dlSf->pcch.tb != NULLP)
-      {
-        RG_FREE_MSG(dlSf->pcch.tb);
-      }
-#ifdef EMTC_ENABLE
-      rgTOMEmtcRlsSf(dlSf);
-#endif
-      for(idx=0; idx < dlSf->numRaRsp; idx++)
-      {
-        RG_FREE_MSG(dlSf->raRsp[idx].rar);
-      }
-   }
-   /* ADD Changes for Downlink UE Timing Optimization */
-#ifdef LTEMAC_DLUE_TMGOPTMZ
-   dlSf->remDatReqCnt = 0;
-   /* Fix[ccpu00126310]: Tracks Data Requests from RLC for both loosely and tight coupled 
-      RLC-MAC */
-   dlSf->statIndDone = FALSE;
-#endif
-   if (dlSf->tbs.count)
-   {
-      uint8_t      i;
-      CmLList      *node;
-      RgDlHqProcCb *hqP;
-      DU_LOG("\nERROR  -->  MAC : Error Stale TBs in Subframes TBS list\n");
-      node = dlSf->tbs.first;
-      while(node)
-      {
-        hqP = (RgDlHqProcCb*)node->node;
-        node = node->next;
-        if (hqP)
-        {
-           for(i=0;i< RG_MAX_TB_PER_UE;i++)
-           {
-              if (hqP->tbInfo[i].sfLnkInfo[dlSf->schdTime.slot % 2].sf == dlSf)
-              {
-                 cmLListDelFrm(&dlSf->tbs, &(hqP->tbInfo[i].sfLnkInfo[dlSf->schdTime.slot % 2].sfLnk));
-                 hqP->tbInfo[i].sfLnkInfo[dlSf->schdTime.slot % 2].sfLnk.node = NULLP;
-                 DU_LOG("\nERROR  -->  MAC : rgTOMRlsSf:: hqP %p \n", (Void *)hqP);
-              }
-              hqP->tbInfo[i].sfLnkInfo[dlSf->schdTime.slot % 2].sf = NULLP;
-           }
-        }
-      }
-   }
-   /*arjun: check if dlSf laaTb list has to be freed???*/
-   cmLListInit(&dlSf->tbs);
-   dlSf->txDone = FALSE;
-   dlSf->numRaRsp = 0;
-   return;
-}
-
-/**
- * @brief Function is called by the scheduler once it has completed the
- * allocation for the subframe. 
- *
- * @details
- *
- *     Function : rgHndlFlowCntrl
- *     This function should fill and send Flow control 
- *     indication to RLC
- *
- *           
- *  @param[in] Pst                 *cell       
- *  @param[in] RgInfSfAlloc        *sfInfo   Carries all the allocation
- *  information.
- *  @return  S16
- *      -# ROK 
- **/
-S16 rgHndlFlowCntrl(RgCellCb *cell,RgInfSfAlloc *sfInfo)
-{
-   RguFlowCntrlInd  *flowCntrlInd;
-   Pst              *pst;
-   uint32_t         ueIdx;
-   uint32_t         lcIdx;
-
-   pst = &cell->rguDlSap->sapCfg.sapPst;
-   /* flowCntrlInd is alloced in cell init time and will be re-used throughout */
-   flowCntrlInd = cell->flowCntrlInd;
-   flowCntrlInd->cellId = sfInfo->cellId;
-   flowCntrlInd->numUes = sfInfo->flowCntrlInfo.numUes; 
-
-   for (ueIdx = 0; ueIdx < sfInfo->flowCntrlInfo.numUes; ueIdx++)
-   {
-      flowCntrlInd->ueFlowCntrlInfo[ueIdx].ueId = sfInfo->flowCntrlInfo.ueFlowCntrlInfo[ueIdx].ueId;
-      flowCntrlInd->ueFlowCntrlInfo[ueIdx].numLcs = sfInfo->flowCntrlInfo.ueFlowCntrlInfo[ueIdx].numLcs;
-
-      for (lcIdx = 0; lcIdx < RGINF_MAX_NUM_DED_LC; lcIdx++)
-      {
-        flowCntrlInd->ueFlowCntrlInfo[ueIdx].lcInfo[lcIdx].lcId =
-           sfInfo->flowCntrlInfo.ueFlowCntrlInfo[ueIdx].lcInfo[lcIdx].lcId;
-        flowCntrlInd->ueFlowCntrlInfo[ueIdx].lcInfo[lcIdx].pktAdmitCnt = 
-           sfInfo->flowCntrlInfo.ueFlowCntrlInfo[ueIdx].lcInfo[lcIdx].pktAdmitCnt;
-
-        flowCntrlInd->ueFlowCntrlInfo[ueIdx].lcInfo[lcIdx].maxBo4FlowCtrl = 
-           sfInfo->flowCntrlInfo.ueFlowCntrlInfo[ueIdx].lcInfo[lcIdx].maxBo4FlowCtrl;
-      }
-   }
-   RgUiRguFlowCntrlInd(pst, cell->rguDlSap->sapCfg.spId,flowCntrlInd); /* TODO: Rishi confirm if the suId and pst pointer is correct */
-   return ROK;
-}
-/**
- * @brief Function is called by the scheduler once it has completed the
- * allocation for the subframe. 
- *
- * @details
- *
- *     Function : RgSchMacSfAllocReq
- *     
- *     This function shall be invoked whenever scheduler is done with the
- *     allocations of for a subframe. The sfInfo carries all the allocation
- *     details for the common channels, RA responses and dedicated channel
- *     allocations. 
- *
- *     Processing steps :
- *     1. Reset the information present in the downlink subframe that is
- *     scheduled.
- *     2. Handle common channel allocations
- *     3. Handle RA Response allocations
- *     4. Handle dedicated channel allocations.
- *           
- *  @param[in] Pst                 *pst       
- *  @param[in] RgInfSfAlloc        *sfInfo   Carries all the allocation
- *  information.
- *  @return  S16
- *      -# ROK 
- **/
-S16 RgSchMacSfAllocReq(Pst *pst,RgInfSfAlloc *sfInfo)
-{
-   RgCellCb       *cell;
-   RgDlSf         *dlSf;
-   RgErrInfo      err;
-   volatile uint32_t   startTime=0;
-   Inst           inst;
-
-
-   RG_IS_INST_VALID(pst->dstInst);
-   inst = pst->dstInst - RG_INST_START;
-   /*starting Task*/
-   SStartTask(&startTime, PID_MAC_SF_ALLOC_REQ);
-
-   if(NULLP == sfInfo)
-   {
-      return RFAILED;
-   }
-
-   if((cell = rgCb[inst].cell) == NULLP)
-   {
-      DU_LOG("\nERROR  -->  MAC : No cellCb found with cell");
-      return RFAILED;
-   }
-
-   dlSf = &cell->subFrms[(sfInfo->timingInfo.slot % RG_NUM_SUB_FRAMES)];
-
-   rgTOMRlsSf(inst,dlSf);
-   dlSf->schdTime = sfInfo->timingInfo;
-
-#ifdef LTE_ADV
-   rgLaaInitTbInfoLst(cell);
-#endif
-
-   /* Fix : syed Ignore Failure Returns and continue processing.
-    * Incomplete processing results in state sync loss between MAC-SCH. */
-#ifdef EMTC_ENABLE
-   if(TRUE == cell->emtcEnable)
-   {
-      rgEmtcHndl(cell, sfInfo);
-   }
-#endif
-   rgHndlCmnChnl(cell, sfInfo->timingInfo, &sfInfo->cmnLcInfo, &err);
-
-   rgHndlRaResp(cell, sfInfo->timingInfo, &sfInfo->rarInfo, &err);
-
-#ifdef LTE_ADV
-#ifdef XEON_SPECIFIC_CHANGES
-   CM_MEAS_TIME((cell->crntTime.slot % RG_NUM_SUB_FRAMES), CM_DBG_MAC_TTI_IND, CM_DBG_MAC_B4_UE_SCHD);
-#endif
-   rgHndlSchdUe(cell, sfInfo->timingInfo, &sfInfo->ueInfo, &err);
-#ifdef XEON_SPECIFIC_CHANGES
-   CM_MEAS_TIME((cell->crntTime.slot % RG_NUM_SUB_FRAMES), CM_DBG_MAC_TTI_IND, CM_DBG_MAC_UE_SCHD);
-#endif
-   rgLaaChkAndReqTbs(dlSf,cell, inst);
-
-#else
-   rgHndlSchdUe(cell, sfInfo->timingInfo, &sfInfo->ueInfo, &err);
-#endif
-
-#ifdef LTE_L2_MEAS
-   if(rgHndlUlUeInfo(cell, sfInfo->ulUeInfo.timingInfo, 
-           &sfInfo->ulUeInfo) != ROK)
-   {
-      return RFAILED;
-   }
-#endif
-#ifdef XEON_SPECIFIC_CHANGES
-   CM_MEAS_TIME((cell->crntTime.slot % RG_NUM_SUB_FRAMES), CM_DBG_MAC_TTI_IND, CM_DBG_MAC_MEAS);
-#endif
-   /* Fix[ccpu00126310]: Tracks Data Requests from RLC for both loosely and tight coupled 
-      RLC-MAC */
-
-
-   /* Added the handling for pushing down
-    * TFU Data request in the retransmission only scenario.*/ 
-#ifdef LTEMAC_DLUE_TMGOPTMZ
-   dlSf->statIndDone = TRUE;
-   /* Fix [ccpu00126310]: Tracks Data Requests from RLC for both loosely and tight coupled 
-      RLC-MAC */
-   if(!(dlSf->txDone) && 
-#ifdef LTE_ADV
-        (TRUE == rgLaaChkAllRxTbs(dlSf)) && 
-#endif
-        (0 == dlSf->remDatReqCnt) && (dlSf->statIndDone) && 
-        (RG_TIMEINFO_SAME(cell->crntTime, dlSf->schdTime)))
-   {
-      /*This is the case of rettransmission, so no need
-       * to wait for TTI Ind to push TFU Data Request. Send
-       * it right away.*/
-      if (ROK != rgTOMUtlProcDlSf (dlSf, cell, &err))
-      {
-        DU_LOG("\nERROR  -->  MAC : Unable to process downlink subframe for cell");
-        err.errType = RGERR_ROM_DEDDATREQ;
-      }
-      /* Mark this frame as sent */
-      dlSf->txDone = TRUE;
-   }
-#endif
-   if (sfInfo->flowCntrlInfo.numUes > 0)
-   {
-      rgHndlFlowCntrl(cell,sfInfo);
-   }
-   /*stoping Task*/
-   SStopTask(startTime, PID_MAC_SF_ALLOC_REQ);
-   return ROK;
-} /* end of RgSchMacSfAllocReq */
-/**
- * @brief Handler for processing data indication recieved from PHY for UEs.
- *
- * @details
- *
- *     Function: rgTOMProcCrntiCEInDatInd
- *
- *     Handler for processing data indication recieved from PHY for UEs.
- *
- *     Invoked by: RgLiTfuDatInd of LIM 
- *
- *     Processing Steps: 
- *     For each DataInfo recieved
- *      - If  received a CRNTI control element 
- *          - Check if a CCCH SDU is present, if it is return failure
- *          - Check for the existence of UE, if its isnt present return failure.
- *          - Delegate the remaining processing to rgTOMUtlProcMsg3 which
- *          primarily informs the scheduler about the data received and
- *          generates Data indications towards the higher layer.
- *           
- *  @param      RgMacPdu          *pdu,
- *  @param      RgUeCb            *prevUeCb,
- *  @param      RgCellCb          *cellCb,
- *  @param      TfuDatInfo        *datInfo,
- *  @param      RgInfCeInfo       *ceInfo
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- **/
-   static S16 rgTOMProcCrntiCEInDatInd
-(
- RgMacPdu          *pdu,
- RgUeCb            *prevUeCb,
- RgCellCb          *cellCb,
- TfuDatInfo        *datInfo,
- RgInfCeInfo       *ceInfo,
- uint16_t               slot
- )
-{
-   RgUeCb *ueCb = NULLP;
-   Inst   inst  = cellCb->macInst - RG_INST_START;
-
-
-#ifdef LTEMAC_SPS
-   Bool spsToBeActvtd;
-   uint16_t  sduSize;
-#endif
-
-
-#ifndef LTE_L2_MEAS      
-   UNUSED(slot);
-#endif
-
-   ueCb = rgDBMGetUeCbFromRachLst (cellCb, datInfo->rnti);
-
-   if (ueCb == NULLP)
-   {
-      DU_LOG("\nERROR  -->  MAC : RNTI:%d Received MSG3 with CRNTI,unable to find ueCb", ceInfo->ces.cRnti);
-      return RFAILED;
-   }
-
-   prevUeCb = rgDBMGetUeCb (cellCb, ceInfo->ces.cRnti);
-   if (prevUeCb == NULLP)
-   {
-      DU_LOG("\nERROR  -->  MAC : RNTI:%d Received MSG3 with CRNTI,unable to find ueCb", ceInfo->ces.cRnti);
-      return RFAILED;
-   }
-   DU_LOG("\nERROR  -->  MAC : CRNTI CE(%d) received through tmpCrnti(%d)",
-        ceInfo->ces.cRnti, datInfo->rnti);
-   rgDBMDelUeCbFromRachLst(cellCb, ueCb);
-   rgRAMFreeUeCb(inst,ueCb);
-   ueCb = prevUeCb;
-#ifdef LTEMAC_SPS
-   if ((rgTOMUtlProcMsg(cellCb, ueCb, pdu, FALSE,&spsToBeActvtd,&sduSize, slot, NULLP)) != ROK)
-#else
-      if ((rgTOMUtlProcMsg (cellCb, ueCb, pdu, slot, NULLP)) != ROK)
-#endif /* LTEMAC_SPS */
-      {
-        DU_LOG("\nERROR  -->  MAC : RNTI:%d Processing for MSG3 failed",datInfo->rnti);
-        return RFAILED;
-      }
-   return ROK;
-}
-/**
- * @brief Handler for processing data indication recieved from PHY for UEs.
- *
- * @details
- *
- *     Function: rgTOMProcCCCHSduInDatInd
- *
- *     Handler for processing data indication recieved from PHY for UEs.
- *
- *     Invoked by: RgLiTfuDatInd of LIM 
- *
- *     Processing Steps: 
- *     For each DataInfo recieved
- *      - If only CCCH SDU is present
- *        - Invoke rgTOMUtlProcMsg3 for further processing.
- *      - If its a non-Msg3 PDU i.e. received outside of a RA procedure
- *        - Retrieve the UeCB 
- *        - Validate that the received PDU contains only configured Logical
- *        Channels.
- *        - Invoke rgTOMUtlProcDatPdu for further processing. It informs the
- *        scheduler with the information of the received Data and generates
- *        DatIndications towards the higher layers. 
- *           
- *  @param  TfuDatIndInfo *datInd
- *  @param  RgMacPdu          *pdu,
- *  @param  RgUeCb            *prevUeCb,
- *  @param  RgCellCb          *cellCb,
- *  @param  TfuDatInfo        *datInfo,
- *  @param  RgInfCeInfo       *ceInfo
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- **/
-   static S16 rgTOMProcCCCHSduInDatInd
-(
- RgMacPdu          *pdu,
- RgUeCb            *prevUeCb,
- RgCellCb          *cellCb,
- TfuDatInfo        *datInfo,
- RgInfCeInfo       *ceInfo,
- uint16_t               slot 
- )
-{
-   RgUeCb *ueCb = NULLP;
-   Inst   inst  = cellCb->macInst - RG_INST_START;
-
-#ifdef LTEMAC_SPS
-   Bool spsToBeActvtd;
-   uint16_t  sduSize;
-#endif
-
-
-
-#ifndef LTE_L2_MEAS      
-   UNUSED(slot);
-#endif
-
-   if (ceInfo->bitMask & RG_CRNTI_CE_PRSNT)
-   {
-      DU_LOG("\nERROR  -->  MAC : CRNTI:%d Received MSG3 with CCCH",ceInfo->ces.cRnti);
-      return RFAILED;
-   }
-
-   ueCb = rgDBMGetUeCbFromRachLst (cellCb, datInfo->rnti);
-
-   if (ueCb == NULLP)
-   {
-      DU_LOG("\nERROR  -->  MAC : RNTI:%d Processing for MSG3 failed", datInfo->rnti);
-      return RFAILED;
-   }
-   /* Fix: syed Drop any duplicate Msg3(CCCH Sdu) */
-   if (ueCb->dl.hqEnt.numHqProcs)
-   {
-      /* HqE is already initialized by a previuos Msg3 */ 
-      DU_LOG("\nERROR  -->  MAC : RNTI:%d Processing for MSG3 failed. Duplicate "
-           "MSG3 received. Dropping", datInfo->rnti);
-      return RFAILED;
-   }
-
-   if(rgDHMHqEntInit(inst,&ueCb->dl.hqEnt,
-           cellCb->maxDlHqProcPerUe) != ROK)
-   {
-      DU_LOG("\nERROR  -->  MAC : RNTI:%d Harq Initialization failed ", 
-           datInfo->rnti);
-      return RFAILED;
-   }
-   DU_LOG("\nDEBUG  -->  MAC : CCCH SDU received through tmpCrnti(%d)",datInfo->rnti);
-#ifdef LTEMAC_SPS
-   if ((rgTOMUtlProcMsg(cellCb, ueCb, pdu, FALSE,&spsToBeActvtd,&sduSize, slot, NULLP)) != ROK)
-#else
-      if ((rgTOMUtlProcMsg (cellCb, ueCb, pdu, slot, NULLP)) != ROK)
-#endif /* LTEMAC_SPS */
-      {
-        DU_LOG("\nERROR  -->  MAC : RNTI:%d Processing for MSG3 failed", 
-              datInfo->rnti);
-        return RFAILED;
-      }
-   return ROK;
-}
-
-#ifdef LTE_L2_MEAS
-
-/** @brief This function captures the BSR value from Control Element
- *  Info structure and updates the effective Buffer size into the 
- *  corresponding LCG ID. 
- *
- * @details 
- *
- *     Function: rgTOMUtlL2MStoreBufSz
- *
- *         Processing steps:
- *         - update/append the Data structure based on BSR type 
- *
- * @param  [in] RgUeCb     *ueCb
- * @param  [in] RgInfCeInfo *ceInfo
- * @return S16
- */
-
-static S16 rgTOMUtlL2MStoreBufSz( RgUeCb *ueCb, RgInfCeInfo *ceInfo )
-{
-   uint8_t lcgId;
-   uint8_t bsr;
-
-   if(ceInfo->bitMask & RG_TRUNC_BSR_CE_PRSNT)
-   {
-      lcgId = ((ceInfo->ces.bsr.truncBsr >> 6) & 0x03);
-      bsr = ceInfo->ces.bsr.truncBsr & 0x3F;
-      ueCb->ul.lcgArr[lcgId].lcgBsInfo.outStndngBs = rgLwrBsrTbl[bsr];
-   }
-   else if(ceInfo->bitMask & RG_SHORT_BSR_CE_PRSNT)
-   {
-      lcgId = ((ceInfo->ces.bsr.shortBsr >> 6) & 0x03);
-      bsr = ceInfo->ces.bsr.shortBsr & 0x3F;
-      ueCb->ul.lcgArr[lcgId].lcgBsInfo.outStndngBs = rgLwrBsrTbl[bsr];
-
-   }
-   else if(ceInfo->bitMask & RG_LONG_BSR_CE_PRSNT)
-   {
-      ueCb->ul.lcgArr[0].lcgBsInfo.outStndngBs = rgLwrBsrTbl[ceInfo->ces.bsr.longBsr.bs1];
-      ueCb->ul.lcgArr[1].lcgBsInfo.outStndngBs = rgLwrBsrTbl[ceInfo->ces.bsr.longBsr.bs2];
-      ueCb->ul.lcgArr[2].lcgBsInfo.outStndngBs = rgLwrBsrTbl[ceInfo->ces.bsr.longBsr.bs3];
-      ueCb->ul.lcgArr[3].lcgBsInfo.outStndngBs = rgLwrBsrTbl[ceInfo->ces.bsr.longBsr.bs4];
-   }
-   return ROK;
-} /* end of rgTOMUtlL2MStoreBufSz*/
-
-/** @brief : Compiles list of LCs received in UL data for DTCH RBs
- *
- * @details
- *
- * @param  [in] RgCellCb   *cellCb
- * @param  [in] RgUeCb     *ueCb
- * @param  [in] CmLteRnti  rnti
- * @param  [in] RgMacPdu   *pdu
- * @param 
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED 
- */
-static Void rgTOML2MCompileActiveLCs(RgCellCb *cellCb,RgUeCb *ueCb,RgMacPdu *pdu,RgInfCeInfo *ceInfo)
-{
-   CmLList           *node;
-   RgMacSdu          *sdu;
-   RgUlLcCb          *ulLcCb;
-
-
-   node =  pdu->sduLst.first;
-   while (node)
-   {
-      sdu = (RgMacSdu*)node->node;
-
-      if ((ulLcCb = rgDBMGetUlDedLcCb(ueCb, sdu->lcId)), ulLcCb != NULLP)
-      {
-        if (ulLcCb->lcgId != 0)
-        {
-           ceInfo->bitMask |= RG_ACTIVE_LC_PRSNT;
-           ceInfo->ulActLCs[ulLcCb->lcId - 1] = TRUE;
-        }
-      }
-      node = node->next;
-   }
-
-} /* end of */ 
-
-
-
-#endif
-/**********************************************************************
-
-  End of file
- **********************************************************************/