Commit e7233f8a authored by Raymond Knopp's avatar Raymond Knopp

eCPRI fronthaul "flushing" prior to streaming. TX path still not included

parent 0399c14b
This diff is collapsed.
...@@ -432,6 +432,12 @@ struct openair0_device_t { ...@@ -432,6 +432,12 @@ struct openair0_device_t {
\param device the hardware configuration to use \param device the hardware configuration to use
*/ */
int (*thirdparty_cleanup)(openair0_device *device); int (*thirdparty_cleanup)(openair0_device *device);
/*! \brief Callback for Third-party start streaming routine
\param device the hardware configuration to use
*/
int (*thirdparty_startstreaming)(openair0_device *device);
}; };
/* type of device init function, implemented in shared lib */ /* type of device init function, implemented in shared lib */
......
...@@ -297,7 +297,7 @@ int trx_eth_write_udp(openair0_device *device, openair0_timestamp timestamp, voi ...@@ -297,7 +297,7 @@ int trx_eth_write_udp(openair0_device *device, openair0_timestamp timestamp, voi
// ECPRI PC_ID (2 bytes) // ECPRI PC_ID (2 bytes)
*(uint16_t *)(buff2 + 4) = cc; *(uint16_t *)(buff2 + 4) = cc;
// OAI modified SEQ_ID (4 bytes) // OAI modified SEQ_ID (4 bytes)
*(uint64_t *)(buff2 + 6) = (uint64_t )timestamp; *(uint64_t *)(buff2 + 6) = ((uint64_t )timestamp)*3;
int sent_byte; int sent_byte;
...@@ -436,8 +436,8 @@ int trx_eth_read_udp(openair0_device *device, openair0_timestamp *timestamp, voi ...@@ -436,8 +436,8 @@ int trx_eth_read_udp(openair0_device *device, openair0_timestamp *timestamp, voi
// handle 1.4,3,5,10,15 MHz cases // handle 1.4,3,5,10,15 MHz cases
*cc = *(uint16_t*)(buff2 + ECPRICOMMON_BYTES); *cc = *(uint16_t*)(buff2 + ECPRICOMMON_BYTES);
} }
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM,eth->pck_seq_num_cur); //VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM,eth->pck_seq_num_cur);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM_PRV,eth->pck_seq_num_prev); //VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM_PRV,eth->pck_seq_num_prev);
eth->rx_actual_nsamps=bytes_received>>2; eth->rx_actual_nsamps=bytes_received>>2;
eth->rx_count++; eth->rx_count++;
} }
......
...@@ -178,10 +178,12 @@ void fh_if5_south_in(RU_t *ru,int *frame, int *subframe) { ...@@ -178,10 +178,12 @@ void fh_if5_south_in(RU_t *ru,int *frame, int *subframe) {
proc->frame_rx = (proc->timestamp_rx / (fp->samples_per_tti*10))&1023; proc->frame_rx = (proc->timestamp_rx / (fp->samples_per_tti*10))&1023;
proc->subframe_rx = (proc->timestamp_rx / fp->samples_per_tti)%10; proc->subframe_rx = (proc->timestamp_rx / fp->samples_per_tti)%10;
//LOG_I(PHY,"%d.%d (TS %llu) => %d.%d\n",*frame,*subframe,(unsigned long long)proc->timestamp_rx,proc->frame_rx,proc->subframe_rx);
if (proc->first_rx == 0) { if (proc->first_rx == 0) {
if (proc->subframe_rx != *subframe) { if (proc->subframe_rx != *subframe) {
LOG_E(PHY,"Received Timestamp doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d)\n",proc->subframe_rx,*subframe); LOG_E(PHY,"Received Timestamp doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d), resynching\n",proc->subframe_rx,*subframe);
exit_fun("Exiting"); *frame=proc->frame_rx;
*subframe=proc->subframe_rx;
} }
if (proc->frame_rx != *frame) { if (proc->frame_rx != *frame) {
...@@ -1650,7 +1652,7 @@ void *ru_thread( void *param ) { ...@@ -1650,7 +1652,7 @@ void *ru_thread( void *param ) {
// Start RF device if any // Start RF device if any
if (ru->start_rf) { if (ru->start_rf) {
if (ru->start_rf(ru) != 0) if (ru->start_rf(ru) != 0)
LOG_E(HW,"Could not start the RF device\n"); AssertFatal(1==0,"Could not start the RF device\n");
else LOG_I(PHY,"RU %d rf device ready\n",ru->idx); else LOG_I(PHY,"RU %d rf device ready\n",ru->idx);
} }
else LOG_D(PHY,"RU %d no rf device\n",ru->idx); else LOG_D(PHY,"RU %d no rf device\n",ru->idx);
...@@ -1814,7 +1816,6 @@ void *ru_thread( void *param ) { ...@@ -1814,7 +1816,6 @@ void *ru_thread( void *param ) {
if ((ru->fh_north_out) && (ru->state!=RU_CHECK_SYNC)) ru->fh_north_out(ru); if ((ru->fh_north_out) && (ru->state!=RU_CHECK_SYNC)) ru->fh_north_out(ru);
} }
proc->emulate_rf_busy = 0; proc->emulate_rf_busy = 0;
} }
...@@ -2070,6 +2071,10 @@ static void *rf_tx( void *param ) { ...@@ -2070,6 +2071,10 @@ static void *rf_tx( void *param ) {
#endif #endif
int start_streaming(RU_t *ru) {
LOG_I(PHY,"Starting streaming on third-party RRU\n");
return(ru->ifdevice.thirdparty_startstreaming(&ru->ifdevice));
}
int start_if(struct RU_t_s *ru,struct PHY_VARS_eNB_s *eNB) { int start_if(struct RU_t_s *ru,struct PHY_VARS_eNB_s *eNB) {
return(ru->ifdevice.trx_start_func(&ru->ifdevice)); return(ru->ifdevice.trx_start_func(&ru->ifdevice));
...@@ -2084,6 +2089,10 @@ int stop_rf(RU_t *ru) { ...@@ -2084,6 +2089,10 @@ int stop_rf(RU_t *ru) {
return 0; return 0;
} }
int start_steraming(RU_t *ru) {
return(ru->ifdevice.thirdparty_startstreaming);
}
extern void fep_full(RU_t *ru); extern void fep_full(RU_t *ru);
extern void ru_fep_full_2thread(RU_t *ru); extern void ru_fep_full_2thread(RU_t *ru);
extern void feptx_ofdm(RU_t *ru); extern void feptx_ofdm(RU_t *ru);
...@@ -2547,8 +2556,7 @@ void set_function_spec_param(RU_t *ru) { ...@@ -2547,8 +2556,7 @@ void set_function_spec_param(RU_t *ru) {
ru->fh_south_out = fh_if5_south_out; // synchronous IF5 transmission ru->fh_south_out = fh_if5_south_out; // synchronous IF5 transmission
ru->fh_south_asynch_in = NULL; // no asynchronous UL ru->fh_south_asynch_in = NULL; // no asynchronous UL
} }
ru->start_rf = ru->eth_params.transp_preference == ETH_UDP_IF5_ORI_MODE ? start_streaming : NULL; // no local RF
ru->start_rf = NULL; // no local RF
ru->stop_rf = NULL; ru->stop_rf = NULL;
ru->start_if = start_if; // need to start if interface for IF5 ru->start_if = start_if; // need to start if interface for IF5
ru->ifdevice.host_type = RAU_HOST; ru->ifdevice.host_type = RAU_HOST;
......
[*] [*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI [*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
[*] Sun Jul 31 13:30:42 2016 [*] Tue Sep 24 06:59:08 2019
[*] [*]
[dumpfile] "/tmp/openair_dump_eNB.vcd" [dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Sun Jul 31 13:21:59 2016" [dumpfile_mtime] "Mon Sep 23 20:04:56 2019"
[dumpfile_size] 18273240 [dumpfile_size] 1625759
[savefile] "/home/fourmi/openairinterface5g/targets/RT/USER/rcc_if5.gtkw" [savefile] "/home/orange/aw2s/openairinterface5g/targets/RT/USER/rcc_if5.gtkw"
[timestart] 24070893000 [timestart] 12600104000
[size] 1301 716 [size] 1215 1000
[pos] 309 0 [pos] 0 22
*-19.793451 29026062100 -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 *-19.506693 12600920638 -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] 284 [sst_width] 386
[signals_width] 262 [signals_width] 344
[sst_expanded] 1 [sst_expanded] 1
[sst_vpaned_height] 294 [sst_vpaned_height] 303
@29
functions.send_if5
@28
functions.recv_if5
@24 @24
variables.trx_ts[63:0] variables.trx_ts[63:0]
variables.trx_tst[63:0] variables.trx_tst[63:0]
@28 @28
functions.send_if5
functions.recv_if5
functions.eNB_thread_rxtx0 functions.eNB_thread_rxtx0
@24 @24
variables.frame_number_RX0_RU[63:0]
variables.subframe_number_RX0_RU[63:0]
variables.frame_number_TX0_RU[63:0]
variables.subframe_number_TX0_RU[63:0]
@28
functions.mac_schedule_dlsch
functions.macxface_eNB_dlsch_ulsch_scheduler
functions.macxface_ue_scheduler
functions.phy_eNB_ofdm_mod_l
@24
variables.frame_number_RX0_eNB[63:0] variables.frame_number_RX0_eNB[63:0]
variables.subframe_number_RX0_eNB[63:0] variables.subframe_number_RX0_eNB[63:0]
variables.frame_number_TX0_eNB[63:0] variables.frame_number_TX0_eNB[63:0]
variables.subframe_number_TX0_eNB[63:0] variables.subframe_number_TX0_eNB[63:0]
@28
functions.eNB_thread_rxtx1
@24
variables.frame_number_RX1_eNB[63:0] variables.frame_number_RX1_eNB[63:0]
variables.subframe_number_RX1_eNB[63:0] variables.subframe_number_RX1_eNB[63:0]
variables.frame_number_TX1_eNB[63:0] variables.frame_number_TX1_eNB[63:0]
variables.subframe_number_TX1_eNB[63:0] variables.subframe_number_TX1_eNB[63:0]
@28 @28
functions.phy_eNB_dlsch_modulation
functions.phy_eNB_dlsch_encoding
functions.phy_eNB_dlsch_scrambling
functions.phy_eNB_beam_precoding
functions.phy_enb_pdcch_tx
functions.phy_enb_prach_rx
functions.phy_procedures_ru_feprx0
functions.phy_procedures_eNb_rx_uespec0
functions.phy_procedures_eNb_rx_uespec1
functions.phy_enb_sfgen
functions.phy_procedures_eNb_tx0
functions.phy_procedures_eNb_tx1
functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1
functions.phy_procedures_ru_feptx_prec0
functions.phy_procedures_ru_feptx_prec1
functions.eNB_thread_rxtx1
functions.phy_enb_sfgen functions.phy_enb_sfgen
functions.phy_eNB_slot_fep
functions.phy_enb_prach_rx functions.phy_enb_prach_rx
@24 @24
variables.dci_info[63:0] variables.dci_info[63:0]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment