4474eb22db3e0e34a34bc4d1d5d637eb74db24a7
[o-du/l2.git] / src / 5gnrrlc / kw_ul.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 for uplink and non real time tasks
22     
23         Type:    C include file
24   
25         Desc:    This file contains all the data structures and 
26                  prototypes for LTE RLC in the uplink.
27  
28         File:    kw_ul.x
29   
30 *********************************************************************21*/
31 /** 
32  * @file kw_ul.x
33  * @brief RLC uplink structures, prototypes
34 */
35
36 #ifndef __KW_ULX__
37 #define __KW_ULX__
38  
39 #ifdef __cplusplus
40 extern "C" {
41 #endif /* __cplusplus */
42
43 typedef struct rlcUlUeCb RlcUlUeCb;
44
45 /** @defgroup um_uplink UM Uplink Module
46 */
47
48 /** 
49  * @brief  Structure to hold a  UM PDU
50  *
51  * @details
52  *    - pdu : Buffer holding the UM PDU data
53  *    - umHdr : UM PDU Header Information
54  *    - pduSz : Length of the PDU excluding the header
55 */
56 typedef struct rlcUmRecBuf
57 {
58    Buffer    *pdu;    /**< Buffer holding the UM PDU */
59    RlcUmHdr   umHdr;   /**< UM PDU Header Information */
60    MsgLen    pduSz;   /**< PDU Size */
61 }RlcUmRecBuf;
62
63 /** 
64  * @brief  Structure to hold uplink information in UM mode for a particular RB
65  *
66  * @details
67  *    - snLen : The sequence number length can be 5 bits or 10 bits. 
68  *              Here it is stored as 1 or 2 (as the number of bytes)
69  *    - recBuf : Holds all the received PDUs. PDU's are removed from this 
70  *               after a SDU is formed or during restablishment
71  *    - umWinSz : The window size is 512 for 10 bits sequence number and 16 
72  *                for 5 bits sequence number
73  *    - partialSdu : This is used to store the partially completed SDU. 
74  *                   It remains till complete SDU is received
75 */
76 typedef struct rlcUmUl
77 {
78    U8           snLen;         /**< Sequence number length */
79    U8           reOrdTmrInt;   /**< Timer Interval */
80    RlcUmRecBuf   **recBuf;      /**< Reception buffer */
81    RlcSn         umWinSz;       /**< UM window size */
82    U16          modBitMask;    /**< Bitmask for modulus to wrap around variables */
83    RlcSn         sn;            /**< Sequence number */
84    RlcSn         vrUr;          /**< VR(UR) - Receive state variable */
85    RlcSn         vrUh;          /**< VR(UH) - Highest received state variable */
86    RlcSn         vrUx;          /**< VR(UX) - Reordering state variable */
87    CmTimer      reOrdTmr;      /**< Reordering Timer */
88    Buffer       *partialSdu;   /**< Partial SDU - Remains till the complete SDU
89                                                                is received */
90 }RlcUmUl;
91 /*@}*/
92
93 /** 
94  * @brief  Structure to hold a RLC AM PDU segment
95  *
96  * @details
97  *    - lstEnt : This is required for the linked list in which the segments
98  *               are stored
99  *    - seg    : Holds the segment data
100  *    - segSz  : The length of the segment in bytes
101  *    - soEnd  : SOEnd
102  *    - amHdr  : The AM Header for the PDU segment
103  *
104 */
105 typedef struct rlcSeg
106 {
107    CmLList   lstEnt;   /**< List entry for PDU segment */
108    Buffer    *seg;     /**< PDU segment */
109    MsgLen    segSz;    /**< Buffer Size */
110    U16       soEnd;    /**< Segment Offset End */
111    RlcAmHdr   amHdr;    /**< AM header */
112 }RlcSeg;
113
114 /*@}*/
115
116 /** 
117  * @brief  Structure to hold a received AM PDU or segments of a PDU
118  *
119  * @details
120  *    - pdu         : Holds the PDU data
121  *    - pduSz       : Length of the PDU in bytes
122  *    - amHdr       : The AM Header for the PDU  
123  *    - segLst      : The length of the segment in bytes
124  *    - expByteSeg  : The next expected segment for re-ordering
125  *    - expSo       : The next expected SO so to be in sequence
126  *    - allRcvd     : Whether all the segments for this PDU has been recevied
127  *
128 */
129 typedef struct rlcAmRecBuf
130 {
131    CmLList     lnk;           /**< Link to the receive buffer list */
132    Buffer      *pdu;          /**< PDU buffer */
133    MsgLen      pduSz;         /**< Buffer Size */
134    RlcAmHdr     amHdr;         /**< AM header Info */
135    CmLListCp   segLst;        /**< PDU Segments list */
136    RlcSeg       *expByteSeg;   /**< Next expected byte segment */
137    U16         expSo;         /**< Next expected seg offset */
138    Bool        allRcvd;       /**< All bytes received or not */
139    Bool        isDelvUpperLayer; /**< Is it sent to upper layer */ 
140 }RlcAmRecBuf;
141
142 /** @addtogroup ammode */
143 /*@{*/
144
145 /** 
146  * @brief  Structure to hold information about an uplink AM Radio Bearer
147  *
148  * @details
149  *    - recBuf            : Reception buffer
150  *    - rxNext            : RX_Next - Receive state variable 
151  *    - rxNextHighestRcvd : RX_Next_Highest_Rcvd - Highest received state variable
152  *    - rxNextStatusTrig  : RX_Next_Status_Trigger - reorderig state variable
153  *    - vrMr              : VR(MR) - Maximum acceptable receive state variable
154  *    - rxHighestStatus   : RX_Highest_Status - Maximum STATUS transmit state variable
155  *    - staTrg           : Flag to indicate if status trigger occured
156  *    - partialSdu       : Partial SDU - Remains till the complete SDU 
157  *                         is received
158  *    - expSn            : The expected sequence number for reassembly  
159  *    - expSo            : The expected SO for reassembly
160  *    - staProhTmr       : The Status Probihit Timer
161  *    - staProhTmrInt    : Status Prohibit Timer interval (in ??)
162  *    - reOrdTmr         : The Reordering Timer
163  *    - reOrdTmrInt      : Re-ordering timer interval
164  *    - gatherStaPduInfo : Whether to gather information required to create 
165  *                         the STATUS PDU
166  *
167 */
168 typedef struct rlcAmUl
169 {
170 #ifndef LTE_TDD 
171    CmLListCp   *recBufLst;
172 #else
173 //   RlcAmRecBuf   *recBuf[1024];              /**< Reception buffer */
174 #endif
175    RlcSn         rxNext;                /**< RX_Next:Equvalent to VR(R) in 4G */
176    RlcSn         rxNextHighestRcvd;     /**< RX_Next_Highest_Rcvd: Equvalent to VR(H) in 4G */ 
177    RlcSn         rxNextStatusTrig;      /**< rxNextStatusTrig: Equvalent to VR(X) in 4G*/
178    RlcSn         vrMr;                  /**< VR(MR) */ 
179    RlcSn         rxHighestStatus;       /**< rxHighestStatus: Eqvalent to VR(MS) in 4G*/
180    Bool         staTrg;                /**< Whether status trigger occured */
181    Buffer       *partialSdu;           /**< Partially received SDU */
182    RlcSn         expSn;                 /**< Expected SN for reassembly */
183    U16          expSo;                 /**< Expected SO for reassembly */
184    CmTimer      staProhTmr;            /**< T_status_prohibit Timer */
185    U16          staProhTmrInt;         /**< Timer Interval */
186    CmTimer      reOrdTmr;              /**< T_reordering Timer */
187    U8           reOrdTmrInt;           /**< Timer Interval */
188    Bool         gatherStaPduInfo;      /**< Gather STATUS PDU creation info*/
189    Bool         isOutOfSeq;            /**< To identify whether packets are Out-Of-Seq or not */
190    U8           snLen;                 /*!< Sequence number length:12 bit or 18 bit : 5GNR RLC */
191    U32          snModMask;             /*!< (2 Pwr SnLen - 1): 5GNR RLC */
192 }RlcAmUl;
193
194 /*@}*/
195
196 /** 
197  * @brief  Structure to hold uplink information about a Radio Bearer
198  *
199  * @details
200  *    - rlcId    : RLC identifier, uniquely identifies a Radio Bearer
201  *    - lch      : Information (type and id) of the logical channel associated 
202  *                 with this Radio  Bearer.
203  *    - mode     : The mode of the Radio Bearer; UM or AM
204  *    - dir      : The direction of the Radio Bearer, downlink or uplink or both
205  *    - inst     : Id of RLC instance where this Radio Bearer is present. Used
206  *                 to find the instance from the Radio Bearer for memory needs 
207  *                 as different instances might have different memory.
208  *    - k1wuSapId : KWU SAP identifier
209  *    - udxSapId : UDX SAP idenrifier
210  *    - transId  : Stores the transaction identifier used to communicate 
211  *                 with MAC, the same value as sent by MAC is passed back 
212  *                 for it to be able to corelate
213  *    - m        : Mode of the RB (TM/UM/AM)
214  *      - umDl   : Unacknowledged Mode downlink information
215  *      - amDl   : Acknowledged Mode downlink information
216 */
217 typedef struct _rlcUlRbCb
218 {
219 /* kw005.201 added support for L2 Measurement */
220 #ifdef LTE_L2_MEAS
221    RlcL2MeasRbCb    rbL2Cb;              /**< RB measurement L2 Cb */
222    RlcUlUeCb        *ueCb;              /*!< Pointer to UeCb  */
223    U8              qci;                 /**< qci of the RB */
224    RlcL2MeasIpThruput l2MeasIpThruput;   /**< Holds related parameter for
225                                              DL/Ul ip throughput>*/
226 #endif /* LTE_L2_MEAS */
227    CmLteRlcId     rlcId;      /**< RLC Identifier */
228    RlcLchInfo      lch;        /**< Logical Channel Info */
229    CmLteRlcMode   mode;       /**< Entity Mode */
230    U8             dir;        /**< Direction for UL/DL */
231    Inst           inst;       /**< Tapa where Rb created Instance id */
232    SpId           k1wuSapId;   /**< KWU sap Id, to get the KwuSapCb */
233    SpId           udxSapId;   /**< KWU sap Id, to get the KwuSapCb */
234    U32            transId;    /**< Transaction Id for RLC */
235    union          
236    {
237       RlcUmUl   umUl;   /**< UM  mode Ul elements */
238       RlcAmUl   amUl;   /**< AM mode uplink elements */
239    }m;   /**< RLC mode specific Info */
240 }RlcUlRbCb;
241
242 /** 
243  * @brief  Structure to hold mapping between logical channel and Radio Bearer
244  *
245  * @details
246  *    - ulRbCb   : Pointer to the uplink Radio Bearer
247 */
248 typedef struct rlcUlLch
249 {
250    RlcUlRbCb *ulRbCb;   /**< Pointer to Uplink RbCb */
251 }RlcUlLch;                                  
252
253 /** 
254  * @brief  Structure to hold uplink information about the Cells
255  *
256  * @details
257  *    - cellHlEnt : Information about cells are stored in a hash table. This is
258  *                  required for that.
259  *    - cellId    : Identity of the cell
260  *    - rbCb      : Radio Bearers in the cell
261  *    - lCh       : Logical Channels in the cell
262  *    - selfPstUl : Pst structure for sending messages to self
263 */
264 typedef struct rlcUlCellCb
265 {
266    CmHashListEnt   cellHlEnt;                 /**< Hash list entry for CellCb */
267    CmLteCellId     cellId;                    /**< Cell Id */
268    RlcUlRbCb        *rbCb[RLC_MAX_RB_PER_CELL]; /**< RbCbs within a Cell */
269    RlcUlLch         lCh[RLC_MAX_LCH_PER_CELL];  /**< Logical channels in a cell */
270    Pst             selfPstUl;
271 }RlcUlCellCb;
272
273 /** 
274  * @brief  Structure to hold uplink information about the UEs
275  *
276  * @details
277  *    - ueHlEnt : Information about cells are stored in a hash table. This is
278  *                required for that.
279  *    - key     : Key to store/find the UE in the hashtable
280  *    - srbCb   : Signaling Radio Bearers configured for the UE
281  *    - drbCb   : Data Radio Bearers configured for the UE
282  *    - lCh     : Logical Channels in the UE
283 */
284 struct rlcUlUeCb
285 {
286    CmHashListEnt   ueHlEnt;                   /**< Hash list entry for UeCb */
287    CmLteRnti     ueId;     /*!< UE Id */
288    CmLteCellId   cellId;   /*!< Cell Id */
289    RlcUlRbCb        *srbCb[RLC_MAX_SRB_PER_UE]; /**< SRB RbCbs within an UE */ 
290    RlcUlRbCb        *drbCb[RLC_MAX_DRB_PER_UE]; /**< DRB RbCbs within an UE */ 
291    RlcUlLch         lCh[RLC_MAX_LCH_PER_UE];    /**< Logical channels of an UE*/
292 /* kw005.201 added support for L2 Measurement */
293 #ifdef LTE_L2_MEAS
294    U32             firstPacketTTI;            /*!< is first packet of the burst */
295    U16             numActRb[LKW_MAX_QCI];     /**< number of RBs Active */
296    Bool              isUlBurstActive;   /*!<Has the Burst started for UL IP Thrpt meas */
297 #endif /* LTE_L2_MEAS */
298 };
299
300 /** 
301  * @brief  Structure to hold temporary data of configuration 
302  *
303  * @details
304  *    - entUlCfgCfm      :  Holds the UL configuration status  
305  *    - rbCb             :  Rb Block
306  */
307 typedef struct rlcUlEntTmpData
308 {
309    RlcEntCfgCfmInfo   entUlCfgCfm; /**< Ul Configuration status*/ 
310    RlcUlRbCb           *rbCb;       /**< Rb Block */
311 }RlcUlEntTmpData;
312
313 /** 
314  * @brief  Structure to hold transaction information in configuration request 
315  *
316  * @details
317  *    - transHlEnt   : List entry for transaction block. 
318  *    - transId      : Transaction Id
319  *    - ueId         : ue Id
320  *    - cellId       : cell Id
321  *    - ueCb         : Ue Block
322  *    - cellCb       : Cell Block
323  *    - cfgInfo      : Configuration Information 
324  *    - ueInfo       : UE Information
325  *    - newUeInfo    : New Ue Information
326  *    - cfgTmpData   : Temporary data per Configuration entity
327 */
328 typedef struct rlcUlCfgTmpData
329 {
330    CmHashListEnt    transHlEnt;                  /**< List Entry of 
331                                                    Transaction*/
332    U32              transId;                     /**< Locally generated Transaction Id */
333    U32              uprLyrTransId;               /**< Transaction Id generated by upper layer. 
334                                                       This is used while sending confirm to the User Layer */
335    CmLteCellId      cellId;                      /**< Cell Id */
336    CmLteRnti        ueId;                        /**< Ue Id */
337    RlcUlUeCb         *ueCb;                       /**< Ue Block */
338    RlcUlCellCb       *cellCb;                     /**< Cell Block */
339    RlcCfgInfo       *cfgInfo;                    /**< Config Information*/
340    CkwUeInfo        *ueInfo;                     /**< Ue Information */
341    CkwUeInfo        *newUeInfo;                  /**< New Ue Information */
342    RlcUlEntTmpData   cfgEntData[CKW_MAX_ENT_CFG]; /**< Entity Data */
343 } RlcUlCfgTmpData;
344 /****************************************************************************
345  *                      EXTERN Declarations
346  ***************************************************************************/
347 /****************************************************************************
348  *                    Configuration Functions 
349  ***************************************************************************/
350
351 EXTERN S16 rlcValidateRbCfgParams ARGS ((RlcCb *gCb,
352                                         CmLteRnti   ueId,
353                                         CmLteCellId cellId,
354                                         RlcEntCfgInfo  *cfgToValidate,
355                                         CmStatus        *status));
356 EXTERN S16 rlcCfgValidateUlRb ARGS (( RlcCb *gCb,
357                                     RlcEntCfgInfo *cfgToValidate,
358                                     RlcUlEntTmpData *cfgInfo, 
359                                     RlcUlCfgTmpData *cfg));
360
361 EXTERN S16 rlcCfgRollBackUlRb ARGS ((RlcCb *gCb,
362                                     CmLteRnti ueId,
363                                     RlcEntCfgInfo *cfgToValidate,
364                                     RlcUlEntTmpData *cfgTempData));
365
366 EXTERN Void rlcCfgApplyUlRb ARGS ((RlcCb *gCb,
367                                   RlcEntCfgInfo *cfgToAply,
368                                   RlcUlEntTmpData *cfgTmpData,
369                                   RlcUlCfgTmpData *cfgTmpInfo));
370
371 EXTERN S16 rlcCfgValidateReEstRb ARGS ((RlcCb *gCb,
372                                        CmLteRnti  ueId,
373                                        CmLteCellId cellId,
374                                        RlcEntCfgInfo *cfgToValidate,
375                                        RlcUlEntTmpData   *cfgTmpData));
376
377 EXTERN Void rlcCfgApplyReEstUlRb ARGS ((RlcCb *gCb,
378                                       CmLteRnti ueId,
379                                       CmLteCellId cellId,
380                                       Bool sndReEstInd,
381                                       RlcUlEntTmpData *cfgTmpData));
382
383 EXTERN Void rlcCfgApplyDelUlCell ARGS ((RlcCb *gCb,
384                                       RlcUlCfgTmpData *cfgTmpData));
385
386 EXTERN S16 rlcCfgValidateDelUlCell ARGS ((RlcCb *gCb,
387                                          CmLteCellId cellId,
388                                          RlcEntCfgInfo *cfgToValidate,
389                                          RlcUlEntTmpData   *cfgTmpData,
390                                          RlcUlCfgTmpData *cfgInfo));
391
392 EXTERN S16 rlcCfgValidateDelUlUe ARGS ((RlcCb *gCb,
393                                        RlcEntCfgInfo *cfgToValidate,
394                                        RlcUlEntTmpData *cfgTmpData,
395                                        RlcUlCfgTmpData *cfgInfo));
396
397 EXTERN Void rlcCfgApplyDelUlUe ARGS ((RlcCb *gCb,
398                                     RlcUlCfgTmpData *cfgTmpData));
399
400 EXTERN Void rlcUlHdlCfgReq ARGS ((RlcCb *gCb,
401                                      RlcUlCfgTmpData *cfgInfo,
402                                      RlcCfgInfo *cfg));
403
404 EXTERN Void rlcCfgApplyUlUeIdChng ARGS ((RlcCb *gCb,
405                                         CkwUeInfo *ueInfo,
406                                         CkwUeInfo *newUeInfo,
407                                         RlcUlCfgTmpData *cfgTmpInfo));
408
409 EXTERN S16 rlcCfgValidateUeIdChng ARGS ((RlcCb *gCb,
410                                         CkwUeInfo *ueInfo,
411                                         CkwUeInfo *newUeInfo,
412                                         RlcUlCfgTmpData *cfgTmpInfo));
413
414 /****************************************************************************
415  *                    DBM module Functions 
416  ***************************************************************************/
417 EXTERN S16 rlcDbmUlInit ARGS ((RlcCb *gCb));
418
419 EXTERN Void rlcDbmUlDeInit ARGS ((RlcCb *gCb));
420
421 EXTERN S16 rlcDbmAddUlUeCb ARGS ((RlcCb *gCb,
422                                     CmLteRnti ueId,
423                                     CmLteCellId cellId,
424                                     RlcUlUeCb *ueCb));
425
426 EXTERN S16 rlcDbmFetchUlUeCb ARGS ((RlcCb *gCb,
427                                    CmLteRnti ueId,
428                                    CmLteCellId cellId,
429                                    RlcUlUeCb **ueCb));
430
431 EXTERN Void rlcDbmDelUlUeCb ARGS ((RlcCb *gCb,   
432                                   RlcUlUeCb *ueCb,
433                                   Bool abortFlag));
434
435 EXTERN Void rlcDbmDelAllUlUe ARGS ((RlcCb *gCb));
436
437 EXTERN S16 rlcDbmAddUlCellCb ARGS ((RlcCb *gCb,
438                                       CmLteCellId cellId,
439                                       RlcUlCellCb *cellCb));
440
441 EXTERN Void rlcDbmFetchUlCellCb ARGS ((RlcCb *gCb, 
442                                       CmLteCellId cellId,
443                                       RlcUlCellCb **cellCb));
444
445 EXTERN Void rlcDbmDelUlCellCb ARGS ((RlcCb *gCb,  
446                                    RlcUlCellCb *cellCb));
447
448 EXTERN Void rlcDbmDelAllUlCell ARGS ((RlcCb *gCb));
449
450 EXTERN Void rlcDbmFetchUlRbCbByRbId ARGS ((RlcCb *gCb, 
451                                           CmLteRlcId *rlcId, 
452                                           RlcUlRbCb **rbCb));
453
454 EXTERN Void rlcDbmFetchUlRbCbFromLchId ARGS ((RlcCb *gCb, 
455                                              CmLteRnti ueId, 
456                                              CmLteCellId cellId, 
457                                              CmLteLcId lcId,  
458                                              RlcUlRbCb **rbCb));
459
460 EXTERN Void rlcDbmDelAllUlRb ARGS ((RlcCb *gCb, 
461                                    RlcUlRbCb **rbCbLst, 
462                                    U8 numRbCb));
463
464 EXTERN S16 rlcDbmAddUlTransaction ARGS((RlcCb *gCb, RlcUlCfgTmpData *cfg));
465
466 EXTERN S16 rlcDbmFindUlTransaction ARGS((RlcCb *gCb, 
467                                         U32 transId, 
468                                         RlcUlCfgTmpData **cfg));
469
470 EXTERN S16 rlcDbmDelUlTransaction ARGS((RlcCb *gCb, RlcUlCfgTmpData *cfg));
471
472 EXTERN S16 rlcDbmDelAllUlTransactions ARGS((RlcCb *gCb));
473
474 EXTERN Void rlcDbmUlShutdown ARGS ((RlcCb *gCb));
475
476 /****************************************************************************
477  *                    Transparent Mode Functions 
478  ***************************************************************************/
479 #ifdef CCPU_OPT
480 EXTERN Void rlcTmmRcvFrmLi ARGS ((RlcCb *gCb, 
481                                        RlcUlRbCb *rbCb,
482                                        CmLteRnti tCrnti, 
483                                        Buffer *pdu));
484 #else /* CCPU_OPT */
485 EXTERN Void rlcTmmRcvFrmLi ARGS ((RlcCb *gCb,
486                                        RlcUlRbCb *rbCb,
487                                        Buffer *pdu));
488 #endif /* CCPU_OPT */
489
490 EXTERN Void rlcTmmUlReEstablish ARGS ((RlcCb *gCb, RlcUlRbCb *rbCb));
491
492 /****************************************************************************
493  *                    Unacknowledged Mode Functions 
494  ***************************************************************************/
495 #ifdef LTE_L2_MEAS
496 EXTERN Void rlcUmmProcessPdus ARGS((RlcCb *gCb,
497                                   RlcUlRbCb *rbCb, 
498                                   KwPduInfo *pduInfo,
499                                   U32 ttiCnt));
500 #else 
501 EXTERN Void rlcUmmProcessPdus ARGS ((RlcCb *gCb, 
502                                     RlcUlRbCb *rbCb,
503                                     KwPduInfo *pduInfo));
504 #endif 
505 EXTERN Void rlcUmmUlReEstablish ARGS ((RlcCb *gCb, 
506                                      CmLteRlcId *rlcId, 
507                                      RlcUlRbCb *rbCb));
508
509 EXTERN Void rlcUmmReOrdTmrExp ARGS((RlcCb *gCb, RlcUlRbCb  *rbCb));
510
511
512 EXTERN Void rlcUmmFreeUlRbCb ARGS ((RlcCb *gCb, RlcUlRbCb *rbCb)); 
513
514 /****************************************************************************
515  *                    Acknowledged Mode Functions 
516  ***************************************************************************/
517 EXTERN Void rlcAmmUlReEstablish ARGS((RlcCb *gCb, 
518                                      CmLteRlcId rlcId, 
519                                      Bool sndReEst,
520                                      RlcUlRbCb *rbCb));
521 #ifdef LTE_L2_MEAS
522 EXTERN Void rlcAmmProcessPdus ARGS((RlcCb *gCb,
523                                   RlcUlRbCb *rbCb, 
524                                   KwPduInfo *pduInfo,
525                                   U32 ttiCnt));
526 #else
527 EXTERN Void rlcAmmProcessPdus ARGS((RlcCb *gCb, 
528                                   RlcUlRbCb *rbCb,
529                                   KwPduInfo *pduInfo));
530 #endif 
531
532 EXTERN Void rlcAmmReOrdTmrExp ARGS((RlcCb *gCb, RlcUlRbCb *rbCb));
533
534 EXTERN Void rlcAmmStaProTmrExp ARGS((RlcCb *gCb, RlcUlRbCb *rbCb));
535
536 EXTERN Void rlcAmmFreeUlRbCb ARGS ((RlcCb *gCb, RlcUlRbCb *rbCb));
537
538 /****************************************************************************
539  *                    Utility Functions 
540  ***************************************************************************/
541 EXTERN Void rlcUtlStoreRecBuf ARGS ((CmLListCp        *recBufLst,
542                                     RlcAmRecBuf       *recBuf,
543                                     RlcSn              sn
544                                    ));
545 EXTERN RlcAmRecBuf* rlcUtlGetRecBuf ARGS ((CmLListCp        *recBufLst,
546                                   RlcSn              sn
547                                   ));
548 EXTERN Void rlcUtlDelRecBuf ARGS ((CmLListCp        *recBufLst,
549                                   RlcAmRecBuf       *recBuf,
550                                   RlcCb              *gCb
551                                   ));
552
553 EXTERN S16 rlcUtlRcvFrmLi ARGS ((RlcCb *gCb, KwDatIndInfo *datIndInfo));
554
555 EXTERN S16 rlcUtlSndDatInd ARGS ((RlcCb *gCb,RlcUlRbCb *rbCb, Buffer *sdu));
556
557 #ifdef LTE_L2_MEAS
558 EXTERN S16 rlcUtlHdlL2TmrExp   ARGS (( RlcCb *gCb, RlcL2MeasEvtCb *measEvtCb));
559
560 EXTERN  Void rlcUtlCalUlIpThrPutIncTTI ARGS ((RlcCb *gCb, 
561                                              RlcUlRbCb  *rbCb,
562                                              U32 ttiCnt));
563
564 EXTERN Void rlcUtlCalUlIpThrPut ARGS((RlcCb *gCb, 
565                                      RlcUlRbCb *rbCb, 
566                                      Buffer *pdu, 
567                                      U32 ttiCnt));
568
569 EXTERN S16 rlcUtlSndUlL2MeasCfm  ARGS ((RlcCb *gCb, RlcL2MeasEvtCb *measEvtCb));
570
571 EXTERN S16 rlcUtlSndUlL2MeasNCfm ARGS ((RlcCb *gCb, 
572                                        RlcL2MeasReqEvt *measReqEvt,
573                                        RlcL2MeasCfmEvt *measCfmEvt));
574
575 EXTERN S16 rlcUtlL2MeasUlInit ARGS((RlcCb *gCb));
576
577 EXTERN Void rlcUtlResetUlL2MeasInRlcRb ARGS((RlcCb *gCb,
578                                            RlcL2MeasCb *measCb,
579                                            U8 measType));
580
581 EXTERN S16 rlcUtlValidateIpThL2Meas ARGS ((RlcL2MeasReqEvt *measReqEvt,
582          RlcL2MeasCfmEvt *measCfmEvt));
583
584 #endif /*  LTE_L2_MEAS */
585 /****************************************************************************
586  *                    Activation Functions 
587  ***************************************************************************/
588 EXTERN S16 rlcUlActvInit ARGS ((Ent ent, 
589                                Inst inst, 
590                                Region region, 
591                                Reason reason));
592
593 EXTERN S16 rlcUlActvTsk ARGS ((Pst *pst, Buffer *mBuf));
594
595 /****************************************************************************
596  *                    Debug Functions 
597  ***************************************************************************/
598 EXTERN Void DumpRLCUlDebugInformation ARGS((Void));
599
600 #ifdef __cplusplus
601 }
602 #endif /* __cplusplus */
603
604 #endif /* __KW_ULX__ */
605
606 \f  
607 /********************************************************************30**
608   
609          End of file
610 **********************************************************************/