blob: ada8e31364126108d820faf7b35d1bce45caebaf [file] [log] [blame]
--- b/include/net/mac80211.h 2021-09-22 21:10:45.803721216 +0800
+++ a/include/net/mac80211.h 2021-09-22 21:19:40.494744637 +0800
@@ -2639,6 +2639,13 @@
}
#define ieee80211_hw_set(hw, flg) _ieee80211_hw_set(hw, IEEE80211_HW_##flg)
+static inline void _ieee80211_hw_clear(struct ieee80211_hw *hw,
+ enum ieee80211_hw_flags flg)
+{
+ return __clear_bit(flg, hw->flags);
+}
+#define ieee80211_hw_clear(hw, flg) _ieee80211_hw_clear(hw, IEEE80211_HW_##flg)
+
/**
* struct ieee80211_scan_request - hw scan request
*
@@ -4989,6 +4996,12 @@
void ieee80211_csa_finish(struct ieee80211_vif *vif);
/**
+ * ieee80211_del_all_station - request mac80211 to delete all stations
+ * @hw: pointer obtained from ieee80211_alloc_hw().
+ */
+void ieee80211_del_all_station(struct ieee80211_hw *hw);
+
+/**
* ieee80211_beacon_cntdwn_is_complete - find out if countdown reached 1
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
*
--- b/net/mac80211/cfg.c 2021-09-22 21:10:45.675720709 +0800
+++ a/net/mac80211/cfg.c 2021-09-22 21:11:23.456352549 +0800
@@ -1718,6 +1718,19 @@
return 0;
}
+void ieee80211_del_all_station(struct ieee80211_hw *hw)
+{
+ struct ieee80211_local *local = hw_to_local(hw);
+ struct sta_info *sta, *tmp;
+
+ mutex_lock(&local->sta_mtx);
+ list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
+ WARN_ON(__sta_info_destroy(sta));
+ }
+ mutex_unlock(&local->sta_mtx);
+}
+EXPORT_SYMBOL(ieee80211_del_all_station);
+
static int ieee80211_change_station(struct wiphy *wiphy,
struct net_device *dev, const u8 *mac,
struct station_parameters *params)
--- b/net/mac80211/sta_info.c 2021-09-22 21:10:45.599720409 +0800
+++ a/net/mac80211/sta_info.c 2021-09-22 20:50:39.158775251 +0800
@@ -683,7 +683,8 @@
}
/* accept BA sessions now */
- clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
+ if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION))
+ clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
ieee80211_sta_debugfs_add(sta);
rate_control_add_sta_debugfs(sta);