wifi: mac80211: allow disabling SMPS debugfs controls
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Thu, 8 Jun 2023 13:36:06 +0000 (16:36 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 14 Jun 2023 10:20:08 +0000 (12:20 +0200)
There are cases in which we don't want the user to override the
smps mode, e.g. when SMPS should be disabled due to EMLSR. Add
a driver flag to disable SMPS overriding and don't override if
it is set.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230608163202.ef129e80556c.I74a298fdc86b87074c95228d3916739de1400597@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/debugfs_netdev.c

index 8ea2388..98cb2c5 100644 (file)
@@ -1755,12 +1755,15 @@ struct ieee80211_channel_switch {
  * @IEEE80211_VIF_GET_NOA_UPDATE: request to handle NOA attributes
  *     and send P2P_PS notification to the driver if NOA changed, even
  *     this is not pure P2P vif.
+ * @IEEE80211_VIF_DISABLE_SMPS_OVERRIDE: disable user configuration of
+ *     SMPS mode via debugfs.
  */
 enum ieee80211_vif_flags {
        IEEE80211_VIF_BEACON_FILTER             = BIT(0),
        IEEE80211_VIF_SUPPORTS_CQM_RSSI         = BIT(1),
        IEEE80211_VIF_SUPPORTS_UAPSD            = BIT(2),
        IEEE80211_VIF_GET_NOA_UPDATE            = BIT(3),
+       IEEE80211_VIF_DISABLE_SMPS_OVERRIDE     = BIT(4),
 };
 
 
index b0cef37..3fea86c 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Copyright (c) 2006  Jiri Benc <jbenc@suse.cz>
  * Copyright 2007      Johannes Berg <johannes@sipsolutions.net>
- * Copyright (C) 2020-2022 Intel Corporation
+ * Copyright (C) 2020-2023 Intel Corporation
  */
 
 #include <linux/kernel.h>
@@ -267,6 +267,9 @@ static int ieee80211_set_smps(struct ieee80211_link_data *link,
        struct ieee80211_local *local = sdata->local;
        int err;
 
+       if (sdata->vif.driver_flags & IEEE80211_VIF_DISABLE_SMPS_OVERRIDE)
+               return -EOPNOTSUPP;
+
        if (!(local->hw.wiphy->features & NL80211_FEATURE_STATIC_SMPS) &&
            smps_mode == IEEE80211_SMPS_STATIC)
                return -EINVAL;