Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / arch / x86 / drivers / xen / hvm.h
1 #ifndef _HVM_H
2 #define _HVM_H
3
4 /** @file
5  *
6  * Xen HVM driver
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <stdint.h>
13 #include <ipxe/xen.h>
14 #include <xen/hvm/hvm_op.h>
15 #include <xen/hvm/params.h>
16
17 /** Minimum CPUID base */
18 #define HVM_CPUID_MIN 0x40000000UL
19
20 /** Maximum CPUID base */
21 #define HVM_CPUID_MAX 0x4000ff00UL
22
23 /** Increment between CPUID bases */
24 #define HVM_CPUID_STEP 0x00000100UL
25
26 /** Magic signature */
27 #define HVM_CPUID_MAGIC "XenVMMXenVMM"
28
29 /** Get Xen version */
30 #define HVM_CPUID_VERSION 1
31
32 /** Get number of hypercall pages */
33 #define HVM_CPUID_PAGES 2
34
35 /** PCI MMIO BAR */
36 #define HVM_MMIO_BAR PCI_BASE_ADDRESS_1
37
38 /** A Xen HVM device */
39 struct hvm_device {
40         /** Xen hypervisor */
41         struct xen_hypervisor xen;
42         /** CPUID base */
43         uint32_t cpuid_base;
44         /** Length of hypercall table */
45         size_t hypercall_len;
46         /** MMIO base address */
47         unsigned long mmio;
48         /** Current offset within MMIO address space */
49         size_t mmio_offset;
50         /** Length of MMIO address space */
51         size_t mmio_len;
52 };
53
54 /**
55  * Get HVM parameter value
56  *
57  * @v xen               Xen hypervisor
58  * @v index             Parameter index
59  * @v value             Value to fill in
60  * @ret xenrc           Xen status code
61  */
62 static inline int xen_hvm_get_param ( struct xen_hypervisor *xen,
63                                       unsigned int index, uint64_t *value ) {
64         struct xen_hvm_param param;
65         int xenrc;
66
67         param.domid = DOMID_SELF;
68         param.index = index;
69         xenrc = xen_hypercall_2 ( xen, __HYPERVISOR_hvm_op, HVMOP_get_param,
70                                   virt_to_phys ( &param ) );
71         *value = param.value;
72         return xenrc;
73 }
74
75 #endif /* _HVM_H */