//\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
@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
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
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
//\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
} else {\r
TotalPagesNum = NumberOfPml4EntriesNeeded + 1;\r
}\r
+\r
TotalPagesNum += ExtraPageTablePages;\r
DEBUG ((DEBUG_INFO, "CapsuleRuntimeDxe X64 TotalPagesNum - 0x%x pages\n", TotalPagesNum));\r
\r
&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
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