cu link failure fix
[o-du/l2.git] / src / 5gnrrlc / kw_dl.x
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
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                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
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 *******************************************************************************/
18
19 /********************************************************************20**
20   
21         Name:    LTE RLC file 
22     
23         Type:    C include file
24   
25         Desc:    This file contains all the data structures and 
26                  prototypes for LTE RLC.
27  
28         File:    kw_dl.x
29   
30 *********************************************************************21*/
31 /** 
32  * @file kw_dl.x
33  * @brief RLC downlink structures, prototypes
34 */
35
36 #ifndef __KW_DLX__
37 #define __KW_DLX__
38  
39 #ifdef __cplusplus
40 extern "C" {
41 #endif /* __cplusplus */
42 #ifdef TENB_STATS
43 #ifndef L2_l3_SPLIT
44 #include "pj_tenb_stats.x"
45 #else
46 #include "l2_tenb_stats.x"
47 #endif
48 #endif
49 typedef struct kwDlUeCb KwDlUeCb;
50
51 /** 
52  * @brief  Structure to hold the SN of the PDU onto which a SDU is mapped
53  *
54  * @details
55  *    - sn : Sequence number of the AM pdu
56 */
57 typedef struct kwPduMap
58 {
59   KwSn   sn;     /*!< Mapped PDU's SN */
60 }KwPduMap;
61
62 /** 
63  * @brief  Structure to hold information regarding a SDU received from PDCP
64  *
65  * @details
66  *    - lstEnt : Used for linking ( we have linked list of SDUs) which forms
67  *               the SDU queue
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
73  *      - tm
74  *        - sfn      : System Frame number for BCCH/PCCH
75  *        - subframe : Subframe number
76  *        - rnti     : RNTI for CCCH
77  *      - um
78  *        - sduId       : Unique identity for the SDU
79  *        - isSegmented : Whether this SDU is segmented into multiple PDUs
80  *      - am
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
84 */
85 typedef struct kwSdu                        
86 {
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 */
92 #ifdef LTE_L2_MEAS
93    KwSduSnMap  *snMap;   /*!< Sdu and the list of SN it maps to */
94 #endif /* LTE_L2_MEAS */
95
96    union
97    {
98       struct   _t 
99       {
100          U16         sfn;        /*!< Sub frame number for BCCH/PCCH */
101          U8          subframe;   /*!< Subframe number */
102          CmLteRnti   rnti;       /*!< RNTI for CCCH */
103 #ifdef EMTC_ENABLE
104          U8          emtcDiReason; /*!< DI reason */
105          U8          pnb;       /*!<narrow band on which Ue performs Paging*/
106 #endif
107       }tm;   /*!< SDU for TM mode */
108
109       struct   _u
110       {
111          U32    sduId;         /*!< SDU Identifier */
112          Bool   isSegmented;   /*!< Flag to indicate if the SDU is segmented */
113       }um;   /*!< SDU for UM mode */
114
115       struct   _a
116       {
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 */
126
127 }KwSdu;
128
129 /** @addtogroup tmmode */
130 /*@{*/
131
132 /** 
133  * @brief  Structure to hold Transparent Mode information for a RB
134  *
135  * @details
136  *    - sduQ : Queue of SDUs
137 */
138 typedef struct kwTm
139 {
140    CmLListCp sduQ; /*!< SDU queue for TM */
141 }KwTm;
142 /*@}*/
143
144 /** 
145  * @brief  Structure to hold buffer occupancy report sent to MAC
146  *
147  * @details
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
151 */
152 typedef struct kwBoRep
153 {
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;
159 } KwBoRep;
160
161 /** 
162  * @brief  Structure to hold information sent to MAC in a Data Request
163  *
164  * @details
165  *    - pduSz   : Sum total of sizes of all the PDUs being sent
166  *    - pduInfo : Information about each PDU
167  *    - boRep   : Current buffer occupancy report
168 */
169 typedef struct kwDatReq
170 {
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 */
175 #ifdef LTE_L2_MEAS
176    KwLchMapInfo lchMapInfo;   /*!< Logical channel mapping info */
177    U32          totMacGrant;
178 #endif /* LTE_L2_MEAS */
179 }KwDatReq;
180
181 /** @defgroup ummode UM Module Info 
182 */
183
184 /** @addtogroup ummode */
185 /*@{*/
186 /** 
187  * @brief  Structure to hold Unacknowledged mode downlink information for a RB
188  *
189  * @details
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
197  *    - vtUs        : VT(US)
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
203 */
204 typedef struct kwUmDl
205 {
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 */
214 }KwUmDl;
215
216 /** 
217  * @brief  Structure to hold information about which SDUs a PDU/segment carries
218  *
219  * @details
220  *    - sduSz  : Size of the SDU or part of it
221  *    - sdu    : Pointer to the SDU
222 */
223 typedef struct kwSduMap
224 {
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 */
229 }KwSduMap;
230
231 /** 
232  * @brief  Structure to hold info about a PDU/segment to be re-transmitted
233  *
234  * @details
235  *    - lstEnt           : Control point to link the re-transmit (the 
236  *                         re-transmit PDUs  ,segments are stored as a 
237  *                         link list) nodes
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
242  *    - soEnd            : SO End
243  *    - retxCnt          : Number of times this has been re-transmitted
244  *    - yetToConst       : Whether the PDU/segment has been constructed (headers
245  *                         appended) or not
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
249 */
250 typedef struct kwRetx
251 {
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 */
262 }KwRetx;
263
264 /** 
265  * @brief  Structure to hold a RLC AM PDU Information
266  *
267  * @details
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 
274  *
275 */
276 typedef struct kwDlPduInfo
277 {
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 */
284
285 }KwDlPduInfo;
286
287 /** 
288  * @brief  Structure to hold info about a PDU that has been transmitted
289  *
290  * @details
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
295 */
296 typedef struct kwTx
297 {
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*/
302 }KwTx;
303
304 /** @addtogroup ammode */
305 /*@{*/
306
307 /** 
308  * @brief  Structure to hold Acknowledged Mode Downlink information for a RB
309  *
310  * @details
311  *    - sduQ           : SDU queue
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 
318  *                       PDU/segment
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
324  *                       number
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
329                        : (in LTE VT(A))     
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
335  *                       reached or not
336  *    - pStaPdu        : Stores the control pdu (information required to
337  *                       create the STATUS PDU) passed from AM uplink
338 */
339 typedef struct kwAmDl
340 {
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 */
352 #ifndef LTE_TDD 
353    CmLListCp        *txBufLst;       /*!< Transmission buffer list of type KwTx */
354 #else
355 //   KwTx             *txBuf[1024];          /*!< Transmission buffer */
356 #endif
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 */
370 }KwAmDl;
371
372 /*@}*/
373
374 /** 
375  * @brief  Structure to hold information about a Radio Bearer as required by RLC
376  *
377  * @details
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 
383  *                       uplink or both
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 
387  *                       different memory.
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
400 */
401 typedef struct _kwDlRbCb
402 {
403    U8              qci;                /*!< qci of the RB */
404 #ifdef LTE_L2_MEAS
405    KwDlUeCb        *ueCb;              /*!< Pointer to UeCb  */
406    KwL2MeasRbCb    rbL2Cb;             /*!< RB measurement L2 Cb */
407    CmLListCp       sduSnMapQ;          /*!< SDU SN map queue for UM */
408
409    KwL2MeasIpThruput l2MeasIpThruput;  /*!< Holds related parameter for
410                                                  DL/UL ip throughput>*/
411 #endif                                                 
412
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 */
427    union          
428    {
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 */
437 }KwDlRbCb;
438
439 /** 
440  * @brief  Structure to hold mapping between logical channel and Radio Bearer
441  *
442  * @details
443  *    - dlRbCb   : Pointer to the downlink Radio Bearer
444 */
445 typedef struct kwDlLch
446 {
447    KwDlRbCb *dlRbCb;   /*!< Pointer to Downlink RbCb */
448 }KwDlLch;                                  
449
450 /** 
451  * @brief  Structure to hold information about the Cells
452  *
453  * @details
454  *    - cellHlEnt : Information about cells are stored in a hash table. This is
455  *                  required for that.
456  *    - cellId    : Identity of the cell
457  *    - rbCb      : Radio Bearers in the cell
458  *    - lCh       : Logical Channels in the cell
459 */
460 typedef struct kwDlCellCb
461 {
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 */
466 }KwDlCellCb;
467
468 #ifdef LTE_L2_MEAS
469 /** @struct KwContSduLst
470  * Structure contains list of rbId and index to KwOutStngSduLst
471  */
472 typedef struct kwContSduLst
473 {
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 */
477 }KwContSduLst;
478 typedef struct kwSduInfo
479 {
480    Bool  isRetxPdu;
481    Ticks arvlTime; /* stores the the arrival time of each PDCP PDU */
482 }KwSduInfo;
483
484 typedef struct kwlchInfo
485 {
486    CmLteLcId   lcId;    /*!< Holds the lcId of rbCb */
487    U8         numSdus; /*!< Number sdus belonged to the this LC */
488    KwSduInfo sduInfo[KW_L2MEAS_SDUIDX];
489 }KwlchInfo;
490
491 /** @struct KwL2MeasTb
492  * Structure containes list of rbId and  index to KwOutStngSduLst
493  */
494 typedef struct kwL2MeasTb
495 {
496    U8              numLcId;       /* number of logical channels in this TbCb */
497    KwContSduLst    sduInfo[KW_MAX_ACTV_DRB]; /*!< Contained sduLst for 
498                                                outstanding sdu */
499    U8              numLchInfo;
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*/
504 }KwL2MeasTb;
505 #endif
506
507 /** 
508  * @brief  Structure to hold information about the UEs
509  *
510  * @details
511  *    - ueHlEnt : Information about cells are stored in a hash table. This is
512  *                required for that.
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
517 */
518 struct kwDlUeCb
519 {
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 */
527 #ifdef LTE_L2_MEAS
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 */
532 #ifdef TENB_STATS
533    TSL2UeStatsCb   *tenbStats; /*!< UE Stats Holder */
534 #endif
535 };
536
537 /****************************************************************************
538  *                      EXTERN Declarations
539  ***************************************************************************/
540 /****************************************************************************
541  *                    Configuration Functions 
542  ***************************************************************************/ 
543 EXTERN S16 kwCfgAddDlRb ARGS ((KwCb *gCb, 
544                               CmLteRnti ueId, 
545                               CmLteCellId cellId, 
546                               CkwEntCfgInfo *entCfg, 
547                               CkwEntCfgCfmInfo *entCfm));
548
549 EXTERN S16 kwCfgReCfgDlRb ARGS ((KwCb *gCb, 
550                                  CmLteRnti ueId, 
551                                  CmLteCellId cellId, 
552                                  CkwEntCfgInfo *entCfg, 
553                                  CkwEntCfgCfmInfo *entCfm));
554
555 EXTERN S16 kwCfgDelDlRb ARGS ((KwCb *gCb, 
556                                CmLteRnti ueId, 
557                                CmLteCellId cellId, 
558                                CkwEntCfgInfo *entCfg, 
559                                CkwEntCfgCfmInfo *entCfm));
560
561 EXTERN S16 kwCfgDelDlUe ARGS ((KwCb *gCb, 
562                                CmLteRnti ueId, 
563                                CmLteCellId cellId, 
564                                CkwEntCfgInfo *entCfg, 
565                                CkwEntCfgCfmInfo *entCfm));
566
567 EXTERN S16 kwCfgReEstDlRb ARGS ((KwCb *gCb, 
568                                  CmLteRnti ueId, 
569                                  CmLteCellId cellId, 
570                                  Bool sndReEst,
571                                  CkwEntCfgInfo *entCfg, 
572                                  CkwEntCfgCfmInfo *entCfm));
573
574 EXTERN S16 kwCfgDelDlCell ARGS ((KwCb *gCb, 
575                                  CmLteCellId cellId, 
576                                  CkwEntCfgInfo *entCfg,
577                                  CkwEntCfgCfmInfo *entCfm));
578
579 EXTERN S16 kwCfgDlUeIdChng ARGS ((KwCb *gCb, 
580                                   CkwUeInfo *ueInfo, 
581                                   CkwUeInfo *newUeInfo, 
582                                   CmStatus  *status));
583
584 /****************************************************************************
585  *                    DBM module Functions 
586  ***************************************************************************/
587 EXTERN S16 kwDbmDlInit ARGS ((KwCb *gCb));
588
589 EXTERN Void kwDbmDlDeInit ARGS ((KwCb *gCb));
590
591 EXTERN S16 kwDbmCreateDlUeCb ARGS ((KwCb *gCb,     
592                                     CmLteRnti ueId,   
593                                     CmLteCellId cellId,
594                                     KwDlUeCb **ueCb));
595
596 EXTERN S16 kwDbmFetchDlUeCb ARGS ((KwCb *gCb,        
597                                    CmLteRnti ueId,      
598                                    CmLteCellId cellId,     
599                                    KwDlUeCb **ueCb));
600
601 EXTERN Void kwDbmDelDlUeCb ARGS ((KwCb *gCb,       
602                                   KwDlUeCb *ueCb, 
603                                   Bool abortFlag));
604
605 EXTERN Void kwDbmDelAllDlUe ARGS ((KwCb *gCb));
606
607 EXTERN S16 kwDbmCreateDlCellCb ARGS ((KwCb *gCb,      
608                                       CmLteCellId cellId,   
609                                       KwDlCellCb **cellCb));
610
611 EXTERN S16 kwDbmFetchDlCellCb ARGS ((KwCb *gCb, 
612                                      CmLteCellId cellId, 
613                                      KwDlCellCb **cellCb));
614
615 EXTERN Void kwDbmDelDlCellCb ARGS ((KwCb *gCb, KwDlCellCb *cellCb));
616
617 EXTERN Void kwDbmDelAllDlCell ARGS ((KwCb *gCb));
618
619 EXTERN Void kwDbmFetchDlRbCbByRbId ARGS ((KwCb *gCb, 
620                                           CmLteRlcId *rlcId, 
621                                           KwDlRbCb **rbCb));
622
623 EXTERN Void kwDbmFetchDlRbCbFromLchId ARGS ((KwCb *gCb,       
624                                              CmLteRnti ueId,     
625                                              CmLteCellId cellId,    
626                                              CmLteLcId lcId,      
627                                              KwDlRbCb **rbCb));
628
629 EXTERN Void kwDbmDelAllDlRb ARGS ((KwCb *gCb, KwDlRbCb **rbCbLst, U8 numRbCb));
630
631 EXTERN S16 kwDbmDlShutdown ARGS ((KwCb *gCb));
632
633 EXTERN Void kwUtlGetCurrTime ARGS((U32 *time));
634 EXTERN PUBLIC Void kwUtlTrigPdbFlowCntrl ARGS((KwCb *gCb, KwDlRbCb *rbCb, U32 pktAdmitCnt ));
635 #ifdef LTE_L2_MEAS
636 EXTERN Void kwDbmDelAllDlL2MeasTbFrmUe ARGS ((KwCb *gCb, KwDlUeCb *ueCb));
637
638 #endif
639
640 /****************************************************************************
641  *                    Transparent Mode Functions 
642  ***************************************************************************/
643 EXTERN Void kwTmmQSdu ARGS ((KwCb *gCb,
644                             KwDlRbCb *rbCb,
645                             KwuDatReqInfo *datReqInfo,
646                             Buffer *mBuf));
647 EXTERN Void kwTmmSndToLi ARGS ((KwCb     *gCb,
648                                 SuId     suId,
649                                 KwDlRbCb *rbCb, 
650                                 RguCStaIndInfo *staInd));
651
652 EXTERN Void kwDlTmmReEstablish ARGS ((KwCb *gCb, KwDlRbCb *rbCb));
653
654 /****************************************************************************
655  *                    Unacknowledged Mode Functions 
656  ***************************************************************************/
657 EXTERN Void kwUmmQSdu ARGS ((KwCb *gCb, 
658                              KwDlRbCb *rbCb,
659                              KwuDatReqInfo *datReq, 
660                              Buffer *mBuf));
661
662 EXTERN Void kwUmmDiscSdu ARGS ((KwCb *gCb, KwDlRbCb *rbCb, U32 sduId));
663
664 EXTERN Void kwDlUmmReEstablish ARGS ((KwCb *gCb, 
665                                       CmLteRlcId rlcId, 
666                                       Bool sndReEst,
667                                       KwDlRbCb *rbCb));
668
669 EXTERN Void kwUmmProcessSdus ARGS ((KwCb *gCb,KwDlRbCb *rbCb,KwDatReq *datReq));
670
671 EXTERN Void kwUmmFreeDlRbCb ARGS ((KwCb *gCb, KwDlRbCb *rbCb));
672
673 /****************************************************************************
674  *                    Acknowledged Mode Functions 
675  ***************************************************************************/
676
677 EXTERN S32 kwAmmCalculateBo ARGS ((KwAmDl *amDl));
678
679 EXTERN Void kwAmmSendDStaRsp ARGS ((KwCb *gCb, KwDlRbCb *rbCb, KwAmDl *amDl));
680
681 EXTERN Void kwAmmQSdu ARGS((KwCb *gCb,
682                             KwDlRbCb *rbCb,
683                             Buffer *mBuf, 
684                             KwuDatReqInfo *datReq));
685
686 EXTERN Void kwAmmProcessSdus ARGS((KwCb *gCb, 
687                                    KwDlRbCb *rbCb, 
688                                    KwDatReq *kwDatReq,
689                                    Bool staPduPres));
690
691 EXTERN Void kwAmmDlReEstablish ARGS((KwCb *gCb, 
692                                      CmLteRlcId rlcId, 
693                                      KwDlRbCb *rbCb));
694
695 EXTERN Void kwAmmDlHndlStatusPdu ARGS ((KwCb  *gCb,
696                                         KwDlRbCb  *rbCb,
697                                         KwUdxStaPdu *pStaPdu));
698
699 EXTERN S16 kwAmmDiscSdu ARGS((KwCb *gCb, KwDlRbCb *rbCb, U32 sduId));
700
701 EXTERN Void kwAmmPollRetxTmrExp ARGS((KwCb *gCB, KwDlRbCb *rbCb));
702
703 EXTERN Void kwAmmFreeDlRbCb ARGS ((KwCb *gCb, KwDlRbCb *rbCb));
704
705 /****************************************************************************
706  *                    Utility Functions 
707  ***************************************************************************/
708
709 EXTERN Void kwUtlStoreTxBuf ARGS ((CmLListCp        *txBufLst,
710                                     KwTx       *txBuf,
711                                     KwSn              sn
712                                    ));
713 EXTERN KwTx* kwUtlGetTxBuf ARGS ((CmLListCp        *txBufLst,
714                                   KwSn              sn
715                                   ));
716 EXTERN Void kwUtlDelTxBuf ARGS ((CmLListCp        *txBufLst,
717                                   KwTx            *txBuf,
718                                   KwCb              *gCb
719                                   ));
720 EXTERN Void kwUtlRemovTxBuf ARGS ((CmLListCp      *txBufLst,
721                                   KwTx            *txBuf,
722                                   KwCb              *gCb
723                                   ));
724
725 EXTERN S16 kwUtlSndDStaRsp ARGS ((KwCb *gCb,
726                                   KwDlRbCb *rbCb,
727                                   S32 bo,
728                                   S32 estHdrSz,
729                                   Bool staPduPrsnt,
730                                   U32 staPduBo));
731
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 */
737
738 EXTERN Void kwUtlCalcLiForSdu ARGS ((KwCb *gCb,
739                                      U16 numLi, 
740                                      MsgLen msgLen,
741                                      S16 *pduSz));
742
743 EXTERN S16 kwUtlSndToLi ARGS ((KwCb *gCb, SuId suId, KwDStaIndInfo *staIndInfo));
744
745 EXTERN Void kwUtlIncrementKwuStsSduTx ARGS((KwKwuSapCb *kwuSap));
746
747 EXTERN Void kwUtlIncrementGenStsBytesAndPdusSent ARGS((KwGenSts *genSts, 
748                                                        Buffer *pdu));
749
750 EXTERN Void kwUtlFreeDlMemory ARGS ((KwCb *gCb));
751
752 EXTERN Void kwUtlInitToBeFreed ARGS ((KwCb *gCb, KwDlDataToBeFreed *toBeFreed));
753
754 EXTERN Void kwUtlInitializeSelfPst ARGS((KwCb *gCb));
755
756 EXTERN Void kwUtlRaiseDlCleanupEvent ARGS((KwCb *gCb));
757
758 EXTERN Void kwUtlAddSduToBeFreedQueue ARGS((KwCb *gCb, KwSdu *sdu));
759
760 EXTERN Void kwUtlAddReTxPduToBeFreedQueue ARGS((KwCb *gCb, KwRetx *retx));
761
762 EXTERN Void kwUtlAddTxPduToBeFreedQueue ARGS((KwCb *gCb, KwTx *pdu));
763
764 #ifdef LTE_L2_MEAS
765 EXTERN S16 kwUtlL2MeasDlInit ARGS((KwCb *gCb));
766 #endif
767
768 /****************************************************************************
769  *                    Debug Functions 
770  ***************************************************************************/
771 EXTERN Void ResetRLCStats ARGS((Void));
772
773 EXTERN Void PrintRLCStats ARGS((Void));
774
775 EXTERN Void DumpRLCDlDebugInformation ARGS((Void));
776
777 /****************************************************************************
778  *                    Activation Functions 
779  ***************************************************************************/
780 EXTERN S16 kwDlActvInit ARGS ((Ent ent,Inst inst,Region region,Reason reason)); 
781
782 EXTERN S16 kwDlActvTsk ARGS ((Pst *pst, Buffer *mBuf));
783
784 EXTERN Bool kwDlUtlIsReestInProgress ARGS ((KwDlRbCb *rbCb));
785
786 EXTERN Void kwDlUtlResetReestInProgress ARGS ((KwDlRbCb *rbCb));
787
788 EXTERN Void kwDlUtlResetReestInProgress ARGS (( KwDlRbCb *rbCb));
789
790 EXTERN Void kwDlUtlSetReestInProgressForAllRBs ARGS ((KwCb *gCb, KwDlUeCb
791          *ueCb));
792 EXTERN Void kwDlUtlSetReestInProgressForRB ARGS (( KwCb *gCb, KwDlRbCb *rbCb));
793
794 #ifdef LTE_L2_MEAS
795 EXTERN Void kwUtlUpdateContainedSduLst ARGS ((
796 U8  sduIdx, 
797 KwContSduLst  *contSduLst
798 ));
799 EXTERN Void kwUtlUpdateOutStandingSduLst ARGS ((
800 KwL2MeasDlIpTh   *dlIpThPut, 
801 U8               sduIdx, 
802 MsgLen           sduLen, 
803 U32              sduId,
804 Bool             newIdx
805 ));
806 EXTERN Void kwUtlUpdateBurstSdus ARGS((
807 KwCb            *gCb,         
808 KwDlRbCb        *rbCb,
809 KwContSduLst    *contSduLst,
810 S32             dataVol,
811 U32             schPduSz
812 ));
813
814 EXTERN KwL2MeasTb * kwUtlGetCurMeasTb ARGS((
815 KwCb     *gCb,
816 KwDlRbCb *rbCb
817 ));
818
819 EXTERN S16 kwUtlSndDlL2MeasNCfm ARGS((KwCb *gCb,
820                                       KwL2MeasReqEvt *measReqEvt,
821                                       KwL2MeasCfmEvt *measCfmEvt));
822
823 EXTERN S16 kwUtlSndDlL2MeasCfm  ARGS ((KwCb *gCb, KwL2MeasEvtCb *measEvtCb));
824
825 EXTERN S16 kwUtlProcHarqInd  ARGS (( KwCb *gCb, RguHarqStatusInd *staInd, KwDlUeCb *ueCb, 
826                                      U8 tbIdx));
827 EXTERN Void kwUtlResetDlL2MeasInKwRb ARGS ((KwCb *gCb,
828                                             KwL2MeasCb *measCb,
829                                             U8 measType));
830
831 EXTERN S16 KwMiLkwL2MeasStopCfm ARGS((Pst *pst, U8  measType,U8  status));
832
833 EXTERN S16 kwUtlValidateIpThL2Meas ARGS((KwL2MeasReqEvt *measReqEvt, 
834                                      KwL2MeasCfmEvt *measCfmEvt)); 
835                                     
836 EXTERN S16 kwFetchLchInfo ARGS ((KwL2MeasReqEvt *measReqEvt,
837                                  KwL2MeasCfmEvt *measCfmEvt,
838                                  U16             ueId,
839                                  CmLteLcId *lChId,
840                                  U8 *numLch));
841
842 EXTERN S16 kwUtlNotifyMacUlIp ARGS ((KwL2MeasCb *measCb,U16 ueIdx, Bool enable,
843                                     CmLteLcId  *lChId, U8 *numLCh));
844 #endif
845 EXTERN Void kwUtlFreeDlMem ARGS(( Void));
846 #ifdef __cplusplus
847 }
848 #endif /* __cplusplus */
849
850 #endif /* __KW_DLX__ */
851
852 \f  
853 /********************************************************************30**
854   
855          End of file
856 **********************************************************************/