mirror of https://github.com/acidanthera/audk.git
84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2006, Intel Corporation
|
||
|
All rights reserved. This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
SetWatchdogTimer.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Tiano Miscellaneous Services SetWatchdogTimer service implementation
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <DxeMain.h>
|
||
|
|
||
|
#define WATCHDOG_TIMER_CALIBRATE_PER_SECOND 10000000
|
||
|
|
||
|
|
||
|
EFI_STATUS
|
||
|
EFIAPI
|
||
|
CoreSetWatchdogTimer (
|
||
|
IN UINTN Timeout,
|
||
|
IN UINT64 WatchdogCode,
|
||
|
IN UINTN DataSize,
|
||
|
IN CHAR16 *WatchdogData OPTIONAL
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Sets the system's watchdog timer.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Timeout The number of seconds. Zero disables the timer.
|
||
|
|
||
|
///////following three parameters are left for platform specific using
|
||
|
|
||
|
WatchdogCode The numberic code to log. 0x0 to 0xffff are firmware
|
||
|
DataSize Size of the optional data
|
||
|
WatchdogData Optional Null terminated unicode string followed by binary
|
||
|
data.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
EFI_SUCCESS Timeout has been set
|
||
|
EFI_NOT_AVAILABLE_YET WatchdogTimer is not available yet
|
||
|
EFI_UNSUPPORTED System does not have a timer (currently not used)
|
||
|
EFI_DEVICE_ERROR Could not complete due to hardware error
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
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;
|
||
|
}
|