summaryrefslogtreecommitdiff
path: root/src/VBox/VMM/include/VMMInternal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/VMM/include/VMMInternal.h')
-rw-r--r--src/VBox/VMM/include/VMMInternal.h52
1 files changed, 41 insertions, 11 deletions
diff --git a/src/VBox/VMM/include/VMMInternal.h b/src/VBox/VMM/include/VMMInternal.h
index 38b45a72..fa3f253d 100644
--- a/src/VBox/VMM/include/VMMInternal.h
+++ b/src/VBox/VMM/include/VMMInternal.h
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2006-2007 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -21,10 +21,10 @@
#include <VBox/cdefs.h>
#include <VBox/sup.h>
#include <VBox/vmm/stam.h>
+#include <VBox/vmm/vmm.h>
#include <VBox/log.h>
#include <iprt/critsect.h>
-
#if !defined(IN_VMM_R3) && !defined(IN_VMM_R0) && !defined(IN_VMM_RC)
# error "Not in VMM! This is an internal header!"
#endif
@@ -47,7 +47,7 @@
* so you have to sign up here by adding your defined(DEBUG_<userid>) to the
* #if, or by adding VBOX_WITH_R0_LOGGING to your LocalConfig.kmk.
*/
-#if defined(DEBUG_sandervl) || defined(DEBUG_frank) || defined(DOXYGEN_RUNNING)
+#if defined(DEBUG_sandervl) || defined(DEBUG_frank) || defined(DEBUG_ramshankar) || defined(DOXYGEN_RUNNING)
# define VBOX_WITH_R0_LOGGING
#endif
@@ -216,19 +216,18 @@ typedef struct VMM
RTR0PTR pvCoreCodeR0;
/** Pointer to core code guest context mapping. */
RTRCPTR pvCoreCodeRC;
- RTRCPTR pRCPadding0; /**< Alignment padding */
+ RTRCPTR pRCPadding0; /**< Alignment padding. */
#ifdef VBOX_WITH_NMI
/** The guest context address of the APIC (host) mapping. */
RTRCPTR GCPtrApicBase;
- RTRCPTR pRCPadding1; /**< Alignment padding */
+ RTRCPTR pRCPadding1; /**< Alignment padding. */
#endif
/** The current switcher.
* This will be set before the VMM is fully initialized. */
VMMSWITCHER enmSwitcher;
- /** Flag to disable the switcher permanently (VMX) (boolean) */
- bool fSwitcherDisabled;
/** Array of offsets to the different switchers within the core code. */
- RTUINT aoffSwitchers[VMMSWITCHER_MAX];
+ uint32_t aoffSwitchers[VMMSWITCHER_MAX];
+ uint32_t u32Padding2; /**< Alignment padding. */
/** Resume Guest Execution. See CPUMGCResumeGuest(). */
RTRCPTR pfnCPUMRCResumeGuest;
@@ -418,6 +417,16 @@ typedef struct VMMCPU
* This is NULL if logging is disabled. */
R0PTRTYPE(PVMMR0LOGGER) pR0LoggerR0;
+ /** @name Thread-context hooks.
+ * @{*/
+ R0PTRTYPE(RTTHREADCTX) hR0ThreadCtx;
+#if HC_ARCH_BITS == 32
+ uint32_t u32Padding;
+#else
+ uint64_t u64Padding;
+#endif
+ /** @} */
+
/** @name Rendezvous
* @{ */
/** Whether the EMT is executing a rendezvous right now. For detecting
@@ -431,7 +440,7 @@ typedef struct VMMCPU
SUPDRVTRACERUSRCTX TracerCtx;
/** @} */
- /** Alignment padding, making sure u64CallRing3Arg is nicly aligned. */
+ /** Alignment padding, making sure u64CallRing3Arg is nicely aligned. */
uint32_t au32Padding1[3];
/** @name Call Ring-3
@@ -445,12 +454,15 @@ typedef struct VMMCPU
int32_t rcCallRing3;
/** The argument to the operation. */
uint64_t u64CallRing3Arg;
+ /** The Ring-0 notification callback. */
+ R0PTRTYPE(PFNVMMR0CALLRING3NOTIFICATION) pfnCallRing3CallbackR0;
+ /** The Ring-0 notification callback user argument. */
+ R0PTRTYPE(void *) pvCallRing3CallbackUserR0;
/** The Ring-0 jmp buffer.
* @remarks The size of this type isn't stable in assembly, so don't put
* anything that needs to be accessed from assembly after it. */
VMMR0JMPBUF CallRing3JmpBufR0;
/** @} */
-
} VMMCPU;
AssertCompileMemberAlignment(VMMCPU, TracerCtx, 8);
/** Pointer to VMMCPU. */
@@ -506,17 +518,35 @@ typedef enum VMMGCOPERATION
/** Testcase for checking interrupt masking.. */
VMMGC_DO_TESTCASE_INTERRUPT_MASKING,
/** Switching testing and profiling stub. */
- VMMGC_DO_TESTCASE_HWACCM_NOP,
+ VMMGC_DO_TESTCASE_HM_NOP,
/** The usual 32-bit hack. */
VMMGC_DO_32_BIT_HACK = 0x7fffffff
} VMMGCOPERATION;
+
+/**
+ * MSR test result entry.
+ */
+typedef struct VMMTESTMSRENTRY
+{
+ /** The MSR number, including padding.
+ * Set to UINT64_MAX if invalid MSR. */
+ uint64_t uMsr;
+ /** The register value. */
+ uint64_t uValue;
+} VMMTESTMSRENTRY;
+/** Pointer to an MSR test result entry. */
+typedef VMMTESTMSRENTRY *PVMMTESTMSRENTRY;
+
+
+
RT_C_DECLS_BEGIN
int vmmInitFormatTypes(void);
void vmmTermFormatTypes(void);
+uint32_t vmmGetBuildType(void);
#ifdef IN_RING3
int vmmR3SwitcherInit(PVM pVM);