/******************************************************************************* ################################################################################ # 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: Structures, variables, and typedefs required by the interface between MAC and Scheduler. File: rg_sch_inf.x **********************************************************************/ /** @file rg_sch_inf.x @brief Structure declarations and definitions for MAC-SCH interface. */ #ifndef __GKSCH_X__ #define __GKSCH_X__ #ifdef __cplusplus extern "C" { #endif #ifdef EMTC_ENABLE /** * @brief This structure contains the uplink grant information that is sent in response to the random access request from the UE for CEmodeA. */ typedef struct rgInfEmtcCEmodeARarUlGrt { U8 msg3PUSCHNbIdx; /*!< Indicates the Msg3 PUSCH narrowband index. */ U8 rbStart; /*!< Start Resource block of allocation. */ U8 numRb; /*!< Number of resource blocks allocated. */ U8 msg3PUSCHNumRep; /*!< Number of repetitions for Msg3 PUSCH. */ U8 iMcsCrnt; /*!< Current MCS index of the grant. */ U8 tpc; /*!< TPC command for the uplink grant. */ U8 cqiBit; /*!< Indicates the CQI is enabled or not. */ U8 delayBit; /*!< Indicates the Delay bit. */ U8 msg34MPDCCHNbIdx; /*!< Indicates Msg3/4 MPDCCH narrowband index. */ } RgInfEmtcCEmodeARarUlGrnt; /** * @brief This structure contains the uplink grant information that is sent in response to the random access request from the UE for CEmodeB. */ typedef struct rgInfEmtcCEmodeBRarUlGrnt { U8 msg3PUSCHNbIdx; /*!< Indicates the Msg3 PUSCH narrowband index. */ U8 rbStart; /*!< Start Resource block of allocation. */ U8 numRb; /*!< Number of resource blocks allocated. */ U8 msg3PUSCHNumRep; /*!< Number of repetitions for Msg3 PUSCH. */ U8 iTbsCrnt; /*!< Current TBS index of the grant. */ U8 msg34MPDCCHNbIdx; /*!< Indicates Msg3/4 MPDCCH narrowband index. */ }RgInfEmtcCEmodeBRarUlGrnt; typedef enum rgEmtcCEmodeType { RG_EMTC_CEMODE_A, RG_EMTC_CEMODE_B, RG_EMTC_CEMODE_INV }RgEmtcCEmodeType; /** * @brief This structure contains the uplink grant information that is sent in response to the random access request from the UE for EMTC. */ typedef struct rgInfEmtcRarUlGrnt { U8 rgEmtcCEmodeType; union { RgInfEmtcCEmodeARarUlGrnt emtcCEmodeARarUlGrnt; RgInfEmtcCEmodeBRarUlGrnt emtcCEmodeBRarUlGrnt; }u; }RgInfEmtcRarUlGrnt; #endif /* EMTC_ENABLE */ /** * @brief This structure contains common channel buffer occupancy report information. */ typedef struct rgInfCmnBoRpt { S16 cellSapId; CmLteCellId cellId; /*!< Identifies the cell. CellId value must be within the set of configured cell IDs. */ CmLteLcId lcId; /*!< Identifies the logical channel. lcId value range is defined in Section 6.2.1 in 36.321 specification. */ CmLteLcType lcType; /*!< Identifies the Logical channel type.lcType can take the following values: CM_LTE_LCH_BCCH CM_LTE_LCH_PCCH CM_LTE_LCH_CCCH CM_LTE_LCH_DCCH CM_LTE_LCH_DTCH */ S32 bo; /*!< Buffer occupancy reported by RLC in bytes. */ #ifdef EMTC_ENABLE U8 emtcDIReason; /*!< Reason for DI message to send. */ U8 pnb; /*!< Pagging narrowBand on which Ue perfom paging reception*/ #endif union /*!< lcType in the primitive is the union selector. */ { CmLteTimingInfo timeToTx; /*!< Timing info for the BO, applicable for BCCH and PCCH. */ CmLteRnti rnti; /*!< Temporary C-RNTI, only for CCCH. RNTI range is specified in Section 7.1 in 36.321 specification. */ } u; } RgInfCmnBoRpt; /** * @brief This structure contains dedicated channel buffer occupancy report * information. */ typedef struct rgInfDedBoRpt { S16 cellSapId; /*!< Identifies the cell SAP. cellSapId value must be within the set of configured cell SAP IDs. */ CmLteCellId cellId; /*!< Identifies the cell. CellId value must be within the set of configured cellIds. */ CmLteRnti rnti; /*!< Identifies the UE. RNTI value range is specified in Section 7.1 in 25.321 specification. */ CmLteLcId lcId; /*!< Identifies the logical channel. lcId value range is defined in Section 6.2.1 in 36.321 specification. */ S32 bo; /*!< Number of bytes reported as Buffer occupancy by RLC. */ #ifdef CCPU_OPT Bool staPduPrsnt; /*!< Is status PDU present reported by RLC. */ U16 estRlcHdrSz;/*!< Estimated hader size reported by RLC */ #endif U32 staPduBo; /*!< Number of bytes reported as Buffer occupancy for status PDU by RLC. This is already included in BO.*/ U32 oldestSduArrTime; /*!< Oldest SDU Arrival Time from Upper Layer */ Bool setMaxUlPrio; /*!< set when Pollbit is set from RLC in PDU */ Bool setMaxDlPrio; /*!< Set when there is a status PDU in the DL*/ } RgInfDedBoRpt; /*Fix: start: Indicate UE deletion from MAC to Scheduler*/ /** * @brief This structure contains the RNTI which is deleted at MAC * information. */ typedef struct rgInfUeDelInd { S16 cellSapId; /*!< Identifies the cell SAP. cellSapId value must be within the set of configured cell SAP IDs. */ CmLteCellId cellId; /*!< Identifies the cell. CellId value must be within the set of configured cellIds. */ CmLteRnti rnti; /*!< Identifies the UE. RNTI value range is specified in Section 7.1 in 25.321 specification. */ } RgInfUeDelInd; /*Fix: end: Indicate UE deletion from MAC to Scheduler*/ /** * @brief This structure contains the uplink grant information that is sent in response to the random access request from the UE. */ typedef struct rgInfRarUlGrnt { #ifndef MAC_5GTF_UPDATE U8 hop; /*!< Indicates the hopping flag. */ #else U8 xPuschRange; /*!< xPUSCH range */ #endif 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. */ U8 delayBit; /*!< Indicates the Delay bit. */ #ifndef MAC_5GTF_UPDATE U8 cqiBit; /*!< Indicates the CQI is enabled or not. */ #else U8 numBsiRep; /*!< Number of BSI reports. */ U8 bsiBetaOffIdx; /*!< Index of BSI beta offset used in Msg3 */ U8 pcrs; /*!< UL dual PCRS */ #endif } RgInfRarUlGrnt; /** * @brief This structure carries timing adjustment, uplink grant information for the specific temporary C-RNTI. */ typedef struct rgInfCrntiInfo { CmLteRnti tmpCrnti; /*!< Temporary C-RNTI. RNTI range is specified in Section 7.1 in 36.321 specification. */ U8 rapId; /*!< rapId identifies the index of the Random Access Preamble. rapId ranges from 0 to 63.*/ TknU16 ta; /*!< Timing Adjustment. Timing Adjustment Value range is defined in Section 6.1.3.5 in 36.321 specification. */ RgInfRarUlGrnt grnt; /*!< Uplink Grant to go in RAR. */ Bool isContFree; /*!< Indicates whether the procedure is contention-free or not. */ #ifdef EMTC_ENABLE RgInfEmtcRarUlGrnt emtcGrnt; /*!< Uplink grant for EMTC UE to go in RAR. */ #endif }RgInfCrntiInfo; /** * @brief This structure carries information about downlink control format, scheduled TB size, backoff indicator value, and the set of Random Access Responses within this RA-RNTI. */ typedef struct rgInfRaRntiInfo { U16 raRnti; /*!< RA-RNTI. RNTI range is specified in Section 7.1 in 36.321 specification. */ TfuPdschDciInfo dciInfo; /*!< PDCCH allocated for RA-RNTI. For more information refer to TFU Interface Service Definition (p/n 1100091). */ U32 schdTbSz; /*!< Scheduled TB size. schdTbSz value range is defined in Section 7.1.7.2.1 in 36.213 specification. */ TknU8 backOffInd; /*!< Indicates the Backoff Indicator value. backOffInd value range is defined in Section 7.2 in 36.321 specification. */ U8 numCrnti; /*!< Number of valid RARs in the array. */ RgInfCrntiInfo *crntiInfo; /*!< RAR information. */ }RgInfRaRntiInfo; /** * @brief This structure contains information about the RA-RNTIs for which * random access responses are generated. */ typedef struct rgInfRarInfo { U8 numRaRntis; /*!< Indicates the number of valid RA-RNTIs present. */ RgInfRaRntiInfo *raRntiInfo; /*!< Contains allocation information per RA-RNTI. */ U16 txPwrOffset; /*!< PDSCH tx power offset for RAR transmission */ }RgInfRarInfo; /** * @brief Logical channel allocation information. */ typedef struct rgInfLcDatInfo { CmLList lchLstEnt; /*!< Is not used when part of resource allocation. */ U8 lcId; /*!< Identifies the logical channel. lcId value range is defined in Section 6.2.1 in 36.321 specification. */ U32 numBytes; /*!< Number of bytes allocated/received to logical channel. */ } RgInfLcDatInfo; /** * @brief This structure contains control element information received from a * particular UE.Extended PHR information */ typedef struct rgInfExtPhrSCellInfo { U8 sCellIdx; /*!< SCELL index for which PHR is reported */ U8 phr; /*!< PHR value. PHR value is defined in Section 6.1.3.6a in 36.321 specification. */ U8 pCmax; /*!< PCMAX value. PCMAX value is defined in Table 6.1.3.6a-1 in 36.321 specification. */ U8 pBackOff; /*!< If UE applied back off due to P-MPRc in 36.321 specification. */ }RgInfExtPhrSCellInfo; typedef struct rgInfExtPhrCEInfo { U8 type2Phr; /*!< PHR value. PHR value is defined in Section 6.1.3.6a in 36.321 specification. */ U8 type2PCMax; /*!< PCMAX value. PCMAX value is defined in Table 6.1.3.6a-1 in 36.321 specification. */ U8 numServCells; /*!< Number of serving cells for which PHR is reported */ RgInfExtPhrSCellInfo servCellPhr[CM_LTE_MAX_CELLS]; }RgInfExtPhrCEInfo; /*!< EXT PHR value. EXT PHR value is defined in Section 6.1.3.6a in 36.321 R10 specification. */ /** * @brief This structure contains control element information received from a * particular UE. */ typedef struct rgInfCeInfo { U16 bitMask; /*!< Bitmask for the MAC Control elements present. */ struct { U16 cRnti; /*!< C-RNTI value. RNTI range is specified in Section 7.1 in 36.321 specification. */ U8 phr; /*!< PHR value. PHR value is defined in Section 6.1.3.6 in 36.321 specification. */ union { U8 truncBsr; /*!< Truncated BSR value. BSR value is defined in Section 6.1.3.1 in 36.321 specification. */ U8 shortBsr; /*!< Short BSR value.BSR value is defined in Section 6.1.3.1 in 36.321 specification. */ struct { U8 bs1; /*!< Buffer size 1 of long BSR. */ U8 bs2; /*!< Buffer size 2 of long BSR. */ U8 bs3; /*!< Buffer size 3 of long BSR. */ U8 bs4; /*!< Buffer size 4 of long BSR. */ }longBsr; /*!< BSR value is defined in Section 6.1.3.1 in 36.321 specification. */ }bsr; RgInfExtPhrCEInfo extPhr; /*!< EXT PHR value. EXT PHR value is defined in Section 6.1.3.6a in 36.321 R10 specification. */ #ifdef MAC_5GTF_UPDATE struct { U8 bar; /*!< Beam Adjusment Request */ U8 numBsiFields; /*!< Number of BSI fields UE sent in BSI Feedback */ struct { U16 bi; /*!< BSI Feedback : 9 bits Beam Index */ U8 brsrp; /*!< BSI Feedback :7 bits BRSRP */ }bsiFdbk[4]; }beam; #endif } ces; /* L2_COUNTERS */ #ifdef LTE_L2_MEAS U8 ulActLCs[RGINF_MAX_NUM_DED_LC]; /*!< List of LCs for which Data is received in UL */ #endif #ifdef LTEMAC_SPS U16 spsSduSize; #endif } RgInfCeInfo; typedef struct rgInfLcgInfo { U8 lcgId; /*!< LCGID. GBR DRB LCG */ U32 bytesRcvd; /*!< Contains bytes received for LCG */ }RgInfLcgInfo; /** * @brief This structure contains control element information received from a * particular UE identified by the RNTI. */ typedef struct rgInfUeDatInd { CmLteRnti rnti; /*!< RNTI. RNTI range is specified in Section 7.1 in 36.321 specification. */ CmLList ueLstEnt; /*!< UE linked list entry. */ RgInfCeInfo ceInfo; /*!< Contains the control elements received from the UE. */ RgInfLcgInfo lcgInfo[RGINF_MAX_LCG_PER_UE - 1]; /*!< Contains the bytes received per DRB LCG. */ }RgInfUeDatInd; /** * @brief This structure carries the control element information received for a set of UEs along with timing information. */ typedef struct rgInfSfDatInd { CmMemListCp memCp; /*!< Memory control point. */ CmLListCp ueLst; /*!< Pointer to the UE linked list. */ /* RRM_SP1_START */ U32 qcisUlPrbCnt[RGINF_MAX_GBR_QCI_REPORTS];/*!< UL gbr LC's PRB count*/ /* RRM_SP1_END */ S16 cellSapId; /*!< Cell SAP Identifier. CellSAP ID value must be within the set of configured cell SAP IDs. */ CmLteCellId cellId; /*!< Identifies the cell. CellId must be within the set of configured cell IDs. */ CmLteTimingInfo timingInfo; /*!< Contains information about SFN and subframe. SFN ranges from 0 to 1023 whereas subframe ranges from 0 to 9. */ }RgInfSfDatInd; /** * @brief This structure carries the information about scheduled logical * channels within this transport block along with timing adjustment * information. */ typedef struct rgInfUeTbInfo { Bool disTb; /*!< Currently, not used, but is applicable in MIMO case. */ Bool isReTx; /*!< Indicates the TB transmission type. */ TknU8 ta; /*!< Timing Adjustment. */ #ifdef LTE_ADV TknU8 sCellActCe; /* !< SCell Act values and whether scheduled or not */ #endif /* Changed as a result of CR timer implementation*/ U8 contResCe; /*!< Indicating presence of Contention Resolution CE across MAC-SCH interface to * identify CCCH SDU transmissions which need to * be done without the * contention resolution CE.*/ U8 numSchLch; /*!< Indicates the number of logical channels scheduled. */ U32 schdTbSz; RgInfLcDatInfo schdDat[RGINF_MAX_NUM_DED_LC]; /*!< Contains information about scheduled logical channel. */ } RgInfUeTbInfo; /** @brief This structure carries the information reagarding secondary MAC like its instance Id and HARQ process's Id */ typedef struct rgLaaTbReqInfo { U8 sMacInstId; U8 sCellHqPId; U8 tbId; U16 hqPStamp; }RgLaaTbReqInfo; /** * @brief This structure carries the UE-specific Resource allocation * information like RNTI, downlink control format, HARQ process Identifier, * scheduled TB size, and Transport Block information. */ typedef struct rgInfUeAlloc { CmLteRnti rnti; /*!< RNTI. RNTI range is specified in Section 7.1 in 36.321 specification. */ /* Added support for SPS*/ #ifdef LTEMAC_SPS CmLteRnti pdcchRnti; /*!< RNTI used for PDCCH scrambling */ #endif TfuPdschDciInfo dciInfo; /*!< Contains Downlink Control Information. For more information, refer to TFU Interface Service Definition (p/n 1100091). */ U8 hqProcId; /*!< HARQ process Identifier. hqProcId ranges between 1 and 8 for FDD mode and 1 and 15 for TDD mode */ S8 tbStrtIdx; TknU32 doa; TfuTxMode txMode; Bool puschRptUsd;/*!< True, if Precoding Information 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 */ U8 nmbOfTBs; /*!< Indicates the number of TBs. Currently this is set to 1. */ RgInfUeTbInfo tbInfo[RGINF_MAX_TB_PER_UE]; /*!< Contains TB identifier. */ /* LTE_ADV_FLAG_REMOVED_START */ #ifdef TFU_UPGRADE U8 pa; /*!< DL Power control paramter P_A configured by higher layers Ref: RRC 36.331, 6.3.2, PDSCH-Config */ #endif U8 isEnbSFR; /*To check if SFR is enabled*/ /* LTE_ADV_FLAG_REMOVED_END */ #ifdef LTE_ADV Bool fillCtrlPdu; /*!< Based upon this flag RLC will fill RLC Control PDU In a tti if P-cell is present then control PDU should be kept in P-cell otherwise S-cell*/ #endif RgLaaTbReqInfo tbReqInfo; /*!< LAA: TB information for the TBs which need to be fetched from the SCell*/ }RgInfUeAlloc; /** * @brief This structure carries the Resource allocation information for the * set of scheduled UEs. */ typedef struct rgInfUeInfo { U8 numUes; /*!< Number of UEs allocated. */ RgInfUeAlloc *allocInfo; /*!< Allocation information per UE. */ }RgInfUeInfo; /** * @brief This structure contains the RNTI and downlink control format * information for the scheduled BCCH logical channel. */ typedef struct rgInfBcchInfo { CmLteRnti rnti; /*!< RNTI range is specified in Section 7.1 in 36.321 specification. */ TfuPdschDciInfo dciInfo; /*!< Downlink Control Information. For more information, refer to TFU Interface Service Definition (p/n 1100091).*/ /* Modified for SI Enhancement*/ #ifndef RGR_SI_SCH CmLteLcId lcId; /*!< Logical Channel Identifier.lcId value range is defined in Section 6.2.1 in 36.321 specification. */ Bool sndStatInd; /*!< Currently this is set to 1 for fresh transmission of BCCH data. */ #else Buffer *pdu; /*!< PDU being specified for BCCH. */ #endif U16 txPwrOffset; /*!< PDSCH tx power offset for BCCH transmission */ }RgInfBcchInfo; /** * @brief This structure contains the RNTI and the downlink control information for the scheduled PCCH logical channel. */ typedef struct rgInfPcchInfo { CmLteRnti rnti; /*!< RNTI range is specified in Section 7.1 in 36.321 specification. */ TfuPdschDciInfo dciInfo; /*!< Downlink Control Information. For more information, refer to TFU Interface Service Definition (p/n 1100091). */ CmLteLcId lcId; /*!< Logical Channel Identifier. lcId value range is defined in Section 6.2.1 in 36.321 specification. */ U16 txPwrOffset; /*!< PDSCH tx power offset for PCCH transmission */ }RgInfPcchInfo; /** * @brief This structure contains the scheduled logical channel information * mapped onto the BCH transport channel. */ typedef struct rgInfBchInfo { /* Modified for SI Enhancement*/ #ifndef RGR_SI_SCH CmLteLcId lcId; /*!< Logical Channel Identifier. lcId value range is defined in Section 6.2.1 in 36.321 specification. */ #else Buffer *pdu; /*!< PDU being specified for BCH */ #endif }RgInfBchInfo; /** * @brief This structure contains the scheduling information of BCH, PCCH, and * BCCH channel information. */ typedef struct rgInfCmnLcInfo { U16 bitMask; /*!< Bitmask representing all the common channels present. */ RgInfBchInfo bchInfo; /*!< BCH channel Information. */ RgInfPcchInfo pcchInfo; /*!< Paging Logical Channel Information. */ RgInfBcchInfo bcchInfo; /*!< Broadcast Logical Channel Information. */ }RgInfCmnLcInfo; #ifdef EMTC_ENABLE /** * @brief This structure contains the scheduled logical channel information * mapped onto the BCH transport channel. */ typedef struct rgInfEmtcBcchInfo { CmLteRnti rnti; /*!< RNTI range is specified in Section 7.1 in 36.321 specification. */ TfuPdschDciInfo dciInfo; /*!< Downlink Control Information. For more information */ Buffer *pdu; /*!< PDU being specified for BCH */ }RgInfEmtcBcchInfo; /** * @brief This structure contains the scheduling information of BCH, PCCH, and * BCCH channel information. */ typedef struct rgInfEmtcCmnLcInfo { U16 bitMask; /*!< Bitmask representing all the common channels present. */ RgInfBchInfo bchInfo; /*!< BCH channel Information. */ RgInfPcchInfo pcchInfo; /*!< Paging Logical Channel Information. */ RgInfEmtcBcchInfo emtcBcchInfo; /*!< Broadcast Logical Channel Information. */ }RgInfEmtcCmnLcInfo; #endif #ifdef LTE_L2_MEAS /** * @brief UE-specific allocation information needed for measurements. * */ typedef struct rgInfUeUlAlloc { CmLteRnti rnti; /*!< UE ID */ U8 numPrb; /*!< Number of total PRB's allocated for this UE */ } RgInfUeUlAlloc; /** * @brief Allocation information of all UEs in this subframe. * */ typedef struct rgInfUlUeInfo { U8 numUes; /*!< Number of UE's*/ CmLteTimingInfo timingInfo; /*!< Uplink timing information */ RgInfUeUlAlloc *ulAllocInfo;/*!< Uplink Allocations information */ }RgInfUlUeInfo; #endif /*LTE_L2_MEAS */ /** *@brief this structure contains the lcId on which flow control need to be performed and the number of packets allowed for admission */ typedef struct rgInfLcInfo { CmLteLcId lcId; /*!< lcId for flow control*/ U32 pktAdmitCnt; /*! NOK and reason -> INVALID */ union { RgInfPrbCfm prbCfm; /*!< Avgerage PRB usage per QCI*/ } u; } RgInfL2MeasCfm; /** * @brief This API is invoked from l2 Measurements module at scheduler. * When Scheduler receives a measurement request from stack manager for Average * PRB usage Per QCI in Uplink, Scheduler invokes this API towards LTE MAC * for the calculations. LTE MAC utilizes the uplink allocations information provided * by scheduler for every subframe and data indications received for this calculation. * This API carries a transId to uniquely identify the confirm received for * this request from LTEMAC. * */ EXTERN S16 RgSchMacL2MeasReq ARGS(( Pst* pst, RgInfL2MeasReq* l2MeasReq )); /** * @brief This API is invoked from l2 Measurements module at scheduler. * When Scheduler receives a measurement send request from stack manager, * it sends L2 measurement to layer manager. * */ EXTERN S16 RgSchMacL2MeasSendReq ARGS(( Pst* pst, RgInfL2MeasSndReq* l2MeasReq )); /** * @brief This API is invoked from l2 Measurements module at scheduler. * When Scheduler receives a measurement stop request from stack manager, * it stops L2 Measurement */ EXTERN S16 RgSchMacL2MeasStopReq ARGS(( Pst* pst, RgInfL2MeasStopReq* l2MeasReq )); /** * @brief This API is invoked from L2 Measurement module at LTE MAC. When LTE MAC * completes calculation of Avergae PRB usage per QCI in Uplink for a given time * period, It invokes this API to indicate result back to scheduler. LTE * MAC sends the same transId received in measurement request from Scheduler. * */ EXTERN S16 RgMacSchL2MeasCfm ARGS(( Pst* pst, RgInfL2MeasCfm* l2MeasCfm )); /** * @brief This API is invoked from L2 Measurement module at LTE MAC. When LTE MAC * stops L2 measurement, it sends L2 measurement cfm. * */ EXTERN S16 RgMacSchL2MeasStopCfm ARGS(( Pst* pst, RgInfL2MeasCfm* l2MeasCfm )); EXTERN S16 RgMacSchL2MeasStop ARGS (( Pst* pst, RgInfL2MeasCfm *measInfo )); #endif /* LTE_L2_MEAS */ typedef struct rgInfLcgRegReq { CmLteCellId cellId; /*!< Cell Identifier */ CmLteRnti crnti; /*!< RNTI which uniquely identifies the UE RNTI range is specified in Section 7.1 in 25.321 Specification. */ U8 lcgId; Bool isGbr; /* Indicate if the LCG is Gbr */ } RgInfLcgRegReq; /* Added support for SPS*/ #ifdef LTEMAC_SPS /** * @brief This structure contains the logical channel information related to * uplink SPS for a particular UE identified by the CRNTI. */ typedef struct rgInfSpsLcInfo { CmLteCellId cellId; /*!< Cell Identifier */ CmLteRnti crnti; /*!< RNTI which uniquely identifies the UE RNTI range is specified in Section 7.1 in 25.321 Specification. */ CmLteRnti spsRnti; /*!< SPS RNTI. RNTI range is specified in Section 7.1 in 25.321 Specification. */ U8 spsLcCnt; /*!< identifies the number of SPS configured logical channels */ U8 spsLcId[RGINF_MAX_NUM_DED_LC]; /*!< Logical Channel Identifier. lcId value range is defined in Section 6.2.1 in 36.321 Specification. */ U8 implRelCnt; /*!< "implicitRelAfter" vallue */ U16 spsPrd; /*!< SPS periodicity of the UE */ } RgInfSpsLcInfo; /** * @brief This structure contains UL SPS param Reset related to * uplink SPS for a particular UE identified by the CRNTI. */ typedef struct rgInfUlSpsReset { CmLteCellId cellId; /*!< Cell Identifier */ CmLteRnti crnti; /*!< RNTI which uniquely identifies the UE RNTI range is specified in Section 7.1 in 25.321 Specification. */ } RgInfUlSpsReset; /** * @brief This structure contains the information to release UL SPS for a UE */ typedef struct rgInfSpsRelInfo { S16 cellSapId; /*!< identifies the cell SAP. Value range should be within the set of configured cell SAP(s).*/ CmLteRnti cRnti; /*!< RNTI of the UE */ Bool isExplRel; /*!< TRUE if explicit release needs to be sent to UE */ } RgInfSpsRelInfo; #endif /* LTEMAC_SPS */ /* * Function Prototypes */ /** * @brief Request from Scheduler to MAC to register a cell. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacCellRegReq ARGS(( Pst* pst, RgInfCellReg* regReq )); typedef S16 (*CellRegReq) ARGS(( Pst* pst, RgInfCellReg* regReq )); /** * @brief Request from Scheduler to MAC to register a cell. * @details The scheduler invokes this primitive after the scheduler cell * configuration is completed. Before calling this primitive, the scheduler * creates a mapping of the cell which is uniquely idetified by cell ID and * scheduler instance that is serving the cell. */ EXTERN S16 RgSchMacCellRegReq ARGS(( Pst* pst, RgInfCellReg* regReq )); /** * @brief Request from Scheduler to MAC to register a cell. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkSchMacCellRegReq ARGS(( CellRegReq func, Pst* pst, Buffer *mBuf )); /** * @brief Request from MAC to scheduler to update dedicated BO. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkMacSchDedBoUpdtReq ARGS(( Pst* pst, RgInfDedBoRpt* boRpt )); typedef S16 (*DedBoUpdtReq) ARGS(( Pst* pst, RgInfDedBoRpt* boRpt )); /** * @brief Request from MAC to scheduler to update dedicated BO. * @details MAC layer invokes this primitive towards scheduler when it * receives status response from the RLC for dedicated channels. Scheduler * takes the buffer occupancy information into consideration while taking * scheduling decisons. */ EXTERN S16 RgMacSchDedBoUpdtReq ARGS(( Pst* pst, RgInfDedBoRpt* boRpt )); /** * @brief Request from MAC to scheduler to update dedicated BO. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkMacSchDedBoUpdtReq ARGS(( DedBoUpdtReq func, Pst* pst, Buffer *mBuf )); /** * @brief Request from MAC to scheduler to update common channel BO. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkMacSchCmnBoUpdtReq ARGS(( Pst* pst, RgInfCmnBoRpt* boRpt )); typedef S16 (*CmnBoUpdtReq) ARGS(( Pst* pst, RgInfCmnBoRpt* boRpt )); /** * @brief Request from MAC to scheduler to update common channel BO. * @details MAC layer invokes this primitive towards scheduler when it * receives status response from the RLC for common channels. Scheduler * takes the buffer occupancy information into consideration while taking * scheduling decisons. */ EXTERN S16 RgMacSchCmnBoUpdtReq ARGS(( Pst* pst, RgInfCmnBoRpt* boRpt )); /** * @brief Request from MAC to scheduler to update common channel BO. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkMacSchCmnBoUpdtReq ARGS(( CmnBoUpdtReq func, Pst* pst, Buffer *mBuf )); /*Fix: start:Indicate UE deletion at MAC to scheduler*/ /** * @brief UE delete indication from MAC to scheduler. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkMacSchUeDelInd ARGS(( Pst* pst, RgInfUeDelInd* ueDelInd )); typedef S16 (*UeDelInd) ARGS(( Pst* pst, RgInfUeDelInd* ueDelInd )); /** * @brief UE deletion indication from MAC to scheduler. * @details MAC layer invokes this primitive towards scheduler when it * receives UE delete Request. As the UE is now deleted at MAC, it should * not be scheduled. */ EXTERN S16 RgMacSchUeDelInd ARGS(( Pst* pst, RgInfUeDelInd* ueDelInd )); /** * @brief UE delete Indication Request from MAC to scheduler. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkMacSchUeDelInd ARGS(( UeDelInd func, Pst* pst, Buffer *mBuf )); /*Fix: end:Indicate UE deletion at MAC to scheduler*/ /** * @brief Data Indication Request from MAC to scheduler. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkMacSchSfRecpInd ARGS(( Pst* pst, RgInfSfDatInd* datInd )); typedef S16 (*SfRecpInd) ARGS(( Pst* pst, RgInfSfDatInd* datInd )); /** * @brief Data Indication Request from MAC to scheduler. * @details MAC layer invokes this primitive towards scheduler when it * receives MAC Control Elements from the data received from the UE. Scheduler * takes these control elements into consideration while taking scheduling * decisons for the uplink. */ EXTERN S16 RgMacSchSfRecpInd ARGS(( Pst* pst, RgInfSfDatInd* datInd )); /** * @brief Data Indication Request from MAC to scheduler. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkMacSchSfRecpInd ARGS(( SfRecpInd func, Pst* pst, Buffer *mBuf )); /** * @brief Resource Allocation Request from Scheduler to MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacSfAllocReq ARGS(( Pst* pst, RgInfSfAlloc* resAllocReq )); typedef S16 (*SfAllocReq) ARGS(( Pst* pst, RgInfSfAlloc* resAllocReq )); /** * @brief Resource Allocation Request from Scheduler to MAC. * @details Scheduler invokes this primitive for every TTI towards MAC to * inform the scheduling decisions taken for uplink grants, common channels * and list of UEs to be scheduling during this TTI. */ EXTERN S16 RgSchMacSfAllocReq ARGS(( Pst* pst, RgInfSfAlloc* resAllocReq )); /** * @brief Resource Allocation Request from Scheduler to MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkSchMacSfAllocReq ARGS(( SfAllocReq func, Pst* pst, Buffer *mBuf )); /** * @brief Request from Scheduler to release HARQ processes at MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacRlsHqReq ARGS(( Pst* pst, RgInfRlsHqInfo* sfHqInfo )); typedef S16 (*RlsHqReq) ARGS(( Pst* pst, RgInfRlsHqInfo* sfHqInfo )); /** * @brief Request from Scheduler to release HARQ processes at MAC. * @details Scheduler calls this primitive to send the list of UEs for * which the HARQ buffers are released to MAC. The Scheduler invokes this * primitive when a positive acknowledgement is received for the TB transmitted * or a TB is retransmitted for the allowed maximum number of retransmissions. */ EXTERN S16 RgSchMacRlsHqReq ARGS(( Pst* pst, RgInfRlsHqInfo* sfHqInfo )); /** * @brief Request from Scheduler to release HARQ processes at MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkSchMacRlsHqReq ARGS(( RlsHqReq func, Pst* pst, Buffer *mBuf )); /** * @brief Request from Scheduler to reset HARQ Entity at MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacRstHqEntReq ARGS(( Pst* pst, RgInfResetHqEnt* hqEntInfo )); typedef S16 (*RstHqEntReq) ARGS(( Pst* pst, RgInfResetHqEnt* hqEntInfo )); /** * @brief Request from Scheduler to reset HARQ entity at MAC for a scell of an ue. * This is triggered upon deactivation of a scell */ EXTERN S16 RgSchMacRstHqEntReq ARGS(( Pst* pst, RgInfResetHqEnt* hqEntInfo )); /** * @brief Request from Scheduler to release HARQ processes at MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkSchMacRstHqEntReq ARGS(( RstHqEntReq func, Pst* pst, Buffer *mBuf )); /** * @brief Request from Scheduler to release RNTI at MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacRlsRntiReq ARGS(( Pst* pst, RgInfRlsRnti* rlsRnti )); typedef S16 (*RlsRntiReq) ARGS(( Pst* pst, RgInfRlsRnti* rlsRnti )); /** * @brief Request from Scheduler to release RNTI at MAC. * @details The Scheduler calls this primitive to send the list of RNTIs for * which the RRC Connection is being rejected. */ EXTERN S16 RgSchMacRlsRntiReq ARGS(( Pst* pst, RgInfRlsRnti* rlsRnt )); /** * @brief Request from Scheduler to release RNTI at MAC. * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmUnpkSchMacRlsRntiReq ARGS(( RlsRntiReq func, Pst* pst, Buffer *mBuf )); /* Added support for SPS*/ typedef S16 (*LcgReg) ARGS(( Pst* pst, RgInfLcgRegReq *lcgRegReq )); EXTERN S16 cmPkSchMacLcgRegReq ARGS(( Pst* pst, RgInfLcgRegReq *lcgRegReq )); EXTERN S16 RgSchMacLcgRegReq ARGS((Pst *pst, RgInfLcgRegReq *lcgRegReq)); EXTERN S16 cmUnpkSchMacLcgRegReq ARGS(( LcgReg func, Pst *pst, Buffer *mBuf )); EXTERN S16 RgSchMacLcgReg ARGS((Pst* pst, RgInfLcgRegReq *lcgRegReq)); #ifdef LTEMAC_SPS /** * @brief Primitive from Scheduler to MAC to register the logical channels of * a SPS UE * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacSpsLcRegReq ARGS(( Pst* pst, RgInfSpsLcInfo *lcInfo )); typedef S16 (*SpsLcReg) ARGS(( Pst* pst, RgInfSpsLcInfo *lcInfo )); /** * @brief Request from Scheduler to register the SPS related logical channels. * @details Scheduler calls this primitive to send the list of logical channels * that belong to the SPS logical channel group. */ EXTERN S16 RgSchMacSpsLcRegReq ARGS((Pst *pst, RgInfSpsLcInfo *lcInfo)); EXTERN S16 cmUnpkSchMacSpsLcRegReq ARGS(( SpsLcReg func, Pst *pst, Buffer *mBuf )); /** * @brief Primitive from Scheduler to MAC to Reset UL SPS related Params * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacUlSpsResetReq ARGS(( Pst* pst, RgInfUlSpsReset *ulSpsResetInfo )); typedef S16 (*UlSpsReset) ARGS(( Pst* pst, RgInfUlSpsReset *ulSpsResetInfo )); /** * @brief Request from Scheduler to reset UL SPS Params * @details Scheduler calls this primitive to reset implicit and explicit * release counters for the UE */ EXTERN S16 RgSchMacUlSpsResetReq ARGS((Pst *pst, RgInfUlSpsReset *ulSpsResetInfo)); EXTERN S16 cmUnpkSchMacUlSpsResetReq ARGS(( UlSpsReset func, Pst *pst, Buffer *mBuf )); /** * @brief Primitive from Scheduler to MAC to deregister the logical channels of * a SPS UE * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkSchMacSpsLcDeregReq ARGS(( Pst* pst, CmLteCellId cellId, CmLteRnti crnti )); typedef S16 (*SpsLcDereg) ARGS(( Pst* pst, CmLteCellId cellId, CmLteRnti crnti )); /** * @brief Request from Scheduler to deregister the SPS related logical channels. * @details Scheduler calls this primitive to send the deregistration request * for a UE once SPS is released for it */ EXTERN S16 RgSchMacSpsLcDeregReq ARGS((Pst *pst, CmLteCellId cellId, CmLteRnti crnti)); EXTERN S16 cmUnpkSchMacSpsLcDeregReq ARGS(( SpsLcDereg func, Pst* pst, Buffer *mBuf )); /** * @brief Primitive from MAC to Scheduler to indicate release of UL SPS for a UE * @details This primitive is used for light-weight loose coupling. */ EXTERN S16 cmPkMacSchSpsRelInd ARGS(( Pst* pst, RgInfSpsRelInfo* relInfo )); typedef S16 (*SpsRelInd) ARGS(( Pst* pst, RgInfSpsRelInfo* relInfo )); /** * @brief Indication from MAC to Scheduler to release UL SPS for a UE * @details MAC calls this primitive to inform the scheduler that UL SPS needs * to be released for a UE */ EXTERN S16 RgMacSchSpsRelInd ARGS((Pst *pst, RgInfSpsRelInfo *relInfo)); EXTERN S16 cmUnpkMacSchSpsRelInd ARGS(( SpsRelInd func, Pst* pst, Buffer *mBuf )); #endif #ifdef LTE_L2_MEAS EXTERN S16 cmPkMacSchL2MeasCfm ARGS(( Pst* pst, RgInfL2MeasCfm *measCfm )); EXTERN S16 cmPkMacSchL2MeasStopCfm ARGS(( Pst* pst, RgInfL2MeasCfm *measCfm )); EXTERN S16 cmPkSchMacL2MeasReq ARGS(( Pst* pst, RgInfL2MeasReq *measInfo )); EXTERN S16 cmPkSchMacL2MeasStopReq ARGS(( Pst* pst, RgInfL2MeasStopReq *measInfo )); EXTERN S16 cmPkSchMacL2MeasSendReq ARGS(( Pst* pst, RgInfL2MeasSndReq *measInfo )); typedef S16 (*L2MeasReq) ARGS(( Pst* pst, RgInfL2MeasReq *measInfo )); typedef S16 (*L2MeasStopReq) ARGS(( Pst* pst, RgInfL2MeasStopReq *measInfo )); typedef S16 (*L2MeasSendReq) ARGS(( Pst* pst, RgInfL2MeasSndReq *measInfo )); typedef S16 (*L2MeasStopCfm) ARGS(( Pst *pst, RgInfL2MeasCfm *measCfm )); typedef S16 (*L2MeasCfm) ARGS(( Pst *pst, RgInfL2MeasCfm *measCfm )); EXTERN S16 cmUnpkMacSchL2MeasCfm ARGS (( L2MeasCfm func, Pst *pst, Buffer *mBuf )); EXTERN S16 cmUnpkSchMacL2MeasReq ARGS(( L2MeasReq func, Pst *pst, Buffer *mBuf )); EXTERN S16 cmUnpkSchMacL2MeasSendReq ARGS(( L2MeasSendReq func, Pst *pst, Buffer *mBuf )); EXTERN S16 cmUnpkSchMacL2MeasStopReq ARGS(( L2MeasStopReq func, Pst *pst, Buffer *mBuf )); EXTERN S16 cmUnpkMacSchL2MeasStopCfm ARGS(( L2MeasCfm func, Pst *pst, Buffer *mBuf )); #endif EXTERN S16 RgSchMacRlsRnti ARGS((Pst* pst, RgInfRlsRnti* rlsRnti)); EXTERN S16 RgSchMacRlsHq ARGS((Pst* pst, RgInfRlsHqInfo* sfHqInfo)); EXTERN S16 RgSchMacSfAlloc ARGS((Pst* pst, RgInfSfAlloc* resAllocReq)); EXTERN S16 RgSchMacRstHqEnt ARGS((Pst* pst, RgInfResetHqEnt* hqEntInfo)); EXTERN S16 RgMacSchSfRecp ARGS((Pst* pst, RgInfSfDatInd* datInd)); EXTERN S16 RgMacSchCmnBoUpdt ARGS(( Pst* pst, RgInfCmnBoRpt* boRpt)); EXTERN S16 RgMacSchDedBoUpdt ARGS(( Pst* pst, RgInfDedBoRpt* boRpt)); EXTERN S16 RgSchMacCellReg ARGS((Pst* pst,RgInfCellReg* regReq)); #ifdef LTE_L2_MEAS EXTERN S16 RgSchMacL2Meas ARGS((Pst* pst, RgInfL2MeasReq* l2MeasReq)); EXTERN S16 RgMacSchL2Meas ARGS((Pst* pst, RgInfL2MeasCfm* l2MeasCfm)); EXTERN S16 RgSchMacL2MeasStop ARGS((Pst* pst, RgInfL2MeasStopReq *measInfo)); EXTERN S16 RgSchMacL2MeasSend ARGS((Pst* pst, RgInfL2MeasSndReq *measInfo)); #endif /* LTE_L2_MEAS */ /* Added support for SPS*/ #ifdef LTEMAC_SPS EXTERN S16 RgSchMacSpsLcReg ARGS((Pst *pst, RgInfSpsLcInfo *lcInfo)); EXTERN S16 RgSchMacUlSpsReset ARGS((Pst *pst, RgInfUlSpsReset *lcInfo)); EXTERN S16 RgSchMacSpsLcDereg ARGS((Pst *pst, CmLteCellId cellId, CmLteRnti crnti)); EXTERN S16 RgMacSchSpsRel ARGS((Pst *pst, RgInfSpsRelInfo* relInfo)); #endif EXTERN S16 RgMacSchUeDel ARGS((Pst* pst, RgInfUeDelInd* ueDelInd)); #ifdef __cplusplus } #endif #endif /* __GKSCH_X__*/ /********************************************************************** End of file **********************************************************************/