mirror of https://github.com/acidanthera/audk.git
EmulatorPkg/WinHost: Add Reset2 PPI
When shutdown is requested, WinHost exits. Otherwise, WinHost re-runs from SEC. Tested no extra memory consumption with multiple resets in PEI. Signed-off-by: Ray Ni <ray.ni@intel.com> Cc: Andrew Fish <afish@apple.com> Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
This commit is contained in:
parent
a121165e35
commit
7bee249891
|
@ -56,6 +56,14 @@ NT_FD_INFO *gFdInfo;
|
||||||
UINTN gSystemMemoryCount = 0;
|
UINTN gSystemMemoryCount = 0;
|
||||||
NT_SYSTEM_MEMORY *gSystemMemory;
|
NT_SYSTEM_MEMORY *gSystemMemory;
|
||||||
|
|
||||||
|
BASE_LIBRARY_JUMP_BUFFER mResetJumpBuffer;
|
||||||
|
CHAR8 *mResetTypeStr[] = {
|
||||||
|
"EfiResetCold",
|
||||||
|
"EfiResetWarm",
|
||||||
|
"EfiResetShutdown",
|
||||||
|
"EfiResetPlatformSpecific"
|
||||||
|
};
|
||||||
|
|
||||||
/*++
|
/*++
|
||||||
|
|
||||||
Routine Description:
|
Routine Description:
|
||||||
|
@ -196,6 +204,45 @@ SecPrint (
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Resets the entire platform.
|
||||||
|
|
||||||
|
@param[in] ResetType The type of reset to perform.
|
||||||
|
@param[in] ResetStatus The status code for the reset.
|
||||||
|
@param[in] DataSize The size, in bytes, of ResetData.
|
||||||
|
@param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown
|
||||||
|
the data buffer starts with a Null-terminated string, optionally
|
||||||
|
followed by additional binary data. The string is a description
|
||||||
|
that the caller may use to further indicate the reason for the
|
||||||
|
system reset.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
WinReset (
|
||||||
|
IN EFI_RESET_TYPE ResetType,
|
||||||
|
IN EFI_STATUS ResetStatus,
|
||||||
|
IN UINTN DataSize,
|
||||||
|
IN VOID *ResetData OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (ResetType <= EfiResetPlatformSpecific);
|
||||||
|
SecPrint (" Emu ResetSystem is called: ResetType = %s\n", mResetTypeStr[ResetType]);
|
||||||
|
|
||||||
|
if (ResetType == EfiResetShutdown) {
|
||||||
|
exit (0);
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// Jump back to SetJump with jump code = ResetType + 1
|
||||||
|
//
|
||||||
|
LongJump (&mResetJumpBuffer, ResetType + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_PEI_RESET2_PPI mEmuReset2Ppi = {
|
||||||
|
WinReset
|
||||||
|
};
|
||||||
|
|
||||||
/*++
|
/*++
|
||||||
|
|
||||||
Routine Description:
|
Routine Description:
|
||||||
|
@ -388,6 +435,7 @@ Returns:
|
||||||
UINTN ProcessAffinityMask;
|
UINTN ProcessAffinityMask;
|
||||||
UINTN SystemAffinityMask;
|
UINTN SystemAffinityMask;
|
||||||
INT32 LowBit;
|
INT32 LowBit;
|
||||||
|
UINTN ResetJumpCode;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Enable the privilege so that RTC driver can successfully run SetTime()
|
// Enable the privilege so that RTC driver can successfully run SetTime()
|
||||||
|
@ -430,6 +478,7 @@ Returns:
|
||||||
// PPIs pased into PEI_CORE
|
// PPIs pased into PEI_CORE
|
||||||
//
|
//
|
||||||
AddThunkPpi (EFI_PEI_PPI_DESCRIPTOR_PPI, &gEmuThunkPpiGuid, &mSecEmuThunkPpi);
|
AddThunkPpi (EFI_PEI_PPI_DESCRIPTOR_PPI, &gEmuThunkPpiGuid, &mSecEmuThunkPpi);
|
||||||
|
AddThunkPpi (EFI_PEI_PPI_DESCRIPTOR_PPI, &gEfiPeiReset2PpiGuid, &mEmuReset2Ppi);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Emulator Bus Driver Thunks
|
// Emulator Bus Driver Thunks
|
||||||
|
@ -500,14 +549,6 @@ Returns:
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetMem32 (TemporaryRam, TemporaryRamSize, PcdGet32 (PcdInitValueInTempStack));
|
|
||||||
|
|
||||||
SecPrint (
|
|
||||||
" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n\r",
|
|
||||||
TemporaryRamSize / SIZE_1KB,
|
|
||||||
TemporaryRam
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// If enabled use the magic page to communicate between modules
|
// If enabled use the magic page to communicate between modules
|
||||||
// This replaces the PI PeiServicesTable pointer mechanism that
|
// This replaces the PI PeiServicesTable pointer mechanism that
|
||||||
|
@ -591,6 +632,24 @@ Returns:
|
||||||
SecPrint ("\n\r");
|
SecPrint ("\n\r");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResetJumpCode = SetJump (&mResetJumpBuffer);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do not clear memory content for warm reset.
|
||||||
|
//
|
||||||
|
if (ResetJumpCode != EfiResetWarm + 1) {
|
||||||
|
SecPrint (" OS Emulator clearing temp RAM and physical RAM (to be discovered later)......\n\r");
|
||||||
|
SetMem32 (TemporaryRam, TemporaryRamSize, PcdGet32 (PcdInitValueInTempStack));
|
||||||
|
for (Index = 0; Index < gSystemMemoryCount; Index++) {
|
||||||
|
SetMem32 ((VOID *)(UINTN)gSystemMemory[Index].Memory, (UINTN)gSystemMemory[Index].Size, PcdGet32 (PcdInitValueInTempStack));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SecPrint (
|
||||||
|
" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n\r",
|
||||||
|
TemporaryRamSize / SIZE_1KB,
|
||||||
|
TemporaryRam
|
||||||
|
);
|
||||||
//
|
//
|
||||||
// Hand off to SEC Core
|
// Hand off to SEC Core
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/**@file
|
/**@file
|
||||||
|
|
||||||
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ Abstract:
|
||||||
#include <Guid/FileSystemInfo.h>
|
#include <Guid/FileSystemInfo.h>
|
||||||
#include <Guid/FileSystemVolumeLabelInfo.h>
|
#include <Guid/FileSystemVolumeLabelInfo.h>
|
||||||
#include <Ppi/EmuThunk.h>
|
#include <Ppi/EmuThunk.h>
|
||||||
|
#include <Ppi/Reset2.h>
|
||||||
#include <Protocol/EmuThunk.h>
|
#include <Protocol/EmuThunk.h>
|
||||||
#include <Protocol/SimpleFileSystem.h>
|
#include <Protocol/SimpleFileSystem.h>
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# Entry Point of Win Emulator
|
# Entry Point of Win Emulator
|
||||||
#
|
#
|
||||||
# Main executable file of Win Emulator that loads Sec core after initialization finished.
|
# Main executable file of Win Emulator that loads Sec core after initialization finished.
|
||||||
# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>
|
||||||
# Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
|
# Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
|
||||||
# (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
# (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
#
|
#
|
||||||
|
@ -58,6 +58,7 @@
|
||||||
|
|
||||||
[Ppis]
|
[Ppis]
|
||||||
gEmuThunkPpiGuid
|
gEmuThunkPpiGuid
|
||||||
|
gEfiPeiReset2PpiGuid
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEmuIoThunkProtocolGuid
|
gEmuIoThunkProtocolGuid
|
||||||
|
|
Loading…
Reference in New Issue