Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
c5582c4c
Commit
c5582c4c
authored
May 09, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
removal of EXPRESSMIMO #ifdef's in lte-ue. move UE-specific code from lte-softmodem.c to lte-ue.c
parent
17c99ad1
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
96 additions
and
1570 deletions
+96
-1570
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+0
-13
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+11
-43
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+85
-584
targets/RT/USER/sched_dlsch.c
targets/RT/USER/sched_dlsch.c
+0
-354
targets/RT/USER/sched_rx_pdsch.c
targets/RT/USER/sched_rx_pdsch.c
+0
-321
targets/RT/USER/sched_ulsch.c
targets/RT/USER/sched_ulsch.c
+0
-255
No files found.
cmake_targets/CMakeLists.txt
View file @
c5582c4c
...
@@ -259,15 +259,6 @@ if (${ENABLE_ITTI})
...
@@ -259,15 +259,6 @@ if (${ENABLE_ITTI})
endif
(
${
ENABLE_ITTI
}
)
endif
(
${
ENABLE_ITTI
}
)
add_boolean_option
(
RTAI False
"Use RTAI"
)
add_boolean_option
(
RTAI False
"Use RTAI"
)
if
(
${
RTAI
}
)
set
(
LOWLATENCY False
)
set
(
CPU_AFFINITY False
)
add_definitions
(
"-DENABLE_RTAI_CLOCK"
)
add_definitions
(
"-DCONFIG_RTAI_LXRT_INLINE"
)
include_directories
(
"/usr/realtime/include"
)
include_directories
(
"/usr/realtime/include/asm"
)
set
(
RTAI_SOURCE sched_dlsch.c sched_rx_pdsch.c rt_wrapper.c vcd_signal_dumper.c log.c
)
endif
(
${
RTAI
}
)
#############################
#############################
# ASN.1 grammar C code generation & dependancies
# ASN.1 grammar C code generation & dependancies
...
@@ -1574,8 +1565,6 @@ add_executable(lte-softmodem
...
@@ -1574,8 +1565,6 @@ add_executable(lte-softmodem
${
rrc_h
}
${
rrc_h
}
${
s1ap_h
}
${
s1ap_h
}
${
OPENAIR_BIN_DIR
}
/messages_xml.h
${
OPENAIR_BIN_DIR
}
/messages_xml.h
${
OPENAIR_TARGETS
}
/RT/USER/sched_dlsch.c
${
OPENAIR_TARGETS
}
/RT/USER/sched_rx_pdsch.c
${
OPENAIR_TARGETS
}
/RT/USER/rt_wrapper.c
${
OPENAIR_TARGETS
}
/RT/USER/rt_wrapper.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-ue.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-ue.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-softmodem.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-softmodem.c
...
@@ -1611,8 +1600,6 @@ add_executable(lte-softmodem-nos1
...
@@ -1611,8 +1600,6 @@ add_executable(lte-softmodem-nos1
${
rrc_h
}
${
rrc_h
}
${
s1ap_h
}
${
s1ap_h
}
${
OPENAIR_BIN_DIR
}
/messages_xml.h
${
OPENAIR_BIN_DIR
}
/messages_xml.h
${
OPENAIR_TARGETS
}
/RT/USER/sched_dlsch.c
${
OPENAIR_TARGETS
}
/RT/USER/sched_rx_pdsch.c
${
OPENAIR_TARGETS
}
/RT/USER/rt_wrapper.c
${
OPENAIR_TARGETS
}
/RT/USER/rt_wrapper.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-ue.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-ue.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-softmodem.c
${
OPENAIR_TARGETS
}
/RT/USER/lte-softmodem.c
...
...
targets/RT/USER/lte-softmodem.c
View file @
c5582c4c
...
@@ -113,12 +113,18 @@ unsigned short config_frames[4] = {2,9,11,13};
...
@@ -113,12 +113,18 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "stats.h"
#include "stats.h"
#endif
#endif
// In lte-enb.c
int
setup_eNB_buffers
(
PHY_VARS_eNB
**
phy_vars_eNB
,
openair0_config_t
*
openair0_cfg
,
openair0_rf_map
rf_map
[
MAX_NUM_CCs
]);
int
setup_eNB_buffers
(
PHY_VARS_eNB
**
phy_vars_eNB
,
openair0_config_t
*
openair0_cfg
,
openair0_rf_map
rf_map
[
MAX_NUM_CCs
]);
int
setup_ue_buffers
(
PHY_VARS_UE
**
phy_vars_ue
,
openair0_config_t
*
openair0_cfg
,
openair0_rf_map
rf_map
[
MAX_NUM_CCs
]);
extern
void
init_eNB
(
void
);
extern
void
init_eNB
(
void
);
extern
void
stop_eNB
(
void
);
extern
void
stop_eNB
(
void
);
extern
void
kill_eNB_proc
(
void
);
// In lte-ue.c
int
setup_ue_buffers
(
PHY_VARS_UE
**
phy_vars_ue
,
openair0_config_t
*
openair0_cfg
,
openair0_rf_map
rf_map
[
MAX_NUM_CCs
]);
void
fill_ue_band_info
(
void
);
void
fill_ue_band_info
(
void
);
extern
void
init_UE
(
void
);
#ifdef XFORMS
#ifdef XFORMS
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
// at eNB 0, an UL scope for every UE
// at eNB 0, an UL scope for every UE
...
@@ -130,9 +136,6 @@ unsigned char scope_enb_num_ue = 2;
...
@@ -130,9 +136,6 @@ unsigned char scope_enb_num_ue = 2;
#endif //XFORMS
#endif //XFORMS
pthread_t
main_ue_thread
;
pthread_attr_t
attr_UE_thread
;
...
@@ -144,7 +147,6 @@ int sync_var=-1; //!< protected by mutex \ref sync_mutex.
...
@@ -144,7 +147,6 @@ int sync_var=-1; //!< protected by mutex \ref sync_mutex.
struct
sched_param
sched_param_UE_thread
;
#ifdef XFORMS
#ifdef XFORMS
...
@@ -284,9 +286,8 @@ openair0_config_t openair0_cfg[MAX_CARDS];
...
@@ -284,9 +286,8 @@ openair0_config_t openair0_cfg[MAX_CARDS];
double
cpuf
;
double
cpuf
;
char
uecap_xer
[
1024
],
uecap_xer_in
=
0
;
char
uecap_xer
[
1024
],
uecap_xer_in
=
0
;
extern
void
*
UE_thread
(
void
*
arg
);
extern
void
init_UE_threads
(
void
);
extern
void
kill_eNB_proc
(
void
);
/*---------------------BMC: timespec helpers -----------------------------*/
/*---------------------BMC: timespec helpers -----------------------------*/
...
@@ -1120,7 +1121,6 @@ int main( int argc, char **argv )
...
@@ -1120,7 +1121,6 @@ int main( int argc, char **argv )
uint16_t
Nid_cell
=
0
;
uint16_t
Nid_cell
=
0
;
uint8_t
cooperation_flag
=
0
,
abstraction_flag
=
0
;
uint8_t
cooperation_flag
=
0
,
abstraction_flag
=
0
;
uint8_t
beta_ACK
=
0
,
beta_RI
=
0
,
beta_CQI
=
2
;
uint8_t
beta_ACK
=
0
,
beta_RI
=
0
,
beta_CQI
=
2
;
int
error_code
;
#if defined (XFORMS)
#if defined (XFORMS)
int
ret
;
int
ret
;
...
@@ -1752,43 +1752,11 @@ int main( int argc, char **argv )
...
@@ -1752,43 +1752,11 @@ int main( int argc, char **argv )
rt_sleep_ns
(
10
*
100000000ULL
);
rt_sleep_ns
(
10
*
100000000ULL
);
pthread_attr_init
(
&
attr_UE_thread
);
pthread_attr_setstacksize
(
&
attr_UE_thread
,
8192
);
//5*PTHREAD_STACK_MIN);
#ifndef LOWLATENCY
sched_param_UE_thread
.
sched_priority
=
sched_get_priority_max
(
SCHED_FIFO
);
pthread_attr_setschedparam
(
&
attr_UE_thread
,
&
sched_param_UE_thread
);
#endif
// start the main thread
// start the main thread
if
(
UE_flag
==
1
)
{
if
(
UE_flag
==
1
)
init_UE
();
printf
(
"Intializing UE Threads ...
\n
"
);
else
init_eNB
();
init_UE_threads
();
sleep
(
1
);
error_code
=
pthread_create
(
&
main_ue_thread
,
&
attr_UE_thread
,
UE_thread
,
NULL
);
if
(
error_code
!=
0
)
{
LOG_D
(
HW
,
"[lte-softmodem.c] Could not allocate UE_thread, error %d
\n
"
,
error_code
);
return
(
error_code
);
}
else
{
LOG_D
(
HW
,
"[lte-softmodem.c] Allocate UE_thread successful
\n
"
);
pthread_setname_np
(
main_ue_thread
,
"main UE"
);
}
printf
(
"UE threads created
\n
"
);
#ifdef USE_MME
while
(
start_UE
==
0
)
{
sleep
(
1
);
}
#endif
}
else
{
init_eNB
();
}
// Sleep to allow all threads to setup
// Sleep to allow all threads to setup
sleep
(
1
);
sleep
(
1
);
...
...
targets/RT/USER/lte-ue.c
View file @
c5582c4c
This diff is collapsed.
Click to expand it.
targets/RT/USER/sched_dlsch.c
deleted
100644 → 0
View file @
17c99ad1
This diff is collapsed.
Click to expand it.
targets/RT/USER/sched_rx_pdsch.c
deleted
100644 → 0
View file @
17c99ad1
This diff is collapsed.
Click to expand it.
targets/RT/USER/sched_ulsch.c
deleted
100644 → 0
View file @
17c99ad1
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
/*! \file sched_ulsch.c
* \brief ULSCH decoding thread (RTAI)
* \author R. Knopp, F. Kaltenberger
* \date 2011
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
* \note
* \warning
*/
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include "rt_wrapper.h"
#include <sys/mman.h>
#include "PHY/types.h"
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "SCHED/defs.h"
#include "MAC_INTERFACE/extern.h"
#ifdef CBMIMO1
#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
#endif // CBMIMO1
#define DEBUG_PHY
/// Mutex for instance count on ulsch scheduling
pthread_mutex_t
ulsch_mutex
[
NUMBER_OF_UE_MAX
];
/// Condition variable for ulsch thread
pthread_cond_t
ulsch_cond
[
NUMBER_OF_UE_MAX
];
pthread_t
ulsch_threads
[
NUMBER_OF_UE_MAX
];
pthread_attr_t
attr_ulsch_threads
;
// activity indicators for harq_pid's
int
ulsch_instance_cnt
[
NUMBER_OF_UE_MAX
];
// process ids for cpu
int
ulsch_cpuid
[
NUMBER_OF_UE_MAX
];
// subframe number for each harq_pid (needed to store ack in right place for UL)
int
ulsch_subframe
[
NUMBER_OF_UE_MAX
];
extern
int
oai_exit
;
/*
extern int ulsch_errors;
extern int ulsch_received;
extern int ulsch_errors_last;
extern int ulsch_received_last;
extern int ulsch_fer;
extern int current_ulsch_cqi;
*/
/** ULSCH Decoding Thread */
static
void
*
ulsch_thread
(
void
*
param
)
{
//unsigned long cpuid;
unsigned
int
ulsch_thread_index
=
(
unsigned
int
)
param
;
RTIME
time_in
,
time_out
;
#ifdef RTAI
RT_TASK
*
task
;
char
ulsch_thread_name
[
64
];
#endif
int
eNB_id
=
0
,
UE_id
=
0
;
PHY_VARS_eNB
*
phy_vars_eNB
=
PHY_vars_eNB_g
[
eNB_id
];
if
((
ulsch_thread_index
<
0
)
||
(
ulsch_thread_index
>
NUMBER_OF_UE_MAX
))
{
LOG_E
(
PHY
,
"[SCHED][ULSCH] Illegal ulsch_thread_index %d!!!!
\n
"
,
ulsch_thread_index
);
return
0
;
}
#ifdef RTAI
sprintf
(
ulsch_thread_name
,
"ULSCH_THREAD%d"
,
ulsch_thread_index
);
LOG_I
(
PHY
,
"[SCHED][ULSCH] starting ulsch_thread %s for process %d
\n
"
,
ulsch_thread_name
,
ulsch_thread_index
);
task
=
rt_task_init_schmod
(
nam2num
(
ulsch_thread_name
),
0
,
0
,
0
,
SCHED_FIFO
,
0xF
);
if
(
task
==
NULL
)
{
LOG_E
(
PHY
,
"[SCHED][ULSCH] Problem starting ulsch_thread_index %d!!!!
\n
"
,
ulsch_thread_index
);
return
0
;
}
else
{
LOG_I
(
PHY
,
"[SCHED][ULSCH] ulsch_thread for process %d started with id %p
\n
"
,
ulsch_thread_index
,
task
);
}
#endif
mlockall
(
MCL_CURRENT
|
MCL_FUTURE
);
//rt_set_runnable_on_cpuid(task,1);
//cpuid = rtai_cpuid();
#ifdef HARD_RT
rt_make_hard_real_time
();
#endif
//ulsch_cpuid[ulsch_thread_index] = cpuid;
while
(
!
oai_exit
)
{
if
(
pthread_mutex_lock
(
&
ulsch_mutex
[
ulsch_thread_index
])
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][ULSCH] error locking mutex.
\n
"
);
}
else
{
while
(
ulsch_instance_cnt
[
ulsch_thread_index
]
<
0
)
{
pthread_cond_wait
(
&
ulsch_cond
[
ulsch_thread_index
],
&
ulsch_mutex
[
ulsch_thread_index
]);
}
if
(
pthread_mutex_unlock
(
&
ulsch_mutex
[
ulsch_thread_index
])
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][ULSCH] error unlocking mutex.
\n
"
);
}
}
if
(
oai_exit
)
break
;
LOG_D
(
PHY
,
"[SCHED][ULSCH] Frame %d: Calling ulsch_decoding with ulsch_thread_index = %d
\n
"
,
phy_vars_eNB
->
proc
[
0
].
frame_tx
,
ulsch_thread_index
);
time_in
=
rt_get_time_ns
();
ulsch_decoding_procedures
(
ulsch_subframe
[
ulsch_thread_index
]
<<
1
,
ulsch_thread_index
,
phy_vars_eNB
,
0
);
time_out
=
rt_get_time_ns
();
if
(
pthread_mutex_lock
(
&
ulsch_mutex
[
ulsch_thread_index
])
!=
0
)
{
msg
(
"[openair][SCHED][ULSCH] error locking mutex.
\n
"
);
}
else
{
ulsch_instance_cnt
[
ulsch_thread_index
]
--
;
if
(
pthread_mutex_unlock
(
&
ulsch_mutex
[
ulsch_thread_index
])
!=
0
)
{
msg
(
"[openair][SCHED][ULSCH] error unlocking mutex.
\n
"
);
}
}
}
#ifdef HARD_RT
rt_make_soft_real_time
();
#endif
msg
(
"[openair][SCHED][ULSCH] ULSCH thread %d exiting
\n
"
,
ulsch_thread_index
);
return
0
;
}
int
init_ulsch_threads
(
void
)
{
int
error_code
,
return_code
=
0
;
struct
sched_param
p
;
int
ulsch_thread_index
;
// later loop on all harq_pids, do 0 for now
for
(
ulsch_thread_index
=
0
;
ulsch_thread_index
<
NUMBER_OF_UE_MAX
;
ulsch_thread_index
++
)
{
pthread_mutex_init
(
&
ulsch_mutex
[
ulsch_thread_index
],
NULL
);
pthread_cond_init
(
&
ulsch_cond
[
ulsch_thread_index
],
NULL
);
pthread_attr_init
(
&
attr_ulsch_threads
);
pthread_attr_setstacksize
(
&
attr_ulsch_threads
,
OPENAIR_THREAD_STACK_SIZE
);
//attr_ulsch_threads.priority = 1;
p
.
sched_priority
=
OPENAIR_THREAD_PRIORITY
;
pthread_attr_setschedparam
(
&
attr_ulsch_threads
,
&
p
);
#ifndef RTAI_ISNT_POSIX
pthread_attr_setschedpolicy
(
&
attr_ulsch_threads
,
SCHED_FIFO
);
#endif
ulsch_instance_cnt
[
ulsch_thread_index
]
=
-
1
;
rt_printk
(
"[openair][SCHED][ULSCH][INIT] Allocating ULSCH thread for ulsch_thread_index %d
\n
"
,
ulsch_thread_index
);
error_code
=
pthread_create
(
&
ulsch_threads
[
ulsch_thread_index
],
&
attr_ulsch_threads
,
ulsch_thread
,
(
void
*
)
ulsch_thread_index
);
if
(
error_code
!=
0
)
{
rt_printk
(
"[openair][SCHED][ULSCH][INIT] Could not allocate ulsch_thread %d, error %d
\n
"
,
ulsch_thread_index
,
error_code
);
return_code
+=
error_code
;
//return(error_code);
}
else
{
rt_printk
(
"[openair][SCHED][ULSCH][INIT] Allocate ulsch_thread %d successful
\n
"
,
ulsch_thread_index
);
//return(0);
}
}
return
(
return_code
);
}
void
cleanup_ulsch_threads
(
void
)
{
int
ulsch_thread_index
;
for
(
ulsch_thread_index
=
0
;
ulsch_thread_index
<
NUMBER_OF_UE_MAX
;
ulsch_thread_index
++
)
{
// pthread_exit(&ulsch_threads[ulsch_thread_index]);
rt_printk
(
"[openair][SCHED][ULSCH] Scheduling ulsch_thread %d to exit
\n
"
,
ulsch_thread_index
);
ulsch_instance_cnt
[
ulsch_thread_index
]
=
0
;
if
(
pthread_cond_signal
(
&
ulsch_cond
[
ulsch_thread_index
])
!=
0
)
rt_printk
(
"[openair][SCHED][ULSCH] ERROR pthread_cond_signal
\n
"
);
else
rt_printk
(
"[openair][SCHED][ULSCH] Signalled ulsch_thread %d to exit
\n
"
,
ulsch_thread_index
);
rt_printk
(
"[openair][SCHED][ULSCH] Exiting ...
\n
"
);
pthread_cond_destroy
(
&
ulsch_cond
[
ulsch_thread_index
]);
pthread_mutex_destroy
(
&
ulsch_mutex
[
ulsch_thread_index
]);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment