testing with 2 RUS (changes in default precoder)
This commit is contained in:
@@ -2660,7 +2660,7 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
|
|||||||
else if(ulsch->harq_processes[harq_pid]->n_DMRS == 7)
|
else if(ulsch->harq_processes[harq_pid]->n_DMRS == 7)
|
||||||
ulsch->harq_processes[harq_pid]->n_DMRS2 = 9;
|
ulsch->harq_processes[harq_pid]->n_DMRS2 = 9;
|
||||||
|
|
||||||
LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d ulsch_pdu:rvidx:%d\n",
|
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d ulsch_pdu:rvidx:%d\n",
|
||||||
eNB->Mod_id,harq_pid,frame,subframe,
|
eNB->Mod_id,harq_pid,frame,subframe,
|
||||||
ulsch->harq_processes[harq_pid]->n_DMRS2,
|
ulsch->harq_processes[harq_pid]->n_DMRS2,
|
||||||
ulsch->harq_processes[harq_pid]->n_DMRS,
|
ulsch->harq_processes[harq_pid]->n_DMRS,
|
||||||
@@ -2692,7 +2692,7 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
|
|||||||
else ulsch->harq_processes[harq_pid]->round++;
|
else ulsch->harq_processes[harq_pid]->round++;
|
||||||
|
|
||||||
ulsch->rnti = ulsch_pdu->ulsch_pdu_rel8.rnti;
|
ulsch->rnti = ulsch_pdu->ulsch_pdu_rel8.rnti;
|
||||||
LOG_I(PHY,"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, status %d, handled %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n",
|
LOG_D(PHY,"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, status %d, handled %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n",
|
||||||
ulsch->rnti,
|
ulsch->rnti,
|
||||||
UE_id,
|
UE_id,
|
||||||
new_ulsch,
|
new_ulsch,
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
|
|||||||
eth_state_t *eth = (eth_state_t*) (ru->ifdevice.priv);
|
eth_state_t *eth = (eth_state_t*) (ru->ifdevice.priv);
|
||||||
int nsym = fp->symbols_per_tti;
|
int nsym = fp->symbols_per_tti;
|
||||||
|
|
||||||
if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 1 );
|
if (ru->idx<=1) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4+ru->idx, 1 );
|
||||||
|
|
||||||
if (packet_type == IF4p5_PDLFFT) {
|
if (packet_type == IF4p5_PDLFFT) {
|
||||||
//LOG_D(PHY,"send DL_IF4p5: RU %d frame %d, subframe %d\n",ru->idx,frame,subframe);
|
//LOG_D(PHY,"send DL_IF4p5: RU %d frame %d, subframe %d\n",ru->idx,frame,subframe);
|
||||||
@@ -262,7 +262,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
|
|||||||
AssertFatal(1==0, "send_IF4p5 - Unknown packet_type %x", packet_type);
|
AssertFatal(1==0, "send_IF4p5 - Unknown packet_type %x", packet_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 0 );
|
if (ru->idx<=1) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4+ru->idx, 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,7 +282,7 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
|
|||||||
eth_state_t *eth = (eth_state_t*) (ru->ifdevice.priv);
|
eth_state_t *eth = (eth_state_t*) (ru->ifdevice.priv);
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 1 );
|
if (ru->idx<=1) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4+ru->idx, 1 );
|
||||||
|
|
||||||
if (ru->function == NGFI_RRU_IF4p5) {
|
if (ru->function == NGFI_RRU_IF4p5) {
|
||||||
db_fulllength = (12*fp->N_RB_DL)*ru->nb_tx;
|
db_fulllength = (12*fp->N_RB_DL)*ru->nb_tx;
|
||||||
@@ -407,7 +407,7 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
|
|||||||
}
|
}
|
||||||
LOG_D(PHY,"PRACH_IF4p5: CC_id %d : frame %d, subframe %d => %d dB\n",ru->idx,*frame,*subframe,
|
LOG_D(PHY,"PRACH_IF4p5: CC_id %d : frame %d, subframe %d => %d dB\n",ru->idx,*frame,*subframe,
|
||||||
dB_fixed(signal_energy((int*)&prach_rxsigF[0][0],839)));
|
dB_fixed(signal_energy((int*)&prach_rxsigF[0][0],839)));
|
||||||
for (idx=0;idx<ru->num_eNB;idx++) ru->wakeup_prach_eNB(ru->eNB_list[idx],ru,*frame,*subframe);
|
for (idx=0;idx<ru->num_eNB;idx++) ru->wakeup_prach_eNB(ru->eNB_list[idx],ru,*frame,*subframe);
|
||||||
|
|
||||||
} else if (*packet_type == IF4p5_PULTICK) {
|
} else if (*packet_type == IF4p5_PULTICK) {
|
||||||
|
|
||||||
@@ -415,7 +415,7 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
|
|||||||
AssertFatal(1==0, "recv_IF4p5 - Unknown packet_type %x", *packet_type);
|
AssertFatal(1==0, "recv_IF4p5 - Unknown packet_type %x", *packet_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 );
|
if (ru->idx<=1) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4+ru->idx, 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -1666,7 +1666,9 @@ static inline int wait_on_condition(pthread_mutex_t *mutex,pthread_cond_t *cond,
|
|||||||
while (*instance_cnt < 0) {
|
while (*instance_cnt < 0) {
|
||||||
// most of the time the thread is waiting here
|
// most of the time the thread is waiting here
|
||||||
// proc->instance_cnt_rxtx is -1
|
// proc->instance_cnt_rxtx is -1
|
||||||
pthread_cond_wait(cond,mutex); // this unlocks mutex_rxtx while waiting and then locks it again
|
LOG_I(PHY,"Waiting (instance_cnt %d thread : %s)\n",*instance_cnt,name);
|
||||||
|
AssertFatal(0==pthread_cond_wait(cond,mutex),""); // this unlocks mutex_rxtx while waiting and then locks it again
|
||||||
|
LOG_I(PHY,"Waking up (instance_cnt %d thread: %s)\n",*instance_cnt,name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pthread_mutex_unlock(mutex) != 0) {
|
if (pthread_mutex_unlock(mutex) != 0) {
|
||||||
|
|||||||
@@ -537,7 +537,7 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) {
|
if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) {
|
||||||
AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0,
|
AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0,
|
||||||
"No existing UE ULSCH for rnti %x\n",rel8->rnti);
|
"No existing UE ULSCH for rnti %x\n",rel8->rnti);
|
||||||
LOG_I(PHY,"Applying UL config for UE %d, rnti %x in frame %d, subframe %d, modulation %d, rvidx %d\n", UE_id,rel8->rnti,frame,subframe,rel8->modulation_type,rel8->redundancy_version);
|
LOG_D(PHY,"Applying UL config for UE %d, rnti %x in frame %d, subframe %d, modulation %d, rvidx %d\n", UE_id,rel8->rnti,frame,subframe,rel8->modulation_type,rel8->redundancy_version);
|
||||||
|
|
||||||
fill_ulsch(eNB,&ul_config_pdu->ulsch_pdu,frame,subframe);
|
fill_ulsch(eNB,&ul_config_pdu->ulsch_pdu,frame,subframe);
|
||||||
|
|
||||||
@@ -831,7 +831,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
|
|||||||
else {
|
else {
|
||||||
for (i=0;i<number_ul_pdu;i++) {
|
for (i=0;i<number_ul_pdu;i++) {
|
||||||
ul_config_pdu = &UL_req->ul_config_request_body.ul_config_pdu_list[i];
|
ul_config_pdu = &UL_req->ul_config_request_body.ul_config_pdu_list[i];
|
||||||
LOG_I(PHY,"NFAPI: ul_pdu %d : type %d\n",i,ul_config_pdu->pdu_type);
|
LOG_D(PHY,"NFAPI: ul_pdu %d : type %d\n",i,ul_config_pdu->pdu_type);
|
||||||
AssertFatal(ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE ||
|
AssertFatal(ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE ||
|
||||||
ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE ||
|
ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE ||
|
||||||
ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE ||
|
ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE ||
|
||||||
|
|||||||
@@ -1163,7 +1163,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||||
ulsch = eNB->ulsch[i];
|
ulsch = eNB->ulsch[i];
|
||||||
ulsch_harq = ulsch->harq_processes[harq_pid];
|
ulsch_harq = ulsch->harq_processes[harq_pid];
|
||||||
if (ulsch->rnti>0) LOG_I(PHY,"eNB->ulsch[%d]->harq_processes[harq_pid:%d] SFN/SF:%04d%d: PUSCH procedures, UE %d/%x ulsch_harq[status:%d SFN/SF:%04d%d handled:%d]\n",
|
if (ulsch->rnti>0) LOG_D(PHY,"eNB->ulsch[%d]->harq_processes[harq_pid:%d] SFN/SF:%04d%d: PUSCH procedures, UE %d/%x ulsch_harq[status:%d SFN/SF:%04d%d handled:%d]\n",
|
||||||
i, harq_pid, frame,subframe,i,ulsch->rnti,
|
i, harq_pid, frame,subframe,i,ulsch->rnti,
|
||||||
ulsch_harq->status, ulsch_harq->frame, ulsch_harq->subframe, ulsch_harq->handled);
|
ulsch_harq->status, ulsch_harq->frame, ulsch_harq->subframe, ulsch_harq->handled);
|
||||||
|
|
||||||
@@ -1182,7 +1182,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
|
eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n", eNB->Mod_id, frame, subframe, i);
|
LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n", eNB->Mod_id, frame, subframe, i);
|
||||||
|
|
||||||
nPRS = fp->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1];
|
nPRS = fp->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1];
|
||||||
|
|
||||||
@@ -1190,7 +1190,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
|
fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
|
||||||
nPRS)%12;
|
nPRS)%12;
|
||||||
|
|
||||||
LOG_I(PHY,
|
LOG_D(PHY,
|
||||||
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n",
|
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n",
|
||||||
eNB->Mod_id,harq_pid,frame,subframe,
|
eNB->Mod_id,harq_pid,frame,subframe,
|
||||||
ulsch_harq->dci_alloc,
|
ulsch_harq->dci_alloc,
|
||||||
@@ -1223,7 +1223,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
|
|
||||||
stop_meas(&eNB->ulsch_decoding_stats);
|
stop_meas(&eNB->ulsch_decoding_stats);
|
||||||
|
|
||||||
LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n",
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n",
|
||||||
eNB->Mod_id,harq_pid,
|
eNB->Mod_id,harq_pid,
|
||||||
frame,subframe,
|
frame,subframe,
|
||||||
ulsch->rnti,
|
ulsch->rnti,
|
||||||
@@ -1259,7 +1259,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
fill_crc_indication(eNB,i,frame,subframe,1); // indicate NAK to MAC
|
fill_crc_indication(eNB,i,frame,subframe,1); // indicate NAK to MAC
|
||||||
fill_rx_indication(eNB,i,frame,subframe); // indicate SDU to MAC
|
fill_rx_indication(eNB,i,frame,subframe); // indicate SDU to MAC
|
||||||
|
|
||||||
LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
|
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
|
||||||
eNB->Mod_id,harq_pid,
|
eNB->Mod_id,harq_pid,
|
||||||
frame,subframe, i,
|
frame,subframe, i,
|
||||||
ulsch_harq->round,
|
ulsch_harq->round,
|
||||||
|
|||||||
@@ -217,7 +217,8 @@ void prach_procedures(PHY_VARS_eNB *eNB
|
|||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&eNB->UL_INFO_mutex);
|
pthread_mutex_unlock(&eNB->UL_INFO_mutex);
|
||||||
|
/* write_output("prach.m","prachsig",eNB->prach_vars.rxsigF[0][0],839,1,1);
|
||||||
|
exit(-1);*/
|
||||||
} // max_preamble_energy > prach_I0 + 100
|
} // max_preamble_energy > prach_I0 + 100
|
||||||
else {
|
else {
|
||||||
eNB->measurements.prach_I0 = ((eNB->measurements.prach_I0*900)>>10) + ((max_preamble_energy[0]*124)>>10);
|
eNB->measurements.prach_I0 = ((eNB->measurements.prach_I0*900)>>10) + ((max_preamble_energy[0]*124)>>10);
|
||||||
|
|||||||
@@ -359,15 +359,18 @@ void feptx_prec(RU_t *ru) {
|
|||||||
int32_t ***bw;
|
int32_t ***bw;
|
||||||
int subframe = ru->proc.subframe_tx;
|
int subframe = ru->proc.subframe_tx;
|
||||||
|
|
||||||
|
if (ru->idx != 0) return;
|
||||||
|
|
||||||
if (ru->num_eNB == 1) {
|
if (ru->num_eNB == 1) {
|
||||||
eNB = eNB_list[0];
|
eNB = eNB_list[0];
|
||||||
fp = &eNB->frame_parms;
|
fp = &eNB->frame_parms;
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
|
||||||
|
|
||||||
|
// simple antenna port mapping rule that works both for single antenna eNB and dual antenna eNB. It maps antenna ports evenly to RUs
|
||||||
for (aa=0;aa<ru->nb_tx;aa++)
|
for (aa=0;aa<ru->nb_tx;aa++)
|
||||||
memcpy((void*)ru->common.txdataF_BF[aa],
|
memcpy((void*)ru->common.txdataF_BF[aa],
|
||||||
(void*)&eNB->common_vars.txdataF[aa][subframe*fp->symbols_per_tti*fp->ofdm_symbol_size],
|
(void*)&eNB->common_vars.txdataF[(aa+ru->idx)%eNB->frame_parms.nb_antenna_ports_eNB][subframe*fp->symbols_per_tti*fp->ofdm_symbol_size],
|
||||||
fp->symbols_per_tti*fp->ofdm_symbol_size*sizeof(int32_t));
|
fp->symbols_per_tti*fp->ofdm_symbol_size*sizeof(int32_t));
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
|
||||||
|
|||||||
@@ -363,8 +363,9 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
|
|||||||
// check uplink failure
|
// check uplink failure
|
||||||
if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 0) &&
|
if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 0) &&
|
||||||
(UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 0)) {
|
(UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 0)) {
|
||||||
LOG_I(MAC, "UE %d rnti %x: UL Failure timer %d \n", UE_id, rnti,
|
if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer&1023) == 0)
|
||||||
UE_list->UE_sched_ctrl[UE_id].ul_failure_timer);
|
LOG_I(MAC, "UE %d rnti %x: UL Failure timer %d \n", UE_id, rnti,
|
||||||
|
UE_list->UE_sched_ctrl[UE_id].ul_failure_timer);
|
||||||
if (UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent == 0) {
|
if (UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent == 0) {
|
||||||
UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 1;
|
UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 1;
|
||||||
|
|
||||||
@@ -396,10 +397,11 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
|
|||||||
dl_config_pdu->dci_dl_pdu.
|
dl_config_pdu->dci_dl_pdu.
|
||||||
dci_dl_pdu_rel8.resource_block_coding);
|
dci_dl_pdu_rel8.resource_block_coding);
|
||||||
} else { // ra_pdcch_sent==1
|
} else { // ra_pdcch_sent==1
|
||||||
LOG_I(MAC,
|
if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer&1023) == 0)
|
||||||
"UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d) \n",
|
LOG_I(MAC,
|
||||||
UE_id, rnti,
|
"UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d) \n",
|
||||||
UE_list->UE_sched_ctrl[UE_id].ul_failure_timer);
|
UE_id, rnti,
|
||||||
|
UE_list->UE_sched_ctrl[UE_id].ul_failure_timer);
|
||||||
if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer % 40) == 0) UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 0; // resend every 4 frames
|
if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer % 40) == 0) UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 0; // resend every 4 frames
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,13 +72,21 @@ const char* eurecomVariablesNames[] = {
|
|||||||
"subframe_number_RX0_eNB",
|
"subframe_number_RX0_eNB",
|
||||||
"subframe_number_RX1_eNB",
|
"subframe_number_RX1_eNB",
|
||||||
"frame_number_TX0_RU",
|
"frame_number_TX0_RU",
|
||||||
|
"frame_number_TX0_RU2",
|
||||||
"frame_number_TX1_RU",
|
"frame_number_TX1_RU",
|
||||||
|
"frame_number_TX1_RU2",
|
||||||
"frame_number_RX0_RU",
|
"frame_number_RX0_RU",
|
||||||
|
"frame_number_RX0_RU2",
|
||||||
"frame_number_RX1_RU",
|
"frame_number_RX1_RU",
|
||||||
|
"frame_number_RX1_RU2",
|
||||||
"subframe_number_TX0_RU",
|
"subframe_number_TX0_RU",
|
||||||
|
"subframe_number_TX0_RU2",
|
||||||
"subframe_number_TX1_RU",
|
"subframe_number_TX1_RU",
|
||||||
|
"subframe_number_TX1_RU2",
|
||||||
"subframe_number_RX0_RU",
|
"subframe_number_RX0_RU",
|
||||||
|
"subframe_number_RX0_RU2",
|
||||||
"subframe_number_RX1_RU",
|
"subframe_number_RX1_RU",
|
||||||
|
"subframe_number_RX1_RU2",
|
||||||
"runtime_TX_eNB",
|
"runtime_TX_eNB",
|
||||||
"runtime_RX_eNB",
|
"runtime_RX_eNB",
|
||||||
"frame_number_TX0_UE",
|
"frame_number_TX0_UE",
|
||||||
@@ -388,8 +396,10 @@ const char* eurecomFunctionsNames[] = {
|
|||||||
"test",
|
"test",
|
||||||
|
|
||||||
/* IF4/IF5 signals */
|
/* IF4/IF5 signals */
|
||||||
"send_if4",
|
"send_if4(RU0)",
|
||||||
"recv_if4",
|
"send_if4(RU1)",
|
||||||
|
"recv_if4(RU0)",
|
||||||
|
"recv_if4(RU1)",
|
||||||
"send_if5",
|
"send_if5",
|
||||||
"recv_if5",
|
"recv_if5",
|
||||||
|
|
||||||
|
|||||||
@@ -48,13 +48,21 @@ typedef enum {
|
|||||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_ENB,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_ENB,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_RU,
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_RU,
|
||||||
|
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_RU2,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_UE,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_UE,
|
||||||
@@ -369,7 +377,9 @@ typedef enum {
|
|||||||
|
|
||||||
/* IF4/IF5 signals */
|
/* IF4/IF5 signals */
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4_RU2,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4_RU2,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF5,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF5,
|
||||||
|
|
||||||
|
|||||||
@@ -180,12 +180,12 @@ L1s = (
|
|||||||
RUs = (
|
RUs = (
|
||||||
{
|
{
|
||||||
local_if_name = "eth1";
|
local_if_name = "eth1";
|
||||||
remote_address = "10.10.10.19";
|
remote_address = "10.10.10.111";
|
||||||
local_address = "10.10.10.18";
|
local_address = "10.10.10.153";
|
||||||
local_portc = 50000;
|
local_portc = 50002;
|
||||||
remote_portc = 50000;
|
remote_portc = 50002;
|
||||||
local_portd = 50001;
|
local_portd = 50003;
|
||||||
remote_portd = 50001;
|
remote_portd = 50003;
|
||||||
local_rf = "no"
|
local_rf = "no"
|
||||||
tr_preference = "udp_if4p5"
|
tr_preference = "udp_if4p5"
|
||||||
nb_tx = 1
|
nb_tx = 1
|
||||||
@@ -193,6 +193,7 @@ RUs = (
|
|||||||
att_tx = 0
|
att_tx = 0
|
||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
|
is_slave = "no"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -488,7 +488,7 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe) {
|
|||||||
pthread_mutex_lock(&proc->mutex_RU_PRACH);
|
pthread_mutex_lock(&proc->mutex_RU_PRACH);
|
||||||
for (i=0;i<eNB->num_RU;i++) {
|
for (i=0;i<eNB->num_RU;i++) {
|
||||||
if (ru == eNB->RU_list[i]) {
|
if (ru == eNB->RU_list[i]) {
|
||||||
//LOG_D(PHY,"frame %d, subframe %d: RU %d for eNB %d signals PRACH (mask %x, num_RU %d)\n",frame,subframe,i,eNB->Mod_id,proc->RU_mask_prach,eNB->num_RU);
|
LOG_D(PHY,"frame %d, subframe %d: RU %d for eNB %d signals PRACH (mask %x, num_RU %d)\n",frame,subframe,i,eNB->Mod_id,proc->RU_mask_prach,eNB->num_RU);
|
||||||
//if ((proc->RU_mask_prach&(1<<i)) > 0)
|
//if ((proc->RU_mask_prach&(1<<i)) > 0)
|
||||||
// LOG_E(PHY,"eNB %d frame %d, subframe %d : previous information (PRACH) from RU %d (num_RU %d, mask %x) has not been served yet!\n",
|
// LOG_E(PHY,"eNB %d frame %d, subframe %d : previous information (PRACH) from RU %d (num_RU %d, mask %x) has not been served yet!\n",
|
||||||
// eNB->Mod_id,frame,subframe,ru->idx,eNB->num_RU,proc->RU_mask_prach);
|
// eNB->Mod_id,frame,subframe,ru->idx,eNB->num_RU,proc->RU_mask_prach);
|
||||||
@@ -1032,7 +1032,7 @@ void init_eNB_afterRU(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eNB->frame_parms.nb_antennas_rx = 1;
|
||||||
|
|
||||||
/* TODO: review this code, there is something wrong.
|
/* TODO: review this code, there is something wrong.
|
||||||
* In monolithic mode, we come here with nb_antennas_rx == 0
|
* In monolithic mode, we come here with nb_antennas_rx == 0
|
||||||
@@ -1043,10 +1043,6 @@ void init_eNB_afterRU(void) {
|
|||||||
LOG_I(PHY, "%s() ************* DJP ***** eNB->frame_parms.nb_antennas_rx:%d - GOING TO HARD CODE TO 1", __FUNCTION__, eNB->frame_parms.nb_antennas_rx);
|
LOG_I(PHY, "%s() ************* DJP ***** eNB->frame_parms.nb_antennas_rx:%d - GOING TO HARD CODE TO 1", __FUNCTION__, eNB->frame_parms.nb_antennas_rx);
|
||||||
eNB->frame_parms.nb_antennas_rx = 1;
|
eNB->frame_parms.nb_antennas_rx = 1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
//LOG_I(PHY," Delete code\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eNB->frame_parms.nb_antennas_tx < 1)
|
if (eNB->frame_parms.nb_antennas_tx < 1)
|
||||||
{
|
{
|
||||||
|
|||||||
+46
-18
@@ -504,11 +504,11 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
|
|||||||
*subframe = proc->subframe_rx;
|
*subframe = proc->subframe_rx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ru == RC.ru[0]) {
|
if (ru == RC.ru[0] || ru == RC.ru[1]) {
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, f );
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU+ru->idx, f );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU, sf );
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU+ru->idx, sf );
|
||||||
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+ru->idx, proc->frame_tx );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU+ru->idx, proc->subframe_tx );
|
||||||
}
|
}
|
||||||
|
|
||||||
proc->symbol_mask[sf] = 0;
|
proc->symbol_mask[sf] = 0;
|
||||||
@@ -1271,19 +1271,21 @@ void wakeup_eNBs(RU_t *ru) {
|
|||||||
int i;
|
int i;
|
||||||
PHY_VARS_eNB **eNB_list = ru->eNB_list;
|
PHY_VARS_eNB **eNB_list = ru->eNB_list;
|
||||||
PHY_VARS_eNB *eNB=eNB_list[0];
|
PHY_VARS_eNB *eNB=eNB_list[0];
|
||||||
eNB_proc_t *proc = &eNB->proc;
|
eNB_proc_t *proc = &eNB->proc;
|
||||||
|
RU_proc_t *ruproc = &ru->proc;
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
|
|
||||||
LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d (state %s)ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru_states[ru->state],ru->eNB_top);
|
LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d (state %s)ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru_states[ru->state],ru->eNB_top);
|
||||||
|
|
||||||
if (ru->num_eNB==1 && ru->eNB_top!=0) {
|
if (ru->num_eNB==1) {
|
||||||
|
AssertFatal(ru->eNB_top!=0,"eNB_top function is not there\n");
|
||||||
// call eNB function directly
|
// call eNB function directly
|
||||||
|
|
||||||
char string[20];
|
char string[20];
|
||||||
sprintf(string,"Incoming RU %d",ru->idx);
|
sprintf(string,"Incoming RU %d",ru->idx);
|
||||||
|
|
||||||
pthread_mutex_lock(&proc->mutex_RU);
|
AssertFatal(0==pthread_mutex_lock(&proc->mutex_RU),"");
|
||||||
LOG_I(PHY,"Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask[%d] %x\n",
|
LOG_D(PHY,"Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask[%d] %x\n",
|
||||||
ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,ru->wait_cnt,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx]);
|
ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,ru->wait_cnt,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx]);
|
||||||
|
|
||||||
if (proc->RU_mask[ru->proc.subframe_rx] == 0){
|
if (proc->RU_mask[ru->proc.subframe_rx] == 0){
|
||||||
@@ -1302,21 +1304,41 @@ void wakeup_eNBs(RU_t *ru) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
clock_gettime(CLOCK_MONOTONIC,&t);
|
clock_gettime(CLOCK_MONOTONIC,&t);
|
||||||
LOG_I(PHY,"RU mask is now %x, time is %lu\n",proc->RU_mask[ru->proc.subframe_rx], t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec);
|
LOG_D(PHY,"RU mask is now %x, time is %lu\n",proc->RU_mask[ru->proc.subframe_rx], t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec);
|
||||||
|
|
||||||
if (proc->RU_mask[ru->proc.subframe_rx] == (1<<eNB->num_RU)-1) {
|
if (proc->RU_mask[ru->proc.subframe_rx] == (1<<eNB->num_RU)-1) {
|
||||||
LOG_D(PHY,"Reseting mask frame %d, subframe %d, this is RU %d\n",ru->proc.frame_rx, ru->proc.subframe_rx, ru->idx);
|
LOG_I(PHY, "ru_mask is %d \n ", proc->RU_mask[ru->proc.subframe_rx]);
|
||||||
|
LOG_I(PHY, "the number of RU is %d, the current ru is RU %d \n ", (1<<eNB->num_RU)-1, ru->idx);
|
||||||
|
LOG_I(PHY, "ru->proc.subframe_rx is %d \n", ru->proc.subframe_rx);
|
||||||
|
LOG_I(PHY,"Reseting mask frame %d, subframe %d, this is RU %d\n",ru->proc.frame_rx, ru->proc.subframe_rx, ru->idx);
|
||||||
proc->RU_mask[ru->proc.subframe_rx] = 0;
|
proc->RU_mask[ru->proc.subframe_rx] = 0;
|
||||||
clock_gettime(CLOCK_MONOTONIC,&t);
|
clock_gettime(CLOCK_MONOTONIC,&t);
|
||||||
//stop_meas(&proc->ru_arrival_time);
|
//stop_meas(&proc->ru_arrival_time);
|
||||||
AssertFatal(t.tv_nsec < proc->t[ru->proc.subframe_rx].tv_nsec+5000000,
|
AssertFatal(t.tv_nsec < proc->t[ru->proc.subframe_rx].tv_nsec+5000000,
|
||||||
"Time difference for subframe %d (Frame %d) => %lu > 5ms, this is RU %d\n",
|
"Time difference for subframe %d (Frame %d) => %lu > 5ms, this is RU %d\n",
|
||||||
ru->proc.subframe_rx, ru->proc.frame_rx,t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec, ru->idx);
|
ru->proc.subframe_rx, ru->proc.frame_rx,t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec, ru->idx);
|
||||||
}
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&proc->mutex_RU);
|
|
||||||
LOG_D(PHY,"wakeup eNB top for for subframe %d\n", ru->proc.subframe_rx);
|
AssertFatal(0==pthread_mutex_unlock(&proc->mutex_RU),"");
|
||||||
ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
|
|
||||||
|
// unlock RUs that are waiting for eNB processing to be completed
|
||||||
|
LOG_I(PHY,"RU %d wakeup eNB top for for subframe %d\n", ru->idx,ru->proc.subframe_rx);
|
||||||
|
ru->eNB_top(eNB_list[0],proc->frame_rx,proc->subframe_rx,string);
|
||||||
|
|
||||||
|
AssertFatal(0==pthread_mutex_lock(&ruproc->mutex_eNBs),"");
|
||||||
|
LOG_I(PHY,"RU %d sending signal to unlock waiting ru_threads\n", ru->idx);
|
||||||
|
AssertFatal(0==pthread_cond_broadcast(&ruproc->cond_eNBs),"");
|
||||||
|
if (ruproc->instance_cnt_eNBs==-1) ruproc->instance_cnt_eNBs++;
|
||||||
|
AssertFatal(0==pthread_mutex_unlock(&ruproc->mutex_eNBs),"");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AssertFatal(0==pthread_mutex_unlock(&proc->mutex_RU),"");
|
||||||
|
// pthread_mutex_unlock(&proc->mutex_RU);
|
||||||
|
// LOG_D(PHY,"wakeup eNB top for for subframe %d\n", ru->proc.subframe_rx);
|
||||||
|
// ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
|
||||||
|
|
||||||
}
|
}
|
||||||
else { // multiple eNB case for later
|
else { // multiple eNB case for later
|
||||||
|
|
||||||
@@ -1823,7 +1845,7 @@ static void* ru_thread( void* param ) {
|
|||||||
int subframe =9;
|
int subframe =9;
|
||||||
int frame =1023;
|
int frame =1023;
|
||||||
int resynch_done = 0;
|
int resynch_done = 0;
|
||||||
|
char strname[30];
|
||||||
|
|
||||||
|
|
||||||
// set default return value
|
// set default return value
|
||||||
@@ -1946,11 +1968,16 @@ static void* ru_thread( void* param ) {
|
|||||||
if (ru->feprx) ru->feprx(ru);
|
if (ru->feprx) ru->feprx(ru);
|
||||||
|
|
||||||
// wakeup all eNB processes waiting for this RU
|
// wakeup all eNB processes waiting for this RU
|
||||||
|
pthread_mutex_lock(&proc->mutex_eNBs);
|
||||||
|
if (proc->instance_cnt_eNBs==0) proc->instance_cnt_eNBs--;
|
||||||
|
pthread_mutex_unlock(&proc->mutex_eNBs);
|
||||||
if (ru->num_eNB>0) wakeup_eNBs(ru);
|
if (ru->num_eNB>0) wakeup_eNBs(ru);
|
||||||
|
|
||||||
|
LOG_I(PHY,"RU %d: Waiting for eNB to complete\n",ru->idx);
|
||||||
// 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");
|
sprintf(strname,"ru_thread %d (condeNBs)",ru->idx);
|
||||||
|
wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,strname);
|
||||||
|
LOG_I(PHY,"RU %d: continuing\n",ru->idx);
|
||||||
|
|
||||||
// do TX front-end processing if needed (precoding and/or IDFTs)
|
// do TX front-end processing if needed (precoding and/or IDFTs)
|
||||||
if (ru->feptx_prec) ru->feptx_prec(ru);
|
if (ru->feptx_prec) ru->feptx_prec(ru);
|
||||||
@@ -2135,6 +2162,7 @@ void init_RU_proc(RU_t *ru) {
|
|||||||
proc->instance_cnt_FH = -1;
|
proc->instance_cnt_FH = -1;
|
||||||
proc->instance_cnt_asynch_rxtx = -1;
|
proc->instance_cnt_asynch_rxtx = -1;
|
||||||
proc->instance_cnt_ru = -1;
|
proc->instance_cnt_ru = -1;
|
||||||
|
proc->instance_cnt_eNBs = -1;
|
||||||
proc->first_rx = 1;
|
proc->first_rx = 1;
|
||||||
proc->first_tx = 1;
|
proc->first_tx = 1;
|
||||||
proc->frame_offset = 0;
|
proc->frame_offset = 0;
|
||||||
|
|||||||
@@ -1,34 +1,39 @@
|
|||||||
[*]
|
[*]
|
||||||
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
|
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
|
||||||
[*] Sat Aug 6 15:00:27 2016
|
[*] Fri May 4 13:17:37 2018
|
||||||
[*]
|
[*]
|
||||||
[dumpfile] "/tmp/openair_dump_eNB.vcd"
|
[dumpfile] "/tmp/openair_dump_eNB.vcd"
|
||||||
[dumpfile_mtime] "Sat Aug 6 14:59:21 2016"
|
[dumpfile_mtime] "Fri May 4 13:12:37 2018"
|
||||||
[dumpfile_size] 991809002
|
[dumpfile_size] 90116003
|
||||||
[savefile] "/home/fourmi/openairinterface5g/targets/RT/USER/rcc_if4.gtkw"
|
[savefile] "/home/massive/openairinterface5g/targets/RT/USER/rcc_if4.gtkw"
|
||||||
[timestart] 0
|
[timestart] 15824630000
|
||||||
[size] 1301 716
|
[size] 1405 882
|
||||||
[pos] 309 0
|
[pos] -5 -272
|
||||||
*-19.793451 7382528436 -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.793451 7382528436 -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] 284
|
||||||
[signals_width] 262
|
[signals_width] 262
|
||||||
[sst_expanded] 1
|
[sst_expanded] 1
|
||||||
[sst_vpaned_height] 294
|
[sst_vpaned_height] 383
|
||||||
@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.recv_if4
|
functions.recv_if4(RU0)
|
||||||
functions.send_if4
|
functions.recv_if4(RU1)
|
||||||
|
functions.send_if4(RU0)
|
||||||
|
functions.send_if4(RU1)
|
||||||
functions.eNB_thread_rxtx0
|
functions.eNB_thread_rxtx0
|
||||||
@24
|
@24
|
||||||
|
variables.subframe_number_RX0_RU[63:0]
|
||||||
|
@25
|
||||||
|
variables.frame_number_RX0_RU[63:0]
|
||||||
|
@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
|
@28
|
||||||
functions.phy_procedures_eNb_tx0
|
functions.phy_procedures_eNb_tx0
|
||||||
functions.phy_procedures_eNb_rx_common0
|
|
||||||
functions.phy_procedures_eNb_rx_uespec0
|
functions.phy_procedures_eNb_rx_uespec0
|
||||||
functions.eNB_thread_rxtx1
|
functions.eNB_thread_rxtx1
|
||||||
@24
|
@24
|
||||||
@@ -36,13 +41,10 @@ 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]
|
||||||
@29
|
|
||||||
functions.phy_procedures_eNb_tx1
|
|
||||||
@28
|
@28
|
||||||
functions.phy_procedures_eNb_rx_common1
|
functions.phy_procedures_eNb_tx1
|
||||||
functions.phy_procedures_eNb_rx_uespec1
|
functions.phy_procedures_eNb_rx_uespec1
|
||||||
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]
|
||||||
|
|||||||
Reference in New Issue
Block a user