1238106Sdesstruct GTeth_desc
2238106Sdes{
3238106Sdes  unsigned ed_cmdsts;
4238106Sdes};
5238106Sdesstruct GTeth_softc
6238106Sdes{
7238106Sdes  struct GTeth_desc txq_desc[32];
8238106Sdes  unsigned int txq_fi;
9238106Sdes  unsigned int txq_nactive;
10238106Sdes};
11238106Sdes
12238106Sdesvoid
13238106SdesGTeth_txq_free (struct GTeth_softc *sc)
14238106Sdes{
15238106Sdes  struct GTeth_desc *txd = &sc->txq_desc[0];
16238106Sdes  txd->ed_cmdsts &= ~(1U << (31));
17238106Sdes}
18238106Sdesvoid
19238106SdesGTeth_txq_done (struct GTeth_softc *sc)
20238106Sdes{
21238106Sdes  while (sc->txq_nactive > 0)
22238106Sdes    {
23238106Sdes      volatile struct GTeth_desc *txd = &sc->txq_desc[sc->txq_fi];
24269257Sdes      if (txd->ed_cmdsts)
25269257Sdes	{
26269257Sdes	  if (sc->txq_nactive == 1)
27269257Sdes	    return;
28269257Sdes	}
29269257Sdes      GTeth_txq_free (sc);
30269257Sdes    }
31269257Sdes}
32269257Sdes