mirror of https://github.com/PentHertz/srsLTE.git
increase mcs ul upper bound to 24 when ue is cat4 and enb supports 64qam. Simplified max_mcs computation
This commit is contained in:
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
|
||||
ant_info_ded_t dl_ant_info;
|
||||
bool use_tbs_index_alt = false;
|
||||
bool support_ul_64qam = false;
|
||||
uint32_t measgap_period = 0;
|
||||
uint32_t measgap_offset = 0;
|
||||
enum class ul64qam_cap { undefined, disabled, enabled };
|
||||
ul64qam_cap support_ul64qam = ul64qam_cap::undefined;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -73,7 +73,7 @@ struct cc_sched_ue {
|
|||
uint32_t ul_cqi_tti = 0;
|
||||
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;
|
||||
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)
|
||||
{
|
||||
using ul64qam_cap = sched_interface::ue_cfg_t::ul64qam_cap;
|
||||
uint32_t cqi, max_mcs, max_Qm;
|
||||
float max_coderate;
|
||||
if (is_ul) {
|
||||
cqi = ul_cqi;
|
||||
// if cell supports UL 64QAM but the UE does not support it, cap the mcs to avoid Qm == 6
|
||||
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_ul_64qam ? 6 : 4;
|
||||
cqi = ul_cqi;
|
||||
max_mcs = max_mcs_ul;
|
||||
max_Qm = cfg->support_ul64qam == ul64qam_cap::enabled ? 6 : 4;
|
||||
max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), false);
|
||||
} else {
|
||||
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_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;
|
||||
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;
|
||||
|
||||
// set fixed mcs
|
||||
|
@ -1299,6 +1294,17 @@ void cc_sched_ue::set_cfg(const sched_interface::ue_cfg_t& cfg_)
|
|||
cfg = &cfg_;
|
||||
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) {
|
||||
// PCell is always 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
|
||||
* only take effect after the RRCReconfigurationComplete is received
|
||||
*/
|
||||
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
|
||||
const rrc_conn_recfg_r8_ies_s& conn_recfg,
|
||||
const ue_cell_ded_list& ue_cell_list);
|
||||
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
|
||||
const rrc_conn_recfg_r8_ies_s& conn_recfg,
|
||||
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
|
||||
|
@ -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,
|
||||
const rrc_conn_recfg_r8_ies_s& conn_recfg,
|
||||
const ue_cell_ded_list& ue_cell_list)
|
||||
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
|
||||
const rrc_conn_recfg_r8_ies_s& conn_recfg,
|
||||
const ue_cell_ded_list& ue_cell_list)
|
||||
{
|
||||
// Configure RadioResourceConfigDedicated
|
||||
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)
|
||||
{
|
||||
ue_cfg.support_ul_64qam =
|
||||
uecaps.support_ul_64qam and rrc_cfg.sibs[1].sib2().rr_cfg_common.pusch_cfg_common.pusch_cfg_basic.enable64_qam;
|
||||
bool enb_enable64qam = 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
|
||||
|
|
Loading…
Reference in New Issue