MdePkg/BaseLib: Add a new VMGEXIT instruction invocation for SVSM
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4654 The SVSM specification relies on a specific register calling convention to hold the parameters that are associated with the SVSM request. The SVSM is invoked by requesting the hypervisor to run the VMPL0 VMSA of the guest using the GHCB MSR Protocol or a GHCB NAE event. Create a new version of the VMGEXIT instruction that will adhere to this calling convention and load the SVSM function arguments into the proper register before invoking the VMGEXIT instruction. On return, perform the atomic exchange on the SVSM call pending value as specified in the SVSM specification. Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Zhiguang Liu <zhiguang.liu@intel.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
This commit is contained in:
committed by
mergify[bot]
parent
8ccbf075f0
commit
c0bf953fe8
39
MdePkg/Library/BaseLib/Ia32/VmgExitSvsm.nasm
Normal file
39
MdePkg/Library/BaseLib/Ia32/VmgExitSvsm.nasm
Normal file
@@ -0,0 +1,39 @@
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (C) 2024, Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
; Module Name:
|
||||
;
|
||||
; VmgExitSvsm.Asm
|
||||
;
|
||||
; Abstract:
|
||||
;
|
||||
; AsmVmgExitSvsm function
|
||||
;
|
||||
; Notes:
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
DEFAULT REL
|
||||
SECTION .text
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; UINT32
|
||||
; EFIAPI
|
||||
; AsmVmgExitSvsm (
|
||||
; SVSM_CALL_DATA *SvsmCallData
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(AsmVmgExitSvsm)
|
||||
ASM_PFX(AsmVmgExitSvsm):
|
||||
;
|
||||
; NASM doesn't support the vmmcall instruction in 32-bit mode and NASM versions
|
||||
; before 2.12 cannot translate the 64-bit "rep vmmcall" instruction into elf32
|
||||
; format. Given that VMGEXIT does not make sense on IA32, provide a stub
|
||||
; implementation that is identical to CpuBreakpoint(). In practice,
|
||||
; AsmVmgExitSvsm() should never be called on IA32.
|
||||
;
|
||||
int 3
|
||||
ret
|
||||
|
Reference in New Issue
Block a user