usr/src/uts/intel/io/vmm/io/vhpet.c
111
static void vhpet_start_timer(struct vhpet *vhpet, int n, uint32_t counter,
usr/src/uts/intel/io/vmm/io/vhpet.c
131
vhpet_counter_enabled(struct vhpet *vhpet)
usr/src/uts/intel/io/vmm/io/vhpet.c
134
return ((vhpet->config & HPET_CNF_ENABLE) ? true : false);
usr/src/uts/intel/io/vmm/io/vhpet.c
138
vhpet_timer_msi_enabled(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
142
if ((vhpet->timer[n].cap_config & msi_enable) == msi_enable)
usr/src/uts/intel/io/vmm/io/vhpet.c
149
vhpet_timer_ioapic_pin(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
155
if (vhpet_timer_msi_enabled(vhpet, n))
usr/src/uts/intel/io/vmm/io/vhpet.c
158
return ((vhpet->timer[n].cap_config & HPET_TCNF_INT_ROUTE) >> 9);
usr/src/uts/intel/io/vmm/io/vhpet.c
162
vhpet_counter(struct vhpet *vhpet, hrtime_t *nowptr)
usr/src/uts/intel/io/vmm/io/vhpet.c
165
uint32_t val = vhpet->base_count;
usr/src/uts/intel/io/vmm/io/vhpet.c
167
if (vhpet_counter_enabled(vhpet)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
168
const hrtime_t delta = now - vhpet->base_time;
usr/src/uts/intel/io/vmm/io/vhpet.c
183
vhpet_timer_clear_isr(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
187
if (vhpet->isr & (1 << n)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
188
pin = vhpet_timer_ioapic_pin(vhpet, n);
usr/src/uts/intel/io/vmm/io/vhpet.c
190
(void) vioapic_deassert_irq(vhpet->vm, pin);
usr/src/uts/intel/io/vmm/io/vhpet.c
191
vhpet->isr &= ~(1 << n);
usr/src/uts/intel/io/vmm/io/vhpet.c
196
vhpet_periodic_timer(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
199
return ((vhpet->timer[n].cap_config & HPET_TCNF_TYPE) != 0);
usr/src/uts/intel/io/vmm/io/vhpet.c
203
vhpet_timer_interrupt_enabled(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
206
return ((vhpet->timer[n].cap_config & HPET_TCNF_INT_ENB) != 0);
usr/src/uts/intel/io/vmm/io/vhpet.c
210
vhpet_timer_edge_trig(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
213
KASSERT(!vhpet_timer_msi_enabled(vhpet, n), ("vhpet_timer_edge_trig: "
usr/src/uts/intel/io/vmm/io/vhpet.c
216
if ((vhpet->timer[n].cap_config & HPET_TCNF_INT_TYPE) == 0)
usr/src/uts/intel/io/vmm/io/vhpet.c
223
vhpet_timer_interrupt(struct vhpet *vhpet, int n)
usr/src/uts/intel/io/vmm/io/vhpet.c
228
if (!vhpet_timer_interrupt_enabled(vhpet, n))
usr/src/uts/intel/io/vmm/io/vhpet.c
234
if ((vhpet->isr & (1 << n)) != 0) {
usr/src/uts/intel/io/vmm/io/vhpet.c
238
if (vhpet_timer_msi_enabled(vhpet, n)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
239
(void) lapic_intr_msi(vhpet->vm, vhpet->timer[n].msireg >> 32,
usr/src/uts/intel/io/vmm/io/vhpet.c
240
vhpet->timer[n].msireg & 0xffffffff);
usr/src/uts/intel/io/vmm/io/vhpet.c
244
pin = vhpet_timer_ioapic_pin(vhpet, n);
usr/src/uts/intel/io/vmm/io/vhpet.c
250
if (vhpet_timer_edge_trig(vhpet, n)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
251
(void) vioapic_pulse_irq(vhpet->vm, pin);
usr/src/uts/intel/io/vmm/io/vhpet.c
253
vhpet->isr |= 1 << n;
usr/src/uts/intel/io/vmm/io/vhpet.c
254
(void) vioapic_assert_irq(vhpet->vm, pin);
usr/src/uts/intel/io/vmm/io/vhpet.c
259
vhpet_adjust_compval(struct vhpet *vhpet, int n, uint32_t counter)
usr/src/uts/intel/io/vmm/io/vhpet.c
263
KASSERT(vhpet->timer[n].comprate != 0, ("hpet t%d is not periodic", n));
usr/src/uts/intel/io/vmm/io/vhpet.c
265
compval = vhpet->timer[n].compval;
usr/src/uts/intel/io/vmm/io/vhpet.c
266
comprate = vhpet->timer[n].comprate;
usr/src/uts/intel/io/vmm/io/vhpet.c
281
vhpet->timer[n].compval = compnext;
usr/src/uts/intel/io/vmm/io/vhpet.c
288
struct vhpet *vhpet = vca->vhpet;
usr/src/uts/intel/io/vmm/io/vhpet.c
290
struct callout *callout = &vhpet->timer[n].callout;
usr/src/uts/intel/io/vmm/io/vhpet.c
292
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
295
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
300
ASSERT(vhpet_counter_enabled(vhpet));
usr/src/uts/intel/io/vmm/io/vhpet.c
302
if (vhpet_periodic_timer(vhpet, n)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
304
uint32_t counter = vhpet_counter(vhpet, &now);
usr/src/uts/intel/io/vmm/io/vhpet.c
306
vhpet_start_timer(vhpet, n, counter, now);
usr/src/uts/intel/io/vmm/io/vhpet.c
312
vhpet->timer[n].callout_expire = 0;
usr/src/uts/intel/io/vmm/io/vhpet.c
314
vhpet_timer_interrupt(vhpet, n);
usr/src/uts/intel/io/vmm/io/vhpet.c
316
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
320
vhpet_stop_timer(struct vhpet *vhpet, int n, hrtime_t now)
usr/src/uts/intel/io/vmm/io/vhpet.c
322
ASSERT(VHPET_LOCKED(vhpet));
usr/src/uts/intel/io/vmm/io/vhpet.c
324
callout_stop(&vhpet->timer[n].callout);
usr/src/uts/intel/io/vmm/io/vhpet.c
333
if (vhpet->timer[n].callout_expire < now) {
usr/src/uts/intel/io/vmm/io/vhpet.c
334
vhpet_timer_interrupt(vhpet, n);
usr/src/uts/intel/io/vmm/io/vhpet.c
336
vhpet->timer[n].callout_expire = 0;
usr/src/uts/intel/io/vmm/io/vhpet.c
340
vhpet_start_timer(struct vhpet *vhpet, int n, uint32_t counter, hrtime_t now)
usr/src/uts/intel/io/vmm/io/vhpet.c
342
struct vhpet_timer *timer = &vhpet->timer[n];
usr/src/uts/intel/io/vmm/io/vhpet.c
344
ASSERT(VHPET_LOCKED(vhpet));
usr/src/uts/intel/io/vmm/io/vhpet.c
347
vhpet_adjust_compval(vhpet, n, counter);
usr/src/uts/intel/io/vmm/io/vhpet.c
365
vhpet_start_counting(struct vhpet *vhpet)
usr/src/uts/intel/io/vmm/io/vhpet.c
369
vhpet->base_time = gethrtime();
usr/src/uts/intel/io/vmm/io/vhpet.c
375
vhpet_start_timer(vhpet, i, vhpet->base_count,
usr/src/uts/intel/io/vmm/io/vhpet.c
376
vhpet->base_time);
usr/src/uts/intel/io/vmm/io/vhpet.c
381
vhpet_stop_counting(struct vhpet *vhpet, uint32_t counter, hrtime_t now)
usr/src/uts/intel/io/vmm/io/vhpet.c
385
vhpet->base_count = counter;
usr/src/uts/intel/io/vmm/io/vhpet.c
387
vhpet_stop_timer(vhpet, i, now);
usr/src/uts/intel/io/vmm/io/vhpet.c
399
vhpet_timer_update_config(struct vhpet *vhpet, int n, uint64_t data,
usr/src/uts/intel/io/vmm/io/vhpet.c
407
if (vhpet_timer_msi_enabled(vhpet, n) ||
usr/src/uts/intel/io/vmm/io/vhpet.c
408
vhpet_timer_edge_trig(vhpet, n)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
409
if (vhpet->isr & (1 << n))
usr/src/uts/intel/io/vmm/io/vhpet.c
412
old_pin = vhpet_timer_ioapic_pin(vhpet, n);
usr/src/uts/intel/io/vmm/io/vhpet.c
413
oldval = vhpet->timer[n].cap_config;
usr/src/uts/intel/io/vmm/io/vhpet.c
423
vhpet->timer[n].cap_config = newval;
usr/src/uts/intel/io/vmm/io/vhpet.c
430
allowed_irqs = vhpet->timer[n].cap_config >> 32;
usr/src/uts/intel/io/vmm/io/vhpet.c
431
new_pin = vhpet_timer_ioapic_pin(vhpet, n);
usr/src/uts/intel/io/vmm/io/vhpet.c
435
vhpet->timer[n].cap_config &= ~HPET_TCNF_INT_ROUTE;
usr/src/uts/intel/io/vmm/io/vhpet.c
438
if (!vhpet_periodic_timer(vhpet, n))
usr/src/uts/intel/io/vmm/io/vhpet.c
439
vhpet->timer[n].comprate = 0;
usr/src/uts/intel/io/vmm/io/vhpet.c
450
if (vhpet->isr & (1 << n)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
453
if (!vhpet_timer_interrupt_enabled(vhpet, n))
usr/src/uts/intel/io/vmm/io/vhpet.c
455
else if (vhpet_timer_msi_enabled(vhpet, n))
usr/src/uts/intel/io/vmm/io/vhpet.c
457
else if (vhpet_timer_edge_trig(vhpet, n))
usr/src/uts/intel/io/vmm/io/vhpet.c
459
else if (vhpet_timer_ioapic_pin(vhpet, n) != old_pin)
usr/src/uts/intel/io/vmm/io/vhpet.c
465
(void) vioapic_deassert_irq(vhpet->vm, old_pin);
usr/src/uts/intel/io/vmm/io/vhpet.c
466
vhpet->isr &= ~(1 << n);
usr/src/uts/intel/io/vmm/io/vhpet.c
475
struct vhpet *vhpet;
usr/src/uts/intel/io/vmm/io/vhpet.c
481
vhpet = vm_hpet(vm);
usr/src/uts/intel/io/vmm/io/vhpet.c
484
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
517
counter = vhpet_counter(vhpet, &now);
usr/src/uts/intel/io/vmm/io/vhpet.c
518
oldval = vhpet->config;
usr/src/uts/intel/io/vmm/io/vhpet.c
519
update_register(&vhpet->config, data, mask);
usr/src/uts/intel/io/vmm/io/vhpet.c
525
vhpet->config &= ~HPET_CNF_LEG_RT;
usr/src/uts/intel/io/vmm/io/vhpet.c
527
if ((oldval ^ vhpet->config) & HPET_CNF_ENABLE) {
usr/src/uts/intel/io/vmm/io/vhpet.c
528
if (vhpet_counter_enabled(vhpet)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
529
vhpet_start_counting(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
531
vhpet_stop_counting(vhpet, counter, now);
usr/src/uts/intel/io/vmm/io/vhpet.c
538
isr_clear_mask = vhpet->isr & data;
usr/src/uts/intel/io/vmm/io/vhpet.c
541
vhpet_timer_clear_isr(vhpet, i);
usr/src/uts/intel/io/vmm/io/vhpet.c
549
val64 = vhpet_counter(vhpet, NULL);
usr/src/uts/intel/io/vmm/io/vhpet.c
551
vhpet->base_count = val64;
usr/src/uts/intel/io/vmm/io/vhpet.c
552
if (vhpet_counter_enabled(vhpet))
usr/src/uts/intel/io/vmm/io/vhpet.c
553
vhpet_start_counting(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
560
vhpet_timer_update_config(vhpet, i, data, mask);
usr/src/uts/intel/io/vmm/io/vhpet.c
566
old_compval = vhpet->timer[i].compval;
usr/src/uts/intel/io/vmm/io/vhpet.c
567
old_comprate = vhpet->timer[i].comprate;
usr/src/uts/intel/io/vmm/io/vhpet.c
568
if (vhpet_periodic_timer(vhpet, i)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
575
val64 = vhpet->timer[i].comprate;
usr/src/uts/intel/io/vmm/io/vhpet.c
577
vhpet->timer[i].comprate = val64;
usr/src/uts/intel/io/vmm/io/vhpet.c
578
if ((vhpet->timer[i].cap_config &
usr/src/uts/intel/io/vmm/io/vhpet.c
580
vhpet->timer[i].compval = val64;
usr/src/uts/intel/io/vmm/io/vhpet.c
583
KASSERT(vhpet->timer[i].comprate == 0,
usr/src/uts/intel/io/vmm/io/vhpet.c
585
"rate %u", i, vhpet->timer[i].comprate));
usr/src/uts/intel/io/vmm/io/vhpet.c
586
val64 = vhpet->timer[i].compval;
usr/src/uts/intel/io/vmm/io/vhpet.c
588
vhpet->timer[i].compval = val64;
usr/src/uts/intel/io/vmm/io/vhpet.c
590
vhpet->timer[i].cap_config &= ~HPET_TCNF_VAL_SET;
usr/src/uts/intel/io/vmm/io/vhpet.c
592
if (vhpet->timer[i].compval != old_compval ||
usr/src/uts/intel/io/vmm/io/vhpet.c
593
vhpet->timer[i].comprate != old_comprate) {
usr/src/uts/intel/io/vmm/io/vhpet.c
594
if (vhpet_counter_enabled(vhpet)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
595
counter = vhpet_counter(vhpet, &now);
usr/src/uts/intel/io/vmm/io/vhpet.c
596
vhpet_start_timer(vhpet, i, counter,
usr/src/uts/intel/io/vmm/io/vhpet.c
605
update_register(&vhpet->timer[i].msireg, data, mask);
usr/src/uts/intel/io/vmm/io/vhpet.c
610
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
619
struct vhpet *vhpet;
usr/src/uts/intel/io/vmm/io/vhpet.c
622
vhpet = vm_hpet(vm);
usr/src/uts/intel/io/vmm/io/vhpet.c
625
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
645
data = vhpet->config;
usr/src/uts/intel/io/vmm/io/vhpet.c
650
data = vhpet->isr;
usr/src/uts/intel/io/vmm/io/vhpet.c
655
data = vhpet_counter(vhpet, NULL);
usr/src/uts/intel/io/vmm/io/vhpet.c
662
data = vhpet->timer[i].cap_config;
usr/src/uts/intel/io/vmm/io/vhpet.c
668
data = vhpet->timer[i].compval;
usr/src/uts/intel/io/vmm/io/vhpet.c
674
data = vhpet->timer[i].msireg;
usr/src/uts/intel/io/vmm/io/vhpet.c
682
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
692
struct vhpet *
usr/src/uts/intel/io/vmm/io/vhpet.c
696
struct vhpet *vhpet;
usr/src/uts/intel/io/vmm/io/vhpet.c
700
vhpet = kmem_zalloc(sizeof (struct vhpet), KM_SLEEP);
usr/src/uts/intel/io/vmm/io/vhpet.c
701
vhpet->vm = vm;
usr/src/uts/intel/io/vmm/io/vhpet.c
702
mutex_init(&vhpet->lock, NULL, MUTEX_ADAPTIVE, NULL);
usr/src/uts/intel/io/vmm/io/vhpet.c
716
vhpet->timer[i].cap_config = allowed_irqs << 32;
usr/src/uts/intel/io/vmm/io/vhpet.c
717
vhpet->timer[i].cap_config |= HPET_TCAP_PER_INT;
usr/src/uts/intel/io/vmm/io/vhpet.c
718
vhpet->timer[i].cap_config |= HPET_TCAP_FSB_INT_DEL;
usr/src/uts/intel/io/vmm/io/vhpet.c
720
vhpet->timer[i].compval = 0xffffffff;
usr/src/uts/intel/io/vmm/io/vhpet.c
721
callout_init(&vhpet->timer[i].callout, 1);
usr/src/uts/intel/io/vmm/io/vhpet.c
723
arg = &vhpet->timer[i].arg;
usr/src/uts/intel/io/vmm/io/vhpet.c
724
arg->vhpet = vhpet;
usr/src/uts/intel/io/vmm/io/vhpet.c
728
return (vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
732
vhpet_cleanup(struct vhpet *vhpet)
usr/src/uts/intel/io/vmm/io/vhpet.c
737
callout_drain(&vhpet->timer[i].callout);
usr/src/uts/intel/io/vmm/io/vhpet.c
739
mutex_destroy(&vhpet->lock);
usr/src/uts/intel/io/vmm/io/vhpet.c
740
kmem_free(vhpet, sizeof (*vhpet));
usr/src/uts/intel/io/vmm/io/vhpet.c
751
vhpet_localize_resources(struct vhpet *vhpet)
usr/src/uts/intel/io/vmm/io/vhpet.c
754
vmm_glue_callout_localize(&vhpet->timer[i].callout);
usr/src/uts/intel/io/vmm/io/vhpet.c
759
vhpet_pause(struct vhpet *vhpet)
usr/src/uts/intel/io/vmm/io/vhpet.c
761
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
763
struct vhpet_timer *timer = &vhpet->timer[i];
usr/src/uts/intel/io/vmm/io/vhpet.c
767
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
771
vhpet_resume(struct vhpet *vhpet)
usr/src/uts/intel/io/vmm/io/vhpet.c
773
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
775
struct vhpet_timer *timer = &vhpet->timer[i];
usr/src/uts/intel/io/vmm/io/vhpet.c
783
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
793
struct vhpet *vhpet = datap;
usr/src/uts/intel/io/vmm/io/vhpet.c
796
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
797
out->vh_config = vhpet->config;
usr/src/uts/intel/io/vmm/io/vhpet.c
798
out->vh_isr = vhpet->isr;
usr/src/uts/intel/io/vmm/io/vhpet.c
799
out->vh_count_base = vhpet->base_count;
usr/src/uts/intel/io/vmm/io/vhpet.c
800
out->vh_time_base = vm_normalize_hrtime(vhpet->vm, vhpet->base_time);
usr/src/uts/intel/io/vmm/io/vhpet.c
802
const struct vhpet_timer *timer = &vhpet->timer[i];
usr/src/uts/intel/io/vmm/io/vhpet.c
81
struct vhpet *vhpet;
usr/src/uts/intel/io/vmm/io/vhpet.c
811
vm_normalize_hrtime(vhpet->vm,
usr/src/uts/intel/io/vmm/io/vhpet.c
817
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
908
struct vhpet *vhpet = datap;
usr/src/uts/intel/io/vmm/io/vhpet.c
910
if (vhpet_data_validate(req, vhpet->vm) != VVE_OK) {
usr/src/uts/intel/io/vmm/io/vhpet.c
915
VHPET_LOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.c
916
vhpet->config = src->vh_config;
usr/src/uts/intel/io/vmm/io/vhpet.c
917
vhpet->isr = src->vh_isr;
usr/src/uts/intel/io/vmm/io/vhpet.c
918
vhpet->base_count = src->vh_count_base;
usr/src/uts/intel/io/vmm/io/vhpet.c
919
vhpet->base_time = vm_denormalize_hrtime(vhpet->vm, src->vh_time_base);
usr/src/uts/intel/io/vmm/io/vhpet.c
922
struct vhpet_timer *timer = &vhpet->timer[i];
usr/src/uts/intel/io/vmm/io/vhpet.c
943
timer->callout_expire = vm_denormalize_hrtime(vhpet->vm,
usr/src/uts/intel/io/vmm/io/vhpet.c
946
if (!vm_is_paused(vhpet->vm)) {
usr/src/uts/intel/io/vmm/io/vhpet.c
955
VHPET_UNLOCK(vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.h
53
struct vhpet *vhpet_init(struct vm *vm);
usr/src/uts/intel/io/vmm/io/vhpet.h
54
void vhpet_cleanup(struct vhpet *vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.h
61
void vhpet_localize_resources(struct vhpet *vhpet);
usr/src/uts/intel/io/vmm/io/vhpet.h
62
void vhpet_pause(struct vhpet *);
usr/src/uts/intel/io/vmm/io/vhpet.h
63
void vhpet_resume(struct vhpet *);
usr/src/uts/intel/io/vmm/sys/vmm_kernel.h
208
struct vhpet *vm_hpet(struct vm *vm);
usr/src/uts/intel/io/vmm/sys/vmm_kernel.h
64
struct vhpet;
usr/src/uts/intel/io/vmm/vmm.c
216
struct vhpet *vhpet; /* (i) virtual HPET */
usr/src/uts/intel/io/vmm/vmm.c
2334
vhpet_localize_resources(vm->vhpet);
usr/src/uts/intel/io/vmm/vmm.c
3261
struct vhpet *
usr/src/uts/intel/io/vmm/vmm.c
3265
return (vm->vhpet);
usr/src/uts/intel/io/vmm/vmm.c
4071
return (vm->vhpet);
usr/src/uts/intel/io/vmm/vmm.c
557
vm->vhpet = vhpet_init(vm);
usr/src/uts/intel/io/vmm/vmm.c
716
vhpet_cleanup(vm->vhpet);
usr/src/uts/intel/io/vmm/vmm.c
801
vhpet_pause(vm->vhpet);
usr/src/uts/intel/io/vmm/vmm.c
818
vhpet_resume(vm->vhpet);