]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (c) 2000-2016 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 | * NOTICE: This file was modified by McAfee Research in 2004 to introduce | |
33 | * support for mandatory and extensible security protections. This notice | |
34 | * is included in support of clause 2.2 (b) of the Apple Public License, | |
35 | * Version 2.0. | |
36 | */ | |
37 | ||
38 | #ifndef _MISC_PROTOS_H_ | |
39 | #define _MISC_PROTOS_H_ | |
40 | ||
41 | #include <stdarg.h> | |
42 | #include <string.h> | |
43 | #include <machine/setjmp.h> | |
44 | #include <mach/boolean.h> | |
45 | #include <mach/message.h> | |
46 | #include <mach/machine/vm_types.h> | |
47 | #include <ipc/ipc_types.h> | |
48 | #include <kern/debug.h> | |
49 | #include <libkern/copyio.h> | |
50 | ||
51 | #ifndef MIN | |
52 | #define MIN(a, b) (((a)<(b))?(a):(b)) | |
53 | #endif /* MIN */ | |
54 | #ifndef MAX | |
55 | #define MAX(a, b) (((a)>(b))?(a):(b)) | |
56 | #endif /* MAX */ | |
57 | ||
58 | /* Set a bit in a bit array */ | |
59 | extern void setbit( | |
60 | int which, | |
61 | int *bitmap); | |
62 | ||
63 | /* Clear a bit in a bit array */ | |
64 | extern void clrbit( | |
65 | int which, | |
66 | int *bitmap); | |
67 | ||
68 | /* Find the first set bit in a bit array */ | |
69 | extern int ffsbit( | |
70 | int *bitmap); | |
71 | extern int ffs( | |
72 | unsigned int mask); | |
73 | extern int ffsll( | |
74 | unsigned long long mask); | |
75 | ||
76 | /* Find the last set bit in a bit array */ | |
77 | extern int fls( | |
78 | unsigned int mask); | |
79 | extern int flsll( | |
80 | unsigned long long mask); | |
81 | ||
82 | /* | |
83 | * Test if indicated bit is set in bit string. | |
84 | */ | |
85 | extern int testbit( | |
86 | int which, | |
87 | int *bitmap); | |
88 | ||
89 | /* Move an aligned 32 or 64-bit word from user space to kernel space | |
90 | * using a single read instruction | |
91 | * | |
92 | * when reading a 32-bit word, the value is 0-extended into the kernel space | |
93 | * 64-bit buffer passed as `kernel_addr` | |
94 | * (think `*kernel_addr = *(uint32_t *)user_addr`) | |
95 | */ | |
96 | extern int copyin_word( | |
97 | const user_addr_t user_addr, | |
98 | uint64_t *kernel_addr, | |
99 | vm_size_t nbytes); | |
100 | ||
101 | /* Move a NUL-terminated string from a user space to kernel space */ | |
102 | extern int copyinstr( | |
103 | const user_addr_t user_addr, | |
104 | char *kernel_addr, | |
105 | vm_size_t max, | |
106 | vm_size_t *actual); | |
107 | ||
108 | /* Move arbitrarily-aligned data from a user space to kernel space */ | |
109 | extern int copyinmsg( | |
110 | const user_addr_t user_addr, | |
111 | char *kernel_addr, | |
112 | mach_msg_size_t nbytes); | |
113 | ||
114 | /* Move arbitrarily-aligned data from a kernel space to user space */ | |
115 | extern int copyoutmsg( | |
116 | const char *kernel_addr, | |
117 | user_addr_t user_addr, | |
118 | mach_msg_size_t nbytes); | |
119 | ||
120 | /* Invalidate copy window(s) cache */ | |
121 | extern void inval_copy_windows(thread_t); | |
122 | extern void copy_window_fault(thread_t, vm_map_t, int); | |
123 | ||
124 | extern int copyin_validate(const user_addr_t, uintptr_t, vm_size_t); | |
125 | extern int copyout_validate(uintptr_t, const user_addr_t, vm_size_t); | |
126 | ||
127 | extern int sscanf(const char *input, const char *fmt, ...) __scanflike(2, 3); | |
128 | ||
129 | /* sprintf() is being deprecated. Please use snprintf() instead. */ | |
130 | extern integer_t sprintf(char *buf, const char *fmt, ...) __deprecated; | |
131 | ||
132 | extern int printf(const char *format, ...) __printflike(1, 2); | |
133 | extern int vprintf(const char *format, va_list ap); | |
134 | ||
135 | #if KERNEL_PRIVATE | |
136 | int _consume_printf_args(int, ...); | |
137 | #endif | |
138 | ||
139 | #if CONFIG_NO_PRINTF_STRINGS | |
140 | #if KERNEL_PRIVATE | |
141 | #define printf(x, ...) _consume_printf_args( 0, ## __VA_ARGS__ ) | |
142 | #else | |
143 | #define printf(x, ...) do {} while (0) | |
144 | #endif | |
145 | #endif | |
146 | ||
147 | extern int paniclog_append_noflush(const char *format, ...) __printflike(1, 2); | |
148 | ||
149 | extern int kdb_printf(const char *format, ...) __printflike(1, 2); | |
150 | ||
151 | extern int kdb_log(const char *format, ...) __printflike(1, 2); | |
152 | ||
153 | extern int kdb_printf_unbuffered(const char *format, ...) __printflike(1, 2); | |
154 | ||
155 | extern void printf_init(void); | |
156 | ||
157 | extern int snprintf(char *, size_t, const char *, ...) __printflike(3, 4); | |
158 | ||
159 | extern void log(int level, char *fmt, ...); | |
160 | ||
161 | void | |
162 | _doprnt( | |
163 | const char *fmt, | |
164 | va_list *argp, | |
165 | void (*putc)(char), | |
166 | int radix); | |
167 | ||
168 | void | |
169 | _doprnt_log( | |
170 | const char *fmt, | |
171 | va_list *argp, | |
172 | void (*putc)(char), | |
173 | int radix); | |
174 | ||
175 | int | |
176 | __doprnt( | |
177 | const char *fmt, | |
178 | va_list argp, | |
179 | void (*putc)(int, void *), | |
180 | void *arg, | |
181 | int radix, | |
182 | int is_log); | |
183 | ||
184 | extern void safe_gets( | |
185 | char *str, | |
186 | int maxlen); | |
187 | ||
188 | extern void cnputcusr(char); | |
189 | ||
190 | extern void cnputsusr(char *, int); | |
191 | ||
192 | extern void conslog_putc(char); | |
193 | ||
194 | extern void cons_putc_locked(char); | |
195 | ||
196 | extern void consdebug_putc(char); | |
197 | ||
198 | extern void consdebug_log(char); | |
199 | ||
200 | extern void consdebug_putc_unbuffered(char); | |
201 | ||
202 | extern void cnputc(char); | |
203 | ||
204 | extern void cnputc_unbuffered(char); | |
205 | ||
206 | extern void console_write(char *, int); | |
207 | ||
208 | extern void console_suspend(void); | |
209 | ||
210 | extern void console_resume(void); | |
211 | ||
212 | extern int cngetc(void); | |
213 | ||
214 | extern int cnmaygetc(void); | |
215 | ||
216 | extern int _setjmp( | |
217 | jmp_buf_t *jmp_buf); | |
218 | ||
219 | extern int _longjmp( | |
220 | jmp_buf_t *jmp_buf, | |
221 | int value); | |
222 | ||
223 | extern void bootstrap_create(void); | |
224 | ||
225 | #if DIPC | |
226 | extern boolean_t no_bootstrap_task(void); | |
227 | extern ipc_port_t get_root_master_device_port(void); | |
228 | #endif /* DIPC */ | |
229 | ||
230 | extern kern_return_t kernel_set_special_port( | |
231 | host_priv_t host_priv, | |
232 | int which, | |
233 | ipc_port_t port); | |
234 | ||
235 | extern kern_return_t kernel_get_special_port( | |
236 | host_priv_t host_priv, | |
237 | int which, | |
238 | ipc_port_t *portp); | |
239 | ||
240 | user_addr_t get_useraddr(void); | |
241 | ||
242 | /* symbol lookup */ | |
243 | struct kmod_info_t; | |
244 | ||
245 | extern uint64_t early_random(void); | |
246 | ||
247 | #endif /* _MISC_PROTOS_H_ */ |