mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3582 In order to probe the SEV feature the BaseMemEncryptLib and Reset vector reads the SEV_STATUS MSR. Cache the value on the first read in the workarea. In the next patches the value saved in the workarea will be used by the BaseMemEncryptLib. This not only eliminates the extra MSR reads it also helps cleaning up the code in BaseMemEncryptLib. Cc: Min Xu <min.m.xu@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Erdem Aktas <erdemaktas@google.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Acked-by: Jiewen Yao <jiewen.yao@intel.com>
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Work Area structure definition
 | 
						|
 | 
						|
  Copyright (c) 2021, AMD Inc.
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __OVMF_WORK_AREA_H__
 | 
						|
#define __OVMF_WORK_AREA_H__
 | 
						|
 | 
						|
//
 | 
						|
// Guest type for the work area
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  GUEST_TYPE_NON_ENCRYPTED,
 | 
						|
  GUEST_TYPE_AMD_SEV,
 | 
						|
  GUEST_TYPE_INTEL_TDX,
 | 
						|
} GUEST_TYPE;
 | 
						|
 | 
						|
//
 | 
						|
// Confidential computing work area header definition. Any change
 | 
						|
// to the structure need to be kept in sync with the
 | 
						|
// PcdOvmfConfidentialComputingWorkAreaHeader.
 | 
						|
//
 | 
						|
// PcdOvmfConfidentialComputingWorkAreaHeader ==
 | 
						|
//   sizeof (CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER)
 | 
						|
// PcdOvmfConfidentialComputingWorkAreaHeader defined in:
 | 
						|
//   OvmfPkg/OvmfPkg.dec
 | 
						|
//   OvmfPkg/OvmfPkgDefines.fdf.inc
 | 
						|
typedef struct _CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER {
 | 
						|
  UINT8    GuestType;
 | 
						|
  UINT8    Reserved1[3];
 | 
						|
} CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER;
 | 
						|
 | 
						|
//
 | 
						|
// Internal structure for holding SEV-ES information needed during SEC phase
 | 
						|
// and valid only during SEC phase and early PEI during platform
 | 
						|
// initialization.
 | 
						|
//
 | 
						|
// This structure is also used by assembler files:
 | 
						|
//   OvmfPkg/ResetVector/ResetVector.nasmb
 | 
						|
//   OvmfPkg/ResetVector/Ia32/PageTables64.asm
 | 
						|
//   OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
 | 
						|
// any changes must stay in sync with its usage.
 | 
						|
//
 | 
						|
typedef struct _SEC_SEV_ES_WORK_AREA {
 | 
						|
  //
 | 
						|
  // Hold the SevStatus MSR value read by OvmfPkg/ResetVector/Ia32/AmdSev.c
 | 
						|
  //
 | 
						|
  UINT64    SevStatusMsrValue;
 | 
						|
 | 
						|
  UINT64    RandomData;
 | 
						|
 | 
						|
  UINT64    EncryptionMask;
 | 
						|
 | 
						|
  //
 | 
						|
  // Indicator that the VC handler is called. It is used during the SevFeature
 | 
						|
  // detection in OvmfPkg/ResetVector/Ia32/AmdSev.c
 | 
						|
  //
 | 
						|
  UINT8     ReceivedVc;
 | 
						|
} SEC_SEV_ES_WORK_AREA;
 | 
						|
 | 
						|
//
 | 
						|
// The SEV work area definition.
 | 
						|
//
 | 
						|
typedef struct _SEV_WORK_AREA {
 | 
						|
  CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER    Header;
 | 
						|
 | 
						|
  SEC_SEV_ES_WORK_AREA                       SevEsWorkArea;
 | 
						|
} SEV_WORK_AREA;
 | 
						|
 | 
						|
typedef union {
 | 
						|
  CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER    Header;
 | 
						|
  SEV_WORK_AREA                              SevWorkArea;
 | 
						|
} OVMF_WORK_AREA;
 | 
						|
 | 
						|
#endif
 |