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
);\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
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
BackupAndPrepareWakeupBuffer (CpuMpData);\r
}\r
\r
- if (CpuMpData->EndOfPeiFlag) {\r
+ if (CpuMpData->SaveRestoreFlag) {\r
BackupAndPrepareWakeupBuffer (CpuMpData);\r
}\r
}\r
IN CPU_MP_DATA *CpuMpData\r
)\r
{\r
- if (CpuMpData->EndOfPeiFlag) {\r
+ if (CpuMpData->SaveRestoreFlag) {\r
RestoreWakeupBuffer (CpuMpData);\r
}\r
}\r
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
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
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
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