hm.h revision 3b1bcdfd121ea207827a9bbc4a29199676882cea
c869993e79c1eafbec61a56bf6cea848fe754c71xy/** @file
c869993e79c1eafbec61a56bf6cea848fe754c71xy * HM - Intel/AMD VM Hardware Assisted Virtualization Manager (VMM)
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy/*
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Copyright (C) 2006-2013 Oracle Corporation
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * This file is part of VirtualBox Open Source Edition (OSE), as
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * available from http://www.virtualbox.org. This file is free software;
c869993e79c1eafbec61a56bf6cea848fe754c71xy * you can redistribute it and/or modify it under the terms of the GNU
c869993e79c1eafbec61a56bf6cea848fe754c71xy * General Public License (GPL) as published by the Free Software
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Foundation, in version 2 as it comes in the "COPYING" file of the
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * The contents of this file may alternatively be used under the terms
c869993e79c1eafbec61a56bf6cea848fe754c71xy * of the Common Development and Distribution License Version 1.0
c869993e79c1eafbec61a56bf6cea848fe754c71xy * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
c869993e79c1eafbec61a56bf6cea848fe754c71xy * VirtualBox OSE distribution, in which case the provisions of the
c869993e79c1eafbec61a56bf6cea848fe754c71xy * CDDL are applicable instead of those of the GPL.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
193974072f41a843678abf5f61979c748687e66bSherry Moore * You may elect to license modified versions of this file under the
7e5262732e5b384b6aaeaa77959a6c9dad5d1161Robert Mustacchi * terms and conditions of either the GPL or the CDDL or both.
6d1cdc09693601c358cdcd1bbd6a462920ac89adGuoqing Zhu */
6d1cdc09693601c358cdcd1bbd6a462920ac89adGuoqing Zhu
6d1cdc09693601c358cdcd1bbd6a462920ac89adGuoqing Zhu#ifndef ___VBox_vmm_hm_h
6d1cdc09693601c358cdcd1bbd6a462920ac89adGuoqing Zhu#define ___VBox_vmm_hm_h
43ae55058ad99c869a9ae39d039490e8a3680520Dan McDonald
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi#include <VBox/vmm/pgm.h>
c869993e79c1eafbec61a56bf6cea848fe754c71xy#include <VBox/vmm/cpum.h>
c869993e79c1eafbec61a56bf6cea848fe754c71xy#include <VBox/vmm/vmm.h>
c869993e79c1eafbec61a56bf6cea848fe754c71xy#include <iprt/mp.h>
c869993e79c1eafbec61a56bf6cea848fe754c71xy
193974072f41a843678abf5f61979c748687e66bSherry Moore
6ed0a5cff079e25f4aa15cef67c6dd48ee60b018Tycho Nightingale/** @defgroup grp_hm The VM Hardware Manager API
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @{
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xyRT_C_DECLS_BEGIN
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy/**
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Checks whether HM (VT-x/AMD-V) is being used by this VM.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @retval @c true if used.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @retval @c false if software virtualization (raw-mode) is used.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
b8d0a37778010a5166d34bb0d192cf6b1b2f7becchenlu chen - Sun Microsystems - Beijing China * @param a_pVM The cross context VM structure.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @sa HMIsEnabledNotMacro, HMR3IsEnabled
b8d0a37778010a5166d34bb0d192cf6b1b2f7becchenlu chen - Sun Microsystems - Beijing China * @internal
b8d0a37778010a5166d34bb0d192cf6b1b2f7becchenlu chen - Sun Microsystems - Beijing China */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#if defined(VBOX_STRICT) && defined(IN_RING3)
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsEnabled(a_pVM) HMIsEnabledNotMacro(a_pVM)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#else
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsEnabled(a_pVM) ((a_pVM)->fHMEnabled)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#endif
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing China
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing China/**
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Checks whether raw-mode context is required for any purpose.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @retval @c true if required either by raw-mode itself or by HM for doing
c869993e79c1eafbec61a56bf6cea848fe754c71xy * switching the cpu to 64-bit mode.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @retval @c false if not required.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @param a_pVM The cross context VM structure.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * @internal
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#if HC_ARCH_BITS == 64
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsRawModeCtxNeeded(a_pVM) (!HMIsEnabled(a_pVM))
c869993e79c1eafbec61a56bf6cea848fe754c71xy#else
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing China# define HMIsRawModeCtxNeeded(a_pVM) (!HMIsEnabled(a_pVM) || (a_pVM)->fHMNeedRawModeCtx)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#endif
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy /**
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Check if the current CPU state is valid for emulating IO blocks in the recompiler
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
cf8dcc9bbabedca41ecfee13dec8172104e99968zhefeng xu - Sun Microsystems - Beijing China * @returns boolean
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @param a_pVCpu Pointer to the shared virtual CPU structure.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @internal
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#define HMCanEmulateIoBlock(a_pVCpu) (!CPUMIsGuestInPagedProtectedMode(a_pVCpu))
cf8dcc9bbabedca41ecfee13dec8172104e99968zhefeng xu - Sun Microsystems - Beijing China
cf8dcc9bbabedca41ecfee13dec8172104e99968zhefeng xu - Sun Microsystems - Beijing China /**
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Check if the current CPU state is valid for emulating IO blocks in the recompiler
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China *
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China * @returns boolean
3f7e60a636ef887af87fadf9ab6289c672532dd9zhefeng xu - Sun Microsystems - Beijing China * @param a_pCtx Pointer to the CPU context (within PVM).
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @internal
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#define HMCanEmulateIoBlockEx(a_pCtx) (!CPUMIsGuestInPagedProtectedModeEx(a_pCtx))
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy/**
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Checks whether we're in the special hardware virtualization context.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @returns true / false.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @param a_pVCpu The caller's cross context virtual CPU structure.
fa25784ca4b51c206177d891a654f1d36a25d41fxy * @thread EMT
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#ifdef IN_RING0
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsInHwVirtCtx(a_pVCpu) (VMCPU_GET_STATE(a_pVCpu) == VMCPUSTATE_STARTED_HM)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#else
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsInHwVirtCtx(a_pVCpu) (false)
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China#endif
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China
3f7e60a636ef887af87fadf9ab6289c672532dd9zhefeng xu - Sun Microsystems - Beijing China/**
c869993e79c1eafbec61a56bf6cea848fe754c71xy * Checks whether we're in the special hardware virtualization context and we
c869993e79c1eafbec61a56bf6cea848fe754c71xy * cannot perform long jump without guru meditating and possibly messing up the
c869993e79c1eafbec61a56bf6cea848fe754c71xy * host and/or guest state.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * This is after we've turned interrupts off and such.
c869993e79c1eafbec61a56bf6cea848fe754c71xy *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @returns true / false.
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng * @param a_pVCpu The caller's cross context virtual CPU structure.
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @thread EMT
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#ifdef IN_RING0
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsInHwVirtNoLongJmpCtx(a_pVCpu) (VMCPU_GET_STATE(a_pVCpu) == VMCPUSTATE_STARTED_EXEC)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#else
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsInHwVirtNoLongJmpCtx(a_pVCpu) (false)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#endif
193974072f41a843678abf5f61979c748687e66bSherry Moore
c869993e79c1eafbec61a56bf6cea848fe754c71xy/**
8bb4b220fdb894543e41a5f9037898cf3c3f312bgl * 64-bit raw-mode (intermediate memory context) operations.
8bb4b220fdb894543e41a5f9037898cf3c3f312bgl *
8bb4b220fdb894543e41a5f9037898cf3c3f312bgl * These are special hypervisor eip values used when running 64-bit guests on
8bb4b220fdb894543e41a5f9037898cf3c3f312bgl * 32-bit hosts. Each operation corresponds to a routine.
6ca163a136944eea4423498926e09cef9889312cvitezslav batrla - Sun Microsystems - Prague Czech Republic *
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @note Duplicated in the assembly code!
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer */
43ae55058ad99c869a9ae39d039490e8a3680520Dan McDonaldtypedef enum HM64ON32OP
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer{
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_INVALID = 0,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_VMXRCStartVM64,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_SVMRCVMRun64,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_HMRCSaveGuestFPU64,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_HMRCSaveGuestDebug64,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_HMRCTestSwitcher64,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_END,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer HM64ON32OP_32BIT_HACK = 0x7fffffff
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer} HM64ON32OP;
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing China
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing ChinaVMMDECL(bool) HMIsEnabledNotMacro(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(int) HMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCVirt);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(bool) HMHasPendingIrq(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(PX86PDPE) HMGetPaePdpes(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(int) HMAmdIsSubjectToErratum170(uint32_t *pu32Family, uint32_t *pu32Model, uint32_t *pu32Stepping);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(bool) HMSetSingleInstruction(PVMCPU pVCpu, bool fEnable);
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy#ifndef IN_RC
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(int) HMFlushTLB(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(int) HMFlushTLBOnAllVCpus(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(int) HMInvalidatePageOnAllVCpus(PVM pVM, RTGCPTR GCVirt);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(int) HMInvalidatePhysPage(PVM pVM, RTGCPHYS GCPhys);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(bool) HMIsNestedPagingActive(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMM_INT_DECL(PGMMODE) HMGetShwPagingMode(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xy#else /* Nops in RC: */
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMFlushTLB(pVCpu) do { } while (0)
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMIsNestedPagingActive(pVM) false
c869993e79c1eafbec61a56bf6cea848fe754c71xy# define HMFlushTLBOnAllVCpus(pVM) do { } while (0)
c869993e79c1eafbec61a56bf6cea848fe754c71xy#endif
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy#ifdef IN_RING0
c869993e79c1eafbec61a56bf6cea848fe754c71xy/** @defgroup grp_hm_r0 The VM Hardware Manager API
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @ingroup grp_hm
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @{
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(int) HMR0Init(void);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(int) HMR0Term(void);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(int) HMR0InitVM(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(int) HMR0TermVM(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(int) HMR0EnableAllCpus(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(int) HMR0EnterSwitcher(PVM pVM, VMMSWITCHER enmSwitcher, bool *pfVTxDisabled);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(void) HMR0LeaveSwitcher(PVM pVM, bool fVTxDisabled);
c869993e79c1eafbec61a56bf6cea848fe754c71xy
193974072f41a843678abf5f61979c748687e66bSherry MooreVMMR0_INT_DECL(void) HMR0SavePendingIOPortWrite(PVMCPU pVCpu, RTGCPTR GCPtrRip, RTGCPTR GCPtrRipNext,
193974072f41a843678abf5f61979c748687e66bSherry Moore unsigned uPort, unsigned uAndVal, unsigned cbSize);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR0_INT_DECL(void) HMR0SavePendingIOPortRead(PVMCPU pVCpu, RTGCPTR GCPtrRip, RTGCPTR GCPtrRipNext,
c869993e79c1eafbec61a56bf6cea848fe754c71xy unsigned uPort, unsigned uAndVal, unsigned cbSize);
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy/** @} */
c869993e79c1eafbec61a56bf6cea848fe754c71xy#endif /* IN_RING0 */
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy#ifdef IN_RING3
c869993e79c1eafbec61a56bf6cea848fe754c71xy/** @defgroup grp_hm_r3 The VM Hardware Manager API
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @ingroup grp_hm
c869993e79c1eafbec61a56bf6cea848fe754c71xy * @{
c869993e79c1eafbec61a56bf6cea848fe754c71xy */
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3DECL(bool) HMR3IsEnabled(PUVM pUVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3DECL(bool) HMR3IsNestedPagingActive(PUVM pUVM);
837c1ac4e72b7d86278cca88b1075af557f7d161Stephen HansonVMMR3DECL(bool) HMR3IsVpidActive(PUVM pVUM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3DECL(bool) HMR3IsUXActive(PUVM pVUM);
c869993e79c1eafbec61a56bf6cea848fe754c71xy
8bb4b220fdb894543e41a5f9037898cf3c3f312bglVMMR3_INT_DECL(bool) HMR3IsEventPending(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(int) HMR3Init(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(int) HMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat);
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing ChinaVMMR3_INT_DECL(void) HMR3Relocate(PVM pVM);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal IyerVMMR3_INT_DECL(int) HMR3Term(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(void) HMR3Reset(PVM pVM);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(void) HMR3ResetCpu(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(void) HMR3CheckError(PVM pVM, int iStatusCode);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3DECL(bool) HMR3CanExecuteGuest(PVM pVM, PCPUMCTX pCtx);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(void) HMR3NotifyScheduled(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(void) HMR3NotifyEmulated(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(bool) HMR3IsActive(PVMCPU pVCpu);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(void) HMR3PagingModeChanged(PVM pVM, PVMCPU pVCpu, PGMMODE enmShadowMode, PGMMODE enmGuestMode);
da14cebe459d3275048785f25bd869cb09b5307fEric ChengVMMR3_INT_DECL(int) HMR3EmulateIoBlock(PVM pVM, PCPUMCTX pCtx);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(VBOXSTRICTRC) HMR3RestartPendingIOInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal IyerVMMR3_INT_DECL(int) HMR3EnablePatching(PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem);
c869993e79c1eafbec61a56bf6cea848fe754c71xyVMMR3_INT_DECL(int) HMR3DisablePatching(PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem);
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing ChinaVMMR3_INT_DECL(int) HMR3PatchTprInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing ChinaVMMR3_INT_DECL(bool) HMR3IsRescheduleRequired(PVM pVM, PCPUMCTX pCtx);
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing ChinaVMMR3_INT_DECL(bool) HMR3IsVmxPreemptionTimerUsed(PVM pVM);
ac7f5757903d7806e03e59f71c10eec36e0deadechenlu chen - Sun Microsystems - Beijing China
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer/** @} */
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer#endif /* IN_RING3 */
c869993e79c1eafbec61a56bf6cea848fe754c71xy
c869993e79c1eafbec61a56bf6cea848fe754c71xy#ifdef IN_RING0
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China/** @addtogroup grp_hm_r0
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China * @{
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China */
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0SetupVM(PVM pVM);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0RunGuestCode(PVM pVM, PVMCPU pVCpu);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0Enter(PVM pVM, PVMCPU pVCpu);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0Leave(PVM pVM, PVMCPU pVCpu);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(bool) HMR0SuspendPending(void);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China# if HC_ARCH_BITS == 32 && defined(VBOX_WITH_64_BITS_GUESTS)
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0SaveFPUState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0SaveDebugState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaVMMR0_INT_DECL(int) HMR0TestSwitcher3264(PVM pVM);
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China# endif
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China/** @} */
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China#endif /* IN_RING0 */
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China/** @} */
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing ChinaRT_C_DECLS_END
b8d0a37778010a5166d34bb0d192cf6b1b2f7becchenlu chen - Sun Microsystems - Beijing China
b8d0a37778010a5166d34bb0d192cf6b1b2f7becchenlu chen - Sun Microsystems - Beijing China
b8d0a37778010a5166d34bb0d192cf6b1b2f7becchenlu chen - Sun Microsystems - Beijing China#endif
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China
80a11ad227f9c82cd6e7cf5c8913a37f00b7af0echenlu chen - Sun Microsystems - Beijing China