|
Lines 644-660
Link Here
|
| 644 |
rum_tx_free(struct rum_tx_data *data, int txerr) |
644 |
rum_tx_free(struct rum_tx_data *data, int txerr) |
| 645 |
{ |
645 |
{ |
| 646 |
struct rum_softc *sc = data->sc; |
646 |
struct rum_softc *sc = data->sc; |
|
|
647 |
struct mbuf *m; |
| 648 |
struct ieee80211_node *ni; |
| 647 |
|
649 |
|
| 648 |
if (data->m != NULL) { |
650 |
m = data->m, data->m = NULL; |
| 649 |
if (data->m->m_flags & M_TXCB) |
651 |
ni = data->ni, data->ni = NULL; |
| 650 |
ieee80211_process_callback(data->ni, data->m, |
|
|
| 651 |
txerr ? ETIMEDOUT : 0); |
| 652 |
m_freem(data->m); |
| 653 |
data->m = NULL; |
| 654 |
|
652 |
|
| 655 |
ieee80211_free_node(data->ni); |
653 |
if (m != NULL) |
| 656 |
data->ni = NULL; |
654 |
ieee80211_tx_complete(ni, m, txerr ? ETIMEDOUT : 0); |
| 657 |
} |
655 |
|
| 658 |
STAILQ_INSERT_TAIL(&sc->tx_free, data, next); |
656 |
STAILQ_INSERT_TAIL(&sc->tx_free, data, next); |
| 659 |
sc->tx_nfree++; |
657 |
sc->tx_nfree++; |
| 660 |
} |
658 |
} |