/* update hangcheck */
fw.wlan.last_super_num[qidx] = 0;
+ /*
+ * Note:
+ * There could be a corner case when the TXFAIL is set
+ * even though the frame was properly ACKed by the peer:
+ * a BlockAckReq with the immediate policy will cause
+ * the receiving peer to produce a BlockACK unfortunately
+ * the MAC in this chip seems to be expecting a legacy
+ * ACK and marks the BAR as failed!
+ */
+
if (!!(desc->ctrl & AR9170_CTRL_FAIL)) {
txfail = !!(desc->ctrl & AR9170_CTRL_TXFAIL);
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 */