X-Git-Url: https://jxself.org/git/?p=carl9170fw.git;a=blobdiff_plain;f=carlfw%2Fsrc%2Fwlan.c;h=9ef0ad8b1991cad358071c2b0946c47d31563381;hp=1f4afa3b618d147a7a7b9b493f85a86b5ae60a4c;hb=59c208a70905fc6376383aa1e7f4f7c6811c69b3;hpb=fa097d02ca1683946b2207c8ebf69538e8c3cb9c diff --git a/carlfw/src/wlan.c b/carlfw/src/wlan.c index 1f4afa3..9ef0ad8 100644 --- a/carlfw/src/wlan.c +++ b/carlfw/src/wlan.c @@ -44,32 +44,6 @@ static void wlan_txupdate(unsigned int queue) wlan_trigger(BIT(queue)); } -static void wlan_dma_bump(unsigned int qidx) -{ - unsigned int offset = qidx; - uint32_t status, trigger; - - status = get(AR9170_MAC_REG_DMA_STATUS) >> 12; - trigger = get(AR9170_MAC_REG_DMA_TRIGGER) >> 12; - - while (offset != 0) { - status >>= 4; - trigger >>= 4; - offset--; - } - - status &= 0xf; - trigger &= 0xf; - - if ((trigger == 0xa) && (status == 0x8)) { - DBG("UNSTUCK"); - wlan_txunstuck(qidx); - } else { - DBG("UPDATE"); - wlan_txupdate(qidx); - } -} - #ifdef CONFIG_CARL9170FW_DEBUG static void wlan_dump_queue(unsigned int qidx) { @@ -198,6 +172,7 @@ static bool wlan_tx_consume_retry(struct carl9170_tx_superframe *super) /* update MAC flags */ super->f.hdr.mac.erp_prot = super->s.ri[super->s.rix].erp_prot; + super->f.hdr.mac.ampdu = super->s.ri[super->s.rix].ampdu; /* reinitialize try counter */ super->s.cnt = 1; @@ -597,8 +572,6 @@ static void handle_rx(void) { struct dma_desc *desc; - wlan_check_rx_overrun(); - for_each_desc_not_bits(desc, &fw.wlan.rx_queue, AR9170_OWN_BITS_HW) { if (unlikely(desc->totalLen < 26 || desc->totalLen > CONFIG_CARL9170FW_RX_FRAME_LEN)) { @@ -857,6 +830,32 @@ void handle_wlan(void) #undef HANDLER } +static void wlan_dma_bump(unsigned int qidx) +{ + unsigned int offset = qidx; + uint32_t status, trigger; + + status = get(AR9170_MAC_REG_DMA_STATUS) >> 12; + trigger = get(AR9170_MAC_REG_DMA_TRIGGER) >> 12; + + while (offset != 0) { + status >>= 4; + trigger >>= 4; + offset--; + } + + status &= 0xf; + trigger &= 0xf; + + if ((trigger == 0xa) && (status == 0x8)) { + DBG("UNSTUCK"); + wlan_txunstuck(qidx); + } else { + DBG("UPDATE"); + wlan_txupdate(qidx); + } +} + static void wlan_check_hang(void) { struct dma_desc *desc;