Use PTRS params from RRC at MAC; remove hardcoding
This commit is contained in:
@@ -2918,3 +2918,72 @@ bool set_dl_ptrs_values(NR_PTRS_DownlinkConfig_t *ptrs_config,
|
||||
//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 */
|
||||
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;
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
@@ -185,4 +185,10 @@ bool set_dl_ptrs_values(NR_PTRS_DownlinkConfig_t *ptrs_config,
|
||||
uint8_t *K_ptrs, uint8_t *L_ptrs,uint8_t *portIndex,
|
||||
uint8_t *nERatio,uint8_t *reOffset,
|
||||
uint8_t NrOfSymbols);
|
||||
|
||||
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);
|
||||
#endif
|
||||
|
||||
@@ -1537,31 +1537,18 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
|
||||
// program PUSCH with UL DCI parameters
|
||||
nr_scheduled_response_t scheduled_response;
|
||||
fapi_nr_tx_request_t tx_req;
|
||||
nfapi_nr_ue_ptrs_ports_t ptrs_ports_list;
|
||||
|
||||
|
||||
for (int j = 0; j < ul_config_req->number_pdus; j++) {
|
||||
fapi_nr_ul_config_request_pdu_t *ulcfg_pdu = &ul_config_req->ul_config_list[j];
|
||||
|
||||
if (ulcfg_pdu->pdu_type == FAPI_NR_UL_CONFIG_TYPE_PUSCH) {
|
||||
|
||||
// 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;
|
||||
uint8_t ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, ulcfg_pdu->pusch_config_pdu.mcs_index, ulcfg_pdu->pusch_config_pdu.mcs_table);
|
||||
uint8_t ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, ulcfg_pdu->pusch_config_pdu.rb_size);
|
||||
uint16_t l_prime_mask = get_l_prime(ulcfg_pdu->pusch_config_pdu.nr_of_symbols, typeB, pusch_dmrs_pos0, pusch_len1);
|
||||
uint16_t ul_dmrs_symb_pos = l_prime_mask << ulcfg_pdu->pusch_config_pdu.start_symbol_index;
|
||||
|
||||
uint8_t dmrs_config_type = 0;
|
||||
uint16_t number_dmrs_symbols = 0;
|
||||
|
||||
// PTRS ports configuration
|
||||
// TbD: ptrs_dmrs_port and ptrs_port_index are not initialised!
|
||||
ptrs_ports_list.ptrs_re_offset = 0;
|
||||
|
||||
// Num PRB Overhead from PUSCH-ServingCellConfig
|
||||
if (mac->scg->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup->xOverhead == NULL)
|
||||
N_PRB_oh = 0;
|
||||
@@ -1573,13 +1560,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
|
||||
ulcfg_pdu->pusch_config_pdu.num_dmrs_cdm_grps_no_data = 1;
|
||||
ulcfg_pdu->pusch_config_pdu.nrOfLayers = 1;
|
||||
ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator = 0;
|
||||
ulcfg_pdu->pusch_config_pdu.pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
|
||||
ulcfg_pdu->pusch_config_pdu.pusch_ptrs.ptrs_time_density = ptrs_time_density;
|
||||
ulcfg_pdu->pusch_config_pdu.pusch_ptrs.ptrs_freq_density = ptrs_freq_density;
|
||||
ulcfg_pdu->pusch_config_pdu.pusch_ptrs.ptrs_ports_list = &ptrs_ports_list;
|
||||
//ulcfg_pdu->pusch_config_pdu.target_code_rate = nr_get_code_rate_ul(ulcfg_pdu->pusch_config_pdu.mcs_index, ulcfg_pdu->pusch_config_pdu.mcs_table);
|
||||
//ulcfg_pdu->pusch_config_pdu.qam_mod_order = nr_get_Qm_ul(ulcfg_pdu->pusch_config_pdu.mcs_index, ulcfg_pdu->pusch_config_pdu.mcs_table);
|
||||
|
||||
ulcfg_pdu->pusch_config_pdu.pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_DATA;
|
||||
|
||||
if (1 << ulcfg_pdu->pusch_config_pdu.pusch_ptrs.ptrs_time_density >= ulcfg_pdu->pusch_config_pdu.nr_of_symbols) {
|
||||
ulcfg_pdu->pusch_config_pdu.pdu_bit_map &= ~PUSCH_PDU_BITMAP_PUSCH_PTRS; // disable PUSCH PTRS
|
||||
}
|
||||
@@ -3624,6 +3606,22 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
|
||||
// A value of "1" indicates UL-SCH shall be transmitted on the PUSCH and
|
||||
// a value of "0" indicates UL-SCH shall not be transmitted on the PUSCH
|
||||
|
||||
if (mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS != NULL) {
|
||||
if (pusch_config_pdu_0_1->transform_precoding == transform_precoder_disabled) {
|
||||
nfapi_nr_ue_ptrs_ports_t ptrs_ports_list;
|
||||
pusch_config_pdu_0_1->pusch_ptrs.ptrs_ports_list = &ptrs_ports_list;
|
||||
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_0_1->rb_size, pusch_config_pdu_0_1->mcs_index, pusch_config_pdu_0_1->mcs_table,
|
||||
&pusch_config_pdu_0_1->pusch_ptrs.ptrs_freq_density,&pusch_config_pdu_0_1->pusch_ptrs.ptrs_time_density,
|
||||
&pusch_config_pdu_0_1->pusch_ptrs.ptrs_ports_list->ptrs_re_offset,&pusch_config_pdu_0_1->pusch_ptrs.num_ptrs_ports,
|
||||
&pusch_config_pdu_0_1->pusch_ptrs.ul_ptrs_power, pusch_config_pdu_0_1->nr_of_symbols);
|
||||
if(valid_ptrs_setup==true) {
|
||||
pusch_config_pdu_0_1->pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_PTRS;
|
||||
}
|
||||
//LOG_I(MAC, "UL PTRS values: PTRS time den: %d, PTRS freq den: %d\n", pusch_config_pdu_0_1->pusch_ptrs.ptrs_freq_density, pusch_config_pdu_0_1->pusch_ptrs.ptrs_time_density);
|
||||
}
|
||||
}
|
||||
|
||||
ul_config->slot = slot_tx;
|
||||
ul_config->sfn = frame_tx;
|
||||
ul_config->number_pdus = ul_config->number_pdus + 1;
|
||||
|
||||
@@ -486,6 +486,7 @@ void schedule_fapi_ul_pdu(int Mod_idP,
|
||||
int bwp_id=1;
|
||||
int mu = scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing;
|
||||
int UE_id = 0;
|
||||
bool valid_ptrs_setup = false;
|
||||
NR_UE_info_t *UE_info = &RC.nrmac[Mod_idP]->UE_info;
|
||||
AssertFatal(UE_info->active[UE_id],"Cannot find UE_id %d is not active\n",UE_id);
|
||||
|
||||
@@ -693,18 +694,15 @@ void schedule_fapi_ul_pdu(int Mod_idP,
|
||||
// ------- PTRS -------
|
||||
// --------------------
|
||||
if (NR_DMRS_UplinkConfig->phaseTrackingRS != NULL) {
|
||||
// TODO to be fixed from RRC config
|
||||
uint8_t ptrs_mcs1 = 2; // higher layer parameter in PTRS-UplinkConfig
|
||||
uint8_t ptrs_mcs2 = 4; // higher layer parameter in PTRS-UplinkConfig
|
||||
uint8_t ptrs_mcs3 = 10; // higher layer parameter in PTRS-UplinkConfig
|
||||
uint16_t n_rb0 = 25; // higher layer parameter in PTRS-UplinkConfig
|
||||
uint16_t n_rb1 = 75; // higher layer parameter in PTRS-UplinkConfig
|
||||
pusch_pdu->pusch_ptrs.ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, pusch_pdu->mcs_index, pusch_pdu->mcs_table);
|
||||
pusch_pdu->pusch_ptrs.ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, pusch_pdu->rb_size);
|
||||
pusch_pdu->pusch_ptrs.ptrs_ports_list = (nfapi_nr_ptrs_ports_t *) malloc(2*sizeof(nfapi_nr_ptrs_ports_t));
|
||||
pusch_pdu->pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset = 0;
|
||||
|
||||
pusch_pdu->pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_PTRS; // enable PUSCH PTRS
|
||||
valid_ptrs_setup = set_ul_ptrs_values(NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup,
|
||||
pusch_pdu->rb_size, pusch_pdu->mcs_index, pusch_pdu->mcs_table,
|
||||
&pusch_pdu->pusch_ptrs.ptrs_freq_density,&pusch_pdu->pusch_ptrs.ptrs_time_density,
|
||||
&pusch_pdu->pusch_ptrs.ptrs_ports_list->ptrs_re_offset,&pusch_pdu->pusch_ptrs.num_ptrs_ports,
|
||||
&pusch_pdu->pusch_ptrs.ul_ptrs_power, pusch_pdu->nr_of_symbols);
|
||||
if(valid_ptrs_setup==true) {
|
||||
pusch_pdu->pdu_bit_map |= PUSCH_PDU_BITMAP_PUSCH_PTRS; // enable PUSCH PTRS
|
||||
}
|
||||
}
|
||||
else{
|
||||
pusch_pdu->pdu_bit_map &= ~PUSCH_PDU_BITMAP_PUSCH_PTRS; // disable PUSCH PTRS
|
||||
|
||||
Reference in New Issue
Block a user