\r
#include "ScriptExecute.h"\r
\r
-EFI_GUID mBootScriptExecutorImageGuid = {\r
+EFI_GUID mBootScriptExecutorImageGuid = {\r
0x9a8d3433, 0x9fe8, 0x42b6, { 0x87, 0xb, 0x1e, 0x31, 0xc8, 0x4e, 0xbe, 0x3b }\r
};\r
\r
-BOOLEAN mPage1GSupport = FALSE;\r
-UINT64 mAddressEncMask = 0;\r
+BOOLEAN mPage1GSupport = FALSE;\r
+UINT64 mAddressEncMask = 0;\r
\r
/**\r
Entry function of Boot script exector. This function will be executed in\r
EFI_STATUS\r
EFIAPI\r
S3BootScriptExecutorEntryFunction (\r
- IN ACPI_S3_CONTEXT *AcpiS3Context,\r
- IN PEI_S3_RESUME_STATE *PeiS3ResumeState\r
+ IN ACPI_S3_CONTEXT *AcpiS3Context,\r
+ IN PEI_S3_RESUME_STATE *PeiS3ResumeState\r
)\r
{\r
EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs;\r
//\r
// Get ACPI Table Address\r
//\r
- Facs = (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) ((UINTN) (AcpiS3Context->AcpiFacsTable));\r
+ Facs = (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)((UINTN)(AcpiS3Context->AcpiFacsTable));\r
\r
//\r
// We need turn back to S3Resume - install boot script done ppi and report status code on S3resume.\r
\r
if ((Facs != NULL) &&\r
(Facs->Signature == EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) &&\r
- (Facs->FirmwareWakingVector != 0) ) {\r
+ (Facs->FirmwareWakingVector != 0))\r
+ {\r
//\r
// more step needed - because relative address is handled differently between X64 and IA32.\r
//\r
AsmTransferControl16Address = (UINTN)AsmTransferControl16;\r
- AsmFixAddress16 = (UINT32)AsmTransferControl16Address;\r
- AsmJmpAddr32 = (UINT32)((Facs->FirmwareWakingVector & 0xF) | ((Facs->FirmwareWakingVector & 0xFFFF0) << 12));\r
+ AsmFixAddress16 = (UINT32)AsmTransferControl16Address;\r
+ AsmJmpAddr32 = (UINT32)((Facs->FirmwareWakingVector & 0xF) | ((Facs->FirmwareWakingVector & 0xFFFF0) << 12));\r
}\r
\r
AsmDisablePaging64 (\r
//\r
// Never run to here\r
//\r
- CpuDeadLoop();\r
+ CpuDeadLoop ();\r
return EFI_UNSUPPORTED;\r
}\r
\r
//\r
// Switch to native waking vector\r
//\r
- TempStackTop = (UINTN)&TempStack + sizeof(TempStack);\r
+ TempStackTop = (UINTN)&TempStack + sizeof (TempStack);\r
if ((Facs->Version == EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION) &&\r
((Facs->Flags & EFI_ACPI_4_0_64BIT_WAKE_SUPPORTED_F) != 0) &&\r
- ((Facs->OspmFlags & EFI_ACPI_4_0_OSPM_64BIT_WAKE__F) != 0)) {\r
+ ((Facs->OspmFlags & EFI_ACPI_4_0_OSPM_64BIT_WAKE__F) != 0))\r
+ {\r
//\r
// X64 long mode waking vector\r
//\r
);\r
} else {\r
// Unsupported for 32bit DXE, 64bit OS vector\r
- DEBUG (( DEBUG_ERROR, "Unsupported for 32bit DXE transfer to 64bit OS waking vector!\r\n"));\r
+ DEBUG ((DEBUG_ERROR, "Unsupported for 32bit DXE transfer to 64bit OS waking vector!\r\n"));\r
ASSERT (FALSE);\r
}\r
} else {\r
//\r
// Never run to here\r
//\r
- CpuDeadLoop();\r
+ CpuDeadLoop ();\r
return EFI_UNSUPPORTED;\r
}\r
\r
**/\r
VOID\r
RegisterMemoryProfileImage (\r
- IN EFI_GUID *FileName,\r
- IN PHYSICAL_ADDRESS ImageBase,\r
- IN UINT64 ImageSize,\r
- IN EFI_FV_FILETYPE FileType\r
+ IN EFI_GUID *FileName,\r
+ IN PHYSICAL_ADDRESS ImageBase,\r
+ IN UINT64 ImageSize,\r
+ IN EFI_FV_FILETYPE FileType\r
)\r
{\r
- EFI_STATUS Status;\r
- EDKII_MEMORY_PROFILE_PROTOCOL *ProfileProtocol;\r
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FilePath;\r
- UINT8 TempBuffer[sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH) + sizeof (EFI_DEVICE_PATH_PROTOCOL)];\r
+ EFI_STATUS Status;\r
+ EDKII_MEMORY_PROFILE_PROTOCOL *ProfileProtocol;\r
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FilePath;\r
+ UINT8 TempBuffer[sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH) + sizeof (EFI_DEVICE_PATH_PROTOCOL)];\r
\r
if ((PcdGet8 (PcdMemoryProfilePropertyMask) & BIT0) != 0) {\r
-\r
FilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)TempBuffer;\r
- Status = gBS->LocateProtocol (&gEdkiiMemoryProfileGuid, NULL, (VOID **) &ProfileProtocol);\r
+ Status = gBS->LocateProtocol (&gEdkiiMemoryProfileGuid, NULL, (VOID **)&ProfileProtocol);\r
if (!EFI_ERROR (Status)) {\r
EfiInitializeFwVolDevicepathNode (FilePath, FileName);\r
SetDevicePathEndNode (FilePath + 1);\r
\r
Status = ProfileProtocol->RegisterImage (\r
ProfileProtocol,\r
- (EFI_DEVICE_PATH_PROTOCOL *) FilePath,\r
+ (EFI_DEVICE_PATH_PROTOCOL *)FilePath,\r
ImageBase,\r
ImageSize,\r
FileType\r
IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- VOID *Interface;\r
- UINT8 *Buffer;\r
- UINTN BufferSize;\r
- EFI_HANDLE NewImageHandle;\r
- UINTN Pages;\r
- EFI_PHYSICAL_ADDRESS FfsBuffer;\r
- PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
- EFI_GCD_MEMORY_SPACE_DESCRIPTOR MemDesc;\r
+ EFI_STATUS Status;\r
+ VOID *Interface;\r
+ UINT8 *Buffer;\r
+ UINTN BufferSize;\r
+ EFI_HANDLE NewImageHandle;\r
+ UINTN Pages;\r
+ EFI_PHYSICAL_ADDRESS FfsBuffer;\r
+ PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR MemDesc;\r
\r
Status = gBS->LocateProtocol (&gEfiDxeSmmReadyToLockProtocolGuid, NULL, &Interface);\r
if (EFI_ERROR (Status)) {\r
// A workaround: Here we install a dummy handle\r
//\r
NewImageHandle = NULL;\r
- Status = gBS->InstallProtocolInterface (\r
- &NewImageHandle,\r
- &gEfiCallerIdGuid,\r
- EFI_NATIVE_INTERFACE,\r
- NULL\r
- );\r
+ Status = gBS->InstallProtocolInterface (\r
+ &NewImageHandle,\r
+ &gEfiCallerIdGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ NULL\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Reload BootScriptExecutor image itself to RESERVED mem\r
//\r
- Status = GetSectionFromAnyFv (\r
+ Status = GetSectionFromAnyFv (\r
&gEfiCallerIdGuid,\r
EFI_SECTION_PE32,\r
0,\r
- (VOID **) &Buffer,\r
+ (VOID **)&Buffer,\r
&BufferSize\r
);\r
ASSERT_EFI_ERROR (Status);\r
Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
ASSERT_EFI_ERROR (Status);\r
if (ImageContext.SectionAlignment > EFI_PAGE_SIZE) {\r
- Pages = EFI_SIZE_TO_PAGES ((UINTN) (ImageContext.ImageSize + ImageContext.SectionAlignment));\r
+ Pages = EFI_SIZE_TO_PAGES ((UINTN)(ImageContext.ImageSize + ImageContext.SectionAlignment));\r
} else {\r
- Pages = EFI_SIZE_TO_PAGES ((UINTN) ImageContext.ImageSize);\r
+ Pages = EFI_SIZE_TO_PAGES ((UINTN)ImageContext.ImageSize);\r
}\r
+\r
FfsBuffer = 0xFFFFFFFF;\r
- Status = gBS->AllocatePages (\r
- AllocateMaxAddress,\r
- EfiReservedMemoryType,\r
- Pages,\r
- &FfsBuffer\r
- );\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiReservedMemoryType,\r
+ Pages,\r
+ &FfsBuffer\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Make sure that the buffer can be used to store code.\r
//\r
Status = gDS->GetMemorySpaceDescriptor (FfsBuffer, &MemDesc);\r
- if (!EFI_ERROR (Status) && (MemDesc.Attributes & EFI_MEMORY_XP) != 0) {\r
+ if (!EFI_ERROR (Status) && ((MemDesc.Attributes & EFI_MEMORY_XP) != 0)) {\r
gDS->SetMemorySpaceAttributes (\r
FfsBuffer,\r
EFI_PAGES_TO_SIZE (Pages),\r
EFI_FV_FILETYPE_DRIVER\r
);\r
\r
- Status = ((EFI_IMAGE_ENTRY_POINT)(UINTN)(ImageContext.EntryPoint)) (NewImageHandle, gST);\r
+ Status = ((EFI_IMAGE_ENTRY_POINT)(UINTN)(ImageContext.EntryPoint))(NewImageHandle, gST);\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
BootScriptExecutorEntryPoint (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- UINTN BufferSize;\r
- UINTN Pages;\r
- BOOT_SCRIPT_EXECUTOR_VARIABLE *EfiBootScriptExecutorVariable;\r
- EFI_PHYSICAL_ADDRESS BootScriptExecutorBuffer;\r
- EFI_STATUS Status;\r
- VOID *DevicePath;\r
- EFI_EVENT ReadyToLockEvent;\r
- VOID *Registration;\r
- UINT32 RegEax;\r
- UINT32 RegEdx;\r
+ UINTN BufferSize;\r
+ UINTN Pages;\r
+ BOOT_SCRIPT_EXECUTOR_VARIABLE *EfiBootScriptExecutorVariable;\r
+ EFI_PHYSICAL_ADDRESS BootScriptExecutorBuffer;\r
+ EFI_STATUS Status;\r
+ VOID *DevicePath;\r
+ EFI_EVENT ReadyToLockEvent;\r
+ VOID *Registration;\r
+ UINT32 RegEax;\r
+ UINT32 RegEdx;\r
\r
if (!PcdGetBool (PcdAcpiS3Enable)) {\r
return EFI_UNSUPPORTED;\r
//\r
Status = gBS->LocateProtocol (&gEfiCallerIdGuid, NULL, &DevicePath);\r
if (EFI_ERROR (Status)) {\r
- //\r
- // Create ReadyToLock event to reload BootScriptExecutor image\r
- // to RESERVED mem and save it to LockBox.\r
- //\r
- ReadyToLockEvent = EfiCreateProtocolNotifyEvent (\r
- &gEfiDxeSmmReadyToLockProtocolGuid,\r
- TPL_NOTIFY,\r
- ReadyToLockEventNotify,\r
- NULL,\r
- &Registration\r
- );\r
- ASSERT (ReadyToLockEvent != NULL);\r
- } else {\r
- //\r
- // the entry point is invoked after reloading. following code only run in RESERVED mem\r
- //\r
- if (PcdGetBool(PcdUse1GPageTable)) {\r
- AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);\r
- if (RegEax >= 0x80000001) {\r
- AsmCpuid (0x80000001, NULL, NULL, NULL, &RegEdx);\r
- if ((RegEdx & BIT26) != 0) {\r
- mPage1GSupport = TRUE;\r
- }\r
+ //\r
+ // Create ReadyToLock event to reload BootScriptExecutor image\r
+ // to RESERVED mem and save it to LockBox.\r
+ //\r
+ ReadyToLockEvent = EfiCreateProtocolNotifyEvent (\r
+ &gEfiDxeSmmReadyToLockProtocolGuid,\r
+ TPL_NOTIFY,\r
+ ReadyToLockEventNotify,\r
+ NULL,\r
+ &Registration\r
+ );\r
+ ASSERT (ReadyToLockEvent != NULL);\r
+ } else {\r
+ //\r
+ // the entry point is invoked after reloading. following code only run in RESERVED mem\r
+ //\r
+ if (PcdGetBool (PcdUse1GPageTable)) {\r
+ AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);\r
+ if (RegEax >= 0x80000001) {\r
+ AsmCpuid (0x80000001, NULL, NULL, NULL, &RegEdx);\r
+ if ((RegEdx & BIT26) != 0) {\r
+ mPage1GSupport = TRUE;\r
}\r
}\r
+ }\r
\r
- BufferSize = sizeof (BOOT_SCRIPT_EXECUTOR_VARIABLE);\r
+ BufferSize = sizeof (BOOT_SCRIPT_EXECUTOR_VARIABLE);\r
\r
- BootScriptExecutorBuffer = 0xFFFFFFFF;\r
- Pages = EFI_SIZE_TO_PAGES(BufferSize);\r
- Status = gBS->AllocatePages (\r
- AllocateMaxAddress,\r
- EfiReservedMemoryType,\r
- Pages,\r
- &BootScriptExecutorBuffer\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ BootScriptExecutorBuffer = 0xFFFFFFFF;\r
+ Pages = EFI_SIZE_TO_PAGES (BufferSize);\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiReservedMemoryType,\r
+ Pages,\r
+ &BootScriptExecutorBuffer\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
\r
- EfiBootScriptExecutorVariable = (BOOT_SCRIPT_EXECUTOR_VARIABLE *)(UINTN)BootScriptExecutorBuffer;\r
- EfiBootScriptExecutorVariable->BootScriptExecutorEntrypoint = (UINTN) S3BootScriptExecutorEntryFunction ;\r
+ EfiBootScriptExecutorVariable = (BOOT_SCRIPT_EXECUTOR_VARIABLE *)(UINTN)BootScriptExecutorBuffer;\r
+ EfiBootScriptExecutorVariable->BootScriptExecutorEntrypoint = (UINTN)S3BootScriptExecutorEntryFunction;\r
\r
- Status = SaveLockBox (\r
- &gEfiBootScriptExecutorVariableGuid,\r
- &BootScriptExecutorBuffer,\r
- sizeof(BootScriptExecutorBuffer)\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ Status = SaveLockBox (\r
+ &gEfiBootScriptExecutorVariableGuid,\r
+ &BootScriptExecutorBuffer,\r
+ sizeof (BootScriptExecutorBuffer)\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
\r
- //\r
- // Additional step for BootScript integrity\r
- // Save BootScriptExecutor context\r
- //\r
- Status = SaveLockBox (\r
- &gEfiBootScriptExecutorContextGuid,\r
- EfiBootScriptExecutorVariable,\r
- sizeof(*EfiBootScriptExecutorVariable)\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- Status = SetLockBoxAttributes (&gEfiBootScriptExecutorContextGuid, LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE);\r
- ASSERT_EFI_ERROR (Status);\r
- }\r
+ //\r
+ // Additional step for BootScript integrity\r
+ // Save BootScriptExecutor context\r
+ //\r
+ Status = SaveLockBox (\r
+ &gEfiBootScriptExecutorContextGuid,\r
+ EfiBootScriptExecutorVariable,\r
+ sizeof (*EfiBootScriptExecutorVariable)\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = SetLockBoxAttributes (&gEfiBootScriptExecutorContextGuid, LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE);\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
\r
- return EFI_SUCCESS;\r
+ return EFI_SUCCESS;\r
}\r