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
87d95177
Commit
87d95177
authored
Apr 17, 2023
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avoid duplicated function in nr_common for supported bandwidth
parent
56367dd0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
272 additions
and
364 deletions
+272
-364
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+20
-132
common/utils/nr/nr_common.h
common/utils/nr/nr_common.h
+1
-1
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+2
-1
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+2
-1
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+181
-174
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+66
-55
No files found.
common/utils/nr/nr_common.c
View file @
87d95177
...
...
@@ -49,8 +49,8 @@ int get_supported_band_index(int scs, int band, int n_rbs)
int
scs_index
=
scs
;
if
(
band
>
256
)
scs_index
++
;
for
(
int
i
=
0
;
i
<
1
1
;
i
++
)
{
if
(
n_rbs
==
tables_5_3_2
[
scs
][
i
])
for
(
int
i
=
0
;
i
<
1
2
;
i
++
)
{
if
(
n_rbs
==
tables_5_3_2
[
scs
_index
][
i
])
return
i
;
}
return
(
-
1
);
// not found
...
...
@@ -130,34 +130,34 @@ const nr_bandentry_t nr_bandtable[] = {
{
261
,
27500040
,
28350000
,
27500040
,
28350000
,
2
,
2070833
,
120
}
};
int
get_supported_bw_
k
hz
(
frequency_range_t
frequency_range
,
int
bw_index
)
int
get_supported_bw_
m
hz
(
frequency_range_t
frequency_range
,
int
bw_index
)
{
if
(
frequency_range
==
FR1
)
{
switch
(
bw_index
)
{
case
0
:
return
5
000
;
// 5MHz
return
5
;
// 5MHz
case
1
:
return
10
000
;
return
10
;
case
2
:
return
15
000
;
return
15
;
case
3
:
return
20
000
;
return
20
;
case
4
:
return
25
000
;
return
25
;
case
5
:
return
30
000
;
return
30
;
case
6
:
return
40
000
;
return
40
;
case
7
:
return
50
000
;
return
50
;
case
8
:
return
60
000
;
return
60
;
case
9
:
return
80
000
;
return
80
;
case
10
:
return
90
000
;
return
90
;
case
11
:
return
100
000
;
return
100
;
default
:
AssertFatal
(
false
,
"Invalid band index for FR1 %d
\n
"
,
bw_index
);
}
...
...
@@ -165,13 +165,13 @@ int get_supported_bw_khz(frequency_range_t frequency_range, int bw_index)
else
{
switch
(
bw_index
)
{
case
0
:
return
50
000
;
// 50MHz
return
50
;
// 50MHz
case
1
:
return
100
000
;
return
100
;
case
2
:
return
200
000
;
return
200
;
case
3
:
return
400
000
;
return
400
;
default
:
AssertFatal
(
false
,
"Invalid band index for FR2 %d
\n
"
,
bw_index
);
}
...
...
@@ -184,7 +184,7 @@ bool compare_relative_ul_channel_bw(int nr_band, int scs, int nb_ul, frame_type_
// Relative channel bandwidth <= 4% for TDD bands and <= 3% for FDD bands
int
index
=
get_nr_table_idx
(
nr_band
,
scs
);
int
bw_index
=
get_supported_band_index
(
scs
,
nr_band
,
nb_ul
);
int
band_size_khz
=
get_supported_bw_
khz
(
nr_band
>
256
?
FR2
:
FR1
,
bw_index
)
;
int
band_size_khz
=
get_supported_bw_
mhz
(
nr_band
>
256
?
FR2
:
FR1
,
bw_index
)
*
1000
;
float
limit
=
frame_type
==
TDD
?
0
.
04
:
0
.
03
;
float
rel_bw
=
(
float
)
(
2
*
band_size_khz
)
/
(
float
)
(
nr_bandtable
[
index
].
ul_max
+
nr_bandtable
[
index
].
ul_min
);
return
rel_bw
<=
limit
;
...
...
@@ -382,118 +382,6 @@ int32_t get_delta_duplex(int nr_bandP, uint8_t scs_index)
return
delta_duplex
;
}
uint16_t
config_bandwidth
(
int
mu
,
int
nb_rb
,
int
nr_band
)
{
if
(
nr_band
<
100
)
{
//FR1
switch
(
mu
)
{
case
0
:
if
(
nb_rb
<=
25
)
return
5
;
if
(
nb_rb
<=
52
)
return
10
;
if
(
nb_rb
<=
79
)
return
15
;
if
(
nb_rb
<=
106
)
return
20
;
if
(
nb_rb
<=
133
)
return
25
;
if
(
nb_rb
<=
160
)
return
30
;
if
(
nb_rb
<=
216
)
return
40
;
if
(
nb_rb
<=
270
)
return
50
;
AssertFatal
(
1
==
0
,
"Number of DL resource blocks %d undefined for mu %d and band %d
\n
"
,
nb_rb
,
mu
,
nr_band
);
break
;
case
1
:
if
(
nb_rb
<=
11
)
return
5
;
if
(
nb_rb
<=
24
)
return
10
;
if
(
nb_rb
<=
38
)
return
15
;
if
(
nb_rb
<=
51
)
return
20
;
if
(
nb_rb
<=
65
)
return
25
;
if
(
nb_rb
<=
78
)
return
30
;
if
(
nb_rb
<=
106
)
return
40
;
if
(
nb_rb
<=
133
)
return
50
;
if
(
nb_rb
<=
162
)
return
60
;
if
(
nb_rb
<=
189
)
return
70
;
if
(
nb_rb
<=
217
)
return
80
;
if
(
nb_rb
<=
245
)
return
90
;
if
(
nb_rb
<=
273
)
return
100
;
AssertFatal
(
1
==
0
,
"Number of DL resource blocks %d undefined for mu %d and band %d
\n
"
,
nb_rb
,
mu
,
nr_band
);
break
;
case
2
:
if
(
nb_rb
<=
11
)
return
10
;
if
(
nb_rb
<=
18
)
return
15
;
if
(
nb_rb
<=
24
)
return
20
;
if
(
nb_rb
<=
31
)
return
25
;
if
(
nb_rb
<=
38
)
return
30
;
if
(
nb_rb
<=
51
)
return
40
;
if
(
nb_rb
<=
65
)
return
50
;
if
(
nb_rb
<=
79
)
return
60
;
if
(
nb_rb
<=
93
)
return
70
;
if
(
nb_rb
<=
107
)
return
80
;
if
(
nb_rb
<=
121
)
return
90
;
if
(
nb_rb
<=
135
)
return
100
;
AssertFatal
(
1
==
0
,
"Number of DL resource blocks %d undefined for mu %d and band %d
\n
"
,
nb_rb
,
mu
,
nr_band
);
break
;
default:
AssertFatal
(
1
==
0
,
"Numerology %d undefined for band %d in FR1
\n
"
,
mu
,
nr_band
);
}
}
else
{
switch
(
mu
)
{
case
2
:
if
(
nb_rb
<=
66
)
return
50
;
if
(
nb_rb
<=
132
)
return
100
;
if
(
nb_rb
<=
264
)
return
200
;
AssertFatal
(
1
==
0
,
"Number of DL resource blocks %d undefined for mu %d and band %d
\n
"
,
nb_rb
,
mu
,
nr_band
);
break
;
case
3
:
if
(
nb_rb
<=
32
)
return
50
;
if
(
nb_rb
<=
66
)
return
100
;
if
(
nb_rb
<=
132
)
return
200
;
if
(
nb_rb
<=
264
)
return
400
;
AssertFatal
(
1
==
0
,
"Number of DL resource blocks %d undefined for mu %d and band %d
\n
"
,
nb_rb
,
mu
,
nr_band
);
break
;
default:
AssertFatal
(
1
==
0
,
"Numerology %d undefined for band %d in FR1
\n
"
,
mu
,
nr_band
);
}
}
}
// Returns the corresponding row index of the NR table
int
get_nr_table_idx
(
int
nr_bandP
,
uint8_t
scs_index
)
{
int
scs_khz
=
15
<<
scs_index
;
...
...
common/utils/nr/nr_common.h
View file @
87d95177
...
...
@@ -76,7 +76,6 @@ int get_first_ul_slot(int nrofDownlinkSlots, int nrofDownlinkSymbols, int nrofUp
int
cce_to_reg_interleaving
(
const
int
R
,
int
k
,
int
n_shift
,
const
int
C
,
int
L
,
const
int
N_regs
);
int
get_SLIV
(
uint8_t
S
,
uint8_t
L
);
void
get_coreset_rballoc
(
uint8_t
*
FreqDomainResource
,
int
*
n_rb
,
int
*
rb_offset
);
uint16_t
config_bandwidth
(
int
mu
,
int
nb_rb
,
int
nr_band
);
int
get_nr_table_idx
(
int
nr_bandP
,
uint8_t
scs_index
);
int32_t
get_delta_duplex
(
int
nr_bandP
,
uint8_t
scs_index
);
frame_type_t
get_frame_type
(
uint16_t
nr_bandP
,
uint8_t
scs_index
);
...
...
@@ -94,6 +93,7 @@ int get_supported_band_index(int scs, int band, int n_rbs);
long
rrc_get_max_nr_csrs
(
const
int
max_rbs
,
long
b_SRS
);
void
get_K1_K2
(
int
N1
,
int
N2
,
int
*
K1
,
int
*
K2
);
bool
compare_relative_ul_channel_bw
(
int
nr_band
,
int
scs
,
int
nb_ul
,
frame_type_t
frame_type
);
int
get_supported_bw_mhz
(
frequency_range_t
frequency_range
,
int
bw_index
);
void
get_samplerate_and_bw
(
int
mu
,
int
n_rb
,
int8_t
threequarter_fs
,
...
...
openair1/PHY/INIT/nr_init.c
View file @
87d95177
...
...
@@ -954,7 +954,8 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
}
fp
->
threequarter_fs
=
0
;
gNB_config
->
carrier_config
.
dl_bandwidth
.
value
=
config_bandwidth
(
mu
,
N_RB_DL
,
fp
->
nr_band
);
int
bw_index
=
get_supported_band_index
(
mu
,
fp
->
nr_band
,
N_RB_DL
);
gNB_config
->
carrier_config
.
dl_bandwidth
.
value
=
get_supported_bw_mhz
(
fp
->
nr_band
>
256
?
FR2
:
FR1
,
bw_index
);
nr_init_frame_parms
(
gNB_config
,
fp
);
...
...
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
87d95177
...
...
@@ -172,7 +172,8 @@ void nr_phy_config_request_sim_pbchsim(PHY_VARS_gNB *gNB,
else
fp
->
nr_band
=
78
;
fp
->
threequarter_fs
=
0
;
gNB_config
->
carrier_config
.
dl_bandwidth
.
value
=
config_bandwidth
(
mu
,
N_RB_DL
,
fp
->
nr_band
);
int
bw_index
=
get_supported_band_index
(
mu
,
fp
->
nr_band
,
N_RB_DL
);
gNB_config
->
carrier_config
.
dl_bandwidth
.
value
=
get_supported_bw_mhz
(
fp
->
nr_band
>
256
?
FR2
:
FR1
,
bw_index
);
fp
->
ofdm_offset_divisor
=
UINT_MAX
;
nr_init_frame_parms
(
gNB_config
,
fp
);
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
87d95177
...
...
@@ -117,7 +117,6 @@ void set_tdd_config_nr_ue(fapi_nr_config_request_t *cfg,
}
void
config_common_ue_sa
(
NR_UE_MAC_INST_t
*
mac
,
module_id_t
module_id
,
int
cc_idP
)
{
...
...
@@ -131,18 +130,20 @@ void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
LOG_D
(
MAC
,
"Entering SA UE Config Common
\n
"
);
// carrier config
cfg
->
carrier_config
.
dl_bandwidth
=
config_bandwidth
(
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
*
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
frequencyBandList
.
list
.
array
[
0
]
->
freqBandIndicatorNR
);
uint64_t
dl_bw_khz
=
(
12
*
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
)
*
(
15
<<
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
);
NR_FrequencyInfoDL_SIB_t
*
frequencyInfoDL
=
&
scc
->
downlinkConfigCommon
.
frequencyInfoDL
;
int
bw_index
=
get_supported_band_index
(
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
->
freqBandIndicatorNR
,
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
);
cfg
->
carrier_config
.
dl_bandwidth
=
get_supported_bw_mhz
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
->
freqBandIndicatorNR
>
256
?
FR2
:
FR1
,
bw_index
);
uint64_t
dl_bw_khz
=
(
12
*
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
)
*
(
15
<<
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
);
cfg
->
carrier_config
.
dl_frequency
=
(
downlink_frequency
[
cc_idP
][
0
]
/
1000
)
-
(
dl_bw_khz
>>
1
);
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
dl_k0
[
i
]
=
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
if
(
i
==
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
dl_k0
[
i
]
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
}
else
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
0
;
...
...
@@ -150,23 +151,25 @@ void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
}
}
cfg
->
carrier_config
.
uplink_bandwidth
=
config_bandwidth
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
frequencyBandList
==
NULL
?
*
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
frequencyBandList
.
list
.
array
[
0
]
->
freqBandIndicatorNR
:
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
frequencyBandList
->
list
.
array
[
0
]
->
freqBandIndicatorNR
);
NR_FrequencyInfoUL_SIB_t
*
frequencyInfoUL
=
&
scc
->
uplinkConfigCommon
->
frequencyInfoUL
;
int
UL_band_ind
=
frequencyInfoUL
->
frequencyBandList
==
NULL
?
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
->
freqBandIndicatorNR
:
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
]
->
freqBandIndicatorNR
;
bw_index
=
get_supported_band_index
(
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
UL_band_ind
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
);
cfg
->
carrier_config
.
uplink_bandwidth
=
get_supported_bw_mhz
(
UL_band_ind
>
256
?
FR2
:
FR1
,
bw_index
);
if
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
absoluteFrequencyPointA
==
NULL
)
if
(
frequencyInfoUL
->
absoluteFrequencyPointA
==
NULL
)
cfg
->
carrier_config
.
uplink_frequency
=
cfg
->
carrier_config
.
dl_frequency
;
else
// TODO check if corresponds to what reported in SIB1
cfg
->
carrier_config
.
uplink_frequency
=
(
downlink_frequency
[
cc_idP
][
0
]
/
1000
)
+
uplink_frequency_offset
[
cc_idP
][
0
];
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
ul_k0
[
i
]
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
ul_k0
[
i
]
=
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
}
else
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
0
;
...
...
@@ -185,7 +188,7 @@ void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
cfg
->
ssb_config
.
scs_common
=
get_softmodem_params
()
->
numerology
;
// SSB Table config
cfg
->
ssb_table
.
ssb_offset_point_a
=
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
offsetToPointA
;
cfg
->
ssb_table
.
ssb_offset_point_a
=
frequencyInfoDL
->
offsetToPointA
;
cfg
->
ssb_table
.
ssb_period
=
scc
->
ssb_PeriodicityServingCell
;
cfg
->
ssb_table
.
ssb_subcarrier_offset
=
mac
->
ssb_subcarrier_offset
;
...
...
@@ -203,26 +206,27 @@ void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
// TDD Table Configuration
if
(
cfg
->
cell_config
.
frame_duplex_type
==
TDD
){
set_tdd_config_nr_ue
(
cfg
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
tdd_UL_DL_ConfigurationCommon
);
}
// PRACH configuration
uint8_t
nb_preambles
=
64
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
!=
NULL
)
nb_preambles
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
;
NR_RACH_ConfigCommon_t
*
rach_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
;
if
(
rach_ConfigCommon
->
totalNumberOfRA_Preambles
!=
NULL
)
nb_preambles
=
*
rach_ConfigCommon
->
totalNumberOfRA_Preambles
;
cfg
->
prach_config
.
prach_sequence_length
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
-
1
;
cfg
->
prach_config
.
prach_sequence_length
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
present
-
1
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
)
cfg
->
prach_config
.
prach_sub_c_spacing
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
;
if
(
rach_ConfigCommon
->
msg1_SubcarrierSpacing
)
cfg
->
prach_config
.
prach_sub_c_spacing
=
*
rach_ConfigCommon
->
msg1_SubcarrierSpacing
;
else
cfg
->
prach_config
.
prach_sub_c_spacing
=
scc
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
cfg
->
prach_config
.
prach_sub_c_spacing
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
cfg
->
prach_config
.
restricted_set_config
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
restrictedSetConfig
;
cfg
->
prach_config
.
restricted_set_config
=
rach_ConfigCommon
->
restrictedSetConfig
;
switch
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
)
{
switch
(
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FDM
)
{
case
0
:
cfg
->
prach_config
.
num_prach_fd_occasions
=
1
;
break
;
...
...
@@ -236,25 +240,26 @@ void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
cfg
->
prach_config
.
num_prach_fd_occasions
=
8
;
break
;
default:
AssertFatal
(
1
==
0
,
"msg1 FDM identifier %ld undefined (0,1,2,3)
\n
"
,
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
);
AssertFatal
(
1
==
0
,
"msg1 FDM identifier %ld undefined (0,1,2,3)
\n
"
,
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FDM
);
}
cfg
->
prach_config
.
num_prach_fd_occasions_list
=
(
fapi_nr_num_prach_fd_occasions_t
*
)
malloc
(
cfg
->
prach_config
.
num_prach_fd_occasions
*
sizeof
(
fapi_nr_num_prach_fd_occasions_t
));
for
(
int
i
=
0
;
i
<
cfg
->
prach_config
.
num_prach_fd_occasions
;
i
++
)
{
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_prach_fd_occasions
=
i
;
fapi_nr_num_prach_fd_occasions_t
*
prach_fd_occasion
=
&
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
];
prach_fd_occasion
->
num_prach_fd_occasions
=
i
;
if
(
cfg
->
prach_config
.
prach_sequence_length
)
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l139
;
prach_fd_occasion
->
prach_root_sequence_index
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
choice
.
l139
;
else
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l839
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
k1
=
NRRIV2PRBOFFSET
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
)
+
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
.
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_zero_corr_conf
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_root_sequences
=
compute_nr_root_seq
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
,
nb_preambles
,
mac
->
frame_type
,
mac
->
frequency_range
);
//
cfg->prach_config.num_prach_fd_occasions_list[i].
num_unused_root_sequences = ???
prach_fd_occasion
->
prach_root_sequence_index
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
choice
.
l839
;
prach_fd_occasion
->
k1
=
NRRIV2PRBOFFSET
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
)
+
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
prach_fd_occasion
->
prach_zero_corr_conf
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
;
prach_fd_occasion
->
num_root_sequences
=
compute_nr_root_seq
(
rach_ConfigCommon
,
nb_preambles
,
mac
->
frame_type
,
mac
->
frequency_range
);
//
prach_fd_occasion->
num_unused_root_sequences = ???
}
cfg
->
prach_config
.
ssb_per_rach
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
.
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
-
1
;
cfg
->
prach_config
.
ssb_per_rach
=
rach_ConfigCommon
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
-
1
;
}
...
...
@@ -264,7 +269,6 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
{
fapi_nr_config_request_t
*
cfg
=
&
mac
->
phy_config
.
config_req
;
NR_ServingCellConfigCommon_t
*
scc
=
mac
->
scc
;
int
i
;
mac
->
phy_config
.
Mod_id
=
module_id
;
mac
->
phy_config
.
CC_id
=
cc_idP
;
...
...
@@ -272,124 +276,127 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
// carrier config
LOG_D
(
MAC
,
"Entering UE Config Common
\n
"
);
AssertFatal
(
scc
!=
NULL
,
"scc cannot be null
\n
"
);
AssertFatal
(
scc
!=
NULL
,
"scc cannot be null
\n
"
);
if
(
scc
)
{
cfg
->
carrier_config
.
dl_bandwidth
=
config_bandwidth
(
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]);
struct
NR_FrequencyInfoDL
*
frequencyInfoDL
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
;
int
bw_index
=
get_supported_band_index
(
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
);
cfg
->
carrier_config
.
dl_bandwidth
=
get_supported_bw_mhz
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
>
256
?
FR2
:
FR1
,
bw_index
);
cfg
->
carrier_config
.
dl_frequency
=
from_nrarfcn
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
)
/
1000
;
// freq in kHz
cfg
->
carrier_config
.
dl_frequency
=
from_nrarfcn
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
,
frequencyInfoDL
->
absoluteFrequencyPointA
)
/
1000
;
// freq in kHz
for
(
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
dl_k0
[
i
]
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
}
else
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
0
;
cfg
->
carrier_config
.
dl_k0
[
i
]
=
0
;
}
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
dl_k0
[
i
]
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
}
cfg
->
carrier_config
.
uplink_bandwidth
=
config_bandwidth
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
]);
int
UL_pointA
;
if
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
==
NULL
)
UL_pointA
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
;
else
UL_pointA
=
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
;
cfg
->
carrier_config
.
uplink_frequency
=
from_nrarfcn
(
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
,
UL_pointA
)
/
1000
;
// freq in kHz
for
(
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
ul_k0
[
i
]
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
}
else
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
0
;
cfg
->
carrier_config
.
ul_k0
[
i
]
=
0
;
}
else
{
cfg
->
carrier_config
.
dl_grid_size
[
i
]
=
0
;
cfg
->
carrier_config
.
dl_k0
[
i
]
=
0
;
}
uint32_t
band
=
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
];
mac
->
frequency_range
=
band
<
100
?
FR1
:
FR2
;
frame_type_t
frame_type
=
get_frame_type
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
);
// cell config
cfg
->
cell_config
.
phy_cell_id
=
*
scc
->
physCellId
;
cfg
->
cell_config
.
frame_duplex_type
=
frame_type
;
// SSB config
cfg
->
ssb_config
.
ss_pbch_power
=
scc
->
ss_PBCH_BlockPower
;
cfg
->
ssb_config
.
scs_common
=
*
scc
->
ssbSubcarrierSpacing
;
// SSB Table config
int
scs_scaling
=
1
<<
(
cfg
->
ssb_config
.
scs_common
);
if
(
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
<
600000
)
scs_scaling
=
scs_scaling
*
3
;
if
(
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
>
2016666
)
scs_scaling
=
scs_scaling
>>
2
;
uint32_t
absolute_diff
=
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
-
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
cfg
->
ssb_table
.
ssb_offset_point_a
=
absolute_diff
/
(
12
*
scs_scaling
)
-
10
;
cfg
->
ssb_table
.
ssb_period
=
*
scc
->
ssb_periodicityServingCell
;
// NSA -> take ssb offset from SCS
cfg
->
ssb_table
.
ssb_subcarrier_offset
=
absolute_diff
%
(
12
*
scs_scaling
);
switch
(
scc
->
ssb_PositionsInBurst
->
present
)
{
case
1
:
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
<<
24
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
break
;
case
2
:
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
((
uint32_t
)
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
[
0
])
<<
24
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
break
;
case
3
:
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
0
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
3
-
i
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
-
i
]
<<
i
*
8
);
}
break
;
default:
AssertFatal
(
1
==
0
,
"SSB bitmap size value %d undefined (allowed values 1,2,3)
\n
"
,
scc
->
ssb_PositionsInBurst
->
present
);
}
struct
NR_FrequencyInfoUL
*
frequencyInfoUL
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
;
bw_index
=
get_supported_band_index
(
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
],
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
);
cfg
->
carrier_config
.
uplink_bandwidth
=
get_supported_bw_mhz
(
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
]
>
256
?
FR2
:
FR1
,
bw_index
);
int
UL_pointA
;
if
(
frequencyInfoUL
->
absoluteFrequencyPointA
==
NULL
)
UL_pointA
=
frequencyInfoDL
->
absoluteFrequencyPointA
;
else
UL_pointA
=
*
frequencyInfoUL
->
absoluteFrequencyPointA
;
cfg
->
carrier_config
.
uplink_frequency
=
from_nrarfcn
(
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
,
UL_pointA
)
/
1000
;
// freq in kHz
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
ul_k0
[
i
]
=
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
}
// TDD Table Configuration
if
(
cfg
->
cell_config
.
frame_duplex_type
==
TDD
){
set_tdd_config_nr_ue
(
cfg
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
tdd_UL_DL_ConfigurationCommon
);
else
{
cfg
->
carrier_config
.
ul_grid_size
[
i
]
=
0
;
cfg
->
carrier_config
.
ul_k0
[
i
]
=
0
;
}
}
// PRACH configuration
uint8_t
nb_preambles
=
64
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
!=
NULL
)
nb_preambles
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
;
cfg
->
prach_config
.
prach_sequence_length
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
-
1
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
)
cfg
->
prach_config
.
prach_sub_c_spacing
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
;
else
cfg
->
prach_config
.
prach_sub_c_spacing
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
cfg
->
prach_config
.
restricted_set_config
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
restrictedSetConfig
;
uint32_t
band
=
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
];
mac
->
frequency_range
=
band
<
100
?
FR1
:
FR2
;
frame_type_t
frame_type
=
get_frame_type
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
);
// cell config
cfg
->
cell_config
.
phy_cell_id
=
*
scc
->
physCellId
;
cfg
->
cell_config
.
frame_duplex_type
=
frame_type
;
// SSB config
cfg
->
ssb_config
.
ss_pbch_power
=
scc
->
ss_PBCH_BlockPower
;
cfg
->
ssb_config
.
scs_common
=
*
scc
->
ssbSubcarrierSpacing
;
// SSB Table config
int
scs_scaling
=
1
<<
(
cfg
->
ssb_config
.
scs_common
);
if
(
frequencyInfoDL
->
absoluteFrequencyPointA
<
600000
)
scs_scaling
=
scs_scaling
*
3
;
if
(
frequencyInfoDL
->
absoluteFrequencyPointA
>
2016666
)
scs_scaling
=
scs_scaling
>>
2
;
uint32_t
absolute_diff
=
(
*
frequencyInfoDL
->
absoluteFrequencySSB
-
frequencyInfoDL
->
absoluteFrequencyPointA
);
cfg
->
ssb_table
.
ssb_offset_point_a
=
absolute_diff
/
(
12
*
scs_scaling
)
-
10
;
cfg
->
ssb_table
.
ssb_period
=
*
scc
->
ssb_periodicityServingCell
;
// NSA -> take ssb offset from SCS
cfg
->
ssb_table
.
ssb_subcarrier_offset
=
absolute_diff
%
(
12
*
scs_scaling
);
switch
(
scc
->
ssb_PositionsInBurst
->
present
)
{
case
1
:
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
scc
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
<<
24
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
break
;
case
2
:
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
((
uint32_t
)
scc
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
[
0
])
<<
24
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
break
;
case
3
:
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
0
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
{
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
3
-
i
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
-
i
]
<<
i
*
8
);
}
break
;
default:
AssertFatal
(
1
==
0
,
"SSB bitmap size value %d undefined (allowed values 1,2,3)
\n
"
,
scc
->
ssb_PositionsInBurst
->
present
);
}
// TDD Table Configuration
if
(
cfg
->
cell_config
.
frame_duplex_type
==
TDD
){
set_tdd_config_nr_ue
(
cfg
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
tdd_UL_DL_ConfigurationCommon
);
}
// PRACH configuration
uint8_t
nb_preambles
=
64
;
NR_RACH_ConfigCommon_t
*
rach_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
if
(
rach_ConfigCommon
->
totalNumberOfRA_Preambles
!=
NULL
)
nb_preambles
=
*
rach_ConfigCommon
->
totalNumberOfRA_Preambles
;
cfg
->
prach_config
.
prach_sequence_length
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
present
-
1
;
if
(
rach_ConfigCommon
->
msg1_SubcarrierSpacing
)
cfg
->
prach_config
.
prach_sub_c_spacing
=
*
rach_ConfigCommon
->
msg1_SubcarrierSpacing
;
else
cfg
->
prach_config
.
prach_sub_c_spacing
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
cfg
->
prach_config
.
restricted_set_config
=
rach_ConfigCommon
->
restrictedSetConfig
;
switch
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
)
{
switch
(
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FDM
)
{
case
0
:
cfg
->
prach_config
.
num_prach_fd_occasions
=
1
;
break
;
...
...
@@ -403,28 +410,28 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
cfg
->
prach_config
.
num_prach_fd_occasions
=
8
;
break
;
default:
AssertFatal
(
1
==
0
,
"msg1 FDM identifier %ld undefined (0,1,2,3)
\n
"
,
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
);
}
cfg
->
prach_config
.
num_prach_fd_occasions_list
=
(
fapi_nr_num_prach_fd_occasions_t
*
)
malloc
(
cfg
->
prach_config
.
num_prach_fd_occasions
*
sizeof
(
fapi_nr_num_prach_fd_occasions_t
));
for
(
i
=
0
;
i
<
cfg
->
prach_config
.
num_prach_fd_occasions
;
i
++
)
{
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_prach_fd_occasions
=
i
;
if
(
cfg
->
prach_config
.
prach_sequence_length
)
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l139
;
else
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l839
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
k1
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FrequencyStart
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_zero_corr_conf
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_root_sequences
=
compute_nr_root_seq
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
,
nb_preambles
,
frame_type
,
mac
->
frequency_range
);
//cfg->prach_config.num_prach_fd_occasions_list[i].num_unused_root_sequences = ???
}
AssertFatal
(
1
==
0
,
"msg1 FDM identifier %ld undefined (0,1,2,3)
\n
"
,
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FDM
);
}
cfg
->
prach_config
.
ssb_per_rach
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
-
1
;
}
// scc
cfg
->
prach_config
.
num_prach_fd_occasions_list
=
(
fapi_nr_num_prach_fd_occasions_t
*
)
malloc
(
cfg
->
prach_config
.
num_prach_fd_occasions
*
sizeof
(
fapi_nr_num_prach_fd_occasions_t
));
for
(
int
i
=
0
;
i
<
cfg
->
prach_config
.
num_prach_fd_occasions
;
i
++
)
{
fapi_nr_num_prach_fd_occasions_t
*
prach_fd_occasion
=
&
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
];
prach_fd_occasion
->
num_prach_fd_occasions
=
i
;
if
(
cfg
->
prach_config
.
prach_sequence_length
)
prach_fd_occasion
->
prach_root_sequence_index
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
choice
.
l139
;
else
prach_fd_occasion
->
prach_root_sequence_index
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
choice
.
l839
;
prach_fd_occasion
->
k1
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FrequencyStart
;
prach_fd_occasion
->
prach_zero_corr_conf
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
;
prach_fd_occasion
->
num_root_sequences
=
compute_nr_root_seq
(
rach_ConfigCommon
,
nb_preambles
,
frame_type
,
mac
->
frequency_range
);
//prach_fd_occasion->num_unused_root_sequences = ???
}
cfg
->
prach_config
.
ssb_per_rach
=
rach_ConfigCommon
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
-
1
;
}
/** \brief This function is relavant for the UE procedures for control. It loads the search spaces, the BWPs and the CORESETs into the MAC instance and
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
87d95177
...
...
@@ -170,24 +170,25 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
nrmac
->
common_channels
[
0
].
ServingCellConfigCommon
=
scc
;
// Carrier configuration
cfg
->
carrier_config
.
dl_bandwidth
.
value
=
config_bandwidth
(
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]);
struct
NR_FrequencyInfoDL
*
frequencyInfoDL
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
;
int
bw_index
=
get_supported_band_index
(
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
);
cfg
->
carrier_config
.
dl_bandwidth
.
value
=
get_supported_bw_mhz
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
]
>
256
?
FR2
:
FR1
,
bw_index
);
cfg
->
carrier_config
.
dl_bandwidth
.
tl
.
tag
=
NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG
;
//temporary
cfg
->
num_tlv
++
;
LOG_I
(
NR_MAC
,
"%s() dl_BandwidthP:%d
\n
"
,
__FUNCTION__
,
cfg
->
carrier_config
.
dl_bandwidth
.
value
);
cfg
->
carrier_config
.
dl_frequency
.
value
=
from_nrarfcn
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
cfg
->
carrier_config
.
dl_frequency
.
value
=
from_nrarfcn
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
)
/
1000
;
// freq in kHz
frequencyInfoDL
->
absoluteFrequencyPointA
)
/
1000
;
// freq in kHz
cfg
->
carrier_config
.
dl_frequency
.
tl
.
tag
=
NFAPI_NR_CONFIG_DL_FREQUENCY_TAG
;
cfg
->
num_tlv
++
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
dl_grid_size
[
i
].
value
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
dl_k0
[
i
].
value
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
dl_grid_size
[
i
].
value
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
dl_k0
[
i
].
value
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
cfg
->
carrier_config
.
dl_grid_size
[
i
].
tl
.
tag
=
NFAPI_NR_CONFIG_DL_GRID_SIZE_TAG
;
cfg
->
carrier_config
.
dl_k0
[
i
].
tl
.
tag
=
NFAPI_NR_CONFIG_DL_K0_TAG
;
cfg
->
num_tlv
++
;
...
...
@@ -198,30 +199,31 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
cfg
->
carrier_config
.
dl_k0
[
i
].
value
=
0
;
}
}
cfg
->
carrier_config
.
uplink_bandwidth
.
value
=
config_bandwidth
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
]);
struct
NR_FrequencyInfoUL
*
frequencyInfoUL
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
;
bw_index
=
get_supported_band_index
(
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
],
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
);
cfg
->
carrier_config
.
uplink_bandwidth
.
value
=
get_supported_bw_mhz
(
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
]
>
256
?
FR2
:
FR1
,
bw_index
);
cfg
->
carrier_config
.
uplink_bandwidth
.
tl
.
tag
=
NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG
;
//temporary
cfg
->
num_tlv
++
;
LOG_I
(
NR_MAC
,
"%s() dl_BandwidthP:%d
\n
"
,
__FUNCTION__
,
cfg
->
carrier_config
.
uplink_bandwidth
.
value
);
int
UL_pointA
;
if
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
==
NULL
)
UL_pointA
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
;
if
(
frequencyInfoUL
->
absoluteFrequencyPointA
==
NULL
)
UL_pointA
=
frequencyInfoDL
->
absoluteFrequencyPointA
;
else
UL_pointA
=
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
;
UL_pointA
=
*
frequencyInfoUL
->
absoluteFrequencyPointA
;
cfg
->
carrier_config
.
uplink_frequency
.
value
=
from_nrarfcn
(
*
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
],
cfg
->
carrier_config
.
uplink_frequency
.
value
=
from_nrarfcn
(
*
frequencyInfoUL
->
frequencyBandList
->
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
,
UL_pointA
)
/
1000
;
// freq in kHz
cfg
->
carrier_config
.
uplink_frequency
.
tl
.
tag
=
NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG
;
cfg
->
num_tlv
++
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
ul_grid_size
[
i
].
value
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
ul_k0
[
i
].
value
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
if
(
i
==
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
{
cfg
->
carrier_config
.
ul_grid_size
[
i
].
value
=
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
;
cfg
->
carrier_config
.
ul_k0
[
i
].
value
=
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
offsetToCarrier
;
cfg
->
carrier_config
.
ul_grid_size
[
i
].
tl
.
tag
=
NFAPI_NR_CONFIG_UL_GRID_SIZE_TAG
;
cfg
->
carrier_config
.
ul_k0
[
i
].
tl
.
tag
=
NFAPI_NR_CONFIG_UL_K0_TAG
;
cfg
->
num_tlv
++
;
...
...
@@ -233,10 +235,10 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
}
}
uint32_t
band
=
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
];
uint32_t
band
=
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
];
frequency_range_t
frequency_range
=
band
<
100
?
FR1
:
FR2
;
frame_type_t
frame_type
=
get_frame_type
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
);
frame_type_t
frame_type
=
get_frame_type
(
*
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
0
],
*
scc
->
ssbSubcarrierSpacing
);
nrmac
->
common_channels
[
0
].
frame_type
=
frame_type
;
// Cell configuration
...
...
@@ -265,27 +267,28 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
// PRACH configuration
uint8_t
nb_preambles
=
64
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
!=
NULL
)
nb_preambles
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
;
NR_RACH_ConfigCommon_t
*
rach_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
if
(
rach_ConfigCommon
->
totalNumberOfRA_Preambles
!=
NULL
)
nb_preambles
=
*
rach_ConfigCommon
->
totalNumberOfRA_Preambles
;
cfg
->
prach_config
.
prach_sequence_length
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
-
1
;
cfg
->
prach_config
.
prach_sequence_length
.
value
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
present
-
1
;
cfg
->
prach_config
.
prach_sequence_length
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG
;
cfg
->
num_tlv
++
;
cfg
->
num_tlv
++
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
)
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
=
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
;
else
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
if
(
rach_ConfigCommon
->
msg1_SubcarrierSpacing
)
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
=
*
rach_ConfigCommon
->
msg1_SubcarrierSpacing
;
else
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
=
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
cfg
->
prach_config
.
prach_sub_c_spacing
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
restricted_set_config
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
restrictedSetConfig
;
cfg
->
prach_config
.
restricted_set_config
.
value
=
rach_ConfigCommon
->
restrictedSetConfig
;
cfg
->
prach_config
.
restricted_set_config
.
tl
.
tag
=
NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
prach_ConfigurationIndex
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
cfg
->
prach_config
.
prach_ConfigurationIndex
.
value
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
cfg
->
prach_config
.
prach_ConfigurationIndex
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG
;
cfg
->
num_tlv
++
;
switch
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
)
{
switch
(
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FDM
)
{
case
0
:
cfg
->
prach_config
.
num_prach_fd_occasions
.
value
=
1
;
break
;
...
...
@@ -299,48 +302,57 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
cfg
->
prach_config
.
num_prach_fd_occasions
.
value
=
8
;
break
;
default:
AssertFatal
(
1
==
0
,
"msg1 FDM identifier %ld undefined (0,1,2,3)
\n
"
,
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
);
AssertFatal
(
1
==
0
,
"msg1 FDM identifier %ld undefined (0,1,2,3)
\n
"
,
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FDM
);
}
cfg
->
prach_config
.
num_prach_fd_occasions
.
tl
.
tag
=
NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
prach_ConfigurationIndex
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
cfg
->
prach_config
.
prach_ConfigurationIndex
.
value
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
cfg
->
prach_config
.
prach_ConfigurationIndex
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
=
(
nfapi_nr_num_prach_fd_occasions_t
*
)
malloc
(
cfg
->
prach_config
.
num_prach_fd_occasions
.
value
*
sizeof
(
nfapi_nr_num_prach_fd_occasions_t
));
for
(
int
i
=
0
;
i
<
cfg
->
prach_config
.
num_prach_fd_occasions
.
value
;
i
++
)
{
// cfg->prach_config.num_prach_fd_occasions_list[i].num_prach_fd_occasions = i;
nfapi_nr_num_prach_fd_occasions_t
*
prach_fd_occasion
=
&
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
];
// prach_fd_occasion->num_prach_fd_occasions = i;
if
(
cfg
->
prach_config
.
prach_sequence_length
.
value
)
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l139
;
prach_fd_occasion
->
prach_root_sequence_index
.
value
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
choice
.
l139
;
else
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l839
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_root_sequence_index
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG
;
prach_fd_occasion
->
prach_root_sequence_index
.
value
=
rach_ConfigCommon
->
prach_RootSequenceIndex
.
choice
.
l839
;
prach_fd_occasion
->
prach_root_sequence_index
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
k1
.
value
=
NRRIV2PRBOFFSET
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
)
+
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
prach_fd_occasion
->
k1
.
value
=
NRRIV2PRBOFFSET
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
)
+
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
if
(
get_softmodem_params
()
->
sa
)
{
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
k1
.
value
=
NRRIV2PRBOFFSET
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
)
+
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
prach_fd_occasion
->
k1
.
value
=
NRRIV2PRBOFFSET
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
)
+
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
}
else
{
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
k1
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
prach_fd_occasion
->
k1
.
value
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
msg1_FrequencyStart
+
(
get_N_RA_RB
(
cfg
->
prach_config
.
prach_sub_c_spacing
.
value
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
)
*
i
);
}
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
k1
.
tl
.
tag
=
NFAPI_NR_CONFIG_K1_TAG
;
prach_fd_occasion
->
k1
.
tl
.
tag
=
NFAPI_NR_CONFIG_K1_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_zero_corr_conf
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
prach_zero_corr_conf
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG
;
prach_fd_occasion
->
prach_zero_corr_conf
.
value
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
;
prach_fd_occasion
->
prach_zero_corr_conf
.
tl
.
tag
=
NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_root_sequences
.
value
=
compute_nr_root_seq
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
,
nb_preambles
,
frame_type
,
frequency_range
);
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_root_sequences
.
tl
.
tag
=
NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG
;
prach_fd_occasion
->
num_root_sequences
.
value
=
compute_nr_root_seq
(
rach_ConfigCommon
,
nb_preambles
,
frame_type
,
frequency_range
);
prach_fd_occasion
->
num_root_sequences
.
tl
.
tag
=
NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG
;
cfg
->
num_tlv
++
;
cfg
->
prach_config
.
num_prach_fd_occasions_list
[
i
].
num_unused_root_sequences
.
value
=
1
;
prach_fd_occasion
->
num_unused_root_sequences
.
value
=
1
;
}
cfg
->
prach_config
.
ssb_per_rach
.
value
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
-
1
;
cfg
->
prach_config
.
ssb_per_rach
.
value
=
rach_ConfigCommon
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
-
1
;
cfg
->
prach_config
.
ssb_per_rach
.
tl
.
tag
=
NFAPI_NR_CONFIG_SSB_PER_RACH_TAG
;
cfg
->
num_tlv
++
;
// SSB Table Configuration
uint32_t
absolute_diff
=
(
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
-
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
const
int
scaling_5khz
=
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
<
600000
?
3
:
1
;
uint32_t
absolute_diff
=
(
*
frequencyInfoDL
->
absoluteFrequencySSB
-
frequencyInfoDL
->
absoluteFrequencyPointA
);
const
int
scaling_5khz
=
frequencyInfoDL
->
absoluteFrequencyPointA
<
600000
?
3
:
1
;
int
sco
=
(
absolute_diff
/
scaling_5khz
)
%
24
;
if
(
frequency_range
==
FR2
)
sco
>>=
1
;
// this assumes 120kHz SCS for SSB and subCarrierSpacingCommon (only option supported by OAI for
...
...
@@ -428,7 +440,7 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
}
LOG_I
(
NR_MAC
,
"Setting TDD configuration period to %d
\n
"
,
cfg
->
tdd_table
.
tdd_period
.
value
);
int
periods_per_frame
=
set_tdd_config_nr
(
cfg
,
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
,
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofDownlinkSlots
,
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofDownlinkSymbols
,
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofUplinkSlots
,
...
...
@@ -441,7 +453,6 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
nrmac
->
tdd_beam_association
=
(
int16_t
*
)
malloc16
(
periods_per_frame
*
sizeof
(
int16_t
));
}
}
}
int
nr_mac_enable_ue_rrc_processing_timer
(
module_id_t
Mod_idP
,
rnti_t
rnti
,
NR_SubcarrierSpacing_t
subcarrierSpacing
,
uint32_t
rrc_reconfiguration_delay
)
{
...
...
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