Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Leo Duran <leo.duran@amd.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
		
			
				
	
	
		
			162 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Implement EFI RealTimeClock runtime services via RTC Lib.
 | |
| 
 | |
|   Currently this driver does not support runtime virtual calling.
 | |
| 
 | |
| 
 | |
|   Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 | |
| 
 | |
|   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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <PiDxe.h>
 | |
| #include <Library/UefiLib.h>
 | |
| #include <Library/UefiBootServicesTableLib.h>
 | |
| #include <Library/RealTimeClockLib.h>
 | |
| #include <Protocol/RealTimeClock.h>
 | |
| 
 | |
| EFI_HANDLE  mHandle = NULL;
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Returns the current time and date information, and the time-keeping capabilities
 | |
|   of the hardware platform.
 | |
| 
 | |
|   @param  Time                  A pointer to storage to receive a snapshot of the current time.
 | |
|   @param  Capabilities          An optional pointer to a buffer to receive the real time clock
 | |
|                                 device's capabilities.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER Time is NULL.
 | |
|   @retval EFI_DEVICE_ERROR      The time could not be retrieved due to hardware error.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| GetTime (
 | |
|   OUT EFI_TIME                *Time,
 | |
|   OUT  EFI_TIME_CAPABILITIES  *Capabilities
 | |
|   )
 | |
| {
 | |
|   return LibGetTime (Time, Capabilities);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Sets the current local time and date information.
 | |
| 
 | |
|   @param  Time                  A pointer to the current time.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER A time field is out of range.
 | |
|   @retval EFI_DEVICE_ERROR      The time could not be set due due to hardware error.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SetTime (
 | |
|   IN EFI_TIME                *Time
 | |
|   )
 | |
| {
 | |
|   return LibSetTime (Time);
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Returns the current wakeup alarm clock setting.
 | |
| 
 | |
|   @param  Enabled               Indicates if the alarm is currently enabled or disabled.
 | |
|   @param  Pending               Indicates if the alarm signal is pending and requires acknowledgement.
 | |
|   @param  Time                  The current alarm setting.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The alarm settings were returned.
 | |
|   @retval EFI_INVALID_PARAMETER Any parameter is NULL.
 | |
|   @retval EFI_DEVICE_ERROR      The wakeup time could not be retrieved due to a hardware error.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| GetWakeupTime (
 | |
|   OUT BOOLEAN     *Enabled,
 | |
|   OUT BOOLEAN     *Pending,
 | |
|   OUT EFI_TIME    *Time
 | |
|   )
 | |
| {
 | |
|   return LibGetWakeupTime (Enabled, Pending, Time);
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Sets the system wakeup alarm clock time.
 | |
| 
 | |
|   @param  Enabled               Enable or disable the wakeup alarm.
 | |
|   @param  Time                  If Enable is TRUE, the time to set the wakeup alarm for.
 | |
| 
 | |
|   @retval EFI_SUCCESS           If Enable is TRUE, then the wakeup alarm was enabled. If
 | |
|                                 Enable is FALSE, then the wakeup alarm was disabled.
 | |
|   @retval EFI_INVALID_PARAMETER A time field is out of range.
 | |
|   @retval EFI_DEVICE_ERROR      The wakeup time could not be set due to a hardware error.
 | |
|   @retval EFI_UNSUPPORTED       A wakeup timer is not supported on this platform.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SetWakeupTime (
 | |
|   IN BOOLEAN      Enabled,
 | |
|   OUT EFI_TIME    *Time
 | |
|   )
 | |
| {
 | |
|   return LibSetWakeupTime (Enabled, Time);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   This is the declaration of an EFI image entry point. This can be the entry point to an application
 | |
|   written to this specification, an EFI boot service driver, or an EFI runtime driver.
 | |
| 
 | |
|   @param  ImageHandle           Handle that identifies the loaded image.
 | |
|   @param  SystemTable           System Table for this image.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| InitializeRealTimeClock (
 | |
|   IN EFI_HANDLE                            ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE                      *SystemTable
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS  Status;
 | |
| 
 | |
|   Status = LibRtcInitialize (ImageHandle, SystemTable);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   SystemTable->RuntimeServices->GetTime       = GetTime;
 | |
|   SystemTable->RuntimeServices->SetTime       = SetTime;
 | |
|   SystemTable->RuntimeServices->GetWakeupTime = GetWakeupTime;
 | |
|   SystemTable->RuntimeServices->SetWakeupTime = SetWakeupTime;
 | |
| 
 | |
|   Status = gBS->InstallMultipleProtocolInterfaces (
 | |
|                   &mHandle,
 | |
|                   &gEfiRealTimeClockArchProtocolGuid,
 | |
|                   NULL,
 | |
|                   NULL
 | |
|                   );
 | |
| 
 | |
|   return Status;
 | |
| }
 | |
| 
 |