提交 884f17c2 编写于 作者: A Alex Bligh 提交者: Stefan Hajnoczi

aio / timers: Convert rtc_clock to be a QEMUClockType

Convert rtc_clock to be a QEMUClockType

Move rtc_clock users to use the new API
Signed-off-by: NAlex Bligh <alex@alex.org.uk>
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 7bf8fbde
...@@ -2894,7 +2894,7 @@ static void omap_rtc_reset(struct omap_rtc_s *s) ...@@ -2894,7 +2894,7 @@ static void omap_rtc_reset(struct omap_rtc_s *s)
s->pm_am = 0; s->pm_am = 0;
s->auto_comp = 0; s->auto_comp = 0;
s->round = 0; s->round = 0;
s->tick = qemu_get_clock_ms(rtc_clock); s->tick = qemu_clock_get_ms(rtc_clock);
memset(&s->alarm_tm, 0, sizeof(s->alarm_tm)); memset(&s->alarm_tm, 0, sizeof(s->alarm_tm));
s->alarm_tm.tm_mday = 0x01; s->alarm_tm.tm_mday = 0x01;
s->status = 1 << 7; s->status = 1 << 7;
...@@ -2915,7 +2915,7 @@ static struct omap_rtc_s *omap_rtc_init(MemoryRegion *system_memory, ...@@ -2915,7 +2915,7 @@ static struct omap_rtc_s *omap_rtc_init(MemoryRegion *system_memory,
s->irq = timerirq; s->irq = timerirq;
s->alarm = alarmirq; s->alarm = alarmirq;
s->clk = qemu_new_timer_ms(rtc_clock, omap_rtc_tick, s); s->clk = timer_new_ms(rtc_clock, omap_rtc_tick, s);
omap_rtc_reset(s); omap_rtc_reset(s);
......
...@@ -842,7 +842,7 @@ static inline void pxa2xx_rtc_int_update(PXA2xxRTCState *s) ...@@ -842,7 +842,7 @@ static inline void pxa2xx_rtc_int_update(PXA2xxRTCState *s)
static void pxa2xx_rtc_hzupdate(PXA2xxRTCState *s) static void pxa2xx_rtc_hzupdate(PXA2xxRTCState *s)
{ {
int64_t rt = qemu_get_clock_ms(rtc_clock); int64_t rt = qemu_clock_get_ms(rtc_clock);
s->last_rcnr += ((rt - s->last_hz) << 15) / s->last_rcnr += ((rt - s->last_hz) << 15) /
(1000 * ((s->rttr & 0xffff) + 1)); (1000 * ((s->rttr & 0xffff) + 1));
s->last_rdcr += ((rt - s->last_hz) << 15) / s->last_rdcr += ((rt - s->last_hz) << 15) /
...@@ -852,7 +852,7 @@ static void pxa2xx_rtc_hzupdate(PXA2xxRTCState *s) ...@@ -852,7 +852,7 @@ static void pxa2xx_rtc_hzupdate(PXA2xxRTCState *s)
static void pxa2xx_rtc_swupdate(PXA2xxRTCState *s) static void pxa2xx_rtc_swupdate(PXA2xxRTCState *s)
{ {
int64_t rt = qemu_get_clock_ms(rtc_clock); int64_t rt = qemu_clock_get_ms(rtc_clock);
if (s->rtsr & (1 << 12)) if (s->rtsr & (1 << 12))
s->last_swcr += (rt - s->last_sw) / 10; s->last_swcr += (rt - s->last_sw) / 10;
s->last_sw = rt; s->last_sw = rt;
...@@ -860,7 +860,7 @@ static void pxa2xx_rtc_swupdate(PXA2xxRTCState *s) ...@@ -860,7 +860,7 @@ static void pxa2xx_rtc_swupdate(PXA2xxRTCState *s)
static void pxa2xx_rtc_piupdate(PXA2xxRTCState *s) static void pxa2xx_rtc_piupdate(PXA2xxRTCState *s)
{ {
int64_t rt = qemu_get_clock_ms(rtc_clock); int64_t rt = qemu_clock_get_ms(rtc_clock);
if (s->rtsr & (1 << 15)) if (s->rtsr & (1 << 15))
s->last_swcr += rt - s->last_pi; s->last_swcr += rt - s->last_pi;
s->last_pi = rt; s->last_pi = rt;
...@@ -986,16 +986,19 @@ static uint64_t pxa2xx_rtc_read(void *opaque, hwaddr addr, ...@@ -986,16 +986,19 @@ static uint64_t pxa2xx_rtc_read(void *opaque, hwaddr addr,
case PIAR: case PIAR:
return s->piar; return s->piar;
case RCNR: case RCNR:
return s->last_rcnr + ((qemu_get_clock_ms(rtc_clock) - s->last_hz) << 15) / return s->last_rcnr +
(1000 * ((s->rttr & 0xffff) + 1)); ((qemu_clock_get_ms(rtc_clock) - s->last_hz) << 15) /
(1000 * ((s->rttr & 0xffff) + 1));
case RDCR: case RDCR:
return s->last_rdcr + ((qemu_get_clock_ms(rtc_clock) - s->last_hz) << 15) / return s->last_rdcr +
(1000 * ((s->rttr & 0xffff) + 1)); ((qemu_clock_get_ms(rtc_clock) - s->last_hz) << 15) /
(1000 * ((s->rttr & 0xffff) + 1));
case RYCR: case RYCR:
return s->last_rycr; return s->last_rycr;
case SWCR: case SWCR:
if (s->rtsr & (1 << 12)) if (s->rtsr & (1 << 12))
return s->last_swcr + (qemu_get_clock_ms(rtc_clock) - s->last_sw) / 10; return s->last_swcr +
(qemu_clock_get_ms(rtc_clock) - s->last_sw) / 10;
else else
return s->last_swcr; return s->last_swcr;
default: default:
...@@ -1135,14 +1138,14 @@ static int pxa2xx_rtc_init(SysBusDevice *dev) ...@@ -1135,14 +1138,14 @@ static int pxa2xx_rtc_init(SysBusDevice *dev)
s->last_swcr = (tm.tm_hour << 19) | s->last_swcr = (tm.tm_hour << 19) |
(tm.tm_min << 13) | (tm.tm_sec << 7); (tm.tm_min << 13) | (tm.tm_sec << 7);
s->last_rtcpicr = 0; s->last_rtcpicr = 0;
s->last_hz = s->last_sw = s->last_pi = qemu_get_clock_ms(rtc_clock); s->last_hz = s->last_sw = s->last_pi = qemu_clock_get_ms(rtc_clock);
s->rtc_hz = qemu_new_timer_ms(rtc_clock, pxa2xx_rtc_hz_tick, s); s->rtc_hz = timer_new_ms(rtc_clock, pxa2xx_rtc_hz_tick, s);
s->rtc_rdal1 = qemu_new_timer_ms(rtc_clock, pxa2xx_rtc_rdal1_tick, s); s->rtc_rdal1 = timer_new_ms(rtc_clock, pxa2xx_rtc_rdal1_tick, s);
s->rtc_rdal2 = qemu_new_timer_ms(rtc_clock, pxa2xx_rtc_rdal2_tick, s); s->rtc_rdal2 = timer_new_ms(rtc_clock, pxa2xx_rtc_rdal2_tick, s);
s->rtc_swal1 = qemu_new_timer_ms(rtc_clock, pxa2xx_rtc_swal1_tick, s); s->rtc_swal1 = timer_new_ms(rtc_clock, pxa2xx_rtc_swal1_tick, s);
s->rtc_swal2 = qemu_new_timer_ms(rtc_clock, pxa2xx_rtc_swal2_tick, s); s->rtc_swal2 = timer_new_ms(rtc_clock, pxa2xx_rtc_swal2_tick, s);
s->rtc_pi = qemu_new_timer_ms(rtc_clock, pxa2xx_rtc_pi_tick, s); s->rtc_pi = timer_new_ms(rtc_clock, pxa2xx_rtc_pi_tick, s);
sysbus_init_irq(dev, &s->rtc_irq); sysbus_init_irq(dev, &s->rtc_irq);
......
...@@ -269,7 +269,7 @@ static inline void strongarm_rtc_int_update(StrongARMRTCState *s) ...@@ -269,7 +269,7 @@ static inline void strongarm_rtc_int_update(StrongARMRTCState *s)
static void strongarm_rtc_hzupdate(StrongARMRTCState *s) static void strongarm_rtc_hzupdate(StrongARMRTCState *s)
{ {
int64_t rt = qemu_get_clock_ms(rtc_clock); int64_t rt = qemu_clock_get_ms(rtc_clock);
s->last_rcnr += ((rt - s->last_hz) << 15) / s->last_rcnr += ((rt - s->last_hz) << 15) /
(1000 * ((s->rttr & 0xffff) + 1)); (1000 * ((s->rttr & 0xffff) + 1));
s->last_hz = rt; s->last_hz = rt;
...@@ -322,7 +322,7 @@ static uint64_t strongarm_rtc_read(void *opaque, hwaddr addr, ...@@ -322,7 +322,7 @@ static uint64_t strongarm_rtc_read(void *opaque, hwaddr addr,
return s->rtar; return s->rtar;
case RCNR: case RCNR:
return s->last_rcnr + return s->last_rcnr +
((qemu_get_clock_ms(rtc_clock) - s->last_hz) << 15) / ((qemu_clock_get_ms(rtc_clock) - s->last_hz) << 15) /
(1000 * ((s->rttr & 0xffff) + 1)); (1000 * ((s->rttr & 0xffff) + 1));
default: default:
printf("%s: Bad register 0x" TARGET_FMT_plx "\n", __func__, addr); printf("%s: Bad register 0x" TARGET_FMT_plx "\n", __func__, addr);
...@@ -388,10 +388,10 @@ static int strongarm_rtc_init(SysBusDevice *dev) ...@@ -388,10 +388,10 @@ static int strongarm_rtc_init(SysBusDevice *dev)
qemu_get_timedate(&tm, 0); qemu_get_timedate(&tm, 0);
s->last_rcnr = (uint32_t) mktimegm(&tm); s->last_rcnr = (uint32_t) mktimegm(&tm);
s->last_hz = qemu_get_clock_ms(rtc_clock); s->last_hz = qemu_clock_get_ms(rtc_clock);
s->rtc_alarm = qemu_new_timer_ms(rtc_clock, strongarm_rtc_alarm_tick, s); s->rtc_alarm = timer_new_ms(rtc_clock, strongarm_rtc_alarm_tick, s);
s->rtc_hz = qemu_new_timer_ms(rtc_clock, strongarm_rtc_hz_tick, s); s->rtc_hz = timer_new_ms(rtc_clock, strongarm_rtc_hz_tick, s);
sysbus_init_irq(dev, &s->rtc_irq); sysbus_init_irq(dev, &s->rtc_irq);
sysbus_init_irq(dev, &s->rtc_hz_irq); sysbus_init_irq(dev, &s->rtc_hz_irq);
......
...@@ -137,7 +137,7 @@ static void alarm_cb (void *opaque) ...@@ -137,7 +137,7 @@ static void alarm_cb (void *opaque)
/* Repeat once a second */ /* Repeat once a second */
next_time = 1; next_time = 1;
} }
qemu_mod_timer(NVRAM->alrm_timer, qemu_get_clock_ns(rtc_clock) + qemu_mod_timer(NVRAM->alrm_timer, qemu_clock_get_ns(rtc_clock) +
next_time * 1000); next_time * 1000);
qemu_set_irq(NVRAM->IRQ, 0); qemu_set_irq(NVRAM->IRQ, 0);
} }
...@@ -700,7 +700,7 @@ static void m48t59_realize_common(M48t59State *s, Error **errp) ...@@ -700,7 +700,7 @@ static void m48t59_realize_common(M48t59State *s, Error **errp)
{ {
s->buffer = g_malloc0(s->size); s->buffer = g_malloc0(s->size);
if (s->model == 59) { if (s->model == 59) {
s->alrm_timer = qemu_new_timer_ns(rtc_clock, &alarm_cb, s); s->alrm_timer = timer_new_ns(rtc_clock, &alarm_cb, s);
s->wd_timer = qemu_new_timer_ns(vm_clock, &watchdog_cb, s); s->wd_timer = qemu_new_timer_ns(vm_clock, &watchdog_cb, s);
} }
qemu_get_timedate(&s->alarm, 0); qemu_get_timedate(&s->alarm, 0);
......
...@@ -102,7 +102,7 @@ static inline bool rtc_running(RTCState *s) ...@@ -102,7 +102,7 @@ static inline bool rtc_running(RTCState *s)
static uint64_t get_guest_rtc_ns(RTCState *s) static uint64_t get_guest_rtc_ns(RTCState *s)
{ {
uint64_t guest_rtc; uint64_t guest_rtc;
uint64_t guest_clock = qemu_get_clock_ns(rtc_clock); uint64_t guest_clock = qemu_clock_get_ns(rtc_clock);
guest_rtc = s->base_rtc * NSEC_PER_SEC guest_rtc = s->base_rtc * NSEC_PER_SEC
+ guest_clock - s->last_update + s->offset; + guest_clock - s->last_update + s->offset;
...@@ -117,7 +117,7 @@ static void rtc_coalesced_timer_update(RTCState *s) ...@@ -117,7 +117,7 @@ static void rtc_coalesced_timer_update(RTCState *s)
} else { } else {
/* divide each RTC interval to 2 - 8 smaller intervals */ /* divide each RTC interval to 2 - 8 smaller intervals */
int c = MIN(s->irq_coalesced, 7) + 1; int c = MIN(s->irq_coalesced, 7) + 1;
int64_t next_clock = qemu_get_clock_ns(rtc_clock) + int64_t next_clock = qemu_clock_get_ns(rtc_clock) +
muldiv64(s->period / c, get_ticks_per_sec(), RTC_CLOCK_RATE); muldiv64(s->period / c, get_ticks_per_sec(), RTC_CLOCK_RATE);
qemu_mod_timer(s->coalesced_timer, next_clock); qemu_mod_timer(s->coalesced_timer, next_clock);
} }
...@@ -238,7 +238,7 @@ static void check_update_timer(RTCState *s) ...@@ -238,7 +238,7 @@ static void check_update_timer(RTCState *s)
guest_nsec = get_guest_rtc_ns(s) % NSEC_PER_SEC; guest_nsec = get_guest_rtc_ns(s) % NSEC_PER_SEC;
/* if UF is clear, reprogram to next second */ /* if UF is clear, reprogram to next second */
next_update_time = qemu_get_clock_ns(rtc_clock) next_update_time = qemu_clock_get_ns(rtc_clock)
+ NSEC_PER_SEC - guest_nsec; + NSEC_PER_SEC - guest_nsec;
/* Compute time of next alarm. One second is already accounted /* Compute time of next alarm. One second is already accounted
...@@ -371,7 +371,7 @@ static void rtc_update_timer(void *opaque) ...@@ -371,7 +371,7 @@ static void rtc_update_timer(void *opaque)
rtc_update_time(s); rtc_update_time(s);
s->cmos_data[RTC_REG_A] &= ~REG_A_UIP; s->cmos_data[RTC_REG_A] &= ~REG_A_UIP;
if (qemu_get_clock_ns(rtc_clock) >= s->next_alarm_time) { if (qemu_clock_get_ns(rtc_clock) >= s->next_alarm_time) {
irqs |= REG_C_AF; irqs |= REG_C_AF;
if (s->cmos_data[RTC_REG_B] & REG_B_AIE) { if (s->cmos_data[RTC_REG_B] & REG_B_AIE) {
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_RTC); qemu_system_wakeup_request(QEMU_WAKEUP_REASON_RTC);
...@@ -445,7 +445,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr, ...@@ -445,7 +445,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr,
/* UIP bit is read only */ /* UIP bit is read only */
s->cmos_data[RTC_REG_A] = (data & ~REG_A_UIP) | s->cmos_data[RTC_REG_A] = (data & ~REG_A_UIP) |
(s->cmos_data[RTC_REG_A] & REG_A_UIP); (s->cmos_data[RTC_REG_A] & REG_A_UIP);
periodic_timer_update(s, qemu_get_clock_ns(rtc_clock)); periodic_timer_update(s, qemu_clock_get_ns(rtc_clock));
check_update_timer(s); check_update_timer(s);
break; break;
case RTC_REG_B: case RTC_REG_B:
...@@ -475,7 +475,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr, ...@@ -475,7 +475,7 @@ static void cmos_ioport_write(void *opaque, hwaddr addr,
qemu_irq_lower(s->irq); qemu_irq_lower(s->irq);
} }
s->cmos_data[RTC_REG_B] = data; s->cmos_data[RTC_REG_B] = data;
periodic_timer_update(s, qemu_get_clock_ns(rtc_clock)); periodic_timer_update(s, qemu_clock_get_ns(rtc_clock));
check_update_timer(s); check_update_timer(s);
break; break;
case RTC_REG_C: case RTC_REG_C:
...@@ -535,7 +535,7 @@ static void rtc_set_time(RTCState *s) ...@@ -535,7 +535,7 @@ static void rtc_set_time(RTCState *s)
rtc_get_time(s, &tm); rtc_get_time(s, &tm);
s->base_rtc = mktimegm(&tm); s->base_rtc = mktimegm(&tm);
s->last_update = qemu_get_clock_ns(rtc_clock); s->last_update = qemu_clock_get_ns(rtc_clock);
rtc_change_mon_event(&tm); rtc_change_mon_event(&tm);
} }
...@@ -590,7 +590,8 @@ static int update_in_progress(RTCState *s) ...@@ -590,7 +590,8 @@ static int update_in_progress(RTCState *s)
if (timer_pending(s->update_timer)) { if (timer_pending(s->update_timer)) {
int64_t next_update_time = timer_expire_time_ns(s->update_timer); int64_t next_update_time = timer_expire_time_ns(s->update_timer);
/* Latch UIP until the timer expires. */ /* Latch UIP until the timer expires. */
if (qemu_get_clock_ns(rtc_clock) >= (next_update_time - UIP_HOLD_LENGTH)) { if (qemu_clock_get_ns(rtc_clock) >=
(next_update_time - UIP_HOLD_LENGTH)) {
s->cmos_data[RTC_REG_A] |= REG_A_UIP; s->cmos_data[RTC_REG_A] |= REG_A_UIP;
return 1; return 1;
} }
...@@ -695,7 +696,7 @@ static void rtc_set_date_from_host(ISADevice *dev) ...@@ -695,7 +696,7 @@ static void rtc_set_date_from_host(ISADevice *dev)
qemu_get_timedate(&tm, 0); qemu_get_timedate(&tm, 0);
s->base_rtc = mktimegm(&tm); s->base_rtc = mktimegm(&tm);
s->last_update = qemu_get_clock_ns(rtc_clock); s->last_update = qemu_clock_get_ns(rtc_clock);
s->offset = 0; s->offset = 0;
/* set the CMOS date */ /* set the CMOS date */
...@@ -843,7 +844,7 @@ static void rtc_realizefn(DeviceState *dev, Error **errp) ...@@ -843,7 +844,7 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
switch (s->lost_tick_policy) { switch (s->lost_tick_policy) {
case LOST_TICK_SLEW: case LOST_TICK_SLEW:
s->coalesced_timer = s->coalesced_timer =
qemu_new_timer_ns(rtc_clock, rtc_coalesced_timer, s); timer_new_ns(rtc_clock, rtc_coalesced_timer, s);
break; break;
case LOST_TICK_DISCARD: case LOST_TICK_DISCARD:
break; break;
...@@ -853,12 +854,13 @@ static void rtc_realizefn(DeviceState *dev, Error **errp) ...@@ -853,12 +854,13 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
} }
#endif #endif
s->periodic_timer = qemu_new_timer_ns(rtc_clock, rtc_periodic_timer, s); s->periodic_timer = timer_new_ns(rtc_clock, rtc_periodic_timer, s);
s->update_timer = qemu_new_timer_ns(rtc_clock, rtc_update_timer, s); s->update_timer = timer_new_ns(rtc_clock, rtc_update_timer, s);
check_update_timer(s); check_update_timer(s);
s->clock_reset_notifier.notify = rtc_notify_clock_reset; s->clock_reset_notifier.notify = rtc_notify_clock_reset;
qemu_register_clock_reset_notifier(rtc_clock, &s->clock_reset_notifier); qemu_clock_register_reset_notifier(QEMU_CLOCK_REALTIME,
&s->clock_reset_notifier);
s->suspend_notifier.notify = rtc_notify_suspend; s->suspend_notifier.notify = rtc_notify_suspend;
qemu_register_suspend_notifier(&s->suspend_notifier); qemu_register_suspend_notifier(&s->suspend_notifier);
......
...@@ -78,7 +78,7 @@ static void pl031_interrupt(void * opaque) ...@@ -78,7 +78,7 @@ static void pl031_interrupt(void * opaque)
static uint32_t pl031_get_count(PL031State *s) static uint32_t pl031_get_count(PL031State *s)
{ {
int64_t now = qemu_get_clock_ns(rtc_clock); int64_t now = qemu_clock_get_ns(rtc_clock);
return s->tick_offset + now / get_ticks_per_sec(); return s->tick_offset + now / get_ticks_per_sec();
} }
...@@ -94,7 +94,7 @@ static void pl031_set_alarm(PL031State *s) ...@@ -94,7 +94,7 @@ static void pl031_set_alarm(PL031State *s)
qemu_del_timer(s->timer); qemu_del_timer(s->timer);
pl031_interrupt(s); pl031_interrupt(s);
} else { } else {
int64_t now = qemu_get_clock_ns(rtc_clock); int64_t now = qemu_clock_get_ns(rtc_clock);
qemu_mod_timer(s->timer, now + (int64_t)ticks * get_ticks_per_sec()); qemu_mod_timer(s->timer, now + (int64_t)ticks * get_ticks_per_sec());
} }
} }
...@@ -201,9 +201,10 @@ static int pl031_init(SysBusDevice *dev) ...@@ -201,9 +201,10 @@ static int pl031_init(SysBusDevice *dev)
sysbus_init_irq(dev, &s->irq); sysbus_init_irq(dev, &s->irq);
qemu_get_timedate(&tm, 0); qemu_get_timedate(&tm, 0);
s->tick_offset = mktimegm(&tm) - qemu_get_clock_ns(rtc_clock) / get_ticks_per_sec(); s->tick_offset = mktimegm(&tm) -
qemu_clock_get_ns(rtc_clock) / get_ticks_per_sec();
s->timer = qemu_new_timer_ns(rtc_clock, pl031_interrupt, s); s->timer = timer_new_ns(rtc_clock, pl031_interrupt, s);
return 0; return 0;
} }
...@@ -213,7 +214,7 @@ static void pl031_pre_save(void *opaque) ...@@ -213,7 +214,7 @@ static void pl031_pre_save(void *opaque)
/* tick_offset is base_time - rtc_clock base time. Instead, we want to /* tick_offset is base_time - rtc_clock base time. Instead, we want to
* store the base time relative to the vm_clock for backwards-compatibility. */ * store the base time relative to the vm_clock for backwards-compatibility. */
int64_t delta = qemu_get_clock_ns(rtc_clock) - qemu_get_clock_ns(vm_clock); int64_t delta = qemu_clock_get_ns(rtc_clock) - qemu_get_clock_ns(vm_clock);
s->tick_offset_vmstate = s->tick_offset + delta / get_ticks_per_sec(); s->tick_offset_vmstate = s->tick_offset + delta / get_ticks_per_sec();
} }
...@@ -221,7 +222,7 @@ static int pl031_post_load(void *opaque, int version_id) ...@@ -221,7 +222,7 @@ static int pl031_post_load(void *opaque, int version_id)
{ {
PL031State *s = opaque; PL031State *s = opaque;
int64_t delta = qemu_get_clock_ns(rtc_clock) - qemu_get_clock_ns(vm_clock); int64_t delta = qemu_clock_get_ns(rtc_clock) - qemu_get_clock_ns(vm_clock);
s->tick_offset = s->tick_offset_vmstate - delta / get_ticks_per_sec(); s->tick_offset = s->tick_offset_vmstate - delta / get_ticks_per_sec();
pl031_set_alarm(s); pl031_set_alarm(s);
return 0; return 0;
......
...@@ -72,14 +72,14 @@ static inline void menelaus_update(MenelausState *s) ...@@ -72,14 +72,14 @@ static inline void menelaus_update(MenelausState *s)
static inline void menelaus_rtc_start(MenelausState *s) static inline void menelaus_rtc_start(MenelausState *s)
{ {
s->rtc.next += qemu_get_clock_ms(rtc_clock); s->rtc.next += qemu_clock_get_ms(rtc_clock);
qemu_mod_timer(s->rtc.hz_tm, s->rtc.next); qemu_mod_timer(s->rtc.hz_tm, s->rtc.next);
} }
static inline void menelaus_rtc_stop(MenelausState *s) static inline void menelaus_rtc_stop(MenelausState *s)
{ {
qemu_del_timer(s->rtc.hz_tm); qemu_del_timer(s->rtc.hz_tm);
s->rtc.next -= qemu_get_clock_ms(rtc_clock); s->rtc.next -= qemu_clock_get_ms(rtc_clock);
if (s->rtc.next < 1) if (s->rtc.next < 1)
s->rtc.next = 1; s->rtc.next = 1;
} }
...@@ -782,7 +782,7 @@ static void menelaus_pre_save(void *opaque) ...@@ -782,7 +782,7 @@ static void menelaus_pre_save(void *opaque)
{ {
MenelausState *s = opaque; MenelausState *s = opaque;
/* Should be <= 1000 */ /* Should be <= 1000 */
s->rtc_next_vmstate = s->rtc.next - qemu_get_clock_ms(rtc_clock); s->rtc_next_vmstate = s->rtc.next - qemu_clock_get_ms(rtc_clock);
} }
static int menelaus_post_load(void *opaque, int version_id) static int menelaus_post_load(void *opaque, int version_id)
...@@ -843,7 +843,7 @@ static int twl92230_init(I2CSlave *i2c) ...@@ -843,7 +843,7 @@ static int twl92230_init(I2CSlave *i2c)
{ {
MenelausState *s = FROM_I2C_SLAVE(MenelausState, i2c); MenelausState *s = FROM_I2C_SLAVE(MenelausState, i2c);
s->rtc.hz_tm = qemu_new_timer_ms(rtc_clock, menelaus_rtc_hz, s); s->rtc.hz_tm = timer_new_ms(rtc_clock, menelaus_rtc_hz, s);
/* Three output pins plus one interrupt pin. */ /* Three output pins plus one interrupt pin. */
qdev_init_gpio_out(&i2c->qdev, s->out, 4); qdev_init_gpio_out(&i2c->qdev, s->out, 4);
......
...@@ -124,7 +124,7 @@ extern int boot_menu; ...@@ -124,7 +124,7 @@ extern int boot_menu;
extern uint8_t *boot_splash_filedata; extern uint8_t *boot_splash_filedata;
extern size_t boot_splash_filedata_size; extern size_t boot_splash_filedata_size;
extern uint8_t qemu_extra_params_fw[2]; extern uint8_t qemu_extra_params_fw[2];
extern QEMUClock *rtc_clock; extern QEMUClockType rtc_clock;
#define MAX_NODES 64 #define MAX_NODES 64
#define MAX_CPUMASK_BITS 255 #define MAX_CPUMASK_BITS 255
......
...@@ -93,7 +93,7 @@ uint64_t helper_get_vmtime(void) ...@@ -93,7 +93,7 @@ uint64_t helper_get_vmtime(void)
uint64_t helper_get_walltime(void) uint64_t helper_get_walltime(void)
{ {
return qemu_get_clock_ns(rtc_clock); return qemu_clock_get_ns(rtc_clock);
} }
void helper_set_alarm(CPUAlphaState *env, uint64_t expire) void helper_set_alarm(CPUAlphaState *env, uint64_t expire)
......
...@@ -196,7 +196,7 @@ NICInfo nd_table[MAX_NICS]; ...@@ -196,7 +196,7 @@ NICInfo nd_table[MAX_NICS];
int autostart; int autostart;
static int rtc_utc = 1; static int rtc_utc = 1;
static int rtc_date_offset = -1; /* -1 means no change */ static int rtc_date_offset = -1; /* -1 means no change */
QEMUClock *rtc_clock; QEMUClockType rtc_clock;
int vga_interface_type = VGA_NONE; int vga_interface_type = VGA_NONE;
static int full_screen = 0; static int full_screen = 0;
static int no_frame = 0; static int no_frame = 0;
...@@ -805,11 +805,11 @@ static void configure_rtc(QemuOpts *opts) ...@@ -805,11 +805,11 @@ static void configure_rtc(QemuOpts *opts)
value = qemu_opt_get(opts, "clock"); value = qemu_opt_get(opts, "clock");
if (value) { if (value) {
if (!strcmp(value, "host")) { if (!strcmp(value, "host")) {
rtc_clock = host_clock; rtc_clock = QEMU_CLOCK_HOST;
} else if (!strcmp(value, "rt")) { } else if (!strcmp(value, "rt")) {
rtc_clock = rt_clock; rtc_clock = QEMU_CLOCK_REALTIME;
} else if (!strcmp(value, "vm")) { } else if (!strcmp(value, "vm")) {
rtc_clock = vm_clock; rtc_clock = QEMU_CLOCK_VIRTUAL;
} else { } else {
fprintf(stderr, "qemu: invalid option value '%s'\n", value); fprintf(stderr, "qemu: invalid option value '%s'\n", value);
exit(1); exit(1);
...@@ -2965,7 +2965,7 @@ int main(int argc, char **argv, char **envp) ...@@ -2965,7 +2965,7 @@ int main(int argc, char **argv, char **envp)
runstate_init(); runstate_init();
init_clocks(); init_clocks();
rtc_clock = host_clock; rtc_clock = QEMU_CLOCK_HOST;
qemu_cache_utils_init(envp); qemu_cache_utils_init(envp);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册