diff options
-rw-r--r-- | drivers/bluetooth/ath3k.c | 3 | ||||
-rw-r--r-- | drivers/bluetooth/btusb.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath5k/phy.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/init.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/rx.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800pci.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/wl1251/main.c | 3 | ||||
-rw-r--r-- | drivers/ssb/pcmcia.c | 2 | ||||
-rw-r--r-- | net/bluetooth/rfcomm/tty.c | 2 | ||||
-rw-r--r-- | net/mac80211/cfg.c | 2 | ||||
-rw-r--r-- | net/mac80211/ieee80211_i.h | 2 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 6 | ||||
-rw-r--r-- | net/mac80211/status.c | 7 | ||||
-rw-r--r-- | net/mac80211/tx.c | 2 | ||||
-rw-r--r-- | net/mac80211/util.c | 2 |
21 files changed, 51 insertions, 34 deletions
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c index e6acaba1e45c..5577ed656e2f 100644 --- a/drivers/bluetooth/ath3k.c +++ b/drivers/bluetooth/ath3k.c | |||
@@ -69,6 +69,9 @@ static struct usb_device_id ath3k_table[] = { | |||
69 | /* Atheros AR3012 with sflash firmware*/ | 69 | /* Atheros AR3012 with sflash firmware*/ |
70 | { USB_DEVICE(0x0CF3, 0x3004) }, | 70 | { USB_DEVICE(0x0CF3, 0x3004) }, |
71 | 71 | ||
72 | /* Atheros AR5BBU12 with sflash firmware */ | ||
73 | { USB_DEVICE(0x0489, 0xE02C) }, | ||
74 | |||
72 | { } /* Terminating entry */ | 75 | { } /* Terminating entry */ |
73 | }; | 76 | }; |
74 | 77 | ||
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 89b9e51eec1f..411ae9c9b384 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c | |||
@@ -108,6 +108,9 @@ static struct usb_device_id blacklist_table[] = { | |||
108 | /* Atheros 3012 with sflash firmware */ | 108 | /* Atheros 3012 with sflash firmware */ |
109 | { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE }, | 109 | { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE }, |
110 | 110 | ||
111 | /* Atheros AR5BBU12 with sflash firmware */ | ||
112 | { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, | ||
113 | |||
111 | /* Broadcom BCM2035 */ | 114 | /* Broadcom BCM2035 */ |
112 | { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, | 115 | { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, |
113 | { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, | 116 | { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, |
@@ -828,7 +831,7 @@ static void btusb_work(struct work_struct *work) | |||
828 | 831 | ||
829 | if (hdev->conn_hash.sco_num > 0) { | 832 | if (hdev->conn_hash.sco_num > 0) { |
830 | if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { | 833 | if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { |
831 | err = usb_autopm_get_interface(data->isoc); | 834 | err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf); |
832 | if (err < 0) { | 835 | if (err < 0) { |
833 | clear_bit(BTUSB_ISOC_RUNNING, &data->flags); | 836 | clear_bit(BTUSB_ISOC_RUNNING, &data->flags); |
834 | usb_kill_anchored_urbs(&data->isoc_anchor); | 837 | usb_kill_anchored_urbs(&data->isoc_anchor); |
@@ -857,7 +860,7 @@ static void btusb_work(struct work_struct *work) | |||
857 | 860 | ||
858 | __set_isoc_interface(hdev, 0); | 861 | __set_isoc_interface(hdev, 0); |
859 | if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) | 862 | if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) |
860 | usb_autopm_put_interface(data->isoc); | 863 | usb_autopm_put_interface(data->isoc ? data->isoc : data->intf); |
861 | } | 864 | } |
862 | } | 865 | } |
863 | 866 | ||
diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c index d673ab2f6cda..62ce2f4e8605 100644 --- a/drivers/net/wireless/ath/ath5k/phy.c +++ b/drivers/net/wireless/ath/ath5k/phy.c | |||
@@ -1281,6 +1281,7 @@ static int ath5k_hw_channel(struct ath5k_hw *ah, | |||
1281 | case AR5K_RF5111: | 1281 | case AR5K_RF5111: |
1282 | ret = ath5k_hw_rf5111_channel(ah, channel); | 1282 | ret = ath5k_hw_rf5111_channel(ah, channel); |
1283 | break; | 1283 | break; |
1284 | case AR5K_RF2317: | ||
1284 | case AR5K_RF2425: | 1285 | case AR5K_RF2425: |
1285 | ret = ath5k_hw_rf2425_channel(ah, channel); | 1286 | ret = ath5k_hw_rf2425_channel(ah, channel); |
1286 | break; | 1287 | break; |
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 4d60583b0f69..a224c56448de 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/device.h> | 21 | #include <linux/device.h> |
22 | #include <linux/leds.h> | 22 | #include <linux/leds.h> |
23 | #include <linux/completion.h> | 23 | #include <linux/completion.h> |
24 | #include <linux/pm_qos_params.h> | ||
25 | 24 | ||
26 | #include "debug.h" | 25 | #include "debug.h" |
27 | #include "common.h" | 26 | #include "common.h" |
@@ -57,8 +56,6 @@ struct ath_node; | |||
57 | 56 | ||
58 | #define A_MAX(a, b) ((a) > (b) ? (a) : (b)) | 57 | #define A_MAX(a, b) ((a) > (b) ? (a) : (b)) |
59 | 58 | ||
60 | #define ATH9K_PM_QOS_DEFAULT_VALUE 55 | ||
61 | |||
62 | #define TSF_TO_TU(_h,_l) \ | 59 | #define TSF_TO_TU(_h,_l) \ |
63 | ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10)) | 60 | ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10)) |
64 | 61 | ||
@@ -218,6 +215,7 @@ struct ath_frame_info { | |||
218 | struct ath_buf_state { | 215 | struct ath_buf_state { |
219 | u8 bf_type; | 216 | u8 bf_type; |
220 | u8 bfs_paprd; | 217 | u8 bfs_paprd; |
218 | unsigned long bfs_paprd_timestamp; | ||
221 | enum ath9k_internal_frame_type bfs_ftype; | 219 | enum ath9k_internal_frame_type bfs_ftype; |
222 | }; | 220 | }; |
223 | 221 | ||
@@ -602,7 +600,6 @@ struct ath_softc { | |||
602 | struct work_struct paprd_work; | 600 | struct work_struct paprd_work; |
603 | struct work_struct hw_check_work; | 601 | struct work_struct hw_check_work; |
604 | struct completion paprd_complete; | 602 | struct completion paprd_complete; |
605 | bool paprd_pending; | ||
606 | 603 | ||
607 | unsigned int hw_busy_count; | 604 | unsigned int hw_busy_count; |
608 | 605 | ||
@@ -649,8 +646,6 @@ struct ath_softc { | |||
649 | struct ath_descdma txsdma; | 646 | struct ath_descdma txsdma; |
650 | 647 | ||
651 | struct ath_ant_comb ant_comb; | 648 | struct ath_ant_comb ant_comb; |
652 | |||
653 | struct pm_qos_request_list pm_qos_req; | ||
654 | }; | 649 | }; |
655 | 650 | ||
656 | void ath9k_tasklet(unsigned long data); | 651 | void ath9k_tasklet(unsigned long data); |
@@ -665,7 +660,6 @@ static inline void ath_read_cachesize(struct ath_common *common, int *csz) | |||
665 | extern struct ieee80211_ops ath9k_ops; | 660 | extern struct ieee80211_ops ath9k_ops; |
666 | extern int ath9k_modparam_nohwcrypt; | 661 | extern int ath9k_modparam_nohwcrypt; |
667 | extern int led_blink; | 662 | extern int led_blink; |
668 | extern int ath9k_pm_qos_value; | ||
669 | extern bool is_ath9k_unloaded; | 663 | extern bool is_ath9k_unloaded; |
670 | 664 | ||
671 | irqreturn_t ath_isr(int irq, void *dev); | 665 | irqreturn_t ath_isr(int irq, void *dev); |
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index e5c1eead98a2..f66c882a39e2 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c | |||
@@ -41,10 +41,6 @@ static int ath9k_btcoex_enable; | |||
41 | module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444); | 41 | module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444); |
42 | MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); | 42 | MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); |
43 | 43 | ||
44 | int ath9k_pm_qos_value = ATH9K_PM_QOS_DEFAULT_VALUE; | ||
45 | module_param_named(pmqos, ath9k_pm_qos_value, int, S_IRUSR | S_IRGRP | S_IROTH); | ||
46 | MODULE_PARM_DESC(pmqos, "User specified PM-QOS value"); | ||
47 | |||
48 | bool is_ath9k_unloaded; | 44 | bool is_ath9k_unloaded; |
49 | /* We use the hw_value as an index into our private channel structure */ | 45 | /* We use the hw_value as an index into our private channel structure */ |
50 | 46 | ||
@@ -760,9 +756,6 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid, | |||
760 | ath_init_leds(sc); | 756 | ath_init_leds(sc); |
761 | ath_start_rfkill_poll(sc); | 757 | ath_start_rfkill_poll(sc); |
762 | 758 | ||
763 | pm_qos_add_request(&sc->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, | ||
764 | PM_QOS_DEFAULT_VALUE); | ||
765 | |||
766 | return 0; | 759 | return 0; |
767 | 760 | ||
768 | error_world: | 761 | error_world: |
@@ -819,7 +812,6 @@ void ath9k_deinit_device(struct ath_softc *sc) | |||
819 | ath9k_ps_restore(sc); | 812 | ath9k_ps_restore(sc); |
820 | 813 | ||
821 | ieee80211_unregister_hw(hw); | 814 | ieee80211_unregister_hw(hw); |
822 | pm_qos_remove_request(&sc->pm_qos_req); | ||
823 | ath_rx_cleanup(sc); | 815 | ath_rx_cleanup(sc); |
824 | ath_tx_cleanup(sc); | 816 | ath_tx_cleanup(sc); |
825 | ath9k_deinit_softc(sc); | 817 | ath9k_deinit_softc(sc); |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 31f0fad72391..1d2c7c3cc5ca 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -342,7 +342,6 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int | |||
342 | tx_info->control.rates[1].idx = -1; | 342 | tx_info->control.rates[1].idx = -1; |
343 | 343 | ||
344 | init_completion(&sc->paprd_complete); | 344 | init_completion(&sc->paprd_complete); |
345 | sc->paprd_pending = true; | ||
346 | txctl.paprd = BIT(chain); | 345 | txctl.paprd = BIT(chain); |
347 | 346 | ||
348 | if (ath_tx_start(hw, skb, &txctl) != 0) { | 347 | if (ath_tx_start(hw, skb, &txctl) != 0) { |
@@ -353,7 +352,6 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int | |||
353 | 352 | ||
354 | time_left = wait_for_completion_timeout(&sc->paprd_complete, | 353 | time_left = wait_for_completion_timeout(&sc->paprd_complete, |
355 | msecs_to_jiffies(ATH_PAPRD_TIMEOUT)); | 354 | msecs_to_jiffies(ATH_PAPRD_TIMEOUT)); |
356 | sc->paprd_pending = false; | ||
357 | 355 | ||
358 | if (!time_left) | 356 | if (!time_left) |
359 | ath_dbg(ath9k_hw_common(sc->sc_ah), ATH_DBG_CALIBRATE, | 357 | ath_dbg(ath9k_hw_common(sc->sc_ah), ATH_DBG_CALIBRATE, |
@@ -1119,12 +1117,6 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
1119 | ath9k_btcoex_timer_resume(sc); | 1117 | ath9k_btcoex_timer_resume(sc); |
1120 | } | 1118 | } |
1121 | 1119 | ||
1122 | /* User has the option to provide pm-qos value as a module | ||
1123 | * parameter rather than using the default value of | ||
1124 | * 'ATH9K_PM_QOS_DEFAULT_VALUE'. | ||
1125 | */ | ||
1126 | pm_qos_update_request(&sc->pm_qos_req, ath9k_pm_qos_value); | ||
1127 | |||
1128 | if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) | 1120 | if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) |
1129 | common->bus_ops->extn_synch_en(common); | 1121 | common->bus_ops->extn_synch_en(common); |
1130 | 1122 | ||
@@ -1269,8 +1261,6 @@ static void ath9k_stop(struct ieee80211_hw *hw) | |||
1269 | 1261 | ||
1270 | sc->sc_flags |= SC_OP_INVALID; | 1262 | sc->sc_flags |= SC_OP_INVALID; |
1271 | 1263 | ||
1272 | pm_qos_update_request(&sc->pm_qos_req, PM_QOS_DEFAULT_VALUE); | ||
1273 | |||
1274 | mutex_unlock(&sc->mutex); | 1264 | mutex_unlock(&sc->mutex); |
1275 | 1265 | ||
1276 | ath_dbg(common, ATH_DBG_CONFIG, "Driver halt\n"); | 1266 | ath_dbg(common, ATH_DBG_CONFIG, "Driver halt\n"); |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 8d89aa958f1b..bc614acb96de 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1753,6 +1753,9 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf, | |||
1753 | ar9003_hw_set_paprd_txdesc(sc->sc_ah, bf->bf_desc, | 1753 | ar9003_hw_set_paprd_txdesc(sc->sc_ah, bf->bf_desc, |
1754 | bf->bf_state.bfs_paprd); | 1754 | bf->bf_state.bfs_paprd); |
1755 | 1755 | ||
1756 | if (txctl->paprd) | ||
1757 | bf->bf_state.bfs_paprd_timestamp = jiffies; | ||
1758 | |||
1756 | ath_tx_send_normal(sc, txctl->txq, tid, &bf_head); | 1759 | ath_tx_send_normal(sc, txctl->txq, tid, &bf_head); |
1757 | } | 1760 | } |
1758 | 1761 | ||
@@ -1910,7 +1913,9 @@ static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, | |||
1910 | bf->bf_buf_addr = 0; | 1913 | bf->bf_buf_addr = 0; |
1911 | 1914 | ||
1912 | if (bf->bf_state.bfs_paprd) { | 1915 | if (bf->bf_state.bfs_paprd) { |
1913 | if (!sc->paprd_pending) | 1916 | if (time_after(jiffies, |
1917 | bf->bf_state.bfs_paprd_timestamp + | ||
1918 | msecs_to_jiffies(ATH_PAPRD_TIMEOUT))) | ||
1914 | dev_kfree_skb_any(skb); | 1919 | dev_kfree_skb_any(skb); |
1915 | else | 1920 | else |
1916 | complete(&sc->paprd_complete); | 1921 | complete(&sc->paprd_complete); |
diff --git a/drivers/net/wireless/ath/carl9170/rx.c b/drivers/net/wireless/ath/carl9170/rx.c index 939a0e96ed1f..84866a4b8350 100644 --- a/drivers/net/wireless/ath/carl9170/rx.c +++ b/drivers/net/wireless/ath/carl9170/rx.c | |||
@@ -564,7 +564,7 @@ static void carl9170_ps_beacon(struct ar9170 *ar, void *data, unsigned int len) | |||
564 | cam = ieee80211_check_tim(tim_ie, tim_len, ar->common.curaid); | 564 | cam = ieee80211_check_tim(tim_ie, tim_len, ar->common.curaid); |
565 | 565 | ||
566 | /* 2. Maybe the AP wants to send multicast/broadcast data? */ | 566 | /* 2. Maybe the AP wants to send multicast/broadcast data? */ |
567 | cam = !!(tim_ie->bitmap_ctrl & 0x01); | 567 | cam |= !!(tim_ie->bitmap_ctrl & 0x01); |
568 | 568 | ||
569 | if (!cam) { | 569 | if (!cam) { |
570 | /* back to low-power land. */ | 570 | /* back to low-power land. */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index 58213e72d107..5b6932c2193a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c | |||
@@ -2734,7 +2734,6 @@ static struct iwl_lib_ops iwl3945_lib = { | |||
2734 | .isr_ops = { | 2734 | .isr_ops = { |
2735 | .isr = iwl_isr_legacy, | 2735 | .isr = iwl_isr_legacy, |
2736 | }, | 2736 | }, |
2737 | .check_plcp_health = iwl3945_good_plcp_health, | ||
2738 | 2737 | ||
2739 | .debugfs_ops = { | 2738 | .debugfs_ops = { |
2740 | .rx_stats_read = iwl3945_ucode_rx_stats_read, | 2739 | .rx_stats_read = iwl3945_ucode_rx_stats_read, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index aa32b1e05dff..f6493f77610d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
@@ -678,6 +678,8 @@ struct iwl_cfg iwl6000i_2bg_cfg = { | |||
678 | .fw_name_pre = IWL6050_FW_PRE, \ | 678 | .fw_name_pre = IWL6050_FW_PRE, \ |
679 | .ucode_api_max = IWL6050_UCODE_API_MAX, \ | 679 | .ucode_api_max = IWL6050_UCODE_API_MAX, \ |
680 | .ucode_api_min = IWL6050_UCODE_API_MIN, \ | 680 | .ucode_api_min = IWL6050_UCODE_API_MIN, \ |
681 | .valid_tx_ant = ANT_AB, /* .cfg overwrite */ \ | ||
682 | .valid_rx_ant = ANT_AB, /* .cfg overwrite */ \ | ||
681 | .ops = &iwl6050_ops, \ | 683 | .ops = &iwl6050_ops, \ |
682 | .eeprom_ver = EEPROM_6050_EEPROM_VERSION, \ | 684 | .eeprom_ver = EEPROM_6050_EEPROM_VERSION, \ |
683 | .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \ | 685 | .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index a3af656aab3d..abd0461bd307 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1183,6 +1183,9 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv) | |||
1183 | /* only Re-enable if disabled by irq */ | 1183 | /* only Re-enable if disabled by irq */ |
1184 | if (test_bit(STATUS_INT_ENABLED, &priv->status)) | 1184 | if (test_bit(STATUS_INT_ENABLED, &priv->status)) |
1185 | iwl_enable_interrupts(priv); | 1185 | iwl_enable_interrupts(priv); |
1186 | /* Re-enable RF_KILL if it occurred */ | ||
1187 | else if (handled & CSR_INT_BIT_RF_KILL) | ||
1188 | iwl_enable_rfkill_int(priv); | ||
1186 | 1189 | ||
1187 | #ifdef CONFIG_IWLWIFI_DEBUG | 1190 | #ifdef CONFIG_IWLWIFI_DEBUG |
1188 | if (iwl_get_debug_level(priv) & (IWL_DL_ISR)) { | 1191 | if (iwl_get_debug_level(priv) & (IWL_DL_ISR)) { |
@@ -1397,6 +1400,9 @@ static void iwl_irq_tasklet(struct iwl_priv *priv) | |||
1397 | /* only Re-enable if disabled by irq */ | 1400 | /* only Re-enable if disabled by irq */ |
1398 | if (test_bit(STATUS_INT_ENABLED, &priv->status)) | 1401 | if (test_bit(STATUS_INT_ENABLED, &priv->status)) |
1399 | iwl_enable_interrupts(priv); | 1402 | iwl_enable_interrupts(priv); |
1403 | /* Re-enable RF_KILL if it occurred */ | ||
1404 | else if (handled & CSR_INT_BIT_RF_KILL) | ||
1405 | iwl_enable_rfkill_int(priv); | ||
1400 | } | 1406 | } |
1401 | 1407 | ||
1402 | /* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */ | 1408 | /* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */ |
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c index 8f4dfc3d8023..6ac0ff236893 100644 --- a/drivers/net/wireless/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/rt2x00/rt2800pci.c | |||
@@ -1119,6 +1119,8 @@ static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = { | |||
1119 | { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1119 | { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
1120 | #endif | 1120 | #endif |
1121 | #ifdef CONFIG_RT2800PCI_RT35XX | 1121 | #ifdef CONFIG_RT2800PCI_RT35XX |
1122 | { PCI_DEVICE(0x1432, 0x7711), PCI_DEVICE_DATA(&rt2800pci_ops) }, | ||
1123 | { PCI_DEVICE(0x1432, 0x7722), PCI_DEVICE_DATA(&rt2800pci_ops) }, | ||
1122 | { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1124 | { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
1123 | { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1125 | { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
1124 | { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1126 | { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
diff --git a/drivers/net/wireless/wl1251/main.c b/drivers/net/wireless/wl1251/main.c index 1c8b0775d849..5a1c13878eaf 100644 --- a/drivers/net/wireless/wl1251/main.c +++ b/drivers/net/wireless/wl1251/main.c | |||
@@ -1050,6 +1050,9 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1050 | 1050 | ||
1051 | if (changed & BSS_CHANGED_BEACON) { | 1051 | if (changed & BSS_CHANGED_BEACON) { |
1052 | beacon = ieee80211_beacon_get(hw, vif); | 1052 | beacon = ieee80211_beacon_get(hw, vif); |
1053 | if (!beacon) | ||
1054 | goto out_sleep; | ||
1055 | |||
1053 | ret = wl1251_cmd_template_set(wl, CMD_BEACON, beacon->data, | 1056 | ret = wl1251_cmd_template_set(wl, CMD_BEACON, beacon->data, |
1054 | beacon->len); | 1057 | beacon->len); |
1055 | 1058 | ||
diff --git a/drivers/ssb/pcmcia.c b/drivers/ssb/pcmcia.c index c7345dbf43fa..f8533795ee7f 100644 --- a/drivers/ssb/pcmcia.c +++ b/drivers/ssb/pcmcia.c | |||
@@ -733,7 +733,7 @@ int ssb_pcmcia_get_invariants(struct ssb_bus *bus, | |||
733 | 733 | ||
734 | /* Fetch the vendor specific tuples. */ | 734 | /* Fetch the vendor specific tuples. */ |
735 | res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS, | 735 | res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS, |
736 | ssb_pcmcia_do_get_invariants, sprom); | 736 | ssb_pcmcia_do_get_invariants, iv); |
737 | if ((res == 0) || (res == -ENOSPC)) | 737 | if ((res == 0) || (res == -ENOSPC)) |
738 | return 0; | 738 | return 0; |
739 | 739 | ||
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index 2575c2db6404..d7b9af4703d0 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c | |||
@@ -727,7 +727,9 @@ static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp) | |||
727 | break; | 727 | break; |
728 | } | 728 | } |
729 | 729 | ||
730 | tty_unlock(); | ||
730 | schedule(); | 731 | schedule(); |
732 | tty_lock(); | ||
731 | } | 733 | } |
732 | set_current_state(TASK_RUNNING); | 734 | set_current_state(TASK_RUNNING); |
733 | remove_wait_queue(&dev->wait, &wait); | 735 | remove_wait_queue(&dev->wait, &wait); |
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index f7a1f08ec3e0..140503d4c97a 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -1838,6 +1838,7 @@ static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct net_device *dev, | |||
1838 | *cookie ^= 2; | 1838 | *cookie ^= 2; |
1839 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN; | 1839 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN; |
1840 | local->hw_roc_skb = skb; | 1840 | local->hw_roc_skb = skb; |
1841 | local->hw_roc_skb_for_status = skb; | ||
1841 | mutex_unlock(&local->mtx); | 1842 | mutex_unlock(&local->mtx); |
1842 | 1843 | ||
1843 | return 0; | 1844 | return 0; |
@@ -1892,6 +1893,7 @@ static int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy, | |||
1892 | if (ret == 0) { | 1893 | if (ret == 0) { |
1893 | kfree_skb(local->hw_roc_skb); | 1894 | kfree_skb(local->hw_roc_skb); |
1894 | local->hw_roc_skb = NULL; | 1895 | local->hw_roc_skb = NULL; |
1896 | local->hw_roc_skb_for_status = NULL; | ||
1895 | } | 1897 | } |
1896 | 1898 | ||
1897 | mutex_unlock(&local->mtx); | 1899 | mutex_unlock(&local->mtx); |
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index bb63878d865e..0a570a111a84 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -951,7 +951,7 @@ struct ieee80211_local { | |||
951 | 951 | ||
952 | struct ieee80211_channel *hw_roc_channel; | 952 | struct ieee80211_channel *hw_roc_channel; |
953 | struct net_device *hw_roc_dev; | 953 | struct net_device *hw_roc_dev; |
954 | struct sk_buff *hw_roc_skb; | 954 | struct sk_buff *hw_roc_skb, *hw_roc_skb_for_status; |
955 | struct work_struct hw_roc_start, hw_roc_done; | 955 | struct work_struct hw_roc_start, hw_roc_done; |
956 | enum nl80211_channel_type hw_roc_channel_type; | 956 | enum nl80211_channel_type hw_roc_channel_type; |
957 | unsigned int hw_roc_duration; | 957 | unsigned int hw_roc_duration; |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index d89e87866e51..7b3f9df725bd 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1071,6 +1071,12 @@ void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata, | |||
1071 | if (is_multicast_ether_addr(hdr->addr1)) | 1071 | if (is_multicast_ether_addr(hdr->addr1)) |
1072 | return; | 1072 | return; |
1073 | 1073 | ||
1074 | /* | ||
1075 | * In case we receive frames after disassociation. | ||
1076 | */ | ||
1077 | if (!sdata->u.mgd.associated) | ||
1078 | return; | ||
1079 | |||
1074 | ieee80211_sta_reset_conn_monitor(sdata); | 1080 | ieee80211_sta_reset_conn_monitor(sdata); |
1075 | } | 1081 | } |
1076 | 1082 | ||
diff --git a/net/mac80211/status.c b/net/mac80211/status.c index ffb0de9bc2fa..010a559bd872 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c | |||
@@ -327,6 +327,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
327 | 327 | ||
328 | if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { | 328 | if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { |
329 | struct ieee80211_work *wk; | 329 | struct ieee80211_work *wk; |
330 | u64 cookie = (unsigned long)skb; | ||
330 | 331 | ||
331 | rcu_read_lock(); | 332 | rcu_read_lock(); |
332 | list_for_each_entry_rcu(wk, &local->work_list, list) { | 333 | list_for_each_entry_rcu(wk, &local->work_list, list) { |
@@ -338,8 +339,12 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
338 | break; | 339 | break; |
339 | } | 340 | } |
340 | rcu_read_unlock(); | 341 | rcu_read_unlock(); |
342 | if (local->hw_roc_skb_for_status == skb) { | ||
343 | cookie = local->hw_roc_cookie ^ 2; | ||
344 | local->hw_roc_skb_for_status = NULL; | ||
345 | } | ||
341 | cfg80211_mgmt_tx_status( | 346 | cfg80211_mgmt_tx_status( |
342 | skb->dev, (unsigned long) skb, skb->data, skb->len, | 347 | skb->dev, cookie, skb->data, skb->len, |
343 | !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC); | 348 | !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC); |
344 | } | 349 | } |
345 | 350 | ||
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index d0f91d74eaf0..34edf7f22b0e 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1550,7 +1550,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local, | |||
1550 | skb_orphan(skb); | 1550 | skb_orphan(skb); |
1551 | } | 1551 | } |
1552 | 1552 | ||
1553 | if (skb_header_cloned(skb)) | 1553 | if (skb_cloned(skb)) |
1554 | I802_DEBUG_INC(local->tx_expand_skb_head_cloned); | 1554 | I802_DEBUG_INC(local->tx_expand_skb_head_cloned); |
1555 | else if (head_need || tail_need) | 1555 | else if (head_need || tail_need) |
1556 | I802_DEBUG_INC(local->tx_expand_skb_head); | 1556 | I802_DEBUG_INC(local->tx_expand_skb_head); |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 26fd5d29af7f..556647a910ac 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -1204,7 +1204,9 @@ int ieee80211_reconfig(struct ieee80211_local *local) | |||
1204 | switch (sdata->vif.type) { | 1204 | switch (sdata->vif.type) { |
1205 | case NL80211_IFTYPE_STATION: | 1205 | case NL80211_IFTYPE_STATION: |
1206 | changed |= BSS_CHANGED_ASSOC; | 1206 | changed |= BSS_CHANGED_ASSOC; |
1207 | mutex_lock(&sdata->u.mgd.mtx); | ||
1207 | ieee80211_bss_info_change_notify(sdata, changed); | 1208 | ieee80211_bss_info_change_notify(sdata, changed); |
1209 | mutex_unlock(&sdata->u.mgd.mtx); | ||
1208 | break; | 1210 | break; |
1209 | case NL80211_IFTYPE_ADHOC: | 1211 | case NL80211_IFTYPE_ADHOC: |
1210 | changed |= BSS_CHANGED_IBSS; | 1212 | changed |= BSS_CHANGED_IBSS; |