Merge remote-tracking branch 'origin/NR_MAC_scheduler_limit_ues' into integration_2022_wk05
This commit is contained in:
@@ -539,7 +539,9 @@ void pf_dl(module_id_t module_id,
|
||||
NR_UE_info_t **UE_list,
|
||||
int max_num_ue,
|
||||
int n_rb_sched,
|
||||
uint16_t *rballoc_mask) {
|
||||
uint16_t *rballoc_mask)
|
||||
{
|
||||
|
||||
gNB_MAC_INST *mac = RC.nrmac[module_id];
|
||||
NR_ServingCellConfigCommon_t *scc=mac->common_channels[0].ServingCellConfigCommon;
|
||||
// UEs that could be scheduled
|
||||
@@ -748,7 +750,8 @@ void pf_dl(module_id_t module_id,
|
||||
}
|
||||
}
|
||||
|
||||
void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t slot) {
|
||||
void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t slot)
|
||||
{
|
||||
NR_UEs_t *UE_info = &RC.nrmac[module_id]->UE_info;
|
||||
|
||||
if (UE_info->list[0] == NULL)
|
||||
@@ -791,12 +794,17 @@ void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
||||
|
||||
/* Retrieve amount of data to send for this UE */
|
||||
nr_store_dlsch_buffer(module_id, frame, slot);
|
||||
|
||||
int bw = scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
||||
int average_agg_level = 4; // TODO find a better estimation
|
||||
int max_sched_ues = bw / (average_agg_level * NR_NB_REG_PER_CCE);
|
||||
|
||||
/* proportional fair scheduling algorithm */
|
||||
pf_dl(module_id,
|
||||
frame,
|
||||
slot,
|
||||
UE_info->list,
|
||||
MAX_MOBILES_PER_GNB,
|
||||
max_sched_ues,
|
||||
n_rb_sched,
|
||||
rballoc_mask);
|
||||
}
|
||||
|
||||
@@ -680,224 +680,6 @@ int get_mcs_from_bler(const NR_bler_options_t *bler_options,
|
||||
return new_mcs;
|
||||
}
|
||||
|
||||
void nr_configure_css_dci_initial(nfapi_nr_dl_tti_pdcch_pdu_rel15_t* pdcch_pdu,
|
||||
nr_scs_e scs_common,
|
||||
nr_scs_e pdcch_scs,
|
||||
frequency_range_t freq_range,
|
||||
uint8_t rmsi_pdcch_config,
|
||||
uint8_t ssb_idx,
|
||||
uint8_t k_ssb,
|
||||
uint16_t sfn_ssb,
|
||||
uint8_t n_ssb, /*slot index overlapping the corresponding SSB index*/
|
||||
uint16_t nb_slots_per_frame,
|
||||
uint16_t N_RB)
|
||||
{
|
||||
// uint8_t O, M;
|
||||
// uint8_t ss_idx = rmsi_pdcch_config&0xf;
|
||||
// uint8_t cset_idx = (rmsi_pdcch_config>>4)&0xf;
|
||||
// uint8_t mu = scs_common;
|
||||
// uint8_t O_scale=0, M_scale=0; // used to decide if the values of O and M need to be divided by 2
|
||||
|
||||
AssertFatal(1==0,"todo\n");
|
||||
/*
|
||||
/// Coreset params
|
||||
switch(scs_common) {
|
||||
|
||||
case kHz15:
|
||||
|
||||
switch(pdcch_scs) {
|
||||
case kHz15:
|
||||
AssertFatal(cset_idx<15,"Coreset index %d reserved for scs kHz15/kHz15\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = (cset_idx < 6)? 24 : (cset_idx < 12)? 48 : 96;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_15_15[cset_idx];
|
||||
pdcch_pdu->rb_offset = nr_coreset_rb_offset_pdcch_type_0_scs_15_15[cset_idx];
|
||||
break;
|
||||
|
||||
case kHz30:
|
||||
AssertFatal(cset_idx<14,"Coreset index %d reserved for scs kHz15/kHz30\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = (cset_idx < 8)? 24 : 48;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_15_30[cset_idx];
|
||||
pdcch_pdu->rb_offset = nr_coreset_rb_offset_pdcch_type_0_scs_15_15[cset_idx];
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid scs_common/pdcch_scs combination %d/%d \n", scs_common, pdcch_scs);
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case kHz30:
|
||||
|
||||
if (N_RB < 106) { // Minimum 40Mhz bandwidth not satisfied
|
||||
switch(pdcch_scs) {
|
||||
case kHz15:
|
||||
AssertFatal(cset_idx<9,"Coreset index %d reserved for scs kHz30/kHz15\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = (cset_idx < 10)? 48 : 96;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_30_15_b40Mhz[cset_idx];
|
||||
pdcch_pdu->rb_offset = nr_coreset_rb_offset_pdcch_type_0_scs_30_15_b40Mhz[cset_idx];
|
||||
break;
|
||||
|
||||
case kHz30:
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = (cset_idx < 6)? 24 : 48;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_30_30_b40Mhz[cset_idx];
|
||||
pdcch_pdu->rb_offset = nr_coreset_rb_offset_pdcch_type_0_scs_30_30_b40Mhz[cset_idx];
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid scs_common/pdcch_scs combination %d/%d \n", scs_common, pdcch_scs);
|
||||
}
|
||||
}
|
||||
|
||||
else { // above 40Mhz
|
||||
switch(pdcch_scs) {
|
||||
case kHz15:
|
||||
AssertFatal(cset_idx<9,"Coreset index %d reserved for scs kHz30/kHz15\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = (cset_idx < 3)? 48 : 96;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_30_15_a40Mhz[cset_idx];
|
||||
pdcch_pdu->rb_offset = nr_coreset_rb_offset_pdcch_type_0_scs_30_15_a40Mhz[cset_idx];
|
||||
break;
|
||||
|
||||
case kHz30:
|
||||
AssertFatal(cset_idx<10,"Coreset index %d reserved for scs kHz30/kHz30\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = (cset_idx < 4)? 24 : 48;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_30_30_a40Mhz[cset_idx];
|
||||
pdcch_pdu->rb_offset = nr_coreset_rb_offset_pdcch_type_0_scs_30_30_a40Mhz[cset_idx];
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid scs_common/pdcch_scs combination %d/%d \n", scs_common, pdcch_scs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kHz120:
|
||||
switch(pdcch_scs) {
|
||||
case kHz60:
|
||||
AssertFatal(cset_idx<12,"Coreset index %d reserved for scs kHz120/kHz60\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = (cset_idx < 8)?NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1 : NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE2;
|
||||
pdcch_pdu->n_rb = (cset_idx < 6)? 48 : (cset_idx < 8)? 96 : (cset_idx < 10)? 48 : 96;
|
||||
pdcch_pdu->n_symb = nr_coreset_nsymb_pdcch_type_0_scs_120_60[cset_idx];
|
||||
pdcch_pdu->rb_offset = (nr_coreset_rb_offset_pdcch_type_0_scs_120_60[cset_idx]>0)?nr_coreset_rb_offset_pdcch_type_0_scs_120_60[cset_idx] :
|
||||
(k_ssb == 0)? -41 : -42;
|
||||
break;
|
||||
|
||||
case kHz120:
|
||||
AssertFatal(cset_idx<8,"Coreset index %d reserved for scs kHz120/kHz120\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = (cset_idx < 4)?NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1 : NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE3;
|
||||
pdcch_pdu->n_rb = (cset_idx < 2)? 24 : (cset_idx < 4)? 48 : (cset_idx < 6)? 24 : 48;
|
||||
pdcch_pdu->n_symb = (cset_idx == 2)? 1 : 2;
|
||||
pdcch_pdu->rb_offset = (nr_coreset_rb_offset_pdcch_type_0_scs_120_120[cset_idx]>0)? nr_coreset_rb_offset_pdcch_type_0_scs_120_120[cset_idx] :
|
||||
(k_ssb == 0)? -20 : -21;
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid scs_common/pdcch_scs combination %d/%d \n", scs_common, pdcch_scs);
|
||||
}
|
||||
break;
|
||||
|
||||
case kHz240:
|
||||
switch(pdcch_scs) {
|
||||
case kHz60:
|
||||
AssertFatal(cset_idx<4,"Coreset index %d reserved for scs kHz240/kHz60\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1;
|
||||
pdcch_pdu->n_rb = 96;
|
||||
pdcch_pdu->n_symb = (cset_idx < 2)? 1 : 2;
|
||||
pdcch_pdu->rb_offset = (cset_idx&1)? 16 : 0;
|
||||
break;
|
||||
|
||||
case kHz120:
|
||||
AssertFatal(cset_idx<8,"Coreset index %d reserved for scs kHz240/kHz120\n", cset_idx);
|
||||
pdcch_pdu->mux_pattern = (cset_idx < 4)? NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1 : NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE2;
|
||||
pdcch_pdu->n_rb = (cset_idx < 4)? 48 : (cset_idx < 6)? 24 : 48;
|
||||
pdcch_pdu->n_symb = ((cset_idx==2)||(cset_idx==3))? 2 : 1;
|
||||
pdcch_pdu->rb_offset = (nr_coreset_rb_offset_pdcch_type_0_scs_240_120[cset_idx]>0)? nr_coreset_rb_offset_pdcch_type_0_scs_240_120[cset_idx] :
|
||||
(k_ssb == 0)? -41 : -42;
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid scs_common/pdcch_scs combination %d/%d \n", scs_common, pdcch_scs);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Invalid common subcarrier spacing %d\n", scs_common);
|
||||
|
||||
}
|
||||
|
||||
/// Search space params
|
||||
switch(pdcch_pdu->mux_pattern) {
|
||||
|
||||
case NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE1:
|
||||
if (freq_range == nr_FR1) {
|
||||
O = nr_ss_param_O_type_0_mux1_FR1[ss_idx];
|
||||
pdcch_pdu->nb_ss_sets_per_slot = nr_ss_sets_per_slot_type_0_FR1[ss_idx];
|
||||
M = nr_ss_param_M_type_0_mux1_FR1[ss_idx];
|
||||
M_scale = nr_ss_scale_M_mux1_FR1[ss_idx];
|
||||
pdcch_pdu->first_symbol = (ss_idx < 8)? ( (ssb_idx&1)? pdcch_pdu->n_symb : 0 ) : nr_ss_first_symb_idx_type_0_mux1_FR1[ss_idx - 8];
|
||||
}
|
||||
|
||||
else {
|
||||
AssertFatal(ss_idx<14 ,"Invalid search space index for multiplexing type 1 and FR2 %d\n", ss_idx);
|
||||
O = nr_ss_param_O_type_0_mux1_FR2[ss_idx];
|
||||
O_scale = nr_ss_scale_O_mux1_FR2[ss_idx];
|
||||
pdcch_pdu->nb_ss_sets_per_slot = nr_ss_sets_per_slot_type_0_FR2[ss_idx];
|
||||
M = nr_ss_param_M_type_0_mux1_FR2[ss_idx];
|
||||
M_scale = nr_ss_scale_M_mux1_FR2[ss_idx];
|
||||
pdcch_pdu->first_symbol = (ss_idx < 12)? ( (ss_idx&1)? 7 : 0 ) : 0;
|
||||
}
|
||||
pdcch_pdu->nb_slots = 2;
|
||||
pdcch_pdu->sfn_mod2 = (CEILIDIV( (((O<<mu)>>O_scale) + ((ssb_idx*M)>>M_scale)), nb_slots_per_frame ) & 1)? 1 : 0;
|
||||
pdcch_pdu->first_slot = (((O<<mu)>>O_scale) + ((ssb_idx*M)>>M_scale)) % nb_slots_per_frame;
|
||||
|
||||
break;
|
||||
|
||||
case NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE2:
|
||||
AssertFatal( ((scs_common==kHz120)&&(pdcch_scs==kHz60)) || ((scs_common==kHz240)&&(pdcch_scs==kHz120)),
|
||||
"Invalid scs_common/pdcch_scs combination %d/%d for Mux type 2\n", scs_common, pdcch_scs );
|
||||
AssertFatal(ss_idx==0, "Search space index %d reserved for scs_common/pdcch_scs combination %d/%d", ss_idx, scs_common, pdcch_scs);
|
||||
|
||||
pdcch_pdu->nb_slots = 1;
|
||||
|
||||
if ((scs_common==kHz120)&&(pdcch_scs==kHz60)) {
|
||||
pdcch_pdu->first_symbol = nr_ss_first_symb_idx_scs_120_60_mux2[ssb_idx&3];
|
||||
// Missing in pdcch_pdu sfn_C and n_C here and in else case
|
||||
}
|
||||
else {
|
||||
pdcch_pdu->first_symbol = ((ssb_idx&7)==4)?12 : ((ssb_idx&7)==4)?13 : nr_ss_first_symb_idx_scs_240_120_set1_mux2[ssb_idx&7]; //???
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case NFAPI_NR_SSB_AND_CSET_MUX_PATTERN_TYPE3:
|
||||
AssertFatal( (scs_common==kHz120)&&(pdcch_scs==kHz120),
|
||||
"Invalid scs_common/pdcch_scs combination %d/%d for Mux type 3\n", scs_common, pdcch_scs );
|
||||
AssertFatal(ss_idx==0, "Search space index %d reserved for scs_common/pdcch_scs combination %d/%d", ss_idx, scs_common, pdcch_scs);
|
||||
|
||||
pdcch_pdu->first_symbol = nr_ss_first_symb_idx_scs_120_120_mux3[ssb_idx&3];
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0, "Invalid SSB and coreset multiplexing pattern %d\n", pdcch_pdu->mux_pattern);
|
||||
}
|
||||
pdcch_pdu->config_type = NFAPI_NR_CSET_CONFIG_MIB_SIB1;
|
||||
pdcch_pdu->cr_mapping_type = NFAPI_NR_CCE_REG_MAPPING_INTERLEAVED;
|
||||
pdcch_pdu->precoder_granularity = NFAPI_NR_CSET_SAME_AS_REG_BUNDLE;
|
||||
pdcch_pdu->reg_bundle_size = 6;
|
||||
pdcch_pdu->interleaver_size = 2;
|
||||
// set initial banwidth part to full bandwidth
|
||||
pdcch_pdu->n_RB_BWP = N_RB;
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
void config_uldci(const NR_SIB1_t *sib1,
|
||||
const NR_ServingCellConfigCommon_t *scc,
|
||||
const nfapi_nr_pusch_pdu_t *pusch_pdu,
|
||||
|
||||
@@ -1549,7 +1549,8 @@ void pf_ul(module_id_t module_id,
|
||||
NR_UE_info_t *UE_list[],
|
||||
int max_num_ue,
|
||||
int n_rb_sched,
|
||||
uint16_t *rballoc_mask) {
|
||||
uint16_t *rballoc_mask)
|
||||
{
|
||||
|
||||
const int CC_id = 0;
|
||||
gNB_MAC_INST *nrmac = RC.nrmac[module_id];
|
||||
@@ -1887,12 +1888,16 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
||||
for (int i = 0; i < bwpSize; i++)
|
||||
rballoc_mask[i] = (i >= st && i <= e)*SL_to_bitmap(startSymbolIndex, nrOfSymbols);
|
||||
|
||||
int bw = scc->uplinkConfigCommon->frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
||||
int average_agg_level = 4; // TODO find a better estimation
|
||||
int max_sched_ues = bw / (average_agg_level * NR_NB_REG_PER_CCE);
|
||||
|
||||
/* proportional fair scheduling algorithm */
|
||||
pf_ul(module_id,
|
||||
frame,
|
||||
slot,
|
||||
nr_mac->UE_info.list,
|
||||
2,
|
||||
max_sched_ues,
|
||||
len,
|
||||
rballoc_mask);
|
||||
return true;
|
||||
|
||||
@@ -221,25 +221,6 @@ int get_pdsch_to_harq_feedback(NR_PUCCH_Config_t *pucch_Config,
|
||||
nr_dci_format_t dci_format,
|
||||
uint8_t *pdsch_to_harq_feedback);
|
||||
|
||||
void nr_configure_css_dci_initial(nfapi_nr_dl_tti_pdcch_pdu_rel15_t* pdcch_pdu,
|
||||
nr_scs_e scs_common,
|
||||
nr_scs_e pdcch_scs,
|
||||
frequency_range_t freq_range,
|
||||
uint8_t rmsi_pdcch_config,
|
||||
uint8_t ssb_idx,
|
||||
uint8_t k_ssb,
|
||||
uint16_t sfn_ssb,
|
||||
uint8_t n_ssb,
|
||||
uint16_t nb_slots_per_frame,
|
||||
uint16_t N_RB);
|
||||
/*
|
||||
int nr_is_dci_opportunity(nfapi_nr_search_space_t search_space,
|
||||
nfapi_nr_coreset_t coreset,
|
||||
uint16_t frame,
|
||||
uint16_t slot,
|
||||
nfapi_nr_config_request_scf_t cfg);
|
||||
*/
|
||||
|
||||
int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset,
|
||||
NR_PUCCH_Config_t *pucch_Config,
|
||||
int CCEIndex);
|
||||
|
||||
Reference in New Issue
Block a user