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