mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-08-27 00:47:25 +02:00
wiphy: add driver quirk for the colocated scan flag
Some drivers do not handle the colocated scan flag very well and this results in BSS's not being seen in scans. This of course results in very poor behavior. This has been seen on ath11k specifically but after some conversations [1] on the linux-wireless mailing list others have reported issues with iwlwifi acting similarly. Since there are many hardware variants that use both ath11k and iwlwifi this new quirk isn't being forced to those drivers, but let users configure IWD to disable the flag if needed. [1] https://lore.kernel.org/linux-wireless/d1e75a08-047d-7947-d51a-2e486efead77@candelatech.com/
This commit is contained in:
parent
77ee863f04
commit
161de4a3ad
23
src/wiphy.c
23
src/wiphy.c
@ -75,6 +75,8 @@ enum driver_flag {
|
||||
OWE_DISABLE = 0x8,
|
||||
MULTICAST_RX_DISABLE = 0x10,
|
||||
SAE_DISABLE = 0x20,
|
||||
/* Disables use of the NL80211_SCAN_FLAG_COLOCATED_6GHZ flag in scans */
|
||||
COLOCATED_SCAN_DISABLE = 0x40,
|
||||
};
|
||||
|
||||
struct driver_flag_name {
|
||||
@ -103,12 +105,13 @@ static const struct driver_info driver_infos[] = {
|
||||
};
|
||||
|
||||
static const struct driver_flag_name driver_flag_names[] = {
|
||||
{ "DefaultInterface", DEFAULT_IF },
|
||||
{ "ForcePae", FORCE_PAE },
|
||||
{ "PowerSaveDisable", POWER_SAVE_DISABLE },
|
||||
{ "OweDisable", OWE_DISABLE },
|
||||
{ "MulticastRxDisable", MULTICAST_RX_DISABLE },
|
||||
{ "SaeDisable", SAE_DISABLE },
|
||||
{ "DefaultInterface", DEFAULT_IF },
|
||||
{ "ForcePae", FORCE_PAE },
|
||||
{ "PowerSaveDisable", POWER_SAVE_DISABLE },
|
||||
{ "OweDisable", OWE_DISABLE },
|
||||
{ "MulticastRxDisable", MULTICAST_RX_DISABLE },
|
||||
{ "SaeDisable", SAE_DISABLE },
|
||||
{ "ColocatedScanDisable", COLOCATED_SCAN_DISABLE },
|
||||
};
|
||||
|
||||
struct wiphy {
|
||||
@ -963,6 +966,11 @@ bool wiphy_supports_multicast_rx(const struct wiphy *wiphy)
|
||||
!(wiphy->driver_flags & MULTICAST_RX_DISABLE);
|
||||
}
|
||||
|
||||
bool wiphy_supports_colocated_flag(const struct wiphy *wiphy)
|
||||
{
|
||||
return !(wiphy->driver_flags & COLOCATED_SCAN_DISABLE);
|
||||
}
|
||||
|
||||
const uint8_t *wiphy_get_ht_capabilities(const struct wiphy *wiphy,
|
||||
enum band_freq band,
|
||||
size_t *size)
|
||||
@ -1382,6 +1390,9 @@ static void wiphy_print_basic_info(struct wiphy *wiphy)
|
||||
if (wiphy->driver_flags & SAE_DISABLE)
|
||||
flags = l_strv_append(flags, "SaeDisable");
|
||||
|
||||
if (wiphy->driver_flags & COLOCATED_SCAN_DISABLE)
|
||||
flags = l_strv_append(flags, "ColocatedScanDisable");
|
||||
|
||||
joined = l_strjoinv(flags, ' ');
|
||||
|
||||
l_info("\tDriver Flags: %s", joined);
|
||||
|
@ -144,6 +144,7 @@ bool wiphy_country_is_unknown(struct wiphy *wiphy);
|
||||
bool wiphy_supports_uapsd(const struct wiphy *wiphy);
|
||||
bool wiphy_supports_cmd_offchannel(const struct wiphy *wiphy);
|
||||
bool wiphy_supports_multicast_rx(const struct wiphy *wiphy);
|
||||
bool wiphy_supports_colocated_flag(const struct wiphy *wiphy);
|
||||
|
||||
const uint8_t *wiphy_get_ht_capabilities(const struct wiphy *wiphy,
|
||||
enum band_freq band,
|
||||
|
Loading…
x
Reference in New Issue
Block a user