]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: Add IntelTdx.h in OvmfPkg/Include/IndustryStandard
authorMin Xu <min.m.xu@intel.com>
Fri, 16 Jul 2021 08:14:09 +0000 (16:14 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Sat, 2 Apr 2022 08:15:12 +0000 (08:15 +0000)
RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429

IntelTdx.h defines the defition used by TDX in OvmfPkg:
 - Mailbox related defitions,such as the data structure, command code,
   AP relocation defitions.

See Table 5.44 Multiprocessor Wakeup Mailbox Structure in below link.
https://uefi.org/specs/ACPI/6.4/05_ACPI_Software_Programming_Model/
ACPI_Software_Programming_Model.html#multiprocessor-wakeup-structure

Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Erdem Aktas <erdemaktas@google.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
OvmfPkg/Include/IndustryStandard/IntelTdx.h [new file with mode: 0644]

diff --git a/OvmfPkg/Include/IndustryStandard/IntelTdx.h b/OvmfPkg/Include/IndustryStandard/IntelTdx.h
new file mode 100644 (file)
index 0000000..cc849be
--- /dev/null
@@ -0,0 +1,67 @@
+/** @file\r
+  Defines the defitions used by TDX in OvmfPkg.\r
+\r
+  Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef OVMF_INTEL_TDX_H_\r
+#define OVMF_INTEL_TDX_H_\r
+\r
+#include <PiPei.h>\r
+#include <Library/BaseLib.h>\r
+#include <Uefi/UefiSpec.h>\r
+#include <Uefi/UefiBaseType.h>\r
+\r
+#define MP_CPU_PROTECTED_MODE_MAILBOX_APICID_INVALID    0xFFFFFFFF\r
+#define MP_CPU_PROTECTED_MODE_MAILBOX_APICID_BROADCAST  0xFFFFFFFE\r
+\r
+typedef enum {\r
+  MpProtectedModeWakeupCommandNoop        = 0,\r
+  MpProtectedModeWakeupCommandWakeup      = 1,\r
+  MpProtectedModeWakeupCommandSleep       = 2,\r
+  MpProtectedModeWakeupCommandAcceptPages = 3,\r
+} MP_CPU_PROTECTED_MODE_WAKEUP_CMD;\r
+\r
+#pragma pack(1)\r
+\r
+//\r
+// Describes the CPU MAILBOX control structure use to\r
+// wakeup cpus spinning in long mode\r
+//\r
+typedef struct {\r
+  UINT16    Command;\r
+  UINT16    Resv;\r
+  UINT32    ApicId;\r
+  UINT64    WakeUpVector;\r
+  UINT8     ResvForOs[2032];\r
+  //\r
+  // Arguments available for wakeup code\r
+  //\r
+  UINT64    WakeUpArgs1;\r
+  UINT64    WakeUpArgs2;\r
+  UINT64    WakeUpArgs3;\r
+  UINT64    WakeUpArgs4;\r
+  UINT8     Pad1[0xe0];\r
+  UINT64    NumCpusArriving;\r
+  UINT8     Pad2[0xf8];\r
+  UINT64    NumCpusExiting;\r
+  UINT32    Tallies[256];\r
+  UINT8     Errors[256];\r
+  UINT8     Pad3[0xf8];\r
+} MP_WAKEUP_MAILBOX;\r
+\r
+//\r
+// AP relocation code information including code address and size,\r
+// this structure will be shared be C code and assembly code.\r
+// It is natural aligned by design.\r
+//\r
+typedef struct {\r
+  UINT8    *RelocateApLoopFuncAddress;\r
+  UINTN    RelocateApLoopFuncSize;\r
+} MP_RELOCATION_MAP;\r
+\r
+#pragma pack()\r
+\r
+#endif\r