Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/pica/pica Moved to /cvsroot/syssrc/sys/arch/arc/arc...



details:   https://anonhg.NetBSD.org/src/rev/14f4f3c96b11
branches:  trunk
changeset: 481119:14f4f3c96b11
user:      soda <soda%NetBSD.org@localhost>
date:      Sun Jan 23 20:09:22 2000 +0000

description:
Moved to /cvsroot/syssrc/sys/arch/arc/arc/vm_machdep.c,v

diffstat:

 sys/arch/pica/pica/vm_machdep.c |  468 ----------------------------------------
 1 files changed, 0 insertions(+), 468 deletions(-)

diffs (truncated from 472 to 300 lines):

diff -r 2c181358c217 -r 14f4f3c96b11 sys/arch/pica/pica/vm_machdep.c
--- a/sys/arch/pica/pica/vm_machdep.c   Sun Jan 23 20:09:21 2000 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,468 +0,0 @@
-/*     $NetBSD: vm_machdep.c,v 1.8 1999/12/04 21:21:17 ragge Exp $     */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS 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.
- *
- * from: Utah Hdr: vm_machdep.c 1.21 91/04/06
- *
- *     from: @(#)vm_machdep.c  8.3 (Berkeley) 1/4/94
- */
-
-
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/buf.h>
-#include <sys/vnode.h>
-#include <sys/user.h>
-
-#include <vm/vm.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_page.h>
-#if 0
-#include <vm/vm_object.h>
-#endif
-
-#include <machine/pte.h>
-#include <machine/cpu.h>
-
-vm_offset_t kmem_alloc_wait_align();
-
-/*
- * Finish a fork operation, with process p2 nearly set up.
- * Copy and update the kernel stack and pcb, making the child
- * ready to run, and marking it so that it can return differently
- * than the parent.  Returns 1 in the child process, 0 in the parent.
- * We currently double-map the user area so that the stack is at the same
- * address in each process; in the future we will probably relocate
- * the frame pointers on the stack after copying.
- */
-cpu_fork(p1, p2)
-       register struct proc *p1, *p2;
-{
-       register struct user *up = p2->p_addr;
-       register pt_entry_t *pte;
-       register int i;
-       extern struct proc *machFPCurProcPtr;
-
-       p2->p_md.md_regs = up->u_pcb.pcb_regs;
-       p2->p_md.md_flags = p1->p_md.md_flags & MDP_FPUSED;
-
-       /*
-        * Cache the PTEs for the user area in the machine dependent
-        * part of the proc struct so cpu_switch() can quickly map in
-        * the user struct and kernel stack. Note: if the virtual address
-        * translation changes (e.g. swapout) we have to update this.
-        */
-       pte = kvtopte(up);
-       for (i = 0; i < UPAGES; i++) {
-               p2->p_md.md_upte[i] = pte->pt_entry & ~(PG_G | PG_RO | PG_WIRED);
-               pte++;
-       }
-
-       /*
-        * Copy floating point state from the FP chip if this process
-        * has state stored there.
-        */
-       if (p1 == machFPCurProcPtr)
-               MachSaveCurFPState(p1);
-
-       /*
-        * Copy pcb and stack from proc p1 to p2. 
-        * We do this as cheaply as possible, copying only the active
-        * part of the stack.  The stack and pcb need to agree;
-        */
-       p2->p_addr->u_pcb = p1->p_addr->u_pcb;
-       /* cache segtab for ULTBMiss() */
-       p2->p_addr->u_pcb.pcb_segtab = (void *)p2->p_vmspace->vm_pmap.pm_segtab;
-
-       /*
-        * Arrange for a non-local goto when the new process
-        * is started, to resume here, returning nonzero from setjmp.
-        */
-#ifdef DIAGNOSTIC
-       if (p1 != curproc && p1 != &proc0)
-               panic("cpu_fork: curproc");
-#endif
-       if (copykstack(up)) {
-               /*
-                * Return 1 in child.
-                */
-               return (1);
-       }
-       return (0);
-}
-
-/*
- * Finish a swapin operation.
- * We neded to update the cached PTEs for the user area in the
- * machine dependent part of the proc structure.
- */
-void
-cpu_swapin(p)
-       register struct proc *p;
-{
-       register struct user *up = p->p_addr;
-       register pt_entry_t *pte;
-       register int i;
-
-       /*
-        * Cache the PTEs for the user area in the machine dependent
-        * part of the proc struct so cpu_switch() can quickly map in
-        * the user struct and kernel stack.
-        */
-       pte = kvtopte(up);
-       for (i = 0; i < UPAGES; i++) {
-               p->p_md.md_upte[i] = pte->pt_entry & ~(PG_G | PG_RO | PG_WIRED);
-               pte++;
-       }
-}
-
-/*
- * cpu_exit is called as the last action during exit.
- * We release the address space and machine-dependent resources,
- * including the memory for the user structure and kernel stack.
- * Once finished, we call switch_exit, which switches to a temporary
- * pcb and stack and never returns.  We block memory allocation
- * until switch_exit has made things safe again.
- */
-void cpu_exit(p)
-       struct proc *p;
-{
-       extern struct proc *machFPCurProcPtr;
-
-       if (machFPCurProcPtr == p)
-               machFPCurProcPtr = (struct proc *)0;
-
-       vmspace_free(p->p_vmspace);
-
-       (void) splhigh();
-       kmem_free(kernel_map, (vm_offset_t)p->p_addr, ctob(UPAGES));
-       switch_exit();
-       /* NOTREACHED */
-}
-
-/*
- * Dump the machine specific header information at the start of a core dump.
- */
-cpu_coredump(p, vp, cred)
-       struct proc *p;
-       struct vnode *vp;
-       struct ucred *cred;
-{
-       extern struct proc *machFPCurProcPtr;
-
-       /*
-        * Copy floating point state from the FP chip if this process
-        * has state stored there.
-        */
-       if (p == machFPCurProcPtr)
-               MachSaveCurFPState(p);
-
-       return (vn_rdwr(UIO_WRITE, vp, (caddr_t)p->p_addr, ctob(UPAGES),
-           (off_t)0, UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, cred, NULL,
-           p));
-}
-
-/*
- * Move pages from one kernel virtual address to another.
- * Both addresses are assumed to reside in the Sysmap,
- * and size must be a multiple of CLSIZE.
- */
-pagemove(from, to, size)
-       register caddr_t from, to;
-       int size;
-{
-       register pt_entry_t *fpte, *tpte;
-
-       if (size % NBPG)
-               panic("pagemove");
-       fpte = kvtopte(from);
-       tpte = kvtopte(to);
-       if(((int)from & machCacheAliasMask) != ((int)to & machCacheAliasMask)) {
-               MachHitFlushDCache(from, size);
-       }
-       while (size > 0) {
-               MachTLBFlushAddr(from);
-               MachTLBUpdate(to, *fpte);
-               *tpte++ = *fpte;
-               fpte->pt_entry = PG_NV | PG_G;
-               fpte++;
-               size -= NBPG;
-               from += NBPG;
-               to += NBPG;
-       }
-}
-
-extern vm_map_t phys_map;
-
-/*
- * Map a user I/O request into kernel virtual address space.
- * Note: the pages are already locked by uvm_vslock(), so we
- * do not need to pass an access_type to pmap_enter().   
- */
-vmapbuf(bp)
-       register struct buf *bp;
-{
-       register caddr_t addr;
-       register vm_size_t sz;
-       struct proc *p;
-       int off;
-       vm_offset_t kva;
-       register vm_offset_t pa;
-
-       if ((bp->b_flags & B_PHYS) == 0)
-               panic("vmapbuf");
-       addr = bp->b_saveaddr = bp->b_un.b_addr;
-       off = (int)addr & PGOFSET;
-       p = bp->b_proc;
-       sz = round_page(bp->b_bcount + off);
-       kva = kmem_alloc_wait_align(phys_map, sz, (vm_size_t)addr & machCacheAliasMask);
-       bp->b_un.b_addr = (caddr_t) (kva + off);
-       sz = atop(sz);
-       while (sz--) {
-               pa = pmap_extract(vm_map_pmap(&p->p_vmspace->vm_map),
-                       (vm_offset_t)addr);
-               if (pa == 0)
-                       panic("vmapbuf: null page frame");
-               pmap_enter(vm_map_pmap(phys_map), kva, trunc_page(pa),
-                   VM_PROT_READ|VM_PROT_WRITE, TRUE, 0);
-               addr += PAGE_SIZE;
-               kva += PAGE_SIZE;
-       }
-}
-
-/*
- * Unmap a previously-mapped user I/O request.
- */
-vunmapbuf(bp)
-       register struct buf *bp;
-{
-       register caddr_t addr = bp->b_un.b_addr;
-       register vm_size_t sz;
-       vm_offset_t kva;
-
-       if ((bp->b_flags & B_PHYS) == 0)
-               panic("vunmapbuf");
-       sz = round_page(bp->b_bcount + ((int)addr & PGOFSET));
-       kva = (vm_offset_t)((int)addr & ~PGOFSET);
-       kmem_free_wakeup(phys_map, kva, sz);
-       bp->b_un.b_addr = bp->b_saveaddr;
-       bp->b_saveaddr = NULL;
-}
-
-
-/*
- *     SAVE_HINT:
- *
- *     Saves the specified entry as the hint for
- *     future lookups.  Performs necessary interlocks.
- */



Home | Main Index | Thread Index | Old Index