aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2010-02-08 16:38:38 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-02-08 16:38:38 -0500
commit6e7e6213e4956828927c30e3ef5a42812d00c650 (patch)
tree3e13859aae5ac0a50eecd452e96849e5e373f444
parent5ffaf8a361b4c9025963959a744f21d8173c7669 (diff)
parentc0ce77b8323c1a0d4eeef97caf16c0ea971222a9 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: net/mac80211/scan.c
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c2
-rw-r--r--drivers/net/wireless/b43/b43.h1
-rw-r--r--drivers/net/wireless/b43/main.c13
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sta.c4
-rw-r--r--drivers/ssb/main.c3
-rw-r--r--net/mac80211/driver-trace.h2
-rw-r--r--net/mac80211/ibss.c2
-rw-r--r--net/mac80211/scan.c27
10 files changed, 40 insertions, 22 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 0b1b88ffa497..f15fee76a4e2 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -812,12 +812,11 @@ static void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah)
812 } 812 }
813} 813}
814 814
815static void ath9k_hw_init_11a_eeprom_fix(struct ath_hw *ah) 815static void ath9k_hw_init_eeprom_fix(struct ath_hw *ah)
816{ 816{
817 u32 i, j; 817 u32 i, j;
818 818
819 if ((ah->hw_version.devid == AR9280_DEVID_PCI) && 819 if (ah->hw_version.devid == AR9280_DEVID_PCI) {
820 test_bit(ATH9K_MODE_11A, ah->caps.wireless_modes)) {
821 820
822 /* EEPROM Fixup */ 821 /* EEPROM Fixup */
823 for (i = 0; i < ah->iniModes.ia_rows; i++) { 822 for (i = 0; i < ah->iniModes.ia_rows; i++) {
@@ -937,7 +936,7 @@ int ath9k_hw_init(struct ath_hw *ah)
937 if (r) 936 if (r)
938 return r; 937 return r;
939 938
940 ath9k_hw_init_11a_eeprom_fix(ah); 939 ath9k_hw_init_eeprom_fix(ah);
941 940
942 r = ath9k_hw_init_macaddr(ah); 941 r = ath9k_hw_init_macaddr(ah);
943 if (r) { 942 if (r) {
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 12069aac1d6c..6796d5cdc293 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1472,10 +1472,10 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,
1472 (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) { 1472 (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) {
1473 ath9k_ps_wakeup(sc); 1473 ath9k_ps_wakeup(sc);
1474 ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq); 1474 ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
1475 ath_beacon_return(sc, avp);
1476 ath9k_ps_restore(sc); 1475 ath9k_ps_restore(sc);
1477 } 1476 }
1478 1477
1478 ath_beacon_return(sc, avp);
1479 sc->sc_flags &= ~SC_OP_BEACONS; 1479 sc->sc_flags &= ~SC_OP_BEACONS;
1480 1480
1481 for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) { 1481 for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) {
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
index 54d6085a887b..6a6ab0f630e5 100644
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
@@ -115,6 +115,7 @@
115#define B43_MMIO_TSF_2 0x636 /* core rev < 3 only */ 115#define B43_MMIO_TSF_2 0x636 /* core rev < 3 only */
116#define B43_MMIO_TSF_3 0x638 /* core rev < 3 only */ 116#define B43_MMIO_TSF_3 0x638 /* core rev < 3 only */
117#define B43_MMIO_RNG 0x65A 117#define B43_MMIO_RNG 0x65A
118#define B43_MMIO_IFSSLOT 0x684 /* Interframe slot time */
118#define B43_MMIO_IFSCTL 0x688 /* Interframe space control */ 119#define B43_MMIO_IFSCTL 0x688 /* Interframe space control */
119#define B43_MMIO_IFSCTL_USE_EDCF 0x0004 120#define B43_MMIO_IFSCTL_USE_EDCF 0x0004
120#define B43_MMIO_POWERUP_DELAY 0x6A8 121#define B43_MMIO_POWERUP_DELAY 0x6A8
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 66220cde9c49..ddd15c52b346 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -637,10 +637,17 @@ static void b43_upload_card_macaddress(struct b43_wldev *dev)
637static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time) 637static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time)
638{ 638{
639 /* slot_time is in usec. */ 639 /* slot_time is in usec. */
640 if (dev->phy.type != B43_PHYTYPE_G) 640 /* This test used to exit for all but a G PHY. */
641 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ)
641 return; 642 return;
642 b43_write16(dev, 0x684, 510 + slot_time); 643 b43_write16(dev, B43_MMIO_IFSSLOT, 510 + slot_time);
643 b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time); 644 /* Shared memory location 0x0010 is the slot time and should be
645 * set to slot_time; however, this register is initially 0 and changing
646 * the value adversely affects the transmit rate for BCM4311
647 * devices. Until this behavior is unterstood, delete this step
648 *
649 * b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time);
650 */
644} 651}
645 652
646static void b43_short_slot_timing_enable(struct b43_wldev *dev) 653static void b43_short_slot_timing_enable(struct b43_wldev *dev)
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 02bf17ecaf54..b248fba4875e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -2787,6 +2787,7 @@ int iwl_mac_config(struct ieee80211_hw *hw, u32 changed)
2787 if ((le16_to_cpu(priv->staging_rxon.channel) != ch)) 2787 if ((le16_to_cpu(priv->staging_rxon.channel) != ch))
2788 priv->staging_rxon.flags = 0; 2788 priv->staging_rxon.flags = 0;
2789 2789
2790 iwl_set_rxon_ht(priv, ht_conf);
2790 iwl_set_rxon_channel(priv, conf->channel); 2791 iwl_set_rxon_channel(priv, conf->channel);
2791 2792
2792 iwl_set_flags_for_band(priv, conf->channel->band); 2793 iwl_set_flags_for_band(priv, conf->channel->band);
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
index e0b13fb78653..4a6686fa6b36 100644
--- a/drivers/net/wireless/iwlwifi/iwl-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
@@ -339,7 +339,7 @@ u8 iwl_add_station(struct iwl_priv *priv, const u8 *addr, bool is_ap, u8 flags,
339} 339}
340EXPORT_SYMBOL(iwl_add_station); 340EXPORT_SYMBOL(iwl_add_station);
341 341
342static void iwl_sta_ucode_deactivate(struct iwl_priv *priv, const char *addr) 342static void iwl_sta_ucode_deactivate(struct iwl_priv *priv, const u8 *addr)
343{ 343{
344 unsigned long flags; 344 unsigned long flags;
345 u8 sta_id = iwl_find_station(priv, addr); 345 u8 sta_id = iwl_find_station(priv, addr);
@@ -366,7 +366,7 @@ static void iwl_remove_sta_callback(struct iwl_priv *priv,
366{ 366{
367 struct iwl_rem_sta_cmd *rm_sta = 367 struct iwl_rem_sta_cmd *rm_sta =
368 (struct iwl_rem_sta_cmd *)cmd->cmd.payload; 368 (struct iwl_rem_sta_cmd *)cmd->cmd.payload;
369 const char *addr = rm_sta->addr; 369 const u8 *addr = rm_sta->addr;
370 370
371 if (pkt->hdr.flags & IWL_CMD_FAILED_MSK) { 371 if (pkt->hdr.flags & IWL_CMD_FAILED_MSK) {
372 IWL_ERR(priv, "Bad return from REPLY_REMOVE_STA (0x%08X)\n", 372 IWL_ERR(priv, "Bad return from REPLY_REMOVE_STA (0x%08X)\n",
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 5681ebed9c65..03dfd27c4bfb 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -494,8 +494,7 @@ static int ssb_devices_register(struct ssb_bus *bus)
494#endif 494#endif
495 break; 495 break;
496 case SSB_BUSTYPE_SDIO: 496 case SSB_BUSTYPE_SDIO:
497#ifdef CONFIG_SSB_SDIO 497#ifdef CONFIG_SSB_SDIOHOST
498 sdev->irq = bus->host_sdio->dev.irq;
499 dev->parent = &bus->host_sdio->dev; 498 dev->parent = &bus->host_sdio->dev;
500#endif 499#endif
501 break; 500 break;
diff --git a/net/mac80211/driver-trace.h b/net/mac80211/driver-trace.h
index fefa6e6b01bc..502424b2538a 100644
--- a/net/mac80211/driver-trace.h
+++ b/net/mac80211/driver-trace.h
@@ -708,7 +708,7 @@ TRACE_EVENT(drv_ampdu_action,
708 __entry->ret = ret; 708 __entry->ret = ret;
709 __entry->action = action; 709 __entry->action = action;
710 __entry->tid = tid; 710 __entry->tid = tid;
711 __entry->ssn = *ssn; 711 __entry->ssn = ssn ? *ssn : 0;
712 ), 712 ),
713 713
714 TP_printk( 714 TP_printk(
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index f95750b423e3..85c4ba14c77d 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -652,7 +652,7 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
652 } 652 }
653 if (pos[1] != 0 && 653 if (pos[1] != 0 &&
654 (pos[1] != ifibss->ssid_len || 654 (pos[1] != ifibss->ssid_len ||
655 !memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) { 655 memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) {
656 /* Ignore ProbeReq for foreign SSID */ 656 /* Ignore ProbeReq for foreign SSID */
657 return; 657 return;
658 } 658 }
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index bc061f629674..b822dce97867 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -345,6 +345,13 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
345 if (local->scan_req) 345 if (local->scan_req)
346 return -EBUSY; 346 return -EBUSY;
347 347
348 if (!list_empty(&local->work_list)) {
349 /* wait for the work to finish/time out */
350 local->scan_req = req;
351 local->scan_sdata = sdata;
352 return 0;
353 }
354
348 if (local->ops->hw_scan) { 355 if (local->ops->hw_scan) {
349 u8 *ies; 356 u8 *ies;
350 357
@@ -364,29 +371,33 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
364 local->hw_scan_req->ie = ies; 371 local->hw_scan_req->ie = ies;
365 372
366 local->hw_scan_band = 0; 373 local->hw_scan_band = 0;
374
375 /*
376 * After allocating local->hw_scan_req, we must
377 * go through until ieee80211_prep_hw_scan(), so
378 * anything that might be changed here and leave
379 * this function early must not go after this
380 * allocation.
381 */
367 } 382 }
368 383
369 local->scan_req = req; 384 local->scan_req = req;
370 local->scan_sdata = sdata; 385 local->scan_sdata = sdata;
371 386
372 if (!list_empty(&local->work_list)) {
373 /* wait for the work to finish/time out */
374 return 0;
375 }
376
377 if (local->ops->hw_scan) 387 if (local->ops->hw_scan)
378 __set_bit(SCAN_HW_SCANNING, &local->scanning); 388 __set_bit(SCAN_HW_SCANNING, &local->scanning);
379 else 389 else
380 __set_bit(SCAN_SW_SCANNING, &local->scanning); 390 __set_bit(SCAN_SW_SCANNING, &local->scanning);
391
381 /* 392 /*
382 * Kicking off the scan need not be protected, 393 * Kicking off the scan need not be protected,
383 * only the scan variable stuff, since now 394 * only the scan variable stuff, since now
384 * local->scan_req is assigned and other callers 395 * local->scan_req is assigned and other callers
385 * will abort their scan attempts. 396 * will abort their scan attempts.
386 * 397 *
387 * This avoids getting a scan_mtx -> iflist_mtx 398 * This avoids too many locking dependencies
388 * dependency, so that the scan completed calls 399 * so that the scan completed calls have more
389 * have more locking freedom. 400 * locking freedom.
390 */ 401 */
391 402
392 ieee80211_recalc_idle(local); 403 ieee80211_recalc_idle(local);