Date: Tue, 17 May 2005 23:34:40 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 77114 for review Message-ID: <200505172334.j4HNYe5d060785@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=77114 Change 77114 by sam@sam_ebb on 2005/05/17 23:34:12 Synchronize wme and dynamic turbo state for multiple vap's by marking ic_flags with the intersection of all vap's. This permits drivers to check ic_flags to see if wme/dturbo should be setup. Affected files ... .. //depot/projects/vap/sys/net80211/ieee80211.c#10 edit .. //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#10 edit .. //depot/projects/vap/sys/net80211/ieee80211_var.h#11 edit Differences ... ==== //depot/projects/vap/sys/net80211/ieee80211.c#10 (text+ko) ==== @@ -329,6 +329,8 @@ IEEE80211_LOCK(ic); TAILQ_INSERT_TAIL(&ic->ic_vaps, vap, iv_next); + ieee80211_syncflag(ic, IEEE80211_F_WME); + ieee80211_syncflag(ic, IEEE80211_F_TURBOP); IEEE80211_UNLOCK(ic); return 1; @@ -347,6 +349,8 @@ TAILQ_REMOVE(&ic->ic_vaps, vap, iv_next); if (TAILQ_EMPTY(&ic->ic_vaps)) /* reset to supported mode */ ic->ic_opmode = IEEE80211_M_STA; + ieee80211_syncflag(ic, IEEE80211_F_WME); + ieee80211_syncflag(ic, IEEE80211_F_TURBOP); IEEE80211_UNLOCK(ic); ifmedia_removeall(&vap->iv_media); @@ -363,6 +367,23 @@ ieee80211_node_vdetach(vap); } +void +ieee80211_syncflag(struct ieee80211com *ic, int flag) +{ + struct ieee80211vap *vap; + int bit; + + bit = 1; + /* XXX locking */ + TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) + if ((vap->iv_flags & flag) == 0) + bit = 0; + if (bit) + ic->ic_flags |= flag; + else + ic->ic_flags &= ~flag; +} + /* * Convert MHz frequency to IEEE channel number. */ ==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#10 (text+ko) ==== @@ -1620,6 +1620,7 @@ vap->iv_flags |= IEEE80211_F_WME; } else vap->iv_flags &= ~IEEE80211_F_WME; + ieee80211_syncflag(ic, IEEE80211_F_WME); error = ENETRESET; /* XXX maybe not for station? */ break; case IEEE80211_IOC_HIDESSID: @@ -1716,6 +1717,8 @@ error = ieee80211_ioctl_setchanlist(vap, ireq); break; case IEEE80211_IOC_SCAN_REQ: + IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, + "%s: active scan request\n", __func__); error = ieee80211_start_scan(vap, IEEE80211_SCAN_ACTIVE | IEEE80211_SCAN_NOPICK | @@ -1777,6 +1780,7 @@ vap->iv_flags |= IEEE80211_F_TURBOP; } else vap->iv_flags &= ~IEEE80211_F_TURBOP; + ieee80211_syncflag(ic, IEEE80211_F_TURBOP); error = ENETRESET; /* XXX maybe not for station? */ break; case IEEE80211_IOC_BGSCAN: ==== //depot/projects/vap/sys/net80211/ieee80211_var.h#11 (text+ko) ==== @@ -391,6 +391,7 @@ int ieee80211_rate2media(struct ieee80211com *, int, enum ieee80211_phymode); int ieee80211_media2rate(int); +void ieee80211_syncflag(struct ieee80211com *, int); u_int ieee80211_mhz2ieee(u_int, u_int); u_int ieee80211_chan2ieee(struct ieee80211com *, const struct ieee80211_channel *);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200505172334.j4HNYe5d060785>