PERFORCE change 122603 for review

Peter Wemm peter at FreeBSD.org
Sun Jul 1 02:22:38 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=122603

Change 122603 by peter at peter_overcee on 2007/07/01 02:21:37

	IFC @122602

Affected files ...

.. //depot/projects/hammer/contrib/gcc/config/s390/t-linux#3 branch
.. //depot/projects/hammer/sys/dev/wi/if_wi.c#52 integrate
.. //depot/projects/hammer/sys/kern/tty.c#53 integrate
.. //depot/projects/hammer/sys/net80211/ieee80211_scan.c#3 integrate
.. //depot/projects/hammer/sys/net80211/ieee80211_scan.h#3 integrate

Differences ...

==== //depot/projects/hammer/sys/dev/wi/if_wi.c#52 (text+ko) ====

@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi.c,v 1.209 2007/06/30 21:23:23 thompsa Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi.c,v 1.210 2007/06/30 21:39:21 thompsa Exp $");
 
 #define WI_HERMES_AUTOINC_WAR	/* Work around data write autoinc bug. */
 #define WI_HERMES_STATS_WAR	/* Work around stats counter bug. */
@@ -165,6 +165,8 @@
 static int wi_symbol_set_hcr(struct wi_softc *, int);
 
 static void wi_scan_start(struct ieee80211com *);
+static void wi_scan_curchan(struct ieee80211com *, unsigned long);
+static void wi_scan_mindwell(struct ieee80211com *);
 static void wi_scan_end(struct ieee80211com *);
 static void wi_set_channel(struct ieee80211com *);
 static void wi_update_slot(struct ifnet *);
@@ -369,8 +371,9 @@
 		val = le16toh(val);
 		ic->ic_bsschan = ieee80211_find_channel(ic,
 			ieee80211_ieee2mhz(val, IEEE80211_CHAN_B),
-			IEEE80211_MODE_AUTO);
-		/* XXX check return value */
+			IEEE80211_CHAN_B);
+		if (ic->ic_bsschan == NULL)
+			ic->ic_bsschan = &ic->ic_channels[0];
 	} else {
 		device_printf(dev,
 			"WI_RID_OWN_CHNL failed, using first channel!\n");
@@ -467,7 +470,6 @@
 				rs->rs_rates[rs->rs_nrates++] = ratebuf[2+i];
 	} else {
 		/* XXX fallback on error? */
-		rs->rs_nrates = 0;
 	}
 
 	buflen = sizeof(val);
@@ -504,6 +506,8 @@
 	ic->ic_raw_xmit = wi_raw_xmit;
 
 	ic->ic_scan_start = wi_scan_start;
+	ic->ic_scan_curchan = wi_scan_curchan;
+	ic->ic_scan_mindwell = wi_scan_mindwell;
 	ic->ic_scan_end = wi_scan_end;
 	ic->ic_set_channel = wi_set_channel;
 	ic->ic_node_alloc = wi_node_alloc;
@@ -1918,9 +1922,9 @@
 	case WI_INFO_SCAN_RESULTS:
 	case WI_INFO_HOST_SCAN_RESULTS:
 		wi_scan_result(sc, fid, le16toh(ltbuf[0]));
-		ieee80211_notify_scan_done(ic);
+		ieee80211_scan_done(ic);
 		break;
-		
+
 	default:
 		DPRINTF(("wi_info_intr: got fid %x type %x len %d\n", fid,
 		    le16toh(ltbuf[1]), le16toh(ltbuf[0])));
@@ -2945,6 +2949,8 @@
 		return (*sc->sc_newstate)(ic, nstate, arg);
 
 	case IEEE80211_S_SCAN:
+		return (*sc->sc_newstate)(ic, nstate, arg);
+
 	case IEEE80211_S_AUTH:
 	case IEEE80211_S_ASSOC:
 		ic->ic_state = nstate;	/* NB: skip normal ieee80211 handling */
@@ -2964,7 +2970,6 @@
 		    IEEE80211_CHAN_B);
 		if (ni->ni_chan == NULL)
 			ni->ni_chan = &ic->ic_channels[0];
-		/* XXX validate channel */
 		ic->ic_curchan = ic->ic_bsschan = ni->ni_chan;
 #if NBPFILTER > 0
 		sc->sc_tx_th.wt_chan_freq = sc->sc_rx_th.wr_chan_freq =
@@ -3046,7 +3051,6 @@
 	struct ieee80211com *ic;
 	uint8_t ssid[2+IEEE80211_NWID_LEN];
 
-	printf("wi_scan_result\n");
 	ic = &sc->sc_ic;
 	rstamp++;
 	memset(&sp, 0, sizeof(sp));
@@ -3081,7 +3085,7 @@
 	memset(&ws_dat, 0, sizeof(ws_dat));
 
 	for (i = 0; i < naps; i++, ap++) {
-		uint8_t rates[2];
+		uint8_t rates[2 + IEEE80211_RATE_MAXSIZE];
 		uint16_t *bssid;
 		wi_read_bap(sc, fid, off, &ws_dat,
 		    (sizeof(ws_dat) < szbuf ? sizeof(ws_dat) : szbuf));
@@ -3106,7 +3110,7 @@
 		sp.bintval = ap->interval = le16toh(ws_dat.wi_interval);
 		ap->rate = le16toh(ws_dat.wi_rate);
 		rates[1] = 1;
-		rates[2] = (uint8_t)ap->rate;
+		rates[2] = (uint8_t)ap->rate / 5;
 		ap->namelen = le16toh(ws_dat.wi_namelen);
 		if (ap->namelen > sizeof(ap->name))
 			ap->namelen = sizeof(ap->name);
@@ -3122,7 +3126,8 @@
 			sp.curchan = &ic->ic_channels[0];
 		sp.rates = &rates[0];
 		sp.tstamp = (uint8_t *)&rstamp;
-		printf("calling add_scan \n");
+		DPRINTF(("calling add_scan, bssid %s chan %d signal %d\n",
+		    ether_sprintf(ws_dat.wi_bssid), ap->channel, ap->signal));
 		ieee80211_add_scan(ic, &sp, &wh, 0, ap->signal, ap->noise, rstamp);
 	}
 done:
@@ -3537,6 +3542,18 @@
 }
 
 static void
+wi_scan_curchan(struct ieee80211com *ic, unsigned long maxdwell)
+{
+	/* The firmware is not capable of scanning a single channel */
+}
+
+static void
+wi_scan_mindwell(struct ieee80211com *ic)
+{
+	/* NB: don't try to abort scan; wait for firmware to finish */
+}
+
+static void
 wi_scan_end(struct ieee80211com *ic)
 {
 	struct ifnet *ifp = ic->ic_ifp;

==== //depot/projects/hammer/sys/kern/tty.c#53 (text+ko) ====

@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/tty.c,v 1.271 2007/06/11 21:05:41 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/tty.c,v 1.272 2007/07/01 00:17:59 jeff Exp $");
 
 #include "opt_compat.h"
 #include "opt_tty.h"
@@ -2536,6 +2536,7 @@
 	int load, pctcpu;
 	pid_t pid;
 	char comm[MAXCOMLEN + 1];
+	struct rusage ru;
 
 	if (ttycheckoutq(tp,0) == 0)
 		return;
@@ -2615,9 +2616,7 @@
 	PROC_SUNLOCK(pick);
 	PROC_LOCK(pick);
 	PGRP_UNLOCK(tp->t_pgrp);
-	PROC_SLOCK(pick);
-	calcru(pick, &utime, &stime);
-	PROC_SUNLOCK(pick);
+	rufetchcalc(pick, &ru, &utime, &stime);
 	pid = pick->p_pid;
 	bcopy(pick->p_comm, comm, sizeof(comm));
 	PROC_UNLOCK(pick);

==== //depot/projects/hammer/sys/net80211/ieee80211_scan.c#3 (text+ko) ====

@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_scan.c,v 1.2 2007/06/30 21:23:23 thompsa Exp $");
+__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_scan.c,v 1.3 2007/06/30 21:39:21 thompsa Exp $");
 
 /*
  * IEEE 802.11 scanning support.
@@ -627,6 +627,19 @@
 }
 
 /*
+ * Public access to scan_next for drivers that are not able to scan single
+ * channels (e.g. for firmware-based devices).
+ */
+void
+ieee80211_scan_done(struct ieee80211com *ic)
+{
+	struct ieee80211_scan_state *ss = ic->ic_scan;
+
+	ss->ss_next = ss->ss_last; /* all channels are complete */
+	scan_next(ss);
+}
+
+/*
  * Scan curchan.  If this is an active scan and the channel
  * is not marked passive then send probe request frame(s).
  * Arrange for the channel change after maxdwell ticks.
@@ -897,17 +910,7 @@
 			    ieee80211_chan2ieee(ic, ic->ic_curchan),
 				channel_type(ic->ic_curchan),
 			    ticks, SCAN_PRIVATE(ss)->ss_chanmindwell);
-			/*
-			 * XXX
-			 * We want to just kick the timer and still
-			 * process frames until it fires but linux
-			 * will livelock unless we discard frames.
-			 */
-#if 0
 			SCAN_PRIVATE(ss)->ss_iflags |= ISCAN_MINDWELL;
-#else
-			SCAN_PRIVATE(ss)->ss_iflags |= ISCAN_DISCARD;
-#endif
 			/*
 			 * NB: trigger at next clock tick or wait for the
 			 * hardware

==== //depot/projects/hammer/sys/net80211/ieee80211_scan.h#3 (text+ko) ====

@@ -22,7 +22,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/net80211/ieee80211_scan.h,v 1.2 2007/06/30 21:23:23 thompsa Exp $
+ * $FreeBSD: src/sys/net80211/ieee80211_scan.h,v 1.3 2007/06/30 21:39:21 thompsa Exp $
  */
 #ifndef _NET80211_IEEE80211_SCAN_H_
 #define _NET80211_IEEE80211_SCAN_H_
@@ -83,6 +83,7 @@
 int	ieee80211_bg_scan(struct ieee80211com *);
 void	ieee80211_cancel_scan(struct ieee80211com *);
 void	ieee80211_scan_next(struct ieee80211com *);
+void	ieee80211_scan_done(struct ieee80211com *);
 
 struct ieee80211_scanparams;
 void	ieee80211_add_scan(struct ieee80211com *,


More information about the p4-projects mailing list