VMMInternal.h revision 66cfc56709c6fc10add98af9313cccafab14b40d
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * VMM - Internal header file.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * available from http://www.virtualbox.org. This file is free software;
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * General Public License (GPL) as published by the Free Software
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * additional information or have any questions.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync#if !defined(IN_VMM_R3) && !defined(IN_VMM_R0) && !defined(IN_VMM_RC)
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** @defgroup grp_vmm_int Internals
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @ingroup grp_vmm
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @internal
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** @def VBOX_WITH_RC_RELEASE_LOGGING
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Enables RC release logging. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** @def VBOX_WITH_R0_LOGGING
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Enables Ring-0 logging (non-release).
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Ring-0 logging isn't 100% safe yet (thread id reuse / process exit cleanup),
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * so you have to sign up here by adding your defined(DEBUG_<userid>) to the
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * #if, or by adding VBOX_WITH_R0_LOGGING to your LocalConfig.kmk.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * You might also wish to enable the AssertMsg1/2 overrides in VMMR0.cpp when
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * enabling this.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync#if defined(DEBUG_sandervl) || defined(DEBUG_frank) || defined(DOXYGEN_RUNNING)
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** @def VBOX_STRICT_VMM_STACK
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Enables VMM stack guard pages to catch stack over- and underruns. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync#if defined(VBOX_STRICT) || defined(DOXYGEN_RUNNING)
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Converts a VMM pointer into a VM pointer.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @returns Pointer to the VM structure the VMM is part of.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @param pVMM Pointer to VMM instance data.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync#define VMM2VM(pVMM) ( (PVM)((char*)pVMM - pVMM->offVM) )
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Switcher function, HC to RC.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @param pVM The VM handle.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @returns Return code indicating the action to take.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** Pointer to switcher function. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Switcher function, RC to HC.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * @param rc VBox status code.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** Pointer to switcher function. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * The ring-0 logger instance wrapper.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * We need to be able to find the VM handle from the logger instance, so we wrap
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * it in this structure.
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsynctypedef struct VMMR0LOGGER
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync /** Pointer to the VM handle. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync /** Size of the allocated logger instance (Logger). */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync /** Flag indicating whether we've create the logger Ring-0 instance yet. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync /** Flag indicating whether we've disabled flushing (world switch) or not. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync /** Flag indicating whether we've registered the instance already. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync /** The ring-0 logger instance. This extends beyond the size. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync/** Pointer to a ring-0 logger instance wrapper. */
a7d389fbff436fb217a78d48fab17adcaf43dc54vboxsync * Jump buffer for the setjmp/longjmp like constructs used to
typedef struct VMMR0JMPBUF
# ifdef RT_OS_WINDOWS
bool fInRing3Call;
} VMMR0JMPBUF;
typedef struct VMM
#ifdef VBOX_WITH_NMI
bool fSwitcherDisabled;
/** Size of the allocated logger instance (pRCLoggerRC/pRCLoggerR3). */
/** Size of the allocated release logger instance (pRCRelLoggerRC/pRCRelLoggerR3).
} VMM;
typedef struct VMMCPU
#ifdef LOG_ENABLED
} VMMCPU;
typedef enum VMMGCOPERATION
#ifdef IN_RING3
#ifdef IN_RING0
#ifdef IN_RC