diff options
author | sam <sam@FreeBSD.org> | 2007-11-23 05:57:20 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2007-11-23 05:57:20 +0000 |
commit | 7af41a1053994ede0ace56908f5a4bb9f8c7355d (patch) | |
tree | 7047ae099595276db7cefbf22090fda3b25fd3b6 /sys/net80211 | |
parent | 8e16a578b8ee061f8bed86feaa7418c249dadfe2 (diff) | |
download | FreeBSD-src-7af41a1053994ede0ace56908f5a4bb9f8c7355d.zip FreeBSD-src-7af41a1053994ede0ace56908f5a4bb9f8c7355d.tar.gz |
add ieee80211_find_channel_byieee to lookup a channel by ieee channel #
Reviewed by: thompsa
MFC after: 1 week
Diffstat (limited to 'sys/net80211')
-rw-r--r-- | sys/net80211/ieee80211.c | 26 | ||||
-rw-r--r-- | sys/net80211/ieee80211_var.h | 2 |
2 files changed, 28 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c index 33b83d5..38acb54 100644 --- a/sys/net80211/ieee80211.c +++ b/sys/net80211/ieee80211.c @@ -440,6 +440,32 @@ ieee80211_find_channel(struct ieee80211com *ic, int freq, int flags) return NULL; } +/* + * Locate a channel given a channel number+flags. We cache + * the previous lookup to optimize switching between two + * channels--as happens with dynamic turbo. + */ +struct ieee80211_channel * +ieee80211_find_channel_byieee(struct ieee80211com *ic, int ieee, int flags) +{ + struct ieee80211_channel *c; + int i; + + flags &= IEEE80211_CHAN_ALLTURBO; + c = ic->ic_prevchan; + if (c != NULL && c->ic_ieee == ieee && + (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags) + return c; + /* brute force search */ + for (i = 0; i < ic->ic_nchans; i++) { + c = &ic->ic_channels[i]; + if (c->ic_ieee == ieee && + (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags) + return c; + } + return NULL; +} + static void addmedia(struct ieee80211com *ic, int mode, int mword) { diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h index cd84030..3171cef 100644 --- a/sys/net80211/ieee80211_var.h +++ b/sys/net80211/ieee80211_var.h @@ -422,6 +422,8 @@ int ieee80211_chan2ieee(struct ieee80211com *, u_int ieee80211_ieee2mhz(u_int, u_int); struct ieee80211_channel *ieee80211_find_channel(struct ieee80211com *, int freq, int flags); +struct ieee80211_channel *ieee80211_find_channel_byieee(struct ieee80211com *, + int ieee, int flags); int ieee80211_setmode(struct ieee80211com *, enum ieee80211_phymode); enum ieee80211_phymode ieee80211_chan2mode(const struct ieee80211_channel *); |