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
spbro
OpenXG-RAN
Commits
b9fc5e67
Commit
b9fc5e67
authored
7 years ago
by
David Price
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Small update mostly tweaking. Still RACHs
parent
80aaca76
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
22 deletions
+85
-22
nfapi/nfapi_pnf.c
nfapi/nfapi_pnf.c
+3
-9
openair2/PHY_INTERFACE/IF_Module.c
openair2/PHY_INTERFACE/IF_Module.c
+4
-5
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+15
-7
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+63
-1
No files found.
nfapi/nfapi_pnf.c
View file @
b9fc5e67
...
...
@@ -1807,20 +1807,14 @@ void configure_nfapi_pnf(char *vnf_ip_addr, int vnf_p5_port, char *pnf_ip_addr,
pthread_create
(
&
pnf_start_pthread
,
NULL
,
&
pnf_start_thread
,
config
);
}
void
oai_subframe_ind
(
eNB_rxtx_proc_t
*
proc
)
void
oai_subframe_ind
(
uint16_t
sfn
,
uint16_t
sf
)
{
//LOG_D(PHY,"%s(
frame:%d, subframe:%d)\n", __FUNCTION__, proc->frame_tx, proc->subframe_tx
);
//LOG_D(PHY,"%s(
sfn:%d, sf:%d)\n", __FUNCTION__, sfn, sf
);
//TODO FIXME - HACK - DJP - using a global to bodge it in
if
(
p7_config_g
!=
NULL
&&
sync_var
==
0
)
{
//PHY_VARS_eNB *eNB = RC.eNB[0][0];
//int even_frame_thread = eNB->proc.proc_rxtx[0] == proc ? 0 : 1;
int
pnf
=
nfapi_mode
==
1
?
1
:
0
;
uint16_t
sfn
=
pnf
?
proc
->
frame_tx
:
proc
->
frame_rx
;
uint16_t
sf
=
pnf
?
proc
->
subframe_tx
:
proc
->
frame_rx
;
uint16_t
sfn_sf_tx
=
sfn
<<
4
|
sf
;
if
((
sfn
%
100
==
0
)
&&
sf
==
0
)
...
...
@@ -1829,7 +1823,7 @@ void oai_subframe_ind(eNB_rxtx_proc_t *proc)
clock_gettime
(
CLOCK_MONOTONIC
,
&
ts
);
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"[PNF] %s %d.%d (
frame:%u subframe
:%u) SFN/SF(TX):%u
\n
"
,
__FUNCTION__
,
ts
.
tv_sec
,
ts
.
tv_nsec
,
sfn
,
sf
,
NFAPI_SFNSF2DEC
(
sfn_sf_tx
));
NFAPI_TRACE
(
NFAPI_TRACE_INFO
,
"[PNF] %s %d.%d (
sfn:%u sf
:%u) SFN/SF(TX):%u
\n
"
,
__FUNCTION__
,
ts
.
tv_sec
,
ts
.
tv_nsec
,
sfn
,
sf
,
NFAPI_SFNSF2DEC
(
sfn_sf_tx
));
}
int
subframe_ret
=
nfapi_pnf_p7_subframe_ind
(
p7_config_g
,
p7_config_g
->
phy_id
,
sfn_sf_tx
);
...
...
This diff is collapsed.
Click to expand it.
openair2/PHY_INTERFACE/IF_Module.c
View file @
b9fc5e67
...
...
@@ -513,9 +513,10 @@ void UL_indication(UL_IND_t *UL_info)
IF_Module_t
*
ifi
=
if_inst
[
module_id
];
eNB_MAC_INST
*
mac
=
RC
.
mac
[
module_id
];
LOG_D
(
PHY
,
"
UL_Indication: frame %d, subframe %d, module_id %d, CC_id %d
\n
"
,
LOG_D
(
PHY
,
"
frame %d, subframe %d, module_id %d, CC_id %d UL_info[rx_ind:%d number_of_harqs:%d number_of_crcs:%d number_of_cqis:%d number_of_preambles:%d]
\n
"
,
UL_info
->
frame
,
UL_info
->
subframe
,
module_id
,
CC_id
);
module_id
,
CC_id
,
UL_info
->
rx_ind
.
rx_indication_body
.
number_of_pdus
,
UL_info
->
harq_ind
.
harq_indication_body
.
number_of_harqs
,
UL_info
->
crc_ind
.
crc_indication_body
.
number_of_crcs
,
UL_info
->
cqi_ind
.
number_of_cqis
,
UL_info
->
rach_ind
.
number_of_preambles
);
if
(
nfapi_mode
!=
1
)
{
...
...
@@ -535,8 +536,6 @@ void UL_indication(UL_IND_t *UL_info)
clear_nfapi_information
(
RC
.
mac
[
module_id
],
CC_id
,
UL_info
->
frame
,
UL_info
->
subframe
);
LOG_D
(
PHY
,
"UL_info[rx_ind:%d number_of_harqs:%d number_of_crcs:%d number_of_cqis:%d number_of_preambles:%d]
\n
"
,
UL_info
->
rx_ind
.
rx_indication_body
.
number_of_pdus
,
UL_info
->
harq_ind
.
harq_indication_body
.
number_of_harqs
,
UL_info
->
crc_ind
.
crc_indication_body
.
number_of_crcs
,
UL_info
->
cqi_ind
.
number_of_cqis
,
UL_info
->
rach_ind
.
number_of_preambles
);
handle_rach
(
UL_info
);
handle_sr
(
UL_info
);
...
...
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-enb.c
View file @
b9fc5e67
...
...
@@ -151,8 +151,9 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe);
void
wakeup_prach_eNB_br
(
PHY_VARS_eNB
*
eNB
,
RU_t
*
ru
,
int
frame
,
int
subframe
);
#endif
extern
void
oai_subframe_ind
(
eNB_rxtx_proc_t
*
proc
);
extern
uint8_t
nfapi_mode
;
extern
void
oai_subframe_ind
(
uint16_t
sfn
,
uint16_t
sf
);
extern
void
add_subframe
(
uint16_t
*
frameP
,
uint16_t
*
subframeP
,
int
offset
);
static
inline
int
rxtx
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
char
*
thread_name
)
{
...
...
@@ -176,7 +177,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
#endif
}
LOG_D
(
PHY
,
"
SFN/SF proc:%d/%d rx_ind:%d/%d [num_pdus:%d]
\n
"
,
NFAPI_SFNSF2SFN
(
eNB
->
UL_INFO
.
rx_ind
.
sfn_sf
),
NFAPI_SFNSF2SF
(
eNB
->
UL_INFO
.
rx_ind
.
sfn_sf
),
proc
->
frame_rx
,
proc
->
subframe_rx
,
eNB
->
UL_INFO
.
rx_ind
.
rx_indication_body
.
number_of_pdus
);
LOG_D
(
PHY
,
"
RX_IND:SFN/SF:%d/%d proc:SFN/SF:%d/%d [rx_ind:num_pdus:%d]
\n
"
,
NFAPI_SFNSF2DEC
(
eNB
->
UL_INFO
.
rx_ind
.
sfn_sf
),
proc
->
frame_rx
,
proc
->
subframe_rx
,
eNB
->
UL_INFO
.
rx_ind
.
rx_indication_body
.
number_of_pdus
);
if
(
eNB
->
UL_INFO
.
rx_ind
.
sfn_sf
==
(
proc
->
frame_rx
<<
4
|
proc
->
subframe_rx
)
&&
eNB
->
UL_INFO
.
rx_ind
.
rx_indication_body
.
number_of_pdus
>
0
)
{
...
...
@@ -199,10 +200,18 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
}
}
if
(
nfapi_mode
)
if
(
nfapi_mode
==
1
)
{
oai_subframe_ind
(
proc
);
// PNF ---> P7:subframe_ind --> VNF
//LOG_E(PHY, "Returned from oai_subframe_ind()\n");
// I am a PNF and I need to let nFAPI know that we have a (sub)frame tick
uint16_t
frame
=
proc
->
frame_rx
;
uint16_t
subframe
=
proc
->
subframe_rx
;
add_subframe
(
&
frame
,
&
subframe
,
4
);
//oai_subframe_ind(proc->frame_tx, proc->subframe_tx);
//LOG_D(PHY, "oai_subframe_ind(frame:%u, subframe:%d) - NOT CALLED ********\n", frame, subframe);
oai_subframe_ind
(
frame
,
subframe
);
LOG_D
(
PHY
,
"UL_info[rx_ind:%d number_of_harqs:%d number_of_crcs:%d number_of_cqis:%d number_of_preambles:%d]
\n
"
,
eNB
->
UL_INFO
.
rx_ind
.
rx_indication_body
.
number_of_pdus
,
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
number_of_harqs
,
eNB
->
UL_INFO
.
crc_ind
.
crc_indication_body
.
number_of_crcs
,
eNB
->
UL_INFO
.
cqi_ind
.
number_of_cqis
,
eNB
->
UL_INFO
.
rach_ind
.
number_of_preambles
);
}
...
...
@@ -339,8 +348,7 @@ void eNB_top(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, char *string)
proc_rxtx
->
timestamp_tx
=
proc
->
timestamp_tx
;
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
);
//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);
}
}
...
...
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-ru.c
View file @
b9fc5e67
...
...
@@ -129,6 +129,8 @@ int attach_rru(RU_t *ru);
int
connect_rau
(
RU_t
*
ru
);
extern
uint8_t
nfapi_mode
;
extern
void
oai_subframe_ind
(
uint16_t
frame
,
uint16_t
subframe
);
/*************************************************************/
/* Functions to attach and configure RRU */
...
...
@@ -1271,6 +1273,40 @@ static inline int wakeup_prach_ru_br(RU_t *ru) {
}
#endif
#if 0
static inline int wakeup_nfapi_subframe_thread(RU_t *ru) {
int i;
PHY_VARS_eNB **eNB_list = ru->eNB_list;
LOG_D(PHY,"wakeup_nfapi_subframe_thread (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top);
if (ru->num_eNB==1 && ru->eNB_top!=0) {
// call eNB function directly
char string[20];
sprintf(string,"Incoming RU %d",ru->idx);
//LOG_D(PHY,"RU %d Call eNB_top\n",ru->idx);
ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
}
else {
LOG_D(PHY,"ru->num_eNB:%d\n", ru->num_eNB);
for (i=0;i<ru->num_eNB;i++)
{
LOG_D(PHY,"ru->wakeup_rxtx:%p\n", ru->wakeup_rxtx);
if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0)
{
LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
}
}
}
}
#endif
// this is for RU with local RF unit
void
fill_rf_config
(
RU_t
*
ru
,
char
*
rf_config_file
)
{
...
...
@@ -1517,7 +1553,7 @@ static void* ru_thread( void* param ) {
if
(
ru
->
fh_south_in
)
ru
->
fh_south_in
(
ru
,
&
frame
,
&
subframe
);
else
AssertFatal
(
1
==
0
,
"No fronthaul interface at south port"
);
LOG_D
(
PHY
,
"AFTER fh_south_in - SFN/SF:%d/%d R
X:%d/%d TX:%d/%d
RC.eNB[0][0]:[RX:%d/%d TX(SFN):%d] eNB:%p RU:eNB:%p proc:%p ru->proc:%p
\n
"
,
LOG_D
(
PHY
,
"AFTER fh_south_in - SFN/SF:%d/%d R
U->proc[RX:%d/%d TX:%d/%d]
RC.eNB[0][0]:[RX:%d/%d TX(SFN):%d] eNB:%p RU:eNB:%p proc:%p ru->proc:%p
\n
"
,
frame
,
subframe
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
...
...
@@ -1526,6 +1562,32 @@ static void* ru_thread( void* param ) {
RC
.
eNB
[
0
][
0
],
ru
->
eNB_list
[
0
],
proc
,
&
ru
->
proc
);
#if 0
// This needs to be here, because we need to be as close to the interrupt as possible, any later and you get jitter
// However, putting it here causes the PNF to go horribly wrong and get bad harq_pid!
//
if (nfapi_mode == 1) // PNF
{
struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
//oai_subframe_ind(proc->frame_tx, proc->subframe_tx);
//LOG_D(PHY, "oai_subframe_ind(frame:%u, subframe:%d) NOT CALLED **************************************\n", frame, subframe);
//uint16_t frame = proc->frame_tx;
//uint16_t subframe = proc->subframe_tx;
//add_subframe(&frame, &subframe, 4);
//oai_subframe_ind(frame, subframe);
//LOG_D(PHY, "oai_subframe_ind(frame:%u, subframe:%d) UL_info[rx_ind:%d number_of_harqs:%d number_of_crcs:%d number_of_cqis:%d number_of_preambles:%d]\n", frame, subframe, eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus, eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs, eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs, eNB->UL_INFO.cqi_ind.number_of_cqis, eNB->UL_INFO.rach_ind.number_of_preambles);
}
#endif
if
(
nfapi_mode
==
1
)
// PNF
{
// This is the earliest I think we can do this
//wakeup_nfapi_subframe_thread();
}
if
(
0
&&
is_prach_subframe
(
fp
,
proc
->
frame_rx
,
proc
->
subframe_rx
))
LOG_D
(
PHY
,
"RU thread (do_prach %d, is_prach_subframe %d), received frame %d, subframe %d
\n
"
,
ru
->
do_prach
,
...
...
This diff is collapsed.
Click to expand it.
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