/** @file
Reset scheduling library services
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
/**
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;
}