UefiCpuPkg/CpuFeatures: Change files format to DOS
authorJeff Fan <jeff.fan@intel.com>
Wed, 5 Apr 2017 08:33:16 +0000 (16:33 +0800)
committerJeff Fan <jeff.fan@intel.com>
Wed, 5 Apr 2017 08:33:16 +0000 (16:33 +0800)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <jeff.fan@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
35 files changed:
UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c
UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf
UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.uni
UefiCpuPkg/CpuFeatures/CpuFeaturesDxeExtra.uni
UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c
UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf
UefiCpuPkg/CpuFeatures/CpuFeaturesPei.uni
UefiCpuPkg/CpuFeatures/CpuFeaturesPeiExtra.uni
UefiCpuPkg/Include/Guid/CpuFeaturesInitDone.h
UefiCpuPkg/Include/Guid/CpuFeaturesSetDone.h
UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h
UefiCpuPkg/Library/CpuCommonFeaturesLib/Aesni.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/C1e.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/ClockModulation.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeatures.h
UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.inf
UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.uni
UefiCpuPkg/Library/CpuCommonFeaturesLib/Eist.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/ExecuteDisable.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/FastStrings.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/FeatureControl.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/LimitCpuIdMaxval.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/MachineCheck.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/MonitorMwait.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/PendingBreak.c
UefiCpuPkg/Library/CpuCommonFeaturesLib/X2Apic.c
UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.c
UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.inf
UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c
UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.inf
UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h
UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesDxe.uni
UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c

index f4f70cf..b0b186d 100644 (file)
-/** @file
-  CPU Features DXE driver to initialize CPU features.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <PiDxe.h>
-
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/RegisterCpuFeaturesLib.h>
-
-#include <Protocol/SmmConfiguration.h>
-#include <Guid/CpuFeaturesInitDone.h>
-
-
-/**
-  Worker function to perform CPU feature initialization.
-
-**/
-VOID
-CpuFeaturesInitializeWorker (
-  VOID
-  )
-{
-  EFI_STATUS             Status;
-  EFI_HANDLE             Handle;
-
-  CpuFeaturesDetect ();
-
-  CpuFeaturesInitialize ();
-
-  //
-  // Install CPU Features Init Done Protocol
-  //
-  Handle = NULL;
-  Status = gBS->InstallProtocolInterface (
-                  &Handle,
-                  &gEdkiiCpuFeaturesInitDoneGuid,
-                  EFI_NATIVE_INTERFACE,
-                  NULL
-                  );
-  ASSERT_EFI_ERROR (Status);
-}
-
-/**
-  Event notification that initialize CPU features when gEfiSmmConfigurationProtocol installs.
-
-  @param[in]  Event                 The Event that is being processed, not used.
-  @param[in]  Context               Event Context, not used.
-**/
-VOID
-EFIAPI
-SmmConfigurationEventNotify (
-  IN EFI_EVENT                         Event,
-  IN VOID                              *Context
-  )
-{
-  EFI_STATUS                           Status;
-  EFI_SMM_CONFIGURATION_PROTOCOL       *SmmConfiguration;
-
-  //
-  // Make sure this notification is for this handler
-  //
-  Status = gBS->LocateProtocol (&gEfiSmmConfigurationProtocolGuid, NULL, (VOID **)&SmmConfiguration);
-  if (EFI_ERROR (Status)) {
-    return;
-  }
-
-  CpuFeaturesInitializeWorker ();
-}
-
-/**
-  CPU Features driver entry point function.
-
-  If PcdCpuFeaturesInitAfterSmmRelocation is TRUE, it will register one
-  SMM Configuration Protocol notify function to perform CPU features
-  initialization. Otherwise, it will perform CPU features initialization
-  directly.
-
-  @param ImageHandle     Image handle this driver.
-  @param SystemTable     Pointer to the System Table.
-
-  @retval EFI_SUCCESS   CPU Features is initialized successfully.
-**/
-EFI_STATUS
-EFIAPI
-CpuFeaturesDxeInitialize (
-  IN EFI_HANDLE                            ImageHandle,
-  IN EFI_SYSTEM_TABLE                      *SystemTable
-  )
-{
-  VOID        *Registration;
-
-  if (PcdGetBool (PcdCpuFeaturesInitAfterSmmRelocation)) {
-    //
-    // Install notification callback on SMM Configuration Protocol
-    //
-    EfiCreateProtocolNotifyEvent (
-      &gEfiSmmConfigurationProtocolGuid,
-      TPL_CALLBACK,
-      SmmConfigurationEventNotify,
-      NULL,
-      &Registration
-      );
-  } else {
-    CpuFeaturesInitializeWorker ();
-  }
-
-  return EFI_SUCCESS;
-}
-
+/** @file\r
+  CPU Features DXE driver to initialize CPU features.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/RegisterCpuFeaturesLib.h>\r
+\r
+#include <Protocol/SmmConfiguration.h>\r
+#include <Guid/CpuFeaturesInitDone.h>\r
+\r
+\r
+/**\r
+  Worker function to perform CPU feature initialization.\r
+\r
+**/\r
+VOID\r
+CpuFeaturesInitializeWorker (\r
+  VOID\r
+  )\r
+{\r
+  EFI_STATUS             Status;\r
+  EFI_HANDLE             Handle;\r
+\r
+  CpuFeaturesDetect ();\r
+\r
+  CpuFeaturesInitialize ();\r
+\r
+  //\r
+  // Install CPU Features Init Done Protocol\r
+  //\r
+  Handle = NULL;\r
+  Status = gBS->InstallProtocolInterface (\r
+                  &Handle,\r
+                  &gEdkiiCpuFeaturesInitDoneGuid,\r
+                  EFI_NATIVE_INTERFACE,\r
+                  NULL\r
+                  );\r
+  ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
+/**\r
+  Event notification that initialize CPU features when gEfiSmmConfigurationProtocol installs.\r
+\r
+  @param[in]  Event                 The Event that is being processed, not used.\r
+  @param[in]  Context               Event Context, not used.\r
+**/\r
+VOID\r
+EFIAPI\r
+SmmConfigurationEventNotify (\r
+  IN EFI_EVENT                         Event,\r
+  IN VOID                              *Context\r
+  )\r
+{\r
+  EFI_STATUS                           Status;\r
+  EFI_SMM_CONFIGURATION_PROTOCOL       *SmmConfiguration;\r
+\r
+  //\r
+  // Make sure this notification is for this handler\r
+  //\r
+  Status = gBS->LocateProtocol (&gEfiSmmConfigurationProtocolGuid, NULL, (VOID **)&SmmConfiguration);\r
+  if (EFI_ERROR (Status)) {\r
+    return;\r
+  }\r
+\r
+  CpuFeaturesInitializeWorker ();\r
+}\r
+\r
+/**\r
+  CPU Features driver entry point function.\r
+\r
+  If PcdCpuFeaturesInitAfterSmmRelocation is TRUE, it will register one\r
+  SMM Configuration Protocol notify function to perform CPU features\r
+  initialization. Otherwise, it will perform CPU features initialization\r
+  directly.\r
+\r
+  @param ImageHandle     Image handle this driver.\r
+  @param SystemTable     Pointer to the System Table.\r
+\r
+  @retval EFI_SUCCESS   CPU Features is initialized successfully.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CpuFeaturesDxeInitialize (\r
+  IN EFI_HANDLE                            ImageHandle,\r
+  IN EFI_SYSTEM_TABLE                      *SystemTable\r
+  )\r
+{\r
+  VOID        *Registration;\r
+\r
+  if (PcdGetBool (PcdCpuFeaturesInitAfterSmmRelocation)) {\r
+    //\r
+    // Install notification callback on SMM Configuration Protocol\r
+    //\r
+    EfiCreateProtocolNotifyEvent (\r
+      &gEfiSmmConfigurationProtocolGuid,\r
+      TPL_CALLBACK,\r
+      SmmConfigurationEventNotify,\r
+      NULL,\r
+      &Registration\r
+      );\r
+  } else {\r
+    CpuFeaturesInitializeWorker ();\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
index dee44e6..175e8a9 100644 (file)
@@ -1,53 +1,53 @@
-## @file
-#  CPU Features DXE driver.
-#
-#  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = CpuFeaturesDxe
-  MODULE_UNI_FILE                = CpuFeaturesDxe.uni
-  FILE_GUID                      = 63EB1B62-10C9-4693-88AC-AE0999EA87F8
-  MODULE_TYPE                    = DXE_DRIVER
-  VERSION_STRING                 = 1.0
-
-  ENTRY_POINT                    = CpuFeaturesDxeInitialize
-
-[Packages]
-  MdePkg/MdePkg.dec
-  UefiCpuPkg/UefiCpuPkg.dec
-
-[LibraryClasses]
-  BaseLib
-  DebugLib
-  UefiLib
-  UefiDriverEntryPoint
-  UefiBootServicesTableLib
-  RegisterCpuFeaturesLib
-
-[Sources]
-  CpuFeaturesDxe.c
-
-[Guids]
-  gEdkiiCpuFeaturesInitDoneGuid                       ## PRODUCES ## UNDEFINED # protocol GUID installed
-
-[Protocols]
-  gEfiSmmConfigurationProtocolGuid                                ## NOTIFY
-
-[Pcd]
-  gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesInitAfterSmmRelocation  ## CONSUMES
-
-[Depex]
-  TRUE
-
-[UserExtensions.TianoCore."ExtraFiles"]
-  CpuFeaturesDxeExtra.uni
+## @file\r
+#  CPU Features DXE driver.\r
+#\r
+#  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+#  This program and the accompanying materials\r
+#  are licensed and made available under the terms and conditions of the BSD License\r
+#  which accompanies this distribution.  The full text of the license may be found at\r
+#  http://opensource.org/licenses/bsd-license.php\r
+#\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = CpuFeaturesDxe\r
+  MODULE_UNI_FILE                = CpuFeaturesDxe.uni\r
+  FILE_GUID                      = 63EB1B62-10C9-4693-88AC-AE0999EA87F8\r
+  MODULE_TYPE                    = DXE_DRIVER\r
+  VERSION_STRING                 = 1.0\r
+\r
+  ENTRY_POINT                    = CpuFeaturesDxeInitialize\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  UefiCpuPkg/UefiCpuPkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  DebugLib\r
+  UefiLib\r
+  UefiDriverEntryPoint\r
+  UefiBootServicesTableLib\r
+  RegisterCpuFeaturesLib\r
+\r
+[Sources]\r
+  CpuFeaturesDxe.c\r
+\r
+[Guids]\r
+  gEdkiiCpuFeaturesInitDoneGuid                       ## PRODUCES ## UNDEFINED # protocol GUID installed\r
+\r
+[Protocols]\r
+  gEfiSmmConfigurationProtocolGuid                                ## NOTIFY\r
+\r
+[Pcd]\r
+  gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesInitAfterSmmRelocation  ## CONSUMES\r
+\r
+[Depex]\r
+  TRUE\r
+\r
+[UserExtensions.TianoCore."ExtraFiles"]\r
+  CpuFeaturesDxeExtra.uni\r
index 6f27bb9..c42e4da 100644 (file)
@@ -1,22 +1,22 @@
-// /** @file
-// CPU Features DXE driver.
-//
-// CPU Features DXE driver.
-//
-// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-//
-// This program and the accompanying materials
-// are licensed and made available under the terms and conditions of the BSD License
-// which accompanies this distribution.  The full text of the license may be found at
-// http://opensource.org/licenses/bsd-license.php
-//
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT             #language en-US "CPU Features DXE driver to initialize CPU features."
-
-#string STR_MODULE_DESCRIPTION          #language en-US "CPU Features DXE driver to initialize CPU features."
-
+// /** @file\r
+// CPU Features DXE driver.\r
+//\r
+// CPU Features DXE driver.\r
+//\r
+// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution.  The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php\r
+//\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+// **/\r
+\r
+\r
+#string STR_MODULE_ABSTRACT             #language en-US "CPU Features DXE driver to initialize CPU features."\r
+\r
+#string STR_MODULE_DESCRIPTION          #language en-US "CPU Features DXE driver to initialize CPU features."\r
+\r
index a236e1e..39a943e 100644 (file)
@@ -1,20 +1,20 @@
-// /** @file
-// CpuFeaturesDxe Localized Strings and Content
-//
-// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-//
-// This program and the accompanying materials
-// are licensed and made available under the terms and conditions of the BSD License
-// which accompanies this distribution.  The full text of the license may be found at
-// http://opensource.org/licenses/bsd-license.php
-//
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-//
-// **/
-
-#string STR_PROPERTIES_MODULE_NAME
-#language en-US
-"CPU Features DXE Driver"
-
-
+// /** @file\r
+// CpuFeaturesDxe Localized Strings and Content\r
+//\r
+// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution.  The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php\r
+//\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+// **/\r
+\r
+#string STR_PROPERTIES_MODULE_NAME\r
+#language en-US\r
+"CPU Features DXE Driver"\r
+\r
+\r
index 6292f5b..b052d55 100644 (file)
@@ -1,75 +1,75 @@
-/** @file
-  CPU Features PEIM driver to initialize CPU features.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <PiPei.h>
-
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PeiServicesLib.h>
-#include <Library/RegisterCpuFeaturesLib.h>
-
-#include <Guid/CpuFeaturesInitDone.h>
-
-EFI_PEI_PPI_DESCRIPTOR           mPeiCpuFeaturesInitDonePpiDesc = {
-  (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
-  &gEdkiiCpuFeaturesInitDoneGuid,
-  NULL
-};
-
-/**
-  CPU Features driver entry point function.
-
-  It will perform CPU features initialization, except for
-  PcdCpuFeaturesInitOnS3Resume is FALSE on S3 resume.
-
-  @param  FileHandle    Handle of the file being invoked.
-  @param  PeiServices   Describes the list of possible PEI Services.
-
-  @retval EFI_SUCCESS   CPU Features is initialized successfully.
-**/
-EFI_STATUS
-EFIAPI
-CpuFeaturesPeimInitialize (
-  IN       EFI_PEI_FILE_HANDLE  FileHandle,
-  IN CONST EFI_PEI_SERVICES     **PeiServices
-  )
-{
-  EFI_STATUS                 Status;
-  EFI_BOOT_MODE              BootMode;
-
-  Status = PeiServicesGetBootMode (&BootMode);
-  ASSERT_EFI_ERROR (Status);
-
-  if (BootMode == BOOT_ON_S3_RESUME &&
-      !PcdGetBool (PcdCpuFeaturesInitOnS3Resume)) {
-    //
-    // Does nothing when if PcdCpuFeaturesInitOnS3Resume is FLASE
-    // on S3 boot mode
-    //
-    return EFI_SUCCESS;
-  }
-
-  CpuFeaturesDetect ();
-
-  CpuFeaturesInitialize ();
-
-  //
-  // Install CPU Features Init Done PPI
-  //
-  Status = PeiServicesInstallPpi(&mPeiCpuFeaturesInitDonePpiDesc);
-  ASSERT_EFI_ERROR (Status);
-
-  return EFI_SUCCESS;
-}
-
+/** @file\r
+  CPU Features PEIM driver to initialize CPU features.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiPei.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/RegisterCpuFeaturesLib.h>\r
+\r
+#include <Guid/CpuFeaturesInitDone.h>\r
+\r
+EFI_PEI_PPI_DESCRIPTOR           mPeiCpuFeaturesInitDonePpiDesc = {\r
+  (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
+  &gEdkiiCpuFeaturesInitDoneGuid,\r
+  NULL\r
+};\r
+\r
+/**\r
+  CPU Features driver entry point function.\r
+\r
+  It will perform CPU features initialization, except for\r
+  PcdCpuFeaturesInitOnS3Resume is FALSE on S3 resume.\r
+\r
+  @param  FileHandle    Handle of the file being invoked.\r
+  @param  PeiServices   Describes the list of possible PEI Services.\r
+\r
+  @retval EFI_SUCCESS   CPU Features is initialized successfully.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CpuFeaturesPeimInitialize (\r
+  IN       EFI_PEI_FILE_HANDLE  FileHandle,\r
+  IN CONST EFI_PEI_SERVICES     **PeiServices\r
+  )\r
+{\r
+  EFI_STATUS                 Status;\r
+  EFI_BOOT_MODE              BootMode;\r
+\r
+  Status = PeiServicesGetBootMode (&BootMode);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  if (BootMode == BOOT_ON_S3_RESUME &&\r
+      !PcdGetBool (PcdCpuFeaturesInitOnS3Resume)) {\r
+    //\r
+    // Does nothing when if PcdCpuFeaturesInitOnS3Resume is FLASE\r
+    // on S3 boot mode\r
+    //\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
+  CpuFeaturesDetect ();\r
+\r
+  CpuFeaturesInitialize ();\r
+\r
+  //\r
+  // Install CPU Features Init Done PPI\r
+  //\r
+  Status = PeiServicesInstallPpi(&mPeiCpuFeaturesInitDonePpiDesc);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
index 2fb84b1..dd4b388 100644 (file)
@@ -1,49 +1,49 @@
-## @file
-#  CPU Features PEIM driver.
-#
-#  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = CpuFeaturesPei
-  MODULE_UNI_FILE                = CpuFeaturesPei.uni
-  FILE_GUID                      = 183BB3E1-A1E5-4445-8AC9-0E83B6547E0E
-  MODULE_TYPE                    = PEIM
-  VERSION_STRING                 = 1.0
-
-  ENTRY_POINT                    = CpuFeaturesPeimInitialize
-
-[Packages]
-  MdePkg/MdePkg.dec
-  UefiCpuPkg/UefiCpuPkg.dec
-
-[LibraryClasses]
-  BaseLib
-  DebugLib
-  PeimEntryPoint
-  PeiServicesLib
-  RegisterCpuFeaturesLib
-
-[Sources]
-  CpuFeaturesPei.c
-
-[Guids]
-  gEdkiiCpuFeaturesInitDoneGuid                       ## PRODUCES ## UNDEFINED # PPI GUID installed
-
-[Pcd]
-  gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesInitOnS3Resume          ## CONSUMES
-
-[Depex]
-  TRUE
-
-[UserExtensions.TianoCore."ExtraFiles"]
-  CpuFeaturesPeiExtra.uni
+## @file\r
+#  CPU Features PEIM driver.\r
+#\r
+#  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+#  This program and the accompanying materials\r
+#  are licensed and made available under the terms and conditions of the BSD License\r
+#  which accompanies this distribution.  The full text of the license may be found at\r
+#  http://opensource.org/licenses/bsd-license.php\r
+#\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = CpuFeaturesPei\r
+  MODULE_UNI_FILE                = CpuFeaturesPei.uni\r
+  FILE_GUID                      = 183BB3E1-A1E5-4445-8AC9-0E83B6547E0E\r
+  MODULE_TYPE                    = PEIM\r
+  VERSION_STRING                 = 1.0\r
+\r
+  ENTRY_POINT                    = CpuFeaturesPeimInitialize\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  UefiCpuPkg/UefiCpuPkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  DebugLib\r
+  PeimEntryPoint\r
+  PeiServicesLib\r
+  RegisterCpuFeaturesLib\r
+\r
+[Sources]\r
+  CpuFeaturesPei.c\r
+\r
+[Guids]\r
+  gEdkiiCpuFeaturesInitDoneGuid                       ## PRODUCES ## UNDEFINED # PPI GUID installed\r
+\r
+[Pcd]\r
+  gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesInitOnS3Resume          ## CONSUMES\r
+\r
+[Depex]\r
+  TRUE\r
+\r
+[UserExtensions.TianoCore."ExtraFiles"]\r
+  CpuFeaturesPeiExtra.uni\r
index f56dbd1..b03754a 100644 (file)
@@ -1,22 +1,22 @@
-// /** @file
-// CPU Features PEIM driver.
-//
-// CPU Features PEIM driver.
-//
-// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-//
-// This program and the accompanying materials
-// are licensed and made available under the terms and conditions of the BSD License
-// which accompanies this distribution.  The full text of the license may be found at
-// http://opensource.org/licenses/bsd-license.php
-//
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT             #language en-US "CPU Features PEIM driver to initialize CPU features."
-
-#string STR_MODULE_DESCRIPTION          #language en-US "CPU Features PEIM driver to initialize CPU features."
-
+// /** @file\r
+// CPU Features PEIM driver.\r
+//\r
+// CPU Features PEIM driver.\r
+//\r
+// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution.  The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php\r
+//\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+// **/\r
+\r
+\r
+#string STR_MODULE_ABSTRACT             #language en-US "CPU Features PEIM driver to initialize CPU features."\r
+\r
+#string STR_MODULE_DESCRIPTION          #language en-US "CPU Features PEIM driver to initialize CPU features."\r
+\r
index 0ffc619..43dbe96 100644 (file)
@@ -1,20 +1,20 @@
-// /** @file
-// CpuFeaturesPei Localized Strings and Content
-//
-// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-//
-// This program and the accompanying materials
-// are licensed and made available under the terms and conditions of the BSD License
-// which accompanies this distribution.  The full text of the license may be found at
-// http://opensource.org/licenses/bsd-license.php
-//
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-//
-// **/
-
-#string STR_PROPERTIES_MODULE_NAME
-#language en-US
-"CPU Features PEIM Driver"
-
-
+// /** @file\r
+// CpuFeaturesPei Localized Strings and Content\r
+//\r
+// Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution.  The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php\r
+//\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+// **/\r
+\r
+#string STR_PROPERTIES_MODULE_NAME\r
+#language en-US\r
+"CPU Features PEIM Driver"\r
+\r
+\r
index ef17da5..70b5c70 100644 (file)
@@ -1,26 +1,26 @@
-/** @file
-  CPU Features Init Done PPI/Protocol should be installed after CPU features
-  are initialized.
-
-Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution.  The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _CPU_FEATURES_INIT_DONE_H_
-#define _CPU_FEATURES_INIT_DONE_H_
-
-#define EDKII_CPU_FEATURES_INIT_DONE_GUID \
-  { \
-    { 0xc77c3a41, 0x61ab, 0x4143, { 0x98, 0x3e, 0x33, 0x39, 0x28, 0x6, 0x28, 0xe5 } \
-  }
-
-extern EFI_GUID gEdkiiCpuFeaturesInitDoneGuid;
-
-#endif
+/** @file\r
+  CPU Features Init Done PPI/Protocol should be installed after CPU features\r
+  are initialized.\r
+\r
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _CPU_FEATURES_INIT_DONE_H_\r
+#define _CPU_FEATURES_INIT_DONE_H_\r
+\r
+#define EDKII_CPU_FEATURES_INIT_DONE_GUID \\r
+  { \\r
+    { 0xc77c3a41, 0x61ab, 0x4143, { 0x98, 0x3e, 0x33, 0x39, 0x28, 0x6, 0x28, 0xe5 } \\r
+  }\r
+\r
+extern EFI_GUID gEdkiiCpuFeaturesInitDoneGuid;\r
+\r
+#endif\r
index 8b1592e..bf085c7 100644 (file)
@@ -1,26 +1,26 @@
-/** @file
-  CPU Features Set Done PPI/Protocol should be installed after CPU features
-  configuration are set.
-
-Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution.  The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _CPU_FEATURES_INIT_DONE_H_
-#define _CPU_FEATURES_INIT_DONE_H_
-
-#define EDKII_CPU_FEATURES_SET_DONE_GUID \
-  { \
-    { 0xa82485ce, 0xad6b, 0x4101, { 0x99, 0xd3, 0xe1, 0x35, 0x8c, 0x9e, 0x7e, 0x37 } \
-  }
-
-extern EFI_GUID gEdkiiCpuFeaturesSetDoneGuid;
-
-#endif
+/** @file\r
+  CPU Features Set Done PPI/Protocol should be installed after CPU features\r
+  configuration are set.\r
+\r
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _CPU_FEATURES_INIT_DONE_H_\r
+#define _CPU_FEATURES_INIT_DONE_H_\r
+\r
+#define EDKII_CPU_FEATURES_SET_DONE_GUID \\r
+  { \\r
+    { 0xa82485ce, 0xad6b, 0x4101, { 0x99, 0xd3, 0xe1, 0x35, 0x8c, 0x9e, 0x7e, 0x37 } \\r
+  }\r
+\r
+extern EFI_GUID gEdkiiCpuFeaturesSetDoneGuid;\r
+\r
+#endif\r
index 81a1f4b..4765bc3 100644 (file)
-/** @file
-  Register CPU Features Library to register and manage CPU features.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __REGISTER_CPU_FEATURES_LIB_H__
-#define __REGISTER_CPU_FEATURES_LIB_H__
-
-#include <AcpiCpuData.h>
-#include <Register/Cpuid.h>
-#include <Protocol/MpService.h>
-
-///
-/// Defines used to identify a CPU feature.  The lower 16-bits are used to
-/// identify a unique CPU feature and the value represents a bit number in
-/// a bit mask.  The upper 16-bits are bit mask values that are used as
-/// modifiers of a CPU feature.  When used in a list, the define value
-/// CPU_FEATURE_END is used to terminate a list of CPU feature values.
-/// @{
-#define CPU_FEATURE_AESNI                           0
-#define CPU_FEATURE_TURBO_MODE                      1
-#define CPU_FEATURE_MWAIT                           2
-#define CPU_FEATURE_ACPI                            3
-#define CPU_FEATURE_EIST                            4
-#define CPU_FEATURE_XD                              5
-#define CPU_FEATURE_FASTSTRINGS                     6
-#define CPU_FEATURE_VMX                             7
-#define CPU_FEATURE_SMX                             8
-#define CPU_FEATURE_SENTER                          9
-#define CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER   10
-#define CPU_FEATURE_LIMIT_CPUID_MAX_VAL             11
-#define CPU_FEATURE_MCE                             12
-#define CPU_FEATURE_MCA                             13
-#define CPU_FEATURE_MCG_CTL                         14
-#define CPU_FEATURE_PENDING_BREAK                   15
-#define CPU_FEATURE_C1E                             16
-#define CPU_FEATURE_C1_AUTO_DEMOTION                17
-#define CPU_FEATURE_C3_AUTO_DEMOTION                18
-#define CPU_FEATURE_C1_AUTO_UNDEMOTION              19
-#define CPU_FEATURE_C3_AUTO_UNDEMOTION              20
-#define CPU_FEATURE_C_STATE                         21
-#define CPU_FEATURE_TM                              22
-#define CPU_FEATURE_TM2                             23
-#define CPU_FEATURE_X2APIC                          24
-#define CPU_FEATURE_RESERVED_25                     25
-#define CPU_FEATURE_RESERVED_26                     26
-#define CPU_FEATURE_RESERVED_27                     27
-#define CPU_FEATURE_RESERVED_28                     28
-#define CPU_FEATURE_RESERVED_29                     29
-#define CPU_FEATURE_RESERVED_30                     30
-#define CPU_FEATURE_RESERVED_31                     31
-
-#define CPU_FEATURE_L2_PREFETCHER                   (32+0)
-#define CPU_FEATURE_L1_DATA_PREFETCHER              (32+1)
-#define CPU_FEATURE_HARDWARE_PREFETCHER             (32+2)
-#define CPU_FEATURE_ADJACENT_CACHE_LINE_PREFETCH    (32+3)
-#define CPU_FEATURE_DCU_PREFETCHER                  (32+4)
-#define CPU_FEATURE_IP_PREFETCHER                   (32+5)
-#define CPU_FEATURE_MLC_STREAMER_PREFETCHER         (32+6)
-#define CPU_FEATURE_MLC_SPATIAL_PREFETCHER          (32+7)
-#define CPU_FEATURE_THREE_STRICK_COUNTER            (32+8)
-#define CPU_FEATURE_APIC_TPR_UPDATE_MESSAGE         (32+9)
-#define CPU_FEATURE_ENERGY_PERFORMANCE_BIAS         (32+10)
-
-#define CPU_FEATURE_BEFORE_ALL                      BIT27
-#define CPU_FEATURE_AFTER_ALL                       BIT28
-#define CPU_FEATURE_BEFORE                          BIT29
-#define CPU_FEATURE_AFTER                           BIT30
-#define CPU_FEATURE_END                             MAX_UINT32
-/// @}
-
-///
-/// CPU Information passed into the SupportFunc and InitializeFunc of the
-/// RegisterCpuFeature() library function.  This structure contains information
-/// that is commonly used during CPU feature detection and initialization.
-///
-typedef struct {
-  ///
-  /// The package that the CPU resides
-  ///
-  EFI_PROCESSOR_INFORMATION            ProcessorInfo;
-  ///
-  /// The Display Family of the CPU computed from CPUID leaf CPUID_VERSION_INFO
-  ///
-  UINT32                               DisplayFamily;
-  ///
-  /// The Display Model of the CPU computed from CPUID leaf CPUID_VERSION_INFO
-  ///
-  UINT32                               DisplayModel;
-  ///
-  /// The Stepping ID of the CPU computed from CPUID leaf CPUID_VERSION_INFO
-  ///
-  UINT32                               SteppingId;
-  ///
-  /// The Processor Type of the CPU computed from CPUID leaf CPUID_VERSION_INFO
-  ///
-  UINT32                               ProcessorType;
-  ///
-  /// Bit field structured returned in ECX from CPUID leaf CPUID_VERSION_INFO
-  ///
-  CPUID_VERSION_INFO_ECX               CpuIdVersionInfoEcx;
-  ///
-  /// Bit field structured returned in EDX from CPUID leaf CPUID_VERSION_INFO
-  ///
-  CPUID_VERSION_INFO_EDX               CpuIdVersionInfoEdx;
-} REGISTER_CPU_FEATURE_INFORMATION;
-
-/**
-  Determines if a CPU feature is enabled in PcdCpuFeaturesSupport bit mask.
-  If a CPU feature is disabled in PcdCpuFeaturesSupport then all the code/data
-  associated with that feature should be optimized away if compiler
-  optimizations are enabled.
-
-  @param[in]  Feature  The bit number of the CPU feature to check in the PCD
-                       PcdCpuFeaturesSupport.
-
-  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesSupport.
-  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesSupport.
-
-  @note This service could be called by BSP only.
-**/
-BOOLEAN
-EFIAPI
-IsCpuFeatureSupported (
-  IN UINT32              Feature
-  );
-
-/**
-  Determines if a CPU feature is set in PcdCpuFeaturesSetting bit mask.
-
-  @param[in]  Feature  The bit number of the CPU feature to check in the PCD
-                       PcdCpuFeaturesSetting.
-
-  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesSetting.
-  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesSetting.
-
-  @note This service could be called by BSP only.
-**/
-BOOLEAN
-EFIAPI
-IsCpuFeatureInSetting (
-  IN UINT32              Feature
-  );
-
-/**
-  Determines if a CPU feature is set in PcdCpuFeaturesCapability bit mask.
-
-  @param[in]  Feature  The bit number of the CPU feature to check in the PCD
-                       PcdCpuFeaturesCapability.
-
-  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesCapability.
-  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesCapability.
-
-  @note This service could be called by BSP only.
-**/
-BOOLEAN
-EFIAPI
-IsCpuFeatureCapability (
-  IN UINT32              Feature
-  );
-
-/**
-  Determines if a CPU feature is set in PcdCpuFeaturesUserConfiguration bit mask.
-
-  @param[in]  Feature  The bit number of the CPU feature to check in the PCD
-                       PcdCpuFeaturesUserConfiguration.
-
-  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesUserConfiguration.
-  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesUserConfiguration.
-
-  @note This service could be called by BSP only.
-**/
-BOOLEAN
-EFIAPI
-IsCpuFeatureUserConfiguration (
-  IN UINT32              Feature
-  );
-
-/**
-  Prepares for the data used by CPU feature detection and initialization.
-
-  @param[in]  NumberOfProcessors  The number of CPUs in the platform.
-
-  @return  Pointer to a buffer of CPU related configuration data.
-
-  @note This service could be called by BSP only.
-**/
-typedef
-VOID *
-(EFIAPI *CPU_FEATURE_GET_CONFIG_DATA)(
-  IN UINTN               NumberOfProcessors
-  );
-
-/**
-  Detects if CPU feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     CPU feature is supported.
-  @retval FALSE    CPU feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-typedef
-BOOLEAN
-(EFIAPI *CPU_FEATURE_SUPPORT)(
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes CPU feature to specific state.
-
-  This service does not initialize hardware and only produces entries in the
-  Register Table for specified processor. Hardware initialization on BSP/APs
-  will be done in CpuFeaturesInitialize().
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the CPU feature must be enabled.
-                               If FALSE, then the CPU feature must be disabled.
-
-  @retval RETURN_SUCCESS       CPU feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-typedef
-RETURN_STATUS
-(EFIAPI *CPU_FEATURE_INITIALIZE)(
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Registers a CPU Feature.
-
-  @param[in]  FeatureName        A Null-terminated Ascii string indicates CPU feature
-                                 name.
-  @param[in]  GetConfigDataFunc  CPU feature get configuration data function.  This
-                                 is an optional parameter that may be NULL.  If NULL,
-                                 then the most recently registered function for the
-                                 CPU feature is used.  If no functions are registered
-                                 for a CPU feature, then the CPU configuration data
-                                 for the registered feature is NULL.
-  @param[in]  SupportFunc        CPU feature support function.  This is an optional
-                                 parameter that may be NULL.  If NULL, then the most
-                                 recently registered function for the CPU feature is
-                                 used. If no functions are registered for a CPU
-                                 feature, then the CPU feature is assumed to be
-                                 supported by all CPUs.
-  @param[in]  InitializeFunc     CPU feature initialize function.  This is an optional
-                                 parameter that may be NULL.  If NULL, then the most
-                                 recently registered function for the CPU feature is
-                                 used. If no functions are registered for a CPU
-                                 feature, then the CPU feature initialization is
-                                 skipped.
-  @param[in]  ...                Variable argument list of UINT32 CPU feature value.
-                                 Values with no modifiers are the features provided
-                                 by the registered functions.
-                                 Values with CPU_FEATURE_BEFORE modifier are features
-                                 that must be initialized after the features provided
-                                 by the registered functions are used.
-                                 Values with CPU_FEATURE_AFTER modifier are features
-                                 that must be initialized before the features provided
-                                 by the registered functions are used.
-                                 The last argument in this variable argument list must
-                                 always be CPU_FEATURE_END.
-
-  @retval  RETURN_SUCCESS           The CPU feature was successfully registered.
-  @retval  RETURN_OUT_OF_RESOURCES  There are not enough resources to register
-                                    the CPU feature.
-  @retval  RETURN_UNSUPPORTED       Registration of the CPU feature is not
-                                    supported due to a circular dependency between
-                                    BEFORE and AFTER features.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-RegisterCpuFeature (
-  IN CHAR8                             *FeatureName,       OPTIONAL
-  IN CPU_FEATURE_GET_CONFIG_DATA       GetConfigDataFunc,  OPTIONAL
-  IN CPU_FEATURE_SUPPORT               SupportFunc,        OPTIONAL
-  IN CPU_FEATURE_INITIALIZE            InitializeFunc,     OPTIONAL
-  ...
-  );
-
-/**
-  Performs CPU features detection.
-
-  This service will invoke MP service to check CPU features'
-  capabilities on BSP/APs.
-
-  @note This service could be called by BSP only.
-**/
-VOID
-EFIAPI
-CpuFeaturesDetect (
-  VOID
-  );
-
-/**
-  Performs CPU features Initialization.
-
-  This service will invoke MP service to perform CPU features
-  initialization on BSP/APs per user configuration.
-
-  @note This service could be called by BSP only.
-**/
-VOID
-EFIAPI
-CpuFeaturesInitialize (
-  VOID
-  );
-
-/**
-  Switches to assigned BSP after CPU features initialization.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-
-  @note This service could be called by BSP only.
-**/
-VOID
-EFIAPI
-SwitchBspAfterFeaturesInitialize (
-  IN UINTN               ProcessorNumber
-  );
-
-/**
-  Adds an entry in specified register table.
-
-  This function adds an entry in specified register table, with given register type,
-  register index, bit section and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program
-  @param[in]  Index            Index of the register to program
-  @param[in]  ValueMask        Mask of bits in register to write
-  @param[in]  Value            Value to write
-
-  @note This service could be called by BSP only.
-**/
-VOID
-EFIAPI
-CpuRegisterTableWrite (
-  IN UINTN               ProcessorNumber,
-  IN REGISTER_TYPE       RegisterType,
-  IN UINT64              Index,
-  IN UINT64              ValueMask,
-  IN UINT64              Value
-  );
-
-/**
-  Adds an entry in specified Pre-SMM register table.
-
-  This function adds an entry in specified register table, with given register type,
-  register index, bit section and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program
-  @param[in]  Index            Index of the register to program
-  @param[in]  ValueMask        Mask of bits in register to write
-  @param[in]  Value            Value to write
-
-  @note This service could be called by BSP only.
-**/
-VOID
-EFIAPI
-PreSmmCpuRegisterTableWrite (
-  IN UINTN               ProcessorNumber,
-  IN REGISTER_TYPE       RegisterType,
-  IN UINT64              Index,
-  IN UINT64              ValueMask,
-  IN UINT64              Value
-  );
-
-/**
-  Adds a 32-bit register write entry in specified register table.
-
-  This macro adds an entry in specified register table, with given register type,
-  register index, and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program
-  @param[in]  Index            Index of the register to program
-  @param[in]  Value            Value to write
-
-  @note This service could be called by BSP only.
-**/
-#define CPU_REGISTER_TABLE_WRITE32(ProcessorNumber, RegisterType, Index, Value)       \
-  do {                                                                                \
-    CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT32, Value);  \
-  } while(FALSE);
-
-/**
-  Adds a 64-bit register write entry in specified register table.
-
-  This macro adds an entry in specified register table, with given register type,
-  register index, and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program
-  @param[in]  Index            Index of the register to program
-  @param[in]  Value            Value to write
-
-  @note This service could be called by BSP only.
-**/
-#define CPU_REGISTER_TABLE_WRITE64(ProcessorNumber, RegisterType, Index, Value)       \
-  do {                                                                                \
-    CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT64, Value);  \
-  } while(FALSE);
-
-/**
-  Adds a bit field write entry in specified register table.
-
-  This macro adds an entry in specified register table, with given register type,
-  register index, bit field section, and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program.
-  @param[in]  Index            Index of the register to program.
-  @param[in]  Type             The data type name of a register structure.
-  @param[in]  Field            The bit fiel name in register structure to write.
-  @param[in]  Value            Value to write to the bit field.
-
-  @note This service could be called by BSP only.
-**/
-#define CPU_REGISTER_TABLE_WRITE_FIELD(ProcessorNumber, RegisterType, Index, Type, Field, Value) \
-  do {                                                                                           \
-    UINT64  ValueMask;                                                                           \
-    ValueMask = MAX_UINT64;                                                                      \
-    ((Type *)(&ValueMask))->Field = 0;                                                           \
-    CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, ~ValueMask, Value);             \
-  } while(FALSE);
-
-/**
-  Adds a 32-bit register write entry in specified register table.
-
-  This macro adds an entry in specified register table, with given register type,
-  register index, and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program
-  @param[in]  Index            Index of the register to program
-  @param[in]  Value            Value to write
-
-  @note This service could be called by BSP only.
-**/
-#define PRE_SMM_CPU_REGISTER_TABLE_WRITE32(ProcessorNumber, RegisterType, Index, Value)    \
-  do {                                                                                     \
-    PreSmmCpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT32, Value); \
-  } while(FALSE);
-
-/**
-  Adds a 64-bit register write entry in specified register table.
-
-  This macro adds an entry in specified register table, with given register type,
-  register index, and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program
-  @param[in]  Index            Index of the register to program
-  @param[in]  Value            Value to write
-
-  @note This service could be called by BSP only.
-**/
-#define PRE_SMM_CPU_REGISTER_TABLE_WRITE64(ProcessorNumber, RegisterType, Index, Value)    \
-  do {                                                                                     \
-    PreSmmCpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT64, Value); \
-  } while(FALSE);
-
-/**
-  Adds a bit field write entry in specified register table.
-
-  This macro adds an entry in specified register table, with given register type,
-  register index, bit field section, and value.
-
-  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.
-  @param[in]  RegisterType     Type of the register to program.
-  @param[in]  Index            Index of the register to program.
-  @param[in]  Type             The data type name of a register structure.
-  @param[in]  Field            The bit fiel name in register structure to write.
-  @param[in]  Value            Value to write to the bit field.
-
-  @note This service could be called by BSP only.
-**/
-#define PRE_SMM_CPU_REGISTER_TABLE_WRITE_FIELD(ProcessorNumber, RegisterType, Index, Type, Field, Value) \
-  do {                                                                                                   \
-    UINT64  ValueMask;                                                                                   \
-    ValueMask = MAX_UINT64;                                                                              \
-    ((Type *)(&ValueMask))->Field = 0;                                                                   \
-    PreSmmCpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, ~ValueMask, Value);                \
-  } while(FALSE);
-
-#endif
+/** @file\r
+  Register CPU Features Library to register and manage CPU features.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __REGISTER_CPU_FEATURES_LIB_H__\r
+#define __REGISTER_CPU_FEATURES_LIB_H__\r
+\r
+#include <AcpiCpuData.h>\r
+#include <Register/Cpuid.h>\r
+#include <Protocol/MpService.h>\r
+\r
+///\r
+/// Defines used to identify a CPU feature.  The lower 16-bits are used to\r
+/// identify a unique CPU feature and the value represents a bit number in\r
+/// a bit mask.  The upper 16-bits are bit mask values that are used as\r
+/// modifiers of a CPU feature.  When used in a list, the define value\r
+/// CPU_FEATURE_END is used to terminate a list of CPU feature values.\r
+/// @{\r
+#define CPU_FEATURE_AESNI                           0\r
+#define CPU_FEATURE_TURBO_MODE                      1\r
+#define CPU_FEATURE_MWAIT                           2\r
+#define CPU_FEATURE_ACPI                            3\r
+#define CPU_FEATURE_EIST                            4\r
+#define CPU_FEATURE_XD                              5\r
+#define CPU_FEATURE_FASTSTRINGS                     6\r
+#define CPU_FEATURE_VMX                             7\r
+#define CPU_FEATURE_SMX                             8\r
+#define CPU_FEATURE_SENTER                          9\r
+#define CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER   10\r
+#define CPU_FEATURE_LIMIT_CPUID_MAX_VAL             11\r
+#define CPU_FEATURE_MCE                             12\r
+#define CPU_FEATURE_MCA                             13\r
+#define CPU_FEATURE_MCG_CTL                         14\r
+#define CPU_FEATURE_PENDING_BREAK                   15\r
+#define CPU_FEATURE_C1E                             16\r
+#define CPU_FEATURE_C1_AUTO_DEMOTION                17\r
+#define CPU_FEATURE_C3_AUTO_DEMOTION                18\r
+#define CPU_FEATURE_C1_AUTO_UNDEMOTION              19\r
+#define CPU_FEATURE_C3_AUTO_UNDEMOTION              20\r
+#define CPU_FEATURE_C_STATE                         21\r
+#define CPU_FEATURE_TM                              22\r
+#define CPU_FEATURE_TM2                             23\r
+#define CPU_FEATURE_X2APIC                          24\r
+#define CPU_FEATURE_RESERVED_25                     25\r
+#define CPU_FEATURE_RESERVED_26                     26\r
+#define CPU_FEATURE_RESERVED_27                     27\r
+#define CPU_FEATURE_RESERVED_28                     28\r
+#define CPU_FEATURE_RESERVED_29                     29\r
+#define CPU_FEATURE_RESERVED_30                     30\r
+#define CPU_FEATURE_RESERVED_31                     31\r
+\r
+#define CPU_FEATURE_L2_PREFETCHER                   (32+0)\r
+#define CPU_FEATURE_L1_DATA_PREFETCHER              (32+1)\r
+#define CPU_FEATURE_HARDWARE_PREFETCHER             (32+2)\r
+#define CPU_FEATURE_ADJACENT_CACHE_LINE_PREFETCH    (32+3)\r
+#define CPU_FEATURE_DCU_PREFETCHER                  (32+4)\r
+#define CPU_FEATURE_IP_PREFETCHER                   (32+5)\r
+#define CPU_FEATURE_MLC_STREAMER_PREFETCHER         (32+6)\r
+#define CPU_FEATURE_MLC_SPATIAL_PREFETCHER          (32+7)\r
+#define CPU_FEATURE_THREE_STRICK_COUNTER            (32+8)\r
+#define CPU_FEATURE_APIC_TPR_UPDATE_MESSAGE         (32+9)\r
+#define CPU_FEATURE_ENERGY_PERFORMANCE_BIAS         (32+10)\r
+\r
+#define CPU_FEATURE_BEFORE_ALL                      BIT27\r
+#define CPU_FEATURE_AFTER_ALL                       BIT28\r
+#define CPU_FEATURE_BEFORE                          BIT29\r
+#define CPU_FEATURE_AFTER                           BIT30\r
+#define CPU_FEATURE_END                             MAX_UINT32\r
+/// @}\r
+\r
+///\r
+/// CPU Information passed into the SupportFunc and InitializeFunc of the\r
+/// RegisterCpuFeature() library function.  This structure contains information\r
+/// that is commonly used during CPU feature detection and initialization.\r
+///\r
+typedef struct {\r
+  ///\r
+  /// The package that the CPU resides\r
+  ///\r
+  EFI_PROCESSOR_INFORMATION            ProcessorInfo;\r
+  ///\r
+  /// The Display Family of the CPU computed from CPUID leaf CPUID_VERSION_INFO\r
+  ///\r
+  UINT32                               DisplayFamily;\r
+  ///\r
+  /// The Display Model of the CPU computed from CPUID leaf CPUID_VERSION_INFO\r
+  ///\r
+  UINT32                               DisplayModel;\r
+  ///\r
+  /// The Stepping ID of the CPU computed from CPUID leaf CPUID_VERSION_INFO\r
+  ///\r
+  UINT32                               SteppingId;\r
+  ///\r
+  /// The Processor Type of the CPU computed from CPUID leaf CPUID_VERSION_INFO\r
+  ///\r
+  UINT32                               ProcessorType;\r
+  ///\r
+  /// Bit field structured returned in ECX from CPUID leaf CPUID_VERSION_INFO\r
+  ///\r
+  CPUID_VERSION_INFO_ECX               CpuIdVersionInfoEcx;\r
+  ///\r
+  /// Bit field structured returned in EDX from CPUID leaf CPUID_VERSION_INFO\r
+  ///\r
+  CPUID_VERSION_INFO_EDX               CpuIdVersionInfoEdx;\r
+} REGISTER_CPU_FEATURE_INFORMATION;\r
+\r
+/**\r
+  Determines if a CPU feature is enabled in PcdCpuFeaturesSupport bit mask.\r
+  If a CPU feature is disabled in PcdCpuFeaturesSupport then all the code/data\r
+  associated with that feature should be optimized away if compiler\r
+  optimizations are enabled.\r
+\r
+  @param[in]  Feature  The bit number of the CPU feature to check in the PCD\r
+                       PcdCpuFeaturesSupport.\r
+\r
+  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesSupport.\r
+  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesSupport.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsCpuFeatureSupported (\r
+  IN UINT32              Feature\r
+  );\r
+\r
+/**\r
+  Determines if a CPU feature is set in PcdCpuFeaturesSetting bit mask.\r
+\r
+  @param[in]  Feature  The bit number of the CPU feature to check in the PCD\r
+                       PcdCpuFeaturesSetting.\r
+\r
+  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesSetting.\r
+  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesSetting.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsCpuFeatureInSetting (\r
+  IN UINT32              Feature\r
+  );\r
+\r
+/**\r
+  Determines if a CPU feature is set in PcdCpuFeaturesCapability bit mask.\r
+\r
+  @param[in]  Feature  The bit number of the CPU feature to check in the PCD\r
+                       PcdCpuFeaturesCapability.\r
+\r
+  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesCapability.\r
+  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesCapability.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsCpuFeatureCapability (\r
+  IN UINT32              Feature\r
+  );\r
+\r
+/**\r
+  Determines if a CPU feature is set in PcdCpuFeaturesUserConfiguration bit mask.\r
+\r
+  @param[in]  Feature  The bit number of the CPU feature to check in the PCD\r
+                       PcdCpuFeaturesUserConfiguration.\r
+\r
+  @retval  TRUE   The CPU feature is set in PcdCpuFeaturesUserConfiguration.\r
+  @retval  FALSE  The CPU feature is not set in PcdCpuFeaturesUserConfiguration.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsCpuFeatureUserConfiguration (\r
+  IN UINT32              Feature\r
+  );\r
+\r
+/**\r
+  Prepares for the data used by CPU feature detection and initialization.\r
+\r
+  @param[in]  NumberOfProcessors  The number of CPUs in the platform.\r
+\r
+  @return  Pointer to a buffer of CPU related configuration data.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+typedef\r
+VOID *\r
+(EFIAPI *CPU_FEATURE_GET_CONFIG_DATA)(\r
+  IN UINTN               NumberOfProcessors\r
+  );\r
+\r
+/**\r
+  Detects if CPU feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     CPU feature is supported.\r
+  @retval FALSE    CPU feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *CPU_FEATURE_SUPPORT)(\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes CPU feature to specific state.\r
+\r
+  This service does not initialize hardware and only produces entries in the\r
+  Register Table for specified processor. Hardware initialization on BSP/APs\r
+  will be done in CpuFeaturesInitialize().\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the CPU feature must be enabled.\r
+                               If FALSE, then the CPU feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       CPU feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+typedef\r
+RETURN_STATUS\r
+(EFIAPI *CPU_FEATURE_INITIALIZE)(\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Registers a CPU Feature.\r
+\r
+  @param[in]  FeatureName        A Null-terminated Ascii string indicates CPU feature\r
+                                 name.\r
+  @param[in]  GetConfigDataFunc  CPU feature get configuration data function.  This\r
+                                 is an optional parameter that may be NULL.  If NULL,\r
+                                 then the most recently registered function for the\r
+                                 CPU feature is used.  If no functions are registered\r
+                                 for a CPU feature, then the CPU configuration data\r
+                                 for the registered feature is NULL.\r
+  @param[in]  SupportFunc        CPU feature support function.  This is an optional\r
+                                 parameter that may be NULL.  If NULL, then the most\r
+                                 recently registered function for the CPU feature is\r
+                                 used. If no functions are registered for a CPU\r
+                                 feature, then the CPU feature is assumed to be\r
+                                 supported by all CPUs.\r
+  @param[in]  InitializeFunc     CPU feature initialize function.  This is an optional\r
+                                 parameter that may be NULL.  If NULL, then the most\r
+                                 recently registered function for the CPU feature is\r
+                                 used. If no functions are registered for a CPU\r
+                                 feature, then the CPU feature initialization is\r
+                                 skipped.\r
+  @param[in]  ...                Variable argument list of UINT32 CPU feature value.\r
+                                 Values with no modifiers are the features provided\r
+                                 by the registered functions.\r
+                                 Values with CPU_FEATURE_BEFORE modifier are features\r
+                                 that must be initialized after the features provided\r
+                                 by the registered functions are used.\r
+                                 Values with CPU_FEATURE_AFTER modifier are features\r
+                                 that must be initialized before the features provided\r
+                                 by the registered functions are used.\r
+                                 The last argument in this variable argument list must\r
+                                 always be CPU_FEATURE_END.\r
+\r
+  @retval  RETURN_SUCCESS           The CPU feature was successfully registered.\r
+  @retval  RETURN_OUT_OF_RESOURCES  There are not enough resources to register\r
+                                    the CPU feature.\r
+  @retval  RETURN_UNSUPPORTED       Registration of the CPU feature is not\r
+                                    supported due to a circular dependency between\r
+                                    BEFORE and AFTER features.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+RegisterCpuFeature (\r
+  IN CHAR8                             *FeatureName,       OPTIONAL\r
+  IN CPU_FEATURE_GET_CONFIG_DATA       GetConfigDataFunc,  OPTIONAL\r
+  IN CPU_FEATURE_SUPPORT               SupportFunc,        OPTIONAL\r
+  IN CPU_FEATURE_INITIALIZE            InitializeFunc,     OPTIONAL\r
+  ...\r
+  );\r
+\r
+/**\r
+  Performs CPU features detection.\r
+\r
+  This service will invoke MP service to check CPU features'\r
+  capabilities on BSP/APs.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID\r
+EFIAPI\r
+CpuFeaturesDetect (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Performs CPU features Initialization.\r
+\r
+  This service will invoke MP service to perform CPU features\r
+  initialization on BSP/APs per user configuration.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID\r
+EFIAPI\r
+CpuFeaturesInitialize (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Switches to assigned BSP after CPU features initialization.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID\r
+EFIAPI\r
+SwitchBspAfterFeaturesInitialize (\r
+  IN UINTN               ProcessorNumber\r
+  );\r
+\r
+/**\r
+  Adds an entry in specified register table.\r
+\r
+  This function adds an entry in specified register table, with given register type,\r
+  register index, bit section and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program\r
+  @param[in]  Index            Index of the register to program\r
+  @param[in]  ValueMask        Mask of bits in register to write\r
+  @param[in]  Value            Value to write\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID\r
+EFIAPI\r
+CpuRegisterTableWrite (\r
+  IN UINTN               ProcessorNumber,\r
+  IN REGISTER_TYPE       RegisterType,\r
+  IN UINT64              Index,\r
+  IN UINT64              ValueMask,\r
+  IN UINT64              Value\r
+  );\r
+\r
+/**\r
+  Adds an entry in specified Pre-SMM register table.\r
+\r
+  This function adds an entry in specified register table, with given register type,\r
+  register index, bit section and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program\r
+  @param[in]  Index            Index of the register to program\r
+  @param[in]  ValueMask        Mask of bits in register to write\r
+  @param[in]  Value            Value to write\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID\r
+EFIAPI\r
+PreSmmCpuRegisterTableWrite (\r
+  IN UINTN               ProcessorNumber,\r
+  IN REGISTER_TYPE       RegisterType,\r
+  IN UINT64              Index,\r
+  IN UINT64              ValueMask,\r
+  IN UINT64              Value\r
+  );\r
+\r
+/**\r
+  Adds a 32-bit register write entry in specified register table.\r
+\r
+  This macro adds an entry in specified register table, with given register type,\r
+  register index, and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program\r
+  @param[in]  Index            Index of the register to program\r
+  @param[in]  Value            Value to write\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+#define CPU_REGISTER_TABLE_WRITE32(ProcessorNumber, RegisterType, Index, Value)       \\r
+  do {                                                                                \\r
+    CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT32, Value);  \\r
+  } while(FALSE);\r
+\r
+/**\r
+  Adds a 64-bit register write entry in specified register table.\r
+\r
+  This macro adds an entry in specified register table, with given register type,\r
+  register index, and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program\r
+  @param[in]  Index            Index of the register to program\r
+  @param[in]  Value            Value to write\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+#define CPU_REGISTER_TABLE_WRITE64(ProcessorNumber, RegisterType, Index, Value)       \\r
+  do {                                                                                \\r
+    CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT64, Value);  \\r
+  } while(FALSE);\r
+\r
+/**\r
+  Adds a bit field write entry in specified register table.\r
+\r
+  This macro adds an entry in specified register table, with given register type,\r
+  register index, bit field section, and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program.\r
+  @param[in]  Index            Index of the register to program.\r
+  @param[in]  Type             The data type name of a register structure.\r
+  @param[in]  Field            The bit fiel name in register structure to write.\r
+  @param[in]  Value            Value to write to the bit field.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+#define CPU_REGISTER_TABLE_WRITE_FIELD(ProcessorNumber, RegisterType, Index, Type, Field, Value) \\r
+  do {                                                                                           \\r
+    UINT64  ValueMask;                                                                           \\r
+    ValueMask = MAX_UINT64;                                                                      \\r
+    ((Type *)(&ValueMask))->Field = 0;                                                           \\r
+    CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, ~ValueMask, Value);             \\r
+  } while(FALSE);\r
+\r
+/**\r
+  Adds a 32-bit register write entry in specified register table.\r
+\r
+  This macro adds an entry in specified register table, with given register type,\r
+  register index, and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program\r
+  @param[in]  Index            Index of the register to program\r
+  @param[in]  Value            Value to write\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+#define PRE_SMM_CPU_REGISTER_TABLE_WRITE32(ProcessorNumber, RegisterType, Index, Value)    \\r
+  do {                                                                                     \\r
+    PreSmmCpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT32, Value); \\r
+  } while(FALSE);\r
+\r
+/**\r
+  Adds a 64-bit register write entry in specified register table.\r
+\r
+  This macro adds an entry in specified register table, with given register type,\r
+  register index, and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program\r
+  @param[in]  Index            Index of the register to program\r
+  @param[in]  Value            Value to write\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+#define PRE_SMM_CPU_REGISTER_TABLE_WRITE64(ProcessorNumber, RegisterType, Index, Value)    \\r
+  do {                                                                                     \\r
+    PreSmmCpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT64, Value); \\r
+  } while(FALSE);\r
+\r
+/**\r
+  Adds a bit field write entry in specified register table.\r
+\r
+  This macro adds an entry in specified register table, with given register type,\r
+  register index, bit field section, and value.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU to add a register table entry.\r
+  @param[in]  RegisterType     Type of the register to program.\r
+  @param[in]  Index            Index of the register to program.\r
+  @param[in]  Type             The data type name of a register structure.\r
+  @param[in]  Field            The bit fiel name in register structure to write.\r
+  @param[in]  Value            Value to write to the bit field.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+#define PRE_SMM_CPU_REGISTER_TABLE_WRITE_FIELD(ProcessorNumber, RegisterType, Index, Type, Field, Value) \\r
+  do {                                                                                                   \\r
+    UINT64  ValueMask;                                                                                   \\r
+    ValueMask = MAX_UINT64;                                                                              \\r
+    ((Type *)(&ValueMask))->Field = 0;                                                                   \\r
+    PreSmmCpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, ~ValueMask, Value);                \\r
+  } while(FALSE);\r
+\r
+#endif\r
index d889410..178bfb5 100644 (file)
-/** @file
-  AESNI feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Prepares for the data used by CPU feature detection and initialization.
-
-  @param[in]  NumberOfProcessors  The number of CPUs in the platform.
-
-  @return  Pointer to a buffer of CPU related configuration data.
-
-  @note This service could be called by BSP only.
-**/
-VOID *
-EFIAPI
-AesniGetConfigData (
-  IN UINTN  NumberOfProcessors
-  )
-{
-  UINT64                            *ConfigData;
-
-  ConfigData = AllocateZeroPool (sizeof (UINT64) * NumberOfProcessors);
-  ASSERT (ConfigData != NULL);
-  return ConfigData;
-}
-
-/**
-  Detects if AESNI feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     AESNI feature is supported.
-  @retval FALSE    AESNI feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-AesniSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER   *MsrFeatureConfig;
-
-  if (IS_SANDY_BRIDGE_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||
-      IS_SILVERMONT_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||
-      IS_XEON_5600_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||
-      IS_XEON_E7_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||
-      IS_XEON_PHI_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel)) {
-    MsrFeatureConfig = (MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER *) ConfigData;
-    MsrFeatureConfig[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_SANDY_BRIDGE_FEATURE_CONFIG);
-    return (CpuInfo->CpuIdVersionInfoEcx.Bits.AESNI == 1);
-  }
-  return FALSE;
-}
-
-/**
-  Initializes AESNI feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the AESNI feature must be enabled.
-                               If FALSE, then the AESNI feature must be disabled.
-
-  @retval RETURN_SUCCESS       AESNI feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-AesniInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER   *MsrFeatureConfig;
-
-  //
-  // SANDY_BRIDGE, SILVERMONT, XEON_5600, XEON_7, and XEON_PHI have the same MSR index,
-  // Simply use MSR_SANDY_BRIDGE_FEATURE_CONFIG here
-  //
-  // The scope of the MSR_SANDY_BRIDGE_FEATURE_CONFIG is Core, only program MSR_FEATURE_CONFIG for thread 0
-  // of each core. Otherwise, once a thread in the core disabled AES, the other thread will cause GP when
-  // programming it.
-  //
-  if (CpuInfo->ProcessorInfo.Location.Thread == 0) {
-    MsrFeatureConfig = (MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER *) ConfigData;
-    if ((MsrFeatureConfig[ProcessorNumber].Bits.AESConfiguration & BIT0) == 0) {
-      CPU_REGISTER_TABLE_WRITE_FIELD (
-        ProcessorNumber,
-        Msr,
-        MSR_SANDY_BRIDGE_FEATURE_CONFIG,
-        MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER,
-        Bits.AESConfiguration,
-        BIT1 | ((State) ? 0 : BIT0)
-        );
-    }
-  }
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  AESNI feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Prepares for the data used by CPU feature detection and initialization.\r
+\r
+  @param[in]  NumberOfProcessors  The number of CPUs in the platform.\r
+\r
+  @return  Pointer to a buffer of CPU related configuration data.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID *\r
+EFIAPI\r
+AesniGetConfigData (\r
+  IN UINTN  NumberOfProcessors\r
+  )\r
+{\r
+  UINT64                            *ConfigData;\r
+\r
+  ConfigData = AllocateZeroPool (sizeof (UINT64) * NumberOfProcessors);\r
+  ASSERT (ConfigData != NULL);\r
+  return ConfigData;\r
+}\r
+\r
+/**\r
+  Detects if AESNI feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     AESNI feature is supported.\r
+  @retval FALSE    AESNI feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+AesniSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER   *MsrFeatureConfig;\r
+\r
+  if (IS_SANDY_BRIDGE_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||\r
+      IS_SILVERMONT_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||\r
+      IS_XEON_5600_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||\r
+      IS_XEON_E7_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel) ||\r
+      IS_XEON_PHI_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel)) {\r
+    MsrFeatureConfig = (MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER *) ConfigData;\r
+    MsrFeatureConfig[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_SANDY_BRIDGE_FEATURE_CONFIG);\r
+    return (CpuInfo->CpuIdVersionInfoEcx.Bits.AESNI == 1);\r
+  }\r
+  return FALSE;\r
+}\r
+\r
+/**\r
+  Initializes AESNI feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the AESNI feature must be enabled.\r
+                               If FALSE, then the AESNI feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       AESNI feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AesniInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER   *MsrFeatureConfig;\r
+\r
+  //\r
+  // SANDY_BRIDGE, SILVERMONT, XEON_5600, XEON_7, and XEON_PHI have the same MSR index,\r
+  // Simply use MSR_SANDY_BRIDGE_FEATURE_CONFIG here\r
+  //\r
+  // The scope of the MSR_SANDY_BRIDGE_FEATURE_CONFIG is Core, only program MSR_FEATURE_CONFIG for thread 0\r
+  // of each core. Otherwise, once a thread in the core disabled AES, the other thread will cause GP when\r
+  // programming it.\r
+  //\r
+  if (CpuInfo->ProcessorInfo.Location.Thread == 0) {\r
+    MsrFeatureConfig = (MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER *) ConfigData;\r
+    if ((MsrFeatureConfig[ProcessorNumber].Bits.AESConfiguration & BIT0) == 0) {\r
+      CPU_REGISTER_TABLE_WRITE_FIELD (\r
+        ProcessorNumber,\r
+        Msr,\r
+        MSR_SANDY_BRIDGE_FEATURE_CONFIG,\r
+        MSR_SANDY_BRIDGE_FEATURE_CONFIG_REGISTER,\r
+        Bits.AESConfiguration,\r
+        BIT1 | ((State) ? 0 : BIT0)\r
+        );\r
+    }\r
+  }\r
+  return RETURN_SUCCESS;\r
+}\r
index 116590f..4711635 100644 (file)
@@ -1,79 +1,79 @@
-/** @file
-  C1E feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if C1E feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     C1E feature is supported.
-  @retval FALSE    C1E feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-C1eSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  return IS_NEHALEM_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel);
-}
-
-/**
-  Initializes C1E feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the C1E feature must be enabled.
-                               If FALSE, then the C1E feature must be disabled.
-
-  @retval RETURN_SUCCESS       C1E feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-C1eInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  CPU_REGISTER_TABLE_WRITE_FIELD (
-    ProcessorNumber,
-    Msr,
-    MSR_NEHALEM_POWER_CTL,
-    MSR_NEHALEM_POWER_CTL_REGISTER,
-    Bits.C1EEnable,
-    (State) ? 1 : 0
-    );
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  C1E feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Detects if C1E feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     C1E feature is supported.\r
+  @retval FALSE    C1E feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+C1eSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  return IS_NEHALEM_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel);\r
+}\r
+\r
+/**\r
+  Initializes C1E feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the C1E feature must be enabled.\r
+                               If FALSE, then the C1E feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       C1E feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+C1eInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  CPU_REGISTER_TABLE_WRITE_FIELD (\r
+    ProcessorNumber,\r
+    Msr,\r
+    MSR_NEHALEM_POWER_CTL,\r
+    MSR_NEHALEM_POWER_CTL_REGISTER,\r
+    Bits.C1EEnable,\r
+    (State) ? 1 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
index adbe075..56e5356 100644 (file)
-/** @file
-  Clock Modulation feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if Clock Modulation feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Clock Modulation feature is supported.
-  @retval FALSE    Clock Modulation feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-ClockModulationSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  return (CpuInfo->CpuIdVersionInfoEdx.Bits.ACPI == 1);
-}
-
-/**
-  Initializes Clock Modulation feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Clock Modulation feature must be enabled.
-                               If FALSE, then the Clock Modulation feature must be disabled.
-
-  @retval RETURN_SUCCESS       Clock Modulation feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-ClockModulationInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  if (IS_SANDY_BRIDGE_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel)) {
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION,
-      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION_REGISTER,
-      Bits.OnDemandClockModulationDutyCycle,
-      PcdGet8 (PcdCpuClockModulationDutyCycle)
-      );
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION,
-      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION_REGISTER,
-      Bits.OnDemandClockModulationEnable,
-      (State) ? 1 : 0
-      );
-  } else {
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_CLOCK_MODULATION,
-      MSR_IA32_CLOCK_MODULATION_REGISTER,
-      Bits.OnDemandClockModulationDutyCycle,
-      PcdGet8 (PcdCpuClockModulationDutyCycle)
-      );
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_CLOCK_MODULATION,
-      MSR_IA32_CLOCK_MODULATION_REGISTER,
-      Bits.OnDemandClockModulationEnable,
-      (State) ? 1 : 0
-      );
-  }
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  Clock Modulation feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Detects if Clock Modulation feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Clock Modulation feature is supported.\r
+  @retval FALSE    Clock Modulation feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ClockModulationSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  return (CpuInfo->CpuIdVersionInfoEdx.Bits.ACPI == 1);\r
+}\r
+\r
+/**\r
+  Initializes Clock Modulation feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Clock Modulation feature must be enabled.\r
+                               If FALSE, then the Clock Modulation feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Clock Modulation feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+ClockModulationInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  if (IS_SANDY_BRIDGE_PROCESSOR (CpuInfo->DisplayFamily, CpuInfo->DisplayModel)) {\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION,\r
+      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION_REGISTER,\r
+      Bits.OnDemandClockModulationDutyCycle,\r
+      PcdGet8 (PcdCpuClockModulationDutyCycle)\r
+      );\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION,\r
+      MSR_SANDY_BRIDGE_IA32_CLOCK_MODULATION_REGISTER,\r
+      Bits.OnDemandClockModulationEnable,\r
+      (State) ? 1 : 0\r
+      );\r
+  } else {\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_CLOCK_MODULATION,\r
+      MSR_IA32_CLOCK_MODULATION_REGISTER,\r
+      Bits.OnDemandClockModulationDutyCycle,\r
+      PcdGet8 (PcdCpuClockModulationDutyCycle)\r
+      );\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_CLOCK_MODULATION,\r
+      MSR_IA32_CLOCK_MODULATION_REGISTER,\r
+      Bits.OnDemandClockModulationEnable,\r
+      (State) ? 1 : 0\r
+      );\r
+  }\r
+  return RETURN_SUCCESS;\r
+}\r
index 8118c1f..aa6d112 100644 (file)
-/** @file
-  CPU Common features library header file.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _CPU_COMMON_FEATURES_H_
-#define _CPU_COMMON_FEATURES_H_
-
-#include <PiDxe.h>
-
-#include <Library/BaseLib.h>
-#include <Library/PcdLib.h>
-#include <Library/DebugLib.h>
-#include <Library/RegisterCpuFeaturesLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/LocalApicLib.h>
-
-#include <Register/Cpuid.h>
-#include <Register/Msr.h>
-
-/**
-  Prepares for the data used by CPU feature detection and initialization.
-
-  @param[in]  NumberOfProcessors  The number of CPUs in the platform.
-
-  @return  Pointer to a buffer of CPU related configuration data.
-
-  @note This service could be called by BSP only.
-**/
-VOID *
-EFIAPI
-AesniGetConfigData (
-  IN UINTN  NumberOfProcessors
-  );
-
-/**
-  Detects if AESNI feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     AESNI feature is supported.
-  @retval FALSE    AESNI feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-AesniSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes AESNI feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the AESNI feature must be enabled.
-                               If FALSE, then the AESNI feature must be disabled.
-
-  @retval RETURN_SUCCESS       AESNI feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-AesniInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Clock Modulation feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Clock Modulation feature is supported.
-  @retval FALSE    Clock Modulation feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-ClockModulationSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Clock Modulation feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Clock Modulation feature must be enabled.
-                               If FALSE, then the Clock Modulation feature must be disabled.
-
-  @retval RETURN_SUCCESS       Clock Modulation feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-ClockModulationInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Enhanced Intel SpeedStep feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Enhanced Intel SpeedStep feature is supported.
-  @retval FALSE    Enhanced Intel SpeedStep feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-EistSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Enhanced Intel SpeedStep feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Enhanced Intel SpeedStep feature
-                               must be enabled.
-                               If FALSE, then the Enhanced Intel SpeedStep feature
-                               must be disabled.
-
-  @retval RETURN_SUCCESS       Enhanced Intel SpeedStep feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-EistInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Execute Disable feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Execute Disable feature is supported.
-  @retval FALSE    Execute Disable feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-ExecuteDisableSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Execute Disable feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Execute Disable feature must be enabled.
-                               If FALSE, then the Execute Disable feature must be disabled.
-
-  @retval RETURN_SUCCESS       Execute Disable feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-ExecuteDisableInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Initializes Fast-Strings feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Fast-Strings feature must be enabled.
-                               If FALSE, then the Fast-Strings feature must be disabled.
-
-  @retval RETURN_SUCCESS       Fast-Strings feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-FastStringsInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if MONITOR/MWAIT feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     MONITOR/MWAIT feature is supported.
-  @retval FALSE    MONITOR/MWAIT feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-MonitorMwaitSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes MONITOR/MWAIT feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the MONITOR/MWAIT feature must be enabled.
-                               If FALSE, then the MONITOR/MWAIT feature must be disabled.
-
-  @retval RETURN_SUCCESS       MONITOR/MWAIT feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-MonitorMwaitInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if VMX feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     VMX feature is supported.
-  @retval FALSE    VMX feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-VmxSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes VMX inside SMX feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the VMX inside SMX feature must be enabled.
-                               If FALSE, then the VMX inside SMX feature must be disabled.
-
-  @retval RETURN_SUCCESS       VMX inside SMX feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-VmxInsideSmxInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Initializes SENTER feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the SENTER feature must be enabled.
-                               If FALSE, then the SENTER feature must be disabled.
-
-  @retval RETURN_SUCCESS       SENTER feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-SenterInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Lock Feature Control Register feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Lock Feature Control Register feature is supported.
-  @retval FALSE    Lock Feature Control Register feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-LockFeatureControlRegisterSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Lock Feature Control Register feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Lock Feature Control Register feature must be enabled.
-                               If FALSE, then the Lock Feature Control Register feature must be disabled.
-
-  @retval RETURN_SUCCESS       Lock Feature Control Register feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-LockFeatureControlRegisterInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if SMX feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     SMX feature is supported.
-  @retval FALSE    SMX feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-SmxSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes VMX outside SMX feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the VMX outside SMX feature must be enabled.
-                               If FALSE, then the VMX outside SMX feature must be disabled.
-
-  @retval RETURN_SUCCESS       VMX outside SMX feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-VmxOutsideSmxInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if LimitCpuidMaxval feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     LimitCpuidMaxval feature is supported.
-  @retval FALSE    LimitCpuidMaxval feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-LimitCpuidMaxvalSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes LimitCpuidMaxval feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the LimitCpuidMaxval feature must be enabled.
-                               If FALSE, then the LimitCpuidMaxval feature must be disabled.
-
-  @retval RETURN_SUCCESS       LimitCpuidMaxval feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-LimitCpuidMaxvalInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Machine Check Exception feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Machine Check Exception feature is supported.
-  @retval FALSE    Machine Check Exception feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-MceSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Machine Check Exception feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Machine Check Exception feature must be enabled.
-                               If FALSE, then the Machine Check Exception feature must be disabled.
-
-  @retval RETURN_SUCCESS       Machine Check Exception feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-MceInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Machine Check Architecture feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Machine Check Architecture feature is supported.
-  @retval FALSE    Machine Check Architecture feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-McaSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Machine Check Architecture feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Machine Check Architecture feature must be enabled.
-                               If FALSE, then the Machine Check Architecture feature must be disabled.
-
-  @retval RETURN_SUCCESS       Machine Check Architecture feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-McaInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if IA32_MCG_CTL feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     IA32_MCG_CTL feature is supported.
-  @retval FALSE    IA32_MCG_CTL feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-McgCtlSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes IA32_MCG_CTL feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the IA32_MCG_CTL feature must be enabled.
-                               If FALSE, then the IA32_MCG_CTL feature must be disabled.
-
-  @retval RETURN_SUCCESS       IA32_MCG_CTL feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-McgCtlInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if Pending Break feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Pending Break feature is supported.
-  @retval FALSE    Pending Break feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-PendingBreakSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes Pending Break feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Pending Break feature must be enabled.
-                               If FALSE, then the Pending Break feature must be disabled.
-
-  @retval RETURN_SUCCESS       Pending Break feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-PendingBreakInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if C1E feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     C1E feature is supported.
-  @retval FALSE    C1E feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-C1eSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes C1E feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the C1E feature must be enabled.
-                               If FALSE, then the C1E feature must be disabled.
-
-  @retval RETURN_SUCCESS       C1E feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-C1eInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Detects if X2Apci feature supported on current processor.
-
-  Detect if X2Apci has been already enabled.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     X2Apci feature is supported.
-  @retval FALSE    X2Apci feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-X2ApicSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  );
-
-/**
-  Initializes X2Apci feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the X2Apci feature must be enabled.
-                               If FALSE, then the X2Apci feature must be disabled.
-
-  @retval RETURN_SUCCESS       X2Apci feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-X2ApicInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  );
-
-/**
-  Prepares for the data used by CPU feature detection and initialization.
-
-  @param[in]  NumberOfProcessors  The number of CPUs in the platform.
-
-  @return  Pointer to a buffer of CPU related configuration data.
-
-  @note This service could be called by BSP only.
-**/
-VOID *
-EFIAPI
-FeatureControlGetConfigData (
-  IN UINTN               NumberOfProcessors
-  );
-
-#endif
+/** @file\r
+  CPU Common features library header file.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _CPU_COMMON_FEATURES_H_\r
+#define _CPU_COMMON_FEATURES_H_\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/RegisterCpuFeaturesLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/LocalApicLib.h>\r
+\r
+#include <Register/Cpuid.h>\r
+#include <Register/Msr.h>\r
+\r
+/**\r
+  Prepares for the data used by CPU feature detection and initialization.\r
+\r
+  @param[in]  NumberOfProcessors  The number of CPUs in the platform.\r
+\r
+  @return  Pointer to a buffer of CPU related configuration data.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID *\r
+EFIAPI\r
+AesniGetConfigData (\r
+  IN UINTN  NumberOfProcessors\r
+  );\r
+\r
+/**\r
+  Detects if AESNI feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     AESNI feature is supported.\r
+  @retval FALSE    AESNI feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+AesniSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes AESNI feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the AESNI feature must be enabled.\r
+                               If FALSE, then the AESNI feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       AESNI feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AesniInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Clock Modulation feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Clock Modulation feature is supported.\r
+  @retval FALSE    Clock Modulation feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ClockModulationSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Clock Modulation feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Clock Modulation feature must be enabled.\r
+                               If FALSE, then the Clock Modulation feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Clock Modulation feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+ClockModulationInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Enhanced Intel SpeedStep feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Enhanced Intel SpeedStep feature is supported.\r
+  @retval FALSE    Enhanced Intel SpeedStep feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EistSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Enhanced Intel SpeedStep feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Enhanced Intel SpeedStep feature\r
+                               must be enabled.\r
+                               If FALSE, then the Enhanced Intel SpeedStep feature\r
+                               must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Enhanced Intel SpeedStep feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+EistInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Execute Disable feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Execute Disable feature is supported.\r
+  @retval FALSE    Execute Disable feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ExecuteDisableSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Execute Disable feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Execute Disable feature must be enabled.\r
+                               If FALSE, then the Execute Disable feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Execute Disable feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+ExecuteDisableInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Initializes Fast-Strings feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Fast-Strings feature must be enabled.\r
+                               If FALSE, then the Fast-Strings feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Fast-Strings feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+FastStringsInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if MONITOR/MWAIT feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     MONITOR/MWAIT feature is supported.\r
+  @retval FALSE    MONITOR/MWAIT feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MonitorMwaitSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes MONITOR/MWAIT feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the MONITOR/MWAIT feature must be enabled.\r
+                               If FALSE, then the MONITOR/MWAIT feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       MONITOR/MWAIT feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+MonitorMwaitInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if VMX feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     VMX feature is supported.\r
+  @retval FALSE    VMX feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+VmxSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes VMX inside SMX feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the VMX inside SMX feature must be enabled.\r
+                               If FALSE, then the VMX inside SMX feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       VMX inside SMX feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+VmxInsideSmxInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Initializes SENTER feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the SENTER feature must be enabled.\r
+                               If FALSE, then the SENTER feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       SENTER feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+SenterInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Lock Feature Control Register feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Lock Feature Control Register feature is supported.\r
+  @retval FALSE    Lock Feature Control Register feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+LockFeatureControlRegisterSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Lock Feature Control Register feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Lock Feature Control Register feature must be enabled.\r
+                               If FALSE, then the Lock Feature Control Register feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Lock Feature Control Register feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+LockFeatureControlRegisterInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if SMX feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     SMX feature is supported.\r
+  @retval FALSE    SMX feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+SmxSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes VMX outside SMX feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the VMX outside SMX feature must be enabled.\r
+                               If FALSE, then the VMX outside SMX feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       VMX outside SMX feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+VmxOutsideSmxInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if LimitCpuidMaxval feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     LimitCpuidMaxval feature is supported.\r
+  @retval FALSE    LimitCpuidMaxval feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+LimitCpuidMaxvalSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes LimitCpuidMaxval feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the LimitCpuidMaxval feature must be enabled.\r
+                               If FALSE, then the LimitCpuidMaxval feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       LimitCpuidMaxval feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+LimitCpuidMaxvalInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Machine Check Exception feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Machine Check Exception feature is supported.\r
+  @retval FALSE    Machine Check Exception feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MceSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Machine Check Exception feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Machine Check Exception feature must be enabled.\r
+                               If FALSE, then the Machine Check Exception feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Machine Check Exception feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+MceInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Machine Check Architecture feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Machine Check Architecture feature is supported.\r
+  @retval FALSE    Machine Check Architecture feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+McaSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Machine Check Architecture feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Machine Check Architecture feature must be enabled.\r
+                               If FALSE, then the Machine Check Architecture feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Machine Check Architecture feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+McaInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if IA32_MCG_CTL feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     IA32_MCG_CTL feature is supported.\r
+  @retval FALSE    IA32_MCG_CTL feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+McgCtlSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes IA32_MCG_CTL feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the IA32_MCG_CTL feature must be enabled.\r
+                               If FALSE, then the IA32_MCG_CTL feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       IA32_MCG_CTL feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+McgCtlInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if Pending Break feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Pending Break feature is supported.\r
+  @retval FALSE    Pending Break feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+PendingBreakSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes Pending Break feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Pending Break feature must be enabled.\r
+                               If FALSE, then the Pending Break feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Pending Break feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+PendingBreakInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if C1E feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     C1E feature is supported.\r
+  @retval FALSE    C1E feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+C1eSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes C1E feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the C1E feature must be enabled.\r
+                               If FALSE, then the C1E feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       C1E feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+C1eInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Detects if X2Apci feature supported on current processor.\r
+\r
+  Detect if X2Apci has been already enabled.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     X2Apci feature is supported.\r
+  @retval FALSE    X2Apci feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+X2ApicSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initializes X2Apci feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the X2Apci feature must be enabled.\r
+                               If FALSE, then the X2Apci feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       X2Apci feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+X2ApicInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  );\r
+\r
+/**\r
+  Prepares for the data used by CPU feature detection and initialization.\r
+\r
+  @param[in]  NumberOfProcessors  The number of CPUs in the platform.\r
+\r
+  @return  Pointer to a buffer of CPU related configuration data.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID *\r
+EFIAPI\r
+FeatureControlGetConfigData (\r
+  IN UINTN               NumberOfProcessors\r
+  );\r
+\r
+#endif\r
index 65ed756..3390aa8 100644 (file)
-/** @file
-  This library registers CPU features defined in Intel(R) 64 and IA-32
-  Architectures Software Developer's Manual.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Register CPU features.
-
-  @retval  RETURN_SUCCESS            Register successfully
-**/
-RETURN_STATUS
-EFIAPI
-CpuCommonFeaturesLibConstructor (
-  VOID
-  )
-{
-  RETURN_STATUS         Status;
-
-  if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {
-    Status = RegisterCpuFeature (
-               "AESNI",
-               AesniGetConfigData,
-               AesniSupport,
-               AesniInitialize,
-               CPU_FEATURE_AESNI,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {
-    Status = RegisterCpuFeature (
-               "MWAIT",
-               NULL,
-               MonitorMwaitSupport,
-               MonitorMwaitInitialize,
-               CPU_FEATURE_MWAIT,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {
-    Status = RegisterCpuFeature (
-               "ACPI",
-               NULL,
-               ClockModulationSupport,
-               ClockModulationInitialize,
-               CPU_FEATURE_ACPI,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {
-    Status = RegisterCpuFeature (
-               "EIST",
-               NULL,
-               EistSupport,
-               EistInitialize,
-               CPU_FEATURE_EIST,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {
-    Status = RegisterCpuFeature (
-               "Execute Disable",
-               NULL,
-               ExecuteDisableSupport,
-               ExecuteDisableInitialize,
-               CPU_FEATURE_XD,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {
-    Status = RegisterCpuFeature (
-               "FastStrings",
-               NULL,
-               NULL,
-               FastStringsInitialize,
-               CPU_FEATURE_FASTSTRINGS,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {
-    Status = RegisterCpuFeature (
-               "Lock Feature Control Register",
-               FeatureControlGetConfigData,
-               LockFeatureControlRegisterSupport,
-               LockFeatureControlRegisterInitialize,
-               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_SENTER)) {
-    Status = RegisterCpuFeature (
-               "SENTER",
-               FeatureControlGetConfigData,
-               VmxSupport,
-               SenterInitialize,
-               CPU_FEATURE_SENTER,
-               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
-               CPU_FEATURE_SMX | CPU_FEATURE_AFTER,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {
-    Status = RegisterCpuFeature (
-               "SMX",
-               FeatureControlGetConfigData,
-               SmxSupport,
-               VmxInsideSmxInitialize,
-               CPU_FEATURE_SMX,
-               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {
-    Status = RegisterCpuFeature (
-               "VMX",
-               FeatureControlGetConfigData,
-               SmxSupport,
-               VmxOutsideSmxInitialize,
-               CPU_FEATURE_VMX,
-               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {
-    Status = RegisterCpuFeature (
-               "Limit CpuId Maximum Value",
-               NULL,
-               LimitCpuidMaxvalSupport,
-               LimitCpuidMaxvalInitialize,
-               CPU_FEATURE_LIMIT_CPUID_MAX_VAL,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {
-    Status = RegisterCpuFeature (
-               "Machine Check Enable",
-               NULL,
-               MceSupport,
-               MceInitialize,
-               CPU_FEATURE_MCE,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {
-    Status = RegisterCpuFeature (
-               "Machine Check Architect",
-               NULL,
-               McaSupport,
-               McaInitialize,
-               CPU_FEATURE_MCA,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {
-    Status = RegisterCpuFeature (
-               "MCG_CTL",
-               NULL,
-               McgCtlSupport,
-               McgCtlInitialize,
-               CPU_FEATURE_MCG_CTL,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {
-    Status = RegisterCpuFeature (
-               "Pending Break",
-               NULL,
-               PendingBreakSupport,
-               PendingBreakInitialize,
-               CPU_FEATURE_PENDING_BREAK,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {
-    Status = RegisterCpuFeature (
-               "C1E",
-               NULL,
-               C1eSupport,
-               C1eInitialize,
-               CPU_FEATURE_C1E,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-  if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {
-    Status = RegisterCpuFeature (
-               "X2Apic",
-               NULL,
-               X2ApicSupport,
-               X2ApicInitialize,
-               CPU_FEATURE_X2APIC,
-               CPU_FEATURE_END
-               );
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  return RETURN_SUCCESS;
-}
-
-
-
+/** @file\r
+  This library registers CPU features defined in Intel(R) 64 and IA-32\r
+  Architectures Software Developer's Manual.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Register CPU features.\r
+\r
+  @retval  RETURN_SUCCESS            Register successfully\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+CpuCommonFeaturesLibConstructor (\r
+  VOID\r
+  )\r
+{\r
+  RETURN_STATUS         Status;\r
+\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {\r
+    Status = RegisterCpuFeature (\r
+               "AESNI",\r
+               AesniGetConfigData,\r
+               AesniSupport,\r
+               AesniInitialize,\r
+               CPU_FEATURE_AESNI,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {\r
+    Status = RegisterCpuFeature (\r
+               "MWAIT",\r
+               NULL,\r
+               MonitorMwaitSupport,\r
+               MonitorMwaitInitialize,\r
+               CPU_FEATURE_MWAIT,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {\r
+    Status = RegisterCpuFeature (\r
+               "ACPI",\r
+               NULL,\r
+               ClockModulationSupport,\r
+               ClockModulationInitialize,\r
+               CPU_FEATURE_ACPI,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {\r
+    Status = RegisterCpuFeature (\r
+               "EIST",\r
+               NULL,\r
+               EistSupport,\r
+               EistInitialize,\r
+               CPU_FEATURE_EIST,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {\r
+    Status = RegisterCpuFeature (\r
+               "Execute Disable",\r
+               NULL,\r
+               ExecuteDisableSupport,\r
+               ExecuteDisableInitialize,\r
+               CPU_FEATURE_XD,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {\r
+    Status = RegisterCpuFeature (\r
+               "FastStrings",\r
+               NULL,\r
+               NULL,\r
+               FastStringsInitialize,\r
+               CPU_FEATURE_FASTSTRINGS,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {\r
+    Status = RegisterCpuFeature (\r
+               "Lock Feature Control Register",\r
+               FeatureControlGetConfigData,\r
+               LockFeatureControlRegisterSupport,\r
+               LockFeatureControlRegisterInitialize,\r
+               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_SENTER)) {\r
+    Status = RegisterCpuFeature (\r
+               "SENTER",\r
+               FeatureControlGetConfigData,\r
+               VmxSupport,\r
+               SenterInitialize,\r
+               CPU_FEATURE_SENTER,\r
+               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
+               CPU_FEATURE_SMX | CPU_FEATURE_AFTER,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {\r
+    Status = RegisterCpuFeature (\r
+               "SMX",\r
+               FeatureControlGetConfigData,\r
+               SmxSupport,\r
+               VmxInsideSmxInitialize,\r
+               CPU_FEATURE_SMX,\r
+               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {\r
+    Status = RegisterCpuFeature (\r
+               "VMX",\r
+               FeatureControlGetConfigData,\r
+               SmxSupport,\r
+               VmxOutsideSmxInitialize,\r
+               CPU_FEATURE_VMX,\r
+               CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {\r
+    Status = RegisterCpuFeature (\r
+               "Limit CpuId Maximum Value",\r
+               NULL,\r
+               LimitCpuidMaxvalSupport,\r
+               LimitCpuidMaxvalInitialize,\r
+               CPU_FEATURE_LIMIT_CPUID_MAX_VAL,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {\r
+    Status = RegisterCpuFeature (\r
+               "Machine Check Enable",\r
+               NULL,\r
+               MceSupport,\r
+               MceInitialize,\r
+               CPU_FEATURE_MCE,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {\r
+    Status = RegisterCpuFeature (\r
+               "Machine Check Architect",\r
+               NULL,\r
+               McaSupport,\r
+               McaInitialize,\r
+               CPU_FEATURE_MCA,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {\r
+    Status = RegisterCpuFeature (\r
+               "MCG_CTL",\r
+               NULL,\r
+               McgCtlSupport,\r
+               McgCtlInitialize,\r
+               CPU_FEATURE_MCG_CTL,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {\r
+    Status = RegisterCpuFeature (\r
+               "Pending Break",\r
+               NULL,\r
+               PendingBreakSupport,\r
+               PendingBreakInitialize,\r
+               CPU_FEATURE_PENDING_BREAK,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {\r
+    Status = RegisterCpuFeature (\r
+               "C1E",\r
+               NULL,\r
+               C1eSupport,\r
+               C1eInitialize,\r
+               CPU_FEATURE_C1E,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+  if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {\r
+    Status = RegisterCpuFeature (\r
+               "X2Apic",\r
+               NULL,\r
+               X2ApicSupport,\r
+               X2ApicInitialize,\r
+               CPU_FEATURE_X2APIC,\r
+               CPU_FEATURE_END\r
+               );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+\r
+\r
index 4358196..e68936b 100644 (file)
@@ -1,68 +1,68 @@
-## @file
-#  NULL instance to register CPU features.
-#
-#  This library registers CPU features defined in Intel(R) 64 and IA-32
-#  Architectures Software Developer's Manual.
-#
-# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution. The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = CpuCommonFeaturesLib
-  MODULE_UNI_FILE                = CpuCommonFeaturesLib.uni
-  FILE_GUID                      = 6D69F79F-9535-4893-9DD7-93929898252C
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = NULL
-
-  CONSTRUCTOR                    = CpuCommonFeaturesLibConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-#  VALID_ARCHITECTURES           = IA32 X64
-#
-
-[Sources]
-  CpuCommonFeaturesLib.c
-  CpuCommonFeatures.h
-  Aesni.c
-  C1e.c
-  ClockModulation.c
-  Eist.c
-  ExecuteDisable.c
-  FastStrings.c
-  FeatureControl.c
-  LimitCpuIdMaxval.c
-  MachineCheck.c
-  MonitorMwait.c
-  PendingBreak.c
-  X2Apic.c
-
-[Packages]
-  MdePkg/MdePkg.dec
-  UefiCpuPkg/UefiCpuPkg.dec
-
-[LibraryClasses]
-  BaseLib
-  PcdLib
-  DebugLib
-  RegisterCpuFeaturesLib
-  BaseMemoryLib
-  MemoryAllocationLib
-  LocalApicLib
-
-[Pcd]
-  gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSupport            ## CONSUMES
-  gUefiCpuPkgTokenSpaceGuid.PcdCpuClockModulationDutyCycle   ## SOMETIMES_CONSUMES
-  gUefiCpuPkgTokenSpaceGuid.PcdIsPowerOnReset                ## SOMETIMES_CONSUMES
-
+## @file\r
+#  NULL instance to register CPU features.\r
+#\r
+#  This library registers CPU features defined in Intel(R) 64 and IA-32\r
+#  Architectures Software Developer's Manual.\r
+#\r
+# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+#\r
+#  This program and the accompanying materials\r
+#  are licensed and made available under the terms and conditions of the BSD License\r
+#  which accompanies this distribution. The full text of the license may be found at\r
+#  http://opensource.org/licenses/bsd-license.php\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = CpuCommonFeaturesLib\r
+  MODULE_UNI_FILE                = CpuCommonFeaturesLib.uni\r
+  FILE_GUID                      = 6D69F79F-9535-4893-9DD7-93929898252C\r
+  MODULE_TYPE                    = BASE\r
+  VERSION_STRING                 = 1.0\r
+  LIBRARY_CLASS                  = NULL\r
+\r
+  CONSTRUCTOR                    = CpuCommonFeaturesLibConstructor\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64\r
+#\r
+\r
+[Sources]\r
+  CpuCommonFeaturesLib.c\r
+  CpuCommonFeatures.h\r
+  Aesni.c\r
+  C1e.c\r
+  ClockModulation.c\r
+  Eist.c\r
+  ExecuteDisable.c\r
+  FastStrings.c\r
+  FeatureControl.c\r
+  LimitCpuIdMaxval.c\r
+  MachineCheck.c\r
+  MonitorMwait.c\r
+  PendingBreak.c\r
+  X2Apic.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  UefiCpuPkg/UefiCpuPkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  PcdLib\r
+  DebugLib\r
+  RegisterCpuFeaturesLib\r
+  BaseMemoryLib\r
+  MemoryAllocationLib\r
+  LocalApicLib\r
+\r
+[Pcd]\r
+  gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSupport            ## CONSUMES\r
+  gUefiCpuPkgTokenSpaceGuid.PcdCpuClockModulationDutyCycle   ## SOMETIMES_CONSUMES\r
+  gUefiCpuPkgTokenSpaceGuid.PcdIsPowerOnReset                ## SOMETIMES_CONSUMES\r
+\r
index 620766e..d1a90c3 100644 (file)
@@ -1,25 +1,25 @@
-// /** @file
-// Dxe Crc32 Guided Section Extract library.
-//
-// This library doesn't produce any library class. The constructor function uses
-// ExtractGuidedSectionLib service to register CRC32 guided section handler
-// that parses CRC32 encapsulation section and extracts raw data.
-//
-// It uses UEFI boot service CalculateCrc32 to authenticate 32 bit CRC value.
-//
-// Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-//
-// This program and the accompanying materials
-// are licensed and made available under the terms and conditions of the BSD License
-// which accompanies this distribution. The full text of the license may be found at
-// http://opensource.org/licenses/bsd-license.php
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT             #language en-US "Dxe Crc32 Guided Section Extract library."
-
-#string STR_MODULE_DESCRIPTION          #language en-US "This library doesn't produce any library class. The constructor function uses ExtractGuidedSectionLib service to register CRC32 guided section handler that parses CRC32 encapsulation section and extracts raw data. It uses UEFI boot service CalculateCrc32 to authenticate 32 bit CRC value."
-
+// /** @file\r
+// Dxe Crc32 Guided Section Extract library.\r
+//\r
+// This library doesn't produce any library class. The constructor function uses\r
+// ExtractGuidedSectionLib service to register CRC32 guided section handler\r
+// that parses CRC32 encapsulation section and extracts raw data.\r
+//\r
+// It uses UEFI boot service CalculateCrc32 to authenticate 32 bit CRC value.\r
+//\r
+// Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution. The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+// **/\r
+\r
+\r
+#string STR_MODULE_ABSTRACT             #language en-US "Dxe Crc32 Guided Section Extract library."\r
+\r
+#string STR_MODULE_DESCRIPTION          #language en-US "This library doesn't produce any library class. The constructor function uses ExtractGuidedSectionLib service to register CRC32 guided section handler that parses CRC32 encapsulation section and extracts raw data. It uses UEFI boot service CalculateCrc32 to authenticate 32 bit CRC value."\r
+\r
index e1d3d42..2038171 100644 (file)
@@ -1,81 +1,81 @@
-/** @file
-  Enhanced Intel SpeedStep feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if Enhanced Intel SpeedStep feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Enhanced Intel SpeedStep feature is supported.
-  @retval FALSE    Enhanced Intel SpeedStep feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-EistSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  return (CpuInfo->CpuIdVersionInfoEcx.Bits.EIST == 1);
-}
-
-/**
-  Initializes Enhanced Intel SpeedStep feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Enhanced Intel SpeedStep feature
-                               must be enabled.
-                               If FALSE, then the Enhanced Intel SpeedStep feature
-                               must be disabled.
-
-  @retval RETURN_SUCCESS       Enhanced Intel SpeedStep feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-EistInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  CPU_REGISTER_TABLE_WRITE_FIELD (
-    ProcessorNumber,
-    Msr,
-    MSR_IA32_MISC_ENABLE,
-    MSR_IA32_MISC_ENABLE_REGISTER,
-    Bits.EIST,
-    (State) ? 1 : 0
-    );
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  Enhanced Intel SpeedStep feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Detects if Enhanced Intel SpeedStep feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Enhanced Intel SpeedStep feature is supported.\r
+  @retval FALSE    Enhanced Intel SpeedStep feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EistSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  return (CpuInfo->CpuIdVersionInfoEcx.Bits.EIST == 1);\r
+}\r
+\r
+/**\r
+  Initializes Enhanced Intel SpeedStep feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Enhanced Intel SpeedStep feature\r
+                               must be enabled.\r
+                               If FALSE, then the Enhanced Intel SpeedStep feature\r
+                               must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Enhanced Intel SpeedStep feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+EistInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  CPU_REGISTER_TABLE_WRITE_FIELD (\r
+    ProcessorNumber,\r
+    Msr,\r
+    MSR_IA32_MISC_ENABLE,\r
+    MSR_IA32_MISC_ENABLE_REGISTER,\r
+    Bits.EIST,\r
+    (State) ? 1 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
index dd4293e..921656a 100644 (file)
@@ -1,91 +1,91 @@
-/** @file
-  Execute Disable feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if Execute Disable feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Execute Disable feature is supported.
-  @retval FALSE    Execute Disable feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-ExecuteDisableSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  UINT32                         Eax;
-  CPUID_EXTENDED_CPU_SIG_EDX     Edx;
-
-  AsmCpuid (CPUID_EXTENDED_FUNCTION, &Eax, NULL, NULL, NULL);
-  if (Eax <= CPUID_EXTENDED_FUNCTION) {
-    //
-    // Extended CPUID functions are not supported on this processor.
-    //
-    return FALSE;
-  }
-
-  AsmCpuid (CPUID_EXTENDED_CPU_SIG, NULL, NULL, NULL, &Edx.Uint32);
-  return (Edx.Bits.NX != 0);
-}
-
-/**
-  Initializes Execute Disable feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Execute Disable feature must be enabled.
-                               If FALSE, then the Execute Disable feature must be disabled.
-
-  @retval RETURN_SUCCESS       Execute Disable feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-ExecuteDisableInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  CPU_REGISTER_TABLE_WRITE_FIELD (
-    ProcessorNumber,
-    Msr,
-    MSR_IA32_EFER,
-    MSR_IA32_EFER_REGISTER,
-    Bits.NXE,
-    (State) ? 1 : 0
-    );
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  Execute Disable feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Detects if Execute Disable feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Execute Disable feature is supported.\r
+  @retval FALSE    Execute Disable feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ExecuteDisableSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  UINT32                         Eax;\r
+  CPUID_EXTENDED_CPU_SIG_EDX     Edx;\r
+\r
+  AsmCpuid (CPUID_EXTENDED_FUNCTION, &Eax, NULL, NULL, NULL);\r
+  if (Eax <= CPUID_EXTENDED_FUNCTION) {\r
+    //\r
+    // Extended CPUID functions are not supported on this processor.\r
+    //\r
+    return FALSE;\r
+  }\r
+\r
+  AsmCpuid (CPUID_EXTENDED_CPU_SIG, NULL, NULL, NULL, &Edx.Uint32);\r
+  return (Edx.Bits.NX != 0);\r
+}\r
+\r
+/**\r
+  Initializes Execute Disable feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Execute Disable feature must be enabled.\r
+                               If FALSE, then the Execute Disable feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Execute Disable feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+ExecuteDisableInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  CPU_REGISTER_TABLE_WRITE_FIELD (\r
+    ProcessorNumber,\r
+    Msr,\r
+    MSR_IA32_EFER,\r
+    MSR_IA32_EFER_REGISTER,\r
+    Bits.NXE,\r
+    (State) ? 1 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
index 4c3000d..029bcf8 100644 (file)
@@ -1,52 +1,52 @@
-/** @file
-  Fast-Strings feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Initializes Fast-Strings feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Fast-Strings feature must be enabled.
-                               If FALSE, then the Fast-Strings feature must be disabled.
-
-  @retval RETURN_SUCCESS       Fast-Strings feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-FastStringsInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  CPU_REGISTER_TABLE_WRITE_FIELD (
-    ProcessorNumber,
-    Msr,
-    MSR_IA32_MISC_ENABLE,
-    MSR_IA32_MISC_ENABLE_REGISTER,
-    Bits.FastStrings,
-    (State) ? 1 : 0
-    );
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  Fast-Strings feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Initializes Fast-Strings feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Fast-Strings feature must be enabled.\r
+                               If FALSE, then the Fast-Strings feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Fast-Strings feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+FastStringsInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  CPU_REGISTER_TABLE_WRITE_FIELD (\r
+    ProcessorNumber,\r
+    Msr,\r
+    MSR_IA32_MISC_ENABLE,\r
+    MSR_IA32_MISC_ENABLE_REGISTER,\r
+    Bits.FastStrings,\r
+    (State) ? 1 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
index e627a65..0b5c161 100644 (file)
-/** @file
-  Features in MSR_IA32_FEATURE_CONTROL register.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Prepares for the data used by CPU feature detection and initialization.
-
-  @param[in]  NumberOfProcessors  The number of CPUs in the platform.
-
-  @return  Pointer to a buffer of CPU related configuration data.
-
-  @note This service could be called by BSP only.
-**/
-VOID *
-EFIAPI
-FeatureControlGetConfigData (
-  IN UINTN               NumberOfProcessors
-  )
-{
-  VOID          *ConfigData;
-
-  ConfigData = AllocateZeroPool (sizeof (MSR_IA32_FEATURE_CONTROL_REGISTER) * NumberOfProcessors);
-  ASSERT (ConfigData != NULL);
-  return ConfigData;
-}
-
-/**
-  Detects if VMX feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     VMX feature is supported.
-  @retval FALSE    VMX feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-VmxSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  MsrRegister[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
-  return (CpuInfo->CpuIdVersionInfoEcx.Bits.VMX == 1);
-}
-
-/**
-  Initializes VMX inside SMX feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the VMX inside SMX feature must be enabled.
-                               If FALSE, then the VMX inside SMX feature must be disabled.
-
-  @retval RETURN_SUCCESS       VMX inside SMX feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-VmxInsideSmxInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_FEATURE_CONTROL,
-      MSR_IA32_FEATURE_CONTROL_REGISTER,
-      Bits.EnableVmxInsideSmx,
-      (State) ? 1 : 0
-      );
-  }
-  return RETURN_SUCCESS;
-}
-
-/**
-  Initializes SENTER feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the SENTER feature must be enabled.
-                               If FALSE, then the SENTER feature must be disabled.
-
-  @retval RETURN_SUCCESS       SENTER feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-SenterInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_FEATURE_CONTROL,
-      MSR_IA32_FEATURE_CONTROL_REGISTER,
-      Bits.SenterLocalFunctionEnables,
-      (State) ? 0x7F : 0
-      );
-
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_FEATURE_CONTROL,
-      MSR_IA32_FEATURE_CONTROL_REGISTER,
-      Bits.SenterGlobalEnable,
-      (State) ? 1 : 0
-      );
-  }
-  return RETURN_SUCCESS;
-}
-
-/**
-  Detects if Lock Feature Control Register feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Lock Feature Control Register feature is supported.
-  @retval FALSE    Lock Feature Control Register feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-LockFeatureControlRegisterSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  MsrRegister[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
-  return TRUE;
-}
-
-/**
-  Initializes Lock Feature Control Register feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Lock Feature Control Register feature must be enabled.
-                               If FALSE, then the Lock Feature Control Register feature must be disabled.
-
-  @retval RETURN_SUCCESS       Lock Feature Control Register feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-LockFeatureControlRegisterInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_FEATURE_CONTROL,
-      MSR_IA32_FEATURE_CONTROL_REGISTER,
-      Bits.Lock,
-      1
-      );
-  }
-  return RETURN_SUCCESS;
-}
-
-/**
-  Detects if SMX feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     SMX feature is supported.
-  @retval FALSE    SMX feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-SmxSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  MsrRegister[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
-  return (CpuInfo->CpuIdVersionInfoEcx.Bits.SMX == 1);
-}
-
-/**
-  Initializes VMX outside SMX feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the VMX outside SMX feature must be enabled.
-                               If FALSE, then the VMX outside SMX feature must be disabled.
-
-  @retval RETURN_SUCCESS       VMX outside SMX feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-VmxOutsideSmxInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;
-
-  ASSERT (ConfigData != NULL);
-  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;
-  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {
-    CPU_REGISTER_TABLE_WRITE_FIELD (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_FEATURE_CONTROL,
-      MSR_IA32_FEATURE_CONTROL_REGISTER,
-      Bits.EnableVmxOutsideSmx,
-      (State) ? 1 : 0
-      );
-  }
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  Features in MSR_IA32_FEATURE_CONTROL register.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Prepares for the data used by CPU feature detection and initialization.\r
+\r
+  @param[in]  NumberOfProcessors  The number of CPUs in the platform.\r
+\r
+  @return  Pointer to a buffer of CPU related configuration data.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+VOID *\r
+EFIAPI\r
+FeatureControlGetConfigData (\r
+  IN UINTN               NumberOfProcessors\r
+  )\r
+{\r
+  VOID          *ConfigData;\r
+\r
+  ConfigData = AllocateZeroPool (sizeof (MSR_IA32_FEATURE_CONTROL_REGISTER) * NumberOfProcessors);\r
+  ASSERT (ConfigData != NULL);\r
+  return ConfigData;\r
+}\r
+\r
+/**\r
+  Detects if VMX feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     VMX feature is supported.\r
+  @retval FALSE    VMX feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+VmxSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  MsrRegister[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);\r
+  return (CpuInfo->CpuIdVersionInfoEcx.Bits.VMX == 1);\r
+}\r
+\r
+/**\r
+  Initializes VMX inside SMX feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the VMX inside SMX feature must be enabled.\r
+                               If FALSE, then the VMX inside SMX feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       VMX inside SMX feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+VmxInsideSmxInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_FEATURE_CONTROL,\r
+      MSR_IA32_FEATURE_CONTROL_REGISTER,\r
+      Bits.EnableVmxInsideSmx,\r
+      (State) ? 1 : 0\r
+      );\r
+  }\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+  Initializes SENTER feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the SENTER feature must be enabled.\r
+                               If FALSE, then the SENTER feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       SENTER feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+SenterInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_FEATURE_CONTROL,\r
+      MSR_IA32_FEATURE_CONTROL_REGISTER,\r
+      Bits.SenterLocalFunctionEnables,\r
+      (State) ? 0x7F : 0\r
+      );\r
+\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_FEATURE_CONTROL,\r
+      MSR_IA32_FEATURE_CONTROL_REGISTER,\r
+      Bits.SenterGlobalEnable,\r
+      (State) ? 1 : 0\r
+      );\r
+  }\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+  Detects if Lock Feature Control Register feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Lock Feature Control Register feature is supported.\r
+  @retval FALSE    Lock Feature Control Register feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+LockFeatureControlRegisterSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  MsrRegister[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);\r
+  return TRUE;\r
+}\r
+\r
+/**\r
+  Initializes Lock Feature Control Register feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Lock Feature Control Register feature must be enabled.\r
+                               If FALSE, then the Lock Feature Control Register feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Lock Feature Control Register feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+LockFeatureControlRegisterInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_FEATURE_CONTROL,\r
+      MSR_IA32_FEATURE_CONTROL_REGISTER,\r
+      Bits.Lock,\r
+      1\r
+      );\r
+  }\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+  Detects if SMX feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     SMX feature is supported.\r
+  @retval FALSE    SMX feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+SmxSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  MsrRegister[ProcessorNumber].Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);\r
+  return (CpuInfo->CpuIdVersionInfoEcx.Bits.SMX == 1);\r
+}\r
+\r
+/**\r
+  Initializes VMX outside SMX feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the VMX outside SMX feature must be enabled.\r
+                               If FALSE, then the VMX outside SMX feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       VMX outside SMX feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+VmxOutsideSmxInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  MSR_IA32_FEATURE_CONTROL_REGISTER    *MsrRegister;\r
+\r
+  ASSERT (ConfigData != NULL);\r
+  MsrRegister = (MSR_IA32_FEATURE_CONTROL_REGISTER *) ConfigData;\r
+  if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {\r
+    CPU_REGISTER_TABLE_WRITE_FIELD (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_FEATURE_CONTROL,\r
+      MSR_IA32_FEATURE_CONTROL_REGISTER,\r
+      Bits.EnableVmxOutsideSmx,\r
+      (State) ? 1 : 0\r
+      );\r
+  }\r
+  return RETURN_SUCCESS;\r
+}\r
index 0f51fb3..40cc9d5 100644 (file)
@@ -1,82 +1,82 @@
-/** @file
-  LimitCpuidMaxval Feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if LimitCpuidMaxval feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     LimitCpuidMaxval feature is supported.
-  @retval FALSE    LimitCpuidMaxval feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-LimitCpuidMaxvalSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  UINT32  Eax;
-
-  AsmCpuid (CPUID_SIGNATURE, &Eax, NULL, NULL, NULL);
-  return (Eax > 3);
-}
-
-/**
-  Initializes LimitCpuidMaxval feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the LimitCpuidMaxval feature must be enabled.
-                               If FALSE, then the LimitCpuidMaxval feature must be disabled.
-
-  @retval RETURN_SUCCESS       LimitCpuidMaxval feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-LimitCpuidMaxvalInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  CPU_REGISTER_TABLE_WRITE_FIELD (
-    ProcessorNumber,
-    Msr,
-    MSR_IA32_MISC_ENABLE,
-    MSR_IA32_MISC_ENABLE_REGISTER,
-    Bits.LimitCpuidMaxval,
-    (State) ? 1 : 0
-    );
-  return RETURN_SUCCESS;
-}
+/** @file\r
+  LimitCpuidMaxval Feature.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Detects if LimitCpuidMaxval feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     LimitCpuidMaxval feature is supported.\r
+  @retval FALSE    LimitCpuidMaxval feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+LimitCpuidMaxvalSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  UINT32  Eax;\r
+\r
+  AsmCpuid (CPUID_SIGNATURE, &Eax, NULL, NULL, NULL);\r
+  return (Eax > 3);\r
+}\r
+\r
+/**\r
+  Initializes LimitCpuidMaxval feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the LimitCpuidMaxval feature must be enabled.\r
+                               If FALSE, then the LimitCpuidMaxval feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       LimitCpuidMaxval feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+LimitCpuidMaxvalInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  CPU_REGISTER_TABLE_WRITE_FIELD (\r
+    ProcessorNumber,\r
+    Msr,\r
+    MSR_IA32_MISC_ENABLE,\r
+    MSR_IA32_MISC_ENABLE_REGISTER,\r
+    Bits.LimitCpuidMaxval,\r
+    (State) ? 1 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
index 2d9501b..72f665d 100644 (file)
-/** @file
-  Machine Check features.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if Machine Check Exception feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Machine Check Exception feature is supported.
-  @retval FALSE    Machine Check Exception feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-MceSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  return (CpuInfo->CpuIdVersionInfoEdx.Bits.MCE == 1);
-}
-
-/**
-  Initializes Machine Check Exception feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Machine Check Exception feature must be enabled.
-                               If FALSE, then the Machine Check Exception feature must be disabled.
-
-  @retval RETURN_SUCCESS       Machine Check Exception feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-MceInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  //
-  // Set MCE bit in CR4
-  //
-  CPU_REGISTER_TABLE_WRITE_FIELD (
-    ProcessorNumber,
-    ControlRegister,
-    4,
-    IA32_CR4,
-    Bits.MCE,
-    (State) ? 1 : 0
-    );
-  return RETURN_SUCCESS;
-}
-
-/**
-  Detects if Machine Check Architecture feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     Machine Check Architecture feature is supported.
-  @retval FALSE    Machine Check Architecture feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-McaSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  return (CpuInfo->CpuIdVersionInfoEdx.Bits.MCA == 1);
-}
-
-/**
-  Initializes Machine Check Architecture feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the Machine Check Architecture feature must be enabled.
-                               If FALSE, then the Machine Check Architecture feature must be disabled.
-
-  @retval RETURN_SUCCESS       Machine Check Architecture feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-McaInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  MSR_IA32_MCG_CAP_REGISTER  McgCap;
-  UINT32                     BankIndex;
-
-  McgCap.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
-  for (BankIndex = 0; BankIndex < (UINT32) McgCap.Bits.Count; BankIndex++) {
-    CPU_REGISTER_TABLE_WRITE64 (
-      ProcessorNumber,
-      Msr,
-      MSR_IA32_MC0_CTL + BankIndex * 4,
-      MAX_UINT64
-      );
-  }
-
-  if (PcdGetBool (PcdIsPowerOnReset)) {
-    for (BankIndex = 0; BankIndex < (UINTN) McgCap.Bits.Count; BankIndex++) {
-      CPU_REGISTER_TABLE_WRITE64 (
-        ProcessorNumber,
-        Msr,
-        MSR_IA32_MC0_STATUS + BankIndex * 4,
-        0
-        );
-    }
-  }
-
-  return RETURN_SUCCESS;
-}
-
-/**
-  Detects if IA32_MCG_CTL feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-
-  @retval TRUE     IA32_MCG_CTL feature is supported.
-  @retval FALSE    IA32_MCG_CTL feature is not supported.
-
-  @note This service could be called by BSP/APs.
-**/
-BOOLEAN
-EFIAPI
-McgCtlSupport (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData  OPTIONAL
-  )
-{
-  MSR_IA32_MCG_CAP_REGISTER  McgCap;
-
-  if (!McaSupport (ProcessorNumber, CpuInfo, ConfigData)) {
-    return FALSE;
-  }
-  McgCap.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
-  return (McgCap.Bits.MCG_CTL_P == 1);
-}
-
-/**
-  Initializes IA32_MCG_CTL feature to specific state.
-
-  @param[in]  ProcessorNumber  The index of the CPU executing this function.
-  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION
-                               structure for the CPU executing this function.
-  @param[in]  ConfigData       A pointer to the configuration buffer returned
-                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if
-                               CPU_FEATURE_GET_CONFIG_DATA was not provided in
-                               RegisterCpuFeature().
-  @param[in]  State            If TRUE, then the IA32_MCG_CTL feature must be enabled.
-                               If FALSE, then the IA32_MCG_CTL feature must be disabled.
-
-  @retval RETURN_SUCCESS       IA32_MCG_CTL feature is initialized.
-
-  @note This service could be called by BSP only.
-**/
-RETURN_STATUS
-EFIAPI
-McgCtlInitialize (
-  IN UINTN                             ProcessorNumber,
-  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,
-  IN VOID                              *ConfigData,  OPTIONAL
-  IN BOOLEAN                           State
-  )
-{
-  CPU_REGISTER_TABLE_WRITE64 (
-    ProcessorNumber,
-    Msr,
-    MSR_IA32_MCG_CTL,
-    (State)? MAX_UINT64 : 0
-    );
-  return RETURN_SUCCESS;
-}
-
+/** @file\r
+  Machine Check features.\r
+\r
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+  Detects if Machine Check Exception feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Machine Check Exception feature is supported.\r
+  @retval FALSE    Machine Check Exception feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+MceSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  return (CpuInfo->CpuIdVersionInfoEdx.Bits.MCE == 1);\r
+}\r
+\r
+/**\r
+  Initializes Machine Check Exception feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Machine Check Exception feature must be enabled.\r
+                               If FALSE, then the Machine Check Exception feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Machine Check Exception feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+MceInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  //\r
+  // Set MCE bit in CR4\r
+  //\r
+  CPU_REGISTER_TABLE_WRITE_FIELD (\r
+    ProcessorNumber,\r
+    ControlRegister,\r
+    4,\r
+    IA32_CR4,\r
+    Bits.MCE,\r
+    (State) ? 1 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+  Detects if Machine Check Architecture feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     Machine Check Architecture feature is supported.\r
+  @retval FALSE    Machine Check Architecture feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+McaSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  return (CpuInfo->CpuIdVersionInfoEdx.Bits.MCA == 1);\r
+}\r
+\r
+/**\r
+  Initializes Machine Check Architecture feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the Machine Check Architecture feature must be enabled.\r
+                               If FALSE, then the Machine Check Architecture feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       Machine Check Architecture feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+McaInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  MSR_IA32_MCG_CAP_REGISTER  McgCap;\r
+  UINT32                     BankIndex;\r
+\r
+  McgCap.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);\r
+  for (BankIndex = 0; BankIndex < (UINT32) McgCap.Bits.Count; BankIndex++) {\r
+    CPU_REGISTER_TABLE_WRITE64 (\r
+      ProcessorNumber,\r
+      Msr,\r
+      MSR_IA32_MC0_CTL + BankIndex * 4,\r
+      MAX_UINT64\r
+      );\r
+  }\r
+\r
+  if (PcdGetBool (PcdIsPowerOnReset)) {\r
+    for (BankIndex = 0; BankIndex < (UINTN) McgCap.Bits.Count; BankIndex++) {\r
+      CPU_REGISTER_TABLE_WRITE64 (\r
+        ProcessorNumber,\r
+        Msr,\r
+        MSR_IA32_MC0_STATUS + BankIndex * 4,\r
+        0\r
+        );\r
+    }\r
+  }\r
+\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+  Detects if IA32_MCG_CTL feature supported on current processor.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+\r
+  @retval TRUE     IA32_MCG_CTL feature is supported.\r
+  @retval FALSE    IA32_MCG_CTL feature is not supported.\r
+\r
+  @note This service could be called by BSP/APs.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+McgCtlSupport (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData  OPTIONAL\r
+  )\r
+{\r
+  MSR_IA32_MCG_CAP_REGISTER  McgCap;\r
+\r
+  if (!McaSupport (ProcessorNumber, CpuInfo, ConfigData)) {\r
+    return FALSE;\r
+  }\r
+  McgCap.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);\r
+  return (McgCap.Bits.MCG_CTL_P == 1);\r
+}\r
+\r
+/**\r
+  Initializes IA32_MCG_CTL feature to specific state.\r
+\r
+  @param[in]  ProcessorNumber  The index of the CPU executing this function.\r
+  @param[in]  CpuInfo          A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
+                               structure for the CPU executing this function.\r
+  @param[in]  ConfigData       A pointer to the configuration buffer returned\r
+                               by CPU_FEATURE_GET_CONFIG_DATA.  NULL if\r
+                               CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
+                               RegisterCpuFeature().\r
+  @param[in]  State            If TRUE, then the IA32_MCG_CTL feature must be enabled.\r
+                               If FALSE, then the IA32_MCG_CTL feature must be disabled.\r
+\r
+  @retval RETURN_SUCCESS       IA32_MCG_CTL feature is initialized.\r
+\r
+  @note This service could be called by BSP only.\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+McgCtlInitialize (\r
+  IN UINTN                             ProcessorNumber,\r
+  IN REGISTER_CPU_FEATURE_INFORMATION  *CpuInfo,\r
+  IN VOID                              *ConfigData,  OPTIONAL\r
+  IN BOOLEAN                           State\r
+  )\r
+{\r
+  CPU_REGISTER_TABLE_WRITE64 (\r
+    ProcessorNumber,\r
+    Msr,\r
+    MSR_IA32_MCG_CTL,\r
+    (State)? MAX_UINT64 : 0\r
+    );\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
index b1c18bc..1d43bd1 100644 (file)
@@ -1,79 +1,79 @@
-/** @file
-  MonitorMwait feature.
-
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
-  Detects if MONITOR/MWAIT feature supported on current processor.
-
-  @param[in]  ProcessorNumber  The index of the