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
lizhongxiao
OpenXG-RAN
Commits
4d4f7dd6
Commit
4d4f7dd6
authored
Jun 07, 2022
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
initial commit for MAC UE BWP structure (bwp id)
parent
b5583d47
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
129 additions
and
108 deletions
+129
-108
openair1/PHY/INIT/nr_init_ru.c
openair1/PHY/INIT/nr_init_ru.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+3
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+5
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+102
-88
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+5
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+3
-3
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+4
-3
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+6
-0
No files found.
openair1/PHY/INIT/nr_init_ru.c
View file @
4d4f7dd6
...
...
@@ -60,7 +60,7 @@ int nr_phy_init_RU(RU_t *ru) {
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
// Allocate 10 subframes of I/Q TX signal data (time) if not
ru
->
common
.
txdata
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
ru
->
sf_extension
+
(
fp
->
samples_per_frame
*
sizeof
(
int32_t
)
));
ru
->
common
.
txdata
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
(
ru
->
sf_extension
+
fp
->
samples_per_frame
)
*
sizeof
(
int32_t
));
LOG_I
(
PHY
,
"[INIT] common.txdata[%d] = %p (%lu bytes,sf_extension %d)
\n
"
,
i
,
ru
->
common
.
txdata
[
i
],
(
ru
->
sf_extension
+
fp
->
samples_per_frame
)
*
sizeof
(
int32_t
),
ru
->
sf_extension
);
ru
->
common
.
txdata
[
i
]
=
&
ru
->
common
.
txdata
[
i
][
ru
->
sf_extension
];
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
4d4f7dd6
...
...
@@ -1305,7 +1305,6 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
// look up the PDCCH PDU for this CC, BWP, and CORESET. If it does not exist, create it. This is especially
// important if we have multiple RAs, and the DLSCH has to reuse them, so we need to mark them
const
int
bwpid
=
bwp
?
bwp
->
bwp_Id
:
0
;
const
int
coresetid
=
coreset
->
controlResourceSetId
;
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
nr_mac
->
pdcch_pdu_idx
[
CC_id
][
coresetid
];
if
(
!
pdcch_pdu_rel15
)
{
...
...
@@ -1479,7 +1478,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
NR_DL_DCI_FORMAT_1_0
,
NR_RNTI_RA
,
BWPSize
,
bwp
id
,
ra
->
dl_bwp_
id
,
coresetid
,
nr_mac
->
cset0_bwp_size
);
...
...
@@ -1488,7 +1487,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
// Program UL processing for Msg3
NR_BWP_Uplink_t
*
ubwp
=
ra
->
CellGroup
?
ra
->
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
ra
->
d
l_bwp_id
-
1
]
:
ra
->
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
ra
->
u
l_bwp_id
-
1
]
:
NULL
;
nr_get_Msg3alloc
(
module_idP
,
CC_id
,
scc
,
ubwp
,
slotP
,
frameP
,
ra
,
nr_mac
->
tdd_beam_association
);
nr_add_msg3
(
module_idP
,
CC_id
,
frameP
,
slotP
,
ra
,
(
uint8_t
*
)
&
tx_req
->
TLVs
[
0
].
value
.
direct
[
0
]);
...
...
@@ -1764,7 +1763,6 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
// look up the PDCCH PDU for this CC, BWP, and CORESET. If it does not exist, create it. This is especially
// important if we have multiple RAs, and the DLSCH has to reuse them, so we need to mark them
const
int
bwpid
=
bwp
?
bwp
->
bwp_Id
:
0
;
const
int
coresetid
=
coreset
->
controlResourceSetId
;
nfapi_nr_dl_tti_pdcch_pdu_rel15_t
*
pdcch_pdu_rel15
=
nr_mac
->
pdcch_pdu_idx
[
CC_id
][
coresetid
];
if
(
!
pdcch_pdu_rel15
)
{
...
...
@@ -1895,7 +1893,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
NR_DL_DCI_FORMAT_1_0
,
NR_RNTI_TC
,
pdsch_pdu_rel15
->
BWPSize
,
bwp
id
,
ra
->
dl_bwp_
id
,
coresetid
,
nr_mac
->
cset0_bwp_size
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
4d4f7dd6
...
...
@@ -902,6 +902,7 @@ nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(module_id_t module_id, int CC_id) {
void
nr_schedule_ue_spec
(
module_id_t
module_id
,
frame_t
frame
,
sub_frame_t
slot
)
{
gNB_MAC_INST
*
gNB_mac
=
RC
.
nrmac
[
module_id
];
if
(
!
is_xlsch_in_slot
(
gNB_mac
->
dlsch_slot_bitmap
[
slot
/
64
],
slot
))
...
...
@@ -918,6 +919,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
UE_iterator
(
UE_info
->
list
,
UE
)
{
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
NR_UE_BWP_t
*
current_BWP
=
&
UE
->
current_BWP
;
if
(
sched_ctrl
->
ul_failure
==
1
&&
get_softmodem_params
()
->
phy_test
==
0
)
continue
;
...
...
@@ -1013,7 +1015,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
NR_SearchSpace_t
*
ss
=
(
bwp
||
bwpd
)
?
sched_ctrl
->
search_space
:
gNB_mac
->
sched_ctrlCommon
->
search_space
;
const
int
bwp_id
=
bwp
?
bwp
->
bwp_Id
:
0
;
const
int
bwp_id
=
current_BWP
->
dl_bwp_id
;
const
int
coresetid
=
(
bwp
||
bwpd
)
?
sched_ctrl
->
coreset
->
controlResourceSetId
:
gNB_mac
->
sched_ctrlCommon
->
coreset
->
controlResourceSetId
;
/* look up the PDCCH PDU for this CC, BWP, and CORESET. If it does not exist, create it */
...
...
@@ -1166,7 +1168,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
AssertFatal
(
n_dl_bwp
<=
NR_MAX_NUM_BWP
,
"downlinkBWP_ToAddModList has %d BWP!
\n
"
,
n_dl_bwp
);
// as per table 7.3.1.1.2-1 in 38.212
dci_payload
.
bwp_indicator
.
val
=
bwp
?
(
n_dl_bwp
<
4
?
bwp
->
bwp_Id
:
bwp
->
bwp_I
d
-
1
)
:
0
;
dci_payload
.
bwp_indicator
.
val
=
bwp
?
(
n_dl_bwp
<
4
?
bwp
_id
:
bwp_i
d
-
1
)
:
0
;
if
(
bwp
)
AssertFatal
(
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
resourceAllocation
==
NR_PDSCH_Config__resourceAllocation_resourceAllocationType1
,
"Only frequency resource allocation type 1 is currently supported
\n
"
);
...
...
@@ -1216,7 +1218,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
dci_format
,
rnti_type
,
pdsch_pdu
->
BWPSize
,
bwp
?
bwp
->
bwp_Id
:
0
,
bwp
_id
,
coresetid
,
gNB_mac
->
cset0_bwp_size
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
4d4f7dd6
...
...
@@ -1025,7 +1025,7 @@ void nr_configure_css_dci_initial(nfapi_nr_dl_tti_pdcch_pdu_rel15_t* pdcch_pdu,
void
config_uldci
(
const
NR_SIB1_t
*
sib1
,
const
NR_BWP_Uplink_t
*
ubwp
,
const
NR_BWP_UplinkDedicated_t
*
ubwpd
,
const
NR_BWP_UplinkDedicated_t
*
ubwpd
,
const
NR_ServingCellConfigCommon_t
*
scc
,
const
nfapi_nr_pusch_pdu_t
*
pusch_pdu
,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
...
...
@@ -1566,7 +1566,10 @@ void fill_dci_pdu_rel15(const NR_ServingCellConfigCommon_t *scc,
uint64_t
*
dci_pdu
=
(
uint64_t
*
)
pdcch_dci_pdu
->
Payload
;
*
dci_pdu
=
0
;
int
dci_size
=
nr_dci_size
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
,
scc
->
uplinkConfigCommon
->
initialUplinkBWP
,
CellGroup
,
dci_pdu_rel15
,
dci_format
,
rnti_type
,
N_RB
,
bwp_id
,
coreset_id
,
cset0_bwp_size
);
int
dci_size
=
nr_dci_size
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
,
scc
->
uplinkConfigCommon
->
initialUplinkBWP
,
CellGroup
,
dci_pdu_rel15
,
dci_format
,
rnti_type
,
N_RB
,
bwp_id
,
coreset_id
,
cset0_bwp_size
);
pdcch_dci_pdu
->
PayloadSizeBits
=
dci_size
;
AssertFatal
(
dci_size
<=
64
,
"DCI sizes above 64 bits not yet supported"
);
if
(
dci_format
==
NR_DL_DCI_FORMAT_1_1
||
dci_format
==
NR_UL_DCI_FORMAT_0_1
)
...
...
@@ -2332,24 +2335,6 @@ int get_nrofHARQ_ProcessesForPDSCH(e_NR_PDSCH_ServingCellConfig__nrofHARQ_Proces
}
}
int
get_dl_bwp_id
(
const
NR_ServingCellConfig_t
*
servingCellConfig
)
{
if
(
servingCellConfig
->
firstActiveDownlinkBWP_Id
)
return
*
servingCellConfig
->
firstActiveDownlinkBWP_Id
;
else
if
(
servingCellConfig
->
defaultDownlinkBWP_Id
)
return
*
servingCellConfig
->
defaultDownlinkBWP_Id
;
else
return
1
;
}
int
get_ul_bwp_id
(
const
NR_ServingCellConfig_t
*
servingCellConfig
)
{
if
(
servingCellConfig
->
uplinkConfig
&&
servingCellConfig
->
uplinkConfig
->
firstActiveUplinkBWP_Id
)
return
*
servingCellConfig
->
uplinkConfig
->
firstActiveUplinkBWP_Id
;
else
return
1
;
}
/* hack data to remove UE in the phy */
int
rnti_to_remove
[
10
];
volatile
int
rnti_to_remove_count
;
...
...
@@ -2393,6 +2378,25 @@ void delete_nr_ue_data(NR_UE_info_t *UE, NR_COMMON_channels_t *ccPtr)
}
}
void
configure_UE_BWP
(
NR_UE_BWP_t
*
BWP
,
NR_CellGroupConfig_t
*
CellGroup
)
{
if
(
CellGroup
&&
CellGroup
->
spCellConfig
&&
CellGroup
->
spCellConfig
->
spCellConfigDedicated
)
{
const
NR_ServingCellConfig_t
*
servingCellConfig
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
;
// (re)configuring BWP ID
// TODO BWP switching not via RRC reconfiguration
// via RRC if firstActiveXlinkBWP_Id is NULL, MAC stays on the same BWP as before
if
(
servingCellConfig
->
firstActiveDownlinkBWP_Id
)
{
BWP
->
dl_bwp_id
=
*
servingCellConfig
->
firstActiveDownlinkBWP_Id
;
BWP
->
ul_bwp_id
=
*
servingCellConfig
->
firstActiveDownlinkBWP_Id
;
}
if
(
servingCellConfig
->
uplinkConfig
->
firstActiveUplinkBWP_Id
)
BWP
->
ul_bwp_id
=
*
servingCellConfig
->
uplinkConfig
->
firstActiveUplinkBWP_Id
;
}
}
//------------------------------------------------------------------------------
NR_UE_info_t
*
add_new_nr_ue
(
gNB_MAC_INST
*
nr_mac
,
rnti_t
rntiP
,
NR_CellGroupConfig_t
*
CellGroup
)
{
...
...
@@ -2423,84 +2427,90 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
&&
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
)
compute_csi_bitlen
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
,
UE
);
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
memset
(
sched_ctrl
,
0
,
sizeof
(
*
sched_ctrl
));
sched_ctrl
->
dl_max_mcs
=
28
;
/* do not limit MCS for individual UEs */
sched_ctrl
->
set_pmi
=
false
;
sched_ctrl
->
ta_frame
=
0
;
sched_ctrl
->
ta_update
=
31
;
sched_ctrl
->
ta_apply
=
false
;
sched_ctrl
->
ul_rssi
=
0
;
sched_ctrl
->
pucch_consecutive_dtx_cnt
=
0
;
sched_ctrl
->
pusch_consecutive_dtx_cnt
=
0
;
sched_ctrl
->
ul_failure
=
0
;
sched_ctrl
->
sched_srs
.
frame
=
-
1
;
sched_ctrl
->
sched_srs
.
slot
=
-
1
;
sched_ctrl
->
sched_srs
.
srs_scheduled
=
false
;
/* set illegal time domain allocation to force recomputation of all fields */
sched_ctrl
->
pdsch_semi_static
.
time_domain_allocation
=
-
1
;
sched_ctrl
->
pusch_semi_static
.
time_domain_allocation
=
-
1
;
const
NR_ServingCellConfig_t
*
servingCellConfig
=
CellGroup
&&
CellGroup
->
spCellConfig
?
CellGroup
->
spCellConfig
->
spCellConfigDedicated
:
NULL
;
memset
(
sched_ctrl
,
0
,
sizeof
(
*
sched_ctrl
));
sched_ctrl
->
dl_max_mcs
=
28
;
/* do not limit MCS for individual UEs */
sched_ctrl
->
set_pmi
=
false
;
sched_ctrl
->
ta_frame
=
0
;
sched_ctrl
->
ta_update
=
31
;
sched_ctrl
->
ta_apply
=
false
;
sched_ctrl
->
ul_rssi
=
0
;
sched_ctrl
->
pucch_consecutive_dtx_cnt
=
0
;
sched_ctrl
->
pusch_consecutive_dtx_cnt
=
0
;
sched_ctrl
->
ul_failure
=
0
;
sched_ctrl
->
sched_srs
.
frame
=
-
1
;
sched_ctrl
->
sched_srs
.
slot
=
-
1
;
sched_ctrl
->
sched_srs
.
srs_scheduled
=
false
;
// initialize UE BWP information
NR_UE_BWP_t
*
BWP
=
&
UE
->
current_BWP
;
memset
(
BWP
,
0
,
sizeof
(
*
BWP
));
configure_UE_BWP
(
BWP
,
CellGroup
);
/* set illegal time domain allocation to force recomputation of all fields */
sched_ctrl
->
pdsch_semi_static
.
time_domain_allocation
=
-
1
;
sched_ctrl
->
pusch_semi_static
.
time_domain_allocation
=
-
1
;
const
NR_ServingCellConfig_t
*
servingCellConfig
=
CellGroup
&&
CellGroup
->
spCellConfig
?
CellGroup
->
spCellConfig
->
spCellConfigDedicated
:
NULL
;
/* Set default BWPs */
const
struct
NR_ServingCellConfig__downlinkBWP_ToAddModList
*
bwpList
=
servingCellConfig
?
servingCellConfig
->
downlinkBWP_ToAddModList
:
NULL
;
const
int
bwp_id
=
servingCellConfig
?
*
servingCellConfig
->
firstActiveDownlinkBWP_Id
:
0
;
sched_ctrl
->
active_bwp
=
bwpList
&&
bwp_id
>
0
?
bwpList
->
list
.
array
[
bwp_id
-
1
]
:
NULL
;
NR_BWP_t
*
genericParameters
=
sched_ctrl
->
active_bwp
?
&
sched_ctrl
->
active_bwp
->
bwp_Common
->
genericParameters
:
&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
;
const
int
target_ss
=
sched_ctrl
->
active_bwp
?
NR_SearchSpace__searchSpaceType_PR_ue_Specific
:
NR_SearchSpace__searchSpaceType_PR_common
;
const
NR_SIB1_t
*
sib1
=
nr_mac
->
common_channels
[
0
].
sib1
?
nr_mac
->
common_channels
[
0
].
sib1
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
:
NULL
;
sched_ctrl
->
search_space
=
get_searchspace
(
sib1
,
scc
,
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Dedicated
:
NULL
,
target_ss
);
sched_ctrl
->
active_bwp
=
bwpList
&&
BWP
->
dl_bwp_id
>
0
?
bwpList
->
list
.
array
[
BWP
->
dl_bwp_id
-
1
]
:
NULL
;
NR_BWP_t
*
genericParameters
=
sched_ctrl
->
active_bwp
?
&
sched_ctrl
->
active_bwp
->
bwp_Common
->
genericParameters
:
&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
;
const
int
target_ss
=
sched_ctrl
->
active_bwp
?
NR_SearchSpace__searchSpaceType_PR_ue_Specific
:
NR_SearchSpace__searchSpaceType_PR_common
;
const
NR_SIB1_t
*
sib1
=
nr_mac
->
common_channels
[
0
].
sib1
?
nr_mac
->
common_channels
[
0
].
sib1
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
:
NULL
;
sched_ctrl
->
search_space
=
get_searchspace
(
sib1
,
scc
,
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Dedicated
:
NULL
,
target_ss
);
sched_ctrl
->
coreset
=
get_coreset
(
nr_mac
,
scc
,
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Dedicated
:
NULL
,
sched_ctrl
->
search_space
,
sched_ctrl
->
search_space
,
target_ss
);
sched_ctrl
->
sched_pdcch
=
set_pdcch_structure
(
nr_mac
,
sched_ctrl
->
search_space
,
sched_ctrl
->
coreset
,
scc
,
genericParameters
,
NULL
);
sched_ctrl
->
next_dl_bwp_id
=
-
1
;
sched_ctrl
->
next_ul_bwp_id
=
-
1
;
const
struct
NR_UplinkConfig__uplinkBWP_ToAddModList
*
ubwpList
=
servingCellConfig
?
servingCellConfig
->
uplinkConfig
->
uplinkBWP_ToAddModList
:
NULL
;
sched_ctrl
->
sched_pdcch
=
set_pdcch_structure
(
nr_mac
,
sched_ctrl
->
search_space
,
sched_ctrl
->
coreset
,
scc
,
genericParameters
,
NULL
);
sched_ctrl
->
next_dl_bwp_id
=
-
1
;
sched_ctrl
->
next_ul_bwp_id
=
-
1
;
const
struct
NR_UplinkConfig__uplinkBWP_ToAddModList
*
ubwpList
=
servingCellConfig
?
servingCellConfig
->
uplinkConfig
->
uplinkBWP_ToAddModList
:
NULL
;
if
(
ubwpList
)
AssertFatal
(
ubwpList
->
list
.
count
<=
NR_MAX_NUM_BWP
,
"uplinkBWP_ToAddModList has %d BWP!
\n
"
,
ubwpList
->
list
.
count
);
const
int
ul_bwp_id
=
servingCellConfig
?
*
servingCellConfig
->
uplinkConfig
->
firstActiveUplinkBWP_Id
:
0
;
sched_ctrl
->
active_ubwp
=
ubwpList
&&
ul_bwp_id
>
0
?
ubwpList
->
list
.
array
[
ul_bwp_id
-
1
]
:
NULL
;
"uplinkBWP_ToAddModList has %d BWP!
\n
"
,
ubwpList
->
list
.
count
);
/* get Number of HARQ processes for this UE */
sched_ctrl
->
active_ubwp
=
ubwpList
&&
BWP
->
ul_bwp_id
>
0
?
ubwpList
->
list
.
array
[
BWP
->
ul_bwp_id
-
1
]
:
NULL
;
/* get Number of HARQ processes for this UE */
if
(
servingCellConfig
)
AssertFatal
(
servingCellConfig
->
pdsch_ServingCellConfig
->
present
==
NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup
,
"no pdsch-ServingCellConfig found for UE %04x
\n
"
,
UE
->
rnti
);
const
NR_PDSCH_ServingCellConfig_t
*
pdsch
=
servingCellConfig
?
servingCellConfig
->
pdsch_ServingCellConfig
->
choice
.
setup
:
NULL
;
// pdsch == NULL in SA -> will create default (8) number of HARQ processes
create_dl_harq_list
(
sched_ctrl
,
pdsch
);
// add all available UL HARQ processes for this UE
// nb of ul harq processes not configurable
create_nr_list
(
&
sched_ctrl
->
available_ul_harq
,
16
);
for
(
int
harq
=
0
;
harq
<
16
;
harq
++
)
add_tail_nr_list
(
&
sched_ctrl
->
available_ul_harq
,
harq
);
create_nr_list
(
&
sched_ctrl
->
feedback_ul_harq
,
16
);
create_nr_list
(
&
sched_ctrl
->
retrans_ul_harq
,
16
);
const
NR_PDSCH_ServingCellConfig_t
*
pdsch
=
servingCellConfig
?
servingCellConfig
->
pdsch_ServingCellConfig
->
choice
.
setup
:
NULL
;
// pdsch == NULL in SA -> will create default (8) number of HARQ processes
create_dl_harq_list
(
sched_ctrl
,
pdsch
);
// add all available UL HARQ processes for this UE
// nb of ul harq processes not configurable
create_nr_list
(
&
sched_ctrl
->
available_ul_harq
,
16
);
for
(
int
harq
=
0
;
harq
<
16
;
harq
++
)
add_tail_nr_list
(
&
sched_ctrl
->
available_ul_harq
,
harq
);
create_nr_list
(
&
sched_ctrl
->
feedback_ul_harq
,
16
);
create_nr_list
(
&
sched_ctrl
->
retrans_ul_harq
,
16
);
pthread_mutex_lock
(
&
UE_info
->
mutex
);
int
i
;
for
(
i
=
0
;
i
<
MAX_MOBILES_PER_GNB
;
i
++
)
for
(
i
=
0
;
i
<
MAX_MOBILES_PER_GNB
;
i
++
)
{
if
(
UE_info
->
list
[
i
]
==
NULL
)
{
UE_info
->
list
[
i
]
=
UE
;
break
;
}
}
if
(
i
==
MAX_MOBILES_PER_GNB
)
{
LOG_E
(
NR_MAC
,
"Try to add UE %04x but the list is full
\n
"
,
rntiP
);
delete_nr_ue_data
(
UE
,
nr_mac
->
common_channels
);
...
...
@@ -2593,8 +2603,7 @@ uint8_t nr_get_tpc(int target, uint8_t cqi, int incr) {
}
void
get_pdsch_to_harq_feedback
(
NR_UE_info_t
*
UE
,
int
bwp_id
,
void
get_pdsch_to_harq_feedback
(
NR_UE_info_t
*
UE
,
NR_SearchSpace__searchSpaceType_PR
ss_type
,
int
*
max_fb_time
,
uint8_t
*
pdsch_to_harq_feedback
)
{
...
...
@@ -2602,26 +2611,28 @@ void get_pdsch_to_harq_feedback( NR_UE_info_t * UE,
NR_CellGroupConfig_t
*
CellGroup
=
UE
->
CellGroup
;
NR_BWP_DownlinkDedicated_t
*
bwpd
=
NULL
;
NR_BWP_UplinkDedicated_t
*
ubwpd
=
NULL
;
int
dl_bwp_id
=
UE
->
current_BWP
.
dl_bwp_id
;
int
ul_bwp_id
=
UE
->
current_BWP
.
ul_bwp_id
;
if
(
ss_type
==
NR_SearchSpace__searchSpaceType_PR_ue_Specific
)
{
AssertFatal
(
CellGroup
!=
NULL
,
"Cellgroup is not defined for UE %04x
\n
"
,
UE
->
rnti
);
AssertFatal
(
CellGroup
->
spCellConfig
!=
NULL
,
"Cellgroup->spCellConfig is null
\n
"
);
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
!=
NULL
,
"CellGroup->spCellConfig->spCellConfigDedicated is null
\n
"
);
}
if
(
bwp_id
>
0
)
{
if
(
dl_bwp_id
>
0
&&
ul_
bwp_id
>
0
)
{
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
!=
NULL
,
"CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList is null
\n
"
);
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
!=
NULL
,
"CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList is null
\n
"
);
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
count
>=
bwp_id
,
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
count
>=
dl_
bwp_id
,
"CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count %d < bwp_id %d
\n
"
,
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
count
,
bwp_id
);
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
>=
bwp_id
,
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
count
,
dl_
bwp_id
);
AssertFatal
(
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
>=
ul_
bwp_id
,
"CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count %d < bwp_id %d
\n
"
,
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
,
bwp_id
);
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
,
ul_
bwp_id
);
bwpd
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
array
[
bwp_id
-
1
]
->
bwp_Dedicated
;
ubwpd
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_id
-
1
]
->
bwp_Dedicated
;
bwpd
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
array
[
dl_
bwp_id
-
1
]
->
bwp_Dedicated
;
ubwpd
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
ul_
bwp_id
-
1
]
->
bwp_Dedicated
;
}
else
if
(
CellGroup
&&
CellGroup
->
spCellConfig
&&
CellGroup
->
spCellConfig
->
spCellConfigDedicated
)
{
// this is an initialBWP
AssertFatal
((
bwpd
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
initialDownlinkBWP
)
!=
NULL
,
...
...
@@ -2915,23 +2926,26 @@ void nr_mac_update_timers(module_id_t module_id,
NR_ServingCellConfigCommon_t
*
scc
=
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
ServingCellConfigCommon
;
const
NR_ServingCellConfig_t
*
spCellConfigDedicated
=
cg
&&
cg
->
spCellConfig
?
cg
->
spCellConfig
->
spCellConfigDedicated
:
NULL
;
// re-configure BWP information
NR_UE_BWP_t
*
BWP
=
&
UE
->
current_BWP
;
// If needed, update the Dedicated BWP
const
int
current_bwp_id
=
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Id
:
0
;
const
int
current_ubwp_id
=
sched_ctrl
->
active_ubwp
?
sched_ctrl
->
active_ubwp
->
bwp_Id
:
0
;
if
(
spCellConfigDedicated
&&
spCellConfigDedicated
->
downlinkBWP_ToAddModList
&&
spCellConfigDedicated
->
uplinkConfig
&&
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
)
{
if
(
*
spCellConfigDedicated
->
firstActiveDownlinkBWP_Id
!=
current
_bwp_id
)
{
if
(
*
spCellConfigDedicated
->
firstActiveDownlinkBWP_Id
!=
BWP
->
dl
_bwp_id
)
{
sched_ctrl
->
active_bwp
=
spCellConfigDedicated
->
downlinkBWP_ToAddModList
->
list
.
array
[
*
spCellConfigDedicated
->
firstActiveDownlinkBWP_Id
-
1
];
LOG_I
(
NR_MAC
,
"Changing to DL-BWP %li
\n
"
,
sched_ctrl
->
active_bwp
->
bwp_Id
);
}
if
(
*
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
!=
current_u
bwp_id
)
{
if
(
*
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
!=
BWP
->
ul_
bwp_id
)
{
sched_ctrl
->
active_ubwp
=
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
*
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
-
1
];
LOG_I
(
NR_MAC
,
"Changing to UL-BWP %li
\n
"
,
sched_ctrl
->
active_ubwp
->
bwp_Id
);
}
}
configure_UE_BWP
(
BWP
,
UE
->
CellGroup
);
NR_BWP_Downlink_t
*
bwp
=
sched_ctrl
->
active_bwp
;
NR_BWP_DownlinkDedicated_t
*
bwpd
=
cg
&&
cg
->
spCellConfig
&&
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
4d4f7dd6
...
...
@@ -938,13 +938,12 @@ void tci_handling(NR_UE_info_t *UE, frame_t frame, slot_t slot) {
uint8_t
target_ssb_beam_index
=
curr_ssb_beam_index
;
uint8_t
is_triggering_ssb_beam_switch
=
0
;
uint8_t
ssb_idx
=
0
;
int
pdsch_bwp_id
=
0
;
int
pdsch_bwp_id
=
0
;
int
ssb_index
[
MAX_NUM_SSB
]
=
{
0
};
int
ssb_rsrp
[
MAX_NUM_SSB
]
=
{
0
};
uint8_t
idx
=
0
;
NR_UE_BWP_t
*
BWP
=
&
UE
->
current_BWP
;
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
const
int
bwp_id
=
sched_ctrl
->
active_bwp
?
1
:
0
;
NR_CellGroupConfig_t
*
CellGroup
=
UE
->
CellGroup
;
//bwp indicator
...
...
@@ -960,6 +959,7 @@ void tci_handling(NR_UE_info_t *UE, frame_t frame, slot_t slot) {
uint8_t
diff_rsrp_idx
=
0
;
uint8_t
i
,
j
;
const
int
bwp_id
=
BWP
->
dl_bwp_id
;
if
(
n_dl_bwp
<
4
)
pdsch_bwp_id
=
bwp_id
;
else
...
...
@@ -1632,6 +1632,7 @@ int nr_acknack_scheduling(int mod_id,
* * each UE has dedicated PUCCH Format 0 resources, and we use index 0! */
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
NR_CellGroupConfig_t
*
cg
=
UE
->
CellGroup
;
NR_UE_BWP_t
*
BWP
=
&
UE
->
current_BWP
;
NR_PUCCH_Config_t
*
pucch_Config
=
NULL
;
if
(
sched_ctrl
->
active_ubwp
)
{
...
...
@@ -1714,10 +1715,9 @@ int nr_acknack_scheduling(int mod_id,
NR_SearchSpace__searchSpaceType_PR
ss_type
=
(
is_common
==
0
&&
(
sched_ctrl
->
active_bwp
||
ubwpd
))
?
NR_SearchSpace__searchSpaceType_PR_ue_Specific
:
NR_SearchSpace__searchSpaceType_PR_common
;
uint8_t
pdsch_to_harq_feedback
[
8
];
const
int
bwp_id
=
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Id
:
0
;
int
max_fb_time
=
0
;
get_pdsch_to_harq_feedback
(
UE
,
bwp_id
,
ss_type
,
&
max_fb_time
,
pdsch_to_harq_feedback
);
get_pdsch_to_harq_feedback
(
UE
,
ss_type
,
&
max_fb_time
,
pdsch_to_harq_feedback
);
LOG_D
(
NR_MAC
,
"In %s: 1b. DL %4d.%2d, UL_ACK %4d.%2d, DAI_C %d
\n
"
,
__FUNCTION__
,
frame
,
slot
,
pucch
->
frame
,
pucch
->
ul_slot
,
pucch
->
dai_c
);
/* there is a HARQ. Check whether we can use it for this ACKNACK */
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
4d4f7dd6
...
...
@@ -1526,6 +1526,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
if
(
sched_ctrl
->
ul_failure
==
1
&&
get_softmodem_params
()
->
phy_test
==
0
)
continue
;
NR_CellGroupConfig_t
*
cg
=
UE
->
CellGroup
;
NR_UE_BWP_t
*
current_BWP
=
&
UE
->
current_BWP
;
NR_BWP_UplinkDedicated_t
*
ubwpd
=
cg
&&
cg
->
spCellConfig
&&
cg
->
spCellConfig
->
spCellConfigDedicated
&&
cg
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
?
...
...
@@ -1765,7 +1766,6 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
/* look up the PDCCH PDU for this BWP and CORESET. If it does not exist,
* create it */
const
int
bwp_id
=
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Id
:
0
;
NR_SearchSpace_t
*
ss
=
(
sched_ctrl
->
active_bwp
||
ubwpd
)
?
sched_ctrl
->
search_space
:
RC
.
nrmac
[
module_id
]
->
sched_ctrlCommon
->
search_space
;
NR_ControlResourceSet_t
*
coreset
=
(
sched_ctrl
->
active_bwp
||
ubwpd
)
?
sched_ctrl
->
coreset
:
RC
.
nrmac
[
module_id
]
->
sched_ctrlCommon
->
coreset
;
const
int
coresetid
=
coreset
->
controlResourceSetId
;
...
...
@@ -1821,7 +1821,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
ps
->
time_domain_allocation
,
UE
->
UE_sched_ctrl
.
tpc0
,
n_ubwp
,
bwp_id
);
current_BWP
->
ul_
bwp_id
);
fill_dci_pdu_rel15
(
scc
,
cg
,
dci_pdu
,
...
...
@@ -1829,7 +1829,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
ps
->
dci_format
,
rnti_types
[
0
],
pusch_pdu
->
bwp_size
,
bwp_id
,
current_BWP
->
ul_
bwp_id
,
coresetid
,
nr_mac
->
cset0_bwp_size
);
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
4d4f7dd6
...
...
@@ -225,8 +225,7 @@ int nr_acknack_scheduling( int Mod_idP,
int
r_pucch
,
int
do_common
);
void
get_pdsch_to_harq_feedback
(
NR_UE_info_t
*
,
int
bwp_id
,
void
get_pdsch_to_harq_feedback
(
NR_UE_info_t
*
UE
,
NR_SearchSpace__searchSpaceType_PR
ss_type
,
int
*
max_fb_time
,
uint8_t
*
pdsch_to_harq_feedback
);
...
...
@@ -406,7 +405,9 @@ NR_UE_info_t * find_nr_UE(NR_UEs_t* UEs, rnti_t rntiP);
int
find_nr_RA_id
(
module_id_t
mod_idP
,
int
CC_idP
,
rnti_t
rntiP
);
NR_UE_info_t
*
add_new_nr_ue
(
gNB_MAC_INST
*
nr_mac
,
rnti_t
rntiP
,
NR_CellGroupConfig_t
*
CellGroup
);
void
configure_UE_BWP
(
NR_UE_BWP_t
*
BWP
,
NR_CellGroupConfig_t
*
CellGroup
);
NR_UE_info_t
*
add_new_nr_ue
(
gNB_MAC_INST
*
nr_mac
,
rnti_t
rntiP
,
NR_CellGroupConfig_t
*
CellGroup
);
void
mac_remove_nr_ue
(
gNB_MAC_INST
*
nr_mac
,
rnti_t
rnti
);
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
4d4f7dd6
...
...
@@ -701,6 +701,11 @@ typedef struct NR_bler_options {
uint8_t
max_mcs
;
}
NR_bler_options_t
;
typedef
struct
NR_UE_BWP
{
NR_BWP_Id_t
dl_bwp_id
;
NR_BWP_Id_t
ul_bwp_id
;
}
NR_UE_BWP_t
;
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
#define MAX_CSI_REPORTCONFIG 48
typedef
struct
{
...
...
@@ -708,6 +713,7 @@ typedef struct {
/// scheduling control info
nr_csi_report_t
csi_report_template
[
MAX_CSI_REPORTCONFIG
];
NR_UE_sched_ctrl_t
UE_sched_ctrl
;
NR_UE_BWP_t
current_BWP
;
NR_mac_stats_t
mac_stats
;
NR_CellGroupConfig_t
*
CellGroup
;
char
cg_buf
[
32768
];
/* arbitrary size */
...
...
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