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_param.h> 116 117 /* 118 * If we are in the kernel, then pick up the kernel definitions for 119 * the basic mach types. 120 */ 121 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; 122 typedef struct thread *thread_t, *thread_act_t, *thread_inspect_t, *thread_read_t; 123 typedef struct ipc_space *ipc_space_t, *ipc_space_read_t, *ipc_space_inspect_t; 124 typedef struct coalition *coalition_t; 125 typedef struct host *host_t; 126 typedef struct host *host_priv_t; 127 typedef struct host *host_security_t; 128 typedef struct processor *processor_t; 129 typedef struct processor_set *processor_set_t; 130 typedef struct processor_set *processor_set_control_t; 131 typedef struct semaphore *semaphore_t; 132 typedef struct ledger *ledger_t; 133 typedef struct alarm *alarm_t; 134 typedef struct clock *clock_serv_t; 135 typedef struct clock *clock_ctrl_t; 136 typedef struct arcade_register *arcade_register_t; 137 typedef struct ipc_eventlink *ipc_eventlink_t; 138 typedef struct ipc_port *eventlink_port_pair_t[2]; 139 typedef struct task_id_token *task_id_token_t; 140 typedef struct kcdata_object *kcdata_object_t; 141 142 /* 143 * OBSOLETE: lock_set interfaces are obsolete. 144 */ 145 typedef struct lock_set *lock_set_t; 146 struct lock_set; 147 148 #ifndef MACH_KERNEL_PRIVATE 149 150 __BEGIN_DECLS 151 152 struct task; 153 struct thread; 154 struct host; 155 struct processor; 156 struct processor_set; 157 struct semaphore; 158 struct ledger; 159 struct alarm; 160 struct clock; 161 struct arcade_register; 162 struct ipc_eventlink; 163 struct ipc_port; 164 165 __END_DECLS 166 167 #endif /* MACH_KERNEL_PRIVATE */ 168 169 #else /* KERNEL */ 170 171 /* 172 * If we are not in the kernel, then these will all be represented by 173 * ports at user-space. 174 */ 175 typedef mach_port_t task_t; 176 typedef mach_port_t task_name_t; 177 typedef mach_port_t task_policy_set_t; 178 typedef mach_port_t task_policy_get_t; 179 typedef mach_port_t task_inspect_t; 180 typedef mach_port_t task_read_t; 181 typedef mach_port_t task_suspension_token_t; 182 typedef mach_port_t thread_t; 183 typedef mach_port_t thread_act_t; 184 typedef mach_port_t thread_inspect_t; 185 typedef mach_port_t thread_read_t; 186 typedef mach_port_t ipc_space_t; 187 typedef mach_port_t ipc_space_read_t; 188 typedef mach_port_t ipc_space_inspect_t; 189 typedef mach_port_t coalition_t; 190 typedef mach_port_t host_t; 191 typedef mach_port_t host_priv_t; 192 typedef mach_port_t host_security_t; 193 typedef mach_port_t processor_t; 194 typedef mach_port_t processor_set_t; 195 typedef mach_port_t processor_set_control_t; 196 typedef mach_port_t semaphore_t; 197 typedef mach_port_t lock_set_t; 198 typedef mach_port_t ledger_t; 199 typedef mach_port_t alarm_t; 200 typedef mach_port_t clock_serv_t; 201 typedef mach_port_t clock_ctrl_t; 202 typedef mach_port_t arcade_register_t; 203 typedef mach_port_t ipc_eventlink_t; 204 typedef mach_port_t eventlink_port_pair_t[2]; 205 typedef mach_port_t task_id_token_t; 206 typedef mach_port_t kcdata_object_t; 207 208 #endif /* KERNEL */ 209 210 /* 211 * These aren't really unique types. They are just called 212 * out as unique types at one point in history. So we list 213 * them here for compatibility. 214 */ 215 typedef processor_set_t processor_set_name_t; 216 217 /* 218 * These types are just hard-coded as ports 219 */ 220 typedef mach_port_t clock_reply_t; 221 typedef mach_port_t bootstrap_t; 222 typedef mach_port_t mem_entry_name_port_t; 223 typedef mach_port_t exception_handler_t; 224 typedef exception_handler_t *exception_handler_array_t; 225 typedef mach_port_t vm_task_entry_t; 226 typedef mach_port_t io_main_t; 227 typedef mach_port_t UNDServerRef; 228 typedef mach_port_t mach_eventlink_t; 229 230 typedef ipc_info_port_t exception_handler_info_t; 231 232 /* 233 * Mig doesn't translate the components of an array. 234 * For example, Mig won't use the thread_t translations 235 * to translate a thread_array_t argument. So, these definitions 236 * are not completely accurate at the moment for other kernel 237 * components. 238 */ 239 typedef task_t *task_array_t; 240 typedef thread_t *thread_array_t; 241 typedef processor_set_t *processor_set_array_t; 242 typedef processor_set_t *processor_set_name_array_t; 243 typedef processor_t *processor_array_t; 244 typedef thread_act_t *thread_act_array_t; 245 typedef ledger_t *ledger_array_t; 246 247 /* 248 * However the real mach_types got declared, we also have to declare 249 * types with "port" in the name for compatability with the way OSF 250 * had declared the user interfaces at one point. Someday these should 251 * go away. 252 */ 253 typedef task_t task_port_t; 254 typedef task_array_t task_port_array_t; 255 typedef thread_t thread_port_t; 256 typedef thread_array_t thread_port_array_t; 257 typedef ipc_space_t ipc_space_port_t; 258 typedef host_t host_name_t; 259 typedef host_t host_name_port_t; 260 typedef processor_set_t processor_set_port_t; 261 typedef processor_set_t processor_set_name_port_t; 262 typedef processor_set_array_t processor_set_name_port_array_t; 263 typedef processor_set_t processor_set_control_port_t; 264 typedef processor_t processor_port_t; 265 typedef processor_array_t processor_port_array_t; 266 typedef thread_act_t thread_act_port_t; 267 typedef thread_act_array_t thread_act_port_array_t; 268 typedef semaphore_t semaphore_port_t; 269 typedef lock_set_t lock_set_port_t; 270 typedef ledger_t ledger_port_t; 271 typedef ledger_array_t ledger_port_array_t; 272 typedef alarm_t alarm_port_t; 273 typedef clock_serv_t clock_serv_port_t; 274 typedef clock_ctrl_t clock_ctrl_port_t; 275 typedef exception_handler_t exception_port_t; 276 typedef exception_handler_array_t exception_port_arrary_t; 277 typedef char vfs_path_t[4096]; 278 /* 279 * 8K, c.f. FSGETPATH_MAXBUFLEN in bsd/vfs/vfs_syscalls.c. 280 * These types should NEVER be allocated on the stack. 281 */ 282 typedef char nspace_path_t[8192]; 283 typedef char nspace_name_t[8192]; 284 285 #ifdef KERNEL 286 #define TASK_NULL ((task_t) NULL) 287 #define TASK_NAME_NULL ((task_name_t) NULL) 288 #define TASK_INSPECT_NULL ((task_inspect_t) NULL) 289 #define TASK_READ_NULL ((task_read_t) NULL) 290 #define THREAD_NULL ((thread_t) NULL) 291 #define THREAD_INSPECT_NULL ((thread_inspect_t)NULL) 292 #define THREAD_READ_NULL ((thread_read_t)NULL) 293 #define TID_NULL ((uint64_t) NULL) 294 #define THR_ACT_NULL ((thread_act_t) NULL) 295 #define IPC_SPACE_NULL ((ipc_space_t) NULL) 296 #define IPC_SPACE_READ_NULL ((ipc_space_read_t) NULL) 297 #define IPC_SPACE_INSPECT_NULL ((ipc_space_inspect_t) NULL) 298 #define COALITION_NULL ((coalition_t) NULL) 299 #define HOST_NULL ((host_t) NULL) 300 #define HOST_PRIV_NULL ((host_priv_t)NULL) 301 #define HOST_SECURITY_NULL ((host_security_t)NULL) 302 #define PROCESSOR_SET_NULL ((processor_set_t) NULL) 303 #define PROCESSOR_NULL ((processor_t) NULL) 304 #define SEMAPHORE_NULL ((semaphore_t) NULL) 305 #define LOCK_SET_NULL ((lock_set_t) NULL) 306 #define LEDGER_NULL ((ledger_t) NULL) 307 #define ALARM_NULL ((alarm_t) NULL) 308 #define CLOCK_NULL ((clock_t) NULL) 309 #define UND_SERVER_NULL ((UNDServerRef) NULL) 310 #define ARCADE_REG_NULL ((arcade_register_t) NULL) 311 #define MACH_EVENTLINK_NULL ((mach_eventlink_t) 0) 312 #define IPC_EVENTLINK_NULL ((ipc_eventlink_t) NULL) 313 #define TASK_ID_TOKEN_NULL ((task_id_token_t) NULL) 314 #define KCDATA_OBJECT_NULL ((kcdata_object_t) NULL) 315 #else 316 #define TASK_NULL ((task_t) 0) 317 #define TASK_NAME_NULL ((task_name_t) 0) 318 #define TASK_INSPECT_NULL ((task_inspect_t) 0) 319 #define TASK_READ_NULL ((task_read_t) 0) 320 #define THREAD_NULL ((thread_t) 0) 321 #define THREAD_INSPECT_NULL ((thread_inspect_t) 0) 322 #define THREAD_READ_NULL ((thread_read_t) 0) 323 #define TID_NULL ((uint64_t) 0) 324 #define THR_ACT_NULL ((thread_act_t) 0) 325 #define IPC_SPACE_NULL ((ipc_space_t) 0) 326 #define IPC_SPACE_READ_NULL ((ipc_space_read_t) 0) 327 #define IPC_SPACE_INSPECT_NULL ((ipc_space_inspect_t) 0) 328 #define COALITION_NULL ((coalition_t) 0) 329 #define HOST_NULL ((host_t) 0) 330 #define HOST_PRIV_NULL ((host_priv_t) 0) 331 #define HOST_SECURITY_NULL ((host_security_t) 0) 332 #define PROCESSOR_SET_NULL ((processor_set_t) 0) 333 #define PROCESSOR_NULL ((processor_t) 0) 334 #define SEMAPHORE_NULL ((semaphore_t) 0) 335 #define LOCK_SET_NULL ((lock_set_t) 0) 336 #define LEDGER_NULL ((ledger_t) 0) 337 #define ALARM_NULL ((alarm_t) 0) 338 #define CLOCK_NULL ((clock_t) 0) 339 #define UND_SERVER_NULL ((UNDServerRef) 0) 340 #define ARCADE_REG_NULL ((arcade_register_t) 0) 341 #define MACH_EVENTLINK_NULL ((mach_eventlink_t) 0) 342 #define IPC_EVENTLINK_NULL ((ipc_eventlink_t) 0) 343 #define TASK_ID_TOKEN_NULL ((task_id_token_t) 0) 344 #define KCDATA_OBJECT_NULL ((kcdata_object_t) 0) 345 #endif 346 347 /* capability strictly _DECREASING_. 348 * not ordered the other way around because we want TASK_FLAVOR_CONTROL 349 * to be closest to the itk_lock. see task.h. 350 */ 351 typedef unsigned int mach_task_flavor_t; 352 #define TASK_FLAVOR_CONTROL 0 /* a task_t */ 353 #define TASK_FLAVOR_READ 1 /* a task_read_t */ 354 #define TASK_FLAVOR_INSPECT 2 /* a task_inspect_t */ 355 #define TASK_FLAVOR_NAME 3 /* a task_name_t */ 356 357 #define TASK_FLAVOR_MAX TASK_FLAVOR_NAME 358 359 /* capability strictly _DECREASING_ */ 360 typedef unsigned int mach_thread_flavor_t; 361 #define THREAD_FLAVOR_CONTROL 0 /* a thread_t */ 362 #define THREAD_FLAVOR_READ 1 /* a thread_read_t */ 363 #define THREAD_FLAVOR_INSPECT 2 /* a thread_inspect_t */ 364 365 #define THREAD_FLAVOR_MAX THREAD_FLAVOR_INSPECT 366 367 /* DEPRECATED */ 368 typedef natural_t ledger_item_t; 369 #define LEDGER_ITEM_INFINITY ((ledger_item_t) (~0)) 370 371 typedef int64_t ledger_amount_t; 372 #define LEDGER_LIMIT_INFINITY ((ledger_amount_t)((1ULL << 63) - 1)) 373 374 typedef mach_vm_offset_t *emulation_vector_t; 375 typedef char *user_subsystem_t; 376 377 typedef char *labelstr_t; 378 /* 379 * Backwards compatibility, for those programs written 380 * before mach/{std,mach}_types.{defs,h} were set up. 381 */ 382 #include <mach/std_types.h> 383 384 #endif /* _MACH_MACH_TYPES_H_ */ 385