cfg80211: enable use of non-cleared DFS channels for DFS offload
authorDmitry Lebed <dlebed@quantenna.com>
Mon, 26 Mar 2018 13:36:32 +0000 (16:36 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 29 Mar 2018 08:21:35 +0000 (10:21 +0200)
Currently channel switch/start_ap to DFS channel cannot be done to
non-CAC-cleared channel even if DFS offload if enabled.
Make non-cleared DFS channels available if DFS offload is enabled.
CAC will be started by HW after channel change, start_ap call, etc.

Signed-off-by: Dmitry Lebed <dlebed@quantenna.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/chan.c

index a488599..2db713d 100644 (file)
@@ -579,6 +579,10 @@ static bool cfg80211_get_chans_dfs_available(struct wiphy *wiphy,
 {
        struct ieee80211_channel *c;
        u32 freq, start_freq, end_freq;
+       bool dfs_offload;
+
+       dfs_offload = wiphy_ext_feature_isset(wiphy,
+                                             NL80211_EXT_FEATURE_DFS_OFFLOAD);
 
        start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
        end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
@@ -596,8 +600,9 @@ static bool cfg80211_get_chans_dfs_available(struct wiphy *wiphy,
                if (c->flags & IEEE80211_CHAN_DISABLED)
                        return false;
 
-               if ((c->flags & IEEE80211_CHAN_RADAR)  &&
-                   (c->dfs_state != NL80211_DFS_AVAILABLE))
+               if ((c->flags & IEEE80211_CHAN_RADAR) &&
+                   (c->dfs_state != NL80211_DFS_AVAILABLE) &&
+                   !(c->dfs_state == NL80211_DFS_USABLE && dfs_offload))
                        return false;
        }