diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 45 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-devtrace.c | 26 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-devtrace.h | 26 | ||||
-rw-r--r-- | drivers/net/wireless/iwmc3200wifi/commands.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwmc3200wifi/commands.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/p54/p54pci.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 1 | ||||
-rw-r--r-- | net/mac80211/cfg.c | 3 | ||||
-rw-r--r-- | net/mac80211/iface.c | 10 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 4 | ||||
-rw-r--r-- | net/mac80211/rc80211_pid_algo.c | 2 | ||||
-rw-r--r-- | net/mac80211/rx.c | 4 | ||||
-rw-r--r-- | net/wireless/core.c | 4 | ||||
-rw-r--r-- | net/wireless/sme.c | 1 |
17 files changed, 119 insertions, 29 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index cee368d4859f..6a004abb5973 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -1961,7 +1961,7 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv, | |||
1961 | struct ieee80211_tx_info *info; | 1961 | struct ieee80211_tx_info *info; |
1962 | struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; | 1962 | struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; |
1963 | u32 status = le32_to_cpu(tx_resp->u.status); | 1963 | u32 status = le32_to_cpu(tx_resp->u.status); |
1964 | int tid = MAX_TID_COUNT - 1; | 1964 | int uninitialized_var(tid); |
1965 | int sta_id; | 1965 | int sta_id; |
1966 | int freed; | 1966 | int freed; |
1967 | u8 *qc = NULL; | 1967 | u8 *qc = NULL; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index c3f8ec0a38b1..c6120f0b8f98 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -1600,6 +1600,7 @@ struct iwl_cfg iwl5300_agn_cfg = { | |||
1600 | .use_bsm = false, | 1600 | .use_bsm = false, |
1601 | .ht_greenfield_support = true, | 1601 | .ht_greenfield_support = true, |
1602 | .led_compensation = 51, | 1602 | .led_compensation = 51, |
1603 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
1603 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 1604 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
1604 | }; | 1605 | }; |
1605 | 1606 | ||
@@ -1623,6 +1624,7 @@ struct iwl_cfg iwl5100_bgn_cfg = { | |||
1623 | .use_bsm = false, | 1624 | .use_bsm = false, |
1624 | .ht_greenfield_support = true, | 1625 | .ht_greenfield_support = true, |
1625 | .led_compensation = 51, | 1626 | .led_compensation = 51, |
1627 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
1626 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 1628 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
1627 | }; | 1629 | }; |
1628 | 1630 | ||
@@ -1668,6 +1670,7 @@ struct iwl_cfg iwl5100_agn_cfg = { | |||
1668 | .use_bsm = false, | 1670 | .use_bsm = false, |
1669 | .ht_greenfield_support = true, | 1671 | .ht_greenfield_support = true, |
1670 | .led_compensation = 51, | 1672 | .led_compensation = 51, |
1673 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
1671 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 1674 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
1672 | }; | 1675 | }; |
1673 | 1676 | ||
@@ -1691,6 +1694,7 @@ struct iwl_cfg iwl5350_agn_cfg = { | |||
1691 | .use_bsm = false, | 1694 | .use_bsm = false, |
1692 | .ht_greenfield_support = true, | 1695 | .ht_greenfield_support = true, |
1693 | .led_compensation = 51, | 1696 | .led_compensation = 51, |
1697 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
1694 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 1698 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
1695 | }; | 1699 | }; |
1696 | 1700 | ||
@@ -1714,6 +1718,7 @@ struct iwl_cfg iwl5150_agn_cfg = { | |||
1714 | .use_bsm = false, | 1718 | .use_bsm = false, |
1715 | .ht_greenfield_support = true, | 1719 | .ht_greenfield_support = true, |
1716 | .led_compensation = 51, | 1720 | .led_compensation = 51, |
1721 | .use_rts_for_ht = true, /* use rts/cts protection */ | ||
1717 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 1722 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
1718 | }; | 1723 | }; |
1719 | 1724 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 14f482960d7f..5b56307a3812 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -2334,6 +2334,21 @@ static void iwl_ht_conf(struct iwl_priv *priv, | |||
2334 | IWL_DEBUG_MAC80211(priv, "leave\n"); | 2334 | IWL_DEBUG_MAC80211(priv, "leave\n"); |
2335 | } | 2335 | } |
2336 | 2336 | ||
2337 | static inline void iwl_set_no_assoc(struct iwl_priv *priv) | ||
2338 | { | ||
2339 | priv->assoc_id = 0; | ||
2340 | iwl_led_disassociate(priv); | ||
2341 | /* | ||
2342 | * inform the ucode that there is no longer an | ||
2343 | * association and that no more packets should be | ||
2344 | * sent | ||
2345 | */ | ||
2346 | priv->staging_rxon.filter_flags &= | ||
2347 | ~RXON_FILTER_ASSOC_MSK; | ||
2348 | priv->staging_rxon.assoc_id = 0; | ||
2349 | iwlcore_commit_rxon(priv); | ||
2350 | } | ||
2351 | |||
2337 | #define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6) | 2352 | #define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6) |
2338 | void iwl_bss_info_changed(struct ieee80211_hw *hw, | 2353 | void iwl_bss_info_changed(struct ieee80211_hw *hw, |
2339 | struct ieee80211_vif *vif, | 2354 | struct ieee80211_vif *vif, |
@@ -2465,20 +2480,8 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw, | |||
2465 | IWL_DELAY_NEXT_SCAN_AFTER_ASSOC; | 2480 | IWL_DELAY_NEXT_SCAN_AFTER_ASSOC; |
2466 | if (!iwl_is_rfkill(priv)) | 2481 | if (!iwl_is_rfkill(priv)) |
2467 | priv->cfg->ops->lib->post_associate(priv); | 2482 | priv->cfg->ops->lib->post_associate(priv); |
2468 | } else { | 2483 | } else |
2469 | priv->assoc_id = 0; | 2484 | iwl_set_no_assoc(priv); |
2470 | iwl_led_disassociate(priv); | ||
2471 | |||
2472 | /* | ||
2473 | * inform the ucode that there is no longer an | ||
2474 | * association and that no more packets should be | ||
2475 | * send | ||
2476 | */ | ||
2477 | priv->staging_rxon.filter_flags &= | ||
2478 | ~RXON_FILTER_ASSOC_MSK; | ||
2479 | priv->staging_rxon.assoc_id = 0; | ||
2480 | iwlcore_commit_rxon(priv); | ||
2481 | } | ||
2482 | } | 2485 | } |
2483 | 2486 | ||
2484 | if (changes && iwl_is_associated(priv) && priv->assoc_id) { | 2487 | if (changes && iwl_is_associated(priv) && priv->assoc_id) { |
@@ -2493,12 +2496,14 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw, | |||
2493 | } | 2496 | } |
2494 | } | 2497 | } |
2495 | 2498 | ||
2496 | if ((changes & BSS_CHANGED_BEACON_ENABLED) && | 2499 | if (changes & BSS_CHANGED_BEACON_ENABLED) { |
2497 | vif->bss_conf.enable_beacon) { | 2500 | if (vif->bss_conf.enable_beacon) { |
2498 | memcpy(priv->staging_rxon.bssid_addr, | 2501 | memcpy(priv->staging_rxon.bssid_addr, |
2499 | bss_conf->bssid, ETH_ALEN); | 2502 | bss_conf->bssid, ETH_ALEN); |
2500 | memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN); | 2503 | memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN); |
2501 | iwlcore_config_ap(priv); | 2504 | iwlcore_config_ap(priv); |
2505 | } else | ||
2506 | iwl_set_no_assoc(priv); | ||
2502 | } | 2507 | } |
2503 | 2508 | ||
2504 | mutex_unlock(&priv->mutex); | 2509 | mutex_unlock(&priv->mutex); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 42f9b17327c3..70f0e79c8e4a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -712,7 +712,7 @@ extern void iwl_txq_ctx_stop(struct iwl_priv *priv); | |||
712 | extern int iwl_queue_space(const struct iwl_queue *q); | 712 | extern int iwl_queue_space(const struct iwl_queue *q); |
713 | static inline int iwl_queue_used(const struct iwl_queue *q, int i) | 713 | static inline int iwl_queue_used(const struct iwl_queue *q, int i) |
714 | { | 714 | { |
715 | return q->write_ptr > q->read_ptr ? | 715 | return q->write_ptr >= q->read_ptr ? |
716 | (i >= q->read_ptr && i < q->write_ptr) : | 716 | (i >= q->read_ptr && i < q->write_ptr) : |
717 | !(i < q->read_ptr && i >= q->write_ptr); | 717 | !(i < q->read_ptr && i >= q->write_ptr); |
718 | } | 718 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.c b/drivers/net/wireless/iwlwifi/iwl-devtrace.c index bf46308b17fa..36580d8d8b8d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-devtrace.c +++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.c | |||
@@ -1,3 +1,29 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of version 2 of the GNU General Public License as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | ||
17 | * | ||
18 | * The full GNU General Public License is included in this distribution in the | ||
19 | * file called LICENSE. | ||
20 | * | ||
21 | * Contact Information: | ||
22 | * Intel Linux Wireless <ilw@linux.intel.com> | ||
23 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
24 | * | ||
25 | *****************************************************************************/ | ||
26 | |||
1 | #include <linux/module.h> | 27 | #include <linux/module.h> |
2 | 28 | ||
3 | /* sparse doesn't like tracepoint macros */ | 29 | /* sparse doesn't like tracepoint macros */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.h b/drivers/net/wireless/iwlwifi/iwl-devtrace.h index 0819f990be6c..ff4d012ce260 100644 --- a/drivers/net/wireless/iwlwifi/iwl-devtrace.h +++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.h | |||
@@ -1,3 +1,29 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of version 2 of the GNU General Public License as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | ||
17 | * | ||
18 | * The full GNU General Public License is included in this distribution in the | ||
19 | * file called LICENSE. | ||
20 | * | ||
21 | * Contact Information: | ||
22 | * Intel Linux Wireless <ilw@linux.intel.com> | ||
23 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
24 | * | ||
25 | *****************************************************************************/ | ||
26 | |||
1 | #if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ) | 27 | #if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define __IWLWIFI_DEVICE_TRACE | 28 | #define __IWLWIFI_DEVICE_TRACE |
3 | 29 | ||
diff --git a/drivers/net/wireless/iwmc3200wifi/commands.c b/drivers/net/wireless/iwmc3200wifi/commands.c index 777584d76a88..1e41ad0fcad5 100644 --- a/drivers/net/wireless/iwmc3200wifi/commands.c +++ b/drivers/net/wireless/iwmc3200wifi/commands.c | |||
@@ -973,6 +973,10 @@ int iwm_send_pmkid_update(struct iwm_priv *iwm, | |||
973 | 973 | ||
974 | memset(&update, 0, sizeof(struct iwm_umac_pmkid_update)); | 974 | memset(&update, 0, sizeof(struct iwm_umac_pmkid_update)); |
975 | 975 | ||
976 | update.hdr.oid = UMAC_WIFI_IF_CMD_PMKID_UPDATE; | ||
977 | update.hdr.buf_size = cpu_to_le16(sizeof(struct iwm_umac_pmkid_update) - | ||
978 | sizeof(struct iwm_umac_wifi_if)); | ||
979 | |||
976 | update.command = cpu_to_le32(command); | 980 | update.command = cpu_to_le32(command); |
977 | if (pmksa->bssid) | 981 | if (pmksa->bssid) |
978 | memcpy(&update.bssid, pmksa->bssid, ETH_ALEN); | 982 | memcpy(&update.bssid, pmksa->bssid, ETH_ALEN); |
diff --git a/drivers/net/wireless/iwmc3200wifi/commands.h b/drivers/net/wireless/iwmc3200wifi/commands.h index 06af0552cd75..3dfd9f0e9003 100644 --- a/drivers/net/wireless/iwmc3200wifi/commands.h +++ b/drivers/net/wireless/iwmc3200wifi/commands.h | |||
@@ -463,6 +463,7 @@ struct iwm_umac_cmd_stop_resume_tx { | |||
463 | #define IWM_CMD_PMKID_FLUSH 3 | 463 | #define IWM_CMD_PMKID_FLUSH 3 |
464 | 464 | ||
465 | struct iwm_umac_pmkid_update { | 465 | struct iwm_umac_pmkid_update { |
466 | struct iwm_umac_wifi_if hdr; | ||
466 | __le32 command; | 467 | __le32 command; |
467 | u8 bssid[ETH_ALEN]; | 468 | u8 bssid[ETH_ALEN]; |
468 | __le16 reserved; | 469 | __le16 reserved; |
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c index a15962a19b2a..a72f7c2577de 100644 --- a/drivers/net/wireless/p54/p54pci.c +++ b/drivers/net/wireless/p54/p54pci.c | |||
@@ -197,6 +197,14 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index, | |||
197 | i %= ring_limit; | 197 | i %= ring_limit; |
198 | continue; | 198 | continue; |
199 | } | 199 | } |
200 | |||
201 | if (unlikely(len > priv->common.rx_mtu)) { | ||
202 | if (net_ratelimit()) | ||
203 | dev_err(&priv->pdev->dev, "rx'd frame size " | ||
204 | "exceeds length threshold.\n"); | ||
205 | |||
206 | len = priv->common.rx_mtu; | ||
207 | } | ||
200 | skb_put(skb, len); | 208 | skb_put(skb, len); |
201 | 209 | ||
202 | if (p54_rx(dev, skb)) { | 210 | if (p54_rx(dev, skb)) { |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index 4daf1c94ec04..442fc1117326 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -62,6 +62,7 @@ static struct usb_device_id usb_ids[] = { | |||
62 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, | 62 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, |
63 | /* ZD1211B */ | 63 | /* ZD1211B */ |
64 | { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B }, | 64 | { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B }, |
65 | { USB_DEVICE(0x0409, 0x0248), .driver_info = DEVICE_ZD1211B }, | ||
65 | { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B }, | 66 | { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B }, |
66 | { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B }, | 67 | { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B }, |
67 | { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, | 68 | { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, |
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index b0102c538b30..facf233843e0 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -1389,6 +1389,9 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, | |||
1389 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); | 1389 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); |
1390 | struct ieee80211_conf *conf = &local->hw.conf; | 1390 | struct ieee80211_conf *conf = &local->hw.conf; |
1391 | 1391 | ||
1392 | if (sdata->vif.type != NL80211_IFTYPE_STATION) | ||
1393 | return -EOPNOTSUPP; | ||
1394 | |||
1392 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) | 1395 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) |
1393 | return -EOPNOTSUPP; | 1396 | return -EOPNOTSUPP; |
1394 | 1397 | ||
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index fe140bf033f9..edf21cebeee8 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -684,21 +684,25 @@ static u16 ieee80211_monitor_select_queue(struct net_device *dev, | |||
684 | struct ieee80211_local *local = sdata->local; | 684 | struct ieee80211_local *local = sdata->local; |
685 | struct ieee80211_hdr *hdr; | 685 | struct ieee80211_hdr *hdr; |
686 | struct ieee80211_radiotap_header *rtap = (void *)skb->data; | 686 | struct ieee80211_radiotap_header *rtap = (void *)skb->data; |
687 | u8 *p; | ||
687 | 688 | ||
688 | if (local->hw.queues < 4) | 689 | if (local->hw.queues < 4) |
689 | return 0; | 690 | return 0; |
690 | 691 | ||
691 | if (skb->len < 4 || | 692 | if (skb->len < 4 || |
692 | skb->len < rtap->it_len + 2 /* frame control */) | 693 | skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) |
693 | return 0; /* doesn't matter, frame will be dropped */ | 694 | return 0; /* doesn't matter, frame will be dropped */ |
694 | 695 | ||
695 | hdr = (void *)((u8 *)skb->data + rtap->it_len); | 696 | hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); |
696 | 697 | ||
697 | if (!ieee80211_is_data(hdr->frame_control)) { | 698 | if (!ieee80211_is_data_qos(hdr->frame_control)) { |
698 | skb->priority = 7; | 699 | skb->priority = 7; |
699 | return ieee802_1d_to_ac[skb->priority]; | 700 | return ieee802_1d_to_ac[skb->priority]; |
700 | } | 701 | } |
701 | 702 | ||
703 | p = ieee80211_get_qos_ctl(hdr); | ||
704 | skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK; | ||
705 | |||
702 | return ieee80211_downgrade_queue(local, skb); | 706 | return ieee80211_downgrade_queue(local, skb); |
703 | } | 707 | } |
704 | 708 | ||
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index a82564e73d91..1e1d16c55ee5 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1478,7 +1478,9 @@ static void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, | |||
1478 | rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); | 1478 | rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); |
1479 | break; | 1479 | break; |
1480 | case IEEE80211_STYPE_ACTION: | 1480 | case IEEE80211_STYPE_ACTION: |
1481 | /* XXX: differentiate, can only happen for CSA now! */ | 1481 | if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT) |
1482 | break; | ||
1483 | |||
1482 | ieee80211_sta_process_chanswitch(sdata, | 1484 | ieee80211_sta_process_chanswitch(sdata, |
1483 | &mgmt->u.action.u.chan_switch.sw_elem, | 1485 | &mgmt->u.action.u.chan_switch.sw_elem, |
1484 | (void *)ifmgd->associated->priv); | 1486 | (void *)ifmgd->associated->priv); |
diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c index 699d3ed869c4..29bc4c516238 100644 --- a/net/mac80211/rc80211_pid_algo.c +++ b/net/mac80211/rc80211_pid_algo.c | |||
@@ -190,7 +190,7 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo, | |||
190 | rate_control_pid_normalize(pinfo, sband->n_bitrates); | 190 | rate_control_pid_normalize(pinfo, sband->n_bitrates); |
191 | 191 | ||
192 | /* Compute the proportional, integral and derivative errors. */ | 192 | /* Compute the proportional, integral and derivative errors. */ |
193 | err_prop = (pinfo->target << RC_PID_ARITH_SHIFT) - pf; | 193 | err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT; |
194 | 194 | ||
195 | err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; | 195 | err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; |
196 | spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; | 196 | spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index efa6d3689c5e..a8e15b84c05b 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1946,6 +1946,10 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx) | |||
1946 | } | 1946 | } |
1947 | break; | 1947 | break; |
1948 | default: | 1948 | default: |
1949 | /* do not process rejected action frames */ | ||
1950 | if (mgmt->u.action.category & 0x80) | ||
1951 | return RX_DROP_MONITOR; | ||
1952 | |||
1949 | return RX_CONTINUE; | 1953 | return RX_CONTINUE; |
1950 | } | 1954 | } |
1951 | 1955 | ||
diff --git a/net/wireless/core.c b/net/wireless/core.c index 0a545bb6ed05..20db90246de5 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
@@ -746,9 +746,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb, | |||
746 | mutex_unlock(&rdev->devlist_mtx); | 746 | mutex_unlock(&rdev->devlist_mtx); |
747 | dev_put(dev); | 747 | dev_put(dev); |
748 | } | 748 | } |
749 | #ifdef CONFIG_CFG80211_WEXT | ||
750 | cfg80211_lock_rdev(rdev); | 749 | cfg80211_lock_rdev(rdev); |
751 | mutex_lock(&rdev->devlist_mtx); | 750 | mutex_lock(&rdev->devlist_mtx); |
751 | #ifdef CONFIG_CFG80211_WEXT | ||
752 | wdev_lock(wdev); | 752 | wdev_lock(wdev); |
753 | switch (wdev->iftype) { | 753 | switch (wdev->iftype) { |
754 | case NL80211_IFTYPE_ADHOC: | 754 | case NL80211_IFTYPE_ADHOC: |
@@ -761,10 +761,10 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb, | |||
761 | break; | 761 | break; |
762 | } | 762 | } |
763 | wdev_unlock(wdev); | 763 | wdev_unlock(wdev); |
764 | #endif | ||
764 | rdev->opencount++; | 765 | rdev->opencount++; |
765 | mutex_unlock(&rdev->devlist_mtx); | 766 | mutex_unlock(&rdev->devlist_mtx); |
766 | cfg80211_unlock_rdev(rdev); | 767 | cfg80211_unlock_rdev(rdev); |
767 | #endif | ||
768 | break; | 768 | break; |
769 | case NETDEV_UNREGISTER: | 769 | case NETDEV_UNREGISTER: |
770 | /* | 770 | /* |
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 2ce5e1609a3d..745c37e7992e 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
@@ -656,6 +656,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, | |||
656 | memset(&wrqu, 0, sizeof(wrqu)); | 656 | memset(&wrqu, 0, sizeof(wrqu)); |
657 | wrqu.ap_addr.sa_family = ARPHRD_ETHER; | 657 | wrqu.ap_addr.sa_family = ARPHRD_ETHER; |
658 | wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); | 658 | wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); |
659 | wdev->wext.connect.ssid_len = 0; | ||
659 | #endif | 660 | #endif |
660 | } | 661 | } |
661 | 662 | ||