/** @file | |
UEFI Miscellaneous boot Services SetWatchdogTimer service implementation | |
Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include "DxeMain.h" | |
#define WATCHDOG_TIMER_CALIBRATE_PER_SECOND 10000000 | |
/** | |
Sets the system's watchdog timer. | |
@param Timeout The number of seconds to set the watchdog timer to. | |
A value of zero disables the timer. | |
@param WatchdogCode The numeric code to log on a watchdog timer timeout | |
event. The firmware reserves codes 0x0000 to 0xFFFF. | |
Loaders and operating systems may use other timeout | |
codes. | |
@param DataSize The size, in bytes, of WatchdogData. | |
@param WatchdogData A data buffer that includes a Null-terminated Unicode | |
string, optionally followed by additional binary data. | |
The string is a description that the call may use to | |
further indicate the reason to be logged with a | |
watchdog event. | |
@return EFI_SUCCESS Timeout has been set | |
@return EFI_NOT_AVAILABLE_YET WatchdogTimer is not available yet | |
@return EFI_UNSUPPORTED System does not have a timer (currently not used) | |
@return EFI_DEVICE_ERROR Could not complete due to hardware error | |
**/ | |
EFI_STATUS | |
EFIAPI | |
CoreSetWatchdogTimer ( | |
IN UINTN Timeout, | |
IN UINT64 WatchdogCode, | |
IN UINTN DataSize, | |
IN CHAR16 *WatchdogData OPTIONAL | |
) | |
{ | |
EFI_STATUS Status; | |
// | |
// Check our architectural protocol | |
// | |
if (gWatchdogTimer == NULL) { | |
return EFI_NOT_AVAILABLE_YET; | |
} | |
// | |
// Attempt to set the timeout | |
// | |
Status = gWatchdogTimer->SetTimerPeriod (gWatchdogTimer, MultU64x32 (Timeout, WATCHDOG_TIMER_CALIBRATE_PER_SECOND)); | |
// | |
// Check for errors | |
// | |
if (EFI_ERROR (Status)) { | |
return EFI_DEVICE_ERROR; | |
} | |
return EFI_SUCCESS; | |
} |