-static void skge_tx_done(struct skge_port *skge)
-{
- struct skge_ring *ring = &skge->tx_ring;
- struct skge_element *e, *last;
-
- spin_lock(&skge->tx_lock);
- last = ring->to_clean;
- for (e = ring->to_clean; e != ring->to_use; e = e->next) {
- struct skge_tx_desc *td = e->desc;
-
- if (td->control & BMU_OWN)
- break;
-
- if (td->control & BMU_EOF) {
- last = e->next;
- if (unlikely(netif_msg_tx_done(skge)))
- printk(KERN_DEBUG PFX "%s: tx done slot %td\n",
- skge->netdev->name, e - ring->start);
- }
- }
-
- skge_tx_complete(skge, last);
-
- skge_write8(skge->hw, Q_ADDR(txqaddr[skge->port], Q_CSR), CSR_IRQ_CL_F);
-
- if (skge_avail(&skge->tx_ring) > MAX_SKB_FRAGS + 1)
- netif_wake_queue(skge->netdev);
-
- spin_unlock(&skge->tx_lock);
-}