improve PDSCH DMRS structure with additional information
This commit is contained in:
@@ -1416,8 +1416,8 @@ static void prepare_dl_pdus(gNB_MAC_INST *nr_mac,
|
||||
pdsch_pdu_rel15->transmissionScheme = 0;
|
||||
pdsch_pdu_rel15->refPoint = 0;
|
||||
pdsch_pdu_rel15->dmrsConfigType = dmrs_info.dmrsConfigType;
|
||||
pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId;
|
||||
pdsch_pdu_rel15->SCID = 0;
|
||||
pdsch_pdu_rel15->dlDmrsScramblingId = dmrs_info.scrambling_id;
|
||||
pdsch_pdu_rel15->SCID = dmrs_info.n_scid;
|
||||
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = dmrs_info.numDmrsCdmGrpsNoData;
|
||||
pdsch_pdu_rel15->dmrsPorts = 1;
|
||||
pdsch_pdu_rel15->resourceAlloc = 1;
|
||||
|
||||
@@ -465,8 +465,8 @@ static void nr_fill_nfapi_dl_SIB_pdu(gNB_MAC_INST *gNB_mac,
|
||||
pdsch_pdu_rel15->transmissionScheme = 0;
|
||||
pdsch_pdu_rel15->refPoint = is_sib1;
|
||||
pdsch_pdu_rel15->dmrsConfigType = 0;
|
||||
pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId;
|
||||
pdsch_pdu_rel15->SCID = 0;
|
||||
pdsch_pdu_rel15->dlDmrsScramblingId = pdsch->dmrs_parms.scrambling_id;
|
||||
pdsch_pdu_rel15->SCID = pdsch->dmrs_parms.n_scid;
|
||||
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = pdsch->dmrs_parms.numDmrsCdmGrpsNoData;
|
||||
pdsch_pdu_rel15->dmrsPorts = 1;
|
||||
pdsch_pdu_rel15->resourceAlloc = 1;
|
||||
|
||||
@@ -1097,8 +1097,8 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
||||
// DMRS
|
||||
pdsch_pdu->dlDmrsSymbPos = dmrs_parms->dl_dmrs_symb_pos;
|
||||
pdsch_pdu->dmrsConfigType = dmrs_parms->dmrsConfigType;
|
||||
pdsch_pdu->dlDmrsScramblingId = *scc->physCellId;
|
||||
pdsch_pdu->SCID = 0;
|
||||
pdsch_pdu->dlDmrsScramblingId = dmrs_parms->scrambling_id;
|
||||
pdsch_pdu->SCID = dmrs_parms->n_scid;
|
||||
pdsch_pdu->numDmrsCdmGrpsNoData = dmrs_parms->numDmrsCdmGrpsNoData;
|
||||
pdsch_pdu->dmrsPorts = (1<<nrOfLayers)-1; // FIXME with a better implementation
|
||||
// Pdsch Allocation in frequency domain
|
||||
@@ -1129,11 +1129,8 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
||||
NR_PDSCH_Config_t *pdsch_Config = current_BWP->pdsch_Config;
|
||||
|
||||
/* Check and validate PTRS values */
|
||||
struct NR_SetupRelease_PTRS_DownlinkConfig *phaseTrackingRS =
|
||||
pdsch_Config ? pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS : NULL;
|
||||
|
||||
if (phaseTrackingRS) {
|
||||
bool valid_ptrs_setup = set_dl_ptrs_values(phaseTrackingRS->choice.setup,
|
||||
if (dmrs_parms->phaseTrackingRS) {
|
||||
bool valid_ptrs_setup = set_dl_ptrs_values(dmrs_parms->phaseTrackingRS,
|
||||
pdsch_pdu->rbSize,
|
||||
pdsch_pdu->mcsIndex[0],
|
||||
pdsch_pdu->mcsTable[0],
|
||||
|
||||
@@ -300,8 +300,7 @@ NR_pdsch_dmrs_t get_dl_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
|
||||
if (dci_format == NR_DL_DCI_FORMAT_1_0) {
|
||||
dmrs.numDmrsCdmGrpsNoData = tda_info->nrOfSymbols <= 2 ? 1 : 2;
|
||||
dmrs.dmrs_ports_id = 0;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
//TODO first basic implementation of dmrs port selection
|
||||
// only vaild for a single codeword
|
||||
// for now it assumes a selection of Nl consecutive dmrs ports
|
||||
@@ -346,16 +345,21 @@ NR_pdsch_dmrs_t get_dl_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
|
||||
}
|
||||
}
|
||||
|
||||
dmrs.n_scid = 0;
|
||||
long *scramblingID = NULL;
|
||||
NR_PDSCH_Config_t *pdsch_Config = dl_bwp ? dl_bwp->pdsch_Config : NULL;
|
||||
if (pdsch_Config) {
|
||||
if (tda_info->mapping_type == typeB)
|
||||
dmrs.dmrsConfigType = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type != NULL;
|
||||
else
|
||||
dmrs.dmrsConfigType = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type != NULL;
|
||||
}
|
||||
else
|
||||
NR_DMRS_DownlinkConfig_t *dmrs_Config = tda_info->mapping_type == typeB ?
|
||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup :
|
||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||
dmrs.phaseTrackingRS = dmrs_Config->phaseTrackingRS ? dmrs_Config->phaseTrackingRS->choice.setup : NULL;
|
||||
dmrs.dmrsConfigType = dmrs_Config->dmrs_Type != NULL;
|
||||
scramblingID = dmrs.n_scid ? dmrs_Config->scramblingID1 : dmrs_Config->scramblingID0;
|
||||
} else {
|
||||
dmrs.dmrsConfigType = NFAPI_NR_DMRS_TYPE1;
|
||||
|
||||
dmrs.phaseTrackingRS = NULL;
|
||||
}
|
||||
dmrs.scrambling_id = scramblingID ? *scramblingID : *scc->physCellId;
|
||||
dmrs.N_PRB_DMRS = dmrs.numDmrsCdmGrpsNoData * (dmrs.dmrsConfigType == NFAPI_NR_DMRS_TYPE1 ? 6 : 4);
|
||||
dmrs.dl_dmrs_symb_pos = fill_dmrs_mask(pdsch_Config, dci_format, scc->dmrs_TypeA_Position, tda_info->nrOfSymbols, tda_info->startSymbolIndex, tda_info->mapping_type, frontloaded_symb);
|
||||
dmrs.N_DMRS_SLOT = get_num_dmrs(dmrs.dl_dmrs_symb_pos);
|
||||
|
||||
@@ -436,7 +436,10 @@ typedef struct NR_pdsch_dmrs {
|
||||
uint8_t N_DMRS_SLOT;
|
||||
uint16_t dl_dmrs_symb_pos;
|
||||
uint8_t numDmrsCdmGrpsNoData;
|
||||
uint32_t scrambling_id;
|
||||
int n_scid;
|
||||
nfapi_nr_dmrs_type_e dmrsConfigType;
|
||||
NR_PTRS_DownlinkConfig_t *phaseTrackingRS;
|
||||
} NR_pdsch_dmrs_t;
|
||||
|
||||
typedef struct NR_sched_pdsch {
|
||||
|
||||
Reference in New Issue
Block a user