/** @file UEFI Miscellaneous boot Services SetWatchdogTimer service implementation Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
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; }