O-CU-UP
[scp/ocu/5gnr.git] / Include / pdcpCommon.h
1 /******************************************************************************
2 ###############################################################################
3 #   Copyright (c) [2017-2020] [ICT/CAS]                                        #
4 #   Licensed under the ORAN Software License v1.0 (License)             #
5 ###############################################################################
6 ******************************************************************************/
7
8 #ifndef NR_PDCP_COMMON_H
9 #define NR_PDCP_COMMON_H
10
11 #include "vos_types.h"
12 #include "vos_linklist.h"
13 #include "vos_lib.h"
14 #include "gnbCommon.h"
15
16
17 #define FALSE                                                   0
18 #define TRUE                                                    1
19 #define PDCP_INFINITY                                   1
20 #define PDCP_DISCARD_TIMER_INFINITY     2
21 #define ROHC_BUFFER_SIZE                         8096//1024
22 #define PDCP_MAC_I_LEN                                  4
23 #define PDCP_SN_12_HEAD_LEN                     2
24 #define PDCP_SN_18_HEAD_LEN                     3
25 #define MAX_PDCP_SN_12                     0x1000
26 #define MAX_PDCP_SN_18                    0x40000
27 #define SN_12_WINDOW_SIZE                        2048
28 #define SN_18_WINDOW_SIZE                  131072
29 #define REORDER_TIMER_NUM                          36
30 #define DISCARD_TIMER_NUM                          15
31
32
33 // TODO: the number of node is not sure yet
34 #define PDCP_MAX_NODE_NUM       10
35 #define PDCP_SPARED             -1
36
37 /* for ciphering */
38 #define INACTIVE_ENC_STATE              0
39 #define ACTIVE_ENC_STATE                1
40 #define MIDDLE_ENC_STATE                3       /* for srb */
41
42 /* for ciphering */
43 #define INACTIVE_INT_STATE              0
44 #define ACTIVE_INT_STATE                1
45
46
47 typedef plist pdcpcList;
48
49 #if 0
50 typedef UINT8  PdcpSrbId;
51 typedef UINT16 PdcpUeIdx;
52 typedef UINT8  PdcpCellId;
53 #endif
54
55 typedef UINT8 PdcpBool_t;
56
57 /* the type of RB */
58 typedef enum
59 {
60         SRB = 0,
61         DRB = 1
62 }RbType;
63
64
65 /* the direction of data transmission */
66 typedef enum
67 {
68         UPLINK          = 0,
69         DOWNLINK        = 1     
70 }PdcpDirection_e;
71
72
73 /* pdcp pdu type */
74 typedef enum 
75 {
76         PDCP_CTRL_PDU = 0,                      /* control pdu */
77         PDCP_DATA_PDU = 1                       /* data pdu */
78 }PdcpPduType_e;
79
80
81 /* pdcp control pdu type */
82 typedef enum
83 {
84         PDCP_CTRL_PDU_SR = 0,           /*status report*/
85         PDCP_CTRL_PDU_RF = 1,           /*rohc feedback*/
86         PDCP_CTRL_PDU_RESERVED1 = 2,
87         PDCP_CTRL_PDU_RESERVED2 = 3,
88         PDCP_CTRL_PDU_RESERVED3 = 4,
89         PDCP_CTRL_PDU_RESERVED4 = 5,
90         PDCP_CTRL_PDU_RESERVED5 = 6,
91         PDCP_CTRL_PDU_RESERVED6 = 7
92 }PdcpCtrlPduType_e;
93
94
95 /* integrity algorithm */
96 typedef enum
97 {
98     NIA0 = 0,
99     NIA1 = 1,
100     NIA2 = 2,
101     NIA3 = 3,
102     INT_SPARE4 = 4,
103     INT_SPARE3 = 5,
104     INT_SPARE2 = 6,
105     INT_SPARE1 = 7
106 }IntAlgorithm;
107
108
109 /* ciphering algorithm */
110 typedef enum
111 {
112         NEA0 = 0,
113         NEA1 = 1,
114         NEA2 = 2,
115         NEA3 = 3,
116         CIP_SPARE4 = 4,
117         CIP_SPARE3 = 5,
118         CIP_SPARE2 = 6,
119         CIP_SPARE1 = 7
120 }CipAlgorithm;
121
122
123 #if 0
124 /* For all srbs and drbs per ue */
125 typedef struct{
126         UINT32  k_gnb[8];                       /* 256 bit */
127         UINT32  k_up_enc[4];            /* 128 bit */
128         UINT32  k_cp_enc[4];            /* 128 bit */
129         UINT32  k_up_int[4];            /* 128 bit */
130         UINT32  k_cp_int[4];            /* 128 bit */
131         UINT32  nh[8];                          /* Next Hop parameter 256 bit */
132         UINT8   ncc;                            /* maximum: 3bit */
133         UINT8   enc_algorithm;          /* Encryption Algorithm */
134         UINT8   int_algorithm;          /* Integrity Algorithm */
135         UINT8   enc_active_flag;        /* define whether the encryption function has been activated */
136         UINT8   int_active_flag;        /* define whether the integrity protection function has been activated */
137         UINT8   nh_ind;                         /* 1: nh existed 0: not existed */
138 } UeSecurityParams;
139 #endif
140
141 typedef enum {
142     DISCARD_MS10 = 10,
143     DISCARD_MS20 = 20,
144     DISCARD_MS30 = 30,
145     DISCARD_MS40 = 40,
146     DISCARD_MS50 = 50,
147     DISCARD_MS60 = 60,
148     DISCARD_MS75 = 75,
149     DISCARD_MS100 = 100,
150     DISCARD_MS150 = 150,
151     DISCARD_MS200 = 200,
152     DISCARD_MS250 = 250,
153     DISCARD_MS300 = 300,
154     DISCARD_MS500 = 500,
155     DISCARD_MS750 = 750,
156     DISCARD_MS1500 = 1500,
157     DISCARD_INFINITY = PDCP_DISCARD_TIMER_INFINITY
158 }DISCARD_TIMER;
159
160
161 typedef enum{
162     LEN12BITS = 12,
163     LEN18BITS = 18
164 }PdcpSnSize_e;
165
166
167 typedef enum pdcpRlcMode
168 {
169         TM_MODE = 1,            /*!< RLC TM Mode */
170         UM_MODE,                        /*!< RLC UM Mode */
171         AM_MODE,                        /*!< RLC AM Mode */
172 }PdcpRlcMode_e;
173
174
175 typedef struct{
176     PdcpBool_t profile0x0001;
177     PdcpBool_t profile0x0002;
178     PdcpBool_t profile0x0003;
179     PdcpBool_t profile0x0004;
180     PdcpBool_t profile0x0005;
181     PdcpBool_t profile0x0006;
182     PdcpBool_t profile0x0101;
183     PdcpBool_t profile0x0102;
184     PdcpBool_t profile0x0103;
185     PdcpBool_t profile0x0104;
186 }ROHCProfiles_t;
187
188 typedef struct{
189     UINT16 maxCID;
190     ROHCProfiles_t rohcProfiles;
191 }ROHCConfig_t;
192
193 typedef struct{
194     UINT16 maxCID;
195     PdcpBool_t profile0x0006;
196 }UplinkOnlyRohc_t;
197
198
199 typedef struct{
200     UINT16 cellGroupID;
201     UINT8  lcID;
202 }PrimaryPath;
203
204 typedef enum{
205     B0 = 0,
206     B100 = 100,
207     B200 = 200,
208     B400 = 400,
209     B800 = 800,
210     B1600 = 1600,
211     B3200 = 3200,
212     B6400 = 6400,
213     B12800 = 12800,
214     B51200 = 51200,
215     B102400 = 102400,
216     B204800 = 204800,
217     B409600 = 409600,
218     B819200 = 819200,
219     B1228800 = 1228800,
220     B1638400 = 1638400,
221     B2457600 = 2457600,
222     B3276800 = 3276800,
223     B4096000 = 4096000,
224     B4915200 = 4915200,
225     B5734400 = 5734400,
226     B6553600 = 6553600,
227     INFINITY = PDCP_INFINITY,
228     SPARE8 = PDCP_SPARED,
229     SPARE7 = PDCP_SPARED,
230     SPARE6 = PDCP_SPARED,
231     SPARE5 = PDCP_SPARED,
232     SPARE4 = PDCP_SPARED,
233     SPARE3 = PDCP_SPARED,
234     SPARE2 = PDCP_SPARED,
235     SPARE1 = PDCP_SPARED
236 }ULSPILT_THRESHOLD;
237
238 typedef struct{
239     UINT16 release;
240     ULSPILT_THRESHOLD ulspiltThreshold;
241 }UlDataSplitThreshold;
242
243 typedef struct{
244     PrimaryPath primaryPath;
245     UlDataSplitThreshold ulDataSplitThreshold;
246     PdcpBool_t duplication;
247 }MoreThanOneRLCContext;
248
249 typedef enum{
250         REORDER_MS0 = 0,
251         REORDER_MS1 = 1,
252         REORDER_MS2 = 2,
253         REORDER_MS4 = 4,
254         REORDER_MS5 = 5,
255         REORDER_MS8 = 8,
256         REORDER_MS10 = 10,
257         REORDER_MS15 = 15,
258         REORDER_MS20 = 20,
259         REORDER_MS30 = 30,
260         REORDER_MS40 = 40,
261         REORDER_MS50 = 50,
262         REORDER_MS60 = 60,
263         REORDER_MS80 = 80,
264         REORDER_MS100 = 100,
265         REORDER_MS120 = 120,
266         REORDER_MS140 = 140,
267         REORDER_MS160 = 160,
268         REORDER_MS180 = 180,
269         REORDER_MS200 = 200,
270         REORDER_MS220 = 220,
271         REORDER_MS240 = 240,
272         REORDER_MS260 = 260,
273         REORDER_MS280 = 280,
274         REORDER_MS300 = 300,
275         REORDER_MS500 = 500,
276         REORDER_MS750 = 750,
277         REORDER_MS1000 = 1000,
278         REORDER_MS1250 = 1250,
279         REORDER_MS1500 = 1500,
280         REORDER_MS1750 = 1750,
281         REORDER_MS2000 = 2000,
282         REORDER_MS2250 = 2250,
283         REORDER_MS2500 = 2500,
284         REORDER_MS2750 = 2750,
285         REORDER_MS3000 = 3000,
286         REORDER_SPARE28 = PDCP_SPARED,
287         REORDER_SPARE27 = PDCP_SPARED,
288         REORDER_SPARE26 = PDCP_SPARED,
289         REORDER_SPARE25 = PDCP_SPARED,
290         REORDER_SPARE24 = PDCP_SPARED,
291         REORDER_SPARE23 = PDCP_SPARED,
292         REORDER_SPARE22 = PDCP_SPARED,
293         REORDER_SPARE21 = PDCP_SPARED,
294         REORDER_SPARE20 = PDCP_SPARED,
295         REORDER_SPARE19 = PDCP_SPARED,    
296         REORDER_SPARE18 = PDCP_SPARED,
297         REORDER_SPARE17 = PDCP_SPARED,
298         REORDER_SPARE16 = PDCP_SPARED,
299         REORDER_SPARE15 = PDCP_SPARED,
300         REORDER_SPARE14 = PDCP_SPARED,
301         REORDER_SPARE13 = PDCP_SPARED,
302         REORDER_SPARE12 = PDCP_SPARED,
303         REORDER_SPARE11 = PDCP_SPARED,
304         REORDER_SPARE10 = PDCP_SPARED,
305         REORDER_SPARE09 = PDCP_SPARED,    
306         REORDER_SPARE08 = PDCP_SPARED,
307         REORDER_SPARE07 = PDCP_SPARED,
308         REORDER_SPARE06 = PDCP_SPARED,
309         REORDER_SPARE05 = PDCP_SPARED,
310         REORDER_SPARE04 = PDCP_SPARED,
311         REORDER_SPARE03 = PDCP_SPARED,
312         REORDER_SPARE02 = PDCP_SPARED,
313         REORDER_SPARE01 = PDCP_SPARED
314 }PDCP_TREORDERING;
315
316 typedef struct{
317         UINT32 rxCount;         /* count value calculated of per data packet */
318     UINT32 txNext;
319     UINT32 rxDelivery;
320     UINT32 rxNext;
321     UINT32 rxReorder;
322 }PdcpStateVar_t;
323
324
325 typedef struct{
326
327 }ROHCCompressor;
328
329 typedef struct{
330
331 }ROHCDecompressor;
332
333
334 /* get sn value when sn size is 12 bits */
335 #define GET_SN_12_SN(p)  ((p) & 0x00000fff)
336
337 /* get sn value when sn size is 18 bits */
338 #define GET_SN_18_SN(p)  ((p) & 0x0003ffff)
339
340 /* get hfn value when sn size is 12 bits */
341 #define GET_HFN_12_SN(p) (((p) & 0xfffff000) >> 12)
342
343 /* get hfn value when sn size is 18 bits */
344 #define GET_HFN_18_SN(p) (((p) & 0xfffc0000) >> 18)
345
346 /* get count value when sn size is 12 bits */
347 #define GET_COUNT_12_SN(a,b)  ((((a) & 0x000fffff)<<12)|((b) & 0x00000fff))
348
349 /* get count value when sn size is 18 bits */
350 #define GET_COUNT_18_SN(a,b)  ((((a) & 0x00003fff)<<18)|((b) & 0x00003ffff))
351
352
353
354
355 #endif /* NR_PDCP_COMMON_H */