]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/MemEncryptSevLib: add MemEncryptSevSnpEnabled()
authorBrijesh Singh <brijesh.singh@amd.com>
Thu, 9 Dec 2021 03:27:37 +0000 (11:27 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 9 Dec 2021 06:28:10 +0000 (06:28 +0000)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3275

Create a function that can be used to determine if VM is running as an
SEV-SNP guest.

Cc: Michael Roth <michael.roth@amd.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Min Xu <min.m.xu@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Erdem Aktas <erdemaktas@google.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Jiewen Yao <Jiewen.yao@intel.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
OvmfPkg/Include/Library/MemEncryptSevLib.h
OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLibInternal.c
OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLibInternal.c
OvmfPkg/Library/BaseMemEncryptSevLib/SecMemEncryptSevLibInternal.c

index e1ec161d21593db68b2a5818d3ffe0ecaf26da28..3c77d71df754c9605c77500f34da3e87fbba8156 100644 (file)
@@ -47,6 +47,18 @@ typedef enum {
   MemEncryptSevAddressRangeError,\r
 } MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE;\r
 \r
+/**\r
+  Returns a boolean to indicate whether SEV-SNP is enabled\r
+\r
+  @retval TRUE           SEV-SNP is enabled\r
+  @retval FALSE          SEV-SNP is not enabled\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MemEncryptSevSnpIsEnabled (\r
+  VOID\r
+  );\r
+\r
 /**\r
   Returns a boolean to indicate whether SEV-ES is enabled.\r
 \r
index 4fee7b2ab34556b2f849d4f171d7a465f21617c2..15fcd5529587ca9f6a31afac2bde3c1d04541fef 100644 (file)
@@ -19,6 +19,7 @@
 \r
 STATIC BOOLEAN  mSevStatus        = FALSE;\r
 STATIC BOOLEAN  mSevEsStatus      = FALSE;\r
+STATIC BOOLEAN  mSevSnpStatus     = FALSE;\r
 STATIC BOOLEAN  mSevStatusChecked = FALSE;\r
 \r
 STATIC UINT64   mSevEncryptionMask      = 0;\r
@@ -82,11 +83,37 @@ InternalMemEncryptSevStatus (
     if (Msr.Bits.SevEsBit) {\r
       mSevEsStatus = TRUE;\r
     }\r
+\r
+    //\r
+    // Check MSR_0xC0010131 Bit 2 (Sev-Snp Enabled)\r
+    //\r
+    if (Msr.Bits.SevSnpBit) {\r
+      mSevSnpStatus = TRUE;\r
+    }\r
   }\r
 \r
   mSevStatusChecked = TRUE;\r
 }\r
 \r
+/**\r
+  Returns a boolean to indicate whether SEV-SNP is enabled.\r
+\r
+  @retval TRUE           SEV-SNP is enabled\r
+  @retval FALSE          SEV-SNP is not enabled\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MemEncryptSevSnpIsEnabled (\r
+  VOID\r
+  )\r
+{\r
+  if (!mSevStatusChecked) {\r
+    InternalMemEncryptSevStatus ();\r
+  }\r
+\r
+  return mSevSnpStatus;\r
+}\r
+\r
 /**\r
   Returns a boolean to indicate whether SEV-ES is enabled.\r
 \r
index c4aa74a0a2dd119cf32a1963e83b61c6876d8c52..d68ff08c3ea673a42bb425673d122c9993499f33 100644 (file)
@@ -19,6 +19,7 @@
 \r
 STATIC BOOLEAN  mSevStatus        = FALSE;\r
 STATIC BOOLEAN  mSevEsStatus      = FALSE;\r
+STATIC BOOLEAN  mSevSnpStatus     = FALSE;\r
 STATIC BOOLEAN  mSevStatusChecked = FALSE;\r
 \r
 STATIC UINT64   mSevEncryptionMask      = 0;\r
@@ -82,11 +83,37 @@ InternalMemEncryptSevStatus (
     if (Msr.Bits.SevEsBit) {\r
       mSevEsStatus = TRUE;\r
     }\r
+\r
+    //\r
+    // Check MSR_0xC0010131 Bit 2 (Sev-Snp Enabled)\r
+    //\r
+    if (Msr.Bits.SevSnpBit) {\r
+      mSevSnpStatus = TRUE;\r
+    }\r
   }\r
 \r
   mSevStatusChecked = TRUE;\r
 }\r
 \r
+/**\r
+  Returns a boolean to indicate whether SEV-SNP is enabled.\r
+\r
+  @retval TRUE           SEV-SNP is enabled\r
+  @retval FALSE          SEV-SNP is not enabled\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MemEncryptSevSnpIsEnabled (\r
+  VOID\r
+  )\r
+{\r
+  if (!mSevStatusChecked) {\r
+    InternalMemEncryptSevStatus ();\r
+  }\r
+\r
+  return mSevSnpStatus;\r
+}\r
+\r
 /**\r
   Returns a boolean to indicate whether SEV-ES is enabled.\r
 \r
index b5b365641499bba7b872acfe5c8190de2d464f30..5d912b2a4a5e4a043f8e8aa758bd55237a8540af 100644 (file)
@@ -62,6 +62,25 @@ InternalMemEncryptSevStatus (
   return ReadSevMsr ? AsmReadMsr32 (MSR_SEV_STATUS) : 0;\r
 }\r
 \r
+/**\r
+  Returns a boolean to indicate whether SEV-SNP is enabled.\r
+\r
+  @retval TRUE           SEV-SNP is enabled\r
+  @retval FALSE          SEV-SNP is not enabled\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MemEncryptSevSnpIsEnabled (\r
+  VOID\r
+  )\r
+{\r
+  MSR_SEV_STATUS_REGISTER  Msr;\r
+\r
+  Msr.Uint32 = InternalMemEncryptSevStatus ();\r
+\r
+  return Msr.Bits.SevSnpBit ? TRUE : FALSE;\r
+}\r
+\r
 /**\r
   Returns a boolean to indicate whether SEV-ES is enabled.\r
 \r