]>
Commit | Line | Data |
---|---|---|
818bc959 MX |
1 | /** @file\r |
2 | \r | |
3 | Copyright (c) 2020-2021, Intel Corporation. All rights reserved.<BR>\r | |
4 | SPDX-License-Identifier: BSD-2-Clause-Patent\r | |
5 | \r | |
6 | **/\r | |
7 | \r | |
8 | #include <Library/BaseLib.h>\r | |
9 | #include <Register/Intel/Cpuid.h>\r | |
10 | \r | |
11 | /**\r | |
12 | Probe if TD is enabled.\r | |
13 | \r | |
14 | @return TRUE TD is enabled.\r | |
15 | @return FALSE TD is not enabled.\r | |
16 | **/\r | |
17 | BOOLEAN\r | |
18 | EFIAPI\r | |
19 | TdIsEnabled (\r | |
20 | )\r | |
21 | {\r | |
22 | UINT32 Eax;\r | |
23 | UINT32 Ebx;\r | |
24 | UINT32 Ecx;\r | |
25 | UINT32 Edx;\r | |
26 | UINT32 LargestEax;\r | |
27 | BOOLEAN TdEnabled;\r | |
28 | CPUID_VERSION_INFO_ECX CpuIdVersionInfoEcx;\r | |
29 | \r | |
30 | TdEnabled = FALSE;\r | |
31 | \r | |
32 | do {\r | |
33 | AsmCpuid (CPUID_SIGNATURE, &LargestEax, &Ebx, &Ecx, &Edx);\r | |
34 | \r | |
35 | if ( (Ebx != CPUID_SIGNATURE_GENUINE_INTEL_EBX)\r | |
36 | || (Edx != CPUID_SIGNATURE_GENUINE_INTEL_EDX)\r | |
37 | || (Ecx != CPUID_SIGNATURE_GENUINE_INTEL_ECX))\r | |
38 | {\r | |
39 | break;\r | |
40 | }\r | |
41 | \r | |
42 | AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, &CpuIdVersionInfoEcx.Uint32, NULL);\r | |
43 | if (CpuIdVersionInfoEcx.Bits.ParaVirtualized == 0) {\r | |
44 | break;\r | |
45 | }\r | |
46 | \r | |
47 | if (LargestEax < CPUID_GUESTTD_RUNTIME_ENVIRONMENT) {\r | |
48 | break;\r | |
49 | }\r | |
50 | \r | |
51 | AsmCpuidEx (CPUID_GUESTTD_RUNTIME_ENVIRONMENT, 0, &Eax, &Ebx, &Ecx, &Edx);\r | |
52 | if ( (Ebx != CPUID_GUESTTD_SIGNATURE_GENUINE_INTEL_EBX)\r | |
53 | || (Edx != CPUID_GUESTTD_SIGNATURE_GENUINE_INTEL_EDX)\r | |
54 | || (Ecx != CPUID_GUESTTD_SIGNATURE_GENUINE_INTEL_ECX))\r | |
55 | {\r | |
56 | break;\r | |
57 | }\r | |
58 | \r | |
59 | TdEnabled = TRUE;\r | |
60 | } while (FALSE);\r | |
61 | \r | |
62 | return TdEnabled;\r | |
63 | }\r |