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 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 */ 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 114 /* 115 * If we are not in the kernel, then these will all be represented by 116 * ports at user-space. 117 */ 118 typedef mach_port_t task_t; 119 typedef mach_port_t task_name_t; 120 typedef mach_port_t task_policy_set_t; 121 typedef mach_port_t task_policy_get_t; 122 typedef mach_port_t task_inspect_t; 123 typedef mach_port_t task_read_t; 124 typedef mach_port_t task_suspension_token_t; 125 typedef mach_port_t thread_t; 126 typedef mach_port_t thread_act_t; 127 typedef mach_port_t thread_inspect_t; 128 typedef mach_port_t thread_read_t; 129 typedef mach_port_t ipc_space_t; 130 typedef mach_port_t ipc_space_read_t; 131 typedef mach_port_t ipc_space_inspect_t; 132 typedef mach_port_t coalition_t; 133 typedef mach_port_t host_t; 134 typedef mach_port_t host_priv_t; 135 typedef mach_port_t host_security_t; 136 typedef mach_port_t processor_t; 137 typedef mach_port_t processor_set_t; 138 typedef mach_port_t processor_set_control_t; 139 typedef mach_port_t semaphore_t; 140 typedef mach_port_t lock_set_t; 141 typedef mach_port_t ledger_t; 142 typedef mach_port_t alarm_t; 143 typedef mach_port_t clock_serv_t; 144 typedef mach_port_t clock_ctrl_t; 145 typedef mach_port_t arcade_register_t; 146 typedef mach_port_t ipc_eventlink_t; 147 typedef mach_port_t eventlink_port_pair_t[2]; 148 typedef mach_port_t suid_cred_t; 149 typedef mach_port_t task_id_token_t; 150 151 152 /* 153 * These aren't really unique types. They are just called 154 * out as unique types at one point in history. So we list 155 * them here for compatibility. 156 */ 157 typedef processor_set_t processor_set_name_t; 158 159 /* 160 * These types are just hard-coded as ports 161 */ 162 typedef mach_port_t clock_reply_t; 163 typedef mach_port_t bootstrap_t; 164 typedef mach_port_t mem_entry_name_port_t; 165 typedef mach_port_t exception_handler_t; 166 typedef exception_handler_t *exception_handler_array_t; 167 typedef mach_port_t vm_task_entry_t; 168 typedef mach_port_t io_master_t; 169 typedef mach_port_t UNDServerRef; 170 typedef mach_port_t mach_eventlink_t; 171 172 typedef ipc_info_port_t exception_handler_info_t; 173 174 /* 175 * Mig doesn't translate the components of an array. 176 * For example, Mig won't use the thread_t translations 177 * to translate a thread_array_t argument. So, these definitions 178 * are not completely accurate at the moment for other kernel 179 * components. 180 */ 181 typedef task_t *task_array_t; 182 typedef thread_t *thread_array_t; 183 typedef processor_set_t *processor_set_array_t; 184 typedef processor_set_t *processor_set_name_array_t; 185 typedef processor_t *processor_array_t; 186 typedef thread_act_t *thread_act_array_t; 187 typedef ledger_t *ledger_array_t; 188 189 /* 190 * However the real mach_types got declared, we also have to declare 191 * types with "port" in the name for compatability with the way OSF 192 * had declared the user interfaces at one point. Someday these should 193 * go away. 194 */ 195 typedef task_t task_port_t; 196 typedef task_array_t task_port_array_t; 197 typedef thread_t thread_port_t; 198 typedef thread_array_t thread_port_array_t; 199 typedef ipc_space_t ipc_space_port_t; 200 typedef host_t host_name_t; 201 typedef host_t host_name_port_t; 202 typedef processor_set_t processor_set_port_t; 203 typedef processor_set_t processor_set_name_port_t; 204 typedef processor_set_array_t processor_set_name_port_array_t; 205 typedef processor_set_t processor_set_control_port_t; 206 typedef processor_t processor_port_t; 207 typedef processor_array_t processor_port_array_t; 208 typedef thread_act_t thread_act_port_t; 209 typedef thread_act_array_t thread_act_port_array_t; 210 typedef semaphore_t semaphore_port_t; 211 typedef lock_set_t lock_set_port_t; 212 typedef ledger_t ledger_port_t; 213 typedef ledger_array_t ledger_port_array_t; 214 typedef alarm_t alarm_port_t; 215 typedef clock_serv_t clock_serv_port_t; 216 typedef clock_ctrl_t clock_ctrl_port_t; 217 typedef exception_handler_t exception_port_t; 218 typedef exception_handler_array_t exception_port_arrary_t; 219 typedef char vfs_path_t[4096]; 220 typedef char nspace_path_t[1024]; /* 1024 == PATH_MAX */ 221 typedef char nspace_name_t[1024]; /* 1024 == PATH_MAX */ 222 typedef char suid_cred_path_t[1024]; 223 typedef uint32_t suid_cred_uid_t; 224 225 #define TASK_NULL ((task_t) 0) 226 #define TASK_NAME_NULL ((task_name_t) 0) 227 #define TASK_INSPECT_NULL ((task_inspect_t) 0) 228 #define TASK_READ_NULL ((task_read_t) 0) 229 #define THREAD_NULL ((thread_t) 0) 230 #define THREAD_INSPECT_NULL ((thread_inspect_t) 0) 231 #define THREAD_READ_NULL ((thread_read_t) 0) 232 #define TID_NULL ((uint64_t) 0) 233 #define THR_ACT_NULL ((thread_act_t) 0) 234 #define IPC_SPACE_NULL ((ipc_space_t) 0) 235 #define IPC_SPACE_READ_NULL ((ipc_space_read_t) 0) 236 #define IPC_SPACE_INSPECT_NULL ((ipc_space_inspect_t) 0) 237 #define COALITION_NULL ((coalition_t) 0) 238 #define HOST_NULL ((host_t) 0) 239 #define HOST_PRIV_NULL ((host_priv_t) 0) 240 #define HOST_SECURITY_NULL ((host_security_t) 0) 241 #define PROCESSOR_SET_NULL ((processor_set_t) 0) 242 #define PROCESSOR_NULL ((processor_t) 0) 243 #define SEMAPHORE_NULL ((semaphore_t) 0) 244 #define LOCK_SET_NULL ((lock_set_t) 0) 245 #define LEDGER_NULL ((ledger_t) 0) 246 #define ALARM_NULL ((alarm_t) 0) 247 #define CLOCK_NULL ((clock_t) 0) 248 #define UND_SERVER_NULL ((UNDServerRef) 0) 249 #define ARCADE_REG_NULL ((arcade_register_t) 0) 250 #define MACH_EVENTLINK_NULL ((mach_eventlink_t) 0) 251 #define IPC_EVENTLINK_NULL ((ipc_eventlink_t) 0) 252 #define SUID_CRED_NULL ((suid_cred_t) 0) 253 #define TASK_ID_TOKEN_NULL ((task_id_token_t) 0) 254 255 /* capability strictly _DECREASING_. 256 * not ordered the other way around because we want TASK_FLAVOR_CONTROL 257 * to be closest to the itk_lock. see task.h. 258 */ 259 typedef unsigned int mach_task_flavor_t; 260 #define TASK_FLAVOR_CONTROL 0 /* a task_t */ 261 #define TASK_FLAVOR_READ 1 /* a task_read_t */ 262 #define TASK_FLAVOR_INSPECT 2 /* a task_inspect_t */ 263 #define TASK_FLAVOR_NAME 3 /* a task_name_t */ 264 265 #define TASK_FLAVOR_MAX TASK_FLAVOR_NAME 266 267 /* capability strictly _DECREASING_ */ 268 typedef unsigned int mach_thread_flavor_t; 269 #define THREAD_FLAVOR_CONTROL 0 /* a thread_t */ 270 #define THREAD_FLAVOR_READ 1 /* a thread_read_t */ 271 #define THREAD_FLAVOR_INSPECT 2 /* a thread_inspect_t */ 272 273 #define THREAD_FLAVOR_MAX THREAD_FLAVOR_INSPECT 274 275 /* DEPRECATED */ 276 typedef natural_t ledger_item_t; 277 #define LEDGER_ITEM_INFINITY ((ledger_item_t) (~0)) 278 279 typedef int64_t ledger_amount_t; 280 #define LEDGER_LIMIT_INFINITY ((ledger_amount_t)((1ULL << 63) - 1)) 281 282 typedef mach_vm_offset_t *emulation_vector_t; 283 typedef char *user_subsystem_t; 284 285 typedef char *labelstr_t; 286 /* 287 * Backwards compatibility, for those programs written 288 * before mach/{std,mach}_types.{defs,h} were set up. 289 */ 290 #include <mach/std_types.h> 291 292 #endif /* _MACH_MACH_TYPES_H_ */