summaryrefslogtreecommitdiffstats
path: root/src/VBox/VMM/include/HMInternal.mac
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:49:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:49:04 +0000
commit16f504a9dca3fe3b70568f67b7d41241ae485288 (patch)
treec60f36ada0496ba928b7161059ba5ab1ab224f9d /src/VBox/VMM/include/HMInternal.mac
parentInitial commit. (diff)
downloadvirtualbox-16f504a9dca3fe3b70568f67b7d41241ae485288.tar.xz
virtualbox-16f504a9dca3fe3b70568f67b7d41241ae485288.zip
Adding upstream version 7.0.6-dfsg.upstream/7.0.6-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/VMM/include/HMInternal.mac')
-rw-r--r--src/VBox/VMM/include/HMInternal.mac278
1 files changed, 278 insertions, 0 deletions
diff --git a/src/VBox/VMM/include/HMInternal.mac b/src/VBox/VMM/include/HMInternal.mac
new file mode 100644
index 00000000..3bcfbe41
--- /dev/null
+++ b/src/VBox/VMM/include/HMInternal.mac
@@ -0,0 +1,278 @@
+;$Id: HMInternal.mac $
+;; @file
+; HM - Internal header file.
+;
+
+;
+; Copyright (C) 2006-2022 Oracle and/or its affiliates.
+;
+; This file is part of VirtualBox base platform packages, as
+; available from https://www.virtualbox.org.
+;
+; This program is free software; you can redistribute it and/or
+; modify it under the terms of the GNU General Public License
+; as published by the Free Software Foundation, in version 3 of the
+; License.
+;
+; This program is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this program; if not, see <https://www.gnu.org/licenses>.
+;
+; SPDX-License-Identifier: GPL-3.0-only
+;
+
+%ifndef VMX_VMCS_GUEST_FIELD_ES
+ %include "VBox/vmm/hm_vmx.mac" ; For VMXRESTOREHOST
+%endif
+
+struc VMXVMCSINFOSHARED
+ .fWasInRealMode resb 1
+ alignb 8
+ .RealMode.AttrCS resd 1
+ .RealMode.AttrDS resd 1
+ .RealMode.AttrES resd 1
+ .RealMode.AttrFS resd 1
+ .RealMode.AttrGS resd 1
+ .RealMode.AttrSS resd 1
+ .RealMode.Eflags resd 1 ; should be EFlags?
+ .RealMode.fRealOnV86Active resb 1
+
+ alignb 8
+ .au64LbrFromIpMsr resq 32
+ .au64LbrToIpMsr resq 32
+ .au64LbrInfoMsr resq 32
+ .u64LbrTosMsr resq 1
+ .u64LerFromIpMsr resq 1
+ .u64LerToIpMsr resq 1
+endstruc
+
+
+struc VMXVMCSINFO
+ .pShared RTR0PTR_RES 1
+
+ .HCPhysEPTP RTHCPHYS_RES 1
+ .fVmcsState resd 1
+ .fShadowVmcsState resd 1
+ .idHostCpuState resd 1
+ .idHostCpuExec resd 1
+ .cEntryMsrLoad resd 1
+ .cExitMsrStore resd 1
+ .cExitMsrLoad resd 1
+
+ .u32PinCtls resd 1
+ .u32ProcCtls resd 1
+ .u32ProcCtls2 resd 1
+ .u64ProcCtls3 resq 1
+ .u32EntryCtls resd 1
+ .u32ExitCtls resd 1
+ .u32XcptBitmap resd 1
+ .u32XcptPFMask resd 1
+ .u32XcptPFMatch resd 1
+
+ alignb 8
+ .u64TscOffset resq 1
+ .u64VmcsLinkPtr resq 1
+ .u64Cr0Mask resq 1
+ .u64Cr4Mask resq 1
+ .uHostRip resq 1
+ .uHostRsp resq 1
+
+ .pvVmcs RTR0PTR_RES 1
+ .pvShadowVmcs RTR0PTR_RES 1
+ .pbVirtApic RTR0PTR_RES 1
+ .pvMsrBitmap RTR0PTR_RES 1
+ .pvGuestMsrLoad RTR0PTR_RES 1
+ .pvGuestMsrStore RTR0PTR_RES 1
+ .pvHostMsrLoad RTR0PTR_RES 1
+
+ alignb 8
+ .HCPhysVmcs RTHCPHYS_RES 1
+ .HCPhysShadowVmcs RTHCPHYS_RES 1
+ .HCPhysVirtApic RTHCPHYS_RES 1
+ .HCPhysMsrBitmap RTHCPHYS_RES 1
+ .HCPhysGuestMsrLoad RTHCPHYS_RES 1
+ .HCPhysGuestMsrStore RTHCPHYS_RES 1
+ .HCPhysHostMsrLoad RTHCPHYS_RES 1
+
+ .hMemObj RTR0PTR_RES 1
+endstruc
+
+%define VMX_RESTORE_HOST_SEL_DS 0001h ;RT_BIT(0)
+%define VMX_RESTORE_HOST_SEL_ES 0002h ;RT_BIT(1)
+%define VMX_RESTORE_HOST_SEL_FS 0004h ;RT_BIT(2)
+%define VMX_RESTORE_HOST_SEL_GS 0008h ;RT_BIT(3)
+%define VMX_RESTORE_HOST_SEL_TR 0010h ;RT_BIT(4)
+%define VMX_RESTORE_HOST_GDTR 0020h ;RT_BIT(5)
+%define VMX_RESTORE_HOST_IDTR 0040h ;RT_BIT(6)
+%define VMX_RESTORE_HOST_GDT_READ_ONLY 0080h ;RT_BIT(7)
+%define VMX_RESTORE_HOST_GDT_NEED_WRITABLE 0100h ;RT_BIT(8)
+%define VMX_RESTORE_HOST_CAN_USE_WRFSBASE_AND_WRGSBASE 0200h ;RT_BIT(9)
+%define VMX_RESTORE_HOST_REQUIRED 0400h ;RT_BIT(10) - must be the highest bit!
+struc VMXRESTOREHOST
+ .uHostSelDS resw 1
+ .uHostSelES resw 1
+ .uHostSelFS resw 1
+ .HostGdtr resb 10
+ .uHostSelGS resw 1
+ .uHostSelTR resw 1
+ .uHostSelSS resw 1
+ .HostGdtrRw resb 10
+ .uHostSelCS resw 1
+ .abPadding1 resb 4
+ .HostIdtr resb 10
+ alignb 8
+ .uHostFSBase resq 1
+ .uHostGSBase resq 1
+endstruc
+
+struc HMCPUVMX
+ .VmcsInfo resb VMXVMCSINFOSHARED_size
+ .VmcsInfoNstGst resb VMXVMCSINFOSHARED_size
+ .fSwitchedToNstGstVmcsCopyForRing3 resb 1
+ .fMergedNstGstCtls resb 1
+ .fCopiedNstGstToShadowVmcs resb 1
+ .fSwitchedNstGstFlushTlb resb 1
+
+ alignb 8
+ .u64GstMsrApicBase resq 1
+
+ .LastError.idCurrentCpu resd 1
+ .LastError.idEnteredCpu resd 1
+ .LastError.HCPhysCurrentVmcs resq 1
+ .LastError.u32VmcsRev resd 1
+ .LastError.u32InstrError resd 1
+ .LastError.u32ExitReason resd 1
+ .LastError.u32GuestIntrState resd 1
+endstruc
+
+struc HMCPUSVM
+ .fEmulateLongModeSysEnterExit resb 1
+
+ alignb 8
+ .NstGstVmcbCache resb 40
+endstruc
+
+struc HMCPU
+ .fCheckedTLBFlush resb 1
+ .fActive resb 1
+ .fUseDebugLoop resb 1
+
+ .fGIMTrapXcptUD resb 1
+ .fTrapXcptGpForLovelyMesaDrv resb 1
+ .fSingleInstruction resb 1
+ alignb 8
+
+ .u32HMError resd 1
+ .rcLastExitToR3 resd 1
+ alignb 8
+ .fCtxChanged resq 1
+
+ alignb 8
+ .vmx resb HMCPUVMX_size
+ alignb 8
+ .svm resb HMCPUSVM_size
+
+ .Event.fPending resd 1
+ .Event.u32ErrCode resd 1
+ .Event.cbInstr resd 1
+ alignb 8
+ .Event.u64IntInfo resq 1
+ .Event.GCPtrFaultAddress RTGCPTR_RES 1
+
+ .enmShadowMode resd 1
+ alignb 8
+ .aPdpes resq 4
+
+ .StatVmxWriteHostRip resq 1
+ .StatVmxWriteHostRsp resq 1
+
+ ; The remainer is disassembly state and statistics.
+endstruc
+
+struc HMR0CPUVMX
+ .pfnStartVm RTR0PTR_RES 1
+ .uTscDeadline resq 1
+ .uTscDeadlineVersion resq 1
+
+
+ .VmcsInfo resb VMXVMCSINFO_size
+ .VmcsInfoNstGst resb VMXVMCSINFO_size
+ .fSwitchedToNstGstVmcs resb 1
+ alignb 8
+ .pVmxTransient RTR0PTR_RES 1
+
+ .u64HostMsrLStar resq 1
+ .u64HostMsrStar resq 1
+ .u64HostMsrSfMask resq 1
+ .u64HostMsrKernelGsBase resq 1
+ .fLazyMsrs resd 1
+ .fUpdatedHostAutoMsrs resb 1
+ alignb 4
+ .fRestoreHostFlags resd 1
+ alignb 8
+ .RestoreHost resb VMXRESTOREHOST_size
+endstruc
+
+struc HMR0CPUSVM
+ .pfnVMRun RTR0PTR_RES 1
+
+ alignb 8
+ .HCPhysVmcbHost RTHCPHYS_RES 1
+
+ alignb 8
+ .hMemObjVmcbHost RTR0PTR_RES 1
+
+ alignb 8
+ .HCPhysVmcb RTHCPHYS_RES 1
+ .hMemObjVmcb RTR0PTR_RES 1
+ .pVmcb RTR0PTR_RES 1
+
+ alignb 8
+ .HCPhysMsrBitmap RTHCPHYS_RES 1
+ .hMemObjMsrBitmap RTR0PTR_RES 1
+ .pvMsrBitmap RTR0PTR_RES 1
+
+ .fSyncVTpr resb 1
+
+ alignb 8
+ .pSvmTransient RTR0PTR_RES 1
+ .u64HostTscAux resq 1
+
+ alignb 8
+ .DisState resb 0d8h
+endstruc
+
+struc HMR0PERVCPU
+ .cWorldSwitchExits resd 1
+ .cTlbFlushes resd 1
+ .idLastCpu resd 1
+ .idEnteredCpu resd 1
+ .uCurrentAsid resd 1
+
+ .fForceTLBFlush resb 1
+ .fLeaveDone resb 1
+ .fUsingHyperDR7 resb 1
+ .fUsingDebugLoop resb 1
+ .fDebugWantRdTscExit resb 1
+ .fLoadSaveGuestXcr0 resb 1
+ .fClearTrapFlag resb 1
+
+ alignb 4
+ .fWorldSwitcher resd 1
+ .uTscExit resq 1
+
+ alignb 8
+ .vmx resb HMR0CPUVMX_size
+ alignb 8
+ .svm resb HMR0CPUSVM_size
+endstruc
+
+%define HM_WSF_IBPB_EXIT RT_BIT_32(0)
+%define HM_WSF_IBPB_ENTRY RT_BIT_32(1)
+%define HM_WSF_L1D_ENTRY RT_BIT_32(2)
+%define HM_WSF_MDS_ENTRY RT_BIT_32(3)
+