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