xf.li | bdd93d5 | 2023-05-12 07:10:14 -0700 | [diff] [blame] | 1 | /* Standard header for all Mach programs. |
| 2 | Copyright (C) 1993-2016 Free Software Foundation, Inc. |
| 3 | This file is part of the GNU C Library. |
| 4 | |
| 5 | The GNU C Library is free software; you can redistribute it and/or |
| 6 | modify it under the terms of the GNU Lesser General Public |
| 7 | License as published by the Free Software Foundation; either |
| 8 | version 2.1 of the License, or (at your option) any later version. |
| 9 | |
| 10 | The GNU C Library is distributed in the hope that it will be useful, |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 | Lesser General Public License for more details. |
| 14 | |
| 15 | You should have received a copy of the GNU Lesser General Public |
| 16 | License along with the GNU C Library; if not, see |
| 17 | <http://www.gnu.org/licenses/>. */ |
| 18 | |
| 19 | #ifndef _MACH_H |
| 20 | |
| 21 | #define _MACH_H 1 |
| 22 | |
| 23 | /* We must include this before using __need_FILE with <stdio.h> below. */ |
| 24 | #include <features.h> |
| 25 | |
| 26 | |
| 27 | /* Get the basic types used by Mach. */ |
| 28 | #include <mach/mach_types.h> |
| 29 | |
| 30 | /* This declares the basic variables and macros everything needs. */ |
| 31 | #include <mach_init.h> |
| 32 | |
| 33 | /* This declares all the real system call functions. */ |
| 34 | #include <mach/mach_traps.h> |
| 35 | |
| 36 | /* These are MiG-generated headers for the kernel interfaces commonly used. */ |
| 37 | #include <mach/mach_interface.h> /* From <mach/mach.defs>. */ |
| 38 | #include <mach/mach_port.h> |
| 39 | #include <mach/mach_host.h> |
| 40 | |
| 41 | /* For the kernel RPCs which have system call shortcut versions, |
| 42 | the MiG-generated header in fact declares `CALL_rpc' rather than `CALL'. |
| 43 | This file declares the simple `CALL' functions. */ |
| 44 | #include <mach-shortcuts.h> |
| 45 | |
| 46 | |
| 47 | /* Receive RPC request messages on RCV_NAME and pass them to DEMUX, which |
| 48 | decodes them and produces reply messages. MAX_SIZE is the maximum size |
| 49 | (in bytes) of the request and reply buffers. */ |
| 50 | extern mach_msg_return_t |
| 51 | __mach_msg_server (boolean_t (*__demux) (mach_msg_header_t *__request, |
| 52 | mach_msg_header_t *__reply), |
| 53 | mach_msg_size_t __max_size, |
| 54 | mach_port_t __rcv_name), |
| 55 | mach_msg_server (boolean_t (*__demux) (mach_msg_header_t *__request, |
| 56 | mach_msg_header_t *__reply), |
| 57 | mach_msg_size_t __max_size, |
| 58 | mach_port_t __rcv_name); |
| 59 | |
| 60 | /* Just like `mach_msg_server', but the OPTION and TIMEOUT parameters are |
| 61 | passed on to `mach_msg'. */ |
| 62 | extern mach_msg_return_t |
| 63 | __mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request, |
| 64 | mach_msg_header_t *__reply), |
| 65 | mach_msg_size_t __max_size, |
| 66 | mach_port_t __rcv_name, |
| 67 | mach_msg_option_t __option, |
| 68 | mach_msg_timeout_t __timeout), |
| 69 | mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request, |
| 70 | mach_msg_header_t *__reply), |
| 71 | mach_msg_size_t __max_size, |
| 72 | mach_port_t __rcv_name, |
| 73 | mach_msg_option_t __option, |
| 74 | mach_msg_timeout_t __timeout); |
| 75 | |
| 76 | |
| 77 | /* Deallocate all port rights and out-of-line memory in MSG. */ |
| 78 | extern void |
| 79 | __mach_msg_destroy (mach_msg_header_t *msg), |
| 80 | mach_msg_destroy (mach_msg_header_t *msg); |
| 81 | |
| 82 | |
| 83 | #define __need_FILE |
| 84 | #include <stdio.h> |
| 85 | |
| 86 | /* Open a stream on a Mach device. */ |
| 87 | extern FILE *mach_open_devstream (mach_port_t device_port, const char *mode); |
| 88 | |
| 89 | /* Give THREAD a stack and set it to run at PC when resumed. |
| 90 | If *STACK_SIZE is nonzero, that size of stack is allocated. |
| 91 | If *STACK_BASE is nonzero, that stack location is used. |
| 92 | If STACK_BASE is not null it is filled in with the chosen stack base. |
| 93 | If STACK_SIZE is not null it is filled in with the chosen stack size. |
| 94 | Regardless, an extra page of red zone is allocated off the end; this |
| 95 | is not included in *STACK_SIZE. */ |
| 96 | kern_return_t __mach_setup_thread (task_t task, thread_t thread, void *pc, |
| 97 | vm_address_t *stack_base, |
| 98 | vm_size_t *stack_size); |
| 99 | kern_return_t mach_setup_thread (task_t task, thread_t thread, void *pc, |
| 100 | vm_address_t *stack_base, |
| 101 | vm_size_t *stack_size); |
| 102 | |
| 103 | |
| 104 | #endif /* mach.h */ |