Lines Matching +full:- +full:- +full:disable +full:- +full:kvm
2 * KVM in-kernel PIT (i8254) support
4 * Copyright (c) 2003-2004 Fabrice Bellard
27 #include <linux/kvm.h>
28 #include "qapi/qapi-types-machine.h"
35 #include "hw/qdev-properties-system.h"
36 #include "system/kvm.h"
37 #include "target/i386/kvm/kvm_i386.h"
78 offset -= ts.tv_nsec; in kvm_pit_update_clock_offset()
79 offset -= (int64_t)ts.tv_sec * 1000000000; in kvm_pit_update_clock_offset()
84 s->kernel_clock_offset = clock_offset; in kvm_pit_update_clock_offset()
95 /* No need to re-read the state if VM is stopped. */ in kvm_pit_get()
96 if (s->vm_stopped) { in kvm_pit_get()
102 fprintf(stderr, "KVM_GET_PIT2 failed: %s\n", strerror(-ret)); in kvm_pit_get()
105 pit->channels[0].irq_disabled = kpit.flags & KVM_PIT_FLAGS_HPET_LEGACY; in kvm_pit_get()
108 sc = &pit->channels[i]; in kvm_pit_get()
109 sc->count = kchan->count; in kvm_pit_get()
110 sc->latched_count = kchan->latched_count; in kvm_pit_get()
111 sc->count_latched = kchan->count_latched; in kvm_pit_get()
112 sc->status_latched = kchan->status_latched; in kvm_pit_get()
113 sc->status = kchan->status; in kvm_pit_get()
114 sc->read_state = kchan->read_state; in kvm_pit_get()
115 sc->write_state = kchan->write_state; in kvm_pit_get()
116 sc->write_latch = kchan->write_latch; in kvm_pit_get()
117 sc->rw_mode = kchan->rw_mode; in kvm_pit_get()
118 sc->mode = kchan->mode; in kvm_pit_get()
119 sc->bcd = kchan->bcd; in kvm_pit_get()
120 sc->gate = kchan->gate; in kvm_pit_get()
121 sc->count_load_time = kchan->count_load_time + s->kernel_clock_offset; in kvm_pit_get()
124 sc = &pit->channels[0]; in kvm_pit_get()
125 sc->next_transition_time = in kvm_pit_get()
126 pit_get_next_transition_time(sc, sc->count_load_time); in kvm_pit_get()
138 if (s->vm_stopped) { in kvm_pit_put()
142 kpit.flags = pit->channels[0].irq_disabled ? KVM_PIT_FLAGS_HPET_LEGACY : 0; in kvm_pit_put()
145 sc = &pit->channels[i]; in kvm_pit_put()
146 kchan->count = sc->count; in kvm_pit_put()
147 kchan->latched_count = sc->latched_count; in kvm_pit_put()
148 kchan->count_latched = sc->count_latched; in kvm_pit_put()
149 kchan->status_latched = sc->status_latched; in kvm_pit_put()
150 kchan->status = sc->status; in kvm_pit_put()
151 kchan->read_state = sc->read_state; in kvm_pit_put()
152 kchan->write_state = sc->write_state; in kvm_pit_put()
153 kchan->write_latch = sc->write_latch; in kvm_pit_put()
154 kchan->rw_mode = sc->rw_mode; in kvm_pit_put()
155 kchan->mode = sc->mode; in kvm_pit_put()
156 kchan->bcd = sc->bcd; in kvm_pit_put()
157 kchan->gate = sc->gate; in kvm_pit_put()
158 kchan->count_load_time = sc->count_load_time - s->kernel_clock_offset; in kvm_pit_put()
164 strerror(-ret)); in kvm_pit_put()
173 switch (sc->mode) { in kvm_pit_set_gate()
177 /* XXX: just disable/enable counting */ in kvm_pit_set_gate()
183 if (sc->gate < val) { in kvm_pit_set_gate()
185 sc->count_load_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); in kvm_pit_set_gate()
189 sc->gate = val; in kvm_pit_set_gate()
214 PITChannelState *s = &pit->channels[0]; in kvm_pit_irq_control()
218 s->irq_disabled = !enable; in kvm_pit_irq_control()
231 s->vm_stopped = false; in kvm_pit_vm_state_change()
235 s->vm_stopped = true; in kvm_pit_vm_state_change()
251 error_setg(errp, "In-kernel PIT not available"); in kvm_pit_realizefn()
257 strerror(-ret)); in kvm_pit_realizefn()
260 switch (s->lost_tick_policy) { in kvm_pit_realizefn()
270 "Can't disable in-kernel PIT reinjection: %s", in kvm_pit_realizefn()
271 strerror(-ret)); in kvm_pit_realizefn()
281 memory_region_init_io(&pit->ioports, OBJECT(dev), NULL, NULL, "kvm-pit", 4); in kvm_pit_realizefn()
287 kpc->parent_realize(dev, errp); in kvm_pit_realizefn()
302 &kpc->parent_realize); in kvm_pit_class_init()
303 k->set_channel_gate = kvm_pit_set_gate; in kvm_pit_class_init()
304 k->get_channel_info = kvm_pit_get_channel_info; in kvm_pit_class_init()