123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- /** @file
- CPU Register Table Library definitions.
- Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef _REGISTER_CPU_FEATURES_H_
- #define _REGISTER_CPU_FEATURES_H_
- #include <PiPei.h>
- #include <PiDxe.h>
- #include <Ppi/MpServices2.h>
- #include <Protocol/MpService.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 <Library/LocalApicLib.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 *ThreadBeforeFeatureBitMask;
- UINT8 *ThreadAfterFeatureBitMask;
- UINT8 *CoreBeforeFeatureBitMask;
- UINT8 *CoreAfterFeatureBitMask;
- UINT8 *PackageBeforeFeatureBitMask;
- UINT8 *PackageAfterFeatureBitMask;
- VOID *ConfigData;
- BOOLEAN BeforeAll;
- BOOLEAN AfterAll;
- } CPU_FEATURES_ENTRY;
- //
- // Flags used when program the register.
- //
- typedef struct {
- volatile UINTN MemoryMappedLock; // Spinlock used to program mmio
- volatile UINT32 *CoreSemaphoreCount; // Semaphore containers used to program Core semaphore.
- volatile UINT32 *PackageSemaphoreCount; // Semaphore containers used to program Package semaphore.
- } PROGRAM_CPU_REGISTER_FLAGS;
- typedef union {
- EFI_MP_SERVICES_PROTOCOL *Protocol;
- EDKII_PEI_MP_SERVICES2_PPI *Ppi;
- } MP_SERVICES;
- typedef struct {
- UINTN FeaturesCount;
- UINT32 BitMaskSize;
- LIST_ENTRY FeatureList;
- CPU_FEATURES_INIT_ORDER *InitOrder;
- UINT8 *CapabilityPcd;
- UINT8 *SettingPcd;
- UINT32 NumberOfCpus;
- ACPI_CPU_DATA *AcpiCpuData;
- CPU_REGISTER_TABLE *RegisterTable;
- CPU_REGISTER_TABLE *PreSmmRegisterTable;
- UINTN BspNumber;
- PROGRAM_CPU_REGISTER_FLAGS CpuFlags;
- MP_SERVICES MpService;
- } 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
- );
- /**
- Worker function to return processor index.
- @param CpuFeaturesData Cpu Feature Data structure.
- @return The processor index.
- **/
- UINTN
- GetProcessorIndex (
- IN CPU_FEATURES_DATA *CpuFeaturesData
- );
- /**
- 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.
- @param[in] MpEvent A pointer to the event to be used later
- to check whether procedure has done.
- **/
- VOID
- StartupAllAPsWorker (
- IN EFI_AP_PROCEDURE Procedure,
- IN EFI_EVENT MpEvent
- );
- /**
- 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.
- @param[in] BitMaskSize CPU feature bits mask buffer size.
- **/
- VOID
- DumpCpuFeatureMask (
- IN UINT8 *FeatureMask,
- IN UINT32 BitMaskSize
- );
- /**
- Dump CPU feature name or CPU feature bit mask.
- @param[in] CpuFeature Pointer to CPU_FEATURES_ENTRY
- @param[in] BitMaskSize CPU feature bits mask buffer size.
- **/
- VOID
- DumpCpuFeature (
- IN CPU_FEATURES_ENTRY *CpuFeature,
- IN UINT32 BitMaskSize
- );
- /**
- Return feature dependence result.
- @param[in] CpuFeature Pointer to CPU feature.
- @param[in] Before Check before dependence or after.
- @param[in] NextCpuFeatureMask Pointer to next CPU feature Mask.
- @retval return the dependence result.
- **/
- CPU_FEATURE_DEPENDENCE_TYPE
- DetectFeatureScope (
- IN CPU_FEATURES_ENTRY *CpuFeature,
- IN BOOLEAN Before,
- IN UINT8 *NextCpuFeatureMask
- );
- /**
- Return feature dependence result.
- @param[in] CpuFeature Pointer to CPU feature.
- @param[in] Before Check before dependence or after.
- @param[in] FeatureList Pointer to CPU feature list.
- @retval return the dependence result.
- **/
- CPU_FEATURE_DEPENDENCE_TYPE
- DetectNoneNeighborhoodFeatureScope (
- IN CPU_FEATURES_ENTRY *CpuFeature,
- IN BOOLEAN Before,
- IN LIST_ENTRY *FeatureList
- );
- /**
- Programs registers for the calling processor.
- @param[in,out] Buffer The pointer to private data buffer.
- **/
- VOID
- EFIAPI
- SetProcessorRegister (
- IN OUT VOID *Buffer
- );
- /**
- Return ACPI_CPU_DATA data.
- @return Pointer to ACPI_CPU_DATA data.
- **/
- ACPI_CPU_DATA *
- GetAcpiCpuData (
- VOID
- );
- /**
- Worker function to get MP service pointer.
- @return MP_SERVICES variable.
- **/
- MP_SERVICES
- GetMpService (
- VOID
- );
- #endif
|