summaryrefslogtreecommitdiff
path: root/hw/ppc/spapr_rtc.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2015-02-06 14:55:49 +1100
committerAlexander Graf <agraf@suse.de>2015-03-09 14:59:57 +0100
commite5dad1d7d1618822dbadb1dd12efa1b5674b6c40 (patch)
tree654ff1f6caa46cbef20d59243eae3e17d177b8dc /hw/ppc/spapr_rtc.c
parentbbade20633a6b4ed7333e03a76038eda98950946 (diff)
downloadqemu-e5dad1d7d1618822dbadb1dd12efa1b5674b6c40.tar.gz
pseries: Add spapr_rtc_read() helper function
The virtual RTC time is used in two places in the pseries machine. First is in the RTAS get-time-of-day function which returns the RTC time to the guest. Second is in the spapr events code which is used to timestamp event messages from the hypervisor to the guest. Currently both call qemu_get_timedate() directly, but we want to change that so we can properly handle the various -rtc options. In preparation, create a helper function to return the virtual RTC time. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'hw/ppc/spapr_rtc.c')
-rw-r--r--hw/ppc/spapr_rtc.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/hw/ppc/spapr_rtc.c b/hw/ppc/spapr_rtc.c
index 13eeab8745..793368fae8 100644
--- a/hw/ppc/spapr_rtc.c
+++ b/hw/ppc/spapr_rtc.c
@@ -29,19 +29,28 @@
#include "hw/ppc/spapr.h"
#include "qapi-event.h"
+void spapr_rtc_read(sPAPREnvironment *spapr, struct tm *tm, uint32_t *ns)
+{
+ qemu_get_timedate(tm, spapr->rtc_offset);
+ if (ns) {
+ *ns = 0; /* we don't do nanoseconds, yet */
+ }
+}
+
static void rtas_get_time_of_day(PowerPCCPU *cpu, sPAPREnvironment *spapr,
uint32_t token, uint32_t nargs,
target_ulong args,
uint32_t nret, target_ulong rets)
{
struct tm tm;
+ uint32_t ns;
if ((nargs != 0) || (nret != 8)) {
rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
return;
}
- qemu_get_timedate(&tm, spapr->rtc_offset);
+ spapr_rtc_read(spapr, &tm, &ns);
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
rtas_st(rets, 1, tm.tm_year + 1900);
@@ -50,7 +59,7 @@ static void rtas_get_time_of_day(PowerPCCPU *cpu, sPAPREnvironment *spapr,
rtas_st(rets, 4, tm.tm_hour);
rtas_st(rets, 5, tm.tm_min);
rtas_st(rets, 6, tm.tm_sec);
- rtas_st(rets, 7, 0); /* we don't do nanoseconds */
+ rtas_st(rets, 7, ns);
}
static void rtas_set_time_of_day(PowerPCCPU *cpu, sPAPREnvironment *spapr,