X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=carlfw%2Fsrc%2Fwlan.c;h=b83e672287c0e971469b878ec124d695bf4d363e;hb=4dbc5363d8036af09f5d361001c3d9d3799dfca7;hp=26a2425f5afdd6e78c72ff484dab6378eb050739;hpb=b12493d10516555d86ec0be9d0a09973468ec04c;p=carl9170fw.git diff --git a/carlfw/src/wlan.c b/carlfw/src/wlan.c index 26a2425..b83e672 100644 --- a/carlfw/src/wlan.c +++ b/carlfw/src/wlan.c @@ -292,25 +292,12 @@ static void __wlan_tx(struct dma_desc *desc) 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) @@ -318,7 +305,7 @@ 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; } @@ -343,8 +330,6 @@ static void _wlan_tx(struct dma_desc *desc) get(AR9170_MAC_REG_AMPDU_FACTOR), 8 << super->s.ampdu_factor)); } - - __wlan_tx(desc); } /* propagate transmission status back to the driver */ @@ -366,6 +351,12 @@ static bool wlan_tx_status(struct dma_queue *queue, /* 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. @@ -410,7 +401,11 @@ static bool wlan_tx_status(struct dma_queue *queue, * 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; } @@ -420,7 +415,11 @@ static bool wlan_tx_status(struct dma_queue *queue, } } +#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, @@ -498,6 +497,7 @@ void __hot wlan_tx(struct dma_desc *desc) #endif /* CONFIG_CARL9170FW_CAB_QUEUE */ _wlan_tx(desc); + __wlan_tx(desc); wlan_trigger(BIT(super->s.queue)); } @@ -759,6 +759,7 @@ void wlan_cab_flush_queue(const unsigned int vif) /* ready to roll! */ _wlan_tx(desc); + __wlan_tx(desc); wlan_trigger(BIT(super->s.queue)); } }