]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/Library/CpuCommonFeaturesLib/C1e.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / UefiCpuPkg / Library / CpuCommonFeaturesLib / C1e.c
1 /** @file
2 C1E feature.
3
4 Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #include "CpuCommonFeatures.h"
10
11 /**
12 Detects if C1E feature supported on current processor.
13
14 @param[in] ProcessorNumber The index of the CPU executing this function.
15 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION
16 structure for the CPU executing this function.
17 @param[in] ConfigData A pointer to the configuration buffer returned
18 by CPU_FEATURE_GET_CONFIG_DATA. NULL if
19 CPU_FEATURE_GET_CONFIG_DATA was not provided in
20 RegisterCpuFeature().
21
22 @retval TRUE C1E feature is supported.
23 @retval FALSE C1E feature is not supported.
24
25 @note This service could be called by BSP/APs.
26 **/
27 BOOLEAN
28 EFIAPI
29 C1eSupport (
30 IN UINTN ProcessorNumber,
31 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,
32 IN VOID *ConfigData OPTIONAL
33 )
34 {
35 return IS_NEHALEM_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel);
36 }
37
38 /**
39 Initializes C1E feature to specific state.
40
41 @param[in] ProcessorNumber The index of the CPU executing this function.
42 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION
43 structure for the CPU executing this function.
44 @param[in] ConfigData A pointer to the configuration buffer returned
45 by CPU_FEATURE_GET_CONFIG_DATA. NULL if
46 CPU_FEATURE_GET_CONFIG_DATA was not provided in
47 RegisterCpuFeature().
48 @param[in] State If TRUE, then the C1E feature must be enabled.
49 If FALSE, then the C1E feature must be disabled.
50
51 @retval RETURN_SUCCESS C1E feature is initialized.
52
53 @note This service could be called by BSP only.
54 **/
55 RETURN_STATUS
56 EFIAPI
57 C1eInitialize (
58 IN UINTN ProcessorNumber,
59 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,
60 IN VOID *ConfigData OPTIONAL,
61 IN BOOLEAN State
62 )
63 {
64 //
65 // The scope of C1EEnable bit in the MSR_NEHALEM_POWER_CTL is Package, only program
66 // MSR_NEHALEM_POWER_CTL once for each package.
67 //
68 if ((CpuInfo->First.Thread == 0) || (CpuInfo->First.Core == 0)) {
69 return RETURN_SUCCESS;
70 }
71
72 CPU_REGISTER_TABLE_WRITE_FIELD (
73 ProcessorNumber,
74 Msr,
75 MSR_NEHALEM_POWER_CTL,
76 MSR_NEHALEM_POWER_CTL_REGISTER,
77 Bits.C1EEnable,
78 (State) ? 1 : 0
79 );
80 return RETURN_SUCCESS;
81 }