diff options
author | David S. Miller <davem@davemloft.net> | 2009-07-23 22:03:51 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-07-23 22:03:51 -0400 |
commit | 74d154189d597b91da4322996dbf4f5c3d1544ab (patch) | |
tree | 6f09861b5e2f875d2d8ea2127b16add9103221c6 /drivers/net/wireless | |
parent | 5a6338db37885af06760d40cad589316e48431e9 (diff) | |
parent | ffafa60d496f80c250f2ae0340ae94434c0b0b4d (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/wireless/iwmc3200wifi/netdev.c
net/wireless/scan.c
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/base.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ani.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/ath/regd.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwmc3200wifi/netdev.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/cmd.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/defs.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mac80211_hwsim.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/p54/p54spi.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2500usb.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_leds.c | 3 |
13 files changed, 55 insertions, 15 deletions
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index 20ba6fa5f1f1..7db32ce3dbd8 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
@@ -2980,6 +2980,9 @@ ath5k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | |||
2980 | if (modparam_nohwcrypt) | 2980 | if (modparam_nohwcrypt) |
2981 | return -EOPNOTSUPP; | 2981 | return -EOPNOTSUPP; |
2982 | 2982 | ||
2983 | if (sc->opmode == NL80211_IFTYPE_AP) | ||
2984 | return -EOPNOTSUPP; | ||
2985 | |||
2983 | switch (key->alg) { | 2986 | switch (key->alg) { |
2984 | case ALG_WEP: | 2987 | case ALG_WEP: |
2985 | case ALG_TKIP: | 2988 | case ALG_TKIP: |
diff --git a/drivers/net/wireless/ath/ath9k/ani.c b/drivers/net/wireless/ath/ath9k/ani.c index 1aeafb511ddd..aad259b4c197 100644 --- a/drivers/net/wireless/ath/ath9k/ani.c +++ b/drivers/net/wireless/ath/ath9k/ani.c | |||
@@ -478,6 +478,18 @@ void ath9k_ani_reset(struct ath_hw *ah) | |||
478 | "Reset ANI state opmode %u\n", ah->opmode); | 478 | "Reset ANI state opmode %u\n", ah->opmode); |
479 | ah->stats.ast_ani_reset++; | 479 | ah->stats.ast_ani_reset++; |
480 | 480 | ||
481 | if (ah->opmode == NL80211_IFTYPE_AP) { | ||
482 | /* | ||
483 | * ath9k_hw_ani_control() will only process items set on | ||
484 | * ah->ani_function | ||
485 | */ | ||
486 | if (IS_CHAN_2GHZ(chan)) | ||
487 | ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL | | ||
488 | ATH9K_ANI_FIRSTEP_LEVEL); | ||
489 | else | ||
490 | ah->ani_function = 0; | ||
491 | } | ||
492 | |||
481 | ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0); | 493 | ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0); |
482 | ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0); | 494 | ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0); |
483 | ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0); | 495 | ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0); |
diff --git a/drivers/net/wireless/ath/regd.c b/drivers/net/wireless/ath/regd.c index f37c83275793..077bcc142cde 100644 --- a/drivers/net/wireless/ath/regd.c +++ b/drivers/net/wireless/ath/regd.c | |||
@@ -474,6 +474,21 @@ ath_regd_init_wiphy(struct ath_regulatory *reg, | |||
474 | return 0; | 474 | return 0; |
475 | } | 475 | } |
476 | 476 | ||
477 | /* | ||
478 | * Some users have reported their EEPROM programmed with | ||
479 | * 0x8000 set, this is not a supported regulatory domain | ||
480 | * but since we have more than one user with it we need | ||
481 | * a solution for them. We default to 0x64, which is the | ||
482 | * default Atheros world regulatory domain. | ||
483 | */ | ||
484 | static void ath_regd_sanitize(struct ath_regulatory *reg) | ||
485 | { | ||
486 | if (reg->current_rd != COUNTRY_ERD_FLAG) | ||
487 | return; | ||
488 | printk(KERN_DEBUG "ath: EEPROM regdomain sanitized\n"); | ||
489 | reg->current_rd = 0x64; | ||
490 | } | ||
491 | |||
477 | int | 492 | int |
478 | ath_regd_init(struct ath_regulatory *reg, | 493 | ath_regd_init(struct ath_regulatory *reg, |
479 | struct wiphy *wiphy, | 494 | struct wiphy *wiphy, |
@@ -486,6 +501,8 @@ ath_regd_init(struct ath_regulatory *reg, | |||
486 | if (!reg) | 501 | if (!reg) |
487 | return -EINVAL; | 502 | return -EINVAL; |
488 | 503 | ||
504 | ath_regd_sanitize(reg); | ||
505 | |||
489 | printk(KERN_DEBUG "ath: EEPROM regdomain: 0x%0x\n", reg->current_rd); | 506 | printk(KERN_DEBUG "ath: EEPROM regdomain: 0x%0x\n", reg->current_rd); |
490 | 507 | ||
491 | if (!ath_regd_is_eeprom_valid(reg)) { | 508 | if (!ath_regd_is_eeprom_valid(reg)) { |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 1d4e9cadb088..e2cc5994d108 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -2617,12 +2617,10 @@ static ssize_t show_power_level(struct device *d, | |||
2617 | struct device_attribute *attr, char *buf) | 2617 | struct device_attribute *attr, char *buf) |
2618 | { | 2618 | { |
2619 | struct iwl_priv *priv = dev_get_drvdata(d); | 2619 | struct iwl_priv *priv = dev_get_drvdata(d); |
2620 | int mode = priv->power_data.user_power_setting; | ||
2621 | int level = priv->power_data.power_mode; | 2620 | int level = priv->power_data.power_mode; |
2622 | char *p = buf; | 2621 | char *p = buf; |
2623 | 2622 | ||
2624 | p += sprintf(p, "INDEX:%d\t", level); | 2623 | p += sprintf(p, "%d\n", level); |
2625 | p += sprintf(p, "USER:%d\n", mode); | ||
2626 | return p - buf + 1; | 2624 | return p - buf + 1; |
2627 | } | 2625 | } |
2628 | 2626 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index 753fca32d9df..7073069a61a9 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
@@ -873,7 +873,8 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb) | |||
873 | iwl_print_hex_dump(priv, IWL_DL_TX, (u8 *)tx_cmd->hdr, hdr_len); | 873 | iwl_print_hex_dump(priv, IWL_DL_TX, (u8 *)tx_cmd->hdr, hdr_len); |
874 | 874 | ||
875 | /* Set up entry for this TFD in Tx byte-count array */ | 875 | /* Set up entry for this TFD in Tx byte-count array */ |
876 | priv->cfg->ops->lib->txq_update_byte_cnt_tbl(priv, txq, | 876 | if (info->flags & IEEE80211_TX_CTL_AMPDU) |
877 | priv->cfg->ops->lib->txq_update_byte_cnt_tbl(priv, txq, | ||
877 | le16_to_cpu(tx_cmd->len)); | 878 | le16_to_cpu(tx_cmd->len)); |
878 | 879 | ||
879 | pci_dma_sync_single_for_device(priv->pci_dev, txcmd_phys, | 880 | pci_dma_sync_single_for_device(priv->pci_dev, txcmd_phys, |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 303c4b483f5b..7ff95f80b817 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -3573,12 +3573,10 @@ static ssize_t show_power_level(struct device *d, | |||
3573 | struct device_attribute *attr, char *buf) | 3573 | struct device_attribute *attr, char *buf) |
3574 | { | 3574 | { |
3575 | struct iwl_priv *priv = dev_get_drvdata(d); | 3575 | struct iwl_priv *priv = dev_get_drvdata(d); |
3576 | int mode = priv->power_data.user_power_setting; | ||
3577 | int level = priv->power_data.power_mode; | 3576 | int level = priv->power_data.power_mode; |
3578 | char *p = buf; | 3577 | char *p = buf; |
3579 | 3578 | ||
3580 | p += sprintf(p, "INDEX:%d\t", level); | 3579 | p += sprintf(p, "%d\n", level); |
3581 | p += sprintf(p, "USER:%d\n", mode); | ||
3582 | return p - buf + 1; | 3580 | return p - buf + 1; |
3583 | } | 3581 | } |
3584 | 3582 | ||
diff --git a/drivers/net/wireless/iwmc3200wifi/netdev.c b/drivers/net/wireless/iwmc3200wifi/netdev.c index e94e96955b99..092d28ae56a0 100644 --- a/drivers/net/wireless/iwmc3200wifi/netdev.c +++ b/drivers/net/wireless/iwmc3200wifi/netdev.c | |||
@@ -156,10 +156,10 @@ void iwm_if_free(struct iwm_priv *iwm) | |||
156 | return; | 156 | return; |
157 | 157 | ||
158 | free_netdev(iwm_to_ndev(iwm)); | 158 | free_netdev(iwm_to_ndev(iwm)); |
159 | iwm_wdev_free(iwm); | ||
160 | iwm_priv_deinit(iwm); | 159 | iwm_priv_deinit(iwm); |
161 | kfree(iwm->umac_profile); | 160 | kfree(iwm->umac_profile); |
162 | iwm->umac_profile = NULL; | 161 | iwm->umac_profile = NULL; |
162 | iwm_wdev_free(iwm); | ||
163 | } | 163 | } |
164 | 164 | ||
165 | int iwm_if_add(struct iwm_priv *iwm) | 165 | int iwm_if_add(struct iwm_priv *iwm) |
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 01db705a38ec..685098148e10 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c | |||
@@ -135,8 +135,14 @@ int lbs_update_hw_spec(struct lbs_private *priv) | |||
135 | /* Clamp region code to 8-bit since FW spec indicates that it should | 135 | /* Clamp region code to 8-bit since FW spec indicates that it should |
136 | * only ever be 8-bit, even though the field size is 16-bit. Some firmware | 136 | * only ever be 8-bit, even though the field size is 16-bit. Some firmware |
137 | * returns non-zero high 8 bits here. | 137 | * returns non-zero high 8 bits here. |
138 | * | ||
139 | * Firmware version 4.0.102 used in CF8381 has region code shifted. We | ||
140 | * need to check for this problem and handle it properly. | ||
138 | */ | 141 | */ |
139 | priv->regioncode = le16_to_cpu(cmd.regioncode) & 0xFF; | 142 | if (MRVL_FW_MAJOR_REV(priv->fwrelease) == MRVL_FW_V4) |
143 | priv->regioncode = (le16_to_cpu(cmd.regioncode) >> 8) & 0xFF; | ||
144 | else | ||
145 | priv->regioncode = le16_to_cpu(cmd.regioncode) & 0xFF; | ||
140 | 146 | ||
141 | for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) { | 147 | for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) { |
142 | /* use the region code to search for the index */ | 148 | /* use the region code to search for the index */ |
diff --git a/drivers/net/wireless/libertas/defs.h b/drivers/net/wireless/libertas/defs.h index 48da157d6cda..72f3479a4d70 100644 --- a/drivers/net/wireless/libertas/defs.h +++ b/drivers/net/wireless/libertas/defs.h | |||
@@ -234,6 +234,8 @@ static inline void lbs_deb_hex(unsigned int grp, const char *prompt, u8 *buf, in | |||
234 | /** Mesh enable bit in FW capability */ | 234 | /** Mesh enable bit in FW capability */ |
235 | #define MESH_CAPINFO_ENABLE_MASK (1<<16) | 235 | #define MESH_CAPINFO_ENABLE_MASK (1<<16) |
236 | 236 | ||
237 | /** FW definition from Marvell v4 */ | ||
238 | #define MRVL_FW_V4 (0x04) | ||
237 | /** FW definition from Marvell v5 */ | 239 | /** FW definition from Marvell v5 */ |
238 | #define MRVL_FW_V5 (0x05) | 240 | #define MRVL_FW_V5 (0x05) |
239 | /** FW definition from Marvell v10 */ | 241 | /** FW definition from Marvell v10 */ |
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 4befa48dbc34..e9b5442f1dda 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -788,7 +788,7 @@ static const struct ieee80211_ops mac80211_hwsim_ops = | |||
788 | static void mac80211_hwsim_free(void) | 788 | static void mac80211_hwsim_free(void) |
789 | { | 789 | { |
790 | struct list_head tmplist, *i, *tmp; | 790 | struct list_head tmplist, *i, *tmp; |
791 | struct mac80211_hwsim_data *data; | 791 | struct mac80211_hwsim_data *data, *tmpdata; |
792 | 792 | ||
793 | INIT_LIST_HEAD(&tmplist); | 793 | INIT_LIST_HEAD(&tmplist); |
794 | 794 | ||
@@ -797,7 +797,7 @@ static void mac80211_hwsim_free(void) | |||
797 | list_move(i, &tmplist); | 797 | list_move(i, &tmplist); |
798 | spin_unlock_bh(&hwsim_radio_lock); | 798 | spin_unlock_bh(&hwsim_radio_lock); |
799 | 799 | ||
800 | list_for_each_entry(data, &tmplist, list) { | 800 | list_for_each_entry_safe(data, tmpdata, &tmplist, list) { |
801 | debugfs_remove(data->debugfs_group); | 801 | debugfs_remove(data->debugfs_group); |
802 | debugfs_remove(data->debugfs_ps); | 802 | debugfs_remove(data->debugfs_ps); |
803 | debugfs_remove(data->debugfs); | 803 | debugfs_remove(data->debugfs); |
@@ -1246,8 +1246,8 @@ static void __exit exit_mac80211_hwsim(void) | |||
1246 | { | 1246 | { |
1247 | printk(KERN_DEBUG "mac80211_hwsim: unregister radios\n"); | 1247 | printk(KERN_DEBUG "mac80211_hwsim: unregister radios\n"); |
1248 | 1248 | ||
1249 | unregister_netdev(hwsim_mon); | ||
1250 | mac80211_hwsim_free(); | 1249 | mac80211_hwsim_free(); |
1250 | unregister_netdev(hwsim_mon); | ||
1251 | } | 1251 | } |
1252 | 1252 | ||
1253 | 1253 | ||
diff --git a/drivers/net/wireless/p54/p54spi.c b/drivers/net/wireless/p54/p54spi.c index d5f181ad37fc..eef532987d05 100644 --- a/drivers/net/wireless/p54/p54spi.c +++ b/drivers/net/wireless/p54/p54spi.c | |||
@@ -600,7 +600,7 @@ static int __devinit p54spi_probe(struct spi_device *spi) | |||
600 | 600 | ||
601 | hw = p54_init_common(sizeof(*priv)); | 601 | hw = p54_init_common(sizeof(*priv)); |
602 | if (!hw) { | 602 | if (!hw) { |
603 | dev_err(&priv->spi->dev, "could not alloc ieee80211_hw"); | 603 | dev_err(&spi->dev, "could not alloc ieee80211_hw"); |
604 | return -ENOMEM; | 604 | return -ENOMEM; |
605 | } | 605 | } |
606 | 606 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index 795706d63b94..00611b32d08b 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c | |||
@@ -1546,7 +1546,9 @@ static int rt2500usb_init_eeprom(struct rt2x00_dev *rt2x00dev) | |||
1546 | rt2500usb_register_read(rt2x00dev, MAC_CSR0, ®); | 1546 | rt2500usb_register_read(rt2x00dev, MAC_CSR0, ®); |
1547 | rt2x00_set_chip(rt2x00dev, RT2570, value, reg); | 1547 | rt2x00_set_chip(rt2x00dev, RT2570, value, reg); |
1548 | 1548 | ||
1549 | if (!rt2x00_check_rev(&rt2x00dev->chip, 0x000ffff0, 0)) { | 1549 | if (!rt2x00_check_rev(&rt2x00dev->chip, 0x000ffff0, 0) || |
1550 | rt2x00_check_rev(&rt2x00dev->chip, 0x0000000f, 0)) { | ||
1551 | |||
1550 | ERROR(rt2x00dev, "Invalid RT chipset detected.\n"); | 1552 | ERROR(rt2x00dev, "Invalid RT chipset detected.\n"); |
1551 | return -ENODEV; | 1553 | return -ENODEV; |
1552 | } | 1554 | } |
diff --git a/drivers/net/wireless/rtl818x/rtl8187_leds.c b/drivers/net/wireless/rtl818x/rtl8187_leds.c index b44253592243..cf9f899fe0e6 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_leds.c +++ b/drivers/net/wireless/rtl818x/rtl8187_leds.c | |||
@@ -208,11 +208,12 @@ void rtl8187_leds_exit(struct ieee80211_hw *dev) | |||
208 | { | 208 | { |
209 | struct rtl8187_priv *priv = dev->priv; | 209 | struct rtl8187_priv *priv = dev->priv; |
210 | 210 | ||
211 | rtl8187_unregister_led(&priv->led_tx); | ||
212 | /* turn the LED off before exiting */ | 211 | /* turn the LED off before exiting */ |
213 | queue_delayed_work(dev->workqueue, &priv->led_off, 0); | 212 | queue_delayed_work(dev->workqueue, &priv->led_off, 0); |
214 | cancel_delayed_work_sync(&priv->led_off); | 213 | cancel_delayed_work_sync(&priv->led_off); |
214 | cancel_delayed_work_sync(&priv->led_on); | ||
215 | rtl8187_unregister_led(&priv->led_rx); | 215 | rtl8187_unregister_led(&priv->led_rx); |
216 | rtl8187_unregister_led(&priv->led_tx); | ||
216 | } | 217 | } |
217 | #endif /* def CONFIG_RTL8187_LED */ | 218 | #endif /* def CONFIG_RTL8187_LED */ |
218 | 219 | ||