]> git.saurik.com Git - apple/xnu.git/blame - osfmk/vm/vm_shared_region.h
xnu-1228.3.13.tar.gz
[apple/xnu.git] / osfmk / vm / vm_shared_region.h
CommitLineData
2d21ac55
A
1/*
2 * Copyright (c) 2007 Apple Inc. All rights reserved.
3 *
4 * @APPLE_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. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23/*
24 *
25 * File: vm/vm_shared_region.h
26 *
27 * protos and struct definitions for shared region
28 */
29
30#ifndef _VM_SHARED_REGION_H_
31#define _VM_SHARED_REGION_H_
32
33#ifdef KERNEL_PRIVATE
34
35#include <mach/vm_prot.h>
36#include <mach/mach_types.h>
37#include <mach/shared_region.h>
38
39#include <kern/kern_types.h>
40#include <kern/macro_help.h>
41
42#include <vm/vm_map.h>
43
44extern int shared_region_version;
45extern int shared_region_persistence;
46
47#if DEBUG
48extern int shared_region_debug;
49#define SHARED_REGION_DEBUG(args) \
50 MACRO_BEGIN \
51 if (shared_region_debug) { \
52 kprintf args; \
53 } \
54 MACRO_END
55#else /* DEBUG */
56#define SHARED_REGION_DEBUG(args)
57#endif /* DEBUG */
58
59extern int shared_region_trace_level;
60#define SHARED_REGION_TRACE_NONE_LVL 0 /* no trace */
61#define SHARED_REGION_TRACE_ERROR_LVL 1 /* trace abnormal events */
62#define SHARED_REGION_TRACE_INFO_LVL 2 /* trace all events */
63#define SHARED_REGION_TRACE_DEBUG_LVL 3 /* extra traces for debug */
64#define SHARED_REGION_TRACE(level, args) \
65 MACRO_BEGIN \
66 if (shared_region_trace_level >= level) { \
67 printf args; \
68 } \
69 MACRO_END
70#define SHARED_REGION_TRACE_NONE(args)
71#define SHARED_REGION_TRACE_ERROR(args) \
72 MACRO_BEGIN \
73 SHARED_REGION_TRACE(SHARED_REGION_TRACE_ERROR_LVL, \
74 args); \
75 MACRO_END
76#define SHARED_REGION_TRACE_INFO(args) \
77 MACRO_BEGIN \
78 SHARED_REGION_TRACE(SHARED_REGION_TRACE_INFO_LVL, \
79 args); \
80 MACRO_END
81#define SHARED_REGION_TRACE_DEBUG(args) \
82 MACRO_BEGIN \
83 SHARED_REGION_TRACE(SHARED_REGION_TRACE_DEBUG_LVL, \
84 args); \
85 MACRO_END
86
87typedef struct vm_shared_region *vm_shared_region_t;
88
89#ifdef MACH_KERNEL_PRIVATE
90
91#include <kern/queue.h>
92#include <vm/vm_object.h>
93#include <vm/memory_object.h>
94
95/* address space shared region descriptor */
96struct vm_shared_region {
97 uint32_t sr_ref_count;
98 void *sr_root_dir;
99 cpu_type_t sr_cpu_type;
100 boolean_t sr_64bit;
101 boolean_t sr_mapping_in_progress;
102 boolean_t sr_persists;
103 ipc_port_t sr_mem_entry;
104 mach_vm_offset_t sr_first_mapping;
105 mach_vm_offset_t sr_base_address;
106 mach_vm_size_t sr_size;
107 mach_vm_offset_t sr_pmap_nesting_start;
108 mach_vm_size_t sr_pmap_nesting_size;
109 queue_chain_t sr_q;
110};
111
112#else /* !MACH_KERNEL_PRIVATE */
113
114struct vm_shared_region;
115
116#endif /* MACH_KERNEL_PRIVATE */
117
118extern void vm_shared_region_init(void);
119extern kern_return_t vm_shared_region_enter(
120 struct _vm_map *map,
121 struct task *task,
122 void *fsroot,
123 cpu_type_t cpu);
124extern kern_return_t vm_shared_region_remove(
125 struct _vm_map *map,
126 struct task *task);
127extern vm_shared_region_t vm_shared_region_get(
128 struct task *task);
129extern void vm_shared_region_deallocate(
130 struct vm_shared_region *shared_region);
131extern mach_vm_offset_t vm_shared_region_base_address(
132 struct vm_shared_region *shared_region);
133extern mach_vm_size_t vm_shared_region_size(
134 struct vm_shared_region *shared_region);
135extern ipc_port_t vm_shared_region_mem_entry(
136 struct vm_shared_region *shared_region);
137extern void vm_shared_region_set(
138 struct task *task,
139 struct vm_shared_region *new_shared_region);
140extern vm_shared_region_t vm_shared_region_lookup(
141 void *root_dir,
142 cpu_type_t cpu,
143 boolean_t is_64bit);
144extern kern_return_t vm_shared_region_start_address(
145 struct vm_shared_region *shared_region,
146 mach_vm_offset_t *start_address);
147extern kern_return_t vm_shared_region_map_file(
148 struct vm_shared_region *shared_region,
149 unsigned int mappings_count,
150 struct shared_file_mapping_np *mappings,
151 memory_object_control_t file_control,
152 memory_object_size_t file_size,
153 void *root_dir);
154
155extern void vm_commpage_init(void);
156extern kern_return_t vm_commpage_enter(
157 struct _vm_map *map,
158 struct task *task);
159extern kern_return_t vm_commpage_remove(
160 struct _vm_map *map,
161 struct task *task);
162
163#endif /* KERNEL_PRIVATE */
164
165#endif /* _VM_SHARED_REGION_H_ */