&callbacks);
}
+static bool iwl_mvm_esr_bw_criteria(struct iwl_mvm *mvm,
+ struct ieee80211_vif *vif,
+ struct ieee80211_bss_conf *link_conf)
+{
+ struct ieee80211_bss_conf *other_link;
+ int link_id;
+
+ /* Exit EMLSR if links don't have equal bandwidths */
+ for_each_vif_active_link(vif, other_link, link_id) {
+ if (link_id == link_conf->link_id)
+ continue;
+ if (link_conf->chanreq.oper.width ==
+ other_link->chanreq.oper.width)
+ return true;
+ }
+
+ return false;
+}
+
static void
iwl_mvm_mld_link_info_changed_station(struct iwl_mvm *mvm,
struct ieee80211_vif *vif,
link_changes |= LINK_CONTEXT_MODIFY_HE_PARAMS;
}
+ if ((changes & BSS_CHANGED_BANDWIDTH) &&
+ ieee80211_vif_link_active(vif, link_conf->link_id) &&
+ mvmvif->esr_active &&
+ !iwl_mvm_esr_bw_criteria(mvm, vif, link_conf))
+ iwl_mvm_exit_esr(mvm, vif,
+ IWL_MVM_ESR_EXIT_BANDWIDTH,
+ iwl_mvm_get_primary_link(vif));
+
/* if associated, maybe puncturing changed - we'll check later */
if (vif->cfg.assoc)
link_changes |= LINK_CONTEXT_MODIFY_EHT_PARAMS;
} valid_link_pair_cases[] = {
{
.desc = "HB + UHB, valid.",
- .chan_a = &chan_5ghz,
- .chan_b = &chan_6ghz,
+ .chan_a = &chan_6ghz,
+ .chan_b = &chan_5ghz,
.valid = true,
},
{
.desc = "LB + HB, no BT.",
.chan_a = &chan_2ghz,
.chan_b = &chan_5ghz,
- .valid = true,
+ .valid = false,
},
{
.desc = "LB + HB, with BT.",
.valid = false,
},
{
- .desc = "RSSI: LB, 20 MHz, high",
- .chan_a = &chan_2ghz,
+ .desc = "RSSI: UHB, 20 MHz, high",
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_20,
.sig_a = -66,
.chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_20,
.valid = true,
},
{
- .desc = "RSSI: LB, 40 MHz, low",
- .chan_a = &chan_2ghz,
+ .desc = "RSSI: UHB, 40 MHz, low",
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_40,
.sig_a = -65,
.chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_40,
.valid = false,
},
{
- .desc = "RSSI: LB, 40 MHz, high",
- .chan_a = &chan_2ghz,
+ .desc = "RSSI: UHB, 40 MHz, high",
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_40,
.sig_a = -63,
.chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_40,
.valid = true,
},
{
- .desc = "RSSI: HB, 80 MHz, low",
- .chan_a = &chan_5ghz,
+ .desc = "RSSI: UHB, 80 MHz, low",
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_80,
.sig_a = -62,
- .chan_b = &chan_2ghz,
+ .chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_80,
.valid = false,
},
{
- .desc = "RSSI: HB, 80 MHz, high",
- .chan_a = &chan_5ghz,
+ .desc = "RSSI: UHB, 80 MHz, high",
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_80,
.sig_a = -60,
- .chan_b = &chan_2ghz,
+ .chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_80,
.valid = true,
},
{
- .desc = "RSSI: HB, 160 MHz, low",
- .chan_a = &chan_5ghz,
+ .desc = "RSSI: UHB, 160 MHz, low",
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_160,
.sig_a = -59,
- .chan_b = &chan_2ghz,
+ .chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_160,
.valid = false,
},
{
.desc = "RSSI: HB, 160 MHz, high",
- .chan_a = &chan_5ghz,
+ .chan_a = &chan_6ghz,
.cw_a = NL80211_CHAN_WIDTH_160,
.sig_a = -5,
- .chan_b = &chan_2ghz,
- .valid = true,
- },
- {
- .desc = "RSSI: UHB, 320 MHz, low",
- .chan_a = &chan_6ghz,
- .cw_a = NL80211_CHAN_WIDTH_320,
- .sig_a = -68,
- .chan_b = &chan_6ghz,
- .valid = false,
- },
- {
- .desc = "RSSI: UHB, 320 MHz, high",
- .chan_a = &chan_6ghz,
- .cw_a = NL80211_CHAN_WIDTH_320,
- .sig_a = -66,
.chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_160,
.valid = true,
},
};