Deleted the rlog folder
[o-du/l2.git] / src / 5gnrrlc / kw_tmm_dl.c
index 730f365..55cc0b8 100755 (executable)
 
 /**********************************************************************
 
-     Name:     LTE-RLC Layer 
+     Name:     NR RLC Layer 
   
      Type:     C file
   
      Desc:     Source code for RLC Transparent mode assembly and
                reassembly.This file contains following functions
                 
-                  --kwTmmQSdu
-                  --kwTmmSndToLi
-                  --kwTmmRcvFrmLi
+                  --rlcTmmQSdu
+                  --rlcTmmSendToMac
+                  --rlcTmmRcvFrmMac
                   --kwTmmReEstablish 
 
      File:     kw_tmm_dl.c
 
 **********************************************************************/
-static const char* RLOG_MODULE_NAME="TMM";
-static int RLOG_MODULE_ID=2048;
-static int RLOG_FILE_ID=200;
 /** 
  * @file kw_tmm_dl.c
  * @brief RLC Transparent Mode module
 */
 \f
 /* header (.h) include files */
-#include "envopt.h"        /* environment options */
-#include "envdep.h"        /* environment dependent */
-#include "envind.h"        /* environment independent */
-
-#include "gen.h"           /* general */
-#include "ssi.h"           /* system services */
-#include "cm5.h"           /* common timer defines */
-#include "cm_tkns.h"       /* common tokens defines */
-#include "cm_mblk.h"       /* common memory allocation library defines */
-#include "cm_llist.h"      /* common link list  defines  */
-#include "cm_hash.h"       /* common hash list  defines */
-#include "cm_lte.h"        /* common LTE defines */
+#include "common_def.h"
 #include "lkw.h"           /* LKW defines */
 #include "ckw.h"           /* CKW defines */
 #include "kwu.h"           /* KWU defines */
@@ -66,16 +52,6 @@ static int RLOG_FILE_ID=200;
 #include "kw_dl.h"
 
 /* extern (.x) include files */
-#include "gen.x"           /* general */
-#include "ssi.x"           /* system services */
-
-#include "cm5.x"           /* common timer library */
-#include "cm_tkns.x"       /* common tokens */
-#include "cm_mblk.x"       /* common memory allocation */
-#include "cm_llist.x"      /* common link list */
-#include "cm_hash.x"       /* common hash list */
-#include "cm_lte.x"        /* common LTE includes */
-#include "cm_lib.x"        /* common memory allocation library */
 #include "lkw.x"           /* LKW */
 #include "ckw.x"           /* CKW */
 #include "kwu.x"           /* KWU */
@@ -84,12 +60,15 @@ static int RLOG_FILE_ID=200;
 #include "kw.x"
 #include "kw_udx.x"
 #include "kw_dl.x"
+#include "rlc_utils.h"
+#include "rlc_mac_inf.h"
+#include "rlc_lwr_inf_api.h"
 
-#define KW_MODULE (KW_DBGMASK_TM | KW_DBGMASK_DL)
+#define RLC_MODULE (RLC_DBGMASK_TM | RLC_DBGMASK_DL)
 
-PRIVATE Void kwTmmSndStaRsp ARGS((KwCb *gCb, KwDlRbCb *rbCb, 
-                                 MsgLen bo, KwuDatReqInfo *datReqInfo));
-extern U32 rgMacGT ;  
+static Void rlcTmmSendBoSta ARGS((RlcCb *gCb, RlcDlRbCb *rbCb, 
+                                 MsgLen bo, RlcDatReqInfo *datReqInfo));
+uint32_t rgMacGT ;  
 /** @addtogroup tmmode */
 /*@{*/
 
@@ -111,36 +90,23 @@ extern U32 rgMacGT ;
  *      -# ROK 
  *      -# RFAILED 
  */
-#ifdef ANSI
-PUBLIC Void kwTmmQSdu
+Void rlcTmmQSdu
 (
-KwCb            *gCb,
-KwDlRbCb        *rbCb,      
-KwuDatReqInfo   *datReqInfo, 
+RlcCb            *gCb,
+RlcDlRbCb        *rbCb,      
+RlcDatReqInfo   *datReqInfo, 
 Buffer          *mBuf       
 )
-#else
-PUBLIC Void kwTmmQSdu(gCb,rbCb,datReqInfo,mBuf)
-KwCb            *gCb;
-KwDlRbCb        *rbCb;       
-KwuDatReqInfo   *datReqInfo;  
-Buffer          *mBuf;         
-#endif
 {
-   KwSdu   *sdu;              
+   RlcSdu   *sdu;              
  
-   TRC2(kwTmmQSdu) 
-
-
-   KW_ALLOC(gCb,sdu,sizeof(KwSdu));
+   RLC_ALLOC(gCb,sdu,sizeof(RlcSdu));
 #if (ERRCLASS & ERRCLS_ADD_RES)
    if ( sdu == NULLP )
    {
-      RLOG_ARG2(L_FATAL,DBG_RBID,rbCb->rlcId.rbId,
-            "Memory Allocation failed UEID:%d CELLID:%d",   
-            rbCb->rlcId.ueId,
-            rbCb->rlcId.cellId);   
-      RETVOID;
+      DU_LOG("\nERROR  -->  RLC_DL : Memory Allocation failed UEID:%d CELLID:%d",   
+            rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+      return;
    }
 #endif /* ERRCLASS & ERRCLS_ADD_RES */
 #ifdef CCPU_OPT   
@@ -148,7 +114,7 @@ Buffer          *mBuf;
         rbCb->lch.lChType == CM_LTE_LCH_PCCH )
    {
       sdu->mode.tm.sfn = datReqInfo->tm.tmg.sfn;
-      sdu->mode.tm.subframe = datReqInfo->tm.tmg.subframe;
+      sdu->mode.tm.slot = datReqInfo->tm.tmg.slot;
 #ifdef EMTC_ENABLE
      if(rbCb->lch.lChType == CM_LTE_LCH_PCCH)
      {
@@ -168,8 +134,8 @@ Buffer          *mBuf;
    cmLListAdd2Tail(&(rbCb->m.tm.sduQ), &(sdu->lstEnt));  
    sdu->lstEnt.node = (PTR)sdu; 
 
-   kwTmmSndStaRsp(gCb, rbCb, sdu->sduSz, datReqInfo); 
-   RETVOID;
+   rlcTmmSendBoSta(gCb, rbCb, sdu->sduSz, datReqInfo); 
+   return;
 }
 
 /**
@@ -188,63 +154,49 @@ Buffer          *mBuf;
 *    -# ROK 
 *    -# RFAILED         
 */
-#ifdef ANSI
-PUBLIC Void kwTmmSndToLi
-(
-KwCb             *gCb,
-SuId             suId,
-KwDlRbCb         *rbCb,              
-RguCStaIndInfo   *staInd
-)
-#else
-PUBLIC Void kwTmmSndToLi(gCb, suId, rbCb, staInd)
-KwCb             *gCb;
-SuId             suId;
-KwDlRbCb         *rbCb;             
-RguCStaIndInfo   *staInd;
-#endif
+void rlcTmmSendToMac(RlcCb *gCb, SuId suId, RlcDlRbCb *rbCb, RguCStaIndInfo *staInd)
 {
+   Pst              pst;
    CmLList          *node;          /* Current Link List Node */
-   KwSdu            *sdu;           /* SDU */
-   RguCDatReqInfo   *cDatReqInfo;   /* Data Request Information */
-   S16   timeDiff = 0;
-   Ticks curTime  = 0;
-
-   TRC2(kwTmmSndToLi)
-
+   RlcSdu           *sdu;           /* SDU */
+   RlcData          *dlData;
+   uint16_t         pduLen;
+   uint16_t         copyLen;
+   int16_t          timeDiff = 0;
+   Ticks            curTime  = 0;
 
    CM_LLIST_FIRST_NODE(&(rbCb->m.tm.sduQ), 
                        node);
 
-   /* (Sfn,subframe) at which the message should be transmitted is 
-    * validated with alloted (sfn,subframe)in the MAC layer */
+   /* (Sfn,slot) at which the message should be transmitted is 
+    * validated with alloted (sfn,slot)in the MAC layer */
    while (node != NULLP)
    {
-      sdu = (KwSdu *)(node->node);
+      sdu = (RlcSdu *)(node->node);
       if ( rbCb->lch.lChType == CM_LTE_LCH_BCCH ||
             rbCb->lch.lChType == CM_LTE_LCH_PCCH )
       {
-         U16 sfn, subframe;
+         uint16_t sfn, slot;
          /* MS_FIX: syed sfn is of 10 bytes rather than 8 */
 #ifdef EMTC_ENABLE
-         /* As part of CATM feature cross subframe scheduling is implemented , so there is some delta(currently 2)
+         /* As part of CATM feature cross slot scheduling is implemented , so there is some delta(currently 2)
             between MPDCCH and PDSCH,RLC expects cell crntTime of transmission of control dlsf, so one extra 
-            information is provided in staInd, so that sfn,subframe should calculate from paging Timing information 
+            information is provided in staInd, so that sfn,slot should calculate from paging Timing information 
             in case of EMTC paging, instead of transId */
          if(staInd->isEmtcPaging)
          {
             sfn      = staInd->pagingTimingInfo.sfn;
-            subframe = staInd->pagingTimingInfo.subframe;
+            slot = staInd->pagingTimingInfo.slot;
          }
          else
 #endif
          {
             sfn = (staInd->transId >> 8) & 0x3FF;
-            subframe = staInd->transId & 0xFF;
+            slot = staInd->transId & 0xFF;
          }
 
          /* Table
-          * tm.subframe - current subframe 
+          * tm.slot - current slot 
           * 0,sfn        7,sfn-1
           * 4,sfn        1,sfn
           * 5,sfn        2,sfn
@@ -254,30 +206,23 @@ RguCStaIndInfo   *staInd;
           * Take care of SFN wraparound. TODO: It is better for RLC
           * not to be aware of SCH DELTAs. So we should look for 
           * sending actual transmission time to RLC. */
-         if ((subframe + TFU_DELTA) >= 10)
+         if ((slot + TFU_DELTA) >= 10)
          {
             sfn = (sfn + 1)%1024;
          }
 
          if ((sdu->mode.tm.sfn != sfn) ||
-               (sdu->mode.tm.subframe != ((subframe+TFU_DELTA)%10)))
+               (sdu->mode.tm.slot != ((slot+TFU_DELTA)%10)))
          {
             node = node->next;
-            RLOG_ARG4(L_DEBUG,DBG_RBID,rbCb->rlcId.rbId,
-                  "Releasing SDU of RNTI = %d for RNTI = %d UEID:%d CELLID:%d",
-                  sdu->mode.tm.rnti, 
-                  staInd->rnti,
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
-            RLOG_ARG4(L_DEBUG,DBG_RBID,rbCb->rlcId.rbId,
-                  "sfn %d subframe %d  UEID:%d CELLID:%d",
-                  sfn, 
-                  subframe,
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
+            DU_LOG("\nINFO  -->  RLC_DL : rlcTmmSendToMac: Releasing SDU of RNTI = %d for RNTI = %d \
+              UEID:%d CELLID:%d", sdu->mode.tm.rnti, staInd->rnti, rbCb->rlcId.ueId,
+               rbCb->rlcId.cellId);   
+            DU_LOG("\nINFO  -->  RLC_DL : rlcTmmSendToMac: sfn %d slot %d  UEID:%d CELLID:%d",
+                  sfn, slot, rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
             cmLListDelFrm(&(rbCb->m.tm.sduQ), &sdu->lstEnt);
-            KW_FREE_BUF(sdu->mBuf);
-            KW_FREE(gCb, sdu, sizeof(KwSdu));
+            ODU_PUT_MSG_BUF(sdu->mBuf);
+            RLC_FREE(gCb, sdu, sizeof(RlcSdu));
          }
          else
          {
@@ -295,33 +240,22 @@ RguCStaIndInfo   *staInd;
          {
             timeDiff = curTime - sdu->arrTime;
          }
-         RLOG_ARG4(L_DEBUG, DBG_RBID,rbCb->rlcId.rbId,
-               "TMM: TmSdu Sta Indication received for Rnti %d Sdu Rnti %d "
-               " UEID:%d CELLID:%d", 
-               staInd->rnti, 
-               sdu->mode.tm.rnti,
-               rbCb->rlcId.ueId,
-               rbCb->rlcId.cellId);   
-         RLOG_ARG4(L_DEBUG, DBG_RBID,rbCb->rlcId.rbId,
-               "TMM: TmSdu Sta Indication received : timeDiff %d SduQCnt %lu"
-               " UEID:%d CELLID:%d", 
-               timeDiff, 
-               rbCb->m.tm.sduQ.count,
-               rbCb->rlcId.ueId,
-               rbCb->rlcId.cellId);   
+         DU_LOG("\nDEBUG  -->  RLC_DL : rlcTmmSendToMac: TMM: TmSdu Sta Indication received \
+           for Rnti %d Sdu Rnti %d UEID:%d CELLID:%d", staInd->rnti, 
+            sdu->mode.tm.rnti, rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+        DU_LOG("\nDEBUG  -->  RLC_DL : rlcTmmSendToMac: TMM: TmSdu Sta Indication received : \
+           timeDiff %d SduQCnt %d UEID:%d CELLID:%d", timeDiff, rbCb->m.tm.sduQ.count,
+            rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
          if (timeDiff > 40)
          {
             /* Memory leak needs to be fixed */
             node = node->next;
-            RLOG_ARG3(L_DEBUG, DBG_RBID,rbCb->rlcId.rbId,
-                  " timeDiff greater than 40, so deleting the Sdu %u "
-                  " UEID:%d CELLID:%d", 
-                  sdu->mode.tm.rnti,
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
+            DU_LOG("\nERROR  -->  RLC_DL : rlcTmmSendToMac: timeDiff greater than 40, so deleting\
+              the Sdu %u UEID:%d CELLID:%d", sdu->mode.tm.rnti, rbCb->rlcId.ueId,
+               rbCb->rlcId.cellId);   
             cmLListDelFrm(&(rbCb->m.tm.sduQ), &sdu->lstEnt);
-            KW_FREE_BUF(sdu->mBuf);
-            KW_FREE(gCb, sdu, sizeof(KwSdu));
+            ODU_PUT_MSG_BUF(sdu->mBuf);
+            RLC_FREE(gCb, sdu, sizeof(RlcSdu));
             continue;
          }
 
@@ -329,36 +263,20 @@ RguCStaIndInfo   *staInd;
          {
             /* Memory leak needs to be fixed */
             node = node->next;
-            RLOG_ARG4(L_DEBUG,DBG_RBID,rbCb->rlcId.rbId, 
-                  "TMM: Searching for Rnti %d Skipping Sdu for Rnti %d"
-                  " UEID:%d CELLID:%d", 
-                  staInd->rnti,
-                  sdu->mode.tm.rnti, 
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
-            RLOG_ARG4(L_DEBUG,DBG_RBID,rbCb->rlcId.rbId, 
-                  " timeDiff %d sdu->arrTime %d"
-                  " UEID:%d CELLID:%d", 
-                  timeDiff, 
-                  sdu->arrTime,
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
-            RLOG_ARG4(L_DEBUG,DBG_RBID,rbCb->rlcId.rbId, 
-                  "curTime %d SduQCnt %lu and continuing"
-                  " UEID:%d CELLID:%d", 
-                   curTime, 
-                   rbCb->m.tm.sduQ.count,
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
+           DU_LOG("\nDEBUG  -->  RLC_DL : rlcTmmSendToMac: TMM: Searching for Rnti %d Skipping \
+              Sdu for Rnti %d UEID:%d CELLID:%d", staInd->rnti, sdu->mode.tm.rnti, 
+               rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+           DU_LOG("\nINFO  -->  RLC_DL : rlcTmmSendToMac: timeDiff %d sdu->arrTime %d UEID:%d CELLID:%d", 
+                timeDiff, sdu->arrTime, rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+            DU_LOG("\nINFO  -->  RLC_DL : rlcTmmSendToMac: curTime %d SduQCnt %d and continuing"
+               " UEID:%d CELLID:%d", curTime, rbCb->m.tm.sduQ.count, rbCb->rlcId.ueId,
+               rbCb->rlcId.cellId);   
             continue;
          }
          else
          {
-            RLOG_ARG3(L_DEBUG, DBG_RBID,rbCb->rlcId.rbId,
-                  "TMM: TmSdu found %u UEID:%d CELLID:%d",
-                  sdu->mode.tm.rnti,
-                  rbCb->rlcId.ueId,
-                  rbCb->rlcId.cellId);   
+            DU_LOG("\nDEBUG  -->  RLC_DL : rlcTmmSendToMac: TMM: TmSdu found %u UEID:%d CELLID:%d",
+               sdu->mode.tm.rnti, rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
             break;
          }
       }
@@ -366,74 +284,72 @@ RguCStaIndInfo   *staInd;
    }
    if ( node == NULLP )
    {
-      RLOG_ARG2(L_ERROR,DBG_RBID,rbCb->rlcId.rbId,
-               "SDU not found TM Queue is empty UEID:%d CELLID:%d",
-               rbCb->rlcId.ueId,
-               rbCb->rlcId.cellId);   
-      RETVOID;
+      DU_LOG("\nERROR  -->  RLC_DL : rlcTmmSendToMac: SDU not found TM Queue is empty UEID:%d CELLID:%d",
+         rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+      return;
    }
-   sdu = (KwSdu *)node->node;
+   sdu = (RlcSdu *)node->node;
 
-    KW_ALLOC_SHRABL_BUF(gCb->u.dlCb->rguDlSap[suId].pst.region,
-                        gCb->u.dlCb->rguDlSap[suId].pst.pool,
-                        cDatReqInfo,(Size)sizeof(RguCDatReqInfo));
+    RLC_ALLOC_SHRABL_BUF(RLC_MEM_REGION_DL, RLC_POOL,
+                        dlData,(Size)sizeof(RlcData));
 #if (ERRCLASS & ERRCLS_ADD_RES)
-   if ( cDatReqInfo == NULLP )
+   if ( dlData == NULLP )
    {
-      RLOG_ARG2(L_FATAL,DBG_RBID,rbCb->rlcId.rbId,
-            "Memory Allocation failed UEID:%d CELLID:%d",   
-               rbCb->rlcId.ueId,
-               rbCb->rlcId.cellId);   
-      RETVOID; 
+      DU_LOG("\nERROR  -->  RLC_DL : rlcTmmSendToMac: Memory Allocation failed UEID:%d CELLID:%d",   
+         rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+      return; 
    }
 #endif /* ERRCLASS & ERRCLS_ADD_RES */
-#ifdef CCPU_OPT
-   if ( rbCb->lch.lChType == CM_LTE_LCH_BCCH ||  
-        rbCb->lch.lChType == CM_LTE_LCH_PCCH )
-   {
-      cDatReqInfo->u.timeToTx.sfn = sdu->mode.tm.sfn;
-      cDatReqInfo->u.timeToTx.subframe = sdu->mode.tm.subframe;
-#ifdef EMTC_ENABLE
-       if(rbCb->lch.lChType == CM_LTE_LCH_PCCH)
-       {
-         cDatReqInfo->pnb = sdu->mode.tm.pnb; 
-       }
-#endif
-   }
-   else
+
+   dlData->slotInfo.sfn = sdu->mode.tm.sfn;
+   dlData->slotInfo.slot = sdu->mode.tm.slot;
+   dlData->cellId = rbCb->rlcId.cellId;
+   dlData->rnti = sdu->mode.tm.rnti;
+   dlData->numPdu = 1;
+   dlData->pduInfo[0].commCh = TRUE;
+   dlData->pduInfo[0].lcId = rbCb->lch.lChId;
+
+   /* Copy Message to fixed buffer to send */
+   ODU_GET_MSG_LEN(sdu->mBuf, (MsgLen *)&pduLen);
+   RLC_ALLOC_SHRABL_BUF(RLC_MEM_REGION_DL, RLC_POOL,
+      dlData->pduInfo[0].pduBuf, pduLen);
+   if (dlData->pduInfo[0].pduBuf == NULLP )
    {
-      cDatReqInfo->u.rnti = sdu->mode.tm.rnti;
+      DU_LOG("\nERROR  -->  RLC_DL : Memory allocation failed");
+      return;
    }
-#endif 
-   cDatReqInfo->pdu = sdu->mBuf; 
-   cDatReqInfo->transId = rbCb->transId;
-   cDatReqInfo->cellId  = rbCb->rlcId.cellId;
-   cDatReqInfo->lcId   = rbCb->lch.lChId; 
-   cDatReqInfo->lcType = rbCb->lch.lChType; 
+   ODU_COPY_MSG_TO_FIX_BUF(sdu->mBuf, 0, pduLen, \
+      dlData->pduInfo[0].pduBuf, (MsgLen *)&copyLen);
+   dlData->pduInfo[0].pduLen = pduLen;
+
+   /* Free message */
+   ODU_PUT_MSG_BUF(sdu->mBuf);
 
    /* kw005.201 ccpu00117318, updating the statistics */
    gCb->genSts.bytesSent += sdu->sduSz;
    gCb->genSts.pdusSent++;
 
-   kwUtlIncrementKwuStsSduTx(gCb->u.dlCb->kwuDlSap + rbCb->kwuSapId);   
+   rlcUtlIncrementKwuStsSduTx(gCb->u.dlCb->rlcKwuDlSap + rbCb->k1wuSapId);   
 
    /* remove SDU from queue */ 
    sdu->mBuf = NULLP;
    cmLListDelFrm(&(rbCb->m.tm.sduQ),
                  &sdu->lstEnt); 
-   KW_FREE(gCb,sdu, sizeof(KwSdu));
+   RLC_FREE(gCb,sdu, sizeof(RlcSdu));
 
-   /* If trace flag is enabled send the trace indication */
-   if(gCb->init.trc == TRUE)
+   /* Fill Pst structure. Copying rguSap->pst to pst to avoid any
+    * changes in rguSap->pst */
+   memset(&pst, 0, sizeof(Pst));
+   FILL_PST_RLC_TO_MAC(pst, RLC_DL_INST, EVENT_DL_DATA_TO_MAC);
+
+   if(RlcSendDlDataToMac(&pst, dlData) != ROK)
    {
-      /* Populate the trace params */
-      kwLmmSendTrc(gCb,EVTRGUCDATREQ, NULLP);
-   }
-   KwLiRguCDatReq (&(gCb->u.dlCb->rguDlSap[suId].pst), 
-                   gCb->u.dlCb->rguDlSap[suId].spId, 
-                   cDatReqInfo);
-   
-   RETVOID;
+      RLC_FREE_SHRABL_BUF(pst.region, pst.pool, dlData->pduInfo[0].pduBuf, \
+         dlData->pduInfo[0].pduLen);
+      RLC_FREE_SHRABL_BUF(pst.region, pst.pool, dlData, sizeof(RlcData));
+   } 
+
+   return;
 }
 
 /**
@@ -451,28 +367,20 @@ RguCStaIndInfo   *staInd;
  * @return  S16
  *    -# ROK 
  */
-#ifdef ANSI
-PUBLIC Void kwDlTmmReEstablish
+Void rlcDlTmmReEstablish
 (
-KwCb       *gCb,
-KwDlRbCb   *rbCb    
+RlcCb       *gCb,
+RlcDlRbCb   *rbCb    
 )
-#else
-PUBLIC Void kwDlTmmReEstablish(gCb,rbCb)
-KwCb       *gCb;
-KwDlRbCb   *rbCb;     
-#endif
 {
-   TRC2(kwDlTmmReEstablish)
-
 
 #ifdef LTE_L2_MEAS_RLC
-   kwUtlEmptySduQ(gCb, rbCb, &rbCb->m.tm.sduQ);
+   rlcUtlEmptySduQ(gCb, rbCb, &rbCb->m.tm.sduQ);
 #else
-   kwUtlEmptySduQ(gCb,&rbCb->m.tm.sduQ);
+   rlcUtlEmptySduQ(gCb,&rbCb->m.tm.sduQ);
 #endif
    
-   RETVOID;
+   return;
 }
 /**
  *
@@ -493,77 +401,44 @@ KwDlRbCb   *rbCb;
  *    -# RFAILED 
  */
 
-#ifdef ANSI
-PRIVATE Void kwTmmSndStaRsp
-(
-KwCb            *gCb,
-KwDlRbCb        *rbCb,                 
-MsgLen          bo,                    
-KwuDatReqInfo   *datReqInfo         
-)
-#else
-PRIVATE Void kwTmmSndStaRsp(rbCb,bo,datReqInfo)
-KwCb            *gCb;
-KwDlRbCb        *rbCb;               
-MsgLen          bo;                
-KwuDatReqInfo   *datReqInfo;   
-#endif
+static void rlcTmmSendBoSta(RlcCb *gCb, RlcDlRbCb *rbCb, MsgLen bo, RlcDatReqInfo *datReqInfo)
 {
-   RguCStaRspInfo   *staRspInfo;   /* Status Response Information */
-   KwRguSapCb       *rguSap;       /* SAP Information */
-
-   TRC3(kwTmmSndStaRsp)
-
+   Pst              pst;            /* Post structure */    
+   RlcBoStatus      *boStatus;      /* Buffer occupancy status information */
 
-   rguSap = &(gCb->u.dlCb->rguDlSap[rbCb->rguSapId]);
-
-   KW_ALLOC_SHRABL_BUF(gCb->u.dlCb->rguDlSap[rbCb->rguSapId].pst.region,
-                       gCb->u.dlCb->rguDlSap[rbCb->rguSapId].pst.pool,
-                       staRspInfo,sizeof(RguCStaRspInfo));
-#if (ERRCLASS & ERRCLS_ADD_RES)
-   if ( staRspInfo == NULLP )
+   RLC_ALLOC_SHRABL_BUF(RLC_MEM_REGION_DL, RLC_POOL,
+                       boStatus, sizeof(RlcBoStatus));
+   if ( boStatus == NULLP )
    {
-      RLOG_ARG2(L_FATAL,DBG_RBID,rbCb->rlcId.rbId,
-            "Memory Allocation failed UEID:%d CELLID:%d",
-            rbCb->rlcId.ueId,
-            rbCb->rlcId.cellId);   
-      RETVOID;
+      DU_LOG("\nERROR  -->  RLC_DL : Memory Allocation failed UEID:%d CELLID:%d",\
+            rbCb->rlcId.ueId, rbCb->rlcId.cellId);   
+      return;
    }
-#endif /* ERRCLASS & ERRCLS_ADD_RES */
-   staRspInfo->bo = bo;
-   staRspInfo->cellId = rbCb->rlcId.cellId;
-   staRspInfo->lcId   = rbCb->lch.lChId;
-   staRspInfo->lcType = rbCb->lch.lChType;
-#ifdef CCPU_OPT    
-   if ( rbCb->lch.lChType == CM_LTE_LCH_BCCH ||
-        rbCb->lch.lChType == CM_LTE_LCH_PCCH )
-   {
-      staRspInfo->u.timeToTx.sfn      = datReqInfo->tm.tmg.sfn;
-      staRspInfo->u.timeToTx.subframe = datReqInfo->tm.tmg.subframe;
-#ifdef EMTC_ENABLE
-      if(rbCb->lch.lChType == CM_LTE_LCH_PCCH)
-      {
-         staRspInfo->emtcDiReason = datReqInfo->emtcDiReason;
-         staRspInfo->pnb = datReqInfo->pnb;
-      }
-#endif
-   }
-   else if ( rbCb->lch.lChType == CM_LTE_LCH_CCCH )
-   {
-       staRspInfo->u.rnti = datReqInfo->tm.rnti;
-   }
-#endif
+
+   boStatus->cellId = rbCb->rlcId.cellId;
+   boStatus->ueIdx = rbCb->rlcId.ueId;
+   boStatus->commCh = TRUE;
+   boStatus->lcId = rbCb->lch.lChId;
+   boStatus->bo = bo;
 
    /* If trace flag is enabled send the trace indication */
    if(gCb->init.trc == TRUE)
    {
       /* Populate the trace params */
-      kwLmmSendTrc(gCb,EVTRGUCSTARSP, NULLP);
+      rlcLmmSendTrc(gCb, EVENT_BO_STATUS_TO_MAC, NULLP);
    }
 
-   KwLiRguCStaRsp(&rguSap->pst,rguSap->spId,staRspInfo);
+   /* Fill Pst structure. Copying rguSap->pst to pst to avoid any
+    * changes in rguSap->pst */
+   memset(&pst, 0, sizeof(Pst));
+   FILL_PST_RLC_TO_MAC(pst, RLC_DL_INST, EVENT_DL_DATA_TO_MAC);
+
+   if(RlcSendBoStatusToMac(&pst, boStatus) != ROK)
+   {
+      RLC_FREE_SHRABL_BUF(pst.region, pst.pool, boStatus, sizeof(RlcBoStatus));
+   }
 
-   RETVOID;
+   return;
 } 
 
 #ifdef _cplusplus