Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangwenhui
OpenXG-RAN
Commits
8d2f7a54
Commit
8d2f7a54
authored
Jun 29, 2020
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_MAC_CE_GlobalEdge' into develop_integration_2020_w26
parents
42057bcc
0cbe7e40
Changes
3
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
378 additions
and
86 deletions
+378
-86
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
+115
-57
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+191
-27
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+72
-2
No files found.
openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
View file @
8d2f7a54
...
@@ -71,72 +71,130 @@
...
@@ -71,72 +71,130 @@
// R: Reserved bit, set to zero.
// R: Reserved bit, set to zero.
typedef
struct
{
typedef
struct
{
uint8_t
LCID
:
6
;
// octet 1 [5:0]
uint8_t
LCID
:
6
;
// octet 1 [5:0]
uint8_t
F
:
1
;
// octet 1 [6]
uint8_t
F
:
1
;
// octet 1 [6]
uint8_t
R
:
1
;
// octet 1 [7]
uint8_t
R
:
1
;
// octet 1 [7]
uint8_t
L
:
8
;
// octet 2 [7:0]
uint8_t
L
:
8
;
// octet 2 [7:0]
}
__attribute__
((
__packed__
))
NR_MAC_SUBHEADER_SHORT
;
}
__attribute__
((
__packed__
))
NR_MAC_SUBHEADER_SHORT
;
typedef
struct
{
typedef
struct
{
uint8_t
LCID
:
6
;
// octet 1 [5:0]
uint8_t
LCID
:
6
;
// octet 1 [5:0]
uint8_t
F
:
1
;
// octet 1 [6]
uint8_t
F
:
1
;
// octet 1 [6]
uint8_t
R
:
1
;
// octet 1 [7]
uint8_t
R
:
1
;
// octet 1 [7]
uint8_t
L1
:
8
;
// octet 2 [7:0]
uint8_t
L1
:
8
;
// octet 2 [7:0]
uint8_t
L2
:
8
;
// octet 3 [7:0]
uint8_t
L2
:
8
;
// octet 3 [7:0]
}
__attribute__
((
__packed__
))
NR_MAC_SUBHEADER_LONG
;
}
__attribute__
((
__packed__
))
NR_MAC_SUBHEADER_LONG
;
typedef
struct
{
typedef
struct
{
uint8_t
LCID
:
6
;
// octet 1 [5:0]
uint8_t
LCID
:
6
;
// octet 1 [5:0]
uint8_t
R
:
2
;
// octet 1 [7:6]
uint8_t
R
:
2
;
// octet 1 [7:6]
}
__attribute__
((
__packed__
))
NR_MAC_SUBHEADER_FIXED
;
}
__attribute__
((
__packed__
))
NR_MAC_SUBHEADER_FIXED
;
// BSR MAC CEs
// BSR MAC CEs
// TS 38.321 ch. 6.1.3.1
// TS 38.321 ch. 6.1.3.1
// Short BSR for a specific logical channel group ID
// Short BSR for a specific logical channel group ID
typedef
struct
{
typedef
struct
{
uint8_t
Buffer_size
:
5
;
// octet 1 LSB
uint8_t
Buffer_size
:
5
;
// octet 1 LSB
uint8_t
LcgID
:
3
;
// octet 1 MSB
uint8_t
LcgID
:
3
;
// octet 1 MSB
}
__attribute__
((
__packed__
))
NR_BSR_SHORT
;
}
__attribute__
((
__packed__
))
NR_BSR_SHORT
;
typedef
NR_BSR_SHORT
NR_BSR_SHORT_TRUNCATED
;
typedef
NR_BSR_SHORT
NR_BSR_SHORT_TRUNCATED
;
// Long BSR for all logical channel group ID
// Long BSR for all logical channel group ID
typedef
struct
{
typedef
struct
{
uint8_t
Buffer_size7
:
8
;
uint8_t
Buffer_size7
:
8
;
uint8_t
Buffer_size6
:
8
;
uint8_t
Buffer_size6
:
8
;
uint8_t
Buffer_size5
:
8
;
uint8_t
Buffer_size5
:
8
;
uint8_t
Buffer_size4
:
8
;
uint8_t
Buffer_size4
:
8
;
uint8_t
Buffer_size3
:
8
;
uint8_t
Buffer_size3
:
8
;
uint8_t
Buffer_size2
:
8
;
uint8_t
Buffer_size2
:
8
;
uint8_t
Buffer_size1
:
8
;
uint8_t
Buffer_size1
:
8
;
uint8_t
Buffer_size0
:
8
;
uint8_t
Buffer_size0
:
8
;
uint8_t
LcgID0
:
1
;
uint8_t
LcgID0
:
1
;
uint8_t
LcgID1
:
1
;
uint8_t
LcgID1
:
1
;
uint8_t
LcgID2
:
1
;
uint8_t
LcgID2
:
1
;
uint8_t
LcgID3
:
1
;
uint8_t
LcgID3
:
1
;
uint8_t
LcgID4
:
1
;
uint8_t
LcgID4
:
1
;
uint8_t
LcgID5
:
1
;
uint8_t
LcgID5
:
1
;
uint8_t
LcgID6
:
1
;
uint8_t
LcgID6
:
1
;
uint8_t
LcgID7
:
1
;
uint8_t
LcgID7
:
1
;
}
__attribute__
((
__packed__
))
NR_BSR_LONG
;
}
__attribute__
((
__packed__
))
NR_BSR_LONG
;
typedef
NR_BSR_LONG
NR_BSR_LONG_TRUNCATED
;
typedef
NR_BSR_LONG
NR_BSR_LONG_TRUNCATED
;
// 38.321 ch. 6.1.3.4
// 38.321 ch. 6.1.3.4
typedef
struct
{
typedef
struct
{
uint8_t
TA_COMMAND
:
6
;
// octet 1 [5:0]
uint8_t
TA_COMMAND
:
6
;
// octet 1 [5:0]
uint8_t
TAGID
:
2
;
// octet 1 [7:6]
uint8_t
TAGID
:
2
;
// octet 1 [7:6]
}
__attribute__
((
__packed__
))
NR_MAC_CE_TA
;
}
__attribute__
((
__packed__
))
NR_MAC_CE_TA
;
// single Entry PHR MAC CE
// single Entry PHR MAC CE
// TS 38.321 ch. 6.1.3.8
// TS 38.321 ch. 6.1.3.8
typedef
struct
{
typedef
struct
{
uint8_t
PH
:
6
;
uint8_t
PH
:
6
;
uint8_t
R1
:
2
;
uint8_t
R1
:
2
;
uint8_t
PCMAX
:
6
;
uint8_t
PCMAX
:
6
;
uint8_t
R2
:
6
;
uint8_t
R2
:
6
;
}
__attribute__
((
__packed__
))
NR_SINGLE_ENTRY_PHR_MAC_CE
;
}
__attribute__
((
__packed__
))
NR_SINGLE_ENTRY_PHR_MAC_CE
;
// SP ZP CSI-RS Resource Set Activation/Deactivation MAC CE
// 38.321 ch. 6.1.3.19
typedef
struct
{
uint8_t
BWPID
:
2
;
// octet 1 [1:0]
uint8_t
CELLID
:
5
;
// octet 1 [6:2]
uint8_t
A_D
:
1
;
// octet 1 [7]
uint8_t
CSIRS_RSC_ID
:
4
;
// octet 2 [3:0]
uint8_t
R
:
4
;
// octet 2 [7:4]
}
__attribute__
((
__packed__
))
NR_MAC_CE_SP_ZP_CSI_RS_RES_SET
;
//TS 38.321 Sec 6.1.3.15, TCI State indicaton for UE-Specific PDCCH MAC CE
typedef
struct
{
uint8_t
CoresetId1
:
3
;
//Octect 1 [2:0]
uint8_t
ServingCellId
:
5
;
//Octect 1 [7:3]
uint8_t
TciStateId
:
7
;
//Octect 2 [6:0]
uint8_t
CoresetId2
:
1
;
//Octect 2 [7]
}
__attribute__
((
__packed__
))
NR_TCI_PDCCH
;
//TS 38.321 Sec 6.1.3.14, TCI State activation/deactivation for UE Specific PDSCH MAC CE
typedef
struct
{
uint8_t
BWP_Id
:
2
;
//Octect 1 [1:0]
uint8_t
ServingCellId
:
5
;
//Octect 1 [6:2]
uint8_t
R
:
1
;
//Octect 1 [7]
uint8_t
T
[];
//Octects 2 to MAX TCI States/8
}
__attribute__
((
__packed__
))
NR_TCI_PDSCH_APERIODIC_CSI
;
//TS 6.1.3.16, SP CSI reporting on PUCCH Activation/Deactivation MAC CE
typedef
struct
{
uint8_t
BWP_Id
:
2
;
//Octect 1 [1:0]
uint8_t
ServingCellId
:
5
;
//Octect 1 [6:2]
uint8_t
R1
:
1
;
//Octect 1 [7]
uint8_t
S0
:
1
;
//Octect 2 [0]
uint8_t
S1
:
1
;
//Octect 2 [1]
uint8_t
S2
:
1
;
//Octect 2 [2]
uint8_t
S3
:
1
;
//Octect 2 [3]
uint8_t
R2
:
4
;
//Octect 2 [7:4]
}
__attribute__
((
__packed__
))
NR_PUCCH_CSI_REPORTING
;
//TS 38.321 sec 6.1.3.12
//SP CSI-RS / CSI-IM Resource Set Activation/Deactivation MAC CE
typedef
struct
{
uint8_t
BWP_ID
:
2
;
uint8_t
SCID
:
5
;
uint8_t
A_D
:
1
;
uint8_t
SP_CSI_RSID
:
6
;
uint8_t
IM
:
1
;
uint8_t
R1
:
1
;
uint8_t
SP_CSI_IMID
:
6
;
uint8_t
R2
:
2
;
struct
TCI_S
{
uint8_t
TCI_STATE_ID
:
6
;
uint8_t
R
:
2
;
}
__attribute__
((
__packed__
))
TCI_STATE
;
}
__attribute__
((
__packed__
))
CSI_RS_CSI_IM_ACT_DEACT_MAC_CE
;
//* RAR MAC subheader // TS 38.321 ch. 6.1.5, 6.2.2 *//
//* RAR MAC subheader // TS 38.321 ch. 6.1.5, 6.2.2 *//
// - E: The Extension field is a flag indicating if the MAC subPDU including this MAC subheader is the last MAC subPDU or not in the MAC PDU
// - E: The Extension field is a flag indicating if the MAC subPDU including this MAC subheader is the last MAC subPDU or not in the MAC PDU
// - T: The Type field is a flag indicating whether the MAC subheader contains a Random Access Preamble ID or a Backoff Indicator (0, BI) (1, RAPID)
// - T: The Type field is a flag indicating whether the MAC subheader contains a Random Access Preamble ID or a Backoff Indicator (0, BI) (1, RAPID)
...
@@ -146,30 +204,30 @@ typedef struct {
...
@@ -146,30 +204,30 @@ typedef struct {
/*!\brief RAR MAC subheader with RAPID */
/*!\brief RAR MAC subheader with 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__
))
NR_RA_HEADER_RAPID
;
}
__attribute__
((
__packed__
))
NR_RA_HEADER_RAPID
;
/*!\brief RAR MAC subheader with Backoff Indicator */
/*!\brief RAR MAC subheader with Backoff Indicator */
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__
))
NR_RA_HEADER_BI
;
}
__attribute__
((
__packed__
))
NR_RA_HEADER_BI
;
// TS 38.321 ch. 6.2.3
// TS 38.321 ch. 6.2.3
typedef
struct
{
typedef
struct
{
uint8_t
TA1
:
7
;
// octet 1 [6:0]
uint8_t
TA1
:
7
;
// octet 1 [6:0]
uint8_t
R
:
1
;
// octet 1 [7]
uint8_t
R
:
1
;
// octet 1 [7]
uint8_t
UL_GRANT_1
:
3
;
// octet 2 [2:0]
uint8_t
UL_GRANT_1
:
3
;
// octet 2 [2:0]
uint8_t
TA2
:
5
;
// octet 2 [7:3]
uint8_t
TA2
:
5
;
// octet 2 [7:3]
uint8_t
UL_GRANT_2
:
8
;
// octet 3 [7:0]
uint8_t
UL_GRANT_2
:
8
;
// octet 3 [7:0]
uint8_t
UL_GRANT_3
:
8
;
// octet 4 [7:0]
uint8_t
UL_GRANT_3
:
8
;
// octet 4 [7:0]
uint8_t
UL_GRANT_4
:
8
;
// octet 5 [7:0]
uint8_t
UL_GRANT_4
:
8
;
// octet 5 [7:0]
uint8_t
TCRNTI_1
:
8
;
// octet 6 [7:0]
uint8_t
TCRNTI_1
:
8
;
// octet 6 [7:0]
uint8_t
TCRNTI_2
:
8
;
// octet 7 [7:0]
uint8_t
TCRNTI_2
:
8
;
// octet 7 [7:0]
}
__attribute__
((
__packed__
))
NR_MAC_RAR
;
}
__attribute__
((
__packed__
))
NR_MAC_RAR
;
// 38.321 ch6.2.1, 38.331
// 38.321 ch6.2.1, 38.331
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
8d2f7a54
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
8d2f7a54
...
@@ -179,6 +179,72 @@ typedef struct {
...
@@ -179,6 +179,72 @@ typedef struct {
uint8_t
num_sf_allocation_pattern
;
uint8_t
num_sf_allocation_pattern
;
}
NR_COMMON_channels_t
;
}
NR_COMMON_channels_t
;
// SP ZP CSI-RS Resource Set Activation/Deactivation MAC CE
typedef
struct
sp_zp_csirs
{
bool
is_scheduled
;
//ZP CSI-RS ACT/Deact MAC CE is scheduled
bool
act_deact
;
//Activation/Deactivation indication
uint8_t
serv_cell_id
;
//Identity of Serving cell for which MAC CE applies
uint8_t
bwpid
;
//Downlink BWP id
uint8_t
rsc_id
;
//SP ZP CSI-RS resource set
}
sp_zp_csirs_t
;
//SP CSI-RS / CSI-IM Resource Set Activation/Deactivation MAC CE
#define MAX_CSI_RESOURCE_SET 64
typedef
struct
csi_rs_im
{
bool
is_scheduled
;
bool
act_deact
;
uint8_t
serv_cellid
;
uint8_t
bwp_id
;
bool
im
;
uint8_t
csi_im_rsc_id
;
uint8_t
nzp_csi_rsc_id
;
uint8_t
nb_tci_resource_set_id
;
uint8_t
tci_state_id
[
MAX_CSI_RESOURCE_SET
];
}
csi_rs_im_t
;
typedef
struct
pdcchStateInd
{
bool
is_scheduled
;
uint8_t
servingCellId
;
uint8_t
coresetId
;
uint8_t
tciStateId
;
}
pdcchStateInd_t
;
typedef
struct
SPCSIReportingpucch
{
bool
is_scheduled
;
uint8_t
servingCellId
;
uint8_t
bwpId
;
bool
s0tos3_actDeact
[
4
];
}
SPCSIReportingpucch_t
;
#define MAX_APERIODIC_TRIGGER_STATES 128 //38.331
typedef
struct
aperiodicCSI_triggerStateSelection
{
bool
is_scheduled
;
uint8_t
servingCellId
;
uint8_t
bwpId
;
uint8_t
highestTriggerStateSelected
;
bool
triggerStateSelection
[
MAX_APERIODIC_TRIGGER_STATES
];
}
aperiodicCSI_triggerStateSelection_t
;
#define MAX_TCI_STATES 128 //38.331
typedef
struct
pdschTciStatesActDeact
{
bool
is_scheduled
;
uint8_t
servingCellId
;
uint8_t
bwpId
;
uint8_t
highestTciStateActivated
;
bool
tciStateActDeact
[
MAX_TCI_STATES
];
}
pdschTciStatesActDeact_t
;
typedef
struct
UE_info
{
sp_zp_csirs_t
sp_zp_csi_rs
;
csi_rs_im_t
csi_im
;
pdcchStateInd_t
pdcch_state_ind
;
SPCSIReportingpucch_t
SP_CSI_reporting_pucch
;
aperiodicCSI_triggerStateSelection_t
aperi_CSI_trigger
;
pdschTciStatesActDeact_t
pdsch_TCI_States_ActDeact
;
}
NR_UE_mac_ce_ctrl_t
;
typedef
struct
NR_sched_pucch
{
typedef
struct
NR_sched_pucch
{
int
frame
;
int
frame
;
int
ul_slot
;
int
ul_slot
;
...
@@ -188,6 +254,7 @@ typedef struct NR_sched_pucch {
...
@@ -188,6 +254,7 @@ typedef struct NR_sched_pucch {
struct
NR_sched_pucch
*
next_sched_pucch
;
struct
NR_sched_pucch
*
next_sched_pucch
;
}
NR_sched_pucch
;
}
NR_sched_pucch
;
/*! \brief scheduling control information set through an API */
/*! \brief scheduling control information set through an API */
typedef
struct
{
typedef
struct
{
uint64_t
dlsch_in_slot_bitmap
;
// static bitmap signaling which slot in a tdd period contains dlsch
uint64_t
dlsch_in_slot_bitmap
;
// static bitmap signaling which slot in a tdd period contains dlsch
...
@@ -195,6 +262,8 @@ typedef struct {
...
@@ -195,6 +262,8 @@ typedef struct {
NR_sched_pucch
*
sched_pucch
;
NR_sched_pucch
*
sched_pucch
;
uint16_t
ta_timer
;
uint16_t
ta_timer
;
int16_t
ta_update
;
int16_t
ta_update
;
int
dummy
;
NR_UE_mac_ce_ctrl_t
UE_mac_ce_ctrl
;
// MAC CE related information
}
NR_UE_sched_ctrl_t
;
}
NR_UE_sched_ctrl_t
;
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
...
@@ -213,7 +282,7 @@ typedef struct {
...
@@ -213,7 +282,7 @@ typedef struct {
NR_CellGroupConfig_t
*
secondaryCellGroup
[
MAX_MOBILES_PER_GNB
];
NR_CellGroupConfig_t
*
secondaryCellGroup
[
MAX_MOBILES_PER_GNB
];
}
NR_UE_list_t
;
}
NR_UE_list_t
;
/*! \brief top level
g
NB MAC structure */
/*! \brief top level
e
NB MAC structure */
typedef
struct
gNB_MAC_INST_s
{
typedef
struct
gNB_MAC_INST_s
{
/// Ethernet parameters for northbound midhaul interface
/// Ethernet parameters for northbound midhaul interface
eth_params_t
eth_params_n
;
eth_params_t
eth_params_n
;
...
@@ -280,6 +349,7 @@ typedef struct gNB_MAC_INST_s {
...
@@ -280,6 +349,7 @@ typedef struct gNB_MAC_INST_s {
}
gNB_MAC_INST
;
}
gNB_MAC_INST
;
typedef
struct
{
typedef
struct
{
uint8_t
format_indicator
;
//1 bit
uint8_t
format_indicator
;
//1 bit
uint16_t
frequency_domain_assignment
;
//up to 16 bits
uint16_t
frequency_domain_assignment
;
//up to 16 bits
uint8_t
time_domain_assignment
;
// 4 bits
uint8_t
time_domain_assignment
;
// 4 bits
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment