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
Michael Black
OpenXG-RAN
Commits
7cbca077
Commit
7cbca077
authored
Mar 16, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_UL_VRB_MAP_improv' into integration_2022_wk11
parents
5be18253
ddbc3062
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
267 additions
and
142 deletions
+267
-142
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+0
-2
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+18
-12
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+16
-6
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+2
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+2
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+39
-10
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+118
-58
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+56
-47
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+8
-0
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+7
-1
No files found.
common/utils/nr/nr_common.c
View file @
7cbca077
...
...
@@ -521,7 +521,6 @@ int get_subband_size(int NPRB,int size) {
}
// from start symbol index and nb or symbols to symbol occupation bitmap in a slot
uint16_t
SL_to_bitmap
(
int
startSymbolIndex
,
int
nrOfSymbols
)
{
return
((
1
<<
nrOfSymbols
)
-
1
)
<<
startSymbolIndex
;
...
...
@@ -543,5 +542,4 @@ void SLIV2SL(int SLIV,int *S,int *L) {
*
L
=
15
-
SLIVdiv14
;
*
S
=
13
-
SLIVmod14
;
}
}
openair2/GNB_APP/gnb_config.c
View file @
7cbca077
...
...
@@ -624,15 +624,18 @@ void RCconfig_NR_L1(void) {
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
char
*
ulprbbl
=
*
GNBParamList
.
paramarray
[
0
][
GNB_ULPRBBLACKLIST_IDX
].
strptr
;
if
(
ulprbbl
)
LOG_I
(
NR_PHY
,
"PRB blacklist %s
\n
"
,
ulprbbl
);
char
*
pt
=
strtok
(
ulprbbl
,
","
);
char
*
save
=
NULL
;
char
*
pt
=
strtok_r
(
ulprbbl
,
","
,
&
save
);
int
prbbl
[
275
];
int
num_prbbl
=
0
;
memset
(
prbbl
,
0
,
275
*
sizeof
(
int
));
while
(
pt
)
{
prbbl
[
atoi
(
pt
)]
=
1
;
const
int
rb
=
atoi
(
pt
);
AssertFatal
(
rb
<
275
,
"RB %d out of bounds (max 275)
\n
"
,
rb
);
prbbl
[
rb
]
=
0x3FFF
;
// all symbols taken
LOG_I
(
NR_PHY
,
"Blacklisting prb %d
\n
"
,
atoi
(
pt
));
pt
=
strtok
(
NULL
,
","
);
pt
=
strtok
_r
(
NULL
,
","
,
&
save
);
num_prbbl
++
;
}
...
...
@@ -736,15 +739,16 @@ void RCconfig_nr_macrlc() {
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
char
*
ulprbbl
=
*
GNBParamList
.
paramarray
[
0
][
GNB_ULPRBBLACKLIST_IDX
].
strptr
;
char
*
pt
=
strtok
(
ulprbbl
,
","
);
int
prbbl
[
275
];
char
*
save
=
NULL
;
char
*
pt
=
strtok_r
(
ulprbbl
,
","
,
&
save
);
uint16_t
prbbl
[
275
];
int
num_prbbl
=
0
;
int
prb
;
memset
(
prbbl
,
0
,
275
*
sizeof
(
int
));
memset
(
prbbl
,
0
,
sizeof
(
prbbl
));
while
(
pt
)
{
prb
=
atoi
(
pt
);
prbbl
[
prb
]
=
1
;
pt
=
strtok
(
NULL
,
","
);
const
int
prb
=
atoi
(
pt
);
AssertFatal
(
prb
<
275
,
"RB %d out of bounds (max 275)
\n
"
,
prb
);
prbbl
[
prb
]
=
0x3FFF
;
// all symbols taken
pt
=
strtok_r
(
NULL
,
","
,
&
save
);
num_prbbl
++
;
}
...
...
@@ -1458,7 +1462,8 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) {
// NGAP_REGISTER_GNB_REQ (msg_p).enb_interface_name_for_NGU = strdup(enb_interface_name_for_NGU);
cidr
=
*
(
NETParams
[
GNB_IPV4_ADDRESS_FOR_NG_AMF_IDX
].
strptr
);
address
=
strtok
(
cidr
,
"/"
);
char
*
save
=
NULL
;
address
=
strtok_r
(
cidr
,
"/"
,
&
save
);
NGAP_REGISTER_GNB_REQ
(
msg_p
).
gnb_ip_address
.
ipv6
=
0
;
NGAP_REGISTER_GNB_REQ
(
msg_p
).
gnb_ip_address
.
ipv4
=
1
;
...
...
@@ -1730,7 +1735,8 @@ int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i) {
}
cidr
=
*
(
NETParams
[
ENB_IPV4_ADDR_FOR_X2C_IDX
].
strptr
);
address
=
strtok
(
cidr
,
"/"
);
char
*
save
=
NULL
;
address
=
strtok_r
(
cidr
,
"/"
,
&
save
);
X2AP_REGISTER_ENB_REQ
(
msg_p
).
enb_x2_ip_address
.
ipv6
=
0
;
X2AP_REGISTER_ENB_REQ
(
msg_p
).
enb_x2_ip_address
.
ipv4
=
1
;
strcpy
(
X2AP_REGISTER_ENB_REQ
(
msg_p
).
enb_x2_ip_address
.
ipv4_address
,
address
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
7cbca077
...
...
@@ -318,7 +318,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
const
int
num_slots
=
nr_slots_per_frame
[
*
scc
->
ssbSubcarrierSpacing
];
const
int
last_slot
=
(
slot
+
num_slots
-
1
)
%
num_slots
;
uint16_t
*
vrb_map_UL
=
cc
[
CC_id
].
vrb_map_UL
;
mem
set
(
&
vrb_map_UL
[
last_slot
*
MAX_BWP_SIZE
],
0
,
sizeof
(
uint16_t
)
*
MAX_BWP_SIZE
);
mem
cpy
(
&
vrb_map_UL
[
last_slot
*
MAX_BWP_SIZE
],
&
RC
.
nrmac
[
module_idP
]
->
ulprbbl
,
sizeof
(
uint16_t
)
*
MAX_BWP_SIZE
);
clear_nr_nfapi_information
(
RC
.
nrmac
[
module_idP
],
CC_id
,
frame
,
slot
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
7cbca077
...
...
@@ -389,7 +389,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
const
int16_t
N_RA_RB
=
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
mu_pusch
);
uint16_t
*
vrb_map_UL
=
&
cc
->
vrb_map_UL
[
slotP
*
MAX_BWP_SIZE
];
for
(
int
i
=
0
;
i
<
N_RA_RB
*
fdm
;
++
i
)
vrb_map_UL
[
bwp_start
+
rach_ConfigGeneric
->
msg1_FrequencyStart
+
i
]
=
0xff
;
// all symbols
vrb_map_UL
[
bwp_start
+
rach_ConfigGeneric
->
msg1_FrequencyStart
+
i
]
=
SL_to_bitmap
(
start_symbol
,
N_t_slot
*
N_dur
);
}
}
}
...
...
@@ -772,6 +772,8 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
int
scs
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
;
int
fh
=
0
;
int
startSymbolAndLength
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
->
list
.
array
[
ra
->
Msg3_tda_id
]
->
startSymbolAndLength
;
int
StartSymbolIndex
,
NrOfSymbols
;
SLIV2SL
(
startSymbolAndLength
,
&
StartSymbolIndex
,
&
NrOfSymbols
);
int
mappingtype
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
->
list
.
array
[
ra
->
Msg3_tda_id
]
->
mappingType
;
uint16_t
*
vrb_map_UL
=
&
RC
.
nrmac
[
module_idP
]
->
common_channels
[
CC_id
].
vrb_map_UL
[
sched_slot
*
MAX_BWP_SIZE
];
...
...
@@ -780,7 +782,7 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
int
BWPSize
=
nr_mac
->
type0_PDCCH_CSS_config
[
ra
->
beam_id
].
num_rbs
;
int
rbStart
=
0
;
for
(
int
i
=
0
;
(
i
<
ra
->
msg3_nb_rb
)
&&
(
rbStart
<=
(
BWPSize
-
ra
->
msg3_nb_rb
));
i
++
)
{
if
(
vrb_map_UL
[
rbStart
+
BWPStart
+
i
])
{
if
(
vrb_map_UL
[
rbStart
+
BWPStart
+
i
]
&
SL_to_bitmap
(
StartSymbolIndex
,
NrOfSymbols
)
)
{
rbStart
+=
i
;
i
=
0
;
}
...
...
@@ -898,7 +900,7 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
aggregation_level
);
for
(
int
rb
=
0
;
rb
<
ra
->
msg3_nb_rb
;
rb
++
)
{
vrb_map_UL
[
rbStart
+
BWPStart
+
rb
]
=
1
;
vrb_map_UL
[
rbStart
+
BWPStart
+
rb
]
|=
SL_to_bitmap
(
StartSymbolIndex
,
NrOfSymbols
)
;
}
// reset state to wait msg3
...
...
@@ -928,6 +930,9 @@ void nr_get_Msg3alloc(module_id_t module_id,
int
mu
=
ubwp
?
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
:
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
;
int
StartSymbolIndex
=
0
;
int
NrOfSymbols
=
0
;
int
startSymbolAndLength
=
0
;
int
temp_slot
=
0
;
ra
->
Msg3_tda_id
=
16
;
// initialization to a value above limit
...
...
@@ -942,6 +947,8 @@ void nr_get_Msg3alloc(module_id_t module_id,
int
nb_periods_per_frame
=
get_nb_periods_per_frame
(
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
);
int
nb_slots_per_period
=
((
1
<<
mu
)
*
10
)
/
nb_periods_per_frame
;
for
(
int
i
=
0
;
i
<
pusch_TimeDomainAllocationList
->
list
.
count
;
i
++
)
{
startSymbolAndLength
=
pusch_TimeDomainAllocationList
->
list
.
array
[
i
]
->
startSymbolAndLength
;
SLIV2SL
(
startSymbolAndLength
,
&
StartSymbolIndex
,
&
NrOfSymbols
);
k2
=
*
pusch_TimeDomainAllocationList
->
list
.
array
[
i
]
->
k2
;
// we want to transmit in the uplink symbols of mixed slot
if
((
k2
+
DELTA
[
mu
])
%
nb_slots_per_period
==
0
)
{
...
...
@@ -949,6 +956,8 @@ void nr_get_Msg3alloc(module_id_t module_id,
ra
->
Msg3_slot
=
temp_slot
%
nr_slots_per_frame
[
mu
];
if
(
is_xlsch_in_slot
(
RC
.
nrmac
[
module_id
]
->
ulsch_slot_bitmap
[
ra
->
Msg3_slot
/
64
],
ra
->
Msg3_slot
))
{
ra
->
Msg3_tda_id
=
i
;
ra
->
msg3_startsymb
=
StartSymbolIndex
;
ra
->
msg3_nrsymb
=
NrOfSymbols
;
break
;
}
}
...
...
@@ -1002,11 +1011,12 @@ void nr_get_Msg3alloc(module_id_t module_id,
while
(
rbSize
<
msg3_nb_rb
)
{
rbStart
+=
rbSize
;
/* last iteration rbSize was not enough, skip it */
rbSize
=
0
;
while
(
rbStart
<
bwpSize
&&
vrb_map_UL
[
rbStart
+
bwpStart
])
while
(
rbStart
<
bwpSize
&&
(
vrb_map_UL
[
rbStart
+
bwpStart
]
&
SL_to_bitmap
(
StartSymbolIndex
,
NrOfSymbols
)))
rbStart
++
;
AssertFatal
(
rbStart
<
bwpSize
-
msg3_nb_rb
,
"no space to allocate Msg 3 for RA!
\n
"
);
while
(
rbStart
+
rbSize
<
bwpSize
&&
!
vrb_map_UL
[
rbStart
+
bwpStart
+
rbSize
]
&&
!
(
vrb_map_UL
[
rbStart
+
bwpStart
+
rbSize
]
&
SL_to_bitmap
(
StartSymbolIndex
,
NrOfSymbols
))
&&
rbSize
<
msg3_nb_rb
)
rbSize
++
;
}
...
...
@@ -1113,7 +1123,7 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
i
+
ra
->
msg3_first_rb
,
ra
->
Msg3_frame
,
ra
->
Msg3_slot
);
vrb_map_UL
[
i
+
ra
->
msg3_first_rb
+
ra
->
msg3_bwp_start
]
=
1
;
vrb_map_UL
[
i
+
ra
->
msg3_first_rb
+
ra
->
msg3_bwp_start
]
|=
SL_to_bitmap
(
ra
->
msg3_startsymb
,
ra
->
msg3_nrsymb
)
;
}
LOG_D
(
NR_MAC
,
"[gNB %d][RAPROC] Frame %d, Slot %d : CC_id %d RA is active, Msg3 in (%d,%d)
\n
"
,
module_idP
,
frameP
,
slotP
,
CC_id
,
ra
->
Msg3_frame
,
ra
->
Msg3_slot
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
7cbca077
...
...
@@ -691,7 +691,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
/* retransmissions: directly allocate */
*
n_rb_sched
-=
sched_ctrl
->
sched_pdsch
.
rbSize
;
for
(
int
rb
=
0
;
rb
<
sched_ctrl
->
sched_pdsch
.
rbSize
;
rb
++
)
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pdsch
.
rbStart
]
-
=
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
);
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pdsch
.
rbStart
]
^
=
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
);
return
true
;
}
...
...
@@ -910,7 +910,7 @@ void pf_dl(module_id_t module_id,
/* transmissions: directly allocate */
n_rb_sched
-=
sched_pdsch
->
rbSize
;
for
(
int
rb
=
0
;
rb
<
sched_pdsch
->
rbSize
;
rb
++
)
rballoc_mask
[
rb
+
sched_pdsch
->
rbStart
]
-
=
slbitmap
;
rballoc_mask
[
rb
+
sched_pdsch
->
rbStart
]
^
=
slbitmap
;
}
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
7cbca077
...
...
@@ -481,9 +481,8 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
uint16_t
*
vrb_map_UL
=
&
RC
.
nrmac
[
module_id
]
->
common_channels
[
CC_id
].
vrb_map_UL
[
sched_slot
*
MAX_BWP_SIZE
];
const
uint16_t
symb
=
((
1
<<
ps
->
nrOfSymbols
)
-
1
)
<<
ps
->
startSymbolIndex
;
for
(
int
i
=
rbStart
;
i
<
rbStart
+
rbSize
;
++
i
)
{
if
((
vrb_map_UL
[
i
+
BWPStart
]
&
symb
)
!=
0
)
{
if
((
vrb_map_UL
[
i
+
BWPStart
]
&
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)
)
!=
0
)
{
LOG_E
(
MAC
,
"%s(): %4d.%2d RB %d is already reserved, cannot schedule UE
\n
"
,
__func__
,
...
...
@@ -561,6 +560,6 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
sched_ctrl
->
aggregation_level
);
for
(
int
rb
=
rbStart
;
rb
<
rbStart
+
rbSize
;
rb
++
)
vrb_map_UL
[
rb
+
BWPStart
]
=
1
;
vrb_map_UL
[
rb
+
BWPStart
]
|=
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)
;
return
true
;
}
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
7cbca077
...
...
@@ -1235,23 +1235,26 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
else
{
// this is the default PUCCH configuration, PUCCH format 0 or 1
LOG_D
(
NR_MAC
,
"pucch_acknak: Filling default PUCCH configuration from Tables (r_pucch %d, bwp %p)
\n
"
,
r_pucch
,
bwp
);
int
rsetindex
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
choice
.
setup
->
pucch_ResourceCommon
;
int
prboffset
=
r_pucch
/
default_pucch_csset
[
rsetindex
];
int
prboffsetm8
=
(
r_pucch
-
8
)
/
default_pucch_csset
[
rsetindex
];
pucch_pdu
->
prb_start
=
(
r_pucch
>>
3
)
==
0
?
default_pucch_prboffset
[
rsetindex
]
+
prboffset
:
pucch_pdu
->
bwp_size
-
1
-
default_pucch_prboffset
[
rsetindex
]
-
prboffsetm8
;
int
prb_start
,
second_hop_prb
,
nr_of_symb
,
start_symb
;
set_r_pucch_parms
(
rsetindex
,
r_pucch
,
pucch_pdu
->
bwp_size
,
&
prb_start
,
&
second_hop_prb
,
&
nr_of_symb
,
&
start_symb
);
pucch_pdu
->
prb_start
=
prb_start
;
pucch_pdu
->
rnti
=
rnti
;
pucch_pdu
->
freq_hop_flag
=
1
;
pucch_pdu
->
second_hop_prb
=
(
r_pucch
>>
3
)
==
0
?
pucch_pdu
->
bwp_size
-
1
-
default_pucch_prboffset
[
rsetindex
]
-
prboffset
:
default_pucch_prboffset
[
rsetindex
]
+
prboffsetm8
;
pucch_pdu
->
second_hop_prb
=
second_hop_prb
;
pucch_pdu
->
format_type
=
default_pucch_fmt
[
rsetindex
];
pucch_pdu
->
initial_cyclic_shift
=
r_pucch
%
default_pucch_csset
[
rsetindex
];
if
(
rsetindex
==
3
||
rsetindex
==
7
||
rsetindex
==
11
)
pucch_pdu
->
initial_cyclic_shift
*=
6
;
else
if
(
rsetindex
==
1
||
rsetindex
==
2
)
pucch_pdu
->
initial_cyclic_shift
*=
3
;
else
pucch_pdu
->
initial_cyclic_shift
*=
4
;
pucch_pdu
->
nr_of_symbols
=
default_pucch_numbsymb
[
rsetindex
]
;
pucch_pdu
->
start_symbol_index
=
default_pucch_firstsymb
[
rsetindex
]
;
pucch_pdu
->
nr_of_symbols
=
nr_of_symb
;
pucch_pdu
->
start_symbol_index
=
start_symb
;
if
(
pucch_pdu
->
format_type
==
1
)
pucch_pdu
->
time_domain_occ_idx
=
0
;
// check this!!
pucch_pdu
->
sr_flag
=
O_sr
;
pucch_pdu
->
prb_size
=
1
;
...
...
@@ -1259,6 +1262,32 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
}
void
set_r_pucch_parms
(
int
rsetindex
,
int
r_pucch
,
int
bwp_size
,
int
*
prb_start
,
int
*
second_hop_prb
,
int
*
nr_of_symbols
,
int
*
start_symbol_index
)
{
// procedure described in 38.213 section 9.2.1
int
prboffset
=
r_pucch
/
default_pucch_csset
[
rsetindex
];
int
prboffsetm8
=
(
r_pucch
-
8
)
/
default_pucch_csset
[
rsetindex
];
*
prb_start
=
(
r_pucch
>>
3
)
==
0
?
default_pucch_prboffset
[
rsetindex
]
+
prboffset
:
bwp_size
-
1
-
default_pucch_prboffset
[
rsetindex
]
-
prboffsetm8
;
*
second_hop_prb
=
(
r_pucch
>>
3
)
==
0
?
bwp_size
-
1
-
default_pucch_prboffset
[
rsetindex
]
-
prboffset
:
default_pucch_prboffset
[
rsetindex
]
+
prboffsetm8
;
*
nr_of_symbols
=
default_pucch_numbsymb
[
rsetindex
];
*
start_symbol_index
=
default_pucch_firstsymb
[
rsetindex
];
}
void
prepare_dci
(
const
NR_CellGroupConfig_t
*
CellGroup
,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
nr_dci_format_t
format
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
7cbca077
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
7cbca077
...
...
@@ -977,13 +977,6 @@ bool allocate_ul_retransmission(module_id_t module_id,
LOG_D
(
NR_MAC
,
"retInfo->time_domain_allocation = %d, tda = %d
\n
"
,
retInfo
->
time_domain_allocation
,
tda
);
LOG_D
(
NR_MAC
,
"num_dmrs_cdm_grps_no_data %d, tbs %d
\n
"
,
num_dmrs_cdm_grps_no_data
,
retInfo
->
tb_size
);
if
(
tda
==
retInfo
->
time_domain_allocation
)
{
/* Check the resource is enough for retransmission */
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
rbStart
++
;
if
(
rbStart
+
retInfo
->
rbSize
>
bwpSize
)
{
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
;
}
/* check whether we need to switch the TDA allocation since tha last
* (re-)transmission */
NR_pusch_semi_static_t
*
ps
=
&
sched_ctrl
->
pusch_semi_static
;
...
...
@@ -997,18 +990,29 @@ bool allocate_ul_retransmission(module_id_t module_id,
nr_set_pusch_semi_static
(
scc
,
sched_ctrl
->
active_ubwp
,
ubwpd
,
dci_format
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
sched_ctrl
->
update_pusch_ps
=
false
;
}
/* Check the resource is enough for retransmission */
while
(
rbStart
<
bwpSize
&&
!
(
rballoc_mask
[
rbStart
]
&
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)))
rbStart
++
;
if
(
rbStart
+
retInfo
->
rbSize
>
bwpSize
)
{
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
;
}
LOG_D
(
NR_MAC
,
"%s(): retransmission keeping TDA %d and TBS %d
\n
"
,
__func__
,
tda
,
retInfo
->
tb_size
);
}
else
{
NR_pusch_semi_static_t
temp_ps
;
int
dci_format
=
get_dci_format
(
sched_ctrl
);
nr_set_pusch_semi_static
(
scc
,
sched_ctrl
->
active_ubwp
,
ubwpd
,
dci_format
,
tda
,
num_dmrs_cdm_grps_no_data
,
&
temp_ps
);
/* the retransmission will use a different time domain allocation, check
* that we have enough resources */
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
while
(
rbStart
<
bwpSize
&&
!
(
rballoc_mask
[
rbStart
]
&
SL_to_bitmap
(
temp_ps
.
startSymbolIndex
,
temp_ps
.
nrOfSymbols
)))
rbStart
++
;
int
rbSize
=
0
;
while
(
rbStart
+
rbSize
<
bwpSize
&&
rballoc_mask
[
rbStart
+
rbSize
])
while
(
rbStart
+
rbSize
<
bwpSize
&&
(
rballoc_mask
[
rbStart
+
rbSize
]
&
SL_to_bitmap
(
temp_ps
.
startSymbolIndex
,
temp_ps
.
nrOfSymbols
)))
rbSize
++
;
NR_pusch_semi_static_t
temp_ps
;
int
dci_format
=
get_dci_format
(
sched_ctrl
);
nr_set_pusch_semi_static
(
scc
,
sched_ctrl
->
active_ubwp
,
ubwpd
,
dci_format
,
tda
,
num_dmrs_cdm_grps_no_data
,
&
temp_ps
);
uint32_t
new_tbs
;
uint16_t
new_rbSize
;
bool
success
=
nr_find_nb_rb
(
retInfo
->
Qm
,
...
...
@@ -1091,7 +1095,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
/* Mark the corresponding RBs as used */
n_rb_sched
-=
sched_pusch
->
rbSize
;
for
(
int
rb
=
0
;
rb
<
sched_ctrl
->
sched_pusch
.
rbSize
;
rb
++
)
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
=
0
;
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
^=
SL_to_bitmap
(
sched_ctrl
->
pusch_semi_static
.
startSymbolIndex
,
sched_ctrl
->
pusch_semi_static
.
nrOfSymbols
)
;
return
true
;
}
...
...
@@ -1209,21 +1213,6 @@ void pf_ul(module_id_t module_id,
if
(
max_num_ue
<
0
)
return
;
LOG_D
(
NR_MAC
,
"Looking for min_rb %d RBs, starting at %d
\n
"
,
min_rb
,
rbStart
);
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
rbStart
++
;
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
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
min_rb
,
bwpSize
);
return
;
}
sched_ctrl
->
cce_index
=
CCEIndex
;
fill_pdcch_vrb_map
(
RC
.
nrmac
[
module_id
],
CC_id
,
&
sched_ctrl
->
sched_pdcch
,
CCEIndex
,
sched_ctrl
->
aggregation_level
);
/* Save PUSCH field */
/* we want to avoid a lengthy deduction of DMRS and other parameters in
* every TTI if we can save it, so check whether dci_format, TDA, or
...
...
@@ -1238,6 +1227,24 @@ void pf_ul(module_id_t module_id,
nr_set_pusch_semi_static
(
scc
,
sched_ctrl
->
active_ubwp
,
ubwpd
,
dci_format
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
sched_ctrl
->
update_pusch_ps
=
false
;
}
LOG_D
(
NR_MAC
,
"Looking for min_rb %d RBs, starting at %d
\n
"
,
min_rb
,
rbStart
);
while
(
rbStart
<
bwpSize
&&
!
(
rballoc_mask
[
rbStart
]
&
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)))
rbStart
++
;
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
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
min_rb
,
bwpSize
);
return
;
}
sched_ctrl
->
cce_index
=
CCEIndex
;
fill_pdcch_vrb_map
(
RC
.
nrmac
[
module_id
],
CC_id
,
&
sched_ctrl
->
sched_pdcch
,
CCEIndex
,
sched_ctrl
->
aggregation_level
);
NR_sched_pusch_t
*
sched_pusch
=
&
sched_ctrl
->
sched_pusch
;
sched_pusch
->
mcs
=
9
;
update_ul_ue_R_Qm
(
sched_pusch
,
ps
);
...
...
@@ -1256,7 +1263,7 @@ void pf_ul(module_id_t module_id,
/* Mark the corresponding RBs as used */
n_rb_sched
-=
sched_pusch
->
rbSize
;
for
(
int
rb
=
0
;
rb
<
sched_ctrl
->
sched_pusch
.
rbSize
;
rb
++
)
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
=
0
;
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
^=
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)
;
continue
;
}
...
...
@@ -1331,19 +1338,6 @@ void pf_ul(module_id_t module_id,
NR_sched_pusch_t
*
sched_pusch
=
&
sched_ctrl
->
sched_pusch
;
NR_pusch_semi_static_t
*
ps
=
&
sched_ctrl
->
pusch_semi_static
;
while
(
rbStart
<
bwpSize
&&
!
rballoc_mask
[
rbStart
])
rbStart
++
;
sched_pusch
->
rbStart
=
rbStart
;
uint16_t
max_rbSize
=
1
;
while
(
rbStart
+
max_rbSize
<
bwpSize
&&
rballoc_mask
[
rbStart
+
max_rbSize
])
max_rbSize
++
;
if
(
rbStart
+
min_rb
>=
bwpSize
)
{
LOG_W
(
NR_MAC
,
"cannot allocate UL data for UE %d/RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
min_rb
,
bwpSize
);
return
;
}
else
LOG_D
(
NR_MAC
,
"allocating UL data for UE %d/RNTI %04x (rbStsart %d, min_rb %d, bwpSize %d
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
min_rb
,
bwpSize
);
/* Save PUSCH field */
/* we want to avoid a lengthy deduction of DMRS and other parameters in
* every TTI if we can save it, so check whether dci_format, TDA, or
...
...
@@ -1360,6 +1354,23 @@ void pf_ul(module_id_t module_id,
}
update_ul_ue_R_Qm
(
sched_pusch
,
ps
);
while
(
rbStart
<
bwpSize
&&
!
(
rballoc_mask
[
rbStart
]
&
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)))
rbStart
++
;
sched_pusch
->
rbStart
=
rbStart
;
uint16_t
max_rbSize
=
1
;
while
(
rbStart
+
max_rbSize
<
bwpSize
&&
(
rballoc_mask
[
rbStart
+
max_rbSize
]
&&
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)))
max_rbSize
++
;
if
(
rbStart
+
min_rb
>=
bwpSize
)
{
LOG_W
(
NR_MAC
,
"cannot allocate UL data for UE %d/RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
min_rb
,
bwpSize
);
return
;
}
else
LOG_D
(
NR_MAC
,
"allocating UL data for UE %d/RNTI %04x (rbStsart %d, min_rb %d, bwpSize %d
\n
"
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
rbStart
,
min_rb
,
bwpSize
);
/* Calculate the current scheduling bytes and the necessary RBs */
const
int
B
=
cmax
(
sched_ctrl
->
estimated_ul_buffer
-
sched_ctrl
->
sched_ul_bytes
,
0
);
uint16_t
rbSize
=
0
;
...
...
@@ -1390,7 +1401,7 @@ void pf_ul(module_id_t module_id,
n_rb_sched
-=
sched_pusch
->
rbSize
;
for
(
int
rb
=
0
;
rb
<
sched_ctrl
->
sched_pusch
.
rbSize
;
rb
++
)
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
=
0
;
rballoc_mask
[
rb
+
sched_ctrl
->
sched_pusch
.
rbStart
]
^=
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
)
;
}
}
...
...
@@ -1473,11 +1484,9 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
const
int
startSymbolAndLength
=
tdaList
->
list
.
array
[
tda
]
->
startSymbolAndLength
;
int
startSymbolIndex
,
nrOfSymbols
;
SLIV2SL
(
startSymbolAndLength
,
&
startSymbolIndex
,
&
nrOfSymbols
);
const
uint16_t
symb
=
((
1
<<
nrOfSymbols
)
-
1
)
<<
startSymbolIndex
;
const
uint16_t
symb
=
SL_to_bitmap
(
startSymbolIndex
,
nrOfSymbols
)
;
int
st
=
0
,
e
=
0
,
len
=
0
;
for
(
int
i
=
0
;
i
<
bwpSize
;
i
++
)
if
(
RC
.
nrmac
[
module_id
]
->
ulprbbl
[
i
]
==
1
)
vrb_map_UL
[
i
]
=
symb
;
for
(
int
i
=
0
;
i
<
bwpSize
;
i
++
)
{
while
((
vrb_map_UL
[
bwpStart
+
i
]
&
symb
)
!=
0
&&
i
<
bwpSize
)
...
...
@@ -1498,7 +1507,7 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
/* Calculate mask: if any RB in vrb_map_UL is blocked (1), the current RB will be 0 */
for
(
int
i
=
0
;
i
<
bwpSize
;
i
++
)
rballoc_mask
[
i
]
=
i
>=
st
&&
i
<=
e
;
rballoc_mask
[
i
]
=
(
i
>=
st
&&
i
<=
e
)
*
SL_to_bitmap
(
startSymbolIndex
,
nrOfSymbols
)
;
/* proportional fair scheduling algorithm */
pf_ul
(
module_id
,
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
7cbca077
...
...
@@ -291,6 +291,14 @@ void prepare_dci(const NR_CellGroupConfig_t *CellGroup,
nr_dci_format_t
format
,
int
bwp_id
);
void
set_r_pucch_parms
(
int
rsetindex
,
int
r_pucch
,
int
bwp_size
,
int
*
prb_start
,
int
*
second_hop_prb
,
int
*
nr_of_symbols
,
int
*
start_symbol_index
);
/* find coreset within the search space */
NR_ControlResourceSet_t
*
get_coreset
(
module_id_t
module_idP
,
NR_ServingCellConfigCommon_t
*
scc
,
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
7cbca077
...
...
@@ -171,6 +171,8 @@ typedef struct {
uint8_t
msg3_round
;
/// Flag to indicate if Msg3 carries a DCCH or DTCH message
bool
msg3_dcch_dtch
;
int
msg3_startsymb
;
int
msg3_nrsymb
;
/// TBS used for Msg4
int
msg4_TBsize
;
/// MCS used for Msg4
...
...
@@ -327,6 +329,10 @@ typedef struct NR_sched_pucch {
uint8_t
timing_indicator
;
uint8_t
resource_indicator
;
int
r_pucch
;
int
prb_start
;
int
second_hop_prb
;
int
nr_of_symb
;
int
start_symb
;
}
NR_sched_pucch_t
;
/* PUSCH semi-static configuration: as long as the TDA and DCI format remain
...
...
@@ -724,7 +730,7 @@ typedef struct gNB_MAC_INST_s {
/// current PDU index (BCH,DLSCH)
uint16_t
pdu_index
[
NFAPI_CC_MAX
];
int
num_ulprbbl
;
in
t
ulprbbl
[
275
];
uint16_
t
ulprbbl
[
275
];
/// NFAPI Config Request Structure
nfapi_nr_config_request_scf_t
config
[
NFAPI_CC_MAX
];
/// NFAPI DL Config Request Structure
...
...
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