Date: Tue, 11 Nov 2003 12:19:18 -0800 (PST) From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 42025 for review Message-ID: <200311112019.hABKJI1s082862@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=42025 Change 42025 by jhb@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@esat.kuleuven.ac.be> + * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> + * @author Paulo Barreto <paulo.barreto@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) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311112019.hABKJI1s082862>