summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlegacy/common.c
diff options
context:
space:
mode:
authorStanislaw Gruszka2013-06-12 16:44:49 +0200
committerJohn W. Linville2013-06-12 21:06:57 +0200
commit8cdbab7f07e82f26c48adcc761391c1c7ff339ff (patch)
treeeb820eb32a6bcf5d2f8f079f019bc73021f35ff5 /drivers/net/wireless/iwlegacy/common.c
parentiwlegacy: add il_{stop,wake}_queues_by_reason functions (diff)
downloadkernel-qcow2-linux-8cdbab7f07e82f26c48adcc761391c1c7ff339ff.tar.gz
kernel-qcow2-linux-8cdbab7f07e82f26c48adcc761391c1c7ff339ff.tar.xz
kernel-qcow2-linux-8cdbab7f07e82f26c48adcc761391c1c7ff339ff.zip
iwl4965: workaround for firmware frame tx rejection
Firmware can reject to transmit frame on passive channel, when it did not yet received any frame with valid CRC on that channel. Workaround this problem in the driver. Tested-by: Jake Edge <jake@lwn.net> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlegacy/common.c')
-rw-r--r--drivers/net/wireless/iwlegacy/common.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
index e9a3cbc409ae..3195aad440dd 100644
--- a/drivers/net/wireless/iwlegacy/common.c
+++ b/drivers/net/wireless/iwlegacy/common.c
@@ -5307,6 +5307,17 @@ il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
D_MAC80211("BSSID %pM\n", bss_conf->bssid);
/*
+ * On passive channel we wait with blocked queues to see if
+ * there is traffic on that channel. If no frame will be
+ * received (what is very unlikely since scan detects AP on
+ * that channel, but theoretically possible), mac80211 associate
+ * procedure will time out and mac80211 will call us with NULL
+ * bssid. We have to unblock queues on such condition.
+ */
+ if (is_zero_ether_addr(bss_conf->bssid))
+ il_wake_queues_by_reason(il, IL_STOP_REASON_PASSIVE);
+
+ /*
* If there is currently a HW scan going on in the background,
* then we need to cancel it, otherwise sometimes we are not
* able to authenticate (FIXME: why ?)