aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-01-17 12:11:52 -0500
committerDavid S. Miller <davem@davemloft.net>2012-01-17 12:11:52 -0500
commit4144cb2ade46d97b9c41682fd2e9064a59f23a98 (patch)
tree4b5ef937b4d0dcede6b1669f03c3b6dccf57d5bc
parent59f608d84f937cb5e2fd3a0b9f848f200d47ba85 (diff)
parent604c4ef1c453a1b2ea2cdf04d2b49afec421ebfa (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
-rw-r--r--MAINTAINERS15
-rw-r--r--drivers/bcma/bcma_private.h1
-rw-r--r--drivers/bcma/host_pci.c43
-rw-r--r--drivers/bcma/main.c24
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_mac.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.c5
-rw-r--r--drivers/net/wireless/b43/main.c5
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c2
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c40
-rw-r--r--drivers/net/wireless/ipw2x00/ipw2200.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-scan.c2
-rw-r--r--drivers/net/wireless/mwl8k.c4
-rw-r--r--drivers/net/wireless/rt2x00/rt2800pci.c28
-rw-r--r--include/linux/bcma/bcma.h2
-rw-r--r--net/mac80211/cfg.c2
-rw-r--r--net/mac80211/rx.c1
-rw-r--r--net/mac80211/sta_info.c6
-rw-r--r--net/mac80211/tx.c10
-rw-r--r--net/mac80211/wpa.c19
-rw-r--r--net/mac80211/wpa.h2
20 files changed, 108 insertions, 112 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 1094edf0da17..6e68daa1e64b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1411,6 +1411,7 @@ F: net/ax25/
1411B43 WIRELESS DRIVER 1411B43 WIRELESS DRIVER
1412M: Stefano Brivio <stefano.brivio@polimi.it> 1412M: Stefano Brivio <stefano.brivio@polimi.it>
1413L: linux-wireless@vger.kernel.org 1413L: linux-wireless@vger.kernel.org
1414L: b43-dev@lists.infradead.org (moderated for non-subscribers)
1414W: http://linuxwireless.org/en/users/Drivers/b43 1415W: http://linuxwireless.org/en/users/Drivers/b43
1415S: Maintained 1416S: Maintained
1416F: drivers/net/wireless/b43/ 1417F: drivers/net/wireless/b43/
@@ -1587,6 +1588,13 @@ L: linux-scsi@vger.kernel.org
1587S: Supported 1588S: Supported
1588F: drivers/scsi/bnx2fc/ 1589F: drivers/scsi/bnx2fc/
1589 1590
1591BROADCOM SPECIFIC AMBA DRIVER (BCMA)
1592M: Rafał Miłecki <zajec5@gmail.com>
1593L: linux-wireless@vger.kernel.org
1594S: Maintained
1595F: drivers/bcma/
1596F: include/linux/bcma/
1597
1590BROCADE BFA FC SCSI DRIVER 1598BROCADE BFA FC SCSI DRIVER
1591M: Jing Huang <huangj@brocade.com> 1599M: Jing Huang <huangj@brocade.com>
1592L: linux-scsi@vger.kernel.org 1600L: linux-scsi@vger.kernel.org
@@ -6099,13 +6107,6 @@ S: Maintained
6099F: drivers/ssb/ 6107F: drivers/ssb/
6100F: include/linux/ssb/ 6108F: include/linux/ssb/
6101 6109
6102BROADCOM SPECIFIC AMBA DRIVER (BCMA)
6103M: Rafał Miłecki <zajec5@gmail.com>
6104L: linux-wireless@vger.kernel.org
6105S: Maintained
6106F: drivers/bcma/
6107F: include/linux/bcma/
6108
6109SONY VAIO CONTROL DEVICE DRIVER 6110SONY VAIO CONTROL DEVICE DRIVER
6110M: Mattia Dongili <malattia@linux.it> 6111M: Mattia Dongili <malattia@linux.it>
6111L: platform-driver-x86@vger.kernel.org 6112L: platform-driver-x86@vger.kernel.org
diff --git a/drivers/bcma/bcma_private.h b/drivers/bcma/bcma_private.h
index fda56bde36b8..0def898a1d15 100644
--- a/drivers/bcma/bcma_private.h
+++ b/drivers/bcma/bcma_private.h
@@ -19,6 +19,7 @@ int __init bcma_bus_early_register(struct bcma_bus *bus,
19 struct bcma_device *core_cc, 19 struct bcma_device *core_cc,
20 struct bcma_device *core_mips); 20 struct bcma_device *core_mips);
21#ifdef CONFIG_PM 21#ifdef CONFIG_PM
22int bcma_bus_suspend(struct bcma_bus *bus);
22int bcma_bus_resume(struct bcma_bus *bus); 23int bcma_bus_resume(struct bcma_bus *bus);
23#endif 24#endif
24 25
diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c
index 443b83a2fd7a..f59244e33971 100644
--- a/drivers/bcma/host_pci.c
+++ b/drivers/bcma/host_pci.c
@@ -235,38 +235,32 @@ static void bcma_host_pci_remove(struct pci_dev *dev)
235} 235}
236 236
237#ifdef CONFIG_PM 237#ifdef CONFIG_PM
238static int bcma_host_pci_suspend(struct pci_dev *dev, pm_message_t state) 238static int bcma_host_pci_suspend(struct device *dev)
239{ 239{
240 /* Host specific */ 240 struct pci_dev *pdev = to_pci_dev(dev);
241 pci_save_state(dev); 241 struct bcma_bus *bus = pci_get_drvdata(pdev);
242 pci_disable_device(dev);
243 pci_set_power_state(dev, pci_choose_state(dev, state));
244 242
245 return 0; 243 bus->mapped_core = NULL;
244
245 return bcma_bus_suspend(bus);
246} 246}
247 247
248static int bcma_host_pci_resume(struct pci_dev *dev) 248static int bcma_host_pci_resume(struct device *dev)
249{ 249{
250 struct bcma_bus *bus = pci_get_drvdata(dev); 250 struct pci_dev *pdev = to_pci_dev(dev);
251 int err; 251 struct bcma_bus *bus = pci_get_drvdata(pdev);
252 252
253 /* Host specific */ 253 return bcma_bus_resume(bus);
254 pci_set_power_state(dev, 0); 254}
255 err = pci_enable_device(dev);
256 if (err)
257 return err;
258 pci_restore_state(dev);
259 255
260 /* Bus specific */ 256static SIMPLE_DEV_PM_OPS(bcma_pm_ops, bcma_host_pci_suspend,
261 err = bcma_bus_resume(bus); 257 bcma_host_pci_resume);
262 if (err) 258#define BCMA_PM_OPS (&bcma_pm_ops)
263 return err;
264 259
265 return 0;
266}
267#else /* CONFIG_PM */ 260#else /* CONFIG_PM */
268# define bcma_host_pci_suspend NULL 261
269# define bcma_host_pci_resume NULL 262#define BCMA_PM_OPS NULL
263
270#endif /* CONFIG_PM */ 264#endif /* CONFIG_PM */
271 265
272static DEFINE_PCI_DEVICE_TABLE(bcma_pci_bridge_tbl) = { 266static DEFINE_PCI_DEVICE_TABLE(bcma_pci_bridge_tbl) = {
@@ -284,8 +278,7 @@ static struct pci_driver bcma_pci_bridge_driver = {
284 .id_table = bcma_pci_bridge_tbl, 278 .id_table = bcma_pci_bridge_tbl,
285 .probe = bcma_host_pci_probe, 279 .probe = bcma_host_pci_probe,
286 .remove = bcma_host_pci_remove, 280 .remove = bcma_host_pci_remove,
287 .suspend = bcma_host_pci_suspend, 281 .driver.pm = BCMA_PM_OPS,
288 .resume = bcma_host_pci_resume,
289}; 282};
290 283
291int __init bcma_host_pci_init(void) 284int __init bcma_host_pci_init(void)
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 10f92b371e58..febbc0a1222a 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -241,6 +241,21 @@ int __init bcma_bus_early_register(struct bcma_bus *bus,
241} 241}
242 242
243#ifdef CONFIG_PM 243#ifdef CONFIG_PM
244int bcma_bus_suspend(struct bcma_bus *bus)
245{
246 struct bcma_device *core;
247
248 list_for_each_entry(core, &bus->cores, list) {
249 struct device_driver *drv = core->dev.driver;
250 if (drv) {
251 struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
252 if (adrv->suspend)
253 adrv->suspend(core);
254 }
255 }
256 return 0;
257}
258
244int bcma_bus_resume(struct bcma_bus *bus) 259int bcma_bus_resume(struct bcma_bus *bus)
245{ 260{
246 struct bcma_device *core; 261 struct bcma_device *core;
@@ -252,6 +267,15 @@ int bcma_bus_resume(struct bcma_bus *bus)
252 bcma_core_chipcommon_init(&bus->drv_cc); 267 bcma_core_chipcommon_init(&bus->drv_cc);
253 } 268 }
254 269
270 list_for_each_entry(core, &bus->cores, list) {
271 struct device_driver *drv = core->dev.driver;
272 if (drv) {
273 struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
274 if (adrv->resume)
275 adrv->resume(core);
276 }
277 }
278
255 return 0; 279 return 0;
256} 280}
257#endif 281#endif
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
index 88c81c5706b2..09b8c9dbf78f 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
@@ -557,10 +557,11 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
557 rxs->rs_status |= ATH9K_RXERR_DECRYPT; 557 rxs->rs_status |= ATH9K_RXERR_DECRYPT;
558 else if (rxsp->status11 & AR_MichaelErr) 558 else if (rxsp->status11 & AR_MichaelErr)
559 rxs->rs_status |= ATH9K_RXERR_MIC; 559 rxs->rs_status |= ATH9K_RXERR_MIC;
560 if (rxsp->status11 & AR_KeyMiss)
561 rxs->rs_status |= ATH9K_RXERR_KEYMISS;
562 } 560 }
563 561
562 if (rxsp->status11 & AR_KeyMiss)
563 rxs->rs_status |= ATH9K_RXERR_KEYMISS;
564
564 return 0; 565 return 0;
565} 566}
566EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma); 567EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma);
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
index fd3f19c2e550..e196aba77acf 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -618,10 +618,11 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
618 rs->rs_status |= ATH9K_RXERR_DECRYPT; 618 rs->rs_status |= ATH9K_RXERR_DECRYPT;
619 else if (ads.ds_rxstatus8 & AR_MichaelErr) 619 else if (ads.ds_rxstatus8 & AR_MichaelErr)
620 rs->rs_status |= ATH9K_RXERR_MIC; 620 rs->rs_status |= ATH9K_RXERR_MIC;
621 if (ads.ds_rxstatus8 & AR_KeyMiss)
622 rs->rs_status |= ATH9K_RXERR_KEYMISS;
623 } 621 }
624 622
623 if (ads.ds_rxstatus8 & AR_KeyMiss)
624 rs->rs_status |= ATH9K_RXERR_KEYMISS;
625
625 return 0; 626 return 0;
626} 627}
627EXPORT_SYMBOL(ath9k_hw_rxprocdesc); 628EXPORT_SYMBOL(ath9k_hw_rxprocdesc);
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 1c6f19393efa..b91f28ef1032 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -4852,6 +4852,9 @@ static void b43_op_stop(struct ieee80211_hw *hw)
4852 4852
4853 cancel_work_sync(&(wl->beacon_update_trigger)); 4853 cancel_work_sync(&(wl->beacon_update_trigger));
4854 4854
4855 if (!dev)
4856 goto out;
4857
4855 mutex_lock(&wl->mutex); 4858 mutex_lock(&wl->mutex);
4856 if (b43_status(dev) >= B43_STAT_STARTED) { 4859 if (b43_status(dev) >= B43_STAT_STARTED) {
4857 dev = b43_wireless_core_stop(dev); 4860 dev = b43_wireless_core_stop(dev);
@@ -4863,7 +4866,7 @@ static void b43_op_stop(struct ieee80211_hw *hw)
4863 4866
4864out_unlock: 4867out_unlock:
4865 mutex_unlock(&wl->mutex); 4868 mutex_unlock(&wl->mutex);
4866 4869out:
4867 cancel_work_sync(&(wl->txpower_adjust_work)); 4870 cancel_work_sync(&(wl->txpower_adjust_work));
4868} 4871}
4869 4872
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index f23b0c3e4ea3..bf11850a20f1 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -2475,7 +2475,7 @@ static s32 brcmf_init_iscan(struct brcmf_cfg80211_priv *cfg_priv)
2475 return err; 2475 return err;
2476} 2476}
2477 2477
2478static void brcmf_delay(u32 ms) 2478static __always_inline void brcmf_delay(u32 ms)
2479{ 2479{
2480 if (ms < 1000 / HZ) { 2480 if (ms < 1000 / HZ) {
2481 cond_resched(); 2481 cond_resched();
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
index d106576ce338..448ab9c4eb47 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
@@ -1128,14 +1128,7 @@ static int __devinit brcms_bcma_probe(struct bcma_device *pdev)
1128 return 0; 1128 return 0;
1129} 1129}
1130 1130
1131static int brcms_pci_suspend(struct pci_dev *pdev) 1131static int brcms_suspend(struct bcma_device *pdev)
1132{
1133 pci_save_state(pdev);
1134 pci_disable_device(pdev);
1135 return pci_set_power_state(pdev, PCI_D3hot);
1136}
1137
1138static int brcms_suspend(struct bcma_device *pdev, pm_message_t state)
1139{ 1132{
1140 struct brcms_info *wl; 1133 struct brcms_info *wl;
1141 struct ieee80211_hw *hw; 1134 struct ieee80211_hw *hw;
@@ -1153,40 +1146,15 @@ static int brcms_suspend(struct bcma_device *pdev, pm_message_t state)
1153 wl->pub->hw_up = false; 1146 wl->pub->hw_up = false;
1154 spin_unlock_bh(&wl->lock); 1147 spin_unlock_bh(&wl->lock);
1155 1148
1156 /* temporarily do suspend ourselves */ 1149 pr_debug("brcms_suspend ok\n");
1157 return brcms_pci_suspend(pdev->bus->host_pci);
1158}
1159
1160static int brcms_pci_resume(struct pci_dev *pdev)
1161{
1162 int err = 0;
1163 uint val;
1164
1165 err = pci_set_power_state(pdev, PCI_D0);
1166 if (err)
1167 return err;
1168
1169 pci_restore_state(pdev);
1170
1171 err = pci_enable_device(pdev);
1172 if (err)
1173 return err;
1174
1175 pci_set_master(pdev);
1176
1177 pci_read_config_dword(pdev, 0x40, &val);
1178 if ((val & 0x0000ff00) != 0)
1179 pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
1180 1150
1181 return 0; 1151 return 0;
1182} 1152}
1183 1153
1184static int brcms_resume(struct bcma_device *pdev) 1154static int brcms_resume(struct bcma_device *pdev)
1185{ 1155{
1186 /* 1156 pr_debug("brcms_resume ok\n");
1187 * just do pci resume for now until bcma supports it. 1157 return 0;
1188 */
1189 return brcms_pci_resume(pdev->bus->host_pci);
1190} 1158}
1191 1159
1192static struct bcma_driver brcms_bcma_driver = { 1160static struct bcma_driver brcms_bcma_driver = {
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c
index 018a8deb88a8..4fcdac63a300 100644
--- a/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c
@@ -7848,7 +7848,7 @@ static void ipw_handle_data_packet_monitor(struct ipw_priv *priv,
7848 * more efficiently than we can parse it. ORDER MATTERS HERE */ 7848 * more efficiently than we can parse it. ORDER MATTERS HERE */
7849 struct ipw_rt_hdr *ipw_rt; 7849 struct ipw_rt_hdr *ipw_rt;
7850 7850
7851 short len = le16_to_cpu(pkt->u.frame.length); 7851 unsigned short len = le16_to_cpu(pkt->u.frame.length);
7852 7852
7853 /* We received data from the HW, so stop the watchdog */ 7853 /* We received data from the HW, so stop the watchdog */
7854 dev->trans_start = jiffies; 7854 dev->trans_start = jiffies;
@@ -8023,7 +8023,7 @@ static void ipw_handle_promiscuous_rx(struct ipw_priv *priv,
8023 s8 signal = frame->rssi_dbm - IPW_RSSI_TO_DBM; 8023 s8 signal = frame->rssi_dbm - IPW_RSSI_TO_DBM;
8024 s8 noise = (s8) le16_to_cpu(frame->noise); 8024 s8 noise = (s8) le16_to_cpu(frame->noise);
8025 u8 rate = frame->rate; 8025 u8 rate = frame->rate;
8026 short len = le16_to_cpu(pkt->u.frame.length); 8026 unsigned short len = le16_to_cpu(pkt->u.frame.length);
8027 struct sk_buff *skb; 8027 struct sk_buff *skb;
8028 int hdr_only = 0; 8028 int hdr_only = 0;
8029 u16 filter = priv->prom_priv->filter; 8029 u16 filter = priv->prom_priv->filter;
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
index 084aa2c4ccfb..a6454726737e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@ -569,7 +569,7 @@ static int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
569 struct iwl_scan_cmd *scan; 569 struct iwl_scan_cmd *scan;
570 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; 570 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
571 u32 rate_flags = 0; 571 u32 rate_flags = 0;
572 u16 cmd_len; 572 u16 cmd_len = 0;
573 u16 rx_chain = 0; 573 u16 rx_chain = 0;
574 enum ieee80211_band band; 574 enum ieee80211_band band;
575 u8 n_probes = 0; 575 u8 n_probes = 0;
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index 7becea3dec65..dd5aeaff44ba 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -2777,7 +2777,7 @@ static int mwl8k_cmd_tx_power(struct ieee80211_hw *hw,
2777 else if (channel->band == IEEE80211_BAND_5GHZ) 2777 else if (channel->band == IEEE80211_BAND_5GHZ)
2778 cmd->band = cpu_to_le16(0x4); 2778 cmd->band = cpu_to_le16(0x4);
2779 2779
2780 cmd->channel = channel->hw_value; 2780 cmd->channel = cpu_to_le16(channel->hw_value);
2781 2781
2782 if (conf->channel_type == NL80211_CHAN_NO_HT || 2782 if (conf->channel_type == NL80211_CHAN_NO_HT ||
2783 conf->channel_type == NL80211_CHAN_HT20) { 2783 conf->channel_type == NL80211_CHAN_HT20) {
@@ -4066,7 +4066,7 @@ static int mwl8k_cmd_encryption_remove_key(struct ieee80211_hw *hw,
4066 goto done; 4066 goto done;
4067 4067
4068 if (key->cipher == WLAN_CIPHER_SUITE_WEP40 || 4068 if (key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
4069 WLAN_CIPHER_SUITE_WEP104) 4069 key->cipher == WLAN_CIPHER_SUITE_WEP104)
4070 mwl8k_vif->wep_key_conf[key->keyidx].enabled = 0; 4070 mwl8k_vif->wep_key_conf[key->keyidx].enabled = 0;
4071 4071
4072 cmd->action = cpu_to_le32(MWL8K_ENCR_REMOVE_KEY); 4072 cmd->action = cpu_to_le32(MWL8K_ENCR_REMOVE_KEY);
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 4941a1a23219..dc88baefa72e 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -422,7 +422,6 @@ static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
422static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev, 422static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev,
423 enum dev_state state) 423 enum dev_state state)
424{ 424{
425 int mask = (state == STATE_RADIO_IRQ_ON);
426 u32 reg; 425 u32 reg;
427 unsigned long flags; 426 unsigned long flags;
428 427
@@ -436,25 +435,14 @@ static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev,
436 } 435 }
437 436
438 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); 437 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags);
439 rt2x00pci_register_read(rt2x00dev, INT_MASK_CSR, &reg); 438 reg = 0;
440 rt2x00_set_field32(&reg, INT_MASK_CSR_RXDELAYINT, 0); 439 if (state == STATE_RADIO_IRQ_ON) {
441 rt2x00_set_field32(&reg, INT_MASK_CSR_TXDELAYINT, 0); 440 rt2x00_set_field32(&reg, INT_MASK_CSR_RX_DONE, 1);
442 rt2x00_set_field32(&reg, INT_MASK_CSR_RX_DONE, mask); 441 rt2x00_set_field32(&reg, INT_MASK_CSR_TBTT, 1);
443 rt2x00_set_field32(&reg, INT_MASK_CSR_AC0_DMA_DONE, 0); 442 rt2x00_set_field32(&reg, INT_MASK_CSR_PRE_TBTT, 1);
444 rt2x00_set_field32(&reg, INT_MASK_CSR_AC1_DMA_DONE, 0); 443 rt2x00_set_field32(&reg, INT_MASK_CSR_TX_FIFO_STATUS, 1);
445 rt2x00_set_field32(&reg, INT_MASK_CSR_AC2_DMA_DONE, 0); 444 rt2x00_set_field32(&reg, INT_MASK_CSR_AUTO_WAKEUP, 1);
446 rt2x00_set_field32(&reg, INT_MASK_CSR_AC3_DMA_DONE, 0); 445 }
447 rt2x00_set_field32(&reg, INT_MASK_CSR_HCCA_DMA_DONE, 0);
448 rt2x00_set_field32(&reg, INT_MASK_CSR_MGMT_DMA_DONE, 0);
449 rt2x00_set_field32(&reg, INT_MASK_CSR_MCU_COMMAND, 0);
450 rt2x00_set_field32(&reg, INT_MASK_CSR_RXTX_COHERENT, 0);
451 rt2x00_set_field32(&reg, INT_MASK_CSR_TBTT, mask);
452 rt2x00_set_field32(&reg, INT_MASK_CSR_PRE_TBTT, mask);
453 rt2x00_set_field32(&reg, INT_MASK_CSR_TX_FIFO_STATUS, mask);
454 rt2x00_set_field32(&reg, INT_MASK_CSR_AUTO_WAKEUP, mask);
455 rt2x00_set_field32(&reg, INT_MASK_CSR_GPTIMER, 0);
456 rt2x00_set_field32(&reg, INT_MASK_CSR_RX_COHERENT, 0);
457 rt2x00_set_field32(&reg, INT_MASK_CSR_TX_COHERENT, 0);
458 rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); 446 rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg);
459 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); 447 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags);
460 448
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h
index f4b8346b1a33..83c209f39493 100644
--- a/include/linux/bcma/bcma.h
+++ b/include/linux/bcma/bcma.h
@@ -162,7 +162,7 @@ struct bcma_driver {
162 162
163 int (*probe)(struct bcma_device *dev); 163 int (*probe)(struct bcma_device *dev);
164 void (*remove)(struct bcma_device *dev); 164 void (*remove)(struct bcma_device *dev);
165 int (*suspend)(struct bcma_device *dev, pm_message_t state); 165 int (*suspend)(struct bcma_device *dev);
166 int (*resume)(struct bcma_device *dev); 166 int (*resume)(struct bcma_device *dev);
167 void (*shutdown)(struct bcma_device *dev); 167 void (*shutdown)(struct bcma_device *dev);
168 168
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index e60df48fa4d4..296620d6ca0c 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -791,7 +791,7 @@ static int sta_apply_parameters(struct ieee80211_local *local,
791 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED)) 791 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED))
792 ret = sta_info_move_state_checked(sta, 792 ret = sta_info_move_state_checked(sta,
793 IEEE80211_STA_AUTHORIZED); 793 IEEE80211_STA_AUTHORIZED);
794 else 794 else if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
795 ret = sta_info_move_state_checked(sta, 795 ret = sta_info_move_state_checked(sta,
796 IEEE80211_STA_ASSOC); 796 IEEE80211_STA_ASSOC);
797 if (ret) 797 if (ret)
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index f407427c642f..751409120769 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1979,6 +1979,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1979 mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3, 1979 mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3,
1980 0, reason, fwd_hdr->addr2, sdata); 1980 0, reason, fwd_hdr->addr2, sdata);
1981 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); 1981 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route);
1982 kfree_skb(fwd_skb);
1982 return RX_DROP_MONITOR; 1983 return RX_DROP_MONITOR;
1983 } 1984 }
1984 1985
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 3c428d4839c7..ff11f6bf8266 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -238,9 +238,11 @@ static void sta_unblock(struct work_struct *wk)
238 if (sta->dead) 238 if (sta->dead)
239 return; 239 return;
240 240
241 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) 241 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
242 local_bh_disable();
242 ieee80211_sta_ps_deliver_wakeup(sta); 243 ieee80211_sta_ps_deliver_wakeup(sta);
243 else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) { 244 local_bh_enable();
245 } else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
244 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); 246 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
245 247
246 local_bh_disable(); 248 local_bh_disable();
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index edcd1c7ab83f..e05667cd5e76 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1001,8 +1001,6 @@ ieee80211_tx_h_stats(struct ieee80211_tx_data *tx)
1001static ieee80211_tx_result debug_noinline 1001static ieee80211_tx_result debug_noinline
1002ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx) 1002ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
1003{ 1003{
1004 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
1005
1006 if (!tx->key) 1004 if (!tx->key)
1007 return TX_CONTINUE; 1005 return TX_CONTINUE;
1008 1006
@@ -1017,13 +1015,7 @@ ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
1017 case WLAN_CIPHER_SUITE_AES_CMAC: 1015 case WLAN_CIPHER_SUITE_AES_CMAC:
1018 return ieee80211_crypto_aes_cmac_encrypt(tx); 1016 return ieee80211_crypto_aes_cmac_encrypt(tx);
1019 default: 1017 default:
1020 /* handle hw-only algorithm */ 1018 return ieee80211_crypto_hw_encrypt(tx);
1021 if (info->control.hw_key) {
1022 ieee80211_tx_set_protected(tx);
1023 return TX_CONTINUE;
1024 }
1025 break;
1026
1027 } 1019 }
1028 1020
1029 return TX_DROP; 1021 return TX_DROP;
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
index 422b79851ec5..b758350919ff 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -643,3 +643,22 @@ ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx)
643 643
644 return RX_CONTINUE; 644 return RX_CONTINUE;
645} 645}
646
647ieee80211_tx_result
648ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx)
649{
650 struct sk_buff *skb;
651 struct ieee80211_tx_info *info = NULL;
652
653 skb_queue_walk(&tx->skbs, skb) {
654 info = IEEE80211_SKB_CB(skb);
655
656 /* handle hw-only algorithm */
657 if (!info->control.hw_key)
658 return TX_DROP;
659 }
660
661 ieee80211_tx_set_protected(tx);
662
663 return TX_CONTINUE;
664}
diff --git a/net/mac80211/wpa.h b/net/mac80211/wpa.h
index baba0608313e..07e33f899c71 100644
--- a/net/mac80211/wpa.h
+++ b/net/mac80211/wpa.h
@@ -32,5 +32,7 @@ ieee80211_tx_result
32ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx); 32ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx);
33ieee80211_rx_result 33ieee80211_rx_result
34ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx); 34ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx);
35ieee80211_tx_result
36ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx);
35 37
36#endif /* WPA_H */ 38#endif /* WPA_H */