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.)
This commit is contained in:
@@ -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,8 +1660,9 @@ 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];
|
||||
|
||||
pthread_attr_init (&UE->proc.attr_ue);
|
||||
@@ -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" );
|
||||
|
||||
Reference in New Issue
Block a user