2007-11-19 17:06:31 -06:00
# ifndef __LINUX_KVM_X86_H
# define __LINUX_KVM_X86_H
/*
* KVM x86 specific structures and definitions
*
*/
# include <asm/types.h>
# include <linux/ioctl.h>
struct kvm_memory_alias {
__u32 slot ; /* this has a different namespace than memory slots */
__u32 flags ;
__u64 guest_phys_addr ;
__u64 memory_size ;
__u64 target_phys_addr ;
} ;
2007-11-19 17:06:32 -06:00
/* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */
struct kvm_pic_state {
__u8 last_irr ; /* edge detection */
__u8 irr ; /* interrupt request register */
__u8 imr ; /* interrupt mask register */
__u8 isr ; /* interrupt service register */
__u8 priority_add ; /* highest irq priority */
__u8 irq_base ;
__u8 read_reg_select ;
__u8 poll ;
__u8 special_mask ;
__u8 init_state ;
__u8 auto_eoi ;
__u8 rotate_on_auto_eoi ;
__u8 special_fully_nested_mode ;
__u8 init4 ; /* true if 4 byte init */
__u8 elcr ; /* PIIX edge/trigger selection */
__u8 elcr_mask ;
} ;
# define KVM_IOAPIC_NUM_PINS 24
struct kvm_ioapic_state {
__u64 base_address ;
__u32 ioregsel ;
__u32 id ;
__u32 irr ;
__u32 pad ;
union {
__u64 bits ;
struct {
__u8 vector ;
__u8 delivery_mode : 3 ;
__u8 dest_mode : 1 ;
__u8 delivery_status : 1 ;
__u8 polarity : 1 ;
__u8 remote_irr : 1 ;
__u8 trig_mode : 1 ;
__u8 mask : 1 ;
__u8 reserve : 7 ;
__u8 reserved [ 4 ] ;
__u8 dest_id ;
} fields ;
} redirtbl [ KVM_IOAPIC_NUM_PINS ] ;
} ;
# define KVM_IRQCHIP_PIC_MASTER 0
# define KVM_IRQCHIP_PIC_SLAVE 1
# define KVM_IRQCHIP_IOAPIC 2
2007-11-19 17:06:33 -06:00
/* for KVM_GET_REGS and KVM_SET_REGS */
struct kvm_regs {
/* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
__u64 rax , rbx , rcx , rdx ;
__u64 rsi , rdi , rsp , rbp ;
__u64 r8 , r9 , r10 , r11 ;
__u64 r12 , r13 , r14 , r15 ;
__u64 rip , rflags ;
} ;
2007-11-19 17:06:34 -06:00
/* for KVM_GET_LAPIC and KVM_SET_LAPIC */
# define KVM_APIC_REG_SIZE 0x400
struct kvm_lapic_state {
char regs [ KVM_APIC_REG_SIZE ] ;
} ;
2007-11-19 17:06:31 -06:00
# endif