Null instance of Real Time Clock lib for RISC-V platform.
Signed-off-by: Abner Chang <abner.chang@hpe.com>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Gilbert Chen <gilbert.chen@hpe.com>
---
.../RealTimeClockLibNull/RealTimeClockLibNull.inf | 30 +++
.../RealTimeClockLibNull/RealTimeClockLibNull.c | 204 +++++++++++++++++++++
2 files changed, 234 insertions(+)
create mode 100644 RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
create mode 100644 RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
diff --git a/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
new file mode 100644
index 0000000..b9bffa1
--- /dev/null
+++ b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
@@ -0,0 +1,30 @@
+#/** @file
+#
+# Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#**/
+
+[Defines]
+ INF_VERSION = 0x0001001b
+ BASE_NAME = RealTimeClockLibNull
+ FILE_GUID = BFC3E25A-8AD0-4201-8A75-F00DE7964370
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = RealTimeClockLib
+
+[Sources.common]
+ RealTimeClockLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiLib
+ DebugLib
+# Use EFiAtRuntime to check stage
+ UefiRuntimeLib
+
+[Pcd]
+
diff --git a/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
new file mode 100644
index 0000000..904e7e7
--- /dev/null
+++ b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
@@ -0,0 +1,204 @@
+/** @file
+ EFI RealTimeClock NULL library
+
+ Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiLib.h>
+// Use EfiAtRuntime to check stage
+#include <Library/UefiRuntimeLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Protocol/RealTimeClock.h>
+
+
+/**
+ 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.
+ @retval EFI_SECURITY_VIOLATION The time could not be retrieved due to an authentication failure.
+**/
+EFI_STATUS
+EFIAPI
+LibGetTime (
+ OUT EFI_TIME *Time,
+ OUT EFI_TIME_CAPABILITIES *Capabilities
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ return Status;
+
+}
+
+
+/**
+ 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
+ )
+{
+
+ EFI_STATUS Status = EFI_SUCCESS;
+
+
+ return Status;
+}
+
+
+/**
+ 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
+LibGetWakeupTime (
+ OUT BOOLEAN *Enabled,
+ OUT BOOLEAN *Pending,
+ OUT EFI_TIME *Time
+ )
+{
+ // Not a required feature
+ return EFI_UNSUPPORTED;
+}
+
+
+/**
+ 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
+LibSetWakeupTime (
+ IN BOOLEAN Enabled,
+ OUT EFI_TIME *Time
+ )
+{
+ // Not a required feature
+ return EFI_UNSUPPORTED;
+}
+
+
+
+/**
+ 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
+LibRtcInitialize (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE Handle;
+
+
+ EFI_TIME EfiTime;
+
+ // Setup the setters and getters
+ gRT->GetTime = LibGetTime;
+ gRT->SetTime = LibSetTime;
+ gRT->GetWakeupTime = LibGetWakeupTime;
+ gRT->SetWakeupTime = LibSetWakeupTime;
+
+
+ (VOID)gRT->GetTime (&EfiTime, NULL);
+ if((EfiTime.Year < 2015) || (EfiTime.Year > 2099)){
+ EfiTime.Year = 2015;
+ EfiTime.Month = 1;
+ EfiTime.Day = 1;
+ EfiTime.Hour = 0;
+ EfiTime.Minute = 0;
+ EfiTime.Second = 0;
+ EfiTime.Nanosecond = 0;
+ Status = gRT->SetTime(&EfiTime);
+ if (EFI_ERROR(Status))
+ {
+ DEBUG((DEBUG_ERROR, "[%a]:[%dL] Status : %r\n", __FUNCTION__, __LINE__, Status));
+ }
+ }
+
+ // Install the protocol
+ Handle = NULL;
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &Handle,
+ &gEfiRealTimeClockArchProtocolGuid, NULL,
+ NULL
+ );
+
+ return Status;
+}
+
+
+/**
+ Fixup internal data so that EFI can be call in virtual mode.
+ Call the passed in Child Notify event and convert any pointers in
+ lib to virtual mode.
+
+ @param[in] Event The Event that is being processed
+ @param[in] Context Event Context
+**/
+VOID
+EFIAPI
+LibRtcVirtualNotifyEvent (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ //
+ // Only needed if you are going to support the OS calling RTC functions in virtual mode.
+ // You will need to call EfiConvertPointer (). To convert any stored physical addresses
+ // to virtual address. After the OS transitions to calling in virtual mode, all future
+ // runtime calls will be made in virtual mode.
+ //
+ return;
+}
--
2.7.4
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#49505): https://edk2.groups.io/g/devel/message/49505
Mute This Topic: https://groups.io/mt/38757551/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On Mon, Oct 28, 2019 at 09:59:07 +0800, Abner Chang wrote:
> Null instance of Real Time Clock lib for RISC-V platform.
>
> Signed-off-by: Abner Chang <abner.chang@hpe.com>
>
> Cc: Leif Lindholm <leif.lindholm@linaro.org>
> Cc: Gilbert Chen <gilbert.chen@hpe.com>
Can you drop this one in favour of
EmbeddedPkg/Library/VirtualRealTimeClockLib/
?
/
Leif
> ---
> .../RealTimeClockLibNull/RealTimeClockLibNull.inf | 30 +++
> .../RealTimeClockLibNull/RealTimeClockLibNull.c | 204 +++++++++++++++++++++
> 2 files changed, 234 insertions(+)
> create mode 100644 RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
> create mode 100644 RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
>
> diff --git a/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
> new file mode 100644
> index 0000000..b9bffa1
> --- /dev/null
> +++ b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
> @@ -0,0 +1,30 @@
> +#/** @file
> +#
> +# Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#**/
> +
> +[Defines]
> + INF_VERSION = 0x0001001b
> + BASE_NAME = RealTimeClockLibNull
> + FILE_GUID = BFC3E25A-8AD0-4201-8A75-F00DE7964370
> + MODULE_TYPE = BASE
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = RealTimeClockLib
> +
> +[Sources.common]
> + RealTimeClockLibNull.c
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> +
> +[LibraryClasses]
> + UefiLib
> + DebugLib
> +# Use EFiAtRuntime to check stage
> + UefiRuntimeLib
> +
> +[Pcd]
> +
> diff --git a/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
> new file mode 100644
> index 0000000..904e7e7
> --- /dev/null
> +++ b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
> @@ -0,0 +1,204 @@
> +/** @file
> + EFI RealTimeClock NULL library
> +
> + Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Uefi.h>
> +#include <PiDxe.h>
> +#include <Library/BaseLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/UefiLib.h>
> +// Use EfiAtRuntime to check stage
> +#include <Library/UefiRuntimeLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/UefiRuntimeServicesTableLib.h>
> +#include <Protocol/RealTimeClock.h>
> +
> +
> +/**
> + 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.
> + @retval EFI_SECURITY_VIOLATION The time could not be retrieved due to an authentication failure.
> +**/
> +EFI_STATUS
> +EFIAPI
> +LibGetTime (
> + OUT EFI_TIME *Time,
> + OUT EFI_TIME_CAPABILITIES *Capabilities
> + )
> +{
> + EFI_STATUS Status = EFI_SUCCESS;
> +
> + return Status;
> +
> +}
> +
> +
> +/**
> + 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
> + )
> +{
> +
> + EFI_STATUS Status = EFI_SUCCESS;
> +
> +
> + return Status;
> +}
> +
> +
> +/**
> + 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
> +LibGetWakeupTime (
> + OUT BOOLEAN *Enabled,
> + OUT BOOLEAN *Pending,
> + OUT EFI_TIME *Time
> + )
> +{
> + // Not a required feature
> + return EFI_UNSUPPORTED;
> +}
> +
> +
> +/**
> + 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
> +LibSetWakeupTime (
> + IN BOOLEAN Enabled,
> + OUT EFI_TIME *Time
> + )
> +{
> + // Not a required feature
> + return EFI_UNSUPPORTED;
> +}
> +
> +
> +
> +/**
> + 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
> +LibRtcInitialize (
> + IN EFI_HANDLE ImageHandle,
> + IN EFI_SYSTEM_TABLE *SystemTable
> + )
> +{
> + EFI_STATUS Status;
> + EFI_HANDLE Handle;
> +
> +
> + EFI_TIME EfiTime;
> +
> + // Setup the setters and getters
> + gRT->GetTime = LibGetTime;
> + gRT->SetTime = LibSetTime;
> + gRT->GetWakeupTime = LibGetWakeupTime;
> + gRT->SetWakeupTime = LibSetWakeupTime;
> +
> +
> + (VOID)gRT->GetTime (&EfiTime, NULL);
> + if((EfiTime.Year < 2015) || (EfiTime.Year > 2099)){
> + EfiTime.Year = 2015;
> + EfiTime.Month = 1;
> + EfiTime.Day = 1;
> + EfiTime.Hour = 0;
> + EfiTime.Minute = 0;
> + EfiTime.Second = 0;
> + EfiTime.Nanosecond = 0;
> + Status = gRT->SetTime(&EfiTime);
> + if (EFI_ERROR(Status))
> + {
> + DEBUG((DEBUG_ERROR, "[%a]:[%dL] Status : %r\n", __FUNCTION__, __LINE__, Status));
> + }
> + }
> +
> + // Install the protocol
> + Handle = NULL;
> + Status = gBS->InstallMultipleProtocolInterfaces (
> + &Handle,
> + &gEfiRealTimeClockArchProtocolGuid, NULL,
> + NULL
> + );
> +
> + return Status;
> +}
> +
> +
> +/**
> + Fixup internal data so that EFI can be call in virtual mode.
> + Call the passed in Child Notify event and convert any pointers in
> + lib to virtual mode.
> +
> + @param[in] Event The Event that is being processed
> + @param[in] Context Event Context
> +**/
> +VOID
> +EFIAPI
> +LibRtcVirtualNotifyEvent (
> + IN EFI_EVENT Event,
> + IN VOID *Context
> + )
> +{
> + //
> + // Only needed if you are going to support the OS calling RTC functions in virtual mode.
> + // You will need to call EfiConvertPointer (). To convert any stored physical addresses
> + // to virtual address. After the OS transitions to calling in virtual mode, all future
> + // runtime calls will be made in virtual mode.
> + //
> + return;
> +}
> --
> 2.7.4
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#51102): https://edk2.groups.io/g/devel/message/51102
Mute This Topic: https://groups.io/mt/38757551/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
> -----Original Message-----
> From: Leif Lindholm [mailto:leif.lindholm@linaro.org]
> Sent: Friday, November 22, 2019 1:03 AM
> To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>
> Cc: devel@edk2.groups.io; Chen, Gilbert <gilbert.chen@hpe.com>
> Subject: Re: [edk2-staging/RISC-V-V2 PATCH v3 29/39]
> RiscVPlatformPkg/RealTimeClockLibNull: Null instance of RTC lib.
>
> On Mon, Oct 28, 2019 at 09:59:07 +0800, Abner Chang wrote:
> > Null instance of Real Time Clock lib for RISC-V platform.
> >
> > Signed-off-by: Abner Chang <abner.chang@hpe.com>
> >
> > Cc: Leif Lindholm <leif.lindholm@linaro.org>
> > Cc: Gilbert Chen <gilbert.chen@hpe.com>
>
> Can you drop this one in favour of
> EmbeddedPkg/Library/VirtualRealTimeClockLib/
Both U500.dsc and U540.dsc use EmbeddedPkg/Library/VirtualRealTimeClockLib, you can see this in edk2-platform patches.
The NULL one is only used in RiscVplatformPkg for build. I don't think we have to use VirtualRealTimeClockLib in this RiscVplatformPkg package.
Abner
> ?
>
> /
> Leif
>
> > ---
> > .../RealTimeClockLibNull/RealTimeClockLibNull.inf | 30 +++
> > .../RealTimeClockLibNull/RealTimeClockLibNull.c | 204
> +++++++++++++++++++++
> > 2 files changed, 234 insertions(+)
> > create mode 100644
> > RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf
> > create mode 100644
> > RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
> >
> > diff --git
> > a/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.i
> > nf
> > b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.i
> > nf
> > new file mode 100644
> > index 0000000..b9bffa1
> > --- /dev/null
> > +++ b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNu
> > +++ ll.inf
> > @@ -0,0 +1,30 @@
> > +#/** @file
> > +#
> > +# Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All
> > +rights reserved.<BR> # # SPDX-License-Identifier:
> > +BSD-2-Clause-Patent # #**/
> > +
> > +[Defines]
> > + INF_VERSION = 0x0001001b
> > + BASE_NAME = RealTimeClockLibNull
> > + FILE_GUID = BFC3E25A-8AD0-4201-8A75-F00DE7964370
> > + MODULE_TYPE = BASE
> > + VERSION_STRING = 1.0
> > + LIBRARY_CLASS = RealTimeClockLib
> > +
> > +[Sources.common]
> > + RealTimeClockLibNull.c
> > +
> > +[Packages]
> > + MdePkg/MdePkg.dec
> > +
> > +[LibraryClasses]
> > + UefiLib
> > + DebugLib
> > +# Use EFiAtRuntime to check stage
> > + UefiRuntimeLib
> > +
> > +[Pcd]
> > +
> > diff --git
> > a/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
> > b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNull.c
> > new file mode 100644
> > index 0000000..904e7e7
> > --- /dev/null
> > +++ b/RiscVPlatformPkg/Library/RealTimeClockLibNull/RealTimeClockLibNu
> > +++ ll.c
> > @@ -0,0 +1,204 @@
> > +/** @file
> > + EFI RealTimeClock NULL library
> > +
> > + Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All
> > + rights reserved.<BR>
> > +
> > + SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <Uefi.h>
> > +#include <PiDxe.h>
> > +#include <Library/BaseLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/UefiLib.h>
> > +// Use EfiAtRuntime to check stage
> > +#include <Library/UefiRuntimeLib.h>
> > +#include <Library/UefiBootServicesTableLib.h>
> > +#include <Library/UefiRuntimeServicesTableLib.h>
> > +#include <Protocol/RealTimeClock.h>
> > +
> > +
> > +/**
> > + 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.
> > + @retval EFI_SECURITY_VIOLATION The time could not be retrieved due
> to an authentication failure.
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +LibGetTime (
> > + OUT EFI_TIME *Time,
> > + OUT EFI_TIME_CAPABILITIES *Capabilities
> > + )
> > +{
> > + EFI_STATUS Status = EFI_SUCCESS;
> > +
> > + return Status;
> > +
> > +}
> > +
> > +
> > +/**
> > + 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
> > + )
> > +{
> > +
> > + EFI_STATUS Status = EFI_SUCCESS;
> > +
> > +
> > + return Status;
> > +}
> > +
> > +
> > +/**
> > + 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
> > +LibGetWakeupTime (
> > + OUT BOOLEAN *Enabled,
> > + OUT BOOLEAN *Pending,
> > + OUT EFI_TIME *Time
> > + )
> > +{
> > + // Not a required feature
> > + return EFI_UNSUPPORTED;
> > +}
> > +
> > +
> > +/**
> > + 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
> > +LibSetWakeupTime (
> > + IN BOOLEAN Enabled,
> > + OUT EFI_TIME *Time
> > + )
> > +{
> > + // Not a required feature
> > + return EFI_UNSUPPORTED;
> > +}
> > +
> > +
> > +
> > +/**
> > + 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
> > +LibRtcInitialize (
> > + IN EFI_HANDLE ImageHandle,
> > + IN EFI_SYSTEM_TABLE *SystemTable
> > + )
> > +{
> > + EFI_STATUS Status;
> > + EFI_HANDLE Handle;
> > +
> > +
> > + EFI_TIME EfiTime;
> > +
> > + // Setup the setters and getters
> > + gRT->GetTime = LibGetTime;
> > + gRT->SetTime = LibSetTime;
> > + gRT->GetWakeupTime = LibGetWakeupTime; gRT->SetWakeupTime =
> > + LibSetWakeupTime;
> > +
> > +
> > + (VOID)gRT->GetTime (&EfiTime, NULL); if((EfiTime.Year < 2015) ||
> > + (EfiTime.Year > 2099)){
> > + EfiTime.Year = 2015;
> > + EfiTime.Month = 1;
> > + EfiTime.Day = 1;
> > + EfiTime.Hour = 0;
> > + EfiTime.Minute = 0;
> > + EfiTime.Second = 0;
> > + EfiTime.Nanosecond = 0;
> > + Status = gRT->SetTime(&EfiTime);
> > + if (EFI_ERROR(Status))
> > + {
> > + DEBUG((DEBUG_ERROR, "[%a]:[%dL] Status : %r\n", __FUNCTION__,
> __LINE__, Status));
> > + }
> > + }
> > +
> > + // Install the protocol
> > + Handle = NULL;
> > + Status = gBS->InstallMultipleProtocolInterfaces (
> > + &Handle,
> > + &gEfiRealTimeClockArchProtocolGuid, NULL,
> > + NULL
> > + );
> > +
> > + return Status;
> > +}
> > +
> > +
> > +/**
> > + Fixup internal data so that EFI can be call in virtual mode.
> > + Call the passed in Child Notify event and convert any pointers in
> > + lib to virtual mode.
> > +
> > + @param[in] Event The Event that is being processed
> > + @param[in] Context Event Context
> > +**/
> > +VOID
> > +EFIAPI
> > +LibRtcVirtualNotifyEvent (
> > + IN EFI_EVENT Event,
> > + IN VOID *Context
> > + )
> > +{
> > + //
> > + // Only needed if you are going to support the OS calling RTC functions in
> virtual mode.
> > + // You will need to call EfiConvertPointer (). To convert any
> > +stored physical addresses
> > + // to virtual address. After the OS transitions to calling in
> > +virtual mode, all future
> > + // runtime calls will be made in virtual mode.
> > + //
> > + return;
> > +}
> > --
> > 2.7.4
> >
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#51188): https://edk2.groups.io/g/devel/message/51188
Mute This Topic: https://groups.io/mt/38757551/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On Fri, Nov 22, 2019 at 12:28:01 +0000, Chang, Abner (HPS SW/FW Technologist) wrote:
>
>
> > -----Original Message-----
> > From: Leif Lindholm [mailto:leif.lindholm@linaro.org]
> > Sent: Friday, November 22, 2019 1:03 AM
> > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>
> > Cc: devel@edk2.groups.io; Chen, Gilbert <gilbert.chen@hpe.com>
> > Subject: Re: [edk2-staging/RISC-V-V2 PATCH v3 29/39]
> > RiscVPlatformPkg/RealTimeClockLibNull: Null instance of RTC lib.
> >
> > On Mon, Oct 28, 2019 at 09:59:07 +0800, Abner Chang wrote:
> > > Null instance of Real Time Clock lib for RISC-V platform.
> > >
> > > Signed-off-by: Abner Chang <abner.chang@hpe.com>
> > >
> > > Cc: Leif Lindholm <leif.lindholm@linaro.org>
> > > Cc: Gilbert Chen <gilbert.chen@hpe.com>
> >
> > Can you drop this one in favour of
> > EmbeddedPkg/Library/VirtualRealTimeClockLib/
>
> Both U500.dsc and U540.dsc use
> EmbeddedPkg/Library/VirtualRealTimeClockLib, you can see this in
> edk2-platform patches.
>
> The NULL one is only used in RiscVplatformPkg for build. I don't
> think we have to use VirtualRealTimeClockLib in this
> RiscVplatformPkg package.
Sure, but we also don't *need* to add a new implementation for this -
RiscVPkg can still use the EmbeddedPkg one.
(And if we did, it should probably be in MdeModulePkg.)
/
Leif
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#51190): https://edk2.groups.io/g/devel/message/51190
Mute This Topic: https://groups.io/mt/38757551/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
> -----Original Message----- > From: Leif Lindholm [mailto:leif.lindholm@linaro.org] > Sent: Friday, November 22, 2019 10:09 PM > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com> > Cc: devel@edk2.groups.io; Chen, Gilbert <gilbert.chen@hpe.com> > Subject: Re: [edk2-staging/RISC-V-V2 PATCH v3 29/39] > RiscVPlatformPkg/RealTimeClockLibNull: Null instance of RTC lib. > > On Fri, Nov 22, 2019 at 12:28:01 +0000, Chang, Abner (HPS SW/FW > Technologist) wrote: > > > > > > > -----Original Message----- > > > From: Leif Lindholm [mailto:leif.lindholm@linaro.org] > > > Sent: Friday, November 22, 2019 1:03 AM > > > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com> > > > Cc: devel@edk2.groups.io; Chen, Gilbert <gilbert.chen@hpe.com> > > > Subject: Re: [edk2-staging/RISC-V-V2 PATCH v3 29/39] > > > RiscVPlatformPkg/RealTimeClockLibNull: Null instance of RTC lib. > > > > > > On Mon, Oct 28, 2019 at 09:59:07 +0800, Abner Chang wrote: > > > > Null instance of Real Time Clock lib for RISC-V platform. > > > > > > > > Signed-off-by: Abner Chang <abner.chang@hpe.com> > > > > > > > > Cc: Leif Lindholm <leif.lindholm@linaro.org> > > > > Cc: Gilbert Chen <gilbert.chen@hpe.com> > > > > > > Can you drop this one in favour of > > > EmbeddedPkg/Library/VirtualRealTimeClockLib/ > > > > Both U500.dsc and U540.dsc use > > EmbeddedPkg/Library/VirtualRealTimeClockLib, you can see this in > > edk2-platform patches. > > > > The NULL one is only used in RiscVplatformPkg for build. I don't think > > we have to use VirtualRealTimeClockLib in this RiscVplatformPkg > > package. > > Sure, but we also don't *need* to add a new implementation for this - > RiscVPkg can still use the EmbeddedPkg one. > > (And if we did, it should probably be in MdeModulePkg.) I think we had similar discussion about this before. My comment was RiscVPkg as a processor package should not have dependence with EmbeddedPkg. But have NULL instance in MdeModulePkg is fine to me. > > / > Leif -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51191): https://edk2.groups.io/g/devel/message/51191 Mute This Topic: https://groups.io/mt/38757551/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
On Fri, Nov 22, 2019 at 14:19:55 +0000, Chang, Abner (HPS SW/FW Technologist) wrote:
> > > > On Mon, Oct 28, 2019 at 09:59:07 +0800, Abner Chang wrote:
> > > > > Null instance of Real Time Clock lib for RISC-V platform.
> > > > >
> > > > > Signed-off-by: Abner Chang <abner.chang@hpe.com>
> > > > >
> > > > > Cc: Leif Lindholm <leif.lindholm@linaro.org>
> > > > > Cc: Gilbert Chen <gilbert.chen@hpe.com>
> > > >
> > > > Can you drop this one in favour of
> > > > EmbeddedPkg/Library/VirtualRealTimeClockLib/
> > >
> > > Both U500.dsc and U540.dsc use
> > > EmbeddedPkg/Library/VirtualRealTimeClockLib, you can see this in
> > > edk2-platform patches.
> > >
> > > The NULL one is only used in RiscVplatformPkg for build. I don't think
> > > we have to use VirtualRealTimeClockLib in this RiscVplatformPkg
> > > package.
> >
> > Sure, but we also don't *need* to add a new implementation for this -
> > RiscVPkg can still use the EmbeddedPkg one.
> >
> > (And if we did, it should probably be in MdeModulePkg.)
>
> I think we had similar discussion about this before. My comment was
> RiscVPkg as a processor package should not have dependence with
> EmbeddedPkg.
This is not RiscVPkg though, this is RiscVPlatformPkg.
And also, it does not appear to be used there anyway?
Certainly I can still build RiscVPlatformPkg.dsc if I delete that
library mapping.
/
Leif
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#51192): https://edk2.groups.io/g/devel/message/51192
Mute This Topic: https://groups.io/mt/38757551/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
> -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Leif Lindholm > Sent: Friday, November 22, 2019 10:56 PM > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com> > Cc: devel@edk2.groups.io; Chen, Gilbert <gilbert.chen@hpe.com> > Subject: Re: [edk2-devel] [edk2-staging/RISC-V-V2 PATCH v3 29/39] > RiscVPlatformPkg/RealTimeClockLibNull: Null instance of RTC lib. > > On Fri, Nov 22, 2019 at 14:19:55 +0000, Chang, Abner (HPS SW/FW > Technologist) wrote: > > > > > On Mon, Oct 28, 2019 at 09:59:07 +0800, Abner Chang wrote: > > > > > > Null instance of Real Time Clock lib for RISC-V platform. > > > > > > > > > > > > Signed-off-by: Abner Chang <abner.chang@hpe.com> > > > > > > > > > > > > Cc: Leif Lindholm <leif.lindholm@linaro.org> > > > > > > Cc: Gilbert Chen <gilbert.chen@hpe.com> > > > > > > > > > > Can you drop this one in favour of > > > > > EmbeddedPkg/Library/VirtualRealTimeClockLib/ > > > > > > > > Both U500.dsc and U540.dsc use > > > > EmbeddedPkg/Library/VirtualRealTimeClockLib, you can see this in > > > > edk2-platform patches. > > > > > > > > The NULL one is only used in RiscVplatformPkg for build. I don't > > > > think we have to use VirtualRealTimeClockLib in this > > > > RiscVplatformPkg package. > > > > > > Sure, but we also don't *need* to add a new implementation for this > > > - RiscVPkg can still use the EmbeddedPkg one. > > > > > > (And if we did, it should probably be in MdeModulePkg.) > > > > I think we had similar discussion about this before. My comment was > > RiscVPkg as a processor package should not have dependence with > > EmbeddedPkg. > > This is not RiscVPkg though, this is RiscVPlatformPkg. > And also, it does not appear to be used there anyway? Same comments from me for RiscVPlatformPkg. I don't see any reasons to have dependence with EmbeddedPkg in RiscVPlatformPkg as RiscVPlatformPkg is a generic RISC-V platform modules . Platform such as U540 could choice which RTC instance it needs. > > Certainly I can still build RiscVPlatformPkg.dsc if I delete that library mapping. We can remove this one and create a null one in MdePkg which is akin to the null instance of TimerLib. > > / > Leif > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51193): https://edk2.groups.io/g/devel/message/51193 Mute This Topic: https://groups.io/mt/38757551/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
On Fri, Nov 22, 2019 at 16:05:07 +0000, Abner Chang wrote:
> > > > Sure, but we also don't *need* to add a new implementation for this
> > > > - RiscVPkg can still use the EmbeddedPkg one.
> > > >
> > > > (And if we did, it should probably be in MdeModulePkg.)
> > >
> > > I think we had similar discussion about this before. My comment was
> > > RiscVPkg as a processor package should not have dependence with
> > > EmbeddedPkg.
> >
> > This is not RiscVPkg though, this is RiscVPlatformPkg.
> > And also, it does not appear to be used there anyway?
>
> Same comments from me for RiscVPlatformPkg. I don't see any reasons
> to have dependence with EmbeddedPkg in RiscVPlatformPkg as
> RiscVPlatformPkg is a generic RISC-V platform modules . Platform
> such as U540 could choice which RTC instance it needs.
I don't think there is any particular inherent aspect about
EmbeddedPkg being more evil or unreliable than MdeModulePkg. If
anything, it suffers from poor naming. (Basically, it was the staging
area for bringing a bunch of !x86 stuff into the tree, and the first
platform port was to an embedded board...)
But more importantly, RealTimeClockLib is only used by
EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf, so
it's a bit difficult to argue that EmbeddedPkg is an unsuitable source
for the library.
We will at some point do an overhaul of the directory tree, so getting
hung up on current package names isn't a worthwhile investment.
The only real exceptions to this are MdePkg and MdeModulePkg, which
should not depend on any other packages. And I tend to argue even
about that.
> > Certainly I can still build RiscVPlatformPkg.dsc if I delete that
> > library mapping.
>
> We can remove this one and create a null one in MdePkg which is akin
> to the null instance of TimerLib.
I have no issue with that as such.
I also don't see a value.
A RealTimeClockLibNull is only useful for enabling compilation of
incomplete platforms (and as such, if it was included in MdeModulePkg,
it should probably have unconditional ASSERTs added to all functions).
Whereas VirtualRealTimeClockLib can ameliorate the situation of not
having a persistent RTC in the system.
But for the purpose of this set, please just drop this patch and any
references to this module.
/
Leif
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#51196): https://edk2.groups.io/g/devel/message/51196
Mute This Topic: https://groups.io/mt/38757551/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
> -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Leif Lindholm > Sent: Saturday, November 23, 2019 12:32 AM > To: devel@edk2.groups.io; Chang, Abner (HPS SW/FW Technologist) > <abner.chang@hpe.com> > Cc: Chen, Gilbert <gilbert.chen@hpe.com> > Subject: Re: [edk2-devel] [edk2-staging/RISC-V-V2 PATCH v3 29/39] > RiscVPlatformPkg/RealTimeClockLibNull: Null instance of RTC lib. > > On Fri, Nov 22, 2019 at 16:05:07 +0000, Abner Chang wrote: > > > > > Sure, but we also don't *need* to add a new implementation for > > > > > this > > > > > - RiscVPkg can still use the EmbeddedPkg one. > > > > > > > > > > (And if we did, it should probably be in MdeModulePkg.) > > > > > > > > I think we had similar discussion about this before. My comment > > > > was RiscVPkg as a processor package should not have dependence > > > > with EmbeddedPkg. > > > > > > This is not RiscVPkg though, this is RiscVPlatformPkg. > > > And also, it does not appear to be used there anyway? > > > > Same comments from me for RiscVPlatformPkg. I don't see any reasons to > > have dependence with EmbeddedPkg in RiscVPlatformPkg as > > RiscVPlatformPkg is a generic RISC-V platform modules . Platform such > > as U540 could choice which RTC instance it needs. > > I don't think there is any particular inherent aspect about EmbeddedPkg > being more evil or unreliable than MdeModulePkg. If anything, it suffers > from poor naming. (Basically, it was the staging area for bringing a bunch > of !x86 stuff into the tree, and the first platform port was to an embedded > board...) > > But more importantly, RealTimeClockLib is only used by > EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf, so > it's a bit difficult to argue that EmbeddedPkg is an unsuitable source for the > library. > > We will at some point do an overhaul of the directory tree, so getting hung > up on current package names isn't a worthwhile investment. > > The only real exceptions to this are MdePkg and MdeModulePkg, which > should not depend on any other packages. And I tend to argue even about > that. > > > > Certainly I can still build RiscVPlatformPkg.dsc if I delete that > > > library mapping. > > > > We can remove this one and create a null one in MdePkg which is akin > > to the null instance of TimerLib. > > I have no issue with that as such. > I also don't see a value. > > A RealTimeClockLibNull is only useful for enabling compilation of incomplete > platforms (and as such, if it was included in MdeModulePkg, it should > probably have unconditional ASSERTs added to all functions). > > Whereas VirtualRealTimeClockLib can ameliorate the situation of not having a > persistent RTC in the system. > > But for the purpose of this set, please just drop this patch and any > references to this module. no problem, I am fine with removing this lib. Thanks! > > / > Leif > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51202): https://edk2.groups.io/g/devel/message/51202 Mute This Topic: https://groups.io/mt/38757551/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2025 Red Hat, Inc.