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