Commit 393fe865 authored by Cedric Roux's avatar Cedric Roux

fix: pass UE parameter to UE threads

oaisim is not functional with several UEs.
This fixes one issue. (It's still not functional for other reasons.)
parent 157707b0
......@@ -150,6 +150,7 @@ void *nas_ue_task(void *args_p)
msg_name = ITTI_MSG_NAME (msg_p);
instance = ITTI_MSG_INSTANCE (msg_p);
Mod_id = instance - NB_eNB_INST;
if (instance == INSTANCE_DEFAULT) abort();
nas_user_t *user = &users->item[Mod_id];
switch (ITTI_MSG_ID(msg_p)) {
......
......@@ -186,7 +186,7 @@ void init_UE(int nb_inst) {
}
UE->rfdevice.host_type = BBU_HOST;
// UE->rfdevice.type = NONE_DEV;
error_code = pthread_create(&UE->proc.pthread_ue, &UE->proc.attr_ue, UE_thread, NULL);
error_code = pthread_create(&UE->proc.pthread_ue, &UE->proc.attr_ue, UE_thread, UE);
if (error_code!= 0) {
LOG_D(HW,"[lte-softmodem.c] Could not allocate UE_thread, error %d\n",error_code);
......@@ -599,6 +599,14 @@ static void *UE_thread_synch(void *arg)
}
/* this structure is used to pass both UE phy vars and
* proc to the function UE_thread_rxn_txnp4
*/
struct rx_tx_thread_data {
PHY_VARS_UE *UE;
UE_rxtx_proc_t *proc;
};
/*!
* \brief This is the UE thread for RX subframe n and TX subframe n+4.
......@@ -611,9 +619,10 @@ static void *UE_thread_synch(void *arg)
static void *UE_thread_rxn_txnp4(void *arg)
{
static int UE_thread_rxtx_retval;
UE_rxtx_proc_t *proc = (UE_rxtx_proc_t *)arg;
struct rx_tx_thread_data *rtd = arg;
UE_rxtx_proc_t *proc = rtd->proc;
PHY_VARS_UE *UE = rtd->UE;
int ret;
PHY_VARS_UE *UE=PHY_vars_UE_g[0][proc->CC_id];
proc->instance_cnt_rxtx=-1;
......@@ -849,6 +858,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
}
// thread finished
free(arg);
return &UE_thread_rxtx_retval;
}
......@@ -873,7 +883,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
void *UE_thread(void *arg) {
static int UE_thread_retval;
PHY_VARS_UE *UE = PHY_vars_UE_g[0][0];
PHY_VARS_UE *UE = arg; //PHY_vars_UE_g[0][0];
// int tx_enabled = 0;
uint32_t rxs=0,txs=0;
int dummy_rx[UE->frame_parms.nb_antennas_rx][UE->frame_parms.samples_per_tti] __attribute__((aligned(32)));
......@@ -936,7 +946,7 @@ void *UE_thread(void *arg) {
#ifdef NAS_UE
message_p = itti_alloc_new_message(TASK_NAS_UE, INITIALIZE_MESSAGE);
itti_send_msg_to_task (TASK_NAS_UE, INSTANCE_DEFAULT, message_p);
itti_send_msg_to_task (TASK_NAS_UE, UE->Mod_id + NB_eNB_INST, message_p);
#endif
while (!oai_exit) {
......@@ -1650,6 +1660,7 @@ void *UE_thread_old(void *arg)
*/
void init_UE_threads(int inst)
{
struct rx_tx_thread_data *rtd;
PHY_VARS_UE *UE;
UE = PHY_vars_UE_g[inst][0];
......@@ -1674,9 +1685,17 @@ void init_UE_threads(int inst)
pthread_cond_init(&UE->proc.proc_rxtx[0].cond_rxtx,NULL);
pthread_cond_init(&UE->proc.proc_rxtx[1].cond_rxtx,NULL);
pthread_cond_init(&UE->proc.cond_synch,NULL);
pthread_create(&UE->proc.proc_rxtx[0].pthread_rxtx,NULL,UE_thread_rxn_txnp4,(void*)&UE->proc.proc_rxtx[0]);
rtd = calloc(1, sizeof(struct rx_tx_thread_data));
if (rtd == NULL) abort();
rtd->UE = PHY_vars_UE_g[inst][UE->proc.proc_rxtx[0].CC_id];
rtd->proc = &UE->proc.proc_rxtx[0];
pthread_create(&UE->proc.proc_rxtx[0].pthread_rxtx,NULL,UE_thread_rxn_txnp4,rtd);//(void*)&UE->proc.proc_rxtx[0]);
pthread_setname_np( UE->proc.proc_rxtx[0].pthread_rxtx, "rxn_txnp4_even" );
pthread_create(&UE->proc.proc_rxtx[1].pthread_rxtx,NULL,UE_thread_rxn_txnp4,(void*)&UE->proc.proc_rxtx[1]);
rtd = calloc(1, sizeof(struct rx_tx_thread_data));
if (rtd == NULL) abort();
rtd->UE = PHY_vars_UE_g[inst][UE->proc.proc_rxtx[1].CC_id];
rtd->proc = &UE->proc.proc_rxtx[1];
pthread_create(&UE->proc.proc_rxtx[1].pthread_rxtx,NULL,UE_thread_rxn_txnp4,rtd);//(void*)&UE->proc.proc_rxtx[1]);
pthread_setname_np( UE->proc.proc_rxtx[1].pthread_rxtx, "rxn_txnp4_odd" );
pthread_create(&UE->proc.pthread_synch,NULL,UE_thread_synch,(void*)UE);
pthread_setname_np( UE->proc.pthread_synch, "UE_thread_synch" );
......
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