[PATCH v2 8/9] Enable TX done IRQs
Pontus Fuchs
pontus.fuchs at gmail.com
Thu May 30 04:12:34 EDT 2013
Generate a TX done IRQ when TX transfer is done.
Signed-off-by: Pontus Fuchs <pontus.fuchs at gmail.com>
---
dxe.c | 33 ++++++++++++++++++++++++++++++++-
dxe.h | 4 ++--
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/dxe.c b/dxe.c
index 046bea4..adcd700 100644
--- a/dxe.c
+++ b/dxe.c
@@ -273,6 +273,38 @@ static void wcn36xx_dxe_ch_free_skbs(struct wcn36xx *wcn,
static irqreturn_t wcn36xx_irq_tx_complete(int irq, void *dev)
{
+ struct wcn36xx *wcn = (struct wcn36xx *)dev;
+ int int_src, int_reason;
+
+ wcn36xx_dxe_read_register(wcn, WCN36XX_DXE_INT_SRC_RAW_REG, &int_src);
+
+ if (int_src & WCN36XX_INT_MASK_CHAN_TX_H) {
+ wcn36xx_dxe_read_register(wcn,
+ WCN36XX_DXE_CH_STATUS_REG_ADDR_TX_H,
+ &int_reason);
+
+ wcn36xx_dxe_write_register(wcn,
+ WCN36XX_DXE_0_INT_CLR,
+ WCN36XX_INT_MASK_CHAN_TX_H);
+
+ wcn36xx_dxe_write_register(wcn, WCN36XX_DXE_0_INT_ED_CLR,
+ WCN36XX_INT_MASK_CHAN_TX_H);
+ wcn36xx_dbg(WCN36XX_DBG_DXE, "dxe tx ready high");
+ }
+ if (int_src & WCN36XX_INT_MASK_CHAN_TX_L) {
+ wcn36xx_dxe_read_register(wcn,
+ WCN36XX_DXE_CH_STATUS_REG_ADDR_TX_L,
+ &int_reason);
+
+ wcn36xx_dxe_write_register(wcn,
+ WCN36XX_DXE_0_INT_CLR,
+ WCN36XX_INT_MASK_CHAN_TX_L);
+
+ wcn36xx_dxe_write_register(wcn, WCN36XX_DXE_0_INT_ED_CLR,
+ WCN36XX_INT_MASK_CHAN_TX_L);
+ wcn36xx_dbg(WCN36XX_DBG_DXE, "dxe tx ready low");
+ }
+
return IRQ_HANDLED;
}
@@ -300,7 +332,6 @@ static int wcn36xx_dxe_request_irqs(struct wcn36xx *wcn)
wcn36xx_error("failed to alloc rx irq");
goto out_txirq;
}
- disable_irq_nosync(wcn->tx_irq);
enable_irq_wake(wcn->rx_irq);
return 0;
diff --git a/dxe.h b/dxe.h
index b93f13a..61a46de 100644
--- a/dxe.h
+++ b/dxe.h
@@ -39,9 +39,9 @@ H2H_TEST_RX_TX = DMA2
#define WCN36XX_DXE_CTRL_RX_L 0x12ad2f
#define WCN36XX_DXE_CTRL_RX_H 0x12d12f
#define WCN36XX_DXE_CTRL_TX_H_BD 0x32ce45
-#define WCN36XX_DXE_CTRL_TX_H_SKB 0x32ce4d
+#define WCN36XX_DXE_CTRL_TX_H_SKB 0x33ce4d
#define WCN36XX_DXE_CTRL_TX_L_BD 0x328a45
-#define WCN36XX_DXE_CTRL_TX_L_SKB 0x328a4d
+#define WCN36XX_DXE_CTRL_TX_L_SKB 0x338a4d
// TODO This must calculated properly but not hardcoded
#define WCN36XX_DXE_WQ_TX_L 0x17
--
1.8.1.2
More information about the wcn36xx
mailing list