]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/ResetVector/ResetVector.nasmb
OvmfPkg: Make an Ia32/X64 hybrid build work with SEV
[mirror_edk2.git] / OvmfPkg / ResetVector / ResetVector.nasmb
index 9421f48189074ee0957a6a9888c772fa9173a3f4..94fbb0a87b37eec03e3f7403fb908b1fc57058b4 100644 (file)
 %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