mirror of
https://github.com/acidanthera/audk.git
synced 2025-08-16 23:28:09 +02:00
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>
40 lines
1.1 KiB
NASM
40 lines
1.1 KiB
NASM
;------------------------------------------------------------------------------
|
|
;
|
|
; 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
|
|
|