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 /************************************************************************
25 Desc: C source code for Entry point fucntions
29 **********************************************************************/
31 /** @file rg_sch_dbm.c
32 @brief This file contains the APIs exposed for the database handling of the scheduler.
34 static const char* RLOG_MODULE_NAME="MAC";
35 static int RLOG_FILE_ID=230;
36 static int RLOG_MODULE_ID=4096;
37 /* header include files -- defines (.h) */
38 #include "envopt.h" /* environment options */
39 #include "envdep.h" /* environment dependent */
40 #include "envind.h" /* environment independent */
41 #include "gen.h" /* general layer */
42 #include "ssi.h" /* system service interface */
43 #include "cm_hash.h" /* common hash list */
44 #include "cm_mblk.h" /* common memory link list library */
45 #include "cm_llist.h" /* common linked list library */
46 #include "cm_err.h" /* common error */
47 #include "cm_lte.h" /* common LTE */
52 #include "rg_sch_err.h"
53 #include "rg_sch_inf.h"
55 #include "rg_sch_cmn.h"
57 /* header/extern include files (.x) */
58 #include "gen.x" /* general layer */
59 #include "ssi.x" /* system service interface */
60 #include "cm5.x" /* common timers */
61 #include "cm_lib.x" /* common library */
62 #include "cm_hash.x" /* common hash list */
63 #include "cm_mblk.x" /* common memory link list library */
64 #include "cm_llist.x" /* common linked list library */
65 #include "cm_tkns.x" /* common tokens */
66 #include "cm_lte.x" /* common LTE */
70 #include "rgm.x" /* layer management typedefs for MAC */
71 #include "rg_sch_inf.x"
73 #include "rg_sch_cmn.x"
74 #include "rl_interface.h"
75 #include "rl_common.h"
79 PRIVATE S16 rgSCHDbmInitUeCbLst ARGS(( RgSchCellCb *cellCb, U16 numBins));
81 PRIVATE S16 rgSCHDbmInitUeTfuPendLst ARGS(( RgSchCellCb *cellCb, U16 numBins));
83 PRIVATE Void rgSCHDbmInitDedLcLst ARGS((RgSchUeCb *ueCb));
84 PRIVATE Void rgSCHDbmInitCmnLcLst ARGS((RgSchCellCb *cellCb));
86 PRIVATE S16 rgSCHDbmInitSpsUeCbLst ARGS((RgSchCellCb *cellCb,
89 PRIVATE Void rgSCHDbmInitRaCbLst ARGS(( RgSchCellCb *cellCb));
91 PRIVATE Void rgSCHDbmInitRaReqLst ARGS(( RgSchCellCb *cellCb));
93 PRIVATE Void rgSCHDbmInitCrntRgrCfgLst ARGS(( RgSchCellCb *cellCb));
94 PRIVATE Void rgSCHDbmInitPndngRgrCfgLst ARGS(( RgSchCellCb *cellCb));
97 PUBLIC S16 rgSCHDbmPutEmtcRnti ARGS((RgSchCellCb *cellCb,RgSchRntiLnk *rntiLnk));
104 /* forward references */
107 * @brief Handler for Initializing the cell.
111 * Function : rgSCHDbmInitCell
113 * Initializes the lists belonging to the cell.
116 * @param[in] RgSchCellCb *cellCb
122 PUBLIC S16 rgSCHDbmInitCell
127 PUBLIC S16 rgSCHDbmInitCell(cellCb)
133 TRC2(rgSCHDbmInitCell);
135 /* Initialize ue list */
136 if ((ret = rgSCHDbmInitUeCbLst(cellCb, RGSCH_MAX_UE_BIN_PER_CELL)) != ROK)
139 if ((ret = rgSCHDbmInitUeTfuPendLst(cellCb,
140 RGSCH_MAX_UE_BIN_PER_CELL)) != ROK)
145 /* Initialize SPS Ue list */
146 if ((ret = rgSCHDbmInitSpsUeCbLst(cellCb, RGSCH_MAX_UE_BIN_PER_CELL)) != ROK)
148 #endif /* LTEMAC_SPS */
150 /* Initialize BCCH/PCCH logical channels */
151 rgSCHDbmInitCmnLcLst(cellCb);
153 /* Initialize configuration lists */
154 rgSCHDbmInitCrntRgrCfgLst(cellCb);
155 rgSCHDbmInitPndngRgrCfgLst(cellCb);
158 /* Initialize raReq list */
159 rgSCHDbmInitRaReqLst(cellCb);
162 /* Initialize raCb list */
163 rgSCHDbmInitRaCbLst(cellCb);
165 /* Initialize l2mList */
167 cmLListInit(&cellCb->l2mList);
168 #endif /* LTE_L2_MEAS */
172 } /* rgSCHDbmInitCell */
175 * @brief Handler for initializing the ueCbLst under the cellCb.
179 * Function : rgSCHDbmInitUeCbLst
189 PRIVATE S16 rgSCHDbmInitUeCbLst
195 PRIVATE S16 rgSCHDbmInitUeCbLst(cellCb, numBins)
200 RgSchUeCellInfo ueCellInfo;
201 TRC2(rgSCHDbmInitUeCbLst)
203 /* Fix: syed It is better to compute offset dynamically
204 * rather than hardcoding it as 0 */
205 RETVALUE(cmHashListInit(&cellCb->ueLst, numBins, (U16)((PTR)&(ueCellInfo.ueLstEnt) - (PTR)&ueCellInfo), FALSE,
206 CM_HASH_KEYTYPE_CONID,
207 rgSchCb[cellCb->instIdx].rgSchInit.region,
208 rgSchCb[cellCb->instIdx].rgSchInit.pool));
210 } /* rgSCHDbmInitUeCbLst */
213 * @brief Handler for de-initializing the ueCbLst under the cellCb.
217 * Function : rgSCHDbmDeInitUeCbLst
226 PUBLIC S16 rgSCHDbmDeInitUeCbLst
231 PUBLIC S16 rgSCHDbmDeInitUeCbLst(cellCb)
235 TRC2(rgSCHDbmDeInitUeCbLst)
237 RETVALUE(cmHashListDeinit(&cellCb->ueLst));
239 } /* rgSCHDbmDeInitUeCbLst */
243 * @brief Handler for initializing the spsUeCbLst under the cellCb.
247 * Function : rgSCHDbmInitSpsUeCbLst
257 PRIVATE S16 rgSCHDbmInitSpsUeCbLst
263 PRIVATE S16 rgSCHDbmInitSpsUeCbLst(cellCb, numBins)
269 TRC2(rgSCHDbmInitSpsUeCbLst)
271 RETVALUE(cmHashListInit(&cellCb->spsUeLst, numBins, (U16) ((PTR) &(ue.spsUeLstEnt) - (PTR) &ue), FALSE,
272 CM_HASH_KEYTYPE_CONID,
273 rgSchCb[cellCb->instIdx].rgSchInit.region,
274 rgSchCb[cellCb->instIdx].rgSchInit.pool));
276 } /* rgSCHDbmInitSpsUeCbLst */
279 * @brief Handler for de-initializing the spsUeCbLst under the cellCb.
283 * Function : rgSCHDbmDeInitSpsUeCbLst
292 PUBLIC S16 rgSCHDbmDeInitSpsUeCbLst
297 PUBLIC S16 rgSCHDbmDeInitSpsUeCbLst(cellCb)
301 TRC2(rgSCHDbmDeInitSpsUeCbLst)
303 RETVALUE(cmHashListDeinit(&cellCb->spsUeLst));
305 } /* rgSCHDbmDeInitSpsUeCbLst */
307 #endif /* LTEMAC_SPS */
310 * @brief Handler for inserting the ueCb in to the ueCbLst under the cellCb.
314 * Function : rgSCHDbmInsUeCb
324 PUBLIC S16 rgSCHDbmInsUeCb
330 PUBLIC S16 rgSCHDbmInsUeCb(cellCb, ueCb)
335 RgSchUeCellInfo *ueCellInfo = NULLP;
336 TRC2(rgSCHDbmInsUeCb)
338 ueCellInfo = ueCb->cellInfo[ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cellCb)]];
340 RETVALUE(cmHashListInsert(&cellCb->ueLst, (PTR)ueCellInfo,
341 (U8 *)&ueCb->ueId, (U16)sizeof(ueCb->ueId)));
343 } /* rgSCHDbmInsUeCb */
347 * @brief Handler for inserting the ueCb in to the spsUeCbLst under the cellCb.
351 * Function : rgSCHDbmInsSpsUeCb
361 PUBLIC S16 rgSCHDbmInsSpsUeCb
367 PUBLIC S16 rgSCHDbmInsSpsUeCb(cellCb, ueCb)
372 TRC2(rgSCHDbmInsSpsUeCb)
374 RETVALUE(cmHashListInsert(&cellCb->spsUeLst, (PTR)ueCb,
375 (U8 *)&ueCb->spsRnti, (U16)sizeof(ueCb->spsRnti)));
377 } /* end of rgSCHDbmInsSpsUeCb */
379 #endif /* LTEMAC_SPS */
382 * @brief Handler for accessing the existing ueCb identified by the key ueId
383 * in the ueCbLst under the cellCb.
387 * Function : rgSCHDbmGetUeCb
395 PUBLIC RgSchUeCb* rgSCHDbmGetUeCb
401 PUBLIC RgSchUeCb* rgSCHDbmGetUeCb(cellCb, ueId)
406 RgSchUeCellInfo *ueCellInfo = NULLP;
408 TRC2(rgSCHDbmGetUeCb)
410 cmHashListFind(&cellCb->ueLst, (U8 *)&ueId,
411 sizeof(ueId), 0, (PTR *)&ueCellInfo);
413 RETVALUE(!ueCellInfo?NULLP:ueCellInfo->ue);
414 } /* rgSCHDbmGetUeCb */
418 * @brief Handler for accessing the existing ueCb identified by the key
419 * spsRnti in the spsUeCbLst under the cellCb.
423 * Function : rgSCHDbmGetSpsUeCb
431 PUBLIC RgSchUeCb* rgSCHDbmGetSpsUeCb
437 PUBLIC RgSchUeCb* rgSCHDbmGetSpsUeCb(cellCb, spsRnti)
442 RgSchUeCb *ueCb = NULLP;
444 TRC2(rgSCHDbmGetSpsUeCb)
446 cmHashListFind(&cellCb->spsUeLst, (U8 *)&spsRnti,
447 sizeof(spsRnti), 0, (PTR *)&ueCb);
449 } /* rgSCHDbmGetSpsUeCb */
453 * @brief Handler for accessing the existing next ueCb in the ueCbLst under the
458 * Function : rgSCHDbmGetNextUeCb
466 PUBLIC RgSchUeCb* rgSCHDbmGetNextUeCb
472 PUBLIC RgSchUeCb* rgSCHDbmGetNextUeCb(cellCb, ueCb)
477 RgSchUeCellInfo *ueCellInfo = NULLP;
478 RgSchUeCellInfo *nextUeCellInfo = NULLP;
480 TRC2(rgSCHDbmGetNextUeCb)
484 ueCellInfo = ueCb->cellInfo[
485 ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cellCb)]];
488 cmHashListGetNext(&cellCb->ueLst, (PTR) ueCellInfo, (PTR *)&nextUeCellInfo);
489 RETVALUE(!nextUeCellInfo?NULLP:nextUeCellInfo->ue);
490 } /* rgSCHDbmGetNextUeCb */
494 * @brief Handler for accessing the existing next ueCb stored in the spsUeCbLst
495 * using SPS-Rnti under the cellCb.
499 * Function : rgSCHDbmGetNextSpsUeCb
507 PUBLIC RgSchUeCb* rgSCHDbmGetNextSpsUeCb
513 PUBLIC RgSchUeCb* rgSCHDbmGetNextSpsUeCb(cellCb, ueCb)
518 RgSchUeCb *nextUeCb = NULLP;
520 TRC2(rgSCHDbmGetNextSpsUeCb)
522 cmHashListGetNext(&cellCb->spsUeLst, (PTR) ueCb, (PTR *)&nextUeCb);
524 } /* end of rgSCHDbmGetNextSpsUeCb */
526 #endif /* LTEMAC_SPS */
530 * @brief Handler for Cleaning up L2 Meas related Data in
535 * Function : rgSCHDbmDelL2MUe
545 PUBLIC S16 rgSCHDbmDelL2MUe
551 PUBLIC S16 rgSCHDbmDelL2MUe(cellCb, ueCb)
557 RgSchCmnUlUe *ueUl = RG_SCH_CMN_GET_UL_UE(ueCb, cellCb);
559 TRC2(rgSCHDbmDelL2MUe)
561 ueUl->hqEnt.numBusyHqProcs = 0;
562 /* Clean cell level UE Active Count */
563 for (lcCnt =0; lcCnt < RGSCH_MAX_LC_PER_UE; lcCnt++)
565 if (ueCb->ul.lcCb[lcCnt].isValid)
567 if((ueCb->ul.lcCb[lcCnt].qciCb->ulUeCount) &&
569 (1 << (ueCb->ul.lcCb[lcCnt].qciCb->qci -1))))
571 ueCb->ul.lcCb[lcCnt].qciCb->ulUeCount--;
572 ueCb->ulActiveLCs &= ~(1 <<
573 (ueCb->ul.lcCb[lcCnt].qciCb->qci -1));
577 if (ueCb->dl.lcCb[lcCnt])
579 if (ueCb->qciActiveLCs[ueCb->dl.lcCb[lcCnt]->qciCb->qci])
581 ueCb->dl.lcCb[lcCnt]->qciCb->dlUeCount--;
582 ueCb->qciActiveLCs[ueCb->dl.lcCb[lcCnt]->qciCb->qci] = 0;
588 } /* rgSCHDbmDelL2MUe */
593 * @brief Handler for deleting the existing ueCb from the ueCbLst under the
598 * Function : rgSCHDbmDelUeCb
608 PUBLIC S16 rgSCHDbmDelUeCb
614 PUBLIC S16 rgSCHDbmDelUeCb(cellCb, ueCb)
619 RgSchUeCellInfo *ueCellInfo = NULLP;
620 TRC2(rgSCHDbmDelUeCb)
622 ueCellInfo = ueCb->cellInfo[ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cellCb)]];
624 RETVALUE(cmHashListDelete(&cellCb->ueLst, (PTR)ueCellInfo));
625 } /* rgSCHDbmDelUeCb */
629 * @brief Handler for deleting the existing ueCb from the spsUeCbLst under the
634 * Function : rgSCHDbmDelSpsUeCb
644 PUBLIC S16 rgSCHDbmDelSpsUeCb
650 PUBLIC S16 rgSCHDbmDelSpsUeCb(cellCb, ueCb)
655 TRC2(rgSCHDbmDelSpsUeCb)
657 RETVALUE(cmHashListDelete(&cellCb->spsUeLst, (PTR)ueCb));
658 } /* end of rgSCHDbmDelSpsUeCb */
660 #endif /* LTEMAC_SPS */
663 * @brief Handler for Initializing the UE.
667 * Function : rgSCHDbmInitUe
669 * Initializes the lists belonging to the UE.
672 * @param[in] RgSchUeCb *ueCb
678 PUBLIC S16 rgSCHDbmInitUe
683 PUBLIC S16 rgSCHDbmInitUe(ueCb)
689 TRC2(rgSCHDbmInitUe);
691 /* Initialize Dedicated logical channels */
692 rgSCHDbmInitDedLcLst(ueCb);
695 } /* rgSCHDbmInitUe */
698 * @brief Handler for Initializing the dedicated logical channels.
702 * Function : rgSCHDbmInitDedLcLst
704 * Initializes dedicated logical channels.
706 * @param[in] RgSchUeCb *ueCb
710 PRIVATE Void rgSCHDbmInitDedLcLst
715 PRIVATE Void rgSCHDbmInitDedLcLst(ueCb)
721 TRC2(rgSCHDbmInitDedLcLst);
723 for (idx = 0; idx < RGSCH_MAX_LC_PER_UE; ++idx)
725 /* Set Dedicated LCs as not configured */
726 ueCb->ul.lcCb[idx].isValid = FALSE;
727 ueCb->dl.lcCb[idx] = NULLP;
730 /* Stack Crash problems for TRACE5 Changes. Added the return below */
734 } /* rgSCHDbmInitDedLcLst */
737 * @brief Handler for Initializing the common logical channel list of the cell.
741 * Function : rgSCHDbmInitCmnLcLst
743 * Initializes following common logical channels belonging to the cell.
748 * @param[in] RgSchCellCb *cellCb
752 PRIVATE Void rgSCHDbmInitCmnLcLst
757 PRIVATE Void rgSCHDbmInitCmnLcLst(cellCb)
763 TRC2(rgSCHDbmInitCmnLcLst);
765 for (idx = 0; idx < RGSCH_MAX_CMN_LC_CB; idx++)
767 cellCb->cmnLcCb[idx].lcId = RGSCH_INVALID_LC_ID;
770 /* Stack Crash problems for TRACE5 Changes. Added the return below */
773 } /* rgSCHDbmInitCmnLcLst */
776 * @brief Handler for inserting dedicated DL logical channel.
780 * Function : rgSCHDbmInsDlDedLcCb
782 * @param[in] RgSchUeCb *ueCb
783 * @param[in] RgSchDlLcCb* dlLcCb
787 PUBLIC Void rgSCHDbmInsDlDedLcCb
793 PUBLIC Void rgSCHDbmInsDlDedLcCb(ueCb, dlLcCb)
798 TRC2(rgSCHDbmInsDlDedLcCb);
800 ueCb->dl.lcCb[dlLcCb->lcId - 1] = dlLcCb;
802 } /* rgSCHDbmInsDlDedLcCb */
805 * @brief Handler for deleting dedicated DL logical channel.
809 * Function : rgSCHDbmDelDlDedLcCb
811 * @param[in] RgSchUeCb *ueCb
812 * @param[in] RgSchDlLcCb* dlLcCb
816 PUBLIC Void rgSCHDbmDelDlDedLcCb
822 PUBLIC Void rgSCHDbmDelDlDedLcCb(ueCb, dlLcCb)
827 TRC2(rgSCHDbmDelDlDedLcCb);
830 /* Clean cell level UE Active Count */
832 if (ueCb->dl.lcCb[dlLcCb->lcId - 1])
835 && (ueCb->qciActiveLCs[dlLcCb->qciCb->qci]))
837 ueCb->qciActiveLCs[dlLcCb->qciCb->qci]--;
838 if (!(ueCb->qciActiveLCs[dlLcCb->qciCb->qci]))
840 dlLcCb->qciCb->dlUeCount--;
844 #endif /* LTE_L2_MEAS */
846 ueCb->dl.lcCb[dlLcCb->lcId - 1] = NULLP;
848 /* Stack Crash problems for TRACE5 Changes. Added the return below */
851 } /* rgSCHDbmDelDlDedLcCb */
854 * @brief Handler for accessing the existing dl dedicated lcCb at idx in the
855 * lcCbLst of the ueCb.
859 * Function : rgSCHDbmGetDlDedLcCb
863 * @return RgSchDlLcCb*
866 PUBLIC RgSchDlLcCb* rgSCHDbmGetDlDedLcCb
872 PUBLIC RgSchDlLcCb* rgSCHDbmGetDlDedLcCb(ueCb, idx)
877 TRC2(rgSCHDbmGetDlDedLcCb);
879 if (idx < RGSCH_DEDLC_MIN_LCID || idx > RGSCH_DEDLC_MAX_LCID)
883 RETVALUE(ueCb->dl.lcCb[idx-1]);
885 } /* rgSCHDbmGetDlDedLcCb */
888 * @brief Handler for accessing the existing first dl dedicated lcCb at idx
889 * in the lcCbLst of the ueCb.
893 * Function : rgSCHDbmGetFirstDlDedLcCb
897 * @return RgSchDlLcCb*
900 PUBLIC RgSchDlLcCb* rgSCHDbmGetFirstDlDedLcCb
905 PUBLIC RgSchDlLcCb* rgSCHDbmGetFirstDlDedLcCb(ueCb)
910 TRC2(rgSCHDbmGetFirstDlDedLcCb)
912 for(idx = 0; idx < RGSCH_DEDLC_MAX_LCID; idx++)
914 if(ueCb->dl.lcCb[idx])
916 RETVALUE(ueCb->dl.lcCb[idx]);
920 } /* rgSCHDbmGetFirstDlDedLcCb */
922 * @brief Handler for accessing the existing next dl dedicated lcCb at idx
923 * in the lcCbLst of the ueCb.
927 * Function : rgSCHDbmGetNextDlDedLcCb
932 * @return RgSchDlLcCb*
935 PUBLIC RgSchDlLcCb* rgSCHDbmGetNextDlDedLcCb
941 PUBLIC RgSchDlLcCb* rgSCHDbmGetNextDlDedLcCb(ueCb, lcCb)
947 TRC2(rgSCHDbmGetNextDlDedLcCb);
951 RETVALUE(rgSCHDbmGetFirstDlDedLcCb(ueCb));
954 for(idx = lcCb->lcId; idx < RGSCH_DEDLC_MAX_LCID; idx++)
956 if(ueCb->dl.lcCb[idx])
958 RETVALUE(ueCb->dl.lcCb[idx]);
962 } /* rgSCHDbmGetNextDlDedLcCb */
965 * @brief Handler for accessing the existing dl common lcCb identified by the key lcId
966 * in the lcCbLst of the ueCb.
970 * Function : rgSCHDbmGetCmnLcCb
975 * @return RgSchClcDlLcCb*
978 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetCmnLcCb
984 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetCmnLcCb(cellCb, lcId)
991 TRC2(rgSCHDbmGetCmnLcCb)
993 for(idx = 0; idx < RGSCH_MAX_CMN_LC_CB; idx++)
995 if(cellCb->cmnLcCb[idx].lcId == lcId)
997 RETVALUE(&(cellCb->cmnLcCb[idx]));
1001 } /* rgSCHDbmGetCmnLcCb */
1004 * @brief Handler for accessing the existing BCCH mapped on to BCH in the
1005 * lcCbLst of the ueCb.
1009 * Function : rgSCHDbmGetBcchOnBch
1012 * @param[in] *cellCb
1013 * @return RgSchClcDlLcCb*
1016 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetBcchOnBch
1021 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetBcchOnBch(cellCb)
1022 RgSchCellCb *cellCb;
1025 TRC2(rgSCHDbmGetBcchOnBch)
1027 if(cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX].lcId != RGSCH_INVALID_LC_ID)
1029 RETVALUE(&(cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX]));
1032 } /* rgSCHDbmGetBcchOnBch */
1035 * @brief Handler for accessing the existing BCCH mapped on to DLSCH in the
1036 * lcCbLst of the ueCb.
1040 * Function : rgSCHDbmGetFirstBcchOnDlsch
1043 * @param[in] *cellCb
1044 * @return RgSchClcDlLcCb*
1047 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetFirstBcchOnDlsch
1052 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetFirstBcchOnDlsch(cellCb)
1053 RgSchCellCb *cellCb;
1056 TRC2(rgSCHDbmGetFirstBcchOnDlsch)
1058 if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].lcId != RGSCH_INVALID_LC_ID)
1060 RETVALUE(&(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1]));
1063 } /* rgSCHDbmGetFirstBcchOnDlsch */
1066 * @brief Handler for accessing the existing BCCH mapped on to DLSCH in the
1067 * lcCbLst of the ueCb.
1071 * Function : rgSCHDbmGetSecondBcchOnDlsch
1074 * @param[in] *cellCb
1075 * @return RgSchClcDlLcCb*
1078 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetSecondBcchOnDlsch
1083 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetSecondBcchOnDlsch(cellCb)
1084 RgSchCellCb *cellCb;
1087 TRC2(rgSCHDbmGetSecondBcchOnDlsch)
1089 if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].lcId != RGSCH_INVALID_LC_ID)
1091 RETVALUE(&(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2]));
1094 } /* rgSCHDbmGetSecondBcchOnDlsch */
1097 * @brief Handler for accessing the existing PCCH in the lcCbLst of the ueCb.
1101 * Function : rgSCHDbmGetPcch
1104 * @param[in] *cellCb
1105 * @return RgSchClcDlLcCb*
1108 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetPcch
1113 PUBLIC RgSchClcDlLcCb* rgSCHDbmGetPcch(cellCb)
1114 RgSchCellCb *cellCb;
1117 TRC2(rgSCHDbmGetPcch)
1119 if(cellCb->cmnLcCb[RGSCH_PCCH_IDX].lcId != RGSCH_INVALID_LC_ID)
1121 RETVALUE(&(cellCb->cmnLcCb[RGSCH_PCCH_IDX]));
1124 } /* rgSCHDbmGetPcch */
1127 * @brief Handler for inserting the BCCH mapped on to BCH in the
1128 * lcCbLst of the ueCb.
1132 * Function : rgSCHDbmInsBcchOnBch
1135 * @param[in] *cellCb
1139 PUBLIC Void rgSCHDbmInsBcchOnBch
1141 RgSchCellCb *cellCb,
1142 RgSchClcDlLcCb *cmnDlLcCb
1145 PUBLIC Void rgSCHDbmInsBcchOnBch(cellCb, cmnDlLcCb)
1146 RgSchCellCb *cellCb;
1147 RgSchClcDlLcCb *cmnDlLcCb;
1150 TRC2(rgSCHDbmInsBcchOnBch)
1152 cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX].lcId = cmnDlLcCb->lcId;
1153 cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX].boLst = cmnDlLcCb->boLst;
1155 /* Stack Crash problems for TRACE5 Changes. Added the return below */
1158 } /* rgSCHDbmInsBcchOnBch */
1161 * @brief Handler for inserting the BCCH mapped on to DLSCH in the
1162 * lcCbLst of the ueCb.
1166 * Function : rgSCHDbmInsBcchOnDlsch
1169 * @param[in] *cellCb
1173 PUBLIC Void rgSCHDbmInsBcchOnDlsch
1175 RgSchCellCb *cellCb,
1176 RgSchClcDlLcCb *cmnDlLcCb
1179 PUBLIC Void rgSCHDbmInsBcchOnDlsch(cellCb, cmnDlLcCb)
1180 RgSchCellCb *cellCb;
1181 RgSchClcDlLcCb *cmnDlLcCb;
1184 TRC2(rgSCHDbmInsBcchOnDlsch)
1186 if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].lcId == RGSCH_INVALID_LC_ID)
1188 cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].lcId = cmnDlLcCb->lcId;
1189 cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].boLst = cmnDlLcCb->boLst;
1190 cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].si = FALSE;
1192 else if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].lcId == RGSCH_INVALID_LC_ID)
1194 cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].lcId = cmnDlLcCb->lcId;
1195 cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].boLst = cmnDlLcCb->boLst;
1196 cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].si = TRUE;
1199 /* Stack Crash problems for TRACE5 Changes. Added the return below */
1202 } /* rgSCHDbmInsBcchOnDlsch */
1206 * @brief Handler for inserting the PCCH in the lcCbLst of the ueCb.
1210 * Function : rgSCHDbmInsPcch
1213 * @param[in] *cellCb
1217 PUBLIC Void rgSCHDbmInsPcch
1219 RgSchCellCb *cellCb,
1220 RgSchClcDlLcCb *cmnDlLcCb
1223 PUBLIC Void rgSCHDbmInsPcch(cellCb, cmnDlLcCb)
1224 RgSchCellCb *cellCb;
1225 RgSchClcDlLcCb *cmnDlLcCb;
1228 TRC2(rgSCHDbmInsPcch)
1230 cellCb->cmnLcCb[RGSCH_PCCH_IDX].lcId = cmnDlLcCb->lcId;
1231 cellCb->cmnLcCb[RGSCH_PCCH_IDX].boLst = cmnDlLcCb->boLst;
1233 /* Stack Crash problems for TRACE5 Changes. Added the return below */
1236 } /* rgSCHDbmInsPcch */
1239 * @brief Handler for initializing the boLst.
1243 * Function : rgSCHDbmInitCmnLcBoLst
1246 * @param[in] *cmnDlLcCb
1250 PUBLIC Void rgSCHDbmInitCmnLcBoLst
1252 RgSchClcDlLcCb *cmnDlLcCb
1255 PUBLIC Void rgSCHDbmInitCmnLcBoLst(cmnDlLcCb)
1256 RgSchClcDlLcCb *cmnDlLcCb;
1259 TRC2(rgSCHDbmInitCmnLcBoLst)
1261 cmLListInit(&cmnDlLcCb->boLst);
1263 } /* rgSCHDbmInitCmnLcBoLst */
1266 * @brief Handler for inserting the bo report in to the boLst.
1270 * Function : rgSCHDbmInsCmnLcBoRpt
1273 * @param[in] *cmnDlLcCb
1278 PUBLIC Void rgSCHDbmInsCmnLcBoRpt
1280 RgSchClcDlLcCb *cmnDlLcCb,
1281 RgSchClcBoRpt *cmnBoRpt
1284 PUBLIC Void rgSCHDbmInsCmnLcBoRpt(cmnDlLcCb, cmnBoRpt)
1285 RgSchClcDlLcCb *cmnDlLcCb;
1286 RgSchClcBoRpt *cmnBoRpt;
1289 TRC2(rgSCHDbmInsCmnLcBoRpt)
1291 cmnBoRpt->boLstEnt.next = NULLP;
1292 cmnBoRpt->boLstEnt.prev = NULLP;
1293 cmnBoRpt->boLstEnt.node = (PTR)cmnBoRpt;
1294 cmLListAdd2Tail(&cmnDlLcCb->boLst, &cmnBoRpt->boLstEnt);
1296 } /* rgSCHDbmInsCmnLcBoRpt */
1300 * @brief Handler for initializing the raCbLst.
1304 * Function : rgSCHDbmInitRaCbLst
1307 * @param[in] *cellCb
1311 PRIVATE Void rgSCHDbmInitRaCbLst
1316 PRIVATE Void rgSCHDbmInitRaCbLst(cellCb)
1317 RgSchCellCb *cellCb;
1320 TRC2(rgSCHDbmInitRaCbLst)
1322 cmLListInit(&cellCb->raInfo.raCbLst);
1324 } /* rgSCHDbmInitRaCbLst */
1328 * @brief Handler for accessing the existing raCb in the raCbLst.
1332 * Function : rgSCHDbmGetRaCb
1335 * @param[in] *cellCb
1337 * @return RgSchRaCb*
1340 PUBLIC RgSchRaCb* rgSCHDbmGetRaCb
1342 RgSchCellCb *cellCb,
1346 PUBLIC RgSchRaCb* rgSCHDbmGetRaCb(cellCb, key)
1347 RgSchCellCb *cellCb;
1353 TRC2(rgSCHDbmGetRaCb)
1355 CM_LLIST_FIRST_NODE(&cellCb->raInfo.raCbLst,tmpNode);
1358 if(((RgSchRaCb *)tmpNode->node)->tmpCrnti == key)
1360 RETVALUE((RgSchRaCb *)(tmpNode->node));
1362 CM_LLIST_NEXT_NODE(&cellCb->raInfo.raCbLst,tmpNode);
1365 } /* rgSCHDbmGetRaCb */
1369 * @brief Handler for initializing the raReqLst.
1373 * Function : rgSCHDbmInitRaReqLst
1376 * @param[in] *cellCb
1380 PRIVATE Void rgSCHDbmInitRaReqLst
1385 PRIVATE Void rgSCHDbmInitRaReqLst(cellCb)
1386 RgSchCellCb *cellCb;
1391 TRC2(rgSCHDbmInitRaReqLst)
1393 /* ccpu00133557- Memory Leak Fix- initializing for the all nodes
1395 for(idx = 0; idx < RGSCH_RAREQ_ARRAY_SIZE; idx++)
1397 cmLListInit(&cellCb->raInfo.raReqLst[idx]);
1400 } /* rgSCHDbmInitRaReqLst */
1404 * @brief Handler for initializing the crnt rgr cfgLst.
1408 * Function : rgSCHDbmInitCrntRgrCfgLst
1411 * @param[in] *cellCb
1415 PRIVATE Void rgSCHDbmInitCrntRgrCfgLst
1420 PRIVATE Void rgSCHDbmInitCrntRgrCfgLst(cellCb)
1421 RgSchCellCb *cellCb;
1424 TRC2(rgSCHDbmInitCrntRgrCfgLst)
1426 cmLListInit(&cellCb->rgCfgInfo.crntRgrCfgLst);
1428 } /* rgSCHDbmInitCrntRgrCfgLst */
1431 * @brief Handler for initializing the pndng rgr cfgLst.
1435 * Function : rgSCHDbmInitPndngRgrCfgLst
1438 * @param[in] *cellCb
1442 PRIVATE Void rgSCHDbmInitPndngRgrCfgLst
1447 PRIVATE Void rgSCHDbmInitPndngRgrCfgLst(cellCb)
1448 RgSchCellCb *cellCb;
1451 TRC2(rgSCHDbmInitPndngRgrCfgLst)
1453 cmLListInit(&cellCb->rgCfgInfo.pndngRgrCfgLst);
1455 } /* rgSCHDbmInitPndngRgrCfgLst */
1458 * @brief Handler for inserting the cfgElem in to the crntRgrCfgLst.
1462 * Function : rgSCHDbmInsCrntRgrCfgElem
1465 * @param[in] *cellCb
1466 * @param[in] *cfgElem
1470 PUBLIC Void rgSCHDbmInsCrntRgrCfgElem
1472 RgSchCellCb *cellCb,
1473 RgSchCfgElem *cfgElem
1476 PUBLIC Void rgSCHDbmInsCrntRgrCfgElem(cellCb, cfgElem)
1477 RgSchCellCb *cellCb;
1478 RgSchCfgElem *cfgElem;
1481 TRC2(rgSCHDbmInsCrntRgrCfgElem)
1483 cfgElem->cfgReqLstEnt.next = NULLP;
1484 cfgElem->cfgReqLstEnt.prev = NULLP;
1485 cmLListAdd2Tail(&cellCb->rgCfgInfo.crntRgrCfgLst, &cfgElem->cfgReqLstEnt);
1487 } /* rgSCHDbmInsCrntRgrCfgElem */
1490 * @brief Handler for inserting the cfgElem in to the pndngRgrCfgLst.
1494 * Function : rgSCHDbmInsPndngRgrCfgElem
1497 * @param[in] *cellCb
1498 * @param[in] *cfgElem
1502 PUBLIC Void rgSCHDbmInsPndngRgrCfgElem
1504 RgSchCellCb *cellCb,
1505 RgSchCfgElem *cfgElem
1508 PUBLIC Void rgSCHDbmInsPndngRgrCfgElem(cellCb, cfgElem)
1509 RgSchCellCb *cellCb;
1510 RgSchCfgElem *cfgElem;
1513 TRC2(rgSCHDbmInsPndngRgrCfgElem)
1515 cfgElem->cfgReqLstEnt.next = NULLP;
1516 cfgElem->cfgReqLstEnt.prev = NULLP;
1517 cfgElem->cfgReqLstEnt.node = (PTR)cfgElem;
1518 cmLListAdd2Tail(&cellCb->rgCfgInfo.pndngRgrCfgLst, &cfgElem->cfgReqLstEnt);
1520 } /* rgSCHDbmInsPndngRgrCfgElem */
1523 * @brief Handler for accessing the existing cfgElem in the crntRgrCfgLst.
1527 * Function : rgSCHDbmGetNextCrntRgrCfgElem
1530 * @param[in] *cellCb
1531 * @param[in] *cfgElem
1532 * @return RgSchCfgElem*
1535 PUBLIC RgSchCfgElem* rgSCHDbmGetNextCrntRgrCfgElem
1537 RgSchCellCb *cellCb,
1538 RgSchCfgElem *cfgElem
1541 PUBLIC RgSchCfgElem* rgSCHDbmGetNextCrntRgrCfgElem(cellCb, cfgElem)
1542 RgSchCellCb *cellCb;
1543 RgSchCfgElem *cfgElem;
1546 TRC2(rgSCHDbmGetNextCrntRgrCfgElem)
1550 RETVALUE( cellCb->rgCfgInfo.crntRgrCfgLst.first ?
1551 (RgSchCfgElem *)(cellCb->rgCfgInfo.crntRgrCfgLst.first->node) : NULLP );
1553 RETVALUE( cfgElem->cfgReqLstEnt.next ?
1554 (RgSchCfgElem *)(cfgElem->cfgReqLstEnt.next->node) : NULLP );
1555 } /* rgSCHDbmGetNextCrntRgrCfgElem */
1558 * @brief Handler for accessing the existing cfgElem in the pndngRgrCfgLst.
1562 * Function : rgSCHDbmGetNextPndngRgrCfgElem
1565 * @param[in] *cellCb
1566 * @param[in] *cfgElem
1567 * @return RgSchCfgElem*
1570 PUBLIC RgSchCfgElem* rgSCHDbmGetNextPndngRgrCfgElem
1572 RgSchCellCb *cellCb,
1573 RgSchCfgElem *cfgElem
1576 PUBLIC RgSchCfgElem* rgSCHDbmGetNextPndngRgrCfgElem(cellCb, cfgElem)
1577 RgSchCellCb *cellCb;
1578 RgSchCfgElem *cfgElem;
1581 TRC2(rgSCHDbmGetNextPndngRgrCfgElem)
1585 RETVALUE( cellCb->rgCfgInfo.pndngRgrCfgLst.first ?
1586 (RgSchCfgElem *)(cellCb->rgCfgInfo.pndngRgrCfgLst.first->node) : NULLP );
1588 RETVALUE( cfgElem->cfgReqLstEnt.next ?
1589 (RgSchCfgElem *)(cfgElem->cfgReqLstEnt.next->node) : NULLP );
1590 } /* rgSCHDbmGetNextPndngRgrCfgElem */
1593 * @brief Handler for extracting the existing cfgElem from the pndngRgrCfgLst.
1597 * Function : rgSCHDbmGetPndngRgrCfgElemByKey
1600 * @param[in] *cellCb
1602 * @return RgSchCfgElem*
1605 PUBLIC RgSchCfgElem* rgSCHDbmGetPndngRgrCfgElemByKey
1607 RgSchCellCb *cellCb,
1611 PUBLIC RgSchCfgElem* rgSCHDbmGetPndngRgrCfgElemByKey(cellCb, key)
1612 RgSchCellCb *cellCb;
1613 CmLteTimingInfo key;
1618 TRC2(rgSCHDbmGetPndngRgrCfgElemByKey)
1620 CM_LLIST_FIRST_NODE(&cellCb->rgCfgInfo.pndngRgrCfgLst,tmpNode);
1623 if((((RgSchCfgElem *)tmpNode->node)->actvTime.sfn == key.sfn) &&
1624 (((RgSchCfgElem *)tmpNode->node)->actvTime.subframe == key.subframe))
1626 RETVALUE((RgSchCfgElem *)(tmpNode->node));
1628 CM_LLIST_NEXT_NODE(&cellCb->rgCfgInfo.pndngRgrCfgLst,tmpNode);
1631 } /* rgSCHDbmGetPndngRgrCfgElemByKey */
1634 * @brief Handler for deleting the existing cfgElem from the crntRgrCfgLst.
1638 * Function : rgSCHDbmDelCrntRgrCfgElem
1641 * @param[in] *cellCb
1642 * @param[in] *cfgElem
1643 * @return RgSchCfgElem*
1646 PUBLIC RgSchCfgElem* rgSCHDbmDelCrntRgrCfgElem
1648 RgSchCellCb *cellCb,
1649 RgSchCfgElem *cfgElem
1652 PUBLIC RgSchCfgElem* rgSCHDbmDelCrntRgrCfgElem(cellCb, cfgElem)
1653 RgSchCellCb *cellCb;
1654 RgSchCfgElem *cfgElem;
1657 TRC2(rgSCHDbmDelCrntRgrCfgElem)
1659 if(cmLListDelFrm(&cellCb->rgCfgInfo.crntRgrCfgLst,&cfgElem->cfgReqLstEnt))
1661 RETVALUE((RgSchCfgElem *)(cfgElem->cfgReqLstEnt.node));
1664 } /* rgSCHDbmDelCrntRgrCfgElem */
1667 * @brief Handler for deleting the existing cfgElem from the pndngRgrCfgLst.
1671 * Function : rgSCHDbmDelPndngRgrCfgElem
1674 * @param[in] *cellCb
1675 * @param[in] *cfgElem
1676 * @return RgSchCfgElem*
1679 PUBLIC RgSchCfgElem* rgSCHDbmDelPndngRgrCfgElem
1681 RgSchCellCb *cellCb,
1682 RgSchCfgElem *cfgElem
1685 PUBLIC RgSchCfgElem* rgSCHDbmDelPndngRgrCfgElem(cellCb, cfgElem)
1686 RgSchCellCb *cellCb;
1687 RgSchCfgElem *cfgElem;
1690 TRC2(rgSCHDbmDelPndngRgrCfgElem)
1692 if(cmLListDelFrm(&cellCb->rgCfgInfo.pndngRgrCfgLst,&cfgElem->cfgReqLstEnt))
1694 RETVALUE((RgSchCfgElem *)(cfgElem->cfgReqLstEnt.node));
1697 } /* rgSCHDbmDelPndngRgrCfgElem */
1700 * @brief Handler for initializing the rntiDb.
1704 * Function : rgSCHDbmRntiDbInit
1707 * @param[in] *cellCb
1708 * @param[in] rntiStart
1709 * @param[in] maxRntis
1715 PUBLIC S16 rgSCHDbmRntiDbInit
1717 RgSchCellCb *cellCb,
1722 PUBLIC S16 rgSCHDbmRntiDbInit(cellCb, rntiStart, maxRntis)
1723 RgSchCellCb *cellCb;
1729 RgSchRntiLnk *rntiPool;
1731 TRC2(rgSCHDbmRntiDbInit)
1733 /* Fix for Change Request ccpu00099150 */
1734 if(rgSCHUtlAllocSBuf(cellCb->instIdx,
1735 (Data **)&cellCb->rntiDb.rntiPool,maxRntis*sizeof(RgSchRntiLnk)) != ROK)
1739 cellCb->rntiDb.rntiStart = rntiStart;
1740 cellCb->rntiDb.maxRntis = maxRntis;
1742 cellCb->rntiDb.count = maxRntis;
1745 rntiPool = cellCb->rntiDb.rntiPool;
1748 rntiPool[0].rnti = rnti;
1749 rntiPool[0].prv = NULLP;
1750 rntiPool[0].nxt = NULLP;
1751 cellCb->rntiDb.lastRnti = &rntiPool[0];
1756 rntiPool[0].rnti = rnti++;
1757 rntiPool[0].prv = NULLP;
1758 rntiPool[0].nxt = &rntiPool[1];
1759 for (idx = 1; idx < maxRntis - 1; ++idx)
1761 rntiPool[idx].rnti = rnti++;
1762 rntiPool[idx].prv = &rntiPool[idx-1];
1763 rntiPool[idx].nxt = &rntiPool[idx+1];
1765 rntiPool[idx].rnti = rnti++;
1766 rntiPool[idx].prv = &rntiPool[idx-1];
1767 rntiPool[idx].nxt = NULLP;
1768 cellCb->rntiDb.lastRnti = &rntiPool[idx];
1770 cellCb->rntiDb.freeRnti = &rntiPool[0];
1772 } /* rgSCHDbmRntiDbInit */
1775 * @brief Handler for de-initializing the rntiDb.
1779 * Function : rgSCHDbmRntiDbDeInit
1782 * @param[in] *cellCb
1786 PUBLIC Void rgSCHDbmRntiDbDeInit
1791 PUBLIC Void rgSCHDbmRntiDbDeInit(cellCb)
1792 RgSchCellCb *cellCb;
1795 TRC2(rgSCHDbmRntiDbDeInit)
1797 /* ccpu00117052 - MOD - Passing double pointer
1798 for proper NULLP assignment*/
1799 rgSCHUtlFreeSBuf(cellCb->instIdx, (Data **)(&(cellCb->rntiDb.rntiPool)),
1800 cellCb->rntiDb.maxRntis*sizeof(RgSchRntiLnk));
1801 cellCb->rntiDb.maxRntis = 0;
1802 cellCb->rntiDb.freeRnti = NULLP;
1803 cellCb->rntiDb.lastRnti = NULLP;
1804 cmLListInit(&cellCb->rntiDb.rntiGuardPool);
1806 /* Stack Crash problems for TRACE5 Changes. Added the return below */
1809 } /* rgSCHDbmRntiDbDeInit */
1812 * @brief Handler for accessing the free RNTI.
1816 * Function : rgSCHDbmGetRnti
1819 * @param[in] *cellCb
1820 * @return RgSchRntiLnk*
1823 PUBLIC RgSchRntiLnk* rgSCHDbmGetRnti
1828 PUBLIC RgSchRntiLnk* rgSCHDbmGetRnti(cellCb)
1829 RgSchCellCb *cellCb;
1832 RgSchRntiLnk *rntiLnk;
1834 TRC2(rgSCHDbmGetRnti)
1836 if (!(cellCb->rntiDb.freeRnti))
1838 RLOG_ARG1(L_ERROR,DBG_CELLID,cellCb->cellId,"RNTI exhausted count:%d",
1839 cellCb->rntiDb.count);
1843 rntiLnk = cellCb->rntiDb.freeRnti;
1844 cellCb->rntiDb.freeRnti = rntiLnk->nxt;
1846 /* setting prv and nxt to NULLP may not be needed */
1847 rntiLnk->prv = NULLP;
1848 rntiLnk->nxt = NULLP;
1850 if (cellCb->rntiDb.freeRnti != NULLP)
1852 cellCb->rntiDb.freeRnti->prv = NULLP;
1856 cellCb->rntiDb.lastRnti = NULLP;
1859 cellCb->rntiDb.count--;
1861 printf("rgSCHDbmGetRnti::rntiLnk->rnti %u\n",rntiLnk->rnti);
1863 } /* rgSCHDbmGetRnti */
1866 * @brief Handler for releasing the RNTI.
1870 * Function : rgSCHDbmRlsRnti
1873 * @param[in] *cellCb
1874 * @param[in] rntiLnk
1878 PUBLIC Void rgSCHDbmRlsRnti
1880 RgSchCellCb *cellCb,
1881 RgSchRntiLnk *rntiLnk
1884 PUBLIC Void rgSCHDbmRlsRnti(cellCb, rntiLnk)
1885 RgSchCellCb *cellCb;
1886 RgSchRntiLnk *rntiLnk;
1889 TRC2(rgSCHDbmRlsRnti)
1891 if(ROK==rgSCHDbmPutEmtcRnti(cellCb,rntiLnk))
1896 rntiLnk->nxt = NULLP;
1897 if (cellCb->rntiDb.lastRnti)
1899 cellCb->rntiDb.lastRnti->nxt = rntiLnk;
1900 rntiLnk->prv = cellCb->rntiDb.lastRnti;
1904 rntiLnk->prv = NULLP;
1905 cellCb->rntiDb.freeRnti = rntiLnk;
1907 cellCb->rntiDb.lastRnti = rntiLnk;
1909 cellCb->rntiDb.count++;
1911 /* Stack Crash problems for TRACE5 Changes. Added the return below */
1914 } /* rgSCHDbmRlsRnti */
1918 * @brief Handler for initializing the ueTfuPendLst under the cellCb.
1922 * Function : rgSCHDbmInitUeTfuPendLst
1925 * @param[in] *cellCb
1926 * @param[in] numBins
1932 PRIVATE S16 rgSCHDbmInitUeTfuPendLst
1934 RgSchCellCb *cellCb,
1938 PRIVATE S16 rgSCHDbmInitUeTfuPendLst(cellCb, numBins)
1939 RgSchCellCb *cellCb;
1943 RgSchUePucchRecpInfo pucchInfo;
1944 TRC2(rgSCHDbmInitUeTfuPendLst)
1946 /* Fix: syed It is better to compute offset dynamically
1947 * rather than hardcoding it as 0 */
1948 if(cmHashListInit(&cellCb->ueTfuPendLst, numBins, (U16)((PTR)&(pucchInfo.hashLstEnt) - (PTR)&pucchInfo), FALSE,
1949 CM_HASH_KEYTYPE_CONID,
1950 rgSchCb[cellCb->instIdx].rgSchInit.region,
1951 rgSchCb[cellCb->instIdx].rgSchInit.pool) != ROK)
1958 } /* rgSCHDbmInitUeTfuPendLst */
1961 * @brief Handler for de-initializing the ueTfuPendLst under the cellCb.
1965 * Function : rgSCHDbmDeInitUeTfuPendLst
1968 * @param[in] *cellCb
1974 PUBLIC S16 rgSCHDbmDeInitUeTfuPendLst
1979 PUBLIC S16 rgSCHDbmDeInitUeTfuPendLst(cellCb)
1980 RgSchCellCb *cellCb;
1983 TRC2(rgSCHDbmDeInitUeTfuPendLst)
1985 cmHashListDeinit(&cellCb->ueTfuPendLst);
1988 } /* rgSCHDbmDeInitUeTfuPendLst */
1991 /**********************************************************************
1994 **********************************************************************/