/** @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__ #include #include // // 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/Include/Fdf/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; // // Start of TDX Specific WorkArea definition // #define TDX_MEASUREMENT_TDHOB_BITMASK 0x1 #define TDX_MEASUREMENT_CFVIMG_BITMASK 0x2 typedef struct _TDX_MEASUREMENTS_DATA { UINT32 MeasurementsBitmap; UINT8 TdHobHashValue[SHA384_DIGEST_SIZE]; UINT8 CfvImgHashValue[SHA384_DIGEST_SIZE]; } TDX_MEASUREMENTS_DATA; // // The TDX work area definition // typedef struct _SEC_TDX_WORK_AREA { UINT32 PageTableReady; UINT32 Gpaw; UINT64 HobList; TDX_MEASUREMENTS_DATA TdxMeasurementsData; } SEC_TDX_WORK_AREA; typedef struct _TDX_WORK_AREA { CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header; SEC_TDX_WORK_AREA SecTdxWorkArea; } TDX_WORK_AREA; // // End of TDX Specific WorkArea definition // typedef union { CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header; SEV_WORK_AREA SevWorkArea; TDX_WORK_AREA TdxWorkArea; } OVMF_WORK_AREA; #endif