/******************************************************************************* ################################################################################ # 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 */ U8 tmrRes; /*!< Timer resolution for Low SAP Bind Timer */ U8 numRguSaps; /*!< Number of RGU SAP's */ U8 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 { U8 mcs; U16 numOfNacks; U16 numOfAcks; } RgAckNack; typedef struct rgSchNackAckStats { RgAckNack dlCqiStat[15]; /*!< DL Stats */ RgAckNack ulCqiStat[15]; /*!< UL stats */ } RgSchNackAckStats; typedef struct rgSchHqNumRetx { U8 mcs; U16 numOfHQ_1; U16 numOfHQ_2; U16 numOfHQ_3; U16 numOfHQ_4; U32 totalTx; } RgSchHqNumRetx; typedef struct rgSchHqRetxStats { RgSchHqNumRetx dlCqiStat[15]; /*!< DL Stats */ RgSchHqNumRetx ulCqiStat[15]; /*!< UL stats */ } RgSchHqRetxStats; EXTERN RgSchNackAckStats hqFailStats; EXTERN RgSchHqRetxStats hqRetxStats; #endif /* MAC_SCH_STATS */ /** * @brief This structure holds General statistical information of MAC. */ typedef struct rgGenSts { U32 numHarqFail; /*!< Number of HARQ failures */ U32 numUeCfg; /*!< Number of UEs configured */ U16 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 { U32 numPduRcvd; /*!< Number of PDUs received. At TFU, PDU refers to TB, and at RGU it is SDU. */ U32 numPduTxmit; /*!< Number of PDUs transmitted. This field is applicable to TFU. */ U32 numPduDrop; /*!< Number of PDUs dropped. At TFU, PDU refers to TB, and at RGU it is SDU. */ }RgSapSts; typedef struct rgSchInstCfg { U8 instId; /*!< Sheduler instance ID */ RgGenCfg genCfg; /*!< General Configuration for the scheduler instance */ U8 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 { U8 sapState; /*!< SAP state */ }RgSapSta; /** * @brief This structure holds MAC's statistical information. */ typedef struct rgSts { DateTime dt; /*!< Date and Time. */ U8 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 */ U8 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 { U8 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*/ U8 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 { U32 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 { U8 mcs; U16 numOfRb; U16 rbStart; Bool testStart; Bool enaLog; U16 logTime; }RgSchUlAllocCntrl; #endif /** * @brief This structure holds MAC's Control information. */ typedef struct rgCntrl { DateTime dt; /*!< Date and Time */ U8 action; /*!< Action */ U8 subAction; /*!< Sub-action */ U8 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 */ U32 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 { U8 numQci; /*!< Numner of QCI's in requests */ U8 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 { U8 sampPrd; /*!< sampling prd for which active UE's measured Where sampling period is in milli seconds value can be at most 100ms */ U8 numQci; /*!< Numner of QCI's in requests */ U8 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 */ U16 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 */ U32 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 */ U16 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 */ U32 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 */ U16 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 */ /* U16 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 { U16 dedPreambles; /*!< Dedicated RA Preamble received */ U16 randSelPreLowRange; /*!< Randomly selected preambles in low range */ U16 randSelPreHighRange; /*!< Randomly selected preambles in high range */ } LrgRaPreamblesCfm; /** * @brief * Staructure to send Avg PRB for a given Time Period * */ typedef struct lrgAvgPrbcfm { U8 prbPerc; /*!< PRB usage in percentage for UL */ } LrgAvgPrbCfm; /*LRG : Review Tag*/ typedef struct prbPercQci { U8 qciValue; U8 prbPercQci; }PrbPercQci; typedef struct numActvUeQci { U8 qciValue; U8 numActvUeQci; }NumActvUeQci; /*LRG : Review Tag*/ /** * @brief * Structure to send Avg PRB for a given period per QCI * */ typedef struct lrgAvgPrbQCICfm { U8 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 { U8 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 */ U16 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 */ U32 tbTransDlTotalCnt; /*!< Count of DL TB transmitteed */ U32 tbTransDlFaulty; /*!< Count of DL TB for wich NACK not recieved from UE */ U32 tbTransUlTotalCnt; /*!< Count of UL TB received successfully */ U32 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 int (*LrgSchCfgReq) ARGS(( Pst *pst, /* Post Structure */ RgMngmt *cfg /* Management Structure */ )); typedef S16 (*LrgCfgCfm) ARGS(( Pst *pst, /* Post Structure */ RgMngmt *cfg /* Management Structure */ )); typedef S16 (*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 */ )); typedef S16 (*LrgTrcInd) ARGS(( Pst *pst, /* Post Structure */ RgMngmt *trc, /* Management Structure */ Buffer *mBuf /* Message Buffer */ )); /* 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 */ EXTERN 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 */ EXTERN int 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 */ EXTERN 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 */ EXTERN int HandleSchGenCfgReq 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 */ EXTERN 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 */ EXTERN 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 */ EXTERN S16 RgMiLrgStsCfm ARGS((Pst *pst, RgMngmt *cfm)); /** @brief This primitive carries the Status request * sent from the layer manager to MAC. * @details This primitive is used by the layer manager to request * status from the MAC layer. * @param pst Pointer to the post structure. * @param cfm pointer to RgMngmt * @return ROK/RFAILED */ EXTERN S16 RgMiLrgStaReq ARGS((Pst *pst, RgMngmt *sta)); /** @brief This primitive carries the Confirmation for a Status Request * sent from the layer manager to MAC. * @details This primitive is used by MAC to send a response for the status * Request sent by the layer manager. * @param pst Pointer to the post structure. * @param cfm pointer to RgMngmt * @return ROK/RFAILED */ EXTERN S16 RgMiLrgStaCfm 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 */ EXTERN 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 */ EXTERN S16 RgMiLrgSchStaInd ARGS((Pst *pst, RgMngmt *usta)); /** @brief This primitive carries the control request sent from the layer * manager to MAC layer. * @details This primitive is sent from the layer manager to control the MAC * layer. The following entities could be controlled using this primitive. * -# Debug printing * -# TRACE functionality * -# Binding of lower SAPs * @param pst Pointer to the post structure. * @param cfm pointer to RgMngmt * @return ROK/RFAILED */ EXTERN S16 RgMiLrgCntrlReq ARGS((Pst *pst, RgMngmt *cntrl)); /** @brief This primitive carries the Confirmation for a Control Request * sent from the layer manager to MAC. * @details This primitive is used by MAC to inform Layer manager about the * status of a Control Request. * @param pst Pointer to the post structure. * @param cfm pointer to RgMngmt * @return ROK/RFAILED */ EXTERN S16 RgMiLrgCntrlCfm ARGS(( Pst *pst, RgMngmt *cfm)); /** @brief This primitive carries the control request sent from the layer * manager to MAC layer. * @details This primitive is sent from the layer manager to control the MAC * layer. The following entities could be controlled using this primitive. * -# Debug printing * -# TRACE functionality * -# Binding of lower SAPs * @param pst Pointer to the post structure. * @param cfm pointer to RgMngmt * @return ROK/RFAILED */ EXTERN S16 RgMiLrgSchCntrlReq ARGS((Pst *pst, RgMngmt *cntrl)); /** @brief This primitive carries the Confirmation for a Control Request * sent from the layer manager to MAC. * @details This primitive is used by MAC to inform Layer manager about the * status of a Control Request. * @param pst Pointer to the post structure. * @param cfm pointer to RgMngmt * @return ROK/RFAILED */ EXTERN S16 RgMiLrgSchCntrlCfm ARGS(( Pst *pst, RgMngmt *cfm)); /** @brief This primitive carries the a copy of the received buffer from MAC to * the layer manager. This is called the Tracing functionality of the layer. * @details This primitive is used by MAC to send a copy of the received buffer * to the layer manager, if Tracing is enabled via a control request. * @param pst Pointer to the post structure. * @param trc pointer to RgMngmt * @param mBuf pointer to Buffer contains the portion of the received message. * @return ROK/RFAILED */ EXTERN S16 RgMiLrgTrcInd ARGS((Pst *pst, RgMngmt *trc, Buffer *mBuf)); #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 */ EXTERN 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 */ EXTERN 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 */ EXTERN 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 */ EXTERN 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 */ EXTERN S16 RgMiLrgSchL2MeasStopCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm)); #endif /* LTE_L2_MEAS */ #endif /* RG. */ #ifdef SM EXTERN S16 smRgActvInit ARGS((Ent ent,Inst inst, Region region,Reason reason)); EXTERN S16 smRgActvTsk ARGS((Pst *pst, Buffer *mBuf)); EXTERN S16 SmMiLrgCfgReq ARGS((Pst *pst, RgMngmt *cfg)); EXTERN S16 SmMiLrgCfgCfm ARGS((Pst *pst, RgMngmt *cfm)); EXTERN S16 SmMiLrgSchCfgReq ARGS((Pst *pst, RgMngmt *cfg)); EXTERN S16 SmMiLrgSchCfgCfm ARGS((Pst *pst, RgMngmt *cfm)); EXTERN S16 SmMiLrgStsReq ARGS((Pst *pst, RgMngmt *sts)); EXTERN S16 SmMiLrgStsCfm ARGS((Pst *pst, RgMngmt *cfm)); EXTERN S16 SmMiLrgStaReq ARGS((Pst *pst, RgMngmt *sta)); EXTERN S16 SmMiLrgStaCfm ARGS((Pst *pst, RgMngmt *cfm)); EXTERN S16 SmMiLrgStaInd ARGS((Pst *pst, RgMngmt *usta)); EXTERN S16 SmMiLrgCntrlReq ARGS((Pst *pst, RgMngmt *cntrl)); EXTERN S16 SmMiLrgSchStaInd ARGS((Pst *pst, RgMngmt *usta)); EXTERN S16 SmMiLrgCntrlCfm ARGS(( Pst *pst, RgMngmt *cfm)); EXTERN S16 SmMiLrgSchCntrlReq ARGS((Pst *pst, RgMngmt *cntrl)); EXTERN S16 SmMiLrgSchCntrlCfm ARGS(( Pst *pst, RgMngmt *cfm)); EXTERN S16 SmMiLrgTrcInd ARGS((Pst *pst, RgMngmt *trc, Buffer *mBuf)); /* lrg_x_001.main_3 - ADD - Added the following functions for LTE_L2_MEAS */ #ifdef LTE_L2_MEAS EXTERN S16 SmMiLrgSchL2MeasStartReq ARGS((Pst *pst, LrgSchMeasReqInfo *schL2MeasReq)); EXTERN S16 SmMiLrgSchL2MeasCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm)); EXTERN S16 SmMiLrgSchL2MeasStopReq ARGS((Pst *pst, LrgSchMeasStopReqInfo *schL2MeasReq)); EXTERN S16 SmMiLrgSchL2MeasSendReq ARGS((Pst *pst, LrgSchMeasSndReqInfo *schL2MeasReq)); EXTERN S16 SmMiLrgSchL2MeasStopCfm ARGS((Pst *pst, LrgSchMeasCfmInfo *schL2MeasCfm)); EXTERN S16 SmMiLrgSchL2MeasReq ARGS((Pst *pst, LrgSchMeasReqInfo *meas)); EXTERN S16 SmMiLrgSchL2SendMeasReq ARGS((Pst *pst, LrgSchMeasSndReqInfo *meas)); EXTERN 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.*/ EXTERN S16 cmPkLrgCfgReq ARGS(( Pst * pst, RgMngmt * cfg )); /** @brief This API is used to send a Configuration Request from LM to MAC. */ EXTERN S16 cmUnpkLrgCfgReq ARGS(( LrgCfgReq func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Configuration Request from LM to SCH. */ EXTERN S16 cmPkLrgSchCfgReq ARGS(( Pst * pst, RgMngmt * cfg )); /** @brief This API is used to send a Configuration Request from LM to SCH. */ EXTERN 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. */ EXTERN S16 cmPkLrgSchL2MeasReq ARGS(( Pst * pst, LrgSchMeasReqInfo * meas )); /** @brief This API is used to send a L2 Measurement Request from LM to SCH. */ EXTERN S16 cmUnpkLrgSchL2MeasReq ARGS(( LrgSchL2MeasReq func, Pst * pst, Buffer *mBuf )); EXTERN S16 cmPkLrgSchL2MeasCfm ARGS(( Pst * pst, LrgSchMeasCfmInfo *measInfo )); EXTERN S16 cmUnpkLrgSchL2MeasCfm ARGS(( LrgSchL2MeasCfm func, Pst *pst, Buffer *mBuf )); EXTERN S16 cmPkLrgSchL2MeasReq ARGS(( Pst * pst, LrgSchMeasReqInfo * meas )); /** @brief This API is used to send a L2 Measurement Request from LM to SCH. */ EXTERN 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. */ EXTERN S16 cmPkLrgSchL2MeasSendReq ARGS(( Pst * pst, LrgSchMeasSndReqInfo * meas )); /** @brief This API is used to send a L2 Measurement Request from LM to SCH. */ EXTERN 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. */ EXTERN S16 cmPkLrgSchL2MeasStopReq ARGS(( Pst * pst, LrgSchMeasStopReqInfo * meas )); /** @brief This API is used to send a L2 Measurement Request from LM to SCH. */ EXTERN S16 cmUnpkLrgSchL2MeasStopReq ARGS(( LrgSchL2MeasStopReq func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to carry L2 Measurement Cfm from SCH. */ EXTERN S16 cmPkLrgSchL2MeasStopCfm ARGS(( Pst * pst, LrgSchMeasCfmInfo *measInfo )); /** @brief This API is used to carrya L2 Measurement Cfm from SCH. */ EXTERN S16 cmUnpkLrgSchL2MeasStopCfm ARGS(( LrgSchL2MeasStopCfm func, Pst *pst, Buffer *mBuf )); #endif /** @brief This API is used to send a Configuration Confirm from MAC to LM. */ EXTERN S16 cmPkLrgCfgCfm ARGS(( Pst * pst, RgMngmt * cfm )); /** @brief This API is used to send a Configuration Confirm from MAC to LM. */ EXTERN S16 cmUnpkLrgCfgCfm ARGS(( LrgCfgCfm func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Configuration Confirm from SCH to LM. */ EXTERN S16 cmPkLrgSchCfgCfm ARGS(( Pst * pst, RgMngmt * cfg )); /** @brief This API is used to send a Configuration Confirm from SCH to LM. */ EXTERN S16 cmUnpkLrgSchCfgCfm ARGS(( LrgSchCfgCfm func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Statistics Request from LM to MAC. */ EXTERN S16 cmPkLrgStsReq ARGS(( Pst * pst, RgMngmt * sts )); /** @brief This API is used to send a Statistics Request from LM to MAC. */ EXTERN S16 cmUnpkLrgStsReq ARGS(( LrgStsReq func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Statistics Confirm from MAC to LM. */ EXTERN S16 cmPkLrgStsCfm ARGS(( Pst * pst, RgMngmt * cfm )); /** @brief This API is used to send a Statistics Confirm from MAC to LM. */ EXTERN S16 cmUnpkLrgStsCfm ARGS(( LrgStsCfm func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Status Request from LM to MAC. */ EXTERN S16 cmPkLrgStaReq ARGS(( Pst * pst, RgMngmt * sta )); /** @brief This API is used to send a Status Request from LM to MAC. */ EXTERN S16 cmUnpkLrgStaReq ARGS(( LrgStaReq func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Status Confirm from MAC to LM. */ EXTERN S16 cmPkLrgStaCfm ARGS(( Pst * pst, RgMngmt * cfm )); /** @brief This API is used to send a Status Confirm from MAC to LM. */ EXTERN S16 cmUnpkLrgStaCfm ARGS(( LrgStaCfm func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Status Indication from MAC to LM. */ EXTERN S16 cmPkLrgStaInd ARGS(( Pst * pst, RgMngmt * usta )); /** @brief This API is used to send a Status Indication from MAC to LM. */ EXTERN S16 cmUnpkLrgStaInd ARGS(( LrgStaInd func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Status Indication from SCH to LM. */ EXTERN S16 cmPkLrgSchStaInd ARGS(( Pst * pst, RgMngmt * sta )); /** @brief This API is used to send a Status Indication from SCH to LM. */ EXTERN S16 cmUnpkLrgSchStaInd ARGS(( LrgSchStaInd func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Control Request from LM to MAC. */ EXTERN S16 cmPkLrgCntrlReq ARGS(( Pst * pst, RgMngmt * cntrl )); /** @brief This API is used to send a Control Request from LM to MAC. */ EXTERN S16 cmUnpkLrgCntrlReq ARGS(( LrgCntrlReq func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Control Request from LM to SCH. */ EXTERN S16 cmPkLrgSchCntrlReq ARGS(( Pst * pst, RgMngmt * cntrl )); /** @brief This API is used to send a Control Request from LM to SCH. */ EXTERN S16 cmUnpkLrgSchCntrlReq ARGS(( LrgSchCntrlReq func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Control Confirm from MAC to LM.*/ EXTERN S16 cmPkLrgCntrlCfm ARGS(( Pst * pst, RgMngmt * cfm )); /** @brief This API is used to send a Control Confirm from MAC to LM. */ EXTERN S16 cmUnpkLrgCntrlCfm ARGS(( LrgCntrlCfm func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Control Confirm from SCH to LM. */ EXTERN S16 cmPkLrgSchCntrlCfm ARGS(( Pst * pst, RgMngmt * cntrl )); /** @brief This API is used to send a Control Confirm from SCH to LM. */ EXTERN S16 cmUnpkLrgSchCntrlCfm ARGS(( LrgSchCntrlCfm func, Pst * pst, Buffer *mBuf )); /** @brief This API is used to send a Trace Indication from MAC to LM. */ EXTERN S16 cmPkLrgTrcInd ARGS(( Pst * pst, RgMngmt * trc, Buffer * trcBuf )); /** @brief This API is used to send a Trace Indication from MAC to LM. */ EXTERN S16 cmUnpkLrgTrcInd ARGS(( LrgTrcInd func, Pst * pst, Buffer *mBuf )); EXTERN S16 cmPkRgGenCfg ARGS(( RgGenCfg *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgGenCfg ARGS(( RgGenCfg *param, Buffer *mBuf )); EXTERN S16 cmPkRgUpSapCfg ARGS(( RgUpSapCfg *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgUpSapCfg ARGS(( RgUpSapCfg *param, Buffer *mBuf )); EXTERN S16 cmPkRgLowSapCfg ARGS(( RgLowSapCfg *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgLowSapCfg ARGS(( RgLowSapCfg *param, Buffer *mBuf )); EXTERN S16 cmPkRgGenSts ARGS(( RgGenSts *param, Buffer *mBuf )); #ifdef MAC_SCH_STATS EXTERN S16 cmPkRgSchHqRetxStats ARGS(( RgSchHqRetxStats *param, Buffer *mBuf )); EXTERN S16 cmPkRgSchNackAckStats ARGS(( RgSchNackAckStats *param, Buffer *mBuf )); EXTERN S16 cmPkRgHqNumRetx ARGS(( RgSchHqNumRetx *param, Buffer *mBuf )); EXTERN S16 cmPkRgAckNack ARGS(( RgAckNack *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSchHqRetxStats ARGS(( RgSchHqRetxStats *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSchNackAckStats ARGS(( RgSchNackAckStats *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgHqNumRetx ARGS(( RgSchHqNumRetx *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgAckNack ARGS(( RgAckNack *param, Buffer *mBuf )); #endif /* MAC_SCH_STATS */ EXTERN S16 cmUnpkRgGenSts ARGS(( RgGenSts *param, Buffer *mBuf )); EXTERN S16 cmPkRgSapSts ARGS(( RgSapSts *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSapSts ARGS(( RgSapSts *param, Buffer *mBuf )); EXTERN S16 cmPkRgSchInstCfg ARGS(( RgSchInstCfg *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSchInstCfg ARGS(( RgSchInstCfg *param, Buffer *mBuf )); EXTERN S16 cmPkRgCfg ARGS(( RgCfg *param, S16 elmnt, Buffer *mBuf )); EXTERN S16 cmUnpkRgCfg ARGS(( RgCfg *param, S16 elmnt, Buffer *mBuf )); EXTERN S16 cmPkRgSapSta ARGS(( RgSapSta *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSapSta ARGS(( RgSapSta *param, Buffer *mBuf )); EXTERN S16 cmPkRgSts ARGS(( RgSts *param, S16 elmnt, Buffer *mBuf )); EXTERN S16 cmUnpkRgSts ARGS(( RgSts *param, S16 elmnt, Buffer *mBuf )); /* lrg_x_001.main_3 - MODIFY - Modified the below function to hold the event type */ #ifdef LRG_V1 EXTERN S16 cmPkRgSsta ARGS(( Pst *pst, RgSsta *param, S16 elmnt, /*ccpu00118255 - ADD - eventType param */ U8 eventType, Buffer *mBuf )); #else /*LRG_V1 not defined */ EXTERN S16 cmPkRgSsta ARGS(( Pst *pst, RgSsta *param, S16 elmnt, Buffer *mBuf )); #endif /* LRG_V1 endif */ EXTERN S16 cmUnpkRgSsta ARGS(( Pst *pst, RgSsta *param, S16 elmnt, Buffer *mBuf )); EXTERN S16 cmPkRgUstaDgn ARGS(( RgUstaDgn *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgUstaDgn ARGS(( RgUstaDgn *param, Buffer *mBuf )); EXTERN S16 cmPkRgUsta ARGS(( RgUsta *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgUsta ARGS(( RgUsta *param, Buffer *mBuf )); EXTERN S16 cmPkRgTrc ARGS(( RgTrc *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgTrc ARGS(( RgTrc *param, Buffer *mBuf )); EXTERN S16 cmPkRgDbgCntrl ARGS(( RgDbgCntrl *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgDbgCntrl ARGS(( RgDbgCntrl *param, Buffer *mBuf )); EXTERN S16 cmPkRgSapCntrl ARGS(( RgSapCntrl *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSapCntrl ARGS(( RgSapCntrl *param, Buffer *mBuf )); EXTERN S16 cmPkRgCntrl ARGS(( RgCntrl *param, S16 elmnt, Buffer *mBuf )); EXTERN S16 cmUnpkRgCntrl ARGS(( RgCntrl *param, S16 elmnt, Buffer *mBuf )); EXTERN S16 cmPkRgMngmt ARGS(( Pst *pst, RgMngmt *param, U8 eventType, Buffer *mBuf )); EXTERN S16 cmUnpkRgMngmt ARGS(( Pst *pst, RgMngmt *param, U8 eventType, Buffer *mBuf )); #ifdef PHY_ERROR_LOGING EXTERN S16 cmPkRgSchUlAllocCntrl ARGS(( RgSchUlAllocCntrl *param, Buffer *mBuf )); EXTERN S16 cmUnpkRgSchUlAllocCntrl ARGS(( RgSchUlAllocCntrl *param, Buffer *mBuf )); #endif /* lrg_x_001.main_4 ccpu00117036 - C++ support */ #ifdef __cplusplus } #endif #endif #endif /* __LRGX__. */ /********************************************************************** End of file **********************************************************************/