xref: /original-bsd/sys/vm/vm_param.h (revision a1c2194a)
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.3 (Berkeley) 07/25/91
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 #ifdef KERNEL
47 #include "machine/vmparam.h"
48 #else
49 #include <machine/vmparam.h>
50 #endif
51 
52 /*
53  * This belongs in types.h, but breaks too many existing programs.
54  */
55 typedef int	boolean_t;
56 #define	TRUE	1
57 #define	FALSE	0
58 
59 /*
60  *	The machine independent pages are refered to as PAGES.  A page
61  *	is some number of hardware pages, depending on the target machine.
62  */
63 #define DEFAULT_PAGE_SIZE	4096
64 
65 /*
66  *	All references to the size of a page should be done with PAGE_SIZE
67  *	or PAGE_SHIFT.  The fact they are variables is hidden here so that
68  *	we can easily make them constant if we so desire.
69  */
70 #define	PAGE_SIZE	vm_stat.page_size	/* size of page */
71 #define PAGE_SHIFT	page_shift		/* bits to shift for pages */
72 
73 /*
74  *	Return values from the VM routines.
75  */
76 #define	KERN_SUCCESS		0
77 #define	KERN_INVALID_ADDRESS	1
78 #define	KERN_PROTECTION_FAILURE	2
79 #define	KERN_NO_SPACE		3
80 #define	KERN_INVALID_ARGUMENT	4
81 #define	KERN_FAILURE		5
82 #define	KERN_RESOURCE_SHORTAGE	6
83 #define	KERN_NOT_RECEIVER	7
84 #define	KERN_NO_ACCESS		8
85 
86 #ifdef	ASSEMBLER
87 #else	ASSEMBLER
88 /*
89  *	Convert addresses to pages and vice versa.
90  *	No rounding is used.
91  */
92 
93 #ifdef	KERNEL
94 #define	atop(x)		(((unsigned)(x)) >> page_shift)
95 #define	ptoa(x)		((vm_offset_t)((x) << page_shift))
96 #endif	KERNEL
97 
98 /*
99  *	Round off or truncate to the nearest page.  These will work
100  *	for either addresses or counts.  (i.e. 1 byte rounds to 1 page
101  *	bytes.
102  */
103 
104 #ifdef	KERNEL
105 #define round_page(x)	((vm_offset_t)((((vm_offset_t)(x)) + page_mask) & ~page_mask))
106 #define trunc_page(x)	((vm_offset_t)(((vm_offset_t)(x)) & ~page_mask))
107 #else	KERNEL
108 #define	round_page(x)	((((vm_offset_t)(x) + (vm_page_size - 1)) / vm_page_size) * vm_page_size)
109 #define	trunc_page(x)	((((vm_offset_t)(x)) / vm_page_size) * vm_page_size)
110 #endif	KERNEL
111 
112 #ifdef	KERNEL
113 extern vm_size_t	page_mask;	/* vm_stat.page_size - 1; mask for
114 						   offset within page */
115 extern int		page_shift;	/* shift to use for page size */
116 
117 extern vm_size_t	mem_size;	/* size of physical memory (bytes) */
118 extern vm_offset_t	first_addr;	/* first physical page */
119 extern vm_offset_t	last_addr;	/* last physical page */
120 #endif	KERNEL
121 
122 #endif	ASSEMBLER
123 
124 #endif	_VM_PARAM_
125