]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/Include/Library/MemEncryptSevLib.h
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / Include / Library / MemEncryptSevLib.h
CommitLineData
a1f22614
BS
1/** @file\r
2\r
3 Define Secure Encrypted Virtualization (SEV) base library helper function\r
4\r
b78de543 5 Copyright (c) 2017 - 2020, AMD Incorporated. All rights reserved.<BR>\r
a1f22614 6\r
b26f0cf9 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a1f22614
BS
8\r
9**/\r
10\r
11#ifndef _MEM_ENCRYPT_SEV_LIB_H_\r
12#define _MEM_ENCRYPT_SEV_LIB_H_\r
13\r
14#include <Base.h>\r
80e67af9 15#include <WorkArea.h>\r
a1f22614 16\r
5667dc43
TL
17//\r
18// Define the maximum number of #VCs allowed (e.g. the level of nesting\r
19// that is allowed => 2 allows for 1 nested #VCs). I this value is changed,\r
20// be sure to increase the size of\r
21// gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBackupSize\r
22// in any FDF file using this PCD.\r
23//\r
ac0a286f 24#define VMGEXIT_MAXIMUM_VC_COUNT 2\r
5667dc43
TL
25\r
26//\r
27// Per-CPU data mapping structure\r
28// Use UINT32 for cached indicators and compare to a specific value\r
29// so that the hypervisor can't indicate a value is cached by just\r
30// writing random data to that area.\r
31//\r
32typedef struct {\r
ac0a286f
MK
33 UINT32 Dr7Cached;\r
34 UINT64 Dr7;\r
5667dc43 35\r
ac0a286f
MK
36 UINTN VcCount;\r
37 VOID *GhcbBackupPages;\r
5667dc43
TL
38} SEV_ES_PER_CPU_DATA;\r
39\r
c330af02
TL
40//\r
41// Memory encryption address range states.\r
42//\r
43typedef enum {\r
44 MemEncryptSevAddressRangeUnencrypted,\r
45 MemEncryptSevAddressRangeEncrypted,\r
46 MemEncryptSevAddressRangeMixed,\r
47 MemEncryptSevAddressRangeError,\r
48} MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE;\r
49\r
0afa1d08
TL
50/**\r
51 Returns a boolean to indicate whether SEV-ES is enabled.\r
52\r
53 @retval TRUE SEV-ES is enabled\r
54 @retval FALSE SEV-ES is not enabled\r
55**/\r
56BOOLEAN\r
57EFIAPI\r
58MemEncryptSevEsIsEnabled (\r
59 VOID\r
60 );\r
61\r
a1f22614
BS
62/**\r
63 Returns a boolean to indicate whether SEV is enabled\r
64\r
d4dd22c7 65 @retval TRUE SEV is enabled\r
a1f22614 66 @retval FALSE SEV is not enabled\r
d4dd22c7 67**/\r
a1f22614
BS
68BOOLEAN\r
69EFIAPI\r
70MemEncryptSevIsEnabled (\r
71 VOID\r
72 );\r
73\r
74/**\r
5b5028e6
LE
75 This function clears memory encryption bit for the memory region specified by\r
76 BaseAddress and NumPages from the current page table context.\r
77\r
78 @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use\r
79 current CR3)\r
80 @param[in] BaseAddress The physical address that is the start\r
81 address of a memory region.\r
82 @param[in] NumPages The number of pages from start memory\r
83 region.\r
5b5028e6
LE
84\r
85 @retval RETURN_SUCCESS The attributes were cleared for the\r
86 memory region.\r
87 @retval RETURN_INVALID_PARAMETER Number of pages is zero.\r
88 @retval RETURN_UNSUPPORTED Clearing the memory encryption attribute\r
89 is not supported\r
90**/\r
a1f22614
BS
91RETURN_STATUS\r
92EFIAPI\r
93MemEncryptSevClearPageEncMask (\r
ac0a286f
MK
94 IN PHYSICAL_ADDRESS Cr3BaseAddress,\r
95 IN PHYSICAL_ADDRESS BaseAddress,\r
96 IN UINTN NumPages\r
a1f22614
BS
97 );\r
98\r
99/**\r
100 This function sets memory encryption bit for the memory region specified by\r
154dcd6c 101 BaseAddress and NumPages from the current page table context.\r
a1f22614 102\r
154dcd6c
LE
103 @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use\r
104 current CR3)\r
105 @param[in] BaseAddress The physical address that is the start\r
106 address of a memory region.\r
107 @param[in] NumPages The number of pages from start memory\r
108 region.\r
a1f22614 109\r
154dcd6c
LE
110 @retval RETURN_SUCCESS The attributes were set for the memory\r
111 region.\r
112 @retval RETURN_INVALID_PARAMETER Number of pages is zero.\r
113 @retval RETURN_UNSUPPORTED Setting the memory encryption attribute\r
114 is not supported\r
115**/\r
a1f22614
BS
116RETURN_STATUS\r
117EFIAPI\r
118MemEncryptSevSetPageEncMask (\r
ac0a286f
MK
119 IN PHYSICAL_ADDRESS Cr3BaseAddress,\r
120 IN PHYSICAL_ADDRESS BaseAddress,\r
121 IN UINTN NumPages\r
a1f22614 122 );\r
61a044c6 123\r
61a044c6
LE
124/**\r
125 Locate the page range that covers the initial (pre-SMBASE-relocation) SMRAM\r
126 Save State Map.\r
127\r
128 @param[out] BaseAddress The base address of the lowest-address page that\r
129 covers the initial SMRAM Save State Map.\r
130\r
131 @param[out] NumberOfPages The number of pages in the page range that covers\r
132 the initial SMRAM Save State Map.\r
133\r
134 @retval RETURN_SUCCESS BaseAddress and NumberOfPages have been set on\r
135 output.\r
136\r
137 @retval RETURN_UNSUPPORTED SMM is unavailable.\r
138**/\r
139RETURN_STATUS\r
140EFIAPI\r
141MemEncryptSevLocateInitialSmramSaveStateMapPages (\r
ac0a286f
MK
142 OUT UINTN *BaseAddress,\r
143 OUT UINTN *NumberOfPages\r
61a044c6 144 );\r
b97dc4b9
TL
145\r
146/**\r
147 Returns the SEV encryption mask.\r
148\r
149 @return The SEV pagetable encryption mask\r
150**/\r
151UINT64\r
152EFIAPI\r
153MemEncryptSevGetEncryptionMask (\r
154 VOID\r
155 );\r
156\r
c330af02
TL
157/**\r
158 Returns the encryption state of the specified virtual address range.\r
159\r
160 @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use\r
161 current CR3)\r
162 @param[in] BaseAddress Base address to check\r
163 @param[in] Length Length of virtual address range\r
164\r
165 @retval MemEncryptSevAddressRangeUnencrypted Address range is mapped\r
166 unencrypted\r
167 @retval MemEncryptSevAddressRangeEncrypted Address range is mapped\r
168 encrypted\r
169 @retval MemEncryptSevAddressRangeMixed Address range is mapped mixed\r
170 @retval MemEncryptSevAddressRangeError Address range is not mapped\r
171**/\r
172MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE\r
173EFIAPI\r
174MemEncryptSevGetAddressRangeState (\r
ac0a286f
MK
175 IN PHYSICAL_ADDRESS Cr3BaseAddress,\r
176 IN PHYSICAL_ADDRESS BaseAddress,\r
177 IN UINTN Length\r
c330af02
TL
178 );\r
179\r
901a9bfc
BS
180/**\r
181 This function clears memory encryption bit for the MMIO region specified by\r
182 BaseAddress and NumPages.\r
183\r
184 @param[in] Cr3BaseAddress Cr3 Base Address (if zero then use\r
185 current CR3)\r
186 @param[in] BaseAddress The physical address that is the start\r
187 address of a MMIO region.\r
188 @param[in] NumPages The number of pages from start memory\r
189 region.\r
190\r
191 @retval RETURN_SUCCESS The attributes were cleared for the\r
192 memory region.\r
193 @retval RETURN_INVALID_PARAMETER Number of pages is zero.\r
194 @retval RETURN_UNSUPPORTED Clearing the memory encryption attribute\r
195 is not supported\r
196**/\r
197RETURN_STATUS\r
198EFIAPI\r
199MemEncryptSevClearMmioPageEncMask (\r
ac0a286f
MK
200 IN PHYSICAL_ADDRESS Cr3BaseAddress,\r
201 IN PHYSICAL_ADDRESS BaseAddress,\r
202 IN UINTN NumPages\r
901a9bfc
BS
203 );\r
204\r
a1f22614 205#endif // _MEM_ENCRYPT_SEV_LIB_H_\r