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
6913c1f5
Commit
6913c1f5
authored
Mar 27, 2024
by
Robert Schmidt
Committed by
sagar arora
May 22, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Check beam before allocating Msg2/harmonize with Msg3 retx
parent
6ca46236
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
24 deletions
+22
-24
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+22
-24
No files found.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
6913c1f5
...
@@ -70,7 +70,6 @@ static const uint8_t DELTA[4] = {2, 3, 4, 6};
...
@@ -70,7 +70,6 @@ static const uint8_t DELTA[4] = {2, 3, 4, 6};
static
const
float
ssb_per_rach_occasion
[
8
]
=
{
0
.
125
,
0
.
25
,
0
.
5
,
1
,
2
,
4
,
8
};
static
const
float
ssb_per_rach_occasion
[
8
]
=
{
0
.
125
,
0
.
25
,
0
.
5
,
1
,
2
,
4
,
8
};
__attribute__
((
unused
))
static
int16_t
ssb_index_from_prach
(
module_id_t
module_idP
,
static
int16_t
ssb_index_from_prach
(
module_id_t
module_idP
,
frame_t
frameP
,
frame_t
frameP
,
sub_frame_t
slotP
,
sub_frame_t
slotP
,
...
@@ -526,6 +525,9 @@ void nr_initiate_ra_proc(module_id_t module_idP,
...
@@ -526,6 +525,9 @@ void nr_initiate_ra_proc(module_id_t module_idP,
NR_ServingCellConfigCommon_t
*
scc
=
cc
->
ServingCellConfigCommon
;
NR_ServingCellConfigCommon_t
*
scc
=
cc
->
ServingCellConfigCommon
;
configure_UE_BWP
(
nr_mac
,
scc
,
NULL
,
ra
,
NULL
,
-
1
,
-
1
);
configure_UE_BWP
(
nr_mac
,
scc
,
NULL
,
ra
,
NULL
,
-
1
,
-
1
);
uint8_t
beam_index
=
ssb_index_from_prach
(
module_idP
,
frameP
,
slotP
,
preamble_index
,
freq_index
,
symbol
);
ra
->
beam_id
=
cc
->
ssb_index
[
beam_index
];
NR_SCHED_UNLOCK
(
&
nr_mac
->
sched_lock
);
NR_SCHED_UNLOCK
(
&
nr_mac
->
sched_lock
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_INITIATE_RA_PROC
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_INITIATE_RA_PROC
,
0
);
...
@@ -546,6 +548,20 @@ static void start_ra_contention_resolution_timer(NR_RA_t *ra, const long ra_Cont
...
@@ -546,6 +548,20 @@ static void start_ra_contention_resolution_timer(NR_RA_t *ra, const long ra_Cont
ra
->
contention_resolution_timer
);
ra
->
contention_resolution_timer
);
}
}
static
bool
beam_is_active
(
const
NR_TDD_UL_DL_Pattern_t
*
tdd
,
int
mu
,
const
int16_t
*
tdd_beam_association
,
int
slot
,
int16_t
ra_beam
)
{
if
(
tdd_beam_association
==
NULL
)
// no beams configured
return
true
;
DevAssert
(
tdd
!=
NULL
);
const
int
n_slots_frame
=
nr_slots_per_frame
[
mu
];
uint8_t
tdd_period_slot
=
n_slots_frame
/
get_nb_periods_per_frame
(
tdd
->
dl_UL_TransmissionPeriodicity
);
int
num_tdd_period
=
slot
/
tdd_period_slot
;
int16_t
current_beam
=
tdd_beam_association
[
num_tdd_period
];
return
current_beam
==
-
1
/* no beams */
||
current_beam
==
ra_beam
;
}
static
void
nr_generate_Msg3_retransmission
(
module_id_t
module_idP
,
static
void
nr_generate_Msg3_retransmission
(
module_id_t
module_idP
,
int
CC_id
,
int
CC_id
,
frame_t
frame
,
frame_t
frame
,
...
@@ -567,19 +583,11 @@ static void nr_generate_Msg3_retransmission(module_id_t module_idP,
...
@@ -567,19 +583,11 @@ static void nr_generate_Msg3_retransmission(module_id_t module_idP,
if
(
is_xlsch_in_slot
(
nr_mac
->
ulsch_slot_bitmap
[
sched_slot
/
64
],
sched_slot
))
{
if
(
is_xlsch_in_slot
(
nr_mac
->
ulsch_slot_bitmap
[
sched_slot
/
64
],
sched_slot
))
{
// beam association for FR2
// beam association for FR2
int16_t
*
tdd_beam_association
=
nr_mac
->
tdd_beam_association
;
if
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
>=
257
)
{
if
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
>=
257
)
{
// FR2
// FR2
const
int
n_slots_frame
=
nr_slots_per_frame
[
mu
];
const
NR_TDD_UL_DL_Pattern_t
*
tdd
=
scc
->
tdd_UL_DL_ConfigurationCommon
?
&
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
:
NULL
;
const
NR_TDD_UL_DL_Pattern_t
*
tdd
=
scc
->
tdd_UL_DL_ConfigurationCommon
?
&
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
:
NULL
;
AssertFatal
(
tdd
,
"Dynamic TDD not handled yet
\n
"
);
if
(
!
beam_is_active
(
tdd
,
mu
,
nr_mac
->
tdd_beam_association
,
sched_slot
,
ra
->
beam_id
))
uint8_t
tdd_period_slot
=
n_slots_frame
/
get_nb_periods_per_frame
(
tdd
->
dl_UL_TransmissionPeriodicity
);
return
;
int
num_tdd_period
=
sched_slot
/
tdd_period_slot
;
if
((
tdd_beam_association
[
num_tdd_period
]
!=-
1
)
&&
(
tdd_beam_association
[
num_tdd_period
]
!=
ra
->
beam_id
))
return
;
// can't schedule retransmission in this slot
else
tdd_beam_association
[
num_tdd_period
]
=
ra
->
beam_id
;
}
}
int
fh
=
0
;
int
fh
=
0
;
...
@@ -802,18 +810,6 @@ static void nr_get_Msg3alloc(module_id_t module_id,
...
@@ -802,18 +810,6 @@ static void nr_get_Msg3alloc(module_id_t module_id,
ra
->
Msg3_slot
=
abs_slot
%
n_slots_frame
;
ra
->
Msg3_slot
=
abs_slot
%
n_slots_frame
;
ra
->
Msg3_frame
=
(
current_frame
+
(
abs_slot
/
n_slots_frame
))
%
1024
;
ra
->
Msg3_frame
=
(
current_frame
+
(
abs_slot
/
n_slots_frame
))
%
1024
;
// beam association for FR2
if
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
>=
257
)
{
const
NR_TDD_UL_DL_Pattern_t
*
tdd
=
scc
->
tdd_UL_DL_ConfigurationCommon
?
&
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
:
NULL
;
AssertFatal
(
tdd
,
"Dynamic TDD not handled yet
\n
"
);
uint8_t
tdd_period_slot
=
n_slots_frame
/
get_nb_periods_per_frame
(
tdd
->
dl_UL_TransmissionPeriodicity
);
int
num_tdd_period
=
ra
->
Msg3_slot
/
tdd_period_slot
;
if
((
tdd_beam_association
[
num_tdd_period
]
!=-
1
)
&&
(
tdd_beam_association
[
num_tdd_period
]
!=
ra
->
beam_id
))
AssertFatal
(
1
==
0
,
"Cannot schedule MSG3
\n
"
);
else
tdd_beam_association
[
num_tdd_period
]
=
ra
->
beam_id
;
}
LOG_I
(
NR_MAC
,
LOG_I
(
NR_MAC
,
"[RAPROC] Msg3 scheduled at %d.%d (%d.%d k2 %ld TDA %u)
\n
"
,
"[RAPROC] Msg3 scheduled at %d.%d (%d.%d k2 %ld TDA %u)
\n
"
,
ra
->
Msg3_frame
,
ra
->
Msg3_frame
,
...
@@ -1199,9 +1195,11 @@ static void nr_generate_Msg2(module_id_t module_idP,
...
@@ -1199,9 +1195,11 @@ static void nr_generate_Msg2(module_id_t module_idP,
if
(
!
check_msg2_monitoring
(
ra
,
dl_bwp
->
scs
,
frameP
,
slotP
))
if
(
!
check_msg2_monitoring
(
ra
,
dl_bwp
->
scs
,
frameP
,
slotP
))
return
;
return
;
const
NR_UE_UL_BWP_t
*
ul_bwp
=
&
ra
->
UL_BWP
;
const
NR_UE_UL_BWP_t
*
ul_bwp
=
&
ra
->
UL_BWP
;
const
NR_TDD_UL_DL_Pattern_t
*
tdd
=
scc
->
tdd_UL_DL_ConfigurationCommon
?
&
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
:
NULL
;
const
NR_TDD_UL_DL_Pattern_t
*
tdd
=
scc
->
tdd_UL_DL_ConfigurationCommon
?
&
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
:
NULL
;
if
(
!
beam_is_active
(
tdd
,
ul_bwp
->
scs
,
nr_mac
->
tdd_beam_association
,
slotP
,
ra
->
beam_id
))
return
;
ra
->
Msg3_tda_id
=
get_feasible_msg3_tda
(
cc
->
frame_type
,
ra
->
Msg3_tda_id
=
get_feasible_msg3_tda
(
cc
->
frame_type
,
DELTA
[
ul_bwp
->
scs
],
DELTA
[
ul_bwp
->
scs
],
nr_mac
->
ulsch_slot_bitmap
,
nr_mac
->
ulsch_slot_bitmap
,
...
...
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