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
lizhongxiao
OpenXG-RAN
Commits
ae884afe
Commit
ae884afe
authored
Jul 24, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
integration of LTE-M SIB1/SI interfaces and scheduling
parent
d56525c8
Changes
20
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1134 additions
and
232 deletions
+1134
-232
openair1/PHY/CODING/defs.h
openair1/PHY/CODING/defs.h
+2
-2
openair1/PHY/CODING/lte_rate_matching.c
openair1/PHY/CODING/lte_rate_matching.c
+2
-2
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+3
-0
openair1/PHY/LTE_TRANSPORT/dci.h
openair1/PHY/LTE_TRANSPORT/dci.h
+1
-4
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+284
-10
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+4
-1
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+20
-20
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+12
-12
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+2
-2
openair1/PHY/defs.h
openair1/PHY/defs.h
+2
-0
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+86
-6
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+84
-2
openair2/LAYER2/MAC/config.c
openair2/LAYER2/MAC/config.c
+28
-22
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+20
-3
openair2/LAYER2/MAC/eNB_scheduler_bch.c
openair2/LAYER2/MAC/eNB_scheduler_bch.c
+467
-62
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+37
-39
openair2/RRC/LITE/defs.h
openair2/RRC/LITE/defs.h
+5
-5
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+68
-38
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+1
-0
targets/SIMU/USER/oaisim.c
targets/SIMU/USER/oaisim.c
+6
-2
No files found.
openair1/PHY/CODING/defs.h
View file @
ae884afe
...
...
@@ -178,6 +178,7 @@ uint32_t generate_dummy_w_cc(uint32_t D, uint8_t *w);
\param Qm modulation order (2,4,6)
\param Nl number of layers (1,2)
\param r segment number
\param nb_rb Number of PRBs
\returns \f$E\f$, the number of coded bits per segment */
...
...
@@ -193,8 +194,7 @@ uint32_t lte_rate_matching_turbo(uint32_t RTC,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
,
uint8_t
nb_rb
,
uint8_t
m
);
uint8_t
nb_rb
);
/**
\brief This is the LTE rate matching algorithm for Convolutionally-coded channels (e.g. BCH,DCI,UCI). It is taken directly from 36-212 (Rel 8 8.6, 2009-03), pages 16-18 )
...
...
openair1/PHY/CODING/lte_rate_matching.c
View file @
ae884afe
...
...
@@ -463,8 +463,8 @@ uint32_t lte_rate_matching_turbo(uint32_t RTC,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
,
uint8_t
nb_rb
,
uint8_t
m
)
uint8_t
nb_rb
)
//
uint8_t m)
{
...
...
openair1/PHY/INIT/lte_init.c
View file @
ae884afe
...
...
@@ -1652,6 +1652,9 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
eNB
->
total_transmitted_bits
=
0
;
eNB
->
total_system_throughput
=
0
;
eNB
->
check_for_MUMIMO_transmissions
=
0
;
while
(
eNB
->
configured
==
0
)
usleep
(
10000
);
LOG_I
(
PHY
,
"[eNB %"
PRIu8
"] Initializing DL_FRAME_PARMS : N_RB_DL %"
PRIu8
", PHICH Resource %d, PHICH Duration %d
\n
"
,
eNB
->
Mod_id
,
fp
->
N_RB_DL
,
fp
->
phich_config_common
.
phich_resource
,
...
...
openair1/PHY/LTE_TRANSPORT/dci.h
View file @
ae884afe
...
...
@@ -29,11 +29,8 @@
* \note
* \warning
*/
#ifndef USER_MODE
#include "PHY/types.h"
#else
#include <stdint.h>
#endif
/// DCI Format Type 0 (5 MHz,TDD0, 27 bits)
struct
DCI0_5MHz_TDD0
{
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
ae884afe
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
ae884afe
...
...
@@ -34,6 +34,7 @@
#include "PHY/defs.h"
#include "PHY/impl_defs_lte.h"
#include "dci.h"
#include "mdci.h"
#include "uci.h"
#ifndef STANDALONE_COMPILE
#include "UTIL/LISTS/list.h"
...
...
@@ -123,7 +124,9 @@ typedef struct {
uint32_t
subframe
;
/// Index of current HARQ round for this DLSCH
uint8_t
round
;
/// MCS format for this DLSCH
/// Modulation order
uint8_t
Qm
;
/// MCS
uint8_t
mcs
;
/// Redundancy-version of the current sub-frame
uint8_t
rvidx
;
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
View file @
ae884afe
...
...
@@ -280,7 +280,7 @@ int dlsch_encoding_2threads0(te_params *tep) {
unsigned
short
nb_rb
=
dlsch
->
harq_processes
[
harq_pid
]
->
nb_rb
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
short
m
=
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
;
//
unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING_W
,
VCD_FUNCTION_IN
);
...
...
@@ -340,11 +340,11 @@ int dlsch_encoding_2threads0(te_params *tep) {
dlsch
->
Mdlharq
,
dlsch
->
Kmimo
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
,
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
r
,
nb_rb
,
m
);
// r
nb_rb
);
//
m); // r
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING_W
,
VCD_FUNCTION_OUT
);
...
...
@@ -400,12 +400,12 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
unsigned
int
A
;
unsigned
char
mod_order
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
short
m
=
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
;
//
unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_IN
);
A
=
dlsch
->
harq_processes
[
harq_pid
]
->
TBS
;
//6228
mod_order
=
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
;
mod_order
=
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
;
G
=
get_G
(
frame_parms
,
nb_rb
,
dlsch
->
harq_processes
[
harq_pid
]
->
rb_alloc
,
mod_order
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
num_pdcch_symbols
,
frame
,
subframe
,
dlsch
->
harq_processes
[
harq_pid
]
->
mimo_mode
==
TM7
?
7
:
0
);
...
...
@@ -524,7 +524,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
// get information for E for the segments that are handled by the worker thread
if
(
r
<
(
dlsch
->
harq_processes
[
harq_pid
]
->
C
>>
1
))
{
int
Nl
=
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
;
int
Qm
=
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
;
int
Qm
=
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
;
int
C
=
dlsch
->
harq_processes
[
harq_pid
]
->
C
;
int
Gp
=
G
/
Nl
/
Qm
;
int
GpmodC
=
Gp
%
C
;
...
...
@@ -544,11 +544,11 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
dlsch
->
Mdlharq
,
dlsch
->
Kmimo
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
,
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
r
,
nb_rb
,
m
);
// r
nb_rb
);
//
m); // r
stop_meas
(
rm_stats
);
}
}
...
...
@@ -584,14 +584,14 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
unsigned
int
A
;
unsigned
char
mod_order
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
short
m
=
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
;
//
unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
uint8_t
beamforming_mode
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_IN
);
A
=
dlsch
->
harq_processes
[
harq_pid
]
->
TBS
;
//6228
// printf("Encoder: A: %d\n",A);
mod_order
=
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
;
mod_order
=
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
;
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
mimo_mode
==
TM7
)
beamforming_mode
=
7
;
...
...
@@ -720,11 +720,11 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
dlsch
->
Mdlharq
,
dlsch
->
Kmimo
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
,
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
r
,
nb_rb
,
m
);
// r
nb_rb
);
//
m); // r
stop_meas
(
rm_stats
);
#ifdef DEBUG_DLSCH_CODING
...
...
@@ -761,14 +761,14 @@ int dlsch_encoding_SIC(PHY_VARS_UE *ue,
unsigned
int
A
;
unsigned
char
mod_order
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
short
m
=
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
;
//
unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
uint8_t
beamforming_mode
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_IN
);
A
=
dlsch
->
harq_processes
[
harq_pid
]
->
TBS
;
//6228
// printf("Encoder: A: %d\n",A);
mod_order
=
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
;
mod_order
=
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
;
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
mimo_mode
==
TM7
)
beamforming_mode
=
7
;
...
...
@@ -897,11 +897,11 @@ int dlsch_encoding_SIC(PHY_VARS_UE *ue,
dlsch
->
Mdlharq
,
dlsch
->
Kmimo
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
)
,
dlsch
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
r
,
nb_rb
,
m
);
// r
nb_rb
);
//
m); // r
stop_meas
(
rm_stats
);
#ifdef DEBUG_DLSCH_CODING
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
ae884afe
...
...
@@ -585,8 +585,8 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
int
first_layer0
=
-
1
;
//= dlsch0_harq->first_layer;
int
Nlayers0
=
-
1
;
// = dlsch0_harq->Nlayers;
uint8_t
mod_order0
=
0
;
// = get_Qm(dlsch0_harq->mcs);
uint8_t
mod_order1
=
0
;
//=2;
uint8_t
mod_order0
=
0
;
uint8_t
mod_order1
=
0
;
uint8_t
precoder_index0
,
precoder_index1
;
uint8_t
*
x1
=
NULL
;
...
...
@@ -640,12 +640,12 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
mimo_mode
=
dlsch0_harq
->
mimo_mode
;
first_layer0
=
dlsch0_harq
->
first_layer
;
Nlayers0
=
dlsch0_harq
->
Nlayers
;
mod_order0
=
get_Qm
(
dlsch0_harq
->
mcs
)
;
mod_order0
=
dlsch0_harq
->
Qm
;
x1
=
dlsch1_harq
->
e
;
// Fill these in later for TM8-10
// Nlayers1 = dlsch1_harq->Nlayers;
// first_layer1 = dlsch1_harq->first_layer;
mod_order1
=
get_Qm
(
dlsch1_harq
->
mcs
)
;
mod_order1
=
dlsch1_harq
->
Qm
;
}
else
if
((
dlsch0_harq
!=
NULL
)
&&
(
dlsch1_harq
==
NULL
)){
//This is for SIS0 TM1, TM6, etc
...
...
@@ -653,7 +653,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
mimo_mode
=
dlsch0_harq
->
mimo_mode
;
first_layer0
=
dlsch0_harq
->
first_layer
;
Nlayers0
=
dlsch0_harq
->
Nlayers
;
mod_order0
=
get_Qm
(
dlsch0_harq
->
mcs
)
;
mod_order0
=
dlsch0_harq
->
Qm
;
}
else
if
((
dlsch0_harq
==
NULL
)
&&
(
dlsch1_harq
!=
NULL
)){
// This is for TM4 retransmission
...
...
@@ -661,7 +661,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
mimo_mode
=
dlsch1_harq
->
mimo_mode
;
first_layer0
=
dlsch1_harq
->
first_layer
;
Nlayers0
=
dlsch1_harq
->
Nlayers
;
mod_order0
=
get_Qm
(
dlsch1_harq
->
mcs
)
;
mod_order0
=
dlsch1_harq
->
Qm
;
}
...
...
@@ -2065,14 +2065,14 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
harq_pid
=
dlsch0
->
harq_ids
[
subframe_offset
];
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
mimo_mode
=
dlsch0_harq
->
mimo_mode
;
mod_order0
=
get_Qm
(
dlsch0_harq
->
mcs
)
;
mod_order0
=
dlsch0_harq
->
Qm
;
rb_alloc
=
dlsch0_harq
->
rb_alloc
;
#ifdef DEBUG_DLSCH_MODULATION
Nl0
=
dlsch0_harq
->
Nl
;
#endif
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
mod_order1
=
get_Qm
(
dlsch1_harq
->
mcs
)
;
mod_order1
=
dlsch1_harq
->
Qm
;
#ifdef DEBUG_DLSCH_MODULATION
Nl1
=
dlsch1_harq
->
Nl
;
#endif
...
...
@@ -2082,7 +2082,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
harq_pid
=
dlsch0
->
harq_ids
[
subframe_offset
];
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
mimo_mode
=
dlsch0_harq
->
mimo_mode
;
mod_order0
=
get_Qm
(
dlsch0_harq
->
mcs
)
;
mod_order0
=
dlsch0_harq
->
Qm
;
rb_alloc
=
dlsch0_harq
->
rb_alloc
;
#ifdef DEBUG_DLSCH_MODULATION
Nl0
=
dlsch0_harq
->
Nl
;
...
...
@@ -2099,7 +2099,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
harq_pid
=
dlsch1
->
harq_ids
[
subframe_offset
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
harq_pid
];
mimo_mode
=
dlsch1_harq
->
mimo_mode
;
mod_order0
=
get_Qm
(
dlsch1_harq
->
mcs
)
;
mod_order0
=
dlsch1_harq
->
Qm
;
rb_alloc
=
dlsch1_harq
->
rb_alloc
;
#ifdef DEBUG_DLSCH_MODULATION
Nl0
=
dlsch1_harq
->
Nl
;
...
...
@@ -2460,7 +2460,7 @@ int dlsch_modulation_SIC(int32_t **sic_buffer,
uint8_t
harq_pid
=
-
1
;
//dlsch0->current_harq_pid;
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
uint32_t
i
,
jj
,
re_allocated
=
0
;
uint8_t
mod_order0
=
get_Qm
(
dlsch0_harq
->
mcs
)
;
uint8_t
mod_order0
=
dlsch0_harq
->
Qm
;
uint8_t
*
x0
=
dlsch0_harq
->
e
;
uint8_t
qam64_table_offset_re
=
0
;
uint8_t
qam64_table_offset_im
=
0
;
...
...
@@ -2599,7 +2599,7 @@ int mch_modulation(int32_t **txdataF,
uint32_t
i
,
jj
,
re_allocated
,
symbol_offset
;
uint16_t
l
,
rb
,
re_offset
;
uint8_t
skip_dc
=
0
;
uint8_t
mod_order
=
get_Qm
(
dlsch
->
harq_processes
[
0
]
->
mcs
)
;
uint8_t
mod_order
=
dlsch
->
harq_processes
[
0
]
->
Qm
;
int16_t
qam16_table_a
[
4
],
qam64_table_a
[
8
];
//,qam16_table_b[4],qam64_table_b[8];
int16_t
*
qam_table_s
;
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
View file @
ae884afe
...
...
@@ -568,8 +568,8 @@ uint32_t ulsch_encoding(uint8_t *a,
get_Qm_ul
(
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
),
1
,
r
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
,
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
// r
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
//
ulsch->harq_processes[harq_pid]->mcs); // r
stop_meas
(
rm_stats
);
#ifdef DEBUG_ULSCH_CODING
...
...
openair1/PHY/defs.h
View file @
ae884afe
...
...
@@ -833,6 +833,8 @@ typedef struct PHY_VARS_eNB_s {
nfapi_crc_indication_pdu_t
crc_pdu_list
[
NFAPI_CRC_IND_MAX_PDU
];
Sched_Rsp_t
Sched_INFO
;
LTE_eNB_PDCCH
pdcch_vars
[
2
];
LTE_eNB_EPDCCH
epdcch_vars
[
2
];
LTE_eNB_MPDCCH
mpdcch_vars
[
2
];
LTE_eNB_COMMON
common_vars
;
LTE_eNB_SRS
srs_vars
[
NUMBER_OF_UE_MAX
];
LTE_eNB_PBCH
pbch
;
...
...
openair1/PHY/impl_defs_lte.h
View file @
ae884afe
...
...
@@ -638,6 +638,10 @@ typedef struct {
/// - first index: tx antenna [0..nb_antennas_tx[
/// - second index: sample [0..]
int32_t
**
txdataF_BF
;
/// \brief holds the transmit data before beamforming for epdcch/mpdcch
/// - first index : tx antenna [0..nb_epdcch_antenna_ports[
/// - second index: sampl [0..]
int32_t
**
txdataF_epdcch
;
/// \brief Holds the receive data in the frequency domain.
/// - first index: rx antenna [0..nb_antennas_rx[
/// - second index: ? [0..2*ofdm_symbol_size*frame_parms->symbols_per_tti[
...
...
@@ -674,7 +678,13 @@ typedef enum {format0,
format2D
,
format3
,
format3A
,
format4
format4
,
format5
,
format6_0A
,
format6_0B
,
format6_1A
,
format6_1B
,
format6_2
}
DCI_format_t
;
typedef
struct
{
...
...
@@ -696,6 +706,74 @@ typedef struct {
uint8_t
dci_pdu
[
8
];
}
DCI_ALLOC_t
;
#define MAX_EPDCCH_PRB 8
typedef
struct
{
/// Length of DCI in bits
uint8_t
dci_length
;
/// Aggregation level
uint8_t
L
;
/// Position of first CCE of the dci
int
firstCCE
;
/// flag to indicate that this is a RA response
boolean_t
ra_flag
;
/// rnti
rnti_t
rnti
;
/// Format
DCI_format_t
format
;
/// epdcch resource assignment (0=localized,1=distributed)
uint8_t
epdcch_resource_assignment_flag
;
/// epdcch index
uint16_t
epdcch_id
;
/// epdcch start symbol
uint8_t
epdcch_start_symbol
;
/// epdcch number of PRBs in set
uint8_t
epdcch_num_prb
;
/// vector of prb ids for set
uint8_t
epdcch_prb_index
[
MAX_EPDCCH_PRB
];
/// LBT parameter for frame configuration
uint8_t
dwpts_symbols
;
/// LBT parameter for frame configuration
uint8_t
initial_lbt_sf
;
/// DCI pdu
uint8_t
dci_pdu
[
8
];
}
eDCI_ALLOC_t
;
typedef
struct
{
/// Length of DCI in bits
uint8_t
dci_length
;
/// Aggregation level
uint8_t
L
;
/// Position of first CCE of the dci
int
firstCCE
;
/// flag to indicate that this is a RA response
boolean_t
ra_flag
;
/// rnti
rnti_t
rnti
;
/// Format
DCI_format_t
format
;
/// harq process index
uint8_t
harq_pid
;
/// Narrowband index
uint8_t
narrowband
;
/// number of PRB pairs for MPDCCH
uint8_t
number_of_prb_pairs
;
/// mpdcch resource assignement (0=localized,1=distributed)
uint8_t
resource_block_assignment
;
/// transmission type
uint8_t
transmission_type
;
/// mpdcch start symbol
uint8_t
start_symbol
;
/// CE mode (1=ModeA,2=ModeB)
uint8_t
ce_mode
;
/// 0-503 n_EPDCCHid_i
uint16_t
dmrs_scrambling_init
;
/// Absolute subframe of the initial transmission (0-10239)
uint16_t
initial_transmission_sf_io
;
/// DCI pdu
uint8_t
dci_pdu
[
8
];
}
mDCI_ALLOC_t
;
typedef
struct
{
uint8_t
num_dci
;
...
...
@@ -703,15 +781,17 @@ typedef struct {
DCI_ALLOC_t
dci_alloc
[
32
];
}
LTE_eNB_PDCCH
;
/*
typedef struct {
} LTE_eNB_ePDCCH;
typedef
struct
{
uint8_t
num_dci
;
eDCI_ALLOC_t
edci_alloc
[
32
];
}
LTE_eNB_EPDCCH
;
typedef
struct
{
uint8_t
num_dci
;
mDCI_ALLOC_t
mdci_alloc
[
32
];
}
LTE_eNB_MPDCCH
;
*/
typedef
struct
{
/// \brief Hold the channel estimates in frequency domain based on SRS.
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
ae884afe
...
...
@@ -909,6 +909,21 @@ void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB,
fill_dci_and_dlsch
(
eNB
,
proc
,
&
pdcch_vars
->
dci_alloc
[
pdcch_vars
->
num_dci
],
pdu
);
}
void
handle_nfapi_mpdcch_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
);
void
handle_nfapi_mpdcch_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
)
{
int
idx
=
proc
->
subframe_tx
&
1
;
LTE_eNB_MPDCCH
*
mpdcch_vars
=
&
eNB
->
mpdcch_vars
[
idx
];
nfapi_dl_config_mpdcch_pdu
*
pdu
=
&
dl_config_pdu
->
mpdcch_pdu
;
LOG_I
(
PHY
,
"Frame %d, Subframe %d: MDCI processing
\n
"
,
proc
->
frame_tx
,
proc
->
subframe_tx
);
// copy dci configuration into eNB structure
fill_mdci_and_dlsch
(
eNB
,
proc
,
&
mpdcch_vars
->
mdci_alloc
[
mpdcch_vars
->
num_dci
],
pdu
);
}
void
handle_nfapi_hi_dci0_dci_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_config_pdu
);
...
...
@@ -954,12 +969,26 @@ handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
}
#ifdef Rel14
extern
uint32_t
localRIV2alloc_LUT6
[
32
];
extern
uint32_t
localRIV2alloc_LUT25
[
512
];
extern
uint32_t
localRIV2alloc_LUT50_0
[
1600
];
extern
uint32_t
localRIV2alloc_LUT50_1
[
1600
];
extern
uint32_t
localRIV2alloc_LUT100_0
[
6000
];
extern
uint32_t
localRIV2alloc_LUT100_1
[
6000
];
extern
uint32_t
localRIV2alloc_LUT100_2
[
6000
];
extern
uint32_t
localRIV2alloc_LUT100_3
[
6000
];
#endif
handle_nfapi_dlsch_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
,
uint8_t
codeword_index
,
uint8_t
*
sdu
)
{
nfapi_dl_config_dlsch_pdu_rel8_t
*
rel8
=
&
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
;
#ifdef Rel14
nfapi_dl_config_dlsch_pdu_rel13_t
*
rel13
=
&
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel13
;
#endif
LTE_eNB_DLSCH_t
*
dlsch0
=
NULL
,
*
dlsch1
=
NULL
;
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
NULL
,
*
dlsch1_harq
=
NULL
;
int
UE_id
;
...
...
@@ -969,9 +998,14 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
UE_id
=
find_dlsch
(
rel8
->
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
);
AssertFatal
(
UE_id
!=-
1
,
"no free or exiting dlsch_context
\n
"
);
AssertFatal
(
UE_id
<
NUMBER_OF_UE_MAX
,
"returned UE_id %d >= %d(NUMBER_OF_UE_MAX)
\n
"
,
UE_id
,
NUMBER_OF_UE_MAX
);
dlsch0
=
eNB
->
dlsch
[
UE_id
][
0
];
dlsch1
=
eNB
->
dlsch
[
UE_id
][
1
];
#ifdef Rel14
if
((
rel13
->
pdsch_payload_type
==
0
)
&&
(
rel13
->
ue_type
>
0
))
dlsch0
->
harq_ids
[
proc
->
subframe_tx
]
=
0
;
#endif
harq_pid
=
dlsch0
->
harq_ids
[
proc
->
subframe_tx
];
AssertFatal
((
harq_pid
>=
0
)
&&
(
harq_pid
<
8
),
"harq_pid %d not in 0...7
\n
"
,
harq_pid
);
dlsch0_harq
=
dlsch0
->
harq_processes
[
harq_pid
];
...
...
@@ -983,6 +1017,52 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
if
(
codeword_index
==
0
)
dlsch0_harq
->
pdu
=
sdu
;
else
dlsch1_harq
->
pdu
=
sdu
;
#ifdef Rel14
if
((
rel13
->
pdsch_payload_type
==
0
)
&&
(
rel13
->
ue_type
>
0
))
{
// this is a BR/CE UE and SIB1-BR
// configure PDSCH
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT6
[
rel8
->
resource_block_coding
];
break
;
case
15
:
AssertFatal
(
1
==
0
,
"15 PRBs not supported for now
\n
"
);
break
;
case
25
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT25
[
rel8
->
resource_block_coding
];
break
;
case
50
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT50_0
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
1
]
=
localRIV2alloc_LUT50_1
[
rel8
->
resource_block_coding
];
break
;
case
75
:
AssertFatal
(
1
==
0
,
"75 PRBs not supported for now
\n
"
);
break
;
case
100
:
dlsch0_harq
->
rb_alloc
[
0
]
=
localRIV2alloc_LUT100_0
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
1
]
=
localRIV2alloc_LUT100_1
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
2
]
=
localRIV2alloc_LUT100_2
[
rel8
->
resource_block_coding
];
dlsch0_harq
->
rb_alloc
[
3
]
=
localRIV2alloc_LUT100_3
[
rel8
->
resource_block_coding
];
}
dlsch0
->
active
=
1
;
dlsch0_harq
->
nb_rb
=
6
;
dlsch0_harq
->
vrb_type
=
LOCALIZED
;
dlsch0_harq
->
rvidx
=
0
;
dlsch0_harq
->
Nl
=
0
;
dlsch0_harq
->
mimo_mode
=
(
eNB
->
frame_parms
.
nb_antenna_ports_eNB
==
1
)
?
SISO
:
ALAMOUTI
;
dlsch0_harq
->
dl_power_off
=
1
;
dlsch0_harq
->
round
=
0
;
dlsch0_harq
->
status
=
ACTIVE
;
dlsch0_harq
->
TBS
=
rel8
->
length
;
}
else
{
}
#endif
}
handle_nfapi_ul_pdu
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
...
...
@@ -1121,7 +1201,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) {
// handle_nfapi_epdcch_pdu(eNB,dl_config_pdu);
break
;
case
NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE
:
// handle_nfapi_mpdcch_pdu(eNB,dl_config_pdu);
handle_nfapi_mpdcch_pdu
(
eNB
,
proc
,
dl_config_pdu
);
eNB
->
mpdcch_vars
[
subframe
&
1
].
num_dci
++
;
break
;
}
}
...
...
@@ -1138,6 +1219,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) {
case
NFAPI_HI_DCI0_HI_PDU_TYPE
:
handle_nfapi_hi_dci0_hi_pdu
(
eNB
,
proc
,
hi_dci0_req_pdu
);
eNB
->
pdcch_vars
[
subframe
&
1
].
num_dci
++
;
break
;
}
}
...
...
openair2/LAYER2/MAC/config.c
View file @
ae884afe
...
...
@@ -451,8 +451,7 @@ int rrc_mac_config_req_eNB(module_id_t Mod_idP,
MeasGapConfig_t
*
measGapConfig
,
TDD_Config_t
*
tdd_Config
,
MobilityControlInfo_t
*
mobilityControlInfo
,
uint8_t
*
SIwindowsize
,
uint16_t
*
SIperiod
,
SchedulingInfoList_t
*
schedulingInfoList
,
uint32_t
ul_CarrierFreq
,
long
*
ul_Bandwidth
,
AdditionalSpectrumEmission_t
*
additionalSpectrumEmission
,
...
...
@@ -461,6 +460,10 @@ int rrc_mac_config_req_eNB(module_id_t Mod_idP,
,
uint8_t
MBMS_Flag
,
MBSFN_AreaInfoList_r9_t
*
mbsfn_AreaInfoList
,
PMCH_InfoList_r9_t
*
pmch_InfoList
#endif
#ifdef Rel14
,
SystemInformationBlockType1_v1310_IEs_t
*
sib1_v13ext
#endif
)
{
...
...
@@ -513,13 +516,16 @@ int rrc_mac_config_req_eNB(module_id_t Mod_idP,
mac_init_cell_params
(
Mod_idP
,
CC_idP
);
}
if
(
(
SIwindowsize
!=
NULL
)
&&
(
SIperiod
!=
NULL
)
)
{
if
(
schedulingInfoList
!=
NULL
)
{
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
tdd_Config
=
tdd_Config
;
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
SIwindowsize
=
*
SIwindowsize
;
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
SIperiod
=
*
SIperiod
;
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
schedulingInfoList
=
schedulingInfoList
;
config_sib1
(
Mod_idP
,
CC_idP
,
tdd_Config
);
}
#ifdef Rel14
if
(
sib1_v13ext
!=
NULL
)
{
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
sib1_v13ext
=
sib1_v13ext
;
}
#endif
if
(
radioResourceConfigCommon
!=
NULL
)
{
LOG_I
(
MAC
,
"[CONFIG]SIB2/3 Contents (partial)
\n
"
);
LOG_I
(
MAC
,
"[CONFIG]pusch_config_common.n_SB = %ld
\n
"
,
radioResourceConfigCommon
->
pusch_ConfigCommon
.
pusch_ConfigBasic
.
n_SB
);
...
...
@@ -533,7 +539,7 @@ int rrc_mac_config_req_eNB(module_id_t Mod_idP,
AssertFatal
(
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
>
0
,
"radioResourceconfigCommon %d == 0
\n
"
,
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
);
(
int
)
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
);
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
radioResourceConfigCommon
=
radioResourceConfigCommon
;
if
(
ul_CarrierFreq
>
0
)
RC
.
mac
[
Mod_idP
]
->
common_channels
[
CC_idP
].
ul_CarrierFreq
=
ul_CarrierFreq
;
...
...
openair2/LAYER2/MAC/defs.h
View file @
ae884afe
...
...
@@ -56,6 +56,7 @@
#include "RadioResourceConfigCommon.h"
#include "RadioResourceConfigDedicated.h"
#include "MeasGapConfig.h"
#include "SchedulingInfoList.h"
#include "TDD-Config.h"
#include "RACH-ConfigCommon.h"
#include "MeasObjectToAddModList.h"
...
...
@@ -66,6 +67,9 @@
#include "PMCH-InfoList-r9.h"
#include "SCellToAddMod-r10.h"
#endif
#ifdef Rel14
#include "SystemInformationBlockType1-v1310-IEs.h"
#endif
#include "nfapi_interface.h"
#include "PHY_INTERFACE/IF_Module.h"
...
...
@@ -310,6 +314,10 @@ typedef struct {
#define PCCH 4 // Paging
/*!\brief Values of PCCH logical channel (fake) */
#define MIBCH 5 // MIB
/*!\brief Values of BCCH SIB1_BR logical channel (fake) */
#define BCCH_SIB1_BR 6 // SIB1_BR
/*!\brief Values of BCCH SIB_BR logical channel (fake) */
#define BCCH_SI_BR 7 // SI-BR
/*!\brief Value of CCCH / SRB0 logical channel */
#define CCCH 0 // srb0
/*!\brief DCCH / SRB1 logical channel */
...
...
@@ -891,10 +899,11 @@ typedef struct {
uint32_t
dl_CarrierFreq
;
BCCH_BCH_Message_t
*
mib
;
RadioResourceConfigCommonSIB_t
*
radioResourceConfigCommon
;
#ifdef Rel14
RadioResourceConfigCommonSIB_t
*
radioResourceConfigCommon_BR
;
#endif
TDD_Config_t
*
tdd_Config
;
uint8_t
SIwindowsize
;
uint16_t
SIperiod
;
SchedulingInfoList_t
*
schedulingInfoList
;
ARFCN_ValueEUTRA_t
ul_CarrierFreq
;
long
ul_Bandwidth
;
/// Outgoing MIB PDU for PHY
...
...
@@ -937,6 +946,14 @@ typedef struct {
/// Outgoing MCH pdu for PHY
MCH_PDU
MCH_pdu
;
#endif
#ifdef Rel14
/// Rel13 parameters from SIB1
SystemInformationBlockType1_v1310_IEs_t
*
sib1_v13ext
;
/// Counter for SIB1-BR scheduling
int
SIB1_BR_cnt
;
/// Outgoing BCCH-BR pdu for PHY
BCCH_PDU
BCCH_BR_pdu
[
20
];
#endif
}
COMMON_channels_t
;
/*! \brief top level eNB MAC structure */
typedef
struct
eNB_MAC_INST_s
{
...
...
openair2/LAYER2/MAC/eNB_scheduler_bch.c
View file @
ae884afe
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/proto.h
View file @
ae884afe
...
...
@@ -736,12 +736,12 @@ unsigned char generate_dlsch_header(unsigned char *mac_header,
@param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration)
@param tdd_Config TDD Configuration from SIB1 (if NULL keep existing configuration)
@param mobilityControlInfo mobility control info received for Handover
@param SIwindowsize SI Windowsize from SIB1 (if NULL keep existing configuration)
@param SIperiod SI Period from SIB1 (if NULL keep existing configuration)
@param SchedInfoList SI Scheduling information
@param MBMS_Flag indicates MBMS transmission
@param mbsfn_SubframeConfigList pointer to mbsfn subframe configuration list from SIB2
@param mbsfn_AreaInfoList pointer to MBSFN Area Info list from SIB13
@param pmch_InfoList pointer to PMCH_InfoList from MBSFNAreaConfiguration Message (MCCH Message)
@param sib1_ext_r13 SI Scheduling information for SI-BR UEs
*/
int
rrc_mac_config_req_eNB
(
module_id_t
module_idP
,
...
...
@@ -772,8 +772,7 @@ int rrc_mac_config_req_eNB(module_id_t module_idP,
MeasGapConfig_t
*
measGapConfig
,
TDD_Config_t
*
tdd_Config
,
MobilityControlInfo_t
*
mobilityControlInfo
,
uint8_t
*
SIwindowsize
,
uint16_t
*
SIperiod
,
SchedulingInfoList_t
*
schedulingInfoList
,
uint32_t
ul_CarrierFreq
,
long
*
ul_Bandwidth
,
AdditionalSpectrumEmission_t
*
additionalSpectrumEmission
,
...
...
@@ -785,10 +784,9 @@ int rrc_mac_config_req_eNB(module_id_t module_idP,
PMCH_InfoList_r9_t
*
pmch_InfoList
#endif
#ifdef
CBA
#ifdef
Rel14
,
uint8_t
num_active_cba_groups
,
uint16_t
cba_rnti
SystemInformationBlockType1_v1310_IEs_t
*
sib1_ext_r13
#endif
);
...
...
openair2/RRC/LITE/defs.h
View file @
ae884afe
...
...
@@ -462,6 +462,8 @@ typedef struct {
uint8_t
*
SIB23
;
uint8_t
sizeof_SIB23
;
#ifdef Rel14
uint8_t
*
SIB1_BR
;
uint8_t
sizeof_SIB1_BR
;
uint8_t
*
SIB23_BR
;
uint8_t
sizeof_SIB23_BR
;
#endif
...
...
@@ -477,10 +479,12 @@ typedef struct {
// SystemInformation_t systemInformation;
SystemInformationBlockType1_t
*
sib1
;
SystemInformationBlockType2_t
*
sib2
;
SystemInformationBlockType3_t
*
sib3
;
#ifdef Rel14
SystemInformationBlockType1_t
*
sib1_BR
;
SystemInformationBlockType2_t
*
sib2_BR
;
SystemInformationBlockType2_t
*
sib3_BR
;
#endif
SystemInformationBlockType3_t
*
sib3
;
#if defined(Rel10) || defined(Rel14)
SystemInformationBlockType13_r9_t
*
sib13
;
uint8_t
MBMS_flag
;
...
...
@@ -490,10 +494,6 @@ typedef struct {
MCCH_Message_t
mcch
;
MBSFNAreaConfiguration_r9_t
*
mcch_message
;
SRB_INFO
MCCH_MESS
[
8
];
// MAX_MBSFN_AREA
#endif
#ifdef CBA
uint8_t
num_active_cba_groups
;
uint16_t
cba_rnti
[
NUM_MAX_CBA_GROUP
];
#endif
SRB_INFO
SI
;
SRB_INFO
Srb0
;
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
ae884afe
...
...
@@ -133,6 +133,10 @@ init_SI(
int
i
;
#endif
#ifdef Rel14
SystemInformationBlockType1_v1310_IEs_t
*
sib1_v13ext
=
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
;
#endif
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
MIB
=
(
uint8_t
*
)
malloc16
(
4
);
// copy basic parameters
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
physCellId
=
configuration
->
Nid_cell
[
CC_id
];
...
...
@@ -263,6 +267,21 @@ init_SI(
PROTOCOL_RRC_CTXT_FMT
" RRC_UE --- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) ---> MAC_UE
\n
"
,
PROTOCOL_RRC_CTXT_ARGS
(
ctxt_pP
));
#ifdef Rel14
if
((
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
mib
.
message
.
schedulingInfoSIB1_BR_r13
>
0
)
&&
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1_BR
!=
NULL
))
{
AssertFatal
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1_BR
->
nonCriticalExtension
!=
NULL
,
"sib2_br->nonCriticalExtension is null (v9.2)
\n
"
);
AssertFatal
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1_BR
->
nonCriticalExtension
->
nonCriticalExtension
!=
NULL
,
"sib2_br->nonCriticalExtension is null (v11.3)
\n
"
);
AssertFatal
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1_BR
->
nonCriticalExtension
->
nonCriticalExtension
->
nonCriticalExtension
!=
NULL
,
"sib2_br->nonCriticalExtension is null (v12.5)
\n
"
);
AssertFatal
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1_BR
->
nonCriticalExtension
->
nonCriticalExtension
->
nonCriticalExtension
->
nonCriticalExtension
!=
NULL
,
"sib2_br->nonCriticalExtension is null (v13.10)
\n
"
);
sib1_v13ext
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1_BR
->
nonCriticalExtension
->
nonCriticalExtension
->
nonCriticalExtension
->
nonCriticalExtension
;
}
#endif
rrc_mac_config_req_eNB
(
ctxt_pP
->
module_id
,
CC_id
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
physCellId
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
p_eNB
,
...
...
@@ -292,7 +311,7 @@ init_SI(
(
MeasGapConfig_t
*
)
NULL
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1
->
tdd_Config
,
NULL
,
&
SIwindowsize
,
&
SIperiod
,
&
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib1
->
schedulingInfoList
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
ul_CarrierFreq
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib2
->
freqInfo
.
ul_Bandwidth
,
&
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib2
->
freqInfo
.
additionalSpectrumEmission
,
...
...
@@ -303,9 +322,9 @@ init_SI(
(
MBSFN_AreaInfoList_r9_t
*
)
&
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sib13
->
mbsfn_AreaInfoList_r9
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef
CBA
,
0
,
//RC.rrc[ctxt_pP->module_id]->num_active_cba_groups,
0
//RC.rrc[ctxt_pP->module_id]->cba_rnti[0]
#ifdef
Rel14
,
sib1_v13ext
#endif
);
}
...
...
@@ -386,15 +405,18 @@ init_MCCH(
(
struct
LogicalChannelConfig
*
)
NULL
,
(
MeasGapConfig_t
*
)
NULL
,
(
TDD_Config_t
*
)
NULL
,
NULL
,
(
uint8_t
*
)
NULL
,
(
uint16_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
(
MobilityControlInfo_t
*
)
NULL
,
(
SchedulingInfoList_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
#if defined(Rel10) || defined(Rel14)
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
&
(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
->
pmch_InfoList_r9
)
# endif
# ifdef CBA
,
0
,
0
# ifdef Rel14
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
# endif
);
...
...
@@ -2748,8 +2770,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
ue_context_pP
->
ue_context
.
measGapConfig
,
(
TDD_Config_t
*
)
NULL
,
(
MobilityControlInfo_t
*
)
NULL
,
(
uint8_t
*
)
NULL
,
(
uint16_t
*
)
NULL
,
(
SchedulingInfoList_t
*
)
NULL
,
0
,
NULL
,
NULL
,
...
...
@@ -2757,9 +2778,10 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
#if defined(Rel10) || defined(Rel14)
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
num_active_cba_groups
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
cba_rnti
[
0
]
#endif
# ifdef Rel14
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
# endif
);
// Configure target eNB SRB2
...
...
@@ -3327,13 +3349,14 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
ue_context_pP
->
ue_context
.
measGapConfig
,
(
TDD_Config_t
*
)
NULL
,
(
MobilityControlInfo_t
*
)
mobilityInfo
,
(
uint8_t
*
)
NULL
,
(
uint16
_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
(
SchedulingInfoList
_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
#if defined(Rel10) || defined(Rel14)
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
# ifdef Rel14
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
# endif
);
/*
...
...
@@ -3629,14 +3652,15 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
ue_context_pP
->
ue_context
.
measGapConfig
,
(
TDD_Config_t
*
)
NULL
,
NULL
,
(
uint8
_t
*
)
NULL
,
(
uint16_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
(
SchedulingInfoList
_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
#if defined(Rel10) || defined(Rel14)
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
num_active_cba_groups
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
cba_rnti
[
0
]
#endif
# ifdef Rel14
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
# endif
);
}
else
{
// remove LCHAN from MAC/PHY
...
...
@@ -3680,13 +3704,16 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
(
LogicalChannelConfig_t
*
)
NULL
,
(
MeasGapConfig_t
*
)
NULL
,
(
TDD_Config_t
*
)
NULL
,
NULL
,
(
uint8_t
*
)
NULL
,
(
uint16_t
*
)
NULL
,
0
,
NULL
,
NULL
,
NULL
NULL
,
(
SchedulingInfoList_t
*
)
NULL
,
0
,
NULL
,
NULL
,
NULL
#if defined(Rel10) || defined(Rel14)
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
# ifdef Rel14
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
# endif
);
}
}
...
...
@@ -3778,14 +3805,15 @@ rrc_eNB_generate_RRCConnectionSetup(
ue_context_pP
->
ue_context
.
measGapConfig
,
(
TDD_Config_t
*
)
NULL
,
NULL
,
(
uint8
_t
*
)
NULL
,
(
uint16_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
(
SchedulingInfoList
_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
#if defined(Rel10) || defined(Rel14)
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
# ifdef Rel14
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
# endif
);
break
;
}
...
...
@@ -3839,14 +3867,16 @@ openair_rrc_eNB_init(
PROTOCOL_RRC_CTXT_ARGS
(
&
ctxt
));
#if OCP_FRAMEWORK
while
(
RC
.
rrc
[
enb_mod_idP
]
==
NULL
)
{
while
(
RC
.
rrc
[
enb_mod_idP
]
==
NULL
)
{
LOG_E
(
RRC
,
"RC.rrc not yet initialized, waiting 1 second
\n
"
);
sleep
(
1
);
}
}
#endif
AssertFatal
(
RC
.
rrc
[
enb_mod_idP
]
!=
NULL
,
"RC.rrc not initialized!"
);
AssertFatal
(
NUMBER_OF_UE_MAX
<
(
module_id_t
)
0xFFFFFFFFFFFFFFFF
,
" variable overflow"
);
#ifdef ENABLE_ITTI
AssertFatal
(
configuration
!=
NULL
,
"configuration input is null
\n
"
);
#endif
// for (j = 0; j < NUMBER_OF_UE_MAX; j++)
// RC.rrc[ctxt.module_id].Info.UE[j].Status = RRC_IDLE; //CH_READY;
//
...
...
@@ -5050,7 +5080,7 @@ rrc_enb_task(
/* Messages from eNB app */
case
RRC_CONFIGURATION_REQ
:
LOG_I
(
RRC
,
"[eNB %d] Received %s
\n
"
,
instance
,
msg_name_p
);
LOG_I
(
RRC
,
"[eNB %d] Received %s
: %p
\n
"
,
instance
,
msg_name_p
,
&
RRC_CONFIGURATION_REQ
(
msg_p
)
);
openair_rrc_eNB_configuration
(
ENB_INSTANCE_TO_MODULE_ID
(
instance
),
&
RRC_CONFIGURATION_REQ
(
msg_p
));
break
;
...
...
targets/RT/USER/lte-ru.c
View file @
ae884afe
...
...
@@ -1754,6 +1754,7 @@ void init_RU(const char *rf_config_file) {
ru
->
fh_south_in
=
rx_rf
;
// local synchronous RF RX
ru
->
fh_south_out
=
tx_rf
;
// local synchronous RF TX
ru
->
start_rf
=
start_rf
;
// need to start the local RF interface
printf
(
"configuring RRU for ru_id %d (start_rf %p)
\n
"
,
ru_id
,
start_rf
);
ru
->
ifdevice
.
configure_rru
=
configure_rru
;
fill_rf_config
(
ru
,
rf_config_file
);
...
...
targets/SIMU/USER/oaisim.c
View file @
ae884afe
...
...
@@ -216,6 +216,10 @@ oai_shutdown (void);
void
reset_opp_meas_oaisim
(
void
);
void
wait_eNBs
()
{
return
;
}
void
help
(
void
)
{
...
...
@@ -1349,10 +1353,10 @@ main (int argc, char **argv)
init_seed
(
set_seed
);
init_devices
();
init_RU
(
NULL
);
init_RU
(
NULL
);
init_devices
();
// init_openair2 ();
// init_openair0();
...
...
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