[][MAC80211][core][Fix weather CAC time not applied issue]

[Description]
Fix weather CAC time not applied when operating channel
is overlapped with weather radar channel in ETSI.

[Release-log]
N/A

Change-Id: Ic56d6a0369dcd430f6d30e9c583e7916033f8845
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7602306
diff --git a/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/mtk-0002-cfg80211-mtk-extend-CAC-time-for-weather-radar-chann.patch b/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/mtk-0002-cfg80211-mtk-extend-CAC-time-for-weather-radar-chann.patch
new file mode 100644
index 0000000..f5b52c4
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/mtk-0002-cfg80211-mtk-extend-CAC-time-for-weather-radar-chann.patch
@@ -0,0 +1,59 @@
+From b6a99ac9380eb282d251a349709483579186bc51 Mon Sep 17 00:00:00 2001
+From: Shayne Chen <shayne.chen@mediatek.com>
+Date: Tue, 29 Mar 2022 16:06:30 +0800
+Subject: [PATCH] cfg80211: mtk: extend CAC time for weather radar channels
+
+Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
+Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
+---
+ include/net/cfg80211.h | 1 +
+ net/wireless/chan.c    | 6 ++++++
+ net/wireless/nl80211.c | 3 +++
+ 3 files changed, 10 insertions(+)
+
+diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
+index 8e05f55..585d934 100644
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -142,6 +142,7 @@ enum ieee80211_channel_flags {
+ 	(IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
+ 
+ #define IEEE80211_DFS_MIN_CAC_TIME_MS		60000
++#define IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS	600000
+ #define IEEE80211_DFS_MIN_NOP_TIME_MS		(30 * 60 * 1000)
+ 
+ /**
+diff --git a/net/wireless/chan.c b/net/wireless/chan.c
+index 5f50ac4..6b42040 100644
+--- a/net/wireless/chan.c
++++ b/net/wireless/chan.c
+@@ -843,6 +843,12 @@ static unsigned int cfg80211_get_chans_dfs_cac_time(struct wiphy *wiphy,
+ 		if (!(c->flags & IEEE80211_CHAN_RADAR))
+ 			continue;
+ 
++		/* weather radar in ETSI */
++		if (reg_get_dfs_region(wiphy) == NL80211_DFS_ETSI &&
++		    freq >= MHZ_TO_KHZ(5590) && freq <= MHZ_TO_KHZ(5650) &&
++		    dfs_cac_ms < IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS)
++			dfs_cac_ms = IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS;
++
+ 		if (c->dfs_cac_ms > dfs_cac_ms)
+ 			dfs_cac_ms = c->dfs_cac_ms;
+ 	}
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index bc6b5ac..bc07fe8 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -9354,6 +9354,9 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
+ 	if (WARN_ON(!cac_time_ms))
+ 		cac_time_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
+ 
++	pr_info("%s: region = %u, center freq1 = %u, center freq2 = %u, cac time ms = %u\n",
++		__func__, dfs_region, chandef.center_freq1, chandef.center_freq2, cac_time_ms);
++
+ 	err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
+ 	if (!err) {
+ 		wdev->chandef = chandef;
+-- 
+2.18.0
+
diff --git a/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/mtk-0002-nl80211-mtk-extend-CAC-time-for-weather-radar-channe.patch b/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/mtk-0002-nl80211-mtk-extend-CAC-time-for-weather-radar-channe.patch
deleted file mode 100644
index e281cdd..0000000
--- a/autobuild_mac80211_release/package/kernel/mac80211/patches/subsys/mtk-0002-nl80211-mtk-extend-CAC-time-for-weather-radar-channe.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 90338d1909357f0fac0ec1f0ead5f4a9b47524b9 Mon Sep 17 00:00:00 2001
-From: Shayne Chen <shayne.chen@mediatek.com>
-Date: Tue, 29 Mar 2022 16:06:30 +0800
-Subject: [PATCH 02/17] nl80211: mtk: extend CAC time for weather radar
- channels
-
-Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
----
- net/wireless/nl80211.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
-index bc6b5ac..3c6c1df 100644
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -9354,6 +9354,13 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
- 	if (WARN_ON(!cac_time_ms))
- 		cac_time_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
- 
-+	if ((dfs_region == NL80211_DFS_ETSI) &&
-+	    (((chandef.width == NL80211_CHAN_WIDTH_160) &&
-+	     (chandef.center_freq2 >= 5580 && chandef.center_freq2 <= 5640)) ||
-+	    (chandef.center_freq1 >= 5580 && chandef.center_freq1 <= 5640)))
-+		cac_time_ms = 600000;
-+	pr_info("%s: region = %u, cetner freq1 = %u, center freq2 = %u, cac time ms = %u\n", __func__, dfs_region, chandef.center_freq1, chandef.center_freq2, cac_time_ms);
-+
- 	err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
- 	if (!err) {
- 		wdev->chandef = chandef;
--- 
-2.18.0
-
diff --git a/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/mtk-0002-cfg80211-mtk-extend-CAC-time-for-weather-radar-chann.patch b/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/mtk-0002-cfg80211-mtk-extend-CAC-time-for-weather-radar-chann.patch
new file mode 100644
index 0000000..c0f4c01
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/mtk-0002-cfg80211-mtk-extend-CAC-time-for-weather-radar-chann.patch
@@ -0,0 +1,59 @@
+From 7097dfcbf442fde86cfb34f8e91fb5c0e6546630 Mon Sep 17 00:00:00 2001
+From: Shayne Chen <shayne.chen@mediatek.com>
+Date: Tue, 29 Mar 2022 16:06:30 +0800
+Subject: [PATCH] cfg80211: mtk: extend CAC time for weather radar channels
+
+Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
+Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
+---
+ include/net/cfg80211.h | 1 +
+ net/wireless/chan.c    | 6 ++++++
+ net/wireless/nl80211.c | 3 +++
+ 3 files changed, 10 insertions(+)
+
+diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
+index 8d72357..a6bf255 100644
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -149,6 +149,7 @@ enum ieee80211_channel_flags {
+ 	(IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
+ 
+ #define IEEE80211_DFS_MIN_CAC_TIME_MS		60000
++#define IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS	600000
+ #define IEEE80211_DFS_MIN_NOP_TIME_MS		(30 * 60 * 1000)
+ 
+ /**
+diff --git a/net/wireless/chan.c b/net/wireless/chan.c
+index d5ed976..fef0ba5 100644
+--- a/net/wireless/chan.c
++++ b/net/wireless/chan.c
+@@ -931,6 +931,12 @@ static unsigned int cfg80211_get_chans_dfs_cac_time(struct wiphy *wiphy,
+ 		if (!(c->flags & IEEE80211_CHAN_RADAR))
+ 			continue;
+ 
++		/* weather radar in ETSI */
++		if (reg_get_dfs_region(wiphy) == NL80211_DFS_ETSI &&
++		    freq >= MHZ_TO_KHZ(5590) && freq <= MHZ_TO_KHZ(5650) &&
++		    dfs_cac_ms < IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS)
++			dfs_cac_ms = IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS;
++
+ 		if (c->dfs_cac_ms > dfs_cac_ms)
+ 			dfs_cac_ms = c->dfs_cac_ms;
+ 	}
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index f3b2fc4..215a603 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -9817,6 +9817,9 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
+ 	if (WARN_ON(!cac_time_ms))
+ 		cac_time_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
+ 
++	pr_info("%s: region = %u, center freq1 = %u, center freq2 = %u, cac time ms = %u\n",
++		__func__, dfs_region, chandef.center_freq1, chandef.center_freq2, cac_time_ms);
++
+ 	err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
+ 	if (!err) {
+ 		wdev->links[0].ap.chandef = chandef;
+-- 
+2.18.0
+
diff --git a/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/mtk-0002-nl80211-mtk-extend-CAC-time-for-weather-radar-channe.patch b/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/mtk-0002-nl80211-mtk-extend-CAC-time-for-weather-radar-channe.patch
deleted file mode 100644
index cfd0e09..0000000
--- a/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/mtk-0002-nl80211-mtk-extend-CAC-time-for-weather-radar-channe.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From dacd08119ef3964c826d1949b35c5b926b40eb2b Mon Sep 17 00:00:00 2001
-From: Shayne Chen <shayne.chen@mediatek.com>
-Date: Tue, 29 Mar 2022 16:06:30 +0800
-Subject: [PATCH 02/14] nl80211: mtk: extend CAC time for weather radar
- channels
-
-Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
----
- net/wireless/nl80211.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
-index f3b2fc4..0430bbe 100644
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -9817,6 +9817,13 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
- 	if (WARN_ON(!cac_time_ms))
- 		cac_time_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
- 
-+	if ((dfs_region == NL80211_DFS_ETSI) &&
-+	    (((chandef.width == NL80211_CHAN_WIDTH_160) &&
-+	     (chandef.center_freq2 >= 5580 && chandef.center_freq2 <= 5640)) ||
-+	    (chandef.center_freq1 >= 5580 && chandef.center_freq1 <= 5640)))
-+		cac_time_ms = 600000;
-+	pr_info("%s: region = %u, cetner freq1 = %u, center freq2 = %u, cac time ms = %u\n", __func__, dfs_region, chandef.center_freq1, chandef.center_freq2, cac_time_ms);
-+
- 	err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
- 	if (!err) {
- 		wdev->links[0].ap.chandef = chandef;
--- 
-2.39.2
-