mac80211: add nl80211/cfg80211 handling of the new mesh root mode option.
[safe/jmp/linux-2.6] / net / mac80211 / main.c
index 05f9235..beb8718 100644 (file)
@@ -241,9 +241,6 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
 
        drv_bss_info_changed(local, &sdata->vif,
                             &sdata->vif.bss_conf, changed);
-
-       /* DEPRECATED */
-       local->hw.conf.beacon_int = sdata->vif.bss_conf.beacon_int;
 }
 
 u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
@@ -388,13 +385,13 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
         *      can be unknown, for example with different interrupt status
         *      bits.
         */
-       if (test_sta_flags(sta, WLAN_STA_PS) &&
+       if (test_sta_flags(sta, WLAN_STA_PS_STA) &&
            skb_queue_len(&sta->tx_filtered) < STA_MAX_TX_BUFFER) {
                skb_queue_tail(&sta->tx_filtered, skb);
                return;
        }
 
-       if (!test_sta_flags(sta, WLAN_STA_PS) &&
+       if (!test_sta_flags(sta, WLAN_STA_PS_STA) &&
            !(info->flags & IEEE80211_TX_INTFL_RETRIED)) {
                /* Software retry the packet once */
                info->flags |= IEEE80211_TX_INTFL_RETRIED;
@@ -409,7 +406,7 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
                       "queue_len=%d PS=%d @%lu\n",
                       wiphy_name(local->hw.wiphy),
                       skb_queue_len(&sta->tx_filtered),
-                      !!test_sta_flags(sta, WLAN_STA_PS), jiffies);
+                      !!test_sta_flags(sta, WLAN_STA_PS_STA), jiffies);
 #endif
        dev_kfree_skb(skb);
 }
@@ -449,7 +446,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
 
        if (sta) {
                if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
-                   test_sta_flags(sta, WLAN_STA_PS)) {
+                   test_sta_flags(sta, WLAN_STA_PS_STA)) {
                        /*
                         * The STA is in power save mode, so assume
                         * that this TX packet failed because of that.
@@ -485,6 +482,8 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
                }
 
                rate_control_tx_status(local, sband, sta, skb);
+               if (ieee80211_vif_is_mesh(&sta->sdata->vif))
+                       ieee80211s_update_metric(local, sta, skb);
        }
 
        rcu_read_unlock();
@@ -687,7 +686,6 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
        local->hw.max_rates = 1;
        local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
        local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
-       local->hw.conf.radio_enabled = true;
        local->user_power_level = -1;
 
        INIT_LIST_HEAD(&local->interfaces);
@@ -717,12 +715,10 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
                skb_queue_head_init(&local->pending[i]);
        tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending,
                     (unsigned long)local);
-       tasklet_disable(&local->tx_pending_tasklet);
 
        tasklet_init(&local->tasklet,
                     ieee80211_tasklet_handler,
                     (unsigned long) local);
-       tasklet_disable(&local->tasklet);
 
        skb_queue_head_init(&local->skb_queue);
        skb_queue_head_init(&local->skb_queue_unreliable);
@@ -905,6 +901,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
                        i++;
                }
        }
+       local->int_scan_req->n_channels = i;
 
        local->network_latency_notifier.notifier_call =
                ieee80211_max_network_latency;
@@ -927,12 +924,11 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
  fail_wep:
        sta_info_stop(local);
  fail_sta_info:
-       debugfs_hw_del(local);
        destroy_workqueue(local->workqueue);
  fail_workqueue:
        wiphy_unregister(local->hw.wiphy);
  fail_wiphy_register:
-       kfree(local->int_scan_req->channels);
+       kfree(local->int_scan_req);
        return result;
 }
 EXPORT_SYMBOL(ieee80211_register_hw);
@@ -963,7 +959,6 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw)
        ieee80211_clear_tx_pending(local);
        sta_info_stop(local);
        rate_control_deinitialize(local);
-       debugfs_hw_del(local);
 
        if (skb_queue_len(&local->skb_queue)
                        || skb_queue_len(&local->skb_queue_unreliable))