]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c
OvmfPkg/BaseMemcryptSevLib: Add SEV helper library
[mirror_edk2.git] / OvmfPkg / Library / BaseMemEncryptSevLib / Ia32 / MemEncryptSevLib.c
diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c b/OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c
new file mode 100644 (file)
index 0000000..a2ea990
--- /dev/null
@@ -0,0 +1,84 @@
+/** @file\r
+\r
+  Secure Encrypted Virtualization (SEV) library helper function\r
+\r
+  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>\r
+\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD\r
+  License which accompanies this distribution.  The full text of the license may\r
+  be found at http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Register/Cpuid.h>\r
+#include <Register/Amd/Cpuid.h>\r
+#include <Register/Amd/Msr.h>\r
+#include <Library/MemEncryptSevLib.h>\r
+\r
+/**\r
+  This function clears memory encryption bit for the memory region specified\r
+  by BaseAddress and Number of pages from the current page table context.\r
+\r
+  @param[in]  Cr3BaseAddress        Cr3 Base Address (if zero then use current CR3)\r
+  @param[in]  BaseAddress           The physical address that is the start address\r
+                                    of a memory region.\r
+  @param[in]  NumberOfPages         The number of pages from start memory region.\r
+  @param[in]  Flush                 Flush the caches before clearing the bit\r
+                                    (mostly TRUE except MMIO addresses)\r
+\r
+  @retval RETURN_SUCCESS            The attributes were cleared for the memory region.\r
+  @retval RETURN_INVALID_PARAMETER  Number of pages is zero.\r
+  @retval RETURN_UNSUPPORTED        Clearing memory encryption attribute is not\r
+                                    supported\r
+  **/\r
+RETURN_STATUS\r
+EFIAPI\r
+MemEncryptSevClearPageEncMask (\r
+  IN PHYSICAL_ADDRESS         Cr3BaseAddress,\r
+  IN PHYSICAL_ADDRESS         BaseAddress,\r
+  IN UINTN                    NumberOfPages,\r
+  IN BOOLEAN                  Flush\r
+  )\r
+{\r
+  //\r
+  // Memory encryption bit is not accessible in 32-bit mode\r
+  //\r
+  return RETURN_UNSUPPORTED;\r
+}\r
+\r
+/**\r
+  This function sets memory encryption bit for the memory region specified by\r
+  BaseAddress and Number of pages from the current page table context.\r
+\r
+  @param[in]  Cr3BaseAddress        Cr3 Base Address (if zero then use current CR3)\r
+  @param[in]  BaseAddress           The physical address that is the start address\r
+                                    of a memory region.\r
+  @param[in]  NumberOfPages         The number of pages from start memory region.\r
+  @param[in]  Flush                 Flush the caches before clearing the bit\r
+                                    (mostly TRUE except MMIO addresses)\r
+\r
+  @retval RETURN_SUCCESS            The attributes were set for the memory region.\r
+  @retval RETURN_INVALID_PARAMETER  Number of pages is zero.\r
+  @retval RETURN_UNSUPPORTED        Clearing memory encryption attribute is not\r
+                                    supported\r
+  **/\r
+RETURN_STATUS\r
+EFIAPI\r
+MemEncryptSevSetPageEncMask (\r
+  IN PHYSICAL_ADDRESS         Cr3BaseAddress,\r
+  IN PHYSICAL_ADDRESS         BaseAddress,\r
+  IN UINTN                    NumberOfPages,\r
+  IN BOOLEAN                  Flush\r
+  )\r
+{\r
+  //\r
+  // Memory encryption bit is not accessible in 32-bit mode\r
+  //\r
+  return RETURN_UNSUPPORTED;\r
+}\r