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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
220af3f6
Commit
220af3f6
authored
Oct 24, 2024
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move function to build ssb list after common configuration (reception of SSB information)
also removed unnecessary BWP dependence
parent
a7e3e8a3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
43 additions
and
43 deletions
+43
-43
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+34
-6
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+1
-1
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+2
-1
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+1
-4
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
+2
-2
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+3
-29
No files found.
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
220af3f6
...
...
@@ -44,6 +44,28 @@
#include "oai_asn1.h"
#include "executables/position_interface.h"
// Build the list of all the valid/transmitted SSBs according to the config
static
void
build_ssb_list
(
NR_UE_MAC_INST_t
*
mac
)
{
// Create the list of transmitted SSBs
free
(
mac
->
ssb_list
.
tx_ssb
);
memset
(
&
mac
->
ssb_list
,
0
,
sizeof
(
ssb_list_info_t
));
ssb_list_info_t
*
ssb_list
=
&
mac
->
ssb_list
;
fapi_nr_config_request_t
*
cfg
=
&
mac
->
phy_config
.
config_req
;
ssb_list
->
nb_tx_ssb
=
0
;
for
(
int
ssb_index
=
0
;
ssb_index
<
MAX_NB_SSB
;
ssb_index
++
)
{
uint32_t
curr_mask
=
cfg
->
ssb_table
.
ssb_mask_list
[
ssb_index
/
32
].
ssb_mask
;
// check if if current SSB is transmitted
if
((
curr_mask
>>
(
31
-
(
ssb_index
%
32
)))
&
0x01
)
{
ssb_list
->
nb_ssb_per_index
[
ssb_index
]
=
ssb_list
->
nb_tx_ssb
;
ssb_list
->
nb_tx_ssb
++
;
}
else
ssb_list
->
nb_ssb_per_index
[
ssb_index
]
=
-
1
;
}
ssb_list
->
tx_ssb
=
calloc
(
ssb_list
->
nb_tx_ssb
,
sizeof
(
*
ssb_list
->
tx_ssb
));
}
static
void
set_tdd_config_nr_ue
(
fapi_nr_tdd_table_t
*
tdd_table
,
const
frame_structure_t
*
fs
)
{
tdd_table
->
tdd_period_in_slots
=
fs
->
numb_slots_period
;
...
...
@@ -1744,14 +1766,16 @@ void nr_rrc_mac_config_req_sib1(module_id_t module_id, int cc_idP, NR_SIB1_t *si
mac
->
n_ta_offset
=
get_ta_offset
(
scc
->
n_TimingAdvanceOffset
);
config_common_ue_sa
(
mac
,
scc
,
cc_idP
);
configure_common_BWP_dl
(
mac
,
0
,
// bwp-id
&
scc
->
downlinkConfigCommon
.
initialDownlinkBWP
);
// Build the list of all the valid/transmitted SSBs according to the config
LOG_D
(
NR_MAC
,
"Build SSB list
\n
"
);
build_ssb_list
(
mac
);
int
bwp_id
=
0
;
configure_common_BWP_dl
(
mac
,
bwp_id
,
&
scc
->
downlinkConfigCommon
.
initialDownlinkBWP
);
if
(
scc
->
uplinkConfigCommon
)
{
mac
->
timeAlignmentTimerCommon
=
scc
->
uplinkConfigCommon
->
timeAlignmentTimerCommon
;
configure_common_BWP_ul
(
mac
,
0
,
// bwp-id
&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
);
configure_common_BWP_ul
(
mac
,
bwp_id
,
&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
);
}
// set current BWP only if coming from non-connected state
// otherwise it is just a periodically update of the SIB1 content
...
...
@@ -1816,6 +1840,10 @@ static void handle_reconfiguration_with_sync(NR_UE_MAC_INST_t *mac,
mac
->
dmrs_TypeA_Position
=
scc
->
dmrs_TypeA_Position
;
UPDATE_IE
(
mac
->
tdd_UL_DL_ConfigurationCommon
,
scc
->
tdd_UL_DL_ConfigurationCommon
,
NR_TDD_UL_DL_ConfigCommon_t
);
config_common_ue
(
mac
,
scc
,
cc_idP
);
// Build the list of all the valid/transmitted SSBs according to the config
LOG_D
(
NR_MAC
,
"Build SSB list
\n
"
);
build_ssb_list
(
mac
);
const
int
bwp_id
=
0
;
if
(
scc
->
downlinkConfigCommon
)
configure_common_BWP_dl
(
mac
,
bwp_id
,
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
);
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
220af3f6
...
...
@@ -577,7 +577,7 @@ typedef struct NR_UE_MAC_INST_s {
NR_MIB_t
*
mib
;
si_schedInfo_t
si_SchedInfo
;
ssb_list_info_t
ssb_list
[
MAX_NUM_BWP_UE
]
;
ssb_list_info_t
ssb_list
;
prach_association_pattern_t
prach_assoc_pattern
[
MAX_NUM_BWP_UE
];
NR_UE_ServingCell_Info_t
sc_info
;
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
220af3f6
...
...
@@ -77,7 +77,7 @@ void nr_ue_init_mac(NR_UE_MAC_INST_t *mac)
memset
(
&
mac
->
ssb_measurements
,
0
,
sizeof
(
mac
->
ssb_measurements
));
memset
(
&
mac
->
ul_time_alignment
,
0
,
sizeof
(
mac
->
ul_time_alignment
));
memset
(
mac
->
ssb_list
,
0
,
sizeof
(
mac
->
ssb_list
));
memset
(
&
mac
->
ssb_list
,
0
,
sizeof
(
mac
->
ssb_list
));
memset
(
mac
->
prach_assoc_pattern
,
0
,
sizeof
(
mac
->
prach_assoc_pattern
));
for
(
int
i
=
0
;
i
<
NR_MAX_SR_ID
;
i
++
)
...
...
@@ -302,3 +302,4 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac, NR_UE_MAC_reset_cause_t ca
for
(
int
i
=
mac
->
TAG_list
.
count
;
i
>
0
;
i
--
)
asn_sequence_del
(
&
mac
->
TAG_list
,
i
-
1
,
1
);
}
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
View file @
220af3f6
...
...
@@ -346,8 +346,7 @@ static void config_preamble_index(NR_UE_MAC_INST_t *mac)
if
(
config_info
.
ssb_per_ro
<
1
)
ra
->
ra_PreambleIndex
=
groupOffset
+
rand_preamb
;
else
{
ssb_list_info_t
*
ssb_list
=
&
mac
->
ssb_list
[
mac
->
current_DL_BWP
->
bwp_id
];
int
ssb_pr_idx
=
ssb_list
->
nb_ssb_per_index
[
ra
->
ra_ssb
]
%
(
int
)
config_info
.
ssb_per_ro
;
int
ssb_pr_idx
=
mac
->
ssb_list
.
nb_ssb_per_index
[
ra
->
ra_ssb
]
%
(
int
)
config_info
.
ssb_per_ro
;
ra
->
ra_PreambleIndex
=
groupOffset
+
(
ssb_pr_idx
*
config_info
.
preambles_per_ssb
)
+
rand_preamb
;
}
AssertFatal
(
ra
->
ra_PreambleIndex
<
nb_of_preambles
,
...
...
@@ -1190,8 +1189,6 @@ void free_rach_structures(NR_UE_MAC_INST_t *nr_mac, int bwp_id)
for
(
int
k
=
0
;
k
<
MAX_NB_FRAME_IN_PRACH_CONF_PERIOD
;
k
++
)
for
(
int
l
=
0
;
l
<
MAX_NB_SLOT_IN_FRAME
;
l
++
)
free
(
nr_mac
->
prach_assoc_pattern
[
bwp_id
].
prach_conf_period_list
[
j
].
prach_occasion_slot_map
[
k
][
l
].
prach_occasion
);
free
(
nr_mac
->
ssb_list
[
bwp_id
].
tx_ssb
);
}
void
reset_ra
(
NR_UE_MAC_INST_t
*
nr_mac
,
bool
free_prach
)
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
View file @
220af3f6
...
...
@@ -442,8 +442,8 @@ bool search_space_monitoring_ocasion_other_si(NR_UE_MAC_INST_t *mac,
get_monitoring_period_offset
(
ss
,
&
period
,
&
offset
);
for
(
int
i
=
0
;
i
<
duration
;
i
++
)
{
if
(((
frame
*
slots_per_frame
+
slot
-
offset
-
i
)
%
period
)
==
0
)
{
int
N
=
mac
->
ssb_list
[
bwp_id
]
.
nb_tx_ssb
;
int
K
=
mac
->
ssb_list
->
nb_ssb_per_index
[
mac
->
mib_ssb
];
int
N
=
mac
->
ssb_list
.
nb_tx_ssb
;
int
K
=
mac
->
ssb_list
.
nb_ssb_per_index
[
mac
->
mib_ssb
];
// numbering current frame and slot in terms of monitoring occasions in window
int
rel_slot
=
abs_slot
-
mac
->
si_SchedInfo
.
si_window_start
;
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
220af3f6
...
...
@@ -1703,28 +1703,6 @@ static void build_ro_list(NR_UE_MAC_INST_t *mac)
}
// For every prach configuration periods in the maximum association pattern period (160ms)
}
// Build the list of all the valid/transmitted SSBs according to the config
static
void
build_ssb_list
(
NR_UE_MAC_INST_t
*
mac
)
{
// Create the list of transmitted SSBs
const
int
bwp_id
=
mac
->
current_UL_BWP
->
bwp_id
;
ssb_list_info_t
*
ssb_list
=
&
mac
->
ssb_list
[
bwp_id
];
fapi_nr_config_request_t
*
cfg
=
&
mac
->
phy_config
.
config_req
;
ssb_list
->
nb_tx_ssb
=
0
;
for
(
int
ssb_index
=
0
;
ssb_index
<
MAX_NB_SSB
;
ssb_index
++
)
{
uint32_t
curr_mask
=
cfg
->
ssb_table
.
ssb_mask_list
[
ssb_index
/
32
].
ssb_mask
;
// check if if current SSB is transmitted
if
((
curr_mask
>>
(
31
-
(
ssb_index
%
32
)))
&
0x01
)
{
ssb_list
->
nb_ssb_per_index
[
ssb_index
]
=
ssb_list
->
nb_tx_ssb
;
ssb_list
->
nb_tx_ssb
++
;
}
else
ssb_list
->
nb_ssb_per_index
[
ssb_index
]
=
-
1
;
}
ssb_list
->
tx_ssb
=
calloc
(
ssb_list
->
nb_tx_ssb
,
sizeof
(
*
ssb_list
->
tx_ssb
));
}
static
int
get_ssb_idx_from_list
(
ssb_list_info_t
*
ssb_list
,
int
idx
)
{
for
(
int
ssb_index
=
0
;
ssb_index
<
MAX_NB_SSB
;
ssb_index
++
)
{
...
...
@@ -1758,7 +1736,7 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac)
LOG_D
(
NR_MAC
,
"SSB rach ratio %d, Multiple SSB per RO %d
\n
"
,
ssb_rach_ratio
,
multiple_ssb_per_ro
);
const
int
bwp_id
=
mac
->
current_UL_BWP
->
bwp_id
;
ssb_list_info_t
*
ssb_list
=
&
mac
->
ssb_list
[
bwp_id
]
;
ssb_list_info_t
*
ssb_list
=
&
mac
->
ssb_list
;
// Evaluate the number of PRACH configuration periods required to map all the SSBs and set the association period
// WIP: Assumption for now is that all the PRACH configuration periods within a maximum association pattern period have the same
...
...
@@ -2052,17 +2030,13 @@ void build_ssb_to_ro_map(NR_UE_MAC_INST_t *mac)
// Clear all the lists and maps
const
int
bwp_id
=
mac
->
current_UL_BWP
->
bwp_id
;
free_rach_structures
(
mac
,
bwp_id
);
memset
(
&
mac
->
ssb_list
[
bwp_id
],
0
,
sizeof
(
ssb_list_info_t
));
memset
(
&
mac
->
prach_assoc_pattern
[
bwp_id
],
0
,
sizeof
(
prach_association_pattern_t
));
// Build the list of all the valid RACH occasions in the maximum association pattern period according to the PRACH config
LOG_D
(
NR_MAC
,
"Build RO list
\n
"
);
build_ro_list
(
mac
);
// Build the list of all the valid/transmitted SSBs according to the config
LOG_D
(
NR_MAC
,
"Build SSB list
\n
"
);
build_ssb_list
(
mac
);
// Map the transmitted SSBs to the ROs and create the association pattern according to the config
LOG_D
(
NR_MAC
,
"Map SSB to RO
\n
"
);
map_ssb_to_ro
(
mac
);
...
...
@@ -2575,7 +2549,7 @@ static void nr_ue_prach_scheduler(NR_UE_MAC_INST_t *mac, frame_t frameP, slot_t
selected_gnb_ssb_idx
,
(
int
)
frameP
,
(
int
)
slotP
,
&
mac
->
ssb_list
[
bwp_id
]
,
&
mac
->
ssb_list
,
&
prach_occasion_info_p
);
if
(
is_nr_prach_slot
)
{
...
...
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