summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/intel/iwlwifi/mvm/tests
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2024-05-05 09:19:55 +0300
committerJohannes Berg <johannes.berg@intel.com>2024-05-06 16:33:24 +0200
commit2f876f910b34061b0c4bb744dee3174c9881da1f (patch)
treeadf784df9eb28f63d0db39c041a6c3ad828ff862 /drivers/net/wireless/intel/iwlwifi/mvm/tests
parentae7fe563e572dde754e905c85ae575a4a2726eaa (diff)
wifi: iwlwifi: mvm: exit EMLSR when CSA happens
If CSA is happening, then exit EMLSR to keep the better link, which is the primary link unless that's doing the CSA with quiet. This is done because we can't transmit the OMN frame on a quiet link, but want to exit EMLSR during CSA for better beacon reception, so we can follow the switch accurately. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://msgid.link/20240505091420.3ffff9577f08.I2620971fa5aef789e0d4a588def4c2621e8bed5b@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/tests')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c b/drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c
index 66dd89103dfe..f49e3c98b1ba 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c
@@ -10,6 +10,14 @@
MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);
+static struct wiphy wiphy = {
+ .mtx = __MUTEX_INITIALIZER(wiphy.mtx),
+};
+
+static struct ieee80211_hw hw = {
+ .wiphy = &wiphy,
+};
+
static struct ieee80211_channel chan_5ghz = {
.band = NL80211_BAND_5GHZ,
};
@@ -50,7 +58,10 @@ static struct iwl_fw fw = {
},
};
-static struct iwl_mvm mvm = {.fw = &fw};
+static struct iwl_mvm mvm = {
+ .hw = &hw,
+ .fw = &fw,
+};
static const struct link_grading_case {
const char *desc;
@@ -237,6 +248,7 @@ static const struct valid_link_pair_case {
enum nl80211_chan_width cw_b;
s32 sig_a;
s32 sig_b;
+ bool csa_a;
bool valid;
} valid_link_pair_cases[] = {
{
@@ -335,6 +347,17 @@ static const struct valid_link_pair_case {
.cw_b = NL80211_CHAN_WIDTH_160,
.valid = true,
},
+ {
+ .desc = "CSA active",
+ .chan_a = &chan_6ghz,
+ .cw_a = NL80211_CHAN_WIDTH_160,
+ .sig_a = -5,
+ .chan_b = &chan_5ghz,
+ .cw_b = NL80211_CHAN_WIDTH_160,
+ .valid = false,
+ /* same as previous entry with valid=true except for CSA */
+ .csa_a = true,
+ },
};
KUNIT_ARRAY_PARAM_DESC(valid_link_pair, valid_link_pair_cases, desc)
@@ -358,6 +381,7 @@ static void test_valid_link_pair(struct kunit *test)
.link_id = 5,
.signal = params->sig_b,
};
+ struct ieee80211_bss_conf *conf;
bool result;
KUNIT_ASSERT_NOT_NULL(test, vif);
@@ -377,7 +401,20 @@ static void test_valid_link_pair(struct kunit *test)
mvm.last_bt_notif.wifi_loss_low_rssi = params->bt;
mvmvif->mvm = &mvm;
+ conf = kunit_kzalloc(test, sizeof(*vif->link_conf[0]), GFP_KERNEL);
+ KUNIT_ASSERT_NOT_NULL(test, conf);
+ conf->chanreq.oper = chandef_a;
+ conf->csa_active = params->csa_a;
+ vif->link_conf[link_a.link_id] = (void __rcu *)conf;
+
+ conf = kunit_kzalloc(test, sizeof(*vif->link_conf[0]), GFP_KERNEL);
+ KUNIT_ASSERT_NOT_NULL(test, conf);
+ conf->chanreq.oper = chandef_b;
+ vif->link_conf[link_b.link_id] = (void __rcu *)conf;
+
+ wiphy_lock(&wiphy);
result = iwl_mvm_mld_valid_link_pair(vif, &link_a, &link_b);
+ wiphy_unlock(&wiphy);
KUNIT_EXPECT_EQ(test, result, params->valid);