Lines Matching refs:kvm

73 static void pit_set_gate(struct kvm *kvm, int channel, u32 val)  in pit_set_gate()  argument
76 &kvm->arch.vpit->pit_state.channels[channel]; in pit_set_gate()
78 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_set_gate()
99 static int pit_get_gate(struct kvm *kvm, int channel) in pit_get_gate() argument
101 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_get_gate()
103 return kvm->arch.vpit->pit_state.channels[channel].gate; in pit_get_gate()
106 static s64 __kpit_elapsed(struct kvm *kvm) in __kpit_elapsed() argument
110 struct kvm_kpit_state *ps = &kvm->arch.vpit->pit_state; in __kpit_elapsed()
130 static s64 kpit_elapsed(struct kvm *kvm, struct kvm_kpit_channel_state *c, in kpit_elapsed() argument
134 return __kpit_elapsed(kvm); in kpit_elapsed()
139 static int pit_get_count(struct kvm *kvm, int channel) in pit_get_count() argument
142 &kvm->arch.vpit->pit_state.channels[channel]; in pit_get_count()
146 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_get_count()
148 t = kpit_elapsed(kvm, c, channel); in pit_get_count()
169 static int pit_get_out(struct kvm *kvm, int channel) in pit_get_out() argument
172 &kvm->arch.vpit->pit_state.channels[channel]; in pit_get_out()
176 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_get_out()
178 t = kpit_elapsed(kvm, c, channel); in pit_get_out()
204 static void pit_latch_count(struct kvm *kvm, int channel) in pit_latch_count() argument
207 &kvm->arch.vpit->pit_state.channels[channel]; in pit_latch_count()
209 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_latch_count()
212 c->latched_count = pit_get_count(kvm, channel); in pit_latch_count()
217 static void pit_latch_status(struct kvm *kvm, int channel) in pit_latch_status() argument
220 &kvm->arch.vpit->pit_state.channels[channel]; in pit_latch_status()
222 WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); in pit_latch_status()
226 c->status = ((pit_get_out(kvm, channel) << 7) | in pit_latch_status()
258 struct kvm_pit *pit = vcpu->kvm->arch.vpit; in __kvm_migrate_pit_timer()
280 struct kvm *kvm = pit->kvm; in pit_do_work() local
298 kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 1, false); in pit_do_work()
299 kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 0, false); in pit_do_work()
310 if (atomic_read(&kvm->arch.vapics_in_nmi_mode) > 0) in pit_do_work()
311 kvm_for_each_vcpu(i, vcpu, kvm) in pit_do_work()
319 struct kvm_pit *pt = ps->kvm->arch.vpit; in pit_timer_fn()
333 static void create_pit_timer(struct kvm *kvm, u32 val, int is_period) in create_pit_timer() argument
335 struct kvm_kpit_state *ps = &kvm->arch.vpit->pit_state; in create_pit_timer()
338 if (!irqchip_in_kernel(kvm) || ps->flags & KVM_PIT_FLAGS_HPET_LEGACY) in create_pit_timer()
352 ps->kvm = ps->pit->kvm; in create_pit_timer()
378 static void pit_load_count(struct kvm *kvm, int channel, u32 val) in pit_load_count() argument
380 struct kvm_kpit_state *ps = &kvm->arch.vpit->pit_state; in pit_load_count()
407 create_pit_timer(kvm, val, 0); in pit_load_count()
411 create_pit_timer(kvm, val, 1); in pit_load_count()
414 destroy_pit_timer(kvm->arch.vpit); in pit_load_count()
418 void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val, int hpet_legacy_start) in kvm_pit_load_count() argument
423 saved_mode = kvm->arch.vpit->pit_state.channels[0].mode; in kvm_pit_load_count()
424 kvm->arch.vpit->pit_state.channels[0].mode = 0xff; /* disable timer */ in kvm_pit_load_count()
425 pit_load_count(kvm, channel, val); in kvm_pit_load_count()
426 kvm->arch.vpit->pit_state.channels[0].mode = saved_mode; in kvm_pit_load_count()
428 pit_load_count(kvm, channel, val); in kvm_pit_load_count()
454 struct kvm *kvm = pit->kvm; in pit_ioport_write() local
478 pit_latch_count(kvm, channel); in pit_ioport_write()
480 pit_latch_status(kvm, channel); in pit_ioport_write()
488 pit_latch_count(kvm, channel); in pit_ioport_write()
505 pit_load_count(kvm, addr, val); in pit_ioport_write()
508 pit_load_count(kvm, addr, val << 8); in pit_ioport_write()
515 pit_load_count(kvm, addr, s->write_latch | (val << 8)); in pit_ioport_write()
531 struct kvm *kvm = pit->kvm; in pit_ioport_read() local
568 count = pit_get_count(kvm, addr); in pit_ioport_read()
572 count = pit_get_count(kvm, addr); in pit_ioport_read()
576 count = pit_get_count(kvm, addr); in pit_ioport_read()
581 count = pit_get_count(kvm, addr); in pit_ioport_read()
602 struct kvm *kvm = pit->kvm; in speaker_ioport_write() local
609 pit_set_gate(kvm, 2, val & 1); in speaker_ioport_write()
620 struct kvm *kvm = pit->kvm; in speaker_ioport_read() local
630 ret = ((pit_state->speaker_data_on << 1) | pit_get_gate(kvm, 2) | in speaker_ioport_read()
631 (pit_get_out(kvm, 2) << 5) | (refresh_clock << 4)); in speaker_ioport_read()
650 pit_load_count(pit->kvm, i, 0); in kvm_pit_reset()
679 struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags) in kvm_create_pit() argument
691 pit->irq_source_id = kvm_request_irq_source_id(kvm); in kvm_create_pit()
710 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
716 kvm->arch.vpit = pit; in kvm_create_pit()
717 pit->kvm = kvm; in kvm_create_pit()
724 kvm_register_irq_ack_notifier(kvm, &pit_state->irq_ack_notifier); in kvm_create_pit()
731 kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
734 ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, KVM_PIT_BASE_ADDRESS, in kvm_create_pit()
741 ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, in kvm_create_pit()
751 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &pit->dev); in kvm_create_pit()
754 kvm_unregister_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
755 kvm_unregister_irq_ack_notifier(kvm, &pit_state->irq_ack_notifier); in kvm_create_pit()
756 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
762 void kvm_free_pit(struct kvm *kvm) in kvm_free_pit() argument
766 if (kvm->arch.vpit) { in kvm_free_pit()
767 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &kvm->arch.vpit->dev); in kvm_free_pit()
768 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, in kvm_free_pit()
769 &kvm->arch.vpit->speaker_dev); in kvm_free_pit()
770 kvm_unregister_irq_mask_notifier(kvm, 0, in kvm_free_pit()
771 &kvm->arch.vpit->mask_notifier); in kvm_free_pit()
772 kvm_unregister_irq_ack_notifier(kvm, in kvm_free_pit()
773 &kvm->arch.vpit->pit_state.irq_ack_notifier); in kvm_free_pit()
774 mutex_lock(&kvm->arch.vpit->pit_state.lock); in kvm_free_pit()
775 timer = &kvm->arch.vpit->pit_state.timer; in kvm_free_pit()
777 flush_kthread_work(&kvm->arch.vpit->expired); in kvm_free_pit()
778 kthread_stop(kvm->arch.vpit->worker_task); in kvm_free_pit()
779 kvm_free_irq_source_id(kvm, kvm->arch.vpit->irq_source_id); in kvm_free_pit()
780 mutex_unlock(&kvm->arch.vpit->pit_state.lock); in kvm_free_pit()
781 kfree(kvm->arch.vpit); in kvm_free_pit()