/*******************************************************************************
################################################################################
# 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 LTE MAC-RRC
Control (CRG) interface.
File: crg.x
**********************************************************************/
#ifndef __CRG_X__
#define __CRG_X__
/**
@file crg.x
@brief Structure declarations and definitions for CRG interface.
*/
#ifdef __cplusplus
extern "C" {
#endif
/* Enumertaions for CRG */
/* Data Structures for CRG */
/**
@brief Transaction ID between MAC and RRC. */
typedef struct crgCfgTransId
{
uint8_t trans[CRG_CFG_TRANSID_SIZE]; /*!< RRC transaction ID */
} CrgCfgTransId;
/**
@brief Bandwidth configuration per cell. */
typedef struct crgBwCfg
{
uint8_t dlTotalBw; /*!< Total Dowlink Bandwidth */
uint8_t ulTotalBw; /*!< Total Uplink Bandwidth */
} CrgBwCfg;
/**
@brief RACH configuration per cell. */
typedef struct crgRachCfg
{
uint8_t maxMsg3Tx; /*!< Maximum number of message 3 transmissions */
} CrgRachCfg;
#ifdef LTE_ADV
/** @brief UE secondary cell config params to MAC*/
typedef struct crgUeSCellInfo
{
uint16_t sCellId; /*!< This will be secondary cellId */
Inst macInst; /*!< MAC instance for SCell */
SuId rguUlSapId; /*!< MAC-RLC UL Sap ID */
SuId rguDlSapId; /*!< MAC-RLC DL SAP ID */
}CrgUeSCellInfo;
/** @brief Configuration information of Secondary cells for a UE*/
typedef struct crgUeSecCellInfo
{
Bool isSCellCfgPres; /*!< Bool indicates whether configuration
is present */
uint8_t numSCells; /*!< Number of SCells
*/
CrgUeSCellInfo ueSCellCfg[CRG_MAX_SCELL_PER_UE]; /*!< Secondary cell
configuration per UE */
}CrgUeSecCellInfo;
#endif /* LTE_ADV */
/**
@brief Cell configuration. */
typedef struct crgCellCfg
{
CmLteCellId cellId; /*!< Cell ID */
CrgRachCfg rachCfg; /*!< RACH Configuration */
CrgBwCfg bwCfg; /*!< Bandwidth Configuration */
#ifdef TENB_MULT_CELL_SUPPRT
SpId rguUlSapId; /*!< RLC UL SAP Id for common channels */
SpId rguDlSapId; /*!< RLC DL SAP Id for common channels */
#endif
#ifdef EMTC_ENABLE
uint8_t emtcEnable;
#endif
} CrgCellCfg;
/**
@brief Uplink HARQ configuration per UE. */
typedef struct crgUeUlHqCfg
{
uint8_t maxUlHqTx; /*!< Maximum number of UL HARQ transmissions */
} CrgUeUlHqCfg;
/* crg_x_001.main_3 - Changes for MIMO feature addition */
/* crg_x_001.main_4 - Changes for MIMO feature addition */
/**
* @enum UE Transmission Modes */
typedef enum crgTxMode
{
CRG_UE_TM_1 = 1, /** Transmission Mode 1 */
CRG_UE_TM_2, /** Transmission Mode 2 */
CRG_UE_TM_3, /** Transmission Mode 3 */
CRG_UE_TM_4, /** Transmission Mode 4 */
CRG_UE_TM_5, /** Transmission Mode 5 */
CRG_UE_TM_6, /** Transmission Mode 6 */
CRG_UE_TM_7 /** Transmission Mode 7 */
} CrgTxMode;
/**
@brief UE Transmission mode configuration */
typedef struct crgTxModeCfg
{
Bool pres; /*!< TRUE if Transmission mode is being CFG/RECFG ed */
CrgTxMode tm; /*!< Transmission mode */
}CrgTxModeCfg;
/**
@brief UE configuration. */
typedef struct crgUeCfg
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti crnti; /*!< UE ID: CRNTI */
CrgUeUlHqCfg ueUlHqCfg; /*!< UE related UL HARQ configuration */
CrgTxModeCfg txMode; /*!< UE Transmission mode Cfg */
#ifdef TENB_MULT_CELL_SUPPRT
SpId rguUlSapId; /*!< RLC UL SAP Id for common channels */
SpId rguDlSapId; /*!< RLC DL SAP Id for common channels */
#endif
} CrgUeCfg;
/**
@brief Logical channel configuration information for downlink logical channels. */
typedef struct crgDlLchCfg
{
uint8_t dlTrchType; /*!< Indicates type of DL transport channel:
Validated only for BCCH at MAC. DL Transport
channel type can take following values:
CM_LTE_TRCH_BCH
CM_LTE_TRCH_PCH
CM_LTE_TRCH_DL_SCH */
} CrgDlLchCfg;
/**
@brief Logical channel configuration information for uplink logical channels. */
typedef struct crgUlLchCfg
{
uint8_t ulTrchType; /*!< Indicates type of UL transport channel:
Validated only for BCCH at MAC.
UL Transport channel type can take following values:
CM_LTE_TRCH_RACH
CM_LTE_TRCH_UL_SCH */
uint8_t lcgId; /*!< Logical channel group ID */
} CrgUlLchCfg;
/* crg_x_001.main_2: Documentation update */
/**
@brief Logical channel configuration information for common and dedicated channels. */
typedef struct crgLchCfg
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti crnti; /*!< CRNTI for DTCH and DCCH */
CmLteLcId lcId; /*!< Logical channel ID */
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 */
uint8_t dir; /*!< Indicates Direction. Direction can take following
values:
CRG_DIR_TX
CRG_DIR_RX
CRG_DIR_TX_RX */
CrgDlLchCfg dlInfo; /*!< Downlink logical channel configuration info */
CrgUlLchCfg ulInfo; /*!< Uplink logical channel configuration info */
/* crg_x_001.main_5 - ADD - Members corresponding to LTE_L2_MEAS */
#ifdef LTE_L2_MEAS
uint8_t qci; /*!< QCI for the logical channel.
Valid Range:[0-255] (Actual QCI - 1). */
#endif /* LTE_L2_MEAS */
} CrgLchCfg;
/**
@brief Basic configuration information for MAC. */
typedef struct crgCfg
{
uint8_t cfgType; /*!< Indicates configuration type */
union crgCfgU
{
CrgCellCfg cellCfg; /*!< Cell configuration */
CrgUeCfg ueCfg; /*!< UE configuration */
CrgLchCfg lchCfg; /*!< Logical channel configuration */
} u; /*!< Union of Cell/UE/Lch configuration */
} CrgCfg;
/**
@brief Activation time information. */
typedef struct crgActvTime
{
Bool pres; /*!< Indicates the presence of activation time */
CmLteTimingInfo actvTime; /*!< Activation time information */
} CrgActvTime;
/**
@brief Cell reconfiguration information. */
typedef struct crgCellRecfg
{
CmLteCellId cellId; /*!< Cell ID */
CrgRachCfg rachRecfg; /*!< RACH Configuration */
} CrgCellRecfg;
/**
@brief UE reconfiguration information. */
typedef struct crgUeRecfg
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti oldCrnti; /*!< Old UE ID */
CmLteRnti newCrnti; /*!< New UE ID: This value must match
'oldCrnti',if no CRNTI change during
reconfiguration */
CrgUeUlHqCfg ueUlHqRecfg; /*!< UE UL HARQ information */
CrgTxModeCfg txMode; /*!< UE Transmission mode ReCfg */
#ifdef LTE_ADV
CrgUeSecCellInfo crgSCellCfg; /*!< Secondary cell dedicated informaton
per UE */
#endif
} CrgUeRecfg;
/**
@brief Logical channel reconfiguration information for dedicated channels only. */
typedef struct crgLchRecfg
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti crnti; /*!< CRNTI for DTCH and DCCH */
CmLteLcId lcId; /*!< Logical channel ID */
struct ulRecfgS
{
uint8_t lcgId; /*!< Logical channel group ID */
} ulRecfg; /*!< Uplink logical channel reconfiguration information */
} CrgLchRecfg;
/**
@brief Basic reconfiguration information for MAC. */
typedef struct crgRecfg
{
uint8_t recfgType; /*!< Indicates reconfiguration type */
union crgRecfgU
{
CrgCellRecfg cellRecfg; /*!< Cell Reconfig information */
CrgUeRecfg ueRecfg; /*!< UE Reconfig information */
CrgLchRecfg lchRecfg; /*!< Logical channel reconfiguration information */
} u; /*!< Union of Cell/UE/Lch reconfiguration information
*/
} CrgRecfg;
/**
@brief Basic Delete information for MAC. */
typedef struct crgDel
{
uint8_t delType; /*!< Indicates configuration item to be deleted */
union crgDelU
{
struct cellDelS
{
CmLteCellId cellId; /*!< Cell ID */
} cellDel; /*!< Cell Delete information */
struct ueDelS
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti crnti; /*!< UE ID: CRNTI */
} ueDel; /*!< UE Delete information */
struct lchDelS
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti crnti; /*!< CRNTI for DTCH and DCCH */
CmLteLcId lcId; /*!< Logical channel ID */
uint8_t dir; /*!< Indicates Direction. Direction can take following
values:
CRG_DIR_TX
CRG_DIR_RX
CRG_DIR_TX_RX */
} lchDel; /*!< Logical channel delete information */
} u; /*!< Union of Cell/UE/Lch delete information */
} CrgDel;
/**
@brief UE RESET information for MAC. */
typedef struct crgRst
{
CmLteCellId cellId; /*!< Cell ID */
CmLteRnti crnti; /*!< UE ID: CRNTI tobe RESET */
} CrgRst;
/**
@brief Config/Reconfig/Delete information for MAC. */
typedef struct crgCfgReqInfo
{
uint8_t action; /*!< Determines cfg/recfg/del/reset */
union cfgReqInfoU
{
CrgCfg cfgInfo; /*!< Configuration related infomation */
CrgRecfg recfgInfo; /*!< Reconfiguration related information */
CrgDel delInfo; /*!< Deletion related information */
CrgRst rstInfo; /*!< Reset related information */
} u; /*!< Union of config/re-config/delete information */
} CrgCfgReqInfo;
/*
Function Prototypes
*/
/** @brief Request from RRC to MAC to bind the interface SAPs. */
typedef S16 (*CrgBndReq) ARGS((
Pst* pst,
SuId suId,
SpId spId));
/** @brief Confirmation from MAC to RRC for the bind/unbind
* request for the interface SAPs. */
typedef S16 (*CrgBndCfm) ARGS((
Pst* pst,
SuId suId,
uint8_t status));
/** @brief Request from RRC to MAC to unbind the interface SAPs. */
typedef S16 (*CrgUbndReq) ARGS((
Pst* pst,
SpId spId,
Reason reason));
/** @brief Configuration Request from RRC to MAC for
* configuring Cell/Ue/Lch. */
typedef S16 (*CrgCfgReq) ARGS((
Pst* pst,
SpId spId,
CrgCfgTransId transId,
CrgCfgReqInfo * cfgReqInfo));
/** @brief Configuration Confirm from MAC to RRC. */
typedef S16 (*CrgCfgCfm) ARGS((
Pst* pst,
SuId suId,
CrgCfgTransId transId,
uint8_t status));
/** @brief Request from RRC to MAC to bind the interface SAPs. */
S16 RgUiCrgBndReq ARGS((
Pst* pst,
SuId suId,
SpId spId
));
/** @brief Confirmation from MAC to RRC for the bind/unbind
* request for the interface SAPs. */
S16 RgUiCrgBndCfm ARGS((
Pst* pst,
SuId suId,
uint8_t status
));
/** @brief Request from RRC to MAC to Unbind the interface SAPs. */
S16 RgUiCrgUbndReq ARGS((
Pst* pst,
SpId spId,
Reason reason
));
/** @brief Configuration Request from RRC to MAC for
* configuring Cell/Ue/Lch. */
S16 RgUiCrgCfgReq ARGS((
Pst* pst,
SpId spId,
CrgCfgTransId transId,
CrgCfgReqInfo * cfgReqInfo
));
/** @brief Configuration Confirm from MAC to RRC. */
S16 RgUiCrgCfgCfm ARGS((
Pst* pst,
SuId suId,
CrgCfgTransId transId,
uint8_t status
));
#ifdef NH
/** @brief Request from RRC to MAC to bind the interface SAPs. */
S16 NhLiCrgBndReq ARGS((
Pst* pst,
SuId suId,
SpId spId
));
/** @brief Confirmation from MAC to RRC for the bind/unbind
* request for the interface SAPs. */
S16 NhLiCrgBndCfm ARGS((
Pst* pst,
SuId suId,
uint8_t status
));
/** @brief Request from RRC to MAC to Unbind the interface SAPs. */
S16 NhLiCrgUbndReq ARGS((
Pst* pst,
SpId spId,
Reason reason
));
/** @brief Configuration Request from RRC to MAC for
* configuring Cell/Ue/Lch. */
S16 NhLiCrgCfgReq ARGS((
Pst* pst,
SpId spId,
CrgCfgTransId transId,
CrgCfgReqInfo * cfgReqInfo
));
/** @brief Configuration Confirm from MAC to RRC. */
S16 NhLiCrgCfgCfm ARGS((
Pst* pst,
SuId suId,
CrgCfgTransId transId,
uint8_t status
));
#endif
#ifdef LCCRG
/** @brief Request from RRC to MAC to bind the interface SAPs. */
S16 cmPkCrgBndReq ARGS((
Pst* pst,
SuId suId,
SpId spId
));
/** @brief Request from RRC to MAC to bind the interface SAPs. */
S16 cmUnpkCrgBndReq ARGS((
CrgBndReq func,
Pst* pst,
Buffer *mBuf
));
/** @brief Confirmation from MAC to RRC for the bind/unbind
* request for the interface SAPs. */
S16 cmPkCrgBndCfm ARGS((
Pst* pst,
SuId suId,
uint8_t status
));
/** @brief Confirmation from MAC to RRC for the bind/unbind
* request for the interface SAPs. */
S16 cmUnpkCrgBndCfm ARGS((
CrgBndCfm func,
Pst* pst,
Buffer *mBuf
));
/** @brief Request from RRC to MAC to unbind the interface SAPs. */
S16 cmPkCrgUbndReq ARGS((
Pst* pst,
SpId spId,
Reason reason
));
/** @brief Request from RRC to MAC to unbind the interface SAPs. */
S16 cmUnpkCrgUbndReq ARGS((
CrgUbndReq func,
Pst* pst,
Buffer *mBuf
));
/** @brief Configuration Request from RRC to MAC for
* configuring Cell/Ue/Lch. */
S16 cmPkCrgCfgReq ARGS((
Pst* pst,
SpId spId,
CrgCfgTransId transId,
CrgCfgReqInfo * cfgReqInfo
));
/** @brief Configuration Request from RRC to MAC for
* configuring Cell/Ue/Lch. */
S16 cmUnpkCrgCfgReq ARGS((
CrgCfgReq func,
Pst* pst,
Buffer *mBuf
));
/** @brief Configuration Confirm from MAC to RRC. */
S16 cmPkCrgCfgCfm ARGS((
Pst* pst,
SuId suId,
CrgCfgTransId transId,
uint8_t status
));
/** @brief Configuration Confirm from MAC to RRC. */
S16 cmUnpkCrgCfgCfm ARGS((
CrgCfgCfm func,
Pst* pst,
Buffer *mBuf
));
S16 cmPkCrgCfgTransId ARGS((
CrgCfgTransId *param,
Buffer *mBuf
));
S16 cmUnpkCrgCfgTransId ARGS((
CrgCfgTransId *param,
Buffer *mBuf
));
S16 cmPkCrgBwCfg ARGS((
CrgBwCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgBwCfg ARGS((
CrgBwCfg *param,
Buffer *mBuf
));
S16 cmPkCrgRachCfg ARGS((
CrgRachCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgRachCfg ARGS((
CrgRachCfg *param,
Buffer *mBuf
));
S16 cmPkCrgCellCfg ARGS((
CrgCellCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgCellCfg ARGS((
CrgCellCfg *param,
Buffer *mBuf
));
S16 cmPkCrgUeUlHqCfg ARGS((
CrgUeUlHqCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgUeUlHqCfg ARGS((
CrgUeUlHqCfg *param,
Buffer *mBuf
));
S16 cmPkCrgUeCfg ARGS((
CrgUeCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgUeCfg ARGS((
CrgUeCfg *param,
Buffer *mBuf
));
#ifdef LTE_ADV
S16 cmPkCrgUeSecCellInfo ARGS((
CrgUeSecCellInfo *param,
Buffer *mBuf
));
S16 cmUnpkCrgUeSecCellInfo ARGS((
CrgUeSecCellInfo *param,
Buffer *mBuf
));
#endif /* LTE_ADV */
S16 cmPkCrgDlLchCfg ARGS((
CrgDlLchCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgDlLchCfg ARGS((
CrgDlLchCfg *param,
Buffer *mBuf
));
S16 cmPkCrgUlLchCfg ARGS((
CrgUlLchCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgUlLchCfg ARGS((
CrgUlLchCfg *param,
Buffer *mBuf
));
S16 cmPkCrgLchCfg ARGS((
CrgLchCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgLchCfg ARGS((
CrgLchCfg *param,
Buffer *mBuf
));
S16 cmPkCrgCfg ARGS((
CrgCfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgCfg ARGS((
CrgCfg *param,
Buffer *mBuf
));
S16 cmPkCrgActvTime ARGS((
CrgActvTime *param,
Buffer *mBuf
));
S16 cmUnpkCrgActvTime ARGS((
CrgActvTime *param,
Buffer *mBuf
));
S16 cmPkCrgCellRecfg ARGS((
CrgCellRecfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgCellRecfg ARGS((
CrgCellRecfg *param,
Buffer *mBuf
));
S16 cmPkCrgUeRecfg ARGS((
CrgUeRecfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgUeRecfg ARGS((
CrgUeRecfg *param,
Buffer *mBuf
));
S16 cmPkCrgLchRecfg ARGS((
CrgLchRecfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgLchRecfg ARGS((
CrgLchRecfg *param,
Buffer *mBuf
));
S16 cmPkCrgRecfg ARGS((
CrgRecfg *param,
Buffer *mBuf
));
S16 cmUnpkCrgRecfg ARGS((
CrgRecfg *param,
Buffer *mBuf
));
S16 cmPkCrgDel ARGS((
CrgDel *param,
Buffer *mBuf
));
S16 cmUnpkCrgDel ARGS((
CrgDel *param,
Buffer *mBuf
));
S16 cmPkCrgRst ARGS((
CrgRst *param,
Buffer *mBuf
));
S16 cmUnpkCrgRst ARGS((
CrgRst *param,
Buffer *mBuf
));
S16 cmPkCrgCfgReqInfo ARGS((
CrgCfgReqInfo *param,
Buffer *mBuf
));
S16 cmUnpkCrgCfgReqInfo ARGS((
CrgCfgReqInfo *param,
Buffer *mBuf
));
#endif
#ifdef DM
/** @brief Request from RRC to MAC to bind the interface SAPs. */
S16 DmUiCrgBndReq ARGS((
Pst* pst,
SuId suId,
SpId spId
));
/** @brief Confirmation from MAC to RRC for the bind/unbind
* request for the interface SAPs. */
S16 DmUiCrgBndCfm ARGS((
Pst* pst,
SuId suId,
uint8_t status
));
/** @brief Request from RRC to MAC to unbind the interface SAPs. */
S16 DmUiCrgUbndReq ARGS((
Pst* pst,
SpId spId,
Reason reason
));
/** @brief Configuration Request from RRC to MAC for
* configuring Cell/Ue/Lch. */
S16 DmUiCrgCfgReq ARGS((
Pst* pst,
SpId spId,
CrgCfgTransId transId,
CrgCfgReqInfo * cfgReqInfo
));
/** @brief Configuration Confirm from MAC to RRC. */
S16 DmUiCrgCfgCfm ARGS((
Pst* pst,
SuId suId,
CrgCfgTransId transId,
uint8_t status
));
#endif
#ifdef __cplusplus
}
#endif
#endif /* __CRG_X__ */
/**********************************************************************
End of file
**********************************************************************/