blob: c4f3a376fb526cb7cef31d43bce2eb2da8b48826 [file] [log] [blame]
From 3481facddee5af51f45c35d9d9dcd2586acbab38 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/37] mtk: cfg80211: 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 | 7 +++++++
net/wireless/nl80211.c | 3 +++
3 files changed, 11 insertions(+)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 0a825af..25f15d0 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 510079f..30a2f00 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -932,6 +932,13 @@ 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(5600) && freq <= MHZ_TO_KHZ(5640) &&
+ dfs_cac_ms < IEEE80211_DFS_WEATHER_MIN_CAC_TIME_MS &&
+ c->dfs_state == NL80211_DFS_USABLE)
+ 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 193e7d6..dd76503 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -10011,6 +10011,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