xref: /kvmtool/include/kvm/irq.h (revision f77d646ba01d04be5aad9449ac00719c043fe36e)
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