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
ZhouShuya
OpenXG-RAN
Commits
ed1714aa
Commit
ed1714aa
authored
Oct 06, 2017
by
Cedric Roux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
minor: fix spacing
parent
79b7b8ad
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
810 additions
and
892 deletions
+810
-892
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+810
-892
No files found.
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
ed1714aa
...
@@ -61,8 +61,8 @@
...
@@ -61,8 +61,8 @@
#define ENABLE_MAC_PAYLOAD_DEBUG
#define ENABLE_MAC_PAYLOAD_DEBUG
#define DEBUG_eNB_SCHEDULER 1
#define DEBUG_eNB_SCHEDULER 1
int
choose
(
int
n
,
int
k
)
{
int
choose
(
int
n
,
int
k
)
{
int
res
=
1
;
int
res
=
1
;
int
res2
=
1
;
int
res2
=
1
;
int
i
;
int
i
;
...
@@ -77,8 +77,8 @@ int choose(int n,int k) {
...
@@ -77,8 +77,8 @@ int choose(int n,int k) {
}
}
// Patented algorithm from Yang et al, US Patent 2009, "Channel Quality Indexing and Reverse Indexing"
// Patented algorithm from Yang et al, US Patent 2009, "Channel Quality Indexing and Reverse Indexing"
void
reverse_index
(
int
N
,
int
M
,
int
r
,
int
*
v
)
{
void
reverse_index
(
int
N
,
int
M
,
int
r
,
int
*
v
)
{
int
BaseValue
=
0
;
int
BaseValue
=
0
;
int
IncreaseValue
,
ThresholdValue
;
int
IncreaseValue
,
ThresholdValue
;
int
sumV
;
int
sumV
;
...
@@ -90,7 +90,6 @@ void reverse_index(int N,int M,int r,int *v) {
...
@@ -90,7 +90,6 @@ void reverse_index(int N,int M,int r,int *v) {
sumV
=
0
;
sumV
=
0
;
i
=
M
;
i
=
M
;
while
(
i
>
0
&&
r
>
0
)
{
while
(
i
>
0
&&
r
>
0
)
{
IncreaseValue
=
choose
(
N
-
M
+
1
-
sumV
-
v
[
i
-
1
]
+
i
-
2
,
i
-
1
);
IncreaseValue
=
choose
(
N
-
M
+
1
-
sumV
-
v
[
i
-
1
]
+
i
-
2
,
i
-
1
);
ThresholdValue
=
BaseValue
+
IncreaseValue
;
ThresholdValue
=
BaseValue
+
IncreaseValue
;
if
(
r
>=
ThresholdValue
)
{
if
(
r
>=
ThresholdValue
)
{
...
@@ -103,26 +102,27 @@ void reverse_index(int N,int M,int r,int *v) {
...
@@ -103,26 +102,27 @@ void reverse_index(int N,int M,int r,int *v) {
i
--
;
i
--
;
BaseValue
=
0
;
BaseValue
=
0
;
}
}
}
}
}
}
int
to_prb
(
int
dl_Bandwidth
)
{
int
to_prb
(
int
dl_Bandwidth
)
{
int
prbmap
[
6
]
=
{
6
,
15
,
25
,
50
,
75
,
100
};
int
prbmap
[
6
]
=
{
6
,
15
,
25
,
50
,
75
,
100
};
AssertFatal
(
dl_Bandwidth
<
6
,
"dl_Bandwidth is 0..5
\n
"
);
AssertFatal
(
dl_Bandwidth
<
6
,
"dl_Bandwidth is 0..5
\n
"
);
return
(
prbmap
[
dl_Bandwidth
]);
return
(
prbmap
[
dl_Bandwidth
]);
}
}
int
to_rbg
(
int
dl_Bandwidth
)
{
int
to_rbg
(
int
dl_Bandwidth
)
{
int
rbgmap
[
6
]
=
{
6
,
8
,
13
,
17
,
19
,
25
};
int
rbgmap
[
6
]
=
{
6
,
8
,
13
,
17
,
19
,
25
};
AssertFatal
(
dl_Bandwidth
<
6
,
"dl_Bandwidth is 0..5
\n
"
);
AssertFatal
(
dl_Bandwidth
<
6
,
"dl_Bandwidth is 0..5
\n
"
);
return
(
rbgmap
[
dl_Bandwidth
]);
return
(
rbgmap
[
dl_Bandwidth
]);
}
}
int
get_phich_resource_times6
(
COMMON_channels_t
*
cc
)
int
get_phich_resource_times6
(
COMMON_channels_t
*
cc
)
{
{
int
phichmap
[
4
]
=
{
1
,
3
,
6
,
12
};
int
phichmap
[
4
]
=
{
1
,
3
,
6
,
12
};
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
AssertFatal
(
cc
->
mib
!=
NULL
,
"cc->mib is null
\n
"
);
AssertFatal
(
cc
->
mib
!=
NULL
,
"cc->mib is null
\n
"
);
...
@@ -133,8 +133,8 @@ int get_phich_resource_times6(COMMON_channels_t *cc) {
...
@@ -133,8 +133,8 @@ int get_phich_resource_times6(COMMON_channels_t *cc) {
return
(
phichmap
[
cc
->
mib
->
message
.
phich_Config
.
phich_Resource
]);
return
(
phichmap
[
cc
->
mib
->
message
.
phich_Config
.
phich_Resource
]);
}
}
uint16_t
mac_computeRIV
(
uint16_t
N_RB_DL
,
uint16_t
RBstart
,
uint16_t
Lcrbs
)
{
uint16_t
mac_computeRIV
(
uint16_t
N_RB_DL
,
uint16_t
RBstart
,
uint16_t
Lcrbs
)
{
uint16_t
RIV
;
uint16_t
RIV
;
if
(
Lcrbs
<=
(
1
+
(
N_RB_DL
>>
1
)))
if
(
Lcrbs
<=
(
1
+
(
N_RB_DL
>>
1
)))
...
@@ -145,8 +145,8 @@ uint16_t mac_computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs) {
...
@@ -145,8 +145,8 @@ uint16_t mac_computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs) {
return
(
RIV
);
return
(
RIV
);
}
}
uint8_t
getQm
(
uint8_t
mcs
)
{
uint8_t
getQm
(
uint8_t
mcs
)
{
if
(
mcs
<
10
)
return
(
2
);
if
(
mcs
<
10
)
return
(
2
);
else
if
(
mcs
<
17
)
return
(
4
);
else
if
(
mcs
<
17
)
return
(
4
);
else
return
(
6
);
else
return
(
6
);
...
@@ -159,7 +159,6 @@ void get_Msg3alloc(COMMON_channels_t *cc,
...
@@ -159,7 +159,6 @@ void get_Msg3alloc(COMMON_channels_t *cc,
frame_t
*
frame
,
frame_t
*
frame
,
sub_frame_t
*
subframe
)
sub_frame_t
*
subframe
)
{
{
// Fill in other TDD Configuration!!!!
// Fill in other TDD Configuration!!!!
if
(
cc
->
tdd_Config
==
NULL
)
{
// FDD
if
(
cc
->
tdd_Config
==
NULL
)
{
// FDD
...
@@ -314,9 +313,7 @@ uint8_t subframe2harqpid(COMMON_channels_t *cc,frame_t frame,sub_frame_t subfram
...
@@ -314,9 +313,7 @@ uint8_t subframe2harqpid(COMMON_channels_t *cc,frame_t frame,sub_frame_t subfram
if
(
cc
->
tdd_Config
==
NULL
)
{
// FDD
if
(
cc
->
tdd_Config
==
NULL
)
{
// FDD
ret
=
(((
frame
<<
1
)
+
subframe
)
&
7
);
ret
=
(((
frame
<<
1
)
+
subframe
)
&
7
);
}
else
{
}
else
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
1
:
case
1
:
if
((
subframe
==
2
)
||
if
((
subframe
==
2
)
||
(
subframe
==
3
)
||
(
subframe
==
3
)
||
...
@@ -376,7 +373,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
...
@@ -376,7 +373,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
frame_t
frame
,
frame_t
frame
,
sub_frame_t
current_subframe
)
sub_frame_t
current_subframe
)
{
{
uint8_t
ul_subframe
=
0
;
uint8_t
ul_subframe
=
0
;
uint32_t
ul_frame
=
0
;
uint32_t
ul_frame
=
0
;
...
@@ -387,7 +383,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
...
@@ -387,7 +383,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
1
:
case
1
:
switch
(
current_subframe
)
{
switch
(
current_subframe
)
{
case
9
:
case
9
:
case
0
:
case
0
:
ul_subframe
=
7
;
ul_subframe
=
7
;
...
@@ -404,7 +399,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
...
@@ -404,7 +399,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
case
3
:
case
3
:
switch
(
current_subframe
)
{
switch
(
current_subframe
)
{
case
0
:
case
0
:
case
5
:
case
5
:
case
6
:
case
6
:
...
@@ -428,7 +422,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
...
@@ -428,7 +422,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
case
4
:
case
4
:
switch
(
current_subframe
)
{
switch
(
current_subframe
)
{
case
0
:
case
0
:
case
5
:
case
5
:
case
6
:
case
6
:
...
@@ -456,7 +449,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
...
@@ -456,7 +449,6 @@ uint8_t get_Msg3harqpid(COMMON_channels_t *cc,
}
}
return
(
subframe2harqpid
(
cc
,
ul_frame
,
ul_subframe
));
return
(
subframe2harqpid
(
cc
,
ul_frame
,
ul_subframe
));
}
}
uint32_t
pdcchalloc2ulframe
(
COMMON_channels_t
*
ccP
,
uint32_t
frame
,
uint8_t
n
)
uint32_t
pdcchalloc2ulframe
(
COMMON_channels_t
*
ccP
,
uint32_t
frame
,
uint8_t
n
)
...
@@ -480,11 +472,10 @@ uint32_t pdcchalloc2ulframe(COMMON_channels_t *ccP,uint32_t frame, uint8_t n)
...
@@ -480,11 +472,10 @@ uint32_t pdcchalloc2ulframe(COMMON_channels_t *ccP,uint32_t frame, uint8_t n)
LOG_D
(
PHY
,
"frame %d subframe %d: PUSCH frame = %d
\n
"
,
frame
,
n
,
ul_frame
);
LOG_D
(
PHY
,
"frame %d subframe %d: PUSCH frame = %d
\n
"
,
frame
,
n
,
ul_frame
);
return
ul_frame
;
return
ul_frame
;
}
}
uint8_t
pdcchalloc2ulsubframe
(
COMMON_channels_t
*
ccP
,
uint8_t
n
)
{
uint8_t
pdcchalloc2ulsubframe
(
COMMON_channels_t
*
ccP
,
uint8_t
n
)
{
uint8_t
ul_subframe
;
uint8_t
ul_subframe
;
if
((
ccP
->
tdd_Config
)
&&
if
((
ccP
->
tdd_Config
)
&&
...
@@ -508,13 +499,11 @@ uint8_t pdcchalloc2ulsubframe(COMMON_channels_t *ccP,uint8_t n) {
...
@@ -508,13 +499,11 @@ uint8_t pdcchalloc2ulsubframe(COMMON_channels_t *ccP,uint8_t n) {
int
is_UL_sf
(
COMMON_channels_t
*
ccP
,
sub_frame_t
subframeP
)
int
is_UL_sf
(
COMMON_channels_t
*
ccP
,
sub_frame_t
subframeP
)
{
{
// if FDD return dummy value
// if FDD return dummy value
if
(
ccP
->
tdd_Config
==
NULL
)
if
(
ccP
->
tdd_Config
==
NULL
)
return
(
0
);
return
(
0
);
switch
(
ccP
->
tdd_Config
->
subframeAssignment
)
{
switch
(
ccP
->
tdd_Config
->
subframeAssignment
)
{
case
1
:
case
1
:
switch
(
subframeP
)
{
switch
(
subframeP
)
{
case
0
:
case
0
:
...
@@ -565,12 +554,11 @@ int is_UL_sf(COMMON_channels_t *ccP,sub_frame_t subframeP)
...
@@ -565,12 +554,11 @@ int is_UL_sf(COMMON_channels_t *ccP,sub_frame_t subframeP)
AssertFatal
(
1
==
0
,
"subframe %d Unsupported TDD configuration %d
\n
"
,
AssertFatal
(
1
==
0
,
"subframe %d Unsupported TDD configuration %d
\n
"
,
subframeP
,(
int
)
ccP
->
tdd_Config
->
subframeAssignment
);
subframeP
,(
int
)
ccP
->
tdd_Config
->
subframeAssignment
);
break
;
break
;
}
}
}
}
uint16_t
get_pucch1_absSF
(
COMMON_channels_t
*
cc
,
uint16_t
dlsch_absSF
)
{
uint16_t
get_pucch1_absSF
(
COMMON_channels_t
*
cc
,
uint16_t
dlsch_absSF
)
{
uint16_t
sf
,
f
,
nextf
;
uint16_t
sf
,
f
,
nextf
;
if
(
cc
->
tdd_Config
==
NULL
)
{
//FDD n+4
if
(
cc
->
tdd_Config
==
NULL
)
{
//FDD n+4
...
@@ -624,8 +612,8 @@ uint16_t get_pucch1_absSF(COMMON_channels_t *cc,uint16_t dlsch_absSF) {
...
@@ -624,8 +612,8 @@ uint16_t get_pucch1_absSF(COMMON_channels_t *cc,uint16_t dlsch_absSF) {
AssertFatal
(
1
==
0
,
"Shouldn't get here
\n
"
);
AssertFatal
(
1
==
0
,
"Shouldn't get here
\n
"
);
}
}
void
get_srs_pos
(
COMMON_channels_t
*
cc
,
uint16_t
isrs
,
uint16_t
*
psrsPeriodicity
,
uint16_t
*
psrsOffset
)
{
void
get_srs_pos
(
COMMON_channels_t
*
cc
,
uint16_t
isrs
,
uint16_t
*
psrsPeriodicity
,
uint16_t
*
psrsOffset
)
{
if
(
cc
->
tdd_Config
)
{
// TDD
if
(
cc
->
tdd_Config
)
{
// TDD
AssertFatal
(
isrs
>=
10
,
"2 ms SRS periodicity not supported"
);
AssertFatal
(
isrs
>=
10
,
"2 ms SRS periodicity not supported"
);
...
@@ -659,10 +647,8 @@ void get_srs_pos(COMMON_channels_t *cc,uint16_t isrs,uint16_t *psrsPeriodicity,u
...
@@ -659,10 +647,8 @@ void get_srs_pos(COMMON_channels_t *cc,uint16_t isrs,uint16_t *psrsPeriodicity,u
}
}
AssertFatal
(
isrs
<=
644
,
"Isrs out of range %d>644
\n
"
,
isrs
);
AssertFatal
(
isrs
<=
644
,
"Isrs out of range %d>644
\n
"
,
isrs
);
}
// TDD
}
// TDD
else
{
// FDD
else
{
// FDD
if
(
isrs
<
2
)
{
if
(
isrs
<
2
)
{
*
psrsPeriodicity
=
2
;
*
psrsPeriodicity
=
2
;
*
psrsOffset
=
isrs
;
*
psrsOffset
=
isrs
;
...
@@ -696,12 +682,11 @@ void get_srs_pos(COMMON_channels_t *cc,uint16_t isrs,uint16_t *psrsPeriodicity,u
...
@@ -696,12 +682,11 @@ void get_srs_pos(COMMON_channels_t *cc,uint16_t isrs,uint16_t *psrsPeriodicity,u
*
psrsOffset
=
isrs
-
317
;
*
psrsOffset
=
isrs
-
317
;
}
}
AssertFatal
(
isrs
<=
636
,
"Isrs out of range %d>636
\n
"
,
isrs
);
AssertFatal
(
isrs
<=
636
,
"Isrs out of range %d>636
\n
"
,
isrs
);
}
}
}
}
void
get_csi_params
(
COMMON_channels_t
*
cc
,
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
,
uint16_t
*
Npd
,
uint16_t
*
N_OFFSET_CQI
,
int
*
H
)
{
void
get_csi_params
(
COMMON_channels_t
*
cc
,
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
,
uint16_t
*
Npd
,
uint16_t
*
N_OFFSET_CQI
,
int
*
H
)
{
uint16_t
cqi_PMI_ConfigIndex
=
cqi_ReportPeriodic
->
choice
.
setup
.
cqi_pmi_ConfigIndex
;
uint16_t
cqi_PMI_ConfigIndex
=
cqi_ReportPeriodic
->
choice
.
setup
.
cqi_pmi_ConfigIndex
;
uint8_t
Jtab
[
6
]
=
{
0
,
2
,
2
,
3
,
4
,
4
};
uint8_t
Jtab
[
6
]
=
{
0
,
2
,
2
,
3
,
4
,
4
};
...
@@ -778,9 +763,8 @@ void get_csi_params(COMMON_channels_t *cc,struct CQI_ReportPeriodic *cqi_ReportP
...
@@ -778,9 +763,8 @@ void get_csi_params(COMMON_channels_t *cc,struct CQI_ReportPeriodic *cqi_ReportP
*
H
=
1
;
*
H
=
1
;
}
}
uint8_t
get_dl_cqi_pmi_size_pusch
(
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
uint8_t
ri
,
CQI_ReportModeAperiodic_t
*
cqi_ReportModeAperiodic
)
uint8_t
get_dl_cqi_pmi_size_pusch
(
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
uint8_t
ri
,
CQI_ReportModeAperiodic_t
*
cqi_ReportModeAperiodic
)
{
{
int
Ntab
[
6
]
=
{
0
,
4
,
7
,
9
,
10
,
13
};
int
Ntab
[
6
]
=
{
0
,
4
,
7
,
9
,
10
,
13
};
int
N
=
Ntab
[
cc
->
mib
->
message
.
dl_Bandwidth
];
int
N
=
Ntab
[
cc
->
mib
->
message
.
dl_Bandwidth
];
int
Ltab_uesel
[
6
]
=
{
0
,
6
,
9
,
13
,
15
,
18
};
int
Ltab_uesel
[
6
]
=
{
0
,
6
,
9
,
13
,
15
,
18
};
...
@@ -789,7 +773,6 @@ uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t *cc,uint8_t tmode,uint8_t ri
...
@@ -789,7 +773,6 @@ uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t *cc,uint8_t tmode,uint8_t ri
AssertFatal
(
cqi_ReportModeAperiodic
!=
NULL
,
"cqi_ReportPeriodic is null!
\n
"
);
AssertFatal
(
cqi_ReportModeAperiodic
!=
NULL
,
"cqi_ReportPeriodic is null!
\n
"
);
switch
(
*
cqi_ReportModeAperiodic
)
{
switch
(
*
cqi_ReportModeAperiodic
)
{
case
CQI_ReportModeAperiodic_rm12
:
case
CQI_ReportModeAperiodic_rm12
:
AssertFatal
(
tmode
==
4
||
tmode
==
6
||
tmode
==
8
||
tmode
==
9
||
tmode
==
10
,
"Illegal TM (%d) for CQI_ReportModeAperiodic_rm12
\n
"
,
tmode
);
AssertFatal
(
tmode
==
4
||
tmode
==
6
||
tmode
==
8
||
tmode
==
9
||
tmode
==
10
,
"Illegal TM (%d) for CQI_ReportModeAperiodic_rm12
\n
"
,
tmode
);
AssertFatal
(
cc
->
p_eNB
<=
4
,
"only up to 4 antenna ports supported here
\n
"
);
AssertFatal
(
cc
->
p_eNB
<=
4
,
"only up to 4 antenna ports supported here
\n
"
);
...
@@ -852,8 +835,8 @@ uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t *cc,uint8_t tmode,uint8_t ri
...
@@ -852,8 +835,8 @@ uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t *cc,uint8_t tmode,uint8_t ri
return
(
0
);
return
(
0
);
}
}
uint8_t
get_rel8_dl_cqi_pmi_size
(
UE_sched_ctrl
*
sched_ctl
,
int
CC_idP
,
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
)
{
uint8_t
get_rel8_dl_cqi_pmi_size
(
UE_sched_ctrl
*
sched_ctl
,
int
CC_idP
,
COMMON_channels_t
*
cc
,
uint8_t
tmode
,
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
)
{
int
no_pmi
=
0
;
int
no_pmi
=
0
;
// Ltab[6] = {0,log2(15/4/2),log2(25/4/2),log2(50/6/3),log2(75/8/4),log2(100/8/4)};
// Ltab[6] = {0,log2(15/4/2),log2(25/4/2),log2(50/6/3),log2(75/8/4),log2(100/8/4)};
...
@@ -878,8 +861,6 @@ uint8_t get_rel8_dl_cqi_pmi_size(UE_sched_ctrl *sched_ctl,int CC_idP,COMMON_chan
...
@@ -878,8 +861,6 @@ uint8_t get_rel8_dl_cqi_pmi_size(UE_sched_ctrl *sched_ctl,int CC_idP,COMMON_chan
no_pmi
=
0
;
no_pmi
=
0
;
}
}
if
((
cqi_ReportPeriodic
->
choice
.
setup
.
cqi_FormatIndicatorPeriodic
.
present
==
CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI
)
||
if
((
cqi_ReportPeriodic
->
choice
.
setup
.
cqi_FormatIndicatorPeriodic
.
present
==
CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI
)
||
(
sched_ctl
->
feedback_cnt
[
CC_idP
]
==
0
))
{
(
sched_ctl
->
feedback_cnt
[
CC_idP
]
==
0
))
{
// send wideband report every opportunity if wideband reporting mode is selected, else every H opportunities
// send wideband report every opportunity if wideband reporting mode is selected, else every H opportunities
...
@@ -909,8 +890,8 @@ void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu,
...
@@ -909,8 +890,8 @@ void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu,
uint8_t
mcs
,
uint8_t
mcs
,
uint8_t
ndi
,
uint8_t
ndi
,
uint8_t
rv
,
uint8_t
rv
,
uint8_t
vrb_flag
)
{
uint8_t
vrb_flag
)
{
memset
((
void
*
)
dl_config_pdu
,
0
,
sizeof
(
nfapi_dl_config_request_pdu_t
));
memset
((
void
*
)
dl_config_pdu
,
0
,
sizeof
(
nfapi_dl_config_request_pdu_t
));
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
;
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
;
dl_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_dl_config_dci_dl_pdu
));
dl_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_dl_config_dci_dl_pdu
));
...
@@ -926,11 +907,10 @@ void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu,
...
@@ -926,11 +907,10 @@ void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu,
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
new_data_indicator_1
=
ndi
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
new_data_indicator_1
=
ndi
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
redundancy_version_1
=
rv
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
redundancy_version_1
=
rv
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
virtual_resource_block_assignment_flag
=
vrb_flag
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
virtual_resource_block_assignment_flag
=
vrb_flag
;
}
}
void
program_dlsch_acknak
(
module_id_t
module_idP
,
int
CC_idP
,
int
UE_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
cce_idx
)
{
void
program_dlsch_acknak
(
module_id_t
module_idP
,
int
CC_idP
,
int
UE_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
cce_idx
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
eNB
->
common_channels
;
COMMON_channels_t
*
cc
=
eNB
->
common_channels
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
...
@@ -1048,7 +1028,6 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t
...
@@ -1048,7 +1028,6 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t
rnti
,
rnti
,
ulsch_harq_information
);
ulsch_harq_information
);
if
(
harq_information
)
fill_nfapi_harq_information
(
module_idP
,
CC_idP
,
if
(
harq_information
)
fill_nfapi_harq_information
(
module_idP
,
CC_idP
,
rnti
,
rnti
,
(
frameP
*
10
)
+
subframeP
,
(
frameP
*
10
)
+
subframeP
,
...
@@ -1056,8 +1035,8 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t
...
@@ -1056,8 +1035,8 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t
cce_idx
);
cce_idx
);
}
}
uint8_t
get_V_UL_DAI
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
rntiP
)
{
uint8_t
get_V_UL_DAI
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
rntiP
)
{
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
0
];
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
0
];
...
@@ -1068,12 +1047,12 @@ uint8_t get_V_UL_DAI(module_id_t module_idP,int CC_idP,uint16_t rntiP) {
...
@@ -1068,12 +1047,12 @@ uint8_t get_V_UL_DAI(module_id_t module_idP,int CC_idP,uint16_t rntiP) {
}
}
return
(
4
);
// this is rule from Section 7.3 in 36.213
return
(
4
);
// this is rule from Section 7.3 in 36.213
}
}
void
fill_nfapi_ulsch_harq_information
(
module_id_t
module_idP
,
void
fill_nfapi_ulsch_harq_information
(
module_id_t
module_idP
,
int
CC_idP
,
int
CC_idP
,
uint16_t
rntiP
,
uint16_t
rntiP
,
nfapi_ul_config_ulsch_harq_information
*
harq_information
)
{
nfapi_ul_config_ulsch_harq_information
*
harq_information
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
...
@@ -1111,7 +1090,6 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP,
...
@@ -1111,7 +1090,6 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP,
case
5
:
case
5
:
case
6
:
case
6
:
case
7
:
case
7
:
if
(
cc
->
tdd_Config
==
NULL
)
// FDD
if
(
cc
->
tdd_Config
==
NULL
)
// FDD
harq_information
->
harq_information_rel10
.
harq_size
=
1
;
harq_information
->
harq_information_rel10
.
harq_size
=
1
;
else
{
else
{
...
@@ -1122,7 +1100,6 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP,
...
@@ -1122,7 +1100,6 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP,
}
}
break
;
break
;
default:
// for any other TM we need 2 bits harq
default:
// for any other TM we need 2 bits harq
if
(
cc
->
tdd_Config
==
NULL
)
{
if
(
cc
->
tdd_Config
==
NULL
)
{
harq_information
->
harq_information_rel10
.
harq_size
=
2
;
harq_information
->
harq_information_rel10
.
harq_size
=
2
;
}
}
...
@@ -1141,15 +1118,14 @@ void fill_nfapi_harq_information(module_id_t module_idP,
...
@@ -1141,15 +1118,14 @@ void fill_nfapi_harq_information(module_id_t module_idP,
uint16_t
rntiP
,
uint16_t
rntiP
,
uint16_t
absSFP
,
uint16_t
absSFP
,
nfapi_ul_config_harq_information
*
harq_information
,
nfapi_ul_config_harq_information
*
harq_information
,
uint8_t
cce_idxP
)
{
uint8_t
cce_idxP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
int
UE_id
=
find_UE_id
(
module_idP
,
rntiP
);
int
UE_id
=
find_UE_id
(
module_idP
,
rntiP
);
AssertFatal
(
UE_id
>=
0
,
"UE_id cannot be found, impossible
\n
"
);
AssertFatal
(
UE_id
>=
0
,
"UE_id cannot be found, impossible
\n
"
);
AssertFatal
(
UE_list
!=
NULL
,
"UE_list is null
\n
"
);
AssertFatal
(
UE_list
!=
NULL
,
"UE_list is null
\n
"
);
AssertFatal
(
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated for rnti %x is null
\n
"
,
rntiP
);
AssertFatal
(
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated for rnti %x is null
\n
"
,
rntiP
);
...
@@ -1207,13 +1183,12 @@ void fill_nfapi_harq_information(module_id_t module_idP,
...
@@ -1207,13 +1183,12 @@ void fill_nfapi_harq_information(module_id_t module_idP,
}
// get Tmode
}
// get Tmode
}
}
uint16_t
fill_nfapi_uci_acknak
(
module_id_t
module_idP
,
uint16_t
fill_nfapi_uci_acknak
(
module_id_t
module_idP
,
int
CC_idP
,
int
CC_idP
,
uint16_t
rntiP
,
uint16_t
rntiP
,
uint16_t
absSFP
,
uint16_t
absSFP
,
uint8_t
cce_idxP
)
{
uint8_t
cce_idxP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
...
@@ -1221,7 +1196,6 @@ uint16_t fill_nfapi_uci_acknak(module_id_t module_idP,
...
@@ -1221,7 +1196,6 @@ uint16_t fill_nfapi_uci_acknak(module_id_t module_idP,
nfapi_ul_config_request_body_t
*
ul_req
=
&
eNB
->
UL_req_tmp
[
CC_idP
][
ackNAK_absSF
%
10
].
ul_config_request_body
;
nfapi_ul_config_request_body_t
*
ul_req
=
&
eNB
->
UL_req_tmp
[
CC_idP
][
ackNAK_absSF
%
10
].
ul_config_request_body
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
=
&
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
];
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
=
&
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
];
memset
((
void
*
)
ul_config_pdu
,
0
,
sizeof
(
nfapi_ul_config_request_pdu_t
));
memset
((
void
*
)
ul_config_pdu
,
0
,
sizeof
(
nfapi_ul_config_request_pdu_t
));
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
;
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
;
ul_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_uci_harq_pdu
));
ul_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_uci_harq_pdu
));
...
@@ -1265,12 +1239,11 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
...
@@ -1265,12 +1239,11 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
uint8_t
transmission_mode
,
uint8_t
transmission_mode
,
uint8_t
num_bf_prb_per_subband
,
uint8_t
num_bf_prb_per_subband
,
uint8_t
num_bf_vector
uint8_t
num_bf_vector
)
{
)
{
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
dl_req
->
dl_config_pdu_list
[
dl_req
->
number_pdu
];
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
dl_req
->
dl_config_pdu_list
[
dl_req
->
number_pdu
];
dl_config_pdu
=
&
dl_req
->
dl_config_pdu_list
[
dl_req
->
number_pdu
];
memset
((
void
*
)
dl_config_pdu
,
0
,
sizeof
(
nfapi_dl_config_request_pdu_t
));
memset
((
void
*
)
dl_config_pdu
,
0
,
sizeof
(
nfapi_dl_config_request_pdu_t
));
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_DLSCH_PDU_TYPE
;
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_DLSCH_PDU_TYPE
;
dl_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_dl_config_dlsch_pdu
));
dl_config_pdu
->
pdu_size
=
(
uint8_t
)(
2
+
sizeof
(
nfapi_dl_config_dlsch_pdu
));
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
length
=
length
;
dl_config_pdu
->
dlsch_pdu
.
dlsch_pdu_rel8
.
length
=
length
;
...
@@ -1298,8 +1271,8 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
...
@@ -1298,8 +1271,8 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
dl_req
->
number_pdu
++
;
dl_req
->
number_pdu
++
;
}
}
uint16_t
fill_nfapi_tx_req
(
nfapi_tx_request_body_t
*
tx_req_body
,
uint16_t
absSF
,
uint16_t
pdu_length
,
uint16_t
*
pdu_index
,
uint8_t
*
pdu
)
{
uint16_t
fill_nfapi_tx_req
(
nfapi_tx_request_body_t
*
tx_req_body
,
uint16_t
absSF
,
uint16_t
pdu_length
,
uint16_t
*
pdu_index
,
uint8_t
*
pdu
)
{
nfapi_tx_request_pdu_t
*
TX_req
=
&
tx_req_body
->
tx_pdu_list
[
tx_req_body
->
number_of_pdus
];
nfapi_tx_request_pdu_t
*
TX_req
=
&
tx_req_body
->
tx_pdu_list
[
tx_req_body
->
number_of_pdus
];
LOG_D
(
MAC
,
"Filling TX_req %d for pdu length %d
\n
"
,
tx_req_body
->
number_of_pdus
,
pdu_length
);
LOG_D
(
MAC
,
"Filling TX_req %d for pdu length %d
\n
"
,
tx_req_body
->
number_of_pdus
,
pdu_length
);
TX_req
->
pdu_length
=
pdu_length
;
TX_req
->
pdu_length
=
pdu_length
;
...
@@ -1332,9 +1305,8 @@ void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_con
...
@@ -1332,9 +1305,8 @@ void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_con
uint8_t
current_tx_nb
,
uint8_t
current_tx_nb
,
uint8_t
n_srs
,
uint8_t
n_srs
,
uint16_t
size
uint16_t
size
)
{
)
{
memset
((
void
*
)
ul_config_pdu
,
0
,
sizeof
(
nfapi_ul_config_request_pdu_t
));
memset
((
void
*
)
ul_config_pdu
,
0
,
sizeof
(
nfapi_ul_config_request_pdu_t
));
if
(
cqi_req
==
0
)
if
(
cqi_req
==
0
)
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
;
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
;
...
@@ -1399,24 +1371,26 @@ void fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t *ul_con
...
@@ -1399,24 +1371,26 @@ void fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t *ul_con
uint8_t
ue_type
,
uint8_t
ue_type
,
uint16_t
total_number_of_repetitions
,
uint16_t
total_number_of_repetitions
,
uint16_t
repetition_number
,
uint16_t
repetition_number
,
uint16_t
initial_transmission_sf_io
)
{
uint16_t
initial_transmission_sf_io
)
{
// Re13 fields
// Re13 fields
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
ue_type
=
ue_type
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
ue_type
=
ue_type
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
total_number_of_repetitions
=
total_number_of_repetitions
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
total_number_of_repetitions
=
total_number_of_repetitions
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
repetition_number
=
repetition_number
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
repetition_number
=
repetition_number
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
initial_transmission_sf_io
=
initial_transmission_sf_io
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
initial_transmission_sf_io
=
initial_transmission_sf_io
;
}
}
int
get_numnarrowbands
(
long
dl_Bandwidth
)
{
int
get_numnarrowbands
(
long
dl_Bandwidth
)
{
int
nb_tab
[
6
]
=
{
1
,
2
,
4
,
8
,
12
,
16
};
int
nb_tab
[
6
]
=
{
1
,
2
,
4
,
8
,
12
,
16
};
AssertFatal
(
dl_Bandwidth
<
7
||
dl_Bandwidth
>=
0
,
"dl_Bandwidth not in [0..6]
\n
"
);
AssertFatal
(
dl_Bandwidth
<
7
||
dl_Bandwidth
>=
0
,
"dl_Bandwidth not in [0..6]
\n
"
);
return
(
nb_tab
[
dl_Bandwidth
]);
return
(
nb_tab
[
dl_Bandwidth
]);
}
}
int
get_numnarrowbandbits
(
long
dl_Bandwidth
)
{
int
get_numnarrowbandbits
(
long
dl_Bandwidth
)
{
int
nbbits_tab
[
6
]
=
{
0
,
1
,
2
,
3
,
4
,
4
};
int
nbbits_tab
[
6
]
=
{
0
,
1
,
2
,
3
,
4
,
4
};
AssertFatal
(
dl_Bandwidth
<
7
||
dl_Bandwidth
>=
0
,
"dl_Bandwidth not in [0..6]
\n
"
);
AssertFatal
(
dl_Bandwidth
<
7
||
dl_Bandwidth
>=
0
,
"dl_Bandwidth not in [0..6]
\n
"
);
...
@@ -1427,11 +1401,10 @@ int get_numnarrowbandbits(long dl_Bandwidth) {
...
@@ -1427,11 +1401,10 @@ int get_numnarrowbandbits(long dl_Bandwidth) {
int
startSF_fdd_RA_times2
[
8
]
=
{
2
,
3
,
4
,
5
,
8
,
10
,
16
,
20
};
int
startSF_fdd_RA_times2
[
8
]
=
{
2
,
3
,
4
,
5
,
8
,
10
,
16
,
20
};
int
startSF_tdd_RA
[
7
]
=
{
1
,
2
,
4
,
5
,
8
,
10
,
20
};
int
startSF_tdd_RA
[
7
]
=
{
1
,
2
,
4
,
5
,
8
,
10
,
20
};
int
mpdcch_sf_condition
(
eNB_MAC_INST
*
eNB
,
int
CC_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
rmax
,
MPDCCH_TYPES_t
mpdcch_type
,
int
UE_id
)
{
int
mpdcch_sf_condition
(
eNB_MAC_INST
*
eNB
,
int
CC_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
rmax
,
MPDCCH_TYPES_t
mpdcch_type
,
int
UE_id
)
{
struct
PRACH_ConfigSIB_v1310
*
ext4_prach
=
eNB
->
common_channels
[
CC_id
].
radioResourceConfigCommon_BR
->
ext4
->
prach_ConfigCommon_v1310
;
struct
PRACH_ConfigSIB_v1310
*
ext4_prach
=
eNB
->
common_channels
[
CC_id
].
radioResourceConfigCommon_BR
->
ext4
->
prach_ConfigCommon_v1310
;
int
T
;
int
T
;
EPDCCH_SetConfig_r11_t
*
epdcch_setconfig_r11
;
EPDCCH_SetConfig_r11_t
*
epdcch_setconfig_r11
;
...
@@ -1460,7 +1433,6 @@ int mpdcch_sf_condition(eNB_MAC_INST *eNB,int CC_id, frame_t frameP,sub_frame_t
...
@@ -1460,7 +1433,6 @@ int mpdcch_sf_condition(eNB_MAC_INST *eNB,int CC_id, frame_t frameP,sub_frame_t
case
TYPEUESPEC
:
case
TYPEUESPEC
:
epdcch_setconfig_r11
=
eNB
->
UE_list
.
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
setConfigToAddModList_r11
->
list
.
array
[
0
]
;
epdcch_setconfig_r11
=
eNB
->
UE_list
.
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext4
->
epdcch_Config_r11
->
config_r11
.
choice
.
setup
.
setConfigToAddModList_r11
->
list
.
array
[
0
]
;
AssertFatal
(
epdcch_setconfig_r11
!=
NULL
,
" epdcch_setconfig_r11 is null for UE specific
\n
"
);
AssertFatal
(
epdcch_setconfig_r11
!=
NULL
,
" epdcch_setconfig_r11 is null for UE specific
\n
"
);
AssertFatal
(
epdcch_setconfig_r11
->
ext2
!=
NULL
,
" ext2 doesn't exist in epdcch config '
\n
"
);
AssertFatal
(
epdcch_setconfig_r11
->
ext2
!=
NULL
,
" ext2 doesn't exist in epdcch config '
\n
"
);
...
@@ -1477,11 +1449,10 @@ int mpdcch_sf_condition(eNB_MAC_INST *eNB,int CC_id, frame_t frameP,sub_frame_t
...
@@ -1477,11 +1449,10 @@ int mpdcch_sf_condition(eNB_MAC_INST *eNB,int CC_id, frame_t frameP,sub_frame_t
AssertFatal
(
T
>
0
,
"T is 0!
\n
"
);
AssertFatal
(
T
>
0
,
"T is 0!
\n
"
);
if
(((
10
*
frameP
)
+
subframeP
)
%
T
==
0
)
return
(
1
);
if
(((
10
*
frameP
)
+
subframeP
)
%
T
==
0
)
return
(
1
);
else
return
(
0
);
else
return
(
0
);
}
}
int
narrowband_to_first_rb
(
COMMON_channels_t
*
cc
,
int
nb_index
)
{
int
narrowband_to_first_rb
(
COMMON_channels_t
*
cc
,
int
nb_index
)
{
switch
(
cc
->
mib
->
message
.
dl_Bandwidth
)
{
switch
(
cc
->
mib
->
message
.
dl_Bandwidth
)
{
case
0
:
// 6 PRBs, N_NB=1, i_0=0
case
0
:
// 6 PRBs, N_NB=1, i_0=0
return
(
0
);
return
(
0
);
...
@@ -1540,9 +1511,7 @@ void init_ue_sched_info(void)
...
@@ -1540,9 +1511,7 @@ void init_ue_sched_info(void)
unsigned
char
get_ue_weight
(
module_id_t
module_idP
,
int
CC_idP
,
int
ue_idP
)
unsigned
char
get_ue_weight
(
module_id_t
module_idP
,
int
CC_idP
,
int
ue_idP
)
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{
{
return
(
eNB_dlsch_info
[
module_idP
][
CC_idP
][
ue_idP
].
weight
);
return
(
eNB_dlsch_info
[
module_idP
][
CC_idP
][
ue_idP
].
weight
);
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
@@ -1571,8 +1540,6 @@ int find_RA_id(module_id_t mod_idP, int CC_idP, rnti_t rntiP)
...
@@ -1571,8 +1540,6 @@ int find_RA_id(module_id_t mod_idP, int CC_idP, rnti_t rntiP)
RA_TEMPLATE
*
RA_template
=
(
RA_TEMPLATE
*
)
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
].
RA_template
[
0
];
RA_TEMPLATE
*
RA_template
=
(
RA_TEMPLATE
*
)
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
].
RA_template
[
0
];
for
(
RA_id
=
0
;
RA_id
<
NB_RA_PROC_MAX
;
RA_id
++
)
{
for
(
RA_id
=
0
;
RA_id
<
NB_RA_PROC_MAX
;
RA_id
++
)
{
LOG_D
(
MAC
,
"Checking RA_id %d for %x : RA_active %d, wait_ack_Msg4 %d
\n
"
,
LOG_D
(
MAC
,
"Checking RA_id %d for %x : RA_active %d, wait_ack_Msg4 %d
\n
"
,
RA_id
,
rntiP
,
RA_id
,
rntiP
,
...
@@ -1604,7 +1571,6 @@ int UE_PCCID(module_id_t mod_idP,int ue_idP)
...
@@ -1604,7 +1571,6 @@ int UE_PCCID(module_id_t mod_idP,int ue_idP)
rnti_t
UE_RNTI
(
module_id_t
mod_idP
,
int
ue_idP
)
rnti_t
UE_RNTI
(
module_id_t
mod_idP
,
int
ue_idP
)
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{
{
rnti_t
rnti
=
RC
.
mac
[
mod_idP
]
->
UE_list
.
UE_template
[
UE_PCCID
(
mod_idP
,
ue_idP
)][
ue_idP
].
rnti
;
rnti_t
rnti
=
RC
.
mac
[
mod_idP
]
->
UE_list
.
UE_template
[
UE_PCCID
(
mod_idP
,
ue_idP
)][
ue_idP
].
rnti
;
if
(
rnti
>
0
)
{
if
(
rnti
>
0
)
{
...
@@ -1653,7 +1619,6 @@ unsigned char get_aggregation (uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt)
...
@@ -1653,7 +1619,6 @@ unsigned char get_aggregation (uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt)
unsigned
char
aggregation
=
3
;
unsigned
char
aggregation
=
3
;
switch
(
dci_fmt
){
switch
(
dci_fmt
){
case
format0
:
case
format0
:
aggregation
=
cqi2fmt0_agg
[
bw_index
][
cqi
];
aggregation
=
cqi2fmt0_agg
[
bw_index
][
cqi
];
break
;
break
;
...
@@ -1790,7 +1755,6 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
...
@@ -1790,7 +1755,6 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
eNB_dlsch_info
[
mod_idP
][
pCC_id
][
UE_id
].
rnti
=
NOT_A_RNTI
;
eNB_dlsch_info
[
mod_idP
][
pCC_id
][
UE_id
].
rnti
=
NOT_A_RNTI
;
eNB_dlsch_info
[
mod_idP
][
pCC_id
][
UE_id
].
status
=
S_DL_NONE
;
eNB_dlsch_info
[
mod_idP
][
pCC_id
][
UE_id
].
status
=
S_DL_NONE
;
// check if this has an RA process active
// check if this has an RA process active
RA_TEMPLATE
*
RA_template
;
RA_TEMPLATE
*
RA_template
;
for
(
i
=
0
;
i
<
NB_RA_PROC_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NB_RA_PROC_MAX
;
i
++
)
{
...
@@ -1810,8 +1774,6 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
...
@@ -1810,8 +1774,6 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
return
0
;
return
0
;
}
}
int
prev
(
UE_list_t
*
listP
,
int
nodeP
,
int
ul_flag
)
int
prev
(
UE_list_t
*
listP
,
int
nodeP
,
int
ul_flag
)
{
{
int
j
;
int
j
;
...
@@ -1842,13 +1804,11 @@ int prev(UE_list_t *listP, int nodeP, int ul_flag)
...
@@ -1842,13 +1804,11 @@ int prev(UE_list_t *listP, int nodeP, int ul_flag)
nodeP
,
(
ul_flag
==
0
)
?
"DL"
:
"UL"
);
nodeP
,
(
ul_flag
==
0
)
?
"DL"
:
"UL"
);
dump_ue_list
(
listP
,
ul_flag
);
dump_ue_list
(
listP
,
ul_flag
);
return
(
-
1
);
return
(
-
1
);
}
}
void
swap_UEs
(
UE_list_t
*
listP
,
int
nodeiP
,
int
nodejP
,
int
ul_flag
)
void
swap_UEs
(
UE_list_t
*
listP
,
int
nodeiP
,
int
nodejP
,
int
ul_flag
)
{
{
int
prev_i
,
prev_j
,
next_i
,
next_j
;
int
prev_i
,
prev_j
,
next_i
,
next_j
;
LOG_T
(
MAC
,
"Swapping UE %d,%d
\n
"
,
nodeiP
,
nodejP
);
LOG_T
(
MAC
,
"Swapping UE %d,%d
\n
"
,
nodeiP
,
nodejP
);
...
@@ -1899,7 +1859,6 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
...
@@ -1899,7 +1859,6 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
listP
->
next
[
nodejP
]
=
next_i
;
listP
->
next
[
nodejP
]
=
next_i
;
listP
->
next
[
nodeiP
]
=
next_j
;
listP
->
next
[
nodeiP
]
=
next_j
;
if
(
nodeiP
==
listP
->
head
)
{
if
(
nodeiP
==
listP
->
head
)
{
LOG_T
(
MAC
,
"changing head to %d
\n
"
,
nodejP
);
LOG_T
(
MAC
,
"changing head to %d
\n
"
,
nodejP
);
listP
->
head
=
nodejP
;
listP
->
head
=
nodejP
;
...
@@ -1941,7 +1900,6 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
...
@@ -1941,7 +1900,6 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
listP
->
next_ul
[
nodejP
]
=
next_i
;
listP
->
next_ul
[
nodejP
]
=
next_i
;
listP
->
next_ul
[
nodeiP
]
=
next_j
;
listP
->
next_ul
[
nodeiP
]
=
next_j
;
if
(
nodeiP
==
listP
->
head_ul
)
{
if
(
nodeiP
==
listP
->
head_ul
)
{
LOG_T
(
MAC
,
"[UL]changing head to %d
\n
"
,
nodejP
);
LOG_T
(
MAC
,
"[UL]changing head to %d
\n
"
,
nodejP
);
listP
->
head_ul
=
nodejP
;
listP
->
head_ul
=
nodejP
;
...
@@ -1961,13 +1919,6 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
...
@@ -1961,13 +1919,6 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
dump_ue_list
(
listP
,
ul_flag
);
dump_ue_list
(
listP
,
ul_flag
);
}
}
/*
/*
#if defined(Rel10) || defined(Rel14)
#if defined(Rel10) || defined(Rel14)
unsigned char generate_mch_header( unsigned char *mac_header,
unsigned char generate_mch_header( unsigned char *mac_header,
...
@@ -2084,11 +2035,9 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
...
@@ -2084,11 +2035,9 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag)
// This has to be updated to include BSR information
// This has to be updated to include BSR information
uint8_t
UE_is_to_be_scheduled
(
module_id_t
module_idP
,
int
CC_id
,
uint8_t
UE_id
)
uint8_t
UE_is_to_be_scheduled
(
module_id_t
module_idP
,
int
CC_id
,
uint8_t
UE_id
)
{
{
UE_TEMPLATE
*
UE_template
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_template
[
CC_id
][
UE_id
];
UE_TEMPLATE
*
UE_template
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_template
[
CC_id
][
UE_id
];
UE_sched_ctrl
*
UE_sched_ctl
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
];
UE_sched_ctrl
*
UE_sched_ctl
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
];
// do not schedule UE if UL is not working
// do not schedule UE if UL is not working
if
(
UE_sched_ctl
->
ul_failure_timer
>
0
)
if
(
UE_sched_ctl
->
ul_failure_timer
>
0
)
return
(
0
);
return
(
0
);
...
@@ -2108,7 +2057,6 @@ uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id)
...
@@ -2108,7 +2057,6 @@ uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id)
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)))
// every Frame when not RRC_CONNECTED
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)))
// every Frame when not RRC_CONNECTED
{
{
LOG_D
(
MAC
,
"[eNB %d][PUSCH] UE %d/%x should be scheduled (BSR0 %d,SR %d)
\n
"
,
module_idP
,
UE_id
,
UE_RNTI
(
module_idP
,
UE_id
),
LOG_D
(
MAC
,
"[eNB %d][PUSCH] UE %d/%x should be scheduled (BSR0 %d,SR %d)
\n
"
,
module_idP
,
UE_id
,
UE_RNTI
(
module_idP
,
UE_id
),
UE_template
->
bsr_info
[
LCGID0
],
UE_template
->
bsr_info
[
LCGID0
],
UE_template
->
ul_SR
);
UE_template
->
ul_SR
);
...
@@ -2118,9 +2066,8 @@ uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id)
...
@@ -2118,9 +2066,8 @@ uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id)
}
}
}
}
uint8_t
get_tmode
(
module_id_t
module_idP
,
int
CC_idP
,
int
UE_idP
)
uint8_t
get_tmode
(
module_id_t
module_idP
,
int
CC_idP
,
int
UE_idP
)
{
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
...
@@ -2148,8 +2095,8 @@ uint8_t get_tmode(module_id_t module_idP,int CC_idP,int UE_idP) {
...
@@ -2148,8 +2095,8 @@ uint8_t get_tmode(module_id_t module_idP,int CC_idP,int UE_idP) {
}
}
}
}
int8_t
get_ULharq
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
frameP
,
uint8_t
subframeP
)
{
int8_t
get_ULharq
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
frameP
,
uint8_t
subframeP
)
{
uint8_t
ret
=
-
1
;
uint8_t
ret
=
-
1
;
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
...
@@ -2157,9 +2104,7 @@ int8_t get_ULharq(module_id_t module_idP,int CC_idP,uint16_t frameP,uint8_t subf
...
@@ -2157,9 +2104,7 @@ int8_t get_ULharq(module_id_t module_idP,int CC_idP,uint16_t frameP,uint8_t subf
if
(
cc
->
tdd_Config
==
NULL
)
{
// FDD
if
(
cc
->
tdd_Config
==
NULL
)
{
// FDD
ret
=
(((
frameP
<<
1
)
+
subframeP
)
&
7
);
ret
=
(((
frameP
<<
1
)
+
subframeP
)
&
7
);
}
else
{
}
else
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
1
:
case
1
:
if
((
subframeP
==
2
)
||
if
((
subframeP
==
2
)
||
(
subframeP
==
3
)
||
(
subframeP
==
3
)
||
...
@@ -2221,7 +2166,6 @@ int8_t get_ULharq(module_id_t module_idP,int CC_idP,uint16_t frameP,uint8_t subf
...
@@ -2221,7 +2166,6 @@ int8_t get_ULharq(module_id_t module_idP,int CC_idP,uint16_t frameP,uint8_t subf
uint16_t
getRIV
(
uint16_t
N_RB_DL
,
uint16_t
RBstart
,
uint16_t
Lcrbs
)
uint16_t
getRIV
(
uint16_t
N_RB_DL
,
uint16_t
RBstart
,
uint16_t
Lcrbs
)
{
{
uint16_t
RIV
;
uint16_t
RIV
;
if
(
Lcrbs
<=
(
1
+
(
N_RB_DL
>>
1
)))
if
(
Lcrbs
<=
(
1
+
(
N_RB_DL
>>
1
)))
...
@@ -2234,7 +2178,6 @@ uint16_t getRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs)
...
@@ -2234,7 +2178,6 @@ uint16_t getRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs)
uint32_t
allocate_prbs
(
int
UE_id
,
unsigned
char
nb_rb
,
int
N_RB_DL
,
uint32_t
*
rballoc
)
uint32_t
allocate_prbs
(
int
UE_id
,
unsigned
char
nb_rb
,
int
N_RB_DL
,
uint32_t
*
rballoc
)
{
{
int
i
;
int
i
;
uint32_t
rballoc_dci
=
0
;
uint32_t
rballoc_dci
=
0
;
unsigned
char
nb_rb_alloc
=
0
;
unsigned
char
nb_rb_alloc
=
0
;
...
@@ -2263,7 +2206,6 @@ uint32_t allocate_prbs(int UE_id,unsigned char nb_rb, int N_RB_DL, uint32_t *rba
...
@@ -2263,7 +2206,6 @@ uint32_t allocate_prbs(int UE_id,unsigned char nb_rb, int N_RB_DL, uint32_t *rba
int
get_bw_index
(
module_id_t
module_id
,
uint8_t
CC_id
)
int
get_bw_index
(
module_id_t
module_id
,
uint8_t
CC_id
)
{
{
int
bw_index
=
0
;
int
bw_index
=
0
;
int
N_RB_DL
=
to_prb
(
RC
.
mac
[
module_id
]
->
common_channels
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
int
N_RB_DL
=
to_prb
(
RC
.
mac
[
module_id
]
->
common_channels
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
...
@@ -2296,7 +2238,6 @@ int get_bw_index(module_id_t module_id, uint8_t CC_id)
...
@@ -2296,7 +2238,6 @@ int get_bw_index(module_id_t module_id, uint8_t CC_id)
int
get_min_rb_unit
(
module_id_t
module_id
,
uint8_t
CC_id
)
int
get_min_rb_unit
(
module_id_t
module_id
,
uint8_t
CC_id
)
{
{
int
min_rb_unit
=
0
;
int
min_rb_unit
=
0
;
int
N_RB_DL
=
to_prb
(
RC
.
mac
[
module_id
]
->
common_channels
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
int
N_RB_DL
=
to_prb
(
RC
.
mac
[
module_id
]
->
common_channels
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
...
@@ -2329,7 +2270,6 @@ int get_min_rb_unit(module_id_t module_id, uint8_t CC_id)
...
@@ -2329,7 +2270,6 @@ int get_min_rb_unit(module_id_t module_id, uint8_t CC_id)
uint32_t
allocate_prbs_sub
(
int
nb_rb
,
int
N_RB_DL
,
int
N_RBG
,
uint8_t
*
rballoc
)
uint32_t
allocate_prbs_sub
(
int
nb_rb
,
int
N_RB_DL
,
int
N_RBG
,
uint8_t
*
rballoc
)
{
{
int
check
=
0
;
//check1=0,check2=0;
int
check
=
0
;
//check1=0,check2=0;
uint32_t
rballoc_dci
=
0
;
uint32_t
rballoc_dci
=
0
;
//uint8_t number_of_subbands=13;
//uint8_t number_of_subbands=13;
...
@@ -2382,16 +2322,17 @@ uint32_t allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, uint8_t *rballoc)
...
@@ -2382,16 +2322,17 @@ uint32_t allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, uint8_t *rballoc)
return
(
rballoc_dci
);
return
(
rballoc_dci
);
}
}
int
get_subbandsize
(
uint8_t
dl_Bandwidth
)
{
int
get_subbandsize
(
uint8_t
dl_Bandwidth
)
{
uint8_t
ss
[
6
]
=
{
6
,
4
,
4
,
6
,
8
,
8
};
uint8_t
ss
[
6
]
=
{
6
,
4
,
4
,
6
,
8
,
8
};
AssertFatal
(
dl_Bandwidth
<
6
,
"dl_Bandwidth %d is out of bounds
\n
"
,
dl_Bandwidth
);
AssertFatal
(
dl_Bandwidth
<
6
,
"dl_Bandwidth %d is out of bounds
\n
"
,
dl_Bandwidth
);
return
(
ss
[
dl_Bandwidth
]);
return
(
ss
[
dl_Bandwidth
]);
}
}
int
get_nb_subband
(
int
N_RB_DL
)
int
get_nb_subband
(
int
N_RB_DL
)
{
{
int
nb_sb
=
0
;
int
nb_sb
=
0
;
switch
(
N_RB_DL
)
{
switch
(
N_RB_DL
)
{
...
@@ -2424,7 +2365,6 @@ int get_nb_subband(int N_RB_DL)
...
@@ -2424,7 +2365,6 @@ int get_nb_subband(int N_RB_DL)
}
}
return
nb_sb
;
return
nb_sb
;
}
}
void
init_CCE_table
(
int
module_idP
,
int
CC_idP
)
void
init_CCE_table
(
int
module_idP
,
int
CC_idP
)
...
@@ -2440,7 +2380,6 @@ int get_nCCE_offset(int *CCE_table,
...
@@ -2440,7 +2380,6 @@ int get_nCCE_offset(int *CCE_table,
const
unsigned
short
rnti
,
const
unsigned
short
rnti
,
const
unsigned
char
subframe
)
const
unsigned
char
subframe
)
{
{
int
search_space_free
,
m
,
nb_candidates
=
0
,
l
,
i
;
int
search_space_free
,
m
,
nb_candidates
=
0
,
l
,
i
;
unsigned
int
Yk
;
unsigned
int
Yk
;
/*
/*
...
@@ -2490,7 +2429,6 @@ int get_nCCE_offset(int *CCE_table,
...
@@ -2490,7 +2429,6 @@ int get_nCCE_offset(int *CCE_table,
Yk
=
Yk
%
(
nCCE
/
L
);
Yk
=
Yk
%
(
nCCE
/
L
);
switch
(
L
)
{
switch
(
L
)
{
case
1
:
case
1
:
case
2
:
case
2
:
...
@@ -2507,7 +2445,6 @@ int get_nCCE_offset(int *CCE_table,
...
@@ -2507,7 +2445,6 @@ int get_nCCE_offset(int *CCE_table,
break
;
break
;
}
}
LOG_D
(
MAC
,
"rnti %x, Yk = %d, nCCE %d (nCCE/L %d),nb_cand %d
\n
"
,
rnti
,
Yk
,
nCCE
,
nCCE
/
L
,
nb_candidates
);
LOG_D
(
MAC
,
"rnti %x, Yk = %d, nCCE %d (nCCE/L %d),nb_cand %d
\n
"
,
rnti
,
Yk
,
nCCE
,
nCCE
/
L
,
nb_candidates
);
for
(
m
=
0
;
m
<
nb_candidates
;
m
++
)
{
for
(
m
=
0
;
m
<
nb_candidates
;
m
++
)
{
...
@@ -2533,8 +2470,8 @@ int get_nCCE_offset(int *CCE_table,
...
@@ -2533,8 +2470,8 @@ int get_nCCE_offset(int *CCE_table,
}
}
}
}
void
dump_CCE_table
(
int
*
CCE_table
,
const
int
nCCE
,
const
unsigned
short
rnti
,
const
int
subframe
,
int
L
)
{
void
dump_CCE_table
(
int
*
CCE_table
,
const
int
nCCE
,
const
unsigned
short
rnti
,
const
int
subframe
,
int
L
)
{
int
nb_candidates
=
0
,
i
;
int
nb_candidates
=
0
,
i
;
unsigned
int
Yk
;
unsigned
int
Yk
;
...
@@ -2552,7 +2489,6 @@ void dump_CCE_table(int *CCE_table,const int nCCE,const unsigned short rnti,cons
...
@@ -2552,7 +2489,6 @@ void dump_CCE_table(int *CCE_table,const int nCCE,const unsigned short rnti,cons
Yk
=
Yk
%
(
nCCE
/
L
);
Yk
=
Yk
%
(
nCCE
/
L
);
switch
(
L
)
{
switch
(
L
)
{
case
1
:
case
1
:
case
2
:
case
2
:
...
@@ -2569,16 +2505,11 @@ void dump_CCE_table(int *CCE_table,const int nCCE,const unsigned short rnti,cons
...
@@ -2569,16 +2505,11 @@ void dump_CCE_table(int *CCE_table,const int nCCE,const unsigned short rnti,cons
break
;
break
;
}
}
printf
(
"rnti %x, Yk*L = %d, nCCE %d (nCCE/L %d),nb_cand*L %d
\n
"
,
rnti
,
Yk
*
L
,
nCCE
,
nCCE
/
L
,
nb_candidates
*
L
);
printf
(
"rnti %x, Yk*L = %d, nCCE %d (nCCE/L %d),nb_cand*L %d
\n
"
,
rnti
,
Yk
*
L
,
nCCE
,
nCCE
/
L
,
nb_candidates
*
L
);
}
}
uint16_t
getnquad
(
COMMON_channels_t
*
cc
,
uint8_t
num_pdcch_symbols
,
uint8_t
mi
)
uint16_t
getnquad
(
COMMON_channels_t
*
cc
,
uint8_t
num_pdcch_symbols
,
uint8_t
mi
)
{
{
uint16_t
Nreg
=
0
;
uint16_t
Nreg
=
0
;
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
...
@@ -2630,8 +2561,8 @@ uint16_t getnCCE(COMMON_channels_t *cc, uint8_t num_pdcch_symbols, uint8_t mi)
...
@@ -2630,8 +2561,8 @@ uint16_t getnCCE(COMMON_channels_t *cc, uint8_t num_pdcch_symbols, uint8_t mi)
return
(
getnquad
(
cc
,
num_pdcch_symbols
,
mi
)
/
9
);
return
(
getnquad
(
cc
,
num_pdcch_symbols
,
mi
)
/
9
);
}
}
uint8_t
getmi
(
COMMON_channels_t
*
cc
,
int
subframe
)
{
uint8_t
getmi
(
COMMON_channels_t
*
cc
,
int
subframe
)
{
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
// for FDD
// for FDD
...
@@ -2640,7 +2571,6 @@ uint8_t getmi(COMMON_channels_t *cc,int subframe) {
...
@@ -2640,7 +2571,6 @@ uint8_t getmi(COMMON_channels_t *cc,int subframe) {
// for TDD
// for TDD
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
0
:
case
0
:
if
((
subframe
==
0
)
||
(
subframe
==
5
))
if
((
subframe
==
0
)
||
(
subframe
==
5
))
return
(
2
);
return
(
2
);
...
@@ -2703,9 +2633,8 @@ uint16_t get_nCCE_max(COMMON_channels_t *cc, int num_pdcch_symbols,int subframe)
...
@@ -2703,9 +2633,8 @@ uint16_t get_nCCE_max(COMMON_channels_t *cc, int num_pdcch_symbols,int subframe)
int
allocate_CCEs
(
int
module_idP
,
int
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
int
CC_idP
,
int
subframeP
,
int
subframeP
,
int
test_onlyP
)
{
int
test_onlyP
)
{
int
*
CCE_table
=
RC
.
mac
[
module_idP
]
->
CCE_table
[
CC_idP
];
int
*
CCE_table
=
RC
.
mac
[
module_idP
]
->
CCE_table
[
CC_idP
];
nfapi_dl_config_request_body_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
nfapi_dl_config_request_body_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
;
...
@@ -2716,7 +2645,6 @@ int allocate_CCEs(int module_idP,
...
@@ -2716,7 +2645,6 @@ int allocate_CCEs(int module_idP,
int
i
,
j
,
idci
;
int
i
,
j
,
idci
;
int
nCCE
=
0
;
int
nCCE
=
0
;
LOG_D
(
MAC
,
"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)
\n
"
,
subframeP
,
test_onlyP
,
DL_req
->
number_pdu
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
);
LOG_D
(
MAC
,
"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)
\n
"
,
subframeP
,
test_onlyP
,
DL_req
->
number_pdu
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
);
DL_req
->
number_pdcch_ofdm_symbols
=
1
;
DL_req
->
number_pdcch_ofdm_symbols
=
1
;
...
@@ -2724,7 +2652,6 @@ try_again:
...
@@ -2724,7 +2652,6 @@ try_again:
init_CCE_table
(
module_idP
,
CC_idP
);
init_CCE_table
(
module_idP
,
CC_idP
);
nCCE
=
0
;
nCCE
=
0
;
for
(
i
=
0
,
idci
=
0
;
i
<
DL_req
->
number_pdu
;
i
++
)
{
for
(
i
=
0
,
idci
=
0
;
i
<
DL_req
->
number_pdu
;
i
++
)
{
// allocate DL common DCIs first
// allocate DL common DCIs first
if
((
dl_config_pdu
[
i
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
&&
if
((
dl_config_pdu
[
i
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
&&
...
@@ -2916,19 +2843,17 @@ try_again:
...
@@ -2916,19 +2843,17 @@ try_again:
return
0
;
return
0
;
failed:
failed:
return
-
1
;
return
-
1
;
}
}
/*
/*
uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, sub_frame_t subframeP)
{
uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, sub_frame_t subframeP)
{
if (RC.mac[module_idP]->common_channels[CC_idP].tdd_Config == NULL)
if (RC.mac[module_idP]->common_channels[CC_idP].tdd_Config == NULL)
return(0);
return(0);
switch (RC.mac[module_idP]->common_channels[CC_idP].tdd_Config->subframeAssignment) {
switch (RC.mac[module_idP]->common_channels[CC_idP].tdd_Config->subframeAssignment) {
case 0:
case 0:
case 1:
case 1:
case 2:
case 2:
...
@@ -2959,8 +2884,8 @@ uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, sub_frame_t subfram
...
@@ -2959,8 +2884,8 @@ uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, sub_frame_t subfram
}
}
*/
*/
nfapi_ul_config_request_pdu_t
*
has_ul_grant
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
absSFP
,
uint16_t
rnti
)
{
nfapi_ul_config_request_pdu_t
*
has_ul_grant
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
absSFP
,
uint16_t
rnti
)
{
nfapi_ul_config_request_body_t
*
ul_req
;
nfapi_ul_config_request_body_t
*
ul_req
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
;
...
@@ -3000,10 +2925,8 @@ nfapi_ul_config_request_pdu_t* has_ul_grant(module_id_t module_idP,int CC_idP,ui
...
@@ -3000,10 +2925,8 @@ nfapi_ul_config_request_pdu_t* has_ul_grant(module_id_t module_idP,int CC_idP,ui
(
ul_config_pdu
[
i
].
ulsch_uci_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
rnti
))
return
(
&
ul_config_pdu
[
i
]);
(
ul_config_pdu
[
i
].
ulsch_uci_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
rnti
))
return
(
&
ul_config_pdu
[
i
]);
if
((
ul_config_pdu
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE
)
&&
if
((
ul_config_pdu
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE
)
&&
(
ul_config_pdu
[
i
].
ulsch_csi_uci_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
rnti
))
return
(
&
ul_config_pdu
[
i
]);
(
ul_config_pdu
[
i
].
ulsch_csi_uci_harq_pdu
.
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
rnti
))
return
(
&
ul_config_pdu
[
i
]);
}
}
return
(
NULL
);
// no ul grant at all for this UE
return
(
NULL
);
// no ul grant at all for this UE
}
}
...
@@ -3061,8 +2984,8 @@ boolean_t CCE_allocation_infeasible(int module_idP,
...
@@ -3061,8 +2984,8 @@ boolean_t CCE_allocation_infeasible(int module_idP,
return
res
;
return
res
;
}
}
void
extract_harq
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
void
*
harq_indication
,
int
format
)
{
void
extract_harq
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
void
*
harq_indication
,
int
format
)
{
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
rnti_t
rnti
=
UE_RNTI
(
mod_idP
,
UE_id
);
rnti_t
rnti
=
UE_RNTI
(
mod_idP
,
UE_id
);
...
@@ -3111,7 +3034,6 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
...
@@ -3111,7 +3034,6 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
}
}
}
}
else
{
else
{
harq_indication_fdd
=
(
nfapi_harq_indication_fdd_rel13_t
*
)
harq_indication
;
harq_indication_fdd
=
(
nfapi_harq_indication_fdd_rel13_t
*
)
harq_indication
;
num_ack_nak
=
harq_indication_fdd
->
number_of_ack_nack
;
num_ack_nak
=
harq_indication_fdd
->
number_of_ack_nack
;
pdu
=
&
harq_indication_fdd
->
harq_tb_n
[
0
];
pdu
=
&
harq_indication_fdd
->
harq_tb_n
[
0
];
...
@@ -3305,8 +3227,9 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
...
@@ -3305,8 +3227,9 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
}
}
}
}
}
}
void
extract_pucch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
*
pdu
,
uint8_t
length
)
{
void
extract_pucch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
*
pdu
,
uint8_t
length
)
{
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
COMMON_channels_t
*
cc
=&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
];
...
@@ -3404,8 +3327,8 @@ void extract_pucch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
...
@@ -3404,8 +3327,8 @@ void extract_pucch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
}
}
}
}
void
extract_pusch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
*
pdu
,
uint8_t
length
)
{
void
extract_pusch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
uint8_t
*
pdu
,
uint8_t
length
)
{
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
COMMON_channels_t
*
cc
=
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
];
COMMON_channels_t
*
cc
=
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
];
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
...
@@ -3432,7 +3355,6 @@ void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
...
@@ -3432,7 +3355,6 @@ void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
int
m
;
int
m
;
switch
(
*
cqi_ReportModeAperiodic
)
{
switch
(
*
cqi_ReportModeAperiodic
)
{
case
CQI_ReportModeAperiodic_rm12
:
case
CQI_ReportModeAperiodic_rm12
:
AssertFatal
(
0
==
1
,
"to be fixed, don't use p but pdu directly
\n
"
);
AssertFatal
(
0
==
1
,
"to be fixed, don't use p but pdu directly
\n
"
);
// wideband multiple PMI (TM4/6), Table 5.2.2.6.1-1 (for TM4/6)
// wideband multiple PMI (TM4/6), Table 5.2.2.6.1-1 (for TM4/6)
...
@@ -3596,14 +3518,12 @@ void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
...
@@ -3596,14 +3518,12 @@ void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,
AssertFatal
(
1
==
0
,
"CQI_ReportModeAperiodic_rm11 to be done
\n
"
);
AssertFatal
(
1
==
0
,
"CQI_ReportModeAperiodic_rm11 to be done
\n
"
);
break
;
break
;
}
}
}
}
void
cqi_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
rnti_t
rntiP
,
void
cqi_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
rnti_t
rntiP
,
nfapi_cqi_indication_rel9_t
*
rel9
,
uint8_t
*
pdu
,
nfapi_cqi_indication_rel9_t
*
rel9
,
uint8_t
*
pdu
,
nfapi_ul_cqi_information_t
*
ul_cqi_information
)
{
nfapi_ul_cqi_information_t
*
ul_cqi_information
)
{
int
UE_id
=
find_UE_id
(
mod_idP
,
rntiP
);
int
UE_id
=
find_UE_id
(
mod_idP
,
rntiP
);
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
...
@@ -3666,7 +3586,6 @@ void SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, sub_frame_t
...
@@ -3666,7 +3586,6 @@ void SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, sub_frame_t
void
UL_failure_indication
(
module_id_t
mod_idP
,
int
cc_idP
,
frame_t
frameP
,
rnti_t
rntiP
,
sub_frame_t
subframeP
)
void
UL_failure_indication
(
module_id_t
mod_idP
,
int
cc_idP
,
frame_t
frameP
,
rnti_t
rntiP
,
sub_frame_t
subframeP
)
{
{
int
UE_id
=
find_UE_id
(
mod_idP
,
rntiP
);
int
UE_id
=
find_UE_id
(
mod_idP
,
rntiP
);
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
...
@@ -3683,9 +3602,8 @@ void UL_failure_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, rnti
...
@@ -3683,9 +3602,8 @@ void UL_failure_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, rnti
}
}
}
}
void
harq_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
nfapi_harq_indication_pdu_t
*
harq_pdu
)
{
void
harq_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
nfapi_harq_indication_pdu_t
*
harq_pdu
)
{
rnti_t
rnti
=
harq_pdu
->
rx_ue_information
.
rnti
;
rnti_t
rnti
=
harq_pdu
->
rx_ue_information
.
rnti
;
uint8_t
ul_cqi
=
harq_pdu
->
ul_cqi_information
.
ul_cqi
;
uint8_t
ul_cqi
=
harq_pdu
->
ul_cqi_information
.
ul_cqi
;
uint8_t
channel
=
harq_pdu
->
ul_cqi_information
.
channel
;
uint8_t
channel
=
harq_pdu
->
ul_cqi_information
.
channel
;
...
...
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