Symbol: vhpet
sys/amd64/include/vmm.h
151
struct vhpet *vhpet /* (i) virtual HPET */
sys/amd64/include/vmm.h
159
struct vhpet;
sys/amd64/include/vmm.h
251
struct vhpet *vm_hpet(struct vm *vm);
sys/amd64/vmm/io/vhpet.c
119
vhpet_counter_enabled(struct vhpet *vhpet)
sys/amd64/vmm/io/vhpet.c
122
return ((vhpet->config & HPET_CNF_ENABLE) ? true : false);
sys/amd64/vmm/io/vhpet.c
126
vhpet_timer_msi_enabled(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
130
if ((vhpet->timer[n].cap_config & msi_enable) == msi_enable)
sys/amd64/vmm/io/vhpet.c
137
vhpet_timer_ioapic_pin(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
143
if (vhpet_timer_msi_enabled(vhpet, n))
sys/amd64/vmm/io/vhpet.c
146
return ((vhpet->timer[n].cap_config & HPET_TCNF_INT_ROUTE) >> 9);
sys/amd64/vmm/io/vhpet.c
150
vhpet_counter(struct vhpet *vhpet, sbintime_t *nowptr)
sys/amd64/vmm/io/vhpet.c
155
val = vhpet->countbase;
sys/amd64/vmm/io/vhpet.c
156
if (vhpet_counter_enabled(vhpet)) {
sys/amd64/vmm/io/vhpet.c
158
delta = now - vhpet->countbase_sbt;
sys/amd64/vmm/io/vhpet.c
160
"%#lx to %#lx", vhpet->countbase_sbt, now));
sys/amd64/vmm/io/vhpet.c
161
val += delta / vhpet->freq_sbt;
sys/amd64/vmm/io/vhpet.c
176
vhpet_timer_clear_isr(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
180
if (vhpet->isr & (1 << n)) {
sys/amd64/vmm/io/vhpet.c
181
pin = vhpet_timer_ioapic_pin(vhpet, n);
sys/amd64/vmm/io/vhpet.c
183
vioapic_deassert_irq(vhpet->vm, pin);
sys/amd64/vmm/io/vhpet.c
184
vhpet->isr &= ~(1 << n);
sys/amd64/vmm/io/vhpet.c
189
vhpet_periodic_timer(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
192
return ((vhpet->timer[n].cap_config & HPET_TCNF_TYPE) != 0);
sys/amd64/vmm/io/vhpet.c
196
vhpet_timer_interrupt_enabled(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
199
return ((vhpet->timer[n].cap_config & HPET_TCNF_INT_ENB) != 0);
sys/amd64/vmm/io/vhpet.c
203
vhpet_timer_edge_trig(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
206
KASSERT(!vhpet_timer_msi_enabled(vhpet, n), ("vhpet_timer_edge_trig: "
sys/amd64/vmm/io/vhpet.c
209
if ((vhpet->timer[n].cap_config & HPET_TCNF_INT_TYPE) == 0)
sys/amd64/vmm/io/vhpet.c
216
vhpet_timer_interrupt(struct vhpet *vhpet, int n)
sys/amd64/vmm/io/vhpet.c
221
if (!vhpet_timer_interrupt_enabled(vhpet, n))
sys/amd64/vmm/io/vhpet.c
227
if ((vhpet->isr & (1 << n)) != 0) {
sys/amd64/vmm/io/vhpet.c
228
VM_CTR1(vhpet->vm, "hpet t%d intr is already asserted", n);
sys/amd64/vmm/io/vhpet.c
232
if (vhpet_timer_msi_enabled(vhpet, n)) {
sys/amd64/vmm/io/vhpet.c
233
lapic_intr_msi(vhpet->vm, vhpet->timer[n].msireg >> 32,
sys/amd64/vmm/io/vhpet.c
234
vhpet->timer[n].msireg & 0xffffffff);
sys/amd64/vmm/io/vhpet.c
238
pin = vhpet_timer_ioapic_pin(vhpet, n);
sys/amd64/vmm/io/vhpet.c
240
VM_CTR1(vhpet->vm, "hpet t%d intr is not routed to ioapic", n);
sys/amd64/vmm/io/vhpet.c
244
if (vhpet_timer_edge_trig(vhpet, n)) {
sys/amd64/vmm/io/vhpet.c
245
vioapic_pulse_irq(vhpet->vm, pin);
sys/amd64/vmm/io/vhpet.c
247
vhpet->isr |= 1 << n;
sys/amd64/vmm/io/vhpet.c
248
vioapic_assert_irq(vhpet->vm, pin);
sys/amd64/vmm/io/vhpet.c
253
vhpet_adjust_compval(struct vhpet *vhpet, int n, uint32_t counter)
sys/amd64/vmm/io/vhpet.c
257
KASSERT(vhpet->timer[n].comprate != 0, ("hpet t%d is not periodic", n));
sys/amd64/vmm/io/vhpet.c
259
compval = vhpet->timer[n].compval;
sys/amd64/vmm/io/vhpet.c
260
comprate = vhpet->timer[n].comprate;
sys/amd64/vmm/io/vhpet.c
275
vhpet->timer[n].compval = compnext;
sys/amd64/vmm/io/vhpet.c
284
struct vhpet *vhpet;
sys/amd64/vmm/io/vhpet.c
289
vhpet = arg->vhpet;
sys/amd64/vmm/io/vhpet.c
291
callout = &vhpet->timer[n].callout;
sys/amd64/vmm/io/vhpet.c
293
VM_CTR1(vhpet->vm, "hpet t%d fired", n);
sys/amd64/vmm/io/vhpet.c
295
VHPET_LOCK(vhpet);
sys/amd64/vmm/io/vhpet.c
305
if (!vhpet_counter_enabled(vhpet))
sys/amd64/vmm/io/vhpet.c
306
panic("vhpet(%p) callout with counter disabled", vhpet);
sys/amd64/vmm/io/vhpet.c
308
counter = vhpet_counter(vhpet, &now);
sys/amd64/vmm/io/vhpet.c
309
vhpet_start_timer(vhpet, n, counter, now);
sys/amd64/vmm/io/vhpet.c
310
vhpet_timer_interrupt(vhpet, n);
sys/amd64/vmm/io/vhpet.c
312
VHPET_UNLOCK(vhpet);
sys/amd64/vmm/io/vhpet.c
317
vhpet_stop_timer(struct vhpet *vhpet, int n, sbintime_t now)
sys/amd64/vmm/io/vhpet.c
320
VM_CTR1(vhpet->vm, "hpet t%d stopped", n);
sys/amd64/vmm/io/vhpet.c
321
callout_stop(&vhpet->timer[n].callout);
sys/amd64/vmm/io/vhpet.c
330
if (vhpet->timer[n].callout_sbt < now) {
sys/amd64/vmm/io/vhpet.c
331
VM_CTR1(vhpet->vm, "hpet t%d interrupt triggered after "
sys/amd64/vmm/io/vhpet.c
333
vhpet_timer_interrupt(vhpet, n);
sys/amd64/vmm/io/vhpet.c
338
vhpet_start_timer(struct vhpet *vhpet, int n, uint32_t counter, sbintime_t now)
sys/amd64/vmm/io/vhpet.c
342
if (vhpet->timer[n].comprate != 0)
sys/amd64/vmm/io/vhpet.c
343
vhpet_adjust_compval(vhpet, n, counter);
sys/amd64/vmm/io/vhpet.c
353
delta = (vhpet->timer[n].compval - counter) * vhpet->freq_sbt;
sys/amd64/vmm/io/vhpet.c
355
vhpet->timer[n].callout_sbt = now + delta;
sys/amd64/vmm/io/vhpet.c
356
callout_reset_sbt(&vhpet->timer[n].callout, vhpet->timer[n].callout_sbt,
sys/amd64/vmm/io/vhpet.c
357
precision, vhpet_handler, &vhpet->timer[n].arg, C_ABSOLUTE);
sys/amd64/vmm/io/vhpet.c
361
vhpet_start_counting(struct vhpet *vhpet)
sys/amd64/vmm/io/vhpet.c
365
vhpet->countbase_sbt = sbinuptime();
sys/amd64/vmm/io/vhpet.c
371
vhpet_start_timer(vhpet, i, vhpet->countbase,
sys/amd64/vmm/io/vhpet.c
372
vhpet->countbase_sbt);
sys/amd64/vmm/io/vhpet.c
377
vhpet_stop_counting(struct vhpet *vhpet, uint32_t counter, sbintime_t now)
sys/amd64/vmm/io/vhpet.c
381
vhpet->countbase = counter;
sys/amd64/vmm/io/vhpet.c
383
vhpet_stop_timer(vhpet, i, now);
sys/amd64/vmm/io/vhpet.c
395
vhpet_timer_update_config(struct vhpet *vhpet, int n, uint64_t data,
sys/amd64/vmm/io/vhpet.c
403
if (vhpet_timer_msi_enabled(vhpet, n) ||
sys/amd64/vmm/io/vhpet.c
404
vhpet_timer_edge_trig(vhpet, n)) {
sys/amd64/vmm/io/vhpet.c
405
if (vhpet->isr & (1 << n))
sys/amd64/vmm/io/vhpet.c
408
old_pin = vhpet_timer_ioapic_pin(vhpet, n);
sys/amd64/vmm/io/vhpet.c
409
oldval = vhpet->timer[n].cap_config;
sys/amd64/vmm/io/vhpet.c
419
vhpet->timer[n].cap_config = newval;
sys/amd64/vmm/io/vhpet.c
420
VM_CTR2(vhpet->vm, "hpet t%d cap_config set to 0x%016x", n, newval);
sys/amd64/vmm/io/vhpet.c
427
allowed_irqs = vhpet->timer[n].cap_config >> 32;
sys/amd64/vmm/io/vhpet.c
428
new_pin = vhpet_timer_ioapic_pin(vhpet, n);
sys/amd64/vmm/io/vhpet.c
430
VM_CTR3(vhpet->vm, "hpet t%d configured invalid irq %d, "
sys/amd64/vmm/io/vhpet.c
433
vhpet->timer[n].cap_config &= ~HPET_TCNF_INT_ROUTE;
sys/amd64/vmm/io/vhpet.c
436
if (!vhpet_periodic_timer(vhpet, n))
sys/amd64/vmm/io/vhpet.c
437
vhpet->timer[n].comprate = 0;
sys/amd64/vmm/io/vhpet.c
448
if (vhpet->isr & (1 << n)) {
sys/amd64/vmm/io/vhpet.c
451
if (!vhpet_timer_interrupt_enabled(vhpet, n))
sys/amd64/vmm/io/vhpet.c
453
else if (vhpet_timer_msi_enabled(vhpet, n))
sys/amd64/vmm/io/vhpet.c
455
else if (vhpet_timer_edge_trig(vhpet, n))
sys/amd64/vmm/io/vhpet.c
457
else if (vhpet_timer_ioapic_pin(vhpet, n) != old_pin)
sys/amd64/vmm/io/vhpet.c
463
VM_CTR1(vhpet->vm, "hpet t%d isr cleared due to "
sys/amd64/vmm/io/vhpet.c
465
vioapic_deassert_irq(vhpet->vm, old_pin);
sys/amd64/vmm/io/vhpet.c
466
vhpet->isr &= ~(1 << n);
sys/amd64/vmm/io/vhpet.c
475
struct vhpet *vhpet;
sys/amd64/vmm/io/vhpet.c
481
vhpet = vm_hpet(vcpu_vm(vcpu));
sys/amd64/vmm/io/vhpet.c
484
VHPET_LOCK(vhpet);
sys/amd64/vmm/io/vhpet.c
501
VM_CTR2(vhpet->vm, "hpet invalid mmio write: "
sys/amd64/vmm/io/vhpet.c
508
VM_CTR2(vhpet->vm, "hpet invalid mmio write: "
sys/amd64/vmm/io/vhpet.c
520
nowptr = vhpet_counter_enabled(vhpet) ? &now : NULL;
sys/amd64/vmm/io/vhpet.c
521
counter = vhpet_counter(vhpet, nowptr);
sys/amd64/vmm/io/vhpet.c
522
oldval = vhpet->config;
sys/amd64/vmm/io/vhpet.c
523
update_register(&vhpet->config, data, mask);
sys/amd64/vmm/io/vhpet.c
529
vhpet->config &= ~HPET_CNF_LEG_RT;
sys/amd64/vmm/io/vhpet.c
531
if ((oldval ^ vhpet->config) & HPET_CNF_ENABLE) {
sys/amd64/vmm/io/vhpet.c
532
if (vhpet_counter_enabled(vhpet)) {
sys/amd64/vmm/io/vhpet.c
533
vhpet_start_counting(vhpet);
sys/amd64/vmm/io/vhpet.c
534
VM_CTR0(vhpet->vm, "hpet enabled");
sys/amd64/vmm/io/vhpet.c
536
vhpet_stop_counting(vhpet, counter, now);
sys/amd64/vmm/io/vhpet.c
537
VM_CTR0(vhpet->vm, "hpet disabled");
sys/amd64/vmm/io/vhpet.c
544
isr_clear_mask = vhpet->isr & data;
sys/amd64/vmm/io/vhpet.c
547
VM_CTR1(vhpet->vm, "hpet t%d isr cleared", i);
sys/amd64/vmm/io/vhpet.c
548
vhpet_timer_clear_isr(vhpet, i);
sys/amd64/vmm/io/vhpet.c
556
val64 = vhpet_counter(vhpet, NULL);
sys/amd64/vmm/io/vhpet.c
558
vhpet->countbase = val64;
sys/amd64/vmm/io/vhpet.c
559
if (vhpet_counter_enabled(vhpet))
sys/amd64/vmm/io/vhpet.c
560
vhpet_start_counting(vhpet);
sys/amd64/vmm/io/vhpet.c
567
vhpet_timer_update_config(vhpet, i, data, mask);
sys/amd64/vmm/io/vhpet.c
573
old_compval = vhpet->timer[i].compval;
sys/amd64/vmm/io/vhpet.c
574
old_comprate = vhpet->timer[i].comprate;
sys/amd64/vmm/io/vhpet.c
575
if (vhpet_periodic_timer(vhpet, i)) {
sys/amd64/vmm/io/vhpet.c
582
val64 = vhpet->timer[i].comprate;
sys/amd64/vmm/io/vhpet.c
584
vhpet->timer[i].comprate = val64;
sys/amd64/vmm/io/vhpet.c
585
if ((vhpet->timer[i].cap_config &
sys/amd64/vmm/io/vhpet.c
587
vhpet->timer[i].compval = val64;
sys/amd64/vmm/io/vhpet.c
590
KASSERT(vhpet->timer[i].comprate == 0,
sys/amd64/vmm/io/vhpet.c
592
"rate %u", i, vhpet->timer[i].comprate));
sys/amd64/vmm/io/vhpet.c
593
val64 = vhpet->timer[i].compval;
sys/amd64/vmm/io/vhpet.c
595
vhpet->timer[i].compval = val64;
sys/amd64/vmm/io/vhpet.c
597
vhpet->timer[i].cap_config &= ~HPET_TCNF_VAL_SET;
sys/amd64/vmm/io/vhpet.c
599
if (vhpet->timer[i].compval != old_compval ||
sys/amd64/vmm/io/vhpet.c
600
vhpet->timer[i].comprate != old_comprate) {
sys/amd64/vmm/io/vhpet.c
601
if (vhpet_counter_enabled(vhpet)) {
sys/amd64/vmm/io/vhpet.c
602
counter = vhpet_counter(vhpet, &now);
sys/amd64/vmm/io/vhpet.c
603
vhpet_start_timer(vhpet, i, counter,
sys/amd64/vmm/io/vhpet.c
612
update_register(&vhpet->timer[i].msireg, data, mask);
sys/amd64/vmm/io/vhpet.c
617
VHPET_UNLOCK(vhpet);
sys/amd64/vmm/io/vhpet.c
626
struct vhpet *vhpet;
sys/amd64/vmm/io/vhpet.c
629
vhpet = vm_hpet(vcpu_vm(vcpu));
sys/amd64/vmm/io/vhpet.c
632
VHPET_LOCK(vhpet);
sys/amd64/vmm/io/vhpet.c
636
VM_CTR2(vhpet->vm, "hpet invalid mmio read: "
sys/amd64/vmm/io/vhpet.c
644
VM_CTR2(vhpet->vm, "hpet invalid mmio read: "
sys/amd64/vmm/io/vhpet.c
656
data = vhpet->config;
sys/amd64/vmm/io/vhpet.c
661
data = vhpet->isr;
sys/amd64/vmm/io/vhpet.c
666
data = vhpet_counter(vhpet, NULL);
sys/amd64/vmm/io/vhpet.c
673
data = vhpet->timer[i].cap_config;
sys/amd64/vmm/io/vhpet.c
679
data = vhpet->timer[i].compval;
sys/amd64/vmm/io/vhpet.c
685
data = vhpet->timer[i].msireg;
sys/amd64/vmm/io/vhpet.c
693
VHPET_UNLOCK(vhpet);
sys/amd64/vmm/io/vhpet.c
703
struct vhpet *
sys/amd64/vmm/io/vhpet.c
707
struct vhpet *vhpet;
sys/amd64/vmm/io/vhpet.c
71
struct vhpet *vhpet;
sys/amd64/vmm/io/vhpet.c
712
vhpet = malloc(sizeof(struct vhpet), M_VHPET, M_WAITOK | M_ZERO);
sys/amd64/vmm/io/vhpet.c
713
vhpet->vm = vm;
sys/amd64/vmm/io/vhpet.c
714
mtx_init(&vhpet->mtx, "vhpet lock", NULL, MTX_DEF);
sys/amd64/vmm/io/vhpet.c
717
vhpet->freq_sbt = bttosbt(bt);
sys/amd64/vmm/io/vhpet.c
731
vhpet->timer[i].cap_config = allowed_irqs << 32;
sys/amd64/vmm/io/vhpet.c
732
vhpet->timer[i].cap_config |= HPET_TCAP_PER_INT;
sys/amd64/vmm/io/vhpet.c
733
vhpet->timer[i].cap_config |= HPET_TCAP_FSB_INT_DEL;
sys/amd64/vmm/io/vhpet.c
735
vhpet->timer[i].compval = 0xffffffff;
sys/amd64/vmm/io/vhpet.c
736
callout_init(&vhpet->timer[i].callout, 1);
sys/amd64/vmm/io/vhpet.c
738
arg = &vhpet->timer[i].arg;
sys/amd64/vmm/io/vhpet.c
739
arg->vhpet = vhpet;
sys/amd64/vmm/io/vhpet.c
743
return (vhpet);
sys/amd64/vmm/io/vhpet.c
747
vhpet_cleanup(struct vhpet *vhpet)
sys/amd64/vmm/io/vhpet.c
752
callout_drain(&vhpet->timer[i].callout);
sys/amd64/vmm/io/vhpet.c
754
mtx_destroy(&vhpet->mtx);
sys/amd64/vmm/io/vhpet.c
755
free(vhpet, M_VHPET);
sys/amd64/vmm/io/vhpet.c
768
vhpet_snapshot(struct vhpet *vhpet, struct vm_snapshot_meta *meta)
sys/amd64/vmm/io/vhpet.c
773
SNAPSHOT_VAR_OR_LEAVE(vhpet->freq_sbt, meta, ret, done);
sys/amd64/vmm/io/vhpet.c
774
SNAPSHOT_VAR_OR_LEAVE(vhpet->config, meta, ret, done);
sys/amd64/vmm/io/vhpet.c
775
SNAPSHOT_VAR_OR_LEAVE(vhpet->isr, meta, ret, done);
sys/amd64/vmm/io/vhpet.c
783
countbase = vhpet_counter(vhpet, NULL);
sys/amd64/vmm/io/vhpet.c
786
vhpet->countbase = countbase;
sys/amd64/vmm/io/vhpet.c
788
for (i = 0; i < nitems(vhpet->timer); i++) {
sys/amd64/vmm/io/vhpet.c
789
SNAPSHOT_VAR_OR_LEAVE(vhpet->timer[i].cap_config,
sys/amd64/vmm/io/vhpet.c
791
SNAPSHOT_VAR_OR_LEAVE(vhpet->timer[i].msireg, meta, ret, done);
sys/amd64/vmm/io/vhpet.c
792
SNAPSHOT_VAR_OR_LEAVE(vhpet->timer[i].compval, meta, ret, done);
sys/amd64/vmm/io/vhpet.c
793
SNAPSHOT_VAR_OR_LEAVE(vhpet->timer[i].comprate, meta, ret, done);
sys/amd64/vmm/io/vhpet.c
794
SNAPSHOT_VAR_OR_LEAVE(vhpet->timer[i].callout_sbt,
sys/amd64/vmm/io/vhpet.c
803
vhpet_restore_time(struct vhpet *vhpet)
sys/amd64/vmm/io/vhpet.c
805
if (vhpet_counter_enabled(vhpet))
sys/amd64/vmm/io/vhpet.c
806
vhpet_start_counting(vhpet);
sys/amd64/vmm/io/vhpet.c
99
static void vhpet_start_timer(struct vhpet *vhpet, int n, uint32_t counter,
sys/amd64/vmm/io/vhpet.h
39
struct vhpet *vhpet_init(struct vm *vm);
sys/amd64/vmm/io/vhpet.h
40
void vhpet_cleanup(struct vhpet *vhpet);
sys/amd64/vmm/io/vhpet.h
47
int vhpet_snapshot(struct vhpet *vhpet, struct vm_snapshot_meta *meta);
sys/amd64/vmm/io/vhpet.h
48
int vhpet_restore_time(struct vhpet *vhpet);
sys/amd64/vmm/vmm.c
1611
struct vhpet *
sys/amd64/vmm/vmm.c
1615
return (vm->vhpet);
sys/amd64/vmm/vmm.c
317
vm->vhpet = vhpet_init(vm);
sys/amd64/vmm/vmm.c
417
vhpet_cleanup(vm->vhpet);