CPUMInternal.h revision 7481bcc52798a04f39bb360635624df5658d2791
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/* $Id$ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** @file
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPUM - Internal header file.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/*
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Copyright (C) 2006-2012 Oracle Corporation
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock *
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This file is part of VirtualBox Open Source Edition (OSE), as
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * available from http://www.virtualbox.org. This file is free software;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * you can redistribute it and/or modify it under the terms of the GNU
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * General Public License (GPL) as published by the Free Software
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Foundation, in version 2 as it comes in the "COPYING" file of the
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#ifndef ___CPUMInternal_h
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define ___CPUMInternal_h
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#ifndef VBOX_FOR_DTRACE_LIB
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# include <VBox/cdefs.h>
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# include <VBox/types.h>
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# include <VBox/vmm/stam.h>
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# include <iprt/x86.h>
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#else
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# pragma D depends_on library x86.d
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# pragma D depends_on library cpumctx.d
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** @defgroup grp_cpum_int Internals
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @ingroup grp_cpum
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @internal
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Flags and types for CPUM fault handlers
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Type: Load DS */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_DS 1
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Type: Load ES */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_ES 2
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Type: Load FS */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_FS 3
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Type: Load GS */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_GS 4
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Type: IRET */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_IRET 5
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Type mask. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_TYPEMASK 0xff
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** If set EBP points to the CPUMCTXCORE that's being used. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_HANDLER_CTXCORE_IN_EBP RT_BIT(31)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Use flags (CPUM::fUseFlags).
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * (Don't forget to sync this with CPUMInternal.mac !)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Used the FPU, SSE or such stuff. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USED_FPU RT_BIT(0)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Used the FPU, SSE or such stuff since last we were in REM.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * REM syncing is clearing this, lazy FPU is setting it. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USED_FPU_SINCE_REM RT_BIT(1)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** The XMM state was manually restored. (AMD only) */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USED_MANUAL_XMM_RESTORE RT_BIT(2)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Host OS is using SYSENTER and we must NULL the CS. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USE_SYSENTER RT_BIT(3)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Host OS is using SYSENTER and we must NULL the CS. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USE_SYSCALL RT_BIT(4)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Debug registers are used by host and that DR7 and DR6 must be saved and
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * disabled when switching to raw-mode. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USE_DEBUG_REGS_HOST RT_BIT(5)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Records that we've saved the host DRx registers.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * In ring-0 this means all (DR0-7), while in raw-mode context this means DR0-3
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * since DR6 and DR7 are covered by CPUM_USE_DEBUG_REGS_HOST. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USED_DEBUG_REGS_HOST RT_BIT(6)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Set to indicate that we should save host DR0-7 and load the hypervisor debug
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * registers in the raw-mode world switchers. (See CPUMRecalcHyperDRx.) */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USE_DEBUG_REGS_HYPER RT_BIT(7)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Used in ring-0 to indicate that we have loaded the hypervisor debug
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * registers. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USED_DEBUG_REGS_HYPER RT_BIT(8)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Used in ring-0 to indicate that we have loaded the guest debug
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * registers (DR0-3 and maybe DR6) for direct use by the guest.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * DR7 (and AMD-V DR6) are handled via the VMCB. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USED_DEBUG_REGS_GUEST RT_BIT(9)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Sync the FPU state on next entry (32->64 switcher only). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_SYNC_FPU_STATE RT_BIT(16)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Sync the debug state on next entry (32->64 switcher only). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_SYNC_DEBUG_REGS_GUEST RT_BIT(17)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Sync the debug state on next entry (32->64 switcher only).
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Almost the same as CPUM_USE_DEBUG_REGS_HYPER in the raw-mode switchers. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_SYNC_DEBUG_REGS_HYPER RT_BIT(18)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Host CPU requires fxsave/fxrstor leaky bit handling. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#define CPUM_USE_FFXSR_LEAKY RT_BIT(19)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/* Sanity check. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#ifndef VBOX_FOR_DTRACE_LIB
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#if defined(VBOX_WITH_HYBRID_32BIT_KERNEL) && (HC_ARCH_BITS != 32 || R0_ARCH_BITS != 32)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# error "VBOX_WITH_HYBRID_32BIT_KERNEL is only for 32 bit builds."
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * MSR read functions.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef enum CPUMMSRRDFN
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Invalid zero value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Invalid = 0,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Return the CPUMMSRRANGE::uValue. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_FixedValue,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Alias to the MSR range starting at the MSR given by
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPUMMSRRANGE::uValue. Must be used in pair with
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * kCpumMsrWrFn_MsrAlias. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_MsrAlias,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Write only register, GP all read attempts. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_WriteOnly,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32P5McAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32P5McType,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32TimestampCounter,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PlatformId, /**< Takes real CPU value for reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32ApicBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32FeatureControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32BiosSignId, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32SmmMonitorCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PmcN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32MonitorFilterLineSize,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32MPerf,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32APerf,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32MtrrCap, /**< Takes real CPU value for reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32MtrrPhysBaseN, /**< Takes register number. */
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_Ia32MtrrPhysMaskN, /**< Takes register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32MtrrFixed, /**< Takes CPUMCPU offset. */
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_Ia32MtrrDefType,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32Pat,
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_Ia32SysEnterCs,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32SysEnterEsp,
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_Ia32SysEnterEip,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32McgCap,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32McgStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32McgCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32DebugCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32SmrrPhysBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32SmrrPhysMask,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PlatformDcaCap,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32CpuDcaCap,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32Dca0Cap,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfEvtSelN, /**< Range value indicates the register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfStatus, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfCtl, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32FixedCtrN, /**< Takes register number of start of range. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfCapabilities, /**< Takes reference value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32FixedCtrCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfGlobalStatus, /**< Takes reference value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfGlobalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PerfGlobalOvfCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32PebsEnable,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32ClockModulation, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32ThermInterrupt, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32ThermStatus, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32Therm2Ctl, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32MiscEnable, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32McCtlStatusAddrMiscN, /**< Takes bank number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32McNCtl2, /**< Takes register number of start of range. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32DsArea,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32TscDeadline,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32X2ApicN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32DebugInterface,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxBase, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxPinbasedCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxProcbasedCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxExitCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxEntryCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxMisc, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxCr0Fixed0, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxCr0Fixed1, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxCr4Fixed0, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxCr4Fixed1, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxVmcsEnum, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxProcBasedCtls2, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxEptVpidCap, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxTruePinbasedCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxTrueProcbasedCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxTrueExitCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Ia32VmxTrueEntryCtls, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64Efer,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64SyscallTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64LongSyscallTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64CompSyscallTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64SyscallFlagMask,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64FsBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64GsBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64KernelGsBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_Amd64TscAux,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelEblCrPowerOn,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7CoreThreadCount,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelP4EbcHardPowerOn,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelP4EbcSoftPowerOn,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelP4EbcFrequencyId,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelP6FsbFrequency, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelPlatformInfo,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelFlexRatio, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelPkgCStConfigControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelPmgIoCaptureBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelLastBranchFromToN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelLastBranchFromN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelLastBranchToN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelLastBranchTos,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelBblCrCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelBblCrCtl3,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7TemperatureTarget, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7MsrOffCoreResponseN,/**< Takes register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7MiscPwrMgmt,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelP6CrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCpuId1FeatureMaskEcdx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCpuId1FeatureMaskEax,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCpuId80000001FeatureMaskEcdx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyAesNiCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7TurboRatioLimit, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7LbrSelect,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyErrorControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7VirtualLegacyWireCap,/**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7PowerCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyPebsNumAlt,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7PebsLdLat,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7PkgCnResidencyN, /**< Takes C-state number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7CoreCnResidencyN, /**< Takes C-state number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyVrCurrentConfig,/**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyVrMiscConfig, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyRaplPowerUnit, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyPkgCnIrtlN, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7SandyPkgC2Residency, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPkgPowerLimit, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPkgEnergyStatus, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPkgPerfStatus, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPkgPowerInfo, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplDramPowerLimit, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplDramEnergyStatus,/**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplDramPerfStatus, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplDramPowerInfo, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp0PowerLimit, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp0EnergyStatus, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp0Policy, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp0PerfStatus, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp1PowerLimit, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp1EnergyStatus, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7RaplPp1Policy, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7IvyConfigTdpNominal, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7IvyConfigTdpLevel1, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7IvyConfigTdpLevel2, /**< Takes real value as reference. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7IvyConfigTdpControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7IvyTurboActivationRatio,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncPerfGlobalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncPerfGlobalStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncPerfGlobalOvfCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncPerfFixedCtrCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncPerfFixedCtr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncCBoxConfig,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncArbPerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelI7UncArbPerfEvtSelN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCore2EmttmCrTablesN, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCore2SmmCStMiscInfo,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCore1ExtConfig,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCore1DtsCalControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_IntelCore2PeciControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_P6LastBranchFromIp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_P6LastBranchToIp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_P6LastIntFromIp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_P6LastIntToIp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hTscRate,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hLwpCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hLwpCbAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hMc4MiscN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8PerfCtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8PerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SysCfg, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8HwCr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8IorrBaseN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8IorrMaskN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8TopOfMemN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8NbCfg1,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8McXcptRedir,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8CpuNameN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8HwThermalCtrl, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SwThermalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8FidVidControl, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8FidVidStatus, /**< Range value returned. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8McCtlMaskN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmiOnIoTrapN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmiOnIoTrapCtlSts,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8IntPendingMessage,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmiTriggerIoCycle,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hMmioCfgBaseAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hTrapCtlMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hPStateCurLimit, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hPStateControl, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hPStateStatus, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hPStateN, /**< Returns range value. This isn't an register index! */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hCofVidControl, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hCofVidStatus, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hCStateIoBaseAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hCpuWatchdogTimer,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmmBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmmAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmmMask,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8VmCr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8IgnNe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8SmmCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8VmHSavePa,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hVmLockKey,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hSmmLockKey,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hLocalSmiStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hOsVisWrkIdLength,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hOsVisWrkStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam16hL2IPerfCtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam16hL2IPerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hNorthbridgePerfCtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hNorthbridgePerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7MicrocodeCtl, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7ClusterIdMaybe, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8CpuIdCtlStd07hEbax,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8CpuIdCtlStd06hEcx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8CpuIdCtlStd01hEdcx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8CpuIdCtlExt01hEdcx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK8PatchLevel, /**< Returns range value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7DebugStatusMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7BHTraceBaseMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7BHTracePtrMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7BHTraceLimitMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7HardwareDebugToolCfgMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7FastFlushCountMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7NodeId,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7DrXAddrMaskN, /**< Takes register index. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7Dr0DataMatchMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7Dr0DataMaskMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7LoadStoreCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7InstrCacheCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7DataCacheCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7BusUnitCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdK7DebugCtl2Maybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hFpuCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hDecoderCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hBusUnitCfg2,
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_AmdFam15hCombUnitCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hCombUnitCfg2,
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_AmdFam15hCombUnitCfg3,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam15hExecUnitCfg,
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_AmdFam15hLoadStoreCfg2,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsFetchCtl,
9af3851a3a831b4de34b42482c22351e14f33f16eschrock kCpumMsrRdFn_AmdFam10hIbsFetchLinAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsFetchPhysAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsOpExecCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsOpRip,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsOpData,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsOpData2,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsOpData3,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsDcLinAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsDcPhysAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam10hIbsCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_AmdFam14hIbsBrTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** End of valid MSR read function indexes. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrRdFn_End
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock} CPUMMSRRDFN;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
9af3851a3a831b4de34b42482c22351e14f33f16eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * MSR write functions.
9af3851a3a831b4de34b42482c22351e14f33f16eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef enum CPUMMSRWRFN
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Invalid zero value. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Invalid = 0,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Writes are ignored, the fWrGpMask is observed though. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IgnoreWrite,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Writes cause GP(0) to be raised, the fWrGpMask should be UINT64_MAX. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_ReadOnly,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Alias to the MSR range starting at the MSR given by
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPUMMSRRANGE::uValue. Must be used in pair with
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * kCpumMsrRdFn_MsrAlias. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_MsrAlias,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32P5McAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32P5McType,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32TimestampCounter,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32ApicBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32FeatureControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32BiosSignId,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32BiosUpdateTrigger,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32SmmMonitorCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PmcN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MonitorFilterLineSize,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MPerf,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32APerf,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MtrrPhysBaseN, /**< Takes register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MtrrPhysMaskN, /**< Takes register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MtrrFixed, /**< Takes CPUMCPU offset. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MtrrDefType,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32Pat,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32SysEnterCs,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32SysEnterEsp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32SysEnterEip,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32McgStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32McgCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32DebugCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32SmrrPhysBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32SmrrPhysMask,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PlatformDcaCap,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32Dca0Cap,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfEvtSelN, /**< Range value indicates the register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32FixedCtrN, /**< Takes register number of start of range. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfCapabilities,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32FixedCtrCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfGlobalStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfGlobalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PerfGlobalOvfCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32PebsEnable,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32ClockModulation,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32ThermInterrupt,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32ThermStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32Therm2Ctl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32MiscEnable,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32McCtlStatusAddrMiscN, /**< Takes bank number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32McNCtl2, /**< Takes register number of start of range. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32DsArea,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32TscDeadline,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32X2ApicN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Ia32DebugInterface,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64Efer,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64SyscallTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64LongSyscallTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64CompSyscallTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64SyscallFlagMask,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64FsBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64GsBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64KernelGsBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_Amd64TscAux,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelEblCrPowerOn,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelP4EbcHardPowerOn,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelP4EbcSoftPowerOn,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelP4EbcFrequencyId,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelFlexRatio,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelPkgCStConfigControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelPmgIoCaptureBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelLastBranchFromToN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelLastBranchFromN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelLastBranchToN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelLastBranchTos,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelBblCrCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelBblCrCtl3,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7TemperatureTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7MsrOffCoreResponseN, /**< Takes register number. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7MiscPwrMgmt,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelP6CrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCpuId1FeatureMaskEcdx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCpuId1FeatureMaskEax,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCpuId80000001FeatureMaskEcdx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7SandyAesNiCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7TurboRatioLimit,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7LbrSelect,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7SandyErrorControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7PowerCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7SandyPebsNumAlt,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7PebsLdLat,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7SandyVrCurrentConfig,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7SandyVrMiscConfig,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7SandyPkgCnIrtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7RaplPkgPowerLimit,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7RaplDramPowerLimit,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7RaplPp0PowerLimit,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7RaplPp0Policy,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7RaplPp1PowerLimit,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7RaplPp1Policy,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7IvyConfigTdpControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7IvyTurboActivationRatio,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncPerfGlobalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncPerfGlobalStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncPerfGlobalOvfCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncPerfFixedCtrCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncPerfFixedCtr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncArbPerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelI7UncArbPerfEvtSelN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCore2EmttmCrTablesN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCore2SmmCStMiscInfo,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCore1ExtConfig,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCore1DtsCalControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_IntelCore2PeciControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_P6LastIntFromIp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_P6LastIntToIp,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hTscRate,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hLwpCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hLwpCbAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hMc4MiscN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8PerfCtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8PerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SysCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8HwCr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8IorrBaseN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8IorrMaskN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8TopOfMemN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8NbCfg1,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8McXcptRedir,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8CpuNameN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8HwThermalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SwThermalCtrl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8FidVidControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8McCtlMaskN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmiOnIoTrapN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmiOnIoTrapCtlSts,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8IntPendingMessage,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmiTriggerIoCycle,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hMmioCfgBaseAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hTrapCtlMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hPStateControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hPStateStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hPStateN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hCofVidControl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hCofVidStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hCStateIoBaseAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hCpuWatchdogTimer,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmmBase,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmmAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmmMask,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8VmCr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8IgnNe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8SmmCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8VmHSavePa,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hVmLockKey,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hSmmLockKey,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hLocalSmiStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hOsVisWrkIdLength,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hOsVisWrkStatus,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam16hL2IPerfCtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam16hL2IPerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hNorthbridgePerfCtlN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hNorthbridgePerfCtrN,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7MicrocodeCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7ClusterIdMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8CpuIdCtlStd07hEbax,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8CpuIdCtlStd06hEcx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8CpuIdCtlStd01hEdcx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8CpuIdCtlExt01hEdcx,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK8PatchLoader,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7DebugStatusMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7BHTraceBaseMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7BHTracePtrMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7BHTraceLimitMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7HardwareDebugToolCfgMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7FastFlushCountMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7NodeId,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7DrXAddrMaskN, /**< Takes register index. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7Dr0DataMatchMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7Dr0DataMaskMaybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7LoadStoreCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7InstrCacheCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7DataCacheCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7BusUnitCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdK7DebugCtl2Maybe,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hFpuCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hDecoderCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hBusUnitCfg2,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hCombUnitCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hCombUnitCfg2,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hCombUnitCfg3,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hExecUnitCfg,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam15hLoadStoreCfg2,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsFetchCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsFetchLinAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsFetchPhysAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsOpExecCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsOpRip,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsOpData,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsOpData2,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsOpData3,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsDcLinAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsDcPhysAddr,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam10hIbsCtl,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_AmdFam14hIbsBrTarget,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** End of valid MSR write function indexes. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock kCpumMsrWrFn_End
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock} CPUMMSRWRFN;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPU features and quirks.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This is mostly exploded CPUID info.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef struct CPUMFEATURES
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The CPU vendor (CPUMCPUVENDOR). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t enmCpuVendor;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The CPU family. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t uFamily;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The CPU model. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t uModel;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The CPU stepping. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t uStepping;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The microarchitecture. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMMICROARCH enmMicroarch;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The maximum physical address with of the CPU. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t cMaxPhysAddrWidth;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Alignment padding. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t abPadding[3];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Supports MSRs. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fMsr : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Supports the page size extension (4/2 MB pages). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fPse : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Supports 36-bit page size extension (4 MB pages can map memory above
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * 4GB). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fPse36 : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Supports physical address extension (PAE). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fPae : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Page attribute table (PAT) support (page level cache control). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fPat : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Supports the FXSAVE and FXRSTOR instructions. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fFxSaveRstor : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Intel SYSENTER/SYSEXIT support */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fSysEnter : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** First generation APIC. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fApic : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Second generation APIC. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fX2Apic : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Hypervisor present. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fHypervisorPresent : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** MWAIT & MONITOR instructions supported. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fMonitorMWait : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** AMD64: Supports long mode. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fLongMode : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** AMD64: SYSCALL/SYSRET support. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fSysCall : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** AMD64: No-execute page table bit. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fNoExecute : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** AMD64: Supports LAHF & SAHF instructions in 64-bit mode. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fLahfSahf : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** AMD64: Supports RDTSCP. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fRdTscP : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Indicates that FPU instruction and data pointers may leak.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This generally applies to recent AMD CPUs, where the FPU IP and DP pointer
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * is only saved and restored if an exception is pending. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fLeakyFxSR : 1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Alignment padding. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fPadding : 9;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t auPadding[2];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock} CPUMFEATURES;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockAssertCompileSize(CPUMFEATURES, 32);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Pointer to a CPU feature structure. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef CPUMFEATURES *PCPUMFEATURES;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Pointer to a const CPU feature structure. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef CPUMFEATURES const *PCCPUMFEATURES;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPU info
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef struct CPUMINFO
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The number of MSR ranges (CPUMMSRRANGE) in the array pointed to below. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t cMsrRanges;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Mask applied to ECX before looking up the MSR for a RDMSR/WRMSR
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * instruction. Older hardware has been observed to ignore higher bits. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fMsrMask;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The number of CPUID leaves (CPUMCPUIDLEAF) in the array pointed to below. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t cCpuIdLeaves;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The index of the first extended CPUID leaf in the array.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Set to cCpuIdLeaves if none present. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t iFirstExtCpuIdLeaf;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Alignment padding. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t uPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** How to handle unknown CPUID leaves. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMUKNOWNCPUID enmUnknownCpuIdMethod;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** For use with CPUMUKNOWNCPUID_DEFAULTS. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCPUID DefCpuId;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Scalable bus frequency used for reporting other frequencies. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t uScalableBusFreq;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Pointer to the MSR ranges (ring-0 pointer). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock R0PTRTYPE(PCPUMMSRRANGE) paMsrRangesR0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Pointer to the CPUID leaves (ring-0 pointer). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock R0PTRTYPE(PCPUMCPUIDLEAF) paCpuIdLeavesR0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Pointer to the MSR ranges (ring-3 pointer). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock R3PTRTYPE(PCPUMMSRRANGE) paMsrRangesR3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Pointer to the CPUID leaves (ring-3 pointer). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock R3PTRTYPE(PCPUMCPUIDLEAF) paCpuIdLeavesR3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Pointer to the MSR ranges (raw-mode context pointer). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RCPTRTYPE(PCPUMMSRRANGE) paMsrRangesRC;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Pointer to the CPUID leaves (raw-mode context pointer). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RCPTRTYPE(PCPUMCPUIDLEAF) paCpuIdLeavesRC;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock} CPUMINFO;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Pointer to a CPU info structure. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef CPUMINFO *PCPUMINFO;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Pointer to a const CPU info structure. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef CPUMINFO const *CPCPUMINFO;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * The saved host CPU state.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock *
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @remark The special VBOX_WITH_HYBRID_32BIT_KERNEL checks here are for the 10.4.x series
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * of Mac OS X where the OS is essentially 32-bit but the cpu mode can be 64-bit.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef struct CPUMHOSTCTX
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** FPU state. (16-byte alignment)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @remark On x86, the format isn't necessarily X86FXSTATE (not important). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86FXSTATE fpu;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** General purpose register, selectors, flags and more
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#if HC_ARCH_BITS == 64 || defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** General purpose register ++
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * { */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t rax; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t rbx;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t rcx; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t rdx; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t rdi;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t rsi;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t rbp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t rsp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t r8; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t r9; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t r10;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t r11;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t r12;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t r13;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t r14;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t r15;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t rip; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t rflags;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#if HC_ARCH_BITS == 32
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint32_t eax; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t ebx;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint32_t ecx; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint32_t edx; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t edi;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t esi;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t ebp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86EFLAGS eflags;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint32_t eip; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /* lss pair! */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t esp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Selector registers
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ss;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ssPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL gs;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL gsPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL fs;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL fsPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL es;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL esPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ds;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL dsPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL cs;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL csPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#if HC_ARCH_BITS == 32 && !defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Control registers.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t cr0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint32_t cr2; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t cr3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t cr4;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Debug registers.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t dr0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t dr1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t dr2;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t dr3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t dr6;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t dr7;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Global Descriptor Table register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86XDTR32 gdtr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint16_t gdtrPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Interrupt Descriptor Table register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86XDTR32 idtr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint16_t idtrPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The task register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ldtr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ldtrPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The task register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL tr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL trPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t SysEnterPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The sysenter msr registers.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This member is not used by the hypervisor context. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMSYSENTER SysEnter;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** MSRs
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t efer;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /* padding to get 64byte aligned size */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t auPadding[16+32];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#elif HC_ARCH_BITS == 64 || defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Control registers.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t cr0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /*uint64_t cr2; - scratch*/
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t cr3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t cr4;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t cr8;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Debug registers.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t dr0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t dr1;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t dr2;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t dr3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t dr6;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t dr7;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Global Descriptor Table register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86XDTR64 gdtr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint16_t gdtrPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Interrupt Descriptor Table register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86XDTR64 idtr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint16_t idtrPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The task register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ldtr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL ldtrPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The task register. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL tr;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RTSEL trPadding;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** MSRs
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMSYSENTER SysEnter;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t FSbase;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t GSbase;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t efer;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /* padding to get 32byte aligned size */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# ifdef VBOX_WITH_HYBRID_32BIT_KERNEL
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t auPadding[16];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# else
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t auPadding[8+32];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#else
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock# error HC_ARCH_BITS not defined
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock} CPUMHOSTCTX;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Pointer to the saved host CPU state. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef CPUMHOSTCTX *PCPUMHOSTCTX;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPUM Data (part of VM)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef struct CPUM
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Offset from CPUM to CPUMCPU for the first CPU. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t offCPUMCPU0;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Use flags.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * These flags indicates which CPU features the host uses.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t fHostUseFlags;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Host CPU Features - ECX */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock struct
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** edx part */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86CPUIDFEATEDX edx;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** ecx part */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock X86CPUIDFEATECX ecx;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock } CPUFeatures;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Host extended CPU features. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock struct
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** edx part */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t edx;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** ecx part */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t ecx;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock } CPUFeaturesExt;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** CR4 mask */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock struct
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t AndMask; /**< @todo Move these to the per-CPU structure and fix the switchers. Saves a register! */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint32_t OrMask;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock } CR4;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The (more) portable CPUID level. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t u8PortableCpuIdLevel;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Indicates that a state restore is pending.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This is used to verify load order dependencies (PGM). */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock bool fPendingRestore;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t abPadding[HC_ARCH_BITS == 64 ? 6 : 2];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The standard set of CpuId leaves. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCPUID aGuestCpuIdStd[6];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The extended set of CpuId leaves. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCPUID aGuestCpuIdExt[10];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The centaur set of CpuId leaves. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCPUID aGuestCpuIdCentaur[4];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The hypervisor specific set of CpuId leaves. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCPUID aGuestCpuIdHyper[4];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** The default set of CpuId leaves. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCPUID GuestCpuIdDef;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#if HC_ARCH_BITS == 32
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t abPadding2[4];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Guest CPU info. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMINFO GuestInfo;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Guest CPU feature information. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMFEATURES GuestFeatures;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Host CPU feature information. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMFEATURES HostFeatures;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @name MSR statistics.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @{ */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrWrites;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrWritesToIgnoredBits;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrWritesRaiseGp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrWritesUnknown;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrReads;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrReadsRaiseGp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock STAMCOUNTER cMsrReadsUnknown;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** @} */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock} CPUM;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/** Pointer to the CPUM instance data residing in the shared VM structure. */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef CPUM *PCPUM;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * CPUM Data (part of VMCPU)
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrocktypedef struct CPUMCPU
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock{
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Hypervisor context.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Aligned on a 64-byte boundary.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCTX Hyper;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Saved host context. Only valid while inside GC.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Aligned on a 64-byte boundary.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMHOSTCTX Host;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#ifdef VBOX_WITH_CRASHDUMP_MAGIC
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint8_t aMagic[56];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock uint64_t uMagic;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock#endif
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Guest context.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Aligned on a 64-byte boundary.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCTX Guest;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /**
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Guest context - misc MSRs
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Aligned on a 64-byte boundary.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock CPUMCTXMSRS GuestMsrs;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock /** Use flags.
* These flags indicates both what is to be used and what has been used.
*/
uint32_t fUseFlags;
/** Changed flags.
* These flags indicates to REM (and others) which important guest
* registers which has been changed since last time the flags were cleared.
* See the CPUM_CHANGED_* defines for what we keep track of.
*/
uint32_t fChanged;
/** Offset from CPUM to CPUMCPU. */
uint32_t offCPUM;
/** Temporary storage for the return code of the function called in the
* 32-64 switcher. */
uint32_t u32RetCode;
#ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
/** The address of the APIC mapping, NULL if no APIC.
* Call CPUMR0SetLApic to update this before doing a world switch. */
RTHCPTR pvApicBase;
/** Used by the world switcher code to store which vectors needs restoring on
* the way back. */
uint32_t fApicDisVectors;
/** Set if the CPU has the X2APIC mode enabled.
* Call CPUMR0SetLApic to update this before doing a world switch. */
bool fX2Apic;
#else
uint8_t abPadding3[(HC_ARCH_BITS == 64 ? 8 : 4) + 4 + 1];
#endif
/** Have we entered raw-mode? */
bool fRawEntered;
/** Have we entered the recompiler? */
bool fRemEntered;
/** Align the structure on a 64-byte boundary. */
uint8_t abPadding2[64 - 16 - (HC_ARCH_BITS == 64 ? 8 : 4) - 4 - 1 - 2];
} CPUMCPU;
/** Pointer to the CPUMCPU instance data residing in the shared VMCPU structure. */
typedef CPUMCPU *PCPUMCPU;
#ifndef VBOX_FOR_DTRACE_LIB
RT_C_DECLS_BEGIN
PCPUMCPUIDLEAF cpumCpuIdGetLeaf(PVM pVM, uint32_t uLeaf, uint32_t uSubLeaf);
#ifdef IN_RING3
int cpumR3DbgInit(PVM pVM);
PCPUMCPUIDLEAF cpumR3CpuIdGetLeaf(PCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, uint32_t uLeaf, uint32_t uSubLeaf);
bool cpumR3CpuIdGetLeafLegacy(PCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, uint32_t uLeaf, uint32_t uSubLeaf,
PCPUMCPUID pLeagcy);
int cpumR3CpuIdInsert(PVM pVM, PCPUMCPUIDLEAF *ppaLeaves, uint32_t *pcLeaves, PCPUMCPUIDLEAF pNewLeaf);
void cpumR3CpuIdRemoveRange(PCPUMCPUIDLEAF paLeaves, uint32_t *pcLeaves, uint32_t uFirst, uint32_t uLast);
int cpumR3CpuIdExplodeFeatures(PCCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, PCPUMFEATURES pFeatures);
int cpumR3DbGetCpuInfo(const char *pszName, PCPUMINFO pInfo);
int cpumR3MsrRangesInsert(PVM pVM, PCPUMMSRRANGE *ppaMsrRanges, uint32_t *pcMsrRanges, PCCPUMMSRRANGE pNewRange);
int cpumR3MsrApplyFudge(PVM pVM);
int cpumR3MsrRegStats(PVM pVM);
int cpumR3MsrStrictInitChecks(void);
PCPUMMSRRANGE cpumLookupMsrRange(PVM pVM, uint32_t idMsr);
#endif
#ifdef IN_RC
DECLASM(int) cpumHandleLazyFPUAsm(PCPUMCPU pCPUM);
#endif
#ifdef IN_RING0
DECLASM(int) cpumR0SaveHostRestoreGuestFPUState(PCPUMCPU pCPUM);
DECLASM(int) cpumR0SaveGuestRestoreHostFPUState(PCPUMCPU pCPUM);
DECLASM(int) cpumR0SaveHostFPUState(PCPUMCPU pCPUM);
DECLASM(int) cpumR0RestoreHostFPUState(PCPUMCPU pCPUM);
DECLASM(void) cpumR0LoadFPU(PCPUMCTX pCtx);
DECLASM(void) cpumR0SaveFPU(PCPUMCTX pCtx);
DECLASM(void) cpumR0LoadXMM(PCPUMCTX pCtx);
DECLASM(void) cpumR0SaveXMM(PCPUMCTX pCtx);
DECLASM(void) cpumR0SetFCW(uint16_t u16FCW);
DECLASM(uint16_t) cpumR0GetFCW(void);
DECLASM(void) cpumR0SetMXCSR(uint32_t u32MXCSR);
DECLASM(uint32_t) cpumR0GetMXCSR(void);
DECLASM(void) cpumR0LoadDRx(uint64_t const *pa4Regs);
DECLASM(void) cpumR0SaveDRx(uint64_t *pa4Regs);
#endif
RT_C_DECLS_END
#endif /* !VBOX_FOR_DTRACE_LIB */
/** @} */
#endif