diff options
author | John W. Linville <linville@tuxdriver.com> | 2010-02-08 16:38:38 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-02-08 16:38:38 -0500 |
commit | 6e7e6213e4956828927c30e3ef5a42812d00c650 (patch) | |
tree | 3e13859aae5ac0a50eecd452e96849e5e373f444 | |
parent | 5ffaf8a361b4c9025963959a744f21d8173c7669 (diff) | |
parent | c0ce77b8323c1a0d4eeef97caf16c0ea971222a9 (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.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/b43/b43.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/b43/main.c | 13 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sta.c | 4 | ||||
-rw-r--r-- | drivers/ssb/main.c | 3 | ||||
-rw-r--r-- | net/mac80211/driver-trace.h | 2 | ||||
-rw-r--r-- | net/mac80211/ibss.c | 2 | ||||
-rw-r--r-- | net/mac80211/scan.c | 27 |
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 | ||
815 | static void ath9k_hw_init_11a_eeprom_fix(struct ath_hw *ah) | 815 | static 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) | |||
637 | static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time) | 637 | static 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 | ||
646 | static void b43_short_slot_timing_enable(struct b43_wldev *dev) | 653 | static 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 | } |
340 | EXPORT_SYMBOL(iwl_add_station); | 340 | EXPORT_SYMBOL(iwl_add_station); |
341 | 341 | ||
342 | static void iwl_sta_ucode_deactivate(struct iwl_priv *priv, const char *addr) | 342 | static 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); |