diff options
Diffstat (limited to 'sys/contrib/dev/iwlwifi/mld/tests/utils.h')
| -rw-r--r-- | sys/contrib/dev/iwlwifi/mld/tests/utils.h | 140 | 
1 files changed, 140 insertions, 0 deletions
| diff --git a/sys/contrib/dev/iwlwifi/mld/tests/utils.h b/sys/contrib/dev/iwlwifi/mld/tests/utils.h new file mode 100644 index 000000000000..edf8eef4e81a --- /dev/null +++ b/sys/contrib/dev/iwlwifi/mld/tests/utils.h @@ -0,0 +1,140 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* + * Copyright (C) 2024-2025 Intel Corporation + */ + +#ifndef __iwl_mld_kunit_utils_h__ +#define __iwl_mld_kunit_utils_h__ + +#include <net/mac80211.h> +#include <kunit/test-bug.h> + +struct iwl_mld; + +int iwlmld_kunit_test_init(struct kunit *test); + +struct iwl_mld_kunit_link { +	const struct cfg80211_chan_def *chandef; +	u8 id; +}; + +enum nl80211_iftype; + +struct ieee80211_vif *iwlmld_kunit_add_vif(bool mlo, enum nl80211_iftype type); + +struct ieee80211_bss_conf * +iwlmld_kunit_add_link(struct ieee80211_vif *vif, int link_id); + +#define KUNIT_ALLOC_AND_ASSERT_SIZE(test, ptr, size)			\ +do {									\ +	(ptr) = kunit_kzalloc((test), (size), GFP_KERNEL);		\ +	KUNIT_ASSERT_NOT_NULL((test), (ptr));				\ +} while (0) + +#define KUNIT_ALLOC_AND_ASSERT(test, ptr)				\ +	KUNIT_ALLOC_AND_ASSERT_SIZE(test, ptr, sizeof(*(ptr))) + +#define CHANNEL(_name, _band, _freq)				\ +static struct ieee80211_channel _name = {			\ +	.band = (_band),					\ +	.center_freq = (_freq),					\ +	.hw_value = (_freq),					\ +} + +CHANNEL(chan_2ghz, NL80211_BAND_2GHZ, 2412); +CHANNEL(chan_2ghz_11, NL80211_BAND_2GHZ, 2462); +CHANNEL(chan_5ghz, NL80211_BAND_5GHZ, 5200); +CHANNEL(chan_5ghz_120, NL80211_BAND_5GHZ, 5600); +CHANNEL(chan_6ghz, NL80211_BAND_6GHZ, 6115); +CHANNEL(chan_6ghz_221, NL80211_BAND_6GHZ, 7055); +/* Feel free to add more */ +#undef CHANNEL + +#define CHANDEF_LIST \ +	CHANDEF(chandef_2ghz_20mhz, chan_2ghz, 2412,		\ +		NL80211_CHAN_WIDTH_20)				\ +	CHANDEF(chandef_2ghz_40mhz, chan_2ghz, 2422,		\ +		NL80211_CHAN_WIDTH_40)				\ +	CHANDEF(chandef_2ghz_11_20mhz, chan_2ghz_11, 2462,	\ +		NL80211_CHAN_WIDTH_20)				\ +	CHANDEF(chandef_5ghz_20mhz, chan_5ghz, 5200,		\ +		NL80211_CHAN_WIDTH_20)				\ +	CHANDEF(chandef_5ghz_40mhz, chan_5ghz, 5210,		\ +		NL80211_CHAN_WIDTH_40)				\ +	CHANDEF(chandef_5ghz_80mhz, chan_5ghz, 5210,		\ +		NL80211_CHAN_WIDTH_80)				\ +	CHANDEF(chandef_5ghz_160mhz, chan_5ghz, 5250,		\ +		NL80211_CHAN_WIDTH_160)				\ +	CHANDEF(chandef_5ghz_120_40mhz, chan_5ghz_120, 5610,	\ +		NL80211_CHAN_WIDTH_40)				\ +	CHANDEF(chandef_6ghz_20mhz, chan_6ghz, 6115,		\ +		NL80211_CHAN_WIDTH_20)				\ +	CHANDEF(chandef_6ghz_40mhz, chan_6ghz, 6125,		\ +		NL80211_CHAN_WIDTH_40)				\ +	CHANDEF(chandef_6ghz_80mhz, chan_6ghz, 6145,		\ +		NL80211_CHAN_WIDTH_80)				\ +	CHANDEF(chandef_6ghz_160mhz, chan_6ghz, 6185,		\ +		NL80211_CHAN_WIDTH_160)				\ +	CHANDEF(chandef_6ghz_320mhz, chan_6ghz, 6105,		\ +		NL80211_CHAN_WIDTH_320)				\ +	CHANDEF(chandef_6ghz_221_160mhz, chan_6ghz_221, 6985,	\ +		NL80211_CHAN_WIDTH_160)				\ +	/* Feel free to add more */ + +#define CHANDEF(_name, _channel, _freq1, _width)		\ +__maybe_unused static const struct cfg80211_chan_def _name = {	\ +	.chan = &(_channel),					\ +	.center_freq1 = (_freq1),				\ +	.width = (_width),					\ +}; +CHANDEF_LIST +#undef CHANDEF + +struct ieee80211_chanctx_conf * +iwlmld_kunit_add_chanctx(const struct cfg80211_chan_def *def); + +void iwlmld_kunit_assign_chanctx_to_link(struct ieee80211_vif *vif, +					 struct ieee80211_bss_conf *link, +					 struct ieee80211_chanctx_conf *ctx); + +/* Allocate a sta, initialize it and move it to the wanted state */ +struct ieee80211_sta *iwlmld_kunit_setup_sta(struct ieee80211_vif *vif, +					     enum ieee80211_sta_state state, +					     int link_id); + +struct ieee80211_vif * +iwlmld_kunit_setup_mlo_assoc(u16 valid_links, +			     struct iwl_mld_kunit_link *assoc_link); + +struct ieee80211_vif * +iwlmld_kunit_setup_non_mlo_assoc(struct iwl_mld_kunit_link *assoc_link); + +struct iwl_rx_packet * +_iwl_mld_kunit_create_pkt(const void *notif, size_t notif_sz); + +#define iwl_mld_kunit_create_pkt(_notif)	\ +	_iwl_mld_kunit_create_pkt(&(_notif), sizeof(_notif)) + +struct ieee80211_vif * +iwlmld_kunit_assoc_emlsr(struct iwl_mld_kunit_link *link1, +			 struct iwl_mld_kunit_link *link2); + +struct element *iwlmld_kunit_gen_element(u8 id, const void *data, size_t len); + +/** + * iwlmld_kunit_get_phy_of_link - Get the phy of a link + * + * @vif: The vif to get the phy from. + * @link_id: The id of the link to get the phy for. + * + * given a vif and link id, return the phy pointer of that link. + * This assumes that the link exists, and that it had a chanctx + * assigned. + * If this is not the case, the test will fail. + * + * Return: phy pointer. + */ +struct iwl_mld_phy *iwlmld_kunit_get_phy_of_link(struct ieee80211_vif *vif, +						 u8 link_id); + +#endif /* __iwl_mld_kunit_utils_h__ */ | 
