Re: [Xen-devel] [PATCH v3 23/27] Ovmf/Xen: implement dummy RealTimeClockLib for Xen

2015-02-10 Thread Olivier Martin

Reviewed-By: Olivier Martin olivier.mar...@arm.com

On 03/02/15 19:20, Ard Biesheuvel wrote:

This implements a dummy RealTimeClockLib for Xen, as there is no
guest interface to access the time kept by Xen that can be shared
between UEFI and the OS.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel ard.biesheu...@linaro.org
---
  .../XenRealTimeClockLib/XenRealTimeClockLib.c  | 196 +
  .../XenRealTimeClockLib/XenRealTimeClockLib.inf|  38 
  2 files changed, 234 insertions(+)
  create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
  create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf

diff --git 
a/ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
 
b/ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
new file mode 100644
index ..70204ac22a92
--- /dev/null
+++ 
b/ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
@@ -0,0 +1,196 @@
+/** @file
+  Implement EFI RealTimeClock runtime services via Xen shared info page
+
+  Copyright (c) 2015, Linaro Ltd. 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 Uefi.h
+#include PiDxe.h
+#include Library/BaseLib.h
+#include Library/DebugLib.h
+
+/**
+  Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to 
EFI_TIME
+ **/
+STATIC
+VOID
+EpochToEfiTime (
+  IN  UINTN EpochSeconds,
+  OUT EFI_TIME  *Time
+  )
+{
+  UINTN a;
+  UINTN b;
+  UINTN c;
+  UINTN d;
+  UINTN g;
+  UINTN j;
+  UINTN m;
+  UINTN y;
+  UINTN da;
+  UINTN db;
+  UINTN dc;
+  UINTN dg;
+  UINTN hh;
+  UINTN mm;
+  UINTN ss;
+  UINTN J;
+
+  J  = (EpochSeconds / 86400) + 2440588;
+  j  = J + 32044;
+  g  = j / 146097;
+  dg = j % 146097;
+  c  = (((dg / 36524) + 1) * 3) / 4;
+  dc = dg - (c * 36524);
+  b  = dc / 1461;
+  db = dc % 1461;
+  a  = (((db / 365) + 1) * 3) / 4;
+  da = db - (a * 365);
+  y  = (g * 400) + (c * 100) + (b * 4) + a;
+  m  = (((da * 5) + 308) / 153) - 2;
+  d  = da - (((m + 4) * 153) / 5) + 122;
+
+  Time-Year  = y - 4800 + ((m + 2) / 12);
+  Time-Month = ((m + 2) % 12) + 1;
+  Time-Day   = d + 1;
+
+  ss = EpochSeconds % 60;
+  a  = (EpochSeconds - ss) / 60;
+  mm = a % 60;
+  b = (a - mm) / 60;
+  hh = b % 24;
+
+  Time-Hour= hh;
+  Time-Minute  = mm;
+  Time-Second  = ss;
+  Time-Nanosecond  = 0;
+
+}
+
+/**
+  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
+LibGetTime (
+  OUT EFI_TIME*Time,
+  OUT  EFI_TIME_CAPABILITIES  *Capabilities
+  )
+{
+  ASSERT (Time != NULL);
+
+  //
+  // For now, there is nothing that we can do besides returning a bogus time,
+  // as Xen's timekeeping uses a shared info page which cannot be shared
+  // between UEFI and the OS
+  //
+  EpochToEfiTime(1421770011, Time);
+
+  return EFI_SUCCESS;
+}
+
+/**
+  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
+LibSetTime (
+  IN EFI_TIME*Time
+  )
+{
+  return EFI_DEVICE_ERROR;
+}
+
+
+/**
+  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 

Re: [Xen-devel] [PATCH v3 23/27] Ovmf/Xen: implement dummy RealTimeClockLib for Xen

2015-02-10 Thread Laszlo Ersek
On 02/03/15 20:20, Ard Biesheuvel wrote:
 This implements a dummy RealTimeClockLib for Xen, as there is no
 guest interface to access the time kept by Xen that can be shared
 between UEFI and the OS.
 
 Contributed-under: TianoCore Contribution Agreement 1.0
 Signed-off-by: Ard Biesheuvel ard.biesheu...@linaro.org
 ---
  .../XenRealTimeClockLib/XenRealTimeClockLib.c  | 196 
 +
  .../XenRealTimeClockLib/XenRealTimeClockLib.inf|  38 
  2 files changed, 234 insertions(+)
  create mode 100644 
 ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
  create mode 100644 
 ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf

Moved to ArmPlatformPkg/ArmVirtualizationPkg/Library/, hence

Acked-by: Laszlo Ersek ler...@redhat.com


___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel