/** @file
|
Reset scheduling library services
|
|
Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
**/
|
|
#include <Library/DebugLib.h>
|
#include <Library/ResetSystemLib.h>
|
#include <Uefi/UefiBaseType.h>
|
#include <Uefi.h>
|
#include <Pi/PiMultiPhase.h>
|
#include <Library/HobLib.h>
|
#include <Private/Library/SiScheduleResetLib.h>
|
#include <Private/SiScheduleResetHob.h>
|
|
/**
|
This function returns SiScheduleResetHob for library use
|
**/
|
SI_SCHEDULE_RESET_HOB *
|
SiScheduleGetResetData (
|
VOID
|
);
|
|
/**
|
This function performs reset based on SiScheduleResetHob
|
|
@retval BOOLEAN The function returns FALSE if no reset is required
|
**/
|
BOOLEAN
|
SiScheduleResetPerformReset (
|
VOID
|
)
|
{
|
UINTN DataSize;
|
SI_SCHEDULE_RESET_HOB *SiScheduleResetHob;
|
|
if (!SiScheduleResetIsRequired ()) {
|
return FALSE;
|
}
|
SiScheduleResetHob = SiScheduleGetResetData ();
|
|
if (SiScheduleResetHob == NULL) {
|
return TRUE;
|
}
|
|
DEBUG ((DEBUG_INFO, "SiScheduleResetPerformReset : Reset Type = 0x%x\n", SiScheduleResetHob->ResetType));
|
switch (SiScheduleResetHob->ResetType) {
|
case EfiResetWarm:
|
ResetWarm ();
|
break;
|
|
case EfiResetCold:
|
ResetCold ();
|
break;
|
|
case EfiResetShutdown:
|
ResetShutdown ();
|
break;
|
|
case EfiResetPlatformSpecific:
|
DataSize = sizeof (PCH_RESET_DATA);
|
ResetPlatformSpecific (DataSize, &SiScheduleResetHob->ResetData);
|
break;
|
}
|
// Code should never reach here
|
ASSERT (FALSE);
|
return TRUE;
|
}
|