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
7db6ac93
Commit
7db6ac93
authored
Jan 11, 2019
by
Stefan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eNB_scheduler_primitives improvements-2
parent
81652337
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
99 deletions
+66
-99
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+66
-99
No files found.
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
7db6ac93
...
@@ -1649,7 +1649,7 @@ fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_config_pd
...
@@ -1649,7 +1649,7 @@ fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_config_pd
AssertFatal
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
!=
NULL
,
"physicalConfigDedicated->cqi_ReportModeAperiodic is null!
\n
"
);
AssertFatal
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
!=
NULL
,
"physicalConfigDedicated->cqi_ReportModeAperiodic is null!
\n
"
);
AssertFatal
(
physicalConfigDedicated
->
pusch_ConfigDedicated
!=
NULL
,
"physicalConfigDedicated->puschConfigDedicated is null!
\n
"
);
AssertFatal
(
physicalConfigDedicated
->
pusch_ConfigDedicated
!=
NULL
,
"physicalConfigDedicated->puschConfigDedicated is null!
\n
"
);
for
(
int
ri
=
0
;
ri
<
(
1
<<
ri_size
);
ri
++
)
{
for
(
int
ri
=
0
;
ri
<
(
1
<<
ri_size
);
ri
++
)
{
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
ri
]
=
ul_config_pdu
->
ulsch_cqi_ri_pdu
.
cqi_ri_information
.
cqi_ri_information_rel9
.
aperiodic_cqi_pmi_ri_report
.
cc
[
0
].
dl_cqi_pmi_size
[
ri
]
=
get_dl_cqi_pmi_size_pusch
(
cc
,
tmode
,
1
+
ri
,
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
);
get_dl_cqi_pmi_size_pusch
(
cc
,
tmode
,
1
+
ri
,
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
);
}
}
...
@@ -1668,7 +1668,8 @@ fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t *
...
@@ -1668,7 +1668,8 @@ fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t *
uint16_t
uint16_t
total_number_of_repetitions
,
total_number_of_repetitions
,
uint16_t
repetition_number
,
uint16_t
repetition_number
,
uint16_t
initial_transmission_sf_io
)
{
uint16_t
initial_transmission_sf_io
)
{
// Re13 fields
// Re13 fields
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
tl
.
tag
=
NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
tl
.
tag
=
NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
ue_type
=
ue_type
;
ul_config_pdu
->
ulsch_pdu
.
ulsch_pdu_rel13
.
ue_type
=
ue_type
;
...
@@ -1862,19 +1863,18 @@ int find_UE_id(module_id_t mod_idP, rnti_t rntiP)
...
@@ -1862,19 +1863,18 @@ int find_UE_id(module_id_t mod_idP, rnti_t rntiP)
int
find_RA_id
(
module_id_t
mod_idP
,
int
CC_idP
,
rnti_t
rntiP
)
int
find_RA_id
(
module_id_t
mod_idP
,
int
CC_idP
,
rnti_t
rntiP
)
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{
{
int
RA_id
;
AssertFatal
(
RC
.
mac
[
mod_idP
],
"RC.mac[%d] is null
\n
"
,
mod_idP
);
AssertFatal
(
RC
.
mac
[
mod_idP
],
"RC.mac[%d] is null
\n
"
,
mod_idP
);
RA_t
*
ra
=
(
RA_t
*
)
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
].
ra
[
0
];
RA_t
*
ra_ptr
=
RC
.
mac
[
mod_idP
]
->
common_channels
[
CC_idP
].
ra
;
for
(
RA_id
=
0
;
RA_id
<
NB_RA_PROC_MAX
;
RA_id
++
)
{
LOG_D
(
MAC
,
for
(
int
RA_id
=
0
;
RA_id
<
NB_RA_PROC_MAX
;
RA_id
++
,
ra_ptr
++
)
{
"Checking RA_id %d for %x : state %d
\n
"
,
LOG_D
(
MAC
,
"Checking RA_id %d for %x : state %d
\n
"
,
RA_id
,
rntiP
,
ra
[
RA_id
].
state
);
RA_id
,
rntiP
,
ra_ptr
[
RA_id
].
state
);
if
((
ra_ptr
->
state
!=
IDLE
)
&&
(
ra_ptr
->
rnti
==
rntiP
))
{
if
(
ra
[
RA_id
].
state
!=
IDLE
&&
ra
[
RA_id
].
rnti
==
rntiP
)
return
(
RA_id
);
return
(
RA_id
);
}
}
}
return
(
-
1
);
return
(
-
1
);
...
@@ -2889,16 +2889,17 @@ get_nCCE_max(COMMON_channels_t *cc, int num_pdcch_symbols, int subframe) {
...
@@ -2889,16 +2889,17 @@ get_nCCE_max(COMMON_channels_t *cc, int num_pdcch_symbols, int subframe) {
// Allocate the CCEs
// Allocate the CCEs
int
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
];
int
*
CCE_table
=
RC
.
mac
[
module_idP
]
->
CCE_table
[
CC_idP
];
nfapi_dl_config_request_body_t
*
DL_req
=
nfapi_dl_config_request_body_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
][
subframeP
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
->
dl_config_pdu_list
[
0
];
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
][
subframeP
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
0
];
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
->
dl_config_pdu_list
[
0
];
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
0
];
int
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
1
,
subframeP
);
int
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
1
,
subframeP
);
int
fCCE
;
int
fCCE
;
int
i
,
j
,
idci
;
int
i
,
j
,
idci
;
...
@@ -2918,7 +2919,9 @@ allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP,
...
@@ -2918,7 +2919,9 @@ allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP,
subframeP
,
test_onlyP
,
DL_req
->
number_pdu
,
DL_req
->
number_dci
,
subframeP
,
test_onlyP
,
DL_req
->
number_pdu
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
);
HI_DCI0_req
->
number_of_dci
);
DL_req
->
number_pdcch_ofdm_symbols
=
1
;
DL_req
->
number_pdcch_ofdm_symbols
=
1
;
try_again:
try_again:
init_CCE_table
(
module_idP
,
CC_idP
);
init_CCE_table
(
module_idP
,
CC_idP
);
nCCE
=
0
;
nCCE
=
0
;
...
@@ -2935,14 +2938,13 @@ try_again:
...
@@ -2935,14 +2938,13 @@ try_again:
if
(
nCCE
+
(
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
)
>
nCCE_max
)
{
if
(
nCCE
+
(
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
)
>
nCCE_max
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
goto
failed
;
return
-
1
;
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1
\n
"
,
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
++
;
DL_req
->
number_pdcch_ofdm_symbols
++
;
nCCE_max
=
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
goto
try_again
;
goto
try_again
;
}
}
...
@@ -2970,18 +2972,16 @@ try_again:
...
@@ -2970,18 +2972,16 @@ try_again:
dl_config_pdu
[
j
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
,
dl_config_pdu
[
j
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
,
nCCE
,
nCCE_max
,
DL_req
->
number_pdcch_ofdm_symbols
);
nCCE
,
nCCE_max
,
DL_req
->
number_pdcch_ofdm_symbols
);
}
}
//dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
//dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
goto
failed
;
return
-
1
;
}
}
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1
\n
"
,
"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
++
;
DL_req
->
number_pdcch_ofdm_symbols
++
;
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
nCCE_max
=
DL_req
->
number_pdcch_ofdm_symbols
,
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
subframeP
);
goto
try_again
;
goto
try_again
;
}
// fCCE==-1
}
// fCCE==-1
...
@@ -2991,11 +2991,8 @@ try_again:
...
@@ -2991,11 +2991,8 @@ try_again:
if
((
test_onlyP
%
2
)
==
0
)
{
if
((
test_onlyP
%
2
)
==
0
)
{
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
cce_idx
=
fCCE
;
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
cce_idx
=
fCCE
;
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d
\n
"
,
"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d
\n
"
,
subframeP
,
test_onlyP
,
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
,
fCCE
);
subframeP
,
test_onlyP
,
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
,
fCCE
);
}
}
idci
++
;
idci
++
;
...
@@ -3006,8 +3003,7 @@ try_again:
...
@@ -3006,8 +3003,7 @@ try_again:
for
(
i
=
0
;
i
<
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
;
i
++
)
{
for
(
i
=
0
;
i
<
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
;
i
++
)
{
// allocate UL DCIs
// allocate UL DCIs
if
(
hi_dci0_pdu
[
i
].
pdu_type
==
NFAPI_HI_DCI0_DCI_PDU_TYPE
)
{
if
(
hi_dci0_pdu
[
i
].
pdu_type
==
NFAPI_HI_DCI0_DCI_PDU_TYPE
)
{
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Trying to allocate format 0 DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
"Trying to allocate format 0 DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
idci
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
idci
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
,
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
rnti
,
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
rnti
,
...
@@ -3016,16 +3012,13 @@ try_again:
...
@@ -3016,16 +3012,13 @@ try_again:
if
(
nCCE
+
(
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
aggregation_level
)
>
nCCE_max
)
{
if
(
nCCE
+
(
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
aggregation_level
)
>
nCCE_max
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
goto
failed
;
return
-
1
;
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1
\n
"
,
"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
++
;
DL_req
->
number_pdcch_ofdm_symbols
++
;
nCCE_max
=
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
goto
try_again
;
goto
try_again
;
}
}
...
@@ -3039,15 +3032,12 @@ try_again:
...
@@ -3039,15 +3032,12 @@ try_again:
if
(
fCCE
==
-
1
)
{
if
(
fCCE
==
-
1
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
{
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"subframe %d: Dropping Allocation for RNTI %x
\n
"
,
"subframe %d: Dropping Allocation for RNTI %x
\n
"
,
subframeP
,
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
rnti
);
subframeP
,
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
rnti
);
for
(
j
=
0
;
j
<=
i
;
j
++
)
{
for
(
j
=
0
;
j
<=
i
;
j
++
)
{
if
(
hi_dci0_pdu
[
j
].
pdu_type
==
NFAPI_HI_DCI0_DCI_PDU_TYPE
)
if
(
hi_dci0_pdu
[
j
].
pdu_type
==
NFAPI_HI_DCI0_DCI_PDU_TYPE
)
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
j
,
j
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
,
DL_req
->
number_dci
,
...
@@ -3057,18 +3047,15 @@ try_again:
...
@@ -3057,18 +3047,15 @@ try_again:
hi_dci0_pdu
[
j
].
dci_pdu
.
dci_pdu_rel8
.
aggregation_level
,
hi_dci0_pdu
[
j
].
dci_pdu
.
dci_pdu_rel8
.
aggregation_level
,
nCCE
,
nCCE_max
,
DL_req
->
number_pdcch_ofdm_symbols
);
nCCE
,
nCCE_max
,
DL_req
->
number_pdcch_ofdm_symbols
);
}
}
//dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
//dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
goto
failed
;
return
-
1
;
}
}
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1
\n
"
,
"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
++
;
DL_req
->
number_pdcch_ofdm_symbols
++
;
nCCE_max
=
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
goto
try_again
;
goto
try_again
;
}
// fCCE==-1
}
// fCCE==-1
...
@@ -3078,8 +3065,7 @@ try_again:
...
@@ -3078,8 +3065,7 @@ try_again:
if
((
test_onlyP
%
2
)
==
0
)
{
if
((
test_onlyP
%
2
)
==
0
)
{
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
cce_index
=
fCCE
;
hi_dci0_pdu
[
i
].
dci_pdu
.
dci_pdu_rel8
.
cce_index
=
fCCE
;
LOG_D
(
MAC
,
"Allocate CCEs subframe %d, test %d
\n
"
,
LOG_D
(
MAC
,
"Allocate CCEs subframe %d, test %d
\n
"
,
subframeP
,
test_onlyP
);
subframeP
,
test_onlyP
);
}
}
idci
++
;
idci
++
;
...
@@ -3091,8 +3077,7 @@ try_again:
...
@@ -3091,8 +3077,7 @@ try_again:
if
((
dl_config_pdu
[
i
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
if
((
dl_config_pdu
[
i
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
&&
(
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti_type
==
&&
(
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti_type
==
1
))
{
1
))
{
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Trying to allocate DL UE-SPECIFIC DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
"Trying to allocate DL UE-SPECIFIC DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
idci
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
idci
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
,
HI_DCI0_req
->
number_of_dci
,
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti
,
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti
,
...
@@ -3102,15 +3087,12 @@ try_again:
...
@@ -3102,15 +3087,12 @@ try_again:
if
(
nCCE
+
(
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
)
>
nCCE_max
)
{
if
(
nCCE
+
(
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
aggregation_level
)
>
nCCE_max
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
goto
failed
;
return
-
1
;
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
++
;
DL_req
->
number_pdcch_ofdm_symbols
++
;
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
nCCE_max
=
DL_req
->
number_pdcch_ofdm_symbols
,
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
subframeP
);
goto
try_again
;
goto
try_again
;
}
}
...
@@ -3122,16 +3104,12 @@ try_again:
...
@@ -3122,16 +3104,12 @@ try_again:
if
(
fCCE
==
-
1
)
{
if
(
fCCE
==
-
1
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
{
if
(
DL_req
->
number_pdcch_ofdm_symbols
==
max_symbol
)
{
LOG_I
(
MAC
,
LOG_I
(
MAC
,
"subframe %d: Dropping Allocation for RNTI %x
\n
"
,
"subframe %d: Dropping Allocation for RNTI %x
\n
"
,
subframeP
,
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti
);
subframeP
,
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
rnti
);
for
(
j
=
0
;
j
<=
i
;
j
++
)
{
for
(
j
=
0
;
j
<=
i
;
j
++
)
{
if
(
dl_config_pdu
[
j
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
if
(
dl_config_pdu
[
j
].
pdu_type
==
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
)
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)
\n
"
,
j
,
j
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
+
HI_DCI0_req
->
number_of_dci
,
DL_req
->
number_dci
,
DL_req
->
number_dci
,
...
@@ -3144,19 +3122,15 @@ try_again:
...
@@ -3144,19 +3122,15 @@ try_again:
nCCE_max
,
nCCE_max
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
);
}
}
//dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
//dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
goto
failed
;
return
-
1
;
}
}
LOG_D
(
MAC
,
LOG_D
(
MAC
,
"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1
\n
"
,
"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1
\n
"
,
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
);
DL_req
->
number_pdcch_ofdm_symbols
++
;
DL_req
->
number_pdcch_ofdm_symbols
++
;
nCCE_max
=
nCCE_max
=
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
get_nCCE_max
(
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_idP
],
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
DL_req
->
number_pdcch_ofdm_symbols
,
subframeP
);
goto
try_again
;
goto
try_again
;
}
// fCCE==-1
}
// fCCE==-1
...
@@ -3166,8 +3140,7 @@ try_again:
...
@@ -3166,8 +3140,7 @@ try_again:
if
((
test_onlyP
%
2
)
==
0
)
{
if
((
test_onlyP
%
2
)
==
0
)
{
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
cce_idx
=
fCCE
;
dl_config_pdu
[
i
].
dci_dl_pdu
.
dci_dl_pdu_rel8
.
cce_idx
=
fCCE
;
LOG_D
(
MAC
,
"Allocate CCEs subframe %d, test %d
\n
"
,
LOG_D
(
MAC
,
"Allocate CCEs subframe %d, test %d
\n
"
,
subframeP
,
test_onlyP
);
subframeP
,
test_onlyP
);
}
}
if
((
test_onlyP
/
2
)
==
1
)
{
if
((
test_onlyP
/
2
)
==
1
)
{
...
@@ -3188,10 +3161,7 @@ try_again:
...
@@ -3188,10 +3161,7 @@ try_again:
idci
++
;
idci
++
;
}
}
}
// for i = 0 ... num_DL_DCIs
}
// for i = 0 ... num_DL_DCIs
return
0
;
return
0
;
failed:
return
-
1
;
}
}
nfapi_ul_config_request_pdu_t
*
has_ul_grant
(
module_id_t
module_idP
,
nfapi_ul_config_request_pdu_t
*
has_ul_grant
(
module_id_t
module_idP
,
...
@@ -3282,13 +3252,11 @@ CCE_allocation_infeasible(int module_idP,
...
@@ -3282,13 +3252,11 @@ CCE_allocation_infeasible(int module_idP,
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
->
dl_config_pdu_list
[
DL_req
->
number_pdu
];
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
->
dl_config_pdu_list
[
DL_req
->
number_pdu
];
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
][
subframe
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
][
subframe
].
hi_dci0_request_body
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
];
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
];
boolean_t
res
=
FALS
E
;
boolean_t
res
=
TRU
E
;
if
(
format_flag
!=
2
)
{
// DL DCI
if
(
format_flag
!=
2
)
{
// DL DCI
if
(
DL_req
->
number_pdu
==
MAX_NUM_DL_PDU
)
{
if
(
DL_req
->
number_pdu
==
MAX_NUM_DL_PDU
)
{
LOG_W
(
MAC
,
"Subframe %d: FAPI DL structure is full, skip scheduling UE %d
\n
"
,
LOG_W
(
MAC
,
"Subframe %d: FAPI DL structure is full, skip scheduling UE %d
\n
"
,
subframe
,
rnti
);
subframe
,
rnti
);
res
=
TRUE
;
}
else
{
}
else
{
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
tl
.
tag
=
NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG
;
dl_config_pdu
->
dci_dl_pdu
.
dci_dl_pdu_rel8
.
tl
.
tag
=
NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG
;
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
;
dl_config_pdu
->
pdu_type
=
NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE
;
...
@@ -3299,15 +3267,13 @@ CCE_allocation_infeasible(int module_idP,
...
@@ -3299,15 +3267,13 @@ CCE_allocation_infeasible(int module_idP,
LOG_D
(
MAC
,
"Subframe %d: Checking CCE feasibility format %d : (%x,%d)
\n
"
,
LOG_D
(
MAC
,
"Subframe %d: Checking CCE feasibility format %d : (%x,%d)
\n
"
,
subframe
,
format_flag
,
rnti
,
aggregation
);
subframe
,
format_flag
,
rnti
,
aggregation
);
res
=
(
allocate_CCEs
(
module_idP
,
CC_idP
,
0
,
subframe
,
0
)
==
-
1
);
if
(
allocate_CCEs
(
module_idP
,
CC_idP
,
0
,
subframe
,
0
)
!=
-
1
)
res
=
FALSE
;
DL_req
->
number_pdu
--
;
DL_req
->
number_pdu
--
;
}
}
}
else
{
// ue-specific UL DCI
}
else
{
// ue-specific UL DCI
if
(
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
==
MAX_NUM_HI_DCI0_PDU
)
{
if
(
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
==
MAX_NUM_HI_DCI0_PDU
)
{
LOG_W
(
MAC
,
"Subframe %d: FAPI UL structure is full, skip scheduling UE %d
\n
"
,
LOG_W
(
MAC
,
"Subframe %d: FAPI UL structure is full, skip scheduling UE %d
\n
"
,
subframe
,
rnti
);
subframe
,
rnti
);
res
=
TRUE
;
}
else
{
}
else
{
hi_dci0_pdu
->
pdu_type
=
NFAPI_HI_DCI0_DCI_PDU_TYPE
;
hi_dci0_pdu
->
pdu_type
=
NFAPI_HI_DCI0_DCI_PDU_TYPE
;
hi_dci0_pdu
->
dci_pdu
.
dci_pdu_rel8
.
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG
;
hi_dci0_pdu
->
dci_pdu
.
dci_pdu_rel8
.
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG
;
...
@@ -3315,8 +3281,8 @@ CCE_allocation_infeasible(int module_idP,
...
@@ -3315,8 +3281,8 @@ CCE_allocation_infeasible(int module_idP,
hi_dci0_pdu
->
dci_pdu
.
dci_pdu_rel8
.
aggregation_level
=
aggregation
;
hi_dci0_pdu
->
dci_pdu
.
dci_pdu_rel8
.
aggregation_level
=
aggregation
;
HI_DCI0_req
->
number_of_dci
++
;
HI_DCI0_req
->
number_of_dci
++
;
res
=
(
allocate_CCEs
(
module_idP
,
CC_idP
,
0
,
subframe
,
0
)
==
-
1
);
if
(
allocate_CCEs
(
module_idP
,
CC_idP
,
0
,
subframe
,
0
)
!=
-
1
)
res
=
FALSE
;
HI_DCI0_req
->
number_of_dci
--
;
HI_DCI0_req
->
number_of_dci
--
;
}
}
}
}
...
@@ -4642,14 +4608,15 @@ int ue_dl_slice_membership(module_id_t mod_id, int UE_id, int slice_idx) {
...
@@ -4642,14 +4608,15 @@ 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
;
&&
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
)
{
int
ue_ul_slice_membership
(
module_id_t
mod_id
,
if
((
slice_idx
<
0
)
int
UE_id
,
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_ul
))
{
int
slice_idx
)
{
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_ul
))
{
LOG_W
(
MAC
,
"out of range slice index %d (slice ID %d)
\n
"
,
LOG_W
(
MAC
,
"out of range slice index %d (slice ID %d)
\n
"
,
slice_idx
,
RC
.
mac
[
mod_id
]
->
slice_info
.
dl
[
slice_idx
].
id
);
slice_idx
,
RC
.
mac
[
mod_id
]
->
slice_info
.
dl
[
slice_idx
].
id
);
return
0
;
return
0
;
}
}
return
RC
.
mac
[
mod_id
]
->
UE_list
.
active
[
UE_id
]
==
TRUE
return
RC
.
mac
[
mod_id
]
->
UE_list
.
active
[
UE_id
]
==
TRUE
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_ul_slice_idx
[
UE_id
]
==
slice_idx
;
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_ul_slice_idx
[
UE_id
]
==
slice_idx
;
}
}
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