+++ /dev/null
-/*******************************************************************************
-################################################################################
-# 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. #
-################################################################################
-*******************************************************************************/
-
-/********************************************************************20**
-
- Name: NR RLC - Configuration Manager file
-
- Type: C source file
-
- Desc: It contains the following configuraiton primtives
- for different actions
- -- rlcCfgValdtEntCfg
- -- rlcCfgFillRbCb
- -- rlcCfgRbInit
- -- rlcCfgAddRb
- -- rlcCfgReCfgRb
- -- rlcCfgDelRb
- -- rlcCfgReEstRb
- -- rlcCfgDelUe
-
- File: kw_cfg_dl.c
-
-*********************************************************************21*/
-
-/** @file kw_cfg_dl.c
-@brief RLC Downlink Configuration Module
-**/
-
-\f
-/* header (.h) include files */
-#include "common_def.h"
-#include "math.h"
-#include "lkw.h" /* LKW defines */
-#include "ckw.h" /* CKW defines */
-#include "kwu.h" /* KWU defines */
-#include "rgu.h" /* RGU defines */
-#include "kw_err.h" /* RLC error options */
-#include "kw_env.h" /* RLC environment options */
-#include "kw.h" /* RLC defines */
-#include "kw_udx.h"
-#include "kw_dl.h"
-
-/* extern (.x) include files */
-#include "lkw.x" /* LKW */
-#include "ckw.x" /* CKW */
-#include "kwu.x" /* KWU */
-#include "rgu.x" /* RGU */
-
-#include "kw.x"
-#include "kw_udx.x"
-#include "kw_dl.x"
-#include "du_app_rlc_inf.h"
-
-#define RLC_MODULE RLC_DBGMASK_CFG
-/*Added for adding new Ue in onging L2 Meas*/
-#ifdef LTE_L2_MEAS
-/**
- *
- * @brief Handle modification of UE ID for L2 Meas data structs
- *
- *
- * @param[in] ueId ue ID
- *
- * @return S16
- * -# ROK
- * -# RFAILED
- *
-*/
-static S16 rlcHdlMeasDlUeIdChg(RlcCb *gCb, uint8_t cellId,uint8_t oldUeId, uint8_t newUeId)
-{
- RlcL2MeasEvtCb *measEvtCb = NULLP;
- RlcL2MeasCb *measCb = NULLP;
- uint16_t cntr;
- uint16_t ueIdx = 0;
-
- for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
- {
- measEvtCb = &(gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr]);
- measCb = &(measEvtCb->measCb);
-
-
- if(measCb->measType & LKW_L2MEAS_DL_IP )
- {
-
- for(ueIdx = 0; ueIdx < measCb->val.ipThMeas.numUes; ueIdx++)
- {
- if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == oldUeId)
- {
- measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = newUeId;
- break;
- }
- }
- }
- }
- return ROK;
-}
-
-/**
- *
- * @brief Handler to delete an UE's L2 Meas ctxt
- *
-*
- * @param[in] ueId ue ID
- *
- * @return S16
- * -# ROK
- * -# RFAILED
- *
-*/
-static S16 rlcDelFrmDlL2Meas(RlcCb *gCb, uint8_t cellId,uint8_t ueId)
-{
- RlcL2MeasEvtCb *measEvtCb = NULLP;
- RlcL2MeasCb *measCb = NULLP;
- uint16_t cntr;
- uint16_t ueIdx = 0;
-
-
- for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
- {
- measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
- measCb = &(measEvtCb->measCb);
-
-
- if(measCb->measType & LKW_L2MEAS_DL_IP )
- {
-
- for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
- (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
- {
- if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
- {
- measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = FALSE;
- if (measCb->val.ipThMeas.numUes-1 == ueIdx)
- {
- measCb->val.ipThMeas.numUes--;
- }
- break;
- }
- }
- }
- }
-
- return ROK;
-}
-
-
-static S16 rlcAddToDlL2Meas(RlcCb *gCb, RlcDlRbCb *rlcRbCb,uint8_t cellId,uint8_t ueId)
-{
- RlcL2MeasEvtCb *measEvtCb = NULLP;
- RlcL2MeasCb *measCb = NULLP;
- uint16_t cntr;
- uint16_t cntr1;
- uint16_t ueIdx = 0;
- uint16_t qciIdx = 0;
- uint16_t *numQci;
- #ifndef XEON_SPECIFIC_CHANGES
- uint8_t freeIdx = gCb->genCfg.maxUe;
- #else
- uint16_t freeIdx = LKW_MAX_UE;
- #endif
-
-
- for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
- {
- measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
- measCb = &(measEvtCb->measCb);
-
- freeIdx = gCb->genCfg.maxUe;
-
- if(measCb->measType &
- (LKW_L2MEAS_ACT_UE | LKW_L2MEAS_UU_LOSS | LKW_L2MEAS_DL_DELAY))
- {
- for(cntr1 =0;((cntr1 < measCb->val.nonIpThMeas.numQci) &&
- (cntr1 < LKW_MAX_QCI));cntr1++)
- {
- if(measCb->val.nonIpThMeas.qci[cntr1] != rlcRbCb->qci)
- {
- measCb->val.nonIpThMeas.qci[cntr1] = rlcRbCb->qci;
- gCb->u.dlCb->rlcL2Cb.measOn[rlcRbCb->qci] |=measCb->measType;
- break;
- }
- }
- }
-
- if(((rlcRbCb->rbL2Cb.measOn & measCb->measType) == LKW_L2MEAS_NONE))
- {
- if (measCb->measType & LKW_L2MEAS_ACT_UE)
- {
- if((rlcRbCb->mode == RLC_MODE_UM) &&
- (rlcRbCb->dir & RLC_DIR_DL ))
- {
- if (rlcRbCb->m.umDl.sduQ.count)
- {
- if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
- {
- rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
- gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
- }
- }
- }
- else if (rlcRbCb->mode == RLC_MODE_AM)
- {
- if ((rlcRbCb->m.amDl.cntrlBo) ||
- (rlcRbCb->m.amDl.retxBo) ||
- (rlcRbCb->m.amDl.bo))
- {
- if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
- {
- rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
- gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
- }
- }
- }
- }
- }
- if((measCb->measType & LKW_L2MEAS_DL_IP))
- {
-
- for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
- (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
- {
- if ((freeIdx == gCb->genCfg.maxUe) &&
- (measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid == FALSE))
- {
- freeIdx = ueIdx;
- continue;
- }
- if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
- {
- break;
- }
- }
-
- if (ueIdx == measCb->val.ipThMeas.numUes)
- {
- if (gCb->genCfg.maxUe == measCb->val.ipThMeas.numUes)
- {
- return RFAILED;
- }
- if (gCb->genCfg.maxUe == freeIdx)
- {
- measCb->val.ipThMeas.numUes++;
- }
- else
- {
- ueIdx = freeIdx;
- }
- measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = TRUE;
- memset(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[0],0x00,(sizeof(RlcL2Cntr) *LKW_MAX_QCI));
- measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci = 0;
- }
- measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = ueId;
- measCb->val.ipThMeas.ueInfoLst[ueIdx].cellId = cellId;
- numQci = &(measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci);
-
- for (qciIdx =0; ((qciIdx < *numQci) &&
- (qciIdx < LKW_MAX_QCI)) ; qciIdx++)
- {
- if (measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] == rlcRbCb->qci)
- {
- break;
- }
- }
-
- /* Fix Klock Warning */
- if ((qciIdx == *numQci) && (qciIdx < LKW_MAX_QCI))
- {
- measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] = rlcRbCb->qci;
- (*numQci)++;
- }
-
- rlcUtlPlcMeasDatInL2Sts(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[rlcRbCb->qci],
- &rlcRbCb->rbL2Cb, measCb->measType);
- }
- else if (measCb->measType &
- (LKW_L2MEAS_DL_DISC | LKW_L2MEAS_DL_DELAY | LKW_L2MEAS_UU_LOSS))
- {
- rlcUtlPlcMeasDatInL2Sts(&measCb->val.nonIpThMeas.measData[rlcRbCb->qci],
- &rlcRbCb->rbL2Cb, measCb->measType);
- measCb->val.nonIpThMeas.qci[rlcRbCb->qci] = rlcRbCb->qci;
- measCb->val.nonIpThMeas.measData[rlcRbCb->qci].totDrbsPerQci++;
- }
- rlcRbCb->rbL2Cb.measOn |= measCb->measType;
- }
- return ROK;
-}/*rlcAddToDlL2Meas*/
-#endif /*LTE_L2_MEAS*/
-
-\f
-/**
- * @brief
- * This primitive fills the RbCb
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [out] rbCb - RB Control Block
- * @param [out] ueCb - UE Control Block
- * @param [in] entCfg - RLC Entity configuration
- *
- * @return S16
- * -#ROK
- * -#RFAILED
- */
-static S16 rlcCfgFillDlRbCb(RlcCb *gCb,RlcDlRbCb *rbCb,RlcDlUeCb *ueCb,RlcEntCfgInfo *entCfg)
-{
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgFillRbCb(ueId(%d),cellId(%d) rbType(%d))",
- rbCb->rlcId.ueId,
- rbCb->rlcId.cellId,
- entCfg->rbType);
-
- /* Initialize according to entMode */
- switch (entCfg->entMode)
- {
- case RLC_MODE_TM:
- {
- rbCb->lch.lChId = entCfg->lCh[0].lChId;
- rbCb->lch.lChType = entCfg->lCh[0].type;
- rbCb->dir = entCfg->dir;
- break;
- }
-
- case RLC_MODE_UM:
- {
- rbCb->lch.lChId = entCfg->lCh[0].lChId;
- rbCb->lch.lChType = entCfg->lCh[0].type;
- rbCb->dir = entCfg->dir;
-
- /* Spec 38.322 Section 7.1
- * All UM state variables can take values from 0 to 63 for 6 bit SN or
- * from 0 to 4095 for 12 bit SN. All arithmetic operations on UM state
- * variables are affected by the UM modulus
- * (i.e. final value = [value from arithmetic operation] modulo 64
- * for 6 bit SN and 4096 for 12 bit SN)
- */
- rbCb->m.umDl.snLen = entCfg->m.umInfo.dl.snLen;
- if (entCfg->m.umInfo.dl.snLen == RLC_UM_CFG_6BIT_SN_LEN)
- rbCb->m.umDl.modBitMask = 0x3f;
- else
- rbCb->m.umDl.modBitMask = 0xfff;
-
- ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
-
- break;
- }
- case RLC_MODE_AM:
- {
- /* Down Link Information
- * indx = 0 as Down Link */
- rbCb->lch.lChId = entCfg->lCh[0].lChId;
- rbCb->lch.lChType = entCfg->lCh[0].type;
- rbCb->dir = RLC_DIR_BOTH;
-
- rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
- rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
- rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
- rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
- rbCb->m.amDl.snLen = entCfg->m.amInfo.dl.snLen;
-
- if(RLC_AM_CFG_12BIT_SN_LEN == rbCb->m.amDl.snLen)
- {
- rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_12BITS) - 1; /* 5GNR */
- }
- else
- {
- rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_18BITS) - 1; /* 5GNR */
- }
-
- cmInitTimers(&(rbCb->m.amDl.pollRetxTmr), 1);
- ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
-
-#ifndef LTE_TDD
- uint32_t hashIndex;
- RLC_ALLOC(gCb,
- rbCb->m.amDl.txBufLst,
- (RLC_TX_BUF_BIN_SIZE * sizeof(CmLListCp)));
- for(hashIndex = 0; hashIndex < RLC_TX_BUF_BIN_SIZE; hashIndex++)
- {
- cmLListInit(&(rbCb->m.amDl.txBufLst[hashIndex]));
- }
-#endif
- break;
- }
- default:
- {
- DU_LOG("\nERROR --> RLC_DL : Invalid RB Mode ueId(%d),cellId(%d)",
- rbCb->rlcId.ueId,
- rbCb->rlcId.cellId);
- return RFAILED;
- }
- }
- rbCb->mode = entCfg->entMode;
- rbCb->discTmrInt = entCfg->discardTmr;
-
- return ROK;
-}
-
-\f
-/**
- * @brief This primitive Initializes the RB Cb
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [out] rbCb - RB Control Block
- * @param [in] ptr - Void pointer
- * @param [in] entCfg - Entity Configuration
- *
- * @return S16
- * -#ROK
- * -#RFAILED
- */
-static S16 rlcCfgUpdateDlRb
-(
-RlcCb *gCb,
-RlcDlRbCb *rbCb,
-void *ptr,
-RlcEntCfgInfo *entCfg
-)
-{
-
- if (rbCb->mode != entCfg->entMode)
- {
- DU_LOG("\nERROR --> RLC_DL : RB Mode Mismatch : exp [%d] rcv [%d] UEID:%d CELLID:%d",
- rbCb->mode,
- entCfg->entMode,
- rbCb->rlcId.ueId,
- rbCb->rlcId.cellId);
- return (CKW_CFG_REAS_RB_MODE_MIS);
- }
-
- switch (rbCb->mode)
- {
- case RLC_MODE_TM:
- {
- RlcDlCellCb *cellCb = (RlcDlCellCb *)ptr;
-
- rbCb->dir = entCfg->dir;
- rbCb->lch.lChId = entCfg->lCh[0].lChId;
- rbCb->lch.lChType = entCfg->lCh[0].type;
-
- cellCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
- break;
- }
-
- case RLC_MODE_UM:
- {
- RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
-
- if (entCfg->lCh[0].type == CM_LTE_LCH_DCCH)
- {
- return (CKW_CFG_REAS_LCHTYPE_MIS);
- }
- ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
- ueCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rbCb;
-
- rbCb->lch.lChId = entCfg->lCh[0].lChId;
- rbCb->lch.lChType = entCfg->lCh[0].type;
- rbCb->dir = entCfg->dir;
- break;
- }
-
- case RLC_MODE_AM:
- {
- RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
-
- ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
- ueCb->lCh[entCfg->lCh[1].lChId - 1].dlRbCb = rbCb;
-
- /* Down Link */
- rbCb->lch.lChId = entCfg->lCh[1].lChId;
- rbCb->lch.lChType = entCfg->lCh[1].type;
- rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
- rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
- rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
- rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
-
- break;
- }
- }
-
-/* AGHOSH */
- rbCb->discTmrInt = entCfg->discardTmr;
-/* AGHOSH */
- return (CKW_CFG_REAS_NONE);
-}
-
-\f
-/**
- * @brief
- * This primitive adds new RB in Ue/Cell Cb.
- *
- * @details
- * This function does following steps -
- * - If UE ID is 0 then
- * - Check for CELL CB is present
- * - If yes, Check for RB ID
- * - If RB ID is present Status Indication with reason
- * - Else, Create New RB CB in CELL CB
- * - If no Create New CELL CB and RB CB
- * - Else,
- * - Check for UE CB is present
- * - If yes Check for RB ID
- * - If RB ID is present Status Indication with reason
- * - Else, Create New RB CB in UE CB
- * - If no Create New UE CB and RB CB
- * - Fill entity confirmation
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [in] ueId - UE Identifier
- * @param [in] cellId - CELL Identifier
- * @param [in] entCfg - Entity Configuration to be done.
- * @param [out] entCfm - Entity Confirmation.
- *
- * @return S16
- * -# ROK
- * -# RFAILED
- */
-S16 rlcCfgAddDlRb
-(
-RlcCb *gCb,
-CmLteRnti ueId,
-CmLteCellId cellId,
-RlcEntCfgInfo *entCfg,
-RlcEntCfgCfmInfo *entCfm
-)
-{
- RlcDlUeCb *ueCb = NULLP; /* UE Control Block */
- RlcDlCellCb *cellCb; /* Cell Control Block */
- RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
- uint8_t reason; /* Rb Identifier */
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgAddRb(cellId(%d),UEID:%d cfgType(%d))",
- cellId,
- ueId,
- entCfg->cfgType);
-
- if (cellId == 0)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_CELL_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : Add DLRb,CellId is 0 for UEID:%d",
- ueId);
- return RFAILED;
- }
- if ((entCfg->rguSapId >= gCb->genCfg.maxRguSaps) || (entCfg->rguSapId < 0))
- {
- RLCDBGP_ERROR(gCb, "rlcCfgAddDlRb(ueId(%u), cellId(%u), Invalid rguSapId (%d)\n",
- ueId, cellId, entCfg->rguSapId);
- return RFAILED;
- }
-
-
- /* Process Adding new RB */
- if (ueId == 0)
- {
- if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : Invalid RbId ,Max is [%d] CELLID:%d UEID:%d",
- RLC_MAX_RB_PER_CELL,
- cellId,
- ueId);
- return RFAILED;
- }
-
- if (((entCfg->lCh[0].type == CM_LTE_LCH_BCCH) ||
- (entCfg->lCh[0].type == CM_LTE_LCH_PCCH) ||
- (entCfg->lCh[0].type == CM_LTE_LCH_CCCH)) &&
- (entCfg->entMode == RLC_MODE_TM))
- {
- /* Cell CB present */
- rlcDbmFetchDlCellCb(gCb, cellId, &cellCb);
- if(cellCb)
- {
- /* Get rbCb from cellCb->rbCb List */
- if (( cellCb->rbCb[entCfg->rbId] != NULLP))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_PRSNT);
- DU_LOG("\nERROR --> RLC_DL : RbId [%d] already exists UEID:%d",
- entCfg->rbId,
- ueId);
- return RFAILED;
- }
- }
- else /* Cell CB UNKNOWN */
- {
- /* Create CELL CB */
- if ( ROK != rlcDbmCreateDlCellCb(gCb,cellId, &cellCb))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_CELL_CREAT_FAIL);
- DU_LOG("\nERROR --> RLC_DL : cellCb Creation failed RBID:%d UEID:%d",
- entCfg->rbId,
- ueId);
- return RFAILED;
- }
- }
-
- /* Validate LChId */
- if(entCfg->lCh[0].lChId <= 0)
- {
- DU_LOG("\nERROR --> RLC_DL : Invalid LcId CELLID:%d UEID:%d RBID:%d",
- cellId,
- ueId,
- entCfg->rbId);
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
- return RFAILED;
- }
-
- /* Create RB CB */
- RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
- if (!rlcRbCb)
- {
- DU_LOG("\nERROR --> RLC_DL : Memory allocation failed for rbId:%d CELLID:%d",
- entCfg->rbId,
- ueId);
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_CREAT_FAIL);
- return RFAILED;
- }
- rlcRbCb->rlcId.rbId = entCfg->rbId;
- cellCb->rbCb[entCfg->rbId] = rlcRbCb;
- RLC_LMM_RB_STS_INC(gCb);
- cellCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rlcRbCb;
- }
- else
- {
- reason= (entCfg->entMode != RLC_MODE_TM)? CKW_CFG_REAS_RB_MODE_MIS:
- CKW_CFG_REAS_LCHTYPE_MIS;
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, reason);
- return RFAILED;
- }
- }
- else
- {
- if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : Invalid RbId for RbType[%d] UEID:%d",
- entCfg->rbType,
- ueId);
- return RFAILED;
- }
- if ((((entCfg->lCh[0].type == CM_LTE_LCH_DCCH) &&
- (entCfg->entMode != RLC_MODE_UM) &&
- (CM_LTE_SRB == entCfg->rbType)) ||
- ((entCfg->lCh[0].type == CM_LTE_LCH_DTCH) &&
- (CM_LTE_DRB == entCfg->rbType))) &&
- (entCfg->entMode != RLC_MODE_TM))
- {
- /* UE CB present */
- if ( rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb) == ROK)
- {
- /* Get rbCb from ueCb->rbCb list */
- RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
-
- if(( rlcRbCb != NULLP))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_PRSNT);
- DU_LOG("\nERROR --> RLC_DL : CellId[%u]:rbId [%d] already exists",
- cellId,
- entCfg->rbId);
- return RFAILED;
- }
- }
- else /* UE CB UNKNOWN */
- {
- /* Create UE CB */
- if ( rlcDbmCreateDlUeCb(gCb,ueId, cellId, &ueCb) != ROK)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_UE_CREAT_FAIL);
- DU_LOG("\nERROR --> RLC_DL : UeId [%u]:ueCb Creation Failed RBID:%d",
- ueId,
- entCfg->rbId);
- return RFAILED;
- }
- /* Start throughput calculation for this UE */
- gCb->rlcThpt.thptPerUe[gCb->rlcThpt.numActvUe].ueIdx = ueId;
- gCb->rlcThpt.thptPerUe[gCb->rlcThpt.numActvUe].dataVol = 0;
- gCb->rlcThpt.numActvUe++;
-
- if((rlcChkTmr(gCb, (PTR)(&gCb->rlcThpt), EVENT_RLC_THROUGHPUT_TMR)) == FALSE)
- {
- printf("\nHLAL Starting Throughput timer");
- rlcStartTmr(gCb, (PTR)(&gCb->rlcThpt), EVENT_RLC_THROUGHPUT_TMR);
- }
- }
-
- /* Validate LChId for UM and AM modes */
- if ((entCfg->lCh[0].lChId <= 0) ||
- ((entCfg->entMode == RLC_MODE_AM)&&
- (entCfg->lCh[1].lChId <= 0)))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
- return RFAILED;
- }
-
- /* Create RB CB */
- RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
- if (rlcRbCb == NULL)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_CREAT_FAIL);
- DU_LOG("\nERROR --> RLC_DL : Memory allocation failed RBID:%d CELLID:%d",
- entCfg->rbId,
- cellId);
- return RFAILED;
- }
-
- /* copy the RB Cb into UECb */
- rlcRbCb->rlcId.rbId = entCfg->rbId;
- if(entCfg->rbType == CM_LTE_SRB)
- ueCb->srbCb[entCfg->rbId] = rlcRbCb;
- else
- ueCb->drbCb[entCfg->rbId] = rlcRbCb;
-
- RLC_LMM_RB_STS_INC(gCb);
-
- }
- else
- {
- if (entCfg->entMode == RLC_MODE_TM)
- {
- reason = CKW_CFG_REAS_RB_MODE_MIS;
- }
- else
- {
- reason = CKW_CFG_REAS_LCHTYPE_MIS;
- }
-
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK, reason);
- return RFAILED;
- }
- }
-
-
- rlcRbCb->rlcId.cellId = cellId;
- rlcRbCb->rlcId.ueId = ueId;
- rlcRbCb->rlcId.rbType = entCfg->rbType;
- rlcRbCb->inst = gCb->init.inst;
-#ifdef TENB_MULT_CELL_SUPPRT
- rlcRbCb->rguSapId = entCfg->rguSapId;
-#endif
-
-
- /* Fill RB CB */
- if (rlcCfgFillDlRbCb(gCb,rlcRbCb, ueCb, entCfg) != ROK)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_CREAT_FAIL);
-
- /* Delete RB CB created */
- RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
- DU_LOG("\nERROR --> RLC_DL : Filling of RbCb failed UEID:%d CELLID:%d",
- ueId,
- cellId);
- return RFAILED;
- }
- rlcRbCb->qci = entCfg->qci;
-#ifdef LTE_L2_MEAS
- rlcRbCb->ueCb = ueCb;
- if (entCfg->lCh[0].type == CM_LTE_LCH_DTCH)
- {
- /* ccpu00129778 */
- rlcAddToDlL2Meas(gCb, rlcRbCb,cellId,ueId);
- }
-#endif /* LTE_L2_MEAS */
-
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
-
- return ROK;
-}
-
-\f
-/**
- * @brief
- * This primitive reconfigures the existing RB in Ue/Cell Cb.
- *
- * @details
- * This primitive executes following steps in reconfiguration of existing
- * RB -
- * - If UE ID is 0 then
- * - Check for CELL CB is present
- * - If yes, Check for RB ID
- * - If RB ID is present Reconfigure the RB CB
- * - Else, Status Indication with Reason
- * - Else, Status Indication with Reason
- * - Else,
- * - Check for UE CB is present
- * - If yes, Check for RB ID
- * - If RB ID is prenset Reconfigure the CELL CB
- * - Else, Status Indication with Reason
- * - Else, Status Indication with Reason
- * - Fill entity confirmation
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [in] ueId - UE Identifier
- * @param [in] cellId - CELL Identifier
- * @param [in] entCfg - Entity Configuration to be done.
- * @param [out] entCfm - Entity Confirmation
- *
- * @return S16
- * -#ROK
- * -#RFAILED
- */
-S16 rlcCfgReCfgDlRb
-(
-RlcCb *gCb,
-CmLteRnti ueId,
-CmLteCellId cellId,
-RlcEntCfgInfo *entCfg,
-RlcEntCfgCfmInfo *entCfm
-)
-{
- RlcDlRbCb *rbCb; /* RB Control Block */
- RlcDlRbCb tRbCb; /* KW RB Control Block */
- RlcDlCellCb *cellCb; /* Cell Control Block */
- RlcDlUeCb *ueCb; /* Ue Control Block */
- uint8_t ret;
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgReCfgRb(cellId(%d), cfgType(%d)) RBID:%d",
- cellId, entCfg->cfgType,entCfg->rbId);
-
-
- /* Check for UeCb or CellCb */
- if (ueId == 0)
- {
- if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : Invalid RbId , Max is [%d] UEID:%d CELLID:%d",
- RLC_MAX_RB_PER_CELL,
- ueId,
- cellId);
- return RFAILED;
- }
- /* Get cellCb */
- rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
- if(!cellCb)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_CELL_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CellCb not found ueId:%d RBID:%d CELLID:%d",
- ueId,
- entCfg->rbId,
- cellId);
- return RFAILED;
- }
-
- /* Get rbCb */
- RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rbCb);
-
- if (!rbCb)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CELLID:%d RBID:%d not found",
- cellId,
- entCfg->rbId);
- return RFAILED;
- }
-
- /* Take backup of rbCb before updating.
- * Because in failure case restore original rbCb
- */
- memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
-
- /* Update rbCb */
- ret = rlcCfgUpdateDlRb(gCb,rbCb, cellCb,entCfg);
- if (ret != ROK)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm,
- entCfg->rbId,
- entCfg->rbType,
- CKW_CFG_CFM_NOK,
- ret);
-
- DU_LOG("\nERROR --> RLC_DL : CELLID:%u RBID:%d updation failed",
- cellId,
- entCfg->rbId);
- memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
-
- return (ret);
- }
- }
- else
- {
- if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CELLID:%d Invalid RBID:%d for RbType[%d]",
- cellId,
- entCfg->rbId,
- entCfg->rbType);
- return RFAILED;
- }
- /* Get ueCb */
- ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
- if (ret != ROK)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : UEID:%d UeCb not found RBID:%d",
- ueId,
- entCfg->rbId);
- return (ret);
- }
-
- /* Get rbCb */
- RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rbCb);
-
- if ( rbCb == NULLP)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CELLID:%d RBID:%d not found",
- cellId,
- entCfg->rbId);
- return (ret);
- }
-
- /* Take backup of rbCb before updating.
- * Because in failure case restore original rbCb
- */
- memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
-
- /* Update rbCb */
- ret = rlcCfgUpdateDlRb(gCb,rbCb,ueCb, entCfg);
- if (ret != CKW_CFG_REAS_NONE)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- ret);
- DU_LOG("\nERROR --> RLC_DL : CELLID:%d RBID:%d updation failed",
- cellId,
- entCfg->rbId);
- memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
-
- return (ret);
- }
- }
-
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
-
- return ROK;
-}
-
-\f
-/**
- * @brief This primitive deletes the existing RB in Ue/Cell Cb.
- *
- * @details
- * - If UE ID is 0 then
- * - Check for CELL CB is present
- * - If yes, Check for RB ID
- * - If RB ID is prenset Delete the RB CB
- * - If there is no RB CB exist in CELL CB then Delete CELL CB.
- * - Else, Status Indication with Reason
- * - Else, Status Indication with Reason
- * - Else,
- * - Check for UE CB is present
- * - If yes, Check for RB ID
- * - If RB ID is prenset Delete the RB CB
- * - If there is no RB CB exist in UE CB then Delete UE CB.
- * - Else, Status Indication with Reason
- * - Else, Status Indication with Reason
- * - Fill entity confirmation
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [in] ueId - UE Identifier
- * @param [in] cellId - CELL Identifier
- * @param [in] entCfg - Entity Configuration to be done.
- * @param [out] entCfm - Entity Confirmation
- *
- * @return S16
- * -#ROK
- * -#RFAILED
- */
-S16 rlcCfgDelDlRb
-(
-RlcCb *gCb,
-CmLteRnti ueId,
-CmLteCellId cellId,
-RlcEntCfgInfo *entCfg,
-RlcEntCfgCfmInfo *entCfm
-)
-{
- S16 ret; /* Return Value */
- RlcDlUeCb *ueCb; /* UE Control Block */
- RlcDlCellCb *cellCb; /* UE Control Block */
- RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgDelRb(RBID(%d), cellId(%d), cfgType(%d))",
- entCfg->rbId,
- cellId,
- entCfg->cfgType);
-
- ret = ROK;
-
- /* Get cellCb and delete rbCb from it */
- if (ueId == 0)
- {
- if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : Invalid RbId, Max is [%d] UEID:%d CELLID:%d",
- RLC_MAX_RB_PER_CELL,
- ueId,
- cellId);
- return RFAILED;
- }
- /* Get cellCb */
- rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
- if (!cellCb)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CellCb not found UEID:%d RBID:%d",
- ueId,
- entCfg->rbId);
- return (ret);
- }
-
- /* Get rbCb */
- RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rlcRbCb);
-
- if ( rlcRbCb == NULLP)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CellId[%u]:RbId[%d] not found",
- cellId,
- entCfg->rbId);
- return (ret);
- }
-
- /* Assign NULLP to rbCb in rbCbLst */
- cellCb->rbCb[entCfg->rbId] = NULLP;
-
- /* Assign NULLP to dlRbCb/ulRbCb.
- * Delete Hashlist allocated for it if any */
- cellCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
- RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb)); /*Vartika: Mem leak fix */
- }
- /* Get ueCb and delete rbCb from it */
- else
- {
- if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : Invalid RbId for RbType[%d] UEID:%d CELLID:%d",
- entCfg->rbType,
- ueId,
- cellId);
- return RFAILED;
- }
-
- /* Get ueCb */
- ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
- if (ret != ROK)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : UeId [%d]: UeCb not found RBID:%d",
- ueId,
- entCfg->rbId);
- return (ret);
- }
-
- /* Get rbCb */
- RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
-
- if ( rlcRbCb == NULLP)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CellId[%u]:RbId[%d] not found",
- cellId,
- entCfg->rbId);
- return (ret);
- }
-
- ueCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
-
-#ifdef LTE_L2_MEAS
- RLC_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(gCb, rlcRbCb);
-#endif
- /* Free the Buffers of RbCb */
- if( RLC_MODE_UM == rlcRbCb->mode)
- {
- rlcUmmFreeDlRbCb(gCb,rlcRbCb);
- /* Delete RbCb */
- RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
- }
- else if( RLC_MODE_AM == rlcRbCb->mode)
- {
- rlcAmmFreeDlRbCb(gCb,rlcRbCb);
- }
-
- /* Assign NULLP to rbCb in rbCbLst */
- if ( entCfg->rbType == CM_LTE_SRB )
- {
- ueCb->srbCb[entCfg->rbId] = NULLP;
- }
- else
- {
- ueCb->drbCb[entCfg->rbId] = NULLP;
- }
- }
-
- RLC_LMM_RB_STS_DEC(gCb);
-
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK,
- CKW_CFG_REAS_NONE);
-
- return (ret);
-}
-
-\f
-/**
- * @brief This primitive re-establish the existing RB in Ue/Cell Cb.
- *
- * @details
- * - If UE ID is 0 then
- * - Check for CELL CB is present
- * - If yes, Check for RB ID
- * - If RB ID is prenset initialize the parameters of the RB CB
- * - Else, Status Indication with Reason
- * - Else, Status Indication with Reason
- * - Else,
- * - Check for UE CB is present
- * - If yes, Check for RB ID
- * - If RB ID is prenset initialize the parameters of the RB CB
- * - Else, Status Indication with Reason
- * - Else, Status Indication with Reason
- * - Fill entity confirmation
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [in] ueId - UE Identifier
- * @param [in] cellId - CELL Identifier
- * @param [in] entCfg - Entity Configuration to be done.
- * @param [out] entCfm - Entity Confirmation
- *
- * @return S16
- * -# ROK
- * -# RFAILED
- */
-S16 rlcCfgReEstDlRb
-(
-RlcCb *gCb,
-CmLteRnti ueId,
-CmLteCellId cellId,
-Bool sndReEstInd,
-RlcEntCfgInfo *entCfg,
-RlcEntCfgCfmInfo *entCfm
-)
-{
- RlcDlRbCb *rbCb; /* RB Control Block */
- CmLteRlcId rlcId; /* RLC Identifier */
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgReEstDlRb(ueId(%d), cellId(%d), cfgType(%d))",
- ueId,
- cellId,
- entCfg->cfgType);
-
- /* Get rlcId */
- rlcId.ueId = ueId;
- rlcId.cellId = cellId;
- rlcId.rbId = entCfg->rbId;
- rlcId.rbType = entCfg->rbType;
-
- rlcDbmFetchDlRbCbByRbId(gCb,&rlcId, &rbCb);
- if (rbCb == NULLP)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, rlcId.rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_RB_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CellId[%u]:RbId[%d] not found",
- cellId,
- entCfg->rbId);
- return RFAILED;
- }
-
- rbCb->rlcId.ueId = ueId;
-
- switch (rbCb->mode)
- {
- case RLC_MODE_TM:
- {
- rlcDlTmmReEstablish(gCb,rbCb);
- break;
- }
-
- case RLC_MODE_UM:
- {
- rlcDlUmmReEstablish(gCb,rlcId,sndReEstInd,rbCb);
- break;
- }
-
- case RLC_MODE_AM:
- {
- rlcAmmDlReEstablish(gCb, rlcId, rbCb);
- break;
- }
- }
-
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
-
- return ROK;
-}
-
-\f
-/**
- * @brief This primitive deletes the RBs in Ue Cb.
- *
- * @details
- * - If UE ID is 0 then
- * - Status Indication with Reason
- * - Else,
- * - Check for UE CB is present
- * - If yes, Delete all RB CB in UE CB and Delete UE CB also.
- * - Else, Status Indication with Reason
- * - Fill entity confirmation
- *
- * @param [in] gCb - RLC Instance Control Block
- * @param [in] ueId - UE Identifier
- * @param [in] cellId - CELL Identifier
- * @param [in] entCfg - Entity Configuration to be done.
- * @param [out] entCfm - Entity Confirmation
- *
- * @return S16
- * -#ROK
- * -#RFAILED
- */
-S16 rlcCfgDelDlUe
-(
-RlcCb *gCb,
-CmLteRnti ueId,
-CmLteCellId cellId,
-RlcEntCfgInfo *entCfg,
-RlcEntCfgCfmInfo *entCfm
-)
-{
- S16 ret; /* Return Value */
- RlcDlUeCb *ueCb; /* UE Control Block */
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgDelUe(ueId(%d), cellId(%d), cfgType(%d))",
- ueId,
- cellId,
- entCfg->cfgType);
-
- ret = ROK;
-
- /* Check for ueId is present or not */
- if ( ueId == 0 )
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : ueId(%d), cellId(%d)",
- ueId,
- cellId);
- return RFAILED;
- }
-
- /* Fetch Ue Cb */
- ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
- if (ret != ROK)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : UEID:%d UeCb not found RBID:%d",
- ueId,
- entCfg->rbId);
- return RFAILED;
- }
-
-#ifdef LTE_L2_MEAS
- rlcDelFrmDlL2Meas(gCb,cellId,ueId);
- rlcDbmDelAllDlL2MeasTbFrmUe(gCb,ueCb);
-#endif
- /* Delete Ue Cb */
- rlcDbmDelDlUeCb(gCb,ueCb, FALSE);
-
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
- CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
-
- return ROK;
-}
-
-
-/**
- * @brief This primitive deletes the RBs in Ue Cb.
- *
- * @details
- * - If CELL ID is 0 then
- * - Status Indication with Reason
- * - Else,
- * - Check for CELL CB is present
- * - If yes, Delete all RB CB in CELL CB and Delete CELL CB also.
- * - Else, Status Indication with Reason
- * - Fill entity confirmation
- *
- * @param [in] cellId - CELL Identifier
- * @param [in] entCfg - Entity Configuration to be done.
- * @param [out] entCfm - Entity Confirmation
- *
- * @return S16
- * -#ROK
- * -#RFAILED
- */
-S16 rlcCfgDelDlCell
-(
-RlcCb *gCb,
-CmLteCellId cellId,
-RlcEntCfgInfo *entCfg,
-RlcEntCfgCfmInfo *entCfm
-)
-{
- RlcDlCellCb *cellCb; /* UE Control Block */
- uint8_t rbId; /* RB Identifier */
-
- DU_LOG("\nDEBUG --> RLC_DL : rlcCfgDelCell( cellId(%d), cfgType(%d)",
- cellId,
- entCfg->cfgType);
-
- cellCb = NULLP;
- rbId = entCfg->rbId;
-
- /* Check for ueId is present or not */
- if ( cellId == 0 )
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_CELL_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : cellId is 0 (%d) ",
- cellId);
- return RFAILED;
- }
-
- /* Fetch Ue Cb */
- rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
- if (!cellCb)
- {
- /* Fill entCfm structure */
- RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
- CKW_CFG_REAS_CELL_UNKWN);
- DU_LOG("\nERROR --> RLC_DL : CellCb not found for RBID:%d",
- entCfg->rbId);
- return RFAILED;
- }
-
- /* Delete Ue Cb */
- rlcDbmDelDlCellCb(gCb,cellCb);
-
- /* Fill entCfm structure */
- /* kw005.201 added support for L2 Measurement */
- RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_OK,
- CKW_CFG_REAS_NONE);
-
- return ROK;
-}
-
-/**
- * @brief This primitive changes the ueId of Ue Cb.
- *
- * @details
- * - If oldUeId and newUeId are
- * - Confirm the Status with Reason
- * - If UeId not present
- * - Confirm the Status with Reason
- * - Create New UeCb
- * - Copy rbCbs from old UeCb to new UeCb
- * - Delete old UeCb
- * - Fill entity confirmation
- *
- * @param [in] ueInfo - Old UE Information
- * @param [in] newUeInfo - New UE Information
- * @param [out] status - Status
- *
- * @return S16
- * -# ROK
- * -# RFAILED
- */
-S16 rlcCfgDlUeIdChng
-(
-RlcCb *gCb,
-CkwUeInfo *ueInfo,
-CkwUeInfo *newUeInfo,
-CmStatus *status
-)
-{
- RlcDlUeCb *ueCb;
-/*kw004.201 Adding of Missing Trace in RLC PDCP*/
-
- if ( (ueInfo->ueId == newUeInfo->ueId) &&
- (ueInfo->cellId == newUeInfo->cellId))
- {
- status->reason = CKW_CFG_REAS_SAME_UEID;
- status->status = CKW_CFG_CFM_NOK;
- DU_LOG("\nERROR --> RLC_DL : Old UeId[%d] same as new UeId[%d]",
- ueInfo->ueId,
- newUeInfo->ueId);
- return RFAILED;
- }
-
- if(ROK == rlcDbmFetchDlUeCb(gCb,newUeInfo->ueId, newUeInfo->cellId, &ueCb))
- {
- DU_LOG("\nERROR --> RLC_DL : NewUeId[%d]:ueCb already exists",
- newUeInfo->ueId);
- status->reason = CKW_CFG_REAS_UE_EXISTS;
- status->status = CKW_CFG_CFM_NOK;
- return RFAILED;
- }
-
- if(ROK != rlcDbmFetchDlUeCb(gCb,ueInfo->ueId, ueInfo->cellId, &ueCb))
- {
-
- DU_LOG("\nERROR --> RLC_DL : UeId [%d]: UeCb not found",
- ueInfo->ueId);
- status->reason = CKW_CFG_REAS_UE_UNKWN;
- status->status = CKW_CFG_CFM_NOK;
- return RFAILED;
- }
-
-#ifdef LTE_L2_MEAS
- rlcHdlMeasDlUeIdChg(gCb, ueInfo->cellId, ueInfo->ueId, newUeInfo->ueId);
-#endif
- if(ROK != cmHashListDelete(&(gCb->u.dlCb->ueLstCp), (PTR) ueCb))
- {
- DU_LOG("\nERROR --> RLC_DL : UeId[%u] HashList Deletion Failed",
- ueInfo->ueId);
- status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
- status->status = CKW_CFG_CFM_NOK;
- return RFAILED;
- }
-
- /* update the hash key with new values */
- ueCb->ueId = newUeInfo->ueId;
- ueCb->cellId = newUeInfo->cellId;
-
- if(ROK != cmHashListInsert(&(gCb->u.dlCb->ueLstCp),
- (PTR)ueCb, (uint8_t *)&(ueCb->ueId),
- (uint16_t) sizeof(CmLteRnti)))
-
- {
- DU_LOG("\nERROR --> RLC_DL : UeId[%u] HashList Insertion Failed",
- newUeInfo->ueId);
- status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
- status->status = CKW_CFG_CFM_NOK;
- return RFAILED;
- }
-
- return ROK;
-}
-
-/********************************************************************30**
-
- End of file
-**********************************************************************/