Statistics
| Branch: | Revision:

root / hw / xen_common.h @ 0f51726a

History | View | Annotate | Download (3.2 kB)

1
#ifndef QEMU_HW_XEN_COMMON_H
2
#define QEMU_HW_XEN_COMMON_H 1
3

    
4
#include "config-host.h"
5

    
6
#include <stddef.h>
7
#include <inttypes.h>
8

    
9
#include <xenctrl.h>
10
#include <xs.h>
11
#include <xen/io/xenbus.h>
12

    
13
#include "hw.h"
14
#include "xen.h"
15
#include "qemu-queue.h"
16

    
17
/*
18
 * We don't support Xen prior to 3.3.0.
19
 */
20

    
21
/* Xen before 4.0 */
22
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 400
23
static inline void *xc_map_foreign_bulk(int xc_handle, uint32_t dom, int prot,
24
                                        xen_pfn_t *arr, int *err,
25
                                        unsigned int num)
26
{
27
    return xc_map_foreign_batch(xc_handle, dom, prot, arr, num);
28
}
29
#endif
30

    
31

    
32
/* Xen before 4.1 */
33
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 410
34

    
35
typedef int XenXC;
36
typedef int XenEvtchn;
37
typedef int XenGnttab;
38

    
39
#  define XC_INTERFACE_FMT "%i"
40
#  define XC_HANDLER_INITIAL_VALUE    -1
41

    
42
static inline XenEvtchn xen_xc_evtchn_open(void *logger,
43
                                           unsigned int open_flags)
44
{
45
    return xc_evtchn_open();
46
}
47

    
48
static inline XenGnttab xen_xc_gnttab_open(void *logger,
49
                                           unsigned int open_flags)
50
{
51
    return xc_gnttab_open();
52
}
53

    
54
static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger,
55
                                          unsigned int open_flags)
56
{
57
    return xc_interface_open();
58
}
59

    
60
static inline int xc_fd(int xen_xc)
61
{
62
    return xen_xc;
63
}
64

    
65

    
66
static inline int xc_domain_populate_physmap_exact
67
    (XenXC xc_handle, uint32_t domid, unsigned long nr_extents,
68
     unsigned int extent_order, unsigned int mem_flags, xen_pfn_t *extent_start)
69
{
70
    return xc_domain_memory_populate_physmap
71
        (xc_handle, domid, nr_extents, extent_order, mem_flags, extent_start);
72
}
73

    
74
static inline int xc_domain_add_to_physmap(int xc_handle, uint32_t domid,
75
                                           unsigned int space, unsigned long idx,
76
                                           xen_pfn_t gpfn)
77
{
78
    struct xen_add_to_physmap xatp = {
79
        .domid = domid,
80
        .space = space,
81
        .idx = idx,
82
        .gpfn = gpfn,
83
    };
84

    
85
    return xc_memory_op(xc_handle, XENMEM_add_to_physmap, &xatp);
86
}
87

    
88
static inline struct xs_handle *xs_open(unsigned long flags)
89
{
90
    return xs_daemon_open();
91
}
92

    
93
static inline void xs_close(struct xs_handle *xsh)
94
{
95
    if (xsh != NULL) {
96
        xs_daemon_close(xsh);
97
    }
98
}
99

    
100

    
101
/* Xen 4.1 */
102
#else
103

    
104
typedef xc_interface *XenXC;
105
typedef xc_evtchn *XenEvtchn;
106
typedef xc_gnttab *XenGnttab;
107

    
108
#  define XC_INTERFACE_FMT "%p"
109
#  define XC_HANDLER_INITIAL_VALUE    NULL
110

    
111
static inline XenEvtchn xen_xc_evtchn_open(void *logger,
112
                                           unsigned int open_flags)
113
{
114
    return xc_evtchn_open(logger, open_flags);
115
}
116

    
117
static inline XenGnttab xen_xc_gnttab_open(void *logger,
118
                                           unsigned int open_flags)
119
{
120
    return xc_gnttab_open(logger, open_flags);
121
}
122

    
123
static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger,
124
                                          unsigned int open_flags)
125
{
126
    return xc_interface_open(logger, dombuild_logger, open_flags);
127
}
128

    
129
/* FIXME There is now way to have the xen fd */
130
static inline int xc_fd(xc_interface *xen_xc)
131
{
132
    return -1;
133
}
134
#endif
135

    
136
void destroy_hvm_domain(void);
137

    
138
#endif /* QEMU_HW_XEN_COMMON_H */