sys/amd64/include/vmm.h
150
struct vrtc *vrtc; /* (o) virtual RTC */ \
sys/amd64/include/vmm.h
287
struct vrtc *vm_rtc(struct vm *vm);
sys/amd64/vmm/io/vrtc.c
100
#define rtc_halted(vrtc) ((vrtc->rtcdev.reg_b & RTCSB_HALT) != 0)
sys/amd64/vmm/io/vrtc.c
1006
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
1007
vrtc->base_rtctime = VRTC_BROKEN_TIME;
sys/amd64/vmm/io/vrtc.c
1008
vrtc_time_update(vrtc, curtime, sbinuptime());
sys/amd64/vmm/io/vrtc.c
1009
secs_to_rtc(curtime, vrtc, 0);
sys/amd64/vmm/io/vrtc.c
101
#define aintr_enabled(vrtc) (((vrtc)->rtcdev.reg_b & RTCSB_AINTR) != 0)
sys/amd64/vmm/io/vrtc.c
1010
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
1012
return (vrtc);
sys/amd64/vmm/io/vrtc.c
1016
vrtc_cleanup(struct vrtc *vrtc)
sys/amd64/vmm/io/vrtc.c
1019
callout_drain(&vrtc->callout);
sys/amd64/vmm/io/vrtc.c
102
#define pintr_enabled(vrtc) (((vrtc)->rtcdev.reg_b & RTCSB_PINTR) != 0)
sys/amd64/vmm/io/vrtc.c
1020
mtx_destroy(&vrtc->mtx);
sys/amd64/vmm/io/vrtc.c
1021
free(vrtc, M_VRTC);
sys/amd64/vmm/io/vrtc.c
1026
vrtc_snapshot(struct vrtc *vrtc, struct vm_snapshot_meta *meta)
sys/amd64/vmm/io/vrtc.c
103
#define uintr_enabled(vrtc) (((vrtc)->rtcdev.reg_b & RTCSB_UINTR) != 0)
sys/amd64/vmm/io/vrtc.c
1030
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
1032
SNAPSHOT_VAR_OR_LEAVE(vrtc->addr, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1034
vrtc->base_uptime = sbinuptime();
sys/amd64/vmm/io/vrtc.c
1035
SNAPSHOT_VAR_OR_LEAVE(vrtc->base_rtctime, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1037
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.sec, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1038
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.alarm_sec, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1039
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.min, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1040
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.alarm_min, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1041
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.hour, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1042
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.alarm_hour, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1043
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.day_of_week, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1044
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.day_of_month, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1045
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.month, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1046
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.year, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1047
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_a, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1048
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_b, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1049
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_c, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1050
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_d, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1051
SNAPSHOT_BUF_OR_LEAVE(vrtc->rtcdev.nvram, sizeof(vrtc->rtcdev.nvram),
sys/amd64/vmm/io/vrtc.c
1053
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.century, meta, ret, done);
sys/amd64/vmm/io/vrtc.c
1054
SNAPSHOT_BUF_OR_LEAVE(vrtc->rtcdev.nvram2, sizeof(vrtc->rtcdev.nvram2),
sys/amd64/vmm/io/vrtc.c
1057
vrtc_callout_reset(vrtc, vrtc_freq(vrtc));
sys/amd64/vmm/io/vrtc.c
1059
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
106
static void vrtc_set_reg_c(struct vrtc *vrtc, uint8_t newval);
sys/amd64/vmm/io/vrtc.c
111
SYSCTL_NODE(_hw_vmm, OID_AUTO, vrtc, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL,
sys/amd64/vmm/io/vrtc.c
128
update_enabled(struct vrtc *vrtc)
sys/amd64/vmm/io/vrtc.c
136
if (!divider_enabled(vrtc->rtcdev.reg_a))
sys/amd64/vmm/io/vrtc.c
139
if (rtc_halted(vrtc))
sys/amd64/vmm/io/vrtc.c
142
if (vrtc->base_rtctime == VRTC_BROKEN_TIME)
sys/amd64/vmm/io/vrtc.c
149
vrtc_curtime(struct vrtc *vrtc, sbintime_t *basetime)
sys/amd64/vmm/io/vrtc.c
154
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
156
t = vrtc->base_rtctime;
sys/amd64/vmm/io/vrtc.c
157
*basetime = vrtc->base_uptime;
sys/amd64/vmm/io/vrtc.c
158
if (update_enabled(vrtc)) {
sys/amd64/vmm/io/vrtc.c
160
delta = now - vrtc->base_uptime;
sys/amd64/vmm/io/vrtc.c
162
"%#lx to %#lx", vrtc->base_uptime, now));
sys/amd64/vmm/io/vrtc.c
181
secs_to_rtc(time_t rtctime, struct vrtc *vrtc, int force_update)
sys/amd64/vmm/io/vrtc.c
188
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
201
if (rtc_halted(vrtc) && !force_update)
sys/amd64/vmm/io/vrtc.c
223
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
282
rtc_to_secs(struct vrtc *vrtc)
sys/amd64/vmm/io/vrtc.c
288
struct vm *vm = vrtc->vm;
sys/amd64/vmm/io/vrtc.c
292
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
294
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
396
VM_CTR0(vrtc->vm, "Invalid RTC date/time programming detected");
sys/amd64/vmm/io/vrtc.c
401
vrtc_time_update(struct vrtc *vrtc, time_t newtime, sbintime_t newbase)
sys/amd64/vmm/io/vrtc.c
407
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
409
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
414
oldtime = vrtc->base_rtctime;
sys/amd64/vmm/io/vrtc.c
415
VM_CTR2(vrtc->vm, "Updating RTC secs from %#lx to %#lx",
sys/amd64/vmm/io/vrtc.c
418
VM_CTR2(vrtc->vm, "Updating RTC base uptime from %#lx to %#lx",
sys/amd64/vmm/io/vrtc.c
419
vrtc->base_uptime, newbase);
sys/amd64/vmm/io/vrtc.c
420
vrtc->base_uptime = newbase;
sys/amd64/vmm/io/vrtc.c
431
vrtc->base_rtctime = VRTC_BROKEN_TIME;
sys/amd64/vmm/io/vrtc.c
438
if (rtc_halted(vrtc)) {
sys/amd64/vmm/io/vrtc.c
439
VM_CTR0(vrtc->vm, "RTC update halted by guest");
sys/amd64/vmm/io/vrtc.c
451
if (aintr_enabled(vrtc) && oldtime != VRTC_BROKEN_TIME)
sys/amd64/vmm/io/vrtc.c
452
vrtc->base_rtctime++;
sys/amd64/vmm/io/vrtc.c
454
vrtc->base_rtctime = newtime;
sys/amd64/vmm/io/vrtc.c
456
if (aintr_enabled(vrtc)) {
sys/amd64/vmm/io/vrtc.c
461
secs_to_rtc(vrtc->base_rtctime, vrtc, 0);
sys/amd64/vmm/io/vrtc.c
466
vrtc_set_reg_c(vrtc, rtc->reg_c | RTCIR_ALARM);
sys/amd64/vmm/io/vrtc.c
469
} while (vrtc->base_rtctime != newtime);
sys/amd64/vmm/io/vrtc.c
471
if (uintr_enabled(vrtc))
sys/amd64/vmm/io/vrtc.c
472
vrtc_set_reg_c(vrtc, rtc->reg_c | RTCIR_UPDATE);
sys/amd64/vmm/io/vrtc.c
478
vrtc_freq(struct vrtc *vrtc)
sys/amd64/vmm/io/vrtc.c
501
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
510
if (pintr_enabled(vrtc) && divider_enabled(vrtc->rtcdev.reg_a)) {
sys/amd64/vmm/io/vrtc.c
511
ratesel = vrtc->rtcdev.reg_a & 0xf;
sys/amd64/vmm/io/vrtc.c
513
} else if (aintr_enabled(vrtc) && update_enabled(vrtc)) {
sys/amd64/vmm/io/vrtc.c
515
} else if (uintr_enabled(vrtc) && update_enabled(vrtc)) {
sys/amd64/vmm/io/vrtc.c
523
vrtc_callout_reset(struct vrtc *vrtc, sbintime_t freqsbt)
sys/amd64/vmm/io/vrtc.c
526
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
529
if (callout_active(&vrtc->callout)) {
sys/amd64/vmm/io/vrtc.c
530
VM_CTR0(vrtc->vm, "RTC callout stopped");
sys/amd64/vmm/io/vrtc.c
531
callout_stop(&vrtc->callout);
sys/amd64/vmm/io/vrtc.c
535
VM_CTR1(vrtc->vm, "RTC callout frequency %d hz", SBT_1S / freqsbt);
sys/amd64/vmm/io/vrtc.c
536
callout_reset_sbt(&vrtc->callout, freqsbt, 0, vrtc_callout_handler,
sys/amd64/vmm/io/vrtc.c
537
vrtc, 0);
sys/amd64/vmm/io/vrtc.c
543
struct vrtc *vrtc = arg;
sys/amd64/vmm/io/vrtc.c
548
VM_CTR0(vrtc->vm, "vrtc callout fired");
sys/amd64/vmm/io/vrtc.c
550
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
551
if (callout_pending(&vrtc->callout)) /* callout was reset */
sys/amd64/vmm/io/vrtc.c
554
if (!callout_active(&vrtc->callout)) /* callout was stopped */
sys/amd64/vmm/io/vrtc.c
557
callout_deactivate(&vrtc->callout);
sys/amd64/vmm/io/vrtc.c
559
KASSERT((vrtc->rtcdev.reg_b & RTCSB_ALL_INTRS) != 0,
sys/amd64/vmm/io/vrtc.c
562
if (pintr_enabled(vrtc))
sys/amd64/vmm/io/vrtc.c
563
vrtc_set_reg_c(vrtc, vrtc->rtcdev.reg_c | RTCIR_PERIOD);
sys/amd64/vmm/io/vrtc.c
565
if (aintr_enabled(vrtc) || uintr_enabled(vrtc)) {
sys/amd64/vmm/io/vrtc.c
566
rtctime = vrtc_curtime(vrtc, &basetime);
sys/amd64/vmm/io/vrtc.c
567
error = vrtc_time_update(vrtc, rtctime, basetime);
sys/amd64/vmm/io/vrtc.c
572
freqsbt = vrtc_freq(vrtc);
sys/amd64/vmm/io/vrtc.c
574
vrtc_callout_reset(vrtc, freqsbt);
sys/amd64/vmm/io/vrtc.c
576
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
580
vrtc_callout_check(struct vrtc *vrtc, sbintime_t freq)
sys/amd64/vmm/io/vrtc.c
584
active = callout_active(&vrtc->callout) ? 1 : 0;
sys/amd64/vmm/io/vrtc.c
591
vrtc_set_reg_c(struct vrtc *vrtc, uint8_t newval)
sys/amd64/vmm/io/vrtc.c
597
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
599
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
603
if ((aintr_enabled(vrtc) && (newval & RTCIR_ALARM) != 0) ||
sys/amd64/vmm/io/vrtc.c
604
(pintr_enabled(vrtc) && (newval & RTCIR_PERIOD) != 0) ||
sys/amd64/vmm/io/vrtc.c
605
(uintr_enabled(vrtc) && (newval & RTCIR_UPDATE) != 0)) {
sys/amd64/vmm/io/vrtc.c
615
VM_CTR2(vrtc->vm, "RTC reg_c changed from %#x to %#x",
sys/amd64/vmm/io/vrtc.c
620
VM_CTR1(vrtc->vm, "RTC irq %d asserted", RTC_IRQ);
sys/amd64/vmm/io/vrtc.c
621
vatpic_pulse_irq(vrtc->vm, RTC_IRQ);
sys/amd64/vmm/io/vrtc.c
622
vioapic_pulse_irq(vrtc->vm, RTC_IRQ);
sys/amd64/vmm/io/vrtc.c
624
VM_CTR1(vrtc->vm, "RTC irq %d deasserted", RTC_IRQ);
sys/amd64/vmm/io/vrtc.c
629
vrtc_set_reg_b(struct vrtc *vrtc, uint8_t newval)
sys/amd64/vmm/io/vrtc.c
637
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
639
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
641
oldfreq = vrtc_freq(vrtc);
sys/amd64/vmm/io/vrtc.c
646
VM_CTR2(vrtc->vm, "RTC reg_b changed from %#x to %#x",
sys/amd64/vmm/io/vrtc.c
652
rtctime = rtc_to_secs(vrtc);
sys/amd64/vmm/io/vrtc.c
659
curtime = vrtc_curtime(vrtc, &basetime);
sys/amd64/vmm/io/vrtc.c
660
KASSERT(curtime == vrtc->base_rtctime, ("%s: mismatch "
sys/amd64/vmm/io/vrtc.c
662
__func__, vrtc->base_rtctime, curtime));
sys/amd64/vmm/io/vrtc.c
669
secs_to_rtc(curtime, vrtc, 1);
sys/amd64/vmm/io/vrtc.c
678
error = vrtc_time_update(vrtc, rtctime, basetime);
sys/amd64/vmm/io/vrtc.c
686
vrtc_set_reg_c(vrtc, vrtc->rtcdev.reg_c);
sys/amd64/vmm/io/vrtc.c
691
newfreq = vrtc_freq(vrtc);
sys/amd64/vmm/io/vrtc.c
693
vrtc_callout_reset(vrtc, newfreq);
sys/amd64/vmm/io/vrtc.c
695
vrtc_callout_check(vrtc, newfreq);
sys/amd64/vmm/io/vrtc.c
705
vrtc_set_reg_a(struct vrtc *vrtc, uint8_t newval)
sys/amd64/vmm/io/vrtc.c
710
KASSERT(VRTC_LOCKED(vrtc), ("%s: vrtc not locked", __func__));
sys/amd64/vmm/io/vrtc.c
713
oldval = vrtc->rtcdev.reg_a;
sys/amd64/vmm/io/vrtc.c
714
oldfreq = vrtc_freq(vrtc);
sys/amd64/vmm/io/vrtc.c
717
VM_CTR2(vrtc->vm, "RTC divider held in reset at %#lx/%#lx",
sys/amd64/vmm/io/vrtc.c
718
vrtc->base_rtctime, vrtc->base_uptime);
sys/amd64/vmm/io/vrtc.c
726
vrtc->base_uptime = sbinuptime();
sys/amd64/vmm/io/vrtc.c
727
VM_CTR2(vrtc->vm, "RTC divider out of reset at %#lx/%#lx",
sys/amd64/vmm/io/vrtc.c
728
vrtc->base_rtctime, vrtc->base_uptime);
sys/amd64/vmm/io/vrtc.c
733
vrtc->rtcdev.reg_a = newval;
sys/amd64/vmm/io/vrtc.c
736
VM_CTR2(vrtc->vm, "RTC reg_a changed from %#x to %#x",
sys/amd64/vmm/io/vrtc.c
743
newfreq = vrtc_freq(vrtc);
sys/amd64/vmm/io/vrtc.c
745
vrtc_callout_reset(vrtc, newfreq);
sys/amd64/vmm/io/vrtc.c
747
vrtc_callout_check(vrtc, newfreq);
sys/amd64/vmm/io/vrtc.c
753
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
756
vrtc = vm_rtc(vm);
sys/amd64/vmm/io/vrtc.c
757
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
758
error = vrtc_time_update(vrtc, secs, sbinuptime());
sys/amd64/vmm/io/vrtc.c
759
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
762
VM_CTR2(vrtc->vm, "Error %d setting RTC time to %#lx", error,
sys/amd64/vmm/io/vrtc.c
765
VM_CTR1(vrtc->vm, "RTC time set to %#lx", secs);
sys/amd64/vmm/io/vrtc.c
774
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
778
vrtc = vm_rtc(vm);
sys/amd64/vmm/io/vrtc.c
779
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
780
t = vrtc_curtime(vrtc, &basetime);
sys/amd64/vmm/io/vrtc.c
781
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
789
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
792
vrtc = vm_rtc(vm);
sys/amd64/vmm/io/vrtc.c
799
VM_CTR1(vrtc->vm, "RTC nvram write to invalid offset %d",
sys/amd64/vmm/io/vrtc.c
804
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
805
ptr = (uint8_t *)(&vrtc->rtcdev);
sys/amd64/vmm/io/vrtc.c
807
VM_CTR2(vrtc->vm, "RTC nvram write %#x to offset %#x", value, offset);
sys/amd64/vmm/io/vrtc.c
808
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
816
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
827
vrtc = vm_rtc(vm);
sys/amd64/vmm/io/vrtc.c
828
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
834
curtime = vrtc_curtime(vrtc, &basetime);
sys/amd64/vmm/io/vrtc.c
835
secs_to_rtc(curtime, vrtc, 0);
sys/amd64/vmm/io/vrtc.c
838
ptr = (uint8_t *)(&vrtc->rtcdev);
sys/amd64/vmm/io/vrtc.c
841
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
848
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
850
vrtc = vm_rtc(vm);
sys/amd64/vmm/io/vrtc.c
86
#define VRTC_LOCK(vrtc) mtx_lock(&((vrtc)->mtx))
sys/amd64/vmm/io/vrtc.c
860
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
861
vrtc->addr = *val & 0x7f;
sys/amd64/vmm/io/vrtc.c
862
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
87
#define VRTC_UNLOCK(vrtc) mtx_unlock(&((vrtc)->mtx))
sys/amd64/vmm/io/vrtc.c
870
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
876
vrtc = vm_rtc(vm);
sys/amd64/vmm/io/vrtc.c
877
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
88
#define VRTC_LOCKED(vrtc) mtx_owned(&((vrtc)->mtx))
sys/amd64/vmm/io/vrtc.c
882
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
883
offset = vrtc->addr;
sys/amd64/vmm/io/vrtc.c
885
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
890
curtime = vrtc_curtime(vrtc, &basetime);
sys/amd64/vmm/io/vrtc.c
891
vrtc_time_update(vrtc, curtime, basetime);
sys/amd64/vmm/io/vrtc.c
901
secs_to_rtc(curtime, vrtc, 0);
sys/amd64/vmm/io/vrtc.c
910
*val = vrtc->rtcdev.reg_c;
sys/amd64/vmm/io/vrtc.c
911
vrtc_set_reg_c(vrtc, 0);
sys/amd64/vmm/io/vrtc.c
921
vrtc_set_reg_a(vrtc, *val);
sys/amd64/vmm/io/vrtc.c
925
error = vrtc_set_reg_b(vrtc, *val);
sys/amd64/vmm/io/vrtc.c
952
if (offset == RTC_CENTURY && !rtc_halted(vrtc)) {
sys/amd64/vmm/io/vrtc.c
953
curtime = rtc_to_secs(vrtc);
sys/amd64/vmm/io/vrtc.c
954
error = vrtc_time_update(vrtc, curtime, sbinuptime());
sys/amd64/vmm/io/vrtc.c
960
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
965
vrtc_reset(struct vrtc *vrtc)
sys/amd64/vmm/io/vrtc.c
969
VRTC_LOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
971
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
972
vrtc_set_reg_b(vrtc, rtc->reg_b & ~(RTCSB_ALL_INTRS | RTCSB_SQWE));
sys/amd64/vmm/io/vrtc.c
973
vrtc_set_reg_c(vrtc, 0);
sys/amd64/vmm/io/vrtc.c
974
KASSERT(!callout_active(&vrtc->callout), ("rtc callout still active"));
sys/amd64/vmm/io/vrtc.c
976
VRTC_UNLOCK(vrtc);
sys/amd64/vmm/io/vrtc.c
979
struct vrtc *
sys/amd64/vmm/io/vrtc.c
982
struct vrtc *vrtc;
sys/amd64/vmm/io/vrtc.c
986
vrtc = malloc(sizeof(struct vrtc), M_VRTC, M_WAITOK | M_ZERO);
sys/amd64/vmm/io/vrtc.c
987
vrtc->vm = vm;
sys/amd64/vmm/io/vrtc.c
988
mtx_init(&vrtc->mtx, "vrtc lock", NULL, MTX_DEF);
sys/amd64/vmm/io/vrtc.c
989
callout_init(&vrtc->callout, 1);
sys/amd64/vmm/io/vrtc.c
992
rtc = &vrtc->rtcdev;
sys/amd64/vmm/io/vrtc.c
999
vrtc->addr = RTC_STATUSD;
sys/amd64/vmm/io/vrtc.h
34
struct vrtc;
sys/amd64/vmm/io/vrtc.h
37
struct vrtc *vrtc_init(struct vm *vm);
sys/amd64/vmm/io/vrtc.h
38
void vrtc_cleanup(struct vrtc *vrtc);
sys/amd64/vmm/io/vrtc.h
39
void vrtc_reset(struct vrtc *vrtc);
sys/amd64/vmm/io/vrtc.h
52
int vrtc_snapshot(struct vrtc *vrtc, struct vm_snapshot_meta *meta);
sys/amd64/vmm/vmm.c
1800
struct vrtc *
sys/amd64/vmm/vmm.c
1804
return (vm->vrtc);
sys/amd64/vmm/vmm.c
322
vm->vrtc = vrtc_init(vm);
sys/amd64/vmm/vmm.c
412
vrtc_cleanup(vm->vrtc);
sys/amd64/vmm/vmm.c
414
vrtc_reset(vm->vrtc);