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
OpenXG
OpenXG UE
Commits
214b1e86
Commit
214b1e86
authored
Dec 20, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slot-based processing in nr-ru. All compilations and unitary simulators ok.
parent
c0c0267e
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
237 additions
and
202 deletions
+237
-202
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-1
openair1/PHY/defs_RU.h
openair1/PHY/defs_RU.h
+5
-5
openair1/SCHED/ru_procedures.c
openair1/SCHED/ru_procedures.c
+10
-10
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+54
-35
openair1/SCHED_NR/sched_nr.h
openair1/SCHED_NR/sched_nr.h
+1
-1
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+0
-1
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+17
-0
targets/RT/USER/nr-gnb.c
targets/RT/USER/nr-gnb.c
+34
-34
targets/RT/USER/nr-ru.c
targets/RT/USER/nr-ru.c
+115
-115
No files found.
cmake_targets/CMakeLists.txt
View file @
214b1e86
...
...
@@ -961,7 +961,7 @@ set(UTIL_SRC
${
OPENAIR_DIR
}
/common/utils/LOG/log.c
# ${OPENAIR2_DIR}/UTIL/LOG/vcd_signal_dumper.c
${
OPENAIR2_DIR
}
/UTIL/MATH/oml.c
${
OPENAIR2_DIR
}
/UTIL/MEM/mem_block.c
#
${OPENAIR2_DIR}/UTIL/MEM/mem_block.c
# ${OPENAIR2_DIR}/UTIL/OCG/OCG.c
# ${OPENAIR2_DIR}/UTIL/OCG/OCG_create_dir.c
# ${OPENAIR2_DIR}/UTIL/OCG/OCG_detect_file.c
...
...
openair1/PHY/defs_RU.h
View file @
214b1e86
...
...
@@ -120,10 +120,10 @@ typedef struct RU_proc_t_s {
openair0_timestamp
timestamp_rx
;
/// timestamp to send to "slave rru"
openair0_timestamp
timestamp_tx
;
/// subframe to act upon for reception
int
subframe
_rx
;
/// subframe to act upon for transmission
int
subframe
_tx
;
/// subframe
(LTE) / slot (NR)
to act upon for reception
int
tti
_rx
;
/// subframe
(LTE) / slot (NR)
to act upon for transmission
int
tti
_tx
;
/// subframe to act upon for reception of prach
int
subframe_prach
;
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
...
...
@@ -420,7 +420,7 @@ typedef struct RU_t_s{
/// function pointer to NB entry routine
void
(
*
eNB_top
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame_rx
,
int
subframe_rx
,
char
*
string
,
struct
RU_t_s
*
ru
);
void
(
*
gNB_top
)(
struct
PHY_VARS_gNB_s
*
gNB
,
int
frame_rx
,
int
s
ubframe
_rx
,
char
*
string
,
struct
RU_t_s
*
ru
);
void
(
*
gNB_top
)(
struct
PHY_VARS_gNB_s
*
gNB
,
int
frame_rx
,
int
s
lot
_rx
,
char
*
string
,
struct
RU_t_s
*
ru
);
/// Timing statistics
time_stats_t
ofdm_demod_stats
;
...
...
openair1/SCHED/ru_procedures.c
View file @
214b1e86
...
...
@@ -61,7 +61,7 @@ void feptx0(RU_t *ru,int slot) {
unsigned
int
aa
,
slot_offset
;
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
((
fp
->
Ncp
==
1
)
?
6
:
7
);
int
subframe
=
ru
->
proc
.
subframe
_tx
;
int
subframe
=
ru
->
proc
.
tti
_tx
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
slot
,
1
);
...
...
@@ -172,7 +172,7 @@ void feptx_ofdm_2thread(RU_t *ru) {
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
struct
timespec
wait
;
int
subframe
=
ru
->
proc
.
subframe
_tx
;
int
subframe
=
ru
->
proc
.
tti
_tx
;
wait
.
tv_sec
=
0
;
wait
.
tv_nsec
=
5000000L
;
...
...
@@ -239,7 +239,7 @@ void feptx_ofdm(RU_t *ru) {
((
fp
->
Ncp
==
1
)
?
6
:
7
);
int
len
,
len2
;
int16_t
*
txdata
;
int
subframe
=
ru
->
proc
.
subframe
_tx
;
int
subframe
=
ru
->
proc
.
tti
_tx
;
// int CC_id = ru->proc.CC_id;
...
...
@@ -374,7 +374,7 @@ void feptx_prec(RU_t *ru) {
PHY_VARS_eNB
**
eNB_list
=
ru
->
eNB_list
,
*
eNB
;
LTE_DL_FRAME_PARMS
*
fp
;
int32_t
***
bw
;
int
subframe
=
ru
->
proc
.
subframe
_tx
;
int
subframe
=
ru
->
proc
.
tti
_tx
;
if
(
ru
->
num_eNB
==
1
)
{
eNB
=
eNB_list
[
0
];
...
...
@@ -420,7 +420,7 @@ void fep0(RU_t *ru,int slot) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX
+
slot
,
1
);
remove_7_5_kHz
(
ru
,(
slot
&
1
)
+
(
proc
->
subframe
_rx
<<
1
));
remove_7_5_kHz
(
ru
,(
slot
&
1
)
+
(
proc
->
tti
_rx
<<
1
));
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
slot_fep_ul
(
ru
,
l
,
...
...
@@ -537,7 +537,7 @@ void ru_fep_full_2thread(RU_t *ru) {
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
proc
->
subframe
_rx
)
!=
SF_UL
))
return
;
(
subframe_select
(
fp
,
proc
->
tti
_rx
)
!=
SF_UL
))
return
;
if
(
ru
->
idx
==
0
)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX
,
1
);
...
...
@@ -580,7 +580,7 @@ void ru_fep_full_2thread(RU_t *ru) {
stop_meas
(
&
ru
->
ofdm_demod_wait_stats
);
if
(
opp_enabled
==
1
&&
ru
->
ofdm_demod_wakeup_stats
.
p_time
>
30
*
3000
){
print_meas_now
(
&
ru
->
ofdm_demod_wakeup_stats
,
"fep wakeup"
,
stderr
);
printf
(
"delay in fep wait on codition in frame_rx: %d subframe_rx: %d
\n
"
,
proc
->
frame_rx
,
proc
->
subframe
_rx
);
printf
(
"delay in fep wait on codition in frame_rx: %d subframe_rx: %d
\n
"
,
proc
->
frame_rx
,
proc
->
tti
_rx
);
}
stop_meas
(
&
ru
->
ofdm_demod_stats
);
...
...
@@ -596,13 +596,13 @@ void fep_full(RU_t *ru) {
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
proc
->
subframe
_rx
)
!=
SF_UL
))
return
;
(
subframe_select
(
fp
,
proc
->
tti
_rx
)
!=
SF_UL
))
return
;
start_meas
(
&
ru
->
ofdm_demod_stats
);
if
(
ru
->
idx
==
0
)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX
,
1
);
remove_7_5_kHz
(
ru
,
proc
->
subframe
_rx
<<
1
);
remove_7_5_kHz
(
ru
,
1
+
(
proc
->
subframe
_rx
<<
1
));
remove_7_5_kHz
(
ru
,
proc
->
tti
_rx
<<
1
);
remove_7_5_kHz
(
ru
,
1
+
(
proc
->
tti
_rx
<<
1
));
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
slot_fep_ul
(
ru
,
...
...
openair1/SCHED_NR/nr_ru_procedures.c
View file @
214b1e86
...
...
@@ -58,38 +58,58 @@ extern openair0_config_t openair0_cfg[MAX_CARDS];
extern
int
oai_exit
;
void
nr_feptx0
(
RU_t
*
ru
,
int
slot
)
{
void
nr_feptx0
(
RU_t
*
ru
,
int
first_symbol
,
int
num_symbols
)
{
NR_DL_FRAME_PARMS
*
fp
=
ru
->
nr_frame_parms
;
unsigned
int
aa
,
slot_offset
;
int
slot_sizeF
=
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_slot
;
int
subframe
=
ru
->
proc
.
subframe_tx
;
unsigned
int
aa
,
slot_offset
,
slot_offsetF
;
int
slot
=
ru
->
proc
.
tti_tx
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
slot
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
slot_offset
=
subframe
*
fp
->
samples_per_subframe
+
(
slot
*
(
fp
->
samples_per_subframe
/
fp
->
slots_per_subframe
));
slot_offset
=
slot
*
fp
->
samples_per_slot
;
slot_offsetF
=
first_symbol
*
fp
->
ofdm_symbol_size
;
LOG_D
(
PHY
,
"SFN/SF:RU:TX:%d/%d Generating slot %d
\n
"
,
ru
->
proc
.
frame_tx
,
ru
->
proc
.
subframe_tx
,
slot
);
if
(
first_symbol
>
0
)
slot_offset
+=
(
fp
->
ofdm_symbol_size
*
first_symbol
)
+
(
fp
->
nb_prefix_samples0
)
+
(
fp
->
nb_prefix_samples
*
(
first_symbol
-
1
));
LOG_D
(
PHY
,
"SFN/SF:RU:TX:%d/%d Generating slot %d (first_symbol %d num_symbols %d)
\n
"
,
ru
->
proc
.
frame_tx
,
ru
->
proc
.
tti_tx
,
slot
,
first_symbol
,
num_symbols
);
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
if
(
fp
->
Ncp
==
1
)
{
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot
*
slot_sizeF
],
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
ofdm_symbol_size
,
num_symbols
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
if
(
first_symbol
==
0
)
{
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
ofdm_symbol_size
,
12
,
1
,
fp
->
nb_prefix_samples0
,
CYCLIC_PREFIX
);
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
+
fp
->
ofdm_symbol_size
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
+
fp
->
nb_prefix_samples0
+
fp
->
ofdm_symbol_size
],
fp
->
ofdm_symbol_size
,
num_symbols
-
1
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
nr_normal_prefix_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot
*
slot_sizeF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
symbols_per_slot
,
fp
);
}
else
{
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot_offsetF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
ofdm_symbol_size
,
num_symbols
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
slot
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
}
void
nr_feptx_ofdm_2thread
(
RU_t
*
ru
)
{
...
...
@@ -98,24 +118,24 @@ void nr_feptx_ofdm_2thread(RU_t *ru) {
nfapi_nr_config_request_t
*
cfg
=
&
ru
->
gNB_list
[
0
]
->
gNB_config
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
struct
timespec
wait
;
int
s
ubframe
=
ru
->
proc
.
subframe
_tx
;
int
s
lot
=
ru
->
proc
.
tti
_tx
;
wait
.
tv_sec
=
0
;
wait
.
tv_nsec
=
5000000L
;
start_meas
(
&
ru
->
ofdm_mod_stats
);
if
(
nr_s
ubframe_select
(
cfg
,
subframe
)
==
SF_UL
)
return
;
if
(
nr_s
lot_select
(
cfg
,
slot
)
==
SF_UL
)
return
;
// this copy should be done in the precoding thread (currently inactive)
for
(
int
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
memcpy
((
void
*
)
ru
->
common
.
txdataF_BF
[
aa
],
(
void
*
)
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
aa
],
fp
->
samples_per_subframe
_wCP
*
sizeof
(
int32_t
));
memcpy
((
void
*
)
ru
->
common
.
txdataF_BF
[
aa
],
(
void
*
)
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
aa
],
fp
->
samples_per_slot
_wCP
*
sizeof
(
int32_t
));
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
if
(
nr_s
ubframe_select
(
cfg
,
subframe
)
==
SF_DL
)
{
// If this is not an S-
subframe
if
(
nr_s
lot_select
(
cfg
,
slot
)
==
SF_DL
)
{
// If this is not an S-
tti
if
(
pthread_mutex_timedlock
(
&
proc
->
mutex_feptx
,
&
wait
)
!=
0
)
{
printf
(
"[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)
\n
"
,
proc
->
instance_cnt_feptx
);
exit_fun
(
"error locking mutex_feptx"
);
...
...
@@ -141,8 +161,8 @@ void nr_feptx_ofdm_2thread(RU_t *ru) {
pthread_mutex_unlock
(
&
proc
->
mutex_feptx
);
}
// call first slot in this thread
nr_feptx0
(
ru
,
0
);
// call first
half-
slot in this thread
nr_feptx0
(
ru
,
0
,
fp
->
symbols_per_slot
>>
1
);
wait_on_busy_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"NR feptx thread"
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
...
...
@@ -163,7 +183,7 @@ static void *nr_feptx_thread(void *param) {
while
(
!
oai_exit
)
{
if
(
wait_on_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"NR feptx thread"
)
<
0
)
break
;
nr_feptx0
(
ru
,
1
);
nr_feptx0
(
ru
,
ru
->
nr_frame_parms
->
symbols_per_slot
>>
1
,
ru
->
nr_frame_parms
->
symbols_per_slot
>>
1
);
if
(
release_thread
(
&
proc
->
mutex_feptx
,
&
proc
->
instance_cnt_feptx
,
"NR feptx thread"
)
<
0
)
break
;
if
(
pthread_cond_signal
(
&
proc
->
cond_feptx
)
!=
0
)
{
...
...
@@ -196,11 +216,11 @@ void nr_feptx_ofdm(RU_t *ru) {
NR_DL_FRAME_PARMS
*
fp
=
ru
->
nr_frame_parms
;
nfapi_nr_config_request_t
*
cfg
=
&
ru
->
gNB_list
[
0
]
->
gNB_config
;
unsigned
int
aa
=
0
,
slot
=
0
;
unsigned
int
aa
=
0
;
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
((
cfg
->
subframe_config
.
dl_cyclic_prefix_type
.
value
==
1
)
?
12
:
14
);
int
s
ubframe
=
ru
->
proc
.
subframe
_tx
;
int
*
txdata
=
&
ru
->
common
.
txdata
[
aa
][
s
ubframe
*
fp
->
samples_per_subframe
];
int
s
lot
=
ru
->
proc
.
tti
_tx
;
int
*
txdata
=
&
ru
->
common
.
txdata
[
aa
][
s
lot
*
fp
->
samples_per_slot
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
start_meas
(
&
ru
->
ofdm_mod_stats
);
...
...
@@ -208,22 +228,21 @@ void nr_feptx_ofdm(RU_t *ru) {
// this copy should be done in the precoding thread (currently inactive)
for
(
int
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
memcpy
((
void
*
)
ru
->
common
.
txdataF_BF
[
aa
],
(
void
*
)
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
aa
],
fp
->
samples_per_s
ubframe
_wCP
*
sizeof
(
int32_t
));
(
void
*
)
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
aa
],
fp
->
samples_per_s
lot
_wCP
*
sizeof
(
int32_t
));
if
((
nr_s
ubframe_select
(
cfg
,
subframe
)
==
SF_DL
)
||
((
nr_s
ubframe_select
(
cfg
,
subframe
)
==
SF_S
)))
{
if
((
nr_s
lot_select
(
cfg
,
slot
)
==
SF_DL
)
||
((
nr_s
lot_select
(
cfg
,
slot
)
==
SF_S
)))
{
// LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
for
(
slot
=
0
;
slot
<
fp
->
slots_per_subframe
;
slot
++
)
nr_feptx0
(
ru
,
slot
);
nr_feptx0
(
ru
,
0
,
fp
->
symbols_per_slot
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
stop_meas
(
&
ru
->
ofdm_mod_stats
);
LOG_D
(
PHY
,
"feptx_ofdm (TXPATH): frame %d, s
ubframe
%d: txp (time %p) %d dB, txp (freq) %d dB
\n
"
,
ru
->
proc
.
frame_tx
,
s
ubframe
,
txdata
,
dB_fixed
(
signal_energy
((
int32_t
*
)
txdata
,
fp
->
samples_per_subframe
)),
LOG_D
(
PHY
,
"feptx_ofdm (TXPATH): frame %d, s
lot
%d: txp (time %p) %d dB, txp (freq) %d dB
\n
"
,
ru
->
proc
.
frame_tx
,
s
lot
,
txdata
,
dB_fixed
(
signal_energy
((
int32_t
*
)
txdata
,
fp
->
samples_per_slot
)),
dB_fixed
(
signal_energy_nodc
(
ru
->
common
.
txdataF_BF
[
aa
],
2
*
slot_sizeF
)));
}
openair1/SCHED_NR/sched_nr.h
View file @
214b1e86
...
...
@@ -41,7 +41,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot);
void
nr_init_feptx_thread
(
RU_t
*
ru
,
pthread_attr_t
*
attr_feptx
);
void
nr_feptx_ofdm
(
RU_t
*
ru
);
void
nr_feptx_ofdm_2thread
(
RU_t
*
ru
);
void
nr_feptx0
(
RU_t
*
ru
,
int
slot
);
void
nr_feptx0
(
RU_t
*
ru
,
int
first_symbol
,
int
num_symbols
);
void
nr_configure_css_dci_initial
(
nfapi_nr_dl_config_pdcch_parameters_rel15_t
*
pdcch_params
,
nr_scs_e
scs_common
,
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
214b1e86
...
...
@@ -72,7 +72,6 @@ int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req) { return(0
int
oai_nfapi_nr_dl_config_req
(
nfapi_nr_dl_config_request_t
*
dl_config_req
)
{
return
(
0
);}
uint32_t
from_nrarfcn
(
int
nr_bandP
,
uint32_t
dl_nrarfcn
)
{
return
(
0
);}
int32_t
get_uldl_offset
(
int
nr_bandP
)
{
return
(
0
);}
NR_IF_Module_t
*
NR_IF_Module_init
(
int
Mod_id
){
return
(
NULL
);}
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
214b1e86
...
...
@@ -136,6 +136,23 @@ uint32_t to_nrarfcn(int nr_bandP, uint64_t dl_CarrierFreq, uint32_t bw)
}
uint64_t
from_nrarfcn
(
int
nr_bandP
,
uint32_t
dl_nrarfcn
)
{
int
i
;
int
deltaFglobal
;
if
(
nr_bandP
<
77
||
nr_bandP
>
79
)
deltaFglobal
=
5
;
else
deltaFglobal
=
15
;
AssertFatal
(
nr_bandP
<
87
,
"nr_band %d > 86
\n
"
,
nr_bandP
);
for
(
i
=
0
;
i
<
31
&&
nr_bandtable
[
i
].
band
!=
nr_bandP
;
i
++
);
AssertFatal
(
dl_nrarfcn
>=
nr_bandtable
[
i
].
N_OFFs_DL
,
"dl_nrarfcn %d < N_OFFs_DL %d
\n
"
,
dl_nrarfcn
,
nr_bandtable
[
i
].
N_OFFs_DL
);
return
1000
*
(
nr_bandtable
[
i
].
dl_min
+
(
dl_nrarfcn
-
nr_bandtable
[
i
].
N_OFFs_DL
)
*
deltaFglobal
);
}
void
config_nr_mib
(
int
Mod_idP
,
int
CC_idP
,
int
p_gNBP
,
...
...
targets/RT/USER/nr-gnb.c
View file @
214b1e86
This diff is collapsed.
Click to expand it.
targets/RT/USER/nr-ru.c
View file @
214b1e86
This diff is collapsed.
Click to expand it.
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