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