Lines Matching +full:fw +full:- +full:cfg

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
5 * Copyright (C) 2024-2025 Intel Corporation
8 #include <kunit/test-bug.h>
14 #include "fw/api/scan.h"
15 #include "fw/api/mac-cfg.h"
16 #include "iwl-trans.h"
27 const struct iwl_rf_cfg *cfg; in iwlmld_kunit_test_init() local
28 struct iwl_fw *fw; in iwlmld_kunit_test_init() local
32 KUNIT_ALLOC_AND_ASSERT(test, trans->dev); in iwlmld_kunit_test_init()
33 KUNIT_ALLOC_AND_ASSERT(test, cfg); in iwlmld_kunit_test_init()
34 KUNIT_ALLOC_AND_ASSERT(test, fw); in iwlmld_kunit_test_init()
36 KUNIT_ALLOC_AND_ASSERT(test, hw->wiphy); in iwlmld_kunit_test_init()
38 mutex_init(&hw->wiphy->mtx); in iwlmld_kunit_test_init()
42 iwl_construct_mld(mld, trans, cfg, fw, hw, NULL); in iwlmld_kunit_test_init()
44 fw->ucode_capa.num_stations = IWL_STATION_COUNT_MAX; in iwlmld_kunit_test_init()
45 fw->ucode_capa.num_links = IWL_FW_MAX_LINK_ID + 1; in iwlmld_kunit_test_init()
47 mld->fwrt.trans = trans; in iwlmld_kunit_test_init()
48 mld->fwrt.fw = fw; in iwlmld_kunit_test_init()
49 mld->fwrt.dev = trans->dev; in iwlmld_kunit_test_init()
51 /* TODO: add priv_size to hw allocation and setup hw->priv to enable in iwlmld_kunit_test_init()
55 KUNIT_ALLOC_AND_ASSERT(test, mld->nvm_data); in iwlmld_kunit_test_init()
56 KUNIT_ALLOC_AND_ASSERT_SIZE(test, mld->scan.cmd, in iwlmld_kunit_test_init()
58 mld->scan.cmd_size = sizeof(struct iwl_scan_req_umac_v17); in iwlmld_kunit_test_init()
63 mld->trans->state = IWL_TRANS_FW_ALIVE; in iwlmld_kunit_test_init()
64 mld->fw_status.running = true; in iwlmld_kunit_test_init()
67 test->priv = mld; in iwlmld_kunit_test_init()
78 struct iwl_mld *mld = test->priv; in IWL_MLD_ALLOC_FN()
83 rcu_assign_pointer(vif->link_conf[link_id], link); in IWL_MLD_ALLOC_FN()
84 link->link_id = link_id; in IWL_MLD_ALLOC_FN()
85 link->vif = vif; in IWL_MLD_ALLOC_FN()
86 link->beacon_int = 100; in IWL_MLD_ALLOC_FN()
87 link->dtim_period = 3; in IWL_MLD_ALLOC_FN()
88 link->qos = true; in IWL_MLD_ALLOC_FN()
91 ret = iwl_mld_allocate_link_fw_id(mld, &mld_link->fw_id, link); in IWL_MLD_ALLOC_FN()
93 rcu_assign_pointer(mld_vif->link[link_id], mld_link); in IWL_MLD_ALLOC_FN()
94 rcu_assign_pointer(vif->link_conf[link_id], link); in IWL_MLD_ALLOC_FN()
103 struct iwl_mld *mld = test->priv; in IWL_MLD_ALLOC_FN()
114 vif->type = type; in IWL_MLD_ALLOC_FN()
116 mld_vif->mld = mld; in IWL_MLD_ALLOC_FN()
118 ret = iwl_mld_allocate_vif_fw_id(mld, &mld_vif->fw_id, vif); in IWL_MLD_ALLOC_FN()
126 iwlmld_kunit_init_link(vif, &vif->bss_conf, &mld_vif->deflink, 0); in IWL_MLD_ALLOC_FN()
143 vif->valid_links |= BIT(link_id); in iwlmld_kunit_add_link()
152 struct iwl_mld *mld = test->priv; in iwlmld_kunit_add_chanctx()
160 ctx->def = *def; in iwlmld_kunit_add_chanctx()
161 ctx->min_def = *def; in iwlmld_kunit_add_chanctx()
162 ctx->ap = *def; in iwlmld_kunit_add_chanctx()
170 phy->fw_id = fw_id; in iwlmld_kunit_add_chanctx()
171 phy->mld = mld; in iwlmld_kunit_add_chanctx()
172 phy->chandef = *def; in iwlmld_kunit_add_chanctx()
182 struct iwl_mld *mld = test->priv; in iwlmld_kunit_assign_chanctx_to_link()
185 KUNIT_EXPECT_NULL(test, rcu_access_pointer(link->chanctx_conf)); in iwlmld_kunit_assign_chanctx_to_link()
186 rcu_assign_pointer(link->chanctx_conf, ctx); in iwlmld_kunit_assign_chanctx_to_link()
188 lockdep_assert_wiphy(mld->wiphy); in iwlmld_kunit_assign_chanctx_to_link()
192 KUNIT_EXPECT_NULL(test, rcu_access_pointer(mld_link->chan_ctx)); in iwlmld_kunit_assign_chanctx_to_link()
193 KUNIT_EXPECT_FALSE(test, mld_link->active); in iwlmld_kunit_assign_chanctx_to_link()
195 rcu_assign_pointer(mld_link->chan_ctx, ctx); in iwlmld_kunit_assign_chanctx_to_link()
196 mld_link->active = true; in iwlmld_kunit_assign_chanctx_to_link()
199 vif->active_links |= BIT(link->link_id); in iwlmld_kunit_assign_chanctx_to_link()
211 struct iwl_mld *mld = test->priv; in IWL_MLD_ALLOC_FN()
216 link_sta->link_id = link_id; in IWL_MLD_ALLOC_FN()
217 rcu_assign_pointer(sta->link[link_id], link_sta); in IWL_MLD_ALLOC_FN()
219 link_sta->sta = sta; in IWL_MLD_ALLOC_FN()
224 mld_link_sta->fw_id = fw_id; in IWL_MLD_ALLOC_FN()
226 rcu_assign_pointer(mld_sta->link[link_id], mld_link_sta); in IWL_MLD_ALLOC_FN()
237 KUNIT_ASSERT_TRUE(test, sta->valid_links); in iwlmld_kunit_alloc_link_sta()
244 sta->valid_links |= BIT(link_id); in iwlmld_kunit_alloc_link_sta()
263 mld_sta->vif = vif; in iwlmld_kunit_add_sta()
264 mld_sta->mld = test->priv; in iwlmld_kunit_add_sta()
267 mld_sta->sta_type = STATION_TYPE_PEER; in iwlmld_kunit_add_sta()
270 iwlmld_kunit_add_link_sta(sta, &sta->deflink, in iwlmld_kunit_add_sta()
271 &mld_sta->deflink, link_id); in iwlmld_kunit_add_sta()
272 sta->valid_links = BIT(link_id); in iwlmld_kunit_add_sta()
274 iwlmld_kunit_add_link_sta(sta, &sta->deflink, in iwlmld_kunit_add_sta()
275 &mld_sta->deflink, 0); in iwlmld_kunit_add_sta()
293 mld_sta->sta_state = state; in iwlmld_kunit_move_sta_state()
295 mld_vif = iwl_mld_vif_from_mac80211(mld_sta->vif); in iwlmld_kunit_move_sta_state()
296 mld_vif->authorized = state == IEEE80211_STA_AUTHORIZED; in iwlmld_kunit_move_sta_state()
298 if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) in iwlmld_kunit_move_sta_state()
299 mld_vif->ap_sta = sta; in iwlmld_kunit_move_sta_state()
312 /* First - allocate and init the STA */ in iwlmld_kunit_setup_sta()
328 vif->cfg.assoc = 1; in iwlmld_kunit_set_vif_associated()
335 struct iwl_mld *mld = test->priv; in iwlmld_kunit_setup_assoc()
340 KUNIT_ASSERT_TRUE(test, mlo || assoc_link->id == 0); in iwlmld_kunit_setup_assoc()
345 link = iwlmld_kunit_add_link(vif, assoc_link->id); in iwlmld_kunit_setup_assoc()
347 link = &vif->bss_conf; in iwlmld_kunit_setup_assoc()
349 chan_ctx = iwlmld_kunit_add_chanctx(assoc_link->chandef); in iwlmld_kunit_setup_assoc()
351 wiphy_lock(mld->wiphy); in iwlmld_kunit_setup_assoc()
353 wiphy_unlock(mld->wiphy); in iwlmld_kunit_setup_assoc()
355 /* The AP sta will now be pointer to by mld_vif->ap_sta */ in iwlmld_kunit_setup_assoc()
356 iwlmld_kunit_setup_sta(vif, IEEE80211_STA_AUTHORIZED, assoc_link->id); in iwlmld_kunit_setup_assoc()
373 KUNIT_ASSERT_TRUE(test, valid_links & BIT(assoc_link->id)); in iwlmld_kunit_setup_mlo_assoc()
379 u8 other_link_id = ffs(valid_links & ~BIT(assoc_link->id)) - 1; in iwlmld_kunit_setup_mlo_assoc()
401 memcpy(pkt->data, notif, notif_sz); in _iwl_mld_kunit_create_pkt()
402 pkt->len_n_flags = cpu_to_le32(sizeof(pkt->hdr) + notif_sz); in _iwl_mld_kunit_create_pkt()
411 struct iwl_mld *mld = test->priv; in iwlmld_kunit_assoc_emlsr()
417 u16 valid_links = BIT(link1->id) | BIT(link2->id); in iwlmld_kunit_assoc_emlsr()
425 wiphy_lock(mld->wiphy); in iwlmld_kunit_assoc_emlsr()
427 link = wiphy_dereference(mld->wiphy, vif->link_conf[link2->id]); in iwlmld_kunit_assoc_emlsr()
430 chan_ctx = iwlmld_kunit_add_chanctx(link2->chandef); in iwlmld_kunit_assoc_emlsr()
433 wiphy_unlock(mld->wiphy); in iwlmld_kunit_assoc_emlsr()
436 sta = mld_vif->ap_sta; in iwlmld_kunit_assoc_emlsr()
439 iwlmld_kunit_alloc_link_sta(sta, link2->id); in iwlmld_kunit_assoc_emlsr()
451 elem->id = id; in iwlmld_kunit_gen_element()
452 elem->datalen = len; in iwlmld_kunit_gen_element()
453 memcpy(elem->data, data, len); in iwlmld_kunit_gen_element()
462 struct iwl_mld *mld = test->priv; in iwlmld_kunit_get_phy_of_link()
465 wiphy_dereference(mld->wiphy, vif->link_conf[link_id]); in iwlmld_kunit_get_phy_of_link()
469 chanctx = wiphy_dereference(mld->wiphy, link->chanctx_conf); in iwlmld_kunit_get_phy_of_link()
488 const struct chandef_case *params = test->param_value; in test_iwl_mld_chandef_valid()
490 KUNIT_EXPECT_EQ(test, true, cfg80211_chandef_valid(params->chandef)); in test_iwl_mld_chandef_valid()