HVM_REGISTER_SAVE_RESTORE(HPET, hpet_save, hpet_load, 1, HVMSR_PER_DOM);
-void hpet_init(struct domain *d)
+static void hpet_set(HPETState *h)
{
- HPETState *h = domain_vhpet(d);
int i;
- if ( !has_vhpet(d) )
- return;
-
memset(h, 0, sizeof(HPETState));
rwlock_init(&h->lock);
h->hpet.comparator64[i] = ~0ULL;
h->pt[i].source = PTSRC_isa;
}
+}
+
+void hpet_init(struct domain *d)
+{
+ if ( !has_vhpet(d) )
+ return;
+ hpet_set(domain_vhpet(d));
register_mmio_handler(d, &hpet_mmio_ops);
d->arch.hvm_domain.params[HVM_PARAM_HPET_ENABLED] = 1;
}
void hpet_reset(struct domain *d)
{
+ if ( !has_vhpet(d) )
+ return;
+
hpet_deinit(d);
- hpet_init(d);
+ hpet_set(domain_vhpet(d));
}
/*