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