diff options
| -rw-r--r-- | drivers/bluetooth/ath3k.c | 3 | ||||
| -rw-r--r-- | drivers/bluetooth/btusb.c | 7 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/phy.c | 143 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/init.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/p54/p54pci.c | 14 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800pci.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800usb.c | 6 | ||||
| -rw-r--r-- | net/bluetooth/rfcomm/tty.c | 2 | ||||
| -rw-r--r-- | net/mac80211/mlme.c | 6 | ||||
| -rw-r--r-- | net/wireless/wext-compat.c | 4 |
12 files changed, 129 insertions, 86 deletions
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c index 333c21289d97..6dcd55a74c0a 100644 --- a/drivers/bluetooth/ath3k.c +++ b/drivers/bluetooth/ath3k.c | |||
| @@ -41,6 +41,9 @@ static struct usb_device_id ath3k_table[] = { | |||
| 41 | 41 | ||
| 42 | /* Atheros AR9285 Malbec with sflash firmware */ | 42 | /* Atheros AR9285 Malbec with sflash firmware */ |
| 43 | { USB_DEVICE(0x03F0, 0x311D) }, | 43 | { USB_DEVICE(0x03F0, 0x311D) }, |
| 44 | |||
| 45 | /* Atheros AR5BBU12 with sflash firmware */ | ||
| 46 | { USB_DEVICE(0x0489, 0xE02C) }, | ||
| 44 | { } /* Terminating entry */ | 47 | { } /* Terminating entry */ |
| 45 | }; | 48 | }; |
| 46 | 49 | ||
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 4cefa91e6c34..b7f2f373c631 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c | |||
| @@ -105,6 +105,9 @@ static struct usb_device_id blacklist_table[] = { | |||
| 105 | /* Atheros AR9285 Malbec with sflash firmware */ | 105 | /* Atheros AR9285 Malbec with sflash firmware */ |
| 106 | { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, | 106 | { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, |
| 107 | 107 | ||
| 108 | /* Atheros AR5BBU12 with sflash firmware */ | ||
| 109 | { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, | ||
| 110 | |||
| 108 | /* Broadcom BCM2035 */ | 111 | /* Broadcom BCM2035 */ |
| 109 | { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, | 112 | { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, |
| 110 | { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, | 113 | { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, |
| @@ -829,7 +832,7 @@ static void btusb_work(struct work_struct *work) | |||
| 829 | 832 | ||
| 830 | if (hdev->conn_hash.sco_num > 0) { | 833 | if (hdev->conn_hash.sco_num > 0) { |
| 831 | if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { | 834 | if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { |
| 832 | err = usb_autopm_get_interface(data->isoc); | 835 | err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf); |
| 833 | if (err < 0) { | 836 | if (err < 0) { |
| 834 | clear_bit(BTUSB_ISOC_RUNNING, &data->flags); | 837 | clear_bit(BTUSB_ISOC_RUNNING, &data->flags); |
| 835 | usb_kill_anchored_urbs(&data->isoc_anchor); | 838 | usb_kill_anchored_urbs(&data->isoc_anchor); |
| @@ -858,7 +861,7 @@ static void btusb_work(struct work_struct *work) | |||
| 858 | 861 | ||
| 859 | __set_isoc_interface(hdev, 0); | 862 | __set_isoc_interface(hdev, 0); |
| 860 | if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) | 863 | if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) |
| 861 | usb_autopm_put_interface(data->isoc); | 864 | usb_autopm_put_interface(data->isoc ? data->isoc : data->intf); |
| 862 | } | 865 | } |
| 863 | } | 866 | } |
| 864 | 867 | ||
diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c index 78c26fdccad1..62ce2f4e8605 100644 --- a/drivers/net/wireless/ath/ath5k/phy.c +++ b/drivers/net/wireless/ath/ath5k/phy.c | |||
| @@ -282,6 +282,34 @@ int ath5k_hw_phy_disable(struct ath5k_hw *ah) | |||
| 282 | return 0; | 282 | return 0; |
| 283 | } | 283 | } |
| 284 | 284 | ||
| 285 | /* | ||
| 286 | * Wait for synth to settle | ||
| 287 | */ | ||
| 288 | static void ath5k_hw_wait_for_synth(struct ath5k_hw *ah, | ||
| 289 | struct ieee80211_channel *channel) | ||
| 290 | { | ||
| 291 | /* | ||
| 292 | * On 5211+ read activation -> rx delay | ||
| 293 | * and use it (100ns steps). | ||
| 294 | */ | ||
| 295 | if (ah->ah_version != AR5K_AR5210) { | ||
| 296 | u32 delay; | ||
| 297 | delay = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) & | ||
| 298 | AR5K_PHY_RX_DELAY_M; | ||
| 299 | delay = (channel->hw_value & CHANNEL_CCK) ? | ||
| 300 | ((delay << 2) / 22) : (delay / 10); | ||
| 301 | if (ah->ah_bwmode == AR5K_BWMODE_10MHZ) | ||
| 302 | delay = delay << 1; | ||
| 303 | if (ah->ah_bwmode == AR5K_BWMODE_5MHZ) | ||
| 304 | delay = delay << 2; | ||
| 305 | /* XXX: /2 on turbo ? Let's be safe | ||
| 306 | * for now */ | ||
| 307 | udelay(100 + delay); | ||
| 308 | } else { | ||
| 309 | mdelay(1); | ||
| 310 | } | ||
| 311 | } | ||
| 312 | |||
| 285 | 313 | ||
| 286 | /**********************\ | 314 | /**********************\ |
| 287 | * RF Gain optimization * | 315 | * RF Gain optimization * |
| @@ -1253,6 +1281,7 @@ static int ath5k_hw_channel(struct ath5k_hw *ah, | |||
| 1253 | case AR5K_RF5111: | 1281 | case AR5K_RF5111: |
| 1254 | ret = ath5k_hw_rf5111_channel(ah, channel); | 1282 | ret = ath5k_hw_rf5111_channel(ah, channel); |
| 1255 | break; | 1283 | break; |
| 1284 | case AR5K_RF2317: | ||
| 1256 | case AR5K_RF2425: | 1285 | case AR5K_RF2425: |
| 1257 | ret = ath5k_hw_rf2425_channel(ah, channel); | 1286 | ret = ath5k_hw_rf2425_channel(ah, channel); |
| 1258 | break; | 1287 | break; |
| @@ -3237,6 +3266,13 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel, | |||
| 3237 | /* Failed */ | 3266 | /* Failed */ |
| 3238 | if (i >= 100) | 3267 | if (i >= 100) |
| 3239 | return -EIO; | 3268 | return -EIO; |
| 3269 | |||
| 3270 | /* Set channel and wait for synth */ | ||
| 3271 | ret = ath5k_hw_channel(ah, channel); | ||
| 3272 | if (ret) | ||
| 3273 | return ret; | ||
| 3274 | |||
| 3275 | ath5k_hw_wait_for_synth(ah, channel); | ||
| 3240 | } | 3276 | } |
| 3241 | 3277 | ||
| 3242 | /* | 3278 | /* |
| @@ -3251,13 +3287,53 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel, | |||
| 3251 | if (ret) | 3287 | if (ret) |
| 3252 | return ret; | 3288 | return ret; |
| 3253 | 3289 | ||
| 3290 | /* Write OFDM timings on 5212*/ | ||
| 3291 | if (ah->ah_version == AR5K_AR5212 && | ||
| 3292 | channel->hw_value & CHANNEL_OFDM) { | ||
| 3293 | |||
| 3294 | ret = ath5k_hw_write_ofdm_timings(ah, channel); | ||
| 3295 | if (ret) | ||
| 3296 | return ret; | ||
| 3297 | |||
| 3298 | /* Spur info is available only from EEPROM versions | ||
| 3299 | * greater than 5.3, but the EEPROM routines will use | ||
| 3300 | * static values for older versions */ | ||
| 3301 | if (ah->ah_mac_srev >= AR5K_SREV_AR5424) | ||
| 3302 | ath5k_hw_set_spur_mitigation_filter(ah, | ||
| 3303 | channel); | ||
| 3304 | } | ||
| 3305 | |||
| 3306 | /* If we used fast channel switching | ||
| 3307 | * we are done, release RF bus and | ||
| 3308 | * fire up NF calibration. | ||
| 3309 | * | ||
| 3310 | * Note: Only NF calibration due to | ||
| 3311 | * channel change, not AGC calibration | ||
| 3312 | * since AGC is still running ! | ||
| 3313 | */ | ||
| 3314 | if (fast) { | ||
| 3315 | /* | ||
| 3316 | * Release RF Bus grant | ||
| 3317 | */ | ||
| 3318 | AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_RFBUS_REQ, | ||
| 3319 | AR5K_PHY_RFBUS_REQ_REQUEST); | ||
| 3320 | |||
| 3321 | /* | ||
| 3322 | * Start NF calibration | ||
| 3323 | */ | ||
| 3324 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL, | ||
| 3325 | AR5K_PHY_AGCCTL_NF); | ||
| 3326 | |||
| 3327 | return ret; | ||
| 3328 | } | ||
| 3329 | |||
| 3254 | /* | 3330 | /* |
| 3255 | * For 5210 we do all initialization using | 3331 | * For 5210 we do all initialization using |
| 3256 | * initvals, so we don't have to modify | 3332 | * initvals, so we don't have to modify |
| 3257 | * any settings (5210 also only supports | 3333 | * any settings (5210 also only supports |
| 3258 | * a/aturbo modes) | 3334 | * a/aturbo modes) |
| 3259 | */ | 3335 | */ |
| 3260 | if ((ah->ah_version != AR5K_AR5210) && !fast) { | 3336 | if (ah->ah_version != AR5K_AR5210) { |
| 3261 | 3337 | ||
| 3262 | /* | 3338 | /* |
| 3263 | * Write initial RF gain settings | 3339 | * Write initial RF gain settings |
| @@ -3276,22 +3352,6 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel, | |||
| 3276 | if (ret) | 3352 | if (ret) |
| 3277 | return ret; | 3353 | return ret; |
| 3278 | 3354 | ||
| 3279 | /* Write OFDM timings on 5212*/ | ||
| 3280 | if (ah->ah_version == AR5K_AR5212 && | ||
| 3281 | channel->hw_value & CHANNEL_OFDM) { | ||
| 3282 | |||
| 3283 | ret = ath5k_hw_write_ofdm_timings(ah, channel); | ||
| 3284 | if (ret) | ||
| 3285 | return ret; | ||
| 3286 | |||
| 3287 | /* Spur info is available only from EEPROM versions | ||
| 3288 | * greater than 5.3, but the EEPROM routines will use | ||
| 3289 | * static values for older versions */ | ||
| 3290 | if (ah->ah_mac_srev >= AR5K_SREV_AR5424) | ||
| 3291 | ath5k_hw_set_spur_mitigation_filter(ah, | ||
| 3292 | channel); | ||
| 3293 | } | ||
| 3294 | |||
| 3295 | /*Enable/disable 802.11b mode on 5111 | 3355 | /*Enable/disable 802.11b mode on 5111 |
| 3296 | (enable 2111 frequency converter + CCK)*/ | 3356 | (enable 2111 frequency converter + CCK)*/ |
| 3297 | if (ah->ah_radio == AR5K_RF5111) { | 3357 | if (ah->ah_radio == AR5K_RF5111) { |
| @@ -3322,47 +3382,20 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel, | |||
| 3322 | */ | 3382 | */ |
| 3323 | ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT); | 3383 | ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT); |
| 3324 | 3384 | ||
| 3385 | ath5k_hw_wait_for_synth(ah, channel); | ||
| 3386 | |||
| 3325 | /* | 3387 | /* |
| 3326 | * On 5211+ read activation -> rx delay | 3388 | * Perform ADC test to see if baseband is ready |
| 3327 | * and use it. | 3389 | * Set tx hold and check adc test register |
| 3328 | */ | 3390 | */ |
| 3329 | if (ah->ah_version != AR5K_AR5210) { | 3391 | phy_tst1 = ath5k_hw_reg_read(ah, AR5K_PHY_TST1); |
| 3330 | u32 delay; | 3392 | ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1); |
| 3331 | delay = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) & | 3393 | for (i = 0; i <= 20; i++) { |
| 3332 | AR5K_PHY_RX_DELAY_M; | 3394 | if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10)) |
| 3333 | delay = (channel->hw_value & CHANNEL_CCK) ? | 3395 | break; |
| 3334 | ((delay << 2) / 22) : (delay / 10); | 3396 | udelay(200); |
| 3335 | if (ah->ah_bwmode == AR5K_BWMODE_10MHZ) | ||
| 3336 | delay = delay << 1; | ||
| 3337 | if (ah->ah_bwmode == AR5K_BWMODE_5MHZ) | ||
| 3338 | delay = delay << 2; | ||
| 3339 | /* XXX: /2 on turbo ? Let's be safe | ||
| 3340 | * for now */ | ||
| 3341 | udelay(100 + delay); | ||
| 3342 | } else { | ||
| 3343 | mdelay(1); | ||
| 3344 | } | ||
| 3345 | |||
| 3346 | if (fast) | ||
| 3347 | /* | ||
| 3348 | * Release RF Bus grant | ||
| 3349 | */ | ||
| 3350 | AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_RFBUS_REQ, | ||
| 3351 | AR5K_PHY_RFBUS_REQ_REQUEST); | ||
| 3352 | else { | ||
| 3353 | /* | ||
| 3354 | * Perform ADC test to see if baseband is ready | ||
| 3355 | * Set tx hold and check adc test register | ||
| 3356 | */ | ||
| 3357 | phy_tst1 = ath5k_hw_reg_read(ah, AR5K_PHY_TST1); | ||
| 3358 | ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1); | ||
| 3359 | for (i = 0; i <= 20; i++) { | ||
| 3360 | if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10)) | ||
| 3361 | break; | ||
| 3362 | udelay(200); | ||
| 3363 | } | ||
| 3364 | ath5k_hw_reg_write(ah, phy_tst1, AR5K_PHY_TST1); | ||
| 3365 | } | 3397 | } |
| 3398 | ath5k_hw_reg_write(ah, phy_tst1, AR5K_PHY_TST1); | ||
| 3366 | 3399 | ||
| 3367 | /* | 3400 | /* |
| 3368 | * Start automatic gain control calibration | 3401 | * Start automatic gain control calibration |
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 23838e37d45f..1a7fa6ea4cf5 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | #include <linux/device.h> | 21 | #include <linux/device.h> |
| 22 | #include <linux/leds.h> | 22 | #include <linux/leds.h> |
| 23 | #include <linux/completion.h> | 23 | #include <linux/completion.h> |
| 24 | #include <linux/pm_qos_params.h> | ||
| 25 | 24 | ||
| 26 | #include "debug.h" | 25 | #include "debug.h" |
| 27 | #include "common.h" | 26 | #include "common.h" |
| @@ -57,8 +56,6 @@ struct ath_node; | |||
| 57 | 56 | ||
| 58 | #define A_MAX(a, b) ((a) > (b) ? (a) : (b)) | 57 | #define A_MAX(a, b) ((a) > (b) ? (a) : (b)) |
| 59 | 58 | ||
| 60 | #define ATH9K_PM_QOS_DEFAULT_VALUE 55 | ||
| 61 | |||
| 62 | #define TSF_TO_TU(_h,_l) \ | 59 | #define TSF_TO_TU(_h,_l) \ |
| 63 | ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10)) | 60 | ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10)) |
| 64 | 61 | ||
| @@ -633,8 +630,6 @@ struct ath_softc { | |||
| 633 | struct ath_descdma txsdma; | 630 | struct ath_descdma txsdma; |
| 634 | 631 | ||
| 635 | struct ath_ant_comb ant_comb; | 632 | struct ath_ant_comb ant_comb; |
| 636 | |||
| 637 | struct pm_qos_request_list pm_qos_req; | ||
| 638 | }; | 633 | }; |
| 639 | 634 | ||
| 640 | struct ath_wiphy { | 635 | struct ath_wiphy { |
| @@ -666,7 +661,6 @@ static inline void ath_read_cachesize(struct ath_common *common, int *csz) | |||
| 666 | extern struct ieee80211_ops ath9k_ops; | 661 | extern struct ieee80211_ops ath9k_ops; |
| 667 | extern int ath9k_modparam_nohwcrypt; | 662 | extern int ath9k_modparam_nohwcrypt; |
| 668 | extern int led_blink; | 663 | extern int led_blink; |
| 669 | extern int ath9k_pm_qos_value; | ||
| 670 | extern bool is_ath9k_unloaded; | 664 | extern bool is_ath9k_unloaded; |
| 671 | 665 | ||
| 672 | irqreturn_t ath_isr(int irq, void *dev); | 666 | irqreturn_t ath_isr(int irq, void *dev); |
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index 087a6a95edd5..a033d01bf8a0 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c | |||
| @@ -41,10 +41,6 @@ static int ath9k_btcoex_enable; | |||
| 41 | module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444); | 41 | module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444); |
| 42 | MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); | 42 | MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); |
| 43 | 43 | ||
| 44 | int ath9k_pm_qos_value = ATH9K_PM_QOS_DEFAULT_VALUE; | ||
| 45 | module_param_named(pmqos, ath9k_pm_qos_value, int, S_IRUSR | S_IRGRP | S_IROTH); | ||
| 46 | MODULE_PARM_DESC(pmqos, "User specified PM-QOS value"); | ||
| 47 | |||
| 48 | bool is_ath9k_unloaded; | 44 | bool is_ath9k_unloaded; |
| 49 | /* We use the hw_value as an index into our private channel structure */ | 45 | /* We use the hw_value as an index into our private channel structure */ |
| 50 | 46 | ||
| @@ -762,9 +758,6 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid, | |||
| 762 | ath_init_leds(sc); | 758 | ath_init_leds(sc); |
| 763 | ath_start_rfkill_poll(sc); | 759 | ath_start_rfkill_poll(sc); |
| 764 | 760 | ||
| 765 | pm_qos_add_request(&sc->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, | ||
| 766 | PM_QOS_DEFAULT_VALUE); | ||
| 767 | |||
| 768 | return 0; | 761 | return 0; |
| 769 | 762 | ||
| 770 | error_world: | 763 | error_world: |
| @@ -831,7 +824,6 @@ void ath9k_deinit_device(struct ath_softc *sc) | |||
| 831 | } | 824 | } |
| 832 | 825 | ||
| 833 | ieee80211_unregister_hw(hw); | 826 | ieee80211_unregister_hw(hw); |
| 834 | pm_qos_remove_request(&sc->pm_qos_req); | ||
| 835 | ath_rx_cleanup(sc); | 827 | ath_rx_cleanup(sc); |
| 836 | ath_tx_cleanup(sc); | 828 | ath_tx_cleanup(sc); |
| 837 | ath9k_deinit_softc(sc); | 829 | ath9k_deinit_softc(sc); |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index da5c64597c1f..a09d15f7aa6e 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
| @@ -1173,12 +1173,6 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
| 1173 | ath9k_btcoex_timer_resume(sc); | 1173 | ath9k_btcoex_timer_resume(sc); |
| 1174 | } | 1174 | } |
| 1175 | 1175 | ||
| 1176 | /* User has the option to provide pm-qos value as a module | ||
| 1177 | * parameter rather than using the default value of | ||
| 1178 | * 'ATH9K_PM_QOS_DEFAULT_VALUE'. | ||
| 1179 | */ | ||
| 1180 | pm_qos_update_request(&sc->pm_qos_req, ath9k_pm_qos_value); | ||
| 1181 | |||
| 1182 | if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) | 1176 | if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) |
| 1183 | common->bus_ops->extn_synch_en(common); | 1177 | common->bus_ops->extn_synch_en(common); |
| 1184 | 1178 | ||
| @@ -1345,8 +1339,6 @@ static void ath9k_stop(struct ieee80211_hw *hw) | |||
| 1345 | 1339 | ||
| 1346 | sc->sc_flags |= SC_OP_INVALID; | 1340 | sc->sc_flags |= SC_OP_INVALID; |
| 1347 | 1341 | ||
| 1348 | pm_qos_update_request(&sc->pm_qos_req, PM_QOS_DEFAULT_VALUE); | ||
| 1349 | |||
| 1350 | mutex_unlock(&sc->mutex); | 1342 | mutex_unlock(&sc->mutex); |
| 1351 | 1343 | ||
| 1352 | ath_dbg(common, ATH_DBG_CONFIG, "Driver halt\n"); | 1344 | ath_dbg(common, ATH_DBG_CONFIG, "Driver halt\n"); |
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c index 1eacba4daa5b..0494d7b102d4 100644 --- a/drivers/net/wireless/p54/p54pci.c +++ b/drivers/net/wireless/p54/p54pci.c | |||
| @@ -199,6 +199,7 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index, | |||
| 199 | while (i != idx) { | 199 | while (i != idx) { |
| 200 | u16 len; | 200 | u16 len; |
| 201 | struct sk_buff *skb; | 201 | struct sk_buff *skb; |
| 202 | dma_addr_t dma_addr; | ||
| 202 | desc = &ring[i]; | 203 | desc = &ring[i]; |
| 203 | len = le16_to_cpu(desc->len); | 204 | len = le16_to_cpu(desc->len); |
| 204 | skb = rx_buf[i]; | 205 | skb = rx_buf[i]; |
| @@ -216,17 +217,20 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index, | |||
| 216 | 217 | ||
| 217 | len = priv->common.rx_mtu; | 218 | len = priv->common.rx_mtu; |
| 218 | } | 219 | } |
| 220 | dma_addr = le32_to_cpu(desc->host_addr); | ||
| 221 | pci_dma_sync_single_for_cpu(priv->pdev, dma_addr, | ||
| 222 | priv->common.rx_mtu + 32, PCI_DMA_FROMDEVICE); | ||
| 219 | skb_put(skb, len); | 223 | skb_put(skb, len); |
| 220 | 224 | ||
| 221 | if (p54_rx(dev, skb)) { | 225 | if (p54_rx(dev, skb)) { |
| 222 | pci_unmap_single(priv->pdev, | 226 | pci_unmap_single(priv->pdev, dma_addr, |
| 223 | le32_to_cpu(desc->host_addr), | 227 | priv->common.rx_mtu + 32, PCI_DMA_FROMDEVICE); |
| 224 | priv->common.rx_mtu + 32, | ||
| 225 | PCI_DMA_FROMDEVICE); | ||
| 226 | rx_buf[i] = NULL; | 228 | rx_buf[i] = NULL; |
| 227 | desc->host_addr = 0; | 229 | desc->host_addr = cpu_to_le32(0); |
| 228 | } else { | 230 | } else { |
| 229 | skb_trim(skb, 0); | 231 | skb_trim(skb, 0); |
| 232 | pci_dma_sync_single_for_device(priv->pdev, dma_addr, | ||
| 233 | priv->common.rx_mtu + 32, PCI_DMA_FROMDEVICE); | ||
| 230 | desc->len = cpu_to_le16(priv->common.rx_mtu + 32); | 234 | desc->len = cpu_to_le16(priv->common.rx_mtu + 32); |
| 231 | } | 235 | } |
| 232 | 236 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c index aa97971a38af..3b3f1e45ab3e 100644 --- a/drivers/net/wireless/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/rt2x00/rt2800pci.c | |||
| @@ -652,6 +652,12 @@ static void rt2800pci_fill_rxdone(struct queue_entry *entry, | |||
| 652 | */ | 652 | */ |
| 653 | rxdesc->flags |= RX_FLAG_IV_STRIPPED; | 653 | rxdesc->flags |= RX_FLAG_IV_STRIPPED; |
| 654 | 654 | ||
| 655 | /* | ||
| 656 | * The hardware has already checked the Michael Mic and has | ||
| 657 | * stripped it from the frame. Signal this to mac80211. | ||
| 658 | */ | ||
| 659 | rxdesc->flags |= RX_FLAG_MMIC_STRIPPED; | ||
| 660 | |||
| 655 | if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS) | 661 | if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS) |
| 656 | rxdesc->flags |= RX_FLAG_DECRYPTED; | 662 | rxdesc->flags |= RX_FLAG_DECRYPTED; |
| 657 | else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC) | 663 | else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC) |
| @@ -1065,6 +1071,8 @@ static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = { | |||
| 1065 | { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1071 | { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
| 1066 | #endif | 1072 | #endif |
| 1067 | #ifdef CONFIG_RT2800PCI_RT35XX | 1073 | #ifdef CONFIG_RT2800PCI_RT35XX |
| 1074 | { PCI_DEVICE(0x1432, 0x7711), PCI_DEVICE_DATA(&rt2800pci_ops) }, | ||
| 1075 | { PCI_DEVICE(0x1432, 0x7722), PCI_DEVICE_DATA(&rt2800pci_ops) }, | ||
| 1068 | { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1076 | { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
| 1069 | { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1077 | { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
| 1070 | { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) }, | 1078 | { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) }, |
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c index b97a4a54ff4c..197a36c05fda 100644 --- a/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | |||
| @@ -486,6 +486,12 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry, | |||
| 486 | */ | 486 | */ |
| 487 | rxdesc->flags |= RX_FLAG_IV_STRIPPED; | 487 | rxdesc->flags |= RX_FLAG_IV_STRIPPED; |
| 488 | 488 | ||
| 489 | /* | ||
| 490 | * The hardware has already checked the Michael Mic and has | ||
| 491 | * stripped it from the frame. Signal this to mac80211. | ||
| 492 | */ | ||
| 493 | rxdesc->flags |= RX_FLAG_MMIC_STRIPPED; | ||
| 494 | |||
| 489 | if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS) | 495 | if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS) |
| 490 | rxdesc->flags |= RX_FLAG_DECRYPTED; | 496 | rxdesc->flags |= RX_FLAG_DECRYPTED; |
| 491 | else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC) | 497 | else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC) |
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index 2575c2db6404..d7b9af4703d0 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c | |||
| @@ -727,7 +727,9 @@ static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp) | |||
| 727 | break; | 727 | break; |
| 728 | } | 728 | } |
| 729 | 729 | ||
| 730 | tty_unlock(); | ||
| 730 | schedule(); | 731 | schedule(); |
| 732 | tty_lock(); | ||
| 731 | } | 733 | } |
| 732 | set_current_state(TASK_RUNNING); | 734 | set_current_state(TASK_RUNNING); |
| 733 | remove_wait_queue(&dev->wait, &wait); | 735 | remove_wait_queue(&dev->wait, &wait); |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 45fbb9e33746..c9ceb4d57ab0 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -1033,6 +1033,12 @@ void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata, | |||
| 1033 | if (is_multicast_ether_addr(hdr->addr1)) | 1033 | if (is_multicast_ether_addr(hdr->addr1)) |
| 1034 | return; | 1034 | return; |
| 1035 | 1035 | ||
| 1036 | /* | ||
| 1037 | * In case we receive frames after disassociation. | ||
| 1038 | */ | ||
| 1039 | if (!sdata->u.mgd.associated) | ||
| 1040 | return; | ||
| 1041 | |||
| 1036 | ieee80211_sta_reset_conn_monitor(sdata); | 1042 | ieee80211_sta_reset_conn_monitor(sdata); |
| 1037 | } | 1043 | } |
| 1038 | 1044 | ||
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index 3e5dbd4e4cd5..d112f038edf0 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
| @@ -802,11 +802,11 @@ int cfg80211_wext_siwfreq(struct net_device *dev, | |||
| 802 | return freq; | 802 | return freq; |
| 803 | if (freq == 0) | 803 | if (freq == 0) |
| 804 | return -EINVAL; | 804 | return -EINVAL; |
| 805 | wdev_lock(wdev); | ||
| 806 | mutex_lock(&rdev->devlist_mtx); | 805 | mutex_lock(&rdev->devlist_mtx); |
| 806 | wdev_lock(wdev); | ||
| 807 | err = cfg80211_set_freq(rdev, wdev, freq, NL80211_CHAN_NO_HT); | 807 | err = cfg80211_set_freq(rdev, wdev, freq, NL80211_CHAN_NO_HT); |
| 808 | mutex_unlock(&rdev->devlist_mtx); | ||
| 809 | wdev_unlock(wdev); | 808 | wdev_unlock(wdev); |
| 809 | mutex_unlock(&rdev->devlist_mtx); | ||
| 810 | return err; | 810 | return err; |
| 811 | default: | 811 | default: |
| 812 | return -EOPNOTSUPP; | 812 | return -EOPNOTSUPP; |
