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
zzha zzha
OpenXG-RAN
Commits
cb31468c
Commit
cb31468c
authored
Apr 05, 2021
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
first version of scheduler for sib1
parent
438a6fe0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
59 additions
and
24 deletions
+59
-24
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+2
-1
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+4
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
+17
-16
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+5
-4
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+31
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+0
-3
No files found.
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
cb31468c
...
...
@@ -311,6 +311,7 @@ typedef struct {
NR_CellGroupConfig_t
*
scg
;
int
servCellIndex
;
NR_CSI_ReportConfig_t
*
csirc
;
long
physCellId
;
//// MAC config
NR_DRX_Config_t
*
drx_Config
;
NR_SchedulingRequestConfig_t
*
schedulingRequestConfig
;
...
...
@@ -377,7 +378,7 @@ typedef struct {
NR_Type0_PDCCH_CSS_config_t
type0_PDCCH_CSS_config
;
NR_SearchSpace_t
*
search_space_zero
;
NR_ControlResourceSet_t
*
coreset0
;
frequency_range_t
frequency_range
;
uint16_t
nr_band
;
}
NR_UE_MAC_INST_t
;
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
cb31468c
...
...
@@ -232,6 +232,7 @@ void nr_ue_msg3_scheduler(NR_UE_MAC_INST_t *mac,
uint8_t
Msg3_tda_id
);
void
nr_ue_sib1_scheduler
(
module_id_t
module_idP
,
int
cc_id
,
uint16_t
ssb_start_symbol
,
uint16_t
frame
,
uint8_t
ssb_subcarrier_offset
,
...
...
@@ -305,6 +306,9 @@ int8_t nr_ue_process_dci_freq_dom_resource_assignment(nfapi_nr_ue_pusch_pdu_t *p
uint16_t
n_RB_DLBWP
,
uint16_t
riv
);
void
config_dci_pdu
(
NR_UE_MAC_INST_t
*
mac
,
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
,
fapi_nr_dl_config_request_t
*
dl_config
,
int
rnti_type
,
int
ss_id
);
void
fill_dci_search_candidates
(
NR_SearchSpace_t
*
ss
,
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
);
void
get_num_re_dmrs
(
nfapi_nr_ue_pusch_pdu_t
*
pusch_pdu
,
uint8_t
*
nb_dmrs_re_per_rb
,
uint16_t
*
number_dmrs_symbols
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
View file @
cb31468c
...
...
@@ -68,20 +68,22 @@ void fill_dci_search_candidates(NR_SearchSpace_t *ss,fapi_nr_dl_config_dci_dl_pd
void
config_dci_pdu
(
NR_UE_MAC_INST_t
*
mac
,
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
,
fapi_nr_dl_config_request_t
*
dl_config
,
int
rnti_type
,
int
ss_id
){
RA_config_t
*
ra
=
&
mac
->
ra
;
uint16_t
monitoringSymbolsWithinSlot
=
0
;
uint8_t
coreset_id
=
1
;
int
sps
=
0
;
def_dci_pdu_rel15
=
calloc
(
1
,
2
*
sizeof
(
dci_pdu_rel15_t
));
AssertFatal
(
mac
->
scc
!=
NULL
,
"scc is null
\n
"
);
NR_BWP_Id_t
bwp_id
=
mac
->
DL_BWP_Id
;
NR_ServingCellConfigCommon_t
*
scc
=
mac
->
scc
;
NR_BWP_DownlinkCommon_t
*
bwp_Common
=
mac
->
DLbwp
[
bwp_id
-
1
]
->
bwp_Common
;
NR_BWP_DownlinkCommon_t
*
initialDownlinkBWP
=
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
;
NR_BWP_DownlinkCommon_t
*
bwp_Common
=
NULL
;
NR_BWP_DownlinkCommon_t
*
initialDownlinkBWP
=
NULL
;
NR_SearchSpace_t
*
ss
;
NR_ControlResourceSet_t
*
coreset
;
if
(
ss_id
>=
0
)
{
AssertFatal
(
mac
->
scc
!=
NULL
,
"scc is null
\n
"
);
initialDownlinkBWP
=
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
;
bwp_Common
=
mac
->
DLbwp
[
bwp_id
-
1
]
->
bwp_Common
;
ss
=
mac
->
SSpace
[
bwp_id
-
1
][
coreset_id
-
1
][
ss_id
];
coreset
=
mac
->
coreset
[
bwp_id
-
1
][
coreset_id
-
1
];
rel15
->
coreset
.
CoreSetType
=
NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG
;
...
...
@@ -100,8 +102,7 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
struct
NR_ControlResourceSet__cce_REG_MappingType__interleaved
*
interleaved
=
coreset
->
cce_REG_MappingType
.
choice
.
interleaved
;
rel15
->
coreset
.
RegBundleSize
=
(
interleaved
->
reg_BundleSize
==
NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6
)
?
6
:
(
2
+
interleaved
->
reg_BundleSize
);
rel15
->
coreset
.
InterleaverSize
=
(
interleaved
->
interleaverSize
==
NR_ControlResourceSet__cce_REG_MappingType__interleaved__interleaverSize_n6
)
?
6
:
(
2
+
interleaved
->
interleaverSize
);
AssertFatal
(
scc
->
physCellId
!=
NULL
,
"mac->scc->physCellId is null
\n
"
);
rel15
->
coreset
.
ShiftIndex
=
interleaved
->
shiftIndex
!=
NULL
?
*
interleaved
->
shiftIndex
:
*
scc
->
physCellId
;
rel15
->
coreset
.
ShiftIndex
=
interleaved
->
shiftIndex
!=
NULL
?
*
interleaved
->
shiftIndex
:
mac
->
physCellId
;
}
else
{
rel15
->
coreset
.
RegBundleSize
=
0
;
rel15
->
coreset
.
InterleaverSize
=
0
;
...
...
@@ -115,14 +116,10 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
rel15
->
coreset
.
pdcch_dmrs_scrambling_id
=
*
coreset
->
pdcch_DMRS_ScramblingID
;
rel15
->
coreset
.
scrambling_rnti
=
mac
->
crnti
;
}
else
{
rel15
->
coreset
.
pdcch_dmrs_scrambling_id
=
*
sc
c
->
physCellId
;
rel15
->
coreset
.
pdcch_dmrs_scrambling_id
=
ma
c
->
physCellId
;
rel15
->
coreset
.
scrambling_rnti
=
0
;
}
#ifdef DEBUG_DCI
LOG_D
(
MAC
,
"[DCI_CONFIG] Configure DCI PDU: ss_id %d bwp %p bwp_Id %d controlResourceSetId %d
\n
"
,
ss_id
,
mac
->
DLbwp
[
bwp_id
-
1
],
mac
->
DLbwp
[
bwp_id
-
1
]
->
bwp_Id
,
coreset
->
controlResourceSetId
);
#endif
// loop over RNTI type and configure resource allocation for DCI
switch
(
rnti_type
)
{
case
NR_RNTI_C
:
...
...
@@ -142,7 +139,7 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
// we use the initial DL BWP
sps
=
initialDownlinkBWP
->
genericParameters
.
cyclicPrefix
==
NULL
?
14
:
12
;
monitoringSymbolsWithinSlot
=
(
ss
->
monitoringSymbolsWithinSlot
->
buf
[
0
]
<<
(
sps
-
8
))
|
(
ss
->
monitoringSymbolsWithinSlot
->
buf
[
1
]
>>
(
16
-
sps
));
rel15
->
rnti
=
ra
->
ra_rnti
;
rel15
->
rnti
=
mac
->
ra
.
ra_rnti
;
rel15
->
BWPSize
=
NRRIV2BW
(
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
rel15
->
BWPStart
=
NRRIV2PRBOFFSET
(
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
//NRRIV2PRBOFFSET(initialDownlinkBWP->genericParameters.locationAndBandwidth, 275);
rel15
->
SubcarrierSpacing
=
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
;
...
...
@@ -157,8 +154,8 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
case
NR_RNTI_SP_CSI
:
break
;
case
NR_RNTI_SI
:
// we use DL BWP dedicated
sps
=
bwp_Common
->
genericParameters
.
cyclicPrefix
==
NULL
?
14
:
12
;
if
(
bwp_Common
)
sps
=
bwp_Common
->
genericParameters
.
cyclicPrefix
==
NULL
?
14
:
12
;
else
sps
=
14
;
// note: normally this would be found with SSS detection
// for SPS=14 8 MSBs in positions 13 down to 6
monitoringSymbolsWithinSlot
=
(
ss
->
monitoringSymbolsWithinSlot
->
buf
[
0
]
<<
(
sps
-
8
))
|
(
ss
->
monitoringSymbolsWithinSlot
->
buf
[
1
]
>>
(
16
-
sps
));
...
...
@@ -166,10 +163,14 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
rel15
->
rnti
=
SI_RNTI
;
// SI-RNTI - 3GPP TS 38.321 Table 7.1-1: RNTI values
rel15
->
BWPSize
=
mac
->
type0_PDCCH_CSS_config
.
num_rbs
;
rel15
->
BWPStart
=
mac
->
type0_PDCCH_CSS_config
.
cset_start_rb
;
rel15
->
SubcarrierSpacing
=
mac
->
mib
->
subCarrierSpacingCommon
;
if
(
mac
->
frequency_range
==
FR1
)
rel15
->
SubcarrierSpacing
=
mac
->
mib
->
subCarrierSpacingCommon
;
else
rel15
->
SubcarrierSpacing
=
mac
->
mib
->
subCarrierSpacingCommon
+
2
;
for
(
int
i
=
0
;
i
<
rel15
->
num_dci_options
;
i
++
)
{
rel15
->
dci_length_options
[
i
]
=
nr_dci_size
(
scc
,
mac
->
scg
,
def_dci_pdu_rel15
,
rel15
->
dci_format_options
[
i
],
NR_RNTI_SI
,
rel15
->
BWPSize
,
0
);
rel15
->
dci_length_options
[
i
]
=
nr_dci_size
(
NULL
,
NULL
,
def_dci_pdu_rel15
,
rel15
->
dci_format_options
[
i
],
NR_RNTI_SI
,
rel15
->
BWPSize
,
0
);
}
break
;
case
NR_RNTI_SFI
:
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
cb31468c
...
...
@@ -105,7 +105,7 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
LOG_I
(
MAC
,
"[L2][MAC] decode mib
\n
"
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
frequency_range_t
frequency_range
;
mac
->
physCellId
=
cell_id
;
nr_mac_rrc_data_ind_ue
(
module_id
,
cc_id
,
gNB_index
,
NR_BCCH_BCH
,
(
uint8_t
*
)
pduP
,
3
);
// fixed 3 bytes MIB PDU
AssertFatal
(
mac
->
mib
!=
NULL
,
"nr_ue_decode_mib() mac->mib == NULL
\n
"
);
...
...
@@ -121,11 +121,11 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
frame
=
frame
<<
4
;
frame
=
frame
|
frame_number_4lsb
;
if
(
ssb_length
==
64
){
frequency_range
=
FR2
;
mac
->
frequency_range
=
FR2
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
ssb_index
+=
(((
extra_bits
>>
(
7
-
i
))
&
0x01
)
<<
(
3
+
i
));
}
else
{
frequency_range
=
FR1
;
mac
->
frequency_range
=
FR1
;
if
(
ssb_subcarrier_offset_msb
){
ssb_subcarrier_offset
=
ssb_subcarrier_offset
|
0x10
;
}
...
...
@@ -154,12 +154,13 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
ssb_start_symbol
=
get_ssb_start_symbol
(
band
,
scs_ssb
,
ssb_index
);
nr_ue_sib1_scheduler
(
module_id
,
cc_id
,
ssb_start_symbol
,
frame
,
ssb_subcarrier_offset
,
ssb_index
,
ssb_start_subcarrier
,
frequency_range
);
mac
->
frequency_range
);
}
else
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
cb31468c
...
...
@@ -1731,6 +1731,7 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
// This function schedules the reception of SIB1 after initial sync and before going to real time state
void
nr_ue_sib1_scheduler
(
module_id_t
module_idP
,
int
cc_id
,
uint16_t
ssb_start_symbol
,
uint16_t
frame
,
uint8_t
ssb_subcarrier_offset
,
...
...
@@ -1739,6 +1740,8 @@ void nr_ue_sib1_scheduler(module_id_t module_idP,
frequency_range_t
frequency_range
)
{
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
nr_scheduled_response_t
scheduled_response
;
int
frame_s
,
slot_s
;
uint8_t
scs_ssb
=
get_softmodem_params
()
->
numerology
;
uint16_t
ssb_offset_point_a
=
(
ssb_start_subcarrier
-
ssb_subcarrier_offset
)
/
12
;
...
...
@@ -1755,9 +1758,37 @@ void nr_ue_sib1_scheduler(module_id_t module_idP,
1
,
// If the UE is not configured with a periodicity, the UE assumes a periodicity of a half frame
ssb_offset_point_a
);
if
(
mac
->
search_space_zero
==
NULL
)
mac
->
search_space_zero
=
calloc
(
1
,
sizeof
(
*
mac
->
search_space_zero
));
if
(
mac
->
coreset0
==
NULL
)
mac
->
coreset0
=
calloc
(
1
,
sizeof
(
*
mac
->
coreset0
));
fill_coresetZero
(
mac
->
coreset0
,
&
mac
->
type0_PDCCH_CSS_config
);
fill_searchSpaceZero
(
mac
->
search_space_zero
,
&
mac
->
type0_PDCCH_CSS_config
);
fapi_nr_dl_config_request_t
*
dl_config
=
&
mac
->
dl_config_request
;
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
=
&
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
dci_config_pdu
.
dci_config_rel15
;
rel15
->
num_dci_options
=
1
;
rel15
->
dci_format_options
[
0
]
=
NR_DL_DCI_FORMAT_1_0
;
config_dci_pdu
(
mac
,
rel15
,
dl_config
,
NR_RNTI_SI
,
-
1
);
fill_dci_search_candidates
(
mac
->
search_space_zero
,
rel15
);
if
(
mac
->
type0_PDCCH_CSS_config
.
type0_pdcch_ss_mux_pattern
==
1
){
// same frame as ssb
if
((
mac
->
type0_PDCCH_CSS_config
.
frame
&
0x1
)
==
mac
->
type0_PDCCH_CSS_config
.
sfn_c
)
frame_s
=
0
;
else
frame_s
=
1
;
slot_s
=
mac
->
type0_PDCCH_CSS_config
.
n_0
;
}
else
{
frame_s
=
0
;
// same frame as ssb
slot_s
=
mac
->
type0_PDCCH_CSS_config
.
n_c
;
}
LOG_I
(
MAC
,
"Calling fill_scheduled_response, type0_pdcch, num_pdus %d
\n
"
,
dl_config
->
number_pdus
);
fill_scheduled_response
(
&
scheduled_response
,
dl_config
,
NULL
,
NULL
,
module_idP
,
cc_id
,
frame_s
,
slot_s
,
0
);
// TODO fix thread_id, for now assumed 0
if
(
mac
->
if_module
!=
NULL
&&
mac
->
if_module
->
scheduled_response
!=
NULL
)
mac
->
if_module
->
scheduled_response
(
&
scheduled_response
);
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
cb31468c
...
...
@@ -171,9 +171,6 @@ int allocate_nr_CCEs(gNB_MAC_INST *nr_mac,
uint16_t
Y
,
int
m
,
int
nr_of_candidates
)
{
// uncomment these when we allocate for common search space
// NR_COMMON_channels_t *cc = nr_mac->common_channels;
// NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon;
int
coreset_id
=
coreset
->
controlResourceSetId
;
...
...
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