Statistics
| Branch: | Revision:

root / hw / xen_common.h @ 9e2c1298

History | View | Annotate | Download (3.8 kB)

1 d94f9486 aliguori
#ifndef QEMU_HW_XEN_COMMON_H
2 d94f9486 aliguori
#define QEMU_HW_XEN_COMMON_H 1
3 d94f9486 aliguori
4 d5b93ddf Anthony PERARD
#include "config-host.h"
5 d5b93ddf Anthony PERARD
6 d94f9486 aliguori
#include <stddef.h>
7 d94f9486 aliguori
#include <inttypes.h>
8 d94f9486 aliguori
9 d94f9486 aliguori
#include <xenctrl.h>
10 e108a3c1 Anthony PERARD
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 420
11 e108a3c1 Anthony PERARD
#  include <xs.h>
12 e108a3c1 Anthony PERARD
#else
13 e108a3c1 Anthony PERARD
#  include <xenstore.h>
14 e108a3c1 Anthony PERARD
#endif
15 d94f9486 aliguori
#include <xen/io/xenbus.h>
16 d94f9486 aliguori
17 d94f9486 aliguori
#include "hw.h"
18 d94f9486 aliguori
#include "xen.h"
19 d8becc35 Jan Kiszka
#include "qemu-queue.h"
20 d94f9486 aliguori
21 d94f9486 aliguori
/*
22 d5b93ddf Anthony PERARD
 * We don't support Xen prior to 3.3.0.
23 d94f9486 aliguori
 */
24 d5b93ddf Anthony PERARD
25 d5b93ddf Anthony PERARD
/* Xen before 4.0 */
26 d5b93ddf Anthony PERARD
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 400
27 d5b93ddf Anthony PERARD
static inline void *xc_map_foreign_bulk(int xc_handle, uint32_t dom, int prot,
28 d5b93ddf Anthony PERARD
                                        xen_pfn_t *arr, int *err,
29 d5b93ddf Anthony PERARD
                                        unsigned int num)
30 d5b93ddf Anthony PERARD
{
31 d5b93ddf Anthony PERARD
    return xc_map_foreign_batch(xc_handle, dom, prot, arr, num);
32 d5b93ddf Anthony PERARD
}
33 d94f9486 aliguori
#endif
34 d5b93ddf Anthony PERARD
35 d5b93ddf Anthony PERARD
36 d5b93ddf Anthony PERARD
/* Xen before 4.1 */
37 d5b93ddf Anthony PERARD
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 410
38 d5b93ddf Anthony PERARD
39 d5b93ddf Anthony PERARD
typedef int XenXC;
40 d5b93ddf Anthony PERARD
typedef int XenEvtchn;
41 d5b93ddf Anthony PERARD
typedef int XenGnttab;
42 d5b93ddf Anthony PERARD
43 d5b93ddf Anthony PERARD
#  define XC_INTERFACE_FMT "%i"
44 d5b93ddf Anthony PERARD
#  define XC_HANDLER_INITIAL_VALUE    -1
45 d5b93ddf Anthony PERARD
46 d5b93ddf Anthony PERARD
static inline XenEvtchn xen_xc_evtchn_open(void *logger,
47 d5b93ddf Anthony PERARD
                                           unsigned int open_flags)
48 d5b93ddf Anthony PERARD
{
49 d5b93ddf Anthony PERARD
    return xc_evtchn_open();
50 d5b93ddf Anthony PERARD
}
51 d5b93ddf Anthony PERARD
52 d5b93ddf Anthony PERARD
static inline XenGnttab xen_xc_gnttab_open(void *logger,
53 d5b93ddf Anthony PERARD
                                           unsigned int open_flags)
54 d5b93ddf Anthony PERARD
{
55 d5b93ddf Anthony PERARD
    return xc_gnttab_open();
56 d5b93ddf Anthony PERARD
}
57 d5b93ddf Anthony PERARD
58 d5b93ddf Anthony PERARD
static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger,
59 d5b93ddf Anthony PERARD
                                          unsigned int open_flags)
60 d5b93ddf Anthony PERARD
{
61 d5b93ddf Anthony PERARD
    return xc_interface_open();
62 d5b93ddf Anthony PERARD
}
63 d5b93ddf Anthony PERARD
64 d5b93ddf Anthony PERARD
static inline int xc_fd(int xen_xc)
65 d5b93ddf Anthony PERARD
{
66 d5b93ddf Anthony PERARD
    return xen_xc;
67 d5b93ddf Anthony PERARD
}
68 d5b93ddf Anthony PERARD
69 d5b93ddf Anthony PERARD
70 432d268c Jun Nakajima
static inline int xc_domain_populate_physmap_exact
71 432d268c Jun Nakajima
    (XenXC xc_handle, uint32_t domid, unsigned long nr_extents,
72 432d268c Jun Nakajima
     unsigned int extent_order, unsigned int mem_flags, xen_pfn_t *extent_start)
73 432d268c Jun Nakajima
{
74 432d268c Jun Nakajima
    return xc_domain_memory_populate_physmap
75 432d268c Jun Nakajima
        (xc_handle, domid, nr_extents, extent_order, mem_flags, extent_start);
76 432d268c Jun Nakajima
}
77 432d268c Jun Nakajima
78 b87de24e Anthony PERARD
static inline int xc_domain_add_to_physmap(int xc_handle, uint32_t domid,
79 b87de24e Anthony PERARD
                                           unsigned int space, unsigned long idx,
80 b87de24e Anthony PERARD
                                           xen_pfn_t gpfn)
81 b87de24e Anthony PERARD
{
82 b87de24e Anthony PERARD
    struct xen_add_to_physmap xatp = {
83 b87de24e Anthony PERARD
        .domid = domid,
84 b87de24e Anthony PERARD
        .space = space,
85 b87de24e Anthony PERARD
        .idx = idx,
86 b87de24e Anthony PERARD
        .gpfn = gpfn,
87 b87de24e Anthony PERARD
    };
88 b87de24e Anthony PERARD
89 b87de24e Anthony PERARD
    return xc_memory_op(xc_handle, XENMEM_add_to_physmap, &xatp);
90 b87de24e Anthony PERARD
}
91 b87de24e Anthony PERARD
92 0f51726a Stefano Stabellini
static inline struct xs_handle *xs_open(unsigned long flags)
93 0f51726a Stefano Stabellini
{
94 0f51726a Stefano Stabellini
    return xs_daemon_open();
95 0f51726a Stefano Stabellini
}
96 0f51726a Stefano Stabellini
97 0f51726a Stefano Stabellini
static inline void xs_close(struct xs_handle *xsh)
98 0f51726a Stefano Stabellini
{
99 0f51726a Stefano Stabellini
    if (xsh != NULL) {
100 0f51726a Stefano Stabellini
        xs_daemon_close(xsh);
101 0f51726a Stefano Stabellini
    }
102 0f51726a Stefano Stabellini
}
103 0f51726a Stefano Stabellini
104 432d268c Jun Nakajima
105 d5b93ddf Anthony PERARD
/* Xen 4.1 */
106 d5b93ddf Anthony PERARD
#else
107 d5b93ddf Anthony PERARD
108 d5b93ddf Anthony PERARD
typedef xc_interface *XenXC;
109 d5b93ddf Anthony PERARD
typedef xc_evtchn *XenEvtchn;
110 d5b93ddf Anthony PERARD
typedef xc_gnttab *XenGnttab;
111 d5b93ddf Anthony PERARD
112 d5b93ddf Anthony PERARD
#  define XC_INTERFACE_FMT "%p"
113 d5b93ddf Anthony PERARD
#  define XC_HANDLER_INITIAL_VALUE    NULL
114 d5b93ddf Anthony PERARD
115 d5b93ddf Anthony PERARD
static inline XenEvtchn xen_xc_evtchn_open(void *logger,
116 d5b93ddf Anthony PERARD
                                           unsigned int open_flags)
117 d5b93ddf Anthony PERARD
{
118 d5b93ddf Anthony PERARD
    return xc_evtchn_open(logger, open_flags);
119 d5b93ddf Anthony PERARD
}
120 d5b93ddf Anthony PERARD
121 d5b93ddf Anthony PERARD
static inline XenGnttab xen_xc_gnttab_open(void *logger,
122 d5b93ddf Anthony PERARD
                                           unsigned int open_flags)
123 d5b93ddf Anthony PERARD
{
124 d5b93ddf Anthony PERARD
    return xc_gnttab_open(logger, open_flags);
125 d5b93ddf Anthony PERARD
}
126 d5b93ddf Anthony PERARD
127 d5b93ddf Anthony PERARD
static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger,
128 d5b93ddf Anthony PERARD
                                          unsigned int open_flags)
129 d5b93ddf Anthony PERARD
{
130 d5b93ddf Anthony PERARD
    return xc_interface_open(logger, dombuild_logger, open_flags);
131 d5b93ddf Anthony PERARD
}
132 d5b93ddf Anthony PERARD
133 d5b93ddf Anthony PERARD
/* FIXME There is now way to have the xen fd */
134 d5b93ddf Anthony PERARD
static inline int xc_fd(xc_interface *xen_xc)
135 d5b93ddf Anthony PERARD
{
136 d5b93ddf Anthony PERARD
    return -1;
137 d5b93ddf Anthony PERARD
}
138 d94f9486 aliguori
#endif
139 d94f9486 aliguori
140 4c9f8d1b Stefano Stabellini
/* Xen before 4.2 */
141 4c9f8d1b Stefano Stabellini
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 420
142 4c9f8d1b Stefano Stabellini
static inline int xen_xc_hvm_inject_msi(XenXC xen_xc, domid_t dom,
143 4c9f8d1b Stefano Stabellini
        uint64_t addr, uint32_t data)
144 4c9f8d1b Stefano Stabellini
{
145 4c9f8d1b Stefano Stabellini
    return -ENOSYS;
146 4c9f8d1b Stefano Stabellini
}
147 4c9f8d1b Stefano Stabellini
#else
148 4c9f8d1b Stefano Stabellini
static inline int xen_xc_hvm_inject_msi(XenXC xen_xc, domid_t dom,
149 4c9f8d1b Stefano Stabellini
        uint64_t addr, uint32_t data)
150 4c9f8d1b Stefano Stabellini
{
151 4c9f8d1b Stefano Stabellini
    return xc_hvm_inject_msi(xen_xc, dom, addr, data);
152 4c9f8d1b Stefano Stabellini
}
153 4c9f8d1b Stefano Stabellini
#endif
154 4c9f8d1b Stefano Stabellini
155 180640ea John V. Baboval
void destroy_hvm_domain(bool reboot);
156 9ce94e7c Arun Sharma
157 eaab4d60 Allen Kay
/* shutdown/destroy current domain because of an error */
158 eaab4d60 Allen Kay
void xen_shutdown_fatal_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
159 eaab4d60 Allen Kay
160 d94f9486 aliguori
#endif /* QEMU_HW_XEN_COMMON_H */