static int handle_speaker_io(
int dir, uint32_t port, uint32_t bytes, uint32_t *val);
+#define get_guest_time(v) \
+ (is_hvm_vcpu(v) ? hvm_get_guest_time(v) : (u64)get_s_time())
+
/* Compute with 96 bit intermediate result: (a*b)/c */
static uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
{
ASSERT(spin_is_locked(&pit->lock));
- d = muldiv64(hvm_get_guest_time(v) - pit->count_load_time[channel],
+ d = muldiv64(get_guest_time(v) - pit->count_load_time[channel],
PIT_FREQ, SYSTEM_TIME_HZ);
switch ( c->mode )
ASSERT(spin_is_locked(&pit->lock));
- d = muldiv64(hvm_get_guest_time(v) - pit->count_load_time[channel],
+ d = muldiv64(get_guest_time(v) - pit->count_load_time[channel],
PIT_FREQ, SYSTEM_TIME_HZ);
switch ( s->mode )
case 3:
/* Restart counting on rising edge. */
if ( s->gate < val )
- pit->count_load_time[channel] = hvm_get_guest_time(v);
+ pit->count_load_time[channel] = get_guest_time(v);
break;
}
static void pit_time_fired(struct vcpu *v, void *priv)
{
uint64_t *count_load_time = priv;
- *count_load_time = hvm_get_guest_time(v);
+ *count_load_time = get_guest_time(v);
}
static void pit_load_count(PITState *pit, int channel, int val)
if ( v == NULL )
pit->count_load_time[channel] = 0;
else
- pit->count_load_time[channel] = hvm_get_guest_time(v);
+ pit->count_load_time[channel] = get_guest_time(v);
s->count = val;
period = DIV_ROUND(val * SYSTEM_TIME_HZ, PIT_FREQ);
* time jitter here, but the wall-clock will have jumped massively, so
* we hope the guest can handle it.
*/
- pit->pt0.last_plt_gtime = hvm_get_guest_time(d->vcpu[0]);
+ pit->pt0.last_plt_gtime = get_guest_time(d->vcpu[0]);
for ( i = 0; i < 3; i++ )
pit_load_count(pit, i, pit->hw.channels[i].count);