X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrrlc%2Fkw_tmm_dl.c;h=a67e8ac9c8ad746d6a73edfc6fde5acf2d95034f;hb=2b5e7ba18453db526316b51476673c1ea69c1a94;hp=5b593c9ce8a26583ad4a7cd59f20d58e5f3cfa29;hpb=5831bf6b3454aa200a92cd3e84209650734e4863;p=o-du%2Fl2.git diff --git a/src/5gnrrlc/kw_tmm_dl.c b/src/5gnrrlc/kw_tmm_dl.c index 5b593c9ce..a67e8ac9c 100755 --- a/src/5gnrrlc/kw_tmm_dl.c +++ b/src/5gnrrlc/kw_tmm_dl.c @@ -25,17 +25,14 @@ 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 @@ -63,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((RlcCb *gCb, RlcDlRbCb *rbCb, +static Void rlcTmmSendBoSta ARGS((RlcCb *gCb, RlcDlRbCb *rbCb, MsgLen bo, KwuDatReqInfo *datReqInfo)); -extern U32 rgMacGT ; +uint32_t rgMacGT ; /** @addtogroup tmmode */ /*@{*/ @@ -90,28 +90,17 @@ extern U32 rgMacGT ; * -# ROK * -# RFAILED */ -#ifdef ANSI -PUBLIC Void kwTmmQSdu +Void rlcTmmQSdu ( RlcCb *gCb, RlcDlRbCb *rbCb, KwuDatReqInfo *datReqInfo, Buffer *mBuf ) -#else -PUBLIC Void kwTmmQSdu(gCb,rbCb,datReqInfo,mBuf) -RlcCb *gCb; -RlcDlRbCb *rbCb; -KwuDatReqInfo *datReqInfo; -Buffer *mBuf; -#endif { - KwSdu *sdu; + RlcSdu *sdu; - TRC2(kwTmmQSdu) - - - RLC_ALLOC(gCb,sdu,sizeof(KwSdu)); + RLC_ALLOC(gCb,sdu,sizeof(RlcSdu)); #if (ERRCLASS & ERRCLS_ADD_RES) if ( sdu == NULLP ) { @@ -119,7 +108,7 @@ Buffer *mBuf; "Memory Allocation failed UEID:%d CELLID:%d", rbCb->rlcId.ueId, rbCb->rlcId.cellId); - RETVOID; + return; } #endif /* ERRCLASS & ERRCLS_ADD_RES */ #ifdef CCPU_OPT @@ -147,8 +136,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; } /** @@ -167,30 +156,16 @@ Buffer *mBuf; * -# ROK * -# RFAILED */ -#ifdef ANSI -PUBLIC Void kwTmmSndToLi -( -RlcCb *gCb, -SuId suId, -RlcDlRbCb *rbCb, -RguCStaIndInfo *staInd -) -#else -PUBLIC Void kwTmmSndToLi(gCb, suId, rbCb, staInd) -RlcCb *gCb; -SuId suId; -RlcDlRbCb *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); @@ -199,11 +174,11 @@ RguCStaIndInfo *staInd; * 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) @@ -242,21 +217,14 @@ RguCStaIndInfo *staInd; (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("\nRLC: 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("\nRLC: rlcTmmSendToMac: sfn %d slot %d UEID:%d CELLID:%d", + sfn, slot, rbCb->rlcId.ueId, rbCb->rlcId.cellId); cmLListDelFrm(&(rbCb->m.tm.sduQ), &sdu->lstEnt); - RLC_FREE_BUF(sdu->mBuf); - RLC_FREE(gCb, sdu, sizeof(KwSdu)); + ODU_PUT_MSG_BUF(sdu->mBuf); + RLC_FREE(gCb, sdu, sizeof(RlcSdu)); } else { @@ -274,33 +242,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("\nRLC: 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("\nRLC: 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("\nRLC: 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); - RLC_FREE_BUF(sdu->mBuf); - RLC_FREE(gCb, sdu, sizeof(KwSdu)); + ODU_PUT_MSG_BUF(sdu->mBuf); + RLC_FREE(gCb, sdu, sizeof(RlcSdu)); continue; } @@ -308,36 +265,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("\nRLC: 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("\nRLC: rlcTmmSendToMac: timeDiff %d sdu->arrTime %d UEID:%d CELLID:%d", + timeDiff, sdu->arrTime, rbCb->rlcId.ueId, rbCb->rlcId.cellId); + DU_LOG("\nRLC: 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("\nRLC: rlcTmmSendToMac: TMM: TmSdu found %u UEID:%d CELLID:%d", + sdu->mode.tm.rnti, rbCb->rlcId.ueId, rbCb->rlcId.cellId); break; } } @@ -345,60 +286,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("\nRLC: 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; - RLC_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("\nRLC: 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("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); - RLC_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; } /** @@ -416,28 +369,20 @@ RguCStaIndInfo *staInd; * @return S16 * -# ROK */ -#ifdef ANSI -PUBLIC Void rlcDlTmmReEstablish +Void rlcDlTmmReEstablish ( RlcCb *gCb, RlcDlRbCb *rbCb ) -#else -PUBLIC Void rlcDlTmmReEstablish(gCb,rbCb) -RlcCb *gCb; -RlcDlRbCb *rbCb; -#endif { - TRC2(rlcDlTmmReEstablish) - #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; } /** * @@ -458,47 +403,22 @@ RlcDlRbCb *rbCb; * -# RFAILED */ -#ifdef ANSI -PRIVATE Void kwTmmSndStaRsp -( -RlcCb *gCb, -RlcDlRbCb *rbCb, -MsgLen bo, -KwuDatReqInfo *datReqInfo -) -#else -PRIVATE Void kwTmmSndStaRsp(rbCb,bo,datReqInfo) -RlcCb *gCb; -RlcDlRbCb *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) - + Pst pst; /* Post structure */ + RlcBoStatus *boStatus; /* Buffer occupancy status information */ - rguSap = &(gCb->u.dlCb->rguDlSap[rbCb->rguSapId]); - - RLC_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("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; @@ -507,12 +427,20 @@ KwuDatReqInfo *datReqInfo; 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