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"
51 #include "lkw.h" /* LKW defines */
52 #include "ckw.h" /* CKW defines */
53 #include "kwu.h" /* KWU defines */
54 #include "rgu.h" /* RGU defines */
55 #include "kw_err.h" /* RLC error options */
56 #include "kw_env.h" /* RLC environment options */
57 #include "kw.h" /* RLC defines */
61 /* extern (.x) include files */
62 #include "lkw.x" /* LKW */
63 #include "ckw.x" /* CKW */
64 #include "kwu.x" /* KWU */
65 #include "rgu.x" /* RGU */
70 #include "du_app_rlc_inf.h"
72 #define RLC_MODULE RLC_DBGMASK_CFG
73 /*Added for adding new Ue in onging L2 Meas*/
77 * @brief Handle modification of UE ID for L2 Meas data structs
80 * @param[in] ueId ue ID
87 static S16 rlcHdlMeasDlUeIdChg(RlcCb *gCb, uint8_t cellId,uint8_t oldUeId, uint8_t newUeId)
89 RlcL2MeasEvtCb *measEvtCb = NULLP;
90 RlcL2MeasCb *measCb = NULLP;
94 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
96 measEvtCb = &(gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr]);
97 measCb = &(measEvtCb->measCb);
100 if(measCb->measType & LKW_L2MEAS_DL_IP )
103 for(ueIdx = 0; ueIdx < measCb->val.ipThMeas.numUes; ueIdx++)
105 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == oldUeId)
107 measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = newUeId;
118 * @brief Handler to delete an UE's L2 Meas ctxt
121 * @param[in] ueId ue ID
128 static S16 rlcDelFrmDlL2Meas(RlcCb *gCb, uint8_t cellId,uint8_t ueId)
130 RlcL2MeasEvtCb *measEvtCb = NULLP;
131 RlcL2MeasCb *measCb = NULLP;
136 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
138 measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
139 measCb = &(measEvtCb->measCb);
142 if(measCb->measType & LKW_L2MEAS_DL_IP )
145 for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
146 (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
148 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
150 measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = FALSE;
151 if (measCb->val.ipThMeas.numUes-1 == ueIdx)
153 measCb->val.ipThMeas.numUes--;
165 static S16 rlcAddToDlL2Meas(RlcCb *gCb, RlcDlRbCb *rlcRbCb,uint8_t cellId,uint8_t ueId)
167 RlcL2MeasEvtCb *measEvtCb = NULLP;
168 RlcL2MeasCb *measCb = NULLP;
174 #ifndef XEON_SPECIFIC_CHANGES
175 uint8_t freeIdx = gCb->genCfg.maxUe;
177 uint16_t freeIdx = LKW_MAX_UE;
181 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
183 measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
184 measCb = &(measEvtCb->measCb);
186 freeIdx = gCb->genCfg.maxUe;
188 if(measCb->measType &
189 (LKW_L2MEAS_ACT_UE | LKW_L2MEAS_UU_LOSS | LKW_L2MEAS_DL_DELAY))
191 for(cntr1 =0;((cntr1 < measCb->val.nonIpThMeas.numQci) &&
192 (cntr1 < LKW_MAX_QCI));cntr1++)
194 if(measCb->val.nonIpThMeas.qci[cntr1] != rlcRbCb->qci)
196 measCb->val.nonIpThMeas.qci[cntr1] = rlcRbCb->qci;
197 gCb->u.dlCb->rlcL2Cb.measOn[rlcRbCb->qci] |=measCb->measType;
203 if(((rlcRbCb->rbL2Cb.measOn & measCb->measType) == LKW_L2MEAS_NONE))
205 if (measCb->measType & LKW_L2MEAS_ACT_UE)
207 if((rlcRbCb->mode == RLC_MODE_UM) &&
208 (rlcRbCb->dir & RLC_DIR_DL ))
210 if (rlcRbCb->m.umDl.sduQ.count)
212 if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
214 rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
215 gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
219 else if (rlcRbCb->mode == RLC_MODE_AM)
221 if ((rlcRbCb->m.amDl.cntrlBo) ||
222 (rlcRbCb->m.amDl.retxBo) ||
223 (rlcRbCb->m.amDl.bo))
225 if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
227 rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
228 gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
234 if((measCb->measType & LKW_L2MEAS_DL_IP))
237 for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
238 (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
240 if ((freeIdx == gCb->genCfg.maxUe) &&
241 (measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid == FALSE))
246 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
252 if (ueIdx == measCb->val.ipThMeas.numUes)
254 if (gCb->genCfg.maxUe == measCb->val.ipThMeas.numUes)
258 if (gCb->genCfg.maxUe == freeIdx)
260 measCb->val.ipThMeas.numUes++;
266 measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = TRUE;
267 memset(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[0],0x00,(sizeof(RlcL2Cntr) *LKW_MAX_QCI));
268 measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci = 0;
270 measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = ueId;
271 measCb->val.ipThMeas.ueInfoLst[ueIdx].cellId = cellId;
272 numQci = &(measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci);
274 for (qciIdx =0; ((qciIdx < *numQci) &&
275 (qciIdx < LKW_MAX_QCI)) ; qciIdx++)
277 if (measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] == rlcRbCb->qci)
283 /* Fix Klock Warning */
284 if ((qciIdx == *numQci) && (qciIdx < LKW_MAX_QCI))
286 measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] = rlcRbCb->qci;
290 rlcUtlPlcMeasDatInL2Sts(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[rlcRbCb->qci],
291 &rlcRbCb->rbL2Cb, measCb->measType);
293 else if (measCb->measType &
294 (LKW_L2MEAS_DL_DISC | LKW_L2MEAS_DL_DELAY | LKW_L2MEAS_UU_LOSS))
296 rlcUtlPlcMeasDatInL2Sts(&measCb->val.nonIpThMeas.measData[rlcRbCb->qci],
297 &rlcRbCb->rbL2Cb, measCb->measType);
298 measCb->val.nonIpThMeas.qci[rlcRbCb->qci] = rlcRbCb->qci;
299 measCb->val.nonIpThMeas.measData[rlcRbCb->qci].totDrbsPerQci++;
301 rlcRbCb->rbL2Cb.measOn |= measCb->measType;
304 }/*rlcAddToDlL2Meas*/
305 #endif /*LTE_L2_MEAS*/
310 * This primitive fills the RbCb
312 * @param [in] gCb - RLC Instance Control Block
313 * @param [out] rbCb - RB Control Block
314 * @param [out] ueCb - UE Control Block
315 * @param [in] entCfg - RLC Entity configuration
321 static S16 rlcCfgFillDlRbCb(RlcCb *gCb,RlcDlRbCb *rbCb,RlcDlUeCb *ueCb,RlcEntCfgInfo *entCfg)
324 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
325 "rlcCfgFillRbCb(ueId(%d),cellId(%d) rbType(%d))",
330 /* Initialize according to entMode */
331 switch (entCfg->entMode)
335 rbCb->lch.lChId = entCfg->lCh[0].lChId;
336 rbCb->lch.lChType = entCfg->lCh[0].type;
337 rbCb->dir = entCfg->dir;
343 rbCb->lch.lChId = entCfg->lCh[0].lChId;
344 rbCb->lch.lChType = entCfg->lCh[0].type;
345 rbCb->dir = entCfg->dir;
347 /* Spec 38.322 Section 7.1
348 * All UM state variables can take values from 0 to 63 for 6 bit SN or
349 * from 0 to 4095 for 12 bit SN. All arithmetic operations on UM state
350 * variables are affected by the UM modulus
351 * (i.e. final value = [value from arithmetic operation] modulo 64
352 * for 6 bit SN and 4096 for 12 bit SN)
354 rbCb->m.umDl.snLen = entCfg->m.umInfo.dl.snLen;
355 if (entCfg->m.umInfo.dl.snLen == RLC_UM_CFG_6BIT_SN_LEN)
356 rbCb->m.umDl.modBitMask = 0x3f;
358 rbCb->m.umDl.modBitMask = 0xfff;
360 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
366 /* Down Link Information
367 * indx = 0 as Down Link */
368 rbCb->lch.lChId = entCfg->lCh[0].lChId;
369 rbCb->lch.lChType = entCfg->lCh[0].type;
370 rbCb->dir = RLC_DIR_BOTH;
372 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
373 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
374 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
375 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
376 rbCb->m.amDl.snLen = entCfg->m.amInfo.dl.snLen;
378 if(RLC_AM_CFG_12BIT_SN_LEN == rbCb->m.amDl.snLen)
380 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_12BITS) - 1; /* 5GNR */
384 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_18BITS) - 1; /* 5GNR */
387 cmInitTimers(&(rbCb->m.amDl.pollRetxTmr), 1);
388 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
393 rbCb->m.amDl.txBufLst,
394 (RLC_TX_BUF_BIN_SIZE * sizeof(CmLListCp)));
395 for(hashIndex = 0; hashIndex < RLC_TX_BUF_BIN_SIZE; hashIndex++)
397 cmLListInit(&(rbCb->m.amDl.txBufLst[hashIndex]));
404 RLOG_ARG2(L_ERROR,DBG_RBID,entCfg->rbId,
405 "Invalid RB Mode ueId(%d),cellId(%d)",
411 rbCb->mode = entCfg->entMode;
412 rbCb->discTmrInt = entCfg->discardTmr;
419 * @brief This primitive Initializes the RB Cb
421 * @param [in] gCb - RLC Instance Control Block
422 * @param [out] rbCb - RB Control Block
423 * @param [in] ptr - Void pointer
424 * @param [in] entCfg - Entity Configuration
430 static S16 rlcCfgUpdateDlRb
435 RlcEntCfgInfo *entCfg
439 if (rbCb->mode != entCfg->entMode)
441 RLOG_ARG4(L_ERROR,DBG_RBID,rbCb->rlcId.rbId,
442 "RB Mode Mismatch : exp [%d] rcv [%d] UEID:%d CELLID:%d",
447 return (CKW_CFG_REAS_RB_MODE_MIS);
454 RlcDlCellCb *cellCb = (RlcDlCellCb *)ptr;
456 rbCb->dir = entCfg->dir;
457 rbCb->lch.lChId = entCfg->lCh[0].lChId;
458 rbCb->lch.lChType = entCfg->lCh[0].type;
460 cellCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
466 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
468 if (entCfg->lCh[0].type == CM_LTE_LCH_DCCH)
470 return (CKW_CFG_REAS_LCHTYPE_MIS);
472 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
473 ueCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rbCb;
475 rbCb->lch.lChId = entCfg->lCh[0].lChId;
476 rbCb->lch.lChType = entCfg->lCh[0].type;
477 rbCb->dir = entCfg->dir;
483 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
485 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
486 ueCb->lCh[entCfg->lCh[1].lChId - 1].dlRbCb = rbCb;
489 rbCb->lch.lChId = entCfg->lCh[1].lChId;
490 rbCb->lch.lChType = entCfg->lCh[1].type;
491 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
492 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
493 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
494 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
501 rbCb->discTmrInt = entCfg->discardTmr;
503 return (CKW_CFG_REAS_NONE);
509 * This primitive adds new RB in Ue/Cell Cb.
512 * This function does following steps -
513 * - If UE ID is 0 then
514 * - Check for CELL CB is present
515 * - If yes, Check for RB ID
516 * - If RB ID is present Status Indication with reason
517 * - Else, Create New RB CB in CELL CB
518 * - If no Create New CELL CB and RB CB
520 * - Check for UE CB is present
521 * - If yes Check for RB ID
522 * - If RB ID is present Status Indication with reason
523 * - Else, Create New RB CB in UE CB
524 * - If no Create New UE CB and RB CB
525 * - Fill entity confirmation
527 * @param [in] gCb - RLC Instance Control Block
528 * @param [in] ueId - UE Identifier
529 * @param [in] cellId - CELL Identifier
530 * @param [in] entCfg - Entity Configuration to be done.
531 * @param [out] entCfm - Entity Confirmation.
542 RlcEntCfgInfo *entCfg,
543 RlcEntCfgCfmInfo *entCfm
546 RlcDlUeCb *ueCb = NULLP; /* UE Control Block */
547 RlcDlCellCb *cellCb; /* Cell Control Block */
548 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
549 uint8_t reason; /* Rb Identifier */
551 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
552 "rlcCfgAddRb(cellId(%d),UEID:%d cfgType(%d))",
559 /* Fill entCfm structure */
560 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
561 CKW_CFG_REAS_CELL_UNKWN);
562 RLOG_ARG1(L_ERROR,DBG_RBID,entCfg->rbId,
563 "Add DLRb,CellId is 0 for UEID:%d",
567 if ((entCfg->rguSapId >= gCb->genCfg.maxRguSaps) || (entCfg->rguSapId < 0))
569 RLCDBGP_ERROR(gCb, "rlcCfgAddDlRb(ueId(%u), cellId(%u), Invalid rguSapId (%d)\n",
570 ueId, cellId, entCfg->rguSapId);
575 /* Process Adding new RB */
578 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
580 /* Fill entCfm structure */
581 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
583 CKW_CFG_REAS_RB_UNKWN);
584 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId,
585 "Invalid RbId ,Max is [%d] CELLID:%d UEID:%d",
592 if (((entCfg->lCh[0].type == CM_LTE_LCH_BCCH) ||
593 (entCfg->lCh[0].type == CM_LTE_LCH_PCCH) ||
594 (entCfg->lCh[0].type == CM_LTE_LCH_CCCH)) &&
595 (entCfg->entMode == RLC_MODE_TM))
597 /* Cell CB present */
598 rlcDbmFetchDlCellCb(gCb, cellId, &cellCb);
601 /* Get rbCb from cellCb->rbCb List */
602 if (( cellCb->rbCb[entCfg->rbId] != NULLP))
604 /* Fill entCfm structure */
605 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
607 CKW_CFG_REAS_RB_PRSNT);
608 RLOG_ARG2(L_WARNING, DBG_CELLID,cellId,
609 "RbId [%d] already exists UEID:%d",
615 else /* Cell CB UNKNOWN */
618 if ( ROK != rlcDbmCreateDlCellCb(gCb,cellId, &cellCb))
620 /* Fill entCfm structure */
621 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
623 CKW_CFG_REAS_CELL_CREAT_FAIL);
624 RLOG_ARG2(L_ERROR,DBG_CELLID,cellId,
625 "cellCb Creation failed RBID:%d UEID:%d",
633 if(entCfg->lCh[0].lChId <= 0)
635 RLOG_ARG3(L_ERROR,DBG_LCID,entCfg->lCh[0].lChId ,
636 "Invalid LcId CELLID:%d UEID:%d RBID:%d",
640 /* Fill entCfm structure */
641 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
642 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
647 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
650 RLOG_ARG2(L_FATAL,DBG_UEID,ueId,
651 "Memory allocation failed for rbId:%d CELLID:%d",
654 /* Fill entCfm structure */
655 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
656 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_CREAT_FAIL);
659 rlcRbCb->rlcId.rbId = entCfg->rbId;
660 cellCb->rbCb[entCfg->rbId] = rlcRbCb;
661 RLC_LMM_RB_STS_INC(gCb);
662 cellCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rlcRbCb;
666 reason= (entCfg->entMode != RLC_MODE_TM)? CKW_CFG_REAS_RB_MODE_MIS:
667 CKW_CFG_REAS_LCHTYPE_MIS;
668 /* Fill entCfm structure */
669 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
670 CKW_CFG_CFM_NOK, reason);
676 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
678 /* Fill entCfm structure */
679 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
680 CKW_CFG_REAS_RB_UNKWN);
681 RLOG_ARG2(L_ERROR,DBG_RBID, entCfg->rbId,
682 "Invalid RbId for RbType[%d] UEID:%d",
687 if ((((entCfg->lCh[0].type == CM_LTE_LCH_DCCH) &&
688 (entCfg->entMode != RLC_MODE_UM) &&
689 (CM_LTE_SRB == entCfg->rbType)) ||
690 ((entCfg->lCh[0].type == CM_LTE_LCH_DTCH) &&
691 (CM_LTE_DRB == entCfg->rbType))) &&
692 (entCfg->entMode != RLC_MODE_TM))
695 if ( rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb) == ROK)
697 /* Get rbCb from ueCb->rbCb list */
698 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
700 if(( rlcRbCb != NULLP))
702 /* Fill entCfm structure */
703 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
704 CKW_CFG_REAS_RB_PRSNT);
705 RLOG_ARG2(L_WARNING, DBG_UEID, ueId,
706 "CellId[%u]:rbId [%d] already exists",
712 else /* UE CB UNKNOWN */
715 if ( rlcDbmCreateDlUeCb(gCb,ueId, cellId, &ueCb) != ROK)
717 /* Fill entCfm structure */
718 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
719 CKW_CFG_REAS_UE_CREAT_FAIL);
720 RLOG_ARG2(L_WARNING, DBG_CELLID,cellId,
721 "UeId [%u]:ueCb Creation Failed RBID:%d",
726 /* Start throughput calculation for this UE */
727 gCb->rlcThpt.thptPerUe[gCb->rlcThpt.numActvUe].ueIdx = ueId;
728 gCb->rlcThpt.thptPerUe[gCb->rlcThpt.numActvUe].dataVol = 0;
729 gCb->rlcThpt.numActvUe++;
731 if((rlcChkTmr(gCb, (PTR)(&gCb->rlcThpt), EVENT_RLC_THROUGHPUT_TMR)) == FALSE)
733 printf("\nHLAL Starting Throughput timer");
734 rlcStartTmr(gCb, (PTR)(&gCb->rlcThpt), EVENT_RLC_THROUGHPUT_TMR);
738 /* Validate LChId for UM and AM modes */
739 if ((entCfg->lCh[0].lChId <= 0) ||
740 ((entCfg->entMode == RLC_MODE_AM)&&
741 (entCfg->lCh[1].lChId <= 0)))
743 /* Fill entCfm structure */
744 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
745 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
750 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
753 /* Fill entCfm structure */
754 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,CKW_CFG_CFM_NOK,
755 CKW_CFG_REAS_RB_CREAT_FAIL);
756 RLOG_ARG2(L_FATAL,DBG_UEID,ueId,
757 "Memory allocation failed RBID:%d CELLID:%d",
763 /* copy the RB Cb into UECb */
764 rlcRbCb->rlcId.rbId = entCfg->rbId;
765 if(entCfg->rbType == CM_LTE_SRB)
766 ueCb->srbCb[entCfg->rbId] = rlcRbCb;
768 ueCb->drbCb[entCfg->rbId] = rlcRbCb;
770 RLC_LMM_RB_STS_INC(gCb);
775 if (entCfg->entMode == RLC_MODE_TM)
777 reason = CKW_CFG_REAS_RB_MODE_MIS;
781 reason = CKW_CFG_REAS_LCHTYPE_MIS;
784 /* Fill entCfm structure */
785 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK, reason);
791 rlcRbCb->rlcId.cellId = cellId;
792 rlcRbCb->rlcId.ueId = ueId;
793 rlcRbCb->rlcId.rbType = entCfg->rbType;
794 rlcRbCb->inst = gCb->init.inst;
795 #ifdef TENB_MULT_CELL_SUPPRT
796 rlcRbCb->rguSapId = entCfg->rguSapId;
801 if (rlcCfgFillDlRbCb(gCb,rlcRbCb, ueCb, entCfg) != ROK)
803 /* Fill entCfm structure */
804 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
805 CKW_CFG_REAS_RB_CREAT_FAIL);
807 /* Delete RB CB created */
808 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
809 RLOG_ARG2(L_ERROR,DBG_RBID, entCfg->rbId,
810 "Filling of RbCb failed UEID:%d CELLID:%d",
815 rlcRbCb->qci = entCfg->qci;
817 rlcRbCb->ueCb = ueCb;
818 if (entCfg->lCh[0].type == CM_LTE_LCH_DTCH)
821 rlcAddToDlL2Meas(gCb, rlcRbCb,cellId,ueId);
823 #endif /* LTE_L2_MEAS */
825 /* Fill entCfm structure */
826 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
834 * This primitive reconfigures the existing RB in Ue/Cell Cb.
837 * This primitive executes following steps in reconfiguration of existing
839 * - If UE ID is 0 then
840 * - Check for CELL CB is present
841 * - If yes, Check for RB ID
842 * - If RB ID is present Reconfigure the RB CB
843 * - Else, Status Indication with Reason
844 * - Else, Status Indication with Reason
846 * - Check for UE CB is present
847 * - If yes, Check for RB ID
848 * - If RB ID is prenset Reconfigure the CELL CB
849 * - Else, Status Indication with Reason
850 * - Else, Status Indication with Reason
851 * - Fill entity confirmation
853 * @param [in] gCb - RLC Instance Control Block
854 * @param [in] ueId - UE Identifier
855 * @param [in] cellId - CELL Identifier
856 * @param [in] entCfg - Entity Configuration to be done.
857 * @param [out] entCfm - Entity Confirmation
868 RlcEntCfgInfo *entCfg,
869 RlcEntCfgCfmInfo *entCfm
872 RlcDlRbCb *rbCb; /* RB Control Block */
873 RlcDlRbCb tRbCb; /* KW RB Control Block */
874 RlcDlCellCb *cellCb; /* Cell Control Block */
875 RlcDlUeCb *ueCb; /* Ue Control Block */
878 RLOG_ARG3(L_DEBUG,DBG_UEID,ueId,
879 "rlcCfgReCfgRb(cellId(%d), cfgType(%d)) RBID:%d",
880 cellId, entCfg->cfgType,entCfg->rbId);
883 /* Check for UeCb or CellCb */
886 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
888 /* Fill entCfm structure */
889 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
890 CKW_CFG_REAS_RB_UNKWN);
891 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId,
892 "Invalid RbId , Max is [%d] UEID:%d CELLID:%d",
899 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
902 /* Fill entCfm structure */
903 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
904 CKW_CFG_REAS_CELL_UNKWN);
905 RLOG_ARG3(L_ERROR,DBG_CELLID,cellId,
906 "CellCb not found ueId:%d RBID:%d CELLID:%d",
914 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rbCb);
918 /* Fill entCfm structure */
919 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
920 CKW_CFG_REAS_RB_UNKWN);
921 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
922 "CELLID:%d RBID:%d not found",
928 /* Take backup of rbCb before updating.
929 * Because in failure case restore original rbCb
931 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
934 ret = rlcCfgUpdateDlRb(gCb,rbCb, cellCb,entCfg);
937 /* Fill entCfm structure */
938 RLC_CFG_FILL_CFG_CFM(entCfm,
944 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
945 "CELLID:%u RBID:%d updation failed",
948 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
955 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
957 /* Fill entCfm structure */
958 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
959 CKW_CFG_REAS_RB_UNKWN);
960 RLOG_ARG3(L_ERROR,DBG_UEID,ueId,
961 "CELLID:%d Invalid RBID:%d for RbType[%d]",
968 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
971 /* Fill entCfm structure */
972 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
973 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
974 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
975 "UEID:%d UeCb not found RBID:%d",
982 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rbCb);
986 /* Fill entCfm structure */
987 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
988 CKW_CFG_REAS_RB_UNKWN);
989 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
990 "CELLID:%d RBID:%d not found",
996 /* Take backup of rbCb before updating.
997 * Because in failure case restore original rbCb
999 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
1002 ret = rlcCfgUpdateDlRb(gCb,rbCb,ueCb, entCfg);
1003 if (ret != CKW_CFG_REAS_NONE)
1005 /* Fill entCfm structure */
1006 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1008 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
1009 "CELLID:%d RBID:%d updation failed",
1012 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
1018 /* Fill entCfm structure */
1019 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1026 * @brief This primitive deletes the existing RB in Ue/Cell Cb.
1029 * - If UE ID is 0 then
1030 * - Check for CELL CB is present
1031 * - If yes, Check for RB ID
1032 * - If RB ID is prenset Delete the RB CB
1033 * - If there is no RB CB exist in CELL CB then Delete CELL CB.
1034 * - Else, Status Indication with Reason
1035 * - Else, Status Indication with Reason
1037 * - Check for UE CB is present
1038 * - If yes, Check for RB ID
1039 * - If RB ID is prenset Delete the RB CB
1040 * - If there is no RB CB exist in UE CB then Delete UE CB.
1041 * - Else, Status Indication with Reason
1042 * - Else, Status Indication with Reason
1043 * - Fill entity confirmation
1045 * @param [in] gCb - RLC Instance Control Block
1046 * @param [in] ueId - UE Identifier
1047 * @param [in] cellId - CELL Identifier
1048 * @param [in] entCfg - Entity Configuration to be done.
1049 * @param [out] entCfm - Entity Confirmation
1060 RlcEntCfgInfo *entCfg,
1061 RlcEntCfgCfmInfo *entCfm
1064 S16 ret; /* Return Value */
1065 RlcDlUeCb *ueCb; /* UE Control Block */
1066 RlcDlCellCb *cellCb; /* UE Control Block */
1067 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
1069 RLOG_ARG3(L_DEBUG,DBG_UEID,ueId,
1070 "rlcCfgDelRb(RBID(%d), cellId(%d), cfgType(%d))",
1077 /* Get cellCb and delete rbCb from it */
1080 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
1082 /* Fill entCfm structure */
1083 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1084 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1085 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId ,
1086 "Invalid RbId, Max is [%d] UEID:%d CELLID:%d",
1087 RLC_MAX_RB_PER_CELL,
1093 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1096 /* Fill entCfm structure */
1097 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1098 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1099 RLOG_ARG2(L_ERROR,DBG_CELLID,cellId,
1100 "CellCb not found UEID:%d RBID:%d",
1107 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rlcRbCb);
1109 if ( rlcRbCb == NULLP)
1111 /* Fill entCfm structure */
1112 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1113 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1114 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1115 "CellId[%u]:RbId[%d] not found",
1121 /* Assign NULLP to rbCb in rbCbLst */
1122 cellCb->rbCb[entCfg->rbId] = NULLP;
1124 /* Assign NULLP to dlRbCb/ulRbCb.
1125 * Delete Hashlist allocated for it if any */
1126 cellCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1127 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb)); /*Vartika: Mem leak fix */
1129 /* Get ueCb and delete rbCb from it */
1132 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
1134 /* Fill entCfm structure */
1135 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1136 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1137 RLOG_ARG3(L_ERROR,DBG_RBID, entCfg->rbId,
1138 "Invalid RbId for RbType[%d] UEID:%d CELLID:%d",
1146 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1149 /* Fill entCfm structure */
1150 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1151 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1152 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
1153 "UeId [%d]: UeCb not found RBID:%d",
1160 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
1162 if ( rlcRbCb == NULLP)
1164 /* Fill entCfm structure */
1165 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1166 CKW_CFG_REAS_RB_UNKWN);
1167 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1168 "CellId[%u]:RbId[%d] not found",
1174 ueCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1177 RLC_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(gCb, rlcRbCb);
1179 /* Free the Buffers of RbCb */
1180 if( RLC_MODE_UM == rlcRbCb->mode)
1182 rlcUmmFreeDlRbCb(gCb,rlcRbCb);
1184 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
1186 else if( RLC_MODE_AM == rlcRbCb->mode)
1188 rlcAmmFreeDlRbCb(gCb,rlcRbCb);
1191 /* Assign NULLP to rbCb in rbCbLst */
1192 if ( entCfg->rbType == CM_LTE_SRB )
1194 ueCb->srbCb[entCfg->rbId] = NULLP;
1198 ueCb->drbCb[entCfg->rbId] = NULLP;
1202 RLC_LMM_RB_STS_DEC(gCb);
1204 /* Fill entCfm structure */
1205 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1213 * @brief This primitive re-establish the existing RB in Ue/Cell Cb.
1216 * - If UE ID is 0 then
1217 * - Check for CELL CB is present
1218 * - If yes, Check for RB ID
1219 * - If RB ID is prenset initialize the parameters of the RB CB
1220 * - Else, Status Indication with Reason
1221 * - Else, Status Indication with Reason
1223 * - Check for UE CB is present
1224 * - If yes, Check for RB ID
1225 * - If RB ID is prenset initialize the parameters of the RB CB
1226 * - Else, Status Indication with Reason
1227 * - Else, Status Indication with Reason
1228 * - Fill entity confirmation
1230 * @param [in] gCb - RLC Instance Control Block
1231 * @param [in] ueId - UE Identifier
1232 * @param [in] cellId - CELL Identifier
1233 * @param [in] entCfg - Entity Configuration to be done.
1234 * @param [out] entCfm - Entity Confirmation
1246 RlcEntCfgInfo *entCfg,
1247 RlcEntCfgCfmInfo *entCfm
1250 RlcDlRbCb *rbCb; /* RB Control Block */
1251 CmLteRlcId rlcId; /* RLC Identifier */
1253 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
1254 "rlcCfgReEstDlRb(ueId(%d), cellId(%d), cfgType(%d))",
1261 rlcId.cellId = cellId;
1262 rlcId.rbId = entCfg->rbId;
1263 rlcId.rbType = entCfg->rbType;
1265 rlcDbmFetchDlRbCbByRbId(gCb,&rlcId, &rbCb);
1268 /* Fill entCfm structure */
1269 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, rlcId.rbType, CKW_CFG_CFM_NOK,
1270 CKW_CFG_REAS_RB_UNKWN);
1271 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1272 "CellId[%u]:RbId[%d] not found",
1278 rbCb->rlcId.ueId = ueId;
1284 rlcDlTmmReEstablish(gCb,rbCb);
1290 rlcDlUmmReEstablish(gCb,rlcId,sndReEstInd,rbCb);
1296 rlcAmmDlReEstablish(gCb, rlcId, rbCb);
1301 /* Fill entCfm structure */
1302 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1303 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1310 * @brief This primitive deletes the RBs in Ue Cb.
1313 * - If UE ID is 0 then
1314 * - Status Indication with Reason
1316 * - Check for UE CB is present
1317 * - If yes, Delete all RB CB in UE CB and Delete UE CB also.
1318 * - Else, Status Indication with Reason
1319 * - Fill entity confirmation
1321 * @param [in] gCb - RLC Instance Control Block
1322 * @param [in] ueId - UE Identifier
1323 * @param [in] cellId - CELL Identifier
1324 * @param [in] entCfg - Entity Configuration to be done.
1325 * @param [out] entCfm - Entity Confirmation
1336 RlcEntCfgInfo *entCfg,
1337 RlcEntCfgCfmInfo *entCfm
1340 S16 ret; /* Return Value */
1341 RlcDlUeCb *ueCb; /* UE Control Block */
1343 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
1344 "rlcCfgDelUe(ueId(%d), cellId(%d), cfgType(%d))",
1351 /* Check for ueId is present or not */
1354 /* Fill entCfm structure */
1355 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1356 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1357 RLOG_ARG2(L_ERROR,DBG_RBID,entCfg->rbId,
1358 "ueId(%d), cellId(%d)",
1365 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1368 /* Fill entCfm structure */
1369 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1370 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1371 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
1372 "UEID:%d UeCb not found RBID:%d",
1379 rlcDelFrmDlL2Meas(gCb,cellId,ueId);
1380 rlcDbmDelAllDlL2MeasTbFrmUe(gCb,ueCb);
1383 rlcDbmDelDlUeCb(gCb,ueCb, FALSE);
1385 /* Fill entCfm structure */
1386 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1387 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1394 * @brief This primitive deletes the RBs in Ue Cb.
1397 * - If CELL ID is 0 then
1398 * - Status Indication with Reason
1400 * - Check for CELL CB is present
1401 * - If yes, Delete all RB CB in CELL CB and Delete CELL CB also.
1402 * - Else, Status Indication with Reason
1403 * - Fill entity confirmation
1405 * @param [in] cellId - CELL Identifier
1406 * @param [in] entCfg - Entity Configuration to be done.
1407 * @param [out] entCfm - Entity Confirmation
1417 RlcEntCfgInfo *entCfg,
1418 RlcEntCfgCfmInfo *entCfm
1421 RlcDlCellCb *cellCb; /* UE Control Block */
1422 uint8_t rbId; /* RB Identifier */
1424 RLOG_ARG2(L_DEBUG,DBG_RBID,entCfg->rbId,
1425 "rlcCfgDelCell( cellId(%d), cfgType(%d)",
1430 rbId = entCfg->rbId;
1432 /* Check for ueId is present or not */
1435 /* Fill entCfm structure */
1436 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1437 CKW_CFG_REAS_CELL_UNKWN);
1438 RLOG_ARG1(L_DEBUG,DBG_RBID,entCfg->rbId,
1439 "cellId is 0 (%d) ",
1445 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1448 /* Fill entCfm structure */
1449 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1450 CKW_CFG_REAS_CELL_UNKWN);
1451 RLOG_ARG1(L_ERROR, DBG_CELLID,cellId,
1452 "CellCb not found for RBID:%d",
1458 rlcDbmDelDlCellCb(gCb,cellCb);
1460 /* Fill entCfm structure */
1461 /* kw005.201 added support for L2 Measurement */
1462 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1469 * @brief This primitive changes the ueId of Ue Cb.
1472 * - If oldUeId and newUeId are
1473 * - Confirm the Status with Reason
1474 * - If UeId not present
1475 * - Confirm the Status with Reason
1477 * - Copy rbCbs from old UeCb to new UeCb
1479 * - Fill entity confirmation
1481 * @param [in] ueInfo - Old UE Information
1482 * @param [in] newUeInfo - New UE Information
1483 * @param [out] status - Status
1489 S16 rlcCfgDlUeIdChng
1493 CkwUeInfo *newUeInfo,
1498 /*kw004.201 Adding of Missing Trace in LTE RLC PDCP*/
1500 if ( (ueInfo->ueId == newUeInfo->ueId) &&
1501 (ueInfo->cellId == newUeInfo->cellId))
1503 status->reason = CKW_CFG_REAS_SAME_UEID;
1504 status->status = CKW_CFG_CFM_NOK;
1505 RLOG_ARG2(L_ERROR,DBG_CELLID,ueInfo->cellId,
1506 "Old UeId[%d] same as new UeId[%d]",
1512 if(ROK == rlcDbmFetchDlUeCb(gCb,newUeInfo->ueId, newUeInfo->cellId, &ueCb))
1514 RLOG_ARG1(L_ERROR, DBG_CELLID, newUeInfo->cellId,
1515 "NewUeId[%d]:ueCb already exists",
1517 status->reason = CKW_CFG_REAS_UE_EXISTS;
1518 status->status = CKW_CFG_CFM_NOK;
1522 if(ROK != rlcDbmFetchDlUeCb(gCb,ueInfo->ueId, ueInfo->cellId, &ueCb))
1525 RLOG_ARG1(L_ERROR,DBG_CELLID,ueInfo->cellId,
1526 "UeId [%d]: UeCb not found",
1528 status->reason = CKW_CFG_REAS_UE_UNKWN;
1529 status->status = CKW_CFG_CFM_NOK;
1534 rlcHdlMeasDlUeIdChg(gCb, ueInfo->cellId, ueInfo->ueId, newUeInfo->ueId);
1536 if(ROK != cmHashListDelete(&(gCb->u.dlCb->ueLstCp), (PTR) ueCb))
1538 RLOG_ARG1(L_ERROR,DBG_CELLID,ueInfo->cellId,
1539 "UeId[%u] HashList Deletion Failed",
1541 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1542 status->status = CKW_CFG_CFM_NOK;
1546 /* update the hash key with new values */
1547 ueCb->ueId = newUeInfo->ueId;
1548 ueCb->cellId = newUeInfo->cellId;
1550 if(ROK != cmHashListInsert(&(gCb->u.dlCb->ueLstCp),
1551 (PTR)ueCb, (uint8_t *)&(ueCb->ueId),
1552 (uint16_t) sizeof(CmLteRnti)))
1555 RLOG_ARG1(L_ERROR,DBG_CELLID,newUeInfo->cellId,
1556 "UeId[%u] HashList Insertion Failed",
1558 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1559 status->status = CKW_CFG_CFM_NOK;
1566 /********************************************************************30**
1569 **********************************************************************/