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