-typedef\r
-VOID\r
-(EFIAPI *STACKLESS_AP_ENTRY_POINT)(\r
- VOID\r
- );\r
-\r
-/**\r
- Starts the Application Processors and directs them to jump to the\r
- specified routine.\r
-\r
- The processor jumps to this code in flat mode, but the processor's\r
- stack is not initialized.\r
-\r
- @retval EFI_SUCCESS The APs were started\r
-\r
-**/\r
-EFI_STATUS\r
-StartApsStackless (\r
- VOID\r
- );\r
-\r
-/**\r
- The AP entry point that the Startup-IPI target code will jump to.\r
-\r
- The processor jumps to this code in flat mode, but the processor's\r
- stack is not initialized.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-AsmApEntryPoint (\r
- VOID\r
- );\r
-\r
-/**\r
- Releases the lock preventing other APs from using the shared AP\r
- stack.\r
-\r
- Once the AP has transitioned to using a new stack, it can call this\r
- function to allow another AP to proceed with using the shared stack.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-AsmApDoneWithCommonStack (\r
- VOID\r
- );\r
-\r
-typedef enum {\r
- CpuStateIdle,\r
- CpuStateBlocked,\r
- CpuStateReady,\r
- CpuStateBusy,\r
- CpuStateFinished,\r
- CpuStateSleeping\r
-} CPU_STATE;\r
-\r
-/**\r
- Define Individual Processor Data block.\r
-\r
-**/\r
-typedef struct {\r
- EFI_PROCESSOR_INFORMATION Info;\r
- SPIN_LOCK CpuDataLock;\r
- INTN LockSelf;\r
- volatile CPU_STATE State;\r
-\r
- volatile EFI_AP_PROCEDURE Procedure;\r
- volatile VOID* Parameter;\r
- BOOLEAN *Finished;\r
- INTN Timeout;\r
- EFI_EVENT WaitEvent;\r
- BOOLEAN TimeoutActive;\r
- EFI_EVENT CheckThisAPEvent;\r
- VOID *TopOfStack;\r
-} CPU_DATA_BLOCK;\r
-\r
-/**\r
- Define MP data block which consumes individual processor block.\r
-\r
-**/\r
-typedef struct {\r
- CPU_DATA_BLOCK *CpuDatas;\r
- UINTN NumberOfProcessors;\r
- UINTN NumberOfEnabledProcessors;\r
-\r
- EFI_AP_PROCEDURE Procedure;\r
- VOID *ProcedureArgument;\r
- UINTN StartCount;\r
- UINTN FinishCount;\r
- BOOLEAN SingleThread;\r
- UINTN **FailedList;\r
- UINTN FailedListIndex;\r
- INTN Timeout;\r
- EFI_EVENT WaitEvent;\r
- BOOLEAN TimeoutActive;\r
- EFI_EVENT CheckAllAPsEvent;\r
-} MP_SYSTEM_DATA;\r
-\r
-/**\r
- This function is called by all processors (both BSP and AP) once and collects MP related data.\r
-\r
- @param Bsp TRUE if the CPU is BSP\r
- @param ProcessorNumber The specific processor number\r
-\r
- @retval EFI_SUCCESS Data for the processor collected and filled in\r
-\r
-**/\r
-EFI_STATUS\r
-FillInProcessorInformation (\r
- IN BOOLEAN Bsp,\r
- IN UINTN ProcessorNumber\r
- );\r
-\r