1 #ifndef KVM__IRQ_H 2 #define KVM__IRQ_H 3 4 #include <stdbool.h> 5 #include <linux/types.h> 6 #include <linux/rbtree.h> 7 #include <linux/list.h> 8 #include <linux/kvm.h> 9 10 #include "kvm/msi.h" 11 12 struct kvm; 13 14 struct msi_routing_ops { 15 int (*update_route)(struct kvm *kvm, struct kvm_irq_routing_entry *); 16 bool (*can_signal_msi)(struct kvm *kvm); 17 int (*signal_msi)(struct kvm *kvm, struct kvm_msi *msi); 18 int (*translate_gsi)(struct kvm *kvm, u32 gsi); 19 }; 20 21 extern struct msi_routing_ops *msi_routing_ops; 22 extern struct kvm_irq_routing *irq_routing; 23 extern int next_gsi; 24 25 int irq__alloc_line(void); 26 int irq__get_nr_allocated_lines(void); 27 28 int irq__init(struct kvm *kvm); 29 int irq__exit(struct kvm *kvm); 30 31 int irq__allocate_routing_entry(void); 32 int irq__add_msix_route(struct kvm *kvm, struct msi_msg *msg, u32 device_id); 33 void irq__update_msix_route(struct kvm *kvm, u32 gsi, struct msi_msg *msg); 34 35 bool irq__can_signal_msi(struct kvm *kvm); 36 int irq__signal_msi(struct kvm *kvm, struct kvm_msi *msi); 37 38 #endif 39