/****************************************************************************** ############################################################################### # 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 */