carl9170 firmware: add workaround for carl vs. mac BAR problem
authorChristian Lamparter <chunkeey@googlemail.com>
Sat, 7 Jul 2012 00:07:43 +0000 (02:07 +0200)
committerChristian Lamparter <chunkeey@googlemail.com>
Sat, 7 Jul 2012 00:07:43 +0000 (02:07 +0200)
It looks like the AR9170 MAC seems to be incapable of
matching BA to xmitted BARs. This is a problem because
when mac80211 tries to recover it sends out BARs which
can't be matched to a BA and so it goes on. Of course
having lots of stale BARs around causes mayhem in the
receiver buffer at the HT peer on the other end because
it's constantly flushing the reorder buffer.

Note: This is hopefully just a temporary fix, but until
there's a better method, it will provide at least some
relief.

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
carlfw/src/wlan.c

index e581fa8ddea34db0095a4d9d2516cf5eba89056e..b8d4ec436fca3f54ed5708c80407c4b9fc75e4cb 100644 (file)
@@ -457,6 +457,18 @@ static bool wlan_tx_status(struct dma_queue *queue,
                fw.wlan.cab_queue_len[super->s.vif_id]--;
 #endif /* CONFIG_CARL9170FW_CAB_QUEUE */
 
+       if (unlikely(ieee80211_is_back_req(super->f.data.i3e.frame_control))) {
+               /*
+                * As explained above, the hardware seems to be
+                * incapable of matching BA to BARs. This is a
+                * problem especially with mac80211, because it
+                * does resent failed BARs which of course cause
+                * some mayhem in the receiver buffer at the HT
+                * peer on the other end.
+                */
+               success = true;
+       }
+
        wlan_tx_complete(super, success);
 
        /* recycle freed descriptors */