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
279b7da5
Commit
279b7da5
authored
Oct 27, 2017
by
Wang Tsu-Han
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added thread for TX streaming
parent
1e8a8865
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
162 additions
and
46 deletions
+162
-46
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+2
-0
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+6
-2
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+13
-1
openair1/PHY/defs.h
openair1/PHY/defs.h
+7
-1
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+4
-2
openair2/LAYER2/MAC/eNB_scheduler_phytest.c
openair2/LAYER2/MAC/eNB_scheduler_phytest.c
+2
-2
targets/RT/USER/eNB_usrp.gtkw
targets/RT/USER/eNB_usrp.gtkw
+32
-12
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+7
-1
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+84
-21
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+4
-3
targets/RT/USER/lte-softmodem.h
targets/RT/USER/lte-softmodem.h
+1
-1
No files found.
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
View file @
279b7da5
...
...
@@ -575,6 +575,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
int
encoding_return
=
0
;
unsigned
int
L
,
C
,
B
;
B
=
dlsch
->
harq_processes
[
dlsch
->
harq_ids
[
subframe
]]
->
B
;
//printf("total bit length is %d\n",B);///////////*******
if
(
B
<=
6144
)
{
L
=
0
;
...
...
@@ -601,6 +602,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB,
rm_stats
,
te_stats
,
i_stats
);
//printf("having more then 5 segmentation\n");///////////*******
}
else
{
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
279b7da5
...
...
@@ -121,7 +121,7 @@ int32_t dlsch_encoding(PHY_VARS_eNB *eNB,
time_stats_t
*
rm_stats
,
time_stats_t
*
te_stats
,
time_stats_t
*
i_stats
);
int32_t
dlsch_encoding_all
(
PHY_VARS_eNB
*
eNB
,
uint8_t
*
a
,
uint8_t
num_pdcch_symbols
,
...
...
@@ -132,7 +132,6 @@ int32_t dlsch_encoding_all(PHY_VARS_eNB *eNB,
time_stats_t
*
te_stats
,
time_stats_t
*
i_stats
);
int32_t
dlsch_encoding_SIC
(
PHY_VARS_UE
*
ue
,
uint8_t
*
a
,
uint8_t
num_pdcch_symbols
,
...
...
@@ -1900,6 +1899,11 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
uint8_t
Nbundled
,
uint8_t
llr8_flag
);
int
ulsch_decoding_data_all
(
PHY_VARS_eNB
*
eNB
,
int
UE_id
,
int
harq_pid
,
int
llr8_flag
);
/*!
\brief Decoding of ULSCH data component from 36-212. This one spawns 1 worker thread in parallel,half of the segments in each thread.
@param phy_vars_eNB Pointer to eNB top-level descriptor
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
View file @
279b7da5
...
...
@@ -207,7 +207,19 @@ uint8_t extract_cqi_crc(uint8_t *cqi,uint8_t CQI_LENGTH)
/*int ulsch_decoding_data_all(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
{
int value = 0;
if()
{
value = ulsch_decoding_data_2thread(eNB,UE_id,harq_pid,llr8_flag);
}
else
{
value = ulsch_decoding_data(eNB,UE_id,harq_pid,llr8_flag);
}
return value;
}*/
int
ulsch_decoding_data_2thread0
(
td_params
*
tdp
)
{
...
...
openair1/PHY/defs.h
View file @
279b7da5
...
...
@@ -315,6 +315,7 @@ typedef struct RU_proc_t_s {
/// \brief Instance count for FH processing thread.
/// \internal This variable is protected by \ref mutex_FH.
int
instance_cnt_FH
;
int
instance_cnt_FH1
;
/// \internal This variable is protected by \ref mutex_prach.
int
instance_cnt_prach
;
#ifdef Rel14
...
...
@@ -334,6 +335,7 @@ typedef struct RU_proc_t_s {
int
instance_cnt_feptx
;
/// pthread structure for RU FH processing thread
pthread_t
pthread_FH
;
pthread_t
pthread_FH1
;
/// pthread structure for RU prach processing thread
pthread_t
pthread_prach
;
#ifdef Rel14
...
...
@@ -354,6 +356,7 @@ typedef struct RU_proc_t_s {
int
first_tx
;
/// pthread attributes for RU FH processing thread
pthread_attr_t
attr_FH
;
pthread_attr_t
attr_FH1
;
/// pthread attributes for RU prach
pthread_attr_t
attr_prach
;
#ifdef Rel14
...
...
@@ -370,6 +373,7 @@ typedef struct RU_proc_t_s {
pthread_attr_t
attr_feptx
;
/// scheduling parameters for RU FH thread
struct
sched_param
sched_param_FH
;
struct
sched_param
sched_param_FH1
;
/// scheduling parameters for RU prach thread
struct
sched_param
sched_param_prach
;
#ifdef Rel14
...
...
@@ -382,6 +386,7 @@ typedef struct RU_proc_t_s {
struct
sched_param
sched_param_asynch_rxtx
;
/// condition variable for RU FH thread
pthread_cond_t
cond_FH
;
pthread_cond_t
cond_FH1
;
/// condition variable for RU prach thread
pthread_cond_t
cond_prach
;
#ifdef Rel14
...
...
@@ -400,6 +405,7 @@ typedef struct RU_proc_t_s {
pthread_cond_t
cond_eNBs
;
/// mutex for RU FH
pthread_mutex_t
mutex_FH
;
pthread_mutex_t
mutex_FH1
;
/// mutex for RU prach
pthread_mutex_t
mutex_prach
;
#ifdef Rel14
...
...
@@ -749,7 +755,7 @@ typedef struct RU_t_s{
/// function pointer to wakeup routine in lte-enb.
void
(
*
wakeup_prach_eNB_br
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
/// function pointer to eNB entry routine
void
(
*
eNB_top
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame_rx
,
int
subframe_rx
,
char
*
string
);
void
(
*
eNB_top
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame_rx
,
int
subframe_rx
,
char
*
string
,
struct
RU_t_s
*
ru
);
/// Timing statistics
time_stats_t
ofdm_demod_stats
;
/// Timing statistics (TX)
...
...
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
279b7da5
...
...
@@ -67,6 +67,7 @@
#define DEBUG_eNB_SCHEDULER 1
extern
RAN_CONTEXT_t
RC
;
extern
int
phy_test
;
uint16_t
pdcch_order_table
[
6
]
=
{
31
,
31
,
511
,
2047
,
2047
,
8191
};
...
...
@@ -517,9 +518,10 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
#endif
if
(
RC
.
mac
[
module_idP
]
->
phy_test
==
0
)
{
// This schedules MIB
if
((
subframeP
==
0
)
&&
(
frameP
&
3
)
==
0
)
schedule_mib
(
module_idP
,
frameP
,
subframeP
);
if
((
subframeP
==
0
)
&&
(
frameP
&
3
)
==
0
)
schedule_mib
(
module_idP
,
frameP
,
subframeP
);
if
(
phy_test
==
0
)
{
// This schedules SI for legacy LTE and eMTC starting in subframeP
schedule_SI
(
module_idP
,
frameP
,
subframeP
);
// This schedules Random-Access for legacy LTE and eMTC starting in subframeP
...
...
openair2/LAYER2/MAC/eNB_scheduler_phytest.c
View file @
279b7da5
...
...
@@ -71,7 +71,7 @@ schedule_ue_spec_phy_test(
uint16_t
rnti
=
0x1235
;
uint32_t
rb_alloc
=
0x1FFFFFFF
;
int32_t
tpc
=
1
;
int32_t
mcs
=
16
;
int32_t
mcs
=
28
;
int32_t
cqi
=
15
;
int32_t
ndi
=
subframeP
/
5
;
int32_t
dai
=
0
;
...
...
@@ -94,7 +94,7 @@ schedule_ue_spec_phy_test(
nb_rb
=
conv_nprb
(
0
,
rb_alloc
,
N_RB_DL
);
TBS
=
get_TBS_DL
(
mcs
,
nb_rb
);
LOG_
I
(
PHY
,
"schedule_ue_spec_phy_test: subframe %d: nb_rb=%d, TBS=%d, mcs=%d (rb_alloc=%x, N_RB_DL=%d)
\n
"
,
subframeP
,
nb_rb
,
TBS
,
mcs
,
rb_alloc
,
N_RB_DL
);
LOG_
D
(
PHY
,
"schedule_ue_spec_phy_test: subframe %d: nb_rb=%d, TBS=%d, mcs=%d (rb_alloc=%x, N_RB_DL=%d)
\n
"
,
subframeP
,
nb_rb
,
TBS
,
mcs
,
rb_alloc
,
N_RB_DL
);
dl_config_pdu
=
&
dl_req
->
dl_config_pdu_list
[
dl_req
->
number_pdu
];
memset
((
void
*
)
dl_config_pdu
,
0
,
sizeof
(
nfapi_dl_config_request_pdu_t
));
...
...
targets/RT/USER/eNB_usrp.gtkw
View file @
279b7da5
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*] Tue
Jul 25 20:26:12
2017
[*] Tue
Oct 24 08:41:51
2017
[*]
[dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Tue
Jul 25 20:11:55
2017"
[dumpfile_size]
19201475
[savefile] "/home
/papillon
/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart]
29023604
000
[size] 1
236 578
[pos]
309
0
*-
20.793451 290260621
00 -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
[dumpfile_mtime] "Tue
Oct 24 08:27:56
2017"
[dumpfile_size]
4053651
[savefile] "/home
s/wangts
/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart]
15494750
000
[size] 1
855 1056
[pos]
65 -1
0
*-
19.872988 154974430
00 -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] 386
[signals_width]
26
2
[signals_width]
30
2
[sst_expanded] 1
[sst_vpaned_height]
146
[sst_vpaned_height]
317
@28
functions.trx_read
functions.trx_write
...
...
@@ -25,12 +25,32 @@ functions.eNB_thread_rxtx0
@24
variables.frame_number_RX0_RU[63:0]
variables.subframe_number_RX0_RU[63:0]
@25
variables.frame_number_TX0_RU[63:0]
@24
variables.subframe_number_TX0_RU[63:0]
@28
functions.mac_schedule_dlsch
functions.macxface_eNB_dlsch_ulsch_scheduler
functions.macxface_ue_scheduler
functions.phy_eNB_ofdm_mod_l
functions.phy_eNB_dlsch_scrambling
functions.phy_eNB_dlsch_modulation
functions.phy_eNB_dlsch_scrambling
functions.phy_eNB_beam_precoding
functions.phy_enb_pdcch_tx
functions.phy_enb_prach_rx
@29
functions.phy_procedures_ru_feprx0
@28
functions.phy_procedures_eNb_rx_uespec0
functions.phy_procedures_eNb_rx_uespec1
functions.phy_enb_sfgen
functions.phy_procedures_eNb_tx0
functions.phy_procedures_eNb_tx1
functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1
functions.phy_procedures_ru_feptx_prec0
functions.phy_procedures_ru_feptx_prec1
functions.eNB_thread_rxtx1
functions.phy_enb_sfgen
functions.phy_enb_prach_rx
...
...
targets/RT/USER/lte-enb.c
View file @
279b7da5
...
...
@@ -269,8 +269,9 @@ static void wait_system_ready (char *message, volatile int *start_flag) {
void
eNB_top
(
PHY_VARS_eNB
*
eNB
,
int
frame_rx
,
int
subframe_rx
,
char
*
string
)
void
eNB_top
(
PHY_VARS_eNB
*
eNB
,
int
frame_rx
,
int
subframe_rx
,
char
*
string
,
RU_t
*
ru
)
{
RU_proc_t
*
ru_proc
=
&
ru
->
proc
;
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
eNB_rxtx_proc_t
*
proc_rxtx
=
&
proc
->
proc_rxtx
[
0
];
...
...
@@ -293,6 +294,11 @@ void eNB_top(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, char *string)
if
(
rxtx
(
eNB
,
proc_rxtx
,
string
)
<
0
)
LOG_E
(
PHY
,
"eNB %d CC_id %d failed during execution
\n
"
,
eNB
->
Mod_id
,
eNB
->
CC_id
);
LOG_D
(
PHY
,
"eNB_top out %p (proc %p, CC_id %d), frame %d, subframe %d, instance_cnt_prach %d
\n
"
,
(
void
*
)
pthread_self
(),
proc
,
eNB
->
CC_id
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
proc
->
instance_cnt_prach
);
pthread_mutex_lock
(
&
ru_proc
->
mutex_eNBs
);
++
ru_proc
->
instance_cnt_eNBs
;
pthread_mutex_unlock
(
&
ru_proc
->
mutex_eNBs
);
pthread_cond_signal
(
&
ru_proc
->
cond_eNBs
);
}
}
...
...
targets/RT/USER/lte-ru.c
View file @
279b7da5
...
...
@@ -112,6 +112,7 @@ unsigned short config_frames[4] = {2,9,11,13};
extern
volatile
int
oai_exit
;
extern
int
numerology
;
extern
int
fh_two_thread
;
extern
void
phy_init_RU
(
RU_t
*
);
...
...
@@ -876,7 +877,7 @@ static void* ru_thread_asynch_rxtx( void* param ) {
subframe
++
;
}
LOG_D
(
PHY
,
"ru_thread_asynch_rxtx: Waiting on incoming fronthaul
\n
"
);
// asynchronous receive from south (Mobipass)
// asynchronous receive from south (Mobipass)
if
(
ru
->
fh_south_asynch_in
)
ru
->
fh_south_asynch_in
(
ru
,
&
frame
,
&
subframe
);
// asynchronous receive from north (RRU IF4/IF5)
else
if
(
ru
->
fh_north_asynch_in
)
ru
->
fh_north_asynch_in
(
ru
,
&
frame
,
&
subframe
);
...
...
@@ -1121,7 +1122,7 @@ void wakeup_eNBs(RU_t *ru) {
char
string
[
20
];
sprintf
(
string
,
"Incoming RU %d"
,
ru
->
idx
);
LOG_D
(
PHY
,
"RU %d Waking up eNB
\n
"
,
ru
->
idx
);
ru
->
eNB_top
(
eNB_list
[
0
],
ru
->
proc
.
frame_rx
,
ru
->
proc
.
subframe_rx
,
string
);
ru
->
eNB_top
(
eNB_list
[
0
],
ru
->
proc
.
frame_rx
,
ru
->
proc
.
subframe_rx
,
string
,
ru
);
}
else
{
...
...
@@ -1359,6 +1360,48 @@ static void* ru_stats_thread(void* param) {
return
(
NULL
);
}
static
void
*
ru_thread_tx
(
void
*
param
)
{
RU_t
*
ru
=
(
RU_t
*
)
param
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
int
subframe
=
0
,
frame
=
0
;
thread_top_init
(
"ru_thread_tx"
,
1
,
870000L
,
1000000L
,
1000000L
);
wait_on_condition
(
&
proc
->
mutex_FH1
,
&
proc
->
cond_FH1
,
&
proc
->
instance_cnt_FH1
,
"ru_thread_tx"
);
printf
(
"ru_thread_tx ready
\n
"
);
while
(
!
oai_exit
)
{
if
(
oai_exit
)
break
;
if
(
subframe
==
9
)
{
subframe
=
0
;
frame
++
;
frame
&=
1023
;
}
else
{
subframe
++
;
}
LOG_D
(
PHY
,
"ru_thread_tx: Waiting for TX processing
\n
"
);
// 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"
);
// do TX front-end processing if needed (precoding and/or IDFTs)
if
(
ru
->
feptx_prec
)
ru
->
feptx_prec
(
ru
);
// do OFDM if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
feptx_ofdm
))
ru
->
feptx_ofdm
(
ru
);
// do outgoing fronthaul (south) if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
fh_south_out
))
ru
->
fh_south_out
(
ru
);
if
(
ru
->
fh_north_out
)
ru
->
fh_north_out
(
ru
);
release_thread
(
&
proc
->
mutex_eNBs
,
&
proc
->
instance_cnt_eNBs
,
"ru_thread"
);
}
return
0
;
}
static
void
*
ru_thread
(
void
*
param
)
{
static
int
ru_thread_status
;
...
...
@@ -1431,10 +1474,15 @@ static void* ru_thread( void* param ) {
pthread_cond_signal
(
&
proc
->
cond_asynch_rxtx
);
}
else
LOG_I
(
PHY
,
"RU %d no asynch_south interface
\n
"
,
ru
->
idx
);
// if this is a slave RRU, try to synchronize on the DL frequency
if
((
ru
->
is_slave
)
&&
(
ru
->
if_south
==
LOCAL_RF
))
do_ru_synch
(
ru
);
pthread_mutex_lock
(
&
proc
->
mutex_FH1
);
proc
->
instance_cnt_FH1
=
0
;
pthread_mutex_unlock
(
&
proc
->
mutex_FH1
);
pthread_cond_signal
(
&
proc
->
cond_FH1
);
// This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
while
(
!
oai_exit
)
{
...
...
@@ -1485,19 +1533,22 @@ static void* ru_thread( void* param ) {
// wakeup all eNB processes waiting for this RU
if
(
ru
->
num_eNB
>
0
)
wakeup_eNBs
(
ru
);
// 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"
);
// do TX front-end processing if needed (precoding and/or IDFTs)
if
(
ru
->
feptx_prec
)
ru
->
feptx_prec
(
ru
);
// do OFDM if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
feptx_ofdm
))
ru
->
feptx_ofdm
(
ru
);
// do outgoing fronthaul (south) if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
fh_south_out
))
ru
->
fh_south_out
(
ru
);
if
(
ru
->
fh_north_out
)
ru
->
fh_north_out
(
ru
);
if
(
fh_two_thread
==
0
)
{
// 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"
);
// do TX front-end processing if needed (precoding and/or IDFTs)
if
(
ru
->
feptx_prec
)
ru
->
feptx_prec
(
ru
);
// do OFDM if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
feptx_ofdm
))
ru
->
feptx_ofdm
(
ru
);
// do outgoing fronthaul (south) if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
fh_south_out
))
ru
->
fh_south_out
(
ru
);
if
(
ru
->
fh_north_out
)
ru
->
fh_north_out
(
ru
);
}
}
...
...
@@ -1611,7 +1662,7 @@ void init_RU_proc(RU_t *ru) {
int
i
=
0
;
RU_proc_t
*
proc
;
pthread_attr_t
*
attr_FH
=
NULL
,
*
attr_prach
=
NULL
,
*
attr_asynch
=
NULL
,
*
attr_synch
=
NULL
;
pthread_attr_t
*
attr_FH
=
NULL
,
*
attr_
FH1
=
NULL
,
*
attr_
prach
=
NULL
,
*
attr_asynch
=
NULL
,
*
attr_synch
=
NULL
;
//pthread_attr_t *attr_fep=NULL;
#ifdef Rel14
pthread_attr_t
*
attr_prach_br
=
NULL
;
...
...
@@ -1626,9 +1677,11 @@ void init_RU_proc(RU_t *ru) {
proc
->
ru
=
ru
;
proc
->
instance_cnt_prach
=
-
1
;
proc
->
instance_cnt_synch
=
-
1
;
;
proc
->
instance_cnt_synch
=
-
1
;
proc
->
instance_cnt_FH
=
-
1
;
proc
->
instance_cnt_FH1
=
-
1
;
proc
->
instance_cnt_asynch_rxtx
=
-
1
;
proc
->
instance_cnt_eNBs
=
-
1
;
proc
->
first_rx
=
1
;
proc
->
first_tx
=
1
;
proc
->
frame_offset
=
0
;
...
...
@@ -1641,13 +1694,16 @@ void init_RU_proc(RU_t *ru) {
pthread_mutex_init
(
&
proc
->
mutex_asynch_rxtx
,
NULL
);
pthread_mutex_init
(
&
proc
->
mutex_synch
,
NULL
);
pthread_mutex_init
(
&
proc
->
mutex_FH
,
NULL
);
pthread_mutex_init
(
&
proc
->
mutex_FH1
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_prach
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_FH
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_FH1
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_asynch_rxtx
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_synch
,
NULL
);
pthread_attr_init
(
&
proc
->
attr_FH
);
pthread_attr_init
(
&
proc
->
attr_FH1
);
pthread_attr_init
(
&
proc
->
attr_prach
);
pthread_attr_init
(
&
proc
->
attr_synch
);
pthread_attr_init
(
&
proc
->
attr_asynch_rxtx
);
...
...
@@ -1662,6 +1718,7 @@ void init_RU_proc(RU_t *ru) {
#ifndef DEADLINE_SCHEDULER
attr_FH
=
&
proc
->
attr_FH
;
attr_FH1
=
&
proc
->
attr_FH1
;
attr_prach
=
&
proc
->
attr_prach
;
attr_synch
=
&
proc
->
attr_synch
;
attr_asynch
=
&
proc
->
attr_asynch_rxtx
;
...
...
@@ -1670,7 +1727,10 @@ void init_RU_proc(RU_t *ru) {
#endif
#endif
pthread_create
(
&
proc
->
pthread_FH
,
attr_FH
,
ru_thread
,
(
void
*
)
ru
);
pthread_create
(
&
proc
->
pthread_FH
,
attr_FH
,
ru_thread
,
(
void
*
)
ru
);
\
if
(
fh_two_thread
==
1
)
pthread_create
(
&
proc
->
pthread_FH1
,
attr_FH1
,
ru_thread_tx
,
(
void
*
)
ru
);
if
(
ru
->
function
==
NGFI_RRU_IF4p5
)
{
pthread_create
(
&
proc
->
pthread_prach
,
attr_prach
,
ru_thread_prach
,
(
void
*
)
ru
);
...
...
@@ -1682,7 +1742,10 @@ void init_RU_proc(RU_t *ru) {
if
((
ru
->
if_timing
==
synch_to_other
)
||
(
ru
->
function
==
NGFI_RRU_IF5
)
||
(
ru
->
function
==
NGFI_RRU_IF4p5
))
pthread_create
(
&
proc
->
pthread_asynch_rxtx
,
attr_asynch
,
ru_thread_asynch_rxtx
,
(
void
*
)
ru
);
(
ru
->
function
==
NGFI_RRU_IF4p5
))
{
pthread_create
(
&
proc
->
pthread_asynch_rxtx
,
attr_asynch
,
ru_thread_asynch_rxtx
,
(
void
*
)
ru
);
}
snprintf
(
name
,
sizeof
(
name
),
"ru_thread_FH %d"
,
ru
->
idx
);
pthread_setname_np
(
proc
->
pthread_FH
,
name
);
...
...
@@ -1963,7 +2026,7 @@ void init_RU(char *rf_config_file) {
}
malloc_IF4p5_buffer
(
ru
);
}
else
if
(
ru
->
function
==
eNodeB_3GPP
)
{
else
if
(
ru
->
function
==
eNodeB_3GPP
)
{
ru
->
do_prach
=
0
;
// no prach processing in RU
ru
->
feprx
=
(
get_nprocs
()
<=
4
)
?
fep_full
:
ru_fep_full_2thread
;
// RX DFTs
ru
->
feptx_ofdm
=
(
get_nprocs
()
<=
4
)
?
feptx_ofdm
:
feptx_ofdm_2thread
;
// this is fep with idft and precoding
...
...
targets/RT/USER/lte-softmodem.c
View file @
279b7da5
...
...
@@ -171,7 +171,7 @@ static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/;
char
rf_config_file
[
1024
];
int
chain_offset
=
0
;
int
phy_test
=
0
;
int
phy_test
=
1
;
uint8_t
usim_test
=
0
;
uint8_t
dci_Format
=
0
;
...
...
@@ -206,8 +206,8 @@ extern void reset_opp_meas(void);
extern
void
print_opp_meas
(
void
);
int
transmission_mode
=
1
;
int
numerology
=
1
;
int
numerology
=
0
;
int
fh_two_thread
=
1
;
...
...
@@ -746,6 +746,7 @@ void init_openair0() {
int
card
;
int
i
;
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
...
...
targets/RT/USER/lte-softmodem.h
View file @
279b7da5
...
...
@@ -168,7 +168,7 @@ extern int16_t dlsch_demod_shift;
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
{"S" , CONFIG_HLP_MSLOTS, PARAMFLAG_BOOL, u8ptr:&exit_missed_slots, defintval:1, TYPE_UINT8, 0}, \
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \
{"n" , CONFIG_HLP_NUMEROLOGY, 0, iptr:&numerology, defintval:
1
, TYPE_INT, 0} \
{"n" , CONFIG_HLP_NUMEROLOGY, 0, iptr:&numerology, defintval:
0
, TYPE_INT, 0} \
}
#define CONFIG_HLP_FLOG "Enable online log \n"
...
...
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