mac80211: adjust initial chandefs assignments in ieee80211_register_hw
authorKarl Beldan <karl.beldan@rivierawaves.com>
Mon, 15 Apr 2013 17:04:06 +0000 (19:04 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 16 Apr 2013 14:01:23 +0000 (16:01 +0200)
I noticed that monitor interfaces by default would start on 5GHz
while STA/AP ones would start 2GHZ - It stems from the fact that
ieee80211_register_hw unnecessarily adjusts the local->monitor_chandef
for each band.

This avoids this and while at it uses a single dflt_chandef to initialize
in one go local->{hw.conf.chandef,_oper_chandef,monitor_chandef}

Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/main.c

index 52136fd5ba97b63701e70acc1650ded849fcac3b..8a7bfc47d5778fd7bbc3f561ecf483996c2041e1 100644 (file)
@@ -668,6 +668,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
        int channels, max_bitrates;
        bool supp_ht, supp_vht;
        netdev_features_t feature_whitelist;
+       struct cfg80211_chan_def dflt_chandef = {};
        static const u32 cipher_suites[] = {
                /* keep WEP first, it may be removed below */
                WLAN_CIPHER_SUITE_WEP40,
@@ -745,19 +746,19 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
                sband = local->hw.wiphy->bands[band];
                if (!sband)
                        continue;
-               if (!local->use_chanctx && !local->_oper_chandef.chan) {
+
+               if (!dflt_chandef.chan) {
+                       cfg80211_chandef_create(&dflt_chandef,
+                                               &sband->channels[0],
+                                               NL80211_CHAN_NO_HT);
                        /* init channel we're on */
-                       struct cfg80211_chan_def chandef = {
-                               .chan = &sband->channels[0],
-                               .width = NL80211_CHAN_NO_HT,
-                               .center_freq1 = sband->channels[0].center_freq,
-                               .center_freq2 = 0
-                       };
-                       local->hw.conf.chandef = local->_oper_chandef = chandef;
+                       if (!local->use_chanctx && !local->_oper_chandef.chan) {
+                               local->hw.conf.chandef = dflt_chandef;
+                               local->_oper_chandef = dflt_chandef;
+                       }
+                       local->monitor_chandef = dflt_chandef;
                }
-               cfg80211_chandef_create(&local->monitor_chandef,
-                                       &sband->channels[0],
-                                       NL80211_CHAN_NO_HT);
+
                channels += sband->n_channels;
 
                if (max_bitrates < sband->n_bitrates)