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 */ |