1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /********************************************************************20**
21 Name: LTE RLC - Configuration Manager file
25 Desc: It contains the following configuraiton primtives
38 *********************************************************************21*/
39 static const char* RLOG_MODULE_NAME="CFG";
40 static int RLOG_MODULE_ID=2048;
41 static int RLOG_FILE_ID=191;
44 @brief RLC Downlink Configuration Module
48 /* header (.h) include files */
49 #include "common_def.h"
50 #include "lkw.h" /* LKW defines */
51 #include "ckw.h" /* CKW defines */
52 #include "kwu.h" /* KWU defines */
53 #include "rgu.h" /* RGU defines */
54 #include "kw_err.h" /* RLC error options */
55 #include "kw_env.h" /* RLC environment options */
56 #include "kw.h" /* RLC defines */
60 /* extern (.x) include files */
61 #include "lkw.x" /* LKW */
62 #include "ckw.x" /* CKW */
63 #include "kwu.x" /* KWU */
64 #include "rgu.x" /* RGU */
70 #define RLC_MODULE RLC_DBGMASK_CFG
71 /*Added for adding new Ue in onging L2 Meas*/
75 * @brief Handle modification of UE ID for L2 Meas data structs
78 * @param[in] ueId ue ID
85 static S16 rlcHdlMeasDlUeIdChg(RlcCb *gCb, uint8_t cellId,uint8_t oldUeId, uint8_t newUeId)
87 RlcL2MeasEvtCb *measEvtCb = NULLP;
88 RlcL2MeasCb *measCb = NULLP;
92 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
94 measEvtCb = &(gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr]);
95 measCb = &(measEvtCb->measCb);
98 if(measCb->measType & LKW_L2MEAS_DL_IP )
101 for(ueIdx = 0; ueIdx < measCb->val.ipThMeas.numUes; ueIdx++)
103 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == oldUeId)
105 measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = newUeId;
116 * @brief Handler to delete an UE's L2 Meas ctxt
119 * @param[in] ueId ue ID
126 static S16 rlcDelFrmDlL2Meas(RlcCb *gCb, uint8_t cellId,uint8_t ueId)
128 RlcL2MeasEvtCb *measEvtCb = NULLP;
129 RlcL2MeasCb *measCb = NULLP;
134 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
136 measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
137 measCb = &(measEvtCb->measCb);
140 if(measCb->measType & LKW_L2MEAS_DL_IP )
143 for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
144 (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
146 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
148 measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = FALSE;
149 if (measCb->val.ipThMeas.numUes-1 == ueIdx)
151 measCb->val.ipThMeas.numUes--;
163 static S16 rlcAddToDlL2Meas(RlcCb *gCb, RlcDlRbCb *rlcRbCb,uint8_t cellId,uint8_t ueId)
165 RlcL2MeasEvtCb *measEvtCb = NULLP;
166 RlcL2MeasCb *measCb = NULLP;
172 #ifndef XEON_SPECIFIC_CHANGES
173 uint8_t freeIdx = gCb->genCfg.maxUe;
175 uint16_t freeIdx = LKW_MAX_UE;
179 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
181 measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
182 measCb = &(measEvtCb->measCb);
184 freeIdx = gCb->genCfg.maxUe;
186 if(measCb->measType &
187 (LKW_L2MEAS_ACT_UE | LKW_L2MEAS_UU_LOSS | LKW_L2MEAS_DL_DELAY))
189 for(cntr1 =0;((cntr1 < measCb->val.nonIpThMeas.numQci) &&
190 (cntr1 < LKW_MAX_QCI));cntr1++)
192 if(measCb->val.nonIpThMeas.qci[cntr1] != rlcRbCb->qci)
194 measCb->val.nonIpThMeas.qci[cntr1] = rlcRbCb->qci;
195 gCb->u.dlCb->rlcL2Cb.measOn[rlcRbCb->qci] |=measCb->measType;
201 if(((rlcRbCb->rbL2Cb.measOn & measCb->measType) == LKW_L2MEAS_NONE))
203 if (measCb->measType & LKW_L2MEAS_ACT_UE)
205 if((rlcRbCb->mode == RLC_MODE_UM) &&
206 (rlcRbCb->dir & RLC_DIR_DL ))
208 if (rlcRbCb->m.umDl.sduQ.count)
210 if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
212 rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
213 gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
217 else if (rlcRbCb->mode == RLC_MODE_AM)
219 if ((rlcRbCb->m.amDl.cntrlBo) ||
220 (rlcRbCb->m.amDl.retxBo) ||
221 (rlcRbCb->m.amDl.bo))
223 if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
225 rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
226 gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
232 if((measCb->measType & LKW_L2MEAS_DL_IP))
235 for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
236 (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
238 if ((freeIdx == gCb->genCfg.maxUe) &&
239 (measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid == FALSE))
244 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
250 if (ueIdx == measCb->val.ipThMeas.numUes)
252 if (gCb->genCfg.maxUe == measCb->val.ipThMeas.numUes)
256 if (gCb->genCfg.maxUe == freeIdx)
258 measCb->val.ipThMeas.numUes++;
264 measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = TRUE;
265 memset(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[0],0x00,(sizeof(RlcL2Cntr) *LKW_MAX_QCI));
266 measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci = 0;
268 measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = ueId;
269 measCb->val.ipThMeas.ueInfoLst[ueIdx].cellId = cellId;
270 numQci = &(measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci);
272 for (qciIdx =0; ((qciIdx < *numQci) &&
273 (qciIdx < LKW_MAX_QCI)) ; qciIdx++)
275 if (measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] == rlcRbCb->qci)
281 /* Fix Klock Warning */
282 if ((qciIdx == *numQci) && (qciIdx < LKW_MAX_QCI))
284 measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] = rlcRbCb->qci;
288 rlcUtlPlcMeasDatInL2Sts(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[rlcRbCb->qci],
289 &rlcRbCb->rbL2Cb, measCb->measType);
291 else if (measCb->measType &
292 (LKW_L2MEAS_DL_DISC | LKW_L2MEAS_DL_DELAY | LKW_L2MEAS_UU_LOSS))
294 rlcUtlPlcMeasDatInL2Sts(&measCb->val.nonIpThMeas.measData[rlcRbCb->qci],
295 &rlcRbCb->rbL2Cb, measCb->measType);
296 measCb->val.nonIpThMeas.qci[rlcRbCb->qci] = rlcRbCb->qci;
297 measCb->val.nonIpThMeas.measData[rlcRbCb->qci].totDrbsPerQci++;
299 rlcRbCb->rbL2Cb.measOn |= measCb->measType;
302 }/*rlcAddToDlL2Meas*/
303 #endif /*LTE_L2_MEAS*/
307 * This primitive fills the RbCb
309 * @param [in] gCb - RLC Instance Control Block
310 * @param [out] rbCb - RB Control Block
311 * @param [out] ueCb - UE Control Block
312 * @param [in] entCfg - RLC Entity configuration
318 static S16 rlcCfgFillDlRbCb(RlcCb *gCb,RlcDlRbCb *rbCb,RlcDlUeCb *ueCb,RlcEntCfgInfo *entCfg)
321 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
322 "rlcCfgFillRbCb(ueId(%d),cellId(%d) rbType(%d))",
327 /* Initialize according to entMode */
328 switch (entCfg->entMode)
332 rbCb->lch.lChId = entCfg->lCh[0].lChId;
333 rbCb->lch.lChType = entCfg->lCh[0].type;
334 rbCb->dir = entCfg->dir;
340 rbCb->lch.lChId = entCfg->lCh[0].lChId;
341 rbCb->lch.lChType = entCfg->lCh[0].type;
342 rbCb->dir = entCfg->dir;
344 /* Spec 38.322 Section 7.1
345 * All UM state variables can take values from 0 to 63 for 6 bit SN or
346 * from 0 to 4095 for 12 bit SN. All arithmetic operations on UM state
347 * variables are affected by the UM modulus
348 * (i.e. final value = [value from arithmetic operation] modulo 64
349 * for 6 bit SN and 4096 for 12 bit SN)
351 rbCb->m.umDl.snLen = entCfg->m.umInfo.dl.snLen;
352 if (entCfg->m.umInfo.dl.snLen == RLC_UM_CFG_6BIT_SN_LEN)
353 rbCb->m.umDl.modBitMask = 0x3f;
355 rbCb->m.umDl.modBitMask = 0xfff;
357 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
363 /* Down Link Information
364 * indx = 0 as Down Link */
365 rbCb->lch.lChId = entCfg->lCh[0].lChId;
366 rbCb->lch.lChType = entCfg->lCh[0].type;
367 rbCb->dir = RLC_DIR_BOTH;
368 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
369 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
370 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
371 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
372 rbCb->m.amDl.snLen = entCfg->m.amInfo.dl.snLen;
374 if(RLC_AM_CFG_12BIT_SN_LEN == rbCb->m.amDl.snLen)
376 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_12BITS) - 1; /* 5GNR */
380 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_18BITS) - 1; /* 5GNR */
383 cmInitTimers(&(rbCb->m.amDl.pollRetxTmr), 1);
386 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
391 rbCb->m.amDl.txBufLst,
392 (RLC_TX_BUF_BIN_SIZE * sizeof(CmLListCp)));
393 for(hashIndex = 0; hashIndex < RLC_TX_BUF_BIN_SIZE; hashIndex++)
395 cmLListInit(&(rbCb->m.amDl.txBufLst[hashIndex]));
402 RLOG_ARG2(L_ERROR,DBG_RBID,entCfg->rbId,
403 "Invalid RB Mode ueId(%d),cellId(%d)",
409 rbCb->mode = entCfg->entMode;
410 rbCb->discTmrInt = entCfg->discardTmr;
417 * @brief This primitive Initializes the RB Cb
419 * @param [in] gCb - RLC Instance Control Block
420 * @param [out] rbCb - RB Control Block
421 * @param [in] ptr - Void pointer
422 * @param [in] entCfg - Entity Configuration
428 static S16 rlcCfgUpdateDlRb
433 RlcEntCfgInfo *entCfg
437 if (rbCb->mode != entCfg->entMode)
439 RLOG_ARG4(L_ERROR,DBG_RBID,rbCb->rlcId.rbId,
440 "RB Mode Mismatch : exp [%d] rcv [%d] UEID:%d CELLID:%d",
445 return (CKW_CFG_REAS_RB_MODE_MIS);
452 RlcDlCellCb *cellCb = (RlcDlCellCb *)ptr;
454 rbCb->dir = entCfg->dir;
455 rbCb->lch.lChId = entCfg->lCh[0].lChId;
456 rbCb->lch.lChType = entCfg->lCh[0].type;
458 cellCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
464 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
466 if (entCfg->lCh[0].type == CM_LTE_LCH_DCCH)
468 return (CKW_CFG_REAS_LCHTYPE_MIS);
470 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
471 ueCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rbCb;
473 rbCb->lch.lChId = entCfg->lCh[0].lChId;
474 rbCb->lch.lChType = entCfg->lCh[0].type;
475 rbCb->dir = entCfg->dir;
481 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
483 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
484 ueCb->lCh[entCfg->lCh[1].lChId - 1].dlRbCb = rbCb;
487 rbCb->lch.lChId = entCfg->lCh[1].lChId;
488 rbCb->lch.lChType = entCfg->lCh[1].type;
489 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
490 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
491 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
492 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
499 rbCb->discTmrInt = entCfg->discardTmr;
501 return (CKW_CFG_REAS_NONE);
507 * This primitive adds new RB in Ue/Cell Cb.
510 * This function does following steps -
511 * - If UE ID is 0 then
512 * - Check for CELL CB is present
513 * - If yes, Check for RB ID
514 * - If RB ID is present Status Indication with reason
515 * - Else, Create New RB CB in CELL CB
516 * - If no Create New CELL CB and RB CB
518 * - Check for UE CB is present
519 * - If yes Check for RB ID
520 * - If RB ID is present Status Indication with reason
521 * - Else, Create New RB CB in UE CB
522 * - If no Create New UE CB and RB CB
523 * - Fill entity confirmation
525 * @param [in] gCb - RLC Instance Control Block
526 * @param [in] ueId - UE Identifier
527 * @param [in] cellId - CELL Identifier
528 * @param [in] entCfg - Entity Configuration to be done.
529 * @param [out] entCfm - Entity Confirmation.
540 RlcEntCfgInfo *entCfg,
541 RlcEntCfgCfmInfo *entCfm
544 RlcDlUeCb *ueCb = NULLP; /* UE Control Block */
545 RlcDlCellCb *cellCb; /* Cell Control Block */
546 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
547 uint8_t reason; /* Rb Identifier */
549 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
550 "rlcCfgAddRb(cellId(%d),UEID:%d cfgType(%d))",
557 /* Fill entCfm structure */
558 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
559 CKW_CFG_REAS_CELL_UNKWN);
560 RLOG_ARG1(L_ERROR,DBG_RBID,entCfg->rbId,
561 "Add DLRb,CellId is 0 for UEID:%d",
565 if ((entCfg->rguSapId >= gCb->genCfg.maxRguSaps) || (entCfg->rguSapId < 0))
567 RLCDBGP_ERROR(gCb, "rlcCfgAddDlRb(ueId(%u), cellId(%u), Invalid rguSapId (%d)\n",
568 ueId, cellId, entCfg->rguSapId);
573 /* Process Adding new RB */
576 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
578 /* Fill entCfm structure */
579 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
581 CKW_CFG_REAS_RB_UNKWN);
582 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId,
583 "Invalid RbId ,Max is [%d] CELLID:%d UEID:%d",
590 if (((entCfg->lCh[0].type == CM_LTE_LCH_BCCH) ||
591 (entCfg->lCh[0].type == CM_LTE_LCH_PCCH) ||
592 (entCfg->lCh[0].type == CM_LTE_LCH_CCCH)) &&
593 (entCfg->entMode == RLC_MODE_TM))
595 /* Cell CB present */
596 rlcDbmFetchDlCellCb(gCb, cellId, &cellCb);
599 /* Get rbCb from cellCb->rbCb List */
600 if (( cellCb->rbCb[entCfg->rbId] != NULLP))
602 /* Fill entCfm structure */
603 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
605 CKW_CFG_REAS_RB_PRSNT);
606 RLOG_ARG2(L_WARNING, DBG_CELLID,cellId,
607 "RbId [%d] already exists UEID:%d",
613 else /* Cell CB UNKNOWN */
616 if ( ROK != rlcDbmCreateDlCellCb(gCb,cellId, &cellCb))
618 /* Fill entCfm structure */
619 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
621 CKW_CFG_REAS_CELL_CREAT_FAIL);
622 RLOG_ARG2(L_ERROR,DBG_CELLID,cellId,
623 "cellCb Creation failed RBID:%d UEID:%d",
631 if(entCfg->lCh[0].lChId <= 0)
633 RLOG_ARG3(L_ERROR,DBG_LCID,entCfg->lCh[0].lChId ,
634 "Invalid LcId CELLID:%d UEID:%d RBID:%d",
638 /* Fill entCfm structure */
639 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
640 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
645 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
648 RLOG_ARG2(L_FATAL,DBG_UEID,ueId,
649 "Memory allocation failed for rbId:%d CELLID:%d",
652 /* Fill entCfm structure */
653 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
654 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_CREAT_FAIL);
657 rlcRbCb->rlcId.rbId = entCfg->rbId;
658 cellCb->rbCb[entCfg->rbId] = rlcRbCb;
659 RLC_LMM_RB_STS_INC(gCb);
660 cellCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rlcRbCb;
664 reason= (entCfg->entMode != RLC_MODE_TM)? CKW_CFG_REAS_RB_MODE_MIS:
665 CKW_CFG_REAS_LCHTYPE_MIS;
666 /* Fill entCfm structure */
667 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
668 CKW_CFG_CFM_NOK, reason);
674 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
676 /* Fill entCfm structure */
677 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
678 CKW_CFG_REAS_RB_UNKWN);
679 RLOG_ARG2(L_ERROR,DBG_RBID, entCfg->rbId,
680 "Invalid RbId for RbType[%d] UEID:%d",
685 if ((((entCfg->lCh[0].type == CM_LTE_LCH_DCCH) &&
686 (entCfg->entMode != RLC_MODE_UM) &&
687 (CM_LTE_SRB == entCfg->rbType)) ||
688 ((entCfg->lCh[0].type == CM_LTE_LCH_DTCH) &&
689 (CM_LTE_DRB == entCfg->rbType))) &&
690 (entCfg->entMode != RLC_MODE_TM))
693 if ( rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb) == ROK)
695 /* Get rbCb from ueCb->rbCb list */
696 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
698 if(( rlcRbCb != NULLP))
700 /* Fill entCfm structure */
701 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
702 CKW_CFG_REAS_RB_PRSNT);
703 RLOG_ARG2(L_WARNING, DBG_UEID, ueId,
704 "CellId[%u]:rbId [%d] already exists",
710 else /* UE CB UNKNOWN */
713 if ( rlcDbmCreateDlUeCb(gCb,ueId, cellId, &ueCb) != ROK)
715 /* Fill entCfm structure */
716 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
717 CKW_CFG_REAS_UE_CREAT_FAIL);
718 RLOG_ARG2(L_WARNING, DBG_CELLID,cellId,
719 "UeId [%u]:ueCb Creation Failed RBID:%d",
726 /* Validate LChId for UM and AM modes */
727 if ((entCfg->lCh[0].lChId <= 0) ||
728 ((entCfg->entMode == RLC_MODE_AM)&&
729 (entCfg->lCh[1].lChId <= 0)))
731 /* Fill entCfm structure */
732 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
733 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
738 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
741 /* Fill entCfm structure */
742 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,CKW_CFG_CFM_NOK,
743 CKW_CFG_REAS_RB_CREAT_FAIL);
744 RLOG_ARG2(L_FATAL,DBG_UEID,ueId,
745 "Memory allocation failed RBID:%d CELLID:%d",
751 /* copy the RB Cb into UECb */
752 rlcRbCb->rlcId.rbId = entCfg->rbId;
753 if(entCfg->rbType == CM_LTE_SRB)
754 ueCb->srbCb[entCfg->rbId] = rlcRbCb;
756 ueCb->drbCb[entCfg->rbId] = rlcRbCb;
758 RLC_LMM_RB_STS_INC(gCb);
763 if (entCfg->entMode == RLC_MODE_TM)
765 reason = CKW_CFG_REAS_RB_MODE_MIS;
769 reason = CKW_CFG_REAS_LCHTYPE_MIS;
772 /* Fill entCfm structure */
773 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK, reason);
779 rlcRbCb->rlcId.cellId = cellId;
780 rlcRbCb->rlcId.ueId = ueId;
781 rlcRbCb->rlcId.rbType = entCfg->rbType;
782 rlcRbCb->inst = gCb->init.inst;
783 #ifdef TENB_MULT_CELL_SUPPRT
784 rlcRbCb->rguSapId = entCfg->rguSapId;
789 if (rlcCfgFillDlRbCb(gCb,rlcRbCb, ueCb, entCfg) != ROK)
791 /* Fill entCfm structure */
792 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
793 CKW_CFG_REAS_RB_CREAT_FAIL);
795 /* Delete RB CB created */
796 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
797 RLOG_ARG2(L_ERROR,DBG_RBID, entCfg->rbId,
798 "Filling of RbCb failed UEID:%d CELLID:%d",
803 rlcRbCb->qci = entCfg->qci;
805 rlcRbCb->ueCb = ueCb;
806 if (entCfg->lCh[0].type == CM_LTE_LCH_DTCH)
809 rlcAddToDlL2Meas(gCb, rlcRbCb,cellId,ueId);
811 #endif /* LTE_L2_MEAS */
813 /* Fill entCfm structure */
814 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
822 * This primitive reconfigures the existing RB in Ue/Cell Cb.
825 * This primitive executes following steps in reconfiguration of existing
827 * - If UE ID is 0 then
828 * - Check for CELL CB is present
829 * - If yes, Check for RB ID
830 * - If RB ID is present Reconfigure the RB CB
831 * - Else, Status Indication with Reason
832 * - Else, Status Indication with Reason
834 * - Check for UE CB is present
835 * - If yes, Check for RB ID
836 * - If RB ID is prenset Reconfigure the CELL CB
837 * - Else, Status Indication with Reason
838 * - Else, Status Indication with Reason
839 * - Fill entity confirmation
841 * @param [in] gCb - RLC Instance Control Block
842 * @param [in] ueId - UE Identifier
843 * @param [in] cellId - CELL Identifier
844 * @param [in] entCfg - Entity Configuration to be done.
845 * @param [out] entCfm - Entity Confirmation
856 RlcEntCfgInfo *entCfg,
857 RlcEntCfgCfmInfo *entCfm
860 RlcDlRbCb *rbCb; /* RB Control Block */
861 RlcDlRbCb tRbCb; /* KW RB Control Block */
862 RlcDlCellCb *cellCb; /* Cell Control Block */
863 RlcDlUeCb *ueCb; /* Ue Control Block */
866 RLOG_ARG3(L_DEBUG,DBG_UEID,ueId,
867 "rlcCfgReCfgRb(cellId(%d), cfgType(%d)) RBID:%d",
868 cellId, entCfg->cfgType,entCfg->rbId);
871 /* Check for UeCb or CellCb */
874 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
876 /* Fill entCfm structure */
877 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
878 CKW_CFG_REAS_RB_UNKWN);
879 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId,
880 "Invalid RbId , Max is [%d] UEID:%d CELLID:%d",
887 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
890 /* Fill entCfm structure */
891 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
892 CKW_CFG_REAS_CELL_UNKWN);
893 RLOG_ARG3(L_ERROR,DBG_CELLID,cellId,
894 "CellCb not found ueId:%d RBID:%d CELLID:%d",
902 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rbCb);
906 /* Fill entCfm structure */
907 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
908 CKW_CFG_REAS_RB_UNKWN);
909 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
910 "CELLID:%d RBID:%d not found",
916 /* Take backup of rbCb before updating.
917 * Because in failure case restore original rbCb
919 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
922 ret = rlcCfgUpdateDlRb(gCb,rbCb, cellCb,entCfg);
925 /* Fill entCfm structure */
926 RLC_CFG_FILL_CFG_CFM(entCfm,
932 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
933 "CELLID:%u RBID:%d updation failed",
936 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
943 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
945 /* Fill entCfm structure */
946 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
947 CKW_CFG_REAS_RB_UNKWN);
948 RLOG_ARG3(L_ERROR,DBG_UEID,ueId,
949 "CELLID:%d Invalid RBID:%d for RbType[%d]",
956 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
959 /* Fill entCfm structure */
960 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
961 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
962 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
963 "UEID:%d UeCb not found RBID:%d",
970 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rbCb);
974 /* Fill entCfm structure */
975 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
976 CKW_CFG_REAS_RB_UNKWN);
977 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
978 "CELLID:%d RBID:%d not found",
984 /* Take backup of rbCb before updating.
985 * Because in failure case restore original rbCb
987 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
990 ret = rlcCfgUpdateDlRb(gCb,rbCb,ueCb, entCfg);
991 if (ret != CKW_CFG_REAS_NONE)
993 /* Fill entCfm structure */
994 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
996 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
997 "CELLID:%d RBID:%d updation failed",
1000 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
1006 /* Fill entCfm structure */
1007 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1014 * @brief This primitive deletes the existing RB in Ue/Cell Cb.
1017 * - If UE ID is 0 then
1018 * - Check for CELL CB is present
1019 * - If yes, Check for RB ID
1020 * - If RB ID is prenset Delete the RB CB
1021 * - If there is no RB CB exist in CELL CB then Delete CELL CB.
1022 * - Else, Status Indication with Reason
1023 * - Else, Status Indication with Reason
1025 * - Check for UE CB is present
1026 * - If yes, Check for RB ID
1027 * - If RB ID is prenset Delete the RB CB
1028 * - If there is no RB CB exist in UE CB then Delete UE CB.
1029 * - Else, Status Indication with Reason
1030 * - Else, Status Indication with Reason
1031 * - Fill entity confirmation
1033 * @param [in] gCb - RLC Instance Control Block
1034 * @param [in] ueId - UE Identifier
1035 * @param [in] cellId - CELL Identifier
1036 * @param [in] entCfg - Entity Configuration to be done.
1037 * @param [out] entCfm - Entity Confirmation
1048 RlcEntCfgInfo *entCfg,
1049 RlcEntCfgCfmInfo *entCfm
1052 S16 ret; /* Return Value */
1053 RlcDlUeCb *ueCb; /* UE Control Block */
1054 RlcDlCellCb *cellCb; /* UE Control Block */
1055 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
1057 RLOG_ARG3(L_DEBUG,DBG_UEID,ueId,
1058 "rlcCfgDelRb(RBID(%d), cellId(%d), cfgType(%d))",
1065 /* Get cellCb and delete rbCb from it */
1068 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
1070 /* Fill entCfm structure */
1071 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1072 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1073 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId ,
1074 "Invalid RbId, Max is [%d] UEID:%d CELLID:%d",
1075 RLC_MAX_RB_PER_CELL,
1081 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1084 /* Fill entCfm structure */
1085 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1086 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1087 RLOG_ARG2(L_ERROR,DBG_CELLID,cellId,
1088 "CellCb not found UEID:%d RBID:%d",
1095 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rlcRbCb);
1097 if ( rlcRbCb == NULLP)
1099 /* Fill entCfm structure */
1100 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1101 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1102 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1103 "CellId[%u]:RbId[%d] not found",
1109 /* Assign NULLP to rbCb in rbCbLst */
1110 cellCb->rbCb[entCfg->rbId] = NULLP;
1112 /* Assign NULLP to dlRbCb/ulRbCb.
1113 * Delete Hashlist allocated for it if any */
1114 cellCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1115 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb)); /*Vartika: Mem leak fix */
1117 /* Get ueCb and delete rbCb from it */
1120 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
1122 /* Fill entCfm structure */
1123 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1124 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1125 RLOG_ARG3(L_ERROR,DBG_RBID, entCfg->rbId,
1126 "Invalid RbId for RbType[%d] UEID:%d CELLID:%d",
1134 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1137 /* Fill entCfm structure */
1138 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1139 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1140 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
1141 "UeId [%d]: UeCb not found RBID:%d",
1148 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
1150 if ( rlcRbCb == NULLP)
1152 /* Fill entCfm structure */
1153 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1154 CKW_CFG_REAS_RB_UNKWN);
1155 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1156 "CellId[%u]:RbId[%d] not found",
1162 ueCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1165 RLC_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(gCb, rlcRbCb);
1167 /* Free the Buffers of RbCb */
1168 if( RLC_MODE_UM == rlcRbCb->mode)
1170 rlcUmmFreeDlRbCb(gCb,rlcRbCb);
1172 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
1174 else if( RLC_MODE_AM == rlcRbCb->mode)
1176 rlcAmmFreeDlRbCb(gCb,rlcRbCb);
1179 /* Assign NULLP to rbCb in rbCbLst */
1180 if ( entCfg->rbType == CM_LTE_SRB )
1182 ueCb->srbCb[entCfg->rbId] = NULLP;
1186 ueCb->drbCb[entCfg->rbId] = NULLP;
1190 RLC_LMM_RB_STS_DEC(gCb);
1192 /* Fill entCfm structure */
1193 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1201 * @brief This primitive re-establish the existing RB in Ue/Cell Cb.
1204 * - If UE ID is 0 then
1205 * - Check for CELL CB is present
1206 * - If yes, Check for RB ID
1207 * - If RB ID is prenset initialize the parameters of the RB CB
1208 * - Else, Status Indication with Reason
1209 * - Else, Status Indication with Reason
1211 * - Check for UE CB is present
1212 * - If yes, Check for RB ID
1213 * - If RB ID is prenset initialize the parameters of the RB CB
1214 * - Else, Status Indication with Reason
1215 * - Else, Status Indication with Reason
1216 * - Fill entity confirmation
1218 * @param [in] gCb - RLC Instance Control Block
1219 * @param [in] ueId - UE Identifier
1220 * @param [in] cellId - CELL Identifier
1221 * @param [in] entCfg - Entity Configuration to be done.
1222 * @param [out] entCfm - Entity Confirmation
1234 RlcEntCfgInfo *entCfg,
1235 RlcEntCfgCfmInfo *entCfm
1238 RlcDlRbCb *rbCb; /* RB Control Block */
1239 CmLteRlcId rlcId; /* RLC Identifier */
1241 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
1242 "rlcCfgReEstDlRb(ueId(%d), cellId(%d), cfgType(%d))",
1249 rlcId.cellId = cellId;
1250 rlcId.rbId = entCfg->rbId;
1251 rlcId.rbType = entCfg->rbType;
1253 rlcDbmFetchDlRbCbByRbId(gCb,&rlcId, &rbCb);
1256 /* Fill entCfm structure */
1257 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, rlcId.rbType, CKW_CFG_CFM_NOK,
1258 CKW_CFG_REAS_RB_UNKWN);
1259 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1260 "CellId[%u]:RbId[%d] not found",
1266 rbCb->rlcId.ueId = ueId;
1272 rlcDlTmmReEstablish(gCb,rbCb);
1278 rlcDlUmmReEstablish(gCb,rlcId,sndReEstInd,rbCb);
1284 rlcAmmDlReEstablish(gCb, rlcId, rbCb);
1289 /* Fill entCfm structure */
1290 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1291 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1298 * @brief This primitive deletes the RBs in Ue Cb.
1301 * - If UE ID is 0 then
1302 * - Status Indication with Reason
1304 * - Check for UE CB is present
1305 * - If yes, Delete all RB CB in UE CB and Delete UE CB also.
1306 * - Else, Status Indication with Reason
1307 * - Fill entity confirmation
1309 * @param [in] gCb - RLC Instance Control Block
1310 * @param [in] ueId - UE Identifier
1311 * @param [in] cellId - CELL Identifier
1312 * @param [in] entCfg - Entity Configuration to be done.
1313 * @param [out] entCfm - Entity Confirmation
1324 RlcEntCfgInfo *entCfg,
1325 RlcEntCfgCfmInfo *entCfm
1328 S16 ret; /* Return Value */
1329 RlcDlUeCb *ueCb; /* UE Control Block */
1331 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
1332 "rlcCfgDelUe(ueId(%d), cellId(%d), cfgType(%d))",
1339 /* Check for ueId is present or not */
1342 /* Fill entCfm structure */
1343 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1344 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1345 RLOG_ARG2(L_ERROR,DBG_RBID,entCfg->rbId,
1346 "ueId(%d), cellId(%d)",
1353 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1356 /* Fill entCfm structure */
1357 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1358 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1359 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
1360 "UEID:%d UeCb not found RBID:%d",
1367 rlcDelFrmDlL2Meas(gCb,cellId,ueId);
1368 rlcDbmDelAllDlL2MeasTbFrmUe(gCb,ueCb);
1371 rlcDbmDelDlUeCb(gCb,ueCb, FALSE);
1373 /* Fill entCfm structure */
1374 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1375 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1382 * @brief This primitive deletes the RBs in Ue Cb.
1385 * - If CELL ID is 0 then
1386 * - Status Indication with Reason
1388 * - Check for CELL CB is present
1389 * - If yes, Delete all RB CB in CELL CB and Delete CELL CB also.
1390 * - Else, Status Indication with Reason
1391 * - Fill entity confirmation
1393 * @param [in] cellId - CELL Identifier
1394 * @param [in] entCfg - Entity Configuration to be done.
1395 * @param [out] entCfm - Entity Confirmation
1405 RlcEntCfgInfo *entCfg,
1406 RlcEntCfgCfmInfo *entCfm
1409 RlcDlCellCb *cellCb; /* UE Control Block */
1410 uint8_t rbId; /* RB Identifier */
1412 RLOG_ARG2(L_DEBUG,DBG_RBID,entCfg->rbId,
1413 "rlcCfgDelCell( cellId(%d), cfgType(%d)",
1418 rbId = entCfg->rbId;
1420 /* Check for ueId is present or not */
1423 /* Fill entCfm structure */
1424 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1425 CKW_CFG_REAS_CELL_UNKWN);
1426 RLOG_ARG1(L_DEBUG,DBG_RBID,entCfg->rbId,
1427 "cellId is 0 (%d) ",
1433 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1436 /* Fill entCfm structure */
1437 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1438 CKW_CFG_REAS_CELL_UNKWN);
1439 RLOG_ARG1(L_ERROR, DBG_CELLID,cellId,
1440 "CellCb not found for RBID:%d",
1446 rlcDbmDelDlCellCb(gCb,cellCb);
1448 /* Fill entCfm structure */
1449 /* kw005.201 added support for L2 Measurement */
1450 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1457 * @brief This primitive changes the ueId of Ue Cb.
1460 * - If oldUeId and newUeId are
1461 * - Confirm the Status with Reason
1462 * - If UeId not present
1463 * - Confirm the Status with Reason
1465 * - Copy rbCbs from old UeCb to new UeCb
1467 * - Fill entity confirmation
1469 * @param [in] ueInfo - Old UE Information
1470 * @param [in] newUeInfo - New UE Information
1471 * @param [out] status - Status
1477 S16 rlcCfgDlUeIdChng
1481 CkwUeInfo *newUeInfo,
1486 /*kw004.201 Adding of Missing Trace in LTE RLC PDCP*/
1488 if ( (ueInfo->ueId == newUeInfo->ueId) &&
1489 (ueInfo->cellId == newUeInfo->cellId))
1491 status->reason = CKW_CFG_REAS_SAME_UEID;
1492 status->status = CKW_CFG_CFM_NOK;
1493 RLOG_ARG2(L_ERROR,DBG_CELLID,ueInfo->cellId,
1494 "Old UeId[%d] same as new UeId[%d]",
1500 if(ROK == rlcDbmFetchDlUeCb(gCb,newUeInfo->ueId, newUeInfo->cellId, &ueCb))
1502 RLOG_ARG1(L_ERROR, DBG_CELLID, newUeInfo->cellId,
1503 "NewUeId[%d]:ueCb already exists",
1505 status->reason = CKW_CFG_REAS_UE_EXISTS;
1506 status->status = CKW_CFG_CFM_NOK;
1510 if(ROK != rlcDbmFetchDlUeCb(gCb,ueInfo->ueId, ueInfo->cellId, &ueCb))
1513 RLOG_ARG1(L_ERROR,DBG_CELLID,ueInfo->cellId,
1514 "UeId [%d]: UeCb not found",
1516 status->reason = CKW_CFG_REAS_UE_UNKWN;
1517 status->status = CKW_CFG_CFM_NOK;
1522 rlcHdlMeasDlUeIdChg(gCb, ueInfo->cellId, ueInfo->ueId, newUeInfo->ueId);
1524 if(ROK != cmHashListDelete(&(gCb->u.dlCb->ueLstCp), (PTR) ueCb))
1526 RLOG_ARG1(L_ERROR,DBG_CELLID,ueInfo->cellId,
1527 "UeId[%u] HashList Deletion Failed",
1529 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1530 status->status = CKW_CFG_CFM_NOK;
1534 /* update the hash key with new values */
1535 ueCb->ueId = newUeInfo->ueId;
1536 ueCb->cellId = newUeInfo->cellId;
1538 if(ROK != cmHashListInsert(&(gCb->u.dlCb->ueLstCp),
1539 (PTR)ueCb, (uint8_t *)&(ueCb->ueId),
1540 (uint16_t) sizeof(CmLteRnti)))
1543 RLOG_ARG1(L_ERROR,DBG_CELLID,newUeInfo->cellId,
1544 "UeId[%u] HashList Insertion Failed",
1546 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1547 status->status = CKW_CFG_CFM_NOK;
1554 /********************************************************************30**
1557 **********************************************************************/