]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/CpuDxe/CpuMp.h
UefiCpuPkg/CpuDxe: Enable protection for newly added page table
[mirror_edk2.git] / UefiCpuPkg / CpuDxe / CpuMp.h
index 2b3b9b23d4c28bdf50289f902b66cc2f55814088..d530149d7e00964bbdd9ce975e6196c830541b15 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   CPU DXE MP support\r
 \r
-  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -15,9 +15,6 @@
 #ifndef _CPU_MP_H_\r
 #define _CPU_MP_H_\r
 \r
-#include <Protocol/MpService.h>\r
-#include <Library/SynchronizationLib.h>\r
-\r
 /**\r
   Initialize Multi-processor support.\r
 \r
@@ -27,120 +24,6 @@ InitializeMpSupport (
   VOID\r
   );\r
 \r
-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
-  @param ApEntryPoint    Pointer to the Entry Point routine\r
-\r
-  @retval EFI_SUCCESS           The APs were started\r
-  @retval EFI_OUT_OF_RESOURCES  Cannot allocate memory to start APs\r
-\r
-**/\r
-EFI_STATUS\r
-StartApsStackless (\r
-  IN STACKLESS_AP_ENTRY_POINT ApEntryPoint\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
-  CpuStateBuzy,\r
-  CpuStateFinished\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
-  volatile CPU_STATE             State;\r
-\r
-  EFI_AP_PROCEDURE               Procedure;\r
-  VOID                           *Parameter;\r
-  BOOLEAN                        *Finished;\r
-  INTN                           Timeout;\r
-  EFI_EVENT                      WaitEvent;\r
-  BOOLEAN                        TimeoutActive;\r
-  EFI_EVENT                      CheckThisAPEvent;\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
 /**\r
   This service retrieves the number of logical processor in the platform\r
   and the number of those logical processors that are enabled on this boot.\r
@@ -465,6 +348,49 @@ StartupThisAP (
   OUT BOOLEAN                   *Finished               OPTIONAL\r
   );\r
 \r
+/**\r
+  This service switches the requested AP to be the BSP from that point onward.\r
+  This service changes the BSP for all purposes.   This call can only be performed\r
+  by the current BSP.\r
+\r
+  This service switches the requested AP to be the BSP from that point onward.\r
+  This service changes the BSP for all purposes. The new BSP can take over the\r
+  execution of the old BSP and continue seamlessly from where the old one left\r
+  off. This service may not be supported after the UEFI Event EFI_EVENT_GROUP_READY_TO_BOOT\r
+  is signaled.\r
+\r
+  If the BSP cannot be switched prior to the return from this service, then\r
+  EFI_UNSUPPORTED must be returned.\r
+\r
+  @param[in] This              A pointer to the EFI_MP_SERVICES_PROTOCOL instance.\r
+  @param[in] ProcessorNumber   The handle number of AP that is to become the new\r
+                               BSP. The range is from 0 to the total number of\r
+                               logical processors minus 1. The total number of\r
+                               logical processors can be retrieved by\r
+                               EFI_MP_SERVICES_PROTOCOL.GetNumberOfProcessors().\r
+  @param[in] EnableOldBSP      If TRUE, then the old BSP will be listed as an\r
+                               enabled AP. Otherwise, it will be disabled.\r
+\r
+  @retval EFI_SUCCESS             BSP successfully switched.\r
+  @retval EFI_UNSUPPORTED         Switching the BSP cannot be completed prior to\r
+                                  this service returning.\r
+  @retval EFI_UNSUPPORTED         Switching the BSP is not supported.\r
+  @retval EFI_DEVICE_ERROR        The calling processor is an AP.\r
+  @retval EFI_NOT_FOUND           The processor with the handle specified by\r
+                                  ProcessorNumber does not exist.\r
+  @retval EFI_INVALID_PARAMETER   ProcessorNumber specifies the current BSP or\r
+                                  a disabled AP.\r
+  @retval EFI_NOT_READY           The specified AP is busy.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SwitchBSP (\r
+  IN EFI_MP_SERVICES_PROTOCOL  *This,\r
+  IN  UINTN                    ProcessorNumber,\r
+  IN  BOOLEAN                  EnableOldBSP\r
+  );\r
+\r
 /**\r
   This service lets the caller enable or disable an AP from this point onward.\r
   This service may only be called from the BSP.\r
@@ -546,19 +472,5 @@ WhoAmI (
   OUT UINTN                    *ProcessorNumber\r
   );\r
 \r
-/**\r
-  Terminate AP's task and set it to idle state.\r
-\r
-  This function terminates AP's task due to timeout by sending INIT-SIPI,\r
-  and sends it to idle state.\r
-\r
-  @param CpuData           the pointer to CPU_DATA_BLOCK of specified AP\r
-\r
-**/\r
-VOID\r
-ResetProcessorToIdleState (\r
-  IN CPU_DATA_BLOCK  *CpuData\r
-  );\r
-\r
 #endif // _CPU_MP_H_\r
 \r