aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath/ar9170/usb.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c12
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c4
-rw-r--r--drivers/net/wireless/libertas/cfg.c8
-rw-r--r--drivers/net/wireless/libertas/dev.h1
-rw-r--r--drivers/net/wireless/mwl8k.c1
-rw-r--r--drivers/net/wireless/p54/p54usb.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c5
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c4
10 files changed, 33 insertions, 13 deletions
diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c
index 4e30197afff6..6b1cb706e410 100644
--- a/drivers/net/wireless/ath/ar9170/usb.c
+++ b/drivers/net/wireless/ath/ar9170/usb.c
@@ -94,6 +94,8 @@ static struct usb_device_id ar9170_usb_ids[] = {
94 { USB_DEVICE(0x04bb, 0x093f) }, 94 { USB_DEVICE(0x04bb, 0x093f) },
95 /* AVM FRITZ!WLAN USB Stick N */ 95 /* AVM FRITZ!WLAN USB Stick N */
96 { USB_DEVICE(0x057C, 0x8401) }, 96 { USB_DEVICE(0x057C, 0x8401) },
97 /* NEC WL300NU-G */
98 { USB_DEVICE(0x0409, 0x0249) },
97 /* AVM FRITZ!WLAN USB Stick N 2.4 */ 99 /* AVM FRITZ!WLAN USB Stick N 2.4 */
98 { USB_DEVICE(0x057C, 0x8402), .driver_info = AR9170_REQ_FW1_ONLY }, 100 { USB_DEVICE(0x057C, 0x8402), .driver_info = AR9170_REQ_FW1_ONLY },
99 101
@@ -416,7 +418,7 @@ static int ar9170_usb_exec_cmd(struct ar9170 *ar, enum ar9170_cmd cmd,
416 spin_unlock_irqrestore(&aru->common.cmdlock, flags); 418 spin_unlock_irqrestore(&aru->common.cmdlock, flags);
417 419
418 usb_fill_int_urb(urb, aru->udev, 420 usb_fill_int_urb(urb, aru->udev,
419 usb_sndbulkpipe(aru->udev, AR9170_EP_CMD), 421 usb_sndintpipe(aru->udev, AR9170_EP_CMD),
420 aru->common.cmdbuf, plen + 4, 422 aru->common.cmdbuf, plen + 4,
421 ar9170_usb_tx_urb_complete, NULL, 1); 423 ar9170_usb_tx_urb_complete, NULL, 1);
422 424
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 3949133d9ee2..3297fc7b80bf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2047,16 +2047,14 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
2047 tx_resp->failure_frame); 2047 tx_resp->failure_frame);
2048 2048
2049 freed = iwl_tx_queue_reclaim(priv, txq_id, index); 2049 freed = iwl_tx_queue_reclaim(priv, txq_id, index);
2050 if (qc && likely(sta_id != IWL_INVALID_STATION)) 2050 iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
2051 priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
2052 2051
2053 if (priv->mac80211_registered && 2052 if (priv->mac80211_registered &&
2054 (iwl_queue_space(&txq->q) > txq->q.low_mark)) 2053 (iwl_queue_space(&txq->q) > txq->q.low_mark))
2055 iwl_wake_queue(priv, txq_id); 2054 iwl_wake_queue(priv, txq_id);
2056 } 2055 }
2057 2056
2058 if (qc && likely(sta_id != IWL_INVALID_STATION)) 2057 iwl_txq_check_empty(priv, sta_id, tid, txq_id);
2059 iwl_txq_check_empty(priv, sta_id, tid, txq_id);
2060 2058
2061 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) 2059 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK))
2062 IWL_ERR(priv, "TODO: Implement Tx ABORT REQUIRED!!!\n"); 2060 IWL_ERR(priv, "TODO: Implement Tx ABORT REQUIRED!!!\n");
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 0a376f720d78..f43a45d0f1dd 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1236,7 +1236,15 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
1236 /* Ack/clear/reset pending uCode interrupts. 1236 /* Ack/clear/reset pending uCode interrupts.
1237 * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS, 1237 * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS,
1238 */ 1238 */
1239 iwl_write32(priv, CSR_INT, priv->_agn.inta); 1239 /* There is a hardware bug in the interrupt mask function that some
1240 * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if
1241 * they are disabled in the CSR_INT_MASK register. Furthermore the
1242 * ICT interrupt handling mechanism has another bug that might cause
1243 * these unmasked interrupts fail to be detected. We workaround the
1244 * hardware bugs here by ACKing all the possible interrupts so that
1245 * interrupt coalescing can still be achieved.
1246 */
1247 iwl_write32(priv, CSR_INT, priv->_agn.inta | ~priv->inta_mask);
1240 1248
1241 inta = priv->_agn.inta; 1249 inta = priv->_agn.inta;
1242 1250
@@ -2611,7 +2619,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv)
2611 BIT(NL80211_IFTYPE_STATION) | 2619 BIT(NL80211_IFTYPE_STATION) |
2612 BIT(NL80211_IFTYPE_ADHOC); 2620 BIT(NL80211_IFTYPE_ADHOC);
2613 2621
2614 hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY | 2622 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
2615 WIPHY_FLAG_DISABLE_BEACON_HINTS; 2623 WIPHY_FLAG_DISABLE_BEACON_HINTS;
2616 2624
2617 /* 2625 /*
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 4995134d7e4a..64f150b19771 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -1946,7 +1946,7 @@ static void iwl3945_init_hw_rates(struct iwl_priv *priv,
1946{ 1946{
1947 int i; 1947 int i;
1948 1948
1949 for (i = 0; i < IWL_RATE_COUNT; i++) { 1949 for (i = 0; i < IWL_RATE_COUNT_LEGACY; i++) {
1950 rates[i].bitrate = iwl3945_rates[i].ieee * 5; 1950 rates[i].bitrate = iwl3945_rates[i].ieee * 5;
1951 rates[i].hw_value = i; /* Rate scaling will work on indexes */ 1951 rates[i].hw_value = i; /* Rate scaling will work on indexes */
1952 rates[i].hw_value_short = i; 1952 rates[i].hw_value_short = i;
@@ -3950,7 +3950,7 @@ static int iwl3945_setup_mac(struct iwl_priv *priv)
3950 BIT(NL80211_IFTYPE_STATION) | 3950 BIT(NL80211_IFTYPE_STATION) |
3951 BIT(NL80211_IFTYPE_ADHOC); 3951 BIT(NL80211_IFTYPE_ADHOC);
3952 3952
3953 hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY | 3953 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
3954 WIPHY_FLAG_DISABLE_BEACON_HINTS; 3954 WIPHY_FLAG_DISABLE_BEACON_HINTS;
3955 3955
3956 hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945; 3956 hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945;
diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
index 4396dccd12ac..82ebe1461a77 100644
--- a/drivers/net/wireless/libertas/cfg.c
+++ b/drivers/net/wireless/libertas/cfg.c
@@ -172,6 +172,8 @@ int lbs_cfg_register(struct lbs_private *priv)
172 if (ret < 0) 172 if (ret < 0)
173 lbs_pr_err("cannot register wiphy device\n"); 173 lbs_pr_err("cannot register wiphy device\n");
174 174
175 priv->wiphy_registered = true;
176
175 ret = register_netdev(priv->dev); 177 ret = register_netdev(priv->dev);
176 if (ret) 178 if (ret)
177 lbs_pr_err("cannot register network device\n"); 179 lbs_pr_err("cannot register network device\n");
@@ -190,9 +192,11 @@ void lbs_cfg_free(struct lbs_private *priv)
190 if (!wdev) 192 if (!wdev)
191 return; 193 return;
192 194
193 if (wdev->wiphy) { 195 if (priv->wiphy_registered)
194 wiphy_unregister(wdev->wiphy); 196 wiphy_unregister(wdev->wiphy);
197
198 if (wdev->wiphy)
195 wiphy_free(wdev->wiphy); 199 wiphy_free(wdev->wiphy);
196 } 200
197 kfree(wdev); 201 kfree(wdev);
198} 202}
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
index 058d1720242e..a54880e4ad2b 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -36,6 +36,7 @@ struct lbs_private {
36 36
37 /* CFG80211 */ 37 /* CFG80211 */
38 struct wireless_dev *wdev; 38 struct wireless_dev *wdev;
39 bool wiphy_registered;
39 40
40 /* Mesh */ 41 /* Mesh */
41 struct net_device *mesh_dev; /* Virtual device */ 42 struct net_device *mesh_dev; /* Virtual device */
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index 6599fd15e675..1b5d0aebbb0e 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -3851,6 +3851,7 @@ MODULE_FIRMWARE("mwl8k/helper_8366.fw");
3851MODULE_FIRMWARE("mwl8k/fmimage_8366.fw"); 3851MODULE_FIRMWARE("mwl8k/fmimage_8366.fw");
3852 3852
3853static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = { 3853static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
3854 { PCI_VDEVICE(MARVELL, 0x2a0a), .driver_data = MWL8363, },
3854 { PCI_VDEVICE(MARVELL, 0x2a0c), .driver_data = MWL8363, }, 3855 { PCI_VDEVICE(MARVELL, 0x2a0c), .driver_data = MWL8363, },
3855 { PCI_VDEVICE(MARVELL, 0x2a24), .driver_data = MWL8363, }, 3856 { PCI_VDEVICE(MARVELL, 0x2a24), .driver_data = MWL8363, },
3856 { PCI_VDEVICE(MARVELL, 0x2a2b), .driver_data = MWL8687, }, 3857 { PCI_VDEVICE(MARVELL, 0x2a2b), .driver_data = MWL8687, },
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
index b3c4fbd80d8d..e3cfc001d2fd 100644
--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -35,6 +35,7 @@ MODULE_FIRMWARE("isl3887usb");
35static struct usb_device_id p54u_table[] __devinitdata = { 35static struct usb_device_id p54u_table[] __devinitdata = {
36 /* Version 1 devices (pci chip + net2280) */ 36 /* Version 1 devices (pci chip + net2280) */
37 {USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */ 37 {USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */
38 {USB_DEVICE(0x06b9, 0x0120)}, /* Thomson SpeedTouch 120g */
38 {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */ 39 {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */
39 {USB_DEVICE(0x07aa, 0x001c)}, /* Corega CG-WLUSB2GT */ 40 {USB_DEVICE(0x07aa, 0x001c)}, /* Corega CG-WLUSB2GT */
40 {USB_DEVICE(0x083a, 0x4501)}, /* Accton 802.11g WN4501 USB */ 41 {USB_DEVICE(0x083a, 0x4501)}, /* Accton 802.11g WN4501 USB */
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 9b04964deced..13444b6b3e37 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1643,6 +1643,11 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
1643 unsigned int i; 1643 unsigned int i;
1644 1644
1645 /* 1645 /*
1646 * Disable powersaving as default.
1647 */
1648 rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1649
1650 /*
1646 * Initialize all hw fields. 1651 * Initialize all hw fields.
1647 */ 1652 */
1648 rt2x00dev->hw->flags = 1653 rt2x00dev->hw->flags =
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 18d4d8e4ae6b..326fce78489d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -812,9 +812,9 @@ static void rt2800_config_channel_rt3x(struct rt2x00_dev *rt2x00dev,
812 rt2800_rfcsr_write(rt2x00dev, 24, 812 rt2800_rfcsr_write(rt2x00dev, 24,
813 rt2x00dev->calibration[conf_is_ht40(conf)]); 813 rt2x00dev->calibration[conf_is_ht40(conf)]);
814 814
815 rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr); 815 rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
816 rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1); 816 rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
817 rt2800_rfcsr_write(rt2x00dev, 23, rfcsr); 817 rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
818} 818}
819 819
820static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, 820static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,