]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/Include/WorkArea.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / Include / WorkArea.h
1 /** @file
2
3 Work Area structure definition
4
5 Copyright (c) 2021, AMD Inc.
6
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8 **/
9
10 #ifndef __OVMF_WORK_AREA_H__
11 #define __OVMF_WORK_AREA_H__
12
13 #include <ConfidentialComputingGuestAttr.h>
14 #include <IndustryStandard/Tpm20.h>
15
16 //
17 // Confidential computing work area header definition. Any change
18 // to the structure need to be kept in sync with the
19 // PcdOvmfConfidentialComputingWorkAreaHeader.
20 //
21 // PcdOvmfConfidentialComputingWorkAreaHeader ==
22 // sizeof (CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER)
23 // PcdOvmfConfidentialComputingWorkAreaHeader defined in:
24 // OvmfPkg/OvmfPkg.dec
25 // OvmfPkg/Include/Fdf/OvmfPkgDefines.fdf.inc
26 typedef struct _CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER {
27 UINT8 GuestType;
28 UINT8 Reserved1[3];
29 } CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER;
30
31 //
32 // Internal structure for holding SEV-ES information needed during SEC phase
33 // and valid only during SEC phase and early PEI during platform
34 // initialization.
35 //
36 // This structure is also used by assembler files:
37 // OvmfPkg/ResetVector/ResetVector.nasmb
38 // OvmfPkg/ResetVector/Ia32/PageTables64.asm
39 // OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
40 // any changes must stay in sync with its usage.
41 //
42 typedef struct _SEC_SEV_ES_WORK_AREA {
43 //
44 // Hold the SevStatus MSR value read by OvmfPkg/ResetVector/Ia32/AmdSev.c
45 //
46 UINT64 SevStatusMsrValue;
47
48 UINT64 RandomData;
49
50 UINT64 EncryptionMask;
51
52 //
53 // Indicator that the VC handler is called. It is used during the SevFeature
54 // detection in OvmfPkg/ResetVector/Ia32/AmdSev.c
55 //
56 UINT8 ReceivedVc;
57 } SEC_SEV_ES_WORK_AREA;
58
59 //
60 // The SEV work area definition.
61 //
62 typedef struct _SEV_WORK_AREA {
63 CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header;
64
65 SEC_SEV_ES_WORK_AREA SevEsWorkArea;
66 } SEV_WORK_AREA;
67
68 //
69 // Start of TDX Specific WorkArea definition
70 //
71
72 #define TDX_MEASUREMENT_TDHOB_BITMASK 0x1
73 #define TDX_MEASUREMENT_CFVIMG_BITMASK 0x2
74
75 typedef struct _TDX_MEASUREMENTS_DATA {
76 UINT32 MeasurementsBitmap;
77 UINT8 TdHobHashValue[SHA384_DIGEST_SIZE];
78 UINT8 CfvImgHashValue[SHA384_DIGEST_SIZE];
79 } TDX_MEASUREMENTS_DATA;
80
81 //
82 // The TDX work area definition
83 //
84 typedef struct _SEC_TDX_WORK_AREA {
85 UINT32 PageTableReady;
86 UINT32 Gpaw;
87 UINT64 HobList;
88 TDX_MEASUREMENTS_DATA TdxMeasurementsData;
89 } SEC_TDX_WORK_AREA;
90
91 typedef struct _TDX_WORK_AREA {
92 CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header;
93 SEC_TDX_WORK_AREA SecTdxWorkArea;
94 } TDX_WORK_AREA;
95
96 //
97 // End of TDX Specific WorkArea definition
98 //
99
100 typedef union {
101 CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header;
102 SEV_WORK_AREA SevWorkArea;
103 TDX_WORK_AREA TdxWorkArea;
104 } OVMF_WORK_AREA;
105
106 #endif