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
25952d44
Commit
25952d44
authored
Jul 06, 2016
by
Sandeep Kumar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added node fn RRU_IF5, split points and vcd logging
parent
b5fbdbe2
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
67 additions
and
52 deletions
+67
-52
openair1/PHY/defs.h
openair1/PHY/defs.h
+4
-3
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+15
-3
openair2/UTIL/LOG/vcd_signal_dumper.c
openair2/UTIL/LOG/vcd_signal_dumper.c
+4
-2
openair2/UTIL/LOG/vcd_signal_dumper.h
openair2/UTIL/LOG/vcd_signal_dumper.h
+4
-2
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+26
-9
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+14
-33
No files found.
openair1/PHY/defs.h
View file @
25952d44
...
...
@@ -160,6 +160,7 @@ enum transmission_access_mode {
typedef
enum
{
eNodeB_3GPP
=
0
,
// classical eNodeB function
eNodeB_3GPP_BBU
,
// eNodeB with NGFI IF5
NGFI_RRU_IF5
,
// NGFI_RRU with IF5
NGFI_RRU_IF4
,
// NGFI_RRU (NGFI remote radio-unit, currently split at common - ue_specific interface, IF4)
NGFI_RCC_IF4
// NGFI_RCC (NGFI radio cloud center, currently split at common - ue_specific interface, IF4)
}
eNB_func_t
;
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
25952d44
...
...
@@ -2547,6 +2547,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
if
(
abstraction_flag
==
0
)
{
// grab signal in chunks of 500 us (1 slot)
if
((
eNB
->
node_function
==
NGFI_RRU_IF4
)
||
(
eNB
->
node_function
==
NGFI_RRU_IF5
)
||
(
eNB
->
node_function
==
eNodeB_3GPP
))
{
// acquisition from RF
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
...
...
@@ -2586,7 +2587,11 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
}
else
if
(
eNB
->
node_function
==
eNodeB_3GPP_BBU
)
{
// acquisition from IF
/// **** trx_read_func from IF device **** ///
/// **** recv_IF5 of rxdata from RRH **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5
,
0
);
nanosleep
(
&
time_req
,
&
time_rem
);
proc
->
timestamp_rx
+=
fp
->
samples_per_tti
;
...
...
@@ -2599,6 +2604,13 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX_ENB
,
proc
->
subframe_rx
);
}
if
(
eNB
->
node_function
==
NGFI_RRU_IF5
)
{
/// **** send_IF5 of rxdata to BBU **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5
,
1
);
//send_IF5(eNB, proc, );
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5
,
0
);
}
if
((
eNB
->
node_function
==
NGFI_RRU_IF4
)
||
(
eNB
->
node_function
==
eNodeB_3GPP
)
||
...
...
openair2/UTIL/LOG/vcd_signal_dumper.c
View file @
25952d44
...
...
@@ -331,9 +331,11 @@ const char* eurecomFunctionsNames[] = {
"itti_relay_thread"
,
"test"
,
/* IF4 signals */
/* IF4
/IF5
signals */
"send_if4"
,
"recv_if4"
"recv_if4"
,
"send_if5"
,
"recv_if5"
};
struct
vcd_module_s
vcd_modules
[
VCD_SIGNAL_DUMPER_MODULE_END
]
=
{
...
...
openair2/UTIL/LOG/vcd_signal_dumper.h
View file @
25952d44
...
...
@@ -308,9 +308,11 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_RELAY_THREAD
,
VCD_SIGNAL_DUMPER_FUNCTIONS_TEST
,
/* IF4 signals */
/* IF4
/IF5
signals */
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4
,
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4
,
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5
,
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5
,
VCD_SIGNAL_DUMPER_FUNCTIONS_LAST
,
VCD_SIGNAL_DUMPER_FUNCTIONS_END
=
VCD_SIGNAL_DUMPER_FUNCTIONS_LAST
,
...
...
targets/RT/USER/lte-enb.c
View file @
25952d44
...
...
@@ -436,7 +436,9 @@ static void* eNB_thread_rxtx( void* param ) {
if
(
oai_exit
)
break
;
// UE-specific RX processing for subframe n
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
!=
NGFI_RRU_IF4
)
{
if
((
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP_BBU
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RCC_IF4
))
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC
,
1
);
// this is the ue-specific processing for the subframe and can be multi-threaded later
phy_procedures_eNB_uespec_RX
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
],
proc
,
0
,
no_relay
);
...
...
@@ -474,7 +476,9 @@ static void* eNB_thread_rxtx( void* param ) {
if
(
oai_exit
)
break
;
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
!=
NGFI_RRU_IF4
)
{
if
((
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP_BBU
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RCC_IF4
))
{
phy_procedures_eNB_TX
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
],
proc
,
0
,
no_relay
,
NULL
);
/* we're done, let the next one proceed */
...
...
@@ -491,8 +495,7 @@ static void* eNB_thread_rxtx( void* param ) {
exit_fun
(
"nothing to add"
);
break
;
}
}
else
{
}
else
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RRU_IF4
)
{
/// **** recv_IF4 of txdataF from RCC **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4
,
1
);
do
{
...
...
@@ -500,11 +503,19 @@ static void* eNB_thread_rxtx( void* param ) {
}
while
(
symbol_number
<
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
frame_parms
.
symbols_per_tti
-
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4
,
0
);
}
else
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RRU_IF5
)
{
/// **** recv_IF5 of txdata from BBU **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5
,
1
);
//recv_IF5();
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5
,
0
);
}
}
// eNodeB_3GPP, _BBU and RRU create txdata
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
!=
NGFI_RCC_IF4
)
{
if
((
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP_BBU
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RRU_IF4
))
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN
,
1
);
do_OFDM_mod_rt
(
proc
->
subframe_tx
,
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN
,
0
);
...
...
@@ -526,8 +537,9 @@ static void* eNB_thread_rxtx( void* param ) {
// eNodeB_3GPP, RRU write to RF device
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP
||
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RRU_IF4
)
{
if
((
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RRU_IF4
)
||
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
NGFI_RRU_IF5
))
{
// Transmit TX buffer based on timestamp from RX
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
// prepare tx buffer pointers
...
...
@@ -548,14 +560,17 @@ static void* eNB_thread_rxtx( void* param ) {
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
proc
->
timestamp_tx
-
openair0_cfg
[
0
].
tx_sample_advance
)
&
0xffffffff
);
}
else
if
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
]
->
node_function
==
eNodeB_3GPP_BBU
)
{
/// **** trx_write_func to IF device **** ///
/// **** send_IF5 of txdata to RRH **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5
,
1
);
send_IF5
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
],
proc
,
&
seqno
,
IF5_RRH_GW
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5
,
0
);
}
else
{
/// **** send_IF4 of txdataF to RRU **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4
,
1
);
send_IF4
(
PHY_vars_eNB_g
[
0
][
proc
->
CC_id
],
proc
->
frame_tx
,
proc
->
subframe_tx
,
IF4_PDLFFT
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4
,
0
);
}
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
...
...
@@ -759,7 +774,9 @@ static void* eNB_thread_rx_common( void* param ) {
}
// Start RF device for this CC
if
(
eNB
->
node_function
==
eNodeB_3GPP
||
eNB
->
node_function
==
NGFI_RRU_IF4
)
{
if
((
eNB
->
node_function
==
eNodeB_3GPP
)
||
(
eNB
->
node_function
==
NGFI_RRU_IF4
)
||
(
eNB
->
node_function
==
NGFI_RRU_IF5
))
{
if
(
eNB
->
rfdevice
.
trx_start_func
(
&
eNB
->
rfdevice
)
!=
0
)
LOG_E
(
HW
,
"Could not start the RF device
\n
"
);
}
...
...
targets/RT/USER/lte-softmodem.c
View file @
25952d44
...
...
@@ -385,9 +385,11 @@ void help (void) {
printf
(
" --ue-txgain set UE TX gain
\n
"
);
printf
(
" --ue-scan_carrier set UE to scan around carrier
\n
"
);
printf
(
" --loop-memory get softmodem (UE) to loop through memory instead of acquiring from HW
\n
"
);
printf
(
" --RCC run using NGFI RCC node function
\n
"
);
printf
(
" --RRU run using NGFI RRU node function
\n
"
);
printf
(
" --RCC run using NGFI RCC node function
IF4 split
\n
"
);
printf
(
" --RRU run using NGFI RRU node function
IF4 split
\n
"
);
printf
(
" --eNB run using 3GPP eNB node function
\n
"
);
printf
(
" --BBU run using 3GPP eNB node function with IF5 split
\n
"
);
printf
(
" --RRH run using RRH node function with IF5 split
\n
"
);
printf
(
" -C Set the downlink frequency for all component carriers
\n
"
);
printf
(
" -d Enable soft scope and L1 and L2 stats (Xforms)
\n
"
);
printf
(
" -F Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime
\n
"
);
...
...
@@ -687,7 +689,8 @@ static void get_options (int argc, char **argv)
LONG_OPTION_RCC
,
LONG_OPTION_RRU
,
LONG_OPTION_ENB
,
LONG_OPTION_ENB_BBU
LONG_OPTION_ENB_BBU
,
LONG_OPTION_RRH
#if T_TRACER
,
LONG_OPTION_T_PORT
,
...
...
@@ -715,6 +718,7 @@ static void get_options (int argc, char **argv)
{
"RRU"
,
no_argument
,
NULL
,
LONG_OPTION_RRU
},
{
"eNB"
,
no_argument
,
NULL
,
LONG_OPTION_ENB
},
{
"BBU"
,
no_argument
,
NULL
,
LONG_OPTION_ENB_BBU
},
{
"RRH"
,
no_argument
,
NULL
,
LONG_OPTION_RRH
},
#if T_TRACER
{
"T_port"
,
required_argument
,
0
,
LONG_OPTION_T_PORT
},
{
"T_nowait"
,
no_argument
,
0
,
LONG_OPTION_T_NOWAIT
},
...
...
@@ -822,6 +826,10 @@ static void get_options (int argc, char **argv)
node_function
=
eNodeB_3GPP_BBU
;
break
;
case
LONG_OPTION_RRH
:
node_function
=
NGFI_RRU_IF5
;
break
;
#if T_TRACER
case
LONG_OPTION_T_PORT
:
{
extern
int
T_port
;
...
...
@@ -1649,7 +1657,7 @@ int main( int argc, char **argv )
openair0_cfg
[
0
].
log_level
=
glog_level
;
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
if
(
node_function
==
NGFI_RRU_IF4
)
{
if
(
node_function
==
NGFI_RRU_IF4
||
node_function
==
NGFI_RRU_IF5
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
->
rfdevice
.
host_type
=
RRH_HOST
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ifdevice
.
host_type
=
RRH_HOST
;
}
else
{
...
...
@@ -1671,38 +1679,11 @@ int main( int argc, char **argv )
/* transport type is initialized NONE_TP (no transport protocol) when the transport protocol will be initiated transport protocol type will be set */
openair0
.
transp_type
=
NONE_TP
;
// Legacy BBU - RRH init
//int returns=-1;
///* BBU can have either a local or a remote radio head */
//if (local_remote_radio == BBU_LOCAL_RADIO_HEAD) { //local radio head active - load library of radio head and initiate it
//if (mode!=loop_through_memory) {
//returns=openair0_device_load(&openair0, &openair0_cfg[0]);
//printf("openair0_device_init returns %d\n",returns);
//if (returns<0) {
//printf("Exiting, cannot initialize device\n");
//exit(-1);
//}
//}
//else if (mode==loop_through_memory) {
//}
//} else { //remote radio head active - load library of transport protocol and initiate it
//if (mode!=loop_through_memory) {
//returns=openair0_transport_load(&openair0, &openair0_cfg[0], eth_params);
//printf("openair0_transport_init returns %d\n",returns);
//if (returns<0) {
//printf("Exiting, cannot initialize transport protocol\n");
//exit(-1);
//}
//}
//else if (mode==loop_through_memory) {
//}
//}
int
returns
=-
1
;
// Handle spatially distributed MIMO antenna ports
// Load RF device and initialize
if
(
node_function
==
NGFI_RRU_IF4
||
node_function
==
eNodeB_3GPP
)
{
if
(
node_function
==
NGFI_RRU_IF
5
||
node_function
==
NGFI_RRU_IF
4
||
node_function
==
eNodeB_3GPP
)
{
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
if
(
mode
!=
loop_through_memory
)
{
returns
=
openair0_device_load
(
&
(
PHY_vars_eNB_g
[
0
][
CC_id
]
->
rfdevice
),
&
openair0_cfg
[
0
]);
...
...
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