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