95 lines
2.4 KiB
C
95 lines
2.4 KiB
C
![]() |
/*
|
||
|
* This header is for functions & variables that will ONLY be
|
||
|
* used inside libkvm.
|
||
|
*
|
||
|
* derived from libkvm.c
|
||
|
*
|
||
|
* Copyright (C) 2006 Qumranet, Inc.
|
||
|
*
|
||
|
* Authors:
|
||
|
* Avi Kivity <avi@qumranet.com>
|
||
|
* Yaniv Kamay <yaniv@qumranet.com>
|
||
|
*
|
||
|
* This work is licensed under the GNU LGPL license, version 2.
|
||
|
*/
|
||
|
|
||
|
#ifndef KVM_COMMON_H
|
||
|
#define KVM_COMMON_H
|
||
|
|
||
|
/* FIXME: share this number with kvm */
|
||
|
/* FIXME: or dynamically alloc/realloc regions */
|
||
|
#ifdef __s390__
|
||
|
#define KVM_MAX_NUM_MEM_REGIONS 1u
|
||
|
#define MAX_VCPUS 64
|
||
|
#define LIBKVM_S390_ORIGIN (0UL)
|
||
|
#elif defined(__ia64__)
|
||
|
#define KVM_MAX_NUM_MEM_REGIONS 32u
|
||
|
#define MAX_VCPUS 256
|
||
|
#else
|
||
|
#define KVM_MAX_NUM_MEM_REGIONS 32u
|
||
|
#define MAX_VCPUS 16
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/* kvm abi verison variable */
|
||
|
extern int kvm_abi;
|
||
|
|
||
|
/**
|
||
|
* \brief The KVM context
|
||
|
*
|
||
|
* The verbose KVM context
|
||
|
*/
|
||
|
|
||
|
struct kvm_context {
|
||
|
/// Filedescriptor to /dev/kvm
|
||
|
int fd;
|
||
|
int vm_fd;
|
||
|
int vcpu_fd[MAX_VCPUS];
|
||
|
struct kvm_run *run[MAX_VCPUS];
|
||
|
/// Callbacks that KVM uses to emulate various unvirtualizable functionality
|
||
|
struct kvm_callbacks *callbacks;
|
||
|
void *opaque;
|
||
|
/// is dirty pages logging enabled for all regions or not
|
||
|
int dirty_pages_log_all;
|
||
|
/// do not create in-kernel irqchip if set
|
||
|
int no_irqchip_creation;
|
||
|
/// in-kernel irqchip status
|
||
|
int irqchip_in_kernel;
|
||
|
/// ioctl to use to inject interrupts
|
||
|
int irqchip_inject_ioctl;
|
||
|
/// do not create in-kernel pit if set
|
||
|
int no_pit_creation;
|
||
|
/// in-kernel pit status
|
||
|
int pit_in_kernel;
|
||
|
/// in-kernel coalesced mmio
|
||
|
int coalesced_mmio;
|
||
|
#ifdef KVM_CAP_IRQ_ROUTING
|
||
|
struct kvm_irq_routing *irq_routes;
|
||
|
int nr_allocated_irq_routes;
|
||
|
#endif
|
||
|
void *used_gsi_bitmap;
|
||
|
int max_gsi;
|
||
|
};
|
||
|
|
||
|
int kvm_alloc_kernel_memory(kvm_context_t kvm, unsigned long memory,
|
||
|
void **vm_mem);
|
||
|
int kvm_alloc_userspace_memory(kvm_context_t kvm, unsigned long memory,
|
||
|
void **vm_mem);
|
||
|
|
||
|
int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes,
|
||
|
void **vm_mem);
|
||
|
int kvm_arch_run(struct kvm_run *run, kvm_context_t kvm, int vcpu);
|
||
|
|
||
|
|
||
|
void kvm_show_code(kvm_context_t kvm, int vcpu);
|
||
|
|
||
|
int handle_halt(kvm_context_t kvm, int vcpu);
|
||
|
int handle_shutdown(kvm_context_t kvm, void *env);
|
||
|
void post_kvm_run(kvm_context_t kvm, void *env);
|
||
|
int pre_kvm_run(kvm_context_t kvm, void *env);
|
||
|
int handle_io_window(kvm_context_t kvm);
|
||
|
int handle_debug(kvm_context_t kvm, int vcpu, void *env);
|
||
|
int try_push_interrupts(kvm_context_t kvm);
|
||
|
|
||
|
#endif
|