Initial commit
[o-du/l2.git] / src / cm / ckw.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:    CKW RRC Control Interface
22     
23         Type:    C include file
24   
25         Desc:    This file Contains the Data structures for and prototypes
26                   CKW Interface
27  
28         File:    ckw.x
29   
30 *********************************************************************21*/
31
32 #ifndef __CKW_X__
33 #define __CKW_X__
34
35 #ifdef __cplusplus
36 EXTERN "C" {
37 #endif  /*for extern "C"*/
38
39 /** @file ckw.x
40     @brief CKW Interface File (ckw.x)
41 */
42  
43 /***********************************************************************
44                           CKW typedefs and data structures
45  ***********************************************************************/
46
47 /** @brief
48    Logical Channel Information */
49 typedef struct ckwLChInfo
50 {
51    U8                   lChId;               /*!< Logical Channel ID.
52                                                   The allowed values are [1..10] */
53    U8                   type;                /*!< Logical Channel Type - 
54                                                   BCCH/PCCH/CCCH/DTCH/DCCH */
55 }CkwLChInfo;
56
57 /** @brief
58    Un-acknowledge Mode Information */
59 typedef struct ckwUmInfo
60 {
61    struct   _umDl
62    {
63       U8                snLen;               /*!< Sequence Number length in bits. Allowed values are 6 and 12*/
64    }dl;                                      /*!< Downlink */
65    struct   _umUl
66    {
67       U8                snLen;               /*!< Sequence Number length in bits.*/
68                                              /*!< Allowed values are 6 and 12*/
69       U8                reOrdTmr;            /*!< T_reordering Timer in msec */
70    }ul;                                      /*!< Uplink */
71 }CkwUmInfo;
72
73 /** @brief
74    Acknowledge Mode Information */
75 typedef struct ckwAmInfo
76 {
77    struct   _amDl
78    {
79       U8                snLen;               /*!< Sequence Number length in
80                                                bits. Allowed values are 12 and 18 */
81       U16               pollRetxTmr;         /*!< T_poll_retransmit Timer in msec */
82       S16               pollPdu;             /*!< Used to trigger a poll for every pollPdu.*/
83                                              /*!< This field indicates the number of PDUs */
84       /* Patch ckw_x_001.main_5 */
85                                              /* !<For Infinite, RLC expects value 0xFFFF */
86       S32               pollByte;            /*!< Poll_Byte in bytes. */
87                                              /*!<For Infinite RLC expects value 0xFFFFFFFF */
88       U8                maxRetx;             /*!< Max_Retx_Threshold */
89    }dl;                                      /*!< Down link */
90    struct   _amUl
91    {
92       U8                snLen;               /*!< Sequence Number length in
93                                                bits. Allowed values are 12 and 18 */
94       U16               staProhTmr;          /*!< T_status_prohibit Timer in msec*/
95       U8                reOrdTmr;            /*!< T_reordering Timer in msec*/
96    }ul;                                      /*!< Up link */
97 }CkwAmInfo;
98
99 /** @brief
100    Transparent Mode Information */
101 typedef union ckwTmInfo
102 {
103    struct   _tmDl
104    {
105       U32               buffSize;            /*!< Buffer Size in bytes */
106    }dl;                                      /*!< Down link */
107 }CkwTmInfo;
108
109 /** @brief
110    Entity Configuration Information */
111 typedef struct ckwEntCfgInfo
112 {
113    U8                   cfgType;             /*!< Type of Configuration - 
114                                              ADD/MODIFY/DELETE/RE-ESTABLISH/
115                                              DELTEUE */
116    U8                   rbId;                /* RB ID. The allowed
117                                                 Values are [0..255] */
118    U8                   rbType;              /* Type of the RB - can be SRB or DRB */
119    U8                   qci;                 /*!< qCI value Associated with that RB */
120    CkwLChInfo           lCh[CM_LTE_MAX_LOGCH_PER_RB];  /*!< Logical channel
121                                                         information
122                                                 In case of AM mode: 
123                                                 idx = 0 implies DL and
124                                                 idx = 1 implies UL
125                                                 In case of TM/UM idx 0 is only
126                                                 applicable */
127    CmLteRlcMode         entMode;             /*!< Entity mode: AM, UM or TM */
128    U8                   dir;                 /*!< Direction: It can be either
129                                                UL / DL for TM mode 
130                                                UL / DL or BOTH for UM mode 
131                                                and for AM its always for both UL 
132                                                and DL. */
133    /* Supported by SPLIT Architecture */
134    S16            discardTmr;  /*!< Discard timer. @n The value for this parameter is 
135                                 expected in milli seconds. @n Value of infinity is also
136                                 allowed and -1 must be passed for the same.  */
137    SpId                 rguSapId;
138    /* Supported by SPLIT Architecture ends */
139    union
140    {
141       CkwUmInfo         umInfo;              /*!< Un-acknowledged Mode Information */
142       CkwAmInfo         amInfo;              /*!< Acknowledged Mode Information */
143       CkwTmInfo         tmInfo;              /*!< Transparent Mode Information */
144    }m;
145 }CkwEntCfgInfo;
146
147 /** @brief
148    Configuration Information from RRC to RLC */
149 typedef struct ckwCfgInfo
150 {
151    U32                  transId;             /*!< Transaction Id */
152    CmLteRnti            ueId;                /*!< UE ID */
153    CmLteCellId          cellId;              /*!< Cell ID */
154    U8                   numEnt;              /*!< Number of entities to
155                                                configure */
156    CkwEntCfgInfo        entCfg[CKW_MAX_ENT_CFG];  /*!< Array of Entities to be
157                                               configure */
158 }CkwCfgInfo;
159
160 /** @brief
161    Entity Configuration Confirmation Information */
162 typedef struct ckwEntCfgCfmInfo
163 {
164    U8                   rbId;                /*!< rb ID */
165    U8                   rbType;              /*!< RB type - can be SRB or DRB */
166    CmStatus             status;              /*!< Status of the confirmation */
167 }CkwEntCfgCfmInfo;
168
169 /** @brief
170    Configuration Confirmation Informatin RLC to RRC */
171 typedef struct ckwCfgCfmInfo
172 {
173    U32                  transId;             /*!< Transaction Id */
174    CmLteRnti            ueId;                /*!< UE ID */
175    CmLteCellId          cellId;              /*!< Cell ID */
176    U8                   numEnt;              /*!< Number of entities configured */
177    CkwEntCfgCfmInfo     entCfgCfm[CKW_MAX_ENT_CFG];   /*!< Array of Entity cfg
178                                                          confiramations */
179 }CkwCfgCfmInfo;
180
181 /** @brief
182      UE Id Information */
183 typedef struct ckwUeInfo
184 {
185    CmLteRnti            ueId;               /*!< UE ID */
186    CmLteCellId          cellId;             /*!< Cell ID */
187 }CkwUeInfo;
188 /* Control primitives towards LTE RRC */
189
190 /* Pointer functiones for Pack/Unpack */
191 typedef S16 (*CkwCfgReq)     ARGS((Pst *pst, SpId spId, CkwCfgInfo *cfgInfo));
192 typedef S16 (*CkwCfgCfm)     ARGS((Pst *pst, SuId suId, CkwCfgCfmInfo *cfmInfo));
193
194 typedef S16 (*CkwUeIdChgReq) ARGS((Pst *pst, SpId spId, U32 transId, 
195                                    CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
196 typedef S16 (*CkwUeIdChgCfm) ARGS((Pst *pst, SuId suId, U32 transId, 
197                                    CkwUeInfo *ueInfo, CmStatus status));
198
199 typedef S16 (*CkwBndReq)     ARGS((Pst *pst, SuId suId, SpId spId));
200 typedef S16 (*CkwBndCfm)     ARGS((Pst *pst, SuId suId, U8 status));
201 typedef S16 (*CkwUbndReq)    ARGS((Pst *pst, SpId spId, Reason reason));
202
203 /** 
204  * @details The primitive binds the RLC service user entity to the RLC product.
205  * The RLC service user must bind each CKW SAP individually before sending any
206  * other request. RLC acknowledges the receipt of the bind request by sending
207  * a KwUiCkwBndCfm primitive.
208
209  * @param[in] pst       -  For the bind request, the event field in the Pst
210  *                         structure is set to EVTCKWBNDREQ
211  * @param[in] suId      -  The ID of the service user SAP associated with the
212  *                         SAP in the RLC layer. The SSAP in the RLC layer is
213  *                         specified by the spId parameter.\n
214  *                         Allowable values: 0 to 32767.
215  * @param[in] spId      -  The ID of the service provider SAP in the RLC layer.\n
216  *                         Allowable values: 0 to 32767.
217  * @return ROK
218  */
219 EXTERN S16 KwUiCkwBndReq ARGS((Pst *pst, SuId suId, SpId spId));
220
221 /** 
222  * @details RLC invokes the bind confirm primitive to acknowledge the receipt
223  * of the KwUiCkwBndReq primitive from the service user. The status field
224  * indicates whether the bind request succeeded or failed. The bind request
225  * may fail due to invalid parameters in the bind request from the
226  * service user (for example, an invalid spId).
227
228  * @param[in] pst       -  For the bind confirm, the event field in the Pst
229  *                         structure is set to EVTCKWBNDCFM
230  * @param[in] suId      -  The ID of the service user SAP specified in the
231  *                         bind request. Allowable
232 values: 0 to 32767.
233  * @param[in] status    -  Indicates the status of the bind request.\n
234 CM_BND_OK: Bind request succeeded\n
235 CM_BND_NOK: Error encountered during the processing of the bind request.
236  * @return ROK
237  */
238 EXTERN S16 KwUiCkwBndCfm ARGS((Pst *pst, SuId suId, U8 status));
239
240 /** 
241  * @details The RLC service user initiates this primitive for performing
242  * an unbind operation.This primitive brings the link down if it is already up,
243  * and releases all the resources associated for this SAP at RLC.
244
245  * @param[in] pst          -  For the unbind request, the event field in the Pst
246  *                            structure is set to EVTCKWUBNDREQ
247  * @param[in] spId         -  The ID of the service provider SAP in the RLC layer
248  *                            that is to be disassociated from its service
249  *                            user SAP.\n
250  *                            Allowable values: 0 to 32767.
251  * @param[in] reason       -  Reason for the unbind.\n
252  *                            Allowable value: CKW_UBND_REQ.
253  * @return ROK
254  */
255 EXTERN S16 KwUiCkwUbndReq ARGS((Pst *pst, SpId spId, Reason reason));
256
257 /* Layer interface Control Primitives */
258 /**
259  *@details This primitive is used by RRC to configure the multiple RLC entities. RRC
260  sends this primitive for the control of the RLC entity.
261
262  * The different configuration allowed by RRC to RLC are:\n
263    CKW_CFG_ADD          -  Configures the new RLC entity\n
264    CKW_CFG_MODIFY       -  Modifies the RLC entity\n
265    CKW_CFG_DELETE       -  Deletes the RLC entity\n
266    CKW_CFG_REESTABLISH  -  Re-establilsh the RLC entity\n
267    CKW_CFG_DELETE_UE    -  Deletes the RLC entities per UE\n
268
269
270  * @param[in] pst       -  Point to the pst structure
271  * @param[in] transId   -  Transaction ID. This field will uniquily identifies
272  *                         transaction between RRC and RLC.
273  * @param[in] cfgInfo   -  This structure contains the configuration information
274  * @return ROK
275  */
276 EXTERN S16 KwUiCkwCfgReq ARGS((Pst *pst, SpId spId, CkwCfgInfo *cfgInfo));
277
278 /**
279  *@details This primitive is used by RLC to confirm the configuration requested
280  by RRC.
281
282  * The different values for status are:\n
283  * CKW_CFG_CFM_OK    -  Success\n
284  * CKW_CFG_CFM_NOK   -  Failure\n
285
286  * The different reasons for the failure are:\n
287  * CKW_CFG_REAS_TYPE_MIS      -  Logical channel type mismatch with mode\n
288  * CKW_CFG_REAS_ENT_UNKWN     -  Reconfigure request for an unknown RLC entity\n
289
290  * @param[in] pst       -  Point to the pst structure.
291  * @param[in] transId   -  Transaction ID. This field will uniquily identifies
292  * transaction between RRC and RLC.
293  * @param[in] cfmInfo   -  This structure contains the configuration confirm
294  * information.
295  * @return ROK
296  */
297 EXTERN S16 KwUiCkwCfgCfm ARGS((Pst *pst, SuId suId, CkwCfgCfmInfo *cfmInfo));
298
299 /**
300  *@details This primitive is used by RRC to change the UeId for the existing UE
301            context.
302
303  * @param[in] pst       -  Point to the pst structure
304  * @param[in] spId      -  The ID of the service provider SAP in the RLC layer. 
305  * @param[in] transId   -  Transaction ID. This field uniquily identifies
306  *                         transaction between RRC and RLC.
307  * @param[in] ueInfo    -  Old UE Id Info for which the change request has come. 
308  * @param[in] newUeInfo -  New UE Id Info for existing UE context. 
309  * @return ROK
310  */
311 EXTERN S16 KwUiCkwUeIdChgReq ARGS((Pst *pst, SpId spId, U32 transId,
312                                    CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
313
314 /**
315  *@details This primitive is used by RLC to confirm the UeId change requested
316  by RRC.
317
318  * The different values for status are:\n
319  * CKW_CFG_CFM_OK    -  Success\n
320  * CKW_CFG_CFM_NOK   -  Failure\n
321
322  * The different reasons for the failure are:\n
323  * CKW_CFG_REAS_UE_CREAT_FAIL -  UE Cb update failure \n
324  * CKW_CFG_REAS_UE_UNKWN      -  Request received for an unknown UE Id 
325
326  * @param[in] pst       -  Point to the pst structure.
327  * @param[in] suId      -  The ID of the service user SAP associated with RLC
328  * @param[in] transId   -  Transaction ID. This field uniquily identifies
329  *                         transaction between RRC and RLC.
330  * @param[in] ueInfo    -  UE Identity which is changed with the new Id for the same
331  *                         context.
332  * @param[in] CmStatus  -  Confirmation status with appropriate reason.
333  * information.
334  * @return ROK
335  */
336 EXTERN S16 KwUiCkwUeIdChgCfm  ARGS((Pst *pst, SuId suId, U32 transId, 
337                                    CkwUeInfo *ueInfo, CmStatus status));
338
339 /* RRC Extern declarations */
340 #ifdef NH
341 EXTERN S16 NhLiCkwBndReq ARGS((
342          Pst *pst,
343          SuId suId,
344          SpId spId));
345
346 EXTERN S16 NhLiCkwUbndReq ARGS((
347          Pst *pst,
348          SpId spId,
349          Reason reason));
350
351 EXTERN S16 NhLiCkwBndCfm ARGS((Pst *pst,
352          SuId suId,
353          U8 status));
354
355 EXTERN S16 NhLiCkwCfgReq ARGS((
356          Pst *pst,
357          SpId spId,
358          CkwCfgInfo *cfgInfo));
359
360 EXTERN S16 NhLiCkwCfgCfm ARGS((Pst *pst,
361          SuId suId,
362          CkwCfgCfmInfo* cfmInfo));
363
364 EXTERN S16 NhLiCkwUeIdChgReq ARGS((Pst *pst, 
365          SpId spId, U32 transId,
366          CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
367
368 EXTERN S16 NhLiCkwUeIdChgCfm  ARGS((Pst *pst, 
369          SuId suId, U32 transId, 
370          CkwUeInfo *ueInfo, CmStatus status));
371
372 #endif /* NH */
373
374 /* Dummy RRC Interface primitives */
375 #ifdef DM
376 EXTERN S16 DmUiCkwBndReq ARGS((
377          Pst *pst,
378          SuId suId,
379          SpId spId));
380
381 EXTERN S16 DmUiCkwUbndReq ARGS((
382          Pst *pst,
383          SpId spId,
384          Reason reason));
385
386 EXTERN S16 DmUiCkwBndCfm ARGS((Pst *pst,
387          SuId suId,
388          U8 status));
389
390 EXTERN S16 DmUiCkwCfgReq ARGS((
391          Pst *pst,
392          SpId spId,
393          CkwCfgInfo *cfgInfo));
394
395 EXTERN S16 DmUiCkwCfgCfm ARGS((Pst *pst,
396          SuId suId,
397          CkwCfgCfmInfo* cfmInfo));
398
399 EXTERN S16 DmUiCkwUeIdChgReq ARGS((Pst *pst, 
400          SpId spId, U32 transId,
401          CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
402
403 EXTERN S16 DmUiCkwUeIdChgCfm  ARGS((Pst *pst, 
404          SuId suId, U32 transId, 
405          CkwUeInfo *ueInfo, CmStatus status));
406
407 #endif /* DM */
408
409 /*****************************************************************************
410  *                      PACK/UNPACK FUNCTIONS
411  ****************************************************************************/
412 #ifdef LCCKW
413 /* Packing functions */
414 EXTERN S16 cmPkCkwTmInfo ARGS ((
415 CkwTmInfo      *param,
416 Buffer         *mBuf
417 ));
418
419 EXTERN S16 cmPkCkwUmInfo ARGS ((
420 CkwEntCfgInfo  *param,
421 Buffer         *mBuf
422 ));
423
424 EXTERN S16 cmPkCkwAmInfo ARGS ((
425 CkwAmInfo      *param,
426 Buffer         *mBuf
427 ));
428
429 EXTERN S16 cmPkCkwLChInfo ARGS ((
430 CkwLChInfo     *param,
431 Buffer         *mBuf
432 ));
433
434 EXTERN S16 cmPkCkwEntCfgInfo ARGS ((
435 CkwEntCfgInfo  *param,
436 Buffer         *mBuf
437 ));
438
439 EXTERN S16 cmPkCkwCfgInfo ARGS ((
440 CkwCfgInfo     *param,
441 Pst            *pst,
442 Buffer         *mBuf
443 ));
444
445 EXTERN S16 cmPkCkwEntCfgCfmInfo ARGS ((
446 CkwEntCfgCfmInfo  *param,
447 Buffer            *mBuf
448 ));
449
450 EXTERN S16 cmPkCkwCfgCfmInfo ARGS ((
451 CkwCfgCfmInfo  *param,
452 Pst            *pst,
453 Buffer         *mBuf
454 ));
455
456 EXTERN S16 cmPkCkwUeInfo ARGS ((
457 CkwUeInfo *param,
458 Buffer    *mBuf
459 ));
460
461 EXTERN S16 cmPkCkwBndReq ARGS ((
462 Pst *pst,
463 SuId suId,
464 SpId spId
465 ));
466
467 EXTERN S16 cmPkCkwUbndReq ARGS ((
468 Pst *pst,
469 SpId spId,
470 Reason reason
471 ));
472
473 EXTERN S16 cmPkCkwBndCfm ARGS ((
474 Pst *pst,
475 SuId suId,
476 U8 status
477 ));
478
479 EXTERN S16 cmPkCkwCfgReq ARGS ((
480 Pst               *pst,
481 SpId              spId,
482 CkwCfgInfo        *cfgInfo
483 ));
484
485 EXTERN S16 cmPkCkwCfgCfm ARGS ((
486 Pst               *pst,
487 SuId              suId,
488 CkwCfgCfmInfo     *cfgCfmInfo
489 ));
490
491 EXTERN S16 cmPkCkwUeIdChgReq ARGS ((
492 Pst                *pst, 
493 SpId               spId, 
494 U32                transId,
495 CkwUeInfo          *ueInfo,
496 CkwUeInfo          *newUeInfo
497 ));
498
499 EXTERN S16 cmPkCkwUeIdChgCfm  ARGS ((
500 Pst                *pst, 
501 SuId               suId, 
502 U32                transId, 
503 CkwUeInfo          *ueInfo, 
504 CmStatus           status
505 ));
506
507 /* Unpacking functions */
508 EXTERN S16 cmUnpkCkwTmInfo ARGS ((
509 CkwTmInfo      *param,
510 Buffer         *mBuf
511 ));
512
513 EXTERN S16 cmUnpkCkwUmInfo ARGS ((
514 CkwEntCfgInfo  *param,
515 Buffer         *mBuf
516 ));
517
518 EXTERN S16 cmUnpkCkwAmInfo ARGS ((
519 CkwAmInfo      *param,
520 Buffer         *mBuf
521 ));
522
523 EXTERN S16 cmUnpkCkwLInfo ARGS ((
524 CkwLChInfo     *param,
525 Buffer         *mBuf
526 ));
527
528 EXTERN S16 cmUnpkCkwCfgCfmInfo ARGS ((
529 CkwCfgCfmInfo  *param,
530 Pst            *pst,
531 Buffer         *mBuf
532 ));
533
534 EXTERN S16 cmUnpkCkwBndReq ARGS ((
535 CkwBndReq      func,
536 Pst            *pst,
537 Buffer         *mBuf
538 ));
539
540 EXTERN S16 cmUnpkCkwLChInfo ARGS ((
541 CkwLChInfo     *param,
542 Buffer         *mBuf
543 ));
544
545 EXTERN S16 cmUnpkCkwEntCfgInfo ARGS ((
546 CkwEntCfgInfo  *param,
547 Buffer         *mBuf
548 ));
549
550 EXTERN S16 cmUnpkCkwCfgInfo ARGS ((
551 CkwCfgInfo     *param,
552 Pst            *pst,
553 Buffer         *mBuf
554 ));
555
556 EXTERN S16 cmUnpkCkwUeInfo ARGS ((
557 CkwUeInfo      *param,
558 Buffer         *mBuf
559 ));
560
561 EXTERN S16 cmUnpkCkwCfgCfm ARGS ((
562 CkwCfgCfm         func,
563 Pst               *pst,
564 Buffer            *mBuf
565 ));
566
567 EXTERN S16 cmUnpkCkwUbndReq ARGS ((
568 CkwUbndReq     func,
569 Pst            *pst,
570 Buffer         *mBuf
571 ));
572
573 EXTERN S16 cmUnpkCkwBndCfm ARGS ((
574 CkwBndCfm      func,
575 Pst            *pst,
576 Buffer         *mBuf
577 ));
578
579 EXTERN S16 cmUnpkCkwCfgReq ARGS ((
580 CkwCfgReq         func,
581 Pst               *pst,
582 Buffer            *mBuf
583 ));
584
585 EXTERN S16 cmUnpkCkwEntCfgCfmInfo ARGS ((
586 CkwEntCfgCfmInfo  *param,
587 Buffer            *mBuf
588 ));
589
590 EXTERN S16 cmUnpkCkwUeIdChgReq ARGS ((
591 CkwUeIdChgReq      func,
592 Pst                *pst, 
593 Buffer             *mBuf
594 ));
595
596 EXTERN S16 cmUnpkCkwUeIdChgCfm  ARGS ((
597 CkwUeIdChgCfm      func,
598 Pst                *pst, 
599 Buffer             *mBuf
600 ));
601 #endif /* LCCKW */
602 #ifdef __cplusplus
603 }
604 #endif /* __cplusplus */
605 #endif /* __CKW_X__ */
606
607
608 \f  
609 /********************************************************************30**
610          End of file
611 **********************************************************************/