blob: e3288e443d5a996631525b71eb27538a81e457a4 [file] [log] [blame]
developer0d4fe282023-07-07 13:46:50 +08001From a1d6921a833c7d85170cb54145bfcf98d7f11283 Mon Sep 17 00:00:00 2001
developer4a4b5a42023-06-08 15:07:09 +08002From: Shayne Chen <shayne.chen@mediatek.com>
3Date: Tue, 29 Mar 2022 16:06:30 +0800
4Subject: [PATCH] cfg80211: mtk: extend CAC time for weather radar channels
5
6Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
7Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
8---
9 include/net/cfg80211.h | 1 +
developer0d4fe282023-07-07 13:46:50 +080010 net/wireless/chan.c | 7 +++++++
developer4a4b5a42023-06-08 15:07:09 +080011 net/wireless/nl80211.c | 3 +++
developer0d4fe282023-07-07 13:46:50 +080012 3 files changed, 11 insertions(+)
developer4a4b5a42023-06-08 15:07:09 +080013
14diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
developer0d4fe282023-07-07 13:46:50 +080015index 98a2971..28c0a5f 100644
developer4a4b5a42023-06-08 15:07:09 +080016--- a/include/net/cfg80211.h
17+++ b/include/net/cfg80211.h
18@@ -149,6 +149,7 @@ enum ieee80211_channel_flags {
19 (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
20
21 #define IEEE80211_DFS_MIN_CAC_TIME_MS 60000
22+#define IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS 600000
23 #define IEEE80211_DFS_MIN_NOP_TIME_MS (30 * 60 * 1000)
24
25 /**
26diff --git a/net/wireless/chan.c b/net/wireless/chan.c
developer0d4fe282023-07-07 13:46:50 +080027index d5ed976..62f0169 100644
developer4a4b5a42023-06-08 15:07:09 +080028--- a/net/wireless/chan.c
29+++ b/net/wireless/chan.c
developer0d4fe282023-07-07 13:46:50 +080030@@ -931,6 +931,13 @@ static unsigned int cfg80211_get_chans_dfs_cac_time(struct wiphy *wiphy,
developer4a4b5a42023-06-08 15:07:09 +080031 if (!(c->flags & IEEE80211_CHAN_RADAR))
32 continue;
33
34+ /* weather radar in ETSI */
35+ if (reg_get_dfs_region(wiphy) == NL80211_DFS_ETSI &&
developer0d4fe282023-07-07 13:46:50 +080036+ freq >= MHZ_TO_KHZ(5600) && freq <= MHZ_TO_KHZ(5640) &&
37+ dfs_cac_ms < IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS &&
38+ c->dfs_state == NL80211_DFS_USABLE)
developer4a4b5a42023-06-08 15:07:09 +080039+ dfs_cac_ms = IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS;
40+
41 if (c->dfs_cac_ms > dfs_cac_ms)
42 dfs_cac_ms = c->dfs_cac_ms;
43 }
44diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
45index f3b2fc4..215a603 100644
46--- a/net/wireless/nl80211.c
47+++ b/net/wireless/nl80211.c
48@@ -9817,6 +9817,9 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
49 if (WARN_ON(!cac_time_ms))
50 cac_time_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
51
52+ pr_info("%s: region = %u, center freq1 = %u, center freq2 = %u, cac time ms = %u\n",
53+ __func__, dfs_region, chandef.center_freq1, chandef.center_freq2, cac_time_ms);
54+
55 err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
56 if (!err) {
57 wdev->links[0].ap.chandef = chandef;
58--
592.18.0
60