]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/IndustryStandard/Tdx.h
MdePkg: Add Tdx.h
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Tdx.h
CommitLineData
3f0c788a
MX
1/** @file\r
2 Intel Trust Domain Extension definitions\r
3 Detailed information is in below document:\r
4 https://software.intel.com/content/dam/develop/external/us/en/documents\r
5 /tdx-module-1eas-v0.85.039.pdf\r
6\r
7 Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR>\r
8 SPDX-License-Identifier: BSD-2-Clause-Patent\r
9\r
10**/\r
11\r
12#ifndef MDE_PKG_TDX_H_\r
13#define MDE_PKG_TDX_H_\r
14\r
15#define EXIT_REASON_EXTERNAL_INTERRUPT 1\r
16#define EXIT_REASON_TRIPLE_FAULT 2\r
17\r
18#define EXIT_REASON_PENDING_INTERRUPT 7\r
19#define EXIT_REASON_NMI_WINDOW 8\r
20#define EXIT_REASON_TASK_SWITCH 9\r
21#define EXIT_REASON_CPUID 10\r
22#define EXIT_REASON_HLT 12\r
23#define EXIT_REASON_INVD 13\r
24#define EXIT_REASON_INVLPG 14\r
25#define EXIT_REASON_RDPMC 15\r
26#define EXIT_REASON_RDTSC 16\r
27#define EXIT_REASON_VMCALL 18\r
28#define EXIT_REASON_VMCLEAR 19\r
29#define EXIT_REASON_VMLAUNCH 20\r
30#define EXIT_REASON_VMPTRLD 21\r
31#define EXIT_REASON_VMPTRST 22\r
32#define EXIT_REASON_VMREAD 23\r
33#define EXIT_REASON_VMRESUME 24\r
34#define EXIT_REASON_VMWRITE 25\r
35#define EXIT_REASON_VMOFF 26\r
36#define EXIT_REASON_VMON 27\r
37#define EXIT_REASON_CR_ACCESS 28\r
38#define EXIT_REASON_DR_ACCESS 29\r
39#define EXIT_REASON_IO_INSTRUCTION 30\r
40#define EXIT_REASON_MSR_READ 31\r
41#define EXIT_REASON_MSR_WRITE 32\r
42#define EXIT_REASON_INVALID_STATE 33\r
43#define EXIT_REASON_MSR_LOAD_FAIL 34\r
44#define EXIT_REASON_MWAIT_INSTRUCTION 36\r
45#define EXIT_REASON_MONITOR_TRAP_FLAG 37\r
46#define EXIT_REASON_MONITOR_INSTRUCTION 39\r
47#define EXIT_REASON_PAUSE_INSTRUCTION 40\r
48#define EXIT_REASON_MCE_DURING_VMENTRY 41\r
49#define EXIT_REASON_TPR_BELOW_THRESHOLD 43\r
50#define EXIT_REASON_APIC_ACCESS 44\r
51#define EXIT_REASON_EOI_INDUCED 45\r
52#define EXIT_REASON_GDTR_IDTR 46\r
53#define EXIT_REASON_LDTR_TR 47\r
54#define EXIT_REASON_EPT_VIOLATION 48\r
55#define EXIT_REASON_EPT_MISCONFIG 49\r
56#define EXIT_REASON_INVEPT 50\r
57#define EXIT_REASON_RDTSCP 51\r
58#define EXIT_REASON_PREEMPTION_TIMER 52\r
59#define EXIT_REASON_INVVPID 53\r
60#define EXIT_REASON_WBINVD 54\r
61#define EXIT_REASON_XSETBV 55\r
62#define EXIT_REASON_APIC_WRITE 56\r
63#define EXIT_REASON_RDRAND 57\r
64#define EXIT_REASON_INVPCID 58\r
65#define EXIT_REASON_VMFUNC 59\r
66#define EXIT_REASON_ENCLS 60\r
67#define EXIT_REASON_RDSEED 61\r
68#define EXIT_REASON_PML_FULL 62\r
69#define EXIT_REASON_XSAVES 63\r
70#define EXIT_REASON_XRSTORS 64\r
71\r
72// TDCALL API Function Completion Status Codes\r
73#define TDX_EXIT_REASON_SUCCESS 0x0000000000000000\r
74#define TDX_EXIT_REASON_PAGE_ALREADY_ACCEPTED 0x00000B0A00000000\r
75#define TDX_EXIT_REASON_PAGE_SIZE_MISMATCH 0xC0000B0B00000000\r
76#define TDX_EXIT_REASON_OPERAND_INVALID 0xC000010000000000\r
77#define TDX_EXIT_REASON_OPERAND_BUSY 0x8000020000000000\r
78\r
79// TDCALL [TDG.MEM.PAGE.ACCEPT] page size\r
80#define TDCALL_ACCEPT_PAGE_SIZE_4K 0\r
81#define TDCALL_ACCEPT_PAGE_SIZE_2M 1\r
82#define TDCALL_ACCEPT_PAGE_SIZE_1G 2\r
83\r
84#define TDCALL_TDVMCALL 0\r
85#define TDCALL_TDINFO 1\r
86#define TDCALL_TDEXTENDRTMR 2\r
87#define TDCALL_TDGETVEINFO 3\r
88#define TDCALL_TDREPORT 4\r
89#define TDCALL_TDSETCPUIDVE 5\r
90#define TDCALL_TDACCEPTPAGE 6\r
91\r
92#define TDVMCALL_CPUID 0x0000a\r
93#define TDVMCALL_HALT 0x0000c\r
94#define TDVMCALL_IO 0x0001e\r
95#define TDVMCALL_RDMSR 0x0001f\r
96#define TDVMCALL_WRMSR 0x00020\r
97#define TDVMCALL_MMIO 0x00030\r
98#define TDVMCALL_PCONFIG 0x00041\r
99\r
100#define TDVMCALL_GET_TDVMCALL_INFO 0x10000\r
101#define TDVMCALL_MAPGPA 0x10001\r
102#define TDVMCALL_GET_QUOTE 0x10002\r
103#define TDVMCALL_REPORT_FATAL_ERR 0x10003\r
104#define TDVMCALL_SETUP_EVENT_NOTIFY 0x10004\r
105\r
106#pragma pack(1)\r
107typedef struct {\r
108 UINT64 Data[6];\r
109} TDCALL_GENERIC_RETURN_DATA;\r
110\r
111typedef struct {\r
112 UINT64 Gpaw;\r
113 UINT64 Attributes;\r
114 UINT32 MaxVcpus;\r
115 UINT32 NumVcpus;\r
116 UINT64 Resv[3];\r
117} TDCALL_INFO_RETURN_DATA;\r
118\r
119typedef union {\r
120 UINT64 Val;\r
121 struct {\r
122 UINT32 Size : 3;\r
123 UINT32 Direction : 1;\r
124 UINT32 String : 1;\r
125 UINT32 Rep : 1;\r
126 UINT32 Encoding : 1;\r
127 UINT32 Resv : 9;\r
128 UINT32 Port : 16;\r
129 UINT32 Resv2;\r
130 } Io;\r
131} VMX_EXIT_QUALIFICATION;\r
132\r
133typedef struct {\r
134 UINT32 ExitReason;\r
135 UINT32 Resv;\r
136 VMX_EXIT_QUALIFICATION ExitQualification;\r
137 UINT64 GuestLA;\r
138 UINT64 GuestPA;\r
139 UINT32 ExitInstructionLength;\r
140 UINT32 ExitInstructionInfo;\r
141 UINT32 Resv1;\r
142} TDCALL_VEINFO_RETURN_DATA;\r
143\r
144typedef union {\r
145 TDCALL_GENERIC_RETURN_DATA Generic;\r
146 TDCALL_INFO_RETURN_DATA TdInfo;\r
147 TDCALL_VEINFO_RETURN_DATA VeInfo;\r
148} TD_RETURN_DATA;\r
149\r
150/* data structure used in TDREPORT_STRUCT */\r
151typedef struct {\r
152 UINT8 Type;\r
153 UINT8 Subtype;\r
154 UINT8 Version;\r
155 UINT8 Rsvd;\r
156} TD_REPORT_TYPE;\r
157\r
158typedef struct {\r
159 TD_REPORT_TYPE ReportType;\r
160 UINT8 Rsvd1[12];\r
161 UINT8 CpuSvn[16];\r
162 UINT8 TeeTcbInfoHash[48];\r
163 UINT8 TeeInfoHash[48];\r
164 UINT8 ReportData[64];\r
165 UINT8 Rsvd2[32];\r
166 UINT8 Mac[32];\r
167} REPORTMACSTRUCT;\r
168\r
169typedef struct {\r
170 UINT8 Seam[2];\r
171 UINT8 Rsvd[14];\r
172} TEE_TCB_SVN;\r
173\r
174typedef struct {\r
175 UINT8 Valid[8];\r
176 TEE_TCB_SVN TeeTcbSvn;\r
177 UINT8 Mrseam[48];\r
178 UINT8 Mrsignerseam[48];\r
179 UINT8 Attributes[8];\r
180 UINT8 Rsvd[111];\r
181} TEE_TCB_INFO;\r
182\r
183typedef struct {\r
184 UINT8 Attributes[8];\r
185 UINT8 Xfam[8];\r
186 UINT8 Mrtd[48];\r
187 UINT8 Mrconfigid[48];\r
188 UINT8 Mrowner[48];\r
189 UINT8 Mrownerconfig[48];\r
190 UINT8 Rtmrs[4][48];\r
191 UINT8 Rsvd[112];\r
192} TDINFO;\r
193\r
194typedef struct {\r
195 REPORTMACSTRUCT ReportMacStruct;\r
196 TEE_TCB_INFO TeeTcbInfo;\r
197 UINT8 Rsvd[17];\r
198 TDINFO Tdinfo;\r
199} TDREPORT_STRUCT;\r
200\r
201#pragma pack()\r
202\r
203#endif\r