]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Include/Library/MemEncryptSevLib.h
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / Include / Library / MemEncryptSevLib.h
index 872abe6725dcb9d3cf1e3308bb4b534aefd6cfbc..e1ec161d21593db68b2a5818d3ffe0ecaf26da28 100644 (file)
 #define _MEM_ENCRYPT_SEV_LIB_H_\r
 \r
 #include <Base.h>\r
+#include <WorkArea.h>\r
 \r
 //\r
-// Internal structure for holding SEV-ES information needed during SEC phase\r
-// and valid only during SEC phase and early PEI during platform\r
-// initialization.\r
+// Define the maximum number of #VCs allowed (e.g. the level of nesting\r
+// that is allowed => 2 allows for 1 nested #VCs). I this value is changed,\r
+// be sure to increase the size of\r
+//   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBackupSize\r
+// in any FDF file using this PCD.\r
 //\r
-// This structure is also used by assembler files:\r
-//   OvmfPkg/ResetVector/ResetVector.nasmb\r
-//   OvmfPkg/ResetVector/Ia32/PageTables64.asm\r
-//   OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm\r
-// any changes must stay in sync with its usage.\r
+#define VMGEXIT_MAXIMUM_VC_COUNT  2\r
+\r
+//\r
+// Per-CPU data mapping structure\r
+//   Use UINT32 for cached indicators and compare to a specific value\r
+//   so that the hypervisor can't indicate a value is cached by just\r
+//   writing random data to that area.\r
 //\r
-typedef struct _SEC_SEV_ES_WORK_AREA {\r
-  UINT8    SevEsEnabled;\r
-  UINT8    Reserved1[7];\r
+typedef struct {\r
+  UINT32    Dr7Cached;\r
+  UINT64    Dr7;\r
 \r
-  UINT64   RandomData;\r
+  UINTN     VcCount;\r
+  VOID      *GhcbBackupPages;\r
+} SEV_ES_PER_CPU_DATA;\r
 \r
-  UINT64   EncryptionMask;\r
-} SEC_SEV_ES_WORK_AREA;\r
+//\r
+// Memory encryption address range states.\r
+//\r
+typedef enum {\r
+  MemEncryptSevAddressRangeUnencrypted,\r
+  MemEncryptSevAddressRangeEncrypted,\r
+  MemEncryptSevAddressRangeMixed,\r
+  MemEncryptSevAddressRangeError,\r
+} MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE;\r
 \r
 /**\r
   Returns a boolean to indicate whether SEV-ES is enabled.\r
@@ -67,8 +81,6 @@ MemEncryptSevIsEnabled (
                                       address of a memory region.\r
   @param[in]  NumPages                The number of pages from start memory\r
                                       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\r
                                       memory region.\r
@@ -79,10 +91,9 @@ MemEncryptSevIsEnabled (
 RETURN_STATUS\r
 EFIAPI\r
 MemEncryptSevClearPageEncMask (\r
-  IN PHYSICAL_ADDRESS         Cr3BaseAddress,\r
-  IN PHYSICAL_ADDRESS         BaseAddress,\r
-  IN UINTN                    NumPages,\r
-  IN BOOLEAN                  Flush\r
+  IN PHYSICAL_ADDRESS  Cr3BaseAddress,\r
+  IN PHYSICAL_ADDRESS  BaseAddress,\r
+  IN UINTN             NumPages\r
   );\r
 \r
 /**\r
@@ -95,8 +106,6 @@ MemEncryptSevClearPageEncMask (
                                       address of a memory region.\r
   @param[in]  NumPages                The number of pages from start memory\r
                                       region.\r
-  @param[in]  Flush                   Flush the caches before setting the bit\r
-                                      (mostly TRUE except MMIO addresses)\r
 \r
   @retval RETURN_SUCCESS              The attributes were set for the memory\r
                                       region.\r
@@ -107,13 +116,11 @@ MemEncryptSevClearPageEncMask (
 RETURN_STATUS\r
 EFIAPI\r
 MemEncryptSevSetPageEncMask (\r
-  IN PHYSICAL_ADDRESS         Cr3BaseAddress,\r
-  IN PHYSICAL_ADDRESS         BaseAddress,\r
-  IN UINTN                    NumPages,\r
-  IN BOOLEAN                  Flush\r
+  IN PHYSICAL_ADDRESS  Cr3BaseAddress,\r
+  IN PHYSICAL_ADDRESS  BaseAddress,\r
+  IN UINTN             NumPages\r
   );\r
 \r
-\r
 /**\r
   Locate the page range that covers the initial (pre-SMBASE-relocation) SMRAM\r
   Save State Map.\r
@@ -132,8 +139,8 @@ MemEncryptSevSetPageEncMask (
 RETURN_STATUS\r
 EFIAPI\r
 MemEncryptSevLocateInitialSmramSaveStateMapPages (\r
-  OUT UINTN *BaseAddress,\r
-  OUT UINTN *NumberOfPages\r
+  OUT UINTN  *BaseAddress,\r
+  OUT UINTN  *NumberOfPages\r
   );\r
 \r
 /**\r
@@ -147,4 +154,52 @@ MemEncryptSevGetEncryptionMask (
   VOID\r
   );\r
 \r
+/**\r
+  Returns the encryption state of the specified virtual address range.\r
+\r
+  @param[in]  Cr3BaseAddress          Cr3 Base Address (if zero then use\r
+                                      current CR3)\r
+  @param[in]  BaseAddress             Base address to check\r
+  @param[in]  Length                  Length of virtual address range\r
+\r
+  @retval MemEncryptSevAddressRangeUnencrypted  Address range is mapped\r
+                                                unencrypted\r
+  @retval MemEncryptSevAddressRangeEncrypted    Address range is mapped\r
+                                                encrypted\r
+  @retval MemEncryptSevAddressRangeMixed        Address range is mapped mixed\r
+  @retval MemEncryptSevAddressRangeError        Address range is not mapped\r
+**/\r
+MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE\r
+EFIAPI\r
+MemEncryptSevGetAddressRangeState (\r
+  IN PHYSICAL_ADDRESS  Cr3BaseAddress,\r
+  IN PHYSICAL_ADDRESS  BaseAddress,\r
+  IN UINTN             Length\r
+  );\r
+\r
+/**\r
+  This function clears memory encryption bit for the MMIO region specified by\r
+  BaseAddress and NumPages.\r
+\r
+  @param[in]  Cr3BaseAddress          Cr3 Base Address (if zero then use\r
+                                      current CR3)\r
+  @param[in]  BaseAddress             The physical address that is the start\r
+                                      address of a MMIO region.\r
+  @param[in]  NumPages                The number of pages from start memory\r
+                                      region.\r
+\r
+  @retval RETURN_SUCCESS              The attributes were cleared for the\r
+                                      memory region.\r
+  @retval RETURN_INVALID_PARAMETER    Number of pages is zero.\r
+  @retval RETURN_UNSUPPORTED          Clearing the memory encryption attribute\r
+                                      is not supported\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+MemEncryptSevClearMmioPageEncMask (\r
+  IN PHYSICAL_ADDRESS  Cr3BaseAddress,\r
+  IN PHYSICAL_ADDRESS  BaseAddress,\r
+  IN UINTN             NumPages\r
+  );\r
+\r
 #endif // _MEM_ENCRYPT_SEV_LIB_H_\r