]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mac80211: enable TDLS peer buffer STA feature
authorYingying Tang <yintang@qti.qualcomm.com>
Tue, 24 Oct 2017 08:51:10 +0000 (16:51 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 11 Dec 2017 11:16:05 +0000 (12:16 +0100)
Allow drivers to set the buffer station extended capability
for TDLS links, with a new hardware flag indicating this.

Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
[change commit log/documentation wording]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/debugfs.c
net/mac80211/tdls.c

index eec143cca1c0f118ac6e0447ebb55c6c7b1c2057..2ee4af25256db2955d9052ce6ecf6a66ec810f95 100644 (file)
@@ -2056,6 +2056,9 @@ struct ieee80211_txq {
  *     The stack will not do fragmentation.
  *     The callback for @set_frag_threshold should be set as well.
  *
+ * @IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA: Hardware supports buffer STA on
+ *     TDLS links.
+ *
  * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
  */
 enum ieee80211_hw_flags {
@@ -2098,6 +2101,7 @@ enum ieee80211_hw_flags {
        IEEE80211_HW_TX_FRAG_LIST,
        IEEE80211_HW_REPORTS_LOW_ACK,
        IEEE80211_HW_SUPPORTS_TX_FRAG,
+       IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA,
 
        /* keep last, obviously */
        NUM_IEEE80211_HW_FLAGS
index 5fae001f286ceb255f48236d297e3b05c6e8eac4..1f466d12a6bcd62061f4bab78d400544da93dd5c 100644 (file)
@@ -211,6 +211,7 @@ static const char *hw_flag_names[] = {
        FLAG(TX_FRAG_LIST),
        FLAG(REPORTS_LOW_ACK),
        FLAG(SUPPORTS_TX_FRAG),
+       FLAG(SUPPORTS_TDLS_BUFFER_STA),
 #undef FLAG
 };
 
index 96d4fb998e33e62616876388d19dab73b3867a7d..5cd5e6e5834efc820c94d299dadfd9164e217253 100644 (file)
@@ -47,6 +47,8 @@ static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata,
                           NL80211_FEATURE_TDLS_CHANNEL_SWITCH;
        bool wider_band = ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
                          !ifmgd->tdls_wider_bw_prohibited;
+       bool buffer_sta = ieee80211_hw_check(&local->hw,
+                                            SUPPORTS_TDLS_BUFFER_STA);
        struct ieee80211_supported_band *sband = ieee80211_get_sband(sdata);
        bool vht = sband && sband->vht_cap.vht_supported;
        u8 *pos = skb_put(skb, 10);
@@ -56,7 +58,8 @@ static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata,
        *pos++ = 0x0;
        *pos++ = 0x0;
        *pos++ = 0x0;
-       *pos++ = chan_switch ? WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH : 0;
+       *pos++ = (chan_switch ? WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH : 0) |
+                (buffer_sta ? WLAN_EXT_CAPA4_TDLS_BUFFER_STA : 0);
        *pos++ = WLAN_EXT_CAPA5_TDLS_ENABLED;
        *pos++ = 0;
        *pos++ = 0;