]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/X64/TdProbe.c
MdePkg: Introduce basic Tdx functions in BaseLib
[mirror_edk2.git] / MdePkg / Library / BaseLib / X64 / TdProbe.c
CommitLineData
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
17BOOLEAN\r
18EFIAPI\r
19TdIsEnabled (\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