Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/usb/wlan/if_zyd.c
Show First 20 Lines • Show All 2,217 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
static void | static void | ||||
zyd_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) | zyd_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) | ||||
{ | { | ||||
struct zyd_softc *sc = usbd_xfer_softc(xfer); | struct zyd_softc *sc = usbd_xfer_softc(xfer); | ||||
struct ieee80211com *ic = &sc->sc_ic; | struct ieee80211com *ic = &sc->sc_ic; | ||||
struct ieee80211_node *ni; | struct ieee80211_node *ni; | ||||
struct epoch_tracker et; | |||||
struct zyd_rx_desc desc; | struct zyd_rx_desc desc; | ||||
struct mbuf *m; | struct mbuf *m; | ||||
struct usb_page_cache *pc; | struct usb_page_cache *pc; | ||||
uint32_t offset; | uint32_t offset; | ||||
uint8_t rssi; | uint8_t rssi; | ||||
int8_t nf; | int8_t nf; | ||||
int i; | int i; | ||||
int actlen; | int actlen; | ||||
Show All 39 Lines | tr_setup: | ||||
usbd_transfer_submit(xfer); | usbd_transfer_submit(xfer); | ||||
/* | /* | ||||
* At the end of a USB callback it is always safe to unlock | * At the end of a USB callback it is always safe to unlock | ||||
* the private mutex of a device! That is why we do the | * the private mutex of a device! That is why we do the | ||||
* "ieee80211_input" here, and not some lines up! | * "ieee80211_input" here, and not some lines up! | ||||
*/ | */ | ||||
ZYD_UNLOCK(sc); | ZYD_UNLOCK(sc); | ||||
NET_EPOCH_ENTER(et); | |||||
for (i = 0; i < sc->sc_rx_count; i++) { | for (i = 0; i < sc->sc_rx_count; i++) { | ||||
rssi = sc->sc_rx_data[i].rssi; | rssi = sc->sc_rx_data[i].rssi; | ||||
m = sc->sc_rx_data[i].m; | m = sc->sc_rx_data[i].m; | ||||
sc->sc_rx_data[i].m = NULL; | sc->sc_rx_data[i].m = NULL; | ||||
nf = -95; /* XXX */ | nf = -95; /* XXX */ | ||||
ni = ieee80211_find_rxnode(ic, | ni = ieee80211_find_rxnode(ic, | ||||
mtod(m, struct ieee80211_frame_min *)); | mtod(m, struct ieee80211_frame_min *)); | ||||
if (ni != NULL) { | if (ni != NULL) { | ||||
(void)ieee80211_input(ni, m, rssi, nf); | (void)ieee80211_input(ni, m, rssi, nf); | ||||
ieee80211_free_node(ni); | ieee80211_free_node(ni); | ||||
} else | } else | ||||
(void)ieee80211_input_all(ic, m, rssi, nf); | (void)ieee80211_input_all(ic, m, rssi, nf); | ||||
} | } | ||||
NET_EPOCH_EXIT(et); | |||||
ZYD_LOCK(sc); | ZYD_LOCK(sc); | ||||
zyd_start(sc); | zyd_start(sc); | ||||
break; | break; | ||||
default: /* Error */ | default: /* Error */ | ||||
DPRINTF(sc, ZYD_DEBUG_ANY, "frame error: %s\n", usbd_errstr(error)); | DPRINTF(sc, ZYD_DEBUG_ANY, "frame error: %s\n", usbd_errstr(error)); | ||||
if (error != USB_ERR_CANCELLED) { | if (error != USB_ERR_CANCELLED) { | ||||
▲ Show 20 Lines • Show All 617 Lines • Show Last 20 Lines |