blob: 00c7ed7dc3c1e8d136e66da2e912c58104b9618c [file] [log] [blame]
#ifndef KVM__INTERRUPT_H
#define KVM__INTERRUPT_H
#include <linux/types.h>
#include "kvm/bios.h"
#include "kvm/bios-export.h"
struct real_intr_desc {
u16 offset;
u16 segment;
} __attribute__((packed));
#define REAL_SEGMENT_SHIFT 4
#define REAL_SEGMENT(addr) ((addr) >> REAL_SEGMENT_SHIFT)
#define REAL_OFFSET(addr) ((addr) & ((1 << REAL_SEGMENT_SHIFT) - 1))
#define REAL_INTR_SIZE (REAL_INTR_VECTORS * sizeof(struct real_intr_desc))
struct interrupt_table {
struct real_intr_desc entries[REAL_INTR_VECTORS];
};
void interrupt_table__copy(struct interrupt_table *itable, void *dst, unsigned int size);
void interrupt_table__setup(struct interrupt_table *itable, struct real_intr_desc *entry);
void interrupt_table__set(struct interrupt_table *itable, struct real_intr_desc *entry, unsigned int num);
#endif /* KVM__INTERRUPT_H */