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
Michael Black
OpenXG-RAN
Commits
395ca4b4
Commit
395ca4b4
authored
Mar 27, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor update_cellGroupConfig()
parent
44d5b378
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
130 additions
and
131 deletions
+130
-131
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+0
-126
openair2/RRC/NR/MESSAGES/asn1_msg.h
openair2/RRC/NR/MESSAGES/asn1_msg.h
+0
-5
openair2/RRC/NR/nr_rrc_config.c
openair2/RRC/NR/nr_rrc_config.c
+126
-0
openair2/RRC/NR/nr_rrc_config.h
openair2/RRC/NR/nr_rrc_config.h
+4
-0
No files found.
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
395ca4b4
...
...
@@ -391,132 +391,6 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGr
}
}
//TODO temp function (to remove once CSI meas config harmonization is done)
void
update_cqitables
(
struct
NR_SetupRelease_PDSCH_Config
*
pdsch_Config
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
)
{
int
nb_csi
=
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
count
;
for
(
int
i
=
0
;
i
<
nb_csi
;
i
++
)
{
NR_CSI_ReportConfig_t
*
csirep
=
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
array
[
i
];
if
(
csirep
->
cqi_Table
)
{
if
(
pdsch_Config
->
choice
.
setup
->
mcs_Table
!=
NULL
)
*
csirep
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table2
;
else
*
csirep
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table1
;
}
}
}
void
update_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
,
const
int
uid
,
NR_UE_NR_Capability_t
*
uecap
,
const
gNB_RrcConfigurationReq
*
configuration
)
{
NR_SpCellConfig_t
*
SpCellConfig
=
cellGroupConfig
->
spCellConfig
;
if
(
SpCellConfig
==
NULL
)
return
;
NR_ServingCellConfigCommon_t
*
scc
=
configuration
?
configuration
->
scc
:
NULL
;
if
(
scc
)
{
int
curr_bwp
=
NRRIV2BW
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
NR_UplinkConfig_t
*
uplinkConfig
=
SpCellConfig
&&
SpCellConfig
->
spCellConfigDedicated
?
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
:
NULL
;
uint8_t
ul_max_layers
=
1
;
if
(
uecap
&&
uecap
->
featureSets
&&
uecap
->
featureSets
->
featureSetsUplinkPerCC
&&
uecap
->
featureSets
->
featureSetsUplinkPerCC
->
list
.
count
>
0
)
{
NR_FeatureSetUplinkPerCC_t
*
ul_feature_setup_per_cc
=
uecap
->
featureSets
->
featureSetsUplinkPerCC
->
list
.
array
[
0
];
if
(
ul_feature_setup_per_cc
->
mimo_CB_PUSCH
->
maxNumberMIMO_LayersCB_PUSCH
)
{
switch
(
*
ul_feature_setup_per_cc
->
mimo_CB_PUSCH
->
maxNumberMIMO_LayersCB_PUSCH
)
{
case
NR_MIMO_LayersUL_twoLayers
:
ul_max_layers
=
2
;
break
;
case
NR_MIMO_LayersUL_fourLayers
:
ul_max_layers
=
4
;
break
;
default:
ul_max_layers
=
1
;
}
}
ul_max_layers
=
min
(
ul_max_layers
,
configuration
->
pusch_AntennaPorts
);
if
(
uplinkConfig
->
initialUplinkBWP
->
pusch_Config
)
{
NR_PUSCH_Config_t
*
pusch_Config
=
uplinkConfig
->
initialUplinkBWP
->
pusch_Config
->
choice
.
setup
;
if
(
pusch_Config
->
maxRank
==
NULL
)
{
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
}
*
pusch_Config
->
maxRank
=
ul_max_layers
;
}
if
(
uplinkConfig
->
pusch_ServingCellConfig
==
NULL
)
{
uplinkConfig
->
pusch_ServingCellConfig
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
));
uplinkConfig
->
pusch_ServingCellConfig
->
present
=
NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup
;
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
));
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
));
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
));
}
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
=
ul_max_layers
;
}
long
maxMIMO_Layers
=
uplinkConfig
&&
uplinkConfig
->
pusch_ServingCellConfig
&&
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
&&
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
?
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
:
1
;
// UL and SRS configuration
if
(
configuration
->
do_SRS
&&
uplinkConfig
&&
uplinkConfig
->
initialUplinkBWP
)
{
if
(
!
uplinkConfig
->
initialUplinkBWP
->
srs_Config
)
{
uplinkConfig
->
initialUplinkBWP
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
initialUplinkBWP
->
srs_Config
));
}
config_srs
(
scc
,
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
initialUplinkBWP
->
srs_Config
,
uecap
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
}
// Set DL MCS table
NR_BWP_DownlinkDedicated_t
*
bwp_Dedicated
=
SpCellConfig
->
spCellConfigDedicated
->
initialDownlinkBWP
;
set_dl_mcs_table
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
,
configuration
->
force_256qam_off
?
NULL
:
uecap
,
bwp_Dedicated
,
scc
);
struct
NR_ServingCellConfig__downlinkBWP_ToAddModList
*
DL_BWP_list
=
SpCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
;
struct
NR_UplinkConfig__uplinkBWP_ToAddModList
*
UL_BWP_list
=
uplinkConfig
->
uplinkBWP_ToAddModList
;
if
(
DL_BWP_list
)
{
for
(
int
i
=
0
;
i
<
DL_BWP_list
->
list
.
count
;
i
++
){
NR_BWP_Downlink_t
*
bwp
=
DL_BWP_list
->
list
.
array
[
i
];
int
scs
=
bwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
set_dl_mcs_table
(
scs
,
configuration
->
force_256qam_off
?
NULL
:
uecap
,
bwp
->
bwp_Dedicated
,
scc
);
}
}
if
(
configuration
->
do_SRS
&&
UL_BWP_list
)
{
for
(
int
i
=
0
;
i
<
UL_BWP_list
->
list
.
count
;
i
++
)
{
NR_BWP_Uplink_t
*
ul_bwp
=
UL_BWP_list
->
list
.
array
[
i
];
int
bwp_size
=
NRRIV2BW
(
ul_bwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
if
(
ul_bwp
->
bwp_Dedicated
->
pusch_Config
)
{
NR_PUSCH_Config_t
*
pusch_Config
=
ul_bwp
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
;
if
(
pusch_Config
->
maxRank
==
NULL
)
{
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
}
*
pusch_Config
->
maxRank
=
ul_max_layers
;
}
config_srs
(
scc
,
ul_bwp
->
bwp_Dedicated
->
srs_Config
,
uecap
,
bwp_size
,
uid
,
i
+
1
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
}
}
update_cqitables
(
bwp_Dedicated
->
pdsch_Config
,
SpCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
);
}
}
//------------------------------------------------------------------------------
int
do_RRCSetup
(
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
uint8_t
*
const
buffer
,
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.h
View file @
395ca4b4
...
...
@@ -69,11 +69,6 @@ NR_RLC_BearerConfig_t *get_SRB_RLC_BearerConfig(
long
priority
,
e_NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration
bucketSizeDuration
);
void
update_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
,
const
int
uid
,
NR_UE_NR_Capability_t
*
uecap
,
const
gNB_RrcConfigurationReq
*
configuration
);
void
fill_mastercellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
,
NR_CellGroupConfig_t
*
ue_context_mastercellGroup
,
int
use_rlc_um_for_drb
,
...
...
openair2/RRC/NR/nr_rrc_config.c
View file @
395ca4b4
...
...
@@ -1578,6 +1578,20 @@ void config_rsrp_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
asn1cSeqAdd
(
&
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
,
csirep
);
}
static
void
update_cqitables
(
struct
NR_SetupRelease_PDSCH_Config
*
pdsch_Config
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
)
{
int
nb_csi
=
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
count
;
for
(
int
i
=
0
;
i
<
nb_csi
;
i
++
)
{
NR_CSI_ReportConfig_t
*
csirep
=
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
array
[
i
];
if
(
csirep
->
cqi_Table
)
{
if
(
pdsch_Config
->
choice
.
setup
->
mcs_Table
!=
NULL
)
*
csirep
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table2
;
else
*
csirep
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table1
;
}
}
}
NR_BCCH_BCH_Message_t
*
get_new_MIB_NR
(
const
NR_ServingCellConfigCommon_t
*
scc
)
{
NR_BCCH_BCH_Message_t
*
mib
=
calloc
(
1
,
sizeof
(
*
mib
));
...
...
@@ -2281,6 +2295,118 @@ NR_CellGroupConfig_t *get_initial_cellGroupConfig(int uid,
return
cellGroupConfig
;
}
void
update_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
,
const
int
uid
,
NR_UE_NR_Capability_t
*
uecap
,
const
gNB_RrcConfigurationReq
*
configuration
)
{
DevAssert
(
cellGroupConfig
!=
NULL
);
/* this is wrong: we should not call this function is spCellConfig is not
* allocated */
if
(
cellGroupConfig
->
spCellConfig
==
NULL
)
return
;
/* same as for spCellConfig */
if
(
configuration
==
NULL
)
return
;
DevAssert
(
configuration
->
scc
!=
NULL
);
NR_SpCellConfig_t
*
SpCellConfig
=
cellGroupConfig
->
spCellConfig
;
NR_ServingCellConfigCommon_t
*
scc
=
configuration
->
scc
;
int
curr_bwp
=
NRRIV2BW
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
NR_UplinkConfig_t
*
uplinkConfig
=
SpCellConfig
&&
SpCellConfig
->
spCellConfigDedicated
?
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
:
NULL
;
uint8_t
ul_max_layers
=
1
;
if
(
uecap
&&
uecap
->
featureSets
&&
uecap
->
featureSets
->
featureSetsUplinkPerCC
&&
uecap
->
featureSets
->
featureSetsUplinkPerCC
->
list
.
count
>
0
)
{
NR_FeatureSetUplinkPerCC_t
*
ul_feature_setup_per_cc
=
uecap
->
featureSets
->
featureSetsUplinkPerCC
->
list
.
array
[
0
];
if
(
ul_feature_setup_per_cc
->
mimo_CB_PUSCH
->
maxNumberMIMO_LayersCB_PUSCH
)
{
switch
(
*
ul_feature_setup_per_cc
->
mimo_CB_PUSCH
->
maxNumberMIMO_LayersCB_PUSCH
)
{
case
NR_MIMO_LayersUL_twoLayers
:
ul_max_layers
=
2
;
break
;
case
NR_MIMO_LayersUL_fourLayers
:
ul_max_layers
=
4
;
break
;
default:
ul_max_layers
=
1
;
}
}
ul_max_layers
=
min
(
ul_max_layers
,
configuration
->
pusch_AntennaPorts
);
if
(
uplinkConfig
->
initialUplinkBWP
->
pusch_Config
)
{
NR_PUSCH_Config_t
*
pusch_Config
=
uplinkConfig
->
initialUplinkBWP
->
pusch_Config
->
choice
.
setup
;
if
(
pusch_Config
->
maxRank
==
NULL
)
{
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
}
*
pusch_Config
->
maxRank
=
ul_max_layers
;
}
if
(
uplinkConfig
->
pusch_ServingCellConfig
==
NULL
)
{
uplinkConfig
->
pusch_ServingCellConfig
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
));
uplinkConfig
->
pusch_ServingCellConfig
->
present
=
NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup
;
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
));
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
));
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
));
}
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
=
ul_max_layers
;
}
long
maxMIMO_Layers
=
uplinkConfig
&&
uplinkConfig
->
pusch_ServingCellConfig
&&
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
&&
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
?
*
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
->
ext1
->
maxMIMO_Layers
:
1
;
// UL and SRS configuration
if
(
configuration
->
do_SRS
&&
uplinkConfig
&&
uplinkConfig
->
initialUplinkBWP
)
{
if
(
!
uplinkConfig
->
initialUplinkBWP
->
srs_Config
)
{
uplinkConfig
->
initialUplinkBWP
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
uplinkConfig
->
initialUplinkBWP
->
srs_Config
));
}
config_srs
(
scc
,
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
initialUplinkBWP
->
srs_Config
,
uecap
,
curr_bwp
,
uid
,
0
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
}
// Set DL MCS table
NR_BWP_DownlinkDedicated_t
*
bwp_Dedicated
=
SpCellConfig
->
spCellConfigDedicated
->
initialDownlinkBWP
;
set_dl_mcs_table
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
,
configuration
->
force_256qam_off
?
NULL
:
uecap
,
bwp_Dedicated
,
scc
);
struct
NR_ServingCellConfig__downlinkBWP_ToAddModList
*
DL_BWP_list
=
SpCellConfig
->
spCellConfigDedicated
->
downlinkBWP_ToAddModList
;
struct
NR_UplinkConfig__uplinkBWP_ToAddModList
*
UL_BWP_list
=
uplinkConfig
->
uplinkBWP_ToAddModList
;
if
(
DL_BWP_list
)
{
for
(
int
i
=
0
;
i
<
DL_BWP_list
->
list
.
count
;
i
++
)
{
NR_BWP_Downlink_t
*
bwp
=
DL_BWP_list
->
list
.
array
[
i
];
int
scs
=
bwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
set_dl_mcs_table
(
scs
,
configuration
->
force_256qam_off
?
NULL
:
uecap
,
bwp
->
bwp_Dedicated
,
scc
);
}
}
if
(
configuration
->
do_SRS
&&
UL_BWP_list
)
{
for
(
int
i
=
0
;
i
<
UL_BWP_list
->
list
.
count
;
i
++
)
{
NR_BWP_Uplink_t
*
ul_bwp
=
UL_BWP_list
->
list
.
array
[
i
];
int
bwp_size
=
NRRIV2BW
(
ul_bwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
if
(
ul_bwp
->
bwp_Dedicated
->
pusch_Config
)
{
NR_PUSCH_Config_t
*
pusch_Config
=
ul_bwp
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
;
if
(
pusch_Config
->
maxRank
==
NULL
)
{
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
}
*
pusch_Config
->
maxRank
=
ul_max_layers
;
}
config_srs
(
scc
,
ul_bwp
->
bwp_Dedicated
->
srs_Config
,
uecap
,
bwp_size
,
uid
,
i
+
1
,
maxMIMO_Layers
,
configuration
->
do_SRS
);
}
}
update_cqitables
(
bwp_Dedicated
->
pdsch_Config
,
SpCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
);
}
void
free_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
)
{
ASN_STRUCT_FREE
(
asn_DEF_NR_CellGroupConfig
,
cellGroupConfig
);
...
...
openair2/RRC/NR/nr_rrc_config.h
View file @
395ca4b4
...
...
@@ -119,6 +119,10 @@ NR_CellGroupConfig_t *get_initial_cellGroupConfig(int uid,
const
NR_ServingCellConfigCommon_t
*
scc
,
const
NR_ServingCellConfig_t
*
servingcellconfigdedicated
,
const
gNB_RrcConfigurationReq
*
configuration
);
void
update_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
,
const
int
uid
,
NR_UE_NR_Capability_t
*
uecap
,
const
gNB_RrcConfigurationReq
*
configuration
);
void
free_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
);
int
encode_cellGroupConfig
(
NR_CellGroupConfig_t
*
cellGroupConfig
,
uint8_t
*
buffer
,
int
max_buffer_size
);
NR_CellGroupConfig_t
*
decode_cellGroupConfig
(
const
uint8_t
*
buffer
,
int
max_buffer_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