Merge branch 'ptrs_rrc_config' of https://gitlab.eurecom.fr/oai/openairinterface5g into ptrs_rrc_config
This commit is contained in:
@@ -191,61 +191,6 @@ gNBs =
|
|||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
# Dedicated Serving Cell Configuration
|
|
||||||
servingCellConfigDedicated = (
|
|
||||||
{
|
|
||||||
# PTRS-related config is optional. If any of the frequencyDensity or
|
|
||||||
# timeDensity parameters are skipped below or if the values are out-
|
|
||||||
# of-bounds, PTRS will be assumed to be not present.
|
|
||||||
|
|
||||||
# DL PTRS related parameters.
|
|
||||||
# 3GPP TS 38.331 PTRS-DownlinkConfig
|
|
||||||
|
|
||||||
# frequencyDensity value range: 1-276
|
|
||||||
dl_ptrsFreqDensity0_0 = 25;
|
|
||||||
dl_ptrsFreqDensity1_0 = 75;
|
|
||||||
|
|
||||||
# timeDensity value range: 0-29
|
|
||||||
dl_ptrsTimeDensity0_0 = 2;
|
|
||||||
dl_ptrsTimeDensity1_0 = 4;
|
|
||||||
dl_ptrsTimeDensity2_0 = 10;
|
|
||||||
|
|
||||||
# epre_Ratio
|
|
||||||
# 0 = "00", 1 = "01" in TS 38.214, table 4.1-2
|
|
||||||
dl_ptrsEpreRatio_0 = 0;
|
|
||||||
|
|
||||||
# resourceElementOffset
|
|
||||||
# 0 = offset01 1 = offset02, 2 = offset02
|
|
||||||
# 3GPP TS 38.331 PTRS-DownlinkConfig; TS 38.211 sec. 7.4.1.2.2
|
|
||||||
dl_ptrsReOffset_0 = 0;
|
|
||||||
|
|
||||||
# UL PTRS related parameters.
|
|
||||||
# 3GPP TS 38.331 PTRS-UplinkConfig
|
|
||||||
|
|
||||||
# frequencyDensity value range: 1-276
|
|
||||||
ul_ptrsFreqDensity0_0 = 25;
|
|
||||||
ul_ptrsFreqDensity1_0 = 75;
|
|
||||||
|
|
||||||
# timeDensity value range: 0-29
|
|
||||||
ul_ptrsTimeDensity0_0 = 2;
|
|
||||||
ul_ptrsTimeDensity1_0 = 4;
|
|
||||||
ul_ptrsTimeDensity2_0 = 10;
|
|
||||||
|
|
||||||
# resourceElementOffset
|
|
||||||
# 0 = offset01 1 = offset02, 2 = offset02
|
|
||||||
# TS 38.331 PTRS-UplinkConfig; TS 38.211 sec. 6.4.1.2.2.1
|
|
||||||
ul_ptrsReOffset_0 = 0;
|
|
||||||
|
|
||||||
# maxNrofPorts
|
|
||||||
# 0 = n1, 1 = n2
|
|
||||||
ul_ptrsMaxPorts_0 = 0;
|
|
||||||
|
|
||||||
# ptrs-Power
|
|
||||||
# 0 = p00, 1 = p01, 2 = p10, 3 = p11
|
|
||||||
#ul_ptrsPower_0 = 0;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
# ------- SCTP definitions
|
# ------- SCTP definitions
|
||||||
SCTP :
|
SCTP :
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ int8_t nr_rrc_ue_decode_NR_SIB1_Message(module_id_t module_id, uint8_t gNB_index
|
|||||||
openair0_config_t openair0_cfg[MAX_CARDS];
|
openair0_config_t openair0_cfg[MAX_CARDS];
|
||||||
void update_ptrs_config(NR_CellGroupConfig_t *secondaryCellGroup, uint16_t *rbSize, uint8_t *mcsIndex,int8_t *ptrs_arg);
|
void update_ptrs_config(NR_CellGroupConfig_t *secondaryCellGroup, uint16_t *rbSize, uint8_t *mcsIndex,int8_t *ptrs_arg);
|
||||||
void update_dmrs_config(NR_CellGroupConfig_t *scg,PHY_VARS_NR_UE *ue, int8_t* dmrs_arg);
|
void update_dmrs_config(NR_CellGroupConfig_t *scg,PHY_VARS_NR_UE *ue, int8_t* dmrs_arg);
|
||||||
|
extern void fix_scd(NR_ServingCellConfig_t *scd);// forward declaration
|
||||||
|
|
||||||
/* specific dlsim DL preprocessor: uses rbStart/rbSize/mcs from command line of
|
/* specific dlsim DL preprocessor: uses rbStart/rbSize/mcs from command line of
|
||||||
dlsim, does not search for CCE/PUCCH occasion but simply sets to 0 */
|
dlsim, does not search for CCE/PUCCH occasion but simply sets to 0 */
|
||||||
@@ -670,13 +671,15 @@ int main(int argc, char **argv)
|
|||||||
prepare_scd(scd);
|
prepare_scd(scd);
|
||||||
|
|
||||||
fill_default_secondaryCellGroup(scc,
|
fill_default_secondaryCellGroup(scc,
|
||||||
scd,
|
scd,
|
||||||
secondaryCellGroup,
|
secondaryCellGroup,
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
n_tx,
|
n_tx,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
/* RRC parameter validation for secondaryCellGroup */
|
||||||
|
fix_scd(scd);
|
||||||
/* -U option modify DMRS */
|
/* -U option modify DMRS */
|
||||||
if(modify_dmrs) {
|
if(modify_dmrs) {
|
||||||
update_dmrs_config(secondaryCellGroup, NULL,dmrs_arg);
|
update_dmrs_config(secondaryCellGroup, NULL,dmrs_arg);
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ double cpuf;
|
|||||||
//uint8_t nfapi_mode = 0;
|
//uint8_t nfapi_mode = 0;
|
||||||
uint64_t downlink_frequency[MAX_NUM_CCs][4];
|
uint64_t downlink_frequency[MAX_NUM_CCs][4];
|
||||||
|
|
||||||
|
extern void fix_scd(NR_ServingCellConfig_t *scd);// forward declaration
|
||||||
|
|
||||||
int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id, const int CC_id, const uint8_t gNB_index,
|
int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id, const int CC_id, const uint8_t gNB_index,
|
||||||
const int8_t channel, const uint8_t* pduP, const sdu_size_t pdu_len) { return 0; }
|
const int8_t channel, const uint8_t* pduP, const sdu_size_t pdu_len) { return 0; }
|
||||||
@@ -637,7 +638,7 @@ int main(int argc, char **argv)
|
|||||||
prepare_scd(scd);
|
prepare_scd(scd);
|
||||||
|
|
||||||
fill_default_secondaryCellGroup(scc,
|
fill_default_secondaryCellGroup(scc,
|
||||||
scd,
|
scd,
|
||||||
secondaryCellGroup,
|
secondaryCellGroup,
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
@@ -646,6 +647,9 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
// xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup);
|
// xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup);
|
||||||
|
|
||||||
|
/* RRC parameter validation for secondaryCellGroup */
|
||||||
|
fix_scd(scd);
|
||||||
|
|
||||||
AssertFatal((gNB->if_inst = NR_IF_Module_init(0))!=NULL,"Cannot register interface");
|
AssertFatal((gNB->if_inst = NR_IF_Module_init(0))!=NULL,"Cannot register interface");
|
||||||
|
|
||||||
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
|
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
|
||||||
|
|||||||
@@ -228,6 +228,7 @@
|
|||||||
#define GNB_CONFIG_STRING_ULPTRSREOFFSET_0 "ul_ptrsReOffset_0"
|
#define GNB_CONFIG_STRING_ULPTRSREOFFSET_0 "ul_ptrsReOffset_0"
|
||||||
#define GNB_CONFIG_STRING_ULPTRSMAXPORTS_0 "ul_ptrsMaxPorts_0"
|
#define GNB_CONFIG_STRING_ULPTRSMAXPORTS_0 "ul_ptrsMaxPorts_0"
|
||||||
#define GNB_CONFIG_STRING_ULPTRSPOWER_0 "ul_ptrsPower_0"
|
#define GNB_CONFIG_STRING_ULPTRSPOWER_0 "ul_ptrsPower_0"
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* pdcch_ConfigSIB1 parameters */
|
/* pdcch_ConfigSIB1 parameters */
|
||||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
|||||||
@@ -297,38 +297,38 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) {
|
|||||||
void prepare_scd(NR_ServingCellConfig_t *scd) {
|
void prepare_scd(NR_ServingCellConfig_t *scd) {
|
||||||
// Allocate downlink structures
|
// Allocate downlink structures
|
||||||
|
|
||||||
scd->downlinkBWP_ToAddModList = CALLOC(1,sizeof(scd->downlinkBWP_ToAddModList));
|
scd->downlinkBWP_ToAddModList = CALLOC(1, sizeof(scd->downlinkBWP_ToAddModList));
|
||||||
|
|
||||||
// Downlink bandwidth part
|
// Downlink bandwidth part
|
||||||
NR_BWP_Downlink_t *bwp=calloc(1,sizeof(*bwp));
|
NR_BWP_Downlink_t *bwp = calloc(1, sizeof(*bwp));
|
||||||
bwp->bwp_Id=1;
|
bwp->bwp_Id = 1;
|
||||||
|
|
||||||
// Allocate downlink dedicated bandwidth part and PDSCH structures
|
// Allocate downlink dedicated bandwidth part and PDSCH structures
|
||||||
bwp->bwp_Dedicated=calloc(1,sizeof(*bwp->bwp_Dedicated));
|
bwp->bwp_Dedicated = calloc(1, sizeof(*bwp->bwp_Dedicated));
|
||||||
bwp->bwp_Dedicated->pdsch_Config = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config));
|
bwp->bwp_Dedicated->pdsch_Config = calloc(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config));
|
||||||
bwp->bwp_Dedicated->pdsch_Config->present = NR_SetupRelease_PDSCH_Config_PR_setup;
|
bwp->bwp_Dedicated->pdsch_Config->present = NR_SetupRelease_PDSCH_Config_PR_setup;
|
||||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup));
|
bwp->bwp_Dedicated->pdsch_Config->choice.setup = calloc(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup));
|
||||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA));
|
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA = calloc(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA));
|
||||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->present= NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->present = NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
||||||
|
|
||||||
// Allocate DL DMRS and PTRS configuration
|
// Allocate DL DMRS and PTRS configuration
|
||||||
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup));
|
bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup = calloc(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup));
|
||||||
NR_DMRS_DownlinkConfig_t *NR_DMRS_DownlinkCfg = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
NR_DMRS_DownlinkConfig_t *NR_DMRS_DownlinkCfg = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||||
NR_DMRS_DownlinkCfg->phaseTrackingRS=CALLOC(1,sizeof(*NR_DMRS_DownlinkCfg->phaseTrackingRS));
|
NR_DMRS_DownlinkCfg->phaseTrackingRS=CALLOC(1, sizeof(*NR_DMRS_DownlinkCfg->phaseTrackingRS));
|
||||||
NR_DMRS_DownlinkCfg->phaseTrackingRS->present = NR_SetupRelease_PTRS_DownlinkConfig_PR_setup;
|
NR_DMRS_DownlinkCfg->phaseTrackingRS->present = NR_SetupRelease_PTRS_DownlinkConfig_PR_setup;
|
||||||
NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup = CALLOC(1,sizeof(*NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup));
|
NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup = CALLOC(1, sizeof(*NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup));
|
||||||
NR_PTRS_DownlinkConfig_t *NR_PTRS_DownlinkCfg = NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup;
|
NR_PTRS_DownlinkConfig_t *NR_PTRS_DownlinkCfg = NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup;
|
||||||
NR_PTRS_DownlinkCfg->frequencyDensity = CALLOC(1, sizeof(NR_PTRS_DownlinkCfg->frequencyDensity));
|
NR_PTRS_DownlinkCfg->frequencyDensity = CALLOC(1, sizeof(NR_PTRS_DownlinkCfg->frequencyDensity));
|
||||||
int *dl_rbs[2];
|
int *dl_rbs[2];
|
||||||
for (int i=0;i<2;i++) {
|
for (int i=0;i<2;i++) {
|
||||||
dl_rbs[i] = CALLOC(1,sizeof(*dl_rbs[i]));
|
dl_rbs[i] = CALLOC(1, sizeof(*dl_rbs[i]));
|
||||||
*dl_rbs[i] = 0;
|
*dl_rbs[i] = 0;
|
||||||
ASN_SEQUENCE_ADD(&NR_PTRS_DownlinkCfg->frequencyDensity->list, dl_rbs[i]);
|
ASN_SEQUENCE_ADD(&NR_PTRS_DownlinkCfg->frequencyDensity->list, dl_rbs[i]);
|
||||||
}
|
}
|
||||||
NR_PTRS_DownlinkCfg->timeDensity = CALLOC(1, sizeof(NR_PTRS_DownlinkCfg->timeDensity));
|
NR_PTRS_DownlinkCfg->timeDensity = CALLOC(1, sizeof(NR_PTRS_DownlinkCfg->timeDensity));
|
||||||
int *dl_mcs[3];
|
int *dl_mcs[3];
|
||||||
for (int i=0;i<3;i++) {
|
for (int i=0;i<3;i++) {
|
||||||
dl_mcs[i] = CALLOC(1,sizeof(*dl_mcs[i]));
|
dl_mcs[i] = CALLOC(1, sizeof(*dl_mcs[i]));
|
||||||
*dl_mcs[i] = 0;
|
*dl_mcs[i] = 0;
|
||||||
ASN_SEQUENCE_ADD(&NR_PTRS_DownlinkCfg->timeDensity->list, dl_mcs[i]);
|
ASN_SEQUENCE_ADD(&NR_PTRS_DownlinkCfg->timeDensity->list, dl_mcs[i]);
|
||||||
}
|
}
|
||||||
@@ -340,31 +340,31 @@ void prepare_scd(NR_ServingCellConfig_t *scd) {
|
|||||||
// Allocate uplink structures
|
// Allocate uplink structures
|
||||||
|
|
||||||
scd->uplinkConfig = CALLOC(1, sizeof(NR_UplinkConfig_t));
|
scd->uplinkConfig = CALLOC(1, sizeof(NR_UplinkConfig_t));
|
||||||
scd->uplinkConfig->uplinkBWP_ToAddModList = CALLOC(1,sizeof(scd->uplinkConfig->uplinkBWP_ToAddModList));
|
scd->uplinkConfig->uplinkBWP_ToAddModList = CALLOC(1, sizeof(scd->uplinkConfig->uplinkBWP_ToAddModList));
|
||||||
|
|
||||||
NR_PUSCH_Config_t *pusch_Config = CALLOC(1,sizeof(*pusch_Config));
|
NR_PUSCH_Config_t *pusch_Config = CALLOC(1, sizeof(*pusch_Config));
|
||||||
|
|
||||||
// Allocate UL DMRS and PTRS structures
|
// Allocate UL DMRS and PTRS structures
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB = CALLOC(1,sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB));
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB = CALLOC(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB));
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->present = NR_SetupRelease_DMRS_UplinkConfig_PR_setup;
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->present = NR_SetupRelease_DMRS_UplinkConfig_PR_setup;
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup = CALLOC(1,sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup = CALLOC(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
|
||||||
NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS = CALLOC(1,sizeof(*NR_DMRS_UplinkConfig->phaseTrackingRS));
|
NR_DMRS_UplinkConfig->phaseTrackingRS = CALLOC(1, sizeof(*NR_DMRS_UplinkConfig->phaseTrackingRS));
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS->present = NR_SetupRelease_PTRS_UplinkConfig_PR_setup;
|
NR_DMRS_UplinkConfig->phaseTrackingRS->present = NR_SetupRelease_PTRS_UplinkConfig_PR_setup;
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup = CALLOC(1,sizeof(*NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup));
|
NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup = CALLOC(1, sizeof(*NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup));
|
||||||
NR_PTRS_UplinkConfig_t *NR_PTRS_UplinkConfig = NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup;
|
NR_PTRS_UplinkConfig_t *NR_PTRS_UplinkConfig = NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup;
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled = CALLOC(1,sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled));
|
NR_PTRS_UplinkConfig->transformPrecoderDisabled = CALLOC(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled));
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity = CALLOC(1,sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity));
|
NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity = CALLOC(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity));
|
||||||
int *n_rbs[2];
|
int *n_rbs[2];
|
||||||
for (int i=0;i<2;i++) {
|
for (int i=0;i<2;i++) {
|
||||||
n_rbs[i] = CALLOC(1,sizeof(*n_rbs[i]));
|
n_rbs[i] = CALLOC(1, sizeof(*n_rbs[i]));
|
||||||
*n_rbs[i] = 0;
|
*n_rbs[i] = 0;
|
||||||
ASN_SEQUENCE_ADD(&NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity->list, n_rbs[i]);
|
ASN_SEQUENCE_ADD(&NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity->list, n_rbs[i]);
|
||||||
}
|
}
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity = CALLOC(1,sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity));
|
NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity = CALLOC(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity));
|
||||||
int *ptrs_mcs[3];
|
int *ptrs_mcs[3];
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
ptrs_mcs[i] = CALLOC(1,sizeof(*ptrs_mcs[i]));
|
ptrs_mcs[i] = CALLOC(1, sizeof(*ptrs_mcs[i]));
|
||||||
*ptrs_mcs[i] = 0;
|
*ptrs_mcs[i] = 0;
|
||||||
ASN_SEQUENCE_ADD(&NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity->list, ptrs_mcs[i]);
|
ASN_SEQUENCE_ADD(&NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity->list, ptrs_mcs[i]);
|
||||||
}
|
}
|
||||||
@@ -372,11 +372,11 @@ void prepare_scd(NR_ServingCellConfig_t *scd) {
|
|||||||
*NR_PTRS_UplinkConfig->transformPrecoderDisabled->resourceElementOffset = 0;
|
*NR_PTRS_UplinkConfig->transformPrecoderDisabled->resourceElementOffset = 0;
|
||||||
|
|
||||||
// UL bandwidth part
|
// UL bandwidth part
|
||||||
NR_BWP_Uplink_t *ubwp = CALLOC(1,sizeof(*ubwp));
|
NR_BWP_Uplink_t *ubwp = CALLOC(1, sizeof(*ubwp));
|
||||||
ubwp->bwp_Id=1;
|
ubwp->bwp_Id = 1;
|
||||||
ubwp->bwp_Dedicated = CALLOC(1,sizeof(*ubwp->bwp_Dedicated));
|
ubwp->bwp_Dedicated = CALLOC(1, sizeof(*ubwp->bwp_Dedicated));
|
||||||
|
|
||||||
ubwp->bwp_Dedicated->pusch_Config = CALLOC(1,sizeof(*ubwp->bwp_Dedicated->pusch_Config));
|
ubwp->bwp_Dedicated->pusch_Config = CALLOC(1, sizeof(*ubwp->bwp_Dedicated->pusch_Config));
|
||||||
ubwp->bwp_Dedicated->pusch_Config->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
ubwp->bwp_Dedicated->pusch_Config->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
||||||
ubwp->bwp_Dedicated->pusch_Config->choice.setup = pusch_Config;
|
ubwp->bwp_Dedicated->pusch_Config->choice.setup = pusch_Config;
|
||||||
|
|
||||||
|
|||||||
@@ -3064,73 +3064,9 @@ bool set_dl_ptrs_values(NR_PTRS_DownlinkConfig_t *ptrs_config,
|
|||||||
valid = false;
|
valid = false;
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
//printf("[MAC] PTRS is set K= %u L= %u\n", *K_ptrs,1<<*L_ptrs);
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* extract UL PTRS values from RRC and validate it based upon 38.214 6.2.3 */
|
/* Moved below check from scheduler function to here */
|
||||||
bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
|
if (*L_ptrs >= NrOfSymbols) {
|
||||||
uint16_t rbSize,uint8_t mcsIndex, uint8_t mcsTable,
|
|
||||||
uint8_t *K_ptrs, uint8_t *L_ptrs,
|
|
||||||
uint8_t *reOffset, uint8_t *maxNumPorts, uint8_t *ulPower,
|
|
||||||
uint8_t NrOfSymbols)
|
|
||||||
{
|
|
||||||
bool valid = true;
|
|
||||||
|
|
||||||
/* as defined in T 38.214 6.2.3 */
|
|
||||||
if(rbSize < 3) {
|
|
||||||
valid = false;
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
/* Check for Frequency Density values */
|
|
||||||
if(ul_ptrs_config->transformPrecoderDisabled->frequencyDensity->list.count < 2) {
|
|
||||||
/* Default value for K_PTRS = 2 as defined in T 38.214 6.2.3 */
|
|
||||||
*K_ptrs = 2;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
*K_ptrs = get_K_ptrs(*ul_ptrs_config->transformPrecoderDisabled->frequencyDensity->list.array[0],
|
|
||||||
*ul_ptrs_config->transformPrecoderDisabled->frequencyDensity->list.array[1],
|
|
||||||
rbSize);
|
|
||||||
}
|
|
||||||
/* Check for time Density values */
|
|
||||||
if(ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.count < 3) {
|
|
||||||
*L_ptrs = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
*L_ptrs = get_L_ptrs(*ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.array[0],
|
|
||||||
*ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.array[1],
|
|
||||||
*ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.array[2],
|
|
||||||
mcsIndex,
|
|
||||||
mcsTable);
|
|
||||||
}
|
|
||||||
|
|
||||||
*reOffset = *ul_ptrs_config->transformPrecoderDisabled->resourceElementOffset;
|
|
||||||
*maxNumPorts = ul_ptrs_config->transformPrecoderDisabled->maxNrofPorts;
|
|
||||||
*ulPower = ul_ptrs_config->transformPrecoderDisabled->ptrs_Power;
|
|
||||||
/* If either or both of the parameters PT-RS time density (LPT-RS) and PT-RS frequency density (KPT-RS), shown in Table
|
|
||||||
* 6.2.3.1-1 and Table 6.2.3.1-2, indicates that 'PT-RS not present', the UE shall assume that PT-RS is not present
|
|
||||||
*/
|
|
||||||
if(*K_ptrs ==2 || *K_ptrs ==4 ) {
|
|
||||||
valid = true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
valid = false;
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
if(*L_ptrs ==0 || *L_ptrs ==1 || *L_ptrs ==2 ) {
|
|
||||||
valid = true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
valid = false;
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
/* PTRS is not present also :
|
|
||||||
* When the UE is receiving a PUSCH with allocation duration of 4 symbols and if LPT-RS is set to 4, the UE shall assume
|
|
||||||
* PT-RS is not transmitted
|
|
||||||
* When the UE is receiving a PUSCH with allocation duration of 2 symbols as defined in Clause 6.4.1.2.2 of [4, TS
|
|
||||||
* 38.211] and if LPT-RS is set to 2 or 4, the UE shall assume PT-RS is not transmitted.
|
|
||||||
*/
|
|
||||||
if((NrOfSymbols == 4 && *L_ptrs ==2) || ((NrOfSymbols == 2 && *L_ptrs > 0))) {
|
|
||||||
valid = false;
|
valid = false;
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
@@ -3550,3 +3486,79 @@ int get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PDC
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* extract UL PTRS values from RRC and validate it based upon 38.214 6.2.3 */
|
||||||
|
bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
|
||||||
|
uint16_t rbSize,uint8_t mcsIndex, uint8_t mcsTable,
|
||||||
|
uint8_t *K_ptrs, uint8_t *L_ptrs,
|
||||||
|
uint8_t *reOffset, uint8_t *maxNumPorts, uint8_t *ulPower,
|
||||||
|
uint8_t NrOfSymbols)
|
||||||
|
{
|
||||||
|
bool valid = true;
|
||||||
|
|
||||||
|
/* as defined in T 38.214 6.2.3 */
|
||||||
|
if(rbSize < 3) {
|
||||||
|
valid = false;
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
/* Check for Frequency Density values */
|
||||||
|
if(ul_ptrs_config->transformPrecoderDisabled->frequencyDensity->list.count < 2) {
|
||||||
|
/* Default value for K_PTRS = 2 as defined in T 38.214 6.2.3 */
|
||||||
|
*K_ptrs = 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*K_ptrs = get_K_ptrs(*ul_ptrs_config->transformPrecoderDisabled->frequencyDensity->list.array[0],
|
||||||
|
*ul_ptrs_config->transformPrecoderDisabled->frequencyDensity->list.array[1],
|
||||||
|
rbSize);
|
||||||
|
}
|
||||||
|
/* Check for time Density values */
|
||||||
|
if(ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.count < 3) {
|
||||||
|
*L_ptrs = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*L_ptrs = get_L_ptrs(*ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.array[0],
|
||||||
|
*ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.array[1],
|
||||||
|
*ul_ptrs_config->transformPrecoderDisabled->timeDensity->list.array[2],
|
||||||
|
mcsIndex,
|
||||||
|
mcsTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
*reOffset = *ul_ptrs_config->transformPrecoderDisabled->resourceElementOffset;
|
||||||
|
*maxNumPorts = ul_ptrs_config->transformPrecoderDisabled->maxNrofPorts;
|
||||||
|
*ulPower = ul_ptrs_config->transformPrecoderDisabled->ptrs_Power;
|
||||||
|
/* If either or both of the parameters PT-RS time density (LPT-RS) and PT-RS frequency density (KPT-RS), shown in Table
|
||||||
|
* 6.2.3.1-1 and Table 6.2.3.1-2, indicates that 'PT-RS not present', the UE shall assume that PT-RS is not present
|
||||||
|
*/
|
||||||
|
if(*K_ptrs ==2 || *K_ptrs ==4 ) {
|
||||||
|
valid = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
valid = false;
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
if(*L_ptrs ==0 || *L_ptrs ==1 || *L_ptrs ==2 ) {
|
||||||
|
valid = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
valid = false;
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
/* PTRS is not present also :
|
||||||
|
* When the UE is receiving a PUSCH with allocation duration of 4 symbols and if LPT-RS is set to 4, the UE shall assume
|
||||||
|
* PT-RS is not transmitted
|
||||||
|
* When the UE is receiving a PUSCH with allocation duration of 2 symbols as defined in Clause 6.4.1.2.2 of [4, TS
|
||||||
|
* 38.211] and if LPT-RS is set to 2 or 4, the UE shall assume PT-RS is not transmitted.
|
||||||
|
*/
|
||||||
|
if((NrOfSymbols == 4 && *L_ptrs ==2) || ((NrOfSymbols == 2 && *L_ptrs > 0))) {
|
||||||
|
valid = false;
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Moved below check from nr_ue_scheduler function to here */
|
||||||
|
if (*L_ptrs >= NrOfSymbols) {
|
||||||
|
valid = false;
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1009,6 +1009,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
|||||||
&dlsch_config_pdu_1_1->PTRSReOffset, dlsch_config_pdu_1_1->number_symbols);
|
&dlsch_config_pdu_1_1->PTRSReOffset, dlsch_config_pdu_1_1->number_symbols);
|
||||||
if(valid_ptrs_setup==true) {
|
if(valid_ptrs_setup==true) {
|
||||||
dlsch_config_pdu_1_1->pduBitmap |= 0x1;
|
dlsch_config_pdu_1_1->pduBitmap |= 0x1;
|
||||||
|
LOG_D(MAC, "DL PTRS values: PTRS time den: %d, PTRS freq den: %d\n", dlsch_config_pdu_1_1->PTRSTimeDensity, dlsch_config_pdu_1_1->PTRSFreqDensity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -560,20 +560,11 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
|||||||
} else if (dci) {
|
} else if (dci) {
|
||||||
|
|
||||||
int target_ss;
|
int target_ss;
|
||||||
uint8_t ptrs_time_density;
|
bool valid_ptrs_setup = 0;
|
||||||
uint8_t ptrs_freq_density;
|
|
||||||
nfapi_nr_ue_ptrs_ports_t ptrs_ports_list;
|
|
||||||
uint16_t n_RB_ULBWP = NRRIV2BW(mac->ULbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
uint16_t n_RB_ULBWP = NRRIV2BW(mac->ULbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
fapi_nr_pusch_config_dedicated_t *pusch_config_dedicated = &mac->phy_config.config_req.ul_bwp_dedicated.pusch_config_dedicated;
|
fapi_nr_pusch_config_dedicated_t *pusch_config_dedicated = &mac->phy_config.config_req.ul_bwp_dedicated.pusch_config_dedicated;
|
||||||
NR_PUSCH_Config_t *pusch_Config = mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup;
|
NR_PUSCH_Config_t *pusch_Config = mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup;
|
||||||
|
|
||||||
// These should come from RRC config!!!
|
|
||||||
uint8_t ptrs_mcs1 = 2;
|
|
||||||
uint8_t ptrs_mcs2 = 4;
|
|
||||||
uint8_t ptrs_mcs3 = 10;
|
|
||||||
uint16_t n_rb0 = 25;
|
|
||||||
uint16_t n_rb1 = 75;
|
|
||||||
|
|
||||||
// Basic sanity check for MCS value to check for a false or erroneous DCI
|
// Basic sanity check for MCS value to check for a false or erroneous DCI
|
||||||
if (dci->mcs > 28) {
|
if (dci->mcs > 28) {
|
||||||
LOG_W(MAC, "MCS value %d out of bounds! Possibly due to false DCI. Ignoring DCI!\n", dci->mcs);
|
LOG_W(MAC, "MCS value %d out of bounds! Possibly due to false DCI. Ignoring DCI!\n", dci->mcs);
|
||||||
@@ -689,12 +680,6 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
|||||||
pusch_config_pdu->absolute_delta_PUSCH = 4;
|
pusch_config_pdu->absolute_delta_PUSCH = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, pusch_config_pdu->mcs_index, pusch_config_pdu->mcs_table);
|
|
||||||
ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, pusch_config_pdu->rb_size);
|
|
||||||
// PTRS ports configuration
|
|
||||||
// TbD: ptrs_dmrs_port and ptrs_port_index are not initialised!
|
|
||||||
ptrs_ports_list.ptrs_re_offset = 0;
|
|
||||||
|
|
||||||
/* DMRS */
|
/* DMRS */
|
||||||
l_prime_mask = get_l_prime(pusch_config_pdu->nr_of_symbols, typeB, pusch_dmrs_pos0, pusch_len1);
|
l_prime_mask = get_l_prime(pusch_config_pdu->nr_of_symbols, typeB, pusch_dmrs_pos0, pusch_len1);
|
||||||
if (pusch_config_pdu->transform_precoding == transform_precoder_disabled)
|
if (pusch_config_pdu->transform_precoding == transform_precoder_disabled)
|
||||||
@@ -708,12 +693,20 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* PTRS */
|
/* PTRS */
|
||||||
pusch_config_pdu->pusch_ptrs.ptrs_time_density = ptrs_time_density;
|
if (mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS != NULL) {
|
||||||
pusch_config_pdu->pusch_ptrs.ptrs_freq_density = ptrs_freq_density;
|
if (pusch_config_pdu->transform_precoding == transform_precoder_disabled) {
|
||||||
pusch_config_pdu->pusch_ptrs.ptrs_ports_list = &ptrs_ports_list;
|
nfapi_nr_ue_ptrs_ports_t ptrs_ports_list;
|
||||||
|
pusch_config_pdu->pusch_ptrs.ptrs_ports_list = &ptrs_ports_list;
|
||||||
if (1 << pusch_config_pdu->pusch_ptrs.ptrs_time_density >= pusch_config_pdu->nr_of_symbols) {
|
valid_ptrs_setup = set_ul_ptrs_values(mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup,
|
||||||
pusch_config_pdu->pdu_bit_map &= ~PUSCH_PDU_BITMAP_PUSCH_PTRS; // disable PUSCH PTRS
|
pusch_config_pdu->rb_size, pusch_config_pdu->mcs_index, pusch_config_pdu->mcs_table,
|
||||||
|
&pusch_config_pdu->pusch_ptrs.ptrs_freq_density,&pusch_config_pdu->pusch_ptrs.ptrs_time_density,
|
||||||
|
&pusch_config_pdu->pusch_ptrs.ptrs_ports_list->ptrs_re_offset,&pusch_config_pdu->pusch_ptrs.num_ptrs_ports,
|
||||||
|
&pusch_config_pdu->pusch_ptrs.ul_ptrs_power, pusch_config_pdu->nr_of_symbols);
|
||||||
|
if(valid_ptrs_setup==true) {
|
||||||
|
pusch_config_pdu->pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_PTRS;
|
||||||
|
}
|
||||||
|
LOG_D(MAC, "UL PTRS values: PTRS time den: %d, PTRS freq den: %d\n", pusch_config_pdu->pusch_ptrs.ptrs_time_density, pusch_config_pdu->pusch_ptrs.ptrs_freq_density);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,19 +79,19 @@ void fill_default_coresetZero(NR_ControlResourceSet_t *coreset0, NR_ServingCellC
|
|||||||
void fill_default_searchSpaceZero(NR_SearchSpace_t *ss0);
|
void fill_default_searchSpaceZero(NR_SearchSpace_t *ss0);
|
||||||
|
|
||||||
void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
||||||
NR_ServingCellConfig_t *servingcellconfigdedicated,
|
NR_ServingCellConfig_t *servingcellconfigdedicated,
|
||||||
NR_CellGroupConfig_t *secondaryCellGroup,
|
NR_CellGroupConfig_t *secondaryCellGroup,
|
||||||
int scg_id,
|
int scg_id,
|
||||||
int servCellIndex,
|
int servCellIndex,
|
||||||
int n_physical_antenna_ports,
|
int n_physical_antenna_ports,
|
||||||
int initial_csi_index);
|
int initial_csi_index);
|
||||||
|
|
||||||
void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
||||||
NR_ServingCellConfig_t *servingcellconfigdedicated,
|
NR_ServingCellConfig_t *servingcellconfigdedicated,
|
||||||
NR_RRCReconfiguration_IEs_t *reconfig,
|
NR_RRCReconfiguration_IEs_t *reconfig,
|
||||||
NR_CellGroupConfig_t *secondaryCellGroup,
|
NR_CellGroupConfig_t *secondaryCellGroup,
|
||||||
int n_physical_antenna_ports,
|
int n_physical_antenna_ports,
|
||||||
int initial_csi_index);
|
int initial_csi_index);
|
||||||
|
|
||||||
void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig,
|
void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig,
|
||||||
int eps_bearer_id, int rb_id,
|
int eps_bearer_id, int rb_id,
|
||||||
|
|||||||
@@ -0,0 +1,331 @@
|
|||||||
|
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
# frequencyInfoDL
|
||||||
|
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||||
|
absoluteFrequencySSB = 641032;
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3600 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 640000;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=0,L=50 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 6366;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
#pdsch-ConfigCommon
|
||||||
|
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||||
|
initialDLBWPk0_0 = 0;
|
||||||
|
#initialULBWPmappingType
|
||||||
|
#0=typeA,1=typeB
|
||||||
|
initialDLBWPmappingType_0 = 0;
|
||||||
|
#this is SS=1,L=13
|
||||||
|
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||||
|
|
||||||
|
initialDLBWPk0_1 = 0;
|
||||||
|
initialDLBWPmappingType_1 = 0;
|
||||||
|
#this is SS=2,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_1 = 53;
|
||||||
|
|
||||||
|
initialDLBWPk0_2 = 0;
|
||||||
|
initialDLBWPmappingType_2 = 0;
|
||||||
|
#this is SS=1,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||||
|
|
||||||
|
initialDLBWPk0_3 = 0;
|
||||||
|
initialDLBWPmappingType_3 = 0;
|
||||||
|
#this is SS=1,L=4
|
||||||
|
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||||
|
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 6366;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 13;
|
||||||
|
preambleReceivedTargetPower = -118;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
|
initialULBWPk2_0 = 6;
|
||||||
|
initialULBWPmappingType_0 = 1
|
||||||
|
# this is SS=0 L=11
|
||||||
|
initialULBWPstartSymbolAndLength_0 = 55;
|
||||||
|
|
||||||
|
initialULBWPk2_1 = 6;
|
||||||
|
initialULBWPmappingType_1 = 1;
|
||||||
|
# this is SS=0 L=12
|
||||||
|
initialULBWPstartSymbolAndLength_1 = 69;
|
||||||
|
initialULBWPk2_2 = 7;
|
||||||
|
initialULBWPmappingType_2 = 1;
|
||||||
|
# this is SS=10 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
# Dedicated Serving Cell Configuration
|
||||||
|
servingCellConfigDedicated = (
|
||||||
|
{
|
||||||
|
# DL PTRS related parameters.
|
||||||
|
# 3GPP TS 38.331 PTRS-DownlinkConfig
|
||||||
|
|
||||||
|
# frequencyDensity value range: 1-276
|
||||||
|
dl_ptrsFreqDensity0_0 = 25;
|
||||||
|
dl_ptrsFreqDensity1_0 = 75;
|
||||||
|
|
||||||
|
# timeDensity value range: 0-29
|
||||||
|
dl_ptrsTimeDensity0_0 = 2;
|
||||||
|
dl_ptrsTimeDensity1_0 = 4;
|
||||||
|
dl_ptrsTimeDensity2_0 = 10;
|
||||||
|
|
||||||
|
# epre_Ratio
|
||||||
|
# 0 = "00", 1 = "01" in TS 38.214, table 4.1-2
|
||||||
|
dl_ptrsEpreRatio_0 = 0;
|
||||||
|
|
||||||
|
# resourceElementOffset
|
||||||
|
# 0 = offset01 1 = offset02, 2 = offset02
|
||||||
|
# 3GPP TS 38.331 PTRS-DownlinkConfig; TS 38.211 sec. 7.4.1.2.2
|
||||||
|
dl_ptrsReOffset_0 = 0;
|
||||||
|
|
||||||
|
# UL PTRS related parameters.
|
||||||
|
# 3GPP TS 38.331 PTRS-UplinkConfig
|
||||||
|
|
||||||
|
# frequencyDensity value range: 1-276
|
||||||
|
ul_ptrsFreqDensity0_0 = 25;
|
||||||
|
ul_ptrsFreqDensity1_0 = 75;
|
||||||
|
|
||||||
|
# timeDensity value range: 0-29
|
||||||
|
ul_ptrsTimeDensity0_0 = 2;
|
||||||
|
ul_ptrsTimeDensity1_0 = 4;
|
||||||
|
ul_ptrsTimeDensity2_0 = 10;
|
||||||
|
|
||||||
|
# resourceElementOffset
|
||||||
|
# 0 = offset01 1 = offset02, 2 = offset02
|
||||||
|
# TS 38.331 PTRS-UplinkConfig; TS 38.211 sec. 6.4.1.2.2.1
|
||||||
|
ul_ptrsReOffset_0 = 0;
|
||||||
|
|
||||||
|
# maxNrofPorts
|
||||||
|
# 0 = n1, 1 = n2
|
||||||
|
ul_ptrsMaxPorts_0 = 0;
|
||||||
|
|
||||||
|
# ptrs-Power
|
||||||
|
# 0 = p00, 1 = p01, 2 = p10, 3 = p11
|
||||||
|
#ul_ptrsPower_0 = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 114;
|
||||||
|
eNB_instances = [0];
|
||||||
|
#beamforming 1x4 matrix:
|
||||||
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
|
sdr_addrs = "type=x300";
|
||||||
|
clock_src = "external";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user