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
lizhongxiao
OpenXG-RAN
Commits
c59c85df
Commit
c59c85df
authored
May 19, 2019
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modifications applied to lte-ru because of common interface changes with nr-ru
parent
07d6d0ab
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
56 additions
and
57 deletions
+56
-57
openair1/PHY/defs_RU.h
openair1/PHY/defs_RU.h
+1
-1
openair1/SCHED/ru_procedures.c
openair1/SCHED/ru_procedures.c
+22
-23
targets/RT/USER/eNB_usrp.gtkw
targets/RT/USER/eNB_usrp.gtkw
+11
-11
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+22
-22
No files found.
openair1/PHY/defs_RU.h
View file @
c59c85df
...
@@ -403,7 +403,7 @@ typedef struct RU_t_s{
...
@@ -403,7 +403,7 @@ typedef struct RU_t_s{
/// function pointer to initialization function for radio interface
/// function pointer to initialization function for radio interface
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
void
(
*
feprx
)(
struct
RU_t_s
*
ru
);
void
(
*
feprx
)(
struct
RU_t_s
*
ru
,
int
subframe
);
/// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
/// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
void
(
*
feptx_ofdm
)(
struct
RU_t_s
*
ru
,
int
frame_tx
,
int
tti_tx
);
void
(
*
feptx_ofdm
)(
struct
RU_t_s
*
ru
,
int
frame_tx
,
int
tti_tx
);
/// function pointer to TX front-end processing routine (PRECODING)
/// function pointer to TX front-end processing routine (PRECODING)
...
...
openair1/SCHED/ru_procedures.c
View file @
c59c85df
...
@@ -60,23 +60,23 @@ void feptx0(RU_t *ru,int slot) {
...
@@ -60,23 +60,23 @@ void feptx0(RU_t *ru,int slot) {
unsigned
int
aa
,
slot_offset
;
unsigned
int
aa
,
slot_offset
;
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
((
fp
->
Ncp
==
1
)
?
6
:
7
);
((
fp
->
Ncp
==
1
)
?
6
:
7
);
int
subframe
=
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
+
slot
,
1
);
slot_offset
=
s
ubframe
*
fp
->
samples_per_tti
+
(
slot
*
(
fp
->
samples_per_tti
>>
1
)
);
slot_offset
=
s
lot
*
(
fp
->
samples_per_tti
>>
1
);
//LOG_D(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot);
//LOG_D(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot);
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
if
(
fp
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot
*
slot_sizeF
],
if
(
fp
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
(
slot
&
1
)
*
slot_sizeF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
fp
->
ofdm_symbol_size
,
fp
->
ofdm_symbol_size
,
6
,
6
,
fp
->
nb_prefix_samples
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
else
normal_prefix_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot
*
slot_sizeF
],
else
normal_prefix_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
(
slot
&
1
)
*
slot_sizeF
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
7
,
7
,
fp
);
fp
);
...
@@ -123,7 +123,7 @@ void feptx0(RU_t *ru,int slot) {
...
@@ -123,7 +123,7 @@ void feptx0(RU_t *ru,int slot) {
}
}
}*/
}*/
}
}
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
+
(
slot
&
1
)
,
0
);
}
}
static
void
*
feptx_thread
(
void
*
param
)
{
static
void
*
feptx_thread
(
void
*
param
)
{
...
@@ -136,9 +136,13 @@ static void *feptx_thread(void *param) {
...
@@ -136,9 +136,13 @@ static void *feptx_thread(void *param) {
while
(
!
oai_exit
)
{
while
(
!
oai_exit
)
{
if
(
wait_on_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
)
<
0
)
break
;
if
(
wait_on_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
)
<
0
)
break
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
1
,
1
);
if
(
oai_exit
)
break
;
if
(
oai_exit
)
break
;
//stop_meas(&ru->ofdm_mod_wakeup_stats);
//stop_meas(&ru->ofdm_mod_wakeup_stats);
feptx0
(
ru
,
1
);
feptx0
(
ru
,
proc
->
slot_feptx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
+
1
,
0
);
if
(
release_thread
(
&
proc
->
mutex_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
)
<
0
)
break
;
if
(
release_thread
(
&
proc
->
mutex_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
)
<
0
)
break
;
if
(
pthread_cond_signal
(
&
proc
->
cond_feptx
)
!=
0
)
{
if
(
pthread_cond_signal
(
&
proc
->
cond_feptx
)
!=
0
)
{
...
@@ -155,16 +159,14 @@ static void *feptx_thread(void *param) {
...
@@ -155,16 +159,14 @@ static void *feptx_thread(void *param) {
return
(
NULL
);
return
(
NULL
);
}
}
void
feptx_ofdm_2thread
(
RU_t
*
ru
)
{
void
feptx_ofdm_2thread
(
RU_t
*
ru
,
int
frame
,
int
subframe
)
{
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
struct
timespec
wait
;
struct
timespec
wait
;
int
subframe
=
ru
->
proc
.
tti_tx
;
wait
.
tv_sec
=
0
;
wait
.
tv_sec
=
0
;
wait
.
tv_nsec
=
5000000L
;
wait
.
tv_nsec
=
5000000L
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
start_meas
(
&
ru
->
ofdm_mod_stats
);
start_meas
(
&
ru
->
ofdm_mod_stats
);
if
(
subframe_select
(
fp
,
subframe
)
==
SF_UL
)
return
;
if
(
subframe_select
(
fp
,
subframe
)
==
SF_UL
)
return
;
...
@@ -185,7 +187,8 @@ void feptx_ofdm_2thread(RU_t *ru) {
...
@@ -185,7 +187,8 @@ void feptx_ofdm_2thread(RU_t *ru) {
pthread_mutex_unlock
(
&
proc
->
mutex_feptx
);
pthread_mutex_unlock
(
&
proc
->
mutex_feptx
);
return
;
return
;
}
}
proc
->
slot_feptx
=
1
+
(
subframe
<<
1
);
++
proc
->
instance_cnt_feptx
;
++
proc
->
instance_cnt_feptx
;
...
@@ -200,7 +203,7 @@ void feptx_ofdm_2thread(RU_t *ru) {
...
@@ -200,7 +203,7 @@ void feptx_ofdm_2thread(RU_t *ru) {
}
}
// call first slot in this thread
// call first slot in this thread
feptx0
(
ru
,
0
);
feptx0
(
ru
,
(
subframe
<<
1
)
);
start_meas
(
&
ru
->
ofdm_mod_wait_stats
);
start_meas
(
&
ru
->
ofdm_mod_wait_stats
);
wait_on_busy_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
);
wait_on_busy_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
);
stop_meas
(
&
ru
->
ofdm_mod_wait_stats
);
stop_meas
(
&
ru
->
ofdm_mod_wait_stats
);
...
@@ -209,14 +212,13 @@ void feptx_ofdm_2thread(RU_t *ru) {
...
@@ -209,14 +212,13 @@ void feptx_ofdm_2thread(RU_t *ru) {
printf("delay in feptx wait on codition in frame_rx: %d subframe_rx: %d \n",proc->frame_tx,proc->subframe_tx);
printf("delay in feptx wait on codition in frame_rx: %d subframe_rx: %d \n",proc->frame_tx,proc->subframe_tx);
}*/
}*/
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
stop_meas
(
&
ru
->
ofdm_mod_stats
);
stop_meas
(
&
ru
->
ofdm_mod_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
}
}
void
feptx_ofdm
(
RU_t
*
ru
)
{
void
feptx_ofdm
(
RU_t
*
ru
,
int
frame
,
int
subframe
)
{
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
...
@@ -227,7 +229,6 @@ void feptx_ofdm(RU_t *ru) {
...
@@ -227,7 +229,6 @@ void feptx_ofdm(RU_t *ru) {
((
fp
->
Ncp
==
1
)
?
6
:
7
);
((
fp
->
Ncp
==
1
)
?
6
:
7
);
int
len
,
len2
;
int
len
,
len2
;
int16_t
*
txdata
;
int16_t
*
txdata
;
int
subframe
=
ru
->
proc
.
tti_tx
;
// int CC_id = ru->proc.CC_id;
// int CC_id = ru->proc.CC_id;
...
@@ -356,13 +357,12 @@ void feptx_ofdm(RU_t *ru) {
...
@@ -356,13 +357,12 @@ void feptx_ofdm(RU_t *ru) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
0
);
}
}
void
feptx_prec
(
RU_t
*
ru
)
{
void
feptx_prec
(
RU_t
*
ru
,
int
frame
,
int
subframe
)
{
int
l
,
i
,
aa
;
int
l
,
i
,
aa
;
PHY_VARS_eNB
**
eNB_list
=
ru
->
eNB_list
,
*
eNB
;
PHY_VARS_eNB
**
eNB_list
=
ru
->
eNB_list
,
*
eNB
;
LTE_DL_FRAME_PARMS
*
fp
;
LTE_DL_FRAME_PARMS
*
fp
;
int32_t
***
bw
;
int32_t
***
bw
;
int
subframe
=
ru
->
proc
.
tti_tx
;
if
(
ru
->
num_eNB
==
1
)
{
if
(
ru
->
num_eNB
==
1
)
{
eNB
=
eNB_list
[
0
];
eNB
=
eNB_list
[
0
];
...
@@ -506,7 +506,7 @@ extern void kill_feptx_thread(RU_t *ru)
...
@@ -506,7 +506,7 @@ extern void kill_feptx_thread(RU_t *ru)
pthread_cond_destroy
(
&
proc
->
cond_feptx
);
pthread_cond_destroy
(
&
proc
->
cond_feptx
);
}
}
void
ru_fep_full_2thread
(
RU_t
*
ru
)
{
void
ru_fep_full_2thread
(
RU_t
*
ru
,
int
subframe
)
{
RU_proc_t
*
proc
=
&
ru
->
proc
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
...
@@ -515,7 +515,7 @@ void ru_fep_full_2thread(RU_t *ru) {
...
@@ -515,7 +515,7 @@ void ru_fep_full_2thread(RU_t *ru) {
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
if
((
fp
->
frame_type
==
TDD
)
&&
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
proc
->
tti_rx
)
!=
SF_UL
))
return
;
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
if
(
ru
->
idx
==
0
)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX
,
1
);
if
(
ru
->
idx
==
0
)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX
,
1
);
...
@@ -567,20 +567,19 @@ void ru_fep_full_2thread(RU_t *ru) {
...
@@ -567,20 +567,19 @@ void ru_fep_full_2thread(RU_t *ru) {
void
fep_full
(
RU_t
*
ru
)
{
void
fep_full
(
RU_t
*
ru
,
int
subframe
)
{
RU_proc_t
*
proc
=
&
ru
->
proc
;
int
l
;
int
l
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
if
((
fp
->
frame_type
==
TDD
)
&&
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
proc
->
tti_rx
)
!=
SF_UL
))
return
;
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
start_meas
(
&
ru
->
ofdm_demod_stats
);
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
);
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
->
tti_rx
<<
1
);
remove_7_5_kHz
(
ru
,
subframe
<<
1
);
remove_7_5_kHz
(
ru
,
1
+
(
proc
->
tti_rx
<<
1
));
remove_7_5_kHz
(
ru
,
1
+
(
subframe
<<
1
));
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
slot_fep_ul
(
ru
,
slot_fep_ul
(
ru
,
...
...
targets/RT/USER/eNB_usrp.gtkw
View file @
c59c85df
[*]
[*]
[*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
[*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
[*]
Mon Oct 29 17:36:13 2018
[*]
Sun May 19 21:39:57 2019
[*]
[*]
[dumpfile] "/
mnt/hgfs/Documents/Devel
/openair_dump_eNB.vcd"
[dumpfile] "/
tmp
/openair_dump_eNB.vcd"
[dumpfile_mtime] "
Mon Oct 29 17:34:25 2018
"
[dumpfile_mtime] "
Sun May 19 21:30:25 2019
"
[dumpfile_size]
4559568
[dumpfile_size]
11590554
[savefile] "/home/
kaltenbe/Devel
/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[savefile] "/home/
sphex/raymond
/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart] 76
3520
0000
[timestart] 76
2991
0000
[size] 1
535 780
[size] 1
840 795
[pos] -1 -1
[pos] -1 -1
*-21.832302 7639830000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
*-21.832302 7639830000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width] 386
[sst_width] 386
...
@@ -24,9 +24,11 @@ variables.trx_tst[63:0]
...
@@ -24,9 +24,11 @@ variables.trx_tst[63:0]
functions.eNB_thread_rxtx0
functions.eNB_thread_rxtx0
@24
@24
variables.frame_number_RX0_RU[63:0]
variables.frame_number_RX0_RU[63:0]
variables.subframe_number_RX0_RU[63:0]
@25
variables.tti_number_RX0_RU[63:0]
@24
variables.frame_number_TX0_RU[63:0]
variables.frame_number_TX0_RU[63:0]
variables.
subframe
_number_TX0_RU[63:0]
variables.
tti
_number_TX0_RU[63:0]
@28
@28
functions.mac_schedule_dlsch
functions.mac_schedule_dlsch
functions.macxface_eNB_dlsch_ulsch_scheduler
functions.macxface_eNB_dlsch_ulsch_scheduler
...
@@ -54,9 +56,7 @@ functions.phy_procedures_eNb_rx_uespec1
...
@@ -54,9 +56,7 @@ functions.phy_procedures_eNb_rx_uespec1
functions.phy_enb_sfgen
functions.phy_enb_sfgen
functions.phy_procedures_eNb_tx0
functions.phy_procedures_eNb_tx0
functions.phy_procedures_eNb_tx1
functions.phy_procedures_eNb_tx1
@29
functions.phy_procedures_ru_feprx0
functions.phy_procedures_ru_feprx0
@28
functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1
functions.phy_procedures_ru_feptx_ofdm1
...
...
targets/RT/USER/lte-ru.c
View file @
c59c85df
...
@@ -309,23 +309,23 @@ int connect_rau(RU_t *ru) {
...
@@ -309,23 +309,23 @@ int connect_rau(RU_t *ru) {
/* Southbound Fronthaul functions, RCC/RAU */
/* Southbound Fronthaul functions, RCC/RAU */
// southbound IF5 fronthaul for 16-bit OAI format
// southbound IF5 fronthaul for 16-bit OAI format
static
inline
void
fh_if5_south_out
(
RU_t
*
ru
)
{
static
inline
void
fh_if5_south_out
(
RU_t
*
ru
,
int
frame
,
int
subframe
,
uint64_t
timestamp
)
{
if
(
ru
==
RC
.
ru
[
0
])
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
if
(
ru
==
RC
.
ru
[
0
])
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
send_IF5
(
ru
,
ru
->
proc
.
timestamp_tx
,
ru
->
proc
.
tti_tx
,
&
ru
->
seqno
,
IF5_RRH_GW_DL
);
send_IF5
(
ru
,
timestamp
,
subframe
,
&
ru
->
seqno
,
IF5_RRH_GW_DL
);
}
}
// southbound IF5 fronthaul for Mobipass packet format
// southbound IF5 fronthaul for Mobipass packet format
static
inline
void
fh_if5_mobipass_south_out
(
RU_t
*
ru
)
{
static
inline
void
fh_if5_mobipass_south_out
(
RU_t
*
ru
,
int
frame
,
int
subframe
,
uint64_t
timestamp
)
{
if
(
ru
==
RC
.
ru
[
0
])
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
if
(
ru
==
RC
.
ru
[
0
])
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
send_IF5
(
ru
,
ru
->
proc
.
timestamp_tx
,
ru
->
proc
.
tti_tx
,
&
ru
->
seqno
,
IF5_MOBIPASS
);
send_IF5
(
ru
,
timestamp
,
subframe
,
&
ru
->
seqno
,
IF5_MOBIPASS
);
}
}
// southbound IF4p5 fronthaul
// southbound IF4p5 fronthaul
static
inline
void
fh_if4p5_south_out
(
RU_t
*
ru
)
{
static
inline
void
fh_if4p5_south_out
(
RU_t
*
ru
,
int
frame
,
int
subframe
,
uint64_t
timestamp
)
{
if
(
ru
==
RC
.
ru
[
0
])
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
if
(
ru
==
RC
.
ru
[
0
])
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
LOG_D
(
PHY
,
"Sending IF4p5 for frame %d subframe %d
\n
"
,
ru
->
proc
.
frame_tx
,
ru
->
proc
.
tti_tx
);
LOG_D
(
PHY
,
"Sending IF4p5 for frame %d subframe %d
\n
"
,
ru
->
proc
.
frame_tx
,
ru
->
proc
.
tti_tx
);
if
(
subframe_select
(
ru
->
frame_parms
,
ru
->
proc
.
tti_tx
)
!=
SF_UL
)
if
(
subframe_select
(
ru
->
frame_parms
,
subframe
)
!=
SF_UL
)
send_IF4p5
(
ru
,
ru
->
proc
.
frame_tx
,
ru
->
proc
.
tti_tx
,
IF4p5_PDLFFT
);
send_IF4p5
(
ru
,
frame
,
subframe
,
IF4p5_PDLFFT
);
}
}
/*************************************************************/
/*************************************************************/
...
@@ -841,7 +841,7 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
...
@@ -841,7 +841,7 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
}
}
void
tx_rf
(
RU_t
*
ru
)
{
void
tx_rf
(
RU_t
*
ru
,
int
frame
,
int
subframe
,
uint64_t
timestamp
)
{
RU_proc_t
*
proc
=
&
ru
->
proc
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
ru
->
frame_parms
;
...
@@ -849,12 +849,12 @@ void tx_rf(RU_t *ru) {
...
@@ -849,12 +849,12 @@ void tx_rf(RU_t *ru) {
unsigned
int
txs
;
unsigned
int
txs
;
int
i
;
int
i
;
T
(
T_ENB_PHY_OUTPUT_SIGNAL
,
T_INT
(
0
),
T_INT
(
0
),
T_INT
(
proc
->
frame_tx
),
T_INT
(
proc
->
tti_tx
),
T
(
T_ENB_PHY_OUTPUT_SIGNAL
,
T_INT
(
0
),
T_INT
(
0
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
0
),
T_BUFFER
(
&
ru
->
common
.
txdata
[
0
][
proc
->
tti_tx
*
fp
->
samples_per_tti
],
fp
->
samples_per_tti
*
4
));
T_INT
(
0
),
T_BUFFER
(
&
ru
->
common
.
txdata
[
0
][
subframe
*
fp
->
samples_per_tti
],
fp
->
samples_per_tti
*
4
));
lte_subframe_t
SF_type
=
subframe_select
(
fp
,
proc
->
tti_tx
%
10
);
lte_subframe_t
SF_type
=
subframe_select
(
fp
,
subframe
%
10
);
lte_subframe_t
prevSF_type
=
subframe_select
(
fp
,(
proc
->
tti_tx
+
9
)
%
10
);
lte_subframe_t
prevSF_type
=
subframe_select
(
fp
,(
subframe
+
9
)
%
10
);
lte_subframe_t
nextSF_type
=
subframe_select
(
fp
,(
proc
->
tti_tx
+
1
)
%
10
);
lte_subframe_t
nextSF_type
=
subframe_select
(
fp
,(
subframe
+
1
)
%
10
);
int
sf_extension
=
0
;
int
sf_extension
=
0
;
if
((
SF_type
==
SF_DL
)
||
if
((
SF_type
==
SF_DL
)
||
...
@@ -892,7 +892,7 @@ void tx_rf(RU_t *ru) {
...
@@ -892,7 +892,7 @@ void tx_rf(RU_t *ru) {
#endif
#endif
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][(
proc
->
tti_tx
*
fp
->
samples_per_tti
)
-
sf_extension
];
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][(
subframe
*
fp
->
samples_per_tti
)
-
sf_extension
];
/* add fail safe for late command */
/* add fail safe for late command */
if
(
late_control
!=
STATE_BURST_NORMAL
){
//stop burst
if
(
late_control
!=
STATE_BURST_NORMAL
){
//stop burst
...
@@ -925,22 +925,22 @@ void tx_rf(RU_t *ru) {
...
@@ -925,22 +925,22 @@ void tx_rf(RU_t *ru) {
}
}
/* add fail safe for late command end */
/* add fail safe for late command end */
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU
,
proc
->
frame_tx
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU
,
frame
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU
,
proc
->
tti_tx
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU
,
subframe
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
proc
->
timestamp_tx
-
ru
->
openair0_cfg
.
tx_sample_advance
)
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
timestamp
-
ru
->
openair0_cfg
.
tx_sample_advance
)
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
// prepare tx buffer pointers
// prepare tx buffer pointers
txs
=
ru
->
rfdevice
.
trx_write_func
(
&
ru
->
rfdevice
,
txs
=
ru
->
rfdevice
.
trx_write_func
(
&
ru
->
rfdevice
,
proc
->
timestamp_tx
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
-
sf_extension
,
timestamp
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
-
sf_extension
,
txp
,
txp
,
siglen
+
sf_extension
,
siglen
+
sf_extension
,
ru
->
nb_tx
,
ru
->
nb_tx
,
flags
);
flags
);
LOG_D
(
PHY
,
"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d
\n
"
,
ru
->
idx
,
LOG_D
(
PHY
,
"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d
\n
"
,
ru
->
idx
,
(
long
long
unsigned
int
)
proc
->
timestamp_tx
,
proc
->
frame_tx
,
proc
->
frame_tx_unwrap
,
proc
->
tti_tx
);
(
long
long
unsigned
int
)
timestamp
,
frame
,
proc
->
frame_tx_unwrap
,
subframe
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
...
@@ -1764,7 +1764,7 @@ static void* ru_thread( void* param ) {
...
@@ -1764,7 +1764,7 @@ static void* ru_thread( void* param ) {
// do RX front-end processing (frequency-shift, dft) if needed
// do RX front-end processing (frequency-shift, dft) if needed
if
(
ru
->
feprx
)
ru
->
feprx
(
ru
);
if
(
ru
->
feprx
)
ru
->
feprx
(
ru
,
proc
->
tti_rx
);
// At this point, all information for subframe has been received on FH interface
// At this point, all information for subframe has been received on FH interface
// If this proc is to provide synchronization, do so
// If this proc is to provide synchronization, do so
...
@@ -2112,8 +2112,8 @@ int stop_rf(RU_t *ru)
...
@@ -2112,8 +2112,8 @@ int stop_rf(RU_t *ru)
return
0
;
return
0
;
}
}
extern
void
fep_full
(
RU_t
*
ru
);
extern
void
fep_full
(
RU_t
*
ru
,
int
subframe
);
extern
void
ru_fep_full_2thread
(
RU_t
*
ru
);
extern
void
ru_fep_full_2thread
(
RU_t
*
ru
,
int
subframe
);
extern
void
feptx_ofdm
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
feptx_ofdm
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
feptx_ofdm_2thread
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
feptx_ofdm_2thread
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
feptx_prec
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
feptx_prec
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
...
...
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