1/* 2 * Copyright (c) 2000-2004 Apple Computer, 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 * If other task_info flavors are added, this 217 * definition may need to be changed. (See 218 * mach/task_info.h and mach/policy.h) */ 219type task_flavor_t = int; 220type task_info_t = array[*:10] of integer_t; 221 222type task_policy_flavor_t = natural_t; 223type task_policy_t = array[*:16] of integer_t; 224 225type mem_entry_name_port_t = mach_port_t 226#if KERNEL_SERVER 227 intran: mem_entry_name_port_t null_conversion(mach_port_t) 228 outtran: mach_port_t null_conversion(mem_entry_name_port_t) 229#endif /* KERNEL_SERVER */ 230 ; 231 232type mem_entry_name_port_move_send_t = mach_port_move_send_t 233 cusertype: mem_entry_name_port_t 234#if KERNEL_SERVER 235 intran: mem_entry_name_port_t null_conversion(mach_port_t) 236 outtran: mach_port_t null_conversion(mem_entry_name_port_t) 237#endif /* KERNEL_SERVER */ 238 ; 239 240type memory_object_default_t = mach_port_t 241#if KERNEL_PRIVATE 242 intran: memory_object_default_t null_conversion(mach_port_t) 243 outtran: mach_port_t null_conversion(memory_object_default_t) 244#endif /* KERNEL_PRIVATE */ 245 ; 246 247type memory_object_t = mach_port_t 248#if KERNEL_PRIVATE 249 intran: memory_object_t convert_port_to_memory_object(mach_port_t) 250 outtran: mach_port_t convert_memory_object_to_port(memory_object_t) 251#endif /* KERNEL_PRIVATE */ 252 ; 253 254 255type memory_object_control_t = mach_port_t 256#if KERNEL_PRIVATE 257 intran: memory_object_control_t convert_port_to_mo_control(mach_port_t) 258 outtran: mach_port_t convert_mo_control_to_port(memory_object_control_t) 259 destructor: memory_object_control_deallocate(memory_object_control_t) 260#endif /* KERNEL_PRIVATE */ 261 ; 262 263type memory_object_name_t = mach_port_t 264 ctype: mach_port_t 265 ; 266 267 268type memory_object_copy_strategy_t = int; 269type memory_object_return_t = int; 270 271type machine_info_data_t = struct[5] of integer_t; 272type machine_slot_data_t = struct[8] of integer_t; 273 274type host_t = mach_port_t 275#if KERNEL_SERVER 276 intran: host_t convert_port_to_host(mach_port_t) 277 outtran: mach_port_t convert_host_to_port(host_t) 278#endif /* KERNEL_SERVER */ 279 ; 280 281type host_priv_t = mach_port_t 282#if KERNEL_SERVER 283 intran: host_priv_t convert_port_to_host_priv(mach_port_t) 284#endif /* KERNEL_SERVER */ 285 ; 286 287type host_security_t = mach_port_t 288#if KERNEL_SERVER 289 intran: host_security_t convert_port_to_host_security(mach_port_t) 290#endif /* KERNEL_SERVER */ 291 ; 292 293 /* host_info_t: variable-sized inline array that can contain: 294 * host_basic_info_old_t (5 ints) 295 * host_basic_info_t (12 ints) 296 * host_sched_info_t (2 ints) 297 * kernel_resource_sizes_t (5 ints) 298 * host_load_info_t (6 ints) 299 * vm_statistics_t (15 ints) 300 * If other host_info flavors are added, this definition may 301 * need to be changed. (See mach/{host_info,vm_statistics}.h) 302 */ 303type host_flavor_t = int; 304type host_info_t = array[*:15] of integer_t; 305 306type processor_t = mach_port_t 307#if KERNEL_SERVER 308 intran: processor_t convert_port_to_processor(mach_port_t) 309 outtran: mach_port_t convert_processor_to_port(processor_t) 310#endif /* KERNEL_SERVER */ 311 ; 312 313type processor_array_t = ^array[] of processor_t; 314 315 /* processor_info_t: variable-sized inline array that can 316 * contain: 317 * processor_basic_info_t: (5 ints) 318 * processor_cpu_load_info_t:(4 ints) 319 * processor_machine_info_t :(12 ints) 320 * If other processor_info flavors are added, this definition 321 * may need to be changed. (See mach/processor_info.h) */ 322type processor_flavor_t = int; 323type processor_info_t = array[*:12] of integer_t; 324type processor_info_array_t = ^array[] of integer_t; 325 326type processor_set_t = mach_port_t 327#if KERNEL_SERVER 328 intran: processor_set_t convert_port_to_pset(mach_port_t) 329 outtran: mach_port_t convert_pset_to_port(processor_set_t) 330 destructor: pset_deallocate(processor_set_t) 331#endif /* KERNEL_SERVER */ 332 ; 333 334type processor_set_array_t = ^array[] of processor_set_t; 335 336type processor_set_name_t = mach_port_t 337#if KERNEL_SERVER 338 intran: processor_set_name_t convert_port_to_pset_name(mach_port_t) 339 outtran: mach_port_t convert_pset_name_to_port(processor_set_name_t) 340 destructor: pset_deallocate(processor_set_name_t) 341#endif /* KERNEL_SERVER */ 342 ; 343 344type processor_set_name_array_t = ^array[] of processor_set_name_t; 345 346 /* processor_set_info_t: variable-size inline array 347 * that can hold: 348 * processor_set_basic_info (5 ints) 349 * processor_set_load_info (4 ints) 350 * policy_timeshare_base_t (1 int) 351 * policy_fifo_base_t (1 int) 352 * policy_rr_base_t (1 int) 353 * policy_timeshare_base_t (1 int) 354 * policy_fifo_base_t (1 int) 355 * policy_rr_base_t (1 int) 356 * policy_t (1 int) 357 * If other flavors are added, this definition may 358 * need to be changed. (see mach/processor.h) */ 359type processor_set_flavor_t = int; 360type processor_set_info_t = array[*:5] of integer_t; 361 362type bootstrap_t = mach_port_t; 363 364type kernel_version_t = c_string[*:512]; 365type kernel_boot_info_t = c_string[*:4096]; 366 367type time_value_t = struct[2] of integer_t; 368 369type mach_port_qos_t = struct[2] of integer_t; 370 371type emulation_vector_t = ^array[] of vm_offset_t; 372 373type inline_existence_map_t = array[*:512] of char; 374 375type policy_t = int; 376 /* policy_info_t: variable-size inline array. Can hold: 377 * policy_timeshare_info_t (5 ints) 378 * policy_fifo_info_t (4 ints) 379 * policy_rr_info_t (5 ints) */ 380type policy_base_t = array[*:5] of integer_t; 381type policy_info_t = array[*:2] of integer_t; 382type policy_limit_t = array[*:1] of integer_t; 383 384type ledger_t = mach_port_t 385#if KERNEL_SERVER 386 intran: ledger_t convert_port_to_ledger(mach_port_t) 387 outtran: mach_port_t convert_ledger_to_port(ledger_t) 388#endif /* KERNEL_SERVER */ 389 ; 390 391type ledger_array_t = ^array[] of ledger_t; 392type ledger_item_t = integer_t; 393 394type security_token_t = struct[2] of uint32_t; 395type audit_token_t = struct[8] of uint32_t; 396 397type msg_labels_t = mach_port_t; 398 399 /* memory_object_info_t: variable-size inline array: 400 * memory_object_attr_info_t (5 ints) 401 * XXX actually it's 6 ints temporarily (object_ready!) 402 * memory_object_behave_info_t (4 ints) 403 * memory_object_perf_info_t (2 ints) 404 * old_memory_object_attr_info_t (3 ints) 405 * memory_object_norma_info_t (5 ints) 406 * If other flavors are added, this definition may 407 * need to be changed. (see mach/memory_object.h) */ 408type memory_object_flavor_t = int; 409type memory_object_info_t = array[*:6] of int; 410 411 /* vm_region_info_t: variable-size inline array that can hold: 412 * vm_region_basic_info_t (8 ints) 413 * If other flavors are added, this definition may 414 * need to be changed. (see mach/vm_region.h) */ 415type vm_region_flavor_t = int; 416type vm_region_info_t = array[*:10] of int; 417type vm_region_recurse_info_t = array[*:19] of int; 418 419type mach_vm_read_entry_t = array[512] of mach_vm_offset_t; 420type vm_read_entry_t = array[512] of vm_offset_t; 421 422type exception_mask_t = int; 423type exception_behavior_t = int; 424 425type exception_handler_t = mach_port_t; 426 427type exception_handler_array_t = 428 array[*:32] of exception_handler_t; 429 430type exception_behavior_array_t = 431 array[*:32] of exception_behavior_t; 432 433type exception_flavor_array_t = 434 array[*:32] of thread_state_flavor_t; 435 436type exception_mask_array_t = 437 array[*:32] of exception_mask_t; 438 439type semaphore_t = mach_port_t 440#if KERNEL_SERVER 441 intran: semaphore_t convert_port_to_semaphore(mach_port_t) 442 outtran: mach_port_t convert_semaphore_to_port(semaphore_t) 443 destructor: semaphore_dereference(semaphore_t) 444#endif /* KERNEL_SERVER */ 445 ; 446 447type semaphore_consume_ref_t = mach_port_move_send_t 448 cusertype: semaphore_t 449#if KERNEL_SERVER 450 intran: semaphore_t convert_port_to_semaphore(mach_port_t) 451 outtran: mach_port_t convert_semaphore_to_port(semaphore_t) 452 destructor: semaphore_dereference(semaphore_t) 453#endif /* KERNEL_SERVER */ 454 ; 455 456type lock_set_t = mach_port_t 457#if KERNEL_SERVER 458 intran: lock_set_t convert_port_to_lock_set(mach_port_t) 459 outtran: mach_port_t convert_lock_set_to_port(lock_set_t) 460 destructor: lock_set_dereference(lock_set_t) 461#endif /* KERNEL_SERVER */ 462 ; 463 464/* kernel module loader */ 465type kmod_t = int; 466type kmod_control_flavor_t = int; 467 468type kmod_args_t = ^array[] of MACH_MSG_TYPE_BYTE 469 ctype: kmod_args_t; 470 471type io_master_t = mach_port_t; 472type UNDServerRef = mach_port_t; 473 474#if KERNEL_SERVER 475#ifdef MACH_KERNEL_PRIVATE 476simport <kern/ipc_kobject.h>; /* for null conversion */ 477simport <kern/ipc_tt.h>; /* for task/thread conversion */ 478simport <kern/ipc_host.h>; /* for host/processor/pset conversions */ 479simport <kern/ipc_sync.h>; /* for lock_set and semaphore conversions */ 480simport <kern/ledger.h>; /* for ledger conversions */ 481simport <kern/processor.h>; /* for processor conversions */ 482simport <kern/sync_lock.h>; /* for lock-set conversions */ 483simport <kern/sync_sema.h>; /* for semaphore conversions */ 484simport <vm/memory_object.h>; /* for memory object type conversions */ 485simport <vm/vm_map.h>; /* for vm_map conversions */ 486#endif /* MACH_KERNEL_PRIVATE */ 487 488simport <kern/ipc_mig.h>; /* pick up kernel-specific MIG things */ 489 490#endif /* KERNEL_SERVER */ 491 492import <mach/mig.h>; 493import <mach/mach_types.h>; 494 495#endif /* _MACH_MACH_TYPES_DEFS_ */ 496 497/* vim: set ft=c : */ 498