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
8d056957
Commit
8d056957
authored
Feb 26, 2021
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/benetel_driver_update' into integration_2021_wk09_b
parents
17d4c5c2
2651cd0c
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
276 additions
and
244 deletions
+276
-244
common/utils/T/T_defs.h
common/utils/T/T_defs.h
+2
-2
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+4
-0
executables/nr-gnb.c
executables/nr-gnb.c
+6
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+7
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+7
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+3
-2
targets/ARCH/ETHERNET/benetel/4g/benetel.c
targets/ARCH/ETHERNET/benetel/4g/benetel.c
+42
-34
targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
+12
-24
targets/ARCH/ETHERNET/benetel/4g/low.c
targets/ARCH/ETHERNET/benetel/4g/low.c
+20
-21
targets/ARCH/ETHERNET/benetel/4g/low.h
targets/ARCH/ETHERNET/benetel/4g/low.h
+4
-3
targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c
targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c
+2
-1
targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c
targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c
+6
-3
targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h
targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h
+5
-4
targets/ARCH/ETHERNET/benetel/5g/benetel.c
targets/ARCH/ETHERNET/benetel/5g/benetel.c
+47
-34
targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
+28
-48
targets/ARCH/ETHERNET/benetel/5g/low.c
targets/ARCH/ETHERNET/benetel/5g/low.c
+39
-41
targets/ARCH/ETHERNET/benetel/5g/low.h
targets/ARCH/ETHERNET/benetel/5g/low.h
+4
-3
targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c
targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c
+2
-1
targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c
targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c
+10
-5
targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h
targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h
+5
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
+6
-6
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
+13
-7
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+2
-0
No files found.
common/utils/T/T_defs.h
View file @
8d056957
...
...
@@ -44,7 +44,7 @@
/* let's have 100 RBs functional for the basic simulator */
# define T_BUFFER_MAX (1024*64*2)
#else
# define T_BUFFER_MAX (1024*64)
# define T_BUFFER_MAX (1024*64
*2
)
#endif
/* size of the local cache for messages (must be pow(2,something)) */
...
...
@@ -52,7 +52,7 @@
/* we don't need much space for the basic simulator */
# define T_CACHE_SIZE 1024
#else
# define T_CACHE_SIZE (8192
* 2
)
# define T_CACHE_SIZE (8192)
#endif
/* maximum number of bytes a message can contain */
...
...
common/utils/T/T_messages.txt
View file @
8d056957
ID = BENETEL
GROUP = ALL
FORMAT = int,frame : int,slot : buffer,rxdataF
#general logs
ID = ENB_MASTER_TICK
DESC = eNodeB master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
...
...
executables/nr-gnb.c
View file @
8d056957
...
...
@@ -1000,7 +1000,13 @@ void init_eNB_afterRU(void) {
for
(
i
=
0
;
i
<
gNB
->
RU_list
[
ru_id
]
->
nb_rx
;
aa
++
,
i
++
)
{
LOG_I
(
PHY
,
"Attaching RU %d antenna %d to gNB antenna %d
\n
"
,
gNB
->
RU_list
[
ru_id
]
->
idx
,
i
,
aa
);
gNB
->
prach_vars
.
rxsigF
[
aa
]
=
gNB
->
RU_list
[
ru_id
]
->
prach_rxsigF
[
0
][
i
];
#if 0
printf("before %p\n", gNB->common_vars.rxdataF[aa]);
#endif
gNB
->
common_vars
.
rxdataF
[
aa
]
=
gNB
->
RU_list
[
ru_id
]
->
common
.
rxdataF
[
i
];
#if 0
printf("after %p\n", gNB->common_vars.rxdataF[aa]);
#endif
}
}
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
8d056957
...
...
@@ -551,6 +551,11 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
gNB_I0_measurements
(
gNB
);
// measure enegry in SS=10 L=4, nb_rb = 18, first_rb = 0 (corresponds to msg3)
int
offset
=
10
*
gNB
->
frame_parms
.
ofdm_symbol_size
+
gNB
->
frame_parms
.
first_carrier_offset
;
int
power_rxF
=
signal_energy_nodc
(
&
gNB
->
common_vars
.
rxdataF
[
0
][
offset
],
12
*
18
);
LOG_D
(
PHY
,
"frame %d, slot %d: UL signal energy %d
\n
"
,
frame_rx
,
slot_rx
,
power_rxF
);
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_PUCCH_MAX
;
i
++
){
NR_gNB_PUCCH_t
*
pucch
=
gNB
->
pucch
[
i
];
if
(
pucch
)
{
...
...
@@ -646,6 +651,8 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
}
#endif
T
(
T_BENETEL
,
T_INT
(
frame_rx
),
T_INT
(
slot_rx
),
T_BUFFER
(
&
gNB
->
common_vars
.
rxdataF
[
0
][
0
],
2048
*
4
*
14
));
uint8_t
symbol_start
=
ulsch_harq
->
ulsch_pdu
.
start_symbol_index
;
uint8_t
symbol_end
=
symbol_start
+
ulsch_harq
->
ulsch_pdu
.
nr_of_symbols
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH
,
1
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
8d056957
...
...
@@ -371,7 +371,13 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
#define BIT(x) (1 << (x))
const
uint64_t
dlsch_in_slot_bitmap
=
BIT
(
1
)
|
BIT
(
2
)
|
BIT
(
3
)
|
BIT
(
4
)
|
BIT
(
5
)
|
BIT
(
6
)
|
BIT
(
11
)
|
BIT
(
12
)
|
BIT
(
13
)
|
BIT
(
14
)
|
BIT
(
15
)
|
BIT
(
16
);
const
uint64_t
ulsch_in_slot_bitmap
=
BIT
(
8
)
|
BIT
(
18
);
uint8_t
prach_config_index
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
uint64_t
ulsch_in_slot_bitmap
;
if
(
prach_config_index
==
4
)
//this is the PRACH config used in the Benetel RRU. TODO: make this generic for any PRACH config.
ulsch_in_slot_bitmap
=
BIT
(
8
)
|
BIT
(
9
);
else
ulsch_in_slot_bitmap
=
BIT
(
8
)
|
BIT
(
18
);
memset
(
RC
.
nrmac
[
module_idP
]
->
cce_list
[
bwp_id
][
0
],
0
,
MAX_NUM_CCE
*
sizeof
(
int
));
// coreset0
memset
(
RC
.
nrmac
[
module_idP
]
->
cce_list
[
bwp_id
][
1
],
0
,
MAX_NUM_CCE
*
sizeof
(
int
));
// coresetid 1
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
8d056957
...
...
@@ -395,7 +395,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
T_BUFFER
(
sduP
,
sdu_lenP
));
UE_info
->
mac_stats
[
UE_id
].
ulsch_total_bytes_rx
+=
sdu_lenP
;
LOG_D
(
MAC
,
"[gNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu from PHY (rnti %x, UE_id %d) ul_cqi %d
\n
"
,
LOG_D
(
MAC
,
"[gNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu from PHY (rnti %x, UE_id %d) ul_cqi %d
sduP %p
\n
"
,
gnb_mod_idP
,
harq_pid
,
CC_idP
,
...
...
@@ -403,7 +403,8 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
slotP
,
current_rnti
,
UE_id
,
ul_cqi
);
ul_cqi
,
sduP
);
// if not missed detection (10dB threshold for now)
if
(
UE_scheduling_control
->
ul_rssi
<
(
100
+
rssi
))
{
...
...
targets/ARCH/ETHERNET/benetel/4g/benetel.c
View file @
8d056957
...
...
@@ -163,8 +163,8 @@ int trx_benetel_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
cap
->
FH_fmt
=
OAI_IF4p5_only
;
cap
->
num_bands
=
1
;
cap
->
band_list
[
0
]
=
7
;
cap
->
nb_rx
[
0
]
=
1
;
cap
->
nb_tx
[
0
]
=
1
;
cap
->
nb_rx
[
0
]
=
device
->
openair0_cfg
->
rx_num_channels
;
cap
->
nb_tx
[
0
]
=
device
->
openair0_cfg
->
tx_num_channels
;
cap
->
max_pdschReferenceSignalPower
[
0
]
=
-
27
;
cap
->
max_rxgain
[
0
]
=
90
;
...
...
@@ -194,11 +194,12 @@ void benetel_fh_if4p5_south_in(RU_t *ru,
LTE_DL_FRAME_PARMS
*
fp
;
int
symbol
;
int32_t
*
rxdata
;
int
antenna
=
0
;
int
antenna
;
lock_ul_buffer
(
&
s
->
buffers
,
*
subframe
);
next:
while
(
!
(
s
->
buffers
.
ul_busy
[
*
subframe
]
==
0x3fff
||
while
(
!
((
s
->
buffers
.
ul_busy
[
0
][
*
subframe
]
==
0x3fff
&&
s
->
buffers
.
ul_busy
[
1
][
*
subframe
]
==
0x3fff
)
||
s
->
buffers
.
prach_busy
[
*
subframe
]
==
1
))
wait_ul_buffer
(
&
s
->
buffers
,
*
subframe
);
if
(
s
->
buffers
.
prach_busy
[
*
subframe
]
==
1
)
{
...
...
@@ -217,24 +218,27 @@ next:
eNB
=
eNB_list
[
0
];
fp
=
&
eNB
->
frame_parms
;
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
ul
[
*
subframe
][
symbol
*
1200
*
4
]);
for
(
i
=
0
;
i
<
1200
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
}
rxdata
=
&
ru
->
common
.
rxdataF
[
antenna
][
symbol
*
fp
->
ofdm_symbol_size
];
for
(
antenna
=
0
;
antenna
<
ru
->
nb_rx
;
antenna
++
)
{
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
ul
[
antenna
][
*
subframe
][
symbol
*
1200
*
4
]);
for
(
i
=
0
;
i
<
1200
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
}
rxdata
=
&
ru
->
common
.
rxdataF
[
antenna
][
symbol
*
fp
->
ofdm_symbol_size
];
#if 1
memcpy
(
rxdata
+
2048
-
600
,
&
s
->
buffers
.
ul
[
*
subframe
][
symbol
*
1200
*
4
],
600
*
4
);
memcpy
(
rxdata
,
&
s
->
buffers
.
ul
[
*
subframe
][
symbol
*
1200
*
4
]
+
600
*
4
,
600
*
4
);
memcpy
(
rxdata
+
2048
-
600
,
&
s
->
buffers
.
ul
[
antenna
]
[
*
subframe
][
symbol
*
1200
*
4
],
600
*
4
);
memcpy
(
rxdata
,
&
s
->
buffers
.
ul
[
antenna
]
[
*
subframe
][
symbol
*
1200
*
4
]
+
600
*
4
,
600
*
4
);
#endif
}
}
s
->
buffers
.
ul_busy
[
*
subframe
]
=
0
;
s
->
buffers
.
ul_busy
[
0
][
*
subframe
]
=
0
;
s
->
buffers
.
ul_busy
[
1
][
*
subframe
]
=
0
;
signal_ul_buffer
(
&
s
->
buffers
,
*
subframe
);
unlock_ul_buffer
(
&
s
->
buffers
,
*
subframe
);
...
...
@@ -272,45 +276,49 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
LTE_DL_FRAME_PARMS
*
fp
;
int
symbol
;
int32_t
*
txdata
;
int
aa
=
0
;
int
aa
;
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, subframe, timestamp);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
ru
->
proc
.
timestamp_tx
&
0xffffffff
);
lock_dl_buffer
(
&
s
->
buffers
,
subframe
);
if
(
s
->
buffers
.
dl_busy
[
subframe
])
{
if
(
s
->
buffers
.
dl_busy
[
0
][
subframe
]
||
s
->
buffers
.
dl_busy
[
1
][
subframe
])
{
printf
(
"%s: fatal: DL buffer busy for subframe %d
\n
"
,
__FUNCTION__
,
subframe
);
unlock_dl_buffer
(
&
s
->
buffers
,
subframe
);
return
;
}
eNB
=
eNB_list
[
0
];
fp
=
&
eNB
->
frame_parms
;
if
(
ru
->
num_eNB
!=
1
||
ru
->
nb_tx
!=
1
||
fp
->
ofdm_symbol_size
!=
2048
||
if
(
ru
->
num_eNB
!=
1
||
fp
->
ofdm_symbol_size
!=
2048
||
fp
->
Ncp
!=
NORMAL
||
fp
->
symbols_per_tti
!=
14
)
{
printf
(
"%s:%d:%s: unsupported configuration
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
txdata
=
&
ru
->
common
.
txdataF_BF
[
aa
][
symbol
*
fp
->
ofdm_symbol_size
];
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
txdata
=
&
ru
->
common
.
txdataF_BF
[
aa
][
symbol
*
fp
->
ofdm_symbol_size
];
#if 1
memcpy
(
&
s
->
buffers
.
dl
[
subframe
][
symbol
*
1200
*
4
],
txdata
+
2048
-
600
,
600
*
4
);
memcpy
(
&
s
->
buffers
.
dl
[
subframe
][
symbol
*
1200
*
4
]
+
600
*
4
,
txdata
+
1
,
600
*
4
);
memcpy
(
&
s
->
buffers
.
dl
[
aa
]
[
subframe
][
symbol
*
1200
*
4
],
txdata
+
2048
-
600
,
600
*
4
);
memcpy
(
&
s
->
buffers
.
dl
[
aa
]
[
subframe
][
symbol
*
1200
*
4
]
+
600
*
4
,
txdata
+
1
,
600
*
4
);
#endif
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
dl
[
subframe
][
symbol
*
1200
*
4
]);
for
(
i
=
0
;
i
<
1200
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
dl
[
aa
][
subframe
][
symbol
*
1200
*
4
]);
for
(
i
=
0
;
i
<
1200
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
}
}
}
s
->
buffers
.
dl_busy
[
subframe
]
=
0x3fff
;
s
->
buffers
.
dl_busy
[
0
][
subframe
]
=
0x3fff
;
s
->
buffers
.
dl_busy
[
1
][
subframe
]
=
0x3fff
;
unlock_dl_buffer
(
&
s
->
buffers
,
subframe
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU
+
ru
->
idx
,
ru
->
proc
.
frame_tx
);
...
...
targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
View file @
8d056957
...
...
@@ -233,19 +233,20 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
if
(
PAYLOAD_1
==
0x12
&&
PAYLOAD_2
==
0xce
&&
ANT_NUM
==
0x00
)
{
if
(
PAYLOAD_1
==
0x12
&&
PAYLOAD_2
==
0xce
)
{
p
.
frame
=
FRAME
;
p
.
subframe
=
SUBFRAME
>>
4
;
p
.
slot
=
0
;
/* unused */
p
.
symbol
=
SYMBOL
;
p
.
antenna
=
0
;
p
.
antenna
=
ANT_NUM
;
memcpy
(
p
.
iq
,
IQ_ptr
,
4800
);
store_ul
(
bs
,
&
p
);
}
// U-PLANE UL
ANT_0
PROCESSING
if
(
PAYLOAD_1
==
0x12
&&
PAYLOAD_2
==
0xce
&&
ANT_NUM
==
0x00
&&
dl_start
==
1
)
// U-PLANE UL PROCESSING
if
(
PAYLOAD_1
==
0x12
&&
PAYLOAD_2
==
0xce
&&
dl_start
==
1
)
{
int
a
=
ANT_NUM
;
int
tx_frame
=
FRAME
;
int
tx_subframe
=
SUBFRAME
>>
4
;
int
tx_symbol
=
SYMBOL
+
5
;
...
...
@@ -266,33 +267,20 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
SUBFRAME
=
tx_subframe
<<
4
;
SYMBOL
=
tx_symbol
;
/*
antenna 0 -
send actual DL data (if available) */
/* send actual DL data (if available) */
lock_dl_buffer
(
bs
->
buffers
,
tx_subframe
);
if
(
!
(
bs
->
buffers
->
dl_busy
[
tx_subframe
]
&
(
1
<<
tx_symbol
)))
{
printf
(
"%s: warning, DL underflow (sf.symbol %d.%d)
\n
"
,
__FUNCTION__
,
if
(
!
(
bs
->
buffers
->
dl_busy
[
a
][
tx_subframe
]
&
(
1
<<
tx_symbol
)))
{
printf
(
"%s: warning, DL underflow (antenna %d sf.symbol %d.%d)
\n
"
,
__FUNCTION__
,
a
,
tx_subframe
,
tx_symbol
);
memset
(
IQ_ptr
,
0
,
1200
*
4
);
}
else
{
memcpy
(
IQ_ptr
,
bs
->
buffers
->
dl
[
tx_subframe
]
+
tx_symbol
*
1200
*
4
,
memcpy
(
IQ_ptr
,
bs
->
buffers
->
dl
[
a
][
tx_subframe
]
+
tx_symbol
*
1200
*
4
,
1200
*
4
);
}
bs
->
buffers
->
dl_busy
[
tx_subframe
]
&=
~
(
1
<<
tx_symbol
);
bs
->
buffers
->
dl_busy
[
a
][
tx_subframe
]
&=
~
(
1
<<
tx_symbol
);
unlock_dl_buffer
(
bs
->
buffers
,
tx_subframe
);
// fill DL Data for ant 0 with 0 value
// memset(IQ_ptr, 0, 4800);
}
// U-PLANE UL ANT_1 PROCESSING
else
if
(
PAYLOAD_1
==
0x12
&&
PAYLOAD_2
==
0xce
&&
ANT_NUM
==
0x01
&&
dl_start
==
1
)
{
// ANT_NUM = 0x01;
SYMBOL
=
(
SYMBOL
+
5
)
%
14
;
PAYLOAD_2
=
0xc8
;
// fill DL Data for ant 1 with 0 value
memset
(
IQ_ptr
,
0
,
4800
);
}
// U-PLANE PRACH PROCESSING
...
...
targets/ARCH/ETHERNET/benetel/4g/low.c
View file @
8d056957
...
...
@@ -27,37 +27,36 @@
void
store_ul
(
benetel_t
*
bs
,
ul_packet_t
*
ul
)
{
/* only antenna 0 for the moment */
if
(
ul
->
antenna
!=
0
)
return
;
int
a
=
ul
->
antenna
;
if
(
ul
->
subframe
!=
bs
->
next_subframe
||
ul
->
symbol
!=
bs
->
next_symbol
)
{
printf
(
"%s: fatal, expected frame.sf.symbol %d.%d.%d, got %d.%d.%d
\n
"
,
if
(
ul
->
subframe
!=
bs
->
next_subframe
[
a
]
||
ul
->
symbol
!=
bs
->
next_symbol
[
a
]
)
{
printf
(
"%s: fatal,
antenna %d
expected frame.sf.symbol %d.%d.%d, got %d.%d.%d
\n
"
,
__FUNCTION__
,
bs
->
expected_benetel_frame
,
bs
->
next_subframe
,
bs
->
next_symbol
,
a
,
bs
->
expected_benetel_frame
[
a
],
bs
->
next_subframe
[
a
],
bs
->
next_symbol
[
a
],
ul
->
frame
,
ul
->
subframe
,
ul
->
symbol
);
exit
(
1
);
}
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_subframe
);
if
(
bs
->
buffers
->
ul_busy
[
bs
->
next_subframe
]
&
(
1
<<
bs
->
next_symbol
))
{
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_subframe
[
a
]
);
if
(
bs
->
buffers
->
ul_busy
[
a
][
bs
->
next_subframe
[
a
]]
&
(
1
<<
bs
->
next_symbol
[
a
]
))
{
printf
(
"%s: warning, UL overflow (sf.symbol %d.%d)
\n
"
,
__FUNCTION__
,
bs
->
next_subframe
,
bs
->
next_symbol
);
bs
->
next_subframe
[
a
],
bs
->
next_symbol
[
a
]
);
}
memcpy
(
bs
->
buffers
->
ul
[
bs
->
next_subframe
]
+
bs
->
next_symbol
*
1200
*
4
,
memcpy
(
bs
->
buffers
->
ul
[
a
][
bs
->
next_subframe
[
a
]]
+
bs
->
next_symbol
[
a
]
*
1200
*
4
,
ul
->
iq
,
1200
*
4
);
bs
->
buffers
->
ul_busy
[
bs
->
next_subframe
]
|=
(
1
<<
bs
->
next_symbol
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_subframe
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_subframe
);
bs
->
buffers
->
ul_busy
[
a
][
bs
->
next_subframe
[
a
]]
|=
(
1
<<
bs
->
next_symbol
[
a
]
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_subframe
[
a
]
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_subframe
[
a
]
);
bs
->
next_symbol
++
;
if
(
bs
->
next_symbol
==
14
)
{
bs
->
next_symbol
=
0
;
bs
->
next_subframe
=
(
bs
->
next_subframe
+
1
)
%
10
;
if
(
bs
->
next_subframe
==
0
)
{
bs
->
expected_benetel_frame
++
;
bs
->
expected_benetel_frame
&=
255
;
bs
->
next_symbol
[
a
]
++
;
if
(
bs
->
next_symbol
[
a
]
==
14
)
{
bs
->
next_symbol
[
a
]
=
0
;
bs
->
next_subframe
[
a
]
=
(
bs
->
next_subframe
[
a
]
+
1
)
%
10
;
if
(
bs
->
next_subframe
[
a
]
==
0
)
{
bs
->
expected_benetel_frame
[
a
]
++
;
bs
->
expected_benetel_frame
[
a
]
&=
255
;
}
}
}
...
...
targets/ARCH/ETHERNET/benetel/4g/low.h
View file @
8d056957
...
...
@@ -26,9 +26,10 @@
typedef
struct
{
shared_buffers
*
buffers
;
int
next_subframe
;
int
next_symbol
;
int
expected_benetel_frame
;
/* [2] is for two antennas */
int
next_subframe
[
2
];
int
next_symbol
[
2
];
int
expected_benetel_frame
[
2
];
char
*
dpdk_main_command_line
;
}
benetel_t
;
...
...
targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c
View file @
8d056957
...
...
@@ -68,7 +68,8 @@ void *benetel_start_dpdk(char *ifname, shared_buffers *buffers, char *dpdk_main_
bs
->
buffers
=
buffers
;
bs
->
expected_benetel_frame
=
255
;
bs
->
expected_benetel_frame
[
0
]
=
255
;
bs
->
expected_benetel_frame
[
1
]
=
255
;
bs
->
dpdk_main_command_line
=
dpdk_main_command_line
;
...
...
targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c
View file @
8d056957
...
...
@@ -44,9 +44,12 @@ void init_buffers(shared_buffers *s)
/* in FDD the eNB's first transmitted DL subframe is 4 but the device
* needs to have subframes 1, 2 and 3 ready. Let's pretend there are ready.
*/
s
->
dl_busy
[
1
]
=
0x3fff
;
s
->
dl_busy
[
2
]
=
0x3fff
;
s
->
dl_busy
[
3
]
=
0x3fff
;
s
->
dl_busy
[
0
][
1
]
=
0x3fff
;
s
->
dl_busy
[
0
][
2
]
=
0x3fff
;
s
->
dl_busy
[
0
][
3
]
=
0x3fff
;
s
->
dl_busy
[
1
][
1
]
=
0x3fff
;
s
->
dl_busy
[
1
][
2
]
=
0x3fff
;
s
->
dl_busy
[
1
][
3
]
=
0x3fff
;
}
void
lock_dl_buffer
(
shared_buffers
*
s
,
int
subframe
)
...
...
targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h
View file @
8d056957
...
...
@@ -26,10 +26,11 @@
#include <stdint.h>
typedef
struct
{
unsigned
char
dl
[
10
][
14
*
1200
*
4
];
unsigned
char
ul
[
10
][
14
*
1200
*
4
];
uint16_t
dl_busy
[
10
];
uint16_t
ul_busy
[
10
];
/* [2] is for two antennas */
unsigned
char
dl
[
2
][
10
][
14
*
1200
*
4
];
unsigned
char
ul
[
2
][
10
][
14
*
1200
*
4
];
uint16_t
dl_busy
[
2
][
10
];
uint16_t
ul_busy
[
2
][
10
];
pthread_mutex_t
m_ul
[
10
];
pthread_cond_t
c_ul
[
10
];
...
...
targets/ARCH/ETHERNET/benetel/5g/benetel.c
View file @
8d056957
...
...
@@ -162,8 +162,9 @@ int trx_benetel_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
cap
->
FH_fmt
=
OAI_IF4p5_only
;
cap
->
num_bands
=
1
;
cap
->
band_list
[
0
]
=
78
;
cap
->
nb_rx
[
0
]
=
1
;
cap
->
nb_tx
[
0
]
=
1
;
/* TODO: hardcoded to 1 for the moment, get the real value somehow... */
cap
->
nb_rx
[
0
]
=
1
;
//device->openair0_cfg->rx_num_channels;
cap
->
nb_tx
[
0
]
=
1
;
//device->openair0_cfg->tx_num_channels;
cap
->
max_pdschReferenceSignalPower
[
0
]
=
-
27
;
cap
->
max_rxgain
[
0
]
=
90
;
...
...
@@ -201,12 +202,13 @@ void benetel_fh_if4p5_south_in(RU_t *ru,
NR_DL_FRAME_PARMS
*
fp
;
int
symbol
;
int32_t
*
rxdata
;
int
antenna
=
0
;
int
antenna
;
lock_ul_buffer
(
&
s
->
buffers
,
*
slot
);
#if 1
next:
while
(
!
(
s
->
buffers
.
ul_busy
[
*
slot
]
==
0x3fff
||
while
(
!
((
s
->
buffers
.
ul_busy
[
0
][
*
slot
]
==
0x3fff
&&
s
->
buffers
.
ul_busy
[
1
][
*
slot
]
==
0x3fff
)
||
s
->
buffers
.
prach_busy
[
*
slot
]
==
1
))
wait_ul_buffer
(
&
s
->
buffers
,
*
slot
);
if
(
s
->
buffers
.
prach_busy
[
*
slot
]
==
1
)
{
...
...
@@ -226,24 +228,31 @@ next:
#endif
fp
=
ru
->
nr_frame_parms
;
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
ul
[
*
slot
][
symbol
*
1272
*
4
]);
for
(
i
=
0
;
i
<
1272
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
}
rxdata
=
&
ru
->
common
.
rxdataF
[
antenna
][
symbol
*
fp
->
ofdm_symbol_size
];
for
(
antenna
=
0
;
antenna
<
ru
->
nb_rx
;
antenna
++
)
{
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
int
i
;
int16_t
*
p
=
(
int16_t
*
)(
&
s
->
buffers
.
ul
[
antenna
][
*
slot
][
symbol
*
1272
*
4
]);
for
(
i
=
0
;
i
<
1272
*
2
;
i
++
)
{
p
[
i
]
=
(
int16_t
)(
ntohs
(
p
[
i
]))
/
16
;
}
rxdata
=
&
ru
->
common
.
rxdataF
[
antenna
][
symbol
*
fp
->
ofdm_symbol_size
];
#if 0
if (*slot == 0 && symbol == 0)
printf("rxdata in benetel_fh_if4p5_south_in %p\n", &ru->common.rxdataF[antenna][0]);
#endif
#if 1
memcpy
(
rxdata
+
2048
-
1272
/
2
,
&
s
->
buffers
.
ul
[
*
slot
][
symbol
*
1272
*
4
],
(
1272
/
2
)
*
4
);
memcpy
(
rxdata
,
&
s
->
buffers
.
ul
[
*
slot
][
symbol
*
1272
*
4
]
+
(
1272
/
2
)
*
4
,
(
1272
/
2
)
*
4
);
memcpy
(
rxdata
+
2048
-
1272
/
2
,
&
s
->
buffers
.
ul
[
antenna
]
[
*
slot
][
symbol
*
1272
*
4
],
(
1272
/
2
)
*
4
);
memcpy
(
rxdata
,
&
s
->
buffers
.
ul
[
antenna
]
[
*
slot
][
symbol
*
1272
*
4
]
+
(
1272
/
2
)
*
4
,
(
1272
/
2
)
*
4
);
#endif
}
}
s
->
buffers
.
ul_busy
[
*
slot
]
=
0
;
s
->
buffers
.
ul_busy
[
0
][
*
slot
]
=
0
;
s
->
buffers
.
ul_busy
[
1
][
*
slot
]
=
0
;
signal_ul_buffer
(
&
s
->
buffers
,
*
slot
);
unlock_ul_buffer
(
&
s
->
buffers
,
*
slot
);
...
...
@@ -281,43 +290,47 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
NR_DL_FRAME_PARMS
*
fp
;
int
symbol
;
int32_t
*
txdata
;
int
aa
=
0
;
int
aa
;
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, slot, timestamp);
lock_dl_buffer
(
&
s
->
buffers
,
slot
);
if
(
s
->
buffers
.
dl_busy
[
slot
])
{
if
(
s
->
buffers
.
dl_busy
[
0
][
slot
]
||
s
->
buffers
.
dl_busy
[
1
][
slot
])
{
printf
(
"%s: fatal: DL buffer busy for subframe %d
\n
"
,
__FUNCTION__
,
slot
);
unlock_dl_buffer
(
&
s
->
buffers
,
slot
);
return
;
}
fp
=
ru
->
nr_frame_parms
;
if
(
ru
->
num_gNB
!=
1
||
ru
->
nb_tx
!=
1
||
fp
->
ofdm_symbol_size
!=
2048
||
if
(
ru
->
num_gNB
!=
1
||
fp
->
ofdm_symbol_size
!=
2048
||
fp
->
Ncp
!=
NORMAL
||
fp
->
symbols_per_slot
!=
14
)
{
printf
(
"%s:%d:%s: unsupported configuration
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
txdata
=
&
ru
->
common
.
txdataF_BF
[
aa
][
symbol
*
fp
->
ofdm_symbol_size
];
for
(
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
{
for
(
symbol
=
0
;
symbol
<
14
;
symbol
++
)
{
txdata
=
&
ru
->
common
.
txdataF_BF
[
aa
][
symbol
*
fp
->
ofdm_symbol_size
];
#if 1
memcpy
(
&
s
->
buffers
.
dl
[
slot
][
symbol
*
1272
*
4
],
txdata
+
2048
-
(
1272
/
2
),
(
1272
/
2
)
*
4
);
memcpy
(
&
s
->
buffers
.
dl
[
slot
][
symbol
*
1272
*
4
]
+
(
1272
/
2
)
*
4
,
txdata
,
(
1272
/
2
)
*
4
);
memcpy
(
&
s
->
buffers
.
dl
[
aa
]
[
slot
][
symbol
*
1272
*
4
],
txdata
+
2048
-
(
1272
/
2
),
(
1272
/
2
)
*
4
);
memcpy
(
&
s
->
buffers
.
dl
[
aa
]
[
slot
][
symbol
*
1272
*
4
]
+
(
1272
/
2
)
*
4
,
txdata
,
(
1272
/
2
)
*
4
);
#endif
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
dl
[
slot
][
symbol
*
1272
*
4
]);
for
(
i
=
0
;
i
<
1272
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
int
i
;
uint16_t
*
p
=
(
uint16_t
*
)(
&
s
->
buffers
.
dl
[
aa
][
slot
][
symbol
*
1272
*
4
]);
for
(
i
=
0
;
i
<
1272
*
2
;
i
++
)
{
p
[
i
]
=
htons
(
p
[
i
]);
}
}
}
s
->
buffers
.
dl_busy
[
slot
]
=
0x3fff
;
s
->
buffers
.
dl_busy
[
0
][
slot
]
=
0x3fff
;
s
->
buffers
.
dl_busy
[
1
][
slot
]
=
0x3fff
;
unlock_dl_buffer
(
&
s
->
buffers
,
slot
);
}
...
...
targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
View file @
8d056957
...
...
@@ -243,21 +243,22 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
&&
ANT_NUM
==
0x00
)
{
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
)
{
int
subframe
=
SUBFRAME
>>
4
;
int
slot
=
((
SUBFRAME
&
0x0f
)
<<
2
)
|
((
SYMBOL
>>
6
)
&
0x03
);
p
.
frame
=
FRAME
;
p
.
slot
=
subframe
*
2
+
slot
;
p
.
symbol
=
SYMBOL
&
0x3f
;
p
.
antenna
=
0
;
p
.
antenna
=
ANT_NUM
;
memcpy
(
p
.
iq
,
IQ_ptr
,
5088
);
store_ul
(
bs
,
&
p
);
// if (p.symbol==0) printf("store ul f.sl.sy %d.%d.%d\n", p.frame, p.slot, p.symbol);
}
// U-PLANE UL
ANT_0
PROCESSING
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
&&
ANT_NUM
==
0x00
&&
dl_start
==
1
)
// U-PLANE UL PROCESSING
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
&&
dl_start
==
1
)
{
int
a
=
ANT_NUM
&
0x01
;
int
frame
=
FRAME
;
int
subframe
=
SUBFRAME
>>
4
;
int
slot
=
((
SUBFRAME
&
0x0f
)
<<
2
)
|
((
SYMBOL
>>
6
)
&
0x03
);
...
...
@@ -282,66 +283,45 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
}
ANT_NUM
=
0x00
;
// Mask the symbol bits from UL packet received and apply the shift.
SYMBOL
=
((
SYMBOL
&
0
b00111111
)
+
10
)
%
14
;
ANT_NUM
=
0x00
;
ANT_NUM
=
a
;
SUBFRAME
=
sf
;
if
(
a
==
1
)
slot_id_ctrl
++
;
// Slot id control for DL
if
(
slot_id_ctrl
>
13
){
SYMBOL
=
SYMBOL
|
0
b01000000
;
if
(
slot_id_ctrl
>
13
)
{
SYMBOL
=
SYMBOL
|
0
b01000000
;
if
(
a
==
1
)
{
if
(
slot_id_ctrl
>
27
)
{
slot_id_ctrl
=
0
;
sf
=
sf
+
0x10
;
if
(
sf
>
0x90
){
sf
=
0
;
}
}
}
}
/*
antenna 0 -
send actual DL data (if available) */
/* send actual DL data (if available) */
oai_slot
=
tx_subframe
*
2
+
tx_slot
;
lock_dl_buffer
(
bs
->
buffers
,
oai_slot
);
if
(
!
(
bs
->
buffers
->
dl_busy
[
oai_slot
]
&
(
1
<<
tx_symbol
)))
{
printf
(
"%s: warning, DL underflow (sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
oai_slot
,
tx_symbol
);
if
(
!
(
bs
->
buffers
->
dl_busy
[
a
][
oai_slot
]
&
(
1
<<
tx_symbol
)))
{
printf
(
"%s: warning, DL underflow (
antenna %d
sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
a
,
oai_slot
,
tx_symbol
);
memset
(
IQ_ptr
,
0
,
1272
*
4
);
}
else
{
memcpy
(
IQ_ptr
,
bs
->
buffers
->
dl
[
oai_slot
]
+
tx_symbol
*
1272
*
4
,
memcpy
(
IQ_ptr
,
bs
->
buffers
->
dl
[
a
][
oai_slot
]
+
tx_symbol
*
1272
*
4
,
1272
*
4
);
}
//printf("DL buffer f sf slot symbol %d %d %d %d (sf %d)\n", tx_frame, tx_subframe, tx_slot, tx_symbol, (int)sf);
bs
->
buffers
->
dl_busy
[
oai_slot
]
&=
~
(
1
<<
tx_symbol
);
bs
->
buffers
->
dl_busy
[
a
][
oai_slot
]
&=
~
(
1
<<
tx_symbol
);
unlock_dl_buffer
(
bs
->
buffers
,
oai_slot
);
// fill DL Data for ant 0 with 0 value
// memset(IQ_ptr, 0, 5088);
}
// U-PLANE UL ANT_1 PROCESSING
if
(
PAYLOAD_1
==
0x13
&&
PAYLOAD_2
==
0xe4
&&
ANT_NUM
==
0x01
&&
dl_start
==
1
)
{
// Mask the symbol bits from UL packet received and apply the shift.
SYMBOL
=
((
SYMBOL
&
0
b00111111
)
+
10
)
%
14
;
ANT_NUM
=
0x01
;
SUBFRAME
=
sf
;
slot_id_ctrl
++
;
// Slot id control for DL
if
(
slot_id_ctrl
>
13
){
SYMBOL
=
SYMBOL
|
0
b01000000
;
if
(
slot_id_ctrl
>
27
){
slot_id_ctrl
=
0
;
sf
=
sf
+
0x10
;
if
(
sf
>
0x90
){
sf
=
0
;
}
}
}
// fill DL Data for ant 1 with 0 value
memset
(
IQ_ptr
,
0
,
5088
);
}
// U-PLANE PRACH PROCESSING
...
...
targets/ARCH/ETHERNET/benetel/5g/low.c
View file @
8d056957
...
...
@@ -35,63 +35,61 @@ printf("store_ul %d.%ld (%ld)\n", (int)(t.tv_sec % 60), t.tv_nsec, t.tv_nsec - o
old = t;
#endif
/* only antenna 0 for the moment */
if
(
ul
->
antenna
!=
0
)
return
;
int
a
=
ul
->
antenna
;
if
(
ul
->
slot
!=
bs
->
next_slot
||
ul
->
symbol
!=
bs
->
next_symbol
)
{
printf
(
"%s: error, expected frame.sl.symbol %d.%d.%d, got %d.%d.%d
\n
"
,
if
(
ul
->
slot
!=
bs
->
next_slot
[
a
]
||
ul
->
symbol
!=
bs
->
next_symbol
[
a
]
)
{
printf
(
"%s: error,
antenna %d
expected frame.sl.symbol %d.%d.%d, got %d.%d.%d
\n
"
,
__FUNCTION__
,
bs
->
expected_benetel_frame
,
bs
->
next_slot
,
bs
->
next_symbol
,
a
,
bs
->
expected_benetel_frame
[
a
],
bs
->
next_slot
[
a
],
bs
->
next_symbol
[
a
]
,
ul
->
frame
,
ul
->
slot
,
ul
->
symbol
);
}
/* fill missing data with 0s */
while
(
ul
->
slot
!=
bs
->
next_slot
||
ul
->
symbol
!=
bs
->
next_symbol
)
{
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
if
(
bs
->
buffers
->
ul_busy
[
bs
->
next_slot
]
&
(
1
<<
bs
->
next_symbol
))
{
printf
(
"%s: warning, UL overflow (sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
bs
->
next_slot
,
bs
->
next_symbol
);
while
(
ul
->
slot
!=
bs
->
next_slot
[
a
]
||
ul
->
symbol
!=
bs
->
next_symbol
[
a
]
)
{
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
[
a
]
);
if
(
bs
->
buffers
->
ul_busy
[
a
][
bs
->
next_slot
[
a
]]
&
(
1
<<
bs
->
next_symbol
[
a
]
))
{
printf
(
"%s: warning,
antenna %d
UL overflow (sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
a
,
bs
->
next_slot
[
a
],
bs
->
next_symbol
[
a
]
);
}
memset
(
bs
->
buffers
->
ul
[
bs
->
next_slot
]
+
bs
->
next_symbol
*
1272
*
4
,
memset
(
bs
->
buffers
->
ul
[
a
][
bs
->
next_slot
[
a
]]
+
bs
->
next_symbol
[
a
]
*
1272
*
4
,
0
,
1272
*
4
);
bs
->
buffers
->
ul_busy
[
bs
->
next_slot
]
|=
(
1
<<
bs
->
next_symbol
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
bs
->
next_symbol
++
;
if
(
bs
->
next_symbol
==
14
)
{
bs
->
next_symbol
=
0
;
bs
->
next_slot
=
(
bs
->
next_slot
+
1
)
%
20
;
if
(
bs
->
next_slot
==
0
)
{
bs
->
expected_benetel_frame
++
;
bs
->
expected_benetel_frame
&=
255
;
bs
->
buffers
->
ul_busy
[
a
][
bs
->
next_slot
[
a
]]
|=
(
1
<<
bs
->
next_symbol
[
a
]
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
[
a
]
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
[
a
]
);
bs
->
next_symbol
[
a
]
++
;
if
(
bs
->
next_symbol
[
a
]
==
14
)
{
bs
->
next_symbol
[
a
]
=
0
;
bs
->
next_slot
[
a
]
=
(
bs
->
next_slot
[
a
]
+
1
)
%
20
;
if
(
bs
->
next_slot
[
a
]
==
0
)
{
bs
->
expected_benetel_frame
[
a
]
++
;
bs
->
expected_benetel_frame
[
a
]
&=
255
;
}
}
}
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
if
(
bs
->
buffers
->
ul_busy
[
bs
->
next_slot
]
&
(
1
<<
bs
->
next_symbol
))
{
printf
(
"%s: warning, UL overflow (sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
bs
->
next_slot
,
bs
->
next_symbol
);
lock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
[
a
]
);
if
(
bs
->
buffers
->
ul_busy
[
a
][
bs
->
next_slot
[
a
]]
&
(
1
<<
bs
->
next_symbol
[
a
]
))
{
printf
(
"%s: warning,
antenna %d
UL overflow (sl.symbol %d.%d)
\n
"
,
__FUNCTION__
,
a
,
bs
->
next_slot
[
a
],
bs
->
next_symbol
[
a
]
);
}
memcpy
(
bs
->
buffers
->
ul
[
bs
->
next_slot
]
+
bs
->
next_symbol
*
1272
*
4
,
memcpy
(
bs
->
buffers
->
ul
[
a
][
bs
->
next_slot
[
a
]]
+
bs
->
next_symbol
[
a
]
*
1272
*
4
,
ul
->
iq
,
1272
*
4
);
bs
->
buffers
->
ul_busy
[
bs
->
next_slot
]
|=
(
1
<<
bs
->
next_symbol
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
);
bs
->
next_symbol
++
;
if
(
bs
->
next_symbol
==
14
)
{
bs
->
next_symbol
=
0
;
bs
->
next_slot
=
(
bs
->
next_slot
+
1
)
%
20
;
if
(
bs
->
next_slot
==
0
)
{
bs
->
expected_benetel_frame
++
;
bs
->
expected_benetel_frame
&=
255
;
bs
->
buffers
->
ul_busy
[
a
][
bs
->
next_slot
[
a
]]
|=
(
1
<<
bs
->
next_symbol
[
a
]
);
signal_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
[
a
]
);
unlock_ul_buffer
(
bs
->
buffers
,
bs
->
next_slot
[
a
]
);
bs
->
next_symbol
[
a
]
++
;
if
(
bs
->
next_symbol
[
a
]
==
14
)
{
bs
->
next_symbol
[
a
]
=
0
;
bs
->
next_slot
[
a
]
=
(
bs
->
next_slot
[
a
]
+
1
)
%
20
;
if
(
bs
->
next_slot
[
a
]
==
0
)
{
bs
->
expected_benetel_frame
[
a
]
++
;
bs
->
expected_benetel_frame
[
a
]
&=
255
;
}
}
}
...
...
targets/ARCH/ETHERNET/benetel/5g/low.h
View file @
8d056957
...
...
@@ -26,9 +26,10 @@
typedef
struct
{
shared_buffers
*
buffers
;
int
next_slot
;
int
next_symbol
;
int
expected_benetel_frame
;
/* [2] is for two antennas */
int
next_slot
[
2
];
int
next_symbol
[
2
];
int
expected_benetel_frame
[
2
];
char
*
dpdk_main_command_line
;
}
benetel_t
;
...
...
targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c
View file @
8d056957
...
...
@@ -68,7 +68,8 @@ void *benetel_start_dpdk(char *ifname, shared_buffers *buffers, char *dpdk_main_
bs
->
buffers
=
buffers
;
bs
->
expected_benetel_frame
=
255
;
bs
->
expected_benetel_frame
[
0
]
=
255
;
bs
->
expected_benetel_frame
[
1
]
=
255
;
bs
->
dpdk_main_command_line
=
dpdk_main_command_line
;
...
...
targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c
View file @
8d056957
...
...
@@ -45,11 +45,16 @@ void init_buffers(shared_buffers *s)
* needs to have slots 1, 2 and 3, 4 and 5 ready. Let's pretend
* they are ready.
*/
s
->
dl_busy
[
1
]
=
0x3fff
;
s
->
dl_busy
[
2
]
=
0x3fff
;
s
->
dl_busy
[
3
]
=
0x3fff
;
s
->
dl_busy
[
4
]
=
0x3fff
;
s
->
dl_busy
[
5
]
=
0x3fff
;
s
->
dl_busy
[
0
][
1
]
=
0x3fff
;
s
->
dl_busy
[
0
][
2
]
=
0x3fff
;
s
->
dl_busy
[
0
][
3
]
=
0x3fff
;
s
->
dl_busy
[
0
][
4
]
=
0x3fff
;
s
->
dl_busy
[
0
][
5
]
=
0x3fff
;
s
->
dl_busy
[
1
][
1
]
=
0x3fff
;
s
->
dl_busy
[
1
][
2
]
=
0x3fff
;
s
->
dl_busy
[
1
][
3
]
=
0x3fff
;
s
->
dl_busy
[
1
][
4
]
=
0x3fff
;
s
->
dl_busy
[
1
][
5
]
=
0x3fff
;
}
void
lock_dl_buffer
(
shared_buffers
*
s
,
int
slot
)
...
...
targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h
View file @
8d056957
...
...
@@ -26,10 +26,11 @@
#include <stdint.h>
typedef
struct
{
unsigned
char
dl
[
20
][
14
*
1272
*
4
];
unsigned
char
ul
[
20
][
14
*
1272
*
4
];
uint16_t
dl_busy
[
20
];
uint16_t
ul_busy
[
20
];
/* [2] is for two antennas */
unsigned
char
dl
[
2
][
20
][
14
*
1272
*
4
];
unsigned
char
ul
[
2
][
20
][
14
*
1272
*
4
];
uint16_t
dl_busy
[
2
][
20
];
uint16_t
ul_busy
[
2
][
20
];
pthread_mutex_t
m_ul
[
20
];
pthread_cond_t
c_ul
[
20
];
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
View file @
8d056957
...
...
@@ -230,12 +230,12 @@ RUs = (
local_if_name
=
"dpdk"
;
sdr_addrs
=
"softmodem -m 2048 -l 35 -n 2 -b 0000:81:00.3 --proc-type auto --file-prefix ggg -- -p 0x1"
;
#sdr_addrs = "softmodem -l 8 -n 2 -- -p 0x2";
remote_address
=
"127.0.0.2"
;
local_address
=
"127.0.0.1"
;
local_portc
=
50000
;
remote_portc
=
50000
;
local_portd
=
50001
;
remote_portd
=
50001
;
#
remote_address = "127.0.0.2";
#
local_address = "127.0.0.1";
#
local_portc = 50000;
#
remote_portc = 50000;
#
local_portd = 50001;
#
remote_portd = 50001;
local_rf
=
"no"
tr_preference
=
"raw_if4p5"
nb_tx
=
1
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
View file @
8d056957
...
...
@@ -23,6 +23,8 @@ gNBs =
ssb_SubcarrierOffset
=
31
; //
0
;
pdsch_AntennaPorts
=
1
;
#pusch_TargetSNRx10 = 200;
#pucch_TargetSNRx10 = 200;
pusch_TargetSNRx10
=
200
;
pucch_TargetSNRx10
=
200
;
...
...
@@ -102,8 +104,9 @@ gNBs =
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
74
;
zeroCorrelationZoneConfig
=
13
;
#preambleReceivedTargetPower = -118;
preambleReceivedTargetPower
= -
104
;
preambleReceivedTargetPower
= -
118
;
#preambleReceivedTargetPower = -104;
#preambleReceivedTargetPower = -108;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
#powerRampingStep
...
...
@@ -149,14 +152,16 @@ gNBs =
initialULBWPstartSymbolAndLength_2
=
52
;
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
#p0_NominalWithGrant =-90;
p0_NominalWithGrant
=-
118
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
#p0_nominal = -90;
p0_nominal
= -
118
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
...
...
@@ -189,7 +194,7 @@ gNBs =
nrofUplinkSymbols
=
4
; //
0
; //
4
;
#ssPBCH_BlockPower = 10;
ssPBCH_BlockPower
=
10
;
ssPBCH_BlockPower
=
-
35
;
}
);
...
...
@@ -229,9 +234,9 @@ gNBs =
{
GNB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.18.1
95
/24"
;
GNB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.18.1
87
/24"
;
GNB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1U
=
"192.168.18.1
95
/24"
;
GNB_IPV4_ADDRESS_FOR_S1U
=
"192.168.18.1
87
/24"
;
GNB_PORT_FOR_S1U
=
2152
;
# Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.2/24"
;
GNB_PORT_FOR_X2C
=
36422
;
# Spec 36422
...
...
@@ -251,6 +256,7 @@ L1s = (
{
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
pusch_proc_threads
=
8
;
}
);
...
...
targets/RT/USER/lte-ru.c
View file @
8d056957
...
...
@@ -2986,6 +2986,7 @@ void RCconfig_RU(void) {
RC
.
ru
[
j
]
->
if_south
=
LOCAL_RF
;
RC
.
ru
[
j
]
->
function
=
NGFI_RRU_IF4p5
;
RC
.
ru
[
j
]
->
eth_params
.
transp_preference
=
ETH_RAW_IF4p5_MODE
;
RC
.
ru
[
j
]
->
has_ctrl_prt
=
1
;
LOG_I
(
PHY
,
"Setting function for RU %d to NGFI_RRU_IF4p5 (raw)
\n
"
,
j
);
}
...
...
@@ -3039,6 +3040,7 @@ else {
RC
.
ru
[
j
]
->
if_south
=
REMOTE_IF4p5
;
RC
.
ru
[
j
]
->
function
=
NGFI_RAU_IF4p5
;
RC
.
ru
[
j
]
->
eth_params
.
transp_preference
=
ETH_RAW_IF4p5_MODE
;
RC
.
ru
[
j
]
->
has_ctrl_prt
=
1
;
if
(
strcmp
(
*
(
RUParamList
.
paramarray
[
j
][
RU_IS_SLAVE_IDX
].
strptr
),
"yes"
)
==
0
)
RC
.
ru
[
j
]
->
is_slave
=
1
;
else
RC
.
ru
[
j
]
->
is_slave
=
0
;
...
...
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