xref: /original-bsd/sys/vm/vm_param.h (revision 03bd62d7)
1 /*
2  * Copyright (c) 1991 Regents of the University of California.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * The Mach Operating System project at Carnegie-Mellon University.
7  *
8  * %sccs.include.redist.c%
9  *
10  *	@(#)vm_param.h	7.7 (Berkeley) 02/04/93
11  *
12  *
13  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
14  * All rights reserved.
15  *
16  * Authors: Avadis Tevanian, Jr., Michael Wayne Young
17  *
18  * Permission to use, copy, modify and distribute this software and
19  * its documentation is hereby granted, provided that both the copyright
20  * notice and this permission notice appear in all copies of the
21  * software, derivative works or modified versions, and any portions
22  * thereof, and that both notices appear in supporting documentation.
23  *
24  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
25  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
26  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
27  *
28  * Carnegie Mellon requests users of this software to return to
29  *
30  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
31  *  School of Computer Science
32  *  Carnegie Mellon University
33  *  Pittsburgh PA 15213-3890
34  *
35  * any improvements or extensions that they make and grant Carnegie the
36  * rights to redistribute these changes.
37  */
38 
39 /*
40  *	Machine independent virtual memory parameters.
41  */
42 
43 #ifndef	_VM_PARAM_
44 #define	_VM_PARAM_
45 
46 #include <machine/vmparam.h>
47 
48 /*
49  * This belongs in types.h, but breaks too many existing programs.
50  */
51 typedef int	boolean_t;
52 #define	TRUE	1
53 #define	FALSE	0
54 
55 /*
56  *	The machine independent pages are refered to as PAGES.  A page
57  *	is some number of hardware pages, depending on the target machine.
58  */
59 #define DEFAULT_PAGE_SIZE	4096
60 
61 /*
62  *	All references to the size of a page should be done with PAGE_SIZE
63  *	or PAGE_SHIFT.  The fact they are variables is hidden here so that
64  *	we can easily make them constant if we so desire.
65  */
66 #define	PAGE_SIZE	cnt.v_page_size		/* size of page */
67 #define PAGE_MASK	page_mask		/* size of page - 1 */
68 #define PAGE_SHIFT	page_shift		/* bits to shift for pages */
69 #ifdef KERNEL
70 extern vm_size_t	page_mask;
71 extern int		page_shift;
72 #endif
73 
74 /*
75  * CTL_VM identifiers
76  */
77 #define	VM_METER	 1		/* struct vmmeter */
78 #define	VM_LOADAVG	 2		/* struct loadavg */
79 #define	VM_MAXID	 3		/* number of valid vm ids */
80 
81 #define CTL_VM_NAMES { \
82 	"unspec", \
83 	"vmmeter", \
84 	"loadavg", \
85 }
86 
87 /*
88  *	Return values from the VM routines.
89  */
90 #define	KERN_SUCCESS		0
91 #define	KERN_INVALID_ADDRESS	1
92 #define	KERN_PROTECTION_FAILURE	2
93 #define	KERN_NO_SPACE		3
94 #define	KERN_INVALID_ARGUMENT	4
95 #define	KERN_FAILURE		5
96 #define	KERN_RESOURCE_SHORTAGE	6
97 #define	KERN_NOT_RECEIVER	7
98 #define	KERN_NO_ACCESS		8
99 
100 #ifdef	ASSEMBLER
101 #else	ASSEMBLER
102 /*
103  *	Convert addresses to pages and vice versa.
104  *	No rounding is used.
105  */
106 
107 #ifdef	KERNEL
108 #define	atop(x)		(((unsigned)(x)) >> PAGE_SHIFT)
109 #define	ptoa(x)		((vm_offset_t)((x) << PAGE_SHIFT))
110 #endif	KERNEL
111 
112 /*
113  *	Round off or truncate to the nearest page.  These will work
114  *	for either addresses or counts.  (i.e. 1 byte rounds to 1 page
115  *	bytes.
116  */
117 
118 #ifdef	KERNEL
119 #define round_page(x) \
120 	((vm_offset_t)((((vm_offset_t)(x)) + PAGE_MASK) & ~PAGE_MASK))
121 #define trunc_page(x) \
122 	((vm_offset_t)(((vm_offset_t)(x)) & ~PAGE_MASK))
123 #define num_pages(x) \
124 	((vm_offset_t)((((vm_offset_t)(x)) + PAGE_MASK) >> PAGE_SHIFT))
125 #else	KERNEL
126 #define	round_page(x) \
127        ((((vm_offset_t)(x) + (vm_page_size - 1)) / vm_page_size) * vm_page_size)
128 #define	trunc_page(x) \
129 	((((vm_offset_t)(x)) / vm_page_size) * vm_page_size)
130 #endif	KERNEL
131 
132 #ifdef	KERNEL
133 extern vm_size_t	mem_size;	/* size of physical memory (bytes) */
134 extern vm_offset_t	first_addr;	/* first physical page */
135 extern vm_offset_t	last_addr;	/* last physical page */
136 #endif	KERNEL
137 
138 #endif	ASSEMBLER
139 
140 #endif	_VM_PARAM_
141