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
alex037yang
OpenXG-RAN
Commits
d99d540d
Commit
d99d540d
authored
7 years ago
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fill_DCI now supports rv and ndi for both CWs
parent
5f3cc30c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
782 additions
and
875 deletions
+782
-875
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+782
-875
No files found.
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
d99d540d
...
...
@@ -251,9 +251,10 @@ void DL_channel(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_flag,dou
}
}
void
fill_DCI
(
PHY_VARS_eNB
*
eNB
,
DCI_ALLOC_t
*
dci_alloc
,
void
fill_DCI
(
PHY_VARS_eNB
*
eNB
,
DCI_ALLOC_t
*
dci_alloc
,
int
subframe
,
int
n_rnti
,
int
n_users
,
...
...
@@ -263,962 +264,863 @@ void fill_DCI(PHY_VARS_eNB *eNB,
int
TPC
,
int
mcs1
,
int
mcs2
,
int
ndi
,
int
rv
,
int
ndi1
,
int
ndi2
,
int
rv1
,
int
rv2
,
int
*
num_common_dci
,
int
*
num_ue_spec_dci
,
int
*
num_dci
)
{
int
*
num_dci
)
{
int
k
;
int
dci_length
=
-
1
,
dci_length_bytes
=
-
1
;
int
dci_length
=-
1
,
dci_length_bytes
=-
1
;
// printf("Generating DCIs for %d users, TM %d, mcs1 %d\n",n_users,transmission_mode,mcs1);
for
(
k
=
0
;
k
<
n_users
;
k
++
)
{
switch
(
transmission_mode
)
{
for
(
k
=
0
;
k
<
n_users
;
k
++
)
{
switch
(
transmission_mode
)
{
case
1
:
case
2
:
case
7
:
if
(
common_flag
==
0
)
{
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1_1_5MHz_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_1_5MHz_TDD_t
);
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_1_5MHz_TDD_t
);
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
case
25
:
dci_length
=
sizeof_DCI1_5MHz_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_5MHz_TDD_t
);
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_5MHz_TDD_t
);
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_5MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
case
50
:
dci_length
=
sizeof_DCI1_10MHz_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_10MHz_TDD_t
);
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_10MHz_TDD_t
);
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_10MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
case
100
:
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_20MHz_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
dci_length
=
sizeof_DCI1_20MHz_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_20MHz_TDD_t
);
dci_length_bytes
=
sizeof
(
DCI1_20MHz_TDD_t
);
break
;
}
}
else
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1_1_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_1_5MHz_FDD_t
);
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_1_5MHz_FDD_t
);
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
case
25
:
dci_length
=
sizeof_DCI1_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_5MHz_FDD_t
);
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_5MHz_FDD_t
);
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
case
50
:
dci_length
=
sizeof_DCI1_10MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_10MHz_FDD_t
);
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_10MHz_FDD_t
);
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
case
100
:
dci_length
=
sizeof_DCI1_20MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1_20MHz_FDD_t
);
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv
;
dci_length_bytes
=
sizeof
(
DCI1_20MHz_FDD_t
);
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
ndi1
;
((
DCI1_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
rv1
;
break
;
}
}
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
dci_alloc
[
*
num_dci
].
dci_length
=
dci_length
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
format
=
format1
;
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
// printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci
(
0
,
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu_1
[
0
],
n_rnti
+
k
,
format1
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_dci
=
*
num_dci
+
1
;
*
num_ue_spec_dci
=
*
num_ue_spec_dci
+
1
;
n_rnti
+
k
,
format1
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_dci
=
*
num_dci
+
1
;
*
num_ue_spec_dci
=
*
num_ue_spec_dci
+
1
;
}
else
{
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1A_1_5MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_TDD_1_6_t
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_TDD_1_6_t
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
25
:
dci_length
=
sizeof_DCI1A_5MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_TDD_1_6_t
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_TDD_1_6_t
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
50
:
dci_length
=
sizeof_DCI1A_10MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_TDD_1_6_t
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_TDD_1_6_t
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
100
:
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length
=
sizeof_DCI1A_20MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_TDD_1_6_t
);
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_TDD_1_6_t
);
break
;
}
}
else
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1A_1_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_FDD_t
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_FDD_t
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
25
:
dci_length
=
sizeof_DCI1A_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_FDD_t
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_FDD_t
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
50
:
dci_length
=
sizeof_DCI1A_10MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_FDD_t
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_FDD_t
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
100
:
dci_length
=
sizeof_DCI1A_20MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_FDD_t
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_FDD_t
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
}
}
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
dci_alloc
[
*
num_dci
].
dci_length
=
dci_length
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
SI_RNTI
;
dci_alloc
[
*
num_dci
].
format
=
format1A
;
dci_alloc
[
*
num_dci
].
firstCCE
=
0
;
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
printf
(
"Generating dlsch params for user %d
\n
"
,
k
);
generate_eNB_dlsch_params_from_dci
(
0
,
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf ("Generating dlsch params for user %d\n", k);
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu_1
[
0
],
SI_RNTI
,
format1A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_common_dci
=*
num_common_dci
+
1
;
SI_RNTI
,
format1A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_common_dci
=
*
num_common_dci
+
1
;
*
num_dci
=
*
num_dci
+
1
;
}
break
;
case
3
:
if
(
common_flag
==
0
)
{
if
(
eNB
->
frame_parms
.
nb_antennas_tx
==
2
)
{
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI2A_1_5MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_1_5MHz_2A_TDD_t
);
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_1_5MHz_2A_TDD_t
);
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
25
:
dci_length
=
sizeof_DCI2A_5MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_5MHz_2A_TDD_t
);
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_5MHz_2A_TDD_t
);
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
50
:
dci_length
=
sizeof_DCI2A_10MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_10MHz_2A_TDD_t
);
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_10MHz_2A_TDD_t
);
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
100
:
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
dci_length
=
sizeof_DCI2A_20MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_20MHz_2A_TDD_t
);
dci_length_bytes
=
sizeof
(
DCI2A_20MHz_2A_TDD_t
);
break
;
}
}
else
{
}
else
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI2A_1_5MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_1_5MHz_2A_FDD_t
);
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_1_5MHz_2A_FDD_t
);
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
25
:
dci_length
=
sizeof_DCI2A_5MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_5MHz_2A_FDD_t
);
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_5MHz_2A_FDD_t
);
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
50
:
dci_length
=
sizeof_DCI2A_10MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_10MHz_2A_FDD_t
);
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_10MHz_2A_FDD_t
);
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
100
:
dci_length
=
sizeof_DCI2A_20MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2A_20MHz_2A_FDD_t
);
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2A_20MHz_2A_FDD_t
);
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2A_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
}
}
}
else
if
(
eNB
->
frame_parms
.
nb_antennas_tx
==
4
)
{
printf
(
"TM3 needs for 4 TX antennas not implemented!
\n
"
);
exit
(
-
1
);
}
else
{
printf
(
"TM3 needs 2 or 4 TX antennas!
\n
"
);
exit
(
-
1
);
}
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
dci_alloc
[
*
num_dci
].
dci_length
=
dci_length
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
format
=
format2A
;
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A);
generate_eNB_dlsch_params_from_dci
(
0
,
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf ("Generating dlsch params for user %d / format 2A (%d)\n", k, format2A);
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu_1
[
0
],
n_rnti
+
k
,
format2A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
n_rnti
+
k
,
format2A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_dci
=
*
num_dci
+
1
;
*
num_ue_spec_dci
=
*
num_ue_spec_dci
+
1
;
}
else
{
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1A_1_5MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_TDD_1_6_t
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_TDD_1_6_t
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
25
:
dci_length
=
sizeof_DCI1A_5MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_TDD_1_6_t
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_TDD_1_6_t
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
50
:
dci_length
=
sizeof_DCI1A_10MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_TDD_1_6_t
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_TDD_1_6_t
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
100
:
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length
=
sizeof_DCI1A_20MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_TDD_1_6_t
);
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_TDD_1_6_t
);
break
;
}
}
else
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1A_1_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_FDD_t
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_FDD_t
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
25
:
dci_length
=
sizeof_DCI1A_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_FDD_t
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_FDD_t
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
50
:
dci_length
=
sizeof_DCI1A_10MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_FDD_t
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_FDD_t
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
100
:
dci_length
=
sizeof_DCI1A_20MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_FDD_t
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_FDD_t
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
}
}
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
dci_alloc
[
*
num_dci
].
dci_length
=
dci_length
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
SI_RNTI
;
dci_alloc
[
*
num_dci
].
format
=
format1A
;
dci_alloc
[
*
num_dci
].
firstCCE
=
0
;
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci
(
0
,
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf ("Generating dlsch params for user %d\n", k);
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu_1
[
0
],
SI_RNTI
,
format1A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
SI_RNTI
,
format1A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_common_dci
=
*
num_common_dci
+
1
;
*
num_dci
=
*
num_dci
+
1
;
}
//printf
("Generated DCI format 2A (Transmission Mode 3)\n");
//printf
("Generated DCI format 2A (Transmission Mode 3)\n");
break
;
case
4
:
if
(
common_flag
==
0
)
{
if
(
eNB
->
frame_parms
.
nb_antennas_tx
==
2
)
{
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI2_1_5MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_1_5MHz_2A_TDD_t
);
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_1_5MHz_2A_TDD_t
);
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_1_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
25
:
dci_length
=
sizeof_DCI2_5MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_5MHz_2A_TDD_t
);
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_5MHz_2A_TDD_t
);
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_5MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
50
:
dci_length
=
sizeof_DCI2_10MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_10MHz_2A_TDD_t
);
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_10MHz_2A_TDD_t
);
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_10MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
100
:
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_20MHz_2A_TDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
dci_length
=
sizeof_DCI2_20MHz_2A_TDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_20MHz_2A_TDD_t
);
dci_length_bytes
=
sizeof
(
DCI2_20MHz_2A_TDD_t
);
break
;
}
}
else
{
}
else
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI2_1_5MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_1_5MHz_2A_FDD_t
);
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_1_5MHz_2A_FDD_t
);
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_1_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
25
:
dci_length
=
sizeof_DCI2_5MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_5MHz_2A_FDD_t
);
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_5MHz_2A_FDD_t
);
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_5MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
50
:
dci_length
=
sizeof_DCI2_10MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_10MHz_2A_FDD_t
);
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_10MHz_2A_FDD_t
);
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_10MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
case
100
:
dci_length
=
sizeof_DCI2_20MHz_2A_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI2_20MHz_2A_FDD_t
);
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv
;
dci_length_bytes
=
sizeof
(
DCI2_20MHz_2A_FDD_t
);
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rah
=
0
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
DLSCH_RB_ALLOC
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
0
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs1
=
mcs1
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi1
=
ndi1
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv1
=
rv1
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs2
=
mcs2
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi2
=
ndi2
;
((
DCI2_20MHz_2A_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv2
=
rv2
;
break
;
}
}
}
else
if
(
eNB
->
frame_parms
.
nb_antennas_tx
==
4
)
{
}
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
dci_alloc
[
*
num_dci
].
dci_length
=
dci_length
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
format
=
format2
;
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
printf
(
"Generating dlsch params for user %d
\n
"
,
k
);
generate_eNB_dlsch_params_from_dci
(
0
,
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf ("Generating dlsch params for user %d\n", k);
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu_1
[
0
],
n_rnti
+
k
,
format2
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
n_rnti
+
k
,
format2
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_dci
=
*
num_dci
+
1
;
*
num_ue_spec_dci
=
*
num_ue_spec_dci
+
1
;
}
else
{
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1A_1_5MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_TDD_1_6_t
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_TDD_1_6_t
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
25
:
dci_length
=
sizeof_DCI1A_5MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_TDD_1_6_t
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_TDD_1_6_t
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
50
:
dci_length
=
sizeof_DCI1A_10MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_TDD_1_6_t
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_TDD_1_6_t
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
100
:
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
dai
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_TDD_1_6_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length
=
sizeof_DCI1A_20MHz_TDD_1_6_t
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_TDD_1_6_t
);
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_TDD_1_6_t
);
break
;
}
}
else
{
switch
(
eNB
->
frame_parms
.
N_RB_DL
)
{
case
6
:
dci_length
=
sizeof_DCI1A_1_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_FDD_t
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_1_5MHz_FDD_t
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_1_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
25
:
dci_length
=
sizeof_DCI1A_5MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_FDD_t
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_5MHz_FDD_t
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_5MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
50
:
dci_length
=
sizeof_DCI1A_10MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_FDD_t
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_10MHz_FDD_t
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_10MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
case
100
:
dci_length
=
sizeof_DCI1A_20MHz_FDD_t
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_FDD_t
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
dci_length_bytes
=
sizeof
(
DCI1A_20MHz_FDD_t
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
vrb_type
=
1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_DL
,
0
,
9
);
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
TPC
=
TPC
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
harq_pid
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
mcs
=
mcs1
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
ndi
=
0
;
((
DCI1A_20MHz_FDD_t
*
)
&
DLSCH_alloc_pdu_1
[
k
])
->
rv
=
0
;
break
;
}
}
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu_1
[
k
],
dci_length_bytes
);
dci_alloc
[
*
num_dci
].
dci_length
=
dci_length
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
SI_RNTI
;
dci_alloc
[
*
num_dci
].
format
=
format1A
;
dci_alloc
[
*
num_dci
].
firstCCE
=
0
;
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
printf
(
"Generating dlsch params for user %d
\n
"
,
k
);
generate_eNB_dlsch_params_from_dci
(
0
,
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
//printf ("Generating dlsch params for user %d\n", k);
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu_1
[
0
],
SI_RNTI
,
format1A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
SI_RNTI
,
format1A
,
eNB
->
dlsch
[
0
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
0
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
*
num_common_dci
=
*
num_common_dci
+
1
;
*
num_dci
=
*
num_dci
+
1
;
}
break
;
case
5
:
case
6
:
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu2_1E
[
k
],
sizeof
(
DCI1E_5MHz_2A_M10PRB_TDD_t
));
memcpy
(
&
dci_alloc
[
*
num_dci
].
dci_pdu
[
0
],
&
DLSCH_alloc_pdu2_1E
[
k
],
sizeof
(
DCI1E_5MHz_2A_M10PRB_TDD_t
));
dci_alloc
[
*
num_dci
].
dci_length
=
sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t
;
dci_alloc
[
*
num_dci
].
L
=
1
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
rnti
=
n_rnti
+
k
;
dci_alloc
[
*
num_dci
].
format
=
format1E_2A_M10PRB
;
dci_alloc
[
*
num_dci
].
firstCCE
=
4
*
k
;
printf
(
"Generating dlsch params for user %d
\n
"
,
k
);
generate_eNB_dlsch_params_from_dci
(
0
,
dci_alloc
[
*
num_dci
].
firstCCE
=
4
*
k
;
//printf ("Generating dlsch params for user %d\n",
k);
generate_eNB_dlsch_params_from_dci
(
0
,
subframe
,
&
DLSCH_alloc_pdu2_1E
[
k
],
n_rnti
+
k
,
format1E_2A_M10PRB
,
eNB
->
dlsch
[
k
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
k
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
n_rnti
+
k
,
format1E_2A_M10PRB
,
eNB
->
dlsch
[
k
],
&
eNB
->
frame_parms
,
eNB
->
pdsch_config_dedicated
,
SI_RNTI
,
0
,
P_RNTI
,
eNB
->
UE_stats
[
k
].
DL_pmi_single
,
transmission_mode
>=
7
?
transmission_mode
:
0
);
dump_dci
(
&
eNB
->
frame_parms
,
&
dci_alloc
[
*
num_dci
]);
*
num_ue_spec_dci
=
*
num_ue_spec_dci
+
1
;
*
num_dci
=
*
num_dci
+
1
;
break
;
default:
printf
(
"Unsupported Transmission Mode!!!"
);
exit
(
-
1
);
printf
(
"Unsupported Transmission Mode!!!"
);
exit
(
-
1
);
break
;
}
}
}
int
n_users
=
1
;
sub_frame_t
subframe
=
7
;
DCI_PDU
DCI_pdu
;
...
...
@@ -2209,6 +2111,8 @@ int main(int argc, char **argv)
mcs1
,
mcs2
,
1
,
1
,
0
,
0
,
&
num_common_dci
,
&
num_ue_spec_dci
,
...
...
@@ -2411,13 +2315,16 @@ int main(int argc, char **argv)
num_ue_spec_dci
=
0
;
if
(
round
==
0
)
{
// First round
fill_DCI
(
eNB
,
&
dci_alloc
[
0
],
subframe
,
n_rnti
,
n_users
,
transmission_mode
,
common_flag
,
DLSCH_RB_ALLOC
,
TPC
,
mcs1
,
mcs2
,
!
(
trials
&
1
),
round
&
3
,
&
num_common_dci
,
&
num_ue_spec_dci
,
&
num_dci
);
}
else
{
fill_DCI
(
eNB
,
&
dci_alloc
[
0
],
subframe
,
n_rnti
,
n_users
,
transmission_mode
,
common_flag
,
DLSCH_RB_ALLOC
,
TPC
,
(
TB0_active
==
1
)
?
mcs1
:
0
,
mcs2
,
!
(
trials
&
1
),(
TB1_active
==
1
)
?
round
&
3
:
0
,
&
num_common_dci
,
&
num_ue_spec_dci
,
&
num_dci
);
fill_DCI
(
eNB
,
&
dci_alloc
[
0
],
subframe
,
n_rnti
,
n_users
,
transmission_mode
,
common_flag
,
DLSCH_RB_ALLOC
,
TPC
,
mcs1
,
mcs2
,
trials
&
1
,
trials
&
1
,
round
&
3
,
round
&
3
,
&
num_common_dci
,
&
num_ue_spec_dci
,
&
num_dci
);
}
else
{
fill_DCI
(
eNB
,
&
dci_alloc
[
0
],
subframe
,
n_rnti
,
n_users
,
transmission_mode
,
common_flag
,
DLSCH_RB_ALLOC
,
TPC
,
(
TB0_active
==
1
)
?
mcs1
:
0
,
(
TB1_active
==
1
)
?
mcs2
:
0
,
trials
&
1
,
trials
&
1
,
(
TB0_active
==
1
)
?
round
&
3
:
1
,
(
TB1_active
==
1
)
?
round
&
3
:
1
,
&
num_common_dci
,
&
num_ue_spec_dci
,
&
num_dci
);
}
for
(
i
=
num_common_dci
;
i
<
num_dci
;
i
++
)
{
dci_alloc
[
i
].
firstCCE
=
get_nCCE_offset_l1
(
CCE_table
,
...
...
This diff is collapsed.
Click to expand it.
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