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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
f32355c7
Commit
f32355c7
authored
Dec 03, 2017
by
sharma
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added handling of narrowbands for ULSCH scheduling
parent
18d996eb
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
160 additions
and
50 deletions
+160
-50
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+19
-19
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+67
-7
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+2
-0
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+8
-3
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+9
-6
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+12
-2
openair2/LAYER2/MAC/eNB_scheduler_RA.c
openair2/LAYER2/MAC/eNB_scheduler_RA.c
+3
-3
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+37
-8
openair2/RRC/LITE/MESSAGES/asn1_msg.c
openair2/RRC/LITE/MESSAGES/asn1_msg.c
+3
-2
No files found.
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
View file @
f32355c7
...
...
@@ -46,12 +46,12 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
int32_t
**
ul_ch_estimates_time
=
pusch_vars
->
drs_ch_estimates_time
;
int32_t
**
rxdataF_ext
=
pusch_vars
->
rxdataF_ext
;
int
subframe
=
proc
->
subframe_rx
;
uint8_t
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
uint8_t
harq_pid
;
int16_t
delta_phase
=
0
;
int16_t
*
ru1
=
ru_90
;
int16_t
*
ru2
=
ru_90
;
int16_t
current_phase1
,
current_phase2
;
uint16_t
N_rb_alloc
=
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
;
uint16_t
aa
,
Msc_RS
,
Msc_RS_idx
;
uint16_t
*
Msc_idx_ptr
;
int
k
,
pilot_pos1
=
3
-
frame_parms
->
Ncp
,
pilot_pos2
=
10
-
2
*
frame_parms
->
Ncp
;
...
...
@@ -65,7 +65,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
uint32_t
alpha_ind
;
uint32_t
u
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
Ns
+
(
subframe
<<
1
)];
uint32_t
v
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
Ns
+
(
subframe
<<
1
)];
int32_t
tmp_estimates
[
N_rb_alloc
*
12
]
__attribute__
((
aligned
(
16
)));
int
symbol_offset
,
i
;
...
...
@@ -83,7 +83,19 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
int32x4_t
mmtmp0
,
mmtmp1
,
mmtmp_re
,
mmtmp_im
;
#endif
int32_t
temp_in_ifft_0
[
2048
*
2
]
__attribute__
((
aligned
(
32
)));
int32_t
temp_in_ifft_0
[
2048
*
2
]
__attribute__
((
aligned
(
32
)));
#ifdef Rel14
if
(
eNB
->
ulsch
[
UE_id
]
->
ue_type
>
0
)
harq_pid
=
0
;
else
#endif
{
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
}
uint16_t
N_rb_alloc
=
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
;
int32_t
tmp_estimates
[
N_rb_alloc
*
12
]
__attribute__
((
aligned
(
16
)));
Msc_RS
=
N_rb_alloc
*
12
;
...
...
@@ -91,24 +103,12 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
n_DMRS2
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[(
subframe
<<
1
)
+
Ns
])
%
12
;
#if defined(USER_MODE)
Msc_idx_ptr
=
(
uint16_t
*
)
bsearch
(
&
Msc_RS
,
dftsizes
,
33
,
sizeof
(
uint16_t
),
compareints
);
if
(
Msc_idx_ptr
)
Msc_RS_idx
=
Msc_idx_ptr
-
dftsizes
;
else
{
LOG_E
(
PHY
,
"lte_ul_channel_estimation: index for Msc_RS=%d not found
\n
"
,
Msc_RS
);
return
(
-
1
);
}
#else
uint8_t
b
;
Msc_idx_ptr
=
(
uint16_t
*
)
bsearch
(
&
Msc_RS
,
dftsizes
,
33
,
sizeof
(
uint16_t
),
compareints
);
for
(
b
=
0
;
b
<
33
;
b
++
)
if
(
Msc_RS
==
dftsizes
[
b
])
Msc_RS_idx
=
b
;
AssertFatal
(
Msc_idx_ptr
!=
NULL
,
"lte_ul_channel_estimation: index for Msc_RS=%d not found
\n
"
,
Msc_RS
);
#endif
Msc_RS_idx
=
Msc_idx_ptr
-
dftsizes
;
// LOG_I(PHY,"subframe %d, Ns %d, l %d, Msc_RS = %d, Msc_RS_idx = %d, u %d, v %d, cyclic_shift %d\n",subframe,Ns,l,Msc_RS, Msc_RS_idx,u,v,cyclic_shift);
#ifdef DEBUG_CH
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
f32355c7
...
...
@@ -164,11 +164,12 @@ int8_t delta_PUSCH_acc[4] = { -1, 0, 1, 3 };
int8_t
*
delta_PUCCH_lut
=
delta_PUSCH_acc
;
void
conv_eMTC_rballoc
(
uint
8_t
narrowband
,
uint
16_t
resource_block_coding
,
uint32_t
N_RB_DL
,
uint32_t
*
rb_alloc
)
conv_eMTC_rballoc
(
uint16_t
resource_block_coding
,
uint32_t
N_RB_DL
,
uint32_t
*
rb_alloc
)
{
int
RIV
=
resource_block_coding
;
int
RIV
=
resource_block_coding
&
31
;
int
narrowband
=
resource_block_coding
>>
5
;
int
N_NB_DL
=
N_RB_DL
/
6
;
int
i0
=
(
N_RB_DL
>>
1
)
-
(
3
*
N_NB_DL
);
int
first_rb
=
(
6
*
narrowband
)
+
i0
;
...
...
@@ -2213,8 +2214,8 @@ fill_mdci_and_dlsch (PHY_VARS_eNB * eNB, eNB_rxtx_proc_t * proc, mDCI_ALLOC_t *
dci_alloc
->
dci_length
=
sizeof_DCI6_1A_10MHz_t
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
type
=
1
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
hopping
=
rel13
->
frequency_hopping_enabled_flag
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
rballoc
=
rel13
->
resource_block_coding
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
narrowband
=
rel13
->
mpdcch_narrow_band
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
rballoc
=
rel13
->
resource_block_coding
&
31
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
narrowband
=
rel13
->
resource_block_coding
>>
5
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
mcs
=
rel13
->
mcs
;
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
rep
=
(
rel13
->
pdsch_reptition_levels
);
((
DCI6_1A_10MHz_t
*
)
dci_pdu
)
->
harq_pid
=
rel13
->
harq_process
;
...
...
@@ -2356,7 +2357,7 @@ fill_mdci_and_dlsch (PHY_VARS_eNB * eNB, eNB_rxtx_proc_t * proc, mDCI_ALLOC_t *
dlsch0
->
subframe_tx
[(
subframe
+
2
)
%
10
]
=
1
;
LOG_I
(
PHY
,
"PDSCH : resource_block_coding %x
\n
"
,
rel13
->
resource_block_coding
);
conv_eMTC_rballoc
(
rel13
->
mpdcch_narrow_band
,
rel13
->
resource_block_coding
,
conv_eMTC_rballoc
(
rel13
->
resource_block_coding
,
fp
->
N_RB_DL
,
dlsch0_harq
->
rb_alloc
);
...
...
@@ -2584,6 +2585,53 @@ fill_dci0 (PHY_VARS_eNB * eNB, eNB_rxtx_proc_t * proc, DCI_ALLOC_t * dci_alloc,
}
#ifdef Rel14
int
get_narrowband_index
(
int
N_RB_UL
,
int
rb
)
{
switch
(
N_RB_UL
)
{
case
6
:
// 6 PRBs, N_NB=1, i_0=0
case
25
:
// 25 PRBs, N_NB=4, i_0=0
return
(
rb
/
6
);
break
;
case
50
:
// 50 PRBs, N_NB=8, i_0=1
case
75
:
// 75 PRBs, N_NB=12, i_0=1
case
15
:
// 15 PRBs, N_NB=2, i_0=1
AssertFatal
(
rb
>=
1
,
"rb %d is not possible for %d PRBs
\n
"
,
rb
,
N_RB_UL
);
return
((
rb
-
1
)
/
6
);
break
;
case
100
:
// 100 PRBs, N_NB=16, i_0=2
AssertFatal
(
rb
>=
2
,
"rb %d is not possible for %d PRBs
\n
"
,
rb
,
N_RB_UL
);
return
(
rb
-
2
/
6
);
break
;
default:
AssertFatal
(
1
==
0
,
"Impossible N_RB_UL %d
\n
"
,
N_RB_UL
);
break
;
}
}
int
get_first_rb_in_narrowband
(
int
N_RB_UL
,
int
rb
)
{
switch
(
N_RB_UL
)
{
case
6
:
// 6 PRBs, N_NB=1, i_0=0
case
25
:
// 25 PRBs, N_NB=4, i_0=0
return
(
rb
-
6
*
(
rb
/
6
));
break
;
case
50
:
// 50 PRBs, N_NB=8, i_0=1
case
75
:
// 75 PRBs, N_NB=12, i_0=1
case
15
:
// 15 PRBs, N_NB=2, i_0=1
AssertFatal
(
rb
>=
1
,
"rb %d is not possible for %d PRBs
\n
"
,
rb
,
N_RB_UL
);
return
(
rb
-
1
-
(
6
*
((
rb
-
1
)
/
6
)));
break
;
case
100
:
// 100 PRBs, N_NB=16, i_0=2
AssertFatal
(
rb
>=
2
,
"rb %d is not possible for %d PRBs
\n
"
,
rb
,
N_RB_UL
);
return
(
rb
-
2
-
(
6
*
((
rb
-
2
)
/
6
)));
break
;
default:
AssertFatal
(
1
==
0
,
"Impossible N_RB_UL %d
\n
"
,
N_RB_UL
);
break
;
}
}
void
fill_mpdcch_dci0
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
mDCI_ALLOC_t
*
dci_alloc
,
nfapi_hi_dci0_mpdcch_dci_pdu
*
pdu
)
{
...
...
@@ -2595,8 +2643,9 @@ fill_mpdcch_dci0 (PHY_VARS_eNB * eNB, eNB_rxtx_proc_t * proc, mDCI_ALLOC_t * dci
uint32_t
TPC
=
rel13
->
tpc
;
uint32_t
mcs
=
rel13
->
mcs
;
uint32_t
hopping
=
rel13
->
frequency_hopping_flag
;
uint32_t
narrowband
=
get_narrowband_index
(
frame_parms
->
N_RB_UL
,
rel13
->
resource_block_start
);
uint32_t
rballoc
=
computeRIV
(
6
,
rel13
->
resource_block_start
,
get_first_rb_in_narrowband
(
frame_parms
->
N_RB_UL
,
rel13
->
resource_block_start
)
,
rel13
->
number_of_resource_blocks
);
uint32_t
ndi
=
rel13
->
new_data_indication
;
...
...
@@ -2748,6 +2797,17 @@ fill_ulsch (PHY_VARS_eNB * eNB, nfapi_ul_config_ulsch_pdu * ulsch_pdu, int frame
harq_pid
=
ulsch_pdu
->
ulsch_pdu_rel8
.
harq_process_number
;
#ifdef Rel14
ulsch
->
ue_type
=
ulsch_pdu
->
ulsch_pdu_rel13
.
ue_type
;
AssertFatal
(
harq_pid
==
0
,
"Harq PID is not zero for BL/CE UE
\n
"
);
#else
ulsch
->
ue_type
=
0
;
#endif
ulsch
->
harq_mask
|=
1
<<
harq_pid
;
ulsch
->
harq_processes
[
harq_pid
]
->
frame
=
frame
;
...
...
@@ -2810,7 +2870,7 @@ fill_ulsch (PHY_VARS_eNB * eNB, nfapi_ul_config_ulsch_pdu * ulsch_pdu, int frame
ulsch
->
harq_processes
[
harq_pid
]
->
round
++
;
ulsch
->
rnti
=
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
;
LOG_
D
(
PHY
,
"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d
\n
"
,
LOG_
I
(
PHY
,
"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d
\n
"
,
ulsch
->
rnti
,
UE_id
,
new_ulsch
,
...
...
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
f32355c7
...
...
@@ -596,6 +596,8 @@ typedef struct {
}
LTE_eNB_UCI
;
typedef
struct
{
/// UE type (normal, CEModeA, CEModeB)
uint8_t
ue_type
;
/// HARQ process mask, indicates which processes are currently active
uint16_t
harq_mask
;
/// Pointers to 8 HARQ processes for the ULSCH
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
View file @
f32355c7
...
...
@@ -878,11 +878,16 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
LTE_UL_eNB_HARQ_t
*
ulsch_harq
;
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
#ifdef Rel14
if
(
ulsch
->
ue_type
>
0
)
harq_pid
=
0
;
else
#endif
{
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0
+
harq_pid
,
1
);
// x1 is set in lte_gold_generic
x2
=
((
uint32_t
)
ulsch
->
rnti
<<
14
)
+
((
uint32_t
)
subframe
<<
9
)
+
frame_parms
->
Nid_cell
;
//this is c_init in 36.211 Sec 6.3.1
ulsch_harq
=
ulsch
->
harq_processes
[
harq_pid
];
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
f32355c7
...
...
@@ -1136,18 +1136,21 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
int16_t
*
llrp
;
int
subframe
=
proc
->
subframe_rx
;
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
#ifdef Rel14
if
(
ulsch
[
UE_id
]
->
ue_type
>
0
)
harq_pid
=
0
;
else
#endif
{
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
}
Qm
=
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
Qm
;
#ifdef DEBUG_ULSCH
printf
(
"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d
\n
"
,
harq_pid
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
first_rb
);
#endif //DEBUG_ULSCH
if
(
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
==
0
)
{
LOG_E
(
PHY
,
"PUSCH (%d/%x) nb_rb=0!
\n
"
,
harq_pid
,
ulsch
[
UE_id
]
->
rnti
);
return
;
}
AssertFatal
(
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
>
0
,
"PUSCH (%d/%x) nb_rb=0!
\n
"
,
harq_pid
,
ulsch
[
UE_id
]
->
rnti
);
for
(
l
=
0
;
l
<
(
frame_parms
->
symbols_per_tti
-
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
srs_active
);
l
++
)
{
#ifdef DEBUG_ULSCH
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
f32355c7
...
...
@@ -1070,6 +1070,8 @@ pusch_procedures (PHY_VARS_eNB * eNB, eNB_rxtx_proc_t * proc)
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
ulsch
=
eNB
->
ulsch
[
i
];
if
(
ulsch
->
ue_type
>
0
)
harq_pid
=
0
;
ulsch_harq
=
ulsch
->
harq_processes
[
harq_pid
];
if
(
ulsch
->
rnti
>
0
)
LOG_D
(
PHY
,
"Frame %d, subframe %d: PUSCH procedures, harq_pid %d, UE %d/%x
\n
"
,
frame
,
subframe
,
harq_pid
,
i
,
ulsch
->
rnti
);
...
...
@@ -1248,8 +1250,16 @@ fill_rx_indication (PHY_VARS_eNB * eNB, int UE_id, int frame, int subframe)
int
timing_advance_update
;
int
sync_pos
;
uint32_t
harq_pid
=
subframe2harq_pid
(
&
eNB
->
frame_parms
,
frame
,
subframe
);
uint32_t
harq_pid
;
#ifdef Rel14
if
(
eNB
->
ulsch
[
UE_id
]
->
ue_type
>
0
)
harq_pid
=
0
;
else
#endif
{
harq_pid
=
subframe2harq_pid
(
&
eNB
->
frame_parms
,
frame
,
subframe
);
}
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
pdu
=
&
eNB
->
UL_INFO
.
rx_ind
.
rx_pdu_list
[
eNB
->
UL_INFO
.
rx_ind
.
number_of_pdus
];
...
...
openair2/LAYER2/MAC/eNB_scheduler_RA.c
View file @
f32355c7
...
...
@@ -105,7 +105,7 @@ add_msg3 (module_id_t module_idP, int CC_id, RA_TEMPLATE * RA_template, frame_t
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
frequency_hopping_bits
=
0
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
new_data_indication
=
0
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
redundancy_version
=
rvseq
[
RA_template
->
msg3_round
];
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
harq_process_number
=
((
10
*
RA_template
->
Msg3_frame
)
+
RA_template
->
Msg3_subframe
)
&
7
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
harq_process_number
=
0
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
ul_tx_mode
=
0
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
current_tx_nb
=
0
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel8
.
n_srs
=
1
;
...
...
@@ -274,7 +274,7 @@ generate_Msg2 (module_id_t module_idP, int CC_idP, frame_t frameP, sub_frame_t s
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
drms_scrambling_init
=
cc
[
CC_idP
].
physCellId
;
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
initial_transmission_sf_io
=
(
frameP
*
10
)
+
subframeP
;
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
transmission_power
=
6000
;
// 0dB
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
resource_block_coding
=
getRIV
(
6
,
0
,
6
);
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
resource_block_coding
=
getRIV
(
6
,
0
,
6
)
|
(
RA_template
->
msg2_narrowband
<<
5
)
;
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
mcs
=
0
;
// adjust according to size of RAR, 208 bits with N1A_PRB=3
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
pdsch_reptition_levels
=
0
;
// fix to 4 for now
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
redundancy_version
=
0
;
...
...
@@ -632,7 +632,7 @@ generate_Msg4 (module_id_t module_idP, int CC_idP, frame_t frameP, sub_frame_t s
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
drms_scrambling_init
=
cc
[
CC_idP
].
physCellId
;
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
initial_transmission_sf_io
=
(
frameP
*
10
)
+
subframeP
;
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
transmission_power
=
6000
;
// 0dB
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
resource_block_coding
=
getRIV
(
6
,
0
,
6
)
;
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
resource_block_coding
=
getRIV
(
6
,
0
,
6
)
|
(
RA_template
->
msg2_narrowband
<<
5
);
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
mcs
=
4
;
// adjust according to size of RAR, 208 bits with N1A_PRB=3
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
pdsch_reptition_levels
=
0
;
// fix to 4 for now
dl_config_pdu
->
mpdcch_pdu
.
mpdcch_pdu_rel13
.
redundancy_version
=
0
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
f32355c7
...
...
@@ -104,6 +104,9 @@ void rx_sdu(const module_id_t enb_mod_idP,
}
if
(
UE_id
!=-
1
)
{
#ifdef Rel14
if
(
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
rach_resource_type
>
0
)
harq_pid
=
0
;
#endif
LOG_D
(
MAC
,
"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d
\n
"
,
enb_mod_idP
,
harq_pid
,
CC_idP
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
],
current_rnti
,
UE_id
,
ul_cqi
);
...
...
@@ -142,6 +145,11 @@ void rx_sdu(const module_id_t enb_mod_idP,
}
}
else
if
((
RA_id
=
find_RA_id
(
enb_mod_idP
,
CC_idP
,
current_rnti
))
!=-
1
)
{
// Check if this is an RA process for the rnti
#ifdef Rel14
if
(
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
rach_resource_type
>
0
)
harq_pid
=
0
;
#endif
AssertFatal
(
eNB
->
common_channels
[
CC_idP
].
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
>
1
,
"maxHARQ %d should be greater than 1
\n
"
,
(
int
)
eNB
->
common_channels
[
CC_idP
].
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
);
...
...
@@ -838,7 +846,7 @@ void schedule_ulsch(module_id_t module_idP,
}
}
schedule_ulsch_rnti
(
module_idP
,
frameP
,
subframeP
,
sched_subframe
,
emtc_active
);
schedule_ulsch_rnti
(
module_idP
,
frameP
,
subframeP
,
sched_subframe
,
first_rb
);
stop_meas
(
&
eNB
->
schedule_ulsch
);
}
...
...
@@ -1402,7 +1410,7 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
// bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB)
//store for possible retransmission
UE_template
->
nb_rb_ul
[
harq_pid
]
=
6
;
UE_template
->
first_rb_ul
[
harq_pid
]
=
0
;
UE_template
->
first_rb_ul
[
harq_pid
]
=
narrowband_to_first_rb
(
cc
,
2
)
;
UE_sched_ctrl
->
ul_scheduled
|=
(
1
<<
harq_pid
);
if
(
UE_id
==
UE_list
->
head
)
...
...
@@ -1453,7 +1461,7 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
hi_dci0_pdu
->
pdu_size
=
(
uint8_t
)
(
2
+
sizeof
(
nfapi_dl_config_mpdcch_pdu
));
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
dci_format
=
(
UE_template
->
rach_resource_type
>
1
)
?
5
:
4
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
ce_mode
=
(
UE_template
->
rach_resource_type
>
1
)
?
2
:
1
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
mpdcch_narrowband
=
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_Narrowband_r13
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
mpdcch_narrowband
=
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_Narrowband_r13
-
1
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
number_of_prb_pairs
=
6
;
// checked above that it has to be this
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
resource_block_assignment
=
0
;
// Note: this can be dynamic
...
...
@@ -1471,13 +1479,14 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
drms_scrambling_init
=
epdcch_setconfig_r11
->
dmrs_ScramblingSequenceInt_r11
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
initial_transmission_sf_io
=
(
frameP
*
10
)
+
subframeP
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
transmission_power
=
6000
;
// 0dB
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
resource_block_start
=
0
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
resource_block_start
=
UE_template
->
first_rb_ul
[
harq_pid
]
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
number_of_resource_blocks
=
6
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
mcs
=
4
;
// adjust according to size of RAR, 208 bits with N1A_PRB=3
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
pusch_repetition_levels
=
0
;
AssertFatal
(
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_pdsch_HoppingConfig_r13
==
0
,
"epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not 0
\n
"
);
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
frequency_hopping_flag
=
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_pdsch_HoppingConfig_r13
;
AssertFatal
(
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_pdsch_HoppingConfig_r13
==
EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off
,
"epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off
\n
"
);
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
frequency_hopping_flag
=
1
-
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_pdsch_HoppingConfig_r13
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
redudency_version
=
0
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
new_data_indication
=
0
;
hi_dci0_pdu
->
mpdcch_dci_pdu
.
mpdcch_dci_pdu_rel13
.
harq_process
=
0
;
...
...
@@ -1544,7 +1553,27 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
T_INT
(
subframeP
),
T_INT
(
harq_pid
),
T_INT
(
UE_template
->
mcs_UL
[
harq_pid
]),
T_INT
(
0
),
T_INT
(
6
),
T_INT
(
round
));
fill_nfapi_ulsch_config_request_rel8
(
&
ul_req_tmp
->
ul_config_pdu_list
[
ul_req_tmp
->
number_of_pdus
],
cqi_req
,
cc
,
UE_template
->
physicalConfigDedicated
,
get_tmode
(
module_idP
,
CC_id
,
UE_id
),
eNB
->
ul_handle
,
rnti
,
UE_template
->
first_rb_ul
[
harq_pid
],
// resource_block_start
UE_template
->
nb_rb_ul
[
harq_pid
],
// number_of_resource_blocks
UE_template
->
mcs_UL
[
harq_pid
],
cshift
,
// cyclic_shift_2_for_drms
0
,
// frequency_hopping_enabled_flag
0
,
// frequency_hopping_bits
UE_template
->
oldNDI_UL
[
harq_pid
],
// new_data_indication
rvidx_tab
[
round
&
3
],
// redundancy_version
harq_pid
,
// harq_process_number
0
,
// ul_tx_mode
0
,
// current_tx_nb
0
,
// n_srs
UE_template
->
TBS_UL
[
harq_pid
]
);
fill_nfapi_ulsch_config_request_emtc
(
&
ul_req_tmp
->
ul_config_pdu_list
[
ul_req_tmp
->
number_of_pdus
],
UE_template
->
rach_resource_type
>
2
?
2
:
1
,
1
,
//total_number_of_repetitions
...
...
openair2/RRC/LITE/MESSAGES/asn1_msg.c
View file @
f32355c7
...
...
@@ -2539,7 +2539,8 @@ do_RRCConnectionSetup_BR(
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
=
calloc
(
1
,
sizeof
(
struct
EPDCCH_Config_r11
));
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
present
=
EPDCCH_Config_r11__config_r11_PR_setup
;
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
subframePatternConfig_r11
=
NULL
;
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
startSymbol_r11
=
NULL
;
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
startSymbol_r11
=
calloc
(
1
,
sizeof
(
long
));
*
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
startSymbol_r11
=
2
;
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
setConfigToReleaseList_r11
=
NULL
;
...
...
@@ -2570,7 +2571,7 @@ do_RRCConnectionSetup_BR(
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_StartSF_UESS_r13
.
present
=
EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_StartSF_UESS_r13_PR_fdd_r13
;
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_StartSF_UESS_r13
.
choice
.
fdd_r13
=
EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_StartSF_UESS_r13__fdd_r13_v1
;
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_NumRepetition_r13
=
EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_NumRepetition_r13_r1
;
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_Narrowband_r13
=
2
;
epdcch_setconfig_r11
->
ext2
->
mpdcch_config_r13
->
choice
.
setup
.
mpdcch_Narrowband_r13
=
3
;
// note: this is narrowband index 2
ASN_SEQUENCE_ADD
(
physicalConfigDedicated2
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
setConfigToAddModList_r11
,
epdcch_setconfig_r11
);
...
...
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