Commit 87b261bb authored by Robert Schmidt's avatar Robert Schmidt

PUSCH: align semi-static conf. naming with PDSCH

parent 6e2b7e4c
...@@ -188,7 +188,7 @@ nr_ul_preprocessor_phytest()], multiple users in FR1 ...@@ -188,7 +188,7 @@ nr_ul_preprocessor_phytest()], multiple users in FR1
Currently, this is done using pf_ul() which implements a basic Currently, this is done using pf_ul() which implements a basic
proportional fair scheduler: proportional fair scheduler:
* for every UE, check for retransmission and allocate as necessary * for every UE, check for retransmission and allocate as necessary
* Calculate DMRS stuff (nr_save_pusch_fields()) * Calculate DMRS stuff (nr_set_pusch_semi_static())
* Calculate the PF coefficient and put eligible UEs into a list * Calculate the PF coefficient and put eligible UEs into a list
* Allocate resources to the UE(s) with the highest coefficient * Allocate resources to the UE(s) with the highest coefficient
4) Mark used resources in vrb_map_UL. 4) Mark used resources in vrb_map_UL.
......
...@@ -466,23 +466,17 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, ...@@ -466,23 +466,17 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id,
} }
UE_info->num_pdcch_cand[UE_id][cid]++; UE_info->num_pdcch_cand[UE_id][cid]++;
sched_ctrl->sched_pusch.time_domain_allocation = tda;
const long f = sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats; const long f = sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats;
const int dci_format = f ? NR_UL_DCI_FORMAT_0_1 : NR_UL_DCI_FORMAT_0_0; const int dci_format = f ? NR_UL_DCI_FORMAT_0_1 : NR_UL_DCI_FORMAT_0_0;
const uint8_t num_dmrs_cdm_grps_no_data = 1; const uint8_t num_dmrs_cdm_grps_no_data = 1;
/* we want to avoid a lengthy deduction of DMRS and other parameters in /* we want to avoid a lengthy deduction of DMRS and other parameters in
* every TTI if we can save it, so check whether dci_format, TDA, or * every TTI if we can save it, so check whether dci_format, TDA, or
* num_dmrs_cdm_grps_no_data has changed and only then recompute */ * num_dmrs_cdm_grps_no_data has changed and only then recompute */
NR_sched_pusch_save_t *ps = &sched_ctrl->pusch_save; NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
if (ps->time_domain_allocation != tda if (ps->time_domain_allocation != tda
|| ps->dci_format != dci_format || ps->dci_format != dci_format
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data) || ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data)
nr_save_pusch_fields(scc, nr_set_pusch_semi_static(scc, sched_ctrl->active_ubwp, dci_format, tda, num_dmrs_cdm_grps_no_data, ps);
sched_ctrl->active_ubwp,
dci_format,
tda,
num_dmrs_cdm_grps_no_data,
ps);
const int mcs = target_ul_mcs; const int mcs = target_ul_mcs;
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch; NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
......
...@@ -252,12 +252,12 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc, ...@@ -252,12 +252,12 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols); fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols);
} }
void nr_save_pusch_fields(const NR_ServingCellConfigCommon_t *scc, void nr_set_pusch_semi_static(const NR_ServingCellConfigCommon_t *scc,
const NR_BWP_Uplink_t *ubwp, const NR_BWP_Uplink_t *ubwp,
long dci_format, long dci_format,
int tda, int tda,
uint8_t num_dmrs_cdm_grps_no_data, uint8_t num_dmrs_cdm_grps_no_data,
NR_sched_pusch_save_t *ps) NR_pusch_semi_static_t *ps)
{ {
ps->dci_format = dci_format; ps->dci_format = dci_format;
ps->time_domain_allocation = tda; ps->time_domain_allocation = tda;
...@@ -1686,7 +1686,7 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP, NR_CellGroupConfig_t *secon ...@@ -1686,7 +1686,7 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP, NR_CellGroupConfig_t *secon
sched_ctrl->ta_apply = false; sched_ctrl->ta_apply = false;
/* set illegal time domain allocation to force recomputation of all fields */ /* set illegal time domain allocation to force recomputation of all fields */
sched_ctrl->pdsch_semi_static.time_domain_allocation = -1; sched_ctrl->pdsch_semi_static.time_domain_allocation = -1;
sched_ctrl->pusch_save.time_domain_allocation = -1; sched_ctrl->pusch_semi_static.time_domain_allocation = -1;
const NR_ServingCellConfig_t *servingCellConfig = secondaryCellGroup->spCellConfig->spCellConfigDedicated; const NR_ServingCellConfig_t *servingCellConfig = secondaryCellGroup->spCellConfig->spCellConfigDedicated;
/* Set default BWPs */ /* Set default BWPs */
......
...@@ -642,15 +642,14 @@ void pf_ul(module_id_t module_id, ...@@ -642,15 +642,14 @@ void pf_ul(module_id_t module_id,
/* we want to avoid a lengthy deduction of DMRS and other parameters in /* we want to avoid a lengthy deduction of DMRS and other parameters in
* every TTI if we can save it, so check whether dci_format, TDA, or * every TTI if we can save it, so check whether dci_format, TDA, or
* num_dmrs_cdm_grps_no_data has changed and only then recompute */ * num_dmrs_cdm_grps_no_data has changed and only then recompute */
sched_ctrl->sched_pusch.time_domain_allocation = tda;
const long f = sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats; const long f = sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats;
const int dci_format = f ? NR_UL_DCI_FORMAT_0_1 : NR_UL_DCI_FORMAT_0_0; const int dci_format = f ? NR_UL_DCI_FORMAT_0_1 : NR_UL_DCI_FORMAT_0_0;
const uint8_t num_dmrs_cdm_grps_no_data = 1; const uint8_t num_dmrs_cdm_grps_no_data = 1;
NR_sched_pusch_save_t *ps = &sched_ctrl->pusch_save; NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
if (ps->time_domain_allocation != tda if (ps->time_domain_allocation != tda
|| ps->dci_format != dci_format || ps->dci_format != dci_format
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data) || ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data)
nr_save_pusch_fields(scc, sched_ctrl->active_ubwp, dci_format, tda, num_dmrs_cdm_grps_no_data, ps); nr_set_pusch_semi_static(scc, sched_ctrl->active_ubwp, dci_format, tda, num_dmrs_cdm_grps_no_data, ps);
/* Check if retransmission is necessary */ /* Check if retransmission is necessary */
sched_ctrl->sched_pusch.ul_harq_pid = sched_ctrl->retrans_ul_harq.head; sched_ctrl->sched_pusch.ul_harq_pid = sched_ctrl->retrans_ul_harq.head;
...@@ -776,7 +775,7 @@ void pf_ul(module_id_t module_id, ...@@ -776,7 +775,7 @@ void pf_ul(module_id_t module_id,
int rbStart = NRRIV2PRBOFFSET(sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE); int rbStart = NRRIV2PRBOFFSET(sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
const uint16_t bwpSize = NRRIV2BW(sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE); const uint16_t bwpSize = NRRIV2BW(sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch; NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
while (rbStart < bwpSize && !rballoc_mask[rbStart]) rbStart++; while (rbStart < bwpSize && !rballoc_mask[rbStart]) rbStart++;
sched_pusch->rbStart = rbStart; sched_pusch->rbStart = rbStart;
...@@ -795,8 +794,8 @@ void pf_ul(module_id_t module_id, ...@@ -795,8 +794,8 @@ void pf_ul(module_id_t module_id,
sched_pusch->tb_size = nr_compute_tbs(sched_pusch->Qm, sched_pusch->tb_size = nr_compute_tbs(sched_pusch->Qm,
sched_pusch->R, sched_pusch->R,
sched_pusch->rbSize, sched_pusch->rbSize,
sched_ctrl->pusch_save.nrOfSymbols, ps->nrOfSymbols,
sched_ctrl->pusch_save.N_PRB_DMRS * sched_ctrl->pusch_save.num_dmrs_symb, ps->N_PRB_DMRS * ps->num_dmrs_symb,
0, // nb_rb_oh 0, // nb_rb_oh
0, 0,
1 /* NrOfLayers */) 1 /* NrOfLayers */)
...@@ -961,8 +960,8 @@ void nr_schedule_ulsch(module_id_t module_id, ...@@ -961,8 +960,8 @@ void nr_schedule_ulsch(module_id_t module_id,
/* pre-computed PUSCH values that only change if time domain allocation, /* pre-computed PUSCH values that only change if time domain allocation,
* DCI format, or DMRS parameters change. Updated in the preprocessor * DCI format, or DMRS parameters change. Updated in the preprocessor
* through nr_save_pusch_fields() */ * through nr_set_pusch_semi_static() */
NR_sched_pusch_save_t *ps = &sched_ctrl->pusch_save; NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
/* Statistics */ /* Statistics */
UE_info->mac_stats[UE_id].ulsch_rounds[cur_harq->round]++; UE_info->mac_stats[UE_id].ulsch_rounds[cur_harq->round]++;
......
...@@ -269,12 +269,12 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc, ...@@ -269,12 +269,12 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
uint8_t num_dmrs_cdm_grps_no_data, uint8_t num_dmrs_cdm_grps_no_data,
NR_pdsch_semi_static_t *ps); NR_pdsch_semi_static_t *ps);
void nr_save_pusch_fields(const NR_ServingCellConfigCommon_t *scc, void nr_set_pusch_semi_static(const NR_ServingCellConfigCommon_t *scc,
const NR_BWP_Uplink_t *ubwp, const NR_BWP_Uplink_t *ubwp,
long dci_format, long dci_format,
int tda, int tda,
uint8_t num_dmrs_cdm_grps_no_data, uint8_t num_dmrs_cdm_grps_no_data,
NR_sched_pusch_save_t *ps); NR_pusch_semi_static_t *ps);
uint8_t nr_get_tpc(int target, uint8_t cqi, int incr); uint8_t nr_get_tpc(int target, uint8_t cqi, int incr);
......
...@@ -305,11 +305,11 @@ typedef struct NR_sched_pucch { ...@@ -305,11 +305,11 @@ typedef struct NR_sched_pucch {
uint8_t resource_indicator; uint8_t resource_indicator;
} NR_sched_pucch_t; } NR_sched_pucch_t;
/* this struct is a helper: as long as the TDA and DCI format remain the same /* PUSCH semi-static configuration: as long as the TDA and DCI format remain
* over the same uBWP and search space, there is no need to recalculate all * the same over the same uBWP and search space, there is no need to
* S/L, MCS table, or DMRS-related parameters over and over again. Hence, we * recalculate all S/L, MCS table, or DMRS-related parameters over and over
* store them in this struct for easy reference. */ * again. Hence, we store them in this struct for easy reference. */
typedef struct NR_sched_pusch_save { typedef struct NR_pusch_semi_static_t {
int dci_format; int dci_format;
int time_domain_allocation; int time_domain_allocation;
uint8_t num_dmrs_cdm_grps_no_data; uint8_t num_dmrs_cdm_grps_no_data;
...@@ -327,7 +327,7 @@ typedef struct NR_sched_pusch_save { ...@@ -327,7 +327,7 @@ typedef struct NR_sched_pusch_save {
uint16_t ul_dmrs_symb_pos; uint16_t ul_dmrs_symb_pos;
uint8_t num_dmrs_symb; uint8_t num_dmrs_symb;
uint8_t N_PRB_DMRS; uint8_t N_PRB_DMRS;
} NR_sched_pusch_save_t; } NR_pusch_semi_static_t;
typedef struct NR_sched_pusch { typedef struct NR_sched_pusch {
int frame; int frame;
...@@ -337,9 +337,6 @@ typedef struct NR_sched_pusch { ...@@ -337,9 +337,6 @@ typedef struct NR_sched_pusch {
uint16_t rbSize; uint16_t rbSize;
uint16_t rbStart; uint16_t rbStart;
// time-domain allocation for scheduled RBs
int time_domain_allocation;
/// MCS /// MCS
uint8_t mcs; uint8_t mcs;
...@@ -521,8 +518,8 @@ typedef struct { ...@@ -521,8 +518,8 @@ typedef struct {
/// nr_acknack_scheduling()! /// nr_acknack_scheduling()!
NR_sched_pucch_t sched_pucch[3]; NR_sched_pucch_t sched_pucch[3];
/// PUSCH save: PUSCH "configuration" that is not cleared across TTIs /// PUSCH semi-static configuration: is not cleared across TTIs
NR_sched_pusch_save_t pusch_save; NR_pusch_semi_static_t pusch_semi_static;
/// Sched PDSCH: scheduling decisions, copied into HARQ and cleared every TTI /// Sched PDSCH: scheduling decisions, copied into HARQ and cleared every TTI
NR_sched_pusch_t sched_pusch; NR_sched_pusch_t sched_pusch;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment