blob: 29753040d1f069ee29d4fffd98b030d745157b85 [file] [log] [blame]
developere0cba192023-07-28 07:08:38 +08001From 6bd3d906bd48ebe0e65c7173af1c7f59e4230d04 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
developere0cba192023-07-28 07:08:38 +08004Subject: [PATCH 02/19] cfg80211: mtk: extend CAC time for weather radar
5 channels
developer4a4b5a42023-06-08 15:07:09 +08006
7Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
8Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
9---
10 include/net/cfg80211.h | 1 +
developer0d4fe282023-07-07 13:46:50 +080011 net/wireless/chan.c | 7 +++++++
developer4a4b5a42023-06-08 15:07:09 +080012 net/wireless/nl80211.c | 3 +++
developer0d4fe282023-07-07 13:46:50 +080013 3 files changed, 11 insertions(+)
developer4a4b5a42023-06-08 15:07:09 +080014
15diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
developere0cba192023-07-28 07:08:38 +080016index 4277f96..d1a88e2 100644
developer4a4b5a42023-06-08 15:07:09 +080017--- a/include/net/cfg80211.h
18+++ b/include/net/cfg80211.h
19@@ -142,6 +142,7 @@ enum ieee80211_channel_flags {
20 (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
21
22 #define IEEE80211_DFS_MIN_CAC_TIME_MS 60000
23+#define IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS 600000
24 #define IEEE80211_DFS_MIN_NOP_TIME_MS (30 * 60 * 1000)
25
26 /**
27diff --git a/net/wireless/chan.c b/net/wireless/chan.c
developere0cba192023-07-28 07:08:38 +080028index 5f50ac4..c217276 100644
developer4a4b5a42023-06-08 15:07:09 +080029--- a/net/wireless/chan.c
30+++ b/net/wireless/chan.c
developer0d4fe282023-07-07 13:46:50 +080031@@ -843,6 +843,13 @@ static unsigned int cfg80211_get_chans_dfs_cac_time(struct wiphy *wiphy,
developer4a4b5a42023-06-08 15:07:09 +080032 if (!(c->flags & IEEE80211_CHAN_RADAR))
33 continue;
34
35+ /* weather radar in ETSI */
36+ if (reg_get_dfs_region(wiphy) == NL80211_DFS_ETSI &&
developer0d4fe282023-07-07 13:46:50 +080037+ freq >= MHZ_TO_KHZ(5600) && freq <= MHZ_TO_KHZ(5640) &&
38+ dfs_cac_ms < IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS &&
39+ c->dfs_state == NL80211_DFS_USABLE)
developer4a4b5a42023-06-08 15:07:09 +080040+ dfs_cac_ms = IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS;
41+
42 if (c->dfs_cac_ms > dfs_cac_ms)
43 dfs_cac_ms = c->dfs_cac_ms;
44 }
45diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
46index bc6b5ac..bc07fe8 100644
47--- a/net/wireless/nl80211.c
48+++ b/net/wireless/nl80211.c
49@@ -9354,6 +9354,9 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
50 if (WARN_ON(!cac_time_ms))
51 cac_time_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
52
53+ pr_info("%s: region = %u, center freq1 = %u, center freq2 = %u, cac time ms = %u\n",
54+ __func__, dfs_region, chandef.center_freq1, chandef.center_freq2, cac_time_ms);
55+
56 err = rdev_start_radar_detection(rdev, dev, &chandef, cac_time_ms);
57 if (!err) {
58 wdev->chandef = chandef;
59--
602.18.0
61