aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--at76_usb.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/at76_usb.c b/at76_usb.c
index cf684ac..ab062d8 100644
--- a/at76_usb.c
+++ b/at76_usb.c
@@ -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);