]> www.infradead.org Git - users/willy/linux.git/commitdiff
cfg80211: add support for TID specific AMSDU configuration
authorSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Fri, 24 Apr 2020 11:29:03 +0000 (14:29 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 27 May 2020 08:02:01 +0000 (10:02 +0200)
This patch adds support to control per TID MSDU aggregation
using the NL80211_TID_CONFIG_ATTR_AMSDU_CTRL attribute.

Signed-off-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Link: https://lore.kernel.org/r/20200424112905.26770-4-sergey.matyukevich.os@quantenna.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
include/uapi/linux/nl80211.h
net/wireless/nl80211.c

index e71d4f690ef1eb1375615f8eb42285c9a8a96d49..5cacf24cc9f01ab95c87f3c70d03a312200eb55b 100644 (file)
@@ -640,8 +640,9 @@ struct cfg80211_chan_def {
  * @noack: noack configuration value for the TID
  * @retry_long: retry count value
  * @retry_short: retry count value
- * @ampdu: Enable/Disable aggregation
+ * @ampdu: Enable/Disable MPDU aggregation
  * @rtscts: Enable/Disable RTS/CTS
+ * @amsdu: Enable/Disable MSDU aggregation
  */
 struct cfg80211_tid_cfg {
        bool config_override;
@@ -651,6 +652,7 @@ struct cfg80211_tid_cfg {
        u8 retry_long, retry_short;
        enum nl80211_tid_config ampdu;
        enum nl80211_tid_config rtscts;
+       enum nl80211_tid_config amsdu;
 };
 
 /**
index 9679d561f7d0a4e7cd0b7776388c0e12d63da989..1ccb0bf657ec14b245dcc0f913027d73b2f93aa5 100644 (file)
@@ -4844,12 +4844,15 @@ enum nl80211_tid_config {
  *     &NL80211_CMD_SET_TID_CONFIG. Its type is u8, min value is 1 and
  *     the max value is advertised by the driver in this attribute on
  *     output in wiphy capabilities.
- * @NL80211_TID_CONFIG_ATTR_AMPDU_CTRL: Enable/Disable aggregation for the TIDs
- *     specified in %NL80211_TID_CONFIG_ATTR_TIDS. Its type is u8, using
- *     the values from &nl80211_tid_config.
+ * @NL80211_TID_CONFIG_ATTR_AMPDU_CTRL: Enable/Disable MPDU aggregation
+ *     for the TIDs specified in %NL80211_TID_CONFIG_ATTR_TIDS.
+ *     Its type is u8, using the values from &nl80211_tid_config.
  * @NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL: Enable/Disable RTS_CTS for the TIDs
  *     specified in %NL80211_TID_CONFIG_ATTR_TIDS. It is u8 type, using
  *     the values from &nl80211_tid_config.
+ * @NL80211_TID_CONFIG_ATTR_AMSDU_CTRL: Enable/Disable MSDU aggregation
+ *     for the TIDs specified in %NL80211_TID_CONFIG_ATTR_TIDS.
+ *     Its type is u8, using the values from &nl80211_tid_config.
  */
 enum nl80211_tid_config_attr {
        __NL80211_TID_CONFIG_ATTR_INVALID,
@@ -4863,6 +4866,7 @@ enum nl80211_tid_config_attr {
        NL80211_TID_CONFIG_ATTR_RETRY_LONG,
        NL80211_TID_CONFIG_ATTR_AMPDU_CTRL,
        NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL,
+       NL80211_TID_CONFIG_ATTR_AMSDU_CTRL,
 
        /* keep last */
        __NL80211_TID_CONFIG_ATTR_AFTER_LAST,
index fa66d5b6f5575f375aee1097c8bc83fb8f6b6b54..482a80b78844f87226595f47de6f7a526651299f 100644 (file)
@@ -343,6 +343,8 @@ nl80211_tid_config_attr_policy[NL80211_TID_CONFIG_ATTR_MAX + 1] = {
                        NLA_POLICY_MAX(NLA_U8, NL80211_TID_CONFIG_DISABLE),
        [NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL] =
                        NLA_POLICY_MAX(NLA_U8, NL80211_TID_CONFIG_DISABLE),
+       [NL80211_TID_CONFIG_ATTR_AMSDU_CTRL] =
+                       NLA_POLICY_MAX(NLA_U8, NL80211_TID_CONFIG_DISABLE),
 };
 
 static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
@@ -14080,6 +14082,12 @@ static int parse_tid_conf(struct cfg80211_registered_device *rdev,
                        nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL]);
        }
 
+       if (attrs[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL]) {
+               tid_conf->mask |= BIT(NL80211_TID_CONFIG_ATTR_AMSDU_CTRL);
+               tid_conf->amsdu =
+                       nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL]);
+       }
+
        if (peer)
                mask = rdev->wiphy.tid_config_support.peer;
        else