]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/IndustryStandard/Tdx.h
MdePkg: Add Tdx.h
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Tdx.h
diff --git a/MdePkg/Include/IndustryStandard/Tdx.h b/MdePkg/Include/IndustryStandard/Tdx.h
new file mode 100644 (file)
index 0000000..81df136
--- /dev/null
@@ -0,0 +1,203 @@
+/** @file\r
+  Intel Trust Domain Extension definitions\r
+  Detailed information is in below document:\r
+  https://software.intel.com/content/dam/develop/external/us/en/documents\r
+  /tdx-module-1eas-v0.85.039.pdf\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 MDE_PKG_TDX_H_\r
+#define MDE_PKG_TDX_H_\r
+\r
+#define EXIT_REASON_EXTERNAL_INTERRUPT  1\r
+#define EXIT_REASON_TRIPLE_FAULT        2\r
+\r
+#define EXIT_REASON_PENDING_INTERRUPT    7\r
+#define EXIT_REASON_NMI_WINDOW           8\r
+#define EXIT_REASON_TASK_SWITCH          9\r
+#define EXIT_REASON_CPUID                10\r
+#define EXIT_REASON_HLT                  12\r
+#define EXIT_REASON_INVD                 13\r
+#define EXIT_REASON_INVLPG               14\r
+#define EXIT_REASON_RDPMC                15\r
+#define EXIT_REASON_RDTSC                16\r
+#define EXIT_REASON_VMCALL               18\r
+#define EXIT_REASON_VMCLEAR              19\r
+#define EXIT_REASON_VMLAUNCH             20\r
+#define EXIT_REASON_VMPTRLD              21\r
+#define EXIT_REASON_VMPTRST              22\r
+#define EXIT_REASON_VMREAD               23\r
+#define EXIT_REASON_VMRESUME             24\r
+#define EXIT_REASON_VMWRITE              25\r
+#define EXIT_REASON_VMOFF                26\r
+#define EXIT_REASON_VMON                 27\r
+#define EXIT_REASON_CR_ACCESS            28\r
+#define EXIT_REASON_DR_ACCESS            29\r
+#define EXIT_REASON_IO_INSTRUCTION       30\r
+#define EXIT_REASON_MSR_READ             31\r
+#define EXIT_REASON_MSR_WRITE            32\r
+#define EXIT_REASON_INVALID_STATE        33\r
+#define EXIT_REASON_MSR_LOAD_FAIL        34\r
+#define EXIT_REASON_MWAIT_INSTRUCTION    36\r
+#define EXIT_REASON_MONITOR_TRAP_FLAG    37\r
+#define EXIT_REASON_MONITOR_INSTRUCTION  39\r
+#define EXIT_REASON_PAUSE_INSTRUCTION    40\r
+#define EXIT_REASON_MCE_DURING_VMENTRY   41\r
+#define EXIT_REASON_TPR_BELOW_THRESHOLD  43\r
+#define EXIT_REASON_APIC_ACCESS          44\r
+#define EXIT_REASON_EOI_INDUCED          45\r
+#define EXIT_REASON_GDTR_IDTR            46\r
+#define EXIT_REASON_LDTR_TR              47\r
+#define EXIT_REASON_EPT_VIOLATION        48\r
+#define EXIT_REASON_EPT_MISCONFIG        49\r
+#define EXIT_REASON_INVEPT               50\r
+#define EXIT_REASON_RDTSCP               51\r
+#define EXIT_REASON_PREEMPTION_TIMER     52\r
+#define EXIT_REASON_INVVPID              53\r
+#define EXIT_REASON_WBINVD               54\r
+#define EXIT_REASON_XSETBV               55\r
+#define EXIT_REASON_APIC_WRITE           56\r
+#define EXIT_REASON_RDRAND               57\r
+#define EXIT_REASON_INVPCID              58\r
+#define EXIT_REASON_VMFUNC               59\r
+#define EXIT_REASON_ENCLS                60\r
+#define EXIT_REASON_RDSEED               61\r
+#define EXIT_REASON_PML_FULL             62\r
+#define EXIT_REASON_XSAVES               63\r
+#define EXIT_REASON_XRSTORS              64\r
+\r
+// TDCALL API Function Completion Status Codes\r
+#define TDX_EXIT_REASON_SUCCESS                0x0000000000000000\r
+#define TDX_EXIT_REASON_PAGE_ALREADY_ACCEPTED  0x00000B0A00000000\r
+#define TDX_EXIT_REASON_PAGE_SIZE_MISMATCH     0xC0000B0B00000000\r
+#define TDX_EXIT_REASON_OPERAND_INVALID        0xC000010000000000\r
+#define TDX_EXIT_REASON_OPERAND_BUSY           0x8000020000000000\r
+\r
+// TDCALL [TDG.MEM.PAGE.ACCEPT] page size\r
+#define TDCALL_ACCEPT_PAGE_SIZE_4K  0\r
+#define TDCALL_ACCEPT_PAGE_SIZE_2M  1\r
+#define TDCALL_ACCEPT_PAGE_SIZE_1G  2\r
+\r
+#define TDCALL_TDVMCALL      0\r
+#define TDCALL_TDINFO        1\r
+#define TDCALL_TDEXTENDRTMR  2\r
+#define TDCALL_TDGETVEINFO   3\r
+#define TDCALL_TDREPORT      4\r
+#define TDCALL_TDSETCPUIDVE  5\r
+#define TDCALL_TDACCEPTPAGE  6\r
+\r
+#define TDVMCALL_CPUID    0x0000a\r
+#define TDVMCALL_HALT     0x0000c\r
+#define TDVMCALL_IO       0x0001e\r
+#define TDVMCALL_RDMSR    0x0001f\r
+#define TDVMCALL_WRMSR    0x00020\r
+#define TDVMCALL_MMIO     0x00030\r
+#define TDVMCALL_PCONFIG  0x00041\r
+\r
+#define TDVMCALL_GET_TDVMCALL_INFO   0x10000\r
+#define TDVMCALL_MAPGPA              0x10001\r
+#define TDVMCALL_GET_QUOTE           0x10002\r
+#define TDVMCALL_REPORT_FATAL_ERR    0x10003\r
+#define TDVMCALL_SETUP_EVENT_NOTIFY  0x10004\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+  UINT64    Data[6];\r
+} TDCALL_GENERIC_RETURN_DATA;\r
+\r
+typedef struct {\r
+  UINT64    Gpaw;\r
+  UINT64    Attributes;\r
+  UINT32    MaxVcpus;\r
+  UINT32    NumVcpus;\r
+  UINT64    Resv[3];\r
+} TDCALL_INFO_RETURN_DATA;\r
+\r
+typedef union {\r
+  UINT64    Val;\r
+  struct {\r
+    UINT32    Size      : 3;\r
+    UINT32    Direction : 1;\r
+    UINT32    String    : 1;\r
+    UINT32    Rep       : 1;\r
+    UINT32    Encoding  : 1;\r
+    UINT32    Resv      : 9;\r
+    UINT32    Port      : 16;\r
+    UINT32    Resv2;\r
+  } Io;\r
+} VMX_EXIT_QUALIFICATION;\r
+\r
+typedef struct {\r
+  UINT32                    ExitReason;\r
+  UINT32                    Resv;\r
+  VMX_EXIT_QUALIFICATION    ExitQualification;\r
+  UINT64                    GuestLA;\r
+  UINT64                    GuestPA;\r
+  UINT32                    ExitInstructionLength;\r
+  UINT32                    ExitInstructionInfo;\r
+  UINT32                    Resv1;\r
+} TDCALL_VEINFO_RETURN_DATA;\r
+\r
+typedef union {\r
+  TDCALL_GENERIC_RETURN_DATA    Generic;\r
+  TDCALL_INFO_RETURN_DATA       TdInfo;\r
+  TDCALL_VEINFO_RETURN_DATA     VeInfo;\r
+} TD_RETURN_DATA;\r
+\r
+/* data structure used in TDREPORT_STRUCT */\r
+typedef struct {\r
+  UINT8    Type;\r
+  UINT8    Subtype;\r
+  UINT8    Version;\r
+  UINT8    Rsvd;\r
+} TD_REPORT_TYPE;\r
+\r
+typedef struct {\r
+  TD_REPORT_TYPE    ReportType;\r
+  UINT8             Rsvd1[12];\r
+  UINT8             CpuSvn[16];\r
+  UINT8             TeeTcbInfoHash[48];\r
+  UINT8             TeeInfoHash[48];\r
+  UINT8             ReportData[64];\r
+  UINT8             Rsvd2[32];\r
+  UINT8             Mac[32];\r
+} REPORTMACSTRUCT;\r
+\r
+typedef struct {\r
+  UINT8    Seam[2];\r
+  UINT8    Rsvd[14];\r
+} TEE_TCB_SVN;\r
+\r
+typedef struct {\r
+  UINT8          Valid[8];\r
+  TEE_TCB_SVN    TeeTcbSvn;\r
+  UINT8          Mrseam[48];\r
+  UINT8          Mrsignerseam[48];\r
+  UINT8          Attributes[8];\r
+  UINT8          Rsvd[111];\r
+} TEE_TCB_INFO;\r
+\r
+typedef struct {\r
+  UINT8    Attributes[8];\r
+  UINT8    Xfam[8];\r
+  UINT8    Mrtd[48];\r
+  UINT8    Mrconfigid[48];\r
+  UINT8    Mrowner[48];\r
+  UINT8    Mrownerconfig[48];\r
+  UINT8    Rtmrs[4][48];\r
+  UINT8    Rsvd[112];\r
+} TDINFO;\r
+\r
+typedef struct {\r
+  REPORTMACSTRUCT    ReportMacStruct;\r
+  TEE_TCB_INFO       TeeTcbInfo;\r
+  UINT8              Rsvd[17];\r
+  TDINFO             Tdinfo;\r
+} TDREPORT_STRUCT;\r
+\r
+#pragma pack()\r
+\r
+#endif\r