--- /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 include file
+
+ Desc: Defines required by LTE MAC
+
+ File: rg_sch.x
+
+**********************************************************************/
+/** @file rg_sch.x
+@brief This file contains basic data structures for the scheuler.
+*/
+
+#ifdef TENB_STATS
+#include "pj_tenb_stats.x"
+#endif
+
+#ifndef __SCH__
+#define __SCH__
+
+#ifdef TENB_STATS
+#include "l2_tenb_stats.x"
+#endif
+
+#ifdef EMTC_ENABLE
+#include "rg_sch_emtc.x"
+#endif
+
+typedef struct rgSchHistNode
+{
+ U32 line;
+ S8* file;
+ const S8* func;
+ Void * dbgVal; /* This is specific to the data struct being debug
+ for example if the debugging is done fo list
+ then this should contain the node address */
+ U32 action;
+}RgSchHistNode;
+
+#define MAX_HIST_NODES 50
+
+#define RGSCH_ACTION_ADD 11
+#define RGSCH_ACTION_DEL 12
+
+typedef struct rgSchHistInfo
+{
+ U32 histCount;
+ RgSchHistNode hist[MAX_HIST_NODES];
+}RgSchHistInfo;
+
+#define RG_SCH_RECORD(_histInfo,_action,_dbgVal)\
+{\
+ (_histInfo)->hist[(_histInfo)->histCount%MAX_HIST_NODES].file = __FILE__;\
+ (_histInfo)->hist[(_histInfo)->histCount%MAX_HIST_NODES].func = __FUNCTION__;\
+ (_histInfo)->hist[(_histInfo)->histCount%MAX_HIST_NODES].line = __LINE__;\
+ (_histInfo)->hist[(_histInfo)->histCount%MAX_HIST_NODES].action = _action;\
+ (_histInfo)->hist[(_histInfo)->histCount%MAX_HIST_NODES].dbgVal = _dbgVal;\
+ (_histInfo)->histCount++;\
+}
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef TfuDciFormat1aInfo RgDciFmt1AInfo;
+typedef TfuRaReqInfo RgTfuRaReqInfo;
+typedef TfuSubbandCqiInfo RgSchSubbandCqiInfo;
+typedef TfuHqIndInfo RgTfuHqIndInfo;
+typedef TfuHqInfo RgTfuHqInfo;
+typedef TfuCntrlReqInfo RgTfuCntrlReqInfo;
+
+/* Forward declarations for some structures */
+#ifdef LTE_L2_MEAS
+typedef struct rgSchL2MeasCb RgSchL2MeasCb;
+#endif /* LTE_L2_MEAS */
+typedef struct rgSchQciCb RgSchQciCb;
+typedef struct rgSchUeCb RgSchUeCb;
+typedef struct rgSchCellCb RgSchCellCb;
+typedef struct rgSchErrInfo RgSchErrInfo;
+typedef struct rgSchUlAlloc RgSchUlAlloc;
+typedef struct rgSchUlRetxAlloc RgSchUlRetxAlloc;
+typedef struct rgSchUlHqProcCb RgSchUlHqProcCb;
+typedef struct rgSchDlHqProcCb RgSchDlHqProcCb;
+/* Changes for MIMO feature addition */
+/* Removed dependency on MIMO compile-time flag */
+typedef struct rgSchDlHqTbCb RgSchDlHqTbCb;
+typedef struct rgSchLcgCb RgSchLcgCb;
+typedef struct rgSchDlHqEnt RgSchDlHqEnt;
+typedef struct rgSchRaCb RgSchRaCb;
+typedef struct _rgSchCb RgSchCb;
+typedef struct rgSchUlLcCb RgSchUlLcCb;
+typedef struct rgSchDlLcCb RgSchDlLcCb;
+typedef struct _rgSchdApis RgSchdApis;
+#ifdef LTE_TDD
+typedef struct rgSchTddPhichOffInfo RgSchTddPhichOffInfo;
+typedef U8 RgSchTddNpValTbl[RGSCH_TDD_MAX_P_PLUS_ONE_VAL];
+#endif
+/* Added support for SPS*/
+#ifdef LTEMAC_SPS
+typedef struct rgSchDlSfAllocInfo RgSchDlSfAllocInfo;
+#endif
+
+typedef struct rgSchUeCellInfo RgSchUeCellInfo;
+/**
+ * @brief
+ * Scheduler APIs
+ */
+struct _rgSchdApis
+{
+ S16 (*rgSCHRgrUeCfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgrUeCfg *cfg,
+ RgSchErrInfo *err));
+ S16 (*rgSCHRgrUeRecfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgrUeRecfg *recfg,
+ RgSchErrInfo *err));
+ Void (*rgSCHFreeUe) ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+ S16 (*rgSCHRgrCellCfg) ARGS((RgSchCellCb *cell, RgrCellCfg *cfg,
+ RgSchErrInfo *err));
+ S16 (*rgSCHRgrCellRecfg) ARGS((RgSchCellCb *cell, RgrCellRecfg *recfg,
+ RgSchErrInfo *err));
+ Void (*rgSCHFreeCell) ARGS((RgSchCellCb *cell));
+ S16 (*rgSCHRgrLchCfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchDlLcCb *dl, RgrLchCfg *cfg, RgSchErrInfo *errInfo));
+ S16 (*rgSCHRgrLcgCfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchLcgCb *lcg, RgrLcgCfg *cfg, RgSchErrInfo *errInfo));
+ S16 (*rgSCHRgrLchRecfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchDlLcCb *dl, RgrLchRecfg *recfg,
+ RgSchErrInfo *errInfo));
+ S16 (*rgSCHRgrLcgRecfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchLcgCb *lcg, RgrLcgRecfg *recfg, RgSchErrInfo *errInfo));
+ Void (*rgSCHFreeDlLc) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgSchDlLcCb *dlLc));
+ Void (*rgSCHFreeLcg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgSchLcgCb *lcg));
+ S16 (*rgSCHRgrLchDel) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,CmLteLcId lcId, \
+ U8 lcgId));
+ Void (*rgSCHActvtUlUe) ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+ Void (*rgSCHActvtDlUe) ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+ Void (*rgSCHHdlUlTransInd) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo timingInfo));
+ Void (*rgSCHUeReset) ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+ S16 (*rgSCHUpdBsrShort) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgSchLcgCb *ulLcg, U8 bsr, RgSchErrInfo *err));
+ S16 (*rgSCHUpdBsrTrunc) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgSchLcgCb *ulLcg, U8 bsr, RgSchErrInfo *err));
+ S16 (*rgSCHUpdBsrLong) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, U8 bsArr[], RgSchErrInfo *err));
+ S16 (*rgSCHUpdPhr) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, U8 phr, RgSchErrInfo *err));
+ S16 (*rgSCHUpdExtPhr) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgInfExtPhrCEInfo * extPhr, RgSchErrInfo *err));
+#ifdef RG_UNUSED
+ S16 (*rgSCHUpdUlHqProc) ARGS((RgSchCellCb *cell, RgSchUlHqProcCb *curProc,
+ RgSchUlHqProcCb *oldProc));
+#endif
+ S16 (*rgSCHContResUlGrant) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgSchErrInfo *err));
+ S16 (*rgSCHSrRcvd) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, CmLteTimingInfo, RgSchErrInfo *err));
+ S16 (*rgSCHTti) ARGS((RgSchCellCb *cell, RgSchErrInfo *err));
+ Void (*rgSCHUlCqiInd) ARGS(( RgSchCellCb *cell, RgSchUeCb *ue, TfuUlCqiRpt *ulCqiInfo));
+ Void (*rgSCHPucchDeltaPwrInd) ARGS(( RgSchCellCb *cell,
+ RgSchUeCb *ue, S8 delta));
+ S16 (*rgSCHlUeReset) ARGS(( RgSchCellCb *cell, RgSchUeCb *ue));
+ Void (*rgSCHDlDedBoUpd) ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgSchDlLcCb *svc));
+ /* ccpu00105914: PHR handling for MSG3 */
+ Void (*rgSCHUlRecMsg3Alloc) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchRaCb *raCb));
+ Void (*rgSCHUlHqProcForUe) ARGS((RgSchCellCb *cell, CmLteTimingInfo frm,
+ RgSchUeCb *ue, RgSchUlHqProcCb **procRef));
+ RgSchUlAlloc *(*rgSCHFirstRcptnReq) ARGS((RgSchCellCb *cell));
+ RgSchUlAlloc *(*rgSCHNextRcptnReq) ARGS((RgSchCellCb *cell,
+ RgSchUlAlloc *alloc));
+ RgSchUlAlloc *(*rgSCHFirstHqFdbkAlloc) ARGS((RgSchCellCb *cell, U8 idx));
+ RgSchUlAlloc *(*rgSCHNextHqFdbkAlloc) ARGS((RgSchCellCb *cell,
+ RgSchUlAlloc *alloc,U8 idx));
+ Void (*rgSCHDlProcAddToRetx) ARGS((RgSchCellCb *cell,RgSchDlHqProcCb *hqP));
+ Void (*rgSCHDlCqiInd) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ Bool isPucchInfo, Void *dlCqi, CmLteTimingInfo timingInfo));
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+Void (*rgSCHSrsInd) ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ TfuSrsRpt* srsInd, CmLteTimingInfo timingInfo));
+#endif
+
+ Void (*rgSCHDlTARpt) ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+ /* Changes for MIMO feature addition */
+ /* Removed dependency on MIMO compile-time flag */
+ Void (*rgSCHDlRlsSubFrm) ARGS((RgSchCellCb *cell, CmLteTimingInfo subFrm));
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ Void (*rgSCHHdlCrntiCE) ARGS((RgSchCellCb *cell, RgSchUeCb * ue));
+ Void (*rgSCHDlProcAck) ARGS((RgSchCellCb *cell, RgSchDlHqProcCb *hqP));
+ Void (*rgSCHDlProcDtx) ARGS((RgSchCellCb *cell, RgSchDlHqProcCb *hqP));
+ Void (*rgSCHDlRelPdcchFbk) ARGS((RgSchCellCb *cell, RgSchUeCb * ue,
+ U8 isAck));
+ Void (*rgSCHUlSpsRelInd) ARGS((RgSchCellCb *cell, RgSchUeCb * ue,
+ Bool isExplRel));
+
+ Void (*rgSCHUlSpsActInd) ARGS((RgSchCellCb *cell, RgSchUeCb * ue,
+ U16 sduSuze));
+
+ Void (*rgSCHUlCrcFailInd) ARGS((RgSchCellCb *cell, RgSchUeCb * ue,
+ CmLteTimingInfo crcTime));
+ Void (*rgSCHUlCrcInd) ARGS((RgSchCellCb *cell, RgSchUeCb * ue,
+ CmLteTimingInfo crcTime));
+#endif /* LTEMAC_SPS */
+ Void (*rgSCHDrxStrtInActvTmrInUl) ARGS((RgSchCellCb *cell));
+ Void (*rgSCHUpdUeDataIndLcg) ARGS((RgSchCellCb *cell, RgSchUeCb * ue, RgInfUeDatInd *datInd));
+#ifdef LTE_ADV
+ S16 (*rgSCHRgrSCellUeCfg) ARGS((RgSchCellCb *cell, RgSchUeCb *ue ,RgrUeSecCellCfg *sCellInfoCfg,
+ RgSchErrInfo *err));
+ S16 (*rgSCHRgrSCellUeDel) ARGS((RgSchUeCellInfo *sCellInfo, RgSchUeCb *ue));
+#endif
+#ifdef EMTC_ENABLE
+ Void (*rgSCHUlProcAddToRetx) ARGS((RgSchCellCb *cell,RgSchUlHqProcCb *hqP));
+#endif
+};
+
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+
+/**
+* @brief Periodic CQI/PMI/RI configuration parameters information
+*/
+typedef RgrUePrdDlCqiCfg RgSchUeDlPCqiCfg;
+
+/**
+* @brief Periodic CQI Setup configuration parameters information
+*/
+/* Reference: 36.313: CQI-ReportPeriodic */
+typedef RgrUeDlPCqiSetup RgSchUeDlPCqiSetup;
+
+/**
+* @brief SRS configuration parameters information
+*/
+/* Reference 36.313 SoundingRS-UL-Config */
+
+typedef RgrUeUlSrsCfg RgSchUeUlSrsCfg;
+
+
+/**
+* @brief SRS configuration setup parameters information
+*/
+/* Reference 36.313 SoundingRS-UL-Config */
+
+typedef RgrUeUlSrsSetupCfg RgSchUeSrsUlSetupCfg;
+
+/**
+* @brief SR configuration parameters information
+*/
+
+typedef RgrUeSrCfg RgSchUeSrCfg;
+
+/**
+* @brief SR Setup configuration parameters information
+*/
+
+typedef RgrUeSrSetupCfg RgSchUeSrSetupCfg;
+
+#define IOT_INVALID_FREQSTART 0xffffffff
+#define IOT_INFINITE_SIZE 0xffffffff
+#define RGSCH_IOT_PDCCH_POOLSZ 100
+#define RGSCH_IOT_PDSCH_POOLSZ 100
+#define RGSCH_IOT_PUSCH_POOLSZ 100
+#define RGSCH_IOT_PUCCH_POOLSZ 100
+#define RGSCH_IOT_SCHED_POOLSZ 100
+/* TODO: Minimum Delta between CRNT Time and TX time */
+#define RGSCH_IOT_PDCCH_DELTA RG_SCH_CMN_DL_DELTA
+#define RGSCH_IOT_PDSCH_DELTA RG_SCH_CMN_DL_DELTA - 1 /* UL_CNTRL_DELTA value is 2*/
+#define RGSCH_IOT_PUCCH_DELTA 6
+#define RGSCH_IOT_PUSCH_DELTA 6
+#define RGSCH_IOT_PDCCH_MAXFREQSZ 24 /* MAX num of eCCEs per SF */
+#define RGSCH_IOT_PDSCH_MAXFREQSZ 100 /* MAX num of PDSCH RB per SF */
+#define RGSCH_IOT_PUCCH_MAXFREQSZ 2048 /* MAx num of PUCCH resource per SF */
+#define RGSCH_IOT_PUSCH_MAXFREQSZ 100 /* MAx num of PUSCh RB per SF */
+#define RGSCH_IOT_SCHED_MAXFREQSZ 1 /*Resource only in Time domain */
+#define RGSCH_IOT_PUCCH_INVALID_FREQ 2049
+/**
+ * @brief
+ * IoT PDCCH/PDSCH/PUSCH/PUCCH resource definition.
+ * For Iot Devices resource can span multiple subframes
+ * Hence resource is defined as a set of freq resources
+ * over a set of consecutive valid subframes
+ */
+typedef struct rgSchIotRes
+{
+ U32 resType;
+ PTR allctdBy;
+ CmLteTimingInfo timeStart;
+ CmLteTimingInfo timeEnd;
+ U32 tSize;
+ U8 freqStart;
+ U8 freqEnd;
+ U32 fSize;
+ CmLList lnk; /*!< Link to other Fragments or Allocs in resMngmt */
+ CmLList cbLnk; /*!< Link to other allocs in a given control block (ueCb) */
+ CmLList resLnk;/*!<Link to resList in UE*/
+} RgSchIotRes;
+
+/**
+ * @brief
+ * IoT PDCCH/PDSCH/PUSCH resource control block.
+ * Has pre-initialized pool of resources of #poolSize.
+ * allocList will hold the allocations for PDCCH/PUSCH/PDSCH
+ * fragList will hold the context of fragments in resource
+ */
+typedef struct rgSchIotResCb
+{
+ U32 poolSz;
+ RgSchIotRes *resources;
+ CmLListCp resPool;
+ U8 maxFreqSz; /*!< Max Number of RBs/SCs/CCEs per Subframe */
+ U32 deltaTime; /*!< PDCCH/PUSCH/PDSCH Delta w.r.t current time */
+ RgSchIotRes *contRes; /*!< Represents continuous availability of resource
+ in frequency and time domain */
+ CmLListCp fragList; /*!< Represents list of fragmented resourcesi b4
+ contRes, ordered in time domain */
+ CmLListCp allocList; /*!< Represents list of resources allocated which
+ are ordered in time domain */
+} RgSchIotResCb;
+
+
+/**
+ * @brief
+ * IoT Resource Management Control Block
+ * for PDCCH, PDSCH and PUSCH resources
+ */
+typedef struct rgSchIotResMngmtCb
+{
+ RgSchIotResCb pdcchResCb;
+ RgSchIotResCb pdschResCb;
+ RgSchIotResCb puschResCb;
+ RgSchIotResCb pucchHqFdbkCb;
+} RgSchIotResMngmtCb;
+
+PUBLIC S16 rgSCHUtlIotResPrcTti ARGS((
+RgSchCellCb *cell
+));
+
+PUBLIC Void rgSCHUtlIotInsAlloc2Lst ARGS((
+CmLListCp *allocList,
+RgSchIotRes *alloc,
+CmLList *lnk
+));
+
+PUBLIC S16 rgSCHUtlIotResMngmtInit ARGS((
+ RgSchCellCb *cell,
+ U32 pdcchPoolSz,
+ U32 pdcchDelta,
+ U32 pdcchMaxFreqSz,
+ U32 pdschPoolSz,
+ U32 pdschDelta,
+ U32 pdschMaxFreqSz,
+ U32 puschPoolSz,
+ U32 puschDelta,
+ U32 puschMaxFreqSz
+ ));
+
+PUBLIC Void rgSCHUtlIotResMngmtDeinit ARGS((
+ RgSchCellCb *cell
+ ));
+
+PUBLIC RgSchIotRes *rgSCHUtlIotAllocRes ARGS((
+ RgSchIotResCb *resCb,
+ U32 fStart,
+ U32 fSize,
+ CmLteTimingInfo tStart,
+ U32 tSize,
+ Bool isForEnable
+ ));
+
+PUBLIC RgSchIotRes *rgSCHUtlIotFirstAllocForTx ARGS((
+ RgSchIotResCb *resCb,
+ CmLteTimingInfo txTime
+ ));
+
+PUBLIC RgSchIotRes *rgSCHUtlIotNextAllocForTx ARGS((
+ RgSchIotResCb *resCb,
+ RgSchIotRes *prevAlloc,
+ CmLteTimingInfo txTime
+ ));
+
+PUBLIC Void rgSCHUtlIotAllocRls ARGS((
+ RgSchIotResCb *resCb,
+ RgSchIotRes *alloc
+ ));
+
+PUBLIC RgSchIotRes *rgSCHUtlEmtcAllocRes ARGS((
+ RgSchIotResCb *resCb,
+ U32 *fStart,
+ U32 *fEnd,
+ CmLteTimingInfo tStart,
+ U32 tSize,
+ U32 numPrb,
+ Bool isRetx
+ ));
+
+PUBLIC S16 rgSCHUtlEmtcResPrcTti ARGS((
+ RgSchCellCb *cell
+ ));
+
+PUBLIC S16 rgSCHUtlEmtcResMngmtInit ARGS((
+ RgSchCellCb *cell,
+ U32 pdschPoolSz,
+ U32 pdschDelta,
+ U32 pdschMaxFreqSz,
+ U32 puschPoolSz,
+ U32 puschDelta,
+ U32 puschMaxFreqSz,
+ U32 pucchPoolSz,
+ U32 pucchDelta,
+ U32 pucchMaxFreqSz
+ ));
+
+PUBLIC Void rgSCHUtlEmtcResMngmtDeinit ARGS((
+ RgSchCellCb *cell
+ ));
+
+#ifdef RG_5GTF
+EXTERN RgSchUlHqProcCb* rgSCHUhmGetUlProcByTime ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+CmLteTimingInfo frm
+));
+EXTERN S16 rgSCHUhmGetAvlHqProc ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgSchUlHqProcCb **hqP
+));
+#endif
+/**
+* @brief Store Periodic CQI, SRS and SR tranmission instances list
+* */
+
+typedef struct rgSchPerPucchCb
+{
+ CmLListCp srLst;
+ CmLListCp srsLst;
+ CmLListCp cqiLst;
+ CmLListCp riLst;
+}RgSchPerPucchCb;
+
+/**
+ @brief UE Specific SRS Periodicity and Subframe Offset Configuration FDD */
+
+typedef struct rgSchUePCqiSrsSrCfgIdxTbl
+{
+ U16 min; /*!< start ISRB Index */
+ U16 max; /*!< end ISRB Index */
+ U16 peri; /*!< SRS Periodicity in ms */
+ U16 offset; /*!< Offset with ISRB value */
+}RgSchUePCqiSrsSrCfgIdxTbl;
+
+/**
+ @brief UE Specific SRS Periodicity and Subframe Offset Configuration TDD */
+
+/* Ref: Table 8.2-2: UE Specific SRS Periodicity */
+
+typedef struct rgSchUeSrsCfgIdxTbl
+{
+ U16 min; /*!< start ISRB Index */
+ U16 max; /*!< end ISRB Index */
+ U16 peri; /*!< SRS Periodicity in ms */
+ U16 offset1; /*!< Offset with ISRB value */
+ U16 offset2; /*!< Offset with ISRB value */
+
+}RgSchUeSrsCfgIdxTbl;
+
+#ifdef RG_5GTF
+/*
+typedef enum rgSchSfType
+{
+ RG_SCH_SF_DLCNTRL_DLDATA = 0,
+ RG_SCH_SF_DLCNTRL_DLDATA_ULCNTRL,
+ RG_SCH_SF_DLCNTRL_ULDATA,
+ RG_SCH_SF_DLCNTRL_ULDATA_ULCNTRL
+}RgSchSfType;
+*/
+/**
+@brief Per UE Group Info
+*/
+typedef struct rgSchUeGrp
+{
+ U8 beamBitMask; /*!< Beam bit mask */
+ //U8 numUe; /*!< Ue present in Group */
+}RgSchUeGrp;
+
+/**
+@brief 5gtf Cell Info
+*/
+typedef struct rgSch5gtfCellCb
+{
+ RgSchUeGrp ueGrp5gConf[MAX_5GTF_GROUP]; /*!< Contains all the group configured */
+ RgSchSfType dynConfig[MAX_5GTF_SUBFRAME_INFO]; /*!< Get config from config file as of now */
+ U8 numUes;
+ U8 uePerGrpPerTti; /*!< Num of UEs to be scheduled in a group per TTI */
+ U8 ueGrpPerTti; /*!< Num of Groups to ne scheduled per Tti */
+ U8 numCCs;
+ U8 bwPerCC;
+ U8 cfi;
+ U8 totVrbg;
+}RgSch5gtfCellCb;
+
+#endif // 5GTF
+
+/**
+ @brief UE Specific SRS Control Block */
+
+typedef struct rgSchUeSrsCb
+{
+ RgSchUeUlSrsCfg srsCfg; /*!< SRS Specific configuration */
+ U16 peri; /*!< Periodicity */
+ U16 offset; /*!< subframe Offset */
+ U16 nSrsTrIdx;
+ /*!< Next Tranmission instance
+ Referenence: 36.213 Section:8.2
+ ((10*sfn +sf-sfOffset))/mod(peri)) */
+ CmLList srsLstEnt; /*!< SRS List for next tranmission instance subframe */
+ U8 selectedAnt; /*!< Selected Antenna for SRS Reception*/
+ U16 srsDist; /*!< crnt Distance to get RI Transmission */
+ Bool srsRecpPrcsd; /*!< SRS Recpeption processed as part of PUCCH
+ // or PUSCH processing in current TTI or not */
+
+}RgSchUeSrsCb;
+
+/**
+@brief Periodic CQI/PMI Reporting configuration using PUCCH */
+
+
+
+/**
+@brief Subband Size (k) and Bandwidth Parts (J) vs. DL sys BW */
+
+typedef struct rgSchUeBwSubSzBwParts
+{
+ U8 rbStart; /* RB Start */
+ U8 rbEnd; /* RB End */
+ U8 subSize; /* k */
+ U8 bwParts; /* J */
+
+}RgSchUeBwSubSzBwParts;
+
+#ifdef LTE_ADV
+/**
+ * @brief
+ * Enum for specifying priority level of various PUCCH report types
+ * RG_SCH_CQI_PRIO_LVL_0 :PUCCH Report type 1,1a
+ * RG_SCH_CQI_PRIO_LVL_1 :PUCCH Report type 2,2b,2c,4
+ * RG_SCH_CQI_PRIO_LVL_2 :PUCCH Report type 2a,3,5,6
+ */
+typedef enum
+{
+ RG_SCH_CQI_PRIO_LVL_0,
+ RG_SCH_CQI_PRIO_LVL_1,
+ RG_SCH_CQI_PRIO_LVL_2,
+ RG_SCH_CQI_PRIO_LVL_INVALID
+}RgSchCqiPrioLvl;
+#endif
+
+
+/**
+@brief Periodic CQI/PMI/RI Control Block */
+
+typedef struct rgSchUePCqiCb
+{
+ RgrUePrdDlCqiCfg cqiCfg; /*!< Cqi Pmi Configuration */
+ U16 cqiPeri; /*!< Periodicity */
+ U16 cqiOffset; /*!< CQI offset */
+ U16 riOffset; /*!< RI Offset */
+ U16 riPeri; /*!< RI periodicity */
+ U16 nCqiTrIdx;
+ /*!< Next Active Tranmission instace index ,
+ precompute CQI/PMI
+ Transmission Instance
+ Referenence: 36.213 Section:8.2 */
+
+ /* 1. where wideband CQI/PMI reporting is configured
+ (Mode: 1-0 or 1-1)
+ 10*sfn+floor(subframe/2)-Noffsetcqi )Mod(Nperiod)=0
+ 2. where both wideband CQI/PMI and subband CQI reporting are configured
+ (Mode: 2-0 or 2-1)
+ 10*sfn+floor(subframe/2)-Noffsetcqi )Mod(Nperiod)=0
+ only the few occasations will be used for WB and
+ few will be used for subbands.
+ */
+
+ U16 nRiTrIdx; /*!< Next Active Transmission instance for RI
+ Transmission Instance Referenence:
+ 36.213 Section:8.2 */
+ U16 riDist; /*!< crnt Distance to get RI Transmission */
+ U16 h; /*!< Precompute and store H */
+ U8 riNumBits; /*Precomputed value as it doesn't change
+ on-the-fly */
+ /* 1. In the case where wideband RI reporting is configured
+ (Mode 1-0 or 1-1)
+ (10*sfn+floor(subframe)-Noffsetcqi-NoffsetRI )Mod(NCqiperiod *
+ MriPeriod)=0
+
+ 2. Where Widesband and Subband RI reporting is configured
+ (Mode 2-0 or 2-1 )
+ (10*sfn+floor(subframe)-Noffsetcqi-NoffsetRI )
+ Mod(H. NCqiperiod *MriPeriod )=0
+ where H= J * K +1; J=Number of bandwidth parts(BW/subsize). K is RGR
+ interf input */
+ Bool isWb; /*! < Is True when a WideBand CQI is to be
+ Transmitted in a SubBand CQI Config*/
+ U8 bpIdx; /*Index of the Bandwidth Part*/
+ U8 label; /*Label L associated */
+ U8 J; /*Number of Bandwidth Parts*/
+
+ CmLList cqiLstEnt;/*!< List CQI UEs for next transmission
+ instance */
+ CmLList riLstEnt; /*!< List RI UEs for next transmission
+ instance */
+ Bool invalidateCqi; /*!< If TRUE, ignore the WB/SB CQI report*/
+ U8 perRiVal; /*!< Latest Periodic RI value reported */
+ Bool riRecpPrcsd; /*!< RI Recpeption processed as part of
+ PUCCH or PUSCH processing in current
+ TTI or not */
+#ifdef LTE_ADV
+ RgSchCqiPrioLvl prioLvl; /* Priority lvl set based on the PUCCH Report
+ type */
+ Bool isCqiIgnoByCollsn; /*!< Is this CQI type being ignored for
+ this reporting instance due to
+ collision with higher priority
+ CQI type */
+ Bool isRiIgnoByCollsn; /*!< Is this CQI type being ignored for
+ this reporting instance due to
+ collision with higher priority CQI
+ type */
+#endif
+ RgSchUeCellInfo *servCellInfo; /*!< Access to the serving cell of this
+ CQI CB */
+ RgSchHistInfo histElem;
+#ifdef EMTC_ENABLE
+ U8 rgSchPucchRepNumCount; /*!< CQI repetition count for CATM1 */
+#endif
+}RgSchUePCqiCb;
+
+
+
+/**
+@brief SR Configuration Index */
+
+typedef struct rgSchUeSrCfgIdx
+{
+ U16 sIsr; /*!< Start ISR Index */
+ U16 eIsr; /*!< End ISR Index */
+ U16 peri; /*!< SR Periodicity */
+ U16 offset; /*!< offset */
+}RgSchUeSrCfgIdx;
+#ifdef RG_UNUSED
+/* Reference : 36.213 Table 10.1-5 */
+/* Note: SR is same table for TDD and FDD */
+RgSchUeSrCfgIdx schUeSrCfgIdx[RG_SCH_ISR_INDX_MAX]=
+{
+ { 0,4, 5, 0 },
+ { 5,14, 10, 5 },
+ { 15,34, 20,15 },
+ { 35,74, 40,35},
+ { 75,154, 80, 75},
+ /* RESERVED: Configuration should not allow Res values */
+};
+#endif
+/**
+@brief SR Control block */
+
+typedef struct rgSchUeSrCb
+{
+ RgSchUeSrCfg srCfg; /*!< SR configuration */
+ U16 offset; /*!< SR offset */
+ U16 peri; /*!< SR periodicity */
+
+ U16 nSrTrIdx; /*!< Next Active Tranmission Instance Index ,
+ Referenence: 36.213 Section:10.1 */
+
+ /*
+ ((10*sfn+floor(sf)-srOffset)Mod(srPeriodcity))
+ */
+
+#ifdef EMTC_ENABLE
+ U8 rgSchPucchRepNumCount; /*!< SR repetition count for CATM1 */
+#endif
+ CmLList srLstEnt; /*!< Next Transmission instance SR UE list */
+
+}RgSchUeSrCb;
+
+/**
+ * @enum rgSchCqiReqField
+ * Enumeration of CSI Request Field (Table 7.2.1-1A 36.213).
+ * "00" No aperiodic CSI report is triggered
+ * "01" Aperiodic CSI report is triggered for serving cell c
+ * "10" Aperiodic CSI report is triggered for a 1st set of
+ * serving cells configured by higher layers
+ * "11" Aperiodic CSI report is triggered for a 2nd set of
+ * serving cells configured by higher layers
+ *
+ */
+typedef enum rgSchCqiReqField
+{
+ RG_SCH_APCQI_NO = 0,
+ RG_SCH_APCQI_SERVING_CC,
+ RG_SCH_APCQI_1ST_SERVING_CCS_SET,
+ RG_SCH_APCQI_2ND_SERVING_CCS_SET
+}RgSchCqiReqField;
+
+/**
+@brief APeriodic CQI Control Block */
+typedef struct rgSchUeACqiCb
+{
+ RgrUeAprdDlCqiCfg aCqiCfg;/*!< Cqi Pmi Configuration */
+ U8 L; /*Unique Label through which positioning of Subbands
+ will be conveyed by the UE */
+ U8 N; /*Total Bandwidth / Num of Subbands*/
+ U8 M; /*Number of Selected Subbands*/
+ U8 riNumBits;
+ U8 k; /*k - SB size. 36.213 Tables:7.2.1-3, 7.2.1-5*/
+ U8 cqiPmiSzR1; /*CQIPMI Size for Rank =1*/
+ U8 cqiPmiSzRn1; /*CQIPMI Size for Rank > 1*/
+ U32 aCqiTrigWt; /* Metric to track Aperiodic CQI Trigger occassion */
+ RgSchCqiReqField cqiReqField; /* Cqi Request field. This Value can be 00 01 10 11, based upon
+ the cell present in which trigger list form App */
+}RgSchUeACqiCb;
+
+typedef enum
+{
+ RG_SCH_FDD_PCQI_TBL = 0,
+ RG_SCH_TDD_PCQI_TBL,
+ RG_SCH_RI_TBL,
+ RG_SCH_FDD_SRS_TBL,
+ RG_SCH_TDD_SRS_TBL,
+ RG_SCH_SR_TBL
+} RgSchPerTbl;
+
+/*ccpu00116923 - ADD - SRS present support*/
+#ifdef LTE_TDD
+typedef U8 RgSchTddCellSpSrsSubfrmTbl[RGSCH_CELLSP_SRS_SF_CONFIGS][RGSCH_NUM_SUB_FRAMES];
+#else
+typedef U8 RgSchFddCellSpSrsSubfrmTbl[RGSCH_CELLSP_SRS_SF_CONFIGS][RGSCH_NUM_SUB_FRAMES];
+#endif
+
+
+#endif
+
+
+
+#ifdef LTE_TDD
+/**
+ * @brief
+ * Enum to define the type of Downlink subframe.
+ */
+typedef enum
+{
+ RG_SCH_SPL_SF_NO_DATA = 0,
+ RG_SCH_SPL_SF_DATA,
+ RG_SCH_DL_SF_0,
+ RG_SCH_DL_SF
+}RgSchTddSfType;
+/**
+ * @brief
+ * TDD UE specific PUCCH recpetion information.
+ */
+typedef struct rgSchUePucchRecpInfo
+{
+ CmHashListEnt hashLstEnt; /*!< List of PUCCH for receiving
+ ACK/NACK feedback information */
+ TfuUeRecpReqInfo *pucchRecpInfo; /*!< UE PUCCH Reception information */
+} RgSchUePucchRecpInfo;
+
+/**
+ * @brief
+ * TDD switch point information.
+ */
+typedef struct rgSchTddSubfrmInfo
+{
+ U8 switchPoints; /*!< Number of DL-UL switch points */
+ U8 numFrmHf1; /*!< Number of subframes for half frame 1
+ Present for both 5ms and 10ms periodicity */
+ U8 numFrmHf2; /*!< Number of subframes for half frame 2
+ Present only for 5ms periodicity */
+} RgSchTddSubfrmInfo;
+
+/**
+ * @brief
+ * TDD DL Association Set information.
+ */
+typedef struct rgSchTddDlAscSetIdxK
+{
+ U8 numFdbkSubfrms; /*!< Number of Feedbacks for DL Subframes */
+ U8 subfrmNum[RGSCH_NUM_SUB_FRAMES-1]; /*!< List of Subframe Number */
+} RgSchTddDlAscSetIdxK;
+
+/** @brief PRACH Information for a frequency resource. */
+typedef struct rgrSchTddPrachInfo
+{
+ U8 freqIdx; /*!< Frequency Index */
+ U8 sfn; /*!< Even/Odd/All Radio Frames */
+ U8 halfFrm; /*!< First/Second Half Frame */
+ U8 ulStartSfIdx; /*!< Uplink Start Subframe Index*/
+} RgSchTddPrachInfo;
+
+/** @brief PRACH resource Information for each of the
+ * frequency resources. */
+typedef struct rgrSchTddPrachRscInfo
+{
+ U8 numRsc; /*!< Number of frequency resources*/
+ RgSchTddPrachInfo prachInfo[RGSCH_TDD_MAX_FREQ_RSRC]; /*!< PRACH Information */
+} RgSchTddPrachRscInfo;
+
+/**
+ * @brief
+ * TDD Special subframe configuration information.
+ */
+struct rgSchTddSplSubfrmInfo
+{
+ U8 norDlDwPts; /*!< DL Normal CP: DwPTS in Ts */
+ U8 norDlNorUpPts; /*!< DL Normal CP: UL Normal CP:UpPTS in Ts */
+ U8 norDlExtUpPts; /*!< DL Normal CP: UL Extended CP: UpPTS in Ts */
+ U8 extDlDwPts; /*!< DL Extended CP: DwPTS in Ts */
+ U8 extDlNorUpPts; /*!< DL Extended CP: UL Normal CP:UpPTS in Ts */
+ U8 extDlExtUpPts; /*!< DL Extended CP: UL Extended CP: UpPTS in Ts */
+};
+
+/**
+ * @brief
+ * RACH response awaiting scheduling from the current time is
+ * identified with sfn offset and subframe.
+ */
+typedef struct rgSchTddRachRspInfo
+{
+ U8 sfnOffset; /*!< SFN offset with respect to
+ expected RACH available for
+ scheduling */
+ U8 numSubfrms; /* Number of subframes present */
+ U8 subframe[RGSCH_NUM_SUB_FRAMES]; /*!< List of Subframe numbers */
+} RgSchTddRachRspInfo;
+
+typedef RgSchTddRachRspInfo RgSchTddRachDelInfo;
+
+/**
+ * @brief
+ * List of awaiting RACH responses for scheduling across radio frames.
+ *
+ */
+typedef struct rgSchTddRachRspLst
+{
+ U8 numRadiofrms; /*!< Number of radio frames */
+ RgSchTddRachRspInfo rachRsp[2]; /*!< RACH Occasions for which response
+ can be sent */
+ RgSchTddRachDelInfo delInfo; /*!< Previous RACH responses for
+ which the scheduling deadline
+ has expired. So those responses
+ can be deleted */
+} RgSchTddRachRspLst;
+
+/**
+ * @brief
+ * Uplink association index information indicates the SFN offset and
+ * subframe in which DL HARQ ACK/NACK is expected.
+ */
+typedef struct rgSchTddUlAscInfo
+{
+ U8 subframe; /*!< Subframe number */
+ U8 sfnOffset; /*!< SFN offset with respect to expected
+ UL data reception time */
+} RgSchTddUlAscInfo;
+
+/**
+ * @brief
+ * PUSCH information indicates the SFN offset and
+ * subframe in which UL data is scheduled.
+ */
+typedef struct rgSchTddPuschOffInfo
+{
+ U8 subframe; /*!< Subframe number */
+ U8 sfnOffset; /*!< SFN offset with respect to expected
+ UL data reception time */
+} RgSchTddPuschOffInfo;
+
+/**
+ * @brief
+ * PHICH information indicates the SFN offset and
+ * subframe for which PHICH should be sent.
+ */
+struct rgSchTddPhichOffInfo
+{
+ U8 numSubfrms; /*!< Number of subframes */
+/* ACC-TDD */
+ U8 subframe; /*!< The Uplink Subframe number corresponding
+ to the phich */
+ U8 sfnOffset; /*!< SFN offset with respect to expected
+ UL data reception time */
+};
+
+/**
+ * @brief
+ * DL feedback reception information indicates the SFN offset
+ * and subframe at which feedback is expected.
+ */
+typedef struct rgSchTddDlFdbkInfo
+{
+ U8 subframe; /*!< Subframe number */
+ U8 sfnOffset; /*!< SFN offset with respect to current
+ scheduled time */
+ U8 m; /*!< m factor used in Downlink Association
+ Set Index */
+#ifdef LTE_ADV /*Naw:: This is not correct */
+ CmLListCp n1PucchResLst; /*!< List for storing the used N1 resource */
+#endif
+} RgSchTddDlFdbkInfo;
+
+
+/**
+ * @brief
+ * Special subframe configuration index.
+ */
+typedef struct rgSchTddSplSubfrmCfg
+{
+ U16 dwPts; /*!< DwPTS in OFDM Symbol Duration */
+ U16 upPts; /*!< UpPTS in OFDM Symbol Duration */
+ Bool isDlDataAllowed; /*!< To allow scheduling of DL data on
+ special subframe */
+} RgSchTddSplSubfrmCfg;
+
+/**
+ * @brief
+ * ACK/NACK information to be used for ACK/NACK bundling mode.
+ */
+typedef struct rgSchTddANInfo
+{
+ U16 sfn; /*!< ACK/NACK is sent for PDU in this SFN */
+ U8 subframe; /*!< ACK/NACK is sent for PDU in this subframe */
+ U8 dlDai; /*!< Downlink Assignment Index for
+ UL-DL Configuration 1-6 */
+ U8 ulDai; /*!< DAI for uplink */
+ U8 latestMIdx; /*!< Last transmitted DL subframe 'm' index */
+ U8 n1ResTpcIdx; /*!< N1 Res idx for scell assigned in TPC command */
+ Bool isSpsOccasion; /*!< To indicate the presence of SPS occasion */
+#ifdef LTE_ADV
+ U8 wUlDai; /*!< Max Ul dai in all the cells */
+#endif
+} RgSchTddANInfo;
+#endif
+
+/**
+ * @brief
+ * Information about one MCS entry.
+ */
+typedef struct rgSchUlIMcsInfo
+{
+ U8 qm;
+ U8 iTbs;
+} RgSchUlIMcsTbl[29];
+EXTERN RgSchUlIMcsTbl rgUlIMcsTbl;
+
+typedef struct rgSchUeCatTbl
+{
+ U32 maxUlBits;/*Maximum number of
+ bits of an UL-SCH
+ transport block
+ transmitted within a
+ TTI*/
+ U32 maxDlBits[4];/*Maximum number of
+ bits of a DLSCH
+ transport block
+ received within a TTI*/
+/* correcting DL harq softbuffer limitation logic */
+ U32 maxSftChBits;/*Total number of soft channel bits*/
+ Bool ul64qamSup;/*Support for 64QAM in UL*/
+/* Changes for MIMO feature addition */
+/* Removed dependency on MIMO compile-time flag */
+ U32 maxDlTbBits;/*Maximum number of DL-SCH
+ transport block bits
+ received within a TTI*/
+ U8 maxTxLyrs;/*Maximum number of supported
+ layers for spatial multiplexing
+ in DL*/
+} RgSchUeCatTbl[CM_MAX_UE_CAT_SUPP + 1];
+EXTERN RgSchUeCatTbl rgUeCatTbl;
+
+/* Changes for MIMO feature addition */
+/* Removed dependency on MIMO compile-time flag */
+typedef U32 RgSchTbSzTbl[RGSCH_MAX_NUM_LYR_PERCW][RGSCH_NUM_ITBS][RGSCH_MAX_NUM_RB];
+
+#ifdef LTE_TDD
+typedef U8 RgSchRaPrmblToRaFrmTbl[RGSCH_MAX_TDD_RA_PREAMBLE_FMT+1];
+#else
+/* Added matrix 'rgRaPrmblToRaFrmTbl' for computation of RA
+ sub-frames from preamble format */
+typedef U8 RgSchRaPrmblToRaFrmTbl[RGSCH_MAX_RA_PREAMBLE_FMT+1];
+#endif
+EXTERN RgSchRaPrmblToRaFrmTbl rgRaPrmblToRaFrmTbl;
+
+EXTERN U8 rgRvTable[4];
+
+typedef struct rgDciFmt
+{
+ U8 dciType;
+ union
+ {
+ RgDciFmt1AInfo dci1a;
+ } dci;
+} RgDciFmt;
+
+typedef enum rgSchPdcchSearchSpace
+{
+ RG_SCH_UE_SPECIFIC_SEARCH_SPACE,
+ RG_SCH_CMN_SEARCH_SPACE,
+}RgSchPdcchSearchSpace;
+
+/**
+ * @brief
+ * Information about one PDCCH.
+ */
+typedef struct rgSchPdcch {
+ U8 nCce; /*!< CCE index */
+ CmLteAggrLvl aggrLvl; /*!< Aggregation level */
+ TfuDciInfo dci; /*!< PDCCH format */
+ U16 rnti; /*!< RNTI to who the PDCCH is allocated */
+#if (defined (LTE_TDD))
+ U8 dlDai; /*!< DAI associated with this PDCCH.
+ THis is used for F1BCS resource calulcation */
+#endif
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ CmLteTimingInfo relFbkTiming; /*!< Feebback timing information for release
+ PDCCH */
+ Bool isSpsRnti; /*!< TRUE if rnti is SPS RNTI */
+ U16 crnti; /*!< CRNTI to who the PDCCH is allocated */
+#endif
+ CmLList lnk; /*!< To link PDCCHs in a subframe */
+#ifdef EMTC_ENABLE
+ Void *emtcPdcch;
+#endif
+ RgSchUeCb *ue; /*!< Pointer to the UE Control Block */
+ RgSchPdcchSearchSpace pdcchSearchSpace; /*!< Search Space from this PDCCH allocated */
+ U8 dciNumOfBits; /*!< Size of DCI in bits */
+} RgSchPdcch;
+
+/**
+ * @brief
+ * PDCCH information for cell.
+ */
+typedef struct rgSchPdcchInfo {
+ U8 *map; /*!< Bit map of PDCCHs */
+ U8 currCfi; /*!< Number of CCEs */
+ U16 nCce; /*!< Total CCEs */
+ CmLListCp pdcchs; /*!< List of RgSchPdcch */
+} RgSchPdcchInfo;
+
+typedef struct rgSchPhich
+{
+ CmLList lnk; /*!< To link PHICHs in a subframe */
+ U8 hqFeedBack; /*!< Harq Feed Back */
+ U8 rbStart; /*!< Starting RB */
+ U8 nDmrs; /*!< 3 bits for DMRS cyclic shift */
+ /* changes for passing iphich at TFU;*/
+ Bool isForMsg3; /*! < Phich Ack/Nack conveyed for MSG 3 */
+#ifdef LTE_TDD
+ U8 iPhich; /*!< For determining phich group */
+#endif
+} RgSchPhich;
+
+typedef struct rgSchPhichInfo
+{
+ CmLListCp phichs; /*!< List of RgSchPhich */
+} RgSchPhichInfo;
+
+typedef struct rgSchBcchTb
+{
+ RgSchPdcch *pdcch;
+ Buffer *tb;
+ U16 tbSize;
+} RgSchBcchTb;
+
+typedef struct rgSchPcchTb
+{
+ RgSchPdcch *pdcch;
+ Buffer *tb;
+ U16 tbSize;
+} RgSchPcchTb;
+
+typedef struct rgSchRaRspAlloc
+{
+ U16 raRnti;
+ U32 tbSz;
+ TknU8 backOffInd; /*!< Backoff index value */
+ CmLListCp raRspLst; /*!< List of RaCbs */
+ CmLListCp contFreeUeLst; /*! List of HandOver or PdcchOrder UEs */
+ RgSchPdcch *pdcch; /*!< NULLP if no Rsp allocation done for raRnti*/
+}RgSchRaRspAlloc;
+
+typedef struct rgSchBchTb
+{
+ Buffer *tb; /*!< BCH data for this frame */
+ U16 tbSize; /*!< Non-Zero if bch data is scheduled for this SF */
+}RgSchBchTb;
+
+/* Added support for SPS*/
+#ifdef LTEMAC_SPS
+/**
+ * TODO: check compilation
+ @brief Downlink Resource allocation type information. */
+struct rgSchDlSfAllocInfo
+{
+ U32 raType0Mask; /*!< RBG allocation mask for type 0*/
+ U32 raType1Mask[RG_SCH_NUM_RATYPE1_32BIT_MASK]; /*!< RA Type 1
+ allocation mask */
+ U32 raType1UsedRbs[RG_SCH_NUM_RATYPE1_32BIT_MASK];/*!< RA Type 1 Used RBs
+ per subset */
+ U32 nxtRbgSubset; /*!< Next RBG subset to be used for allocation */
+ U32 raType2Mask[RG_SCH_NUM_RATYPE2_32BIT_MASK];
+ /*!< Mask for resource allocation type 2 */
+};
+#endif /* LTEMAC_SPS */
+
+/* LTE_ADV_FLAG_REMOVED_START */
+/**
+ @brief RGR RB range for SFR */
+typedef struct rgrPwrHiCCRange
+{
+ U8 startRb; /*<! Start RB for power high cell centre user */
+ U8 endRb; /*<! End RB for power high cell centre user */
+} RgrPwrHiCCRange;
+
+typedef struct rgSchSFRTotalPoolInfo
+{
+ CmLListCp ccPool; /*Dynamic Variable, It will change when BW is assigned.
+ Initially assigned to 0 */
+ Bool ccBwFull; /*If BW is full*/
+ CmLListCp cePool; /*Dynamic Variable, It will change when BW is assigned.
+ Initially assigned to 0 */
+ Bool ceBwFull; /*If BW is full*/
+ Bool isUeCellEdge;
+ Bool CERetx; /* to check if there is any CE retransmission */
+ Bool CCRetx; /* to check if there is any CC retransmission */
+ Bool CC1; /* Cell centre pool 1 */
+ Bool CC2; /* cell centre pool 2 */
+ U8 CCPool1BwAvlbl; /* Cell Centre Bw available for Pool1 */
+ U8 CCPool2BwAvlbl; /* Cell Centre Bw available for Pool2 */
+ U8 CEPoolBwAvlbl; /* Cell Edge Bw available for CE Pool */
+}RgSchSFRTotalPoolInfo;
+
+typedef struct rgSchSFRPoolInfo
+{
+ /*Fixed RB Range of the Pool. Fixed by user configuration*/
+ U16 poolstartRB;
+ U16 poolendRB;
+ U16 bw; /*!< Number of RBs in the pool */
+ /*Dynamic Values */
+ U8 type2Start; /*!< Start RB for the next type 2 allocation */
+ U8 type2End; /*!< End position of Type2 allocation with in the bit mask */
+ U8 type0End; /*!< End position of Type0 allocation with in the bit mask */
+
+ U16 bwAlloced; /*!< Number of RBs already allocated by DLFS */
+ Bool CCPool2Exists; /*!< To check if the last pool in the RB allocation is a CC pool */
+ struct rgSchSFRPoolInfo * adjCCPool; /*!< The CC pool adjacent to this CE Pool SFR_FIX */
+ RgrPwrHiCCRange pwrHiCCRange; /*!< Power High Range which can be used by CC user based on RNTP info */
+}RgSchSFRPoolInfo;
+/* LTE_ADV_FLAG_REMOVED_END */
+
+typedef struct rgSchPuschBwInfo
+{
+ U8 numSb; /*!< PUSCH BW in subbands */
+ U8 startRb; /*!< Starting RB for PUSCH BW */
+}RgSchPuschBwInfo;
+
+typedef struct rgSchDynCfiCb
+{
+ U8 isDynCfiEnb; /*!< Dynamic CFI feature Flag */
+ U8 maxCfi; /*!< max possible CFI in the cell */
+ U8 switchOvrWinLen; /*!< Length of Switchover window */
+ U16 cceFailCnt; /*!< Number of CCE allocation Failures in a
+ CCE failure sample period */
+ U16 *cceFailSamples; /*!< Array holding samples of Avg number
+ of CCE allocation failures */
+ U16 cceFailSum; /*!< Moving sum of the CCE faliures of
+ N samples */
+ U16 cfiStepUpTtiCnt; /*!< No.of TTIs to take decision for CFI
+ step Up */
+ U16 cceUsed; /*!< Total CCEs used in current monitoring
+ interval */
+ U16 lowCceCnt; /*!< Number of TTI in which CCEs used is
+ less than available CCEs in
+ lower CFI */
+ U16 cfiStepDownTtiCnt; /*!< No.of TTIs to take decision for CFI
+ step Down */
+ U32 cfiSwitches; /*!< Total number of CFI switches */
+ U32 cfiIncr; /*!< Total number of CFI increments */
+ U32 cfiDecr; /*!< Total number of CFI decrements */
+ /*!< Total CCE per CFI */
+ U8 cfi2NCceTbl[RG_SCH_MAX_MPHICH][RG_SCH_CMN_MAX_CFI];
+
+ U8 numFailSamples; /*!< Number of CCE Allocation Failure
+ samples */
+ U16 failSamplePrd; /*!< Failure Sample Period */
+ U16 ttiCnt; /*!< TTI count to track monitoring period
+ and sample period expiry */
+ RgSchPuschBwInfo bwInfo[RG_SCH_CMN_MAX_CFI]; /*!< PUSCH BW info */
+ U8 pdcchSfIdx; /*!< Subframe Idx for CFI applying */
+ U8 prevCceFailIdx; /*!< To maintain Previous Index of
+ CCE failure array */
+ Bool switchOvrInProgress; /*!< Switchover is in progress */
+ Bool dynCfiRecfgPend; /*!< Flag for pending dynamic cfi reconfig */
+}RgSchDynCfiCb;
+
+#ifdef RG_5GTF
+
+/**
+ * @brief
+ * Beam information for a subframe
+ */
+typedef struct rgSchSfBeamInfo
+{
+ U16 totVrbgAvail; /*!< Total VRBG available */
+ //U16 totRb; /*!< Total RB per Beam */
+ U16 totVrbgRequired; /*!< total Rbs requested for beam */
+ U16 totVrbgAllocated; /*!< total Rbs allocated for beam */
+ U16 vrbgStart; /*!< VRBG start for beam */
+} RgSchSfBeamInfo;
+#endif
+
+typedef struct rgSchDlSf
+{
+ U8 cceCnt; /*!< Number of CCEs used in the subframe */
+ Bool isCceFailure; /*!< TRUE if PDCCH allocation is failed for
+ this subframe */
+ U8 dlUlBothCmplt; /*!< To track that DL and UL both scheduling
+ is done */
+ U8 sfNum; /*!< Number of the subframe */
+ U16 bw; /*!< Number of RBs in the cell */
+ U16 bwAlloced; /*!< Number of RBs already allocated by DLFS */
+ U16 bwAssigned; /*!< Number of RBs already allocated by scheduler */
+/* LTE_ADV_FLAG_REMOVED_START */
+ RgSchSFRTotalPoolInfo sfrTotalPoolInfo; /* SFR Pool Info*/
+ TknStrOSXL rntpInfo; /* RNTP Info for the complete subframe*/
+/* LTE_ADV_FLAG_REMOVED_END */
+
+ U8 type2Start; /*!< Start RB for the next type 2 allocation */
+ U8 type2End; /*!< End position of Type2 allocation with
+ in the bit mask */
+ U8 type0End; /*!< End position of Type0 allocation with
+ in the bit mask */
+ U8 lstRbgDfct; /*!< The last RBG deficit RBs, Ex. if DLBW = 97,
+ * RBGsz = 4, lstRbgDfct = 3 */
+ Bool txDone; /*!< Flag to indicate if transmission is done*/
+ U32 numDlActvUes; /* 4UE_TTI_DELTA: num of active Ues */
+ RgSchBchTb bch; /*!< BCH data for this frame */
+ RgSchBcchTb bcch; /*!< BCCH allocation for this frame */
+ RgSchPcchTb pcch; /*!< PCCH allocation for this frame */
+ RgSchPdcchInfo pdcchInfo; /*!< PDCCH info */
+ RgSchPhichInfo phichInfo; /*!< PHICH info */
+ /* CA dev Start */
+
+ CmLListCp ueLst; /*!< UE List which are scheduled in Perticular SF */
+ Void *laaCb;
+ CmLListCp msg4HqPLst; /*!< Msg4 Hq Procs that are scheduled in Perticular SF */
+ /* CA dev End */
+ U8 remUeCnt; /*!< Remaining number of UEs that can be scheduled */
+ Bool schdAmbrNxt;/*!< Flag indicates to pick an AMBR LC after GBR LC */
+ /*[ccpu00138609]-ADD- Counter to track the number of Msg4/DL CCCH UEs */
+ U8 schdCcchUe; /*!< Num of Msg4/DL CCCH UEs scheduled in
+ the DL Sf */
+#ifdef LTE_TDD
+ U8 nCce; /*!< Number of CCEs */
+ RgSchTddPhichOffInfo phichOffInfo; /*!< PHICH Information */
+ RgSchTddDlFdbkInfo dlFdbkInfo; /*!< HARQ Ack/Nack feedback expected time */
+ RgSchTddUlAscInfo ulAscInfo; /*!< UL Association set Information */
+ RgSchRaRspAlloc raRsp[RGSCH_MAX_TDD_RA_RSP_ALLOC]; /* Array of list
+ of Ra Rsp
+ Allocations for each rarnti */
+ RgSchTddSfType sfType; /*!< Stores the enum value for SF type */
+#else
+ RgSchRaRspAlloc raRsp[RGSCH_MAX_RA_RSP_ALLOC]; /* Array of list of Ra Rsp
+ Allocations for each rarnti */
+#endif
+ Void *dlfsSf; /*!< DLFS specific information per sub-frame */
+ CmLListCp ackNakRepQ; /*!< ACK NACK repetition queue */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ Bool isSPSOcc; /*!< TRUE if this SF has SPS Occasion allocation */
+ RgSchDlSfAllocInfo dlSfAllocInfo;/*!< Allocation information for DL SF */
+ U32 spsAllocdBw; /*!< Number of RBs allocated for SPS */
+ RgSchPdcch *relPdcch; /*!< Only one release PDCCH scheduled per
+ sub-frame */
+#ifdef LTE_TDD
+ struct
+ {
+ CmLteRnti crnti; /*!< UE's C-RNTI (not SPS RNTI) */
+ RgrTddAckNackMode ackNackMode; /*!< Ack/nack mode */
+ } relPdcchInfo; /*!< Info required for receiving Hq fdbk
+ * for release PDCCH (DL) */
+#endif
+#endif
+ U32 schedLcCount; /*!< Num of LCs scheduled in this TTI */
+ U32 totalLcCntOfSlctdUes; /*!< total Lc count of all UE's selected in
+ * this TTI*/
+ U32 totPrbReq; /*!< Sum of PRBs required by selected UEs
+ in this subframe */
+#ifdef BEST_EFFORT_2_UE_PER_TTI
+ U32 beTotPrbReq;
+#endif
+
+ /* CA dev Start */
+ U8 dlIdx;
+ /* CA dev Start */
+#ifdef LTE_ADV
+ CmLListCp n1PucchResLst; /*!< List for storing the used N3 resource */
+ CmLListCp n3PucchResLst; /*!< List for storing the used N1 resource */
+#endif
+#ifdef RG_5GTF
+ RgSchSfBeamInfo sfBeamInfo[MAX_5GTF_BEAMS]; /*!< Per info Beam per sf*/
+ U8 numGrpPerTti; /*!< number of Group per TTI*/
+ U8 numUePerGrp; /*!< number of UE per group in TTI*/
+#endif
+} RgSchDlSf;
+
+/* Data Structures used for DL Allocations by Schedulers */
+/**
+ @brief Downlink Resource allocation type 0 information. */
+typedef struct rgSchDlRbAllocRaType0
+{
+ U8 numDlAlloc; /*!< Number of downlink allocations */
+ U32 dlAllocBitMask; /*!< Downlink allocations done for the UE */
+} RgSchDlRbAllocRaType0;
+
+/* Added support for SPS*/
+#ifdef LTEMAC_SPS
+/**
+ @brief Downlink Resource allocation type 1 information. */
+typedef struct rgSchDlRbAllocRaType1
+{
+ U8 numDlAlloc; /*!< Number of downlink allocations */
+ U8 shift; /*!< Indicates if the shift is triggered in the
+ allocation */
+ U8 rbgSubset; /*!< RBG subset number selected for the allocation*/
+ U32 dlAllocBitMask; /*!< Downlink allocations done for the UE */
+} RgSchDlRbAllocRaType1;
+#endif /* LTEMAC_SPS */
+/**
+ @brief Downlink Resource allocation type 2 information. */
+typedef struct rgSchDlRbAllocRaType2
+{
+ Bool isLocal; /*!< True if localised VRB */
+ U8 rbStart; /*!< Starting RB */
+ U8 numRb; /*!< Number of RBs */
+} RgSchDlRbAllocRaType2;
+
+
+typedef struct rgSchcmnDlGrnt
+{
+ U16 schdTime; /*!< Time at which Harq proc has been scheduled */
+ U8 rbStrt; /*!< Starting RB of the allocation */
+ U8 numRb; /*!< Number of RBs allocated */
+ U8 iMcs; /*!< Index to the MCS */
+ U8 rv; /*!< RV for HARQ (re)transmission */
+ U8 rvIdx; /*!< RVIdx for HARQ(re)transmission */
+#ifdef RG_5GTF /* ToDo:: Anoop need to check for other fields required*/
+ U8 vrbgStart;
+ U8 numVrbg;
+ U16 rbAssign;
+ U8 xPDSCHRange;
+ U8 SCID;
+ TfuDciFormat dciFormat; /*!< DCI format for the allocation */
+ /* ToDo */
+#endif
+} RgSchDlCmnGrnt;
+
+
+/**
+ @brief Downlink allocation details per TB. */
+typedef struct rgSchDlTbAllocInfo
+{
+ Bool schdlngForTb;/*!< Indicates if this TB has been scheduled */
+ /*ccpu00120365:-ADD-is this TB disabled. Refer to 36.213-7.1.7.2 */
+ Bool isDisabled; /*!< Indicates if this TB is disabled */
+ U32 bytesReq; /*!< Number of bytes required to be allocated
+ for each TB: filled in by RR/MAX C/I/PFS */
+ U32 bytesAlloc; /*!< Num of bytes allocated for each TB */
+ U8 iTbs; /*!< Itbs for allocation for this allocation
+ * of TB */
+ U8 imcs; /*!< Imcs for allocation for this allocation
+ * of TB */
+ U8 noLyr; /*!< No. of SM layers for this TB transmission */
+ RgSchDlHqTbCb *tbCb; /*!< address of TB Control Block */
+#ifdef RG_5GTF
+ RgSchDlCmnGrnt cmnGrnt; /*! < Alloc info to store 5GTF RAR sched */
+#endif
+}RgSchDlTbAllocInfo;
+
+/**
+ @brief Downlink MIMO related allocation details. */
+typedef struct rgSchMimoAllocInfo
+{
+ Bool hasNewTxData;/*!< Indicator from Specific Sched to Common.
+ * Set, if UE has new data available for clubbing
+ * with RETX in case of TM3 and TM4 */
+ Bool swpFlg; /*!< Swap Flag to indicate TB to CW association
+ * incase of 2 TB transmission */
+ U8 precIdxInfo; /*!< Precoding index information stored */
+ U8 numTxLyrs; /*!< Number of SM layers scheduled for Transmission */
+}RgSchMimoAllocInfo;
+
+
+/**
+ @brief Downlink RB allocation details. */
+typedef struct rgSchDlRbAlloc
+{
+ CmLteRnti rnti; /*!< RNTI for allocation: used only for RARs and
+ dedicated transmissions */
+ U8 rbsReq; /*!< Number of RBs required to be allocated:
+ filled in by RR/MAX C/I/PFS */
+ RgSchDlSf *dlSf; /*!< DL sub-frame for which allocation is to be
+ done: filled in by RR/MAX C/I/PFS */
+ TfuDciFormat dciFormat; /*!< DCI format for the allocation */
+ U8 raType; /*!< Resource allocation Type */
+ RgSchPdcch *pdcch; /*!< Pointer to allocated PDCCH */
+ union allocInfoU
+ {
+ RgSchDlRbAllocRaType0 raType0; /*!< Resource allocation type 0 information */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ RgSchDlRbAllocRaType1 raType1; /*!< Resource allocation type 1
+ information */
+#endif
+ RgSchDlRbAllocRaType2 raType2; /*!< Resource allocation type 2 information */
+ } allocInfo; /*!< Resource allocation information */
+ U8 rbsAlloc; /*!< Number of RBs allocated */
+ U8 numRapids; /*!< Number of RAPIDs serviced within RAR*/
+ /* Nprb indication at PHY for common Ch */
+ U8 nPrb; /*!< NPRB column num. either 2 or 3 */
+ U32 raIndex;
+ Bool schdFirst;
+ /* Add BI sub-header size to the tbSize requirement */
+ U8 biEstmt;
+ RgSchMimoAllocInfo mimoAllocInfo; /*!< Mimo specific allocation params */
+ RgSchDlTbAllocInfo tbInfo[2]; /*!< Allocation information for each TB. */
+
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ U8 cqiForTx; /*!< Assumed value of CQI at which transmission is
+ scheduled */
+ RgSchDlSfAllocInfo resAllocInfo; /*!< Resource allocation information for
+ the current allocation for
+ RA type 0, 1 and 2 */
+ Bool isSchdBySps; /*!< Indicates if this UE is already scheduled by SPS
+ module */
+ CmLteTimingInfo spsSchdTime; /*!< Timing info at which UE was scheduled by
+ SPS module */
+#endif
+ Void * laaCb;
+#ifdef EMTC_ENABLE
+ RgSchPdcch *mpdcch; /*!< Pointer to allocated PDCCH */
+ RgSchEmtcDlRbAlloc emtcAllocInfo; /*!< EMTC DL RB alloc Info */
+#endif
+#ifdef RG_5GTF
+ U8 vrbgReq;
+#endif
+} RgSchDlRbAlloc;
+
+/**
+ * @brief
+ * Uplink Grant Information per UE.
+ */
+typedef struct rgSchUlGrnt
+{
+ U8 iMcs; /*!< Original MCS index */
+ U8 iMcsCrnt; /*!< Current MCS index of the grant */
+ U8 hop; /*!< Hopping flag, set to 0 in this version */
+ U8 rbStart; /*!< Start Resource block of allocation */
+ U8 numRb; /*!< Number of resource blocks allocated */
+ U8 tpc; /*!< TPC command for the uplink grant */
+ U8 nDmrs; /*!< n1DMRS for the uplink grant */
+ U8 delayBit; /*!< Delay bit, for msg3 grant, set to 1 */
+ /* Added for Uplink Adaptive retransmission */
+ Bool isRtx; /*!< To indicate if this grant is for a RETX */
+ /* To include the length and ModOrder in DataRecp Req. */
+ U16 datSz; /*!< Length of the Data */
+ TfuModScheme modOdr; /*!< Modulation order */
+#ifdef RG_5GTF
+ U8 vrbgStart;
+ U8 numVrbg;
+ U16 rbAssign;
+ U8 xPUSCHRange;
+ U8 SCID;
+ U8 PMI;
+ U8 uciOnxPUSCH;
+ U8 hqProcId;
+ Bool ndi;
+ TfuDciFormat dciFrmt;
+ U8 numLyr;
+#endif
+} RgSchUlGrnt;
+
+
+/* Added for Uplink Adaptive retransmission */
+/**
+ * @brief
+ * Uplink retransmission allocation.
+ */
+struct rgSchUlRetxAlloc
+{
+ CmLteRnti rnti; /*!< RNTI */
+ U8 numSb; /*!< Number of subbands */
+ U32 tbSz; /*!< Transmission Block Size */
+ U8 iMcs; /*!< Original MCS index */
+ RgSchUeCb *ue; /*!< UE assocated with allocation */
+ Bool forMsg3; /*!< If allocation is for Msg3 */
+ /* PHR handling for MSG3 */
+ RgSchRaCb *raCb; /*!< Pointer to RaCb, if forMsg3 = TRUE */
+#ifdef EMTC_ENABLE
+ RgSchEmtcUlGrnt emtcGrnt;
+#endif
+#ifdef RG_5GTF
+ TfuDciFormat dciFrmt;
+ U8 numLyr;
+ U8 vrbgStart;
+ U8 numVrbg;
+ TfuModScheme modOdr; /*!< Modulation order */
+#endif
+};
+
+/**
+ * @brief
+ * Hole information, pertaining to uplink bandwidth
+ */
+typedef struct rgSchUlHole
+{
+ U8 start; /*!< Beginning of hole */
+ U8 num; /*!< Number of elements making up the hole */
+ struct rgSchUlHole *prv; /*!< Previous hole */
+ struct rgSchUlHole *nxt; /*!< Next hole */
+ struct rgSchUlAlloc *nxtAlloc; /*!< Next allocation */
+ struct rgSchUlAlloc *prvAlloc; /*!< Previous allocation */
+} RgSchUlHole;
+
+/**
+ * @brief
+ * Uplink allocation
+ */
+struct rgSchUlAlloc
+{
+ RgSchUlHqProcCb *hqProc; /*!< HARQ process */
+ CmLteRnti rnti; /*!< RNTI */
+ U8 sbStart; /*!< Subband start idx */
+ U8 numSb; /*!< Number of subbands */
+ RgSchUlGrnt grnt; /*!< Grant info */
+ /* Not keeping grant attributes now */
+ RgSchPdcch *pdcch; /*!< Associated PDCCH */
+ RgSchUeCb *ue; /*!< UE assocated with allocation */
+ Bool forMsg3; /*!< If allocation is for Msg3 */
+ Bool isMsg3CCCHSdu; /*!<Msg3 contains CCCH Sdu */
+ Bool isMsg3CrntiCe; /*!< Msg3 contains CRNTI CE */
+ /* PHR handling for MSG3 */
+ RgSchRaCb *raCb; /*!< RaCb, if forMsg3 = TRUE */
+ Bool mrgdNewTxAlloc; /*!< Alloc corresponding to newTx
+ * that was merged in the process of
+ * comdining txSf and reTxSf. */
+ RgSchUlAlloc *prv; /*!< Previous alloc */
+ RgSchUlAlloc *nxt; /*!< Next alloc */
+ RgSchUlHole *prvHole; /*!< Next hole */
+ RgSchUlHole *nxtHole; /*!< Prev hole */
+ /* UL_ALLOC_CHANGES*/
+ void *allocDbRef; /*!< The db from which this allocation was made*/
+ void *holeDbRef; /*!< The db from which this allocation was made*/
+ Bool isAdaptive;
+#ifdef EMTC_ENABLE
+ CmLList allocLink;
+ RgSchEmtcUlGrnt emtcGrnt;
+ RgSchDlRbAllocRaType0 raType0; /*!< Resource Alloction type zero for eMTC */
+#endif /* EMTC_ENABLE */
+};
+
+/**
+ * @brief
+ * Allocation free pool for an allocation db
+ */
+typedef struct rgSchUlAllocMem
+{
+ U8 maxAllocs; /*!< Maximum possible allocations per subframe */
+ RgSchUlAlloc *firstFree; /*!< First free index */
+ RgSchUlAlloc *allocs; /*!< Array of 'maxAllocs' elems */
+} RgSchUlAllocMem;
+
+/**
+ * @brief
+ * Allocation information for a subframe
+ */
+typedef struct rgSchUlAllocDb
+{
+ U8 count; /*!< Number of allocations */
+ RgSchUlAlloc *first; /*!< First allocation */
+ RgSchUlAllocMem mem; /*!< Alloc pool management */
+} RgSchUlAllocDb;
+
+/**
+ * @brief
+ * Hole free pool for a hole db
+ */
+typedef struct rgSchUlHoleMem
+{
+ U8 maxHoles; /*!< Maximum possible holes per subframe */
+ RgSchUlHole *firstFree; /*!< First free index */
+ RgSchUlHole *holes; /*!< Array of 'maxHoles' elems */
+} RgSchUlHoleMem;
+
+/**
+ * @brief
+ * Holes information for a subframe
+ */
+typedef struct rgSchUlHoleDb
+{
+ U8 count; /*!< Number of holes */
+ RgSchUlHole *first; /*!< First hole */
+ RgSchUlHoleMem mem; /*!< Hole pool management */
+} RgSchUlHoleDb;
+
+/**
+ * @brief
+ * Uplink subframe information.
+ */
+typedef struct rgSchUlSf
+{
+ U8 idx; /*!< Identifier for uplink subframe (range: 0-7)
+ - maps to HARQ proc ID */
+ CmLListCp reTxLst; /*!< Retransmission List*/
+#ifdef LTE_TDD
+ RgSchTddPuschOffInfo puschOffset; /*!< PUSCH offset information */
+ U8 ulSfIdx; /*!< The Uplink subframe number
+ in the TDD frame. Range [2-9]
+ Used only in TDD Cfg 0 */
+#endif
+ U32 totPrb; /*!< Total PRB used in this sub frame */
+ /* ccpu00129725 -DEL- removed Platform flag */
+ /* Fix:ccpu00120610 add a counter to keep track of remaining allocations */
+ U8 *allocCountRef; /*!< Allocation count in this
+ * subframe, it is a reference to the actual
+ * counter held in allocDb (no additional
+ * logic needed to maintain this) */
+ /* Added for Uplink Adaptive retransmission */
+ RgSchUlAllocDb *allocDb; /*!< Allocation info */
+ RgSchUlHoleDb *holeDb; /*!< Holes info */
+ U8 availSubbands; /*!< Number of total available subbands
+ * for the current sub-frame */
+ U8 numACqiCount; /*!< Used to Restrict 2 Aperiodic cqi per TTI*/
+#ifdef RG_5GTF
+ RgSchSfBeamInfo sfBeamInfo[MAX_5GTF_BEAMS]; /*!< Per info Beam per sf*/
+ U8 numGrpPerTti; /*!< number of Group per TTI*/
+ U8 numUePerGrp; /*!< number of UE per group in TTI*/
+#endif
+} RgSchUlSf;
+
+/* Nprb indication at PHY for common Ch */
+/**
+ * @brief
+ * Bo report given for common logical channel.
+ */
+typedef struct rgSchClcBoRpt
+{
+ CmLList boLstEnt; /*!< Linked list entity for BO list */
+ U32 bo; /*!< Bo in bytes */
+ CmLteTimingInfo timeToTx; /*!< Time at which the BO needs to be satisfied
+ (data to be sent to PHY) */
+#ifdef EMTC_ENABLE
+ U8 emtcDIReason; /*!< Reason for DI message to send. */
+ U8 pnb; /*!< Paging narrowBand on which Ue performs reception of paging*/
+#endif
+ CmLteTimingInfo maxTimeToTx;
+ U8 retxCnt;
+ U16 i;
+ U8 nPrb; /*! NPRB column. Allowed values {2,3} */
+ /* Corrected allocation for common channels */
+ U8 mcs;
+} RgSchClcBoRpt;
+
+/**
+ * @brief
+ * Logical channel control block for BCCH and PCCH channels.
+ */
+typedef struct rgSchClcDlLcCb
+{
+ U8 lcId; /*!< Logical channel ID */
+ Bool si;
+ CmLListCp boLst; /*!< List of BOs reported (RgSchClcBoRpt) */
+} RgSchClcDlLcCb;
+
+/**
+ * @brief
+ * Transmission offset configuration for SRS.
+ */
+typedef struct rgSchSrsTxOffst
+{
+ U8 count; /*!< Number of offsets in the array */
+ U8 offst[RGSCH_MAX_SRS_TX_OFFSET]; /*!< SRS TX offset value */
+} RgSchSrsTxOffst;
+
+/**
+ * @brief
+ * Cell Control block per cell.
+ */
+typedef struct rgSchSrsCfg
+{
+ /*ccpu00130768 - ADD - SRS CFG Present flag to enable/disable cell specific SRS*/
+ Bool isSrsCfgPres; /*!< cell specific SRS CFG enable/disable flag */
+ RgrSrsCfgPrd srsCfgPrdEnum; /*!< SRS configuration period (in subframes) */
+ RgrSrsBwCfg srsBwEnum; /*!< SRS Bandwidth configuration per cell.*/
+ RgSchSrsTxOffst srsTxOffst; /*!< Transmission offset for SRS */
+/*ccpu00116923 - ADD - SRS present support*/
+#ifdef TFU_UPGRADE
+ U8 srsSubFrameCfg;/*!< SRS subframe configuration index per cell.
+ Range - [0-15] */
+#endif
+} RgSchSrsCfg;
+
+
+/**
+ * @brief
+ * MAC Configuration element for CRG interface.
+ */
+typedef struct rgSchCfgElem
+{
+ CmLList cfgReqLstEnt; /*!< Linked list entry for cfgReqLst */
+ CmLteTimingInfo actvTime; /*!< Activation time to apply configuration */
+ struct rgrCfgS
+ {
+ Region reg;
+ Pool pool;
+ RgrCfgReqInfo *rgrCfgReq; /*!< Configuration request information from
+ RRM */
+ RgrCfgTransId transId; /*!< Transaction ID for the config request */
+ } rgrCfg; /*!< RGR configuration information */
+} RgSchCfgElem;
+
+
+/**
+ * @brief
+ * Configuration Control block per cell.
+ */
+typedef struct rgSchCfgCb
+{
+ CmLListCp crntRgrCfgLst; /*!< List of config requests recieved in the
+ current TTI from RRM */
+ CmLListCp pndngRgrCfgLst; /*!< List of pending config requests recieved in the
+ previous TTIs from RRM */
+} RgSchCfgCfb;
+
+/**
+ * @brief
+ * Link of RNTIs managed by MAC.
+ */
+typedef struct rgSchRntiLnk
+{
+ U16 rnti; /*!< RNTI */
+ /*Fix: Overcome race condition between MAC and Scheduler delete*/
+ CmLList rntiGrdPoolLnk; /*!< Link for RNTI guard pool*/
+ struct rgSchRntiLnk *prv; /*!< Link to previous RNTI */
+ struct rgSchRntiLnk *nxt; /*!< Link to next RNTI */
+} RgSchRntiLnk;
+
+/**
+ * @brief
+ * Database of RNTIs managed by MAC.
+ */
+typedef struct rgSchRntiDb
+{
+ U16 rntiStart; /*!< Start RNTI */
+ U16 maxRntis; /*!< Maximum number of RNTIs managed by MAC */
+ U16 count;
+ RgSchRntiLnk *freeRnti; /*!< first free RNTI in the list */
+ RgSchRntiLnk *lastRnti; /*!< last RNTI in the list */
+ RgSchRntiLnk *rntiPool; /*!< Linked list of RNTIs */
+ /*Fix:Overcome Race condition between MAC and Scheduler delete*/
+ CmLListCp rntiGuardPool; /*!< Holds guard pool for RNTIs when deleted in
+ Scheduler but not deleted at MAC */
+} RgSchRntiDb;
+
+/**
+ * @brief
+ * Random access information per cell.
+ */
+typedef struct rgSchRaInfoCb
+{
+#ifdef LTE_TDD
+ U8 maxRaSize; /*!< Number of RA-RNTIs stored
+ across radio frames */
+ U8 lstSize; /*!< list size */
+ CmLListCp *raReqLst; /*!< Each array elem is linked
+ list of RgRaReqInfo
+ (per ra-rnti) */
+#else
+ /* ccpu00132523 Doubled the array size from MAX_RARNTI because window expiry
+ * is overlapping with newly received TACH reqs in max RAR window*/
+ /* Array Size should be more than gap towards window start */
+ CmLListCp raReqLst[RGSCH_RAREQ_ARRAY_SIZE]; /*!< Each array elem is linked
+ list of RgRaReqInfo
+ (per max ra-rnti*2) */
+#endif
+ CmLListCp raCbLst; /*!< List of RaCbs */
+ CmLListCp toBeSchdLst; /*!< List of RaCbs to be
+ scheduled */
+} RgSchRaInfoCb;
+#ifdef EMTC_ENABLE
+/** @brief This structure is part of the uplink HARQ process, this structure
+ * encapsulates all the DRX related information.
+ */
+typedef struct rgSchDrxUlHqProcCb
+{
+ CmLList harqRTTEnt; /*!< Entry into the HARQ RTT timer list */
+ CmLList harqRetxEnt; /*!< Entry into the harqRetxQ */
+
+ U16 rttIndx; /*!< Current Index into HARQ RTT Q */
+ U16 reTxIndx; /*!< Current Index into Re-Tx Q */
+ U8 retxTmrReduction; /*!< Due to platform specific timing diff between
+ UL HARQ processing and UL Scheduling, the
+ drx retx timer may start at a later time, than
+ actual. That delay in starting the timer is
+ stored in this */
+
+} RgSchDrxUlHqProcCb;
+
+#endif
+
+/**
+ * @brief
+ * Uplink HARQ process information per UE
+ */
+struct rgSchUlHqProcCb
+{
+ U8 ndi; /*!< NDI */
+ U8 remTx; /*!< Number of remaining transmissions */
+ RgSchUlAlloc *alloc; /*!< Uplink allocation */
+ /* Renamed rcvdDatInd to rcvdCrcInd */
+ Bool rcvdCrcInd; /*!< Set to true when data rcvd, false when
+ decode failure. */
+ U8 rvIdx; /*!< Redundancy version index */
+ TknU8 rvIdxPhy; /*!< Whatever is given by PHY. To be inspected in case
+ of NACK.Always initialised to 'not present' */
+ CmLList reTxLnk; /*!< Retransmission List */
+ RgSchUlRetxAlloc reTxAlloc; /*!< Retransmission allocation
+ information */
+ Bool isRetx; /*!< Awaiting retransmission */
+ U8 procId; /*!< HARQ Process ID */
+ U8 ulSfIdx; /*!< UL Subframe Index */
+#ifdef LTE_TDD
+ /* Changes for passing iPhich at TFU*/
+ U8 iPhich; /*!< Needed to Calculate PHICH
+ location. For TDD only */
+#endif
+#ifdef LTEMAC_SPS
+ Bool isSpsActvnHqP; /*!< Set to true when this HqP is used for
+ UL SPS Activation */
+ Bool isSpsOccnHqP; /*!< Set to true when this HqP is used for
+ UL SPS Occasion TX */
+#endif
+ void *hqEnt;
+#ifdef EMTC_ENABLE
+ RgSchDrxUlHqProcCb drxCb;
+ Bool isDtx;
+#endif
+ /* 5gtf: TODO two links are not required */
+ CmLList lnk; /*!< To link to inUse/Free Pool */
+ CmLteTimingInfo schdTime; /*!< SFN,SF of schd time */
+};
+
+/**
+ * @brief
+ * Uplink HARQ entity information per UE.
+ */
+typedef struct rgSchUlHqCb
+{
+ U8 maxHqRetx; /*!< Maximum number of harq
+ * re-transmissions */
+ U8 numHqPrcs; /*!< Number of HARQ Processes */
+#ifdef LTE_TDD
+ RgSchUlHqProcCb *hqProcCb; /*!< Uplink harq process info */
+#else
+ RgSchUlHqProcCb hqProcCb[RGSCH_NUM_UL_HQ_PROC]; /*!< Uplink harq process info */
+#endif
+#ifdef LTE_L2_MEAS
+ U8 numBusyHqProcs; /*!< Total Num of Hq procs in use */
+#endif
+#ifdef EMTC_ENABLE
+ void *sch;
+ RgSchUeCb *ue;
+#endif
+ CmLListCp free; /*!< List of free HARQ processes */
+ CmLListCp inUse; /*!< List of in-use HARQ processes */
+} RgUeUlHqCb;
+
+/**
+ * @brief
+ * Logical channel group.
+ */
+#ifdef LTE_L2_MEAS
+/**
+ * @brief
+ * Structure to store values for Ra Preambles received values
+ * */
+typedef struct rgSchRaPreambles
+{
+ U8 dedPream; /*!< Dedicated RA Preamble received */
+ U8 preamGrpA; /*!< Randomly selected preambles in low range */
+ U8 preamGrpB; /*!< Randomly selected preambles in high range */
+}RgSchRaPreambles;
+
+/**
+ * @brief strutcure to store Avergae PRB usage for a given Time period in
+ * Downlink.
+ * */
+typedef struct rgSchAvgPrbDl
+{
+ Bool cntActive; /* Set to TRUE if counting activated */
+ CmLteTimingInfo startTime; /*!< Start Time */
+ U8 timePrd; /*!< Period For which meas to be done */
+ U32 prbCount; /*!< PRB Count Updated every Per TTI */
+} RgSchAvgPrbDl;
+
+/**
+ * @brief strutcure to store Avergae PRB usage for a given Time period in
+ * Uplink .
+ * */
+typedef struct rgSchAvgPrbUl
+{
+ Bool cntActive; /*!< Set to TRUE if counting activated */
+ CmLteTimingInfo startTime; /*!< Start Time */
+ U8 timePrd; /*!< Period For which meas to be done */
+ U32 prbCount; /*!< PRB Count Updated every Per TTI */
+} RgSchAvgPrbUl;
+
+/** @brief
+ * L2 measurement control block.
+ * */
+struct rgSchL2MeasCb
+{
+ CmLList measLnk; /*!< MeasCb node */
+ LrgSchMeasReqInfo measReq; /*!< Request received for measurement */
+ CmLteTimingInfo startTime; /*!< Time at which measurement started */
+ RgInfPrbCfm avgPrbQciUl; /*!< Used to store result from MAC */
+ Bool cfmRcvd; /*!< Used to check if confirm received from MAC */
+ /*!< For average PRB usage in UL */
+ U16 sfnCycle; /*<! Count of Num of SFN wraps */
+ U32 dlTotalBw; /*!< Total DL Bw between meas Req and Meas Send Req */
+ U32 ulTotalBw; /*!< Total UL Bw between meas Req and Meas Send Req */
+};
+
+typedef struct rgSchTbCnt
+{
+ U32 tbTransDlTotalCnt; /*!< Total DL TB count */
+ U32 tbTransDlFaulty; /*!< Total DL Faulty TB count */
+ U32 tbTransUlTotalCnt; /*!< Total UL TB count */
+ U32 tbTransUlFaulty; /*!< Total UL Faulty TB count */
+}RgSchTbCnt;
+#endif /* LTE_L2_MEAS */
+/** @brief
+ * Control block to store measurement details per QCI.
+ * */
+struct rgSchQciCb
+{
+ U8 qci; /*!< QCI of the Logical Channel */
+ U32 dlPrbCount; /*!< Cumulative Prb Count for this QCI */
+ U32 dlUeCount; /*!< Cumulative number of active UE's */
+ U32 dlTotal_UeCount; /*!< Cummulative count added for every sampling
+ Occasion*/
+ U32 ulUeCount; /*!< Cumulative number of active UE's */
+ U32 ulTotal_UeCount; /*!< Cummulative count added for every sampling
+ Occasion*/
+};
+struct rgSchLcgCb
+{
+ /* Right now not keeping associated logical channels, searching for
+ * associated channels needed only during config */
+ U8 lcgId; /*!< Group ID */
+ Void *sch;
+#ifdef LTE_L2_MEAS
+ U8 numLch; /*!< Number fo LC's for this LCG*/
+ RgSchUlLcCb *lcArray[RGSCH_MAX_LC_PER_UE]; /*!< Dedicated Uplink logical
+ channel per LCG */
+#endif /* LTE_L2_MEAS */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ U8 lcCnt;
+ U8 lcId[RGR_MAX_SPS_LC];
+#endif
+};
+
+/**
+ * @brief
+ * Uplink Dedicated Logical channel control block.
+ */
+struct rgSchUlLcCb
+{
+ Bool isValid; /*!< If this struct holds valid values*/
+ U8 lcId; /*!< Logical channel ID */
+ U8 lcgArrIdx; /*!< Index of this LC in the LCG Array*/
+ RgSchLcgCb *lcg; /*!< Logical channel group */
+ RgrLchQosCfg ulQos; /*!< UL Qos parameters */
+ /* After Merging from 2.1 to 2.2 */
+ RgSchQciCb *qciCb; /* QCI Details for this LC */
+};
+
+/**
+ * @brief
+ * Ul Grnt Info for Ho/Po UE in RAR.
+ */
+typedef struct rgSchHoPoUeGrnt
+{
+ U8 rapId; /*!< dedicated rapId */
+ U8 hop; /*!< Hopping flag, set to 0 in this version */
+ U8 rbStart; /*!< Start Resource block of allocation */
+ U8 numRb; /*!< Number of resource blocks allocated */
+ U8 tpc; /*!< TPC command for the uplink grant */
+ U8 iMcsCrnt; /*!< Current MCS index of the grant */
+ TknU16 ta; /*!< Timing Adjustment */
+ CmLList raRspLnk; /*!< To link UE to RaRsp cont free list */
+ /* Added support for SPS*/
+ U16 datSz; /*!< Length of the Data */
+ Bool cqiReqBit; /*!< Aperiodic CQI is requested or not */
+} RgSchHoPoUeGrnt;
+
+/**
+ * @brief
+ * Uplink SPS scheduling information per UE
+ */
+typedef struct rgSchCmnSpsUlUeSchdInfo
+{
+ U32 allocBwMask[RGSCH_SPS_ULBW_MASK_LEN]; /*!< Bitmask indicating the allocation info
+ for the UE. Bit set at position 'x'
+ indicates subband 'x' is allocated */
+ U8 scaledCqi; /*!< Assumed value of CQI for transmission */
+ U16 actvSfLstIdx; /*!< Index into cell-wide UL SPS sub-frame
+ table during activation */
+ CmLteTimingInfo ulSpsActvOcc; /*!< Time at which SPS is activated/reactivated
+ for the UE */
+ CmLteTimingInfo crntUlSpsOcc;/*!< Key into the list of UL SPS active
+ UEs: next UL SPS ocassion */
+ RgSchUlAlloc allocInfo; /*!< Allocation information of the UE */
+ RgSchUlAlloc *crntAlloc; /*!< Allocation pointer in the subframe */
+ RgSchUlSf *crntAllocSf; /*!< sf in which crntAlloc was made */
+} RgSchCmnSpsUlUeSchdInfo;
+
+/**
+ * @brief
+ * Uplink information for SPS per UE
+ */
+typedef struct rgSchCmnUlUeSpsInfo
+{
+ CmLList actvUeLstEnt; /*!< Linked List entry for UL SPS
+ active UE list*/
+ CmLList pndngUeLstEnt;/*!< Linked List entry for UE list with
+ pending SPS action:
+ activation/reactivation/release */
+ Bool isUlSpsActv; /*!< Indicates if UE's UL SPS is
+ active currently */
+ U8 measGapMask[RGSCH_SPS_MG_MASK_LEN]; /*!< Indicates the UL sub-frames with
+ ongoing measurement gap. Mask is
+ of size (80/8) */
+ U8 state; /*!< State of the UE: can be one of
+ ACTV_REACTV_SENT (pdcch for
+ (re)activation sent),REL_SENT,
+ ULSPS_ACTV */
+ Bool pdcchToRetx; /*!< set to TRUE if DTX occurs at the
+ (re)activated SPS occasion */
+ RgSchCmnSpsUlUeSchdInfo ulSpsSchdInfo; /*!< Scheduled info for UL SPS
+ active UE */
+
+ U8 spsOccIdx; /*!< N value for nxt sps occasion */
+
+ U32 packetSize; /*!< Packet size for SPS - SPS allocation*/
+ U32 spsSduSize; /*!< SDU Size recvd on SPS Occasion*/
+ U32 spsGrantSize; /*!< Grant size for SPS allocation */
+
+ CmLteTimingInfo lastSpsDatRecvdTime; /*!< timing info on which the
+ SPS data is recieved*/
+ CmLListCp *spsList; /*!< Pointer to the SPS list of which
+ UE is a part */
+ U32 actPdcchCrcFailCount; /*!< Num of consecutive CRC fails for
+ SPS Activation PDCCH */
+ U32 crcFailCntSpsOcc; /*!< Consecutive CRC fail for SPS Occasion
+ TX */
+ U32 relPdcchSntCnt; /*!< Num ber Rel PDCCH sent to UE*/
+#ifdef RGSCH_SPS_STATS
+ U32 crcFailStats;
+ U32 crcPassStats;
+ U32 totalBsr;
+ U32 numBsrRpt;
+#endif
+} RgSchCmnUlUeSpsInfo;
+
+
+
+/**
+ * @brief
+ * Uplink control block for UE specific information.
+ */
+typedef struct rgSchUeUlCb
+{
+ RgSchUlLcCb lcCb[RGSCH_MAX_LC_PER_UE]; /*!< Dedicated Uplink logical channel
+ information */
+ RgSchLcgCb lcgArr[RGSCH_MAX_LCG_PER_UE]; /*!< Logical channel groups */
+ U8 ulInactvMask; /*!< Bitmask indicating if UE is inactive for UL scheduling */
+ CmLList ulInactvLnk; /*!< Link to the inactive UE List for UL */
+ RgSchHoPoUeGrnt rarGrnt; /*!< UE's RAR grant Information */
+ RgrUeTxAntSelCfg ulTxAntSel;/*!< UL Transmit antenna selection Cfg Info */
+#ifdef RGR_V1
+ /* Added periodic BSR timer */
+ RgrUeBsrTmrCfg bsrTmrCfg; /*!< BSR timers configuraiton for the UE */
+#endif
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ RgrUeSpsUlCfg ulSpsCfg; /*!< UL SPS configuration information */
+ U8 explicitRelCnt; /*!< Number of subframes after sending
+ release to consider it successful */
+ U16 spsPrdcty; /*!< Shall store the SPS periodicity of the
+ UE. Needed to round-off in case of
+ TDD */
+ CmLteTimingInfo relPdcchSchdTime; /*!< This field holds the scheduled time
+ of SPS rel PDCCH*/
+#endif
+#ifdef LTE_L2_MEAS
+ U32 nPrb; /*!< Number of resource block allocated */
+#endif
+#ifdef TFU_UPGRADE
+ U8 betaHqOffst; /*!< Delta HARQ offset used in the case where HARQ
+ feedback is multiplexed with PUSCH data. */
+ U8 betaCqiOffst;/*!< Beta offset for CQI[0-15]. Given by RRC*/
+ U8 betaRiOffst;/*!Beta offset for RI[0-15]. Given by RRC */
+#endif
+ U32 cqiRiSz; /*!<Size of Periodic/Aperiodic CQI or RI depending
+ on the occassion */
+ U32 betaOffstVal; /*!< beta offset of CQI or RI depending
+ on the occassion*/
+ U32 maxBytesPerUePerTti; /*!< Maximum bytes that can be allocated
+ * in 1 scheduling instance per UE */
+ U32 minReqBytes; /*!< The buffer amount of lcg0 */
+ U32 totalBsr; /*!< Total BSR as reported by UE (in bytes) */
+ U32 nonLcg0Bs; /*!< Total BSR for LCG1/LCG2/LCG3 */
+ U32 nonGbrLcgBs; /*!< Total BSR as reported by UE (in bytes) for non-GBR LCG's*/
+ U32 effBsr; /*!< BSR yet to be satisfied in allocations */
+
+ U32 cfgdAmbr; /*!< Byte rate of UE Ambr per Refresh Cycle */
+ U32 effAmbr; /*!< Remaining Bytes of Byte rate available in a refresh Cycle */
+ CmLteTimingInfo ulTransTime; /*!< Timing info of the latest reception of
+ any UL data/signal from UE */
+#ifdef LTEMAC_SPS
+ RgSchCmnUlUeSpsInfo ulSpsInfo; /*!< UL SPS information for UE */
+#endif
+ Bool isUlCaEnabled; /*!< If TRUE UL CA is enabled for the UE */
+ CmLteCellId ctrlOnServCellIdx[RGSCH_ULCTRL_RECP_DIST]; /*!<
+ * Serving Cell Idx on which UL CTRL INFO is to
+ * be received of all configured
+ * serving cell */
+
+ Bool useExtBSRSizes; /*!< If TRUE used R10 Extended BSR Size Table*/
+} RgSchUeUlCb;
+
+/**
+ * @brief
+ * Downlink CCCH Tx/Retx schedule information.
+ */
+typedef struct rgSchCcchSchdInfo
+{
+ U32 totBytes; /*!< Total bytes allocated */
+ CmLList retxLnk; /*!< To link hqP to retx Queues */
+ U8 rvIdx; /*!< Rv Index */
+} RgSchCcchSchdInfo;
+
+/**
+ * @brief
+ * Downlink Grant Information per UE.
+ */
+typedef struct rgSchDlGrnt
+{
+ U16 schdTime; /*!< Time at which Harq proc has been scheduled */
+ U8 rbStrt; /*!< Starting RB of the allocation */
+ U8 numRb; /*!< Number of RBs allocated */
+ U8 iMcs; /*!< Index to the MCS */
+ U8 rv; /*!< RV for HARQ (re)transmission */
+ U8 rvIdx; /*!< RVIdx for HARQ(re)transmission */
+#ifdef RG_5GTF /* ToDo:: Anoop need to check for other fields required*/
+ U8 vrbgStart;
+ U8 numVrbg;
+ U16 rbAssign;
+ U8 xPDSCHRange;
+ U8 SCID;
+ TfuDciFormat dciFormat; /*!< DCI format for the allocation */
+ /* ToDo */
+#endif
+} RgSchDlGrnt;
+
+/**
+ * @brief
+ * Logical channel data as being scheduled by the scheduler.
+ */
+typedef struct rgSchLchAllocInfo
+{
+ U8 lcId; /*!< Logical channel ID */
+ U32 schdData; /*!< Scheduled logical channel data */
+} RgSchLchAllocInfo;
+
+/** @brief This structure is part of the downlink HARQ process, this structure
+ * encapsulates all the DRX related information.
+ */
+typedef struct rgSchDrxDlHqProcCb
+{
+ CmLList harqRTTEnt; /*!< Entry into the HARQ RTT timer list */
+ CmLList harqRetxEnt; /*!< Entry into the harqRetxQ */
+
+ U16 rttIndx; /*!< Current Index into HARQ RTT Q */
+ U16 reTxIndx; /*!< Current Index into Re-Tx Q */
+ U8 retxTmrReduction; /*!< Due to platform specific timing diff between
+ DL HARQ processing and DL Scheduling, the
+ drx retx timer may start at a later time, than
+ actual. That delay in starting the timer is
+ stored in this */
+
+
+} RgSchDrxDlHqProcCb;
+
+/** @enum TfuDciFormat
+ * This Enum has values for Harq Proc TB state.
+ */
+typedef enum
+{
+ HQ_TB_ACKED=0,
+ HQ_TB_NACKED,
+ HQ_TB_WAITING
+}RgSchHqTbState;
+/**
+ * @brief
+ * Downlink TB information per DL HqProc.
+ */
+struct rgSchDlHqTbCb
+{
+ U8 tbIdx; /*!< Index of this TB (0/1). Initialized
+ at HqEnt allocation */
+ U32 tbSz; /*!< TB size scheduled for this TB */
+ U8 txCntr; /*!< Transmission counter */
+ U8 ndi; /*!< New Data Indicator 0 or 1*/
+ TknU8 schdTa; /*!< TA scheduled to be sent */
+ /* CR timer implementation changes*/
+ U8 contResCe;
+ U8 numLch; /*!< No. of DL Logical Channels scheduled
+ for this TB */
+ CmLteTimingInfo timingInfo; /*!< This field holds the scheduled time */
+ RgSchLchAllocInfo lchSchdDataArr[RGSCH_MAX_NUM_DED_LC];
+ RgSchLchAllocInfo *lchSchdData;
+ RgSchCcchSchdInfo ccchSchdInfo;/*!< CCCH TX/RETX scheduler Info */
+ U8 fbkRepCntr; /*!< Counter to ANRep Feedback */
+ U8 fbkRecpRepCntr; /*!< Counter to ANRep Feedback */
+ CmLList anRepLnk[6]; /*!< Links for ANRep we need
+ these many links to
+ simultaneously hold the
+ hqProcs in multiple
+ subframes. */
+ RgSchDlSf *crntSubfrm[6]; /*!< Pointer to subframes */
+ U8 ackCount; /*!< Counter for ACKs */
+ U8 isAckNackDtx; /* ACK or NACK or DTX*/
+ U8 nackCount; /* NACK Counter */
+ U8 dtxCount; /* DTX Counter */
+ RgSchDlGrnt dlGrnt; /*!< Scheduler grant */
+ Bool taSnt; /*!< TA sent or not */
+#ifdef LTE_TDD
+ CmLteTimingInfo fdbkTime; /*!< Expected feedback time */
+ U8 m; /*!< Subframe Order Index within the subframe
+ downlink association index K */
+ RgSchTddSfType sfType; /*!< Identifies the first Tx subframe type */
+ U8 pucchFdbkIdx;/*!< DL subframe idx for which fdbk is expected */
+ U8 dai; /*!< DAI associated with this TB.
+ THis is used for F1BCS resource calulcation */
+#ifdef XEON_TDD_SPCL
+ U8 initTxNumRbs;/*!< Number of Rbs Allocated in First TX */
+#endif
+
+#endif
+ /* 3.1 MIMO */
+ U8 numLyrs; /*!< Number of layers using which this TB is
+ being transmitted */
+ RgSchHqTbState state; /*!< State of this Trasport Block */
+ RgSchDlHqProcCb *hqP; /*!< Reference to the TB container */
+ /* Freeing up the HARQ proc blocked for
+ * indefinite time in case of Retx */
+ U8 cntrRetxAllocFail; /*!< Number of times allocation failed
+ for the retransmission of this TB */
+#ifdef LTE_ADV
+ TknU8 schdSCellActCe; /* !< SCell Act values and whether
+ scheduled or not */
+#endif
+ U32 firstSchedTime; /*!< First time when the TB was scheduled */
+ U8 minRlcReordrTmr; /*!< Min RLC reorder timer of all LCs
+ scheduled in this hqP*/
+};
+
+
+/**
+ * @brief
+ * Downlink HARQ process information per UE.
+ */
+struct rgSchDlHqProcCb
+{
+ CmLList lnk; /*!< To link with other HARQ processes */
+ RgSchDlHqEnt *hqE; /*!< HARQ entity */
+#ifdef LTE_TDD
+ U8 txCntr; /*!< Transmission counter */
+#endif
+ U8 procId; /*!< Harq process ID */
+ Void *sch; /*!< Cmn sched Hq control block */
+ /* 3.1 MIMO */
+ RgSchDlHqTbCb tbInfo[2]; /*!< TB related information for 1+1(if any) TBs */
+ RgSchDrxDlHqProcCb drxCb; /*!< DRX control block */
+#ifdef TFU_UPGRADE
+ U8 tbCnt; /*!< Count of the number TBs being sent with a
+ Reception Requesti */
+#endif
+#ifdef LTEMAC_SPS
+ TknU16 spsN1PucchRes; /*!< N1Pucch resource for HARQ process at SPS
+ ocassions: present only when HqP contains
+ Data without PDCCH */
+#endif
+ /* Fix: syed having a hqP added to Lists for RB assignment rather than
+ * a UE, as adding UE was limiting handling some scenarios */
+ CmLList reqLnk; /*!< Link for list of UEs/RACBs to be scheduled */
+ CmLList schdLstLnk; /*!< Link for list of scheduled/non-scheduled
+ allocations: used by RB allocation module*/
+ Bool hasDcch; /*!< Set to TRUE if DCCH channel is present in
+ scheduling grant over this hqProc */
+ Bool cwSwpEnabled; /*!< Set if CW swap enabled */
+/*f1b_Sprint3*/
+ U8 tpc; /*!< TPC command to be used for Secondary cell
+ N1PUCCH resource Index*/
+/*f1b_Sprint3*/
+ /*CA Dev Start*/
+ CmLList hqPSfLnk;
+ /* Shifted from TbCb to HqCb*/
+ RgSchPdcch *pdcch; /*!< Pdcch Allocated for this Hq TB */
+ RgSchDlSf *subFrm; /*!< Subfrm for which this TB is assgnd */
+#ifdef EMTC_ENABLE
+ Void *emtcHqInfo;/*!< emtc specfic hq info */
+#endif
+ U8 dlDai; /*!< DL DAI assosciated with this harq proc */
+ U8 ulDai; /*!< UL DAI assosciated with this harq proc */
+#ifdef BRDCM
+ /*CA Dev End*/
+ U32 isPuschFdbk;
+#endif
+ Void * laaCb;
+ CmLListCp *hqPLst; /*!< pointer to either inUse of free list of hqE */
+ TfuDciFormat prevDciFormat; /*!< Previous alloction DCI format used for ERR Ind prcessing */
+
+ /* LAA DBG Only */
+ U32 tbSizeAtEstimate[2];
+ U32 tbSizeAtFnlz[2];
+ U32 tbSizeOfMvdTb[2];
+ U32 itbsAtEstimate[2];
+ U32 prbAtEstimate;
+};
+
+/**
+ * @brief
+ * Downlink HARQ entity information per UE.
+ */
+struct rgSchDlHqEnt
+{
+ RgSchRaCb *raCb; /*!< Parent RACB when attached to RACB */
+ RgSchUeCb *ue; /*!< Parent UE */
+ CmLListCp free; /*!< List of free HARQ processes */
+ CmLListCp inUse; /*!< List of in-use HARQ processes */
+ U8 maxHqTx; /*!< Maximum number of harq transmissions */
+ RgSchDlHqProcCb *msg4Proc; /*!< Points to MSG4 HARQ process */
+#ifdef RGR_V1
+ /* CR timer changes*/
+ RgSchDlHqProcCb *ccchSduProc; /*!< Points to CCCH SDU HARQ process
+ to identify feedback for CCCH SDU
+ transmissions done without cont res CE*/
+#endif
+ U8 numHqPrcs; /*!< Number of HARQ Processes */
+#ifdef LTE_TDD
+ RgSchDlHqProcCb *procs; /*!< Downlink harq processes */
+#else
+ RgSchDlHqProcCb procs[RGSCH_NUM_DL_HQ_PROC]; /*!< Downlink harq processes */
+#endif
+ Void *sch; /*!< Scheduler specific Info */
+ /* CA Dev Start */
+ RgSchCellCb *cell; /*Contains the pointer to coresponding CellCb*/
+ /* CA Dev End*/
+};
+
+
+/**
+ * @enum rgSchTaState
+ * Enumeration of time alignment states.
+ */
+typedef enum rgSchTaState
+{
+ RGSCH_TA_IDLE = 0, /*!< TA is to be scheduled */
+ RGSCH_TA_TOBE_SCHEDULED,/*!< TA is to be scheduled */
+ RGSCH_TA_SCHEDULED /*!< TA is scheduled */
+} RgSchTaState;
+
+/**
+ * @brief
+ * Downlink Time alignment information per UE.
+ */
+typedef struct rgSchUeDlTaCb
+{
+ U16 cfgTaTmr; /*!< Configured TA timer value */
+ U8 ta; /*!< TA value for UE */
+ U8 numRemSf; /*!< Number of subframes left to apply TA */
+ RgSchTaState state; /*!< Indicates HARQ state for TA */
+ /*rg003.301[ccpu00121813] ADD added new var*/
+ Bool outStndngTa; /*!< if new TA is rcvd before it gets
+ applied at UE*/
+ U8 outStndngTaval; /*!< outstanding TA val */
+} RgSchUeDlTaCb;
+
+/**
+ * @brief
+ * Downlink Dedicated Logical channel control block.
+ */
+struct rgSchDlLcCb
+{
+ U8 lcId; /*!< Logical channel ID */
+ U32 bo;
+ RgSchUeCb *ue; /* UE to which this LC belongs to */
+ /* Not validating DlQos for DCCH */
+ CmLteLcType lcType; /* Logical channel Type*/
+ RgSchQciCb *qciCb; /*!< Pointer to ACI Control Block */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ RgrLchSpsCfg dlLcSpsCfg; /*!< SPS configuration for DL logical channel */
+#endif
+#ifdef CCPU_OPT
+ U16 estRlcHdrSz; /*!< Estimated RLC header size */
+ Bool staPduPrsnt; /*!< Indicate the status pdu present or not*/
+#endif
+ U32 staPduBo; /*!< Indicate the Status PDU BO.
+ This amount is already included in original BO */
+ Void *sch; /*!< Holds Scheduler Info pointer */
+ U32 prbsReqd; /*!< PRBs reqd in DL for each UE in MUE scenario*/
+ CmLList schdLnk; /*!< Link to ueCb inserted in toBeSchdList in DL*/
+ U32 oldestSduArrTime; /*!< oldest SDU arrival time for this LC */
+ CmLList lcFlowCntrlEnt; /*!<link to Lc in flow Cntrl lst */
+ CmLList lcPdbFbkLnk; /*!<link to LC in LC flow contrl monitoring lst */
+ Bool setMaxUlPrio; /*!<set if Poll bit is sent in the PDU */
+ Bool setMaxDlPrio; /*!<set if there is a RLC status PDU in DL */
+ Void* laaCb;
+
+};
+/*f1b_Sprint3*/
+
+typedef struct rgSchN1PucchResCb
+{
+ U16 n1PucchIdx; /* !< N1 resource */
+ CmLList n1Lnk; /* !< Link for adding into dlsf N1 used list */
+}RgSchN1PucchResCb;
+typedef struct rgSchN3PucchResCb
+{
+ U16 n3PucchIdx; /* !< N3 resource */
+ CmLList n3Lnk; /* !< Link for adding into dlsf N3 used list */
+ U8 sCellIdx; /* !< Allocated by which scell */
+}RgSchN3PucchResCb;
+
+typedef struct rgSchSCellN3ResCb
+{
+ U8 antP0N3ResCount; /* !< Number of N3 res for antenna port 0*/
+ U8 antP1N3ResCount; /* !< Number of N3 res for antenna port 0*/
+ RgSchN3PucchResCb antP0N3Res[RG_SCH_MAX_NUM_N3PUCCH_PER_UE]; /* !< Antenna Port 0 N3 resources*/
+ RgSchN3PucchResCb antP1N3Res[RG_SCH_MAX_NUM_N3PUCCH_PER_UE]; /* !< Antenna Port 1 N3 resources*/
+}RgSchSCellN3ResCb;
+
+typedef struct rgSchSCellN1ResCb
+{
+ U8 cw1N1ResCount; /* !< Number of N1 res for CW 1*/
+ U8 cw2N1ResCount; /* !< Number of N1 res for CW 2*/
+ RgSchN1PucchResCb cw1N1Res[RG_SCH_MAX_NUM_N1PUCCH_PER_UE]; /* !< CW1 N1 resources*/
+ RgSchN1PucchResCb cw2N1Res[RG_SCH_MAX_NUM_N1PUCCH_PER_UE]; /* !< CW2 N1 resources*/
+}RgSchSCellN1ResCb;
+/*CA Dev Start*/
+#ifdef LTE_ADV
+typedef struct rgSchN3PucchRes
+{
+ U16 n3PucchIdx; /* !< N3 resource */
+ U8 tpcIdx;
+}RgSchN3PucchRes;
+#endif
+typedef struct rgSchDlHqInfo
+{
+/*f1b_Sprint3*/
+#ifdef LTE_TDD
+ U8 numOfCells; /*!<This will be used to store number of unique cells in
+ this subframe*/
+ Bool isSCellPdschPres; /*!< Flag to indicate whether any PDSCH transmission
+ present in secondary cell. Used for CSI/HARQ collision
+ */
+#endif
+ Bool isPuschHarqRecpPres;/*!< Flag to indicate pusch recp req is pres or not */
+ RgrSchFrmt1b3TypEnum uciFrmtTyp; /*!< Store value of format1b or format3.
+ */
+ U8 totalTbCnt; /*!< This will be used to store total number of TBs
+ across all harqProcs.It will be used to identify
+ PUCCH format type to be used in this SF*/
+ CmLList dlSfUeLnk; /*!< list entry into dlsf->ueLst */
+ Void * laaCb;
+ CmLListCp hqPLst; /*!< This is a list of hq proc per DL
+ SF which are scheduled in that SF.
+ The number of harq procs awaiting
+ feedback for the same subframe depends on
+ mode TDD or FDD and max number of Carriers
+ that can be aggregated */
+#ifdef LTE_ADV
+ RgSchN3PucchRes n3ScellPucch;
+#endif
+}RgSchDlHqInfo;
+
+/*CA Dev End*/
+/** @brief This structure contains the Measurement gap configuration for an UE.
+ */
+typedef struct rgUeMeasGapCfg
+{
+ Bool isMesGapEnabled; /*!< Is Measuremnet gap enabled or disabled */
+ U8 gapPrd; /*!< Gap period 40ms/80ms */
+ U8 gapOffst; /*!< Gap offset - Vaue is 0 to 1*/
+} RgUeMeasGapCfg;
+
+/**
+ @brief Measurement Gap related information per UE. */
+typedef struct rgSchUeMeasGapCb
+{
+ Bool isMesGapEnabled;/*!< TRUE if Measurement gap is enabled for this UE */
+ U8 isMeasuring; /*!< Set to TRUE during measurement gap */
+ U8 gapPrd; /*!< Measurement gap period configuration for the UE */
+ U8 gapOffst; /*!< Measurement gap offset for the UE */
+ CmLList measQLnk; /*!< To Link to the measurement gap list */
+ CmLList ackNakQLnk; /*!< To Link to the ACK NACK Rep list */
+ CmTimer measGapTmr; /*!< Timer for Measurement Gap */
+ CmTimer measGapUlInactvTmr; /*!< UL Inactive timer for measurement gap */
+ CmTimer measGapDlInactvTmr; /*!< DL Inactive timer for measurement gap */
+} RgSchUeMeasGapCb;
+
+/**
+ @brief ACK-NACK repetition related information per UE. */
+typedef struct rgSchUeAckNakRepCb
+{
+ Bool isAckNackEnabled; /*!< Is ACK/NACK Enabled*/
+ U8 isAckNakRep; /*!< Set to TRUE during ACK-NACK repetition prd */
+ U8 cfgRepCnt; /*!< Configured value for the repetition counter */
+ U8 repCntr; /*!< Actual repetition counter */
+ U16 pucchRes; /*!< PUCCH resource for repetition */
+ CmTimer ackNakRepUlInactvTmr; /*!< UL Inactive timer for ack-nack repetition */
+ CmTimer ackNakRepDlInactvTmr; /*!< DL Inactive timer for ack-nack repetition */
+ CmTimer ackNakRepTmr; /*!< Timer for ack-nack repetition */
+ CmLList ackNakRepLnk; /*!< ACK NACK repetition queue link */
+ CmLListCp *prsntQ; /*!< Pointer to the Queue that this UE is current
+ present in. */
+} RgSchUeAckNakRepCb;
+
+/**
+ * @brief
+ * UE's MIMO specific information.
+ */
+typedef struct rgSchUeMimoInfo
+{
+ RgrTxMode oldTMode; /*!< UE's Previous Transmission Mode */
+ RgrTxMode txMode; /*!< UE's Transmission Mode */
+ TknU32 doa; /*!< DOA indicator for this UE */
+ Bool puschFdbkVld; /*!< True if Precoding Info in PDCCH has to be
+ in-accordance with the latest PUSCH report */
+ TfuDlCqiPuschInfo puschPmiInfo; /*!< PUSCH report details for explicit PMI
+ * information to PHY during a PDSCH */
+ RgrCodeBookRstCfg cdbkSbstRstrctn; /*!< Codebook subset restriction defined as per
+ * 36.331 section 6.3.2. As of now, this info
+ * is not processed by MAC. SCH shall use the
+ * PMI reported by UE unconditionally.*/
+#ifdef DL_LA
+ S32 txModUpChgFactor; /*!< tx mode chnage factor for step up*/
+ S32 txModDownChgFactor; /*!< tx mode chnage factor for step
+ Down*/
+#endif
+}RgSchUeMimoInfo;
+
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+
+/** @brief This structure that stores the length of Bits that
+* will be received over PUSCH for Aperiodic Mode 3-1.
+*/
+typedef struct rgSchCqiRawPuschMode31
+{
+ U8 wideBCqiCw0; /*!< Length of Wideband CQI Codeword 0 */
+ U8 totLenSbDiffCqiCw0; /*!< Length of SubBand Differential CQI Codeword 0 */
+ U8 r1WideBCqiCw1; /*!< Length of Wideband CQI Codeword 1 for Rank =1*/
+ U8 r1TotLenSbDiffCqiCw1; /*!< Length of SubBand Differential CQI Codeword 1 for Rank = 1*/
+ U8 rg1WideBCqiCw1; /*!< Length of Wideband CQI Codeword 1 for Rank > 1*/
+ U8 rg1TotLenSbDiffCqiCw1; /*!< Length of SubBand Differential CQI Codeword 1 for Rank > 1*/
+ U8 r1PmiBitLen; /*!< Length of PMI Bits for Rank = 1*/
+ U8 rg1PmiBitLen; /*!< Length of PMI Bits for Rank > 1*/
+} RgSchCqiRawPuschMode31;
+
+/** @brief This structure that stores the length of Bits that
+* will be received over PUSCH for Aperiodic Mode 3-0.
+*/
+typedef struct rgSchCqiRawPuschMode30
+{
+ U8 wideBCqiCw; /*!< Length of Wideband CQI */
+ U8 totLenSbDiffCqi; /*!< Length of SubBand Differential CQI */
+} RgSchCqiRawPuschMode30;
+
+/** @brief This structure that stores the length of Bits that
+* will be received over PUSCH for Aperiodic Mode 2-2.
+*/
+typedef struct rgSchCqiRawPuschMode22
+{
+ U8 wideBCqiCw0; /*!< Length of Wideband CQI Codeword 0 */
+ U8 sBDiffCqiCw0; /*!< Length of SubBand Differential CQI Codeword 0 */
+ U8 r1WideBCqiCw1; /*!< Length of Wideband CQI Codeword 1 for Rank =1 */
+ U8 r1SbDiffCqiCw1; /*!< Length of SubBand Differential CQI Codeword 1 for Rank =1*/
+ U8 rg1WideBCqiCw1; /*!< Length of Wideband CQI Codeword 1 for Rank > 1*/
+ U8 rg1SbDiffCqiCw1; /*!< Length of SubBand Differential CQI Codeword 1 for Rank >1*/
+ U8 posOfM; /*!< Position of M selected SubBands */
+ U8 r1PmiBitLen; /*!< Length of PMI Bits for Rank =1*/
+ U8 rg1PmiBitLen; /*!< Length of PMI Bits for Rank >1*/
+} RgSchCqiRawPuschMode22;
+
+/** @brief This structure that stores the length of Bits that
+* will be received over PUSCH for Aperiodic Mode 2-0.
+*/
+typedef struct rgSchCqiRawPuschMode20
+{
+ U8 wideBCqiCw; /*!< Length of Wideband CQI */
+ U8 subBandDiffCqi; /*!< Length of SubBand Differential CQI */
+ U8 posOfM; /*!< Position of M selected SubBands */
+} RgSchCqiRawPuschMode20;
+
+/** @brief This structure that stores the length of Bits that
+* will be received over PUSCH for Aperiodic Mode 1-2.
+*/
+typedef struct rgSchCqiRawPuschMode12
+{
+ U8 wideBCqiCw0; /*!< Length of Wideband CQI Codeword 0 */
+ U8 r1WideBCqiCw1; /*!< Length of Wideband CQI Codeword 1 for Rank =1*/
+ U8 rg1WideBCqiCw1; /*!< Length of Wideband CQI Codeword for Rank > 1 */
+ U8 r1TotalPmiBitLen; /*!< Aggregate length of PMI Bits for Rank =1 */
+ U8 rg1TotalPmiBitLen; /*!< Aggregate length of PMI Bits for Rank > 1 */
+} RgSchCqiRawPuschMode12;
+
+
+/** @brief This structure that stores the length of Bits that
+* will be received over PUSCH.
+*/
+typedef struct rgSchDlCqiRawPusch
+{
+ TfuDlCqiPuschMode mode; /*!< PUSCH CQI mode */
+ TknU8 ri; /*!< Rank Indicator for TM 3,4 */
+ union
+ {
+ RgSchCqiRawPuschMode12 mode12Info; /*!< Mode 1-2 information */
+ RgSchCqiRawPuschMode20 mode20Info; /*!< Mode 2-0 information */
+ RgSchCqiRawPuschMode22 mode22Info; /*!< Mode 2-2 information */
+ RgSchCqiRawPuschMode30 mode30Info; /*!< Mode 3-0 information */
+ RgSchCqiRawPuschMode31 mode31Info; /*!< Mode 3-1 information */
+ }u;
+} RgSchDlCqiRawPusch;
+
+typedef struct rgSchPuschRawCqiInfoPerCell
+{
+ U8 sCellIdx; /*!< Serving cell idx of the cell for
+ this cqi info*/
+ RgSchDlCqiRawPusch puschRawCqiInfo; /*!< Raw CQI Bit Width for PUSCH */
+} RgSchPuschRawCqiInfoPerCell;
+
+typedef struct rgSchPuschRawCqiInfoForSCells
+{
+ U8 numOfCells; /* Num of cells for which Apcqi is comming*/
+ RgSchPuschRawCqiInfoPerCell cqiBitWidth[CM_LTE_MAX_CELLS];
+} RgSchPuschRawCqiInfoForSCells;
+
+typedef struct rgSchPucchRawCqiInfoPerCell
+{
+ U8 sCellIdx; /*!< Serving cell idx of the cell for
+ this cqi info*/
+ TfuDlCqiPucch pucchRawCqiInfo; /*!< Raw CQI Bit Width for PUCCH */
+} RgSchPucchRawCqiInfoPerCell;
+
+typedef struct rgSchUeRawCqiBitWidthInfo
+{
+ TfuRecpReqType type; /*!< Type indicating PUCCH or PUSCH */
+ CmLteTimingInfo recvTime;
+ union
+ {
+ RgSchPucchRawCqiInfoPerCell pucch;
+ RgSchPuschRawCqiInfoForSCells pusch;
+ }u;
+} RgSchUeRawCqiBitWidthInfo;
+#endif
+
+
+/* CaDev start */
+#ifdef LTE_ADV
+
+/**
+ * @brief
+ * Enum for storing the different states of a Scell
+ * RG_SCH_SCELL_INACTIVE : SCell is added but not activate
+ * RG_SCH_SCELL_TOBE_ACTIVATED : SCell Activation trigger condition is met
+ Need to be scheduled.
+ * RG_SCH_SCELL_ACTVTN_IN_PROG : Waiting for Harq feedback for the scell activation
+ * RG_SCH_SCELL_ACTIVE : SCell is activated succesfully
+ */
+typedef enum
+{
+ RG_SCH_SCELL_INACTIVE = 0, /*!<SCELL Addition/Reset */
+ RG_SCH_SCELL_READY, /*!<SCELL Ready is reaceived or SCell is deactivated */
+ RG_SCH_SCELL_TOBE_ACTIVATED, /*!<Activation Trigger */
+ RG_SCH_SCELL_ACTVTN_IN_PROG, /*<!Activation CE is sent */
+ RG_SCH_SCELL_TOBE_DEACTIVATED, /*<!Deactivation Trigger */
+ RG_SCH_SCELL_DEACTVTN_IN_PROG, /*<!Deactivation CE is sent */
+ RG_SCH_SCELL_ACTIVE /*<!SCell is activated */
+}RgSCellStateEnum;
+
+/**
+ * @brief
+ * Enum to define the value of A for Format 1B with CS
+ * in FDD Case and for M=1 in TDD Case.
+ */
+typedef enum
+{
+ RG_SCH_A_VAL_2 = 2,
+ RG_SCH_A_VAL_3 = 3,
+ RG_SCH_A_VAL_4 = 4,
+ RG_SCH_A_VAL_INVALID = 5
+}RgSchAValue;
+
+#ifdef LTE_TDD
+/**
+ * @brief
+ * Enum to define the value of A for Format 1B with CS
+ * in FDD Case and for M=1 in TDD Case.
+ */
+typedef enum
+{
+ RG_SCH_M_VAL_1 = 1,
+ RG_SCH_M_VAL_2 = 2,
+ RG_SCH_M_VAL_3 = 3,
+ RG_SCH_M_VAL_4 = 4,
+ RG_SCH_M_VAL_INVALID = 5
+}RgSchMValue;
+#endif/*LTE_TDD*/
+#endif/*LTE_ADV*/
+
+/**
+ * @brief
+ * Downlink UE specific SCell information.
+ */
+struct rgSchUeCellInfo
+{
+ CmHashListEnt ueLstEnt; /*!< Hash List entity for UE List */
+ RgSchUeCb *ue; /*!< Pointer to UECB */
+#ifdef LTE_ADV
+ U8 sCellIdx; /*!< Serving Cell Index */
+ U16 sCellId; /*!< Secondary Cell Id */
+ RgSCellStateEnum sCellState; /* !< For holding the current state of the sec cell */
+ CmLList sCellLnk; /*!< Node for adding this UE in secondary cell */
+#endif
+ RgSchDlHqEnt *hqEnt; /*!< Downlink HARQ information for the UE */
+ RgSchDlRbAlloc dlAllocCb; /*!< RB Allocation Info for Ded Trans/Retrans */
+ RgSchCellCb *cell; /* !< Reference to sec Cell Cb */
+ Void *sch; /*!< UE Specific Scheduler information */
+ RgrUeTxModeCfg txMode; /*!< UE transmission mode in Secondary */
+#ifdef LTE_TDD
+ RgSchTddANInfo *anInfo; /*!< ACK/NACK related Information */
+ U8 nextFreeANIdx; /*!< Next Available ANInfo Index */
+
+#endif
+ U8 reqForCqi; /*!< set to True if Aperiodic CQI from UE is required */
+#ifdef TFU_UPGRADE
+ RgSchUeACqiCb acqiCb; /* ! < Aperiodic CQI Report Control Block*/
+ RgSchUePCqiCb cqiCb; /*!< Periodic CQI PMI RI Control Block */
+ TknU8 pA; /* PA value configured by RRM
+ ref: RRC 36.331, 6.3.2, PDSCH-Config*/
+ /* RgSchUeRawCqiBitWidthInfo rawCqiBitW[MAX_CQI_RI_RPT_BUFF]; */
+#endif
+ U8 cqiRiWritIdx; /*!< write index to be used whenever CQI/RI reception
+ request is being filled*/
+ U8 cqiRiReadIdx; /*!< Read index to be used whenevr CQI/RI indication
+ is recieved from PHY*/
+ CmTimer deactTmr; /*!< SCell deactivation timer */
+ CmTimer actDelayTmr; /*!< SCell timer */
+
+};
+
+
+
+/* CaDev end */
+
+
+
+/**
+ * @brief
+ * Downlink control block for UE specific information.
+ */
+typedef struct rgSchUeDlCb
+{
+ RgSchUeDlTaCb taCb; /*!< Downlink timing adjustment information for the
+UE */
+ RgSchDlLcCb *lcCb[RGSCH_MAX_LC_PER_UE];/*!< Dedicated Downlink logical channels in
+UE */
+ RgrUeDlCqiCfg ueDlCqiCfg; /*!< UE DL CQI config */
+ U8 dlInactvMask; /*!< Bitmask indicating if UE is inactive for DL scheduling */
+ RgSchCqiReqField reqForCqi; /*!< set to True if Aperiodic CQI from UE is required */
+ Bool pCqiPrsnt; /*!< set to True if periodic CQI from UE is expected */
+ Bool acqiResGrntd; /*!< Aperiodic CQI resources granted in RB Estimation */
+ CmLList dlInactvLnk; /*!< Link to the inactive UE List for DL */
+#ifdef LTE_TDD
+ RgrTddAckNackMode ackNackMode; /*!< ACK/NACK Bundling/ ACK/NACK Multiplexing */
+#endif
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ RgrUeSpsDlCfg dlSpsCfg; /*!< DL SPS configuration information */
+ Bool isSpsHqPInUse; /*!< Indicates if SPS HARQ procs are in use
+ or are to be used for SPS
+ transmissions */
+ RgSchPdcch spsOccPdcch; /*!< PDCCH information for SPS ocassion */
+#endif
+ /* CA dev Start */
+ U8 numHqDlSfInfo;
+#ifdef LTE_TDD
+ RgSchDlHqInfo *dlSfHqInfo;
+#else
+#ifdef RG_5GTF
+ /* 5GTF TODO : Hard setting number of CCs to 3 */
+ RgSchDlHqInfo dlSfHqInfo[MAX_5GTF_CELL][RGSCH_NUM_DL_SUBFRAMES];
+#else
+ RgSchDlHqInfo dlSfHqInfo[RGSCH_NUM_DL_SUBFRAMES];
+#endif
+#endif
+ /* Moved from rgSchCmnDlUe to Here, as this shouldn't be present per cell*/
+ U32 ambrCfgd; /*!< UE's configured AMBR scaled to Refresh Cycle */
+ /* CA dev End */
+ /* Added to restrict max TB Bits in case of more than one CCs for a UE */
+ U32 aggTbBits; /*!< Aggregated Transport Block Bits this UE can receive per TTI*/
+ CmLteTimingInfo lstSchTime; /*!< Last Time UE got Scheduled */
+
+} RgSchUeDlCb;
+
+
+
+#ifdef LTEMAC_HDFDD
+
+/******************************************************************************
+ * Start of Data declarations *
+ ******************************************************************************/
+/**
+ @brief Half Duplex subframtion information stored per ue. */
+
+typedef struct rgSchUeHdFddSfInfo
+{
+ U16 sfn; /*!< Store the sfn for updated state
+ Default Value= 0xffff
+ */
+ U8 subFrmDir;
+ /*!< 0x00= DFLT
+ 0x01= DL DATA +(OPT:CNTRL INFO)
+ 0x02= DL CNTRL
+ 0x04= UL DATA+(OPT: CTNRL INFO)
+ */
+
+}RgSchUeHdFddSfInfo;
+
+/**
+ @brief Half Duplex control related information per ue. */
+
+typedef struct rgSchUeHdFddCb
+{
+ RgSchUeHdFddSfInfo subfrm[RG_SCH_HDFDD_NUMSFINFO];
+
+}RgSchUeHdFddCb;
+#endif /* LTEMAC_HDFDD */
+
+
+/** @brief This structure is part of rgSchUeCb structure and stored DRX related
+ * information for a UE.
+ */
+typedef struct rgSchDrxUeCb
+{
+#ifdef LTEMAC_R9
+ TknS32 cqiMask; /*!<If pres, only value supported is SETUP i.e 0 */
+#endif
+ Bool srRcvd; /*!< TRUE if SR is received from the UE. */
+ Bool raRcvd; /*!< TRUE if Random access request is received using a
+ dedicated preamble for this UE. */
+ U16 onDurTmrLen; /*!< Length of onDuration Timer [1 - 200]. */
+ U16 drxStartOffset; /*!< Value of the DRX Starting Offset [0 - 2559]. */
+ S16 onDurExpDistance; /*!< Keeps track of actual distance */
+
+ U16 drxRetransTmrLen; /*!< Length of DRX Retransmission timer [1 - 33].*/
+
+ U16 inactvtyTmrLen; /*!< Length of drx-Inactivity Timer [1 - 2560]. */
+ S16 drxInactDistance; /*!< Keeps track of actual distance */
+
+ Bool isLongCycle;
+ U16 longDrxCycle; /*!< Value of the DRX long cycle [10 - 2560]. */
+
+ Bool isShortCycleCfgd; /*!< TRUE if short cycle is enabled. */
+ U8 shortCycleTmrLen; /*!< Value of DRX short cycle Timer [1-16]. */
+ U16 shortDrxCycle; /*!< Value of the DRX short cycle [2 - 640]. */
+ S16 drxShortCycleDistance; /*!< Keeps track of actual distance */
+
+
+ CmLList onDurationEnt; /*!< Entry into the OnDuration List. */
+ CmLList onDurationExpEnt; /*!< Entry into the onDuration Expiry List. */
+ CmLList inActvTmrEnt; /*!< Entry into the inactivity Timer list. */
+ CmLList shortCycleEnt; /*!< Entry into HARQ Retransmission list. */
+
+ S16 distance; /*!< Keeps track of actual distance */
+
+/* The following elements track current indices into the drxQ present at the
+ * cell level. These indicies help in fast deletion in case of UE Delete,
+ * otherwise it might have required a linear search. */
+ U16 onDurIndx; /*!< The current index for onDuration Queue. */
+ U16 onDurExpIndx; /*!< The current index for onDuration Queue. */
+ U16 drxInactvIndx; /*!< The current index for drx-InactityTmr Queue. */
+ U16 shortCycleIndx; /*!< The current index for Short Cycle Queue. */
+
+ U8 shortCycleTmr; /*!< Counter to keep track of Short DRX Cycle. */
+ U32 drxDlInactvMask; /*!< Downlink Mask to track InActivity */
+ U32 drxUlInactvMask; /*!< Uplink Mask to track InActivity */
+ U32 drxDlInactvMaskPerCell[CM_LTE_MAX_CELLS]; /*!< Downlink Mask to track InActivity per cell */
+ U32 drxUlInactvMaskPerCell[CM_LTE_MAX_CELLS]; /*!< Uplink Mask to track InActivity per cell */
+} RgSchDrxUeCb;
+
+
+
+/* ccpu00117452 - MOD - Changed macro name from
+ RGR_RRM_DLPWR_CNTRL to RGR_CQI_REPT */
+#ifdef RGR_CQI_REPT
+typedef struct RgSchCqiInfo
+{
+ U8 cqiCount; /* To keep track of CQI reports
+ received so far */
+ RgrUeCqiRept cqiRept[RGR_CQIRPTS_MAXN]; /* Array to maintain CQI reports */
+}RgSchCqiInfo;
+
+
+#endif
+
+/* LTE_ADV_FLAG_REMOVED_START */
+
+/* @brief Control block for LTE Advance Feature for UE */
+typedef struct rgSchLteAdvUeCb
+{
+ RgrLteAdvancedUeConfig rgrLteAdvUeCfg; /*< RGR Configuration of LTE Adv */
+ Bool isCCUePHigh; /* CC user gets high power after RNTP info */
+} RgSchLteAdvFeatureUeCb;
+/* LTE_ADV_FLAG_REMOVED_END */
+
+/*<! Sizes of DCI 0/1/1A/2/2A */
+typedef struct rgSchUeDciSize {
+#ifdef EMTC_ENABLE
+ U8 cmnSize[TFU_DCI_FORMAT_6_2+1]; /*!< DCI 0/1A/6-0A/6-1A final size in common Search Space and scrambled by C-RNTI */
+ U8 dedSize[TFU_DCI_FORMAT_6_2+1]; /*!< DCI 0/1/1A/2/2A/6-0A/6-1A final size in UE Search Space and scrambled by C-RNTI */
+#else
+ U8 cmnSize[TFU_DCI_FORMAT_1A+1]; /*!< DCI 0/1A final size in common Search Space and scrambled by C-RNTI */
+ U8 dedSize[TFU_DCI_FORMAT_2A+1]; /*!< DCI 0/1/1A/2/2A final size in UE Search Space and scrambled by C-RNTI */
+#endif
+ U8 noUlCcSize[TFU_DCI_FORMAT_2A+1]; /*!< DCI 1/1A final size in UE/Common Search Space when the cell
+ is SCell and no corresponding UL CC configured */
+} RgSchUeDciSize;
+
+#ifdef RG_PFS_STATS
+typedef struct rgSchPerRefreshStats {
+ U32 remGbr;
+ U32 remDeltaMbr;
+ U32 totByteSchd;
+ U32 lcSchdOcc;
+}RgSchPerRefreshStats;
+
+typedef struct rgSchLcStats
+{
+ //Bool isLcCntSet;
+ //U32 schdOccCnt;
+ U32 ueSchdOcc[CM_LTE_MAX_CELLS];
+ U32 gbrSatisfiedCnt;
+ Bool ignoredFirstRefresh;
+ U32 gbrRefreshCycleCnt;
+ U32 totGbrBytesSchd;
+ U32 totMbrBytesSchd;
+ U32 achvdFracDataRate;
+ Bool isRecvdBo;
+#define RGSCH_NUM_STATS_PER_REFRESH 50
+ U32 startIdx;
+ U32 lastIdx;
+ U32 favCellCnt[CM_LTE_MAX_CELLS];
+ RgSchPerRefreshStats perRefresh[RGSCH_NUM_STATS_PER_REFRESH];
+}RgSchLcStats;
+
+typedef struct rgSchCqiStats
+{
+ U32 totalCqiOcc;
+ U32 avgCqi;
+}RgSchCqiStats;
+
+typedef struct rgSchPfsStats
+{
+ RgSchLcStats lcStats[RGSCH_MAX_LC_PER_UE];
+ //U32 ueSchdOcc[CM_LTE_MAX_CELLS];
+ U32 refreshCycleCnt;
+ RgSchCqiStats cqiStats[CM_LTE_MAX_CELLS];
+ Bool isCaUe;
+}RgSchPfsStats;
+#endif
+
+#ifdef RG_5GTF
+/**
+ * @brief
+ * UE control block for UE specific information for 5gtf.
+ */
+typedef struct rgSch5gtfUeCb
+{
+ U8 grpId; // Group Id
+ U8 BeamId; // Beam Id of UE
+ U8 numCC; // num Carrier configured for UE
+ U8 mcs; // MCS configured
+ U8 maxPrb; // Max Prb configured for UE
+ CmLteTimingInfo nxtCqiRiOccn; /*!< Next CQI RI Occn */
+ U16 cqiRiPer; /*!< CQI RI periodicity in SFs */
+ U8 rank; /*!< Latest Rank Report from UE */
+}RgSch5gtfUeCb;
+#endif
+
+/**
+ * @brief
+ * UE control block for UE specific information.
+ */
+struct rgSchUeCb
+{
+ U32 totalBo; /*!<Sum of DL BO across all logical channels*/
+ U32 totalPrbRequired;/*!<Num of PRB reqd to satisfy DL totlBo*/
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ CmHashListEnt spsUeLstEnt; /*!< Hash List entity for UE List */
+ U32 spsOccasionCnt; /*!< Total number of SPS occasion cnt*/
+#endif
+#ifdef CQI_CONFBITMASK_DROP
+ U8 cqiConfBitMask;
+ U8 prevCqi;
+#endif
+ RgSchRntiLnk *rntiLnk; /*!< Link to RNTI for the UE */
+ CmLteRnti ueId; /*!< UE identifier */
+ RgSchUeMimoInfo mimoInfo; /*!< MIMO related information for a UE */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ CmLteRnti spsRnti; /*!< Configured value for spsRnti if SPg
+ is enabled for the UE */
+ /* TODO antz - put all relPdcch related info in a struct */
+ CmLteTimingInfo relPdcchTxTime; /*!< Time at which release pdcch is
+ transmitted */
+#ifdef LTE_TDD
+ U8 relPdcchValm; /*!< 'm' for relPdcch */
+#endif
+ CmLteTimingInfo relPdcchFbkTiming;/*!< Release PDCCH feedback timing for
+ the UE: value used by DHM */
+#endif
+ RgSchCellCb *cell; /*!< Cell to which this UE belongs */
+#ifdef XEON_SPECIFIC_CHANGES
+ Void *sch; /*!< UE Specific Scheduler information */
+#endif
+ RgSchUeUlCb ul; /*!< UE Specific Uplink information */
+ RgSchUeDlCb dl; /*!< UE Specific Downlink information */
+ CmLteTimingInfo datIndTime;/*!< Timing info of the last received Dat
+ indication */
+ CmLteTimingInfo macCeRptTime;/*!< Timing info of the last received
+ * MAC CE (BSR/PHR) */
+ U32 y[RGSCH_NUM_SUB_FRAMES]; /*!< 'Y' values calculated
+ using C-RNTI and subframe
+ no based on formula
+ present in sec 9.1.1 of
+ 3GPP 36.313*/
+
+ CmLList taLnk; /*!< To link to the taUeLst list */
+ CmLList dlTaLnk; /*!< To link to the Dl SCHED's taLst */
+ CmTimer taTmr; /*!< Timer for Timing Alignment */
+ RgSchUeMeasGapCb measGapCb; /*!< Measurement gap control block */
+ RgSchUeAckNakRepCb ackNakRepCb; /*!< Ack-Nack Repetition control block */
+#ifdef LTE_ADV
+ CmLList sCellActLnk; /*!< To link to the Dl SCHED's
+ ScellActivation List */
+#endif
+
+#ifdef RGR_V1
+ /* Added periodic BSR timer */
+ CmTimer bsrTmr; /*!< BSR timer expiry handling case */
+ /* CR timer implementation changes*/
+ CmLList ccchSduLnk; /*!< To link raCb to the "to be
+ scheduled"
+ list
+ */
+ struct
+ {
+ U32 bo; /*!< Buffer occupancy for
+ CCCH */
+ } dlCcchInfo; /*!< Params for DL
+ CCCH */
+#else
+
+ CmTimer bsrTmr; /*!< BSR timer expiry handling case */
+#endif
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+ CmLteUeCategory ueCatEnum;
+ /* Moved to SCellInfo*/
+// RgSchUeACqiCb acqiCb; /* ! < Aperiodic CQI Report Control Block*/
+ /* Periodic CQI/SRS/SR Report Feature */
+ RgSchUeSrsCb srsCb; /*!< SRS Control Block*/
+ RgSchUeSrCb srCb; /*!< SR Control Block */
+#endif
+
+#ifdef LTEMAC_HDFDD
+ /* Half Duplex Feature */
+ Bool hdFddEnbld; /*!< Half Duplex FDD is configured TRUE=1/FALSE=0 */
+ RgSchUeHdFddCb *hdFddCb; /*!< Half Duplex Control Block */
+#endif /* LTEMAC_HDFDD */
+/* Added changes of TFU_UPGRADE */
+ Bool isDrxEnabled; /*!< isDrx Enabled for this UE?*/
+ RgSchDrxUeCb *drxCb; /*!< DRX control block. Allocated at time of
+ UE configuration. */
+ CmLList ulDrxInactvLnk; /*!<List of UE's which become inactive for UL */
+ CmLList dlDrxInactvLnk; /*!<List of UE's which become inactive for DL */
+
+ CmLList ulDrxInactvTmrLnk; /*!<List of UEs on which inactivity
+ tmr has to be started for UL */
+ CmLList dlDrxInactvTmrLnk; /*!<List of UEs on which inactivity
+ tmr has to be started for DL */
+#ifdef TFU_UPGRADE
+
+ U8 validTxAnt; /*! < Tx Antenna selected after computing the CQI among two Antennas*/
+
+ U8 cqiRiWritIdx; /*!< write index to be used whenever CQI/RI reception
+ request is being filled*/
+ U8 cqiRiReadIdx; /*!< Read index to be used whenevr CQI/RI indication
+ is recieved from PHY*/
+ RgSchUeRawCqiBitWidthInfo rawCqiBitW[MAX_CQI_RI_RPT_BUFF];
+ U8 initNumRbs; /* No. of RBs allocated for UL Data New Transmission */
+#endif
+
+/* ccpu00117452 - MOD - Changed macro name from
+ RGR_RRM_DLPWR_CNTRL to RGR_CQI_REPT */
+#ifdef RGR_CQI_REPT
+ RgrUeCqiReptCfg cqiReptCfgInfo; /* Holds static information such
+ as configured values for DL
+ Power Control*/
+#endif
+#ifdef TFU_UPGRADE
+#endif
+/* ccpu00117452 - MOD - Changed macro name from
+ RGR_RRM_DLPWR_CNTRL to RGR_CQI_REPT */
+#ifdef RGR_CQI_REPT
+ RgSchCqiInfo schCqiInfo; /* This structure is place holder for
+ keeping all CQI reporting related information */
+#endif
+/* LTE_ADV_FLAG_REMOVED_START */
+ RgSchLteAdvFeatureUeCb lteAdvUeCb; /* LTE-Advanced control block for UE */
+/* LTE_ADV_FLAG_REMOVED_END */
+
+
+#ifdef LTE_L2_MEAS
+ U8 qciActiveLCs[LRG_MAX_QCI]; /* This structure has number of active LCs per
+ Qci for this UE */ /* L2_COUNTERS */
+ U16 ulActiveLCs; /* This is a bitmask - Each bit representing a QCI
+ LSB - QCI 1 ... When bit is set, UE has an active
+ LC for that QCI */
+ U16 lastDatIndLCs; /* This is a bitmask - Each bit representing a QCI
+ for which Data for received in UL
+ LSB - QCI 1 ... When bit is set, UE has an active
+ LC for that QCI */
+#endif
+ Bool isMsg4PdcchWithCrnti; /* This is to aid rgNumMsg4PdcchWithCrnti counter which counts
+ num of PDCCH scrambled with CRNTI for CRNTI Based contention resolution */
+ Bool isSrGrant; /*!< This is to aid Counter to check number of successful SR Grants SR_RACH_STATS*/
+ Bool txModeTransCmplt; /*!< Flag to confirm TM Mode
+ transition completion*/
+ CmTimer txModeTransTmr; /*!< Timer for TxMode transition Completion */
+#ifdef RGSCH_SPS_STATS
+ CmLteTimingInfo lastSpsLcBoRptTime;
+ CmLteTimingInfo lastSpsLcSchedTime;
+ U64 absTimeBo;
+ U64 absTimeSched;
+#endif
+ U8 refreshOffset; /*!< UE referesh offset */
+ U8 csgMmbrSta; /*!< CSG Membership status configured */
+#ifdef TENB_STATS
+ TSL2UeStatsCb *tenbStats; /*!< UE Stats Holder */
+#endif
+ CmLListCp flowCntrlLcLst;/*!< Dedicated Downlink logical channels in UE for Flow Control*/
+ CmLList ueFlowCntrlEnt;/*!<UE lnk to the flow control Lst*/
+
+ RgSchLcgCb *repLcg;/*!<representative LCG of the UE in UL */
+#ifdef XEON_SPECIFIC_CHANGES
+ CmLteTimingInfo riRecpTime; /*! To idnentify Ri wrap arround during PUSCH and
+ PUCCH reception filling */
+#endif
+#ifdef LTE_ADV
+ TknU32 sCellDeactTmrVal; /* !< SCell Deactivation Timer Value */
+ U8 f1bCsAVal; /* !< A value mentioned in table 10.12.2.1-1 of 36.213. This will tell
+ the max number of tbs possible based on TM mode of each configured
+ scell. It is used only for F1B with channel selection*/
+#endif
+/*f1b_Sprint3*/
+ RgSchSCellN1ResCb n1PucchF1bResCb; /*!< N1 resouurce Cb for F1b Channel selection */
+ RgSchSCellN3ResCb n3PucchResCb;
+ RgrSchFrmt1b3TypEnum uciFrmtTyp; /*!< Store value of format1bcs or format3.It
+ is updated from upper layer*/
+/*f1b_Sprint3*/
+ U8 numSCells; /* !< number of configured SCells */
+ U8 cellIdToCellIdxMap[CM_LTE_MAX_CELLS]; /*!< Mapping info of Cell Id to Cell Idx */
+
+ RgSchUeCellInfo *cellInfo[CM_LTE_MAX_CELLS]; /*!< DL Sec Cell Information */
+#ifdef TFU_UPGRADE
+ RgSchUePCqiCb *nPCqiCb; /*!< Pointer to Periodic Cqi CB for which next CQI is expected*/
+ RgSchUePCqiCb *nPRiCb; /*!< Pointer to Periodic Cqi CB for which next RI is expected*/
+#endif
+ U8 remBoCnt; /*!< count of occurence when BO is not fullfilled
+ in a TTI */
+ U8 *zeroBoCnt; /*!< pointer of count of occurence when BO is
+ Zero */
+#ifdef LTE_ADV
+ Bool isScellExplicitDeAct; /*!< TRUE when SCELL deactivation timer is Infinity/Not configured */
+ Bool allocCmnUlPdcch; /*!< If this flag is TRUE, allocate PDCCH from Common
+ search space */
+ U8 simulAckNackCQIFormat3; /* !< Flag for simultanious A/N and CQI on PUCCH Format 3 */
+#endif
+ RgSchUeDciSize dciSize; /*!< DCI Sizes */
+ RgrAccessStratumRls accessStratumRls; /*!< UE Release */
+#ifdef RG_PFS_STATS
+ RgSchPfsStats pfsStats;
+#endif
+#ifdef EMTC_ENABLE
+ Bool isEmtcUe; /*!< flag to check EMTC UE */
+ Void *emtcUeInfo; /*!< EMTC UE specific information */
+#endif
+#ifdef RG_5GTF
+ RgSch5gtfUeCb ue5gtfCb; /*!< UECb of 5gtf */
+#endif
+};
+
+
+/**
+ * @brief
+ * Configuration Information for Upper SAPs at RGU, CRG and RGR interfaces.
+ */
+typedef struct rgSchUpSapCfgInfo
+{
+ Pst sapPst; /*!< Post info associated with SAP */
+ SpId spId; /*!< SpId associated with SAP */
+ SuId suId; /*!< SuId associated with SAP */
+}RgSchUpSapCfgInfo;
+
+/**
+ * @brief
+ * Configuration Information for Lower SAP at TFU interface.
+ */
+typedef struct rgSchLowSapCfgInfo
+{
+ Pst sapPst; /*!< Post info associated with SAP */
+ SpId spId; /*!< SpId associated with SAP */
+ SuId suId; /*!< SuId associated with SAP */
+ TmrCfg bndTmr; /*!< Bind Timer Value */
+}RgSchLowSapCfgInfo;
+
+/**
+ * @brief
+ * Control Block structure for Upper SAPs at RGU, CRG and RGR interfaces.
+ */
+typedef struct rgSchUpSapCb
+{
+ RgSchUpSapCfgInfo sapCfg; /*!< Configuration info */
+ RgSapSta sapSta; /*!< SAP Status */
+ RgSchCellCb *cell; /*!< Cell associated with this sap */
+}RgSchUpSapCb;
+
+/**
+ * @brief
+ * Control Block structure for Lower SAP at TFU interface.
+ */
+typedef struct rgSchLowSapCb
+{
+ RgSchLowSapCfgInfo sapCfg; /*!< SAP configuration info */
+ RgSapSta sapSta; /*!< SAP Status */
+ U8 numBndRetries; /*!< Number of Bind Retries */
+ RgSchCellCb *cell; /*!< Cell associated with this SAP */
+ CmTimer tmrBlk; /*!< Timer Block associated with this SAP */
+}RgSchLowSapCb;
+
+/**
+ * @brief
+ * structure holding Layer Manager Response information cached from control
+ * request.
+ */
+typedef struct rgSchLmResponse
+{
+ TranId transId; /*!< Transaction ID */
+ Resp response; /*!< Response */
+}RgSchLmResponse;
+
+/* XXX: Below structures added for PDCCH Order req for RACH Module */
+typedef enum sfnEnum
+{
+ RG_SCH_SFN_ANY,
+ RG_SCH_SFN_ODD,
+ RG_SCH_SFN_EVEN
+} SfnEnum;
+
+typedef struct rgSchConfigIdx
+{
+ U8 configurationIndex; /* New RGR Cell cfg */
+ SfnEnum sfn;
+ U8 subframes[10];
+} RgSchConfigIdx;
+
+typedef struct rgSchRapId
+{
+ U8 rapId;
+ CmLteTimingInfo lastAllocPRACHMaskIdx;
+} RgSchRapId;
+
+typedef struct pdcchOrderCfg
+{
+ RgSchRapId rapIds[RGSCH_MAX_RAPID];
+ RgSchConfigIdx configIdx;
+} PdcchOrderCfg;
+/* XXX: End */
+
+/**
+ @brief Measurement Gap related information per cell. */
+typedef struct rgSchMeasGapCb
+{
+ CmLListCp gapPrd40Q[RG_SCH_CMN_MEAS_GAPPRD40]; /*!< Measurement Gap queue
+ for UEs with 40 ms gap period */
+ CmLListCp gapPrd80Q[RG_SCH_CMN_MEAS_GAPPRD80]; /*!< Measurement Gap queue
+ for UEs with 80 ms gap period */
+} RgSchMeasGapCb;
+
+/**
+ @brief ACK-NACK repetition related information per cell. */
+typedef struct rgSchAckNakRepCb
+{
+#ifdef LTE_TDD
+ CmLListCp ackNakRepQ[2*RGSCH_NUM_SUB_FRAMES]; /*!< ACK NACK repetition queue */
+#else
+ CmLListCp ackNakRepQ[RGSCH_NUM_SUB_FRAMES]; /*!< ACK NACK repetition queue */
+#endif
+} RgSchAckNakRepCb;
+/**
+ * @brief
+ * Structure holding RBG information for the BW
+ */
+typedef struct rgSchBwRbgInfo
+{
+ U8 numRbs; /*!< Total number of RBs for which information is
+ stored */
+ U8 numRbgs; /*!< Number of RBGs for the BW (rounded off to the
+ closest RBG number */
+ U8 rbgSize; /*!< RBG size */
+ U8 lastRbgSize; /*!< Last RBG size : in number of RBs */
+ U8 rbgSubsetSize[RG_SCH_NUM_RATYPE1_SUBSETS]; /*!< RBG Subset 0,1,2,3
+ sizes: number of RBs
+ */
+}RgSchBwRbgInfo;
+/** @brief This structure is one element of the DRX Queue mainted per cell.
+ * @details It is composed of a list of linked lists, each tracking a specific
+ * timer as defined in the DRX functionality.
+ */
+typedef struct rgSchDrxQ
+{
+ CmLListCp onDurationQ; /*!< Tracks the start of onDuration Timer. */
+ CmLListCp onDurationExpQ; /*!< Tracks the Expiry of onDuration Timer. */
+ CmLListCp inActvTmrQ; /*!< Tracks the Expiry of drx-InactivityTimer. */
+ CmLListCp harqRTTQ; /*!< Tracks the Expiry of HARQ RTT timer. */
+ CmLListCp harqRetxQ; /*!< Tracks the Expiry of Re-Transmission timer. */
+ CmLListCp shortCycleQ; /*!< Tracks the Expiry of DRX Short Cycle. */
+#ifdef EMTC_ENABLE
+ CmLListCp ulHarqRTTQ; /*!< Tracks the Expiry of HARQ RTT timer for Uplink transmission */
+ CmLListCp ulHarqRetxQ; /*!< Tracks the Expiry of Re-Transmission timer for UPLINK. */
+#endif
+} RgSchDrxQ;
+
+/** @brief This structure is part of the RgSchCellCb structure and stores the
+ * DRX related information for a cell.dfort
+ * The cell contains a single Array of queues, wherein UEs shall be enqueued
+ * based on configured offset and periodicity and timer values. Please note the
+ * same queue is utilized for Long and Short DRX cycle.
+ */
+typedef struct rgSchDRXCellCb
+{
+ RgSchDrxQ drxQ[RG_SCH_MAX_DRXQ_SIZE ]; /*!< Maintains all
+ the timers for DRX. */
+ Bool delInUlScan; /*!< Maintains whether elements
+ from timer queue should be
+ removed while scanning in
+ UL or DL.*/
+} RgSchDRXCellCb;
+
+
+/* Added for SI Enhancement*/
+#ifdef RGR_SI_SCH
+
+/* Sib1 info */
+typedef struct sib1Info
+{
+ Buffer *sib1;
+ U8 mcs;
+ U8 nPrb;
+ MsgLen msgLen;
+}RgSchSib1Info;
+
+/* SI info */
+typedef struct siInfo
+{
+ Buffer *si;
+ U8 mcs;
+ U8 nPrb;
+ MsgLen msgLen;
+}RgSchSiInfo;
+
+/**
+ @brief SI Configuration information per cell. */
+typedef struct rgSchSiCfgInfo
+{
+ Buffer *mib; /*!< MIB PDU */
+ RgSchSib1Info sib1Info;
+ RgSchSiInfo siInfo[RGR_MAX_NUM_SI];
+}RgSchSiCfgInfo;
+
+/**
+ @brief SI Context information per SI. */
+typedef struct rgSchSiCtx
+{
+ U8 siId; /*!< SI Id */
+ CmLteTimingInfo timeToTx; /*!< Time at which the SI for this SI
+ context need to be scheduled.*/
+ CmLteTimingInfo maxTimeToTx;/*!< Max Time to TX for this SI */
+ U8 retxCntRem; /*!< SI retransmit count remaining */
+ U16 i; /*!< Value used to calculate the Riv of SI */
+ Bool warningSiFlag; /*!< Flag for Warning SI */
+} RgSchSiCtx;
+
+
+/**
+ @brief Contains each PDU of Warning SI */
+typedef struct warningSiPdu
+{
+ CmLList lnk;
+ Buffer *pdu;
+ U8 mcs;
+ U8 nPrb;
+ MsgLen msgLen;
+}RgSchWarningSiPdu;
+
+
+/**
+ @brief warningSi node having multiple segments */
+typedef struct warningSiSeg
+{
+ /* ccpu00136659: CMAS ETWS design changes */
+ CmLListCp segLstCp; /*!< LList of Warning SI Segments */
+ RgSchWarningSiPdu pduNode[RGR_MAX_WARNING_SI_SEG];
+ RgrCfgTransId transId; /*!< Transaction Id */
+}RgSchWarningSiSeg;
+
+/**
+ @brief Warning SI structure per Cell. */
+typedef struct warningSi
+{
+ /* ccpu00136659: CMAS ETWS design changes */
+ RgSchWarningSiSeg warningSiMsg;
+ /*!< Each node contains LList of si segments. */
+ U8 siId; /*!< Warning SI ID */
+ U8 idx; /*!< Warning SI Idx in RgSchWarningSiInfo */
+}RgSchWarningSiInfo;
+
+/**
+ @brief SI Array Structure for each SI */
+typedef struct siArray
+{
+ Bool isWarningSi; /*!< Flag for Warning SI */
+ void *si; /*!< Pointer for SI */
+}
+RgSchSiArray;
+/**
+ @brief SI Control BLock per Cell. */
+typedef struct rgSchSiCb
+{
+ Bool siBitMask; /*!< Bitmask to indicate which of the SI
+ components have been updated */
+ RgSchSiCtx siCtx; /*!< SI Context */
+ RgrSiCfg newSiCfg; /*!< New SI Configuration, valid if the
+ respective bit is set in bit mask
+ siBitMask */
+ S8 inWindow; /*!< counter to indicate the start of a new
+ si window. Reset to siWinLen at the start
+ of window. */
+ RgSchSiCfgInfo crntSiInfo;/*!< PDUs for current modification period */
+ RgSchSiCfgInfo newSiInfo; /*!< PDUs for next modification period */
+ RgSchWarningSiInfo warningSi[RGR_MAX_NUM_WARNING_SI];
+ /*!< PDUs for warning SI */
+ RgSchSiArray siArray[RGR_MAX_NUM_SI]; /*!< Pointers for SIs */
+} RgSchSiCb;
+#endif /*RGR_SI_SCH */
+/* R8 Upgrade */
+typedef struct rgSchBiInfo
+{
+ U16 prevBiTime; /*!< Previous BI Value in ms Calculated and
+ Sent in Previous Response */
+ CmLteTimingInfo biTime; /*!< Time at which previous BI sent */
+} RgSchBiInfo;
+
+/* RRM_SP1_START */
+typedef struct rgSchQciPrbUsage
+{
+ U8 qci; /*!< QCI of the Logical Channel */
+ U32 dlTotPrbUsed; /*!< total PRB used for DL within one interval*/
+ U32 ulTotPrbUsed; /*!< total PRB used for UL within one interval*/
+}RgSchQciPrbUsage;
+
+/* RRM_SP1_END */
+
+typedef struct rgSchPrbUsage
+{
+ Bool prbRprtEnabld; /*!< reporting is enabled or not*/
+ U16 rprtPeriod; /*!< reporting interval to send PRB usage to the
+ RRM (in subframes)*/
+ CmLteTimingInfo startTime; /*!< timing information when the summation is
+ started in terms of sfn and subframe*/
+/* RRM_SP1_START */
+ RgSchQciPrbUsage qciPrbRpts[RGINF_MAX_GBR_QCI_REPORTS]; /*!< toal
+ PRB usgae for GBR
+ QCIs */
+/* RRM_SP1_END */
+}RgSchPrbUsage;
+
+/* LTE_ADV_FLAG_REMOVED_START */
+/* @brief Enum to differntiate the subframe */
+/* Donot change the value of enum member - code dependency */
+typedef enum rgSchAbsSfEnum
+{
+ RG_SCH_ABS_ENABLED_NONABS_SF = 0, /* ABS is enabled and ABS SF */
+ RG_SCH_ABS_ENABLED_ABS_SF = 1, /* ABS is enabled and non ABS SF */
+ RG_SCH_ABS_DISABLED = 2 /* ABS is disabled */
+} RgSchAbsSfEnum;
+
+/* @brief Control block for LTE Advance Feature */
+typedef struct rgSchLteAdvFeatureCb
+{
+ RgrSfrConfig sfrCfg; /*!< Configuration of SFR feature */
+ RgrDsfrConfig dsfrCfg; /*!< Configuration of DSFR feature */
+ RgrAbsConfig absCfg; /*!< Configuration of ABS feature */
+ RgSchAbsSfEnum absDlSfInfo; /*< Flag to indicate current scheduling
+ DL subframe is ABS subframe or not */
+ U8 absPatternDlIdx;
+ U32 absLoadTtiCnt;
+ U32 absLoadInfo[RGR_ABS_PATTERN_LEN];
+} RgSchLteAdvFeatureCb;
+/* LTE_ADV_FLAG_REMOVED_END */
+
+/*<! baseSize is the fixed sizes of the respective DCIs. If no other size
+ * mentioned, baseSize is the final size of the DCI */
+typedef struct rgSchCellDciSize {
+#ifdef EMTC_ENABLE
+ U8 baseSize[TFU_DCI_FORMAT_6_2+1]; /*!< Fixed Base Size of DCI 0/1/1A/6-0A/6-1A/6-0B/6-1B/6-2 without any adjustment */
+ U8 size[TFU_DCI_FORMAT_6_2+1]; /*!< DCI 0/1A final size in common Search Space and not scrambled by C-RNTI
+ DCi 3/3A final sizes
+ DCI 2/2A final sizes
+ DCI 6-0A/6-0B final sizes
+ DCI 6-1A/6-1B final sizes
+ DCI 6-2 final sizes */
+#else
+ U8 baseSize[TFU_DCI_FORMAT_1A+1]; /*!< Fixed Base Size of DCI 0/1/1A without any adjustment */
+ U8 size[TFU_DCI_FORMAT_3A+1]; /*!< DCI 0/1A final size in common Search Space and not scrambled by C-RNTI
+ DCi 3/3A final sizes
+ DCI 2/2A final sizes */
+#endif
+ U8 dci0HopSize; /*!< DCI 0 Hop Size */
+} RgSchCellDciSize;
+
+/**
+ * @brief
+ * Cell level measurements
+ */
+typedef struct rgSchMeasCb
+{
+ U32 dlTpt; /*!< DL Bytes served in a fixed time PERIOD */
+ U32 dlBytesCnt; /*!< DL Bytes served from start of this time period */
+ U32 ulTpt; /*!< DL Bytes served in a fixed time PERIOD */
+ U32 ulBytesCnt; /*!< UL Bytes served from start of this time period */
+}RgSchMeasCb;
+
+/**
+ * @brief
+ * Cell level thresholds
+ */
+typedef struct rgSchThrsldsCb
+{
+ U8 maxDlItbs;
+ U8 maxUlItbs;
+}RgSchThrsldsCb;
+/**
+ * @brief
+ * CPU Overload control state info
+ */
+typedef struct rgSchCpuOvrLdCntrlCb
+{
+ U8 cpuOvrLdIns;
+ U32 tgtDlTpt;
+ U32 tgtUlTpt;
+ U8 dlNxtIndxDecNumUeTti; /*!< Total DL num UE per TTI reduction instruction applied */
+ U8 ulNxtIndxDecNumUeTti; /*!< Total UL num UE per TTI reduction instruction applied */
+ U8 maxUeNewTxPerTti[10]; /*!< list of subframe where DL num UE per TTI reduction applied */
+ U8 maxUeNewRxPerTti[10]; /*!< list of subframe where UL num UE per TTI reduction applied */
+}RgSchCpuOvrLdCntrlCb;
+
+/**
+ * @brief
+ * Cell Control block per cell.
+ */
+struct rgSchCellCb
+{
+ CmLteCellId cellId; /*!< Cell ID */
+ Inst instIdx; /*!< Index of the scheduler instance */
+ Inst macInst; /*!< Index of the MAC instance */
+ U8 schTickDelta; /* 4UE_TTI_DELTA */
+ Bool stopSiSch; /*!< If TRUE Bcch,Pcch Scheduling is not done */
+ U8 stopDlSch; /*!< If TRUE DL scheduling is not done */
+ Bool stopUlSch; /*!< If TRUE UL scheduling is not done */
+ Bool isDlDataAllwd; /*!< FALSE for Uplink subframes */
+ RgrDlHqCfg dlHqCfg; /*!< HARQ related configuration */
+ RgSchRntiDb rntiDb; /*!< RNTIs DB: range of rntis to be managed by MAC */
+ struct schdInfoS
+ {
+ Void *sch; /*!< Common Scheduler specific information */
+ RgSchdApis *apis; /*!< Common Scheduler APIs */
+ } sc;
+
+ Bool isCpUlExtend; /*!< Cyclic prefix : TRUE-extended/FALSE-normal */
+ Bool isCpDlExtend; /*!< Cyclic prefix : TRUE-extended/FALSE-normal */
+ U8 numTxAntPorts; /*!< Number of Tx antenna ports */
+ RgrBwCfg bwCfg; /*!< Bandwidth Configuration */
+ U8 pbchRbStart; /*!< Indicates the Start RB of the center 6 RBs of DL BW */
+ U8 pbchRbEnd; /*!< Indicates the Start RB of the center 6 RBs of DL BW */
+ U8 numCellRSPerSf; /*!< Indicates the number of cell specific
+ Reference symbols in a Subframe */
+ RgrPhichCfg phichCfg; /*!< PHICH Config Information */
+ RgrPucchCfg pucchCfg; /*!< PUCCH Config Information */
+ RgSchSrsCfg srsCfg; /*!< SRS Config Information */
+ RgrRachCfg rachCfg; /*!< RACH Configuration */
+ /* R8 Upgrade */
+ RgSchBiInfo biInfo; /* CELL wide BI Info */
+ RgrSiCfg siCfg; /*!< SI Configuration */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ RgrPuschCfg puschCfg; /*!< Cell-specific hopping configuration */
+#endif
+ RgrPreambleSetCfg macPreambleSet; /*!< Range of PDCCH Order Preamble Id's
+ to be managed by MAC */
+ CmLteTimingInfo crntTime; /*!< Current frame and subframe number for
+ the cell */
+ CmLteTimingInfo hiDci0Time; /*!< Scheduling SFN, SF for HIDCI-0 */
+ CmLteTimingInfo hqRlsTime; /*!< SFN, SF for HARQ clean up */
+ CmLteTimingInfo dlSfRlsTime; /*!< SFN, SF for Downlink subframe clean up*/
+ CmLteTimingInfo dlDciTime; /*!< SFN, SF for DL control Request */
+ CmLteTimingInfo rcpReqTime; /*!< SFN, SF for UL reception Request */
+ RgSchCfgCfb rgCfgInfo; /*!< Control block for configuration related
+ information */
+ U8 ulCcchId; /*!< LcId for uplink CCCH */
+ U8 dlCcchId; /*!< LcId for downlink CCCH */
+ RgSchClcDlLcCb cmnLcCb[RGSCH_MAX_CMN_LC_CB]; /*!< BCCH/PCCH logical channel control block */
+ CmHashListCp ueLst; /*!< Hash list of UE control
+ blocks: RgSchUeCb */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ CmHashListCp spsUeLst; /*!< Hash list of UE control blocks
+ for spsRnti: RgSchUeCb */
+#endif /* LTEMAC_SPS */
+ CmLListCp taUeLst; /*!< List of ueCbs having ta */
+#ifdef RGR_V1
+ /* CR timer changes*/
+ CmLListCp ccchSduUeLst; /*!< List of ueCbs scheduled for CCCH
+ SDU */
+ CmLListCp contResGrdTmrLst; /*!< List of raCbs whose Guard timer is
+ running */
+ CmLListCp contResTmrLst; /*!< List of raCbs whose contention
+ resolution timer is running */
+#endif
+ RgSchRaInfoCb raInfo; /*!< Random access related information for
+ cell */
+ CmLListCp pdcchLst; /*!< List of free RgSchPdcch structures */
+ CmTqCp tqCp;
+ CmTqType tq[RGSCH_UE_TQ_SIZE];
+ U8 crntSfIdx; /*!< Current index for allocation */
+#ifdef LTE_TDD
+ RgInfSfAlloc sfAllocArr[RGSCH_SF_ALLOC_SIZE]; /*!< Subframe Allocation
+ info to be sent to MAC */
+#else
+ RgInfSfAlloc sfAllocArr[RGSCH_NUM_SUB_FRAMES]; /*!< Subframe Allocation
+ info to be sent to MAC */
+#endif
+ RgInfRlsHqInfo rlsHqArr[RGSCH_NUM_SUB_FRAMES]; /*!< Harq Release
+ info to be sent to MAC */
+ U8 crntHqIdx; /*!< Current index for Harq release info */
+ RgSchLowSapCb *tfuSap;
+/* Added for sending TTI tick to RRM */
+#if (defined(RGR_RRM_TICK) || defined(RGR_CQI_REPT))
+ RgSchUpSapCb *rgrSap; /*!< Pointer to the cell's RGR SAP
+ Control Block */
+#endif
+ RgSchUpSapCb *rgmSap; /*!< Pointer to the cell's RGM SAP
+ Control Block */
+#ifdef RGR_RRM_TICK
+ U8 rrmTtiIndPrd; /*!< Periodicity of TTI indication from
+ MAC towards RGR user. Range [1-255]. A
+ value of 1 means one tick per System
+ Frame and 2 means one tick per 2 System
+ Frame, and so on. */
+#endif
+ PdcchOrderCfg pdcchOrdCfg;
+ RgSchMeasGapCb measGapCb; /*!< Measurement gap control block */
+ RgSchAckNakRepCb ackNakRepCb; /*!< Ack-Nack Repetition control block */
+#ifdef LTE_TDD
+ RgSchTddRachRspLst *rachRspLst; /*!< List of awaiting RACH responses */
+ U8 numDlSubfrms; /*!< Number of DL subframes */
+ U8 ulDlCfgIdx; /*!< UL-DL Configuration Index */
+ U8 ackNackFdbkArrSize; /*!< Maximum Number of Ack/Nack
+ feedback information to be
+ stored */
+ S8 tddHqSfnCycle; /*!< Counter to keep track of the
+ number of sfn,sf wrap arounds.
+ This is used for UL harq
+ determination. It ranges from
+ 0 to num Ul Harq-1 */
+ RgSchTddSplSubfrmCfg splSubfrmCfg; /*!< Special subframe configuration */
+ Bool isDwPtsCnted; /*!< is DwPts counted as PDCCH sf */
+ RgSchTddNpValTbl rgSchTddNpValTbl;/*!< Mapping between 'Np' and 'p' */
+ RgSchDlSf **subFrms; /*!< DL subframes list */
+ RgSchTddPrachRscInfo prachCfg; /*!< PRACH configuration */
+ CmHashListCp ueTfuPendLst; /*!< Used for HARQ Ack/Nack
+ Multiplexing */
+ /* TODO:: change to array of pointers */
+ CmLListCp n1ResUsedLst[RGSCH_NUM_SUB_FRAMES]; /*!< For storing the used
+ N1 resources for scell in case of F1B CS */
+#else
+ RgSchDlSf *subFrms[RGSCH_NUM_DL_SUBFRAMES];
+ U16 nCce;
+#endif
+ RgSchDynCfiCb dynCfiCb; /*!< Dynamic CFI control block */
+/* Changes for MIMO feature addition */
+ U8 noOfRbgs; /*!< Number of RBGs for this bw */
+ U8 rbgSize; /*!< RBG Size */
+ /* Added support for SPS*/
+#ifdef LTEMAC_SPS
+ RgSchBwRbgInfo dlBwRbgInfo; /*!< RBG information for the configured
+ DL BW */
+ RgrSpsCellCfg spsCellCfg; /*!< SPS specific configuration for
+ the cell */
+ RgSchBwRbgInfo spsBwRbgInfo; /*!< RBG information for configured maximum
+ SPS bandwidth */
+#endif
+#ifdef LTE_L2_MEAS
+ RgSchRaPreambles raPrmbs; /*!< Different received RA preambles */
+ RgSchAvgPrbDl avgPrbDl; /*!< PRB usage in percentage per QCI for DL */
+ RgSchAvgPrbUl avgPrbUl; /*!< PRB usage in percentage per QCI for UL */
+ CmLListCp l2mList; /*!< List of all L2M requests
+ rgSchL2MeasCb */
+ RgSchQciCb qciArray[LRG_MAX_QCI]; /*!< Array of all qci's configured
+ rgSchQciCb */
+ Bool sndL2Meas; /*!< send L2 Meas in case no le mesurement timer is running*/
+ RgSchTbCnt dlUlTbCnt; /*!< Count of DL and UL TB transmitteed and Faulty
+ TB (for wich NACK is received) */
+#endif /* LTE_L2_MEAS */
+ U8 ulAvailBw; /*!< Total Uplink band width available
+ for this sub frame */
+#ifdef TFU_UPGRADE
+ RgSchPerPucchCb pCqiSrsSrLst[RG_SCH_PCQI_SRS_SR_TRINS_SIZE];
+ /*!< To store next active Periodic CQI/PMI, RI,
+ SRS and SR Transmission instance */
+#endif /* TFU_UPGRADE */
+
+#ifdef LTEMAC_HDFDD
+ CmLListCp hdFddLst; /*!< Half Duplex FDD UE list */
+#endif /* LTEMAC_HDFDD */
+ RgSchDRXCellCb *drxCb; /*!< Pointer to the DRX control block shall be
+ allocated at the time of cell configuration. */
+ /* Added for SI Enhancement*/
+#ifdef RGR_SI_SCH
+ RgSchSiCb siCb; /*!< SI Control Block */
+#endif /*RGR_SI_SCH */
+ RgSchPrbUsage prbUsage; /*!< measures average PRB usage for configured interval*/
+ U16 t300TmrVal; /*!< t300Timer value configured in Frames */
+/* LTE_ADV_FLAG_REMOVED_START */
+ TknStrOSXL rntpAggrInfo; /*!< RNTP Info */
+ RgrLoadInfReqInfo loadInfReqInfo; /*!< Consists startRb & endRb
+ location for which CC to
+ be raised to P-High */
+ RgSchLteAdvFeatureCb lteAdvCb; /*!< Control block for LTE Adv
+ features */
+/* LTE_ADV_FLAG_REMOVED_END */
+ U32 dlNumUeSchedPerTti[RG_MAX_NUM_UE_PER_TTI]; /*!<DL mUe/Tti histograms*/
+ U32 ulNumUeSchedPerTti[RG_MAX_NUM_UE_PER_TTI]; /*!<UL mUe/Tti histograms*/
+ Bool overLoadBackOffEnab; /*!< Overload Rach Backoff enable/disable */
+ U8 overLoadBackOffval; /*!< Overload Rach BackOff value */
+ U8 refreshUeCnt[RGSCH_MAX_REFRESH_OFFSET]; /*! To maintain number of UE refreshed per subframe */
+ U8 minDlResNonCsg; /*!< Minimum DL resources reserved for Non CSG UEs */
+ U8 minUlResNonCsg; /*!< Minimum UL resources reserved for CSG UEs */
+ Bool isAutoCfgModeEnb; /*!< Indicates Auto config of TM mode is enabled or
+ disabled. True - Enabled, False - Disabled */
+ CmLListCp lcMonitorLst; /*LC Lst used for flow cntrl */
+ U32 prbCnt; /*!<PRB usage in flow control interval*/
+ U32 maxPrbCnt; /*!<Max PRB cnt after which Flow Cntrl
+ can be triggered */
+ RgSchCpuOvrLdCntrlCb cpuOvrLdCntrl; /*!< CPU Overload control state info */
+ RgSchMeasCb measurements; /*!< Cell level measurements */
+ RgSchThrsldsCb thresholds; /*!< Cell level thresholds */
+#ifdef TENB_STATS
+ TSL2CellStatsCb *tenbStats; /*!< CELL Stats Holder */
+#endif
+ RgSchCellDciSize dciSize;
+#ifdef LTE_ADV
+ CmLListCp sCellUeLst; /*!< List of UEs for which this cell is secondary cell*/
+ Bool isPucchFormat3Sptd;
+#endif
+#ifdef RG_PFS_STATS
+ U32 totalPrb;
+ U32 totalTime;
+#endif
+ Void * laaCb;
+#ifdef EMTC_ENABLE
+ /* TODO:: Below members need to be moved
+ * to emtc specific files and have void *
+ * here */
+ U8 emtcEnable;
+ Void *emtcCb;
+ RgSchRntiDb emtcRntiDb; /*!< RNTIs DB: range of rntis to be managed by MAC */
+#endif
+ RgSchIotResMngmtCb resMngmt;
+#ifdef RG_5GTF
+ RgSch5gtfCellCb cell5gtfCb;
+#endif
+};
+
+/**
+ * @brief
+ * Structure holding LTE MAC's General Configuration information.
+ */
+typedef struct rgSchGenCb
+{
+ U8 tmrRes; /*!< Timer resolution */
+ RgSchLmResponse *bndCfmResp; /*!< Respones value for Bind Confirm */
+ RgSchLmResponse ustaResp; /*!< Respones value for Alarms */
+ U8 startCellId; /*!< Starting Cell Id */
+#ifdef LTE_ADV
+ Bool forceCntrlSrbBoOnPCel; /*!< value 1 means force scheduling
+ of RLC control BO and SRB BO on
+ PCell. val 0 means don't force*/
+ Bool isSCellActDeactAlgoEnable; /*!< TRUE will enable activation/deactivation algo at Schd */
+#endif
+}RgSchGenCb;
+
+#ifdef RG_5GTF
+/* 5GTF Dynamic TDD Specific defines */
+
+/* Number of subframes information managed */
+#define RG_SCH_DYNTDD_MAX_SFINFO 20
+
+/* Subframe Types */
+#define RG_SCH_DYNTDD_NOTDEF 0
+#define RG_SCH_DYNTDD_DLC_DLD 1
+#define RG_SCH_DYNTDD_DLC_DLD_ULC 2
+#define RG_SCH_DYNTDD_DLC_ULD 3
+#define RG_SCH_DYNTDD_DLC_ULD_ULC 4
+
+/* Mark the subframe */
+#define RG_SCH_DYN_TDD_MARKTYPE(_dynTdd, _sfi, _state)\
+{\
+ (_dynTdd)->sfInfo[(_sfi)].sfType = _state;\
+}
+
+/* Mark sfi as UL Subframe */
+#define RG_SCH_DYN_TDD_MARKTYPE_UL(_dynTdd, _sfi)\
+{\
+ RG_SCH_DYN_TDD_MARKTYPE(_dynTdd, _sfi, RG_SCH_DYNTDD_DLC_ULD);\
+}
+
+/* Mark sfi as DL Subframe */
+#define RG_SCH_DYN_TDD_MARKTYPE_DL(_dynTdd, _sfi)\
+{\
+ RG_SCH_DYN_TDD_MARKTYPE(_dynTdd, _sfi, RG_SCH_DYNTDD_DLC_DLD);\
+}
+
+/* Get SFI and SFN from given time and subframe offset */
+#define RG_SCH_DYN_TDD_GET_SFIDX(_sfi, _crntSfIdx, _offset)\
+ (_sfi) = (_crntSfIdx + _offset)% RG_SCH_DYNTDD_MAX_SFINFO
+
+/**
+ @brief Dynamic TDD subframe type. */
+
+typedef struct rgSchDynTddSfType
+{
+ U8 sfType; /*!< 0= NOT Defined
+ 1= DL Cntrl + DL Data
+ 2= DL Cntrl + DL Data + UL Cntrl
+ 3= DL Cntrl + UL Data
+ 4= DL Cntrl + UL Data + UL Cntrl
+ */
+
+}RgSchDynTddSfType;
+/**
+ @brief Dynamic TDD control Block */
+
+typedef struct rgSchDynTddCb
+{
+ Bool isDynTddEnbld; /*!< Is dynamic TDD enabled */
+ U8 crntDTddSfIdx; /*!< Pivot Index corresponding
+ cell's current subframe */
+ RgSchDynTddSfType sfInfo[RG_SCH_DYNTDD_MAX_SFINFO];
+}RgSchDynTddCb;
+
+#endif
+
+/**
+ * @brief
+ * Global Control block for LTE-MAC.
+ */
+struct _rgSchCb
+{
+ TskInit rgSchInit; /*!< Task Init info */
+ RgSchGenCb genCfg; /*!< General Config info */
+ U8 numSaps; /*!< Num RGR Saps = Num TFU Saps */
+ RgSchUpSapCb *rgrSap; /*!< RGR SAP Control Block */
+ RgSchLowSapCb *tfuSap; /*!< TFU SAP Control Block */
+ RgSchUpSapCb *rgmSap; /*!< TFU SAP Control Block */
+ CmTqCp tmrTqCp; /*!< Timer Task Queue Cntrl Point */
+ CmTqType tmrTq[RGSCH_TQ_SIZE]; /*!< Timer Task Queue */
+ U8 rgSchDlDelta; /* 4UE_TTI_DELTA */
+ U8 rgSchCmnDlDelta;
+ U8 rgSchUlDelta;
+ RgSchCellCb *cells[CM_LTE_MAX_CELLS]; /* Array to store cellCb ptr */
+ RgrSchedEnbCfg rgrSchedEnbCfg; /*!< eNB level RR/PFS Config */
+ Void *rgSchEnbPfsDl; /*!< eNB level PFS DL Block */
+
+ Void * laaCb;
+#ifdef RG_5GTF
+ RgSchDynTddCb rgSchDynTdd; /*!< Dynamic TDD Control Block */
+#endif
+};
+
+/* Declaration for scheduler control blocks */
+EXTERN RgSchCb rgSchCb[RGSCH_MAX_INST];
+
+/*
+ * Data structures for RAM
+ */
+
+/**
+ * @brief
+ * Random Access Req Info to be stored in cellCb.
+ */
+typedef struct rgSchRaReqInfo
+{
+ CmLList raReqLstEnt; /*!< Linked list entity for RaReq List */
+ CmLteTimingInfo timingInfo; /*!< RACHO: Time of RaReq Reception */
+ RgTfuRaReqInfo raReq; /*!< Random Access Request Information */
+ RgSchUeCb *ue; /*!< UECB if RAP ID is a dedicated one */
+} RgSchRaReqInfo;
+
+/**
+ * @enum rgSchRaState
+ * Enumeration of random access states.
+ */
+typedef enum rgSchRaState
+{
+ RGSCH_RA_MSG3_PENDING, /*!< Msg3 reception pending */
+ RGSCH_RA_MSG4_PENDING, /*!< Msg4 transmission pending */
+ RGSCH_RA_MSG4_DONE /*!< Msg4 transmission successful */
+} RgSchRaState;
+
+/**
+ * @brief
+ * Control block for Random Access.
+ */
+struct rgSchRaCb
+{
+ CmLList raCbLnk; /*!< To link to the raCb list */
+ CmLList schdLnk; /*!< To link raCb to the "to be scheduled"
+ list */
+ CmLteRnti tmpCrnti; /*!< Temporary C-RNTI */
+ CmLteTimingInfo timingInfo; /*!< Timing information */
+ RgSchRntiLnk *rntiLnk; /*!< Link to RNTI for raCb */
+ RgSchRaState raState; /*!< Random access state */
+ struct
+ {
+ U32 bo; /*!< Buffer occupancy for CCCH */
+ } dlCcchInfo; /*!< Params for DL CCCH */
+ U8 msg3HqProcId; /*!< Msg3 Harq Process ID */
+ /*ccpu00128820 - DEL - msg3HqProcRef is delete for Msg3 alloc double delete issue*/
+ RgSchUlHqProcCb msg3HqProc; /*!< msg3HqProcRef points to this initially */
+ RgSchUeCb *ue; /*!< NULL initially */
+ Bool toDel; /*!< To delete this RaCb after msg4 reject */
+ TknU8 phr; /*!< To store the PHR, if received along with
+ Msg3 */
+ CmLList rspLnk; /*!< Used to link RACB to a frame for resp */
+ U8 rapId; /*!< RAP ID */
+ TknU16 ta; /*!< Timing Adjustment */
+ RgSchUlGrnt msg3Grnt; /*!< Msg3 grant as given by the UL Sched */
+ U32 y[RGSCH_NUM_SUB_FRAMES]; /*!< y values using tmpCrnti by DLSCHED */
+ RgSchDlHqEnt *dlHqE; /*!< DL HARQ module */
+ U8 ccchCqi; /*!< DL Cqi obtained from RaReq and Used for CCCH */
+ RgSchDlRbAlloc rbAllocInfo; /*!< RB Allocation Info for MSG4 Trans/Retrans */
+ /* PHR handling for MSG3 */
+ CmLteTimingInfo msg3AllocTime; /*!< Allocation time for msg3 grant */
+#ifdef RGR_V1
+ /* CR timer changes*/
+ CmLList contResTmrLnk; /*!< To link raCb to the
+ Guard Timer/Contention Resolution timer list*/
+ CmLteTimingInfo expiryTime; /*!< Expiry time for Guard/Contention
+ Resolution timers */
+
+ U32 ccchSduBo; /*!<To store CCCH SDU BO if it arrives while
+ ContRes CE is transmitting or retransmitting*/
+#endif
+#ifdef EMTC_ENABLE
+ Bool isEmtcRaCb; /*!< 0 - Normal, 1 - EMTC */
+ Void *emtcRaInfo;
+#endif
+};
+
+/**
+ * @brief
+ * Carries the Error information.
+ */
+struct rgSchErrInfo
+{
+ U8 errType; /*!< Error Type */
+ U16 errCause; /*!< Cause of Error */
+};
+
+/* Global Variables */
+#ifdef LTE_TDD
+
+#ifdef LTEMAC_SPS
+EXTERN U8 rgSchTddSpsDlMaxRetxTbl[RGSCH_MAX_TDD_UL_DL_CFG];
+#endif
+typedef U8 RgSchTddUlDlSubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddUlDlSubfrmTbl rgSchTddUlDlSubfrmTbl;
+
+typedef struct rgSchTddSplSubfrmInfo RgSchTddSplSubfrmInfoTbl[RGSCH_MAX_TDD_SPL_SUBFRM_CFG];
+EXTERN RgSchTddSplSubfrmInfoTbl rgSchTddSplSubfrmInfoTbl;
+
+typedef struct rgSchTddDlAscSetIdxK RgSchTddDlAscSetIdxKTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddDlAscSetIdxKTbl rgSchTddDlAscSetIdxKTbl;
+/* ccpu00132282 */
+EXTERN RgSchTddDlAscSetIdxKTbl rgSchTddDlHqPucchResCalTbl;
+
+typedef U8 RgSchTddPhichMValTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddPhichMValTbl rgSchTddPhichMValTbl;
+
+typedef U8 RgSchTddKPhichTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddKPhichTbl rgSchTddKPhichTbl;
+
+typedef RgSchTddPhichOffInfo RgSchTddPhichOffInfoTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+
+typedef U8 RgSchTddUlAscIdxKDashTbl[RGSCH_MAX_TDD_UL_DL_CFG-1][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddUlAscIdxKDashTbl rgSchTddUlAscIdxKDashTbl;
+
+#ifdef LTEMAC_SPS
+typedef U8 RgSchTddInvDlAscSetIdxTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddInvDlAscSetIdxTbl rgSchTddInvDlAscSetIdxTbl;
+#endif
+
+typedef U8 RgSchTddPuschTxKTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddPuschTxKTbl rgSchTddPuschTxKTbl;
+
+typedef U8 RgSchTddUlNumHarqProcTbl[RGSCH_MAX_TDD_UL_DL_CFG];
+EXTERN RgSchTddUlNumHarqProcTbl rgSchTddUlNumHarqProcTbl;
+
+typedef U8 RgSchTddDlNumHarqProcTbl[RGSCH_MAX_TDD_UL_DL_CFG];
+EXTERN RgSchTddDlNumHarqProcTbl rgSchTddDlNumHarqProcTbl;
+
+/* Number of ACK/NACK Feedback to be stored based on UL-DL Configuration Index */
+typedef U8 RgSchTddANFdbkMapTbl[RGSCH_MAX_TDD_UL_DL_CFG];
+EXTERN RgSchTddANFdbkMapTbl rgSchTddANFdbkMapTbl;
+
+/* Number of UL subframes */
+typedef RgSchTddSubfrmInfo RgSchTddMaxUlSubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG];
+EXTERN RgSchTddMaxUlSubfrmTbl rgSchTddMaxUlSubfrmTbl;
+
+/* Number of UL subframes */
+typedef U8 RgSchTddNumUlSubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddNumUlSubfrmTbl rgSchTddNumUlSubfrmTbl;
+
+/* Number of low UL subframes Indices*/
+typedef U8 RgSchTddLowUlSubfrmIdxTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddLowUlSubfrmIdxTbl rgSchTddLowUlSubfrmIdxTbl;
+
+/* Number of high UL subframes Indices*/
+typedef U8 RgSchTddHighUlSubfrmIdxTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddHighUlSubfrmIdxTbl rgSchTddHighUlSubfrmIdxTbl;
+
+/* Number of low DL subframes Indices*/
+typedef U8 RgSchTddLowDlSubfrmIdxTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddLowDlSubfrmIdxTbl rgSchTddLowDlSubfrmIdxTbl;
+
+/* Number of high DL subframes Indices*/
+typedef U8 RgSchTddHighDlSubfrmIdxTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddHighDlSubfrmIdxTbl rgSchTddHighDlSubfrmIdxTbl;
+
+/* Number of DL subframes and Special subframes with DwPTS */
+typedef U8 RgSchTddNumDlSubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddNumDlSubfrmTbl rgSchTddNumDlSubfrmTbl;
+
+/* Number of DL subframes and Special subframes with DwPTS */
+typedef RgSchTddSubfrmInfo RgSchTddMaxDlSubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG];
+EXTERN RgSchTddMaxDlSubfrmTbl rgSchTddMaxDlSubfrmTbl;
+
+typedef U8 RgSchTddMsg3SubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddMsg3SubfrmTbl rgSchTddMsg3SubfrmTbl;
+#ifdef LTEMAC_SPS
+typedef RgSchTddMsg3SubfrmTbl RgSchTddSpsUlRsrvTbl;
+EXTERN RgSchTddMsg3SubfrmTbl rgSchTddSpsUlRsrvTbl;
+#endif
+
+typedef U8 RgSchTddRlsDlSubfrmTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+EXTERN RgSchTddRlsDlSubfrmTbl rgSchTddRlsDlSubfrmTbl;
+
+
+EXTERN U8 rgSchTddPucchTxTbl[RGSCH_MAX_TDD_UL_DL_CFG][RGSCH_NUM_SUB_FRAMES];
+
+#endif
+#ifdef LTE_ADV
+EXTERN RgSchCellCb* rgSchUtlGetCellCb ARGS((
+Inst inst,
+U16 cellId
+));
+
+EXTERN Void rgSCHSCellDlUeReset ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue
+));
+
+EXTERN Void rgSCHSCellDlLcCfg ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgSchDlLcCb *svc
+));
+
+EXTERN Void rgSCHSCellDlLcDel ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgSchDlLcCb *svc
+));
+
+EXTERN Void rgSCHSCellDlDedBoUpd ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgSchDlLcCb *svc
+));
+
+EXTERN Void rgSCHSCellSchdActDeactCe ARGS((
+RgSchUeCb *ueCb,
+RgSchDlHqTbCb *tbInfo
+));
+
+EXTERN Void rgSCHSCellAddToActDeactLst ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue
+));
+
+EXTERN Void rgSCHSCellRmvFrmActLst ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue
+));
+EXTERN S16 rgSCHSCellIsActive ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue
+));
+
+
+
+EXTERN Void rgSCHSCellHndlFdbkInd ARGS((
+RgSchDlHqProcCb *hqP,
+U8 tbIdx,
+U8 fdbk,
+Bool maxHqRetxReached
+));
+
+EXTERN Void rgSCHSCellDeactTmrExpry ARGS((
+RgSchUeCellInfo *sCell
+));
+
+EXTERN S16 rgSCHSCellTrigActDeact ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ueCb,
+U8 sCellIdx,
+U8 action
+));
+
+EXTERN S16 rgSCHSCellDelUe ARGS((
+RgSchCellCb *cellCb,
+RgSchUeCb *ueCb
+));
+
+EXTERN Bool rgSCHIsActvReqd ARGS ((
+RgSchCellCb *cell,
+RgSchUeCb *ue
+));
+
+EXTERN Void rgSCHSCellSelectAndActDeAct ARGS ((
+RgSchCellCb *PCell,
+RgSchUeCb *ueCb,
+U8 action
+));
+
+EXTERN S16 rgSCHSCellPCqiCfg ARGS((
+RgSchCellCb *priCellCb,
+RgSchCellCb *secCellCb,
+RgSchUeCb *ueCb,
+RgrUePrdDlCqiCfg *cqiCfg,
+CmLteUeCategory ueCat,
+U8 sCellIdx
+));
+
+EXTERN Void rgSCHUtlSndUeSCellDel2Mac ARGS ((
+RgSchCellCb *cell,
+CmLteRnti rnti
+));
+
+EXTERN U8 rgSCHUtlGetMaxTbSupp ARGS ((
+RgrTxMode txMode
+));
+#endif/*LTE_ADV*/
+
+/* APIs exposed by TMR module */
+EXTERN Void rgSCHTmrStartTmr ARGS((
+ RgSchCellCb *cellCb,
+ Ptr cb,
+ S16 tmrEvnt,
+ U32 tmrVal));
+
+EXTERN Void rgSCHTmrStopTmr ARGS((
+ RgSchCellCb *cellCb,
+ S16 tmrEvnt,
+ Ptr cb));
+
+EXTERN Void rgSCHTmrProcTmr ARGS((
+ Ptr cb,
+ S16 tmrEvnt));
+
+/* APIs exposed by TOM */
+
+EXTERN S16 rgSCHTomRaReqInd ARGS((
+ RgSchCellCb *cell,
+ TfuRaReqIndInfo *raReqInd));
+
+EXTERN S16 rgSCHTomPucchDeltaPwrInd ARGS((
+ RgSchCellCb *cell,
+ TfuPucchDeltaPwrIndInfo *pucchDeltaPwr));
+
+EXTERN S16 rgSCHTomUlCqiInd ARGS((
+ RgSchCellCb *cell,
+ TfuUlCqiIndInfo *ulCqiInd));
+
+EXTERN S16 rgSCHTomSrInd ARGS((
+ RgSchCellCb *cell,
+ TfuSrIndInfo *srInd));
+
+EXTERN S16 rgSCHTomDlCqiInd ARGS((
+ RgSchCellCb *cell,
+ TfuDlCqiIndInfo *dlCqiInd));
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+EXTERN S16 rgSCHTomRawCqiInd ARGS
+((
+RgSchCellCb *cell,
+TfuRawCqiIndInfo* rawCqiInd
+));
+
+EXTERN S16 rgSCHTomSrsInd ARGS
+((
+RgSchCellCb *cell,
+TfuSrsIndInfo* srsInd
+));
+
+#endif
+
+EXTERN S16 rgSCHTomDoaInd ARGS((
+ RgSchCellCb *cell,
+ TfuDoaIndInfo *doaInd));
+EXTERN S16 rgSCHTomCrcInd ARGS((
+ RgSchCellCb *cell,
+ TfuCrcIndInfo *crcInd));
+
+EXTERN Void rgSCHTomTtiInd ARGS((
+ TfuTtiIndInfo *ttiInd,
+ Inst inst));
+
+EXTERN S16 rgSCHTomHarqAckInd ARGS((
+ RgSchCellCb *cell,
+ TfuHqIndInfo *harqAckInd));
+
+EXTERN S16 rgSCHTomTimingAdvInd ARGS((
+ RgSchCellCb *cell,
+ TfuTimingAdvIndInfo *timingAdvInd));
+
+
+/*
+ * APIs exposed by LMM
+ */
+EXTERN S16 rgSCHLmmStartTmr ARGS ((Inst instId, S16 tmrEvnt,
+ U32 tmrVal, PTR cb));
+EXTERN S16 rgSCHLmmStopTmr ARGS((Inst instId, S16 tmrEvnt, PTR cb));
+EXTERN S16 rgSCHLmmTmrExpiry ARGS((PTR cb, S16 tmrEvnt));
+/* This function invokes a Control Confirmation to the LM from scheduler. */
+EXTERN S16 rgSCHLmmBndCfm ARGS((Pst *pst, SuId suId, U8 status));
+EXTERN S16 schActvTmr ARGS((Ent entity, Inst inst));
+/* To send a Unsolicited Status Indication to Layer Manager */
+EXTERN S16 rgSCHLmmStaInd ARGS((Inst instId, U16 category, U16 event,
+ U16 cause, RgUstaDgn *dgn));
+EXTERN S16 schActvTsk ARGS((Pst *pst, Buffer *mBuf));
+EXTERN Void SchFillCfmPst ARGS((Pst *reqPst,Pst *cfmPst,RgMngmt *cfm));
+EXTERN U16 SchInstCfg ARGS((RgCfg *cfg, Inst inst));
+EXTERN Void printSchCellInfo ARGS((Void));
+EXTERN Void rgSCHLmmGenCntrl ARGS((RgMngmt *cntrl,RgMngmt *cfm,Pst *cfmPst));
+EXTERN Void rgSCHLmmSapCntrl ARGS((RgMngmt *cntrl,RgMngmt *cfm,Pst *cfmPst));
+
+#ifdef EMTC_ENABLE
+EXTERN S16 rgSCHCfgEmtcCellCfg ARGS ((RgSchCellCb *cell,
+ RgrEmtcCellCfg *emtcCellCfg));
+EXTERN S16 rgSCHCfgVldtRgrEmtcCellCfg ARGS ((RgrCellCfg *cellCfg));
+
+EXTERN PUBLIC Void rgSchTomTtiEmtcSched ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHCfgVldtEmtcUeCfg ARGS((RgSchCellCb *cell, RgrUeEmtcCfg *emtcUeCfg));
+EXTERN S16 rgSCHUtlUpdUeEmtcInfo ARGS((RgSchCellCb *cell, RgrUeCfg *ueCfg, RgSchUeCb *ueCb));
+EXTERN S16 rgSCHEmtcCellDel ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHEmtcUeDel ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+EXTERN S16 rgSCHEmtcHdFddUeCfg ARGS((RgSchCellCb *cellCb,RgSchUeCb *ueCb,Bool hdFddEnbl));
+
+#endif
+/*
+ * APIs exposed by CFG module
+ */
+EXTERN S16 rgSCHCfgVldtRgrCellCfg ARGS((Inst inst, RgrCellCfg *cellCfg,
+ RgSchCellCb *cell, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrCellCfg ARGS((RgSchCb *instCb, SpId spId,
+ RgrCellCfg *cellCfg, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrSchedEnbCfg ARGS((Inst inst, SpId spId,
+ RgrSchedEnbCfg *schedEnbCfg, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgVldtRgrCellRecfg ARGS((Inst inst, RgrCellRecfg *cellRecfg,
+ RgSchCellCb **cell, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrCellRecfg ARGS((RgSchCellCb *cell, RgrCellRecfg *cellRecfg,
+ RgSchErrInfo *errInfo));
+
+EXTERN S16 rgSCHCfgVldtRgrUeCfg ARGS((Inst inst, RgrUeCfg *ueCfg,
+ RgSchCellCb **cell, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrUeCfg ARGS((RgSchCellCb *cell, RgrUeCfg *ueCfg,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgVldtRgrUeRecfg ARGS((Inst inst, RgrUeRecfg *ueRecfg,
+ RgSchCellCb **cell, RgSchUeCb **ue, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrUeRecfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue, RgrUeRecfg
+ *ueRecfg, RgSchErrInfo *errInfo));
+
+EXTERN S16 rgSCHCfgVldtRgrLcCfg ARGS((Inst inst, RgrLchCfg *lcCfg,
+ RgSchCellCb **cell, RgSchUeCb **ue, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrLchCfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgrLchCfg *lcCfg, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgVldtRgrLchRecfg ARGS((Inst inst, RgrLchRecfg *lcRecfg,
+ RgSchCellCb **cell, RgSchUeCb **ue, RgSchDlLcCb **dlLc,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrLchRecfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchDlLcCb *dlLc, RgrLchRecfg *lcRecfg, RgSchErrInfo *errInfo));
+
+EXTERN S16 rgSCHCfgVldtRgrLcgRecfg ARGS ((Inst inst,RgrLcgRecfg *lcgRecfg,
+ RgSchCellCb *cell,RgSchUeCb **ue,RgSchErrInfo *errInfo ));
+EXTERN S16 rgSCHCfgVldtRgrLcgCfg ARGS ((Inst inst,RgrLcgCfg *lcgCfg,
+ RgSchCellCb **cell,RgSchUeCb **ue,RgSchErrInfo *errInfo ));
+EXTERN S16 rgSCHCfgVldtRgrSchedEnbCfg ARGS ((Inst inst,
+ RgrSchedEnbCfg *schedEnbCfg, RgSchErrInfo *errInfo ));
+EXTERN S16 rgSCHCfgRgrLcgCfg ARGS ((RgSchCellCb *cell,RgSchUeCb *ue,
+ RgrLcgCfg *lcgCfg,RgSchErrInfo *errInfo ));
+EXTERN S16 rgSCHCfgRgrLcgRecfg ARGS ((RgSchCellCb *cell,RgSchUeCb *ue,
+ RgrLcgRecfg *lcgRecfg,RgSchErrInfo *errInfo));
+
+EXTERN S16 rgSCHCfgVldtRgrUeReset ARGS((Inst inst, RgrRst *reset, RgSchCellCb *cell,
+ RgSchUeCb **ue,RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrUeReset ARGS((RgSchCellCb *cell,RgSchUeCb *ue,RgrRst *reset,
+ RgSchErrInfo *errInfo));
+
+EXTERN S16 rgSCHCfgRgrCellDel ARGS((RgSchCellCb *cell, RgrDel *cellDelInfo,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrUeDel ARGS((RgSchCellCb *cell, RgrDel *ueDelInfo,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrLcDel ARGS((RgSchCellCb *cell, RgrDel *lcDelInfo,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHCfgRgrLcgDel ARGS ((RgSchCellCb *cell,RgrDel *lcDelInfo,
+ RgSchErrInfo *errInfo));
+EXTERN Void rgSCHCfgFreeCellCb ARGS((RgSchCellCb *cell));
+/* Added for SI Enhancement*/
+#ifdef RGR_SI_SCH
+EXTERN S16 rgSCHCfgVldtRgrSiCfg ARGS(( Inst inst, RgrSiCfgReqInfo *siCfg,
+ RgSchCellCb *cell, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHGomHndlSiCfg ARGS(( Region reg, Pool pool,
+ RgSchCb *instCb, SpId spId,
+ RgrCfgTransId transId, RgrSiCfgReqInfo *cfgReqInfo));
+EXTERN S16 rgSCHUtlRgrSiCfgCfm ARGS ((Inst inst, SpId spId,
+ RgrCfgTransId transId,U8 status));
+
+EXTERN S16 rgSCHGomHndlWarningSiCfg ARGS(( Region reg, Pool pool,
+ RgSchCb *instCb, SpId spId, RgrCfgTransId transId,
+ RgrWarningSiCfgReqInfo *warningSiCfgReqInfo));
+
+EXTERN Void rgSCHGomHndlWarningSiStopReq ARGS(( Region reg, Pool pool,
+ RgSchCb *instCb, U8 siId,
+ RgrCfgTransId transId, SpId spId));
+
+EXTERN S16 rgSCHUtlRgrWarningSiCfgCfm ARGS ((Inst inst, SpId spId, U8 siId,
+ RgrCfgTransId transId,U8 status));
+#endif /* RGR_SI_SCH */
+/* LTE_ADV_FLAG_REMOVED_START */
+EXTERN S16 rgSchDSFRRntpInfoInit ARGS ((TknStrOSXL *rntpPtr, RgSchCellCb *cell,
+ U16 bw));
+EXTERN S16 rgSchDSFRRntpInfoFree ARGS ((TknStrOSXL *rntpPtr, RgSchCellCb *cell,
+ U16 bw));
+EXTERN S16 rgSchUpdtRNTPInfo ARGS ((RgSchCellCb *cell, RgSchDlSf *sf,
+ RgrLoadInfReqInfo *loadInfReq));
+EXTERN S16 rgSCHCfgVldtRgrLoadInf ARGS(( Inst inst, RgrLoadInfReqInfo *loadInfReq,
+ RgSchCellCb *cell, RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHGomHndlLoadInf ARGS(( Region reg, Pool pool,
+ RgSchCb *instCb, SpId spId,
+ RgrCfgTransId transId, RgrLoadInfReqInfo *cfgReqInfo));
+/* LTE_ADV_FLAG_REMOVED_END */
+
+/*
+ * APIs exposed by GOM module
+ */
+EXTERN S16 rgSCHGomHndlCfg ARGS((Pst *pst, RgSchCb *instCb,
+ RgrCfgTransId transId, RgrCfgReqInfo *cfgReqInfo));
+EXTERN S16 rgSCHGomTtiHndlr ARGS((RgSchCellCb *cell, SpId spId));
+
+
+/*
+ * APIs exposed by RAM module
+ */
+EXTERN S16 rgSCHRamVldtUeCfg ARGS((
+RgSchCellCb *cell,
+RgrUeCfg *ueCfg
+));
+EXTERN S16 rgSCHRamProcRaReq ARGS((U8 raReqCnt, RgSchCellCb *cell, CmLteRnti raRnti,
+ TfuRachInfo *raReqInd,
+ CmLteTimingInfo timingInfo,
+ RgSchUeCb *ue,
+ RgSchErrInfo *err));
+EXTERN S16 rgSCHRamCreateRaCb ARGS((RgSchCellCb *cell, RgSchRaCb **raCb,
+ RgSchErrInfo *err));
+EXTERN S16 rgSCHRamRgrUeCfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchRaCb *raCb, RgSchErrInfo *err));
+EXTERN S16 rgSCHRamProcMsg3 ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchRaCb *raCb, RgInfUeDatInd *pdu,
+ RgSchErrInfo *err));
+EXTERN S16 rgSCHRamUpdtBo ARGS((RgSchCellCb *cell, RgSchRaCb *raCb,
+ RgInfCmnBoRpt *staRsp));
+EXTERN S16 rgSCHRamMsg3DatInd ARGS((RgSchRaCb *raCb));
+EXTERN S16 rgSCHRamMsg3FailureInd ARGS((RgSchRaCb *raCb));
+EXTERN S16 rgSCHRamMsg4FdbkInd ARGS((RgSchRaCb *raCb));
+EXTERN S16 rgSCHRamMsg4Done ARGS((RgSchCellCb *cell, RgSchRaCb *raCb));
+EXTERN S16 rgSCHRamDelRaCb ARGS((RgSchCellCb *cell, RgSchRaCb *raCb,
+ Bool rlsRnti));
+EXTERN S16 rgSCHRamFreeCell ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHRamTtiHndlr ARGS((RgSchCellCb *cell));
+EXTERN Void rgSCHCmnUlSch ARGS((RgSchCellCb *cell));
+EXTERN Void rgSCHCmnDlCommonChSch ARGS ((RgSchCellCb *cell));
+#ifdef RGR_V1
+/* Added periodic BSR timer */
+EXTERN S16 rgSCHCmnBsrTmrExpry ARGS(( RgSchUeCb *ueCb));
+#endif
+#ifdef LTE_TDD
+EXTERN S16 rgSCHRamDelRaReq ARGS((RgSchCellCb *cell,
+ CmLteTimingInfo timingInfo,
+ U8 raIdx));
+#endif
+EXTERN S16 rgSCHRamAddToRaInfoSchdLst(RgSchCellCb *cell, RgSchRaCb *raCb);
+
+EXTERN S16 rgSCHRamRmvFrmRaInfoSchdLst(RgSchCellCb *cell, RgSchRaCb *raCb);
+
+/* APIs exposed by UHM */
+/* Added for Uplink Adaptive retransmission */
+EXTERN Void rgSCHUhmNonadapRetx ARGS((RgSchUlHqProcCb *hqProc));
+EXTERN S16 rgSCHUhmHqEntInit ARGS ((RgSchCellCb *cellCb, RgSchUeCb *ueCb));
+#ifndef MAC_SCH_STATS
+EXTERN Void rgSCHUhmProcDatInd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo frm));
+#else /* MAC_SCH_STATS */
+EXTERN Void rgSCHUhmProcDatInd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo frm, U8 cqi));
+#endif
+EXTERN Void rgSCHUhmProcMsg3DatInd ARGS((RgSchUlHqProcCb *hqProc));
+EXTERN Void rgSCHUhmProcMsg3Failure ARGS((RgSchUlHqProcCb *hqProc));
+#ifndef MAC_SCH_STATS
+EXTERN Void rgSCHUhmProcHqFailure ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo frm, TknU8 rv));
+#else /* MAC_SCH_STATS */
+EXTERN Void rgSCHUhmProcHqFailure ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo frm, TknU8 rv, U8 cqi));
+#endif
+EXTERN RgSchUlHqProcCb* rgSCHUhmGetUlHqProc ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ U8 idx));
+EXTERN Void rgSCHUhmNewTx ARGS((RgSchUlHqProcCb *hqProc, U8 maxHqRetx,
+ RgSchUlAlloc *alloc));
+EXTERN Void rgSCHUhmFreeProc ARGS((RgSchUlHqProcCb *hqProc,
+ RgSchCellCb *cell));
+EXTERN Void rgSCHUhmRetx ARGS((RgSchUlHqProcCb *hqProc, RgSchUlAlloc *alloc));
+EXTERN Void rgSCHUhmRgrUeCfg ARGS(( RgSchCellCb *cellCb, RgSchUeCb *ueCb,
+ RgrUeCfg *ueCfg));
+EXTERN Void rgSCHUhmRgrUeRecfg ARGS(( RgSchCellCb *cellCb, RgSchUeCb *ueCb,
+ RgrUeRecfg *ueRecfg));
+EXTERN Void rgSCHUhmFreeUe ARGS(( RgSchCellCb *cellCb, RgUeUlHqCb *hqEnt));
+EXTERN S16 rgSCHUhmAppendPhich ARGS(( RgSchCellCb *cellCb,
+ CmLteTimingInfo frm, U8 idx));
+
+/* APIs exposed by DBM */
+EXTERN S16 rgSCHDbmInitCell ARGS((RgSchCellCb *cellCb));
+EXTERN S16 rgSCHDbmDeInitUeCbLst ARGS(( RgSchCellCb *cellCb));
+#ifdef LTE_TDD
+EXTERN S16 rgSCHDbmDeInitUeTfuPendLst ARGS(( RgSchCellCb *cellCb));
+#endif
+EXTERN S16 rgSCHDbmInsUeCb ARGS(( RgSchCellCb *cellCb, RgSchUeCb *ueCb));
+EXTERN RgSchUeCb* rgSCHDbmGetUeCb ARGS(( RgSchCellCb *cellCb, CmLteRnti ueId));
+EXTERN RgSchUeCb* rgSCHDbmGetNextUeCb ( RgSchCellCb *cellCb, RgSchUeCb *ueCb);
+EXTERN S16 rgSCHDbmDelUeCb ARGS(( RgSchCellCb *cellCb, RgSchUeCb *ueCb));
+#ifdef LTE_L2_MEAS
+EXTERN S16 rgSCHDbmDelL2MUe ARGS(( RgSchCellCb *cellCb, RgSchUeCb *ueCb));
+#endif
+EXTERN S16 rgSCHDbmInitUe ARGS((RgSchUeCb *ueCb));
+EXTERN Void rgSCHDbmInsDlDedLcCb ARGS((RgSchUeCb *ueCb, RgSchDlLcCb *dlLcCb));
+EXTERN Void rgSCHDbmDelDlDedLcCb ARGS((RgSchUeCb *ueCb, RgSchDlLcCb *dlLcCb));
+EXTERN RgSchDlLcCb* rgSCHDbmGetDlDedLcCb ARGS(( RgSchUeCb *ueCb, CmLteLcId idx));
+EXTERN RgSchDlLcCb* rgSCHDbmGetFirstDlDedLcCb ARGS((RgSchUeCb *ueCbb));
+EXTERN RgSchDlLcCb* rgSCHDbmGetNextDlDedLcCb ARGS((RgSchUeCb *ueCb, RgSchDlLcCb *lcCb));
+EXTERN RgSchClcDlLcCb* rgSCHDbmGetCmnLcCb ARGS(( RgSchCellCb *cellCb, CmLteLcId lcId));
+EXTERN RgSchClcDlLcCb* rgSCHDbmGetBcchOnBch ARGS(( RgSchCellCb *cellCb ));
+EXTERN RgSchClcDlLcCb* rgSCHDbmGetFirstBcchOnDlsch ARGS(( RgSchCellCb *cellCb));
+EXTERN RgSchClcDlLcCb* rgSCHDbmGetSecondBcchOnDlsch ARGS(( RgSchCellCb *cellCb));
+EXTERN RgSchClcDlLcCb* rgSCHDbmGetPcch ARGS(( RgSchCellCb *cellCb));
+EXTERN Void rgSCHDbmInsBcchOnBch ARGS(( RgSchCellCb *cellCb, RgSchClcDlLcCb *cmnDlLcCb));
+EXTERN Void rgSCHDbmInsBcchOnDlsch ARGS(( RgSchCellCb *cellCb, RgSchClcDlLcCb *cmnDlLcCb));
+EXTERN Void rgSCHDbmInsPcch ARGS(( RgSchCellCb *cellCb, RgSchClcDlLcCb *cmnDlLcCb));
+
+EXTERN Void rgSCHDbmInitCmnLcBoLst ARGS(( RgSchClcDlLcCb *cmnDlLcCb));
+EXTERN Void rgSCHDbmInsCmnLcBoRpt ARGS(( RgSchClcDlLcCb *cmnDlLcCb,
+ RgSchClcBoRpt *cmnBoRpt));
+EXTERN RgSchRaCb* rgSCHDbmGetRaCb ARGS(( RgSchCellCb *cellCb, CmLteRnti key));
+EXTERN Void rgSCHDbmInsCrntRgrCfgElem ARGS(( RgSchCellCb *cellCb,
+ RgSchCfgElem *cfgElem));
+EXTERN Void rgSCHDbmInsPndngRgrCfgElem ARGS(( RgSchCellCb *cellCb,
+ RgSchCfgElem *cfgElem));
+EXTERN RgSchCfgElem* rgSCHDbmGetNextCrntRgrCfgElem ARGS(( RgSchCellCb *cellCb,
+ RgSchCfgElem *cfgElem));
+EXTERN RgSchCfgElem* rgSCHDbmGetNextPndngRgrCfgElem ARGS(( RgSchCellCb *cellCb,
+ RgSchCfgElem *cfgElem));
+EXTERN RgSchCfgElem* rgSCHDbmGetPndngRgrCfgElemByKey ARGS(( RgSchCellCb *cellCb,
+ CmLteTimingInfo key));
+EXTERN RgSchCfgElem* rgSCHDbmDelCrntRgrCfgElem ARGS(( RgSchCellCb *cellCb,
+ RgSchCfgElem *cfgElem));
+EXTERN RgSchCfgElem* rgSCHDbmDelPndngRgrCfgElem ARGS(( RgSchCellCb *cellCb,
+ RgSchCfgElem *cfgElem));
+
+EXTERN S16 rgSCHDbmRntiDbInit ARGS(( RgSchCellCb *cellCb, U16 rntiStart, U16 maxRntis));
+EXTERN Void rgSCHDbmRntiDbDeInit ARGS(( RgSchCellCb *cellCb));
+EXTERN RgSchRntiLnk* rgSCHDbmGetRnti ARGS(( RgSchCellCb *cellCb));
+EXTERN Void rgSCHDbmRlsRnti ARGS(( RgSchCellCb *cellCb, RgSchRntiLnk *rntiLnk));
+/* Fix : syed HO UE does not have a valid ue->rntiLnk */
+EXTERN Void rgSCHUtlIndRntiRls2Mac ARGS(( RgSchCellCb *cell, CmLteRnti rnti,
+ Bool ueIdChng, CmLteRnti newRnti));
+
+/*rg008.201 - Added support for SPS*/
+#ifdef LTEMAC_SPS
+EXTERN S16 rgSCHDbmDeInitSpsUeCbLst ARGS((RgSchCellCb *cellCb));
+EXTERN S16 rgSCHDbmInsSpsUeCb ARGS((RgSchCellCb *cellCb, RgSchUeCb *ueCb));
+EXTERN RgSchUeCb* rgSCHDbmGetSpsUeCb ARGS((RgSchCellCb *cellCb, CmLteRnti ueId));
+EXTERN RgSchUeCb* rgSCHDbmGetNextSpsUeCb ARGS((RgSchCellCb *cellCb, RgSchUeCb *ueCb));
+EXTERN S16 rgSCHDbmDelSpsUeCb ARGS((RgSchCellCb *cellCb,RgSchUeCb *ueCb));
+#endif /* LTEMAC_SPS */
+
+#ifdef LTE_L2_MEAS
+/*
+ * L2M APIs
+ */
+EXTERN S16 rgSchL2mMeasReq ARGS ((
+ RgSchCellCb *cell,
+ LrgSchMeasReqInfo *measInfo,
+ RgSchErrInfo err));
+EXTERN S16 RgSchMacL2MeasSend ARGS
+((
+Pst* pst,
+RgInfL2MeasSndReq *measInfo
+));
+
+EXTERN S16 RgSchMacL2MeasStop ARGS
+((
+Pst* pst,
+RgInfL2MeasStopReq *measInfo
+));
+#endif /* LTE_L2_MEAS */
+/*
+ * DHM APIs
+ */
+/* LTE_ADV_FLAG_REMOVED_START */
+EXTERN S16 rgSchSFRTotalPoolInit ARGS((RgSchCellCb *cell, RgSchDlSf *sf));
+/* LTE_ADV_FLAG_REMOVED_END */
+EXTERN Void rgSCHDhmHqPAdd2FreeLst ARGS (( RgSchDlHqProcCb *hqP));
+EXTERN Void rgSCHDhmHqPAdd2InUseLst ARGS (( RgSchDlHqProcCb *hqP));
+EXTERN Void rgSCHDhmHqPDelFrmFreeLst ARGS (( RgSchDlHqProcCb *hqP));
+EXTERN Void rgSCHDhmHqPDelFrmInUseLst ARGS (( RgSchDlHqProcCb *hqP));
+
+EXTERN RgSchDlHqEnt *rgSCHDhmHqEntInit ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHDhmGetAvlHqProc ARGS((RgSchCellCb *cell, RgSchUeCb *ue, CmLteTimingInfo timingInfo,
+ RgSchDlHqProcCb **hqP));
+EXTERN Void rgSCHDhmHqRetx ARGS((RgSchDlHqEnt *hqE, CmLteTimingInfo timeInfo,
+ RgSchDlHqProcCb *hqP));
+EXTERN RgSchDlHqProcCb * rgSCHDhmLastSchedHqProc ARGS((RgSchDlHqEnt *hqE));
+/* CR timer changes*/
+EXTERN S16 rgSCHDhmGetCcchSduHqProc ARGS((RgSchUeCb *ueCb, CmLteTimingInfo timeInfo,
+ RgSchDlHqProcCb **hqP));
+EXTERN S16 rgSCHDhmGetMsg4HqProc ARGS((RgSchRaCb *raCb, CmLteTimingInfo timeInfo));
+EXTERN Void rgSCHDhmRlsHqProc ARGS((RgSchDlHqProcCb *hqP));
+/* ccpu00118350 : Correcting NDI manipulation of Harq */
+EXTERN Void rgSCHDhmRlsHqpTb ARGS((RgSchDlHqProcCb *hqP, U8 tbIdx, Bool togNdi));
+EXTERN Void rgSCHUtlDlHqPTbAddToTx ARGS((RgSchDlSf *subFrm,
+RgSchDlHqProcCb *hqP, U8 tbIdx ));
+EXTERN Void rgSCHDhmHqTbRetx ARGS(( RgSchDlHqEnt *hqE,
+CmLteTimingInfo timingInfo, RgSchDlHqProcCb *hqP, U8 tbIdx));
+EXTERN Void rgSCHUtlDlHqPTbAddToTx ARGS((RgSchDlSf *subFrm,
+RgSchDlHqProcCb *hqP, U8 tbIdx ));
+EXTERN Void rgSCHDhmHqTbRetx ARGS(( RgSchDlHqEnt *hqE,
+CmLteTimingInfo timingInfo, RgSchDlHqProcCb *hqP, U8 tbIdx));
+#ifdef RG_UNUSED
+EXTERN S16 rgSCHDhmGetHqProcFrmId ARGS((RgSchCellCb *cell, RgSchUeCb *ue, U8 idx,
+ RgSchDlHqProcCb **hqP));
+#endif
+/* Changes for MIMO feature addition */
+EXTERN Void rgSCHDhmSchdTa ARGS((RgSchUeCb *ueCb, RgSchDlHqTbCb *tbInfo));
+EXTERN S16 rgSCHDhmHqFdbkInd ARGS((Void *cb, U8 cbType, RgSchCellCb *cellCb,
+ CmLteTimingInfo timingInfo, RgTfuHqInfo *fdbk, RgInfRlsHqInfo
+ *rlsHqBufs,RgSchErrInfo *err));
+#ifdef EMTC_ENABLE
+EXTERN S16 rgSCHDhmEmtcHqFdbkInd ARGS((Void *cb, U8 cbType, RgSchCellCb *cellCb,
+ CmLteTimingInfo timingInfo, RgTfuHqInfo *fdbk, RgInfRlsHqInfo
+ *rlsHqBufs,RgSchErrInfo *err));
+EXTERN PUBLIC S16 rgSCHUtlAddToResLst
+(
+ CmLListCp *cp,
+ RgSchIotRes *iotRes
+ );
+#endif
+/*CA Dev Start */
+EXTERN S16 rgSCHDhmPrcFdbkForTb(RgSchCellCb *cell,RgSchUeCb *ue,
+ RgSchDlHqProcCb *hqP,RgSchDlSf *sf,Bool isMsg4,
+ U16 rnti,U8 tbCnt,CmLteTimingInfo timingInfo, U8 isAck,
+ RgInfRlsHqInfo *rlsHqBufs,RgSchErrInfo *err
+ );
+/*CA Dev End */
+EXTERN Void rgSCHDhmRgrUeCfg ARGS((RgSchCellCb *cellCb, RgSchUeCb *ueCb,
+ RgrUeCfg *ueCfg, RgSchErrInfo *err));
+EXTERN Void rgSCHDhmRgrUeRecfg ARGS((RgSchCellCb *cellCb, RgSchUeCb *ueCb,
+ RgrUeRecfg *ueCfg, RgSchErrInfo *err));
+EXTERN Void rgSCHDhmRgrCellCfg ARGS((RgSchCellCb *cellCb, RgrCellCfg *cellCfg,
+ RgSchErrInfo *err));
+EXTERN Void rgSCHDhmRgrCellRecfg ARGS((RgSchCellCb *cellCb, RgrCellRecfg
+ *cellRecfg, RgSchErrInfo *err));
+EXTERN Void rgSCHDhmFreeUe ARGS((RgSchUeCb *ueCb));
+EXTERN Void rgSCHDhmUpdTa ARGS((RgSchCellCb *cellCb, RgSchUeCb *ueCb, U8 ta));
+EXTERN Void rgSCHDhmProcTAExp ARGS((RgSchUeCb *ue));
+/* Changes for MIMO feature addition */
+EXTERN S16 rgSCHDhmAddLcData ARGS((Inst inst, RgSchLchAllocInfo *lchData,
+ RgSchDlHqTbCb *tbInfo));
+EXTERN S16 rgSCHDhmRlsDlsfHqProc ARGS((RgSchCellCb *cellCb, CmLteTimingInfo
+timingInfo));
+
+#ifdef LTE_TDD
+EXTERN S16 rgSCHDhmTddRlsSubFrm ARGS((RgSchCellCb *cell, CmLteTimingInfo uciTimingInfo));
+EXTERN S16 rgSCHCfgVldtTddDrxCycCfg ARGS((RgSchCellCb *cell, U16 drxCycle,
+ U8 onDurTmr, U16 offSet));
+#endif
+/* Added support for SPS*/
+#ifdef LTEMAC_SPS
+EXTERN S16 rgSCHDhmGetHqProcFrmId ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+U8 idx,
+RgSchDlHqProcCb **hqP
+));
+#endif /* LTEMAC_SPS */
+/* Freeing up the HARQ proc blocked for
+ * indefinite time in case of Retx */
+EXTERN S16 rgSCHDhmDlRetxAllocFail ARGS((
+RgSchUeCb *ue,
+RgSchDlHqProcCb *proc
+));
+/* MS_WORKAROUND for ccpu00122893 temp fix Incorrect HqProc release was done instead of
+ * a Harq Entity reset. Fixing the same */
+EXTERN Void rgSCHDhmHqEntReset ARGS((
+ RgSchDlHqEnt *hqE
+));
+/* Measurement GAP and ACK NACK */
+
+EXTERN S16 rgSCHMeasGapANRepUeCfg ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgrUeCfg *ueCfg
+));
+EXTERN S16 rgSCHMeasGapANRepUeRecfg ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgrUeRecfg *ueRecfg
+));
+/* ccpu00133470- Added extra argument to identify UE DEL*/
+EXTERN Void rgSCHMeasGapANRepUeDel ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+Bool isUeDel
+));
+EXTERN S16 rgSCHMeasGapANRepTtiHndl ARGS((
+RgSchCellCb *cell
+));
+EXTERN S16 rgSCHMeasGapANRepGetDlInactvUe ARGS((
+RgSchCellCb *cell,
+CmLListCp *dlInactvUeLst
+));
+EXTERN S16 rgSCHMeasGapANRepGetUlInactvUe ARGS((
+RgSchCellCb *cell,
+CmLListCp *ulInactvUeLst
+));
+EXTERN Void rgSCHMeasGapANRepDlInactvTmrExpry ARGS((
+RgSchUeCb *ue,
+U8 tmrEvnt
+));
+EXTERN Void rgSCHMeasGapANRepUlInactvTmrExpry ARGS((
+RgSchUeCb *ue,
+U8 tmrEvnt
+));
+EXTERN Void rgSCHMeasGapANRepTmrExpry ARGS((
+RgSchUeCb *ue
+));
+EXTERN Void rgSCHAckNakRepTmrExpry ARGS((
+RgSchUeCb *ue
+));
+EXTERN Void rgSCHAckNakRepSndHqFbkRcpReq ARGS((
+RgSchCellCb *cell,
+RgSchDlSf *dlSf,
+CmLteTimingInfo timingInfo));
+
+EXTERN Void rgSCHAckNakRepAddToQ ARGS((
+RgSchCellCb *cell,
+RgSchDlSf *crntDlSf));
+
+/*
+ * SCH Util APIs
+ */
+#ifdef LTEMAC_SPS
+EXTERN Void rgSCHUtlHdlCrcInd ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+CmLteTimingInfo timingInfo
+));
+#endif
+
+#ifdef LTE_L2_MEAS
+EXTERN S16 rgSCHUtlValidateMeasReq ARGS ((RgSchCellCb *cellCb,
+ LrgSchMeasReqInfo *schL2MeasInfo,
+ RgSchErrInfo *err
+ ));
+EXTERN S16 rgSchL2mSndCfm ARGS((Pst *pst,
+ RgSchL2MeasCb *measCb,
+ LrgSchMeasReqInfo *measInfo,
+ Bool isErr
+));
+EXTERN S16 rgSchFillL2MeasCfm ARGS((
+ RgSchCellCb *cell,
+ RgSchL2MeasCb *measCb,
+ LrgSchMeasCfmInfo *cfm,
+ U32 measTime
+));
+EXTERN Void rgSchL2mFillCfmPst ARGS((
+ Pst *pst,
+ Pst *cfmPst,
+ LrgSchMeasReqInfo *measInfo
+));
+EXTERN S16 rgSCHL2Meas ARGS((
+ RgSchCellCb *cell,
+ U8 isCalrCrcInd
+));
+#endif /* LTE_L2_MEAS */
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+EXTERN F64 rgSCHUtlPower ARGS
+((
+F64 x,
+F64 n
+));
+
+ EXTERN U32 rgSCHUtlParse ARGS
+ ((
+ U8 *buff,
+ U8 startPos,
+ U8 endPos,
+ U8 buffSize
+ ));
+
+ EXTERN U8 rgSCHUtlFindDist ARGS
+((
+U16 crntTime,
+U16 tempIdx
+));
+#endif
+EXTERN Bool rgSCHUtlPdcchAvail ARGS((RgSchCellCb *cell, RgSchPdcchInfo
+ *pdcchInfo, CmLteAggrLvl aggrLvl, RgSchPdcch **pdcch));
+EXTERN Void rgSCHUtlPdcchPut ARGS((RgSchCellCb *cell, RgSchPdcchInfo *pdcchInfo,
+ RgSchPdcch *pdcch));
+#ifdef LTE_TDD
+/* Changes for passing iPhich at TFU interface*/
+EXTERN S16 rgSCHUtlAddPhich ARGS((RgSchCellCb *cellCb, CmLteTimingInfo frm,
+ U8 hqFeedBack, U8 nDmrs, U8 rbStart, U8 iPhich));
+#else
+EXTERN S16 rgSCHUtlAddPhich ARGS((RgSchCellCb *cellCb, CmLteTimingInfo frm,
+ U8 hqFeedBack, U8 nDmrs, U8 rbStart,Bool isForMsg3));
+#endif
+EXTERN RgSchDlSf* rgSCHUtlSubFrmGet ARGS((RgSchCellCb *cell,
+ CmLteTimingInfo frm));
+EXTERN Void rgSCHUtlSubFrmPut ARGS((RgSchCellCb *cell, RgSchDlSf *sf));
+EXTERN U8 rgSCHUtlLog32bitNbase2 ARGS((U32 n));
+/* Added support for SPS*/
+
+
+#ifdef LTEMAC_SPS
+EXTERN RgSchDlHqProcCb * rgSCHDhmSpsDlGetHqProc ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+CmLteTimingInfo timingInfo));
+#endif
+#ifdef LTE_TDD
+EXTERN U8 rgSCHUtlCalcNCce ARGS((U8 bw, RgrPhichNg ng, U8 cfi, U8 mPhich,
+ U8 numAntna, Bool isEcp));
+#else
+EXTERN U8 rgSCHUtlCalcNCce ARGS((U8 bw, RgrPhichNg ng, U8 cfi, U8 numAntna, Bool
+isEcp));
+#endif
+#ifdef LTE_TDD
+/* Changes for passing iPhich at TFU interface*/
+EXTERN S16 rgSCHUtlGetPhichInfo ARGS((RgSchUlHqProcCb *hqProc, U8 *rbStartRef,
+ U8 *nDmrsRef, U8 *iPhich));
+#else
+EXTERN S16 rgSCHUtlGetPhichInfo ARGS((RgSchUlHqProcCb *hqProc, U8 *rbStartRef,
+ U8 *nDmrsRef));
+#endif
+/* Added changes of TFU_UPGRADE */
+#ifndef TFU_UPGRADE
+/* To include the length and ModOrder in DataRecp Req. */
+/* Updating NDI and HARQ proc Id */
+EXTERN S16 rgSCHUtlAllocRcptInfo ARGS((RgSchUlAlloc *alloc, CmLteRnti *rnti,
+ U8 *iMcsRef, U8 *rbStartRef, U8 *numRbRef, U8 *rvRef, U16 *size,
+ TfuModScheme *modType,Bool *isRtx,
+U8 *nDmrs,
+Bool *ndi,
+U8 *hqPId));
+#else
+EXTERN S16 rgSCHUtlAllocRcptInfo ARGS((
+ RgSchCellCb *cell,
+ RgSchUlAlloc *alloc,
+ CmLteTimingInfo *timeInfo,
+ TfuUeUlSchRecpInfo *recpReq
+ ));
+#endif /* TFU_UPGRADE */
+
+EXTERN S16 rgSCHUtlRgrCellCfg ARGS((RgSchCellCb *cell, RgrCellCfg *cellCfg,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHUtlRgrCellRecfg ARGS((RgSchCellCb *cell, RgrCellRecfg *recfg,
+ RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHUtlFreeCell ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHUtlRgrUeCfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgrUeCfg *cfg, RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlRgrLcCfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchDlLcCb *dl, RgrLchCfg *cfg,RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHUtlRgrLcDel ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteLcId lcId, U8 lcgId));
+EXTERN S16 rgSCHUtlRgrLcRecfg ARGS ((RgSchCellCb *cell,RgSchUeCb *ue,
+ RgSchDlLcCb *dlLc,RgrLchRecfg *recfg,RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlRgrLcgCfg ARGS ((RgSchCellCb *cell,RgSchUeCb *ue,
+ RgrLcgCfg *cfg,RgSchErrInfo *errInfo));
+EXTERN S16 rgSCHUtlRgrLcgRecfg ARGS ((RgSchCellCb *cell,RgSchUeCb *ue,
+ RgrLcgRecfg *recfg,RgSchErrInfo *err));
+EXTERN Void rgSCHUtlRgrLcgDel ARGS ((RgSchCellCb *cell,RgSchUeCb *ue,
+ U8 lcgId));
+EXTERN Void rgSCHUtlDlCqiInd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ TfuDlCqiRpt *dlCqiInd, CmLteTimingInfo timingInfo));
+
+/* Added changes of TFU_UPGRADE */
+#ifdef TFU_UPGRADE
+EXTERN Void rgSCHUtlRawCqiInd ARGS
+((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+TfuRawCqiRpt* rawCqiRpt,
+CmLteTimingInfo timingInfo
+));
+
+EXTERN Void rgSCHUtlSrsInd ARGS
+((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+TfuSrsRpt* srsRpt,
+CmLteTimingInfo timingInfo
+));
+EXTERN S16 rgSCHUtlGetCfgPerOff ARGS
+((
+RgSchPerTbl tbl,
+U16 cfgIdx,
+U16 *peri,
+U16 *offset
+));
+#endif
+
+EXTERN Void rgSCHUtlDoaInd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ TfuDoaRpt *doaInd));
+EXTERN Void rgSCHUtlDlTARpt ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+/* Changes for MIMO feature addition */
+EXTERN Void rgSCHUtlDlRlsSubFrm ARGS((RgSchCellCb *cell, CmLteTimingInfo subFrm));
+EXTERN Void rgSCHUtlDlProcAddToRetx ARGS((RgSchCellCb *cell,
+ RgSchDlHqProcCb *hqP));
+EXTERN S16 rgSCHUtlRegSch ARGS((U8 schIdx, RgSchdApis *apis));
+EXTERN Void rgSCHUtlDlHqProcAddToTx ARGS((RgSchDlSf *subFrm, RgSchDlHqProcCb *hqP));
+/* Changes for MIMO feature addition */
+EXTERN Void rgSCHUtlDlHqPTbRmvFrmTx ARGS((RgSchDlSf *subFrm,
+ RgSchDlHqProcCb *hqP, U8 tbIdx, Bool isRepeating));
+EXTERN S16 rgSCHUtlRgrUeRecfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgrUeRecfg *recfg, RgSchErrInfo *err));
+EXTERN Void rgSCHUtlFreeDlLc ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchDlLcCb *dlLc));
+EXTERN Void rgSCHUtlFreeUlLc ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchUlLcCb *ulLc));
+EXTERN Void rgSCHUtlFreeUe ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+EXTERN Void rgSCHUtlDlDedBoUpd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchDlLcCb *svc));
+#ifdef RG_UNUSED
+EXTERN S16 rgSCHUtlUpdUlHqProc ARGS((RgSchCellCb *cell, RgSchUlHqProcCb *curProc,
+ RgSchUlHqProcCb *oldProc));
+#endif
+/* PHR handling for MSG3 */
+EXTERN Void rgSCHUtlRecMsg3Alloc ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchRaCb *raCb));
+EXTERN S16 rgSCHUtlContResUlGrant ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlSrRcvd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo, RgSchErrInfo *err));
+EXTERN Void rgSCHUtlUpdBsrShort ARGS((RgSchCellCb *cell, RgSchUeCb *ue, U8 lcgId,
+ U8 bsr, RgSchErrInfo *err));
+EXTERN Void rgSCHUtlUpdBsrTrunc ARGS((RgSchCellCb *cell, RgSchUeCb *ue, U8 lcgId,
+ U8 bsr, RgSchErrInfo *err));
+EXTERN Void rgSCHUtlUpdBsrLong ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ U8 bsr1,U8 bsr2,U8 bsr3,U8 bsr4, RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlUpdPhr ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ U8 phr, RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlUpdExtPhr ARGS(( RgSchCellCb *cell, RgSchUeCb *ue,
+RgInfExtPhrCEInfo * extPhr, RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlDataRcvd ARGS((RgSchCellCb *cell, RgSchUeCb *ue, U8 numLc,
+ RgSchUlLcCb *lcArr[], U16 bytesArr[], RgSchErrInfo *err));
+EXTERN Void rgSCHUtlUlCqiInd ARGS(( RgSchCellCb *cell, RgSchUeCb *ue,
+ TfuUlCqiRpt *ulCqiInfo));
+EXTERN Void rgSCHUtlPucchDeltaPwrInd ARGS(( RgSchCellCb *cell, RgSchUeCb *ue,
+ S8 delta));
+EXTERN Void rgSCHUtlUeReset ARGS(( RgSchCellCb *cell, RgSchUeCb *ue));
+EXTERN Void rgSCHUtlUlHqProcForUe ARGS((RgSchCellCb *cell, CmLteTimingInfo frm,
+ RgSchUeCb *ue, RgSchUlHqProcCb **procRef));
+EXTERN RgSchUlAlloc *rgSCHUtlFirstRcptnReq ARGS((RgSchCellCb *cell));
+EXTERN RgSchUlAlloc *rgSCHUtlNextRcptnReq ARGS((RgSchCellCb *cell,
+ RgSchUlAlloc *alloc));
+EXTERN RgSchUlAlloc *rgSCHUtlFirstHqFdbkAlloc ARGS((RgSchCellCb *cell, U8 idx));
+EXTERN RgSchUlAlloc *rgSCHUtlNextHqFdbkAlloc ARGS((RgSchCellCb *cell,
+ RgSchUlAlloc *alloc, U8 idx));
+EXTERN S16 rgSCHUtlTfuBndReq ARGS((Inst inst, SuId suId, SpId spId));
+EXTERN S16 rgSCHUtlTfuUBndReq ARGS((Inst inst, RgSchLowSapCfgInfo sapCfg, Reason reason));
+#ifdef EMTC_ENABLE
+EXTERN S16 rgSCHEmtcUtlResetSfAlloc ARGS((RgInfSfAlloc *sfAlloc,
+ Bool resetCmnLcInfo, Bool restAlloc));
+#endif
+EXTERN S16 rgSCHUtlResetSfAlloc ARGS((RgInfSfAlloc *sfAlloc,
+ Bool resetCmnLcInfo, Bool restAlloc));
+EXTERN S16 rgSCHUtlGetSfAlloc ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHUtlPutSfAlloc ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHUtlAllocSBuf ARGS((Inst inst, Data **pData, Size size));
+/* ccpu00117052 - MOD - Passing double pointer
+for proper NULLP assignment*/
+EXTERN Void rgSCHUtlFreeSBuf ARGS((Inst inst, Data **data, Size size));
+EXTERN Void rgSCHUtlFillDgnParams ARGS((Inst inst, RgUstaDgn *dgn,U8 dgnType));
+EXTERN Void rgSCHUtlGetPstToLyr ARGS((Pst *pst,RgSchCb *schCb,Inst macInst));
+EXTERN S16 rgSCHUtlFillRgInfCmnLcInfo ARGS((RgSchDlSf *sf,RgInfSfAlloc *sfAlloc,
+ CmLteLcId lcId, Bool sendInd));
+EXTERN S16 rgSCHUtlFillRgInfRarInfo ARGS((RgSchDlSf *sf,RgInfSfAlloc *sfAlloc,RgSchCellCb *cell));
+EXTERN S16 rgSCHUtlFillPdschDciInfo ARGS((TfuPdschDciInfo *pdschDci,TfuDciInfo
+ *pdcchDci));
+ /* CA dev Start */
+EXTERN Void rgSCHUtlFillRgInfUeInfo ARGS((RgSchDlSf*, RgSchCellCb *cell, CmLListCp *dlDrxInactvTmrLst,
+ CmLListCp *dlInActvLst, CmLListCp *ulInActvLst));
+ /* CA dev End */
+EXTERN S16 rgSCHUtlUpdSch ARGS((RgInfSfDatInd *subfrmInfo, RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb, RgInfUeDatInd *pdu,RgSchErrInfo *err));
+EXTERN S16 rgSCHUtlHndlCcchBoUpdt ARGS((RgSchCellCb *cell,RgInfCmnBoRpt *boRpt));
+EXTERN S16 rgSCHUtlHndlBcchPcchBoUpdt ARGS((RgSchCellCb *cell,RgInfCmnBoRpt
+ *boUpdt));
+EXTERN S16 rgSCHUtlRgrBndCfm ARGS ((Inst inst, SuId suId,U8 status));
+/* Added for sending TTI tick to RRM */
+#ifdef RGR_RRM_TICK
+EXTERN S16 rgSCHUtlRgrTtiInd ARGS ((RgSchCellCb *cell, RgrTtiIndInfo *ttiInd));
+#endif
+EXTERN S16 schSendCfgCfm ARGS ((Region reg, Pool pool, \
+ RgrCfgTransId transId, U8 status));
+EXTERN S16 rgSCHUtlProcMsg3 ARGS((RgInfSfDatInd *subfrmInfo, RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb, CmLteRnti rnti,RgInfUeDatInd *pdu,
+ RgSchErrInfo *err ));
+#ifdef RG_PHASE_2
+EXTERN S16 rgSCHUtlTfuGrpPwrCntrlReq ARGS((Inst inst,S16 sapId,
+ TfuGrpPwrCntrlReqInfo *grpPwrCntrlReq));
+#endif
+EXTERN S16 rgSCHUtlTfuCntrlReq ARGS((Inst inst, S16 sapId,
+ TfuCntrlReqInfo *cntrlReq));
+EXTERN S16 rgSCHUtlTfuRecpReq ARGS((Inst inst, S16 sapId,
+ TfuRecpReqInfo *recpReq));
+EXTERN S16 rgSCHUtlValidateTfuSap ARGS((Inst inst,SuId suId));
+EXTERN S16 rgSCHUtlAllocEventMem ARGS((Inst inst,Ptr *memPtr,Size memSize));
+EXTERN S16 rgSCHUtlGetEventMem ARGS((Ptr *ptr,Size len,Ptr memCpa));
+EXTERN S16 rgSCHUtlGetRlsHqAlloc ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHUtlPutRlsHqAlloc ARGS((RgSchCellCb *cell));
+
+EXTERN S16 rgSCHUtlDlActvtUe ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+EXTERN S16 rgSCHUtlUlActvtUe ARGS((RgSchCellCb *cell, RgSchUeCb *ue));
+EXTERN Void rgSCHUtlHdlUlTransInd ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ CmLteTimingInfo timingInfo));
+#ifdef TFU_UPGRADE
+EXTERN Void rgSCHUtlUpdACqiTrigWt ARGS((RgSchUeCb *ue,RgSchUeCellInfo *sCellInfo, U8 isAck));
+#endif
+/* Nprb indication at PHY for common Ch */
+/* Corrected allocation for common channels */
+EXTERN PUBLIC S32 rgSCHUtlGetAllwdCchTbSz ARGS((U32 bo, U8 *nPrb, U8 *mcs
+));
+/* CR timer changes*/
+EXTERN PUBLIC S16 rgSCHUtlUpdtBo ARGS((RgSchCellCb *cell,
+ RgInfCmnBoRpt *staRsp));
+EXTERN PUBLIC S16 rgSCHUtlAddUeToCcchSduLst ARGS(
+ (RgSchCellCb *cell,
+ RgSchUeCb *ueCb));
+#ifdef EMTC_ENABLE
+EXTERN PUBLIC S16 rgSCHUtlAddUeToEmtcCcchSduLst ARGS(
+ (RgSchCellCb *cell,
+ RgSchUeCb *ueCb));
+
+EXTERN S16 rgSCHRamRmvFrmEmtcRaInfoSchdLst ARGS((RgSchCellCb *cell, RgSchRaCb *raCb));
+EXTERN Void rgSCHRamEmtcDelRaCb ARGS((RgSchCellCb *cell, RgSchRaCb *raCb));
+EXTERN S16 rgSCHRamEmtcUpdtBo ARGS((RgSchCellCb *cell, RgSchRaCb *raCb,
+ RgInfCmnBoRpt *staRsp));
+#endif
+/* Added for SI Enhancement*/
+#ifdef RGR_SI_SCH
+EXTERN Void rgSCHUtlPutSiInfo ARGS((RgSchCellCb *cell));
+EXTERN Void rgSCHUtlFreeWarningSiSeg ARGS((Region reg,Pool pool,
+ CmLListCp *siPduLst));
+EXTERN Void rgSCHUtlFreeWarningSiPdu ARGS((RgSchCellCb *cell));
+EXTERN Buffer *rgSCHUtlGetWarningSiPdu ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHUtlGetMcsAndNPrb ARGS((RgSchCellCb *cell, U8 *nPrb, U8 *mcs, MsgLen *msgLen));
+EXTERN S16 rgSCHUtlCalMcsAndNPrb ARGS((RgSchCellCb *cell, U8 cfgType, MsgLen msgLen, U8 siId));
+#endif/*RGR_SI_SCH*/
+
+#ifdef LTE_TDD
+EXTERN S16 rgSCHUtlAllocUeANFdbkInfo ARGS((RgSchUeCb *ue,U8 servCellIdx));
+EXTERN Void rgSCHUtlDelUeANFdbkInfo ARGS((RgSchUeCb *ue,U8 servCellIdx));
+EXTERN S16 rgSCHUtlInitUeANFdbkInfo ARGS((RgSchTddANInfo *anInfo));
+EXTERN RgSchTddANInfo* rgSCHUtlGetUeANFdbkInfo ARGS((RgSchUeCb *ueCb, CmLteTimingInfo *timeInfo,U8 servCellIdx));
+EXTERN U8 rgSCHUtlGetDlSfIdx ARGS((RgSchCellCb *cell, CmLteTimingInfo *timeInfo));
+EXTERN Void rgSCHUtlPrachCfgInit ARGS((RgSchCellCb *cell, RgrCellCfg *cellCfg ));
+EXTERN Void rgSCHUtlGetNxtDlSfInfo ARGS((CmLteTimingInfo curDlTime, RgSchCellCb *cell, RgSchDlSf *dlSf, RgSchDlSf **nxtDlsf, CmLteTimingInfo *nxtDlTime));
+EXTERN Void rgSCHUtlGetPrevDlSfInfo ARGS((RgSchCellCb * cell, CmLteTimingInfo curDlTime, CmLteTimingInfo *prevDlTime, U8 *numSubfrm));
+#endif
+EXTERN Void rgSCHCmnDlSch ARGS
+((
+RgSchCellCb *cell
+));
+EXTERN Void rgSCHCmnSndCnsldtInfo ARGS
+((
+RgSchCellCb *cell
+));
+EXTERN Void rgSCHCmnCnsldtSfAlloc ARGS
+((
+RgSchCellCb *cell
+));
+
+/* Added support for SPS*/
+EXTERN Void rgSCHCmnDlAllocFnlz ARGS
+((
+RgSchCellCb *cell
+));
+
+#ifdef LTEMAC_SPS
+EXTERN Void rgSCHUtlDlRelPdcchFbk ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+Bool isAck
+));
+
+EXTERN Void rgSCHUtlDlProcAck ARGS((
+RgSchCellCb *cell,
+RgSchDlHqProcCb *hqP
+));
+EXTERN S16 rgSCHUtlSpsRelInd ARGS((
+RgSchCellCb *cellCb,
+RgSchUeCb *ueCb,
+Bool isExplRel
+));
+
+EXTERN Void rgSCHCmnDlSch ARGS
+((
+RgSchCellCb *cell
+));
+
+EXTERN S16 rgSCHUtlSpsActInd ARGS((
+RgSchCellCb *cellCb,
+RgSchUeCb *ueCb,
+U16 spsSduSize
+));
+
+EXTERN Void rgSCHUtlHdlCrcFailInd ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+CmLteTimingInfo timingInfo
+));
+
+EXTERN Void rgSCHUtlHdlCrntiCE ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue
+));
+
+#endif /* LTEMAC_SPS*/
+
+/******* </AllocHolesMemMgmnt>: START *****/
+EXTERN S16 rgSCHUtlUlSfInit ARGS((
+ RgSchCellCb *cell,
+ RgSchUlSf *sf,
+ U8 idx,
+ U8 maxUePerSf
+ ));
+EXTERN Void rgSCHUtlUlSfDeinit ARGS((
+ RgSchCellCb *cell,
+ RgSchUlSf *sf
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocGetHole ARGS((
+ RgSchUlSf *sf,
+ U8 numRb,
+ RgSchUlHole *hole
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocGetCompHole ARGS((
+ RgSchUlSf *sf,
+ RgSchUlHole *hole
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocGetPartHole ARGS((
+ RgSchUlSf *sf,
+ U8 numRb,
+ RgSchUlHole *hole
+ ));
+EXTERN Void rgSCHUtlUlAllocRls ARGS((
+ RgSchUlSf *sf,
+ RgSchUlAlloc *alloc
+ ));
+
+/* UL_ALLOC_ENHANCEMENT */
+EXTERN Void rgSCHUtlUlAllocRelease ARGS((
+ RgSchUlAlloc *alloc
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocFirst ARGS((
+ RgSchUlSf *sf
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocNxt ARGS((
+ RgSchUlSf *sf,
+ RgSchUlAlloc *alloc
+ ));
+EXTERN RgSchUlHole *rgSCHUtlUlHoleFirst ARGS((
+ RgSchUlSf *sf
+ ));
+EXTERN RgSchUlHole *rgSCHUtlUlHoleNxt ARGS((
+ RgSchUlSf *sf,
+ RgSchUlHole *hole
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocGetAdjNxt ARGS((
+ RgSchUlAllocDb *db,
+ RgSchUlAlloc *prv
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocGetFirst ARGS((
+ RgSchUlAllocDb *db
+ ));
+EXTERN Void rgSCHUtlUlHoleAddAlloc ARGS((
+ RgSchUlSf *sf,
+ RgSchUlAlloc *alloc
+ ));
+/* UL_ALLOC_ENHANCEMENT */
+EXTERN Void rgSCHUtlUlHoleAddAllocation ARGS((
+ RgSchUlAlloc *alloc
+ ));
+
+EXTERN Void rgSCHUtlUlHoleJoin ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *prv,
+ RgSchUlHole *nxt,
+ RgSchUlAlloc *alloc
+ ));
+EXTERN Void rgSCHUtlUlHoleExtndRight ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *prv,
+ RgSchUlAlloc *alloc
+ ));
+EXTERN Void rgSCHUtlUlHoleExtndLeft ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *nxt,
+ RgSchUlAlloc *alloc
+ ));
+EXTERN Void rgSCHUtlUlHoleNew ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlAlloc *alloc
+ ));
+EXTERN Void rgSCHUtlUlHoleUpdAllocLnks ARGS((
+ RgSchUlHole *hole,
+ RgSchUlAlloc *prvAlloc,
+ RgSchUlAlloc *nxtAlloc
+ ));
+EXTERN Void rgSCHUtlUlHoleIns ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *hole
+ ));
+EXTERN Void rgSCHUtlUlHoleIncr ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *hole
+ ));
+EXTERN Void rgSCHUtlUlHoleDecr ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *hole
+ ));
+EXTERN Void rgSCHUtlUlHoleRls ARGS((
+ RgSchUlHoleDb *db,
+ RgSchUlHole *hole
+ ));
+EXTERN S16 rgSCHUtlUlAllocMemInit ARGS((
+ RgSchCellCb *cell,
+ RgSchUlAllocMem *mem,
+ U8 maxAllocs
+ ));
+EXTERN Void rgSCHUtlUlAllocMemDeinit ARGS((
+ RgSchCellCb *cell,
+ RgSchUlAllocMem *mem
+ ));
+EXTERN S16 rgSCHUtlUlHoleMemInit ARGS((
+ RgSchCellCb *cell,
+ RgSchUlHoleMem *mem,
+ U8 maxHoles,
+ RgSchUlHole **holeRef
+ ));
+EXTERN Void rgSCHUtlUlHoleMemDeinit ARGS((
+ RgSchCellCb *cell,
+ RgSchUlHoleMem *mem
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlAllocMemGet ARGS((
+ RgSchUlAllocMem *mem
+ ));
+EXTERN Void rgSCHUtlUlAllocMemRls ARGS((
+ RgSchUlAllocMem *mem,
+ RgSchUlAlloc *alloc
+ ));
+EXTERN RgSchUlHole *rgSCHUtlUlHoleMemGet ARGS((
+ RgSchUlHoleMem *mem
+ ));
+EXTERN Void rgSCHUtlUlHoleMemRls ARGS((
+ RgSchUlHoleMem *mem,
+ RgSchUlHole *hole
+ ));
+EXTERN RgSchUlAlloc *rgSCHUtlUlGetSpfcAlloc ARGS((
+ RgSchUlSf *sf,
+ U8 startSb,
+ U8 numSb
+));
+/******* </AllocHolesMemMgmnt>: END *****/
+
+/* DRX function declarations */
+EXTERN S16 rgSCHDrxCellCfg ARGS((RgSchCellCb *cell, RgrCellCfg *cellCfg));
+EXTERN Void rgSCHDrxCellDel ARGS((RgSchCellCb *cell));
+EXTERN S16 rgSCHDrxUeCfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgrUeCfg *ueCfg));
+#ifdef RGR_V2
+EXTERN S16 rgSCHDrxUeReCfg ARGS((RgSchCellCb *cell, RgSchUeCb *ue,
+ RgrUeRecfg *ueCfg));
+#endif
+EXTERN S16 rgSCHDrxUeDel ARGS((RgSchCellCb *cell,RgSchUeCb *ue));
+EXTERN Void rgSCHDrxTtiInd ARGS ((RgSchCellCb *cell));
+
+EXTERN S16 rgSCHDrxSfAlloc ARGS ((RgSchCellCb *cellCb, RgSchDlSf
+ *dlSf));
+EXTERN S16 rgSCHDrxDlTrnsFail ARGS((RgSchCellCb *cell, RgSchDlHqProcCb
+ *dlHq));
+EXTERN Void rgSCHDrxDedRa ARGS((RgSchCellCb *cellCb, RgSchUeCb* ueCb));
+EXTERN S16 rgSCHDrxSrInd ARGS((RgSchCellCb *cell,RgSchUeCb *ue));
+
+EXTERN Void rgSCHDrxStrtInActvTmr ARGS((RgSchCellCb *cell,
+ CmLListCp *ueLst,
+ U8 direction));
+EXTERN S16 rgSCHUtlGetDrxSchdUesInDl ARGS((RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb,
+ RgSchDlHqProcCb *dlHq,
+ RgInfUeAlloc *allocInfo,
+ CmLListCp *dlDrxInactvTmrLst,
+ CmLListCp *dlInActvLst,
+ CmLListCp *ulInActvLst));
+EXTERN Void rgSCHDrxStartHarqRTTTmr ARGS((RgSchCellCb *cell,
+ RgSchDlHqProcCb *hqP,
+ U8 tbCnt));
+EXTERN Void rgSCHDrxUeHqReset ARGS((RgSchCellCb *cell,
+ RgSchUeCb *ue,
+ RgSchDlHqEnt *hqE,
+ U8 cellIdx));
+
+#ifdef TFU_UPGRADE
+#ifdef LTE_TDD
+EXTERN CONSTANT PUBLIC RgSchTddCellSpSrsSubfrmTbl rgSchTddCellSpSrsSubfrmTbl;
+#else
+EXTERN CONSTANT PUBLIC RgSchFddCellSpSrsSubfrmTbl rgSchFddCellSpSrsSubfrmTbl;
+#endif
+#endif
+
+#ifdef LTEMAC_HDFDD
+EXTERN S16 rgSCHHdFddUeCfg ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb,
+ Bool hdFdd));
+EXTERN S16 rgSCHHdFddUeDel ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb));
+EXTERN Void rgSCHCmnHdFddPtUlMrk ARGS((
+ RgSchCellCb *cellCb));
+EXTERN Void rgSCHCmnHdFddChkUlAllow ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb,
+ U8 *flag));
+EXTERN Void rgSCHCmnHdFddChkDlAllow ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb,
+ Bool *flag));
+EXTERN Void rgSCHCmnHdFddChkNackAllow ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb,
+ CmLteTimingInfo timInfo,
+ Bool *flag));
+EXTERN Void rgSCHCmnHdFddUpdULMark ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb));
+EXTERN Void rgSCHCmnHdFddUpdDLMark ARGS((
+ RgSchCellCb *cellCb,
+ RgSchUeCb *ueCb));
+EXTERN Void rgSCHHdFddGetSfn ARGS((
+ U16 *sfn,
+ CmLteTimingInfo timeInfo,
+ S16 offset));
+#endif /* ifdef LTEMAC_HDFDD */
+
+/* ccpu00117452 - MOD - Changed macro name from
+ RGR_RRM_DLPWR_CNTRL to RGR_CQI_REPT */
+#ifdef RGR_CQI_REPT
+PUBLIC S16 rgSCHUtlRgrStaInd ARGS((
+RgSchCellCb *cell,
+RgrStaIndInfo *rgrSta
+));
+
+PUBLIC S16 rgSCHUtlFillSndStaInd ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgrStaIndInfo *staInfo,
+U8 numCqiRept
+));
+#endif /* End of RGR_CQI_REPT */
+PUBLIC S16 rgSCHUtlRgrUeStaInd ARGS((
+RgSchCellCb *cell,
+RgrUeStaIndInfo *rgrUeSta
+));
+
+PUBLIC S16 rgSCHUtlFillSndUeStaInd ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+RgrUeStaIndInfo *ueStaInfo
+));
+
+
+/* LTE_ADV_FLAG_REMOVED_START */
+PUBLIC S16 rgSCHUtlRgrLoadInfInd ARGS((
+RgSchCellCb *cell,
+RgrLoadInfIndInfo *rgrLoadInf
+));
+/* LTE_ADV_FLAG_REMOVED_END */
+#ifdef LTE_ADV
+#ifdef TFU_UPGRADE
+PUBLIC TfuAckNackMode rgSchUtlGetFdbkMode ARGS((
+RgrSchFrmt1b3TypEnum fdbkType
+));
+
+EXTERN TfuAckNackMode rgSchUtlGetFdbkMode ARGS((
+RgrSchFrmt1b3TypEnum fdbkType
+));
+
+#endif /*TFU_UPGRADE */
+#endif /* LTE_ADV */
+/* FIX */
+PUBLIC Void rgSCHUtlRlsRnti ARGS((
+RgSchCellCb *cellCb,
+RgSchRntiLnk *rntiLnk,
+Bool ueIdChngd,
+CmLteRnti newRnti
+));
+PUBLIC S16 rgSCHUtlRgmBndCfm ARGS((
+Inst instId,
+SuId suId,
+U8 status
+));
+PUBLIC Void rgSCHDhmDelHqEnt ARGS((
+RgSchCellCb *cell,
+RgSchDlHqEnt **hqE
+));
+PUBLIC Void rgSCHDhmAssgnUeHqEntFrmRaCb ARGS((
+RgSchUeCb *ue,
+RgSchRaCb *raCb
+));
+PUBLIC Void rgSCHUtlReTxTa ARGS((
+RgSchCellCb *cellCb,
+RgSchUeCb *ueCb));
+/* LTE_ADV_FLAG_REMOVED_START */
+PUBLIC Void rgSchSFRTotalPoolFree ARGS((
+RgSchSFRTotalPoolInfo *sfrTotalPoolInfo,
+RgSchCellCb *cell));
+PUBLIC Void rgSchDSFRPwrCheck ARGS((
+RgSchDlSf *sf,
+Bool *isAllUePwrHigh));
+/* LTE_ADV_FLAG_REMOVED_END */
+
+PUBLIC S16 rgSCHUtlUpdAvgPrbUsage ARGS((
+RgSchCellCb *cell
+));
+
+PUBLIC U8 rgSchUtlCfg0ReTxIdx ARGS((
+RgSchCellCb *cell,
+CmLteTimingInfo phichTime,
+U8 hqFdbkIdx
+));
+
+EXTERN S16 rgSCHUtlBuildNSendLcgReg ARGS((
+RgSchCellCb *cell,
+CmLteRnti crnti,
+U8 lcgId,
+Bool isGbr
+));
+
+EXTERN Void rgSCHUtlPdcchInit ARGS((
+ RgSchCellCb *cell,
+ RgSchDlSf *subFrm,
+ U16 nCce));
+EXTERN Void rgSCHDynCfiReCfg ARGS((
+ RgSchCellCb *cell,
+ Bool isDynCfiEnb
+));
+PUBLIC Void rgSchUtlCalcTotalPrbReq ARGS((RgSchCellCb *cell,
+ RgSchUeCb *ue,
+ U32 bo,
+ U32 *prbReqrd));
+EXTERN U8 rgSchUtlGetNumSbs ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ue,
+U32 *numSbs
+));
+
+EXTERN U8 rgSchUtlSortInsUeLst ARGS((
+RgSchCellCb *cell,
+CmLListCp *ueLst,
+CmLList *node,
+U8 subbandRequired
+));
+EXTERN S16 rgSCHUtlResetCpuOvrLdState ARGS((
+ RgSchCellCb *cell,
+ U8 cnrtCpuOvrLdIns
+));
+EXTERN Void rgSCHUtlCpuOvrLdAdjItbsCap ARGS((
+ RgSchCellCb *cell
+));
+#ifdef TFU_UPGRADE
+EXTERN S16 rgSCHTomUtlPcqiSbCalcBpIdx ARGS((
+CmLteTimingInfo crntTimInfo,
+RgSchUeCb *ueCb,
+RgSchUePCqiCb *cqiCb
+));
+
+#ifdef LTE_ADV
+EXTERN S16 rgSCHUtlSCellHndlCqiCollsn ARGS((
+RgSchUePCqiCb *cqiCb
+));
+
+EXTERN S16 rgSCHUtlSCellHndlRiCollsn ARGS((
+RgSchUePCqiCb *cqiCb
+));
+
+#endif/*LTE_ADV*/
+#endif/*TFU_UPGRADE*/
+
+EXTERN Void rgSCHTomUtlGetTrigSet ARGS((
+ RgSchCellCb *cell,
+ RgSchUeCb *ueCb,
+ U8 cqiReq,
+ U8 *triggerSet
+));
+
+EXTERN Void rgSCHUtlUpdUeDciSize ARGS((
+RgSchCellCb *cell,
+RgSchUeCb *ueCb,
+Bool isCsi2Bit
+));
+EXTERN Void rgSCHUtlCalcDciSizes ARGS((
+RgSchCellCb *cell
+));
+
+EXTERN Void rgSchCmnPreDlSch ARGS ((
+ RgSchCellCb **cell,
+ U8 nCell,
+ RgSchCellCb **cellLst
+ ));
+
+EXTERN Void rgSchCmnPstDlSch ARGS ((
+ RgSchCellCb *cell
+ ));
+
+EXTERN PUBLIC U8 rgSCHCmnGetBiIndex ARGS ((
+RgSchCellCb *cell,
+U32 ueCount
+));
+
+EXTERN S16 SchSendCfgCfm(Pst *pst, RgMngmt *cfm);
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __SCH__ */
+
+\f
+/**********************************************************************
+ End of file
+**********************************************************************/