PERFORCE change 34762 for review

Marcel Moolenaar marcel at FreeBSD.org
Sun Jul 20 21:23:36 PDT 2003


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

Change 34762 by marcel at marcel_nfs on 2003/07/20 21:22:37

	IFC @34761

Affected files ...

.. //depot/projects/ia64/Makefile#29 integrate
.. //depot/projects/ia64/bin/ed/Makefile#8 integrate
.. //depot/projects/ia64/bin/ed/re.c#4 integrate
.. //depot/projects/ia64/contrib/smbfs/mount_smbfs/mount_smbfs.c#4 integrate
.. //depot/projects/ia64/lib/libpthread/arch/amd64/include/pthread_md.h#2 integrate
.. //depot/projects/ia64/lib/libtelnet/Makefile#5 integrate
.. //depot/projects/ia64/libexec/telnetd/Makefile#5 integrate
.. //depot/projects/ia64/rescue/rescue/Makefile#7 integrate
.. //depot/projects/ia64/sys/dev/acpica/acpi_ec.c#14 integrate
.. //depot/projects/ia64/sys/dev/ath/if_ath.c#4 integrate
.. //depot/projects/ia64/sys/dev/ath/if_athvar.h#3 integrate
.. //depot/projects/ia64/sys/dev/usb/usb_mem.c#2 integrate
.. //depot/projects/ia64/sys/dev/wi/if_wi.c#44 integrate
.. //depot/projects/ia64/sys/dev/wi/if_wivar.h#15 integrate
.. //depot/projects/ia64/sys/kern/kern_sig.c#61 integrate
.. //depot/projects/ia64/sys/net/if_media.h#11 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211.c#4 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_input.c#3 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_ioctl.c#4 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_node.c#4 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_node.h#3 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_output.c#3 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_proto.c#3 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_proto.h#3 integrate
.. //depot/projects/ia64/sys/net80211/ieee80211_var.h#3 integrate
.. //depot/projects/ia64/usr.bin/calendar/calendars/calendar.freebsd#34 integrate
.. //depot/projects/ia64/usr.bin/telnet/Makefile#5 integrate

Differences ...

==== //depot/projects/ia64/Makefile#29 (text+ko) ====

@@ -1,5 +1,5 @@
 #
-# $FreeBSD: src/Makefile,v 1.285 2003/07/19 23:17:08 ru Exp $
+# $FreeBSD: src/Makefile,v 1.286 2003/07/20 12:38:29 ru Exp $
 #
 # The user-driven targets are:
 #
@@ -65,7 +65,7 @@
 	hierarchy install installcheck installkernel installkernel.debug\
 	reinstallkernel reinstallkernel.debug installmost installworld \
 	libraries lint maninstall \
-	mk most obj objlink regress rerelease tags update
+	most obj objlink regress rerelease tags update
 
 BITGTS=	files includes
 BITGTS:=${BITGTS} ${BITGTS:S/^/build/} ${BITGTS:S/^/install/}

==== //depot/projects/ia64/bin/ed/Makefile#8 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/bin/ed/Makefile,v 1.26 2003/06/29 10:03:35 ru Exp $
+# $FreeBSD: src/bin/ed/Makefile,v 1.28 2003/07/20 12:26:24 ru Exp $
 
 PROG=	ed
 SRCS=	buf.c cbc.c glbl.c io.c main.c re.c sub.c undo.c
@@ -8,7 +8,7 @@
 .if exists(${.CURDIR}/../../crypto) && !defined(NOCRYPT) && !defined(NO_OPENSSL)
 DISTRIBUTION=crypto
 CFLAGS+=-DDES
-WARNS=	2
+WARNS?=	2
 DPADD=	${LIBCRYPTO}
 LDADD=	-lcrypto
 .endif

==== //depot/projects/ia64/bin/ed/re.c#4 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/bin/ed/re.c,v 1.19 2002/06/30 05:13:53 obrien Exp $");
+__FBSDID("$FreeBSD: src/bin/ed/re.c,v 1.20 2003/07/20 10:24:09 ru Exp $");
 
 #include "ed.h"
 
@@ -41,10 +41,10 @@
 pattern_t *
 get_compiled_pattern(void)
 {
-	static pattern_t *exp = NULL;
+	static pattern_t *expr = NULL;
 	static char error[1024];
 
-	char *exps;
+	char *exprs;
 	char delimiter;
 	int n;
 
@@ -52,27 +52,27 @@
 		errmsg = "invalid pattern delimiter";
 		return NULL;
 	} else if (delimiter == '\n' || *++ibufp == '\n' || *ibufp == delimiter) {
-		if (!exp)
+		if (!expr)
 			errmsg = "no previous pattern";
-		return exp;
-	} else if ((exps = extract_pattern(delimiter)) == NULL)
+		return expr;
+	} else if ((exprs = extract_pattern(delimiter)) == NULL)
 		return NULL;
 	/* buffer alloc'd && not reserved */
-	if (exp && !patlock)
-		regfree(exp);
-	else if ((exp = (pattern_t *) malloc(sizeof(pattern_t))) == NULL) {
+	if (expr && !patlock)
+		regfree(expr);
+	else if ((expr = (pattern_t *) malloc(sizeof(pattern_t))) == NULL) {
 		fprintf(stderr, "%s\n", strerror(errno));
 		errmsg = "out of memory";
 		return NULL;
 	}
 	patlock = 0;
-	if ((n = regcomp(exp, exps, 0))) {
-		regerror(n, exp, error, sizeof error);
+	if ((n = regcomp(expr, exprs, 0))) {
+		regerror(n, expr, error, sizeof error);
 		errmsg = error;
-		free(exp);
-		return exp = NULL;
+		free(expr);
+		return expr = NULL;
 	}
-	return exp;
+	return expr;
 }
 
 

==== //depot/projects/ia64/contrib/smbfs/mount_smbfs/mount_smbfs.c#4 (text+ko) ====

@@ -30,6 +30,7 @@
  * SUCH DAMAGE.
  *
  * $Id: mount_smbfs.c,v 1.17 2002/04/10 04:17:51 bp Exp $
+ * $FreeBSD: src/contrib/smbfs/mount_smbfs/mount_smbfs.c,v 1.2 2003/07/20 11:27:54 tjr Exp $
  */
 #include <sys/param.h>
 #include <sys/stat.h>
@@ -75,7 +76,7 @@
 	extern void dropsuid();
 	extern int loadsmbvfs();
 #else
-	struct vfsconf vfc;
+	struct xvfsconf vfc;
 #endif /* APPLE */
 	char *next;
 	int opt, error, mntflags, caseopt;

==== //depot/projects/ia64/lib/libpthread/arch/amd64/include/pthread_md.h#2 (text+ko) ====

@@ -23,7 +23,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/lib/libpthread/arch/amd64/include/pthread_md.h,v 1.1 2003/07/19 04:44:21 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/arch/amd64/include/pthread_md.h,v 1.2 2003/07/20 12:41:38 deischen Exp $
  */
 /*
  * Machine-dependent thread prototypes/definitions for the thread kernel.
@@ -33,8 +33,10 @@
 
 #include <ucontext.h>
 
-#define	THR_GETCONTEXT(ucp)	(void)_amd64_save_context(&(ucp)->uc_mcontext)
-#define	THR_SETCONTEXT(ucp)	(void)_amd64_restore_context(&(ucp)->uc_mcontext)
+#define	THR_GETCONTEXT(ucp)	\
+	(void)_amd64_save_context(&(ucp)->uc_mcontext)
+#define	THR_SETCONTEXT(ucp)	\
+	(void)_amd64_restore_context(&(ucp)->uc_mcontext, NULL, NULL)
 
 #define	THR_ALIGNBYTES	15
 #define	THR_ALIGN(td)	(((uintptr_t)(td) + THR_ALIGNBYTES) & ~THR_ALIGNBYTES)

==== //depot/projects/ia64/lib/libtelnet/Makefile#5 (text+ko) ====

@@ -1,5 +1,5 @@
 #	From: @(#)Makefile	8.2 (Berkeley) 12/15/93
-# $FreeBSD: src/lib/libtelnet/Makefile,v 1.15 2003/07/16 20:59:14 markm Exp $
+# $FreeBSD: src/lib/libtelnet/Makefile,v 1.16 2003/07/20 23:29:46 markm Exp $
 
 TELNETDIR=	${.CURDIR}/../../contrib/telnet
 .PATH:		${TELNETDIR}/libtelnet
@@ -13,7 +13,7 @@
 
 WARNS?=		2
 
-.if !defined(NO_CRYPTO)
+.if !defined(NOCRYPT) && !defined(NO_OPENSSL)
 SRCS+=		encrypt.c auth.c enc_des.c sra.c pk.c
 CFLAGS+=	-DENCRYPTION -DAUTHENTICATION -DSRA
 .if !defined(NO_KERBEROS)

==== //depot/projects/ia64/libexec/telnetd/Makefile#5 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/libexec/telnetd/Makefile,v 1.20 2003/07/16 20:59:14 markm Exp $
+# $FreeBSD: src/libexec/telnetd/Makefile,v 1.21 2003/07/20 23:29:46 markm Exp $
 
 # Do not define -DKLUDGELINEMODE, as it does not interact well with many
 # telnet implementations.
@@ -28,7 +28,7 @@
 DPADD=		${LIBUTIL} ${LIBTERMCAP} ${LIBTELNET}
 LDADD=		-lutil -ltermcap ${LIBTELNET}
 
-.if !defined(NO_CRYPTO)
+.if !defined(NOCRYPT) && !defined(NO_OPENSSL)
 SRCS+=		authenc.c
 CFLAGS+=	-DAUTHENTICATION -DENCRYPTION
 DPADD+=		${LIBMP} ${LIBCRYPTO} ${LIBCRYPT} ${LIBPAM}

==== //depot/projects/ia64/rescue/rescue/Makefile#7 (text+ko) ====

@@ -1,4 +1,4 @@
-#$FreeBSD: src/rescue/rescue/Makefile,v 1.12 2003/07/19 20:40:37 obrien Exp $
+#$FreeBSD: src/rescue/rescue/Makefile,v 1.13 2003/07/21 02:47:04 obrien Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/2/93
 
 PROG=	rescue
@@ -105,7 +105,7 @@
 CRUNCH_PROGS_sbin= atm atacontrol badsect bsdlabel camcontrol 		\
 	ccdconfig clri devfs dmesg dump					\
 	dumpfs dumpon fore_dnld fsck fsck_ffs fsck_msdosfs fsdb		\
-	fsirand gbde ifconfig ilmid init ip6fw 				\
+	fsirand gbde ifconfig ilmid init 				\
 	kldconfig kldload kldstat kldunload ldconfig 			\
 	md5 mdconfig mdmfs mknod mount mount_cd9660 mount_ext2fs	\
 	mount_msdosfs mount_nfs mount_ntfs mount_nullfs			\

==== //depot/projects/ia64/sys/dev/acpica/acpi_ec.c#14 (text+ko) ====

@@ -25,7 +25,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.34 2003/07/20 00:48:38 njl Exp $
+ *	$FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.36 2003/07/20 21:12:21 njl Exp $
  */
 /******************************************************************************
  *
@@ -232,7 +232,7 @@
 } ACPI_TABLE_ECDT;
 
 /* Indicate that this device has already been probed via ECDT. */
-#define DEV_ECDT_FLAG		0x80000000
+#define DEV_ECDT(x)		(acpi_get_private(x) == &acpi_ec_devclass)
 
 /* Indicate that this device should use the global lock. */
 #define DEV_GLK_FLAG		0x40000000
@@ -247,7 +247,8 @@
 struct acpi_ec_softc {
     device_t		ec_dev;
     ACPI_HANDLE		ec_handle;
-    UINT32		ec_gpebit;
+    UINT8		ec_gpebit;
+    UINT8		ec_csrvalue;
     
     int			ec_data_rid;
     struct resource	*ec_data_res;
@@ -262,7 +263,7 @@
     int			ec_glk;
     int			ec_glkhandle;
     struct mtx		ec_mtx;
-    UINT32		ec_polldelay;
+    int			ec_polldelay;
 };
 
 /*
@@ -321,7 +322,6 @@
 				UINT32 width, ACPI_INTEGER *Value,
 				void *Context, void *RegionContext);
 static ACPI_STATUS	EcWaitEvent(struct acpi_ec_softc *sc, EC_EVENT Event);
-static ACPI_STATUS	EcQuery(struct acpi_ec_softc *sc, UINT8 *Data);
 static ACPI_STATUS	EcCommand(struct acpi_ec_softc *sc, EC_COMMAND cmd);
 static ACPI_STATUS	EcRead(struct acpi_ec_softc *sc, UINT8 Address,
 				UINT8 *Data);
@@ -401,7 +401,8 @@
      * We'll determine whether we really want to use the global lock
      * in a later call to attach.
      */
-    magic = DEV_ECDT_FLAG | DEV_GLK_FLAG;
+    acpi_set_private(child, &acpi_ec_devclass);
+    magic = DEV_GLK_FLAG;
     DEV_SET_GPEBIT(magic, ecdt->gpe_bit);
     acpi_set_magic(child, magic);
 
@@ -419,11 +420,9 @@
     char	desc[64];
     int		magic, uid, glk, gpebit, ret = ENXIO;
 
-    /* Check that this is an EC device and it's not disabled. */
-    if (acpi_get_type(dev) != ACPI_TYPE_DEVICE || acpi_disabled("ec") ||
-	!acpi_MatchHid(dev, "PNP0C09")) {
+    /* Check that this is a device and that EC is not disabled. */
+    if (acpi_get_type(dev) != ACPI_TYPE_DEVICE || acpi_disabled("ec"))
 	return (ENXIO);
-    }
 
     /*
      * If probed via ECDT, set description and continue.  Otherwise,
@@ -431,12 +430,12 @@
      * duplicate probe.
      */
     magic = acpi_get_magic(dev);
-    if ((magic & DEV_ECDT_FLAG) != 0) {
+    if (DEV_ECDT(dev)) {
 	snprintf(desc, sizeof(desc), "embedded controller: ECDT, GPE %#x, GLK",
 		 DEV_GET_GPEBIT(magic));
 	device_set_desc_copy(dev, desc);
 	ret = 0;
-    } else {
+    } else if (acpi_MatchHid(dev, "PNP0C09")) {
 	h = acpi_get_handle(dev);
 
 	/*
@@ -590,29 +589,6 @@
     return (errval);
 }
 
-static ACPI_STATUS
-EcQuery(struct acpi_ec_softc *sc, UINT8 *Data)
-{
-    ACPI_STATUS	Status;
-
-    Status = EcLock(sc);
-    if (ACPI_FAILURE(Status))
-	return (Status);
-
-    /*
-     * Send a query command to the EC to find out which _Qxx call it
-     * wants to make.  This command clears the SCI bit and also the
-     * interrupt source since we are edge-triggered.
-     */
-    Status = EcCommand(sc, EC_COMMAND_QUERY);
-    if (ACPI_SUCCESS(Status))
-	*Data = EC_GET_DATA(sc);
-
-    EcUnlock(sc);
-
-    return (Status);
-}    
-
 static void
 EcGpeQueryHandler(void *Context)
 {
@@ -625,32 +601,39 @@
     ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
     KASSERT(Context != NULL, ("EcGpeQueryHandler called with NULL"));
 
+    Status = EcLock(sc);
+    if (ACPI_FAILURE(Status)) {
+	ACPI_VPRINT(sc->ec_dev, acpi_device_get_parent_softc(sc->ec_dev),
+		    "GpeQuery lock error: %s\n", AcpiFormatException(Status));
+	return;
+    }
+
     /*
-     * Check status for EC_SCI.
-     * 
-     * Bail out if the EC_SCI bit of the status register is not set.
-     * Note that this function should only be called when
-     * this bit is set (polling is used to detect IBE/OBF events).
-     *
-     * We don't acquire the global lock here but do protect against other
-     * running commands (read/write/query) by grabbing ec_mtx.
+     * If the EC_SCI bit of the status register is not set, then pass
+     * it along to any potential waiters as it may be an IBE/OBF event.
      */
-    mtx_lock(&sc->ec_mtx);
     EcStatus = EC_GET_CSR(sc);
-    mtx_unlock(&sc->ec_mtx);
     if ((EcStatus & EC_EVENT_SCI) == 0) {
-	/* If it's not an SCI, wakeup the EcWaitEvent sleep. */
-	wakeup(&sc->ec_polldelay);
+	sc->ec_csrvalue = EcStatus;
+	wakeup(&sc->ec_csrvalue);
+	EcUnlock(sc);
 	goto re_enable;
     }
 
-    /* Find out why the EC is signaling us. */
-    Status = EcQuery(sc, &Data);
+    /*
+     * Send a query command to the EC to find out which _Qxx call it
+     * wants to make.  This command clears the SCI bit and also the
+     * interrupt source since we are edge-triggered.
+     */
+    Status = EcCommand(sc, EC_COMMAND_QUERY);
     if (ACPI_FAILURE(Status)) {
+	EcUnlock(sc);
 	ACPI_VPRINT(sc->ec_dev, acpi_device_get_parent_softc(sc->ec_dev),
 		    "GPE query failed - %s\n", AcpiFormatException(Status));
 	goto re_enable;
     }
+    Data = EC_GET_DATA(sc);
+    EcUnlock(sc);
 
     /* Ignore the value for "no outstanding event". (13.3.5) */
     if (Data == 0)
@@ -770,7 +753,7 @@
 {
     EC_STATUS	EcStatus;
     ACPI_STATUS	Status;
-    UINT32	i, period;
+    int		i, period, retval;
 
     mtx_assert(&sc->ec_mtx, MA_OWNED);
     Status = AE_NO_HARDWARE_RESPONSE;
@@ -812,13 +795,18 @@
      * for completion, sleeping for chunks of 10 ms.
      */
     if (Status != AE_OK) {
+	retval = -1;
 	for (i = 0; i < EC_POLL_TIMEOUT / 10; i++) {
-	    EcStatus = EC_GET_CSR(sc);
+	    if (retval != 0)
+		EcStatus = EC_GET_CSR(sc);
+	    else
+		EcStatus = sc->ec_csrvalue;
 	    if (EVENT_READY(Event, EcStatus)) {
 		Status = AE_OK;
 		break;
 	    }
-	    msleep(&sc->ec_polldelay, &sc->ec_mtx, PZERO, "ecpoll", 10/*ms*/);
+	    retval = msleep(&sc->ec_csrvalue, &sc->ec_mtx, PZERO, "ecpoll",
+			    10/*ms*/);
 	}
     }
 

==== //depot/projects/ia64/sys/dev/ath/if_ath.c#4 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.3 2003/07/13 17:07:25 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.4 2003/07/20 21:38:20 sam Exp $");
 
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -129,7 +129,7 @@
 static int	ath_startrecv(struct ath_softc *);
 static void	ath_next_scan(void *);
 static void	ath_calibrate(void *);
-static int	ath_newstate(void *, enum ieee80211_state);
+static int	ath_newstate(struct ieee80211com *, enum ieee80211_state, int);
 static void	ath_newassoc(struct ieee80211com *,
 			struct ieee80211_node *, int);
 static int	ath_getchannels(struct ath_softc *, u_int cc, HAL_BOOL outdoor);
@@ -281,7 +281,6 @@
 	ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
 
 	ic->ic_softc = sc;
-	ic->ic_newstate = ath_newstate;
 	ic->ic_newassoc = ath_newassoc;
 	/* XXX not right but it's not used anywhere important */
 	ic->ic_phytype = IEEE80211_T_OFDM;
@@ -300,7 +299,9 @@
 	ic->ic_node_alloc = ath_node_alloc;
 	ic->ic_node_free = ath_node_free;
 	ic->ic_node_copy = ath_node_copy;
-
+	sc->sc_newstate = ic->ic_newstate;
+	ic->ic_newstate = ath_newstate;
+	/* complete initialization */
 	ieee80211_media_init(ifp, ath_media_change, ieee80211_media_status);
 
 	if_printf(ifp, "802.11 address: %s\n", ether_sprintf(ic->ic_myaddr));
@@ -453,13 +454,12 @@
 {
 	struct ath_softc *sc = arg;
 	struct ieee80211com *ic = &sc->sc_ic;
-	struct ifnet *ifp = &ic->ic_if;
 
 	DPRINTF(("ath_bmiss_proc: pending %u\n", pending));
 	KASSERT(ic->ic_opmode == IEEE80211_M_STA,
 		("unexpect operating mode %u", ic->ic_opmode));
 	if (ic->ic_state == IEEE80211_S_RUN)
-		ieee80211_new_state(ifp, IEEE80211_S_SCAN, -1);
+		ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
 }
 
 static u_int
@@ -546,7 +546,7 @@
 	mode = ieee80211_chan2mode(ic, ni->ni_chan);
 	if (mode != sc->sc_curmode)
 		ath_setcurmode(sc, mode);
-	ieee80211_new_state(ifp, IEEE80211_S_SCAN, -1);
+	ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
 done:
 	mtx_unlock(&sc->sc_mtx);
 }
@@ -554,6 +554,7 @@
 static void
 ath_stop(struct ifnet *ifp)
 {
+	struct ieee80211com *ic = (struct ieee80211com *) ifp;
 	struct ath_softc *sc = ifp->if_softc;
 	struct ath_hal *ah = sc->sc_ah;
 
@@ -587,7 +588,7 @@
 			sc->sc_rxlink = NULL;
 		IF_DRAIN(&ifp->if_snd);
 		ath_beacon_free(sc);
-		ieee80211_new_state(ifp, IEEE80211_S_INIT, -1);
+		ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
 		if (!sc->sc_invalid)
 			ath_hal_setpower(ah, HAL_PM_FULL_SLEEP, 0);
 	}
@@ -2156,21 +2157,15 @@
 }
 
 static int
-ath_newstate(void *arg, enum ieee80211_state nstate)
+ath_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg)
 {
-	struct ath_softc *sc = arg;
+	struct ifnet *ifp = &ic->ic_if;
+	struct ath_softc *sc = ifp->if_softc;
 	struct ath_hal *ah = sc->sc_ah;
-	struct ieee80211com *ic = &sc->sc_ic;
-	struct ifnet *ifp = &ic->ic_if;
 	struct ieee80211_node *ni;
 	int i, error;
 	u_int8_t *bssid;
 	u_int32_t rfilt;
-	enum ieee80211_state ostate;
-#ifdef AR_DEBUG
-	static const char *stname[] =
-	    { "INIT", "SCAN", "AUTH", "ASSOC", "RUN" };
-#endif /* AR_DEBUG */
 	static const HAL_LED_STATE leds[] = {
 	    HAL_LED_INIT,	/* IEEE80211_S_INIT */
 	    HAL_LED_SCAN,	/* IEEE80211_S_SCAN */
@@ -2179,17 +2174,18 @@
 	    HAL_LED_RUN, 	/* IEEE80211_S_RUN */
 	};
 
-	ostate = ic->ic_state;
-
-	DPRINTF(("%s: %s -> %s\n", __func__, stname[ostate], stname[nstate]));
+	DPRINTF(("%s: %s -> %s\n", __func__,
+		ieee80211_state_name[ic->ic_state],
+		ieee80211_state_name[nstate]));
 
 	ath_hal_setledstate(ah, leds[nstate]);	/* set LED */
 
 	if (nstate == IEEE80211_S_INIT) {
 		sc->sc_imask &= ~(HAL_INT_SWBA | HAL_INT_BMISS);
 		ath_hal_intrset(ah, sc->sc_imask);
-		error = 0;			/* cheat + use error return */
-		goto bad;
+		callout_stop(&sc->sc_scan_ch);
+		callout_stop(&sc->sc_cal_ch);
+		return (*sc->sc_newstate)(ic, nstate, arg);
 	}
 	ni = ic->ic_bss;
 	error = ath_chan_set(sc, ni->ni_chan);
@@ -2259,10 +2255,14 @@
 	 * Reset the rate control state.
 	 */
 	ath_rate_ctl_reset(sc, nstate);
-	return 0;
+	/*
+	 * Invoke the parent method to complete the work.
+	 */
+	return (*sc->sc_newstate)(ic, nstate, arg);
 bad:
 	callout_stop(&sc->sc_scan_ch);
 	callout_stop(&sc->sc_cal_ch);
+	/* NB: do not invoke the parent */
 	return error;
 }
 

==== //depot/projects/ia64/sys/dev/ath/if_athvar.h#3 (text+ko) ====

@@ -33,7 +33,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.2 2003/07/13 17:07:25 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.3 2003/07/20 21:38:20 sam Exp $
  */
 
 /*
@@ -78,6 +78,8 @@
 
 struct ath_softc {
 	struct ieee80211com	sc_ic;		/* IEEE 802.11 common */
+	int			(*sc_newstate)(struct ieee80211com *,
+					enum ieee80211_state, int);
 	device_t		sc_dev;
 	bus_space_tag_t		sc_st;		/* bus space tag */
 	bus_space_handle_t	sc_sh;		/* bus space handle */

==== //depot/projects/ia64/sys/dev/usb/usb_mem.c#2 (text+ko) ====

@@ -1,5 +1,5 @@
 /*	$NetBSD: usb_mem.c,v 1.26 2003/02/01 06:23:40 thorpej Exp $	*/
-/*	$FreeBSD: src/sys/dev/usb/usb_mem.c,v 1.1 2003/07/15 22:42:37 jmg Exp $	*/
+/*	$FreeBSD: src/sys/dev/usb/usb_mem.c,v 1.2 2003/07/21 02:41:01 jmg Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/usb/usb_mem.c,v 1.1 2003/07/15 22:42:37 jmg Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/usb/usb_mem.c,v 1.2 2003/07/21 02:41:01 jmg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -84,7 +84,7 @@
 #endif
 
 #define USB_MEM_SMALL 64
-#define USB_MEM_CHUNKS (PAGE_SIZE / 64)
+#define USB_MEM_CHUNKS (PAGE_SIZE / USB_MEM_SMALL)
 #define USB_MEM_BLOCK (USB_MEM_SMALL * USB_MEM_CHUNKS)
 
 /* This struct is overlayed on free fragments. */
@@ -256,6 +256,10 @@
 			return (err);
 		}
 		b->fullblock = 0;
+		/* XXX - override the tag, ok since we never free it */
+		b->tag = tag;
+		KASSERT(sizeof *f <= USB_MEM_SMALL, ("USB_MEM_SMALL(%d) is too small for struct usb_frag_dma(%d)\n",
+		    USB_MEM_SMALL, sizeof *f));
 		for (i = 0; i < USB_MEM_BLOCK; i += USB_MEM_SMALL) {
 			f = (struct usb_frag_dma *)((char *)b->kaddr + i);
 			f->block = b;

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

@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi.c,v 1.147 2003/07/03 10:16:40 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi.c,v 1.148 2003/07/20 21:37:32 sam Exp $");
 
 #define WI_HERMES_AUTOINC_WAR	/* Work around data write autoinc bug. */
 #define WI_HERMES_STATS_WAR	/* Work around stats counter bug. */
@@ -146,7 +146,7 @@
 static int  wi_read_rid(struct wi_softc *, int, void *, int *);
 static int  wi_write_rid(struct wi_softc *, int, void *, int);
 
-static int  wi_newstate(void *, enum ieee80211_state);
+static int  wi_newstate(struct ieee80211com *, enum ieee80211_state, int);
 
 static int  wi_scan_ap(struct wi_softc *, u_int16_t, u_int16_t);
 static void wi_scan_result(struct wi_softc *, int, int);
@@ -312,7 +312,6 @@
 	ic->ic_opmode = IEEE80211_M_STA;
 	ic->ic_caps = IEEE80211_C_PMGT | IEEE80211_C_AHDEMO;
 	ic->ic_state = IEEE80211_S_INIT;
-	ic->ic_newstate = wi_newstate;
 
 	/*
 	 * Query the card for available channels and setup the
@@ -452,6 +451,9 @@
 	 * Call MI attach routine.
 	 */
 	ieee80211_ifattach(ifp);
+	/* override state transition method */
+	sc->sc_newstate = ic->ic_newstate;
+	ic->ic_newstate = wi_newstate;
 	ieee80211_media_init(ifp, wi_media_change, wi_media_status);
 
 	return (0);
@@ -716,7 +718,7 @@
 	ifp->if_flags &= ~IFF_OACTIVE;
 	if (ic->ic_opmode == IEEE80211_M_AHDEMO ||
 	    ic->ic_opmode == IEEE80211_M_HOSTAP)
-		wi_newstate(sc, IEEE80211_S_RUN);
+		ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
 
 	/* Enable interrupts */
 	CSR_WRITE_2(sc, WI_INT_EN, WI_INTRS);
@@ -758,12 +760,13 @@
 void
 wi_stop(struct ifnet *ifp, int disable)
 {
+	struct ieee80211com *ic = (struct ieee80211com *) ifp;
 	struct wi_softc *sc = ifp->if_softc;
 	WI_LOCK_DECL();
 
 	WI_LOCK(sc);
 
-	ieee80211_new_state(ifp, IEEE80211_S_INIT, -1);
+	ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
 	if (sc->sc_enabled && !sc->wi_gone) {
 		CSR_WRITE_2(sc, WI_INT_EN, 0);
 		wi_cmd(sc, WI_CMD_DISABLE | sc->sc_portnum, 0, 0, 0);
@@ -996,10 +999,11 @@
 
 	if (sc->sc_syn_timer) {
 		if (--sc->sc_syn_timer == 0) {
+			struct ieee80211com *ic = (struct ieee80211com *) ifp;
 			DPRINTF2(("wi_watchdog: %d false syns\n",
 			    sc->sc_false_syns));
 			sc->sc_false_syns = 0;
-			ieee80211_new_state(ifp, IEEE80211_S_RUN, -1);
+			ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
 			sc->sc_syn_timer = 5;
 		}
 		ifp->if_timer = 1;
@@ -1244,7 +1248,7 @@
 	    sc->sc_false_syns >= WI_MAX_FALSE_SYNS)
 		return;
 
-	ieee80211_new_state(ifp, IEEE80211_S_RUN, -1);
+	ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
 }
 
 static void
@@ -1547,7 +1551,7 @@
 				break;
 			/* FALLTHROUGH */
 		case WI_INFO_LINK_STAT_AP_CHG:
-			ieee80211_new_state(ifp, IEEE80211_S_RUN, -1);
+			ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
 			break;
 		case WI_INFO_LINK_STAT_AP_INR:
 			sc->sc_flags &= ~WI_FLAGS_OUTRANGE;
@@ -1566,7 +1570,7 @@
 		case WI_INFO_LINK_STAT_DISCONNECTED:
 		case WI_INFO_LINK_STAT_ASSOC_FAILED:
 			if (ic->ic_opmode == IEEE80211_M_STA)
-				ieee80211_new_state(ifp, IEEE80211_S_INIT, -1);
+				ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
 			break;
 		}
 		break;
@@ -2519,30 +2523,25 @@
 }
 
 static int
-wi_newstate(void *arg, enum ieee80211_state nstate)
+wi_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg)
 {
-	struct wi_softc *sc = arg;
-	struct ieee80211com *ic = &sc->sc_ic;
+	struct ifnet *ifp = &ic->ic_if;
+	struct wi_softc *sc = ifp->if_softc;
 	struct ieee80211_node *ni = ic->ic_bss;
 	int buflen;
 	u_int16_t val;
 	struct wi_ssid ssid;
 	u_int8_t old_bssid[IEEE80211_ADDR_LEN];
-	enum ieee80211_state ostate;
-#ifdef WI_DEBUG
-	static const char *stname[] =
-	    { "INIT", "SCAN", "AUTH", "ASSOC", "RUN" };
-#endif /* WI_DEBUG */
 
-	ostate = ic->ic_state;
-	DPRINTF(("wi_newstate: %s -> %s\n", stname[ostate], stname[nstate]));
+	DPRINTF(("%s: %s -> %s\n", __func__,
+		ieee80211_state_name[ic->ic_state],
+		ieee80211_state_name[nstate]));
 
-	ic->ic_state = nstate;
 	switch (nstate) {
 	case IEEE80211_S_INIT:
 		ic->ic_flags &= ~IEEE80211_F_SIBSS;
 		sc->sc_flags &= ~WI_FLAGS_OUTRANGE;
-		return 0;
+		return (*sc->sc_newstate)(ic, nstate, arg);
 
 	case IEEE80211_S_RUN:
 		sc->sc_flags &= ~WI_FLAGS_OUTRANGE;
@@ -2584,8 +2583,8 @@
 		break;
 	}
 
-	/* skip standard ieee80211 handling */
-	return EINPROGRESS;
+	ic->ic_state = nstate;		/* NB: skip normal ieee80211 handling */
+	return 0;
 }
 
 static int

==== //depot/projects/ia64/sys/dev/wi/if_wivar.h#15 (text+ko) ====

@@ -31,7 +31,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/wi/if_wivar.h,v 1.18 2003/06/28 06:17:26 sam Exp $
+ * $FreeBSD: src/sys/dev/wi/if_wivar.h,v 1.19 2003/07/20 21:37:32 sam Exp $
  */
 
 #if 0
@@ -61,6 +61,8 @@
 
 struct wi_softc	{
 	struct ieee80211com	sc_ic;
+	int			(*sc_newstate)(struct ieee80211com *,
+					enum ieee80211_state, int);
 	device_t		sc_dev;
 #if __FreeBSD_version >= 500000
 	struct mtx		sc_mtx;

==== //depot/projects/ia64/sys/kern/kern_sig.c#61 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_sig.c,v 1.252 2003/07/17 22:52:55 davidxu Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_sig.c,v 1.253 2003/07/21 00:26:52 davidxu Exp $");
 
 #include "opt_compat.h"
 #include "opt_ktrace.h"
@@ -1515,6 +1515,9 @@
 			if (td->td_upcall)
 				td->td_upcall->ku_flags |= KUF_DOUPCALL;
 			mtx_unlock_spin(&sched_lock);
+		} else {
+			/* UTS caused a sync signal */
+			sigexit(td, SIGILL);
 		}
 	} else {
 		PROC_LOCK(p);
@@ -1540,6 +1543,7 @@
 			error = copyout(&siginfo, &td->td_mailbox->tm_syncsig,
 			    sizeof(siginfo));
 			PROC_LOCK(p);
+			/* UTS memory corrupted */
 			if (error)
 				sigexit(td, SIGILL);
 			SIGADDSET(td->td_sigmask, sig);
@@ -2282,7 +2286,8 @@
 #endif
 	_STOPEVENT(p, S_SIG, sig);
 
-	if (action == SIG_DFL) {
+	if (!(td->td_flags & TDF_SA && td->td_mailbox) &&
+	    action == SIG_DFL) {
 		/*
 		 * Default action, where the default is to kill
 		 * the process.  (Other cases were ignored above.)
@@ -2291,6 +2296,13 @@
 		sigexit(td, sig);
 		/* NOTREACHED */
 	} else {
+		if (td->td_flags & TDF_SA && td->td_mailbox) {
+			if (sig == SIGKILL) {
+				mtx_unlock(&ps->ps_mtx);
+				sigexit(td, sig);
+			}
+		}
+
 		/*
 		 * If we get here, the signal must be caught.
 		 */
@@ -2333,7 +2345,7 @@
 			p->p_code = 0;
 			p->p_sig = 0;
 		}
-		if (td->td_flags & TDF_SA)
+		if (td->td_flags & TDF_SA && td->td_mailbox)
 			thread_signal_add(curthread, sig);
 		else
 			(*p->p_sysent->sv_sendsig)(action, sig,

==== //depot/projects/ia64/sys/net/if_media.h#11 (text+ko) ====

@@ -1,5 +1,5 @@
 /*	$NetBSD: if_media.h,v 1.3 1997/03/26 01:19:27 thorpej Exp $	*/
-/* $FreeBSD: src/sys/net/if_media.h,v 1.22 2003/06/25 15:03:05 sam Exp $ */
+/* $FreeBSD: src/sys/net/if_media.h,v 1.23 2003/07/21 02:48:35 sam Exp $ */
 
 /*
  * Copyright (c) 1997
@@ -194,6 +194,7 @@
 #define	IFM_IEEE80211_IBSS	0x00000400	/* Operate in IBSS mode */
 #define	IFM_IEEE80211_IBSSMASTER 0x00000800	/* Operate as an IBSS master */
 #define	IFM_IEEE80211_TURBO	0x00001000	/* Operate in turbo mode */
+#define	IFM_IEEE80211_MONITOR	0x00002000	/* Operate in monitor mode */
 /* operating mode for multi-mode devices */
 #define	IFM_IEEE80211_11A	1	/* 5Ghz, OFDM mode */
 #define	IFM_IEEE80211_11B	2	/* Direct Sequence mode */
@@ -443,6 +444,7 @@
 	{ IFM_IEEE80211_IBSS, "ibss" },					\
 	{ IFM_IEEE80211_IBSSMASTER, "ibss-master" },			\
 	{ IFM_IEEE80211_TURBO, "turbo" },				\
+	{ IFM_IEEE80211_MONITOR, "monitor" },				\
 	{ 0, NULL },							\
 }
 

==== //depot/projects/ia64/sys/net80211/ieee80211.c#4 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/net80211/ieee80211.c,v 1.4 2003/06/29 20:10:54 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/net80211/ieee80211.c,v 1.6 2003/07/21 02:49:42 sam Exp $");
 
 /*
  * IEEE 802.11 generic handler
@@ -275,6 +275,8 @@
 			ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_HOSTAP);
 		if (ic->ic_caps & IEEE80211_C_AHDEMO)
 			ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_ADHOC | IFM_FLAG0);
+		if (ic->ic_caps & IEEE80211_C_MONITOR)
+			ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_MONITOR);
 		if (mode == IEEE80211_MODE_AUTO)
 			continue;
 		if_printf(ifp, "%s rates: ", ieee80211_phymode_name[mode]);
@@ -294,6 +296,8 @@
 				ADD(ic, mword, mopt | IFM_IEEE80211_HOSTAP);
 			if (ic->ic_caps & IEEE80211_C_AHDEMO)
 				ADD(ic, mword, mopt | IFM_IEEE80211_ADHOC | IFM_FLAG0);
+			if (ic->ic_caps & IEEE80211_C_MONITOR)
+				ADD(ic, mword, mopt | IFM_IEEE80211_MONITOR);
 			/*
 			 * Add rate to the collection of all rates.
 			 */
@@ -325,6 +329,8 @@
 			ADD(ic, mword, IFM_IEEE80211_HOSTAP);
 		if (ic->ic_caps & IEEE80211_C_AHDEMO)
 			ADD(ic, mword, IFM_IEEE80211_ADHOC | IFM_FLAG0);
+		if (ic->ic_caps & IEEE80211_C_MONITOR)
+			ADD(ic, mword, IFM_IEEE80211_MONITOR);
 	}
 	ieee80211_media_status(ifp, &imr);
 	ifmedia_set(&ic->ic_media, imr.ifm_active);
@@ -441,6 +447,8 @@
 		newopmode = IEEE80211_M_HOSTAP;
 	else if (ime->ifm_media & IFM_IEEE80211_ADHOC)
 		newopmode = IEEE80211_M_IBSS;
+	else if (ime->ifm_media & IFM_IEEE80211_MONITOR)
+		newopmode = IEEE80211_M_MONITOR;
 	else
 		newopmode = IEEE80211_M_STA;
 
@@ -486,6 +494,7 @@
 		case IEEE80211_M_AHDEMO:
 		case IEEE80211_M_HOSTAP:
 		case IEEE80211_M_STA:
+		case IEEE80211_M_MONITOR:
 			ic->ic_flags &= ~IEEE80211_F_IBSSON;
 			break;
 		case IEEE80211_M_IBSS:
@@ -534,6 +543,9 @@
 	case IEEE80211_M_HOSTAP:
 		imr->ifm_active |= IFM_IEEE80211_HOSTAP;
 		break;
+	case IEEE80211_M_MONITOR:
+		imr->ifm_active |= IFM_IEEE80211_MONITOR;
+		break;
 	}
 	switch (ic->ic_curmode) {
 	case IEEE80211_MODE_11A:
@@ -558,7 +570,7 @@
 	struct ieee80211com *ic = (void *)ifp;
 
 	if (ic->ic_mgt_timer && --ic->ic_mgt_timer == 0)
-		ieee80211_new_state(ifp, IEEE80211_S_SCAN, -1);
+		ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
 	if (ic->ic_inact_timer && --ic->ic_inact_timer == 0)
 		ieee80211_timeout_nodes(ic);
 

==== //depot/projects/ia64/sys/net80211/ieee80211_input.c#3 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.4 2003/06/27 05:13:52 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.6 2003/07/21 02:49:42 sam Exp $");
 
 #include "opt_inet.h"
 
@@ -138,6 +138,9 @@
 				ni = ieee80211_ref_node(ic->ic_bss);
 			}
 			break;
+		case IEEE80211_M_MONITOR:
+			/* NB: this should collect everything */
+			goto out;
 		default:

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list