Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/i386/include/mach/vm_purgable.h

Source at commit 1808 created 12 years 4 months ago.
By blackosx, Revise layout of package installer 'Welcome' file so it looks cleaner. Change the copyright notice to begin from 2009 as seen in the Chameleon 2.0 r431 installer. Should this date be set earlier?
1/*
2 * Copyright (c) 2003-2007 Apple Inc. All rights reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28
29/*
30 * Virtual memory map purgeable object definitions.
31 * Objects that will be needed in the future (forward cached objects) should be queued LIFO.
32 * Objects that have been used and are cached for reuse (backward cached) should be queued FIFO.
33 * Every user of purgeable memory is entitled to using the highest volatile group (7).
34 * Only if a client wants some of its objects to definitely be purged earlier, it can put those in
35 * another group. This could be used to make all FIFO objects (in the lower group) go away before
36 * any LIFO objects (in the higher group) go away.
37 * Objects that should not get any chance to stay around can be marked as "obsolete". They will
38 * be emptied before any other objects or pages are reclaimed. Obsolete objects are not emptied
39 * in any particular order.
40 * 'purgeable' is recognized as the correct spelling. For historical reasons, definitions
41 * in this file are spelled 'purgable'.
42 */
43
44#ifndef_MACH_VM_PURGABLE_H_
45#define_MACH_VM_PURGABLE_H_
46
47/*
48 *Types defined:
49 *
50 *vm_purgable_tpurgeable object control codes.
51 */
52
53typedef intvm_purgable_t;
54
55/*
56 *Enumeration of valid values for vm_purgable_t.
57 */
58#define VM_PURGABLE_SET_STATE((vm_purgable_t) 0)/* set state of purgeable object */
59#define VM_PURGABLE_GET_STATE((vm_purgable_t) 1)/* get state of purgeable object */
60#define VM_PURGABLE_PURGE_ALL((vm_purgable_t) 2)/* purge all volatile objects now */
61
62#define VM_PURGABLE_DEBUG_SHIFT12
63#define VM_PURGABLE_DEBUG_MASK(0x3 << VM_PURGABLE_DEBUG_SHIFT)
64#define VM_PURGABLE_DEBUG_EMPTY(0x1 << VM_PURGABLE_DEBUG_SHIFT)
65#define VM_PURGABLE_DEBUG_FAULT(0x2 << VM_PURGABLE_DEBUG_SHIFT)
66
67/*
68 * Volatile memory ordering groups (group zero objects are purged before group 1, etc...
69 * It is implementation dependent as to whether these groups are global or per-address space.
70 * (for the moment, they are global).
71 */
72#define VM_VOLATILE_GROUP_SHIFT8
73#define VM_VOLATILE_GROUP_MASK(7 << VM_VOLATILE_GROUP_SHIFT)
74#define VM_VOLATILE_GROUP_DEFAULT VM_VOLATILE_GROUP_7
75
76#define VM_VOLATILE_GROUP_0(0 << VM_VOLATILE_GROUP_SHIFT)
77#define VM_VOLATILE_GROUP_1(1 << VM_VOLATILE_GROUP_SHIFT)
78#define VM_VOLATILE_GROUP_2(2 << VM_VOLATILE_GROUP_SHIFT)
79#define VM_VOLATILE_GROUP_3(3 << VM_VOLATILE_GROUP_SHIFT)
80#define VM_VOLATILE_GROUP_4(4 << VM_VOLATILE_GROUP_SHIFT)
81#define VM_VOLATILE_GROUP_5(5 << VM_VOLATILE_GROUP_SHIFT)
82#define VM_VOLATILE_GROUP_6(6 << VM_VOLATILE_GROUP_SHIFT)
83#define VM_VOLATILE_GROUP_7(7 << VM_VOLATILE_GROUP_SHIFT)
84
85/*
86 * Purgeable behavior
87 * Within the same group, FIFO objects will be emptied before objects that are added later.
88 * LIFO objects will be emptied after objects that are added later.
89 * - Input only, not returned on state queries.
90 */
91#define VM_PURGABLE_BEHAVIOR_SHIFT 6
92#define VM_PURGABLE_BEHAVIOR_MASK (1 << VM_PURGABLE_BEHAVIOR_SHIFT)
93#define VM_PURGABLE_BEHAVIOR_FIFO (0 << VM_PURGABLE_BEHAVIOR_SHIFT)
94#define VM_PURGABLE_BEHAVIOR_LIFO (1 << VM_PURGABLE_BEHAVIOR_SHIFT)
95
96/*
97 * Obsolete object.
98 * Disregard volatile group, and put object into obsolete queue instead, so it is the next object
99 * to be purged.
100 * - Input only, not returned on state queries.
101 */
102#define VM_PURGABLE_ORDERING_SHIFT5
103#define VM_PURGABLE_ORDERING_MASK(1 << VM_PURGABLE_ORDERING_SHIFT)
104#define VM_PURGABLE_ORDERING_OBSOLETE(1 << VM_PURGABLE_ORDERING_SHIFT)
105#define VM_PURGABLE_ORDERING_NORMAL(0 << VM_PURGABLE_ORDERING_SHIFT)
106
107
108/*
109 * Obsolete parameter - do not use
110 */
111#define VM_VOLATILE_ORDER_SHIFT4
112#define VM_VOLATILE_ORDER_MASK(1 << VM_VOLATILE_ORDER_SHIFT)
113#define VM_VOLATILE_MAKE_FIRST_IN_GROUP(1 << VM_VOLATILE_ORDER_SHIFT)
114#define VM_VOLATILE_MAKE_LAST_IN_GROUP(0 << VM_VOLATILE_ORDER_SHIFT)
115
116/*
117 * Valid states of a purgeable object.
118 */
119#define VM_PURGABLE_STATE_MIN0/* minimum purgeable object state value */
120#define VM_PURGABLE_STATE_MAX3/* maximum purgeable object state value */
121#define VM_PURGABLE_STATE_MASK3/* mask to separate state from group */
122
123#define VM_PURGABLE_NONVOLATILE0/* purgeable object is non-volatile */
124#define VM_PURGABLE_VOLATILE1/* purgeable object is volatile */
125#define VM_PURGABLE_EMPTY2/* purgeable object is volatile and empty */
126#define VM_PURGABLE_DENY3/* (mark) object not purgeable */
127
128#define VM_PURGABLE_ALL_MASKS(VM_PURGABLE_STATE_MASK | \
129 VM_VOLATILE_ORDER_MASK | \
130 VM_PURGABLE_ORDERING_MASK | \
131 VM_PURGABLE_BEHAVIOR_MASK | \
132 VM_VOLATILE_GROUP_MASK | \
133 VM_PURGABLE_DEBUG_MASK)
134#endif/* _MACH_VM_PURGABLE_H_ */
135

Archive Download this file

Revision: 1808