]>
Commit | Line | Data |
---|---|---|
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 | |
107 | typedef struct {\r | |
108 | UINT64 Data[6];\r | |
109 | } TDCALL_GENERIC_RETURN_DATA;\r | |
110 | \r | |
111 | typedef 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 | |
119 | typedef 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 | |
133 | typedef 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 | |
144 | typedef 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 | |
151 | typedef 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 | |
158 | typedef 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 | |
169 | typedef struct {\r | |
170 | UINT8 Seam[2];\r | |
171 | UINT8 Rsvd[14];\r | |
172 | } TEE_TCB_SVN;\r | |
173 | \r | |
174 | typedef 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 | |
183 | typedef 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 | |
194 | typedef 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 |