/** @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; }