blob: d5a498dbc4d483ddc23f699a45e471271f7d3302 [file] [log] [blame]
From e27e641fd771a6d882a61a889b9295cdab5dcc72 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 09/61] 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 4c5daf9..d987b62 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -163,6 +163,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 4bac395..2224329 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -1152,6 +1152,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 3d11013..b8c8848 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -10019,6 +10019,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.39.2