/** @file
PCH RESET PEIM DRIVER.
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
/**
Resets the entire platform.
@param[in] ResetType UEFI defined reset type.
@param[in] ResetStatus The status code for the reset.
@param[in] DataSize The size of ResetData in bytes.
@param[in] ResetData Optional element used to introduce a platform specific reset.
The exact type of the reset is defined by the EFI_GUID that follows
the Null-terminated Unicode string.
**/
VOID
EFIAPI
ResetSystem (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
)
{
switch (ResetType) {
case EfiResetWarm:
ResetWarm ();
break;
case EfiResetCold:
ResetCold ();
break;
case EfiResetShutdown:
ResetShutdown ();
return;
case EfiResetPlatformSpecific:
ResetPlatformSpecific (DataSize, ResetData);
return;
default:
return;
}
//
// Given we should have reset getting here would be bad
//
ASSERT (FALSE);
CpuDeadLoop();
}
/**
Initialize PCH Reset APIs
@retval EFI_SUCCESS APIs are installed successfully
@retval EFI_OUT_OF_RESOURCES Can't allocate pool
**/
EFI_STATUS
EFIAPI
PchInitializeReset (
VOID
)
{
EFI_STATUS Status;
EFI_PEI_RESET2_PPI *EfiPeiReset2Ppi;
EFI_PEI_PPI_DESCRIPTOR *EfiPeiReset2Descriptor;
DEBUG ((DEBUG_INFO, "PchInitializeReset() Start\n"));
EfiPeiReset2Descriptor = (EFI_PEI_PPI_DESCRIPTOR *) AllocateZeroPool (sizeof (EFI_PEI_PPI_DESCRIPTOR));
EfiPeiReset2Ppi = (EFI_PEI_RESET2_PPI *) AllocateZeroPool (sizeof (EFI_PEI_RESET2_PPI));
if ((EfiPeiReset2Descriptor == NULL) ||
(EfiPeiReset2Ppi == NULL)) {
ASSERT (FALSE);
return EFI_OUT_OF_RESOURCES;
}
///
/// Initialize the EFI Reset2 ppi instance
///
EfiPeiReset2Ppi->ResetSystem = ResetSystem;
EfiPeiReset2Descriptor->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
EfiPeiReset2Descriptor->Guid = &gEfiPeiReset2PpiGuid;
EfiPeiReset2Descriptor->Ppi = EfiPeiReset2Ppi;
Status = PeiServicesInstallPpi (EfiPeiReset2Descriptor);
ASSERT_EFI_ERROR (Status);
DEBUG ((DEBUG_INFO, "PchInitializeReset() End\n"));
return Status;
}