Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
openairinterface5G
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Shweta Shrivastava
openairinterface5G
Commits
60d10c0a
Commit
60d10c0a
authored
7 years ago
by
Cédric Roux
Browse files
Options
Downloads
Patches
Plain Diff
bugfix: fix schedule_SR (and some spacing cleanup)
parent
09e683a3
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
openair2/LAYER2/MAC/eNB_scheduler.c
+125
-122
125 additions, 122 deletions
openair2/LAYER2/MAC/eNB_scheduler.c
with
125 additions
and
122 deletions
openair2/LAYER2/MAC/eNB_scheduler.c
+
125
−
122
View file @
60d10c0a
...
@@ -71,19 +71,19 @@ extern RAN_CONTEXT_t RC;
...
@@ -71,19 +71,19 @@ extern RAN_CONTEXT_t RC;
uint16_t
pdcch_order_table
[
6
]
=
{
31
,
31
,
511
,
2047
,
2047
,
8191
};
uint16_t
pdcch_order_table
[
6
]
=
{
31
,
31
,
511
,
2047
,
2047
,
8191
};
void
schedule_SRS
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
void
schedule_SRS
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
nfapi_ul_config_request_body_t
*
ul_req
;
nfapi_ul_config_request_body_t
*
ul_req
;
int
CC_id
,
UE_id
;
int
CC_id
,
UE_id
;
COMMON_channels_t
*
cc
=
RC
.
mac
[
module_idP
]
->
common_channels
;
COMMON_channels_t
*
cc
=
RC
.
mac
[
module_idP
]
->
common_channels
;
SoundingRS_UL_ConfigCommon_t
*
soundingRS_UL_ConfigCommon
;
SoundingRS_UL_ConfigCommon_t
*
soundingRS_UL_ConfigCommon
;
struct
SoundingRS_UL_ConfigDedicated
*
soundingRS_UL_ConfigDedicated
;
struct
SoundingRS_UL_ConfigDedicated
*
soundingRS_UL_ConfigDedicated
;
uint8_t
TSFC
;
uint8_t
TSFC
;
uint16_t
deltaTSFC
;
// bitmap
uint16_t
deltaTSFC
;
// bitmap
uint8_t
srs_SubframeConfig
;
uint8_t
srs_SubframeConfig
;
// table for TSFC (Period) and deltaSFC (offset)
// table for TSFC (Period) and deltaSFC (offset)
const
uint16_t
deltaTSFCTabType1
[
15
][
2
]
=
{
{
1
,
1
},{
1
,
2
},{
2
,
2
},{
1
,
5
},{
2
,
5
},{
4
,
5
},{
8
,
5
},{
3
,
5
},{
12
,
5
},{
1
,
10
},{
2
,
10
},{
4
,
10
},{
8
,
10
},{
351
,
10
},{
383
,
10
}
};
// Table 5.5.3.3-2 3GPP 36.211 FDD
const
uint16_t
deltaTSFCTabType1
[
15
][
2
]
=
{
{
1
,
1
},{
1
,
2
},{
2
,
2
},{
1
,
5
},{
2
,
5
},{
4
,
5
},{
8
,
5
},{
3
,
5
},{
12
,
5
},{
1
,
10
},{
2
,
10
},{
4
,
10
},{
8
,
10
},{
351
,
10
},{
383
,
10
}
};
// Table 5.5.3.3-2 3GPP 36.211 FDD
const
uint16_t
deltaTSFCTabType2
[
14
][
2
]
=
{
{
2
,
5
},{
6
,
5
},{
10
,
5
},{
18
,
5
},{
14
,
5
},{
22
,
5
},{
26
,
5
},{
30
,
5
},{
70
,
10
},{
74
,
10
},{
194
,
10
},{
326
,
10
},{
586
,
10
},{
210
,
10
}
};
// Table 5.5.3.3-2 3GPP 36.211 TDD
const
uint16_t
deltaTSFCTabType2
[
14
][
2
]
=
{
{
2
,
5
},{
6
,
5
},{
10
,
5
},{
18
,
5
},{
14
,
5
},{
22
,
5
},{
26
,
5
},{
30
,
5
},{
70
,
10
},{
74
,
10
},{
194
,
10
},{
326
,
10
},{
586
,
10
},{
210
,
10
}
};
// Table 5.5.3.3-2 3GPP 36.211 TDD
...
@@ -109,19 +109,19 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
...
@@ -109,19 +109,19 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
if
((
1
<<
tmp
)
&
deltaTSFC
)
{
if
((
1
<<
tmp
)
&
deltaTSFC
)
{
// This is an SRS subframe, loop over UEs
// This is an SRS subframe, loop over UEs
for
(
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
for
(
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
if
((
soundingRS_UL_ConfigDedicated
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
soundingRS_UL_ConfigDedicated
)
!=
NULL
)
{
if
((
soundingRS_UL_ConfigDedicated
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
soundingRS_UL_ConfigDedicated
)
!=
NULL
)
{
if
(
soundingRS_UL_ConfigDedicated
->
present
==
SoundingRS_UL_ConfigDedicated_PR_setup
)
{
if
(
soundingRS_UL_ConfigDedicated
->
present
==
SoundingRS_UL_ConfigDedicated_PR_setup
)
{
get_srs_pos
(
&
cc
[
CC_id
],
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_ConfigIndex
,
&
srsPeriodicity
,
&
srsOffset
);
get_srs_pos
(
&
cc
[
CC_id
],
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_ConfigIndex
,
&
srsPeriodicity
,
&
srsOffset
);
if
(((
10
*
frameP
+
subframeP
)
%
srsPeriodicity
)
==
srsOffset
)
{
if
(((
10
*
frameP
+
subframeP
)
%
srsPeriodicity
)
==
srsOffset
)
{
// Prorgram SRS
// Prorgram SRS
ul_req
->
srs_present
=
1
;
ul_req
->
srs_present
=
1
;
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_SRS_PDU_TYPE
;
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_SRS_PDU_TYPE
;
ul_config_pdu
->
pdu_size
=
2
+
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_srs_pdu
));
ul_config_pdu
->
pdu_size
=
2
+
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_srs_pdu
));
...
@@ -131,15 +131,15 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
...
@@ -131,15 +131,15 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
frequency_domain_position
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
freqDomainPosition
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
frequency_domain_position
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
freqDomainPosition
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
srs_hopping_bandwidth
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_HoppingBandwidth
;;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
srs_hopping_bandwidth
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_HoppingBandwidth
;;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
transmission_comb
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
transmissionComb
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
transmission_comb
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
transmissionComb
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
i_srs
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_ConfigIndex
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
i_srs
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_ConfigIndex
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
sounding_reference_cyclic_shift
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
cyclicShift
;
ul_config_pdu
->
srs_pdu
.
srs_pdu_rel8
.
sounding_reference_cyclic_shift
=
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
cyclicShift
;
// ul_config_pdu->srs_pdu.srs_pdu_rel10.antenna_port = ;//
// ul_config_pdu->srs_pdu.srs_pdu_rel10.antenna_port = ;//
// ul_config_pdu->srs_pdu.srs_pdu_rel13.number_of_combs = ;//
// ul_config_pdu->srs_pdu.srs_pdu_rel13.number_of_combs = ;//
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
ul_req
->
number_of_pdus
++
;
ul_req
->
number_of_pdus
++
;
}
// if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset)
}
// if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset)
}
// if (soundingRS_UL_ConfigDedicated->present == SoundingRS_UL_ConfigDedicated_PR_setup)
}
// if (soundingRS_UL_ConfigDedicated->present == SoundingRS_UL_ConfigDedicated_PR_setup)
}
// if ((soundingRS_UL_ConfigDedicated = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->soundingRS_UL_ConfigDedicated)!=NULL)
}
// if ((soundingRS_UL_ConfigDedicated = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->soundingRS_UL_ConfigDedicated)!=NULL)
}
// for (UE_id ...
}
// for (UE_id ...
}
// if((1<<tmp) & deltaTSFC)
}
// if((1<<tmp) & deltaTSFC)
...
@@ -147,13 +147,13 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
...
@@ -147,13 +147,13 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
}
}
}
}
void
schedule_CSI
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
void
schedule_CSI
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
COMMON_channels_t
*
cc
;
COMMON_channels_t
*
cc
;
nfapi_ul_config_request_body_t
*
ul_req
;
nfapi_ul_config_request_body_t
*
ul_req
;
int
CC_id
,
UE_id
;
int
CC_id
,
UE_id
;
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
;
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
;
uint16_t
Npd
,
N_OFFSET_CQI
;
uint16_t
Npd
,
N_OFFSET_CQI
;
int
H
;
int
H
;
...
@@ -173,11 +173,11 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
...
@@ -173,11 +173,11 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
//Rel8 Periodic CQI/PMI/RI reporting
//Rel8 Periodic CQI/PMI/RI reporting
get_csi_params
(
cc
,
cqi_ReportPeriodic
,
&
Npd
,
&
N_OFFSET_CQI
,
&
H
);
get_csi_params
(
cc
,
cqi_ReportPeriodic
,
&
Npd
,
&
N_OFFSET_CQI
,
&
H
);
if
((((
frameP
*
10
)
+
subframeP
)
%
Npd
)
==
N_OFFSET_CQI
)
{
// CQI opportunity
if
((((
frameP
*
10
)
+
subframeP
)
%
Npd
)
==
N_OFFSET_CQI
)
{
// CQI opportunity
UE_list
->
UE_sched_ctrl
[
UE_id
].
feedback_cnt
[
CC_id
]
=
(((
frameP
*
10
)
+
subframeP
)
/
Npd
)
%
H
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
feedback_cnt
[
CC_id
]
=
(((
frameP
*
10
)
+
subframeP
)
/
Npd
)
%
H
;
// Program CQI
// Program CQI
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_CQI_PDU_TYPE
;
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE
;
ul_config_pdu
->
pdu_size
=
2
+
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_uci_cqi_pdu
));
ul_config_pdu
->
pdu_size
=
2
+
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_uci_cqi_pdu
));
...
@@ -192,13 +192,13 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
...
@@ -192,13 +192,13 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
#if defined(Rel10) || defined(Rel14)
#if defined(Rel10) || defined(Rel14)
// PUT rel10-13 UCI options here
// PUT rel10-13 UCI options here
#endif
#endif
}
}
else
if
((
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
)
&&
else
if
((
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
)
&&
((((
frameP
*
10
)
+
subframeP
)
%
((
H
*
Npd
)
<<
(
*
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
/
161
)))
==
((((
frameP
*
10
)
+
subframeP
)
%
((
H
*
Npd
)
<<
(
*
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
/
161
)))
==
N_OFFSET_CQI
+
(
*
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
%
161
)))
{
// RI opportunity
N_OFFSET_CQI
+
(
*
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
%
161
)))
{
// RI opportunity
// Program RI
// Program RI
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_CQI_PDU_TYPE
;
ul_config_pdu
->
pdu_type
=
NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE
;
ul_config_pdu
->
pdu_size
=
2
+
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_uci_cqi_pdu
));
ul_config_pdu
->
pdu_size
=
2
+
(
uint8_t
)(
2
+
sizeof
(
nfapi_ul_config_uci_cqi_pdu
));
...
@@ -215,102 +215,111 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
...
@@ -215,102 +215,111 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
}
// for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
}
// for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
}
}
void
schedule_SR
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
void
schedule_SR
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
nfapi_ul_config_request_body_t
*
ul_req
;
nfapi_ul_config_request_body_t
*
ul_req
;
int
CC_id
,
UE_id
;
int
CC_id
;
int
UE_id
;
SchedulingRequestConfig_t
*
SRconfig
;
SchedulingRequestConfig_t
*
SRconfig
;
int
skip_ue
;
int
is_harq
;
nfapi_ul_config_sr_information
sr
;
int
i
;
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
for
(
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
for
(
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
ul_config_request_body
;
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
AssertFatal
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
!=
NULL
,
"physicalConfigDedicated is null for UE %d
\n
"
,
UE_id
);
// drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
if
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)
continue
;
if
((
SRconfig
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
schedulingRequestConfig
)
!=
NULL
)
{
if
((
SRconfig
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
schedulingRequestConfig
)
!=
NULL
)
{
if
(
SRconfig
->
present
==
SchedulingRequestConfig_PR_setup
)
{
if
(
SRconfig
->
present
==
SchedulingRequestConfig_PR_setup
)
{
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
4
)
{
// 5 ms SR period
if
((
subframeP
%
5
)
!=
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
)
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
4
)
{
// 5 ms SR period
continue
;
if
((
subframeP
%
5
)
!=
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
)
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
14
)
{
// 10 ms SR period
continue
;
if
(
subframeP
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
5
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
14
)
{
// 10 ms SR period
continue
;
if
(
subframeP
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
5
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
34
)
{
// 20 ms SR period
continue
;
if
((
10
*
(
frameP
&
1
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
15
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
34
)
{
// 20 ms SR period
continue
;
if
((
10
*
(
frameP
&
1
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
15
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
74
)
{
// 40 ms SR period
continue
;
if
((
10
*
(
frameP
&
3
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
35
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
74
)
{
// 40 ms SR period
continue
;
if
((
10
*
(
frameP
&
3
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
35
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
154
)
{
// 80 ms SR period
continue
;
if
((
10
*
(
frameP
&
7
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
75
))
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
154
)
{
// 80 ms SR period
continue
;
if
((
10
*
(
frameP
&
7
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
75
))
}
continue
;
}
// SRconfig->present == SchedulingRequestConfig_PR_setup)
}
}
// SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL)
}
// SRconfig->present == SchedulingRequestConfig_PR_setup)
}
// SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL)
// if we get here there is some PUCCH1 reception to schedule for SR
// if we get here there is some PUCCH1 reception to schedule for SR
int
skip_ue
=
0
;
skip_ue
=
0
;
is_harq
=
0
;
// check that there is no existing UL grant for ULSCH which overrides the SR
// check that there is no existing UL grant for ULSCH which overrides the SR
for
(
int
i
=
0
;
i
<
ul_req
->
number_of_pdus
;
i
++
)
for
(
i
=
0
;
i
<
ul_req
->
number_of_pdus
;
i
++
)
{
if
(((
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
)
||
if
(((
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_PDU_TYPE
)
||
(
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE
)
||
(
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE
)
||
(
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE
)
||
(
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE
)
||
(
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE
))
&&
(
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE
))
&&
(
ul_req
->
ul_config_pdu_list
[
i
].
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
))
{
(
ul_req
->
ul_config_pdu_list
[
i
].
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
))
{
skip_ue
=
1
;
skip_ue
=
1
;
break
;
break
;
}
}
else
if
((
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
)
&&
/* if there is already an HARQ pdu, convert to SR_HARQ */
(
ul_req
->
ul_config_pdu_list
[
i
].
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
))
else
if
((
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
)
&&
skip_ue
=
1
;
(
ul_req
->
ul_config_pdu_list
[
i
].
uci_harq_pdu
.
ue_information
.
ue_information_rel8
.
rnti
==
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
))
{
is_harq
=
1
;
break
;
}
}
// drop the allocation because ULSCH with handle it with BSR
// drop the allocation because ULSCH with handle it with BSR
if
(
skip_ue
==
1
)
continue
;
if
(
skip_ue
==
1
)
continue
;
// drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
LOG_D
(
MAC
,
"Frame %d, Subframe %d : Scheduling SR for UE %d/%x
\n
"
,
frameP
,
subframeP
,
UE_id
,
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
);
if
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)
continue
;
// if we get here then there is no UL grant so program the SR
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
pdu_type
=
NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE
;
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
ue_information
.
ue_information_rel8
.
rnti
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
;
// check Rel10 or Rel8 SR
// check Rel10 or Rel8 SR
#if defined(Rel10) || defined(Rel14)
#if defined(Rel10) || defined(Rel14)
if
((
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
)
&&
if
((
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
)
&&
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
)
&&
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
)
&&
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
))
{
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
))
{
sr
.
sr_information_rel10
.
number_of_pucch_resources
=
1
;
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
sr_information
.
sr_information_rel10
.
number_of_pucch_resources
=
1
;
sr
.
sr_information_rel10
.
pucch_index_p1
=
*
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
->
sr_PUCCH_ResourceIndexP1_r10
;
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
sr_information
.
sr_information_rel10
.
pucch_index_p1
=
}
else
*
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
->
sr_PUCCH_ResourceIndexP1_r10
;
}
else
#endif
#endif
{
{
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
sr_information
.
sr_information_rel8
.
pucch_index
=
sr
.
sr_information_rel8
.
pucch_index
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
schedulingRequestConfig
->
choice
.
setup
.
sr_PUCCH_ResourceIndex
;
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
schedulingRequestConfig
->
choice
.
setup
.
sr_PUCCH_ResourceIndex
;
}
LOG_D
(
MAC
,
"Frame %d, Subframe %d : Scheduling SR for UE %d/%x
\n
"
,
frameP
,
subframeP
,
UE_id
,
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
);
}
/* if there is already an HARQ pdu, convert to SR_HARQ */
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
if
(
is_harq
)
{
ul_req
->
number_of_pdus
++
;
nfapi_ul_config_harq_information
h
=
ul_req
->
ul_config_pdu_list
[
i
].
uci_harq_pdu
.
harq_information
;
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
=
NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE
;
ul_req
->
ul_config_pdu_list
[
i
].
uci_sr_harq_pdu
.
sr_information
=
sr
;
ul_req
->
ul_config_pdu_list
[
i
].
uci_sr_harq_pdu
.
harq_information
=
h
;
}
else
{
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
pdu_type
=
NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE
;
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
ue_information
.
ue_information_rel8
.
rnti
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
;
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
sr_information
=
sr
;
ul_req
->
number_of_pdus
++
;
}
/* if (is_harq) */
}
// for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id])
}
// for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id])
}
// for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
}
// for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
}
}
void
check_ul_failure
(
module_id_t
module_idP
,
int
CC_id
,
int
UE_id
,
void
check_ul_failure
(
module_id_t
module_idP
,
int
CC_id
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
frame_t
frameP
,
sub_frame_t
subframeP
)
{
UE_list_t
*
UE_list
=
&
RC
.
mac
[
module_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=
&
RC
.
mac
[
module_idP
]
->
UE_list
;
nfapi_dl_config_request_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
0
];
nfapi_dl_config_request_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
0
];
uint16_t
rnti
=
UE_RNTI
(
module_idP
,
UE_id
);
uint16_t
rnti
=
UE_RNTI
(
module_idP
,
UE_id
);
...
@@ -322,26 +331,26 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
...
@@ -322,26 +331,26 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
LOG_D
(
MAC
,
"UE %d rnti %x: UL Failure timer %d
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
LOG_D
(
MAC
,
"UE %d rnti %x: UL Failure timer %d
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
==
0
)
{
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
==
0
)
{
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
=
1
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
=
1
;
// add a format 1A dci for this UE to request an RA procedure (only one UE per subframe)
// add a format 1A dci for this UE to request an RA procedure (only one UE per subframe)
LOG_D
(
MAC
,
"UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d)
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
LOG_D
(
MAC
,
"UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d)
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
[
CC_id
].
dl_config_request_body
.
dl_config_pdu_list
[
DL_req
[
CC_id
].
dl_config_request_body
.
number_pdu
];
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
[
CC_id
].
dl_config_request_body
.
dl_config_pdu_list
[
DL_req
[
CC_id
].
dl_config_request_body
.
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_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
));
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
dci_format
=
NFAPI_DL_DCI_FORMAT_1A
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
dci_format
=
NFAPI_DL_DCI_FORMAT_1A
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
=
get_aggregation
(
get_bw_index
(
module_idP
,
CC_id
),
UE_list
->
UE_sched_ctrl
[
UE_id
].
dl_cqi
[
CC_id
],
format1A
);
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
=
get_aggregation
(
get_bw_index
(
module_idP
,
CC_id
),
UE_list
->
UE_sched_ctrl
[
UE_id
].
dl_cqi
[
CC_id
],
format1A
);
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti
=
rnti
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti
=
rnti
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti_type
=
1
;
// CRNTI : see Table 4-10 from SCF082 - nFAPI specifications
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti_type
=
1
;
// CRNTI : see Table 4-10 from SCF082 - nFAPI specifications
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
transmission_power
=
6000
;
// equal to RS power
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
transmission_power
=
6000
;
// equal to RS power
AssertFatal
((
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
>=
0
)
&&
(
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
<
6
),
AssertFatal
((
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
>=
0
)
&&
(
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
<
6
),
"illegal dl_Bandwidth %d
\n
"
,(
int
)
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
"illegal dl_Bandwidth %d
\n
"
,(
int
)
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
);
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
resource_block_coding
=
pdcch_order_table
[
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
];
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
resource_block_coding
=
pdcch_order_table
[
cc
[
CC_id
].
mib
->
message
.
dl_Bandwidth
];
DL_req
[
CC_id
].
dl_config_request_body
.
number_dci
++
;
DL_req
[
CC_id
].
dl_config_request_body
.
number_dci
++
;
DL_req
[
CC_id
].
dl_config_request_body
.
number_pdu
++
;
DL_req
[
CC_id
].
dl_config_request_body
.
number_pdu
++
;
/*
/*
add_ue_spec_dci(&DL_req[CC_id],
add_ue_spec_dci(&DL_req[CC_id],
rnti,
rnti,
get_aggregation(get_tw_index(module_idP,CC_id),eNB_UE_stats->DL_cqi[0],format1A),
get_aggregation(get_tw_index(module_idP,CC_id),eNB_UE_stats->DL_cqi[0],format1A),
...
@@ -349,11 +358,11 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
...
@@ -349,11 +358,11 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
NO_DLSCH);*/
NO_DLSCH);*/
}
}
else
{
// ra_pdcch_sent==1
else
{
// ra_pdcch_sent==1
LOG_D
(
MAC
,
"UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d)
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
LOG_D
(
MAC
,
"UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d)
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
if
((
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
%
40
)
==
0
)
if
((
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
%
40
)
==
0
)
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
=
0
;
// resend every 4 frames
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
=
0
;
// resend every 4 frames
}
}
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
++
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
++
;
// check threshold
// check threshold
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
>
200
)
{
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
>
200
)
{
...
@@ -364,40 +373,40 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
...
@@ -364,40 +373,40 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_out_of_sync
=
1
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_out_of_sync
=
1
;
}
}
}
// ul_failure_timer>0
}
// ul_failure_timer>0
}
void
clear_nfapi_information
(
eNB_MAC_INST
*
eNB
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
}
void
clear_nfapi_information
(
eNB_MAC_INST
*
eNB
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
nfapi_dl_config_request_t
*
DL_req
=
&
eNB
->
DL_req
[
0
];
nfapi_dl_config_request_t
*
DL_req
=
&
eNB
->
DL_req
[
0
];
nfapi_ul_config_request_t
*
UL_req
=
&
eNB
->
UL_req
[
0
];
nfapi_ul_config_request_t
*
UL_req
=
&
eNB
->
UL_req
[
0
];
nfapi_hi_dci0_request_t
*
HI_DCI0_req
=
&
eNB
->
HI_DCI0_req
[
0
];
nfapi_hi_dci0_request_t
*
HI_DCI0_req
=
&
eNB
->
HI_DCI0_req
[
0
];
nfapi_tx_request_t
*
TX_req
=
&
eNB
->
TX_req
[
0
];
nfapi_tx_request_t
*
TX_req
=
&
eNB
->
TX_req
[
0
];
eNB
->
pdu_index
[
CC_idP
]
=
0
;
eNB
->
pdu_index
[
CC_idP
]
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_pdcch_ofdm_symbols
=
1
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_pdcch_ofdm_symbols
=
1
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_dci
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_dci
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_pdu
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_pdu
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_pdsch_rnti
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
number_pdsch_rnti
=
0
;
DL_req
[
CC_idP
].
dl_config_request_body
.
transmission_power_pcfich
=
6000
;
DL_req
[
CC_idP
].
dl_config_request_body
.
transmission_power_pcfich
=
6000
;
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
.
sfnsf
=
subframeP
+
(
frameP
<<
4
);
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
.
sfnsf
=
subframeP
+
(
frameP
<<
4
);
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
.
number_of_dci
=
0
;
HI_DCI0_req
[
CC_idP
].
hi_dci0_request_body
.
number_of_dci
=
0
;
UL_req
[
CC_idP
].
ul_config_request_body
.
number_of_pdus
=
0
;
UL_req
[
CC_idP
].
ul_config_request_body
.
number_of_pdus
=
0
;
UL_req
[
CC_idP
].
ul_config_request_body
.
rach_prach_frequency_resources
=
0
;
// ignored, handled by PHY for now
UL_req
[
CC_idP
].
ul_config_request_body
.
rach_prach_frequency_resources
=
0
;
// ignored, handled by PHY for now
UL_req
[
CC_idP
].
ul_config_request_body
.
srs_present
=
0
;
// ignored, handled by PHY for now
UL_req
[
CC_idP
].
ul_config_request_body
.
srs_present
=
0
;
// ignored, handled by PHY for now
TX_req
[
CC_idP
].
tx_request_body
.
number_of_pdus
=
0
;
TX_req
[
CC_idP
].
tx_request_body
.
number_of_pdus
=
0
;
}
}
void
copy_ulreq
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
void
copy_ulreq
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
int
CC_id
;
int
CC_id
;
eNB_MAC_INST
*
eNB
;
eNB_MAC_INST
*
eNB
;
nfapi_ul_config_request_body_t
*
ul_req_tmp
;
nfapi_ul_config_request_body_t
*
ul_req_tmp
;
...
@@ -409,7 +418,7 @@ void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) {
...
@@ -409,7 +418,7 @@ void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) {
ul_req_tmp
=
&
eNB
->
UL_req_tmp
[
CC_id
][
subframeP
].
ul_config_request_body
;
ul_req_tmp
=
&
eNB
->
UL_req_tmp
[
CC_id
][
subframeP
].
ul_config_request_body
;
ul_req
=
&
eNB
->
UL_req
[
CC_id
].
ul_config_request_body
;
ul_req
=
&
eNB
->
UL_req
[
CC_id
].
ul_config_request_body
;
eNB
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
eNB
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
ul_req
->
number_of_pdus
=
ul_req_tmp
->
number_of_pdus
;
ul_req
->
number_of_pdus
=
ul_req_tmp
->
number_of_pdus
;
ul_req_tmp
->
number_of_pdus
=
0
;
ul_req_tmp
->
number_of_pdus
=
0
;
...
@@ -417,11 +426,11 @@ void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) {
...
@@ -417,11 +426,11 @@ void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) {
memcpy
((
void
*
)
ul_req
->
ul_config_pdu_list
,
memcpy
((
void
*
)
ul_req
->
ul_config_pdu_list
,
(
void
*
)
ul_req_tmp
->
ul_config_pdu_list
,
(
void
*
)
ul_req_tmp
->
ul_config_pdu_list
,
ul_req
->
number_of_pdus
*
sizeof
(
nfapi_ul_config_request_pdu_t
));
ul_req
->
number_of_pdus
*
sizeof
(
nfapi_ul_config_request_pdu_t
));
}
}
}
}
void
eNB_dlsch_ulsch_scheduler
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
void
eNB_dlsch_ulsch_scheduler
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
{
int
mbsfn_status
[
MAX_NUM_CCs
];
int
mbsfn_status
[
MAX_NUM_CCs
];
...
@@ -430,15 +439,14 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
...
@@ -430,15 +439,14 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
int
CC_id
,
i
;
//,next_i;
int
CC_id
,
i
;
//,next_i;
UE_list_t
*
UE_list
=&
RC
.
mac
[
module_idP
]
->
UE_list
;
UE_list_t
*
UE_list
=&
RC
.
mac
[
module_idP
]
->
UE_list
;
rnti_t
rnti
;
rnti_t
rnti
;
COMMON_channels_t
*
cc
=
RC
.
mac
[
module_idP
]
->
common_channels
;
COMMON_channels_t
*
cc
=
RC
.
mac
[
module_idP
]
->
common_channels
;
eNB_UE_STATS
*
eNB_UE_stats
;
#if defined(FLEXRAN_AGENT_SB_IF)
#if defined(FLEXRAN_AGENT_SB_IF)
Protocol__FlexranMessage
*
msg
;
Protocol__FlexranMessage
*
msg
;
#endif
#endif
start_meas
(
&
RC
.
mac
[
module_idP
]
->
eNB_scheduler
);
start_meas
(
&
RC
.
mac
[
module_idP
]
->
eNB_scheduler
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER
,
VCD_FUNCTION_IN
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER
,
VCD_FUNCTION_IN
);
...
@@ -465,7 +473,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
...
@@ -465,7 +473,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
rnti
=
UE_RNTI
(
module_idP
,
i
);
rnti
=
UE_RNTI
(
module_idP
,
i
);
CC_id
=
UE_PCCID
(
module_idP
,
i
);
CC_id
=
UE_PCCID
(
module_idP
,
i
);
eNB_UE_stats
=
&
RC
.
mac
[
module_idP
]
->
UE_list
.
eNB_UE_stats
[
CC_id
][
i
];
if
((
frameP
==
0
)
&&
(
subframeP
==
0
))
{
if
((
frameP
==
0
)
&&
(
subframeP
==
0
))
{
LOG_D
(
MAC
,
"UE rnti %x : %s, PHR %d dB CQI %d
\n
"
,
rnti
,
LOG_D
(
MAC
,
"UE rnti %x : %s, PHR %d dB CQI %d
\n
"
,
rnti
,
...
@@ -476,12 +483,12 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
...
@@ -476,12 +483,12 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
RC
.
eNB
[
module_idP
][
CC_id
]
->
pusch_stats_bsr
[
i
][(
frameP
*
10
)
+
subframeP
]
=-
63
;
RC
.
eNB
[
module_idP
][
CC_id
]
->
pusch_stats_bsr
[
i
][(
frameP
*
10
)
+
subframeP
]
=-
63
;
if
(
i
==
UE_list
->
head
)
if
(
i
==
UE_list
->
head
)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR
,
RC
.
eNB
[
module_idP
][
CC_id
]
->
pusch_stats_bsr
[
i
][(
frameP
*
10
)
+
subframeP
]);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR
,
RC
.
eNB
[
module_idP
][
CC_id
]
->
pusch_stats_bsr
[
i
][(
frameP
*
10
)
+
subframeP
]);
// increment this, it is cleared when we receive an sdu
// increment this, it is cleared when we receive an sdu
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ul_inactivity_timer
++
;
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ul_inactivity_timer
++
;
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
cqi_req_timer
++
;
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
cqi_req_timer
++
;
LOG_D
(
MAC
,
"UE %d/%x : ul_inactivity %d, cqi_req %d
\n
"
,
i
,
rnti
,
LOG_D
(
MAC
,
"UE %d/%x : ul_inactivity %d, cqi_req %d
\n
"
,
i
,
rnti
,
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ul_inactivity_timer
,
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ul_inactivity_timer
,
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
cqi_req_timer
);
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
cqi_req_timer
);
check_ul_failure
(
module_idP
,
CC_id
,
i
,
frameP
,
subframeP
);
check_ul_failure
(
module_idP
,
CC_id
,
i
,
frameP
,
subframeP
);
...
@@ -535,8 +542,4 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
...
@@ -535,8 +542,4 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
stop_meas
(
&
RC
.
mac
[
module_idP
]
->
eNB_scheduler
);
stop_meas
(
&
RC
.
mac
[
module_idP
]
->
eNB_scheduler
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER
,
VCD_FUNCTION_OUT
);
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment