mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
wifi: iwlwifi: add kunit tests for nvm parse
nvm flags is part of nvm parse. Add test for VLP AP/CLIENT enable/disable scenarios. Signed-off-by: Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20250909061931.a7a4713fbfee.Ia0caf8865e63b40826c9b66084bd20438554f15c@changeid
This commit is contained in:
parent
59cb902371
commit
7a7c52645c
|
|
@ -139,50 +139,6 @@ static struct ieee80211_rate iwl_cfg80211_rates[] = {
|
|||
#define RATES_52_OFFS 4
|
||||
#define N_RATES_52 (N_RATES_24 - RATES_52_OFFS)
|
||||
|
||||
/**
|
||||
* enum iwl_nvm_channel_flags - channel flags in NVM
|
||||
* @NVM_CHANNEL_VALID: channel is usable for this SKU/geo
|
||||
* @NVM_CHANNEL_IBSS: usable as an IBSS channel and deprecated
|
||||
* when %IWL_NVM_SBANDS_FLAGS_LAR enabled.
|
||||
* @NVM_CHANNEL_ALLOW_20MHZ_ACTIVITY: active scanning allowed and
|
||||
* AP allowed only in 20 MHz. Valid only
|
||||
* when %IWL_NVM_SBANDS_FLAGS_LAR enabled.
|
||||
* @NVM_CHANNEL_ACTIVE: active scanning allowed and allows IBSS
|
||||
* when %IWL_NVM_SBANDS_FLAGS_LAR enabled.
|
||||
* @NVM_CHANNEL_RADAR: radar detection required
|
||||
* @NVM_CHANNEL_INDOOR_ONLY: only indoor use is allowed
|
||||
* @NVM_CHANNEL_GO_CONCURRENT: GO operation is allowed when connected to BSS
|
||||
* on same channel on 2.4 or same UNII band on 5.2
|
||||
* @NVM_CHANNEL_UNIFORM: uniform spreading required
|
||||
* @NVM_CHANNEL_20MHZ: 20 MHz channel okay
|
||||
* @NVM_CHANNEL_40MHZ: 40 MHz channel okay
|
||||
* @NVM_CHANNEL_80MHZ: 80 MHz channel okay
|
||||
* @NVM_CHANNEL_160MHZ: 160 MHz channel okay
|
||||
* @NVM_CHANNEL_DC_HIGH: DC HIGH required/allowed (?)
|
||||
* @NVM_CHANNEL_VLP: client support connection to UHB VLP AP
|
||||
* @NVM_CHANNEL_AFC: client support connection to UHB AFC AP
|
||||
* @NVM_CHANNEL_VLP_AP_NOT_ALLOWED: UHB VLP AP not allowed,
|
||||
* Valid only when %NVM_CHANNEL_VLP is enabled.
|
||||
*/
|
||||
enum iwl_nvm_channel_flags {
|
||||
NVM_CHANNEL_VALID = BIT(0),
|
||||
NVM_CHANNEL_IBSS = BIT(1),
|
||||
NVM_CHANNEL_ALLOW_20MHZ_ACTIVITY = BIT(2),
|
||||
NVM_CHANNEL_ACTIVE = BIT(3),
|
||||
NVM_CHANNEL_RADAR = BIT(4),
|
||||
NVM_CHANNEL_INDOOR_ONLY = BIT(5),
|
||||
NVM_CHANNEL_GO_CONCURRENT = BIT(6),
|
||||
NVM_CHANNEL_UNIFORM = BIT(7),
|
||||
NVM_CHANNEL_20MHZ = BIT(8),
|
||||
NVM_CHANNEL_40MHZ = BIT(9),
|
||||
NVM_CHANNEL_80MHZ = BIT(10),
|
||||
NVM_CHANNEL_160MHZ = BIT(11),
|
||||
NVM_CHANNEL_DC_HIGH = BIT(12),
|
||||
NVM_CHANNEL_VLP = BIT(13),
|
||||
NVM_CHANNEL_AFC = BIT(14),
|
||||
NVM_CHANNEL_VLP_AP_NOT_ALLOWED = BIT(15),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum iwl_reg_capa_flags_v1 - global flags applied for the whole regulatory
|
||||
* domain.
|
||||
|
|
@ -282,30 +238,6 @@ enum iwl_reg_capa_flags_v4 {
|
|||
*/
|
||||
#define REG_CAPA_V4_RESP_VER 8
|
||||
|
||||
/**
|
||||
* struct iwl_reg_capa - struct for global regulatory capabilities, Used for
|
||||
* handling the different APIs of reg_capa_flags.
|
||||
*
|
||||
* @allow_40mhz: 11n channel with a width of 40Mhz is allowed
|
||||
* for this regulatory domain.
|
||||
* @allow_80mhz: 11ac channel with a width of 80Mhz is allowed
|
||||
* for this regulatory domain (valid only in 5 and 6 Ghz).
|
||||
* @allow_160mhz: 11ac channel with a width of 160Mhz is allowed
|
||||
* for this regulatory domain (valid only in 5 and 6 Ghz).
|
||||
* @allow_320mhz: 11be channel with a width of 320Mhz is allowed
|
||||
* for this regulatory domain (valid only in 6 Ghz).
|
||||
* @disable_11ax: 11ax is forbidden for this regulatory domain.
|
||||
* @disable_11be: 11be is forbidden for this regulatory domain.
|
||||
*/
|
||||
struct iwl_reg_capa {
|
||||
bool allow_40mhz;
|
||||
bool allow_80mhz;
|
||||
bool allow_160mhz;
|
||||
bool allow_320mhz;
|
||||
bool disable_11ax;
|
||||
bool disable_11be;
|
||||
};
|
||||
|
||||
static inline void iwl_nvm_print_channel_flags(struct device *dev, u32 level,
|
||||
int chan, u32 flags)
|
||||
{
|
||||
|
|
@ -1596,9 +1528,10 @@ iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg,
|
|||
}
|
||||
IWL_EXPORT_SYMBOL(iwl_parse_nvm_data);
|
||||
|
||||
static u32 iwl_nvm_get_regdom_bw_flags(const u16 *nvm_chan,
|
||||
int ch_idx, u16 nvm_flags,
|
||||
struct iwl_reg_capa reg_capa)
|
||||
VISIBLE_IF_IWLWIFI_KUNIT
|
||||
u32 iwl_nvm_get_regdom_bw_flags(const u16 *nvm_chan,
|
||||
int ch_idx, u16 nvm_flags,
|
||||
struct iwl_reg_capa reg_capa)
|
||||
{
|
||||
u32 flags = NL80211_RRF_NO_HT40;
|
||||
|
||||
|
|
@ -1688,6 +1621,7 @@ static u32 iwl_nvm_get_regdom_bw_flags(const u16 *nvm_chan,
|
|||
|
||||
return flags;
|
||||
}
|
||||
EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_nvm_get_regdom_bw_flags);
|
||||
|
||||
static struct iwl_reg_capa iwl_get_reg_capa(u32 flags, u8 resp_ver)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,6 +21,80 @@ enum iwl_nvm_sbands_flags {
|
|||
IWL_NVM_SBANDS_FLAGS_NO_WIDE_IN_5GHZ = BIT(1),
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_reg_capa - struct for global regulatory capabilities, Used for
|
||||
* handling the different APIs of reg_capa_flags.
|
||||
*
|
||||
* @allow_40mhz: 11n channel with a width of 40Mhz is allowed
|
||||
* for this regulatory domain.
|
||||
* @allow_80mhz: 11ac channel with a width of 80Mhz is allowed
|
||||
* for this regulatory domain (valid only in 5 and 6 Ghz).
|
||||
* @allow_160mhz: 11ac channel with a width of 160Mhz is allowed
|
||||
* for this regulatory domain (valid only in 5 and 6 Ghz).
|
||||
* @allow_320mhz: 11be channel with a width of 320Mhz is allowed
|
||||
* for this regulatory domain (valid only in 6 Ghz).
|
||||
* @disable_11ax: 11ax is forbidden for this regulatory domain.
|
||||
* @disable_11be: 11be is forbidden for this regulatory domain.
|
||||
*/
|
||||
struct iwl_reg_capa {
|
||||
bool allow_40mhz;
|
||||
bool allow_80mhz;
|
||||
bool allow_160mhz;
|
||||
bool allow_320mhz;
|
||||
bool disable_11ax;
|
||||
bool disable_11be;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum iwl_nvm_channel_flags - channel flags in NVM
|
||||
* @NVM_CHANNEL_VALID: channel is usable for this SKU/geo
|
||||
* @NVM_CHANNEL_IBSS: usable as an IBSS channel and deprecated
|
||||
* when %IWL_NVM_SBANDS_FLAGS_LAR enabled.
|
||||
* @NVM_CHANNEL_ALLOW_20MHZ_ACTIVITY: active scanning allowed and
|
||||
* AP allowed only in 20 MHz. Valid only
|
||||
* when %IWL_NVM_SBANDS_FLAGS_LAR enabled.
|
||||
* @NVM_CHANNEL_ACTIVE: active scanning allowed and allows IBSS
|
||||
* when %IWL_NVM_SBANDS_FLAGS_LAR enabled.
|
||||
* @NVM_CHANNEL_RADAR: radar detection required
|
||||
* @NVM_CHANNEL_INDOOR_ONLY: only indoor use is allowed
|
||||
* @NVM_CHANNEL_GO_CONCURRENT: GO operation is allowed when connected to BSS
|
||||
* on same channel on 2.4 or same UNII band on 5.2
|
||||
* @NVM_CHANNEL_UNIFORM: uniform spreading required
|
||||
* @NVM_CHANNEL_20MHZ: 20 MHz channel okay
|
||||
* @NVM_CHANNEL_40MHZ: 40 MHz channel okay
|
||||
* @NVM_CHANNEL_80MHZ: 80 MHz channel okay
|
||||
* @NVM_CHANNEL_160MHZ: 160 MHz channel okay
|
||||
* @NVM_CHANNEL_DC_HIGH: DC HIGH required/allowed (?)
|
||||
* @NVM_CHANNEL_VLP: client support connection to UHB VLP AP
|
||||
* @NVM_CHANNEL_AFC: client support connection to UHB AFC AP
|
||||
* @NVM_CHANNEL_VLP_AP_NOT_ALLOWED: UHB VLP AP not allowed,
|
||||
* Valid only when %NVM_CHANNEL_VLP is enabled.
|
||||
*/
|
||||
enum iwl_nvm_channel_flags {
|
||||
NVM_CHANNEL_VALID = BIT(0),
|
||||
NVM_CHANNEL_IBSS = BIT(1),
|
||||
NVM_CHANNEL_ALLOW_20MHZ_ACTIVITY = BIT(2),
|
||||
NVM_CHANNEL_ACTIVE = BIT(3),
|
||||
NVM_CHANNEL_RADAR = BIT(4),
|
||||
NVM_CHANNEL_INDOOR_ONLY = BIT(5),
|
||||
NVM_CHANNEL_GO_CONCURRENT = BIT(6),
|
||||
NVM_CHANNEL_UNIFORM = BIT(7),
|
||||
NVM_CHANNEL_20MHZ = BIT(8),
|
||||
NVM_CHANNEL_40MHZ = BIT(9),
|
||||
NVM_CHANNEL_80MHZ = BIT(10),
|
||||
NVM_CHANNEL_160MHZ = BIT(11),
|
||||
NVM_CHANNEL_DC_HIGH = BIT(12),
|
||||
NVM_CHANNEL_VLP = BIT(13),
|
||||
NVM_CHANNEL_AFC = BIT(14),
|
||||
NVM_CHANNEL_VLP_AP_NOT_ALLOWED = BIT(15),
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_IWLWIFI_KUNIT_TESTS)
|
||||
u32 iwl_nvm_get_regdom_bw_flags(const u16 *nvm_chan,
|
||||
int ch_idx, u16 nvm_flags,
|
||||
struct iwl_reg_capa reg_capa);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* iwl_parse_nvm_data - parse NVM data and return values
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
|
||||
iwlwifi-tests-y += module.o devinfo.o utils.o
|
||||
iwlwifi-tests-y += module.o devinfo.o utils.o nvm_parse.o
|
||||
|
||||
ccflags-y += -I$(src)/../
|
||||
|
||||
|
|
|
|||
72
drivers/net/wireless/intel/iwlwifi/tests/nvm_parse.c
Normal file
72
drivers/net/wireless/intel/iwlwifi/tests/nvm_parse.c
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* KUnit tests for NVM parse
|
||||
*
|
||||
* Copyright (C) 2025 Intel Corporation
|
||||
*/
|
||||
#include <kunit/static_stub.h>
|
||||
#include <kunit/test.h>
|
||||
#include <iwl-nvm-parse.h>
|
||||
|
||||
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
|
||||
|
||||
static const struct nvm_flag_case {
|
||||
const char *desc;
|
||||
u16 nvm_flags;
|
||||
u32 reg_rule_flags;
|
||||
u32 set_reg_rule_flags;
|
||||
u32 clear_reg_rule_flags;
|
||||
} nvm_flag_cases[] = {
|
||||
{
|
||||
.desc = "Restricting VLP client and AP access",
|
||||
.nvm_flags = 0,
|
||||
.set_reg_rule_flags = NL80211_RRF_NO_6GHZ_VLP_CLIENT,
|
||||
.clear_reg_rule_flags = NL80211_RRF_ALLOW_6GHZ_VLP_AP,
|
||||
},
|
||||
{
|
||||
.desc = "Allow VLP client and AP access",
|
||||
.nvm_flags = NVM_CHANNEL_VLP,
|
||||
.set_reg_rule_flags = NL80211_RRF_ALLOW_6GHZ_VLP_AP,
|
||||
.clear_reg_rule_flags = NL80211_RRF_NO_6GHZ_VLP_CLIENT,
|
||||
},
|
||||
{
|
||||
.desc = "Allow VLP client access, while restricting AP access",
|
||||
.nvm_flags = NVM_CHANNEL_VLP | NVM_CHANNEL_VLP_AP_NOT_ALLOWED,
|
||||
.set_reg_rule_flags = 0,
|
||||
.clear_reg_rule_flags = NL80211_RRF_ALLOW_6GHZ_VLP_AP |
|
||||
NL80211_RRF_NO_6GHZ_VLP_CLIENT,
|
||||
},
|
||||
};
|
||||
|
||||
KUNIT_ARRAY_PARAM_DESC(nvm_flag, nvm_flag_cases, desc)
|
||||
|
||||
static void test_nvm_flags(struct kunit *test)
|
||||
{
|
||||
const struct nvm_flag_case *params = test->param_value;
|
||||
struct iwl_reg_capa reg_capa = {};
|
||||
u32 flags = 0;
|
||||
|
||||
flags = iwl_nvm_get_regdom_bw_flags(NULL, 0, params->nvm_flags,
|
||||
reg_capa);
|
||||
|
||||
if ((params->set_reg_rule_flags & flags) != params->set_reg_rule_flags)
|
||||
KUNIT_FAIL(test, "Expected set bits:0x%08x flags:0x%08x\n",
|
||||
params->set_reg_rule_flags, flags);
|
||||
|
||||
if (params->clear_reg_rule_flags & flags)
|
||||
KUNIT_FAIL(test, "Expected clear bits:0x%08x flags:0x%08x\n",
|
||||
params->clear_reg_rule_flags, flags);
|
||||
}
|
||||
|
||||
static struct kunit_case nvm_flags_test_cases[] = {
|
||||
KUNIT_CASE_PARAM(test_nvm_flags,
|
||||
nvm_flag_gen_params),
|
||||
{},
|
||||
};
|
||||
|
||||
static struct kunit_suite nvm_flags_suite = {
|
||||
.name = "iwlwifi-nvm_flags",
|
||||
.test_cases = nvm_flags_test_cases,
|
||||
};
|
||||
|
||||
kunit_test_suite(nvm_flags_suite);
|
||||
Loading…
Reference in New Issue
Block a user