1 /******************************************************************************
2 ###############################################################################
3 # Copyright (c) [2017-2020] [ICT/CAS] #
4 # Licensed under the ORAN Software License v1.0 (License) #
5 ###############################################################################
6 ******************************************************************************/
8 #ifndef NR_PDCP_COMMON_H
9 #define NR_PDCP_COMMON_H
11 #include "vos_types.h"
12 #include "vos_linklist.h"
14 #include "gnbCommon.h"
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
33 // TODO: the number of node is not sure yet
34 #define PDCP_MAX_NODE_NUM 10
35 #define PDCP_SPARED -1
38 #define INACTIVE_ENC_STATE 0
39 #define ACTIVE_ENC_STATE 1
40 #define MIDDLE_ENC_STATE 3 /* for srb */
43 #define INACTIVE_INT_STATE 0
44 #define ACTIVE_INT_STATE 1
47 typedef plist pdcpcList;
50 typedef UINT8 PdcpSrbId;
51 typedef UINT16 PdcpUeIdx;
52 typedef UINT8 PdcpCellId;
55 typedef UINT8 PdcpBool_t;
65 /* the direction of data transmission */
76 PDCP_CTRL_PDU = 0, /* control pdu */
77 PDCP_DATA_PDU = 1 /* data pdu */
81 /* pdcp control pdu type */
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
95 /* integrity algorithm */
109 /* ciphering algorithm */
124 /* For all srbs and drbs per ue */
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 */
156 DISCARD_MS1500 = 1500,
157 DISCARD_INFINITY = PDCP_DISCARD_TIMER_INFINITY
167 typedef enum pdcpRlcMode
169 TM_MODE = 1, /*!< RLC TM Mode */
170 UM_MODE, /*!< RLC UM Mode */
171 AM_MODE, /*!< RLC AM Mode */
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;
190 ROHCProfiles_t rohcProfiles;
195 PdcpBool_t profile0x0006;
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,
240 ULSPILT_THRESHOLD ulspiltThreshold;
241 }UlDataSplitThreshold;
244 PrimaryPath primaryPath;
245 UlDataSplitThreshold ulDataSplitThreshold;
246 PdcpBool_t duplication;
247 }MoreThanOneRLCContext;
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
317 UINT32 rxCount; /* count value calculated of per data packet */
334 /* get sn value when sn size is 12 bits */
335 #define GET_SN_12_SN(p) ((p) & 0x00000fff)
337 /* get sn value when sn size is 18 bits */
338 #define GET_SN_18_SN(p) ((p) & 0x0003ffff)
340 /* get hfn value when sn size is 12 bits */
341 #define GET_HFN_12_SN(p) (((p) & 0xfffff000) >> 12)
343 /* get hfn value when sn size is 18 bits */
344 #define GET_HFN_18_SN(p) (((p) & 0xfffc0000) >> 18)
346 /* get count value when sn size is 12 bits */
347 #define GET_COUNT_12_SN(a,b) ((((a) & 0x000fffff)<<12)|((b) & 0x00000fff))
349 /* get count value when sn size is 18 bits */
350 #define GET_COUNT_18_SN(a,b) ((((a) & 0x00003fff)<<18)|((b) & 0x00003ffff))
355 #endif /* NR_PDCP_COMMON_H */