wlan_tx_ampdu(super);
-#if (defined CONFIG_CARL9170FW_LOOPBACK) || (defined CONFIG_CARL9170FW_DISCARD)
- wlan_tx_complete(super, true);
- unhide_super(desc);
-# ifdef CONFIG_CARL9170FW_LOOPBACK
- dma_put(&fw.pta.up_queue, desc);
- up_trigger();
-# elif CONFIG_CARL9170FW_DISCARD
- dma_reclaim(&fw.pta.down_queue, desc);
- down_trigger();
-# endif
-#else /* CONFIG_CARL9170FW_LOOPBACK */
-
-# ifdef CONFIG_CARL9170FW_DEBUG
+#ifdef CONFIG_CARL9170FW_DEBUG
BUG_ON(fw.phy.psm.state != CARL9170_PSM_WAKE);
-# endif /* CONFIG_CARL9170FW_DEBUG */
+#endif /* CONFIG_CARL9170FW_DEBUG */
/* insert desc into the right queue */
dma_put(&fw.wlan.tx_queue[super->s.queue], desc);
-#endif /* CONFIG_CARL9170FW_LOOPBACK */
}
static void wlan_assign_seq(struct ieee80211_hdr *hdr, unsigned int vif)
hdr->seq_ctrl &= cpu_to_le16(~IEEE80211_SCTL_SEQ);
hdr->seq_ctrl |= cpu_to_le16(fw.wlan.sequence[vif]);
- if (!(hdr->seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG)))
+ if (ieee80211_is_first_frag(hdr->seq_ctrl))
fw.wlan.sequence[vif] += 0x10;
}
get(AR9170_MAC_REG_AMPDU_FACTOR),
8 << super->s.ampdu_factor));
}
-
- __wlan_tx(desc);
}
/* propagate transmission status back to the driver */
/* reset retry indicator flags */
desc->ctrl &= ~(AR9170_CTRL_TXFAIL | AR9170_CTRL_BAFAIL);
+ /*
+ * Note: wlan_tx_consume_retry will override the old
+ * phy [CCK,OFDM, HT, BW20/40, MCS...] and mac vectors
+ * [AMPDU,RTS/CTS,...] therefore be careful when they
+ * are used.
+ */
if (wlan_tx_consume_retry(super)) {
/*
* retry for simple and aggregated 802.11 frames.
* be aware of this so the frames don't get lost.
*/
+#ifndef CONFIG_CARL9170FW_DEBUG
dma_unlink_head(queue);
+#else /* CONFIG_CARL9170FW_DEBUG */
+ BUG_ON(dma_unlink_head(queue) != desc);
+#endif /* CONFIG_CARL9170FW_DEBUG */
dma_put(&fw.wlan.tx_retry, desc);
return true;
}
}
}
+#ifndef CONFIG_CARL9170FW_DEBUG
dma_unlink_head(queue);
+#else /* CONFIG_CARL9170FW_DEBUG */
+ BUG_ON(dma_unlink_head(queue) != desc);
+#endif /* CONFIG_CARL9170FW_DEBUG */
if (txfail) {
/*
* Issue the queue bump,
#endif /* CONFIG_CARL9170FW_CAB_QUEUE */
_wlan_tx(desc);
+ __wlan_tx(desc);
wlan_trigger(BIT(super->s.queue));
}
/* ready to roll! */
_wlan_tx(desc);
+ __wlan_tx(desc);
wlan_trigger(BIT(super->s.queue));
}
}