/** @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
#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));
if (SiScheduleResetHob->ResetType == EfiResetPlatformSpecific) {
DataSize = sizeof (PCH_RESET_DATA);
(*GetPeiServicesTablePointer ())->ResetSystem2 (SiScheduleResetHob->ResetType, EFI_SUCCESS, DataSize, &SiScheduleResetHob->ResetData);
} else {
(*GetPeiServicesTablePointer ())->ResetSystem2 (SiScheduleResetHob->ResetType, EFI_SUCCESS, 0, NULL);
}
//
// Code should never reach here
//
ASSERT (FALSE);
return TRUE;
}