Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
9ed184b9
Commit
9ed184b9
authored
Jul 17, 2021
by
luis_pereira87
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Apply patch for gNB ulsch retransmission scheduler
parent
8f169e00
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
14 deletions
+15
-14
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+15
-14
No files found.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
9ed184b9
...
@@ -144,7 +144,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub
...
@@ -144,7 +144,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub
if
((
symb_pucch
&
symb_tda_mi
)
==
0
&&
(
symb_ulMixed
&
symb_tda_mi
)
==
symb_tda_mi
)
{
if
((
symb_pucch
&
symb_tda_mi
)
==
0
&&
(
symb_ulMixed
&
symb_tda_mi
)
==
symb_tda_mi
)
{
tdaMi
=
1
;
tdaMi
=
1
;
}
else
{
}
else
{
LOG_E
(
MAC
,
LOG_E
(
NR_
MAC
,
"TDA index 1 UL overlaps with PUCCH or is not entirely in mixed slot (symb_pucch %x symb_ulMixed %x symb_tda_mi %x), won't schedule UL mixed slot
\n
"
,
"TDA index 1 UL overlaps with PUCCH or is not entirely in mixed slot (symb_pucch %x symb_ulMixed %x symb_tda_mi %x), won't schedule UL mixed slot
\n
"
,
symb_pucch
,
symb_pucch
,
symb_ulMixed
,
symb_ulMixed
,
...
@@ -168,7 +168,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub
...
@@ -168,7 +168,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub
}
}
if
(
k2
<
tdd
->
nrofUplinkSlots
)
if
(
k2
<
tdd
->
nrofUplinkSlots
)
LOG_W
(
MAC
,
LOG_W
(
NR_
MAC
,
"k2 %d < tdd->nrofUplinkSlots %ld: not all UL slots can be scheduled
\n
"
,
"k2 %d < tdd->nrofUplinkSlots %ld: not all UL slots can be scheduled
\n
"
,
k2
,
k2
,
tdd
->
nrofUplinkSlots
);
tdd
->
nrofUplinkSlots
);
...
@@ -331,7 +331,7 @@ void nr_process_mac_pdu(module_id_t module_idP,
...
@@ -331,7 +331,7 @@ void nr_process_mac_pdu(module_id_t module_idP,
sched_ctrl
->
ph
=
PH
-
32
+
(
PH
-
54
);
sched_ctrl
->
ph
=
PH
-
32
+
(
PH
-
54
);
/* 38.133 Table10.1.18.1-1 */
/* 38.133 Table10.1.18.1-1 */
sched_ctrl
->
pcmax
=
PCMAX
-
29
;
sched_ctrl
->
pcmax
=
PCMAX
-
29
;
LOG_D
(
MAC
,
"SINGLE ENTRY PHR R1 %d PH %d (%d dB) R2 %d PCMAX %d (%d dBm)
\n
"
,
LOG_D
(
NR_
MAC
,
"SINGLE ENTRY PHR R1 %d PH %d (%d dB) R2 %d PCMAX %d (%d dBm)
\n
"
,
phr
->
R1
,
PH
,
sched_ctrl
->
ph
,
phr
->
R2
,
PCMAX
,
sched_ctrl
->
pcmax
);
phr
->
R1
,
PH
,
sched_ctrl
->
ph
,
phr
->
R2
,
PCMAX
,
sched_ctrl
->
pcmax
);
break
;
break
;
...
@@ -817,7 +817,7 @@ bool nr_UE_is_to_be_scheduled(module_id_t mod_id, int CC_id, int UE_id, frame_t
...
@@ -817,7 +817,7 @@ bool nr_UE_is_to_be_scheduled(module_id_t mod_id, int CC_id, int UE_id, frame_t
* (3) or we did not schedule it in more than 10 frames */
* (3) or we did not schedule it in more than 10 frames */
const
bool
has_data
=
sched_ctrl
->
estimated_ul_buffer
>
sched_ctrl
->
sched_ul_bytes
;
const
bool
has_data
=
sched_ctrl
->
estimated_ul_buffer
>
sched_ctrl
->
sched_ul_bytes
;
const
bool
high_inactivity
=
diff
>=
nrmac
->
ulsch_max_slots_inactivity
;
const
bool
high_inactivity
=
diff
>=
nrmac
->
ulsch_max_slots_inactivity
;
LOG_D
(
MAC
,
LOG_D
(
NR_
MAC
,
"%4d.%2d UL inactivity %d slots has_data %d SR %d
\n
"
,
"%4d.%2d UL inactivity %d slots has_data %d SR %d
\n
"
,
frame
,
frame
,
slot
,
slot
,
...
@@ -854,12 +854,13 @@ bool allocate_ul_retransmission(module_id_t module_id,
...
@@ -854,12 +854,13 @@ bool allocate_ul_retransmission(module_id_t module_id,
const
uint8_t
num_dmrs_cdm_grps_no_data
=
sched_ctrl
->
active_bwp
?
1
:
2
;
const
uint8_t
num_dmrs_cdm_grps_no_data
=
sched_ctrl
->
active_bwp
?
1
:
2
;
const
int
tda
=
sched_ctrl
->
active_ubwp
?
RC
.
nrmac
[
module_id
]
->
preferred_ul_tda
[
sched_ctrl
->
active_ubwp
->
bwp_Id
][
slot
]
:
0
;
const
int
tda
=
sched_ctrl
->
active_ubwp
?
RC
.
nrmac
[
module_id
]
->
preferred_ul_tda
[
sched_ctrl
->
active_ubwp
->
bwp_Id
][
slot
]
:
0
;
LOG_D
(
NR_MAC
,
"retInfo->time_domain_allocation = %d, tda = %d
\n
"
,
retInfo
->
time_domain_allocation
,
tda
);
if
(
tda
==
retInfo
->
time_domain_allocation
)
{
if
(
tda
==
retInfo
->
time_domain_allocation
)
{
/* Check the resource is enough for retransmission */
/* Check the resource is enough for retransmission */
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
rbStart
++
;
rbStart
++
;
if
(
rbStart
+
retInfo
->
rbSize
>
=
bwpSize
)
{
if
(
rbStart
+
retInfo
->
rbSize
>
bwpSize
)
{
LOG_
D
(
MAC
,
"cannot allocate retransmission of UE %d/RNTI %04x: no resources
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
]
);
LOG_
W
(
NR_MAC
,
"cannot allocate retransmission of UE %d/RNTI %04x: no resources (rbStart %d, retInfo->rbSize %d, bwpSize %d
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
retInfo
->
rbSize
,
bwpSize
);
return
false
;
return
false
;
}
}
/* check whether we need to switch the TDA allocation since tha last
/* check whether we need to switch the TDA allocation since tha last
...
@@ -871,7 +872,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
...
@@ -871,7 +872,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
||
ps
->
dci_format
!=
dci_format
||
ps
->
dci_format
!=
dci_format
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
)
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
)
nr_set_pusch_semi_static
(
scc
,
sched_ctrl
->
active_ubwp
,
dci_format
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
nr_set_pusch_semi_static
(
scc
,
sched_ctrl
->
active_ubwp
,
dci_format
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
LOG_D
(
MAC
,
"%s(): retransmission keeping TDA %d and TBS %d
\n
"
,
__func__
,
tda
,
retInfo
->
tb_size
);
LOG_D
(
NR_
MAC
,
"%s(): retransmission keeping TDA %d and TBS %d
\n
"
,
__func__
,
tda
,
retInfo
->
tb_size
);
}
else
{
}
else
{
/* the retransmission will use a different time domain allocation, check
/* the retransmission will use a different time domain allocation, check
* that we have enough resources */
* that we have enough resources */
...
@@ -895,10 +896,10 @@ bool allocate_ul_retransmission(module_id_t module_id,
...
@@ -895,10 +896,10 @@ bool allocate_ul_retransmission(module_id_t module_id,
&
new_tbs
,
&
new_tbs
,
&
new_rbSize
);
&
new_rbSize
);
if
(
!
success
||
new_tbs
!=
retInfo
->
tb_size
)
{
if
(
!
success
||
new_tbs
!=
retInfo
->
tb_size
)
{
LOG_D
(
MAC
,
"%s(): new TBsize %d of new TDA does not match old TBS %d
\n
"
,
__func__
,
new_tbs
,
retInfo
->
tb_size
);
LOG_D
(
NR_
MAC
,
"%s(): new TBsize %d of new TDA does not match old TBS %d
\n
"
,
__func__
,
new_tbs
,
retInfo
->
tb_size
);
return
false
;
/* the maximum TBsize we might have is smaller than what we need */
return
false
;
/* the maximum TBsize we might have is smaller than what we need */
}
}
LOG_D
(
MAC
,
"%s(): retransmission with TDA %d->%d and TBS %d -> %d
\n
"
,
__func__
,
retInfo
->
time_domain_allocation
,
tda
,
retInfo
->
tb_size
,
new_tbs
);
LOG_D
(
NR_
MAC
,
"%s(): retransmission with TDA %d->%d and TBS %d -> %d
\n
"
,
__func__
,
retInfo
->
time_domain_allocation
,
tda
,
retInfo
->
tb_size
,
new_tbs
);
/* we can allocate it. Overwrite the time_domain_allocation, the number
/* we can allocate it. Overwrite the time_domain_allocation, the number
* of RBs, and the new TB size. The rest is done below */
* of RBs, and the new TB size. The rest is done below */
retInfo
->
tb_size
=
new_tbs
;
retInfo
->
tb_size
=
new_tbs
;
...
@@ -910,7 +911,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
...
@@ -910,7 +911,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
/* Find free CCE */
/* Find free CCE */
bool
freeCCE
=
find_free_CCE
(
module_id
,
slot
,
UE_id
);
bool
freeCCE
=
find_free_CCE
(
module_id
,
slot
,
UE_id
);
if
(
!
freeCCE
)
{
if
(
!
freeCCE
)
{
LOG_D
(
MAC
,
"%4d.%2d no free CCE for retransmission UL DCI UE %04x
\n
"
,
frame
,
slot
,
UE_info
->
rnti
[
UE_id
]);
LOG_D
(
NR_
MAC
,
"%4d.%2d no free CCE for retransmission UL DCI UE %04x
\n
"
,
frame
,
slot
,
UE_info
->
rnti
[
UE_id
]);
return
false
;
return
false
;
}
}
...
@@ -923,7 +924,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
...
@@ -923,7 +924,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
sched_ctrl
->
sched_pusch
=
*
retInfo
;
sched_ctrl
->
sched_pusch
=
*
retInfo
;
NR_sched_pusch_t
*
sched_pusch
=
&
sched_ctrl
->
sched_pusch
;
NR_sched_pusch_t
*
sched_pusch
=
&
sched_ctrl
->
sched_pusch
;
LOG_D
(
MAC
,
LOG_D
(
NR_
MAC
,
"%4d.%2d Allocate UL retransmission UE %d/RNTI %04x sched %4d.%2d (%d RBs)
\n
"
,
"%4d.%2d Allocate UL retransmission UE %d/RNTI %04x sched %4d.%2d (%d RBs)
\n
"
,
frame
,
frame
,
slot
,
slot
,
...
@@ -999,7 +1000,7 @@ void pf_ul(module_id_t module_id,
...
@@ -999,7 +1000,7 @@ void pf_ul(module_id_t module_id,
bool
r
=
allocate_ul_retransmission
(
bool
r
=
allocate_ul_retransmission
(
module_id
,
frame
,
slot
,
rballoc_mask
,
&
n_rb_sched
,
UE_id
,
sched_pusch
->
ul_harq_pid
);
module_id
,
frame
,
slot
,
rballoc_mask
,
&
n_rb_sched
,
UE_id
,
sched_pusch
->
ul_harq_pid
);
if
(
!
r
)
{
if
(
!
r
)
{
LOG_D
(
MAC
,
"%4d.%2d UL retransmission UE RNTI %04x can NOT be allocated
\n
"
,
frame
,
slot
,
UE_info
->
rnti
[
UE_id
]);
LOG_D
(
NR_
MAC
,
"%4d.%2d UL retransmission UE RNTI %04x can NOT be allocated
\n
"
,
frame
,
slot
,
UE_info
->
rnti
[
UE_id
]);
continue
;
continue
;
}
}
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
...
@@ -1030,7 +1031,7 @@ void pf_ul(module_id_t module_id,
...
@@ -1030,7 +1031,7 @@ void pf_ul(module_id_t module_id,
if
(
max_num_ue
<
0
)
if
(
max_num_ue
<
0
)
return
;
return
;
LOG_D
(
NR_MAC
,
"Looking for min_rb %d RBs, starting at %d
\n
"
,
min_rb
,
rbStart
);
LOG_D
(
NR_MAC
,
"Looking for min_rb %d RBs, starting at %d
\n
"
,
min_rb
,
rbStart
);
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
rbStart
++
;
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
rbStart
++
;
if
(
rbStart
+
min_rb
>=
bwpSize
)
{
if
(
rbStart
+
min_rb
>=
bwpSize
)
{
LOG_W
(
NR_MAC
,
"cannot allocate continuous UL data for UE %d/RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d
\n
"
,
LOG_W
(
NR_MAC
,
"cannot allocate continuous UL data for UE %d/RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d
\n
"
,
...
@@ -1162,7 +1163,7 @@ void pf_ul(module_id_t module_id,
...
@@ -1162,7 +1163,7 @@ void pf_ul(module_id_t module_id,
&
rbSize
);
&
rbSize
);
sched_pusch
->
rbSize
=
rbSize
;
sched_pusch
->
rbSize
=
rbSize
;
sched_pusch
->
tb_size
=
TBS
;
sched_pusch
->
tb_size
=
TBS
;
LOG_D
(
MAC
,
"rbSize %d, TBS %d, est buf %d, sched_ul %d, B %d
\n
"
,
LOG_D
(
NR_
MAC
,
"rbSize %d, TBS %d, est buf %d, sched_ul %d, B %d
\n
"
,
rbSize
,
sched_pusch
->
tb_size
,
sched_ctrl
->
estimated_ul_buffer
,
sched_ctrl
->
sched_ul_bytes
,
B
);
rbSize
,
sched_pusch
->
tb_size
,
sched_ctrl
->
estimated_ul_buffer
,
sched_ctrl
->
sched_ul_bytes
,
B
);
/* Mark the corresponding RBs as used */
/* Mark the corresponding RBs as used */
...
...
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