]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/ResetVector/ResetVector.nasmb
OvmfPkg/ResetVector: pre-validate the data pages used in SEC phase
[mirror_edk2.git] / OvmfPkg / ResetVector / ResetVector.nasmb
CommitLineData
9b9fdbfa
JJ
1;------------------------------------------------------------------------------\r
2; @file\r
3; This file includes all other code files to assemble the reset vector code\r
4;\r
5; Copyright (c) 2008 - 2013, Intel Corporation. All rights reserved.<BR>\r
7cb96c47 6; Copyright (c) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR>\r
b26f0cf9 7; SPDX-License-Identifier: BSD-2-Clause-Patent\r
9b9fdbfa
JJ
8;\r
9;------------------------------------------------------------------------------\r
10\r
11;\r
12; If neither ARCH_IA32 nor ARCH_X64 are defined, then try to include\r
13; Base.h to use the C pre-processor to determine the architecture.\r
14;\r
15%ifndef ARCH_IA32\r
16 %ifndef ARCH_X64\r
17 #include <Base.h>\r
18 #if defined (MDE_CPU_IA32)\r
19 %define ARCH_IA32\r
20 #elif defined (MDE_CPU_X64)\r
21 %define ARCH_X64\r
22 #endif\r
23 %endif\r
24%endif\r
25\r
26%ifdef ARCH_IA32\r
27 %ifdef ARCH_X64\r
28 %error "Only one of ARCH_IA32 or ARCH_X64 can be defined."\r
29 %endif\r
30%elifdef ARCH_X64\r
31%else\r
32 %error "Either ARCH_IA32 or ARCH_X64 must be defined."\r
33%endif\r
34\r
35%include "CommonMacros.inc"\r
36\r
37%include "PostCodes.inc"\r
38\r
39%ifdef DEBUG_PORT80\r
40 %include "Port80Debug.asm"\r
41%elifdef DEBUG_SERIAL\r
42 %include "SerialDebug.asm"\r
43%else\r
44 %include "DebugDisabled.asm"\r
45%endif\r
46\r
47%include "Ia32/SearchForBfvBase.asm"\r
48%include "Ia32/SearchForSecEntry.asm"\r
49\r
11a4af85
BS
50%define WORK_AREA_GUEST_TYPE (FixedPcdGet32 (PcdOvmfWorkAreaBase))\r
51\r
9b9fdbfa 52%ifdef ARCH_X64\r
73d66c58
MH
53 #include <AutoGen.h>\r
54\r
55 %if (FixedPcdGet32 (PcdOvmfSecPageTablesSize) != 0x6000)\r
56 %error "This implementation inherently depends on PcdOvmfSecPageTablesSize"\r
57 %endif\r
58\r
6995a1b7
TL
59 %if (FixedPcdGet32 (PcdOvmfSecGhcbPageTableSize) != 0x1000)\r
60 %error "This implementation inherently depends on PcdOvmfSecGhcbPageTableSize"\r
61 %endif\r
62\r
63 %if (FixedPcdGet32 (PcdOvmfSecGhcbSize) != 0x2000)\r
64 %error "This implementation inherently depends on PcdOvmfSecGhcbSize"\r
65 %endif\r
66\r
67 %if ((FixedPcdGet32 (PcdOvmfSecGhcbBase) >> 21) != \\r
68 ((FixedPcdGet32 (PcdOvmfSecGhcbBase) + FixedPcdGet32 (PcdOvmfSecGhcbSize) - 1) >> 21))\r
69 %error "This implementation inherently depends on PcdOvmfSecGhcbBase not straddling a 2MB boundary"\r
70 %endif\r
71\r
c9ec74a1
MX
72 %define TDX_BFV_RAW_DATA_OFFSET FixedPcdGet32 (PcdBfvRawDataOffset)\r
73 %define TDX_BFV_RAW_DATA_SIZE FixedPcdGet32 (PcdBfvRawDataSize)\r
74 %define TDX_BFV_MEMORY_BASE FixedPcdGet32 (PcdBfvBase)\r
75 %define TDX_BFV_MEMORY_SIZE FixedPcdGet32 (PcdBfvRawDataSize)\r
76\r
77 %define TDX_CFV_RAW_DATA_OFFSET FixedPcdGet32 (PcdCfvRawDataOffset)\r
78 %define TDX_CFV_RAW_DATA_SIZE FixedPcdGet32 (PcdCfvRawDataSize)\r
79 %define TDX_CFV_MEMORY_BASE FixedPcdGet32 (PcdCfvBase),\r
80 %define TDX_CFV_MEMORY_SIZE FixedPcdGet32 (PcdCfvRawDataSize),\r
81\r
82 %define TDX_HEAP_STACK_BASE FixedPcdGet32 (PcdOvmfSecPeiTempRamBase)\r
83 %define TDX_HEAP_STACK_SIZE FixedPcdGet32 (PcdOvmfSecPeiTempRamSize)\r
84\r
85 %define TDX_HOB_MEMORY_BASE FixedPcdGet32 (PcdOvmfSecGhcbBase)\r
86 %define TDX_HOB_MEMORY_SIZE FixedPcdGet32 (PcdOvmfSecGhcbSize)\r
87\r
88 %define TDX_INIT_MEMORY_BASE FixedPcdGet32 (PcdOvmfWorkAreaBase)\r
89 %define TDX_INIT_MEMORY_SIZE (FixedPcdGet32 (PcdOvmfWorkAreaSize) + FixedPcdGet32 (PcdOvmfSecGhcbBackupSize))\r
90\r
91 %define OVMF_PAGE_TABLE_BASE FixedPcdGet32 (PcdOvmfSecPageTablesBase)\r
92 %define OVMF_PAGE_TABLE_SIZE FixedPcdGet32 (PcdOvmfSecPageTablesSize)\r
93\r
94 %define TDX_WORK_AREA_PGTBL_READY (FixedPcdGet32 (PcdOvmfWorkAreaBase) + 4)\r
95 %define TDX_WORK_AREA_GPAW (FixedPcdGet32 (PcdOvmfWorkAreaBase) + 8)\r
96\r
73d66c58 97 %define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))\r
6995a1b7
TL
98\r
99 %define GHCB_PT_ADDR (FixedPcdGet32 (PcdOvmfSecGhcbPageTableBase))\r
100 %define GHCB_BASE (FixedPcdGet32 (PcdOvmfSecGhcbBase))\r
101 %define GHCB_SIZE (FixedPcdGet32 (PcdOvmfSecGhcbSize))\r
8a273218 102 %define SEV_ES_WORK_AREA (FixedPcdGet32 (PcdSevEsWorkAreaBase))\r
7cb96c47 103 %define SEV_ES_WORK_AREA_RDRAND (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 8)\r
3b32be7e 104 %define SEV_ES_WORK_AREA_ENC_MASK (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 16)\r
8a273218 105 %define SEV_ES_VC_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))\r
707c71a0
BS
106 %define SEV_SNP_SECRETS_BASE (FixedPcdGet32 (PcdOvmfSnpSecretsBase))\r
107 %define SEV_SNP_SECRETS_SIZE (FixedPcdGet32 (PcdOvmfSnpSecretsSize))\r
cca9cd3d
BS
108 %define CPUID_BASE (FixedPcdGet32 (PcdOvmfCpuidBase))\r
109 %define CPUID_SIZE (FixedPcdGet32 (PcdOvmfCpuidSize))\r
f2dc28f0
BS
110 %define SNP_SEC_MEM_BASE_DESC_1 (FixedPcdGet32 (PcdOvmfSecPageTablesBase))\r
111 %define SNP_SEC_MEM_SIZE_DESC_1 (FixedPcdGet32 (PcdOvmfSecGhcbBase) - SNP_SEC_MEM_BASE_DESC_1)\r
112 ;\r
113 ; The PcdOvmfSecGhcbBase reserves two GHCB pages. The first page is used\r
114 ; as GHCB shared page and second is used for bookkeeping to support the\r
115 ; nested GHCB in SEC phase. The bookkeeping page is mapped private. The VMM\r
116 ; does not need to validate the shared page but it need to validate the\r
117 ; bookkeeping page.\r
118 ;\r
119 %define SNP_SEC_MEM_BASE_DESC_2 (GHCB_BASE + 0x1000)\r
120 %define SNP_SEC_MEM_SIZE_DESC_2 (SEV_SNP_SECRETS_BASE - SNP_SEC_MEM_BASE_DESC_2)\r
121 %define SNP_SEC_MEM_BASE_DESC_3 (CPUID_BASE + CPUID_SIZE)\r
122 %define SNP_SEC_MEM_SIZE_DESC_3 (FixedPcdGet32 (PcdOvmfPeiMemFvBase) - SNP_SEC_MEM_BASE_DESC_3)\r
c9ec74a1
MX
123\r
124%include "X64/IntelTdxMetadata.asm"\r
7cb96c47 125%include "Ia32/Flat32ToFlat64.asm"\r
b461d676 126%include "Ia32/AmdSev.asm"\r
9b9fdbfa 127%include "Ia32/PageTables64.asm"\r
8b76f235 128%include "Ia32/IntelTdx.asm"\r
3053183d 129%include "X64/OvmfSevMetadata.asm"\r
9b9fdbfa
JJ
130%endif\r
131\r
132%include "Ia16/Real16ToFlat32.asm"\r
133%include "Ia16/Init16.asm"\r
134\r
135%include "Main.asm"\r
136\r
30937f2f 137 %define SEV_ES_AP_RESET_IP FixedPcdGet32 (PcdSevEsWorkAreaBase)\r
224752ec
JB
138 %define SEV_LAUNCH_SECRET_BASE FixedPcdGet32 (PcdSevLaunchSecretBase)\r
139 %define SEV_LAUNCH_SECRET_SIZE FixedPcdGet32 (PcdSevLaunchSecretSize)\r
0deeab36
JB
140 %define SEV_FW_HASH_BLOCK_BASE FixedPcdGet32 (PcdQemuHashTableBase)\r
141 %define SEV_FW_HASH_BLOCK_SIZE FixedPcdGet32 (PcdQemuHashTableSize)\r
9b9fdbfa
JJ
142%include "Ia16/ResetVectorVtf0.asm"\r
143\r