]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h
UefiCpuPkg/RegisterCpuFeaturesLib: Rename [Before|After]FeatureBitMask
[mirror_edk2.git] / UefiCpuPkg / Library / RegisterCpuFeaturesLib / RegisterCpuFeatures.h
index 11f8eb794def293e40009e3e4a9c9c84457d5d3a..53cb340b4c3beea86d72c1e061895d9086d01345 100644 (file)
-/** @file
-  CPU Register Table Library definitions.
-
-  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_H_
-#define _REGISTER_CPU_FEATURES_H_
-
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-#include <Library/RegisterCpuFeaturesLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/SynchronizationLib.h>
-#include <Library/IoLib.h>
-
-#include <AcpiCpuData.h>
-
-#define CPU_FEATURE_ENTRY_SIGNATURE  SIGNATURE_32 ('C', 'F', 'E', 'S')
-
-#define CPU_FEATURE_NAME_SIZE        128
-
-typedef struct {
-  REGISTER_CPU_FEATURE_INFORMATION     CpuInfo;
-  UINT8                                *FeaturesSupportedMask;
-  LIST_ENTRY                           OrderList;
-} CPU_FEATURES_INIT_ORDER;
-
-typedef struct {
-  UINT32                       Signature;
-  LIST_ENTRY                   Link;
-  UINT8                        *FeatureMask;
-  CHAR8                        *FeatureName;
-  CPU_FEATURE_GET_CONFIG_DATA  GetConfigDataFunc;
-  CPU_FEATURE_SUPPORT          SupportFunc;
-  CPU_FEATURE_INITIALIZE       InitializeFunc;
-  UINT8                        *BeforeFeatureBitMask;
-  UINT8                        *AfterFeatureBitMask;
-  VOID                         *ConfigData;
-  BOOLEAN                      BeforeAll;
-  BOOLEAN                      AfterAll;
-} CPU_FEATURES_ENTRY;
-
-typedef struct {
-  UINTN                    FeaturesCount;
-  UINT32                   BitMaskSize;
-  SPIN_LOCK                MsrLock;
-  SPIN_LOCK                MemoryMappedLock;
-  LIST_ENTRY               FeatureList;
-
-  CPU_FEATURES_INIT_ORDER  *InitOrder;
-  UINT8                    *SupportPcds;
-  UINT8                    *CapabilityPcds;
-  UINT8                    *ConfigurationPcds;
-  UINT8                    *SettingPcds;
-
-  CPU_REGISTER_TABLE       *RegisterTable;
-  CPU_REGISTER_TABLE       *PreSmmRegisterTable;
-  UINTN                    BspNumber;
-} CPU_FEATURES_DATA;
-
-#define CPU_FEATURE_ENTRY_FROM_LINK(a) \
-  CR ( \
-  (a), \
-  CPU_FEATURES_ENTRY, \
-  Link, \
-  CPU_FEATURE_ENTRY_SIGNATURE \
-  )
-
-/**
-  Worker function to get CPU_FEATURES_DATA pointer.
-
-  @return Pointer to CPU_FEATURES_DATA.
-**/
-CPU_FEATURES_DATA *
-GetCpuFeaturesData (
-  VOID
-  );
-
-/**
-  Enlarges CPU register table for each processor.
-
-  @param[in, out]  RegisterTable   Pointer processor's CPU register table
-**/
-VOID
-EnlargeRegisterTable (
-  IN OUT CPU_REGISTER_TABLE            *RegisterTable
-  );
-
-/**
-  Allocates ACPI NVS memory to save ACPI_CPU_DATA.
-
-  @return  Pointer to allocated ACPI_CPU_DATA.
-**/
-ACPI_CPU_DATA *
-AllocateAcpiCpuData (
-  VOID
-  );
-
-/**
-  Worker function to return processor index.
-
-  @return  The processor index.
-**/
-UINTN
-GetProcessorIndex (
-  VOID
-  );
-
-/**
-  Gets detailed MP-related information on the requested processor at the
-  instant this call is made.
-
-  @param[in]  ProcessorNumber       The handle number of processor.
-  @param[out] ProcessorInfoBuffer   A pointer to the buffer where information for
-                                    the requested processor is deposited.
-
-  @return Status of MpServices->GetProcessorInfo().
-**/
-EFI_STATUS
-GetProcessorInformation (
-  IN  UINTN                            ProcessorNumber,
-  OUT EFI_PROCESSOR_INFORMATION        *ProcessorInfoBuffer
-  );
-
-/**
-  Worker function to execute a caller provided function on all enabled APs.
-
-  @param[in]  Procedure               A pointer to the function to be run on
-                                      enabled APs of the system.
-**/
-VOID
-StartupAPsWorker (
-  IN  EFI_AP_PROCEDURE                 Procedure
-  );
-
-/**
-  Worker function to retrieve the number of logical processor in the platform.
-
-  @param[out] NumberOfCpus                Pointer to the total number of logical
-                                          processors in the system, including the BSP
-                                          and disabled APs.
-  @param[out] NumberOfEnabledProcessors   Pointer to the number of enabled logical
-                                          processors that exist in system, including
-                                          the BSP.
-**/
-VOID
-GetNumberOfProcessor (
-  OUT UINTN                            *NumberOfCpus,
-  OUT UINTN                            *NumberOfEnabledProcessors
-  );
-
-/**
-  Worker function to switch the requested AP to be the BSP from that point onward.
-
-  @param[in] ProcessorNumber   The handle number of AP that is to become the new BSP.
-**/
-VOID
-SwitchNewBsp (
-  IN  UINTN                            ProcessorNumber
-  );
-
-/**
-  Function that uses DEBUG() macros to display the contents of a a CPU feature bit mask.
-
-  @param[in]  FeatureMask  A pointer to the CPU feature bit mask.
-**/
-VOID
-DumpCpuFeatureMask (
-  IN UINT8               *FeatureMask
-  );
-
-/**
-  Dump CPU feature name or CPU feature bit mask.
-
-  @param[in]  CpuFeature   Pointer to CPU_FEATURES_ENTRY
-**/
-VOID
-DumpCpuFeature (
-  IN CPU_FEATURES_ENTRY  *CpuFeature
-  );
-
-#endif
+/** @file\r
+  CPU Register Table Library definitions.\r
+\r
+  Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef _REGISTER_CPU_FEATURES_H_\r
+#define _REGISTER_CPU_FEATURES_H_\r
+#include <PiPei.h>\r
+#include <PiDxe.h>\r
+#include <Ppi/MpServices.h>\r
+#include <Protocol/MpService.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/RegisterCpuFeaturesLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/SynchronizationLib.h>\r
+#include <Library/IoLib.h>\r
+#include <Library/LocalApicLib.h>\r
+\r
+#include <AcpiCpuData.h>\r
+\r
+#define CPU_FEATURE_ENTRY_SIGNATURE  SIGNATURE_32 ('C', 'F', 'E', 'S')\r
+\r
+#define CPU_FEATURE_NAME_SIZE        128\r
+\r
+typedef struct {\r
+  REGISTER_CPU_FEATURE_INFORMATION     CpuInfo;\r
+  UINT8                                *FeaturesSupportedMask;\r
+  LIST_ENTRY                           OrderList;\r
+} CPU_FEATURES_INIT_ORDER;\r
+\r
+typedef struct {\r
+  UINT32                       Signature;\r
+  LIST_ENTRY                   Link;\r
+  UINT8                        *FeatureMask;\r
+  CHAR8                        *FeatureName;\r
+  CPU_FEATURE_GET_CONFIG_DATA  GetConfigDataFunc;\r
+  CPU_FEATURE_SUPPORT          SupportFunc;\r
+  CPU_FEATURE_INITIALIZE       InitializeFunc;\r
+  UINT8                        *ThreadBeforeFeatureBitMask;\r
+  UINT8                        *ThreadAfterFeatureBitMask;\r
+  UINT8                        *CoreBeforeFeatureBitMask;\r
+  UINT8                        *CoreAfterFeatureBitMask;\r
+  UINT8                        *PackageBeforeFeatureBitMask;\r
+  UINT8                        *PackageAfterFeatureBitMask;\r
+  VOID                         *ConfigData;\r
+  BOOLEAN                      BeforeAll;\r
+  BOOLEAN                      AfterAll;\r
+} CPU_FEATURES_ENTRY;\r
+\r
+//\r
+// Flags used when program the register.\r
+//\r
+typedef struct {\r
+  volatile UINTN           MemoryMappedLock;        // Spinlock used to program mmio\r
+  volatile UINT32          *CoreSemaphoreCount;     // Semaphore containers used to program Core semaphore.\r
+  volatile UINT32          *PackageSemaphoreCount;  // Semaphore containers used to program Package semaphore.\r
+} PROGRAM_CPU_REGISTER_FLAGS;\r
+\r
+typedef union {\r
+  EFI_MP_SERVICES_PROTOCOL  *Protocol;\r
+  EFI_PEI_MP_SERVICES_PPI   *Ppi;\r
+} MP_SERVICES;\r
+\r
+typedef struct {\r
+  UINTN                    FeaturesCount;\r
+  UINT32                   BitMaskSize;\r
+  LIST_ENTRY               FeatureList;\r
+\r
+  CPU_FEATURES_INIT_ORDER  *InitOrder;\r
+  UINT8                    *CapabilityPcd;\r
+  UINT8                    *SettingPcd;\r
+\r
+  UINT32                   NumberOfCpus;\r
+  ACPI_CPU_DATA            *AcpiCpuData;\r
+\r
+  CPU_REGISTER_TABLE       *RegisterTable;\r
+  CPU_REGISTER_TABLE       *PreSmmRegisterTable;\r
+  UINTN                    BspNumber;\r
+\r
+  PROGRAM_CPU_REGISTER_FLAGS  CpuFlags;\r
+\r
+  MP_SERVICES              MpService;\r
+} CPU_FEATURES_DATA;\r
+\r
+#define CPU_FEATURE_ENTRY_FROM_LINK(a) \\r
+  CR ( \\r
+  (a), \\r
+  CPU_FEATURES_ENTRY, \\r
+  Link, \\r
+  CPU_FEATURE_ENTRY_SIGNATURE \\r
+  )\r
+\r
+/**\r
+  Worker function to get CPU_FEATURES_DATA pointer.\r
+\r
+  @return Pointer to CPU_FEATURES_DATA.\r
+**/\r
+CPU_FEATURES_DATA *\r
+GetCpuFeaturesData (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Worker function to return processor index.\r
+\r
+  @param  CpuFeaturesData    Cpu Feature Data structure.\r
+\r
+  @return  The processor index.\r
+**/\r
+UINTN\r
+GetProcessorIndex (\r
+  IN CPU_FEATURES_DATA        *CpuFeaturesData\r
+  );\r
+\r
+/**\r
+  Gets detailed MP-related information on the requested processor at the\r
+  instant this call is made.\r
+\r
+  @param[in]  ProcessorNumber       The handle number of processor.\r
+  @param[out] ProcessorInfoBuffer   A pointer to the buffer where information for\r
+                                    the requested processor is deposited.\r
+\r
+  @return Status of MpServices->GetProcessorInfo().\r
+**/\r
+EFI_STATUS\r
+GetProcessorInformation (\r
+  IN  UINTN                            ProcessorNumber,\r
+  OUT EFI_PROCESSOR_INFORMATION        *ProcessorInfoBuffer\r
+  );\r
+\r
+/**\r
+  Worker function to execute a caller provided function on all enabled APs.\r
+\r
+  @param[in]  Procedure               A pointer to the function to be run on\r
+                                      enabled APs of the system.\r
+  @param[in]  MpEvent                 A pointer to the event to be used later\r
+                                      to check whether procedure has done.\r
+**/\r
+VOID\r
+StartupAllAPsWorker (\r
+  IN  EFI_AP_PROCEDURE                 Procedure,\r
+  IN  EFI_EVENT                        MpEvent\r
+  );\r
+\r
+/**\r
+  Worker function to retrieve the number of logical processor in the platform.\r
+\r
+  @param[out] NumberOfCpus                Pointer to the total number of logical\r
+                                          processors in the system, including the BSP\r
+                                          and disabled APs.\r
+  @param[out] NumberOfEnabledProcessors   Pointer to the number of enabled logical\r
+                                          processors that exist in system, including\r
+                                          the BSP.\r
+**/\r
+VOID\r
+GetNumberOfProcessor (\r
+  OUT UINTN                            *NumberOfCpus,\r
+  OUT UINTN                            *NumberOfEnabledProcessors\r
+  );\r
+\r
+/**\r
+  Worker function to switch the requested AP to be the BSP from that point onward.\r
+\r
+  @param[in] ProcessorNumber   The handle number of AP that is to become the new BSP.\r
+**/\r
+VOID\r
+SwitchNewBsp (\r
+  IN  UINTN                            ProcessorNumber\r
+  );\r
+\r
+/**\r
+  Function that uses DEBUG() macros to display the contents of a a CPU feature bit mask.\r
+\r
+  @param[in]  FeatureMask  A pointer to the CPU feature bit mask.\r
+  @param[in]  BitMaskSize  CPU feature bits mask buffer size.\r
+\r
+**/\r
+VOID\r
+DumpCpuFeatureMask (\r
+  IN UINT8               *FeatureMask,\r
+  IN UINT32              BitMaskSize\r
+  );\r
+\r
+/**\r
+  Dump CPU feature name or CPU feature bit mask.\r
+\r
+  @param[in]  CpuFeature   Pointer to CPU_FEATURES_ENTRY\r
+  @param[in]  BitMaskSize  CPU feature bits mask buffer size.\r
+\r
+**/\r
+VOID\r
+DumpCpuFeature (\r
+  IN CPU_FEATURES_ENTRY  *CpuFeature,\r
+  IN UINT32              BitMaskSize\r
+  );\r
+\r
+/**\r
+  Return feature dependence result.\r
+\r
+  @param[in]  CpuFeature            Pointer to CPU feature.\r
+  @param[in]  Before                Check before dependence or after.\r
+  @param[in]  NextCpuFeatureMask    Pointer to next CPU feature Mask.\r
+\r
+  @retval     return the dependence result.\r
+**/\r
+CPU_FEATURE_DEPENDENCE_TYPE\r
+DetectFeatureScope (\r
+  IN CPU_FEATURES_ENTRY         *CpuFeature,\r
+  IN BOOLEAN                    Before,\r
+  IN UINT8                      *NextCpuFeatureMask\r
+  );\r
+\r
+/**\r
+  Return feature dependence result.\r
+\r
+  @param[in]  CpuFeature            Pointer to CPU feature.\r
+  @param[in]  Before                Check before dependence or after.\r
+  @param[in]  FeatureList           Pointer to CPU feature list.\r
+\r
+  @retval     return the dependence result.\r
+**/\r
+CPU_FEATURE_DEPENDENCE_TYPE\r
+DetectNoneNeighborhoodFeatureScope (\r
+  IN CPU_FEATURES_ENTRY         *CpuFeature,\r
+  IN BOOLEAN                    Before,\r
+  IN LIST_ENTRY                 *FeatureList\r
+  );\r
+\r
+/**\r
+  Programs registers for the calling processor.\r
+\r
+  @param[in,out] Buffer  The pointer to private data buffer.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+SetProcessorRegister (\r
+  IN OUT VOID            *Buffer\r
+  );\r
+\r
+/**\r
+  Return ACPI_CPU_DATA data.\r
+\r
+  @return  Pointer to ACPI_CPU_DATA data.\r
+**/\r
+ACPI_CPU_DATA *\r
+GetAcpiCpuData (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Worker function to get MP service pointer.\r
+\r
+  @return MP_SERVICES variable.\r
+**/\r
+MP_SERVICES\r
+GetMpService (\r
+  VOID\r
+  );\r
+\r
+#endif\r