Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Oct 2004 14:25:40 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 62507 for review
Message-ID:  <200410011425.i91EPeQE017705@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=62507

Change 62507 by jhb@jhb_slimer on 2004/10/01 14:25:19

	IFC @62506.

Affected files ...

.. //depot/projects/smpng/sys/amd64/amd64/bios.c#1 branch
.. //depot/projects/smpng/sys/amd64/amd64/machdep.c#30 integrate
.. //depot/projects/smpng/sys/amd64/amd64/mp_machdep.c#14 integrate
.. //depot/projects/smpng/sys/amd64/amd64/mptable.c#5 integrate
.. //depot/projects/smpng/sys/amd64/amd64/pmap.c#35 integrate
.. //depot/projects/smpng/sys/amd64/include/pc/bios.h#1 branch
.. //depot/projects/smpng/sys/amd64/include/pmap.h#15 integrate
.. //depot/projects/smpng/sys/arm/arm/bcopyinout.S#2 integrate
.. //depot/projects/smpng/sys/arm/arm/busdma_machdep.c#4 integrate
.. //depot/projects/smpng/sys/arm/arm/cpufunc.c#3 integrate
.. //depot/projects/smpng/sys/arm/arm/db_trace.c#6 integrate
.. //depot/projects/smpng/sys/arm/arm/elf_machdep.c#4 integrate
.. //depot/projects/smpng/sys/arm/arm/exception.S#3 integrate
.. //depot/projects/smpng/sys/arm/arm/fusu.S#2 integrate
.. //depot/projects/smpng/sys/arm/arm/genassym.c#2 integrate
.. //depot/projects/smpng/sys/arm/arm/identcpu.c#2 integrate
.. //depot/projects/smpng/sys/arm/arm/intr.c#3 integrate
.. //depot/projects/smpng/sys/arm/arm/irq_dispatch.S#2 integrate
.. //depot/projects/smpng/sys/arm/arm/locore.S#3 integrate
.. //depot/projects/smpng/sys/arm/arm/machdep.c#5 integrate
.. //depot/projects/smpng/sys/arm/arm/nexus_io.c#3 integrate
.. //depot/projects/smpng/sys/arm/arm/pmap.c#8 integrate
.. //depot/projects/smpng/sys/arm/arm/support.S#4 integrate
.. //depot/projects/smpng/sys/arm/arm/swtch.S#2 integrate
.. //depot/projects/smpng/sys/arm/arm/sys_machdep.c#3 integrate
.. //depot/projects/smpng/sys/arm/arm/trap.c#2 integrate
.. //depot/projects/smpng/sys/arm/arm/uio_machdep.c#3 integrate
.. //depot/projects/smpng/sys/arm/arm/vm_machdep.c#4 integrate
.. //depot/projects/smpng/sys/arm/conf/IQ31244#1 branch
.. //depot/projects/smpng/sys/arm/conf/SIMICS#2 integrate
.. //depot/projects/smpng/sys/arm/include/asm.h#2 integrate
.. //depot/projects/smpng/sys/arm/include/asmacros.h#2 integrate
.. //depot/projects/smpng/sys/arm/include/bus.h#3 integrate
.. //depot/projects/smpng/sys/arm/include/intr.h#2 integrate
.. //depot/projects/smpng/sys/arm/include/md_var.h#2 integrate
.. //depot/projects/smpng/sys/arm/include/param.h#5 integrate
.. //depot/projects/smpng/sys/arm/include/pcb.h#4 integrate
.. //depot/projects/smpng/sys/arm/include/pmap.h#4 integrate
.. //depot/projects/smpng/sys/arm/include/profile.h#5 integrate
.. //depot/projects/smpng/sys/arm/include/pte.h#2 integrate
.. //depot/projects/smpng/sys/arm/include/signal.h#5 integrate
.. //depot/projects/smpng/sys/arm/include/sysarch.h#1 branch
.. //depot/projects/smpng/sys/arm/include/vmparam.h#3 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/assabet_machdep.c#4 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/sa11x0.c#4 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/sa11x0_io.c#3 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/sa11x0_irq.S#2 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/sa11x0_irqhandler.c#2 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/std.sa11x0#2 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/files.i80321#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/files.iq31244#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_intr.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_mcu.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_pci.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_space.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_timer.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321reg.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321var.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq31244_machdep.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq80321.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq80321reg.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq80321var.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/obio.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/obio_space.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/obiovar.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/std.i80321#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/std.iq31244#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/uart_bus_i80321.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/uart_cpu_i80321.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/xscalereg.h#1 branch
.. //depot/projects/smpng/sys/arm/xscale/xscalevar.h#1 branch
.. //depot/projects/smpng/sys/boot/common/commands.c#5 integrate
.. //depot/projects/smpng/sys/boot/common/help.common#14 integrate
.. //depot/projects/smpng/sys/boot/common/loader.8#30 integrate
.. //depot/projects/smpng/sys/boot/forth/loader.4th.8#7 integrate
.. //depot/projects/smpng/sys/boot/forth/loader.conf#29 integrate
.. //depot/projects/smpng/sys/boot/forth/loader.conf.5#8 integrate
.. //depot/projects/smpng/sys/boot/i386/loader/help.i386#5 integrate
.. //depot/projects/smpng/sys/boot/ia64/Makefile#3 integrate
.. //depot/projects/smpng/sys/boot/ia64/libski/Makefile#8 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/acpi_stub.c#4 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/bootinfo.c#6 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/copy.c#4 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/delay.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/devicename.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/efi_stub.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/elf_freebsd.c#9 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/exit.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/libski.h#4 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/module.c#4 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/pal_stub.S#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/sal_stub.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/skiconsole.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/skifs.c#3 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/ssc.c#4 delete
.. //depot/projects/smpng/sys/boot/ia64/libski/time.c#5 delete
.. //depot/projects/smpng/sys/boot/ia64/ski/Makefile#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/acpi_stub.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/bootinfo.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/conf.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/copy.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/delay.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/devicename.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/efi_stub.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/elf_freebsd.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/exit.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/ldscript.ia64#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/libski.h#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/main.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/pal_stub.S#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/sal_stub.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/skiconsole.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/skifs.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/skiload.cmd#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/ssc.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/start.S#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/time.c#1 branch
.. //depot/projects/smpng/sys/boot/ia64/ski/version#1 branch
.. //depot/projects/smpng/sys/boot/ia64/skiload/Makefile#11 delete
.. //depot/projects/smpng/sys/boot/ia64/skiload/conf.c#4 delete
.. //depot/projects/smpng/sys/boot/ia64/skiload/ldscript.ia64#3 delete
.. //depot/projects/smpng/sys/boot/ia64/skiload/main.c#5 delete
.. //depot/projects/smpng/sys/boot/ia64/skiload/skiload.cmd#2 delete
.. //depot/projects/smpng/sys/boot/ia64/skiload/start.S#3 delete
.. //depot/projects/smpng/sys/boot/ia64/skiload/version#3 delete
.. //depot/projects/smpng/sys/boot/pc98/loader/help.pc98#2 integrate
.. //depot/projects/smpng/sys/compat/linux/linux_stats.c#20 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#33 integrate
.. //depot/projects/smpng/sys/conf/Makefile.arm#3 integrate
.. //depot/projects/smpng/sys/conf/files#123 integrate
.. //depot/projects/smpng/sys/conf/files.amd64#23 integrate
.. //depot/projects/smpng/sys/conf/files.ia64#45 integrate
.. //depot/projects/smpng/sys/conf/kern.pre.mk#39 integrate
.. //depot/projects/smpng/sys/conf/ldscript.arm#2 integrate
.. //depot/projects/smpng/sys/conf/majors#41 integrate
.. //depot/projects/smpng/sys/conf/options.arm#2 integrate
.. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_fil.c#17 integrate
.. //depot/projects/smpng/sys/contrib/pf/net/pf.c#10 integrate
.. //depot/projects/smpng/sys/contrib/pf/net/pf_ioctl.c#10 integrate
.. //depot/projects/smpng/sys/contrib/pf/net/pfvar.h#6 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpi_pci_link.c#22 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-all.c#61 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-all.h#31 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-chipset.c#44 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-disk.c#44 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-lowlevel.c#20 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-pci.c#49 integrate
.. //depot/projects/smpng/sys/dev/ata/ata-queue.c#19 integrate
.. //depot/projects/smpng/sys/dev/bge/if_bge.c#46 integrate
.. //depot/projects/smpng/sys/dev/bge/if_bgereg.h#24 integrate
.. //depot/projects/smpng/sys/dev/dcons/dcons.c#6 integrate
.. //depot/projects/smpng/sys/dev/em/if_em.c#36 integrate
.. //depot/projects/smpng/sys/dev/em/if_em_hw.c#14 integrate
.. //depot/projects/smpng/sys/dev/fb/vga.c#18 integrate
.. //depot/projects/smpng/sys/dev/fdc/fdc.c#10 integrate
.. //depot/projects/smpng/sys/dev/fdc/fdc_acpi.c#6 integrate
.. //depot/projects/smpng/sys/dev/mii/brgphy.c#22 integrate
.. //depot/projects/smpng/sys/dev/mii/miidevs#14 integrate
.. //depot/projects/smpng/sys/dev/musycc/musycc.c#10 integrate
.. //depot/projects/smpng/sys/dev/pci/pci.c#42 integrate
.. //depot/projects/smpng/sys/dev/re/if_re.c#16 integrate
.. //depot/projects/smpng/sys/dev/snp/snp.c#18 integrate
.. //depot/projects/smpng/sys/dev/sound/pci/ich.c#30 integrate
.. //depot/projects/smpng/sys/dev/syscons/scvgarndr.c#6 integrate
.. //depot/projects/smpng/sys/dev/syscons/syscons.c#43 integrate
.. //depot/projects/smpng/sys/dev/usb/ucom.c#21 integrate
.. //depot/projects/smpng/sys/dev/usb/ucomvar.h#6 integrate
.. //depot/projects/smpng/sys/dev/usb/ugen.c#27 integrate
.. //depot/projects/smpng/sys/dev/usb/usb_port.h#21 integrate
.. //depot/projects/smpng/sys/dev/usb/usb_subr.c#26 integrate
.. //depot/projects/smpng/sys/fs/devfs/devfs_rule.c#9 integrate
.. //depot/projects/smpng/sys/fs/procfs/procfs_dbregs.c#14 integrate
.. //depot/projects/smpng/sys/fs/procfs/procfs_fpregs.c#14 integrate
.. //depot/projects/smpng/sys/fs/procfs/procfs_regs.c#14 integrate
.. //depot/projects/smpng/sys/fs/specfs/spec_vnops.c#39 integrate
.. //depot/projects/smpng/sys/geom/geom_dev.c#37 integrate
.. //depot/projects/smpng/sys/geom/geom_io.c#33 integrate
.. //depot/projects/smpng/sys/geom/mirror/g_mirror.c#7 integrate
.. //depot/projects/smpng/sys/geom/mirror/g_mirror.h#3 integrate
.. //depot/projects/smpng/sys/geom/raid3/g_raid3.c#5 integrate
.. //depot/projects/smpng/sys/geom/raid3/g_raid3.h#3 integrate
.. //depot/projects/smpng/sys/geom/vinum/geom_vinum_init.c#5 integrate
.. //depot/projects/smpng/sys/geom/vinum/geom_vinum_list.c#2 integrate
.. //depot/projects/smpng/sys/geom/vinum/geom_vinum_plex.c#7 integrate
.. //depot/projects/smpng/sys/geom/vinum/geom_vinum_raid5.c#5 integrate
.. //depot/projects/smpng/sys/geom/vinum/geom_vinum_raid5.h#4 integrate
.. //depot/projects/smpng/sys/geom/vinum/geom_vinum_var.h#3 integrate
.. //depot/projects/smpng/sys/gnu/ext2fs/ext2_extern.h#9 integrate
.. //depot/projects/smpng/sys/gnu/ext2fs/ext2_readwrite.c#8 integrate
.. //depot/projects/smpng/sys/gnu/ext2fs/ext2_vfsops.c#36 integrate
.. //depot/projects/smpng/sys/gnu/ext2fs/ext2_vnops.c#24 integrate
.. //depot/projects/smpng/sys/i386/i386/mptable.c#12 integrate
.. //depot/projects/smpng/sys/i386/i386/pmap.c#73 integrate
.. //depot/projects/smpng/sys/i386/include/pmap.h#24 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_ptrace.c#10 integrate
.. //depot/projects/smpng/sys/ia64/ia32/ia32_trap.c#1 branch
.. //depot/projects/smpng/sys/ia64/ia64/exception.S#9 integrate
.. //depot/projects/smpng/sys/ia64/ia64/genassym.c#25 integrate
.. //depot/projects/smpng/sys/ia64/ia64/trap.c#69 integrate
.. //depot/projects/smpng/sys/ia64/include/md_var.h#17 integrate
.. //depot/projects/smpng/sys/isa/psm.c#30 integrate
.. //depot/projects/smpng/sys/isa/syscons_isa.c#9 integrate
.. //depot/projects/smpng/sys/isofs/cd9660/cd9660_vfsops.c#31 integrate
.. //depot/projects/smpng/sys/kern/imgact_elf.c#40 integrate
.. //depot/projects/smpng/sys/kern/kern_conf.c#32 integrate
.. //depot/projects/smpng/sys/kern/kern_exit.c#85 integrate
.. //depot/projects/smpng/sys/kern/kern_fork.c#85 integrate
.. //depot/projects/smpng/sys/kern/kern_malloc.c#31 integrate
.. //depot/projects/smpng/sys/kern/kern_resource.c#51 integrate
.. //depot/projects/smpng/sys/kern/kern_sig.c#97 integrate
.. //depot/projects/smpng/sys/kern/kern_thread.c#68 integrate
.. //depot/projects/smpng/sys/kern/subr_kdb.c#6 integrate
.. //depot/projects/smpng/sys/kern/subr_unit.c#1 branch
.. //depot/projects/smpng/sys/kern/tty.c#48 integrate
.. //depot/projects/smpng/sys/kern/tty_cons.c#30 integrate
.. //depot/projects/smpng/sys/kern/uipc_mbuf.c#31 integrate
.. //depot/projects/smpng/sys/kern/vfs_aio.c#51 integrate
.. //depot/projects/smpng/sys/kern/vfs_bio.c#69 integrate
.. //depot/projects/smpng/sys/kern/vfs_cluster.c#33 integrate
.. //depot/projects/smpng/sys/kern/vfs_default.c#28 integrate
.. //depot/projects/smpng/sys/kern/vfs_mount.c#34 integrate
.. //depot/projects/smpng/sys/kern/vfs_subr.c#84 integrate
.. //depot/projects/smpng/sys/kern/vfs_vnops.c#51 integrate
.. //depot/projects/smpng/sys/modules/mem/Makefile#2 integrate
.. //depot/projects/smpng/sys/net/bridge.c#30 integrate
.. //depot/projects/smpng/sys/net/pfil.c#6 integrate
.. //depot/projects/smpng/sys/net/pfil.h#7 integrate
.. //depot/projects/smpng/sys/netinet/in_pcb.c#49 integrate
.. //depot/projects/smpng/sys/netinet/ip_fastfwd.c#11 integrate
.. //depot/projects/smpng/sys/netinet/ip_fw.h#23 integrate
.. //depot/projects/smpng/sys/netinet/ip_fw2.c#41 integrate
.. //depot/projects/smpng/sys/netinet/ip_fw_pfil.c#5 integrate
.. //depot/projects/smpng/sys/netinet/ip_input.c#59 integrate
.. //depot/projects/smpng/sys/netinet/ip_output.c#66 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_forward.c#12 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_input.c#36 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_output.c#35 integrate
.. //depot/projects/smpng/sys/netipsec/ipsec.c#9 integrate
.. //depot/projects/smpng/sys/netipsec/key.c#13 integrate
.. //depot/projects/smpng/sys/netipsec/key.h#3 integrate
.. //depot/projects/smpng/sys/netkey/key.c#26 integrate
.. //depot/projects/smpng/sys/nfs4client/nfs4_vnops.c#8 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs.h#20 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_bio.c#32 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_subs.c#21 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_vnops.c#42 integrate
.. //depot/projects/smpng/sys/nfsclient/nfsnode.h#9 integrate
.. //depot/projects/smpng/sys/pci/if_dc.c#60 integrate
.. //depot/projects/smpng/sys/pci/if_rlreg.h#21 integrate
.. //depot/projects/smpng/sys/pci/if_xl.c#50 integrate
.. //depot/projects/smpng/sys/powerpc/powermac/uninorth.c#7 integrate
.. //depot/projects/smpng/sys/powerpc/powermac/uninorthvar.h#3 integrate
.. //depot/projects/smpng/sys/sparc64/include/smp.h#14 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/counter.c#4 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/machdep.c#66 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/mp_machdep.c#23 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/rwindow.c#8 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/vm_machdep.c#42 integrate
.. //depot/projects/smpng/sys/sys/buf.h#30 integrate
.. //depot/projects/smpng/sys/sys/conf.h#33 integrate
.. //depot/projects/smpng/sys/sys/mbuf.h#44 integrate
.. //depot/projects/smpng/sys/sys/param.h#72 integrate
.. //depot/projects/smpng/sys/sys/proc.h#129 integrate
.. //depot/projects/smpng/sys/sys/syscallsubr.h#10 integrate
.. //depot/projects/smpng/sys/sys/systm.h#56 integrate
.. //depot/projects/smpng/sys/sys/tty.h#17 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_extern.h#14 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_vfsops.c#59 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_vnops.c#33 integrate
.. //depot/projects/smpng/sys/ufs/ufs/ufs_extern.h#14 integrate
.. //depot/projects/smpng/sys/ufs/ufs/ufs_vnops.c#40 integrate
.. //depot/projects/smpng/sys/vm/device_pager.c#18 integrate
.. //depot/projects/smpng/sys/vm/swap_pager.c#49 integrate
.. //depot/projects/smpng/sys/vm/vm_mmap.c#49 integrate

Differences ...

==== //depot/projects/smpng/sys/amd64/amd64/machdep.c#30 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.620 2004/09/05 02:09:52 julian Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.621 2004/09/24 01:11:11 peter Exp $");
 
 #include "opt_atalk.h"
 #include "opt_atpic.h"
@@ -111,6 +111,7 @@
 #include <machine/specialreg.h>
 #include <machine/intr_machdep.h>
 #include <machine/md_var.h>
+#include <machine/pc/bios.h>
 #include <machine/metadata.h>
 #include <machine/proc.h>
 #ifdef PERFMON
@@ -798,12 +799,6 @@
 
 #define PHYSMAP_SIZE	(2 * 8)
 
-struct bios_smap {
-	u_int64_t	base;
-	u_int64_t	length;
-	u_int32_t	type;
-} __packed;
-
 u_int basemem;
 
 /*

==== //depot/projects/smpng/sys/amd64/amd64/mp_machdep.c#14 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.246 2004/09/01 06:42:01 julian Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.247 2004/09/29 01:59:10 peter Exp $");
 
 #include "opt_cpu.h"
 #include "opt_kstack_pages.h"
@@ -539,12 +539,14 @@
 	u_int32_t mpbioswarmvec;
 	int apic_id, cpu, i;
 	u_int64_t *pt4, *pt3, *pt2;
+	vm_offset_t va = boot_address + KERNBASE;
 
 	mtx_init(&ap_boot_mtx, "ap boot", NULL, MTX_SPIN);
 
 	/* install the AP 1st level boot code */
-	pmap_kenter(boot_address + KERNBASE, boot_address);
-	bcopy(mptramp_start, (void *)((uintptr_t)boot_address + KERNBASE), bootMP_size);
+	pmap_kenter(va, boot_address);
+	pmap_invalidate_page(kernel_pmap, va);
+	bcopy(mptramp_start, (void *)va, bootMP_size);
 
 	/* Locate the page tables, they'll be below the trampoline */
 	pt4 = (u_int64_t *)(uintptr_t)(mptramp_pagetables + KERNBASE);

==== //depot/projects/smpng/sys/amd64/amd64/mptable.c#5 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mptable.c,v 1.232 2004/07/08 01:42:49 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mptable.c,v 1.233 2004/09/29 01:58:24 peter Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -928,7 +928,9 @@
 	if (args->vector == vector)
 		return;
 	KASSERT(args->vector == -1,
-	    ("Multiple entries for PCI IRQ %d", args->vector));
+	    ("Multiple IRQs for PCI interrupt %d.%d.INT%c: %d and %d\n",
+	    args->bus, args->irq >> 2, 'A' + (args->irq & 0x3), args->vector,
+	    vector));
 	args->vector = vector;
 }
 

==== //depot/projects/smpng/sys/amd64/amd64/pmap.c#35 (text+ko) ====

@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.502 2004/09/22 05:01:48 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.503 2004/09/29 19:20:39 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -110,6 +110,7 @@
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/lock.h>
+#include <sys/malloc.h>
 #include <sys/mman.h>
 #include <sys/msgbuf.h>
 #include <sys/mutex.h>
@@ -212,9 +213,9 @@
 		vm_offset_t va, pd_entry_t ptepde);
 static void pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m);
 
-static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va);
+static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags);
 
-static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex);
+static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags);
 static int _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m);
 static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t);
 static vm_offset_t pmap_kmem_choose(vm_offset_t addr);
@@ -1101,22 +1102,26 @@
  * race conditions.
  */
 static vm_page_t
-_pmap_allocpte(pmap, ptepindex)
-	pmap_t	pmap;
-	vm_pindex_t ptepindex;
+_pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags)
 {
 	vm_page_t m, pdppg, pdpg;
 
+	KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT ||
+	    (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK,
+	    ("_pmap_allocpte: flags is neither M_NOWAIT nor M_WAITOK"));
+
 	/*
 	 * Allocate a page table page.
 	 */
 	if ((m = vm_page_alloc(NULL, ptepindex, VM_ALLOC_NOOBJ |
 	    VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) {
-		PMAP_UNLOCK(pmap);
-		vm_page_unlock_queues();
-		VM_WAIT;
-		vm_page_lock_queues();
-		PMAP_LOCK(pmap);
+		if (flags & M_WAITOK) {
+			PMAP_UNLOCK(pmap);
+			vm_page_unlock_queues();
+			VM_WAIT;
+			vm_page_lock_queues();
+			PMAP_LOCK(pmap);
+		}
 
 		/*
 		 * Indicate the need to retry.  While waiting, the page table
@@ -1156,7 +1161,8 @@
 		pml4 = &pmap->pm_pml4[pml4index];
 		if ((*pml4 & PG_V) == 0) {
 			/* Have to allocate a new pdp, recurse */
-			if (_pmap_allocpte(pmap, NUPDE + NUPDPE + pml4index) == NULL) {
+			if (_pmap_allocpte(pmap, NUPDE + NUPDPE + pml4index,
+			    flags) == NULL) {
 				--m->wire_count;
 				vm_page_free(m);
 				return (NULL);
@@ -1187,7 +1193,8 @@
 		pml4 = &pmap->pm_pml4[pml4index];
 		if ((*pml4 & PG_V) == 0) {
 			/* Have to allocate a new pd, recurse */
-			if (_pmap_allocpte(pmap, NUPDE + pdpindex) == NULL) {
+			if (_pmap_allocpte(pmap, NUPDE + pdpindex,
+			    flags) == NULL) {
 				--m->wire_count;
 				vm_page_free(m);
 				return (NULL);
@@ -1199,7 +1206,8 @@
 			pdp = &pdp[pdpindex & ((1ul << NPDPEPGSHIFT) - 1)];
 			if ((*pdp & PG_V) == 0) {
 				/* Have to allocate a new pd, recurse */
-				if (_pmap_allocpte(pmap, NUPDE + pdpindex) == NULL) {
+				if (_pmap_allocpte(pmap, NUPDE + pdpindex,
+				    flags) == NULL) {
 					--m->wire_count;
 					vm_page_free(m);
 					return (NULL);
@@ -1221,12 +1229,16 @@
 }
 
 static vm_page_t
-pmap_allocpte(pmap_t pmap, vm_offset_t va)
+pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags)
 {
 	vm_pindex_t ptepindex;
 	pd_entry_t *pd;
 	vm_page_t m;
 
+	KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT ||
+	    (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK,
+	    ("pmap_allocpte: flags is neither M_NOWAIT nor M_WAITOK"));
+
 	/*
 	 * Calculate pagetable page index
 	 */
@@ -1259,8 +1271,8 @@
 		 * Here if the pte page isn't mapped, or if it has been
 		 * deallocated.
 		 */
-		m = _pmap_allocpte(pmap, ptepindex);
-		if (m == NULL)
+		m = _pmap_allocpte(pmap, ptepindex, flags);
+		if (m == NULL && (flags & M_WAITOK))
 			goto retry;
 	}
 	return (m);
@@ -1848,7 +1860,7 @@
 	 * resident, we are creating it here.
 	 */
 	if (va < VM_MAXUSER_ADDRESS) {
-		mpte = pmap_allocpte(pmap, va);
+		mpte = pmap_allocpte(pmap, va, M_WAITOK);
 	}
 #if 0 && defined(PMAP_DIAGNOSTIC)
 	else {
@@ -2029,7 +2041,8 @@
 				mpte = PHYS_TO_VM_PAGE(*ptepa & PG_FRAME);
 				mpte->wire_count++;
 			} else {
-				mpte = _pmap_allocpte(pmap, ptepindex);
+				mpte = _pmap_allocpte(pmap, ptepindex,
+				    M_WAITOK);
 				if (mpte == NULL)
 					goto retry;
 			}
@@ -2224,7 +2237,13 @@
 		return;
 
 	vm_page_lock_queues();
-	PMAP_LOCK(dst_pmap);
+	if (dst_pmap < src_pmap) {
+		PMAP_LOCK(dst_pmap);
+		PMAP_LOCK(src_pmap);
+	} else {
+		PMAP_LOCK(src_pmap);
+		PMAP_LOCK(dst_pmap);
+	}
 	for (addr = src_addr; addr < end_addr; addr = va_next) {
 		pt_entry_t *src_pte, *dst_pte;
 		vm_page_t dstmpte, srcmpte;
@@ -2303,9 +2322,12 @@
 				 * pte still being around...  allocpte can
 				 * block.
 				 */
-				dstmpte = pmap_allocpte(dst_pmap, addr);
+				dstmpte = pmap_allocpte(dst_pmap, addr,
+				    M_NOWAIT);
+				if (dstmpte == NULL)
+					break;
 				dst_pte = pmap_pte(dst_pmap, addr);
-				if ((*dst_pte == 0) && (ptetemp = *src_pte)) {
+				if (*dst_pte == 0) {
 					/*
 					 * Clear the modified and
 					 * accessed (referenced) bits
@@ -2325,6 +2347,7 @@
 		}
 	}
 	vm_page_unlock_queues();
+	PMAP_UNLOCK(src_pmap);
 	PMAP_UNLOCK(dst_pmap);
 }	
 

==== //depot/projects/smpng/sys/amd64/include/pmap.h#15 (text+ko) ====

@@ -39,7 +39,7 @@
  *
  *	from: hp300: @(#)pmap.h	7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.123 2004/09/11 01:31:26 scottl Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.124 2004/09/29 19:20:39 alc Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -240,7 +240,7 @@
 				mtx_assert(&(pmap)->pm_mtx, (type))
 #define	PMAP_LOCK_DESTROY(pmap)	mtx_destroy(&(pmap)->pm_mtx)
 #define	PMAP_LOCK_INIT(pmap)	mtx_init(&(pmap)->pm_mtx, "pmap", \
-				    NULL, MTX_DEF)
+				    NULL, MTX_DEF | MTX_DUPOK)
 #define	PMAP_LOCKED(pmap)	mtx_owned(&(pmap)->pm_mtx)
 #define	PMAP_MTX(pmap)		(&(pmap)->pm_mtx)
 #define	PMAP_TRYLOCK(pmap)	mtx_trylock(&(pmap)->pm_mtx)

==== //depot/projects/smpng/sys/arm/arm/bcopyinout.S#2 (text+ko) ====

@@ -40,9 +40,9 @@
 
 #include <machine/asm.h>
 
-__FBSDID("$FreeBSD: src/sys/arm/arm/bcopyinout.S,v 1.1 2004/05/14 11:46:42 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/bcopyinout.S,v 1.2 2004/09/23 21:56:36 cognet Exp $");
 #ifdef __XSCALE__
-#include "bcopyinout_xscale.S"
+#include <arm/arm/bcopyinout_xscale.S>
 #else
 
 	.text

==== //depot/projects/smpng/sys/arm/arm/busdma_machdep.c#4 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.3 2004/09/08 04:54:18 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.4 2004/09/23 21:57:47 cognet Exp $");
 
 /*
  * MacPPC bus dma support routines
@@ -79,19 +79,18 @@
 	 */
 	struct arm32_dma_range	*ranges;
 	int			_nranges;
-
 };
 
-struct arm_seglist {
-	bus_dma_segment_t		seg;
-	SLIST_ENTRY(arm_seglist)	next;
-};
-
-#define MAX_SEGS 512
+#define DMAMAP_LINEAR		0x1
+#define DMAMAP_MBUF		0x2
+#define DMAMAP_UIO		0x4
+#define DMAMAP_TYPE_MASK	(DMAMAP_LINEAR|DMAMAP_MBUF|DMAMAP_UIO)
+#define DMAMAP_COHERENT		0x8
 struct bus_dmamap {
-        bus_dma_tag_t			dmat;
-	int				flags;
-	SLIST_HEAD(, arm_seglist)	seglist;
+        bus_dma_tag_t	dmat;
+	int		flags;
+	void 		*buffer;
+	int		len;
 };
 
 /*
@@ -103,6 +102,7 @@
     bus_dmamap_t map, void *buf, bus_size_t buflen, struct thread *td,
     int flags, vm_offset_t *lastaddrp, int *segp,
     int first);
+
 static __inline struct arm32_dma_range *
 _bus_dma_inrange(struct arm32_dma_range *ranges, int nranges,
     bus_addr_t curaddr)
@@ -161,6 +161,8 @@
 /*
  * Allocate a device specific dma_tag.
  */
+#define SEG_NB 1024
+
 int
 bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
 		   bus_size_t boundary, bus_addr_t lowaddr,
@@ -171,7 +173,6 @@
 {
 	bus_dma_tag_t newtag;
 	int error = 0;
-
 	/* Return a NULL tag on failure */
 	*dmat = NULL;
 
@@ -193,6 +194,7 @@
 	newtag->ref_count = 1; /* Count ourself */
 	newtag->map_count = 0;
 	newtag->ranges = bus_dma_get_range();
+	newtag->_nranges = bus_dma_get_range_nb();
 	if (lockfunc != NULL) {
 		newtag->lockfunc = lockfunc;
 		newtag->lockfuncarg = lockfuncarg;
@@ -200,7 +202,6 @@
 		newtag->lockfunc = dflt_lock;
 		newtag->lockfuncarg = NULL;
 	}
-
         /*
 	 * Take into account any restrictions imposed by our parent tag
 	 */
@@ -257,34 +258,6 @@
         return (0);
 }
 
-static void
-arm_dmamap_freesegs(bus_dmamap_t map)
-{
-	struct arm_seglist *seg = SLIST_FIRST(&map->seglist);
-
-	while (seg) {
-		struct arm_seglist *next;
-
-		next = SLIST_NEXT(seg, next);
-		SLIST_REMOVE_HEAD(&map->seglist, next);
-		free(seg, M_DEVBUF);
-		seg = next;
-	}
-}
-
-static int
-arm_dmamap_addseg(bus_dmamap_t map, vm_offset_t addr, vm_size_t size)
-{
-	struct arm_seglist *seg = malloc(sizeof(*seg), M_DEVBUF, M_NOWAIT);
-
-	if (!seg)
-		return (ENOMEM);
-	seg->seg.ds_addr = addr;
-	seg->seg.ds_len = size;
-	SLIST_INSERT_HEAD(&map->seglist, seg, next);
-	return (0);
-}
-
 /*
  * Allocate a handle for mapping from kva/uva/physical
  * address space into bus device space.
@@ -297,8 +270,9 @@
 	newmap = malloc(sizeof(*newmap), M_DEVBUF, M_NOWAIT | M_ZERO);
 	if (newmap == NULL)
 		return (ENOMEM);
-	SLIST_INIT(&newmap->seglist);
 	*mapp = newmap;
+	newmap->dmat = dmat;
+	newmap->flags = 0;
 	dmat->map_count++;
 
 	return (0);
@@ -311,7 +285,7 @@
 int
 bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
 {
-	arm_dmamap_freesegs(map);
+
 	free(map, M_DEVBUF);
         dmat->map_count--;
         return (0);
@@ -326,7 +300,7 @@
 bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
                  bus_dmamap_t *mapp)
 {
-	bus_dmamap_t newmap;
+	bus_dmamap_t newmap = NULL;
 
 	int mflags;
 
@@ -337,11 +311,16 @@
 	if (flags & BUS_DMA_ZERO)
 		mflags |= M_ZERO;
 
-	newmap = malloc(sizeof(*newmap), M_DEVBUF, M_NOWAIT | M_ZERO);
-	if (newmap == NULL)
-		return (ENOMEM);
-	SLIST_INIT(&newmap->seglist);
-	*mapp = newmap;
+	if (!*mapp) {
+		newmap = malloc(sizeof(*newmap), M_DEVBUF, M_NOWAIT | M_ZERO);
+		if (newmap == NULL)
+			return (ENOMEM);
+		dmat->map_count++;
+		newmap->flags = 0;
+		*mapp = newmap;
+		newmap->dmat = dmat;
+	}
+	
         if (dmat->maxsize <= PAGE_SIZE) {
                 *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags);
         } else {
@@ -354,13 +333,12 @@
                     0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
                     dmat->boundary);
         }
-
-        if (*vaddr == NULL) {
+        if (*vaddr == NULL && newmap != NULL) {
 		free(newmap, M_DEVBUF);
+		dmat->map_count--;
 		*mapp = NULL;
                 return (ENOMEM);
 	}
-	
         return (0);
 }
 
@@ -371,14 +349,12 @@
 void
 bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
 {
-        if (map != NULL)
-                panic("bus_dmamem_free: Invalid map freed\n");
         if (dmat->maxsize <= PAGE_SIZE)
 		free(vaddr, M_DEVBUF);
         else {
 		contigfree(vaddr, dmat->maxsize, M_DEVBUF);
 	}
-	arm_dmamap_freesegs(map);
+	dmat->map_count--;
 	free(map, M_DEVBUF);
 }
 
@@ -398,10 +374,17 @@
 	bus_dma_segment_t dm_segments[BUS_DMAMAP_NSEGS];
 #endif
 
+	map->flags &= ~DMAMAP_TYPE_MASK;
+	map->flags |= DMAMAP_LINEAR|DMAMAP_COHERENT;
+	map->buffer = buf;
+	map->len = buflen;
 	error = bus_dmamap_load_buffer(dmat,
 	    dm_segments, map, buf, buflen, NULL,
 	    flags, &lastaddr, &nsegs, 1);
-	(*callback)(callback_arg, dm_segments, nsegs, error);
+	if (error)
+		(*callback)(callback_arg, NULL, 0, error);
+	else
+		(*callback)(callback_arg, dm_segments, nsegs + 1, error);
 	
 	return (0);
 }
@@ -428,7 +411,6 @@
 	pt_entry_t pte;
 	pt_entry_t *ptep;
 
-
 	if (td != NULL)
 		pmap = vmspace_pmap(td->td_proc->p_vmspace);
 	else
@@ -451,7 +433,7 @@
 				    (vaddr & L1_S_OFFSET);
 				if (*pde & L1_S_CACHE_MASK) {
 					map->flags &=
-					    ~ARM32_DMAMAP_COHERENT;
+					    ~DMAMAP_COHERENT;
 				}
 			} else {
 				pte = *ptep;
@@ -463,22 +445,37 @@
 					    (vaddr & L2_L_OFFSET);
 					if (pte & L2_L_CACHE_MASK) {
 						map->flags &=
-						    ~ARM32_DMAMAP_COHERENT;
+						    ~DMAMAP_COHERENT;
+						
 					}
 				} else {
 					curaddr = (pte & L2_S_FRAME) |
 					    (vaddr & L2_S_OFFSET);
 					if (pte & L2_S_CACHE_MASK) {
 						map->flags &=
-						    ~ARM32_DMAMAP_COHERENT;
+						    ~DMAMAP_COHERENT;
 					}
 				}
 			}
 		} else {
 			curaddr = pmap_extract(pmap, vaddr);
-			map->flags &= ~ARM32_DMAMAP_COHERENT;
+			map->flags &= ~DMAMAP_COHERENT;
 		}
 
+		if (dmat->ranges) {
+			struct arm32_dma_range *dr;
+
+			dr = _bus_dma_inrange(dmat->ranges, dmat->_nranges,
+			    curaddr);
+			if (dr == NULL)
+				return (EINVAL);
+			/*
+		     	 * In a valid DMA range.  Translate the physical
+			 * memory address to an address in the DMA window.
+			 */
+			curaddr = (curaddr - dr->dr_sysbase) + dr->dr_busbase;
+						
+		}
 		/*
 		 * Compute the segment size, and adjust counts.
 		 */
@@ -499,11 +496,6 @@
 		 * Insert chunk into a segment, coalescing with
 		 * the previous segment if possible.
 		 */
-		error = arm_dmamap_addseg(map, 
-		    (vm_offset_t)curaddr, sgsize);
-		if (error)
-			break;
-
 		if (first) {
 			segs[seg].ds_addr = curaddr;
 			segs[seg].ds_len = sgsize;
@@ -512,8 +504,11 @@
 			if (curaddr == lastaddr &&
 			    (segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
 			    (dmat->boundary == 0 ||
-			     (segs[seg].ds_addr & bmask) == (curaddr & bmask)))
+			     (segs[seg].ds_addr & bmask) == 
+			     (curaddr & bmask))) {
 				segs[seg].ds_len += sgsize;
+				goto segdone;
+			}
 			else {
 				if (++seg >= dmat->nsegments)
 					break;
@@ -522,6 +517,9 @@
 			}
 		}
 
+		if (error)
+			break;
+segdone:
 		lastaddr = curaddr + sgsize;
 		vaddr += sgsize;
 		buflen -= sgsize;
@@ -555,6 +553,9 @@
 
 	M_ASSERTPKTHDR(m0);
 
+	map->flags &= ~DMAMAP_TYPE_MASK;
+	map->flags |= DMAMAP_MBUF | DMAMAP_COHERENT;
+	map->buffer = m0;
 	if (m0->m_pkthdr.len <= dmat->maxsize) {
 		int first = 1;
 		vm_offset_t lastaddr = 0;
@@ -578,7 +579,7 @@
 		 */
 		(*callback)(callback_arg, dm_segments, 0, 0, error);
 	} else {
-		(*callback)(callback_arg, dm_segments, nsegs+1,
+		(*callback)(callback_arg, dm_segments, nsegs + 1,
 		    m0->m_pkthdr.len, error);
 	}
 	return (error);
@@ -605,6 +606,9 @@
 
 	resid = uio->uio_resid;
 	iov = uio->uio_iov;
+	map->flags &= ~DMAMAP_TYPE_MASK;
+	map->flags |= DMAMAP_UIO|DMAMAP_COHERENT;
+	map->buffer = uio;
 
 	if (uio->uio_segflg == UIO_USERSPACE) {
 		td = uio->uio_td;
@@ -647,30 +651,73 @@
 }
 
 /*
- * Release the mapping held by map. A no-op on PowerPC.
+ * Release the mapping held by map.
  */
 void
 bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
 {
-	arm_dmamap_freesegs(map);
+	map->flags &= ~DMAMAP_TYPE_MASK;
 	return;
 }
 
+static void
+bus_dmamap_sync_buf(void *buf, int len, bus_dmasync_op_t op)
+{
+
+	if (op & BUS_DMASYNC_POSTREAD ||
+	    op == (BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE)) {
+		cpu_dcache_wbinv_range((vm_offset_t)buf, len);
+		return;
+	}
+	if (op & BUS_DMASYNC_PREWRITE)
+		cpu_dcache_wb_range((vm_offset_t)buf, len);
+	if (op & BUS_DMASYNC_PREREAD) {
+		if ((((vm_offset_t)buf | len) & arm_dcache_align_mask) == 0)
+ 			cpu_dcache_inv_range((vm_offset_t)buf, len);
+		else    
+			cpu_dcache_wbinv_range((vm_offset_t)buf, len);
+	}
+}
+
 void
 bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
 {
-	struct arm_seglist *seg = SLIST_FIRST(&map->seglist);
-
-	if (op != BUS_DMASYNC_PREREAD && op != BUS_DMASYNC_PREWRITE)
+	struct mbuf *m;
+	struct uio *uio;
+	int resid;
+	struct iovec *iov;
+	
+	if (op == BUS_DMASYNC_POSTREAD)
 		return;
-	/* Skip cache frobbing if mapping was COHERENT. */
-	if (map->flags & ARM32_DMAMAP_COHERENT) {
-		/* Drain the write buffer. */
-		cpu_drain_writebuf();
+	if (map->flags & DMAMAP_COHERENT)
 		return;
+	switch(map->flags & DMAMAP_TYPE_MASK) {
+	case DMAMAP_LINEAR:
+		bus_dmamap_sync_buf(map->buffer, map->len, op);
+		break;
+	case DMAMAP_MBUF:
+		m = map->buffer;
+		while (m) {
+			bus_dmamap_sync_buf(m->m_data, m->m_len, op);
+			m = m->m_next;
+		}
+		break;
+	case DMAMAP_UIO:
+		uio = map->buffer;
+		iov = uio->uio_iov;
+		resid = uio->uio_resid;
+		for (int i = 0; i < uio->uio_iovcnt && resid != 0; i++) {
+			bus_size_t minlen = resid < iov[i].iov_len ? resid :
+			    iov[i].iov_len;
+			if (minlen > 0) {

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


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200410011425.i91EPeQE017705>