| From 1eb46f8a687f8c458893c63344e63c63bcdb81f1 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] cfg80211: mtk: 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 8e05f55..585d934 100644 |
| --- a/include/net/cfg80211.h |
| +++ b/include/net/cfg80211.h |
| @@ -142,6 +142,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 5f50ac4..51506f8 100644 |
| --- a/net/wireless/chan.c |
| +++ b/net/wireless/chan.c |
| @@ -843,6 +843,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 bc6b5ac..bc07fe8 100644 |
| --- a/net/wireless/nl80211.c |
| +++ b/net/wireless/nl80211.c |
| @@ -9354,6 +9354,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->chandef = chandef; |
| -- |
| 2.18.0 |
| |