1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /********************************************************************20**
25 Desc: This file contains all the data structures and
26 prototypes for LTE RLC.
30 *********************************************************************21*/
33 * @brief RLC downlink structures, prototypes
41 #endif /* __cplusplus */
44 #include "pj_tenb_stats.x"
46 #include "l2_tenb_stats.x"
49 typedef struct kwDlUeCb KwDlUeCb;
52 * @brief Structure to hold the SN of the PDU onto which a SDU is mapped
55 * - sn : Sequence number of the AM pdu
57 typedef struct kwPduMap
59 KwSn sn; /*!< Mapped PDU's SN */
63 * @brief Structure to hold information regarding a SDU received from PDCP
66 * - lstEnt : Used for linking ( we have linked list of SDUs) which forms
68 * - mBuf : Pointer to the SDU data
69 * - sduSz : Size of the mBuf above
70 * - actSz : Length of the SDU when received from PDCP, this might be
71 * different from sduSz, in case when the SDU is split
72 * - mode : Depending on the type, holds AM, UM or TM mode information
74 * - sfn : System Frame number for BCCH/PCCH
75 * - subframe : Subframe number
76 * - rnti : RNTI for CCCH
78 * - sduId : Unique identity for the SDU
79 * - isSegmented : Whether this SDU is segmented into multiple PDUs
81 * - sduId : Unique identity for the SDU
82 * - rcvdSz : Length of this SDU which is received by the peer
83 * - isSegmented : Whether this SDU is segmented into multiple PDUs
87 CmLList lstEnt; /*!< List entry for SDU */
88 Buffer *mBuf; /*!< SDU buffer */
89 MsgLen sduSz; /*!< Buffer Size */
90 MsgLen actSz; /*!< Actual buffer Size */
91 /* kw005.201 added support for L2 Measurement */
93 KwSduSnMap *snMap; /*!< Sdu and the list of SN it maps to */
94 #endif /* LTE_L2_MEAS */
100 U16 sfn; /*!< Sub frame number for BCCH/PCCH */
101 U8 subframe; /*!< Subframe number */
102 CmLteRnti rnti; /*!< RNTI for CCCH */
104 U8 emtcDiReason; /*!< DI reason */
105 U8 pnb; /*!<narrow band on which Ue performs Paging*/
107 }tm; /*!< SDU for TM mode */
111 U32 sduId; /*!< SDU Identifier */
112 Bool isSegmented; /*!< Flag to indicate if the SDU is segmented */
113 }um; /*!< SDU for UM mode */
117 U32 sduId; /*!< SDU Identifier */
118 MsgLen rcvdSz; /*!< Recvd SDU Size from peer */
119 Bool isSegmented; /*!< Is SDU segmented */
120 KwSn sn; /*!< SN assigned to this SDU*/
121 }am; /*!< SDU for AM mode */
122 }mode; /*!< RLC mode specific SDUs */
123 /* Discard new changes starts */
124 Ticks arrTime; /*!< Arrival time of the PDCP PDU at RLC */
125 /* Discard new changes ends */
129 /** @addtogroup tmmode */
133 * @brief Structure to hold Transparent Mode information for a RB
136 * - sduQ : Queue of SDUs
140 CmLListCp sduQ; /*!< SDU queue for TM */
145 * @brief Structure to hold buffer occupancy report sent to MAC
148 * - bo : Size of the buffers at RLC
149 * - estHdrSz : Size for all the headers as estimated by RLC
150 * - staPduPrst : Whether RLC wants to send a STATUS PDU or not
152 typedef struct kwBoRep
154 S32 bo; /*!< Buffer occupancy */
155 U16 estHdrSz; /*!< Estimated header size for the bo */
156 Bool staPduPrsnt; /*!< Indicate control bo present or not */
157 U32 staPduBo; /*!< Indicate bo for control PDU */
158 U32 oldestSduArrTime;
162 * @brief Structure to hold information sent to MAC in a Data Request
165 * - pduSz : Sum total of sizes of all the PDUs being sent
166 * - pduInfo : Information about each PDU
167 * - boRep : Current buffer occupancy report
169 typedef struct kwDatReq
171 MsgLen pduSz; /*!< PDU(s) size indicated by MAC */
172 KwPduInfo pduInfo; /*!< PDU Information for lChs within UE */
173 KwBoRep boRep; /*!< BO report */
174 /* kw005.201 added support for L2 Measurement */
176 KwLchMapInfo lchMapInfo; /*!< Logical channel mapping info */
178 #endif /* LTE_L2_MEAS */
181 /** @defgroup ummode UM Module Info
184 /** @addtogroup ummode */
187 * @brief Structure to hold Unacknowledged mode downlink information for a RB
190 * - sduQ : Control point for the queue of SDUs
191 * - snLen : length of the squence number. Here it is stored
192 * as 1 for 5 bit sequence numbers and
193 * 2 for 10 bit sequence numbers
194 * - bo : Current buffer occupancy for this RB
195 * - estHdrSz : Estimated size of headers required to send
196 * all the SDUs in the queue
198 * - modBitMask : Bitmask used to do modulus operations to wrap around
199 * state variables, value is 0x1f or
200 * 0x3ff for 5-bit and 10-bit sequence numbers respectively
201 * - numLi : Number of length indicators to be sent in the next pdu
202 * - li : Values of the lenght indicators
204 typedef struct kwUmDl
206 CmLListCp sduQ; /*!< SDU queue for UM */
207 U8 snLen; /*!< Sequence number length */
208 S32 bo; /*!< Buffer occupancy */
209 S32 estHdrSz; /*!< Estimated header size for BO */
210 KwSn vtUs; /*!< VT(US) */
211 U16 modBitMask; /*!< Bitmask for modulus to wrap around vars*/
212 U16 numLi; /*!< Number of LIs */
213 U16 li[KW_MAX_LI]; /*!< Length Indicator array */
217 * @brief Structure to hold information about which SDUs a PDU/segment carries
220 * - sduSz : Size of the SDU or part of it
221 * - sdu : Pointer to the SDU
223 typedef struct kwSduMap
225 /*MsgLen actSz;*/ /*!< SDU Size */
226 MsgLen sduSz; /*!< SDU Size */
227 /*Bool isSegmented;*/ /*!< Flag to indicate if the SDU is segmented */
228 KwSdu* sdu; /*!< Pointer to the associated SDU */
232 * @brief Structure to hold info about a PDU/segment to be re-transmitted
235 * - lstEnt : Control point to link the re-transmit (the
236 * re-transmit PDUs ,segments are stored as a
238 * - seg : Pointer to the data
239 * - segSz : Size of the PDU/segment including the header
240 * - hdrSz : Size of the AM header for this in bytes
241 * - amHdr : The header for this PDU/segment
243 * - retxCnt : Number of times this has been re-transmitted
244 * - yetToConst : Whether the PDU/segment has been constructed (headers
246 * - pendingReTrans : TRUE if this node is to be re-transmitted else FALSE
247 * - numSdu : Number of SDUs this PDU/segment carries
248 * - sduMap : Infomation about the SDUs this node carries
250 typedef struct kwRetx
252 CmLList lstEnt; /*!< List entry for Retransmission PDU */
253 Buffer *seg; /*!< Buffer of PDU or Segment */
254 MsgLen segSz; /*!< Segment Size */
255 MsgLen hdrSz; /*!< Header size for the segment */
256 KwAmHdr amHdr; /*!< AM header Info */
257 U16 soEnd; /*!< Segment Offset End */
258 KwSn retxCnt; /*!< Retransmission count */
259 Bool yetToConst; /*!< Yet to construct seg flag */
260 Bool pendingReTrans; /*!< Is node waiting for re-transmission */
261 KwSduMap sduMap; /*!< SDU mapped with PDU */
265 * @brief Structure to hold a RLC AM PDU Information
268 * - lstEnt : This is required for the linked list in which pdu is stored
269 * - pdu : Holds the pdu
270 * - pduSz : The length of the segment in bytes
271 * - hdrSz : Header size of this PDU
272 * - amHdr : The AM Header for the PDU segment
273 * - KwSduMap :SDU map info for this PDU
276 typedef struct kwDlPduInfo
278 CmLList lstEnt; /*!< List entry for PDU list */
279 Buffer *pdu; /*!< Buffer of PDU */
280 MsgLen pduSz; /*!< PDU Size */
281 MsgLen hdrSz; /*!< Header size for the segment */
282 KwAmHdr amHdr; /*!< AM header Info */
283 KwSduMap sduMap; /*!< SDU info for this PDU */
288 * @brief Structure to hold info about a PDU that has been transmitted
291 * - lnk : Link to the TX buffer list
292 * - sn : SN of this RLC SDU
293 * - rlsLnk : Link to store on release list, used for
294 * - pduLst : It contains all PDUs of a particular SN
298 CmLList lnk; /**< Link to the TX buffer list*/
299 KwSn sn; /*!< SN of this RLC SDU */
300 CmLList rlsLnk; /*!< Lnk to store on release lst */
301 CmLListCp pduLst; /*!< It contains all PDUs of a particular SN*/
304 /** @addtogroup ammode */
308 * @brief Structure to hold Acknowledged Mode Downlink information for a RB
312 * - nxtTx : Pointer to the next SDU to be transmitted
313 * - pollRetxTmr : Poll re-transmission timer
314 * - pollRetxTmrInt : Timer interval (?? secs) of poll re-transmission timer
315 * - pollPdu : Number of PDUs to send before sending a poll bit
316 * - pollByte : Number of bytes to send before sending a poll bit
317 * - maxRetx : Maximum number of re-transmissions to be done for a
319 * - cntrlBo : Size of the STATUS PDU if it is to be sent, else 0
320 * - retxBo : Bo of the PDUs/segments to be re-transmitted
321 * - estHdrSz : Extimated header size of all the SDUs in the queue
322 * - bo : Bo of the PDUs in the transmission buffer
323 * - txBufLst : Transmission buffer lists. It's contiguous index by sequence
325 * - rextLst : Re-transmission buffer. It is a doubly linked list
326 * - nxtRetx : Next node to be re-transmitted
327 * - txNext : 5GNR - TX_Next - Send state variable,( in LTE VT(S))
328 * - txNextAck : 5GNR - TX_Next_Ack- Acknowledgement state variable
330 * - pduWoPoll : Number of PDUs sent without sending a poll bit
331 * - byteWoPoll : Number of bytes sent without sending a poll bit
332 * - pollSn : The sequence number on which the last poll bit was sent
333 * - mBuf : The encoded STATUS pdu to be sent
334 * - maxReTxReached : Whether maximum number of re-transmissions has been
336 * - pStaPdu : Stores the control pdu (information required to
337 * create the STATUS PDU) passed from AM uplink
339 typedef struct kwAmDl
341 CmLListCp sduQ; /*!< SDU queue */
342 KwSdu *nxtTx; /*!< Next SDU to be transmitted */
343 CmTimer pollRetxTmr; /*!< T_poll_retransmit Timer */
344 U16 pollRetxTmrInt; /*!< Timer Interval */
345 S16 pollPdu; /*!< Poll_PDU */
346 S32 pollByte; /*!< Poll_Byte */
347 U8 maxRetx; /*!< Max_Retx_Threshold */
348 S32 cntrlBo; /*!< BO of control pdu */
349 S32 retxBo; /*!< BO of Retransmission PDUs */
350 U32 estHdrSz; /*!< Estimated header size for the BO */
351 S32 bo; /*!< BO of new PDUs */
353 CmLListCp *txBufLst; /*!< Transmission buffer list of type KwTx */
355 // KwTx *txBuf[1024]; /*!< Transmission buffer */
357 CmLListCp retxLst; /*!< Retransmission PDU list */
358 KwRetx *nxtRetx; /*!< Next node to be retransmitted */
359 KwSn txNext; /*!< 5GNR: TX_Next, in LTE VT(S) */
360 KwSn txNextAck; /*!< 5GNR: TX_Next_Ack, in LTE VT(A)*/
361 S16 pduWoPoll; /*!< PDU without poll bit counter */
362 S32 byteWoPoll; /*!< Byte without poll bit counter */
363 KwSn pollSn; /*!< Poll SN */
364 Buffer *mBuf; /*!< this can be removed later
365 Stores the Control Pdu */
366 Bool maxReTxReached; /*!< Set when the DL MAX Retx exceeded */
367 KwUdxDlStaPdu* pStaPdu; /*!< The Control Pdu passed from UL*/
368 U8 snLen; /*!< Sequence number length:12 bit or 18 bit : 5GNR RLC */
369 U32 snModMask; /*!< (2 Pwr SnLen - 1): 5GNR RLC */
375 * @brief Structure to hold information about a Radio Bearer as required by RLC
378 * - rlcId : RLC identifier, uniquely identifies a Radio Bearer
379 * - lch : Information (type and id) of the logical channel
380 * associated with this Radio Bearer.
381 * - mode : The mode of the Radio Bearer TM or UM or AM
382 * - dir : The direction of the Radio Bearer, downlink or
384 * - inst : Id of RLC instance where this Radio Bearer is present.
385 * Used to find the instance from the Radio Bearer for
386 * memory needs as different instances might have
388 * - kwuSapId : KWU SAP identifier
389 * - udxSapId : UDX SAP idenrifier
390 * - transId : Stores the transaction identifier used to communicate
391 * with MAC, the same value as sent by MAC is passed back
392 * for it to be able to corelate
393 * - reestInProgress: Whether re-establishment is going on for this RB
394 * - m : Mode of the RB (TM/UM/AM)
395 * - tm : Transparent Mode information
396 * - umDl : Unacknowledged Mode downlink information
397 * - amDl : Acknowledged Mode downlink information
398 * - rlsLnk : Link list used to free the RbCb
399 * - cleanupStarted : Whether cleanup of RB is in progress or not
401 typedef struct _kwDlRbCb
403 U8 qci; /*!< qci of the RB */
405 KwDlUeCb *ueCb; /*!< Pointer to UeCb */
406 KwL2MeasRbCb rbL2Cb; /*!< RB measurement L2 Cb */
407 CmLListCp sduSnMapQ; /*!< SDU SN map queue for UM */
409 KwL2MeasIpThruput l2MeasIpThruput; /*!< Holds related parameter for
410 DL/UL ip throughput>*/
413 /* Discard new changes starts */
414 S16 discTmrInt; /*!< The discard time in milli
415 seconds for an PDCP SDU for this RB */
416 /* Discard new changes ends */
417 CmLteRlcId rlcId; /*!< RLC Identifier */
418 KwLchInfo lch; /*!< Logical Channel Info */
419 CmLteRlcMode mode; /*!< Entity Mode */
420 U8 dir; /*!< Direction for UL/DL */
421 Inst inst; /*!< Tapa Instance where rb created */
422 SpId kwuSapId; /*!< KWU sap Id, to get the KwuSapCb */
423 SpId udxSapId; /*!< UDX sap Id, to get the UdxSapCb */
424 U32 transId; /*!< Transaction Id for RLC */
425 Bool reestInProgress; /*!< Is reestablishment in progress */
426 SpId rguSapId; /*!< RGU Instance SAP corresponding to this RB */
429 KwTm tm; /*!< TM mode specific elements */
430 KwUmDl umDl; /*!< UM downlink elements */
431 KwAmDl amDl; /*!< AM downlink elements */
432 }m; /*!< RLC mode specific Info */
433 CmLList rlsLnk; /*!< Link to add to release list */
434 Bool cleanupStarted; /*!< Whether cleanup of RB is in progress or not */
435 U32 lastRprtdBoToMac; /*!< Last Reported BO to MAC Layer */
436 U32 boUnRprtdCnt; /*!< Count to keep track of periodic BO Update */
440 * @brief Structure to hold mapping between logical channel and Radio Bearer
443 * - dlRbCb : Pointer to the downlink Radio Bearer
445 typedef struct kwDlLch
447 KwDlRbCb *dlRbCb; /*!< Pointer to Downlink RbCb */
451 * @brief Structure to hold information about the Cells
454 * - cellHlEnt : Information about cells are stored in a hash table. This is
456 * - cellId : Identity of the cell
457 * - rbCb : Radio Bearers in the cell
458 * - lCh : Logical Channels in the cell
460 typedef struct kwDlCellCb
462 CmHashListEnt cellHlEnt; /*!< Hash list entry for CellCb */
463 CmLteCellId cellId; /*!< Cell Id */
464 KwDlRbCb *rbCb[KW_MAX_RB_PER_CELL]; /*!< RbCbs within a Cell */
465 KwDlLch lCh[KW_MAX_LCH_PER_CELL]; /*!< Array of Logical channels */
469 /** @struct KwContSduLst
470 * Structure contains list of rbId and index to KwOutStngSduLst
472 typedef struct kwContSduLst
474 CmLteLcId lcId; /*!< Holds the lcId of rbCb */
475 U8 numSdus; /*!< Number sdus in sduIdx array */
476 U8 sduIdx[KW_L2MEAS_MAX_OUTSTNGSDU]; /*!< Hold the index to KwOutStngSduLst */
478 typedef struct kwSduInfo
481 Ticks arvlTime; /* stores the the arrival time of each PDCP PDU */
484 typedef struct kwlchInfo
486 CmLteLcId lcId; /*!< Holds the lcId of rbCb */
487 U8 numSdus; /*!< Number sdus belonged to the this LC */
488 KwSduInfo sduInfo[KW_L2MEAS_SDUIDX];
491 /** @struct KwL2MeasTb
492 * Structure containes list of rbId and index to KwOutStngSduLst
494 typedef struct kwL2MeasTb
496 U8 numLcId; /* number of logical channels in this TbCb */
497 KwContSduLst sduInfo[KW_MAX_ACTV_DRB]; /*!< Contained sduLst for
500 KwlchInfo lchInfo[KW_MAX_ACTV_DRB]; /* Holds the LC info details
501 used for DL delay L2 Meas*/
502 U32 txSegSduCnt; /*!< This holds the no.of partially
503 transmitted SDU per TB which can be used for UU loss Meas*/
508 * @brief Structure to hold information about the UEs
511 * - ueHlEnt : Information about cells are stored in a hash table. This is
513 * - key : Key to store/find the UE in the hashtable
514 * - srbCb : Signaling Radio Bearers configured for the UE
515 * - drbCb : Data Radio Bearers configured for the UE
516 * - lCh : Logical Channels in the UE
520 CmHashListEnt ueHlEnt; /*!< Hash list entry for UeCb */
521 CmLteRnti ueId; /*!< UE Id */
522 CmLteCellId cellId; /*!< Cell Id */
523 KwDlRbCb *srbCb[KW_MAX_SRB_PER_UE]; /*!< SRB RbCbs within a UE */
524 KwDlRbCb *drbCb[KW_MAX_DRB_PER_UE]; /*!< DRB RbCbs within a UE */
525 KwDlLch lCh[KW_MAX_LCH_PER_UE]; /*!< Array of Logical channels */
526 /* kw005.201 added support for L2 Measurement */
528 U16 numActRb[LKW_MAX_QCI]; /*!< number of RBs Active */
529 U8 tbIdx; /*!< TBIDx for measTbCb */
530 KwL2MeasTb *l2MeasTbCb[KW_MAX_TB_PER_UE]; /*!< Array of Measurement tbCb */
531 #endif /* LTE_L2_MEAS */
533 TSL2UeStatsCb *tenbStats; /*!< UE Stats Holder */
537 /****************************************************************************
538 * EXTERN Declarations
539 ***************************************************************************/
540 /****************************************************************************
541 * Configuration Functions
542 ***************************************************************************/
543 EXTERN S16 kwCfgAddDlRb ARGS ((KwCb *gCb,
546 CkwEntCfgInfo *entCfg,
547 CkwEntCfgCfmInfo *entCfm));
549 EXTERN S16 kwCfgReCfgDlRb ARGS ((KwCb *gCb,
552 CkwEntCfgInfo *entCfg,
553 CkwEntCfgCfmInfo *entCfm));
555 EXTERN S16 kwCfgDelDlRb ARGS ((KwCb *gCb,
558 CkwEntCfgInfo *entCfg,
559 CkwEntCfgCfmInfo *entCfm));
561 EXTERN S16 kwCfgDelDlUe ARGS ((KwCb *gCb,
564 CkwEntCfgInfo *entCfg,
565 CkwEntCfgCfmInfo *entCfm));
567 EXTERN S16 kwCfgReEstDlRb ARGS ((KwCb *gCb,
571 CkwEntCfgInfo *entCfg,
572 CkwEntCfgCfmInfo *entCfm));
574 EXTERN S16 kwCfgDelDlCell ARGS ((KwCb *gCb,
576 CkwEntCfgInfo *entCfg,
577 CkwEntCfgCfmInfo *entCfm));
579 EXTERN S16 kwCfgDlUeIdChng ARGS ((KwCb *gCb,
581 CkwUeInfo *newUeInfo,
584 /****************************************************************************
585 * DBM module Functions
586 ***************************************************************************/
587 EXTERN S16 kwDbmDlInit ARGS ((KwCb *gCb));
589 EXTERN Void kwDbmDlDeInit ARGS ((KwCb *gCb));
591 EXTERN S16 kwDbmCreateDlUeCb ARGS ((KwCb *gCb,
596 EXTERN S16 kwDbmFetchDlUeCb ARGS ((KwCb *gCb,
601 EXTERN Void kwDbmDelDlUeCb ARGS ((KwCb *gCb,
605 EXTERN Void kwDbmDelAllDlUe ARGS ((KwCb *gCb));
607 EXTERN S16 kwDbmCreateDlCellCb ARGS ((KwCb *gCb,
609 KwDlCellCb **cellCb));
611 EXTERN S16 kwDbmFetchDlCellCb ARGS ((KwCb *gCb,
613 KwDlCellCb **cellCb));
615 EXTERN Void kwDbmDelDlCellCb ARGS ((KwCb *gCb, KwDlCellCb *cellCb));
617 EXTERN Void kwDbmDelAllDlCell ARGS ((KwCb *gCb));
619 EXTERN Void kwDbmFetchDlRbCbByRbId ARGS ((KwCb *gCb,
623 EXTERN Void kwDbmFetchDlRbCbFromLchId ARGS ((KwCb *gCb,
629 EXTERN Void kwDbmDelAllDlRb ARGS ((KwCb *gCb, KwDlRbCb **rbCbLst, U8 numRbCb));
631 EXTERN S16 kwDbmDlShutdown ARGS ((KwCb *gCb));
633 EXTERN Void kwUtlGetCurrTime ARGS((U32 *time));
634 EXTERN PUBLIC Void kwUtlTrigPdbFlowCntrl ARGS((KwCb *gCb, KwDlRbCb *rbCb, U32 pktAdmitCnt ));
636 EXTERN Void kwDbmDelAllDlL2MeasTbFrmUe ARGS ((KwCb *gCb, KwDlUeCb *ueCb));
640 /****************************************************************************
641 * Transparent Mode Functions
642 ***************************************************************************/
643 EXTERN Void kwTmmQSdu ARGS ((KwCb *gCb,
645 KwuDatReqInfo *datReqInfo,
647 EXTERN Void kwTmmSndToLi ARGS ((KwCb *gCb,
650 RguCStaIndInfo *staInd));
652 EXTERN Void kwDlTmmReEstablish ARGS ((KwCb *gCb, KwDlRbCb *rbCb));
654 /****************************************************************************
655 * Unacknowledged Mode Functions
656 ***************************************************************************/
657 EXTERN Void kwUmmQSdu ARGS ((KwCb *gCb,
659 KwuDatReqInfo *datReq,
662 EXTERN Void kwUmmDiscSdu ARGS ((KwCb *gCb, KwDlRbCb *rbCb, U32 sduId));
664 EXTERN Void kwDlUmmReEstablish ARGS ((KwCb *gCb,
669 EXTERN Void kwUmmProcessSdus ARGS ((KwCb *gCb,KwDlRbCb *rbCb,KwDatReq *datReq));
671 EXTERN Void kwUmmFreeDlRbCb ARGS ((KwCb *gCb, KwDlRbCb *rbCb));
673 /****************************************************************************
674 * Acknowledged Mode Functions
675 ***************************************************************************/
677 EXTERN S32 kwAmmCalculateBo ARGS ((KwAmDl *amDl));
679 EXTERN Void kwAmmSendDStaRsp ARGS ((KwCb *gCb, KwDlRbCb *rbCb, KwAmDl *amDl));
681 EXTERN Void kwAmmQSdu ARGS((KwCb *gCb,
684 KwuDatReqInfo *datReq));
686 EXTERN Void kwAmmProcessSdus ARGS((KwCb *gCb,
691 EXTERN Void kwAmmDlReEstablish ARGS((KwCb *gCb,
695 EXTERN Void kwAmmDlHndlStatusPdu ARGS ((KwCb *gCb,
697 KwUdxStaPdu *pStaPdu));
699 EXTERN S16 kwAmmDiscSdu ARGS((KwCb *gCb, KwDlRbCb *rbCb, U32 sduId));
701 EXTERN Void kwAmmPollRetxTmrExp ARGS((KwCb *gCB, KwDlRbCb *rbCb));
703 EXTERN Void kwAmmFreeDlRbCb ARGS ((KwCb *gCb, KwDlRbCb *rbCb));
705 /****************************************************************************
707 ***************************************************************************/
709 EXTERN Void kwUtlStoreTxBuf ARGS ((CmLListCp *txBufLst,
713 EXTERN KwTx* kwUtlGetTxBuf ARGS ((CmLListCp *txBufLst,
716 EXTERN Void kwUtlDelTxBuf ARGS ((CmLListCp *txBufLst,
720 EXTERN Void kwUtlRemovTxBuf ARGS ((CmLListCp *txBufLst,
725 EXTERN S16 kwUtlSndDStaRsp ARGS ((KwCb *gCb,
732 #ifdef LTE_L2_MEAS_RLC
733 EXTERN Void kwUtlEmptySduQ ARGS ((KwCb *gCb, KwDlRbCb *rbCb, CmLListCp *sduQ));
734 #else /* LTE_L2_MEAS */
735 EXTERN Void kwUtlEmptySduQ ARGS ((KwCb *gCb,CmLListCp *sduQ));
736 #endif /* LTE_L2_MEAS */
738 EXTERN Void kwUtlCalcLiForSdu ARGS ((KwCb *gCb,
743 EXTERN S16 kwUtlSndToLi ARGS ((KwCb *gCb, SuId suId, KwDStaIndInfo *staIndInfo));
745 EXTERN Void kwUtlIncrementKwuStsSduTx ARGS((KwKwuSapCb *kwuSap));
747 EXTERN Void kwUtlIncrementGenStsBytesAndPdusSent ARGS((KwGenSts *genSts,
750 EXTERN Void kwUtlFreeDlMemory ARGS ((KwCb *gCb));
752 EXTERN Void kwUtlInitToBeFreed ARGS ((KwCb *gCb, KwDlDataToBeFreed *toBeFreed));
754 EXTERN Void kwUtlInitializeSelfPst ARGS((KwCb *gCb));
756 EXTERN Void kwUtlRaiseDlCleanupEvent ARGS((KwCb *gCb));
758 EXTERN Void kwUtlAddSduToBeFreedQueue ARGS((KwCb *gCb, KwSdu *sdu));
760 EXTERN Void kwUtlAddReTxPduToBeFreedQueue ARGS((KwCb *gCb, KwRetx *retx));
762 EXTERN Void kwUtlAddTxPduToBeFreedQueue ARGS((KwCb *gCb, KwTx *pdu));
765 EXTERN S16 kwUtlL2MeasDlInit ARGS((KwCb *gCb));
768 /****************************************************************************
770 ***************************************************************************/
771 EXTERN Void ResetRLCStats ARGS((Void));
773 EXTERN Void PrintRLCStats ARGS((Void));
775 EXTERN Void DumpRLCDlDebugInformation ARGS((Void));
777 /****************************************************************************
778 * Activation Functions
779 ***************************************************************************/
780 EXTERN S16 kwDlActvInit ARGS ((Ent ent,Inst inst,Region region,Reason reason));
782 EXTERN S16 kwDlActvTsk ARGS ((Pst *pst, Buffer *mBuf));
784 EXTERN Bool kwDlUtlIsReestInProgress ARGS ((KwDlRbCb *rbCb));
786 EXTERN Void kwDlUtlResetReestInProgress ARGS ((KwDlRbCb *rbCb));
788 EXTERN Void kwDlUtlResetReestInProgress ARGS (( KwDlRbCb *rbCb));
790 EXTERN Void kwDlUtlSetReestInProgressForAllRBs ARGS ((KwCb *gCb, KwDlUeCb
792 EXTERN Void kwDlUtlSetReestInProgressForRB ARGS (( KwCb *gCb, KwDlRbCb *rbCb));
795 EXTERN Void kwUtlUpdateContainedSduLst ARGS ((
797 KwContSduLst *contSduLst
799 EXTERN Void kwUtlUpdateOutStandingSduLst ARGS ((
800 KwL2MeasDlIpTh *dlIpThPut,
806 EXTERN Void kwUtlUpdateBurstSdus ARGS((
809 KwContSduLst *contSduLst,
814 EXTERN KwL2MeasTb * kwUtlGetCurMeasTb ARGS((
819 EXTERN S16 kwUtlSndDlL2MeasNCfm ARGS((KwCb *gCb,
820 KwL2MeasReqEvt *measReqEvt,
821 KwL2MeasCfmEvt *measCfmEvt));
823 EXTERN S16 kwUtlSndDlL2MeasCfm ARGS ((KwCb *gCb, KwL2MeasEvtCb *measEvtCb));
825 EXTERN S16 kwUtlProcHarqInd ARGS (( KwCb *gCb, RguHarqStatusInd *staInd, KwDlUeCb *ueCb,
827 EXTERN Void kwUtlResetDlL2MeasInKwRb ARGS ((KwCb *gCb,
831 EXTERN S16 KwMiLkwL2MeasStopCfm ARGS((Pst *pst, U8 measType,U8 status));
833 EXTERN S16 kwUtlValidateIpThL2Meas ARGS((KwL2MeasReqEvt *measReqEvt,
834 KwL2MeasCfmEvt *measCfmEvt));
836 EXTERN S16 kwFetchLchInfo ARGS ((KwL2MeasReqEvt *measReqEvt,
837 KwL2MeasCfmEvt *measCfmEvt,
842 EXTERN S16 kwUtlNotifyMacUlIp ARGS ((KwL2MeasCb *measCb,U16 ueIdx, Bool enable,
843 CmLteLcId *lChId, U8 *numLCh));
845 EXTERN Void kwUtlFreeDlMem ARGS(( Void));
848 #endif /* __cplusplus */
850 #endif /* __KW_DLX__ */
853 /********************************************************************30**
856 **********************************************************************/