1/* 2 * Copyright (c) 2000-2010 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,1988 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 * NOTICE: This file was modified by McAfee Research in 2004 to introduce 58 * support for mandatory and extensible security protections. This notice 59 * is included in support of clause 2.2 (b) of the Apple Public License, 60 * Version 2.0. 61 */ 62/* 63 */ 64/* 65 * Mach kernel interface type declarations 66 */ 67 68#ifndef _MACH_MACH_TYPES_DEFS_ 69#define _MACH_MACH_TYPES_DEFS_ 70 71 72#include <mach/std_types.defs> 73 74type memory_object_offset_t = uint64_t; 75type memory_object_size_t = uint64_t; 76type memory_object_cluster_size_t = uint32_t; 77type memory_object_fault_info_t = array[16] of integer_t; 78 79#ifdef KERNEL_PRIVATE 80 81/* Universal Page Lists - restricted to (in-kernel) pagers for now */ 82type upl_size_t = uint32_t; 83type upl_offset_t = uint32_t; 84type upl_page_info_t = struct[2] of integer_t; 85type upl_page_info_array_t = array[*:256] of upl_page_info_t; 86 87type upl_t = mach_port_t 88 intran: upl_t convert_port_to_upl(mach_port_t) 89 outtran: mach_port_t convert_upl_to_port(upl_t) 90 destructor: upl_deallocate(upl_t) 91 ; 92 93#endif /* KERNEL_PRIVATE */ 94 95type mach_port_status_t = struct[10] of integer_t; /* obsolete */ 96 97 /* mach_port_info_t: can hold either a 98 * mach_port_status_t (9 ints) or a 99 * mach_port_limits_t (1 int). If new flavors of 100 * mach_port_{get,set}_attributes are added, the size of 101 * this array may have to be increased. (See mach/port.h) 102 */ 103type mach_port_flavor_t = int; 104type mach_port_info_t = array[*:10] of integer_t; 105 106type task_t = mach_port_t 107#if KERNEL_SERVER 108 intran: task_t convert_port_to_task(mach_port_t) 109 outtran: mach_port_t convert_task_to_port(task_t) 110 destructor: task_deallocate(task_t) 111#endif /* KERNEL_SERVER */ 112 ; 113 114type task_name_t = mach_port_t 115#if KERNEL_SERVER 116 intran: task_name_t convert_port_to_task_name(mach_port_t) 117 outtran: mach_port_t convert_task_name_to_port(task_name_t) 118 destructor: task_name_deallocate(task_name_t) 119#endif /* KERNEL_SERVER */ 120 ; 121 122type thread_t = mach_port_t 123#if KERNEL_SERVER 124 intran: thread_t convert_port_to_thread(mach_port_t) 125 outtran: mach_port_t convert_thread_to_port(thread_t) 126 destructor: thread_deallocate(thread_t) 127#endif /* KERNEL_SERVER */ 128 ; 129 130type thread_act_t = mach_port_t 131#if KERNEL_SERVER 132 intran: thread_act_t convert_port_to_thread(mach_port_t) 133 outtran: mach_port_t convert_thread_to_port(thread_act_t) 134 destructor: thread_deallocate(thread_act_t) 135#endif /* KERNEL_SERVER */ 136 ; 137 138type thread_act_consume_ref_t = mach_port_move_send_t 139 cusertype: thread_act_t 140#if KERNEL_SERVER 141 intran: thread_act_t convert_port_to_thread(mach_port_t) 142 destructor: thread_deallocate(thread_act_t) 143#endif /* KERNEL_SERVER */ 144 ; 145 146 /* thread_state_t: This inline array can hold 147 * a machine-dependent amount of data, defined in 148 * mach/machine/???? (currently THREAD_STATE_MAX, 149 * in mach/thread_state.h) 150 */ 151#include <mach/machine/thread_state.h> 152type thread_state_flavor_t = int; 153type thread_state_t = array[*:THREAD_STATE_MAX] of natural_t; 154 155type task_array_t = ^array[] of task_t; 156type thread_array_t = ^array[] of thread_t; 157type thread_act_array_t = ^array[] of thread_act_t; 158type act_params_t = array[6] of int; 159 160type vm_map_t = mach_port_t 161#if KERNEL_SERVER 162 intran: vm_map_t convert_port_to_map(mach_port_t) 163 destructor: vm_map_deallocate(vm_map_t) 164#endif /* KERNEL_SERVER */ 165 ; 166 167type vm_task_entry_t = mach_port_t 168 cusertype: vm_map_t 169#if KERNEL_SERVER 170 intran: vm_map_t convert_port_entry_to_map(mach_port_t) 171 destructor: vm_map_deallocate(vm_map_t) 172#endif /* KERNEL_SERVER */ 173 ; 174 175type ipc_space_t = mach_port_t 176#if KERNEL_SERVER 177 intran: ipc_space_t convert_port_to_space(mach_port_t) 178 destructor: space_deallocate(ipc_space_t) 179#endif /* KERNEL_SERVER */ 180 ; 181 182type vm_prot_t = int; 183type vm_inherit_t = int; 184type vm_purgable_t = int; 185type xxx_vm_statistics_data_t = struct[13] of integer_t; 186type vm_behavior_t = int; 187type vm_statistics_data_t = struct[15] of integer_t; 188type vm_machine_attribute_t = int; 189type vm_machine_attribute_val_t = int; 190type vm_sync_t = int; 191 192 /* thread_info_t: this inline array can hold any of: 193 * thread_basic_info_t (10 ints) 194 * policy_timeshare_info_t (5 ints) 195 * policy_fifo_info_t (4 ints) 196 * policy_rr_info_t (5 ints) 197 * if other thread_info flavors are added, this 198 * definition may need to be changed. (See 199 * mach/thread_info.h and mach/policy.h) */ 200type thread_flavor_t = int; 201type thread_info_t = array[*:12] of integer_t; 202 203type thread_policy_flavor_t = natural_t; 204type thread_policy_t = array[*:16] of integer_t; 205 206 /* task_info_t: this inline array can hold any of: 207 * task_basic_info_32_t (8 ints) 208 * task_basic_info_64_t (10 ints) 209 * task_events_info_t (8 ints) 210 * task_thread_times_info_t (4 ints) 211 * policy_timeshare_info_t (5 ints) 212 * policy_fifo_info_t (4 ints) 213 * policy_rr_info_t (5 ints) 214 * task security token (2 ints) 215 * task audit token (8 ints) 216 * dyld info (2 64-bit ints and 1 int) 217 * task_extmod_info_t (8 64-bit ints) 218 * task_basic_info_64_2_t 219 * mach_task_basic_info_t (12 ints) 220 * task_power_info_t (18 ints) 221 * If other task_info flavors are added, this 222 * definition may need to be changed. (See 223 * mach/task_info.h and mach/policy.h) */ 224type task_flavor_t = int; 225type task_info_t = array[*:32] of integer_t; 226 227type task_policy_flavor_t = natural_t; 228type task_policy_t = array[*:16] of integer_t; 229 230type mem_entry_name_port_t = mach_port_t 231#if KERNEL_SERVER 232 intran: mem_entry_name_port_t null_conversion(mach_port_t) 233 outtran: mach_port_t null_conversion(mem_entry_name_port_t) 234#endif /* KERNEL_SERVER */ 235 ; 236 237type mem_entry_name_port_move_send_t = mach_port_move_send_t 238 cusertype: mem_entry_name_port_t 239#if KERNEL_SERVER 240 intran: mem_entry_name_port_t null_conversion(mach_port_t) 241 outtran: mach_port_t null_conversion(mem_entry_name_port_t) 242#endif /* KERNEL_SERVER */ 243 ; 244 245type memory_object_default_t = mach_port_t 246#if KERNEL_PRIVATE 247 intran: memory_object_default_t null_conversion(mach_port_t) 248 outtran: mach_port_t null_conversion(memory_object_default_t) 249#endif /* KERNEL_PRIVATE */ 250 ; 251 252type memory_object_t = mach_port_t 253#if KERNEL_PRIVATE 254 intran: memory_object_t convert_port_to_memory_object(mach_port_t) 255 outtran: mach_port_t convert_memory_object_to_port(memory_object_t) 256#endif /* KERNEL_PRIVATE */ 257 ; 258 259 260type memory_object_control_t = mach_port_t 261#if KERNEL_PRIVATE 262 intran: memory_object_control_t convert_port_to_mo_control(mach_port_t) 263 outtran: mach_port_t convert_mo_control_to_port(memory_object_control_t) 264 destructor: memory_object_control_deallocate(memory_object_control_t) 265#endif /* KERNEL_PRIVATE */ 266 ; 267 268type memory_object_name_t = mach_port_t 269 ctype: mach_port_t 270 ; 271 272 273type memory_object_copy_strategy_t = int; 274type memory_object_return_t = int; 275 276type machine_info_data_t = struct[5] of integer_t; 277type machine_slot_data_t = struct[8] of integer_t; 278 279type host_t = mach_port_t 280#if KERNEL_SERVER 281 intran: host_t convert_port_to_host(mach_port_t) 282 outtran: mach_port_t convert_host_to_port(host_t) 283#endif /* KERNEL_SERVER */ 284 ; 285 286type host_priv_t = mach_port_t 287#if KERNEL_SERVER 288 intran: host_priv_t convert_port_to_host_priv(mach_port_t) 289#endif /* KERNEL_SERVER */ 290 ; 291 292type host_security_t = mach_port_t 293#if KERNEL_SERVER 294 intran: host_security_t convert_port_to_host_security(mach_port_t) 295#endif /* KERNEL_SERVER */ 296 ; 297 298 /* 299 * host_info_t: variable-sized inline array that can contain: 300 * 301 * host_basic_info_old_t (5 ints) 302 * host_basic_info_t (12 ints) 303 * host_sched_info_t (2 ints) 304 * kernel_resource_sizes_t (5 ints) 305 * host_load_info_t (6 ints) 306 * vm_statistics32_t (15 ints) 307 * host_expired_task_info uses a task_power_info (18 ints) 308 * 309 * If other host_info flavors are added, this definition may 310 * need to be changed. (See mach/{host_info,vm_statistics}.h) 311 */ 312type host_flavor_t = int; 313type host_info_t = array[*:18] of integer_t; 314 315 316 /* 317 * host_info64_t: variable-sized inline array that can contain: 318 * 319 * vm_statistics_t (6 ints and 9 longs) 320 * vm_extmod_statistics_t (6 64-bit ints) 321 */ 322type host_info64_t = array[*:256] of integer_t; 323 324type processor_t = mach_port_t 325#if KERNEL_SERVER 326 intran: processor_t convert_port_to_processor(mach_port_t) 327 outtran: mach_port_t convert_processor_to_port(processor_t) 328#endif /* KERNEL_SERVER */ 329 ; 330 331type processor_array_t = ^array[] of processor_t; 332 333 /* processor_info_t: variable-sized inline array that can 334 * contain: 335 * processor_basic_info_t: (5 ints) 336 * processor_cpu_load_info_t:(4 ints) 337 * processor_machine_info_t :(12 ints) 338 * If other processor_info flavors are added, this definition 339 * may need to be changed. (See mach/processor_info.h) */ 340type processor_flavor_t = int; 341type processor_info_t = array[*:12] of integer_t; 342type processor_info_array_t = ^array[] of integer_t; 343 344type processor_set_t = mach_port_t 345#if KERNEL_SERVER 346 intran: processor_set_t convert_port_to_pset(mach_port_t) 347 outtran: mach_port_t convert_pset_to_port(processor_set_t) 348 destructor: pset_deallocate(processor_set_t) 349#endif /* KERNEL_SERVER */ 350 ; 351 352type processor_set_array_t = ^array[] of processor_set_t; 353 354type processor_set_name_t = mach_port_t 355#if KERNEL_SERVER 356 intran: processor_set_name_t convert_port_to_pset_name(mach_port_t) 357 outtran: mach_port_t convert_pset_name_to_port(processor_set_name_t) 358 destructor: pset_deallocate(processor_set_name_t) 359#endif /* KERNEL_SERVER */ 360 ; 361 362type processor_set_name_array_t = ^array[] of processor_set_name_t; 363 364 /* processor_set_info_t: variable-size inline array 365 * that can hold: 366 * processor_set_basic_info (5 ints) 367 * processor_set_load_info (4 ints) 368 * policy_timeshare_base_t (1 int) 369 * policy_fifo_base_t (1 int) 370 * policy_rr_base_t (1 int) 371 * policy_timeshare_base_t (1 int) 372 * policy_fifo_base_t (1 int) 373 * policy_rr_base_t (1 int) 374 * policy_t (1 int) 375 * If other flavors are added, this definition may 376 * need to be changed. (see mach/processor.h) */ 377type processor_set_flavor_t = int; 378type processor_set_info_t = array[*:5] of integer_t; 379 380type bootstrap_t = mach_port_t; 381 382type kernel_version_t = c_string[*:512]; 383type kernel_boot_info_t = c_string[*:4096]; 384 385type time_value_t = struct[2] of integer_t; 386 387type mach_port_qos_t = struct[2] of integer_t; 388 389type emulation_vector_t = ^array[] of vm_offset_t; 390 391type inline_existence_map_t = array[*:512] of char; 392 393type policy_t = int; 394 /* policy_info_t: variable-size inline array. Can hold: 395 * policy_timeshare_info_t (5 ints) 396 * policy_fifo_info_t (4 ints) 397 * policy_rr_info_t (5 ints) */ 398type policy_base_t = array[*:5] of integer_t; 399type policy_info_t = array[*:2] of integer_t; 400type policy_limit_t = array[*:1] of integer_t; 401 402type ledger_t = mach_port_t 403#if KERNEL_SERVER 404 intran: ledger_t convert_port_to_ledger(mach_port_t) 405 outtran: mach_port_t convert_ledger_to_port(ledger_t) 406#endif /* KERNEL_SERVER */ 407 ; 408 409type ledger_array_t = ^array[] of ledger_t; 410type ledger_item_t = integer_t; 411 /* DEPRECATED */ 412 413type ledger_amount_t = int64_t; 414 415type security_token_t = struct[2] of uint32_t; 416type audit_token_t = struct[8] of uint32_t; 417 418type msg_labels_t = mach_port_t; 419 420 /* memory_object_info_t: variable-size inline array: 421 * memory_object_attr_info_t (5 ints) 422 * XXX actually it's 6 ints temporarily (object_ready!) 423 * memory_object_behave_info_t (4 ints) 424 * memory_object_perf_info_t (2 ints) 425 * old_memory_object_attr_info_t (3 ints) 426 * memory_object_norma_info_t (5 ints) 427 * If other flavors are added, this definition may 428 * need to be changed. (see mach/memory_object.h) */ 429type memory_object_flavor_t = int; 430type memory_object_info_t = array[*:6] of int; 431 432 /* vm_region_info_t: variable-size inline array that can hold: 433 * vm_region_basic_info_t (8 ints) 434 * If other flavors are added, this definition may 435 * need to be changed. (see mach/vm_region.h) */ 436type vm_region_flavor_t = int; 437type vm_region_info_t = array[*:10] of int; 438type vm_region_recurse_info_t = array[*:19] of int; 439 440type vm_page_info_flavor_t = int; 441type vm_page_info_t = array[*:32] of int; 442 443type mach_vm_read_entry_t = array[512] of mach_vm_offset_t; 444type vm_read_entry_t = array[512] of vm_offset_t; 445#if VM32_SUPPORT 446type vm32_read_entry_t = array[512] of vm32_offset_t; 447#endif 448 449type exception_mask_t = int; 450type exception_behavior_t = int; 451 452type exception_handler_t = mach_port_t; 453 454type exception_handler_array_t = 455 array[*:32] of exception_handler_t; 456 457type exception_behavior_array_t = 458 array[*:32] of exception_behavior_t; 459 460type exception_flavor_array_t = 461 array[*:32] of thread_state_flavor_t; 462 463type exception_mask_array_t = 464 array[*:32] of exception_mask_t; 465 466type semaphore_t = mach_port_t 467#if KERNEL_SERVER 468 intran: semaphore_t convert_port_to_semaphore(mach_port_t) 469 outtran: mach_port_t convert_semaphore_to_port(semaphore_t) 470 destructor: semaphore_dereference(semaphore_t) 471#endif /* KERNEL_SERVER */ 472 ; 473 474type semaphore_consume_ref_t = mach_port_move_send_t 475 cusertype: semaphore_t 476#if KERNEL_SERVER 477 intran: semaphore_t convert_port_to_semaphore(mach_port_t) 478 outtran: mach_port_t convert_semaphore_to_port(semaphore_t) 479 destructor: semaphore_dereference(semaphore_t) 480#endif /* KERNEL_SERVER */ 481 ; 482 483type lock_set_t = mach_port_t 484#if KERNEL_SERVER 485 intran: lock_set_t convert_port_to_lock_set(mach_port_t) 486 outtran: mach_port_t convert_lock_set_to_port(lock_set_t) 487 destructor: lock_set_dereference(lock_set_t) 488#endif /* KERNEL_SERVER */ 489 ; 490 491/* kernel module loader */ 492type kmod_t = int; 493type kmod_control_flavor_t = int; 494 495type kmod_args_t = ^array[] of MACH_MSG_TYPE_BYTE 496 ctype: kmod_args_t; 497 498type io_master_t = mach_port_t; 499type UNDServerRef = mach_port_t; 500 501#if KERNEL_SERVER 502#ifdef MACH_KERNEL_PRIVATE 503simport <kern/ipc_kobject.h>; /* for null conversion */ 504simport <kern/ipc_tt.h>; /* for task/thread conversion */ 505simport <kern/ipc_host.h>; /* for host/processor/pset conversions */ 506simport <kern/ipc_sync.h>; /* for lock_set and semaphore conversions */ 507simport <kern/ledger.h>; /* for ledger conversions */ 508simport <kern/processor.h>; /* for processor conversions */ 509simport <kern/sync_lock.h>; /* for lock-set conversions */ 510simport <kern/sync_sema.h>; /* for semaphore conversions */ 511simport <vm/memory_object.h>; /* for memory object type conversions */ 512simport <vm/vm_map.h>; /* for vm_map conversions */ 513#endif /* MACH_KERNEL_PRIVATE */ 514 515simport <kern/ipc_mig.h>; /* pick up kernel-specific MIG things */ 516 517#endif /* KERNEL_SERVER */ 518 519import <mach/mig.h>; 520import <mach/mach_types.h>; 521 522#endif /* _MACH_MACH_TYPES_DEFS_ */ 523 524/* vim: set ft=c : */ 525