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
{
- uint8_t snLen; /**< Sequence number length */
- uint8_t 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 */
- uint16_t 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;
/*@}*/
uint16_t expSo; /**< Next expected seg offset */
Bool allRcvd; /**< All bytes received or not */
Bool isDelvUpperLayer; /**< Is it sent to upper layer */
+ Bool noMissingSeg; /*!< Flag to check all the bytes are received before the last byte of segment */
}RlcAmRecBuf;
/** @addtogroup ammode */
* - expSo : The expected SO for reassembly
* - staProhTmr : The Status Probihit Timer
* - staProhTmrInt : Status Prohibit Timer interval (in ??)
- * - reOrdTmr : The Reordering Timer
- * - reOrdTmrInt : Re-ordering timer interval
+ * - reAsmblTmr : The Reordering Timer
+ * - reAsmblTmrInt : Re-ordering timer interval
* - gatherStaPduInfo : Whether to gather information required to create
* the STATUS PDU
*
uint16_t expSo; /**< Expected SO for reassembly */
CmTimer staProhTmr; /**< T_status_prohibit Timer */
uint16_t staProhTmrInt; /**< Timer Interval */
- CmTimer reOrdTmr; /**< T_reordering Timer */
- uint8_t reOrdTmrInt; /**< Timer Interval */
+ CmTimer reAsmblTmr; /**< T_reordering Timer */
+ uint8_t reAsmblTmrInt; /**< Timer Interval */
Bool gatherStaPduInfo; /**< Gather STATUS PDU creation info*/
Bool isOutOfSeq; /**< To identify whether packets are Out-Of-Seq or not */
uint8_t snLen; /*!< Sequence number length:12 bit or 18 bit : 5GNR RLC */
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));
KwPduInfo *pduInfo));
#endif
-Void rlcAmmReOrdTmrExp ARGS((RlcCb *gCb, RlcUlRbCb *rbCb));
+Void rlcAmmReAsmblTmrExp ARGS((RlcCb *gCb, RlcUlRbCb *rbCb));
Void rlcAmmStaProTmrExp 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