From owner-p4-projects@FreeBSD.ORG Mon May 29 19:56:46 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BD40016A55B; Mon, 29 May 2006 19:56:45 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 284B416A529 for ; Mon, 29 May 2006 19:56:44 +0000 (UTC) (envelope-from bz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id C50BE43D46 for ; Mon, 29 May 2006 19:56:43 +0000 (GMT) (envelope-from bz@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k4TJtTo4001891 for ; Mon, 29 May 2006 19:55:29 GMT (envelope-from bz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k4TJtJla001870 for perforce@freebsd.org; Mon, 29 May 2006 19:55:19 GMT (envelope-from bz@freebsd.org) Date: Mon, 29 May 2006 19:55:19 GMT Message-Id: <200605291955.k4TJtJla001870@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bz@freebsd.org using -f From: "Bjoern A. Zeeb" To: Perforce Change Reviews Cc: Subject: PERFORCE change 98088 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 May 2006 19:56:48 -0000 http://perforce.freebsd.org/chv.cgi?CH=98088 Change 98088 by bz@bz_dopt_ah on 2006/05/29 19:54:27 IFC @98087 Affected files ... .. //depot/projects/fast_ipsec/src/sys/Makefile#4 integrate .. //depot/projects/fast_ipsec/src/sys/amd64/amd64/busdma_machdep.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/arm/sa11x0/assabet_machdep.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/arm/sa11x0/sa11x0_io.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/arm/sa11x0/sa11x0_reg.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/arm/sa11x0/sa11x0_var.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/arm/sa11x0/uart_cpu_sa1110.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/arm/sa11x0/uart_dev_sa1110.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/arm/xscale/i80321/iq31244_machdep.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/cam/cam_ccb.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/cam/cam_periph.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/cam/scsi/scsi_target.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/conf/files#13 integrate .. //depot/projects/fast_ipsec/src/sys/conf/kmod.mk#7 integrate .. //depot/projects/fast_ipsec/src/sys/dev/bfe/if_bfe.c#9 integrate .. //depot/projects/fast_ipsec/src/sys/dev/bfe/if_bfereg.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/bktr/bktr_os.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/dcons/dcons_os.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/digi/digi.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/hifn/hifn7751.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/hme/if_hme.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/dev/ic/ns16550.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_freebsd.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_freebsd.h#6 integrate .. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_pci.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_tpublic.h#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/isp/ispvar.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/le/if_le_cbus.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt.c#8 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt.h#9 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_cam.c#9 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_debug.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_pci.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_raid.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_raid.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/ofw/ofw_console.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/pccbb/pccbb.c#9 integrate .. //depot/projects/fast_ipsec/src/sys/dev/pccbb/pccbb_pci.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/pccbb/pccbbvar.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/pci/fixup_pci.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/re/if_re.c#9 integrate .. //depot/projects/fast_ipsec/src/sys/dev/safe/safe.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/sio/sio.c#7 integrate .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/midi.c#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/midi.h#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/midiq.h#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/mpu401.c#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/mpu401.h#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/mpu_if.m#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/mpufoi_if.m#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/sequencer.c#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/sequencer.h#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/midi/synth_if.m#1 branch .. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/cmi.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/emu10k1.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/syscons/apm/apm_saver.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/syscons/syscons.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/dev/uart/uart.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/uart/uart_dbg.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/uart/uart_dev_ns8250.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/dev/uart/uart_tty.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/dev/ubsec/ubsec.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ehci.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ehci_pci.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ehcivar.h#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/if_axe.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/if_axereg.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ohci.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ohci_pci.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ohcireg.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/ohcivar.h#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/sl811hs.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/sl811hsvar.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/uhci.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/uhci_pci.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/uhcivar.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/usb.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/usb_mem.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/usbdi.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/dev/usb/usbdivar.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/dev/zs/zs.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Dependencies#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-cam#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-crypto#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-dev_pci#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-dev_sound#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-dev_usb#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-geom#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-i4b#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-kern#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-libkern#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-linux#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-net80211#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-netgraph#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-netinet#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-netinet6#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-netipsec#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-opencrypto#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Doxyfile-vm#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/Makefile#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/README#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/common-Doxyfile#1 branch .. //depot/projects/fast_ipsec/src/sys/doc/subsys/notreviewed.dox#1 branch .. //depot/projects/fast_ipsec/src/sys/fs/msdosfs/msdosfs_vfsops.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/fs/ntfs/ntfs_vfsops.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/fs/nullfs/null_vfsops.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/fs/nwfs/nwfs_io.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/fs/procfs/procfs.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/fs/smbfs/smbfs_io.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/fs/udf/udf_vfsops.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/gdb/gdb.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/gdb/gdb_cons.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/gdb/gdb_main.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/gdb/gdb_packet.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/geom/geom_bsd.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/gnu/fs/ext2fs/ext2_vfsops.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/gnu/fs/reiserfs/reiserfs_vfsops.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/gnu/fs/xfs/FreeBSD/xfs_mountops.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/i386/bios/apm.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/i386/bios/apm.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/i386/i386/busdma_machdep.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/i386/i386/machdep.c#9 integrate .. //depot/projects/fast_ipsec/src/sys/i386/i386/ptrace_machdep.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/i386/i386/vm_machdep.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/i386/include/npx.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/i386/isa/npx.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/ia64/ia64/ssc.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/isofs/cd9660/cd9660_vfsops.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/kern/kern_exec.c#10 integrate .. //depot/projects/fast_ipsec/src/sys/kern/kern_linker.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/kern/subr_disk.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/kern/subr_stack.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/kern/subr_taskqueue.c#7 integrate .. //depot/projects/fast_ipsec/src/sys/kern/tty_cons.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/kern/uipc_syscalls.c#7 integrate .. //depot/projects/fast_ipsec/src/sys/kern/vfs_mount.c#8 integrate .. //depot/projects/fast_ipsec/src/sys/kern/vfs_subr.c#12 integrate .. //depot/projects/fast_ipsec/src/sys/kern/vnode_if.src#3 integrate .. //depot/projects/fast_ipsec/src/sys/modules/Makefile#10 integrate .. //depot/projects/fast_ipsec/src/sys/modules/mfi/Makefile#3 integrate .. //depot/projects/fast_ipsec/src/sys/modules/sound/driver/cmi/Makefile#2 integrate .. //depot/projects/fast_ipsec/src/sys/modules/sound/driver/emu10k1/Makefile#2 integrate .. //depot/projects/fast_ipsec/src/sys/modules/sound/sound/Makefile#3 integrate .. //depot/projects/fast_ipsec/src/sys/net/bpf_filter.c#3 integrate .. //depot/projects/fast_ipsec/src/sys/netinet/ip_fw.h#6 integrate .. //depot/projects/fast_ipsec/src/sys/netinet/ip_fw2.c#7 integrate .. //depot/projects/fast_ipsec/src/sys/netinet6/in6_src.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/nfs4client/nfs4_vfsops.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/nfs4client/nfs4_vnops.c#2 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfs.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfs_bio.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfs_nfsiod.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfs_node.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfs_socket.c#8 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfs_vfsops.c#6 integrate .. //depot/projects/fast_ipsec/src/sys/nfsclient/nfsmount.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/opencrypto/crypto.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/opencrypto/cryptodev.c#4 integrate .. //depot/projects/fast_ipsec/src/sys/opencrypto/cryptodev.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/pc98/cbus/sio.c#7 integrate .. //depot/projects/fast_ipsec/src/sys/pci/if_rlreg.h#5 integrate .. //depot/projects/fast_ipsec/src/sys/sparc64/include/pmap.h#3 integrate .. //depot/projects/fast_ipsec/src/sys/sparc64/sparc64/pmap.c#5 integrate .. //depot/projects/fast_ipsec/src/sys/sys/cons.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/sys/kernel.h#2 integrate .. //depot/projects/fast_ipsec/src/sys/sys/queue.h#4 integrate .. //depot/projects/fast_ipsec/src/sys/tools/vnode_if.awk#3 integrate .. //depot/projects/fast_ipsec/src/sys/ufs/ffs/ffs_vfsops.c#10 integrate Differences ... ==== //depot/projects/fast_ipsec/src/sys/Makefile#4 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/Makefile,v 1.35 2006/03/17 18:54:34 ru Exp $ +# $FreeBSD: src/sys/Makefile,v 1.36 2006/05/29 19:29:41 maxim Exp $ .include @@ -11,10 +11,10 @@ # Directories to include in cscope name file and TAGS. CSCOPEDIRS= coda compat conf contrib crypto ddb dev fs gnu i4b isa \ - isofs kern libkern modules net netatalk netatm netgraph \ - netinet netinet6 netipx netkey netnatm netncp netsmb nfs \ - nfsclient nfs4client rpc pccard pci posix4 sys ufs vm \ - ${ARCHDIR} + isofs kern libkern modules net net80211 netatalk netatm \ + netgraph netinet netinet6 netipx netkey netnatm netncp \ + netsmb nfs nfsclient nfs4client rpc pccard pci posix4 sys \ + ufs vm ${ARCHDIR} ARCHDIR ?= ${MACHINE} ==== //depot/projects/fast_ipsec/src/sys/amd64/amd64/busdma_machdep.c#6 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.74 2006/05/03 04:14:17 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.75 2006/05/28 18:31:32 silby Exp $"); #include #include @@ -492,7 +492,16 @@ } } + /* + * XXX: + * (dmat->alignment < dmat->maxsize) is just a quick hack; the exact + * alignment guarantees of malloc need to be nailed down, and the + * code below should be rewritten to take that into account. + * + * In the meantime, we'll panic if malloc gets it wrong. + */ if ((dmat->maxsize <= PAGE_SIZE) && + (dmat->alignment < dmat->maxsize) && dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) { *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags); } else { @@ -510,6 +519,8 @@ CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, ENOMEM); return (ENOMEM); + } else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) { + panic("bus_dmamem_alloc failed to align memory properly."); } CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, ENOMEM); @@ -529,8 +540,9 @@ */ if (map != NULL) panic("bus_dmamem_free: Invalid map freed\n"); - if ((dmat->maxsize <= PAGE_SIZE) - && dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) + if ((dmat->maxsize <= PAGE_SIZE) && + (dmat->alignment < dmat->maxsize) && + dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) free(vaddr, M_DEVBUF); else { contigfree(vaddr, dmat->maxsize, M_DEVBUF); ==== //depot/projects/fast_ipsec/src/sys/arm/sa11x0/assabet_machdep.c#3 (text+ko) ==== @@ -47,7 +47,7 @@ #include -__FBSDID("$FreeBSD: src/sys/arm/sa11x0/assabet_machdep.c,v 1.10 2005/10/03 14:15:50 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/sa11x0/assabet_machdep.c,v 1.13 2006/05/26 01:41:47 cognet Exp $"); #include "opt_md.h" @@ -93,6 +93,8 @@ #include #include +#include + #define MDROOT_ADDR 0xd0400000 #define KERNEL_PT_VMEM 0 /* Page table for mapping video memory */ @@ -151,9 +153,37 @@ struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -void enable_mmu(vm_offset_t); static struct trapframe proc0_tf; +/* Static device mappings. */ +static const struct pmap_devmap assabet_devmap[] = { + /* + * Map the on-board devices VA == PA so that we can access them + * with the MMU on or off. + */ + { + SACOM1_VBASE, + SACOM1_BASE, + SACOM1_SIZE, + VM_PROT_READ|VM_PROT_WRITE, + PTE_NOCACHE, + }, + { + SAIPIC_BASE, + SAIPIC_BASE, + SAIPIC_SIZE, + VM_PROT_READ|VM_PROT_WRITE, + PTE_NOCACHE, + }, + { + 0, + 0, + 0, + 0, + 0, + } +}; + struct arm32_dma_range * bus_dma_get_range(void) { @@ -334,11 +364,8 @@ /* Map the vector page. */ pmap_map_entry(l1pagetable, vector_page, systempage.pv_pa, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - /* Map SACOM3. */ - pmap_map_entry(l1pagetable, 0xd000d000, 0x80010000, - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE); - pmap_map_entry(l1pagetable, 0x90050000, 0x90050000, - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE); + /* Map the statically mapped devices. */ + pmap_devmap_bootstrap(l1pagetable, assabet_devmap); pmap_map_chunk(l1pagetable, sa1_cache_clean_addr, 0xf0000000, CPU_SA110_CACHE_CLEAN_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); ==== //depot/projects/fast_ipsec/src/sys/arm/sa11x0/sa11x0_io.c#3 (text+ko) ==== @@ -41,7 +41,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/sa11x0/sa11x0_io.c,v 1.7 2006/05/18 22:03:47 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/sa11x0/sa11x0_io.c,v 1.8 2006/05/23 12:14:14 cognet Exp $"); #include #include #include @@ -146,6 +146,13 @@ u_long startpa, endpa, pa; vm_offset_t va; pt_entry_t *pte; + const struct pmap_devmap *pd; + + if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { + /* Device was statically mapped. */ + *bshp = pd->pd_va + (bpa - pd->pd_pa); + return 0; + } startpa = trunc_page(bpa); endpa = round_page(bpa + size); ==== //depot/projects/fast_ipsec/src/sys/arm/sa11x0/sa11x0_reg.h#2 (text+ko) ==== @@ -34,7 +34,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/arm/sa11x0/sa11x0_reg.h,v 1.1 2004/05/14 11:46:45 cognet Exp $ + * $FreeBSD: src/sys/arm/sa11x0/sa11x0_reg.h,v 1.3 2006/05/23 12:14:14 cognet Exp $ * */ @@ -48,9 +48,11 @@ #define SARCR_BASE 0x90030000 /* Reset Controller */ #define SAGPIO_BASE 0x90040000 /* GPIO */ #define SAIPIC_BASE 0x90050000 /* Interrupt Controller */ +#define SAIPIC_SIZE 0x24 #define SAPPC_BASE 0x90060000 /* Peripheral Pin Controller */ #define SAUDC_BASE 0x80000000 /* USB Device Controller*/ #define SACOM1_BASE 0x80010000 /* GPCLK/UART 1 */ +#define SACOM1_SIZE 0x24 #define SACOM3_HW_BASE 0x80050000 /* UART 3 */ #define SAMCP_BASE 0x80060000 /* MCP Controller */ #define SASSP_BASE 0x80070000 /* Synchronous serial port */ @@ -59,7 +61,7 @@ #define SALCD_BASE 0xB0100000 /* LCD */ /* Register base virtual addresses mapped by initarm() */ -#define SACOM3_BASE 0xd000d000 +#define SACOM1_VBASE 0xd000d000 /* Interrupt controller registers */ #define SAIPIC_NPORTS 9 ==== //depot/projects/fast_ipsec/src/sys/arm/sa11x0/sa11x0_var.h#3 (text+ko) ==== @@ -34,7 +34,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/arm/sa11x0/sa11x0_var.h,v 1.2 2005/09/25 21:06:50 cognet Exp $ + * $FreeBSD: src/sys/arm/sa11x0/sa11x0_var.h,v 1.3 2006/05/29 19:32:32 cognet Exp $ * */ @@ -64,15 +64,6 @@ typedef void *sa11x0_chipset_tag_t; extern struct bus_space sa11x0_bs_tag; -struct sa11x0_attach_args { - sa11x0_chipset_tag_t sa_sc; - bus_space_tag_t sa_iot; /* Bus tag */ - bus_addr_t sa_addr; /* i/o address */ - bus_size_t sa_size; - - int sa_intr; - int sa_gpio; -}; void *sa11x0_intr_establish(sa11x0_chipset_tag_t, int, int, int, int (*)(void *), void *); ==== //depot/projects/fast_ipsec/src/sys/arm/sa11x0/uart_cpu_sa1110.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/sa11x0/uart_cpu_sa1110.c,v 1.3 2005/01/05 21:58:48 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/sa11x0/uart_cpu_sa1110.c,v 1.4 2006/05/23 12:14:14 cognet Exp $"); #include #include @@ -36,6 +36,7 @@ #include #include +#include #include bus_space_tag_t uart_bus_space_io; @@ -57,7 +58,7 @@ di->ops = uart_sa1110_ops; di->bas.chan = 0; di->bas.bst = &sa11x0_bs_tag; - di->bas.bsh = 0x80010000; + di->bas.bsh = SACOM1_BASE; di->bas.regshft = 0; di->bas.rclk = 0; di->baudrate = 9600; ==== //depot/projects/fast_ipsec/src/sys/arm/sa11x0/uart_dev_sa1110.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/sa11x0/uart_dev_sa1110.c,v 1.4 2006/05/18 22:02:33 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/sa11x0/uart_dev_sa1110.c,v 1.5 2006/05/22 23:25:34 cognet Exp $"); #include #include @@ -38,6 +38,7 @@ #include #include #include +#include #include #include "uart_if.h" @@ -79,7 +80,7 @@ sa1110_addr_change(struct uart_bas *bas) { - bas->bsh = 0xd000d000; + bas->bsh = SACOM1_VBASE; did_mmu = 1; } ==== //depot/projects/fast_ipsec/src/sys/arm/xscale/i80321/iq31244_machdep.c#5 (text+ko) ==== @@ -49,7 +49,7 @@ #include "opt_ddb.h" #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq31244_machdep.c,v 1.18 2005/12/21 15:01:49 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq31244_machdep.c,v 1.19 2006/05/26 01:41:46 cognet Exp $"); #define _ARM32_BUS_DMA_PRIVATE #include @@ -147,7 +147,6 @@ struct pv_addr kernelstack; struct pv_addr minidataclean; -void enable_mmu(vm_offset_t); static struct trapframe proc0_tf; #define IQ80321_OBIO_BASE 0xfe800000UL ==== //depot/projects/fast_ipsec/src/sys/cam/cam_ccb.h#3 (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/cam/cam_ccb.h,v 1.29 2006/01/20 19:21:38 mjacob Exp $ + * $FreeBSD: src/sys/cam/cam_ccb.h,v 1.31 2006/05/24 15:23:27 mjacob Exp $ */ #ifndef _CAM_CAM_CCB_H ==== //depot/projects/fast_ipsec/src/sys/cam/cam_periph.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.61 2006/01/08 20:04:55 iedowse Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.62 2006/05/24 15:22:21 mjacob Exp $"); #include #include @@ -673,6 +673,16 @@ mapinfo->num_bufs_used++; } + /* + * Now that we've gotten this far, change ownership to the kernel + * of the buffers so that we don't run afoul of returning to user + * space with locks (on the buffer) held. + */ + for (i = 0; i < numbufs; i++) { + BUF_KERNPROC(mapinfo->bp[i]); + } + + return(0); } ==== //depot/projects/fast_ipsec/src/sys/cam/scsi/scsi_target.c#2 (text+ko) ==== @@ -28,7 +28,8 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_target.c,v 1.68 2005/08/08 19:55:30 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_target.c,v 1.70 2006/05/24 15:26:07 mjacob Exp $"); + #include #include @@ -40,6 +41,7 @@ #include #include #include +#include #include #include @@ -89,7 +91,6 @@ targ_state state; struct selinfo read_select; struct devstat device_stats; - struct mtx mtx; }; static d_open_t targopen; @@ -157,10 +158,6 @@ }; PERIPHDRIVER_DECLARE(targ, targdriver); -static struct mtx targ_mtx; -#define TARG_LOCK(softc) mtx_lock(&(softc)->mtx) -#define TARG_UNLOCK(softc) mtx_unlock(&(softc)->mtx) - static MALLOC_DEFINE(M_TARG, "TARG", "TARG data"); /* Create softc and initialize it. Only one proc can open each targ device. */ @@ -169,15 +166,12 @@ { struct targ_softc *softc; - mtx_lock(&targ_mtx); if (dev->si_drv1 != 0) { - mtx_unlock(&targ_mtx); return (EBUSY); } /* Mark device busy before any potentially blocking operations */ dev->si_drv1 = (void *)~0; - mtx_unlock(&targ_mtx); /* Create the targ device, allocate its softc, initialize it */ if ((dev->si_flags & SI_NAMED) == 0) { @@ -190,13 +184,12 @@ softc->state = TARG_STATE_OPENED; softc->periph = NULL; softc->path = NULL; - mtx_init(&softc->mtx, devtoname(dev), "targ cdev", MTX_DEF); TAILQ_INIT(&softc->pending_ccb_queue); TAILQ_INIT(&softc->work_queue); TAILQ_INIT(&softc->abort_queue); TAILQ_INIT(&softc->user_ccb_queue); - knlist_init(&softc->read_select.si_note, &softc->mtx, NULL, NULL, NULL); + knlist_init(&softc->read_select.si_note, NULL, NULL, NULL, NULL); return (0); } @@ -209,22 +202,15 @@ int error; softc = (struct targ_softc *)dev->si_drv1; - TARG_LOCK(softc); error = targdisable(softc); if (error == CAM_REQ_CMP) { dev->si_drv1 = 0; - mtx_lock(&targ_mtx); if (softc->periph != NULL) { cam_periph_invalidate(softc->periph); softc->periph = NULL; } - mtx_unlock(&targ_mtx); - TARG_UNLOCK(softc); - mtx_destroy(&softc->mtx); destroy_dev(dev); FREE(softc, M_TARG); - } else { - TARG_UNLOCK(softc); } return (error); } @@ -253,17 +239,13 @@ printf("Couldn't create path, status %#x\n", status); break; } - TARG_LOCK(softc); status = targenable(softc, path, new_lun->grp6_len, new_lun->grp7_len); - TARG_UNLOCK(softc); xpt_free_path(path); break; } case TARGIOCDISABLE: - TARG_LOCK(softc); status = targdisable(softc); - TARG_UNLOCK(softc); break; case TARGIOCDEBUG: { @@ -280,14 +262,11 @@ cdbg.ccb_h.cbfcnp = targdone; /* If no periph available, disallow debugging changes */ - TARG_LOCK(softc); if ((softc->state & TARG_STATE_LUN_ENABLED) == 0) { status = CAM_DEV_NOT_THERE; - TARG_UNLOCK(softc); break; } xpt_action((union ccb *)&cdbg); - TARG_UNLOCK(softc); status = cdbg.ccb_h.status & CAM_STATUS_MASK; #else status = CAM_FUNC_NOTAVAIL; @@ -315,7 +294,6 @@ revents = poll_events & (POLLOUT | POLLWRNORM); if ((poll_events & (POLLIN | POLLRDNORM)) != 0) { /* Poll for read() depends on user and abort queues. */ - TARG_LOCK(softc); if (!TAILQ_EMPTY(&softc->user_ccb_queue) || !TAILQ_EMPTY(&softc->abort_queue)) { revents |= poll_events & (POLLIN | POLLRDNORM); @@ -323,7 +301,6 @@ /* Only sleep if the user didn't poll for write. */ if (revents == 0) selrecord(td, &softc->read_select); - TARG_UNLOCK(softc); } return (revents); @@ -415,7 +392,6 @@ } /* Destroy any periph on our path if it is disabled */ - mtx_lock(&targ_mtx); periph = cam_periph_find(path, "targ"); if (periph != NULL) { struct targ_softc *del_softc; @@ -427,7 +403,6 @@ } else { printf("Requested path still in use by targ%d\n", periph->unit_number); - mtx_unlock(&targ_mtx); status = CAM_LUN_ALRDY_ENA; goto enable_fail; } @@ -436,7 +411,6 @@ /* Create a periph instance attached to this path */ status = cam_periph_alloc(targctor, NULL, targdtor, targstart, "targ", CAM_PERIPH_BIO, path, targasync, 0, softc); - mtx_unlock(&targ_mtx); if (status != CAM_REQ_CMP) { printf("cam_periph_alloc failed, status %#x\n", status); goto enable_fail; @@ -566,11 +540,9 @@ CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, ("Sent ATIO/INOT (%p)\n", user_ccb)); xpt_action(ccb); - TARG_LOCK(softc); TAILQ_INSERT_TAIL(&softc->pending_ccb_queue, &ccb->ccb_h, periph_links.tqe); - TARG_UNLOCK(softc); break; default: if ((func_code & XPT_FC_QUEUED) != 0) { @@ -581,10 +553,8 @@ descr->user_ccb = user_ccb; descr->priority = priority; descr->func_code = func_code; - TARG_LOCK(softc); TAILQ_INSERT_TAIL(&softc->work_queue, descr, tqe); - TARG_UNLOCK(softc); xpt_schedule(softc->periph, priority); } else { CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, @@ -629,15 +599,12 @@ softc = (struct targ_softc *)periph->softc; CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, ("targstart %p\n", start_ccb)); - TARG_LOCK(softc); descr = TAILQ_FIRST(&softc->work_queue); if (descr == NULL) { - TARG_UNLOCK(softc); xpt_release_ccb(start_ccb); } else { TAILQ_REMOVE(&softc->work_queue, descr, tqe); next_descr = TAILQ_FIRST(&softc->work_queue); - TARG_UNLOCK(softc); /* Initiate a transaction using the descr and supplied CCB */ error = targusermerge(softc, descr, start_ccb); @@ -649,9 +616,7 @@ xpt_release_ccb(start_ccb); suword(&descr->user_ccb->ccb_h.status, CAM_REQ_CMP_ERR); - TARG_LOCK(softc); TAILQ_INSERT_TAIL(&softc->abort_queue, descr, tqe); - TARG_UNLOCK(softc); notify_user(softc); } @@ -694,7 +659,6 @@ struct ccb_hdr *ccb_h; cab = (struct ccb_abort *)ccb; - TARG_LOCK(softc); TAILQ_FOREACH(ccb_h, &softc->pending_ccb_queue, periph_links.tqe) { struct targ_cmd_descr *ab_descr; @@ -708,7 +672,6 @@ break; } } - TARG_UNLOCK(softc); /* CCB not found, set appropriate status */ if (ccb_h == NULL) { k_ccbh->status = CAM_PATH_INVALID; @@ -776,10 +739,8 @@ */ CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, ("sendccb %p\n", ccb)); if (XPT_FC_IS_QUEUED(ccb)) { - TARG_LOCK(softc); TAILQ_INSERT_TAIL(&softc->pending_ccb_queue, ccb_h, periph_links.tqe); - TARG_UNLOCK(softc); } xpt_action(ccb); @@ -795,7 +756,6 @@ CAM_DEBUG(periph->path, CAM_DEBUG_PERIPH, ("targdone %p\n", done_ccb)); softc = (struct targ_softc *)periph->softc; - TARG_LOCK(softc); TAILQ_REMOVE(&softc->pending_ccb_queue, &done_ccb->ccb_h, periph_links.tqe); status = done_ccb->ccb_h.status & CAM_STATUS_MASK; @@ -803,7 +763,6 @@ /* If we're no longer enabled, throw away CCB */ if ((softc->state & TARG_STATE_LUN_ENABLED) == 0) { targfreeccb(softc, done_ccb); - TARG_UNLOCK(softc); return; } /* abort_all_pending() waits for pending queue to be empty */ @@ -817,7 +776,6 @@ case XPT_CONT_TARGET_IO: TAILQ_INSERT_TAIL(&softc->user_ccb_queue, &done_ccb->ccb_h, periph_links.tqe); - TARG_UNLOCK(softc); notify_user(softc); break; default: @@ -839,6 +797,8 @@ union ccb *user_ccb; int read_len, error; + mtx_lock(&Giant); + error = 0; read_len = 0; softc = (struct targ_softc *)dev->si_drv1; @@ -847,12 +807,11 @@ CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, ("targread\n")); /* If no data is available, wait or return immediately */ - TARG_LOCK(softc); ccb_h = TAILQ_FIRST(user_queue); user_descr = TAILQ_FIRST(abort_queue); while (ccb_h == NULL && user_descr == NULL) { if ((ioflag & IO_NDELAY) == 0) { - error = msleep(user_queue, &softc->mtx, + error = msleep(user_queue, NULL, PRIBIO | PCATCH, "targrd", 0); ccb_h = TAILQ_FIRST(user_queue); user_descr = TAILQ_FIRST(abort_queue); @@ -860,12 +819,11 @@ if (error == ERESTART) { continue; } else { - TARG_UNLOCK(softc); goto read_fail; } } } else { - TARG_UNLOCK(softc); + mtx_unlock(&Giant); return (EAGAIN); } } @@ -877,7 +835,6 @@ if (uio->uio_resid < sizeof(user_ccb)) break; TAILQ_REMOVE(user_queue, ccb_h, periph_links.tqe); - TARG_UNLOCK(softc); descr = (struct targ_cmd_descr *)ccb_h->targ_descr; user_ccb = descr->user_ccb; CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, @@ -890,7 +847,6 @@ goto read_fail; read_len += sizeof(user_ccb); - TARG_LOCK(softc); ccb_h = TAILQ_FIRST(user_queue); } @@ -899,7 +855,6 @@ if (uio->uio_resid < sizeof(user_ccb)) break; TAILQ_REMOVE(abort_queue, user_descr, tqe); - TARG_UNLOCK(softc); user_ccb = user_descr->user_ccb; CAM_DEBUG(softc->path, CAM_DEBUG_PERIPH, ("targread aborted descr %p (%p)\n", @@ -910,10 +865,8 @@ goto read_fail; read_len += sizeof(user_ccb); - TARG_LOCK(softc); user_descr = TAILQ_FIRST(abort_queue); } - TARG_UNLOCK(softc); /* * If we've successfully read some amount of data, don't report an @@ -924,6 +877,7 @@ error = ENOSPC; read_fail: + mtx_unlock(&Giant); return (error); } @@ -1020,7 +974,6 @@ static void targinit(void) { - mtx_init(&targ_mtx, "targ global", NULL, MTX_DEF); EVENTHANDLER_REGISTER(dev_clone, targclone, 0, 1000); } @@ -1086,7 +1039,7 @@ /* If we aborted at least one pending CCB ok, wait for it. */ if (cab.ccb_h.status == CAM_REQ_CMP) { - msleep(&softc->pending_ccb_queue, &softc->mtx, + msleep(&softc->pending_ccb_queue, NULL, PRIBIO | PCATCH, "tgabrt", 0); } @@ -1105,7 +1058,7 @@ * blocking read(). */ selwakeuppri(&softc->read_select, PRIBIO); - KNOTE_LOCKED(&softc->read_select.si_note, 0); + KNOTE_UNLOCKED(&softc->read_select.si_note, 0); wakeup(&softc->user_ccb_queue); } ==== //depot/projects/fast_ipsec/src/sys/conf/files#13 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.1118 2006/05/18 23:30:47 ambrisko Exp $ +# $FreeBSD: src/sys/conf/files,v 1.1119 2006/05/27 16:32:05 netchild Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -905,6 +905,12 @@ #dev/sound/usb/upcm.c optional snd_upcm usb dev/sound/usb/uaudio.c optional snd_uaudio usb dev/sound/usb/uaudio_pcm.c optional snd_uaudio usb +dev/sound/midi/midi.c optional sound +dev/sound/midi/mpu401.c optional sound +dev/sound/midi/mpu_if.m optional sound +dev/sound/midi/mpufoi_if.m optional sound +dev/sound/midi/sequencer.c optional sound +dev/sound/midi/synth_if.m optional sound dev/sr/if_sr.c optional sr dev/sr/if_sr_pci.c optional sr pci dev/stg/tmc18c30.c optional stg ==== //depot/projects/fast_ipsec/src/sys/conf/kmod.mk#7 (text+ko) ==== @@ -1,5 +1,5 @@ # From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 -# $FreeBSD: src/sys/conf/kmod.mk,v 1.207 2006/04/28 21:21:51 marcel Exp $ +# $FreeBSD: src/sys/conf/kmod.mk,v 1.208 2006/05/27 16:32:05 netchild Exp $ # # The include file handles building and installing loadable # kernel modules. @@ -321,8 +321,9 @@ dev/pci/pcib_if.m dev/ppbus/ppbus_if.m dev/smbus/smbus_if.m \ dev/sound/pcm/ac97_if.m dev/sound/pcm/channel_if.m \ dev/sound/pcm/feeder_if.m dev/sound/pcm/mixer_if.m \ - dev/usb/usb_if.m isa/isa_if.m kern/bus_if.m kern/cpufreq_if.m \ - kern/device_if.m kern/serdev_if.m \ + dev/sound/midi/mpu_if.m dev/sound/midi/mpufoi_if.m \ + dev/sound/midi/synth_if.m dev/usb/usb_if.m isa/isa_if.m \ + kern/bus_if.m kern/cpufreq_if.m kern/device_if.m kern/serdev_if.m \ libkern/iconv_converter_if.m opencrypto/crypto_if.m \ pc98/pc98/canbus_if.m pci/agp_if.m ==== //depot/projects/fast_ipsec/src/sys/dev/bfe/if_bfe.c#9 (text+ko) ==== @@ -26,7 +26,7 @@ #include -__FBSDID("$FreeBSD: src/sys/dev/bfe/if_bfe.c,v 1.38 2006/05/16 14:36:23 phk Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bfe/if_bfe.c,v 1.40 2006/05/28 20:35:39 silby Exp $"); #include #include @@ -201,7 +201,7 @@ * greater than 1GB. */ error = bus_dma_tag_create(NULL, /* parent */ - PAGE_SIZE, 0, /* alignment, boundary */ + 4096, 0, /* alignment, boundary */ 0x3FFFFFFF, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filter, filterarg */ @@ -214,7 +214,7 @@ /* tag for TX ring */ error = bus_dma_tag_create(sc->bfe_parent_tag, - 1, 0, + 4096, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, @@ -232,7 +232,7 @@ /* tag for RX ring */ error = bus_dma_tag_create(sc->bfe_parent_tag, - 1, 0, + 4096, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, @@ -1212,6 +1212,21 @@ } if(istat & BFE_ISTAT_ERRORS) { + + if (istat & BFE_ISTAT_DSCE) { + printf("if_bfe Descriptor Error\n"); + bfe_stop(sc); + BFE_UNLOCK(sc); + return; + } + + if (istat & BFE_ISTAT_DPE) { + printf("if_bfe Descriptor Protocol Error\n"); >>> TRUNCATED FOR MAIL (1000 lines) <<<