Merge remote-tracking branch 'origin/NR_ULSCH_transform_precoding_softmodem' into integration_2023_w11b
This commit is contained in:
@@ -164,9 +164,9 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
const uint8_t u = pusch_pdu->dfts_ofdm.low_papr_group_number;
|
const uint8_t u = pusch_pdu->dfts_ofdm.low_papr_group_number;
|
||||||
const uint8_t v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
|
const uint8_t v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
|
||||||
int16_t *dmrs_seq = gNB_dmrs_lowpaprtype1_sequence[u][v][index];
|
int16_t *dmrs_seq = gNB_dmrs_lowpaprtype1_sequence[u][v][index];
|
||||||
|
LOG_D(PHY,"Transform Precoding params. u: %d, v: %d, index for dmrsseq: %d\n", u, v, index);
|
||||||
AssertFatal(index >= 0, "Num RBs not configured according to 3GPP 38.211 section 6.3.1.4. For PUSCH with transform precoding, num RBs cannot be multiple of any other primenumber other than 2,3,5\n");
|
AssertFatal(index >= 0, "Num RBs not configured according to 3GPP 38.211 section 6.3.1.4. For PUSCH with transform precoding, num RBs cannot be multiple of any other primenumber other than 2,3,5\n");
|
||||||
AssertFatal(dmrs_seq != NULL, "DMRS low PAPR seq not found, check if DMRS sequences are generated");
|
AssertFatal(dmrs_seq != NULL, "DMRS low PAPR seq not found, check if DMRS sequences are generated");
|
||||||
LOG_D(PHY,"Transform Precoding params. u: %d, v: %d, index for dmrsseq: %d\n", u, v, index);
|
|
||||||
nr_pusch_lowpaprtype1_dmrs_rx(gNB, Ns, dmrs_seq, (int32_t *)pilot, 1000, 0, nb_rb_pusch, 0, pusch_pdu->dmrs_config_type);
|
nr_pusch_lowpaprtype1_dmrs_rx(gNB, Ns, dmrs_seq, (int32_t *)pilot, 1000, 0, nb_rb_pusch, 0, pusch_pdu->dmrs_config_type);
|
||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
printf ("NR_UL_CHANNEL_EST: index %d, u %d,v %d\n", index, u, v);
|
printf ("NR_UL_CHANNEL_EST: index %d, u %d,v %d\n", index, u, v);
|
||||||
|
|||||||
@@ -84,7 +84,6 @@
|
|||||||
#define GNB_CONFIG_STRING_MSG1SUBCARRIERSPACING "msg1_SubcarrierSpacing"
|
#define GNB_CONFIG_STRING_MSG1SUBCARRIERSPACING "msg1_SubcarrierSpacing"
|
||||||
#define GNB_CONFIG_STRING_RESTRICTEDSETCONFIG "restrictedSetConfig"
|
#define GNB_CONFIG_STRING_RESTRICTEDSETCONFIG "restrictedSetConfig"
|
||||||
#define GNB_CONFIG_STRING_MSG3TRANSFPREC "msg3_transformPrecoder"
|
#define GNB_CONFIG_STRING_MSG3TRANSFPREC "msg3_transformPrecoder"
|
||||||
#define GNB_CONFIG_STRING_PUSCHTIMEDOMAINALLOCATIONLIST "puschTimeDomainAllocationList"
|
|
||||||
#define GNB_CONFIG_STRING_MSG3DELTAPREABMLE "msg3_DeltaPreamble"
|
#define GNB_CONFIG_STRING_MSG3DELTAPREABMLE "msg3_DeltaPreamble"
|
||||||
#define GNB_CONFIG_STRING_P0NOMINALWITHGRANT "p0_NominalWithGrant"
|
#define GNB_CONFIG_STRING_P0NOMINALWITHGRANT "p0_NominalWithGrant"
|
||||||
#define GNB_CONFIG_STRING_PUCCHGROUPHOPPING "pucchGroupHopping"
|
#define GNB_CONFIG_STRING_PUCCHGROUPHOPPING "pucchGroupHopping"
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ void prepare_scc(NR_ServingCellConfigCommon_t *scc) {
|
|||||||
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->present = NR_SetupRelease_PUSCH_ConfigCommon_PR_setup;
|
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->present = NR_SetupRelease_PUSCH_ConfigCommon_PR_setup;
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon));
|
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon));
|
||||||
|
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = CALLOC(1,sizeof(long));
|
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NULL;
|
||||||
|
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList = CALLOC(1,sizeof(struct NR_PUSCH_TimeDomainResourceAllocationList));
|
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList = CALLOC(1,sizeof(struct NR_PUSCH_TimeDomainResourceAllocationList));
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble = CALLOC(1,sizeof(long));
|
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble = CALLOC(1,sizeof(long));
|
||||||
|
|||||||
@@ -602,7 +602,7 @@ typedef struct NR_UE_UL_BWP {
|
|||||||
NR_CSI_MeasConfig_t *csi_MeasConfig;
|
NR_CSI_MeasConfig_t *csi_MeasConfig;
|
||||||
NR_SRS_Config_t *srs_Config;
|
NR_SRS_Config_t *srs_Config;
|
||||||
long *msg3_DeltaPreamble;
|
long *msg3_DeltaPreamble;
|
||||||
uint8_t transform_precoding;
|
long transform_precoding;
|
||||||
uint8_t mcs_table;
|
uint8_t mcs_table;
|
||||||
nr_dci_format_t dci_format;
|
nr_dci_format_t dci_format;
|
||||||
int max_fb_time;
|
int max_fb_time;
|
||||||
|
|||||||
@@ -2832,14 +2832,14 @@ uint16_t get_nr_srs_offset(NR_SRS_PeriodicityAndOffset_t periodicityAndOffset) {
|
|||||||
|
|
||||||
// Set the transform precoding status according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16:
|
// Set the transform precoding status according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16:
|
||||||
// - "UE procedure for applying transform precoding on PUSCH"
|
// - "UE procedure for applying transform precoding on PUSCH"
|
||||||
uint8_t get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant)
|
long get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant)
|
||||||
{
|
{
|
||||||
if (configuredGrant && current_UL_BWP->configuredGrantConfig && current_UL_BWP->configuredGrantConfig->transformPrecoder)
|
if (configuredGrant && current_UL_BWP->configuredGrantConfig && current_UL_BWP->configuredGrantConfig->transformPrecoder)
|
||||||
return *current_UL_BWP->configuredGrantConfig->transformPrecoder;
|
return *current_UL_BWP->configuredGrantConfig->transformPrecoder;
|
||||||
|
|
||||||
if (dci_format == NR_UL_DCI_FORMAT_0_1 && current_UL_BWP && current_UL_BWP->pusch_Config && current_UL_BWP->pusch_Config->transformPrecoder)
|
if (dci_format == NR_UL_DCI_FORMAT_0_1 && current_UL_BWP && current_UL_BWP->pusch_Config && current_UL_BWP->pusch_Config->transformPrecoder)
|
||||||
return *current_UL_BWP->pusch_Config->transformPrecoder;
|
return *current_UL_BWP->pusch_Config->transformPrecoder;
|
||||||
else
|
|
||||||
return current_UL_BWP->rach_ConfigCommon->msg3_transformPrecoder ? 0 : 1;
|
return current_UL_BWP->rach_ConfigCommon->msg3_transformPrecoder ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3415,7 +3415,7 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
|||||||
if(pusch_Config &&
|
if(pusch_Config &&
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL){
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL){
|
||||||
NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||||
xb = ul_ant_bits(NR_DMRS_UplinkConfig,transformPrecoder);
|
xb = ul_ant_bits(NR_DMRS_UplinkConfig, transformPrecoder);
|
||||||
}
|
}
|
||||||
if (xa>xb)
|
if (xa>xb)
|
||||||
dci_pdu->antenna_ports.nbits = xa;
|
dci_pdu->antenna_ports.nbits = xa;
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
|
|||||||
uint8_t unpaired,
|
uint8_t unpaired,
|
||||||
frequency_range_t);
|
frequency_range_t);
|
||||||
|
|
||||||
int ul_ant_bits(NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig,long transformPrecoder);
|
int ul_ant_bits(NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig, long transformPrecoder);
|
||||||
|
|
||||||
uint8_t get_pdsch_mcs_table(long *mcs_Table, int dci_format, int rnti_type, int ss_type);
|
uint8_t get_pdsch_mcs_table(long *mcs_Table, int dci_format, int rnti_type, int ss_type);
|
||||||
|
|
||||||
@@ -268,13 +268,11 @@ bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
|
|||||||
uint8_t NrOfSymbols);
|
uint8_t NrOfSymbols);
|
||||||
|
|
||||||
/* \brief Set the transform precoding according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16
|
/* \brief Set the transform precoding according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16
|
||||||
@param *pusch_config, pointer to pusch config
|
@param *current_UL_BWP pointer to uplink bwp
|
||||||
@param *ubwp pointer to uplink bwp
|
@param dci_format dci format
|
||||||
@param *dci_format pointer to dci format
|
|
||||||
@param rnti_type rnti type
|
|
||||||
@param configuredGrant indicates whether a configured grant was received or not
|
@param configuredGrant indicates whether a configured grant was received or not
|
||||||
@returns transformPrecoding value */
|
@returns transformPrecoding value */
|
||||||
uint8_t get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant);
|
long get_transformPrecoding(const NR_UE_UL_BWP_t *current_UL_BWP, nr_dci_format_t dci_format, uint8_t configuredGrant);
|
||||||
|
|
||||||
void nr_mac_gNB_rrc_ul_failure(const module_id_t Mod_instP,
|
void nr_mac_gNB_rrc_ul_failure(const module_id_t Mod_instP,
|
||||||
const int CC_idP,
|
const int CC_idP,
|
||||||
|
|||||||
@@ -435,7 +435,7 @@ void configure_ss_coreset(NR_UE_MAC_INST_t *mac,
|
|||||||
NR_BWP_Id_t dl_bwp_id);
|
NR_BWP_Id_t dl_bwp_id);
|
||||||
|
|
||||||
static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
|
static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
|
||||||
uint8_t dci_format,
|
nr_dci_format_t dci_format,
|
||||||
uint8_t dci_size,
|
uint8_t dci_size,
|
||||||
uint16_t rnti,
|
uint16_t rnti,
|
||||||
int ss_type,
|
int ss_type,
|
||||||
@@ -466,6 +466,12 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti);
|
|||||||
// - 6.1.4.2 of TS 38.214
|
// - 6.1.4.2 of TS 38.214
|
||||||
// - 6.4.1.1.1 of TS 38.211
|
// - 6.4.1.1.1 of TS 38.211
|
||||||
// - 6.3.1.7 of 38.211
|
// - 6.3.1.7 of 38.211
|
||||||
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format);
|
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||||
|
NR_tda_info_t *tda_info,
|
||||||
|
nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
|
||||||
|
dci_pdu_rel15_t *dci,
|
||||||
|
RAR_grant_t *rar_grant,
|
||||||
|
uint16_t rnti,
|
||||||
|
const nr_dci_format_t *dci_format);
|
||||||
#endif
|
#endif
|
||||||
/** @}*/
|
/** @}*/
|
||||||
|
|||||||
@@ -164,16 +164,17 @@ void init_RA(module_id_t mod_id,
|
|||||||
NR_SearchSpaceId_t ss_id = -1;
|
NR_SearchSpaceId_t ss_id = -1;
|
||||||
NR_SearchSpace_t *ss = NULL;
|
NR_SearchSpace_t *ss = NULL;
|
||||||
|
|
||||||
if(mac->scc_SIB) {
|
|
||||||
commonSearchSpaceList = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
|
||||||
ss_id = *mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if (mac->scc) {
|
if (mac->scc) {
|
||||||
NR_SearchSpaceId_t *ra_ss = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
NR_SearchSpaceId_t *ra_ss = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
||||||
if (ra_ss) {
|
if (ra_ss) {
|
||||||
commonSearchSpaceList = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
commonSearchSpaceList = mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
||||||
ss_id = *mac->scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
ss_id = *ra_ss;
|
||||||
|
}
|
||||||
|
} else if (mac->scc_SIB) {
|
||||||
|
NR_SearchSpaceId_t *ra_ss = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
||||||
|
if (ra_ss) {
|
||||||
|
commonSearchSpaceList = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
||||||
|
ss_id = *ra_ss;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ss_id < 0) {
|
if (ss_id < 0) {
|
||||||
@@ -181,8 +182,7 @@ void init_RA(module_id_t mod_id,
|
|||||||
ra_ss = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
ra_ss = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
||||||
if (ra_ss) {
|
if (ra_ss) {
|
||||||
commonSearchSpaceList = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
commonSearchSpaceList = mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
||||||
ss_id = *mac->DLbwp[mac->current_DL_BWP.bwp_id-1]->bwp_Common->pdcch_ConfigCommon->choice.setup->ra_SearchSpace;
|
ss_id = *ra_ss;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -431,8 +431,8 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in
|
|||||||
int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, frame_t frame, int slot, dci_pdu_rel15_t *dci, fapi_nr_dci_indication_pdu_t *dci_ind) {
|
int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, frame_t frame, int slot, dci_pdu_rel15_t *dci, fapi_nr_dci_indication_pdu_t *dci_ind) {
|
||||||
|
|
||||||
uint16_t rnti = dci_ind->rnti;
|
uint16_t rnti = dci_ind->rnti;
|
||||||
uint8_t dci_format = dci_ind->dci_format;
|
|
||||||
int coreset_type = dci_ind->coreset_type == NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG; // 0 for coreset0, 1 otherwise
|
int coreset_type = dci_ind->coreset_type == NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG; // 0 for coreset0, 1 otherwise
|
||||||
|
nr_dci_format_t dci_format = dci_ind->dci_format;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int pucch_res_set_cnt = 0, valid = 0;
|
int pucch_res_set_cnt = 0, valid = 0;
|
||||||
frame_t frame_tx = 0;
|
frame_t frame_tx = 0;
|
||||||
@@ -1295,9 +1295,11 @@ void nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
|
|||||||
NR_PUSCH_Config_t *pusch_Config = current_UL_BWP ? current_UL_BWP->pusch_Config : NULL;
|
NR_PUSCH_Config_t *pusch_Config = current_UL_BWP ? current_UL_BWP->pusch_Config : NULL;
|
||||||
if (pusch_Config) {
|
if (pusch_Config) {
|
||||||
pusch_id = pusch_Config->dataScramblingIdentityPUSCH;
|
pusch_id = pusch_Config->dataScramblingIdentityPUSCH;
|
||||||
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL)
|
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL &&
|
||||||
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled != NULL)
|
||||||
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled->scramblingID0;
|
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled->scramblingID0;
|
||||||
else if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL)
|
else if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL &&
|
||||||
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled != NULL)
|
||||||
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
|
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2386,7 +2388,7 @@ void nr_ue_send_sdu(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *u
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
|
static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
|
||||||
uint8_t dci_format,
|
nr_dci_format_t dci_format,
|
||||||
uint8_t dci_size,
|
uint8_t dci_size,
|
||||||
uint16_t rnti,
|
uint16_t rnti,
|
||||||
int ss_type,
|
int ss_type,
|
||||||
@@ -3051,6 +3053,9 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default: // other DCI formats
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -145,8 +145,7 @@ void ul_layers_config(NR_UE_MAC_INST_t *mac, nfapi_nr_ue_pusch_pdu_t *pusch_conf
|
|||||||
NR_SRS_Config_t *srs_config = current_UL_BWP->srs_Config;
|
NR_SRS_Config_t *srs_config = current_UL_BWP->srs_Config;
|
||||||
NR_PUSCH_Config_t *pusch_Config = current_UL_BWP->pusch_Config;
|
NR_PUSCH_Config_t *pusch_Config = current_UL_BWP->pusch_Config;
|
||||||
|
|
||||||
long transformPrecoder = get_transformPrecoding(current_UL_BWP, dci_format, 0);
|
long transformPrecoder = pusch_config_pdu->transform_precoding;
|
||||||
pusch_config_pdu->transform_precoding = transformPrecoder;
|
|
||||||
|
|
||||||
/* PRECOD_NBR_LAYERS */
|
/* PRECOD_NBR_LAYERS */
|
||||||
// 0 bits if the higher layer parameter txConfig = nonCodeBook
|
// 0 bits if the higher layer parameter txConfig = nonCodeBook
|
||||||
@@ -240,34 +239,6 @@ void ul_layers_config(NR_UE_MAC_INST_t *mac, nfapi_nr_ue_pusch_pdu_t *pusch_conf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------- Changed to enable Transform precoding in RF SIM------------------------------------------------*/
|
|
||||||
|
|
||||||
/*if (pusch_config_pdu->transformPrecoder == transformPrecoder_enabled) {
|
|
||||||
|
|
||||||
pusch_config_dedicated->transform_precoder = transformPrecoder_enabled;
|
|
||||||
|
|
||||||
if(pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL) {
|
|
||||||
|
|
||||||
NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup;
|
|
||||||
|
|
||||||
if (NR_DMRS_ulconfig->dmrs_Type == NULL)
|
|
||||||
pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_a.dmrs_type = 1;
|
|
||||||
if (NR_DMRS_ulconfig->maxLength == NULL)
|
|
||||||
pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_a.max_length = 1;
|
|
||||||
|
|
||||||
} else if(pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL) {
|
|
||||||
|
|
||||||
NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
|
||||||
|
|
||||||
if (NR_DMRS_ulconfig->dmrs_Type == NULL)
|
|
||||||
pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_b.dmrs_type = 1;
|
|
||||||
if (NR_DMRS_ulconfig->maxLength == NULL)
|
|
||||||
pusch_config_dedicated->dmrs_ul_for_pusch_mapping_type_b.max_length = 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
pusch_config_dedicated->transformPrecoder = ttransformPrecoder_disabled;*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: this function shall be reviewed completely because of the many comments left by the author
|
// todo: this function shall be reviewed completely because of the many comments left by the author
|
||||||
@@ -278,11 +249,11 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
|
|||||||
NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP.pusch_Config;
|
NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP.pusch_Config;
|
||||||
AssertFatal(pusch_Config!=NULL,"pusch_Config shouldn't be null\n");
|
AssertFatal(pusch_Config!=NULL,"pusch_Config shouldn't be null\n");
|
||||||
|
|
||||||
long transformPrecoder = get_transformPrecoding(&mac->current_UL_BWP, dci_format, 0);
|
long transformPrecoder = pusch_config_pdu->transform_precoding;
|
||||||
|
LOG_D(NR_MAC,"transformPrecoder %s\n", transformPrecoder==NR_PUSCH_Config__transformPrecoder_disabled ? "disabled" : "enabled");
|
||||||
|
|
||||||
long *max_length = NULL;
|
long *max_length = NULL;
|
||||||
long *dmrs_type = NULL;
|
long *dmrs_type = NULL;
|
||||||
LOG_D(NR_MAC,"transformPrecoder %s\n",transformPrecoder==NR_PUSCH_Config__transformPrecoder_disabled?"disabled":"enabled");
|
|
||||||
|
|
||||||
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
|
if (pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
|
||||||
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength;
|
max_length = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->maxLength;
|
||||||
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type;
|
dmrs_type = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->dmrs_Type;
|
||||||
@@ -451,7 +422,13 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
|
|||||||
// - 6.1.4.2 of TS 38.214
|
// - 6.1.4.2 of TS 38.214
|
||||||
// - 6.4.1.1.1 of TS 38.211
|
// - 6.4.1.1.1 of TS 38.211
|
||||||
// - 6.3.1.7 of 38.211
|
// - 6.3.1.7 of 38.211
|
||||||
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu, dci_pdu_rel15_t *dci, RAR_grant_t *rar_grant, uint16_t rnti, uint8_t *dci_format)
|
int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||||
|
NR_tda_info_t *tda_info,
|
||||||
|
nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu,
|
||||||
|
dci_pdu_rel15_t *dci,
|
||||||
|
RAR_grant_t *rar_grant,
|
||||||
|
uint16_t rnti,
|
||||||
|
const nr_dci_format_t *dci_format)
|
||||||
{
|
{
|
||||||
|
|
||||||
int f_alloc;
|
int f_alloc;
|
||||||
@@ -570,9 +547,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Transform precoding */
|
/* Transform precoding */
|
||||||
if (rnti_type != NR_RNTI_CS || (rnti_type == NR_RNTI_CS && dci->ndi == 1)) {
|
|
||||||
pusch_config_pdu->transform_precoding = get_transformPrecoding(current_UL_BWP, *dci_format, 0);
|
pusch_config_pdu->transform_precoding = get_transformPrecoding(current_UL_BWP, *dci_format, 0);
|
||||||
}
|
|
||||||
|
|
||||||
/*DCI format-related configuration*/
|
/*DCI format-related configuration*/
|
||||||
if (*dci_format == NR_UL_DCI_FORMAT_0_0) {
|
if (*dci_format == NR_UL_DCI_FORMAT_0_0) {
|
||||||
@@ -606,7 +581,6 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
|
|||||||
pusch_config_pdu->scid = dci->dmrs_sequence_initialization.val;
|
pusch_config_pdu->scid = dci->dmrs_sequence_initialization.val;
|
||||||
|
|
||||||
/* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/
|
/* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
if (pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled) {
|
if (pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled) {
|
||||||
|
|
||||||
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
|
||||||
@@ -616,14 +590,14 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, NR_tda_info_t *tda_info, nfapi_nr
|
|||||||
NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
|
NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
|
||||||
n_RS_Id = *NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity;
|
n_RS_Id = *NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity;
|
||||||
else
|
else
|
||||||
n_RS_Id = *mac->scc->physCellId;
|
n_RS_Id = mac->physCellId;
|
||||||
|
|
||||||
// U as specified in section 6.4.1.1.1.2 in 38.211, if sequence hopping and group hopping are disabled
|
// U as specified in section 6.4.1.1.1.2 in 38.211, if sequence hopping and group hopping are disabled
|
||||||
pusch_config_pdu->dfts_ofdm.low_papr_group_number = n_RS_Id % 30;
|
pusch_config_pdu->dfts_ofdm.low_papr_group_number = n_RS_Id % 30;
|
||||||
|
|
||||||
// V as specified in section 6.4.1.1.1.2 in 38.211 V = 0 if sequence hopping and group hopping are disabled
|
// V as specified in section 6.4.1.1.1.2 in 38.211 V = 0 if sequence hopping and group hopping are disabled
|
||||||
if ((NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceGroupHopping == NULL) &&
|
if (!NR_DMRS_ulconfig || !NR_DMRS_ulconfig->transformPrecodingEnabled ||
|
||||||
(NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceHopping == NULL))
|
(!NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceGroupHopping && !NR_DMRS_ulconfig->transformPrecodingEnabled->sequenceHopping))
|
||||||
pusch_config_pdu->dfts_ofdm.low_papr_sequence_number = 0;
|
pusch_config_pdu->dfts_ofdm.low_papr_sequence_number = 0;
|
||||||
else
|
else
|
||||||
AssertFatal(1==0,"SequenceGroupHopping or sequenceHopping are NOT Supported\n");
|
AssertFatal(1==0,"SequenceGroupHopping or sequenceHopping are NOT Supported\n");
|
||||||
|
|||||||
@@ -1016,9 +1016,14 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
|
|||||||
pusch_pdu->cyclic_prefix = 0;
|
pusch_pdu->cyclic_prefix = 0;
|
||||||
pusch_pdu->mcs_table = 0;
|
pusch_pdu->mcs_table = 0;
|
||||||
if (scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder == NULL)
|
if (scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder == NULL)
|
||||||
pusch_pdu->transform_precoding = 1;
|
pusch_pdu->transform_precoding = 1; // disabled
|
||||||
else
|
else {
|
||||||
pusch_pdu->transform_precoding = 0;
|
pusch_pdu->transform_precoding = 0; // enabled
|
||||||
|
pusch_pdu->dfts_ofdm.low_papr_group_number = *scc->physCellId % 30;
|
||||||
|
pusch_pdu->dfts_ofdm.low_papr_sequence_number = 0;
|
||||||
|
if (scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding)
|
||||||
|
AssertFatal(1==0,"Hopping mode is not supported in transform precoding\n");
|
||||||
|
}
|
||||||
pusch_pdu->data_scrambling_id = *scc->physCellId;
|
pusch_pdu->data_scrambling_id = *scc->physCellId;
|
||||||
pusch_pdu->nrOfLayers = 1;
|
pusch_pdu->nrOfLayers = 1;
|
||||||
pusch_pdu->ul_dmrs_symb_pos = get_l_prime(nr_of_symbols,mappingtype,pusch_dmrs_pos2,pusch_len1,start_symbol_index, scc->dmrs_TypeA_Position);
|
pusch_pdu->ul_dmrs_symb_pos = get_l_prime(nr_of_symbols,mappingtype,pusch_dmrs_pos2,pusch_len1,start_symbol_index, scc->dmrs_TypeA_Position);
|
||||||
|
|||||||
@@ -462,6 +462,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
|
|||||||
uint16_t new_rbSize;
|
uint16_t new_rbSize;
|
||||||
bool success = nr_find_nb_rb(retInfo->Qm,
|
bool success = nr_find_nb_rb(retInfo->Qm,
|
||||||
retInfo->R,
|
retInfo->R,
|
||||||
|
1, // no transform precoding for DL
|
||||||
layers,
|
layers,
|
||||||
temp_tda.nrOfSymbols,
|
temp_tda.nrOfSymbols,
|
||||||
temp_dmrs.N_PRB_DMRS * temp_dmrs.N_DMRS_SLOT,
|
temp_dmrs.N_PRB_DMRS * temp_dmrs.N_DMRS_SLOT,
|
||||||
@@ -764,6 +765,7 @@ void pf_dl(module_id_t module_id,
|
|||||||
//const int oh = 3 * sched_ctrl->dl_pdus_total + 2 * (frame == (sched_ctrl->ta_frame + 10) % 1024);
|
//const int oh = 3 * sched_ctrl->dl_pdus_total + 2 * (frame == (sched_ctrl->ta_frame + 10) % 1024);
|
||||||
nr_find_nb_rb(sched_pdsch->Qm,
|
nr_find_nb_rb(sched_pdsch->Qm,
|
||||||
sched_pdsch->R,
|
sched_pdsch->R,
|
||||||
|
1, // no transform precoding for DL
|
||||||
sched_pdsch->nrOfLayers,
|
sched_pdsch->nrOfLayers,
|
||||||
tda_info->nrOfSymbols,
|
tda_info->nrOfSymbols,
|
||||||
sched_pdsch->dmrs_parms.N_PRB_DMRS * sched_pdsch->dmrs_parms.N_DMRS_SLOT,
|
sched_pdsch->dmrs_parms.N_PRB_DMRS * sched_pdsch->dmrs_parms.N_DMRS_SLOT,
|
||||||
|
|||||||
@@ -513,8 +513,21 @@ void fill_pdcch_vrb_map(gNB_MAC_INST *mac,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool multiple_2_3_5(int rb)
|
||||||
|
{
|
||||||
|
while (rb % 2 == 0)
|
||||||
|
rb /= 2;
|
||||||
|
while (rb % 3 == 0)
|
||||||
|
rb /= 3;
|
||||||
|
while (rb % 5 == 0)
|
||||||
|
rb /= 5;
|
||||||
|
|
||||||
|
return (rb == 1);
|
||||||
|
}
|
||||||
|
|
||||||
bool nr_find_nb_rb(uint16_t Qm,
|
bool nr_find_nb_rb(uint16_t Qm,
|
||||||
uint16_t R,
|
uint16_t R,
|
||||||
|
long transform_precoding,
|
||||||
uint8_t nrOfLayers,
|
uint8_t nrOfLayers,
|
||||||
uint16_t nb_symb_sch,
|
uint16_t nb_symb_sch,
|
||||||
uint16_t nb_dmrs_prb,
|
uint16_t nb_dmrs_prb,
|
||||||
@@ -524,6 +537,11 @@ bool nr_find_nb_rb(uint16_t Qm,
|
|||||||
uint32_t *tbs,
|
uint32_t *tbs,
|
||||||
uint16_t *nb_rb)
|
uint16_t *nb_rb)
|
||||||
{
|
{
|
||||||
|
// for transform precoding only RB = 2^a_2 * 3^a_3 * 5^a_5 is allowed with a non-negative
|
||||||
|
while(transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled &&
|
||||||
|
!multiple_2_3_5(nb_rb_max))
|
||||||
|
nb_rb_max--;
|
||||||
|
|
||||||
/* is the maximum (not even) enough? */
|
/* is the maximum (not even) enough? */
|
||||||
*nb_rb = nb_rb_max;
|
*nb_rb = nb_rb_max;
|
||||||
*tbs = nr_compute_tbs(Qm, R, *nb_rb, nb_symb_sch, nb_dmrs_prb, 0, 0, nrOfLayers) >> 3;
|
*tbs = nr_compute_tbs(Qm, R, *nb_rb, nb_symb_sch, nb_dmrs_prb, 0, 0, nrOfLayers) >> 3;
|
||||||
@@ -545,6 +563,15 @@ bool nr_find_nb_rb(uint16_t Qm,
|
|||||||
int hi = nb_rb_max;
|
int hi = nb_rb_max;
|
||||||
int lo = nb_rb_min;
|
int lo = nb_rb_min;
|
||||||
for (int p = (hi + lo) / 2; lo + 1 < hi; p = (hi + lo) / 2) {
|
for (int p = (hi + lo) / 2; lo + 1 < hi; p = (hi + lo) / 2) {
|
||||||
|
// for transform precoding only RB = 2^a_2 * 3^a_3 * 5^a_5 is allowed with a non-negative
|
||||||
|
while(transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled &&
|
||||||
|
!multiple_2_3_5(p))
|
||||||
|
p++;
|
||||||
|
|
||||||
|
// If by increasing p for transform precoding we already hit the high, break to avoid infinite loop
|
||||||
|
if (p == hi)
|
||||||
|
break;
|
||||||
|
|
||||||
const uint32_t TBS = nr_compute_tbs(Qm, R, p, nb_symb_sch, nb_dmrs_prb, 0, 0, nrOfLayers) >> 3;
|
const uint32_t TBS = nr_compute_tbs(Qm, R, p, nb_symb_sch, nb_dmrs_prb, 0, 0, nrOfLayers) >> 3;
|
||||||
if (bytes == TBS) {
|
if (bytes == TBS) {
|
||||||
hi = p;
|
hi = p;
|
||||||
@@ -568,7 +595,7 @@ NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
|
|||||||
|
|
||||||
NR_pusch_dmrs_t dmrs = {0};
|
NR_pusch_dmrs_t dmrs = {0};
|
||||||
// TODO setting of cdm groups with no data to be redone for MIMO
|
// TODO setting of cdm groups with no data to be redone for MIMO
|
||||||
if (ul_bwp->transform_precoding || Layers<3)
|
if (ul_bwp->transform_precoding && Layers < 3)
|
||||||
dmrs.num_dmrs_cdm_grps_no_data = ul_bwp->dci_format == NR_UL_DCI_FORMAT_0_1 || tda_info->nrOfSymbols == 2 ? 1 : 2;
|
dmrs.num_dmrs_cdm_grps_no_data = ul_bwp->dci_format == NR_UL_DCI_FORMAT_0_1 || tda_info->nrOfSymbols == 2 ? 1 : 2;
|
||||||
else
|
else
|
||||||
dmrs.num_dmrs_cdm_grps_no_data = 2;
|
dmrs.num_dmrs_cdm_grps_no_data = 2;
|
||||||
@@ -804,7 +831,6 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
|
|||||||
NR_PUCCH_ResourceId_t *resource_id = NULL;
|
NR_PUCCH_ResourceId_t *resource_id = NULL;
|
||||||
NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP;
|
NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP;
|
||||||
|
|
||||||
long *id0 = NULL;
|
|
||||||
int n_list, n_set;
|
int n_list, n_set;
|
||||||
uint16_t N2,N3;
|
uint16_t N2,N3;
|
||||||
int res_found = 0;
|
int res_found = 0;
|
||||||
@@ -818,9 +844,13 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
|
|||||||
|
|
||||||
long *pusch_id = pusch_Config ? pusch_Config->dataScramblingIdentityPUSCH : NULL;
|
long *pusch_id = pusch_Config ? pusch_Config->dataScramblingIdentityPUSCH : NULL;
|
||||||
|
|
||||||
if (pusch_Config && pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL)
|
long *id0 = NULL;
|
||||||
|
if (pusch_Config &&
|
||||||
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL &&
|
||||||
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled != NULL)
|
||||||
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled->scramblingID0;
|
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup->transformPrecodingDisabled->scramblingID0;
|
||||||
else if (pusch_Config && pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL)
|
else if (pusch_Config && pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB != NULL &&
|
||||||
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled != NULL)
|
||||||
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
|
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
|
||||||
else id0 = scc->physCellId;
|
else id0 = scc->physCellId;
|
||||||
|
|
||||||
@@ -2173,11 +2203,6 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
|
|||||||
UL_BWP->initial_BWPSize = NRRIV2BW(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
UL_BWP->initial_BWPSize = NRRIV2BW(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
UL_BWP->initial_BWPStart = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
UL_BWP->initial_BWPStart = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
|
||||||
if (UL_BWP->pusch_Config == NULL || !UL_BWP->pusch_Config->transformPrecoder)
|
|
||||||
UL_BWP->transform_precoding = !scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder;
|
|
||||||
else
|
|
||||||
UL_BWP->transform_precoding = *UL_BWP->pusch_Config->transformPrecoder;
|
|
||||||
|
|
||||||
if (UL_BWP->bwp_id > 0) {
|
if (UL_BWP->bwp_id > 0) {
|
||||||
UL_BWP->pucch_ConfigCommon = ul_bwp->bwp_Common->pucch_ConfigCommon ? ul_bwp->bwp_Common->pucch_ConfigCommon->choice.setup : NULL;
|
UL_BWP->pucch_ConfigCommon = ul_bwp->bwp_Common->pucch_ConfigCommon ? ul_bwp->bwp_Common->pucch_ConfigCommon->choice.setup : NULL;
|
||||||
UL_BWP->rach_ConfigCommon = ul_bwp->bwp_Common->rach_ConfigCommon ? ul_bwp->bwp_Common->rach_ConfigCommon->choice.setup : NULL;
|
UL_BWP->rach_ConfigCommon = ul_bwp->bwp_Common->rach_ConfigCommon ? ul_bwp->bwp_Common->rach_ConfigCommon->choice.setup : NULL;
|
||||||
@@ -2263,14 +2288,17 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
|
|||||||
long *dl_mcs_Table = DL_BWP->pdsch_Config ? DL_BWP->pdsch_Config->mcs_Table : NULL;
|
long *dl_mcs_Table = DL_BWP->pdsch_Config ? DL_BWP->pdsch_Config->mcs_Table : NULL;
|
||||||
DL_BWP->mcsTableIdx = get_pdsch_mcs_table(dl_mcs_Table, DL_BWP->dci_format, NR_RNTI_C, target_ss);
|
DL_BWP->mcsTableIdx = get_pdsch_mcs_table(dl_mcs_Table, DL_BWP->dci_format, NR_RNTI_C, target_ss);
|
||||||
|
|
||||||
long *ul_mcs_Table = NULL;
|
// 0 precoding enabled 1 precoding disabled
|
||||||
|
UL_BWP->transform_precoding = get_transformPrecoding(UL_BWP, UL_BWP->dci_format, 0);
|
||||||
|
// Set uplink MCS table
|
||||||
|
long *mcs_Table = NULL;
|
||||||
if (UL_BWP->pusch_Config)
|
if (UL_BWP->pusch_Config)
|
||||||
ul_mcs_Table = UL_BWP->transform_precoding ?
|
mcs_Table = UL_BWP->transform_precoding ?
|
||||||
UL_BWP->pusch_Config->mcs_Table :
|
UL_BWP->pusch_Config->mcs_Table :
|
||||||
UL_BWP->pusch_Config->mcs_TableTransformPrecoder;
|
UL_BWP->pusch_Config->mcs_TableTransformPrecoder;
|
||||||
|
|
||||||
UL_BWP->mcs_table = get_pusch_mcs_table(ul_mcs_Table,
|
UL_BWP->mcs_table = get_pusch_mcs_table(mcs_Table,
|
||||||
UL_BWP->transform_precoding ? 0 : 1,
|
!UL_BWP->transform_precoding,
|
||||||
UL_BWP->dci_format,
|
UL_BWP->dci_format,
|
||||||
NR_RNTI_C,
|
NR_RNTI_C,
|
||||||
target_ss,
|
target_ss,
|
||||||
|
|||||||
@@ -1041,7 +1041,7 @@ uint8_t get_max_tpmi(const NR_PUSCH_Config_t *pusch_Config,
|
|||||||
void get_precoder_matrix_coef(char *w,
|
void get_precoder_matrix_coef(char *w,
|
||||||
const uint8_t ul_ri,
|
const uint8_t ul_ri,
|
||||||
const uint16_t num_ue_srs_ports,
|
const uint16_t num_ue_srs_ports,
|
||||||
const uint8_t transform_precoding,
|
const long transform_precoding,
|
||||||
const uint8_t tpmi,
|
const uint8_t tpmi,
|
||||||
const uint8_t uI,
|
const uint8_t uI,
|
||||||
int layer_idx)
|
int layer_idx)
|
||||||
@@ -1068,7 +1068,7 @@ void get_precoder_matrix_coef(char *w,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int nr_srs_tpmi_estimation(const NR_PUSCH_Config_t *pusch_Config,
|
int nr_srs_tpmi_estimation(const NR_PUSCH_Config_t *pusch_Config,
|
||||||
const uint8_t transform_precoding,
|
const long transform_precoding,
|
||||||
const uint8_t *channel_matrix,
|
const uint8_t *channel_matrix,
|
||||||
const uint8_t normalized_iq_representation,
|
const uint8_t normalized_iq_representation,
|
||||||
const uint16_t num_gnb_antenna_elements,
|
const uint16_t num_gnb_antenna_elements,
|
||||||
@@ -1470,6 +1470,7 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
|
|||||||
uint16_t new_rbSize;
|
uint16_t new_rbSize;
|
||||||
bool success = nr_find_nb_rb(retInfo->Qm,
|
bool success = nr_find_nb_rb(retInfo->Qm,
|
||||||
retInfo->R,
|
retInfo->R,
|
||||||
|
UE->current_UL_BWP.transform_precoding,
|
||||||
nrOfLayers,
|
nrOfLayers,
|
||||||
tda_info.nrOfSymbols,
|
tda_info.nrOfSymbols,
|
||||||
dmrs_info.N_PRB_DMRS * dmrs_info.num_dmrs_symb,
|
dmrs_info.N_PRB_DMRS * dmrs_info.num_dmrs_symb,
|
||||||
@@ -1815,6 +1816,7 @@ void pf_ul(module_id_t module_id,
|
|||||||
uint32_t TBS = 0;
|
uint32_t TBS = 0;
|
||||||
nr_find_nb_rb(sched_pusch->Qm,
|
nr_find_nb_rb(sched_pusch->Qm,
|
||||||
sched_pusch->R,
|
sched_pusch->R,
|
||||||
|
current_BWP->transform_precoding,
|
||||||
sched_pusch->nrOfLayers,
|
sched_pusch->nrOfLayers,
|
||||||
sched_pusch->tda_info.nrOfSymbols,
|
sched_pusch->tda_info.nrOfSymbols,
|
||||||
sched_pusch->dmrs_info.N_PRB_DMRS * sched_pusch->dmrs_info.num_dmrs_symb,
|
sched_pusch->dmrs_info.N_PRB_DMRS * sched_pusch->dmrs_info.num_dmrs_symb,
|
||||||
@@ -2174,13 +2176,14 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pusch_pdu->ul_dmrs_scrambling_id = *scc->physCellId;
|
pusch_pdu->ul_dmrs_scrambling_id = *scc->physCellId;
|
||||||
if (NR_DMRS_UplinkConfig && NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
|
if (NR_DMRS_UplinkConfig &&
|
||||||
|
NR_DMRS_UplinkConfig->transformPrecodingEnabled &&
|
||||||
|
NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
|
||||||
pusch_pdu->pusch_identity = *NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity;
|
pusch_pdu->pusch_identity = *NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity;
|
||||||
else if (NR_DMRS_UplinkConfig)
|
else if (NR_DMRS_UplinkConfig)
|
||||||
pusch_pdu->pusch_identity = *scc->physCellId;
|
pusch_pdu->pusch_identity = *scc->physCellId;
|
||||||
}
|
}
|
||||||
pusch_pdu->scid = 0; // DMRS sequence initialization [TS38.211, sec 6.4.1.1.1]
|
pusch_pdu->scid = 0; // DMRS sequence initialization [TS38.211, sec 6.4.1.1.1]
|
||||||
pusch_pdu->num_dmrs_cdm_grps_no_data = sched_pusch->dmrs_info.num_dmrs_cdm_grps_no_data;
|
|
||||||
pusch_pdu->dmrs_ports = ((1<<sched_pusch->nrOfLayers) - 1);
|
pusch_pdu->dmrs_ports = ((1<<sched_pusch->nrOfLayers) - 1);
|
||||||
|
|
||||||
/* FAPI: Pusch Allocation in frequency domain */
|
/* FAPI: Pusch Allocation in frequency domain */
|
||||||
@@ -2231,11 +2234,13 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
|
|||||||
pusch_pdu->dfts_ofdm.low_papr_group_number = pusch_pdu->pusch_identity % 30;
|
pusch_pdu->dfts_ofdm.low_papr_group_number = pusch_pdu->pusch_identity % 30;
|
||||||
|
|
||||||
// V as specified in section 6.4.1.1.1.2 in 38.211 V = 0 if sequence hopping and group hopping are disabled
|
// V as specified in section 6.4.1.1.1.2 in 38.211 V = 0 if sequence hopping and group hopping are disabled
|
||||||
if ((NR_DMRS_UplinkConfig==NULL) || ((NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceGroupHopping == NULL) &&
|
if ((!NR_DMRS_UplinkConfig ||
|
||||||
(NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceHopping == NULL)))
|
!NR_DMRS_UplinkConfig->transformPrecodingEnabled ||
|
||||||
|
(!NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceGroupHopping && !NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceHopping)) &&
|
||||||
|
!scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding)
|
||||||
pusch_pdu->dfts_ofdm.low_papr_sequence_number = 0;
|
pusch_pdu->dfts_ofdm.low_papr_sequence_number = 0;
|
||||||
else
|
else
|
||||||
AssertFatal(1==0,"SequenceGroupHopping or sequenceHopping are NOT Supported\n");
|
AssertFatal(1==0,"Hopping mode is not supported in transform precoding\n");
|
||||||
|
|
||||||
LOG_D(NR_MAC,"TRANSFORM PRECODING IS ENABLED. CDM groups: %d, U: %d MCS table: %d\n", pusch_pdu->num_dmrs_cdm_grps_no_data, pusch_pdu->dfts_ofdm.low_papr_group_number, current_BWP->mcs_table);
|
LOG_D(NR_MAC,"TRANSFORM PRECODING IS ENABLED. CDM groups: %d, U: %d MCS table: %d\n", pusch_pdu->num_dmrs_cdm_grps_no_data, pusch_pdu->dfts_ofdm.low_papr_group_number, current_BWP->mcs_table);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -460,6 +460,7 @@ int get_cce_index(const gNB_MAC_INST *nrmac,
|
|||||||
|
|
||||||
bool nr_find_nb_rb(uint16_t Qm,
|
bool nr_find_nb_rb(uint16_t Qm,
|
||||||
uint16_t R,
|
uint16_t R,
|
||||||
|
long transform_precoding,
|
||||||
uint8_t nrOfLayers,
|
uint8_t nrOfLayers,
|
||||||
uint16_t nb_symb_sch,
|
uint16_t nb_symb_sch,
|
||||||
uint16_t nb_dmrs_prb,
|
uint16_t nb_dmrs_prb,
|
||||||
|
|||||||
@@ -196,8 +196,6 @@ typedef struct {
|
|||||||
|
|
||||||
/*! \brief gNB common channels */
|
/*! \brief gNB common channels */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int physCellId;
|
|
||||||
int p_gNB;
|
|
||||||
int Ncp;
|
int Ncp;
|
||||||
int nr_band;
|
int nr_band;
|
||||||
frame_type_t frame_type;
|
frame_type_t frame_type;
|
||||||
|
|||||||
@@ -723,7 +723,7 @@ void fill_initial_SpCellConfig(int uid,
|
|||||||
config_pucch_resset1(pucch_Config, NULL);
|
config_pucch_resset1(pucch_Config, NULL);
|
||||||
set_pucch_power_config(pucch_Config, configuration->do_CSIRS);
|
set_pucch_power_config(pucch_Config, configuration->do_CSIRS);
|
||||||
|
|
||||||
initialUplinkBWP->pusch_Config = config_pusch(NULL, scc);
|
initialUplinkBWP->pusch_Config = config_pusch(NULL);
|
||||||
|
|
||||||
long maxMIMO_Layers = uplinkConfig &&
|
long maxMIMO_Layers = uplinkConfig &&
|
||||||
uplinkConfig->pusch_ServingCellConfig &&
|
uplinkConfig->pusch_ServingCellConfig &&
|
||||||
|
|||||||
@@ -991,7 +991,7 @@ void set_dl_mcs_table(int scs,
|
|||||||
bwp_Dedicated->pdsch_Config->choice.setup->mcs_Table = NULL;
|
bwp_Dedicated->pdsch_Config->choice.setup->mcs_Table = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config, const NR_ServingCellConfigCommon_t *scc)
|
struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config)
|
||||||
{
|
{
|
||||||
struct NR_SetupRelease_PUSCH_Config *setup_puschconfig = calloc(1, sizeof(*setup_puschconfig));
|
struct NR_SetupRelease_PUSCH_Config *setup_puschconfig = calloc(1, sizeof(*setup_puschconfig));
|
||||||
setup_puschconfig->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
setup_puschconfig->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
||||||
@@ -1000,23 +1000,33 @@ struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Confi
|
|||||||
setup_puschconfig->choice.setup = pusch_Config;
|
setup_puschconfig->choice.setup = pusch_Config;
|
||||||
|
|
||||||
pusch_Config->dataScramblingIdentityPUSCH = NULL;
|
pusch_Config->dataScramblingIdentityPUSCH = NULL;
|
||||||
|
if (!pusch_Config->txConfig)
|
||||||
pusch_Config->txConfig = calloc(1, sizeof(*pusch_Config->txConfig));
|
pusch_Config->txConfig = calloc(1, sizeof(*pusch_Config->txConfig));
|
||||||
*pusch_Config->txConfig = NR_PUSCH_Config__txConfig_codebook;
|
*pusch_Config->txConfig = NR_PUSCH_Config__txConfig_codebook;
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA = NULL;
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA = NULL;
|
||||||
|
if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB)
|
||||||
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;
|
||||||
|
if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.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->dmrs_Type = NULL;
|
NR_DMRS_UplinkConfig->dmrs_Type = NULL;
|
||||||
NR_DMRS_UplinkConfig->dmrs_AdditionalPosition = NULL;
|
NR_DMRS_UplinkConfig->dmrs_AdditionalPosition = NULL;
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS = NULL;
|
NR_DMRS_UplinkConfig->phaseTrackingRS = NULL;
|
||||||
NR_DMRS_UplinkConfig->maxLength = NULL;
|
NR_DMRS_UplinkConfig->maxLength = NULL;
|
||||||
|
if (!NR_DMRS_UplinkConfig->transformPrecodingDisabled)
|
||||||
NR_DMRS_UplinkConfig->transformPrecodingDisabled = calloc(1, sizeof(*NR_DMRS_UplinkConfig->transformPrecodingDisabled));
|
NR_DMRS_UplinkConfig->transformPrecodingDisabled = calloc(1, sizeof(*NR_DMRS_UplinkConfig->transformPrecodingDisabled));
|
||||||
NR_DMRS_UplinkConfig->transformPrecodingDisabled->scramblingID0 = NULL;
|
NR_DMRS_UplinkConfig->transformPrecodingDisabled->scramblingID0 = NULL;
|
||||||
NR_DMRS_UplinkConfig->transformPrecodingDisabled->scramblingID1 = NULL;
|
NR_DMRS_UplinkConfig->transformPrecodingDisabled->scramblingID1 = NULL;
|
||||||
NR_DMRS_UplinkConfig->transformPrecodingEnabled = NULL;
|
if (!NR_DMRS_UplinkConfig->transformPrecodingEnabled)
|
||||||
|
NR_DMRS_UplinkConfig->transformPrecodingEnabled = calloc(1, sizeof(*NR_DMRS_UplinkConfig->transformPrecodingEnabled));
|
||||||
|
NR_DMRS_UplinkConfig->transformPrecodingEnabled->nPUSCH_Identity = NULL;
|
||||||
|
NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceHopping = NULL;
|
||||||
|
NR_DMRS_UplinkConfig->transformPrecodingEnabled->sequenceGroupHopping = NULL;
|
||||||
|
if (!pusch_Config->pusch_PowerControl)
|
||||||
pusch_Config->pusch_PowerControl = calloc(1, sizeof(*pusch_Config->pusch_PowerControl));
|
pusch_Config->pusch_PowerControl = calloc(1, sizeof(*pusch_Config->pusch_PowerControl));
|
||||||
pusch_Config->pusch_PowerControl->tpc_Accumulation = NULL;
|
pusch_Config->pusch_PowerControl->tpc_Accumulation = NULL;
|
||||||
|
if (!pusch_Config->pusch_PowerControl->msg3_Alpha)
|
||||||
pusch_Config->pusch_PowerControl->msg3_Alpha = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->msg3_Alpha));
|
pusch_Config->pusch_PowerControl->msg3_Alpha = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->msg3_Alpha));
|
||||||
*pusch_Config->pusch_PowerControl->msg3_Alpha = NR_Alpha_alpha1;
|
*pusch_Config->pusch_PowerControl->msg3_Alpha = NR_Alpha_alpha1;
|
||||||
pusch_Config->pusch_PowerControl->p0_NominalWithoutGrant = NULL;
|
pusch_Config->pusch_PowerControl->p0_NominalWithoutGrant = NULL;
|
||||||
@@ -1036,6 +1046,7 @@ struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Confi
|
|||||||
asn1cSeqAdd(&pusch_Config->pusch_PowerControl->pathlossReferenceRSToAddModList->list, plrefRS);
|
asn1cSeqAdd(&pusch_Config->pusch_PowerControl->pathlossReferenceRSToAddModList->list, plrefRS);
|
||||||
pusch_Config->pusch_PowerControl->pathlossReferenceRSToReleaseList = NULL;
|
pusch_Config->pusch_PowerControl->pathlossReferenceRSToReleaseList = NULL;
|
||||||
pusch_Config->pusch_PowerControl->twoPUSCH_PC_AdjustmentStates = NULL;
|
pusch_Config->pusch_PowerControl->twoPUSCH_PC_AdjustmentStates = NULL;
|
||||||
|
if (!pusch_Config->pusch_PowerControl->deltaMCS)
|
||||||
pusch_Config->pusch_PowerControl->deltaMCS = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->deltaMCS));
|
pusch_Config->pusch_PowerControl->deltaMCS = calloc(1, sizeof(*pusch_Config->pusch_PowerControl->deltaMCS));
|
||||||
*pusch_Config->pusch_PowerControl->deltaMCS = NR_PUSCH_PowerControl__deltaMCS_enabled;
|
*pusch_Config->pusch_PowerControl->deltaMCS = NR_PUSCH_PowerControl__deltaMCS_enabled;
|
||||||
pusch_Config->pusch_PowerControl->sri_PUSCH_MappingToAddModList = NULL;
|
pusch_Config->pusch_PowerControl->sri_PUSCH_MappingToAddModList = NULL;
|
||||||
@@ -1048,13 +1059,12 @@ struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Confi
|
|||||||
pusch_Config->mcs_Table = NULL;
|
pusch_Config->mcs_Table = NULL;
|
||||||
pusch_Config->mcs_TableTransformPrecoder = NULL;
|
pusch_Config->mcs_TableTransformPrecoder = NULL;
|
||||||
pusch_Config->transformPrecoder = NULL;
|
pusch_Config->transformPrecoder = NULL;
|
||||||
if (scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoder == NULL) {
|
if (!pusch_Config->codebookSubset)
|
||||||
pusch_Config->transformPrecoder = calloc(1, sizeof(*pusch_Config->transformPrecoder));
|
|
||||||
*pusch_Config->transformPrecoder = NR_PUSCH_Config__transformPrecoder_disabled;
|
|
||||||
}
|
|
||||||
pusch_Config->codebookSubset = calloc(1, sizeof(*pusch_Config->codebookSubset));
|
pusch_Config->codebookSubset = calloc(1, sizeof(*pusch_Config->codebookSubset));
|
||||||
*pusch_Config->codebookSubset = NR_PUSCH_Config__codebookSubset_nonCoherent;
|
*pusch_Config->codebookSubset = NR_PUSCH_Config__codebookSubset_nonCoherent;
|
||||||
asn1cCallocOne(pusch_Config->maxRank, 1);
|
if (!pusch_Config->maxRank)
|
||||||
|
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
||||||
|
*pusch_Config->maxRank = 1;
|
||||||
pusch_Config->rbg_Size = NULL;
|
pusch_Config->rbg_Size = NULL;
|
||||||
pusch_Config->uci_OnPUSCH = NULL;
|
pusch_Config->uci_OnPUSCH = NULL;
|
||||||
pusch_Config->tp_pi2BPSK = NULL;
|
pusch_Config->tp_pi2BPSK = NULL;
|
||||||
@@ -1248,7 +1258,7 @@ void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
|
|||||||
bwp_loop < servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count) {
|
bwp_loop < servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count) {
|
||||||
pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]->bwp_Dedicated->pusch_Config->choice.setup;
|
pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]->bwp_Dedicated->pusch_Config->choice.setup;
|
||||||
}
|
}
|
||||||
ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config, scc);
|
ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config);
|
||||||
|
|
||||||
long maxMIMO_Layers = servingcellconfigdedicated &&
|
long maxMIMO_Layers = servingcellconfigdedicated &&
|
||||||
servingcellconfigdedicated->uplinkConfig
|
servingcellconfigdedicated->uplinkConfig
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
|
|||||||
int numerology,
|
int numerology,
|
||||||
int rbsize,
|
int rbsize,
|
||||||
int mcs_table);
|
int mcs_table);
|
||||||
struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config, const NR_ServingCellConfigCommon_t *scc);
|
struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config);
|
||||||
void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
|
void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
|
||||||
const NR_ServingCellConfigCommon_t *scc,
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
const NR_ServingCellConfig_t *servingcellconfigdedicated,
|
const NR_ServingCellConfig_t *servingcellconfigdedicated,
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
|||||||
if (servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList) {
|
if (servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList) {
|
||||||
pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup;
|
pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup;
|
||||||
}
|
}
|
||||||
initialUplinkBWP->pusch_Config = config_pusch(pusch_Config, servingcellconfigcommon);
|
initialUplinkBWP->pusch_Config = config_pusch(pusch_Config);
|
||||||
|
|
||||||
long maxMIMO_Layers = servingcellconfigdedicated->uplinkConfig &&
|
long maxMIMO_Layers = servingcellconfigdedicated->uplinkConfig &&
|
||||||
servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig &&
|
servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig &&
|
||||||
|
|||||||
Reference in New Issue
Block a user