|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT RFC PATCH 1/1] Implement gettimeofday function for Arm
From: Jianyong Wu <Jianyong.Wu@xxxxxxx>
Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
Signed-off-by: Jianyong Wu <jianyong.wu@xxxxxxx>
---
plat/common/arm/time.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/plat/common/arm/time.c b/plat/common/arm/time.c
index 583387b..e3451b1 100644
--- a/plat/common/arm/time.c
+++ b/plat/common/arm/time.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause */
/*
* Authors: Wei Chen <Wei.Chen@xxxxxxx>
+ * Jianyong Wu <Jianyong.Wu@xxxxxxx>
*
* Copyright (c) 2018, Arm Ltd. All rights reserved.
*
@@ -32,16 +33,17 @@
* THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
*/
#include <stdlib.h>
+#include <time.h>
#include <libfdt.h>
#include <uk/assert.h>
#include <uk/plat/time.h>
#include <uk/plat/irq.h>
#include <uk/bitops.h>
-#include <cpu.h>
+#include <arm/cpu.h>
+#include <arm/rtc.h>
static uint64_t boot_ticks;
static uint32_t counter_freq;
-extern void *_libkvmplat_dtb;
/*
* Shift factor for counter scaling multiplier; referred to as S in the
@@ -86,7 +88,8 @@ static uint32_t get_counter_frequency(void)
fdt_freq = fdt_getprop(_libkvmplat_dtb,
fdt_archtimer, "clock-frequency", &len);
if (!fdt_freq || (len <= 0)) {
- uk_pr_info("No clock-frequency found, reading from register
directly.\n");
+ uk_printd(DLVL_INFO,
+ "No clock-frequency found, reading from register directly.\n");
goto endnofreq;
}
@@ -172,7 +175,7 @@ static int generic_timer_init(void)
return 0;
}
-unsigned long sched_have_pending_events;
+long sched_have_pending_events;
void time_block_until(__snsec until)
{
@@ -183,10 +186,24 @@ void time_block_until(__snsec until)
* use busy polling for now.
*/
if (__uk_test_and_clear_bit(0, &sched_have_pending_events))
- break;
+ break;
}
}
+int gettimeofday(struct timeval *tv, void *tz)
+{
+ uint64_t nsec = ukplat_monotonic_clock();
+ tv->tv_sec = rtc_boot_seconds;
+ tv->tv_sec += ukarch_time_nsec_to_sec(nsec);
+ tv->tv_usec = ukarch_time_nsec_to_usec(ukarch_time_subsec(nsec));
+
+ if(tz != NULL) {
+ /* TODO: Timezone */
+ }
+
+ return 0;
+}
+
/* return ns since time_init() */
__nsec ukplat_monotonic_clock(void)
{
--
2.17.1
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |