diff options
Diffstat (limited to 'include/xen')
-rw-r--r-- | include/xen/events.h | 9 | ||||
-rw-r--r-- | include/xen/grant_table.h | 9 | ||||
-rw-r--r-- | include/xen/interface/elfnote.h | 13 | ||||
-rw-r--r-- | include/xen/interface/event_channel.h | 68 | ||||
-rw-r--r-- | include/xen/interface/xen.h | 6 | ||||
-rw-r--r-- | include/xen/platform_pci.h | 25 | ||||
-rw-r--r-- | include/xen/xen.h | 14 |
7 files changed, 135 insertions, 9 deletions
diff --git a/include/xen/events.h b/include/xen/events.h index c9ea10ee2273..c9c85cf84895 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
@@ -7,6 +7,8 @@ | |||
7 | #include <asm/xen/hypercall.h> | 7 | #include <asm/xen/hypercall.h> |
8 | #include <asm/xen/events.h> | 8 | #include <asm/xen/events.h> |
9 | 9 | ||
10 | unsigned xen_evtchn_nr_channels(void); | ||
11 | |||
10 | int bind_evtchn_to_irq(unsigned int evtchn); | 12 | int bind_evtchn_to_irq(unsigned int evtchn); |
11 | int bind_evtchn_to_irqhandler(unsigned int evtchn, | 13 | int bind_evtchn_to_irqhandler(unsigned int evtchn, |
12 | irq_handler_t handler, | 14 | irq_handler_t handler, |
@@ -37,6 +39,11 @@ int bind_interdomain_evtchn_to_irqhandler(unsigned int remote_domain, | |||
37 | */ | 39 | */ |
38 | void unbind_from_irqhandler(unsigned int irq, void *dev_id); | 40 | void unbind_from_irqhandler(unsigned int irq, void *dev_id); |
39 | 41 | ||
42 | #define XEN_IRQ_PRIORITY_MAX EVTCHN_FIFO_PRIORITY_MAX | ||
43 | #define XEN_IRQ_PRIORITY_DEFAULT EVTCHN_FIFO_PRIORITY_DEFAULT | ||
44 | #define XEN_IRQ_PRIORITY_MIN EVTCHN_FIFO_PRIORITY_MIN | ||
45 | int xen_set_irq_priority(unsigned irq, unsigned priority); | ||
46 | |||
40 | /* | 47 | /* |
41 | * Allow extra references to event channels exposed to userspace by evtchn | 48 | * Allow extra references to event channels exposed to userspace by evtchn |
42 | */ | 49 | */ |
@@ -73,6 +80,8 @@ void xen_poll_irq_timeout(int irq, u64 timeout); | |||
73 | 80 | ||
74 | /* Determine the IRQ which is bound to an event channel */ | 81 | /* Determine the IRQ which is bound to an event channel */ |
75 | unsigned irq_from_evtchn(unsigned int evtchn); | 82 | unsigned irq_from_evtchn(unsigned int evtchn); |
83 | int irq_from_virq(unsigned int cpu, unsigned int virq); | ||
84 | unsigned int evtchn_from_irq(unsigned irq); | ||
76 | 85 | ||
77 | /* Xen HVM evtchn vector callback */ | 86 | /* Xen HVM evtchn vector callback */ |
78 | void xen_hvm_callback_vector(void); | 87 | void xen_hvm_callback_vector(void); |
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h index 694dcaf266e6..5acb1e4ac0d3 100644 --- a/include/xen/grant_table.h +++ b/include/xen/grant_table.h | |||
@@ -178,8 +178,15 @@ int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes, | |||
178 | grant_status_t **__shared); | 178 | grant_status_t **__shared); |
179 | void arch_gnttab_unmap(void *shared, unsigned long nr_gframes); | 179 | void arch_gnttab_unmap(void *shared, unsigned long nr_gframes); |
180 | 180 | ||
181 | extern unsigned long xen_hvm_resume_frames; | 181 | struct grant_frames { |
182 | xen_pfn_t *pfn; | ||
183 | unsigned int count; | ||
184 | void *vaddr; | ||
185 | }; | ||
186 | extern struct grant_frames xen_auto_xlat_grant_frames; | ||
182 | unsigned int gnttab_max_grant_frames(void); | 187 | unsigned int gnttab_max_grant_frames(void); |
188 | int gnttab_setup_auto_xlat_frames(unsigned long addr); | ||
189 | void gnttab_free_auto_xlat_frames(void); | ||
183 | 190 | ||
184 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) | 191 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) |
185 | 192 | ||
diff --git a/include/xen/interface/elfnote.h b/include/xen/interface/elfnote.h index 0360b15f4883..6f4eae328ca7 100644 --- a/include/xen/interface/elfnote.h +++ b/include/xen/interface/elfnote.h | |||
@@ -140,6 +140,19 @@ | |||
140 | */ | 140 | */ |
141 | #define XEN_ELFNOTE_SUSPEND_CANCEL 14 | 141 | #define XEN_ELFNOTE_SUSPEND_CANCEL 14 |
142 | 142 | ||
143 | /* | ||
144 | * The features supported by this kernel (numeric). | ||
145 | * | ||
146 | * Other than XEN_ELFNOTE_FEATURES on pre-4.2 Xen, this note allows a | ||
147 | * kernel to specify support for features that older hypervisors don't | ||
148 | * know about. The set of features 4.2 and newer hypervisors will | ||
149 | * consider supported by the kernel is the combination of the sets | ||
150 | * specified through this and the string note. | ||
151 | * | ||
152 | * LEGACY: FEATURES | ||
153 | */ | ||
154 | #define XEN_ELFNOTE_SUPPORTED_FEATURES 17 | ||
155 | |||
143 | #endif /* __XEN_PUBLIC_ELFNOTE_H__ */ | 156 | #endif /* __XEN_PUBLIC_ELFNOTE_H__ */ |
144 | 157 | ||
145 | /* | 158 | /* |
diff --git a/include/xen/interface/event_channel.h b/include/xen/interface/event_channel.h index f4942921e202..7e6acef5415b 100644 --- a/include/xen/interface/event_channel.h +++ b/include/xen/interface/event_channel.h | |||
@@ -190,6 +190,39 @@ struct evtchn_reset { | |||
190 | }; | 190 | }; |
191 | typedef struct evtchn_reset evtchn_reset_t; | 191 | typedef struct evtchn_reset evtchn_reset_t; |
192 | 192 | ||
193 | /* | ||
194 | * EVTCHNOP_init_control: initialize the control block for the FIFO ABI. | ||
195 | */ | ||
196 | #define EVTCHNOP_init_control 11 | ||
197 | struct evtchn_init_control { | ||
198 | /* IN parameters. */ | ||
199 | uint64_t control_gfn; | ||
200 | uint32_t offset; | ||
201 | uint32_t vcpu; | ||
202 | /* OUT parameters. */ | ||
203 | uint8_t link_bits; | ||
204 | uint8_t _pad[7]; | ||
205 | }; | ||
206 | |||
207 | /* | ||
208 | * EVTCHNOP_expand_array: add an additional page to the event array. | ||
209 | */ | ||
210 | #define EVTCHNOP_expand_array 12 | ||
211 | struct evtchn_expand_array { | ||
212 | /* IN parameters. */ | ||
213 | uint64_t array_gfn; | ||
214 | }; | ||
215 | |||
216 | /* | ||
217 | * EVTCHNOP_set_priority: set the priority for an event channel. | ||
218 | */ | ||
219 | #define EVTCHNOP_set_priority 13 | ||
220 | struct evtchn_set_priority { | ||
221 | /* IN parameters. */ | ||
222 | uint32_t port; | ||
223 | uint32_t priority; | ||
224 | }; | ||
225 | |||
193 | struct evtchn_op { | 226 | struct evtchn_op { |
194 | uint32_t cmd; /* EVTCHNOP_* */ | 227 | uint32_t cmd; /* EVTCHNOP_* */ |
195 | union { | 228 | union { |
@@ -207,4 +240,39 @@ struct evtchn_op { | |||
207 | }; | 240 | }; |
208 | DEFINE_GUEST_HANDLE_STRUCT(evtchn_op); | 241 | DEFINE_GUEST_HANDLE_STRUCT(evtchn_op); |
209 | 242 | ||
243 | /* | ||
244 | * 2-level ABI | ||
245 | */ | ||
246 | |||
247 | #define EVTCHN_2L_NR_CHANNELS (sizeof(xen_ulong_t) * sizeof(xen_ulong_t) * 64) | ||
248 | |||
249 | /* | ||
250 | * FIFO ABI | ||
251 | */ | ||
252 | |||
253 | /* Events may have priorities from 0 (highest) to 15 (lowest). */ | ||
254 | #define EVTCHN_FIFO_PRIORITY_MAX 0 | ||
255 | #define EVTCHN_FIFO_PRIORITY_DEFAULT 7 | ||
256 | #define EVTCHN_FIFO_PRIORITY_MIN 15 | ||
257 | |||
258 | #define EVTCHN_FIFO_MAX_QUEUES (EVTCHN_FIFO_PRIORITY_MIN + 1) | ||
259 | |||
260 | typedef uint32_t event_word_t; | ||
261 | |||
262 | #define EVTCHN_FIFO_PENDING 31 | ||
263 | #define EVTCHN_FIFO_MASKED 30 | ||
264 | #define EVTCHN_FIFO_LINKED 29 | ||
265 | #define EVTCHN_FIFO_BUSY 28 | ||
266 | |||
267 | #define EVTCHN_FIFO_LINK_BITS 17 | ||
268 | #define EVTCHN_FIFO_LINK_MASK ((1 << EVTCHN_FIFO_LINK_BITS) - 1) | ||
269 | |||
270 | #define EVTCHN_FIFO_NR_CHANNELS (1 << EVTCHN_FIFO_LINK_BITS) | ||
271 | |||
272 | struct evtchn_fifo_control_block { | ||
273 | uint32_t ready; | ||
274 | uint32_t _rsvd; | ||
275 | event_word_t head[EVTCHN_FIFO_MAX_QUEUES]; | ||
276 | }; | ||
277 | |||
210 | #endif /* __XEN_PUBLIC_EVENT_CHANNEL_H__ */ | 278 | #endif /* __XEN_PUBLIC_EVENT_CHANNEL_H__ */ |
diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index 53ec4167bd0b..0cd5ca333fac 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h | |||
@@ -281,12 +281,6 @@ struct multicall_entry { | |||
281 | }; | 281 | }; |
282 | DEFINE_GUEST_HANDLE_STRUCT(multicall_entry); | 282 | DEFINE_GUEST_HANDLE_STRUCT(multicall_entry); |
283 | 283 | ||
284 | /* | ||
285 | * Event channel endpoints per domain: | ||
286 | * 1024 if a long is 32 bits; 4096 if a long is 64 bits. | ||
287 | */ | ||
288 | #define NR_EVENT_CHANNELS (sizeof(xen_ulong_t) * sizeof(xen_ulong_t) * 64) | ||
289 | |||
290 | struct vcpu_time_info { | 284 | struct vcpu_time_info { |
291 | /* | 285 | /* |
292 | * Updates to the following values are preceded and followed | 286 | * Updates to the following values are preceded and followed |
diff --git a/include/xen/platform_pci.h b/include/xen/platform_pci.h index 438c256c274b..5c52b5583917 100644 --- a/include/xen/platform_pci.h +++ b/include/xen/platform_pci.h | |||
@@ -46,6 +46,27 @@ static inline int xen_must_unplug_disks(void) { | |||
46 | #endif | 46 | #endif |
47 | } | 47 | } |
48 | 48 | ||
49 | extern int xen_platform_pci_unplug; | 49 | #if defined(CONFIG_XEN_PVHVM) |
50 | 50 | extern bool xen_has_pv_devices(void); | |
51 | extern bool xen_has_pv_disk_devices(void); | ||
52 | extern bool xen_has_pv_nic_devices(void); | ||
53 | extern bool xen_has_pv_and_legacy_disk_devices(void); | ||
54 | #else | ||
55 | static inline bool xen_has_pv_devices(void) | ||
56 | { | ||
57 | return IS_ENABLED(CONFIG_XEN); | ||
58 | } | ||
59 | static inline bool xen_has_pv_disk_devices(void) | ||
60 | { | ||
61 | return IS_ENABLED(CONFIG_XEN); | ||
62 | } | ||
63 | static inline bool xen_has_pv_nic_devices(void) | ||
64 | { | ||
65 | return IS_ENABLED(CONFIG_XEN); | ||
66 | } | ||
67 | static inline bool xen_has_pv_and_legacy_disk_devices(void) | ||
68 | { | ||
69 | return false; | ||
70 | } | ||
71 | #endif | ||
51 | #endif /* _XEN_PLATFORM_PCI_H */ | 72 | #endif /* _XEN_PLATFORM_PCI_H */ |
diff --git a/include/xen/xen.h b/include/xen/xen.h index a74d4362c4f8..0c0e3ef4c45d 100644 --- a/include/xen/xen.h +++ b/include/xen/xen.h | |||
@@ -29,4 +29,18 @@ extern enum xen_domain_type xen_domain_type; | |||
29 | #define xen_initial_domain() (0) | 29 | #define xen_initial_domain() (0) |
30 | #endif /* CONFIG_XEN_DOM0 */ | 30 | #endif /* CONFIG_XEN_DOM0 */ |
31 | 31 | ||
32 | #ifdef CONFIG_XEN_PVH | ||
33 | /* This functionality exists only for x86. The XEN_PVHVM support exists | ||
34 | * only in x86 world - hence on ARM it will be always disabled. | ||
35 | * N.B. ARM guests are neither PV nor HVM nor PVHVM. | ||
36 | * It's a bit like PVH but is different also (it's further towards the H | ||
37 | * end of the spectrum than even PVH). | ||
38 | */ | ||
39 | #include <xen/features.h> | ||
40 | #define xen_pvh_domain() (xen_pv_domain() && \ | ||
41 | xen_feature(XENFEAT_auto_translated_physmap) && \ | ||
42 | xen_have_vector_callback) | ||
43 | #else | ||
44 | #define xen_pvh_domain() (0) | ||
45 | #endif | ||
32 | #endif /* _XEN_XEN_H */ | 46 | #endif /* _XEN_XEN_H */ |