1struct GTeth_desc
2{
3  unsigned ed_cmdsts;
4};
5struct GTeth_softc
6{
7  struct GTeth_desc txq_desc[32];
8  unsigned int txq_fi;
9  unsigned int txq_nactive;
10};
11
12void
13GTeth_txq_free (struct GTeth_softc *sc)
14{
15  struct GTeth_desc *txd = &sc->txq_desc[0];
16  txd->ed_cmdsts &= ~(1U << (31));
17}
18void
19GTeth_txq_done (struct GTeth_softc *sc)
20{
21  while (sc->txq_nactive > 0)
22    {
23      volatile struct GTeth_desc *txd = &sc->txq_desc[sc->txq_fi];
24      if (txd->ed_cmdsts)
25	{
26	  if (sc->txq_nactive == 1)
27	    return;
28	}
29      GTeth_txq_free (sc);
30    }
31}
32