Commit ea9282f4 authored by Nick Ho's avatar Nick Ho

Replace defs.h

parent 2ed1bfb1
...@@ -80,37 +80,62 @@ ...@@ -80,37 +80,62 @@
#define SCH_PAYLOAD_SIZE_MAX 4096 #define SCH_PAYLOAD_SIZE_MAX 4096
/// Logical channel ids from 36-311 (Note BCCH is not specified in 36-311, uses the same as first DRB) /// Logical channel ids from 36-311 (Note BCCH is not specified in 36-311, uses the same as first DRB)
/*!MBMS is not supported in NB-IoT */ #if defined(Rel10) || defined(Rel14)
// Mask for identifying subframe for MBMS
#define MBSFN_TDD_SF3 0x80// for TDD
#define MBSFN_TDD_SF4 0x40
#define MBSFN_TDD_SF7 0x20
#define MBSFN_TDD_SF8 0x10
#define MBSFN_TDD_SF9 0x08
#define MBSFN_FDD_SF1 0x80// for FDD
#define MBSFN_FDD_SF2 0x40
#define MBSFN_FDD_SF3 0x20
#define MBSFN_FDD_SF6 0x10
#define MBSFN_FDD_SF7 0x08
#define MBSFN_FDD_SF8 0x04
#define MAX_MBSFN_AREA 8
#define MAX_PMCH_perMBSFN 15
/*!\brief MAX MCCH payload size */
#define MCCH_PAYLOAD_SIZE_MAX 128
//#define MCH_PAYLOAD_SIZE_MAX 16384// this value is using in case mcs and TBS index are high
#endif
#ifdef USER_MODE #ifdef USER_MODE
#define printk printf #define printk printf
#endif //USER_MODE #endif //USER_MODE
/*In NB-IoT, 36.321 6.1.3.1 Logical channel group ID is set to #0 */ /*!\brief Maximum number of logical channl group IDs */
/*!\brief Maximum number of logical channel group IDs */
#define MAX_NUM_LCGID 4 #define MAX_NUM_LCGID 4
/*!\brief logical channl group ID 0 */ /*!\brief logical channl group ID 0 */
#define LCGID0 0 #define LCGID0 0
/*!\brief logical channl group ID 1 */
/*!\brief Maximum number of logical chanels 0-10*/ #define LCGID1 1
/*!\brief logical channl group ID 2 */
#define LCGID2 2
/*!\brief logical channl group ID 3 */
#define LCGID3 3
/*!\brief Maximum number of logical chanels */
#define MAX_NUM_LCID 11 #define MAX_NUM_LCID 11
/*!\brief Maximum number od control elemenets */ /*!\brief Maximum number od control elemenets */
#define MAX_NUM_CE 5 #define MAX_NUM_CE 5
/*!\brief Maximum number of random access process */ /*!\brief Maximum number of random access process */
#define NB_RA_PROC_MAX 4 #define NB_RA_PROC_MAX 4
/*!\brief size of buffer status report table */ /*!\brief size of buffer status report table */
#define BSR_TABLE_SIZE 64 #define BSR_TABLE_SIZE 64
/*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */ /*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */
#define PHR_MAPPING_OFFSET 23 // if ( x>= -23 ) val = floor (x + 23) #define PHR_MAPPING_OFFSET 23 // if ( x>= -23 ) val = floor (x + 23)
/*!\brief maximum number of resource block groups */
/*There is no CQI & RB concept in NB-IoT*/ #define N_RBG_MAX 25 // for 20MHz channel BW
/*!\brief maximum number of resource block groups, not used in NB-IoT */ /*!\brief minimum value for channel quality indicator */
/*!\brief minimum value for channel quality indicator, not used in NB-IoT */ #define MIN_CQI_VALUE 0
/*!\brief maximum value for channel quality indicator, not used in NB-IoT */ /*!\brief maximum value for channel quality indicator */
#define MAX_CQI_VALUE 15
/*!\brief maximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */ /*!\briefmaximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */
#define MAX_SUPPORTED_BW 4 #define MAX_SUPPORTED_BW 4
/*!\brief CQI values range from 1 to 15 (4 bits), not used in NB-IoT */ /*!\brief CQI values range from 1 to 15 (4 bits) */
#define CQI_VALUE_RANGE 16
/*!\brief value for indicating BSR Timer is not running */ /*!\brief value for indicating BSR Timer is not running */
#define MAC_UE_BSR_TIMER_NOT_RUNNING (0xFFFF) #define MAC_UE_BSR_TIMER_NOT_RUNNING (0xFFFF)
...@@ -135,23 +160,49 @@ ...@@ -135,23 +160,49 @@
/* /*
* UE/ENB common part * UE/ENB common part
*/ */
/*!\brief MAC header of Random Access Response for Random access preamble identifier (RAPID) for NB-IoT */ /*!\brief MAC header of Random Access Response for Random access preamble identifier (RAPID) */
typedef struct { typedef struct {
uint8_t RAPID:6; uint8_t RAPID:6;
uint8_t T:1; uint8_t T:1;
uint8_t E:1; uint8_t E:1;
} __attribute__((__packed__))RA_HEADER_RAPID_NB; } __attribute__((__packed__))RA_HEADER_RAPID;
/*!\brief MAC header of Random Access Response for backoff indicator (BI) for NB-IoT*/ /*!\brief MAC header of Random Access Response for backoff indicator (BI)*/
typedef struct { typedef struct {
uint8_t BI:4; uint8_t BI:4;
uint8_t R:2; uint8_t R:2;
uint8_t T:1; uint8_t T:1;
uint8_t E:1; uint8_t E:1;
} __attribute__((__packed__))RA_HEADER_BI_NB; } __attribute__((__packed__))RA_HEADER_BI;
/*
/*Seems not to do the packed of RAR pdu*/ typedef struct {
uint64_t padding:16;
uint64_t t_crnti:16;
uint64_t hopping_flag:1;
uint64_t rb_alloc:10;
uint64_t mcs:4;
uint64_t TPC:3;
uint64_t UL_delay:1;
uint64_t cqi_req:1;
uint64_t Timing_Advance_Command:11; // first/2nd octet LSB
uint64_t R:1; // octet MSB
} __attribute__((__packed__))RAR_PDU;
typedef struct {
uint64_t padding:16;
uint64_t R:1; // octet MSB
uint64_t Timing_Advance_Command:11; // first/2nd octet LSB
uint64_t cqi_req:1;
uint64_t UL_delay:1;
uint64_t TPC:3;
uint64_t mcs:4;
uint64_t rb_alloc:10;
uint64_t hopping_flag:1;
uint64_t t_crnti:16;
} __attribute__((__packed__))RAR_PDU;
#define sizeof_RAR_PDU 6
*/
/*!\brief MAC subheader short with 7bit Length field */ /*!\brief MAC subheader short with 7bit Length field */
typedef struct { typedef struct {
uint8_t LCID:5; // octet 1 LSB uint8_t LCID:5; // octet 1 LSB
...@@ -159,7 +210,7 @@ typedef struct { ...@@ -159,7 +210,7 @@ typedef struct {
uint8_t R:2; // octet 1 MSB uint8_t R:2; // octet 1 MSB
uint8_t L:7; // octet 2 LSB uint8_t L:7; // octet 2 LSB
uint8_t F:1; // octet 2 MSB uint8_t F:1; // octet 2 MSB
} __attribute__((__packed__))SCH_SUBHEADER_SHORT_NB; } __attribute__((__packed__))SCH_SUBHEADER_SHORT;
/*!\brief MAC subheader long with 15bit Length field */ /*!\brief MAC subheader long with 15bit Length field */
typedef struct { typedef struct {
uint8_t LCID:5; // octet 1 LSB uint8_t LCID:5; // octet 1 LSB
...@@ -169,32 +220,40 @@ typedef struct { ...@@ -169,32 +220,40 @@ typedef struct {
uint8_t F:1; // octet 2 MSB uint8_t F:1; // octet 2 MSB
uint8_t L_LSB:8; uint8_t L_LSB:8;
uint8_t padding; uint8_t padding;
} __attribute__((__packed__))SCH_SUBHEADER_LONG_NB; } __attribute__((__packed__))SCH_SUBHEADER_LONG;
/*!\brief MAC subheader short without length field */ /*!\brief MAC subheader short without length field */
typedef struct { typedef struct {
uint8_t LCID:5; uint8_t LCID:5;
uint8_t E:1; uint8_t E:1;
uint8_t R:2; uint8_t R:2;
} __attribute__((__packed__))SCH_SUBHEADER_FIXED_NB; } __attribute__((__packed__))SCH_SUBHEADER_FIXED;
/*!\brief mac control element: short buffer status report for a specific logical channel group ID*/ /*!\brief mac control element: short buffer status report for a specific logical channel group ID*/
typedef struct { typedef struct {
uint8_t Buffer_size:6; // octet 1 LSB uint8_t Buffer_size:6; // octet 1 LSB
uint8_t LCGID:2; // octet 1 MSB uint8_t LCGID:2; // octet 1 MSB
} __attribute__((__packed__))BSR_SHORT_NB; } __attribute__((__packed__))BSR_SHORT;
/*!\TRUNCATED BSR and Long BSR is not supported in NB-IoT*/ typedef BSR_SHORT BSR_TRUNCATED;
/*!\brief mac control element: long buffer status report for all logical channel group ID*/
typedef struct {
uint8_t Buffer_size3:6;
uint8_t Buffer_size2:6;
uint8_t Buffer_size1:6;
uint8_t Buffer_size0:6;
} __attribute__((__packed__))BSR_LONG;
#define BSR_LONG_SIZE (sizeof(BSR_LONG))
/*!\brief mac control element: timing advance */ /*!\brief mac control element: timing advance */
typedef struct { typedef struct {
uint8_t TA:6; uint8_t TA:6;
uint8_t R:2; uint8_t R:2;
} __attribute__((__packed__))TIMING_ADVANCE_CMD_NB; } __attribute__((__packed__))TIMING_ADVANCE_CMD;
/*!\brief mac control element: power headroom report */ /*!\brief mac control element: power headroom report */
typedef struct { typedef struct {
uint8_t PH:6; uint8_t PH:6;
uint8_t R:2; uint8_t R:2;
} __attribute__((__packed__))POWER_HEADROOM_CMD_NB; } __attribute__((__packed__))POWER_HEADROOM_CMD;
/*!\brief DCI PDU filled by MAC for the PHY */ /*!\brief DCI PDU filled by MAC for the PHY */
typedef struct { typedef struct {
...@@ -203,44 +262,62 @@ typedef struct { ...@@ -203,44 +262,62 @@ typedef struct {
// uint32_t nCCE; // uint32_t nCCE;
uint32_t num_pdcch_symbols; uint32_t num_pdcch_symbols;
DCI_ALLOC_t dci_alloc[NUM_DCI_MAX] ; DCI_ALLOC_t dci_alloc[NUM_DCI_MAX] ;
} DCI_PDU_NB; } DCI_PDU;
/*! \brief CCCH payload */ /*! \brief CCCH payload */
typedef struct { typedef struct {
uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ; uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ;
} __attribute__((__packed__))CCCH_PDU_NB; } __attribute__((__packed__))CCCH_PDU;
/*! \brief BCCH payload */ /*! \brief BCCH payload */
typedef struct { typedef struct {
uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ; uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ;
} __attribute__((__packed__))BCCH_PDU_NB; } __attribute__((__packed__))BCCH_PDU;
/*! \brief PCCH payload */ /*! \brief BCCH payload */
typedef struct { typedef struct {
uint8_t payload[PCCH_PAYLOAD_SIZE_MAX] ; uint8_t payload[PCCH_PAYLOAD_SIZE_MAX] ;
} __attribute__((__packed__))PCCH_PDU_NB; } __attribute__((__packed__))PCCH_PDU;
/*MCCH & CC is not used in NB-IoT*/
#if defined(Rel10) || defined(Rel14)
/*! \brief MCCH payload */
typedef struct {
uint8_t payload[MCCH_PAYLOAD_SIZE_MAX] ;
} __attribute__((__packed__))MCCH_PDU;
/*!< \brief MAC control element for activation and deactivation of component carriers */
typedef struct {
uint8_t C7:1;/*!< \brief Component carrier 7 */
uint8_t C6:1;/*!< \brief Component carrier 6 */
uint8_t C5:1;/*!< \brief Component carrier 5 */
uint8_t C4:1;/*!< \brief Component carrier 4 */
uint8_t C3:1;/*!< \brief Component carrier 3 */
uint8_t C2:1;/*!< \brief Component carrier 2 */
uint8_t C1:1;/*!< \brief Component carrier 1 */
uint8_t R:1;/*!< \brief Reserved */
} __attribute__((__packed__))CC_ELEMENT;
/*! \brief MAC control element: MCH Scheduling Information */
typedef struct {
uint8_t stop_sf_MSB:3; // octet 1 LSB
uint8_t lcid:5; // octet 2 MSB
uint8_t stop_sf_LSB:8;
} __attribute__((__packed__))MSI_ELEMENT;
#endif
/*! \brief Values of CCCH LCID for DLSCH */ /*! \brief Values of CCCH LCID for DLSCH */
//#define CCCH_LCHANID 0 not used in OAI #define CCCH_LCHANID 0
/*!\brief Values of BCCH0 logical channel for MIB*/ /*!\brief Values of BCCH logical channel */
#define BCCH0 11 // MIB-NB #define BCCH 3 // SI
/*!\brief Values of BCCH1 logical channel for SIBs */
#define BCCH1 12 // SI-SIB-NBs
/*!\brief Values of PCCH logical channel */ /*!\brief Values of PCCH logical channel */
#define PCCH 13 // Paging #define PCCH 4 // Paging
/*!\brief Value of CCCH / SRB0 logical channel */ /*!\brief Value of CCCH / SRB0 logical channel */
#define CCCH 0 // srb0 #define CCCH 0 // srb0
/*!\brief DCCH0 / SRB1bis logical channel */ /*!\brief DCCH / SRB1 logical channel */
#define DCCH0 3 // srb1bis #define DCCH 1 // srb1
/*!\brief DCCH1 / SRB1 logical channel */ /*!\brief DCCH1 / SRB2 logical channel */
#define DCCH1 1 // srb1 #define DCCH1 2 // srb2
/*!\brief DTCH0 DRB0 logical channel */ /*!\brief DTCH DRB1 logical channel */
#define DTCH0 4 // DRB0 #define DTCH 3 // LCID
/*!\brief DTCH1 DRB1 logical channel */ /*!\brief MCCH logical channel */
#define DTCH1 5 // DRB1 #define MCCH 4
/*!\brief MTCH logical channel */
// DLSCH LCHAN ID all the same as NB-IoT #define MTCH 1
// DLSCH LCHAN ID
/*!\brief LCID of UE contention resolution identity for DLSCH*/ /*!\brief LCID of UE contention resolution identity for DLSCH*/
#define UE_CONT_RES 28 #define UE_CONT_RES 28
/*!\brief LCID of timing advance for DLSCH */ /*!\brief LCID of timing advance for DLSCH */
...@@ -250,14 +327,29 @@ typedef struct { ...@@ -250,14 +327,29 @@ typedef struct {
/*!\brief LCID of padding LCID for DLSCH */ /*!\brief LCID of padding LCID for DLSCH */
#define SHORT_PADDING 31 #define SHORT_PADDING 31
//MCH/CC not defined in NB-IoT #if defined(Rel10) || defined(Rel14)
// MCH LCHAN IDs (table6.2.1-4 TS36.321)
/*!\brief LCID of MCCH for DL */
#define MCCH_LCHANID 0
/*!\brief LCID of MCH scheduling info for DL */
#define MCH_SCHDL_INFO 3
/*!\brief LCID of Carrier component activation/deactivation */
#define CC_ACT_DEACT 27
#endif
// ULSCH LCHAN IDs the EXTENDED_POWER_HEADROOM POWER_HEADROOM TRUNCATED_BSR LONG_BSR is not used in NB-IoT // ULSCH LCHAN IDs
/*!\brief LCID of extended power headroom for ULSCH */
#define EXTENDED_POWER_HEADROOM 25
/*!\brief LCID of power headroom for ULSCH */
#define POWER_HEADROOM 26
/*!\brief LCID of CRNTI for ULSCH */ /*!\brief LCID of CRNTI for ULSCH */
#define CRNTI 27 #define CRNTI 27
/*!\brief LCID of truncated BSR for ULSCH */
#define TRUNCATED_BSR 28
/*!\brief LCID of short BSR for ULSCH */ /*!\brief LCID of short BSR for ULSCH */
#define SHORT_BSR 29 #define SHORT_BSR 29
/*!\brief LCID of long BSR for ULSCH */
#define LONG_BSR 30
/*!\bitmaps for BSR Triggers */ /*!\bitmaps for BSR Triggers */
#define BSR_TRIGGER_NONE (0) /* No BSR Trigger */ #define BSR_TRIGGER_NONE (0) /* No BSR Trigger */
#define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */ #define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */
...@@ -269,38 +361,53 @@ typedef struct { ...@@ -269,38 +361,53 @@ typedef struct {
typedef struct { typedef struct {
int8_t payload[8][SCH_PAYLOAD_SIZE_MAX]; int8_t payload[8][SCH_PAYLOAD_SIZE_MAX];
uint16_t Pdu_size[8]; uint16_t Pdu_size[8];
} __attribute__ ((__packed__)) DLSCH_PDU_NB; } __attribute__ ((__packed__)) DLSCH_PDU;
/*MCH is not defined in NB-IoT*/ /*! \brief MCH PDU Structure */
typedef struct {
int8_t payload[SCH_PAYLOAD_SIZE_MAX];
uint16_t Pdu_size;
uint8_t mcs;
uint8_t sync_area;
uint8_t msi_active;
uint8_t mcch_active;
uint8_t mtch_active;
} __attribute__ ((__packed__)) MCH_PDU;
/*! \brief Uplink SCH PDU Structure */ /*! \brief Uplink SCH PDU Structure */
typedef struct { typedef struct {
int8_t payload[SCH_PAYLOAD_SIZE_MAX]; /*!< \brief SACH payload */ int8_t payload[SCH_PAYLOAD_SIZE_MAX]; /*!< \brief SACH payload */
uint16_t Pdu_size; uint16_t Pdu_size;
} __attribute__ ((__packed__)) ULSCH_PDU_NB; } __attribute__ ((__packed__)) ULSCH_PDU;
#include "PHY/impl_defs_top.h" #include "PHY/impl_defs_top.h"
/*!\brief UE ULSCH scheduling states*/ /*!\brief UE ULSCH scheduling states*/
typedef enum { typedef enum {
S_UL_NONE =0,// used in rrc_mac_remove_ue S_UL_NONE =0,
S_UL_WAITING,// used in add_new_ue S_UL_WAITING,
S_UL_SCHEDULED,// used in scheudle_ulsch_rnti S_UL_SCHEDULED,
S_UL_BUFFERED,// not used S_UL_BUFFERED,
S_UL_NUM_STATUS// not used S_UL_NUM_STATUS
} UE_ULSCH_STATUS_NB; } UE_ULSCH_STATUS;
/*!\brief UE DLSCH scheduling states*/ /*!\brief UE DLSCH scheduling states*/
typedef enum { typedef enum {
S_DL_NONE =0,//used in rrc_mac_remove_ue, scheudle_ue_spec,init_ue_sched_info S_DL_NONE =0,
S_DL_WAITING,//used in schedule_next_dlue,fill_DLSCH_dci,add_new_ue S_DL_WAITING,
S_DL_SCHEDULED,//used in scheudle_ue_spec,fill_DLSCH_dci S_DL_SCHEDULED,
S_DL_BUFFERED,//used in schedule_next_dlue S_DL_BUFFERED,
S_DL_NUM_STATUS// not used S_DL_NUM_STATUS
} UE_DLSCH_STATUS_NB; } UE_DLSCH_STATUS;
/*!\brief scheduling policy for the contention-based access */ /*!\brief scheduling policy for the contention-based access */
/*CBA is not defined in NB-IoT*/ typedef enum {
CBA_ES=0, /// equal share of RB among groups w
CBA_ES_S, /// equal share of RB among groups with small allocation
CBA_PF, /// proportional fair (kind of)
CBA_PF_S, /// proportional fair (kind of) with small RB allocation
CBA_RS /// random allocation
} CBA_POLICY;
/*! \brief temporary struct for ULSCH sched */ /*! \brief temporary struct for ULSCH sched */
...@@ -309,7 +416,7 @@ typedef struct { ...@@ -309,7 +416,7 @@ typedef struct {
uint16_t subframe; uint16_t subframe;
uint16_t serving_num; uint16_t serving_num;
UE_ULSCH_STATUS status; UE_ULSCH_STATUS status;
} eNB_ULSCH_INFO_NB; } eNB_ULSCH_INFO;
/*! \brief temp struct for DLSCH sched */ /*! \brief temp struct for DLSCH sched */
typedef struct { typedef struct {
rnti_t rnti; rnti_t rnti;
...@@ -317,7 +424,7 @@ typedef struct { ...@@ -317,7 +424,7 @@ typedef struct {
uint16_t subframe; uint16_t subframe;
uint16_t serving_num; uint16_t serving_num;
UE_DLSCH_STATUS status; UE_DLSCH_STATUS status;
} eNB_DLSCH_INFO_NB; } eNB_DLSCH_INFO;
/*! \brief eNB overall statistics */ /*! \brief eNB overall statistics */
typedef struct { typedef struct {
/// num BCCH PDU per CC /// num BCCH PDU per CC
...@@ -334,15 +441,15 @@ typedef struct { ...@@ -334,15 +441,15 @@ typedef struct {
/// BCCH buffer size /// BCCH buffer size
uint32_t ccch_buffer; uint32_t ccch_buffer;
/// total BCCH buffer size /// total BCCH buffer size
uint32_t total_ccch_buffertotal_ccch_buffer; uint32_t total_ccch_buffer;
/// BCCH MCS /// BCCH MCS
uint32_t ccch_mcs; uint32_t ccch_mcs;
/// num active users /// num active users
uint16_t num_dlactive_UEs; uint16_t num_dlactive_UEs;
/// available number of PRBs for a give SF fixed in 1 in NB-IoT /// available number of PRBs for a give SF
uint16_t available_prbs; uint16_t available_prbs;
/// total number of PRB available for the user plane fixed in 1 in NB-IoT /// total number of PRB available for the user plane
uint32_t total_available_prbs; uint32_t total_available_prbs;
/// aggregation /// aggregation
/// total avilable nccc : num control channel element /// total avilable nccc : num control channel element
...@@ -382,7 +489,7 @@ typedef struct { ...@@ -382,7 +489,7 @@ typedef struct {
/// missed deadlines /// missed deadlines
int missed_deadlines; int missed_deadlines;
} eNB_STATS_NB; } eNB_STATS;
/*! \brief eNB statistics for the connected UEs*/ /*! \brief eNB statistics for the connected UEs*/
typedef struct { typedef struct {
...@@ -508,7 +615,7 @@ typedef struct { ...@@ -508,7 +615,7 @@ typedef struct {
/// num of error pdus /// num of error pdus
uint32_t total_num_errors_rx; uint32_t total_num_errors_rx;
} eNB_UE_STATS_NB; } eNB_UE_STATS;
/*! \brief eNB template for UE context information */ /*! \brief eNB template for UE context information */
typedef struct { typedef struct {
/// C-RNTI of UE /// C-RNTI of UE
...@@ -523,10 +630,10 @@ typedef struct { ...@@ -523,10 +630,10 @@ typedef struct {
boolean_t configured; boolean_t configured;
/// MCS from last scheduling /// MCS from last scheduling
//Modify uint8_t mcs[8]; uint8_t mcs[8];
/// TPC from last scheduling /// TPC from last scheduling
//Delete uint8_t oldTPC[8]; uint8_t oldTPC[8];
// PHY interface info // PHY interface info
...@@ -536,28 +643,28 @@ typedef struct { ...@@ -536,28 +643,28 @@ typedef struct {
/// Current Aggregation Level for DCI /// Current Aggregation Level for DCI
uint8_t DCI_aggregation_min; uint8_t DCI_aggregation_min;
/// size of DLSCH size in bit /// size of DLSCH size in bit
uint8_t DLSCH_dci_size_bits; uint8_t DLSCH_dci_size_bits;
/// DCI buffer for DLSCH /// DCI buffer for DLSCH
/* rounded to 32 bits unit (actual value should be 8 due to the logic /* rounded to 32 bits unit (actual value should be 8 due to the logic
* of the function generate_dci0) */ * of the function generate_dci0) */
//Modifyuint8_t DLSCH_DCI[8][(((MAX_DCI_SIZE_BITS)+31)>>5)*4]; uint8_t DLSCH_DCI[8][(((MAX_DCI_SIZE_BITS)+31)>>5)*4];
/// Number of Allocated RBs for DL after scheduling (prior to frequency allocation) /// Number of Allocated RBs for DL after scheduling (prior to frequency allocation)
//Delete uint16_t nb_rb[8]; // num_max_harq uint16_t nb_rb[8]; // num_max_harq
/// Number of Allocated RBs for UL after scheduling (prior to frequency allocation) /// Number of Allocated RBs for UL after scheduling (prior to frequency allocation)
//Delete uint16_t nb_rb_ul[8]; // num_max_harq uint16_t nb_rb_ul[8]; // num_max_harq
/// Number of Allocated RBs by the ulsch preprocessor /// Number of Allocated RBs by the ulsch preprocessor
//Delete uint8_t pre_allocated_nb_rb_ul; uint8_t pre_allocated_nb_rb_ul;
/// index of Allocated RBs by the ulsch preprocessor /// index of Allocated RBs by the ulsch preprocessor
//Delete int8_t pre_allocated_rb_table_index_ul; int8_t pre_allocated_rb_table_index_ul;
/// total allocated RBs /// total allocated RBs
//Delete int8_t total_allocated_rbs; int8_t total_allocated_rbs;
/// pre-assigned MCS by the ulsch preprocessor /// pre-assigned MCS by the ulsch preprocessor
uint8_t pre_assigned_mcs_ul; uint8_t pre_assigned_mcs_ul;
...@@ -568,19 +675,19 @@ typedef struct { ...@@ -568,19 +675,19 @@ typedef struct {
/// DCI buffer for ULSCH /// DCI buffer for ULSCH
/* rounded to 32 bits unit (actual value should be 8 due to the logic /* rounded to 32 bits unit (actual value should be 8 due to the logic
* of the function generate_dci0) */ * of the function generate_dci0) */
//Modify uint8_t ULSCH_DCI[8][(((MAX_DCI_SIZE_BITS)+31)>>5)*4]; uint8_t ULSCH_DCI[8][(((MAX_DCI_SIZE_BITS)+31)>>5)*4];
/// DL DAI /// DL DAI
//Delete uint8_t DAI; uint8_t DAI;
/// UL DAI /// UL DAI
//Delete uint8_t DAI_ul[10]; uint8_t DAI_ul[10];
/// UL Scheduling Request Received /// UL Scheduling Request Received
//Delete uint8_t ul_SR; uint8_t ul_SR;
/// Resource Block indication for each sub-band in MU-MIMO ///Resource Block indication for each sub-band in MU-MIMO
//Delete uint8_t rballoc_subband[8][50]; uint8_t rballoc_subband[8][50];
// Logical channel info for link with RLC // Logical channel info for link with RLC
...@@ -588,13 +695,13 @@ typedef struct { ...@@ -588,13 +695,13 @@ typedef struct {
uint8_t bsr_info[MAX_NUM_LCGID]; uint8_t bsr_info[MAX_NUM_LCGID];
/// LCGID mapping /// LCGID mapping
//Delete long lcgidmap[11]; long lcgidmap[11];
/// phr information, received from DPR MAC control element /// phr information
int8_t phr_info_DPR; int8_t phr_info;
/// phr information, received from DPR MAC control element /// phr information
int8_t phr_info_configured_DPR; int8_t phr_info_configured;
///dl buffer info ///dl buffer info
uint32_t dl_buffer_info[MAX_NUM_LCID]; uint32_t dl_buffer_info[MAX_NUM_LCID];
...@@ -608,12 +715,12 @@ typedef struct { ...@@ -608,12 +715,12 @@ typedef struct {
uint32_t dl_buffer_head_sdu_creation_time[MAX_NUM_LCID]; uint32_t dl_buffer_head_sdu_creation_time[MAX_NUM_LCID];
/// maximum creation time of the downlink buffer head across all LCID /// maximum creation time of the downlink buffer head across all LCID
uint32_t dl_buffer_head_sdu_creation_time_max; uint32_t dl_buffer_head_sdu_creation_time_max;
/// a flag indicating that the downlink head SDU is segmented /// a flag indicating that the downlink head SDU is segmented
uint8_t dl_buffer_head_sdu_is_segmented[MAX_NUM_LCID]; uint8_t dl_buffer_head_sdu_is_segmented[MAX_NUM_LCID];
/// size of remaining size to send for the downlink head SDU /// size of remaining size to send for the downlink head SDU
uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID]; uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID];
/// total uplink buffer size /// total uplink buffer size
uint32_t ul_total_buffer; uint32_t ul_total_buffer;
/// uplink buffer creation time for each LCID /// uplink buffer creation time for each LCID
uint32_t ul_buffer_creation_time[MAX_NUM_LCGID]; uint32_t ul_buffer_creation_time[MAX_NUM_LCGID];
...@@ -626,14 +733,15 @@ typedef struct { ...@@ -626,14 +733,15 @@ typedef struct {
int32_t ue_tx_power; int32_t ue_tx_power;
/// stores the frame where the last TPC was transmitted /// stores the frame where the last TPC was transmitted
//Delete uint32_t pusch_tpc_tx_frame; uint32_t pusch_tpc_tx_frame;
//Delete uint32_t pusch_tpc_tx_subframe; uint32_t pusch_tpc_tx_subframe;
//Delete uint32_t pucch_tpc_tx_frame; uint32_t pucch_tpc_tx_frame;
//Delete uint32_t pucch_tpc_tx_subframe; uint32_t pucch_tpc_tx_subframe;
//Delete eNB_UE_estimated_distances distance;
} UE_TEMPLATE_NB; #ifdef LOCALIZATION
eNB_UE_estimated_distances distance;
#endif
} UE_TEMPLATE;
/*! \brief scheduling control information set through an API (not used)*/ /*! \brief scheduling control information set through an API (not used)*/
typedef struct { typedef struct {
...@@ -652,11 +760,11 @@ typedef struct { ...@@ -652,11 +760,11 @@ typedef struct {
///aggregated bit rate of non-gbr bearer per UE ///aggregated bit rate of non-gbr bearer per UE
uint64_t ue_AggregatedMaximumBitrateUL; uint64_t ue_AggregatedMaximumBitrateUL;
///CQI scheduling interval in subframes. ///CQI scheduling interval in subframes.
//Delete uint16_t cqiSchedInterval; uint16_t cqiSchedInterval;
///Contention resolution timer used during random access ///Contention resolution timer used during random access
uint8_t mac_ContentionResolutionTimer; uint8_t mac_ContentionResolutionTimer;
//Delete uint16_t max_allowed_rbs[MAX_NUM_LCID]; uint16_t max_allowed_rbs[MAX_NUM_LCID];
uint8_t max_mcs[MAX_NUM_LCID]; uint8_t max_mcs[MAX_NUM_LCID];
...@@ -666,19 +774,19 @@ typedef struct { ...@@ -666,19 +774,19 @@ typedef struct {
uint8_t harq_pid[MAX_NUM_CCs]; uint8_t harq_pid[MAX_NUM_CCs];
uint8_t round[MAX_NUM_CCs]; uint8_t round[MAX_NUM_CCs];
uint8_t dl_pow_off[MAX_NUM_CCs]; uint8_t dl_pow_off[MAX_NUM_CCs];
//Delete uint16_t pre_nb_available_rbs[MAX_NUM_CCs]; uint16_t pre_nb_available_rbs[MAX_NUM_CCs];
//Delete unsigned char rballoc_sub_UE[MAX_NUM_CCs][N_RBG_MAX]; unsigned char rballoc_sub_UE[MAX_NUM_CCs][N_RBG_MAX];
uint16_t ta_timer; uint16_t ta_timer;
int16_t ta_update; int16_t ta_update;
int32_t context_active_timer; int32_t context_active_timer;
//Delete int32_t cqi_req_timer; int32_t cqi_req_timer;
int32_t ul_inactivity_timer; int32_t ul_inactivity_timer;
int32_t ul_failure_timer; int32_t ul_failure_timer;
int32_t ul_scheduled; int32_t ul_scheduled;
int32_t ra_pdcch_order_sent; int32_t ra_pdcch_order_sent;
int32_t ul_out_of_sync; int32_t ul_out_of_sync;
int32_t phr_received;// received from Msg3 MAC Control Element int32_t phr_received;
} UE_sched_ctrl_NB; } UE_sched_ctrl;
/*! \brief eNB template for the Random access information */ /*! \brief eNB template for the Random access information */
typedef struct { typedef struct {
/// Flag to indicate this process is active /// Flag to indicate this process is active
...@@ -701,7 +809,7 @@ typedef struct { ...@@ -701,7 +809,7 @@ typedef struct {
uint8_t RA_dci_fmt2; uint8_t RA_dci_fmt2;
/// Flag to indicate the eNB should generate RAR. This is triggered by detection of PRACH /// Flag to indicate the eNB should generate RAR. This is triggered by detection of PRACH
uint8_t generate_rar; uint8_t generate_rar;
/// Subframe where preamble was received, Delete? /// Subframe where preamble was received
uint8_t preamble_subframe; uint8_t preamble_subframe;
/// Subframe where Msg3 is to be sent /// Subframe where Msg3 is to be sent
uint8_t Msg3_subframe; uint8_t Msg3_subframe;
...@@ -713,37 +821,43 @@ typedef struct { ...@@ -713,37 +821,43 @@ typedef struct {
rnti_t rnti; rnti_t rnti;
/// RA RNTI allocated from received PRACH /// RA RNTI allocated from received PRACH
uint16_t RA_rnti; uint16_t RA_rnti;
/// Delete Received preamble_index, use subcarrier index? /// Received preamble_index
uint8_t preamble_index;
/// Received UE Contention Resolution Identifier /// Received UE Contention Resolution Identifier
uint8_t cont_res_id[6]; uint8_t cont_res_id[6];
/// Timing offset indicated by PHY /// Timing offset indicated by PHY
int16_t timing_offset; int16_t timing_offset;
/// Timeout for RRC connection /// Timeout for RRC connection
int16_t RRC_timer; int16_t RRC_timer;
} RA_TEMPLATE_NB; } RA_TEMPLATE;
/*! \Delete struct SBMAP_CONF, brief subband bitmap confguration (for ALU icic algo purpose), in test phase */
/*! \brief UE list used by eNB to order UEs/CC for scheduling*/ /*! \brief subband bitmap confguration (for ALU icic algo purpose), in test phase */
typedef struct { typedef struct {
/// DLSCH pdu uint8_t sbmap[NUMBER_OF_SUBBANDS_MAX]; //13 = number of SB MAX for 100 PRB
DLSCH_PDU_NB DLSCH_pdu[MAX_NUM_CCs][2][NUMBER_OF_UE_MAX]; uint8_t periodicity;
uint8_t first_subframe;
uint8_t sb_size;
uint8_t nb_active_sb;
} SBMAP_CONF;
/*! \brief UE list used by eNB to order UEs/CC for scheduling*/
typedef struct {
/// DLSCH pdu
DLSCH_PDU DLSCH_pdu[MAX_NUM_CCs][2][NUMBER_OF_UE_MAX];
/// DCI template and MAC connection parameters for UEs /// DCI template and MAC connection parameters for UEs
UE_TEMPLATE_NB UE_template[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; UE_TEMPLATE UE_template[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
/// DCI template and MAC connection for RA processes /// DCI template and MAC connection for RA processes
int pCC_id[NUMBER_OF_UE_MAX]; int pCC_id[NUMBER_OF_UE_MAX];
/// Delete sorted downlink component carrier for the scheduler /// sorted downlink component carrier for the scheduler
int ordered_CCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
/// Delete number of downlink active component carrier /// number of downlink active component carrier
int numactiveCCs[NUMBER_OF_UE_MAX];
/// Delete sorted uplink component carrier for the scheduler /// sorted uplink component carrier for the scheduler
int ordered_ULCCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
/// Delete number of uplink active component carrier /// number of uplink active component carrier
int numactiveULCCs[NUMBER_OF_UE_MAX];
/// Delete number of downlink active component carrier /// number of downlink active component carrier
uint8_t dl_CC_bitmap[NUMBER_OF_UE_MAX];
/// eNB to UE statistics /// eNB to UE statistics
eNB_UE_STATS eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; eNB_UE_STATS eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
/// scheduling control info /// scheduling control info
...@@ -756,68 +870,57 @@ typedef struct { ...@@ -756,68 +870,57 @@ typedef struct {
int avail; int avail;
int num_UEs; int num_UEs;
boolean_t active[NUMBER_OF_UE_MAX]; boolean_t active[NUMBER_OF_UE_MAX];
} UE_list_t_NB; } UE_list_t;
/*! \brief eNB common channels */ /*! \brief eNB common channels */
typedef struct { typedef struct {
int physCellId;
int p_eNB;
int Ncp;
int eutra_band;
uint32_t dl_CarrierFreq;
BCCH_BCH_Message_NB_t *mib;
RadioResourceConfigCommonSIB_NB_r13 *radioResourceConfigCommon;
ARFCN_ValueEUTRA_r9_t ul_CarrierFreq;
struct MasterInformationBlock_NB__operationModeInfo_r13_u operationModeInfo;
/// Outgoing DCI for PHY generated by eNB scheduler /// Outgoing DCI for PHY generated by eNB scheduler
DCI_PDU_NB DCI_pdu; DCI_PDU DCI_pdu;
/// Outgoing BCCH pdu for PHY /// Outgoing BCCH pdu for PHY
BCCH_PDU_NB BCCH_pdu; BCCH_PDU BCCH_pdu;
/// Outgoing BCCH DCI allocation /// Outgoing BCCH DCI allocation
uint32_t BCCH_alloc_pdu; uint32_t BCCH_alloc_pdu;
/// Outgoing CCCH pdu for PHY /// Outgoing CCCH pdu for PHY
CCCH_PDU CCCH_pdu; CCCH_PDU CCCH_pdu;
RA_TEMPLATE_NB RA_template[NB_RA_PROC_MAX]; RA_TEMPLATE RA_template[NB_RA_PROC_MAX];
/// Delete VRB map for common channels /// VRB map for common channels
uint8_t vrb_map[100];
/// Delete MBSFN SubframeConfig /// MBSFN SubframeConfig
struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8];
/// Delete number of subframe allocation pattern available for MBSFN sync area /// number of subframe allocation pattern available for MBSFN sync area
uint8_t num_sf_allocation_pattern;
// #if defined(Rel10) || defined(Rel14) #if defined(Rel10) || defined(Rel14)
/// Delete MBMS Flag /// MBMS Flag
uint8_t MBMS_flag;
/// Delete Outgoing MCCH pdu for PHY /// Outgoing MCCH pdu for PHY
MCCH_PDU MCCH_pdu;
/// Delete MCCH active flag /// MCCH active flag
uint8_t msi_active;
/// Delete MCCH active flag /// MCCH active flag
uint8_t mcch_active;
/// Delete MTCH active flag /// MTCH active flag
uint8_t mtch_active;
/// Delete number of active MBSFN area /// number of active MBSFN area
uint8_t num_active_mbsfn_area;
/// Delete MBSFN Area Info /// MBSFN Area Info
struct MBSFN_AreaInfo_r9 *mbsfn_AreaInfo[MAX_MBSFN_AREA];
/// Delete PMCH Config /// PMCH Config
struct PMCH_Config_r9 *pmch_Config[MAX_PMCH_perMBSFN];
/// Delete MBMS session info list /// MBMS session info list
struct MBMS_SessionInfoList_r9 *mbms_SessionList[MAX_PMCH_perMBSFN];
/// Delete Outgoing MCH pdu for PHY /// Outgoing MCH pdu for PHY
MCH_PDU MCH_pdu;
// #endif #endif
// #ifdef CBA #ifdef CBA
/// Delete number of CBA groups /// number of CBA groups
uint8_t num_active_cba_groups;
/// Delete RNTI for each CBA group /// RNTI for each CBA group
uint16_t cba_rnti[NUM_MAX_CBA_GROUP];
/// Delete MCS for each CBA group /// MCS for each CBA group
uint8_t group_mcs[NUM_MAX_CBA_GROUP];
// #endif #endif
} COMMON_channels_t_NB; } COMMON_channels_t;
/*! \brief top level eNB MAC structure */ /*! \brief top level eNB MAC structure */
typedef struct { typedef struct {
/// ///
uint16_t Node_id; uint16_t Node_id;
...@@ -826,43 +929,42 @@ typedef struct { ...@@ -826,43 +929,42 @@ typedef struct {
/// subframe counter /// subframe counter
sub_frame_t subframe; sub_frame_t subframe;
/// Common cell resources /// Common cell resources
COMMON_channels_t_NB common_channels[MAX_NUM_CCs]; COMMON_channels_t common_channels[MAX_NUM_CCs];
UE_list_t_NB UE_list; UE_list_t UE_list;
///Delete subband bitmap configuration, no related CQI report
// / Modify CCE table used to build DCI scheduling information
int CCE_table[MAX_NUM_CCs][12];//180 khz for Anchor carrier
///subband bitmap configuration
SBMAP_CONF sbmap_conf;
/// CCE table used to build DCI scheduling information
int CCE_table[MAX_NUM_CCs][800];
/// active flag for Other lcid /// active flag for Other lcid
uint8_t lcid_active[NB_RB_MAX]; uint8_t lcid_active[NB_RB_MAX];
/// eNB stats /// eNB stats
eNB_STATS eNB_stats[MAX_NUM_CCs]; eNB_STATS eNB_stats[MAX_NUM_CCs];
// MAC function execution peformance profiler // MAC function execution peformance profiler
/// processing time of eNB scheduler /// processing time of eNB scheduler
time_stats_t eNB_scheduler; time_stats_t eNB_scheduler;
/// processing time of eNB scheduler for SI /// processing time of eNB scheduler for SI
time_stats_t schedule_si; time_stats_t schedule_si;
/// processing time of eNB scheduler for Random access /// processing time of eNB scheduler for Random access
time_stats_t schedule_ra; time_stats_t schedule_ra;
/// processing time of eNB ULSCH scheduler /// processing time of eNB ULSCH scheduler
time_stats_t schedule_ulsch; time_stats_t schedule_ulsch;
/// processing time of eNB DCI generation /// processing time of eNB DCI generation
time_stats_t fill_DLSCH_dci; time_stats_t fill_DLSCH_dci;
/// processing time of eNB MAC preprocessor /// processing time of eNB MAC preprocessor
time_stats_t schedule_dlsch_preprocessor; time_stats_t schedule_dlsch_preprocessor;
/// processing time of eNB DLSCH scheduler /// processing time of eNB DLSCH scheduler
time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor
/// Delete processing time of eNB MCH scheduler /// processing time of eNB MCH scheduler
time_stats_t schedule_mch;
/// processing time of eNB ULSCH reception /// processing time of eNB ULSCH reception
time_stats_t rx_ulsch_sdu; // include rlc_data_ind time_stats_t rx_ulsch_sdu; // include rlc_data_ind
} eNB_MAC_INST_NB; } eNB_MAC_INST;
/* /*
* UE part * UE part
*/ */
/*!\brief UE layer 2 status */ /*!\brief UE layer 2 status */
typedef enum { typedef enum {
...@@ -870,7 +972,7 @@ typedef enum { ...@@ -870,7 +972,7 @@ typedef enum {
CONNECTION_LOST, CONNECTION_LOST,
PHY_RESYNCH, PHY_RESYNCH,
PHY_HO_PRACH PHY_HO_PRACH
} UE_L2_STATE_t_NB; } UE_L2_STATE_t;
/*!\brief UE scheduling info */ /*!\brief UE scheduling info */
typedef struct { typedef struct {
...@@ -884,10 +986,10 @@ typedef struct { ...@@ -884,10 +986,10 @@ typedef struct {
uint16_t All_lcid_buffer_size_lastTTI; uint16_t All_lcid_buffer_size_lastTTI;
/// buffer status for each lcid /// buffer status for each lcid
uint8_t LCID_status[MAX_NUM_LCID]; uint8_t LCID_status[MAX_NUM_LCID];
/// Delete SR pending as defined in 36.321 /// SR pending as defined in 36.321
uint8_t SR_pending;
/// Delete SR_COUNTER as defined in 36.321 /// SR_COUNTER as defined in 36.321
uint16_t SR_COUNTER;
/// logical channel group ide for each LCID /// logical channel group ide for each LCID
uint8_t LCGID[MAX_NUM_LCID]; uint8_t LCGID[MAX_NUM_LCID];
/// retxBSR-Timer, default value is sf2560 /// retxBSR-Timer, default value is sf2560
...@@ -898,42 +1000,41 @@ typedef struct { ...@@ -898,42 +1000,41 @@ typedef struct {
uint16_t periodicBSR_Timer; uint16_t periodicBSR_Timer;
/// periodicBSR_SF, number of subframe before triggering a periodic BSR /// periodicBSR_SF, number of subframe before triggering a periodic BSR
uint16_t periodicBSR_SF; uint16_t periodicBSR_SF;
/// Delete sr_ProhibitTimer in MAC_MainConfig, default value is 0: not configured /// default value is 0: not configured
uint16_t sr_ProhibitTimer;
/// Delete sr ProhibitTime running /// sr ProhibitTime running
uint8_t sr_ProhibitTimer_Running;
/// Delete maxHARQ_Tx in MAC_MainConfig, default value to n5 /// default value to n5
uint16_t maxHARQ_Tx;
/// delete ttiBundling in MAC_MainConfig, default value is false /// default value is false
uint16_t ttiBundling;
/// default value is release /// default value is release
struct DRX_Config *drx_config; struct DRX_Config *drx_config;
/// Delete phr_config in MAC_MainConfig, default value is release /// default value is release
struct MAC_MainConfig__phr_Config *phr_config;
///Delete timer before triggering a periodic PHR ///timer before triggering a periodic PHR
uint16_t periodicPHR_Timer;
///Delete timer before triggering a prohibit PHR ///timer before triggering a prohibit PHR
uint16_t prohibitPHR_Timer;
///DL Pathloss change value ///DL Pathloss change value
uint16_t PathlossChange; uint16_t PathlossChange;
///Delete number of subframe before triggering a periodic PHR ///number of subframe before triggering a periodic PHR
int16_t periodicPHR_SF;
///Delete number of subframe before triggering a prohibit PHR ///number of subframe before triggering a prohibit PHR
int16_t prohibitPHR_SF;
///DL Pathloss Change in db ///DL Pathloss Change in db
uint16_t PathlossChange_db; uint16_t PathlossChange_db;
/// Delete extendedBSR_Sizes_r10, default value is false, only support short BSR /// default value is false
uint16_t extendedBSR_Sizes_r10;
/// Delete extendedPHR_r10, default value is false /// default value is false
uint16_t extendedPHR_r10;
//For NB-IoT in TS 36.321, prioritisedBitRate, bucketSizeDuration and the corresponding steps of the Logical Channel Prioritisation procedure (i.e., Step 1 and Step 2 below) are not applicable.
//Delete Bj bucket usage per lcid,
//Delete Bucket size per lcid
} UE_SCHEDULING_INFO_NB; //Bj bucket usage per lcid
int16_t Bj[MAX_NUM_LCID];
// Bucket size per lcid
int16_t bucket_size[MAX_NUM_LCID];
} UE_SCHEDULING_INFO;
/*!\brief Top level UE MAC structure */ /*!\brief Top level UE MAC structure */
typedef struct { typedef struct {
uint16_t Node_id; uint16_t Node_id;
...@@ -947,36 +1048,36 @@ typedef struct { ...@@ -947,36 +1048,36 @@ typedef struct {
sub_frame_t txSubframe; sub_frame_t txSubframe;
/// C-RNTI of UE /// C-RNTI of UE
uint16_t crnti; uint16_t crnti;
/// Delete C-RNTI of UE before HO /// C-RNTI of UE before HO
rnti_t crnti_before_ho; ///user id (rnti) of connected UEs
/// uplink active flag /// uplink active flag
uint8_t ul_active; uint8_t ul_active;
/// pointer to RRC PHY configuration /// pointer to RRC PHY configuration
RadioResourceConfigCommonSIB_NB_r13 *radioResourceConfigCommon; RadioResourceConfigCommonSIB_t *radioResourceConfigCommon;
/// pointer to RACH_ConfigDedicated (NULL when not active, i.e. upon HO completion or T304 expiry) /// pointer to RACH_ConfigDedicated (NULL when not active, i.e. upon HO completion or T304 expiry)
struct RACH_ConfigDedicated *rach_ConfigDedicated; struct RACH_ConfigDedicated *rach_ConfigDedicated;
/// pointer to RRC PHY configuration /// pointer to RRC PHY configuration
struct PhysicalConfigDedicated_NB_r13 *physicalConfigDedicated; struct PhysicalConfigDedicated *physicalConfigDedicated;
#if defined(Rel10) || defined(Rel14) #if defined(Rel10) || defined(Rel14)
/// Delete pointer to RRC PHY configuration SCEll /// pointer to RRC PHY configuration SCEll
struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10;
#endif #endif
/// Delete pointer to TDD Configuration (NULL for FDD) /// pointer to TDD Configuration (NULL for FDD)
TDD_Config_t *tdd_Config;
/// Delete Number of adjacent cells to measure /// Number of adjacent cells to measure
uint8_t n_adj_cells;
/// Delete Array of adjacent physical cell ids /// Array of adjacent physical cell ids
uint32_t adj_cell_id[6];
/// Pointer to RRC MAC configuration /// Pointer to RRC MAC configuration
MAC_MainConfig_NB_r13 *macConfig; MAC_MainConfig_t *macConfig;
/// Delete Pointer to RRC Measurement gap configuration /// Pointer to RRC Measurement gap configuration
MeasGapConfig_t *measGapConfig;
/// Pointers to LogicalChannelConfig indexed by LogicalChannelIdentity. Note NULL means LCHAN is inactive. /// Pointers to LogicalChannelConfig indexed by LogicalChannelIdentity. Note NULL means LCHAN is inactive.
LogicalChannelConfig_NB_r13 *logicalChannelConfig[MAX_NUM_LCID]; LogicalChannelConfig_t *logicalChannelConfig[MAX_NUM_LCID];
/// Scheduling Information /// Scheduling Information
UE_SCHEDULING_INFO_NB scheduling_info; UE_SCHEDULING_INFO scheduling_info;
/// Outgoing CCCH pdu for PHY /// Outgoing CCCH pdu for PHY
CCCH_PDU_NB CCCH_pdu; CCCH_PDU CCCH_pdu;
/// Incoming DLSCH pdu for PHY /// Incoming DLSCH pdu for PHY
//DLSCH_PDU DLSCH_pdu[NUMBER_OF_UE_MAX][2]; //DLSCH_PDU DLSCH_pdu[NUMBER_OF_UE_MAX][2];
/// number of attempt for rach /// number of attempt for rach
...@@ -987,12 +1088,12 @@ typedef struct { ...@@ -987,12 +1088,12 @@ typedef struct {
int8_t RA_window_cnt; int8_t RA_window_cnt;
/// Random-access Msg3 size in bytes /// Random-access Msg3 size in bytes
uint8_t RA_Msg3_size; uint8_t RA_Msg3_size;
/// delete Random-access prachMaskIndex, NB use subcarrier index /// Random-access prachMaskIndex
uint8_t RA_prachMaskIndex;
/// Flag indicating Preamble set (A,B) used for first Msg3 transmission /// Flag indicating Preamble set (A,B) used for first Msg3 transmission
uint8_t RA_usedGroupA; uint8_t RA_usedGroupA;
/// Delete Random-access Resources, cause it use for ra_PreambleIndex and ra_RACH_MaskIndex. /// Random-access Resources
PRACH_RESOURCES_t RA_prach_resources;
/// Random-access PREAMBLE_TRANSMISSION_COUNTER /// Random-access PREAMBLE_TRANSMISSION_COUNTER
uint8_t RA_PREAMBLE_TRANSMISSION_COUNTER; uint8_t RA_PREAMBLE_TRANSMISSION_COUNTER;
/// Random-access backoff counter /// Random-access backoff counter
...@@ -1027,48 +1128,52 @@ typedef struct { ...@@ -1027,48 +1128,52 @@ typedef struct {
/// periodBSR-Timer expires flag /// periodBSR-Timer expires flag
uint8_t periodBSRTimer_expires_flag; uint8_t periodBSRTimer_expires_flag;
/// Delete MBSFN_Subframe Configuration /// MBSFN_Subframe Configuration
struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8]; // FIXME replace 8 by MAX_MBSFN_AREA?
/// Delete number of subframe allocation pattern available for MBSFN sync area /// number of subframe allocation pattern available for MBSFN sync area
uint8_t num_sf_allocation_pattern;
#if defined(Rel10) || defined(Rel14)
// #if defined(Rel10) || defined(Rel14) /// number of active MBSFN area
/// Delete number of active MBSFN area uint8_t num_active_mbsfn_area;
/// MBSFN Area Info
/// Delete MBSFN Area Info struct MBSFN_AreaInfo_r9 *mbsfn_AreaInfo[MAX_MBSFN_AREA];
/// PMCH Config
/// Delete PMCH Config struct PMCH_Config_r9 *pmch_Config[MAX_PMCH_perMBSFN];
/// MCCH status
/// Delete MCCH status uint8_t mcch_status;
/// MSI status
/// Delete MSI status uint8_t msi_status;// could be an array if there are >1 MCH in one MBSFN area
#endif
// #endif
/// Delete UE query for MCH subframe processing time
//#ifdef CBA //#ifdef CBA
/// CBA RNTI for each group /// CBA RNTI for each group
uint16_t cba_rnti[NUM_MAX_CBA_GROUP];
/// Delete last SFN for CBA channel access /// last SFN for CBA channel access
uint8_t cba_last_access[NUM_MAX_CBA_GROUP];
//#endif //#endif
/// total UE scheduler processing time /// total UE scheduler processing time
time_stats_t ue_scheduler; // total time_stats_t ue_scheduler; // total
/// UE ULSCH tx processing time inlcuding RLC interface (rlc_data_req) and mac header generation /// UE ULSCH tx processing time inlcuding RLC interface (rlc_data_req) and mac header generation
time_stats_t tx_ulsch_sdu; time_stats_t tx_ulsch_sdu;
/// UE DLSCH rx processing time inlcuding RLC interface (mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind) and mac header parser /// UE DLSCH rx processing time inlcuding RLC interface (mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind) and mac header parser
time_stats_t rx_dlsch_sdu; time_stats_t rx_dlsch_sdu ;
/// Delete UE query for MCH subframe processing time /// UE query for MCH subframe processing time
time_stats_t ue_query_mch;
/// UE MCH rx processing time
time_stats_t rx_mch_sdu;
/// UE BCCH rx processing time including RLC interface (mac_rrc_data_ind)
time_stats_t rx_si;
/// UE PCCH rx processing time including RLC interface (mac_rrc_data_ind)
time_stats_t rx_p;
} UE_MAC_INST;
/*! \brief ID of the neighboring cells used for HO*/
typedef struct {
uint16_t cell_ids[6];
uint8_t n_adj_cells;
} neigh_cell_id_t;
/* Delete UE MCH rx processing time , no support in NB-IoT*/ #include "proto.h"
/*@}*/
#endif /*__LAYER2_MAC_DEFS_H__ */
/// UE BCCH rx processing time including RLC interface (mac_rrc_data_ind)
time_stats_t rx_si;
/// UE PCCH rx processing time including RLC interface (mac_rrc_data_ind)
time_stats_t rx_p;
} UE_MAC_INST_NB;
/* Delete struct neigh_cell_id_t, no support in NB-IoT*/
#include "proto.h"
/*@}*/
#endif /*__LAYER2_MAC_DEFS_H__ */
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment