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