1 /* 2 * Copyright (c) 2000-2018 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 [email protected] 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 * NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce 60 * support for mandatory and extensible security protections. This notice 61 * is included in support of clause 2.2 (b) of the Apple Public License, 62 * Version 2.0. 63 */ 64 /* 65 * File: mach/mach_types.h 66 * Author: Avadis Tevanian, Jr., Michael Wayne Young 67 * Date: 1986 68 * 69 * Mach external interface definitions. 70 * 71 */ 72 73 #ifndef _MACH_MACH_TYPES_H_ 74 #define _MACH_MACH_TYPES_H_ 75 76 #include <stdint.h> 77 78 #include <sys/cdefs.h> 79 80 #include <mach/host_info.h> 81 #include <mach/host_notify.h> 82 #include <mach/host_special_ports.h> 83 #include <mach/machine.h> 84 #include <mach/machine/vm_types.h> 85 #include <mach/memory_object_types.h> 86 #include <mach/message.h> 87 #include <mach/exception_types.h> 88 #include <mach/port.h> 89 #include <mach/mach_voucher_types.h> 90 #include <mach/processor_info.h> 91 #include <mach/task_info.h> 92 #include <mach/task_inspect.h> 93 #include <mach/task_policy.h> 94 #include <mach/task_special_ports.h> 95 #include <mach/thread_info.h> 96 #include <mach/thread_policy.h> 97 #include <mach/thread_special_ports.h> 98 #include <mach/thread_status.h> 99 #include <mach/time_value.h> 100 #include <mach/clock_types.h> 101 #include <mach/vm_attributes.h> 102 #include <mach/vm_inherit.h> 103 #include <mach/vm_purgable.h> 104 #include <mach/vm_behavior.h> 105 #include <mach/vm_prot.h> 106 #include <mach/vm_statistics.h> 107 #include <mach/vm_sync.h> 108 #include <mach/vm_types.h> 109 #include <mach/vm_region.h> 110 #include <mach/kmod.h> 111 #include <mach/dyld_kernel.h> 112 113 #ifdef KERNEL 114 115 #include <mach/vm_types_unsafe.h> 116 #include <mach/vm_param.h> 117 118 /* 119 * If we are in the kernel, then pick up the kernel definitions for 120 * the basic mach types. 121 */ 122 typedef struct task *task_t, *task_name_t, *task_inspect_t, *task_read_t, *task_suspension_token_t, *task_policy_set_t, *task_policy_get_t; 123 typedef struct thread *thread_t, *thread_act_t, *thread_inspect_t, *thread_read_t; 124 typedef struct ipc_space *ipc_space_t, *ipc_space_read_t, *ipc_space_inspect_t; 125 typedef struct coalition *coalition_t; 126 typedef struct host *host_t; 127 typedef struct host *host_priv_t; 128 typedef struct host *host_security_t; 129 typedef struct processor *processor_t; 130 typedef struct processor_set *processor_set_t; 131 typedef struct processor_set *processor_set_control_t; 132 typedef struct semaphore *semaphore_t; 133 typedef struct ledger *ledger_t; 134 typedef struct alarm *alarm_t; 135 typedef struct clock *clock_serv_t; 136 typedef struct clock *clock_ctrl_t; 137 typedef struct arcade_register *arcade_register_t; 138 typedef struct ipc_eventlink *ipc_eventlink_t; 139 typedef struct ipc_port *eventlink_port_pair_t[2]; 140 typedef struct task_id_token *task_id_token_t; 141 typedef struct kcdata_object *kcdata_object_t; 142 143 /* 144 * OBSOLETE: lock_set interfaces are obsolete. 145 */ 146 typedef struct lock_set *lock_set_t; 147 struct lock_set; 148 149 #ifndef MACH_KERNEL_PRIVATE 150 151 __BEGIN_DECLS 152 153 struct task; 154 struct thread; 155 struct host; 156 struct processor; 157 struct processor_set; 158 struct semaphore; 159 struct ledger; 160 struct alarm; 161 struct clock; 162 struct arcade_register; 163 struct ipc_eventlink; 164 struct ipc_port; 165 166 __END_DECLS 167 168 #endif /* MACH_KERNEL_PRIVATE */ 169 170 #else /* KERNEL */ 171 172 /* 173 * If we are not in the kernel, then these will all be represented by 174 * ports at user-space. 175 */ 176 typedef mach_port_t task_t; 177 typedef mach_port_t task_name_t; 178 typedef mach_port_t task_policy_set_t; 179 typedef mach_port_t task_policy_get_t; 180 typedef mach_port_t task_inspect_t; 181 typedef mach_port_t task_read_t; 182 typedef mach_port_t task_suspension_token_t; 183 typedef mach_port_t thread_t; 184 typedef mach_port_t thread_act_t; 185 typedef mach_port_t thread_inspect_t; 186 typedef mach_port_t thread_read_t; 187 typedef mach_port_t ipc_space_t; 188 typedef mach_port_t ipc_space_read_t; 189 typedef mach_port_t ipc_space_inspect_t; 190 typedef mach_port_t coalition_t; 191 typedef mach_port_t host_t; 192 typedef mach_port_t host_priv_t; 193 typedef mach_port_t host_security_t; 194 typedef mach_port_t processor_t; 195 typedef mach_port_t processor_set_t; 196 typedef mach_port_t processor_set_control_t; 197 typedef mach_port_t semaphore_t; 198 typedef mach_port_t lock_set_t; 199 typedef mach_port_t ledger_t; 200 typedef mach_port_t alarm_t; 201 typedef mach_port_t clock_serv_t; 202 typedef mach_port_t clock_ctrl_t; 203 typedef mach_port_t arcade_register_t; 204 typedef mach_port_t ipc_eventlink_t; 205 typedef mach_port_t eventlink_port_pair_t[2]; 206 typedef mach_port_t task_id_token_t; 207 typedef mach_port_t kcdata_object_t; 208 209 #endif /* KERNEL */ 210 211 /* 212 * These aren't really unique types. They are just called 213 * out as unique types at one point in history. So we list 214 * them here for compatibility. 215 */ 216 typedef processor_set_t processor_set_name_t; 217 218 /* 219 * These types are just hard-coded as ports 220 */ 221 typedef mach_port_t clock_reply_t; 222 typedef mach_port_t bootstrap_t; 223 typedef mach_port_t mem_entry_name_port_t; 224 typedef mach_port_t exception_handler_t; 225 typedef exception_handler_t *exception_handler_array_t; 226 typedef mach_port_t vm_task_entry_t; 227 typedef mach_port_t io_main_t; 228 typedef mach_port_t UNDServerRef; 229 typedef mach_port_t mach_eventlink_t; 230 231 typedef ipc_info_port_t exception_handler_info_t; 232 233 /* 234 * Mig doesn't translate the components of an array. 235 * For example, Mig won't use the thread_t translations 236 * to translate a thread_array_t argument. So, these definitions 237 * are not completely accurate at the moment for other kernel 238 * components. 239 */ 240 #if XNU_KERNEL_PRIVATE 241 typedef mach_port_array_t task_array_t; 242 typedef mach_port_array_t thread_array_t; 243 typedef mach_port_array_t processor_set_array_t; 244 typedef mach_port_array_t processor_set_name_array_t; 245 typedef mach_port_array_t processor_array_t; 246 typedef mach_port_array_t thread_act_array_t; 247 typedef mach_port_array_t ledger_array_t; 248 #else 249 typedef task_t *task_array_t; 250 typedef thread_t *thread_array_t; 251 typedef processor_set_t *processor_set_array_t; 252 typedef processor_set_t *processor_set_name_array_t; 253 typedef processor_t *processor_array_t; 254 typedef thread_act_t *thread_act_array_t; 255 typedef ledger_t *ledger_array_t; 256 #endif 257 258 /* 259 * However the real mach_types got declared, we also have to declare 260 * types with "port" in the name for compatability with the way OSF 261 * had declared the user interfaces at one point. Someday these should 262 * go away. 263 */ 264 typedef task_t task_port_t; 265 typedef task_array_t task_port_array_t; 266 typedef thread_t thread_port_t; 267 typedef thread_array_t thread_port_array_t; 268 typedef ipc_space_t ipc_space_port_t; 269 typedef host_t host_name_t; 270 typedef host_t host_name_port_t; 271 typedef processor_set_t processor_set_port_t; 272 typedef processor_set_t processor_set_name_port_t; 273 typedef processor_set_array_t processor_set_name_port_array_t; 274 typedef processor_set_t processor_set_control_port_t; 275 typedef processor_t processor_port_t; 276 typedef processor_array_t processor_port_array_t; 277 typedef thread_act_t thread_act_port_t; 278 typedef thread_act_array_t thread_act_port_array_t; 279 typedef semaphore_t semaphore_port_t; 280 typedef lock_set_t lock_set_port_t; 281 typedef ledger_t ledger_port_t; 282 typedef ledger_array_t ledger_port_array_t; 283 typedef alarm_t alarm_port_t; 284 typedef clock_serv_t clock_serv_port_t; 285 typedef clock_ctrl_t clock_ctrl_port_t; 286 typedef exception_handler_t exception_port_t; 287 typedef exception_handler_array_t exception_port_arrary_t; 288 typedef char vfs_path_t[4096]; 289 /* 290 * 8K, c.f. FSGETPATH_MAXBUFLEN in bsd/vfs/vfs_syscalls.c. 291 * These types should NEVER be allocated on the stack. 292 */ 293 typedef char nspace_path_t[8192]; 294 typedef char nspace_name_t[8192]; 295 296 #ifdef KERNEL 297 #define TASK_NULL ((task_t) NULL) 298 #define TASK_NAME_NULL ((task_name_t) NULL) 299 #define TASK_INSPECT_NULL ((task_inspect_t) NULL) 300 #define TASK_READ_NULL ((task_read_t) NULL) 301 #define THREAD_NULL ((thread_t) NULL) 302 #define THREAD_INSPECT_NULL ((thread_inspect_t)NULL) 303 #define THREAD_READ_NULL ((thread_read_t)NULL) 304 #define TID_NULL ((uint64_t) NULL) 305 #define THR_ACT_NULL ((thread_act_t) NULL) 306 #define IPC_SPACE_NULL ((ipc_space_t) NULL) 307 #define IPC_SPACE_READ_NULL ((ipc_space_read_t) NULL) 308 #define IPC_SPACE_INSPECT_NULL ((ipc_space_inspect_t) NULL) 309 #define COALITION_NULL ((coalition_t) NULL) 310 #define HOST_NULL ((host_t) NULL) 311 #define HOST_PRIV_NULL ((host_priv_t)NULL) 312 #define HOST_SECURITY_NULL ((host_security_t)NULL) 313 #define PROCESSOR_SET_NULL ((processor_set_t) NULL) 314 #define PROCESSOR_NULL ((processor_t) NULL) 315 #define SEMAPHORE_NULL ((semaphore_t) NULL) 316 #define LOCK_SET_NULL ((lock_set_t) NULL) 317 #define LEDGER_NULL ((ledger_t) NULL) 318 #define ALARM_NULL ((alarm_t) NULL) 319 #define CLOCK_NULL ((clock_t) NULL) 320 #define UND_SERVER_NULL ((UNDServerRef) NULL) 321 #define ARCADE_REG_NULL ((arcade_register_t) NULL) 322 #define MACH_EVENTLINK_NULL ((mach_eventlink_t) 0) 323 #define IPC_EVENTLINK_NULL ((ipc_eventlink_t) NULL) 324 #define TASK_ID_TOKEN_NULL ((task_id_token_t) NULL) 325 #define KCDATA_OBJECT_NULL ((kcdata_object_t) NULL) 326 #else 327 #define TASK_NULL ((task_t) 0) 328 #define TASK_NAME_NULL ((task_name_t) 0) 329 #define TASK_INSPECT_NULL ((task_inspect_t) 0) 330 #define TASK_READ_NULL ((task_read_t) 0) 331 #define THREAD_NULL ((thread_t) 0) 332 #define THREAD_INSPECT_NULL ((thread_inspect_t) 0) 333 #define THREAD_READ_NULL ((thread_read_t) 0) 334 #define TID_NULL ((uint64_t) 0) 335 #define THR_ACT_NULL ((thread_act_t) 0) 336 #define IPC_SPACE_NULL ((ipc_space_t) 0) 337 #define IPC_SPACE_READ_NULL ((ipc_space_read_t) 0) 338 #define IPC_SPACE_INSPECT_NULL ((ipc_space_inspect_t) 0) 339 #define COALITION_NULL ((coalition_t) 0) 340 #define HOST_NULL ((host_t) 0) 341 #define HOST_PRIV_NULL ((host_priv_t) 0) 342 #define HOST_SECURITY_NULL ((host_security_t) 0) 343 #define PROCESSOR_SET_NULL ((processor_set_t) 0) 344 #define PROCESSOR_NULL ((processor_t) 0) 345 #define SEMAPHORE_NULL ((semaphore_t) 0) 346 #define LOCK_SET_NULL ((lock_set_t) 0) 347 #define LEDGER_NULL ((ledger_t) 0) 348 #define ALARM_NULL ((alarm_t) 0) 349 #define CLOCK_NULL ((clock_t) 0) 350 #define UND_SERVER_NULL ((UNDServerRef) 0) 351 #define ARCADE_REG_NULL ((arcade_register_t) 0) 352 #define MACH_EVENTLINK_NULL ((mach_eventlink_t) 0) 353 #define IPC_EVENTLINK_NULL ((ipc_eventlink_t) 0) 354 #define TASK_ID_TOKEN_NULL ((task_id_token_t) 0) 355 #define KCDATA_OBJECT_NULL ((kcdata_object_t) 0) 356 #endif 357 358 /* capability strictly _DECREASING_. 359 * not ordered the other way around because we want TASK_FLAVOR_CONTROL 360 * to be closest to the itk_lock. see task.h. 361 */ 362 typedef unsigned int mach_task_flavor_t; 363 #define TASK_FLAVOR_CONTROL 0 /* a task_t */ 364 #define TASK_FLAVOR_READ 1 /* a task_read_t */ 365 #define TASK_FLAVOR_INSPECT 2 /* a task_inspect_t */ 366 #define TASK_FLAVOR_NAME 3 /* a task_name_t */ 367 368 #define TASK_FLAVOR_MAX TASK_FLAVOR_NAME 369 370 /* capability strictly _DECREASING_ */ 371 typedef unsigned int mach_thread_flavor_t; 372 #define THREAD_FLAVOR_CONTROL 0 /* a thread_t */ 373 #define THREAD_FLAVOR_READ 1 /* a thread_read_t */ 374 #define THREAD_FLAVOR_INSPECT 2 /* a thread_inspect_t */ 375 376 #define THREAD_FLAVOR_MAX THREAD_FLAVOR_INSPECT 377 378 /* DEPRECATED */ 379 typedef natural_t ledger_item_t; 380 #define LEDGER_ITEM_INFINITY ((ledger_item_t) (~0)) 381 382 typedef int64_t ledger_amount_t; 383 #define LEDGER_LIMIT_INFINITY ((ledger_amount_t)((1ULL << 63) - 1)) 384 385 typedef mach_vm_offset_t *emulation_vector_t; 386 typedef char *user_subsystem_t; 387 388 typedef char *labelstr_t; 389 /* 390 * Backwards compatibility, for those programs written 391 * before mach/{std,mach}_types.{defs,h} were set up. 392 */ 393 #include <mach/std_types.h> 394 395 #endif /* _MACH_MACH_TYPES_H_ */ 396