diff options
| author | David S. Miller <davem@davemloft.net> | 2008-06-04 17:58:13 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-06-04 17:58:13 -0400 |
| commit | b4496d44c6bd8b2da8d370ef49c4b008ce82370b (patch) | |
| tree | 8b0ef5c9fd850dab06313b8fb7bb916fb903dae8 /drivers | |
| parent | b9031d9d87b24e24cd32ea15b5f4220a1e8da909 (diff) | |
| parent | 4546002c813568829b70d00fab752de3999c3f1a (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/wireless/airo.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 17 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2200.c | 27 | ||||
| -rw-r--r-- | drivers/net/wireless/libertas/debugfs.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/p54/p54usb.c | 1 | ||||
| -rw-r--r-- | drivers/ssb/driver_pcicore.c | 4 |
6 files changed, 40 insertions, 15 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 4e1c690ff45f..32019fb878d8 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
| @@ -2905,7 +2905,7 @@ EXPORT_SYMBOL(init_airo_card); | |||
| 2905 | 2905 | ||
| 2906 | static int waitbusy (struct airo_info *ai) { | 2906 | static int waitbusy (struct airo_info *ai) { |
| 2907 | int delay = 0; | 2907 | int delay = 0; |
| 2908 | while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { | 2908 | while ((IN4500(ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { |
| 2909 | udelay (10); | 2909 | udelay (10); |
| 2910 | if ((++delay % 20) == 0) | 2910 | if ((++delay % 20) == 0) |
| 2911 | OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY); | 2911 | OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY); |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 14a5eea2573e..204077c13870 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
| @@ -3039,7 +3039,6 @@ static void b43legacy_set_pretbtt(struct b43legacy_wldev *dev) | |||
| 3039 | /* Locking: wl->mutex */ | 3039 | /* Locking: wl->mutex */ |
| 3040 | static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) | 3040 | static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) |
| 3041 | { | 3041 | { |
| 3042 | struct b43legacy_wl *wl = dev->wl; | ||
| 3043 | struct b43legacy_phy *phy = &dev->phy; | 3042 | struct b43legacy_phy *phy = &dev->phy; |
| 3044 | u32 macctl; | 3043 | u32 macctl; |
| 3045 | 3044 | ||
| @@ -3054,12 +3053,6 @@ static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) | |||
| 3054 | macctl |= B43legacy_MACCTL_PSM_JMP0; | 3053 | macctl |= B43legacy_MACCTL_PSM_JMP0; |
| 3055 | b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); | 3054 | b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); |
| 3056 | 3055 | ||
| 3057 | mutex_unlock(&wl->mutex); | ||
| 3058 | /* Must unlock as it would otherwise deadlock. No races here. | ||
| 3059 | * Cancel possibly pending workqueues. */ | ||
| 3060 | cancel_work_sync(&dev->restart_work); | ||
| 3061 | mutex_lock(&wl->mutex); | ||
| 3062 | |||
| 3063 | b43legacy_leds_exit(dev); | 3056 | b43legacy_leds_exit(dev); |
| 3064 | b43legacy_rng_exit(dev->wl); | 3057 | b43legacy_rng_exit(dev->wl); |
| 3065 | b43legacy_pio_free(dev); | 3058 | b43legacy_pio_free(dev); |
| @@ -3486,6 +3479,8 @@ static void b43legacy_chip_reset(struct work_struct *work) | |||
| 3486 | } | 3479 | } |
| 3487 | } | 3480 | } |
| 3488 | out: | 3481 | out: |
| 3482 | if (err) | ||
| 3483 | wl->current_dev = NULL; /* Failed to init the dev. */ | ||
| 3489 | mutex_unlock(&wl->mutex); | 3484 | mutex_unlock(&wl->mutex); |
| 3490 | if (err) | 3485 | if (err) |
| 3491 | b43legacyerr(wl, "Controller restart FAILED\n"); | 3486 | b43legacyerr(wl, "Controller restart FAILED\n"); |
| @@ -3618,9 +3613,11 @@ static void b43legacy_one_core_detach(struct ssb_device *dev) | |||
| 3618 | struct b43legacy_wldev *wldev; | 3613 | struct b43legacy_wldev *wldev; |
| 3619 | struct b43legacy_wl *wl; | 3614 | struct b43legacy_wl *wl; |
| 3620 | 3615 | ||
| 3616 | /* Do not cancel ieee80211-workqueue based work here. | ||
| 3617 | * See comment in b43legacy_remove(). */ | ||
| 3618 | |||
| 3621 | wldev = ssb_get_drvdata(dev); | 3619 | wldev = ssb_get_drvdata(dev); |
| 3622 | wl = wldev->wl; | 3620 | wl = wldev->wl; |
| 3623 | cancel_work_sync(&wldev->restart_work); | ||
| 3624 | b43legacy_debugfs_remove_device(wldev); | 3621 | b43legacy_debugfs_remove_device(wldev); |
| 3625 | b43legacy_wireless_core_detach(wldev); | 3622 | b43legacy_wireless_core_detach(wldev); |
| 3626 | list_del(&wldev->list); | 3623 | list_del(&wldev->list); |
| @@ -3789,6 +3786,10 @@ static void b43legacy_remove(struct ssb_device *dev) | |||
| 3789 | struct b43legacy_wl *wl = ssb_get_devtypedata(dev); | 3786 | struct b43legacy_wl *wl = ssb_get_devtypedata(dev); |
| 3790 | struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); | 3787 | struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); |
| 3791 | 3788 | ||
| 3789 | /* We must cancel any work here before unregistering from ieee80211, | ||
| 3790 | * as the ieee80211 unreg will destroy the workqueue. */ | ||
| 3791 | cancel_work_sync(&wldev->restart_work); | ||
| 3792 | |||
| 3792 | B43legacy_WARN_ON(!wl); | 3793 | B43legacy_WARN_ON(!wl); |
| 3793 | if (wl->current_dev == wldev) | 3794 | if (wl->current_dev == wldev) |
| 3794 | ieee80211_unregister_hw(wl->hw); | 3795 | ieee80211_unregister_hw(wl->hw); |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index d74c061994ae..729336774828 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
| @@ -7558,8 +7558,31 @@ static int ipw_associate(void *data) | |||
| 7558 | priv->ieee->iw_mode == IW_MODE_ADHOC && | 7558 | priv->ieee->iw_mode == IW_MODE_ADHOC && |
| 7559 | priv->config & CFG_ADHOC_CREATE && | 7559 | priv->config & CFG_ADHOC_CREATE && |
| 7560 | priv->config & CFG_STATIC_ESSID && | 7560 | priv->config & CFG_STATIC_ESSID && |
| 7561 | priv->config & CFG_STATIC_CHANNEL && | 7561 | priv->config & CFG_STATIC_CHANNEL) { |
| 7562 | !list_empty(&priv->ieee->network_free_list)) { | 7562 | /* Use oldest network if the free list is empty */ |
| 7563 | if (list_empty(&priv->ieee->network_free_list)) { | ||
| 7564 | struct ieee80211_network *oldest = NULL; | ||
| 7565 | struct ieee80211_network *target; | ||
| 7566 | DECLARE_MAC_BUF(mac); | ||
| 7567 | |||
| 7568 | list_for_each_entry(target, &priv->ieee->network_list, list) { | ||
| 7569 | if ((oldest == NULL) || | ||
| 7570 | (target->last_scanned < oldest->last_scanned)) | ||
| 7571 | oldest = target; | ||
| 7572 | } | ||
| 7573 | |||
| 7574 | /* If there are no more slots, expire the oldest */ | ||
| 7575 | list_del(&oldest->list); | ||
| 7576 | target = oldest; | ||
| 7577 | IPW_DEBUG_ASSOC("Expired '%s' (%s) from " | ||
| 7578 | "network list.\n", | ||
| 7579 | escape_essid(target->ssid, | ||
| 7580 | target->ssid_len), | ||
| 7581 | print_mac(mac, target->bssid)); | ||
| 7582 | list_add_tail(&target->list, | ||
| 7583 | &priv->ieee->network_free_list); | ||
| 7584 | } | ||
| 7585 | |||
| 7563 | element = priv->ieee->network_free_list.next; | 7586 | element = priv->ieee->network_free_list.next; |
| 7564 | network = list_entry(element, struct ieee80211_network, list); | 7587 | network = list_entry(element, struct ieee80211_network, list); |
| 7565 | ipw_adhoc_create(priv, network); | 7588 | ipw_adhoc_create(priv, network); |
diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c index ad2fabca9116..0aa0ce3b2c42 100644 --- a/drivers/net/wireless/libertas/debugfs.c +++ b/drivers/net/wireless/libertas/debugfs.c | |||
| @@ -312,8 +312,8 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask, | |||
| 312 | if (tlv_type != TLV_TYPE_BCNMISS) | 312 | if (tlv_type != TLV_TYPE_BCNMISS) |
| 313 | tlv->freq = freq; | 313 | tlv->freq = freq; |
| 314 | 314 | ||
| 315 | /* The command header, the event mask, and the one TLV */ | 315 | /* The command header, the action, the event mask, and one TLV */ |
| 316 | events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 2 + sizeof(*tlv)); | 316 | events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 4 + sizeof(*tlv)); |
| 317 | 317 | ||
| 318 | ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events); | 318 | ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events); |
| 319 | 319 | ||
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c index 98ddbb3b3273..1610a7308c1d 100644 --- a/drivers/net/wireless/p54/p54usb.c +++ b/drivers/net/wireless/p54/p54usb.c | |||
| @@ -49,6 +49,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { | |||
| 49 | {USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */ | 49 | {USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */ |
| 50 | 50 | ||
| 51 | /* Version 2 devices (3887) */ | 51 | /* Version 2 devices (3887) */ |
| 52 | {USB_DEVICE(0x0471, 0x1230)}, /* Philips CPWUA054/00 */ | ||
| 52 | {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */ | 53 | {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */ |
| 53 | {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */ | 54 | {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */ |
| 54 | {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */ | 55 | {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */ |
diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c index 75def13e797d..d28c53868093 100644 --- a/drivers/ssb/driver_pcicore.c +++ b/drivers/ssb/driver_pcicore.c | |||
| @@ -537,12 +537,12 @@ int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc, | |||
| 537 | int err = 0; | 537 | int err = 0; |
| 538 | u32 tmp; | 538 | u32 tmp; |
| 539 | 539 | ||
| 540 | might_sleep(); | ||
| 541 | |||
| 542 | if (!pdev) | 540 | if (!pdev) |
| 543 | goto out; | 541 | goto out; |
| 544 | bus = pdev->bus; | 542 | bus = pdev->bus; |
| 545 | 543 | ||
| 544 | might_sleep_if(pdev->id.coreid != SSB_DEV_PCI); | ||
| 545 | |||
| 546 | /* Enable interrupts for this device. */ | 546 | /* Enable interrupts for this device. */ |
| 547 | if (bus->host_pci && | 547 | if (bus->host_pci && |
| 548 | ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) { | 548 | ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) { |
