mirror of https://github.com/acidanthera/audk.git
114 lines
3.1 KiB
C
114 lines
3.1 KiB
C
/** @file
|
|
|
|
Work Area structure definition
|
|
|
|
Copyright (c) 2021 - 2024, AMD Inc.
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#ifndef __OVMF_WORK_AREA_H__
|
|
#define __OVMF_WORK_AREA_H__
|
|
|
|
#include <ConfidentialComputingGuestAttr.h>
|
|
#include <IndustryStandard/Tpm20.h>
|
|
|
|
//
|
|
// 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;
|
|
UINT8 Reserved[7];
|
|
|
|
// Used by SEC to generate Page State Change requests. This should be
|
|
// sized less than an equal to the GHCB shared buffer area to allow a
|
|
// single call to the hypervisor.
|
|
//
|
|
UINT8 WorkBuffer[1024];
|
|
} 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
|