\r
Secure Encrypted Virtualization (SEV) library helper function\r
\r
- Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>\r
+ Copyright (c) 2017 - 2020, AMD Incorporated. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
#include <Library/DebugLib.h>\r
#include <Library/MemEncryptSevLib.h>\r
#include <Library/PcdLib.h>\r
-#include <Register/Amd/Cpuid.h>\r
-#include <Register/Amd/Msr.h>\r
-#include <Register/Cpuid.h>\r
#include <Register/QemuSmramSaveStateMap.h>\r
#include <Register/SmramSaveStateMap.h>\r
#include <Uefi/UefiBaseType.h>\r
\r
-STATIC BOOLEAN mSevStatus = FALSE;\r
-STATIC BOOLEAN mSevEsStatus = FALSE;\r
-STATIC BOOLEAN mSevStatusChecked = FALSE;\r
-\r
-/**\r
- Reads and sets the status of SEV features.\r
-\r
- **/\r
-STATIC\r
-VOID\r
-EFIAPI\r
-InternalMemEncryptSevStatus (\r
- VOID\r
- )\r
-{\r
- UINT32 RegEax;\r
- MSR_SEV_STATUS_REGISTER Msr;\r
- CPUID_MEMORY_ENCRYPTION_INFO_EAX Eax;\r
-\r
- //\r
- // Check if memory encryption leaf exist\r
- //\r
- AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);\r
- if (RegEax >= CPUID_MEMORY_ENCRYPTION_INFO) {\r
- //\r
- // CPUID Fn8000_001F[EAX] Bit 1 (Sev supported)\r
- //\r
- AsmCpuid (CPUID_MEMORY_ENCRYPTION_INFO, &Eax.Uint32, NULL, NULL, NULL);\r
-\r
- if (Eax.Bits.SevBit) {\r
- //\r
- // Check MSR_0xC0010131 Bit 0 (Sev Enabled)\r
- //\r
- Msr.Uint32 = AsmReadMsr32 (MSR_SEV_STATUS);\r
- if (Msr.Bits.SevBit) {\r
- mSevStatus = TRUE;\r
- }\r
-\r
- //\r
- // Check MSR_0xC0010131 Bit 1 (Sev-Es Enabled)\r
- //\r
- if (Msr.Bits.SevEsBit) {\r
- mSevEsStatus = TRUE;\r
- }\r
- }\r
- }\r
-\r
- mSevStatusChecked = TRUE;\r
-}\r
-\r
-/**\r
- Returns a boolean to indicate whether SEV-ES is enabled.\r
-\r
- @retval TRUE SEV-ES is enabled\r
- @retval FALSE SEV-ES is not enabled\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-MemEncryptSevEsIsEnabled (\r
- VOID\r
- )\r
-{\r
- if (!mSevStatusChecked) {\r
- InternalMemEncryptSevStatus ();\r
- }\r
-\r
- return mSevEsStatus;\r
-}\r
-\r
-/**\r
- Returns a boolean to indicate whether SEV is enabled.\r
-\r
- @retval TRUE SEV is enabled\r
- @retval FALSE SEV is not enabled\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-MemEncryptSevIsEnabled (\r
- VOID\r
- )\r
-{\r
- if (!mSevStatusChecked) {\r
- InternalMemEncryptSevStatus ();\r
- }\r
-\r
- return mSevStatus;\r
-}\r
-\r
-\r
/**\r
Locate the page range that covers the initial (pre-SMBASE-relocation) SMRAM\r
Save State Map.\r