/*++ @file Temp RAM PPI Copyright (c) 2011, Apple Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include VOID EFIAPI SecSwitchStack ( UINT32 TemporaryMemoryBase, UINT32 PermenentMemoryBase ); EFI_STATUS EFIAPI SecTemporaryRamSupport ( IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, IN UINTN CopySize ) { // // Migrate the whole temporary memory to permanent memory. // CopyMem ( (VOID *)(UINTN)PermanentMemoryBase, (VOID *)(UINTN)TemporaryMemoryBase, CopySize ); // // SecSwitchStack function must be invoked after the memory migration // immediately, also we need fixup the stack change caused by new call into // permanent memory. // SecSwitchStack ((UINT32)TemporaryMemoryBase, (UINT32)PermanentMemoryBase); // // We need *not* fix the return address because currently, // The PeiCore is executed in flash. // // // Simulate to invalid temporary memory, terminate temporary memory // // ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize); return EFI_SUCCESS; }