typedef struct rlcUlUeCb RlcUlUeCb;
-/** @defgroup um_uplink UM Uplink Module
+/**
+ * @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; /*!<Um Header */
+}RlcUmSeg;
/**
* @brief Structure to hold a UM PDU
*/
typedef struct rlcUmRecBuf
{
- Buffer *pdu; /**< Buffer holding the UM PDU */
- RlcUmHdr umHdr; /**< UM PDU Header Information */
- MsgLen pduSz; /**< PDU Size */
+ RlcSn sn; /*!< Sequence Number */
+ CmLList lnk; /*!< Link to the receive buffer list */
+ Bool allSegRcvd; /*!< Flag to check whether all seg are received */
+ Bool noMissingSeg; /*!< Flag to check all the bytes are received before the last byte of segment */
+ CmLListCp segLst; /*!< PDU Segments list */
+ uint16_t expSo; /*!< Next expected seg offset */
+ Bool allRcvd; /*!< All bytes received or not */
+ RlcUmSeg *expByteSeg; /*!< Next expected byte segment */
+ Buffer *pdu; /**< Buffer holding the UM PDU */
+ RlcUmHdr umHdr; /**< UM PDU Header Information */
+ MsgLen pduSz; /**< PDU Size */
}RlcUmRecBuf;
/**
*/
typedef struct rlcUmUl
{
- U8 snLen; /**< Sequence number length */
- U8 reOrdTmrInt; /**< Timer Interval */
- RlcUmRecBuf **recBuf; /**< Reception buffer */
+ uint8_t snLen; /**< Sequence number length */
+ uint8_t reAsmblTmrInt; /**< Timer Interval */
+ CmLListCp *recBufLst; /**!<Reception Buffer List */
RlcSn umWinSz; /**< UM window size */
- U16 modBitMask; /**< Bitmask for modulus to wrap around variables */
+ uint16_t modBitMask; /**< Bitmask for modulus to wrap around variables */
RlcSn sn; /**< Sequence number */
RlcSn vrUr; /**< VR(UR) - Receive state variable */
RlcSn vrUh; /**< VR(UH) - Highest received state variable */
RlcSn vrUx; /**< VR(UX) - Reordering state variable */
- CmTimer reOrdTmr; /**< Reordering Timer */
- Buffer *partialSdu; /**< Partial SDU - Remains till the complete SDU
- is received */
+ CmTimer reAsmblTmr; /**< Reordering Timer */
+ Buffer *assembleSdu; /**< Assemble Sdu - Remains till the complete SDU is received */
+ uint16_t expSo; /*!< Expected SO for reassembly */
+ RlcSn expSn; /*!< Expected Sn */
}RlcUmUl;
/*@}*/
CmLList lstEnt; /**< List entry for PDU segment */
Buffer *seg; /**< PDU segment */
MsgLen segSz; /**< Buffer Size */
- U16 soEnd; /**< Segment Offset End */
- RlcAmHdr amHdr; /**< AM header */
+ uint16_t soEnd; /**< Segment Offset End */
+ RlcAmHdr amHdr; /**< AM header */
}RlcSeg;
/*@}*/
CmLList lnk; /**< Link to the receive buffer list */
Buffer *pdu; /**< PDU buffer */
MsgLen pduSz; /**< Buffer Size */
- RlcAmHdr amHdr; /**< AM header Info */
+ RlcAmHdr amHdr; /**< AM header Info */
CmLListCp segLst; /**< PDU Segments list */
- RlcSeg *expByteSeg; /**< Next expected byte segment */
- U16 expSo; /**< Next expected seg offset */
+ RlcSeg *expByteSeg; /**< Next expected byte segment */
+ uint16_t expSo; /**< Next expected seg offset */
Bool allRcvd; /**< All bytes received or not */
Bool isDelvUpperLayer; /**< Is it sent to upper layer */
}RlcAmRecBuf;
Bool staTrg; /**< Whether status trigger occured */
Buffer *partialSdu; /**< Partially received SDU */
RlcSn expSn; /**< Expected SN for reassembly */
- U16 expSo; /**< Expected SO for reassembly */
+ uint16_t expSo; /**< Expected SO for reassembly */
CmTimer staProhTmr; /**< T_status_prohibit Timer */
- U16 staProhTmrInt; /**< Timer Interval */
+ uint16_t staProhTmrInt; /**< Timer Interval */
CmTimer reOrdTmr; /**< T_reordering Timer */
- U8 reOrdTmrInt; /**< Timer Interval */
+ uint8_t reOrdTmrInt; /**< Timer Interval */
Bool gatherStaPduInfo; /**< Gather STATUS PDU creation info*/
Bool isOutOfSeq; /**< To identify whether packets are Out-Of-Seq or not */
- U8 snLen; /*!< Sequence number length:12 bit or 18 bit : 5GNR RLC */
- U32 snModMask; /*!< (2 Pwr SnLen - 1): 5GNR RLC */
+ uint8_t snLen; /*!< Sequence number length:12 bit or 18 bit : 5GNR RLC */
+ uint32_t snModMask; /*!< (2 Pwr SnLen - 1): 5GNR RLC */
}RlcAmUl;
/*@}*/
#ifdef LTE_L2_MEAS
RlcL2MeasRbCb rbL2Cb; /**< RB measurement L2 Cb */
RlcUlUeCb *ueCb; /*!< Pointer to UeCb */
- U8 qci; /**< qci of the RB */
+ uint8_t qci; /**< qci of the RB */
RlcL2MeasIpThruput l2MeasIpThruput; /**< Holds related parameter for
DL/Ul ip throughput>*/
#endif /* LTE_L2_MEAS */
CmLteRlcId rlcId; /**< RLC Identifier */
RlcLchInfo lch; /**< Logical Channel Info */
CmLteRlcMode mode; /**< Entity Mode */
- U8 dir; /**< Direction for UL/DL */
+ 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 */
- U32 transId; /**< Transaction Id for RLC */
+ uint32_t transId; /**< Transaction Id for RLC */
union
{
RlcUmUl umUl; /**< UM mode Ul elements */
RlcUlLch lCh[RLC_MAX_LCH_PER_UE]; /**< Logical channels of an UE*/
/* kw005.201 added support for L2 Measurement */
#ifdef LTE_L2_MEAS
- U32 firstPacketTTI; /*!< is first packet of the burst */
- U16 numActRb[LKW_MAX_QCI]; /**< number of RBs Active */
+ uint32_t firstPacketTTI; /*!< is first packet of the burst */
+ uint16_t numActRb[LKW_MAX_QCI]; /**< number of RBs Active */
Bool isUlBurstActive; /*!<Has the Burst started for UL IP Thrpt meas */
#endif /* LTE_L2_MEAS */
};
{
CmHashListEnt transHlEnt; /**< List Entry of
Transaction*/
- U32 transId; /**< Locally generated Transaction Id */
- U32 uprLyrTransId; /**< Transaction Id generated by upper layer.
+ uint32_t transId; /**< Locally generated Transaction Id */
+ uint32_t uprLyrTransId; /**< Transaction Id generated by upper layer.
This is used while sending confirm to the User Layer */
CmLteCellId cellId; /**< Cell Id */
CmLteRnti ueId; /**< Ue Id */
RlcUlEntTmpData cfgEntData[CKW_MAX_ENT_CFG]; /**< Entity Data */
} RlcUlCfgTmpData;
/****************************************************************************
- * EXTERN Declarations
+ * Declarations
***************************************************************************/
/****************************************************************************
* Configuration Functions
Void rlcDbmDelAllUlRb ARGS ((RlcCb *gCb,
RlcUlRbCb **rbCbLst,
- U8 numRbCb));
+ uint8_t numRbCb));
S16 rlcDbmAddUlTransaction ARGS((RlcCb *gCb, RlcUlCfgTmpData *cfg));
S16 rlcDbmFindUlTransaction ARGS((RlcCb *gCb,
- U32 transId,
+ uint32_t transId,
RlcUlCfgTmpData **cfg));
S16 rlcDbmDelUlTransaction ARGS((RlcCb *gCb, RlcUlCfgTmpData *cfg));
Void rlcUmmProcessPdus ARGS((RlcCb *gCb,
RlcUlRbCb *rbCb,
KwPduInfo *pduInfo,
- U32 ttiCnt));
+ uint32_t ttiCnt));
#else
Void rlcUmmProcessPdus ARGS ((RlcCb *gCb,
RlcUlRbCb *rbCb,
CmLteRlcId *rlcId,
RlcUlRbCb *rbCb));
-Void rlcUmmReOrdTmrExp ARGS((RlcCb *gCb, RlcUlRbCb *rbCb));
+Void rlcUmmReAsmblTmrExp ARGS((RlcCb *gCb, RlcUlRbCb *rbCb));
Void rlcUmmFreeUlRbCb ARGS ((RlcCb *gCb, RlcUlRbCb *rbCb));
Void rlcAmmProcessPdus ARGS((RlcCb *gCb,
RlcUlRbCb *rbCb,
KwPduInfo *pduInfo,
- U32 ttiCnt));
+ uint32_t ttiCnt));
#else
Void rlcAmmProcessPdus ARGS((RlcCb *gCb,
RlcUlRbCb *rbCb,
/****************************************************************************
* Utility Functions
***************************************************************************/
+
+void rlcUtlStoreUmRecBuf ARGS ((CmLListCp *recBufLst,
+ RlcUmRecBuf *recBuf,
+ RlcSn sn
+ ));
+RlcUmRecBuf* rlcUtlGetUmRecBuf ARGS ((CmLListCp *recBufLst,
+ RlcSn sn
+ ));
+void rlcUtlDelUmRecBuf(RlcCb *gCb, CmLListCp *recBufLst, RlcUmRecBuf *recBuf);
+
Void rlcUtlStoreRecBuf ARGS ((CmLListCp *recBufLst,
RlcAmRecBuf *recBuf,
RlcSn sn
Void rlcUtlCalUlIpThrPutIncTTI ARGS ((RlcCb *gCb,
RlcUlRbCb *rbCb,
- U32 ttiCnt));
+ uint32_t ttiCnt));
Void rlcUtlCalUlIpThrPut ARGS((RlcCb *gCb,
RlcUlRbCb *rbCb,
Buffer *pdu,
- U32 ttiCnt));
+ uint32_t ttiCnt));
S16 rlcUtlSndUlL2MeasCfm ARGS ((RlcCb *gCb, RlcL2MeasEvtCb *measEvtCb));
Void rlcUtlResetUlL2MeasInRlcRb ARGS((RlcCb *gCb,
RlcL2MeasCb *measCb,
- U8 measType));
+ uint8_t measType));
S16 rlcUtlValidateIpThL2Meas ARGS ((RlcL2MeasReqEvt *measReqEvt,
RlcL2MeasCfmEvt *measCfmEvt));