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