xref: /kvmtool/x86/include/kvm/interrupt.h (revision af7b08685968ff8f6ffdf5cac1ef067688bce8c6)
1 #ifndef KVM__INTERRUPT_H
2 #define KVM__INTERRUPT_H
3 
4 #include <linux/types.h>
5 #include "kvm/bios.h"
6 #include "kvm/bios-export.h"
7 
8 struct real_intr_desc {
9 	u16 offset;
10 	u16 segment;
11 } __attribute__((packed));
12 
13 #define REAL_SEGMENT_SHIFT	4
14 #define REAL_SEGMENT(addr)	((addr) >> REAL_SEGMENT_SHIFT)
15 #define REAL_OFFSET(addr)	((addr) & ((1 << REAL_SEGMENT_SHIFT) - 1))
16 #define REAL_INTR_SIZE		(REAL_INTR_VECTORS * sizeof(struct real_intr_desc))
17 
18 struct interrupt_table {
19 	struct real_intr_desc entries[REAL_INTR_VECTORS];
20 };
21 
22 void interrupt_table__copy(struct interrupt_table *itable, void *dst, unsigned int size);
23 void interrupt_table__setup(struct interrupt_table *itable, struct real_intr_desc *entry);
24 void interrupt_table__set(struct interrupt_table *itable, struct real_intr_desc *entry, unsigned int num);
25 
26 #endif /* KVM__INTERRUPT_H */
27