]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MpInitLib/PeiMpLib.c
UefiCpuPkg/MpInitLib: Add missing point mark
[mirror_edk2.git] / UefiCpuPkg / Library / MpInitLib / PeiMpLib.c
index a7e1cdeac11ec4d3649663a0115e9c0aecd4d87f..fb1d48fad848f6d3d36fef81e97e93cc55c1a01a 100644 (file)
@@ -25,6 +25,18 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_NOTIFY_DESCRIPTOR mMpInitLibNotifyList = {
   CpuMpEndOfPeiCallback\r
 };\r
 \r
+\r
+/**\r
+  Enable Debug Agent to support source debugging on AP function.\r
+\r
+**/\r
+VOID\r
+EnableDebugAgent (\r
+  VOID\r
+  )\r
+{\r
+}\r
+\r
 /**\r
   Get pointer to CPU MP Data structure.\r
 \r
@@ -64,45 +76,6 @@ SaveCpuMpData (
     );\r
 }\r
 \r
-/**\r
-  Get available system memory below 1MB by specified size.\r
-\r
-  @param[in] PeiCpuMpData        Pointer to PEI CPU MP Data\r
-**/\r
-VOID\r
-BackupAndPrepareWakeupBuffer(\r
-  IN CPU_MP_DATA              *CpuMpData\r
-  )\r
-{\r
-  CopyMem (\r
-    (VOID *) CpuMpData->BackupBuffer,\r
-    (VOID *) CpuMpData->WakeupBuffer,\r
-    CpuMpData->BackupBufferSize\r
-    );\r
-  CopyMem (\r
-    (VOID *) CpuMpData->WakeupBuffer,\r
-    (VOID *) CpuMpData->AddressMap.RendezvousFunnelAddress,\r
-    CpuMpData->AddressMap.RendezvousFunnelSize\r
-    );\r
-}\r
-\r
-/**\r
-  Restore wakeup buffer data.\r
-\r
-  @param[in] PeiCpuMpData        Pointer to PEI CPU MP Data\r
-**/\r
-VOID\r
-RestoreWakeupBuffer(\r
-  IN CPU_MP_DATA              *CpuMpData\r
-  )\r
-{\r
-  CopyMem (\r
-    (VOID *) CpuMpData->WakeupBuffer,\r
-    (VOID *) CpuMpData->BackupBuffer,\r
-    CpuMpData->BackupBufferSize\r
-    );\r
-}\r
-\r
 /**\r
   Notify function on End Of PEI PPI.\r
 \r
@@ -157,7 +130,7 @@ CpuMpEndOfPeiCallback (
       Hob.Raw = GET_NEXT_HOB (Hob);\r
     }\r
   } else {\r
-    CpuMpData->EndOfPeiFlag = TRUE;\r
+    CpuMpData->SaveRestoreFlag = TRUE;\r
     RestoreWakeupBuffer (CpuMpData);\r
   }\r
   return EFI_SUCCESS;\r
@@ -316,7 +289,7 @@ AllocateResetVector (
     BackupAndPrepareWakeupBuffer (CpuMpData);\r
   }\r
 \r
-  if (CpuMpData->EndOfPeiFlag) {\r
+  if (CpuMpData->SaveRestoreFlag) {\r
     BackupAndPrepareWakeupBuffer (CpuMpData);\r
   }\r
 }\r
@@ -331,11 +304,22 @@ FreeResetVector (
   IN CPU_MP_DATA              *CpuMpData\r
   )\r
 {\r
-  if (CpuMpData->EndOfPeiFlag) {\r
+  if (CpuMpData->SaveRestoreFlag) {\r
     RestoreWakeupBuffer (CpuMpData);\r
   }\r
 }\r
 \r
+/**\r
+  Checks APs status and updates APs status if needed.\r
+\r
+**/\r
+VOID\r
+CheckAndUpdateApsStatus (\r
+  VOID\r
+  )\r
+{\r
+}\r
+\r
 /**\r
   Initialize global data for MP support.\r
 \r
@@ -349,6 +333,14 @@ InitMpGlobalData (
   EFI_STATUS      Status;\r
 \r
   SaveCpuMpData (CpuMpData);\r
+\r
+  if (CpuMpData->CpuCount == 1) {\r
+    //\r
+    // If only BSP exists, return\r
+    //\r
+    return;\r
+  }\r
+\r
   //\r
   // Register an event for EndOfPei\r
   //\r
@@ -383,7 +375,7 @@ InitMpGlobalData (
                                       EFI_EVENT is defined in CreateEvent() in\r
                                       the Unified Extensible Firmware Interface\r
                                       Specification.\r
-  @param[in]  TimeoutInMicrosecsond   Indicates the time limit in microseconds for\r
+  @param[in]  TimeoutInMicroseconds   Indicates the time limit in microseconds for\r
                                       APs to return from Procedure, either for\r
                                       blocking or non-blocking mode. Zero means\r
                                       infinity.  If the timeout expires before\r
@@ -442,7 +434,18 @@ MpInitLibStartupAllAPs (
   OUT UINTN                     **FailedCpuList         OPTIONAL\r
   )\r
 {\r
-  return EFI_UNSUPPORTED;\r
+  if (WaitEvent != NULL) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  return StartupAllAPsWorker (\r
+           Procedure,\r
+           SingleThread,\r
+           NULL,\r
+           TimeoutInMicroseconds,\r
+           ProcedureArgument,\r
+           FailedCpuList\r
+           );\r
 }\r
 \r
 /**\r
@@ -472,7 +475,7 @@ MpInitLibStartupAllAPs (
                                       EFI_EVENT is defined in CreateEvent() in\r
                                       the Unified Extensible Firmware Interface\r
                                       Specification.\r
-  @param[in]  TimeoutInMicrosecsond   Indicates the time limit in microseconds for\r
+  @param[in]  TimeoutInMicroseconds   Indicates the time limit in microseconds for\r
                                       this AP to finish this Procedure, either for\r
                                       blocking or non-blocking mode. Zero means\r
                                       infinity.  If the timeout expires before\r
@@ -527,7 +530,18 @@ MpInitLibStartupThisAP (
   OUT BOOLEAN                   *Finished               OPTIONAL\r
   )\r
 {\r
-  return EFI_UNSUPPORTED;\r
+  if (WaitEvent != NULL) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  return StartupThisAPWorker (\r
+           Procedure,\r
+           ProcessorNumber,\r
+           NULL,\r
+           TimeoutInMicroseconds,\r
+           ProcedureArgument,\r
+           Finished\r
+           );\r
 }\r
 \r
 /**\r
@@ -563,7 +577,7 @@ MpInitLibSwitchBSP (
   IN  BOOLEAN                  EnableOldBSP\r
   )\r
 {\r
-  return EFI_UNSUPPORTED;\r
+  return SwitchBSPWorker (ProcessorNumber, EnableOldBSP);\r
 }\r
 \r
 /**\r
@@ -604,7 +618,7 @@ MpInitLibEnableDisableAP (
   IN  UINT32                    *HealthFlag OPTIONAL\r
   )\r
 {\r
-  return EFI_UNSUPPORTED;\r
+  return EnableDisableApWorker (ProcessorNumber, EnableAP, HealthFlag);\r
 }\r
 \r
 \r