diff options
author | David S. Miller <davem@davemloft.net> | 2010-03-31 22:32:50 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-31 22:32:50 -0400 |
commit | d5dc056cce9e60528d5eac64efed623d26ffe46f (patch) | |
tree | b5124013d0935be211fd1df702db2f69c581c5ab /drivers | |
parent | 00ae702847df5566ce9182e9c895185e2ad1c181 (diff) | |
parent | 7371400431389e1df6a2a05ab9882055b8a6ff2c (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/ar9170/usb.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/cfg.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/dev.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/mwl8k.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/p54/p54usb.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2500usb.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 4 |
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 1bd2cd836026..83c52a682622 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -2041,16 +2041,14 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv, | |||
2041 | tx_resp->failure_frame); | 2041 | tx_resp->failure_frame); |
2042 | 2042 | ||
2043 | freed = iwl_tx_queue_reclaim(priv, txq_id, index); | 2043 | freed = iwl_tx_queue_reclaim(priv, txq_id, index); |
2044 | if (qc && likely(sta_id != IWL_INVALID_STATION)) | 2044 | iwl_free_tfds_in_queue(priv, sta_id, tid, freed); |
2045 | priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; | ||
2046 | 2045 | ||
2047 | if (priv->mac80211_registered && | 2046 | if (priv->mac80211_registered && |
2048 | (iwl_queue_space(&txq->q) > txq->q.low_mark)) | 2047 | (iwl_queue_space(&txq->q) > txq->q.low_mark)) |
2049 | iwl_wake_queue(priv, txq_id); | 2048 | iwl_wake_queue(priv, txq_id); |
2050 | } | 2049 | } |
2051 | 2050 | ||
2052 | if (qc && likely(sta_id != IWL_INVALID_STATION)) | 2051 | iwl_txq_check_empty(priv, sta_id, tid, txq_id); |
2053 | iwl_txq_check_empty(priv, sta_id, tid, txq_id); | ||
2054 | 2052 | ||
2055 | if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) | 2053 | if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) |
2056 | IWL_ERR(priv, "TODO: Implement Tx ABORT REQUIRED!!!\n"); | 2054 | 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 818367b57bab..e4c2e1e448ad 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1258,7 +1258,15 @@ static void iwl_irq_tasklet(struct iwl_priv *priv) | |||
1258 | /* Ack/clear/reset pending uCode interrupts. | 1258 | /* Ack/clear/reset pending uCode interrupts. |
1259 | * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS, | 1259 | * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS, |
1260 | */ | 1260 | */ |
1261 | iwl_write32(priv, CSR_INT, priv->inta); | 1261 | /* There is a hardware bug in the interrupt mask function that some |
1262 | * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if | ||
1263 | * they are disabled in the CSR_INT_MASK register. Furthermore the | ||
1264 | * ICT interrupt handling mechanism has another bug that might cause | ||
1265 | * these unmasked interrupts fail to be detected. We workaround the | ||
1266 | * hardware bugs here by ACKing all the possible interrupts so that | ||
1267 | * interrupt coalescing can still be achieved. | ||
1268 | */ | ||
1269 | iwl_write32(priv, CSR_INT, priv->inta | ~priv->inta_mask); | ||
1262 | 1270 | ||
1263 | inta = priv->inta; | 1271 | inta = priv->inta; |
1264 | 1272 | ||
@@ -2644,7 +2652,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv) | |||
2644 | BIT(NL80211_IFTYPE_STATION) | | 2652 | BIT(NL80211_IFTYPE_STATION) | |
2645 | BIT(NL80211_IFTYPE_ADHOC); | 2653 | BIT(NL80211_IFTYPE_ADHOC); |
2646 | 2654 | ||
2647 | hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY | | 2655 | hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY | |
2648 | WIPHY_FLAG_DISABLE_BEACON_HINTS; | 2656 | WIPHY_FLAG_DISABLE_BEACON_HINTS; |
2649 | 2657 | ||
2650 | /* | 2658 | /* |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 54daa38ecba3..e276f2a4e835 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -1955,7 +1955,7 @@ static void iwl3945_init_hw_rates(struct iwl_priv *priv, | |||
1955 | { | 1955 | { |
1956 | int i; | 1956 | int i; |
1957 | 1957 | ||
1958 | for (i = 0; i < IWL_RATE_COUNT; i++) { | 1958 | for (i = 0; i < IWL_RATE_COUNT_LEGACY; i++) { |
1959 | rates[i].bitrate = iwl3945_rates[i].ieee * 5; | 1959 | rates[i].bitrate = iwl3945_rates[i].ieee * 5; |
1960 | rates[i].hw_value = i; /* Rate scaling will work on indexes */ | 1960 | rates[i].hw_value = i; /* Rate scaling will work on indexes */ |
1961 | rates[i].hw_value_short = i; | 1961 | rates[i].hw_value_short = i; |
@@ -3921,7 +3921,7 @@ static int iwl3945_setup_mac(struct iwl_priv *priv) | |||
3921 | BIT(NL80211_IFTYPE_STATION) | | 3921 | BIT(NL80211_IFTYPE_STATION) | |
3922 | BIT(NL80211_IFTYPE_ADHOC); | 3922 | BIT(NL80211_IFTYPE_ADHOC); |
3923 | 3923 | ||
3924 | hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY | | 3924 | hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY | |
3925 | WIPHY_FLAG_DISABLE_BEACON_HINTS; | 3925 | WIPHY_FLAG_DISABLE_BEACON_HINTS; |
3926 | 3926 | ||
3927 | hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945; | 3927 | 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 6977ee820214..6875e1498bd5 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 ac65e13eb0de..4e58ebe15580 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c | |||
@@ -3851,6 +3851,7 @@ MODULE_FIRMWARE("mwl8k/helper_8366.fw"); | |||
3851 | MODULE_FIRMWARE("mwl8k/fmimage_8366.fw"); | 3851 | MODULE_FIRMWARE("mwl8k/fmimage_8366.fw"); |
3852 | 3852 | ||
3853 | static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = { | 3853 | static 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"); | |||
35 | static struct usb_device_id p54u_table[] __devinitdata = { | 35 | static 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 | ||
820 | static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, | 820 | static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, |