xref: /original-bsd/sys/vm/vm_param.h (revision fac0c393)
1 /*
2  * Copyright (c) 1991, 1993
3  *	The Regents of the University of California.  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	8.2 (Berkeley) 01/09/95
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 	{ 0, 0 }, \
83 	{ "vmmeter", CTLTYPE_STRUCT }, \
84 	{ "loadavg", CTLTYPE_STRUCT }, \
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 #ifndef ASSEMBLER
101 /*
102  *	Convert addresses to pages and vice versa.
103  *	No rounding is used.
104  */
105 #ifdef KERNEL
106 #define	atop(x)		(((unsigned long)(x)) >> PAGE_SHIFT)
107 #define	ptoa(x)		((vm_offset_t)((x) << PAGE_SHIFT))
108 
109 /*
110  * Round off or truncate to the nearest page.  These will work
111  * for either addresses or counts (i.e., 1 byte rounds to 1 page).
112  */
113 #define	round_page(x) \
114 	((vm_offset_t)((((vm_offset_t)(x)) + PAGE_MASK) & ~PAGE_MASK))
115 #define	trunc_page(x) \
116 	((vm_offset_t)(((vm_offset_t)(x)) & ~PAGE_MASK))
117 #define	num_pages(x) \
118 	((vm_offset_t)((((vm_offset_t)(x)) + PAGE_MASK) >> PAGE_SHIFT))
119 
120 extern vm_size_t	mem_size;	/* size of physical memory (bytes) */
121 extern vm_offset_t	first_addr;	/* first physical page */
122 extern vm_offset_t	last_addr;	/* last physical page */
123 
124 #else
125 /* out-of-kernel versions of round_page and trunc_page */
126 #define	round_page(x) \
127 	((((vm_offset_t)(x) + (vm_page_size - 1)) / vm_page_size) * \
128 	    vm_page_size)
129 #define	trunc_page(x) \
130 	((((vm_offset_t)(x)) / vm_page_size) * vm_page_size)
131 
132 #endif /* KERNEL */
133 #endif /* ASSEMBLER */
134 #endif /* _VM_PARAM_ */
135