12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*++ @file
- Temp RAM PPI
- Copyright (c) 2011, Apple Inc. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiPei.h>
- #include <Library/DebugLib.h>
- #include <Library/BaseMemoryLib.h>
- #include <Ppi/TemporaryRamSupport.h>
- 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;
- }
|