OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [kvm_para.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
#ifndef __LINUX_KVM_PARA_H
2
#define __LINUX_KVM_PARA_H
3
 
4
/*
5
 * Guest OS interface for KVM paravirtualization
6
 *
7
 * Note: this interface is totally experimental, and is certain to change
8
 *       as we make progress.
9
 */
10
 
11
/*
12
 * Per-VCPU descriptor area shared between guest and host. Writable to
13
 * both guest and host. Registered with the host by the guest when
14
 * a guest acknowledges paravirtual mode.
15
 *
16
 * NOTE: all addresses are guest-physical addresses (gpa), to make it
17
 * easier for the hypervisor to map between the various addresses.
18
 */
19
struct kvm_vcpu_para_state {
20
        /*
21
         * API version information for compatibility. If there's any support
22
         * mismatch (too old host trying to execute too new guest) then
23
         * the host will deny entry into paravirtual mode. Any other
24
         * combination (new host + old guest and new host + new guest)
25
         * is supposed to work - new host versions will support all old
26
         * guest API versions.
27
         */
28
        u32 guest_version;
29
        u32 host_version;
30
        u32 size;
31
        u32 ret;
32
 
33
        /*
34
         * The address of the vm exit instruction (VMCALL or VMMCALL),
35
         * which the host will patch according to the CPU model the
36
         * VM runs on:
37
         */
38
        u64 hypercall_gpa;
39
 
40
} __attribute__ ((aligned(PAGE_SIZE)));
41
 
42
#define KVM_PARA_API_VERSION 1
43
 
44
/*
45
 * This is used for an RDMSR's ECX parameter to probe for a KVM host.
46
 * Hopefully no CPU vendor will use up this number. This is placed well
47
 * out of way of the typical space occupied by CPU vendors' MSR indices,
48
 * and we think (or at least hope) it wont be occupied in the future
49
 * either.
50
 */
51
#define MSR_KVM_API_MAGIC 0x87655678
52
 
53
#define KVM_EINVAL 1
54
 
55
/*
56
 * Hypercall calling convention:
57
 *
58
 * Each hypercall may have 0-6 parameters.
59
 *
60
 * 64-bit hypercall index is in RAX, goes from 0 to __NR_hypercalls-1
61
 *
62
 * 64-bit parameters 1-6 are in the standard gcc x86_64 calling convention
63
 * order: RDI, RSI, RDX, RCX, R8, R9.
64
 *
65
 * 32-bit index is EBX, parameters are: EAX, ECX, EDX, ESI, EDI, EBP.
66
 * (the first 3 are according to the gcc regparm calling convention)
67
 *
68
 * No registers are clobbered by the hypercall, except that the
69
 * return value is in RAX.
70
 */
71
#define __NR_hypercalls                 0
72
 
73
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.