Commit daecbbbf authored by root's avatar root

bug fixes and performance improvements

parent 9e1b1064
...@@ -157,7 +157,7 @@ typedef struct { ...@@ -157,7 +157,7 @@ typedef struct {
/// Turbo-code outputs (36-212 V8.6 2009-03, p.12 /// Turbo-code outputs (36-212 V8.6 2009-03, p.12
uint8_t *d[MAX_NUM_DLSCH_SEGMENTS];//[(96+3+(3*6144))]; uint8_t *d[MAX_NUM_DLSCH_SEGMENTS];//[(96+3+(3*6144))];
/// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17) /// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17)
uint8_t w[MAX_NUM_DLSCH_SEGMENTS][3*6144]; uint8_t w[MAX_NUM_DLSCH_SEGMENTS][3*8448] __attribute__((aligned(32)));
/// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9) /// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9)
uint32_t C; uint32_t C;
/// Number of "small" code segments (for definition see 36-212 V8.6 2009-03, p.10) /// Number of "small" code segments (for definition see 36-212 V8.6 2009-03, p.10)
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
extern int codingw; extern int codingw;
uint8_t segments_per_worker[9][3] = {{1,0,0},{2,0,0},{3,0,0},{2,4,0},{2,5,0},{3,6,0},{2,4,7},{2,5,8},{3,6,9}}; uint16_t segments_per_worker[9][3] = {{1,0,0},{2,0,0},{2,3,0},{2,4,0},{2,4,5},{2,4,6},{2,4,7},{2,5,8},{3,6,9}};
void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch)
{ {
...@@ -524,10 +524,12 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, ...@@ -524,10 +524,12 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
stop_meas(&eNB->dlsch_turbo_encoding_segmentation_stats); stop_meas(&eNB->dlsch_turbo_encoding_segmentation_stats);
if (dlsch->harq_processes[harq_pid]->C >= 7) worker_num=2; if (dlsch->harq_processes[harq_pid]->C >= 6) worker_num=2;
else if (dlsch->harq_processes[harq_pid]->C >=4) worker_num=1; else if (dlsch->harq_processes[harq_pid]->C >=3) worker_num=1;
else worker_num=0; else worker_num=0;
//LOG_I(PHY,"dlsch_encoding (round 0): C=%d, worker_num=%d\n",dlsch->harq_processes[harq_pid]->C,worker_num);
start_meas(&eNB->dlsch_turbo_encoding_signal_stats); start_meas(&eNB->dlsch_turbo_encoding_signal_stats);
for(int i=0;i<worker_num;i++) for(int i=0;i<worker_num;i++)
{ {
...@@ -614,7 +616,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, ...@@ -614,7 +616,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
else else
Kr_int = Kr; Kr_int = Kr;
for (r0=0,r=segments_per_worker[dlsch->harq_processes[harq_pid]->C-1][worker_num-1]; r<dlsch->harq_processes[harq_pid]->C; r++,r0++) { for (r0=0,r=(worker_num==0 ? 0 : segments_per_worker[dlsch->harq_processes[harq_pid]->C-1][worker_num-1]); r<dlsch->harq_processes[harq_pid]->C; r++,r0++) {
memset(dlsch->harq_processes[harq_pid]->d[r],0,(96+12+3+3*8448)*sizeof(uint8_t)); memset(dlsch->harq_processes[harq_pid]->d[r],0,(96+12+3+3*8448)*sizeof(uint8_t));
c_tmp[r0] = &dlsch->harq_processes[harq_pid]->c[r][0]; c_tmp[r0] = &dlsch->harq_processes[harq_pid]->c[r][0];
d_tmp[r0] = &dlsch->harq_processes[harq_pid]->d[r][96]; d_tmp[r0] = &dlsch->harq_processes[harq_pid]->d[r][96];
...@@ -625,7 +627,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, ...@@ -625,7 +627,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
stop_meas(te_stats); stop_meas(te_stats);
start_meas(i_stats); start_meas(i_stats);
for (r=segments_per_worker[dlsch->harq_processes[harq_pid]->C-1][worker_num-1]; r<dlsch->harq_processes[harq_pid]->C; r++) { for (r=(worker_num==0 ? 0 : segments_per_worker[dlsch->harq_processes[harq_pid]->C-1][worker_num-1]); r<dlsch->harq_processes[harq_pid]->C; r++) {
dlsch->harq_processes[harq_pid]->RTC[r] = dlsch->harq_processes[harq_pid]->RTC[r] =
sub_block_interleaving_turbo((Kr_int), sub_block_interleaving_turbo((Kr_int),
&dlsch->harq_processes[harq_pid]->d[r][96], &dlsch->harq_processes[harq_pid]->d[r][96],
...@@ -637,6 +639,12 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, ...@@ -637,6 +639,12 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
} }
else { else {
if (dlsch->harq_processes[harq_pid]->C >= 6) worker_num=2;
else if (dlsch->harq_processes[harq_pid]->C >=3) worker_num=1;
else worker_num=0;
//LOG_I(PHY,"dlsch_encoding (round >0): C=%d, worker_num=%d\n",dlsch->harq_processes[harq_pid]->C,worker_num);
for(int i=0;i<worker_num;i++) for(int i=0;i<worker_num;i++)
{ {
proc->tep[i].eNB = eNB; proc->tep[i].eNB = eNB;
...@@ -658,7 +666,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, ...@@ -658,7 +666,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
for (r=0,r_offset=0; r<dlsch->harq_processes[harq_pid]->C; r++) { for (r=0,r_offset=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
// get information for E for the segments that are handled by the worker thread // get information for E for the segments that are handled by the worker thread
if (r<segments_per_worker[dlsch->harq_processes[harq_pid]->C-1][worker_num-1]) { if (r<(worker_num==0 ? 0 : segments_per_worker[dlsch->harq_processes[harq_pid]->C-1][worker_num-1])) {
int Nl=dlsch->harq_processes[harq_pid]->Nl; int Nl=dlsch->harq_processes[harq_pid]->Nl;
int Qm=dlsch->harq_processes[harq_pid]->Qm; int Qm=dlsch->harq_processes[harq_pid]->Qm;
int C = dlsch->harq_processes[harq_pid]->C; int C = dlsch->harq_processes[harq_pid]->C;
...@@ -733,26 +741,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, ...@@ -733,26 +741,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
time_stats_t *i_stats) time_stats_t *i_stats)
{ {
int encoding_return = 0; int encoding_return = 0;
/*
unsigned int L,C,B;
B = dlsch->harq_processes[dlsch->harq_ids[subframe]]->B;
if(B<=8448)
{
L=0;
C=1;
}
else
{
L=24;
C = B/(8448-L);
if((8448-L)*C < B)
{
C = C+1;
}
}
*/
//if(C >= 8 && get_nprocs()>=8 && codingw)//one main three worker
{
encoding_return = encoding_return =
dlsch_encoding_2threads(eNB, dlsch_encoding_2threads(eNB,
a, a,
...@@ -768,47 +757,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, ...@@ -768,47 +757,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
te_wakeup_stats1, te_wakeup_stats1,
i_stats, i_stats,
3); 3);
} /*
/*
if(C >= 7 && get_nprocs()>=6 && codingw)//one main two worker
{
encoding_return =
dlsch_encoding_2threads(eNB,
a,
num_pdcch_symbols,
dlsch,
frame,
subframe,
rm_stats,
te_stats,
te_wait_stats,
te_main_stats,
te_wakeup_stats0,
te_wakeup_stats1,
i_stats,
2);
}
else if(C >= 4 && get_nprocs()>=4 && codingw)//one main one worker
{
encoding_return =
dlsch_encoding_2threads(eNB,
a,
num_pdcch_symbols,
dlsch,
frame,
subframe,
rm_stats,
te_stats,
te_wait_stats,
te_main_stats,
te_wakeup_stats0,
te_wakeup_stats1,
i_stats,
1);
}
else
{
printf("what? C=%d, nproc=%d, codingw=%d\n",C,get_nprocs(),codingw);
encoding_return = encoding_return =
dlsch_encoding(eNB, dlsch_encoding(eNB,
a, a,
...@@ -819,8 +768,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, ...@@ -819,8 +768,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
rm_stats, rm_stats,
te_stats, te_stats,
i_stats); i_stats);
} */
*/
return encoding_return; return encoding_return;
} }
......
...@@ -582,7 +582,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -582,7 +582,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
eNB = RC.eNB[Mod_id][CC_id]; eNB = RC.eNB[Mod_id][CC_id];
fp = &eNB->frame_parms; fp = &eNB->frame_parms;
proc = &eNB->proc.proc_rxtx[0]; proc = &eNB->proc.proc_rxtx[1];
ul_subframe = pdcch_alloc2ul_subframe(fp,subframe); ul_subframe = pdcch_alloc2ul_subframe(fp,subframe);
ul_frame = pdcch_alloc2ul_frame(fp,frame,subframe); ul_frame = pdcch_alloc2ul_frame(fp,frame,subframe);
......
...@@ -520,6 +520,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, ...@@ -520,6 +520,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
harq_pid = dlsch0->harq_ids[subframe]; harq_pid = dlsch0->harq_ids[subframe];
if ((harq_pid>=0) && (harq_pid<8)) { if ((harq_pid>=0) && (harq_pid<8)) {
// generate pdsch // generate pdsch
LOG_I(PHY,"subframe %d: harq_pid %d: generating PDSCH\n",subframe,harq_pid);
pdsch_procedures(eNB, pdsch_procedures(eNB,
proc, proc,
harq_pid, harq_pid,
...@@ -528,7 +529,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, ...@@ -528,7 +529,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
&eNB->UE_stats[(uint32_t)UE_id], &eNB->UE_stats[(uint32_t)UE_id],
0); 0);
} else { } else {
LOG_E(PHY,"harq_pid %d is not valid, not generating PDSCH\n",harq_pid); LOG_E(PHY,"subframe %d: harq_pid %d is not valid, not generating PDSCH\n",subframe,harq_pid);
} }
} }
......
...@@ -71,7 +71,7 @@ schedule_ue_spec_phy_test( ...@@ -71,7 +71,7 @@ schedule_ue_spec_phy_test(
uint16_t rnti = 0x1235; uint16_t rnti = 0x1235;
uint32_t rb_alloc = 0x1FFFFFFF; uint32_t rb_alloc = 0x1FFFFFFF;
int32_t tpc = 1; int32_t tpc = 1;
int32_t mcs = 6; int32_t mcs = 15;
int32_t cqi = 15; int32_t cqi = 15;
int32_t ndi = subframeP/5; int32_t ndi = subframeP/5;
int32_t dai = 0; int32_t dai = 0;
......
...@@ -138,7 +138,8 @@ void handle_ulsch(UL_IND_t *UL_info) { ...@@ -138,7 +138,8 @@ void handle_ulsch(UL_IND_t *UL_info) {
} //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti == } //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti ==
// UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti) { // UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti) {
} // for (j=0;j<UL_info->crc_ind.number_of_crcs;j++) { } // for (j=0;j<UL_info->crc_ind.number_of_crcs;j++) {
AssertFatal(j<UL_info->crc_ind.number_of_crcs,"Couldn't find matchin CRC indication\n"); //AssertFatal(j<UL_info->crc_ind.number_of_crcs,"Couldn't find matchin CRC indication\n");
LOG_W(MAC,"Couldn't find matchin CRC indication\n");
} // for (i=0;i<UL_info->rx_ind.number_of_pdus;i++) { } // for (i=0;i<UL_info->rx_ind.number_of_pdus;i++) {
UL_info->rx_ind.number_of_pdus=0; UL_info->rx_ind.number_of_pdus=0;
......
[*] [*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*] Fri Nov 3 16:03:52 2017 [*] Wed Feb 21 13:06:28 2018
[*] [*]
[dumpfile] "/tmp/openair_dump_eNB.vcd" [dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Fri Nov 3 16:00:30 2017" [dumpfile_mtime] "Wed Feb 21 13:03:32 2018"
[dumpfile_size] 56765827 [dumpfile_size] 745020518
[savefile] "/homes/wangts/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw" [savefile] "/home/tct-labo4/dev/oai_gNB_mwc18_integration/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart] 15220241000 [timestart] 79635579000
[size] 1920 1018 [size] 1855 1018
[pos] 0 22 [pos] 0 22
*-19.666586 15221741584 -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.666586 79639241598 -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
[signals_width] 302 [signals_width] 302
[sst_expanded] 1 [sst_expanded] 1
...@@ -35,10 +35,12 @@ functions.phy_eNB_ofdm_mod_l ...@@ -35,10 +35,12 @@ functions.phy_eNB_ofdm_mod_l
@24 @24
variables.frame_number_RX0_eNB[63:0] variables.frame_number_RX0_eNB[63:0]
variables.frame_number_TX0_eNB[63:0] variables.frame_number_TX0_eNB[63:0]
@25 @420
variables.frame_number_RX1_eNB[63:0] variables.subframe_number_TX0_eNB[63:0]
@24 @24
variables.frame_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]
@28 @28
functions.phy_eNB_dlsch_modulation functions.phy_eNB_dlsch_modulation
functions.phy_eNB_dlsch_encoding functions.phy_eNB_dlsch_encoding
...@@ -57,6 +59,9 @@ functions.phy_procedures_ru_feptx_ofdm0 ...@@ -57,6 +59,9 @@ functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1 functions.phy_procedures_ru_feptx_ofdm1
functions.phy_procedures_ru_feptx_prec0 functions.phy_procedures_ru_feptx_prec0
functions.phy_procedures_ru_feptx_prec1 functions.phy_procedures_ru_feptx_prec1
@29
functions.eNB_thread_rxtx0
@28
functions.eNB_thread_rxtx1 functions.eNB_thread_rxtx1
functions.phy_enb_sfgen functions.phy_enb_sfgen
functions.phy_enb_prach_rx functions.phy_enb_prach_rx
......
...@@ -173,6 +173,14 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam ...@@ -173,6 +173,14 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
// UE-specific RX processing for subframe n // UE-specific RX processing for subframe n
phy_procedures_eNB_uespec_RX(eNB, proc, no_relay ); phy_procedures_eNB_uespec_RX(eNB, proc, no_relay );
if(get_nprocs() >= 8)
{
wakeup_tx(eNB,eNB->proc.ru_proc);
}
else if(get_nprocs() > 4)
{
if(oai_exit) return(-1);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 );
pthread_mutex_lock(&eNB->UL_INFO_mutex); pthread_mutex_lock(&eNB->UL_INFO_mutex);
...@@ -184,14 +192,6 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam ...@@ -184,14 +192,6 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
pthread_mutex_unlock(&eNB->UL_INFO_mutex); pthread_mutex_unlock(&eNB->UL_INFO_mutex);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 );
if(get_nprocs() >= 8)
{
wakeup_tx(eNB,eNB->proc.ru_proc);
}
else if(get_nprocs() > 4)
{
if(oai_exit) return(-1);
phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1); phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1);
wakeup_txfh(proc,eNB->proc.ru_proc); wakeup_txfh(proc,eNB->proc.ru_proc);
...@@ -234,6 +234,18 @@ static void* tx_thread(void* param) { ...@@ -234,6 +234,18 @@ static void* tx_thread(void* param) {
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB,proc->frame_tx); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB,proc->frame_tx);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB,proc->frame_rx); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB,proc->frame_rx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 );
pthread_mutex_lock(&eNB->UL_INFO_mutex);
eNB->UL_INFO.frame = proc->frame_rx;
eNB->UL_INFO.subframe = proc->subframe_rx;
eNB->UL_INFO.module_id = eNB->Mod_id;
eNB->UL_INFO.CC_id = eNB->CC_id;
eNB->if_inst->UL_indication(&eNB->UL_INFO);
pthread_mutex_unlock(&eNB->UL_INFO_mutex);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 );
phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1); phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1);
if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) break; if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) break;
...@@ -366,6 +378,15 @@ int wakeup_txfh(eNB_rxtx_proc_t *proc,RU_proc_t *ru_proc) { ...@@ -366,6 +378,15 @@ int wakeup_txfh(eNB_rxtx_proc_t *proc,RU_proc_t *ru_proc) {
wait.tv_nsec=5000000L; wait.tv_nsec=5000000L;
if (ru_proc->instance_cnt_eNBs == 0) {
usleep(50);
}
if (ru_proc->instance_cnt_eNBs == 0) {
LOG_E(PHY,"Frame %d, subframe %d: TX FH thread busy, dropping\n",proc->frame_tx,proc->subframe_tx);
return(-1);
}
if (pthread_mutex_timedlock(&ru_proc->mutex_eNBs,&wait) != 0) { if (pthread_mutex_timedlock(&ru_proc->mutex_eNBs,&wait) != 0) {
LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB TX1 thread %d (IC %d)\n", ru_proc->subframe_rx&1,ru_proc->instance_cnt_eNBs ); LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB TX1 thread %d (IC %d)\n", ru_proc->subframe_rx&1,ru_proc->instance_cnt_eNBs );
exit_fun( "error locking mutex_eNB" ); exit_fun( "error locking mutex_eNB" );
...@@ -404,6 +425,10 @@ int wakeup_tx(PHY_VARS_eNB *eNB,RU_proc_t *ru_proc) { ...@@ -404,6 +425,10 @@ int wakeup_tx(PHY_VARS_eNB *eNB,RU_proc_t *ru_proc) {
wait.tv_sec=0; wait.tv_sec=0;
wait.tv_nsec=5000000L; wait.tv_nsec=5000000L;
if (proc_rxtx1->instance_cnt_rxtx == 0) {
usleep(50);
}
if (proc_rxtx1->instance_cnt_rxtx == 0) { if (proc_rxtx1->instance_cnt_rxtx == 0) {
LOG_E(PHY,"Frame %d, subframe %d: TX1 thread busy, dropping\n",proc_rxtx1->frame_rx,proc_rxtx1->subframe_rx); LOG_E(PHY,"Frame %d, subframe %d: TX1 thread busy, dropping\n",proc_rxtx1->frame_rx,proc_rxtx1->subframe_rx);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX,++num_busy); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX,++num_busy);
...@@ -479,6 +504,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) { ...@@ -479,6 +504,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
if (proc_rxtx->instance_cnt_rxtx == 0) { if (proc_rxtx->instance_cnt_rxtx == 0) {
usleep(50); usleep(50);
} }
if (proc_rxtx->instance_cnt_rxtx == 0) { if (proc_rxtx->instance_cnt_rxtx == 0) {
LOG_E(PHY,"Frame %d, subframe %d: RXTX0 thread busy, dropping\n",proc_rxtx->frame_rx,proc_rxtx->subframe_rx); LOG_E(PHY,"Frame %d, subframe %d: RXTX0 thread busy, dropping\n",proc_rxtx->frame_rx,proc_rxtx->subframe_rx);
return(-1); return(-1);
......
...@@ -1433,8 +1433,8 @@ static void* ru_thread_tx( void* param ) { ...@@ -1433,8 +1433,8 @@ static void* ru_thread_tx( void* param ) {
if (oai_exit) break; if (oai_exit) break;
LOG_D(PHY,"ru_thread_tx: Waiting for TX processing\n"); LOG_D(PHY,"ru_thread_tx: Waiting for TX processing\n");
// wait until eNBs are finished subframe RX n and TX n+4 // wait until eNBs are finished subframe RX n and TX n+4
wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx"); wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
// do TX front-end processing if needed (precoding and/or IDFTs) // do TX front-end processing if needed (precoding and/or IDFTs)
......
...@@ -171,8 +171,8 @@ static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/; ...@@ -171,8 +171,8 @@ static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/;
//char rf_config_file[1024]; //char rf_config_file[1024];
//char rf_config_file[1024]="./targets/ARCH/gNB.ini"; //char rf_config_file[1024]="./targets/ARCH/gNB.ini";
//FIXME! //FIXME!
//char rf_config_file[1024]="./targets/ARCH/ADRV9371_ZC706/USERSPACE/PROFILES/gnb.band7.tm1.PRB100.NR80.adrv9371-zc706_HWgain15dB.ini"; char rf_config_file[1024]="./targets/ARCH/ADRV9371_ZC706/USERSPACE/PROFILES/gnb.band7.tm1.PRB100.NR80.adrv9371-zc706_HWgain15dB.ini";
char rf_config_file[1024]="./targets/ARCH/ADRV9371_ZC706/USERSPACE/PROFILES/gnb.band7.tm1.PRB100.adrv9371-zc706_HWgain15dB.ini"; //char rf_config_file[1024]="./targets/ARCH/ADRV9371_ZC706/USERSPACE/PROFILES/gnb.band7.tm1.PRB100.adrv9371-zc706_HWgain15dB.ini";
int chain_offset=0; int chain_offset=0;
int phy_test = 0; int phy_test = 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