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
                 
   
      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
 
 **********************************************************************/
                   --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 */
 /** 
  * @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 */
 #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 "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 */
 #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 "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 */
 /*@{*/
 
 /** @addtogroup tmmode */
 /*@{*/
 
@@ -111,36 +90,23 @@ extern U32 rgMacGT ;
  *      -# ROK 
  *      -# RFAILED 
  */
  *      -# ROK 
  *      -# RFAILED 
  */
-#ifdef ANSI
-PUBLIC Void kwTmmQSdu
+Void rlcTmmQSdu
 (
 (
-KwCb            *gCb,
-KwDlRbCb        *rbCb,      
-KwuDatReqInfo   *datReqInfo, 
+RlcCb            *gCb,
+RlcDlRbCb        *rbCb,      
+RlcDatReqInfo   *datReqInfo, 
 Buffer          *mBuf       
 )
 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 )
    {
 #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   
    }
 #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;
         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)
      {
 #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; 
 
    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         
 */
 *    -# 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 */
    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);
 
 
    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)
    {
    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 )
       {
       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
          /* 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 
             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;
             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;
          }
          else
 #endif
          {
             sfn = (staInd->transId >> 8) & 0x3FF;
-            subframe = staInd->transId & 0xFF;
+            slot = staInd->transId & 0xFF;
          }
 
          /* Table
          }
 
          /* Table
-          * tm.subframe - current subframe 
+          * tm.slot - current slot 
           * 0,sfn        7,sfn-1
           * 4,sfn        1,sfn
           * 5,sfn        2,sfn
           * 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. */
           * 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) ||
          {
             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;
          {
             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);
             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
          {
          }
          else
          {
@@ -295,33 +240,22 @@ RguCStaIndInfo   *staInd;
          {
             timeDiff = curTime - sdu->arrTime;
          }
          {
             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;
          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);
             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;
          }
 
             continue;
          }
 
@@ -329,36 +263,20 @@ RguCStaIndInfo   *staInd;
          {
             /* Memory leak needs to be fixed */
             node = node->next;
          {
             /* 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
          {
             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;
          }
       }
             break;
          }
       }
@@ -366,74 +284,72 @@ RguCStaIndInfo   *staInd;
    }
    if ( node == NULLP )
    {
    }
    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 (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 */
    }
 #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++;
 
 
    /* 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); 
 
    /* 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 
  */
  * @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
 
 #ifdef LTE_L2_MEAS_RLC
-   kwUtlEmptySduQ(gCb, rbCb, &rbCb->m.tm.sduQ);
+   rlcUtlEmptySduQ(gCb, rbCb, &rbCb->m.tm.sduQ);
 #else
 #else
-   kwUtlEmptySduQ(gCb,&rbCb->m.tm.sduQ);
+   rlcUtlEmptySduQ(gCb,&rbCb->m.tm.sduQ);
 #endif
    
 #endif
    
-   RETVOID;
+   return;
 }
 /**
  *
 }
 /**
  *
@@ -493,77 +401,44 @@ KwDlRbCb   *rbCb;
  *    -# RFAILED 
  */
 
  *    -# 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 */
 
    /* 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
 } 
 
 #ifdef _cplusplus