]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MpInitLib/MpLib.h
UefiCpuPkg/MpInitLib: Add MP_ASSEMBLY_ADDRESS_MAP
[mirror_edk2.git] / UefiCpuPkg / Library / MpInitLib / MpLib.h
index 0453c22d5cf5eb02663fe71b0dab74c35012cf40..2be13516aa4e07b3c8fd90b2decbfc18ebf5dffb 100644 (file)
 #include <Library/MtrrLib.h>\r
 #include <Library/HobLib.h>\r
 \r
+//\r
+// AP reset code information including code address and size,\r
+// this structure will be shared be C code and assembly code.\r
+// It is natural aligned by design.\r
+//\r
+typedef struct {\r
+  UINT8             *RendezvousFunnelAddress;\r
+  UINTN             ModeEntryOffset;\r
+  UINTN             RendezvousFunnelSize;\r
+  UINT8             *RelocateApLoopFuncAddress;\r
+  UINTN             RelocateApLoopFuncSize;\r
+} MP_ASSEMBLY_ADDRESS_MAP;\r
 \r
 #pragma pack(1)\r
 \r
@@ -55,10 +67,44 @@ typedef struct {
   UINTN                 NumApsExecuting;\r
   UINTN                 CodeSegment;\r
   UINTN                 DataSegment;\r
+  UINTN                 EnableExecuteDisable;\r
   UINTN                 Cr3;\r
-  PEI_CPU_MP_DATA       *PeiCpuMpData;\r
 } MP_CPU_EXCHANGE_INFO;\r
 \r
 #pragma pack()\r
+/**\r
+  Assembly code to place AP into safe loop mode.\r
+\r
+  Place AP into targeted C-State if MONITOR is supported, otherwise\r
+  place AP into hlt state.\r
+  Place AP in protected mode if the current is long mode. Due to AP maybe\r
+  wakeup by some hardware event. It could avoid accessing page table that\r
+  may not available during booting to OS.\r
+\r
+  @param[in] MwaitSupport    TRUE indicates MONITOR is supported.\r
+                             FALSE indicates MONITOR is not supported.\r
+  @param[in] ApTargetCState  Target C-State value.\r
+  @param[in] PmCodeSegment   Protected mode code segment value.\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI * ASM_RELOCATE_AP_LOOP) (\r
+  IN BOOLEAN                 MwaitSupport,\r
+  IN UINTN                   ApTargetCState,\r
+  IN UINTN                   PmCodeSegment\r
+  );\r
+\r
+/**\r
+  Assembly code to get starting address and size of the rendezvous entry for APs.\r
+  Information for fixing a jump instruction in the code is also returned.\r
+\r
+  @param[out] AddressMap  Output buffer for address map information.\r
+**/\r
+VOID\r
+EFIAPI\r
+AsmGetAddressMap (\r
+  OUT MP_ASSEMBLY_ADDRESS_MAP    *AddressMap\r
+  );\r
+\r
 #endif\r
 \r