/*******************************************************************************
################################################################################
# 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: lrg.x
**********************************************************************/
/**
@file lrg.x
@brief Structure declarations and definitions for LRG interface.
*/
#ifndef __LRGX__
#define __LRGX__
/* ccpu00121930 : ADD: c++ support*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* @brief
This structure holds configuration parameters for MAC General Configuration. */
typedef struct rgGenCfg
{
Pst lmPst; /*!< Layer manager post structure */
MemoryId mem; /*!< Region and pool ID */
uint8_t tmrRes; /*!< Timer resolution for Low SAP Bind Timer */
uint8_t numRguSaps; /*!< Number of RGU SAP's */
uint8_t startCellId; /*!< Start cell id value */
#ifdef LTE_ADV
Bool forceCntrlSrbBoOnPCel; /*!< value 1 means scheduler will schedule
RLC control BO and SRBs only on PCEll
else it will schedule on both PCell
and SCell */
Bool isSCellActDeactAlgoEnable; /*!< TRUE will enable activation/deactivation algo at Schd */
#endif
}RgGenCfg;
/**
* @brief
This structure holds configuration parameters for MAC Upper SAP Configuration. */
typedef struct rgUpSapCfg
{
Selector selector; /*!< Selector */
MemoryId mem; /*!< Region and pool ID */
Priority prior; /*!< Priority */
ProcId procId; /*!< Processor ID */
Ent ent; /*!< Entity ID */
Inst inst; /*!< Instance ID */
Route route; /*!< Route */
SpId spId; /*!< Service provider ID */
SuId suId; /*!< Service user ID */
}RgUpSapCfg;
/**
* @brief
This structure holds configuration parameters for MAC Lower SAP Configuration. */
typedef struct rgLowSapCfg
{
Selector selector; /*!< Selector */
MemoryId mem; /*!< Region and pool ID */
Priority prior; /*!< Priority */
ProcId procId; /*!< Processor ID */
Ent ent; /*!< Entity ID */
Inst inst; /*!< Instance ID */
Route route; /*!< Route */
SpId spId; /*!< Service provider ID */
SuId suId; /*!< Service user ID */
TmrCfg bndTmr; /*!< Bind Timer Value */
}RgLowSapCfg;
#ifdef MAC_SCH_STATS
/* Data structures */
typedef struct rgAckNack
{
uint8_t mcs;
uint16_t numOfNacks;
uint16_t numOfAcks;
} RgAckNack;
typedef struct rgSchNackAckStats
{
RgAckNack dlCqiStat[15]; /*!< DL Stats */
RgAckNack ulCqiStat[15]; /*!< UL stats */
} RgSchNackAckStats;
typedef struct rgSchHqNumRetx
{
uint8_t mcs;
uint16_t numOfHQ_1;
uint16_t numOfHQ_2;
uint16_t numOfHQ_3;
uint16_t numOfHQ_4;
uint32_t totalTx;
} RgSchHqNumRetx;
typedef struct rgSchHqRetxStats
{
RgSchHqNumRetx dlCqiStat[15]; /*!< DL Stats */
RgSchHqNumRetx ulCqiStat[15]; /*!< UL stats */
} RgSchHqRetxStats;
RgSchNackAckStats hqFailStats;
RgSchHqRetxStats hqRetxStats;
#endif /* MAC_SCH_STATS */
/**
* @brief
This structure holds General statistical information of MAC. */
typedef struct rgGenSts
{
uint32_t numHarqFail; /*!< Number of HARQ failures */
uint32_t numUeCfg; /*!< Number of UEs configured */
uint16_t numCellCfg; /*!< Number of Cells configured */
#ifdef MAC_SCH_STATS
RgSchNackAckStats nackAckStats;
RgSchHqRetxStats hqRetxStats;
#endif /* MAC_SCH_STATS */
}RgGenSts;
/**
* @brief
This structure holds statistical information of a SAP in MAC. */
typedef struct rgSapSts
{
uint32_t numPduRcvd; /*!< Number of PDUs received. At TFU, PDU refers to TB,
and at RGU it is SDU. */
uint32_t numPduTxmit; /*!< Number of PDUs transmitted. This field is
applicable to TFU. */
uint32_t numPduDrop; /*!< Number of PDUs dropped. At TFU, PDU refers to TB,
and at RGU it is SDU. */
}RgSapSts;
typedef struct rgSchInstCfg
{
uint8_t instId; /*!< Sheduler instance ID */
RgGenCfg genCfg; /*!< General Configuration for the scheduler instance */
uint8_t numSaps; /*!< Number of RGR and TFU SAPs must be same */
RgUpSapCfg rgrSap[LRG_MAX_SAPS_PER_INST]; /*!< RGR interface SAPS */
RgUpSapCfg rgmSap[LRG_MAX_SAPS_PER_INST]; /*!< RGR interface SAPS */
RgLowSapCfg tfuSap[LRG_MAX_SAPS_PER_INST]; /*!< TFU interface SAPS */
} RgSchInstCfg;
/**
* @brief
This structure holds configuration parameters for MAC. */
typedef struct rgCfg
{
union
{
RgGenCfg genCfg; /*!< General Configuration */
/* SAPs for the MAC layer */
RgUpSapCfg rguSap; /*!< RGU interface SAP */
RgUpSapCfg crgSap; /*!< CRG interface SAP */
RgLowSapCfg tfuSap; /*!< TFU interface SAP */
RgSchInstCfg schInstCfg;/*!< General Configuration for scheduler instances */
}s;
}RgCfg;
/**
* @brief
This structure holds a SAP's status information. */
typedef struct rgSapSta
{
uint8_t sapState; /*!< SAP state */
}RgSapSta;
/**
* @brief
This structure holds MAC's statistical information. */
typedef struct rgSts
{
DateTime dt; /*!< Date and Time. */
uint8_t sapInst; /*!< SAP instance. */
Action action; /*!< Action on Trafffic load related statistic values.
ARST: To reset the statistic values. */
union
{
RgGenSts genSts; /*!< General statistics. */
RgSapSts rguSts; /*!< RGU SAP statistics. */
RgSapSts crgSts; /*!< CRG SAP statistics. */
RgSapSts rgrSts; /*!< RGR SAP statistics. */
RgSapSts tfuSts; /*!< TFU SAP statistics. */
}s;
}RgSts;
/**
* @brief
This structure holds MAC's solicited status information. */
typedef struct rgSsta
{
DateTime dt; /*!< Date and time */
uint8_t sapInst; /*!< SAP instance */
union
{
SystemId sysId; /*!< System information */
RgSapSta rguSapSta; /*!< RGU SAP state */
RgSapSta crgSapSta; /*!< CRG SAP state */
RgSapSta rgrSapSta; /*!< RGR SAP state */
RgSapSta rgmSapSta; /*!< RGM SAP state */
RgSapSta tfuSapSta; /*!< TFU SAP state */
}s;
}RgSsta;
/**
* @brief
Alarm diagnostics structure. */
typedef struct rgUstaDgn
{
uint8_t type; /*!< Diagnostics Type */
union
{
/*lrg_x_001.main_3 - Changed for documentation*/
MemoryId mem; /*!< Memory pool and region
LRG_USTA_DGNVAL_MEM Dynamic memory allocation failure.
LRG_USTS_DGNVAL_HARQ Harq Process is busy.
*/
}u;
} RgUstaDgn;
/**
* @brief
This structure holds MAC's Unsolicited Status information. */
typedef struct rgUsta
{
CmAlarm cmAlarm; /*!< Alarms */
RgUstaDgn dgn; /*!< Alarm diagnostics */
}RgUsta;
/**
* @brief
This structure holds MAC's Trace Indication information. */
typedef struct rgTrc
{
DateTime dt; /*!< Date and time */
/*lrg_x_001.main_3 - changed for documentation*/
uint8_t evnt; /*!< Event
EVTRGUDATREQ Trace for Dedicated channel Data Request.
EVTRGUCDATREQ Trace for common channel data request.
*/
}RgTrc;
/**
* @brief
This structure holds MAC's Debug Control information. */
typedef struct rgDbgCntrl
{
uint32_t dbgMask; /*!< iThe Layer Manager electively enables or disables various levels of Debug printing
Following are the values:
DBGMASK_PRM Enable/Disable function parameter debug prints
DBGMASK_ERR Enable/Disable error prints
DBGMASK_INFO Enable/Disable informational prints.
*/
}RgDbgCntrl;
/**
* @brief
This structure holds MAC's SAP Control information. */
typedef struct rgSapCntrl
{
SuId suId; /*!< Service user ID */
SpId spId; /*!< Service provider ID */
}RgSapCntrl;
#ifdef PHY_ERROR_LOGING
typedef struct rgSchUlAllocCntrl
{
uint8_t mcs;
uint16_t numOfRb;
uint16_t rbStart;
Bool testStart;
Bool enaLog;
uint16_t logTime;
}RgSchUlAllocCntrl;
#endif
/**
* @brief
This structure holds MAC's Control information. */
typedef struct rgCntrl
{
DateTime dt; /*!< Date and Time */
uint8_t action; /*!< Action */
uint8_t subAction; /*!< Sub-action */
uint8_t instId; /*!< Scheduler instance ID */
union
{
RgDbgCntrl rgDbgCntrl; /*!< Debug Control */
/*lrg_x_001.main_3 - Changed for documentation.*/
S16 trcLen; /*!< Trace Length
i)LRG_FULL_TRACE Give full message
ii)LRG_NO_TRACE Disable Trace
iii)Or any valid S16 value in case where only the specified number
of bytes, as indicated by trcLen, are to be sent.*/
RgSapCntrl rgSapCntrl; /*!< SAP Control */
uint32_t logMask; /*!< Logging control Mask */
#ifdef PHY_ERROR_LOGING
RgSchUlAllocCntrl rgSchUlAllocCntrl; /* For setting MCS,Number of RB and RB start */
#endif
}s;
}RgCntrl;
/**
* @brief
This structure holds MAC's Configuration and Control Management Information. */
typedef struct rgMngmt
{
Header hdr; /*!< Header */
CmStatus cfm; /*!< Confirmation */
union
{
RgCfg cfg; /*!< Configuration */
RgSts sts; /*!< Statistics */
RgSsta ssta; /*!< Solicited Status */
RgUsta usta; /*!< Unsolicited Status */
RgTrc trc; /*!< Trace */
RgCntrl cntrl; /*!< Control */
}t;
}RgMngmt;
/* lrg_x_001.main_3 - ADD - Data structures for LTE_L2_MEAS */
#ifdef LTE_L2_MEAS
/**
* @brief
To measure Average Number of PRB's used per QCI for a time period
timePrd
*/
typedef struct lrgAvgPrbQCI
{
uint8_t numQci; /*!< Numner of QCI's in requests */
uint8_t qci[LRG_MAX_QCI_PER_REQ]; /*!< QCI for which PRB has to be measured */
} LrgAvgPrbQCI;
/**
* @brief
To measure number of Active UE's per QCI for the given time period
timePrd
**/
typedef struct lrgNmbActvUeQCI
{
uint8_t sampPrd; /*!< sampling prd for which active UE's measured
Where sampling period is in milli seconds
value can be at most 100ms */
uint8_t numQci; /*!< Numner of QCI's in requests */
uint8_t qci[LRG_MAX_QCI_PER_REQ]; /*!< QCI for which UE has to be considered */
} LrgNmbActvUeQCI;
/**
* * @brief
This structure will be used by Layer Manager to L2 Measurement Request
Information
**/
typedef struct lrgSchMeasReqInfo
{
Header hdr; /*!< Header */
uint16_t measType; /*!< For type of measurement Following are the */
/*!< allowed values */
/*!< LRG_L2MEAS_AVG_PRB_DL , LRG_L2MEAS_AVG_PRB_UL*/
/*!< LRG_L2MEAS_AVG_PRB_PER_QCI_DL */
/*!< LRG_L2MEAS_AVG_PRB_PER_QCI_UL */
/*!< LRG_L2MEAS_RA_PREAMBLE */
/*!< LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_UL */
/*!< LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_DL */
/*!< LRG_L2MEAS_TB_TRANS_DL_COUNT */
/*!< LRG_L2MEAS_TB_TRANS_DL_FAULTY_COUNT */
/*!< LRG_L2MEAS_TB_TRANS_UL_COUNT */
/*!< LRG_L2MEAS_TB_TRANS_UL_FAULTY_COUNT */
uint32_t timePrd; /*!< Time period UNITS and value will differ depending
on the action. Might be milli seconds/seconds. */
CmLteCellId cellId; /*!< CELL Id for which measurement is Done */
LrgAvgPrbQCI avgPrbQciUl; /*!< Average PRB usage per QCI in UL */
LrgAvgPrbQCI avgPrbQciDl; /*!< Average PRB usage per QCI in DL */
LrgNmbActvUeQCI nmbActvUeQciUl; /*!< Number of active UE's per QCI in UL */
LrgNmbActvUeQCI nmbActvUeQciDl; /*!< Number of active UE's per QCI in DL */
} LrgSchMeasReqInfo;
typedef struct lrgSchMeasSndReqInfo
{
Header hdr; /*!< Header */
uint16_t measType; /*!< For type of measurement Following are the */
/*!< allowed values */
/*!< LRG_L2MEAS_AVG_PRB_DL , LRG_L2MEAS_AVG_PRB_UL*/
/*!< LRG_L2MEAS_AVG_PRB_PER_QCI_DL */
/*!< LRG_L2MEAS_AVG_PRB_PER_QCI_UL */
/*!< LRG_L2MEAS_RA_PREAMBLE */
/*!< LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_UL */
/*!< LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_DL */
uint32_t timePrd; /*!< Time period UNITS and value will differ depending
on the action. Might be milli seconds/seconds. */
CmLteCellId cellId; /*!< CELL Id for which measurement is Done */
// LrgAvgPrbQCI avgPrbQciUl; /*!< Average PRB usage per QCI in UL */
// LrgAvgPrbQCI avgPrbQciDl; /*!< Average PRB usage per QCI in DL */
// LrgNmbActvUeQCI nmbActvUeQciUl; /*!< Number of active UE's per QCI in UL */
// LrgNmbActvUeQCI nmbActvUeQciDl; /*!< Number of active UE's per QCI in DL */
} LrgSchMeasSndReqInfo;
typedef struct lrgSchMeasStopReqInfo
{
Header hdr; /*!< Header */
uint16_t measType; /*!< For type of measurement Following are the */
/*!< allowed values */
/*!< LRG_L2MEAS_AVG_PRB_DL , LRG_L2MEAS_AVG_PRB_UL*/
/*!< LRG_L2MEAS_AVG_PRB_PER_QCI_DL */
/*!< LRG_L2MEAS_AVG_PRB_PER_QCI_UL */
/*!< LRG_L2MEAS_RA_PREAMBLE */
/*!< LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_UL */
/*!< LRG_L2MEAS_NMB_ACTV_UE_PER_QCI_DL */
/* uint16_t timePrd; */ /*!< Time period UNITS and value will differ depending
on the action. Might be milli seconds/seconds. */
CmLteCellId cellId; /*!< CELL Id for which measurement is Done */
/* LrgAvgPrbQCI avgPrbQciUl; */ /*!< Average PRB usage per QCI in UL */
// LrgAvgPrbQCI avgPrbQciDl; /*!< Average PRB usage per QCI in DL */
// LrgNmbActvUeQCI nmbActvUeQciUl; /*!< Number of active UE's per QCI in UL */
// LrgNmbActvUeQCI nmbActvUeQciDl; /*!< Number of active UE's per QCI in DL */
} LrgSchMeasStopReqInfo;
/**
*@brief
Structure to hold Received Random Access Preambles.
**/
typedef struct lrgRaPreambles
{
uint16_t dedPreambles; /*!< Dedicated RA Preamble received */
uint16_t randSelPreLowRange; /*!< Randomly selected preambles in low range */
uint16_t randSelPreHighRange; /*!< Randomly selected preambles in high range */
} LrgRaPreamblesCfm;
/**
* @brief
* Staructure to send Avg PRB for a given Time Period
* */
typedef struct lrgAvgPrbcfm
{
uint8_t prbPerc; /*!< PRB usage in percentage for UL */
} LrgAvgPrbCfm;
/*LRG : Review Tag*/
typedef struct prbPercQci
{
uint8_t qciValue;
uint8_t prbPercQci;
}PrbPercQci;
typedef struct numActvUeQci
{
uint8_t qciValue;
uint8_t numActvUeQci;
}NumActvUeQci;
/*LRG : Review Tag*/
/**
* @brief
* Structure to send Avg PRB for a given period per QCI
* */
typedef struct lrgAvgPrbQCICfm
{
uint8_t numQci; /*!< number of QCI */
/*LRG : Review Tag*/
PrbPercQci prbPercQci[LRG_MAX_QCI_PER_REQ]; /*!< PRB usage in percentage per QCI for UL/DL */
/*LRG : Review Tag*/
} LrgAvgPrbQCICfm;
/**
*@brief
Structure to send number of Active UE's per QCI
*/
typedef struct lrgNumActvUeQCICfm
{
uint8_t numQci; /*!< Numner of QCI's in requests */
/*LRG : Review Tag*/
NumActvUeQci numActvUeQci[LRG_MAX_QCI_PER_REQ]; /*!< Number of Active UE's in UL/DL per QCI */
/*LRG : Review Tag*/
} LrgNumActvUeQCICfm;
/**
@brief
Structure to send L2 Measurement confirm
**/
typedef struct lrgSchMeasCfmInfo
{
Header hdr; /*!< Header information */
uint16_t measType; /*!< Type of measurement */
CmStatus cfm; /*!< Confirmation possible Values when measType
is invalid status -> NOK and reason -> INVALID
*/
CmLteCellId cellId; /*!< Cell for which measurement is done */
LrgAvgPrbCfm avgPrbUl; /*!< PRB usage in percentage per QCI for UL */
LrgAvgPrbCfm avgPrbDl; /*!< PRB usage in percentage per QCI for DL */
LrgAvgPrbQCICfm avgPrbQciUlCfm; /*!< PRB usage in percentage per QCI for UL */
LrgAvgPrbQCICfm avgPrbQciDlCfm; /*!< PRB usage in percentage per QCI for DL */
LrgRaPreamblesCfm raPrmbsCfm; /*!< Different received RA preambles */
LrgNumActvUeQCICfm numUeQciUlCfm; /*!< Number of Active UE's in UL per QCI */
LrgNumActvUeQCICfm numUeQciDlCfm; /*!< Number of Active UE's in DL per QCI */
uint32_t tbTransDlTotalCnt; /*!< Count of DL TB transmitteed */
uint32_t tbTransDlFaulty; /*!< Count of DL TB for wich NACK not recieved from UE */
uint32_t tbTransUlTotalCnt; /*!< Count of UL TB received successfully */
uint32_t tbTransUlFaulty; /*!< Count of UL TB not recieved successfully */
} LrgSchMeasCfmInfo;
#endif /* LTE_L2_MEAS */
/*
Function Prototype Typedefs
. */
typedef S16 (*LrgCfgReq) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cfg /* Management Structure */
));
typedef uint8_t (*LrgSchCfgReq) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cfg /* Management Structure */
));
typedef uint8_t (*LrgCfgCfm) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cfg /* Management Structure */
));
typedef uint8_t (*LrgSchCfgCfm) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cfg /* Management Structure */
));
typedef S16 (*LrgCntrlReq) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cntrl /* Management Structure */
));
typedef S16 (*LrgSchCntrlReq) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cntrl /* Management Structure */
));
typedef S16 (*LrgCntrlCfm) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cntrl /* Management Structure */
));
typedef S16 (*LrgSchCntrlCfm) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *cntrl /* Management Structure */
));
/* lrg_x_001.main_3 - ADD - Data structures for LTE_L2_MEAS */
#ifdef LTE_L2_MEAS
typedef S16 (*LrgSchL2MeasReq) ARGS((
Pst *pst, /* Post Structure */
LrgSchMeasReqInfo *meas /* L2 Measurement structure */
));
typedef S16 (*LrgSchL2MeasStopReq) ARGS((
Pst *pst, /* Post Structure */
LrgSchMeasStopReqInfo *meas /* L2 Measurement structure */
));
typedef S16 (*LrgSchL2MeasSendReq) ARGS((
Pst *pst, /* Post Structure */
LrgSchMeasSndReqInfo *meas /* L2 Measurement structure */
));
#endif
typedef S16 (*LrgStaReq) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *sta /* Management Structure */
));
typedef S16 (*LrgStaCfm) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *sta /* Management Structure */
));
typedef S16 (*LrgStaInd) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *sta /* Management Structure */
));
typedef S16 (*LrgSchStaInd) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *sta /* Management Structure */
));
typedef S16 (*LrgStsReq) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *sts /* Management Structure */
));
typedef S16 (*LrgStsCfm) ARGS((
Pst *pst, /* Post Structure */
RgMngmt *sts /* Management Structure */
));
/* lrg_x_001.main_3 - ADD - Data structures for LTE_L2_MEAS */
#ifdef LTE_L2_MEAS
typedef S16 (*LrgSchL2MeasCfm) ARGS((
Pst *pst, /* Post Structure */
LrgSchMeasCfmInfo *schL2MeasCfm /* Measurement Info */
));
typedef S16 (*LrgSchL2MeasStopCfm) ARGS((
Pst *pst, /* Post Structure */
LrgSchMeasCfmInfo *schL2MeasCfm /* Measurement Info */
));
#endif /* LTE_L2_MEAS */
/*
Function Prototypes.
*/
#ifdef RG
/* lrg_x_001.main_3 - ADD - Added the comments for the following function */
/** @brief This primitive is sent from Layer manager to MAC. It carries
* configuration information towards MAC.
* @details This primitive can be used by layer manager to configure the
* following entities at MAC.
* -# General configuration
* -# RGU SAP i.e. SAP towards RLC
* -# CRG SAP i.e. SAP towards RRC
* -# TFU SAP i.e. SAP towards Physical layer
*
* @param pst pointer to Pst
* @param cfg pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgCfgReq ARGS((Pst *pst, RgMngmt *cfg));
/** @brief This primitive carries the Configuration Request
* for Scheduler sent from the DU APP to MAC.
* @details This primitive is used by MAC to sned the configuration
* to scheduler
* @param pst Pointer to the post structure.
* @param cfm pointer to RgMngmt
* @return ROK/RFAILED
*/
uint8_t MacSchGenCfgReq ARGS((Pst *pst, RgMngmt *cfg));
/** @brief This primitive carries the Confirmation for a Configuration Request
* sent from the layer manager to MAC.
* @details This primitive is used by MAC to inform Layer manager about the
* status of a Configuration Request.
* @param pst Pointer to the post structure.
* @param cfm pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgCfgCfm ARGS((Pst *pst, RgMngmt *cfm));
/** @brief This primitive is sent from Layer manager to Scheduler. It carries
* configuration information towards MAC.
* @details This primitive can be used by layer manager to configure the
* following entities at Scheduler.
* -# General configuration
* -# RGR SAP i.e. SAP towards RRM
* -# TFU SAP i.e. SAP towards Physical layer
*
* @param pst pointer to Pst
* @param cfg pointer to RgMngmt
* @return ROK/RFAILED
*/
uint8_t SchProcGenCfgReq ARGS((Pst *pst, RgMngmt *cfg));
/** @brief This primitive carries the Confirmation for a Configuration Request
* sent from the layer manager to Scheduler.
* @details This primitive is used by Scheduler to inform Layer manager about the
* status of a Configuration Request.
* @param pst Pointer to the post structure.
* @param cfm pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgSchCfgCfm ARGS((Pst *pst, RgMngmt *cfm));
/** @brief This primitive carries the Request for statistics from MAC layer
* sent from the layer manager.
* @details This primitive is used by layer manager to request for statistics
* on the following
* -# General statistics
* -# RGU SAP statistics
* -# CRG SAP statistics
* -# TFU SAP statistics
* @param pst Pointer to the post structure.
* @param sts pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgStsReq ARGS((Pst *pst, RgMngmt *sts));
/** @brief This primitive carries the Statistics for a Statistics Request
* sent from the layer manager to MAC.
* @details This primitive is used by MAC to inform Layer manager about the
* Statistics requested earlier.
* @param pst Pointer to the post structure.
* @param cfm pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgStsCfm ARGS((Pst *pst, RgMngmt *cfm));
/** @brief This primitive carries the Unsolicited status indications from MAC
* to the layer manager i.e. Alarms.
* @details This primitive is used by MAC to inform Layer manager about some
* error conditions or bind confirmations.
* @param pst Pointer to the post structure.
* @param usta pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgStaInd ARGS((Pst *pst, RgMngmt *usta));
/** @brief This primitive carries the Unsolicited status indications from
* scheduler to the layer manager i.e. Alarms.
* @details This primitive is used by Scheduler to inform Layer manager about some
* error conditions or bind confirmations.
* @param pst Pointer to the post structure.
* @param usta pointer to RgMngmt
* @return ROK/RFAILED
*/
S16 RgMiLrgSchStaInd ARGS((Pst *pst, RgMngmt *usta));
#ifdef LTE_L2_MEAS
/** @brief This primitive is to enable L2 (layer 2) measurements at the MAC
* layer.
*
* @details Enables the L2 Measurements.
*
* @param pst Pointer to the post structure.
* @param schL2MeasInfo pointer to LrgSchMeasReqInfo
* @return ROK/RFAILED
*/
S16 RgMiLrgSchL2MeasReq ARGS((Pst *pst, LrgSchMeasReqInfo *schL2MeasInfo));
/** @brief This primitive carries the results of the L2 Measurements gathered
* by MAC to the layer manager.
*
* @details Carries the Measurements gathered by MAC.
*
* @param pst Pointer to the post structure.
* @param schL2MeasCfm pointer to LrgSchMeasCfmInfo
* @return ROK/RFAILED
*/
S16 RgMiLrgSchL2MeasCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm));
/** @brief This primitive is to Stop L2 (layer 2) measurements at the MAC
* layer.
*
* @details Enables the L2 Measurements.
*
* @param pst Pointer to the post structure.
* @param schL2MeasInfo pointer to LrgSchMeasReqInfo
* @return ROK/RFAILED
*/
S16 RgMiLrgSchL2MeasStopReq ARGS((Pst *pst, LrgSchMeasStopReqInfo *schL2MeasInfo));
/** @brief This primitive is to used to send L2 (layer 2) measurements at the MAC
* layer.
*
* @details Enables the L2 Measurements.
*
* @param pst Pointer to the post structure.
* @param schL2MeasInfo pointer to LrgSchMeasReqInfo
* @return ROK/RFAILED
*/
S16 RgMiLrgSchL2MeasSendReq ARGS((Pst *pst,LrgSchMeasSndReqInfo *schL2MeasInfo));
/** @brief This primitive carries the confrmratoin of the L2 Measurements gathered
* by MAC to the layer manager.
*
* @details Carries the Measurements gathered by MAC.
*
* @param pst Pointer to the post structure.
* @param schL2MeasCfm pointer to LrgSchMeasCfmInfo
* @return ROK/RFAILED
*/
S16 RgMiLrgSchL2MeasStopCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm));
#endif /* LTE_L2_MEAS */
#endif /* RG. */
#ifdef SM
S16 smRgActvInit ARGS((Ent ent,Inst inst, Region region,Reason reason));
S16 smRgActvTsk ARGS((Pst *pst, Buffer *mBuf));
S16 SmMiLrgCfgReq ARGS((Pst *pst, RgMngmt *cfg));
S16 SmMiLrgCfgCfm ARGS((Pst *pst, RgMngmt *cfm));
S16 SmMiLrgSchCfgReq ARGS((Pst *pst, RgMngmt *cfg));
S16 SmMiLrgSchCfgCfm ARGS((Pst *pst, RgMngmt *cfm));
S16 SmMiLrgStsReq ARGS((Pst *pst, RgMngmt *sts));
S16 SmMiLrgStsCfm ARGS((Pst *pst, RgMngmt *cfm));
S16 SmMiLrgStaReq ARGS((Pst *pst, RgMngmt *sta));
S16 SmMiLrgStaInd ARGS((Pst *pst, RgMngmt *usta));
S16 SmMiLrgCntrlReq ARGS((Pst *pst, RgMngmt *cntrl));
S16 SmMiLrgSchStaInd ARGS((Pst *pst, RgMngmt *usta));
S16 SmMiLrgCntrlCfm ARGS(( Pst *pst, RgMngmt *cfm));
S16 SmMiLrgSchCntrlReq ARGS((Pst *pst, RgMngmt *cntrl));
/* lrg_x_001.main_3 - ADD - Added the following functions for LTE_L2_MEAS */
#ifdef LTE_L2_MEAS
S16 SmMiLrgSchL2MeasStartReq ARGS((Pst *pst, LrgSchMeasReqInfo *schL2MeasReq));
S16 SmMiLrgSchL2MeasCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm));
S16 SmMiLrgSchL2MeasStopReq ARGS((Pst *pst, LrgSchMeasStopReqInfo *schL2MeasReq));
S16 SmMiLrgSchL2MeasSendReq ARGS((Pst *pst, LrgSchMeasSndReqInfo *schL2MeasReq));
S16 SmMiLrgSchL2MeasStopCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm));
S16 SmMiLrgSchL2MeasReq ARGS((Pst *pst, LrgSchMeasReqInfo *meas));
S16 SmMiLrgSchL2SendMeasReq ARGS((Pst *pst, LrgSchMeasSndReqInfo *meas));
S16 SmMiLrgSchL2StopMeasReq ARGS((Pst *pst, LrgSchMeasStopReqInfo *meas));
#endif /* LTE_L2_MEAS */
#endif /* SM. */
/*
Function Prototypes for Packing and Unpacking the primitives.
*/
#if (defined(LCLRG))
/** @brief This API is used to send a
Config Request from LM to MAC.*/
S16 cmPkLrgCfgReq ARGS((
Pst * pst,
RgMngmt * cfg
));
/** @brief This API is used to send a
Configuration Request from LM to MAC. */
S16 cmUnpkLrgCfgReq ARGS((
LrgCfgReq func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
Configuration Request from LM to SCH. */
S16 cmPkLrgSchCfgReq ARGS((
Pst * pst,
RgMngmt * cfg
));
/** @brief This API is used to send a
Configuration Request from LM to SCH. */
S16 cmUnpkLrgSchCfgReq ARGS((
LrgSchCfgReq func,
Pst * pst,
Buffer *mBuf
));
/* lrg_x_001.main_3 - ADD - Added the following pack/unpack functions for LTE_L2_MEAS */
#ifdef LTE_L2_MEAS
/** @brief This API is used to send a
L2 Measurement Request from LM to SCH. */
S16 cmPkLrgSchL2MeasReq ARGS((
Pst * pst,
LrgSchMeasReqInfo * meas
));
/** @brief This API is used to send a
L2 Measurement Request from LM to SCH. */
S16 cmUnpkLrgSchL2MeasReq ARGS((
LrgSchL2MeasReq func,
Pst * pst,
Buffer *mBuf
));
S16 cmPkLrgSchL2MeasCfm ARGS((
Pst * pst,
LrgSchMeasCfmInfo *measInfo
));
S16 cmUnpkLrgSchL2MeasCfm ARGS((
LrgSchL2MeasCfm func,
Pst *pst,
Buffer *mBuf
));
S16 cmPkLrgSchL2MeasReq ARGS((
Pst * pst,
LrgSchMeasReqInfo * meas
));
/** @brief This API is used to send a
L2 Measurement Request from LM to SCH. */
S16 cmUnpkLrgSchL2MeasReq ARGS((
LrgSchL2MeasReq func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
L2 Measurement Stop Request from LM to SCH. */
S16 cmPkLrgSchL2MeasSendReq ARGS((
Pst * pst,
LrgSchMeasSndReqInfo * meas
));
/** @brief This API is used to send a
L2 Measurement Request from LM to SCH. */
S16 cmUnpkLrgSchL2MeasSendReq ARGS((
LrgSchL2MeasSendReq func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
L2 Measurement Stop Request from LM to SCH. */
S16 cmPkLrgSchL2MeasStopReq ARGS((
Pst * pst,
LrgSchMeasStopReqInfo * meas
));
/** @brief This API is used to send a
L2 Measurement Request from LM to SCH. */
S16 cmUnpkLrgSchL2MeasStopReq ARGS((
LrgSchL2MeasStopReq func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to carry
L2 Measurement Cfm from SCH. */
S16 cmPkLrgSchL2MeasStopCfm ARGS((
Pst * pst,
LrgSchMeasCfmInfo *measInfo
));
/** @brief This API is used to carrya
L2 Measurement Cfm from SCH. */
S16 cmUnpkLrgSchL2MeasStopCfm ARGS((
LrgSchL2MeasStopCfm func,
Pst *pst,
Buffer *mBuf
));
#endif
/** @brief This API is used to send a
Configuration Confirm from MAC to LM. */
uint8_t cmPkLrgCfgCfm ARGS((
Pst * pst,
RgMngmt * cfm
));
/** @brief This API is used to send a
Configuration Confirm from MAC to LM. */
S16 cmUnpkLrgCfgCfm ARGS((
LrgCfgCfm func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
Configuration Confirm from SCH to LM. */
uint8_t cmPkLrgSchCfgCfm ARGS((
Pst * pst,
RgMngmt * cfg
));
/** @brief This API is used to send a
Configuration Confirm from SCH to LM. */
S16 cmUnpkLrgSchCfgCfm ARGS((
LrgSchCfgCfm func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
Statistics Request from LM to MAC. */
S16 cmPkLrgStsReq ARGS((
Pst * pst,
RgMngmt * sts
));
/** @brief This API is used to send a
Statistics Request from LM to MAC. */
S16 cmUnpkLrgStsReq ARGS((
LrgStsReq func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
Statistics Confirm from MAC to LM. */
S16 cmPkLrgStsCfm ARGS((
Pst * pst,
RgMngmt * cfm
));
/** @brief This API is used to send a
Statistics Confirm from MAC to LM. */
S16 cmUnpkLrgStsCfm ARGS((
LrgStsCfm func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
Status Indication from MAC to LM. */
S16 cmPkLrgStaInd ARGS((
Pst * pst,
RgMngmt * usta
));
/** @brief This API is used to send a
Status Indication from MAC to LM. */
S16 cmUnpkLrgStaInd ARGS((
LrgStaInd func,
Pst * pst,
Buffer *mBuf
));
/** @brief This API is used to send a
Status Indication from SCH to LM. */
S16 cmPkLrgSchStaInd ARGS((
Pst * pst,
RgMngmt * sta
));
/** @brief This API is used to send a
Status Indication from SCH to LM. */
S16 cmUnpkLrgSchStaInd ARGS((
LrgSchStaInd func,
Pst * pst,
Buffer *mBuf
));
S16 cmPkRgGenCfg ARGS((
RgGenCfg *param,
Buffer *mBuf
));
S16 cmUnpkRgGenCfg ARGS((
RgGenCfg *param,
Buffer *mBuf
));
S16 cmPkRgUpSapCfg ARGS((
RgUpSapCfg *param,
Buffer *mBuf
));
S16 cmUnpkRgUpSapCfg ARGS((
RgUpSapCfg *param,
Buffer *mBuf
));
S16 cmPkRgLowSapCfg ARGS((
RgLowSapCfg *param,
Buffer *mBuf
));
S16 cmUnpkRgLowSapCfg ARGS((
RgLowSapCfg *param,
Buffer *mBuf
));
S16 cmPkRgGenSts ARGS((
RgGenSts *param,
Buffer *mBuf
));
#ifdef MAC_SCH_STATS
S16 cmPkRgSchHqRetxStats ARGS((
RgSchHqRetxStats *param,
Buffer *mBuf
));
S16 cmPkRgSchNackAckStats ARGS((
RgSchNackAckStats *param,
Buffer *mBuf
));
S16 cmPkRgHqNumRetx ARGS((
RgSchHqNumRetx *param,
Buffer *mBuf
));
S16 cmPkRgAckNack ARGS((
RgAckNack *param,
Buffer *mBuf
));
S16 cmUnpkRgSchHqRetxStats ARGS((
RgSchHqRetxStats *param,
Buffer *mBuf
));
S16 cmUnpkRgSchNackAckStats ARGS((
RgSchNackAckStats *param,
Buffer *mBuf
));
S16 cmUnpkRgHqNumRetx ARGS((
RgSchHqNumRetx *param,
Buffer *mBuf
));
S16 cmUnpkRgAckNack ARGS((
RgAckNack *param,
Buffer *mBuf
));
#endif /* MAC_SCH_STATS */
S16 cmUnpkRgGenSts ARGS((
RgGenSts *param,
Buffer *mBuf
));
S16 cmPkRgSapSts ARGS((
RgSapSts *param,
Buffer *mBuf
));
S16 cmUnpkRgSapSts ARGS((
RgSapSts *param,
Buffer *mBuf
));
S16 cmPkRgSchInstCfg ARGS((
RgSchInstCfg *param,
Buffer *mBuf
));
S16 cmUnpkRgSchInstCfg ARGS((
RgSchInstCfg *param,
Buffer *mBuf
));
S16 cmPkRgCfg ARGS((
RgCfg *param,
S16 elmnt,
Buffer *mBuf
));
S16 cmUnpkRgCfg ARGS((
RgCfg *param,
S16 elmnt,
Buffer *mBuf
));
S16 cmPkRgSapSta ARGS((
RgSapSta *param,
Buffer *mBuf
));
S16 cmUnpkRgSapSta ARGS((
RgSapSta *param,
Buffer *mBuf
));
S16 cmPkRgSts ARGS((
RgSts *param,
S16 elmnt,
Buffer *mBuf
));
S16 cmUnpkRgSts ARGS((
RgSts *param,
S16 elmnt,
Buffer *mBuf
));
/* lrg_x_001.main_3 - MODIFY - Modified the below function to hold the event type */
S16 cmPkRgUstaDgn ARGS((
RgUstaDgn *param,
Buffer *mBuf
));
S16 cmUnpkRgUstaDgn ARGS((
RgUstaDgn *param,
Buffer *mBuf
));
S16 cmPkRgUsta ARGS((
RgUsta *param,
Buffer *mBuf
));
S16 cmUnpkRgUsta ARGS((
RgUsta *param,
Buffer *mBuf
));
S16 cmPkRgMngmt ARGS((
Pst *pst,
RgMngmt *param,
uint8_t eventType,
Buffer *mBuf
));
S16 cmUnpkRgMngmt ARGS((
Pst *pst,
RgMngmt *param,
uint8_t eventType,
Buffer *mBuf
));
/* lrg_x_001.main_4 ccpu00117036 - C++ support */
#ifdef __cplusplus
}
#endif
#endif
#endif /* __LRGX__. */
/**********************************************************************
End of file
**********************************************************************/