PERFORCE change 42025 for review

John Baldwin jhb at FreeBSD.org
Tue Nov 11 12:19:24 PST 2003


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

Change 42025 by jhb at jhb_blue on 2003/11/11 12:18:24

	IFC @42022.

Affected files ...

.. //depot/projects/smpng/sys/boot/i386/boot2/boot2.c#19 integrate
.. //depot/projects/smpng/sys/boot/sparc64/loader/metadata.c#10 integrate
.. //depot/projects/smpng/sys/conf/files#92 integrate
.. //depot/projects/smpng/sys/conf/files.sparc64#32 integrate
.. //depot/projects/smpng/sys/conf/options.i386#34 integrate
.. //depot/projects/smpng/sys/conf/options.pc98#33 integrate
.. //depot/projects/smpng/sys/crypto/rijndael/rijndael.c#1 branch
.. //depot/projects/smpng/sys/crypto/rijndael/rijndael.h#2 integrate
.. //depot/projects/smpng/sys/dev/acpica/Osd/OsdInterrupt.c#8 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpivar.h#31 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-all.c#42 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-all.h#19 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-disk.c#34 integrate
.. //depot/projects/smpng/sys/dev/ata/atapi-cam.c#15 integrate
.. //depot/projects/smpng/sys/dev/ata/atapi-cd.c#41 integrate
.. //depot/projects/smpng/sys/dev/ata/atapi-fd.c#19 integrate
.. //depot/projects/smpng/sys/dev/ata/atapi-tape.c#22 integrate
.. //depot/projects/smpng/sys/dev/bge/if_bge.c#36 integrate
.. //depot/projects/smpng/sys/dev/bge/if_bgereg.h#21 integrate
.. //depot/projects/smpng/sys/dev/fb/creator.c#2 integrate
.. //depot/projects/smpng/sys/dev/sound/pci/cmi.c#17 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/dsp.c#17 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/mixer.c#12 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_sparc64.c#3 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_kbd_sun.c#1 branch
.. //depot/projects/smpng/sys/dev/uart/uart_kbd_sun.h#1 branch
.. //depot/projects/smpng/sys/dev/uart/uart_kbd_sun_tables.h#1 branch
.. //depot/projects/smpng/sys/fs/fifofs/fifo_vnops.c#24 integrate
.. //depot/projects/smpng/sys/i386/acpica/madt.c#3 integrate
.. //depot/projects/smpng/sys/i386/conf/NOTES#69 integrate
.. //depot/projects/smpng/sys/i386/i386/mp_machdep.c#57 integrate
.. //depot/projects/smpng/sys/i386/i386/mptable.c#3 integrate
.. //depot/projects/smpng/sys/ia64/ia64/machdep.c#71 integrate
.. //depot/projects/smpng/sys/ia64/ia64/syscall.S#7 integrate
.. //depot/projects/smpng/sys/kern/kern_ktrace.c#35 integrate
.. //depot/projects/smpng/sys/kern/kern_mac.c#31 integrate
.. //depot/projects/smpng/sys/kern/subr_taskqueue.c#13 integrate
.. //depot/projects/smpng/sys/kern/vfs_bio.c#53 integrate
.. //depot/projects/smpng/sys/net/if_loop.c#24 integrate
.. //depot/projects/smpng/sys/netgraph/netgraph.h#5 integrate
.. //depot/projects/smpng/sys/netgraph/ng_UI.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_async.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_bpf.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_cisco.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_device.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_echo.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_eiface.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_etf.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_fec.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_frame_relay.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_hole.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_iface.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_ip_input.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_ksocket.h#5 integrate
.. //depot/projects/smpng/sys/netgraph/ng_l2tp.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_lmi.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_message.h#5 integrate
.. //depot/projects/smpng/sys/netgraph/ng_mppc.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_parse.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_ppp.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_pppoe.h#6 integrate
.. //depot/projects/smpng/sys/netgraph/ng_pptpgre.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_rfc1490.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_sample.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_socket.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_socketvar.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_source.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_split.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_tee.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/ng_tty.h#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_vjc.h#3 integrate
.. //depot/projects/smpng/sys/netinet/in_pcb.c#37 integrate
.. //depot/projects/smpng/sys/netinet/tcp_syncache.c#23 integrate
.. //depot/projects/smpng/sys/netinet6/esp_rijndael.c#4 integrate
.. //depot/projects/smpng/sys/netkey/key.c#20 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_vnops.c#34 integrate
.. //depot/projects/smpng/sys/sparc64/conf/GENERIC#35 integrate
.. //depot/projects/smpng/sys/sparc64/creator/creator_upa.c#2 integrate
.. //depot/projects/smpng/sys/sparc64/include/cache.h#9 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/cache.c#13 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/cheetah.c#5 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/machdep.c#59 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/spitfire.c#5 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/support.S#7 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/trap.c#56 integrate

Differences ...

==== //depot/projects/smpng/sys/boot/i386/boot2/boot2.c#19 (text+ko) ====

@@ -14,12 +14,14 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.64 2003/08/25 23:28:31 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.66 2003/11/11 06:27:34 bde Exp $");
 
 #include <sys/param.h>
 #include <sys/disklabel.h>
 #include <sys/diskmbr.h>
 #include <sys/dirent.h>
+#include <sys/reboot.h>
+
 #include <machine/bootinfo.h>
 #include <machine/elf.h>
 
@@ -51,7 +53,7 @@
 #define RBX_NOINTR	0x1c	/* -n */
 #define RBX_DUAL	0x1d	/* -D */
 #define RBX_PROBEKBD	0x1e	/* -P */
-/* 0x1f is reserved for the historical RB_BOOTINFO option */
+/* 0x1f is reserved for the RB_BOOTINFO flag. */
 
 /* pass: -a, -s, -r, -d, -c, -v, -h, -C, -g, -m, -p, -D */
 #define RBX_MASK	0x2005ffff
@@ -359,7 +361,7 @@
     bootinfo.bi_esymtab = VTOP(p);
     bootinfo.bi_kernelname = VTOP(kname);
     bootinfo.bi_bios_dev = dsk.drive;
-    __exec((caddr_t)addr, opts & RBX_MASK,
+    __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
 	   MAKEBOOTDEV(dev_maj[dsk.type], 0, dsk.slice, dsk.unit, dsk.part),
 	   0, 0, 0, VTOP(&bootinfo));
 }

==== //depot/projects/smpng/sys/boot/sparc64/loader/metadata.c#10 (text+ko) ====

@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  *	from: FreeBSD: src/sys/boot/i386/libi386/bootinfo.c,v 1.29
- * $FreeBSD: src/sys/boot/sparc64/loader/metadata.c,v 1.9 2003/04/30 22:00:16 peter Exp $
+ * $FreeBSD: src/sys/boot/sparc64/loader/metadata.c,v 1.10 2003/11/11 18:01:44 jake Exp $
  */
 
 #include <stand.h>
@@ -67,6 +67,8 @@
 int
 md_getboothowto(char *kargs)
 {
+    char	buf[32];
+    phandle_t	options;
     char	*cp;
     int		howto;
     int		active;
@@ -126,10 +128,10 @@
     for (i = 0; howto_names[i].ev != NULL; i++)
 	if (getenv(howto_names[i].ev) != NULL)
 	    howto |= howto_names[i].mask;
-    if (!strcmp(getenv("console"), "comconsole"))
-	howto |= RB_SERIAL;
-    if (!strcmp(getenv("console"), "nullconsole"))
-	howto |= RB_MUTE;
+    options = OF_finddevice("/options");
+    OF_getprop(options, "output-device", buf, sizeof(buf));
+    if (strcmp(buf, "ttya") == 0 || strcmp(buf, "ttyb") == 0)
+	    howto |= RB_SERIAL;
     return(howto);
 }
 

==== //depot/projects/smpng/sys/conf/files#92 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.846 2003/11/10 10:39:14 ume Exp $
+# $FreeBSD: src/sys/conf/files,v 1.847 2003/11/11 18:58:53 ume Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -207,7 +207,7 @@
 crypto/des/des_ecb.c	optional ipsec ipsec_esp
 crypto/des/des_setkey.c	optional ipsec ipsec_esp
 crypto/rijndael/rijndael-alg-fst.c	optional ipsec
-crypto/rijndael/rijndael-api-fst.c	optional ipsec
+crypto/rijndael/rijndael.c	optional ipsec
 opencrypto/rmd160.c	optional ipsec
 crypto/sha1.c		optional ipsec
 crypto/sha2/sha2.c	optional ipsec

==== //depot/projects/smpng/sys/conf/files.sparc64#32 (text+ko) ====

@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $FreeBSD: src/sys/conf/files.sparc64,v 1.46 2003/09/06 23:23:25 marcel Exp $
+# $FreeBSD: src/sys/conf/files.sparc64,v 1.47 2003/11/11 07:33:24 jake Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -33,6 +33,7 @@
 dev/syscons/syscons.c		optional	sc
 dev/syscons/sysmouse.c		optional	sc
 dev/uart/uart_cpu_sparc64.c	optional	uart
+dev/uart/uart_kbd_sun.c		optional	uart sc
 geom/geom_bsd.c			standard
 geom/geom_bsd_enc.c		standard
 geom/geom_sunlabel.c		standard

==== //depot/projects/smpng/sys/conf/options.i386#34 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options.i386,v 1.201 2003/11/07 15:14:53 bde Exp $
+# $FreeBSD: src/sys/conf/options.i386,v 1.202 2003/11/11 17:14:25 jhb Exp $
 # Options specific to the i386 platform kernels
 
 AUTO_EOI_1		opt_auto_eoi.h
@@ -7,6 +7,7 @@
 COMPAT_OLDISA
 I586_PMC_GUPROF		opt_i586_guprof.h
 MAXMEM
+MPTABLE_FORCE_HTT
 NO_MIXED_MODE
 PERFMON
 DISABLE_PSE		opt_pmap.h

==== //depot/projects/smpng/sys/conf/options.pc98#33 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options.pc98,v 1.169 2003/11/04 12:19:54 nyan Exp $
+# $FreeBSD: src/sys/conf/options.pc98,v 1.170 2003/11/11 17:14:25 jhb Exp $
 # Options specific to the pc98 platform kernels
 
 AUTO_EOI_1		opt_auto_eoi.h
@@ -7,6 +7,7 @@
 COMPAT_OLDISA
 I586_PMC_GUPROF		opt_i586_guprof.h
 MAXMEM
+MPTABLE_FORCE_HTT
 NO_MIXED_MODE
 PERFMON
 DISABLE_PSE		opt_pmap.h

==== //depot/projects/smpng/sys/crypto/rijndael/rijndael.h#2 (text+ko) ====

@@ -1,3 +1,52 @@
-/*	$KAME: rijndael.h,v 1.2 2000/10/02 17:14:27 itojun Exp $	*/
+/*	$KAME: rijndael.h,v 1.6 2003/08/28 08:36:32 itojun Exp $	*/
+/*	$FreeBSD: src/sys/crypto/rijndael/rijndael.h,v 1.2 2003/11/11 18:58:53 ume Exp $	*/
+
+/**
+ * rijndael-alg-fst.h
+ *
+ * @version 3.0 (December 2000)
+ *
+ * Optimised ANSI C code for the Rijndael cipher (now AES)
+ *
+ * @author Vincent Rijmen <vincent.rijmen at esat.kuleuven.ac.be>
+ * @author Antoon Bosselaers <antoon.bosselaers at esat.kuleuven.ac.be>
+ * @author Paulo Barreto <paulo.barreto at terra.com.br>
+ *
+ * This code is hereby placed in the public domain.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __RIJNDAEL_H
+#define	__RIJNDAEL_H
 
+#include <crypto/rijndael/rijndael-alg-fst.h>
 #include <crypto/rijndael/rijndael-api-fst.h>
+
+/* XXX: avoid conflicts with opencrypto */
+#define	rijndael_set_key	_rijndael_set_key
+#define	rijndael_decrypt	_rijndael_decrypt
+#define	rijndael_encrypt	_rijndael_encrypt
+
+typedef struct {
+	int	decrypt;
+	int	Nr;		/* key-length-dependent number of rounds */
+	uint32_t ek[4 * (RIJNDAEL_MAXNR + 1)];	/* encrypt key schedule */
+	uint32_t dk[4 * (RIJNDAEL_MAXNR + 1)];	/* decrypt key schedule */
+} rijndael_ctx;
+
+void	rijndael_set_key(rijndael_ctx *, const u_char *, int);
+void	rijndael_decrypt(const rijndael_ctx *, const u_char *, u_char *);
+void	rijndael_encrypt(const rijndael_ctx *, const u_char *, u_char *);
+
+#endif /* __RIJNDAEL_H */

==== //depot/projects/smpng/sys/dev/acpica/Osd/OsdInterrupt.c#8 (text+ko) ====

@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/acpica/Osd/OsdInterrupt.c,v 1.12 2002/10/16 17:28:53 jhb Exp $
+ *	$FreeBSD: src/sys/dev/acpica/Osd/OsdInterrupt.c,v 1.13 2003/11/11 18:12:12 jhb Exp $
  */
 
 /*
@@ -46,6 +46,8 @@
 static void		InterruptWrapper(void *arg);
 static OSD_HANDLER	InterruptHandler;
 
+static UINT32 InterruptOverride = 0;
+
 /*
  * XXX this does not correctly free resources in the case of partically successful
  * attachment.
@@ -81,6 +83,12 @@
 	return_ACPI_STATUS(AE_ALREADY_EXISTS);
     }
     sc->acpi_irq_rid = 0;
+    if (InterruptOverride != 0) {
+	    device_printf(sc->acpi_dev,
+		"Overriding SCI Interrupt from IRQ %u to IRQ %u\n",
+		InterruptNumber, InterruptOverride);
+	    InterruptNumber = InterruptOverride;
+    }
     bus_set_resource(sc->acpi_dev, SYS_RES_IRQ, 0, InterruptNumber, 1);
     if ((sc->acpi_irq = bus_alloc_resource(sc->acpi_dev, SYS_RES_IRQ, &sc->acpi_irq_rid, 0, ~0, 1, 
 					   RF_SHAREABLE | RF_ACTIVE)) == NULL) {
@@ -123,6 +131,16 @@
     return_ACPI_STATUS(AE_OK);
 }
 
+ACPI_STATUS
+acpi_OverrideInterruptLevel(UINT32 InterruptNumber)
+{
+
+	if (InterruptOverride != 0)
+		return_ACPI_STATUS(AE_ALREADY_EXISTS);
+	InterruptOverride = InterruptNumber;
+	return_ACPI_STATUS(AE_OK);
+}
+
 /*
  * Interrupt handler wrapper.
  */

==== //depot/projects/smpng/sys/dev/acpica/acpivar.h#31 (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/acpivar.h,v 1.46 2003/10/25 05:03:24 njl Exp $
+ *	$FreeBSD: src/sys/dev/acpica/acpivar.h,v 1.47 2003/11/11 18:12:12 jhb Exp $
  */
 
 #include "bus_if.h"
@@ -184,6 +184,7 @@
 						 ACPI_RESOURCE **resp);
 extern ACPI_STATUS	acpi_AppendBufferResource(ACPI_BUFFER *buf,
 						  ACPI_RESOURCE *res);
+extern ACPI_STATUS	acpi_OverrideInterruptLevel(UINT32 InterruptNumber);
 extern ACPI_STATUS	acpi_SetIntrModel(int model);
 extern ACPI_STATUS	acpi_SetSleepState(struct acpi_softc *sc, int state);
 extern ACPI_STATUS	acpi_Enable(struct acpi_softc *sc);

==== //depot/projects/smpng/sys/dev/ata/ata-all.c#42 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.196 2003/11/03 09:25:02 des Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.197 2003/11/11 14:55:35 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -73,6 +73,16 @@
 static void bpack(int8_t *, int8_t *, int);
 static void ata_init(void);
 
+/* global vars */
+struct intr_config_hook *ata_delayed_attach = NULL;
+devclass_t ata_devclass;
+int ata_wc = 1;	 
+
+/* local vars */
+static MALLOC_DEFINE(M_ATA, "ATA generic", "ATA driver generic layer");
+static int ata_dma = 1;
+static int atapi_dma = 0;
+
 /* sysctl vars */
 SYSCTL_NODE(_hw, OID_AUTO, ata, CTLFLAG_RD, 0, "ATA driver parameters");
 TUNABLE_INT("hw.ata.ata_dma", &ata_dma);
@@ -84,17 +94,7 @@
 TUNABLE_INT("hw.ata.atapi_dma", &atapi_dma);
 SYSCTL_INT(_hw_ata, OID_AUTO, atapi_dma, CTLFLAG_RDTUN, &atapi_dma, 0,
 	   "ATAPI device DMA mode control");
-int ata_dma = 1;
-int ata_wc = 1;	 
-int atapi_dma = 0;
 
-/* global vars */
-struct intr_config_hook *ata_delayed_attach = NULL;
-devclass_t ata_devclass;
-
-/* local vars */
-static MALLOC_DEFINE(M_ATA, "ATA generic", "ATA driver generic layer");
-
 /*
  * newbus device interface related functions
  */
@@ -675,6 +675,23 @@
 	    }
 	}
     }
+
+    /* setup basic transfer mode by setting PIO mode and DMA if supported */
+    if (ch->device[MASTER].attach) {
+	ch->device[MASTER].setmode(&ch->device[MASTER], ATA_PIO_MAX);
+	if ((((ch->devices & ATA_ATAPI_MASTER) && atapi_dma &&
+	      (ch->device[MASTER].param->config&ATA_DRQ_MASK) != ATA_DRQ_INTR)||
+	     ((ch->devices & ATA_ATA_MASTER) && ata_dma)) && ch->dma) 
+	    ch->device[MASTER].setmode(&ch->device[MASTER], ATA_DMA_MAX);
+
+    }
+    if (ch->device[SLAVE].attach) {
+	ch->device[SLAVE].setmode(&ch->device[SLAVE], ATA_PIO_MAX);
+	if ((((ch->devices & ATA_ATAPI_SLAVE) && atapi_dma &&
+	      (ch->device[SLAVE].param->config&ATA_DRQ_MASK) != ATA_DRQ_INTR) ||
+	     ((ch->devices & ATA_ATA_SLAVE) && ata_dma)) && ch->dma) 
+	    ch->device[SLAVE].setmode(&ch->device[SLAVE], ATA_DMA_MAX);
+    }
 }
 
 static void 

==== //depot/projects/smpng/sys/dev/ata/ata-all.h#19 (text+ko) ====

@@ -25,7 +25,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/dev/ata/ata-all.h,v 1.66 2003/10/21 19:20:36 sos Exp $
+ * $FreeBSD: src/sys/dev/ata/ata-all.h,v 1.67 2003/11/11 14:55:35 sos Exp $
  */
 
 /* ATA register defines */
@@ -345,7 +345,7 @@
 /* externs */
 extern devclass_t ata_devclass;
 extern struct intr_config_hook *ata_delayed_attach;
-extern int ata_dma, ata_wc, atapi_dma;
+extern int ata_wc;
  
 /* public prototypes */
 /* ata-all.c: */

==== //depot/projects/smpng/sys/dev/ata/ata-disk.c#34 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-disk.c,v 1.162 2003/11/03 09:25:02 des Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-disk.c,v 1.164 2003/11/11 14:55:35 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -137,12 +137,6 @@
 	    adp->max_iosize = secsperint * DEV_BSIZE;
     }
 
-    /* use DMA if allowed and if drive/controller supports it */
-    if (ata_dma && atadev->channel->dma) 
-	atadev->setmode(atadev, ATA_DMA_MAX);
-    else 
-	atadev->setmode(atadev, ATA_PIO_MAX);
-
     /* setup the function ptrs */
     atadev->detach = ad_detach;
     atadev->start = ad_start;
@@ -331,28 +325,34 @@
 
     bzero(&request, sizeof(struct ata_request));
     request.device = adp->device;
-    request.data = virtual;
-    request.bytecount = length;
-    request.transfersize = min(length, adp->max_iosize);
 
-    request.flags = ATA_R_WRITE;
-    if (adp->max_iosize > DEV_BSIZE)
-	request.u.ata.command = ATA_WRITE_MUL;
-    else
-	request.u.ata.command = ATA_WRITE;
-    request.u.ata.lba = offset / DEV_BSIZE;
-    request.u.ata.count = request.bytecount / DEV_BSIZE;
+    if (length) {
+	request.data = virtual;
+	request.bytecount = length;
+	request.transfersize = min(length, adp->max_iosize);
+	request.flags = ATA_R_WRITE;
+	if (adp->max_iosize > DEV_BSIZE)
+	    request.u.ata.command = ATA_WRITE_MUL;
+	else
+	    request.u.ata.command = ATA_WRITE;
+	request.u.ata.lba = offset / DEV_BSIZE;
+	request.u.ata.count = request.bytecount / DEV_BSIZE;
+    }
+    else {
+	request.u.ata.command = ATA_FLUSHCACHE;
+	request.flags = ATA_R_CONTROL;
+    }
 
-    if (adp->device->channel->hw.transaction(&request) == ATA_OP_FINISHED)
+    if (request.device->channel->hw.transaction(&request) == ATA_OP_CONTINUES) {
+	while (request.device->channel->running == &request &&
+	       !(request.status & ATA_S_ERROR)) {
+	    DELAY(20);
+	    request.device->channel->running = &request;
+	    request.device->channel->hw.interrupt(request.device->channel);
+	}
+    }
+    if (request.status & ATA_S_ERROR)
 	return EIO;
-    while (request.bytecount > request.donecount) {
-	DELAY(20);
-	adp->device->channel->running = &request;
-	adp->device->channel->hw.interrupt(adp->device->channel);
-	adp->device->channel->running = NULL;
-	if (request.status & ATA_S_ERROR)
-	    return EIO;
-    }
     return 0;
 }
 

==== //depot/projects/smpng/sys/dev/ata/atapi-cam.c#15 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cam.c,v 1.27 2003/11/09 20:46:08 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cam.c,v 1.28 2003/11/11 14:55:35 sos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -227,11 +227,6 @@
 		     2 * device_get_unit(atp->channel->dev) +
 		     (atp->unit == ATA_MASTER) ? 0 : 1);
 	atp->softc = (void *)scp;
-	if (atapi_dma && atp->channel->dma &&
-	    (atp->param->config & ATA_DRQ_MASK) != ATA_DRQ_INTR)
-	    atp->setmode(atp, ATA_DMA_MAX);
-	else
-	    atp->setmode(atp, ATA_PIO_MAX);
     }
 }
 

==== //depot/projects/smpng/sys/dev/ata/atapi-cd.c#41 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.153 2003/11/09 10:11:15 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.154 2003/11/11 14:55:35 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -171,13 +171,6 @@
     else 
 	g_post_event(acd_geom_create, cdp, M_WAITOK, NULL);
 
-    /* use DMA if allowed and if drive/controller supports it */
-    if (atapi_dma && atadev->channel->dma &&
-	(atadev->param->config & ATA_DRQ_MASK) != ATA_DRQ_INTR)
-	atadev->setmode(atadev, ATA_DMA_MAX);
-    else
-	atadev->setmode(atadev, ATA_PIO_MAX);
-
     /* setup the function ptrs */
     atadev->detach = acd_detach;
     atadev->start = acd_start;

==== //depot/projects/smpng/sys/dev/ata/atapi-fd.c#19 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-fd.c,v 1.88 2003/08/25 09:01:49 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-fd.c,v 1.89 2003/11/11 14:55:35 sos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -87,13 +87,6 @@
 	return;
     }
 
-    /* use DMA if allowed and if drive/controller supports it */
-    if (atapi_dma && atadev->channel->dma &&
-	(atadev->param->config & ATA_DRQ_MASK) != ATA_DRQ_INTR)
-	atadev->setmode(atadev, ATA_DMA_MAX);
-    else
-	atadev->setmode(atadev, ATA_PIO_MAX);
-
     /* setup the function ptrs */
     atadev->detach = afd_detach;
     atadev->start = afd_start;

==== //depot/projects/smpng/sys/dev/ata/atapi-tape.c#22 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-tape.c,v 1.83 2003/08/25 09:01:49 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-tape.c,v 1.84 2003/11/11 14:55:36 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -148,13 +148,6 @@
 	dev->si_iosize_max = DFLTPHYS;
     stp->dev2 = dev;
 
-    /* use DMA if allowed and if drive/controller supports it */
-    if (atapi_dma && atadev->channel->dma &&
-	(atadev->param->config & ATA_DRQ_MASK) != ATA_DRQ_INTR)
-	atadev->setmode(atadev, ATA_DMA_MAX);
-    else
-	atadev->setmode(atadev, ATA_PIO_MAX);
-
     /* setup the function ptrs */ 
     atadev->detach = ast_detach;
     atadev->start = ast_start;

==== //depot/projects/smpng/sys/dev/bge/if_bge.c#36 (text+ko) ====

@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.57 2003/10/31 18:31:57 brooks Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.58 2003/11/11 17:57:03 sam Exp $");
 
 /*
  * Broadcom BCM570x family gigabit ethernet driver for FreeBSD.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.57 2003/10/31 18:31:57 brooks Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.58 2003/11/11 17:57:03 sam Exp $");
 
 #include <sys/param.h>
 #include <sys/endian.h>
@@ -186,6 +186,7 @@
 static void bge_txeof		(struct bge_softc *);
 static void bge_rxeof		(struct bge_softc *);
 
+static void bge_tick_locked	(struct bge_softc *);
 static void bge_tick		(void *);
 static void bge_stats_update	(struct bge_softc *);
 static void bge_stats_update_regs
@@ -194,8 +195,10 @@
 					u_int32_t *);
 
 static void bge_intr		(void *);
+static void bge_start_locked	(struct ifnet *);
 static void bge_start		(struct ifnet *);
 static int bge_ioctl		(struct ifnet *, u_long, caddr_t);
+static void bge_init_locked	(struct bge_softc *);
 static void bge_init		(void *);
 static void bge_stop		(struct bge_softc *);
 static void bge_watchdog		(struct ifnet *);
@@ -1156,6 +1159,8 @@
 	u_int32_t hashes[4] = { 0, 0, 0, 0 };
 	int h, i;
 
+	BGE_LOCK_ASSERT(sc);
+
 	ifp = &sc->arpcom.ac_if;
 
 	if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
@@ -2227,15 +2232,12 @@
 bge_attach(dev)
 	device_t dev;
 {
-	int s;
 	struct ifnet *ifp;
 	struct bge_softc *sc;
 	u_int32_t hwcfg = 0;
 	u_int32_t mac_addr = 0;
 	int unit, error = 0, rid;
 
-	s = splimp();
-
 	sc = device_get_softc(dev);
 	unit = device_get_unit(dev);
 	sc->bge_dev = dev;
@@ -2272,17 +2274,10 @@
 		goto fail;
 	}
 
-	error = bus_setup_intr(dev, sc->bge_irq, INTR_TYPE_NET,
-	   bge_intr, sc, &sc->bge_intrhand);
+	sc->bge_unit = unit;
 
-	if (error) {
-		bge_release_resources(sc);
-		printf("bge%d: couldn't set up irq\n", unit);
-		goto fail;
-	}
+	BGE_LOCK_INIT(sc, device_get_nameunit(dev));
 
-	sc->bge_unit = unit;
-
 	/* Try to reset the chip. */
 	bge_reset(sc);
 
@@ -2450,11 +2445,20 @@
 	 * Call MI attach routine.
 	 */
 	ether_ifattach(ifp, sc->arpcom.ac_enaddr);
-	callout_handle_init(&sc->bge_stat_ch);
+	callout_init(&sc->bge_stat_ch, CALLOUT_MPSAFE);
+
+	/*
+	 * Hookup IRQ last.
+	 */
+	error = bus_setup_intr(dev, sc->bge_irq, INTR_TYPE_NET | INTR_MPSAFE,
+	   bge_intr, sc, &sc->bge_intrhand);
+
+	if (error) {
+		bge_release_resources(sc);
+		printf("bge%d: couldn't set up irq\n", unit);
+	}
 
 fail:
-	splx(s);
-
 	return(error);
 }
 
@@ -2464,16 +2468,16 @@
 {
 	struct bge_softc *sc;
 	struct ifnet *ifp;
-	int s;
-
-	s = splimp();
 
 	sc = device_get_softc(dev);
 	ifp = &sc->arpcom.ac_if;
 
-	ether_ifdetach(ifp);
+	BGE_LOCK(sc);
 	bge_stop(sc);
 	bge_reset(sc);
+	BGE_UNLOCK(sc);
+
+	ether_ifdetach(ifp);
 
 	if (sc->bge_tbi) {
 		ifmedia_removeall(&sc->bge_ifmedia);
@@ -2486,8 +2490,6 @@
 	if (sc->bge_asicrev != BGE_ASICREV_BCM5705)
 		bge_free_jumbo_mem(sc);
 
-	splx(s);
-
 	return(0);
 }
 
@@ -2517,6 +2519,9 @@
 
 	bge_dma_free(sc);
 
+	if (mtx_initialized(&sc->bge_mtx))	/* XXX */
+		BGE_LOCK_DESTROY(sc);
+
         return;
 }
 
@@ -2621,6 +2626,8 @@
 	struct ifnet *ifp;
 	int stdcnt = 0, jumbocnt = 0;
 
+	BGE_LOCK_ASSERT(sc);
+
 	ifp = &sc->arpcom.ac_if;
 
 	bus_dmamap_sync(sc->bge_cdata.bge_rx_return_ring_tag,
@@ -2733,7 +2740,9 @@
 		if (have_tag)
 			VLAN_INPUT_TAG(ifp, m, vlan_tag, continue);
 
+		BGE_UNLOCK(sc);
 		(*ifp->if_input)(ifp, m);
+		BGE_LOCK(sc);
 	}
 
 	bus_dmamap_sync(sc->bge_cdata.bge_rx_return_ring_tag,
@@ -2763,6 +2772,8 @@
 	struct bge_tx_bd *cur_tx = NULL;
 	struct ifnet *ifp;
 
+	BGE_LOCK_ASSERT(sc);
+
 	ifp = &sc->arpcom.ac_if;
 
 	/*
@@ -2806,6 +2817,8 @@
 	sc = xsc;
 	ifp = &sc->arpcom.ac_if;
 
+	BGE_LOCK(sc);
+
 	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
 	    sc->bge_cdata.bge_status_map, BUS_DMASYNC_POSTWRITE);
 
@@ -2838,8 +2851,8 @@
 		status = CSR_READ_4(sc, BGE_MAC_STS);
 		if (status & BGE_MACSTAT_MI_INTERRUPT) {
 			sc->bge_link = 0;
-			untimeout(bge_tick, sc, sc->bge_stat_ch);
-			bge_tick(sc);
+			callout_stop(&sc->bge_stat_ch);
+			bge_tick_locked(sc);
 			/* Clear the interrupt */
 			CSR_WRITE_4(sc, BGE_MAC_EVT_ENB,
 			    BGE_EVTENB_MI_INTERRUPT);
@@ -2865,8 +2878,8 @@
 			if (!(status & (BGE_MACSTAT_PORT_DECODE_ERROR|
 			    BGE_MACSTAT_MI_COMPLETE))) {
 				sc->bge_link = 0;
-				untimeout(bge_tick, sc, sc->bge_stat_ch);
-				bge_tick(sc);
+				callout_stop(&sc->bge_stat_ch);
+				bge_tick_locked(sc);
 			}
 			/* Clear the interrupt */
 			CSR_WRITE_4(sc, BGE_MAC_STS, BGE_MACSTAT_SYNC_CHANGED|
@@ -2895,35 +2908,32 @@
 	CSR_WRITE_4(sc, BGE_MBX_IRQ0_LO, 0);
 
 	if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
-		bge_start(ifp);
+		bge_start_locked(ifp);
+
+	BGE_UNLOCK(sc);
 
 	return;
 }
 
 static void
-bge_tick(xsc)
-	void *xsc;
+bge_tick_locked(sc)
+	struct bge_softc *sc;
 {
-	struct bge_softc *sc;
 	struct mii_data *mii = NULL;
 	struct ifmedia *ifm = NULL;
 	struct ifnet *ifp;
-	int s;
 
-	sc = xsc;
 	ifp = &sc->arpcom.ac_if;
 
-	s = splimp();
+	BGE_LOCK_ASSERT(sc);
 
 	if (sc->bge_asicrev == BGE_ASICREV_BCM5705)
 		bge_stats_update_regs(sc);
 	else
 		bge_stats_update(sc);
-	sc->bge_stat_ch = timeout(bge_tick, sc, hz);
-	if (sc->bge_link) {
-		splx(s);
+	callout_reset(&sc->bge_stat_ch, hz, bge_tick, sc);
+	if (sc->bge_link)
 		return;
-	}
 
 	if (sc->bge_tbi) {
 		ifm = &sc->bge_ifmedia;
@@ -2933,9 +2943,8 @@
 			CSR_WRITE_4(sc, BGE_MAC_STS, 0xFFFFFFFF);
 			printf("bge%d: gigabit link up\n", sc->bge_unit);
 			if (ifp->if_snd.ifq_head != NULL)
-				bge_start(ifp);
+				bge_start_locked(ifp);
 		}
-		splx(s);
 		return;
 	}
 
@@ -2950,12 +2959,23 @@
 			printf("bge%d: gigabit link up\n",
 			   sc->bge_unit);
 		if (ifp->if_snd.ifq_head != NULL)
-			bge_start(ifp);
+			bge_start_locked(ifp);
 	}
 
-	splx(s);
+	return;
+}
+
+static void
+bge_tick(xsc)
+	void *xsc;
+{
+	struct bge_softc *sc;
+
+	sc = xsc;
 
-	return;
+	BGE_LOCK(sc);
+	bge_tick_locked(sc);
+	BGE_UNLOCK(sc);
 }
 
 static void
@@ -3094,7 +3114,7 @@
  * to the mbuf data regions directly in the transmit descriptors.
  */
 static void
-bge_start(ifp)
+bge_start_locked(ifp)
 	struct ifnet *ifp;
 {
 	struct bge_softc *sc;
@@ -3163,23 +3183,35 @@
 	return;
 }
 
+/*
+ * Main transmit routine. To avoid having to do mbuf copies, we put pointers
+ * to the mbuf data regions directly in the transmit descriptors.
+ */
 static void
-bge_init(xsc)
-	void *xsc;
+bge_start(ifp)
+	struct ifnet *ifp;
+{
+	struct bge_softc *sc;
+
+	sc = ifp->if_softc;
+	BGE_LOCK(sc);
+	bge_start_locked(ifp);
+	BGE_UNLOCK(sc);
+}
+
+static void
+bge_init_locked(sc)
+	struct bge_softc *sc;
 {
-	struct bge_softc *sc = xsc;
 	struct ifnet *ifp;
 	u_int16_t *m;
-        int s;
 
-	s = splimp();
+	BGE_LOCK_ASSERT(sc);
 
 	ifp = &sc->arpcom.ac_if;
 
-	if (ifp->if_flags & IFF_RUNNING) {
-		splx(s);
+	if (ifp->if_flags & IFF_RUNNING)
 		return;
-	}
 
 	/* Cancel pending I/O and flush buffers. */
 	bge_stop(sc);
@@ -3192,7 +3224,6 @@
 	 */
 	if (bge_blockinit(sc)) {
 		printf("bge%d: initialization failure\n", sc->bge_unit);
-		splx(s);
 		return;
 	}
 
@@ -3267,9 +3298,20 @@
 	ifp->if_flags |= IFF_RUNNING;
 	ifp->if_flags &= ~IFF_OACTIVE;
 
-	splx(s);
+	callout_reset(&sc->bge_stat_ch, hz, bge_tick, sc);
+
+	return;
+}
+

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


More information about the p4-projects mailing list