Merge "[Epic-ID: ODUHIGH-461][Task-ID: ODUHIGH-468]Unused files and functions removed...
[o-du/l2.git] / src / 5gnrsch / rg_sch_utl.c
diff --git a/src/5gnrsch/rg_sch_utl.c b/src/5gnrsch/rg_sch_utl.c
deleted file mode 100755 (executable)
index 0e0e037..0000000
+++ /dev/null
@@ -1,9906 +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_sch_utl.c
-
-**********************************************************************/
-
-/** @file rg_sch_utl.c
-@brief This file implements the schedulers main access to MAC layer code.
-*/
-
-
-/* header include files -- defines (.h) */
-#include "common_def.h"
-#include "lrg.h"
-#include "rgr.h"
-#include "tfu.h"
-#include "sch_utils.h"
-#include "rg_env.h"
-#include "rg_sch_err.h"
-#include "rg_sch_inf.h"
-#include "rg_sch.h"
-#include "rg_sch_cmn.h"
-#include "rgm.h"
-
-/* header/extern include files (.x) */
-#include "tfu.x"           /* TFU types */
-#include "lrg.x"           /* layer management typedefs for MAC */
-#include "rgr.x"           /* layer management typedefs for MAC */
-#include "rgm.x"
-#include "rg_sch_inf.x"         /* typedefs for Scheduler */
-#include "rg_sch.x"        /* typedefs for Scheduler */
-#include "rg_sch_cmn.x"        /* typedefs for Scheduler */
-#ifdef EMTC_ENABLE
-#include "rg_sch_emtc_ext.x"
-#endif
-
-
-/* SR_RACH_STATS */
-uint32_t rgNumPrachRecvd =0;       /* Num of Rach Req received including dedicated preambles */
-uint32_t rgNumRarSched =0;         /* Num of RARs sent */
-uint32_t rgNumBI =0;               /* Num of BackOff Ind sent */
-uint32_t rgNumMsg3CrcPassed =0;    /* Num of CRC success for Msg3 */
-uint32_t rgNumMsg3CrcFailed =0;    /* Num of CRC fail for Msg 3 */
-uint32_t rgNumMsg3FailMaxRetx =0;  /* Num of Msg3 fail after Max Retx attempts */
-uint32_t rgNumMsg4Ack =0;          /* Num of Acks for Msg4 Tx */
-uint32_t rgNumMsg4Nack =0; 
-       /* Num of Nacks for Msg4 Tx */
-uint32_t rgNumMsg4FailMaxRetx =0;  /* Num of Msg4 Tx failed after Max Retx attempts */
-uint32_t rgNumSrRecvd =0;          /* Num of Sched Req received */
-uint32_t rgNumSrGrant =0;          /* Num of Sched Req Grants sent */
-uint32_t rgNumMsg3CrntiCE =0;      /* Num of Msg 3 CRNTI CE received */
-uint32_t rgNumDedPream =0;         /* Num of Dedicated Preambles recvd */
-uint32_t rgNumMsg3CCCHSdu =0;      /* Num of Msg 3 CCCH Sdus recvd */
-uint32_t rgNumCCCHSduCrntiNotFound =0;  /*UE Ctx not found for CCCH SDU Msg 3 */
-uint32_t rgNumCrntiCeCrntiNotFound =0;  /*UE Ctx not found for CRNTI CE Msg 3 */
-uint32_t rgNumMsg4WithCCCHSdu =0;       /* Num of Msg4 with CCCH Sdu */
-uint32_t rgNumMsg4WoCCCHSdu =0;         /* Num of Msg4 without CCCH Sdu */
-uint32_t rgNumMsg4Dtx =0;               /* Num of DTX received for Msg 4 */
-uint32_t rgNumMsg3AckSent =0;           /* Num of PHICH Ack sent for Msg 3 */
-uint32_t rgNumMsg3NackSent =0;          /* Num of PHICH Nack sent for Msg 3 */
-uint32_t rgNumMsg4PdcchWithCrnti =0;    /* Num of PDCCH for CRNTI based contention resolution */
-uint32_t rgNumRarFailDuetoRntiExhaustion =0; /* Num of RACH Failures due to RNTI pool exhaution */
-uint32_t rgNumTAModified =0;            /* Num of times TA received is different from prev value */
-uint32_t rgNumTASent =0;               /* Num of TA Command sent */
-uint32_t rgNumMsg4ToBeTx =0;           /* Num of times MSG4 that should be sent */
-uint32_t rgNumMsg4Txed =0;             /* Num of MSG4 actually sent *//* ysNumMsg4ToBeTx -ysNumMsg4Txed == Failed MSG4 TX */
-uint32_t rgNumMsg3DtxRcvd  =0;         /* CRC Fail with SINR < 0 */
-
-uint32_t rgNumDedPreamUECtxtFound =0;         /* Num of Dedicated Preambles recvd */
-
-static uint8_t rgSchDciAmbigSizeTbl[61] = {0,0,0,0,0,0,0,0,0,0,0,
-                         0,1,0,1,0,1,0,0,0,1,
-                         0,0,0,1,0,1,0,0,0,0,
-                         0,1,0,0,0,0,0,0,0,1,
-                         0,0,0,1,0,0,0,0,0,0,
-                         0,0,0,0,0,1,0,0,0,0};
-
-/* local defines */
-
-uint32_t rgSchCmnBetaCqiOffstTbl[16];
-uint32_t rgSchCmnBetaRiOffstTbl[16]; 
-RgSchdApis rgSchCmnApis;
-S16 RgUiRgmSendPrbRprtInd ARGS((
-Pst* pst, 
-SuId suId, 
-RgmPrbRprtInd *prbRprtInd
-));
-
-S16 RgUiRgmSendTmModeChangeInd ARGS((
-Pst* pst, 
-SuId suId, 
-RgmTransModeInd *txModeChngInd
-));
-#ifdef EMTC_ENABLE
-S16 rgSCHEmtcUtlGetSfAlloc ARGS((
-RgSchCellCb *cell
-));
-S16 rgSCHEmtcUtlPutSfAlloc ARGS((
-RgSchCellCb *cell
-));
-Void rgSCHEmtcUtlUpdUeDciSize ARGS((
-RgSchCellCb *cell,
-RgSchUeCb *ueCb
-));
-Void rgSCHEmtcGetDciFrmt61ASize ARGS((
-RgSchCellCb *cell
-));
-Void rgSCHEmtcGetDciFrmt60ASize ARGS((
-RgSchCellCb *cell
-));
-S16 rgSCHEmtcUtlFillPdschDciInfo ARGS((
-TfuPdschDciInfo *pdsch,
-TfuDciInfo      *pdcchDci
-));
-Void rgSCHEmtcUtlRlsRnti ARGS((
-RgSchCellCb *cell,
-RgSchRntiLnk   *rntiLnk,
-uint8_t             *isLegacy
-));
-S16 rgSCHEmtcPdcchAlloc ARGS((
-RgSchCellCb *cell,
-RgSchPdcch  *pdcch
-));
-Void rgSCHEmtcPdcchFree ARGS((
-RgSchCellCb *cell,
-RgSchPdcch  *pdcch
-));
-#endif
-/* Functions specific to TM1/TM2/TM6/TM7 for PRB calculation*/
-Void rgSchUtlDlCalc1CwPrb ARGS(( RgSchCellCb    *cell,
-                                        RgSchUeCb      *ue,
-                                        uint32_t             bo,
-                                        uint32_t            *prbReqrd));
-
-/* Functions specific to TM3/TM4 for PRB calculation*/
-Void rgSchUtlDlCalc2CwPrb ARGS(( RgSchCellCb    *cell,
-                                        RgSchUeCb      *ue,
-                                        uint32_t             bo,
-                                        uint32_t            *prbReqrd));
-
-#ifdef LTE_ADV
-RgSchCellCb* rgSchUtlGetCellCb ARGS(( Inst       inst,
-                                             uint16_t        cellId
-));
-#endif
-
-typedef Void (*RgSchUtlDlCalcPrbFunc) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
-                                            uint32_t bo, uint32_t *prbRequrd));
-#ifndef LTE_ADV
-/* Functions specific to each transmission mode for PRB calculation*/
-RgSchUtlDlCalcPrbFunc  dlCalcPrbFunc[7] = {rgSchUtlDlCalc1CwPrb,
-rgSchUtlDlCalc1CwPrb, rgSchUtlDlCalc2CwPrb, rgSchUtlDlCalc2CwPrb,
-NULLP, rgSchUtlDlCalc1CwPrb, rgSchUtlDlCalc1CwPrb};
-
-#else
-/* Functions specific to each transmission mode for PRB calculation*/
-RgSchUtlDlCalcPrbFunc  dlCalcPrbFunc[9] = {rgSchUtlDlCalc1CwPrb,
-rgSchUtlDlCalc1CwPrb, rgSchUtlDlCalc2CwPrb, rgSchUtlDlCalc2CwPrb,
-NULLP, rgSchUtlDlCalc1CwPrb, rgSchUtlDlCalc1CwPrb, NULLP, NULLP};
-
-#endif
-
-#ifdef LTE_TDD
-/* The below table will be used to map the UL SF number in a TDD Cfg 0 
-   frame to the ul Sf array maintained in cellCb */
-static uint8_t  rgSchTddCfg0UlSfTbl[] = {2, 3, 4, 7, 8, 9};
-#endif
-
-static S16 rgSCHUtlUlAllocDbInit ARGS((
-         RgSchCellCb    *cell,
-         RgSchUlAllocDb *db,
-         uint8_t maxAllocs
-         ));
-static Void rgSCHUtlUlAllocDbDeinit ARGS((
-         RgSchCellCb    *cell,
-         RgSchUlAllocDb *db
-         ));
-static S16 rgSCHUtlUlHoleDbInit ARGS((
-         RgSchCellCb    *cell,
-         RgSchUlHoleDb *db,
-         uint8_t maxHoles,
-         uint8_t start,
-         uint8_t num
-         ));
-static Void rgSCHUtlUlHoleDbDeinit ARGS((
-         RgSchCellCb   *cell,
-         RgSchUlHoleDb *db
-         ));
-
-static S16 rgSCHChkBoUpdate ARGS((
-         RgSchCellCb    *cell,
-         RgInfCmnBoRpt  *boUpdt
-         ));
-#ifdef UNUSE_FUN
-#ifdef TFU_UPGRADE
-static uint8_t rgSCHUtlFetchPcqiBitSz ARGS((
- RgSchCellCb    *cell,
- RgSchUeCb      *ueCb, 
- uint8_t        numTxAnt
- ));
-#endif
-#endif
-/* sorted in ascending order of tbSz */
-const struct rgSchUtlBcchPcchTbSz
-{
-   uint8_t   rbIndex;    /* RB index {2,3} */
-   uint16_t  tbSz;       /* one of the Transport block size in bits of
-                     * rbIndex 2 or 3 */
-   /* Corrected allocation for common channels */
-   uint8_t   mcs;        /* imcs */
-} rgSchUtlBcchPcchTbSzTbl[44] = {
-   { 2,   32,  0 }, { 2,   56,  1 }, { 2,   72,  2 }, { 3,   88,  1 },
-   { 2,  104,  3 }, { 2,  120,  4 }, { 2,  144,  5 }, { 2,  176,  6 },
-   { 3,  208,  4 }, { 2,  224,  7 }, { 2,  256,  8 }, { 2,  296,  9 },
-   { 2,  328, 10 }, { 2,  376, 11 }, { 3,  392,  8 }, { 2,  440, 12 },
-   { 3,  456,  9 }, { 2,  488, 13 }, { 3,  504, 10 }, { 2,  552, 14 },
-   { 3,  584, 11 }, { 2,  600, 15 }, { 2,  632, 16 }, { 3,  680, 12 },
-   { 2,  696, 17 }, { 3,  744, 13 }, { 2,  776, 18 }, { 2,  840, 19 },
-   { 2,  904, 20 }, { 3,  968, 16 }, { 2, 1000, 21 }, { 2, 1064, 22 },
-   { 2, 1128, 23 }, { 3, 1160, 18 }, { 2, 1192, 24 }, { 2, 1256, 25 },
-   { 3, 1288, 19 }, { 3, 1384, 20 }, { 2, 1480, 26 }, { 3, 1608, 22 },
-   { 3, 1736, 23 }, { 3, 1800, 24 }, { 3, 1864, 25 }, { 3, 2216, 26 }
-};
-
-/* local typedefs */
-
-/* local externs */
-
-/* forward references */
-#ifdef LTE_TDD
-static Void rgSCHUtlUpdPrachOcc ARGS((
-RgSchCellCb *cell,
-RgrTddPrachInfo *cellCfg));
-#endif
-
-#define RGSCH_NUM_PCFICH_REG 4
-#define RGSCH_NUM_REG_PER_CCE 9
-#define RGSCH_NUM_REG_PER_PHICH_GRP 3
-
-#ifdef LTE_TDD
-#define RGSCH_INITPHICH(_phich, _hqFeedBack, _nDmrs, _rbStart, _iPhich) {\
-   (_phich)->hqFeedBack = _hqFeedBack; \
-   (_phich)->rbStart = _rbStart; \
-   (_phich)->nDmrs = _nDmrs; \
-   (_phich)->iPhich = _iPhich; \
-   (_phich)->lnk.next = NULLP; \
-   (_phich)->lnk.prev = NULLP; \
-   (_phich)->lnk.node = (PTR)(_phich); \
-}
-#else
-#define RGSCH_INITPHICH(_phich, _hqFeedBack, _nDmrs, _rbStart, _isForMsg3) {\
-   (_phich)->hqFeedBack = _hqFeedBack; \
-   (_phich)->rbStart = _rbStart; \
-   (_phich)->nDmrs = _nDmrs; \
-   (_phich)->isForMsg3 = _isForMsg3; \
-   (_phich)->lnk.next = NULLP; \
-   (_phich)->lnk.prev = NULLP; \
-   (_phich)->lnk.node = (PTR)(_phich); \
-}
-#endif
-
-#define RGSCH_PHICH_ALLOC(_inst,_dataPtr, _size, _ret) {\
-   _ret = rgSCHUtlAllocSBuf(_inst, (Data **)&_dataPtr, _size); \
-}
-
-/* ccpu00117052 - MOD - Passing double pointer
-for proper NULLP assignment*/
-#define RGSCH_PHICH_FREE(_inst, _dataPtr, _size) {\
-      rgSCHUtlFreeSBuf(_inst, (Data **)(&(_dataPtr)), _size); \
-}
-
-#ifdef TFU_UPGRADE
-#define RGSCH_GETBIT(a, b)     ((((uint8_t*)a)[(b)>>3] >> ((7-((b)&7)))) & 1)
-
-/*
-*
-*       Fun:   rgSCHUtlPower
-*
-*       Desc:  This function finds of the Power of x raised to n
-*
-*       Ret:   value of x raised to n
-*
-*       Notes: None
-*
-*       File:  rg_sch_utl.c
-*
-*/
-F64 rgSCHUtlPower(F64 x,F64 n)
-{
- if( n==0 )
- {
-   return ( 1 );
- }
- else if ( n>0 )
- {
-   return ( x * rgSCHUtlPower( x, n-1 ) );
- }
- else
- {
-   return ( (1/x) * rgSCHUtlPower( x, n+1 ) );
- }
-} /* end of rgSCHUtlPower*/
-
-/*
-*
-*       Fun:   rgSCHUtlParse
-*
-*       Desc:  This function parses bits x to y of an array and
-*                  returns the integer value  out of it.
-*
-*       Ret:   integer value of z bits
-*
-*       Notes: None
-*
-*       File:  rg_sch_utl.c
-*
-*/
-uint32_t rgSCHUtlParse(uint8_t *buff,uint8_t startPos,uint8_t endPos,uint8_t buffSize)
-{
- uint8_t pointToChar,pointToEnd, loop;
- uint8_t size =  endPos - startPos;
- F64 result = 0;
- pointToEnd = (startPos)%8;
-   for ( loop=0; loop<size; loop++)
-   {
-      pointToChar = (((startPos)+loop)/8);
-      if (RGSCH_GETBIT(buff+pointToChar,pointToEnd%8)==1)
-      {
-         result=result+(rgSCHUtlPower(2,(size-loop-1)));
-      }
-      pointToEnd++;
-   }
-   return ((uint32_t)result);
-} /* end of rgSCHUtlParse*/
-
-/*
-*
-*       Fun:   rgSCHUtlFindDist
-*
-*       Desc:  This function calculates the iterations need to cover
-*                  before the valid Index can be used for next possible Reception
-*
-*       Ret:   integer value of z bits
-*
-*       Notes: None
-*
-*       File:  rg_sch_utl.c
-*
-*/
-uint8_t rgSCHUtlFindDist(uint16_t crntTime,uint16_t tempIdx)
-{
- uint8_t  dist =0;
- /* ccpu00137113- Distance is not estimated properly if the periodicity is 
-  * equal to RG_SCH_PCQI_SRS_SR_TRINS_SIZE.
-  */
- while(crntTime<=tempIdx)
- {
-    crntTime += RG_SCH_PCQI_SRS_SR_TRINS_SIZE;
-    dist+=1;
- }
- return (dist-1);
-} /* end of rgSCHUtlFindDist*/
-#endif
-
-\f
-/**
- * @brief This function checks availability of a PDCCH
- *
- * @details
- *
- *     Function: rgSCHUtlPdcchAvail
- *     Purpose:  This function checks if a particular PDCCH is in use.
- *               map field of PDCCH is used to track the CCEs arleady
- *               allocated. Each bit of map represents one CCE and the
- *               LSBit of first byte represents CCE 0.
- *               steps:
- *               1. Locate the set of bits that represent the PDCCH for
- *               the provided location.
- *               2.  If the value of the bits is non-zero one or many CCEs
- *               for the PDCCH are in use and hence the PDCCH is not available.
- *               3. If pdcch is available, assign it to [out]pdcch.
- *               4.  Set all of the bits to one. There is no check performed
- *               to see if the PDCCH is available.
- *
- *     Invoked by: scheduler
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSchPdcchInfo*  pdcchInfo
- *  @param[in]  uint8_t            loc
- *  @param[in]  uint8_t            aggrLvl
- *  @param[out] RgSchPdcch**     pdcch
- *  @return  Boolean
- *         -#   TRUE  if available
- *         -#   FALSE otherwise
- *
- **/
-Bool rgSCHUtlPdcchAvail
-(
-RgSchCellCb    *cell,
-RgSchPdcchInfo *pdcchInfo,
-CmLteAggrLvl   aggrLvl,
-RgSchPdcch     **pdcch
-)
-{
-   uint8_t            *byte;
-   uint16_t            offset;
-   uint16_t             initMask;
-   uint16_t             currMask;
-   Inst                 inst = cell->instIdx;
-   S16                  ret;
-   uint16_t             offsetStepMask;
-
-   /* V5G_213 : 10.1 */
-       offset = 0;
-       byte = &pdcchInfo->map[0];
-       initMask = (0xffff >> (16 - aggrLvl));
-       currMask = initMask;
-       /* if N(symbol, xPDCCH) =2, then xPDCCH will be candidates in 
-         * search space of index {0,1,2,3} and {8,9,..14}
-         */
-       if ((cell->cell5gtfCb.cfi == 2) && (aggrLvl == CM_LTE_AGGR_LVL2))
-       {
-               offsetStepMask = 0xc;
-       }
-       else
-       {
-               offsetStepMask = 0xc0;
-       }
-
-       /* Loop till the number of bytes available in the CCE map */
-       while (offset < ((pdcchInfo->nCce+ 7) >> 3))
-       {
-          byte = &pdcchInfo->map[offset];
-               /* Checking for available CCE */
-               if ((*byte & currMask) == 0)
-          {
-             break;
-          }
-               /* if the number of CCEs required are not available, move to next offset */
-               if (currMask & offsetStepMask)
-               {
-                       offset++;
-                       currMask = initMask;
-               }
-               else
-               {
-                  /* Move to the next available CCE index in the current byte(cce map) */
-                       currMask = currMask << aggrLvl;
-               }
-       }
-
-       if ((offset >= ((pdcchInfo->nCce + 7) >> 3)) || 
-                 ((aggrLvl == CM_LTE_AGGR_LVL16) && (offset > 0)))
-       {
-               return (FALSE);
-       }
-
-       byte = &pdcchInfo->map[offset];
-   
-   if (cell->pdcchLst.first != NULLP)
-   {
-      *pdcch = (RgSchPdcch *)(cell->pdcchLst.first->node);
-      cmLListDelFrm(&cell->pdcchLst, cell->pdcchLst.first);
-   }
-   else
-   {
-      ret = rgSCHUtlAllocSBuf(inst, (Data **)pdcch, sizeof(RgSchPdcch));
-      if(ROK != ret)
-      {
-         return (FALSE);
-      }
-   }
-
-   if (*pdcch)
-   {
-      (*byte) |= currMask;
-               /* ALL CCEs will be used in case of level 16 */
-               if (aggrLvl == CM_LTE_AGGR_LVL16)
-               {
-                       *(byte+1) |= currMask;
-               }
-      (*pdcch)->aggrLvl = aggrLvl;
-      cmLListAdd2Tail(&pdcchInfo->pdcchs, &((*pdcch)->lnk));
-      (*pdcch)->lnk.node = (PTR)*pdcch;
-      (*pdcch)->nCce = aggrLvl;
-      (*pdcch)->ue = NULLP;
-   }
-   return (TRUE);
-}
-
-
-\f
-/**
- * @brief This function releases a PDCCH
- *
- * @details
- *
- *     Function: rgSCHUtlPdcchPut
- *     Purpose:  This function releases a PDCCH.
- *               steps:
- *               1. Locate the set of bits that represent the PDCCH for
- *               the provided location.
- *               2. Set all of the bits to zero.
- *               3. Release the memory of PDCCH to the cell free Q
- *
- *     Invoked by: scheduler
- *
- *  @param[in]  RgSchPdcchInfo*  pdcchInfo
- *  @param[in]  uint8_t            loc
- *  @param[in]  uint8_t            aggrLvl
- *  @return     Void
- *
- **/
-Void rgSCHUtlPdcchPut(RgSchCellCb *cell,RgSchPdcchInfo *pdcchInfo,RgSchPdcch *pdcch)
-{
-   uint8_t              *byte;
-   uint8_t              offset;
-   uint16_t             mask;
-
-   switch(pdcch->aggrLvl)
-   {
-      case CM_LTE_AGGR_LVL2:
-         offset = (pdcch->nCce >> 1) & 3;
-         mask = 0x3 << (offset * 2); /*ccpu00128826 - Offset Correction */
-         break;
-      case CM_LTE_AGGR_LVL4:
-         offset = (pdcch->nCce >> 2) & 1;
-         mask = 0xf << (offset * 4);/*ccpu00128826 - Offset Correction */
-         break;
-      case CM_LTE_AGGR_LVL8:
-         mask = 0xff;
-         break;
-               case CM_LTE_AGGR_LVL16:
-         mask = 0xffff;
-         break;
-      default:
-         return;
-   }
-   /* Placing common computation of byte from all the cases above here
-      for optimization */
-   byte = &pdcchInfo->map[pdcch->nCce >> 3];
-
-   cmLListDelFrm(&pdcchInfo->pdcchs, &pdcch->lnk);
-   cmLListAdd2Tail(&cell->pdcchLst, &pdcch->lnk);
-   pdcch->lnk.node = (PTR)pdcch;
-   pdcch->ue = NULLP;
-   (*byte) &= ~mask;
-
-  return;
-}
-
-\f
-/**
- * @brief This function initializes PDCCH information for frame
- *
- * @details
- *
- *     Function: rgSCHUtlPdcchInit
- *     Purpose:  This function initializes PDCCH information for
- *               a slot. It removes the list of PDCCHs allocated
- *               in the prior use of this slot structure.
- *
- *     Invoked by: rgSCHUtlSubFrmPut
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSubFrm*     subFrm
- *  @return  Void
- *
- **/
-Void rgSCHUtlPdcchInit(RgSchCellCb *cell,RgSchDlSf *subFrm,uint16_t nCce)
-{
-   RgSchPdcchInfo       *pdcchInfo;
-   RgSchPdcch           *pdcch;
-   Inst                 inst = cell->instIdx;
-   uint8_t              extraBits;
-   uint32_t             cceMapSz;
-
-   pdcchInfo = &subFrm->pdcchInfo;
-   while(pdcchInfo->pdcchs.first != NULLP)
-   {
-      pdcch = (RgSchPdcch *)pdcchInfo->pdcchs.first->node;
-      cmLListDelFrm(&pdcchInfo->pdcchs, pdcchInfo->pdcchs.first);
-      cmLListAdd2Tail(&cell->pdcchLst, &pdcch->lnk);
-      pdcch->ue = NULLP;
-   }
-   cmLListInit(&pdcchInfo->pdcchs);
-   
-#ifdef LTEMAC_SPS
-   subFrm->relPdcch = NULLP;
-#endif
-   
-   cceMapSz = ((pdcchInfo->nCce + 7) >> 3);
-
-       /* The bitMap array size is the number of ceiling(CCEs/8) */
-       /* If nCce received is not the same as the one stored in    
-       * pdcchInfo, free the pdcchInfo map                      */
-
-   if(pdcchInfo->nCce != nCce)
-   {
-      if(pdcchInfo->nCce)
-      {
-       rgSCHUtlFreeSBuf(inst, (Data **)(&(pdcchInfo->map)), cceMapSz);
-      }
-      pdcchInfo->nCce = nCce;
-      cceMapSz = ((pdcchInfo->nCce + 7) >> 3);
-      rgSCHUtlAllocSBuf(inst, (Data **)&pdcchInfo->map,  
-      cceMapSz);
-      if (pdcchInfo->map == NULLP)
-      {
-         /* Generate log error here */
-         return;
-      }    
-   }
-
-   memset(subFrm->pdcchInfo.map, 0, cceMapSz);
-   /*  If nCce is not exactly same as the bitMap size(no of bits allocated
-       * to represent the Cce's, then mark the extra bits as unavailable
-       extra bits = (((pdcchInfo->nCce + 7) >> 3)*8) - pdcchInfo->nCce
-       The last byte of bit map = subFrm->pdcchInfo.map[((pdcchInfo->nCce + 7) >> 3) - 1]
-        NOTE : extra bits are most significant of the last byte eg.  */
-   extraBits = (cceMapSz)*8 - pdcchInfo->nCce;
-   subFrm->pdcchInfo.map[cceMapSz - 1] |=
-     ((1 << extraBits) - 1) << (8 - extraBits);
-   return;
-}
-
-/* LTE_ADV_FLAG_REMOVED_START */
-/**
- * @brief This function frees Pool
- * @details
- *
- *     Function: rgSchSFRTotalPoolFree
- *
- *     Invoked by: rgSchSFRTotalPoolInit
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSubFrm*     subFrm
- *  @return  Void
- *
- **/
-Void rgSchSFRTotalPoolFree(RgSchSFRTotalPoolInfo *sfrTotalPoolInfo,RgSchCellCb *cell)
-{
-   CmLListCp   *l;
-   CmLList     *n;
-
-   /*Deinitialise if  these cc pools and ce pools are already existent*/
-   l = &sfrTotalPoolInfo->ccPool;
-   n = cmLListFirst(l);
-   while (n != NULL)
-   {
-      /*REMOVING Cell Centred POOLS IF ANY*/
-      n = cmLListDelFrm(l, n);
-
-      /* Deallocate buffer */
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(n->node)), sizeof(RgSchSFRPoolInfo));
-
-      /* Deallocate buffer */
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(n)), sizeof(CmLList));   
-      n = cmLListNext(l);
-   }
-
-   /*REMOVING Cell Edged POOLS IF ANY*/
-   l = &sfrTotalPoolInfo->cePool;
-   n = cmLListFirst(l);
-   while (n != NULL)
-   {
-      n = cmLListDelFrm(l, n);
-
-      /* Deallocate buffer */
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(n->node)), sizeof(RgSchSFRPoolInfo));
-
-      /* Deallocate buffer */
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(n)), sizeof(CmLList));   
-      n = cmLListNext(l);
-   } 
-
-}
-
-/**
- * @brief This function resets temporary variables in Pool
- * @details
- *
- *     Function: rgSchSFRResetPoolVariables
- *
- *     Invoked by: rgSCHSFRUtlTotalPoolInit
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSubFrm*     subFrm
- *  @return  Void
- *
- **/
-S16 rgSchSFRTotalPoolInit(RgSchCellCb *cell,RgSchDlSf *sf)
-{      
-   /*  Initialise the variables */
-   RgSchSFRPoolInfo *sfrCCPool;
-   RgSchSFRPoolInfo *sfrCEPool;
-   CmLListCp   *l;
-   CmLList     *n;
-   CmLList *temp = NULLP;
-   S16 ret = 0;
-
-   rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo, cell);  
-   sf->sfrTotalPoolInfo.CCPool1BwAvlbl          = 0;
-   sf->sfrTotalPoolInfo.CCPool2BwAvlbl          = 0;
-   sf->sfrTotalPoolInfo.CEPoolBwAvlbl           = 0;
-   sf->sfrTotalPoolInfo.CC1                     = FALSE;
-   sf->sfrTotalPoolInfo.CC2                     = FALSE;
-   /*Initialise the CE Pools*/
-   cmLListInit (&(sf->sfrTotalPoolInfo.cePool));
-
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&temp, sizeof(CmLList));
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : CE Pool memory allocation FAILED for cell");       
-      rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo, cell);
-      return RFAILED;
-   }
-
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&temp->node, sizeof(RgSchSFRPoolInfo));
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : CE Pool memory allocation FAILED for cell ");       
-      rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo,cell);
-      return RFAILED;
-   }
-
-   l = &sf->sfrTotalPoolInfo.cePool;
-   cmLListAdd2Tail(l, temp);
-
-   /*Initialise Bandwidth and startRB and endRB for each pool*/
-   n = cmLListFirst(l);
-
-   /* Initialise the CE Pools */
-   sfrCEPool = (RgSchSFRPoolInfo*)n->node;
-
-   sfrCEPool->poolstartRB             = cell->lteAdvCb.sfrCfg.cellEdgeRbRange.startRb;
-   sfrCEPool->poolendRB               = cell->lteAdvCb.sfrCfg.cellEdgeRbRange.endRb;
-   sfrCEPool->bw                      = sfrCEPool->poolendRB - sfrCEPool->poolstartRB + 1;
-   sf->sfrTotalPoolInfo.CEPoolBwAvlbl = sfrCEPool->bw;
-
-   sfrCEPool->bwAlloced               = 0;
-   sfrCEPool->type2Start              = sfrCEPool->poolstartRB;
-   sfrCEPool->type2End                = RGSCH_CEIL(sfrCEPool->poolstartRB, cell->rbgSize);   
-   sfrCEPool->type0End                = ((sfrCEPool->poolendRB + 1) / cell->rbgSize) - 1;
-   sfrCEPool->pwrHiCCRange.startRb    = 0;
-   sfrCEPool->pwrHiCCRange.endRb      = 0;
-
-   /*Initialise CC Pool*/
-   cmLListInit (&(sf->sfrTotalPoolInfo.ccPool));
-
-   /*Add memory and Update CCPool*/
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&temp, sizeof(CmLList));
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : CC Pool memory allocation FAILED for cell ");       
-      rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo,cell);
-      return RFAILED;
-   }
-
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&temp->node, sizeof(RgSchSFRPoolInfo));
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : CC Pool memory allocation FAILED for cell ");       
-      rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo,cell);
-      return RFAILED;
-   }
-
-   l = &sf->sfrTotalPoolInfo.ccPool;
-   cmLListAdd2Tail(l, temp);
-
-   /*Initialise Bandwidth and startRB and endRB for each pool*/
-   if(sfrCEPool->poolstartRB)
-   {
-      n = cmLListFirst(l);
-      sfrCCPool = (RgSchSFRPoolInfo*)n->node;
-
-      sfrCCPool->poolstartRB              = 0;
-      sfrCCPool->poolendRB                = sfrCEPool->poolstartRB - 1;
-      sfrCCPool->bw                       = sfrCCPool->poolendRB - sfrCCPool->poolstartRB + 1;
-      sf->sfrTotalPoolInfo.CCPool1BwAvlbl = sfrCCPool->bw;
-      sfrCCPool->bwAlloced                = 0;
-      sfrCCPool->type2Start               = 0;
-      sfrCCPool->type2End                 = 0;
-      sfrCCPool->type0End                 = ((sfrCCPool->poolendRB + 1) / cell->rbgSize) - 1;
-      sf->sfrTotalPoolInfo.CC1            = TRUE;
-      sfrCCPool->pwrHiCCRange.startRb     = 0;
-      sfrCCPool->pwrHiCCRange.endRb       = 0;
-   }
-   else
-   {
-      n = cmLListFirst(l);
-      sfrCCPool = (RgSchSFRPoolInfo*)n->node;
-
-      sfrCCPool->poolstartRB              = sfrCEPool->poolendRB + 1;
-      sfrCCPool->poolendRB                = sf->bw - 1;
-      sfrCCPool->bw                       = sfrCCPool->poolendRB - sfrCCPool->poolstartRB + 1;
-      sf->sfrTotalPoolInfo.CCPool2BwAvlbl = sfrCCPool->bw;
-      sfrCCPool->CCPool2Exists            = TRUE;
-      sfrCCPool->bwAlloced                = 0;
-      sfrCCPool->type2Start               = sfrCCPool->poolstartRB;
-      sfrCCPool->type2End                 = RGSCH_CEIL(sfrCCPool->poolstartRB, cell->rbgSize);
-      sfrCCPool->type0End                 = ((sfrCCPool->poolendRB + 1) / cell->rbgSize) - 1;
-      sf->sfrTotalPoolInfo.CC2            = TRUE;
-      sfrCEPool->adjCCPool                = sfrCCPool; /* SFR_FIX */
-      sfrCCPool->pwrHiCCRange.startRb     = 0;
-      sfrCCPool->pwrHiCCRange.endRb       = 0;
-   }
-
-   if((sfrCEPool->poolendRB != sf->bw - 1) && (!sfrCCPool->poolstartRB))
-   {   
-      /*Add memory and Update CCPool*/
-      ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&temp, sizeof(CmLList));
-      if (ret != ROK)
-      {
-         DU_LOG("\nERROR  -->  SCH : CC Pool memory allocation FAILED for cell ");       
-         rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo,cell);
-         return RFAILED;
-      }
-
-      ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&temp->node, sizeof(RgSchSFRPoolInfo));
-      if (ret != ROK)
-      {
-         DU_LOG("\nERROR  -->  SCH : CC Pool memory allocation FAILED for cell ");       
-         rgSchSFRTotalPoolFree(&sf->sfrTotalPoolInfo,cell);
-         return RFAILED;
-      }
-
-      cmLListAdd2Tail(l, temp);
-
-      n = cmLListCrnt(l);
-      sfrCCPool = (RgSchSFRPoolInfo*)n->node;
-
-      sfrCCPool->poolstartRB              = sfrCEPool->poolendRB + 1;
-      sfrCCPool->poolendRB                = sf->bw - 1;
-      sfrCCPool->bw                       = sfrCCPool->poolendRB - sfrCCPool->poolstartRB + 1;
-      sf->sfrTotalPoolInfo.CCPool2BwAvlbl = sfrCCPool->bw;
-      sfrCCPool->CCPool2Exists            = TRUE;
-      sfrCCPool->bwAlloced                = 0;
-      sfrCCPool->type2Start               = sfrCCPool->poolstartRB;     
-      sfrCCPool->type2End                 = RGSCH_CEIL(sfrCCPool->poolstartRB, cell->rbgSize);
-      sfrCCPool->type0End                 = ((sfrCCPool->poolendRB + 1) / cell->rbgSize) - 1;
-      sf->sfrTotalPoolInfo.CC2            = TRUE;
-      sfrCEPool->adjCCPool                = sfrCCPool; /* SFR_FIX */
-      sfrCCPool->pwrHiCCRange.startRb     = 0;
-      sfrCCPool->pwrHiCCRange.endRb       = 0;
-   }   
-
-   sf->sfrTotalPoolInfo.CCRetx            = FALSE;
-   sf->sfrTotalPoolInfo.CERetx            = FALSE;
-
-   sf->sfrTotalPoolInfo.ccBwFull          = FALSE;
-   sf->sfrTotalPoolInfo.ceBwFull          = FALSE;
-   sf->sfrTotalPoolInfo.isUeCellEdge      = FALSE;
-   return ROK;
-}
-/**
- * @brief This function resets temporary variables in RNTP Prepration
- * @details
- *
- *     Function:   rgSchDSFRRntpInfoInit 
- *
- *     Invoked by: rgSCHSFRUtlTotalPoolInit
- *
- *  @param[in]  TknStrOSXL*     rntpPtr
- *  @param[in]  RgSubFrm*        subFrm
- *  @return  S16
- *
- **/
-S16   rgSchDSFRRntpInfoInit(TknStrOSXL  *rntpPtr,RgSchCellCb *cell,uint16_t bw)
-{   
-   Inst inst = cell->instIdx;
-   uint16_t len;
-
-   rntpPtr->pres = PRSNT_NODEF;
-
-   len = (bw % 8 == 0) ? (bw/8) : (bw/8 + 1);
-
-   rntpPtr->len  = len;   
-
-   /* Allocate memory for "scheduled UE" Info */
-   if((rgSCHUtlAllocSBuf(inst, (Data**)&(rntpPtr->val),
-               (len * sizeof(uint8_t)))) != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : Memory allocation FAILED for RNTP Alloc");
-      return RFAILED;
-   }
-
-   return ROK;
-}
-
-/**
- * @brief This function release RNTP pattern from slot and Cell 
- * @details
- *
- *     Function:   rgSchDSFRRntpInfoFree 
- *
- *     Invoked by: rgSCHSFRUtlTotalPoolInit
- *
- *  @param[in]  TknStrOSXL*     rntpPtr
- *  @param[in]  RgSubFrm*        subFrm
- *  @return  S16
- *
- **/
-S16   rgSchDSFRRntpInfoFree(TknStrOSXL *rntpPtr,RgSchCellCb *cell,uint16_t bw)
-{   
-   Inst inst = cell->instIdx;
-   uint16_t len;
-
-   len = (bw % 8 == 0) ? (bw/8) : (bw/8 + 1);
-
-   if(rntpPtr->pres == PRSNT_NODEF)
-   {   
-      rgSCHUtlFreeSBuf(inst, (Data **)(&(rntpPtr->val)),(len * sizeof(uint8_t)));
-      rntpPtr->pres = NOTPRSNT;
-      rntpPtr->len  = 0;   
-   }
-
-   return ROK;
-}
-
-/**
- * @brief This function resets temporary variables in Pool
- * @details
- *
- *     Function: rgSchSFRResetPoolVariables
- *     Purpose:  Initialise the dynamic variables in each pool.
- *                    Reset bwAlloced, bwAssigned, type2End, type0End, type2Start
- *     Invoked by: rgSCHSFRUtlTotalPoolReset
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSchSFRPoolInfo *pool
- *  @return  Void
- *
- **/
-static Void rgSchSFRResetPoolVariables(RgSchCellCb *cell,RgSchSFRPoolInfo *pool)
-{
-
-   pool->bwAlloced  = 0;
-
-   /*type0end will be the last RBG in pool with all available RBs*/
-   pool->type0End = (((pool->poolendRB + 1)/cell->rbgSize) - 1);
-
-   /*type2end will be the first RBG in pool with all available RBs*/
-   pool->type2End = RGSCH_CEIL(pool->poolstartRB, cell->rbgSize);
-   pool->type2Start = pool->poolstartRB;
-   pool->bw = pool->poolendRB - pool->poolstartRB + 1;
-
-      return;
-}
-/**
- * @brief This function resets SFR Pool information for frame
- *
- * @details
- *
- *     Function: rgSCHSFRUtlTotalPooReset
- *     Purpose:  Update the dynamic variables in each pool as they will be modified in each slot.
- *                    Dont modify the static variables like startRB, endRB, BW
- *     Invoked by: rgSCHUtlSubFrmPut
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSchDlSf*     subFrm
- *  @return  Void
- *
- **/
-static Void rgSCHSFRUtlTotalPoolReset(RgSchCellCb *cell,RgSchDlSf *subFrm)
-{
-   RgSchSFRTotalPoolInfo *totalPoolInfo = &subFrm->sfrTotalPoolInfo;
-   CmLListCp    *ccPool = &totalPoolInfo->ccPool;
-   CmLListCp    *cePool = &totalPoolInfo->cePool;
-   CmLList *node = NULLP;
-   RgSchSFRPoolInfo *tempPool = NULLP;
-
-   totalPoolInfo->ccBwFull          = FALSE;
-   totalPoolInfo->ceBwFull          = FALSE;
-   totalPoolInfo->isUeCellEdge      = FALSE;
-   totalPoolInfo->CCPool1BwAvlbl    = 0;
-   totalPoolInfo->CCPool2BwAvlbl    = 0;
-   totalPoolInfo->CEPoolBwAvlbl     = 0;
-   totalPoolInfo->CCRetx            = FALSE;
-   totalPoolInfo->CERetx            = FALSE;
-
-   node = ccPool->first;
-   while(node)
-   {
-      tempPool = (RgSchSFRPoolInfo *)(node->node);
-      node = node->next;
-      rgSchSFRResetPoolVariables(cell, tempPool);
-      if(tempPool->poolstartRB == 0)
-         totalPoolInfo->CCPool1BwAvlbl = tempPool->bw;
-      else
-         totalPoolInfo->CCPool2BwAvlbl = tempPool->bw;
-   }
-
-   node = cePool->first;
-   while(node)
-   {
-      tempPool = (RgSchSFRPoolInfo *)(node->node);
-      node = node->next;
-      rgSchSFRResetPoolVariables(cell, tempPool);
-      totalPoolInfo->CEPoolBwAvlbl = tempPool->bw;    
-   }
-
-   return;
-}
-/* LTE_ADV_FLAG_REMOVED_END */
-/**
- * @brief This function appends PHICH information for frame
- *
- * @details
- *
- *     Function: rgSCHUtlAddPhich
- *     Purpose:  This function appends PHICH information for
- *               a slot.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSubFrm*     subFrm
- *  @param[in]  uint8_t            hqFeedBack
- *  @param[in]  uint8_t            nDmrs
- *  @param[in]  uint8_t            rbStart
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-#ifdef LTE_TDD
-S16 rgSCHUtlAddPhich
-(
-RgSchCellCb     *cell,
-CmLteTimingInfo frm,
-uint8_t         hqFeedBack,
-uint8_t         nDmrs,
-uint8_t         rbStart,
-uint8_t         iPhich
-)
-#else
-S16 rgSCHUtlAddPhich
-(
-RgSchCellCb     *cell,
-CmLteTimingInfo frm,
-uint8_t         hqFeedBack,
-uint8_t         nDmrs,
-uint8_t         rbStart,
-Bool            isForMsg3
-)
-#endif
-{
-   S16                ret;
-   RgSchPhich         *phich;
-   RgSchDlSf          *dlSf;
-   Inst               inst = cell->instIdx;
-
-   dlSf = rgSCHUtlSubFrmGet(cell, frm);
-   RGSCH_PHICH_ALLOC(inst, phich,sizeof(RgSchPhich), ret);
-
-   if(ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlAddPhich(): "
-               "Allocation of RgSchPhich failed");
-      return RFAILED;
-   }
-#ifdef LTE_TDD
-   RGSCH_INITPHICH(phich, hqFeedBack, nDmrs, rbStart, iPhich);
-#else
-   RGSCH_INITPHICH(phich, hqFeedBack, nDmrs, rbStart, isForMsg3); /*SR_RACH_STATS */
-#endif
-   cmLListAdd2Tail(&dlSf->phichInfo.phichs, &phich->lnk);
-   return ROK;
-} /* rgSCHUtlAddPhich */
-
-/**
- * @brief This function resets PHICH information for frame
- *
- * @details
- *
- *     Function: rgSCHUtlPhichReset
- *     Purpose:  This function initializes PHICH information for
- *               a slot. It removes the list of PHICHs allocated
- *               in the prior use of this slot structure.
- *
- *     Invoked by: rgSCHUtlSubFrmPut
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSubFrm*     subFrm
- *  @return  Void
- *
- **/
-static Void rgSCHUtlPhichReset(RgSchCellCb *cell,RgSchDlSf *subFrm)
-{
-   RgSchPhichInfo          *phichInfo;
-   RgSchPhich              *phich;
-
-   UNUSED(cell);
-
-   phichInfo = &subFrm->phichInfo;
-   while(phichInfo->phichs.first != NULLP)
-   {
-      phich = (RgSchPhich *)phichInfo->phichs.first->node;
-      cmLListDelFrm(&phichInfo->phichs, phichInfo->phichs.first);
-      RGSCH_PHICH_FREE(cell->instIdx, phich, sizeof(RgSchPhich));
-   }
-   cmLListInit(&phichInfo->phichs);
-   return;
-} /* rgSCHUtlPhichReset */
-
-\f
-/**
- * @brief This function returns slot data structure for a cell
- *
- * @details
- *
- *     Function: rgSCHUtlSubFrmGet
- *     Purpose:  This function resets the slot data structure
- *               when the slot is released
- *
- *     Invoked by: scheduler
- *
- *  @param[in]  RgSubFrm  subFrm
- *  @return  Void
- *
- **/
-RgSchDlSf* rgSCHUtlSubFrmGet(RgSchCellCb *cell,CmLteTimingInfo frm)
-{
-   RgSchDlSf            *sf;
-   uint8_t               dlIdx;
-
-#ifdef LTE_TDD
-   dlIdx = rgSCHUtlGetDlSfIdx(cell, &frm);
-   //RGSCH_ARRAY_BOUND_CHECK(cell->instIdx, cell->subFrms, dlIdx);
-   sf = cell->subFrms[dlIdx];
-#else
-   /* Changing the idexing
-      so that proper slot is selected */
-   dlIdx = (((frm.sfn & 1) * RGSCH_NUM_SUB_FRAMES) + (frm.slot % RGSCH_NUM_SUB_FRAMES));
-   RGSCH_ARRAY_BOUND_CHECK(cell->instIdx, cell->subFrms, dlIdx);
-   sf = cell->subFrms[dlIdx];
-#endif
-  /* CA dev Start */
-   sf->dlIdx    = dlIdx;
-  /* CA dev End */
-   return (sf);
-}
-
-\f
-/**
- * @brief This function returns slot data structure for a cell
- *
- * @details
- *
- *     Function: rgSCHUtlSubFrmPut
- *     Purpose:  This function resets the slot data structure
- *               when the slot is released
- *
- *     Invoked by: scheduler
- *
- *  @param[in]  RgSubFrm  subFrm
- *  @return  Void
- *
- **/
-Void rgSCHUtlSubFrmPut(RgSchCellCb *cell,RgSchDlSf *sf)
-{
-   uint8_t                  i;
-   uint8_t                  noRaRsps;
-
-#ifdef LTE_TDD
-   /* Release all the held PDCCH information */
-   rgSCHUtlPdcchInit(cell, sf, sf->nCce);
-#else
-   /* Release all the held PDCCH information */
-   rgSCHUtlPdcchInit(cell, sf, cell->nCce);
-#endif
-   rgSCHUtlPhichReset(cell, sf);
-
-   /* Reset the bw allocated. */
-   sf->bwAssigned = 0;
-#ifdef LTEMAC_SPS
-   /* Setting allocated bandwidth to SPS bandwidth for non-SPS RB allocator */
-   sf->bwAlloced = ((cell->spsCellCfg.maxSpsDlBw +
-      cell->rbgSize - 1)/cell->rbgSize) * cell->rbgSize;
-   if (sf->bwAlloced > sf->bw)
-   {
-      sf->bwAlloced = sf->bw;
-   }
-   sf->spsAllocdBw = 0;
-   sf->type2Start = sf->bwAlloced;
-   memset( &sf->dlSfAllocInfo, 0, sizeof(RgSchDlSfAllocInfo));
-#else
-   sf->bwAlloced = 0;
-   /* Fix for ccpu00123918*/
-   sf->type2Start = 0;
-   /* LTE_ADV_FLAG_REMOVED_START */
-   /* dsfr_pal_fixes ** 21-March-2013 ** SKS */
-   if (cell->lteAdvCb.dsfrCfg.status == RGR_ENABLE)
-   {
-      memset(sf->rntpInfo.val, 0, sf->rntpInfo.len);
-   }
-   /* LTE_ADV_FLAG_REMOVED_END */
-#endif
-   sf->txDone = FALSE;
-   /*[ccpu00138609]-ADD-Reset the CCCH UE counter */
-   sf->schdCcchUe = 0;
-
-   /* Non DLFS scheduling using Type0 RA requires the following
-    * parameter's tracking */
-   /* Type 2 localized allocations start from 0th RBG and onwards */
-   /* Type 0 allocations start from last RBG and backwards*/
-#ifndef LTEMAC_SPS
-   sf->type2End   = 0;
-#else
-   sf->type2End   = RGSCH_CEIL(sf->bwAlloced,cell->rbgSize);
-#endif
-   sf->type0End   = cell->noOfRbgs - 1;
-   /* If last RBG is of incomplete size then special handling */
-   (sf->bw % cell->rbgSize == 0)? (sf->lstRbgDfct = 0) :
-      (sf->lstRbgDfct = cell->rbgSize - (sf->bw % cell->rbgSize));
-   /* This resets the allocation for BCCH and PDCCH */
-#ifdef EMTC_ENABLE
-   /* TODO we need to move this reset for emtc functions */
-   if(!(cell->emtcEnable))
-   {
-      sf->bch.tb     = NULLP;
-      sf->bch.tbSize = 0;
-   }
-#else
-   sf->bch.tb     = NULLP;
-   sf->bch.tbSize = 0;
-#endif
-   sf->bcch.pdcch = NULLP;
-   sf->pcch.pdcch = NULLP;
-#ifdef LTE_TDD
-   noRaRsps = RGSCH_MAX_TDD_RA_RSP_ALLOC;
-#else
-   noRaRsps = RGSCH_MAX_RA_RSP_ALLOC;
-#endif
-   for (i = 0; i < noRaRsps; i++)
-   {
-      sf->raRsp[i].pdcch = NULLP;
-      cmLListInit(&(sf->raRsp[i].raRspLst));
-   }
-   /* LTE_ADV_FLAG_REMOVED_START */
-   if (cell->lteAdvCb.sfrCfg.status == RGR_ENABLE)
-   {
-      rgSCHSFRUtlTotalPoolReset(cell, sf);
-   }
-   /* LTE_ADV_FLAG_REMOVED_END */
-#ifdef LTE_ADV
-   cmLListInit(&sf->n1PucchResLst);
-#endif
-
-   sf->cceCnt = 0;
-   sf->isCceFailure = FALSE;
-   sf->dlUlBothCmplt = 0;
-   return;
-}
-
-\f
-/**
- * @brief This function computes log N (32 bit Unsigned) to the base 2
- *
- * @details
- *
- *     Function: rgSCHUtlLog32bitNbase2
- *     Purpose:  This function computes log N (32 bit Unsigned) to the base 2.
- *               For n= 0,1 ret = 0.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  uint32_t       n
- *  @return  uint8_t
- *
- **/
-uint8_t rgSCHUtlLog32bitNbase2(uint32_t n)
-{
-   uint32_t  b[] = {0x2, 0xc, 0xf0, 0xff00, 0xffff0000};
-   uint32_t  s[] = {1, 2, 4, 8, 16};
-   S16       i;
-   uint8_t   ret = 0;
-
-   for (i=4; i >= 0; i--)
-   {
-      if (n & b[i])
-      {
-         n >>= s[i];
-         ret |= s[i];
-      }
-   }
-   return (ret);
-}
-
-#ifdef LTEMAC_SPS
-
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDlRelPdcchFbk
- *     Purpose:  Calls scheduler's handler for SPS release PDCCH feedback
- *     information.
- *
- *     Invoked by: DHM
- *
- *  @param[in]   RgSchCellCb     *cell
- *  @param[in]   RgSchUeCb       *ue
- *  @param[in]   uint8_t            isAck
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlRelPdcchFbk(RgSchCellCb *cell,RgSchUeCb *ue,uint8_t isAck)
-{
-   cell->sc.apis->rgSCHDlRelPdcchFbk(cell, ue, isAck);
-   return;
-}
-
-
-
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDlProcAck
- *     Purpose:  Calls scheduler's handler to process Ack
- *     information.
- *
- *     Invoked by: DHM
- *
- *  @param[in]   RgSchCellCb     *cell
- *  @param[in]   RgSchDlHqProcCb *hqP
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlProcAck(RgSchCellCb *cell,RgSchDlHqProcCb *hqP)
-{
-   cell->sc.apis->rgSCHDlProcAck(cell, hqP);
-   return;
-}
-
-/**
- * @brief CRNTI CE Handler
- *
- * @details
- *
- *     Function : rgSCHUtlHdlCrntiCE
- *
- *     - Call scheduler common API
- *
- *
- *  @param[in]  RgSchCellCb   *cell
- *  @param[in]  RgSchUeCb     *ue
- *  @param[out] RgSchErrInfo  *err
- *  @return  Void
- **/
-Void rgSCHUtlHdlCrntiCE(RgSchCellCb  *cell,RgSchUeCb *ue)
-{
-
-   cell->sc.apis->rgSCHHdlCrntiCE(cell, ue);
-   return;
-}  /* rgSCHUtlHdlCrntiCE */
-#endif /* LTEMAC_SPS */
-
-/***********************************************************
- *
- *     Func : rgSCHUtlCalcTotalRegs
- *
- *     Desc : Calculate total REGs, given a bandwidth, CFI
- *            and number of antennas.
- *
- *     Ret  : Total REGs (uint16_t)
- *
- *     Notes: Could optimise if bw values are limited
- *            (taken from RRC spec) by indexing values from
- *            a table.
- *            Input values are not validated. CFI is assumed
- *            to be 1/2/3/4.
- *
- *     File :
- *
- **********************************************************/
-static uint16_t rgSCHUtlCalcTotalRegs(uint8_t bw,uint8_t cfi,uint8_t numAntna,Bool  isEcp)
-{
-   uint16_t regs = 0;
-
-   /*ccpu00116757-  removed check for (ERRCLASS & ERRCLS_DEBUG)*/
-
-   if (bw <= 10)
-      ++cfi;
-   switch (cfi)
-   {
-      /* Refer 36.211 section 6.10.1.2
-       * For symbols 2 and 4, the REGs per RB will be based on cyclic prefix
-       *  and number of antenna ports.
-       * For symbol 1, there are 2 REGs per RB always. Similarly symbol 3
-       * will have 3 REGS.
-       */
-      case 4:
-         /*CR changes [ccpu00124416] - MOD*/
-         if(isEcp)
-         {
-            regs =  bw * RGSCH_NUM_REGS_4TH_SYM_EXT_CP;
-         }
-         else
-         {
-            regs =  bw * RGSCH_NUM_REGS_4TH_SYM_NOR_CP;
-         }
-      case 3:
-         regs += bw * RGSCH_NUM_REGS_3RD_SYM;
-      case 2:
-            /*CR changes [ccpu00124416] - MOD using number of antenna ports*/
-         regs += (numAntna == RGSCH_NUM_ANT_PORT_FOUR) ? \
-            (bw * RGSCH_NUM_REGS_2ND_SYM_FOUR_ANT_PORT) : \
-            (bw * RGSCH_NUM_REGS_2ND_SYM_1OR2_ANT_PORT);
-      default: /* case 1 */
-         regs += bw * RGSCH_NUM_REGS_1ST_SYM;
-   }
-   return (regs);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlCalcPhichRegs
- *
- *     Desc : Calculates number of PHICH REGs
- *
- *     Ret  : Number of PHICH REGs (uint8_t)
- *
- *     Notes: ng6 is Ng multiplied by 6
- *
- *     File :
- *
- **********************************************************/
-static uint16_t rgSCHUtlCalcPhichRegs(uint8_t bw,uint8_t ng6)
-{
-   /* ccpu00115330: Corrected the calculation for number of PHICH groups*/
-   return (RGSCH_CEIL((bw * ng6) ,(8 * 6)) * RGSCH_NUM_REG_PER_PHICH_GRP);
-}
-
-#ifdef LTE_TDD
-/**
- * @brief Calculates total CCEs (N_cce)
- *
- * @details
- *
- *     Function: rgSCHUtlCalcNCce
- *     Purpose:  This function calculates and returns total CCEs for a
- *               cell, given the following: bandwidth, Ng configuration
- *               (multiplied by six), cfi (actual number of control
- *               symbols), m factor for PHICH  and number of antennas.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  uint8_t      bw
- *  @param[in]  uint8_t      ng6
- *  @param[in]  uint8_t      cfi
- *  @param[in]  uint8_t      mPhich
- *  @param[in]  uint8_t      numAntna
- *  @param[in]  Bool    isEcp
- *  @return     N_cce (uint8_t)
- *
- **/
-uint8_t rgSCHUtlCalcNCce(uint8_t bw,RgrPhichNg ng,uint8_t cfi,uint8_t mPhich,uint8_t numAntna,Bool isEcp)
-{
-   uint16_t totalRegs;
-   uint16_t phichRegs;
-   uint16_t cceRegs;
-   uint8_t  ng6;
-
-   /*ccpu00116757-  removed check for (ERRCLASS & ERRCLS_DEBUG)*/
-
-   switch (ng)
-   {
-      case RGR_NG_ONESIXTH:
-         ng6 = 1;
-         break;
-      case RGR_NG_HALF:
-         ng6 = 3;
-         break;
-      case RGR_NG_ONE:
-         ng6 = 6;
-         break;
-      case RGR_NG_TWO:
-      default:
-         ng6 = 12;
-         break;
-   }
-
-   totalRegs = rgSCHUtlCalcTotalRegs(bw, cfi, numAntna, isEcp);
-   phichRegs = rgSCHUtlCalcPhichRegs(bw, ng6);
-   cceRegs   = totalRegs - mPhich*phichRegs - RGSCH_NUM_PCFICH_REG;
-
-   return ((uint8_t)(cceRegs/RGSCH_NUM_REG_PER_CCE));
-}
-
-#else
-/**
- * @brief Calculates total CCEs (N_cce)
- *
- * @details
- *
- *     Function: rgSCHUtlCalcNCce
- *     Purpose:  This function calculates and returns total CCEs for a
- *               cell, given the following: bandwidth, Ng configuration
- *               (multiplied by six), cfi (actual number of control
- *               symbols) and number of antennas.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  uint8_t      bw
- *  @param[in]  uint8_t      ng6
- *  @param[in]  uint8_t      cfi
- *  @param[in]  uint8_t      numAntna
- *  @return     N_cce (uint8_t)
- *
- **/
-uint8_t rgSCHUtlCalcNCce(uint8_t bw,RgrPhichNg ng,uint8_t cfi,uint8_t numAntna,Bool isEcp)
-{
-   uint16_t totalRegs;
-   uint16_t phichRegs;
-   uint16_t cceRegs;
-   uint8_t  ng6;
-
-   /*ccpu00116757-  removed check for (ERRCLASS & ERRCLS_DEBUG)*/
-
-   switch (ng)
-   {
-      case RGR_NG_ONESIXTH:
-         ng6 = 1;
-         break;
-      case RGR_NG_HALF:
-         ng6 = 3;
-         break;
-      case RGR_NG_ONE:
-         ng6 = 6;
-         break;
-      case RGR_NG_TWO:
-      default:
-         ng6 = 12;
-         break;
-   }
-
-   totalRegs = rgSCHUtlCalcTotalRegs(bw, cfi, numAntna, isEcp);
-   phichRegs = rgSCHUtlCalcPhichRegs(bw, ng6);
-   cceRegs   = totalRegs - phichRegs - RGSCH_NUM_PCFICH_REG;
-
-   return ((uint8_t)(cceRegs/RGSCH_NUM_REG_PER_CCE));
-}
-#endif
-
-/**
- * @brief Returns PHICH info associated with an uplink
- *        HARQ process allocation
- *
- * @details
- *
- *     Function: rgSCHUtlGetPhichInfo
- *     Purpose:  This function returns PHICH info associated with
- *               an uplink HARQ process allocation. PHICH info
- *               comprises RB start and N_dmrs.
- *
- *  @param[in]  RgSchUlHqProcCb   *hqProc
- *  @param[out] uint8_t             *rbStartRef
- *  @param[out] uint8_t             *nDmrsRef
- *  @return  S16
- **/
-#ifdef LTE_TDD
-S16 rgSCHUtlGetPhichInfo(RgSchUlHqProcCb *hqProc,uint8_t *rbStartRef,uint8_t *nDmrsRef,uint8_t *iPhich)
-#else
-S16 rgSCHUtlGetPhichInfo(RgSchUlHqProcCb *hqProc,uint8_t *rbStartRef,uint8_t *nDmrsRef)
-#endif
-{
-/* ACC-TDD */
-       S16 ret = RFAILED;
-
-       if ((hqProc != NULLP) && (hqProc->alloc != NULLP))
-    {
-       *rbStartRef = hqProc->alloc->grnt.rbStart;
-       *nDmrsRef   = hqProc->alloc->grnt.nDmrs;
-#ifdef LTE_TDD
-   *iPhich     = hqProc->iPhich;
-#endif
-       ret = ROK;
-    }
-    return (ret);
-}
-#ifndef TFU_UPGRADE
-/**
- * @brief Returns uplink grant information required to permit
- *        PHY to receive data
- *
- * @details
- *
- *     Function: rgSCHUtlAllocRcptInfo
- *     Purpose:  Given an uplink allocation, this function returns
- *               uplink grant information which is needed by PHY to
- *               decode data sent from UE. This information includes:
- *               - RB start
- *               - Number of RBs
- *               - RV
- *
- *  @param[in]  RgSchUlAlloc   *alloc
- *  @param[out] uint8_t             *rbStartRef
- *  @param[out] uint8_t             *numRbRef
- *  @param[out] uint8_t             *rvRef
- *  @param[out] uint16_t            *size
- *  @param[out] TfuModScheme   *modType
- *  @param[out] Bool           *isRtx
- *  @param[out] uint8_t             *nDmrs
- *  @param[out] Bool           *ndi
- *  @param[out] uint8_t             *hqPId
- *  @return  S16
- **/
-S16 rgSCHUtlAllocRcptInfo
-(
-RgSchUlAlloc   *alloc,
-CmLteRnti      *rnti,
-uint8_t        *iMcsRef,
-uint8_t        *rbStartRef,
-uint8_t        *numRbRef,
-uint8_t        *rvRef,
-uint16_t       *size,
-TfuModScheme   *modType,
-Bool           *isRtx,
-uint8_t        *nDmrs,
-Bool           *ndi,
-uint8_t        *hqPId
-)
-{
-   /* Modulation order for 16qam UEs would be
-    * min(4,modulation order in grant). Please refer to 36.213-8.6.1*/
-   CmLteUeCategory ueCtgy;
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if ((alloc == NULLP) || (alloc->hqProc == NULLP))
-   {
-      return RFAILED;
-   }
-#endif
-
-   if ( !alloc->forMsg3 )
-   {
-      if ( ((alloc->ue) == NULLP) ||  (RG_SCH_CMN_GET_UE(alloc->ue, alloc->ue->cell) == NULLP))
-      {
-         DU_LOG("\nERROR  -->  SCH : Failed: ue->sch is null RNTI:%d,isRetx=%d",
-                     alloc->rnti, alloc->grnt.isRtx);
-         return RFAILED; 
-      }
-     ueCtgy =  (RG_SCH_CMN_GET_UE_CTGY(alloc->ue));
-   }
-
-   *iMcsRef    = alloc->grnt.iMcs;
-   *rbStartRef = alloc->grnt.rbStart;
-   *numRbRef   = alloc->grnt.numRb;
-   *rvRef      = rgRvTable[alloc->hqProc->rvIdx];
-   *rnti       = alloc->rnti;
-   *size       = alloc->grnt.datSz;
-   *modType    = (alloc->forMsg3)? alloc->grnt.modOdr:
-                         ((ueCtgy == CM_LTE_UE_CAT_5)?
-                         alloc->grnt.modOdr:
-                         (RGSCH_MIN(RGSCH_QM_QPSK,alloc->grnt.modOdr)));
-   *isRtx      = alloc->grnt.isRtx;
-   *nDmrs      = alloc->grnt.nDmrs;
-   *ndi        = alloc->hqProc->ndi;
-   *hqPId      = alloc->hqProc->procId;
-
-   return ROK;
-}
-#else
-/**
- * @brief Returns uplink grant information required to permit
- *        PHY to receive data
- *
- * @details
- *
- *     Function: rgSCHUtlAllocRcptInfo
- *     Purpose:  Given an uplink allocation, this function returns
- *               uplink grant information which is needed by PHY to
- *               decode data sent from UE. This information includes:
- *               - RB start
- *               - Number of RBs
- *               - RV
- *
- *  @param[in]  RgSchUlAlloc   *alloc
- *  @param[out] uint8_t             *rbStartRef
- *  @param[out] uint8_t             *numRbRef
- *  @param[out] uint8_t             *rvRef
- *  @param[out] uint16_t            *size
- *  @param[out] TfuModScheme   *modType
- *  @return  S16
- **/
-S16 rgSCHUtlAllocRcptInfo(RgSchCellCb *cell,RgSchUlAlloc *alloc,CmLteTimingInfo *timeInfo,TfuUeUlSchRecpInfo *recpReq)
-{
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if ((alloc == NULLP) || (alloc->hqProc == NULLP))
-   {
-      return RFAILED;
-   }
-#endif
-   recpReq->size           = alloc->grnt.datSz;
-   recpReq->rbStart        = alloc->grnt.rbStart;
-   recpReq->numRb          = alloc->grnt.numRb;
-   /* Modulation order min(4,mod in grant) for 16 qam UEs.
-    * Please refer to 36.213-8.6.1*/
-#ifdef FOUR_TX_ANTENNA
-   recpReq->modType        = (TfuModScheme)((alloc->forMsg3)?alloc->grnt.modOdr:
-         (/*(alloc->ue->ueCatEnum == CM_LTE_UE_CAT_5)?
-            alloc->grnt.modOdr:    *//* Chandra:TmpFx-TM500 Cat5 with Only16QAM */
-          (RGSCH_MIN(RGSCH_QM_QPSK,alloc->grnt.modOdr))));
-#else
-   recpReq->modType        = (TfuModScheme)((alloc->forMsg3)?alloc->grnt.modOdr:
-                             ((alloc->ue->ueCatEnum == CM_LTE_UE_CAT_5)?
-                              alloc->grnt.modOdr:
-                             (RGSCH_MIN(RGSCH_QM_QPSK,alloc->grnt.modOdr))));
-#endif
-   recpReq->nDmrs          = alloc->grnt.nDmrs;
-   recpReq->hoppingEnbld   = FALSE;
-   recpReq->hoppingBits    = 0;
-   recpReq->isRtx          = alloc->grnt.isRtx;
-   recpReq->ndi            = alloc->hqProc->ndi;   
-   recpReq->rv             = rgRvTable[alloc->hqProc->rvIdx];
-#ifndef LTE_TDD
-   recpReq->harqProcId = alloc->hqProc->procId;
-#else
-   recpReq->harqProcId = rgSCHCmnGetUlHqProcIdx(timeInfo, cell);
-#endif
-   /* Transmission mode is SISO till Uplink MIMO is implemented. */
-   recpReq->txMode   = 0;
-   /* This value needs to filled in in the case of frequency hopping. */
-   recpReq->crntTxNb = 0;
-
-   recpReq->mcs = alloc->grnt.iMcs;
-#ifdef RG_5GTF
-   recpReq->rbgStart = alloc->grnt.vrbgStart;
-   recpReq->numRbg = alloc->grnt.numVrbg;
-   recpReq->xPUSCHRange = alloc->grnt.xPUSCHRange;
-   //TODO_SID Need to check
-   recpReq->nAntPortLayer = 0;
-   recpReq->SCID = alloc->grnt.SCID;
-   recpReq->PMI = alloc->grnt.PMI;
-   recpReq->uciWoTBFlag = alloc->grnt.uciOnxPUSCH;
-   if(alloc->ue)
-   {
-      recpReq->beamIndex = alloc->ue->ue5gtfCb.BeamId;
-   }
-#endif
-
-#ifdef TENB_STATS
-   if (!alloc->forMsg3)
-   {
-      if (alloc->grnt.isRtx)
-      {
-         alloc->ue->tenbStats->stats.nonPersistent.sch[RG_SCH_CELLINDEX(alloc->ue->cell)].ulRetxOccns++;
-      }
-      else
-      {
-         alloc->ue->tenbStats->stats.nonPersistent.sch[RG_SCH_CELLINDEX(alloc->ue->cell)].ulTxOccns++;
-         alloc->ue->tenbStats->stats.nonPersistent.sch[RG_SCH_CELLINDEX(alloc->ue->cell)].ulSumiTbs += \
-            rgSCHCmnUlGetITbsFrmIMcs(alloc->grnt.iMcs);
-         alloc->ue->tenbStats->stats.nonPersistent.sch[RG_SCH_CELLINDEX(alloc->ue->cell)].ulNumiTbs ++;
-         cell->tenbStats->sch.ulSumiTbs += \
-            rgSCHCmnUlGetITbsFrmIMcs(alloc->grnt.iMcs);
-         cell->tenbStats->sch.ulNumiTbs ++;
-      }
-      alloc->ue->tenbStats->stats.nonPersistent.sch[RG_SCH_CELLINDEX(alloc->ue->cell)].ulPrbUsg += alloc->grnt.numRb;
-      cell->tenbStats->sch.ulPrbUsage[0] += alloc->grnt.numRb;
-   }
-#endif
-  /* ccpu00117050 - DEL - nSrs setting at rgSCHUtlAllocRcptInfo */
-   return ROK;
-}
-#endif
-
-#ifdef LTE_TDD
-/**
- * @brief This function initialises the PRACH slot occasions
- *
- * @details
- *
- *     Function: rgSCHUtlUpdPrachOcc
- *     Purpose:  This function updates the PRACH slots based on
- *               RGR configuration.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb      *cell
- *  @param[in]  RgrTddPrachInfo  *cellCfg
- *  @return     Void
- *
- **/
-static Void rgSCHUtlUpdPrachOcc(RgSchCellCb *cell,RgrTddPrachInfo *cellCfg)
-{
-   uint8_t    idx;
-   uint8_t    count = 0;
-   uint8_t    size;
-   uint8_t    startIdx;
-   uint8_t    endIdx;
-
-   /* In the 1st half frame */
-   if(cellCfg->halfFrm == 0)
-   {
-      startIdx = 2;
-      endIdx = 6;
-   }
-   /* In the 2nd half frame */
-   else
-   {
-      startIdx = 6;
-      endIdx = 10;
-   }
-   for(idx = startIdx; idx < endIdx; idx++)
-   {
-      if(rgSchTddUlDlSubfrmTbl[cell->ulDlCfgIdx][idx]
-            == RG_SCH_TDD_UL_slot)
-      {
-         if(cellCfg->ulStartSfIdx == count)
-         {
-            size = cell->rachCfg.raOccasion.size;
-            cell->rachCfg.raOccasion.slotNum[size] = idx;
-            cell->rachCfg.raOccasion.size++;
-            break;
-         }
-         count ++;
-      }
-   }
-   return;
-}
-
-/**
- * @brief This function initialises the PRACH occasions
- *
- * @details
- *
- *     Function: rgSCHUtlPrachCfgInit
- *     Purpose:  This function initialises the PRACH occasions based on
- *               RGR configuration.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb       *cell
- *  @param[in]  RgrCellCfg        *cellCfg
- *  @return     Void
- *
- **/
-Void rgSCHUtlPrachCfgInit(RgSchCellCb *cell,RgrCellCfg *cellCfg)
-{
-   uint8_t idx;
-   uint8_t subfrmIdx;
-   uint8_t splFrm;
-
-   if(cellCfg->prachRscInfo.numRsc <= 0)
-   {
-      DU_LOG("\nERROR  -->  SCH : Invalid"
-                  "PRACH resources Configuration ");
-      return;
-   }
-
-   /* Update SFN occasions */
-   cell->rachCfg.raOccasion.sfnEnum =
-                     cellCfg->prachRscInfo.prachInfo[0].sfn;
-
-   cell->rachCfg.raOccasion.size = 0;
-
-   /* Update slot occasions */
-   for(idx = 0; idx < cellCfg->prachRscInfo.numRsc; idx++)
-   {
-      if(cellCfg->prachRscInfo.prachInfo[idx].freqIdx == 0)
-      {
-         if(cellCfg->prachRscInfo.prachInfo[idx].halfFrm == 0)
-         {
-            splFrm = 1;
-         }
-         else
-         {
-            splFrm = 6;
-         }
-         if(cellCfg->prachRscInfo.prachInfo[idx].ulStartSfIdx ==
-                                                RGR_TDD_SPL_UL_IDX)
-         {
-            subfrmIdx = cell->rachCfg.raOccasion.size;
-            cell->rachCfg.raOccasion.slotNum[subfrmIdx] = splFrm;
-            cell->rachCfg.raOccasion.size++;
-         }
-         else
-         {
-            rgSCHUtlUpdPrachOcc(cell,
-                  &cellCfg->prachRscInfo.prachInfo[idx]);
-         }
-      }
-   }
-   return;
-}
-
-/**
- * @brief This function performs RGR cell initialization
- *
- * @details
- *
- *     Function: rgSCHUtlRgrCellCfg
- *     Purpose:  This function initialises the cell with RGR configuration
- *               and slot related initialization.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb       *cell
- *  @param[in]  RgrCellCfg        *cellCfg
- *  @param[in]  RgSchErrInfo      *errInfo
- *  @return     Void
- *
- **/
-S16 rgSCHUtlRgrCellCfg(RgSchCellCb *cell,RgrCellCfg *cellCfg,RgSchErrInfo *errInfo)
-{
-   uint8_t         i;
-   uint8_t         sfn=0;
-   uint8_t         sfNum = 0;
-   RgSchDlSf       *sf;
-   CmLteTimingInfo frm;
-   uint8_t         ulDlCfgIdx = cellCfg->ulDlCfgIdx;
-   uint8_t         maxslots ;
-   uint8_t         maxDlslots;
-   S16             ret = ROK;
-   uint16_t        bw;         /*!< Number of RBs in the cell */
-   
-   memset(&frm,0,sizeof(CmLteTimingInfo));
-
-   /* ccpu00132657-MOD- Determining DLSF array size independent of DELTAS */
-   maxDlslots = rgSchTddNumDlSubfrmTbl[ulDlCfgIdx][RGSCH_NUM_SUB_FRAMES-1];
-   maxslots = 2 * maxDlslots;
-   cell->numDlSubfrms = maxslots;
-/* ACC-TDD <ccpu00130639> */
-   cell->tddHqSfnCycle = -1;
-   cell->ulDlCfgIdx = ulDlCfgIdx;
-
-   /* PRACH Occasions Initialization */
-   rgSCHUtlPrachCfgInit(cell, cellCfg);
-
-   /* ccpu00132658- Moved out of below for loop since the updating rbgSize and 
-    * bw are independent of sfNum*/
-   /* determine the RBG size and no of RBGs for the configured
-    * DL BW */
-   if (cell->bwCfg.dlTotalBw > 63)
-   {
-      cell->rbgSize  = 4;
-   }
-   else if (cell->bwCfg.dlTotalBw > 26)
-   {
-      cell->rbgSize  = 3;
-   }
-   else if (cell->bwCfg.dlTotalBw > 10)
-   {
-      cell->rbgSize  = 2;
-   }
-   else
-   {
-      cell->rbgSize  = 1;
-   }
-   cell->noOfRbgs = RGSCH_CEIL(cell->bwCfg.dlTotalBw, cell->rbgSize);
-
-   bw    = cell->bwCfg.dlTotalBw;
-
-   rgSCHUtlAllocSBuf(cell->instIdx,
-               (Data **)&cell->subFrms, sizeof(RgSchDlSf *) * maxslots);
-   if (cell->subFrms == NULLP)
-   {
-      return RFAILED;
-   }
-
-   /* Create memory for each frame. */
-   for(i = 0; i < maxslots; i++)
-   {
-      while(rgSchTddUlDlSubfrmTbl[ulDlCfgIdx][sfNum] ==
-            RG_SCH_TDD_UL_slot)
-      {
-         sfNum = (sfNum+1) % RGSCH_NUM_SUB_FRAMES;
-      }
-
-      rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&sf, sizeof(RgSchDlSf));
-      if (sf == NULLP)
-      {
-         break;
-      }
-      memset(sf, 0, sizeof(*sf));
-
-#ifdef LTE_ADV
-      if (ROK != rgSCHLaaInitDlSfCb(cell, sf))
-      {
-         break;
-      }
-#endif
-      sf->sfNum = sfNum;
-      sf->bw    = bw;
-#ifdef LTEMAC_SPS
-   /* Mark SPS bandwidth to be occupied */
-   sf->bwAlloced = ((cellCfg->spsCfg.maxSpsDlBw +
-      cell->rbgSize - 1)/cell->rbgSize) * cell->rbgSize;
-   sf->spsAllocdBw = 0;
-   sf->type2End = sf->bwAlloced/cell->rbgSize;
-#else
-   sf->bwAlloced = 0;
-   /* Fix for ccpu00123918*/
-   sf->type2Start = 0;
-#endif /* LTEMAC_SPS */
-      /* Initialize the ackNakRepQ here */
-#ifdef RG_MAC_MEASGAP
-      cmLListInit (&(sf->ackNakRepQ));
-#endif
-      cell->subFrms[i] = sf;
-      sfNum = (sfNum+1) % RGSCH_NUM_SUB_FRAMES;
-   }
-   if (i != maxslots)
-   {
-      for (; i > 0; i--)
-      {
-         /* ccpu00117052 - MOD - Passing double pointer
-         for proper NULLP assignment*/
-         rgSCHUtlFreeSBuf(cell->instIdx,
-               (Data **)(&(cell->subFrms[i-1])), sizeof(RgSchDlSf));
-#ifdef LTE_ADV
-         rgSCHLaaDeInitDlSfCb(cell, sf);
-#endif
-      }
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(cell->instIdx,
-            (Data **)(&(cell->subFrms)), sizeof(RgSchDlSf *) * maxslots);
-
-      return RFAILED;
-   }
-
-   if (cell->sc.apis == NULLP)
-   {
-      cell->sc.apis = &rgSchCmnApis;
-   }
-   ret = cell->sc.apis->rgSCHRgrCellCfg(cell, cellCfg, errInfo);
-
-   if (ret != ROK)
-   {
-      /* ccpu00132286- Removed deletion of sf nodes as the deletion will be 
-       * happening during CellDelete. Added return handling to provide negative
-       * confirm*/
-      return (ret);
-   }
-
-   /* Release the slots and thereby perform the initialization */
-   for (i = 0; i < maxslots; i++)
-   {
-     if((i > 0) && (i%maxDlslots == 0))
-     {
-      sfn++;
-     }
-     frm.sfn = sfn;
-     frm.slot = cell->subFrms[i]->sfNum;
-     rgSCHUtlDlRlsSubFrm(cell, frm);
-   }
-
-   return (ret);
-}
-
-#else
-\f
-/**
- * @brief This function performs scheduler related cell creation
- *
- * @details
- *
- *     Function: rgSCHUtlRgrCellCfg
- *     Purpose:  This function creates the slots needed for the
- *               cell. It then peforms init of the scheduler by calling
- *               scheduler specific cell init function.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgrCellCfg        *cellCfg
- *  @param[in]  RgSchErrInfo         *errInfo
- *  @return     Void
- *
- **/
-S16 rgSCHUtlRgrCellCfg(RgSchCellCb *cell,RgrCellCfg *cellCfg,RgSchErrInfo *errInfo)
-{
-   uint8_t         i;
-   RgSchDlSf       *sf;
-   CmLteTimingInfo frm;
-   S16             ret;
-   Inst            inst = cell->instIdx;
-   /* LTE_ADV_FLAG_REMOVED_START */
-   uint16_t        len;
-   len = (uint16_t)((cell->bwCfg.dlTotalBw % 8 == 0) ? (cell->bwCfg.dlTotalBw/8) : (cell->bwCfg.dlTotalBw/8 + 1)); /*KW fix for LTE_ADV */
-   /* LTE_ADV_FLAG_REMOVED_END */
-
-   memset(&frm,0,sizeof(CmLteTimingInfo));
-
-   /* determine the RBG size and no of RBGs for the configured
-    * DL BW */
-   if (cell->bwCfg.dlTotalBw > 63)
-   {
-      cell->rbgSize  = 4;
-   }
-   else if (cell->bwCfg.dlTotalBw > 26)
-   {
-      cell->rbgSize  = 3;
-   }
-   else if (cell->bwCfg.dlTotalBw > 10)
-   {
-      cell->rbgSize  = 2;
-   }
-   else
-   {
-      cell->rbgSize  = 1;
-   }
-   cell->noOfRbgs = RGSCH_CEIL(cell->bwCfg.dlTotalBw, cell->rbgSize);
-   /* Create memory for each frame. */
-   /* Changing loop limit from
-      RGSCH_NUM_SUB_FRAMES to RGSCH_NUM_DL_slotS */
-   for(i = 0; i < RGSCH_NUM_DL_slotS; i++)
-   {
-      rgSCHUtlAllocSBuf(inst, (Data **)&sf, sizeof(RgSchDlSf));
-      if (sf == NULLP)
-      {
-         break;
-      }
-      memset(sf, 0, sizeof(*sf));
-
-#ifdef LTE_ADV
-      if (ROK != rgSCHLaaInitDlSfCb(cell, sf))
-      {
-         break;
-      }
-#endif
-      /* Doing MOD operation before assigning value of i */
-      sf->sfNum = i % RGSCH_NUM_SUB_FRAMES;
-      sf->bw    = cell->bwCfg.dlTotalBw;
-      /* Initialize the ackNakRepQ here */
-#ifdef RG_MAC_MEASGAP
-      cmLListInit (&(sf->ackNakRepQ));
-#endif
-      cell->subFrms[i] = sf;
-      /* LTE_ADV_FLAG_REMOVED_START */
-      if (cell->lteAdvCb.dsfrCfg.status == RGR_ENABLE)
-      {
-         /*initialize the RNTP Buffer*/
-         if(rgSchDSFRRntpInfoInit(&sf->rntpInfo, cell, sf->bw))
-         {
-            return RFAILED; 
-         }
-      }
-
-      if (cell->lteAdvCb.sfrCfg.status == RGR_ENABLE)
-      {
-         /*initialise the pools of CC and CE*/
-         if(rgSchSFRTotalPoolInit(cell, sf))
-         {
-            return RFAILED; 
-         }
-      }
-      /* LTE_ADV_FLAG_REMOVED_END */
-   }
-
-   /* LTE_ADV_FLAG_REMOVED_START */
-   /* Allocate memory for "scheduled UE" Info */
-   if (cell->lteAdvCb.dsfrCfg.status == RGR_ENABLE)
-   {    
-      if((rgSCHUtlAllocSBuf(inst, (Data**)&(cell->rntpAggrInfo.val),
-                  (len * sizeof(uint8_t)))) != ROK)
-      {
-         DU_LOG("\nERROR  -->  SCH : Memory allocation FAILED for RNTP Alloc");
-         return RFAILED;
-      }
-      cell->rntpAggrInfo.pres = PRSNT_NODEF;
-      cell->rntpAggrInfo.len  = len;
-   }     
-   /* LTE_ADV_FLAG_REMOVED_END */
-
-   /* Changing loop limit from
-      RGSCH_NUM_SUB_FRAMES to RGSCH_NUM_DL_slotS */
-   if (i != RGSCH_NUM_DL_slotS)
-   {
-      for (; i > 0; i--)
-      {
-         /* ccpu00117052 - MOD - Passing double pointer
-         for proper NULLP assignment*/
-         rgSCHUtlFreeSBuf(inst, (Data **)(&(cell->subFrms[i-1])),
-               sizeof(RgSchDlSf));
-#ifdef LTE_ADV
-         rgSCHLaaDeInitDlSfCb(cell, sf);
-#endif
-      }
-      return RFAILED;
-   }
-
-   if (cell->sc.apis == NULLP)
-   {
-      cell->sc.apis = &rgSchCmnApis;
-   }
-
-   /* Release the slots and thereby perform the initialization */
-   for (i = 0; i < RGSCH_NUM_DL_slotS; i++)
-   {
-      if (i >= RGSCH_NUM_SUB_FRAMES)
-      {
-         /* [ccpu00123828]-MOD-The below statement sfn += 1incorrectly modified
-          * the value of sfn for i>=10 thru 19. Correct way is to assign
-          it to one */
-         frm.sfn = 1;
-      }
-      frm.slot = i % RGSCH_NUM_SUB_FRAMES;
-      rgSCHUtlDlRlsSubFrm(cell, frm);
-   }
-
-   ret = cell->sc.apis->rgSCHRgrCellCfg(cell, cellCfg, errInfo);
-   if (ret != ROK)
-   {
-      errInfo->errCause = RGSCHERR_SCH_CFG;
-      return RFAILED;
-   }
-#ifdef EMTC_ENABLE
-      if(cell->emtcEnable)
-      {
-         /* TODO: Repetition framework in RGR and APP */
-         if (rgSCHUtlEmtcResMngmtInit(
-                  cell, 
-                  RGSCH_IOT_PDSCH_POOLSZ, RGSCH_IOT_PDSCH_DELTA, cellCfg->bwCfg.dlTotalBw,
-                  RGSCH_IOT_PUSCH_POOLSZ, RGSCH_IOT_PUSCH_DELTA, RGSCH_IOT_PUSCH_MAXFREQSZ,
-                  RGSCH_IOT_PUCCH_POOLSZ, RGSCH_IOT_PUCCH_DELTA, RGSCH_IOT_PUCCH_MAXFREQSZ) != ROK)
-         {
-            errInfo->errCause = RGSCHERR_SCH_CFG;
-            return RFAILED;
-         }
-      }
-#endif
-
-   return (ret);
-}
-#endif
-
-\f
-/**
- * @brief This function performs the cell reconfiguration at RGR interface
- *
- * @details
- *
- *     Function: rgSCHUtlRgrCellRecfg
- *     Purpose:  This function updates the reconfigurable parameters
- *               on the cell control block for the scheduler.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgrCellCfg        *cellCfg
- *  @param[in]  RgSchErrInfo         *errInfo
- *  @return     Void
- *
- **/
-S16 rgSCHUtlRgrCellRecfg(RgSchCellCb *cell,RgrCellRecfg *recfg,RgSchErrInfo *err)
-{
-   return (cell->sc.apis->rgSCHRgrCellRecfg(cell, recfg, err));
-}
-
-
-\f
-/**
- * @brief This function returns the Y value of UE for a sub frame
- *
- * @details
- *
- *     Function: rgSCHUtlFreeCell
- *     Purpose:  This function updates the value of Y stored in the
- *               UE control block. It uses the previously computed
- *               value for computing for this slot.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @return     Void
- *
- **/
-S16 rgSCHUtlFreeCell(RgSchCellCb  *cell)
-{
-   uint8_t          i;
-   CmLListCp        *lst;
-   RgSchPdcch       *pdcch;
-   RgSchPdcchInfo   *pdcchInfo;
-   RgSchPhichInfo   *phichInfo;
-   RgSchPhich       *phich;
-   Inst             inst = cell->instIdx;
-   uint8_t          maxslots;
-#ifdef LTE_TDD
-   RgSchRaReqInfo *raReqInfo;
-   uint8_t         idx;
-#endif
-
-#ifdef LTE_TDD
-   maxslots = cell->numDlSubfrms;
-#else
-   maxslots = RGSCH_NUM_DL_slotS;
-#endif
-
-
-   /* Invoke the index for scheduler, cell deletion */
-   cell->sc.apis->rgSCHFreeCell(cell);
-
-   /* Release the slots allocated               */
-   for (i = 0; i < maxslots; i++)
-   {
-#ifdef LTE_ADV
-      rgSCHLaaDeInitDlSfCb(cell, cell->subFrms[i]);
-#endif
-      pdcchInfo = &cell->subFrms[i]->pdcchInfo;
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(inst, (Data **)(&(pdcchInfo->map)),
-            (pdcchInfo->nCce + 7) >> 3);
-      while (pdcchInfo->pdcchs.first != NULLP)
-      {
-         pdcch = (RgSchPdcch *)pdcchInfo->pdcchs.first->node;
-         cmLListDelFrm(&pdcchInfo->pdcchs, pdcchInfo->pdcchs.first);
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-         rgSCHUtlFreeSBuf(inst, (Data **)&pdcch, sizeof(RgSchPdcch));
-      }
-
-      phichInfo = &cell->subFrms[i]->phichInfo;
-      while(phichInfo->phichs.first != NULLP)
-      {
-         phich = (RgSchPhich *)phichInfo->phichs.first->node;
-         cmLListDelFrm(&phichInfo->phichs, phichInfo->phichs.first);
-         RGSCH_PHICH_FREE(inst, phich, sizeof(RgSchPhich));
-      }
-
-      /* LTE_ADV_FLAG_REMOVED_START */
-      /*releasing SFR pool entries*/
-      rgSchSFRTotalPoolFree(&cell->subFrms[i]->sfrTotalPoolInfo, cell);
-
-      /*releasing dsfr rntp pattern info*/
-      rgSchDSFRRntpInfoFree(&cell->subFrms[i]->rntpInfo, cell, 
-                                       cell->bwCfg.dlTotalBw);
-      /* LTE_ADV_FLAG_REMOVED_END */
-
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(inst, (Data **)(&(cell->subFrms[i])), sizeof(RgSchDlSf));
-   }
-#ifdef LTE_TDD
-   /* Release the slot pointers */
-   /* ccpu00117052 - MOD - Passing double pointer
-   for proper NULLP assignment*/
-   rgSCHUtlFreeSBuf(inst,
-         (Data **) (&(cell->subFrms)), sizeof(RgSchDlSf *) * maxslots);
-
-   for(idx=0; idx < cell->raInfo.lstSize; idx++)
-   {
-      lst = &cell->raInfo.raReqLst[idx];
-      while (lst->first != NULLP)
-      {
-         raReqInfo = (RgSchRaReqInfo *)lst->first->node;
-         cmLListDelFrm(lst, &raReqInfo->raReqLstEnt);
-         /* ccpu00117052 - MOD - Passing double pointer
-         for proper NULLP assignment*/
-         rgSCHUtlFreeSBuf(inst,(Data **)&raReqInfo, sizeof(RgSchRaReqInfo));
-      }
-   }
-   /* ccpu00117052 - MOD - Passing double pointer
-   for proper NULLP assignment*/
-   rgSCHUtlFreeSBuf(inst,
-         (Data **)(&(cell->raInfo.raReqLst)),
-            sizeof(CmLListCp) * (cell->raInfo.lstSize));
-#endif
-
-   /* Release allocated pdcchs */
-   lst = &cell->pdcchLst;
-   while (lst->first != NULLP)
-   {
-      pdcch = (RgSchPdcch *)lst->first->node;
-      cmLListDelFrm(lst, &pdcch->lnk);
-#ifdef EMTC_ENABLE
-      if(cell->emtcEnable)
-      {
-         rgSCHEmtcPdcchFree(cell, pdcch);
-         rgSCHUtlEmtcResMngmtDeinit(cell);
-      }
-#endif
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(inst,(Data **)&pdcch, sizeof(RgSchPdcch));
-   }
-#ifdef LTE_ADV
-   rgSCHLaaFreeLists(cell);
-#endif
-
-   /* LTE_ADV_FLAG_REMOVED_START */
-   /* releasing RNTP Aggregation Info from CellCb*/
-   rgSchDSFRRntpInfoFree(&cell->rntpAggrInfo, cell, cell->bwCfg.dlTotalBw);
-   /* LTE_ADV_FLAG_REMOVED_END */
-
-   return ROK;
-}
-
-\f
-/**
- * @brief This function adds the UE to scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrUeCfg
- *     Purpose:  This function performs addition of UE to scheduler
- *               1. First, it updates the Y table in the UE
- *               2. Then, it calls the scheduler's handler for UE addition
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgSchUeCb            *ue
- *  @param[in]  RgrUeCfg             *cfg
- *  @param[in]  RgSchErrInfo            *err
- *  @return     S16
- *
- **/
-S16 rgSCHUtlRgrUeCfg(RgSchCellCb *cell,RgSchUeCb *ue,RgrUeCfg *cfg,RgSchErrInfo *err)
-{
-
-   /* Assign TM 1 as UE's default TM */
-   ue->mimoInfo.txMode = RGR_UE_TM_1;
-   ue->txModeTransCmplt = TRUE;
-   cmInitTimers(&ue->txModeTransTmr, 1);
-   if (cfg->txMode.pres == PRSNT_NODEF)
-   {
-      /* DL MU-MIMO not supported */
-      if (cfg->txMode.txModeEnum == RGR_UE_TM_5)
-      {
-         err->errCause = RGSCHERR_SCH_CFG;
-         return RFAILED;
-      }
-      ue->mimoInfo.txMode = cfg->txMode.txModeEnum;
-   }
-   ue->ul.ulTxAntSel = cfg->ulTxAntSel;
-   ue->mimoInfo.cdbkSbstRstrctn = cfg->ueCodeBookRstCfg;
-#ifdef TFU_UPGRADE
-   ue->ueCatEnum = cfg->ueCatEnum;
-   if ((cfg->puschDedCfg.bACKIdx > 15) ||
-       (cfg->puschDedCfg.bCQIIdx > 15) ||
-       (cfg->puschDedCfg.bRIIdx > 15))
-   {
-      err->errCause = RGSCHERR_SCH_CFG;
-      return RFAILED;
-   }
-   ue->ul.betaHqOffst = cfg->puschDedCfg.bACKIdx;
-   ue->ul.betaCqiOffst = cfg->puschDedCfg.bCQIIdx;
-   ue->ul.betaRiOffst = cfg->puschDedCfg.bRIIdx;
-#endif
-   ue->csgMmbrSta = cfg->csgMmbrSta;
-#ifdef RG_PFS_STATS
-   memset(&ue->pfsStats, 0, sizeof(RgSchPfsStats));
-#endif
-   /* Call the handler of the scheduler based on cell configuration */
-   return (cell->sc.apis->rgSCHRgrUeCfg(cell, ue, cfg, err));
-}
-/* Start : LTEMAC_2.1_DEV_CFG */
-\f
-/**
- * @brief This function adds a service to scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrLcCfg
- *     Purpose:  This function performs addition of service to scheduler
- *               The addition is performed for each direction based
- *               the direction field of the configuration
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgSchUeCb            *ue
- *  @param[in]  RgSchDlLcCb          *dlLc
- *  @param[in]  RgrLchCfg            *cfg
- *  @param[in]  RgSchErrInfo         *err
- *  @return     S16
- *
- **/
-S16 rgSCHUtlRgrLcCfg(RgSchCellCb *cell,RgSchUeCb *ue,RgSchDlLcCb *dlLc,RgrLchCfg *cfg,RgSchErrInfo *errInfo)
-{
-   return (cell->sc.apis->rgSCHRgrLchCfg(cell, ue, dlLc, cfg, errInfo));
-}
-
-\f
-/**
- * @brief This function modifies a service to scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrLcRecfg
- *     Purpose:  This function performs modification of a service in
- *               scheduler. The modification is performed for each direction
- *               based the direction field of the configuration
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgSchUeCb            *ue
- *  @param[in]  RgSchDlLcCb          *dlLc
- *  @param[in]  RgrLchRecfg          *recfg
- *  @param[in]  RgSchErrInfo         *err
- *  @return     S16
- *
- **/
-S16 rgSCHUtlRgrLcRecfg(RgSchCellCb *cell,RgSchUeCb *ue,RgSchDlLcCb *dlLc,RgrLchRecfg *recfg,RgSchErrInfo *err)
-{
-   return (cell->sc.apis->rgSCHRgrLchRecfg(cell, ue, dlLc, recfg, err));
-}
-
-/**
- * @brief This function deletes a Lc in scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrLcDel
- *     Purpose:  This function performs deletion of Lc in scheduler
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb   *cell
- *  @param[in]  RgSchUeCb     *ue
- *  @param[in]  CmLteLcId     lcId
- *  @param[in]  uint8_t            lcgId
- *  @return     S16
- *
- **/
-S16 rgSCHUtlRgrLcDel(RgSchCellCb *cell,RgSchUeCb *ue,CmLteLcId lcId,uint8_t lcgId)
-{
-   cell->sc.apis->rgSCHRgrLchDel(cell, ue, lcId, lcgId);
-
-   return  (ROK);
-} /* rgSCHUtlRgrLcDel */
-
-/**
- * @brief This function adds a service to scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrLcgCfg
- *     Purpose:  This function performs addition of service to scheduler
- *               The addition is performed for each direction based
- *               the direction field of the configuration
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgSchUeCb            *ue
- *  @param[in]  RgrLchCfg            *cfg
- *  @param[in]  RgSchErrInfo         *err
- *  @return     S16
- *
- **/
-S16 rgSCHUtlRgrLcgCfg(RgSchCellCb *cell,RgSchUeCb *ue,RgrLcgCfg *cfg,RgSchErrInfo *errInfo)
-{
-   return (cell->sc.apis->rgSCHRgrLcgCfg(cell, ue, &(ue->ul.lcgArr[cfg->ulInfo.lcgId]), cfg, errInfo));
-}
-
-\f
-/**
- * @brief This function modifies a service to scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrLcgRecfg
- *     Purpose:  This function performs modification of a service in
- *               scheduler. The modification is performed for each direction
- *               based the direction field of the configuration
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb          *cell
- *  @param[in]  RgSchUeCb            *ue
- *  @param[in]  RgrLcgRecfg          *recfg
- *  @param[in]  RgSchErrInfo         *err
- *  @return     S16
- *
- **/
-S16 rgSCHUtlRgrLcgRecfg(RgSchCellCb *cell,RgSchUeCb *ue,RgrLcgRecfg *recfg,RgSchErrInfo *err)
-{
-   return (cell->sc.apis->rgSCHRgrLcgRecfg(cell, ue, &(ue->ul.lcgArr[recfg->ulRecfg.lcgId]), recfg, err));
-} /* rgSCHUtlRgrLcRecfg */
-
-/**
- * @brief This function modifies a service to scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlRgrLcgDel
- *     Purpose:  This function performs modification of a service in
- *               scheduler. The modification is performed for each direction
- *               based the direction field of the configuration
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb   *cell
- *  @param[in]  RgSchUeCb     *ue
- *  @param[in]  RgrDel        *lcDelInfo
- *  @return     S16
- *
- **/
-Void rgSCHUtlRgrLcgDel(RgSchCellCb *cell,RgSchUeCb *ue,uint8_t lcgId)
-{
-   cell->sc.apis->rgSCHFreeLcg(cell, ue, &ue->ul.lcgArr[lcgId]);
-
-  /* Stack Crash problem for TRACE5 changes. added the return below . */
- return;
-
-} /* rgSCHUtlRgrLcgDel */
-
-
-/* End: LTEMAC_2.1_DEV_CFG */
-
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDoaInd
- *     Purpose:  Updates the DOA for the UE
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb        *cell
- *  @param[in]  RgSchUeCb          *ue
- *  @param[in]  TfuDoaRpt          *doaRpt
- *  @return  Void
- *
- **/
-Void  rgSCHUtlDoaInd(RgSchCellCb  *cell,RgSchUeCb *ue,TfuDoaRpt *doaRpt)
-{
-   ue->mimoInfo.doa.pres = PRSNT_NODEF;
-   ue->mimoInfo.doa.val = doaRpt->doa;
-   return;
-}
-\f
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDlCqiInd
- *     Purpose:  Updates the DL CQI for the UE
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb        *cell
- *  @param[in]  RgSchUeCb          *ue
- *  @param[in]  TfuDlCqiRpt        *dlCqiRpt
- *  @param[in]  CmLteTimingInfo    timingInfo
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlCqiInd(RgSchCellCb *cell,RgSchUeCb  *ue,TfuDlCqiRpt *dlCqiRpt,CmLteTimingInfo timingInfo)
-{
-   RgSchCellCb        *sCellCb = NULLP;
-   if (dlCqiRpt->isPucchInfo)
-   {
-      sCellCb = ue->cellInfo[dlCqiRpt->dlCqiInfo.pucchCqi.cellIdx]->cell;
-      sCellCb->sc.apis->rgSCHDlCqiInd(sCellCb, ue, dlCqiRpt->isPucchInfo, \
-            (Void *)&dlCqiRpt->dlCqiInfo.pucchCqi, timingInfo);
-   }
-   else
-   {
-      uint32_t idx;
-      for (idx = 0; idx < dlCqiRpt->dlCqiInfo.pusch.numOfCells; idx++)
-      {
-         sCellCb = ue->cellInfo[dlCqiRpt->dlCqiInfo.pusch.puschCqi[idx].cellIdx]->cell;
-         sCellCb->sc.apis->rgSCHDlCqiInd(sCellCb, ue, dlCqiRpt->isPucchInfo, \
-               (Void *)&dlCqiRpt->dlCqiInfo.pusch.puschCqi[idx], timingInfo);
-      }
-   }
-   return;
-}
-
-\f
-#ifdef TFU_UPGRADE
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlSrsInd
- *     Purpose:  Updates the UL SRS for the UE
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb        *cell
- *  @param[in]  RgSchUeCb          *ue
- *  @param[in]  TfuSrsRpt*     srsRpt
- *  @param[in]  CmLteTimingInfo    timingInfo
- *  @return  Void
- *
- **/
-Void rgSCHUtlSrsInd(RgSchCellCb *cell,RgSchUeCb *ue,TfuSrsRpt *srsRpt,CmLteTimingInfo timingInfo)
-{
-   cell->sc.apis->rgSCHSrsInd(cell, ue, srsRpt, timingInfo);
-   return;
-}
-#endif
-
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDlTARpt
- *     Purpose:  Reports PHY TA for a UE.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb        *cell
- *  @param[in]  RgSchUeCb          *ue
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlTARpt(RgSchCellCb *cell,RgSchUeCb *ue)
-{
-   cell->sc.apis->rgSCHDlTARpt(cell, ue);
-   return;
-}
-
-\f
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDlRlsSubFrm
- *     Purpose:  Releases scheduler Information from DL SubFrm.
- *
- *     Invoked by: DHM
- *
- *  @param[in]   RgSchCellCb     *cell
- *  @param[out]  CmLteTimingInfo subFrm
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlRlsSubFrm(RgSchCellCb *cell,CmLteTimingInfo subFrm)
-{
-   cell->sc.apis->rgSCHDlRlsSubFrm(cell, subFrm);
-   return;
-}
-
-#ifdef TFU_UPGRADE
-/**
- * @brief This API is invoked to update the AperCQI trigger
- *        weight.
- *
- * @details
- *
- *     Function : rgSCHUtlUpdACqiTrigWt
- *              - If HqFdbk is ACK then add up weight corresponding
- *                to ACK to the AcqiTrigWt.
- *              - If HqFdbk is NACK then add up weight corresponding
- *                to NACK to the AcqiTrigWt.
- *              - If AcqiTrigWt crosses threshold then trigger
- *                grant req for APERCQI to SCH.
- *
- *  @param[in]  RgSchUeCb       *ue
- *  @param[in]  uint8_t              isAck 
- *
- *  @return Void
- **/
-Void rgSCHUtlUpdACqiTrigWt(RgSchUeCb *ue,RgSchUeCellInfo *cellInfo,uint8_t isAck )
-{
-#ifdef LTE_ADV
-   uint8_t triggerSet  = 0;
-   uint8_t sIdx        = 0;
-#endif
-
-   if (isAck == TFU_HQFDB_ACK)
-   {
-      cellInfo->acqiCb.aCqiTrigWt += RG_APER_CQI_ACK_WGT;
-   }
-   else
-   {
-      cellInfo->acqiCb.aCqiTrigWt += RG_APER_CQI_NACK_WGT;
-   }
-
-   if (cellInfo->acqiCb.aCqiTrigWt > RG_APER_CQI_THRESHOLD_WGT)
-   {
-      RgSchCellCb  *cell = ue->cell;
-      RgSchErrInfo unUsed;
-
-      if(ue->dl.reqForCqi)
-      {
-         /* Already one ACQI trigger procedure is going on
-          * which is not yet satisfied. Delaying this request till
-          * the previous is getting satisfied*/
-         return;
-      }
-
-     ue->dl.reqForCqi = TRUE;
-#ifdef LTE_ADV
-      rgSchCmnSetCqiReqField(cellInfo,ue,&ue->dl.reqForCqi);
-      //Reset aCqiTrigWt for all the serving cells for which we have triggered ACQI 
-      rgSCHTomUtlGetTrigSet(cell, ue, ue->dl.reqForCqi, &triggerSet);
-      for (sIdx = 0; sIdx < CM_LTE_MAX_CELLS; sIdx++)
-      {
-         /* The Aperiodic requested for SCell index sIdx */
-         if ((triggerSet >> (7 - sIdx)) & 0x01)
-         {
-            /* The Aperiodic request for SCell index sIdx */
-            ue->cellInfo[sIdx]->acqiCb.aCqiTrigWt = 0;
-         }
-      }
-#endif
-      /* Force SCH to send UL grant by indicating fake SR.
-       * If this UE already in UL SCH Qs this SR Ind will
-       * be ignored */
-      rgSCHUtlSrRcvd(cell, ue, cell->crntTime, &unUsed);
-   }
-
-   return;
-}
-#endif
-
-/**
- * @brief This API is invoked to indicate scheduler of a CRC indication.
- *
- * @details
- *
- *     Function : rgSCHUtlHdlUlTransInd
- *      This API is invoked to indicate scheduler of a CRC indication.
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue
- *  @param[in]  CmLteTimingInfo timingInfo
- *
- *  @return Void
- **/
-Void rgSCHUtlHdlUlTransInd(RgSchCellCb *cell,RgSchUeCb *ue,CmLteTimingInfo timingInfo)
-{
-   cell->sc.apis->rgSCHHdlUlTransInd(cell, ue, timingInfo);
-   return;
-}
-#ifdef LTEMAC_SPS
-/**
- * @brief This API is invoked to indicate scheduler of a CRC failure.
- *
- * @details
- *
- *     Function : rgSCHUtlHdlCrcInd
- *      This API is invoked to indicate CRC  to scheduler.
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue
- *  @param[in]  CmLteTimingInfo timingInfo
- *
- *  @return Void
- **/
-Void rgSCHUtlHdlCrcInd(RgSchCellCb *cell,RgSchUeCb  *ue,CmLteTimingInfo timingInfo)
-{
-   cell->sc.apis->rgSCHUlCrcInd(cell, ue, timingInfo);
-   return;
-} /* end of rgSCHUtlHdlCrcFailInd */
-
-/**
- * @brief This API is invoked to indicate scheduler of a CRC failure.
- *
- * @details
- *
- *     Function : rgSCHUtlHdlCrcFailInd
- *      This API is invoked to indicate CRC failure to scheduler.
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue
- *  @param[in]  CmLteTimingInfo timingInfo
- *
- *  @return Void
- **/
-Void rgSCHUtlHdlCrcFailInd(RgSchCellCb *cell,RgSchUeCb  *ue,CmLteTimingInfo timingInfo)
-{
-   cell->sc.apis->rgSCHUlCrcFailInd(cell, ue, timingInfo);
-   return;
-} /* end of rgSCHUtlHdlCrcFailInd */
-#endif /* LTEMAC_SPS */
-
-\f
-/**
- * @brief This function is a wrapper to call scheduler specific API.
- *
- * @details
- *
- *     Function: rgSCHUtlDlProcAddToRetx
- *     Purpose:  This function adds a HARQ process to retransmission
- *               queue. This may be performed when a HARQ ack is
- *               unsuccessful.
- *
- *     Invoked by: HARQ feedback processing
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSchDlHqProc*   hqP
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlProcAddToRetx(RgSchCellCb *cell,RgSchDlHqProcCb *hqP)
-{
-   cell->sc.apis->rgSCHDlProcAddToRetx(cell, hqP);
-   return;
-}
-
-\f
-/**
- * @brief This function adds a HARQ process TB to transmission
- *
- * @details
- *
- *     Function: rgSCHUtlDlHqPTbAddToTx
- *     Purpose:  This function a HarqProcess TB to the slot
- *               list.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSubFrm*     subFrm
- *  @param[in]  RgDlHqProc*   hqP
- *  @param[in]  uint8_t            tbIdx
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlHqPTbAddToTx(RgSchDlSf *subFrm,RgSchDlHqProcCb *hqP,uint8_t tbIdx)
-{
-   RgSchUeCb *ue = NULLP;
-   RgSchCellCb *cell = hqP->hqE->cell;
-   /* CA Dev Start */
-   /* Addition of UE to dlSf->ueLst shall be done only to UE's PCell */
-   /* ue->cell will always hold PCell information */
-   if (NULLP == hqP->hqPSfLnk.node)
-   {
-      if (hqP->hqE->ue)
-      {
-         ue = hqP->hqE->ue;
-         if(NULLP == ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].dlSfUeLnk.node)
-         {
-            ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].dlSfUeLnk.node = (PTR)ue;
-            cmLListAdd2Tail(&cell->subFrms[subFrm->dlIdx]->ueLst, 
-                  &ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].dlSfUeLnk);
-
-            ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].isPuschHarqRecpPres = FALSE;
-
-         }
-
-         /* Add Hq proc in particular dlIdx List for this UE 
-            This list will be used while processing feedback*/
-         hqP->hqPSfLnk.node = (PTR)hqP;
-         cmLListAdd2Tail(&ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].hqPLst,&hqP->hqPSfLnk); 
-#ifdef CA_DBG
-         {
-            uint32_t gSCellSchedCount,gPrimarySchedCount;
-            if(RG_SCH_IS_CELL_SEC(hqP->hqE->ue,hqP->hqE->cell))
-            {
-               gSCellSchedCount++;
-            }else
-               gPrimarySchedCount++;
-         }
-#endif
-      }
-      else if (hqP->hqE->msg4Proc == hqP)
-      {
-         /* Msg4 will be scheduled on PCELL only hence add directly to subFrm msg4HqpList */
-         hqP->hqPSfLnk.node = (PTR)hqP;
-         cmLListAdd2Tail(&subFrm->msg4HqPLst, &hqP->hqPSfLnk);
-      }
-   }
-   else
-   {
-      ue = hqP->hqE->ue; 
-   }
-   if((ue) && (HQ_TB_WAITING == hqP->tbInfo[tbIdx].state))
-         
-   {   
-      ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].totalTbCnt++;
-   }
-   /*totalTbCnt will hold the total number of TBs across all harq Proc from all 
-    * cells*/
-
-   hqP->subFrm = subFrm; 
-
-   /* CA Dev End */
-   return;
-}
-
-
-\f
-/**
- * @brief This function removes a HARQ process TB from transmission
- *
- * @details
- *
- *     Function: rgSCHUtlDlHqPTbRmvFrmTx
- *     Purpose:  This function removes a HarqProcess TB to the slot
- *               list.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSubFrm*     subFrm
- *  @param[in]  RgDlHqProc*   hqP
- *  @param[in]  uint8_t            tbIdx
- *  @param[in]  Bool          isRepeting
- *  @return  Void
- *
- **/
-Void rgSCHUtlDlHqPTbRmvFrmTx(RgSchDlSf *subFrm,RgSchDlHqProcCb  *hqP,uint8_t tbIdx,Bool isRepeting)
-{
-   RgSchCellCb *cell = NULLP;
-   /* Check with TDD */
-   if ((isRepeting) &&
-         (hqP->hqE->ue->ackNakRepCb.cfgRepCnt !=
-          hqP->tbInfo[tbIdx].fbkRepCntr))
-   {
-      cmLListDelFrm(&subFrm->ackNakRepQ,
-         &hqP->tbInfo[tbIdx].anRepLnk[hqP->tbInfo[tbIdx].fbkRepCntr]);
-   }
-   else
-   {
-      if (NULLP != hqP->hqPSfLnk.node)
-      {
-         /* CA dev Start */
-         if (hqP->hqE->msg4Proc == hqP)
-         {
-            /* Msg4 will be scheduled on PCELL only hence delete directly from subFrm msg4HqpList */
-            cmLListDelFrm(&subFrm->msg4HqPLst, &hqP->hqPSfLnk); 
-         }
-         else
-         {
-            cell = hqP->hqE->cell;
-            /* Addition of UE to dlSf->ueLst shall be done only to UE's PCell */
-            /* ue->cell will always hold PCell information */
-            cmLListDelFrm(&hqP->hqE->ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].hqPLst,&hqP->hqPSfLnk); 
-            if (0 == hqP->hqE->ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].hqPLst.count)
-            {
-
-               cmLListDelFrm(&cell->subFrms[subFrm->dlIdx]->ueLst, 
-                     &hqP->hqE->ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].dlSfUeLnk);
-               hqP->hqE->ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].dlSfUeLnk.node = (PTR)NULLP;
-               hqP->hqE->ue->dl.dlSfHqInfo[cell->cellId][subFrm->dlIdx].totalTbCnt = 0;
-            }
-         }
-         hqP->hqPSfLnk.node = NULLP;
-      }
-      hqP->subFrm = NULLP;
-   }
-   return;
-}
-
-#ifdef LTE_ADV
-/**
- * @brief Handler for accessing the existing SCellCb identified by the key
- * SCellId under the CellCb.
- *
- * @details
- *
- *     Function : rgSchUtlGetCellCb
- *     
- *           
- *  @param[in]  *cellCb
- *  @param[in]  ueId
- *  @return  RgSchUeCb*
- **/
-RgSchCellCb* rgSchUtlGetCellCb(Inst inst,uint16_t cellId)
-{
-   RgSchCellCb  *cellCb = NULLP; 
-   uint8_t      strtCellId;
-   strtCellId = rgSchCb[inst].genCfg.startCellId;
-   cellCb     = rgSchCb[inst].cells[cellId - strtCellId];
-
-   return (cellCb);
-
-}  /* rgSchUtlGetCellCb */
-
-/**
- * @brief Handler for deriving the servCellidx
- *
- * @details
- *
- *     Function : rgSchUtlGetServCellIdx
- *     
- *           
- *  @param[in]  *cellId
- *  @param[in]  RgSchUeCb *ue
- *  @return   uint8_t servCellIdx
- **/
-uint8_t rgSchUtlGetServCellIdx(Inst inst, uint16_t cellId, RgSchUeCb *ue)
-{
-   uint8_t servCellIdx;
-   uint16_t strtCellId;
-
-   strtCellId = rgSchCb[inst].genCfg.startCellId;
-   servCellIdx = ue->cellIdToCellIdxMap[cellId - strtCellId];
-   return (servCellIdx);
-
-}  /* rgSchUtlGetCellCb */
-
-/**
- * @brief Handler for validating the Cell Id received secondary Cell Addition
- *
- * @details
- *
- *     Function : rgSchUtlGetCellId
- *     
- *           
- *  @param[in]  *cellCb
- *  @param[in]  ueId
- *  @return  RgSchUeCb*
- **/
-S16 rgSchUtlVldtCellId(Inst inst,uint16_t cellId)
-{
-   uint8_t              strtCellId;
-
-   strtCellId = rgSchCb[inst].genCfg.startCellId;
-   if((cellId >= strtCellId) && ((cellId - strtCellId) < CM_LTE_MAX_CELLS))
-   {
-      return ROK;
-   }
-   return RFAILED;
-}  /* rgSchUtlVldtCellId */
-
-#endif /* LTE_ADV*/
-/**
- * @brief UE reconfiguration for scheduler
- *
- * @details
- *
- *     Function : rgSCHUtlRgrUeRecfg
- *
- *     This functions updates UE specific scheduler
- *     information upon UE reconfiguration
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[int] RgrUeRecfg   *ueRecfg
- *  @param[out] RgSchErrInfo *err
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrUeRecfg(RgSchCellCb *cell,RgSchUeCb *ue,RgrUeRecfg *ueRecfg,RgSchErrInfo *err)
-{
-/* Changes for UE Category Reconfiguration feature addition */
-   RgSchCmnUe    *ueSch = RG_SCH_CMN_GET_UE(ue, cell);
-
-   /* Changes for UE Category Reconfiguration feature addition */
-   if (ueRecfg->ueRecfgTypes & RGR_UE_UECAT_RECFG)
-   {
-      ueSch->cmn.ueCat = ueRecfg->ueCatEnum-1;
-#ifdef TFU_UPGRADE
-      ue->ueCatEnum = ueRecfg->ueCatEnum;
-#endif
-   } 
-
-   /* DL MU-MIMO not supported */
-   if (ueRecfg->ueRecfgTypes & RGR_UE_TXMODE_RECFG)
-   {
-
-      if (ueRecfg->txMode.pres == PRSNT_NODEF)
-      {
-         if (ueRecfg->txMode.txModeEnum == RGR_UE_TM_5)
-         {
-            err->errCause = RGSCHERR_SCH_CFG;
-            return RFAILED;
-         }
-#ifdef LTE_ADV
-        if(ue->mimoInfo.txMode != ueRecfg->txMode.txModeEnum)
-         {
-            /* Decremnt the previos A value for this cell */
-            ue->f1bCsAVal -= rgSCHUtlGetMaxTbSupp(ue->mimoInfo.txMode);
-            /* Update A value with the new TM Mode */
-            ue->f1bCsAVal += rgSCHUtlGetMaxTbSupp(ueRecfg->txMode.txModeEnum);
-
-
-            DU_LOG("\nINFO  -->  SCH : UeReCfg A valie is %d\n",ue->f1bCsAVal);
-         }
-#endif
-         ue->mimoInfo.txMode = ueRecfg->txMode.txModeEnum;
-      }
-   }
-#ifdef TFU_UPGRADE
-   /* [ccpu00123958]-ADD- Check for PUSCH related Reconfig from the bit mask  */
-    if(ueRecfg->ueRecfgTypes & RGR_UE_PUSCH_RECFG)
-    {
-       /* Fix: ccpu00124012 */
-       /* TODO:: Need to check if this is 
-          mandatory to be re-configured on UE category re-configuration */
-       /* ue->ul.betaHqOffst = ueRecfg->puschDedCfg.bACKIdx;
-          ue->ul.betaCqiOffst = ueRecfg->puschDedCfg.bCQIIdx;
-          ue->ul.betaRiOffst = ueRecfg->puschDedCfg.bRIIdx;*/
-    }
-#endif
-   if (ueRecfg->ueRecfgTypes & RGR_UE_ULTXANTSEL_RECFG)
-   {
-      ue->ul.ulTxAntSel = ueRecfg->ulTxAntSel;
-   }
-   if (ueRecfg->ueRecfgTypes & RGR_UE_CDBKSBST_RECFG)
-   {
-      ue->mimoInfo.cdbkSbstRstrctn = ueRecfg->ueCodeBookRstRecfg;
-   }
-
-   /* Commenting here to assign garbage value when it is not set in APP. */
-   //ue->accessStratumRls = ueRecfg->accessStratumRls;
-   return (cell->sc.apis->rgSCHRgrUeRecfg(cell, ue, ueRecfg, err));
-}  /* rgSCHUtlRgrUeRecfg */
-
-/**
- * @brief This function deletes a service from scheduler
- *
- * @details
- *
- *     Function: rgSCHUtlFreeDlLc
- *     Purpose:  This function is made available through a FP for
- *               making scheduler aware of a service being deleted from UE
- *
- *     Invoked by: BO and Scheduler
- *
- *  @param[in]  RgSchCellCb*  cell
- *  @param[in]  RgSchUeCb*    ue
- *  @param[in]  RgSchDlLcCb*  svc
- *  @return  Void
- **/
-Void rgSCHUtlFreeDlLc(RgSchCellCb *cell,RgSchUeCb *ue,RgSchDlLcCb  *svc)
-{
-   cell->sc.apis->rgSCHFreeDlLc(cell, ue, svc);
-
-  /* Stack Crash problem for TRACE5 changes. added the return below . */
- return;
-
-}
-
-/**
- * @brief UE deletion for scheduler
- *
- * @details
- *
- *     Function : rgSCHUtlFreeUe
- *
- *     This functions deletes all scheduler information
- *     pertaining to a UE
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @return  Void
- **/
-Void rgSCHUtlFreeUe(RgSchCellCb *cell,RgSchUeCb *ue)
-{
-#ifdef LTE_TDD
-   rgSCHUtlDelUeANFdbkInfo(ue,RGSCH_PCELL_INDEX);
-#endif
-   cell->sc.apis->rgSCHFreeUe(cell, ue);
-
-  /* Stack Crash problem for TRACE5 changes. added the return below . */
- return;
-
-}  /* rgSCHUtlFreeUe */
-
-/**
- * @brief This function updates the scheduler with service for a UE
- *
- * @details
- *
- *     Function: rgSCHUtlDlDedBoUpd
- *     Purpose:  This function should be called whenever there is a
- *               change BO for a service.
- *
- *     Invoked by: BO and Scheduler
- *
- *  @param[in]  RgSchCellCb*  cell
- *  @param[in]  RgSchUeCb*    ue
- *  @param[in]  RgSchDlLcCb*  lc
- *  @return  Void
- **/
-Void rgSCHUtlDlDedBoUpd(RgSchCellCb *cell,RgSchUeCb *ue,RgSchDlLcCb *lc)
-{
-   cell->sc.apis->rgSCHDlDedBoUpd(cell, ue, lc);
-   return;
-}
-/**
- * @brief Record MSG3 allocation into the UE
- *
- * @details
- *
- *     Function : rgSCHUtlRecMsg3Alloc
- *
- *     This function is invoked to update record msg3 allocation information
- *    in the UE when UE is detected for RaCb
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue
- *  @param[in] RgSchRaCb       *raCb
- *
- **/
-Void rgSCHUtlRecMsg3Alloc(RgSchCellCb *cell,RgSchUeCb *ue,RgSchRaCb *raCb)
-{
-   cell->sc.apis->rgSCHUlRecMsg3Alloc(cell, ue, raCb);
-   return;
-
-}  /* rgSCHRecMsg3Alloc */
-
-#ifdef RG_UNUSED
-/**
- * @brief Update harq process for allocation
- *
- * @details
- *
- *     Function : rgSCHUtlUpdUlHqProc
- *
- *     This function is invoked when harq process
- *     control block is now in a new memory location
- *     thus requiring a pointer/reference update.
- *
- *  @param[in] RgSchCellCb      *cell
- *  @param[in] RgSchUlHqProcCb  *curProc
- *  @param[in] RgSchUlHqProcCb  *oldProc
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlUpdUlHqProc(RgSchCellCb *cell,RgSchUlHqProcCb  *curProc,RgSchUlHqProcCb  *oldProc)
-{
-   return (cell->sc.apis->rgSCHUpdUlHqProc(cell, curProc, oldProc));
-}  /* rgSCHUtlUpdUlHqProc */
-#endif
-/**
- * @brief UL grant for contention resolution
- *
- * @details
- *
- *     Function : rgSCHUtlContResUlGrant
- *
- *     Add UE to another queue specifically for CRNTI based contention
- *     resolution
- *
- *  @param[in]  RgSchCellCb *cell
- *  @param[in]  RgSchUeCb  *ue
- *  @param[out] RgSchErrInfo *err
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlContResUlGrant(RgSchCellCb *cell,RgSchUeCb *ue,RgSchErrInfo *err)
-{
-
-   ue->isMsg4PdcchWithCrnti = TRUE; 
-   return (cell->sc.apis->rgSCHContResUlGrant(cell, ue, err));
-}  /* rgSCHUtlContResUlGrant */
-
-/**
- * @brief SR reception handling
- *
- * @details
- *
- *     Function : rgSCHUtlSrRcvd
- *
- *     - Handles SR reception for UE
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[out] RgSchErrInfo *err
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlSrRcvd(RgSchCellCb  *cell,RgSchUeCb *ue,CmLteTimingInfo frm,RgSchErrInfo *err)
-{
-   return (cell->sc.apis->rgSCHSrRcvd(cell, ue, frm, err));
-}  /* rgSCHUtlSrRcvd */
-
-/**
- * @brief Short BSR update
- *
- * @details
- *
- *     Function : rgSCHUtlUpdBsrShort
- *
- *     This functions does requisite updates to handle short BSR reporting
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[in]  uint8_t           lcgId
- *  @param[in]  uint8_t           bsr
- *  @param[out] RgSchErrInfo *err
- *  @return  Void
- *      -# ROK
- *      -# RFAILED
- **/
-Void rgSCHUtlUpdBsrShort(RgSchCellCb *cell,RgSchUeCb *ue,uint8_t lcgId,uint8_t bsr,RgSchErrInfo *err)
-{
-   cell->sc.apis->rgSCHUpdBsrShort(cell, ue, &ue->ul.lcgArr[lcgId], bsr, err);
-   return;
-}  /* rgSCHUtlUpdBsrShort */
-
-
-/**
- * @brief Truncated BSR update
- *
- * @details
- *
- *     Function : rgSCHUtlUpdBsrTrunc
- *
- *     This functions does required updates to handle truncated BSR report
- *
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[in]  uint8_t           lcgId
- *  @param[in]  uint8_t           bsr
- *  @param[out] RgSchErrInfo *err
- *  @return  Void
- *      -# ROK
- *      -# RFAILED
- **/
-Void rgSCHUtlUpdBsrTrunc(RgSchCellCb *cell,RgSchUeCb *ue,uint8_t  lcgId,uint8_t bsr,RgSchErrInfo *err)
-{
-   cell->sc.apis->rgSCHUpdBsrTrunc(cell, ue, &ue->ul.lcgArr[lcgId], bsr, err);
-   return; 
-}  /* rgSCHUtlUpdBsrTrunc */
-
-
-/**
- * @brief Long BSR update
- *
- * @details
- *
- *     Function : rgSCHUtlUpdBsrLong
- *
- *     - Update BSRs for all configured LCGs
- *     - Update priority of LCGs if needed
- *     - Update UE's position within/across uplink scheduling queues
- *
- *
- *  @param[in]  RgSchCellCb   *cell
- *  @param[in]  RgSchUeCb     *ue
- *  @param[in]  uint8_t            bsr0
- *  @param[in]  uint8_t            bsr1
- *  @param[in]  uint8_t            bsr2
- *  @param[in]  uint8_t            bsr3
- *  @param[out] RgSchErrInfo  *err
- *  @return  Void
- *      -# ROK
- *      -# RFAILED
- **/
-Void rgSCHUtlUpdBsrLong(RgSchCellCb *cell,RgSchUeCb *ue,uint8_t bsr0,uint8_t bsr1,uint8_t bsr2,uint8_t bsr3,RgSchErrInfo *err)
-{
-   uint8_t bsArr[4];
-   bsArr[0] = bsr0;
-   bsArr[1] = bsr1;
-   bsArr[2] = bsr2;
-   bsArr[3] = bsr3;
-   cell->sc.apis->rgSCHUpdBsrLong(cell, ue, bsArr, err);
-   return;
-}  /* rgSCHUtlUpdBsrLong */
-
-/**
- * @brief EXT PHR update
- *
- * @details
- *
- *     Function : rgSCHUtlUpdExtPhr
- *
- *     Updates extended power headroom info for a UE
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[in]  uint8_t           phr
- *  @param[out] RgSchErrInfo *err
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlUpdExtPhr(RgSchCellCb *cell,RgSchUeCb *ue,RgInfExtPhrCEInfo *extPhr,RgSchErrInfo *err)
-{
-   return (cell->sc.apis->rgSCHUpdExtPhr(cell, ue, extPhr, err));
-}  /* rgSCHUtlUpdExtPhr */
-
-
-
-/**
- * @brief PHR update
- *
- * @details
- *
- *     Function : rgSCHUtlUpdPhr
- *
- *     Updates power headroom info for a UE
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[in]  uint8_t           phr
- *  @param[out] RgSchErrInfo *err
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlUpdPhr(RgSchCellCb *cell,RgSchUeCb *ue,uint8_t phr,RgSchErrInfo *err)
-{
-   return (cell->sc.apis->rgSCHUpdPhr(cell, ue, phr, err));
-}  /* rgSCHUtlUpdPhr */
-
-
-/**
- * @brief Indication of UL CQI
- *
- * @details
- *
- *     Function : rgSCHUtlUlCqiInd
- *
- *     - Updates uplink CQI information for the UE. Computes and
- *       stores the lowest CQI of CQIs reported in all subbands
- *
- *  @param[in]  RgSchCellCb         *cell
- *  @param[in]  RgSchUeCb           *ue
- *  @param[in]  TfuUlCqiRpt         *ulCqiInfo
- *  @return  Void
- **/
-Void rgSCHUtlUlCqiInd(RgSchCellCb *cell,RgSchUeCb *ue,TfuUlCqiRpt *ulCqiInfo)
-{
-   cell->sc.apis->rgSCHUlCqiInd(cell, ue, ulCqiInfo);
-   return;
-}  /* rgSCHUtlUlCqiInd */
-
-/**
- * @brief Indication of PUCCH power adjustment
- *
- * @details
- *
- *     Function : rgSCHUtlPucchDeltaPwrInd
- *
- *     - Updates uplink CQI information for the UE. Computes and
- *       stores the lowest CQI of CQIs reported in all subbands
- *
- *  @param[in]  RgSchCellCb         *cell
- *  @param[in]  RgSchUeCb           *ue
- *  @param[in]  uint8_t                  delta
- *  @return  Void
- **/
-Void rgSCHUtlPucchDeltaPwrInd(RgSchCellCb *cell,RgSchUeCb *ue,S8 delta)
-{
-   cell->sc.apis->rgSCHPucchDeltaPwrInd(cell, ue, delta);
-   return;
-}  /* rgSCHUtlPucchDeltaPwrInd */
-
-/* Start: LTEMAC_2.1_DEV_CFG */
-/**
- * @brief Ue Reset Request
- *
- * @details
- *
- *     Function : rgSCHUtlUeReset
- *
- *
- *  @param[in]  RgSchCellCb         *cell
- *  @param[in]  RgSchUeCb           *ue
- *  @return  S16
- **/
-Void rgSCHUtlUeReset(RgSchCellCb *cell,RgSchUeCb *ue)
-{
-   ue->remBoCnt = 0;
-   cell->sc.apis->rgSCHUeReset(cell, ue);
-   return;
-}  /* rgSCHUtlUeReset */
-/* End: LTEMAC_2.1_DEV_CFG */
-
-/**
- * @brief Returns HARQ proc for which data expected now
- *
- * @details
- *
- *     Function: rgSCHUtlUlHqProcForUe
- *     Purpose:  This function returns the harq process for
- *               which data is expected in the current slot.
- *               It does not validate if the HARQ process
- *               has an allocation.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb         *cell
- *  @param[in]  CmLteTimingInfo     frm
- *  @param[in]  RgSchUeCb           *ue
- *  @param[out] RgSchUlHqProcCb     **procRef
- *  @return  Void
- **/
-Void rgSCHUtlUlHqProcForUe(RgSchCellCb *cell,CmLteTimingInfo frm,RgSchUeCb *ue,RgSchUlHqProcCb **procRef)
-{
-   cell->sc.apis->rgSCHUlHqProcForUe(cell, frm, ue, procRef);
-
- /* Stack Crash problems for TRACE5 changes. added the return below */
- return;
-
-}
-
-/**
- * @brief Returns first uplink allocation to send reception
- *        request to PHY
- *
- * @details
- *
- *     Function: rgSCHUtlFirstRcptnReq(cell)
- *     Purpose:  This function returns the first uplink allocation
- *               (or NULLP if there is none) in the slot
- *               in which is expected to prepare and send reception
- *               request to PHY.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb      *cell
- *  @return  RgSchUlAlloc*
- **/
-RgSchUlAlloc *rgSCHUtlFirstRcptnReq(RgSchCellCb *cell)
-{
-   return (cell->sc.apis->rgSCHFirstRcptnReq(cell));
-}
-
-/**
- * @brief Returns first uplink allocation to send reception
- *        request to PHY
- *
- * @details
- *
- *     Function: rgSCHUtlNextRcptnReq(cell)
- *     Purpose:  This function returns the next uplink allocation
- *               (or NULLP if there is none) in the slot
- *               in which is expected to prepare and send reception
- *               request to PHY.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb      *cell
- *  @return  RgSchUlAlloc*
- **/
-RgSchUlAlloc *rgSCHUtlNextRcptnReq(RgSchCellCb *cell,RgSchUlAlloc *alloc)
-{
-   return (cell->sc.apis->rgSCHNextRcptnReq(cell, alloc));
-}
-
-/**
- * @brief Returns first uplink allocation to send HARQ feedback
- *        request to PHY
- *
- * @details
- *
- *     Function: rgSCHUtlFirstHqFdbkAlloc
- *     Purpose:  This function returns the first uplink allocation
- *               (or NULLP if there is none) in the slot
- *               in which it is expected to prepare and send HARQ
- *               feedback to PHY.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb      *cell
- *  @param[in]  uint8_t                idx  
- *  @return  RgSchUlAlloc*
- **/
-RgSchUlAlloc *rgSCHUtlFirstHqFdbkAlloc(RgSchCellCb *cell,uint8_t idx)
-{
-   return (cell->sc.apis->rgSCHFirstHqFdbkAlloc(cell, idx));
-}
-
-\f
-/**
- * @brief Returns next allocation to send HARQ feedback for
- *
- * @details
- *
- *     Function: rgSCHUtlNextHqFdbkAlloc(cell)
- *     Purpose:  This function returns the next uplink allocation
- *               (or NULLP if there is none) in the slot
- *               for which HARQ feedback needs to be sent.
- *
- *     Invoked by: TOM
- *
- *  @param[in]  RgSchCellCb      *cell
- *  @return  RgSchUlAlloc*
- **/
-RgSchUlAlloc *rgSCHUtlNextHqFdbkAlloc(RgSchCellCb *cell,RgSchUlAlloc *alloc,uint8_t idx)
-{
-   return (cell->sc.apis->rgSCHNextHqFdbkAlloc(cell, alloc, idx));
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlResetSfAlloc
- *
- *     Desc : Utility Function to Reset slot allocation information.
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlResetSfAlloc(RgInfSfAlloc *sfAlloc,Bool resetCmnLcInfo,Bool restAlloc)
-{
-   if(TRUE == restAlloc)
-   {
-      if(sfAlloc->ueInfo.numUes)
-      {
-         memset(sfAlloc->ueInfo.allocInfo,0x00,
-               (sizeof(RgInfUeAlloc)*sfAlloc->ueInfo.numUes));
-      }
-      sfAlloc->ueInfo.numUes = 0;
-      sfAlloc->rarInfo.numRaRntis = 0;
-      sfAlloc->flowCntrlInfo.numUes = 0;
-   }
-   if(TRUE == resetCmnLcInfo)
-   {
-      sfAlloc->cmnLcInfo.bitMask = 0;
-   }
-   return ROK;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlGetRlsHqAlloc
- *
- *     Desc : Utility Function to Allocate slot allocation information.
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlGetRlsHqAlloc(RgSchCellCb *cell)
-{
-   uint8_t    idx = 0;
-   Inst  inst = cell->instIdx;
-   for(idx=0; idx < RGSCH_NUM_SUB_FRAMES; idx++)
-   {
-      cell->rlsHqArr[idx].cellId = cell->cellId;
-
-      /* Allocating with additional location, to accommodate
-         TA scheduling along with maximum no of UEs per SF */
-
-      /* Allocate memory for "scheduled UE" Info */
-      if((rgSCHUtlAllocSBuf(inst,
-                     (Data**)&(cell->rlsHqArr[idx].ueHqInfo),
-                      (sizeof(RgInfUeHqInfo)*RGSCH_MAX_UE_PER_DL_SF))) != ROK)
-      {
-         DU_LOG("\nERROR  -->  SCH : Memory allocation FAILED for "
-            "UE Alloc");
-         return RFAILED;
-      }
-   }
-
-   return ROK;
-
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlPutRlsHqAlloc
- *
- *     Desc : Utility Function to deallocate slot allocation information.
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlPutRlsHqAlloc(RgSchCellCb *cell)
-{
-   uint8_t    idx = 0;
-   Inst  inst = cell->instIdx;
-
-   for(idx=0; idx < RGSCH_NUM_SUB_FRAMES; idx++)
-   {
-      /* Deallocate memory for "scheduled UE" Info */
-      if (cell->rlsHqArr[idx].ueHqInfo != NULLP)
-      {
-         /* Freeing with additional location, to accommodate TA
-            scheduling along with maximum no of UEs per SF */
-         /* ccpu00117052 - MOD - Passing double pointer
-            for proper NULLP assignment*/
-         rgSCHUtlFreeSBuf(inst,
-               (Data **)(&(cell->rlsHqArr[idx].ueHqInfo)),
-             (sizeof(RgInfUeHqInfo)*RGSCH_MAX_UE_PER_DL_SF));
-      }
-   }
-
-   return ROK;
-
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlGetSfAlloc
- *
- *     Desc : Utility Function to Allocate slot allocation information.
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlGetSfAlloc(RgSchCellCb *cell)
-{
-   uint8_t    idx;
-   uint8_t    indx;
-   Inst  inst = cell->instIdx;
-   RgSchCmnUlCell *cellUl      = RG_SCH_CMN_GET_UL_CELL(cell);
-
-#ifdef LTE_TDD
-   for(idx=0; idx < RGSCH_SF_ALLOC_SIZE; idx++)
-#else
-   for(idx=0; idx < RGSCH_NUM_SUB_FRAMES; idx++)
-#endif
-   {
-      cell->sfAllocArr[idx].cellId = cell->cellId;
-
-      /* Allocating with additional location, to accommodate
-         TA scheduling along with maximum no of UEs per SF */
-
-      /* Allocate memory for "scheduled UE" Info */
-      if((rgSCHUtlAllocSBuf(inst,
-                     (Data**)&(cell->sfAllocArr[idx].ueInfo.allocInfo),
-                      (sizeof(RgInfUeAlloc)*RGSCH_MAX_UE_PER_DL_SF))) != ROK)
-      {
-         DU_LOG("\nERROR  -->  SCH : Memory allocation FAILED for "
-            "UE Alloc");
-         return RFAILED;
-      }
-
-      /* Allocate memory for "scheduled RAR" Info */
-      if((rgSCHUtlAllocSBuf(inst,
-                     (Data**)&(cell->sfAllocArr[idx].rarInfo.raRntiInfo),
-                      (sizeof(RgInfRaRntiInfo)*RGSCH_MAX_RARNTI_PER_DL_SF))) != ROK)
-      {
-         DU_LOG("\nERROR  -->  SCH : Memory allocation FAILED for "
-            "RARNTI");
-         return RFAILED;
-      }
-      for(indx = 0; indx < RGSCH_MAX_RARNTI_PER_DL_SF; indx++)
-      {
-         if((rgSCHUtlAllocSBuf(inst,
-            (Data**)&(cell->sfAllocArr[idx].rarInfo.raRntiInfo[indx].crntiInfo),
-                   (sizeof(RgInfCrntiInfo)* (cellUl->maxMsg3PerUlSf)))) != ROK)
-         {
-            DU_LOG("\nERROR  -->  SCH : Memory allocation FAILED for "
-               "RNTI");
-            return RFAILED;
-         }
-      }
-
-   }
-
-#ifdef EMTC_ENABLE
-   rgSCHEmtcUtlGetSfAlloc(cell);
-#endif
-
-   return ROK;
-
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlPutSfAlloc
- *
- *     Desc : Utility Function to deallocate slot allocation information.
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlPutSfAlloc(RgSchCellCb *cell)
-{
-   uint8_t    idx;
-   uint8_t    indx;
-   Inst  inst = cell->instIdx;
-   RgSchCmnUlCell *cellUl      = RG_SCH_CMN_GET_UL_CELL(cell);
-
-#ifdef LTE_TDD
-   for(idx=0; idx < RGSCH_SF_ALLOC_SIZE; idx++)
-#else
-      for(idx=0; idx < RGSCH_NUM_SUB_FRAMES; idx++)
-#endif
-      {
-         if (cell->sfAllocArr[idx].rarInfo.raRntiInfo != NULLP)
-         {
-            for(indx = 0; indx < RGSCH_MAX_RARNTI_PER_DL_SF; indx++)
-            {
-               if (cell->sfAllocArr[idx].rarInfo.raRntiInfo[indx].crntiInfo != NULLP)
-                  /* ccpu00117052 - MOD - Passing double pointer
-                     for proper NULLP assignment*/
-                  rgSCHUtlFreeSBuf(inst,
-                        (Data**)(&(cell->sfAllocArr[idx].rarInfo.raRntiInfo[indx].\
-                              crntiInfo)),
-                        (sizeof(RgInfCrntiInfo)* (cellUl->maxMsg3PerUlSf)));
-            }
-            /* Deallocate memory for "scheduled RAR" Info */
-            /* ccpu00117052 - MOD - Passing double pointer
-               for proper NULLP assignment*/
-            rgSCHUtlFreeSBuf(inst,
-                  (Data**)(&(cell->sfAllocArr[idx].rarInfo.raRntiInfo)),
-                  (sizeof(RgInfRaRntiInfo)*RGSCH_MAX_RARNTI_PER_DL_SF));
-         }
-         /* Deallocate memory for "scheduled UE" Info */
-         if (cell->sfAllocArr[idx].ueInfo.allocInfo != NULLP)
-         {
-            /* Freeing with additional location, to accommodate TA
-               scheduling along with maximum no of UEs per SF */
-            /* ccpu00117052 - MOD - Passing double pointer
-               for proper NULLP assignment*/
-            rgSCHUtlFreeSBuf(inst,
-                  (Data**)(&(cell->sfAllocArr[idx].ueInfo.allocInfo)),
-                  (sizeof(RgInfUeAlloc)*RGSCH_MAX_UE_PER_DL_SF));
-         }
-      }
-
-#ifdef EMTC_ENABLE
-   rgSCHEmtcUtlPutSfAlloc(cell);
-#endif
-   return ROK;
-
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlAllocSBuf
- *
- *     Desc : Utility Function to Allocate static buffer.
- *            Memory allocated is assumed contiguous.
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *     Notes: Caller doesnt need to raise the alarm in case of memory
- *            allocation gets failed.
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlAllocSBuf
-(
-Inst    inst,               /* Instance of the invoking scheduler */
-Data    **pData,            /* Pointer of the data to be returned */
-Size    size                /* size */
-)
-{
-   /* Moving alarm diagnostics to available scope */
-
-   /* Initialize the param to NULLP */
-   *pData = NULLP;
-
-   /* May not be necessary for data performance path */
-#ifndef NO_ERRCLS
-   if (size == 0)
-   {
-      return RFAILED;
-   }
-#endif
-
-   /* allocate buffer */
-#ifdef MS_MBUF_CORRUPTION /* Should be enabled when debugging mbuf corruption */
-   MS_BUF_ADD_ALLOC_CALLER();
-#endif /* */
-   SCH_ALLOC(pData, size);
-   if(pData == NULLP)
-   {
-     RgUstaDgn dgn;      /* Alarm diagnostics structure */
-     dgn.type = LRG_USTA_DGNVAL_MEM;
-     dgn.u.mem.region = rgSchCb[inst].rgSchInit.region;
-     dgn.u.mem.pool = rgSchCb[inst].rgSchInit.pool;
-     /*  Send an alarm to Layer Manager */
-     rgSCHLmmStaInd(inst, LCM_CATEGORY_RESOURCE, LCM_EVENT_SMEM_ALLOC_FAIL,
-                                       LCM_CAUSE_MEM_ALLOC_FAIL, &dgn);
-     DU_LOG("\nERROR  -->  SCH : Unable to Allocate the Buffer");
-     return RFAILED;
-   }
-
-
-   /* zero out the allocated memory */
-   memset(*pData, 0x00, size);
-
-   return ROK;
-
-} /* end of rgSCHUtlAllocSBuf */
-
-\f
-/*
-*
-*       Fun:   rgSCHUtlFreeSBuf
-*
-*       Desc:  The argument to rgSCHUtlFreeSBuf() is a pointer to a block
-*              previously allocated by rgSCHUtlAllocSBuf() and size. It
-*              deallocates the memory.
-*
-*       Ret:   void
-*
-*       Notes: None
-*       File:  rg_utl.c
-*/
-Void rgSCHUtlFreeSBuf
-(
-Inst inst,          /* Instance of the invoking scheduler */
-Data **data,         /* pointer to data */
-Size size           /* size */
-)
-{
-
-   if ((data == NULLP) || (*data == NULLP) || (size == 0))
-   {
-      return;
-   }
-
-
-#ifdef MS_MBUF_CORRUPTION /* Should be enabled when debugging mbuf corruption */
-   MS_BUF_ADD_CALLER();
-#endif /* */
-   /* Deallocate buffer */
-   SCH_FREE((*data), size);
-
-   if (data ==NULLP)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlFreeSBuf failed");
-      return;
-   }
-
-   /* ccpu00117052 - ADD - Assigning the pointer to NULLP */
-   *data = NULLP;
-
-   return;
-} /* end of rgSCHUtlFreeSBuf */
-
-\f
-#ifdef RGR_SI_SCH
-/*
-*
-*       Fun:   rgSCHUtlFreeWarningSiSeg
-*
-*       Desc:  This is used to deallocate Warning SI Seg.
-*
-*       Ret:   void
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*/
-Void rgSCHUtlFreeWarningSiSeg(Region reg,Pool pool,CmLListCp *siPduLst)
-{
-   CmLList      *node;
-   Buffer       *pdu;
-
-   while (siPduLst->first != NULLP)
-   {
-      node = siPduLst->first;
-      pdu = (Buffer *)node->node;
-      cmLListDelFrm(siPduLst, node);
-      RGSCH_FREE_MSG(pdu);
-      SCH_FREE(node,sizeof(CmLList));
-      node = NULLP;
-   }
-
-   return;
-} /* end of rgSCHUtlFreeWarningSiSeg */         
-
-\f
-/*
-*
-*       Fun:   rgSCHUtlFreeWarningSiPdu
-*
-*       Desc:  This is used to deallocate Warning SI PDU.
-*
-*       Ret:   void
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*/
-Void rgSCHUtlFreeWarningSiPdu(RgSchCellCb  *cell)
-{
-   CmLList            *node;
-   Buffer             *pdu;
-   RgSchWarningSiInfo *warningSi;
-   RgSchWarningSiPdu  *warningSiPdu; 
-
-   warningSi = (RgSchWarningSiInfo *) cell->siCb.\
-                  siArray[cell->siCb.siCtx.siId-1].si; 
-   /* ccpu00136659: CMAS ETWS design changes */
-   CM_LLIST_FIRST_NODE(&warningSi->warningSiMsg.segLstCp, node);
-   if (node == NULLP)
-   {
-      return;
-   }
-
-   warningSiPdu = (RgSchWarningSiPdu *)node->node;
-   pdu = warningSiPdu->pdu;
-   /* ccpu00136659: CMAS ETWS design changes */
-   cmLListDelFrm(&warningSi->warningSiMsg.segLstCp, node); 
-   RGSCH_FREE_MSG(pdu);
-   if(warningSi->warningSiMsg.segLstCp.count == 0)
-   {
-      /* ccpu00136659: CMAS ETWS design changes */
-      cell->siCb.siArray[cell->siCb.siCtx.siId-1].si = NULLP;
-      rgSCHUtlRgrWarningSiCfgCfm(cell->instIdx,
-            rgSchCb[cell->instIdx].rgrSap->sapCfg.spId,
-            cell->siCb.warningSi[warningSi->idx].siId,
-            warningSi->warningSiMsg.transId, RGR_CFG_CFM_TX_COMPLETE);
-   }                                                                                 
-
-   return;
-
-} /* end of rgSCHUtlFreeWarningSiPdu */         
-\f
-/*
-*
-*       Fun:   rgSCHUtlGetWarningSiPdu
-*
-*       Desc:  This is used to get Warning SI PDU for Scheduling. 
-*
-*       Ret:   
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*/
-Buffer *rgSCHUtlGetWarningSiPdu(RgSchCellCb *cell)
-{
-   RgSchWarningSiInfo  *warningSi;
-   RgSchWarningSiPdu  *warningSiPdu; 
-   Buffer       *pdu;
-   CmLList      *node;
-
-   warningSi = (RgSchWarningSiInfo *) cell->siCb.
-   siArray[cell->siCb.siCtx.siId-1].si; 
-   /* ccpu00136659: CMAS ETWS design changes */
-   CM_LLIST_FIRST_NODE(&warningSi->warningSiMsg.segLstCp, node);
-   if (node != NULLP)
-   {
-      warningSiPdu = (RgSchWarningSiPdu *)node->node;
-      pdu = warningSiPdu->pdu;
-      return (pdu);
-   }
-   else
-   {
-      return (NULLP);
-   }                                                  
-} /* rgSCHUtlGetWarningSiPdu  */    
-
-\f
-/*
-*
-*       Fun:   rgSCHUtlGetMcsAndNPrb
-*
-*       Desc:  This is used to get mcs and nPrb value. 
-*
-*       Ret:   
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*/
-S16 rgSCHUtlGetMcsAndNPrb(RgSchCellCb *cell,uint8_t *nPrb,uint8_t *mcs,MsgLen  *msgLen)
-{
-   RgSchWarningSiInfo  *warningSi;
-   RgSchWarningSiPdu  *warningSiPdu; 
-   CmLList      *node;
-
-   if(cell->siCb.siCtx.warningSiFlag == FALSE)
-   {
-      *mcs =  cell->siCb.crntSiInfo.siInfo[cell->siCb.siCtx.siId-1].mcs;
-      *nPrb =  cell->siCb.crntSiInfo.siInfo[cell->siCb.siCtx.siId-1].nPrb;
-      *msgLen = cell->siCb.crntSiInfo.siInfo[cell->siCb.siCtx.siId-1].msgLen;
-   }
-   else
-   {
-      warningSi = (RgSchWarningSiInfo *) cell->siCb.
-            siArray[cell->siCb.siCtx.siId-1].si; 
-      /* ccpu00136659: CMAS ETWS design changes */
-      CM_LLIST_FIRST_NODE(&warningSi->warningSiMsg.segLstCp, node);
-      if (node == NULLP)
-      {
-        return RFAILED;
-      }
-      
-      warningSiPdu = (RgSchWarningSiPdu *)node->node;
-      *mcs = warningSiPdu->mcs;
-      *nPrb = warningSiPdu->nPrb;
-      *msgLen = warningSiPdu->msgLen;
-      return ROK;
-            
-   }
-   return ROK;
-} /* rgSCHUtlGetMcsAndNPrb  */     
-
-/*
-*
-*       Fun:   rgSCHUtlCalMacAndPrb
-*
-*       Desc:  This is used to Calculate mcs and nPrb value for SIB1 and SIs. 
-*
-*       Ret:   
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*/
-S16 rgSCHUtlCalMcsAndNPrb(RgSchCellCb *cell,uint8_t cfgType,MsgLen msgLen,uint8_t siId)
-{
-   uint8_t mcs = 0;
-   uint8_t nPrb = 0;
-
-      /*Get the nPrb and mcs parametr values */
-   if (rgSCHUtlGetAllwdCchTbSz(msgLen*8, &nPrb, &mcs) != (msgLen*8))
-      {
-         DU_LOG("\nERROR  -->  SCH : msgLen does "
-            "not match any valid TB Size");
-         return RFAILED;
-      }
-
-
-   if(cfgType == RGR_SI_CFG_TYPE_SIB1 || cfgType == RGR_SI_CFG_TYPE_SIB1_PWS)
-   {
-
-      if(cell->siCb.crntSiInfo.sib1Info.sib1 == NULLP)
-      {
-         cell->siCb.crntSiInfo.sib1Info.mcs = mcs;
-         cell->siCb.crntSiInfo.sib1Info.nPrb = nPrb;
-         cell->siCb.crntSiInfo.sib1Info.msgLen = msgLen;
-      }
-      else
-      {
-         cell->siCb.newSiInfo.sib1Info.mcs = mcs;
-         cell->siCb.newSiInfo.sib1Info.nPrb= nPrb;
-         cell->siCb.newSiInfo.sib1Info.msgLen = msgLen;
-      }
-   }
-
-    
-   if(cfgType == RGR_SI_CFG_TYPE_SI)
-   {
-      if(cell->siCb.crntSiInfo.siInfo[siId-1].si == NULLP &&
-         !(cell->siCb.siBitMask & RGSCH_SI_SICFG_UPD))
-      {
-         cell->siCb.crntSiInfo.siInfo[siId-1].mcs = mcs;
-         cell->siCb.crntSiInfo.siInfo[siId-1].nPrb = nPrb;
-         cell->siCb.crntSiInfo.siInfo[siId-1].msgLen = msgLen;
-      }
-      else
-      {
-         cell->siCb.newSiInfo.siInfo[siId-1].mcs = mcs;
-         cell->siCb.newSiInfo.siInfo[siId-1].nPrb= nPrb;
-         cell->siCb.newSiInfo.siInfo[siId-1].msgLen = msgLen;
-      }
-   }
-
-   if(cfgType == RGR_SI_CFG_TYPE_SIB8_CDMA)
-   {
-      cell->siCb.crntSiInfo.siInfo[siId-1].mcs = mcs;
-      cell->siCb.crntSiInfo.siInfo[siId-1].nPrb = nPrb;
-      cell->siCb.crntSiInfo.siInfo[siId-1].msgLen = msgLen;
-   }
-
-    return ROK;
-}
-#endif
-
-/***********************************************************
- *
- *     Func : rgSCHUtlFillDgnParams
- *
- *     Desc : Utility Function to Fill Diagonostic params.
- *
- *     Ret  : None.
- *
- *     Notes: None.
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-Void rgSCHUtlFillDgnParams(Inst inst,RgUstaDgn *dgn,uint8_t dgnType)
-{
-
-   switch(dgnType)
-   {
-      case LRG_USTA_DGNVAL_MEM:
-         dgn->type = (uint8_t) LRG_USTA_DGNVAL_MEM;
-         dgn->u.mem.region  = rgSchCb[inst].rgSchInit.region;
-         dgn->u.mem.pool    = rgSchCb[inst].rgSchInit.pool;
-      break;
-
-      default:
-      break;
-   }
-
-   return;
-} /* end of rgSCHUtlFillDgnParams */
-
-/***********************************************************
- *
- *     Func : rgSCHUtlGetPstToLyr
- *
- *     Desc : Utility Function to get the pst structure to post a message to MAC
- *
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *     Notes: This function should be called while sending a msg from
- *     scheduler instance to MAC
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-Void rgSCHUtlGetPstToLyr(Pst  *pst,RgSchCb *schCb,Inst macInst)
-{
-
-   /* Only the needed params are filled */
-   pst->region = schCb->rgSchInit.region;
-   pst->pool = schCb->rgSchInit.pool;
-   pst->srcInst = schCb->rgSchInit.inst+SCH_INST_START;
-   pst->srcProcId = schCb->rgSchInit.procId;
-   pst->dstProcId = schCb->rgSchInit.procId;
-
-   pst->dstInst = macInst;
-   pst->dstEnt = ENTMAC;
-   pst->srcEnt = ENTMAC;
-   pst->selector = 0;
-   pst->prior     = PRIOR0;
-   pst->intfVer   = 0;
-   pst->route   = RTESPEC;
-
-   return;
-} /* end of rgSCHUtlGetPstToLyr */
-
-/** @brief This function fills in the common lc information to be sent to MAC
- *
- * @details
- *
- *     Function: rgSCHUtlFillRgInfCmnLcInfo
- *       @param  RgSchDlSf       *sf,
- *       @param  RgInfSfAlloc    *sfAlloc,
- *       @param  CmLteLcId       lcId,
- *       @param  Bool            sendInd
- *
- * @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlFillRgInfCmnLcInfo(RgSchDlSf  *sf,RgInfSfAlloc *sfAlloc,CmLteLcId lcId,Bool sendInd)
-{
-
-   if((sf->bch.tbSize)&&
-      !(sfAlloc->cmnLcInfo.bitMask & RGINF_BCH_INFO))
-   {
-#ifndef RGR_SI_SCH
-      sfAlloc->cmnLcInfo.bchInfo.lcId = lcId;
-#endif
-      sfAlloc->cmnLcInfo.bitMask |= RGINF_BCH_INFO;
-   }
-   else if((sf->bcch.pdcch != NULLP)&&
-      !(sfAlloc->cmnLcInfo.bitMask & RGINF_BCCH_INFO))
-   {
-      sfAlloc->cmnLcInfo.bcchInfo.rnti = RGSCH_SI_RNTI;
-      rgSCHUtlFillPdschDciInfo(&(sfAlloc->cmnLcInfo.bcchInfo.dciInfo),
-                                       &(sf->bcch.pdcch->dci));
-#ifndef RGR_SI_SCH
-      sfAlloc->cmnLcInfo.bcchInfo.lcId = lcId;
-      sfAlloc->cmnLcInfo.bcchInfo.sndStatInd = sendInd;
-#endif
-      sfAlloc->cmnLcInfo.bitMask |= RGINF_BCCH_INFO;
-   }
-   else if((sf->pcch.pdcch != NULLP) &&
-      !(sfAlloc->cmnLcInfo.bitMask & RGINF_PCCH_INFO))
-   {
-      sfAlloc->cmnLcInfo.pcchInfo.rnti = RGSCH_P_RNTI;
-      rgSCHUtlFillPdschDciInfo(&(sfAlloc->cmnLcInfo.pcchInfo.dciInfo),
-                                         &(sf->pcch.pdcch->dci));
-      sfAlloc->cmnLcInfo.pcchInfo.lcId = lcId;
-      sfAlloc->cmnLcInfo.bitMask |= RGINF_PCCH_INFO;
-   }
-   return ROK;
-}
-
-/** @brief This function fills in the RAR information to be sent to MAC
- *
- * @details
- *
- *     Function: rgSCHUtlFillRgInfRarInfo
- *
- * @param  RgSchCellCb  *cell 
- * @param  RgSchDlSf    *sf 
- * @param  RgInfSfAlloc *sfAlloc
- * @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlFillRgInfRarInfo(RgSchDlSf *sf,RgInfSfAlloc *sfAlloc,RgSchCellCb *cell)
-{
-   uint8_t          idx;
-   CmLListCp        *lnkLst;
-   CmLList          *tmp;
-   RgSchRaCb        *raCb;
-   RgSchUeCb        *ue;
-   RgInfRaRntiInfo  *raRntiAlloc;
-   uint8_t          noRaRsps;
-   RgSchCmnDlCell   *cellDl = RG_SCH_CMN_GET_DL_CELL(cell);
-
-#ifdef LTE_TDD
-   noRaRsps = RGSCH_MAX_TDD_RA_RSP_ALLOC;
-#else
-   noRaRsps = RGSCH_MAX_RA_RSP_ALLOC;
-#endif
-
-   for(idx =0; idx < noRaRsps; idx++)
-   {
-      if (sf->raRsp[idx].pdcch == NULLP)
-      {
-         /* No further raResp Allocations. */
-         break;
-      }
-      /* Added Dl TB count for RACH Response transmission*/
-#ifdef LTE_L2_MEAS
-      cell->dlUlTbCnt.tbTransDlTotalCnt++;
-#endif      
-      raRntiAlloc = &(sfAlloc->rarInfo.raRntiInfo[idx]);
-      raRntiAlloc->raRnti = sf->raRsp[idx].raRnti;
-      raRntiAlloc->schdTbSz = sf->raRsp[idx].tbSz;
-      raRntiAlloc->numCrnti = 0;
-      rgSCHUtlFillPdschDciInfo(&(raRntiAlloc->dciInfo),
-                      &(sf->raRsp[idx].pdcch->dci));
-      /* RACHO : fill backoff indicator information */
-      raRntiAlloc->backOffInd = sf->raRsp[idx].backOffInd;
-
-      /* Fill for contention free UEs*/
-      lnkLst = &(sf->raRsp[idx].contFreeUeLst);
-      CM_LLIST_FIRST_NODE(lnkLst, tmp);
-      while (tmp)
-      {
-         ue = (RgSchUeCb *)tmp->node;
-         tmp = tmp->next;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].tmpCrnti = ue->ueId;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].isContFree = TRUE;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].rapId = ue->ul.rarGrnt.rapId;
-#ifndef MAC_5GTF_UPDATE
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.hop =
-                                                        ue->ul.rarGrnt.hop;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.cqiBit =
-                                                        ue->ul.rarGrnt.cqiReqBit;
-#endif
-         /* SHASHAHNK ADD RIV CALC */
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.rbStart =
-                                                        ue->ul.rarGrnt.rbStart;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.numRb =
-                                                        ue->ul.rarGrnt.numRb;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.tpc =
-                                                        ue->ul.rarGrnt.tpc;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.iMcsCrnt =
-                                                        ue->ul.rarGrnt.iMcsCrnt;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].ta = ue->ul.rarGrnt.ta;
-         raRntiAlloc->numCrnti++;
-         cmLListDelFrm(lnkLst, &ue->ul.rarGrnt.raRspLnk);
-         ue->ul.rarGrnt.raRspLnk.node = (PTR)NULLP;
-      }
-      /* Fill for contention based UEs*/
-      lnkLst = &(sf->raRsp[idx].raRspLst);
-
-      CM_LLIST_FIRST_NODE(lnkLst, tmp);
-
-      while((NULLP != tmp) && ((RgSchRaCb *)tmp->node != NULLP))
-      {
-         raCb     = (RgSchRaCb *)tmp->node;
-
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].tmpCrnti = raCb->tmpCrnti;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].isContFree = FALSE;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].rapId = raCb->rapId;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].ta.pres = TRUE;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].ta.val = raCb->ta.val;
-#ifndef MAC_5GTF_UPDATE
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.hop =
-                                                        raCb->msg3Grnt.hop;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.cqiBit = FALSE;
-#endif
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.rbStart =
-                                                        raCb->msg3Grnt.rbStart;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.numRb =
-                                                        raCb->msg3Grnt.numRb;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.tpc =
-                                                        raCb->msg3Grnt.tpc;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.iMcsCrnt =
-                                                        raCb->msg3Grnt.iMcsCrnt;
-         raRntiAlloc->crntiInfo[raRntiAlloc->numCrnti].grnt.delayBit =
-                                                        raCb->msg3Grnt.delayBit;
-         /* For initial attaching UEs Aperiodic CQI need not be triggered */
-         raRntiAlloc->numCrnti++;
-         /* Search the next node */
-         CM_LLIST_NEXT_NODE(lnkLst, tmp);
-      }
-   }
-   sfAlloc->rarInfo.numRaRntis = idx;
-   /* ccpu00132314-ADD-Update the tx power allocation info  
-      TODO-Need to add a check for max tx power per symbol */
-   sfAlloc->rarInfo.txPwrOffset = cellDl->rarTxPwrOffset;
-
-   return ROK;
-} /* end of rgSCHUtlFillRgInfRarInfo */
-
-/** @brief This function fills in the pdsch data related allocation Info
- *         from the pdcch DCI info.
- * slot
- *
- * @details
- *
- *     Function: rgSCHUtlFillPdschDciInfo
- *
- *         Processing steps:
- *         - Depending upon the DCI Format, fill the appropriate fields.
- *
- * @param  [out] TfuPdschDciInfo *pdschDci
- * @param  [in]  TfuDciInfo      *pdcchDci
- * @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlFillPdschDciInfo(TfuPdschDciInfo *pdsch,TfuDciInfo *pdcchDci)
-{
-
-#ifdef EMTC_ENABLE
-  S16 ret = ROK; 
-#endif
-   pdsch->format = pdcchDci->dciFormat;
-   switch(pdcchDci->dciFormat)
-   {
-      case TFU_DCI_FORMAT_1:
-         pdsch->u.format1AllocInfo = pdcchDci->u.format1Info.allocInfo;
-         break;
-      case TFU_DCI_FORMAT_1A:
-         if (pdcchDci->u.format1aInfo.isPdcchOrder == FALSE)
-         {
-            pdsch->u.format1aAllocInfo = pdcchDci->u.format1aInfo.t.pdschInfo.allocInfo;
-         }
-         break;
-      case TFU_DCI_FORMAT_1B:
-         pdsch->u.format1bAllocInfo = pdcchDci->u.format1bInfo.allocInfo;
-         break;
-      case TFU_DCI_FORMAT_1C:
-         pdsch->u.format1cAllocInfo = pdcchDci->u.format1cInfo;
-         break;
-      case TFU_DCI_FORMAT_1D:
-         pdsch->u.format1dAllocInfo = pdcchDci->u.format1dInfo.allocInfo;
-         break;
-      case TFU_DCI_FORMAT_2:
-         pdsch->u.format2AllocInfo = pdcchDci->u.format2Info.allocInfo;
-         break;
-      case TFU_DCI_FORMAT_2A:
-         pdsch->u.format2AAllocInfo = pdcchDci->u.format2AInfo.allocInfo;
-         break;
-#ifdef RG_5GTF
-               case TFU_DCI_FORMAT_B1:
-         pdsch->u.formatB1Info = pdcchDci->u.formatB1Info;
-         break;
-      case TFU_DCI_FORMAT_B2:
-         pdsch->u.formatB2Info = pdcchDci->u.formatB2Info;
-         break;
-#endif
-      default:
-#ifdef EMTC_ENABLE
- ret = rgSCHEmtcUtlFillPdschDciInfo(pdsch, pdcchDci);
- if(RFAILED == ret)
- {
-      return RFAILED;
-        }
-#else  
-        return RFAILED;
-#endif
-   }
-   return ROK;
-}
-
-/* LTE_ADV_FLAG_REMOVED_START */
-/**
- * @brief This function resets temporary variables in Pool
- * @details
- *
- *     Function: rgSchSFRResetPoolVariables
- *
- *     Invoked by: rgSCHSFRUtlTotalPoolInit
- *
- *  @param[in]  RgSchCellCb*     cell
- *  @param[in]  RgSubFrm*     subFrm
- *  @return  Void
- *
- **/
-Void rgSchDSFRPwrCheck(RgSchDlSf *sf,Bool *isAllUePwrHigh)
-{     
-   RgSchSFRPoolInfo *sfrCCPool;
-
-   CmLListCp   *l;
-   CmLList     *n;   
-
-   l = &sf->sfrTotalPoolInfo.ccPool;    
-   n = cmLListFirst(l);
-   while(n)
-   {    
-      sfrCCPool = (RgSchSFRPoolInfo*)n->node;
-      if((sfrCCPool->poolstartRB == sfrCCPool->pwrHiCCRange.startRb) &&
-            (sfrCCPool->poolendRB == sfrCCPool->pwrHiCCRange.endRb))
-      {
-         n = cmLListNext(l);
-         if(n)
-         {
-            continue;
-         }
-         *isAllUePwrHigh = TRUE;
-         break;
-      }
-      else
-         break;   
-   } 
-}
-/* LTE_ADV_FLAG_REMOVED_END */
-/***********************************************************
- *
- *     Func : rgSCHUtlFillRgInfTbInfo
- *
- *     Desc : Utility Function to fill the allocation info of each Tb
- *
- *
- *     Ret  :  void
- *
- *
- *     Notes: This function should be called while sending a msg from
- *     scheduler instance to MAC
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-static Void rgSCHUtlFillRgInfTbInfo(RgSchDlHqProcCb *hqP,RgInfUeAlloc *allocInfo,RgSchCellCb *cell)
-{
-   RgSchDlSf       *sf;
-   uint8_t         idx;
-   RgInfUeTbInfo   *tbInfo;
-   uint8_t         tbCnt;
-   /* LTE_ADV_FLAG_REMOVED_START */
-#ifdef TFU_UPGRADE
-   static          uint32_t  tmpCnt = 0;
-   Bool            isAllUePwrHigh = FALSE;
-#endif 
-   /* LTE_ADV_FLAG_REMOVED_END */
-   RgSchDlLcCb    *dlLcCb = NULLP;
-   uint16_t       rlcHdrEstmt;
-   uint8_t        lcId;
-   /* RRM_RBC_X */
-#ifdef LTE_L2_MEAS
-   uint8_t        prbUsed = 0;
-#endif
-   /* RRM_RBC_Y */
-
-   CmLteTimingInfo        frm;
-
-   /* Get Downlink slot */
-   frm   = cell->crntTime;
-   RGSCH_INCR_SUB_FRAME(frm, RG_SCH_CMN_DL_DELTA);
-   sf = rgSCHUtlSubFrmGet(cell, frm);
-   /* Setting of fillCtrlPdu flag
-      If both P-cell and S-cell are present,
-      make TRUE for P-cell and FALSE for all s-cells
-      For all other cases set TRUE */
-#ifdef LTE_ADV
-   if ((rgSchCb[cell->instIdx].genCfg.forceCntrlSrbBoOnPCel) &&
-         !RG_SCH_CMN_IS_PCELL_HQP(hqP))
-   {
-      allocInfo->fillCtrlPdu = FALSE;
-   }
-   else
-   {
-      allocInfo->fillCtrlPdu = TRUE;
-   }
-#endif
-
-   allocInfo->tbStrtIdx = -1;
-
-
-#ifdef LTE_ADV
-   allocInfo->tbReqInfo.sCellHqPId = 0xff;
-   rgSCHLaaHndlFillRgInfTbInfo(cell, hqP, allocInfo);
-#endif
-
-   /*TODO:REEMA: Check and fill the isRetx */
-   for(tbCnt = 0; tbCnt < 2; tbCnt++)
-   {
-      RgSchUeCb  *ue = NULLP;
-      /*Changed as a result of CR timer*/
-      if ((hqP->hqE->ue != NULLP)/* &&
-      ((hqP->tbInfo[tbCnt].lchSchdData[0].lcId != 0) || \
-       (hqP->tbInfo[tbCnt].schdTa.pres == PRSNT_NODEF))*/)
-      {
-         ue = hqP->hqE->ue;
-         allocInfo->rnti = ue->ueId;
-         allocInfo->doa = hqP->hqE->ue->mimoInfo.doa;
-         allocInfo->txMode = (TfuTxMode)(hqP->hqE->ue->mimoInfo.txMode);
-         allocInfo->puschRptUsd = hqP->hqE->ue->mimoInfo.puschFdbkVld;
-         allocInfo->puschPmiInfo = hqP->hqE->ue->mimoInfo.puschPmiInfo;
-         if(hqP->tbInfo[tbCnt].schdTa.pres == PRSNT_NODEF)
-         {
-            hqP->tbInfo[tbCnt].taSnt = TRUE;
-         }
-#ifdef TFU_UPGRADE
-         if (RG_SCH_IS_PAPRSNT(ue,hqP->hqE->cell))
-         {
-            /*update pA value */
-            allocInfo->pa = (RG_SCH_CMN_GET_PA(ue,hqP->hqE->cell)).val;
-         }
-#endif
-
-         /* LTE_ADV_FLAG_REMOVED_START */
-         /* If ABS is enabled, calculate resource used */
-         if((0 == tbCnt) && (RGR_ENABLE == ue->cell->lteAdvCb.absCfg.status))
-         {
-            /* For Macro count number resource used in Non-ABS SF */
-            if(RGR_ABS_MUTE == ue->cell->lteAdvCb.absCfg.absPatternType)
-            {
-               if(RG_SCH_ABS_ENABLED_NONABS_SF == ue->cell->lteAdvCb.absDlSfInfo)
-               {
-                  ue->cell->lteAdvCb.absLoadInfo[ue->cell->lteAdvCb.absPatternDlIdx]+=
-                     hqP->tbInfo[tbCnt].dlGrnt.numRb;
-               }
-            }
-            /* For pico count number resource used in ABS SF for ABS UE */
-            else if(RGR_ABS_TRANSMIT == ue->cell->lteAdvCb.absCfg.absPatternType)
-            {
-               if(RG_SCH_ABS_ENABLED_ABS_SF == ue->cell->lteAdvCb.absDlSfInfo)
-               {
-                  if(TRUE == ue->lteAdvUeCb.rgrLteAdvUeCfg.isAbsUe)
-                  {
-                     ue->cell->lteAdvCb.absLoadInfo[ue->cell->lteAdvCb.absPatternDlIdx]+=
-                        hqP->tbInfo[tbCnt].dlGrnt.numRb;
-                  }
-               }
-            }
-         } 
-
-#ifdef TFU_UPGRADE         
-         /*if SFR is enabled*/
-         allocInfo->isEnbSFR = (uint8_t)RG_SCH_CMN_IS_SFR_ENB(ue->cell); /* KW fix for LTE_ADV */
-         if((ue->cell->lteAdvCb.dsfrCfg.status == RGR_ENABLE) && 
-               (ue->lteAdvUeCb.rgrLteAdvUeCfg.isUeCellEdge == FALSE))
-         {         
-            rgSchDSFRPwrCheck(sf, &isAllUePwrHigh);          
-         } 
-         if(isAllUePwrHigh)
-         {  
-            allocInfo->pa = (uint8_t)ue->cell->lteAdvCb.sfrCfg.pwrThreshold.pHigh;  /* KW fix for LTE_ADV */  
-            if(tmpCnt++ == 100000)
-            {
-               DU_LOG("\nDEBUG  -->  SCH : DSFR::ll UEs can go HIGH, PHigh(%d) for UE(%d)",allocInfo->pa, ue->ueId);
-               tmpCnt = 0;
-            }
-         }    
-         else
-         {  
-            if (allocInfo->isEnbSFR)
-            {
-               /*Update pA to Plow if it is cell-centred ,else pA will be pHigh*/
-               if (ue->lteAdvUeCb.rgrLteAdvUeCfg.isUeCellEdge == TRUE)
-               {  
-                  allocInfo->pa = ue->cell->lteAdvCb.sfrCfg.pwrThreshold.pHigh;
-                  if(tmpCnt++ == 100000)
-                  {
-                     DU_LOG("\nDEBUG  -->  SCH : SFR::UE is CELL EDGE, PHigh(%d) for UE(%d)",allocInfo->pa, ue->ueId);
-                     tmpCnt = 0;
-                  }
-
-               }  
-               else
-               {
-                  if(TRUE == ue->lteAdvUeCb.isCCUePHigh)
-                  {
-                     allocInfo->pa = ue->cell->lteAdvCb.sfrCfg.pwrThreshold.pHigh;
-                     ue->lteAdvUeCb.isCCUePHigh = FALSE;
-                  }
-                  else
-                  {
-                     allocInfo->pa = ue->cell->lteAdvCb.sfrCfg.pwrThreshold.pLow;
-                     if(tmpCnt++ == 100000)
-                     {
-                        DU_LOG("\nDEBUG  -->  SCH : SFR::UE is CELL CENTRE, PLow(%d) for UE(%d)\n",allocInfo->pa, ue->ueId);
-                        tmpCnt = 0;
-                     }
-                  }
-               }
-            }
-         }
-         /* LTE_ADV_FLAG_REMOVED_END */
-#endif         
-      }
-      else
-      {
-         if (hqP->hqE->raCb)
-         {
-#ifdef TFU_UPGRADE
-            RgSchCmnDlCell   *cellDl = RG_SCH_CMN_GET_DL_CELL(cell);
-#endif 
-#ifdef LTEMAC_SPS
-            allocInfo->pdcchRnti = hqP->hqE->raCb->tmpCrnti;
-#endif
-            allocInfo->rnti  =  hqP->hqE->raCb->tmpCrnti;
-#ifdef TFU_UPGRADE
-            /*ccpu00132314-ADD-Use a default pA value
-              for msg4 */
-            allocInfo->pa = cellDl->msg4pAVal; 
-#endif 
-         }
-      }
-      /* If TB Is scheduled for this SF */
-      if(hqP->tbInfo[tbCnt].state == HQ_TB_WAITING)
-      {
-         if (allocInfo->tbStrtIdx == -1){
-            allocInfo->tbStrtIdx = tbCnt;
-#ifndef LTEMAC_SPS
-            rgSCHUtlFillPdschDciInfo(&(allocInfo->dciInfo),
-                               &(hqP->pdcch->dci));
-#else
-            if (hqP->pdcch)
-            {
-               rgSCHUtlFillPdschDciInfo(&(allocInfo->dciInfo),
-                     &(hqP->pdcch->dci));
-            }
-            else if ((ue) && (ue->dl.spsOccPdcch.rnti == ue->spsRnti))
-            {
-               rgSCHUtlFillPdschDciInfo(&(allocInfo->dciInfo),
-                     &(ue->dl.spsOccPdcch.dci));
-            }
-#endif /* ifndef LTEMAC_SPS */
-         }
-#ifdef LTEMAC_SPS
-            if (hqP->pdcch)
-            {
-               allocInfo->pdcchRnti = hqP->pdcch->rnti;
-            }
-            else if (ue)
-            {
-               allocInfo->pdcchRnti = ue->spsRnti;
-            }
-#endif
-         tbInfo = &(allocInfo->tbInfo[tbCnt]);
-         allocInfo->nmbOfTBs++;
-         allocInfo->hqProcId = hqP->procId;
-         allocInfo->tbInfo[tbCnt].schdTbSz = hqP->tbInfo[tbCnt].tbSz;
-
-         tbInfo->disTb  = FALSE;
-         if(!(hqP->tbInfo[tbCnt].txCntr))
-         {
-#ifdef LTE_ADV
-            if(!((rgSCHLaaCheckIfLAAProc(hqP)) && (TRUE ==
-                        rgSCHLaaSCellEnabled(cell))))
-#endif
-            {
-               hqP->tbInfo[tbCnt].txCntr++;
-            }
-            for(idx = 0; idx < hqP->tbInfo[tbCnt].numLch; idx++)
-            {
-               tbInfo->schdDat[idx].lcId =\
-                  hqP->tbInfo[tbCnt].lchSchdData[idx].lcId;
-               tbInfo->schdDat[idx].numBytes =\
-                  hqP->tbInfo[tbCnt].lchSchdData[idx].schdData;
-               if(hqP->hqE->ue)
-               {
-                  lcId = hqP->tbInfo[tbCnt].lchSchdData[idx].lcId; 
-                  if(lcId != 0)
-                  {
-                     dlLcCb = hqP->hqE->ue->dl.lcCb[lcId-1];
-                     if(dlLcCb != NULLP)
-                     {
-                        RG_SCH_CMN_DL_GET_HDR_EST(dlLcCb, rlcHdrEstmt);
-                        /* Update the totalBo with the scheduled bo */
-                        (hqP->hqE->ue->totalBo <= tbInfo->schdDat[idx].numBytes - rlcHdrEstmt)?\
-                                                  (hqP->hqE->ue->totalBo = 0):\
-                                                  (hqP->hqE->ue->totalBo -= tbInfo->schdDat[idx].numBytes-rlcHdrEstmt);
-
-                        /* RRM_RBC_X */
-#ifdef LTE_L2_MEAS
-                        prbUsed = ((hqP->tbInfo[tbCnt].\
-                                 lchSchdData[idx].schdData  *
-                                 hqP->tbInfo[tbCnt].dlGrnt.numRb) /
-                              (hqP->tbInfo[0].tbSz + hqP->tbInfo[1].tbSz));
-                        dlLcCb->qciCb->dlPrbCount += prbUsed;
-                        if(dlLcCb->qciCb->qci > 0)
-                        {
-                           RG_SCH_CALC_GBR_UTILIZATION(cell, dlLcCb, prbUsed);
-                        }
-#endif                        /* RRM_RBC_Y */
-
-#ifdef RG_PFS_STATS
-                        //if(!(hqP->hqE->ue->pfsStats.lcStats[lcId-1].isLcCntSet))
-                        if(tbCnt == 0)
-                        {
-                           uint8_t idx = 0;
-                           if (hqP->hqE->ue->cell == hqP->hqE->cell)
-                           {
-                              idx = RGSCH_PCELL_INDEX;
-                           }
-                           else
-                           {
-                              idx = RG_SCH_GET_SCELL_INDEX((hqP->hqE->ue), (hqP->hqE->cell));
-                           }
-                           hqP->hqE->ue->pfsStats.lcStats[lcId-1].ueSchdOcc[idx]++;
-                           hqP->hqE->ue->pfsStats.lcStats[lcId-1].perRefresh[ue->pfsStats.lcStats[lcId-1].lastIdx].lcSchdOcc++;
-                        }   
-#endif
-                     }
-                  }
-               }
-            }
-            /* Added Dl TB count for SRB/DRB data transmission*/
-#ifdef LTE_L2_MEAS 
-            cell->dlUlTbCnt.tbTransDlTotalCnt++;  
-#endif            
-            tbInfo->ta.pres = hqP->tbInfo[tbCnt].schdTa.pres;
-            tbInfo->ta.val =  hqP->tbInfo[tbCnt].schdTa.val;
-#ifdef LTE_ADV
-            tbInfo->sCellActCe = hqP->tbInfo[tbCnt].schdSCellActCe;
-#endif
-            tbInfo->numSchLch = hqP->tbInfo[tbCnt].numLch;
-            if(!(hqP->tbInfo[tbCnt].numLch))
-            {
-               tbInfo->schdDat[tbInfo->numSchLch].numBytes= hqP->tbInfo[tbCnt].tbSz;
-               /* Fix: If only TA is scheduled, use some dummy LCID */
-               if (tbInfo->ta.pres)
-                  tbInfo->schdDat[tbInfo->numSchLch].lcId = RG_TA_LCID;
-            }
-
-            tbInfo->contResCe = hqP->tbInfo[tbCnt].contResCe;
-            tbInfo->isReTx = FALSE;
-         }
-         else
-         {
-#ifdef LTE_ADV
-            if(!((rgSCHLaaCheckIfLAAProc(hqP)) && (TRUE ==
-                        rgSCHLaaSCellEnabled(cell))))
-#endif
-            {
-               hqP->tbInfo[tbCnt].txCntr++;
-            }
-            tbInfo->isReTx = TRUE;
-            /* RRM_RBC_X */
-            /* As per 36.314, harq retransmission also considered for 
-             * prb utilization calculation*/
-            for(idx = 0; idx < hqP->tbInfo[tbCnt].numLch; idx++)
-            {
-#ifdef LTE_L2_MEAS
-               if(hqP->hqE->ue)
-               {
-                  lcId = hqP->tbInfo[tbCnt].lchSchdData[idx].lcId; 
-                  if(lcId != 0)
-                  {
-                     dlLcCb = hqP->hqE->ue->dl.lcCb[lcId-1];
-                     if(dlLcCb != NULLP)
-                     {
-                        prbUsed = ((hqP->tbInfo[tbCnt].\
-                               lchSchdData[idx].schdData  *
-                               hqP->tbInfo[tbCnt].dlGrnt.numRb) /
-                                  (hqP->tbInfo[0].tbSz + hqP->tbInfo[1].tbSz));
-                        if(dlLcCb->qciCb->qci > 0)
-                        {
-                           RG_SCH_CALC_GBR_UTILIZATION(cell, dlLcCb, prbUsed);
-                        }
-                     }
-                  }
-               }
-#endif
-            }
-            /* RRM_RBC_Y */
-         }
-      }
-    }
-#ifdef LTE_ADV 
-   rgSCHLaaResetDlHqProcCb(hqP);
-#endif
-
-   return;
-}
-/***********************************************************
- *
- *     Func : rgSCHUtlFillRgInfUeInfo
- *
- *     Desc : Utility Function to fill the allocation info of Ue
- *             : MIMO : Filling 2TB's of each UE
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *     Notes: This function should be called while sending a msg from
- *     scheduler instance to MAC
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-  /* CA dev Start */
-Void rgSCHUtlFillRgInfUeInfo(RgSchDlSf *sf,RgSchCellCb *cell,CmLListCp *dlDrxInactvTmrLst,CmLListCp *dlInActvLst,CmLListCp  *ulInActvLst)
-{
-   RgInfSfAlloc    *sfAlloc;
-   CmLListCp       *lnkLst;   /* lnkLst assignment */
-   CmLList         *tmp;
-   CmLList         *hqPNode;
-   RgSchUeCb       *ue = NULLP;
-   RgInfUeInfo     *ueInfo = NULLP;
-   RgInfUeAlloc    *ueAlloc = NULLP;
-   RgSchDlHqProcCb *hqCb = NULLP;
-
-   /* Since Msg4 is sched only on PCELL, use cell arg's sfAllocArr */
-   sfAlloc = &(cell->sfAllocArr[cell->crntSfIdx]);
-   ueInfo = &(sfAlloc->ueInfo);
-   ueAlloc = sfAlloc->ueInfo.allocInfo;
-
-   lnkLst = &(sf->msg4HqPLst);
-   CM_LLIST_FIRST_NODE(lnkLst, tmp);
-   while(NULLP != tmp)
-   {
-      DU_LOG("\nINFO  -->  SCH : 5GTF_ERROR MSG4 Consolidation\n");
-      hqCb = (RgSchDlHqProcCb *)(tmp->node);
-      CM_LLIST_NEXT_NODE(lnkLst, tmp);
-
-      rgSCHUtlFillRgInfTbInfo(hqCb, &ueAlloc[ueInfo->numUes], cell);
-
-      ue = hqCb->hqE->ue;
-
-      if(ue != NULLP)
-      {   
-         if((!(ue->dl.dlInactvMask & RG_HQENT_INACTIVE)) && (ue->isDrxEnabled))
-         {   
-            rgSCHUtlGetDrxSchdUesInDl(cell, ue, hqCb, &ueAlloc[ueInfo->numUes], 
-                  dlDrxInactvTmrLst, dlInActvLst, ulInActvLst);
-         }
-      }
-      ueInfo->numUes++;
-   }
-   lnkLst = &(sf->ueLst);
-   CM_LLIST_FIRST_NODE(lnkLst, tmp);
-   while(NULLP != tmp)
-   {
-#if defined (TENB_STATS) && defined (RG_5GTF)
-      cell->tenbStats->sch.dl5gtfPdschCons++;
-#endif
-      ue = (RgSchUeCb *)(tmp->node);
-      CM_LLIST_NEXT_NODE(lnkLst, tmp);
-
-      hqPNode = ue->dl.dlSfHqInfo[cell->cellId][sf->dlIdx].hqPLst.first;
-      while (hqPNode)
-      {
-         hqCb = (RgSchDlHqProcCb *)hqPNode->node;
-         hqPNode = hqPNode->next;
-
-         sfAlloc = &(hqCb->hqE->cell->sfAllocArr[hqCb->hqE->cell->crntSfIdx]);
-         ueInfo = &(sfAlloc->ueInfo);
-         ueAlloc = sfAlloc->ueInfo.allocInfo;
-
-         rgSCHUtlFillRgInfTbInfo(hqCb, &ueAlloc[ueInfo->numUes], 
-               hqCb->hqE->cell);
-
-         if(ue->isDrxEnabled)
-         {   
-            rgSCHUtlGetDrxSchdUesInDl(cell, ue, hqCb, &ueAlloc[ueInfo->numUes], 
-                  dlDrxInactvTmrLst, dlInActvLst, ulInActvLst);
-         }
-         ueInfo->numUes++;
-      }
-#ifdef LTE_ADV
-      if (rgSchCb[cell->instIdx].genCfg.isSCellActDeactAlgoEnable == TRUE)
-      {
-         /*If remaining BO is left then increment the count*/
-         if(ue->totalBo > 0)
-         {
-            ue->remBoCnt++;
-            /* Check if trigger for Activation is met or not */
-            if(rgSCHIsActvReqd(cell, ue))
-            {
-               ue->remBoCnt = 0;
-               /*Passing primary cell*/
-               rgSCHSCellSelectAndActDeAct(ue->cell, ue, RGR_SCELL_ACT);
-            }
-         }
-         else
-         {
-            /*If remaining BO is 0 then reset the count*/
-            ue->remBoCnt = 0;
-         }
-      }
-#endif
-   }
-  
-   return;
-} /* end of rgSCHUtlFillRgInfUeInfo */
-  /* CA dev End */
-
-
-/** @brief This function  shall update the scheduler with the CEs and data rcvd
- *
- * @details
- *
- *     Function: rgSCHUtlUpdSch
- *
- *         Processing steps:
- *         - Collate the information of all the SDUs received and inform the
- *         scheduler rgSCHDataRcvd
- *         - Send Data indication to the higher layer with the dedicated data
- *         (rgUIMSndDedDatInd)
- *         - Inform scheduler with any MAC CEs if present.
- *
- * @param  [in] RgCellCb   *cellCb
- * @param  [in] RgUeCb     *ueCb
- * @param  [in] RgMacPdu   *pdu
- * @param  [in] RgSchErrInfo  *err
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlUpdSch(RgInfSfDatInd *subfrmInfo,RgSchCellCb *cellCb,RgSchUeCb *ueCb,RgInfUeDatInd  *pdu,RgSchErrInfo *err)
-{
-
-   S16               ret;
-#ifdef LTEMAC_SPS
-   if (RGSCH_UL_SPS_ACT_PRSENT & pdu->ceInfo.bitMask)
-   {
-      /* SPS to be activated due to data on SPS LCG ID*/
-      rgSCHUtlSpsActInd(cellCb, ueCb, pdu->ceInfo.spsSduSize);
-   }
-#endif
-   /* TODO : Temp Fix for crash due to UL SDU corruption*/
-   if (RGSCH_PHR_CE_PRSNT & pdu->ceInfo.bitMask)
-   {
-      /* PHR present */
-      RGSCHCPYTIMEINFO(subfrmInfo->timingInfo, ueCb->macCeRptTime);
-      if ((ret = rgSCHUtlUpdPhr(cellCb, ueCb, pdu->ceInfo.ces.phr, err)) != ROK)
-         return (ret);
-   }
-   /* Note: Order of indication to Sch now is
-    *       1st Indicate the DataInd info for each LCG's
-    *       2nd Update the BSR reports received along with data
-    *       this is to make sure the effBsr is updated to the latest BSR 
-    *       received.
-    */
-   cellCb->sc.apis->rgSCHUpdUeDataIndLcg(cellCb, ueCb, pdu);
-
-#ifndef MAC_5GTF_UPDATE
-   if (RGSCH_TRUNC_BSR_CE_PRSNT & pdu->ceInfo.bitMask)
-   {
-      RGSCHCPYTIMEINFO(subfrmInfo->timingInfo, ueCb->macCeRptTime);
-      /*ccpu00129922 - MOD - Deleted return value
-       * checking since it returns void*/
-      rgSCHUtlUpdBsrTrunc (cellCb, ueCb,
-                  (uint8_t)(pdu->ceInfo.ces.bsr.truncBsr >> 6),
-                  (uint8_t)(pdu->ceInfo.ces.bsr.truncBsr & 0x3F), err); 
-   }
-   else
-   {
-      if (RGSCH_SHORT_BSR_CE_PRSNT & pdu->ceInfo.bitMask)
-      {
-         RGSCHCPYTIMEINFO(subfrmInfo->timingInfo, ueCb->macCeRptTime);
-         /*ccpu00129922 - MOD - Deleted return value
-          checking since it returns void*/
-         rgSCHUtlUpdBsrShort (cellCb, ueCb,
-                     (uint8_t)(pdu->ceInfo.ces.bsr.shortBsr >> 6),
-                     (uint8_t)(pdu->ceInfo.ces.bsr.shortBsr & 0x3F), err);
-      }
-      else
-      {
-         if (RGSCH_LONG_BSR_CE_PRSNT & pdu->ceInfo.bitMask)
-#else
-         if (RGSCH_BSR_CE_PRSNT & pdu->ceInfo.bitMask)
-#endif
-         {
-            RGSCHCPYTIMEINFO(subfrmInfo->timingInfo, ueCb->macCeRptTime);
-            /*ccpu00129922 - MOD - Deleted return value
-              checking since it returns void*/
-            rgSCHUtlUpdBsrLong (cellCb, ueCb,
-                        pdu->ceInfo.ces.bsr.longBsr.bs1,
-                        pdu->ceInfo.ces.bsr.longBsr.bs2,
-                        pdu->ceInfo.ces.bsr.longBsr.bs3,
-                        pdu->ceInfo.ces.bsr.longBsr.bs4,
-                        err);
-         }
-#ifndef MAC_5GTF_UPDATE
-      }
-   }
-#endif
-            
-   return ROK;
-} /* end of rgSCHUtlUpdSch */
-#ifdef RGR_V1
-/**
- * @brief Handler for Updating Bo received in StaRsp
- *
- * @details
- *
- *     Function : rgSCHUtlAddUeToCcchSduLst
- *
- *     This function shall be invoked once it receives staRsp on CCCH
- *
- *  @param[in]     RgSchCellCb       *cell
- *  @param[in]     RgSchUeCb       *ueCb
- *  @return  S16
- *      -# ROK
- **/
-S16 rgSCHUtlAddUeToCcchSduLst(RgSchCellCb  *cell,RgSchUeCb *ueCb)
-{
-   RgSchCmnDlUe  *ueDl = RG_SCH_CMN_GET_DL_UE(ueCb, cell);
-   RgSchDlHqProcCb *hqP  = (RgSchDlHqProcCb *)ueDl->proc;
-
-   /* Temp Guard: For back to back CCCH SDU BO 
-    * twice. Hence an extra guard. If already added to scheduling
-    * queue or if scheduled and waiting for HQ FDBK, ignore */
-   if ((ueCb->ccchSduLnk.node) ||
-       ((!(ueCb->dl.dlInactvMask & RG_HQENT_INACTIVE)) &&
-       ((hqP != NULLP) && (hqP->hqE->ccchSduProc))))
-   {
-      DU_LOG("\nINFO  -->  SCH : RNTI:%d Unexpected CCCH SDU BO",
-         ueCb->ueId);
-      return ROK;
-   }
-
-   ueCb->ccchSduLnk.node = (PTR)(ueCb);
-   cmLListAdd2Tail(&(cell->ccchSduUeLst), &(ueCb->ccchSduLnk));
-
-   return ROK;
-}
-/**
- *
- * @details
- *
- *     Function : rgSCHUtlUpdtBo
- *
- *     This function shall be invoked once it receives staRsp on CCCH
- *
- *  @param[in]     RgSchCellCb       *cell
- *  @param[in]     RgRguCmnStaRsp *staRsp
- *  @return  S16
- *      -# ROK
- **/
-S16 rgSCHUtlUpdtBo(RgSchCellCb  *cell,RgInfCmnBoRpt *staRsp)
-{
-   RgSchUeCb *ueCb;
-
-   if ((ueCb = rgSCHDbmGetUeCb(cell, staRsp->u.rnti)) == NULLP)
-   {
-      /* Handle Ue fetch failure */
-      DU_LOG("\nERROR  -->  SCH : Invalid UEID:%d",staRsp->u.rnti);
-      return RFAILED;
-   }
-   /* Update Bo in ueCb */
-   ueCb->dlCcchInfo.bo = (uint32_t)(staRsp->bo);
-#ifdef EMTC_ENABLE
-     if(ueCb->isEmtcUe)
-     {
-        rgSCHUtlAddUeToEmtcCcchSduLst(cell,ueCb);
-     }
-     else
-#endif
-    {
-      rgSCHUtlAddUeToCcchSduLst(cell, ueCb);
-    }
-
-   return ROK;
-} /* rgSCHUtlUpdtBo */
-
-#endif
-/**
- *
- * @details
- *     Function : rgSCHUtlHndlCcchBoUpdt
- *
- *     This function shall fetch the raCb with the given rnti and ask RAM to
- *     update BO
- *
- *
- *  @param[in]  RgSchCellCb    *cell
- *  @param[in]  RgInfCmnBoRpt *boRpt
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlHndlCcchBoUpdt(RgSchCellCb *cell,RgInfCmnBoRpt *boRpt)
-{
-   RgSchRaCb       *raCb;
-   RgSchUeCb *ueCb;
-
-   if ((raCb = rgSCHDbmGetRaCb(cell, boRpt->u.rnti)) == NULLP)
-   {
-#ifdef RGR_V1
-   /* CR timer implementation changes*/
-      /*If no raCb, schedule ueCb, ueCb is extracted in rgSCHUtlUpdtBo*/
-      return (rgSCHUtlUpdtBo(cell, boRpt));
-#else
-      /* Handle RaCb fetch failure */
-      DU_LOG("\nERROR  -->  SCH : Invalid RNTI:%d to fetch raCb",boRpt->u.rnti);
-      return RFAILED;
-#endif
-   }
-
-#ifdef RGR_V1
-
-      /*Fix: If RaCb exists, then MSG4 is not completed yet*/
-      /*Check if guard timer has expired, if not CR CE + CCCH SDU will be scheduled*/
-      if((raCb->contResTmrLnk.node != NULLP) && \
-            (raCb->schdLnk.node == NULLP) && (raCb->dlHqE->msg4Proc == NULLP))
-      {
-#ifdef EMTC_ENABLE
-         /*if contention resolution timer left ,Stop the Contention Resolution Guard Timer ,
-         add in toBeSchduled list and update the Bo */
-         if(TRUE == raCb->isEmtcRaCb)
-         {
-            rgSCHRamEmtcUpdtBo(cell, raCb, boRpt);
-         }
-         else
-#endif
-         {
-            cmLListDelFrm(&cell->contResGrdTmrLst, &(raCb->contResTmrLnk));
-            raCb->contResTmrLnk.node=NULLP;               
-            rgSCHRamUpdtBo(cell, raCb, boRpt);
-         }
-       }
-      else
-      {
-         /*Fix:Guard timer has expired */
-         /*Update the BO in UE CB but dont add it to the scheduling list. 
-          *Should be added to the list after MSG4 completion*/
-         if ((ueCb = rgSCHDbmGetUeCb(cell, boRpt->u.rnti)) == NULLP)
-         {
-            /* Handle Ue fetch failure */
-            DU_LOG("\nERROR  -->  SCH : Invalid RNTI:%d",boRpt->u.rnti);
-            return RFAILED;
-         }
-         /* Update Bo in ueCb */
-         ueCb->dlCcchInfo.bo = (uint32_t)(boRpt->bo);     
-      }
-
-#else
-      rgSCHRamUpdtBo(cell, raCb, boRpt);
-#endif
-
-   return ROK;
-} /* rgSCHUtlHndlCcchBoUpdt */
-
-/**
- * @brief Validates BO received for BCCH or PCCH.
- *
- * @details
- *
- *     Function : rgSCHUtlGetAllwdCchTbSz
- *
- *     This function shall return the tbSz equal to or
- *     the nearest greater value for a given bo.
- *     If no such value found return -1. The nPrb value is
- *     accordingly set.
- *
- *
- *  @param[in]  uint32_t            bo
- *  @param[out] uint8_t             *nPrb
- *  @return  S32
- *      -# ROK
- *      -# RFAILED
- **/
-S32 rgSCHUtlGetAllwdCchTbSz(uint32_t bo,uint8_t  *nPrb,uint8_t  *mcs)
-{
-   S32 lt;
-   S32 cn;
-   S32 rt;
-
-   for (lt = 0, rt = 43; lt <= rt;)
-   {
-      cn = (lt + rt)/2;
-      if (rgSchUtlBcchPcchTbSzTbl[cn].tbSz == bo)
-      {
-         *nPrb = rgSchUtlBcchPcchTbSzTbl[cn].rbIndex;
-         *mcs  = rgSchUtlBcchPcchTbSzTbl[cn].mcs;
-         return (rgSchUtlBcchPcchTbSzTbl[cn].tbSz);
-      }
-      else if (rgSchUtlBcchPcchTbSzTbl[cn].tbSz < bo)
-         lt = cn + 1;
-      else
-         rt = cn - 1;
-   }
-   if (lt == 44)
-   {
-      return RFAILED;
-   }
-   *nPrb = rgSchUtlBcchPcchTbSzTbl[lt].rbIndex;
-   *mcs  = rgSchUtlBcchPcchTbSzTbl[lt].mcs;
-   return (rgSchUtlBcchPcchTbSzTbl[lt].tbSz);
-}
-
-/**
- * @brief Handler for BO Updt received for BCCH or PCCH.
- *
- * @details
- *
- *     Function : rgSCHUtlHndlBcchPcchBoUpdt
- *
- *     This function shall store the buffer and time to transmit in lcCb
- *
- *
- *  @param[in]  RgSchCellCb    *cell
- *  @param[in]  RgInfCmnBoRpt  *boRpt
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlHndlBcchPcchBoUpdt(RgSchCellCb *cell,RgInfCmnBoRpt *boUpdt)
-{
-   RgSchClcDlLcCb *dlLc;
-   RgSchClcBoRpt  *boRpt;
-   Inst           inst = cell->instIdx;
-   uint8_t             nPrb=0;
-   uint8_t             mcs=0;
-
-   dlLc = rgSCHDbmGetBcchOnBch(cell);
-   if (dlLc == NULLP)
-   {
-      DU_LOG("\nERROR  -->  SCH : No Logical Channel dlLc is NULLP for RNTI:%d LCID:%d",boUpdt->u.rnti,boUpdt->lcId);
-      return RFAILED;
-   }
-   if (boUpdt->lcId != dlLc->lcId)
-   {
-      /* Added for dropping paging Message*/     
-         /*suman*/
-      if ((rgSCHChkBoUpdate(cell,boUpdt))== ROK)  /* Checking if received BO falls within the window of 5120 slots*/
-      {
-         if (rgSCHUtlGetAllwdCchTbSz(boUpdt->bo*8, &nPrb, &mcs) 
-               != (boUpdt->bo*8))
-         {
-            DU_LOG("\nERROR  -->  SCH : [%d]BO: does not match any "
-                  "valid TB Size RNTI:%d LCID:%d", boUpdt->bo,boUpdt->u.rnti,boUpdt->lcId);
-            return RFAILED;
-         }
-      }/*end of rgSCHChkBoUpdate*/
-      else
-      {
-          return ROK;
-      } 
-   }
-   if ((dlLc = rgSCHDbmGetCmnLcCb(cell, boUpdt->lcId)) == NULLP)
-   {
-      /* Handle lcCb fetch failure */
-      DU_LOG("\nERROR  -->  SCH : LCID:%d Invalid for RNTI:%d",boUpdt->lcId,boUpdt->u.rnti);
-   }
-
-   if (((rgSCHUtlAllocSBuf(inst, (Data **)(&boRpt), sizeof(RgSchClcBoRpt))) ==RFAILED) ||
-       (!boRpt))
-   {
-      DU_LOG("\nERROR  -->  SCH : Allocation of common bo %dreport "
-         "failed  RNTI:%d LCID:%d", boUpdt->bo,boUpdt->u.rnti,boUpdt->lcId);
-      return RFAILED;
-   }
-
-   boRpt->bo = boUpdt->bo;
-   boRpt->mcs = mcs;
-   boRpt->timeToTx = boUpdt->u.timeToTx;
-   boRpt->nPrb = nPrb;
-#ifdef EMTC_ENABLE
-   if(cell->emtcEnable)
-   {
-      boRpt->emtcDIReason = boUpdt->emtcDIReason;
-      boRpt->pnb = boUpdt->pnb;
-   }
-#endif
-   RG_SCH_ADD_TO_CRNT_TIME(boRpt->timeToTx, 
-         boRpt->maxTimeToTx, cell->siCfg.siWinSize)
-   if((NULLP != dlLc) && (dlLc->si))
-   {
-      boRpt->retxCnt = cell->siCfg.retxCnt;
-   }
-   else
-   {
-      boRpt->retxCnt = 0;
-   }
-   rgSCHDbmInsCmnLcBoRpt(dlLc, boRpt);
-
-   return ROK;
-} /* rgSCHUtlHndlBcchPcchBoUpdt */
-
-/**
- * @brief API for sending bind confirm from Scheduler instance to RRM
- *
- * @details
- *
- *     Function: rgSCHUtlRgrBndCfm
- *
- *     This API is invoked to send bind confirm from Scheduler instance to RRM.
- *     This API fills in Pst structure and SAP Ids and invokes
- *     bind confirm API towards RRM.
- *
- *  @param[in]  SuId          suId
- *  @param[in]  uint8_t            status
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrBndCfm(Inst instId,SuId suId,uint8_t status)
-{
-   S16  ret = ROK;
-
-   ret = RgUiRgrBndCfm(&rgSchCb[instId].rgrSap[suId].sapCfg.sapPst, rgSchCb[instId].rgrSap[suId].sapCfg.suId, status);
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrBndCfm: RgUiRgrBndCfm Failed ");
-      return (ret);
-   }
-   return (ret);
-}  /* rgSCHUtlRgrBndCfm*/
-
-/**
- * @brief API for sending bind confirm from Scheduler instance to RRM via RGM
- *        interface
- *
- * @details
- *
- *     Function: rgSCHUtlRgmBndCfm
- *
- *     This API is invoked to send bind confirm from Scheduler instance to RRM.
- *     This API fills in Pst structure and SAP Ids and invokes
- *
- *  @param[in]  SuId          suId
- *  @param[in]  uint8_t            status
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgmBndCfm(Inst instId,SuId suId,uint8_t status)
-{
-   S16  ret = ROK;
-
-   ret = RgUiRgmBndCfm(&rgSchCb[instId].rgmSap[suId].sapCfg.sapPst, rgSchCb[instId].rgmSap[suId].sapCfg.suId, status);
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgmBndCfm: RgUiRgrBndCfm Failed ");
-      return (ret);
-   }
-   return (ret);
-}  /* rgSCHUtlRgmBndCfm*/
-
-
-
-/**
- * @brief API for sending configuration confirm from Scheduler to DU APP
- *
- * @details
- *
- *     Function: schSendCfgCfm 
- *
- *     This API is invoked to send configuration confirm from Scheduler to DU
- *     APP.
- *
- *  @param[in]  Pst           pst 
- *  @param[in]  RgrCfgTransId transId
- *  @param[in]  uint8_t            status
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 schSendCfgCfm(Region reg,Pool pool,RgrCfgTransId transId,uint8_t status)
-{
-   Pst cfmPst;
-
-   memset((&cfmPst), 0, sizeof(Pst));
-
-   cfmPst.srcEnt    = (Ent)ENTDUAPP;
-   cfmPst.srcInst   = (Inst) 0;
-   cfmPst.srcProcId = SFndProcId();
-   cfmPst.dstEnt    = (Ent)ENTMAC;
-   cfmPst.dstInst   = (Inst) 0;
-   cfmPst.dstProcId = SFndProcId();
-   cfmPst.selector  = ODU_SELECTOR_LC;
-   cfmPst.region    = reg;
-   cfmPst.pool      = pool;
-
-   if(RgUiRgrCfgCfm(&cfmPst,transId, status) != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : schSendCfgCfm: RgUiRgrCfgCfm Failed ");
-      return RFAILED;
-   }
-   return ROK;
-}  /* schSendCfgCfm*/
-#ifdef RGR_RRM_TICK
-/**
- * @brief API for sending TTI indication from Scheduler to RRM.
- *
- * @details
- *
- *     Function: rgSCHUtlRgrTtiInd
- *
- *     This API is invoked to send TTI indication from Scheduler instance to RRM.
- *     This API fills in Pst structure and RgrTtiIndInfo
- *
- *  @param[in]  cell                   RgSchCellCb
- *  @param[in]  CmLteTimingInfo        status
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrTtiInd(RgSchCellCb *cell,RgrTtiIndInfo *rgrTti)
-{
-   S16           ret = ROK;
-   RgSchUpSapCb  *rgrSap;                    /*!< RGR SAP Control Block */
-#ifdef L2_L3_SPLIT
-   Bool g_usettitmr;
-   Void mtTmrHdlrPublic(void);
-#endif
-
-   rgrSap = cell->rgrSap;
-   if (rgrSap->sapSta.sapState != LRG_BND)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrTtiInd() Upper SAP not bound (%d) ",
-               rgrSap->sapSta.sapState);
-      return RFAILED;
-   }
-   RgUiRgrTtiInd(&(cell->rgrSap->sapCfg.sapPst),
-         cell->rgrSap->sapCfg.suId, rgrTti);
-#ifdef L2_L3_SPLIT
-   {
-      g_usettitmr = TRUE;
-      mtTmrHdlrPublic();
-   }
-#endif
-   return (ret);
-}  /* rgSCHUtlRgrTtiInd*/
-#endif
-/** @brief This function is called by rgMacSchSfRecpInd. This function invokes the
- * scheduler with the information of the received Data and any Control Elements
- * if present.
- *
- * @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 rgSCHRamProcMsg3
- *
- * @param  [in] RgSchCellCb   *cellCb
- * @param  [in] RgSchUeCb     *ueCb
- * @param  [in] CmLteRnti     rnti
- * @param  [in] RgMacPdu   *pdu
- * @param  [in] RgSchErrInfo  *err
- * @param
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlProcMsg3
-(
-RgInfSfDatInd    *subfrmInfo,
-RgSchCellCb      *cellCb,
-RgSchUeCb        *ueCb,
-CmLteRnti        rnti,
-RgInfUeDatInd    *pdu,
-RgSchErrInfo     *err
-)
-{
-   S16               ret;
-   RgSchRaCb         *raCb;
-
-   /* must have an raCb for this case */
-   raCb = rgSCHDbmGetRaCb (cellCb, rnti);
-   if (raCb == NULLP)
-   {
-      DU_LOG("\nERROR  -->  SCH : RNTI:%d Received MSG3, unable to "
-         "find raCb",rnti);
-      return RFAILED;
-   }
-
-   /* ccpu00130982: Processing CRNTI MAC CE before Short BSR, if any, such that 
-    * effBsr of current case only will be considered in scheduling of ContResLst*/
-   ret = rgSCHRamProcMsg3 (cellCb, ueCb, raCb, pdu, err);
-   if (ret != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : Processing failed in the RAM "
-         "RNTI:%d ",rnti);
-      return (ret);
-   }
-   /* if ueCb is present */
-   if (ueCb != NULLP)
-   {
-      rgSCHUtlUpdSch (subfrmInfo, cellCb, ueCb, pdu, err);
-   }
-
-   return ROK;
-}
-#ifdef LTEMAC_SPS
-/** @brief This function is called by RgMacSchSpsRelInd. This function invokes the
- * scheduler with the information of the received Data.
- *
- * @details
- *
- *     Function: rgSCHUtlSpsRelInd
- *
- *         Processing steps:
- *         TODO
- *
- * @param  [in] RgSchCellCb        *cellCb
- * @param  [in] RgSchUeCb          *ueCb
- * @param  [in] Bool               *isExplRel
- * @param
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlSpsRelInd(RgSchCellCb *cellCb,RgSchUeCb *ueCb,Bool isExplRel)
-{
-   cellCb->sc.apis->rgSCHUlSpsRelInd(cellCb, ueCb, isExplRel);
-   return ROK;
-} /* end of rgSCHUtlSpsRelInd */
-
-
-/** @brief This function is called by RgMacSchSpsRelInd. This function invokes the
- * scheduler with the information of the received Data.
- *
- * @details
- *
- *     Function: rgSCHUtlSpsActInd
- *
- *         Processing steps:
- *         TODO
- *
- * @param  [in] RgSchCellCb        *cellCb
- * @param  [in] RgSchUeCb          *ueCb
- * @param  [in] uint16_t                spsSduSize
- * @param
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- */
-S16 rgSCHUtlSpsActInd(RgSchCellCb *cellCb,RgSchUeCb *ueCb,uint16_t spsSduSize)
-{
-   cellCb->sc.apis->rgSCHUlSpsActInd(cellCb, ueCb, spsSduSize);
-   return ROK;
-} /* end of rgSCHUtlSpsActInd */
-
-
-#endif /* LTEMAC_SPS */
-
-#ifdef RG_PHASE_2
-/**
- * @brief This API is invoked to send uplink group power control request to PHY.
- *
- * @details
- *
- *     Function : rgSCHUtlTfuGrpPwrCntrlReq
- *
- *      This API is invoked to send uplink group power control request to PHY.
- *      It fills in the Pst structure, spId value and invokes group power
- *      control request primitive at TFU.
- *
- *  @param[in]  TfuGrpPwrCntrlReqInfo *grpPwrCntrlReq
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlTfuGrpPwrCntrlReq(Inst inst,S16 sapId,TfuGrpPwrCntrlReqInfo *grpPwrCntrlReq)
-{
-   S16             ret;
-   RgSchLowSapCb  *tfuSap;
-   Pst             pst;
-
-   /* Get the lower SAP control block from the layer control block. */
-   tfuSap = &(rgSchCb[inst].tfuSap[sapId]);
-   if (tfuSap->sapSta.sapState != LRG_BND)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlTfuGrpPwrCntrlReq() Lower SAP not bound (%d) ",tfuSap->sapSta.sapState);
-      return RFAILED;
-   }
-   memcpy (&pst, &(tfuSap->sapCfg.sapPst), sizeof(Pst));
-   if((ret = RgLiTfuGrpPwrCntrlReq (&pst, tfuSap->sapCfg.spId, grpPwrCntrlReq)) != ROK)
-   {
-       DU_LOG("\nERROR  -->  SCH : rgSCHUtlTfuGrpPwrCntrlReq() Call to RgLiTfuGrpPwrCntrlReq() failed");
-   }
-   return (ret);
-}  /* rgSCHUtlTfuGrpPwrCntrlReq */
-#endif
-
-/* FOR ACK NACK REP */
-
-/**
- * @brief This API is invoked to tell the DL Scheduler to add the UE back into
- * its scheduling queues.
- *
- * @details
- *
- *     Function : rgSCHUtlDlActvtUe
- *
- *      This API is invoked from Measurement gap moduled.
- *
- *  @param[in]  RgSchCellCb    *cell
- *  @param[in]  RgSchUeCb        *ueCb
- *
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlDlActvtUe(RgSchCellCb *cell,RgSchUeCb   *ue)
-{
-   cell->sc.apis->rgSCHActvtDlUe(cell, ue);
-   return ROK;
-}
-
-/**
- * @brief This API is invoked to tell the UL Scheduler to add the UE back into
- * its scheduling queues.
- *
- * @details
- *
- *     Function : rgSCHUtlUlActvtUe
- *
- *      This API is invoked from Measurement gap moduled.
- *
- *  @param[in]  RgSchCellCb    *cell
- *  @param[in]  RgSchUeCb        *ueCb
- *
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlUlActvtUe(RgSchCellCb *cell,RgSchUeCb *ue)
-{
-   cell->sc.apis->rgSCHActvtUlUe(cell, ue);
-   return ROK;
-}
-
- /** @brief This function Validates the SAP information received along with the
-  * primitive from the lower layer.
-  *
-  * Function: rgSCHUtlValidateTfuSap
-  *
-  *                      Validates SAP information.
-  * @param  suId The SAP Id
-  * @return
-  *   -# ROK
-  *   -# RFAILED
-  */
-S16 rgSCHUtlValidateTfuSap(Inst  inst,SuId  suId)
-{
-   RgSchLowSapCb  *tfuSap;
-
-   if(suId >= rgSchCb[inst].numSaps)
-   {
-      DU_LOG("\nERROR  -->  SCH : Incorrect SuId");
-      return RFAILED;
-   }
-   tfuSap = &(rgSchCb[inst].tfuSap[suId]);
-
-   /* First lets check the suId */
-   if( suId != tfuSap->sapCfg.suId)
-   {
-      DU_LOG("\nERROR  -->  SCH : Incorrect SuId. Configured (%d) Recieved (%d)",
-            tfuSap->sapCfg.suId, suId);
-      return RFAILED;
-   }
-   if (tfuSap->sapSta.sapState != LRG_BND)
-   {
-      DU_LOG("\nERROR  -->  SCH : Lower SAP not enabled SuId (%d)",
-            tfuSap->sapCfg.suId);
-      return RFAILED;
-   }
-   return ROK;
-} /* end of rgSCHUtlValidateTfuSap */
-
-/*
-*
-*       Fun:   rgSCHUtlAllocEventMem
-*
-*       Desc:  This function allocates event memory
-*
-*       Ret:   ROK      - on success
-*              RFAILED  - on failure
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*
-*/
-S16 rgSCHUtlAllocEventMem(Inst inst,Ptr *memPtr,Size memSize)
-{
-   Mem  sMem;
-   volatile uint32_t  startTime=0;
-
-
-   sMem.region = rgSchCb[inst].rgSchInit.region;
-   sMem.pool = rgSchCb[inst].rgSchInit.pool;
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if (memSize<= 0)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgAllocEventMem(): memSize invalid\n");
-      return  (RFAILED);
-   }
-#endif /* ERRCLASS & ERRCLS_DEBUG */
-   /*starting Task*/
-   SStartTask(&startTime, PID_SCHUTL_CMALLCEVT);
-
-#ifdef MS_MBUF_CORRUPTION /* Should be enabled when debugging mbuf corruption */
-   MS_BUF_ADD_ALLOC_CALLER();
-#endif /* */
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-   if(ROK != cmAllocEvntNoInit(memSize, TFU_MAX_MEMBLK_SIZE, &sMem, memPtr))
-#else
-   if(ROK != cmAllocEvnt(memSize, TFU_MAX_MEMBLK_SIZE, &sMem, memPtr))
-#endif /* */
-   {
-      DU_LOG("\nERROR  -->  SCH : cmAllocEvnt Failed.");
-      return RFAILED;
-   }
-   /*stoping Task*/
-   SStopTask(startTime, PID_SCHUTL_CMALLCEVT);
-   return ROK;
-} /* end of rgSCHUtlAllocEventMem*/
-
-/*
-*
-*       Fun:   rgGetEventMem
-*
-*       Desc:  This function allocates event memory
-*
-*       Ret:   ROK      - on success
-*              RFAILED  - on failure
-*
-*       Notes: None
-*
-*       File:  rg_utl.c
-*
-*/
-S16 rgSCHUtlGetEventMem(Ptr *ptr,Size len,Ptr memCp)
-{
-   S16   ret;
-
-#ifdef TFU_ALLOC_EVENT_NO_INIT
-   ret = cmGetMemNoInit(memCp, len, (Ptr *)ptr);
-#else
-   ret = cmGetMem(memCp, len, (Ptr *)ptr);
-#endif
-   return (ret);
-} /* end of rgSCHUtlGetEventMem*/
-
-#ifdef LTE_TDD
-
-
-/**
- * @brief Handler to allocate memory for ACK/NACk feedback information
- *
- * @details
- *
- *     Function : rgSCHUtlAllocUeANFdbkInfo
- *
- *   It allocates memory for the UE related ACK NACK information.
- *
- *  @param[in]  RgSchUeCb           *ue
- *  @return     S16
- **/
-S16 rgSCHUtlAllocUeANFdbkInfo(RgSchUeCb *ue,uint8_t servCellIdx)
-{
-   uint8_t idx;
-
-   if (rgSCHUtlAllocSBuf(ue->cell->instIdx,
-               (Data **) &(ue->cellInfo[servCellIdx]->anInfo), sizeof(RgSchTddANInfo) * \
-   ue->cell->ackNackFdbkArrSize) != ROK)
-   {
-      return RFAILED;
-   }
-
-   for(idx=0; idx < ue->cell->ackNackFdbkArrSize; idx++)
-   {
-      rgSCHUtlInitUeANFdbkInfo(&ue->cellInfo[servCellIdx]->anInfo[idx]);
-   }
-
-   /* Set it to the first index */
-   ue->cellInfo[servCellIdx]->nextFreeANIdx = 0;
-   return ROK;
-} /* rgSCHUtlAllocUeANFdbkInfo */
-
-/**
- * @brief Handler to release memory for ACK/NACk feedback information
- *
- * @details
- *
- *     Function : rgSCHUtlDelUeANFdbkInfo
- *
- *   It releases memory for the UE related ACK NACK information.
- *
- *  @param[in]  RgSchUeCb           *ue
- *  @return     Void
- **/
-Void rgSCHUtlDelUeANFdbkInfo(RgSchUeCb *ue,uint8_t servCellIdx)
-{
-
-   /* ccpu00117052 - MOD - Passing double pointer
-   for proper NULLP assignment*/
-   rgSCHUtlFreeSBuf(ue->cell->instIdx,
-         (Data **)(&( ue->cellInfo[servCellIdx]->anInfo)), sizeof(RgSchTddANInfo) * \
-                        ue->cell->ackNackFdbkArrSize);
-
-   return;
-} /* rgSCHUtlDelUeANFdbkInfo */
-
-/**
- * @brief Handler to initialise UE ACK/NACk feedback information
- *
- * @details
- *
- *     Function : rgSCHUtlInitUeANFdbkInfo
- *
- *   It initialises UE related ACK NACK information.
- *
- *  @param[in]  RgSchTddANInfo   *anFdInfo
- *  @return     S16
- **/
-S16 rgSCHUtlInitUeANFdbkInfo(RgSchTddANInfo *anFdInfo)
-{
-
-   anFdInfo->sfn = RGSCH_MAX_SFN+1; /* defensively setting invalid sfn */
-   anFdInfo->slot = 0;
-   anFdInfo->ulDai = RG_SCH_INVALID_DAI_VAL;
-   anFdInfo->dlDai = RG_SCH_INVALID_DAI_VAL;
-   anFdInfo->latestMIdx = RG_SCH_INVALID_M_VAL;
-
-   return ROK;
-} /* rgSCHUtlInitUeANFdbkInfo */
-
-/**
- * @brief Handler to get UE related ACK NACK feedback information
- *
- * @details
- *
- *     Function : rgSCHUtlGetUeANFdbkInfo
- *
- *   It gets the UE related ACK NACK information based on
- *   SFN and slot number.
- *
- *  @param[in]  RgSchUeCb        *ueCb
- *  @param[in]  CmLteTimingInfo  *time
- *  @return     RgSchTddANInfo*
- **/
-RgSchTddANInfo* rgSCHUtlGetUeANFdbkInfo(RgSchUeCb *ueCb,CmLteTimingInfo *timeInfo,uint8_t servCellIdx)
-{
-   uint8_t idx;
-
-   for (idx = 0; idx < ueCb->cell->ackNackFdbkArrSize; ++idx)
-   {
-       if( (timeInfo->sfn == ueCb->cellInfo[servCellIdx]->anInfo[idx].sfn) &&
-               (timeInfo->slot == ueCb->cellInfo[servCellIdx]->anInfo[idx].slot))
-       {
-            return (&ueCb->cellInfo[servCellIdx]->anInfo[idx]);
-       }
-   }
-
-   return (NULLP);
-} /* rgSCHUtlGetUeANFdbkInfo */
-
-/**
- * @brief To get downlink slot index
- *
- * @details
- *
- *     Function: rgSCHUtlGetDlSfIdx
- *     Purpose:  Gets downlink slot index based on SFN and slot no
- *
- *  @param[in]  CmLteTimingInfo  *timeInfo
- *  @param[in]  RgSchCellCb         *cell
- *  @return uint8_t
- *
- **/
-uint8_t  rgSCHUtlGetDlSfIdx(RgSchCellCb  *cell,CmLteTimingInfo *timeInfo)
-{
-   uint16_t       idx = 0;
-
-   idx = RGSCH_NUM_SUB_FRAMES - \
-         rgSchTddNumUlSubfrmTbl[cell->ulDlCfgIdx][RGSCH_NUM_SUB_FRAMES-1];
-   idx = ((idx * timeInfo->sfn) + \
-         rgSchTddNumDlSubfrmTbl[cell->ulDlCfgIdx][timeInfo->slot]) - 1;
-   idx = idx % cell->numDlSubfrms;
-
-   return ((uint8_t)idx);
-}
-
-/**
- * @brief To get the next downlink slot
- *
- * @details
- *
- *     Function: rgSCHUtlGetNxtDlSfInfo
- *     Purpose:  Gets next downlink slot based on current DL slot
- *
- *  @param[in]  CmLteTimingInfo  curDlTime
- *  @param[in]  RgSchCellCb      *cell
- *  @param[in]  RgSchDlSf        *dlSf
- *  @param[in]  RgSchDlSf        **nxtDlsf
- *  @param[in]  CmLteTimingInfo  *nxtDlTime
- *  @return uint8_t
- *
- **/
-Void rgSCHUtlGetNxtDlSfInfo(CmLteTimingInfo curDlTime,RgSchCellCb  *cell,RgSchDlSf *dlSf,RgSchDlSf **nxtDlsf,CmLteTimingInfo *nxtDlTime)
-{
-   uint16_t  idx = curDlTime.slot;
-   uint8_t   count = 0;
-
-   while(TRUE)
-   {
-      do
-      {
-         idx = (idx + 1) % RGSCH_NUM_SUB_FRAMES;
-         count++;
-      }while(rgSchTddUlDlSubfrmTbl[cell->ulDlCfgIdx][idx]
-                                       != RG_SCH_TDD_DL_slot);
-      RG_SCH_ADD_TO_CRNT_TIME(curDlTime, (*nxtDlTime), count);
-      *nxtDlsf = rgSCHUtlSubFrmGet(cell, *nxtDlTime);
-      if(dlSf->dlFdbkInfo.slot != (*nxtDlsf)->dlFdbkInfo.slot)
-      {
-         break;
-      }
-   }
-   return;
-}
-
-/**
- * @brief To get the previous downlink slot
- *
- * @details
- *
- *     Function: rgSCHUtlGetPrevDlSfInfo
- *     Purpose:  Gets previous downlink slot based on current DL slot
- *
- *  @param[in]  RgSchCellCb      *cell
- *  @param[in]  CmLteTimingInfo  curDlTime
- *  @param[in]  CmLteTimingInfo  *prevDlTime
- *  @param[in]  uint8_t               *numSubfrm
- *  @return uint8_t
- *
- **/
-Void rgSCHUtlGetPrevDlSfInfo(RgSchCellCb *cell,CmLteTimingInfo curDlTime,CmLteTimingInfo *prevDlTime,uint8_t *numSubfrm)
-{
-   S16 idx = curDlTime.slot;
-   uint8_t  count = 0;
-
-   do
-   {
-      idx--;
-      if(idx < 0)
-      {
-         idx = RGSCH_NUM_SUB_FRAMES-1;
-      }
-      count++;
-   }while(rgSchTddUlDlSubfrmTbl[cell->ulDlCfgIdx][idx]
-         !=  RG_SCH_TDD_DL_slot);
-   *numSubfrm = count;
-   RGSCHDECRFRMCRNTTIME(curDlTime, (*prevDlTime), count);
-   return;
-}
-
-#endif
-/* Added Holes Management functions for Adaptive Re transmission */
-/******* </AllocHolesMemMgmnt>: START *****/
-/***********************************************************
- *
- *     Func : rgSCHUtlUlSfInit
- *
- *     Desc : UL slot init.
- *
- *     Ret  : S16
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-S16 rgSCHUtlUlSfInit(RgSchCellCb  *cell,RgSchUlSf *sf,uint8_t idx,uint8_t maxUePerSf)
-{
-   S16             ret=ROK;
-
-   sf->idx = idx;
-#ifdef RG_5GTF
-   uint8_t index;
-#endif
-
-#ifdef LTE_TDD   
-   if(cell->ulDlCfgIdx == 0)
-   {
-      /* Store the Uplink slot number corresponding to the idx */
-      sf->ulSfIdx = rgSchTddCfg0UlSfTbl[idx%6]; 
-   }
-#endif   
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&sf->allocDb,
-                           sizeof(RgSchUlAllocDb));
-   if (ret != ROK)
-   {
-      return (ret);
-   }
-   ret = rgSCHUtlUlAllocDbInit(cell, sf->allocDb, maxUePerSf);
-   if (ret != ROK)
-   {
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(sf->allocDb)),
-                       sizeof(RgSchUlAllocDb));
-      return (ret);
-   }
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&sf->holeDb,
-         sizeof(RgSchUlHoleDb));
-   if (ret != ROK)
-   {
-      rgSCHUtlUlAllocDbDeinit(cell, sf->allocDb);
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(sf->allocDb)),
-                       sizeof(RgSchUlAllocDb));
-      return (ret);
-   }
-   /* Initialize the hole with CFI 1 Pusch Bw Info */ 
-   ret = rgSCHUtlUlHoleDbInit(cell, sf->holeDb, (uint8_t)(maxUePerSf + 2), \
-                              0, cell->dynCfiCb.bwInfo[1].numSb);
-
-   if (ret != ROK)
-   {
-      rgSCHUtlUlAllocDbDeinit(cell, sf->allocDb);
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(sf->allocDb)),
-                       sizeof(RgSchUlAllocDb));
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(sf->holeDb)),
-                       sizeof(RgSchUlHoleDb));
-      return (ret);
-   }
-   cmLListInit(&sf->reTxLst);
-
-   /* Fix ccpu00120610*/
-   sf->allocCountRef = &sf->allocDb->count;
-
-   /* initialize UL available subbands for current sub-frame */
-   sf->availSubbands = cell->dynCfiCb.bwInfo[1].numSb;
-#ifdef RG_5GTF
-   sf->numGrpPerTti = cell->cell5gtfCb.ueGrpPerTti;
-   sf->numUePerGrp = cell->cell5gtfCb.uePerGrpPerTti;
-   for(index = 0; index < MAX_5GTF_BEAMS; index++)
-   {
-      sf->sfBeamInfo[index].totVrbgAllocated = 0;
-      sf->sfBeamInfo[index].totVrbgRequired = 0;
-      sf->sfBeamInfo[index].vrbgStart = 0;
-   }
-#endif
-
-   return (ret);
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlSfDeinit
- *
- *     Desc : Deinitialises a slot
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlSfDeinit(RgSchCellCb  *cell,RgSchUlSf  *sf)
-{
-   if (sf->allocDb)
-   {
-      rgSCHUtlUlAllocDbDeinit(cell, sf->allocDb);
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(sf->allocDb)),
-                       sizeof(RgSchUlAllocDb));
-   }
-   if (sf->holeDb)
-   {
-      rgSCHUtlUlHoleDbDeinit(cell, sf->holeDb);
-      /* ccpu00117052 - MOD - Passing double pointer
-      for proper NULLP assignment*/
-      rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(sf->holeDb)),
-                       sizeof(RgSchUlHoleDb));
-   }
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocDbInit
- *
- *     Desc : Initialise allocation DB
- *
- *     Ret  : S16 (ROK/RFAILED)
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-static S16 rgSCHUtlUlAllocDbInit(RgSchCellCb *cell,RgSchUlAllocDb *allocDb,uint8_t maxAllocs)
-{
-   S16 ret = rgSCHUtlUlAllocMemInit(cell, &allocDb->mem, maxAllocs);
-   if (ret != ROK)
-   {
-      return (ret);
-   }
-   allocDb->count = 0;
-   allocDb->first = NULLP;
-   return ROK;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocDbDeinit
- *
- *     Desc : Deinitialises allocation DB
- *            sent to UE, for a UE with accumulation disabled
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-static Void rgSCHUtlUlAllocDbDeinit(RgSchCellCb *cell,RgSchUlAllocDb *allocDb)
-{
-   rgSCHUtlUlAllocMemDeinit(cell, &allocDb->mem);
-   allocDb->count = 0;
-   allocDb->first = NULLP;
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleDbInit
- *
- *     Desc : Initialise hole DB
- *
- *     Ret  : S16 (ROK/RFAILED)
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-static S16 rgSCHUtlUlHoleDbInit(RgSchCellCb *cell,RgSchUlHoleDb *holeDb,uint8_t maxHoles,uint8_t start,uint8_t num)
-{
-   S16 ret;
-   RgSchUlHole *hole = NULLP;
-
-   ret = rgSCHUtlUlHoleMemInit(cell, &holeDb->mem, maxHoles, &hole);
-   if (ret != ROK)
-   {
-      return (ret);
-   }
-   holeDb->count = 1;
-   holeDb->first = hole;
-   hole->start = start;
-   hole->num = num;
-   hole->prv = hole->nxt = NULLP;
-   return ROK;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleDbDeinit
- *
- *     Desc : Deinitialises hole DB
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-static Void rgSCHUtlUlHoleDbDeinit(RgSchCellCb   *cell,RgSchUlHoleDb *holeDb)
-{
-   rgSCHUtlUlHoleMemDeinit(cell, &holeDb->mem);
-   holeDb->count = 0;
-   holeDb->first = NULLP;
-   return;
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocGetHole
- *
- *     Desc : Get allocation from hole
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocGetHole(RgSchUlSf *sf,uint8_t numSb,RgSchUlHole *hole)
-{
-   if (numSb < hole->num)
-   {
-      return (rgSCHUtlUlAllocGetPartHole(sf, numSb, hole));
-   }
-   else
-   {
-      return (rgSCHUtlUlAllocGetCompHole(sf, hole));
-   }
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocGetCompHole
- *
- *     Desc : Get an allocation corresponding to an entire hole
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocGetCompHole(RgSchUlSf   *sf,RgSchUlHole *hole)
-{
-   RgSchUlAlloc *alloc;
-      /* alloc = rgSCHUtlUlAllocGetAndIns(sf->allocDb, hole->prvAlloc, hole->nxtAlloc); */
-   /* Calling rgSchCmnUlAllocGetAndIns is ok, but prv alloc needs to have nxtHole
-    * updated, causing another check for prv */
-   RgSchUlAlloc *prv = hole->prvAlloc;
-   RgSchUlAlloc *nxt = hole->nxtAlloc;
-
-   if (prv)
-   {
-      if (hole->start == prv->nxtHole->start)
-      {
-         prv->nxtHole = NULLP;
-      }
-      alloc = rgSCHUtlUlAllocGetAdjNxt(sf->allocDb, prv);
-   }
-   else
-   {
-      alloc = rgSCHUtlUlAllocGetFirst(sf->allocDb);
-   }
-
-   RGSCH_NULL_CHECK( 0, alloc);
-   alloc->prvHole = NULLP;
-   alloc->nxtHole = NULLP;
-
-   alloc->sbStart = hole->start;
-   alloc->numSb = hole->num;
-
-   if (nxt)
-   {
-      nxt->prvHole = NULLP;
-   }
-
-   rgSCHUtlUlHoleRls(sf->holeDb, hole);
-
-   /* UL_ALLOC_CHANGES*/
-   alloc->allocDbRef = (void*)sf->allocDb;
-   alloc->holeDbRef  = (void*)sf->holeDb;
-   return (alloc);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocGetPartHole
- *
- *     Desc : Get an allocation corresponding to a part of a hole.
- *            The initial 'numSb' part of the hole shall be taken
- *            away for this alloc.
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocGetPartHole(RgSchUlSf *sf,uint8_t numSb,RgSchUlHole *hole)
-{
-   RgSchUlAlloc *alloc;
-      /* alloc = rgSCHUtlUlAllocGetAndIns(sf->allocDb, hole->prvAlloc, hole->nxtAlloc); */
-   /* Calling rgSchCmnUlAllocGetAndIns is ok, but prv alloc needs to have nxtHole
-    * updated, causing another check for prv */
-   RgSchUlAlloc *prv = hole->prvAlloc;
-
-   if (prv)
-   {
-      if (hole->start == prv->nxtHole->start)
-      {
-         prv->nxtHole = NULLP;
-      }
-      alloc = rgSCHUtlUlAllocGetAdjNxt(sf->allocDb, prv);
-   }
-   else
-   {
-      alloc = rgSCHUtlUlAllocGetFirst(sf->allocDb);
-   }
-
-   RGSCH_NULL_CHECK( 0, alloc);
-   alloc->prvHole = NULLP;
-   alloc->nxtHole = hole;
-   hole->prvAlloc = alloc;
-
-   alloc->sbStart = hole->start;
-   alloc->numSb = numSb;
-   hole->start += numSb;
-   hole->num -= numSb;
-
-   rgSCHUtlUlHoleDecr(sf->holeDb, hole);
-
-   /* UL_ALLOC_CHANGES*/
-   alloc->allocDbRef = (void*)sf->allocDb;
-   alloc->holeDbRef  = (void*)sf->holeDb;
-
-   return (alloc);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocFirst
- *
- *     Desc : Get first alloc in slot
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocFirst(RgSchUlSf *sf)
-{
-   return (sf->allocDb->first);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocNxt
- *
- *     Desc : Get next alloc
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocNxt(RgSchUlSf    *sf,RgSchUlAlloc *alloc)
-{
-   UNUSED(sf);
-   return (alloc->nxt);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocGetAdjNxt
- *
- *     Desc : Get alloc which is immediately after the passed one.
- *            1. Gets alloc from mem.
- *            2. Inserts alloc into list (between prv and
- *                prv->nxt, prv is not NULLP).
- *            3. Increments alloc count.
- *            Note 1: Holes are not dealt with here.
- *            Note 2: Assumes prv to be NULL.
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocGetAdjNxt(RgSchUlAllocDb *db,RgSchUlAlloc   *prv)
-{
-   RgSchUlAlloc *alloc = rgSCHUtlUlAllocMemGet(&db->mem);
-   RgSchUlAlloc *nxt = prv->nxt;
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if ( alloc == NULLP )
-   {
-       return  ( NULLP );
-   }
-#endif
-   alloc->prv = prv;
-   alloc->nxt = nxt;
-   prv->nxt = alloc;
-   if (nxt)
-   {
-      nxt->prv = alloc;
-   }
-
-   ++db->count;
-
-   return (alloc);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocGetFirst
- *
- *     Desc : Get alloc which is to be the first one in the alloc list
- *            1. Gets alloc from mem.
- *            2. Inserts alloc as first element into list.
- *            3. Increments alloc count.
- *            Note 1: Holes are not dealt with here.
- *            Note 2: prv to necessarily NULLP.
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocGetFirst(RgSchUlAllocDb *db)
-{
-   RgSchUlAlloc *alloc = rgSCHUtlUlAllocMemGet(&db->mem);
-   RgSchUlAlloc *nxt = db->first;
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-    if ( alloc == NULLP )
-    {
-       return  ( NULLP );
-    }
-#endif
-
-   alloc->prv = NULLP;
-   alloc->nxt = nxt;
-   if (nxt)
-   {
-      nxt->prv = alloc;
-   }
-   db->first = alloc;
-
-   ++db->count;
-
-   return (alloc);
-}
-
-/* UL_ALLOC_ENHANCEMENT */
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleAddAllocation
- *
- *     Desc : On freeing an alloc, add to hole
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleAddAllocation(RgSchUlAlloc *alloc)
-{
-   /* Note: rgSchCmnUlHoleUpdAllocLnks function that is used should not exist as
-    * one, if such excessive branching is done (AllocNone, AllocNoPrv etc).
-    * The excessive branching is meant to utilise the knowledge of whether prv
-    * and nxt allocs exist or not. Hence for each kind (none, noprv, nonxt,
-    * both), there should be a rgSchCmnUlHoleUpdAllocLnks... function (such as
-    * rgSchCmnUlHoleUpdAllocLnksNone/NoPrv etc. */
-   RgSchUlHoleDb *db = alloc->holeDbRef;
-   RgSchUlHole *prv = alloc->prvHole;
-   RgSchUlHole *nxt = alloc->nxtHole;
-
-   if (prv)
-   {
-      if (nxt)
-      {
-         rgSCHUtlUlHoleJoin(db, prv, nxt, alloc);
-      }
-      else
-         rgSCHUtlUlHoleExtndRight(db, prv, alloc);
-   }
-   else
-   {
-      if (nxt)
-      {
-         rgSCHUtlUlHoleExtndLeft(db, nxt, alloc);
-      }
-      else
-         rgSCHUtlUlHoleNew(db, alloc);
-   }
-   return;
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocRelease
- *
- *     Desc : Releases an uplink allocation, only take alloc ptr
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlAllocRelease(RgSchUlAlloc *alloc)
-{
-   RgSchUlAllocDb *allocDb = alloc->allocDbRef;
-   RgSchUlAlloc   *prv = alloc->prv;
-   RgSchUlAlloc   *nxt = alloc->nxt;
-
-   alloc->ue = NULLP;
-   alloc->raCb = NULLP;
-   alloc->isAdaptive = FALSE;
-
-   if (prv)
-   {
-      prv->nxt = nxt;
-      if (nxt)           /* general case: this allocation lies btw two */
-      {
-         nxt->prv = prv;
-      }
-   }
-   else
-   {
-      allocDb->first = nxt;
-      if (nxt)
-      {
-         nxt->prv = NULLP;
-      }
-   }
-   --allocDb->count;
-   rgSCHUtlUlHoleAddAllocation(alloc);
-   rgSCHUtlUlAllocMemRls(&allocDb->mem, alloc);
-
-   return;
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocRls
- *
- *     Desc : Releases an uplink allocation
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlAllocRls(RgSchUlSf *sf,RgSchUlAlloc *alloc)
-{
-   RgSchUlAllocDb *allocDb = sf->allocDb;
-   RgSchUlAlloc   *prv = alloc->prv;
-   RgSchUlAlloc   *nxt = alloc->nxt;
-
-   alloc->ue = NULLP;
-   alloc->raCb = NULLP;
-   alloc->isAdaptive = FALSE;
-
-   if(allocDb->count)
-   {
-      if (prv)
-      {
-         prv->nxt = nxt;
-         if (nxt)           /* general case: this allocation lies btw two */
-         {
-            nxt->prv = prv;
-         }
-      }
-      else
-      {
-         allocDb->first = nxt;
-         if (nxt)
-         {
-            nxt->prv = NULLP;
-         }
-      }
-      --allocDb->count;
-      rgSCHUtlUlHoleAddAlloc(sf, alloc);
-      rgSCHUtlUlAllocMemRls(&allocDb->mem, alloc);
-   }
-   else
-   {
-
-      DU_LOG("\nERROR  -->  SCH :  allocDb->count is ZERO ");
-   }
-
-   //DU_LOG("\nallocDb->count:%u\n",allocDb->count);
-
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleFirst
- *
- *     Desc : Get first (largest) hole
- *
- *     Ret  : RgSchUlHole *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlHole *rgSCHUtlUlHoleFirst(RgSchUlSf *sf)
-{
-   return (sf->holeDb->first);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleNxt
- *
- *     Desc : Get next largest hole
- *
- *     Ret  : RgSchUlHole *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlHole *rgSCHUtlUlHoleNxt(RgSchUlSf   *sf,RgSchUlHole *hole)
-{
-   UNUSED(sf);
-   return (hole->nxt);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleAddAlloc
- *
- *     Desc : On freeing an alloc, add to hole
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleAddAlloc(RgSchUlSf *sf,RgSchUlAlloc *alloc)
-{
-   /* Note: rgSchCmnUlHoleUpdAllocLnks function that is used should not exist as
-    * one, if such excessive branching is done (AllocNone, AllocNoPrv etc).
-    * The excessive branching is meant to utilise the knowledge of whether prv
-    * and nxt allocs exist or not. Hence for each kind (none, noprv, nonxt,
-    * both), there should be a rgSchCmnUlHoleUpdAllocLnks... function (such as
-    * rgSchCmnUlHoleUpdAllocLnksNone/NoPrv etc. */
-   RgSchUlHoleDb *db = sf->holeDb;
-   RgSchUlHole *prv = alloc->prvHole;
-   RgSchUlHole *nxt = alloc->nxtHole;
-
-   if (prv)
-   {
-      if (nxt)
-      {
-         rgSCHUtlUlHoleJoin(db, prv, nxt, alloc);
-      }
-      else
-         rgSCHUtlUlHoleExtndRight(db, prv, alloc);
-   }
-   else
-   {
-      if (nxt)
-      {
-         rgSCHUtlUlHoleExtndLeft(db, nxt, alloc);
-      }
-      else
-         rgSCHUtlUlHoleNew(db, alloc);
-   }
-
-   /* increment the number of subbands getting freed to total available list */
-   sf->availSubbands += alloc->numSb;
-
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleJoin
- *
- *     Desc : Join two holes (due to alloc being deleted)
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleJoin(RgSchUlHoleDb *db,RgSchUlHole *prv,RgSchUlHole *nxt,RgSchUlAlloc *alloc)
-{
-   prv->num += alloc->numSb + nxt->num;
-   rgSCHUtlUlHoleRls(db, nxt);
-   rgSCHUtlUlHoleIncr(db, prv);
-   rgSCHUtlUlHoleUpdAllocLnks(prv, alloc->prv, alloc->nxt);
-
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleExtndRight
- *
- *     Desc : Extend hole due to alloc coming 'after' the hole
- *            being deleted
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleExtndRight(RgSchUlHoleDb *db,RgSchUlHole *prv,RgSchUlAlloc *alloc)
-{
-   prv->num += alloc->numSb;
-   rgSCHUtlUlHoleIncr(db, prv);
-   rgSCHUtlUlHoleUpdAllocLnks(prv, alloc->prv, alloc->nxt);
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleExtndLeft
- *
- *     Desc : Extend hole due to alloc coming 'before' the hole
- *            being deleted
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleExtndLeft(RgSchUlHoleDb *db,RgSchUlHole   *nxt,RgSchUlAlloc  *alloc)
-{
-   nxt->num += alloc->numSb;
-   nxt->start = alloc->sbStart;
-   rgSCHUtlUlHoleIncr(db, nxt);
-   rgSCHUtlUlHoleUpdAllocLnks(nxt, alloc->prv, alloc->nxt);
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleNew
- *
- *     Desc : Create new hole due to alloc being deleted
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleNew(RgSchUlHoleDb *db,RgSchUlAlloc  *alloc)
-{
-   RgSchUlHole *hole = rgSCHUtlUlHoleMemGet(&db->mem);
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if ( hole == NULLP )
-   {
-      return;
-   }
-#endif
-   hole->start = alloc->sbStart;
-   hole->num = alloc->numSb;
-   ++db->count;
-   rgSCHUtlUlHoleIns(db, hole);
-   rgSCHUtlUlHoleUpdAllocLnks(hole, alloc->prv, alloc->nxt);
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleUpdAllocLnks
- *
- *     Desc : Update alloc links in hole
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleUpdAllocLnks(RgSchUlHole  *hole,RgSchUlAlloc *prvAlloc,RgSchUlAlloc *nxtAlloc)
-{
-   if (prvAlloc)
-   {
-      prvAlloc->nxtHole = hole;
-   }
-   if (nxtAlloc)
-   {
-      nxtAlloc->prvHole = hole;
-   }
-   hole->prvAlloc = prvAlloc;
-   hole->nxtAlloc = nxtAlloc;
-   return;
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleIns
- *
- *     Desc : Insert (newly created) hole in sorted list of holes.
- *            Searches linearly, beginning with the largest hole.
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleIns(RgSchUlHoleDb *db,RgSchUlHole   *hole)
-{
-   RgSchUlHole *cur;
-
-   if ((cur = db->first) != NULLP)
-   {
-      RgSchUlHole *nxt;
-      if (cur->num < hole->num)
-      {
-         /* Add at front */
-         hole->nxt = cur;
-         cur->prv = hole;
-         db->first = hole;
-         hole->prv = NULLP;
-         return;
-      }
-
-      for (nxt = cur->nxt; nxt; cur = nxt, nxt = nxt->nxt)
-      {
-         if (nxt->num < hole->num)
-         {
-            /* Insert hole:  cur <-> hole <-> nxt */
-            cur->nxt = hole;
-            hole->prv = cur;
-            hole->nxt = nxt;
-            nxt->prv = hole;
-            return;
-         }
-      }
-
-      /* Add at end */
-      cur->nxt = hole;
-      hole->prv = cur;
-      hole->nxt = NULLP;
-      return;
-   }
-
-   /* This is the first hole */
-   db->first = hole;
-   hole->prv = NULLP; /* may not be needed */
-   hole->nxt = NULLP;
-   return;
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleIncr
- *
- *     Desc : hole->num has increeased, reposition in sorted
- *            list if needed
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleIncr(RgSchUlHoleDb *db,RgSchUlHole   *hole)
-{
-   RgSchUlHole *cur;
-
-   if ((cur = hole->prv) != NULLP)
-   {
-      RgSchUlHole *prv;
-
-      if (cur->num > hole->num)
-      {
-         return;
-      }
-
-      /* Remove hole from current position */
-      cur->nxt = hole->nxt;
-      if (hole->nxt)
-      {
-         hole->nxt->prv = cur;
-      }
-
-      for (prv = cur->prv; prv; cur = prv, prv = prv->prv)
-      {
-         if (prv->num > hole->num)
-         {
-            /* Insert hole:  prv <-> hole <-> cur */
-            prv->nxt = hole;
-            hole->prv = prv;
-            hole->nxt = cur;
-            cur->prv = hole;
-            return;
-         }
-      }
-
-      /* Add at front */
-      hole->nxt = cur;
-      cur->prv = hole;
-      db->first = hole;
-      hole->prv = NULLP;
-      return;
-   }
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleDecr
- *
- *     Desc : hole->num has decreeased, reposition in sorted
- *            list if needed
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleDecr(RgSchUlHoleDb *db,RgSchUlHole   *hole)
-{
-   RgSchUlHole *cur;
-
-   if ((cur = hole->nxt) != NULLP)
-   {
-      RgSchUlHole *nxt;
-
-      if (cur->num < hole->num)
-      {
-         return;
-      }
-
-      /* Remove hole from current position */
-      cur->prv = hole->prv;
-      if (hole->prv)
-      {
-         hole->prv->nxt = cur;
-      }
-      else /* no prv, so cur to replace hole as first in list */
-      {
-         db->first = cur;
-      }
-
-      for (nxt = cur->nxt; nxt; cur = nxt, nxt = nxt->nxt)
-      {
-         if (nxt->num < hole->num)
-         {
-            /* Insert hole:  cur <-> hole <-> nxt */
-            cur->nxt = hole;
-            hole->prv = cur;
-            hole->nxt = nxt;
-            nxt->prv = hole;
-            return;
-         }
-      }
-
-      /* Add at end */
-      cur->nxt = hole;
-      hole->prv = cur;
-      hole->nxt = NULLP;
-      return;
-   }
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleRls
- *
- *     Desc : Releases hole.
- *            1. Decrements hole count.
- *            2. Deletes hole from list.
- *            3. Frees hole (hole memory release).
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleRls(RgSchUlHoleDb *db,RgSchUlHole   *hole)
-{
-   RgSchUlHole *prv = hole->prv;
-   RgSchUlHole *nxt = hole->nxt;
-
-   --db->count;
-   if (prv)
-   {
-      prv->nxt = nxt;
-      if (nxt)
-      {
-         nxt->prv = prv;
-      }
-   }
-   else
-   {
-      db->first = nxt;
-      if (nxt)
-      {
-         nxt->prv = NULLP;
-      }
-   }
-
-   rgSCHUtlUlHoleMemRls(&db->mem, hole);
-   return;
-}
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocMemInit
- *
- *     Desc : Initialises alloc free pool
- *
- *     Ret  : S16 (ROK/RFAILED)
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-S16 rgSCHUtlUlAllocMemInit(RgSchCellCb *cell,RgSchUlAllocMem *mem,uint8_t maxAllocs)
-{
-   S16 ret;
-   RgSchUlAlloc *allocs;
-
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&allocs,
-                           maxAllocs * sizeof(*allocs));
-   if (ret != ROK)
-   {
-      return (ret);
-   }
-   mem->allocs = allocs;
-   mem->maxAllocs = maxAllocs;
-   if (mem->maxAllocs == 1)
-   {
-      allocs[0].prv = NULLP;
-      allocs[0].nxt = NULLP;
-   }
-   else
-   {
-      uint8_t i;
-      allocs[0].prv = NULLP;
-      allocs[0].nxt = &allocs[1];
-      for (i = 1; i < mem->maxAllocs - 1; ++i)
-      {
-         allocs[i].prv = &allocs[i-1];
-         allocs[i].nxt = &allocs[i+1];
-      }
-      allocs[i].prv = &allocs[i-1];
-      allocs[i].nxt = NULLP;
-   }
-   mem->firstFree = &allocs[0];
-   return ROK;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocMemDeinit
- *
- *     Desc : Deinitialises alloc free pool
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlAllocMemDeinit(RgSchCellCb     *cell,RgSchUlAllocMem *mem)
-{
-   /* ccpu00117052 - MOD - Passing double pointer
-   for proper NULLP assignment*/
-   rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(mem->allocs)),
-                    mem->maxAllocs * sizeof(*mem->allocs));
-   mem->maxAllocs = 0;
-   mem->firstFree = NULLP;
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleMemInit
- *
- *     Desc : Initialises hole free pool. Assumes maxHoles
- *            to be at least 2.
- *
- *     Ret  : S16 (ROK/RFAILED)
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-S16 rgSCHUtlUlHoleMemInit(RgSchCellCb  *cell,RgSchUlHoleMem *mem,uint8_t  maxHoles,RgSchUlHole **holeRef)
-{
-   S16 ret;
-   RgSchUlHole *holes;
-
-   ret = rgSCHUtlAllocSBuf(cell->instIdx, (Data **)&holes,
-                           maxHoles * sizeof(*holes));
-   if (ret != ROK)
-   {
-      return (ret);
-   }
-
-   mem->holes = holes;
-   mem->maxHoles = maxHoles;
-
-   /* first hole is taken up */
-   holes[0].prv = NULLP; /* not needed */
-   holes[0].nxt = NULLP; /* not needed */
-   *holeRef = &holes[0];
-
-   if (mem->maxHoles == 2)
-   {
-      holes[1].prv = NULLP; /* may not be needed */
-      holes[1].nxt = NULLP; /* may not be needed */
-   }
-   else
-   {
-      uint8_t i;
-      holes[1].prv = NULLP;
-      holes[0].nxt = &holes[1];
-      for (i = 1; i < mem->maxHoles - 1; ++i)
-      {
-         holes[i].prv = &holes[i-1];
-         holes[i].nxt = &holes[i+1];
-      }
-      holes[i].prv = &holes[i-1];
-      holes[i].nxt = NULLP;
-   }
-   mem->firstFree = &holes[1];
-
-   return ROK;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleMemDeinit
- *
- *     Desc : Deinitialises hole free pool
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleMemDeinit(RgSchCellCb  *cell,RgSchUlHoleMem *mem)
-{
-   /* ccpu00117052 - MOD - Passing double pointer
-   for proper NULLP assignment*/
-   rgSCHUtlFreeSBuf(cell->instIdx, (Data **)(&(mem->holes)),
-                    mem->maxHoles * sizeof(*mem->holes));
-   mem->maxHoles = 0;
-   mem->firstFree = NULLP;
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocMemGet
- *
- *     Desc : Gets an 'alloc' from the free pool
- *
- *     Ret  : RgSchUlAlloc *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlAlloc *rgSCHUtlUlAllocMemGet(RgSchUlAllocMem *mem)
-{
-   RgSchUlAlloc *alloc;
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if (mem->firstFree == NULLP)
-   {
-      return (NULLP);
-   }
-#endif
-
-   alloc = mem->firstFree;
-   mem->firstFree = alloc->nxt;
-   alloc->nxt = NULLP; /* probably not needed */
-   /* alloc->prv might already be NULLP, in case was needed to set it to NULLP */
-
-   return (alloc);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlAllocMemRls
- *
- *     Desc : Returns an 'alloc' to the free pool
- *
- *     Ret  :
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlAllocMemRls(RgSchUlAllocMem *mem,RgSchUlAlloc  *alloc)
-{
-   alloc->prv = NULLP;
-
-   alloc->nxt = mem->firstFree;
-   if (mem->firstFree != NULLP)
-   {
-      mem->firstFree->prv = alloc;
-   }
-   mem->firstFree = alloc;
-   return;
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleMemGet
- *
- *     Desc : Gets a 'hole' from the free pool
- *
- *     Ret  : RgSchUlHole *
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-RgSchUlHole *rgSCHUtlUlHoleMemGet(RgSchUlHoleMem *mem)
-{
-   RgSchUlHole *hole;
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-   if (mem->firstFree == NULLP)
-   {
-      return (NULLP);
-   }
-#endif
-
-   hole = mem->firstFree;
-   mem->firstFree = hole->nxt;
-   mem->firstFree->prv = NULLP; /* may not be needed, under error class */
-   hole->nxt = NULLP; /* probably not needed */
-   /* hole->prv is might already be NULLP, in case was needed to set it to NULLP */
-
-   return (hole);
-}
-
-/***********************************************************
- *
- *     Func : rgSCHUtlUlHoleMemRls
- *
- *     Desc : Returns a 'hole' to the free pool
- *
- *     Ret  : Void
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-Void rgSCHUtlUlHoleMemRls(RgSchUlHoleMem *mem,RgSchUlHole    *hole)
-{
-   hole->prv = NULLP;
-
-   hole->nxt = mem->firstFree;
-   if (mem->firstFree != NULLP)
-   {
-      mem->firstFree->prv = hole;
-   }
-   mem->firstFree = hole;
-   return;
-}
-
-/**
- * @brief Get an alloc from the specified position in the BW.
- *
- * @details
- *
- *     Function : rgSCHUtlUlGetSpfcAlloc
- *
- *      - Return an alloc from the specified position in the BW.
- *        Note: This function assumes there is always a hole
- *              Existing which completely has the specified
- *              allocation. The reason for such an assumption is
- *              the function's usage as of now guarantees that there
- *              will always be such hole. And also for efficiency.
- *
- *  @param[in]  RgSchUlSf     *sf
- *  @param[in]  uint8_t            startSb
- *  @param[in]  uint8_t            numSb
- *  @return  RgSchUlAlloc*
- **/
-RgSchUlAlloc *rgSCHUtlUlGetSpfcAlloc(RgSchUlSf *sf,uint8_t startSb,uint8_t  numSb)
-{
-   RgSchUlHole     *hole, *nxtHole;
-   RgSchUlAlloc    *alloc = NULLP;
-
-   if ((hole = rgSCHUtlUlHoleFirst(sf)) == NULLP)
-   {
-      return (NULLP);
-   }
-   do
-   {
-      nxtHole = rgSCHUtlUlHoleNxt(sf, hole);
-      if ((startSb >= hole->start) &&
-          (startSb+numSb <= hole->start+hole->num))
-      {
-         if (startSb != hole->start)
-         {
-            /* Create a new hole to accomodate Subbands between
-             * hole start and req alloc start */
-            RgSchUlHole *newHole = rgSCHUtlUlHoleMemGet(&(sf->holeDb->mem));
-
-#if (ERRCLASS & ERRCLS_DEBUG)
-            if ( newHole == NULLP )
-            {
-                return ( NULLP );
-            }
-#endif
-            newHole->start = hole->start;
-            newHole->num = startSb - hole->start;
-            hole->start = startSb;
-            /* [ccpu00122847]-MOD- Correctly updating the hole->num */
-            hole->num -= newHole->num;
-            ++(sf->holeDb->count);
-            rgSCHUtlUlHoleIns(sf->holeDb, newHole);
-            newHole->prvAlloc = hole->prvAlloc;
-            if (newHole->prvAlloc)
-            {
-               newHole->prvAlloc->nxtHole = newHole;
-            }
-            if (numSb == hole->num)
-            {
-               alloc = rgSCHUtlUlAllocGetCompHole(sf, hole);
-            }
-            else
-            {
-               alloc = rgSCHUtlUlAllocGetPartHole(sf, numSb, hole);
-            }
-            alloc->prvHole = newHole;
-            newHole->nxtAlloc = alloc;
-         }
-         else /* Hole start and req alloc start are same */
-         {
-            if (numSb == hole->num)
-            {
-               alloc = rgSCHUtlUlAllocGetCompHole(sf, hole);
-            }
-            else
-            {
-               alloc = rgSCHUtlUlAllocGetPartHole(sf, numSb, hole);
-            }
-         }
-         break;
-      }
-   } while ((hole = nxtHole) != NULLP);
-   return (alloc);
-}
-#ifdef LTE_L2_MEAS
-/**
- * @brief  Validates the qci values
- *
- * @details
- *
- *     Function :rgSCHUtlValidateQci
- *
- *  @param[in]  RgSchCellCb     *cellCb
- *  @param[in]  uint8_t              numQci
- *  @param[out] uint8_t              *qci
- *  @return  S16
- *           ROK
- *           RFAILED
- **/
-static S16 rgSCHUtlValidateQci(RgSchCellCb  *cellCb,uint8_t numQci,uint8_t *qci)
-{
-   uint8_t        qciIdx;
-   uint8_t        qciVal;
-
-   for(qciIdx = 0; qciIdx < numQci; qciIdx++)
-   {
-      qciVal = qci[qciIdx];
-      if(qciVal == 0 || qciVal > 9)
-      {
-         return RFAILED;
-      }
-      if(qciVal != cellCb->qciArray[qciVal].qci)
-      {
-         return RFAILED;
-      }
-   }
-
-   return ROK;
-}/* rgSCHUtlValidateQci */
-/**
- * @brief  Validates the measurement request parameters.
- *
- * @details
- *
- *     Function :rgSCHUtlValidateMeasReq
- *
- *  @param[in]  RgSchCellCb        *cellCb
- *  @param[in]  LrgSchMeasReqInfo  *schL2MeasInfo
- *  @param[out] RgSchErrInfo       *err
- *  @return  RgSchUlAlloc*
- **/
-S16 rgSCHUtlValidateMeasReq(RgSchCellCb *cellCb, LrgSchMeasReqInfo *schL2MeasInfo,RgSchErrInfo *err)
-{
-   uint16_t    measType;
-   S16   ret;
-
-   measType = schL2MeasInfo->measType;
-   if((measType == 0) ||
-       measType > 2047)
-   {
-      err->errType = RGSCHERR_SCH_INVALID_MEAS_TYPE;
-      err->errCause = RGSCHERR_SCH_L2MEAS;
-      return RFAILED;
-   }
-   if((schL2MeasInfo->timePrd !=0) &&
-      (measType & LRG_L2MEAS_AVG_PRB_PER_QCI_DL) &&
-      ((schL2MeasInfo->avgPrbQciDl.numQci > LRG_MAX_QCI_PER_REQ)||
-       (schL2MeasInfo->avgPrbQciDl.numQci == 0)))
-   {
-      err->errType = RGSCHERR_SCH_INVALID_PARAM_RANGE;
-      err->errCause = RGSCHERR_SCH_L2MEAS;
-      return RFAILED;
-   }
-   if((schL2MeasInfo->timePrd !=0) &&
-     (measType & LRG_L2MEAS_AVG_PRB_PER_QCI_UL) &&
-      (schL2MeasInfo->avgPrbQciUl.numQci > LRG_MAX_QCI_PER_REQ)) 
-   {
-      err->errType = RGSCHERR_SCH_INVALID_PARAM_RANGE;
-      err->errCause = RGSCHERR_SCH_L2MEAS;
-      return RFAILED;
-   }
-   if((measType & LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_DL) &&
-         ((schL2MeasInfo->nmbActvUeQciDl.numQci > LRG_MAX_QCI_PER_REQ) ||
-          (schL2MeasInfo->nmbActvUeQciDl.sampPrd == 0)||
-          ((schL2MeasInfo->timePrd !=0)&&
-           (schL2MeasInfo->timePrd < schL2MeasInfo->nmbActvUeQciDl.sampPrd)) ||
-         (schL2MeasInfo->nmbActvUeQciDl.sampPrd > LRG_MAX_SAMP_PRD)))
-   {
-      err->errType = RGSCHERR_SCH_INVALID_PARAM_RANGE;
-      err->errCause = RGSCHERR_SCH_L2MEAS;
-      return RFAILED;
-   }
-   if((measType & LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_UL) &&
-      ((schL2MeasInfo->nmbActvUeQciUl.numQci > LRG_MAX_QCI_PER_REQ) ||
-       (schL2MeasInfo->nmbActvUeQciUl.sampPrd == 0)||
-       ((schL2MeasInfo->timePrd !=0) &&
-        (schL2MeasInfo->timePrd < schL2MeasInfo->nmbActvUeQciUl.sampPrd)) ||
-        (schL2MeasInfo->nmbActvUeQciUl.sampPrd > LRG_MAX_SAMP_PRD)))
-   {
-      err->errType = RGSCHERR_SCH_INVALID_PARAM_RANGE;
-      err->errCause = RGSCHERR_SCH_L2MEAS;
-      return RFAILED;
-   }
-   if((schL2MeasInfo->timePrd !=0) &&
-       (measType & LRG_L2MEAS_AVG_PRB_PER_QCI_DL))
-   {
-      RGSCH_ARRAY_BOUND_CHECK(cellCb->instIdx, schL2MeasInfo->avgPrbQciDl.qci,  \
-      (schL2MeasInfo->avgPrbQciDl.numQci));
-      ret  = rgSCHUtlValidateQci(cellCb, schL2MeasInfo->avgPrbQciDl.numQci,
-                                 schL2MeasInfo->avgPrbQciDl.qci);
-      if(ret != ROK)
-      {
-          err->errType = RGSCHERR_SCH_INVALID_QCI_VAL;
-          err->errCause = RGSCHERR_SCH_L2MEAS;
-          return RFAILED;
-      }
-   }
-   return ROK;
-}/* rgSCHUtlValidateMeasReq */
-#endif /* LTE_L2_MEAS */
-/******* </AllocHolesMemMgmnt>: END *****/
-#ifdef RGR_SI_SCH
-/**
- * @brief API for sending SI configuration confirm from Scheduler to RRM
- *
- * @details
- *
- *     Function: rgSCHUtlRgrSiCfgCfm
- *
- *     This API is invoked to send SI configuration confirm from Scheduler
- *     to RRM.
- *     This API fills in Pst structure and SAP Ids and invokes
- *     config confirm API towards RRM.
- *
- *  @param[in]  RgrCfgTransId transId
- *  @param[in]  uint8_t            status
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrSiCfgCfm(Inst instId,SpId  spId,RgrCfgTransId transId,uint8_t status)
-{
-   uint8_t        prntTrans[RGR_CFG_TRANSID_SIZE+1];
-
-   memcpy(prntTrans, transId.trans, RGR_CFG_TRANSID_SIZE);
-   prntTrans[RGR_CFG_TRANSID_SIZE] = '\0';
-   if(RgUiRgrSiCfgCfm(&rgSchCb[instId].rgrSap[spId].sapCfg.sapPst,
-                    rgSchCb[instId].rgrSap[spId].sapCfg.suId,
-                    transId, status) != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrSiCfgCfm: "
-                "RgUiRgrSiCfgCfm Failed ");
-      return RFAILED;
-   }
-
-   return ROK;
-}  /* rgSCHUtlRgrSiCfgCfm */
-
-\f
-/**
- * @brief API for sending Warning SI configuration confirm from 
- * Scheduler to RRM
- *
- * @details
- *
- *
- *     This API is invoked to send Warning SI configuration confirm 
- *     from Scheduler to RRM.
- *     This API fills in Pst structure and SAP Ids and invokes
- *     config confirm API towards RRM.
- *
- *  @param[in]  RgrCfgTransId transId
- *  @param[in]  uint8_t            status
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrWarningSiCfgCfm(Inst instId,SpId spId,uint8_t siId,RgrCfgTransId transId,uint8_t  status)
-{
-   uint8_t        prntTrans[RGR_CFG_TRANSID_SIZE+1];
-
-   memcpy(prntTrans, transId.trans, RGR_CFG_TRANSID_SIZE);
-   prntTrans[RGR_CFG_TRANSID_SIZE] = '\0';
-   
-   if(RgUiRgrWarningSiCfgCfm(&rgSchCb[instId].rgrSap[spId].sapCfg.sapPst,
-                    rgSchCb[instId].rgrSap[spId].sapCfg.suId, 
-                    transId, siId, status) != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrSiCfgCfm: "
-                "RgUiRgrSiCfgCfm Failed ");
-      return RFAILED;
-   }
-
-   return ROK;
-}  /* rgSCHUtlRgrWarningSiCfgCfm */
-
-/***********************************************************
- *
- *     Func : rgSCHUtlPutSiInfo
- *
- *     Desc : Utility Function to deallocate SI information
- *
- *
- *            RFAILED
- *
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-Void rgSCHUtlPutSiInfo(RgSchCellCb *cell)
-{
-   uint8_t    idx = 0;
-   uint32_t   sizeOfSiInfo = 0;
-   /*Free the buffers in crntSiInfo*/
-   RGSCH_FREE_MSG(cell->siCb.crntSiInfo.mib)
-   RGSCH_FREE_MSG(cell->siCb.crntSiInfo.sib1Info.sib1)
-   
-   sizeOfSiInfo = sizeof(cell->siCb.crntSiInfo.siInfo)/sizeof(cell->siCb.crntSiInfo.siInfo[0]);
-   
-   for(idx=0; idx < sizeOfSiInfo; idx++)
-   {
-      RGSCH_FREE_MSG(cell->siCb.crntSiInfo.siInfo[idx].si)
-   }
-
-   /*Free the buffers in newSiInfo */
-   RGSCH_FREE_MSG(cell->siCb.newSiInfo.mib)
-   RGSCH_FREE_MSG(cell->siCb.newSiInfo.sib1Info.sib1)
-
-   sizeOfSiInfo = sizeof(cell->siCb.newSiInfo.siInfo)/sizeof(cell->siCb.newSiInfo.siInfo[0]);
-
-   for(idx=0; idx < sizeOfSiInfo; idx++)
-   {
-      RGSCH_FREE_MSG(cell->siCb.newSiInfo.siInfo[idx].si)
-   }
-
-   return;
-}
-#endif /*RGR_SI_SCH */
-
-
-
-/***********************************************************
- *
- *     Func : rgSCHUtlGetDrxSchdUesInDl
- *
- *     Desc : Utility Function to fill the get the list of
- *            scheduled UEs. On these UE's, drx-inactivity
- *            timer will be started/restarted.
- *
- *     Ret  : ROK
- *            RFAILED
- *
- *     Notes:
- *
- *     File : rg_utl.c
- *
- **********************************************************/
-S16 rgSCHUtlGetDrxSchdUesInDl
-(
-RgSchCellCb     *cellCb,
-RgSchUeCb       *ueCb,
-RgSchDlHqProcCb *dlHq,
-RgInfUeAlloc    *allocInfo,
-CmLListCp       *dlDrxInactvTmrLst,
-CmLListCp       *dlInActvLst,
-CmLListCp       *ulInActvLst
-)
-{
-   Bool                  isNewTx = FALSE;
-   uint8_t                    idx;
-   RgSchDrxDlHqProcCb    *drxHq;
-   RgSchDRXCellCb        *drxCell = cellCb->drxCb;
-   RgSchDrxUeCb          *drxUe;
-   uint8_t                    cellIdx = ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(dlHq->hqE->cell)];
-   uint32_t                   dlInactvMask;
-   uint32_t                   ulInactvMask;
-
-   for(idx = 0; idx < allocInfo->nmbOfTBs; idx++)
-   {
-      if(allocInfo->tbInfo[idx].isReTx == FALSE)
-      {
-         isNewTx = TRUE;
-         /* Removing break here, since in 2 TB case if 2nd TB is proceeding with 
-            retx then drxretx timer should be stopped.*/
-      }
-      else
-      {
-         /*Stop the DRX retransmission timer as UE scheduled for retx. Here
-          * we stop the timer and inactivate the UE for both UL and DL.
-          * This may result in loss of one slot for UL but this trade
-          * off is taken to avoid the overhead of maintaining a list of UEs
-          * to be inactivated in the next slot.*/
-         drxHq = RG_SCH_DRX_GET_DL_HQ(dlHq);
-         drxUe = RG_SCH_DRX_GET_UE(ueCb);
-         if(drxHq->reTxIndx != DRX_INVALID)
-         {  
-            /* This condition should never occur */      
-            if(drxHq->reTxIndx >= RG_SCH_MAX_DRXQ_SIZE)
-            {
-                DU_LOG("\nERROR  -->  SCH : [%d]UE:DRXUE RETX IDX[%d]"
-                        "is out of bound,dlInactvMask %d,procId %d\n", ueCb->ueId,
-                        drxHq->reTxIndx,ueCb->dl.dlInactvMask, dlHq->procId);
-            }
-
-            drxUe->drxDlInactvMaskPerCell[cellIdx]  |= (RG_SCH_DRX_DLHQ_BITMASK << dlHq->procId);
-            drxUe->drxUlInactvMaskPerCell[cellIdx]  |= (RG_SCH_DRX_DLHQ_BITMASK << dlHq->procId);
-
-            dlInactvMask = RG_SCH_DRX_DLHQ_BITMASK << dlHq->procId;
-            ulInactvMask = RG_SCH_DRX_DLHQ_BITMASK << dlHq->procId;
-
-            for(cellIdx = 0; cellIdx < CM_LTE_MAX_CELLS; cellIdx++)
-            {
-               dlInactvMask &= drxUe->drxDlInactvMaskPerCell[cellIdx];
-               ulInactvMask &= drxUe->drxUlInactvMaskPerCell[cellIdx];
-            }
-
-            drxUe->drxDlInactvMask |= dlInactvMask;
-            drxUe->drxUlInactvMask |= ulInactvMask;
-
-            /* if no other condition is keeping ue active,
-             * inactivate the Ue
-             */
-            if(!RG_SCH_DRX_DL_IS_UE_ACTIVE(drxUe))
-            {
-               /* BUG 2 : HARQ_RTT, changed for consistency */
-               ueCb->dl.dlInactvMask |= (RG_DRX_INACTIVE);
-
-               /* Add to DL inactive list */
-               cmLListAdd2Tail(dlInActvLst,&(ueCb->dlDrxInactvLnk));
-               ueCb->dlDrxInactvLnk.node = (PTR)ueCb;
-            }
-
-            if(!RG_SCH_DRX_UL_IS_UE_ACTIVE(drxUe))
-            {
-               /*BUG 2: HARQ_RTT changed for consistency */
-               ueCb->ul.ulInactvMask |= (RG_DRX_INACTIVE);
-
-               cmLListAdd2Tail(ulInActvLst,&(ueCb->ulDrxInactvLnk));
-               ueCb->ulDrxInactvLnk.node  = (PTR)ueCb;
-            }
-
-            /* Deleting entry from HARQ RTT queue for the same HARQ proc, 
-             * if exist. This is the special case which can happen iF UL 
-             * scheduling is done later. */
-            if(drxHq->rttIndx != DRX_INVALID)
-            {
-               cmLListDelFrm (&(cellCb->drxCb->drxQ[drxHq->rttIndx].harqRTTQ),
-                     &(drxHq->harqRTTEnt));
-
-               drxHq->rttIndx = DRX_INVALID;
-            }   
-
-            cmLListDelFrm (&(drxCell->drxQ[drxHq->reTxIndx].harqRetxQ),
-                  &(drxHq->harqRetxEnt));
-            drxHq->reTxIndx = DRX_INVALID;
-         }
-      }
-   }
-
-   if(isNewTx == TRUE)
-   {
-      if(ueCb->drxCb->raRcvd == TRUE)
-      {
-         ueCb->drxCb->raRcvd = FALSE;
-
-         /* mark the ra bit */
-         ueCb->drxCb->drxUlInactvMask |= RG_SCH_DRX_RA_BITMASK;
-         ueCb->drxCb->drxDlInactvMask |= RG_SCH_DRX_RA_BITMASK;
-
-      }/*if(ra->rcvd) == TRUE */
-
-      if(ueCb->dlDrxInactvTmrLnk.node == NULLP)
-      {   
-         cmLListAdd2Tail(dlDrxInactvTmrLst,&(ueCb->dlDrxInactvTmrLnk));
-         ueCb->dlDrxInactvTmrLnk.node = (PTR)ueCb;
-      }
-   }/*if(isNewTx == TRUE) */
-
-   return ROK;
-}/* rgSCHUtlGetSchdUes*/
-\f
-/* ccpu00117452 - MOD - Changed macro name from
-   RGR_RRM_DLPWR_CNTRL to RGR_CQI_REPT */
-#ifdef RGR_CQI_REPT
-/**
- * @brief This function fills StaInd struct
- *
- * @details
- *
- *     Function: rgSCHUtlFillSndStaInd
- *     Purpose:  Fills StaInd struct and sends the
- *               StaInd to RRM
- *
- *  @param[in]  RgSchCellCb        *cell  pointer to Cell Control block
- *  @param[in]  RgSchUeCb          *ue  pointer to Ue Control block
- *  @param[in]  RgrStaIndInfo      *staInfo Sta Ind struct to be filled
- *  @param[in]  uint8_t                 numCqiRept NUmber of reports to be filled
- *  @return  Void
- *
- **/
-S16 rgSCHUtlFillSndStaInd(RgSchCellCb *cell,RgSchUeCb *ue,RgrStaIndInfo *staInfo,uint8_t numCqiRept)
-{
-   uint8_t idxStart;
-
-   /* Fill StaInd for sending collated Latest N CQI rpeorts */
-   /* Find index in the array from where Latest N
-      reports needs to be fetched. Use this value to index in the array
-      and copy the reports into staInfo */
-
-   /* Fill the Cell Id of PCC of the UE */
-   staInfo->cellId = ue->cell->cellId;
-   staInfo->crnti = ue->ueId;
-
-   idxStart = ue->schCqiInfo.cqiCount - numCqiRept;
-
-   memcpy (&(staInfo->ueCqiInfo.cqiRept),
-            &(ue->schCqiInfo.cqiRept[idxStart]),
-            numCqiRept * sizeof(RgrUeCqiRept));
-
-   staInfo->ueCqiInfo.numCqiRept = numCqiRept;
-
-   ue->schCqiInfo.cqiCount = 0;
-
-   /* Call utility function (rgSCHUtlRgrStaInd) to send rpts to RRM */
-   if(rgSCHUtlRgrStaInd(cell, staInfo) != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : Could not send "
-         "CQI reports for RNTI:%d",ue->ueId);
-      return RFAILED;
-   }
-
-   return ROK;
-
-}/* End of rgSCHUtlFillSndStaInd */
-
-
-\f
-/**
- * @brief API for sending STA indication from Scheduler to RRM.
- *
- * @details
- *
- *     Function: rgSCHUtlRgrStaInd
- *
- *     This API is invoked to send STA indication from Scheduler instance to RRM.
- *     This API fills in Pst structure and RgrStaIndInfo
- *     and calls the Sta primitive API towards RRM.
- *
- *  @param[in]  cell                   RgSchCellCb
- *  @param[in]  RgrStsIndInfo          *rgrSta
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrStaInd(RgSchCellCb *cell,RgrStaIndInfo *rgrSta)
-{
-   S16           ret = ROK;
-   RgSchUpSapCb  *rgrSap;                    /*!< RGR SAP Control Block */
-   
-   rgrSap = cell->rgrSap;
-   if (rgrSap->sapSta.sapState != LRG_BND)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrStaInd() Upper SAP not bound (%d) ",
-               rgrSap->sapSta.sapState);
-      return RFAILED;
-   }
-   RgUiRgrStaInd(&(cell->rgrSap->sapCfg.sapPst),
-         cell->rgrSap->sapCfg.suId, rgrSta);
-   return (ret);
-}  /* rgSCHUtlRgrStaInd*/
-#endif /* End of RGR_CQI_REPT */
-
-/* Fix : syed HO UE does not have a valid ue->rntiLnk */
-/**
- * @brief Indicates MAC to release any rnti context it has.
- *
- * @details
- *     Function : rgSCHUtlIndRntiRls2Mac 
- *       This function indicates MAC for this rnti release.
- *       In case of ueId change it will indicate MAC
- *       about the new rnti to be updated.
- *       It will post a release RNTI indication to MAC.
- *     
- *    
- *           
- *  @param[in]     RgSchCellCb    *cell
- *  @param[in]     CmLteRnti      rnti 
- *  @param[in]     Bool           ueIdChng
- *  @param[in]     CmLteRnti      newRnti
- *  @return  Void
- *      -# ROK 
- **/
-Void rgSCHUtlIndRntiRls2Mac(RgSchCellCb *cell,CmLteRnti  rnti,Bool ueIdChng,CmLteRnti newRnti)
-{
-   Pst          pst;
-   Inst         inst = cell->instIdx;
-   RgInfRlsRnti rntiInfo;
-
-
-   /* Copy the info to rntiInfo */
-   rntiInfo.cellId = cell->cellId;
-   rntiInfo.rnti   = rnti;
-   /* Fix : syed ueId change as part of reestablishment.
-    * Now SCH to trigger this. CRG ueRecfg for ueId change 
-    * is dummy */         
-   rntiInfo.ueIdChng = ueIdChng;
-   rntiInfo.newRnti  = newRnti;
-#ifdef LTE_ADV
-   rntiInfo.isUeSCellDel = FALSE;
-#endif
-   /* Invoke MAC to release the rnti */
-   rgSCHUtlGetPstToLyr(&pst, &rgSchCb[inst], cell->macInst);
-   RgSchMacRlsRnti(&pst, &rntiInfo);
-   return;
-}
-
-/* LTE_ADV_FLAG_REMOVED_START */
-/**
- * @brief API for sending LOAD INF indication from Scheduler to RRM.
- * @details
- *
- *     Function: rgSCHUtlRgrLoadInfInd
- *
- *     This API is invoked to send LOAD INF indication from Scheduler instance to RRM.
- *     This API fills in Pst structure and RgrLoadInfIndInfo
- *     and calls the Sta primitive API towards RRM.
- *
- *  @param[in]  cell                    RgSchCellCb
- *  @param[in]  RgrLoadInfIndInfo       *rgrLoadInf
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrLoadInfInd(RgSchCellCb *cell,RgrLoadInfIndInfo *rgrLoadInf)
-{
-   S16           ret = ROK;
-   RgSchUpSapCb  *rgrSap;                    /*!< RGR SAP Control Block */
-
-   rgrSap = cell->rgrSap;
-   if (rgrSap->sapSta.sapState != LRG_BND)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrLoadInfInd() Upper SAP not bound (%d) ",
-               rgrSap->sapSta.sapState);
-      return RFAILED;
-   }
-   RgUiRgrLoadInfInd(&(cell->rgrSap->sapCfg.sapPst),
-         cell->rgrSap->sapCfg.suId, rgrLoadInf);
-   return (ret);
-}  /* rgSCHUtlRgrLoadInfInd*/
-/* LTE_ADV_FLAG_REMOVED_END */
-
-/* MS_FIX : syed SCH to act as MASTER in maintaining
- * rnti related context. Trigger to rnti del/Chng at SCH
- * will result in a Indication to MAC to release its
- * RNTI context. MAC inturn indicates the context cleared
- * indication to SCH, upon which SCH would set this
-/**
- * @brief API for sending STA indication from Scheduler to RRM.
- *
- * @details
- *
- *     Function: rgSCHUtlRlsRnti
- *
- *     This API is invoked to indicate MAC to release rnti
- *
- *  @param[in]  RgSchCellCb    *cellCb                   
- *  @param[in]  RgSchRntiLnk   *rntiLnk,
- *  @param[in]  Bool           ueIdChngd,
- *  @param[in]  CmLteRnti      newRnti
- *  @return  Void
- **/
-
-Void rgSCHUtlRlsRnti(RgSchCellCb *cell,RgSchRntiLnk  *rntiLnk,Bool ueIdChngd,CmLteRnti newRnti)
-{
-
-   uint8_t isLegacy = 0;
-#ifdef EMTC_ENABLE
-   if(cell->emtcEnable)
-   {
-      rgSCHEmtcUtlRlsRnti(cell, rntiLnk, &isLegacy);
-   }
-#endif
-   if(!isLegacy)
-   {
-      /*Add to Guard Pool*/
-      cmLListAdd2Tail(&cell->rntiDb.rntiGuardPool, &rntiLnk->rntiGrdPoolLnk);
-      rntiLnk->rntiGrdPoolLnk.node = (PTR)rntiLnk;
-   }
-   /* Fix: syed Explicitly Inidcate MAC to release RNTI */
-   rgSCHUtlIndRntiRls2Mac(cell, rntiLnk->rnti, ueIdChngd, newRnti);
-
-   return;
-}
-
-
-/**
- * @brief This function fills StaInd struct
- *
- * @details
- *
- *     Function: rgSCHUtlFillSndUeStaInd
- *     Purpose:  Fills StaInd struct and sends the
- *               StaInd to RRM
- *
- *  @param[in]  RgSchCellCb        *cell  pointer to Cell Control block
- *  @param[in]  RgSchUeCb          *ue  pointer to Ue Control block
- *  @param[in]  uint8_t                 numCqiRept NUmber of reports to be filled
- *  @return  Void
- *
- **/
-S16 rgSCHUtlFillSndUeStaInd(RgSchCellCb *cell,RgSchUeCb  *ue,RgrUeStaIndInfo  *ueStaInfo)
-{
-
-   ueStaInfo->cellId = cell->cellId;
-   ueStaInfo->crnti = ue->ueId;
-
-   /* Call utility function (rgSCHUtlRgrUeStaInd) to send rpts to RRM */
-   if(rgSCHUtlRgrUeStaInd(cell, ueStaInfo) != ROK)
-   {
-      DU_LOG("\nERROR  -->  SCH : Could not send "
-         "UE Sta reports CRNTI:%d",ue->ueId);
-      return RFAILED;
-   }
-
-   return ROK;
-
-}/* End of rgSCHUtlFillSndStaInd */
-
-
-\f
-/**
- * @brief API for sending STA indication from Scheduler to RRM.
- *
- * @details
- *
- *     Function: rgSCHUtlRgrStaInd
- *
- *     This API is invoked to send STA indication from Scheduler instance to RRM.
- *     This API fills in Pst structure and RgrStaIndInfo
- *     and calls the Sta primitive API towards RRM.
- *
- *  @param[in]  cell                   RgSchCellCb
- *  @param[in]  RgrStsIndInfo          *rgrSta
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlRgrUeStaInd(RgSchCellCb *cell,RgrUeStaIndInfo *rgrUeSta)
-{
-   S16           ret = ROK;
-   RgSchUpSapCb  *rgrSap;                    /*!< RGR SAP Control Block */
-
-   rgrSap = cell->rgrSap;
-   if (rgrSap->sapSta.sapState != LRG_BND)
-   {
-      DU_LOG("\nERROR  -->  SCH : rgSCHUtlRgrUeStaInd() Upper SAP not bound (%d) ",
-               rgrSap->sapSta.sapState);
-      return RFAILED;
-   }
-   RgUiRgrUeStaInd(&(cell->rgrSap->sapCfg.sapPst),
-         cell->rgrSap->sapCfg.suId, rgrUeSta);
-   return (ret);
-}  /* rgSCHUtlRgrStaInd*/
-
-/* RRM_RBC_X */
-/**
- * @brief function to report DL and UL PRB usage to RRM.
- *
- *
- *     Function: rgSCHUtlUpdAvgPrbUsage
- *               This function sends the PRB usage report to 
- *               RRM with the interval configured by RRM.
- *
- *  @param[in]  cell       *RgSchCellCb
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlUpdAvgPrbUsage(RgSchCellCb  *cell)
-{
-   CmLteTimingInfo  frm;
-   RgmPrbRprtInd    *prbRprtInd;
-   S16              ret = ROK;
-   uint32_t              idx;
-#ifdef DBG_MAC_RRM_PRB_PRINT
-   static uint32_t       count = 0;
-   const uint32_t reprotForEvery20Sec = 20000/cell->prbUsage.rprtPeriod;
-
-   count++;
-#endif
-
-   frm   = cell->crntTime;
-   RGSCH_INCR_SUB_FRAME(frm, RG_SCH_CMN_DL_DELTA);
-
-   uint16_t numDlSf;
-   uint16_t numUlSf;
-#ifdef LTE_TDD
-  
-   if(cell->prbUsage.rprtPeriod >= RGSCH_NUM_SUB_FRAMES)
-   {
-      /* Get the total number of DL and UL slots within the reporting period*/
-      numDlSf = (cell->prbUsage.rprtPeriod * 
-            rgSchTddNumDlSubfrmTbl[cell->ulDlCfgIdx][RGSCH_NUM_SUB_FRAMES-1])
-         / RGSCH_NUM_SUB_FRAMES;
-      numUlSf = (cell->prbUsage.rprtPeriod * 
-            rgSchTddNumUlSubfrmTbl[cell->ulDlCfgIdx][RGSCH_NUM_SUB_FRAMES-1])
-         / RGSCH_NUM_SUB_FRAMES;
-   }
-   else
-   {
-      /* Get the total number of DL and UL slots < 10 ms interval */
-      numDlSf = rgSchTddNumDlSubfrmTbl[cell->ulDlCfgIdx][frm.slot];
-      numUlSf = rgSchTddNumUlSubfrmTbl[cell->ulDlCfgIdx][frm.slot];
-   }
-#else
-     numDlSf = cell->prbUsage.rprtPeriod;
-     numUlSf = cell->prbUsage.rprtPeriod;
-#endif
-
-    SCH_ALLOC(prbRprtInd, sizeof(RgmPrbRprtInd));
-    if(prbRprtInd == NULLP)
-   {
-      DU_LOG("\nERROR  --> SCH : Failed to allocate memory for prbRprtInd");
-      return RFAILED;
-   }
-
-   memset(&prbRprtInd->stQciPrbRpts[0],
-            0,
-            (RGM_MAX_QCI_REPORTS * sizeof(RgmPrbRptPerQci)));
-
-   prbRprtInd->bCellId            = cell->cellId;
-
-   if(numDlSf > 0)
-   {
-      prbRprtInd->bPrbUsageMask |= RGM_PRB_USAGE_DL; 
-      for (idx = 0; idx < RGM_MAX_QCI_REPORTS; idx++ )
-      {
-         prbRprtInd->stQciPrbRpts[idx].bAvgPrbDlUsage  = 
-           RGSCH_DIV_ROUND((cell->prbUsage.qciPrbRpts[idx].dlTotPrbUsed*100),
-                           (numDlSf * cell->bwCfg.dlTotalBw));
-         prbRprtInd->stQciPrbRpts[idx].bQci = cell->prbUsage.qciPrbRpts[idx].qci;
-         cell->prbUsage.qciPrbRpts[idx].dlTotPrbUsed = 0;
-      }
-   }
-
-   if(numUlSf > 0)
-   {
-      prbRprtInd->bPrbUsageMask |= RGM_PRB_USAGE_UL; 
-      for (idx = 0; idx < RGM_MAX_QCI_REPORTS; idx++ )
-      {
-         prbRprtInd->stQciPrbRpts[idx].bAvgPrbUlUsage  = 
-           RGSCH_DIV_ROUND((cell->prbUsage.qciPrbRpts[idx].ulTotPrbUsed*100),
-                           (numUlSf * cell->ulAvailBw));
-         prbRprtInd->stQciPrbRpts[idx].bQci = cell->prbUsage.qciPrbRpts[idx].qci;
-         cell->prbUsage.qciPrbRpts[idx].ulTotPrbUsed = 0;
-      }
-   }
-
-#ifdef DBG_MAC_RRM_PRB_PRINT
-   if((count % reprotForEvery20Sec) == 0 )
-   {
-      DU_LOG("\n====================================================================");
-      DU_LOG("\nINFO  -->  SCH : QCI-1[DL:UL]  | QCI-2[DL:UL]  | QCI-3[DL:UL]  | QCI-4[DL:UL] \n");
-      DU_LOG("======================================================================\n");
-      DU_LOG(" [%d: %d]\t | [%d: %d]\t | [%d: %d]\t| [%d: %d]\t\n", 
-                 prbRprtInd->stQciPrbRpts[0].bAvgPrbDlUsage,
-                 prbRprtInd->stQciPrbRpts[0].bAvgPrbUlUsage,
-                 prbRprtInd->stQciPrbRpts[1].bAvgPrbDlUsage,
-                 prbRprtInd->stQciPrbRpts[1].bAvgPrbUlUsage,
-                 prbRprtInd->stQciPrbRpts[2].bAvgPrbDlUsage,
-                 prbRprtInd->stQciPrbRpts[2].bAvgPrbUlUsage,
-                 prbRprtInd->stQciPrbRpts[3].bAvgPrbDlUsage,
-                 prbRprtInd->stQciPrbRpts[3].bAvgPrbUlUsage);
-   }
-#endif
-   RgUiRgmSendPrbRprtInd(&(cell->rgmSap->sapCfg.sapPst), 
-                    cell->rgmSap->sapCfg.suId, prbRprtInd);
-
-
-   return (ret);
-}
-/* RRM_RBC_Y */
-
-/**
- * @brief This function resends the Ta in case of 
- *        max retx failure or DTX for the Ta transmitted 
- *
- * @details
- *
- *     Function: rgSCHUtlReTxTa
- *     Purpose:  
- *                
- *  @param[in]  RgSchCellCb           *cell
- *  @param[in]  RgSchUeCb             *ue
- *  @return  Void 
- *
- **/
-Void rgSCHUtlReTxTa(RgSchCellCb *cellCb,RgSchUeCb *ueCb)
-{
-
-   /* If TA Timer is running. Stop it */
-   if (ueCb->taTmr.tmrEvnt != TMR_NONE)
-   {
-      rgSCHTmrStopTmr(cellCb, ueCb->taTmr.tmrEvnt, ueCb);
-   }
-   /*[ccpu00121813]-ADD-If maxretx is reached then 
-    * use outstanding TA val for scheduling again */
-   if(ueCb->dl.taCb.outStndngTa == TRUE)
-   {
-      ueCb->dl.taCb.ta = ueCb->dl.taCb.outStndngTaval;
-      ueCb->dl.taCb.outStndngTaval = RGSCH_NO_TA_RQD;
-      ueCb->dl.taCb.outStndngTa = FALSE;
-
-   }
-   /* Fix : syed TA state updation missing */
-   ueCb->dl.taCb.state = RGSCH_TA_TOBE_SCHEDULED;
-   rgSCHUtlDlTARpt(cellCb, ueCb); 
-
-   return;
-}
-
-/* Added function for dropping Paging Message*/
-/**
- * @brief Handler for BO Updt received for BCCH or PCCH.
- *
- * @details
- *
- *     Function : rgSCHChkBoUpdate
- *
- *     This function shall check for BO received falls within the scheduling window or not
- *
- *
- *  @param[in]  RgSchCellCb    *cell
- *  @return  S16
- *      -# ROK 
- *      -# RFAILED
- **/
-static S16 rgSCHChkBoUpdate(RgSchCellCb *cell,RgInfCmnBoRpt  *boUpdt)
-{
-
-   uint32_t crntTimeInSubFrms = 0;
-   uint32_t boUpdTimeInSubFrms = 0;
-   uint32_t distance = 0;
-
-   crntTimeInSubFrms = (cell->crntTime.sfn * RGSCH_NUM_SUB_FRAMES_5G) +  cell->crntTime.slot +
-          RG_SCH_CMN_DL_DELTA + 2;  /* As bo received will scheduled in next TTI
-                                       so incrementing with +1 more */
-   boUpdTimeInSubFrms = (boUpdt->u.timeToTx.sfn * RGSCH_NUM_SUB_FRAMES_5G)+ boUpdt->u.timeToTx.slot;
-
-
-   distance = boUpdTimeInSubFrms > crntTimeInSubFrms ? \
-             boUpdTimeInSubFrms - crntTimeInSubFrms : \
-             (RGSCH_MAX_SUBFRM_5G - crntTimeInSubFrms + boUpdTimeInSubFrms);
-
-   if (distance > RGSCH_PCCHBCCH_WIN)
-   {
-          return RFAILED;
-   }
-   return ROK;
-
-}/*rgSCHChkBoUpdate*/
-
-
-#ifdef LTE_TDD
-/**
- * @brief  Utility function to calculate the UL reTxIdx in TDD cfg0
- *
- * @details
- *
- *     Function : rgSchUtlCfg0ReTxIdx
- *
- *     Update the reTxIdx according to the rules mentioned
- *     in 3GPP TS 36.213 section 8 for TDD Cfg0
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  CmLteTimingInfo  phichTime 
- *  @param[in]  uint8_t               hqFdbkIdx
- *  @return     uint8_t
- **/
-uint8_t rgSchUtlCfg0ReTxIdx(RgSchCellCb    *cell,CmLteTimingInfo phichTime,uint8_t hqFdbkIdx)
-{
-   uint8_t reTxIdx = RGSCH_INVALID_INFO;
-   uint8_t iPhich = 0; 
-   RgSchCmnUlCell  *cellUl = RG_SCH_CMN_GET_UL_CELL(cell);
-   RgSchUlSf       *ulSf;   
-   uint8_t               ulSF; /* UL SF in the TDD frame */
-         
-   ulSf = &cellUl->ulSfArr[hqFdbkIdx];
-   ulSF = ulSf->ulSfIdx;
-    
-   /* Check for the UL SF 4 or 9 */
-   if(ulSF == 9 || ulSF == 4)
-   {
-     iPhich = 1;  
-   }
-   if(phichTime.slot == 0 || phichTime.slot == 5)
-   {    
-      if(iPhich == 0)
-      {
-         /* Retx will happen according to the Pusch k table */
-         reTxIdx = cellUl->schdIdx;
-      }
-      if(iPhich == 1)
-      {
-         /* Retx will happen at n+7 */
-         RGSCHCMNADDTOCRNTTIME(phichTime, phichTime, 7);
-         /* Fetch the corresponding  UL slot Idx in UL sf array */ 
-         reTxIdx = rgSCHCmnGetUlSfIdx(&phichTime, cell);
-      }   
-   }
-   else if(phichTime.slot == 1 || phichTime.slot == 6) 
-   { 
-      /* Retx will happen at n+7 */
-      RGSCHCMNADDTOCRNTTIME(phichTime, phichTime, 7);
-      /* Fetch the corresponding  UL slot Idx in UL sf array */ 
-      reTxIdx = rgSCHCmnGetUlSfIdx(&phichTime, cell);
-   }
-   return (reTxIdx);
-}
-#endif
-
-/**
- * @brief  Utility function to calculate total num of PRBs required to
- *         satisfy DL BO for TM1/TM2/TM6/TM7
- *
- * @details
- *
- *     Function : rgSchUtlDlCalc1CwPrb
- *
- *    Calculate PRBs required for UE to satisfy BO in DL
- *   
- *    Note : Total calculated PRBs will be assigned to *prbReqrd
- *    
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue 
- *  @param[in]  uint32_t              bo 
- *  @param[out] uint32_t             *prbReqrd 
- *  @return Void
- **/
-Void rgSchUtlDlCalc1CwPrb(RgSchCellCb *cell,RgSchUeCb *ue,uint32_t bo,uint32_t  *prbReqrd)
-{
-   RgSchCmnDlCell *dlCell  = RG_SCH_CMN_GET_DL_CELL(cell); 
-   RgSchCmnDlUe   *dlUe  = RG_SCH_CMN_GET_DL_UE(ue, cell); 
-   uint32_t       eff;
-   uint32_t       noRes;
-   uint8_t        iTbs;
-   uint8_t        cfi = dlCell->currCfi;               
-
-   iTbs  = dlUe->mimoInfo.cwInfo[0].iTbs[0];
-   eff   = (*(RgSchCmnTbSzEff *)(dlCell->cqiToEffTbl[0][cfi]))[iTbs];
-
-   /* Optimization to convert totalBo (which is in-terms of bytes) to bits 
-    * i.e, << 3 and multiply with 1024 i.e, << 10 */
-   noRes = ((uint64_t)((bo << 3) << 10)) / (eff);
-   /* Get the number of RBs needed for this transmission */
-   /* Number of RBs = No of REs / No of REs per RB       */
-   *prbReqrd = RGSCH_CEIL(noRes, dlCell->noResPerRb[cfi]);
-
-   return;
-} /* rgSchUtlDlCalc1CwPrb*/
-
-/**
- * @brief  Utility function to calculate total num of PRBs required to
- *         satisfy DL BO(BO sum of all logical channels for that UE or an LC BO)
- *         for TM3/TM4
- *
- * @details
- *
- *     Function : rgSchUtlDlCalc2CwPrb
- *
- *    Calculate PRBs required for UE to satisfy BO in DL
- *   
- *    Note : Total calculated PRBs will be assigned to *prbReqrd
- *    
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue 
- *  @param[in]  uint32_t              bo 
- *  @param[out] uint32_t             *prbReqrd 
- *  @return Void
- **/
-Void rgSchUtlDlCalc2CwPrb(RgSchCellCb *cell,RgSchUeCb *ue,uint32_t bo,uint32_t *prbReqrd)
-{
-   RgSchCmnDlCell *dlCell  = RG_SCH_CMN_GET_DL_CELL(cell); 
-   RgSchCmnDlUe   *dlUe  = RG_SCH_CMN_GET_DL_UE(ue, cell); 
-   uint32_t            eff1, eff2;
-   uint32_t            noRes;
-   uint8_t             noLyr1, noLyr2;
-   uint8_t             iTbs1, iTbs2;
-   uint8_t             cfi = dlCell->currCfi;               
-
-   if ((dlUe->mimoInfo.forceTD) ||/* Transmit Diversity (TD) */
-       (dlUe->mimoInfo.ri < 2))/* 1 layer precoding */
-   {
-      iTbs1  = dlUe->mimoInfo.cwInfo[0].iTbs[0];
-      eff1   = (*(RgSchCmnTbSzEff *)(dlCell->cqiToEffTbl[0][cfi]))[iTbs1];
-
-      /* Optimization to convert totalBo (which is in-terms of bytes) to bits 
-       * i.e, << 3 and multiply with 1024 i.e, << 10 */
-      noRes = ((uint64_t)((bo << 3) << 10)) / (eff1);
-      /* Get the number of RBs needed for this transmission */
-      /* Number of RBs = No of REs / No of REs per RB       */
-      *prbReqrd = RGSCH_CEIL(noRes, dlCell->noResPerRb[cfi]);
-   }
-   else
-   {
-      noLyr1 = dlUe->mimoInfo.cwInfo[0].noLyr;
-      noLyr2 = dlUe->mimoInfo.cwInfo[1].noLyr;
-      iTbs1  = dlUe->mimoInfo.cwInfo[0].iTbs[noLyr1 - 1];
-      iTbs2  = dlUe->mimoInfo.cwInfo[1].iTbs[noLyr2 - 1];
-      eff1 = (*(RgSchCmnTbSzEff *)(dlCell->cqiToEffTbl[noLyr1 - 1][cfi]))[iTbs1];
-      eff2 = (*(RgSchCmnTbSzEff *)(dlCell->cqiToEffTbl[noLyr2 - 1][cfi]))[iTbs2];
-
-      /* Optimization to convert totalBo (which is in-terms of bytes) to bits 
-       * i.e, << 3 and multiply with 1024 i.e, << 10 */
-      noRes = ((uint64_t)((bo << 3) << 10)) / (eff1 + eff2);
-      /* Get the number of RBs needed for this transmission */
-      /* Number of RBs = No of REs / No of REs per RB       */
-      *prbReqrd = RGSCH_CEIL(noRes, dlCell->noResPerRb[cfi]);
-   }
-   return;
-} /* rgSchUtlDlCalc2CwPrb */
-
-/**
- * @brief  Utility function to calculate total num of PRBs required to
- *         satisfy DL BO(BO sum of all logical channels for that UE or an LC BO)
- *
- * @details
- *
- *     Function : rgSchUtlCalcTotalPrbReq
- *
- *    This function calls TM specific routine to calculate PRB
- *   
- *
- *  @param[in]  RgSchCellCb     *cell
- *  @param[in]  RgSchUeCb       *ue 
- *  @param[in]  uint32_t              bo 
- *  @param[out] uint32_t             *prbReqrd 
- *  @return Void
- **/
-Void rgSchUtlCalcTotalPrbReq(RgSchCellCb *cell,RgSchUeCb *ue,uint32_t bo,uint32_t *prbReqrd)
-{
-   /* Call TM specific Prb calculation routine */
-   (dlCalcPrbFunc[ue->mimoInfo.txMode - 1])(cell, ue, bo, prbReqrd);
-
-   return;
-} /* rgSchUtlCalcTotalPrbReq */
-#ifdef UNUSE_FUN
-#ifdef TFU_UPGRADE
-/***********************************************************
- *
- *     Func : rgSCHUtlFetchPcqiBitSz
- *
- *
- *     Desc : Fetch the CQI/PMI bits for a UE based on the mode, periodicity.
- *
- *     Ret  : uint8_t
- *            ROK - Success
- *
- *     Notes:
- *
- *     File :
- *
- **********************************************************/
-static uint8_t rgSCHUtlFetchPcqiBitSz(RgSchCellCb *cell, RgSchUeCb *ueCb,uint8_t numTxAnt)
-{
-   uint8_t   confRepMode;
-   uint8_t   pcqiSz;
-   uint8_t   ri;
-   RgSchUePCqiCb *cqiCb = RG_SCH_GET_UE_CELL_CQI_CB(ueCb,cell);
-
-   confRepMode = cqiCb->cqiCfg.cqiSetup.prdModeEnum;
-   if((ueCb->mimoInfo.txMode != RGR_UE_TM_3) && 
-         (ueCb->mimoInfo.txMode != RGR_UE_TM_4))
-   {
-      ri =1;
-   }
-   else
-   {
-      ri = cqiCb->perRiVal;
-   }
-   switch(confRepMode)
-   {
-      case RGR_PRD_CQI_MOD10:
-      {
-         pcqiSz = 4;
-      }
-      break;
-
-      case RGR_PRD_CQI_MOD11:
-      {
-         if(numTxAnt == 2)
-         {
-            if (ri ==1)
-            {
-               pcqiSz = 6;
-            }
-            else
-            {
-               pcqiSz = 8;
-            }
-         }
-         else if(numTxAnt == 4)
-         {
-            if (ri ==1)
-            {
-               pcqiSz = 8;
-            }
-            else
-            {
-               pcqiSz = 11;
-            }
-         }
-         else
-         {
-            /* This is number of antenna case 1.
-             * This is not applicable for Mode 1-1. 
-             * So setting it to invalid value */
-            pcqiSz = 0;
-         }
-      }
-      break;
-
-      case RGR_PRD_CQI_MOD20:
-      {
-         if(cqiCb->isWb)
-         {
-            pcqiSz = 4;
-         }
-         else
-         {
-            pcqiSz = 4 + cqiCb->label;
-         }
-      }
-      break;
-
-      case RGR_PRD_CQI_MOD21:
-      {
-         if(cqiCb->isWb)
-         {
-             if(numTxAnt == 2)
-             {
-                if (ri ==1)
-                {
-                    pcqiSz = 6;
-                }
-                else
-                {
-                    pcqiSz = 8;
-                }
-             }
-             else if(numTxAnt == 4)
-             {
-                if (ri ==1)
-                {
-                    pcqiSz = 8;
-                }
-                else
-                {
-                    pcqiSz = 11;
-                }
-             }
-             else
-             {
-                /* This might be number of antenna case 1.
-                 * For mode 2-1 wideband case only antenna port 2 or 4 is supported.
-                 * So setting invalid value.*/
-                pcqiSz = 0;
-             }
-          }
-          else
-          {
-             if (ri ==1)
-             {
-                 pcqiSz = 4 + cqiCb->label;
-             }
-             else
-             {
-                 pcqiSz = 7 + cqiCb->label;
-             }
-          }
-      }
-      break;
-
-      default:
-         pcqiSz = 0;
-      break;
-   }
-   
-   return (pcqiSz);
-}
-#endif
-#endif
-/**
- * @brief  Utility function to returns the number of subbands based on the 
- *         requested bytes.
- *
- * @details
- *
- *     Function : rgSchUtlGetNumSbs
- *
- *     Calculate the number of PRBs
- *     Update the subbandRequired based on the nPrbs and subband size
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @param[in]  uint32_t          *numSbs
- *  @return     uint8_t
- **/
-uint8_t rgSchUtlGetNumSbs(RgSchCellCb *cell,RgSchUeCb *ue,uint32_t *numSbs)
-{
-   uint32_t  nPrb;
-   //Currently hardcoding MAX prb for each UE
-   nPrb = ue->ue5gtfCb.maxPrb;
-   (*numSbs) = RGSCH_CEIL(nPrb, MAX_5GTF_VRBG_SIZE);
-   return ROK;
-}
-
-/**
- * @brief  Utility function to insert the UE node into UE Lst based on the
- *         number of subbands allocated for the UE for the current TTI.
- *
- * @details
- *
- *     Function : rgSchUtlSortInsUeLst
- *
- *     If subbandRequired < Min, then insert at head
- *     Else If subbandRequired > Max, then insert at tail
- *     Else, traverse the list and place the node at the appropriate place
- *
- *  @param[in]  RgSchCellCb  *cell
- *  @param[in]  RgSchUeCb    *ue
- *  @return     uint8_t
- **/
-uint8_t rgSchUtlSortInsUeLst(RgSchCellCb *cell,CmLListCp *ueLst,CmLList *node,uint8_t vrbgRequired)
-{
-   CmLList      *ueInLst;
-   CmLList      *firstUeInLst;
-   CmLList      *lastUeInLst;
-   RgSchUeCb    *tempUe;
-   RgSchCmnUlUe *ueUl;
-
-   //firstUeInLst = cmLListFirst(ueLst);
-   CM_LLIST_FIRST_NODE(ueLst,firstUeInLst);
-   if(NULLP == firstUeInLst)
-   {
-      /* first node to be added to the list */
-      cmLListAdd2Tail(ueLst, node);
-   }
-   else
-   {
-      /* Sb Required for the UE is less than the first node in the list */
-      tempUe      = (RgSchUeCb *)(firstUeInLst->node);
-      ueUl = RG_SCH_CMN_GET_UL_UE(tempUe, cell);
-
-      if(vrbgRequired <= ueUl->vrbgRequired)
-      {
-         cmLListInsCrnt(ueLst, (node));
-      }
-      else
-      {
-         /* Sb Required for this UE is higher than the UEs in the list */
-         lastUeInLst = cmLListLast(ueLst);
-         tempUe      = (RgSchUeCb *)(lastUeInLst->node);
-         if(vrbgRequired >= ueUl->vrbgRequired)
-         {
-            cmLListAdd2Tail(ueLst, (node));
-         }
-         else
-         {
-            /* This UE needs to be in the middle. Search and insert the UE */
-            ueInLst = cmLListFirst(ueLst);
-            do
-            {
-               tempUe = (RgSchUeCb *)(ueInLst->node);
-
-               if(vrbgRequired <= ueUl->vrbgRequired)
-               {
-                  cmLListInsCrnt(ueLst, (node));
-                  break;
-               }
-
-               ueInLst = cmLListNext(ueLst);
-
-            } while(NULLP != ueInLst && ueInLst != firstUeInLst);
-         }
-      }
-   }
-
-   return ROK;
-}
-
-/**
- * @brief Function to Send LCG GBR register to MAC
- *
- * @details
- *
- *     Function: rgSCHUtlBuildNSendLcgReg
- *
- *     Handler for sending LCG GBR registration 
- *
- *     Invoked by: 
- *         SCHD
- *
- *     Processing Steps:
- *           
- *  @param[in] RgSchCellCb       *cell
- *  @param[in] CmLteRnti         crnti
- *  @param[in] uint8_t                lcgId
- *  @param[in] Bool              isGbr
- *  @return  S16
- *      -# ROK 
- **/
-S16 rgSCHUtlBuildNSendLcgReg(RgSchCellCb  *cell,CmLteRnti  crnti,uint8_t lcgId,Bool isGbr)
-{
-   Pst            pst;
-   RgInfLcgRegReq lcgRegReq;
-
-   memset(&pst, 0, sizeof(Pst));
-   lcgRegReq.isGbr  = isGbr;
-   lcgRegReq.cellId = cell->cellId;
-   lcgRegReq.crnti  = crnti;
-   lcgRegReq.lcgId  = lcgId;
-   rgSCHUtlGetPstToLyr(&pst, &rgSchCb[cell->instIdx], cell->macInst);
-   /* code Coverage portion of the test case */ 
-   RgSchMacLcgReg(&pst, &lcgRegReq);
-
-   return ROK;
-}
-
-#ifdef TFU_UPGRADE
-#ifdef LTE_ADV
-#ifndef TFU_TDD
-/**
- * @brief Function to map RGR pucch type to TFU type
- *
- * @details
- *
- *     Function: rgSchUtlGetFdbkMode
- *
- *
- *     Invoked by: 
- *         SCHD
- *
- *     Processing Steps:
- *           
- *  @param[in] RgrSchFrmt1b3TypEnum
- *  @return  TfuAckNackMode
- *      -# ROK 
- **/
-TfuAckNackMode rgSchUtlGetFdbkMode(RgrSchFrmt1b3TypEnum fdbkType)
-{
-
-   TfuAckNackMode mode = TFU_UCI_FORMAT_1A_1B;
-
-   switch(fdbkType)
-   {
-     case RG_SCH_UCI_FORMAT_NON_CA:
-     case RG_SCH_UCI_FORMAT1A_1B:
-     {
-        mode = TFU_UCI_FORMAT_1A_1B;
-     }
-     break;
-     case RG_SCH_UCI_FORMAT1B_CS:
-     {
-        mode = TFU_UCI_FORMAT_1B_CS;
-     }
-     break;
-     case RG_SCH_UCI_FORMAT3:
-     {
-        mode = TFU_UCI_FORMAT_3;
-     }
-     break;
-   }
-   return (mode);
-}
-#endif /* TFU_TDD */
-#endif /* LTE_ADV */
-#endif /*TFU_UPGRADE */
-
-#ifdef LTE_ADV
-/**
- * @brief Send Ue SCell delete to SMAC.
- *
- * @details
- *
- *     Function : rgSCHUtlSndUeSCellDel2Mac 
- *       This function populates the struct RgInfRlsRnti and
- *       get the pst for SMac and mark field isUeSCellDel to TRUE which 
- *       indicates that it is a Ue SCell delete.
- *     
- *    
- *           
- *  @param[in]     RgSchCellCb    *cell
- *  @param[in]     CmLteRnti      rnti 
- *  @return  Void
- *      -# ROK 
- **/
-Void rgSCHUtlSndUeSCellDel2Mac(RgSchCellCb *cell,CmLteRnti rnti)
-{
-   Pst          pst;
-   Inst         inst = cell->instIdx;
-   RgInfRlsRnti rntiInfo;
-
-   DU_LOG("\nINFO  -->  SCH : RNTI Release IND for UE(%d)\n", rnti);
-   /* Copy the info to rntiInfo */
-   rntiInfo.cellId = cell->cellId;
-   rntiInfo.rnti   = rnti;
-   /* Fix : syed ueId change as part of reestablishment.
-    * Now SCH to trigger this. CRG ueRecfg for ueId change 
-    * is dummy */         
-   rntiInfo.ueIdChng = FALSE;
-   rntiInfo.newRnti  = rnti;
-   rntiInfo.isUeSCellDel = TRUE;
-   /* Invoke MAC to release the rnti */
-   rgSCHUtlGetPstToLyr(&pst, &rgSchCb[inst], cell->macInst);
-   RgSchMacRlsRnti(&pst, &rntiInfo);
-   return;
-}
-
-/**
- * @brief Returns max TB supported by a given txMode
- *
- * @details
- *
- *     Function : rgSCHUtlGetMaxTbSupp
- *     Max TB supported for TM Modes (1,2,5,6 and 7) is 1
- *     and 2 for others
- *    
- *           
- *  @param[in]     RgrTxMode  txMode
- *  @return        uint8_t maxTbCount; 
- *      -# ROK 
- **/
-uint8_t rgSCHUtlGetMaxTbSupp(RgrTxMode txMode)
-{
-   uint8_t maxTbCount;
-
-   /* Primary Cell */
-
-   switch(txMode)
-   {
-      case RGR_UE_TM_1:
-      case RGR_UE_TM_2:
-      case RGR_UE_TM_5:
-      case RGR_UE_TM_6:
-      case RGR_UE_TM_7:
-         maxTbCount = 1;
-         break;
-      case RGR_UE_TM_3:
-      case RGR_UE_TM_4:
-      case RGR_UE_TM_8:
-      case RGR_UE_TM_9:
-         maxTbCount = 2;
-         break;
-      default:
-         maxTbCount = 0;
-         break;
-   }
-
-   return (maxTbCount);
-}
-
-/**
- * @brief Send Ue SCell delete to SMAC.
- *
- * @details
- *
- *     Function : rgSCHTomUtlGetTrigSet 
- *      This function gets the triggerset based on cqiReq 
- *     
- *  @param[in]     RgSchCellCb    *cell
- *  @param[in]     RgSchUeCb      ueCb 
- *  @param[in]     uint8_t             cqiReq,
- *  @param[out]    uint8_t             *triggerSet
- *
- *  @return  Void
- *      -# ROK 
- **/
-Void rgSCHTomUtlGetTrigSet(RgSchCellCb *cell,RgSchUeCb *ueCb,uint8_t cqiReq,uint8_t *triggerSet)
-{
-   RgSchUeCellInfo *pCellInfo = RG_SCH_CMN_GET_PCELL_INFO(ueCb);
-   switch(cqiReq)
-   {
-      case RG_SCH_APCQI_SERVING_CC:
-         {
-            /* APeriodic CQI request for Current Carrier.*/
-            uint8_t sCellIdx = ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cell)];
-            *triggerSet = 1 << (7 - sCellIdx);
-            break;
-         }
-      case RG_SCH_APCQI_1ST_SERVING_CCS_SET:
-         {
-            *triggerSet = pCellInfo->acqiCb.aCqiCfg.triggerSet1;
-            break;
-         }
-      case RG_SCH_APCQI_2ND_SERVING_CCS_SET:
-         {
-            *triggerSet = pCellInfo->acqiCb.aCqiCfg.triggerSet2;
-            break;
-         }
-      default:
-         {
-            /* BUG */
-            break;
-         }
-   }
-   return;
-}
-#endif
-/**
- * @brief This function updates the value of UE specific DCI sizes
- *
- * @details
- *
- *     Function: rgSCHUtlUpdUeDciSize
- *     Purpose:  This function calculates and updates DCI Sizes in bits.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb       *cell
- *  @param[in]  RgSchUeCb         *ueCb
- *  @param[in]  isCsi2Bit         *isCsi2Bit: is 1 bit or 2 bit CSI
- *  @return     Void
- *
- **/
-Void rgSCHUtlUpdUeDciSize(RgSchCellCb *cell,RgSchUeCb *ueCb,Bool isCsi2Bit)
-{
-   uint8_t dci01aCmnSize = cell->dciSize.baseSize[TFU_DCI_FORMAT_0];
-   uint8_t dci01aDedSize = cell->dciSize.baseSize[TFU_DCI_FORMAT_0];
-   if ((ueCb->accessStratumRls >= RGR_REL_10) && (cell->bwCfg.dlTotalBw >= cell->bwCfg.ulTotalBw))
-   {
-      dci01aCmnSize += 1; /* Resource Allocation Type DCI 0 */
-      dci01aDedSize += 1; /* Resource Allocation Type DCI 0 */
-   }
-   if (isCsi2Bit == TRUE)
-   {
-      dci01aDedSize += 2; /* 2 bit CSI DCI 0 */
-   }
-   else
-   {
-      dci01aDedSize += 1; /* 1 bit CSI DCI 0 */
-   }
-   
-   /* Common CSI is always 1 bit DCI 0 */
-   dci01aCmnSize += 1; /* 1 bit CSI DCI 0 */
-
-   /* Compare the sizes of DCI 0 with DCI 1A and consider the greater */
-   if (dci01aCmnSize < cell->dciSize.baseSize[TFU_DCI_FORMAT_1A])
-   {
-      dci01aCmnSize = cell->dciSize.baseSize[TFU_DCI_FORMAT_1A];
-   }
-   if (dci01aDedSize < cell->dciSize.baseSize[TFU_DCI_FORMAT_1A])
-   {
-      dci01aDedSize = cell->dciSize.baseSize[TFU_DCI_FORMAT_1A];
-   }
-
-   /* Remove the Ambiguous Sizes as mentioned in table Table 5.3.3.1.2-1 Spec 36.212-a80 Sec 5.3.3.1.3 */
-   dci01aCmnSize += rgSchDciAmbigSizeTbl[dci01aCmnSize];
-   dci01aDedSize += rgSchDciAmbigSizeTbl[dci01aDedSize];
-
-   ueCb->dciSize.cmnSize[TFU_DCI_FORMAT_0]  = dci01aCmnSize;
-   ueCb->dciSize.cmnSize[TFU_DCI_FORMAT_1A] = dci01aCmnSize;
-   
-   ueCb->dciSize.dedSize[TFU_DCI_FORMAT_0]  = dci01aDedSize;
-   ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1A] = dci01aDedSize;
-
-   ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1] = cell->dciSize.baseSize[TFU_DCI_FORMAT_1];
-   do {
-      /* Spec 36.212-a80 Sec 5.3.3.1.2: If the UE is configured to decode PDCCH with CRC scrambled 
-       * by the C-RNTI and the number of information bits in format 1 is equal to that for format 0/1A 
-       * for scheduling the same serving cell and mapped onto the UE specific search space given by the 
-       * C-RNTI as defined in [3], one bit of value zero shall be appended to format 1. */
-      if (ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1] == ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1A])
-      {
-         ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1] += 1;
-      }
-
-      /* Spec 36.212-a80 Sec 5.3.3.1.2: If the number of information bits in format 1 belongs 
-       * to one of the sizes in Table 5.3.3.1.2-1, one or more zero bit(s) shall be appended 
-       * to format 1 until the payload size of format 1 does not belong to one of the sizes in 
-       * Table 5.3.3.1.2-1 and is not equal to that of format 0/1A mapped onto the same search space. */
-      ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1] += rgSchDciAmbigSizeTbl[ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1]];
-   } while (ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1] == ueCb->dciSize.dedSize[TFU_DCI_FORMAT_1A]);
-
-   /* Just copying the value of 2/2A to avoid multiple checks at PDCCH allocations. This values never change.*/
-   ueCb->dciSize.dedSize[TFU_DCI_FORMAT_2]  = cell->dciSize.size[TFU_DCI_FORMAT_2];
-   ueCb->dciSize.dedSize[TFU_DCI_FORMAT_2A] = cell->dciSize.size[TFU_DCI_FORMAT_2A];
-   ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_2]  = cell->dciSize.size[TFU_DCI_FORMAT_2];
-   ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_2A] = cell->dciSize.size[TFU_DCI_FORMAT_2A];
-
-   /* Spec 36.212-a80 Sec 5.3.3.1.3: except when format 1A assigns downlink resource 
-    * on a secondary cell without an uplink configuration associated with the secondary cell */
-   ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1A] = cell->dciSize.baseSize[TFU_DCI_FORMAT_1A];
-   ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1A] += rgSchDciAmbigSizeTbl[ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1A]];
-   ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1] = cell->dciSize.baseSize[TFU_DCI_FORMAT_1];
-   do {
-      /* Spec 36.212-a80 Sec 5.3.3.1.2: If the UE is configured to decode PDCCH with CRC scrambled 
-       * by the C-RNTI and the number of information bits in format 1 is equal to that for format 0/1A 
-       * for scheduling the same serving cell and mapped onto the UE specific search space given by the 
-       * C-RNTI as defined in [3], one bit of value zero shall be appended to format 1. */
-      if (ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1] == ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1A])
-      {
-         ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1] += 1;
-      }
-
-      /* Spec 36.212-a80 Sec 5.3.3.1.2: If the number of information bits in format 1 belongs 
-       * to one of the sizes in Table 5.3.3.1.2-1, one or more zero bit(s) shall be appended 
-       * to format 1 until the payload size of format 1 does not belong to one of the sizes in 
-       * Table 5.3.3.1.2-1 and is not equal to that of format 0/1A mapped onto the same search space. */
-      ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1] += rgSchDciAmbigSizeTbl[ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1]];
-   } while (ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1] == ueCb->dciSize.noUlCcSize[TFU_DCI_FORMAT_1A]);
-#ifdef EMTC_ENABLE
-   rgSCHEmtcUtlUpdUeDciSize(cell, ueCb); 
-#endif      
-}
-
-/**
- * @brief This function initialises the DCI Size table
- *
- * @details
- *
- *     Function: rgSCHUtlCalcDciSizes
- *     Purpose:  This function calculates and initialises DCI Sizes in bits.
- *
- *     Invoked by: Scheduler
- *
- *  @param[in]  RgSchCellCb       *cell
- *  @return     Void
- *
- **/
-Void rgSCHUtlCalcDciSizes(RgSchCellCb *cell)
-{
-   uint8_t dciSize = 0;
-   uint8_t dci01aSize = 0;
-   uint32_t bits = 0, idx = 0;
-
-   switch(TFU_DCI_FORMAT_0) /* Switch case for the purpose of readability */
-   {
-      case TFU_DCI_FORMAT_0:
-         {
-            /* DCI 0: Spec 36.212 Section 5.3.3.1.1 */
-            dciSize = 0;
-            /*-- Calculate resource block assignment bits need to be set
-              Which is ln(N(N+1)/2) 36.212 5.3.3.1 --*/
-            bits = (cell->bwCfg.ulTotalBw * (cell->bwCfg.ulTotalBw + 1) / 2);
-            while ((bits & 0x8000) == 0)
-            {
-               bits <<= 1;
-               idx++;
-            }
-            bits = 16 - idx;
-
-            dciSize = 1 /* DCI 0 bit indicator */ + \
-                      1 /* Frequency hoping enable bit field */ + \
-                      (uint8_t)bits /* For frequency Hopping */ + \
-                      5 /* MCS */ + \
-                      1 /* NDI */ + \
-                      2 /* TPC */ + \
-                      3 /* DMRS */
-#ifdef TFU_TDD
-                      + \
-                      2 /* UL Index Config 0 or DAI Config 1-6 */
-#endif
-                      ;
-
-            cell->dciSize.baseSize[TFU_DCI_FORMAT_0] = dciSize;
-
-            /* If hoping flag is enabled */
-            if (cell->bwCfg.ulTotalBw <= 49) /* Spec 36.213 Table 8.4-1, N UL_hop, if hopping is enabled */
-            {
-               cell->dciSize.dci0HopSize = 1;
-            }
-            else
-            {
-               cell->dciSize.dci0HopSize = 2;
-            }
-
-            /* Update common non-CRNTI scrambled DCI 0/1A flag */
-            dci01aSize = cell->dciSize.baseSize[TFU_DCI_FORMAT_0] + 1; /* 1 bit CSI */
-         }
-      case TFU_DCI_FORMAT_1A:
-         {
-            /* DCI 1A: Spec 36.212 Section 5.3.3.1.3 */
-            dciSize = 0;
-            idx = 0;
-            /* Calculate resource block assignment bits need to be set
-              Which is ln(N(N+1)/2) */
-            bits = (cell->bwCfg.dlTotalBw * (cell->bwCfg.dlTotalBw + 1) / 2);
-            while ((bits & 0x8000) == 0)
-            {
-               bits <<= 1;
-               idx++;
-            }
-            bits = 16 - idx;
-
-            dciSize += 1 /* Format 1A */ + \
-                       1 /* Local or Distributed */ + \
-                       (uint8_t)bits /* Resource block Assignment */ + \
-                       5 /* MCS */ + 
-#ifdef TFU_TDD
-                       4 /* HARQ Proc Id */ + 
-#else
-                       3 /* HARQ Proc Id */ + 
-#endif
-                       1 /* NDI */ + \
-                       2 /* RV */ + \
-                       2 /* TPC CMD */
-#ifdef TFU_TDD
-                       + \
-                       2 /* DAI */
-#endif
-                       ;
-            cell->dciSize.baseSize[TFU_DCI_FORMAT_1A] = dciSize;
-
-            /* If the UE is not configured to decode PDCCH with CRC scrambled by the C-RNTI, 
-             * and the number of information bits in format 1A is less than that of format 0, 
-             * zeros shall be appended to format 1A until the payload size equals that of format 0. */
-            /* Compare the size with DCI 1A  and DCI 0 and consider the greater one */
-            if (dci01aSize < cell->dciSize.baseSize[TFU_DCI_FORMAT_1A])
-            {
-               dci01aSize = cell->dciSize.baseSize[TFU_DCI_FORMAT_1A];
-            }
-            /* If the number of information bits in format 1A belongs to one of the sizes in 
-             * Table 5.3.3.1.2-1, one zero bit shall be appended to format 1A. */
-            dci01aSize += rgSchDciAmbigSizeTbl[dci01aSize];
-            cell->dciSize.size[TFU_DCI_FORMAT_1A] = cell->dciSize.size[TFU_DCI_FORMAT_0] = dci01aSize;
-         }
-      case TFU_DCI_FORMAT_1:
-         {
-            /* DCI 1: Spec 36.212 Section 5.3.3.1.2 */
-            dciSize = 0;
-            if (cell->bwCfg.dlTotalBw > 10)
-            {
-               dciSize = 1; /* Resource Allocation header bit */
-            }
-            
-            /* Resouce allocation bits Type 0 and Type 1 */
-            bits = (cell->bwCfg.dlTotalBw/cell->rbgSize);
-            if ((cell->bwCfg.dlTotalBw % cell->rbgSize) != 0)
-            {
-               bits++;
-            }
-
-            dciSize += (uint8_t)bits /* Resource Allocation bits */ + \
-                       5 /* MCS */ + 
-#ifdef TFU_TDD
-                       4 /* HARQ TDD */ + 
-#else
-                       3 /* HARQ FDD */ + 
-#endif
-                       1 /* NDI */ + \
-                       2 /* Redunancy Version */ + \
-                       2 /* TPC Cmd */
-#ifdef TFU_TDD
-                       + \
-                       2 /* DAI */
-#endif
-                       ;
-
-            
-            cell->dciSize.baseSize[TFU_DCI_FORMAT_1] = dciSize;
-
-            cell->dciSize.size[TFU_DCI_FORMAT_1] = dciSize;
-            
-            do {
-               /* If the UE is not configured to decode PDCCH with CRC 
-                * scrambled by the C-RNTI and the number of information bits in format 1 
-                * is equal to that for format 0/1A, one bit of value zero shall be appended 
-                * to format 1. */
-               if (dci01aSize == cell->dciSize.size[TFU_DCI_FORMAT_1])
-               {
-                  cell->dciSize.size[TFU_DCI_FORMAT_1] += 1;
-               }
-
-               /* If the number of information bits in format 1 belongs to one of the sizes in 
-                * Table 5.3.3.1.2-1, one or more zero bit(s) shall be appended to format 1 until 
-                * the payload size of format 1 does not belong to one of the sizes in Table 5.3.3.1.2-1 
-                * and is not equal to that of format 0/1A mapped onto the same search space. */
-               cell->dciSize.size[TFU_DCI_FORMAT_1] += rgSchDciAmbigSizeTbl[cell->dciSize.size[TFU_DCI_FORMAT_1]];
-            } while (cell->dciSize.size[TFU_DCI_FORMAT_1] == dci01aSize);
-         }
-      case TFU_DCI_FORMAT_2:
-         {
-            /* DCI 2: Spec 36.212 Section 5.3.3.1.5 */
-            dciSize = 0;
-            if (cell->bwCfg.dlTotalBw > 10)
-            {
-               dciSize = 1; /* Resource Allocation bit */
-            }
-
-            dciSize += (uint8_t)bits /* Resource Allocation bits */ + \
-                       2 /* TPC */ + 
-#ifdef TFU_TDD
-                       2 /* DAI */ + \
-                       4 /* HARQ */ + 
-#else
-                       3 /* HARQ */ +
-#endif
-                       1 /* CW Swap Flag */ + \
-                       5 /* MCS for TB1 */+ \
-                       1 /* NDI for TB1 */+ \
-                       2 /* RV for TB1 */ + \
-                       5 /* MCS for TB2 */+ \
-                       1 /* NDI for TB2 */+ \
-                       2 /* RV for TB2 */;
-            if (cell->numTxAntPorts == 2)
-            {
-               dciSize += 3;
-            }
-            else if (cell->numTxAntPorts == 4)
-            {
-               dciSize += 6;
-            }
-            cell->dciSize.size[TFU_DCI_FORMAT_2] = dciSize;
-            cell->dciSize.size[TFU_DCI_FORMAT_2] += rgSchDciAmbigSizeTbl[cell->dciSize.size[TFU_DCI_FORMAT_2]];
-         }
-      case TFU_DCI_FORMAT_2A:
-         {
-            /* DCI 2A: Spec 36.212 Section 5.3.3.1.5A */
-            dciSize = 0;
-            if (cell->bwCfg.dlTotalBw > 10)
-            {
-               dciSize = 1; /* Resource Allocation bit */
-            }
-
-            dciSize += (uint8_t)bits /* Resource Allocation bits */ + \
-                         2 /* TPC */ + 
-#ifdef TFU_TDD
-                         2 /* DAI */ + \
-                         4 /* HARQ */ + 
-#else
-                         3 /* HARQ */ +
-#endif
-                         1 /* CW Swap Flag */ + \
-                         5 /* MCS for TB1 */+ \
-                         1 /* NDI for TB1 */+ \
-                         2 /* RV for TB1 */ + \
-                         5 /* MCS for TB2 */+ \
-                         1 /* NDI for TB2 */+ \
-                         2 /* RV for TB2 */;
-            if (cell->numTxAntPorts == 4)
-            {
-               dciSize += 2;
-            }
-            cell->dciSize.size[TFU_DCI_FORMAT_2A] = dciSize;
-            cell->dciSize.size[TFU_DCI_FORMAT_2A] += \
-                          rgSchDciAmbigSizeTbl[cell->dciSize.size[TFU_DCI_FORMAT_2A]]; /* Spec 39.212 Table 5.3.3.1.2-1 */
-         }
-      case TFU_DCI_FORMAT_3:
-         {
-            /* DCI 3: Spec 36.212 Section 5.3.3.1.6 */
-            cell->dciSize.size[TFU_DCI_FORMAT_3] = cell->dciSize.size[TFU_DCI_FORMAT_1A] / 2;
-            if (cell->dciSize.size[TFU_DCI_FORMAT_3] % 2)
-            {
-               cell->dciSize.size[TFU_DCI_FORMAT_3]++;
-            }
-         }
-      case TFU_DCI_FORMAT_3A:
-         {
-            /* DCI 3A: Spec 36.212 Section 5.3.3.1.7 */
-            cell->dciSize.size[TFU_DCI_FORMAT_3A] = cell->dciSize.size[TFU_DCI_FORMAT_1A];
-         }
-#ifdef EMTC_ENABLE
-      case TFU_DCI_FORMAT_6_0A:
-         {
-            rgSCHEmtcGetDciFrmt60ASize(cell);
-         }
-         case TFU_DCI_FORMAT_6_1A:
-         {
-            rgSCHEmtcGetDciFrmt61ASize(cell);
-         }
-#endif                  
-      default:
-         {
-            /* DCI format not supported */
-            break;
-         }
-   }
-}
-
-/**
- * @brief Handler for the CPU OvrLd related state adjustment.
- *
- * @details
- *
- *     Function : rgSCHUtlCpuOvrLdAdjItbsCap
- *
- *     Processing Steps:
- *      - Record dl/ulTpts 
- *      - Adjust maxItbs to acheive target throughputs
- *
- *  @param[in]  RgSchCellCb *cell
- *  @return  Void 
- **/
-Void rgSCHUtlCpuOvrLdAdjItbsCap( RgSchCellCb *cell)
-{
-   uint32_t tptDelta;
-
-   if ((cell->cpuOvrLdCntrl.cpuOvrLdIns) & (RGR_CPU_OVRLD_DL_TPT_UP | 
-            RGR_CPU_OVRLD_DL_TPT_DOWN))
-   {
-      /* Regulate DL Tpt for CPU overload */
-      if (cell->measurements.dlTpt > cell->cpuOvrLdCntrl.tgtDlTpt)
-      {
-         tptDelta = cell->measurements.dlTpt - cell->cpuOvrLdCntrl.tgtDlTpt;
-         /* Upto 0.5% drift in measured vs target tpt is ignored */
-         if (((tptDelta*1000)/cell->cpuOvrLdCntrl.tgtDlTpt) > 5)
-         {
-            cell->thresholds.maxDlItbs = RGSCH_MAX((cell->thresholds.maxDlItbs-1), 1);
-         }
-      }
-      else
-      {
-         tptDelta = cell->cpuOvrLdCntrl.tgtDlTpt - cell->measurements.dlTpt;
-         /* Upto 0.5% drift in measured vs target tpt is ignored */
-         if (((tptDelta*1000)/cell->cpuOvrLdCntrl.tgtDlTpt) > 5)
-         {
-            cell->thresholds.maxDlItbs = RGSCH_MIN((cell->thresholds.maxDlItbs+1), RG_SCH_DL_MAX_ITBS);
-         }
-      }
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nINFO  -->  SCH :  DL CPU OL ADJ = %lu, %lu, %d\n", cell->measurements.dlTpt, cell->cpuOvrLdCntrl.tgtDlTpt, 
-            cell->thresholds.maxDlItbs);
-#endif
-   }
-
-   if ((cell->cpuOvrLdCntrl.cpuOvrLdIns) & (RGR_CPU_OVRLD_UL_TPT_UP | 
-            RGR_CPU_OVRLD_UL_TPT_DOWN))
-   {
-      /* Regualte DL Tpt for CPU overload */
-      if (cell->measurements.ulTpt > cell->cpuOvrLdCntrl.tgtUlTpt)
-      {
-         tptDelta = cell->measurements.ulTpt - cell->cpuOvrLdCntrl.tgtUlTpt;
-         /* Upto 1% drift in measured vs target tpt is ignored */
-         if (((tptDelta*1000)/cell->cpuOvrLdCntrl.tgtUlTpt) > 10)
-         {
-            cell->thresholds.maxUlItbs = RGSCH_MAX((cell->thresholds.maxUlItbs-1), 1);
-         }
-      }
-      else
-      {
-         tptDelta = cell->cpuOvrLdCntrl.tgtUlTpt - cell->measurements.ulTpt;
-         /* Upto 1% drift in measured vs target tpt is ignored */
-         if (((tptDelta*1000)/cell->cpuOvrLdCntrl.tgtUlTpt) > 10)
-         {
-            cell->thresholds.maxUlItbs = RGSCH_MIN((cell->thresholds.maxUlItbs+1), RG_SCH_UL_MAX_ITBS);
-         }
-      }
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH :  UL CPU OL ADJ = %lu, %lu, %d\n", cell->measurements.ulTpt, cell->cpuOvrLdCntrl.tgtUlTpt, 
-            cell->thresholds.maxUlItbs);
-#endif
-   }
-
-   return;
-}
-/**
- * @brief Handler for the num UE per TTI based CPU OvrLd instr updating
- *
- * @details
- *
- *     Function : rgSCHUtlChkAndUpdNumUePerTtiCpuOvInstr
- *
- *     Processing Steps:
- *      - Validate the config params.
- *      - Update numUEperTTi CPU OL related information.
- *      - If successful, return ROK else RFAILED.
- *
- *  @param[in]  RgSchCellCb *cell
- *  @param[in]  uint8_t          cnrtCpuOvrLdIns 
- *  @return     Void
- **/
-static Void rgSCHUtlChkAndUpdNumUePerTtiCpuOvInstr(RgSchCellCb *cell,uint8_t crntCpuOvrLdIns)
-{
-   RgSchCpuOvrLdCntrlCb    *cpuInstr = &(cell->cpuOvrLdCntrl);
-   RgSchCmnCell            *cellSch;
-   uint8_t                 maxUeNewDlTxPerTti;
-   uint8_t                 maxUeNewUlTxPerTti;
-   uint8_t                 tmpslot        = 0;
-#ifdef CPU_OL_DBG_PRINTS 
-   uint8_t                 idx = 0;
-#endif
-   uint8_t                 maxDlDecCnt;
-   uint8_t                 maxUlDecCnt;
-
-   cellSch = RG_SCH_CMN_GET_CELL(cell);
-
-   maxUeNewDlTxPerTti = cellSch->dl.maxUeNewTxPerTti; 
-   maxUeNewUlTxPerTti = cellSch->ul.maxUeNewTxPerTti;
-  
-   /* Calculate Maximum Decremen */
-   maxDlDecCnt =  (10*(maxUeNewDlTxPerTti - 1))-(10-RGR_MAX_PERC_NUM_UE_PER_TTI_RED);
-   maxUlDecCnt =  (10*(maxUeNewUlTxPerTti - 1))-(10-RGR_MAX_PERC_NUM_UE_PER_TTI_RED);
-
-   /* Check for DL CPU Commands */
-   if ( crntCpuOvrLdIns &  RGR_CPU_OVRLD_DL_DEC_NUM_UE_PER_TTI ) 
-   {
-      /* Decrement till 90% of maxUeNewDlTxPerTti */
-      if ( cpuInstr->dlNxtIndxDecNumUeTti < maxDlDecCnt )
-      {
-         tmpslot = (cpuInstr->dlNxtIndxDecNumUeTti) % 10;
-         cpuInstr->dlNxtIndxDecNumUeTti++;
-         if ( cpuInstr->maxUeNewTxPerTti[tmpslot] > 1 )
-         {
-            cpuInstr->maxUeNewTxPerTti[tmpslot]--;
-         }
-         else
-         {
-#ifdef CPU_OL_DBG_PRINTS
-            DU_LOG("\nERROR  -->  SCH : CPU_OL_TTI__ERROR\n");
-#endif
-            DU_LOG("\nERROR  -->  SCH : Invalid CPU OL");
-         }
-      }
-#ifdef CPU_OL_DBG_PRINTS
-     DU_LOG("\nDEBUG  -->  SCH : dlNxtIndxDecNumUeTti = %d\n", cpuInstr->dlNxtIndxDecNumUeTti);
-#endif
-      DU_LOG("\nDEBUG  -->  SCH : dlNxtIndxDecNumUeTti = %d",
-         cpuInstr->dlNxtIndxDecNumUeTti);
-   }
-   else if ( crntCpuOvrLdIns &  RGR_CPU_OVRLD_DL_INC_NUM_UE_PER_TTI )
-   {
-      if ( cpuInstr->dlNxtIndxDecNumUeTti >  0) 
-      {
-         cpuInstr->dlNxtIndxDecNumUeTti--;
-         tmpslot = (cpuInstr->dlNxtIndxDecNumUeTti) % 10;
-         if ( cpuInstr->maxUeNewTxPerTti[tmpslot] < maxUeNewDlTxPerTti )
-         {
-            cpuInstr->maxUeNewTxPerTti[tmpslot]++;
-         }
-         else
-         {
-#ifdef CPU_OL_DBG_PRINTS
-             DU_LOG("\nERROR  -->  SCH : CPU_OL_TTI__ERROR\n");
-#endif
-             DU_LOG("\nERROR  -->  SCH : Invalid CPU OL");
-         }
-      }
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH : dlNxtIndxDecNumUeTti = %d\n", cpuInstr->dlNxtIndxDecNumUeTti);
-#endif
-      DU_LOG("\nERROR  -->  SCH : dlNxtIndxDecNumUeTti = %d",
-         cpuInstr->dlNxtIndxDecNumUeTti);
-   }
-   /* Check for UL CPU commands */
-   if ( crntCpuOvrLdIns &  RGR_CPU_OVRLD_UL_DEC_NUM_UE_PER_TTI )
-   {
-      /* Decrement till 90% of maxUeNewDlTxPerTti */
-      if ( cpuInstr->ulNxtIndxDecNumUeTti < maxUlDecCnt )
-      {
-         tmpslot = (cpuInstr->ulNxtIndxDecNumUeTti) % 10;
-         cpuInstr->ulNxtIndxDecNumUeTti++;
-         if ( cpuInstr->maxUeNewRxPerTti[tmpslot] > 1 )
-         {
-            cpuInstr->maxUeNewRxPerTti[tmpslot]--;
-         }
-         else
-         {
-#ifdef CPU_OL_DBG_PRINTS
-            DU_LOG("\nERROR  -->  SCH : CPU_OL_TTI__ERROR\n");
-#endif
-            DU_LOG("\nERROR  -->  SCH : Invalid CPU OL");
-         }
-      }
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH : ulNxtIndxDecNumUeTti = %d\n", cpuInstr->ulNxtIndxDecNumUeTti);
-#endif
-      DU_LOG("\nDEBUG  -->  SCH : dlNxtIndxDecNumUeTti = %d",
-         cpuInstr->dlNxtIndxDecNumUeTti);
-   }
-   else if ( crntCpuOvrLdIns &  RGR_CPU_OVRLD_UL_INC_NUM_UE_PER_TTI )
-   {
-      if ( cpuInstr->ulNxtIndxDecNumUeTti >  0) 
-      {
-         cpuInstr->ulNxtIndxDecNumUeTti--;
-         tmpslot = (cpuInstr->ulNxtIndxDecNumUeTti) % 10;
-         if ( cpuInstr->maxUeNewRxPerTti[tmpslot] < maxUeNewUlTxPerTti )
-         {
-            cpuInstr->maxUeNewRxPerTti[tmpslot]++;
-         }
-         else
-         {
-#ifdef CPU_OL_DBG_PRINTS
-            DU_LOG("\nERROR  -->  SCH : CPU_OL_TTI__ERROR\n");
-#endif
-            DU_LOG("\nERROR  -->  SCH : Invalid CPU OL");
-         }
-      }
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH : ulNxtIndxDecNumUeTti = %d\n", cpuInstr->ulNxtIndxDecNumUeTti);
-#endif
-      DU_LOG("\nDEBUG  -->  SCH : dlNxtIndxDecNumUeTti = %d",
-         cpuInstr->dlNxtIndxDecNumUeTti);
-   }
-#ifdef CPU_OL_DBG_PRINTS 
- /* TODO: Debug Information - Shall be moved under CPU_OL_DBG_PRINTS */
-   DU_LOG("\nDEBUG  -->  SCH : maxUeNewDlTxPerTti = %d, maxUeNewUlTxPerTti = %d\n", maxUeNewDlTxPerTti, maxUeNewUlTxPerTti);
-   DU_LOG("\nINFO  -->  SCH : DL Sf numUePerTti:");
-   for ( idx = 0; idx < 10 ; idx ++ )
-   {
-      DU_LOG("  %d", cpuInstr->maxUeNewTxPerTti[idx]);  
-   }
-   DU_LOG("\nINFO  -->  SCH : UL Sf numUePerTti:");
-   for ( idx = 0; idx < 10 ; idx ++ )
-   {
-      DU_LOG("  %d", cpuInstr->maxUeNewRxPerTti[idx]);  
-   }
-   DU_LOG("\n");
-#endif
-
-   return;
-} /* rgSCHUtlChkAndUpdNumUePerTtiCpuOvInstr */
-
-/**
- * @brief Handler for the CPU OvrLd related cell Recfg.
- *
- * @details
- *
- *     Function : rgSCHUtlResetCpuOvrLdState
- *
- *     Processing Steps:
- *      - Validate the config params.
- *      - Update CPU OL related state information.
- *      - If successful, return ROK else RFAILED.
- *
- *  @param[in]  RgSchCellCb *cell
- *  @param[in]  uint8_t          cnrtCpuOvrLdIns 
- *  @return  S16
- *      -# ROK
- *      -# RFAILED
- **/
-S16 rgSCHUtlResetCpuOvrLdState(RgSchCellCb *cell,uint8_t crntCpuOvrLdIns)
-{
-   uint8_t      crntDlCpuOL=0;
-   uint8_t      crntUlCpuOL=0;
-   RgSchCmnCell *schCmnCell = (RgSchCmnCell *)(cell->sc.sch);
-   uint8_t idx;
-
-#ifdef CPU_OL_DBG_PRINTS
-   DU_LOG("\nDEBUG  -->  SCH : CPU OVR LD Ins Rcvd = %d\n", (int)crntCpuOvrLdIns);
-#endif
-   DU_LOG("\nINFO  -->  SCH : CPU OVR LD Ins Rcvd");
-
-   if ( RGR_CPU_OVRLD_RESET == crntCpuOvrLdIns )
-   {
-      /* The CPU OL instruction received with RESET (0), hence reset it */
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH : rgSCHUtlResetCpuOvrLdState: RESET CPU OL instr\n");
-#endif
-      DU_LOG("\nINFO  -->  SCH : RESET CPU OVR LD");
-      cell->cpuOvrLdCntrl.cpuOvrLdIns = 0;
-      /* Reset the max UL and DL itbs to 26 */
-      cell->thresholds.maxUlItbs = RG_SCH_UL_MAX_ITBS;
-      cell->thresholds.maxDlItbs = RG_SCH_DL_MAX_ITBS;
-      /* Reset the num UE per TTI intructions */
-      cell->cpuOvrLdCntrl.dlNxtIndxDecNumUeTti = 0;
-      cell->cpuOvrLdCntrl.ulNxtIndxDecNumUeTti = 0;
-      for ( idx = 0; idx < 10; idx++ )
-      {
-         cell->cpuOvrLdCntrl.maxUeNewTxPerTti[idx] = 
-            schCmnCell->dl.maxUeNewTxPerTti;
-         cell->cpuOvrLdCntrl.maxUeNewRxPerTti[idx] = 
-            schCmnCell->ul.maxUeNewTxPerTti;
-      }
-
-      return ROK;
-   }
-   /* Check and Update numUEPer TTI based CPU overload instruction before
-    * going for TP based CPU OL  
-    * TTI based intrcuctions shall be > 0xF */
-   if ( crntCpuOvrLdIns >  0xF )  
-   {
-      rgSCHUtlChkAndUpdNumUePerTtiCpuOvInstr(cell, crntCpuOvrLdIns);
-      /* If need to have both TP and numUePerTti instrcution together in
-       * one command then dont return from here */
-      return ROK;
-   }
-
-   crntDlCpuOL = (crntCpuOvrLdIns & RGR_CPU_OVRLD_DL_TPT_UP) +\
-                 (crntCpuOvrLdIns & RGR_CPU_OVRLD_DL_TPT_DOWN);
-   if ((crntDlCpuOL) && (crntDlCpuOL != RGR_CPU_OVRLD_DL_TPT_UP) && 
-       (crntDlCpuOL != RGR_CPU_OVRLD_DL_TPT_DOWN))
-   {
-      /* Cfg validation failed. Invalid Command. Either UP/DOWN is allowed */
-      return RFAILED;
-   }
-   crntUlCpuOL = (crntCpuOvrLdIns & RGR_CPU_OVRLD_UL_TPT_UP) +\
-                 (crntCpuOvrLdIns & RGR_CPU_OVRLD_UL_TPT_DOWN);
-   if ((crntUlCpuOL) && (crntUlCpuOL != RGR_CPU_OVRLD_UL_TPT_UP) && 
-       (crntUlCpuOL != RGR_CPU_OVRLD_UL_TPT_DOWN))
-   {
-      /* Cfg validation failed. Invalid Command. Either UP/DOWN is allowed */
-      return RFAILED;
-   }
-   if ((crntDlCpuOL == 0) && (crntUlCpuOL == 0))
-   {
-      /* Cfg validation failed. Invalid Command. Either UP/DOWN is allowed */
-      return RFAILED;
-   }
-
-   cell->cpuOvrLdCntrl.cpuOvrLdIns = crntCpuOvrLdIns;
-
-   if (crntUlCpuOL)
-   {
-      if (crntUlCpuOL == RGR_CPU_OVRLD_UL_TPT_DOWN)
-      {
-         cell->cpuOvrLdCntrl.tgtUlTpt = cell->measurements.ulTpt - \
-            (cell->measurements.ulTpt * 3 )/100;
-      }
-      else
-      {
-         cell->cpuOvrLdCntrl.tgtUlTpt = cell->measurements.ulTpt + \
-            (cell->measurements.ulTpt * 2 )/100;
-      }
-      DU_LOG("\nDEBUG  -->  SCH : CPU OVR LD UL Reset to "
-            "%d, %u, %u", (int)crntUlCpuOL, cell->cpuOvrLdCntrl.tgtUlTpt,cell->measurements.ulTpt);
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH : CPU OVR LD UL Reset to= %d, %u, %u\n", (int)crntUlCpuOL, cell->cpuOvrLdCntrl.tgtUlTpt,
-                             cell->measurements.ulTpt);
-#endif
-   }
-
-   if (crntDlCpuOL)
-   {
-      if (crntDlCpuOL == RGR_CPU_OVRLD_DL_TPT_DOWN)
-      {
-         cell->cpuOvrLdCntrl.tgtDlTpt = cell->measurements.dlTpt - \
-                                        (cell->measurements.dlTpt * 1 )/100;
-      }
-      else
-      {
-         cell->cpuOvrLdCntrl.tgtDlTpt = cell->measurements.dlTpt + \
-            (cell->measurements.dlTpt * 1 )/100;
-      }
-      DU_LOG("\nDEBUG  -->  SCH : CPU OVR LD DL Reset to "
-            "%d, %u, %u", (int)crntDlCpuOL, cell->cpuOvrLdCntrl.tgtDlTpt,cell->measurements.dlTpt);
-
-#ifdef CPU_OL_DBG_PRINTS
-      DU_LOG("\nDEBUG  -->  SCH :  CPU OVR LD DL Reset to= %d, %lu, %lu\n", (int)crntDlCpuOL, cell->cpuOvrLdCntrl.tgtDlTpt,
-                             cell->measurements.dlTpt);
-#endif
-   }
-   rgSCHUtlCpuOvrLdAdjItbsCap(cell);
-   return ROK;
-}
-#ifdef EMTC_ENABLE
-S16 rgSCHUtlAddToResLst
-(
- CmLListCp   *cp,  
- RgSchIotRes *iotRes
- )
-{
-   cmLListAdd2Tail(cp, &iotRes->resLnk);
-   iotRes->resLnk.node = (PTR)iotRes;
-   return ROK;
-}
-S16 rgSCHUtlDelFrmResLst
-(
-RgSchUeCb *ue,
-RgSchIotRes *iotRes
-)
-{
-   CmLListCp  *cp = NULLP;
-   RgSchEmtcUeInfo *emtcUe = NULLP;
-   emtcUe = RG_GET_EMTC_UE_CB(ue);
-   if(iotRes->resType == RG_SCH_EMTC_PUCCH_RES)
-   {
-      cp = &emtcUe->ulResLst;
-   }else if(iotRes->resType == RG_SCH_EMTC_PDSCH_RES)
-   {
-      cp = &emtcUe->dlResLst;
-   }else
-   {
-      DU_LOG("\nINFO  -->  SCH : *****restype mismatch");
-   }
-   if(cp != NULLP )
-   { 
-      if(cp->count == 0)
-      {
-         DU_LOG("\nINFO  -->  SCH : ****error count*****\n");
-         return ROK;
-      }
-   }
-   cmLListDelFrm(cp, &iotRes->resLnk);
-   iotRes->resLnk.node = NULLP;
-   return ROK;
-}
-#endif
-/**********************************************************************
-
-         End of file
-**********************************************************************/