diff options
-rw-r--r-- | sys/dev/pci/if_iwn.c | 20 | ||||
-rw-r--r-- | sys/dev/pci/if_wpi.c | 18 |
2 files changed, 23 insertions, 15 deletions
diff --git a/sys/dev/pci/if_iwn.c b/sys/dev/pci/if_iwn.c index 0ef0192f636..e23796555df 100644 --- a/sys/dev/pci/if_iwn.c +++ b/sys/dev/pci/if_iwn.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_iwn.c,v 1.10 2007/09/11 18:53:34 damien Exp $ */ +/* $OpenBSD: if_iwn.c,v 1.11 2007/11/03 13:10:29 damien Exp $ */ /*- * Copyright (c) 2007 @@ -803,9 +803,11 @@ iwn_media_change(struct ifnet *ifp) if (error != ENETRESET) return error; - if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING)) + if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == + (IFF_UP | IFF_RUNNING)) { + iwn_stop(ifp, 0); iwn_init(ifp); - + } return 0; } @@ -818,9 +820,6 @@ iwn_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg) timeout_del(&sc->calib_to); - if (ic->ic_state == IEEE80211_S_SCAN) - ic->ic_scan_lock = IEEE80211_SCAN_UNLOCKED; - switch (nstate) { case IEEE80211_S_SCAN: /* make the link LED blink while we're scanning */ @@ -2033,8 +2032,10 @@ iwn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) if (error == ENETRESET) { if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == - (IFF_UP | IFF_RUNNING)) + (IFF_UP | IFF_RUNNING)) { + iwn_stop(ifp, 0); iwn_init(ifp); + } error = 0; } @@ -3344,7 +3345,7 @@ iwn_post_alive(struct iwn_softc *sc) IWN_WRITE(sc, IWN_MEM_WDATA, 64); /* set sched. frame limit */ IWN_WRITE(sc, IWN_MEM_WADDR, base + IWN_QUEUE_OFFSET(qid) + 4); - IWN_WRITE(sc, IWN_MEM_WDATA, 10 << 16); + IWN_WRITE(sc, IWN_MEM_WDATA, 64 << 16); } /* enable interrupts for all 16 queues */ @@ -3577,6 +3578,9 @@ iwn_stop(struct ifnet *ifp, int disable) ifp->if_timer = sc->sc_tx_timer = 0; ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE); + /* in case we were scanning, release the scan "lock" */ + ic->ic_scan_lock = IEEE80211_SCAN_UNLOCKED; + ieee80211_new_state(ic, IEEE80211_S_INIT, -1); IWN_WRITE(sc, IWN_RESET, IWN_NEVO_RESET); diff --git a/sys/dev/pci/if_wpi.c b/sys/dev/pci/if_wpi.c index 842700696a2..1c795cde7ad 100644 --- a/sys/dev/pci/if_wpi.c +++ b/sys/dev/pci/if_wpi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_wpi.c,v 1.56 2007/09/11 18:52:32 damien Exp $ */ +/* $OpenBSD: if_wpi.c,v 1.57 2007/11/03 13:10:29 damien Exp $ */ /*- * Copyright (c) 2006, 2007 @@ -775,9 +775,11 @@ wpi_media_change(struct ifnet *ifp) if (error != ENETRESET) return error; - if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING)) + if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == + (IFF_UP | IFF_RUNNING)) { + wpi_stop(ifp, 0); wpi_init(ifp); - + } return 0; } @@ -791,9 +793,6 @@ wpi_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg) timeout_del(&sc->calib_to); - if (ic->ic_state == IEEE80211_S_SCAN) - ic->ic_scan_lock = IEEE80211_SCAN_UNLOCKED; - switch (nstate) { case IEEE80211_S_SCAN: /* make the link LED blink while we're scanning */ @@ -1912,8 +1911,10 @@ wpi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) if (error == ENETRESET) { if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == - (IFF_UP | IFF_RUNNING)) + (IFF_UP | IFF_RUNNING)) { + wpi_stop(ifp, 0); wpi_init(ifp); + } error = 0; } @@ -2906,6 +2907,9 @@ wpi_stop(struct ifnet *ifp, int disable) ifp->if_timer = sc->sc_tx_timer = 0; ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE); + /* in case we were scanning, release the scan "lock" */ + ic->ic_scan_lock = IEEE80211_SCAN_UNLOCKED; + ieee80211_new_state(ic, IEEE80211_S_INIT, -1); /* disable interrupts */ |