Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
OAI-RAN-5G-sheduler_MaxTBS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD 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
MAQ5G-PFC
OAI-RAN-5G-sheduler_MaxTBS
Commits
60d10c0a
Commit
60d10c0a
authored
7 years ago
by
Cedric 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
Show 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,8 +71,8 @@ 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
;
...
...
@@ -147,8 +147,8 @@ 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
;
...
...
@@ -215,28 +215,33 @@ 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
)
{
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
(
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
;
...
...
@@ -258,9 +263,10 @@ void schedule_SR(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
// 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
(
i
nt
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
)
||
(
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
)
||
...
...
@@ -269,48 +275,51 @@ void schedule_SR(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
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
].
ulsch_pdu
.
ulsch_pdu_rel8
.
rnti
==
UE_list
->
UE_template
[
CC_id
][
UE_id
].
rnti
))
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
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
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
);
sr
.
sr_information_rel8
.
pucch_index
=
UE_list
->
UE_template
[
CC_id
][
UE_id
].
physicalConfigDedicated
->
schedulingRequestConfig
->
choice
.
setup
.
sr_PUCCH_ResourceIndex
;
}
RC
.
mac
[
module_idP
]
->
UL_req
[
CC_id
].
sfn_sf
=
(
frameP
<<
4
)
+
subframeP
;
/* 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
);
...
...
@@ -367,8 +376,8 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
}
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
];
...
...
@@ -396,8 +405,8 @@ void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_fra
}
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
;
...
...
@@ -433,7 +442,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
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
...
...
@@ -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
,
...
...
@@ -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
);
}
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