diff options
| -rw-r--r-- | MAINTAINERS | 15 | ||||
| -rw-r--r-- | drivers/bcma/bcma_private.h | 1 | ||||
| -rw-r--r-- | drivers/bcma/host_pci.c | 43 | ||||
| -rw-r--r-- | drivers/bcma/main.c | 24 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_mac.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/mac.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c | 40 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2200.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-scan.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/mwl8k.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800pci.c | 28 | ||||
| -rw-r--r-- | include/linux/bcma/bcma.h | 2 | ||||
| -rw-r--r-- | net/mac80211/cfg.c | 2 | ||||
| -rw-r--r-- | net/mac80211/rx.c | 1 | ||||
| -rw-r--r-- | net/mac80211/sta_info.c | 6 | ||||
| -rw-r--r-- | net/mac80211/tx.c | 10 | ||||
| -rw-r--r-- | net/mac80211/wpa.c | 19 | ||||
| -rw-r--r-- | net/mac80211/wpa.h | 2 |
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/ | |||
| 1411 | B43 WIRELESS DRIVER | 1411 | B43 WIRELESS DRIVER |
| 1412 | M: Stefano Brivio <stefano.brivio@polimi.it> | 1412 | M: Stefano Brivio <stefano.brivio@polimi.it> |
| 1413 | L: linux-wireless@vger.kernel.org | 1413 | L: linux-wireless@vger.kernel.org |
| 1414 | L: b43-dev@lists.infradead.org (moderated for non-subscribers) | ||
| 1414 | W: http://linuxwireless.org/en/users/Drivers/b43 | 1415 | W: http://linuxwireless.org/en/users/Drivers/b43 |
| 1415 | S: Maintained | 1416 | S: Maintained |
| 1416 | F: drivers/net/wireless/b43/ | 1417 | F: drivers/net/wireless/b43/ |
| @@ -1587,6 +1588,13 @@ L: linux-scsi@vger.kernel.org | |||
| 1587 | S: Supported | 1588 | S: Supported |
| 1588 | F: drivers/scsi/bnx2fc/ | 1589 | F: drivers/scsi/bnx2fc/ |
| 1589 | 1590 | ||
| 1591 | BROADCOM SPECIFIC AMBA DRIVER (BCMA) | ||
| 1592 | M: Rafał Miłecki <zajec5@gmail.com> | ||
| 1593 | L: linux-wireless@vger.kernel.org | ||
| 1594 | S: Maintained | ||
| 1595 | F: drivers/bcma/ | ||
| 1596 | F: include/linux/bcma/ | ||
| 1597 | |||
| 1590 | BROCADE BFA FC SCSI DRIVER | 1598 | BROCADE BFA FC SCSI DRIVER |
| 1591 | M: Jing Huang <huangj@brocade.com> | 1599 | M: Jing Huang <huangj@brocade.com> |
| 1592 | L: linux-scsi@vger.kernel.org | 1600 | L: linux-scsi@vger.kernel.org |
| @@ -6099,13 +6107,6 @@ S: Maintained | |||
| 6099 | F: drivers/ssb/ | 6107 | F: drivers/ssb/ |
| 6100 | F: include/linux/ssb/ | 6108 | F: include/linux/ssb/ |
| 6101 | 6109 | ||
| 6102 | BROADCOM SPECIFIC AMBA DRIVER (BCMA) | ||
| 6103 | M: Rafał Miłecki <zajec5@gmail.com> | ||
| 6104 | L: linux-wireless@vger.kernel.org | ||
| 6105 | S: Maintained | ||
| 6106 | F: drivers/bcma/ | ||
| 6107 | F: include/linux/bcma/ | ||
| 6108 | |||
| 6109 | SONY VAIO CONTROL DEVICE DRIVER | 6110 | SONY VAIO CONTROL DEVICE DRIVER |
| 6110 | M: Mattia Dongili <malattia@linux.it> | 6111 | M: Mattia Dongili <malattia@linux.it> |
| 6111 | L: platform-driver-x86@vger.kernel.org | 6112 | L: 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 |
| 22 | int bcma_bus_suspend(struct bcma_bus *bus); | ||
| 22 | int bcma_bus_resume(struct bcma_bus *bus); | 23 | int 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 |
| 238 | static int bcma_host_pci_suspend(struct pci_dev *dev, pm_message_t state) | 238 | static 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 | ||
| 248 | static int bcma_host_pci_resume(struct pci_dev *dev) | 248 | static 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 */ | 256 | static 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 | ||
| 272 | static DEFINE_PCI_DEVICE_TABLE(bcma_pci_bridge_tbl) = { | 266 | static 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 | ||
| 291 | int __init bcma_host_pci_init(void) | 284 | int __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 |
| 244 | int 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 | |||
| 244 | int bcma_bus_resume(struct bcma_bus *bus) | 259 | int 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 | } |
| 566 | EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma); | 567 | EXPORT_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 | } |
| 627 | EXPORT_SYMBOL(ath9k_hw_rxprocdesc); | 628 | EXPORT_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 | ||
| 4864 | out_unlock: | 4867 | out_unlock: |
| 4865 | mutex_unlock(&wl->mutex); | 4868 | mutex_unlock(&wl->mutex); |
| 4866 | 4869 | out: | |
| 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 | ||
| 2478 | static void brcmf_delay(u32 ms) | 2478 | static __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 | ||
| 1131 | static int brcms_pci_suspend(struct pci_dev *pdev) | 1131 | static 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 | |||
| 1138 | static 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 | |||
| 1160 | static 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 | ||
| 1184 | static int brcms_resume(struct bcma_device *pdev) | 1154 | static 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 | ||
| 1192 | static struct bcma_driver brcms_bcma_driver = { | 1160 | static 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) | |||
| 422 | static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev, | 422 | static 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, ®); | 438 | reg = 0; |
| 440 | rt2x00_set_field32(®, INT_MASK_CSR_RXDELAYINT, 0); | 439 | if (state == STATE_RADIO_IRQ_ON) { |
| 441 | rt2x00_set_field32(®, INT_MASK_CSR_TXDELAYINT, 0); | 440 | rt2x00_set_field32(®, INT_MASK_CSR_RX_DONE, 1); |
| 442 | rt2x00_set_field32(®, INT_MASK_CSR_RX_DONE, mask); | 441 | rt2x00_set_field32(®, INT_MASK_CSR_TBTT, 1); |
| 443 | rt2x00_set_field32(®, INT_MASK_CSR_AC0_DMA_DONE, 0); | 442 | rt2x00_set_field32(®, INT_MASK_CSR_PRE_TBTT, 1); |
| 444 | rt2x00_set_field32(®, INT_MASK_CSR_AC1_DMA_DONE, 0); | 443 | rt2x00_set_field32(®, INT_MASK_CSR_TX_FIFO_STATUS, 1); |
| 445 | rt2x00_set_field32(®, INT_MASK_CSR_AC2_DMA_DONE, 0); | 444 | rt2x00_set_field32(®, INT_MASK_CSR_AUTO_WAKEUP, 1); |
| 446 | rt2x00_set_field32(®, INT_MASK_CSR_AC3_DMA_DONE, 0); | 445 | } |
| 447 | rt2x00_set_field32(®, INT_MASK_CSR_HCCA_DMA_DONE, 0); | ||
| 448 | rt2x00_set_field32(®, INT_MASK_CSR_MGMT_DMA_DONE, 0); | ||
| 449 | rt2x00_set_field32(®, INT_MASK_CSR_MCU_COMMAND, 0); | ||
| 450 | rt2x00_set_field32(®, INT_MASK_CSR_RXTX_COHERENT, 0); | ||
| 451 | rt2x00_set_field32(®, INT_MASK_CSR_TBTT, mask); | ||
| 452 | rt2x00_set_field32(®, INT_MASK_CSR_PRE_TBTT, mask); | ||
| 453 | rt2x00_set_field32(®, INT_MASK_CSR_TX_FIFO_STATUS, mask); | ||
| 454 | rt2x00_set_field32(®, INT_MASK_CSR_AUTO_WAKEUP, mask); | ||
| 455 | rt2x00_set_field32(®, INT_MASK_CSR_GPTIMER, 0); | ||
| 456 | rt2x00_set_field32(®, INT_MASK_CSR_RX_COHERENT, 0); | ||
| 457 | rt2x00_set_field32(®, 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) | |||
| 1001 | static ieee80211_tx_result debug_noinline | 1001 | static ieee80211_tx_result debug_noinline |
| 1002 | ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx) | 1002 | ieee80211_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 | |||
| 647 | ieee80211_tx_result | ||
| 648 | ieee80211_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 | |||
| 32 | ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx); | 32 | ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx); |
| 33 | ieee80211_rx_result | 33 | ieee80211_rx_result |
| 34 | ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx); | 34 | ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx); |
| 35 | ieee80211_tx_result | ||
| 36 | ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx); | ||
| 35 | 37 | ||
| 36 | #endif /* WPA_H */ | 38 | #endif /* WPA_H */ |
