]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/Include/Library/VmgExitLib.h
UefiCpuPkg: Implement library support for VMGEXIT
[mirror_edk2.git] / UefiCpuPkg / Include / Library / VmgExitLib.h
1 /** @file
2 Public header file for the VMGEXIT Support library class.
3
4 This library class defines some routines used when invoking the VMGEXIT
5 instruction in support of SEV-ES and to handle #VC exceptions.
6
7 Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10 **/
11
12 #ifndef __VMG_EXIT_LIB_H__
13 #define __VMG_EXIT_LIB_H__
14
15 #include <Protocol/DebugSupport.h>
16 #include <Register/Amd/Ghcb.h>
17
18
19 /**
20 Perform VMGEXIT.
21
22 Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction and
23 then handles the return actions.
24
25 @param[in, out] Ghcb A pointer to the GHCB
26 @param[in] ExitCode VMGEXIT code to be assigned to the SwExitCode
27 field of the GHCB.
28 @param[in] ExitInfo1 VMGEXIT information to be assigned to the
29 SwExitInfo1 field of the GHCB.
30 @param[in] ExitInfo2 VMGEXIT information to be assigned to the
31 SwExitInfo2 field of the GHCB.
32
33 @retval 0 VMGEXIT succeeded.
34 @return Exception number to be propagated, VMGEXIT
35 processing did not succeed.
36
37 **/
38 UINT64
39 EFIAPI
40 VmgExit (
41 IN OUT GHCB *Ghcb,
42 IN UINT64 ExitCode,
43 IN UINT64 ExitInfo1,
44 IN UINT64 ExitInfo2
45 );
46
47 /**
48 Perform pre-VMGEXIT initialization/preparation.
49
50 Performs the necessary steps in preparation for invoking VMGEXIT. Must be
51 called before setting any fields within the GHCB.
52
53 @param[in, out] Ghcb A pointer to the GHCB
54
55 **/
56 VOID
57 EFIAPI
58 VmgInit (
59 IN OUT GHCB *Ghcb
60 );
61
62 /**
63 Perform post-VMGEXIT cleanup.
64
65 Performs the necessary steps to cleanup after invoking VMGEXIT. Must be
66 called after obtaining needed fields within the GHCB.
67
68 @param[in, out] Ghcb A pointer to the GHCB
69
70 **/
71 VOID
72 EFIAPI
73 VmgDone (
74 IN OUT GHCB *Ghcb
75 );
76
77 /**
78 Handle a #VC exception.
79
80 Performs the necessary processing to handle a #VC exception.
81
82 The base library function returns an error equal to VC_EXCEPTION,
83 to be propagated to the standard exception handling stack.
84
85 @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to be set
86 as value to use on error.
87 @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT
88
89 @retval EFI_SUCCESS Exception handled
90 @retval EFI_UNSUPPORTED #VC not supported, (new) exception value to
91 propagate provided
92 @retval EFI_PROTOCOL_ERROR #VC handling failed, (new) exception value to
93 propagate provided
94
95 **/
96 EFI_STATUS
97 EFIAPI
98 VmgExitHandleVc (
99 IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
100 IN OUT EFI_SYSTEM_CONTEXT SystemContext
101 );
102
103 #endif