/** @file | |
* VirtualBox - Common C and C++ definition. | |
*/ | |
/* | |
* Copyright (C) 2006-2015 Oracle Corporation | |
* | |
* This file is part of VirtualBox Open Source Edition (OSE), as | |
* available from http://www.virtualbox.org. This file is free software; | |
* you can redistribute it and/or modify it under the terms of the GNU | |
* General Public License (GPL) as published by the Free Software | |
* Foundation, in version 2 as it comes in the "COPYING" file of the | |
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the | |
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. | |
* | |
* The contents of this file may alternatively be used under the terms | |
* of the Common Development and Distribution License Version 1.0 | |
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the | |
* VirtualBox OSE distribution, in which case the provisions of the | |
* CDDL are applicable instead of those of the GPL. | |
* | |
* You may elect to license modified versions of this file under the | |
* terms and conditions of either the GPL or the CDDL or both. | |
*/ | |
#ifndef ___VBox_cdefs_h | |
#define ___VBox_cdefs_h | |
#include <iprt/cdefs.h> | |
/** @defgroup VBox Common Defintions and Macros | |
* @{ | |
*/ | |
/** @def VBOX_WITH_STATISTICS | |
* When defined all statistics will be included in the build. | |
* This is enabled by default in all debug builds. | |
*/ | |
#ifndef VBOX_WITH_STATISTICS | |
# ifdef DEBUG | |
# define VBOX_WITH_STATISTICS | |
# endif | |
#endif | |
/** @def VBOX_STRICT | |
* Alias for RT_STRICT. | |
*/ | |
#ifdef RT_STRICT | |
# ifndef VBOX_STRICT | |
# define VBOX_STRICT | |
# endif | |
#endif | |
/* | |
* Shut up DOXYGEN warnings and guide it properly thru the code. | |
*/ | |
#ifdef DOXYGEN_RUNNING | |
#define VBOX_WITH_STATISTICS | |
#define VBOX_STRICT | |
#define IN_DBG | |
#define IN_DIS | |
#define IN_INTNET_R0 | |
#define IN_INTNET_R3 | |
#define IN_PCIRAW_R0 | |
#define IN_PCIRAW_R3 | |
#define IN_REM_R3 | |
#define IN_SUP_R0 | |
#define IN_SUP_R3 | |
#define IN_SUP_RC | |
#define IN_SUP_STATIC | |
#define IN_USBLIB | |
#define IN_VBOXDDU | |
#define IN_VMM_RC | |
#define IN_VMM_R0 | |
#define IN_VMM_R3 | |
#define IN_VMM_STATIC | |
#endif | |
/** @def VBOXCALL | |
* The standard calling convention for VBOX interfaces. | |
*/ | |
#define VBOXCALL RTCALL | |
/** @def IN_DIS | |
* Used to indicate whether we're inside the same link module as the | |
* disassembler. | |
*/ | |
/** @def DISDECL(type) | |
* Disassembly export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#if defined(IN_DIS) | |
# ifdef IN_DIS_STATIC | |
# define DISDECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define DISDECL(type) DECLEXPORT(type) VBOXCALL | |
# endif | |
#else | |
# define DISDECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_DBG | |
* Used to indicate whether we're inside the same link module as the debugger | |
* console, gui, and related things (ring-3). | |
*/ | |
/** @def DBGDECL(type) | |
* Debugger module export or import declaration. | |
* Functions declared using this exists only in R3 since the | |
* debugger modules is R3 only. | |
* @param type The return type of the function declaration. | |
*/ | |
#if defined(IN_DBG_R3) || defined(IN_DBG) | |
# define DBGDECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define DBGDECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_INTNET_R3 | |
* Used to indicate whether we're inside the same link module as the Ring-3 | |
* Internal Networking Service. | |
*/ | |
/** @def INTNETR3DECL(type) | |
* Internal Networking Service export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_INTNET_R3 | |
# define INTNETR3DECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define INTNETR3DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_INTNET_R0 | |
* Used to indicate whether we're inside the same link module as the R0 | |
* Internal Network Service. | |
*/ | |
/** @def INTNETR0DECL(type) | |
* Internal Networking Service export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_INTNET_R0 | |
# define INTNETR0DECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define INTNETR0DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_PCIRAW_R3 | |
* Used to indicate whether we're inside the same link module as the Ring-3 | |
* PCI passthrough support. | |
*/ | |
/** @def PCIRAWR3DECL(type) | |
* PCI passthrough export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_PCIRAW_R3 | |
# define PCIRAWR3DECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define PCIRAWR3DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_PCIRAW_R0 | |
* Used to indicate whether we're inside the same link module as the R0 | |
* PCI passthrough support. | |
*/ | |
/** @def PCIRAWR0DECL(type) | |
* PCI passthroug export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_PCIRAW_R0 | |
# define PCIRAWR0DECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define PCIRAWR0DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_REM_R3 | |
* Used to indicate whether we're inside the same link module as | |
* the HC Ring-3 Recompiled Execution Manager. | |
*/ | |
/** @def REMR3DECL(type) | |
* Recompiled Execution Manager HC Ring-3 export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_REM_R3 | |
# define REMR3DECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define REMR3DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_SUP_R3 | |
* Used to indicate whether we're inside the same link module as the Ring-3 | |
* Support Library or not. | |
*/ | |
/** @def SUPR3DECL(type) | |
* Support library export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_SUP_R3 | |
# ifdef IN_SUP_STATIC | |
# define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define SUPR3DECL(type) DECLEXPORT(type) VBOXCALL | |
# endif | |
#else | |
# ifdef IN_SUP_STATIC | |
# define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define SUPR3DECL(type) DECLIMPORT(type) VBOXCALL | |
# endif | |
#endif | |
/** @def IN_SUP_R0 | |
* Used to indicate whether we're inside the same link module as the Ring-0 | |
* Support Library or not. | |
*/ | |
/** @def IN_SUP_STATIC | |
* Used to indicate that the Support Library is built or used as a static | |
* library. | |
*/ | |
/** @def SUPR0DECL(type) | |
* Support library export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_SUP_R0 | |
# ifdef IN_SUP_STATIC | |
# define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define SUPR0DECL(type) DECLEXPORT(type) VBOXCALL | |
# endif | |
#else | |
# ifdef IN_SUP_STATIC | |
# define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define SUPR0DECL(type) DECLIMPORT(type) VBOXCALL | |
# endif | |
#endif | |
/** @def IN_SUP_RC | |
* Used to indicate whether we're inside the same link module as the RC Support | |
* Library or not. | |
*/ | |
/** @def SUPRCDECL(type) | |
* Support library export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_SUP_RC | |
# define SUPRCDECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define SUPRCDECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_SUP_R0 | |
* Used to indicate whether we're inside the same link module as the Ring-0 | |
* Support Library or not. | |
*/ | |
/** @def SUPR0DECL(type) | |
* Support library export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#if defined(IN_SUP_R0) || defined(IN_SUP_R3) || defined(IN_SUP_RC) | |
# define SUPDECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define SUPDECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_USBLIB | |
* Used to indicate whether we're inside the same link module as the USBLib. | |
*/ | |
/** @def USBLIB_DECL | |
* USBLIB export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_RING0 | |
# define USBLIB_DECL(type) type VBOXCALL | |
#elif defined(IN_USBLIB) | |
# define USBLIB_DECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define USBLIB_DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def IN_VMM_STATIC | |
* Used to indicate that the virtual machine monitor is built or used as a | |
* static library. | |
*/ | |
/** @def IN_VMM_R3 | |
* Used to indicate whether we're inside the same link module as the ring 3 part of the | |
* virtual machine monitor or not. | |
*/ | |
/** @def VMMR3DECL | |
* Ring-3 VMM export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_R3 | |
# ifdef IN_VMM_STATIC | |
# define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define VMMR3DECL(type) DECLEXPORT(type) VBOXCALL | |
# endif | |
#elif defined(IN_RING3) | |
# ifdef IN_VMM_STATIC | |
# define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL | |
# else | |
# define VMMR3DECL(type) DECLIMPORT(type) VBOXCALL | |
# endif | |
#else | |
# define VMMR3DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def IN_VMM_R0 | |
* Used to indicate whether we're inside the same link module as the ring-0 part | |
* of the virtual machine monitor or not. | |
*/ | |
/** @def VMMR0DECL | |
* Ring-0 VMM export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_R0 | |
# define VMMR0DECL(type) DECLEXPORT(type) VBOXCALL | |
#elif defined(IN_RING0) | |
# define VMMR0DECL(type) DECLIMPORT(type) VBOXCALL | |
#else | |
# define VMMR0DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def IN_VMM_RC | |
* Used to indicate whether we're inside the same link module as the raw-mode | |
* context part of the virtual machine monitor or not. | |
*/ | |
/** @def VMMRCDECL | |
* Raw-mode context VMM export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_RC | |
# define VMMRCDECL(type) DECLEXPORT(type) VBOXCALL | |
#elif defined(IN_RC) | |
# define VMMRCDECL(type) DECLIMPORT(type) VBOXCALL | |
#else | |
# define VMMRCDECL(type) DECL_INVALID(type) | |
#endif | |
/** @def VMMRZDECL | |
* Ring-0 and Raw-mode context VMM export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#if defined(IN_VMM_R0) || defined(IN_VMM_RC) | |
# define VMMRZDECL(type) DECLEXPORT(type) VBOXCALL | |
#elif defined(IN_RING0) || defined(IN_RZ) | |
# define VMMRZDECL(type) DECLIMPORT(type) VBOXCALL | |
#else | |
# define VMMRZDECL(type) DECL_INVALID(type) | |
#endif | |
/** @def VMMDECL | |
* VMM export or import declaration. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_STATIC | |
# define VMMDECL(type) DECLHIDDEN(type) VBOXCALL | |
#elif defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) | |
# define VMMDECL(type) DECLEXPORT(type) VBOXCALL | |
#else | |
# define VMMDECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @def VMM_INT_DECL | |
* VMM internal function. | |
* @param type The return type of the function declaration. | |
*/ | |
#if defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) | |
# define VMM_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
#else | |
# define VMM_INT_DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def VMMR3_INT_DECL | |
* VMM internal function, ring-3. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_R3 | |
# define VMMR3_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
#else | |
# define VMMR3_INT_DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def VMMR0_INT_DECL | |
* VMM internal function, ring-0. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_R0 | |
# define VMMR0_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
#else | |
# define VMMR0_INT_DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def VMMRC_INT_DECL | |
* VMM internal function, raw-mode context. | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VMM_RC | |
# define VMMRC_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
#else | |
# define VMMRC_INT_DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def VMMRZ_INT_DECL | |
* VMM internal function, ring-0 + raw-mode context. | |
* @param type The return type of the function declaration. | |
*/ | |
#if defined(IN_VMM_RC) || defined(IN_VMM_R0) | |
# define VMMRZ_INT_DECL(type) DECLHIDDEN(type) VBOXCALL | |
#else | |
# define VMMRZ_INT_DECL(type) DECL_INVALID(type) | |
#endif | |
/** @def IN_VBOXDDU | |
* Used to indicate whether we're inside the VBoxDDU shared object. | |
*/ | |
/** @def VBOXDDU_DECL(type) | |
* VBoxDDU export or import (ring-3). | |
* @param type The return type of the function declaration. | |
*/ | |
#ifdef IN_VBOXDDU | |
# ifdef IN_VBOXDDU_STATIC | |
# define VBOXDDU_DECL(type) type | |
# else | |
# define VBOXDDU_DECL(type) DECLEXPORT(type) VBOXCALL | |
# endif | |
#else | |
# define VBOXDDU_DECL(type) DECLIMPORT(type) VBOXCALL | |
#endif | |
/** @} */ | |
/** @defgroup grp_devdrv Device Emulations and Drivers | |
* @{ */ | |
/** @} */ | |
#endif | |