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
promise
OpenXG-RAN
Commits
60d10c0a
Commit
60d10c0a
authored
Oct 06, 2017
by
Cedric Roux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfix: fix schedule_SR (and some spacing cleanup)
parent
09e683a3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
125 additions
and
122 deletions
+125
-122
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+125
-122
No files found.
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
60d10c0a
...
...
@@ -71,19 +71,19 @@ extern RAN_CONTEXT_t RC;
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
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
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
;
SoundingRS_UL_ConfigCommon_t
*
soundingRS_UL_ConfigCommon
;
struct
SoundingRS_UL_ConfigDedicated
*
soundingRS_UL_ConfigDedicated
;
uint8_t
TSFC
;
uint16_t
deltaTSFC
;
// bitmap
uint8_t
srs_SubframeConfig
;
// 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
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) {
if
((
1
<<
tmp
)
&
deltaTSFC
)
{
// This is an SRS subframe, loop over UEs
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
;
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
->
present
==
SoundingRS_UL_ConfigDedicated_PR_setup
)
{
get_srs_pos
(
&
cc
[
CC_id
],
soundingRS_UL_ConfigDedicated
->
choice
.
setup
.
srs_ConfigIndex
,
&
srsPeriodicity
,
&
srsOffset
);
if
(((
10
*
frameP
+
subframeP
)
%
srsPeriodicity
)
==
srsOffset
)
{
// Prorgram SRS
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
));
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
));
...
...
@@ -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
.
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
.
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
.
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_rel10.antenna_port = ;//
// ul_config_pdu->srs_pdu.srs_pdu_rel13.number_of_combs = ;//
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
ul_req
->
number_of_pdus
++
;
}
// if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset)
}
// 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 (((10*frameP+subframeP) % srsPeriodicity) == srsOffset)
}
// 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)
}
// for (UE_id ...
}
// if((1<<tmp) & deltaTSFC)
...
...
@@ -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
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
COMMON_channels_t
*
cc
;
nfapi_ul_config_request_body_t
*
ul_req
;
int
CC_id
,
UE_id
;
int
CC_id
,
UE_id
;
struct
CQI_ReportPeriodic
*
cqi_ReportPeriodic
;
uint16_t
Npd
,
N_OFFSET_CQI
;
int
H
;
...
...
@@ -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
get_csi_params
(
cc
,
cqi_ReportPeriodic
,
&
Npd
,
&
N_OFFSET_CQI
,
&
H
);
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
;
// 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
));
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
));
...
...
@@ -192,13 +192,13 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
#if defined(Rel10) || defined(Rel14)
// PUT rel10-13 UCI options here
#endif
#endif
}
else
if
((
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
)
&&
((((
frameP
*
10
)
+
subframeP
)
%
((
H
*
Npd
)
<<
(
*
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
/
161
)))
==
N_OFFSET_CQI
+
(
*
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
%
161
)))
{
// RI opportunity
// 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
));
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
));
...
...
@@ -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++) {
}
void
schedule_SR
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
void
schedule_SR
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
)
{
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
nfapi_ul_config_request_body_t
*
ul_req
;
int
CC_id
,
UE_id
;
int
CC_id
;
int
UE_id
;
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
;
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
->
present
==
SchedulingRequestConfig_PR_setup
)
{
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
4
)
{
// 5 ms SR period
if
((
subframeP
%
5
)
!=
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
)
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
14
)
{
// 10 ms SR period
if
(
subframeP
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
5
))
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
34
)
{
// 20 ms SR period
if
((
10
*
(
frameP
&
1
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
15
))
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
74
)
{
// 40 ms SR period
if
((
10
*
(
frameP
&
3
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
35
))
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
154
)
{
// 80 ms SR period
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)
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
)
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
14
)
{
// 10 ms SR period
if
(
subframeP
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
5
))
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
34
)
{
// 20 ms SR period
if
((
10
*
(
frameP
&
1
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
15
))
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
74
)
{
// 40 ms SR period
if
((
10
*
(
frameP
&
3
)
+
subframeP
)
!=
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
-
35
))
continue
;
}
else
if
(
SRconfig
->
choice
.
setup
.
sr_ConfigIndex
<=
154
)
{
// 80 ms SR period
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)
// 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
for
(
int
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
)
||
(
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_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
))
{
skip_ue
=
1
;
break
;
}
else
if
((
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
)
&&
(
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
;
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
)
||
(
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_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
))
{
skip_ue
=
1
;
break
;
}
/* if there is already an HARQ pdu, convert to SR_HARQ */
else
if
((
ul_req
->
ul_config_pdu_list
[
i
].
pdu_type
==
NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE
)
&&
(
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
if
(
skip_ue
==
1
)
continue
;
// 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 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
;
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
);
// check Rel10 or Rel8 SR
#if defined(Rel10) || defined(Rel14)
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
))
{
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
sr_information
.
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
.
pucch_index_p1
=
*
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
->
sr_PUCCH_ResourceIndexP1_r10
;
}
else
(
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
;
sr
.
sr_information_rel10
.
pucch_index_p1
=
*
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
ext2
->
schedulingRequestConfig_v1020
->
sr_PUCCH_ResourceIndexP1_r10
;
}
else
#endif
{
ul_req
->
ul_config_pdu_list
[
ul_req
->
number_of_pdus
].
uci_sr_pdu
.
sr_information
.
sr_information_rel8
.
pucch_index
=
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
);
}
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
ul_req
->
number_of_pdus
++
;
{
sr
.
sr_information_rel8
.
pucch_index
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
schedulingRequestConfig
->
choice
.
setup
.
sr_PUCCH_ResourceIndex
;
}
/* if there is already an HARQ pdu, convert to SR_HARQ */
if
(
is_harq
)
{
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 (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
,
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
;
nfapi_dl_config_request_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
0
];
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,
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
)
{
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)
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
];
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
];
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
->
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
.
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
.
transmission_power
=
6000
;
// equal to RS power
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
);
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_pdu
++
;
/*
/*
add_ue_spec_dci(&DL_req[CC_id],
rnti,
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,
NO_DLSCH);*/
}
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
)
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
++
;
// check threshold
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,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_out_of_sync
=
1
;
}
}
// 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_ul_config_request_t
*
UL_req
=
&
eNB
->
UL_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
];
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_dci
=
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
.
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
.
number_of_dci
=
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
.
srs_present
=
0
;
// ignored, handled by PHY for now
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
;
eNB_MAC_INST
*
eNB
;
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) {
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
;
eNB
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
ul_req
->
number_of_pdus
=
ul_req_tmp
->
number_of_pdus
;
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) {
memcpy
((
void
*
)
ul_req
->
ul_config_pdu_list
,
(
void
*
)
ul_req_tmp
->
ul_config_pdu_list
,
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
];
...
...
@@ -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;
UE_list_t
*
UE_list
=&
RC
.
mac
[
module_idP
]
->
UE_list
;
rnti_t
rnti
;
COMMON_channels_t
*
cc
=
RC
.
mac
[
module_idP
]
->
common_channels
;
eNB_UE_STATS
*
eNB_UE_stats
;
#if defined(FLEXRAN_AGENT_SB_IF)
Protocol__FlexranMessage
*
msg
;
#endif
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
);
...
...
@@ -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
);
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
))
{
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
RC
.
eNB
[
module_idP
][
CC_id
]
->
pusch_stats_bsr
[
i
][(
frameP
*
10
)
+
subframeP
]
=-
63
;
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
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
++
;
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
].
cqi_req_timer
);
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
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
);
}
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