]>
Commit | Line | Data |
---|---|---|
056a1eb7 SF |
1 | /** @file |
2 | * VirtualBox - Common C and C++ definition. | |
3 | */ | |
4 | ||
5 | /* | |
6d209b23 | 6 | * Copyright (C) 2006-2017 Oracle Corporation |
056a1eb7 SF |
7 | * |
8 | * This file is part of VirtualBox Open Source Edition (OSE), as | |
9 | * available from http://www.virtualbox.org. This file is free software; | |
10 | * you can redistribute it and/or modify it under the terms of the GNU | |
11 | * General Public License (GPL) as published by the Free Software | |
12 | * Foundation, in version 2 as it comes in the "COPYING" file of the | |
13 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the | |
14 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. | |
15 | * | |
16 | * The contents of this file may alternatively be used under the terms | |
17 | * of the Common Development and Distribution License Version 1.0 | |
18 | * (CDDL) only, as it comes in the "COPYING.CDDL" file of the | |
19 | * VirtualBox OSE distribution, in which case the provisions of the | |
20 | * CDDL are applicable instead of those of the GPL. | |
21 | * | |
22 | * You may elect to license modified versions of this file under the | |
23 | * terms and conditions of either the GPL or the CDDL or both. | |
24 | */ | |
25 | ||
26 | #ifndef ___VBox_cdefs_h | |
27 | #define ___VBox_cdefs_h | |
28 | ||
29 | #include <iprt/cdefs.h> | |
30 | ||
31 | ||
32 | /** @defgroup VBox Common Defintions and Macros | |
33 | * @{ | |
34 | */ | |
35 | ||
36 | /** @def VBOX_WITH_STATISTICS | |
37 | * When defined all statistics will be included in the build. | |
38 | * This is enabled by default in all debug builds. | |
39 | */ | |
40 | #ifndef VBOX_WITH_STATISTICS | |
41 | # ifdef DEBUG | |
42 | # define VBOX_WITH_STATISTICS | |
43 | # endif | |
44 | #endif | |
45 | ||
46 | /** @def VBOX_STRICT | |
47 | * Alias for RT_STRICT. | |
48 | */ | |
49 | #ifdef RT_STRICT | |
50 | # ifndef VBOX_STRICT | |
51 | # define VBOX_STRICT | |
52 | # endif | |
53 | #endif | |
54 | ||
55 | ||
56 | /* | |
57 | * Shut up DOXYGEN warnings and guide it properly thru the code. | |
58 | */ | |
59 | #ifdef DOXYGEN_RUNNING | |
60 | #define VBOX_WITH_STATISTICS | |
61 | #define VBOX_STRICT | |
62 | #define IN_DBG | |
63 | #define IN_DIS | |
64 | #define IN_INTNET_R0 | |
65 | #define IN_INTNET_R3 | |
66 | #define IN_PCIRAW_R0 | |
67 | #define IN_PCIRAW_R3 | |
68 | #define IN_REM_R3 | |
69 | #define IN_SUP_R0 | |
70 | #define IN_SUP_R3 | |
71 | #define IN_SUP_RC | |
72 | #define IN_SUP_STATIC | |
73 | #define IN_USBLIB | |
74 | #define IN_VBOXDDU | |
75 | #define IN_VMM_RC | |
76 | #define IN_VMM_R0 | |
77 | #define IN_VMM_R3 | |
78 | #define IN_VMM_STATIC | |
79 | #endif | |
80 | ||
81 | ||
82 | ||
83 | ||
84 | /** @def VBOXCALL | |
85 | * The standard calling convention for VBOX interfaces. | |
86 | */ | |
87 | #define VBOXCALL RTCALL | |
88 | ||
89 | ||
90 | ||
91 | /** @def IN_DIS | |
92 | * Used to indicate whether we're inside the same link module as the | |
93 | * disassembler. | |
94 | */ | |
95 | /** @def DISDECL(type) | |
96 | * Disassembly export or import declaration. | |
97 | * @param type The return type of the function declaration. | |
98 | */ | |
99 | #if defined(IN_DIS) | |
100 | # ifdef IN_DIS_STATIC | |
101 | # define DISDECL(type) DECLHIDDEN(type) VBOXCALL | |
102 | # else | |
103 | # define DISDECL(type) DECLEXPORT(type) VBOXCALL | |
104 | # endif | |
105 | #else | |
106 | # define DISDECL(type) DECLIMPORT(type) VBOXCALL | |
107 | #endif | |
108 | ||
109 | ||
110 | ||
111 | /** @def IN_DBG | |
112 | * Used to indicate whether we're inside the same link module as the debugger | |
113 | * console, gui, and related things (ring-3). | |
114 | */ | |
115 | /** @def DBGDECL(type) | |
116 | * Debugger module export or import declaration. | |
117 | * Functions declared using this exists only in R3 since the | |
118 | * debugger modules is R3 only. | |
119 | * @param type The return type of the function declaration. | |
120 | */ | |
121 | #if defined(IN_DBG_R3) || defined(IN_DBG) | |
122 | # define DBGDECL(type) DECLEXPORT(type) VBOXCALL | |
123 | #else | |
124 | # define DBGDECL(type) DECLIMPORT(type) VBOXCALL | |
125 | #endif | |
126 | ||
127 | ||
128 | ||
129 | /** @def IN_INTNET_R3 | |
130 | * Used to indicate whether we're inside the same link module as the Ring-3 | |
131 | * Internal Networking Service. | |
132 | */ | |
133 | /** @def INTNETR3DECL(type) | |
134 | * Internal Networking Service export or import declaration. | |
135 | * @param type The return type of the function declaration. | |
136 | */ | |
137 | #ifdef IN_INTNET_R3 | |
138 | # define INTNETR3DECL(type) DECLEXPORT(type) VBOXCALL | |
139 | #else | |
140 | # define INTNETR3DECL(type) DECLIMPORT(type) VBOXCALL | |
141 | #endif | |
142 | ||
143 | /** @def IN_INTNET_R0 | |
144 | * Used to indicate whether we're inside the same link module as the R0 | |
145 | * Internal Network Service. | |
146 | */ | |
147 | /** @def INTNETR0DECL(type) | |
148 | * Internal Networking Service export or import declaration. | |
149 | * @param type The return type of the function declaration. | |
150 | */ | |
151 | #ifdef IN_INTNET_R0 | |
152 | # define INTNETR0DECL(type) DECLEXPORT(type) VBOXCALL | |
153 | #else | |
154 | # define INTNETR0DECL(type) DECLIMPORT(type) VBOXCALL | |
155 | #endif | |
156 | ||
157 | ||
158 | ||
159 | /** @def IN_PCIRAW_R3 | |
160 | * Used to indicate whether we're inside the same link module as the Ring-3 | |
161 | * PCI passthrough support. | |
162 | */ | |
163 | /** @def PCIRAWR3DECL(type) | |
164 | * PCI passthrough export or import declaration. | |
165 | * @param type The return type of the function declaration. | |
166 | */ | |
167 | #ifdef IN_PCIRAW_R3 | |
168 | # define PCIRAWR3DECL(type) DECLEXPORT(type) VBOXCALL | |
169 | #else | |
170 | # define PCIRAWR3DECL(type) DECLIMPORT(type) VBOXCALL | |
171 | #endif | |
172 | ||
173 | /** @def IN_PCIRAW_R0 | |
174 | * Used to indicate whether we're inside the same link module as the R0 | |
175 | * PCI passthrough support. | |
176 | */ | |
177 | /** @def PCIRAWR0DECL(type) | |
178 | * PCI passthroug export or import declaration. | |
179 | * @param type The return type of the function declaration. | |
180 | */ | |
181 | #ifdef IN_PCIRAW_R0 | |
182 | # define PCIRAWR0DECL(type) DECLEXPORT(type) VBOXCALL | |
183 | #else | |
184 | # define PCIRAWR0DECL(type) DECLIMPORT(type) VBOXCALL | |
185 | #endif | |
186 | ||
187 | ||
188 | ||
189 | /** @def IN_REM_R3 | |
190 | * Used to indicate whether we're inside the same link module as | |
191 | * the HC Ring-3 Recompiled Execution Manager. | |
192 | */ | |
193 | /** @def REMR3DECL(type) | |
194 | * Recompiled Execution Manager HC Ring-3 export or import declaration. | |
195 | * @param type The return type of the function declaration. | |
196 | */ | |
197 | #ifdef IN_REM_R3 | |
198 | # define REMR3DECL(type) DECLEXPORT(type) VBOXCALL | |
199 | #else | |
200 | # define REMR3DECL(type) DECLIMPORT(type) VBOXCALL | |
201 | #endif | |
202 | ||
203 | ||
204 | ||
205 | /** @def IN_SUP_R3 | |
206 | * Used to indicate whether we're inside the same link module as the Ring-3 | |
207 | * Support Library or not. | |
208 | */ | |
209 | /** @def SUPR3DECL(type) | |
210 | * Support library export or import declaration. | |
211 | * @param type The return type of the function declaration. | |
212 | */ | |
213 | #ifdef IN_SUP_R3 | |
214 | # ifdef IN_SUP_STATIC | |
215 | # define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
216 | # else | |
217 | # define SUPR3DECL(type) DECLEXPORT(type) VBOXCALL | |
218 | # endif | |
219 | #else | |
220 | # ifdef IN_SUP_STATIC | |
221 | # define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
222 | # else | |
223 | # define SUPR3DECL(type) DECLIMPORT(type) VBOXCALL | |
224 | # endif | |
225 | #endif | |
226 | ||
227 | /** @def IN_SUP_R0 | |
228 | * Used to indicate whether we're inside the same link module as the Ring-0 | |
229 | * Support Library or not. | |
230 | */ | |
231 | /** @def IN_SUP_STATIC | |
232 | * Used to indicate that the Support Library is built or used as a static | |
233 | * library. | |
234 | */ | |
235 | /** @def SUPR0DECL(type) | |
236 | * Support library export or import declaration. | |
237 | * @param type The return type of the function declaration. | |
238 | */ | |
239 | #ifdef IN_SUP_R0 | |
240 | # ifdef IN_SUP_STATIC | |
241 | # define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL | |
242 | # else | |
243 | # define SUPR0DECL(type) DECLEXPORT(type) VBOXCALL | |
244 | # endif | |
245 | #else | |
246 | # ifdef IN_SUP_STATIC | |
247 | # define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL | |
248 | # else | |
249 | # define SUPR0DECL(type) DECLIMPORT(type) VBOXCALL | |
250 | # endif | |
251 | #endif | |
252 | ||
253 | /** @def IN_SUP_RC | |
254 | * Used to indicate whether we're inside the same link module as the RC Support | |
255 | * Library or not. | |
256 | */ | |
257 | /** @def SUPRCDECL(type) | |
258 | * Support library export or import declaration. | |
259 | * @param type The return type of the function declaration. | |
260 | */ | |
261 | #ifdef IN_SUP_RC | |
262 | # define SUPRCDECL(type) DECLEXPORT(type) VBOXCALL | |
263 | #else | |
264 | # define SUPRCDECL(type) DECLIMPORT(type) VBOXCALL | |
265 | #endif | |
266 | ||
267 | /** @def IN_SUP_R0 | |
268 | * Used to indicate whether we're inside the same link module as the Ring-0 | |
269 | * Support Library or not. | |
270 | */ | |
271 | /** @def SUPR0DECL(type) | |
272 | * Support library export or import declaration. | |
273 | * @param type The return type of the function declaration. | |
274 | */ | |
275 | #if defined(IN_SUP_R0) || defined(IN_SUP_R3) || defined(IN_SUP_RC) | |
276 | # define SUPDECL(type) DECLEXPORT(type) VBOXCALL | |
277 | #else | |
278 | # define SUPDECL(type) DECLIMPORT(type) VBOXCALL | |
279 | #endif | |
280 | ||
281 | ||
282 | ||
283 | /** @def IN_USBLIB | |
284 | * Used to indicate whether we're inside the same link module as the USBLib. | |
285 | */ | |
286 | /** @def USBLIB_DECL | |
287 | * USBLIB export or import declaration. | |
288 | * @param type The return type of the function declaration. | |
289 | */ | |
290 | #ifdef IN_RING0 | |
291 | # define USBLIB_DECL(type) type VBOXCALL | |
292 | #elif defined(IN_USBLIB) | |
293 | # define USBLIB_DECL(type) DECLEXPORT(type) VBOXCALL | |
294 | #else | |
295 | # define USBLIB_DECL(type) DECLIMPORT(type) VBOXCALL | |
296 | #endif | |
297 | ||
298 | ||
299 | ||
300 | /** @def IN_VMM_STATIC | |
301 | * Used to indicate that the virtual machine monitor is built or used as a | |
302 | * static library. | |
303 | */ | |
304 | /** @def IN_VMM_R3 | |
305 | * Used to indicate whether we're inside the same link module as the ring 3 part of the | |
306 | * virtual machine monitor or not. | |
307 | */ | |
308 | /** @def VMMR3DECL | |
309 | * Ring-3 VMM export or import declaration. | |
310 | * @param type The return type of the function declaration. | |
311 | */ | |
312 | #ifdef IN_VMM_R3 | |
313 | # ifdef IN_VMM_STATIC | |
314 | # define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
315 | # else | |
316 | # define VMMR3DECL(type) DECLEXPORT(type) VBOXCALL | |
317 | # endif | |
318 | #elif defined(IN_RING3) | |
319 | # ifdef IN_VMM_STATIC | |
320 | # define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
321 | # else | |
322 | # define VMMR3DECL(type) DECLIMPORT(type) VBOXCALL | |
323 | # endif | |
324 | #else | |
325 | # define VMMR3DECL(type) DECL_INVALID(type) | |
326 | #endif | |
327 | ||
328 | /** @def IN_VMM_R0 | |
329 | * Used to indicate whether we're inside the same link module as the ring-0 part | |
330 | * of the virtual machine monitor or not. | |
331 | */ | |
332 | /** @def VMMR0DECL | |
333 | * Ring-0 VMM export or import declaration. | |
334 | * @param type The return type of the function declaration. | |
335 | */ | |
336 | #ifdef IN_VMM_R0 | |
337 | # define VMMR0DECL(type) DECLEXPORT(type) VBOXCALL | |
338 | #elif defined(IN_RING0) | |
339 | # define VMMR0DECL(type) DECLIMPORT(type) VBOXCALL | |
340 | #else | |
341 | # define VMMR0DECL(type) DECL_INVALID(type) | |
342 | #endif | |
343 | ||
344 | /** @def IN_VMM_RC | |
345 | * Used to indicate whether we're inside the same link module as the raw-mode | |
346 | * context part of the virtual machine monitor or not. | |
347 | */ | |
348 | /** @def VMMRCDECL | |
349 | * Raw-mode context VMM export or import declaration. | |
350 | * @param type The return type of the function declaration. | |
351 | */ | |
352 | #ifdef IN_VMM_RC | |
353 | # define VMMRCDECL(type) DECLEXPORT(type) VBOXCALL | |
354 | #elif defined(IN_RC) | |
355 | # define VMMRCDECL(type) DECLIMPORT(type) VBOXCALL | |
356 | #else | |
357 | # define VMMRCDECL(type) DECL_INVALID(type) | |
358 | #endif | |
359 | ||
360 | /** @def VMMRZDECL | |
361 | * Ring-0 and Raw-mode context VMM export or import declaration. | |
362 | * @param type The return type of the function declaration. | |
363 | */ | |
364 | #if defined(IN_VMM_R0) || defined(IN_VMM_RC) | |
365 | # define VMMRZDECL(type) DECLEXPORT(type) VBOXCALL | |
366 | #elif defined(IN_RING0) || defined(IN_RZ) | |
367 | # define VMMRZDECL(type) DECLIMPORT(type) VBOXCALL | |
368 | #else | |
369 | # define VMMRZDECL(type) DECL_INVALID(type) | |
370 | #endif | |
371 | ||
372 | /** @def VMMDECL | |
373 | * VMM export or import declaration. | |
374 | * @param type The return type of the function declaration. | |
375 | */ | |
376 | #ifdef IN_VMM_STATIC | |
377 | # define VMMDECL(type) DECLHIDDEN(type) VBOXCALL | |
378 | #elif defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) | |
379 | # define VMMDECL(type) DECLEXPORT(type) VBOXCALL | |
380 | #else | |
381 | # define VMMDECL(type) DECLIMPORT(type) VBOXCALL | |
382 | #endif | |
383 | ||
384 | /** @def VMM_INT_DECL | |
385 | * VMM internal function. | |
386 | * @param type The return type of the function declaration. | |
387 | */ | |
388 | #if defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) | |
389 | # define VMM_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
390 | #else | |
391 | # define VMM_INT_DECL(type) DECL_INVALID(type) | |
392 | #endif | |
393 | ||
394 | /** @def VMMR3_INT_DECL | |
395 | * VMM internal function, ring-3. | |
396 | * @param type The return type of the function declaration. | |
397 | */ | |
398 | #ifdef IN_VMM_R3 | |
399 | # define VMMR3_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
400 | #else | |
401 | # define VMMR3_INT_DECL(type) DECL_INVALID(type) | |
402 | #endif | |
403 | ||
404 | /** @def VMMR0_INT_DECL | |
405 | * VMM internal function, ring-0. | |
406 | * @param type The return type of the function declaration. | |
407 | */ | |
408 | #ifdef IN_VMM_R0 | |
409 | # define VMMR0_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
410 | #else | |
411 | # define VMMR0_INT_DECL(type) DECL_INVALID(type) | |
412 | #endif | |
413 | ||
414 | /** @def VMMRC_INT_DECL | |
415 | * VMM internal function, raw-mode context. | |
416 | * @param type The return type of the function declaration. | |
417 | */ | |
418 | #ifdef IN_VMM_RC | |
419 | # define VMMRC_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
420 | #else | |
421 | # define VMMRC_INT_DECL(type) DECL_INVALID(type) | |
422 | #endif | |
423 | ||
424 | /** @def VMMRZ_INT_DECL | |
425 | * VMM internal function, ring-0 + raw-mode context. | |
426 | * @param type The return type of the function declaration. | |
427 | */ | |
428 | #if defined(IN_VMM_RC) || defined(IN_VMM_R0) | |
429 | # define VMMRZ_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
430 | #else | |
431 | # define VMMRZ_INT_DECL(type) DECL_INVALID(type) | |
432 | #endif | |
433 | ||
434 | ||
435 | ||
436 | /** @def IN_VBOXDDU | |
437 | * Used to indicate whether we're inside the VBoxDDU shared object. | |
438 | */ | |
439 | /** @def VBOXDDU_DECL(type) | |
440 | * VBoxDDU export or import (ring-3). | |
441 | * @param type The return type of the function declaration. | |
442 | */ | |
443 | #ifdef IN_VBOXDDU | |
444 | # ifdef IN_VBOXDDU_STATIC | |
445 | # define VBOXDDU_DECL(type) type | |
446 | # else | |
447 | # define VBOXDDU_DECL(type) DECLEXPORT(type) VBOXCALL | |
448 | # endif | |
449 | #else | |
450 | # define VBOXDDU_DECL(type) DECLIMPORT(type) VBOXCALL | |
451 | #endif | |
452 | ||
453 | /** @} */ | |
454 | ||
455 | ||
456 | /** @defgroup grp_devdrv Device Emulations and Drivers | |
457 | * @{ */ | |
458 | /** @} */ | |
459 | ||
460 | #endif | |
461 |