svn commit: r210114 - head/sys/dev/iwn
Bernhard Schmidt
bschmidt at FreeBSD.org
Thu Jul 15 11:52:21 UTC 2010
Author: bschmidt
Date: Thu Jul 15 11:52:20 2010
New Revision: 210114
URL: http://svn.freebsd.org/changeset/base/210114
Log:
Handle RUN->ASSOC->RUN transition correctly, as in not trigger a
firmware error. Convert if statements to a switch statement while
I'm here.
Tested by: Benjamin Kaduk <kaduk at mit.edu>
MFC after: 2 weeks
Modified:
head/sys/dev/iwn/if_iwn.c
Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c Thu Jul 15 11:26:07 2010 (r210113)
+++ head/sys/dev/iwn/if_iwn.c Thu Jul 15 11:52:20 2010 (r210114)
@@ -1940,27 +1940,44 @@ iwn_newstate(struct ieee80211vap *vap, e
IWN_LOCK(sc);
callout_stop(&sc->sc_timer_to);
- if (nstate == IEEE80211_S_AUTH && vap->iv_state != IEEE80211_S_AUTH) {
- /* !AUTH -> AUTH requires adapter config */
- /* Reset state to handle reassociations correctly. */
+ switch (nstate) {
+ case IEEE80211_S_ASSOC:
+ if (vap->iv_state != IEEE80211_S_RUN)
+ break;
+ /* FALLTHROUGH */
+ case IEEE80211_S_AUTH:
+ if (vap->iv_state == IEEE80211_S_AUTH)
+ break;
+
+ /*
+ * !AUTH -> AUTH transition requires state reset to handle
+ * reassociations correctly.
+ */
sc->rxon.associd = 0;
sc->rxon.filter &= ~htole32(IWN_FILTER_BSS);
iwn_calib_reset(sc);
error = iwn_auth(sc, vap);
- }
- if (nstate == IEEE80211_S_RUN && vap->iv_state != IEEE80211_S_RUN) {
+ break;
+
+ case IEEE80211_S_RUN:
+ /*
+ * RUN -> RUN transition; Just restart the timers.
+ */
+ if (vap->iv_state == IEEE80211_S_RUN) {
+ iwn_calib_reset(sc);
+ break;
+ }
+
/*
* !RUN -> RUN requires setting the association id
* which is done with a firmware cmd. We also defer
* starting the timers until that work is done.
*/
error = iwn_run(sc, vap);
- }
- if (nstate == IEEE80211_S_RUN) {
- /*
- * RUN -> RUN transition; just restart the timers.
- */
- iwn_calib_reset(sc);
+ break;
+
+ default:
+ break;
}
IWN_UNLOCK(sc);
IEEE80211_LOCK(ic);
More information about the svn-src-all
mailing list