summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2007-11-23 05:57:20 +0000
committersam <sam@FreeBSD.org>2007-11-23 05:57:20 +0000
commit7af41a1053994ede0ace56908f5a4bb9f8c7355d (patch)
tree7047ae099595276db7cefbf22090fda3b25fd3b6 /sys/net80211
parent8e16a578b8ee061f8bed86feaa7418c249dadfe2 (diff)
downloadFreeBSD-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.c26
-rw-r--r--sys/net80211/ieee80211_var.h2
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 *);
OpenPOWER on IntegriCloud