+++ /dev/null
-/*******************************************************************************
-################################################################################
-# Copyright (c) [2017-2019] [Radisys] #
-# #
-# Licensed under the Apache License, Version 2.0 (the "License"); #
-# you may not use this file except in compliance with the License. #
-# You may obtain a copy of the License at #
-# #
-# http://www.apache.org/licenses/LICENSE-2.0 #
-# #
-# Unless required by applicable law or agreed to in writing, software #
-# distributed under the License is distributed on an "AS IS" BASIS, #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and #
-# limitations under the License. #
-################################################################################
-*******************************************************************************/
-
-/************************************************************************
-
- Name: LTE-MAC layer
-
- Type: C source file
-
- Desc: C source code for Entry point fucntions
-
- File: rg_sch_dbm.c
-
-**********************************************************************/
-
-/** @file rg_sch_dbm.c
-@brief This file contains the APIs exposed for the database handling of the scheduler.
-*/
-/* header include files -- defines (.h) */
-#include "common_def.h"
-#include "lrg.h"
-#include "rgr.h"
-#include "tfu.h"
-#include "rg_env.h"
-#include "rg_sch_err.h"
-#include "rg_sch_inf.h"
-#include "rg_sch.h"
-#include "rg_sch_cmn.h"
-
-/* header/extern include files (.x) */
-#include "lrg.x"
-#include "rgr.x"
-#include "tfu.x"
-#include "rgm.x" /* layer management typedefs for MAC */
-#include "rg_sch_inf.x"
-#include "rg_sch.x"
-#include "rg_sch_cmn.x"
-
-
-/* local defines */
-static S16 rgSCHDbmInitUeCbLst ARGS(( RgSchCellCb *cellCb, uint16_t numBins));
-#ifdef LTE_TDD
-static S16 rgSCHDbmInitUeTfuPendLst ARGS(( RgSchCellCb *cellCb, uint16_t numBins));
-#endif
-static Void rgSCHDbmInitDedLcLst ARGS((RgSchUeCb *ueCb));
-static Void rgSCHDbmInitCmnLcLst ARGS((RgSchCellCb *cellCb));
-#ifdef LTEMAC_SPS
-static S16 rgSCHDbmInitSpsUeCbLst ARGS((RgSchCellCb *cellCb,
- uint16_t numBins));
-#endif
-static Void rgSCHDbmInitRaCbLst ARGS(( RgSchCellCb *cellCb));
-#ifndef LTE_TDD
-static Void rgSCHDbmInitRaReqLst ARGS(( RgSchCellCb *cellCb));
-#endif
-static Void rgSCHDbmInitCrntRgrCfgLst ARGS(( RgSchCellCb *cellCb));
-static Void rgSCHDbmInitPndngRgrCfgLst ARGS(( RgSchCellCb *cellCb));
-
-#ifdef EMTC_ENABLE
- S16 rgSCHDbmPutEmtcRnti ARGS((RgSchCellCb *cellCb,RgSchRntiLnk *rntiLnk));
-#endif
-
-/* local typedefs */
-
-/* local externs */
-
-/* forward references */
-
-/**
- * @brief Handler for Initializing the cell.
- *
- * @details
- *
- * Function : rgSCHDbmInitCell
- *
- * Initializes the lists belonging to the cell.
- *
- *
- * @param[in] RgSchCellCb *cellCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmInitCell(RgSchCellCb *cellCb)
-{
- S16 ret;
-
- /* Initialize ue list */
- if ((ret = rgSCHDbmInitUeCbLst(cellCb, RGSCH_MAX_UE_BIN_PER_CELL)) != ROK)
- return (ret);
-#ifdef LTE_TDD
- if ((ret = rgSCHDbmInitUeTfuPendLst(cellCb,
- RGSCH_MAX_UE_BIN_PER_CELL)) != ROK)
- return (ret);
-#endif
-
-#ifdef LTEMAC_SPS
- /* Initialize SPS Ue list */
- if ((ret = rgSCHDbmInitSpsUeCbLst(cellCb, RGSCH_MAX_UE_BIN_PER_CELL)) != ROK)
- return (ret);
-#endif /* LTEMAC_SPS */
-
- /* Initialize BCCH/PCCH logical channels */
- rgSCHDbmInitCmnLcLst(cellCb);
-
- /* Initialize configuration lists */
- rgSCHDbmInitCrntRgrCfgLst(cellCb);
- rgSCHDbmInitPndngRgrCfgLst(cellCb);
-
-#ifndef LTE_TDD
- /* Initialize raReq list */
- rgSCHDbmInitRaReqLst(cellCb);
-#endif
-
- /* Initialize raCb list */
- rgSCHDbmInitRaCbLst(cellCb);
-
- /* Initialize l2mList */
-#ifdef LTE_L2_MEAS
- cmLListInit(&cellCb->l2mList);
-#endif /* LTE_L2_MEAS */
-
- return (ret);
-
-} /* rgSCHDbmInitCell */
-
-/**
- * @brief Handler for initializing the ueCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmInitUeCbLst
- *
- *
- * @param[in] *cellCb
- * @param[in] numBins
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-static S16 rgSCHDbmInitUeCbLst(RgSchCellCb *cellCb,uint16_t numBins)
-{
- RgSchUeCellInfo ueCellInfo;
-
- /* Fix: syed It is better to compute offset dynamically
- * rather than hardcoding it as 0 */
- return (cmHashListInit(&cellCb->ueLst, numBins, (uint16_t)((PTR)&(ueCellInfo.ueLstEnt) - (PTR)&ueCellInfo), FALSE,
- CM_HASH_KEYTYPE_CONID,
- rgSchCb[cellCb->instIdx].rgSchInit.region,
- rgSchCb[cellCb->instIdx].rgSchInit.pool));
-
-} /* rgSCHDbmInitUeCbLst */
-
-/**
- * @brief Handler for de-initializing the ueCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmDeInitUeCbLst
- *
- *
- * @param[in] *cellCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmDeInitUeCbLst(RgSchCellCb *cellCb)
-{
-
- return (cmHashListDeinit(&cellCb->ueLst));
-
-} /* rgSCHDbmDeInitUeCbLst */
-
-#ifdef LTEMAC_SPS
-/**
- * @brief Handler for initializing the spsUeCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmInitSpsUeCbLst
- *
- *
- * @param[in] *cellCb
- * @param[in] numBins
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-static S16 rgSCHDbmInitSpsUeCbLst(RgSchCellCb *cellCb,uint16_t numBins)
-{
- RgSchUeCb ue;
-
- return (cmHashListInit(&cellCb->spsUeLst, numBins, (uint16_t) ((PTR) &(ue.spsUeLstEnt) - (PTR) &ue), FALSE,
- CM_HASH_KEYTYPE_CONID,
- rgSchCb[cellCb->instIdx].rgSchInit.region,
- rgSchCb[cellCb->instIdx].rgSchInit.pool));
-
-} /* rgSCHDbmInitSpsUeCbLst */
-
-/**
- * @brief Handler for de-initializing the spsUeCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmDeInitSpsUeCbLst
- *
- *
- * @param[in] *cellCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmDeInitSpsUeCbLst(RgSchCellCb *cellCb)
-{
-
- return (cmHashListDeinit(&cellCb->spsUeLst));
-
-} /* rgSCHDbmDeInitSpsUeCbLst */
-
-#endif /* LTEMAC_SPS */
-
-/**
- * @brief Handler for inserting the ueCb in to the ueCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmInsUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmInsUeCb(RgSchCellCb *cellCb,RgSchUeCb *ueCb)
-{
- RgSchUeCellInfo *ueCellInfo = NULLP;
-
- ueCellInfo = ueCb->cellInfo[ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cellCb)]];
-
- return (cmHashListInsert(&cellCb->ueLst, (PTR)ueCellInfo,
- (uint8_t *)&ueCb->ueId, (uint16_t)sizeof(ueCb->ueId)));
-
-} /* rgSCHDbmInsUeCb */
-
-#ifdef LTEMAC_SPS
-/**
- * @brief Handler for inserting the ueCb in to the spsUeCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmInsSpsUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmInsSpsUeCb(RgSchCellCb *cellCb,RgSchUeCb *ueCb)
-{
- return (cmHashListInsert(&cellCb->spsUeLst, (PTR)ueCb,
- (uint8_t *)&ueCb->spsRnti, (uint16_t)sizeof(ueCb->spsRnti)));
-
-} /* end of rgSCHDbmInsSpsUeCb */
-
-#endif /* LTEMAC_SPS */
-
-/**
- * @brief Handler for accessing the existing ueCb identified by the key ueId
- * in the ueCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] ueId
- * @return RgSchUeCb*
- **/
-RgSchUeCb* rgSCHDbmGetUeCb(RgSchCellCb *cellCb,CmLteRnti ueId)
-{
- RgSchUeCellInfo *ueCellInfo = NULLP;
-
- cmHashListFind(&cellCb->ueLst, (uint8_t *)&ueId,
- sizeof(ueId), 0, (PTR *)&ueCellInfo);
-
- return (!ueCellInfo?NULLP:ueCellInfo->ue);
-} /* rgSCHDbmGetUeCb */
-
-#ifdef LTEMAC_SPS
-/**
- * @brief Handler for accessing the existing ueCb identified by the key
- * spsRnti in the spsUeCbLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetSpsUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] ueId
- * @return RgSchUeCb*
- **/
-RgSchUeCb* rgSCHDbmGetSpsUeCb(RgSchCellCb *cellCb, CmLteRnti spsRnti)
-{
- RgSchUeCb *ueCb = NULLP;
-
- cmHashListFind(&cellCb->spsUeLst, (uint8_t *)&spsRnti,
- sizeof(spsRnti), 0, (PTR *)&ueCb);
- return (ueCb);
-} /* rgSCHDbmGetSpsUeCb */
-#endif
-
-/**
- * @brief Handler for accessing the existing next ueCb in the ueCbLst under the
- * cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetNextUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return RgSchUeCb*
- **/
-RgSchUeCb* rgSCHDbmGetNextUeCb(RgSchCellCb *cellCb, RgSchUeCb *ueCb)
-{
- RgSchUeCellInfo *ueCellInfo = NULLP;
- RgSchUeCellInfo *nextUeCellInfo = NULLP;
-
- if (ueCb)
- {
- ueCellInfo = ueCb->cellInfo[
- ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cellCb)]];
- }
-
- cmHashListGetNext(&cellCb->ueLst, (PTR) ueCellInfo, (PTR *)&nextUeCellInfo);
- return (!nextUeCellInfo?NULLP:nextUeCellInfo->ue);
-} /* rgSCHDbmGetNextUeCb */
-
-#ifdef LTEMAC_SPS
-/**
- * @brief Handler for accessing the existing next ueCb stored in the spsUeCbLst
- * using SPS-Rnti under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetNextSpsUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return RgSchUeCb*
- **/
-RgSchUeCb* rgSCHDbmGetNextSpsUeCb(RgSchCellCb *cellCb, RgSchUeCb *ueCb)
-{
- RgSchUeCb *nextUeCb = NULLP;
-
- cmHashListGetNext(&cellCb->spsUeLst, (PTR) ueCb, (PTR *)&nextUeCb);
- return (nextUeCb);
-} /* end of rgSCHDbmGetNextSpsUeCb */
-
-#endif /* LTEMAC_SPS */
-
-#ifdef LTE_L2_MEAS
-/**
- * @brief Handler for Cleaning up L2 Meas related Data in
- * cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmDelL2MUe
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmDelL2MUe(RgSchCellCb *cellCb,RgSchUeCb *ueCb)
-{
- uint8_t lcCnt = 0;
- RgSchCmnUlUe *ueUl = RG_SCH_CMN_GET_UL_UE(ueCb, cellCb);
-
- ueUl->hqEnt.numBusyHqProcs = 0;
- /* Clean cell level UE Active Count */
- for (lcCnt =0; lcCnt < RGSCH_MAX_LC_PER_UE; lcCnt++)
- {
- if (ueCb->ul.lcCb[lcCnt].isValid)
- {
- if((ueCb->ul.lcCb[lcCnt].qciCb->ulUeCount) &&
- (ueCb->ulActiveLCs &
- (1 << (ueCb->ul.lcCb[lcCnt].qciCb->qci -1))))
- {
- ueCb->ul.lcCb[lcCnt].qciCb->ulUeCount--;
- ueCb->ulActiveLCs &= ~(1 <<
- (ueCb->ul.lcCb[lcCnt].qciCb->qci -1));
- }
- }
-
- if (ueCb->dl.lcCb[lcCnt])
- {
- if (ueCb->qciActiveLCs[ueCb->dl.lcCb[lcCnt]->qciCb->qci])
- {
- ueCb->dl.lcCb[lcCnt]->qciCb->dlUeCount--;
- ueCb->qciActiveLCs[ueCb->dl.lcCb[lcCnt]->qciCb->qci] = 0;
- }
- }
- }
-
- return ROK;
-} /* rgSCHDbmDelL2MUe */
-
-#endif
-
-/**
- * @brief Handler for deleting the existing ueCb from the ueCbLst under the
- * cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmDelUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmDelUeCb(RgSchCellCb *cellCb,RgSchUeCb *ueCb)
-{
- RgSchUeCellInfo *ueCellInfo = NULLP;
-
- ueCellInfo = ueCb->cellInfo[ueCb->cellIdToCellIdxMap[RG_SCH_CELLINDEX(cellCb)]];
-
- return (cmHashListDelete(&cellCb->ueLst, (PTR)ueCellInfo));
-} /* rgSCHDbmDelUeCb */
-
-#ifdef LTEMAC_SPS
-/**
- * @brief Handler for deleting the existing ueCb from the spsUeCbLst under the
- * cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmDelSpsUeCb
- *
- *
- * @param[in] *cellCb
- * @param[in] *ueCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmDelSpsUeCb(RgSchCellCb *cellCb,RgSchUeCb *ueCb)
-{
-
- return (cmHashListDelete(&cellCb->spsUeLst, (PTR)ueCb));
-} /* end of rgSCHDbmDelSpsUeCb */
-
-#endif /* LTEMAC_SPS */
-
-/**
- * @brief Handler for Initializing the UE.
- *
- * @details
- *
- * Function : rgSCHDbmInitUe
- *
- * Initializes the lists belonging to the UE.
- *
- *
- * @param[in] RgSchUeCb *ueCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmInitUe(RgSchUeCb *ueCb)
-{
- S16 ret = ROK;
-
- /* Initialize Dedicated logical channels */
- rgSCHDbmInitDedLcLst(ueCb);
-
- return (ret);
-} /* rgSCHDbmInitUe */
-
-/**
- * @brief Handler for Initializing the dedicated logical channels.
- *
- * @details
- *
- * Function : rgSCHDbmInitDedLcLst
- *
- * Initializes dedicated logical channels.
- *
- * @param[in] RgSchUeCb *ueCb
- * @return Void
- **/
-static Void rgSCHDbmInitDedLcLst(RgSchUeCb *ueCb)
-{
- uint8_t idx;
-
- for (idx = 0; idx < RGSCH_MAX_LC_PER_UE; ++idx)
- {
- /* Set Dedicated LCs as not configured */
- ueCb->ul.lcCb[idx].isValid = FALSE;
- ueCb->dl.lcCb[idx] = NULLP;
- }
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-
-} /* rgSCHDbmInitDedLcLst */
-
-/**
- * @brief Handler for Initializing the common logical channel list of the cell.
- *
- * @details
- *
- * Function : rgSCHDbmInitCmnLcLst
- *
- * Initializes following common logical channels belonging to the cell.
- * - BCCH on BCH
- * - BCCH on DLSCH
- * - PCCH
- *
- * @param[in] RgSchCellCb *cellCb
- * @return Void
- **/
-static Void rgSCHDbmInitCmnLcLst(RgSchCellCb *cellCb)
-{
- uint8_t idx;
-
- for (idx = 0; idx < RGSCH_MAX_CMN_LC_CB; idx++)
- {
- cellCb->cmnLcCb[idx].lcId = RGSCH_INVALID_LC_ID;
- }
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmInitCmnLcLst */
-
-/**
- * @brief Handler for inserting dedicated DL logical channel.
- *
- * @details
- *
- * Function : rgSCHDbmInsDlDedLcCb
- *
- * @param[in] RgSchUeCb *ueCb
- * @param[in] RgSchDlLcCb* dlLcCb
- * @return Void
- **/
-Void rgSCHDbmInsDlDedLcCb(RgSchUeCb *ueCb, RgSchDlLcCb *dlLcCb )
-{
-
- ueCb->dl.lcCb[dlLcCb->lcId - 1] = dlLcCb;
-
-} /* rgSCHDbmInsDlDedLcCb */
-
-/**
- * @brief Handler for deleting dedicated DL logical channel.
- *
- * @details
- *
- * Function : rgSCHDbmDelDlDedLcCb
- *
- * @param[in] RgSchUeCb *ueCb
- * @param[in] RgSchDlLcCb* dlLcCb
- * @return Void
- **/
-Void rgSCHDbmDelDlDedLcCb(RgSchUeCb *ueCb, RgSchDlLcCb *dlLcCb )
-{
-
-#ifdef LTE_L2_MEAS
- /* Clean cell level UE Active Count */
-
- if (ueCb->dl.lcCb[dlLcCb->lcId - 1])
- {
- if ((dlLcCb->qciCb)
- && (ueCb->qciActiveLCs[dlLcCb->qciCb->qci]))
- {
- ueCb->qciActiveLCs[dlLcCb->qciCb->qci]--;
- if (!(ueCb->qciActiveLCs[dlLcCb->qciCb->qci]))
- {
- dlLcCb->qciCb->dlUeCount--;
- }
- }
- }
-#endif /* LTE_L2_MEAS */
-
- ueCb->dl.lcCb[dlLcCb->lcId - 1] = NULLP;
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmDelDlDedLcCb */
-
-/**
- * @brief Handler for accessing the existing dl dedicated lcCb at idx in the
- * lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetDlDedLcCb
- *
- * @param[in] *ueCb
- * @param[in] idx
- * @return RgSchDlLcCb*
- **/
-RgSchDlLcCb* rgSCHDbmGetDlDedLcCb(RgSchUeCb *ueCb, CmLteLcId idx)
-{
- if (idx < RGSCH_DEDLC_MIN_LCID || idx > RGSCH_DEDLC_MAX_LCID)
- {
- return (NULLP);
- }
- return (ueCb->dl.lcCb[idx-1]);
-
-} /* rgSCHDbmGetDlDedLcCb */
-
-/**
- * @brief Handler for accessing the existing first dl dedicated lcCb at idx
- * in the lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetFirstDlDedLcCb
- *
- *
- * @param[in] *ueCb
- * @return RgSchDlLcCb*
- **/
-RgSchDlLcCb* rgSCHDbmGetFirstDlDedLcCb(RgSchUeCb *ueCb)
-{
- uint8_t idx;
-
- for(idx = 0; idx < RGSCH_DEDLC_MAX_LCID; idx++)
- {
- if(ueCb->dl.lcCb[idx])
- {
- return (ueCb->dl.lcCb[idx]);
- }
- }
- return (NULLP);
-} /* rgSCHDbmGetFirstDlDedLcCb */
-/**
- * @brief Handler for accessing the existing next dl dedicated lcCb at idx
- * in the lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetNextDlDedLcCb
- *
- *
- * @param[in] *ueCb
- * @param[in] *lcCb
- * @return RgSchDlLcCb*
- **/
-RgSchDlLcCb* rgSCHDbmGetNextDlDedLcCb(RgSchUeCb *ueCb,RgSchDlLcCb *lcCb)
-{
- uint8_t idx;
-
- if (!lcCb)
- {
- return (rgSCHDbmGetFirstDlDedLcCb(ueCb));
- }
-
- for(idx = lcCb->lcId; idx < RGSCH_DEDLC_MAX_LCID; idx++)
- {
- if(ueCb->dl.lcCb[idx])
- {
- return (ueCb->dl.lcCb[idx]);
- }
- }
- return (NULLP);
-} /* rgSCHDbmGetNextDlDedLcCb */
-
-/**
- * @brief Handler for accessing the existing dl common lcCb identified by the key lcId
- * in the lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetCmnLcCb
- *
- *
- * @param[in] *cellCb
- * @param[in] lcId
- * @return RgSchClcDlLcCb*
- **/
-RgSchClcDlLcCb* rgSCHDbmGetCmnLcCb(RgSchCellCb *cellCb, CmLteLcId lcId)
-{
- uint8_t idx;
-
- for(idx = 0; idx < RGSCH_MAX_CMN_LC_CB; idx++)
- {
- if(cellCb->cmnLcCb[idx].lcId == lcId)
- {
- return (&(cellCb->cmnLcCb[idx]));
- }
- }
- return (NULLP);
-} /* rgSCHDbmGetCmnLcCb */
-
-/**
- * @brief Handler for accessing the existing BCCH mapped on to BCH in the
- * lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetBcchOnBch
- *
- *
- * @param[in] *cellCb
- * @return RgSchClcDlLcCb*
- **/
-RgSchClcDlLcCb* rgSCHDbmGetBcchOnBch(RgSchCellCb *cellCb )
-{
-
- if(cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX].lcId != RGSCH_INVALID_LC_ID)
- {
- return (&(cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX]));
- }
- return (NULLP);
-} /* rgSCHDbmGetBcchOnBch */
-
-/**
- * @brief Handler for accessing the existing BCCH mapped on to DLSCH in the
- * lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetFirstBcchOnDlsch
- *
- *
- * @param[in] *cellCb
- * @return RgSchClcDlLcCb*
- **/
-RgSchClcDlLcCb* rgSCHDbmGetFirstBcchOnDlsch(RgSchCellCb *cellCb)
-{
-
- if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].lcId != RGSCH_INVALID_LC_ID)
- {
- return (&(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1]));
- }
- return (NULLP);
-} /* rgSCHDbmGetFirstBcchOnDlsch */
-
-/**
- * @brief Handler for accessing the existing BCCH mapped on to DLSCH in the
- * lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetSecondBcchOnDlsch
- *
- *
- * @param[in] *cellCb
- * @return RgSchClcDlLcCb*
- **/
-RgSchClcDlLcCb* rgSCHDbmGetSecondBcchOnDlsch(RgSchCellCb *cellCb)
-{
-
- if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].lcId != RGSCH_INVALID_LC_ID)
- {
- return (&(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2]));
- }
- return (NULLP);
-} /* rgSCHDbmGetSecondBcchOnDlsch */
-
-/**
- * @brief Handler for accessing the existing PCCH in the lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmGetPcch
- *
- *
- * @param[in] *cellCb
- * @return RgSchClcDlLcCb*
- **/
-RgSchClcDlLcCb* rgSCHDbmGetPcch(RgSchCellCb *cellCb)
-{
-
- if(cellCb->cmnLcCb[RGSCH_PCCH_IDX].lcId != RGSCH_INVALID_LC_ID)
- {
- return (&(cellCb->cmnLcCb[RGSCH_PCCH_IDX]));
- }
- return (NULLP);
-} /* rgSCHDbmGetPcch */
-
-/**
- * @brief Handler for inserting the BCCH mapped on to BCH in the
- * lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmInsBcchOnBch
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-Void rgSCHDbmInsBcchOnBch(RgSchCellCb *cellCb, RgSchClcDlLcCb *cmnDlLcCb)
-{
-
- cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX].lcId = cmnDlLcCb->lcId;
- cellCb->cmnLcCb[RGSCH_BCCH_BCH_IDX].boLst = cmnDlLcCb->boLst;
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmInsBcchOnBch */
-
-/**
- * @brief Handler for inserting the BCCH mapped on to DLSCH in the
- * lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmInsBcchOnDlsch
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-Void rgSCHDbmInsBcchOnDlsch(RgSchCellCb *cellCb, RgSchClcDlLcCb *cmnDlLcCb)
-{
- if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].lcId == RGSCH_INVALID_LC_ID)
- {
- cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].lcId = cmnDlLcCb->lcId;
- cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].boLst = cmnDlLcCb->boLst;
- cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX1].si = FALSE;
- }
- else if(cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].lcId == RGSCH_INVALID_LC_ID)
- {
- cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].lcId = cmnDlLcCb->lcId;
- cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].boLst = cmnDlLcCb->boLst;
- cellCb->cmnLcCb[RGSCH_BCCH_DLSCH_IDX2].si = TRUE;
- }
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmInsBcchOnDlsch */
-
-
-/**
- * @brief Handler for inserting the PCCH in the lcCbLst of the ueCb.
- *
- * @details
- *
- * Function : rgSCHDbmInsPcch
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-Void rgSCHDbmInsPcch(RgSchCellCb *cellCb, RgSchClcDlLcCb *cmnDlLcCb)
-{
-
- cellCb->cmnLcCb[RGSCH_PCCH_IDX].lcId = cmnDlLcCb->lcId;
- cellCb->cmnLcCb[RGSCH_PCCH_IDX].boLst = cmnDlLcCb->boLst;
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmInsPcch */
-
-/**
- * @brief Handler for initializing the boLst.
- *
- * @details
- *
- * Function : rgSCHDbmInitCmnLcBoLst
- *
- *
- * @param[in] *cmnDlLcCb
- * @return Void
- **/
-Void rgSCHDbmInitCmnLcBoLst(RgSchClcDlLcCb *cmnDlLcCb)
-{
-
- cmLListInit(&cmnDlLcCb->boLst);
- return;
-} /* rgSCHDbmInitCmnLcBoLst */
-
-/**
- * @brief Handler for inserting the bo report in to the boLst.
- *
- * @details
- *
- * Function : rgSCHDbmInsCmnLcBoRpt
- *
- *
- * @param[in] *cmnDlLcCb
- * @param[in] *boRpt
- * @return Void
- **/
-Void rgSCHDbmInsCmnLcBoRpt(RgSchClcDlLcCb *cmnDlLcCb,RgSchClcBoRpt *cmnBoRpt)
-{
- cmnBoRpt->boLstEnt.next = NULLP;
- cmnBoRpt->boLstEnt.prev = NULLP;
- cmnBoRpt->boLstEnt.node = (PTR)cmnBoRpt;
- cmLListAdd2Tail(&cmnDlLcCb->boLst, &cmnBoRpt->boLstEnt);
- return;
-} /* rgSCHDbmInsCmnLcBoRpt */
-
-
-/**
- * @brief Handler for initializing the raCbLst.
- *
- * @details
- *
- * Function : rgSCHDbmInitRaCbLst
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-static Void rgSCHDbmInitRaCbLst(RgSchCellCb *cellCb)
-{
-
- cmLListInit(&cellCb->raInfo.raCbLst);
- return;
-} /* rgSCHDbmInitRaCbLst */
-
-
-/**
- * @brief Handler for accessing the existing raCb in the raCbLst.
- *
- * @details
- *
- * Function : rgSCHDbmGetRaCb
- *
- *
- * @param[in] *cellCb
- * @param[in] key
- * @return RgSchRaCb*
- **/
-RgSchRaCb* rgSCHDbmGetRaCb(RgSchCellCb *cellCb, CmLteRnti key)
-{
- CmLList *tmpNode;
-
- CM_LLIST_FIRST_NODE(&cellCb->raInfo.raCbLst,tmpNode);
- while(tmpNode)
- {
- if(((RgSchRaCb *)tmpNode->node)->tmpCrnti == key)
- {
- return ((RgSchRaCb *)(tmpNode->node));
- }
- CM_LLIST_NEXT_NODE(&cellCb->raInfo.raCbLst,tmpNode);
- }
- return (NULLP);
-} /* rgSCHDbmGetRaCb */
-
-#ifndef LTE_TDD
-/**
- * @brief Handler for initializing the raReqLst.
- g
- * @details
- *
- * Function : rgSCHDbmInitRaReqLst
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-static Void rgSCHDbmInitRaReqLst(RgSchCellCb *cellCb)
-{
- uint8_t idx;
-
- /* ccpu00133557- Memory Leak Fix- initializing for the all nodes
- * in RAREQ list*/
- for(idx = 0; idx < RGSCH_RAREQ_ARRAY_SIZE; idx++)
- {
- cmLListInit(&cellCb->raInfo.raReqLst[idx]);
- }
- return;
-} /* rgSCHDbmInitRaReqLst */
-#endif
-
-/**
- * @brief Handler for initializing the crnt rgr cfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmInitCrntRgrCfgLst
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-static Void rgSCHDbmInitCrntRgrCfgLst(RgSchCellCb *cellCb)
-{
-
- cmLListInit(&cellCb->rgCfgInfo.crntRgrCfgLst);
- return;
-} /* rgSCHDbmInitCrntRgrCfgLst */
-
-/**
- * @brief Handler for initializing the pndng rgr cfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmInitPndngRgrCfgLst
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-static Void rgSCHDbmInitPndngRgrCfgLst(RgSchCellCb *cellCb)
-{
-
- cmLListInit(&cellCb->rgCfgInfo.pndngRgrCfgLst);
- return;
-} /* rgSCHDbmInitPndngRgrCfgLst */
-
-/**
- * @brief Handler for inserting the cfgElem in to the crntRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmInsCrntRgrCfgElem
- *
- *
- * @param[in] *cellCb
- * @param[in] *cfgElem
- * @return Void
- **/
-Void rgSCHDbmInsCrntRgrCfgElem(RgSchCellCb *cellCb,RgSchCfgElem *cfgElem)
-{
- cfgElem->cfgReqLstEnt.next = NULLP;
- cfgElem->cfgReqLstEnt.prev = NULLP;
- cmLListAdd2Tail(&cellCb->rgCfgInfo.crntRgrCfgLst, &cfgElem->cfgReqLstEnt);
- return;
-} /* rgSCHDbmInsCrntRgrCfgElem */
-
-/**
- * @brief Handler for inserting the cfgElem in to the pndngRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmInsPndngRgrCfgElem
- *
- *
- * @param[in] *cellCb
- * @param[in] *cfgElem
- * @return Void
- **/
-Void rgSCHDbmInsPndngRgrCfgElem(RgSchCellCb *cellCb,RgSchCfgElem *cfgElem)
-{
-
- cfgElem->cfgReqLstEnt.next = NULLP;
- cfgElem->cfgReqLstEnt.prev = NULLP;
- cfgElem->cfgReqLstEnt.node = (PTR)cfgElem;
- cmLListAdd2Tail(&cellCb->rgCfgInfo.pndngRgrCfgLst, &cfgElem->cfgReqLstEnt);
- return;
-} /* rgSCHDbmInsPndngRgrCfgElem */
-
-/**
- * @brief Handler for accessing the existing cfgElem in the crntRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmGetNextCrntRgrCfgElem
- *
- *
- * @param[in] *cellCb
- * @param[in] *cfgElem
- * @return RgSchCfgElem*
- **/
-RgSchCfgElem* rgSCHDbmGetNextCrntRgrCfgElem(RgSchCellCb *cellCb,RgSchCfgElem *cfgElem)
-{
-
- if(!cfgElem)
- {
- return ( cellCb->rgCfgInfo.crntRgrCfgLst.first ?
- (RgSchCfgElem *)(cellCb->rgCfgInfo.crntRgrCfgLst.first->node) : NULLP );
- }
- return ( cfgElem->cfgReqLstEnt.next ?
- (RgSchCfgElem *)(cfgElem->cfgReqLstEnt.next->node) : NULLP );
-} /* rgSCHDbmGetNextCrntRgrCfgElem */
-
-/**
- * @brief Handler for accessing the existing cfgElem in the pndngRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmGetNextPndngRgrCfgElem
- *
- *
- * @param[in] *cellCb
- * @param[in] *cfgElem
- * @return RgSchCfgElem*
- **/
-RgSchCfgElem* rgSCHDbmGetNextPndngRgrCfgElem(RgSchCellCb *cellCb,RgSchCfgElem *cfgElem)
-{
-
- if(!cfgElem)
- {
- return ( cellCb->rgCfgInfo.pndngRgrCfgLst.first ?
- (RgSchCfgElem *)(cellCb->rgCfgInfo.pndngRgrCfgLst.first->node) : NULLP );
- }
- return ( cfgElem->cfgReqLstEnt.next ?
- (RgSchCfgElem *)(cfgElem->cfgReqLstEnt.next->node) : NULLP );
-} /* rgSCHDbmGetNextPndngRgrCfgElem */
-
-/**
- * @brief Handler for extracting the existing cfgElem from the pndngRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmGetPndngRgrCfgElemByKey
- *
- *
- * @param[in] *cellCb
- * @param[in] key
- * @return RgSchCfgElem*
- **/
-RgSchCfgElem* rgSCHDbmGetPndngRgrCfgElemByKey(RgSchCellCb *cellCb,CmLteTimingInfo key)
-{
- CmLList *tmpNode;
-
- CM_LLIST_FIRST_NODE(&cellCb->rgCfgInfo.pndngRgrCfgLst,tmpNode);
- while(tmpNode)
- {
- if((((RgSchCfgElem *)tmpNode->node)->actvTime.sfn == key.sfn) &&
- (((RgSchCfgElem *)tmpNode->node)->actvTime.slot == key.slot))
- {
- return ((RgSchCfgElem *)(tmpNode->node));
- }
- CM_LLIST_NEXT_NODE(&cellCb->rgCfgInfo.pndngRgrCfgLst,tmpNode);
- }
- return (NULLP);
-} /* rgSCHDbmGetPndngRgrCfgElemByKey */
-
-/**
- * @brief Handler for deleting the existing cfgElem from the crntRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmDelCrntRgrCfgElem
- *
- *
- * @param[in] *cellCb
- * @param[in] *cfgElem
- * @return RgSchCfgElem*
- **/
-RgSchCfgElem* rgSCHDbmDelCrntRgrCfgElem(RgSchCellCb *cellCb,RgSchCfgElem *cfgElem)
-{
-
- if(cmLListDelFrm(&cellCb->rgCfgInfo.crntRgrCfgLst,&cfgElem->cfgReqLstEnt))
- {
- return ((RgSchCfgElem *)(cfgElem->cfgReqLstEnt.node));
- }
- return (NULLP);
-} /* rgSCHDbmDelCrntRgrCfgElem */
-
-/**
- * @brief Handler for deleting the existing cfgElem from the pndngRgrCfgLst.
- *
- * @details
- *
- * Function : rgSCHDbmDelPndngRgrCfgElem
- *
- *
- * @param[in] *cellCb
- * @param[in] *cfgElem
- * @return RgSchCfgElem*
- **/
-RgSchCfgElem* rgSCHDbmDelPndngRgrCfgElem(RgSchCellCb *cellCb,RgSchCfgElem *cfgElem)
-{
- if(cmLListDelFrm(&cellCb->rgCfgInfo.pndngRgrCfgLst,&cfgElem->cfgReqLstEnt))
- {
- return ((RgSchCfgElem *)(cfgElem->cfgReqLstEnt.node));
- }
- return (NULLP);
-} /* rgSCHDbmDelPndngRgrCfgElem */
-
-/**
- * @brief Handler for initializing the rntiDb.
- *
- * @details
- *
- * Function : rgSCHDbmRntiDbInit
- *
- *
- * @param[in] *cellCb
- * @param[in] rntiStart
- * @param[in] maxRntis
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmRntiDbInit(RgSchCellCb *cellCb,uint16_t rntiStart,uint16_t maxRntis)
-{
- uint16_t rnti;
- RgSchRntiLnk *rntiPool;
-
- /* Fix for Change Request ccpu00099150 */
- if(rgSCHUtlAllocSBuf(cellCb->instIdx,
- (Data **)&cellCb->rntiDb.rntiPool,maxRntis*sizeof(RgSchRntiLnk)) != ROK)
- {
- return RFAILED;
- }
- cellCb->rntiDb.rntiStart = rntiStart;
- cellCb->rntiDb.maxRntis = maxRntis;
-
- cellCb->rntiDb.count = maxRntis;
-
- rnti = rntiStart;
- rntiPool = cellCb->rntiDb.rntiPool;
- if (maxRntis == 1)
- {
- rntiPool[0].rnti = rnti;
- rntiPool[0].prv = NULLP;
- rntiPool[0].nxt = NULLP;
- cellCb->rntiDb.lastRnti = &rntiPool[0];
- }
- else
- {
- uint16_t idx;
- rntiPool[0].rnti = rnti++;
- rntiPool[0].prv = NULLP;
- rntiPool[0].nxt = &rntiPool[1];
- for (idx = 1; idx < maxRntis - 1; ++idx)
- {
- rntiPool[idx].rnti = rnti++;
- rntiPool[idx].prv = &rntiPool[idx-1];
- rntiPool[idx].nxt = &rntiPool[idx+1];
- }
- rntiPool[idx].rnti = rnti++;
- rntiPool[idx].prv = &rntiPool[idx-1];
- rntiPool[idx].nxt = NULLP;
- cellCb->rntiDb.lastRnti = &rntiPool[idx];
- }
- cellCb->rntiDb.freeRnti = &rntiPool[0];
- return ROK;
-} /* rgSCHDbmRntiDbInit */
-
-/**
- * @brief Handler for de-initializing the rntiDb.
- *
- * @details
- *
- * Function : rgSCHDbmRntiDbDeInit
- *
- *
- * @param[in] *cellCb
- * @return Void
- **/
-Void rgSCHDbmRntiDbDeInit(RgSchCellCb *cellCb)
-{
- /* ccpu00117052 - MOD - Passing double pointer
- for proper NULLP assignment*/
- rgSCHUtlFreeSBuf(cellCb->instIdx, (Data **)(&(cellCb->rntiDb.rntiPool)),
- cellCb->rntiDb.maxRntis*sizeof(RgSchRntiLnk));
- cellCb->rntiDb.maxRntis = 0;
- cellCb->rntiDb.freeRnti = NULLP;
- cellCb->rntiDb.lastRnti = NULLP;
- cmLListInit(&cellCb->rntiDb.rntiGuardPool);
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmRntiDbDeInit */
-
-/**
- * @brief Handler for accessing the free RNTI.
- *
- * @details
- *
- * Function : rgSCHDbmGetRnti
- *
- *
- * @param[in] *cellCb
- * @return RgSchRntiLnk*
- **/
-RgSchRntiLnk* rgSCHDbmGetRnti(RgSchCellCb *cellCb)
-{
- RgSchRntiLnk *rntiLnk;
-
- if (!(cellCb->rntiDb.freeRnti))
- {
- DU_LOG("\nERROR --> SCH : RNTI exhausted count:%d",
- cellCb->rntiDb.count);
- return (NULLP);
- }
-
- rntiLnk = cellCb->rntiDb.freeRnti;
- cellCb->rntiDb.freeRnti = rntiLnk->nxt;
-
- /* setting prv and nxt to NULLP may not be needed */
- rntiLnk->prv = NULLP;
- rntiLnk->nxt = NULLP;
-
- if (cellCb->rntiDb.freeRnti != NULLP)
- {
- cellCb->rntiDb.freeRnti->prv = NULLP;
- }
- else
- {
- cellCb->rntiDb.lastRnti = NULLP;
- }
-
- cellCb->rntiDb.count--;
-
- DU_LOG("\nINFO --> SCH : rgSCHDbmGetRnti::rntiLnk->rnti %u\n",rntiLnk->rnti);
- return (rntiLnk);
-} /* rgSCHDbmGetRnti */
-
-/**
- * @brief Handler for releasing the RNTI.
- *
- * @details
- *
- * Function : rgSCHDbmRlsRnti
- *
- *
- * @param[in] *cellCb
- * @param[in] rntiLnk
- * @return Void
- **/
-Void rgSCHDbmRlsRnti(RgSchCellCb *cellCb,RgSchRntiLnk *rntiLnk)
-{
-#ifdef EMTC_ENABLE
- if(ROK==rgSCHDbmPutEmtcRnti(cellCb,rntiLnk))
-{
-return;
-}
-#endif
- rntiLnk->nxt = NULLP;
- if (cellCb->rntiDb.lastRnti)
- {
- cellCb->rntiDb.lastRnti->nxt = rntiLnk;
- rntiLnk->prv = cellCb->rntiDb.lastRnti;
- }
- else
- {
- rntiLnk->prv = NULLP;
- cellCb->rntiDb.freeRnti = rntiLnk;
- }
- cellCb->rntiDb.lastRnti = rntiLnk;
-
- cellCb->rntiDb.count++;
-
- /* Stack Crash problems for TRACE5 Changes. Added the return below */
- return;
-
-} /* rgSCHDbmRlsRnti */
-
-#ifdef LTE_TDD
-/**
- * @brief Handler for initializing the ueTfuPendLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmInitUeTfuPendLst
- *
- *
- * @param[in] *cellCb
- * @param[in] numBins
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-static S16 rgSCHDbmInitUeTfuPendLst(RgSchCellCb *cellCb,uint16_t numBins)
-{
- RgSchUePucchRecpInfo pucchInfo;
-
- /* Fix: syed It is better to compute offset dynamically
- * rather than hardcoding it as 0 */
- if(cmHashListInit(&cellCb->ueTfuPendLst, numBins, (uint16_t)((PTR)&(pucchInfo.hashLstEnt) - (PTR)&pucchInfo), FALSE,
- CM_HASH_KEYTYPE_CONID,
- rgSchCb[cellCb->instIdx].rgSchInit.region,
- rgSchCb[cellCb->instIdx].rgSchInit.pool) != ROK)
- {
- return RFAILED;
- }
-
- return ROK;
-
-} /* rgSCHDbmInitUeTfuPendLst */
-
-/**
- * @brief Handler for de-initializing the ueTfuPendLst under the cellCb.
- *
- * @details
- *
- * Function : rgSCHDbmDeInitUeTfuPendLst
- *
- *
- * @param[in] *cellCb
- * @return S16
- * -# ROK
- * -# RFAILED
- **/
-S16 rgSCHDbmDeInitUeTfuPendLst(RgSchCellCb *cellCb)
-{
-
- cmHashListDeinit(&cellCb->ueTfuPendLst);
-
- return ROK;
-} /* rgSCHDbmDeInitUeTfuPendLst */
-#endif
-
-/**********************************************************************
-
- End of file
-**********************************************************************/