From 57f863fe74df2973b91f5d84872daf39366c0324 Mon Sep 17 00:00:00 2001 From: Diego Ongaro Date: Sun, 9 Nov 2008 19:03:19 -0600 Subject: [PATCH] adds kvm_run to --- sys/sys/fkvm.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/sys/sys/fkvm.h b/sys/sys/fkvm.h index 803f1ab2bb9..38467fe90da 100644 --- a/sys/sys/fkvm.h +++ b/sys/sys/fkvm.h @@ -143,4 +143,93 @@ struct kvm_cpuid_entry { uint32_t padding; }; +#if defined(_KERNEL) || defined(FKVM_INTERNAL) + +enum { + KVM_EXIT_UNKNOWN = 0, + KVM_EXIT_EXCEPTION = 1, + KVM_EXIT_IO = 2, + KVM_EXIT_HYPERCALL = 3, + KVM_EXIT_DEBUG = 4, + KVM_EXIT_HLT = 5, + KVM_EXIT_MMIO = 6, + KVM_EXIT_IRQ_WINDOW_OPEN = 7, + KVM_EXIT_SHUTDOWN = 8, + KVM_EXIT_FAIL_ENTRY = 9, + KVM_EXIT_INTR = 10, + KVM_EXIT_SET_TPR = 11, + KVM_EXIT_TPR_ACCESS = 12, + KVM_EXIT_S390_SIEIC = 13, + KVM_EXIT_S390_RESET = 14, + KVM_EXIT_DCR = 15, + KVM_EXIT_NMI = 16, + KVM_EXIT_NMI_WINDOW_OPEN = 17, +}; + +struct kvm_run { + /* in */ + uint8_t request_interrupt_window; + uint8_t request_nmi_window; + uint8_t padding1[6]; + + /* out */ + uint32_t exit_reason; + uint8_t ready_for_interrupt_injection; + uint8_t if_flag; + uint8_t ready_for_nmi_injection; + uint8_t padding2; + + /* in (pre_kvm_run), out (post_kvm_run) */ + uint64_t cr8; + uint64_t apic_base; + + union { + /* KVM_EXIT_UNKNOWN */ + struct { + uint64_t hardware_exit_reason; + } hw; + /* KVM_EXIT_FAIL_ENTRY */ + struct { + uint64_t hardware_entry_failure_reason; + } fail_entry; + /* KVM_EXIT_EXCEPTION */ + struct { + uint32_t exception; + uint32_t error_code; + } ex; + /* KVM_EXIT_IO */ + struct kvm_io { +#define KVM_EXIT_IO_IN 0 +#define KVM_EXIT_IO_OUT 1 + uint8_t direction; + uint8_t size; /* bytes */ + uint16_t port; + uint32_t count; + uint64_t data_offset; /* relative to kvm_run start */ + } io; + /* KVM_EXIT_MMIO */ + struct { + uint64_t phys_addr; + uint8_t data[8]; + uint32_t len; + uint8_t is_write; + } mmio; + /* KVM_EXIT_TPR_ACCESS */ + struct { + uint64_t rip; + uint32_t is_write; + uint32_t pad; + } tpr_access; + /* KVM_EXIT_DCR */ + struct { + uint32_t dcrn; + uint32_t data; + uint8_t is_write; + } dcr; + /* Fix the size of the union. */ + uint8_t padding[32]; + }; +}; +#endif + #endif /* !_FKVM_H_ */ -- 2.11.4.GIT