1 | /* Standard header for all Mach programs. |
2 | Copyright (C) 1993-2022 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 | <https://www.gnu.org/licenses/>. */ |
18 | |
19 | #ifndef _MACH_H |
20 | |
21 | #define _MACH_H 1 |
22 | |
23 | #include <features.h> |
24 | |
25 | /* Get the basic types used by Mach. */ |
26 | #include <mach/mach_types.h> |
27 | |
28 | /* This declares the basic variables and macros everything needs. */ |
29 | #include <mach_init.h> |
30 | |
31 | /* This declares all the real system call functions. */ |
32 | #include <mach/mach_traps.h> |
33 | |
34 | /* These are MiG-generated headers for the kernel interfaces commonly used. */ |
35 | #include <mach/mach_interface.h> /* From <mach/mach.defs>. */ |
36 | #include <mach/mach_port.h> |
37 | #include <mach/mach_host.h> |
38 | |
39 | /* For the kernel RPCs which have system call shortcut versions, |
40 | the MiG-generated header in fact declares `CALL_rpc' rather than `CALL'. |
41 | This file declares the simple `CALL' functions. */ |
42 | #include <mach-shortcuts.h> |
43 | |
44 | |
45 | /* Receive RPC request messages on RCV_NAME and pass them to DEMUX, which |
46 | decodes them and produces reply messages. MAX_SIZE is the maximum size |
47 | (in bytes) of the request and reply buffers. */ |
48 | extern mach_msg_return_t |
49 | __mach_msg_server (boolean_t (*__demux) (mach_msg_header_t *__request, |
50 | mach_msg_header_t *__reply), |
51 | mach_msg_size_t __max_size, |
52 | mach_port_t __rcv_name), |
53 | mach_msg_server (boolean_t (*__demux) (mach_msg_header_t *__request, |
54 | mach_msg_header_t *__reply), |
55 | mach_msg_size_t __max_size, |
56 | mach_port_t __rcv_name); |
57 | |
58 | /* Just like `mach_msg_server', but the OPTION and TIMEOUT parameters are |
59 | passed on to `mach_msg'. */ |
60 | extern mach_msg_return_t |
61 | __mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request, |
62 | mach_msg_header_t *__reply), |
63 | mach_msg_size_t __max_size, |
64 | mach_port_t __rcv_name, |
65 | mach_msg_option_t __option, |
66 | mach_msg_timeout_t __timeout), |
67 | mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request, |
68 | mach_msg_header_t *__reply), |
69 | mach_msg_size_t __max_size, |
70 | mach_port_t __rcv_name, |
71 | mach_msg_option_t __option, |
72 | mach_msg_timeout_t __timeout); |
73 | |
74 | |
75 | /* Deallocate all port rights and out-of-line memory in MSG. */ |
76 | extern void |
77 | __mach_msg_destroy (mach_msg_header_t *msg), |
78 | mach_msg_destroy (mach_msg_header_t *msg); |
79 | |
80 | #include <bits/types/FILE.h> |
81 | |
82 | /* Open a stream on a Mach device. */ |
83 | extern FILE *mach_open_devstream (mach_port_t device_port, const char *mode); |
84 | |
85 | /* Give THREAD a stack and set it to run at PC when resumed. |
86 | If *STACK_SIZE is nonzero, that size of stack is allocated. |
87 | If *STACK_BASE is nonzero, that stack location is used. |
88 | If STACK_BASE is not null it is filled in with the chosen stack base. |
89 | If STACK_SIZE is not null it is filled in with the chosen stack size. |
90 | Regardless, an extra page of red zone is allocated off the end; this |
91 | is not included in *STACK_SIZE. */ |
92 | kern_return_t __mach_setup_thread (task_t task, thread_t thread, void *pc, |
93 | vm_address_t *stack_base, |
94 | vm_size_t *stack_size); |
95 | kern_return_t mach_setup_thread (task_t task, thread_t thread, void *pc, |
96 | vm_address_t *stack_base, |
97 | vm_size_t *stack_size); |
98 | |
99 | /* Give THREAD a TLS area. */ |
100 | kern_return_t __mach_setup_tls (thread_t thread); |
101 | kern_return_t mach_setup_tls (thread_t thread); |
102 | |
103 | #endif /* mach.h */ |
104 | |