]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h
UefiCpuPkg/RegisterCpuFeaturesLib: Add logic to support semaphore type.
[mirror_edk2.git] / UefiCpuPkg / Library / RegisterCpuFeaturesLib / RegisterCpuFeatures.h
index edd266934fd0ddb994ed698c92cc399dc7e7937a..42a3f91fbfe4aeb6352f4015f7c26e2103e935c4 100644 (file)
@@ -23,6 +23,7 @@
 #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
@@ -46,16 +47,27 @@ typedef struct {
   CPU_FEATURE_INITIALIZE       InitializeFunc;\r
   UINT8                        *BeforeFeatureBitMask;\r
   UINT8                        *AfterFeatureBitMask;\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           ConsoleLogLock;       // Spinlock used to control console.\r
+  volatile UINTN           MemoryMappedLock;     // Spinlock used to program mmio\r
+  volatile UINT32          *SemaphoreCount;      // Semaphore used to program semaphore.\r
+} PROGRAM_CPU_REGISTER_FLAGS;\r
+\r
 typedef struct {\r
   UINTN                    FeaturesCount;\r
   UINT32                   BitMaskSize;\r
-  SPIN_LOCK                MsrLock;\r
-  SPIN_LOCK                MemoryMappedLock;\r
   LIST_ENTRY               FeatureList;\r
 \r
   CPU_FEATURES_INIT_ORDER  *InitOrder;\r
@@ -64,9 +76,14 @@ typedef struct {
   UINT8                    *ConfigurationPcd;\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
 } CPU_FEATURES_DATA;\r
 \r
 #define CPU_FEATURE_ENTRY_FROM_LINK(a) \\r
@@ -118,10 +135,13 @@ GetProcessorInformation (
 \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
 StartupAPsWorker (\r
-  IN  EFI_AP_PROCEDURE                 Procedure\r
+  IN  EFI_AP_PROCEDURE                 Procedure,\r
+  IN  EFI_EVENT                        MpEvent\r
   );\r
 \r
 /**\r
@@ -170,4 +190,40 @@ DumpCpuFeature (
   IN CPU_FEATURES_ENTRY  *CpuFeature\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
+\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
+  );\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
 #endif\r