Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
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
wangwenhui
OpenXG-RAN
Commits
5c607644
Commit
5c607644
authored
Oct 15, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
testing FEP parrelization, default set back to single-thread. Reduced logging in MAC
parent
8420dce1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
49 additions
and
48 deletions
+49
-48
openair1/PHY/MODULATION/ofdm_mod.c
openair1/PHY/MODULATION/ofdm_mod.c
+3
-2
openair1/SCHED/ru_procedures.c
openair1/SCHED/ru_procedures.c
+27
-34
openair2/LAYER2/MAC/eNB_scheduler_RA.c
openair2/LAYER2/MAC/eNB_scheduler_RA.c
+5
-5
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+1
-1
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+13
-6
No files found.
openair1/PHY/MODULATION/ofdm_mod.c
View file @
5c607644
...
...
@@ -165,9 +165,10 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
if
(
fftsize
==
128
)
#endif
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
/*
for (j=0; j<fftsize ; j++) {
output_ptr[j] = temp_ptr[j];
}
}*/
memcpy
((
void
*
)
output_ptr
,(
void
*
)
temp_ptr
,
fftsize
<<
2
);
}
j
=
fftsize
;
...
...
openair1/SCHED/ru_procedures.c
View file @
5c607644
...
...
@@ -66,7 +66,7 @@ extern int oai_exit;
void
feptx0
(
RU_t
*
ru
,
int
slot
)
{
LTE_DL_FRAME_PARMS
*
fp
=
&
ru
->
frame_parms
;
int
dummy_tx_b
[
7680
*
2
]
__attribute__
((
aligned
(
32
)));
//
int dummy_tx_b[7680*2] __attribute__((aligned(32)));
unsigned
int
aa
,
slot_offset
;
int
i
,
j
,
tx_offset
;
...
...
@@ -82,20 +82,20 @@ void feptx0(RU_t *ru,int slot) {
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
if
(
fp
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot
*
slot_sizeF
],
dummy_tx_b
,
fp
->
ofdm_symbol_size
,
6
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
]
,
fp
->
ofdm_symbol_size
,
6
,
fp
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
else
normal_prefix_mod
(
&
ru
->
common
.
txdataF_BF
[
aa
][
slot
*
slot_sizeF
],
dummy_tx_b
,
7
,
fp
);
(
int
*
)
&
ru
->
common
.
txdata
[
aa
][
slot_offset
],
7
,
fp
);
/*
len = fp->samples_per_tti>>1;
// cyclic extension
if ((slot_offset+len)>(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti)) {
tx_offset = (int)slot_offset;
txdata = (int16_t*)&ru->common.txdata[aa][tx_offset];
...
...
@@ -111,20 +111,17 @@ void feptx0(RU_t *ru,int slot) {
else {
tx_offset = (int)slot_offset;
txdata = (int16_t*)&ru->common.txdata[aa][tx_offset];
for
(
i
=
0
;
i
<
(
len
<<
1
);
i
++
)
{
txdata
[
i
]
=
((
int16_t
*
)
dummy_tx_b
)[
i
];
}
memcpy((void*)txdata,(void*)dummy_tx_b,len<<2);
}
*/
// TDD: turn on tx switch N_TA_offset before by setting buffer in these samples to 0
if
((
slot
==
0
)
&&
((((
fp
->
tdd_config
==
0
)
||
(
fp
->
tdd_config
==
1
)
||
(
fp
->
tdd_config
==
2
)
||
(
fp
->
tdd_config
==
6
))
&&
(
subframe
==
0
))
||
(
subframe
==
5
)))
{
(
fp
->
frame_type
==
TDD
)
&&
((
fp
->
tdd_config
==
0
)
||
(
fp
->
tdd_config
==
1
)
||
(
fp
->
tdd_config
==
2
)
||
(
fp
->
tdd_config
==
6
))
&&
((
subframe
==
0
)
||
(
subframe
==
5
)))
{
for
(
i
=
0
;
i
<
ru
->
N_TA_offset
;
i
++
)
{
tx_offset
=
(
int
)
slot_offset
+
i
-
ru
->
N_TA_offset
/
2
;
if
(
tx_offset
<
0
)
...
...
@@ -136,9 +133,6 @@ void feptx0(RU_t *ru,int slot) {
ru
->
common
.
txdata
[
aa
][
tx_offset
]
=
0x00000000
;
}
}
LOG_D
(
PHY
,
"feptx_ofdm (TXPATH): frame %d, subframe %d: txp (time %p) %d dB, txp (freq) %d dB
\n
"
,
ru
->
proc
.
frame_tx
,
subframe
,
txdata
,
dB_fixed
(
signal_energy
((
int32_t
*
)
txdata
,
fp
->
samples_per_tti
)),
dB_fixed
(
signal_energy_nodc
(
ru
->
common
.
txdataF_BF
[
aa
],
2
*
slot_sizeF
)));
}
}
...
...
@@ -177,7 +171,7 @@ void feptx_ofdm_2thread(RU_t *ru) {
wait
.
tv_sec
=
0
;
wait
.
tv_nsec
=
5000000L
;
start_meas
(
&
ru
->
ofdm_
de
mod_stats
);
start_meas
(
&
ru
->
ofdm_mod_stats
);
if
(
subframe_select
(
fp
,
subframe
)
==
SF_UL
)
return
;
...
...
@@ -209,12 +203,10 @@ void feptx_ofdm_2thread(RU_t *ru) {
}
// call first slot in this thread
feptx0
(
ru
,
0
);
wait_on_busy_condition
(
&
proc
->
mutex_feptx
,
&
proc
->
cond_feptx
,
&
proc
->
instance_cnt_feptx
,
"feptx thread"
);
stop_meas
(
&
ru
->
ofdm_
de
mod_stats
);
stop_meas
(
&
ru
->
ofdm_mod_stats
);
}
...
...
@@ -329,11 +321,12 @@ void feptx_ofdm(RU_t *ru) {
}
}
*/
if
((((
fp
->
tdd_config
==
0
)
||
(
fp
->
tdd_config
==
1
)
||
(
fp
->
tdd_config
==
2
)
||
(
fp
->
tdd_config
==
6
))
&&
(
subframe
==
0
))
||
(
subframe
==
5
))
{
if
((
fp
->
frame_type
==
TDD
)
&&
((
fp
->
tdd_config
==
0
)
||
(
fp
->
tdd_config
==
1
)
||
(
fp
->
tdd_config
==
2
)
||
(
fp
->
tdd_config
==
6
))
&&
((
subframe
==
0
)
||
(
subframe
==
5
)))
{
// turn on tx switch N_TA_offset before
//LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,ru->N_TA_offset,slot_offset);
for
(
i
=
0
;
i
<
ru
->
N_TA_offset
;
i
++
)
{
...
...
openair2/LAYER2/MAC/eNB_scheduler_RA.c
View file @
5c607644
...
...
@@ -388,7 +388,7 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
{
if
((
RA_template
->
Msg2_frame
==
frameP
)
&&
(
RA_template
->
Msg2_subframe
==
subframeP
))
{
LOG_
I
(
MAC
,
"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI, RA_active %d format 1A (%d,%d))
\n
"
,
LOG_
D
(
MAC
,
"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI, RA_active %d format 1A (%d,%d))
\n
"
,
module_idP
,
CC_idP
,
frameP
,
subframeP
,
RA_template
->
RA_active
,
...
...
@@ -860,7 +860,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
1
,
// ndi
0
,
// rv
0
);
// vrb_flag
LOG_
I
(
MAC
,
"Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d
\n
"
,
LOG_
D
(
MAC
,
"Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d
\n
"
,
frameP
,
subframeP
,
dl_req
->
number_pdu
,
...
...
@@ -947,7 +947,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
(
cc
->
p_eNB
==
1
)
?
1
:
2
,
// transmission mode
1
,
// num_bf_prb_per_subband
1
);
// num_bf_vector
LOG_
I
(
MAC
,
"Filled DLSCH config, pdu number %d, non-dci pdu_index %d
\n
"
,
dl_req
->
number_pdu
,
eNB
->
pdu_index
[
CC_idP
]);
LOG_
D
(
MAC
,
"Filled DLSCH config, pdu number %d, non-dci pdu_index %d
\n
"
,
dl_req
->
number_pdu
,
eNB
->
pdu_index
[
CC_idP
]);
// DL request
eNB
->
TX_req
[
CC_idP
].
sfn_sf
=
fill_nfapi_tx_req
(
&
eNB
->
TX_req
[
CC_idP
].
tx_request_body
,
...
...
@@ -1082,7 +1082,7 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,
dl_req
->
number_dci
++
;
dl_req
->
number_pdu
++
;
LOG_
I
(
MAC
,
"msg4 retransmission for rnti %x (round %d) fsf %d/%d
\n
"
,
RA_template
->
rnti
,
round
,
frameP
,
subframeP
);
LOG_
D
(
MAC
,
"msg4 retransmission for rnti %x (round %d) fsf %d/%d
\n
"
,
RA_template
->
rnti
,
round
,
frameP
,
subframeP
);
// DLSCH Config
fill_nfapi_dlsch_config
(
eNB
,
dl_req
,
...
...
@@ -1164,7 +1164,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP)
if
(
RA_template
->
RA_active
==
TRUE
)
{
LOG_
I
(
MAC
,
"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA %d is active (generate RAR %d, generate_Msg4 %d, wait_ack_Msg4 %d, rnti %x)
\n
"
,
LOG_
D
(
MAC
,
"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA %d is active (generate RAR %d, generate_Msg4 %d, wait_ack_Msg4 %d, rnti %x)
\n
"
,
module_idP
,
frameP
,
subframeP
,
CC_id
,
i
,
RA_template
->
generate_rar
,
RA_template
->
generate_Msg4
,
RA_template
->
wait_ack_Msg4
,
RA_template
->
rnti
);
if
(
RA_template
->
generate_rar
==
1
)
generate_Msg2
(
module_idP
,
CC_id
,
frameP
,
subframeP
,
RA_template
);
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
5c607644
...
...
@@ -148,7 +148,7 @@ void rx_sdu(const module_id_t enb_mod_idP,
"maxHARQ %d should be greater than 1
\n
"
,
(
int
)
eNB
->
common_channels
[
CC_idP
].
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
);
LOG_
I
(
MAC
,
"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d
\n
"
,
enb_mod_idP
,
harq_pid
,
CC_idP
,
LOG_
D
(
MAC
,
"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d
\n
"
,
enb_mod_idP
,
harq_pid
,
CC_idP
,
RA_template
[
RA_id
].
msg3_round
,
rntiP
,
RA_id
,
ul_cqi
);
...
...
targets/RT/USER/lte-ru.c
View file @
5c607644
...
...
@@ -1336,6 +1336,7 @@ static void* ru_stats_thread(void* param) {
if
(
ru
->
feptx_ofdm
)
print_meas
(
&
ru
->
ofdm_mod_stats
,
"feptx_ofdm"
,
NULL
,
NULL
);
}
}
return
(
NULL
);
}
static
void
*
ru_thread
(
void
*
param
)
{
...
...
@@ -1581,7 +1582,10 @@ int start_rf(RU_t *ru) {
extern
void
fep_full
(
RU_t
*
ru
);
extern
void
ru_fep_full_2thread
(
RU_t
*
ru
);
extern
void
feptx_ofdm
(
RU_t
*
ru
);
extern
void
feptx_ofdm_2thread
(
RU_t
*
ru
);
extern
void
feptx_prec
(
RU_t
*
ru
);
extern
void
init_fep_thread
(
RU_t
*
ru
,
pthread_attr_t
*
attr
);
extern
void
init_feptx_thread
(
RU_t
*
ru
,
pthread_attr_t
*
attr
);
void
init_RU_proc
(
RU_t
*
ru
)
{
...
...
@@ -1665,7 +1669,10 @@ void init_RU_proc(RU_t *ru) {
}
init_fep_thread
(
ru
,
NULL
);
if
(
get_nprocs
()
>=
2
)
{
if
(
ru
->
feprx
)
init_fep_thread
(
ru
,
NULL
);
if
(
ru
->
feptx_ofdm
)
init_feptx_thread
(
ru
,
NULL
);
}
if
(
opp_enabled
==
1
)
pthread_create
(
&
ru
->
ru_stats_thread
,
NULL
,
ru_stats_thread
,(
void
*
)
ru
);
}
...
...
@@ -1920,8 +1927,8 @@ void init_RU(char *rf_config_file) {
ru
->
fh_north_out
=
fh_if4p5_north_out
;
// send_IF4p5 on reception
ru
->
fh_south_out
=
tx_rf
;
// send output to RF
ru
->
fh_north_asynch_in
=
fh_if4p5_north_asynch_in
;
// TX packets come asynchronously
ru
->
feprx
=
(
get_nprocs
()
<=
2
)
?
fep_full
:
fep_full
;
// RX DFTs
ru
->
feptx_ofdm
=
feptx_ofdm
;
// this is fep with idft only (no precoding in RRU)
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 only (no precoding in RRU)
ru
->
feptx_prec
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start the if interface for if4p5
ru
->
ifdevice
.
host_type
=
RRU_HOST
;
...
...
@@ -1938,8 +1945,8 @@ void init_RU(char *rf_config_file) {
}
else
if
(
ru
->
function
==
eNodeB_3GPP
)
{
ru
->
do_prach
=
0
;
// no prach processing in RU
ru
->
feprx
=
(
get_nprocs
()
<=
2
)
?
fep_full
:
ru_fep_full_2thread
;
// RX DFTs
ru
->
feptx_ofdm
=
feptx_ofdm
;
// this is fep with idft and precoding
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
ru
->
feptx_prec
=
feptx_prec
;
// this is fep with idft and precoding
ru
->
fh_north_in
=
NULL
;
// no incoming fronthaul from north
ru
->
fh_north_out
=
NULL
;
// no outgoing fronthaul to north
...
...
@@ -1968,7 +1975,7 @@ void init_RU(char *rf_config_file) {
ru
->
do_prach
=
0
;
ru
->
feprx
=
(
get_nprocs
()
<=
2
)
?
fep_full
:
fep_full
;
// this is frequency-shift + DFTs
ru
->
feptx_prec
=
feptx_prec
;
// need to do transmit Precoding + IDFTs
ru
->
feptx_ofdm
=
feptx_ofdm
;
// need to do transmit Precoding + IDFTs
ru
->
feptx_ofdm
=
(
get_nprocs
()
<=
2
)
?
feptx_ofdm
:
feptx_ofdm_2thread
;
// need to do transmit Precoding + IDFTs
if
(
ru
->
if_timing
==
synch_to_other
)
{
ru
->
fh_south_in
=
fh_slave_south_in
;
// synchronize to master
ru
->
fh_south_out
=
fh_if5_mobipass_south_out
;
// use send_IF5 for mobipass
...
...
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