wifi: mac80211: add flag to disallow puncturing in 5 GHz
authorJohannes Berg <johannes.berg@intel.com>
Mon, 18 Mar 2024 16:53:25 +0000 (18:53 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 25 Mar 2024 14:38:13 +0000 (15:38 +0100)
Some devices may not be capable of handling puncturing in 5 GHz
only (vs. the current flag that just removes puncturing support
completely). Add a flag to support such devices: check and then
downgrade the channel width if needed.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240318184907.49759510da7d.I12c5a61f0be512e0c4e574c2f794ef4b37ecaf6b@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/debugfs.c
net/mac80211/mlme.c

index 757ec33882c2402bddb8dfff3876da9b7b9eb5e1..88bb781f33f6f31ad31157cdbde41210377e9c86 100644 (file)
@@ -2779,6 +2779,8 @@ struct ieee80211_txq {
  *
  * @IEEE80211_HW_DISALLOW_PUNCTURING: HW requires disabling puncturing in EHT
  *     and connecting with a lower bandwidth instead
+ * @IEEE80211_HW_DISALLOW_PUNCTURING_5GHZ: HW requires disabling puncturing in
+ *     EHT in 5 GHz and connecting with a lower bandwidth instead
  *
  * @IEEE80211_HW_HANDLES_QUIET_CSA: HW/driver handles quieting for CSA, so
  *     no need to stop queues. This really should be set by a driver that
@@ -2843,6 +2845,7 @@ enum ieee80211_hw_flags {
        IEEE80211_HW_DETECTS_COLOR_COLLISION,
        IEEE80211_HW_MLO_MCAST_MULTI_LINK_TX,
        IEEE80211_HW_DISALLOW_PUNCTURING,
+       IEEE80211_HW_DISALLOW_PUNCTURING_5GHZ,
        IEEE80211_HW_HANDLES_QUIET_CSA,
 
        /* keep last, obviously */
index 2f68e92a7404bbd894c15808b4fb5480098ab207..98310188f330f4ba844531de88d0143d4580e2d6 100644 (file)
@@ -498,6 +498,7 @@ static const char *hw_flag_names[] = {
        FLAG(DETECTS_COLOR_COLLISION),
        FLAG(MLO_MCAST_MULTI_LINK_TX),
        FLAG(DISALLOW_PUNCTURING),
+       FLAG(DISALLOW_PUNCTURING_5GHZ),
        FLAG(HANDLES_QUIET_CSA),
 #undef FLAG
 };
index 8cd3253c6188b96553b4af4443944198a2ceda4a..20f325b6b28c2ac3de288a3260e5c4256703a80d 100644 (file)
@@ -599,6 +599,10 @@ static bool ieee80211_chandef_usable(struct ieee80211_sub_if_data *sdata,
            ieee80211_hw_check(&sdata->local->hw, DISALLOW_PUNCTURING))
                return false;
 
+       if (chandef->punctured && chandef->chan->band == NL80211_BAND_5GHZ &&
+           ieee80211_hw_check(&sdata->local->hw, DISALLOW_PUNCTURING_5GHZ))
+               return false;
+
        return true;
 }