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 == CM_LTE_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 == CM_LTE_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
319 static S16 rlcCfgFillDlRbCb
324 RlcEntCfgInfo *entCfg
327 static S16 rlcCfgFillDlRbCb(gCb,rbCb,entCfg)
331 RlcEntCfgInfo *entCfg;
335 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
336 "rlcCfgFillRbCb(ueId(%d),cellId(%d) rbType(%d))",
341 /* Initialize according to entMode */
342 switch (entCfg->entMode)
346 rbCb->lch.lChId = entCfg->lCh[0].lChId;
347 rbCb->lch.lChType = entCfg->lCh[0].type;
348 rbCb->dir = entCfg->dir;
354 rbCb->lch.lChId = entCfg->lCh[0].lChId;
355 rbCb->lch.lChType = entCfg->lCh[0].type;
356 rbCb->dir = entCfg->dir;
357 rbCb->m.umDl.snLen = entCfg->m.umInfo.dl.snLen;
358 if (entCfg->m.umInfo.dl.snLen == RLC_UM_CFG_5BIT_SN_LEN)
359 rbCb->m.umDl.modBitMask = 0x1f;
361 rbCb->m.umDl.modBitMask = 0x3ff;
363 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
369 /* Down Link Information
370 * indx = 0 as Down Link */
371 rbCb->lch.lChId = entCfg->lCh[0].lChId;
372 rbCb->lch.lChType = entCfg->lCh[0].type;
373 rbCb->dir = RLC_DIR_BOTH;
374 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
375 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
376 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
377 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
378 rbCb->m.amDl.snLen = entCfg->m.amInfo.dl.snLen;
380 if(RLC_AM_CFG_12BIT_SN_LEN == rbCb->m.amDl.snLen)
382 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_12BITS) - 1; /* 5GNR */
386 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_18BITS) - 1; /* 5GNR */
389 cmInitTimers(&(rbCb->m.amDl.pollRetxTmr), 1);
392 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
397 rbCb->m.amDl.txBufLst,
398 (RLC_TX_BUF_BIN_SIZE * sizeof(CmLListCp)));
399 for(hashIndex = 0; hashIndex < RLC_TX_BUF_BIN_SIZE; hashIndex++)
401 cmLListInit(&(rbCb->m.amDl.txBufLst[hashIndex]));
408 RLOG_ARG2(L_ERROR,DBG_RBID,entCfg->rbId,
409 "Invalid RB Mode ueId(%d),cellId(%d)",
415 rbCb->mode = entCfg->entMode;
416 rbCb->discTmrInt = entCfg->discardTmr;
423 * @brief This primitive Initializes the RB Cb
425 * @param [in] gCb - RLC Instance Control Block
426 * @param [out] rbCb - RB Control Block
427 * @param [in] ptr - Void pointer
428 * @param [in] entCfg - Entity Configuration
435 static S16 rlcCfgUpdateDlRb
440 RlcEntCfgInfo *entCfg
443 static S16 rlcCfgUpdateDlRb(gCb,rbCb, ptr, entCfg)
447 RlcEntCfgInfo *entCfg;
451 if (rbCb->mode != entCfg->entMode)
453 RLOG_ARG4(L_ERROR,DBG_RBID,rbCb->rlcId.rbId,
454 "RB Mode Mismatch : exp [%d] rcv [%d] UEID:%d CELLID:%d",
459 return (CKW_CFG_REAS_RB_MODE_MIS);
466 RlcDlCellCb *cellCb = (RlcDlCellCb *)ptr;
468 rbCb->dir = entCfg->dir;
469 rbCb->lch.lChId = entCfg->lCh[0].lChId;
470 rbCb->lch.lChType = entCfg->lCh[0].type;
472 cellCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
478 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
480 if (entCfg->lCh[0].type == CM_LTE_LCH_DCCH)
482 return (CKW_CFG_REAS_LCHTYPE_MIS);
484 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
485 ueCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rbCb;
487 rbCb->lch.lChId = entCfg->lCh[0].lChId;
488 rbCb->lch.lChType = entCfg->lCh[0].type;
489 rbCb->dir = entCfg->dir;
495 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
497 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
498 ueCb->lCh[entCfg->lCh[1].lChId - 1].dlRbCb = rbCb;
501 rbCb->lch.lChId = entCfg->lCh[1].lChId;
502 rbCb->lch.lChType = entCfg->lCh[1].type;
503 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
504 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
505 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
506 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
513 rbCb->discTmrInt = entCfg->discardTmr;
515 return (CKW_CFG_REAS_NONE);
521 * This primitive adds new RB in Ue/Cell Cb.
524 * This function does following steps -
525 * - If UE ID is 0 then
526 * - Check for CELL CB is present
527 * - If yes, Check for RB ID
528 * - If RB ID is present Status Indication with reason
529 * - Else, Create New RB CB in CELL CB
530 * - If no Create New CELL CB and RB CB
532 * - Check for UE CB is present
533 * - If yes Check for RB ID
534 * - If RB ID is present Status Indication with reason
535 * - Else, Create New RB CB in UE CB
536 * - If no Create New UE CB and RB CB
537 * - Fill entity confirmation
539 * @param [in] gCb - RLC Instance Control Block
540 * @param [in] ueId - UE Identifier
541 * @param [in] cellId - CELL Identifier
542 * @param [in] entCfg - Entity Configuration to be done.
543 * @param [out] entCfm - Entity Confirmation.
555 RlcEntCfgInfo *entCfg,
556 RlcEntCfgCfmInfo *entCfm
559 S16 rlcCfgAddDlRb(gCb,ueId, cellId, entCfg, entCfm)
563 RlcEntCfgInfo *entCfg;
564 RlcEntCfgCfmInfo *entCfm;
567 RlcDlUeCb *ueCb = NULLP; /* UE Control Block */
568 RlcDlCellCb *cellCb; /* Cell Control Block */
569 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
570 uint8_t reason; /* Rb Identifier */
572 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
573 "rlcCfgAddRb(cellId(%d),UEID:%d cfgType(%d))",
580 /* Fill entCfm structure */
581 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
582 CKW_CFG_REAS_CELL_UNKWN);
583 RLOG_ARG1(L_ERROR,DBG_RBID,entCfg->rbId,
584 "Add DLRb,CellId is 0 for UEID:%d",
588 if ((entCfg->rguSapId >= gCb->genCfg.maxRguSaps) || (entCfg->rguSapId < 0))
590 RLCDBGP_ERROR(gCb, "rlcCfgAddDlRb(ueId(%u), cellId(%u), Invalid rguSapId (%d)\n",
591 ueId, cellId, entCfg->rguSapId);
596 /* Process Adding new RB */
599 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
601 /* Fill entCfm structure */
602 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
604 CKW_CFG_REAS_RB_UNKWN);
605 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId,
606 "Invalid RbId ,Max is [%d] CELLID:%d UEID:%d",
613 if (((entCfg->lCh[0].type == CM_LTE_LCH_BCCH) ||
614 (entCfg->lCh[0].type == CM_LTE_LCH_PCCH) ||
615 (entCfg->lCh[0].type == CM_LTE_LCH_CCCH)) &&
616 (entCfg->entMode == CM_LTE_MODE_TM))
618 /* Cell CB present */
619 rlcDbmFetchDlCellCb(gCb, cellId, &cellCb);
622 /* Get rbCb from cellCb->rbCb List */
623 if (( cellCb->rbCb[entCfg->rbId] != NULLP))
625 /* Fill entCfm structure */
626 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
628 CKW_CFG_REAS_RB_PRSNT);
629 RLOG_ARG2(L_WARNING, DBG_CELLID,cellId,
630 "RbId [%d] already exists UEID:%d",
636 else /* Cell CB UNKNOWN */
639 if ( ROK != rlcDbmCreateDlCellCb(gCb,cellId, &cellCb))
641 /* Fill entCfm structure */
642 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
644 CKW_CFG_REAS_CELL_CREAT_FAIL);
645 RLOG_ARG2(L_ERROR,DBG_CELLID,cellId,
646 "cellCb Creation failed RBID:%d UEID:%d",
654 if(entCfg->lCh[0].lChId <= 0)
656 RLOG_ARG3(L_ERROR,DBG_LCID,entCfg->lCh[0].lChId ,
657 "Invalid LcId CELLID:%d UEID:%d RBID:%d",
661 /* Fill entCfm structure */
662 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
663 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
668 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
671 RLOG_ARG2(L_FATAL,DBG_UEID,ueId,
672 "Memory allocation failed for rbId:%d CELLID:%d",
675 /* Fill entCfm structure */
676 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
677 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_CREAT_FAIL);
680 rlcRbCb->rlcId.rbId = entCfg->rbId;
681 cellCb->rbCb[entCfg->rbId] = rlcRbCb;
682 RLC_LMM_RB_STS_INC(gCb);
683 cellCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rlcRbCb;
687 reason= (entCfg->entMode != CM_LTE_MODE_TM)? CKW_CFG_REAS_RB_MODE_MIS:
688 CKW_CFG_REAS_LCHTYPE_MIS;
689 /* Fill entCfm structure */
690 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
691 CKW_CFG_CFM_NOK, reason);
697 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
699 /* Fill entCfm structure */
700 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
701 CKW_CFG_REAS_RB_UNKWN);
702 RLOG_ARG2(L_ERROR,DBG_RBID, entCfg->rbId,
703 "Invalid RbId for RbType[%d] UEID:%d",
708 if ((((entCfg->lCh[0].type == CM_LTE_LCH_DCCH) &&
709 (entCfg->entMode != CM_LTE_MODE_UM) &&
710 (CM_LTE_SRB == entCfg->rbType)) ||
711 ((entCfg->lCh[0].type == CM_LTE_LCH_DTCH) &&
712 (CM_LTE_DRB == entCfg->rbType))) &&
713 (entCfg->entMode != CM_LTE_MODE_TM))
716 if ( rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb) == ROK)
718 /* Get rbCb from ueCb->rbCb list */
719 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
721 if(( rlcRbCb != NULLP))
723 /* Fill entCfm structure */
724 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
725 CKW_CFG_REAS_RB_PRSNT);
726 RLOG_ARG2(L_WARNING, DBG_UEID, ueId,
727 "CellId[%u]:rbId [%d] already exists",
733 else /* UE CB UNKNOWN */
736 if ( rlcDbmCreateDlUeCb(gCb,ueId, cellId, &ueCb) != ROK)
738 /* Fill entCfm structure */
739 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
740 CKW_CFG_REAS_UE_CREAT_FAIL);
741 RLOG_ARG2(L_WARNING, DBG_CELLID,cellId,
742 "UeId [%u]:ueCb Creation Failed RBID:%d",
749 /* Validate LChId for UM and AM modes */
750 if ((entCfg->lCh[0].lChId <= 0) ||
751 ((entCfg->entMode == CM_LTE_MODE_AM)&&
752 (entCfg->lCh[1].lChId <= 0)))
754 /* Fill entCfm structure */
755 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
756 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
761 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
764 /* Fill entCfm structure */
765 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,CKW_CFG_CFM_NOK,
766 CKW_CFG_REAS_RB_CREAT_FAIL);
767 RLOG_ARG2(L_FATAL,DBG_UEID,ueId,
768 "Memory allocation failed RBID:%d CELLID:%d",
774 /* copy the RB Cb into UECb */
775 rlcRbCb->rlcId.rbId = entCfg->rbId;
776 if(entCfg->rbType == CM_LTE_SRB)
777 ueCb->srbCb[entCfg->rbId] = rlcRbCb;
779 ueCb->drbCb[entCfg->rbId] = rlcRbCb;
781 RLC_LMM_RB_STS_INC(gCb);
786 if (entCfg->entMode == CM_LTE_MODE_TM)
788 reason = CKW_CFG_REAS_RB_MODE_MIS;
792 reason = CKW_CFG_REAS_LCHTYPE_MIS;
795 /* Fill entCfm structure */
796 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK, reason);
802 rlcRbCb->rlcId.cellId = cellId;
803 rlcRbCb->rlcId.ueId = ueId;
804 rlcRbCb->rlcId.rbType = entCfg->rbType;
805 rlcRbCb->inst = gCb->init.inst;
806 #ifdef TENB_MULT_CELL_SUPPRT
807 rlcRbCb->rguSapId = entCfg->rguSapId;
812 if (rlcCfgFillDlRbCb(gCb,rlcRbCb, ueCb, entCfg) != ROK)
814 /* Fill entCfm structure */
815 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
816 CKW_CFG_REAS_RB_CREAT_FAIL);
818 /* Delete RB CB created */
819 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
820 RLOG_ARG2(L_ERROR,DBG_RBID, entCfg->rbId,
821 "Filling of RbCb failed UEID:%d CELLID:%d",
826 rlcRbCb->qci = entCfg->qci;
828 rlcRbCb->ueCb = ueCb;
829 if (entCfg->lCh[0].type == CM_LTE_LCH_DTCH)
832 rlcAddToDlL2Meas(gCb, rlcRbCb,cellId,ueId);
834 #endif /* LTE_L2_MEAS */
836 /* Fill entCfm structure */
837 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
845 * This primitive reconfigures the existing RB in Ue/Cell Cb.
848 * This primitive executes following steps in reconfiguration of existing
850 * - If UE ID is 0 then
851 * - Check for CELL CB is present
852 * - If yes, Check for RB ID
853 * - If RB ID is present Reconfigure the RB CB
854 * - Else, Status Indication with Reason
855 * - Else, Status Indication with Reason
857 * - Check for UE CB is present
858 * - If yes, Check for RB ID
859 * - If RB ID is prenset Reconfigure the CELL CB
860 * - Else, Status Indication with Reason
861 * - Else, Status Indication with Reason
862 * - Fill entity confirmation
864 * @param [in] gCb - RLC Instance Control Block
865 * @param [in] ueId - UE Identifier
866 * @param [in] cellId - CELL Identifier
867 * @param [in] entCfg - Entity Configuration to be done.
868 * @param [out] entCfm - Entity Confirmation
880 RlcEntCfgInfo *entCfg,
881 RlcEntCfgCfmInfo *entCfm
884 S16 rlcCfgReCfgDlRb(gCb,ueId, cellId, entCfg, entCfm)
888 RlcEntCfgInfo *entCfg;
889 RlcEntCfgCfmInfo *entCfm;
892 RlcDlRbCb *rbCb; /* RB Control Block */
893 RlcDlRbCb tRbCb; /* KW RB Control Block */
894 RlcDlCellCb *cellCb; /* Cell Control Block */
895 RlcDlUeCb *ueCb; /* Ue Control Block */
898 RLOG_ARG3(L_DEBUG,DBG_UEID,ueId,
899 "rlcCfgReCfgRb(cellId(%d), cfgType(%d)) RBID:%d",
900 cellId, entCfg->cfgType,entCfg->rbId);
903 /* Check for UeCb or CellCb */
906 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
908 /* Fill entCfm structure */
909 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
910 CKW_CFG_REAS_RB_UNKWN);
911 RLOG_ARG3(L_ERROR,DBG_RBID,entCfg->rbId,
912 "Invalid RbId , Max is [%d] UEID:%d CELLID:%d",
919 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
922 /* Fill entCfm structure */
923 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
924 CKW_CFG_REAS_CELL_UNKWN);
925 RLOG_ARG3(L_ERROR,DBG_CELLID,cellId,
926 "CellCb not found ueId:%d RBID:%d CELLID:%d",
934 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rbCb);
938 /* Fill entCfm structure */
939 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
940 CKW_CFG_REAS_RB_UNKWN);
941 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
942 "CELLID:%d RBID:%d not found",
948 /* Take backup of rbCb before updating.
949 * Because in failure case restore original rbCb
951 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
954 ret = rlcCfgUpdateDlRb(gCb,rbCb, cellCb,entCfg);
957 /* Fill entCfm structure */
958 RLC_CFG_FILL_CFG_CFM(entCfm,
964 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
965 "CELLID:%u RBID:%d updation failed",
968 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
975 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
977 /* Fill entCfm structure */
978 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
979 CKW_CFG_REAS_RB_UNKWN);
980 RLOG_ARG3(L_ERROR,DBG_UEID,ueId,
981 "CELLID:%d Invalid RBID:%d for RbType[%d]",
988 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
991 /* Fill entCfm structure */
992 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
993 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
994 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
995 "UEID:%d UeCb not found RBID:%d",
1002 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rbCb);
1006 /* Fill entCfm structure */
1007 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1008 CKW_CFG_REAS_RB_UNKWN);
1009 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1010 "CELLID:%d RBID:%d not found",
1016 /* Take backup of rbCb before updating.
1017 * Because in failure case restore original rbCb
1019 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
1022 ret = rlcCfgUpdateDlRb(gCb,rbCb,ueCb, entCfg);
1023 if (ret != CKW_CFG_REAS_NONE)
1025 /* Fill entCfm structure */
1026 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1028 RLOG_ARG2(L_ERROR,DBG_UEID,ueId,
1029 "CELLID:%d RBID:%d updation failed",
1032 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
1038 /* Fill entCfm structure */
1039 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1046 * @brief This primitive deletes the existing RB in Ue/Cell Cb.
1049 * - If UE ID is 0 then
1050 * - Check for CELL CB is present
1051 * - If yes, Check for RB ID
1052 * - If RB ID is prenset Delete the RB CB
1053 * - If there is no RB CB exist in CELL CB then Delete CELL CB.
1054 * - Else, Status Indication with Reason
1055 * - Else, Status Indication with Reason
1057 * - Check for UE CB is present
1058 * - If yes, Check for RB ID
1059 * - If RB ID is prenset Delete the RB CB
1060 * - If there is no RB CB exist in UE CB then Delete UE CB.
1061 * - Else, Status Indication with Reason
1062 * - Else, Status Indication with Reason
1063 * - Fill entity confirmation
1065 * @param [in] gCb - RLC Instance Control Block
1066 * @param [in] ueId - UE Identifier
1067 * @param [in] cellId - CELL Identifier
1068 * @param [in] entCfg - Entity Configuration to be done.
1069 * @param [out] entCfm - Entity Confirmation
1081 RlcEntCfgInfo *entCfg,
1082 RlcEntCfgCfmInfo *entCfm
1085 S16 rlcCfgDelRb(gCb,ueId, cellId, entCfg, entCfm)
1089 RlcEntCfgInfo *entCfg;
1090 RlcEntCfgCfmInfo *entCfm;
1093 S16 ret; /* Return Value */
1094 RlcDlUeCb *ueCb; /* UE Control Block */
1095 RlcDlCellCb *cellCb; /* UE Control Block */
1096 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
1098 RLOG_ARG3(L_DEBUG,DBG_UEID,ueId,
1099 "rlcCfgDelRb(RBID(%d), cellId(%d), cfgType(%d))",
1106 /* Get cellCb and delete rbCb from it */
1109 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
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_ARG3(L_ERROR,DBG_RBID,entCfg->rbId ,
1115 "Invalid RbId, Max is [%d] UEID:%d CELLID:%d",
1116 RLC_MAX_RB_PER_CELL,
1122 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1125 /* Fill entCfm structure */
1126 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1127 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1128 RLOG_ARG2(L_ERROR,DBG_CELLID,cellId,
1129 "CellCb not found UEID:%d RBID:%d",
1136 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rlcRbCb);
1138 if ( rlcRbCb == NULLP)
1140 /* Fill entCfm structure */
1141 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1142 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1143 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1144 "CellId[%u]:RbId[%d] not found",
1150 /* Assign NULLP to rbCb in rbCbLst */
1151 cellCb->rbCb[entCfg->rbId] = NULLP;
1153 /* Assign NULLP to dlRbCb/ulRbCb.
1154 * Delete Hashlist allocated for it if any */
1155 cellCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1156 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb)); /*Vartika: Mem leak fix */
1158 /* Get ueCb and delete rbCb from it */
1161 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
1163 /* Fill entCfm structure */
1164 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1165 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1166 RLOG_ARG3(L_ERROR,DBG_RBID, entCfg->rbId,
1167 "Invalid RbId for RbType[%d] UEID:%d CELLID:%d",
1175 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1178 /* Fill entCfm structure */
1179 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1180 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1181 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
1182 "UeId [%d]: UeCb not found RBID:%d",
1189 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
1191 if ( rlcRbCb == NULLP)
1193 /* Fill entCfm structure */
1194 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1195 CKW_CFG_REAS_RB_UNKWN);
1196 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1197 "CellId[%u]:RbId[%d] not found",
1203 ueCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1206 RLC_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(gCb, rlcRbCb);
1208 /* Free the Buffers of RbCb */
1209 if( CM_LTE_MODE_UM == rlcRbCb->mode)
1211 rlcUmmFreeDlRbCb(gCb,rlcRbCb);
1213 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
1215 else if( CM_LTE_MODE_AM == rlcRbCb->mode)
1217 rlcAmmFreeDlRbCb(gCb,rlcRbCb);
1220 /* Assign NULLP to rbCb in rbCbLst */
1221 if ( entCfg->rbType == CM_LTE_SRB )
1223 ueCb->srbCb[entCfg->rbId] = NULLP;
1227 ueCb->drbCb[entCfg->rbId] = NULLP;
1231 RLC_LMM_RB_STS_DEC(gCb);
1233 /* Fill entCfm structure */
1234 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1242 * @brief This primitive re-establish the existing RB in Ue/Cell Cb.
1245 * - If UE ID is 0 then
1246 * - Check for CELL CB is present
1247 * - If yes, Check for RB ID
1248 * - If RB ID is prenset initialize the parameters of the RB CB
1249 * - Else, Status Indication with Reason
1250 * - Else, Status Indication with Reason
1252 * - Check for UE CB is present
1253 * - If yes, Check for RB ID
1254 * - If RB ID is prenset initialize the parameters of the RB CB
1255 * - Else, Status Indication with Reason
1256 * - Else, Status Indication with Reason
1257 * - Fill entity confirmation
1259 * @param [in] gCb - RLC Instance Control Block
1260 * @param [in] ueId - UE Identifier
1261 * @param [in] cellId - CELL Identifier
1262 * @param [in] entCfg - Entity Configuration to be done.
1263 * @param [out] entCfm - Entity Confirmation
1276 RlcEntCfgInfo *entCfg,
1277 RlcEntCfgCfmInfo *entCfm
1280 S16 rlcCfgReEstDlRb(gCb,ueId, cellId,sndReEstInd,entCfg, entCfm)
1285 RlcEntCfgInfo *entCfg;
1286 RlcEntCfgCfmInfo *entCfm;
1289 RlcDlRbCb *rbCb; /* RB Control Block */
1290 CmLteRlcId rlcId; /* RLC Identifier */
1292 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
1293 "rlcCfgReEstDlRb(ueId(%d), cellId(%d), cfgType(%d))",
1300 rlcId.cellId = cellId;
1301 rlcId.rbId = entCfg->rbId;
1302 rlcId.rbType = entCfg->rbType;
1304 rlcDbmFetchDlRbCbByRbId(gCb,&rlcId, &rbCb);
1307 /* Fill entCfm structure */
1308 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, rlcId.rbType, CKW_CFG_CFM_NOK,
1309 CKW_CFG_REAS_RB_UNKWN);
1310 RLOG_ARG2(L_ERROR, DBG_UEID,ueId,
1311 "CellId[%u]:RbId[%d] not found",
1317 rbCb->rlcId.ueId = ueId;
1321 case CM_LTE_MODE_TM:
1323 rlcDlTmmReEstablish(gCb,rbCb);
1327 case CM_LTE_MODE_UM:
1329 rlcDlUmmReEstablish(gCb,rlcId,sndReEstInd,rbCb);
1333 case CM_LTE_MODE_AM:
1335 rlcAmmDlReEstablish(gCb, rlcId, rbCb);
1340 /* Fill entCfm structure */
1341 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1342 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1349 * @brief This primitive deletes the RBs in Ue Cb.
1352 * - If UE ID is 0 then
1353 * - Status Indication with Reason
1355 * - Check for UE CB is present
1356 * - If yes, Delete all RB CB in UE CB and Delete UE CB also.
1357 * - Else, Status Indication with Reason
1358 * - Fill entity confirmation
1360 * @param [in] gCb - RLC Instance Control Block
1361 * @param [in] ueId - UE Identifier
1362 * @param [in] cellId - CELL Identifier
1363 * @param [in] entCfg - Entity Configuration to be done.
1364 * @param [out] entCfm - Entity Confirmation
1376 RlcEntCfgInfo *entCfg,
1377 RlcEntCfgCfmInfo *entCfm
1380 S16 rlcCfgDelDlUe(ueId, cellId, entCfg, entCfm)
1384 RlcEntCfgInfo *entCfg;
1385 RlcEntCfgCfmInfo *entCfm;
1388 S16 ret; /* Return Value */
1389 RlcDlUeCb *ueCb; /* UE Control Block */
1391 RLOG_ARG3(L_DEBUG,DBG_RBID,entCfg->rbId,
1392 "rlcCfgDelUe(ueId(%d), cellId(%d), cfgType(%d))",
1399 /* Check for ueId is present or not */
1402 /* Fill entCfm structure */
1403 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1404 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1405 RLOG_ARG2(L_ERROR,DBG_RBID,entCfg->rbId,
1406 "ueId(%d), cellId(%d)",
1413 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1416 /* Fill entCfm structure */
1417 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1418 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1419 RLOG_ARG2(L_ERROR,DBG_CELLID, cellId,
1420 "UEID:%d UeCb not found RBID:%d",
1427 rlcDelFrmDlL2Meas(gCb,cellId,ueId);
1428 rlcDbmDelAllDlL2MeasTbFrmUe(gCb,ueCb);
1431 rlcDbmDelDlUeCb(gCb,ueCb, FALSE);
1433 /* Fill entCfm structure */
1434 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1435 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1442 * @brief This primitive deletes the RBs in Ue Cb.
1445 * - If CELL ID is 0 then
1446 * - Status Indication with Reason
1448 * - Check for CELL CB is present
1449 * - If yes, Delete all RB CB in CELL CB and Delete CELL CB also.
1450 * - Else, Status Indication with Reason
1451 * - Fill entity confirmation
1453 * @param [in] cellId - CELL Identifier
1454 * @param [in] entCfg - Entity Configuration to be done.
1455 * @param [out] entCfm - Entity Confirmation
1466 RlcEntCfgInfo *entCfg,
1467 RlcEntCfgCfmInfo *entCfm
1470 S16 rlcCfgDelCell(gCb,cellId, entCfg, entCfm)
1473 RlcEntCfgInfo *entCfg;
1474 RlcEntCfgCfmInfo *entCfm;
1477 RlcDlCellCb *cellCb; /* UE Control Block */
1478 uint8_t rbId; /* RB Identifier */
1480 RLOG_ARG2(L_DEBUG,DBG_RBID,entCfg->rbId,
1481 "rlcCfgDelCell( cellId(%d), cfgType(%d)",
1486 rbId = entCfg->rbId;
1488 /* Check for ueId is present or not */
1491 /* Fill entCfm structure */
1492 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1493 CKW_CFG_REAS_CELL_UNKWN);
1494 RLOG_ARG1(L_DEBUG,DBG_RBID,entCfg->rbId,
1495 "cellId is 0 (%d) ",
1501 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1504 /* Fill entCfm structure */
1505 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1506 CKW_CFG_REAS_CELL_UNKWN);
1507 RLOG_ARG1(L_ERROR, DBG_CELLID,cellId,
1508 "CellCb not found for RBID:%d",
1514 rlcDbmDelDlCellCb(gCb,cellCb);
1516 /* Fill entCfm structure */
1517 /* kw005.201 added support for L2 Measurement */
1518 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1525 * @brief This primitive changes the ueId of Ue Cb.
1528 * - If oldUeId and newUeId are
1529 * - Confirm the Status with Reason
1530 * - If UeId not present
1531 * - Confirm the Status with Reason
1533 * - Copy rbCbs from old UeCb to new UeCb
1535 * - Fill entity confirmation
1537 * @param [in] ueInfo - Old UE Information
1538 * @param [in] newUeInfo - New UE Information
1539 * @param [out] status - Status
1546 S16 rlcCfgDlUeIdChng
1550 CkwUeInfo *newUeInfo,
1554 S16 rlcCfgDlUeIdChng(gCb,ueInfo,newUeInfo,status)
1557 CkwUeInfo *newUeInfo;
1562 /*kw004.201 Adding of Missing Trace in LTE RLC PDCP*/
1564 if ( (ueInfo->ueId == newUeInfo->ueId) &&
1565 (ueInfo->cellId == newUeInfo->cellId))
1567 status->reason = CKW_CFG_REAS_SAME_UEID;
1568 status->status = CKW_CFG_CFM_NOK;
1569 RLOG_ARG2(L_ERROR,DBG_CELLID,ueInfo->cellId,
1570 "Old UeId[%d] same as new UeId[%d]",
1576 if(ROK == rlcDbmFetchDlUeCb(gCb,newUeInfo->ueId, newUeInfo->cellId, &ueCb))
1578 RLOG_ARG1(L_ERROR, DBG_CELLID, newUeInfo->cellId,
1579 "NewUeId[%d]:ueCb already exists",
1581 status->reason = CKW_CFG_REAS_UE_EXISTS;
1582 status->status = CKW_CFG_CFM_NOK;
1586 if(ROK != rlcDbmFetchDlUeCb(gCb,ueInfo->ueId, ueInfo->cellId, &ueCb))
1589 RLOG_ARG1(L_ERROR,DBG_CELLID,ueInfo->cellId,
1590 "UeId [%d]: UeCb not found",
1592 status->reason = CKW_CFG_REAS_UE_UNKWN;
1593 status->status = CKW_CFG_CFM_NOK;
1598 rlcHdlMeasDlUeIdChg(gCb, ueInfo->cellId, ueInfo->ueId, newUeInfo->ueId);
1600 if(ROK != cmHashListDelete(&(gCb->u.dlCb->ueLstCp), (PTR) ueCb))
1602 RLOG_ARG1(L_ERROR,DBG_CELLID,ueInfo->cellId,
1603 "UeId[%u] HashList Deletion Failed",
1605 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1606 status->status = CKW_CFG_CFM_NOK;
1610 /* update the hash key with new values */
1611 ueCb->ueId = newUeInfo->ueId;
1612 ueCb->cellId = newUeInfo->cellId;
1614 if(ROK != cmHashListInsert(&(gCb->u.dlCb->ueLstCp),
1615 (PTR)ueCb, (uint8_t *)&(ueCb->ueId),
1616 (uint16_t) sizeof(CmLteRnti)))
1619 RLOG_ARG1(L_ERROR,DBG_CELLID,newUeInfo->cellId,
1620 "UeId[%u] HashList Insertion Failed",
1622 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1623 status->status = CKW_CFG_CFM_NOK;
1630 /********************************************************************30**
1633 **********************************************************************/