gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSnpSecretsBase|0|UINT32|0x58\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSnpSecretsSize|0|UINT32|0x59\r
\r
+ ## The base address and size of a CPUID Area that contains the hypervisor\r
+ # provided CPUID results. In the case of SEV-SNP, the CPUID results are\r
+ # filtered by the SEV-SNP firmware. If this is set in the .fdf, the\r
+ # platform is responsible to reserve this area from DXE phase overwrites.\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidBase|0|UINT32|0x60\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidSize|0|UINT32|0x61\r
+\r
[PcdsDynamic, PcdsDynamicEx]\r
gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable|FALSE|BOOLEAN|0x10\r
0x00D000|0x001000\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSnpSecretsBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSnpSecretsSize\r
\r
+0x00E000|0x001000\r
+gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidSize\r
+\r
0x010000|0x010000\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize\r
\r
gUefiOvmfPkgTokenSpaceGuid.PcdBfvRawDataSize\r
\r
[FixedPcd]\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidBase\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdSevLaunchSecretBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdSevLaunchSecretSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdQemuHashTableBase\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
\r
%include "X64/IntelTdxMetadata.asm"\r
%include "Ia32/Flat32ToFlat64.asm"\r
; AMD SEV-SNP specific sections\r
%define OVMF_SECTION_TYPE_SNP_SECRETS 0x2\r
\r
+;\r
+; The section contains the hypervisor pre-populated CPUID values.\r
+; In the case of SEV-SNP, the CPUID values are filtered and measured by\r
+; the SEV-SNP firmware.\r
+; The CPUID format is documented in SEV-SNP firmware spec 0.9 section 7.1\r
+; (CPUID function structure).\r
+;\r
+%define OVMF_SECTION_TYPE_CPUID 0x3\r
+\r
+\r
ALIGN 16\r
\r
TIMES (15 - ((OvmfSevGuidedStructureEnd - OvmfSevGuidedStructureStart + 15) % 16)) DB 0\r
DD SEV_SNP_SECRETS_SIZE\r
DD OVMF_SECTION_TYPE_SNP_SECRETS\r
\r
+; CPUID values\r
+CpuidSec:\r
+ DD CPUID_BASE\r
+ DD CPUID_SIZE\r
+ DD OVMF_SECTION_TYPE_CPUID\r
+\r
OvmfSevGuidedStructureEnd:\r
ALIGN 16\r