]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/CapsuleRuntimeDxe/X64/SaveLongModeContext.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Universal / CapsuleRuntimeDxe / X64 / SaveLongModeContext.c
index eab24e4da015fbf242dc88adc0f83c95192c470c..dab297dd0a6cc17eb26a6338a0d8190a0df7fede 100644 (file)
@@ -28,7 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 //\r
 // 8 extra pages for PF handler.\r
 //\r
-#define EXTRA_PAGE_TABLE_PAGES   8\r
+#define EXTRA_PAGE_TABLE_PAGES  8\r
 \r
 /**\r
   Allocate EfiReservedMemoryType below 4G memory address.\r
@@ -40,28 +40,28 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
   @return Allocated Address for output.\r
 \r
 **/\r
-VOID*\r
+VOID *\r
 AllocateReservedMemoryBelow4G (\r
-  IN   UINTN   Size\r
+  IN   UINTN  Size\r
   )\r
 {\r
   UINTN                 Pages;\r
   EFI_PHYSICAL_ADDRESS  Address;\r
   EFI_STATUS            Status;\r
-  VOID*                 Buffer;\r
+  VOID                  *Buffer;\r
 \r
-  Pages = EFI_SIZE_TO_PAGES (Size);\r
+  Pages   = EFI_SIZE_TO_PAGES (Size);\r
   Address = 0xffffffff;\r
 \r
-  Status  = gBS->AllocatePages (\r
-                   AllocateMaxAddress,\r
-                   EfiReservedMemoryType,\r
-                   Pages,\r
-                   &Address\r
-                   );\r
+  Status = gBS->AllocatePages (\r
+                  AllocateMaxAddress,\r
+                  EfiReservedMemoryType,\r
+                  Pages,\r
+                  &Address\r
+                  );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  Buffer = (VOID *) (UINTN) Address;\r
+  Buffer = (VOID *)(UINTN)Address;\r
   ZeroMem (Buffer, Size);\r
 \r
   return Buffer;\r
@@ -77,16 +77,17 @@ AllocateReservedMemoryBelow4G (
 VOID\r
 EFIAPI\r
 VariableLockCapsuleLongModeBufferVariable (\r
-  IN  EFI_EVENT                             Event,\r
-  IN  VOID                                  *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
   EFI_STATUS                    Status;\r
   EDKII_VARIABLE_LOCK_PROTOCOL  *VariableLock;\r
+\r
   //\r
   // Mark EFI_CAPSULE_LONG_MODE_BUFFER_NAME variable to read-only if the Variable Lock protocol exists\r
   //\r
-  Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock);\r
+  Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **)&VariableLock);\r
   if (!EFI_ERROR (Status)) {\r
     Status = VariableLock->RequestToLock (VariableLock, EFI_CAPSULE_LONG_MODE_BUFFER_NAME, &gEfiCapsuleVendorGuid);\r
     ASSERT_EFI_ERROR (Status);\r
@@ -104,23 +105,23 @@ PrepareContextForCapsulePei (
   VOID\r
   )\r
 {\r
-  UINTN                                         ExtraPageTablePages;\r
-  UINT32                                        RegEax;\r
-  UINT32                                        RegEdx;\r
-  UINTN                                         TotalPagesNum;\r
-  UINT8                                         PhysicalAddressBits;\r
-  UINT32                                        NumberOfPml4EntriesNeeded;\r
-  UINT32                                        NumberOfPdpEntriesNeeded;\r
-  BOOLEAN                                       Page1GSupport;\r
-  EFI_CAPSULE_LONG_MODE_BUFFER                  LongModeBuffer;\r
-  EFI_STATUS                                    Status;\r
-  VOID                                          *Registration;\r
+  UINTN                         ExtraPageTablePages;\r
+  UINT32                        RegEax;\r
+  UINT32                        RegEdx;\r
+  UINTN                         TotalPagesNum;\r
+  UINT8                         PhysicalAddressBits;\r
+  UINT32                        NumberOfPml4EntriesNeeded;\r
+  UINT32                        NumberOfPdpEntriesNeeded;\r
+  BOOLEAN                       Page1GSupport;\r
+  EFI_CAPSULE_LONG_MODE_BUFFER  LongModeBuffer;\r
+  EFI_STATUS                    Status;\r
+  VOID                          *Registration;\r
 \r
   //\r
   // Calculate the size of page table, allocate the memory.\r
   //\r
   Page1GSupport = FALSE;\r
-  if (PcdGetBool(PcdUse1GPageTable)) {\r
+  if (PcdGetBool (PcdUse1GPageTable)) {\r
     AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);\r
     if (RegEax >= 0x80000001) {\r
       AsmCpuid (0x80000001, NULL, NULL, NULL, &RegEdx);\r
@@ -142,10 +143,10 @@ PrepareContextForCapsulePei (
   //\r
   if (PhysicalAddressBits <= 39 ) {\r
     NumberOfPml4EntriesNeeded = 1;\r
-    NumberOfPdpEntriesNeeded = (UINT32)LShiftU64 (1, (PhysicalAddressBits - 30));\r
+    NumberOfPdpEntriesNeeded  = (UINT32)LShiftU64 (1, (PhysicalAddressBits - 30));\r
   } else {\r
     NumberOfPml4EntriesNeeded = (UINT32)LShiftU64 (1, (PhysicalAddressBits - 39));\r
-    NumberOfPdpEntriesNeeded = 512;\r
+    NumberOfPdpEntriesNeeded  = 512;\r
   }\r
 \r
   if (!Page1GSupport) {\r
@@ -153,6 +154,7 @@ PrepareContextForCapsulePei (
   } else {\r
     TotalPagesNum = NumberOfPml4EntriesNeeded + 1;\r
   }\r
+\r
   TotalPagesNum += ExtraPageTablePages;\r
   DEBUG ((DEBUG_INFO, "CapsuleRuntimeDxe X64 TotalPagesNum - 0x%x pages\n", TotalPagesNum));\r
 \r
@@ -174,20 +176,20 @@ PrepareContextForCapsulePei (
                   &LongModeBuffer\r
                   );\r
   if (!EFI_ERROR (Status)) {\r
-      //\r
-      // Register callback function upon VariableLockProtocol\r
-      // to lock EFI_CAPSULE_LONG_MODE_BUFFER_NAME variable to avoid malicious code to update it.\r
-      //\r
-      EfiCreateProtocolNotifyEvent (\r
-        &gEdkiiVariableLockProtocolGuid,\r
-        TPL_CALLBACK,\r
-        VariableLockCapsuleLongModeBufferVariable,\r
-        NULL,\r
-        &Registration\r
-        );\r
+    //\r
+    // Register callback function upon VariableLockProtocol\r
+    // to lock EFI_CAPSULE_LONG_MODE_BUFFER_NAME variable to avoid malicious code to update it.\r
+    //\r
+    EfiCreateProtocolNotifyEvent (\r
+      &gEdkiiVariableLockProtocolGuid,\r
+      TPL_CALLBACK,\r
+      VariableLockCapsuleLongModeBufferVariable,\r
+      NULL,\r
+      &Registration\r
+      );\r
   } else {\r
-      DEBUG ((DEBUG_ERROR, "FATAL ERROR: CapsuleLongModeBuffer cannot be saved: %r. Capsule in PEI may fail!\n", Status));\r
-      gBS->FreePages (LongModeBuffer.StackBaseAddress, EFI_SIZE_TO_PAGES (LongModeBuffer.StackSize));\r
+    DEBUG ((DEBUG_ERROR, "FATAL ERROR: CapsuleLongModeBuffer cannot be saved: %r. Capsule in PEI may fail!\n", Status));\r
+    gBS->FreePages (LongModeBuffer.StackBaseAddress, EFI_SIZE_TO_PAGES (LongModeBuffer.StackSize));\r
   }\r
 }\r
 \r
@@ -200,7 +202,7 @@ SaveLongModeContext (
   VOID\r
   )\r
 {\r
-  if ((FeaturePcdGet(PcdSupportUpdateCapsuleReset)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode))) {\r
+  if ((FeaturePcdGet (PcdSupportUpdateCapsuleReset)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode))) {\r
     //\r
     // Allocate memory for Capsule IA32 PEIM, it will create page table to transfer to long mode to access capsule above 4GB.\r
     //\r