| /** @file | |
| Copyright (c) 2020-2021, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <Library/BaseLib.h> | |
| #include <Register/Intel/Cpuid.h> | |
| /** | |
| Probe if TD is enabled. | |
| @return TRUE TD is enabled. | |
| @return FALSE TD is not enabled. | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| TdIsEnabled ( | |
| ) | |
| { | |
| UINT32 Eax; | |
| UINT32 Ebx; | |
| UINT32 Ecx; | |
| UINT32 Edx; | |
| UINT32 LargestEax; | |
| BOOLEAN TdEnabled; | |
| CPUID_VERSION_INFO_ECX CpuIdVersionInfoEcx; | |
| TdEnabled = FALSE; | |
| do { | |
| AsmCpuid (CPUID_SIGNATURE, &LargestEax, &Ebx, &Ecx, &Edx); | |
| if ( (Ebx != CPUID_SIGNATURE_GENUINE_INTEL_EBX) | |
| || (Edx != CPUID_SIGNATURE_GENUINE_INTEL_EDX) | |
| || (Ecx != CPUID_SIGNATURE_GENUINE_INTEL_ECX)) | |
| { | |
| break; | |
| } | |
| AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, &CpuIdVersionInfoEcx.Uint32, NULL); | |
| if (CpuIdVersionInfoEcx.Bits.ParaVirtualized == 0) { | |
| break; | |
| } | |
| if (LargestEax < CPUID_GUESTTD_RUNTIME_ENVIRONMENT) { | |
| break; | |
| } | |
| AsmCpuidEx (CPUID_GUESTTD_RUNTIME_ENVIRONMENT, 0, &Eax, &Ebx, &Ecx, &Edx); | |
| if ( (Ebx != CPUID_GUESTTD_SIGNATURE_GENUINE_INTEL_EBX) | |
| || (Edx != CPUID_GUESTTD_SIGNATURE_GENUINE_INTEL_EDX) | |
| || (Ecx != CPUID_GUESTTD_SIGNATURE_GENUINE_INTEL_ECX)) | |
| { | |
| break; | |
| } | |
| TdEnabled = TRUE; | |
| } while (FALSE); | |
| return TdEnabled; | |
| } |