1 /* $OpenBSD: uvm_page.h,v 1.9 2001/08/11 10:57:22 art Exp $ */ 2 /* $NetBSD: uvm_page.h,v 1.15 2000/04/24 17:12:01 thorpej Exp $ */ 3 4 /* 5 * Copyright (c) 1997 Charles D. Cranor and Washington University. 6 * Copyright (c) 1991, 1993, The Regents of the University of California. 7 * 8 * All rights reserved. 9 * 10 * This code is derived from software contributed to Berkeley by 11 * The Mach Operating System project at Carnegie-Mellon University. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 1. Redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer. 18 * 2. Redistributions in binary form must reproduce the above copyright 19 * notice, this list of conditions and the following disclaimer in the 20 * documentation and/or other materials provided with the distribution. 21 * 3. All advertising materials mentioning features or use of this software 22 * must display the following acknowledgement: 23 * This product includes software developed by Charles D. Cranor, 24 * Washington University, the University of California, Berkeley and 25 * its contributors. 26 * 4. Neither the name of the University nor the names of its contributors 27 * may be used to endorse or promote products derived from this software 28 * without specific prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 31 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 34 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 35 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 36 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 37 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 38 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 39 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 40 * SUCH DAMAGE. 41 * 42 * @(#)vm_page.h 7.3 (Berkeley) 4/21/91 43 * from: Id: uvm_page.h,v 1.1.2.6 1998/02/04 02:31:42 chuck Exp 44 * 45 * 46 * Copyright (c) 1987, 1990 Carnegie-Mellon University. 47 * All rights reserved. 48 * 49 * Permission to use, copy, modify and distribute this software and 50 * its documentation is hereby granted, provided that both the copyright 51 * notice and this permission notice appear in all copies of the 52 * software, derivative works or modified versions, and any portions 53 * thereof, and that both notices appear in supporting documentation. 54 * 55 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 56 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 57 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 58 * 59 * Carnegie Mellon requests users of this software to return to 60 * 61 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 62 * School of Computer Science 63 * Carnegie Mellon University 64 * Pittsburgh PA 15213-3890 65 * 66 * any improvements or extensions that they make and grant Carnegie the 67 * rights to redistribute these changes. 68 */ 69 70 #ifndef _UVM_UVM_PAGE_H_ 71 #define _UVM_UVM_PAGE_H_ 72 73 /* 74 * uvm_page.h 75 */ 76 77 #ifdef _KERNEL 78 79 /* 80 * globals 81 */ 82 83 extern boolean_t vm_page_zero_enable; 84 85 /* 86 * macros 87 */ 88 89 #define uvm_lock_pageq() simple_lock(&uvm.pageqlock) 90 #define uvm_unlock_pageq() simple_unlock(&uvm.pageqlock) 91 92 #define uvm_pagehash(obj,off) \ 93 (((unsigned long)obj+(unsigned long)atop(off)) & uvm.page_hashmask) 94 95 #define UVM_PAGEZERO_TARGET (uvmexp.free) 96 97 /* 98 * handle inline options 99 */ 100 101 #ifdef UVM_PAGE_INLINE 102 #define PAGE_INLINE static __inline 103 #else 104 #define PAGE_INLINE /* nothing */ 105 #endif /* UVM_PAGE_INLINE */ 106 107 /* 108 * prototypes: the following prototypes define the interface to pages 109 */ 110 111 void uvm_page_init __P((vaddr_t *, vaddr_t *)); 112 #if defined(UVM_PAGE_TRKOWN) 113 void uvm_page_own __P((struct vm_page *, char *)); 114 #endif 115 #if !defined(PMAP_STEAL_MEMORY) 116 boolean_t uvm_page_physget __P((paddr_t *)); 117 #endif 118 void uvm_page_rehash __P((void)); 119 void uvm_pageidlezero __P((void)); 120 121 PAGE_INLINE int uvm_lock_fpageq __P((void)); 122 PAGE_INLINE void uvm_unlock_fpageq __P((int)); 123 124 PAGE_INLINE void uvm_pageactivate __P((struct vm_page *)); 125 vaddr_t uvm_pageboot_alloc __P((vsize_t)); 126 PAGE_INLINE void uvm_pagecopy __P((struct vm_page *, struct vm_page *)); 127 PAGE_INLINE void uvm_pagedeactivate __P((struct vm_page *)); 128 void uvm_pagefree __P((struct vm_page *)); 129 PAGE_INLINE struct vm_page *uvm_pagelookup __P((struct uvm_object *, voff_t)); 130 void uvm_pageremove __P((struct vm_page *)); 131 /* uvm_pagerename: not needed */ 132 PAGE_INLINE void uvm_pageunwire __P((struct vm_page *)); 133 PAGE_INLINE void uvm_pagewait __P((struct vm_page *, int)); 134 PAGE_INLINE void uvm_pagewake __P((struct vm_page *)); 135 PAGE_INLINE void uvm_pagewire __P((struct vm_page *)); 136 PAGE_INLINE void uvm_pagezero __P((struct vm_page *)); 137 138 PAGE_INLINE int uvm_page_lookup_freelist __P((struct vm_page *)); 139 140 #endif /* _KERNEL */ 141 142 #endif /* _UVM_UVM_PAGE_H_ */ 143