1. 发送中断
1.1. DMA发送完数据后产生中断,调用 stmmac_interrupt服务程序
1.2. stmmac_interrupt 通过调用 stmmac_dma_interrupt 处理DMA相关中断(包括发送和接收)。在stmmac_dma_interrupt中,通过NAPI机制触发软中断,调用stmmac_poll处理相关事件。
1.3. stmmac_poll调用stmmac_tx_clean回收资源,以及queue操作
1)通过dma_unmap_single解除dma映射
dma_unmap_single(priv->device, tx_q->tx_skbuff_dma[entry].buf, tx_q->tx_skbuff_dma[entry].len, DMA_TO_DEVICE);
2)释放skb
dev_consume_skb_any(skb);
3)清空descriptor:des2和des3, 将其赋值0
release_tx_desc()
4)设置queue的状态 ,如果queue是停止状态(__QUEUE_STATE_STACK_XOFF 或 __QUEUE_STATE_DRV_XOFF被置位),但是现在已经满足开启条件,则唤醒queue。