diff options
Diffstat (limited to 'drivers/net/wireless/iwlegacy/4965-mac.c')
-rw-r--r-- | drivers/net/wireless/iwlegacy/4965-mac.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c index 9a95045c97b6..1c44bb59f6c8 100644 --- a/drivers/net/wireless/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/iwlegacy/4965-mac.c | |||
@@ -588,6 +588,11 @@ il4965_pass_packet_to_mac80211(struct il_priv *il, struct ieee80211_hdr *hdr, | |||
588 | return; | 588 | return; |
589 | } | 589 | } |
590 | 590 | ||
591 | if (unlikely(test_bit(IL_STOP_REASON_PASSIVE, &il->stop_reason))) { | ||
592 | il_wake_queues_by_reason(il, IL_STOP_REASON_PASSIVE); | ||
593 | D_INFO("Woke queues - frame received on passive channel\n"); | ||
594 | } | ||
595 | |||
591 | /* In case of HW accelerated crypto and bad decryption, drop */ | 596 | /* In case of HW accelerated crypto and bad decryption, drop */ |
592 | if (!il->cfg->mod_params->sw_crypto && | 597 | if (!il->cfg->mod_params->sw_crypto && |
593 | il_set_decrypted_flag(il, hdr, ampdu_status, stats)) | 598 | il_set_decrypted_flag(il, hdr, ampdu_status, stats)) |
@@ -2806,6 +2811,19 @@ il4965_hdl_tx(struct il_priv *il, struct il_rx_buf *rxb) | |||
2806 | return; | 2811 | return; |
2807 | } | 2812 | } |
2808 | 2813 | ||
2814 | /* | ||
2815 | * Firmware will not transmit frame on passive channel, if it not yet | ||
2816 | * received some valid frame on that channel. When this error happen | ||
2817 | * we have to wait until firmware will unblock itself i.e. when we | ||
2818 | * note received beacon or other frame. We unblock queues in | ||
2819 | * il4965_pass_packet_to_mac80211 or in il_mac_bss_info_changed. | ||
2820 | */ | ||
2821 | if (unlikely((status & TX_STATUS_MSK) == TX_STATUS_FAIL_PASSIVE_NO_RX) && | ||
2822 | il->iw_mode == NL80211_IFTYPE_STATION) { | ||
2823 | il_stop_queues_by_reason(il, IL_STOP_REASON_PASSIVE); | ||
2824 | D_INFO("Stopped queues - RX waiting on passive channel\n"); | ||
2825 | } | ||
2826 | |||
2809 | spin_lock_irqsave(&il->sta_lock, flags); | 2827 | spin_lock_irqsave(&il->sta_lock, flags); |
2810 | if (txq->sched_retry) { | 2828 | if (txq->sched_retry) { |
2811 | const u32 scd_ssn = il4965_get_scd_ssn(tx_resp); | 2829 | const u32 scd_ssn = il4965_get_scd_ssn(tx_resp); |