/******************************************************************************* ################################################################################ # 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: NR RLC file for uplink and non real time tasks Type: C include file Desc: This file contains helper macros for RLC uplink and non real time tasks File: rlc_ul.h **********************************************************************/ /** * @file rlc_ul.h * @brief RLC uplink helper macros */ #ifndef __RLC_ULH__ #define __RLC_ULH__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @def RLC_MEAS_IS_UL_IP_MEAS_ON_FOR_RB * * This macro is used to check if UL IP throughput measurement is ON * or off for the passed rb * * Returns TRUE(non-zero) if measurement is ON else FALSE (zero) * * @param[in] _gCb RLC UL Cb * @param[in] _rbCb RLC uplink control block * */ #define RLC_MEAS_IS_UL_IP_MEAS_ON_FOR_RB(_gCb, _rbCb) \ ((_rbCb->rlcId.rbType == CM_LTE_DRB) && \ (_gCb->u.ulCb->rlcL2Cb.measOn[_rbCb->qci] & LKW_L2MEAS_UL_IP) && \ (_rbCb->rbL2Cb.measOn & LKW_L2MEAS_UL_IP)) typedef struct rlcUlUeCb RlcUlUeCb; /** * @brief Structure to hold a RLC UM PDU segment * * @details * - lstEnt : This is required for the linked list in which the segments * are stored * - seg : Holds the segment data * - segSz : The length of the segment in bytes * - soEnd : SOEnd * - umHdr : The UM Header for the PDU segment * */ typedef struct rlcUmSeg { CmLList lstEnt; /*!< List entry for PDU segment */ Buffer *seg; /*!< PDU segment */ MsgLen segSz; /*!< Buffer Size */ uint16_t soEnd; /*!< Segment Offset End */ RlcUmHdr umHdr; /*!*/ #endif /* LTE_L2_MEAS */ CmLteRlcId rlcId; /**< RLC Identifier */ RlcLchInfo lch; /**< Logical Channel Info */ Snssai *snssai; /**< Snssai Info */ CmLteRlcMode mode; /**< Entity Mode */ uint8_t dir; /**< Direction for UL/DL */ Inst inst; /**< Tapa where Rb created Instance id */ SpId k1wuSapId; /**< KWU sap Id, to get the KwuSapCb */ SpId udxSapId; /**< KWU sap Id, to get the KwuSapCb */ uint32_t transId; /**< Transaction Id for RLC */ union { RlcUmUl umUl; /**< UM mode Ul elements */ RlcAmUl amUl; /**< AM mode uplink elements */ }m; /**< RLC mode specific Info */ }RlcUlRbCb; /** * @brief Structure to hold mapping between logical channel and Radio Bearer * * @details * - ulRbCb : Pointer to the uplink Radio Bearer */ typedef struct rlcUlLch { RlcUlRbCb *ulRbCb; /**< Pointer to Uplink RbCb */ }RlcUlLch; /** * @brief Structure to hold ue delete information * * @details * - pst : Pst * - ueDelTmr : Ue delete timer */ typedef struct rlcUeDeleteInfo { Pst pst; /*Pst */ CmTimer ueDelTmr; /*Ue delete timer*/ }RlcUeDeleteInfo; /** * @brief Structure to hold uplink information about the Cells * * @details * - cellHlEnt : Information about cells are stored in a hash table. This is * required for that. * - cellId : Identity of the cell * - rbCb : Radio Bearers in the cell * - lCh : Logical Channels in the cell * - selfPstUl : Pst structure for sending messages to self */ typedef struct rlcUlCellCb { CmHashListEnt cellHlEnt; /**< Hash list entry for CellCb */ CmLteCellId cellId; /**< Cell Id */ RlcUlRbCb *rbCb[RLC_MAX_RB_PER_CELL]; /**< RbCbs within a Cell */ RlcUlLch lCh[RLC_MAX_LCH_PER_CELL]; /**< Logical channels in a cell */ Pst selfPstUl; }RlcUlCellCb; /** * @brief Structure to hold uplink information about the UEs * * @details * - ueHlEnt : Information about cells are stored in a hash table. This is * required for that. * - key : Key to store/find the UE in the hashtable * - srbCb : Signaling Radio Bearers configured for the UE * - drbCb : Data Radio Bearers configured for the UE * - lCh : Logical Channels in the UE */ struct rlcUlUeCb { CmHashListEnt ueHlEnt; /**< Hash list entry for UeCb */ CmLteRnti ueId; /*!< UE Id */ CmLteCellId cellId; /*!< Cell Id */ RlcUlRbCb *srbCb[RLC_MAX_SRB_PER_UE]; /**< SRB RbCbs within an UE */ RlcUlRbCb *drbCb[RLC_MAX_DRB_PER_UE]; /**< DRB RbCbs within an UE */ RlcUlLch lCh[RLC_MAX_LCH_PER_UE]; /**< Logical channels of an UE*/ /* kw005.201 added support for L2 Measurement */ #ifdef LTE_L2_MEAS uint32_t firstPacketTTI; /*!< is first packet of the burst */ uint16_t numActRb[LKW_MAX_QCI]; /**< number of RBs Active */ Bool isUlBurstActive; /*!