increase mcs ul upper bound to 24 when ue is cat4 and enb supports 64qam. Simplified max_mcs computation

master
Francisco 4 years ago committed by Andre Puschmann
parent 3d80ff4831
commit f07e52129c

@ -146,9 +146,10 @@ public:
std::vector<cc_cfg_t> supported_cc_list; ///< list of UE supported CCs. First index for PCell std::vector<cc_cfg_t> supported_cc_list; ///< list of UE supported CCs. First index for PCell
ant_info_ded_t dl_ant_info; ant_info_ded_t dl_ant_info;
bool use_tbs_index_alt = false; bool use_tbs_index_alt = false;
bool support_ul_64qam = false;
uint32_t measgap_period = 0; uint32_t measgap_period = 0;
uint32_t measgap_offset = 0; uint32_t measgap_offset = 0;
enum class ul64qam_cap { undefined, disabled, enabled };
ul64qam_cap support_ul64qam = ul64qam_cap::undefined;
}; };
typedef struct { typedef struct {

@ -73,7 +73,7 @@ struct cc_sched_ue {
uint32_t ul_cqi_tti = 0; uint32_t ul_cqi_tti = 0;
bool dl_cqi_rx = false; bool dl_cqi_rx = false;
uint32_t max_mcs_dl = 28, max_mcs_dl_alt = 27, max_mcs_ul = 28; uint32_t max_mcs_dl = 28, max_mcs_ul = 28;
uint32_t max_aggr_level = 3; uint32_t max_aggr_level = 3;
int fixed_mcs_ul = 0, fixed_mcs_dl = 0; int fixed_mcs_ul = 0, fixed_mcs_dl = 0;

@ -1201,17 +1201,17 @@ int sched_ue::enb_to_ue_cc_idx(uint32_t enb_cc_idx) const
int cc_sched_ue::cqi_to_tbs(uint32_t nof_prb, uint32_t nof_re, bool use_tbs_index_alt, bool is_ul, uint32_t* mcs) int cc_sched_ue::cqi_to_tbs(uint32_t nof_prb, uint32_t nof_re, bool use_tbs_index_alt, bool is_ul, uint32_t* mcs)
{ {
using ul64qam_cap = sched_interface::ue_cfg_t::ul64qam_cap;
uint32_t cqi, max_mcs, max_Qm; uint32_t cqi, max_mcs, max_Qm;
float max_coderate; float max_coderate;
if (is_ul) { if (is_ul) {
cqi = ul_cqi; cqi = ul_cqi;
// if cell supports UL 64QAM but the UE does not support it, cap the mcs to avoid Qm == 6 max_mcs = max_mcs_ul;
max_mcs = (not cfg->support_ul_64qam and cell_params->cfg.enable_64qam) ? std::min(max_mcs_ul, 20u) : max_mcs_ul; max_Qm = cfg->support_ul64qam == ul64qam_cap::enabled ? 6 : 4;
max_Qm = cfg->support_ul_64qam ? 6 : 4;
max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), false); max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), false);
} else { } else {
cqi = dl_cqi; cqi = dl_cqi;
max_mcs = cfg->use_tbs_index_alt ? max_mcs_dl_alt : max_mcs_dl; max_mcs = max_mcs_dl;
max_Qm = use_tbs_index_alt ? 8 : 6; max_Qm = use_tbs_index_alt ? 8 : 6;
max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), use_tbs_index_alt); max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), use_tbs_index_alt);
} }
@ -1262,11 +1262,6 @@ cc_sched_ue::cc_sched_ue(const sched_interface::ue_cfg_t& cfg_,
dl_cqi = (ue_cc_idx == 0) ? cell_params->cfg.initial_dl_cqi : 0; dl_cqi = (ue_cc_idx == 0) ? cell_params->cfg.initial_dl_cqi : 0;
set_cfg(cfg_); set_cfg(cfg_);
// set max mcs
max_mcs_ul = cell_params->sched_cfg->pusch_max_mcs >= 0 ? cell_params->sched_cfg->pusch_max_mcs : 28;
max_mcs_dl = cell_params->sched_cfg->pdsch_max_mcs >= 0 ? cell_params->sched_cfg->pdsch_max_mcs : 28;
max_mcs_dl_alt =
cell_params->sched_cfg->pdsch_max_mcs >= 0 ? SRSLTE_MIN(cell_params->sched_cfg->pdsch_max_mcs, 27) : 27;
max_aggr_level = cell_params->sched_cfg->max_aggr_level >= 0 ? cell_params->sched_cfg->max_aggr_level : 3; max_aggr_level = cell_params->sched_cfg->max_aggr_level >= 0 ? cell_params->sched_cfg->max_aggr_level : 3;
// set fixed mcs // set fixed mcs
@ -1299,6 +1294,17 @@ void cc_sched_ue::set_cfg(const sched_interface::ue_cfg_t& cfg_)
cfg = &cfg_; cfg = &cfg_;
cfg_tti = last_tti; cfg_tti = last_tti;
// set max mcs
max_mcs_ul = cell_params->sched_cfg->pusch_max_mcs >= 0 ? cell_params->sched_cfg->pusch_max_mcs : 28u;
if (cell_params->cfg.enable_64qam) {
const uint32_t max_64qam_mcs[] = {20, 24, 28};
max_mcs_ul = std::min(max_mcs_ul, max_64qam_mcs[(size_t)cfg->support_ul64qam]);
}
max_mcs_dl = cell_params->sched_cfg->pdsch_max_mcs >= 0 ? std::min(cell_params->sched_cfg->pdsch_max_mcs, 28) : 28u;
if (cfg->use_tbs_index_alt) {
max_mcs_dl = std::min(max_mcs_dl, 27u);
}
if (ue_cc_idx == 0) { if (ue_cc_idx == 0) {
// PCell is always active // PCell is always active
cc_state_ = cc_st::active; cc_state_ = cc_st::active;

@ -62,9 +62,9 @@ void ue_cfg_apply_srb_updates(ue_cfg_t& ue_cfg, const srb_to_add_mod_list_l& srb
* Adds to sched_interface::ue_cfg_t the changes present in the asn1 RRCReconfiguration message that should * Adds to sched_interface::ue_cfg_t the changes present in the asn1 RRCReconfiguration message that should
* only take effect after the RRCReconfigurationComplete is received * only take effect after the RRCReconfigurationComplete is received
*/ */
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg, void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
const rrc_conn_recfg_r8_ies_s& conn_recfg, const rrc_conn_recfg_r8_ies_s& conn_recfg,
const ue_cell_ded_list& ue_cell_list); const ue_cell_ded_list& ue_cell_list);
/** /**
* Adds to sched_interface::ue_cfg_t the changes present in the asn1 RRCReconfiguration message related to * Adds to sched_interface::ue_cfg_t the changes present in the asn1 RRCReconfiguration message related to
@ -389,9 +389,9 @@ void ue_cfg_apply_srb_updates(ue_cfg_t& ue_cfg, const srb_to_add_mod_list_l& srb
} }
} }
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg, void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
const rrc_conn_recfg_r8_ies_s& conn_recfg, const rrc_conn_recfg_r8_ies_s& conn_recfg,
const ue_cell_ded_list& ue_cell_list) const ue_cell_ded_list& ue_cell_list)
{ {
// Configure RadioResourceConfigDedicated // Configure RadioResourceConfigDedicated
if (conn_recfg.rr_cfg_ded_present) { if (conn_recfg.rr_cfg_ded_present) {
@ -499,8 +499,11 @@ void ue_cfg_apply_conn_reconf(ue_cfg_t& ue_cfg, const rrc_conn_recfg_r8_ies_s& c
void ue_cfg_apply_capabilities(ue_cfg_t& ue_cfg, const rrc_cfg_t& rrc_cfg, const srslte::rrc_ue_capabilities_t& uecaps) void ue_cfg_apply_capabilities(ue_cfg_t& ue_cfg, const rrc_cfg_t& rrc_cfg, const srslte::rrc_ue_capabilities_t& uecaps)
{ {
ue_cfg.support_ul_64qam = bool enb_enable64qam = rrc_cfg.sibs[1].sib2().rr_cfg_common.pusch_cfg_common.pusch_cfg_basic.enable64_qam;
uecaps.support_ul_64qam and rrc_cfg.sibs[1].sib2().rr_cfg_common.pusch_cfg_common.pusch_cfg_basic.enable64_qam; ue_cfg.support_ul64qam = ue_cfg_t::ul64qam_cap::undefined;
if (enb_enable64qam) {
ue_cfg.support_ul64qam = uecaps.support_ul_64qam ? ue_cfg_t::ul64qam_cap::enabled : ue_cfg_t::ul64qam_cap::disabled;
}
} }
} // namespace srsenb } // namespace srsenb

Loading…
Cancel
Save