NFAPI_TRACE(NFAPI_TRACE_INFO,"[PNF] %s(frame:%u subframe:%u) sfn_sf:%u sfn_sf(DEC):%u - PROBLEM with pnf_p7_subframe_ind()\n",__FUNCTION__,frame,subframe,sfn_sf,NFAPI_SFNSF2DEC(sfn_sf));
NFAPI_TRACE(NFAPI_TRACE_INFO,"[PNF] %s(frame:%u subframe:%u) SFN/SF(TX):%u - PROBLEM with pnf_p7_subframe_ind()\n",__FUNCTION__,sfn,sf,sfn_sf_tx,NFAPI_SFNSF2DEC(sfn_sf_tx));
LOG_D(PHY,"UL_CONFIG for the future future_subframe:%d PDUs:%d\n",future_subframe,RC.mac[0]->UL_req_tmp[CC_id][future_subframe].ul_config_request_body.number_of_pdus);
ul_req->sfn_sf=sfnsf_add_subframe(RA_template->Msg3_frame,RA_template->Msg3_subframe,4);// this is for +4 frame, but nFAPI already running at +4 (because 4 is latency of Tx)
// Note need to keep sending this across reptitions!!!! Not really for PUCCH, to ask small-cell forum, we'll see for the other messages, maybe parameters change across repetitions and FAPI has to provide for that
AssertFatal(UE_id>=0,"UE_id cannot be found, impossible\n");
AssertFatal(UE_list!=NULL,"UE_list is null\n");
AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null\n",rntiP);
AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null CC_idP:%d UE_id:%d UE_list:rnti:%04x\n",rntiP,CC_idP,UE_id,UE_list->UE_template[CC_idP][UE_id].rnti);
LOG_D(PHY,"%s:%s() %u/%u Before wakeup_prach_eNB() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
//LOG_D(PHY,"%s:%s() %u/%u Before wakeup_prach_eNB() proc->instance_cnt_rxtx:%d\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
LOG_D(PHY,"%s:%s() %u/%u Before wakeup_prach_eNB_br() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
//LOG_D(PHY,"%s:%s() %u/%u Before wakeup_prach_eNB_br() proc->instance_cnt_rxtx:%d\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
LOG_D(PHY,"%s:%s() %u/%u Before phy_procedures_eNB_uespec_RX() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
phy_procedures_eNB_uespec_RX(eNB,proc,no_relay);
LOG_D(PHY,"%s:%s() %u/%u Before UL_INFO_mutex proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
pthread_mutex_lock(&eNB->UL_INFO_mutex);
LOG_D(PHY,"%s:%s() %u/%u After UL_INFO_mutex proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
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;
LOG_D(PHY,"%s:%s() %u/%u Before UL_ind proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
eNB->if_inst->UL_indication(&eNB->UL_INFO);
LOG_D(PHY,"%s:%s() %u/%u After UL_ind proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
pthread_mutex_unlock(&eNB->UL_INFO_mutex);
LOG_D(PHY,"%s:%s() %u/%u After UL_INFO_mutex unlock proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
// *****************************************
// TX processing for subframe n+4
// run PHY TX procedures the one after the other for all CCs to avoid race conditions
LOG_D(PHY,"%s:%s() %u/%u Before phy_procedures_eNB_TX() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
phy_procedures_eNB_TX(eNB,proc,no_relay,NULL,1);
LOG_D(PHY,"%s:%s() %u/%u After phy_procedures_eNB_TX() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
LOG_D(PHY,"%s:%s() %u/%u Before release_thread() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
LOG_D(PHY,"%s:%s() %u/%u AFTER release_thread() proc->instance_cnt_rxtx:%d\n",thread_name,__FUNCTION__,proc->frame_tx,proc->subframe_tx,proc->instance_cnt_rxtx);
@@ -354,6 +371,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
}
}
if(proc->RU_mask!=(1<<eNB->num_RU)-1){// not all RUs have provided their information so return
LOG_E(PHY,"Not all RUs have provided their info\n");
pthread_mutex_unlock(&proc->mutex_RU);
return(0);
}
...
...
@@ -389,7 +407,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
}
++proc_rxtx->instance_cnt_rxtx;
//LOG_D(PHY,"%s() %u/%u Just incremented proc->instance_cnt_rxtx:%d\n", __FUNCTION__, proc_rxtx->frame_tx, proc_rxtx->subframe_tx, proc_rxtx->instance_cnt_rxtx);
LOG_D(PHY,"%s() %u/%u Just incremented proc->instance_cnt_rxtx:%d\n",__FUNCTION__,proc_rxtx->frame_tx,proc_rxtx->subframe_tx,proc_rxtx->instance_cnt_rxtx);
// We have just received and processed the common part of a subframe, say n.
// TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired
...
...
@@ -403,6 +421,8 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {