O-CU-UP
[scp/ocu/5gnr.git] / Include / pdcpCommon.h
diff --git a/Include/pdcpCommon.h b/Include/pdcpCommon.h
new file mode 100644 (file)
index 0000000..ed4a635
--- /dev/null
@@ -0,0 +1,355 @@
+/******************************************************************************
+###############################################################################
+#   Copyright (c) [2017-2020] [ICT/CAS]                                        #
+#   Licensed under the ORAN Software License v1.0 (License)             #
+###############################################################################
+******************************************************************************/
+
+#ifndef NR_PDCP_COMMON_H
+#define NR_PDCP_COMMON_H
+
+#include "vos_types.h"
+#include "vos_linklist.h"
+#include "vos_lib.h"
+#include "gnbCommon.h"
+
+
+#define FALSE                                                  0
+#define TRUE                                                   1
+#define PDCP_INFINITY                                  1
+#define PDCP_DISCARD_TIMER_INFINITY    2
+#define ROHC_BUFFER_SIZE                        8096//1024
+#define PDCP_MAC_I_LEN                                         4
+#define PDCP_SN_12_HEAD_LEN                    2
+#define PDCP_SN_18_HEAD_LEN                    3
+#define MAX_PDCP_SN_12                            0x1000
+#define MAX_PDCP_SN_18                           0x40000
+#define SN_12_WINDOW_SIZE                       2048
+#define SN_18_WINDOW_SIZE                 131072
+#define REORDER_TIMER_NUM                         36
+#define DISCARD_TIMER_NUM                         15
+
+
+// TODO: the number of node is not sure yet
+#define PDCP_MAX_NODE_NUM      10
+#define PDCP_SPARED            -1
+
+/* for ciphering */
+#define INACTIVE_ENC_STATE             0
+#define ACTIVE_ENC_STATE               1
+#define MIDDLE_ENC_STATE               3       /* for srb */
+
+/* for ciphering */
+#define INACTIVE_INT_STATE             0
+#define ACTIVE_INT_STATE               1
+
+
+typedef plist pdcpcList;
+
+#if 0
+typedef UINT8  PdcpSrbId;
+typedef UINT16 PdcpUeIdx;
+typedef UINT8  PdcpCellId;
+#endif
+
+typedef UINT8 PdcpBool_t;
+
+/* the type of RB */
+typedef enum
+{
+       SRB = 0,
+       DRB = 1
+}RbType;
+
+
+/* the direction of data transmission */
+typedef enum
+{
+       UPLINK          = 0,
+       DOWNLINK        = 1     
+}PdcpDirection_e;
+
+
+/* pdcp pdu type */
+typedef enum 
+{
+       PDCP_CTRL_PDU = 0,                      /* control pdu */
+       PDCP_DATA_PDU = 1                       /* data pdu */
+}PdcpPduType_e;
+
+
+/* pdcp control pdu type */
+typedef enum
+{
+       PDCP_CTRL_PDU_SR = 0,           /*status report*/
+       PDCP_CTRL_PDU_RF = 1,           /*rohc feedback*/
+       PDCP_CTRL_PDU_RESERVED1 = 2,
+       PDCP_CTRL_PDU_RESERVED2 = 3,
+       PDCP_CTRL_PDU_RESERVED3 = 4,
+       PDCP_CTRL_PDU_RESERVED4 = 5,
+       PDCP_CTRL_PDU_RESERVED5 = 6,
+       PDCP_CTRL_PDU_RESERVED6 = 7
+}PdcpCtrlPduType_e;
+
+
+/* integrity algorithm */
+typedef enum
+{
+    NIA0 = 0,
+    NIA1 = 1,
+    NIA2 = 2,
+    NIA3 = 3,
+    INT_SPARE4 = 4,
+    INT_SPARE3 = 5,
+    INT_SPARE2 = 6,
+    INT_SPARE1 = 7
+}IntAlgorithm;
+
+
+/* ciphering algorithm */
+typedef enum
+{
+       NEA0 = 0,
+       NEA1 = 1,
+       NEA2 = 2,
+       NEA3 = 3,
+       CIP_SPARE4 = 4,
+       CIP_SPARE3 = 5,
+       CIP_SPARE2 = 6,
+       CIP_SPARE1 = 7
+}CipAlgorithm;
+
+
+#if 0
+/* For all srbs and drbs per ue */
+typedef struct{
+       UINT32  k_gnb[8];                       /* 256 bit */
+       UINT32  k_up_enc[4];            /* 128 bit */
+       UINT32  k_cp_enc[4];            /* 128 bit */
+       UINT32  k_up_int[4];            /* 128 bit */
+       UINT32  k_cp_int[4];            /* 128 bit */
+       UINT32  nh[8];                          /* Next Hop parameter 256 bit */
+       UINT8   ncc;                            /* maximum: 3bit */
+       UINT8   enc_algorithm;          /* Encryption Algorithm */
+       UINT8   int_algorithm;          /* Integrity Algorithm */
+       UINT8   enc_active_flag;        /* define whether the encryption function has been activated */
+       UINT8   int_active_flag;        /* define whether the integrity protection function has been activated */
+       UINT8   nh_ind;                         /* 1: nh existed 0: not existed */
+} UeSecurityParams;
+#endif
+
+typedef enum {
+    DISCARD_MS10 = 10,
+    DISCARD_MS20 = 20,
+    DISCARD_MS30 = 30,
+    DISCARD_MS40 = 40,
+    DISCARD_MS50 = 50,
+    DISCARD_MS60 = 60,
+    DISCARD_MS75 = 75,
+    DISCARD_MS100 = 100,
+    DISCARD_MS150 = 150,
+    DISCARD_MS200 = 200,
+    DISCARD_MS250 = 250,
+    DISCARD_MS300 = 300,
+    DISCARD_MS500 = 500,
+    DISCARD_MS750 = 750,
+    DISCARD_MS1500 = 1500,
+    DISCARD_INFINITY = PDCP_DISCARD_TIMER_INFINITY
+}DISCARD_TIMER;
+
+
+typedef enum{
+    LEN12BITS = 12,
+    LEN18BITS = 18
+}PdcpSnSize_e;
+
+
+typedef enum pdcpRlcMode
+{
+       TM_MODE = 1,            /*!< RLC TM Mode */
+       UM_MODE,                        /*!< RLC UM Mode */
+       AM_MODE,                        /*!< RLC AM Mode */
+}PdcpRlcMode_e;
+
+
+typedef struct{
+    PdcpBool_t profile0x0001;
+    PdcpBool_t profile0x0002;
+    PdcpBool_t profile0x0003;
+    PdcpBool_t profile0x0004;
+    PdcpBool_t profile0x0005;
+    PdcpBool_t profile0x0006;
+    PdcpBool_t profile0x0101;
+    PdcpBool_t profile0x0102;
+    PdcpBool_t profile0x0103;
+    PdcpBool_t profile0x0104;
+}ROHCProfiles_t;
+
+typedef struct{
+    UINT16 maxCID;
+    ROHCProfiles_t rohcProfiles;
+}ROHCConfig_t;
+
+typedef struct{
+    UINT16 maxCID;
+    PdcpBool_t profile0x0006;
+}UplinkOnlyRohc_t;
+
+
+typedef struct{
+    UINT16 cellGroupID;
+    UINT8  lcID;
+}PrimaryPath;
+
+typedef enum{
+    B0 = 0,
+    B100 = 100,
+    B200 = 200,
+    B400 = 400,
+    B800 = 800,
+    B1600 = 1600,
+    B3200 = 3200,
+    B6400 = 6400,
+    B12800 = 12800,
+    B51200 = 51200,
+    B102400 = 102400,
+    B204800 = 204800,
+    B409600 = 409600,
+    B819200 = 819200,
+    B1228800 = 1228800,
+    B1638400 = 1638400,
+    B2457600 = 2457600,
+    B3276800 = 3276800,
+    B4096000 = 4096000,
+    B4915200 = 4915200,
+    B5734400 = 5734400,
+    B6553600 = 6553600,
+    INFINITY = PDCP_INFINITY,
+    SPARE8 = PDCP_SPARED,
+    SPARE7 = PDCP_SPARED,
+    SPARE6 = PDCP_SPARED,
+    SPARE5 = PDCP_SPARED,
+    SPARE4 = PDCP_SPARED,
+    SPARE3 = PDCP_SPARED,
+    SPARE2 = PDCP_SPARED,
+    SPARE1 = PDCP_SPARED
+}ULSPILT_THRESHOLD;
+
+typedef struct{
+    UINT16 release;
+    ULSPILT_THRESHOLD ulspiltThreshold;
+}UlDataSplitThreshold;
+
+typedef struct{
+    PrimaryPath primaryPath;
+    UlDataSplitThreshold ulDataSplitThreshold;
+    PdcpBool_t duplication;
+}MoreThanOneRLCContext;
+
+typedef enum{
+       REORDER_MS0 = 0,
+       REORDER_MS1 = 1,
+       REORDER_MS2 = 2,
+       REORDER_MS4 = 4,
+       REORDER_MS5 = 5,
+       REORDER_MS8 = 8,
+       REORDER_MS10 = 10,
+       REORDER_MS15 = 15,
+       REORDER_MS20 = 20,
+       REORDER_MS30 = 30,
+       REORDER_MS40 = 40,
+       REORDER_MS50 = 50,
+       REORDER_MS60 = 60,
+       REORDER_MS80 = 80,
+       REORDER_MS100 = 100,
+       REORDER_MS120 = 120,
+       REORDER_MS140 = 140,
+       REORDER_MS160 = 160,
+       REORDER_MS180 = 180,
+       REORDER_MS200 = 200,
+       REORDER_MS220 = 220,
+       REORDER_MS240 = 240,
+       REORDER_MS260 = 260,
+       REORDER_MS280 = 280,
+       REORDER_MS300 = 300,
+       REORDER_MS500 = 500,
+       REORDER_MS750 = 750,
+       REORDER_MS1000 = 1000,
+       REORDER_MS1250 = 1250,
+       REORDER_MS1500 = 1500,
+       REORDER_MS1750 = 1750,
+       REORDER_MS2000 = 2000,
+       REORDER_MS2250 = 2250,
+       REORDER_MS2500 = 2500,
+       REORDER_MS2750 = 2750,
+       REORDER_MS3000 = 3000,
+       REORDER_SPARE28 = PDCP_SPARED,
+       REORDER_SPARE27 = PDCP_SPARED,
+       REORDER_SPARE26 = PDCP_SPARED,
+       REORDER_SPARE25 = PDCP_SPARED,
+       REORDER_SPARE24 = PDCP_SPARED,
+       REORDER_SPARE23 = PDCP_SPARED,
+       REORDER_SPARE22 = PDCP_SPARED,
+       REORDER_SPARE21 = PDCP_SPARED,
+       REORDER_SPARE20 = PDCP_SPARED,
+       REORDER_SPARE19 = PDCP_SPARED,    
+       REORDER_SPARE18 = PDCP_SPARED,
+       REORDER_SPARE17 = PDCP_SPARED,
+       REORDER_SPARE16 = PDCP_SPARED,
+       REORDER_SPARE15 = PDCP_SPARED,
+       REORDER_SPARE14 = PDCP_SPARED,
+       REORDER_SPARE13 = PDCP_SPARED,
+       REORDER_SPARE12 = PDCP_SPARED,
+       REORDER_SPARE11 = PDCP_SPARED,
+       REORDER_SPARE10 = PDCP_SPARED,
+       REORDER_SPARE09 = PDCP_SPARED,    
+       REORDER_SPARE08 = PDCP_SPARED,
+       REORDER_SPARE07 = PDCP_SPARED,
+       REORDER_SPARE06 = PDCP_SPARED,
+       REORDER_SPARE05 = PDCP_SPARED,
+       REORDER_SPARE04 = PDCP_SPARED,
+       REORDER_SPARE03 = PDCP_SPARED,
+       REORDER_SPARE02 = PDCP_SPARED,
+       REORDER_SPARE01 = PDCP_SPARED
+}PDCP_TREORDERING;
+
+typedef struct{
+       UINT32 rxCount;         /* count value calculated of per data packet */
+    UINT32 txNext;
+    UINT32 rxDelivery;
+    UINT32 rxNext;
+    UINT32 rxReorder;
+}PdcpStateVar_t;
+
+
+typedef struct{
+
+}ROHCCompressor;
+
+typedef struct{
+
+}ROHCDecompressor;
+
+
+/* get sn value when sn size is 12 bits */
+#define GET_SN_12_SN(p)  ((p) & 0x00000fff)
+
+/* get sn value when sn size is 18 bits */
+#define GET_SN_18_SN(p)  ((p) & 0x0003ffff)
+
+/* get hfn value when sn size is 12 bits */
+#define GET_HFN_12_SN(p) (((p) & 0xfffff000) >> 12)
+
+/* get hfn value when sn size is 18 bits */
+#define GET_HFN_18_SN(p) (((p) & 0xfffc0000) >> 18)
+
+/* get count value when sn size is 12 bits */
+#define GET_COUNT_12_SN(a,b)  ((((a) & 0x000fffff)<<12)|((b) & 0x00000fff))
+
+/* get count value when sn size is 18 bits */
+#define GET_COUNT_18_SN(a,b)  ((((a) & 0x00003fff)<<18)|((b) & 0x00003ffff))
+
+
+
+
+#endif /* NR_PDCP_COMMON_H */