Douglas Berry wrote:
On Tue, 25 Apr 2006 13:36:56 PDT, Sam Leffler wrote:
flags 0x3e0 = Passive+5Ghz+2Ghz+OFDM+CCK
hal flags 0x140 = 5Ghz+OFDM
Both of these make no sense for a frequency of 2432 Mhz, hence the hal
got upset.
Thanks for the interpretation.
What are the regulatory domain settings for the card; sysctl dev.ath.0
will show them? Please also show the output of ifconfig ath0 list channel.
Below is the output of of both commands. I couldn't find what 18
meant as a regulatory domain. The card is currently in use in
Canada.
dev.ath.0.%desc: Atheros 5212
dev.ath.0.%driver: ath
dev.ath.0.%location: slot=9 function=0
dev.ath.0.%pnpinfo: vendor=0x168c device=0x0013 subvendor=0x1186
subdevice=0x3a14 class=0x020000
dev.ath.0.%parent: pci3
dev.ath.0.smoothing_rate: 95
dev.ath.0.sample_rate: 10
dev.ath.0.countrycode: 0
dev.ath.0.regdomain: 18
dev.ath.0.slottime: 20
dev.ath.0.acktimeout: 48
dev.ath.0.ctstimeout: 48
dev.ath.0.softled: 0
dev.ath.0.ledpin: 0
dev.ath.0.ledon: 0
dev.ath.0.ledidle: 2700
dev.ath.0.txantenna: 0
dev.ath.0.rxantenna: 1
dev.ath.0.diversity: 0
dev.ath.0.txintrperiod: 5
dev.ath.0.diag: 0
dev.ath.0.tpscale: 0
dev.ath.0.tpc: 0
dev.ath.0.tpack: 63
dev.ath.0.tpcts: 63
dev.ath.0.monpass: 24
Channel 1 : 2412 Mhz 11g Channel 137 : 4955* Mhz 11a
Channel 2 : 2417 Mhz 11g Channel 137 : 4957* Mhz 11a
Channel 3 : 2422 Mhz 11g Channel 137 : 4960* Mhz 11a
Channel 4 : 2427 Mhz 11g Channel 137 : 4962* Mhz 11a
Channel 5 : 2432* Mhz 11a 11g Channel 137 : 4965* Mhz 11a
Channel 6 : 2437 Mhz 11g Channel 137 : 4967* Mhz 11a
Channel 7 : 2442 Mhz 11g Channel 137 : 4970* Mhz 11a
Channel 8 : 2447 Mhz 11g Channel 138 : 4972* Mhz 11a
Channel 9 : 2452 Mhz 11g Channel 138 : 4975* Mhz 11a
Channel 10 : 2457* Mhz 11a 11g Channel 138 : 4977* Mhz 11a
Channel 11 : 2462 Mhz 11g Channel 138 : 4980* Mhz 11a
Channel 136 : 4947* Mhz 11a Channel 138 : 4982* Mhz 11a
Channel 136 : 4950* Mhz 11a Channel 138 : 4985* Mhz 11a
Channel 137 : 4952* Mhz 11a Channel 138 : 4987* Mhz 11a
Ok, this makes sense now. What's going on is that regdomain 18 enables
the FCC Broadband Public Safety channels. These are the frequencies in
the 4.9GHz band that are defined for use by the TSB. Unfortunately I
botched the integration (I'm shoe-horning support into old code). In
particular the mapping from frequency to IEEE channel number for these
channels overlaps with the numbers in the 2.4GHz range which causes
problems because we have an array of channels that are indexed by IEEE
channel number. This is why you see channels 5 and 10 marked as usable
for 11a and 11g (the public safety channels are overlayed on top of the
normal 2.4G channels). As a stopgap let's try backing out the correct
public safety mapping and just use the alternative mapping that maps the
frequencies to IEEE channel numbers 188-197.
Attached are two patches; one for the ath driver and another for
sys/net80211/ieee80211.c in releng6 (note changes to the latter in head
are different). I believe this will resolve your problem; you can check
by updating your code and looking at what ifconfig ath0 list chan gives you.
Once 6.1 goes out I plan to bring in a bunch of work that'll make stuff
like this easy to handle. Unfortunately that will only happen in
current because it'll break ABI's that are fixed for the life of 6.x.
Sam
Index: ieee80211.c
===================================================================
RCS file: /usr/ncvs/src/sys/net80211/ieee80211.c,v
retrieving revision 1.19.2.7
diff -u -r1.19.2.7 ieee80211.c
--- ieee80211.c 11 Mar 2006 19:25:23 -0000 1.19.2.7
+++ ieee80211.c 26 Apr 2006 03:25:33 -0000
@@ -244,14 +244,21 @@
else
return 15 + ((freq - 2512) / 20);
} else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
- return (freq - 5000) / 5;
+ if (freq <= 5000)
+ return (freq - 4000) / 5;
+ else
+ return (freq - 5000) / 5;
} else { /* either, guess */
if (freq == 2484)
return 14;
if (freq < 2484)
return (freq - 2407) / 5;
- if (freq < 5000)
- return 15 + ((freq - 2512) / 20);
+ if (freq < 5000) {
+ if (freq > 4900)
+ return (freq - 4000) / 5;
+ else
+ return 15 + ((freq - 2512) / 20);
+ }
return (freq - 5000) / 5;
}
}
Index: if_ath.c
===================================================================
RCS file: /usr/ncvs/src/sys/dev/ath/if_ath.c,v
retrieving revision 1.141
diff -u -r1.141 if_ath.c
--- if_ath.c 25 Apr 2006 22:52:28 -0000 1.141
+++ if_ath.c 26 Apr 2006 03:19:59 -0000
@@ -4586,6 +4586,9 @@
HAL_BOOL outdoor, HAL_BOOL xchanmode)
{
#define COMPAT (CHANNEL_ALL_NOTURBO|CHANNEL_PASSIVE)
+#define IS_CHAN_PUBLIC_SAFETY(_c) \
+ (((_c)->channelFlags & CHANNEL_5GHZ) && \
+ ((_c)->channel > 4940 && (_c)->channel < 4990))
struct ieee80211com *ic = &sc->sc_ic;
struct ifnet *ifp = sc->sc_ifp;
struct ath_hal *ah = sc->sc_ah;
@@ -4618,7 +4621,16 @@
HAL_CHANNEL *c = &chans[i];
u_int16_t flags;
- ix = ath_hal_mhz2ieee(ah, c->channel, c->channelFlags);
+ /*
+ * XXX we're not ready to handle the ieee number mapping
+ * for public safety channels as they overlap with any
+ * 2GHz channels; for now use the non-public safety
+ * numbering which is non-overlapping.
+ */
+ if (IS_CHAN_PUBLIC_SAFETY(c))
+ ix = (c->channel - 4000) / 5;
+ else
+ ix = ath_hal_mhz2ieee(ah, c->channel, c->channelFlags);
if (ix > IEEE80211_CHAN_MAX) {
if_printf(ifp, "bad hal channel %d (%u/%x) ignored\n",
ix, c->channel, c->channelFlags);
@@ -4651,6 +4663,7 @@
}
free(chans, M_TEMP);
return 0;
+#undef IS_CHAN_PUBLIC_SAFETY
#undef COMPAT
}
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"