1/* 2 * Copyright (c) 1999-2014 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 * Mach Operating System 30 * Copyright (c) 1991,1990,1989 Carnegie Mellon University 31 * All Rights Reserved. 32 * 33 * Permission to use, copy, modify and distribute this software and its 34 * documentation is hereby granted, provided that both the copyright 35 * notice and this permission notice appear in all copies of the 36 * software, derivative works or modified versions, and any portions 37 * thereof, and that both notices appear in supporting documentation. 38 * 39 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 40 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 41 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 42 * 43 * Carnegie Mellon requests users of this software to return to 44 * 45 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 46 * School of Computer Science 47 * Carnegie Mellon University 48 * Pittsburgh PA 15213-3890 49 * 50 * any improvements or extensions that they make and grant Carnegie Mellon 51 * the rights to redistribute these changes. 52 */ 53 54/* 55 * Includes all the types that a normal user 56 * of Mach programs should need 57 */ 58 59#ifndef _MACH_H_ 60#define _MACH_H_ 61 62#define __MACH30__ 63#define MACH_IPC_FLAVOR UNTYPED 64 65#include <mach/std_types.h> 66#include <mach/mach_types.h> 67#include <mach/mach_interface.h> 68#include <mach/mach_port.h> 69#include <mach/mach_init.h> 70#include <mach/mach_host.h> 71#include <mach/thread_switch.h> 72 73#include <mach/rpc.h> /* for compatibility only */ 74#include <mach/mig.h> 75 76#include <mach/mig_errors.h> 77#include <mach/mach_error.h> 78 79#include <sys/cdefs.h> 80 81__BEGIN_DECLS 82/* 83 * Standard prototypes 84 */ 85extern void panic_init(mach_port_t); 86extern void panic(const char *, ...); 87 88extern void safe_gets(char *, 89 char *, 90 int); 91 92extern void slot_name(cpu_type_t, 93 cpu_subtype_t, 94 char **, 95 char **); 96 97extern void mig_reply_setup(mach_msg_header_t *, 98 mach_msg_header_t *); 99 100extern void mach_msg_destroy(mach_msg_header_t *); 101 102extern mach_msg_return_t mach_msg_receive(mach_msg_header_t *); 103 104extern mach_msg_return_t mach_msg_send(mach_msg_header_t *); 105 106extern mach_msg_return_t mach_msg_server_once(boolean_t (*) 107 (mach_msg_header_t *, 108 mach_msg_header_t *), 109 mach_msg_size_t, 110 mach_port_t, 111 mach_msg_options_t); 112extern mach_msg_return_t mach_msg_server(boolean_t (*) 113 (mach_msg_header_t *, 114 mach_msg_header_t *), 115 mach_msg_size_t, 116 mach_port_t, 117 mach_msg_options_t); 118 119extern mach_msg_return_t mach_msg_server_importance(boolean_t (*) 120 (mach_msg_header_t *, 121 mach_msg_header_t *), 122 mach_msg_size_t, 123 mach_port_t, 124 mach_msg_options_t); 125/* 126 * Prototypes for compatibility 127 */ 128extern kern_return_t clock_get_res(mach_port_t, 129 clock_res_t *); 130extern kern_return_t clock_set_res(mach_port_t, 131 clock_res_t); 132 133extern kern_return_t clock_sleep(mach_port_t, 134 int, 135 mach_timespec_t, 136 mach_timespec_t *); 137 138/*! 139 * @group voucher_mach_msg Prototypes 140 */ 141 142#define VOUCHER_MACH_MSG_API_VERSION 20140205 143 144/*! 145 * @typedef voucher_mach_msg_state_t 146 * 147 * @abstract 148 * Opaque object encapsulating state changed by voucher_mach_msg_adopt(). 149 */ 150typedef struct voucher_mach_msg_state_s *voucher_mach_msg_state_t; 151 152/*! 153 * @const VOUCHER_MACH_MSG_STATE_UNCHANGED 154 * 155 * @discussion 156 * Constant indicating no state change occurred. 157 */ 158#define VOUCHER_MACH_MSG_STATE_UNCHANGED ((voucher_mach_msg_state_t)~0ul) 159 160/*! 161 * @function voucher_mach_msg_set 162 * 163 * @abstract 164 * Change specified message header to contain current mach voucher with a 165 * COPY_SEND disposition. 166 * Does not change message if it already has non-zero MACH_MSGH_BITS_VOUCHER. 167 * 168 * @discussion 169 * Borrows reference to current thread voucher so message should be sent 170 * immediately (without intervening calls that might change that voucher). 171 * 172 * @param msg 173 * The message to modify. 174 * 175 * @result 176 * True if header was changed. 177 */ 178extern boolean_t voucher_mach_msg_set(mach_msg_header_t *msg); 179 180/*! 181 * @function voucher_mach_msg_clear 182 * 183 * @abstract 184 * Removes changes made to specified message header by voucher_mach_msg_set() 185 * and any mach_msg() send operations (successful or not). 186 * If the message is not needed further, mach_msg_destroy() should be called 187 * instead. 188 * 189 * @discussion 190 * Not intended to be called if voucher_mach_msg_set() returned false. 191 * Releases reference to message mach voucher if an extra reference was 192 * acquired due to an unsuccessful send operation (pseudo-receive). 193 * 194 * @param msg 195 * The message to modify. 196 */ 197extern void voucher_mach_msg_clear(mach_msg_header_t *msg); 198 199/*! 200 * @function voucher_mach_msg_adopt 201 * 202 * @abstract 203 * Adopt the voucher contained in the specified message on the current thread 204 * and return the previous thread voucher state. 205 * 206 * @discussion 207 * Ownership of the mach voucher in the message is transferred to the current 208 * thread and the message header voucher fields are cleared. 209 * 210 * @param msg 211 * The message to query and modify. 212 * 213 * @result 214 * The previous thread voucher state or VOUCHER_MACH_MSG_STATE_UNCHANGED if no 215 * state change occurred. 216 */ 217extern voucher_mach_msg_state_t voucher_mach_msg_adopt(mach_msg_header_t *msg); 218 219/*! 220 * @function voucher_mach_msg_revert 221 * 222 * @abstract 223 * Restore thread voucher state previously modified by voucher_mach_msg_adopt(). 224 * 225 * @discussion 226 * Current thread voucher reference is released. 227 * No change to thread voucher state if passed VOUCHER_MACH_MSG_STATE_UNCHANGED. 228 * 229 * @param state 230 * The thread voucher state to restore. 231 */ 232 233extern void voucher_mach_msg_revert(voucher_mach_msg_state_t state); 234 235__END_DECLS 236 237#endif /* _MACH_H_ */ 238