struct GTeth_desc | |
{ | |
unsigned ed_cmdsts; | |
}; | |
struct GTeth_softc | |
{ | |
struct GTeth_desc txq_desc[32]; | |
unsigned int txq_fi; | |
unsigned int txq_nactive; | |
}; | |
void | |
GTeth_txq_free (struct GTeth_softc *sc) | |
{ | |
struct GTeth_desc *txd = &sc->txq_desc[0]; | |
txd->ed_cmdsts &= ~(1U << (31)); | |
} | |
void | |
GTeth_txq_done (struct GTeth_softc *sc) | |
{ | |
while (sc->txq_nactive > 0) | |
{ | |
volatile struct GTeth_desc *txd = &sc->txq_desc[sc->txq_fi]; | |
if (txd->ed_cmdsts) | |
{ | |
if (sc->txq_nactive == 1) | |
return; | |
} | |
GTeth_txq_free (sc); | |
} | |
} |