0x007000|0x001000\r
gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress|gUefiOvmfPkgTokenSpaceGuid.PcdGuidedExtractHandlerTableSize\r
\r
+0x008000|0x001000\r
+gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaSize\r
+\r
0x010000|0x010000\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize\r
\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize\r
FV = DXEFV\r
\r
+##########################################################################################\r
+# Set the SEV-ES specific work area PCDs (used for all forms of SEV since the\r
+# the SEV STATUS MSR is now saved in the work area)\r
+#\r
+SET gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaBase = $(MEMFD_BASE_ADDRESS) + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfConfidentialComputingWorkAreaHeader\r
+SET gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaSize = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaSize - gUefiOvmfPkgTokenSpaceGuid.PcdOvmfConfidentialComputingWorkAreaHeader\r
+##########################################################################################\r
+\r
################################################################################\r
\r
[FV.SECFV]\r
%include "Ia32/SearchForBfvBase.asm"\r
%include "Ia32/SearchForSecEntry.asm"\r
\r
-%define WORK_AREA_GUEST_TYPE (FixedPcdGet32 (PcdOvmfWorkAreaBase))\r
+%define WORK_AREA_GUEST_TYPE (FixedPcdGet32 (PcdOvmfWorkAreaBase))\r
+%define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))\r
+\r
+%define GHCB_PT_ADDR (FixedPcdGet32 (PcdOvmfSecGhcbPageTableBase))\r
+%define GHCB_BASE (FixedPcdGet32 (PcdOvmfSecGhcbBase))\r
+%define GHCB_SIZE (FixedPcdGet32 (PcdOvmfSecGhcbSize))\r
+%define SEV_ES_WORK_AREA (FixedPcdGet32 (PcdSevEsWorkAreaBase))\r
+%define SEV_ES_WORK_AREA_SIZE 25\r
+%define SEV_ES_WORK_AREA_STATUS_MSR (FixedPcdGet32 (PcdSevEsWorkAreaBase))\r
+%define SEV_ES_WORK_AREA_RDRAND (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 8)\r
+%define SEV_ES_WORK_AREA_ENC_MASK (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 16)\r
+%define SEV_ES_WORK_AREA_RECEIVED_VC (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 24)\r
+%define SEV_ES_VC_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))\r
+%define SEV_SNP_SECRETS_BASE (FixedPcdGet32 (PcdOvmfSnpSecretsBase))\r
+%define SEV_SNP_SECRETS_SIZE (FixedPcdGet32 (PcdOvmfSnpSecretsSize))\r
+%define CPUID_BASE (FixedPcdGet32 (PcdOvmfCpuidBase))\r
+%define CPUID_SIZE (FixedPcdGet32 (PcdOvmfCpuidSize))\r
+%define SNP_SEC_MEM_BASE_DESC_1 (FixedPcdGet32 (PcdOvmfSecPageTablesBase))\r
+%define SNP_SEC_MEM_SIZE_DESC_1 (FixedPcdGet32 (PcdOvmfSecGhcbBase) - SNP_SEC_MEM_BASE_DESC_1)\r
+;\r
+; The PcdOvmfSecGhcbBase reserves two GHCB pages. The first page is used\r
+; as GHCB shared page and second is used for bookkeeping to support the\r
+; nested GHCB in SEC phase. The bookkeeping page is mapped private. The VMM\r
+; does not need to validate the shared page but it need to validate the\r
+; bookkeeping page.\r
+;\r
+%define SNP_SEC_MEM_BASE_DESC_2 (GHCB_BASE + 0x1000)\r
+%define SNP_SEC_MEM_SIZE_DESC_2 (SEV_SNP_SECRETS_BASE - SNP_SEC_MEM_BASE_DESC_2)\r
+%define SNP_SEC_MEM_BASE_DESC_3 (CPUID_BASE + CPUID_SIZE)\r
+%define SNP_SEC_MEM_SIZE_DESC_3 (FixedPcdGet32 (PcdOvmfPeiMemFvBase) - SNP_SEC_MEM_BASE_DESC_3)\r
\r
%ifdef ARCH_X64\r
#include <AutoGen.h>\r
%define TDX_WORK_AREA_PGTBL_READY (FixedPcdGet32 (PcdOvmfWorkAreaBase) + 4)\r
%define TDX_WORK_AREA_GPAW (FixedPcdGet32 (PcdOvmfWorkAreaBase) + 8)\r
\r
- %define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))\r
-\r
- %define GHCB_PT_ADDR (FixedPcdGet32 (PcdOvmfSecGhcbPageTableBase))\r
- %define GHCB_BASE (FixedPcdGet32 (PcdOvmfSecGhcbBase))\r
- %define GHCB_SIZE (FixedPcdGet32 (PcdOvmfSecGhcbSize))\r
- %define SEV_ES_WORK_AREA (FixedPcdGet32 (PcdSevEsWorkAreaBase))\r
- %define SEV_ES_WORK_AREA_SIZE 25\r
- %define SEV_ES_WORK_AREA_STATUS_MSR (FixedPcdGet32 (PcdSevEsWorkAreaBase))\r
- %define SEV_ES_WORK_AREA_RDRAND (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 8)\r
- %define SEV_ES_WORK_AREA_ENC_MASK (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 16)\r
- %define SEV_ES_WORK_AREA_RECEIVED_VC (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 24)\r
- %define SEV_ES_VC_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))\r
- %define SEV_SNP_SECRETS_BASE (FixedPcdGet32 (PcdOvmfSnpSecretsBase))\r
- %define SEV_SNP_SECRETS_SIZE (FixedPcdGet32 (PcdOvmfSnpSecretsSize))\r
- %define CPUID_BASE (FixedPcdGet32 (PcdOvmfCpuidBase))\r
- %define CPUID_SIZE (FixedPcdGet32 (PcdOvmfCpuidSize))\r
- %define SNP_SEC_MEM_BASE_DESC_1 (FixedPcdGet32 (PcdOvmfSecPageTablesBase))\r
- %define SNP_SEC_MEM_SIZE_DESC_1 (FixedPcdGet32 (PcdOvmfSecGhcbBase) - SNP_SEC_MEM_BASE_DESC_1)\r
- ;\r
- ; The PcdOvmfSecGhcbBase reserves two GHCB pages. The first page is used\r
- ; as GHCB shared page and second is used for bookkeeping to support the\r
- ; nested GHCB in SEC phase. The bookkeeping page is mapped private. The VMM\r
- ; does not need to validate the shared page but it need to validate the\r
- ; bookkeeping page.\r
- ;\r
- %define SNP_SEC_MEM_BASE_DESC_2 (GHCB_BASE + 0x1000)\r
- %define SNP_SEC_MEM_SIZE_DESC_2 (SEV_SNP_SECRETS_BASE - SNP_SEC_MEM_BASE_DESC_2)\r
- %define SNP_SEC_MEM_BASE_DESC_3 (CPUID_BASE + CPUID_SIZE)\r
- %define SNP_SEC_MEM_SIZE_DESC_3 (FixedPcdGet32 (PcdOvmfPeiMemFvBase) - SNP_SEC_MEM_BASE_DESC_3)\r
-\r
-%include "X64/IntelTdxMetadata.asm"\r
-%include "Ia32/Flat32ToFlat64.asm"\r
-%include "Ia32/AmdSev.asm"\r
-%include "Ia32/PageTables64.asm"\r
-%include "Ia32/IntelTdx.asm"\r
-%include "X64/OvmfSevMetadata.asm"\r
+ %include "X64/IntelTdxMetadata.asm"\r
+ %include "Ia32/Flat32ToFlat64.asm"\r
+ %include "Ia32/PageTables64.asm"\r
+ %include "Ia32/IntelTdx.asm"\r
+ %include "X64/OvmfSevMetadata.asm"\r
%endif\r
\r
+%include "Ia32/AmdSev.asm"\r
+\r
%include "Ia16/Real16ToFlat32.asm"\r
%include "Ia16/Init16.asm"\r
\r