Lines Matching refs:kvm
74 static void pit_set_gate(struct kvm *kvm, int channel, u32 val) in pit_set_gate() argument
77 &kvm->arch.vpit->pit_state.channels[channel]; in pit_set_gate()
79 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_set_gate()
100 static int pit_get_gate(struct kvm *kvm, int channel) in pit_get_gate() argument
102 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_get_gate()
104 return kvm->arch.vpit->pit_state.channels[channel].gate; in pit_get_gate()
107 static s64 __kpit_elapsed(struct kvm *kvm) in __kpit_elapsed() argument
111 struct kvm_kpit_state *ps = &kvm->arch.vpit->pit_state; in __kpit_elapsed()
131 static s64 kpit_elapsed(struct kvm *kvm, struct kvm_kpit_channel_state *c, in kpit_elapsed() argument
135 return __kpit_elapsed(kvm); in kpit_elapsed()
140 static int pit_get_count(struct kvm *kvm, int channel) in pit_get_count() argument
143 &kvm->arch.vpit->pit_state.channels[channel]; in pit_get_count()
147 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_get_count()
149 t = kpit_elapsed(kvm, c, channel); in pit_get_count()
170 static int pit_get_out(struct kvm *kvm, int channel) in pit_get_out() argument
173 &kvm->arch.vpit->pit_state.channels[channel]; in pit_get_out()
177 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_get_out()
179 t = kpit_elapsed(kvm, c, channel); in pit_get_out()
205 static void pit_latch_count(struct kvm *kvm, int channel) in pit_latch_count() argument
208 &kvm->arch.vpit->pit_state.channels[channel]; in pit_latch_count()
210 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_latch_count()
213 c->latched_count = pit_get_count(kvm, channel); in pit_latch_count()
218 static void pit_latch_status(struct kvm *kvm, int channel) in pit_latch_status() argument
221 &kvm->arch.vpit->pit_state.channels[channel]; in pit_latch_status()
223 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_latch_status()
227 c->status = ((pit_get_out(kvm, channel) << 7) | in pit_latch_status()
259 struct kvm_pit *pit = vcpu->kvm->arch.vpit; in __kvm_migrate_pit_timer()
281 struct kvm *kvm = pit->kvm; in pit_do_work() local
299 kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 1, false); in pit_do_work()
300 kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 0, false); in pit_do_work()
311 if (atomic_read(&kvm->arch.vapics_in_nmi_mode) > 0) in pit_do_work()
312 kvm_for_each_vcpu(i, vcpu, kvm) in pit_do_work()
320 struct kvm_pit *pt = ps->kvm->arch.vpit; in pit_timer_fn()
334 static void create_pit_timer(struct kvm *kvm, u32 val, int is_period) in create_pit_timer() argument
336 struct kvm_kpit_state *ps = &kvm->arch.vpit->pit_state; in create_pit_timer()
339 if (!ioapic_in_kernel(kvm) || in create_pit_timer()
354 ps->kvm = ps->pit->kvm; in create_pit_timer()
380 static void pit_load_count(struct kvm *kvm, int channel, u32 val) in pit_load_count() argument
382 struct kvm_kpit_state *ps = &kvm->arch.vpit->pit_state; in pit_load_count()
409 create_pit_timer(kvm, val, 0); in pit_load_count()
413 create_pit_timer(kvm, val, 1); in pit_load_count()
416 destroy_pit_timer(kvm->arch.vpit); in pit_load_count()
420 void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val, int hpet_legacy_start) in kvm_pit_load_count() argument
426 saved_mode = kvm->arch.vpit->pit_state.channels[0].mode; in kvm_pit_load_count()
427 kvm->arch.vpit->pit_state.channels[0].mode = 0xff; /* disable timer */ in kvm_pit_load_count()
428 pit_load_count(kvm, channel, val); in kvm_pit_load_count()
429 kvm->arch.vpit->pit_state.channels[0].mode = saved_mode; in kvm_pit_load_count()
431 pit_load_count(kvm, channel, val); in kvm_pit_load_count()
457 struct kvm *kvm = pit->kvm; in pit_ioport_write() local
481 pit_latch_count(kvm, channel); in pit_ioport_write()
483 pit_latch_status(kvm, channel); in pit_ioport_write()
491 pit_latch_count(kvm, channel); in pit_ioport_write()
508 pit_load_count(kvm, addr, val); in pit_ioport_write()
511 pit_load_count(kvm, addr, val << 8); in pit_ioport_write()
518 pit_load_count(kvm, addr, s->write_latch | (val << 8)); in pit_ioport_write()
534 struct kvm *kvm = pit->kvm; in pit_ioport_read() local
571 count = pit_get_count(kvm, addr); in pit_ioport_read()
575 count = pit_get_count(kvm, addr); in pit_ioport_read()
579 count = pit_get_count(kvm, addr); in pit_ioport_read()
584 count = pit_get_count(kvm, addr); in pit_ioport_read()
605 struct kvm *kvm = pit->kvm; in speaker_ioport_write() local
612 pit_set_gate(kvm, 2, val & 1); in speaker_ioport_write()
623 struct kvm *kvm = pit->kvm; in speaker_ioport_read() local
633 ret = ((pit_state->speaker_data_on << 1) | pit_get_gate(kvm, 2) | in speaker_ioport_read()
634 (pit_get_out(kvm, 2) << 5) | (refresh_clock << 4)); in speaker_ioport_read()
653 pit_load_count(pit->kvm, i, 0); in kvm_pit_reset()
682 struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags) in kvm_create_pit() argument
694 pit->irq_source_id = kvm_request_irq_source_id(kvm); in kvm_create_pit()
713 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
719 kvm->arch.vpit = pit; in kvm_create_pit()
720 pit->kvm = kvm; in kvm_create_pit()
727 kvm_register_irq_ack_notifier(kvm, &pit_state->irq_ack_notifier); in kvm_create_pit()
734 kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
737 ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, KVM_PIT_BASE_ADDRESS, in kvm_create_pit()
744 ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, in kvm_create_pit()
754 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &pit->dev); in kvm_create_pit()
757 kvm_unregister_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
758 kvm_unregister_irq_ack_notifier(kvm, &pit_state->irq_ack_notifier); in kvm_create_pit()
759 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
765 void kvm_free_pit(struct kvm *kvm) in kvm_free_pit() argument
769 if (kvm->arch.vpit) { in kvm_free_pit()
770 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &kvm->arch.vpit->dev); in kvm_free_pit()
771 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, in kvm_free_pit()
772 &kvm->arch.vpit->speaker_dev); in kvm_free_pit()
773 kvm_unregister_irq_mask_notifier(kvm, 0, in kvm_free_pit()
774 &kvm->arch.vpit->mask_notifier); in kvm_free_pit()
775 kvm_unregister_irq_ack_notifier(kvm, in kvm_free_pit()
776 &kvm->arch.vpit->pit_state.irq_ack_notifier); in kvm_free_pit()
777 mutex_lock(&kvm->arch.vpit->pit_state.lock); in kvm_free_pit()
778 timer = &kvm->arch.vpit->pit_state.timer; in kvm_free_pit()
780 flush_kthread_work(&kvm->arch.vpit->expired); in kvm_free_pit()
781 kthread_stop(kvm->arch.vpit->worker_task); in kvm_free_pit()
782 kvm_free_irq_source_id(kvm, kvm->arch.vpit->irq_source_id); in kvm_free_pit()
783 mutex_unlock(&kvm->arch.vpit->pit_state.lock); in kvm_free_pit()
784 kfree(kvm->arch.vpit); in kvm_free_pit()