diff options
-rw-r--r-- | drivers/net/wireless/Kconfig | 51 | ||||
-rw-r--r-- | drivers/net/wireless/ipw2200.c | 13 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 18 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl4965-base.c | 18 | ||||
-rw-r--r-- | drivers/net/wireless/rtl8187_dev.c | 2 |
5 files changed, 75 insertions, 27 deletions
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig index 5583719a0dca..c98fc62a3e61 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig | |||
@@ -587,15 +587,66 @@ config ADM8211 | |||
587 | config P54_COMMON | 587 | config P54_COMMON |
588 | tristate "Softmac Prism54 support" | 588 | tristate "Softmac Prism54 support" |
589 | depends on MAC80211 && WLAN_80211 && FW_LOADER && EXPERIMENTAL | 589 | depends on MAC80211 && WLAN_80211 && FW_LOADER && EXPERIMENTAL |
590 | ---help--- | ||
591 | This is common code for isl38xx based cards. | ||
592 | This module does nothing by itself - the USB/PCI frontends | ||
593 | also need to be enabled in order to support any devices. | ||
594 | |||
595 | These devices require softmac firmware which can be found at | ||
596 | http://prism54.org/ | ||
597 | |||
598 | If you choose to build a module, it'll be called p54common. | ||
590 | 599 | ||
591 | config P54_USB | 600 | config P54_USB |
592 | tristate "Prism54 USB support" | 601 | tristate "Prism54 USB support" |
593 | depends on P54_COMMON && USB | 602 | depends on P54_COMMON && USB |
594 | select CRC32 | 603 | select CRC32 |
604 | ---help--- | ||
605 | This driver is for USB isl38xx based wireless cards. | ||
606 | These are USB based adapters found in devices such as: | ||
607 | |||
608 | 3COM 3CRWE254G72 | ||
609 | SMC 2862W-G | ||
610 | Accton 802.11g WN4501 USB | ||
611 | Siemens Gigaset USB | ||
612 | Netgear WG121 | ||
613 | Netgear WG111 | ||
614 | Medion 40900, Roper Europe | ||
615 | Shuttle PN15, Airvast WM168g, IOGear GWU513 | ||
616 | Linksys WUSB54G | ||
617 | Linksys WUSB54G Portable | ||
618 | DLink DWL-G120 Spinnaker | ||
619 | DLink DWL-G122 | ||
620 | Belkin F5D7050 ver 1000 | ||
621 | Cohiba Proto board | ||
622 | SMC 2862W-G version 2 | ||
623 | U.S. Robotics U5 802.11g Adapter | ||
624 | FUJITSU E-5400 USB D1700 | ||
625 | Sagem XG703A | ||
626 | DLink DWL-G120 Cohiba | ||
627 | Spinnaker Proto board | ||
628 | Linksys WUSB54AG | ||
629 | Inventel UR054G | ||
630 | Spinnaker DUT | ||
631 | |||
632 | These devices require softmac firmware which can be found at | ||
633 | http://prism54.org/ | ||
634 | |||
635 | If you choose to build a module, it'll be called p54usb. | ||
595 | 636 | ||
596 | config P54_PCI | 637 | config P54_PCI |
597 | tristate "Prism54 PCI support" | 638 | tristate "Prism54 PCI support" |
598 | depends on P54_COMMON && PCI | 639 | depends on P54_COMMON && PCI |
640 | ---help--- | ||
641 | This driver is for PCI isl38xx based wireless cards. | ||
642 | This driver supports most devices that are supported by the | ||
643 | fullmac prism54 driver plus many devices which are not | ||
644 | supported by the fullmac driver/firmware. | ||
645 | |||
646 | This driver requires softmac firmware which can be found at | ||
647 | http://prism54.org/ | ||
648 | |||
649 | If you choose to build a module, it'll be called p54pci. | ||
599 | 650 | ||
600 | source "drivers/net/wireless/iwlwifi/Kconfig" | 651 | source "drivers/net/wireless/iwlwifi/Kconfig" |
601 | source "drivers/net/wireless/hostap/Kconfig" | 652 | source "drivers/net/wireless/hostap/Kconfig" |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index da51f477e9df..88062c1318a8 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -1233,9 +1233,19 @@ static ssize_t show_event_log(struct device *d, | |||
1233 | { | 1233 | { |
1234 | struct ipw_priv *priv = dev_get_drvdata(d); | 1234 | struct ipw_priv *priv = dev_get_drvdata(d); |
1235 | u32 log_len = ipw_get_event_log_len(priv); | 1235 | u32 log_len = ipw_get_event_log_len(priv); |
1236 | struct ipw_event log[log_len]; | 1236 | u32 log_size; |
1237 | struct ipw_event *log; | ||
1237 | u32 len = 0, i; | 1238 | u32 len = 0, i; |
1238 | 1239 | ||
1240 | /* not using min() because of its strict type checking */ | ||
1241 | log_size = PAGE_SIZE / sizeof(*log) > log_len ? | ||
1242 | sizeof(*log) * log_len : PAGE_SIZE; | ||
1243 | log = kzalloc(log_size, GFP_KERNEL); | ||
1244 | if (!log) { | ||
1245 | IPW_ERROR("Unable to allocate memory for log\n"); | ||
1246 | return 0; | ||
1247 | } | ||
1248 | log_len = log_size / sizeof(*log); | ||
1239 | ipw_capture_event_log(priv, log_len, log); | 1249 | ipw_capture_event_log(priv, log_len, log); |
1240 | 1250 | ||
1241 | len += snprintf(buf + len, PAGE_SIZE - len, "%08X", log_len); | 1251 | len += snprintf(buf + len, PAGE_SIZE - len, "%08X", log_len); |
@@ -1244,6 +1254,7 @@ static ssize_t show_event_log(struct device *d, | |||
1244 | "\n%08X%08X%08X", | 1254 | "\n%08X%08X%08X", |
1245 | log[i].time, log[i].event, log[i].data); | 1255 | log[i].time, log[i].event, log[i].data); |
1246 | len += snprintf(buf + len, PAGE_SIZE - len, "\n"); | 1256 | len += snprintf(buf + len, PAGE_SIZE - len, "\n"); |
1257 | kfree(log); | ||
1247 | return len; | 1258 | return len; |
1248 | } | 1259 | } |
1249 | 1260 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 3d1da0759b97..1a6b0e0edf6f 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -6246,8 +6246,6 @@ static void __iwl_down(struct iwl_priv *priv) | |||
6246 | /* Unblock any waiting calls */ | 6246 | /* Unblock any waiting calls */ |
6247 | wake_up_interruptible_all(&priv->wait_command_queue); | 6247 | wake_up_interruptible_all(&priv->wait_command_queue); |
6248 | 6248 | ||
6249 | iwl_cancel_deferred_work(priv); | ||
6250 | |||
6251 | /* Wipe out the EXIT_PENDING status bit if we are not actually | 6249 | /* Wipe out the EXIT_PENDING status bit if we are not actually |
6252 | * exiting the module */ | 6250 | * exiting the module */ |
6253 | if (!exit_pending) | 6251 | if (!exit_pending) |
@@ -6322,6 +6320,8 @@ static void iwl_down(struct iwl_priv *priv) | |||
6322 | mutex_lock(&priv->mutex); | 6320 | mutex_lock(&priv->mutex); |
6323 | __iwl_down(priv); | 6321 | __iwl_down(priv); |
6324 | mutex_unlock(&priv->mutex); | 6322 | mutex_unlock(&priv->mutex); |
6323 | |||
6324 | iwl_cancel_deferred_work(priv); | ||
6325 | } | 6325 | } |
6326 | 6326 | ||
6327 | #define MAX_HW_RESTARTS 5 | 6327 | #define MAX_HW_RESTARTS 5 |
@@ -8580,10 +8580,9 @@ static void iwl_pci_remove(struct pci_dev *pdev) | |||
8580 | 8580 | ||
8581 | IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n"); | 8581 | IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n"); |
8582 | 8582 | ||
8583 | mutex_lock(&priv->mutex); | ||
8584 | set_bit(STATUS_EXIT_PENDING, &priv->status); | 8583 | set_bit(STATUS_EXIT_PENDING, &priv->status); |
8585 | __iwl_down(priv); | 8584 | |
8586 | mutex_unlock(&priv->mutex); | 8585 | iwl_down(priv); |
8587 | 8586 | ||
8588 | /* Free MAC hash list for ADHOC */ | 8587 | /* Free MAC hash list for ADHOC */ |
8589 | for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) { | 8588 | for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) { |
@@ -8642,12 +8641,10 @@ static int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
8642 | { | 8641 | { |
8643 | struct iwl_priv *priv = pci_get_drvdata(pdev); | 8642 | struct iwl_priv *priv = pci_get_drvdata(pdev); |
8644 | 8643 | ||
8645 | mutex_lock(&priv->mutex); | ||
8646 | |||
8647 | set_bit(STATUS_IN_SUSPEND, &priv->status); | 8644 | set_bit(STATUS_IN_SUSPEND, &priv->status); |
8648 | 8645 | ||
8649 | /* Take down the device; powers it off, etc. */ | 8646 | /* Take down the device; powers it off, etc. */ |
8650 | __iwl_down(priv); | 8647 | iwl_down(priv); |
8651 | 8648 | ||
8652 | if (priv->mac80211_registered) | 8649 | if (priv->mac80211_registered) |
8653 | ieee80211_stop_queues(priv->hw); | 8650 | ieee80211_stop_queues(priv->hw); |
@@ -8656,8 +8653,6 @@ static int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
8656 | pci_disable_device(pdev); | 8653 | pci_disable_device(pdev); |
8657 | pci_set_power_state(pdev, PCI_D3hot); | 8654 | pci_set_power_state(pdev, PCI_D3hot); |
8658 | 8655 | ||
8659 | mutex_unlock(&priv->mutex); | ||
8660 | |||
8661 | return 0; | 8656 | return 0; |
8662 | } | 8657 | } |
8663 | 8658 | ||
@@ -8715,8 +8710,6 @@ static int iwl_pci_resume(struct pci_dev *pdev) | |||
8715 | 8710 | ||
8716 | printk(KERN_INFO "Coming out of suspend...\n"); | 8711 | printk(KERN_INFO "Coming out of suspend...\n"); |
8717 | 8712 | ||
8718 | mutex_lock(&priv->mutex); | ||
8719 | |||
8720 | pci_set_power_state(pdev, PCI_D0); | 8713 | pci_set_power_state(pdev, PCI_D0); |
8721 | err = pci_enable_device(pdev); | 8714 | err = pci_enable_device(pdev); |
8722 | pci_restore_state(pdev); | 8715 | pci_restore_state(pdev); |
@@ -8730,7 +8723,6 @@ static int iwl_pci_resume(struct pci_dev *pdev) | |||
8730 | pci_write_config_byte(pdev, 0x41, 0x00); | 8723 | pci_write_config_byte(pdev, 0x41, 0x00); |
8731 | 8724 | ||
8732 | iwl_resume(priv); | 8725 | iwl_resume(priv); |
8733 | mutex_unlock(&priv->mutex); | ||
8734 | 8726 | ||
8735 | return 0; | 8727 | return 0; |
8736 | } | 8728 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index b54fe5e6d529..6cd57c220631 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -6601,8 +6601,6 @@ static void __iwl_down(struct iwl_priv *priv) | |||
6601 | /* Unblock any waiting calls */ | 6601 | /* Unblock any waiting calls */ |
6602 | wake_up_interruptible_all(&priv->wait_command_queue); | 6602 | wake_up_interruptible_all(&priv->wait_command_queue); |
6603 | 6603 | ||
6604 | iwl_cancel_deferred_work(priv); | ||
6605 | |||
6606 | /* Wipe out the EXIT_PENDING status bit if we are not actually | 6604 | /* Wipe out the EXIT_PENDING status bit if we are not actually |
6607 | * exiting the module */ | 6605 | * exiting the module */ |
6608 | if (!exit_pending) | 6606 | if (!exit_pending) |
@@ -6677,6 +6675,8 @@ static void iwl_down(struct iwl_priv *priv) | |||
6677 | mutex_lock(&priv->mutex); | 6675 | mutex_lock(&priv->mutex); |
6678 | __iwl_down(priv); | 6676 | __iwl_down(priv); |
6679 | mutex_unlock(&priv->mutex); | 6677 | mutex_unlock(&priv->mutex); |
6678 | |||
6679 | iwl_cancel_deferred_work(priv); | ||
6680 | } | 6680 | } |
6681 | 6681 | ||
6682 | #define MAX_HW_RESTARTS 5 | 6682 | #define MAX_HW_RESTARTS 5 |
@@ -9174,10 +9174,9 @@ static void iwl_pci_remove(struct pci_dev *pdev) | |||
9174 | 9174 | ||
9175 | IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n"); | 9175 | IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n"); |
9176 | 9176 | ||
9177 | mutex_lock(&priv->mutex); | ||
9178 | set_bit(STATUS_EXIT_PENDING, &priv->status); | 9177 | set_bit(STATUS_EXIT_PENDING, &priv->status); |
9179 | __iwl_down(priv); | 9178 | |
9180 | mutex_unlock(&priv->mutex); | 9179 | iwl_down(priv); |
9181 | 9180 | ||
9182 | /* Free MAC hash list for ADHOC */ | 9181 | /* Free MAC hash list for ADHOC */ |
9183 | for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) { | 9182 | for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) { |
@@ -9236,12 +9235,10 @@ static int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
9236 | { | 9235 | { |
9237 | struct iwl_priv *priv = pci_get_drvdata(pdev); | 9236 | struct iwl_priv *priv = pci_get_drvdata(pdev); |
9238 | 9237 | ||
9239 | mutex_lock(&priv->mutex); | ||
9240 | |||
9241 | set_bit(STATUS_IN_SUSPEND, &priv->status); | 9238 | set_bit(STATUS_IN_SUSPEND, &priv->status); |
9242 | 9239 | ||
9243 | /* Take down the device; powers it off, etc. */ | 9240 | /* Take down the device; powers it off, etc. */ |
9244 | __iwl_down(priv); | 9241 | iwl_down(priv); |
9245 | 9242 | ||
9246 | if (priv->mac80211_registered) | 9243 | if (priv->mac80211_registered) |
9247 | ieee80211_stop_queues(priv->hw); | 9244 | ieee80211_stop_queues(priv->hw); |
@@ -9250,8 +9247,6 @@ static int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
9250 | pci_disable_device(pdev); | 9247 | pci_disable_device(pdev); |
9251 | pci_set_power_state(pdev, PCI_D3hot); | 9248 | pci_set_power_state(pdev, PCI_D3hot); |
9252 | 9249 | ||
9253 | mutex_unlock(&priv->mutex); | ||
9254 | |||
9255 | return 0; | 9250 | return 0; |
9256 | } | 9251 | } |
9257 | 9252 | ||
@@ -9309,8 +9304,6 @@ static int iwl_pci_resume(struct pci_dev *pdev) | |||
9309 | 9304 | ||
9310 | printk(KERN_INFO "Coming out of suspend...\n"); | 9305 | printk(KERN_INFO "Coming out of suspend...\n"); |
9311 | 9306 | ||
9312 | mutex_lock(&priv->mutex); | ||
9313 | |||
9314 | pci_set_power_state(pdev, PCI_D0); | 9307 | pci_set_power_state(pdev, PCI_D0); |
9315 | err = pci_enable_device(pdev); | 9308 | err = pci_enable_device(pdev); |
9316 | pci_restore_state(pdev); | 9309 | pci_restore_state(pdev); |
@@ -9324,7 +9317,6 @@ static int iwl_pci_resume(struct pci_dev *pdev) | |||
9324 | pci_write_config_byte(pdev, 0x41, 0x00); | 9317 | pci_write_config_byte(pdev, 0x41, 0x00); |
9325 | 9318 | ||
9326 | iwl_resume(priv); | 9319 | iwl_resume(priv); |
9327 | mutex_unlock(&priv->mutex); | ||
9328 | 9320 | ||
9329 | return 0; | 9321 | return 0; |
9330 | } | 9322 | } |
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index e454ae83e97a..bd1ab3b3afc0 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c | |||
@@ -38,6 +38,8 @@ static struct usb_device_id rtl8187_table[] __devinitdata = { | |||
38 | {USB_DEVICE(0x0846, 0x6a00)}, | 38 | {USB_DEVICE(0x0846, 0x6a00)}, |
39 | /* HP */ | 39 | /* HP */ |
40 | {USB_DEVICE(0x03f0, 0xca02)}, | 40 | {USB_DEVICE(0x03f0, 0xca02)}, |
41 | /* Sitecom */ | ||
42 | {USB_DEVICE(0x0df6, 0x000d)}, | ||
41 | {} | 43 | {} |
42 | }; | 44 | }; |
43 | 45 | ||