aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/airo.c25
-rw-r--r--drivers/net/wireless/atmel.c20
-rw-r--r--drivers/net/wireless/orinoco/orinoco.c33
-rw-r--r--drivers/net/wireless/rndis_wlan.c13
-rw-r--r--drivers/net/wireless/wl3501_cs.c9
-rw-r--r--drivers/net/wireless/zd1201.c7
-rw-r--r--include/linux/ieee80211.h116
7 files changed, 155 insertions, 68 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index fc4322ca669f..2ff588bb0a7c 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -1070,10 +1070,6 @@ static WifiCtlHdr wifictlhdr8023 = {
1070 } 1070 }
1071}; 1071};
1072 1072
1073// Frequency list (map channels to frequencies)
1074static const long frequency_list[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442,
1075 2447, 2452, 2457, 2462, 2467, 2472, 2484 };
1076
1077// A few details needed for WEP (Wireless Equivalent Privacy) 1073// A few details needed for WEP (Wireless Equivalent Privacy)
1078#define MAX_KEY_SIZE 13 // 128 (?) bits 1074#define MAX_KEY_SIZE 13 // 128 (?) bits
1079#define MIN_KEY_SIZE 5 // 40 bits RC4 - WEP 1075#define MIN_KEY_SIZE 5 // 40 bits RC4 - WEP
@@ -5725,16 +5721,12 @@ static int airo_set_freq(struct net_device *dev,
5725 int rc = -EINPROGRESS; /* Call commit handler */ 5721 int rc = -EINPROGRESS; /* Call commit handler */
5726 5722
5727 /* If setting by frequency, convert to a channel */ 5723 /* If setting by frequency, convert to a channel */
5728 if((fwrq->e == 1) && 5724 if(fwrq->e == 1) {
5729 (fwrq->m >= (int) 2.412e8) &&
5730 (fwrq->m <= (int) 2.487e8)) {
5731 int f = fwrq->m / 100000; 5725 int f = fwrq->m / 100000;
5732 int c = 0; 5726
5733 while((c < 14) && (f != frequency_list[c]))
5734 c++;
5735 /* Hack to fall through... */ 5727 /* Hack to fall through... */
5736 fwrq->e = 0; 5728 fwrq->e = 0;
5737 fwrq->m = c + 1; 5729 fwrq->m = ieee80211_freq_to_dsss_chan(f);
5738 } 5730 }
5739 /* Setting by channel number */ 5731 /* Setting by channel number */
5740 if((fwrq->m > 1000) || (fwrq->e > 0)) 5732 if((fwrq->m > 1000) || (fwrq->e > 0))
@@ -5778,7 +5770,7 @@ static int airo_get_freq(struct net_device *dev,
5778 5770
5779 ch = le16_to_cpu(status_rid.channel); 5771 ch = le16_to_cpu(status_rid.channel);
5780 if((ch > 0) && (ch < 15)) { 5772 if((ch > 0) && (ch < 15)) {
5781 fwrq->m = frequency_list[ch - 1] * 100000; 5773 fwrq->m = ieee80211_dsss_chan_to_freq(ch) * 100000;
5782 fwrq->e = 1; 5774 fwrq->e = 1;
5783 } else { 5775 } else {
5784 fwrq->m = ch; 5776 fwrq->m = ch;
@@ -6795,8 +6787,8 @@ static int airo_get_range(struct net_device *dev,
6795 k = 0; 6787 k = 0;
6796 for(i = 0; i < 14; i++) { 6788 for(i = 0; i < 14; i++) {
6797 range->freq[k].i = i + 1; /* List index */ 6789 range->freq[k].i = i + 1; /* List index */
6798 range->freq[k].m = frequency_list[i] * 100000; 6790 range->freq[k].m = ieee80211_dsss_chan_to_freq(i + 1) * 100000;
6799 range->freq[k++].e = 1; /* Values in table in MHz -> * 10^5 * 10 */ 6791 range->freq[k++].e = 1; /* Values in MHz -> * 10^5 * 10 */
6800 } 6792 }
6801 range->num_frequency = k; 6793 range->num_frequency = k;
6802 6794
@@ -7189,10 +7181,7 @@ static inline char *airo_translate_scan(struct net_device *dev,
7189 /* Add frequency */ 7181 /* Add frequency */
7190 iwe.cmd = SIOCGIWFREQ; 7182 iwe.cmd = SIOCGIWFREQ;
7191 iwe.u.freq.m = le16_to_cpu(bss->dsChannel); 7183 iwe.u.freq.m = le16_to_cpu(bss->dsChannel);
7192 /* iwe.u.freq.m containt the channel (starting 1), our 7184 iwe.u.freq.m = ieee80211_dsss_chan_to_freq(iwe.u.freq.m) * 100000;
7193 * frequency_list array start at index 0...
7194 */
7195 iwe.u.freq.m = frequency_list[iwe.u.freq.m - 1] * 100000;
7196 iwe.u.freq.e = 1; 7185 iwe.u.freq.e = 1;
7197 current_ev = iwe_stream_add_event(info, current_ev, end_buf, 7186 current_ev = iwe_stream_add_event(info, current_ev, end_buf,
7198 &iwe, IW_EV_FREQ_LEN); 7187 &iwe, IW_EV_FREQ_LEN);
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c
index 4223672c4432..91930a2c3c6b 100644
--- a/drivers/net/wireless/atmel.c
+++ b/drivers/net/wireless/atmel.c
@@ -2204,9 +2204,6 @@ static int atmel_get_frag(struct net_device *dev,
2204 return 0; 2204 return 0;
2205} 2205}
2206 2206
2207static const long frequency_list[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442,
2208 2447, 2452, 2457, 2462, 2467, 2472, 2484 };
2209
2210static int atmel_set_freq(struct net_device *dev, 2207static int atmel_set_freq(struct net_device *dev,
2211 struct iw_request_info *info, 2208 struct iw_request_info *info,
2212 struct iw_freq *fwrq, 2209 struct iw_freq *fwrq,
@@ -2216,16 +2213,12 @@ static int atmel_set_freq(struct net_device *dev,
2216 int rc = -EINPROGRESS; /* Call commit handler */ 2213 int rc = -EINPROGRESS; /* Call commit handler */
2217 2214
2218 /* If setting by frequency, convert to a channel */ 2215 /* If setting by frequency, convert to a channel */
2219 if ((fwrq->e == 1) && 2216 if (fwrq->e == 1) {
2220 (fwrq->m >= (int) 241200000) &&
2221 (fwrq->m <= (int) 248700000)) {
2222 int f = fwrq->m / 100000; 2217 int f = fwrq->m / 100000;
2223 int c = 0; 2218
2224 while ((c < 14) && (f != frequency_list[c]))
2225 c++;
2226 /* Hack to fall through... */ 2219 /* Hack to fall through... */
2227 fwrq->e = 0; 2220 fwrq->e = 0;
2228 fwrq->m = c + 1; 2221 fwrq->m = ieee80211_freq_to_dsss_chan(f);
2229 } 2222 }
2230 /* Setting by channel number */ 2223 /* Setting by channel number */
2231 if ((fwrq->m > 1000) || (fwrq->e > 0)) 2224 if ((fwrq->m > 1000) || (fwrq->e > 0))
@@ -2384,8 +2377,11 @@ static int atmel_get_range(struct net_device *dev,
2384 if (range->num_channels != 0) { 2377 if (range->num_channels != 0) {
2385 for (k = 0, i = channel_table[j].min; i <= channel_table[j].max; i++) { 2378 for (k = 0, i = channel_table[j].min; i <= channel_table[j].max; i++) {
2386 range->freq[k].i = i; /* List index */ 2379 range->freq[k].i = i; /* List index */
2387 range->freq[k].m = frequency_list[i - 1] * 100000; 2380
2388 range->freq[k++].e = 1; /* Values in table in MHz -> * 10^5 * 10 */ 2381 /* Values in MHz -> * 10^5 * 10 */
2382 range->freq[k].m = (ieee80211_dsss_chan_to_freq(i) *
2383 100000);
2384 range->freq[k++].e = 1;
2389 } 2385 }
2390 range->num_frequency = k; 2386 range->num_frequency = k;
2391 } 2387 }
diff --git a/drivers/net/wireless/orinoco/orinoco.c b/drivers/net/wireless/orinoco/orinoco.c
index 45a04faa7818..beb4d1f8c184 100644
--- a/drivers/net/wireless/orinoco/orinoco.c
+++ b/drivers/net/wireless/orinoco/orinoco.c
@@ -178,12 +178,7 @@ static const struct ethtool_ops orinoco_ethtool_ops;
178/* Data tables */ 178/* Data tables */
179/********************************************************************/ 179/********************************************************************/
180 180
181/* The frequency of each channel in MHz */ 181#define NUM_CHANNELS 14
182static const long channel_frequency[] = {
183 2412, 2417, 2422, 2427, 2432, 2437, 2442,
184 2447, 2452, 2457, 2462, 2467, 2472, 2484
185};
186#define NUM_CHANNELS ARRAY_SIZE(channel_frequency)
187 182
188/* This tables gives the actual meanings of the bitrate IDs returned 183/* This tables gives the actual meanings of the bitrate IDs returned
189 * by the firmware. */ 184 * by the firmware. */
@@ -3742,13 +3737,13 @@ static int orinoco_hw_get_essid(struct orinoco_private *priv, int *active,
3742 return err; 3737 return err;
3743} 3738}
3744 3739
3745static long orinoco_hw_get_freq(struct orinoco_private *priv) 3740static int orinoco_hw_get_freq(struct orinoco_private *priv)
3746{ 3741{
3747 3742
3748 hermes_t *hw = &priv->hw; 3743 hermes_t *hw = &priv->hw;
3749 int err = 0; 3744 int err = 0;
3750 u16 channel; 3745 u16 channel;
3751 long freq = 0; 3746 int freq = 0;
3752 unsigned long flags; 3747 unsigned long flags;
3753 3748
3754 if (orinoco_lock(priv, &flags) != 0) 3749 if (orinoco_lock(priv, &flags) != 0)
@@ -3771,7 +3766,7 @@ static long orinoco_hw_get_freq(struct orinoco_private *priv)
3771 goto out; 3766 goto out;
3772 3767
3773 } 3768 }
3774 freq = channel_frequency[channel-1] * 100000; 3769 freq = ieee80211_dsss_chan_to_freq(channel);
3775 3770
3776 out: 3771 out:
3777 orinoco_unlock(priv, &flags); 3772 orinoco_unlock(priv, &flags);
@@ -3998,7 +3993,8 @@ static int orinoco_ioctl_getiwrange(struct net_device *dev,
3998 for (i = 0; i < NUM_CHANNELS; i++) { 3993 for (i = 0; i < NUM_CHANNELS; i++) {
3999 if (priv->channel_mask & (1 << i)) { 3994 if (priv->channel_mask & (1 << i)) {
4000 range->freq[k].i = i + 1; 3995 range->freq[k].i = i + 1;
4001 range->freq[k].m = channel_frequency[i] * 100000; 3996 range->freq[k].m = (ieee80211_dsss_chan_to_freq(i + 1) *
3997 100000);
4002 range->freq[k].e = 1; 3998 range->freq[k].e = 1;
4003 k++; 3999 k++;
4004 } 4000 }
@@ -4346,16 +4342,15 @@ static int orinoco_ioctl_setfreq(struct net_device *dev,
4346 /* Setting by channel number */ 4342 /* Setting by channel number */
4347 chan = frq->m; 4343 chan = frq->m;
4348 } else { 4344 } else {
4349 /* Setting by frequency - search the table */ 4345 /* Setting by frequency */
4350 int mult = 1; 4346 int denom = 1;
4351 int i; 4347 int i;
4352 4348
4349 /* Calculate denominator to rescale to MHz */
4353 for (i = 0; i < (6 - frq->e); i++) 4350 for (i = 0; i < (6 - frq->e); i++)
4354 mult *= 10; 4351 denom *= 10;
4355 4352
4356 for (i = 0; i < NUM_CHANNELS; i++) 4353 chan = ieee80211_freq_to_dsss_chan(frq->m / denom);
4357 if (frq->m == (channel_frequency[i] * mult))
4358 chan = i+1;
4359 } 4354 }
4360 4355
4361 if ( (chan < 1) || (chan > NUM_CHANNELS) || 4356 if ( (chan < 1) || (chan > NUM_CHANNELS) ||
@@ -4392,7 +4387,7 @@ static int orinoco_ioctl_getfreq(struct net_device *dev,
4392 return tmp; 4387 return tmp;
4393 } 4388 }
4394 4389
4395 frq->m = tmp; 4390 frq->m = tmp * 100000;
4396 frq->e = 1; 4391 frq->e = 1;
4397 4392
4398 return 0; 4393 return 0;
@@ -5609,7 +5604,7 @@ static inline char *orinoco_translate_scan(struct net_device *dev,
5609 current_ev = iwe_stream_add_event(info, current_ev, end_buf, 5604 current_ev = iwe_stream_add_event(info, current_ev, end_buf,
5610 &iwe, IW_EV_FREQ_LEN); 5605 &iwe, IW_EV_FREQ_LEN);
5611 5606
5612 iwe.u.freq.m = channel_frequency[channel-1] * 100000; 5607 iwe.u.freq.m = ieee80211_dsss_chan_to_freq(channel) * 100000;
5613 iwe.u.freq.e = 1; 5608 iwe.u.freq.e = 1;
5614 current_ev = iwe_stream_add_event(info, current_ev, end_buf, 5609 current_ev = iwe_stream_add_event(info, current_ev, end_buf,
5615 &iwe, IW_EV_FREQ_LEN); 5610 &iwe, IW_EV_FREQ_LEN);
@@ -5760,7 +5755,7 @@ static inline char *orinoco_translate_ext_scan(struct net_device *dev,
5760 current_ev = iwe_stream_add_event(info, current_ev, end_buf, 5755 current_ev = iwe_stream_add_event(info, current_ev, end_buf,
5761 &iwe, IW_EV_FREQ_LEN); 5756 &iwe, IW_EV_FREQ_LEN);
5762 5757
5763 iwe.u.freq.m = channel_frequency[channel-1] * 100000; 5758 iwe.u.freq.m = ieee80211_dsss_chan_to_freq(channel) * 100000;
5764 iwe.u.freq.e = 1; 5759 iwe.u.freq.e = 1;
5765 current_ev = iwe_stream_add_event(info, current_ev, end_buf, 5760 current_ev = iwe_stream_add_event(info, current_ev, end_buf,
5766 &iwe, IW_EV_FREQ_LEN); 5761 &iwe, IW_EV_FREQ_LEN);
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index ed93ac41297f..105f214e21f4 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -369,9 +369,6 @@ struct rndis_wext_private {
369}; 369};
370 370
371 371
372static const int freq_chan[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442,
373 2447, 2452, 2457, 2462, 2467, 2472, 2484 };
374
375static const int rates_80211g[8] = { 6, 9, 12, 18, 24, 36, 48, 54 }; 372static const int rates_80211g[8] = { 6, 9, 12, 18, 24, 36, 48, 54 };
376 373
377static const int bcm4320_power_output[4] = { 25, 50, 75, 100 }; 374static const int bcm4320_power_output[4] = { 25, 50, 75, 100 };
@@ -640,8 +637,8 @@ static void dsconfig_to_freq(unsigned int dsconfig, struct iw_freq *freq)
640static int freq_to_dsconfig(struct iw_freq *freq, unsigned int *dsconfig) 637static int freq_to_dsconfig(struct iw_freq *freq, unsigned int *dsconfig)
641{ 638{
642 if (freq->m < 1000 && freq->e == 0) { 639 if (freq->m < 1000 && freq->e == 0) {
643 if (freq->m >= 1 && freq->m <= ARRAY_SIZE(freq_chan)) 640 if (freq->m >= 1 && freq->m <= 14)
644 *dsconfig = freq_chan[freq->m - 1] * 1000; 641 *dsconfig = ieee80211_dsss_chan_to_freq(freq->m) * 1000;
645 else 642 else
646 return -1; 643 return -1;
647 } else { 644 } else {
@@ -1178,11 +1175,11 @@ static int rndis_iw_get_range(struct net_device *dev,
1178 range->throughput = 11 * 1000 * 1000 / 2; 1175 range->throughput = 11 * 1000 * 1000 / 2;
1179 } 1176 }
1180 1177
1181 range->num_channels = ARRAY_SIZE(freq_chan); 1178 range->num_channels = 14;
1182 1179
1183 for (i = 0; i < ARRAY_SIZE(freq_chan) && i < IW_MAX_FREQUENCIES; i++) { 1180 for (i = 0; (i < 14) && (i < IW_MAX_FREQUENCIES); i++) {
1184 range->freq[i].i = i + 1; 1181 range->freq[i].i = i + 1;
1185 range->freq[i].m = freq_chan[i] * 100000; 1182 range->freq[i].m = ieee80211_dsss_chan_to_freq(i + 1) * 100000;
1186 range->freq[i].e = 1; 1183 range->freq[i].e = 1;
1187 } 1184 }
1188 range->num_frequency = i; 1185 range->num_frequency = i;
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index c99a1b6b948f..c8d5c34e8ddf 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -44,6 +44,7 @@
44#include <linux/slab.h> 44#include <linux/slab.h>
45#include <linux/string.h> 45#include <linux/string.h>
46#include <linux/wireless.h> 46#include <linux/wireless.h>
47#include <linux/ieee80211.h>
47 48
48#include <net/iw_handler.h> 49#include <net/iw_handler.h>
49 50
@@ -111,12 +112,6 @@ static void wl3501_release(struct pcmcia_device *link);
111 */ 112 */
112static dev_info_t wl3501_dev_info = "wl3501_cs"; 113static dev_info_t wl3501_dev_info = "wl3501_cs";
113 114
114static int wl3501_chan2freq[] = {
115 [0] = 2412, [1] = 2417, [2] = 2422, [3] = 2427, [4] = 2432,
116 [5] = 2437, [6] = 2442, [7] = 2447, [8] = 2452, [9] = 2457,
117 [10] = 2462, [11] = 2467, [12] = 2472, [13] = 2477,
118};
119
120static const struct { 115static const struct {
121 int reg_domain; 116 int reg_domain;
122 int min, max, deflt; 117 int min, max, deflt;
@@ -1510,7 +1505,7 @@ static int wl3501_get_freq(struct net_device *dev, struct iw_request_info *info,
1510{ 1505{
1511 struct wl3501_card *this = netdev_priv(dev); 1506 struct wl3501_card *this = netdev_priv(dev);
1512 1507
1513 wrqu->freq.m = wl3501_chan2freq[this->chan - 1] * 100000; 1508 wrqu->freq.m = ieee80211_dsss_chan_to_freq(this->chan) * 100000;
1514 wrqu->freq.e = 1; 1509 wrqu->freq.e = 1;
1515 return 0; 1510 return 0;
1516} 1511}
diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c
index b45c27d42fd8..6226ac2357f8 100644
--- a/drivers/net/wireless/zd1201.c
+++ b/drivers/net/wireless/zd1201.c
@@ -919,10 +919,9 @@ static int zd1201_set_freq(struct net_device *dev,
919 if (freq->e == 0) 919 if (freq->e == 0)
920 channel = freq->m; 920 channel = freq->m;
921 else { 921 else {
922 if (freq->m >= 2482) 922 channel = ieee80211_freq_to_dsss_chan(freq->m);
923 channel = 14; 923 if (channel < 0)
924 if (freq->m >= 2407) 924 channel = 0;
925 channel = (freq->m-2407)/5;
926 } 925 }
927 926
928 err = zd1201_setconfig16(zd, ZD1201_RID_CNFOWNCHANNEL, channel); 927 err = zd1201_setconfig16(zd, ZD1201_RID_CNFOWNCHANNEL, channel);
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index c4e6ca1a6306..cade2556af0e 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -1185,4 +1185,120 @@ static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
1185 return hdr->addr1; 1185 return hdr->addr1;
1186} 1186}
1187 1187
1188/**
1189 * ieee80211_fhss_chan_to_freq - get channel frequency
1190 * @channel: the FHSS channel
1191 *
1192 * Convert IEEE802.11 FHSS channel to frequency (MHz)
1193 * Ref IEEE 802.11-2007 section 14.6
1194 */
1195static inline int ieee80211_fhss_chan_to_freq(int channel)
1196{
1197 if ((channel > 1) && (channel < 96))
1198 return channel + 2400;
1199 else
1200 return -1;
1201}
1202
1203/**
1204 * ieee80211_freq_to_fhss_chan - get channel
1205 * @freq: the channels frequency
1206 *
1207 * Convert frequency (MHz) to IEEE802.11 FHSS channel
1208 * Ref IEEE 802.11-2007 section 14.6
1209 */
1210static inline int ieee80211_freq_to_fhss_chan(int freq)
1211{
1212 if ((freq > 2401) && (freq < 2496))
1213 return freq - 2400;
1214 else
1215 return -1;
1216}
1217
1218/**
1219 * ieee80211_dsss_chan_to_freq - get channel center frequency
1220 * @channel: the DSSS channel
1221 *
1222 * Convert IEEE802.11 DSSS channel to the center frequency (MHz).
1223 * Ref IEEE 802.11-2007 section 15.6
1224 */
1225static inline int ieee80211_dsss_chan_to_freq(int channel)
1226{
1227 if ((channel > 0) && (channel < 14))
1228 return 2407 + (channel * 5);
1229 else if (channel == 14)
1230 return 2484;
1231 else
1232 return -1;
1233}
1234
1235/**
1236 * ieee80211_freq_to_dsss_chan - get channel
1237 * @freq: the frequency
1238 *
1239 * Convert frequency (MHz) to IEEE802.11 DSSS channel
1240 * Ref IEEE 802.11-2007 section 15.6
1241 *
1242 * This routine selects the channel with the closest center frequency.
1243 */
1244static inline int ieee80211_freq_to_dsss_chan(int freq)
1245{
1246 if ((freq >= 2410) && (freq < 2475))
1247 return (freq - 2405) / 5;
1248 else if ((freq >= 2482) && (freq < 2487))
1249 return 14;
1250 else
1251 return -1;
1252}
1253
1254/* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back
1255 * Ref IEEE 802.11-2007 section 18.4.6.2
1256 *
1257 * The channels and frequencies are the same as those defined for DSSS
1258 */
1259#define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan)
1260#define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq)
1261
1262/* Convert IEEE802.11 ERP channel to frequency (MHz) and back
1263 * Ref IEEE 802.11-2007 section 19.4.2
1264 */
1265#define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan)
1266#define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq)
1267
1268/**
1269 * ieee80211_ofdm_chan_to_freq - get channel center frequency
1270 * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
1271 * @channel: the OFDM channel
1272 *
1273 * Convert IEEE802.11 OFDM channel to center frequency (MHz)
1274 * Ref IEEE 802.11-2007 section 17.3.8.3.2
1275 */
1276static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel)
1277{
1278 if ((channel > 0) && (channel <= 200) &&
1279 (s_freq >= 4000))
1280 return s_freq + (channel * 5);
1281 else
1282 return -1;
1283}
1284
1285/**
1286 * ieee80211_freq_to_ofdm_channel - get channel
1287 * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
1288 * @freq: the frequency
1289 *
1290 * Convert frequency (MHz) to IEEE802.11 OFDM channel
1291 * Ref IEEE 802.11-2007 section 17.3.8.3.2
1292 *
1293 * This routine selects the channel with the closest center frequency.
1294 */
1295static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq)
1296{
1297 if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) &&
1298 (s_freq >= 4000))
1299 return (freq + 2 - s_freq) / 5;
1300 else
1301 return -1;
1302}
1303
1188#endif /* LINUX_IEEE80211_H */ 1304#endif /* LINUX_IEEE80211_H */