diff options
Diffstat (limited to 'sys/dev/ic/ar9003.c')
-rw-r--r-- | sys/dev/ic/ar9003.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/sys/dev/ic/ar9003.c b/sys/dev/ic/ar9003.c index 69ade5ade5a..ca4a71dbeaa 100644 --- a/sys/dev/ic/ar9003.c +++ b/sys/dev/ic/ar9003.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ar9003.c,v 1.48 2019/02/19 10:17:09 stsp Exp $ */ +/* $OpenBSD: ar9003.c,v 1.49 2019/09/12 12:55:06 stsp Exp $ */ /*- * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> @@ -83,7 +83,7 @@ void ar9003_reset_txsring(struct athn_softc *); void ar9003_rx_enable(struct athn_softc *); void ar9003_rx_radiotap(struct athn_softc *, struct mbuf *, struct ar_rx_status *); -int ar9003_rx_process(struct athn_softc *, int); +int ar9003_rx_process(struct athn_softc *, int, struct mbuf_list *); void ar9003_rx_intr(struct athn_softc *, int); int ar9003_tx_process(struct athn_softc *); void ar9003_tx_intr(struct athn_softc *); @@ -916,7 +916,7 @@ ar9003_rx_radiotap(struct athn_softc *sc, struct mbuf *m, #endif int -ar9003_rx_process(struct athn_softc *sc, int qid) +ar9003_rx_process(struct athn_softc *sc, int qid, struct mbuf_list *ml) { struct ieee80211com *ic = &sc->sc_ic; struct ifnet *ifp = &ic->ic_if; @@ -1036,7 +1036,7 @@ ar9003_rx_process(struct athn_softc *sc, int qid) rxi.rxi_flags = 0; /* XXX */ rxi.rxi_rssi = MS(ds->ds_status5, AR_RXS5_RSSI_COMBINED); rxi.rxi_tstamp = ds->ds_status3; - ieee80211_input(ifp, m, ni, &rxi); + ieee80211_inputm(ifp, m, ni, &rxi, ml); /* Node is no longer needed. */ ieee80211_release_node(ic, ni); @@ -1066,7 +1066,13 @@ ar9003_rx_process(struct athn_softc *sc, int qid) void ar9003_rx_intr(struct athn_softc *sc, int qid) { - while (ar9003_rx_process(sc, qid) == 0); + struct mbuf_list ml = MBUF_LIST_INITIALIZER(); + struct ieee80211com *ic = &sc->sc_ic; + struct ifnet *ifp = &ic->ic_if; + + while (ar9003_rx_process(sc, qid, &ml) == 0); + + if_input(ifp, &ml); } int |