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->transmissionScheme = 0;
|
||||||
pdsch_pdu_rel15->refPoint = 0;
|
pdsch_pdu_rel15->refPoint = 0;
|
||||||
pdsch_pdu_rel15->dmrsConfigType = dmrs_info.dmrsConfigType;
|
pdsch_pdu_rel15->dmrsConfigType = dmrs_info.dmrsConfigType;
|
||||||
pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId;
|
pdsch_pdu_rel15->dlDmrsScramblingId = dmrs_info.scrambling_id;
|
||||||
pdsch_pdu_rel15->SCID = 0;
|
pdsch_pdu_rel15->SCID = dmrs_info.n_scid;
|
||||||
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = dmrs_info.numDmrsCdmGrpsNoData;
|
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = dmrs_info.numDmrsCdmGrpsNoData;
|
||||||
pdsch_pdu_rel15->dmrsPorts = 1;
|
pdsch_pdu_rel15->dmrsPorts = 1;
|
||||||
pdsch_pdu_rel15->resourceAlloc = 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->transmissionScheme = 0;
|
||||||
pdsch_pdu_rel15->refPoint = is_sib1;
|
pdsch_pdu_rel15->refPoint = is_sib1;
|
||||||
pdsch_pdu_rel15->dmrsConfigType = 0;
|
pdsch_pdu_rel15->dmrsConfigType = 0;
|
||||||
pdsch_pdu_rel15->dlDmrsScramblingId = *scc->physCellId;
|
pdsch_pdu_rel15->dlDmrsScramblingId = pdsch->dmrs_parms.scrambling_id;
|
||||||
pdsch_pdu_rel15->SCID = 0;
|
pdsch_pdu_rel15->SCID = pdsch->dmrs_parms.n_scid;
|
||||||
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = pdsch->dmrs_parms.numDmrsCdmGrpsNoData;
|
pdsch_pdu_rel15->numDmrsCdmGrpsNoData = pdsch->dmrs_parms.numDmrsCdmGrpsNoData;
|
||||||
pdsch_pdu_rel15->dmrsPorts = 1;
|
pdsch_pdu_rel15->dmrsPorts = 1;
|
||||||
pdsch_pdu_rel15->resourceAlloc = 1;
|
pdsch_pdu_rel15->resourceAlloc = 1;
|
||||||
|
|||||||
@@ -1097,8 +1097,8 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
// DMRS
|
// DMRS
|
||||||
pdsch_pdu->dlDmrsSymbPos = dmrs_parms->dl_dmrs_symb_pos;
|
pdsch_pdu->dlDmrsSymbPos = dmrs_parms->dl_dmrs_symb_pos;
|
||||||
pdsch_pdu->dmrsConfigType = dmrs_parms->dmrsConfigType;
|
pdsch_pdu->dmrsConfigType = dmrs_parms->dmrsConfigType;
|
||||||
pdsch_pdu->dlDmrsScramblingId = *scc->physCellId;
|
pdsch_pdu->dlDmrsScramblingId = dmrs_parms->scrambling_id;
|
||||||
pdsch_pdu->SCID = 0;
|
pdsch_pdu->SCID = dmrs_parms->n_scid;
|
||||||
pdsch_pdu->numDmrsCdmGrpsNoData = dmrs_parms->numDmrsCdmGrpsNoData;
|
pdsch_pdu->numDmrsCdmGrpsNoData = dmrs_parms->numDmrsCdmGrpsNoData;
|
||||||
pdsch_pdu->dmrsPorts = (1<<nrOfLayers)-1; // FIXME with a better implementation
|
pdsch_pdu->dmrsPorts = (1<<nrOfLayers)-1; // FIXME with a better implementation
|
||||||
// Pdsch Allocation in frequency domain
|
// 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;
|
NR_PDSCH_Config_t *pdsch_Config = current_BWP->pdsch_Config;
|
||||||
|
|
||||||
/* Check and validate PTRS values */
|
/* Check and validate PTRS values */
|
||||||
struct NR_SetupRelease_PTRS_DownlinkConfig *phaseTrackingRS =
|
if (dmrs_parms->phaseTrackingRS) {
|
||||||
pdsch_Config ? pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS : NULL;
|
bool valid_ptrs_setup = set_dl_ptrs_values(dmrs_parms->phaseTrackingRS,
|
||||||
|
|
||||||
if (phaseTrackingRS) {
|
|
||||||
bool valid_ptrs_setup = set_dl_ptrs_values(phaseTrackingRS->choice.setup,
|
|
||||||
pdsch_pdu->rbSize,
|
pdsch_pdu->rbSize,
|
||||||
pdsch_pdu->mcsIndex[0],
|
pdsch_pdu->mcsIndex[0],
|
||||||
pdsch_pdu->mcsTable[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) {
|
if (dci_format == NR_DL_DCI_FORMAT_1_0) {
|
||||||
dmrs.numDmrsCdmGrpsNoData = tda_info->nrOfSymbols <= 2 ? 1 : 2;
|
dmrs.numDmrsCdmGrpsNoData = tda_info->nrOfSymbols <= 2 ? 1 : 2;
|
||||||
dmrs.dmrs_ports_id = 0;
|
dmrs.dmrs_ports_id = 0;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
//TODO first basic implementation of dmrs port selection
|
//TODO first basic implementation of dmrs port selection
|
||||||
// only vaild for a single codeword
|
// only vaild for a single codeword
|
||||||
// for now it assumes a selection of Nl consecutive dmrs ports
|
// 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;
|
NR_PDSCH_Config_t *pdsch_Config = dl_bwp ? dl_bwp->pdsch_Config : NULL;
|
||||||
if (pdsch_Config) {
|
if (pdsch_Config) {
|
||||||
if (tda_info->mapping_type == typeB)
|
NR_DMRS_DownlinkConfig_t *dmrs_Config = tda_info->mapping_type == typeB ?
|
||||||
dmrs.dmrsConfigType = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type != NULL;
|
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup :
|
||||||
else
|
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||||
dmrs.dmrsConfigType = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type != NULL;
|
dmrs.phaseTrackingRS = dmrs_Config->phaseTrackingRS ? dmrs_Config->phaseTrackingRS->choice.setup : NULL;
|
||||||
}
|
dmrs.dmrsConfigType = dmrs_Config->dmrs_Type != NULL;
|
||||||
else
|
scramblingID = dmrs.n_scid ? dmrs_Config->scramblingID1 : dmrs_Config->scramblingID0;
|
||||||
|
} else {
|
||||||
dmrs.dmrsConfigType = NFAPI_NR_DMRS_TYPE1;
|
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.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.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);
|
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;
|
uint8_t N_DMRS_SLOT;
|
||||||
uint16_t dl_dmrs_symb_pos;
|
uint16_t dl_dmrs_symb_pos;
|
||||||
uint8_t numDmrsCdmGrpsNoData;
|
uint8_t numDmrsCdmGrpsNoData;
|
||||||
|
uint32_t scrambling_id;
|
||||||
|
int n_scid;
|
||||||
nfapi_nr_dmrs_type_e dmrsConfigType;
|
nfapi_nr_dmrs_type_e dmrsConfigType;
|
||||||
|
NR_PTRS_DownlinkConfig_t *phaseTrackingRS;
|
||||||
} NR_pdsch_dmrs_t;
|
} NR_pdsch_dmrs_t;
|
||||||
|
|
||||||
typedef struct NR_sched_pdsch {
|
typedef struct NR_sched_pdsch {
|
||||||
|
|||||||
Reference in New Issue
Block a user