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
5aa734ab
Commit
5aa734ab
authored
Jan 03, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes for 20 MHz RRU (dual-thread mode)
parent
48f5ddbb
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
142 additions
and
215 deletions
+142
-215
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+29
-15
openair1/PHY/LTE_TRANSPORT/if4_tools.c
openair1/PHY/LTE_TRANSPORT/if4_tools.c
+9
-5
openair1/PHY/LTE_TRANSPORT/pcfich.c
openair1/PHY/LTE_TRANSPORT/pcfich.c
+1
-1
openair1/PHY/MODULATION/slot_fep_ul.c
openair1/PHY/MODULATION/slot_fep_ul.c
+9
-5
openair1/PHY/defs.h
openair1/PHY/defs.h
+1
-1
openair1/SCHED/defs.h
openair1/SCHED/defs.h
+1
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+12
-13
targets/ARCH/COMMON/common_lib.h
targets/ARCH/COMMON/common_lib.h
+2
-2
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+4
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.band7.tm1.if4p5.100PRB.usrpb210.conf
...RIC-LTE-EPC/CONF/rru.band7.tm1.if4p5.100PRB.usrpb210.conf
+1
-1
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+18
-10
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+18
-18
targets/RT/USER/rru_if4p5_usrp.gtkw
targets/RT/USER/rru_if4p5_usrp.gtkw
+5
-119
targets/SIMU/USER/init_lte.c
targets/SIMU/USER/init_lte.c
+31
-23
targets/SIMU/USER/init_lte.h
targets/SIMU/USER/init_lte.h
+1
-0
No files found.
openair1/PHY/INIT/lte_init.c
View file @
5aa734ab
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
#include "LAYER2/MAC/extern.h"
#include "LAYER2/MAC/extern.h"
#include "MBSFN-SubframeConfigList.h"
#include "MBSFN-SubframeConfigList.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
//
#define DEBUG_PHY
#define DEBUG_PHY
#include "assertions.h"
#include "assertions.h"
#include <math.h>
#include <math.h>
...
@@ -1219,13 +1219,22 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
...
@@ -1219,13 +1219,22 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
{
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
{
if
(
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)
if
(
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)
// Allocate 10 subframes of I/Q TX signal data (time) if not
common_vars
->
txdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
txdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
)
);
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
// Allocate 2 subframes of I/Q signal data (frequency)
common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
2
*
sizeof
(
int32_t
)
);
else
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
// Allocate 10 subframes of I/Q signal data (frequency)
common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
)
);
#ifdef DEBUG_PHY
#ifdef DEBUG_PHY
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdata[%d][%d] = %p
\n
"
,
eNB_id
,
i
,
common_vars
->
txdata
[
eNB_id
][
i
]);
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdata[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
txdata
[
eNB_id
][
i
],
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdataF[%d][%d] = %p (%d bytes)
\n
"
,
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
));
eNB_id
,
i
,
common_vars
->
txdataF
[
eNB_id
][
i
],
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
));
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdataF[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
txdataF
[
eNB_id
][
i
],
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
?
2
:
10
)
*
sizeof
(
int32_t
));
#endif
#endif
}
}
...
@@ -1238,18 +1247,23 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
...
@@ -1238,18 +1247,23 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
if
(
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)
{
if
(
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)
{
// allocate 2 subframes of I/Q signal data (time) if not an RCC (no time-domain signals)
common_vars
->
rxdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
rxdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
sizeof
(
int32_t
)
);
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
// allocate 2 subframes of I/Q signal data (time, 7.5 kHz offset)
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
2
*
fp
->
samples_per_tti
*
2
*
sizeof
(
int32_t
)
);
}
}
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
common_vars
->
rxdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
)
);
// allocate 2 subframes of I/Q signal data (frequency)
common_vars
->
rxdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
(
2
*
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
)
);
#ifdef DEBUG_PHY
#ifdef DEBUG_PHY
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata[%d][%d] = %p
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata
[
eNB_id
][
i
]);
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata
[
eNB_id
][
i
],
fp
->
samples_per_tti
*
2
*
sizeof
(
int32_t
));
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata_7_5kHz[%d][%d] = %p
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
]);
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata_7_5kHz[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
],
fp
->
samples_per_tti
*
2
*
sizeof
(
int32_t
));
#endif
#endif
}
}
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
{
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
{
// Channel estimates for SRS
// Channel estimates for SRS
for
(
UE_id
=
0
;
UE_id
<
NUMBER_OF_UE_MAX
;
UE_id
++
)
{
for
(
UE_id
=
0
;
UE_id
<
NUMBER_OF_UE_MAX
;
UE_id
++
)
{
...
@@ -1272,7 +1286,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
...
@@ -1272,7 +1286,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
if
(
abstraction_flag
==
0
)
{
if
(
abstraction_flag
==
0
)
{
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
{
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
{
generate_ul_ref_sigs_rx
();
generate_ul_ref_sigs_rx
();
// SRS
// SRS
...
@@ -1286,7 +1300,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
...
@@ -1286,7 +1300,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
// ULSCH VARS, skip if NFGI_RRU_IF4
// ULSCH VARS, skip if NFGI_RRU_IF4
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
prach_vars
->
prachF
=
(
int16_t
*
)
malloc16_clear
(
1024
*
2
*
sizeof
(
int16_t
)
);
prach_vars
->
prachF
=
(
int16_t
*
)
malloc16_clear
(
1024
*
2
*
sizeof
(
int16_t
)
);
/* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
/* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
...
@@ -1299,7 +1313,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
...
@@ -1299,7 +1313,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
#endif
#endif
}
}
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
{
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
{
AssertFatal
(
fp
->
nb_antennas_rx
<=
sizeof
(
prach_vars
->
prach_ifft
)
/
sizeof
(
prach_vars
->
prach_ifft
[
0
]),
AssertFatal
(
fp
->
nb_antennas_rx
<=
sizeof
(
prach_vars
->
prach_ifft
)
/
sizeof
(
prach_vars
->
prach_ifft
[
0
]),
"nb_antennas_rx too large"
);
"nb_antennas_rx too large"
);
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
...
...
openair1/PHY/LTE_TRANSPORT/if4_tools.c
View file @
5aa734ab
...
@@ -43,7 +43,7 @@ void send_IF4p5(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type
...
@@ -43,7 +43,7 @@ void send_IF4p5(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type
int32_t
**
txdataF
=
(
eNB
->
CC_id
==
0
)
?
eNB
->
common_vars
.
txdataF
[
0
]
:
PHY_vars_eNB_g
[
0
][
0
]
->
common_vars
.
txdataF
[
0
];
int32_t
**
txdataF
=
(
eNB
->
CC_id
==
0
)
?
eNB
->
common_vars
.
txdataF
[
0
]
:
PHY_vars_eNB_g
[
0
][
0
]
->
common_vars
.
txdataF
[
0
];
int32_t
**
rxdataF
=
eNB
->
common_vars
.
rxdataF
[
0
];
int32_t
**
rxdataF
=
eNB
->
common_vars
.
rxdataF
[
0
];
int16_t
**
rxsigF
=
eNB
->
prach_vars
.
rxsigF
;
int16_t
**
rxsigF
=
eNB
->
prach_vars
.
rxsigF
;
void
*
tx_buffer
=
eNB
->
ifbuffer
.
tx
;
void
*
tx_buffer
=
eNB
->
ifbuffer
.
tx
[
subframe
&
1
]
;
void
*
tx_buffer_prach
=
eNB
->
ifbuffer
.
tx_prach
;
void
*
tx_buffer_prach
=
eNB
->
ifbuffer
.
tx_prach
;
uint16_t
symbol_id
=
0
,
element_id
=
0
;
uint16_t
symbol_id
=
0
,
element_id
=
0
;
...
@@ -234,7 +234,7 @@ void recv_IF4p5(PHY_VARS_eNB *eNB, int *frame, int *subframe, uint16_t *packet_t
...
@@ -234,7 +234,7 @@ void recv_IF4p5(PHY_VARS_eNB *eNB, int *frame, int *subframe, uint16_t *packet_t
LOG_D
(
PHY
,
"DL_IF4p5: CC_id %d : frame %d, subframe %d, symbol %d
\n
"
,
eNB
->
CC_id
,
*
frame
,
*
subframe
,
*
symbol_number
);
LOG_D
(
PHY
,
"DL_IF4p5: CC_id %d : frame %d, subframe %d, symbol %d
\n
"
,
eNB
->
CC_id
,
*
frame
,
*
subframe
,
*
symbol_number
);
slotoffsetF
=
(
*
symbol_number
)
*
(
fp
->
ofdm_symbol_size
)
+
(
*
subframe
)
*
(
fp
->
ofdm_symbol_size
)
*
((
fp
->
Ncp
==
1
)
?
12
:
14
)
+
1
;
slotoffsetF
=
(
*
symbol_number
)
*
(
fp
->
ofdm_symbol_size
)
+
(
(
*
subframe
)
&
1
)
*
(
fp
->
ofdm_symbol_size
)
*
((
fp
->
Ncp
==
1
)
?
12
:
14
)
+
1
;
blockoffsetF
=
slotoffsetF
+
fp
->
ofdm_symbol_size
-
db_halflength
-
1
;
blockoffsetF
=
slotoffsetF
+
fp
->
ofdm_symbol_size
-
db_halflength
-
1
;
for
(
element_id
=
0
;
element_id
<
db_halflength
;
element_id
++
)
{
for
(
element_id
=
0
;
element_id
<
db_halflength
;
element_id
++
)
{
...
@@ -331,12 +331,16 @@ void gen_IF4p5_prach_header(IF4p5_header_t *prach_packet, int frame, int subfram
...
@@ -331,12 +331,16 @@ void gen_IF4p5_prach_header(IF4p5_header_t *prach_packet, int frame, int subfram
void
malloc_IF4p5_buffer
(
PHY_VARS_eNB
*
eNB
)
{
void
malloc_IF4p5_buffer
(
PHY_VARS_eNB
*
eNB
)
{
// Keep the size large enough
// Keep the size large enough
eth_state_t
*
eth
=
(
eth_state_t
*
)
(
eNB
->
ifdevice
.
priv
);
eth_state_t
*
eth
=
(
eth_state_t
*
)
(
eNB
->
ifdevice
.
priv
);
int
i
;
if
(
eth
->
flags
==
ETH_RAW_IF4p5_MODE
)
{
if
(
eth
->
flags
==
ETH_RAW_IF4p5_MODE
)
{
eNB
->
ifbuffer
.
tx
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
for
(
i
=
0
;
i
<
10
;
i
++
)
eNB
->
ifbuffer
.
tx
[
i
]
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
tx_prach
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
tx_prach
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
rx
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
rx
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
}
else
{
}
else
{
eNB
->
ifbuffer
.
tx
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
for
(
i
=
0
;
i
<
10
;
i
++
)
eNB
->
ifbuffer
.
tx
[
i
]
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
tx_prach
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
tx_prach
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
rx
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
rx
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
}
}
...
...
openair1/PHY/LTE_TRANSPORT/pcfich.c
View file @
5aa734ab
...
@@ -191,7 +191,7 @@ void generate_pcfich(uint8_t num_pdcch_symbols,
...
@@ -191,7 +191,7 @@ void generate_pcfich(uint8_t num_pdcch_symbols,
// mapping
// mapping
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
symbol_offset
=
(
uint32_t
)
frame_parms
->
ofdm_symbol_size
*
(
(
subframe
*
nsymb
)
);
symbol_offset
=
(
uint32_t
)
frame_parms
->
ofdm_symbol_size
*
(
subframe
*
nsymb
);
re_offset
=
frame_parms
->
first_carrier_offset
;
re_offset
=
frame_parms
->
first_carrier_offset
;
// loop over 4 quadruplets and lookup REGs
// loop over 4 quadruplets and lookup REGs
...
...
openair1/PHY/MODULATION/slot_fep_ul.c
View file @
5aa734ab
...
@@ -79,10 +79,10 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -79,10 +79,10 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
if
(
no_prefix
)
{
if
(
no_prefix
)
{
// subframe_offset = frame_parms->ofdm_symbol_size * frame_parms->symbols_per_tti * (Ns>>1);
// subframe_offset = frame_parms->ofdm_symbol_size * frame_parms->symbols_per_tti * (Ns>>1);
slot_offset
=
frame_parms
->
ofdm_symbol_size
*
(
frame_parms
->
symbols_per_tti
>>
1
)
*
(
Ns
%
2
);
slot_offset
=
frame_parms
->
ofdm_symbol_size
*
(
frame_parms
->
symbols_per_tti
>>
1
)
*
(
Ns
&
1
);
}
else
{
}
else
{
// subframe_offset = frame_parms->samples_per_tti * (Ns>>1);
// subframe_offset = frame_parms->samples_per_tti * (Ns>>1);
slot_offset
=
(
frame_parms
->
samples_per_tti
>>
1
)
*
(
Ns
%
2
);
slot_offset
=
(
frame_parms
->
samples_per_tti
>>
1
)
*
(
Ns
&
1
);
}
}
if
(
l
<
0
||
l
>=
7
-
frame_parms
->
Ncp
)
{
if
(
l
<
0
||
l
>=
7
-
frame_parms
->
Ncp
)
{
...
@@ -108,18 +108,22 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -108,18 +108,22 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
1
1
);
);
}
else
{
}
else
{
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
l
;
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
l
;
/* should never happen for eNB
if(rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
if(rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
{
{
memcpy((void *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][frame_length_samples],
memcpy((void *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][frame_length_samples],
(void *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][0],
(void *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][0],
frame_parms->ofdm_symbol_size*sizeof(int));
frame_parms->ofdm_symbol_size*sizeof(int));
}
}
*/
if
(
(
rx_offset
&
7
)
!=
0
){
// check for 256-bit alignment of input buffer and do DFT directly, else do via intermediate buffer
if
(
(
rx_offset
&
15
)
!=
0
){
memcpy
((
void
*
)
&
tmp_dft_in
,
memcpy
((
void
*
)
&
tmp_dft_in
,
(
void
*
)
&
eNB_common_vars
->
rxdata_7_5kHz
[
eNB_id
][
aa
][(
rx_offset
%
frame_length_samples
)],
(
void
*
)
&
eNB_common_vars
->
rxdata_7_5kHz
[
eNB_id
][
aa
][(
rx_offset
%
frame_length_samples
)],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
dft
(
(
short
*
)
tmp_dft_in
,
dft
(
(
short
*
)
tmp_dft_in
,
(
short
*
)
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
(
short
*
)
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
1
...
...
openair1/PHY/defs.h
View file @
5aa734ab
...
@@ -437,7 +437,7 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -437,7 +437,7 @@ typedef struct PHY_VARS_eNB_s {
// indicator for master/slave (RRU)
// indicator for master/slave (RRU)
int
is_slave
;
int
is_slave
;
void
(
*
do_prach
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame
,
int
subframe
);
void
(
*
do_prach
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame
,
int
subframe
);
void
(
*
fep
)(
struct
PHY_VARS_eNB_s
*
eNB
);
void
(
*
fep
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
int
(
*
td
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
UE_id
,
int
harq_pid
,
int
llr8_flag
);
int
(
*
td
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
UE_id
,
int
harq_pid
,
int
llr8_flag
);
int
(
*
te
)(
struct
PHY_VARS_eNB_s
*
,
uint8_t
*
,
uint8_t
,
LTE_eNB_DLSCH_t
*
,
int
,
uint8_t
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
);
int
(
*
te
)(
struct
PHY_VARS_eNB_s
*
,
uint8_t
*
,
uint8_t
,
LTE_eNB_DLSCH_t
*
,
int
,
uint8_t
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
);
void
(
*
proc_uespec_rx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
);
void
(
*
proc_uespec_rx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
);
...
...
openair1/SCHED/defs.h
View file @
5aa734ab
...
@@ -177,7 +177,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *pr
...
@@ -177,7 +177,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *pr
@param phy_vars_eNB Pointer to eNB variables on which to act
@param phy_vars_eNB Pointer to eNB variables on which to act
@param abstraction_flag Indicator of PHY abstraction
@param abstraction_flag Indicator of PHY abstraction
*/
*/
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
phy_vars_eNB
);
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
phy_vars_eNB
,
eNB_rxtx_proc_t
*
proc
);
/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act
@param phy_vars_eNB Pointer to eNB variables on which to act
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
5aa734ab
...
@@ -2623,7 +2623,7 @@ void init_te_thread(PHY_VARS_eNB *eNB,pthread_attr_t *attr_te) {
...
@@ -2623,7 +2623,7 @@ void init_te_thread(PHY_VARS_eNB *eNB,pthread_attr_t *attr_te) {
}
}
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
)
{
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc_rxtx
)
{
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
...
@@ -2669,28 +2669,27 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
...
@@ -2669,28 +2669,27 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
)
{
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc_rxtx
)
{
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
int
l
;
int
l
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
start_meas
(
&
eNB
->
ofdm_demod_stats
);
start_meas
(
&
eNB
->
ofdm_demod_stats
);
remove_7_5_kHz
(
eNB
,
proc
->
subframe_rx
<<
1
);
remove_7_5_kHz
(
eNB
,
proc
_rxtx
->
subframe_rx
<<
1
);
remove_7_5_kHz
(
eNB
,
1
+
(
proc
->
subframe_rx
<<
1
));
remove_7_5_kHz
(
eNB
,
1
+
(
proc
_rxtx
->
subframe_rx
<<
1
));
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
slot_fep_ul
(
fp
,
slot_fep_ul
(
fp
,
&
eNB
->
common_vars
,
&
eNB
->
common_vars
,
l
,
l
,
proc
->
subframe_rx
<<
1
,
(
proc_rxtx
->
subframe_rx
)
<<
1
,
0
,
0
,
0
0
);
);
slot_fep_ul
(
fp
,
slot_fep_ul
(
fp
,
&
eNB
->
common_vars
,
&
eNB
->
common_vars
,
l
,
l
,
1
+
(
proc
->
subframe_rx
<<
1
),
1
+
(
(
proc_rxtx
->
subframe_rx
)
<<
1
),
0
,
0
,
0
0
);
);
...
@@ -2701,11 +2700,11 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
...
@@ -2701,11 +2700,11 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
/// **** send_IF4 of rxdataF to RCC (no prach now) **** ///
/// **** send_IF4 of rxdataF to RCC (no prach now) **** ///
send_IF4p5
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
IF4p5_PULFFT
,
0
);
send_IF4p5
(
eNB
,
proc
_rxtx
->
frame_rx
,
proc_rxtx
->
subframe_rx
,
IF4p5_PULFFT
,
0
);
}
}
}
}
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
)
{
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc_rxtx
)
{
eNB_proc_t
*
proc
=&
eNB
->
proc
;
eNB_proc_t
*
proc
=&
eNB
->
proc
;
uint8_t
seqno
=
0
;
uint8_t
seqno
=
0
;
...
@@ -2759,14 +2758,14 @@ void do_prach(PHY_VARS_eNB *eNB,int frame,int subframe) {
...
@@ -2759,14 +2758,14 @@ void do_prach(PHY_VARS_eNB *eNB,int frame,int subframe) {
}
}
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
eNB
){
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
){
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
//
eNB_proc_t *proc = &eNB->proc;
LTE_DL_FRAME_PARMS
*
fp
=
&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
&
eNB
->
frame_parms
;
const
int
subframe
=
proc
->
subframe_rx
;
const
int
subframe
=
proc
->
subframe_rx
;
const
int
frame
=
proc
->
frame_rx
;
const
int
frame
=
proc
->
frame_rx
;
int
offset
=
eNB
->
CC_id
;
//
(eNB->single_thread_flag==1) ? 0 : (subframe&1);
int
offset
=
(
eNB
->
single_thread_flag
==
1
)
?
0
:
(
subframe
&
1
);
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
...
@@ -2778,7 +2777,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB){
...
@@ -2778,7 +2777,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB){
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_common_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_common_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
if
(
eNB
->
fep
)
eNB
->
fep
(
eNB
);
if
(
eNB
->
fep
)
eNB
->
fep
(
eNB
,
proc
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON
+
offset
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON
+
offset
,
0
);
}
}
...
...
targets/ARCH/COMMON/common_lib.h
View file @
5aa734ab
...
@@ -247,8 +247,8 @@ typedef struct {
...
@@ -247,8 +247,8 @@ typedef struct {
typedef
struct
{
typedef
struct
{
//! Tx buffer for if device
//! Tx buffer for if device
, keep one per subframe now to allow multithreading
void
*
tx
;
void
*
tx
[
10
]
;
//! Tx buffer (PRACH) for if device
//! Tx buffer (PRACH) for if device
void
*
tx_prach
;
void
*
tx_prach
;
//! Rx buffer for if device
//! Rx buffer for if device
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
5aa734ab
...
@@ -759,7 +759,10 @@ extern "C" {
...
@@ -759,7 +759,10 @@ extern "C" {
// create tx & rx streamer
// create tx & rx streamer
uhd
::
stream_args_t
stream_args_rx
(
"sc16"
,
"sc16"
);
uhd
::
stream_args_t
stream_args_rx
(
"sc16"
,
"sc16"
);
//stream_args_rx.args["spp"] = str(boost::format("%d") % 2048);//(openair0_cfg[0].rx_num_channels*openair0_cfg[0].samples_per_packet));
int
samples
=
openair0_cfg
[
0
].
sample_rate
;
samples
/=
24000
;
// stream_args_rx.args["spp"] = str(boost::format("%d") % samples);
for
(
i
=
0
;
i
<
openair0_cfg
[
0
].
rx_num_channels
;
i
++
)
for
(
i
=
0
;
i
<
openair0_cfg
[
0
].
rx_num_channels
;
i
++
)
stream_args_rx
.
channels
.
push_back
(
i
);
stream_args_rx
.
channels
.
push_back
(
i
);
s
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
s
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.band7.tm1.if4p5.100PRB.usrpb210.conf
View file @
5aa734ab
...
@@ -159,7 +159,7 @@ eNBs =
...
@@ -159,7 +159,7 @@ eNBs =
rrh_gw_config
= (
rrh_gw_config
= (
{
{
local_if_name
=
"eth0"
;
local_if_name
=
"eth0"
;
remote_address
=
"10.10.10.
15
5"
;
remote_address
=
"10.10.10.
21
5"
;
local_address
=
"10.10.10.60"
;
local_address
=
"10.10.10.60"
;
local_port
=
50000
;
#for raw option local port must be the same to remote
local_port
=
50000
;
#for raw option local port must be the same to remote
remote_port
=
50000
;
remote_port
=
50000
;
...
...
targets/RT/USER/lte-enb.c
View file @
5aa734ab
...
@@ -286,7 +286,8 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
...
@@ -286,7 +286,8 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN
,
1
);
slot_offset_F
=
(
subframe
<<
1
)
*
slot_sizeF
;
// compute subframe modulo-2
slot_offset_F
=
((
subframe
&
1
)
<<
1
)
*
slot_sizeF
;
slot_offset
=
subframe
*
phy_vars_eNB
->
frame_parms
.
samples_per_tti
;
slot_offset
=
subframe
*
phy_vars_eNB
->
frame_parms
.
samples_per_tti
;
...
@@ -554,7 +555,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
...
@@ -554,7 +555,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
if
((
eNB
->
do_prach
)
&&
((
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)))
if
((
eNB
->
do_prach
)
&&
((
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)))
eNB
->
do_prach
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
);
eNB
->
do_prach
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
);
phy_procedures_eNB_common_RX
(
eNB
);
phy_procedures_eNB_common_RX
(
eNB
,
proc
);
// UE-specific RX processing for subframe n
// UE-specific RX processing for subframe n
if
(
eNB
->
proc_uespec_rx
)
eNB
->
proc_uespec_rx
(
eNB
,
proc
,
no_relay
);
if
(
eNB
->
proc_uespec_rx
)
eNB
->
proc_uespec_rx
(
eNB
,
proc
,
no_relay
);
...
@@ -864,7 +865,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
...
@@ -864,7 +865,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
unsigned
int
rxs
,
txs
;
unsigned
int
rxs
,
txs
;
int
i
;
int
i
;
int
tx_sfoffset
=
3
;
//(eNB->single_thread_flag == 1) ? 3 : 3;
int
tx_sfoffset
=
3
;
//(eNB->single_thread_flag == 1) ? 3 : 3;
openair0_timestamp
old_ts
;
openair0_timestamp
ts
,
old_ts
;
if
(
proc
->
first_rx
==
0
)
{
if
(
proc
->
first_rx
==
0
)
{
...
@@ -878,7 +879,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
...
@@ -878,7 +879,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
txp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
i
][((
proc
->
subframe_rx
+
tx_sfoffset
)
%
10
)
*
fp
->
samples_per_tti
];
txp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
i
][((
proc
->
subframe_rx
+
tx_sfoffset
)
%
10
)
*
fp
->
samples_per_tti
];
txs
=
eNB
->
rfdevice
.
trx_write_func
(
&
eNB
->
rfdevice
,
txs
=
eNB
->
rfdevice
.
trx_write_func
(
&
eNB
->
rfdevice
,
proc
->
timestamp_rx
+
(
tx_sfoffset
*
fp
->
samples_per_tti
)
-
openair0_cfg
[
0
].
tx_sample_advance
,
proc
->
timestamp_rx
+
eNB
->
ts_offset
+
(
tx_sfoffset
*
fp
->
samples_per_tti
)
-
openair0_cfg
[
0
].
tx_sample_advance
,
txp
,
txp
,
fp
->
samples_per_tti
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_tx
,
fp
->
nb_antennas_tx
,
...
@@ -902,26 +903,32 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
...
@@ -902,26 +903,32 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
old_ts
=
proc
->
timestamp_rx
;
old_ts
=
proc
->
timestamp_rx
;
rxs
=
eNB
->
rfdevice
.
trx_read_func
(
&
eNB
->
rfdevice
,
rxs
=
eNB
->
rfdevice
.
trx_read_func
(
&
eNB
->
rfdevice
,
&
(
proc
->
timestamp_rx
)
,
&
ts
,
rxp
,
rxp
,
fp
->
samples_per_tti
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_rx
);
fp
->
nb_antennas_rx
);
proc
->
timestamp_rx
=
ts
-
eNB
->
ts_offset
;
if
(
rxs
!=
fp
->
samples_per_tti
)
if
(
rxs
!=
fp
->
samples_per_tti
)
LOG_E
(
PHY
,
"rx_rf: Asked for %d samples, got %d from USRP
\n
"
,
fp
->
samples_per_tti
,
rxs
);
LOG_E
(
PHY
,
"rx_rf: Asked for %d samples, got %d from USRP
\n
"
,
fp
->
samples_per_tti
,
rxs
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
if
(
proc
->
first_rx
==
1
)
if
(
proc
->
first_rx
==
1
)
{
eNB
->
ts_offset
=
proc
->
timestamp_rx
;
eNB
->
ts_offset
=
proc
->
timestamp_rx
;
proc
->
timestamp_rx
=
0
;
}
else
{
else
{
if
(
proc
->
timestamp_rx
-
old_ts
!=
fp
->
samples_per_tti
)
{
if
(
proc
->
timestamp_rx
-
old_ts
!=
fp
->
samples_per_tti
)
{
LOG_I
(
PHY
,
"rx_rf: rfdevice timing drift of %d samples
\n
"
,
proc
->
timestamp_rx
-
old_ts
-
fp
->
samples_per_tti
);
LOG_I
(
PHY
,
"rx_rf: rfdevice timing drift of %d samples
\n
"
,
proc
->
timestamp_rx
-
old_ts
-
fp
->
samples_per_tti
);
eNB
->
ts_offset
+=
(
proc
->
timestamp_rx
-
old_ts
-
fp
->
samples_per_tti
);
eNB
->
ts_offset
+=
(
proc
->
timestamp_rx
-
old_ts
-
fp
->
samples_per_tti
);
proc
->
timestamp_rx
=
ts
-
eNB
->
ts_offset
;
}
}
}
}
proc
->
frame_rx
=
(
(
proc
->
timestamp_rx
-
eNB
->
ts_offset
)
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
frame_rx
=
(
proc
->
timestamp_rx
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
subframe_rx
=
(
(
proc
->
timestamp_rx
-
eNB
->
ts_offset
)
/
fp
->
samples_per_tti
)
%
10
;
proc
->
subframe_rx
=
(
proc
->
timestamp_rx
/
fp
->
samples_per_tti
)
%
10
;
proc
->
frame_rx
=
(
proc
->
frame_rx
+
proc
->
frame_offset
)
&
1023
;
proc
->
frame_rx
=
(
proc
->
frame_rx
+
proc
->
frame_offset
)
&
1023
;
proc
->
frame_tx
=
proc
->
frame_rx
;
proc
->
frame_tx
=
proc
->
frame_rx
;
if
(
proc
->
subframe_rx
>
5
)
proc
->
frame_tx
=
(
proc
->
frame_tx
+
1
)
&
1023
;
if
(
proc
->
subframe_rx
>
5
)
proc
->
frame_tx
=
(
proc
->
frame_tx
+
1
)
&
1023
;
...
@@ -1860,8 +1867,8 @@ int start_rf(PHY_VARS_eNB *eNB) {
...
@@ -1860,8 +1867,8 @@ int start_rf(PHY_VARS_eNB *eNB) {
}
}
extern
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
extern
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
extern
void
do_prach
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
);
extern
void
do_prach
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
);
void
init_eNB
(
eNB_func_t
node_function
[],
eNB_timing_t
node_timing
[],
int
nb_inst
,
eth_params_t
*
eth_params
,
int
single_thread_flag
,
int
wait_for_sync
)
{
void
init_eNB
(
eNB_func_t
node_function
[],
eNB_timing_t
node_timing
[],
int
nb_inst
,
eth_params_t
*
eth_params
,
int
single_thread_flag
,
int
wait_for_sync
)
{
...
@@ -1933,6 +1940,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -1933,6 +1940,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
}
}
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
printf
(
"loading transport interface ...
\n
"
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
));
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
));
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
...
...
targets/RT/USER/lte-softmodem.c
View file @
5aa734ab
...
@@ -1622,35 +1622,34 @@ int main( int argc, char **argv )
...
@@ -1622,35 +1622,34 @@ int main( int argc, char **argv )
PHY_vars_eNB_g
[
0
]
=
malloc
(
sizeof
(
PHY_VARS_eNB
*
));
PHY_vars_eNB_g
[
0
]
=
malloc
(
sizeof
(
PHY_VARS_eNB
*
));
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
0
,
frame_parms
[
CC_id
]
->
Nid_cell
,
abstraction_flag
);
PHY_vars_eNB_g
[
0
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
0
,
frame_parms
[
CC_id
]
->
Nid_cell
,
node_function
[
CC_id
],
abstraction_flag
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
CC_id
=
CC_id
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ue_dl_rb_alloc
=
0x1fff
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ue_dl_rb_alloc
=
0x1fff
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
target_ue_dl_mcs
=
target_dl_mcs
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
target_ue_dl_mcs
=
target_dl_mcs
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ue_ul_nb_rb
=
6
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ue_ul_nb_rb
=
6
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
target_ue_ul_mcs
=
target_ul_mcs
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
target_ue_ul_mcs
=
target_ul_mcs
;
if
(
phy_test
==
1
)
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
=
0
;
if
(
phy_test
==
1
)
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
=
0
;
else
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
=
1
;
else
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
=
1
;
if
(
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
==
0
)
{
//set default parameters for testing mode
if
(
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
==
0
)
{
//set default parameters for testing mode
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_ACK_Index
=
beta_ACK
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_ACK_Index
=
beta_ACK
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_RI_Index
=
beta_RI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_RI_Index
=
beta_RI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_CQI_Index
=
beta_CQI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_CQI_Index
=
beta_CQI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
=
i
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
=
i
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_ConfigIndex
=
7
+
(
i
%
3
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_ConfigIndex
=
7
+
(
i
%
3
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
dsr_TransMax
=
sr_n4
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
dsr_TransMax
=
sr_n4
;
}
}
}
}
compute_prach_seq
(
&
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
prach_config_common
,
compute_prach_seq
(
&
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
prach_config_common
,
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
frame_type
,
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
frame_type
,
PHY_vars_eNB_g
[
0
][
CC_id
]
->
X_u
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
X_u
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
rx_total_gain_dB
=
(
int
)
rx_gain
[
CC_id
][
0
];
PHY_vars_eNB_g
[
0
][
CC_id
]
->
rx_total_gain_dB
=
(
int
)
rx_gain
[
CC_id
][
0
];
if
(
frame_parms
[
CC_id
]
->
frame_type
==
FDD
)
{
if
(
frame_parms
[
CC_id
]
->
frame_type
==
FDD
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
0
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
0
;
}
}
...
@@ -1663,7 +1662,7 @@ int main( int argc, char **argv )
...
@@ -1663,7 +1662,7 @@ int main( int argc, char **argv )
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
624
/
4
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
624
/
4
;
}
}
}
}
NB_eNB_INST
=
1
;
NB_eNB_INST
=
1
;
NB_INST
=
1
;
NB_INST
=
1
;
...
@@ -1843,6 +1842,7 @@ int main( int argc, char **argv )
...
@@ -1843,6 +1842,7 @@ int main( int argc, char **argv )
}
}
}
}
else
{
else
{
printf
(
"Initializing eNB threads
\n
"
);
init_eNB
(
node_function
,
node_timing
,
1
,
eth_params
,
single_thread_flag
,
wait_for_sync
);
init_eNB
(
node_function
,
node_timing
,
1
,
eth_params
,
single_thread_flag
,
wait_for_sync
);
number_of_cards
=
1
;
number_of_cards
=
1
;
...
...
targets/RT/USER/rru_if4p5_usrp.gtkw
View file @
5aa734ab
[*]
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*]
Mon Aug 1 18:43:22 2016
[*]
Tue Jan 3 00:00:25 2017
[*]
[*]
[dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Mon
Aug 1 18:41:49 2016
"
[dumpfile_mtime] "Mon
Jan 2 23:59:11 2017
"
[dumpfile_size]
22622
[dumpfile_size]
93728
[savefile] "/home/
papillon
/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
[savefile] "/home/
uprru1/oai
/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
[timestart] 0
[timestart]
2349115700
0
[size] 1301 716
[size] 1301 716
[pos] 309 0
[pos] 309 0
*-19.793451 29983948856 -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
*-19.793451 29983948856 -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
...
@@ -20,7 +20,6 @@ functions.trx_write
...
@@ -20,7 +20,6 @@ functions.trx_write
functions.trx_write_if
functions.trx_write_if
functions.send_if4
functions.send_if4
functions.trx_read_if
functions.trx_read_if
@29
functions.recv_if4
functions.recv_if4
@24
@24
variables.trx_ts[63:0]
variables.trx_ts[63:0]
...
@@ -43,118 +42,5 @@ variables.subframe_number_TX1_eNB[63:0]
...
@@ -43,118 +42,5 @@ variables.subframe_number_TX1_eNB[63:0]
functions.phy_enb_sfgen
functions.phy_enb_sfgen
functions.phy_eNB_slot_fep
functions.phy_eNB_slot_fep
functions.phy_enb_prach_rx
functions.phy_enb_prach_rx
@24
variables.dci_info[63:0]
variables.ue0_BO[63:0]
@420
variables.ue0_BSR[63:0]
variables.ue0_timing_advance[63:0]
@28
functions.macxface_initiate_ra_proc
functions.macxface_terminate_ra_proc
functions.phy_enb_ulsch_msg3
functions.macxface_SR_indication
@420
variables.ue0_SR_ENERGY[63:0]
variables.ue0_SR_THRES[63:0]
@28
functions.phy_enb_ulsch_decoding0
@24
variables.ue0_res0[63:0]
@420
variables.ue0_rssi0[63:0]
variables.ue0_MCS0[63:0]
variables.ue0_RB0[63:0]
@24
variables.ue0_ROUND0[63:0]
variables.ue0_SFN0[63:0]
@28
functions.phy_enb_ulsch_decoding1
@24
variables.ue0_res1[63:0]
@420
variables.ue0_rssi1[63:0]
variables.ue0_MCS1[63:0]
variables.ue0_RB1[63:0]
@24
variables.ue0_ROUND1[63:0]
variables.ue0_SFN1[63:0]
@28
functions.phy_enb_ulsch_decoding2
@24
variables.ue0_res2[63:0]
@420
variables.ue0_rssi2[63:0]
variables.ue0_MCS2[63:0]
variables.ue0_RB2[63:0]
@24
variables.ue0_ROUND2[63:0]
variables.ue0_SFN2[63:0]
@28
functions.phy_enb_ulsch_decoding3
@24
variables.ue0_res3[63:0]
@420
variables.ue0_rssi3[63:0]
variables.ue0_MCS3[63:0]
variables.ue0_RB3[63:0]
@24
variables.ue0_ROUND3[63:0]
variables.ue0_SFN3[63:0]
@28
functions.phy_enb_ulsch_decoding4
@420
variables.ue0_rssi4[63:0]
@24
variables.ue0_res4[63:0]
@420
variables.ue0_MCS4[63:0]
variables.ue0_RB4[63:0]
@24
variables.ue0_ROUND4[63:0]
variables.ue0_SFN4[63:0]
@28
functions.phy_enb_ulsch_decoding5
@24
variables.ue0_res5[63:0]
@420
variables.ue0_rssi5[63:0]
variables.ue0_MCS5[63:0]
variables.ue0_RB5[63:0]
@24
variables.ue0_ROUND5[63:0]
variables.ue0_SFN5[63:0]
@28
functions.phy_enb_ulsch_decoding6
@24
variables.ue0_res6[63:0]
@420
variables.ue0_rssi6[63:0]
variables.ue0_MCS6[63:0]
variables.ue0_RB6[63:0]
@24
variables.ue0_ROUND6[63:0]
variables.ue0_SFN6[63:0]
@28
functions.phy_enb_ulsch_decoding7
@24
variables.ue0_res7[63:0]
@420
variables.ue0_rssi7[63:0]
variables.ue0_MCS7[63:0]
variables.ue0_RB7[63:0]
@24
variables.ue0_ROUND7[63:0]
variables.ue0_SFN7[63:0]
@28
functions.phy_enb_prach_rx
functions.phy_eNB_dlsch_encoding
functions.phy_eNB_dlsch_modulation
functions.phy_eNB_dlsch_scrambling
functions.phy_enb_pdcch_tx
functions.phy_enb_rs_tx
functions.rrc_mac_config_req
functions.rlc_data_req
functions.udp_enb_task
[pattern_trace] 1
[pattern_trace] 1
[pattern_trace] 0
[pattern_trace] 0
targets/SIMU/USER/init_lte.c
View file @
5aa734ab
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
PHY_VARS_eNB
*
init_lte_eNB
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
PHY_VARS_eNB
*
init_lte_eNB
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
eNB_id
,
uint8_t
eNB_id
,
uint8_t
Nid_cell
,
uint8_t
Nid_cell
,
eNB_func_t
node_function
,
uint8_t
abstraction_flag
)
uint8_t
abstraction_flag
)
{
{
...
@@ -54,6 +55,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -54,6 +55,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
PHY_vars_eNB
->
frame_parms
.
nushift
=
PHY_vars_eNB
->
frame_parms
.
Nid_cell
%
6
;
PHY_vars_eNB
->
frame_parms
.
nushift
=
PHY_vars_eNB
->
frame_parms
.
Nid_cell
%
6
;
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
abstraction_flag
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
abstraction_flag
);
LOG_I
(
PHY
,
"init eNB: Node Function %d
\n
"
,
node_function
);
LOG_I
(
PHY
,
"init eNB: Nid_cell %d
\n
"
,
frame_parms
->
Nid_cell
);
LOG_I
(
PHY
,
"init eNB: Nid_cell %d
\n
"
,
frame_parms
->
Nid_cell
);
LOG_I
(
PHY
,
"init eNB: frame_type %d,tdd_config %d
\n
"
,
frame_parms
->
frame_type
,
frame_parms
->
tdd_config
);
LOG_I
(
PHY
,
"init eNB: frame_type %d,tdd_config %d
\n
"
,
frame_parms
->
frame_type
,
frame_parms
->
tdd_config
);
LOG_I
(
PHY
,
"init eNB: number of ue max %d number of enb max %d number of harq pid max %d
\n
"
,
LOG_I
(
PHY
,
"init eNB: number of ue max %d number of enb max %d number of harq pid max %d
\n
"
,
...
@@ -61,27 +63,33 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -61,27 +63,33 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
LOG_I
(
PHY
,
"init eNB: N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
LOG_I
(
PHY
,
"init eNB: N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
LOG_I
(
PHY
,
"init eNB: prach_config_index %d
\n
"
,
frame_parms
->
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
);
LOG_I
(
PHY
,
"init eNB: prach_config_index %d
\n
"
,
frame_parms
->
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
);
if
(
node_function
>=
NGFI_RRU_IF5
)
// For RRU, don't allocate DLSCH/ULSCH Transport channel buffers
return
(
PHY_vars_eNB
);
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
LOG_I
(
PHY
,
"Allocating Transport Channel Buffers for DLSCH, UE %d
\n
"
,
i
);
for
(
j
=
0
;
j
<
2
;
j
++
)
{
for
(
j
=
0
;
j
<
2
;
j
++
)
{
PHY_vars_eNB
->
dlsch
[
i
][
j
]
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
PHY_vars_eNB
->
dlsch
[
i
][
j
]
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
if
(
!
PHY_vars_eNB
->
dlsch
[
i
][
j
])
{
if
(
!
PHY_vars_eNB
->
dlsch
[
i
][
j
])
{
LOG_E
(
PHY
,
"Can't get eNB dlsch structures for UE %d
\n
"
,
i
);
LOG_E
(
PHY
,
"Can't get eNB dlsch structures for UE %d
\n
"
,
i
);
exit
(
-
1
);
exit
(
-
1
);
}
else
{
}
else
{
LOG_D
(
PHY
,
"dlsch[%d][%d] => %p
\n
"
,
i
,
j
,
PHY_vars_eNB
->
dlsch
[
i
][
j
]);
LOG_D
(
PHY
,
"dlsch[%d][%d] => %p
\n
"
,
i
,
j
,
PHY_vars_eNB
->
dlsch
[
i
][
j
]);
PHY_vars_eNB
->
dlsch
[
i
][
j
]
->
rnti
=
0
;
PHY_vars_eNB
->
dlsch
[
i
][
j
]
->
rnti
=
0
;
}
}
}
}
LOG_I
(
PHY
,
"Allocating Transport Channel Buffer for ULSCH, UE %d
\n
"
);
PHY_vars_eNB
->
ulsch
[
1
+
i
]
=
new_eNB_ulsch
(
MAX_TURBO_ITERATIONS
,
frame_parms
->
N_RB_UL
,
abstraction_flag
);
PHY_vars_eNB
->
ulsch
[
1
+
i
]
=
new_eNB_ulsch
(
MAX_TURBO_ITERATIONS
,
frame_parms
->
N_RB_UL
,
abstraction_flag
);
if
(
!
PHY_vars_eNB
->
ulsch
[
1
+
i
])
{
if
(
!
PHY_vars_eNB
->
ulsch
[
1
+
i
])
{
LOG_E
(
PHY
,
"Can't get eNB ulsch structures
\n
"
);
LOG_E
(
PHY
,
"Can't get eNB ulsch structures
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
// this is the transmission mode for the signalling channels
// this is the transmission mode for the signalling channels
// this will be overwritten with the real transmission mode by the RRC once the UE is connected
// this will be overwritten with the real transmission mode by the RRC once the UE is connected
PHY_vars_eNB
->
transmission_mode
[
i
]
=
frame_parms
->
nb_antennas_tx_eNB
==
1
?
1
:
2
;
PHY_vars_eNB
->
transmission_mode
[
i
]
=
frame_parms
->
nb_antennas_tx_eNB
==
1
?
1
:
2
;
...
@@ -91,7 +99,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -91,7 +99,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
gettimeofday
(
&
ts
,
NULL
);
gettimeofday
(
&
ts
,
NULL
);
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
reference_timestamp_ms
=
ts
.
tv_sec
*
1000
+
ts
.
tv_usec
/
1000
;
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
reference_timestamp_ms
=
ts
.
tv_sec
*
1000
+
ts
.
tv_usec
/
1000
;
int
j
;
int
j
;
for
(
j
=
0
;
j
<
10
;
j
++
)
{
for
(
j
=
0
;
j
<
10
;
j
++
)
{
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_rss_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_rss_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_rssi_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_rssi_list
[
j
]);
...
@@ -99,7 +107,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -99,7 +107,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_timing_advance_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_timing_advance_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_timing_update_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_timing_update_list
[
j
]);
}
}
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_rss_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_rss_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_rssi_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_rssi_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_subcarrier_rss_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_subcarrier_rss_list
);
...
@@ -107,37 +115,37 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -107,37 +115,37 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_timing_update_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_timing_update_list
);
#endif
#endif
}
}
// ULSCH for RA
// ULSCH for RA
PHY_vars_eNB
->
ulsch
[
0
]
=
new_eNB_ulsch
(
MAX_TURBO_ITERATIONS
,
frame_parms
->
N_RB_UL
,
abstraction_flag
);
PHY_vars_eNB
->
ulsch
[
0
]
=
new_eNB_ulsch
(
MAX_TURBO_ITERATIONS
,
frame_parms
->
N_RB_UL
,
abstraction_flag
);
if
(
!
PHY_vars_eNB
->
ulsch
[
0
])
{
if
(
!
PHY_vars_eNB
->
ulsch
[
0
])
{
LOG_E
(
PHY
,
"Can't get eNB ulsch structures
\n
"
);
LOG_E
(
PHY
,
"Can't get eNB ulsch structures
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
PHY_vars_eNB
->
dlsch_SI
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
PHY_vars_eNB
->
dlsch_SI
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
LOG_D
(
PHY
,
"eNB %d : SI %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_SI
);
LOG_D
(
PHY
,
"eNB %d : SI %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_SI
);
PHY_vars_eNB
->
dlsch_ra
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
PHY_vars_eNB
->
dlsch_ra
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
LOG_D
(
PHY
,
"eNB %d : RA %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_ra
);
LOG_D
(
PHY
,
"eNB %d : RA %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_ra
);
PHY_vars_eNB
->
dlsch_MCH
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
0
);
PHY_vars_eNB
->
dlsch_MCH
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
0
);
LOG_D
(
PHY
,
"eNB %d : MCH %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_MCH
);
LOG_D
(
PHY
,
"eNB %d : MCH %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_MCH
);
PHY_vars_eNB
->
rx_total_gain_dB
=
130
;
PHY_vars_eNB
->
rx_total_gain_dB
=
130
;
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
PHY_vars_eNB
->
mu_mimo_mode
[
i
].
dl_pow_off
=
2
;
PHY_vars_eNB
->
mu_mimo_mode
[
i
].
dl_pow_off
=
2
;
PHY_vars_eNB
->
check_for_total_transmissions
=
0
;
PHY_vars_eNB
->
check_for_total_transmissions
=
0
;
PHY_vars_eNB
->
check_for_MUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
check_for_MUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
FULL_MUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
FULL_MUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
check_for_SUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
check_for_SUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
frame_parms
.
pucch_config_common
.
deltaPUCCH_Shift
=
1
;
PHY_vars_eNB
->
frame_parms
.
pucch_config_common
.
deltaPUCCH_Shift
=
1
;
return
(
PHY_vars_eNB
);
return
(
PHY_vars_eNB
);
}
}
...
@@ -271,7 +279,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
...
@@ -271,7 +279,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
PHY_vars_eNB_g
[
eNB_id
]
=
(
PHY_VARS_eNB
**
)
malloc
(
MAX_NUM_CCs
*
sizeof
(
PHY_VARS_eNB
*
));
PHY_vars_eNB_g
[
eNB_id
]
=
(
PHY_VARS_eNB
**
)
malloc
(
MAX_NUM_CCs
*
sizeof
(
PHY_VARS_eNB
*
));
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
eNB_id
,
Nid_cell
,
abstraction_flag
);
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
eNB_id
,
Nid_cell
,
eNodeB_3GPP
,
abstraction_flag
);
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
Mod_id
=
eNB_id
;
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
Mod_id
=
eNB_id
;
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
CC_id
=
CC_id
;
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
CC_id
=
CC_id
;
}
}
...
...
targets/SIMU/USER/init_lte.h
View file @
5aa734ab
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
PHY_VARS_eNB
*
init_lte_eNB
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
PHY_VARS_eNB
*
init_lte_eNB
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
eNB_id
,
uint8_t
eNB_id
,
uint8_t
Nid_cell
,
uint8_t
Nid_cell
,
eNB_func_t
node_function
,
uint8_t
abstraction_flag
);
uint8_t
abstraction_flag
);
PHY_VARS_UE
*
init_lte_UE
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
PHY_VARS_UE
*
init_lte_UE
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
...
...
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