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
#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,
+static Void rlcTmmSendBoSta ARGS((RlcCb *gCb, RlcDlRbCb *rbCb,
MsgLen bo, KwuDatReqInfo *datReqInfo));
-extern U32 rgMacGT ;
+uint32_t rgMacGT ;
/** @addtogroup tmmode */
/*@{*/
* -# ROK
* -# RFAILED
*/
-#ifdef ANSI
-PUBLIC Void kwTmmQSdu
+Void rlcTmmQSdu
(
-KwCb *gCb,
-KwDlRbCb *rbCb,
+RlcCb *gCb,
+RlcDlRbCb *rbCb,
KwuDatReqInfo *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
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;
}
/**
* -# 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 */
- RlcMacData *dlData;
- 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);
* 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, slot;
+ uint16_t sfn, slot;
/* MS_FIX: syed sfn is of 10 bytes rather than 8 */
#ifdef EMTC_ENABLE
/* As part of CATM feature cross slot scheduling is implemented , so there is some delta(currently 2)
(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 slot %d UEID:%d CELLID:%d",
- sfn,
- slot,
- 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
{
{
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;
}
{
/* 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;
}
}
}
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,
- dlData,(Size)sizeof(RlcMacData));
+ RLC_ALLOC_SHRABL_BUF(RLC_MEM_REGION_DL, RLC_POOL,
+ dlData,(Size)sizeof(RlcData));
#if (ERRCLASS & ERRCLS_ADD_RES)
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 */
- dlData->timeToTx.sfn = sdu->mode.tm.sfn;
- dlData->timeToTx.slot = sdu->mode.tm.slot;
+ 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->nmbPdu = 1;
+ dlData->numPdu = 1;
dlData->pduInfo[0].commCh = TRUE;
dlData->pduInfo[0].lcId = rbCb->lch.lChId;
- dlData->pduInfo[0].pduBuf = sdu->mBuf;
+
+ /* 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 )
+ {
+ DU_LOG("\nERROR --> RLC_DL : Memory allocation failed");
+ return;
+ }
+ ODU_COPY_MSG_TO_FIX_BUF(sdu->mBuf, 0, pduLen, \
+ dlData->pduInfo[0].pduBuf, (MsgLen *)©Len);
+ 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,EVTRLCDLDAT, NULLP);
- }
-
- RlcMacSendDlData(&(gCb->u.dlCb->rguDlSap[suId].pst),
- gCb->u.dlCb->rguDlSap[suId].spId,
- dlData);
- 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;
}
/**
* @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;
}
/**
*
* -# 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, KwuDatReqInfo *datReqInfo)
{
-// RguCStaRspInfo *staRspInfo; /* Status Response Information */
- RlcMacBOStatus *boStatus; /* Buffer occupancy status information */
- KwRguSapCb *rguSap; /* SAP Information */
-
- TRC3(kwTmmSndStaRsp)
-
-
- rguSap = &(gCb->u.dlCb->rguDlSap[rbCb->rguSapId]);
+ Pst pst; /* Post structure */
+ RlcBoStatus *boStatus; /* Buffer occupancy status information */
- KW_ALLOC_SHRABL_BUF(gCb->u.dlCb->rguDlSap[rbCb->rguSapId].pst.region,
- gCb->u.dlCb->rguDlSap[rbCb->rguSapId].pst.pool,
- boStatus, sizeof(RguCStaRspInfo));
-#if (ERRCLASS & ERRCLS_ADD_RES)
+ 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 */
boStatus->cellId = rbCb->rlcId.cellId;
- boStatus->rnti = rbCb->rlcId.ueId;
+ boStatus->ueIdx = rbCb->rlcId.ueId;
boStatus->commCh = TRUE;
boStatus->lcId = rbCb->lch.lChId;
boStatus->bo = bo;
if(gCb->init.trc == TRUE)
{
/* Populate the trace params */
- kwLmmSendTrc(gCb, EVTRLCBOSTA, NULLP);
+ rlcLmmSendTrc(gCb, EVENT_BO_STATUS_TO_MAC, NULLP);
}
- RlcMacSendBOStatus(&rguSap->pst, rguSap->spId, boStatus);
+ /* 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