[PATCH] Release RX descriptor after each frame

Eugene Krasnikov k.eugene.e at gmail.com
Fri Apr 26 11:12:46 EDT 2013


From: Eugene Krasnikov <k.eugene.e at gmail.com>

After each RX frame so HW can use it again. Otherwise RX buffer
will be full and HW stops sending frames to the host.

Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
 dxe.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/dxe.c b/dxe.c
index c61bf92..6edd695 100644
--- a/dxe.c
+++ b/dxe.c
@@ -281,12 +281,20 @@ void wcn36xx_rx_ready_work(struct work_struct *work)
 	wcn36xx_dxe_write_register(wcn, 0x202034, 0x8);
 	cur_dxe_ctl = wcn->dxe_rx_h_ch.head_blk_ctl;
 	cur_dxe_desc = cur_dxe_ctl->desc;
+	wcn36xx_dbg("wcn36xx_rx_ready_work: order=%d ctl=%x", cur_dxe_ctl->ctl_blk_order, cur_dxe_desc->desc_ctl.ctrl);
+
 
 	dma_unmap_single( NULL,
 		(dma_addr_t)cur_dxe_desc->desc.dst_addr_l,
 		cur_dxe_ctl->skb->len,
 		DMA_FROM_DEVICE );
 	wcn36xx_rx_skb(wcn, cur_dxe_ctl->skb);
+
+	// Release RX descriptor
+	cur_dxe_desc->desc_ctl.ctrl = WCN36XX_DXE_CTRL_RX_H;
+	wcn36xx_dxe_write_register(wcn, 0x202004, 0x8);
+	wcn36xx_dxe_write_register(wcn, 0x202440, 0x847ead2f);
+
 	wcn->dxe_rx_h_ch.head_blk_ctl = cur_dxe_ctl->next;
 
 	enable_irq(wcn->rx_irq);
-- 
1.7.11.3




More information about the wcn36xx mailing list