merge r16266, r16269 to 8.09
[openwrt/svn-archive/archive.git] / package / madwifi / patches / 411-autochannel_multi.patch
index b6093cfcd567a0a28bffd97c72dba12a4ac42bd1..1140a1e2a6de4ef4379f85ce11b879f027e1b73a 100644 (file)
@@ -87,7 +87,7 @@
 +              else
 +                      bias += get_overlap(ch->freq, c->ic_freq, ch->bw, bw);
 +      }
-+      return min(bias, (u32) 100);
++      return bias;
 +}
 +EXPORT_SYMBOL(ieee80211_scan_get_bias);
 +
  void
  ieee80211_scan_attach(struct ieee80211com *ic)
  {
-@@ -1155,7 +1272,7 @@ ieee80211_scan_dfs_action(struct ieee802
+@@ -1169,7 +1286,7 @@ ieee80211_scan_dfs_action(struct ieee802
                                IEEE80211_RADAR_CHANCHANGE_TBTT_COUNT;
                        ic->ic_flags |= IEEE80211_F_CHANSWITCH;
                } else {
                        IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH,
                                        "%s: directly switching to channel "
                                        "%3d (%4d MHz)\n", __func__,
-@@ -1166,6 +1283,9 @@ ieee80211_scan_dfs_action(struct ieee802
+@@ -1180,6 +1297,9 @@ ieee80211_scan_dfs_action(struct ieee802
                         * change the channel here. */
                        change_channel(ic, new_channel);
                        ic->ic_bsschan = new_channel;
  }
  
  
-@@ -605,6 +613,7 @@ ap_end(struct ieee80211_scan_state *ss, 
+@@ -575,6 +583,7 @@ ap_end(struct ieee80211_scan_state *ss, 
        struct ap_state *as = ss->ss_priv;
        struct ieee80211_channel *bestchan = NULL;
        struct ieee80211com *ic = NULL;
        int res = 1;
  
        SCAN_AP_LOCK_IRQ(as);
-@@ -613,8 +622,11 @@ ap_end(struct ieee80211_scan_state *ss, 
-               ("wrong opmode %u", vap->iv_opmode));
+@@ -586,8 +595,11 @@ ap_end(struct ieee80211_scan_state *ss, 
  
-       ic = vap->iv_ic;
+       /* record stats for the channel that was scanned last */
+       ic->ic_set_channel(ic);
 +      spin_lock_irqsave(&channel_lock, sflags);
 +      ieee80211_scan_set_bss_channel(ic, NULL);
        bestchan = pick_channel(ss, vap, flags);
                if (ss->ss_last > 0) {
                        /* no suitable channel, should not happen */
                        printk(KERN_ERR "%s: %s: no suitable channel! "
-@@ -633,6 +645,7 @@ ap_end(struct ieee80211_scan_state *ss, 
+@@ -606,6 +618,7 @@ ap_end(struct ieee80211_scan_state *ss, 
                                        bestchan->ic_freq, bestchan->ic_flags &
                                        ~IEEE80211_CHAN_TURBO)) == NULL) {
                                /* should never happen ?? */
                                SCAN_AP_UNLOCK_IRQ_EARLY(as);
                                return 0;
                        }
-@@ -645,6 +658,9 @@ ap_end(struct ieee80211_scan_state *ss, 
+@@ -618,6 +631,9 @@ ap_end(struct ieee80211_scan_state *ss, 
                        as->as_action = action;
                as->as_selbss = se;