1/* 2 * Copyright (c) 2000-2009 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 * @OSF_COPYRIGHT@ 30 */ 31/* 32 * Mach Operating System 33 * Copyright (c) 1991,1990,1989 Carnegie Mellon University 34 * All Rights Reserved. 35 * 36 * Permission to use, copy, modify and distribute this software and its 37 * documentation is hereby granted, provided that both the copyright 38 * notice and this permission notice appear in all copies of the 39 * software, derivative works or modified versions, and any portions 40 * thereof, and that both notices appear in supporting documentation. 41 * 42 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 43 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 44 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 45 * 46 * Carnegie Mellon requests users of this software to return to 47 * 48 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 49 * School of Computer Science 50 * Carnegie Mellon University 51 * Pittsburgh PA 15213-3890 52 * 53 * any improvements or extensions that they make and grant Carnegie Mellon 54 * the rights to redistribute these changes. 55 */ 56/* 57 */ 58 59/* 60 * File: mach/mach_host.defs 61 * 62 * Abstract: 63 * Mach host operations support. Includes processor allocation and 64 * control. 65 */ 66 67subsystem 68#if KERNEL_SERVER 69 KernelServer 70#endif /* KERNEL_SERVER */ 71 mach_host 200; 72 73/* 74 * Basic types 75 */ 76 77#include <mach/std_types.defs> 78#include <mach/mach_types.defs> 79#include <mach/clock_types.defs> 80#include <mach_debug/mach_debug_types.defs> 81 82/* 83 * References to host objects are returned by: 84 * mach_host_self() - trap 85 */ 86 87/* 88 * Return information about this host. 89 */ 90routine host_info( 91 host : host_t; 92 flavor : host_flavor_t; 93 out host_info_out : host_info_t, CountInOut); 94 95/* 96 * Get string describing current kernel version. 97 */ 98routine host_kernel_version( 99 host : host_t; 100 out kernel_version : kernel_version_t); 101 102/* 103 * Get host page size 104 * (compatibility for running old libraries on new kernels - 105 * host_page_size() is now a library routine based on constants) 106 */ 107#if KERNEL 108routine host_page_size( 109#else 110routine _host_page_size( 111#endif 112 host : host_t; 113 out out_page_size : vm_size_t); 114 115/* 116 * Allow pagers to create named entries that point to un-mapped 117 * abstract memory object. The named entries are generally mappable 118 * and can be subsetted through the mach_make_memory_entry call 119 */ 120routine mach_memory_object_memory_entry( 121 host :host_t; 122 internal :boolean_t; 123 size :vm_size_t; 124 permission :vm_prot_t; 125 pager :memory_object_t; 126 out entry_handle :mach_port_move_send_t); 127 128 129/* 130 * Get processor info for all the processors on this host. 131 * The returned data is an OOL array of processor info. 132 */ 133routine host_processor_info( 134 host : host_t; 135 flavor : processor_flavor_t; 136 out out_processor_count : natural_t; 137 out out_processor_info : processor_info_array_t); 138 139/* 140 * Return host IO master access port 141 */ 142routine host_get_io_master( 143 host : host_t; 144 out io_master : io_master_t); 145 146/* 147 * Get service port for a processor set. 148 * Available to all. 149 */ 150routine host_get_clock_service( 151 host : host_t; 152 clock_id : clock_id_t; 153 out clock_serv : clock_serv_t); 154 155/* 156 * kernel module interface (obsolete as of SnowLeopard) 157 * see mach/kmod.h 158 */ 159/* kmod_ MIG calls now return KERN_NOT_SUPPORTED on PPC/i386/x86_64. */ 160routine kmod_get_info( 161 host : host_t; 162 out modules : kmod_args_t); 163 164/* 165 * Returns information about the memory allocation zones. 166 * Supported in all kernels.. 167 * 168 * DEPRECATED! Use mach_zone_info() instead. 169 */ 170routine host_zone_info( 171 host : host_priv_t; 172 out names : zone_name_array_t, 173 Dealloc; 174 out info : zone_info_array_t, 175 Dealloc); 176 177/* 178 * Returns information about the global VP table. 179 * Only supported in MACH_VM_DEBUG kernels, 180 * otherwise returns KERN_FAILURE. 181 */ 182routine host_virtual_physical_table_info( 183 host : host_t; 184 out info : hash_info_bucket_array_t, 185 Dealloc); 186 187 188skip; /* was host_ipc_hash_info */ 189skip; /* was enable_bluebox */ 190skip; /* was disable_bluebox */ 191 192/* 193 * JMM - Keep processor_set related items at the end for easy 194 * removal. 195 */ 196/* 197 * Get default processor set for host. 198 */ 199routine processor_set_default( 200 host : host_t; 201 out default_set : processor_set_name_t); 202 203/* 204 * Create new processor set. Returns real port for manipulations, 205 * and name port for obtaining information. 206 */ 207routine processor_set_create( 208 host : host_t; 209 out new_set : processor_set_t; 210 out new_name : processor_set_name_t); 211 212/* 213 * Temporary interfaces for conversion to 64 bit data path 214 */ 215 216routine mach_memory_object_memory_entry_64( 217 host :host_t; 218 internal :boolean_t; 219 size :memory_object_size_t; 220 permission :vm_prot_t; 221 pager :memory_object_t; 222 out entry_handle :mach_port_move_send_t); 223 224/* 225 * Return statistics from this host. 226 */ 227routine host_statistics( 228 host_priv : host_t; 229 flavor : host_flavor_t; 230 out host_info_out : host_info_t, CountInOut); 231 232routine host_request_notification( 233 host : host_t; 234 notify_type : host_flavor_t; 235 notify_port : mach_port_make_send_once_t); 236 237routine host_lockgroup_info( 238 host : host_t; 239 out lockgroup_info : lockgroup_info_array_t, 240 Dealloc); 241 242/* 243 * Return 64-bit statistics from this host. 244 */ 245routine host_statistics64( 246 host_priv : host_t; 247 flavor : host_flavor_t; 248 out host_info64_out : host_info64_t, CountInOut); 249 250/* 251 * Returns information about the memory allocation zones. 252 * Data returned is compatible with various caller and kernel 253 * address space sizes (unlike host_zone_info()). 254 */ 255routine mach_zone_info( 256 host : host_priv_t; 257 out names : mach_zone_name_array_t, 258 Dealloc; 259 out info : mach_zone_info_array_t, 260 Dealloc); 261 262#ifdef PRIVATE 263/* 264 * Forces a zone allocator garbage collections pass. 265 * Pages with no in-use allocations are returned to 266 * the VM system for re-use. 267 */ 268routine mach_zone_force_gc( 269 host : host_t); 270#else 271skip; 272#endif 273 274/* 275 * Create a new voucher by running a series of commands against 276 * <key, previous-voucher> pairs of resource attributes. 277 */ 278routine host_create_mach_voucher( 279 host : host_t; 280 recipes : mach_voucher_attr_raw_recipe_array_t; 281 out voucher : ipc_voucher_t); 282 283/* 284 * Register a resource manager with the kernel. A new key is selected. 285 */ 286routine host_register_mach_voucher_attr_manager( 287 host : host_t; 288 attr_manager : mach_voucher_attr_manager_t; 289 default_value : mach_voucher_attr_value_handle_t; 290 out new_key : mach_voucher_attr_key_t; 291 out new_attr_control: ipc_voucher_attr_control_t); 292 293/* 294 * Register a resource manager (with a well-known key value) with the kernel. 295 */ 296routine host_register_well_known_mach_voucher_attr_manager( 297 host : host_t; 298 attr_manager : mach_voucher_attr_manager_t; 299 default_value : mach_voucher_attr_value_handle_t; 300 key : mach_voucher_attr_key_t; 301 out new_attr_control: ipc_voucher_attr_control_t); 302 303/* vim: set ft=c : */ 304