wlcore: allow using dfs channels
authorEliad Peller <eliad@wizery.com>
Mon, 29 Dec 2014 06:24:11 +0000 (08:24 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 9 Jan 2015 13:48:02 +0000 (15:48 +0200)
Since we are going to support dfs channels, there
is no reason to mark them as NO_IR (having
the DFS flag is enough anyway).

Additionally, when setting the regdomain configuration,
enable usable dfs channels.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ti/wlcore/cmd.c
drivers/net/wireless/ti/wlcore/main.c

index aacad4eee070a33fc73bb231ba240b5c8e5c1920..50ca10c95a189ab969bfa11182a3376142a97019 100644 (file)
@@ -1687,9 +1687,7 @@ int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
 {
        struct wl12xx_cmd_regdomain_dfs_config *cmd = NULL;
        int ret = 0, i, b, ch_bit_idx;
-       struct ieee80211_channel *channel;
        u32 tmp_ch_bitmap[2];
-       u16 ch;
        struct wiphy *wiphy = wl->hw->wiphy;
        struct ieee80211_supported_band *band;
        bool timeout = false;
@@ -1704,12 +1702,16 @@ int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
        for (b = IEEE80211_BAND_2GHZ; b <= IEEE80211_BAND_5GHZ; b++) {
                band = wiphy->bands[b];
                for (i = 0; i < band->n_channels; i++) {
-                       channel = &band->channels[i];
-                       ch = channel->hw_value;
+                       struct ieee80211_channel *channel = &band->channels[i];
+                       u16 ch = channel->hw_value;
+                       u32 flags = channel->flags;
 
-                       if (channel->flags & (IEEE80211_CHAN_DISABLED |
-                                             IEEE80211_CHAN_RADAR |
-                                             IEEE80211_CHAN_NO_IR))
+                       if (flags & (IEEE80211_CHAN_DISABLED |
+                                    IEEE80211_CHAN_NO_IR))
+                               continue;
+
+                       if ((flags & IEEE80211_CHAN_RADAR) &&
+                           channel->dfs_state != NL80211_DFS_AVAILABLE)
                                continue;
 
                        ch_bit_idx = wlcore_get_reg_conf_ch_idx(b, ch);
index 2cbec03049e658954d998d0357d731c7317cb28b..a393ae8fa81bc74b8dde9673c33a779009209c85 100644 (file)
@@ -79,23 +79,9 @@ static int wl12xx_set_authorized(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 static void wl1271_reg_notify(struct wiphy *wiphy,
                              struct regulatory_request *request)
 {
-       struct ieee80211_supported_band *band;
-       struct ieee80211_channel *ch;
-       int i;
        struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
        struct wl1271 *wl = hw->priv;
 
-       band = wiphy->bands[IEEE80211_BAND_5GHZ];
-       for (i = 0; i < band->n_channels; i++) {
-               ch = &band->channels[i];
-               if (ch->flags & IEEE80211_CHAN_DISABLED)
-                       continue;
-
-               if (ch->flags & IEEE80211_CHAN_RADAR)
-                       ch->flags |= IEEE80211_CHAN_NO_IR;
-
-       }
-
        wlcore_regdomain_config(wl);
 }