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 104