Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci scanning fixes
details: https://anonhg.NetBSD.org/src/rev/b852e813ab41
branches: trunk
changeset: 331294:b852e813ab41
user: jmcneill <jmcneill%NetBSD.org@localhost>
date: Thu Aug 07 19:54:23 2014 +0000
description:
scanning fixes
diffstat:
sys/dev/pci/if_wpi.c | 45 +++++++++++++++++++++++----------------------
1 files changed, 23 insertions(+), 22 deletions(-)
diffs (153 lines):
diff -r 209c092c5433 -r b852e813ab41 sys/dev/pci/if_wpi.c
--- a/sys/dev/pci/if_wpi.c Thu Aug 07 19:05:18 2014 +0000
+++ b/sys/dev/pci/if_wpi.c Thu Aug 07 19:54:23 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wpi.c,v 1.65 2014/08/07 02:28:52 jmcneill Exp $ */
+/* $NetBSD: if_wpi.c,v 1.66 2014/08/07 19:54:23 jmcneill Exp $ */
/*-
* Copyright (c) 2006, 2007
@@ -18,7 +18,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wpi.c,v 1.65 2014/08/07 02:28:52 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wpi.c,v 1.66 2014/08/07 19:54:23 jmcneill Exp $");
/*
* Driver for Intel PRO/Wireless 3945ABG 802.11 network adapters.
@@ -960,7 +960,7 @@
}
/* configuration has changed, set Tx power accordingly */
- if ((error = wpi_set_txpower(sc, ni->ni_chan, 1)) != 0) {
+ if ((error = wpi_set_txpower(sc, ic->ic_curchan, 1)) != 0) {
aprint_error_dev(sc->sc_dev,
"could not set Tx power\n");
return error;
@@ -1447,7 +1447,7 @@
sc->temp = temp;
- if (wpi_set_txpower(sc, sc->sc_ic.ic_bss->ni_chan, 1) != 0) {
+ if (wpi_set_txpower(sc, sc->sc_ic.ic_curchan, 1) != 0) {
/* just warn, too bad for the automatic calibration... */
aprint_error_dev(sc->sc_dev, "could not adjust Tx power\n");
}
@@ -1742,6 +1742,7 @@
}
case WPI_START_SCAN:
{
+#if 0
struct wpi_start_scan *scan =
(struct wpi_start_scan *)(desc + 1);
@@ -1750,6 +1751,7 @@
/* fix current channel */
ic->ic_bss->ni_chan = &ic->ic_channels[scan->chan];
+#endif
break;
}
case WPI_STOP_SCAN:
@@ -2774,7 +2776,6 @@
struct ieee80211_frame *wh;
struct ieee80211_rateset *rs;
struct ieee80211_channel *c;
- enum ieee80211_phymode mode;
uint8_t *frm;
int pktlen, error, nrates;
@@ -2808,27 +2809,31 @@
hdr->cmd.id = WPI_ID_BROADCAST;
hdr->cmd.lifetime = htole32(WPI_LIFETIME_INFINITE);
/*
- * Move to the next channel if no packets are received within 5 msecs
+ * Move to the next channel if no packets are received within 10 msecs
* after sending the probe request (this helps to reduce the duration
* of active scans).
*/
- hdr->quiet = htole16(5); /* timeout in milliseconds */
+ hdr->quiet = htole16(10); /* timeout in milliseconds */
hdr->plcp_threshold = htole16(1); /* min # of packets */
if (flags & IEEE80211_CHAN_A) {
hdr->crc_threshold = htole16(1);
/* send probe requests at 6Mbps */
hdr->cmd.rate = wpi_plcp_signal(12);
+ rs = &ic->ic_sup_rates[IEEE80211_MODE_11A];
} else {
hdr->flags = htole32(WPI_CONFIG_24GHZ | WPI_CONFIG_AUTO);
/* send probe requests at 1Mbps */
hdr->cmd.rate = wpi_plcp_signal(2);
+ rs = &ic->ic_sup_rates[IEEE80211_MODE_11G];
}
/* for directed scans, firmware inserts the essid IE itself */
- hdr->essid[0].id = IEEE80211_ELEMID_SSID;
- hdr->essid[0].len = ic->ic_des_esslen;
- memcpy(hdr->essid[0].data, ic->ic_des_essid, ic->ic_des_esslen);
+ if (ic->ic_des_esslen != 0) {
+ hdr->essid[0].id = IEEE80211_ELEMID_SSID;
+ hdr->essid[0].len = ic->ic_des_esslen;
+ memcpy(hdr->essid[0].data, ic->ic_des_essid, ic->ic_des_esslen);
+ }
/*
* Build a probe request frame. Most of the following code is a
@@ -2850,9 +2855,6 @@
*frm++ = IEEE80211_ELEMID_SSID;
*frm++ = 0;
- mode = ieee80211_chan2mode(ic, ic->ic_ibss_chan);
- rs = &ic->ic_sup_rates[mode];
-
/* add supported rates IE */
*frm++ = IEEE80211_ELEMID_RATES;
nrates = rs->rs_nrates;
@@ -2882,19 +2884,18 @@
chan->chan = ieee80211_chan2ieee(ic, c);
chan->flags = 0;
- if (!(c->ic_flags & IEEE80211_CHAN_PASSIVE)) {
+ if (!(c->ic_flags & IEEE80211_CHAN_PASSIVE))
chan->flags |= WPI_CHAN_ACTIVE;
- if (ic->ic_des_esslen != 0)
- chan->flags |= WPI_CHAN_DIRECT;
- }
+ if (ic->ic_des_esslen != 0)
+ chan->flags |= WPI_CHAN_DIRECT;
chan->dsp_gain = 0x6e;
if (IEEE80211_IS_CHAN_5GHZ(c)) {
chan->rf_gain = 0x3b;
- chan->active = htole16(10);
+ chan->active = htole16(24);
chan->passive = htole16(110);
} else {
chan->rf_gain = 0x28;
- chan->active = htole16(20);
+ chan->active = htole16(36);
chan->passive = htole16(120);
}
hdr->nchan++;
@@ -2967,9 +2968,9 @@
IEEE80211_ADDR_COPY(ic->ic_myaddr, CLLADDR(ifp->if_sadl));
IEEE80211_ADDR_COPY(sc->config.myaddr, ic->ic_myaddr);
/* set default channel */
- sc->config.chan = ieee80211_chan2ieee(ic, ic->ic_ibss_chan);
+ sc->config.chan = ieee80211_chan2ieee(ic, ic->ic_curchan);
sc->config.flags = htole32(WPI_CONFIG_TSF);
- if (IEEE80211_IS_CHAN_2GHZ(ic->ic_ibss_chan)) {
+ if (IEEE80211_IS_CHAN_2GHZ(ic->ic_curchan)) {
sc->config.flags |= htole32(WPI_CONFIG_AUTO |
WPI_CONFIG_24GHZ);
}
@@ -3002,7 +3003,7 @@
}
/* configuration has changed, set Tx power accordingly */
- if ((error = wpi_set_txpower(sc, ic->ic_ibss_chan, 0)) != 0) {
+ if ((error = wpi_set_txpower(sc, ic->ic_curchan, 0)) != 0) {
aprint_error_dev(sc->sc_dev, "could not set Tx power\n");
return error;
}
Home |
Main Index |
Thread Index |
Old Index