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
b5fb4968
Commit
b5fb4968
authored
Jan 25, 2019
by
Stefan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
forme eNB_scheduler_primitives < 3900
parent
d0b5dfa4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
236 additions
and
181 deletions
+236
-181
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+236
-181
No files found.
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
b5fb4968
...
...
@@ -3018,17 +3018,19 @@ dump_CCE_table(int *CCE_table,
printf
(
"CCE 0: "
);
for
(
i
=
0
;
i
<
nCCE
;
i
++
)
{
printf
(
"%1d."
,
CCE_table
[
i
]);
printf
(
"%1d."
,
CCE_table
[
i
]);
if
((
i
&
7
)
==
7
)
printf
(
"
\n
CCE %d: "
,
i
);
printf
(
"
\n
CCE %d: "
,
i
);
}
Yk
=
(
unsigned
int
)
rnti
;
for
(
i
=
0
;
i
<=
subframe
;
i
++
)
for
(
i
=
0
;
i
<=
subframe
;
i
++
)
{
Yk
=
(
Yk
*
39827
)
%
65537
;
}
Yk
=
Yk
%
(
nCCE
/
L
);
switch
(
L
)
{
...
...
@@ -3047,8 +3049,12 @@ dump_CCE_table(int *CCE_table,
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
);
}
//------------------------------------------------------------------------------
...
...
@@ -3065,16 +3071,16 @@ getnquad(COMMON_channels_t *cc,
int
phich_resource
=
get_phich_resource_times6
(
cc
);
uint8_t
Ngroup_PHICH
=
(
phich_resource
*
N_RB_DL
)
/
48
;
if
(((
phich_resource
*
N_RB_DL
)
%
48
)
>
0
)
if
(((
phich_resource
*
N_RB_DL
)
%
48
)
>
0
)
{
Ngroup_PHICH
++
;
}
if
(
cc
->
Ncp
==
1
)
{
Ngroup_PHICH
<<=
1
;
}
Ngroup_PHICH
*=
mi
;
if
(
(
num_pdcch_symbols
>
0
)
&&
(
num_pdcch_symbols
<
4
)
)
if
(
num_pdcch_symbols
>
0
&&
num_pdcch_symbols
<
4
)
switch
(
N_RB_DL
)
{
case
6
:
Nreg
=
12
+
(
num_pdcch_symbols
-
1
)
*
18
;
...
...
@@ -3093,7 +3099,7 @@ getnquad(COMMON_channels_t *cc,
break
;
default:
return
(
0
)
;
return
0
;
}
// printf("Nreg %d (%d)\n",Nreg,Nreg - 4 - (3*Ngroup_PHICH));
...
...
@@ -3108,7 +3114,9 @@ getnCCE(COMMON_channels_t *cc,
//------------------------------------------------------------------------------
{
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
return
(
getnquad
(
cc
,
num_pdcch_symbols
,
mi
)
/
9
);
return
(
getnquad
(
cc
,
num_pdcch_symbols
,
mi
)
/
9
);
}
//------------------------------------------------------------------------------
...
...
@@ -3126,72 +3134,74 @@ getmi(COMMON_channels_t *cc,
// for TDD
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
0
:
if
((
subframe
==
0
)
||
(
subframe
==
5
))
return
(
2
);
else
return
(
1
);
break
;
if
(
subframe
==
0
||
subframe
==
5
)
{
return
2
;
}
return
1
;
case
1
:
if
((
subframe
==
0
)
||
(
subframe
==
5
))
return
(
0
);
else
return
(
1
);
break
;
if
(
subframe
==
0
||
subframe
==
5
)
{
return
0
;
}
return
1
;
case
2
:
if
((
subframe
==
3
)
||
(
subframe
==
8
))
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
3
||
subframe
==
8
)
{
return
0
;
}
return
1
;
case
3
:
if
((
subframe
==
0
)
||
(
subframe
==
8
)
||
(
subframe
==
9
))
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
0
||
subframe
==
8
||
subframe
==
9
)
{
return
1
;
}
return
0
;
case
4
:
if
((
subframe
==
8
)
||
(
subframe
==
9
))
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
8
||
subframe
==
9
)
{
return
1
;
}
return
0
;
case
5
:
if
(
subframe
==
8
)
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
8
)
{
return
1
;
}
return
0
;
case
6
:
return
(
1
);
break
;
return
1
;
default:
return
(
0
)
;
break
;
}
return
0
;
}
//------------------------------------------------------------------------------
uint16_t
get_nCCE_max
(
COMMON_channels_t
*
cc
,
int
num_pdcch_symbols
,
int
subframe
)
{
get_nCCE_max
(
COMMON_channels_t
*
cc
,
int
num_pdcch_symbols
,
int
subframe
)
//------------------------------------------------------------------------------
{
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
return
(
getnCCE
(
cc
,
num_pdcch_symbols
,
getmi
(
cc
,
subframe
)));
return
(
getnCCE
(
cc
,
num_pdcch_symbols
,
getmi
(
cc
,
subframe
)));
}
// Allocate the CCEs
//------------------------------------------------------------------------------
int
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
test_onlyP
)
{
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
test_onlyP
)
//------------------------------------------------------------------------------
{
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
;
...
...
@@ -3526,11 +3536,13 @@ failed:
return
-
1
;
}
//------------------------------------------------------------------------------
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
=
&
RC
.
mac
[
module_idP
]
->
UL_req_tmp
[
CC_idP
][
absSFP
%
10
].
ul_config_request_body
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
=
&
ul_req
->
ul_config_pdu_list
[
0
];
...
...
@@ -3594,11 +3606,16 @@ has_ul_grant(module_id_t module_idP,
return
(
NULL
);
// no ul grant at all for this UE
}
//------------------------------------------------------------------------------
boolean_t
CCE_allocation_infeasible
(
int
module_idP
,
int
CC_idP
,
int
format_flag
,
int
subframe
,
int
aggregation
,
int
rnti
)
{
int
subframe
,
int
aggregation
,
int
rnti
)
//------------------------------------------------------------------------------
{
nfapi_dl_config_request_body_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
->
dl_config_pdu_list
[
DL_req
->
number_pdu
];
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
][
subframe
].
hi_dci0_request_body
;
...
...
@@ -3652,44 +3669,55 @@ CCE_allocation_infeasible(int module_idP,
return
res
;
}
void
get_retransmission_timing
(
LTE_TDD_Config_t
*
tdd_Config
,
frame_t
*
frameP
,
sub_frame_t
*
subframeP
)
{
//------------------------------------------------------------------------------
void
get_retransmission_timing
(
LTE_TDD_Config_t
*
tdd_Config
,
frame_t
*
frameP
,
sub_frame_t
*
subframeP
)
//------------------------------------------------------------------------------
{
if
(
tdd_Config
==
NULL
)
{
if
(
*
subframeP
>
1
)
if
(
*
subframeP
>
1
)
{
*
frameP
=
(
*
frameP
+
1
)
%
1024
;
}
*
subframeP
=
(
*
subframeP
+
8
)
%
10
;
}
else
{
switch
(
tdd_Config
->
subframeAssignment
)
{
//TODO fill in other TDD configs
default:
printf
(
"%s:%d: TODO
\n
"
,
__FILE__
,
__LINE__
);
printf
(
"%s:%d: TODO
\n
"
,
__FILE__
,
__LINE__
);
abort
();
break
;
case
1
:
if
(
*
subframeP
==
0
||
*
subframeP
==
5
)
{
*
subframeP
+=
19
;
*
frameP
=
(
*
frameP
+
*
subframeP
/
10
)
%
1024
;
*
frameP
=
(
*
frameP
+
(
*
subframeP
/
10
)
)
%
1024
;
*
subframeP
%=
10
;
}
else
if
(
*
subframeP
==
4
||
*
subframeP
==
9
)
{
*
subframeP
+=
16
;
*
frameP
=
(
*
frameP
+
*
subframeP
/
10
)
%
1024
;
*
frameP
=
(
*
frameP
+
(
*
subframeP
/
10
)
)
%
1024
;
*
subframeP
%=
10
;
}
else
{
AssertFatal
(
2
==
1
,
"Illegal dl subframe %d for tdd config %ld
\n
"
,
*
subframeP
,
AssertFatal
(
2
==
1
,
"Illegal dl subframe %d for tdd config %ld
\n
"
,
*
subframeP
,
tdd_Config
->
subframeAssignment
);
}
break
;
}
}
return
;
}
//------------------------------------------------------------------------------
uint8_t
get_dl_subframe_count
(
int
tdd_config_sfa
,
sub_frame_t
subframeP
)
//------------------------------------------------------------------------------
{
uint8_t
tdd1
[
10
]
=
{
1
,
-
1
,
-
1
,
-
1
,
2
,
3
,
-
1
,
-
1
,
-
1
,
4
};
// special subframes 1,6 are excluded
uint8_t
tdd1
[
10
]
=
{
1
,
-
1
,
-
1
,
-
1
,
2
,
3
,
-
1
,
-
1
,
-
1
,
4
};
// special subframes 1,6 are excluded
switch
(
tdd_config_sfa
)
{
// TODO fill in other tdd configs
case
1
:
...
...
@@ -3699,17 +3727,21 @@ get_dl_subframe_count(int tdd_config_sfa,
return
-
1
;
}
//------------------------------------------------------------------------------
uint8_t
frame_subframe2_dl_harq_pid
(
LTE_TDD_Config_t
*
tdd_Config
,
int
abs_frameP
,
sub_frame_t
subframeP
)
{
sub_frame_t
subframeP
)
//------------------------------------------------------------------------------
{
int
harq_pid
;
uint8_t
count
;
if
(
tdd_Config
)
{
switch
(
tdd_Config
->
subframeAssignment
)
{
//TODO fill in other tdd config
case
1
:
count
=
get_dl_subframe_count
(
tdd_Config
->
subframeAssignment
,
subframeP
);
count
=
get_dl_subframe_count
(
tdd_Config
->
subframeAssignment
,
subframeP
);
harq_pid
=
(((
frame_cnt
*
1024
+
abs_frameP
)
*
4
)
-
1
+
count
)
%
7
;
//4 dl subframe in a frame
if
(
harq_pid
<
0
)
{
...
...
@@ -3732,134 +3764,148 @@ frame_subframe2_dl_harq_pid(LTE_TDD_Config_t *tdd_Config,
return
-
1
;
}
unsigned
char
ul_ACK_subframe2M
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
)
{
//------------------------------------------------------------------------------
unsigned
char
ul_ACK_subframe2M
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
)
//------------------------------------------------------------------------------
{
if
(
tdd_Config
==
NULL
)
{
return
(
1
);
}
else
{
switch
(
tdd_Config
->
subframeAssignment
)
{
case
1
:
return
1
;
// don't ACK special subframe for now
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
2
);
}
else
if
(
subframe
==
3
)
{
// ACK subframe 9
return
(
1
);
// To be updated
}
else
if
(
subframe
==
7
)
{
// ACK subframes 0 and 1
return
(
2
);
// To be updated
}
else
if
(
subframe
==
8
)
{
// ACK subframe 4
return
(
1
);
// To be updated
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
break
;
case
3
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
2
);
// should be 3
}
else
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
(
2
);
// To be updated
}
else
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
(
2
);
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
break
;
case
4
:
if
(
subframe
==
2
)
{
// ACK subframes 0,4 and 5
return
(
3
);
// should be 4
}
else
if
(
subframe
==
3
)
{
// ACK subframes 6,7,8 and 9
return
(
4
);
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
break
;
return
1
;
}
switch
(
tdd_Config
->
subframeAssignment
)
{
case
1
:
return
1
;
// don't ACK special subframe for now
/*
if (subframe == 2) { // ACK subframes 5 and 6
return(2);
} else if (subframe == 3) { // ACK subframe 9
return(1); // To be updated
} else if (subframe == 7) { // ACK subframes 0 and 1
return(2); // To be updated
} else if (subframe == 8) { // ACK subframe 4
return(1); // To be updated
} else {
AssertFatal(1==0,"illegal subframe %d for tdd_config %ld\n",
subframe,tdd_Config->subframeAssignment);
}
break;
*/
case
3
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
2
;
// should be 3
}
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
2
;
// To be updated
}
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
2
;
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
case
5
:
if
(
subframe
==
2
)
{
// ACK subframes 0,3,4,5,6,7,8 and 9
return
(
8
);
// should be 3
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
case
4
:
if
(
subframe
==
2
)
{
// ACK subframes 0,4 and 5
return
3
;
// should be 4
}
if
(
subframe
==
3
)
{
// ACK subframes 6,7,8 and 9
return
4
;
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
break
;
}
case
5
:
if
(
subframe
==
2
)
{
// ACK subframes 0,3,4,5,6,7,8 and 9
return
8
;
// should be 3
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
}
return
(
0
)
;
return
0
;
}
unsigned
char
ul_ACK_subframe2dl_subframe
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
,
unsigned
char
ACK_index
)
{
//------------------------------------------------------------------------------
unsigned
char
ul_ACK_subframe2dl_subframe
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
,
unsigned
char
ACK_index
)
//------------------------------------------------------------------------------
{
if
(
tdd_Config
==
NULL
)
{
return
((
subframe
<
4
)
?
subframe
+
6
:
subframe
-
4
);
}
else
{
switch
(
tdd_Config
->
subframeAssignment
)
{
case
3
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
if
(
ACK_index
==
2
)
return
(
1
);
return
(
5
+
ACK_index
);
}
else
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
(
7
+
ACK_index
);
// To be updated
}
else
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
((
9
+
ACK_index
)
%
10
);
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config->subframeAssignment %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
break
;
case
4
:
if
(
subframe
==
2
)
{
// ACK subframes 0, 4 and 5
//if (ACK_index==2)
// return(1); TBC
if
(
ACK_index
==
2
)
return
(
0
);
return
(
4
+
ACK_index
);
}
else
if
(
subframe
==
3
)
{
// ACK subframes 6, 7 8 and 9
return
(
6
+
ACK_index
);
// To be updated
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
return
((
subframe
<
4
)
?
subframe
+
6
:
subframe
-
4
);
}
break
;
switch
(
tdd_Config
->
subframeAssignment
)
{
case
3
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
if
(
ACK_index
==
2
)
return
1
;
return
(
5
+
ACK_index
);
}
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
(
7
+
ACK_index
);
// To be updated
}
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
((
9
+
ACK_index
)
%
10
);
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config->subframeAssignment %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
case
1
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
5
+
ACK_index
);
}
else
if
(
subframe
==
3
)
{
// ACK subframe 9
return
(
9
);
// To be updated
}
else
if
(
subframe
==
7
)
{
// ACK subframes 0 and 1
return
(
ACK_index
);
// To be updated
}
else
if
(
subframe
==
8
)
{
// ACK subframe 4
return
(
4
);
// To be updated
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
}
case
4
:
if
(
subframe
==
2
)
{
// ACK subframes 0, 4 and 5
//if (ACK_index==2)
// return(1); TBC
if
(
ACK_index
==
2
)
return
0
;
return
(
4
+
ACK_index
);
}
if
(
subframe
==
3
)
{
// ACK subframes 6, 7 8 and 9
return
(
6
+
ACK_index
);
// To be updated
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
break
;
}
case
1
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
5
+
ACK_index
);
}
if
(
subframe
==
3
)
{
// ACK subframe 9
return
9
;
// To be updated
}
if
(
subframe
==
7
)
{
// ACK subframes 0 and 1
return
ACK_index
;
// To be updated
}
if
(
subframe
==
8
)
{
// ACK subframe 4
return
4
;
// To be updated
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
}
return
(
0
);
return
0
;
}
//------------------------------------------------------------------------------
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
)
{
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_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
rnti_t
rnti
=
UE_RNTI
(
mod_idP
,
UE_id
);
...
...
@@ -4422,6 +4468,7 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
}
}
//------------------------------------------------------------------------------
void
extract_pucch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
...
...
@@ -4525,6 +4572,7 @@ extract_pucch_csi(module_id_t mod_idP, int CC_idP, int UE_id,
}
}
//------------------------------------------------------------------------------
void
extract_pusch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
...
...
@@ -4826,6 +4874,7 @@ extract_pusch_csi(module_id_t mod_idP, int CC_idP, int UE_id,
}
}
//------------------------------------------------------------------------------
void
cqi_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
rnti_t
rntiP
,
...
...
@@ -4868,6 +4917,7 @@ cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
}
}
//------------------------------------------------------------------------------
void
SR_indication
(
module_id_t
mod_idP
,
int
cc_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
rnti_t
rntiP
,
uint8_t
ul_cqi
)
{
...
...
@@ -4898,6 +4948,7 @@ SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP,
}
}
//------------------------------------------------------------------------------
void
UL_failure_indication
(
module_id_t
mod_idP
,
int
cc_idP
,
frame_t
frameP
,
rnti_t
rntiP
,
sub_frame_t
subframeP
)
{
...
...
@@ -4921,6 +4972,7 @@ UL_failure_indication(module_id_t mod_idP, int cc_idP, frame_t frameP,
}
}
//------------------------------------------------------------------------------
static
int
nack_or_dtx_reported
(
COMMON_channels_t
*
cc
,
nfapi_harq_indication_pdu_t
*
harq_pdu
)
{
...
...
@@ -4945,6 +4997,7 @@ static int nack_or_dtx_reported(
}
}
//------------------------------------------------------------------------------
void
harq_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
...
...
@@ -4984,11 +5037,12 @@ harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
}
// Flexran Slicing functions
//------------------------------------------------------------------------------
uint16_t
nb_rbs_allowed_slice
(
float
rb_percentage
,
int
total_rbs
)
{
return
(
uint16_t
)
floor
(
rb_percentage
*
total_rbs
);
}
//------------------------------------------------------------------------------
int
ue_dl_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
int
slice_idx
)
{
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_dl
))
{
...
...
@@ -5001,6 +5055,7 @@ int ue_dl_slice_membership(module_id_t mod_id, int UE_id, int slice_idx) {
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_dl_slice_idx
[
UE_id
]
==
slice_idx
;
}
//------------------------------------------------------------------------------
int
ue_ul_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
int
slice_idx
)
{
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_ul
))
{
...
...
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