summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/b43/main.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-10 14:23:56 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-10 14:23:56 -0800
commit1da63a2131b0185f64a4c623a0e0b030479185fe (patch)
treee859fc05e2904400bf8b0b23f419532c874e43a9 /drivers/net/wireless/b43/main.c
parent3902beb48d369d5e19f66acc2f857865ddc9b3bf (diff)
parenta6baf3af89a266a3d745117de570788b956396e7 (diff)
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: (40 commits) r8169: prevent bit sign expansion error in mdio_write r8169: revert 7da97ec96a0934319c7fbedd3d38baf533e20640 (bis repetita) sky2: new pci id's ax88796: add superh to kconfig dependencies qla3xxx: bugfix: Fix bad logical operation in link state machine. qla3xxx: bugfix: Move link state machine into a worker thread pasemi_mac: Fix CRC checks pasemi_mac: Don't set replace-source-address descriptor bits bonding: don't validate address at device open bonding: fix rtnl locking merge error sky2: netpoll on port 0 only b43: Fix kconfig dependencies for rfkill and leds b43legacy: Fix sparse warning b43: properly request pcmcia IRQ b43legacy: fix shared IRQ race condition b43: fix shared IRQ race condition b43legacy: add me as maintainer and fix URLs b43legacy: fix possible buffer overrun in debugfs b43: Rewrite and fix rfkill init b43: debugfs SHM read buffer overrun fix ...
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r--drivers/net/wireless/b43/main.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 5058e60e5703..2b17c1dc46f1 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -2985,6 +2985,16 @@ static void b43_wireless_core_stop(struct b43_wldev *dev)
if (b43_status(dev) < B43_STAT_STARTED)
return;
+
+ /* Disable and sync interrupts. We must do this before than
+ * setting the status to INITIALIZED, as the interrupt handler
+ * won't care about IRQs then. */
+ spin_lock_irqsave(&wl->irq_lock, flags);
+ dev->irq_savedstate = b43_interrupt_disable(dev, B43_IRQ_ALL);
+ b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* flush */
+ spin_unlock_irqrestore(&wl->irq_lock, flags);
+ b43_synchronize_irq(dev);
+
b43_set_status(dev, B43_STAT_INITIALIZED);
mutex_unlock(&wl->mutex);
@@ -2995,13 +3005,6 @@ static void b43_wireless_core_stop(struct b43_wldev *dev)
ieee80211_stop_queues(wl->hw); //FIXME this could cause a deadlock, as mac80211 seems buggy.
- /* Disable and sync interrupts. */
- spin_lock_irqsave(&wl->irq_lock, flags);
- dev->irq_savedstate = b43_interrupt_disable(dev, B43_IRQ_ALL);
- b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* flush */
- spin_unlock_irqrestore(&wl->irq_lock, flags);
- b43_synchronize_irq(dev);
-
b43_mac_suspend(dev);
free_irq(dev->dev->irq, dev);
b43dbg(wl, "Wireless interface stopped\n");
@@ -3661,7 +3664,6 @@ static int b43_setup_modes(struct b43_wldev *dev,
static void b43_wireless_core_detach(struct b43_wldev *dev)
{
- b43_rfkill_free(dev);
/* We release firmware that late to not be required to re-request
* is all the time when we reinit the core. */
b43_release_firmware(dev);
@@ -3747,7 +3749,6 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
if (!wl->current_dev)
wl->current_dev = dev;
INIT_WORK(&dev->restart_work, b43_chip_reset);
- b43_rfkill_alloc(dev);
b43_radio_turn_off(dev, 1);
b43_switch_analog(dev, 0);