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 */ 96type mach_port_info_ext_t = struct[17] of integer_t; 97 98 /* mach_port_info_t: can hold either a 99 * mach_port_status_t (9 ints) or a 100 * mach_port_limits_t (1 int) or a 101 * mach_port_info_ext_t (17 ints). If new flavors of 102 * mach_port_{get,set}_attributes are added, the size of 103 * this array may have to be increased. (See mach/port.h) 104 */ 105type mach_port_flavor_t = int; 106type mach_port_info_t = array[*:17] of integer_t; 107 108 /* 109 * mach_msg_max_trailer_t: can hold 110 * mach_msg_trailer_type_t (1 int) 111 * mach_msg_trailer_size_t (1 int) 112 * mach_port_seqno_t (1 int) 113 * security_token_t (2 ints) 114 * audit_token_t (8 ints) 115 * mach_port_context_t (2 ints) 116 * msgh_ad (1 int) 117 * msg_labels_t (1 int) 118 */ 119type mach_msg_trailer_type_t = int; 120type mach_msg_trailer_info_t = array[*:68] of char; 121 122type task_t = mach_port_t 123#if KERNEL_SERVER 124 intran: task_t convert_port_to_task(mach_port_t) 125 outtran: mach_port_t convert_task_to_port(task_t) 126 destructor: task_deallocate(task_t) 127#endif /* KERNEL_SERVER */ 128 ; 129 130type task_name_t = mach_port_t 131#if KERNEL_SERVER 132 intran: task_name_t convert_port_to_task_name(mach_port_t) 133 outtran: mach_port_t convert_task_name_to_port(task_name_t) 134 destructor: task_name_deallocate(task_name_t) 135#endif /* KERNEL_SERVER */ 136 ; 137 138type thread_t = mach_port_t 139#if KERNEL_SERVER 140 intran: thread_t convert_port_to_thread(mach_port_t) 141 outtran: mach_port_t convert_thread_to_port(thread_t) 142 destructor: thread_deallocate(thread_t) 143#endif /* KERNEL_SERVER */ 144 ; 145 146type thread_act_t = mach_port_t 147#if KERNEL_SERVER 148 intran: thread_act_t convert_port_to_thread(mach_port_t) 149 outtran: mach_port_t convert_thread_to_port(thread_act_t) 150 destructor: thread_deallocate(thread_act_t) 151#endif /* KERNEL_SERVER */ 152 ; 153 154type thread_act_consume_ref_t = mach_port_move_send_t 155 cusertype: thread_act_t 156#if KERNEL_SERVER 157 intran: thread_act_t convert_port_to_thread(mach_port_t) 158 destructor: thread_deallocate(thread_act_t) 159#endif /* KERNEL_SERVER */ 160 ; 161 162 /* thread_state_t: This inline array can hold 163 * a machine-dependent amount of data, defined in 164 * mach/machine/???? (currently THREAD_STATE_MAX, 165 * in mach/thread_state.h) 166 */ 167#include <mach/machine/thread_state.h> 168type thread_state_flavor_t = int; 169type thread_state_t = array[*:THREAD_STATE_MAX] of natural_t; 170 171type task_array_t = ^array[] of task_t; 172type thread_array_t = ^array[] of thread_t; 173type thread_act_array_t = ^array[] of thread_act_t; 174type act_params_t = array[6] of int; 175 176type vm_map_t = mach_port_t 177#if KERNEL_SERVER 178 intran: vm_map_t convert_port_to_map(mach_port_t) 179 destructor: vm_map_deallocate(vm_map_t) 180#endif /* KERNEL_SERVER */ 181 ; 182 183type vm_task_entry_t = mach_port_t 184 cusertype: vm_map_t 185#if KERNEL_SERVER 186 intran: vm_map_t convert_port_entry_to_map(mach_port_t) 187 destructor: vm_map_deallocate(vm_map_t) 188#endif /* KERNEL_SERVER */ 189 ; 190 191type ipc_space_t = mach_port_t 192#if KERNEL_SERVER 193 intran: ipc_space_t convert_port_to_space(mach_port_t) 194 destructor: space_deallocate(ipc_space_t) 195#endif /* KERNEL_SERVER */ 196 ; 197 198type vm_prot_t = int; 199type vm_inherit_t = int; 200type vm_purgable_t = int; 201type xxx_vm_statistics_data_t = struct[13] of integer_t; 202type vm_behavior_t = int; 203type vm_statistics_data_t = struct[15] of integer_t; 204type vm_machine_attribute_t = int; 205type vm_machine_attribute_val_t = int; 206type vm_sync_t = int; 207 208 /* thread_info_t: this inline array can hold any of: 209 * thread_basic_info_t (10 ints) 210 * policy_timeshare_info_t (5 ints) 211 * policy_fifo_info_t (4 ints) 212 * policy_rr_info_t (5 ints) 213 * if other thread_info flavors are added, this 214 * definition may need to be changed. (See 215 * mach/thread_info.h and mach/policy.h) */ 216type thread_flavor_t = int; 217type thread_info_t = array[*:12] of integer_t; 218 219type thread_policy_flavor_t = natural_t; 220type thread_policy_t = array[*:16] of integer_t; 221 222 /* task_info_t: this inline array can hold any of: 223 * task_basic_info_32_t (8 ints) 224 * task_basic_info_64_t (10 ints) 225 * task_events_info_t (8 ints) 226 * task_thread_times_info_t (4 ints) 227 * policy_timeshare_info_t (5 ints) 228 * policy_fifo_info_t (4 ints) 229 * policy_rr_info_t (5 ints) 230 * task security token (2 ints) 231 * task audit token (8 ints) 232 * dyld info (2 64-bit ints and 1 int) 233 * task_extmod_info_t (8 64-bit ints) 234 * task_basic_info_64_2_t 235 * mach_task_basic_info_t (12 ints) 236 * task_power_info_t (18 ints) 237 * If other task_info flavors are added, this 238 * definition may need to be changed. (See 239 * mach/task_info.h and mach/policy.h) */ 240type task_flavor_t = int; 241type task_info_t = array[*:52] of integer_t; 242 243type task_purgable_info_t = struct[68] of integer_t; 244 245type task_policy_flavor_t = natural_t; 246type task_policy_t = array[*:16] of integer_t; 247 248type mem_entry_name_port_t = mach_port_t 249#if KERNEL_SERVER 250 intran: mem_entry_name_port_t null_conversion(mach_port_t) 251 outtran: mach_port_t null_conversion(mem_entry_name_port_t) 252#endif /* KERNEL_SERVER */ 253 ; 254 255type mem_entry_name_port_move_send_t = mach_port_move_send_t 256 cusertype: mem_entry_name_port_t 257#if KERNEL_SERVER 258 intran: mem_entry_name_port_t null_conversion(mach_port_t) 259 outtran: mach_port_t null_conversion(mem_entry_name_port_t) 260#endif /* KERNEL_SERVER */ 261 ; 262 263type memory_object_default_t = mach_port_t 264#if KERNEL_PRIVATE 265 intran: memory_object_default_t null_conversion(mach_port_t) 266 outtran: mach_port_t null_conversion(memory_object_default_t) 267#endif /* KERNEL_PRIVATE */ 268 ; 269 270type memory_object_t = mach_port_t 271#if KERNEL_PRIVATE 272 intran: memory_object_t convert_port_to_memory_object(mach_port_t) 273 outtran: mach_port_t convert_memory_object_to_port(memory_object_t) 274#endif /* KERNEL_PRIVATE */ 275 ; 276 277 278type memory_object_control_t = mach_port_t 279#if KERNEL_PRIVATE 280 intran: memory_object_control_t convert_port_to_mo_control(mach_port_t) 281 outtran: mach_port_t convert_mo_control_to_port(memory_object_control_t) 282 destructor: memory_object_control_deallocate(memory_object_control_t) 283#endif /* KERNEL_PRIVATE */ 284 ; 285 286type memory_object_name_t = mach_port_t 287 ctype: mach_port_t 288 ; 289 290 291type memory_object_copy_strategy_t = int; 292type memory_object_return_t = int; 293 294type machine_info_data_t = struct[5] of integer_t; 295type machine_slot_data_t = struct[8] of integer_t; 296 297type host_t = mach_port_t 298#if KERNEL_SERVER 299 intran: host_t convert_port_to_host(mach_port_t) 300 outtran: mach_port_t convert_host_to_port(host_t) 301#endif /* KERNEL_SERVER */ 302 ; 303 304type host_priv_t = mach_port_t 305#if KERNEL_SERVER 306 intran: host_priv_t convert_port_to_host_priv(mach_port_t) 307#endif /* KERNEL_SERVER */ 308 ; 309 310type host_security_t = mach_port_t 311#if KERNEL_SERVER 312 intran: host_security_t convert_port_to_host_security(mach_port_t) 313#endif /* KERNEL_SERVER */ 314 ; 315 316 /* 317 * host_info_t: variable-sized inline array that can contain: 318 * 319 * host_basic_info_old_t (5 ints) 320 * host_basic_info_t (12 ints) 321 * host_sched_info_t (2 ints) 322 * kernel_resource_sizes_t (5 ints) 323 * host_load_info_t (6 ints) 324 * vm_statistics32_t (15 ints) 325 * host_purgable_info_t (68 ints) 326 * host_expired_task_info uses a task_power_info (18 ints) 327 * 328 * If other host_info flavors are added, this definition may 329 * need to be changed. (See mach/{host_info,vm_statistics}.h) 330 */ 331type host_flavor_t = int; 332type host_info_t = array[*:68] of integer_t; 333 /* 334 * host_info64_t: variable-sized inline array that can contain: 335 * 336 * vm_statistics_t (6 ints and 9 longs) 337 * vm_extmod_statistics_t (6 64-bit ints) 338 */ 339type host_info64_t = array[*:256] of integer_t; 340 341type processor_t = mach_port_t 342#if KERNEL_SERVER 343 intran: processor_t convert_port_to_processor(mach_port_t) 344 outtran: mach_port_t convert_processor_to_port(processor_t) 345#endif /* KERNEL_SERVER */ 346 ; 347 348type processor_array_t = ^array[] of processor_t; 349 350 /* processor_info_t: variable-sized inline array that can 351 * contain: 352 * processor_basic_info_t: (5 ints) 353 * processor_cpu_load_info_t:(4 ints) 354 * processor_machine_info_t :(12 ints) 355 * If other processor_info flavors are added, this definition 356 * may need to be changed. (See mach/processor_info.h) */ 357type processor_flavor_t = int; 358type processor_info_t = array[*:12] of integer_t; 359type processor_info_array_t = ^array[] of integer_t; 360 361type processor_set_t = mach_port_t 362#if KERNEL_SERVER 363 intran: processor_set_t convert_port_to_pset(mach_port_t) 364 outtran: mach_port_t convert_pset_to_port(processor_set_t) 365 destructor: pset_deallocate(processor_set_t) 366#endif /* KERNEL_SERVER */ 367 ; 368 369type processor_set_array_t = ^array[] of processor_set_t; 370 371type processor_set_name_t = mach_port_t 372#if KERNEL_SERVER 373 intran: processor_set_name_t convert_port_to_pset_name(mach_port_t) 374 outtran: mach_port_t convert_pset_name_to_port(processor_set_name_t) 375 destructor: pset_deallocate(processor_set_name_t) 376#endif /* KERNEL_SERVER */ 377 ; 378 379type processor_set_name_array_t = ^array[] of processor_set_name_t; 380 381 /* processor_set_info_t: variable-size inline array 382 * that can hold: 383 * processor_set_basic_info (5 ints) 384 * processor_set_load_info (4 ints) 385 * policy_timeshare_base_t (1 int) 386 * policy_fifo_base_t (1 int) 387 * policy_rr_base_t (1 int) 388 * policy_timeshare_base_t (1 int) 389 * policy_fifo_base_t (1 int) 390 * policy_rr_base_t (1 int) 391 * policy_t (1 int) 392 * If other flavors are added, this definition may 393 * need to be changed. (see mach/processor.h) */ 394type processor_set_flavor_t = int; 395type processor_set_info_t = array[*:5] of integer_t; 396 397type bootstrap_t = mach_port_t; 398 399type kernel_version_t = c_string[*:512]; 400type kernel_boot_info_t = c_string[*:4096]; 401 402type time_value_t = struct[2] of integer_t; 403 404type mach_port_qos_t = struct[2] of integer_t; 405 406type mach_port_options_t = struct[3] of uint64_t; 407type mach_port_options_ptr_t = ^ mach_port_options_t; 408 409type emulation_vector_t = ^array[] of vm_offset_t; 410 411type inline_existence_map_t = array[*:512] of char; 412 413type policy_t = int; 414 /* policy_info_t: variable-size inline array. Can hold: 415 * policy_timeshare_info_t (5 ints) 416 * policy_fifo_info_t (4 ints) 417 * policy_rr_info_t (5 ints) */ 418type policy_base_t = array[*:5] of integer_t; 419type policy_info_t = array[*:2] of integer_t; 420type policy_limit_t = array[*:1] of integer_t; 421 422type ledger_t = mach_port_t 423#if KERNEL_SERVER 424 intran: ledger_t convert_port_to_ledger(mach_port_t) 425 outtran: mach_port_t convert_ledger_to_port(ledger_t) 426#endif /* KERNEL_SERVER */ 427 ; 428 429type ledger_array_t = ^array[] of ledger_t; 430type ledger_item_t = integer_t; 431 /* DEPRECATED */ 432 433type ledger_amount_t = int64_t; 434 435type security_token_t = struct[2] of uint32_t; 436type audit_token_t = struct[8] of uint32_t; 437 438type msg_labels_t = mach_port_t; 439 440 /* memory_object_info_t: variable-size inline array: 441 * memory_object_attr_info_t (5 ints) 442 * XXX actually it's 6 ints temporarily (object_ready!) 443 * memory_object_behave_info_t (4 ints) 444 * memory_object_perf_info_t (2 ints) 445 * old_memory_object_attr_info_t (3 ints) 446 * If other flavors are added, this definition may 447 * need to be changed. (see mach/memory_object.h) */ 448type memory_object_flavor_t = int; 449type memory_object_info_t = array[*:6] of int; 450 451 /* vm_region_info_t: variable-size inline array that can hold: 452 * vm_region_basic_info_t (8 ints) 453 * If other flavors are added, this definition may 454 * need to be changed. (see mach/vm_region.h) */ 455type vm_region_flavor_t = int; 456type vm_region_info_t = array[*:10] of int; 457type vm_region_recurse_info_t = array[*:19] of int; 458 459type vm_page_info_flavor_t = int; 460type vm_page_info_t = array[*:32] of int; 461 462type mach_vm_read_entry_t = array[512] of mach_vm_offset_t; 463type vm_read_entry_t = array[512] of vm_offset_t; 464#if VM32_SUPPORT 465type vm32_read_entry_t = array[512] of vm32_offset_t; 466#endif 467 468type exception_mask_t = int; 469type exception_behavior_t = int; 470 471type exception_handler_t = mach_port_t; 472 473type exception_handler_array_t = 474 array[*:32] of exception_handler_t; 475 476type exception_behavior_array_t = 477 array[*:32] of exception_behavior_t; 478 479type exception_flavor_array_t = 480 array[*:32] of thread_state_flavor_t; 481 482type exception_mask_array_t = 483 array[*:32] of exception_mask_t; 484 485type semaphore_t = mach_port_t 486#if KERNEL_SERVER 487 intran: semaphore_t convert_port_to_semaphore(mach_port_t) 488 outtran: mach_port_t convert_semaphore_to_port(semaphore_t) 489 destructor: semaphore_dereference(semaphore_t) 490#endif /* KERNEL_SERVER */ 491 ; 492 493type semaphore_consume_ref_t = mach_port_move_send_t 494 cusertype: semaphore_t 495#if KERNEL_SERVER 496 intran: semaphore_t convert_port_to_semaphore(mach_port_t) 497 outtran: mach_port_t convert_semaphore_to_port(semaphore_t) 498 destructor: semaphore_dereference(semaphore_t) 499#endif /* KERNEL_SERVER */ 500 ; 501 502type lock_set_t = mach_port_t 503#if KERNEL_SERVER 504 intran: lock_set_t convert_port_to_lock_set(mach_port_t) 505 outtran: mach_port_t convert_lock_set_to_port(lock_set_t) 506 destructor: lock_set_dereference(lock_set_t) 507#endif /* KERNEL_SERVER */ 508 ; 509 510type task_suspension_token_t = mach_port_move_send_once_t 511#if KERNEL_SERVER 512 intran: task_suspension_token_t convert_port_to_task_suspension_token(mach_port_t) 513 outtran: mach_port_t convert_task_suspension_token_to_port(task_suspension_token_t) 514#endif /* KERNEL_SERVER */ 515 ; 516 517 518/* public voucher types */ 519 520/* Mach voucher object */ 521type mach_voucher_t = mach_port_t; 522type mach_voucher_name_t = mach_port_name_t; 523 524type mach_voucher_attr_manager_t = mach_port_t; 525type mach_voucher_attr_control_t = mach_port_t; 526 527/* IPC voucher internal object */ 528type ipc_voucher_t = mach_port_t 529#if KERNEL_SERVER 530 intran: ipc_voucher_t convert_port_to_voucher(mach_port_t) 531 outtran: mach_port_t convert_voucher_to_port(ipc_voucher_t) 532 destructor: ipc_voucher_release(ipc_voucher_t) 533#endif /* KERNEL_SERVER */ 534 ; 535 536/* IPC voucher attribute control internal object */ 537type ipc_voucher_attr_control_t = mach_port_t 538#if KERNEL_SERVER 539 intran: ipc_voucher_attr_control_t convert_port_to_voucher_attr_control(mach_port_t) 540 outtran: mach_port_t convert_voucher_attr_control_to_port(ipc_voucher_attr_control_t) 541 destructor: ipc_voucher_attr_control_release(ipc_voucher_attr_control_t) 542#endif /* KERNEL_SERVER */ 543 ; 544 545type mach_voucher_attr_key_t = uint32_t; 546 547type mach_voucher_attr_command_t = uint32_t; 548type mach_voucher_attr_recipe_command_t = uint32_t; 549 550type mach_voucher_attr_content_size_t = uint32_t; 551type mach_voucher_attr_content_t = array[*:4096] of uint8_t; 552type mach_voucher_attr_content_array_t = array[*:5120] of uint8_t; 553 554type mach_voucher_attr_raw_recipe_size_t = uint32_t; 555type mach_voucher_attr_raw_recipe_t = array[*:4096] of uint8_t; 556type mach_voucher_attr_raw_recipe_array_t = array[*:5120] of uint8_t; 557 558type mach_voucher_selector_t = uint32_t; 559 560type mach_voucher_attr_value_handle_t = uint64_t; 561type mach_voucher_attr_value_handle_array_t = array[*:4] of mach_voucher_attr_value_handle_t; 562type mach_voucher_attr_value_reference_t = uint32_t; 563 564/* kernel module loader */ 565type kmod_t = int; 566type kmod_control_flavor_t = int; 567 568type kmod_args_t = ^array[] of MACH_MSG_TYPE_BYTE 569 ctype: kmod_args_t; 570 571type io_master_t = mach_port_t; 572type UNDServerRef = mach_port_t; 573 574#if KERNEL_SERVER 575#ifdef MACH_KERNEL_PRIVATE 576simport <ipc/ipc_voucher.h>; /* for voucher conversions */ 577simport <kern/ipc_kobject.h>; /* for null conversion */ 578simport <kern/ipc_tt.h>; /* for task/thread conversion */ 579simport <kern/ipc_host.h>; /* for host/processor/pset conversions */ 580simport <kern/ipc_sync.h>; /* for lock_set and semaphore conversions */ 581simport <kern/ledger.h>; /* for ledger conversions */ 582simport <kern/processor.h>; /* for processor conversions */ 583simport <kern/sync_lock.h>; /* for lock-set conversions */ 584simport <kern/sync_sema.h>; /* for semaphore conversions */ 585simport <vm/memory_object.h>; /* for memory object type conversions */ 586simport <vm/vm_map.h>; /* for vm_map conversions */ 587#endif /* MACH_KERNEL_PRIVATE */ 588 589simport <kern/ipc_mig.h>; /* pick up kernel-specific MIG things */ 590 591#endif /* KERNEL_SERVER */ 592 593import <mach/mig.h>; 594import <mach/mach_types.h>; 595 596#endif /* _MACH_MACH_TYPES_DEFS_ */ 597 598/* vim: set ft=c : */ 599