Lines Matching defs:kvm

14 #include <kvm/iodev.h>
205 static void aplic_inject_msi(struct kvm *kvm, u32 irq, u32 target)
214 kvm_riscv_aia_inject_msi_by_id(kvm, hart_idx, guest_idx, eiid);
217 static void aplic_update_irq_range(struct kvm *kvm, u32 first, u32 last)
223 struct aplic *aplic = kvm->arch.aia.aplic_state;
246 aplic_inject_msi(kvm, irq, target);
250 int kvm_riscv_aia_aplic_inject(struct kvm *kvm, u32 source, bool level)
256 struct aplic *aplic = kvm->arch.aia.aplic_state;
305 aplic_inject_msi(kvm, source, target);
362 static int aplic_mmio_read_offset(struct kvm *kvm, gpa_t off, u32 *val32)
365 struct aplic *aplic = kvm->arch.aia.aplic_state;
422 return aplic_mmio_read_offset(vcpu->kvm,
423 addr - vcpu->kvm->arch.aia.aplic_addr,
427 static int aplic_mmio_write_offset(struct kvm *kvm, gpa_t off, u32 val32)
430 struct aplic *aplic = kvm->arch.aia.aplic_state;
473 kvm_riscv_aia_inject_msi_by_id(kvm,
483 aplic_update_irq_range(kvm, 1, aplic->nr_irqs - 1);
494 return aplic_mmio_write_offset(vcpu->kvm,
495 addr - vcpu->kvm->arch.aia.aplic_addr,
504 int kvm_riscv_aia_aplic_set_attr(struct kvm *kvm, unsigned long type, u32 v)
508 if (!kvm->arch.aia.aplic_state)
511 rc = aplic_mmio_write_offset(kvm, type, v);
518 int kvm_riscv_aia_aplic_get_attr(struct kvm *kvm, unsigned long type, u32 *v)
522 if (!kvm->arch.aia.aplic_state)
525 rc = aplic_mmio_read_offset(kvm, type, v);
532 int kvm_riscv_aia_aplic_has_attr(struct kvm *kvm, unsigned long type)
537 if (!kvm->arch.aia.aplic_state)
540 rc = aplic_mmio_read_offset(kvm, type, &val);
547 int kvm_riscv_aia_aplic_init(struct kvm *kvm)
553 if (!kvm->arch.aia.nr_sources)
560 kvm->arch.aia.aplic_state = aplic;
563 aplic->nr_irqs = kvm->arch.aia.nr_sources + 1;
576 mutex_lock(&kvm->slots_lock);
577 ret = kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS,
578 kvm->arch.aia.aplic_addr,
581 mutex_unlock(&kvm->slots_lock);
586 ret = kvm_riscv_setup_default_irq_routing(kvm, aplic->nr_irqs);
593 mutex_lock(&kvm->slots_lock);
594 kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &aplic->iodev);
595 mutex_unlock(&kvm->slots_lock);
599 kvm->arch.aia.aplic_state = NULL;
604 void kvm_riscv_aia_aplic_cleanup(struct kvm *kvm)
606 struct aplic *aplic = kvm->arch.aia.aplic_state;
611 mutex_lock(&kvm->slots_lock);
612 kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &aplic->iodev);
613 mutex_unlock(&kvm->slots_lock);
617 kvm->arch.aia.aplic_state = NULL;