mac80211: allow AMSDU size limitation per-TID
authorSara Sharon <sara.sharon@intel.com>
Wed, 5 Sep 2018 05:06:10 +0000 (08:06 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 5 Sep 2018 08:10:26 +0000 (10:10 +0200)
Some drivers may have AMSDU size limitation per TID, due to
HW constrains. Add an option to set this limit.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/tx.c

index fe71cec..28da9e2 100644 (file)
@@ -1853,6 +1853,7 @@ struct ieee80211_sta_rates {
  *     unlimited.
  * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
  * @max_rc_amsdu_len: Maximum A-MSDU size in bytes recommended by rate control.
+ * @max_tid_amsdu_len: Maximum A-MSDU size in bytes for this TID
  * @txq: per-TID data TX queues (if driver uses the TXQ abstraction); note that
  *     the last entry (%IEEE80211_NUM_TIDS) is used for non-data frames
  */
@@ -1894,6 +1895,7 @@ struct ieee80211_sta {
        u16 max_amsdu_len;
        bool support_p2p_ps;
        u16 max_rc_amsdu_len;
+       u16 max_tid_amsdu_len[IEEE80211_NUM_TIDS];
 
        struct ieee80211_txq *txq[IEEE80211_NUM_TIDS + 1];
 
index 96b6c9b..42f44c3 100644 (file)
@@ -3225,6 +3225,10 @@ static bool ieee80211_amsdu_aggregate(struct ieee80211_sub_if_data *sdata,
                max_amsdu_len = min_t(int, max_amsdu_len,
                                      sta->sta.max_rc_amsdu_len);
 
+       if (sta->sta.max_tid_amsdu_len[tid])
+               max_amsdu_len = min_t(int, max_amsdu_len,
+                                     sta->sta.max_tid_amsdu_len[tid]);
+
        spin_lock_bh(&fq->lock);
 
        /* TODO: Ideally aggregation should be done on dequeue to remain