Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/usb/wlan/if_uath.c
Show First 20 Lines • Show All 2,699 Lines • ▼ Show 20 Lines | |||||
static void | static void | ||||
uath_bulk_rx_callback(struct usb_xfer *xfer, usb_error_t error) | uath_bulk_rx_callback(struct usb_xfer *xfer, usb_error_t error) | ||||
{ | { | ||||
struct uath_softc *sc = usbd_xfer_softc(xfer); | struct uath_softc *sc = usbd_xfer_softc(xfer); | ||||
struct ieee80211com *ic = &sc->sc_ic; | struct ieee80211com *ic = &sc->sc_ic; | ||||
struct ieee80211_frame *wh; | struct ieee80211_frame *wh; | ||||
struct ieee80211_node *ni; | struct ieee80211_node *ni; | ||||
struct epoch_tracker et; | |||||
struct mbuf *m = NULL; | struct mbuf *m = NULL; | ||||
struct uath_data *data; | struct uath_data *data; | ||||
struct uath_rx_desc *desc = NULL; | struct uath_rx_desc *desc = NULL; | ||||
int8_t nf; | int8_t nf; | ||||
UATH_ASSERT_LOCKED(sc); | UATH_ASSERT_LOCKED(sc); | ||||
switch (USB_GET_STATE(xfer)) { | switch (USB_GET_STATE(xfer)) { | ||||
Show All 30 Lines | if (sc->sc_flags & UATH_FLAG_INVALID) { | ||||
return; | return; | ||||
} | } | ||||
UATH_UNLOCK(sc); | UATH_UNLOCK(sc); | ||||
if (m != NULL && desc != NULL) { | if (m != NULL && desc != NULL) { | ||||
wh = mtod(m, struct ieee80211_frame *); | wh = mtod(m, struct ieee80211_frame *); | ||||
ni = ieee80211_find_rxnode(ic, | ni = ieee80211_find_rxnode(ic, | ||||
(struct ieee80211_frame_min *)wh); | (struct ieee80211_frame_min *)wh); | ||||
nf = -95; /* XXX */ | nf = -95; /* XXX */ | ||||
NET_EPOCH_ENTER(et); | |||||
if (ni != NULL) { | if (ni != NULL) { | ||||
(void) ieee80211_input(ni, m, | (void) ieee80211_input(ni, m, | ||||
(int)be32toh(desc->rssi), nf); | (int)be32toh(desc->rssi), nf); | ||||
/* node is no longer needed */ | /* node is no longer needed */ | ||||
ieee80211_free_node(ni); | ieee80211_free_node(ni); | ||||
} else | } else | ||||
(void) ieee80211_input_all(ic, m, | (void) ieee80211_input_all(ic, m, | ||||
(int)be32toh(desc->rssi), nf); | (int)be32toh(desc->rssi), nf); | ||||
NET_EPOCH_EXIT(et); | |||||
m = NULL; | m = NULL; | ||||
desc = NULL; | desc = NULL; | ||||
} | } | ||||
UATH_LOCK(sc); | UATH_LOCK(sc); | ||||
uath_start(sc); | uath_start(sc); | ||||
break; | break; | ||||
default: | default: | ||||
/* needs it to the inactive queue due to a error. */ | /* needs it to the inactive queue due to a error. */ | ||||
▲ Show 20 Lines • Show All 106 Lines • Show Last 20 Lines |