diff options
-rw-r--r-- | at76_usb.c | 37 |
1 files changed, 18 insertions, 19 deletions
@@ -1061,6 +1061,21 @@ static int at76_set_autorate_fallback(struct at76_priv *priv, int onoff) } +/* set network device type for the current mode */ +static void at76_set_monitor_mode(struct at76_priv *priv) +{ + if (priv->iw_mode == IW_MODE_MONITOR) { + at76_dbg(DBG_MONITOR_MODE, "%s: MONITOR MODE ON", + priv->netdev->name); + priv->netdev->type = ARPHRD_IEEE80211_RADIOTAP; + } else { + at76_dbg(DBG_MONITOR_MODE, "%s: MONITOR MODE OFF", + priv->netdev->name); + priv->netdev->type = ARPHRD_ETHER; + } +} + + static int at76_add_mac_address(struct at76_priv *priv, void *addr) { int ret = 0; @@ -4672,6 +4687,8 @@ static int at76_startup_device(struct at76_priv *priv) if ((ret = at76_set_iroaming(priv, priv->international_roaming)) < 0) return ret; + at76_set_monitor_mode(priv); + if (at76_debug & DBG_MIB) { at76_dump_mib_mac(priv); at76_dump_mib_mac_addr(priv); @@ -4686,23 +4703,6 @@ static int at76_startup_device(struct at76_priv *priv) } -/** - * set_monitor_mode - sets priv->netdev->type - */ -static void at76_set_monitor_mode(struct at76_priv *priv) -{ - if (priv->iw_mode == IW_MODE_MONITOR) { - at76_dbg(DBG_MONITOR_MODE, "%s: MONITOR MODE ON", - priv->netdev->name); - priv->netdev->type = ARPHRD_IEEE80211_RADIOTAP; - } else { - at76_dbg(DBG_MONITOR_MODE, "%s: MONITOR MODE OFF", - priv->netdev->name); - priv->netdev->type = ARPHRD_ETHER; - } -} - - static void at76_work_restart(struct work_struct *work) { struct at76_priv *priv = container_of(work, struct at76_priv, @@ -4711,10 +4711,9 @@ static void at76_work_restart(struct work_struct *work) mutex_lock(&priv->mtx); at76_startup_device(priv); - at76_set_monitor_mode(priv); - netif_carrier_off(priv->netdev); /* disable running netdev watchdog */ netif_stop_queue(priv->netdev); /* stop tx data packets */ + if (priv->iw_mode != IW_MODE_MONITOR) { priv->istate = SCANNING; schedule_work(&priv->work_scan); |