RLC UeCb Changes
[o-du/l2.git] / src / cm / du_app_rlc_inf.h
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 /* Defines APIs exchanged between du_app and cl module of RLC */
20 #ifndef __RLC_INF_H__
21 #define __RLC_INF_H__
22
23 /* Macro for Ue Context */
24 #define MAX_NUM_LOGICAL_CHANNELS 11
25 #define EVENT_RLC_UL_UE_CREATE_REQ  210
26 #define EVENT_RLC_UL_UE_CREATE_RSP 211    /*!< Config Confirm */
27
28 #define RB_ID_SRB 0
29 #define RB_ID_DRB 1
30
31 #define RB_TYPE_SRB 0        /* Signalling Radio Bearer */
32 #define RB_TYPE_DRB 1        /* Data Radio Bearer */
33
34 /* RLC Direction Config */
35 #define RLC_CFG_DIR_UL        1     /*!< Uplink direction */
36 #define RLC_CFG_DIR_DL        2     /*!< Downlink direction */
37 #define RLC_CFG_DIR_BOTH      3     /*!< Both Downlink and Uplink Direction*/
38
39
40 /* Logical Channel Type */
41 #define LCH_BCCH      1      /*!< BCCH Logical Channel */
42 #define LCH_PCCH      2      /*!< PCCH Logical Channel */
43 #define LCH_CCCH      3      /*!< CCCH Logical Channel */
44 #define LCH_DTCH      4      /*!< DTCH Logical Channel */
45 #define LCH_DCCH      5      /*!< DCCH Logical Channel */
46
47
48 typedef enum
49 {
50    RLC_CFG_REAS_NONE            ,  /*!< No Failure */
51    RLC_CFG_REAS_RB_CREAT_FAIL   ,  /*!< RB CB creation Failure */
52    RLC_CFG_REAS_UE_CREAT_FAIL   ,  /*!< UE CB creation Failure */
53    RLC_CFG_REAS_CELL_CREAT_FAIL ,  /*!< CELL CB creation Failure */
54    RLC_CFG_REAS_RB_PRSNT        ,  /*!< RB CB already present */
55    RLC_CFG_REAS_LCHTYPE_MIS     ,  /*!< Logical channel type mismatch */
56    RLC_CFG_REAS_RB_UNKWN        ,  /*!< RB Cb unknown */
57    RLC_CFG_REAS_UE_UNKWN        ,  /*!< UE Cb unknown */
58    RLC_CFG_REAS_CELL_UNKWN      ,  /*!< Cell Cb unknown */
59    RLC_CFG_REAS_RB_DEL_FAIL     ,  /*!< RB Cb Deletion Failure */
60    RLC_CFG_REAS_UE_DEL_FAIL     ,  /*!< UE Cb Deletion Failure */
61    RLC_CFG_REAS_RB_REEST_FAIL   ,  /*!< RB Cb Re establish Failure */
62    RLC_CFG_REAS_RB_MODE_MIS     ,  /*!< RB Cb Mode mismatch */
63    RLC_CFG_REAS_REEST_FAIL      ,  /*!< RB Cb Re-establishment Failed */
64    RLC_CFG_REAS_RECFG_FAIL      ,  /*!< RB Cb Re-configuration Failed */
65    RLC_CFG_REAS_INVALID_CFG     ,  /*!< Invalid Configuration Type */
66    RLC_CFG_REAS_SAME_UEID       ,  /*!< UE Ids match in ChngUeId Request */
67    RLC_CFG_REAS_CELL_DEL_FAIL   ,  /*!< Cell Cb Deletion Failure */
68    RLC_CFG_REAS_INVALID_LCHID   ,  /*!< Invalid LChId */
69    RLC_CFG_REAS_INVALID_DIR     ,  /*!< Invalid Direction */
70    RLC_CFG_REAS_UE_EXISTS       ,  /*!< UE ID already exists */
71    RLC_CFG_REAS_INVALID_SNLEN   ,  /*!< Invalid SN Length */
72    RLC_CFG_REAS_SNLEN_MIS       ,  /*!< SN Length mismatch */
73    RLC_CFG_REAS_INVALID_RGUSAP     /*!< Invalid RGU SAP ID */
74 }FailureReason;
75
76 typedef enum
77 {
78    RLC_AM,                    //Acknowledged Mode
79    RLC_UM_BI_DIRECTIONAL,     //UnAcknowledged Mode
80    RLC_UM_UNI_DIRECTIONAL_UL,
81    RLC_UM_UNI_DIRECTIONAL_DL
82 }RlcMode;
83
84 typedef enum
85 {
86    AM_SIZE_12,
87    AM_SIZE_18
88 }SnLenAm;
89
90 typedef enum
91 {
92    UM_SIZE_6,
93    UM_SIZE_12
94 }SnLenUm;
95
96 typedef enum
97 {
98    POLL_RETX_TMR_5MS,
99    POLL_RETX_TMR_10MS,
100    POLL_RETX_TMR_15MS,
101    POLL_RETX_TMR_20MS,
102    POLL_RETX_TMR_25MS,
103    POLL_RETX_TMR_30MS,
104    POLL_RETX_TMR_35MS,
105    POLL_RETX_TMR_40MS,
106    POLL_RETX_TMR_45MS,
107    POLL_RETX_TMR_50MS,
108    POLL_RETX_TMR_55MS,
109    POLL_RETX_TMR_60MS,
110    POLL_RETX_TMR_65MS,
111    POLL_RETX_TMR_70MS,
112    POLL_RETX_TMR_75MS,
113    POLL_RETX_TMR_80MS,
114    POLL_RETX_TMR_85MS,
115    POLL_RETX_TMR_90MS,
116    POLL_RETX_TMR_95MS,
117    POLL_RETX_TMR_100MS,
118    POLL_RETX_TMR_105MS,
119    POLL_RETX_TMR_110MS,
120    POLL_RETX_TMR_115MS,
121    POLL_RETX_TMR_120MS,
122    POLL_RETX_TMR_125MS,
123    POLL_RETX_TMR_130MS,
124    POLL_RETX_TMR_135MS,
125    POLL_RETX_TMR_140MS,
126    POLL_RETX_TMR_145MS,
127    POLL_RETX_TMR_150MS,
128    POLL_RETX_TMR_155MS,
129    POLL_RETX_TMR_160MS,
130    POLL_RETX_TMR_165MS,
131    POLL_RETX_TMR_170MS,
132    POLL_RETX_TMR_175MS,
133    POLL_RETX_TMR_180MS,
134    POLL_RETX_TMR_185MS,
135    POLL_RETX_TMR_190MS,
136    POLL_RETX_TMR_195MS,
137    POLL_RETX_TMR_200MS,
138    POLL_RETX_TMR_205MS,
139    POLL_RETX_TMR_210MS,
140    POLL_RETX_TMR_215MS,
141    POLL_RETX_TMR_220MS,
142    POLL_RETX_TMR_225MS,
143    POLL_RETX_TMR_230MS,
144    POLL_RETX_TMR_235MS,
145    POLL_RETX_TMR_240MS,
146    POLL_RETX_TMR_245MS,
147    POLL_RETX_TMR_250MS,
148    POLL_RETX_TMR_300MS,
149    POLL_RETX_TMR_350MS,
150    POLL_RETX_TMR_400MS,
151    POLL_RETX_TMR_450MS,
152    POLL_RETX_TMR_500MS,
153    POLL_RETX_TMR_800MS,
154    POLL_RETX_TMR_1000MS,
155    POLL_RETX_TMR_2000MS,
156    POLL_RETX_TMR_4000MS,
157    POLL_RETX_TMR_SPARE5,
158    POLL_RETX_TMR_SPARE4,
159    POLL_RETX_TMR_SPARE3,
160    POLL_RETX_TMR_SPARE2,
161    POLL_RETX_TMR_SPARE1
162
163 }TpollReTxTmr;
164
165 typedef enum
166 {
167    POLL_PDU_TMR_4MS,
168    POLL_PDU_TMR_8MS,
169    POLL_PDU_TMR_16MS,
170    POLL_PDU_TMR_32MS,
171    POLL_PDU_TMR_64MS,
172    POLL_PDU_TMR_128MS,
173    POLL_PDU_TMR_256MS,
174    POLL_PDU_TMR_512MS,
175    POLL_PDU_TMR_1024MS,
176    POLL_PDU_TMR_2048MS,
177    POLL_PDU_TMR_4096MS,
178    POLL_PDU_TMR_6144MS,
179    POLL_PDU_TMR_8192MS,
180    POLL_PDU_TMR_12288MS,
181    POLL_PDU_TMR_16384MS,
182    POLL_PDU_TMR_20480MS,
183    POLL_PDU_TMR_24576MS,
184    POLL_PDU_TMR_28672MS,
185    POLL_PDU_TMR_32768MS,
186    POLL_PDU_TMR_40960MS,
187    POLL_PDU_TMR_49152MS,
188    POLL_PDU_TMR_57344MS,
189    POLL_PDU_TMR_65536MS,
190    POLL_PDU_TMR_INFINITY,
191    POLL_PDU_TMR_SPARE_8,
192    POLL_PDU_TMR_SPARE_7,
193    POLL_PDU_TMR_SPARE_6,
194    POLL_PDU_TMR_SPARE_5,
195    POLL_PDU_TMR_SPARE_4,
196    POLL_PDU_TMR_SPARE_3,
197    POLL_PDU_TMR_SPARE_2,
198    POLL_PDU_TMR_SPARE_1
199
200 }PollPdu;
201
202 typedef enum
203 {
204    POLL_BYTES_1KB,
205    POLL_BYTES_2KB,
206    POLL_BYTES_5KB,
207    POLL_BYTES_8KB,
208    POLL_BYTES_10KB,
209    POLL_BYTES_15KB,
210    POLL_BYTES_25KB,
211    POLL_BYTES_50KB,
212    POLL_BYTES_75KB,
213    POLL_BYTES_100KB,
214    POLL_BYTES_125KB,
215    POLL_BYTES_250KB,
216    POLL_BYTES_375KB,
217    POLL_BYTES_500KB,
218    POLL_BYTES_750KB,
219    POLL_BYTES_1000KB,
220    POLL_BYTES_1250KB,
221    POLL_BYTES_1500KB,
222    POLL_BYTES_2000KB,
223    POLL_BYTES_3000KB,
224    POLL_BYTES_4000KB,
225    POLL_BYTES_4500KB,
226    POLL_BYTES_5000KB,
227    POLL_BYTES_5500KB,
228    POLL_BYTES_6000KB,
229    POLL_BYTES_6500KB,
230    POLL_BYTES_7000KB,
231    POLL_BYTES_7500KB,
232    POLL_BYTES_8MB,
233    POLL_BYTES_9MB,
234    POLL_BYTES_10MB,
235    POLL_BYTES_11MB,
236    POLL_BYTES_12MB,
237    POLL_BYTES_13MB,
238    POLL_BYTES_14MB,
239    POLL_BYTES_15MB,
240    POLL_BYTES_16MB,
241    POLL_BYTES_17MB,
242    POLL_BYTES_18MB,
243    POLL_BYTES_20MB,
244    POLL_BYTES_25MB,
245    POLL_BYTES_30MB,
246    POLL_BYTES_40MB,
247    POLL_BYTES_INFINITY,
248    POLL_BYTES_SPARE_20,
249    POLL_BYTES_SPARE_19,
250    POLL_BYTES_SPARE_18,
251    POLL_BYTES_SPARE_17,
252    POLL_BYTES_SPARE_16,
253    POLL_BYTES_SPARE_15,
254    POLL_BYTES_SPARE_14,
255    POLL_BYTES_SPARE_13,
256    POLL_BYTES_SPARE_12,
257    POLL_BYTES_SPARE_11,
258    POLL_BYTES_SPARE_10,
259    POLL_BYTES_SPARE_9,
260    POLL_BYTES_SPARE_8,
261    POLL_BYTES_SPARE_7,
262    POLL_BYTES_SPARE_6,
263    POLL_BYTES_SPARE_5,
264    POLL_BYTES_SPARE_4,
265    POLL_BYTES_SPARE_3,
266    POLL_BYTES_SPARE_2,
267    POLL_BYTES_SPARE_1
268
269 }PollBytes;
270
271 typedef enum
272 {
273    RETX_TH_1,
274    RETX_TH_2,
275    RETX_TH_3,
276    RETX_TH_4,
277    RETX_TH_6,
278    RETX_TH_8,
279    RETX_TH_16,
280    RETX_TH_32
281
282 }MaxRetxTh;
283
284 typedef enum
285 {
286    RE_ASM_0MS,
287    RE_ASM_5MS,
288    RE_ASM_10MS,
289    RE_ASM_15MS,
290    RE_ASM_20MS,
291    RE_ASM_25MS,
292    RE_ASM_30MS,
293    RE_ASM_35MS,
294    RE_ASM_40MS,
295    RE_ASM_45MS,
296    RE_ASM_50MS,
297    RE_ASM_55MS,
298    RE_ASM_60MS,
299    RE_ASM_65MS,
300    RE_ASM_70MS,
301    RE_ASM_75MS,
302    RE_ASM_80MS,
303    RE_ASM_85MS,
304    RE_ASM_90MS,
305    RE_ASM_95MS,
306    RE_ASM_100MS,
307    RE_ASM_105MS,
308    RE_ASM_110MS,
309    RE_ASM_115MS,
310    RE_ASM_120MS,
311    RE_ASM_125MS,
312    RE_ASM_130MS,
313    RE_ASM_135MS,
314    RE_ASM_140MS,
315    RE_ASM_145MS,
316    RE_ASM_150MS,
317    RE_ASM_155MS,
318    RE_ASM_160MS,
319    RE_ASM_165MS,
320    RE_ASM_170MS,
321    RE_ASM_175MS,
322    RE_ASM_180MS,
323    RE_ASM_185MS,
324    RE_ASM_190MS,
325    RE_ASM_195MS,
326    RE_ASM_200MS,
327    RE_ASM_SPARE1
328
329 }TReAssembleTmr;
330
331 typedef enum
332 {
333    PROH_0MS,
334    PROH_5MS,
335    PROH_10MS,
336    PROH_15MS,
337    PROH_20MS,
338    PROH_25MS,
339    PROH_30MS,
340    PROH_35MS,
341    PROH_40MS,
342    PROH_45MS,
343    PROH_50MS,
344    PROH_55MS,
345    PROH_60MS,
346    PROH_65MS,
347    PROH_70MS,
348    PROH_75MS,
349    PROH_80MS,
350    PROH_85MS,
351    PROH_90MS,
352    PROH_95MS,
353    PROH_100MS,
354    PROH_105MS,
355    PROH_110MS,
356    PROH_115MS,
357    PROH_120MS,
358    PROH_125MS,
359    PROH_130MS,
360    PROH_135MS,
361    PROH_140MS,
362    PROH_145MS,
363    PROH_150MS,
364    PROH_155MS,
365    PROH_160MS,
366    PROH_165MS,
367    PROH_170MS,
368    PROH_175MS,
369    PROH_180MS,
370    PROH_185MS,
371    PROH_190MS,
372    PROH_195MS,
373    PROH_200MS,
374    PROH_205MS,
375    PROH_210MS,
376    PROH_215MS,
377    PROH_220MS,
378    PROH_225MS,
379    PROH_230MS,
380    PROH_235MS,
381    PROH_240MS,
382    PROH_245MS,
383    PROH_250MS,
384    PROH_300MS,
385    PROH_350MS,
386    PROH_400MS,
387    PROH_450MS,
388    PROH_500MS,
389    PROH_800MS,
390    PROH_1000MS,
391    PROH_1200MS,
392    PROH_1600MS,
393    PROH_2000MS,
394    PROH_2400MS,
395    PROH_SPARE2,
396    PROH_SPARE1
397
398 }TStatProhTmr;
399
400 typedef enum
401 {
402    RLC_DU_APP_RSP_NOK,
403    RLC_DU_APP_RSP_OK
404 }RlcRsp;
405
406 typedef struct ulAmCfg
407 {
408    SnLenAm        snLenUl;              /* Sequence Number length in bits. Allowed values are 12 and 18 */
409    TReAssembleTmr reAssemTmr;           /* T_reassembling Timer in msec*/
410    TStatProhTmr   statProhTmr;          /* T_status_prohibit Timer in msec*/
411
412 }UlAmCfg;
413
414 typedef struct dlAmCfg
415 {
416    SnLenAm        snLenDl;             /* Sequence Number length in bits. Allowed values are 12 and 18 */
417    TpollReTxTmr   pollRetxTmr;         /* T_poll_retransmit Timer in msec */
418    PollPdu        pollPdu;             /* Used to trigger a poll for every pollPdu.*/
419    PollBytes      pollByte;            /* Poll_Byte in bytes. */
420    MaxRetxTh      maxRetxTh;           /* Max_Retx_Threshold */
421  
422 }DlAmCfg;
423
424 typedef struct dlUmCfg
425 {
426    SnLenUm        snLenDlUm;             /* Sequence Number length in bits. Allowed values are 6 and 12 */
427
428 }DlUmCfg;
429
430 typedef struct ulUmCfg
431 {
432    SnLenUm        snLenUlUm;             /* Sequence Number length in bits. Allowed values are 6 and 12 */
433    TReAssembleTmr reAssemTmr;            /* T_reassembling Timer in msec*/
434
435 }UlUmCfg;
436
437 typedef struct amBearerCfg
438 {
439    UlAmCfg  ulAmCfg;
440    DlAmCfg  dlAmCfg;
441 }AmBearerCfg;
442
443 typedef struct umBiDirBearerCfg
444 {
445    UlUmCfg  ulUmCfg;
446    DlUmCfg  dlUmCfg;
447 }UmBiDirBearerCfg;
448
449 typedef struct umUniDirUlBearerCfg
450 {
451    UlUmCfg  ulUmCfg;
452 }UmUniDirUlBearerCfg;
453
454 typedef struct umUniDirDlBearerCfg
455 {
456    DlUmCfg  dlUmCfg;
457 }UmUniDirDlBearerCfg;
458
459 /* Spec Ref: 38.331, 6.3.2 RLC-BearerConfig */
460 typedef struct rlcBearerCfg
461 {
462    uint8_t      rbId;
463    uint8_t      rbType;
464    uint8_t      lcId;
465    uint8_t      lcType;
466    RlcMode      rlcMode;
467    union
468    {
469       AmBearerCfg         amCfg;
470       UmBiDirBearerCfg    umBiDirCfg;
471       UmUniDirUlBearerCfg umUniDirUlCfg;
472       UmUniDirDlBearerCfg umUniDirDlCfg;
473    }u;
474 }RlcBearerCfg;
475
476 typedef struct rlcUeCfg
477 {
478    uint16_t     cellId;
479    uint8_t      ueIdx;
480    uint8_t      numLcs;
481    RlcBearerCfg rlcBearerCfg[MAX_NUM_LOGICAL_CHANNELS];
482 }RlcUeCfg;
483
484 typedef struct rlcUeCfgRsp
485 {
486    uint16_t       cellId;
487    uint16_t       ueIdx;
488    RlcRsp         result;
489    FailureReason  reason;
490 }RlcUeCfgRsp;
491
492 /* Function Pointers */
493 /* UE create Request from DU APP to RLC*/
494 typedef uint8_t (*DuRlcUlUeCreateReq) ARGS((
495    Pst           *pst,
496    RlcUeCfg      *ueCfg ));
497
498 /* UE create Response from RLC to DU APP*/
499 typedef uint8_t (*RlcUlDuUeCreateRsp) ARGS((
500    Pst          *pst,
501    RlcUeCfgRsp  *ueCfgRsp));
502
503 /* Function Declarations */
504 uint8_t packDuRlcUlUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
505 uint8_t unpackRlcUlUeCreateReq(DuRlcUlUeCreateReq func, Pst *pst, Buffer *mBuf);
506 uint8_t RlcUlProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
507 uint8_t packRlcUlDuUeCreateRsp(Pst *pst, RlcUeCfgRsp *ueCfgRsp);
508 uint8_t unpackRlcUlUeCreateRsp(RlcUlDuUeCreateRsp func, Pst *pst, Buffer *mBuf);
509 uint8_t DuProcRlcUlUeCreateRsp(Pst *pst, RlcUeCfgRsp *cfgRsp);
510
511 #endif /* RLC_INF_H */
512
513 /**********************************************************************
514          End of file
515 **********************************************************************/