[][mac80211][core][export del all stations function from mac80211]

[Description]
Add del all stations function from mac80211 to support amsdu/ampdu on/off dynamically.

[Release-log]
N/A

Change-Id: I7c2c2c5ac0a3d452e379d20a178ba12fb25523da
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6547451
Build: srv_hbgsm110
diff --git a/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/602-mac80211-export-del-all-station-for-ampdu-amsdu-on-off-function.patch b/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/602-mac80211-export-del-all-station-for-ampdu-amsdu-on-off-function.patch
new file mode 100755
index 0000000..ada8e31
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/602-mac80211-export-del-all-station-for-ampdu-amsdu-on-off-function.patch
@@ -0,0 +1,63 @@
+--- 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);