REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UefiCpuPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   VMGEXIT Base Support Library.
 | |
| 
 | |
|   Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <Base.h>
 | |
| #include <Uefi.h>
 | |
| #include <Library/VmgExitLib.h>
 | |
| 
 | |
| /**
 | |
|   Perform VMGEXIT.
 | |
| 
 | |
|   Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction and
 | |
|   then handles the return actions.
 | |
| 
 | |
|   The base library function returns an error in the form of a
 | |
|   GHCB_EVENT_INJECTION representing a GP_EXCEPTION.
 | |
| 
 | |
|   @param[in, out]  Ghcb       A pointer to the GHCB
 | |
|   @param[in]       ExitCode   VMGEXIT code to be assigned to the SwExitCode
 | |
|                               field of the GHCB.
 | |
|   @param[in]       ExitInfo1  VMGEXIT information to be assigned to the
 | |
|                               SwExitInfo1 field of the GHCB.
 | |
|   @param[in]       ExitInfo2  VMGEXIT information to be assigned to the
 | |
|                               SwExitInfo2 field of the GHCB.
 | |
| 
 | |
|   @retval  0                  VMGEXIT succeeded.
 | |
|   @return                     Exception number to be propagated, VMGEXIT
 | |
|                               processing did not succeed.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| VmgExit (
 | |
|   IN OUT GHCB    *Ghcb,
 | |
|   IN     UINT64  ExitCode,
 | |
|   IN     UINT64  ExitInfo1,
 | |
|   IN     UINT64  ExitInfo2
 | |
|   )
 | |
| {
 | |
|   GHCB_EVENT_INJECTION  Event;
 | |
| 
 | |
|   Event.Uint64          = 0;
 | |
|   Event.Elements.Vector = GP_EXCEPTION;
 | |
|   Event.Elements.Type   = GHCB_EVENT_INJECTION_TYPE_EXCEPTION;
 | |
|   Event.Elements.Valid  = 1;
 | |
| 
 | |
|   return Event.Uint64;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Perform pre-VMGEXIT initialization/preparation.
 | |
| 
 | |
|   Performs the necessary steps in preparation for invoking VMGEXIT. Must be
 | |
|   called before setting any fields within the GHCB.
 | |
| 
 | |
|   @param[in, out]  Ghcb            A pointer to the GHCB
 | |
|   @param[in, out]  InterruptState  A pointer to hold the current interrupt
 | |
|                                    state, used for restoring in VmgDone ()
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| VmgInit (
 | |
|   IN OUT GHCB     *Ghcb,
 | |
|   IN OUT BOOLEAN  *InterruptState
 | |
|   )
 | |
| {
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Perform post-VMGEXIT cleanup.
 | |
| 
 | |
|   Performs the necessary steps to cleanup after invoking VMGEXIT. Must be
 | |
|   called after obtaining needed fields within the GHCB.
 | |
| 
 | |
|   @param[in, out]  Ghcb            A pointer to the GHCB
 | |
|   @param[in]       InterruptState  An indicator to conditionally (re)enable
 | |
|                                    interrupts
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| VmgDone (
 | |
|   IN OUT GHCB     *Ghcb,
 | |
|   IN     BOOLEAN  InterruptState
 | |
|   )
 | |
| {
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Marks a field at the specified offset as valid in the GHCB.
 | |
| 
 | |
|   The ValidBitmap area represents the areas of the GHCB that have been marked
 | |
|   valid. Set the bit in ValidBitmap for the input offset.
 | |
| 
 | |
|   @param[in, out] Ghcb    Pointer to the Guest-Hypervisor Communication Block
 | |
|   @param[in]      Offset  Qword offset in the GHCB to mark valid
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| VmgSetOffsetValid (
 | |
|   IN OUT GHCB           *Ghcb,
 | |
|   IN     GHCB_REGISTER  Offset
 | |
|   )
 | |
| {
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Checks if a specified offset is valid in the GHCB.
 | |
| 
 | |
|   The ValidBitmap area represents the areas of the GHCB that have been marked
 | |
|   valid. Return whether the bit in the ValidBitmap is set for the input offset.
 | |
| 
 | |
|   @param[in]  Ghcb            A pointer to the GHCB
 | |
|   @param[in]  Offset          Qword offset in the GHCB to mark valid
 | |
| 
 | |
|   @retval TRUE                Offset is marked valid in the GHCB
 | |
|   @retval FALSE               Offset is not marked valid in the GHCB
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| VmgIsOffsetValid (
 | |
|   IN GHCB           *Ghcb,
 | |
|   IN GHCB_REGISTER  Offset
 | |
|   )
 | |
| {
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Handle a #VC exception.
 | |
| 
 | |
|   Performs the necessary processing to handle a #VC exception.
 | |
| 
 | |
|   The base library function returns an error equal to VC_EXCEPTION,
 | |
|   to be propagated to the standard exception handling stack.
 | |
| 
 | |
|   @param[in, out]  ExceptionType  Pointer to an EFI_EXCEPTION_TYPE to be set
 | |
|                                   as value to use on error.
 | |
|   @param[in, out]  SystemContext  Pointer to EFI_SYSTEM_CONTEXT
 | |
| 
 | |
|   @retval  EFI_SUCCESS            Exception handled
 | |
|   @retval  EFI_UNSUPPORTED        #VC not supported, (new) exception value to
 | |
|                                   propagate provided
 | |
|   @retval  EFI_PROTOCOL_ERROR     #VC handling failed, (new) exception value to
 | |
|                                   propagate provided
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VmgExitHandleVc (
 | |
|   IN OUT EFI_EXCEPTION_TYPE  *ExceptionType,
 | |
|   IN OUT EFI_SYSTEM_CONTEXT  SystemContext
 | |
|   )
 | |
| {
 | |
|   *ExceptionType = VC_EXCEPTION;
 | |
| 
 | |
|   return EFI_UNSUPPORTED;
 | |
| }
 |