--- /dev/null
+/** @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