blob: 2a60dc4520ac971487a5cd9cd31b3cd2dd82d7f5 [file] [log] [blame]
developer83ad30d2023-09-12 17:28:06 +08001From 9b4ed2d99cc24c50bef088ee2bc48047d4e17c97 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
developer83ad30d2023-09-12 17:28:06 +08004Subject: [PATCH 02/21] 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
developer83ad30d2023-09-12 17:28:06 +080016index 3e0a190..32df498 100644
developer4a4b5a42023-06-08 15:07:09 +080017--- a/include/net/cfg80211.h
18+++ b/include/net/cfg80211.h
19@@ -149,6 +149,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
developer83ad30d2023-09-12 17:28:06 +080028index d5ed976..caa5acc 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@@ -931,6 +931,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
developer83ad30d2023-09-12 17:28:06 +080046index 6d62c81..3ec073a 100644
developer4a4b5a42023-06-08 15:07:09 +080047--- a/net/wireless/nl80211.c
48+++ b/net/wireless/nl80211.c
developer83ad30d2023-09-12 17:28:06 +080049@@ -9992,6 +9992,9 @@ static int nl80211_start_radar_detection(struct sk_buff *skb,
developer4a4b5a42023-06-08 15:07:09 +080050 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->links[0].ap.chandef = chandef;
59--
developer83ad30d2023-09-12 17:28:06 +0800602.39.2
developer4a4b5a42023-06-08 15:07:09 +080061