added node fn RRU_IF5, split points and vcd logging
This commit is contained in:
+4
-3
@@ -158,10 +158,11 @@ enum transmission_access_mode {
|
||||
CBA_ACCESS};
|
||||
|
||||
typedef enum {
|
||||
eNodeB_3GPP=0, // classical eNodeB function
|
||||
eNodeB_3GPP=0, // classical eNodeB function
|
||||
eNodeB_3GPP_BBU, // eNodeB with NGFI 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)
|
||||
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;
|
||||
|
||||
typedef struct UE_SCAN_INFO_s {
|
||||
|
||||
@@ -2546,7 +2546,8 @@ 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) ||
|
||||
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;
|
||||
@@ -2598,7 +2603,14 @@ 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_FRAME_NUMBER_RX_ENB, proc->frame_rx );
|
||||
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) ||
|
||||
|
||||
@@ -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] = {
|
||||
|
||||
@@ -308,10 +308,12 @@ 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,
|
||||
} vcd_signal_dump_functions;
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
@@ -821,6 +825,10 @@ static void get_options (int argc, char **argv)
|
||||
case LONG_OPTION_ENB_BBU:
|
||||
node_function = eNodeB_3GPP_BBU;
|
||||
break;
|
||||
|
||||
case LONG_OPTION_RRH:
|
||||
node_function = NGFI_RRU_IF5;
|
||||
break;
|
||||
|
||||
#if T_TRACER
|
||||
case LONG_OPTION_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 {
|
||||
@@ -1670,39 +1678,12 @@ int main( int argc, char **argv )
|
||||
openair0.type = NONE_DEV;
|
||||
/* 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_IF5 || node_function == NGFI_RRU_IF4 || 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]);
|
||||
|
||||
Reference in New Issue
Block a user