1 /* $NetBSD: uvm_fault.h,v 1.7 1998/10/11 23:07:42 chuck Exp $ */ 2 3 /* 4 * XXXCDC: "ROUGH DRAFT" QUALITY UVM PRE-RELEASE FILE! 5 * >>>USE AT YOUR OWN RISK, WORK IS NOT FINISHED<<< 6 */ 7 /* 8 * 9 * Copyright (c) 1997 Charles D. Cranor and Washington University. 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * 3. All advertising materials mentioning features or use of this software 21 * must display the following acknowledgement: 22 * This product includes software developed by Charles D. Cranor and 23 * Washington University. 24 * 4. The name of the author may not be used to endorse or promote products 25 * derived from this software without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 28 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 29 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 30 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 31 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 32 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 36 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * from: Id: uvm_fault.h,v 1.1.2.2 1997/12/08 16:07:12 chuck Exp 39 */ 40 41 #ifndef _UVM_UVM_FAULT_H_ 42 #define _UVM_UVM_FAULT_H_ 43 44 /* 45 * fault types 46 */ 47 48 #define VM_FAULT_INVALID ((vm_fault_t) 0x0) /* invalid mapping */ 49 #define VM_FAULT_PROTECT ((vm_fault_t) 0x1) /* protection */ 50 #define VM_FAULT_WIRE ((vm_fault_t) 0x2) /* wire mapping */ 51 52 /* 53 * fault data structures 54 */ 55 56 /* 57 * uvm_faultinfo: to load one of these fill in all orig_* fields and 58 * then call uvmfault_lookup on it. 59 */ 60 61 62 struct uvm_faultinfo { 63 vm_map_t orig_map; /* IN: original map */ 64 vaddr_t orig_rvaddr; /* IN: original rounded VA */ 65 vsize_t orig_size; /* IN: original size of interest */ 66 vm_map_t map; /* map (could be a submap) */ 67 unsigned int mapv; /* map's version number */ 68 vm_map_entry_t entry; /* map entry (from 'map') */ 69 vsize_t size; /* size of interest */ 70 }; 71 72 /* 73 * fault prototypes 74 */ 75 76 77 int uvmfault_anonget __P((struct uvm_faultinfo *, struct vm_amap *, 78 struct vm_anon *)); 79 static boolean_t uvmfault_lookup __P((struct uvm_faultinfo *, boolean_t)); 80 static boolean_t uvmfault_relock __P((struct uvm_faultinfo *)); 81 static void uvmfault_unlockall __P((struct uvm_faultinfo *, struct vm_amap *, 82 struct uvm_object *, struct vm_anon *)); 83 static void uvmfault_unlockmaps __P((struct uvm_faultinfo *, boolean_t)); 84 85 int uvm_fault_wire __P((vm_map_t, vaddr_t, vaddr_t)); 86 void uvm_fault_unwire __P((struct pmap *, vaddr_t, vaddr_t)); 87 88 #endif /* _UVM_UVM_FAULT_H_ */ 89