]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - ubuntu/vbox/include/VBox/cdefs.h
fe3476090c22912a8d717f79f124c3633ae08573
[mirror_ubuntu-artful-kernel.git] / ubuntu / vbox / include / VBox / cdefs.h
1 /** @file
2 * VirtualBox - Common C and C++ definition.
3 */
4
5 /*
6 * Copyright (C) 2006-2016 Oracle Corporation
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 # define DISDECL(type) DECLEXPORT(type) VBOXCALL
101 #else
102 # define DISDECL(type) DECLIMPORT(type) VBOXCALL
103 #endif
104
105
106
107 /** @def IN_DBG
108 * Used to indicate whether we're inside the same link module as the debugger
109 * console, gui, and related things (ring-3).
110 */
111 /** @def DBGDECL(type)
112 * Debugger module export or import declaration.
113 * Functions declared using this exists only in R3 since the
114 * debugger modules is R3 only.
115 * @param type The return type of the function declaration.
116 */
117 #if defined(IN_DBG_R3) || defined(IN_DBG)
118 # define DBGDECL(type) DECLEXPORT(type) VBOXCALL
119 #else
120 # define DBGDECL(type) DECLIMPORT(type) VBOXCALL
121 #endif
122
123
124
125 /** @def IN_INTNET_R3
126 * Used to indicate whether we're inside the same link module as the Ring-3
127 * Internal Networking Service.
128 */
129 /** @def INTNETR3DECL(type)
130 * Internal Networking Service export or import declaration.
131 * @param type The return type of the function declaration.
132 */
133 #ifdef IN_INTNET_R3
134 # define INTNETR3DECL(type) DECLEXPORT(type) VBOXCALL
135 #else
136 # define INTNETR3DECL(type) DECLIMPORT(type) VBOXCALL
137 #endif
138
139 /** @def IN_INTNET_R0
140 * Used to indicate whether we're inside the same link module as the R0
141 * Internal Network Service.
142 */
143 /** @def INTNETR0DECL(type)
144 * Internal Networking Service export or import declaration.
145 * @param type The return type of the function declaration.
146 */
147 #ifdef IN_INTNET_R0
148 # define INTNETR0DECL(type) DECLEXPORT(type) VBOXCALL
149 #else
150 # define INTNETR0DECL(type) DECLIMPORT(type) VBOXCALL
151 #endif
152
153
154
155 /** @def IN_PCIRAW_R3
156 * Used to indicate whether we're inside the same link module as the Ring-3
157 * PCI passthrough support.
158 */
159 /** @def PCIRAWR3DECL(type)
160 * PCI passthrough export or import declaration.
161 * @param type The return type of the function declaration.
162 */
163 #ifdef IN_PCIRAW_R3
164 # define PCIRAWR3DECL(type) DECLEXPORT(type) VBOXCALL
165 #else
166 # define PCIRAWR3DECL(type) DECLIMPORT(type) VBOXCALL
167 #endif
168
169 /** @def IN_PCIRAW_R0
170 * Used to indicate whether we're inside the same link module as the R0
171 * PCI passthrough support.
172 */
173 /** @def PCIRAWR0DECL(type)
174 * PCI passthroug export or import declaration.
175 * @param type The return type of the function declaration.
176 */
177 #ifdef IN_PCIRAW_R0
178 # define PCIRAWR0DECL(type) DECLEXPORT(type) VBOXCALL
179 #else
180 # define PCIRAWR0DECL(type) DECLIMPORT(type) VBOXCALL
181 #endif
182
183
184
185 /** @def IN_REM_R3
186 * Used to indicate whether we're inside the same link module as
187 * the HC Ring-3 Recompiled Execution Manager.
188 */
189 /** @def REMR3DECL(type)
190 * Recompiled Execution Manager HC Ring-3 export or import declaration.
191 * @param type The return type of the function declaration.
192 */
193 #ifdef IN_REM_R3
194 # define REMR3DECL(type) DECLEXPORT(type) VBOXCALL
195 #else
196 # define REMR3DECL(type) DECLIMPORT(type) VBOXCALL
197 #endif
198
199
200
201 /** @def IN_SUP_R3
202 * Used to indicate whether we're inside the same link module as the Ring-3
203 * Support Library or not.
204 */
205 /** @def SUPR3DECL(type)
206 * Support library export or import declaration.
207 * @param type The return type of the function declaration.
208 */
209 #ifdef IN_SUP_R3
210 # ifdef IN_SUP_STATIC
211 # define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL
212 # else
213 # define SUPR3DECL(type) DECLEXPORT(type) VBOXCALL
214 # endif
215 #else
216 # ifdef IN_SUP_STATIC
217 # define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL
218 # else
219 # define SUPR3DECL(type) DECLIMPORT(type) VBOXCALL
220 # endif
221 #endif
222
223 /** @def IN_SUP_R0
224 * Used to indicate whether we're inside the same link module as the Ring-0
225 * Support Library or not.
226 */
227 /** @def IN_SUP_STATIC
228 * Used to indicate that the Support Library is built or used as a static
229 * library.
230 */
231 /** @def SUPR0DECL(type)
232 * Support library export or import declaration.
233 * @param type The return type of the function declaration.
234 */
235 #ifdef IN_SUP_R0
236 # ifdef IN_SUP_STATIC
237 # define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL
238 # else
239 # define SUPR0DECL(type) DECLEXPORT(type) VBOXCALL
240 # endif
241 #else
242 # ifdef IN_SUP_STATIC
243 # define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL
244 # else
245 # define SUPR0DECL(type) DECLIMPORT(type) VBOXCALL
246 # endif
247 #endif
248
249 /** @def IN_SUP_RC
250 * Used to indicate whether we're inside the same link module as the RC Support
251 * Library or not.
252 */
253 /** @def SUPRCDECL(type)
254 * Support library export or import declaration.
255 * @param type The return type of the function declaration.
256 */
257 #ifdef IN_SUP_RC
258 # define SUPRCDECL(type) DECLEXPORT(type) VBOXCALL
259 #else
260 # define SUPRCDECL(type) DECLIMPORT(type) VBOXCALL
261 #endif
262
263 /** @def IN_SUP_R0
264 * Used to indicate whether we're inside the same link module as the Ring-0
265 * Support Library or not.
266 */
267 /** @def SUPR0DECL(type)
268 * Support library export or import declaration.
269 * @param type The return type of the function declaration.
270 */
271 #if defined(IN_SUP_R0) || defined(IN_SUP_R3) || defined(IN_SUP_RC)
272 # define SUPDECL(type) DECLEXPORT(type) VBOXCALL
273 #else
274 # define SUPDECL(type) DECLIMPORT(type) VBOXCALL
275 #endif
276
277
278
279 /** @def IN_USBLIB
280 * Used to indicate whether we're inside the same link module as the USBLib.
281 */
282 /** @def USBLIB_DECL
283 * USBLIB export or import declaration.
284 * @param type The return type of the function declaration.
285 */
286 #ifdef IN_RING0
287 # define USBLIB_DECL(type) type VBOXCALL
288 #elif defined(IN_USBLIB)
289 # define USBLIB_DECL(type) DECLEXPORT(type) VBOXCALL
290 #else
291 # define USBLIB_DECL(type) DECLIMPORT(type) VBOXCALL
292 #endif
293
294
295
296 /** @def IN_VMM_STATIC
297 * Used to indicate that the virtual machine monitor is built or used as a
298 * static library.
299 */
300 /** @def IN_VMM_R3
301 * Used to indicate whether we're inside the same link module as the ring 3 part of the
302 * virtual machine monitor or not.
303 */
304 /** @def VMMR3DECL
305 * Ring-3 VMM export or import declaration.
306 * @param type The return type of the function declaration.
307 */
308 #ifdef IN_VMM_R3
309 # ifdef IN_VMM_STATIC
310 # define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL
311 # else
312 # define VMMR3DECL(type) DECLEXPORT(type) VBOXCALL
313 # endif
314 #elif defined(IN_RING3)
315 # ifdef IN_VMM_STATIC
316 # define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL
317 # else
318 # define VMMR3DECL(type) DECLIMPORT(type) VBOXCALL
319 # endif
320 #else
321 # define VMMR3DECL(type) DECL_INVALID(type)
322 #endif
323
324 /** @def IN_VMM_R0
325 * Used to indicate whether we're inside the same link module as the ring-0 part
326 * of the virtual machine monitor or not.
327 */
328 /** @def VMMR0DECL
329 * Ring-0 VMM export or import declaration.
330 * @param type The return type of the function declaration.
331 */
332 #ifdef IN_VMM_R0
333 # define VMMR0DECL(type) DECLEXPORT(type) VBOXCALL
334 #elif defined(IN_RING0)
335 # define VMMR0DECL(type) DECLIMPORT(type) VBOXCALL
336 #else
337 # define VMMR0DECL(type) DECL_INVALID(type)
338 #endif
339
340 /** @def IN_VMM_RC
341 * Used to indicate whether we're inside the same link module as the raw-mode
342 * context part of the virtual machine monitor or not.
343 */
344 /** @def VMMRCDECL
345 * Raw-mode context VMM export or import declaration.
346 * @param type The return type of the function declaration.
347 */
348 #ifdef IN_VMM_RC
349 # define VMMRCDECL(type) DECLEXPORT(type) VBOXCALL
350 #elif defined(IN_RC)
351 # define VMMRCDECL(type) DECLIMPORT(type) VBOXCALL
352 #else
353 # define VMMRCDECL(type) DECL_INVALID(type)
354 #endif
355
356 /** @def VMMRZDECL
357 * Ring-0 and Raw-mode context VMM export or import declaration.
358 * @param type The return type of the function declaration.
359 */
360 #if defined(IN_VMM_R0) || defined(IN_VMM_RC)
361 # define VMMRZDECL(type) DECLEXPORT(type) VBOXCALL
362 #elif defined(IN_RING0) || defined(IN_RZ)
363 # define VMMRZDECL(type) DECLIMPORT(type) VBOXCALL
364 #else
365 # define VMMRZDECL(type) DECL_INVALID(type)
366 #endif
367
368 /** @def VMMDECL
369 * VMM export or import declaration.
370 * @param type The return type of the function declaration.
371 */
372 #ifdef IN_VMM_STATIC
373 # define VMMDECL(type) DECLHIDDEN(type) VBOXCALL
374 #elif defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC)
375 # define VMMDECL(type) DECLEXPORT(type) VBOXCALL
376 #else
377 # define VMMDECL(type) DECLIMPORT(type) VBOXCALL
378 #endif
379
380 /** @def VMM_INT_DECL
381 * VMM internal function.
382 * @param type The return type of the function declaration.
383 */
384 #if defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC)
385 # define VMM_INT_DECL(type) DECLHIDDEN(type) VBOXCALL
386 #else
387 # define VMM_INT_DECL(type) DECL_INVALID(type)
388 #endif
389
390 /** @def VMMR3_INT_DECL
391 * VMM internal function, ring-3.
392 * @param type The return type of the function declaration.
393 */
394 #ifdef IN_VMM_R3
395 # define VMMR3_INT_DECL(type) DECLHIDDEN(type) VBOXCALL
396 #else
397 # define VMMR3_INT_DECL(type) DECL_INVALID(type)
398 #endif
399
400 /** @def VMMR0_INT_DECL
401 * VMM internal function, ring-0.
402 * @param type The return type of the function declaration.
403 */
404 #ifdef IN_VMM_R0
405 # define VMMR0_INT_DECL(type) DECLHIDDEN(type) VBOXCALL
406 #else
407 # define VMMR0_INT_DECL(type) DECL_INVALID(type)
408 #endif
409
410 /** @def VMMRC_INT_DECL
411 * VMM internal function, raw-mode context.
412 * @param type The return type of the function declaration.
413 */
414 #ifdef IN_VMM_RC
415 # define VMMRC_INT_DECL(type) DECLHIDDEN(type) VBOXCALL
416 #else
417 # define VMMRC_INT_DECL(type) DECL_INVALID(type)
418 #endif
419
420 /** @def VMMRZ_INT_DECL
421 * VMM internal function, ring-0 + raw-mode context.
422 * @param type The return type of the function declaration.
423 */
424 #if defined(IN_VMM_RC) || defined(IN_VMM_R0)
425 # define VMMRZ_INT_DECL(type) DECLHIDDEN(type) VBOXCALL
426 #else
427 # define VMMRZ_INT_DECL(type) DECL_INVALID(type)
428 #endif
429
430
431
432 /** @def IN_VBOXDDU
433 * Used to indicate whether we're inside the VBoxDDU shared object.
434 */
435 /** @def VBOXDDU_DECL(type)
436 * VBoxDDU export or import (ring-3).
437 * @param type The return type of the function declaration.
438 */
439 #ifdef IN_VBOXDDU
440 # ifdef IN_VBOXDDU_STATIC
441 # define VBOXDDU_DECL(type) type
442 # else
443 # define VBOXDDU_DECL(type) DECLEXPORT(type) VBOXCALL
444 # endif
445 #else
446 # define VBOXDDU_DECL(type) DECLIMPORT(type) VBOXCALL
447 #endif
448
449 /** @} */
450
451
452 /** @defgroup grp_devdrv Device Emulations and Drivers
453 * @{ */
454 /** @} */
455
456 #endif
457