From 2044616f8e46ab43a26fa3e1fe1ed2d138530d2c Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 16 Oct 2003 16:13:11 +0000 Subject: o correct handling of a frame that has too many segments to fit in the tx descriptor array o while here fix a whitespace nit Obtained from: NetBSD --- sys/dev/ath/if_ath.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'sys/dev/ath/if_ath.c') diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index ad419ea..6fc70a0 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -334,8 +334,8 @@ ath_detach(struct ath_softc *sc) ath_hal_detach(sc->sc_ah); ieee80211_ifdetach(ifp); - ATH_TXBUF_LOCK_DESTROY(sc); - ATH_TXQ_LOCK_DESTROY(sc); + ATH_TXBUF_LOCK_DESTROY(sc); + ATH_TXQ_LOCK_DESTROY(sc); return 0; } @@ -1765,7 +1765,10 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf error = bus_dmamap_load_mbuf(sc->sc_dmat, bf->bf_dmamap, m0, ath_mbuf_load_cb, bf, BUS_DMA_NOWAIT); - if (error != 0) { + if (error == EFBIG) { + /* XXX packet requires too many descriptors */ + bf->bf_nseg = ATH_TXDESC+1; + } else if (error != 0) { sc->sc_stats.ast_tx_busdma++; m_freem(m0); return error; -- cgit v1.1