]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - ubuntu/vbox/vboxguest/include/VBox/cdefs.h
UBUNTU: Ubuntu-4.15.0-96.97
[mirror_ubuntu-bionic-kernel.git] / ubuntu / vbox / vboxguest / include / VBox / cdefs.h
CommitLineData
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