nl80211: advertise supported channel width in S1G
authorThomas Pedersen <thomas@adapt-ip.com>
Tue, 8 Sep 2020 19:03:03 +0000 (12:03 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 18 Sep 2020 10:28:06 +0000 (12:28 +0200)
S1G supports 5 channel widths: 1, 2, 4, 8, and 16. One
channel width is allowed per frequency in each operating
class, so it makes more sense to advertise the specific
channel width allowed.

Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
Link: https://lore.kernel.org/r/20200908190323.15814-3-thomas@adapt-ip.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
include/uapi/linux/nl80211.h
net/wireless/nl80211.c

index 7ad530912b216d922a59049d18a69e9a5f5a17ac..2a75617437172610ddd1d2611e38e46db6516771 100644 (file)
@@ -96,6 +96,16 @@ struct wiphy;
  * @IEEE80211_CHAN_NO_10MHZ: 10 MHz bandwidth is not permitted
  *     on this channel.
  * @IEEE80211_CHAN_NO_HE: HE operation is not permitted on this channel.
+ * @IEEE80211_CHAN_1MHZ: 1 MHz bandwidth is permitted
+ *     on this channel.
+ * @IEEE80211_CHAN_2MHZ: 2 MHz bandwidth is permitted
+ *     on this channel.
+ * @IEEE80211_CHAN_4MHZ: 4 MHz bandwidth is permitted
+ *     on this channel.
+ * @IEEE80211_CHAN_8MHZ: 8 MHz bandwidth is permitted
+ *     on this channel.
+ * @IEEE80211_CHAN_16MHZ: 16 MHz bandwidth is permitted
+ *     on this channel.
  *
  */
 enum ieee80211_channel_flags {
@@ -113,6 +123,11 @@ enum ieee80211_channel_flags {
        IEEE80211_CHAN_NO_20MHZ         = 1<<11,
        IEEE80211_CHAN_NO_10MHZ         = 1<<12,
        IEEE80211_CHAN_NO_HE            = 1<<13,
+       IEEE80211_CHAN_1MHZ             = 1<<14,
+       IEEE80211_CHAN_2MHZ             = 1<<15,
+       IEEE80211_CHAN_4MHZ             = 1<<16,
+       IEEE80211_CHAN_8MHZ             = 1<<17,
+       IEEE80211_CHAN_16MHZ            = 1<<18,
 };
 
 #define IEEE80211_CHAN_NO_HT40 \
index 0584e0d349f0b890b0ca920af025ddd9fe12b9c2..4e119c6afa311bdfe935ea2310a9a4579357d5d6 100644 (file)
@@ -3737,6 +3737,16 @@ enum nl80211_wmm_rule {
  * @NL80211_FREQUENCY_ATTR_NO_HE: HE operation is not allowed on this channel
  *     in current regulatory domain.
  * @NL80211_FREQUENCY_ATTR_OFFSET: frequency offset in KHz
+ * @NL80211_FREQUENCY_ATTR_1MHZ: 1 MHz operation is allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_2MHZ: 2 MHz operation is allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_4MHZ: 4 MHz operation is allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_8MHZ: 8 MHz operation is allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_16MHZ: 16 MHz operation is allowed
+ *     on this channel in current regulatory domain.
  * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
  *     currently defined
  * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
@@ -3768,6 +3778,11 @@ enum nl80211_frequency_attr {
        NL80211_FREQUENCY_ATTR_WMM,
        NL80211_FREQUENCY_ATTR_NO_HE,
        NL80211_FREQUENCY_ATTR_OFFSET,
+       NL80211_FREQUENCY_ATTR_1MHZ,
+       NL80211_FREQUENCY_ATTR_2MHZ,
+       NL80211_FREQUENCY_ATTR_4MHZ,
+       NL80211_FREQUENCY_ATTR_8MHZ,
+       NL80211_FREQUENCY_ATTR_16MHZ,
 
        /* keep last */
        __NL80211_FREQUENCY_ATTR_AFTER_LAST,
index 52a35e78854714ec216ea6dcfa4d77429f7e8181..7da4d84bcc1a0145aa8b6f4b6f284b580c986375 100644 (file)
@@ -1010,6 +1010,21 @@ static int nl80211_msg_put_channel(struct sk_buff *msg, struct wiphy *wiphy,
                if ((chan->flags & IEEE80211_CHAN_NO_HE) &&
                    nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_HE))
                        goto nla_put_failure;
+               if ((chan->flags & IEEE80211_CHAN_1MHZ) &&
+                   nla_put_flag(msg, NL80211_FREQUENCY_ATTR_1MHZ))
+                       goto nla_put_failure;
+               if ((chan->flags & IEEE80211_CHAN_2MHZ) &&
+                   nla_put_flag(msg, NL80211_FREQUENCY_ATTR_2MHZ))
+                       goto nla_put_failure;
+               if ((chan->flags & IEEE80211_CHAN_4MHZ) &&
+                   nla_put_flag(msg, NL80211_FREQUENCY_ATTR_4MHZ))
+                       goto nla_put_failure;
+               if ((chan->flags & IEEE80211_CHAN_8MHZ) &&
+                   nla_put_flag(msg, NL80211_FREQUENCY_ATTR_8MHZ))
+                       goto nla_put_failure;
+               if ((chan->flags & IEEE80211_CHAN_16MHZ) &&
+                   nla_put_flag(msg, NL80211_FREQUENCY_ATTR_16MHZ))
+                       goto nla_put_failure;
        }
 
        if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER,