1/*
2 * Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
6 * Distributed under the terms of the NewOS License.
7 */
8#ifndef _SYSTEM_VM_DEFS_H
9#define _SYSTEM_VM_DEFS_H
10
11#include <OS.h>
12
13
14// additional protection flags
15// Note: the VM probably won't support all combinations - it will try
16// its best, but create_area() will fail if it has to.
17// Of course, the exact behaviour will be documented somewhere...
18#define B_EXECUTE_AREA			0x04
19#define B_STACK_AREA			0x08
20	// "stack" protection is not available on most platforms - it's used
21	// to only commit memory as needed, and have guard pages at the
22	// bottom of the stack.
23	// "execute" protection is currently ignored, but nevertheless, you
24	// should use it if you require to execute code in that area.
25
26#define B_KERNEL_EXECUTE_AREA	0x40
27#define B_KERNEL_STACK_AREA		0x80
28
29#define B_USER_PROTECTION \
30	(B_READ_AREA | B_WRITE_AREA | B_EXECUTE_AREA | B_STACK_AREA)
31#define B_KERNEL_PROTECTION \
32	(B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_KERNEL_EXECUTE_AREA \
33	| B_KERNEL_STACK_AREA)
34
35// TODO: These aren't really a protection flags, but since the "protection"
36//	field is the only flag field, we currently use it for this.
37//	A cleaner approach would be appreciated - maybe just an official generic
38//	flags region in the protection field.
39#define B_OVERCOMMITTING_AREA	0x1000
40#define B_SHARED_AREA			0x2000
41#define B_KERNEL_AREA			0x4000
42	// Usable from userland according to its protection flags, but the area
43	// itself is not deletable, resizable, etc from userland.
44
45#define B_USER_AREA_FLAGS		(B_USER_PROTECTION | B_OVERCOMMITTING_AREA)
46#define B_KERNEL_AREA_FLAGS \
47	(B_KERNEL_PROTECTION | B_USER_CLONEABLE_AREA | B_SHARED_AREA)
48
49// mapping argument for several internal VM functions
50enum {
51	REGION_NO_PRIVATE_MAP = 0,
52	REGION_PRIVATE_MAP
53};
54
55enum {
56	// TODO: these are here only temporarily - it's a private
57	// addition to the BeOS create_area() lock flags
58	B_ALREADY_WIRED	= 7,
59};
60
61#define MEMORY_TYPE_SHIFT		28
62
63
64#endif	/* _SYSTEM_VM_DEFS_H */
65