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
Michael Black
OpenXG-RAN
Commits
1d8bec80
Commit
1d8bec80
authored
Oct 12, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'RU-RAU-split' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into RU-RAU-split
parents
737c3e8a
493110af
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
106 additions
and
123 deletions
+106
-123
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+21
-29
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+79
-94
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+6
-0
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
1d8bec80
...
@@ -911,7 +911,6 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci
...
@@ -911,7 +911,6 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci
dlsch0_harq
->
round
=
0
;
dlsch0_harq
->
round
=
0
;
}
}
else
{
// process is inactive, so activate and set round to 0
else
{
// process is inactive, so activate and set round to 0
dlsch0
->
harq_mask
|=
(
1
<<
rel8
->
harq_process
);
dlsch0_harq
->
round
=
0
;
dlsch0_harq
->
round
=
0
;
}
}
dlsch0_harq
->
ndi
=
rel8
->
new_data_indicator_1
;
dlsch0_harq
->
ndi
=
rel8
->
new_data_indicator_1
;
...
@@ -919,8 +918,8 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci
...
@@ -919,8 +918,8 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci
dlsch0
->
active
=
1
;
dlsch0
->
active
=
1
;
if
(
rel8
->
rnti_type
==
2
)
if
(
rel8
->
rnti_type
==
2
)
dlsch0_harq
->
round
=
0
;
dlsch0_harq
->
round
=
0
;
LOG_D
(
PHY
,
"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d)
\n
"
,
rel8
->
harq_process
,
dlsch0
->
harq_mask
,
dlsch0_harq
->
round
,
LOG_D
(
PHY
,
"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d)
rnti type %d
\n
"
,
rel8
->
harq_process
,
dlsch0
->
harq_mask
,
dlsch0_harq
->
round
,
dlsch0_harq
->
ndi
,
rel8
->
new_data_indicator_1
);
dlsch0_harq
->
ndi
,
rel8
->
new_data_indicator_1
,
rel8
->
rnti_type
);
switch
(
rel8
->
dci_format
)
{
switch
(
rel8
->
dci_format
)
{
...
@@ -1109,6 +1108,8 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) \n",rel8->harq_
...
@@ -1109,6 +1108,8 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) \n",rel8->harq_
if
(
dlsch0_harq
->
round
==
0
)
if
(
dlsch0_harq
->
round
==
0
)
dlsch0_harq
->
status
=
ACTIVE
;
dlsch0_harq
->
status
=
ACTIVE
;
dlsch0
->
harq_mask
|=
(
1
<<
rel8
->
harq_process
);
if
(
rel8
->
rnti_type
==
1
)
LOG_I
(
PHY
,
"DCI 1A: round %d, mcs %d, rballoc %x,rv %d, rnti %x
\n
"
,
dlsch0_harq
->
round
,
rel8
->
mcs_1
,
rel8
->
resource_block_coding
,
rel8
->
redundancy_version_1
,
rel8
->
rnti
);
if
(
rel8
->
rnti_type
==
1
)
LOG_I
(
PHY
,
"DCI 1A: round %d, mcs %d, rballoc %x,rv %d, rnti %x
\n
"
,
dlsch0_harq
->
round
,
rel8
->
mcs_1
,
rel8
->
resource_block_coding
,
rel8
->
redundancy_version_1
,
rel8
->
rnti
);
break
;
break
;
...
@@ -1270,6 +1271,7 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) \n",rel8->harq_
...
@@ -1270,6 +1271,7 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) \n",rel8->harq_
LOG_D
(
PHY
,
"DCI: Set harq_ids[%d] to %d (%p)
\n
"
,
subframe
,
rel8
->
harq_process
,
dlsch0
);
LOG_D
(
PHY
,
"DCI: Set harq_ids[%d] to %d (%p)
\n
"
,
subframe
,
rel8
->
harq_process
,
dlsch0
);
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_ids
[
subframe
]
=
rel8
->
harq_process
;
dlsch0
->
harq_mask
|=
(
1
<<
rel8
->
harq_process
);
dlsch0
->
rnti
=
rel8
->
rnti
;
dlsch0
->
rnti
=
rel8
->
rnti
;
...
@@ -2265,11 +2267,6 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d
...
@@ -2265,11 +2267,6 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d
void
fill_dci0
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
DCI_ALLOC_t
*
dci_alloc
,
void
fill_dci0
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
DCI_ALLOC_t
*
dci_alloc
,
nfapi_hi_dci0_dci_pdu
*
pdu
)
nfapi_hi_dci0_dci_pdu
*
pdu
)
{
{
uint8_t
UE_id
;
AssertFatal
((
UE_id
=
find_ulsch
(
pdu
->
dci_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
"No existing UE ULSCH for rnti %x
\n
"
,
pdu
->
dci_pdu_rel8
.
rnti
);
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
eNB
->
frame_parms
;
uint32_t
cqi_req
=
pdu
->
dci_pdu_rel8
.
cqi_csi_request
;
uint32_t
cqi_req
=
pdu
->
dci_pdu_rel8
.
cqi_csi_request
;
...
@@ -2429,12 +2426,10 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,
...
@@ -2429,12 +2426,10 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,
}
}
}
}
void
fill_ulsch
(
PHY_VARS_eNB
*
eNB
,
nfapi_ul_config_ulsch_pdu
*
ulsch_pdu
,
int
frame
,
int
subframe
)
{
void
fill_ulsch
(
PHY_VARS_eNB
*
eNB
,
nfapi_ul_config_ulsch_pdu
*
ulsch_pdu
,
int
frame
,
int
subframe
)
{
uint8_t
harq_pid
;
uint8_t
harq_pid
;
uint8_t
UE_id
;
uint8_t
UE_id
;
boolean_t
new_ulsch
=
(
find_ulsch
(
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST
)
==-
1
)
?
TRUE
:
FALSE
;
boolean_t
new_ulsch
=
(
find_ulsch
(
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST
)
==-
1
)
?
TRUE
:
FALSE
;
AssertFatal
((
UE_id
=
find_ulsch
(
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
AssertFatal
((
UE_id
=
find_ulsch
(
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
,
eNB
,
SEARCH_EXIST_OR_FREE
))
>=
0
,
...
@@ -2447,6 +2442,7 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
...
@@ -2447,6 +2442,7 @@ void 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
;
harq_pid
=
ulsch_pdu
->
ulsch_pdu_rel8
.
harq_process_number
;
ulsch
->
harq_mask
|=
1
<<
harq_pid
;
ulsch
->
harq_processes
[
harq_pid
]
->
frame
=
frame
;
ulsch
->
harq_processes
[
harq_pid
]
->
frame
=
frame
;
ulsch
->
harq_processes
[
harq_pid
]
->
subframe
=
subframe
;
ulsch
->
harq_processes
[
harq_pid
]
->
subframe
=
subframe
;
...
@@ -2460,10 +2456,10 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
...
@@ -2460,10 +2456,10 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
ulsch
->
harq_processes
[
harq_pid
]
->
dci_alloc
=
1
;
ulsch
->
harq_processes
[
harq_pid
]
->
dci_alloc
=
1
;
ulsch
->
harq_processes
[
harq_pid
]
->
rar_alloc
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
rar_alloc
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
=
ulsch_pdu
->
ulsch_pdu_rel8
.
cyclic_shift_2_for_drms
;
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
=
ulsch_pdu
->
ulsch_pdu_rel8
.
cyclic_shift_2_for_drms
;
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
=
12
-
(
frame_parms
->
Ncp
<<
1
)
-
(
use_srs
==
0
?
0
:
1
);
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
=
12
-
(
frame_parms
->
Ncp
<<
1
)
-
(
use_srs
==
0
?
0
:
1
);
ulsch
->
harq_processes
[
harq_pid
]
->
srs_active
=
use_srs
;
ulsch
->
harq_processes
[
harq_pid
]
->
srs_active
=
use_srs
;
//Mapping of cyclic shift field in DCI format0 to n_DMRS2 (3GPP 36.211, Table 5.5.2.1.1-1)
//Mapping of cyclic shift field in DCI format0 to n_DMRS2 (3GPP 36.211, Table 5.5.2.1.1-1)
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
==
0
)
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
==
0
)
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
=
0
;
...
@@ -2481,25 +2477,23 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
...
@@ -2481,25 +2477,23 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
=
10
;
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
=
10
;
else
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
==
7
)
else
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
==
7
)
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
=
9
;
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
=
9
;
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] Programming PUSCH with n_DMRS2 %d (cshift %d) for Frame %d, Subframe %d
\n
"
,
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] Programming PUSCH with n_DMRS2 %d (cshift %d) for Frame %d, Subframe %d
\n
"
,
eNB
->
Mod_id
,
harq_pid
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
,
eNB
->
Mod_id
,
harq_pid
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS
,
frame
,
subframe
);
frame
,
subframe
);
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
=
ulsch_pdu
->
ulsch_pdu_rel8
.
redundancy_version
;
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
=
ulsch_pdu
->
ulsch_pdu_rel8
.
redundancy_version
;
ulsch
->
harq_processes
[
harq_pid
]
->
Qm
=
ulsch_pdu
->
ulsch_pdu_rel8
.
modulation_type
;
ulsch
->
harq_processes
[
harq_pid
]
->
Qm
=
ulsch_pdu
->
ulsch_pdu_rel8
.
modulation_type
;
// Set O_ACK to 0 by default, will be set of DLSCH is scheduled and needs to be
// Set O_ACK to 0 by default, will be set of DLSCH is scheduled and needs to be
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
=
0
;
if
((
ulsch
->
harq_processes
[
harq_pid
]
->
status
==
SCH_IDLE
)
||
if
((
ulsch
->
harq_processes
[
harq_pid
]
->
status
==
SCH_IDLE
)
||
(
ulsch
->
harq_processes
[
harq_pid
]
->
ndi
!=
ulsch_pdu
->
ulsch_pdu_rel8
.
new_data_indication
)
||
(
ulsch
->
harq_processes
[
harq_pid
]
->
ndi
!=
ulsch_pdu
->
ulsch_pdu_rel8
.
new_data_indication
)
||
(
new_ulsch
==
TRUE
)){
(
new_ulsch
==
TRUE
)){
ulsch
->
harq_processes
[
harq_pid
]
->
status
=
ACTIVE
;
ulsch
->
harq_processes
[
harq_pid
]
->
status
=
ACTIVE
;
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
=
ulsch_pdu
->
ulsch_pdu_rel8
.
size
<<
3
;
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
=
ulsch_pdu
->
ulsch_pdu_rel8
.
size
<<
3
;
ulsch
->
harq_processes
[
harq_pid
]
->
Msc_initial
=
12
*
ulsch_pdu
->
ulsch_pdu_rel8
.
number_of_resource_blocks
;
ulsch
->
harq_processes
[
harq_pid
]
->
Msc_initial
=
12
*
ulsch_pdu
->
ulsch_pdu_rel8
.
number_of_resource_blocks
;
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_initial
=
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
;
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_initial
=
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
;
ulsch
->
harq_processes
[
harq_pid
]
->
round
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
round
=
0
;
...
@@ -2509,12 +2503,14 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
...
@@ -2509,12 +2503,14 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
// will be set if MAC has activated ULSCH_CQI_RI_PDU or ULSCH_CQI_HARQ_RI_PDU
// will be set if MAC has activated ULSCH_CQI_RI_PDU or ULSCH_CQI_HARQ_RI_PDU
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
}
}
else
ulsch
->
harq_processes
[
harq_pid
]
->
round
++
;
else
ulsch
->
harq_processes
[
harq_pid
]
->
round
++
;
ulsch
->
rnti
=
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
;
ulsch
->
rnti
=
ulsch_pdu
->
ulsch_pdu_rel8
.
rnti
;
LOG_D
(
PHY
,
"Filling ULSCH %x (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_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
"
,
ulsch
->
rnti
,
new_ulsch
,
ulsch
->
rnti
,
UE_id
,
new_ulsch
,
frame
,
frame
,
subframe
,
subframe
,
harq_pid
,
harq_pid
,
...
@@ -2523,13 +2519,9 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
...
@@ -2523,13 +2519,9 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
,
ulsch
->
harq_processes
[
harq_pid
]
->
Qm
,
ulsch
->
harq_processes
[
harq_pid
]
->
Qm
,
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
,
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
);
ulsch
->
harq_processes
[
harq_pid
]
->
round
);
}
}
int
dump_dci
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
DCI_ALLOC_t
*
dci
)
int
dump_dci
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
DCI_ALLOC_t
*
dci
)
{
{
switch
(
dci
->
format
)
{
switch
(
dci
->
format
)
{
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
1d8bec80
...
@@ -1267,8 +1267,8 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
...
@@ -1267,8 +1267,8 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
}
}
}
}
void
pusch_procedures
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
)
{
void
pusch_procedures
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
)
{
uint32_t
ret
=
0
,
i
;
uint32_t
ret
=
0
,
i
;
uint32_t
harq_pid
;
uint32_t
harq_pid
;
uint8_t
nPRS
;
uint8_t
nPRS
;
...
@@ -1278,49 +1278,42 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -1278,49 +1278,42 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
const
int
subframe
=
proc
->
subframe_rx
;
const
int
subframe
=
proc
->
subframe_rx
;
const
int
frame
=
proc
->
frame_rx
;
const
int
frame
=
proc
->
frame_rx
;
if
(
fp
->
frame_type
==
FDD
)
harq_pid
=
((
10
*
frame
)
+
subframe
)
&
7
;
if
(
fp
->
frame_type
==
FDD
)
harq_pid
=
((
10
*
frame
)
+
subframe
)
&
7
;
else
harq_pid
=
subframe
%
10
;
else
harq_pid
=
subframe
%
10
;
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
ulsch
=
eNB
->
ulsch
[
i
];
ulsch
=
eNB
->
ulsch
[
i
];
ulsch_harq
=
ulsch
->
harq_processes
[
harq_pid
];
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
"
,
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
);
frame
,
subframe
,
harq_pid
,
i
,
ulsch
->
rnti
);
if
((
ulsch
)
&&
if
((
ulsch
)
&&
(
ulsch
->
rnti
>
0
)
&&
(
ulsch
->
rnti
>
0
)
&&
(
ulsch_harq
->
status
==
ACTIVE
)
&&
(
ulsch_harq
->
status
==
ACTIVE
)
&&
(
ulsch_harq
->
frame
==
frame
)
&&
(
ulsch_harq
->
frame
==
frame
)
&&
(
ulsch_harq
->
subframe
==
subframe
)
&&
(
ulsch_harq
->
subframe
==
subframe
)
&&
(
ulsch_harq
->
handled
==
0
))
{
(
ulsch_harq
->
handled
==
0
))
{
// UE has ULSCH scheduling
// UE has ULSCH scheduling
for
(
int
rb
=
0
;
for
(
int
rb
=
0
;
rb
<=
ulsch_harq
->
nb_rb
;
rb
<=
ulsch_harq
->
nb_rb
;
rb
++
)
{
rb
++
)
{
int
rb2
=
rb
+
ulsch_harq
->
first_rb
;
int
rb2
=
rb
+
ulsch_harq
->
first_rb
;
eNB
->
rb_mask_ul
[
rb2
>>
5
]
|=
(
1
<<
(
rb2
&
31
));
eNB
->
rb_mask_ul
[
rb2
>>
5
]
|=
(
1
<<
(
rb2
&
31
));
}
}
LOG_D
(
PHY
,
"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d
\n
"
,
LOG_D
(
PHY
,
"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d
\n
"
,
eNB
->
Mod_id
,
eNB
->
Mod_id
,
frame
,
frame
,
subframe
,
subframe
,
i
);
i
);
nPRS
=
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[
subframe
<<
1
];
nPRS
=
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[
subframe
<<
1
];
ulsch
->
cyclicShift
=
(
ulsch_harq
->
n_DMRS2
+
ulsch
->
cyclicShift
=
(
ulsch_harq
->
n_DMRS2
+
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
+
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
+
nPRS
)
%
12
;
nPRS
)
%
12
;
LOG_D
(
PHY
,
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d, beta_cqi %d
\n
"
,
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d, beta_cqi %d
\n
"
,
...
@@ -1338,26 +1331,21 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -1338,26 +1331,21 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
,
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
,
nPRS
,
nPRS
,
ulsch_harq
->
O_ACK
,
ulsch_harq
->
O_ACK
,
ulsch
->
beta_offset_cqi_times8
);
ulsch
->
beta_offset_cqi_times8
);
start_meas
(
&
eNB
->
ulsch_demodulation_stats
);
start_meas
(
&
eNB
->
ulsch_demodulation_stats
);
rx_ulsch
(
eNB
,
proc
,
rx_ulsch
(
eNB
,
proc
,
i
);
i
);
stop_meas
(
&
eNB
->
ulsch_demodulation_stats
);
stop_meas
(
&
eNB
->
ulsch_demodulation_stats
);
start_meas
(
&
eNB
->
ulsch_decoding_stats
);
start_meas
(
&
eNB
->
ulsch_decoding_stats
);
ret
=
ulsch_decoding
(
eNB
,
proc
,
ret
=
ulsch_decoding
(
eNB
,
proc
,
i
,
i
,
0
,
// control_only_flag
0
,
// control_only_flag
ulsch_harq
->
V_UL_DAI
,
ulsch_harq
->
V_UL_DAI
,
ulsch_harq
->
nb_rb
>
20
?
1
:
0
);
ulsch_harq
->
nb_rb
>
20
?
1
:
0
);
stop_meas
(
&
eNB
->
ulsch_decoding_stats
);
stop_meas
(
&
eNB
->
ulsch_decoding_stats
);
...
@@ -1373,92 +1361,91 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -1373,92 +1361,91 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
ulsch_harq
->
o_ACK
[
1
],
ulsch_harq
->
o_ACK
[
1
],
ret
);
ret
);
//compute the expected ULSCH RX power (for the stats)
//compute the expected ULSCH RX power (for the stats)
ulsch_harq
->
delta_TF
=
get_hundred_times_delta_IF_eNB
(
eNB
,
i
,
harq_pid
,
0
);
// 0 means bw_factor is not considered
ulsch_harq
->
delta_TF
=
get_hundred_times_delta_IF_eNB
(
eNB
,
i
,
harq_pid
,
0
);
// 0 means bw_factor is not considered
if
(
ulsch_harq
->
cqi_crc_status
==
1
)
{
if
(
ulsch_harq
->
cqi_crc_status
==
1
)
{
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
//if (((frame%10) == 0) || (frame < 50))
//if (((frame%10) == 0) || (frame < 50))
print_CQI
(
ulsch_harq
->
o
,
ulsch_harq
->
uci_format
,
0
,
fp
->
N_RB_DL
);
print_CQI
(
ulsch_harq
->
o
,
ulsch_harq
->
uci_format
,
0
,
fp
->
N_RB_DL
);
#endif
#endif
fill_ulsch_cqi_indication
(
eNB
,
frame
,
subframe
,
fill_ulsch_cqi_indication
(
eNB
,
frame
,
subframe
,
ulsch_harq
,
ulsch_harq
,
ulsch
->
rnti
);
ulsch
->
rnti
);
}
}
if
(
ret
==
(
1
+
MAX_TURBO_ITERATIONS
))
{
if
(
ret
==
(
1
+
MAX_TURBO_ITERATIONS
))
{
T
(
T_ENB_PHY_ULSCH_UE_NACK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
ulsch
->
rnti
),
T
(
T_ENB_PHY_ULSCH_UE_NACK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
ulsch
->
rnti
),
T_INT
(
harq_pid
));
T_INT
(
harq_pid
));
fill_crc_indication
(
eNB
,
i
,
frame
,
subframe
,
1
);
// indicate NAK to MAC
fill_crc_indication
(
eNB
,
i
,
frame
,
subframe
,
1
);
// indicate NAK to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)
\n
"
,
LOG_D
(
PHY
,
"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)
\n
"
,
eNB
->
Mod_id
,
harq_pid
,
eNB
->
Mod_id
,
harq_pid
,
frame
,
subframe
,
i
,
frame
,
subframe
,
i
,
ulsch_harq
->
round
-
1
,
ulsch_harq
->
round
-
1
,
ulsch
->
Mlimit
,
ulsch
->
Mlimit
,
ulsch_harq
->
o_ACK
[
0
],
ulsch_harq
->
o_ACK
[
0
],
ulsch_harq
->
o_ACK
[
1
]);
ulsch_harq
->
o_ACK
[
1
]);
/*if (dB_fixed_times10(eNB->pusch_vars[i]->ulsch_power[0]) > 300) {
/*if (dB_fixed_times10(eNB->pusch_vars[i]->ulsch_power[0]) > 300) {
dump_ulsch(eNB,frame,subframe,i); exit(-1);
dump_ulsch(eNB,frame,subframe,i); exit(-1);
}
} */
*/
#if defined(MESSAGE_CHART_GENERATOR_PHY)
#if defined(MESSAGE_CHART_GENERATOR_PHY)
MSC_LOG_RX_DISCARDED_MESSAGE
(
MSC_LOG_RX_DISCARDED_MESSAGE
(
MSC_PHY_ENB
,
MSC_PHY_UE
,
MSC_PHY_ENB
,
MSC_PHY_UE
,
NULL
,
0
,
NULL
,
0
,
"%05u:%02u ULSCH received rnti %x harq id %u round %d"
,
"%05u:%02u ULSCH received rnti %x harq id %u round %d"
,
frame
,
subframe
,
frame
,
subframe
,
ulsch
->
rnti
,
harq_pid
,
ulsch
->
rnti
,
harq_pid
,
ulsch_harq
->
round
-
1
ulsch_harq
->
round
-
1
);
);
#endif
#endif
/* Mark the HARQ process to release it later if max transmission reached
* (see below).
* MAC does not send the max transmission count, we have to deal with it
* locally in PHY.
*/
ulsch_harq
->
handled
=
1
;
}
// ulsch in error
}
// ulsch in error
else
{
else
{
fill_crc_indication
(
eNB
,
i
,
frame
,
subframe
,
0
);
// indicate ACK to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
ulsch_harq
->
status
=
SCH_IDLE
;
ulsch
->
harq_mask
&=
~
(
1
<<
harq_pid
);
fill_crc_indication
(
eNB
,
i
,
frame
,
subframe
,
0
);
// indicate ACK to MAC
fill_rx_indication
(
eNB
,
i
,
frame
,
subframe
);
// indicate SDU to MAC
T
(
T_ENB_PHY_ULSCH_UE_ACK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
ulsch
->
rnti
),
T
(
T_ENB_PHY_ULSCH_UE_ACK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
ulsch
->
rnti
),
T_INT
(
harq_pid
));
T_INT
(
harq_pid
));
ulsch_harq
->
status
=
SCH_IDLE
;
#if defined(MESSAGE_CHART_GENERATOR_PHY)
#if defined(MESSAGE_CHART_GENERATOR_PHY)
MSC_LOG_RX_MESSAGE
(
MSC_LOG_RX_MESSAGE
(
MSC_PHY_ENB
,
MSC_PHY_UE
,
MSC_PHY_ENB
,
MSC_PHY_UE
,
NULL
,
0
,
NULL
,
0
,
"%05u:%02u ULSCH received rnti %x harq id %u"
,
"%05u:%02u ULSCH received rnti %x harq id %u"
,
frame
,
subframe
,
frame
,
subframe
,
ulsch
->
rnti
,
harq_pid
ulsch
->
rnti
,
harq_pid
);
);
#endif
#endif
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_ULSCH
#ifdef DEBUG_ULSCH
LOG_D
(
PHY
,
"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:"
,
frame
,
subframe
,
LOG_D
(
PHY
,
"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:"
,
frame
,
subframe
,
harq_pid
,
ulsch_harq
->
TBS
>>
3
);
harq_pid
,
ulsch_harq
->
TBS
>>
3
);
for
(
j
=
0
;
j
<
ulsch_harq
->
TBS
>>
3
;
j
++
)
for
(
j
=
0
;
j
<
ulsch_harq
->
TBS
>>
3
;
j
++
)
LOG_T
(
PHY
,
"%x."
,
ulsch
->
harq_processes
[
harq_pid
]
->
b
[
j
]);
LOG_T
(
PHY
,
"%x."
,
ulsch
->
harq_processes
[
harq_pid
]
->
b
[
j
]);
LOG_T
(
PHY
,
"
\n
"
);
LOG_T
(
PHY
,
"
\n
"
);
#endif
#endif
#endif
#endif
}
// ulsch not in error
}
// ulsch not in error
if
(
ulsch_harq
->
O_ACK
>
0
)
fill_ulsch_harq_indication
(
eNB
,
ulsch_harq
,
ulsch
->
rnti
,
frame
,
subframe
,
ulsch
->
bundling
);
if
(
ulsch_harq
->
O_ACK
>
0
)
fill_ulsch_harq_indication
(
eNB
,
ulsch_harq
,
ulsch
->
rnti
,
frame
,
subframe
,
ulsch
->
bundling
);
LOG_D
(
PHY
,
"[eNB %d] Frame %d subframe %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d
\n
"
,
LOG_D
(
PHY
,
"[eNB %d] Frame %d subframe %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
,
eNB
->
Mod_id
,
frame
,
subframe
,
harq_pid
,
harq_pid
,
...
@@ -1469,24 +1456,22 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -1469,24 +1456,22 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
ulsch_harq
->
o_ACK
[
1
],
ulsch_harq
->
o_ACK
[
1
],
eNB
->
UE_stats
[
i
].
ulsch_errors
[
harq_pid
],
eNB
->
UE_stats
[
i
].
ulsch_errors
[
harq_pid
],
eNB
->
UE_stats
[
i
].
ulsch_decoding_attempts
[
harq_pid
][
0
]);
eNB
->
UE_stats
[
i
].
ulsch_decoding_attempts
[
harq_pid
][
0
]);
ulsch_harq
->
handled
=
1
;
}
// if ((ulsch) &&
}
// if ((ulsch) &&
// (ulsch->rnti>0) &&
// (ulsch->rnti>0) &&
// (ulsch_harq->status == ACTIVE))
// (ulsch_harq->status == ACTIVE))
else
if
((
ulsch
)
&&
else
if
((
ulsch
)
&&
(
ulsch
->
rnti
>
0
)
&&
(
ulsch
->
rnti
>
0
)
&&
(
ulsch_harq
->
status
==
ACTIVE
)
&&
(
ulsch_harq
->
status
==
ACTIVE
)
&&
(
ulsch_harq
->
frame
==
frame
)
&&
(
ulsch_harq
->
frame
==
frame
)
&&
(
ulsch_harq
->
subframe
==
subframe
)
&&
(
ulsch_harq
->
subframe
==
subframe
)
&&
(
ulsch_harq
->
handled
==
1
))
{
(
ulsch_harq
->
handled
==
1
))
{
// this harq process is stale, kill it, this 1024 frames later (10s), consider reducing that
// this harq process is stale, kill it, this 1024 frames later (10s), consider reducing that
ulsch_harq
->
status
=
SCH_IDLE
;
ulsch_harq
->
status
=
SCH_IDLE
;
ulsch
->
harq_mask
=
0
;
ulsch_harq
->
handled
=
0
;
LOG_W
(
PHY
,
"Removing stale ULSCH config for UE %x
\n
"
,
ulsch
->
rnti
);
ulsch
->
harq_mask
&=
~
(
1
<<
harq_pid
);
LOG_W
(
PHY
,
"Removing stale ULSCH config for UE %x harq_pid %d (harq_mask is now 0x%2.2x)
\n
"
,
ulsch
->
rnti
,
harq_pid
,
ulsch
->
harq_mask
);
}
}
}
// for (i=0; i<NUMBER_OF_UE_MAX; i++) {
}
// for (i=0; i<NUMBER_OF_UE_MAX; i++) {
}
}
...
...
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
1d8bec80
...
@@ -113,6 +113,9 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
...
@@ -113,6 +113,9 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
// drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
if
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)
continue
;
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
if
((
soundingRS_UL_ConfigDedicated
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
soundingRS_UL_ConfigDedicated
)
!=
NULL
)
{
if
((
soundingRS_UL_ConfigDedicated
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
soundingRS_UL_ConfigDedicated
)
!=
NULL
)
{
...
@@ -166,6 +169,9 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
...
@@ -166,6 +169,9 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
// drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
if
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)
continue
;
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
if
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
cqi_ReportConfig
)
{
if
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
cqi_ReportConfig
)
{
...
...
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