Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1009-2.6.25-xen-auto-include-xen-interface.patch
Parent Directory | Revision Log
Revision 609 -
(show annotations)
(download)
Fri May 23 17:35:37 2008 UTC (16 years, 4 months ago) by niro
File size: 222409 byte(s)
Fri May 23 17:35:37 2008 UTC (16 years, 4 months ago) by niro
File size: 222409 byte(s)
-using opensuse xen patchset, updated kernel configs
1 | Subject: xen3 include-xen-interface |
2 | From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 517:d71965a78c20) |
3 | Patch-mainline: obsolete |
4 | Acked-by: jbeulich@novell.com |
5 | |
6 | Index: head-2008-04-15/include/xen/interface/COPYING |
7 | =================================================================== |
8 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
9 | +++ head-2008-04-15/include/xen/interface/COPYING 2007-06-12 13:14:19.000000000 +0200 |
10 | @@ -0,0 +1,38 @@ |
11 | +XEN NOTICE |
12 | +========== |
13 | + |
14 | +This copyright applies to all files within this subdirectory and its |
15 | +subdirectories: |
16 | + include/public/*.h |
17 | + include/public/hvm/*.h |
18 | + include/public/io/*.h |
19 | + |
20 | +The intention is that these files can be freely copied into the source |
21 | +tree of an operating system when porting that OS to run on Xen. Doing |
22 | +so does *not* cause the OS to become subject to the terms of the GPL. |
23 | + |
24 | +All other files in the Xen source distribution are covered by version |
25 | +2 of the GNU General Public License except where explicitly stated |
26 | +otherwise within individual source files. |
27 | + |
28 | + -- Keir Fraser (on behalf of the Xen team) |
29 | + |
30 | +===================================================================== |
31 | + |
32 | +Permission is hereby granted, free of charge, to any person obtaining a copy |
33 | +of this software and associated documentation files (the "Software"), to |
34 | +deal in the Software without restriction, including without limitation the |
35 | +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
36 | +sell copies of the Software, and to permit persons to whom the Software is |
37 | +furnished to do so, subject to the following conditions: |
38 | + |
39 | +The above copyright notice and this permission notice shall be included in |
40 | +all copies or substantial portions of the Software. |
41 | + |
42 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
43 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
44 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
45 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
46 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
47 | +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
48 | +DEALINGS IN THE SOFTWARE. |
49 | Index: head-2008-04-15/include/xen/interface/acm.h |
50 | =================================================================== |
51 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
52 | +++ head-2008-04-15/include/xen/interface/acm.h 2007-06-12 13:14:19.000000000 +0200 |
53 | @@ -0,0 +1,228 @@ |
54 | +/* |
55 | + * acm.h: Xen access control module interface defintions |
56 | + * |
57 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
58 | + * of this software and associated documentation files (the "Software"), to |
59 | + * deal in the Software without restriction, including without limitation the |
60 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
61 | + * sell copies of the Software, and to permit persons to whom the Software is |
62 | + * furnished to do so, subject to the following conditions: |
63 | + * |
64 | + * The above copyright notice and this permission notice shall be included in |
65 | + * all copies or substantial portions of the Software. |
66 | + * |
67 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
68 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
69 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
70 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
71 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
72 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
73 | + * DEALINGS IN THE SOFTWARE. |
74 | + * |
75 | + * Reiner Sailer <sailer@watson.ibm.com> |
76 | + * Copyright (c) 2005, International Business Machines Corporation. |
77 | + */ |
78 | + |
79 | +#ifndef _XEN_PUBLIC_ACM_H |
80 | +#define _XEN_PUBLIC_ACM_H |
81 | + |
82 | +#include "xen.h" |
83 | + |
84 | +/* if ACM_DEBUG defined, all hooks should |
85 | + * print a short trace message (comment it out |
86 | + * when not in testing mode ) |
87 | + */ |
88 | +/* #define ACM_DEBUG */ |
89 | + |
90 | +#ifdef ACM_DEBUG |
91 | +# define printkd(fmt, args...) printk(fmt,## args) |
92 | +#else |
93 | +# define printkd(fmt, args...) |
94 | +#endif |
95 | + |
96 | +/* default ssid reference value if not supplied */ |
97 | +#define ACM_DEFAULT_SSID 0x0 |
98 | +#define ACM_DEFAULT_LOCAL_SSID 0x0 |
99 | + |
100 | +/* Internal ACM ERROR types */ |
101 | +#define ACM_OK 0 |
102 | +#define ACM_UNDEF -1 |
103 | +#define ACM_INIT_SSID_ERROR -2 |
104 | +#define ACM_INIT_SOID_ERROR -3 |
105 | +#define ACM_ERROR -4 |
106 | + |
107 | +/* External ACCESS DECISIONS */ |
108 | +#define ACM_ACCESS_PERMITTED 0 |
109 | +#define ACM_ACCESS_DENIED -111 |
110 | +#define ACM_NULL_POINTER_ERROR -200 |
111 | + |
112 | +/* |
113 | + Error codes reported in when trying to test for a new policy |
114 | + These error codes are reported in an array of tuples where |
115 | + each error code is followed by a parameter describing the error |
116 | + more closely, such as a domain id. |
117 | +*/ |
118 | +#define ACM_EVTCHN_SHARING_VIOLATION 0x100 |
119 | +#define ACM_GNTTAB_SHARING_VIOLATION 0x101 |
120 | +#define ACM_DOMAIN_LOOKUP 0x102 |
121 | +#define ACM_CHWALL_CONFLICT 0x103 |
122 | +#define ACM_SSIDREF_IN_USE 0x104 |
123 | + |
124 | + |
125 | +/* primary policy in lower 4 bits */ |
126 | +#define ACM_NULL_POLICY 0 |
127 | +#define ACM_CHINESE_WALL_POLICY 1 |
128 | +#define ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY 2 |
129 | +#define ACM_POLICY_UNDEFINED 15 |
130 | + |
131 | +/* combinations have secondary policy component in higher 4bit */ |
132 | +#define ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY \ |
133 | + ((ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY << 4) | ACM_CHINESE_WALL_POLICY) |
134 | + |
135 | +/* policy: */ |
136 | +#define ACM_POLICY_NAME(X) \ |
137 | + ((X) == (ACM_NULL_POLICY)) ? "NULL" : \ |
138 | + ((X) == (ACM_CHINESE_WALL_POLICY)) ? "CHINESE WALL" : \ |
139 | + ((X) == (ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "SIMPLE TYPE ENFORCEMENT" : \ |
140 | + ((X) == (ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "CHINESE WALL AND SIMPLE TYPE ENFORCEMENT" : \ |
141 | + "UNDEFINED" |
142 | + |
143 | +/* the following policy versions must be increased |
144 | + * whenever the interpretation of the related |
145 | + * policy's data structure changes |
146 | + */ |
147 | +#define ACM_POLICY_VERSION 3 |
148 | +#define ACM_CHWALL_VERSION 1 |
149 | +#define ACM_STE_VERSION 1 |
150 | + |
151 | +/* defines a ssid reference used by xen */ |
152 | +typedef uint32_t ssidref_t; |
153 | + |
154 | +/* hooks that are known to domains */ |
155 | +#define ACMHOOK_none 0 |
156 | +#define ACMHOOK_sharing 1 |
157 | + |
158 | +/* -------security policy relevant type definitions-------- */ |
159 | + |
160 | +/* type identifier; compares to "equal" or "not equal" */ |
161 | +typedef uint16_t domaintype_t; |
162 | + |
163 | +/* CHINESE WALL POLICY DATA STRUCTURES |
164 | + * |
165 | + * current accumulated conflict type set: |
166 | + * When a domain is started and has a type that is in |
167 | + * a conflict set, the conflicting types are incremented in |
168 | + * the aggregate set. When a domain is destroyed, the |
169 | + * conflicting types to its type are decremented. |
170 | + * If a domain has multiple types, this procedure works over |
171 | + * all those types. |
172 | + * |
173 | + * conflict_aggregate_set[i] holds the number of |
174 | + * running domains that have a conflict with type i. |
175 | + * |
176 | + * running_types[i] holds the number of running domains |
177 | + * that include type i in their ssidref-referenced type set |
178 | + * |
179 | + * conflict_sets[i][j] is "0" if type j has no conflict |
180 | + * with type i and is "1" otherwise. |
181 | + */ |
182 | +/* high-16 = version, low-16 = check magic */ |
183 | +#define ACM_MAGIC 0x0001debc |
184 | + |
185 | +/* each offset in bytes from start of the struct they |
186 | + * are part of */ |
187 | + |
188 | +/* V3 of the policy buffer aded a version structure */ |
189 | +struct acm_policy_version |
190 | +{ |
191 | + uint32_t major; |
192 | + uint32_t minor; |
193 | +}; |
194 | + |
195 | + |
196 | +/* each buffer consists of all policy information for |
197 | + * the respective policy given in the policy code |
198 | + * |
199 | + * acm_policy_buffer, acm_chwall_policy_buffer, |
200 | + * and acm_ste_policy_buffer need to stay 32-bit aligned |
201 | + * because we create binary policies also with external |
202 | + * tools that assume packed representations (e.g. the java tool) |
203 | + */ |
204 | +struct acm_policy_buffer { |
205 | + uint32_t policy_version; /* ACM_POLICY_VERSION */ |
206 | + uint32_t magic; |
207 | + uint32_t len; |
208 | + uint32_t policy_reference_offset; |
209 | + uint32_t primary_policy_code; |
210 | + uint32_t primary_buffer_offset; |
211 | + uint32_t secondary_policy_code; |
212 | + uint32_t secondary_buffer_offset; |
213 | + struct acm_policy_version xml_pol_version; /* add in V3 */ |
214 | +}; |
215 | + |
216 | + |
217 | +struct acm_policy_reference_buffer { |
218 | + uint32_t len; |
219 | +}; |
220 | + |
221 | +struct acm_chwall_policy_buffer { |
222 | + uint32_t policy_version; /* ACM_CHWALL_VERSION */ |
223 | + uint32_t policy_code; |
224 | + uint32_t chwall_max_types; |
225 | + uint32_t chwall_max_ssidrefs; |
226 | + uint32_t chwall_max_conflictsets; |
227 | + uint32_t chwall_ssid_offset; |
228 | + uint32_t chwall_conflict_sets_offset; |
229 | + uint32_t chwall_running_types_offset; |
230 | + uint32_t chwall_conflict_aggregate_offset; |
231 | +}; |
232 | + |
233 | +struct acm_ste_policy_buffer { |
234 | + uint32_t policy_version; /* ACM_STE_VERSION */ |
235 | + uint32_t policy_code; |
236 | + uint32_t ste_max_types; |
237 | + uint32_t ste_max_ssidrefs; |
238 | + uint32_t ste_ssid_offset; |
239 | +}; |
240 | + |
241 | +struct acm_stats_buffer { |
242 | + uint32_t magic; |
243 | + uint32_t len; |
244 | + uint32_t primary_policy_code; |
245 | + uint32_t primary_stats_offset; |
246 | + uint32_t secondary_policy_code; |
247 | + uint32_t secondary_stats_offset; |
248 | +}; |
249 | + |
250 | +struct acm_ste_stats_buffer { |
251 | + uint32_t ec_eval_count; |
252 | + uint32_t gt_eval_count; |
253 | + uint32_t ec_denied_count; |
254 | + uint32_t gt_denied_count; |
255 | + uint32_t ec_cachehit_count; |
256 | + uint32_t gt_cachehit_count; |
257 | +}; |
258 | + |
259 | +struct acm_ssid_buffer { |
260 | + uint32_t len; |
261 | + ssidref_t ssidref; |
262 | + uint32_t policy_reference_offset; |
263 | + uint32_t primary_policy_code; |
264 | + uint32_t primary_max_types; |
265 | + uint32_t primary_types_offset; |
266 | + uint32_t secondary_policy_code; |
267 | + uint32_t secondary_max_types; |
268 | + uint32_t secondary_types_offset; |
269 | +}; |
270 | + |
271 | +#endif |
272 | + |
273 | +/* |
274 | + * Local variables: |
275 | + * mode: C |
276 | + * c-set-style: "BSD" |
277 | + * c-basic-offset: 4 |
278 | + * tab-width: 4 |
279 | + * indent-tabs-mode: nil |
280 | + * End: |
281 | + */ |
282 | Index: head-2008-04-15/include/xen/interface/acm_ops.h |
283 | =================================================================== |
284 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
285 | +++ head-2008-04-15/include/xen/interface/acm_ops.h 2007-06-12 13:14:19.000000000 +0200 |
286 | @@ -0,0 +1,159 @@ |
287 | +/* |
288 | + * acm_ops.h: Xen access control module hypervisor commands |
289 | + * |
290 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
291 | + * of this software and associated documentation files (the "Software"), to |
292 | + * deal in the Software without restriction, including without limitation the |
293 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
294 | + * sell copies of the Software, and to permit persons to whom the Software is |
295 | + * furnished to do so, subject to the following conditions: |
296 | + * |
297 | + * The above copyright notice and this permission notice shall be included in |
298 | + * all copies or substantial portions of the Software. |
299 | + * |
300 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
301 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
302 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
303 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
304 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
305 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
306 | + * DEALINGS IN THE SOFTWARE. |
307 | + * |
308 | + * Reiner Sailer <sailer@watson.ibm.com> |
309 | + * Copyright (c) 2005,2006 International Business Machines Corporation. |
310 | + */ |
311 | + |
312 | +#ifndef __XEN_PUBLIC_ACM_OPS_H__ |
313 | +#define __XEN_PUBLIC_ACM_OPS_H__ |
314 | + |
315 | +#include "xen.h" |
316 | +#include "acm.h" |
317 | + |
318 | +/* |
319 | + * Make sure you increment the interface version whenever you modify this file! |
320 | + * This makes sure that old versions of acm tools will stop working in a |
321 | + * well-defined way (rather than crashing the machine, for instance). |
322 | + */ |
323 | +#define ACM_INTERFACE_VERSION 0xAAAA000A |
324 | + |
325 | +/************************************************************************/ |
326 | + |
327 | +/* |
328 | + * Prototype for this hypercall is: |
329 | + * int acm_op(int cmd, void *args) |
330 | + * @cmd == ACMOP_??? (access control module operation). |
331 | + * @args == Operation-specific extra arguments (NULL if none). |
332 | + */ |
333 | + |
334 | + |
335 | +#define ACMOP_setpolicy 1 |
336 | +struct acm_setpolicy { |
337 | + /* IN */ |
338 | + XEN_GUEST_HANDLE_64(void) pushcache; |
339 | + uint32_t pushcache_size; |
340 | +}; |
341 | + |
342 | + |
343 | +#define ACMOP_getpolicy 2 |
344 | +struct acm_getpolicy { |
345 | + /* IN */ |
346 | + XEN_GUEST_HANDLE_64(void) pullcache; |
347 | + uint32_t pullcache_size; |
348 | +}; |
349 | + |
350 | + |
351 | +#define ACMOP_dumpstats 3 |
352 | +struct acm_dumpstats { |
353 | + /* IN */ |
354 | + XEN_GUEST_HANDLE_64(void) pullcache; |
355 | + uint32_t pullcache_size; |
356 | +}; |
357 | + |
358 | + |
359 | +#define ACMOP_getssid 4 |
360 | +#define ACM_GETBY_ssidref 1 |
361 | +#define ACM_GETBY_domainid 2 |
362 | +struct acm_getssid { |
363 | + /* IN */ |
364 | + uint32_t get_ssid_by; /* ACM_GETBY_* */ |
365 | + union { |
366 | + domaintype_t domainid; |
367 | + ssidref_t ssidref; |
368 | + } id; |
369 | + XEN_GUEST_HANDLE_64(void) ssidbuf; |
370 | + uint32_t ssidbuf_size; |
371 | +}; |
372 | + |
373 | +#define ACMOP_getdecision 5 |
374 | +struct acm_getdecision { |
375 | + /* IN */ |
376 | + uint32_t get_decision_by1; /* ACM_GETBY_* */ |
377 | + uint32_t get_decision_by2; /* ACM_GETBY_* */ |
378 | + union { |
379 | + domaintype_t domainid; |
380 | + ssidref_t ssidref; |
381 | + } id1; |
382 | + union { |
383 | + domaintype_t domainid; |
384 | + ssidref_t ssidref; |
385 | + } id2; |
386 | + uint32_t hook; |
387 | + /* OUT */ |
388 | + uint32_t acm_decision; |
389 | +}; |
390 | + |
391 | + |
392 | +#define ACMOP_chgpolicy 6 |
393 | +struct acm_change_policy { |
394 | + /* IN */ |
395 | + XEN_GUEST_HANDLE_64(void) policy_pushcache; |
396 | + uint32_t policy_pushcache_size; |
397 | + XEN_GUEST_HANDLE_64(void) del_array; |
398 | + uint32_t delarray_size; |
399 | + XEN_GUEST_HANDLE_64(void) chg_array; |
400 | + uint32_t chgarray_size; |
401 | + /* OUT */ |
402 | + /* array with error code */ |
403 | + XEN_GUEST_HANDLE_64(void) err_array; |
404 | + uint32_t errarray_size; |
405 | +}; |
406 | + |
407 | +#define ACMOP_relabeldoms 7 |
408 | +struct acm_relabel_doms { |
409 | + /* IN */ |
410 | + XEN_GUEST_HANDLE_64(void) relabel_map; |
411 | + uint32_t relabel_map_size; |
412 | + /* OUT */ |
413 | + XEN_GUEST_HANDLE_64(void) err_array; |
414 | + uint32_t errarray_size; |
415 | +}; |
416 | + |
417 | +/* future interface to Xen */ |
418 | +struct xen_acmctl { |
419 | + uint32_t cmd; |
420 | + uint32_t interface_version; |
421 | + union { |
422 | + struct acm_setpolicy setpolicy; |
423 | + struct acm_getpolicy getpolicy; |
424 | + struct acm_dumpstats dumpstats; |
425 | + struct acm_getssid getssid; |
426 | + struct acm_getdecision getdecision; |
427 | + struct acm_change_policy change_policy; |
428 | + struct acm_relabel_doms relabel_doms; |
429 | + } u; |
430 | +}; |
431 | + |
432 | +typedef struct xen_acmctl xen_acmctl_t; |
433 | +DEFINE_XEN_GUEST_HANDLE(xen_acmctl_t); |
434 | + |
435 | +#endif /* __XEN_PUBLIC_ACM_OPS_H__ */ |
436 | + |
437 | +/* |
438 | + * Local variables: |
439 | + * mode: C |
440 | + * c-set-style: "BSD" |
441 | + * c-basic-offset: 4 |
442 | + * tab-width: 4 |
443 | + * indent-tabs-mode: nil |
444 | + * End: |
445 | + */ |
446 | Index: head-2008-04-15/include/xen/interface/arch-x86/cpuid.h |
447 | =================================================================== |
448 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
449 | +++ head-2008-04-15/include/xen/interface/arch-x86/cpuid.h 2008-01-21 11:15:27.000000000 +0100 |
450 | @@ -0,0 +1,68 @@ |
451 | +/****************************************************************************** |
452 | + * arch-x86/cpuid.h |
453 | + * |
454 | + * CPUID interface to Xen. |
455 | + * |
456 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
457 | + * of this software and associated documentation files (the "Software"), to |
458 | + * deal in the Software without restriction, including without limitation the |
459 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
460 | + * sell copies of the Software, and to permit persons to whom the Software is |
461 | + * furnished to do so, subject to the following conditions: |
462 | + * |
463 | + * The above copyright notice and this permission notice shall be included in |
464 | + * all copies or substantial portions of the Software. |
465 | + * |
466 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
467 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
468 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
469 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
470 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
471 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
472 | + * DEALINGS IN THE SOFTWARE. |
473 | + * |
474 | + * Copyright (c) 2007 Citrix Systems, Inc. |
475 | + * |
476 | + * Authors: |
477 | + * Keir Fraser <keir.fraser@citrix.com> |
478 | + */ |
479 | + |
480 | +#ifndef __XEN_PUBLIC_ARCH_X86_CPUID_H__ |
481 | +#define __XEN_PUBLIC_ARCH_X86_CPUID_H__ |
482 | + |
483 | +/* Xen identification leaves start at 0x40000000. */ |
484 | +#define XEN_CPUID_FIRST_LEAF 0x40000000 |
485 | +#define XEN_CPUID_LEAF(i) (XEN_CPUID_FIRST_LEAF + (i)) |
486 | + |
487 | +/* |
488 | + * Leaf 1 (0x40000000) |
489 | + * EAX: Largest Xen-information leaf. All leaves up to an including @EAX |
490 | + * are supported by the Xen host. |
491 | + * EBX-EDX: "XenVMMXenVMM" signature, allowing positive identification |
492 | + * of a Xen host. |
493 | + */ |
494 | +#define XEN_CPUID_SIGNATURE_EBX 0x566e6558 /* "XenV" */ |
495 | +#define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */ |
496 | +#define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */ |
497 | + |
498 | +/* |
499 | + * Leaf 2 (0x40000001) |
500 | + * EAX[31:16]: Xen major version. |
501 | + * EAX[15: 0]: Xen minor version. |
502 | + * EBX-EDX: Reserved (currently all zeroes). |
503 | + */ |
504 | + |
505 | +/* |
506 | + * Leaf 3 (0x40000002) |
507 | + * EAX: Number of hypercall transfer pages. This register is always guaranteed |
508 | + * to specify one hypercall page. |
509 | + * EBX: Base address of Xen-specific MSRs. |
510 | + * ECX: Features 1. Unused bits are set to zero. |
511 | + * EDX: Features 2. Unused bits are set to zero. |
512 | + */ |
513 | + |
514 | +/* Does the host support MMU_PT_UPDATE_PRESERVE_AD for this guest? */ |
515 | +#define _XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD 0 |
516 | +#define XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD (1u<<0) |
517 | + |
518 | +#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */ |
519 | Index: head-2008-04-15/include/xen/interface/arch-x86/hvm/save.h |
520 | =================================================================== |
521 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
522 | +++ head-2008-04-15/include/xen/interface/arch-x86/hvm/save.h 2008-04-02 12:34:02.000000000 +0200 |
523 | @@ -0,0 +1,429 @@ |
524 | +/* |
525 | + * Structure definitions for HVM state that is held by Xen and must |
526 | + * be saved along with the domain's memory and device-model state. |
527 | + * |
528 | + * Copyright (c) 2007 XenSource Ltd. |
529 | + * |
530 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
531 | + * of this software and associated documentation files (the "Software"), to |
532 | + * deal in the Software without restriction, including without limitation the |
533 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
534 | + * sell copies of the Software, and to permit persons to whom the Software is |
535 | + * furnished to do so, subject to the following conditions: |
536 | + * |
537 | + * The above copyright notice and this permission notice shall be included in |
538 | + * all copies or substantial portions of the Software. |
539 | + * |
540 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
541 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
542 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
543 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
544 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
545 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
546 | + * DEALINGS IN THE SOFTWARE. |
547 | + */ |
548 | + |
549 | +#ifndef __XEN_PUBLIC_HVM_SAVE_X86_H__ |
550 | +#define __XEN_PUBLIC_HVM_SAVE_X86_H__ |
551 | + |
552 | +/* |
553 | + * Save/restore header: general info about the save file. |
554 | + */ |
555 | + |
556 | +#define HVM_FILE_MAGIC 0x54381286 |
557 | +#define HVM_FILE_VERSION 0x00000001 |
558 | + |
559 | +struct hvm_save_header { |
560 | + uint32_t magic; /* Must be HVM_FILE_MAGIC */ |
561 | + uint32_t version; /* File format version */ |
562 | + uint64_t changeset; /* Version of Xen that saved this file */ |
563 | + uint32_t cpuid; /* CPUID[0x01][%eax] on the saving machine */ |
564 | + uint32_t pad0; |
565 | +}; |
566 | + |
567 | +DECLARE_HVM_SAVE_TYPE(HEADER, 1, struct hvm_save_header); |
568 | + |
569 | + |
570 | +/* |
571 | + * Processor |
572 | + */ |
573 | + |
574 | +struct hvm_hw_cpu { |
575 | + uint8_t fpu_regs[512]; |
576 | + |
577 | + uint64_t rax; |
578 | + uint64_t rbx; |
579 | + uint64_t rcx; |
580 | + uint64_t rdx; |
581 | + uint64_t rbp; |
582 | + uint64_t rsi; |
583 | + uint64_t rdi; |
584 | + uint64_t rsp; |
585 | + uint64_t r8; |
586 | + uint64_t r9; |
587 | + uint64_t r10; |
588 | + uint64_t r11; |
589 | + uint64_t r12; |
590 | + uint64_t r13; |
591 | + uint64_t r14; |
592 | + uint64_t r15; |
593 | + |
594 | + uint64_t rip; |
595 | + uint64_t rflags; |
596 | + |
597 | + uint64_t cr0; |
598 | + uint64_t cr2; |
599 | + uint64_t cr3; |
600 | + uint64_t cr4; |
601 | + |
602 | + uint64_t dr0; |
603 | + uint64_t dr1; |
604 | + uint64_t dr2; |
605 | + uint64_t dr3; |
606 | + uint64_t dr6; |
607 | + uint64_t dr7; |
608 | + |
609 | + uint32_t cs_sel; |
610 | + uint32_t ds_sel; |
611 | + uint32_t es_sel; |
612 | + uint32_t fs_sel; |
613 | + uint32_t gs_sel; |
614 | + uint32_t ss_sel; |
615 | + uint32_t tr_sel; |
616 | + uint32_t ldtr_sel; |
617 | + |
618 | + uint32_t cs_limit; |
619 | + uint32_t ds_limit; |
620 | + uint32_t es_limit; |
621 | + uint32_t fs_limit; |
622 | + uint32_t gs_limit; |
623 | + uint32_t ss_limit; |
624 | + uint32_t tr_limit; |
625 | + uint32_t ldtr_limit; |
626 | + uint32_t idtr_limit; |
627 | + uint32_t gdtr_limit; |
628 | + |
629 | + uint64_t cs_base; |
630 | + uint64_t ds_base; |
631 | + uint64_t es_base; |
632 | + uint64_t fs_base; |
633 | + uint64_t gs_base; |
634 | + uint64_t ss_base; |
635 | + uint64_t tr_base; |
636 | + uint64_t ldtr_base; |
637 | + uint64_t idtr_base; |
638 | + uint64_t gdtr_base; |
639 | + |
640 | + uint32_t cs_arbytes; |
641 | + uint32_t ds_arbytes; |
642 | + uint32_t es_arbytes; |
643 | + uint32_t fs_arbytes; |
644 | + uint32_t gs_arbytes; |
645 | + uint32_t ss_arbytes; |
646 | + uint32_t tr_arbytes; |
647 | + uint32_t ldtr_arbytes; |
648 | + |
649 | + uint32_t sysenter_cs; |
650 | + uint32_t padding0; |
651 | + |
652 | + uint64_t sysenter_esp; |
653 | + uint64_t sysenter_eip; |
654 | + |
655 | + /* msr for em64t */ |
656 | + uint64_t shadow_gs; |
657 | + |
658 | + /* msr content saved/restored. */ |
659 | + uint64_t msr_flags; |
660 | + uint64_t msr_lstar; |
661 | + uint64_t msr_star; |
662 | + uint64_t msr_cstar; |
663 | + uint64_t msr_syscall_mask; |
664 | + uint64_t msr_efer; |
665 | + |
666 | + /* guest's idea of what rdtsc() would return */ |
667 | + uint64_t tsc; |
668 | + |
669 | + /* pending event, if any */ |
670 | + union { |
671 | + uint32_t pending_event; |
672 | + struct { |
673 | + uint8_t pending_vector:8; |
674 | + uint8_t pending_type:3; |
675 | + uint8_t pending_error_valid:1; |
676 | + uint32_t pending_reserved:19; |
677 | + uint8_t pending_valid:1; |
678 | + }; |
679 | + }; |
680 | + /* error code for pending event */ |
681 | + uint32_t error_code; |
682 | +}; |
683 | + |
684 | +DECLARE_HVM_SAVE_TYPE(CPU, 2, struct hvm_hw_cpu); |
685 | + |
686 | + |
687 | +/* |
688 | + * PIC |
689 | + */ |
690 | + |
691 | +struct hvm_hw_vpic { |
692 | + /* IR line bitmasks. */ |
693 | + uint8_t irr; |
694 | + uint8_t imr; |
695 | + uint8_t isr; |
696 | + |
697 | + /* Line IRx maps to IRQ irq_base+x */ |
698 | + uint8_t irq_base; |
699 | + |
700 | + /* |
701 | + * Where are we in ICW2-4 initialisation (0 means no init in progress)? |
702 | + * Bits 0-1 (=x): Next write at A=1 sets ICW(x+1). |
703 | + * Bit 2: ICW1.IC4 (1 == ICW4 included in init sequence) |
704 | + * Bit 3: ICW1.SNGL (0 == ICW3 included in init sequence) |
705 | + */ |
706 | + uint8_t init_state:4; |
707 | + |
708 | + /* IR line with highest priority. */ |
709 | + uint8_t priority_add:4; |
710 | + |
711 | + /* Reads from A=0 obtain ISR or IRR? */ |
712 | + uint8_t readsel_isr:1; |
713 | + |
714 | + /* Reads perform a polling read? */ |
715 | + uint8_t poll:1; |
716 | + |
717 | + /* Automatically clear IRQs from the ISR during INTA? */ |
718 | + uint8_t auto_eoi:1; |
719 | + |
720 | + /* Automatically rotate IRQ priorities during AEOI? */ |
721 | + uint8_t rotate_on_auto_eoi:1; |
722 | + |
723 | + /* Exclude slave inputs when considering in-service IRQs? */ |
724 | + uint8_t special_fully_nested_mode:1; |
725 | + |
726 | + /* Special mask mode excludes masked IRs from AEOI and priority checks. */ |
727 | + uint8_t special_mask_mode:1; |
728 | + |
729 | + /* Is this a master PIC or slave PIC? (NB. This is not programmable.) */ |
730 | + uint8_t is_master:1; |
731 | + |
732 | + /* Edge/trigger selection. */ |
733 | + uint8_t elcr; |
734 | + |
735 | + /* Virtual INT output. */ |
736 | + uint8_t int_output; |
737 | +}; |
738 | + |
739 | +DECLARE_HVM_SAVE_TYPE(PIC, 3, struct hvm_hw_vpic); |
740 | + |
741 | + |
742 | +/* |
743 | + * IO-APIC |
744 | + */ |
745 | + |
746 | +#ifdef __ia64__ |
747 | +#define VIOAPIC_IS_IOSAPIC 1 |
748 | +#define VIOAPIC_NUM_PINS 24 |
749 | +#else |
750 | +#define VIOAPIC_NUM_PINS 48 /* 16 ISA IRQs, 32 non-legacy PCI IRQS. */ |
751 | +#endif |
752 | + |
753 | +struct hvm_hw_vioapic { |
754 | + uint64_t base_address; |
755 | + uint32_t ioregsel; |
756 | + uint32_t id; |
757 | + union vioapic_redir_entry |
758 | + { |
759 | + uint64_t bits; |
760 | + struct { |
761 | + uint8_t vector; |
762 | + uint8_t delivery_mode:3; |
763 | + uint8_t dest_mode:1; |
764 | + uint8_t delivery_status:1; |
765 | + uint8_t polarity:1; |
766 | + uint8_t remote_irr:1; |
767 | + uint8_t trig_mode:1; |
768 | + uint8_t mask:1; |
769 | + uint8_t reserve:7; |
770 | +#if !VIOAPIC_IS_IOSAPIC |
771 | + uint8_t reserved[4]; |
772 | + uint8_t dest_id; |
773 | +#else |
774 | + uint8_t reserved[3]; |
775 | + uint16_t dest_id; |
776 | +#endif |
777 | + } fields; |
778 | + } redirtbl[VIOAPIC_NUM_PINS]; |
779 | +}; |
780 | + |
781 | +DECLARE_HVM_SAVE_TYPE(IOAPIC, 4, struct hvm_hw_vioapic); |
782 | + |
783 | + |
784 | +/* |
785 | + * LAPIC |
786 | + */ |
787 | + |
788 | +struct hvm_hw_lapic { |
789 | + uint64_t apic_base_msr; |
790 | + uint32_t disabled; /* VLAPIC_xx_DISABLED */ |
791 | + uint32_t timer_divisor; |
792 | +}; |
793 | + |
794 | +DECLARE_HVM_SAVE_TYPE(LAPIC, 5, struct hvm_hw_lapic); |
795 | + |
796 | +struct hvm_hw_lapic_regs { |
797 | + uint8_t data[1024]; |
798 | +}; |
799 | + |
800 | +DECLARE_HVM_SAVE_TYPE(LAPIC_REGS, 6, struct hvm_hw_lapic_regs); |
801 | + |
802 | + |
803 | +/* |
804 | + * IRQs |
805 | + */ |
806 | + |
807 | +struct hvm_hw_pci_irqs { |
808 | + /* |
809 | + * Virtual interrupt wires for a single PCI bus. |
810 | + * Indexed by: device*4 + INTx#. |
811 | + */ |
812 | + union { |
813 | + DECLARE_BITMAP(i, 32*4); |
814 | + uint64_t pad[2]; |
815 | + }; |
816 | +}; |
817 | + |
818 | +DECLARE_HVM_SAVE_TYPE(PCI_IRQ, 7, struct hvm_hw_pci_irqs); |
819 | + |
820 | +struct hvm_hw_isa_irqs { |
821 | + /* |
822 | + * Virtual interrupt wires for ISA devices. |
823 | + * Indexed by ISA IRQ (assumes no ISA-device IRQ sharing). |
824 | + */ |
825 | + union { |
826 | + DECLARE_BITMAP(i, 16); |
827 | + uint64_t pad[1]; |
828 | + }; |
829 | +}; |
830 | + |
831 | +DECLARE_HVM_SAVE_TYPE(ISA_IRQ, 8, struct hvm_hw_isa_irqs); |
832 | + |
833 | +struct hvm_hw_pci_link { |
834 | + /* |
835 | + * PCI-ISA interrupt router. |
836 | + * Each PCI <device:INTx#> is 'wire-ORed' into one of four links using |
837 | + * the traditional 'barber's pole' mapping ((device + INTx#) & 3). |
838 | + * The router provides a programmable mapping from each link to a GSI. |
839 | + */ |
840 | + uint8_t route[4]; |
841 | + uint8_t pad0[4]; |
842 | +}; |
843 | + |
844 | +DECLARE_HVM_SAVE_TYPE(PCI_LINK, 9, struct hvm_hw_pci_link); |
845 | + |
846 | +/* |
847 | + * PIT |
848 | + */ |
849 | + |
850 | +struct hvm_hw_pit { |
851 | + struct hvm_hw_pit_channel { |
852 | + uint32_t count; /* can be 65536 */ |
853 | + uint16_t latched_count; |
854 | + uint8_t count_latched; |
855 | + uint8_t status_latched; |
856 | + uint8_t status; |
857 | + uint8_t read_state; |
858 | + uint8_t write_state; |
859 | + uint8_t write_latch; |
860 | + uint8_t rw_mode; |
861 | + uint8_t mode; |
862 | + uint8_t bcd; /* not supported */ |
863 | + uint8_t gate; /* timer start */ |
864 | + } channels[3]; /* 3 x 16 bytes */ |
865 | + uint32_t speaker_data_on; |
866 | + uint32_t pad0; |
867 | +}; |
868 | + |
869 | +DECLARE_HVM_SAVE_TYPE(PIT, 10, struct hvm_hw_pit); |
870 | + |
871 | + |
872 | +/* |
873 | + * RTC |
874 | + */ |
875 | + |
876 | +#define RTC_CMOS_SIZE 14 |
877 | +struct hvm_hw_rtc { |
878 | + /* CMOS bytes */ |
879 | + uint8_t cmos_data[RTC_CMOS_SIZE]; |
880 | + /* Index register for 2-part operations */ |
881 | + uint8_t cmos_index; |
882 | + uint8_t pad0; |
883 | +}; |
884 | + |
885 | +DECLARE_HVM_SAVE_TYPE(RTC, 11, struct hvm_hw_rtc); |
886 | + |
887 | + |
888 | +/* |
889 | + * HPET |
890 | + */ |
891 | + |
892 | +#define HPET_TIMER_NUM 3 /* 3 timers supported now */ |
893 | +struct hvm_hw_hpet { |
894 | + /* Memory-mapped, software visible registers */ |
895 | + uint64_t capability; /* capabilities */ |
896 | + uint64_t res0; /* reserved */ |
897 | + uint64_t config; /* configuration */ |
898 | + uint64_t res1; /* reserved */ |
899 | + uint64_t isr; /* interrupt status reg */ |
900 | + uint64_t res2[25]; /* reserved */ |
901 | + uint64_t mc64; /* main counter */ |
902 | + uint64_t res3; /* reserved */ |
903 | + struct { /* timers */ |
904 | + uint64_t config; /* configuration/cap */ |
905 | + uint64_t cmp; /* comparator */ |
906 | + uint64_t fsb; /* FSB route, not supported now */ |
907 | + uint64_t res4; /* reserved */ |
908 | + } timers[HPET_TIMER_NUM]; |
909 | + uint64_t res5[4*(24-HPET_TIMER_NUM)]; /* reserved, up to 0x3ff */ |
910 | + |
911 | + /* Hidden register state */ |
912 | + uint64_t period[HPET_TIMER_NUM]; /* Last value written to comparator */ |
913 | +}; |
914 | + |
915 | +DECLARE_HVM_SAVE_TYPE(HPET, 12, struct hvm_hw_hpet); |
916 | + |
917 | + |
918 | +/* |
919 | + * PM timer |
920 | + */ |
921 | + |
922 | +struct hvm_hw_pmtimer { |
923 | + uint32_t tmr_val; /* PM_TMR_BLK.TMR_VAL: 32bit free-running counter */ |
924 | + uint16_t pm1a_sts; /* PM1a_EVT_BLK.PM1a_STS: status register */ |
925 | + uint16_t pm1a_en; /* PM1a_EVT_BLK.PM1a_EN: enable register */ |
926 | +}; |
927 | + |
928 | +DECLARE_HVM_SAVE_TYPE(PMTIMER, 13, struct hvm_hw_pmtimer); |
929 | + |
930 | +/* |
931 | + * MTRR MSRs |
932 | + */ |
933 | + |
934 | +struct hvm_hw_mtrr { |
935 | +#define MTRR_VCNT 8 |
936 | +#define NUM_FIXED_MSR 11 |
937 | + uint64_t msr_pat_cr; |
938 | + /* mtrr physbase & physmask msr pair*/ |
939 | + uint64_t msr_mtrr_var[MTRR_VCNT*2]; |
940 | + uint64_t msr_mtrr_fixed[NUM_FIXED_MSR]; |
941 | + uint64_t msr_mtrr_cap; |
942 | + uint64_t msr_mtrr_def_type; |
943 | +}; |
944 | + |
945 | +DECLARE_HVM_SAVE_TYPE(MTRR, 14, struct hvm_hw_mtrr); |
946 | + |
947 | +/* |
948 | + * Largest type-code in use |
949 | + */ |
950 | +#define HVM_SAVE_CODE_MAX 14 |
951 | + |
952 | +#endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */ |
953 | Index: head-2008-04-15/include/xen/interface/arch-x86/xen-x86_32.h |
954 | =================================================================== |
955 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
956 | +++ head-2008-04-15/include/xen/interface/arch-x86/xen-x86_32.h 2008-01-21 11:15:27.000000000 +0100 |
957 | @@ -0,0 +1,185 @@ |
958 | +/****************************************************************************** |
959 | + * xen-x86_32.h |
960 | + * |
961 | + * Guest OS interface to x86 32-bit Xen. |
962 | + * |
963 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
964 | + * of this software and associated documentation files (the "Software"), to |
965 | + * deal in the Software without restriction, including without limitation the |
966 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
967 | + * sell copies of the Software, and to permit persons to whom the Software is |
968 | + * furnished to do so, subject to the following conditions: |
969 | + * |
970 | + * The above copyright notice and this permission notice shall be included in |
971 | + * all copies or substantial portions of the Software. |
972 | + * |
973 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
974 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
975 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
976 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
977 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
978 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
979 | + * DEALINGS IN THE SOFTWARE. |
980 | + * |
981 | + * Copyright (c) 2004-2007, K A Fraser |
982 | + */ |
983 | + |
984 | +#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ |
985 | +#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ |
986 | + |
987 | +/* |
988 | + * Hypercall interface: |
989 | + * Input: %ebx, %ecx, %edx, %esi, %edi (arguments 1-5) |
990 | + * Output: %eax |
991 | + * Access is via hypercall page (set up by guest loader or via a Xen MSR): |
992 | + * call hypercall_page + hypercall-number * 32 |
993 | + * Clobbered: Argument registers (e.g., 2-arg hypercall clobbers %ebx,%ecx) |
994 | + */ |
995 | + |
996 | +#if __XEN_INTERFACE_VERSION__ < 0x00030203 |
997 | +/* |
998 | + * Legacy hypercall interface: |
999 | + * As above, except the entry sequence to the hypervisor is: |
1000 | + * mov $hypercall-number*32,%eax ; int $0x82 |
1001 | + */ |
1002 | +#define TRAP_INSTR "int $0x82" |
1003 | +#endif |
1004 | + |
1005 | +/* |
1006 | + * These flat segments are in the Xen-private section of every GDT. Since these |
1007 | + * are also present in the initial GDT, many OSes will be able to avoid |
1008 | + * installing their own GDT. |
1009 | + */ |
1010 | +#define FLAT_RING1_CS 0xe019 /* GDT index 259 */ |
1011 | +#define FLAT_RING1_DS 0xe021 /* GDT index 260 */ |
1012 | +#define FLAT_RING1_SS 0xe021 /* GDT index 260 */ |
1013 | +#define FLAT_RING3_CS 0xe02b /* GDT index 261 */ |
1014 | +#define FLAT_RING3_DS 0xe033 /* GDT index 262 */ |
1015 | +#define FLAT_RING3_SS 0xe033 /* GDT index 262 */ |
1016 | + |
1017 | +#define FLAT_KERNEL_CS FLAT_RING1_CS |
1018 | +#define FLAT_KERNEL_DS FLAT_RING1_DS |
1019 | +#define FLAT_KERNEL_SS FLAT_RING1_SS |
1020 | +#define FLAT_USER_CS FLAT_RING3_CS |
1021 | +#define FLAT_USER_DS FLAT_RING3_DS |
1022 | +#define FLAT_USER_SS FLAT_RING3_SS |
1023 | + |
1024 | +#define __HYPERVISOR_VIRT_START_PAE 0xF5800000 |
1025 | +#define __MACH2PHYS_VIRT_START_PAE 0xF5800000 |
1026 | +#define __MACH2PHYS_VIRT_END_PAE 0xF6800000 |
1027 | +#define HYPERVISOR_VIRT_START_PAE \ |
1028 | + mk_unsigned_long(__HYPERVISOR_VIRT_START_PAE) |
1029 | +#define MACH2PHYS_VIRT_START_PAE \ |
1030 | + mk_unsigned_long(__MACH2PHYS_VIRT_START_PAE) |
1031 | +#define MACH2PHYS_VIRT_END_PAE \ |
1032 | + mk_unsigned_long(__MACH2PHYS_VIRT_END_PAE) |
1033 | + |
1034 | +#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000 |
1035 | +#define __MACH2PHYS_VIRT_START_NONPAE 0xFC000000 |
1036 | +#define __MACH2PHYS_VIRT_END_NONPAE 0xFC400000 |
1037 | +#define HYPERVISOR_VIRT_START_NONPAE \ |
1038 | + mk_unsigned_long(__HYPERVISOR_VIRT_START_NONPAE) |
1039 | +#define MACH2PHYS_VIRT_START_NONPAE \ |
1040 | + mk_unsigned_long(__MACH2PHYS_VIRT_START_NONPAE) |
1041 | +#define MACH2PHYS_VIRT_END_NONPAE \ |
1042 | + mk_unsigned_long(__MACH2PHYS_VIRT_END_NONPAE) |
1043 | + |
1044 | +#ifdef CONFIG_X86_PAE |
1045 | +#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE |
1046 | +#define __MACH2PHYS_VIRT_START __MACH2PHYS_VIRT_START_PAE |
1047 | +#define __MACH2PHYS_VIRT_END __MACH2PHYS_VIRT_END_PAE |
1048 | +#else |
1049 | +#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_NONPAE |
1050 | +#define __MACH2PHYS_VIRT_START __MACH2PHYS_VIRT_START_NONPAE |
1051 | +#define __MACH2PHYS_VIRT_END __MACH2PHYS_VIRT_END_NONPAE |
1052 | +#endif |
1053 | + |
1054 | +#ifndef HYPERVISOR_VIRT_START |
1055 | +#define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START) |
1056 | +#endif |
1057 | + |
1058 | +#define MACH2PHYS_VIRT_START mk_unsigned_long(__MACH2PHYS_VIRT_START) |
1059 | +#define MACH2PHYS_VIRT_END mk_unsigned_long(__MACH2PHYS_VIRT_END) |
1060 | +#define MACH2PHYS_NR_ENTRIES ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>2) |
1061 | +#ifndef machine_to_phys_mapping |
1062 | +#define machine_to_phys_mapping ((unsigned long *)MACH2PHYS_VIRT_START) |
1063 | +#endif |
1064 | + |
1065 | +/* 32-/64-bit invariability for control interfaces (domctl/sysctl). */ |
1066 | +#if defined(__XEN__) || defined(__XEN_TOOLS__) |
1067 | +#undef ___DEFINE_XEN_GUEST_HANDLE |
1068 | +#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ |
1069 | + typedef struct { type *p; } \ |
1070 | + __guest_handle_ ## name; \ |
1071 | + typedef struct { union { type *p; uint64_aligned_t q; }; } \ |
1072 | + __guest_handle_64_ ## name |
1073 | +#undef set_xen_guest_handle |
1074 | +#define set_xen_guest_handle(hnd, val) \ |
1075 | + do { if ( sizeof(hnd) == 8 ) *(uint64_t *)&(hnd) = 0; \ |
1076 | + (hnd).p = val; \ |
1077 | + } while ( 0 ) |
1078 | +#define uint64_aligned_t uint64_t __attribute__((aligned(8))) |
1079 | +#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name |
1080 | +#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name) |
1081 | +#endif |
1082 | + |
1083 | +#ifndef __ASSEMBLY__ |
1084 | + |
1085 | +struct cpu_user_regs { |
1086 | + uint32_t ebx; |
1087 | + uint32_t ecx; |
1088 | + uint32_t edx; |
1089 | + uint32_t esi; |
1090 | + uint32_t edi; |
1091 | + uint32_t ebp; |
1092 | + uint32_t eax; |
1093 | + uint16_t error_code; /* private */ |
1094 | + uint16_t entry_vector; /* private */ |
1095 | + uint32_t eip; |
1096 | + uint16_t cs; |
1097 | + uint8_t saved_upcall_mask; |
1098 | + uint8_t _pad0; |
1099 | + uint32_t eflags; /* eflags.IF == !saved_upcall_mask */ |
1100 | + uint32_t esp; |
1101 | + uint16_t ss, _pad1; |
1102 | + uint16_t es, _pad2; |
1103 | + uint16_t ds, _pad3; |
1104 | + uint16_t fs, _pad4; |
1105 | + uint16_t gs, _pad5; |
1106 | +}; |
1107 | +typedef struct cpu_user_regs cpu_user_regs_t; |
1108 | +DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t); |
1109 | + |
1110 | +/* |
1111 | + * Page-directory addresses above 4GB do not fit into architectural %cr3. |
1112 | + * When accessing %cr3, or equivalent field in vcpu_guest_context, guests |
1113 | + * must use the following accessor macros to pack/unpack valid MFNs. |
1114 | + */ |
1115 | +#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20)) |
1116 | +#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20)) |
1117 | + |
1118 | +struct arch_vcpu_info { |
1119 | + unsigned long cr2; |
1120 | + unsigned long pad[5]; /* sizeof(vcpu_info_t) == 64 */ |
1121 | +}; |
1122 | +typedef struct arch_vcpu_info arch_vcpu_info_t; |
1123 | + |
1124 | +struct xen_callback { |
1125 | + unsigned long cs; |
1126 | + unsigned long eip; |
1127 | +}; |
1128 | +typedef struct xen_callback xen_callback_t; |
1129 | + |
1130 | +#endif /* !__ASSEMBLY__ */ |
1131 | + |
1132 | +#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */ |
1133 | + |
1134 | +/* |
1135 | + * Local variables: |
1136 | + * mode: C |
1137 | + * c-set-style: "BSD" |
1138 | + * c-basic-offset: 4 |
1139 | + * tab-width: 4 |
1140 | + * indent-tabs-mode: nil |
1141 | + * End: |
1142 | + */ |
1143 | Index: head-2008-04-15/include/xen/interface/arch-x86/xen-x86_64.h |
1144 | =================================================================== |
1145 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1146 | +++ head-2008-04-15/include/xen/interface/arch-x86/xen-x86_64.h 2008-04-02 12:34:02.000000000 +0200 |
1147 | @@ -0,0 +1,212 @@ |
1148 | +/****************************************************************************** |
1149 | + * xen-x86_64.h |
1150 | + * |
1151 | + * Guest OS interface to x86 64-bit Xen. |
1152 | + * |
1153 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1154 | + * of this software and associated documentation files (the "Software"), to |
1155 | + * deal in the Software without restriction, including without limitation the |
1156 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1157 | + * sell copies of the Software, and to permit persons to whom the Software is |
1158 | + * furnished to do so, subject to the following conditions: |
1159 | + * |
1160 | + * The above copyright notice and this permission notice shall be included in |
1161 | + * all copies or substantial portions of the Software. |
1162 | + * |
1163 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1164 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1165 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1166 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1167 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1168 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1169 | + * DEALINGS IN THE SOFTWARE. |
1170 | + * |
1171 | + * Copyright (c) 2004-2006, K A Fraser |
1172 | + */ |
1173 | + |
1174 | +#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ |
1175 | +#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ |
1176 | + |
1177 | +/* |
1178 | + * Hypercall interface: |
1179 | + * Input: %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5) |
1180 | + * Output: %rax |
1181 | + * Access is via hypercall page (set up by guest loader or via a Xen MSR): |
1182 | + * call hypercall_page + hypercall-number * 32 |
1183 | + * Clobbered: argument registers (e.g., 2-arg hypercall clobbers %rdi,%rsi) |
1184 | + */ |
1185 | + |
1186 | +#if __XEN_INTERFACE_VERSION__ < 0x00030203 |
1187 | +/* |
1188 | + * Legacy hypercall interface: |
1189 | + * As above, except the entry sequence to the hypervisor is: |
1190 | + * mov $hypercall-number*32,%eax ; syscall |
1191 | + * Clobbered: %rcx, %r11, argument registers (as above) |
1192 | + */ |
1193 | +#define TRAP_INSTR "syscall" |
1194 | +#endif |
1195 | + |
1196 | +/* |
1197 | + * 64-bit segment selectors |
1198 | + * These flat segments are in the Xen-private section of every GDT. Since these |
1199 | + * are also present in the initial GDT, many OSes will be able to avoid |
1200 | + * installing their own GDT. |
1201 | + */ |
1202 | + |
1203 | +#define FLAT_RING3_CS32 0xe023 /* GDT index 260 */ |
1204 | +#define FLAT_RING3_CS64 0xe033 /* GDT index 261 */ |
1205 | +#define FLAT_RING3_DS32 0xe02b /* GDT index 262 */ |
1206 | +#define FLAT_RING3_DS64 0x0000 /* NULL selector */ |
1207 | +#define FLAT_RING3_SS32 0xe02b /* GDT index 262 */ |
1208 | +#define FLAT_RING3_SS64 0xe02b /* GDT index 262 */ |
1209 | + |
1210 | +#define FLAT_KERNEL_DS64 FLAT_RING3_DS64 |
1211 | +#define FLAT_KERNEL_DS32 FLAT_RING3_DS32 |
1212 | +#define FLAT_KERNEL_DS FLAT_KERNEL_DS64 |
1213 | +#define FLAT_KERNEL_CS64 FLAT_RING3_CS64 |
1214 | +#define FLAT_KERNEL_CS32 FLAT_RING3_CS32 |
1215 | +#define FLAT_KERNEL_CS FLAT_KERNEL_CS64 |
1216 | +#define FLAT_KERNEL_SS64 FLAT_RING3_SS64 |
1217 | +#define FLAT_KERNEL_SS32 FLAT_RING3_SS32 |
1218 | +#define FLAT_KERNEL_SS FLAT_KERNEL_SS64 |
1219 | + |
1220 | +#define FLAT_USER_DS64 FLAT_RING3_DS64 |
1221 | +#define FLAT_USER_DS32 FLAT_RING3_DS32 |
1222 | +#define FLAT_USER_DS FLAT_USER_DS64 |
1223 | +#define FLAT_USER_CS64 FLAT_RING3_CS64 |
1224 | +#define FLAT_USER_CS32 FLAT_RING3_CS32 |
1225 | +#define FLAT_USER_CS FLAT_USER_CS64 |
1226 | +#define FLAT_USER_SS64 FLAT_RING3_SS64 |
1227 | +#define FLAT_USER_SS32 FLAT_RING3_SS32 |
1228 | +#define FLAT_USER_SS FLAT_USER_SS64 |
1229 | + |
1230 | +#define __HYPERVISOR_VIRT_START 0xFFFF800000000000 |
1231 | +#define __HYPERVISOR_VIRT_END 0xFFFF880000000000 |
1232 | +#define __MACH2PHYS_VIRT_START 0xFFFF800000000000 |
1233 | +#define __MACH2PHYS_VIRT_END 0xFFFF804000000000 |
1234 | + |
1235 | +#ifndef HYPERVISOR_VIRT_START |
1236 | +#define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START) |
1237 | +#define HYPERVISOR_VIRT_END mk_unsigned_long(__HYPERVISOR_VIRT_END) |
1238 | +#endif |
1239 | + |
1240 | +#define MACH2PHYS_VIRT_START mk_unsigned_long(__MACH2PHYS_VIRT_START) |
1241 | +#define MACH2PHYS_VIRT_END mk_unsigned_long(__MACH2PHYS_VIRT_END) |
1242 | +#define MACH2PHYS_NR_ENTRIES ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>3) |
1243 | +#ifndef machine_to_phys_mapping |
1244 | +#define machine_to_phys_mapping ((unsigned long *)HYPERVISOR_VIRT_START) |
1245 | +#endif |
1246 | + |
1247 | +/* |
1248 | + * int HYPERVISOR_set_segment_base(unsigned int which, unsigned long base) |
1249 | + * @which == SEGBASE_* ; @base == 64-bit base address |
1250 | + * Returns 0 on success. |
1251 | + */ |
1252 | +#define SEGBASE_FS 0 |
1253 | +#define SEGBASE_GS_USER 1 |
1254 | +#define SEGBASE_GS_KERNEL 2 |
1255 | +#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] */ |
1256 | + |
1257 | +/* |
1258 | + * int HYPERVISOR_iret(void) |
1259 | + * All arguments are on the kernel stack, in the following format. |
1260 | + * Never returns if successful. Current kernel context is lost. |
1261 | + * The saved CS is mapped as follows: |
1262 | + * RING0 -> RING3 kernel mode. |
1263 | + * RING1 -> RING3 kernel mode. |
1264 | + * RING2 -> RING3 kernel mode. |
1265 | + * RING3 -> RING3 user mode. |
1266 | + * However RING0 indicates that the guest kernel should return to iteself |
1267 | + * directly with |
1268 | + * orb $3,1*8(%rsp) |
1269 | + * iretq |
1270 | + * If flags contains VGCF_in_syscall: |
1271 | + * Restore RAX, RIP, RFLAGS, RSP. |
1272 | + * Discard R11, RCX, CS, SS. |
1273 | + * Otherwise: |
1274 | + * Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP. |
1275 | + * All other registers are saved on hypercall entry and restored to user. |
1276 | + */ |
1277 | +/* Guest exited in SYSCALL context? Return to guest with SYSRET? */ |
1278 | +#define _VGCF_in_syscall 8 |
1279 | +#define VGCF_in_syscall (1<<_VGCF_in_syscall) |
1280 | +#define VGCF_IN_SYSCALL VGCF_in_syscall |
1281 | + |
1282 | +#ifndef __ASSEMBLY__ |
1283 | + |
1284 | +struct iret_context { |
1285 | + /* Top of stack (%rsp at point of hypercall). */ |
1286 | + uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss; |
1287 | + /* Bottom of iret stack frame. */ |
1288 | +}; |
1289 | + |
1290 | +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) |
1291 | +/* Anonymous union includes both 32- and 64-bit names (e.g., eax/rax). */ |
1292 | +#define __DECL_REG(name) union { \ |
1293 | + uint64_t r ## name, e ## name; \ |
1294 | + uint32_t _e ## name; \ |
1295 | +} |
1296 | +#else |
1297 | +/* Non-gcc sources must always use the proper 64-bit name (e.g., rax). */ |
1298 | +#define __DECL_REG(name) uint64_t r ## name |
1299 | +#endif |
1300 | + |
1301 | +struct cpu_user_regs { |
1302 | + uint64_t r15; |
1303 | + uint64_t r14; |
1304 | + uint64_t r13; |
1305 | + uint64_t r12; |
1306 | + __DECL_REG(bp); |
1307 | + __DECL_REG(bx); |
1308 | + uint64_t r11; |
1309 | + uint64_t r10; |
1310 | + uint64_t r9; |
1311 | + uint64_t r8; |
1312 | + __DECL_REG(ax); |
1313 | + __DECL_REG(cx); |
1314 | + __DECL_REG(dx); |
1315 | + __DECL_REG(si); |
1316 | + __DECL_REG(di); |
1317 | + uint32_t error_code; /* private */ |
1318 | + uint32_t entry_vector; /* private */ |
1319 | + __DECL_REG(ip); |
1320 | + uint16_t cs, _pad0[1]; |
1321 | + uint8_t saved_upcall_mask; |
1322 | + uint8_t _pad1[3]; |
1323 | + __DECL_REG(flags); /* rflags.IF == !saved_upcall_mask */ |
1324 | + __DECL_REG(sp); |
1325 | + uint16_t ss, _pad2[3]; |
1326 | + uint16_t es, _pad3[3]; |
1327 | + uint16_t ds, _pad4[3]; |
1328 | + uint16_t fs, _pad5[3]; /* Non-zero => takes precedence over fs_base. */ |
1329 | + uint16_t gs, _pad6[3]; /* Non-zero => takes precedence over gs_base_usr. */ |
1330 | +}; |
1331 | +typedef struct cpu_user_regs cpu_user_regs_t; |
1332 | +DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t); |
1333 | + |
1334 | +#undef __DECL_REG |
1335 | + |
1336 | +#define xen_pfn_to_cr3(pfn) ((unsigned long)(pfn) << 12) |
1337 | +#define xen_cr3_to_pfn(cr3) ((unsigned long)(cr3) >> 12) |
1338 | + |
1339 | +struct arch_vcpu_info { |
1340 | + unsigned long cr2; |
1341 | + unsigned long pad; /* sizeof(vcpu_info_t) == 64 */ |
1342 | +}; |
1343 | +typedef struct arch_vcpu_info arch_vcpu_info_t; |
1344 | + |
1345 | +typedef unsigned long xen_callback_t; |
1346 | + |
1347 | +#endif /* !__ASSEMBLY__ */ |
1348 | + |
1349 | +#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */ |
1350 | + |
1351 | +/* |
1352 | + * Local variables: |
1353 | + * mode: C |
1354 | + * c-set-style: "BSD" |
1355 | + * c-basic-offset: 4 |
1356 | + * tab-width: 4 |
1357 | + * indent-tabs-mode: nil |
1358 | + * End: |
1359 | + */ |
1360 | Index: head-2008-04-15/include/xen/interface/arch-x86/xen.h |
1361 | =================================================================== |
1362 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1363 | +++ head-2008-04-15/include/xen/interface/arch-x86/xen.h 2008-04-02 12:34:02.000000000 +0200 |
1364 | @@ -0,0 +1,200 @@ |
1365 | +/****************************************************************************** |
1366 | + * arch-x86/xen.h |
1367 | + * |
1368 | + * Guest OS interface to x86 Xen. |
1369 | + * |
1370 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1371 | + * of this software and associated documentation files (the "Software"), to |
1372 | + * deal in the Software without restriction, including without limitation the |
1373 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1374 | + * sell copies of the Software, and to permit persons to whom the Software is |
1375 | + * furnished to do so, subject to the following conditions: |
1376 | + * |
1377 | + * The above copyright notice and this permission notice shall be included in |
1378 | + * all copies or substantial portions of the Software. |
1379 | + * |
1380 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1381 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1382 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1383 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1384 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1385 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1386 | + * DEALINGS IN THE SOFTWARE. |
1387 | + * |
1388 | + * Copyright (c) 2004-2006, K A Fraser |
1389 | + */ |
1390 | + |
1391 | +#include "../xen.h" |
1392 | + |
1393 | +#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__ |
1394 | +#define __XEN_PUBLIC_ARCH_X86_XEN_H__ |
1395 | + |
1396 | +/* Structural guest handles introduced in 0x00030201. */ |
1397 | +#if __XEN_INTERFACE_VERSION__ >= 0x00030201 |
1398 | +#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ |
1399 | + typedef struct { type *p; } __guest_handle_ ## name |
1400 | +#else |
1401 | +#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ |
1402 | + typedef type * __guest_handle_ ## name |
1403 | +#endif |
1404 | + |
1405 | +#define __DEFINE_XEN_GUEST_HANDLE(name, type) \ |
1406 | + ___DEFINE_XEN_GUEST_HANDLE(name, type); \ |
1407 | + ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type) |
1408 | +#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name) |
1409 | +#define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name |
1410 | +#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name) |
1411 | +#define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0) |
1412 | +#ifdef __XEN_TOOLS__ |
1413 | +#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0) |
1414 | +#endif |
1415 | + |
1416 | +#if defined(__i386__) |
1417 | +#include "xen-x86_32.h" |
1418 | +#elif defined(__x86_64__) |
1419 | +#include "xen-x86_64.h" |
1420 | +#endif |
1421 | + |
1422 | +#ifndef __ASSEMBLY__ |
1423 | +typedef unsigned long xen_pfn_t; |
1424 | +#define PRI_xen_pfn "lx" |
1425 | +#endif |
1426 | + |
1427 | +/* |
1428 | + * SEGMENT DESCRIPTOR TABLES |
1429 | + */ |
1430 | +/* |
1431 | + * A number of GDT entries are reserved by Xen. These are not situated at the |
1432 | + * start of the GDT because some stupid OSes export hard-coded selector values |
1433 | + * in their ABI. These hard-coded values are always near the start of the GDT, |
1434 | + * so Xen places itself out of the way, at the far end of the GDT. |
1435 | + */ |
1436 | +#define FIRST_RESERVED_GDT_PAGE 14 |
1437 | +#define FIRST_RESERVED_GDT_BYTE (FIRST_RESERVED_GDT_PAGE * 4096) |
1438 | +#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8) |
1439 | + |
1440 | +/* Maximum number of virtual CPUs in multi-processor guests. */ |
1441 | +#define MAX_VIRT_CPUS 32 |
1442 | + |
1443 | +#ifndef __ASSEMBLY__ |
1444 | + |
1445 | +typedef unsigned long xen_ulong_t; |
1446 | + |
1447 | +/* |
1448 | + * Send an array of these to HYPERVISOR_set_trap_table(). |
1449 | + * The privilege level specifies which modes may enter a trap via a software |
1450 | + * interrupt. On x86/64, since rings 1 and 2 are unavailable, we allocate |
1451 | + * privilege levels as follows: |
1452 | + * Level == 0: Noone may enter |
1453 | + * Level == 1: Kernel may enter |
1454 | + * Level == 2: Kernel may enter |
1455 | + * Level == 3: Everyone may enter |
1456 | + */ |
1457 | +#define TI_GET_DPL(_ti) ((_ti)->flags & 3) |
1458 | +#define TI_GET_IF(_ti) ((_ti)->flags & 4) |
1459 | +#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |= (_dpl)) |
1460 | +#define TI_SET_IF(_ti,_if) ((_ti)->flags |= ((!!(_if))<<2)) |
1461 | +struct trap_info { |
1462 | + uint8_t vector; /* exception vector */ |
1463 | + uint8_t flags; /* 0-3: privilege level; 4: clear event enable? */ |
1464 | + uint16_t cs; /* code selector */ |
1465 | + unsigned long address; /* code offset */ |
1466 | +}; |
1467 | +typedef struct trap_info trap_info_t; |
1468 | +DEFINE_XEN_GUEST_HANDLE(trap_info_t); |
1469 | + |
1470 | +typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */ |
1471 | + |
1472 | +/* |
1473 | + * The following is all CPU context. Note that the fpu_ctxt block is filled |
1474 | + * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used. |
1475 | + */ |
1476 | +struct vcpu_guest_context { |
1477 | + /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR. */ |
1478 | + struct { char x[512]; } fpu_ctxt; /* User-level FPU registers */ |
1479 | +#define VGCF_I387_VALID (1<<0) |
1480 | +#define VGCF_IN_KERNEL (1<<2) |
1481 | +#define _VGCF_i387_valid 0 |
1482 | +#define VGCF_i387_valid (1<<_VGCF_i387_valid) |
1483 | +#define _VGCF_in_kernel 2 |
1484 | +#define VGCF_in_kernel (1<<_VGCF_in_kernel) |
1485 | +#define _VGCF_failsafe_disables_events 3 |
1486 | +#define VGCF_failsafe_disables_events (1<<_VGCF_failsafe_disables_events) |
1487 | +#define _VGCF_syscall_disables_events 4 |
1488 | +#define VGCF_syscall_disables_events (1<<_VGCF_syscall_disables_events) |
1489 | +#define _VGCF_online 5 |
1490 | +#define VGCF_online (1<<_VGCF_online) |
1491 | + unsigned long flags; /* VGCF_* flags */ |
1492 | + struct cpu_user_regs user_regs; /* User-level CPU registers */ |
1493 | + struct trap_info trap_ctxt[256]; /* Virtual IDT */ |
1494 | + unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */ |
1495 | + unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */ |
1496 | + unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */ |
1497 | + /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */ |
1498 | + unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */ |
1499 | + unsigned long debugreg[8]; /* DB0-DB7 (debug registers) */ |
1500 | +#ifdef __i386__ |
1501 | + unsigned long event_callback_cs; /* CS:EIP of event callback */ |
1502 | + unsigned long event_callback_eip; |
1503 | + unsigned long failsafe_callback_cs; /* CS:EIP of failsafe callback */ |
1504 | + unsigned long failsafe_callback_eip; |
1505 | +#else |
1506 | + unsigned long event_callback_eip; |
1507 | + unsigned long failsafe_callback_eip; |
1508 | +#ifdef __XEN__ |
1509 | + union { |
1510 | + unsigned long syscall_callback_eip; |
1511 | + struct { |
1512 | + unsigned int event_callback_cs; /* compat CS of event cb */ |
1513 | + unsigned int failsafe_callback_cs; /* compat CS of failsafe cb */ |
1514 | + }; |
1515 | + }; |
1516 | +#else |
1517 | + unsigned long syscall_callback_eip; |
1518 | +#endif |
1519 | +#endif |
1520 | + unsigned long vm_assist; /* VMASST_TYPE_* bitmap */ |
1521 | +#ifdef __x86_64__ |
1522 | + /* Segment base addresses. */ |
1523 | + uint64_t fs_base; |
1524 | + uint64_t gs_base_kernel; |
1525 | + uint64_t gs_base_user; |
1526 | +#endif |
1527 | +}; |
1528 | +typedef struct vcpu_guest_context vcpu_guest_context_t; |
1529 | +DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); |
1530 | + |
1531 | +struct arch_shared_info { |
1532 | + unsigned long max_pfn; /* max pfn that appears in table */ |
1533 | + /* Frame containing list of mfns containing list of mfns containing p2m. */ |
1534 | + xen_pfn_t pfn_to_mfn_frame_list_list; |
1535 | + unsigned long nmi_reason; |
1536 | + uint64_t pad[32]; |
1537 | +}; |
1538 | +typedef struct arch_shared_info arch_shared_info_t; |
1539 | + |
1540 | +#endif /* !__ASSEMBLY__ */ |
1541 | + |
1542 | +/* |
1543 | + * Prefix forces emulation of some non-trapping instructions. |
1544 | + * Currently only CPUID. |
1545 | + */ |
1546 | +#ifdef __ASSEMBLY__ |
1547 | +#define XEN_EMULATE_PREFIX .byte 0x0f,0x0b,0x78,0x65,0x6e ; |
1548 | +#define XEN_CPUID XEN_EMULATE_PREFIX cpuid |
1549 | +#else |
1550 | +#define XEN_EMULATE_PREFIX ".byte 0x0f,0x0b,0x78,0x65,0x6e ; " |
1551 | +#define XEN_CPUID XEN_EMULATE_PREFIX "cpuid" |
1552 | +#endif |
1553 | + |
1554 | +#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */ |
1555 | + |
1556 | +/* |
1557 | + * Local variables: |
1558 | + * mode: C |
1559 | + * c-set-style: "BSD" |
1560 | + * c-basic-offset: 4 |
1561 | + * tab-width: 4 |
1562 | + * indent-tabs-mode: nil |
1563 | + * End: |
1564 | + */ |
1565 | Index: head-2008-04-15/include/xen/interface/arch-x86_32.h |
1566 | =================================================================== |
1567 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1568 | +++ head-2008-04-15/include/xen/interface/arch-x86_32.h 2007-06-12 13:14:19.000000000 +0200 |
1569 | @@ -0,0 +1,27 @@ |
1570 | +/****************************************************************************** |
1571 | + * arch-x86_32.h |
1572 | + * |
1573 | + * Guest OS interface to x86 32-bit Xen. |
1574 | + * |
1575 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1576 | + * of this software and associated documentation files (the "Software"), to |
1577 | + * deal in the Software without restriction, including without limitation the |
1578 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1579 | + * sell copies of the Software, and to permit persons to whom the Software is |
1580 | + * furnished to do so, subject to the following conditions: |
1581 | + * |
1582 | + * The above copyright notice and this permission notice shall be included in |
1583 | + * all copies or substantial portions of the Software. |
1584 | + * |
1585 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1586 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1587 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1588 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1589 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1590 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1591 | + * DEALINGS IN THE SOFTWARE. |
1592 | + * |
1593 | + * Copyright (c) 2004-2006, K A Fraser |
1594 | + */ |
1595 | + |
1596 | +#include "arch-x86/xen.h" |
1597 | Index: head-2008-04-15/include/xen/interface/arch-x86_64.h |
1598 | =================================================================== |
1599 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1600 | +++ head-2008-04-15/include/xen/interface/arch-x86_64.h 2007-06-12 13:14:19.000000000 +0200 |
1601 | @@ -0,0 +1,27 @@ |
1602 | +/****************************************************************************** |
1603 | + * arch-x86_64.h |
1604 | + * |
1605 | + * Guest OS interface to x86 64-bit Xen. |
1606 | + * |
1607 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1608 | + * of this software and associated documentation files (the "Software"), to |
1609 | + * deal in the Software without restriction, including without limitation the |
1610 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1611 | + * sell copies of the Software, and to permit persons to whom the Software is |
1612 | + * furnished to do so, subject to the following conditions: |
1613 | + * |
1614 | + * The above copyright notice and this permission notice shall be included in |
1615 | + * all copies or substantial portions of the Software. |
1616 | + * |
1617 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1618 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1619 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1620 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1621 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1622 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1623 | + * DEALINGS IN THE SOFTWARE. |
1624 | + * |
1625 | + * Copyright (c) 2004-2006, K A Fraser |
1626 | + */ |
1627 | + |
1628 | +#include "arch-x86/xen.h" |
1629 | Index: head-2008-04-15/include/xen/interface/callback.h |
1630 | =================================================================== |
1631 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1632 | +++ head-2008-04-15/include/xen/interface/callback.h 2007-11-02 17:34:23.000000000 +0100 |
1633 | @@ -0,0 +1,121 @@ |
1634 | +/****************************************************************************** |
1635 | + * callback.h |
1636 | + * |
1637 | + * Register guest OS callbacks with Xen. |
1638 | + * |
1639 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1640 | + * of this software and associated documentation files (the "Software"), to |
1641 | + * deal in the Software without restriction, including without limitation the |
1642 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1643 | + * sell copies of the Software, and to permit persons to whom the Software is |
1644 | + * furnished to do so, subject to the following conditions: |
1645 | + * |
1646 | + * The above copyright notice and this permission notice shall be included in |
1647 | + * all copies or substantial portions of the Software. |
1648 | + * |
1649 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1650 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1651 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1652 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1653 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1654 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1655 | + * DEALINGS IN THE SOFTWARE. |
1656 | + * |
1657 | + * Copyright (c) 2006, Ian Campbell |
1658 | + */ |
1659 | + |
1660 | +#ifndef __XEN_PUBLIC_CALLBACK_H__ |
1661 | +#define __XEN_PUBLIC_CALLBACK_H__ |
1662 | + |
1663 | +#include "xen.h" |
1664 | + |
1665 | +/* |
1666 | + * Prototype for this hypercall is: |
1667 | + * long callback_op(int cmd, void *extra_args) |
1668 | + * @cmd == CALLBACKOP_??? (callback operation). |
1669 | + * @extra_args == Operation-specific extra arguments (NULL if none). |
1670 | + */ |
1671 | + |
1672 | +/* ia64, x86: Callback for event delivery. */ |
1673 | +#define CALLBACKTYPE_event 0 |
1674 | + |
1675 | +/* x86: Failsafe callback when guest state cannot be restored by Xen. */ |
1676 | +#define CALLBACKTYPE_failsafe 1 |
1677 | + |
1678 | +/* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */ |
1679 | +#define CALLBACKTYPE_syscall 2 |
1680 | + |
1681 | +/* |
1682 | + * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel |
1683 | + * feature is enabled. Do not use this callback type in new code. |
1684 | + */ |
1685 | +#define CALLBACKTYPE_sysenter_deprecated 3 |
1686 | + |
1687 | +/* x86: Callback for NMI delivery. */ |
1688 | +#define CALLBACKTYPE_nmi 4 |
1689 | + |
1690 | +/* |
1691 | + * x86: sysenter is only available as follows: |
1692 | + * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled |
1693 | + * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs |
1694 | + * ('32-on-32-on-64', '32-on-64-on-64') |
1695 | + * [nb. also 64-bit guest applications on Intel CPUs |
1696 | + * ('64-on-64-on-64'), but syscall is preferred] |
1697 | + */ |
1698 | +#define CALLBACKTYPE_sysenter 5 |
1699 | + |
1700 | +/* |
1701 | + * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs |
1702 | + * ('32-on-32-on-64', '32-on-64-on-64') |
1703 | + */ |
1704 | +#define CALLBACKTYPE_syscall32 7 |
1705 | + |
1706 | +/* |
1707 | + * Disable event deliver during callback? This flag is ignored for event and |
1708 | + * NMI callbacks: event delivery is unconditionally disabled. |
1709 | + */ |
1710 | +#define _CALLBACKF_mask_events 0 |
1711 | +#define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events) |
1712 | + |
1713 | +/* |
1714 | + * Register a callback. |
1715 | + */ |
1716 | +#define CALLBACKOP_register 0 |
1717 | +struct callback_register { |
1718 | + uint16_t type; |
1719 | + uint16_t flags; |
1720 | + xen_callback_t address; |
1721 | +}; |
1722 | +typedef struct callback_register callback_register_t; |
1723 | +DEFINE_XEN_GUEST_HANDLE(callback_register_t); |
1724 | + |
1725 | +/* |
1726 | + * Unregister a callback. |
1727 | + * |
1728 | + * Not all callbacks can be unregistered. -EINVAL will be returned if |
1729 | + * you attempt to unregister such a callback. |
1730 | + */ |
1731 | +#define CALLBACKOP_unregister 1 |
1732 | +struct callback_unregister { |
1733 | + uint16_t type; |
1734 | + uint16_t _unused; |
1735 | +}; |
1736 | +typedef struct callback_unregister callback_unregister_t; |
1737 | +DEFINE_XEN_GUEST_HANDLE(callback_unregister_t); |
1738 | + |
1739 | +#if __XEN_INTERFACE_VERSION__ < 0x00030207 |
1740 | +#undef CALLBACKTYPE_sysenter |
1741 | +#define CALLBACKTYPE_sysenter CALLBACKTYPE_sysenter_deprecated |
1742 | +#endif |
1743 | + |
1744 | +#endif /* __XEN_PUBLIC_CALLBACK_H__ */ |
1745 | + |
1746 | +/* |
1747 | + * Local variables: |
1748 | + * mode: C |
1749 | + * c-set-style: "BSD" |
1750 | + * c-basic-offset: 4 |
1751 | + * tab-width: 4 |
1752 | + * indent-tabs-mode: nil |
1753 | + * End: |
1754 | + */ |
1755 | Index: head-2008-04-15/include/xen/interface/dom0_ops.h |
1756 | =================================================================== |
1757 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1758 | +++ head-2008-04-15/include/xen/interface/dom0_ops.h 2007-06-12 13:14:19.000000000 +0200 |
1759 | @@ -0,0 +1,120 @@ |
1760 | +/****************************************************************************** |
1761 | + * dom0_ops.h |
1762 | + * |
1763 | + * Process command requests from domain-0 guest OS. |
1764 | + * |
1765 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1766 | + * of this software and associated documentation files (the "Software"), to |
1767 | + * deal in the Software without restriction, including without limitation the |
1768 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1769 | + * sell copies of the Software, and to permit persons to whom the Software is |
1770 | + * furnished to do so, subject to the following conditions: |
1771 | + * |
1772 | + * The above copyright notice and this permission notice shall be included in |
1773 | + * all copies or substantial portions of the Software. |
1774 | + * |
1775 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1776 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1777 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1778 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1779 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1780 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1781 | + * DEALINGS IN THE SOFTWARE. |
1782 | + * |
1783 | + * Copyright (c) 2002-2003, B Dragovic |
1784 | + * Copyright (c) 2002-2006, K Fraser |
1785 | + */ |
1786 | + |
1787 | +#ifndef __XEN_PUBLIC_DOM0_OPS_H__ |
1788 | +#define __XEN_PUBLIC_DOM0_OPS_H__ |
1789 | + |
1790 | +#include "xen.h" |
1791 | +#include "platform.h" |
1792 | + |
1793 | +#if __XEN_INTERFACE_VERSION__ >= 0x00030204 |
1794 | +#error "dom0_ops.h is a compatibility interface only" |
1795 | +#endif |
1796 | + |
1797 | +#define DOM0_INTERFACE_VERSION XENPF_INTERFACE_VERSION |
1798 | + |
1799 | +#define DOM0_SETTIME XENPF_settime |
1800 | +#define dom0_settime xenpf_settime |
1801 | +#define dom0_settime_t xenpf_settime_t |
1802 | + |
1803 | +#define DOM0_ADD_MEMTYPE XENPF_add_memtype |
1804 | +#define dom0_add_memtype xenpf_add_memtype |
1805 | +#define dom0_add_memtype_t xenpf_add_memtype_t |
1806 | + |
1807 | +#define DOM0_DEL_MEMTYPE XENPF_del_memtype |
1808 | +#define dom0_del_memtype xenpf_del_memtype |
1809 | +#define dom0_del_memtype_t xenpf_del_memtype_t |
1810 | + |
1811 | +#define DOM0_READ_MEMTYPE XENPF_read_memtype |
1812 | +#define dom0_read_memtype xenpf_read_memtype |
1813 | +#define dom0_read_memtype_t xenpf_read_memtype_t |
1814 | + |
1815 | +#define DOM0_MICROCODE XENPF_microcode_update |
1816 | +#define dom0_microcode xenpf_microcode_update |
1817 | +#define dom0_microcode_t xenpf_microcode_update_t |
1818 | + |
1819 | +#define DOM0_PLATFORM_QUIRK XENPF_platform_quirk |
1820 | +#define dom0_platform_quirk xenpf_platform_quirk |
1821 | +#define dom0_platform_quirk_t xenpf_platform_quirk_t |
1822 | + |
1823 | +typedef uint64_t cpumap_t; |
1824 | + |
1825 | +/* Unsupported legacy operation -- defined for API compatibility. */ |
1826 | +#define DOM0_MSR 15 |
1827 | +struct dom0_msr { |
1828 | + /* IN variables. */ |
1829 | + uint32_t write; |
1830 | + cpumap_t cpu_mask; |
1831 | + uint32_t msr; |
1832 | + uint32_t in1; |
1833 | + uint32_t in2; |
1834 | + /* OUT variables. */ |
1835 | + uint32_t out1; |
1836 | + uint32_t out2; |
1837 | +}; |
1838 | +typedef struct dom0_msr dom0_msr_t; |
1839 | +DEFINE_XEN_GUEST_HANDLE(dom0_msr_t); |
1840 | + |
1841 | +/* Unsupported legacy operation -- defined for API compatibility. */ |
1842 | +#define DOM0_PHYSICAL_MEMORY_MAP 40 |
1843 | +struct dom0_memory_map_entry { |
1844 | + uint64_t start, end; |
1845 | + uint32_t flags; /* reserved */ |
1846 | + uint8_t is_ram; |
1847 | +}; |
1848 | +typedef struct dom0_memory_map_entry dom0_memory_map_entry_t; |
1849 | +DEFINE_XEN_GUEST_HANDLE(dom0_memory_map_entry_t); |
1850 | + |
1851 | +struct dom0_op { |
1852 | + uint32_t cmd; |
1853 | + uint32_t interface_version; /* DOM0_INTERFACE_VERSION */ |
1854 | + union { |
1855 | + struct dom0_msr msr; |
1856 | + struct dom0_settime settime; |
1857 | + struct dom0_add_memtype add_memtype; |
1858 | + struct dom0_del_memtype del_memtype; |
1859 | + struct dom0_read_memtype read_memtype; |
1860 | + struct dom0_microcode microcode; |
1861 | + struct dom0_platform_quirk platform_quirk; |
1862 | + struct dom0_memory_map_entry physical_memory_map; |
1863 | + uint8_t pad[128]; |
1864 | + } u; |
1865 | +}; |
1866 | +typedef struct dom0_op dom0_op_t; |
1867 | +DEFINE_XEN_GUEST_HANDLE(dom0_op_t); |
1868 | + |
1869 | +#endif /* __XEN_PUBLIC_DOM0_OPS_H__ */ |
1870 | + |
1871 | +/* |
1872 | + * Local variables: |
1873 | + * mode: C |
1874 | + * c-set-style: "BSD" |
1875 | + * c-basic-offset: 4 |
1876 | + * tab-width: 4 |
1877 | + * indent-tabs-mode: nil |
1878 | + * End: |
1879 | + */ |
1880 | Index: head-2008-04-15/include/xen/interface/domctl.h |
1881 | =================================================================== |
1882 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
1883 | +++ head-2008-04-15/include/xen/interface/domctl.h 2008-04-02 12:34:02.000000000 +0200 |
1884 | @@ -0,0 +1,628 @@ |
1885 | +/****************************************************************************** |
1886 | + * domctl.h |
1887 | + * |
1888 | + * Domain management operations. For use by node control stack. |
1889 | + * |
1890 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
1891 | + * of this software and associated documentation files (the "Software"), to |
1892 | + * deal in the Software without restriction, including without limitation the |
1893 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
1894 | + * sell copies of the Software, and to permit persons to whom the Software is |
1895 | + * furnished to do so, subject to the following conditions: |
1896 | + * |
1897 | + * The above copyright notice and this permission notice shall be included in |
1898 | + * all copies or substantial portions of the Software. |
1899 | + * |
1900 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
1901 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
1902 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
1903 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
1904 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
1905 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
1906 | + * DEALINGS IN THE SOFTWARE. |
1907 | + * |
1908 | + * Copyright (c) 2002-2003, B Dragovic |
1909 | + * Copyright (c) 2002-2006, K Fraser |
1910 | + */ |
1911 | + |
1912 | +#ifndef __XEN_PUBLIC_DOMCTL_H__ |
1913 | +#define __XEN_PUBLIC_DOMCTL_H__ |
1914 | + |
1915 | +#if !defined(__XEN__) && !defined(__XEN_TOOLS__) |
1916 | +#error "domctl operations are intended for use by node control tools only" |
1917 | +#endif |
1918 | + |
1919 | +#include "xen.h" |
1920 | + |
1921 | +#define XEN_DOMCTL_INTERFACE_VERSION 0x00000005 |
1922 | + |
1923 | +struct xenctl_cpumap { |
1924 | + XEN_GUEST_HANDLE_64(uint8) bitmap; |
1925 | + uint32_t nr_cpus; |
1926 | +}; |
1927 | + |
1928 | +/* |
1929 | + * NB. xen_domctl.domain is an IN/OUT parameter for this operation. |
1930 | + * If it is specified as zero, an id is auto-allocated and returned. |
1931 | + */ |
1932 | +#define XEN_DOMCTL_createdomain 1 |
1933 | +struct xen_domctl_createdomain { |
1934 | + /* IN parameters */ |
1935 | + uint32_t ssidref; |
1936 | + xen_domain_handle_t handle; |
1937 | + /* Is this an HVM guest (as opposed to a PV guest)? */ |
1938 | +#define _XEN_DOMCTL_CDF_hvm_guest 0 |
1939 | +#define XEN_DOMCTL_CDF_hvm_guest (1U<<_XEN_DOMCTL_CDF_hvm_guest) |
1940 | + /* Use hardware-assisted paging if available? */ |
1941 | +#define _XEN_DOMCTL_CDF_hap 1 |
1942 | +#define XEN_DOMCTL_CDF_hap (1U<<_XEN_DOMCTL_CDF_hap) |
1943 | + uint32_t flags; |
1944 | +}; |
1945 | +typedef struct xen_domctl_createdomain xen_domctl_createdomain_t; |
1946 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t); |
1947 | + |
1948 | +#define XEN_DOMCTL_destroydomain 2 |
1949 | +#define XEN_DOMCTL_pausedomain 3 |
1950 | +#define XEN_DOMCTL_unpausedomain 4 |
1951 | +#define XEN_DOMCTL_resumedomain 27 |
1952 | + |
1953 | +#define XEN_DOMCTL_getdomaininfo 5 |
1954 | +struct xen_domctl_getdomaininfo { |
1955 | + /* OUT variables. */ |
1956 | + domid_t domain; /* Also echoed in domctl.domain */ |
1957 | + /* Domain is scheduled to die. */ |
1958 | +#define _XEN_DOMINF_dying 0 |
1959 | +#define XEN_DOMINF_dying (1U<<_XEN_DOMINF_dying) |
1960 | + /* Domain is an HVM guest (as opposed to a PV guest). */ |
1961 | +#define _XEN_DOMINF_hvm_guest 1 |
1962 | +#define XEN_DOMINF_hvm_guest (1U<<_XEN_DOMINF_hvm_guest) |
1963 | + /* The guest OS has shut down. */ |
1964 | +#define _XEN_DOMINF_shutdown 2 |
1965 | +#define XEN_DOMINF_shutdown (1U<<_XEN_DOMINF_shutdown) |
1966 | + /* Currently paused by control software. */ |
1967 | +#define _XEN_DOMINF_paused 3 |
1968 | +#define XEN_DOMINF_paused (1U<<_XEN_DOMINF_paused) |
1969 | + /* Currently blocked pending an event. */ |
1970 | +#define _XEN_DOMINF_blocked 4 |
1971 | +#define XEN_DOMINF_blocked (1U<<_XEN_DOMINF_blocked) |
1972 | + /* Domain is currently running. */ |
1973 | +#define _XEN_DOMINF_running 5 |
1974 | +#define XEN_DOMINF_running (1U<<_XEN_DOMINF_running) |
1975 | + /* Being debugged. */ |
1976 | +#define _XEN_DOMINF_debugged 6 |
1977 | +#define XEN_DOMINF_debugged (1U<<_XEN_DOMINF_debugged) |
1978 | + /* CPU to which this domain is bound. */ |
1979 | +#define XEN_DOMINF_cpumask 255 |
1980 | +#define XEN_DOMINF_cpushift 8 |
1981 | + /* XEN_DOMINF_shutdown guest-supplied code. */ |
1982 | +#define XEN_DOMINF_shutdownmask 255 |
1983 | +#define XEN_DOMINF_shutdownshift 16 |
1984 | + uint32_t flags; /* XEN_DOMINF_* */ |
1985 | + uint64_aligned_t tot_pages; |
1986 | + uint64_aligned_t max_pages; |
1987 | + uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */ |
1988 | + uint64_aligned_t cpu_time; |
1989 | + uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */ |
1990 | + uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */ |
1991 | + uint32_t ssidref; |
1992 | + xen_domain_handle_t handle; |
1993 | +}; |
1994 | +typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t; |
1995 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t); |
1996 | + |
1997 | + |
1998 | +#define XEN_DOMCTL_getmemlist 6 |
1999 | +struct xen_domctl_getmemlist { |
2000 | + /* IN variables. */ |
2001 | + /* Max entries to write to output buffer. */ |
2002 | + uint64_aligned_t max_pfns; |
2003 | + /* Start index in guest's page list. */ |
2004 | + uint64_aligned_t start_pfn; |
2005 | + XEN_GUEST_HANDLE_64(uint64) buffer; |
2006 | + /* OUT variables. */ |
2007 | + uint64_aligned_t num_pfns; |
2008 | +}; |
2009 | +typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t; |
2010 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t); |
2011 | + |
2012 | + |
2013 | +#define XEN_DOMCTL_getpageframeinfo 7 |
2014 | + |
2015 | +#define XEN_DOMCTL_PFINFO_LTAB_SHIFT 28 |
2016 | +#define XEN_DOMCTL_PFINFO_NOTAB (0x0U<<28) |
2017 | +#define XEN_DOMCTL_PFINFO_L1TAB (0x1U<<28) |
2018 | +#define XEN_DOMCTL_PFINFO_L2TAB (0x2U<<28) |
2019 | +#define XEN_DOMCTL_PFINFO_L3TAB (0x3U<<28) |
2020 | +#define XEN_DOMCTL_PFINFO_L4TAB (0x4U<<28) |
2021 | +#define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28) |
2022 | +#define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31) |
2023 | +#define XEN_DOMCTL_PFINFO_XTAB (0xfU<<28) /* invalid page */ |
2024 | +#define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28) |
2025 | + |
2026 | +struct xen_domctl_getpageframeinfo { |
2027 | + /* IN variables. */ |
2028 | + uint64_aligned_t gmfn; /* GMFN to query */ |
2029 | + /* OUT variables. */ |
2030 | + /* Is the page PINNED to a type? */ |
2031 | + uint32_t type; /* see above type defs */ |
2032 | +}; |
2033 | +typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t; |
2034 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t); |
2035 | + |
2036 | + |
2037 | +#define XEN_DOMCTL_getpageframeinfo2 8 |
2038 | +struct xen_domctl_getpageframeinfo2 { |
2039 | + /* IN variables. */ |
2040 | + uint64_aligned_t num; |
2041 | + /* IN/OUT variables. */ |
2042 | + XEN_GUEST_HANDLE_64(uint32) array; |
2043 | +}; |
2044 | +typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t; |
2045 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t); |
2046 | + |
2047 | + |
2048 | +/* |
2049 | + * Control shadow pagetables operation |
2050 | + */ |
2051 | +#define XEN_DOMCTL_shadow_op 10 |
2052 | + |
2053 | +/* Disable shadow mode. */ |
2054 | +#define XEN_DOMCTL_SHADOW_OP_OFF 0 |
2055 | + |
2056 | +/* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */ |
2057 | +#define XEN_DOMCTL_SHADOW_OP_ENABLE 32 |
2058 | + |
2059 | +/* Log-dirty bitmap operations. */ |
2060 | + /* Return the bitmap and clean internal copy for next round. */ |
2061 | +#define XEN_DOMCTL_SHADOW_OP_CLEAN 11 |
2062 | + /* Return the bitmap but do not modify internal copy. */ |
2063 | +#define XEN_DOMCTL_SHADOW_OP_PEEK 12 |
2064 | + |
2065 | +/* Memory allocation accessors. */ |
2066 | +#define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30 |
2067 | +#define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31 |
2068 | + |
2069 | +/* Legacy enable operations. */ |
2070 | + /* Equiv. to ENABLE with no mode flags. */ |
2071 | +#define XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1 |
2072 | + /* Equiv. to ENABLE with mode flag ENABLE_LOG_DIRTY. */ |
2073 | +#define XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2 |
2074 | + /* Equiv. to ENABLE with mode flags ENABLE_REFCOUNT and ENABLE_TRANSLATE. */ |
2075 | +#define XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3 |
2076 | + |
2077 | +/* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */ |
2078 | + /* |
2079 | + * Shadow pagetables are refcounted: guest does not use explicit mmu |
2080 | + * operations nor write-protect its pagetables. |
2081 | + */ |
2082 | +#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1) |
2083 | + /* |
2084 | + * Log pages in a bitmap as they are dirtied. |
2085 | + * Used for live relocation to determine which pages must be re-sent. |
2086 | + */ |
2087 | +#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2) |
2088 | + /* |
2089 | + * Automatically translate GPFNs into MFNs. |
2090 | + */ |
2091 | +#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3) |
2092 | + /* |
2093 | + * Xen does not steal virtual address space from the guest. |
2094 | + * Requires HVM support. |
2095 | + */ |
2096 | +#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4) |
2097 | + |
2098 | +struct xen_domctl_shadow_op_stats { |
2099 | + uint32_t fault_count; |
2100 | + uint32_t dirty_count; |
2101 | +}; |
2102 | +typedef struct xen_domctl_shadow_op_stats xen_domctl_shadow_op_stats_t; |
2103 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_stats_t); |
2104 | + |
2105 | +struct xen_domctl_shadow_op { |
2106 | + /* IN variables. */ |
2107 | + uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */ |
2108 | + |
2109 | + /* OP_ENABLE */ |
2110 | + uint32_t mode; /* XEN_DOMCTL_SHADOW_ENABLE_* */ |
2111 | + |
2112 | + /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */ |
2113 | + uint32_t mb; /* Shadow memory allocation in MB */ |
2114 | + |
2115 | + /* OP_PEEK / OP_CLEAN */ |
2116 | + XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; |
2117 | + uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */ |
2118 | + struct xen_domctl_shadow_op_stats stats; |
2119 | +}; |
2120 | +typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t; |
2121 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t); |
2122 | + |
2123 | + |
2124 | +#define XEN_DOMCTL_max_mem 11 |
2125 | +struct xen_domctl_max_mem { |
2126 | + /* IN variables. */ |
2127 | + uint64_aligned_t max_memkb; |
2128 | +}; |
2129 | +typedef struct xen_domctl_max_mem xen_domctl_max_mem_t; |
2130 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t); |
2131 | + |
2132 | + |
2133 | +#define XEN_DOMCTL_setvcpucontext 12 |
2134 | +#define XEN_DOMCTL_getvcpucontext 13 |
2135 | +struct xen_domctl_vcpucontext { |
2136 | + uint32_t vcpu; /* IN */ |
2137 | + XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */ |
2138 | +}; |
2139 | +typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t; |
2140 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t); |
2141 | + |
2142 | + |
2143 | +#define XEN_DOMCTL_getvcpuinfo 14 |
2144 | +struct xen_domctl_getvcpuinfo { |
2145 | + /* IN variables. */ |
2146 | + uint32_t vcpu; |
2147 | + /* OUT variables. */ |
2148 | + uint8_t online; /* currently online (not hotplugged)? */ |
2149 | + uint8_t blocked; /* blocked waiting for an event? */ |
2150 | + uint8_t running; /* currently scheduled on its CPU? */ |
2151 | + uint64_aligned_t cpu_time; /* total cpu time consumed (ns) */ |
2152 | + uint32_t cpu; /* current mapping */ |
2153 | +}; |
2154 | +typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t; |
2155 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t); |
2156 | + |
2157 | + |
2158 | +/* Get/set which physical cpus a vcpu can execute on. */ |
2159 | +#define XEN_DOMCTL_setvcpuaffinity 9 |
2160 | +#define XEN_DOMCTL_getvcpuaffinity 25 |
2161 | +struct xen_domctl_vcpuaffinity { |
2162 | + uint32_t vcpu; /* IN */ |
2163 | + struct xenctl_cpumap cpumap; /* IN/OUT */ |
2164 | +}; |
2165 | +typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t; |
2166 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t); |
2167 | + |
2168 | + |
2169 | +#define XEN_DOMCTL_max_vcpus 15 |
2170 | +struct xen_domctl_max_vcpus { |
2171 | + uint32_t max; /* maximum number of vcpus */ |
2172 | +}; |
2173 | +typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t; |
2174 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t); |
2175 | + |
2176 | + |
2177 | +#define XEN_DOMCTL_scheduler_op 16 |
2178 | +/* Scheduler types. */ |
2179 | +#define XEN_SCHEDULER_SEDF 4 |
2180 | +#define XEN_SCHEDULER_CREDIT 5 |
2181 | +/* Set or get info? */ |
2182 | +#define XEN_DOMCTL_SCHEDOP_putinfo 0 |
2183 | +#define XEN_DOMCTL_SCHEDOP_getinfo 1 |
2184 | +struct xen_domctl_scheduler_op { |
2185 | + uint32_t sched_id; /* XEN_SCHEDULER_* */ |
2186 | + uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */ |
2187 | + union { |
2188 | + struct xen_domctl_sched_sedf { |
2189 | + uint64_aligned_t period; |
2190 | + uint64_aligned_t slice; |
2191 | + uint64_aligned_t latency; |
2192 | + uint32_t extratime; |
2193 | + uint32_t weight; |
2194 | + } sedf; |
2195 | + struct xen_domctl_sched_credit { |
2196 | + uint16_t weight; |
2197 | + uint16_t cap; |
2198 | + } credit; |
2199 | + } u; |
2200 | +}; |
2201 | +typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t; |
2202 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t); |
2203 | + |
2204 | + |
2205 | +#define XEN_DOMCTL_setdomainhandle 17 |
2206 | +struct xen_domctl_setdomainhandle { |
2207 | + xen_domain_handle_t handle; |
2208 | +}; |
2209 | +typedef struct xen_domctl_setdomainhandle xen_domctl_setdomainhandle_t; |
2210 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdomainhandle_t); |
2211 | + |
2212 | + |
2213 | +#define XEN_DOMCTL_setdebugging 18 |
2214 | +struct xen_domctl_setdebugging { |
2215 | + uint8_t enable; |
2216 | +}; |
2217 | +typedef struct xen_domctl_setdebugging xen_domctl_setdebugging_t; |
2218 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdebugging_t); |
2219 | + |
2220 | + |
2221 | +#define XEN_DOMCTL_irq_permission 19 |
2222 | +struct xen_domctl_irq_permission { |
2223 | + uint8_t pirq; |
2224 | + uint8_t allow_access; /* flag to specify enable/disable of IRQ access */ |
2225 | +}; |
2226 | +typedef struct xen_domctl_irq_permission xen_domctl_irq_permission_t; |
2227 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_permission_t); |
2228 | + |
2229 | + |
2230 | +#define XEN_DOMCTL_iomem_permission 20 |
2231 | +struct xen_domctl_iomem_permission { |
2232 | + uint64_aligned_t first_mfn;/* first page (physical page number) in range */ |
2233 | + uint64_aligned_t nr_mfns; /* number of pages in range (>0) */ |
2234 | + uint8_t allow_access; /* allow (!0) or deny (0) access to range? */ |
2235 | +}; |
2236 | +typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t; |
2237 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t); |
2238 | + |
2239 | + |
2240 | +#define XEN_DOMCTL_ioport_permission 21 |
2241 | +struct xen_domctl_ioport_permission { |
2242 | + uint32_t first_port; /* first port int range */ |
2243 | + uint32_t nr_ports; /* size of port range */ |
2244 | + uint8_t allow_access; /* allow or deny access to range? */ |
2245 | +}; |
2246 | +typedef struct xen_domctl_ioport_permission xen_domctl_ioport_permission_t; |
2247 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_permission_t); |
2248 | + |
2249 | + |
2250 | +#define XEN_DOMCTL_hypercall_init 22 |
2251 | +struct xen_domctl_hypercall_init { |
2252 | + uint64_aligned_t gmfn; /* GMFN to be initialised */ |
2253 | +}; |
2254 | +typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t; |
2255 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t); |
2256 | + |
2257 | + |
2258 | +#define XEN_DOMCTL_arch_setup 23 |
2259 | +#define _XEN_DOMAINSETUP_hvm_guest 0 |
2260 | +#define XEN_DOMAINSETUP_hvm_guest (1UL<<_XEN_DOMAINSETUP_hvm_guest) |
2261 | +#define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save) */ |
2262 | +#define XEN_DOMAINSETUP_query (1UL<<_XEN_DOMAINSETUP_query) |
2263 | +#define _XEN_DOMAINSETUP_sioemu_guest 2 |
2264 | +#define XEN_DOMAINSETUP_sioemu_guest (1UL<<_XEN_DOMAINSETUP_sioemu_guest) |
2265 | +typedef struct xen_domctl_arch_setup { |
2266 | + uint64_aligned_t flags; /* XEN_DOMAINSETUP_* */ |
2267 | +#ifdef __ia64__ |
2268 | + uint64_aligned_t bp; /* mpaddr of boot param area */ |
2269 | + uint64_aligned_t maxmem; /* Highest memory address for MDT. */ |
2270 | + uint64_aligned_t xsi_va; /* Xen shared_info area virtual address. */ |
2271 | + uint32_t hypercall_imm; /* Break imm for Xen hypercalls. */ |
2272 | + int8_t vhpt_size_log2; /* Log2 of VHPT size. */ |
2273 | +#endif |
2274 | +} xen_domctl_arch_setup_t; |
2275 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t); |
2276 | + |
2277 | + |
2278 | +#define XEN_DOMCTL_settimeoffset 24 |
2279 | +struct xen_domctl_settimeoffset { |
2280 | + int32_t time_offset_seconds; /* applied to domain wallclock time */ |
2281 | +}; |
2282 | +typedef struct xen_domctl_settimeoffset xen_domctl_settimeoffset_t; |
2283 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_settimeoffset_t); |
2284 | + |
2285 | + |
2286 | +#define XEN_DOMCTL_gethvmcontext 33 |
2287 | +#define XEN_DOMCTL_sethvmcontext 34 |
2288 | +typedef struct xen_domctl_hvmcontext { |
2289 | + uint32_t size; /* IN/OUT: size of buffer / bytes filled */ |
2290 | + XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call |
2291 | + * gethvmcontext with NULL |
2292 | + * buffer to get size req'd */ |
2293 | +} xen_domctl_hvmcontext_t; |
2294 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_t); |
2295 | + |
2296 | + |
2297 | +#define XEN_DOMCTL_set_address_size 35 |
2298 | +#define XEN_DOMCTL_get_address_size 36 |
2299 | +typedef struct xen_domctl_address_size { |
2300 | + uint32_t size; |
2301 | +} xen_domctl_address_size_t; |
2302 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_address_size_t); |
2303 | + |
2304 | + |
2305 | +#define XEN_DOMCTL_real_mode_area 26 |
2306 | +struct xen_domctl_real_mode_area { |
2307 | + uint32_t log; /* log2 of Real Mode Area size */ |
2308 | +}; |
2309 | +typedef struct xen_domctl_real_mode_area xen_domctl_real_mode_area_t; |
2310 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_real_mode_area_t); |
2311 | + |
2312 | + |
2313 | +#define XEN_DOMCTL_sendtrigger 28 |
2314 | +#define XEN_DOMCTL_SENDTRIGGER_NMI 0 |
2315 | +#define XEN_DOMCTL_SENDTRIGGER_RESET 1 |
2316 | +#define XEN_DOMCTL_SENDTRIGGER_INIT 2 |
2317 | +struct xen_domctl_sendtrigger { |
2318 | + uint32_t trigger; /* IN */ |
2319 | + uint32_t vcpu; /* IN */ |
2320 | +}; |
2321 | +typedef struct xen_domctl_sendtrigger xen_domctl_sendtrigger_t; |
2322 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendtrigger_t); |
2323 | + |
2324 | + |
2325 | +/* Assign PCI device to HVM guest. Sets up IOMMU structures. */ |
2326 | +#define XEN_DOMCTL_assign_device 37 |
2327 | +#define XEN_DOMCTL_test_assign_device 45 |
2328 | +#define XEN_DOMCTL_deassign_device 47 |
2329 | +struct xen_domctl_assign_device { |
2330 | + uint32_t machine_bdf; /* machine PCI ID of assigned device */ |
2331 | +}; |
2332 | +typedef struct xen_domctl_assign_device xen_domctl_assign_device_t; |
2333 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t); |
2334 | + |
2335 | + |
2336 | +/* Pass-through interrupts: bind real irq -> hvm devfn. */ |
2337 | +#define XEN_DOMCTL_bind_pt_irq 38 |
2338 | +#define XEN_DOMCTL_unbind_pt_irq 48 |
2339 | +typedef enum pt_irq_type_e { |
2340 | + PT_IRQ_TYPE_PCI, |
2341 | + PT_IRQ_TYPE_ISA |
2342 | +} pt_irq_type_t; |
2343 | +struct xen_domctl_bind_pt_irq { |
2344 | + uint32_t machine_irq; |
2345 | + pt_irq_type_t irq_type; |
2346 | + uint32_t hvm_domid; |
2347 | + |
2348 | + union { |
2349 | + struct { |
2350 | + uint8_t isa_irq; |
2351 | + } isa; |
2352 | + struct { |
2353 | + uint8_t bus; |
2354 | + uint8_t device; |
2355 | + uint8_t intx; |
2356 | + } pci; |
2357 | + } u; |
2358 | +}; |
2359 | +typedef struct xen_domctl_bind_pt_irq xen_domctl_bind_pt_irq_t; |
2360 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_bind_pt_irq_t); |
2361 | + |
2362 | + |
2363 | +/* Bind machine I/O address range -> HVM address range. */ |
2364 | +#define XEN_DOMCTL_memory_mapping 39 |
2365 | +#define DPCI_ADD_MAPPING 1 |
2366 | +#define DPCI_REMOVE_MAPPING 0 |
2367 | +struct xen_domctl_memory_mapping { |
2368 | + uint64_aligned_t first_gfn; /* first page (hvm guest phys page) in range */ |
2369 | + uint64_aligned_t first_mfn; /* first page (machine page) in range */ |
2370 | + uint64_aligned_t nr_mfns; /* number of pages in range (>0) */ |
2371 | + uint32_t add_mapping; /* add or remove mapping */ |
2372 | + uint32_t padding; /* padding for 64-bit aligned structure */ |
2373 | +}; |
2374 | +typedef struct xen_domctl_memory_mapping xen_domctl_memory_mapping_t; |
2375 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_memory_mapping_t); |
2376 | + |
2377 | + |
2378 | +/* Bind machine I/O port range -> HVM I/O port range. */ |
2379 | +#define XEN_DOMCTL_ioport_mapping 40 |
2380 | +struct xen_domctl_ioport_mapping { |
2381 | + uint32_t first_gport; /* first guest IO port*/ |
2382 | + uint32_t first_mport; /* first machine IO port */ |
2383 | + uint32_t nr_ports; /* size of port range */ |
2384 | + uint32_t add_mapping; /* add or remove mapping */ |
2385 | +}; |
2386 | +typedef struct xen_domctl_ioport_mapping xen_domctl_ioport_mapping_t; |
2387 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_mapping_t); |
2388 | + |
2389 | + |
2390 | +/* |
2391 | + * Pin caching type of RAM space for x86 HVM domU. |
2392 | + */ |
2393 | +#define XEN_DOMCTL_pin_mem_cacheattr 41 |
2394 | +/* Caching types: these happen to be the same as x86 MTRR/PAT type codes. */ |
2395 | +#define XEN_DOMCTL_MEM_CACHEATTR_UC 0 |
2396 | +#define XEN_DOMCTL_MEM_CACHEATTR_WC 1 |
2397 | +#define XEN_DOMCTL_MEM_CACHEATTR_WT 4 |
2398 | +#define XEN_DOMCTL_MEM_CACHEATTR_WP 5 |
2399 | +#define XEN_DOMCTL_MEM_CACHEATTR_WB 6 |
2400 | +#define XEN_DOMCTL_MEM_CACHEATTR_UCM 7 |
2401 | +struct xen_domctl_pin_mem_cacheattr { |
2402 | + uint64_aligned_t start, end; |
2403 | + unsigned int type; /* XEN_DOMCTL_MEM_CACHEATTR_* */ |
2404 | +}; |
2405 | +typedef struct xen_domctl_pin_mem_cacheattr xen_domctl_pin_mem_cacheattr_t; |
2406 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t); |
2407 | + |
2408 | + |
2409 | +#define XEN_DOMCTL_set_ext_vcpucontext 42 |
2410 | +#define XEN_DOMCTL_get_ext_vcpucontext 43 |
2411 | +struct xen_domctl_ext_vcpucontext { |
2412 | + /* IN: VCPU that this call applies to. */ |
2413 | + uint32_t vcpu; |
2414 | + /* |
2415 | + * SET: Size of struct (IN) |
2416 | + * GET: Size of struct (OUT) |
2417 | + */ |
2418 | + uint32_t size; |
2419 | +#if defined(__i386__) || defined(__x86_64__) |
2420 | + /* SYSCALL from 32-bit mode and SYSENTER callback information. */ |
2421 | + /* NB. SYSCALL from 64-bit mode is contained in vcpu_guest_context_t */ |
2422 | + uint64_aligned_t syscall32_callback_eip; |
2423 | + uint64_aligned_t sysenter_callback_eip; |
2424 | + uint16_t syscall32_callback_cs; |
2425 | + uint16_t sysenter_callback_cs; |
2426 | + uint8_t syscall32_disables_events; |
2427 | + uint8_t sysenter_disables_events; |
2428 | +#endif |
2429 | +}; |
2430 | +typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t; |
2431 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpucontext_t); |
2432 | + |
2433 | +/* |
2434 | + * Set optimizaton features for a domain |
2435 | + */ |
2436 | +#define XEN_DOMCTL_set_opt_feature 44 |
2437 | +struct xen_domctl_set_opt_feature { |
2438 | +#if defined(__ia64__) |
2439 | + struct xen_ia64_opt_feature optf; |
2440 | +#else |
2441 | + /* Make struct non-empty: do not depend on this field name! */ |
2442 | + uint64_t dummy; |
2443 | +#endif |
2444 | +}; |
2445 | +typedef struct xen_domctl_set_opt_feature xen_domctl_set_opt_feature_t; |
2446 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_opt_feature_t); |
2447 | + |
2448 | +/* |
2449 | + * Set the target domain for a domain |
2450 | + */ |
2451 | +#define XEN_DOMCTL_set_target 46 |
2452 | +struct xen_domctl_set_target { |
2453 | + domid_t target; |
2454 | +}; |
2455 | +typedef struct xen_domctl_set_target xen_domctl_set_target_t; |
2456 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t); |
2457 | + |
2458 | + |
2459 | +struct xen_domctl { |
2460 | + uint32_t cmd; |
2461 | + uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */ |
2462 | + domid_t domain; |
2463 | + union { |
2464 | + struct xen_domctl_createdomain createdomain; |
2465 | + struct xen_domctl_getdomaininfo getdomaininfo; |
2466 | + struct xen_domctl_getmemlist getmemlist; |
2467 | + struct xen_domctl_getpageframeinfo getpageframeinfo; |
2468 | + struct xen_domctl_getpageframeinfo2 getpageframeinfo2; |
2469 | + struct xen_domctl_vcpuaffinity vcpuaffinity; |
2470 | + struct xen_domctl_shadow_op shadow_op; |
2471 | + struct xen_domctl_max_mem max_mem; |
2472 | + struct xen_domctl_vcpucontext vcpucontext; |
2473 | + struct xen_domctl_getvcpuinfo getvcpuinfo; |
2474 | + struct xen_domctl_max_vcpus max_vcpus; |
2475 | + struct xen_domctl_scheduler_op scheduler_op; |
2476 | + struct xen_domctl_setdomainhandle setdomainhandle; |
2477 | + struct xen_domctl_setdebugging setdebugging; |
2478 | + struct xen_domctl_irq_permission irq_permission; |
2479 | + struct xen_domctl_iomem_permission iomem_permission; |
2480 | + struct xen_domctl_ioport_permission ioport_permission; |
2481 | + struct xen_domctl_hypercall_init hypercall_init; |
2482 | + struct xen_domctl_arch_setup arch_setup; |
2483 | + struct xen_domctl_settimeoffset settimeoffset; |
2484 | + struct xen_domctl_real_mode_area real_mode_area; |
2485 | + struct xen_domctl_hvmcontext hvmcontext; |
2486 | + struct xen_domctl_address_size address_size; |
2487 | + struct xen_domctl_sendtrigger sendtrigger; |
2488 | + struct xen_domctl_assign_device assign_device; |
2489 | + struct xen_domctl_bind_pt_irq bind_pt_irq; |
2490 | + struct xen_domctl_memory_mapping memory_mapping; |
2491 | + struct xen_domctl_ioport_mapping ioport_mapping; |
2492 | + struct xen_domctl_pin_mem_cacheattr pin_mem_cacheattr; |
2493 | + struct xen_domctl_ext_vcpucontext ext_vcpucontext; |
2494 | + struct xen_domctl_set_opt_feature set_opt_feature; |
2495 | + struct xen_domctl_set_target set_target; |
2496 | + uint8_t pad[128]; |
2497 | + } u; |
2498 | +}; |
2499 | +typedef struct xen_domctl xen_domctl_t; |
2500 | +DEFINE_XEN_GUEST_HANDLE(xen_domctl_t); |
2501 | + |
2502 | +#endif /* __XEN_PUBLIC_DOMCTL_H__ */ |
2503 | + |
2504 | +/* |
2505 | + * Local variables: |
2506 | + * mode: C |
2507 | + * c-set-style: "BSD" |
2508 | + * c-basic-offset: 4 |
2509 | + * tab-width: 4 |
2510 | + * indent-tabs-mode: nil |
2511 | + * End: |
2512 | + */ |
2513 | Index: head-2008-04-15/include/xen/interface/elfstructs.h |
2514 | =================================================================== |
2515 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
2516 | +++ head-2008-04-15/include/xen/interface/elfstructs.h 2007-06-12 13:14:19.000000000 +0200 |
2517 | @@ -0,0 +1,527 @@ |
2518 | +#ifndef __XEN_PUBLIC_ELFSTRUCTS_H__ |
2519 | +#define __XEN_PUBLIC_ELFSTRUCTS_H__ 1 |
2520 | +/* |
2521 | + * Copyright (c) 1995, 1996 Erik Theisen. All rights reserved. |
2522 | + * |
2523 | + * Redistribution and use in source and binary forms, with or without |
2524 | + * modification, are permitted provided that the following conditions |
2525 | + * are met: |
2526 | + * 1. Redistributions of source code must retain the above copyright |
2527 | + * notice, this list of conditions and the following disclaimer. |
2528 | + * 2. Redistributions in binary form must reproduce the above copyright |
2529 | + * notice, this list of conditions and the following disclaimer in the |
2530 | + * documentation and/or other materials provided with the distribution. |
2531 | + * 3. The name of the author may not be used to endorse or promote products |
2532 | + * derived from this software without specific prior written permission |
2533 | + * |
2534 | + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
2535 | + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
2536 | + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
2537 | + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
2538 | + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
2539 | + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
2540 | + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
2541 | + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
2542 | + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
2543 | + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
2544 | + */ |
2545 | + |
2546 | +typedef uint8_t Elf_Byte; |
2547 | + |
2548 | +typedef uint32_t Elf32_Addr; /* Unsigned program address */ |
2549 | +typedef uint32_t Elf32_Off; /* Unsigned file offset */ |
2550 | +typedef int32_t Elf32_Sword; /* Signed large integer */ |
2551 | +typedef uint32_t Elf32_Word; /* Unsigned large integer */ |
2552 | +typedef uint16_t Elf32_Half; /* Unsigned medium integer */ |
2553 | + |
2554 | +typedef uint64_t Elf64_Addr; |
2555 | +typedef uint64_t Elf64_Off; |
2556 | +typedef int32_t Elf64_Shalf; |
2557 | + |
2558 | +typedef int32_t Elf64_Sword; |
2559 | +typedef uint32_t Elf64_Word; |
2560 | + |
2561 | +typedef int64_t Elf64_Sxword; |
2562 | +typedef uint64_t Elf64_Xword; |
2563 | + |
2564 | +typedef uint32_t Elf64_Half; |
2565 | +typedef uint16_t Elf64_Quarter; |
2566 | + |
2567 | +/* |
2568 | + * e_ident[] identification indexes |
2569 | + * See http://www.caldera.com/developers/gabi/2000-07-17/ch4.eheader.html |
2570 | + */ |
2571 | +#define EI_MAG0 0 /* file ID */ |
2572 | +#define EI_MAG1 1 /* file ID */ |
2573 | +#define EI_MAG2 2 /* file ID */ |
2574 | +#define EI_MAG3 3 /* file ID */ |
2575 | +#define EI_CLASS 4 /* file class */ |
2576 | +#define EI_DATA 5 /* data encoding */ |
2577 | +#define EI_VERSION 6 /* ELF header version */ |
2578 | +#define EI_OSABI 7 /* OS/ABI ID */ |
2579 | +#define EI_ABIVERSION 8 /* ABI version */ |
2580 | +#define EI_PAD 9 /* start of pad bytes */ |
2581 | +#define EI_NIDENT 16 /* Size of e_ident[] */ |
2582 | + |
2583 | +/* e_ident[] magic number */ |
2584 | +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ |
2585 | +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ |
2586 | +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ |
2587 | +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ |
2588 | +#define ELFMAG "\177ELF" /* magic */ |
2589 | +#define SELFMAG 4 /* size of magic */ |
2590 | + |
2591 | +/* e_ident[] file class */ |
2592 | +#define ELFCLASSNONE 0 /* invalid */ |
2593 | +#define ELFCLASS32 1 /* 32-bit objs */ |
2594 | +#define ELFCLASS64 2 /* 64-bit objs */ |
2595 | +#define ELFCLASSNUM 3 /* number of classes */ |
2596 | + |
2597 | +/* e_ident[] data encoding */ |
2598 | +#define ELFDATANONE 0 /* invalid */ |
2599 | +#define ELFDATA2LSB 1 /* Little-Endian */ |
2600 | +#define ELFDATA2MSB 2 /* Big-Endian */ |
2601 | +#define ELFDATANUM 3 /* number of data encode defines */ |
2602 | + |
2603 | +/* e_ident[] Operating System/ABI */ |
2604 | +#define ELFOSABI_SYSV 0 /* UNIX System V ABI */ |
2605 | +#define ELFOSABI_HPUX 1 /* HP-UX operating system */ |
2606 | +#define ELFOSABI_NETBSD 2 /* NetBSD */ |
2607 | +#define ELFOSABI_LINUX 3 /* GNU/Linux */ |
2608 | +#define ELFOSABI_HURD 4 /* GNU/Hurd */ |
2609 | +#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */ |
2610 | +#define ELFOSABI_SOLARIS 6 /* Solaris */ |
2611 | +#define ELFOSABI_MONTEREY 7 /* Monterey */ |
2612 | +#define ELFOSABI_IRIX 8 /* IRIX */ |
2613 | +#define ELFOSABI_FREEBSD 9 /* FreeBSD */ |
2614 | +#define ELFOSABI_TRU64 10 /* TRU64 UNIX */ |
2615 | +#define ELFOSABI_MODESTO 11 /* Novell Modesto */ |
2616 | +#define ELFOSABI_OPENBSD 12 /* OpenBSD */ |
2617 | +#define ELFOSABI_ARM 97 /* ARM */ |
2618 | +#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ |
2619 | + |
2620 | +/* e_ident */ |
2621 | +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ |
2622 | + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ |
2623 | + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ |
2624 | + (ehdr).e_ident[EI_MAG3] == ELFMAG3) |
2625 | + |
2626 | +/* ELF Header */ |
2627 | +typedef struct elfhdr { |
2628 | + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ |
2629 | + Elf32_Half e_type; /* object file type */ |
2630 | + Elf32_Half e_machine; /* machine */ |
2631 | + Elf32_Word e_version; /* object file version */ |
2632 | + Elf32_Addr e_entry; /* virtual entry point */ |
2633 | + Elf32_Off e_phoff; /* program header table offset */ |
2634 | + Elf32_Off e_shoff; /* section header table offset */ |
2635 | + Elf32_Word e_flags; /* processor-specific flags */ |
2636 | + Elf32_Half e_ehsize; /* ELF header size */ |
2637 | + Elf32_Half e_phentsize; /* program header entry size */ |
2638 | + Elf32_Half e_phnum; /* number of program header entries */ |
2639 | + Elf32_Half e_shentsize; /* section header entry size */ |
2640 | + Elf32_Half e_shnum; /* number of section header entries */ |
2641 | + Elf32_Half e_shstrndx; /* section header table's "section |
2642 | + header string table" entry offset */ |
2643 | +} Elf32_Ehdr; |
2644 | + |
2645 | +typedef struct { |
2646 | + unsigned char e_ident[EI_NIDENT]; /* Id bytes */ |
2647 | + Elf64_Quarter e_type; /* file type */ |
2648 | + Elf64_Quarter e_machine; /* machine type */ |
2649 | + Elf64_Half e_version; /* version number */ |
2650 | + Elf64_Addr e_entry; /* entry point */ |
2651 | + Elf64_Off e_phoff; /* Program hdr offset */ |
2652 | + Elf64_Off e_shoff; /* Section hdr offset */ |
2653 | + Elf64_Half e_flags; /* Processor flags */ |
2654 | + Elf64_Quarter e_ehsize; /* sizeof ehdr */ |
2655 | + Elf64_Quarter e_phentsize; /* Program header entry size */ |
2656 | + Elf64_Quarter e_phnum; /* Number of program headers */ |
2657 | + Elf64_Quarter e_shentsize; /* Section header entry size */ |
2658 | + Elf64_Quarter e_shnum; /* Number of section headers */ |
2659 | + Elf64_Quarter e_shstrndx; /* String table index */ |
2660 | +} Elf64_Ehdr; |
2661 | + |
2662 | +/* e_type */ |
2663 | +#define ET_NONE 0 /* No file type */ |
2664 | +#define ET_REL 1 /* relocatable file */ |
2665 | +#define ET_EXEC 2 /* executable file */ |
2666 | +#define ET_DYN 3 /* shared object file */ |
2667 | +#define ET_CORE 4 /* core file */ |
2668 | +#define ET_NUM 5 /* number of types */ |
2669 | +#define ET_LOPROC 0xff00 /* reserved range for processor */ |
2670 | +#define ET_HIPROC 0xffff /* specific e_type */ |
2671 | + |
2672 | +/* e_machine */ |
2673 | +#define EM_NONE 0 /* No Machine */ |
2674 | +#define EM_M32 1 /* AT&T WE 32100 */ |
2675 | +#define EM_SPARC 2 /* SPARC */ |
2676 | +#define EM_386 3 /* Intel 80386 */ |
2677 | +#define EM_68K 4 /* Motorola 68000 */ |
2678 | +#define EM_88K 5 /* Motorola 88000 */ |
2679 | +#define EM_486 6 /* Intel 80486 - unused? */ |
2680 | +#define EM_860 7 /* Intel 80860 */ |
2681 | +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ |
2682 | +/* |
2683 | + * Don't know if EM_MIPS_RS4_BE, |
2684 | + * EM_SPARC64, EM_PARISC, |
2685 | + * or EM_PPC are ABI compliant |
2686 | + */ |
2687 | +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ |
2688 | +#define EM_SPARC64 11 /* SPARC v9 64-bit unoffical */ |
2689 | +#define EM_PARISC 15 /* HPPA */ |
2690 | +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ |
2691 | +#define EM_PPC 20 /* PowerPC */ |
2692 | +#define EM_PPC64 21 /* PowerPC 64-bit */ |
2693 | +#define EM_ARM 40 /* Advanced RISC Machines ARM */ |
2694 | +#define EM_ALPHA 41 /* DEC ALPHA */ |
2695 | +#define EM_SPARCV9 43 /* SPARC version 9 */ |
2696 | +#define EM_ALPHA_EXP 0x9026 /* DEC ALPHA */ |
2697 | +#define EM_IA_64 50 /* Intel Merced */ |
2698 | +#define EM_X86_64 62 /* AMD x86-64 architecture */ |
2699 | +#define EM_VAX 75 /* DEC VAX */ |
2700 | + |
2701 | +/* Version */ |
2702 | +#define EV_NONE 0 /* Invalid */ |
2703 | +#define EV_CURRENT 1 /* Current */ |
2704 | +#define EV_NUM 2 /* number of versions */ |
2705 | + |
2706 | +/* Section Header */ |
2707 | +typedef struct { |
2708 | + Elf32_Word sh_name; /* name - index into section header |
2709 | + string table section */ |
2710 | + Elf32_Word sh_type; /* type */ |
2711 | + Elf32_Word sh_flags; /* flags */ |
2712 | + Elf32_Addr sh_addr; /* address */ |
2713 | + Elf32_Off sh_offset; /* file offset */ |
2714 | + Elf32_Word sh_size; /* section size */ |
2715 | + Elf32_Word sh_link; /* section header table index link */ |
2716 | + Elf32_Word sh_info; /* extra information */ |
2717 | + Elf32_Word sh_addralign; /* address alignment */ |
2718 | + Elf32_Word sh_entsize; /* section entry size */ |
2719 | +} Elf32_Shdr; |
2720 | + |
2721 | +typedef struct { |
2722 | + Elf64_Half sh_name; /* section name */ |
2723 | + Elf64_Half sh_type; /* section type */ |
2724 | + Elf64_Xword sh_flags; /* section flags */ |
2725 | + Elf64_Addr sh_addr; /* virtual address */ |
2726 | + Elf64_Off sh_offset; /* file offset */ |
2727 | + Elf64_Xword sh_size; /* section size */ |
2728 | + Elf64_Half sh_link; /* link to another */ |
2729 | + Elf64_Half sh_info; /* misc info */ |
2730 | + Elf64_Xword sh_addralign; /* memory alignment */ |
2731 | + Elf64_Xword sh_entsize; /* table entry size */ |
2732 | +} Elf64_Shdr; |
2733 | + |
2734 | +/* Special Section Indexes */ |
2735 | +#define SHN_UNDEF 0 /* undefined */ |
2736 | +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ |
2737 | +#define SHN_LOPROC 0xff00 /* reserved range for processor */ |
2738 | +#define SHN_HIPROC 0xff1f /* specific section indexes */ |
2739 | +#define SHN_ABS 0xfff1 /* absolute value */ |
2740 | +#define SHN_COMMON 0xfff2 /* common symbol */ |
2741 | +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ |
2742 | + |
2743 | +/* sh_type */ |
2744 | +#define SHT_NULL 0 /* inactive */ |
2745 | +#define SHT_PROGBITS 1 /* program defined information */ |
2746 | +#define SHT_SYMTAB 2 /* symbol table section */ |
2747 | +#define SHT_STRTAB 3 /* string table section */ |
2748 | +#define SHT_RELA 4 /* relocation section with addends*/ |
2749 | +#define SHT_HASH 5 /* symbol hash table section */ |
2750 | +#define SHT_DYNAMIC 6 /* dynamic section */ |
2751 | +#define SHT_NOTE 7 /* note section */ |
2752 | +#define SHT_NOBITS 8 /* no space section */ |
2753 | +#define SHT_REL 9 /* relation section without addends */ |
2754 | +#define SHT_SHLIB 10 /* reserved - purpose unknown */ |
2755 | +#define SHT_DYNSYM 11 /* dynamic symbol table section */ |
2756 | +#define SHT_NUM 12 /* number of section types */ |
2757 | +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ |
2758 | +#define SHT_HIPROC 0x7fffffff /* specific section header types */ |
2759 | +#define SHT_LOUSER 0x80000000 /* reserved range for application */ |
2760 | +#define SHT_HIUSER 0xffffffff /* specific indexes */ |
2761 | + |
2762 | +/* Section names */ |
2763 | +#define ELF_BSS ".bss" /* uninitialized data */ |
2764 | +#define ELF_DATA ".data" /* initialized data */ |
2765 | +#define ELF_DEBUG ".debug" /* debug */ |
2766 | +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ |
2767 | +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ |
2768 | +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ |
2769 | +#define ELF_FINI ".fini" /* termination code */ |
2770 | +#define ELF_GOT ".got" /* global offset table */ |
2771 | +#define ELF_HASH ".hash" /* symbol hash table */ |
2772 | +#define ELF_INIT ".init" /* initialization code */ |
2773 | +#define ELF_REL_DATA ".rel.data" /* relocation data */ |
2774 | +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ |
2775 | +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ |
2776 | +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ |
2777 | +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ |
2778 | +#define ELF_REL_TEXT ".rel.text" /* relocation code */ |
2779 | +#define ELF_RODATA ".rodata" /* read-only data */ |
2780 | +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ |
2781 | +#define ELF_STRTAB ".strtab" /* string table */ |
2782 | +#define ELF_SYMTAB ".symtab" /* symbol table */ |
2783 | +#define ELF_TEXT ".text" /* code */ |
2784 | + |
2785 | + |
2786 | +/* Section Attribute Flags - sh_flags */ |
2787 | +#define SHF_WRITE 0x1 /* Writable */ |
2788 | +#define SHF_ALLOC 0x2 /* occupies memory */ |
2789 | +#define SHF_EXECINSTR 0x4 /* executable */ |
2790 | +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ |
2791 | + /* specific section attributes */ |
2792 | + |
2793 | +/* Symbol Table Entry */ |
2794 | +typedef struct elf32_sym { |
2795 | + Elf32_Word st_name; /* name - index into string table */ |
2796 | + Elf32_Addr st_value; /* symbol value */ |
2797 | + Elf32_Word st_size; /* symbol size */ |
2798 | + unsigned char st_info; /* type and binding */ |
2799 | + unsigned char st_other; /* 0 - no defined meaning */ |
2800 | + Elf32_Half st_shndx; /* section header index */ |
2801 | +} Elf32_Sym; |
2802 | + |
2803 | +typedef struct { |
2804 | + Elf64_Half st_name; /* Symbol name index in str table */ |
2805 | + Elf_Byte st_info; /* type / binding attrs */ |
2806 | + Elf_Byte st_other; /* unused */ |
2807 | + Elf64_Quarter st_shndx; /* section index of symbol */ |
2808 | + Elf64_Xword st_value; /* value of symbol */ |
2809 | + Elf64_Xword st_size; /* size of symbol */ |
2810 | +} Elf64_Sym; |
2811 | + |
2812 | +/* Symbol table index */ |
2813 | +#define STN_UNDEF 0 /* undefined */ |
2814 | + |
2815 | +/* Extract symbol info - st_info */ |
2816 | +#define ELF32_ST_BIND(x) ((x) >> 4) |
2817 | +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) |
2818 | +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) |
2819 | + |
2820 | +#define ELF64_ST_BIND(x) ((x) >> 4) |
2821 | +#define ELF64_ST_TYPE(x) (((unsigned int) x) & 0xf) |
2822 | +#define ELF64_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) |
2823 | + |
2824 | +/* Symbol Binding - ELF32_ST_BIND - st_info */ |
2825 | +#define STB_LOCAL 0 /* Local symbol */ |
2826 | +#define STB_GLOBAL 1 /* Global symbol */ |
2827 | +#define STB_WEAK 2 /* like global - lower precedence */ |
2828 | +#define STB_NUM 3 /* number of symbol bindings */ |
2829 | +#define STB_LOPROC 13 /* reserved range for processor */ |
2830 | +#define STB_HIPROC 15 /* specific symbol bindings */ |
2831 | + |
2832 | +/* Symbol type - ELF32_ST_TYPE - st_info */ |
2833 | +#define STT_NOTYPE 0 /* not specified */ |
2834 | +#define STT_OBJECT 1 /* data object */ |
2835 | +#define STT_FUNC 2 /* function */ |
2836 | +#define STT_SECTION 3 /* section */ |
2837 | +#define STT_FILE 4 /* file */ |
2838 | +#define STT_NUM 5 /* number of symbol types */ |
2839 | +#define STT_LOPROC 13 /* reserved range for processor */ |
2840 | +#define STT_HIPROC 15 /* specific symbol types */ |
2841 | + |
2842 | +/* Relocation entry with implicit addend */ |
2843 | +typedef struct { |
2844 | + Elf32_Addr r_offset; /* offset of relocation */ |
2845 | + Elf32_Word r_info; /* symbol table index and type */ |
2846 | +} Elf32_Rel; |
2847 | + |
2848 | +/* Relocation entry with explicit addend */ |
2849 | +typedef struct { |
2850 | + Elf32_Addr r_offset; /* offset of relocation */ |
2851 | + Elf32_Word r_info; /* symbol table index and type */ |
2852 | + Elf32_Sword r_addend; |
2853 | +} Elf32_Rela; |
2854 | + |
2855 | +/* Extract relocation info - r_info */ |
2856 | +#define ELF32_R_SYM(i) ((i) >> 8) |
2857 | +#define ELF32_R_TYPE(i) ((unsigned char) (i)) |
2858 | +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) |
2859 | + |
2860 | +typedef struct { |
2861 | + Elf64_Xword r_offset; /* where to do it */ |
2862 | + Elf64_Xword r_info; /* index & type of relocation */ |
2863 | +} Elf64_Rel; |
2864 | + |
2865 | +typedef struct { |
2866 | + Elf64_Xword r_offset; /* where to do it */ |
2867 | + Elf64_Xword r_info; /* index & type of relocation */ |
2868 | + Elf64_Sxword r_addend; /* adjustment value */ |
2869 | +} Elf64_Rela; |
2870 | + |
2871 | +#define ELF64_R_SYM(info) ((info) >> 32) |
2872 | +#define ELF64_R_TYPE(info) ((info) & 0xFFFFFFFF) |
2873 | +#define ELF64_R_INFO(s,t) (((s) << 32) + (u_int32_t)(t)) |
2874 | + |
2875 | +/* Program Header */ |
2876 | +typedef struct { |
2877 | + Elf32_Word p_type; /* segment type */ |
2878 | + Elf32_Off p_offset; /* segment offset */ |
2879 | + Elf32_Addr p_vaddr; /* virtual address of segment */ |
2880 | + Elf32_Addr p_paddr; /* physical address - ignored? */ |
2881 | + Elf32_Word p_filesz; /* number of bytes in file for seg. */ |
2882 | + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ |
2883 | + Elf32_Word p_flags; /* flags */ |
2884 | + Elf32_Word p_align; /* memory alignment */ |
2885 | +} Elf32_Phdr; |
2886 | + |
2887 | +typedef struct { |
2888 | + Elf64_Half p_type; /* entry type */ |
2889 | + Elf64_Half p_flags; /* flags */ |
2890 | + Elf64_Off p_offset; /* offset */ |
2891 | + Elf64_Addr p_vaddr; /* virtual address */ |
2892 | + Elf64_Addr p_paddr; /* physical address */ |
2893 | + Elf64_Xword p_filesz; /* file size */ |
2894 | + Elf64_Xword p_memsz; /* memory size */ |
2895 | + Elf64_Xword p_align; /* memory & file alignment */ |
2896 | +} Elf64_Phdr; |
2897 | + |
2898 | +/* Segment types - p_type */ |
2899 | +#define PT_NULL 0 /* unused */ |
2900 | +#define PT_LOAD 1 /* loadable segment */ |
2901 | +#define PT_DYNAMIC 2 /* dynamic linking section */ |
2902 | +#define PT_INTERP 3 /* the RTLD */ |
2903 | +#define PT_NOTE 4 /* auxiliary information */ |
2904 | +#define PT_SHLIB 5 /* reserved - purpose undefined */ |
2905 | +#define PT_PHDR 6 /* program header */ |
2906 | +#define PT_NUM 7 /* Number of segment types */ |
2907 | +#define PT_LOPROC 0x70000000 /* reserved range for processor */ |
2908 | +#define PT_HIPROC 0x7fffffff /* specific segment types */ |
2909 | + |
2910 | +/* Segment flags - p_flags */ |
2911 | +#define PF_X 0x1 /* Executable */ |
2912 | +#define PF_W 0x2 /* Writable */ |
2913 | +#define PF_R 0x4 /* Readable */ |
2914 | +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ |
2915 | + /* specific segment flags */ |
2916 | + |
2917 | +/* Dynamic structure */ |
2918 | +typedef struct { |
2919 | + Elf32_Sword d_tag; /* controls meaning of d_val */ |
2920 | + union { |
2921 | + Elf32_Word d_val; /* Multiple meanings - see d_tag */ |
2922 | + Elf32_Addr d_ptr; /* program virtual address */ |
2923 | + } d_un; |
2924 | +} Elf32_Dyn; |
2925 | + |
2926 | +typedef struct { |
2927 | + Elf64_Xword d_tag; /* controls meaning of d_val */ |
2928 | + union { |
2929 | + Elf64_Addr d_ptr; |
2930 | + Elf64_Xword d_val; |
2931 | + } d_un; |
2932 | +} Elf64_Dyn; |
2933 | + |
2934 | +/* Dynamic Array Tags - d_tag */ |
2935 | +#define DT_NULL 0 /* marks end of _DYNAMIC array */ |
2936 | +#define DT_NEEDED 1 /* string table offset of needed lib */ |
2937 | +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ |
2938 | +#define DT_PLTGOT 3 /* address PLT/GOT */ |
2939 | +#define DT_HASH 4 /* address of symbol hash table */ |
2940 | +#define DT_STRTAB 5 /* address of string table */ |
2941 | +#define DT_SYMTAB 6 /* address of symbol table */ |
2942 | +#define DT_RELA 7 /* address of relocation table */ |
2943 | +#define DT_RELASZ 8 /* size of relocation table */ |
2944 | +#define DT_RELAENT 9 /* size of relocation entry */ |
2945 | +#define DT_STRSZ 10 /* size of string table */ |
2946 | +#define DT_SYMENT 11 /* size of symbol table entry */ |
2947 | +#define DT_INIT 12 /* address of initialization func. */ |
2948 | +#define DT_FINI 13 /* address of termination function */ |
2949 | +#define DT_SONAME 14 /* string table offset of shared obj */ |
2950 | +#define DT_RPATH 15 /* string table offset of library |
2951 | + search path */ |
2952 | +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ |
2953 | +#define DT_REL 17 /* address of rel. tbl. w addends */ |
2954 | +#define DT_RELSZ 18 /* size of DT_REL relocation table */ |
2955 | +#define DT_RELENT 19 /* size of DT_REL relocation entry */ |
2956 | +#define DT_PLTREL 20 /* PLT referenced relocation entry */ |
2957 | +#define DT_DEBUG 21 /* bugger */ |
2958 | +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ |
2959 | +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ |
2960 | +#define DT_BIND_NOW 24 /* Bind now regardless of env setting */ |
2961 | +#define DT_NUM 25 /* Number used. */ |
2962 | +#define DT_LOPROC 0x70000000 /* reserved range for processor */ |
2963 | +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ |
2964 | + |
2965 | +/* Standard ELF hashing function */ |
2966 | +unsigned int elf_hash(const unsigned char *name); |
2967 | + |
2968 | +/* |
2969 | + * Note Definitions |
2970 | + */ |
2971 | +typedef struct { |
2972 | + Elf32_Word namesz; |
2973 | + Elf32_Word descsz; |
2974 | + Elf32_Word type; |
2975 | +} Elf32_Note; |
2976 | + |
2977 | +typedef struct { |
2978 | + Elf64_Half namesz; |
2979 | + Elf64_Half descsz; |
2980 | + Elf64_Half type; |
2981 | +} Elf64_Note; |
2982 | + |
2983 | + |
2984 | +#if defined(ELFSIZE) |
2985 | +#define CONCAT(x,y) __CONCAT(x,y) |
2986 | +#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x))) |
2987 | +#define ELFNAME2(x,y) CONCAT(x,CONCAT(_elf,CONCAT(ELFSIZE,CONCAT(_,y)))) |
2988 | +#define ELFNAMEEND(x) CONCAT(x,CONCAT(_elf,ELFSIZE)) |
2989 | +#define ELFDEFNNAME(x) CONCAT(ELF,CONCAT(ELFSIZE,CONCAT(_,x))) |
2990 | +#endif |
2991 | + |
2992 | +#if defined(ELFSIZE) && (ELFSIZE == 32) |
2993 | +#define Elf_Ehdr Elf32_Ehdr |
2994 | +#define Elf_Phdr Elf32_Phdr |
2995 | +#define Elf_Shdr Elf32_Shdr |
2996 | +#define Elf_Sym Elf32_Sym |
2997 | +#define Elf_Rel Elf32_Rel |
2998 | +#define Elf_RelA Elf32_Rela |
2999 | +#define Elf_Dyn Elf32_Dyn |
3000 | +#define Elf_Word Elf32_Word |
3001 | +#define Elf_Sword Elf32_Sword |
3002 | +#define Elf_Addr Elf32_Addr |
3003 | +#define Elf_Off Elf32_Off |
3004 | +#define Elf_Nhdr Elf32_Nhdr |
3005 | +#define Elf_Note Elf32_Note |
3006 | + |
3007 | +#define ELF_R_SYM ELF32_R_SYM |
3008 | +#define ELF_R_TYPE ELF32_R_TYPE |
3009 | +#define ELF_R_INFO ELF32_R_INFO |
3010 | +#define ELFCLASS ELFCLASS32 |
3011 | + |
3012 | +#define ELF_ST_BIND ELF32_ST_BIND |
3013 | +#define ELF_ST_TYPE ELF32_ST_TYPE |
3014 | +#define ELF_ST_INFO ELF32_ST_INFO |
3015 | + |
3016 | +#define AuxInfo Aux32Info |
3017 | +#elif defined(ELFSIZE) && (ELFSIZE == 64) |
3018 | +#define Elf_Ehdr Elf64_Ehdr |
3019 | +#define Elf_Phdr Elf64_Phdr |
3020 | +#define Elf_Shdr Elf64_Shdr |
3021 | +#define Elf_Sym Elf64_Sym |
3022 | +#define Elf_Rel Elf64_Rel |
3023 | +#define Elf_RelA Elf64_Rela |
3024 | +#define Elf_Dyn Elf64_Dyn |
3025 | +#define Elf_Word Elf64_Word |
3026 | +#define Elf_Sword Elf64_Sword |
3027 | +#define Elf_Addr Elf64_Addr |
3028 | +#define Elf_Off Elf64_Off |
3029 | +#define Elf_Nhdr Elf64_Nhdr |
3030 | +#define Elf_Note Elf64_Note |
3031 | + |
3032 | +#define ELF_R_SYM ELF64_R_SYM |
3033 | +#define ELF_R_TYPE ELF64_R_TYPE |
3034 | +#define ELF_R_INFO ELF64_R_INFO |
3035 | +#define ELFCLASS ELFCLASS64 |
3036 | + |
3037 | +#define ELF_ST_BIND ELF64_ST_BIND |
3038 | +#define ELF_ST_TYPE ELF64_ST_TYPE |
3039 | +#define ELF_ST_INFO ELF64_ST_INFO |
3040 | + |
3041 | +#define AuxInfo Aux64Info |
3042 | +#endif |
3043 | + |
3044 | +#endif /* __XEN_PUBLIC_ELFSTRUCTS_H__ */ |
3045 | Index: head-2008-04-15/include/xen/interface/hvm/e820.h |
3046 | =================================================================== |
3047 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3048 | +++ head-2008-04-15/include/xen/interface/hvm/e820.h 2007-06-12 13:14:19.000000000 +0200 |
3049 | @@ -0,0 +1,34 @@ |
3050 | + |
3051 | +/* |
3052 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3053 | + * of this software and associated documentation files (the "Software"), to |
3054 | + * deal in the Software without restriction, including without limitation the |
3055 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3056 | + * sell copies of the Software, and to permit persons to whom the Software is |
3057 | + * furnished to do so, subject to the following conditions: |
3058 | + * |
3059 | + * The above copyright notice and this permission notice shall be included in |
3060 | + * all copies or substantial portions of the Software. |
3061 | + * |
3062 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3063 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3064 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3065 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3066 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3067 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3068 | + * DEALINGS IN THE SOFTWARE. |
3069 | + */ |
3070 | + |
3071 | +#ifndef __XEN_PUBLIC_HVM_E820_H__ |
3072 | +#define __XEN_PUBLIC_HVM_E820_H__ |
3073 | + |
3074 | +/* E820 location in HVM virtual address space. */ |
3075 | +#define HVM_E820_PAGE 0x00090000 |
3076 | +#define HVM_E820_NR_OFFSET 0x000001E8 |
3077 | +#define HVM_E820_OFFSET 0x000002D0 |
3078 | + |
3079 | +#define HVM_BELOW_4G_RAM_END 0xF0000000 |
3080 | +#define HVM_BELOW_4G_MMIO_START HVM_BELOW_4G_RAM_END |
3081 | +#define HVM_BELOW_4G_MMIO_LENGTH ((1ULL << 32) - HVM_BELOW_4G_MMIO_START) |
3082 | + |
3083 | +#endif /* __XEN_PUBLIC_HVM_E820_H__ */ |
3084 | Index: head-2008-04-15/include/xen/interface/hvm/hvm_info_table.h |
3085 | =================================================================== |
3086 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3087 | +++ head-2008-04-15/include/xen/interface/hvm/hvm_info_table.h 2007-06-12 13:14:19.000000000 +0200 |
3088 | @@ -0,0 +1,41 @@ |
3089 | +/****************************************************************************** |
3090 | + * hvm/hvm_info_table.h |
3091 | + * |
3092 | + * HVM parameter and information table, written into guest memory map. |
3093 | + * |
3094 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3095 | + * of this software and associated documentation files (the "Software"), to |
3096 | + * deal in the Software without restriction, including without limitation the |
3097 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3098 | + * sell copies of the Software, and to permit persons to whom the Software is |
3099 | + * furnished to do so, subject to the following conditions: |
3100 | + * |
3101 | + * The above copyright notice and this permission notice shall be included in |
3102 | + * all copies or substantial portions of the Software. |
3103 | + * |
3104 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3105 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3106 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3107 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3108 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3109 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3110 | + * DEALINGS IN THE SOFTWARE. |
3111 | + */ |
3112 | + |
3113 | +#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ |
3114 | +#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ |
3115 | + |
3116 | +#define HVM_INFO_PFN 0x09F |
3117 | +#define HVM_INFO_OFFSET 0x800 |
3118 | +#define HVM_INFO_PADDR ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET) |
3119 | + |
3120 | +struct hvm_info_table { |
3121 | + char signature[8]; /* "HVM INFO" */ |
3122 | + uint32_t length; |
3123 | + uint8_t checksum; |
3124 | + uint8_t acpi_enabled; |
3125 | + uint8_t apic_mode; |
3126 | + uint32_t nr_vcpus; |
3127 | +}; |
3128 | + |
3129 | +#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */ |
3130 | Index: head-2008-04-15/include/xen/interface/hvm/hvm_op.h |
3131 | =================================================================== |
3132 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3133 | +++ head-2008-04-15/include/xen/interface/hvm/hvm_op.h 2007-10-15 09:39:38.000000000 +0200 |
3134 | @@ -0,0 +1,76 @@ |
3135 | +/* |
3136 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3137 | + * of this software and associated documentation files (the "Software"), to |
3138 | + * deal in the Software without restriction, including without limitation the |
3139 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3140 | + * sell copies of the Software, and to permit persons to whom the Software is |
3141 | + * furnished to do so, subject to the following conditions: |
3142 | + * |
3143 | + * The above copyright notice and this permission notice shall be included in |
3144 | + * all copies or substantial portions of the Software. |
3145 | + * |
3146 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3147 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3148 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3149 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3150 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3151 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3152 | + * DEALINGS IN THE SOFTWARE. |
3153 | + */ |
3154 | + |
3155 | +#ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ |
3156 | +#define __XEN_PUBLIC_HVM_HVM_OP_H__ |
3157 | + |
3158 | +/* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ |
3159 | +#define HVMOP_set_param 0 |
3160 | +#define HVMOP_get_param 1 |
3161 | +struct xen_hvm_param { |
3162 | + domid_t domid; /* IN */ |
3163 | + uint32_t index; /* IN */ |
3164 | + uint64_t value; /* IN/OUT */ |
3165 | +}; |
3166 | +typedef struct xen_hvm_param xen_hvm_param_t; |
3167 | +DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t); |
3168 | + |
3169 | +/* Set the logical level of one of a domain's PCI INTx wires. */ |
3170 | +#define HVMOP_set_pci_intx_level 2 |
3171 | +struct xen_hvm_set_pci_intx_level { |
3172 | + /* Domain to be updated. */ |
3173 | + domid_t domid; |
3174 | + /* PCI INTx identification in PCI topology (domain:bus:device:intx). */ |
3175 | + uint8_t domain, bus, device, intx; |
3176 | + /* Assertion level (0 = unasserted, 1 = asserted). */ |
3177 | + uint8_t level; |
3178 | +}; |
3179 | +typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t; |
3180 | +DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t); |
3181 | + |
3182 | +/* Set the logical level of one of a domain's ISA IRQ wires. */ |
3183 | +#define HVMOP_set_isa_irq_level 3 |
3184 | +struct xen_hvm_set_isa_irq_level { |
3185 | + /* Domain to be updated. */ |
3186 | + domid_t domid; |
3187 | + /* ISA device identification, by ISA IRQ (0-15). */ |
3188 | + uint8_t isa_irq; |
3189 | + /* Assertion level (0 = unasserted, 1 = asserted). */ |
3190 | + uint8_t level; |
3191 | +}; |
3192 | +typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t; |
3193 | +DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t); |
3194 | + |
3195 | +#define HVMOP_set_pci_link_route 4 |
3196 | +struct xen_hvm_set_pci_link_route { |
3197 | + /* Domain to be updated. */ |
3198 | + domid_t domid; |
3199 | + /* PCI link identifier (0-3). */ |
3200 | + uint8_t link; |
3201 | + /* ISA IRQ (1-15), or 0 (disable link). */ |
3202 | + uint8_t isa_irq; |
3203 | +}; |
3204 | +typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t; |
3205 | +DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t); |
3206 | + |
3207 | +/* Flushes all VCPU TLBs: @arg must be NULL. */ |
3208 | +#define HVMOP_flush_tlbs 5 |
3209 | + |
3210 | +#endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ |
3211 | Index: head-2008-04-15/include/xen/interface/hvm/ioreq.h |
3212 | =================================================================== |
3213 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3214 | +++ head-2008-04-15/include/xen/interface/hvm/ioreq.h 2008-04-02 12:34:02.000000000 +0200 |
3215 | @@ -0,0 +1,127 @@ |
3216 | +/* |
3217 | + * ioreq.h: I/O request definitions for device models |
3218 | + * Copyright (c) 2004, Intel Corporation. |
3219 | + * |
3220 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3221 | + * of this software and associated documentation files (the "Software"), to |
3222 | + * deal in the Software without restriction, including without limitation the |
3223 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3224 | + * sell copies of the Software, and to permit persons to whom the Software is |
3225 | + * furnished to do so, subject to the following conditions: |
3226 | + * |
3227 | + * The above copyright notice and this permission notice shall be included in |
3228 | + * all copies or substantial portions of the Software. |
3229 | + * |
3230 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3231 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3232 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3233 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3234 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3235 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3236 | + * DEALINGS IN THE SOFTWARE. |
3237 | + */ |
3238 | + |
3239 | +#ifndef _IOREQ_H_ |
3240 | +#define _IOREQ_H_ |
3241 | + |
3242 | +#define IOREQ_READ 1 |
3243 | +#define IOREQ_WRITE 0 |
3244 | + |
3245 | +#define STATE_IOREQ_NONE 0 |
3246 | +#define STATE_IOREQ_READY 1 |
3247 | +#define STATE_IOREQ_INPROCESS 2 |
3248 | +#define STATE_IORESP_READY 3 |
3249 | + |
3250 | +#define IOREQ_TYPE_PIO 0 /* pio */ |
3251 | +#define IOREQ_TYPE_COPY 1 /* mmio ops */ |
3252 | +#define IOREQ_TYPE_TIMEOFFSET 7 |
3253 | +#define IOREQ_TYPE_INVALIDATE 8 /* mapcache */ |
3254 | + |
3255 | +/* |
3256 | + * VMExit dispatcher should cooperate with instruction decoder to |
3257 | + * prepare this structure and notify service OS and DM by sending |
3258 | + * virq |
3259 | + */ |
3260 | +struct ioreq { |
3261 | + uint64_t addr; /* physical address */ |
3262 | + uint64_t size; /* size in bytes */ |
3263 | + uint64_t count; /* for rep prefixes */ |
3264 | + uint64_t data; /* data (or paddr of data) */ |
3265 | + uint8_t state:4; |
3266 | + uint8_t data_is_ptr:1; /* if 1, data above is the guest paddr |
3267 | + * of the real data to use. */ |
3268 | + uint8_t dir:1; /* 1=read, 0=write */ |
3269 | + uint8_t df:1; |
3270 | + uint8_t pad:1; |
3271 | + uint8_t type; /* I/O type */ |
3272 | + uint8_t _pad0[6]; |
3273 | + uint64_t io_count; /* How many IO done on a vcpu */ |
3274 | +}; |
3275 | +typedef struct ioreq ioreq_t; |
3276 | + |
3277 | +struct vcpu_iodata { |
3278 | + struct ioreq vp_ioreq; |
3279 | + /* Event channel port, used for notifications to/from the device model. */ |
3280 | + uint32_t vp_eport; |
3281 | + uint32_t _pad0; |
3282 | +}; |
3283 | +typedef struct vcpu_iodata vcpu_iodata_t; |
3284 | + |
3285 | +struct shared_iopage { |
3286 | + struct vcpu_iodata vcpu_iodata[1]; |
3287 | +}; |
3288 | +typedef struct shared_iopage shared_iopage_t; |
3289 | + |
3290 | +struct buf_ioreq { |
3291 | + uint8_t type; /* I/O type */ |
3292 | + uint8_t pad:1; |
3293 | + uint8_t dir:1; /* 1=read, 0=write */ |
3294 | + uint8_t size:2; /* 0=>1, 1=>2, 2=>4, 3=>8. If 8, use two buf_ioreqs */ |
3295 | + uint32_t addr:20;/* physical address */ |
3296 | + uint32_t data; /* data */ |
3297 | +}; |
3298 | +typedef struct buf_ioreq buf_ioreq_t; |
3299 | + |
3300 | +#define IOREQ_BUFFER_SLOT_NUM 511 /* 8 bytes each, plus 2 4-byte indexes */ |
3301 | +struct buffered_iopage { |
3302 | + unsigned int read_pointer; |
3303 | + unsigned int write_pointer; |
3304 | + buf_ioreq_t buf_ioreq[IOREQ_BUFFER_SLOT_NUM]; |
3305 | +}; /* NB. Size of this structure must be no greater than one page. */ |
3306 | +typedef struct buffered_iopage buffered_iopage_t; |
3307 | + |
3308 | +#if defined(__ia64__) |
3309 | +struct pio_buffer { |
3310 | + uint32_t page_offset; |
3311 | + uint32_t pointer; |
3312 | + uint32_t data_end; |
3313 | + uint32_t buf_size; |
3314 | + void *opaque; |
3315 | +}; |
3316 | + |
3317 | +#define PIO_BUFFER_IDE_PRIMARY 0 /* I/O port = 0x1F0 */ |
3318 | +#define PIO_BUFFER_IDE_SECONDARY 1 /* I/O port = 0x170 */ |
3319 | +#define PIO_BUFFER_ENTRY_NUM 2 |
3320 | +struct buffered_piopage { |
3321 | + struct pio_buffer pio[PIO_BUFFER_ENTRY_NUM]; |
3322 | + uint8_t buffer[1]; |
3323 | +}; |
3324 | +#endif /* defined(__ia64__) */ |
3325 | + |
3326 | +#define ACPI_PM1A_EVT_BLK_ADDRESS 0x0000000000001f40 |
3327 | +#define ACPI_PM1A_CNT_BLK_ADDRESS (ACPI_PM1A_EVT_BLK_ADDRESS + 0x04) |
3328 | +#define ACPI_PM_TMR_BLK_ADDRESS (ACPI_PM1A_EVT_BLK_ADDRESS + 0x08) |
3329 | +#define ACPI_GPE0_BLK_ADDRESS (ACPI_PM_TMR_BLK_ADDRESS + 0x20) |
3330 | +#define ACPI_GPE0_BLK_LEN 0x08 |
3331 | + |
3332 | +#endif /* _IOREQ_H_ */ |
3333 | + |
3334 | +/* |
3335 | + * Local variables: |
3336 | + * mode: C |
3337 | + * c-set-style: "BSD" |
3338 | + * c-basic-offset: 4 |
3339 | + * tab-width: 4 |
3340 | + * indent-tabs-mode: nil |
3341 | + * End: |
3342 | + */ |
3343 | Index: head-2008-04-15/include/xen/interface/hvm/params.h |
3344 | =================================================================== |
3345 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3346 | +++ head-2008-04-15/include/xen/interface/hvm/params.h 2008-04-02 12:34:02.000000000 +0200 |
3347 | @@ -0,0 +1,89 @@ |
3348 | +/* |
3349 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3350 | + * of this software and associated documentation files (the "Software"), to |
3351 | + * deal in the Software without restriction, including without limitation the |
3352 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3353 | + * sell copies of the Software, and to permit persons to whom the Software is |
3354 | + * furnished to do so, subject to the following conditions: |
3355 | + * |
3356 | + * The above copyright notice and this permission notice shall be included in |
3357 | + * all copies or substantial portions of the Software. |
3358 | + * |
3359 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3360 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3361 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3362 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3363 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3364 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3365 | + * DEALINGS IN THE SOFTWARE. |
3366 | + */ |
3367 | + |
3368 | +#ifndef __XEN_PUBLIC_HVM_PARAMS_H__ |
3369 | +#define __XEN_PUBLIC_HVM_PARAMS_H__ |
3370 | + |
3371 | +#include "hvm_op.h" |
3372 | + |
3373 | +/* |
3374 | + * Parameter space for HVMOP_{set,get}_param. |
3375 | + */ |
3376 | + |
3377 | +/* |
3378 | + * How should CPU0 event-channel notifications be delivered? |
3379 | + * val[63:56] == 0: val[55:0] is a delivery GSI (Global System Interrupt). |
3380 | + * val[63:56] == 1: val[55:0] is a delivery PCI INTx line, as follows: |
3381 | + * Domain = val[47:32], Bus = val[31:16], |
3382 | + * DevFn = val[15: 8], IntX = val[ 1: 0] |
3383 | + * If val == 0 then CPU0 event-channel notifications are not delivered. |
3384 | + */ |
3385 | +#define HVM_PARAM_CALLBACK_IRQ 0 |
3386 | + |
3387 | +/* |
3388 | + * These are not used by Xen. They are here for convenience of HVM-guest |
3389 | + * xenbus implementations. |
3390 | + */ |
3391 | +#define HVM_PARAM_STORE_PFN 1 |
3392 | +#define HVM_PARAM_STORE_EVTCHN 2 |
3393 | + |
3394 | +#define HVM_PARAM_PAE_ENABLED 4 |
3395 | + |
3396 | +#define HVM_PARAM_IOREQ_PFN 5 |
3397 | + |
3398 | +#define HVM_PARAM_BUFIOREQ_PFN 6 |
3399 | + |
3400 | +#ifdef __ia64__ |
3401 | +#define HVM_PARAM_NVRAM_FD 7 |
3402 | +#define HVM_PARAM_VHPT_SIZE 8 |
3403 | +#define HVM_PARAM_BUFPIOREQ_PFN 9 |
3404 | +#endif |
3405 | + |
3406 | +/* |
3407 | + * Set mode for virtual timers (currently x86 only): |
3408 | + * delay_for_missed_ticks (default): |
3409 | + * Do not advance a vcpu's time beyond the correct delivery time for |
3410 | + * interrupts that have been missed due to preemption. Deliver missed |
3411 | + * interrupts when the vcpu is rescheduled and advance the vcpu's virtual |
3412 | + * time stepwise for each one. |
3413 | + * no_delay_for_missed_ticks: |
3414 | + * As above, missed interrupts are delivered, but guest time always tracks |
3415 | + * wallclock (i.e., real) time while doing so. |
3416 | + * no_missed_ticks_pending: |
3417 | + * No missed interrupts are held pending. Instead, to ensure ticks are |
3418 | + * delivered at some non-zero rate, if we detect missed ticks then the |
3419 | + * internal tick alarm is not disabled if the VCPU is preempted during the |
3420 | + * next tick period. |
3421 | + * one_missed_tick_pending: |
3422 | + * Missed interrupts are collapsed together and delivered as one 'late tick'. |
3423 | + * Guest time always tracks wallclock (i.e., real) time. |
3424 | + */ |
3425 | +#define HVM_PARAM_TIMER_MODE 10 |
3426 | +#define HVMPTM_delay_for_missed_ticks 0 |
3427 | +#define HVMPTM_no_delay_for_missed_ticks 1 |
3428 | +#define HVMPTM_no_missed_ticks_pending 2 |
3429 | +#define HVMPTM_one_missed_tick_pending 3 |
3430 | + |
3431 | +/* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */ |
3432 | +#define HVM_PARAM_HPET_ENABLED 11 |
3433 | + |
3434 | +#define HVM_NR_PARAMS 12 |
3435 | + |
3436 | +#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ |
3437 | Index: head-2008-04-15/include/xen/interface/hvm/save.h |
3438 | =================================================================== |
3439 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3440 | +++ head-2008-04-15/include/xen/interface/hvm/save.h 2008-04-02 12:34:02.000000000 +0200 |
3441 | @@ -0,0 +1,88 @@ |
3442 | +/* |
3443 | + * hvm/save.h |
3444 | + * |
3445 | + * Structure definitions for HVM state that is held by Xen and must |
3446 | + * be saved along with the domain's memory and device-model state. |
3447 | + * |
3448 | + * Copyright (c) 2007 XenSource Ltd. |
3449 | + * |
3450 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3451 | + * of this software and associated documentation files (the "Software"), to |
3452 | + * deal in the Software without restriction, including without limitation the |
3453 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3454 | + * sell copies of the Software, and to permit persons to whom the Software is |
3455 | + * furnished to do so, subject to the following conditions: |
3456 | + * |
3457 | + * The above copyright notice and this permission notice shall be included in |
3458 | + * all copies or substantial portions of the Software. |
3459 | + * |
3460 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3461 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3462 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3463 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3464 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3465 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3466 | + * DEALINGS IN THE SOFTWARE. |
3467 | + */ |
3468 | + |
3469 | +#ifndef __XEN_PUBLIC_HVM_SAVE_H__ |
3470 | +#define __XEN_PUBLIC_HVM_SAVE_H__ |
3471 | + |
3472 | +/* |
3473 | + * Structures in this header *must* have the same layout in 32bit |
3474 | + * and 64bit environments: this means that all fields must be explicitly |
3475 | + * sized types and aligned to their sizes, and the structs must be |
3476 | + * a multiple of eight bytes long. |
3477 | + * |
3478 | + * Only the state necessary for saving and restoring (i.e. fields |
3479 | + * that are analogous to actual hardware state) should go in this file. |
3480 | + * Internal mechanisms should be kept in Xen-private headers. |
3481 | + */ |
3482 | + |
3483 | +#if !defined(__GNUC__) || defined(__STRICT_ANSI__) |
3484 | +#error "Anonymous structs/unions are a GNU extension." |
3485 | +#endif |
3486 | + |
3487 | +/* |
3488 | + * Each entry is preceded by a descriptor giving its type and length |
3489 | + */ |
3490 | +struct hvm_save_descriptor { |
3491 | + uint16_t typecode; /* Used to demux the various types below */ |
3492 | + uint16_t instance; /* Further demux within a type */ |
3493 | + uint32_t length; /* In bytes, *not* including this descriptor */ |
3494 | +}; |
3495 | + |
3496 | + |
3497 | +/* |
3498 | + * Each entry has a datatype associated with it: for example, the CPU state |
3499 | + * is saved as a HVM_SAVE_TYPE(CPU), which has HVM_SAVE_LENGTH(CPU), |
3500 | + * and is identified by a descriptor with typecode HVM_SAVE_CODE(CPU). |
3501 | + * DECLARE_HVM_SAVE_TYPE binds these things together with some type-system |
3502 | + * ugliness. |
3503 | + */ |
3504 | + |
3505 | +#define DECLARE_HVM_SAVE_TYPE(_x, _code, _type) \ |
3506 | + struct __HVM_SAVE_TYPE_##_x { _type t; char c[_code]; } |
3507 | + |
3508 | +#define HVM_SAVE_TYPE(_x) typeof (((struct __HVM_SAVE_TYPE_##_x *)(0))->t) |
3509 | +#define HVM_SAVE_LENGTH(_x) (sizeof (HVM_SAVE_TYPE(_x))) |
3510 | +#define HVM_SAVE_CODE(_x) (sizeof (((struct __HVM_SAVE_TYPE_##_x *)(0))->c)) |
3511 | + |
3512 | + |
3513 | +/* |
3514 | + * The series of save records is teminated by a zero-type, zero-length |
3515 | + * descriptor. |
3516 | + */ |
3517 | + |
3518 | +struct hvm_save_end {}; |
3519 | +DECLARE_HVM_SAVE_TYPE(END, 0, struct hvm_save_end); |
3520 | + |
3521 | +#if defined(__i386__) || defined(__x86_64__) |
3522 | +#include "../arch-x86/hvm/save.h" |
3523 | +#elif defined(__ia64__) |
3524 | +#include "../arch-ia64/hvm/save.h" |
3525 | +#else |
3526 | +#error "unsupported architecture" |
3527 | +#endif |
3528 | + |
3529 | +#endif /* __XEN_PUBLIC_HVM_SAVE_H__ */ |
3530 | Index: head-2008-04-15/include/xen/interface/hvm/vmx_assist.h |
3531 | =================================================================== |
3532 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3533 | +++ head-2008-04-15/include/xen/interface/hvm/vmx_assist.h 2007-06-12 13:14:19.000000000 +0200 |
3534 | @@ -0,0 +1,122 @@ |
3535 | +/* |
3536 | + * vmx_assist.h: Context definitions for the VMXASSIST world switch. |
3537 | + * |
3538 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3539 | + * of this software and associated documentation files (the "Software"), to |
3540 | + * deal in the Software without restriction, including without limitation the |
3541 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3542 | + * sell copies of the Software, and to permit persons to whom the Software is |
3543 | + * furnished to do so, subject to the following conditions: |
3544 | + * |
3545 | + * The above copyright notice and this permission notice shall be included in |
3546 | + * all copies or substantial portions of the Software. |
3547 | + * |
3548 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3549 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3550 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3551 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3552 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3553 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3554 | + * DEALINGS IN THE SOFTWARE. |
3555 | + * |
3556 | + * Leendert van Doorn, leendert@watson.ibm.com |
3557 | + * Copyright (c) 2005, International Business Machines Corporation. |
3558 | + */ |
3559 | + |
3560 | +#ifndef _VMX_ASSIST_H_ |
3561 | +#define _VMX_ASSIST_H_ |
3562 | + |
3563 | +#define VMXASSIST_BASE 0xD0000 |
3564 | +#define VMXASSIST_MAGIC 0x17101966 |
3565 | +#define VMXASSIST_MAGIC_OFFSET (VMXASSIST_BASE+8) |
3566 | + |
3567 | +#define VMXASSIST_NEW_CONTEXT (VMXASSIST_BASE + 12) |
3568 | +#define VMXASSIST_OLD_CONTEXT (VMXASSIST_NEW_CONTEXT + 4) |
3569 | + |
3570 | +#ifndef __ASSEMBLY__ |
3571 | + |
3572 | +#define NR_EXCEPTION_HANDLER 32 |
3573 | +#define NR_INTERRUPT_HANDLERS 16 |
3574 | +#define NR_TRAPS (NR_EXCEPTION_HANDLER+NR_INTERRUPT_HANDLERS) |
3575 | + |
3576 | +union vmcs_arbytes { |
3577 | + struct arbyte_fields { |
3578 | + unsigned int seg_type : 4, |
3579 | + s : 1, |
3580 | + dpl : 2, |
3581 | + p : 1, |
3582 | + reserved0 : 4, |
3583 | + avl : 1, |
3584 | + reserved1 : 1, |
3585 | + default_ops_size: 1, |
3586 | + g : 1, |
3587 | + null_bit : 1, |
3588 | + reserved2 : 15; |
3589 | + } fields; |
3590 | + unsigned int bytes; |
3591 | +}; |
3592 | + |
3593 | +/* |
3594 | + * World switch state |
3595 | + */ |
3596 | +struct vmx_assist_context { |
3597 | + uint32_t eip; /* execution pointer */ |
3598 | + uint32_t esp; /* stack pointer */ |
3599 | + uint32_t eflags; /* flags register */ |
3600 | + uint32_t cr0; |
3601 | + uint32_t cr3; /* page table directory */ |
3602 | + uint32_t cr4; |
3603 | + uint32_t idtr_limit; /* idt */ |
3604 | + uint32_t idtr_base; |
3605 | + uint32_t gdtr_limit; /* gdt */ |
3606 | + uint32_t gdtr_base; |
3607 | + uint32_t cs_sel; /* cs selector */ |
3608 | + uint32_t cs_limit; |
3609 | + uint32_t cs_base; |
3610 | + union vmcs_arbytes cs_arbytes; |
3611 | + uint32_t ds_sel; /* ds selector */ |
3612 | + uint32_t ds_limit; |
3613 | + uint32_t ds_base; |
3614 | + union vmcs_arbytes ds_arbytes; |
3615 | + uint32_t es_sel; /* es selector */ |
3616 | + uint32_t es_limit; |
3617 | + uint32_t es_base; |
3618 | + union vmcs_arbytes es_arbytes; |
3619 | + uint32_t ss_sel; /* ss selector */ |
3620 | + uint32_t ss_limit; |
3621 | + uint32_t ss_base; |
3622 | + union vmcs_arbytes ss_arbytes; |
3623 | + uint32_t fs_sel; /* fs selector */ |
3624 | + uint32_t fs_limit; |
3625 | + uint32_t fs_base; |
3626 | + union vmcs_arbytes fs_arbytes; |
3627 | + uint32_t gs_sel; /* gs selector */ |
3628 | + uint32_t gs_limit; |
3629 | + uint32_t gs_base; |
3630 | + union vmcs_arbytes gs_arbytes; |
3631 | + uint32_t tr_sel; /* task selector */ |
3632 | + uint32_t tr_limit; |
3633 | + uint32_t tr_base; |
3634 | + union vmcs_arbytes tr_arbytes; |
3635 | + uint32_t ldtr_sel; /* ldtr selector */ |
3636 | + uint32_t ldtr_limit; |
3637 | + uint32_t ldtr_base; |
3638 | + union vmcs_arbytes ldtr_arbytes; |
3639 | + |
3640 | + unsigned char rm_irqbase[2]; |
3641 | +}; |
3642 | +typedef struct vmx_assist_context vmx_assist_context_t; |
3643 | + |
3644 | +#endif /* __ASSEMBLY__ */ |
3645 | + |
3646 | +#endif /* _VMX_ASSIST_H_ */ |
3647 | + |
3648 | +/* |
3649 | + * Local variables: |
3650 | + * mode: C |
3651 | + * c-set-style: "BSD" |
3652 | + * c-basic-offset: 4 |
3653 | + * tab-width: 4 |
3654 | + * indent-tabs-mode: nil |
3655 | + * End: |
3656 | + */ |
3657 | Index: head-2008-04-15/include/xen/interface/io/fbif.h |
3658 | =================================================================== |
3659 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3660 | +++ head-2008-04-15/include/xen/interface/io/fbif.h 2008-04-02 12:34:02.000000000 +0200 |
3661 | @@ -0,0 +1,157 @@ |
3662 | +/* |
3663 | + * fbif.h -- Xen virtual frame buffer device |
3664 | + * |
3665 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3666 | + * of this software and associated documentation files (the "Software"), to |
3667 | + * deal in the Software without restriction, including without limitation the |
3668 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3669 | + * sell copies of the Software, and to permit persons to whom the Software is |
3670 | + * furnished to do so, subject to the following conditions: |
3671 | + * |
3672 | + * The above copyright notice and this permission notice shall be included in |
3673 | + * all copies or substantial portions of the Software. |
3674 | + * |
3675 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3676 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3677 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3678 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3679 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3680 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3681 | + * DEALINGS IN THE SOFTWARE. |
3682 | + * |
3683 | + * Copyright (C) 2005 Anthony Liguori <aliguori@us.ibm.com> |
3684 | + * Copyright (C) 2006 Red Hat, Inc., Markus Armbruster <armbru@redhat.com> |
3685 | + */ |
3686 | + |
3687 | +#ifndef __XEN_PUBLIC_IO_FBIF_H__ |
3688 | +#define __XEN_PUBLIC_IO_FBIF_H__ |
3689 | + |
3690 | +/* Out events (frontend -> backend) */ |
3691 | + |
3692 | +/* |
3693 | + * Out events may be sent only when requested by backend, and receipt |
3694 | + * of an unknown out event is an error. |
3695 | + */ |
3696 | + |
3697 | +/* Event type 1 currently not used */ |
3698 | +/* |
3699 | + * Framebuffer update notification event |
3700 | + * Capable frontend sets feature-update in xenstore. |
3701 | + * Backend requests it by setting request-update in xenstore. |
3702 | + */ |
3703 | +#define XENFB_TYPE_UPDATE 2 |
3704 | + |
3705 | +struct xenfb_update |
3706 | +{ |
3707 | + uint8_t type; /* XENFB_TYPE_UPDATE */ |
3708 | + int32_t x; /* source x */ |
3709 | + int32_t y; /* source y */ |
3710 | + int32_t width; /* rect width */ |
3711 | + int32_t height; /* rect height */ |
3712 | +}; |
3713 | + |
3714 | +/* |
3715 | + * Framebuffer resize notification event |
3716 | + * Capable backend sets feature-resize in xenstore. |
3717 | + */ |
3718 | +#define XENFB_TYPE_RESIZE 3 |
3719 | + |
3720 | +struct xenfb_resize |
3721 | +{ |
3722 | + uint8_t type; /* XENFB_TYPE_RESIZE */ |
3723 | + int32_t width; /* width in pixels */ |
3724 | + int32_t height; /* height in pixels */ |
3725 | + int32_t stride; /* stride in bytes */ |
3726 | + int32_t depth; /* depth in bits */ |
3727 | + int32_t offset; /* offset of the framebuffer in bytes */ |
3728 | +}; |
3729 | + |
3730 | +#define XENFB_OUT_EVENT_SIZE 40 |
3731 | + |
3732 | +union xenfb_out_event |
3733 | +{ |
3734 | + uint8_t type; |
3735 | + struct xenfb_update update; |
3736 | + struct xenfb_resize resize; |
3737 | + char pad[XENFB_OUT_EVENT_SIZE]; |
3738 | +}; |
3739 | + |
3740 | +/* In events (backend -> frontend) */ |
3741 | + |
3742 | +/* |
3743 | + * Frontends should ignore unknown in events. |
3744 | + * No in events currently defined. |
3745 | + */ |
3746 | + |
3747 | +#define XENFB_IN_EVENT_SIZE 40 |
3748 | + |
3749 | +union xenfb_in_event |
3750 | +{ |
3751 | + uint8_t type; |
3752 | + char pad[XENFB_IN_EVENT_SIZE]; |
3753 | +}; |
3754 | + |
3755 | +/* shared page */ |
3756 | + |
3757 | +#define XENFB_IN_RING_SIZE 1024 |
3758 | +#define XENFB_IN_RING_LEN (XENFB_IN_RING_SIZE / XENFB_IN_EVENT_SIZE) |
3759 | +#define XENFB_IN_RING_OFFS 1024 |
3760 | +#define XENFB_IN_RING(page) \ |
3761 | + ((union xenfb_in_event *)((char *)(page) + XENFB_IN_RING_OFFS)) |
3762 | +#define XENFB_IN_RING_REF(page, idx) \ |
3763 | + (XENFB_IN_RING((page))[(idx) % XENFB_IN_RING_LEN]) |
3764 | + |
3765 | +#define XENFB_OUT_RING_SIZE 2048 |
3766 | +#define XENFB_OUT_RING_LEN (XENFB_OUT_RING_SIZE / XENFB_OUT_EVENT_SIZE) |
3767 | +#define XENFB_OUT_RING_OFFS (XENFB_IN_RING_OFFS + XENFB_IN_RING_SIZE) |
3768 | +#define XENFB_OUT_RING(page) \ |
3769 | + ((union xenfb_out_event *)((char *)(page) + XENFB_OUT_RING_OFFS)) |
3770 | +#define XENFB_OUT_RING_REF(page, idx) \ |
3771 | + (XENFB_OUT_RING((page))[(idx) % XENFB_OUT_RING_LEN]) |
3772 | + |
3773 | +struct xenfb_page |
3774 | +{ |
3775 | + uint32_t in_cons, in_prod; |
3776 | + uint32_t out_cons, out_prod; |
3777 | + |
3778 | + int32_t width; /* the width of the framebuffer (in pixels) */ |
3779 | + int32_t height; /* the height of the framebuffer (in pixels) */ |
3780 | + uint32_t line_length; /* the length of a row of pixels (in bytes) */ |
3781 | + uint32_t mem_length; /* the length of the framebuffer (in bytes) */ |
3782 | + uint8_t depth; /* the depth of a pixel (in bits) */ |
3783 | + |
3784 | + /* |
3785 | + * Framebuffer page directory |
3786 | + * |
3787 | + * Each directory page holds PAGE_SIZE / sizeof(*pd) |
3788 | + * framebuffer pages, and can thus map up to PAGE_SIZE * |
3789 | + * PAGE_SIZE / sizeof(*pd) bytes. With PAGE_SIZE == 4096 and |
3790 | + * sizeof(unsigned long) == 4/8, that's 4 Megs 32 bit and 2 Megs |
3791 | + * 64 bit. 256 directories give enough room for a 512 Meg |
3792 | + * framebuffer with a max resolution of 12,800x10,240. Should |
3793 | + * be enough for a while with room leftover for expansion. |
3794 | + */ |
3795 | + unsigned long pd[256]; |
3796 | +}; |
3797 | + |
3798 | +/* |
3799 | + * Wart: xenkbd needs to know default resolution. Put it here until a |
3800 | + * better solution is found, but don't leak it to the backend. |
3801 | + */ |
3802 | +#ifdef __KERNEL__ |
3803 | +#define XENFB_WIDTH 800 |
3804 | +#define XENFB_HEIGHT 600 |
3805 | +#define XENFB_DEPTH 32 |
3806 | +#endif |
3807 | + |
3808 | +#endif |
3809 | + |
3810 | +/* |
3811 | + * Local variables: |
3812 | + * mode: C |
3813 | + * c-set-style: "BSD" |
3814 | + * c-basic-offset: 4 |
3815 | + * tab-width: 4 |
3816 | + * indent-tabs-mode: nil |
3817 | + * End: |
3818 | + */ |
3819 | Index: head-2008-04-15/include/xen/interface/io/fsif.h |
3820 | =================================================================== |
3821 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
3822 | +++ head-2008-04-15/include/xen/interface/io/fsif.h 2008-01-21 11:15:27.000000000 +0100 |
3823 | @@ -0,0 +1,181 @@ |
3824 | +/****************************************************************************** |
3825 | + * fsif.h |
3826 | + * |
3827 | + * Interface to FS level split device drivers. |
3828 | + * |
3829 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
3830 | + * of this software and associated documentation files (the "Software"), to |
3831 | + * deal in the Software without restriction, including without limitation the |
3832 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
3833 | + * sell copies of the Software, and to permit persons to whom the Software is |
3834 | + * furnished to do so, subject to the following conditions: |
3835 | + * |
3836 | + * The above copyright notice and this permission notice shall be included in |
3837 | + * all copies or substantial portions of the Software. |
3838 | + * |
3839 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
3840 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
3841 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
3842 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
3843 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
3844 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
3845 | + * DEALINGS IN THE SOFTWARE. |
3846 | + * |
3847 | + * Copyright (c) 2007, Grzegorz Milos, Sun Microsystems, Inc. |
3848 | + */ |
3849 | + |
3850 | +#ifndef __XEN_PUBLIC_IO_FSIF_H__ |
3851 | +#define __XEN_PUBLIC_IO_FSIF_H__ |
3852 | + |
3853 | +#include "ring.h" |
3854 | +#include "../grant_table.h" |
3855 | + |
3856 | +#define REQ_FILE_OPEN 1 |
3857 | +#define REQ_FILE_CLOSE 2 |
3858 | +#define REQ_FILE_READ 3 |
3859 | +#define REQ_FILE_WRITE 4 |
3860 | +#define REQ_STAT 5 |
3861 | +#define REQ_FILE_TRUNCATE 6 |
3862 | +#define REQ_REMOVE 7 |
3863 | +#define REQ_RENAME 8 |
3864 | +#define REQ_CREATE 9 |
3865 | +#define REQ_DIR_LIST 10 |
3866 | +#define REQ_CHMOD 11 |
3867 | +#define REQ_FS_SPACE 12 |
3868 | +#define REQ_FILE_SYNC 13 |
3869 | + |
3870 | +struct fsif_open_request { |
3871 | + grant_ref_t gref; |
3872 | +}; |
3873 | + |
3874 | +struct fsif_close_request { |
3875 | + uint32_t fd; |
3876 | +}; |
3877 | + |
3878 | +struct fsif_read_request { |
3879 | + uint32_t fd; |
3880 | + grant_ref_t gref; |
3881 | + uint64_t len; |
3882 | + uint64_t offset; |
3883 | +}; |
3884 | + |
3885 | +struct fsif_write_request { |
3886 | + uint32_t fd; |
3887 | + grant_ref_t gref; |
3888 | + uint64_t len; |
3889 | + uint64_t offset; |
3890 | +}; |
3891 | + |
3892 | +struct fsif_stat_request { |
3893 | + uint32_t fd; |
3894 | + grant_ref_t gref; |
3895 | +}; |
3896 | + |
3897 | +/* This structure is a copy of some fields from stat structure, writen to the |
3898 | + * granted page. */ |
3899 | +struct fsif_stat_response { |
3900 | + int32_t stat_mode; |
3901 | + uint32_t stat_uid; |
3902 | + uint32_t stat_gid; |
3903 | + int32_t pad; |
3904 | + int64_t stat_size; |
3905 | + int64_t stat_atime; |
3906 | + int64_t stat_mtime; |
3907 | + int64_t stat_ctime; |
3908 | +}; |
3909 | + |
3910 | +struct fsif_truncate_request { |
3911 | + uint32_t fd; |
3912 | + int32_t pad; |
3913 | + int64_t length; |
3914 | +}; |
3915 | + |
3916 | +struct fsif_remove_request { |
3917 | + grant_ref_t gref; |
3918 | +}; |
3919 | + |
3920 | +struct fsif_rename_request { |
3921 | + uint16_t old_name_offset; |
3922 | + uint16_t new_name_offset; |
3923 | + grant_ref_t gref; |
3924 | +}; |
3925 | + |
3926 | +struct fsif_create_request { |
3927 | + int8_t directory; |
3928 | + int8_t pad; |
3929 | + int16_t pad2; |
3930 | + int32_t mode; |
3931 | + grant_ref_t gref; |
3932 | +}; |
3933 | + |
3934 | +struct fsif_list_request { |
3935 | + uint32_t offset; |
3936 | + grant_ref_t gref; |
3937 | +}; |
3938 | + |
3939 | +#define NR_FILES_SHIFT 0 |
3940 | +#define NR_FILES_SIZE 16 /* 16 bits for the number of files mask */ |
3941 | +#define NR_FILES_MASK (((1ULL << NR_FILES_SIZE) - 1) << NR_FILES_SHIFT) |
3942 | +#define ERROR_SIZE 32 /* 32 bits for the error mask */ |
3943 | +#define ERROR_SHIFT (NR_FILES_SIZE + NR_FILES_SHIFT) |
3944 | +#define ERROR_MASK (((1ULL << ERROR_SIZE) - 1) << ERROR_SHIFT) |
3945 | +#define HAS_MORE_SHIFT (ERROR_SHIFT + ERROR_SIZE) |
3946 | +#define HAS_MORE_FLAG (1ULL << HAS_MORE_SHIFT) |
3947 | + |
3948 | +struct fsif_chmod_request { |
3949 | + uint32_t fd; |
3950 | + int32_t mode; |
3951 | +}; |
3952 | + |
3953 | +struct fsif_space_request { |
3954 | + grant_ref_t gref; |
3955 | +}; |
3956 | + |
3957 | +struct fsif_sync_request { |
3958 | + uint32_t fd; |
3959 | +}; |
3960 | + |
3961 | + |
3962 | +/* FS operation request */ |
3963 | +struct fsif_request { |
3964 | + uint8_t type; /* Type of the request */ |
3965 | + uint8_t pad; |
3966 | + uint16_t id; /* Request ID, copied to the response */ |
3967 | + uint32_t pad2; |
3968 | + union { |
3969 | + struct fsif_open_request fopen; |
3970 | + struct fsif_close_request fclose; |
3971 | + struct fsif_read_request fread; |
3972 | + struct fsif_write_request fwrite; |
3973 | + struct fsif_stat_request fstat; |
3974 | + struct fsif_truncate_request ftruncate; |
3975 | + struct fsif_remove_request fremove; |
3976 | + struct fsif_rename_request frename; |
3977 | + struct fsif_create_request fcreate; |
3978 | + struct fsif_list_request flist; |
3979 | + struct fsif_chmod_request fchmod; |
3980 | + struct fsif_space_request fspace; |
3981 | + struct fsif_sync_request fsync; |
3982 | + } u; |
3983 | +}; |
3984 | +typedef struct fsif_request fsif_request_t; |
3985 | + |
3986 | +/* FS operation response */ |
3987 | +struct fsif_response { |
3988 | + uint16_t id; |
3989 | + uint16_t pad1; |
3990 | + uint32_t pad2; |
3991 | + uint64_t ret_val; |
3992 | +}; |
3993 | + |
3994 | +typedef struct fsif_response fsif_response_t; |
3995 | + |
3996 | + |
3997 | +DEFINE_RING_TYPES(fsif, struct fsif_request, struct fsif_response); |
3998 | + |
3999 | +#define STATE_INITIALISED "init" |
4000 | +#define STATE_READY "ready" |
4001 | + |
4002 | + |
4003 | + |
4004 | +#endif |
4005 | Index: head-2008-04-15/include/xen/interface/io/kbdif.h |
4006 | =================================================================== |
4007 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4008 | +++ head-2008-04-15/include/xen/interface/io/kbdif.h 2008-03-06 08:54:32.000000000 +0100 |
4009 | @@ -0,0 +1,132 @@ |
4010 | +/* |
4011 | + * kbdif.h -- Xen virtual keyboard/mouse |
4012 | + * |
4013 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4014 | + * of this software and associated documentation files (the "Software"), to |
4015 | + * deal in the Software without restriction, including without limitation the |
4016 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4017 | + * sell copies of the Software, and to permit persons to whom the Software is |
4018 | + * furnished to do so, subject to the following conditions: |
4019 | + * |
4020 | + * The above copyright notice and this permission notice shall be included in |
4021 | + * all copies or substantial portions of the Software. |
4022 | + * |
4023 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4024 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4025 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4026 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4027 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4028 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4029 | + * DEALINGS IN THE SOFTWARE. |
4030 | + * |
4031 | + * Copyright (C) 2005 Anthony Liguori <aliguori@us.ibm.com> |
4032 | + * Copyright (C) 2006 Red Hat, Inc., Markus Armbruster <armbru@redhat.com> |
4033 | + */ |
4034 | + |
4035 | +#ifndef __XEN_PUBLIC_IO_KBDIF_H__ |
4036 | +#define __XEN_PUBLIC_IO_KBDIF_H__ |
4037 | + |
4038 | +/* In events (backend -> frontend) */ |
4039 | + |
4040 | +/* |
4041 | + * Frontends should ignore unknown in events. |
4042 | + */ |
4043 | + |
4044 | +/* Pointer movement event */ |
4045 | +#define XENKBD_TYPE_MOTION 1 |
4046 | +/* Event type 2 currently not used */ |
4047 | +/* Key event (includes pointer buttons) */ |
4048 | +#define XENKBD_TYPE_KEY 3 |
4049 | +/* |
4050 | + * Pointer position event |
4051 | + * Capable backend sets feature-abs-pointer in xenstore. |
4052 | + * Frontend requests ot instead of XENKBD_TYPE_MOTION by setting |
4053 | + * request-abs-update in xenstore. |
4054 | + */ |
4055 | +#define XENKBD_TYPE_POS 4 |
4056 | + |
4057 | +struct xenkbd_motion |
4058 | +{ |
4059 | + uint8_t type; /* XENKBD_TYPE_MOTION */ |
4060 | + int32_t rel_x; /* relative X motion */ |
4061 | + int32_t rel_y; /* relative Y motion */ |
4062 | + int32_t rel_z; /* relative Z motion (wheel) */ |
4063 | +}; |
4064 | + |
4065 | +struct xenkbd_key |
4066 | +{ |
4067 | + uint8_t type; /* XENKBD_TYPE_KEY */ |
4068 | + uint8_t pressed; /* 1 if pressed; 0 otherwise */ |
4069 | + uint32_t keycode; /* KEY_* from linux/input.h */ |
4070 | +}; |
4071 | + |
4072 | +struct xenkbd_position |
4073 | +{ |
4074 | + uint8_t type; /* XENKBD_TYPE_POS */ |
4075 | + int32_t abs_x; /* absolute X position (in FB pixels) */ |
4076 | + int32_t abs_y; /* absolute Y position (in FB pixels) */ |
4077 | + int32_t rel_z; /* relative Z motion (wheel) */ |
4078 | +}; |
4079 | + |
4080 | +#define XENKBD_IN_EVENT_SIZE 40 |
4081 | + |
4082 | +union xenkbd_in_event |
4083 | +{ |
4084 | + uint8_t type; |
4085 | + struct xenkbd_motion motion; |
4086 | + struct xenkbd_key key; |
4087 | + struct xenkbd_position pos; |
4088 | + char pad[XENKBD_IN_EVENT_SIZE]; |
4089 | +}; |
4090 | + |
4091 | +/* Out events (frontend -> backend) */ |
4092 | + |
4093 | +/* |
4094 | + * Out events may be sent only when requested by backend, and receipt |
4095 | + * of an unknown out event is an error. |
4096 | + * No out events currently defined. |
4097 | + */ |
4098 | + |
4099 | +#define XENKBD_OUT_EVENT_SIZE 40 |
4100 | + |
4101 | +union xenkbd_out_event |
4102 | +{ |
4103 | + uint8_t type; |
4104 | + char pad[XENKBD_OUT_EVENT_SIZE]; |
4105 | +}; |
4106 | + |
4107 | +/* shared page */ |
4108 | + |
4109 | +#define XENKBD_IN_RING_SIZE 2048 |
4110 | +#define XENKBD_IN_RING_LEN (XENKBD_IN_RING_SIZE / XENKBD_IN_EVENT_SIZE) |
4111 | +#define XENKBD_IN_RING_OFFS 1024 |
4112 | +#define XENKBD_IN_RING(page) \ |
4113 | + ((union xenkbd_in_event *)((char *)(page) + XENKBD_IN_RING_OFFS)) |
4114 | +#define XENKBD_IN_RING_REF(page, idx) \ |
4115 | + (XENKBD_IN_RING((page))[(idx) % XENKBD_IN_RING_LEN]) |
4116 | + |
4117 | +#define XENKBD_OUT_RING_SIZE 1024 |
4118 | +#define XENKBD_OUT_RING_LEN (XENKBD_OUT_RING_SIZE / XENKBD_OUT_EVENT_SIZE) |
4119 | +#define XENKBD_OUT_RING_OFFS (XENKBD_IN_RING_OFFS + XENKBD_IN_RING_SIZE) |
4120 | +#define XENKBD_OUT_RING(page) \ |
4121 | + ((union xenkbd_out_event *)((char *)(page) + XENKBD_OUT_RING_OFFS)) |
4122 | +#define XENKBD_OUT_RING_REF(page, idx) \ |
4123 | + (XENKBD_OUT_RING((page))[(idx) % XENKBD_OUT_RING_LEN]) |
4124 | + |
4125 | +struct xenkbd_page |
4126 | +{ |
4127 | + uint32_t in_cons, in_prod; |
4128 | + uint32_t out_cons, out_prod; |
4129 | +}; |
4130 | + |
4131 | +#endif |
4132 | + |
4133 | +/* |
4134 | + * Local variables: |
4135 | + * mode: C |
4136 | + * c-set-style: "BSD" |
4137 | + * c-basic-offset: 4 |
4138 | + * tab-width: 4 |
4139 | + * indent-tabs-mode: nil |
4140 | + * End: |
4141 | + */ |
4142 | Index: head-2008-04-15/include/xen/interface/io/pciif.h |
4143 | =================================================================== |
4144 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4145 | +++ head-2008-04-15/include/xen/interface/io/pciif.h 2007-06-12 13:14:19.000000000 +0200 |
4146 | @@ -0,0 +1,83 @@ |
4147 | +/* |
4148 | + * PCI Backend/Frontend Common Data Structures & Macros |
4149 | + * |
4150 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4151 | + * of this software and associated documentation files (the "Software"), to |
4152 | + * deal in the Software without restriction, including without limitation the |
4153 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4154 | + * sell copies of the Software, and to permit persons to whom the Software is |
4155 | + * furnished to do so, subject to the following conditions: |
4156 | + * |
4157 | + * The above copyright notice and this permission notice shall be included in |
4158 | + * all copies or substantial portions of the Software. |
4159 | + * |
4160 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4161 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4162 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4163 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4164 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4165 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4166 | + * DEALINGS IN THE SOFTWARE. |
4167 | + * |
4168 | + * Author: Ryan Wilson <hap9@epoch.ncsc.mil> |
4169 | + */ |
4170 | +#ifndef __XEN_PCI_COMMON_H__ |
4171 | +#define __XEN_PCI_COMMON_H__ |
4172 | + |
4173 | +/* Be sure to bump this number if you change this file */ |
4174 | +#define XEN_PCI_MAGIC "7" |
4175 | + |
4176 | +/* xen_pci_sharedinfo flags */ |
4177 | +#define _XEN_PCIF_active (0) |
4178 | +#define XEN_PCIF_active (1<<_XEN_PCI_active) |
4179 | + |
4180 | +/* xen_pci_op commands */ |
4181 | +#define XEN_PCI_OP_conf_read (0) |
4182 | +#define XEN_PCI_OP_conf_write (1) |
4183 | + |
4184 | +/* xen_pci_op error numbers */ |
4185 | +#define XEN_PCI_ERR_success (0) |
4186 | +#define XEN_PCI_ERR_dev_not_found (-1) |
4187 | +#define XEN_PCI_ERR_invalid_offset (-2) |
4188 | +#define XEN_PCI_ERR_access_denied (-3) |
4189 | +#define XEN_PCI_ERR_not_implemented (-4) |
4190 | +/* XEN_PCI_ERR_op_failed - backend failed to complete the operation */ |
4191 | +#define XEN_PCI_ERR_op_failed (-5) |
4192 | + |
4193 | +struct xen_pci_op { |
4194 | + /* IN: what action to perform: XEN_PCI_OP_* */ |
4195 | + uint32_t cmd; |
4196 | + |
4197 | + /* OUT: will contain an error number (if any) from errno.h */ |
4198 | + int32_t err; |
4199 | + |
4200 | + /* IN: which device to touch */ |
4201 | + uint32_t domain; /* PCI Domain/Segment */ |
4202 | + uint32_t bus; |
4203 | + uint32_t devfn; |
4204 | + |
4205 | + /* IN: which configuration registers to touch */ |
4206 | + int32_t offset; |
4207 | + int32_t size; |
4208 | + |
4209 | + /* IN/OUT: Contains the result after a READ or the value to WRITE */ |
4210 | + uint32_t value; |
4211 | +}; |
4212 | + |
4213 | +struct xen_pci_sharedinfo { |
4214 | + /* flags - XEN_PCIF_* */ |
4215 | + uint32_t flags; |
4216 | + struct xen_pci_op op; |
4217 | +}; |
4218 | + |
4219 | +#endif /* __XEN_PCI_COMMON_H__ */ |
4220 | + |
4221 | +/* |
4222 | + * Local variables: |
4223 | + * mode: C |
4224 | + * c-set-style: "BSD" |
4225 | + * c-basic-offset: 4 |
4226 | + * tab-width: 4 |
4227 | + * indent-tabs-mode: nil |
4228 | + * End: |
4229 | + */ |
4230 | Index: head-2008-04-15/include/xen/interface/io/protocols.h |
4231 | =================================================================== |
4232 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4233 | +++ head-2008-04-15/include/xen/interface/io/protocols.h 2008-02-26 10:54:12.000000000 +0100 |
4234 | @@ -0,0 +1,43 @@ |
4235 | +/****************************************************************************** |
4236 | + * protocols.h |
4237 | + * |
4238 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4239 | + * of this software and associated documentation files (the "Software"), to |
4240 | + * deal in the Software without restriction, including without limitation the |
4241 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4242 | + * sell copies of the Software, and to permit persons to whom the Software is |
4243 | + * furnished to do so, subject to the following conditions: |
4244 | + * |
4245 | + * The above copyright notice and this permission notice shall be included in |
4246 | + * all copies or substantial portions of the Software. |
4247 | + * |
4248 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4249 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4250 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4251 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4252 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4253 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4254 | + * DEALINGS IN THE SOFTWARE. |
4255 | + */ |
4256 | + |
4257 | +#ifndef __XEN_PROTOCOLS_H__ |
4258 | +#define __XEN_PROTOCOLS_H__ |
4259 | + |
4260 | +#define XEN_IO_PROTO_ABI_X86_32 "x86_32-abi" |
4261 | +#define XEN_IO_PROTO_ABI_X86_64 "x86_64-abi" |
4262 | +#define XEN_IO_PROTO_ABI_IA64 "ia64-abi" |
4263 | +#define XEN_IO_PROTO_ABI_POWERPC64 "powerpc64-abi" |
4264 | + |
4265 | +#if defined(__i386__) |
4266 | +# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_32 |
4267 | +#elif defined(__x86_64__) |
4268 | +# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_64 |
4269 | +#elif defined(__ia64__) |
4270 | +# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_IA64 |
4271 | +#elif defined(__powerpc64__) |
4272 | +# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_POWERPC64 |
4273 | +#else |
4274 | +# error arch fixup needed here |
4275 | +#endif |
4276 | + |
4277 | +#endif |
4278 | Index: head-2008-04-15/include/xen/interface/io/tpmif.h |
4279 | =================================================================== |
4280 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4281 | +++ head-2008-04-15/include/xen/interface/io/tpmif.h 2007-06-12 13:14:19.000000000 +0200 |
4282 | @@ -0,0 +1,77 @@ |
4283 | +/****************************************************************************** |
4284 | + * tpmif.h |
4285 | + * |
4286 | + * TPM I/O interface for Xen guest OSes. |
4287 | + * |
4288 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4289 | + * of this software and associated documentation files (the "Software"), to |
4290 | + * deal in the Software without restriction, including without limitation the |
4291 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4292 | + * sell copies of the Software, and to permit persons to whom the Software is |
4293 | + * furnished to do so, subject to the following conditions: |
4294 | + * |
4295 | + * The above copyright notice and this permission notice shall be included in |
4296 | + * all copies or substantial portions of the Software. |
4297 | + * |
4298 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4299 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4300 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4301 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4302 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4303 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4304 | + * DEALINGS IN THE SOFTWARE. |
4305 | + * |
4306 | + * Copyright (c) 2005, IBM Corporation |
4307 | + * |
4308 | + * Author: Stefan Berger, stefanb@us.ibm.com |
4309 | + * Grant table support: Mahadevan Gomathisankaran |
4310 | + * |
4311 | + * This code has been derived from tools/libxc/xen/io/netif.h |
4312 | + * |
4313 | + * Copyright (c) 2003-2004, Keir Fraser |
4314 | + */ |
4315 | + |
4316 | +#ifndef __XEN_PUBLIC_IO_TPMIF_H__ |
4317 | +#define __XEN_PUBLIC_IO_TPMIF_H__ |
4318 | + |
4319 | +#include "../grant_table.h" |
4320 | + |
4321 | +struct tpmif_tx_request { |
4322 | + unsigned long addr; /* Machine address of packet. */ |
4323 | + grant_ref_t ref; /* grant table access reference */ |
4324 | + uint16_t unused; |
4325 | + uint16_t size; /* Packet size in bytes. */ |
4326 | +}; |
4327 | +typedef struct tpmif_tx_request tpmif_tx_request_t; |
4328 | + |
4329 | +/* |
4330 | + * The TPMIF_TX_RING_SIZE defines the number of pages the |
4331 | + * front-end and backend can exchange (= size of array). |
4332 | + */ |
4333 | +typedef uint32_t TPMIF_RING_IDX; |
4334 | + |
4335 | +#define TPMIF_TX_RING_SIZE 1 |
4336 | + |
4337 | +/* This structure must fit in a memory page. */ |
4338 | + |
4339 | +struct tpmif_ring { |
4340 | + struct tpmif_tx_request req; |
4341 | +}; |
4342 | +typedef struct tpmif_ring tpmif_ring_t; |
4343 | + |
4344 | +struct tpmif_tx_interface { |
4345 | + struct tpmif_ring ring[TPMIF_TX_RING_SIZE]; |
4346 | +}; |
4347 | +typedef struct tpmif_tx_interface tpmif_tx_interface_t; |
4348 | + |
4349 | +#endif |
4350 | + |
4351 | +/* |
4352 | + * Local variables: |
4353 | + * mode: C |
4354 | + * c-set-style: "BSD" |
4355 | + * c-basic-offset: 4 |
4356 | + * tab-width: 4 |
4357 | + * indent-tabs-mode: nil |
4358 | + * End: |
4359 | + */ |
4360 | Index: head-2008-04-15/include/xen/interface/kexec.h |
4361 | =================================================================== |
4362 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4363 | +++ head-2008-04-15/include/xen/interface/kexec.h 2008-04-02 12:34:02.000000000 +0200 |
4364 | @@ -0,0 +1,167 @@ |
4365 | +/****************************************************************************** |
4366 | + * kexec.h - Public portion |
4367 | + * |
4368 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4369 | + * of this software and associated documentation files (the "Software"), to |
4370 | + * deal in the Software without restriction, including without limitation the |
4371 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4372 | + * sell copies of the Software, and to permit persons to whom the Software is |
4373 | + * furnished to do so, subject to the following conditions: |
4374 | + * |
4375 | + * The above copyright notice and this permission notice shall be included in |
4376 | + * all copies or substantial portions of the Software. |
4377 | + * |
4378 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4379 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4380 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4381 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4382 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4383 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4384 | + * DEALINGS IN THE SOFTWARE. |
4385 | + * |
4386 | + * Xen port written by: |
4387 | + * - Simon 'Horms' Horman <horms@verge.net.au> |
4388 | + * - Magnus Damm <magnus@valinux.co.jp> |
4389 | + */ |
4390 | + |
4391 | +#ifndef _XEN_PUBLIC_KEXEC_H |
4392 | +#define _XEN_PUBLIC_KEXEC_H |
4393 | + |
4394 | + |
4395 | +/* This file describes the Kexec / Kdump hypercall interface for Xen. |
4396 | + * |
4397 | + * Kexec under vanilla Linux allows a user to reboot the physical machine |
4398 | + * into a new user-specified kernel. The Xen port extends this idea |
4399 | + * to allow rebooting of the machine from dom0. When kexec for dom0 |
4400 | + * is used to reboot, both the hypervisor and the domains get replaced |
4401 | + * with some other kernel. It is possible to kexec between vanilla |
4402 | + * Linux and Xen and back again. Xen to Xen works well too. |
4403 | + * |
4404 | + * The hypercall interface for kexec can be divided into three main |
4405 | + * types of hypercall operations: |
4406 | + * |
4407 | + * 1) Range information: |
4408 | + * This is used by the dom0 kernel to ask the hypervisor about various |
4409 | + * address information. This information is needed to allow kexec-tools |
4410 | + * to fill in the ELF headers for /proc/vmcore properly. |
4411 | + * |
4412 | + * 2) Load and unload of images: |
4413 | + * There are no big surprises here, the kexec binary from kexec-tools |
4414 | + * runs in userspace in dom0. The tool loads/unloads data into the |
4415 | + * dom0 kernel such as new kernel, initramfs and hypervisor. When |
4416 | + * loaded the dom0 kernel performs a load hypercall operation, and |
4417 | + * before releasing all page references the dom0 kernel calls unload. |
4418 | + * |
4419 | + * 3) Kexec operation: |
4420 | + * This is used to start a previously loaded kernel. |
4421 | + */ |
4422 | + |
4423 | +#include "xen.h" |
4424 | + |
4425 | +#if defined(__i386__) || defined(__x86_64__) |
4426 | +#define KEXEC_XEN_NO_PAGES 17 |
4427 | +#endif |
4428 | + |
4429 | +/* |
4430 | + * Prototype for this hypercall is: |
4431 | + * int kexec_op(int cmd, void *args) |
4432 | + * @cmd == KEXEC_CMD_... |
4433 | + * KEXEC operation to perform |
4434 | + * @args == Operation-specific extra arguments (NULL if none). |
4435 | + */ |
4436 | + |
4437 | +/* |
4438 | + * Kexec supports two types of operation: |
4439 | + * - kexec into a regular kernel, very similar to a standard reboot |
4440 | + * - KEXEC_TYPE_DEFAULT is used to specify this type |
4441 | + * - kexec into a special "crash kernel", aka kexec-on-panic |
4442 | + * - KEXEC_TYPE_CRASH is used to specify this type |
4443 | + * - parts of our system may be broken at kexec-on-panic time |
4444 | + * - the code should be kept as simple and self-contained as possible |
4445 | + */ |
4446 | + |
4447 | +#define KEXEC_TYPE_DEFAULT 0 |
4448 | +#define KEXEC_TYPE_CRASH 1 |
4449 | + |
4450 | + |
4451 | +/* The kexec implementation for Xen allows the user to load two |
4452 | + * types of kernels, KEXEC_TYPE_DEFAULT and KEXEC_TYPE_CRASH. |
4453 | + * All data needed for a kexec reboot is kept in one xen_kexec_image_t |
4454 | + * per "instance". The data mainly consists of machine address lists to pages |
4455 | + * together with destination addresses. The data in xen_kexec_image_t |
4456 | + * is passed to the "code page" which is one page of code that performs |
4457 | + * the final relocations before jumping to the new kernel. |
4458 | + */ |
4459 | + |
4460 | +typedef struct xen_kexec_image { |
4461 | +#if defined(__i386__) || defined(__x86_64__) |
4462 | + unsigned long page_list[KEXEC_XEN_NO_PAGES]; |
4463 | +#endif |
4464 | +#if defined(__ia64__) |
4465 | + unsigned long reboot_code_buffer; |
4466 | +#endif |
4467 | + unsigned long indirection_page; |
4468 | + unsigned long start_address; |
4469 | +} xen_kexec_image_t; |
4470 | + |
4471 | +/* |
4472 | + * Perform kexec having previously loaded a kexec or kdump kernel |
4473 | + * as appropriate. |
4474 | + * type == KEXEC_TYPE_DEFAULT or KEXEC_TYPE_CRASH [in] |
4475 | + */ |
4476 | +#define KEXEC_CMD_kexec 0 |
4477 | +typedef struct xen_kexec_exec { |
4478 | + int type; |
4479 | +} xen_kexec_exec_t; |
4480 | + |
4481 | +/* |
4482 | + * Load/Unload kernel image for kexec or kdump. |
4483 | + * type == KEXEC_TYPE_DEFAULT or KEXEC_TYPE_CRASH [in] |
4484 | + * image == relocation information for kexec (ignored for unload) [in] |
4485 | + */ |
4486 | +#define KEXEC_CMD_kexec_load 1 |
4487 | +#define KEXEC_CMD_kexec_unload 2 |
4488 | +typedef struct xen_kexec_load { |
4489 | + int type; |
4490 | + xen_kexec_image_t image; |
4491 | +} xen_kexec_load_t; |
4492 | + |
4493 | +#define KEXEC_RANGE_MA_CRASH 0 /* machine address and size of crash area */ |
4494 | +#define KEXEC_RANGE_MA_XEN 1 /* machine address and size of Xen itself */ |
4495 | +#define KEXEC_RANGE_MA_CPU 2 /* machine address and size of a CPU note */ |
4496 | +#define KEXEC_RANGE_MA_XENHEAP 3 /* machine address and size of xenheap |
4497 | + * Note that although this is adjacent |
4498 | + * to Xen it exists in a separate EFI |
4499 | + * region on ia64, and thus needs to be |
4500 | + * inserted into iomem_machine separately */ |
4501 | +#define KEXEC_RANGE_MA_BOOT_PARAM 4 /* machine address and size of |
4502 | + * the ia64_boot_param */ |
4503 | +#define KEXEC_RANGE_MA_EFI_MEMMAP 5 /* machine address and size of |
4504 | + * of the EFI Memory Map */ |
4505 | + |
4506 | +/* |
4507 | + * Find the address and size of certain memory areas |
4508 | + * range == KEXEC_RANGE_... [in] |
4509 | + * nr == physical CPU number (starting from 0) if KEXEC_RANGE_MA_CPU [in] |
4510 | + * size == number of bytes reserved in window [out] |
4511 | + * start == address of the first byte in the window [out] |
4512 | + */ |
4513 | +#define KEXEC_CMD_kexec_get_range 3 |
4514 | +typedef struct xen_kexec_range { |
4515 | + int range; |
4516 | + int nr; |
4517 | + unsigned long size; |
4518 | + unsigned long start; |
4519 | +} xen_kexec_range_t; |
4520 | + |
4521 | +#endif /* _XEN_PUBLIC_KEXEC_H */ |
4522 | + |
4523 | +/* |
4524 | + * Local variables: |
4525 | + * mode: C |
4526 | + * c-set-style: "BSD" |
4527 | + * c-basic-offset: 4 |
4528 | + * tab-width: 4 |
4529 | + * indent-tabs-mode: nil |
4530 | + * End: |
4531 | + */ |
4532 | Index: head-2008-04-15/include/xen/interface/libelf.h |
4533 | =================================================================== |
4534 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4535 | +++ head-2008-04-15/include/xen/interface/libelf.h 2008-02-26 10:54:12.000000000 +0100 |
4536 | @@ -0,0 +1,267 @@ |
4537 | +/****************************************************************************** |
4538 | + * libelf.h |
4539 | + * |
4540 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4541 | + * of this software and associated documentation files (the "Software"), to |
4542 | + * deal in the Software without restriction, including without limitation the |
4543 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4544 | + * sell copies of the Software, and to permit persons to whom the Software is |
4545 | + * furnished to do so, subject to the following conditions: |
4546 | + * |
4547 | + * The above copyright notice and this permission notice shall be included in |
4548 | + * all copies or substantial portions of the Software. |
4549 | + * |
4550 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4551 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4552 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4553 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4554 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4555 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4556 | + * DEALINGS IN THE SOFTWARE. |
4557 | + */ |
4558 | + |
4559 | +#ifndef __XC_LIBELF__ |
4560 | +#define __XC_LIBELF__ 1 |
4561 | + |
4562 | +#if defined(__i386__) || defined(__x86_64) || defined(__ia64__) |
4563 | +#define XEN_ELF_LITTLE_ENDIAN |
4564 | +#elif defined(__powerpc__) |
4565 | +#define XEN_ELF_BIG_ENDIAN |
4566 | +#else |
4567 | +#error define architectural endianness |
4568 | +#endif |
4569 | + |
4570 | +#undef ELFSIZE |
4571 | +#include "elfnote.h" |
4572 | +#include "elfstructs.h" |
4573 | +#include "features.h" |
4574 | + |
4575 | +/* ------------------------------------------------------------------------ */ |
4576 | + |
4577 | +typedef union { |
4578 | + Elf32_Ehdr e32; |
4579 | + Elf64_Ehdr e64; |
4580 | +} elf_ehdr; |
4581 | + |
4582 | +typedef union { |
4583 | + Elf32_Phdr e32; |
4584 | + Elf64_Phdr e64; |
4585 | +} elf_phdr; |
4586 | + |
4587 | +typedef union { |
4588 | + Elf32_Shdr e32; |
4589 | + Elf64_Shdr e64; |
4590 | +} elf_shdr; |
4591 | + |
4592 | +typedef union { |
4593 | + Elf32_Sym e32; |
4594 | + Elf64_Sym e64; |
4595 | +} elf_sym; |
4596 | + |
4597 | +typedef union { |
4598 | + Elf32_Rel e32; |
4599 | + Elf64_Rel e64; |
4600 | +} elf_rel; |
4601 | + |
4602 | +typedef union { |
4603 | + Elf32_Rela e32; |
4604 | + Elf64_Rela e64; |
4605 | +} elf_rela; |
4606 | + |
4607 | +typedef union { |
4608 | + Elf32_Note e32; |
4609 | + Elf64_Note e64; |
4610 | +} elf_note; |
4611 | + |
4612 | +struct elf_binary { |
4613 | + /* elf binary */ |
4614 | + const char *image; |
4615 | + size_t size; |
4616 | + char class; |
4617 | + char data; |
4618 | + |
4619 | + const elf_ehdr *ehdr; |
4620 | + const char *sec_strtab; |
4621 | + const elf_shdr *sym_tab; |
4622 | + const char *sym_strtab; |
4623 | + |
4624 | + /* loaded to */ |
4625 | + char *dest; |
4626 | + uint64_t pstart; |
4627 | + uint64_t pend; |
4628 | + uint64_t reloc_offset; |
4629 | + |
4630 | + uint64_t bsd_symtab_pstart; |
4631 | + uint64_t bsd_symtab_pend; |
4632 | + |
4633 | +#ifndef __XEN__ |
4634 | + /* misc */ |
4635 | + FILE *log; |
4636 | +#endif |
4637 | + int verbose; |
4638 | +}; |
4639 | + |
4640 | +/* ------------------------------------------------------------------------ */ |
4641 | +/* accessing elf header fields */ |
4642 | + |
4643 | +#ifdef XEN_ELF_BIG_ENDIAN |
4644 | +# define NATIVE_ELFDATA ELFDATA2MSB |
4645 | +#else |
4646 | +# define NATIVE_ELFDATA ELFDATA2LSB |
4647 | +#endif |
4648 | + |
4649 | +#define elf_32bit(elf) (ELFCLASS32 == (elf)->class) |
4650 | +#define elf_64bit(elf) (ELFCLASS64 == (elf)->class) |
4651 | +#define elf_msb(elf) (ELFDATA2MSB == (elf)->data) |
4652 | +#define elf_lsb(elf) (ELFDATA2LSB == (elf)->data) |
4653 | +#define elf_swap(elf) (NATIVE_ELFDATA != (elf)->data) |
4654 | + |
4655 | +#define elf_uval(elf, str, elem) \ |
4656 | + ((ELFCLASS64 == (elf)->class) \ |
4657 | + ? elf_access_unsigned((elf), (str), \ |
4658 | + offsetof(typeof(*(str)),e64.elem), \ |
4659 | + sizeof((str)->e64.elem)) \ |
4660 | + : elf_access_unsigned((elf), (str), \ |
4661 | + offsetof(typeof(*(str)),e32.elem), \ |
4662 | + sizeof((str)->e32.elem))) |
4663 | + |
4664 | +#define elf_sval(elf, str, elem) \ |
4665 | + ((ELFCLASS64 == (elf)->class) \ |
4666 | + ? elf_access_signed((elf), (str), \ |
4667 | + offsetof(typeof(*(str)),e64.elem), \ |
4668 | + sizeof((str)->e64.elem)) \ |
4669 | + : elf_access_signed((elf), (str), \ |
4670 | + offsetof(typeof(*(str)),e32.elem), \ |
4671 | + sizeof((str)->e32.elem))) |
4672 | + |
4673 | +#define elf_size(elf, str) \ |
4674 | + ((ELFCLASS64 == (elf)->class) \ |
4675 | + ? sizeof((str)->e64) : sizeof((str)->e32)) |
4676 | + |
4677 | +uint64_t elf_access_unsigned(struct elf_binary *elf, const void *ptr, |
4678 | + uint64_t offset, size_t size); |
4679 | +int64_t elf_access_signed(struct elf_binary *elf, const void *ptr, |
4680 | + uint64_t offset, size_t size); |
4681 | + |
4682 | +uint64_t elf_round_up(struct elf_binary *elf, uint64_t addr); |
4683 | + |
4684 | +/* ------------------------------------------------------------------------ */ |
4685 | +/* xc_libelf_tools.c */ |
4686 | + |
4687 | +int elf_shdr_count(struct elf_binary *elf); |
4688 | +int elf_phdr_count(struct elf_binary *elf); |
4689 | + |
4690 | +const elf_shdr *elf_shdr_by_name(struct elf_binary *elf, const char *name); |
4691 | +const elf_shdr *elf_shdr_by_index(struct elf_binary *elf, int index); |
4692 | +const elf_phdr *elf_phdr_by_index(struct elf_binary *elf, int index); |
4693 | + |
4694 | +const char *elf_section_name(struct elf_binary *elf, const elf_shdr * shdr); |
4695 | +const void *elf_section_start(struct elf_binary *elf, const elf_shdr * shdr); |
4696 | +const void *elf_section_end(struct elf_binary *elf, const elf_shdr * shdr); |
4697 | + |
4698 | +const void *elf_segment_start(struct elf_binary *elf, const elf_phdr * phdr); |
4699 | +const void *elf_segment_end(struct elf_binary *elf, const elf_phdr * phdr); |
4700 | + |
4701 | +const elf_sym *elf_sym_by_name(struct elf_binary *elf, const char *symbol); |
4702 | +const elf_sym *elf_sym_by_index(struct elf_binary *elf, int index); |
4703 | + |
4704 | +const char *elf_note_name(struct elf_binary *elf, const elf_note * note); |
4705 | +const void *elf_note_desc(struct elf_binary *elf, const elf_note * note); |
4706 | +uint64_t elf_note_numeric(struct elf_binary *elf, const elf_note * note); |
4707 | +const elf_note *elf_note_next(struct elf_binary *elf, const elf_note * note); |
4708 | + |
4709 | +int elf_is_elfbinary(const void *image); |
4710 | +int elf_phdr_is_loadable(struct elf_binary *elf, const elf_phdr * phdr); |
4711 | + |
4712 | +/* ------------------------------------------------------------------------ */ |
4713 | +/* xc_libelf_loader.c */ |
4714 | + |
4715 | +int elf_init(struct elf_binary *elf, const char *image, size_t size); |
4716 | +#ifdef __XEN__ |
4717 | +void elf_set_verbose(struct elf_binary *elf); |
4718 | +#else |
4719 | +void elf_set_logfile(struct elf_binary *elf, FILE * log, int verbose); |
4720 | +#endif |
4721 | + |
4722 | +void elf_parse_binary(struct elf_binary *elf); |
4723 | +void elf_load_binary(struct elf_binary *elf); |
4724 | + |
4725 | +void *elf_get_ptr(struct elf_binary *elf, unsigned long addr); |
4726 | +uint64_t elf_lookup_addr(struct elf_binary *elf, const char *symbol); |
4727 | + |
4728 | +void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart); /* private */ |
4729 | + |
4730 | +/* ------------------------------------------------------------------------ */ |
4731 | +/* xc_libelf_relocate.c */ |
4732 | + |
4733 | +int elf_reloc(struct elf_binary *elf); |
4734 | + |
4735 | +/* ------------------------------------------------------------------------ */ |
4736 | +/* xc_libelf_dominfo.c */ |
4737 | + |
4738 | +#define UNSET_ADDR ((uint64_t)-1) |
4739 | + |
4740 | +enum xen_elfnote_type { |
4741 | + XEN_ENT_NONE = 0, |
4742 | + XEN_ENT_LONG = 1, |
4743 | + XEN_ENT_STR = 2 |
4744 | +}; |
4745 | + |
4746 | +struct xen_elfnote { |
4747 | + enum xen_elfnote_type type; |
4748 | + const char *name; |
4749 | + union { |
4750 | + const char *str; |
4751 | + uint64_t num; |
4752 | + } data; |
4753 | +}; |
4754 | + |
4755 | +struct elf_dom_parms { |
4756 | + /* raw */ |
4757 | + const char *guest_info; |
4758 | + const void *elf_note_start; |
4759 | + const void *elf_note_end; |
4760 | + struct xen_elfnote elf_notes[XEN_ELFNOTE_MAX + 1]; |
4761 | + |
4762 | + /* parsed */ |
4763 | + char guest_os[16]; |
4764 | + char guest_ver[16]; |
4765 | + char xen_ver[16]; |
4766 | + char loader[16]; |
4767 | + int pae; |
4768 | + int bsd_symtab; |
4769 | + uint64_t virt_base; |
4770 | + uint64_t virt_entry; |
4771 | + uint64_t virt_hypercall; |
4772 | + uint64_t virt_hv_start_low; |
4773 | + uint64_t elf_paddr_offset; |
4774 | + uint32_t f_supported[XENFEAT_NR_SUBMAPS]; |
4775 | + uint32_t f_required[XENFEAT_NR_SUBMAPS]; |
4776 | + |
4777 | + /* calculated */ |
4778 | + uint64_t virt_offset; |
4779 | + uint64_t virt_kstart; |
4780 | + uint64_t virt_kend; |
4781 | +}; |
4782 | + |
4783 | +static inline void elf_xen_feature_set(int nr, uint32_t * addr) |
4784 | +{ |
4785 | + addr[nr >> 5] |= 1 << (nr & 31); |
4786 | +} |
4787 | +static inline int elf_xen_feature_get(int nr, uint32_t * addr) |
4788 | +{ |
4789 | + return !!(addr[nr >> 5] & (1 << (nr & 31))); |
4790 | +} |
4791 | + |
4792 | +int elf_xen_parse_features(const char *features, |
4793 | + uint32_t *supported, |
4794 | + uint32_t *required); |
4795 | +int elf_xen_parse_note(struct elf_binary *elf, |
4796 | + struct elf_dom_parms *parms, |
4797 | + const elf_note *note); |
4798 | +int elf_xen_parse_guest_info(struct elf_binary *elf, |
4799 | + struct elf_dom_parms *parms); |
4800 | +int elf_xen_parse(struct elf_binary *elf, |
4801 | + struct elf_dom_parms *parms); |
4802 | + |
4803 | +#endif /* __XC_LIBELF__ */ |
4804 | Index: head-2008-04-15/include/xen/interface/nmi.h |
4805 | =================================================================== |
4806 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4807 | +++ head-2008-04-15/include/xen/interface/nmi.h 2007-06-12 13:14:19.000000000 +0200 |
4808 | @@ -0,0 +1,78 @@ |
4809 | +/****************************************************************************** |
4810 | + * nmi.h |
4811 | + * |
4812 | + * NMI callback registration and reason codes. |
4813 | + * |
4814 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4815 | + * of this software and associated documentation files (the "Software"), to |
4816 | + * deal in the Software without restriction, including without limitation the |
4817 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4818 | + * sell copies of the Software, and to permit persons to whom the Software is |
4819 | + * furnished to do so, subject to the following conditions: |
4820 | + * |
4821 | + * The above copyright notice and this permission notice shall be included in |
4822 | + * all copies or substantial portions of the Software. |
4823 | + * |
4824 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4825 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4826 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4827 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4828 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4829 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4830 | + * DEALINGS IN THE SOFTWARE. |
4831 | + * |
4832 | + * Copyright (c) 2005, Keir Fraser <keir@xensource.com> |
4833 | + */ |
4834 | + |
4835 | +#ifndef __XEN_PUBLIC_NMI_H__ |
4836 | +#define __XEN_PUBLIC_NMI_H__ |
4837 | + |
4838 | +/* |
4839 | + * NMI reason codes: |
4840 | + * Currently these are x86-specific, stored in arch_shared_info.nmi_reason. |
4841 | + */ |
4842 | + /* I/O-check error reported via ISA port 0x61, bit 6. */ |
4843 | +#define _XEN_NMIREASON_io_error 0 |
4844 | +#define XEN_NMIREASON_io_error (1UL << _XEN_NMIREASON_io_error) |
4845 | + /* Parity error reported via ISA port 0x61, bit 7. */ |
4846 | +#define _XEN_NMIREASON_parity_error 1 |
4847 | +#define XEN_NMIREASON_parity_error (1UL << _XEN_NMIREASON_parity_error) |
4848 | + /* Unknown hardware-generated NMI. */ |
4849 | +#define _XEN_NMIREASON_unknown 2 |
4850 | +#define XEN_NMIREASON_unknown (1UL << _XEN_NMIREASON_unknown) |
4851 | + |
4852 | +/* |
4853 | + * long nmi_op(unsigned int cmd, void *arg) |
4854 | + * NB. All ops return zero on success, else a negative error code. |
4855 | + */ |
4856 | + |
4857 | +/* |
4858 | + * Register NMI callback for this (calling) VCPU. Currently this only makes |
4859 | + * sense for domain 0, vcpu 0. All other callers will be returned EINVAL. |
4860 | + * arg == pointer to xennmi_callback structure. |
4861 | + */ |
4862 | +#define XENNMI_register_callback 0 |
4863 | +struct xennmi_callback { |
4864 | + unsigned long handler_address; |
4865 | + unsigned long pad; |
4866 | +}; |
4867 | +typedef struct xennmi_callback xennmi_callback_t; |
4868 | +DEFINE_XEN_GUEST_HANDLE(xennmi_callback_t); |
4869 | + |
4870 | +/* |
4871 | + * Deregister NMI callback for this (calling) VCPU. |
4872 | + * arg == NULL. |
4873 | + */ |
4874 | +#define XENNMI_unregister_callback 1 |
4875 | + |
4876 | +#endif /* __XEN_PUBLIC_NMI_H__ */ |
4877 | + |
4878 | +/* |
4879 | + * Local variables: |
4880 | + * mode: C |
4881 | + * c-set-style: "BSD" |
4882 | + * c-basic-offset: 4 |
4883 | + * tab-width: 4 |
4884 | + * indent-tabs-mode: nil |
4885 | + * End: |
4886 | + */ |
4887 | Index: head-2008-04-15/include/xen/interface/platform.h |
4888 | =================================================================== |
4889 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
4890 | +++ head-2008-04-15/include/xen/interface/platform.h 2008-01-21 11:15:27.000000000 +0100 |
4891 | @@ -0,0 +1,232 @@ |
4892 | +/****************************************************************************** |
4893 | + * platform.h |
4894 | + * |
4895 | + * Hardware platform operations. Intended for use by domain-0 kernel. |
4896 | + * |
4897 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
4898 | + * of this software and associated documentation files (the "Software"), to |
4899 | + * deal in the Software without restriction, including without limitation the |
4900 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
4901 | + * sell copies of the Software, and to permit persons to whom the Software is |
4902 | + * furnished to do so, subject to the following conditions: |
4903 | + * |
4904 | + * The above copyright notice and this permission notice shall be included in |
4905 | + * all copies or substantial portions of the Software. |
4906 | + * |
4907 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
4908 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
4909 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
4910 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
4911 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
4912 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
4913 | + * DEALINGS IN THE SOFTWARE. |
4914 | + * |
4915 | + * Copyright (c) 2002-2006, K Fraser |
4916 | + */ |
4917 | + |
4918 | +#ifndef __XEN_PUBLIC_PLATFORM_H__ |
4919 | +#define __XEN_PUBLIC_PLATFORM_H__ |
4920 | + |
4921 | +#include "xen.h" |
4922 | + |
4923 | +#define XENPF_INTERFACE_VERSION 0x03000001 |
4924 | + |
4925 | +/* |
4926 | + * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC, |
4927 | + * 1 January, 1970 if the current system time was <system_time>. |
4928 | + */ |
4929 | +#define XENPF_settime 17 |
4930 | +struct xenpf_settime { |
4931 | + /* IN variables. */ |
4932 | + uint32_t secs; |
4933 | + uint32_t nsecs; |
4934 | + uint64_t system_time; |
4935 | +}; |
4936 | +typedef struct xenpf_settime xenpf_settime_t; |
4937 | +DEFINE_XEN_GUEST_HANDLE(xenpf_settime_t); |
4938 | + |
4939 | +/* |
4940 | + * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type. |
4941 | + * On x86, @type is an architecture-defined MTRR memory type. |
4942 | + * On success, returns the MTRR that was used (@reg) and a handle that can |
4943 | + * be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting. |
4944 | + * (x86-specific). |
4945 | + */ |
4946 | +#define XENPF_add_memtype 31 |
4947 | +struct xenpf_add_memtype { |
4948 | + /* IN variables. */ |
4949 | + xen_pfn_t mfn; |
4950 | + uint64_t nr_mfns; |
4951 | + uint32_t type; |
4952 | + /* OUT variables. */ |
4953 | + uint32_t handle; |
4954 | + uint32_t reg; |
4955 | +}; |
4956 | +typedef struct xenpf_add_memtype xenpf_add_memtype_t; |
4957 | +DEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t); |
4958 | + |
4959 | +/* |
4960 | + * Tear down an existing memory-range type. If @handle is remembered then it |
4961 | + * should be passed in to accurately tear down the correct setting (in case |
4962 | + * of overlapping memory regions with differing types). If it is not known |
4963 | + * then @handle should be set to zero. In all cases @reg must be set. |
4964 | + * (x86-specific). |
4965 | + */ |
4966 | +#define XENPF_del_memtype 32 |
4967 | +struct xenpf_del_memtype { |
4968 | + /* IN variables. */ |
4969 | + uint32_t handle; |
4970 | + uint32_t reg; |
4971 | +}; |
4972 | +typedef struct xenpf_del_memtype xenpf_del_memtype_t; |
4973 | +DEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t); |
4974 | + |
4975 | +/* Read current type of an MTRR (x86-specific). */ |
4976 | +#define XENPF_read_memtype 33 |
4977 | +struct xenpf_read_memtype { |
4978 | + /* IN variables. */ |
4979 | + uint32_t reg; |
4980 | + /* OUT variables. */ |
4981 | + xen_pfn_t mfn; |
4982 | + uint64_t nr_mfns; |
4983 | + uint32_t type; |
4984 | +}; |
4985 | +typedef struct xenpf_read_memtype xenpf_read_memtype_t; |
4986 | +DEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t); |
4987 | + |
4988 | +#define XENPF_microcode_update 35 |
4989 | +struct xenpf_microcode_update { |
4990 | + /* IN variables. */ |
4991 | + XEN_GUEST_HANDLE(void) data; /* Pointer to microcode data */ |
4992 | + uint32_t length; /* Length of microcode data. */ |
4993 | +}; |
4994 | +typedef struct xenpf_microcode_update xenpf_microcode_update_t; |
4995 | +DEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t); |
4996 | + |
4997 | +#define XENPF_platform_quirk 39 |
4998 | +#define QUIRK_NOIRQBALANCING 1 /* Do not restrict IO-APIC RTE targets */ |
4999 | +#define QUIRK_IOAPIC_BAD_REGSEL 2 /* IO-APIC REGSEL forgets its value */ |
5000 | +#define QUIRK_IOAPIC_GOOD_REGSEL 3 /* IO-APIC REGSEL behaves properly */ |
5001 | +struct xenpf_platform_quirk { |
5002 | + /* IN variables. */ |
5003 | + uint32_t quirk_id; |
5004 | +}; |
5005 | +typedef struct xenpf_platform_quirk xenpf_platform_quirk_t; |
5006 | +DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t); |
5007 | + |
5008 | +#define XENPF_firmware_info 50 |
5009 | +#define XEN_FW_DISK_INFO 1 /* from int 13 AH=08/41/48 */ |
5010 | +#define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */ |
5011 | +#define XEN_FW_VBEDDC_INFO 3 /* from int 10 AX=4f15 */ |
5012 | +struct xenpf_firmware_info { |
5013 | + /* IN variables. */ |
5014 | + uint32_t type; |
5015 | + uint32_t index; |
5016 | + /* OUT variables. */ |
5017 | + union { |
5018 | + struct { |
5019 | + /* Int13, Fn48: Check Extensions Present. */ |
5020 | + uint8_t device; /* %dl: bios device number */ |
5021 | + uint8_t version; /* %ah: major version */ |
5022 | + uint16_t interface_support; /* %cx: support bitmap */ |
5023 | + /* Int13, Fn08: Legacy Get Device Parameters. */ |
5024 | + uint16_t legacy_max_cylinder; /* %cl[7:6]:%ch: max cyl # */ |
5025 | + uint8_t legacy_max_head; /* %dh: max head # */ |
5026 | + uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector # */ |
5027 | + /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */ |
5028 | + /* NB. First uint16_t of buffer must be set to buffer size. */ |
5029 | + XEN_GUEST_HANDLE(void) edd_params; |
5030 | + } disk_info; /* XEN_FW_DISK_INFO */ |
5031 | + struct { |
5032 | + uint8_t device; /* bios device number */ |
5033 | + uint32_t mbr_signature; /* offset 0x1b8 in mbr */ |
5034 | + } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */ |
5035 | + struct { |
5036 | + /* Int10, AX=4F15: Get EDID info. */ |
5037 | + uint8_t capabilities; |
5038 | + uint8_t edid_transfer_time; |
5039 | + /* must refer to 128-byte buffer */ |
5040 | + XEN_GUEST_HANDLE(uint8) edid; |
5041 | + } vbeddc_info; /* XEN_FW_VBEDDC_INFO */ |
5042 | + } u; |
5043 | +}; |
5044 | +typedef struct xenpf_firmware_info xenpf_firmware_info_t; |
5045 | +DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t); |
5046 | + |
5047 | +#define XENPF_enter_acpi_sleep 51 |
5048 | +struct xenpf_enter_acpi_sleep { |
5049 | + /* IN variables */ |
5050 | + uint16_t pm1a_cnt_val; /* PM1a control value. */ |
5051 | + uint16_t pm1b_cnt_val; /* PM1b control value. */ |
5052 | + uint32_t sleep_state; /* Which state to enter (Sn). */ |
5053 | + uint32_t flags; /* Must be zero. */ |
5054 | +}; |
5055 | +typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t; |
5056 | +DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t); |
5057 | + |
5058 | +#define XENPF_change_freq 52 |
5059 | +struct xenpf_change_freq { |
5060 | + /* IN variables */ |
5061 | + uint32_t flags; /* Must be zero. */ |
5062 | + uint32_t cpu; /* Physical cpu. */ |
5063 | + uint64_t freq; /* New frequency (Hz). */ |
5064 | +}; |
5065 | +typedef struct xenpf_change_freq xenpf_change_freq_t; |
5066 | +DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t); |
5067 | + |
5068 | +/* |
5069 | + * Get idle times (nanoseconds since boot) for physical CPUs specified in the |
5070 | + * @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is |
5071 | + * indexed by CPU number; only entries with the corresponding @cpumap_bitmap |
5072 | + * bit set are written to. On return, @cpumap_bitmap is modified so that any |
5073 | + * non-existent CPUs are cleared. Such CPUs have their @idletime array entry |
5074 | + * cleared. |
5075 | + */ |
5076 | +#define XENPF_getidletime 53 |
5077 | +struct xenpf_getidletime { |
5078 | + /* IN/OUT variables */ |
5079 | + /* IN: CPUs to interrogate; OUT: subset of IN which are present */ |
5080 | + XEN_GUEST_HANDLE(uint8) cpumap_bitmap; |
5081 | + /* IN variables */ |
5082 | + /* Size of cpumap bitmap. */ |
5083 | + uint32_t cpumap_nr_cpus; |
5084 | + /* Must be indexable for every cpu in cpumap_bitmap. */ |
5085 | + XEN_GUEST_HANDLE(uint64) idletime; |
5086 | + /* OUT variables */ |
5087 | + /* System time when the idletime snapshots were taken. */ |
5088 | + uint64_t now; |
5089 | +}; |
5090 | +typedef struct xenpf_getidletime xenpf_getidletime_t; |
5091 | +DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t); |
5092 | + |
5093 | +struct xen_platform_op { |
5094 | + uint32_t cmd; |
5095 | + uint32_t interface_version; /* XENPF_INTERFACE_VERSION */ |
5096 | + union { |
5097 | + struct xenpf_settime settime; |
5098 | + struct xenpf_add_memtype add_memtype; |
5099 | + struct xenpf_del_memtype del_memtype; |
5100 | + struct xenpf_read_memtype read_memtype; |
5101 | + struct xenpf_microcode_update microcode; |
5102 | + struct xenpf_platform_quirk platform_quirk; |
5103 | + struct xenpf_firmware_info firmware_info; |
5104 | + struct xenpf_enter_acpi_sleep enter_acpi_sleep; |
5105 | + struct xenpf_change_freq change_freq; |
5106 | + struct xenpf_getidletime getidletime; |
5107 | + uint8_t pad[128]; |
5108 | + } u; |
5109 | +}; |
5110 | +typedef struct xen_platform_op xen_platform_op_t; |
5111 | +DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t); |
5112 | + |
5113 | +#endif /* __XEN_PUBLIC_PLATFORM_H__ */ |
5114 | + |
5115 | +/* |
5116 | + * Local variables: |
5117 | + * mode: C |
5118 | + * c-set-style: "BSD" |
5119 | + * c-basic-offset: 4 |
5120 | + * tab-width: 4 |
5121 | + * indent-tabs-mode: nil |
5122 | + * End: |
5123 | + */ |
5124 | Index: head-2008-04-15/include/xen/interface/sysctl.h |
5125 | =================================================================== |
5126 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
5127 | +++ head-2008-04-15/include/xen/interface/sysctl.h 2008-01-21 11:15:27.000000000 +0100 |
5128 | @@ -0,0 +1,238 @@ |
5129 | +/****************************************************************************** |
5130 | + * sysctl.h |
5131 | + * |
5132 | + * System management operations. For use by node control stack. |
5133 | + * |
5134 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
5135 | + * of this software and associated documentation files (the "Software"), to |
5136 | + * deal in the Software without restriction, including without limitation the |
5137 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
5138 | + * sell copies of the Software, and to permit persons to whom the Software is |
5139 | + * furnished to do so, subject to the following conditions: |
5140 | + * |
5141 | + * The above copyright notice and this permission notice shall be included in |
5142 | + * all copies or substantial portions of the Software. |
5143 | + * |
5144 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
5145 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
5146 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
5147 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
5148 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
5149 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
5150 | + * DEALINGS IN THE SOFTWARE. |
5151 | + * |
5152 | + * Copyright (c) 2002-2006, K Fraser |
5153 | + */ |
5154 | + |
5155 | +#ifndef __XEN_PUBLIC_SYSCTL_H__ |
5156 | +#define __XEN_PUBLIC_SYSCTL_H__ |
5157 | + |
5158 | +#if !defined(__XEN__) && !defined(__XEN_TOOLS__) |
5159 | +#error "sysctl operations are intended for use by node control tools only" |
5160 | +#endif |
5161 | + |
5162 | +#include "xen.h" |
5163 | +#include "domctl.h" |
5164 | + |
5165 | +#define XEN_SYSCTL_INTERFACE_VERSION 0x00000006 |
5166 | + |
5167 | +/* |
5168 | + * Read console content from Xen buffer ring. |
5169 | + */ |
5170 | +#define XEN_SYSCTL_readconsole 1 |
5171 | +struct xen_sysctl_readconsole { |
5172 | + /* IN: Non-zero -> clear after reading. */ |
5173 | + uint8_t clear; |
5174 | + /* IN: Non-zero -> start index specified by @index field. */ |
5175 | + uint8_t incremental; |
5176 | + uint8_t pad0, pad1; |
5177 | + /* |
5178 | + * IN: Start index for consuming from ring buffer (if @incremental); |
5179 | + * OUT: End index after consuming from ring buffer. |
5180 | + */ |
5181 | + uint32_t index; |
5182 | + /* IN: Virtual address to write console data. */ |
5183 | + XEN_GUEST_HANDLE_64(char) buffer; |
5184 | + /* IN: Size of buffer; OUT: Bytes written to buffer. */ |
5185 | + uint32_t count; |
5186 | +}; |
5187 | +typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t; |
5188 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t); |
5189 | + |
5190 | +/* Get trace buffers machine base address */ |
5191 | +#define XEN_SYSCTL_tbuf_op 2 |
5192 | +struct xen_sysctl_tbuf_op { |
5193 | + /* IN variables */ |
5194 | +#define XEN_SYSCTL_TBUFOP_get_info 0 |
5195 | +#define XEN_SYSCTL_TBUFOP_set_cpu_mask 1 |
5196 | +#define XEN_SYSCTL_TBUFOP_set_evt_mask 2 |
5197 | +#define XEN_SYSCTL_TBUFOP_set_size 3 |
5198 | +#define XEN_SYSCTL_TBUFOP_enable 4 |
5199 | +#define XEN_SYSCTL_TBUFOP_disable 5 |
5200 | + uint32_t cmd; |
5201 | + /* IN/OUT variables */ |
5202 | + struct xenctl_cpumap cpu_mask; |
5203 | + uint32_t evt_mask; |
5204 | + /* OUT variables */ |
5205 | + uint64_aligned_t buffer_mfn; |
5206 | + uint32_t size; |
5207 | +}; |
5208 | +typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t; |
5209 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t); |
5210 | + |
5211 | +/* |
5212 | + * Get physical information about the host machine |
5213 | + */ |
5214 | +#define XEN_SYSCTL_physinfo 3 |
5215 | +struct xen_sysctl_physinfo { |
5216 | + /* IN variables. */ |
5217 | + uint32_t threads_per_core; |
5218 | + uint32_t cores_per_socket; |
5219 | + uint32_t nr_cpus; |
5220 | + uint32_t nr_nodes; |
5221 | + uint32_t cpu_khz; |
5222 | + uint64_aligned_t total_pages; |
5223 | + uint64_aligned_t free_pages; |
5224 | + uint64_aligned_t scrub_pages; |
5225 | + uint32_t hw_cap[8]; |
5226 | + |
5227 | + /* IN/OUT variables. */ |
5228 | + /* |
5229 | + * IN: maximum addressable entry in the caller-provided cpu_to_node array. |
5230 | + * OUT: largest cpu identifier in the system. |
5231 | + * If OUT is greater than IN then the cpu_to_node array is truncated! |
5232 | + */ |
5233 | + uint32_t max_cpu_id; |
5234 | + /* |
5235 | + * If not NULL, this array is filled with node identifier for each cpu. |
5236 | + * If a cpu has no node information (e.g., cpu not present) then the |
5237 | + * sentinel value ~0u is written. |
5238 | + * The size of this array is specified by the caller in @max_cpu_id. |
5239 | + * If the actual @max_cpu_id is smaller than the array then the trailing |
5240 | + * elements of the array will not be written by the sysctl. |
5241 | + */ |
5242 | + XEN_GUEST_HANDLE_64(uint32) cpu_to_node; |
5243 | +}; |
5244 | +typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t; |
5245 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t); |
5246 | + |
5247 | +/* |
5248 | + * Get the ID of the current scheduler. |
5249 | + */ |
5250 | +#define XEN_SYSCTL_sched_id 4 |
5251 | +struct xen_sysctl_sched_id { |
5252 | + /* OUT variable */ |
5253 | + uint32_t sched_id; |
5254 | +}; |
5255 | +typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t; |
5256 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t); |
5257 | + |
5258 | +/* Interface for controlling Xen software performance counters. */ |
5259 | +#define XEN_SYSCTL_perfc_op 5 |
5260 | +/* Sub-operations: */ |
5261 | +#define XEN_SYSCTL_PERFCOP_reset 1 /* Reset all counters to zero. */ |
5262 | +#define XEN_SYSCTL_PERFCOP_query 2 /* Get perfctr information. */ |
5263 | +struct xen_sysctl_perfc_desc { |
5264 | + char name[80]; /* name of perf counter */ |
5265 | + uint32_t nr_vals; /* number of values for this counter */ |
5266 | +}; |
5267 | +typedef struct xen_sysctl_perfc_desc xen_sysctl_perfc_desc_t; |
5268 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t); |
5269 | +typedef uint32_t xen_sysctl_perfc_val_t; |
5270 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t); |
5271 | + |
5272 | +struct xen_sysctl_perfc_op { |
5273 | + /* IN variables. */ |
5274 | + uint32_t cmd; /* XEN_SYSCTL_PERFCOP_??? */ |
5275 | + /* OUT variables. */ |
5276 | + uint32_t nr_counters; /* number of counters description */ |
5277 | + uint32_t nr_vals; /* number of values */ |
5278 | + /* counter information (or NULL) */ |
5279 | + XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc; |
5280 | + /* counter values (or NULL) */ |
5281 | + XEN_GUEST_HANDLE_64(xen_sysctl_perfc_val_t) val; |
5282 | +}; |
5283 | +typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t; |
5284 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t); |
5285 | + |
5286 | +#define XEN_SYSCTL_getdomaininfolist 6 |
5287 | +struct xen_sysctl_getdomaininfolist { |
5288 | + /* IN variables. */ |
5289 | + domid_t first_domain; |
5290 | + uint32_t max_domains; |
5291 | + XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer; |
5292 | + /* OUT variables. */ |
5293 | + uint32_t num_domains; |
5294 | +}; |
5295 | +typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t; |
5296 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t); |
5297 | + |
5298 | +/* Inject debug keys into Xen. */ |
5299 | +#define XEN_SYSCTL_debug_keys 7 |
5300 | +struct xen_sysctl_debug_keys { |
5301 | + /* IN variables. */ |
5302 | + XEN_GUEST_HANDLE_64(char) keys; |
5303 | + uint32_t nr_keys; |
5304 | +}; |
5305 | +typedef struct xen_sysctl_debug_keys xen_sysctl_debug_keys_t; |
5306 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_debug_keys_t); |
5307 | + |
5308 | +/* Get physical CPU information. */ |
5309 | +#define XEN_SYSCTL_getcpuinfo 8 |
5310 | +struct xen_sysctl_cpuinfo { |
5311 | + uint64_aligned_t idletime; |
5312 | +}; |
5313 | +typedef struct xen_sysctl_cpuinfo xen_sysctl_cpuinfo_t; |
5314 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpuinfo_t); |
5315 | +struct xen_sysctl_getcpuinfo { |
5316 | + /* IN variables. */ |
5317 | + uint32_t max_cpus; |
5318 | + XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info; |
5319 | + /* OUT variables. */ |
5320 | + uint32_t nr_cpus; |
5321 | +}; |
5322 | +typedef struct xen_sysctl_getcpuinfo xen_sysctl_getcpuinfo_t; |
5323 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getcpuinfo_t); |
5324 | + |
5325 | +#define XEN_SYSCTL_availheap 9 |
5326 | +struct xen_sysctl_availheap { |
5327 | + /* IN variables. */ |
5328 | + uint32_t min_bitwidth; /* Smallest address width (zero if don't care). */ |
5329 | + uint32_t max_bitwidth; /* Largest address width (zero if don't care). */ |
5330 | + int32_t node; /* NUMA node of interest (-1 for all nodes). */ |
5331 | + /* OUT variables. */ |
5332 | + uint64_aligned_t avail_bytes;/* Bytes available in the specified region. */ |
5333 | +}; |
5334 | +typedef struct xen_sysctl_availheap xen_sysctl_availheap_t; |
5335 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_availheap_t); |
5336 | + |
5337 | +struct xen_sysctl { |
5338 | + uint32_t cmd; |
5339 | + uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */ |
5340 | + union { |
5341 | + struct xen_sysctl_readconsole readconsole; |
5342 | + struct xen_sysctl_tbuf_op tbuf_op; |
5343 | + struct xen_sysctl_physinfo physinfo; |
5344 | + struct xen_sysctl_sched_id sched_id; |
5345 | + struct xen_sysctl_perfc_op perfc_op; |
5346 | + struct xen_sysctl_getdomaininfolist getdomaininfolist; |
5347 | + struct xen_sysctl_debug_keys debug_keys; |
5348 | + struct xen_sysctl_getcpuinfo getcpuinfo; |
5349 | + struct xen_sysctl_availheap availheap; |
5350 | + uint8_t pad[128]; |
5351 | + } u; |
5352 | +}; |
5353 | +typedef struct xen_sysctl xen_sysctl_t; |
5354 | +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t); |
5355 | + |
5356 | +#endif /* __XEN_PUBLIC_SYSCTL_H__ */ |
5357 | + |
5358 | +/* |
5359 | + * Local variables: |
5360 | + * mode: C |
5361 | + * c-set-style: "BSD" |
5362 | + * c-basic-offset: 4 |
5363 | + * tab-width: 4 |
5364 | + * indent-tabs-mode: nil |
5365 | + * End: |
5366 | + */ |
5367 | Index: head-2008-04-15/include/xen/interface/trace.h |
5368 | =================================================================== |
5369 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
5370 | +++ head-2008-04-15/include/xen/interface/trace.h 2008-04-02 12:34:02.000000000 +0200 |
5371 | @@ -0,0 +1,167 @@ |
5372 | +/****************************************************************************** |
5373 | + * include/public/trace.h |
5374 | + * |
5375 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
5376 | + * of this software and associated documentation files (the "Software"), to |
5377 | + * deal in the Software without restriction, including without limitation the |
5378 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
5379 | + * sell copies of the Software, and to permit persons to whom the Software is |
5380 | + * furnished to do so, subject to the following conditions: |
5381 | + * |
5382 | + * The above copyright notice and this permission notice shall be included in |
5383 | + * all copies or substantial portions of the Software. |
5384 | + * |
5385 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
5386 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
5387 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
5388 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
5389 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
5390 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
5391 | + * DEALINGS IN THE SOFTWARE. |
5392 | + * |
5393 | + * Mark Williamson, (C) 2004 Intel Research Cambridge |
5394 | + * Copyright (C) 2005 Bin Ren |
5395 | + */ |
5396 | + |
5397 | +#ifndef __XEN_PUBLIC_TRACE_H__ |
5398 | +#define __XEN_PUBLIC_TRACE_H__ |
5399 | + |
5400 | +#define TRACE_EXTRA_MAX 7 |
5401 | +#define TRACE_EXTRA_SHIFT 28 |
5402 | + |
5403 | +/* Trace classes */ |
5404 | +#define TRC_CLS_SHIFT 16 |
5405 | +#define TRC_GEN 0x0001f000 /* General trace */ |
5406 | +#define TRC_SCHED 0x0002f000 /* Xen Scheduler trace */ |
5407 | +#define TRC_DOM0OP 0x0004f000 /* Xen DOM0 operation trace */ |
5408 | +#define TRC_HVM 0x0008f000 /* Xen HVM trace */ |
5409 | +#define TRC_MEM 0x0010f000 /* Xen memory trace */ |
5410 | +#define TRC_PV 0x0020f000 /* Xen PV traces */ |
5411 | +#define TRC_ALL 0x0ffff000 |
5412 | +#define TRC_HD_TO_EVENT(x) ((x)&0x0fffffff) |
5413 | +#define TRC_HD_CYCLE_FLAG (1UL<<31) |
5414 | +#define TRC_HD_INCLUDES_CYCLE_COUNT(x) ( !!( (x) & TRC_HD_CYCLE_FLAG ) ) |
5415 | +#define TRC_HD_EXTRA(x) (((x)>>TRACE_EXTRA_SHIFT)&TRACE_EXTRA_MAX) |
5416 | + |
5417 | +/* Trace subclasses */ |
5418 | +#define TRC_SUBCLS_SHIFT 12 |
5419 | + |
5420 | +/* trace subclasses for SVM */ |
5421 | +#define TRC_HVM_ENTRYEXIT 0x00081000 /* VMENTRY and #VMEXIT */ |
5422 | +#define TRC_HVM_HANDLER 0x00082000 /* various HVM handlers */ |
5423 | + |
5424 | +/* Trace events per class */ |
5425 | +#define TRC_LOST_RECORDS (TRC_GEN + 1) |
5426 | +#define TRC_TRACE_WRAP_BUFFER (TRC_GEN + 2) |
5427 | +#define TRC_TRACE_CPU_CHANGE (TRC_GEN + 3) |
5428 | + |
5429 | +#define TRC_SCHED_DOM_ADD (TRC_SCHED + 1) |
5430 | +#define TRC_SCHED_DOM_REM (TRC_SCHED + 2) |
5431 | +#define TRC_SCHED_SLEEP (TRC_SCHED + 3) |
5432 | +#define TRC_SCHED_WAKE (TRC_SCHED + 4) |
5433 | +#define TRC_SCHED_YIELD (TRC_SCHED + 5) |
5434 | +#define TRC_SCHED_BLOCK (TRC_SCHED + 6) |
5435 | +#define TRC_SCHED_SHUTDOWN (TRC_SCHED + 7) |
5436 | +#define TRC_SCHED_CTL (TRC_SCHED + 8) |
5437 | +#define TRC_SCHED_ADJDOM (TRC_SCHED + 9) |
5438 | +#define TRC_SCHED_SWITCH (TRC_SCHED + 10) |
5439 | +#define TRC_SCHED_S_TIMER_FN (TRC_SCHED + 11) |
5440 | +#define TRC_SCHED_T_TIMER_FN (TRC_SCHED + 12) |
5441 | +#define TRC_SCHED_DOM_TIMER_FN (TRC_SCHED + 13) |
5442 | +#define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED + 14) |
5443 | +#define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED + 15) |
5444 | + |
5445 | +#define TRC_MEM_PAGE_GRANT_MAP (TRC_MEM + 1) |
5446 | +#define TRC_MEM_PAGE_GRANT_UNMAP (TRC_MEM + 2) |
5447 | +#define TRC_MEM_PAGE_GRANT_TRANSFER (TRC_MEM + 3) |
5448 | + |
5449 | +#define TRC_PV_HYPERCALL (TRC_PV + 1) |
5450 | +#define TRC_PV_TRAP (TRC_PV + 3) |
5451 | +#define TRC_PV_PAGE_FAULT (TRC_PV + 4) |
5452 | +#define TRC_PV_FORCED_INVALID_OP (TRC_PV + 5) |
5453 | +#define TRC_PV_EMULATE_PRIVOP (TRC_PV + 6) |
5454 | +#define TRC_PV_EMULATE_4GB (TRC_PV + 7) |
5455 | +#define TRC_PV_MATH_STATE_RESTORE (TRC_PV + 8) |
5456 | +#define TRC_PV_PAGING_FIXUP (TRC_PV + 9) |
5457 | +#define TRC_PV_GDT_LDT_MAPPING_FAULT (TRC_PV + 10) |
5458 | +#define TRC_PV_PTWR_EMULATION (TRC_PV + 11) |
5459 | +#define TRC_PV_PTWR_EMULATION_PAE (TRC_PV + 12) |
5460 | + /* Indicates that addresses in trace record are 64 bits */ |
5461 | +#define TRC_PV_64_FLAG (0x100) |
5462 | + |
5463 | +/* trace events per subclass */ |
5464 | +#define TRC_HVM_VMENTRY (TRC_HVM_ENTRYEXIT + 0x01) |
5465 | +#define TRC_HVM_VMEXIT (TRC_HVM_ENTRYEXIT + 0x02) |
5466 | +#define TRC_HVM_VMEXIT64 (TRC_HVM_ENTRYEXIT + 0x03) |
5467 | +#define TRC_HVM_PF_XEN (TRC_HVM_HANDLER + 0x01) |
5468 | +#define TRC_HVM_PF_INJECT (TRC_HVM_HANDLER + 0x02) |
5469 | +#define TRC_HVM_INJ_EXC (TRC_HVM_HANDLER + 0x03) |
5470 | +#define TRC_HVM_INJ_VIRQ (TRC_HVM_HANDLER + 0x04) |
5471 | +#define TRC_HVM_REINJ_VIRQ (TRC_HVM_HANDLER + 0x05) |
5472 | +#define TRC_HVM_IO_READ (TRC_HVM_HANDLER + 0x06) |
5473 | +#define TRC_HVM_IO_WRITE (TRC_HVM_HANDLER + 0x07) |
5474 | +#define TRC_HVM_CR_READ (TRC_HVM_HANDLER + 0x08) |
5475 | +#define TRC_HVM_CR_WRITE (TRC_HVM_HANDLER + 0x09) |
5476 | +#define TRC_HVM_DR_READ (TRC_HVM_HANDLER + 0x0A) |
5477 | +#define TRC_HVM_DR_WRITE (TRC_HVM_HANDLER + 0x0B) |
5478 | +#define TRC_HVM_MSR_READ (TRC_HVM_HANDLER + 0x0C) |
5479 | +#define TRC_HVM_MSR_WRITE (TRC_HVM_HANDLER + 0x0D) |
5480 | +#define TRC_HVM_CPUID (TRC_HVM_HANDLER + 0x0E) |
5481 | +#define TRC_HVM_INTR (TRC_HVM_HANDLER + 0x0F) |
5482 | +#define TRC_HVM_NMI (TRC_HVM_HANDLER + 0x10) |
5483 | +#define TRC_HVM_SMI (TRC_HVM_HANDLER + 0x11) |
5484 | +#define TRC_HVM_VMMCALL (TRC_HVM_HANDLER + 0x12) |
5485 | +#define TRC_HVM_HLT (TRC_HVM_HANDLER + 0x13) |
5486 | +#define TRC_HVM_INVLPG (TRC_HVM_HANDLER + 0x14) |
5487 | +#define TRC_HVM_MCE (TRC_HVM_HANDLER + 0x15) |
5488 | +#define TRC_HVM_IO_ASSIST (TRC_HVM_HANDLER + 0x16) |
5489 | +#define TRC_HVM_MMIO_ASSIST (TRC_HVM_HANDLER + 0x17) |
5490 | +#define TRC_HVM_CLTS (TRC_HVM_HANDLER + 0x18) |
5491 | +#define TRC_HVM_LMSW (TRC_HVM_HANDLER + 0x19) |
5492 | +#define TRC_HVM_PF_XEN64 (TRC_HVM_HANDLER + 0x20) |
5493 | + |
5494 | +/* This structure represents a single trace buffer record. */ |
5495 | +struct t_rec { |
5496 | + uint32_t event:28; |
5497 | + uint32_t extra_u32:3; /* # entries in trailing extra_u32[] array */ |
5498 | + uint32_t cycles_included:1; /* u.cycles or u.no_cycles? */ |
5499 | + union { |
5500 | + struct { |
5501 | + uint32_t cycles_lo, cycles_hi; /* cycle counter timestamp */ |
5502 | + uint32_t extra_u32[7]; /* event data items */ |
5503 | + } cycles; |
5504 | + struct { |
5505 | + uint32_t extra_u32[7]; /* event data items */ |
5506 | + } nocycles; |
5507 | + } u; |
5508 | +}; |
5509 | + |
5510 | +/* |
5511 | + * This structure contains the metadata for a single trace buffer. The head |
5512 | + * field, indexes into an array of struct t_rec's. |
5513 | + */ |
5514 | +struct t_buf { |
5515 | + /* Assume the data buffer size is X. X is generally not a power of 2. |
5516 | + * CONS and PROD are incremented modulo (2*X): |
5517 | + * 0 <= cons < 2*X |
5518 | + * 0 <= prod < 2*X |
5519 | + * This is done because addition modulo X breaks at 2^32 when X is not a |
5520 | + * power of 2: |
5521 | + * (((2^32 - 1) % X) + 1) % X != (2^32) % X |
5522 | + */ |
5523 | + uint32_t cons; /* Offset of next item to be consumed by control tools. */ |
5524 | + uint32_t prod; /* Offset of next item to be produced by Xen. */ |
5525 | + /* Records follow immediately after the meta-data header. */ |
5526 | +}; |
5527 | + |
5528 | +#endif /* __XEN_PUBLIC_TRACE_H__ */ |
5529 | + |
5530 | +/* |
5531 | + * Local variables: |
5532 | + * mode: C |
5533 | + * c-set-style: "BSD" |
5534 | + * c-basic-offset: 4 |
5535 | + * tab-width: 4 |
5536 | + * indent-tabs-mode: nil |
5537 | + * End: |
5538 | + */ |
5539 | Index: head-2008-04-15/include/xen/interface/xen-compat.h |
5540 | =================================================================== |
5541 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
5542 | +++ head-2008-04-15/include/xen/interface/xen-compat.h 2008-04-02 12:34:02.000000000 +0200 |
5543 | @@ -0,0 +1,44 @@ |
5544 | +/****************************************************************************** |
5545 | + * xen-compat.h |
5546 | + * |
5547 | + * Guest OS interface to Xen. Compatibility layer. |
5548 | + * |
5549 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
5550 | + * of this software and associated documentation files (the "Software"), to |
5551 | + * deal in the Software without restriction, including without limitation the |
5552 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
5553 | + * sell copies of the Software, and to permit persons to whom the Software is |
5554 | + * furnished to do so, subject to the following conditions: |
5555 | + * |
5556 | + * The above copyright notice and this permission notice shall be included in |
5557 | + * all copies or substantial portions of the Software. |
5558 | + * |
5559 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
5560 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
5561 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
5562 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
5563 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
5564 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
5565 | + * DEALINGS IN THE SOFTWARE. |
5566 | + * |
5567 | + * Copyright (c) 2006, Christian Limpach |
5568 | + */ |
5569 | + |
5570 | +#ifndef __XEN_PUBLIC_XEN_COMPAT_H__ |
5571 | +#define __XEN_PUBLIC_XEN_COMPAT_H__ |
5572 | + |
5573 | +#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030208 |
5574 | + |
5575 | +#if defined(__XEN__) || defined(__XEN_TOOLS__) |
5576 | +/* Xen is built with matching headers and implements the latest interface. */ |
5577 | +#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__ |
5578 | +#elif !defined(__XEN_INTERFACE_VERSION__) |
5579 | +/* Guests which do not specify a version get the legacy interface. */ |
5580 | +#define __XEN_INTERFACE_VERSION__ 0x00000000 |
5581 | +#endif |
5582 | + |
5583 | +#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__ |
5584 | +#error "These header files do not support the requested interface version." |
5585 | +#endif |
5586 | + |
5587 | +#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */ |
5588 | Index: head-2008-04-15/include/xen/interface/xencomm.h |
5589 | =================================================================== |
5590 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
5591 | +++ head-2008-04-15/include/xen/interface/xencomm.h 2007-06-12 13:14:19.000000000 +0200 |
5592 | @@ -0,0 +1,41 @@ |
5593 | +/* |
5594 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
5595 | + * of this software and associated documentation files (the "Software"), to |
5596 | + * deal in the Software without restriction, including without limitation the |
5597 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
5598 | + * sell copies of the Software, and to permit persons to whom the Software is |
5599 | + * furnished to do so, subject to the following conditions: |
5600 | + * |
5601 | + * The above copyright notice and this permission notice shall be included in |
5602 | + * all copies or substantial portions of the Software. |
5603 | + * |
5604 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
5605 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
5606 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
5607 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
5608 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
5609 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
5610 | + * DEALINGS IN THE SOFTWARE. |
5611 | + * |
5612 | + * Copyright (C) IBM Corp. 2006 |
5613 | + */ |
5614 | + |
5615 | +#ifndef _XEN_XENCOMM_H_ |
5616 | +#define _XEN_XENCOMM_H_ |
5617 | + |
5618 | +/* A xencomm descriptor is a scatter/gather list containing physical |
5619 | + * addresses corresponding to a virtually contiguous memory area. The |
5620 | + * hypervisor translates these physical addresses to machine addresses to copy |
5621 | + * to and from the virtually contiguous area. |
5622 | + */ |
5623 | + |
5624 | +#define XENCOMM_MAGIC 0x58434F4D /* 'XCOM' */ |
5625 | +#define XENCOMM_INVALID (~0UL) |
5626 | + |
5627 | +struct xencomm_desc { |
5628 | + uint32_t magic; |
5629 | + uint32_t nr_addrs; /* the number of entries in address[] */ |
5630 | + uint64_t address[0]; |
5631 | +}; |
5632 | + |
5633 | +#endif /* _XEN_XENCOMM_H_ */ |
5634 | Index: head-2008-04-15/include/xen/interface/xenoprof.h |
5635 | =================================================================== |
5636 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
5637 | +++ head-2008-04-15/include/xen/interface/xenoprof.h 2007-06-12 13:14:19.000000000 +0200 |
5638 | @@ -0,0 +1,138 @@ |
5639 | +/****************************************************************************** |
5640 | + * xenoprof.h |
5641 | + * |
5642 | + * Interface for enabling system wide profiling based on hardware performance |
5643 | + * counters |
5644 | + * |
5645 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
5646 | + * of this software and associated documentation files (the "Software"), to |
5647 | + * deal in the Software without restriction, including without limitation the |
5648 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
5649 | + * sell copies of the Software, and to permit persons to whom the Software is |
5650 | + * furnished to do so, subject to the following conditions: |
5651 | + * |
5652 | + * The above copyright notice and this permission notice shall be included in |
5653 | + * all copies or substantial portions of the Software. |
5654 | + * |
5655 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
5656 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
5657 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
5658 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
5659 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
5660 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
5661 | + * DEALINGS IN THE SOFTWARE. |
5662 | + * |
5663 | + * Copyright (C) 2005 Hewlett-Packard Co. |
5664 | + * Written by Aravind Menon & Jose Renato Santos |
5665 | + */ |
5666 | + |
5667 | +#ifndef __XEN_PUBLIC_XENOPROF_H__ |
5668 | +#define __XEN_PUBLIC_XENOPROF_H__ |
5669 | + |
5670 | +#include "xen.h" |
5671 | + |
5672 | +/* |
5673 | + * Commands to HYPERVISOR_xenoprof_op(). |
5674 | + */ |
5675 | +#define XENOPROF_init 0 |
5676 | +#define XENOPROF_reset_active_list 1 |
5677 | +#define XENOPROF_reset_passive_list 2 |
5678 | +#define XENOPROF_set_active 3 |
5679 | +#define XENOPROF_set_passive 4 |
5680 | +#define XENOPROF_reserve_counters 5 |
5681 | +#define XENOPROF_counter 6 |
5682 | +#define XENOPROF_setup_events 7 |
5683 | +#define XENOPROF_enable_virq 8 |
5684 | +#define XENOPROF_start 9 |
5685 | +#define XENOPROF_stop 10 |
5686 | +#define XENOPROF_disable_virq 11 |
5687 | +#define XENOPROF_release_counters 12 |
5688 | +#define XENOPROF_shutdown 13 |
5689 | +#define XENOPROF_get_buffer 14 |
5690 | +#define XENOPROF_set_backtrace 15 |
5691 | +#define XENOPROF_last_op 15 |
5692 | + |
5693 | +#define MAX_OPROF_EVENTS 32 |
5694 | +#define MAX_OPROF_DOMAINS 25 |
5695 | +#define XENOPROF_CPU_TYPE_SIZE 64 |
5696 | + |
5697 | +/* Xenoprof performance events (not Xen events) */ |
5698 | +struct event_log { |
5699 | + uint64_t eip; |
5700 | + uint8_t mode; |
5701 | + uint8_t event; |
5702 | +}; |
5703 | + |
5704 | +/* PC value that indicates a special code */ |
5705 | +#define XENOPROF_ESCAPE_CODE ~0UL |
5706 | +/* Transient events for the xenoprof->oprofile cpu buf */ |
5707 | +#define XENOPROF_TRACE_BEGIN 1 |
5708 | + |
5709 | +/* Xenoprof buffer shared between Xen and domain - 1 per VCPU */ |
5710 | +struct xenoprof_buf { |
5711 | + uint32_t event_head; |
5712 | + uint32_t event_tail; |
5713 | + uint32_t event_size; |
5714 | + uint32_t vcpu_id; |
5715 | + uint64_t xen_samples; |
5716 | + uint64_t kernel_samples; |
5717 | + uint64_t user_samples; |
5718 | + uint64_t lost_samples; |
5719 | + struct event_log event_log[1]; |
5720 | +}; |
5721 | +#ifndef __XEN__ |
5722 | +typedef struct xenoprof_buf xenoprof_buf_t; |
5723 | +DEFINE_XEN_GUEST_HANDLE(xenoprof_buf_t); |
5724 | +#endif |
5725 | + |
5726 | +struct xenoprof_init { |
5727 | + int32_t num_events; |
5728 | + int32_t is_primary; |
5729 | + char cpu_type[XENOPROF_CPU_TYPE_SIZE]; |
5730 | +}; |
5731 | +typedef struct xenoprof_init xenoprof_init_t; |
5732 | +DEFINE_XEN_GUEST_HANDLE(xenoprof_init_t); |
5733 | + |
5734 | +struct xenoprof_get_buffer { |
5735 | + int32_t max_samples; |
5736 | + int32_t nbuf; |
5737 | + int32_t bufsize; |
5738 | + uint64_t buf_gmaddr; |
5739 | +}; |
5740 | +typedef struct xenoprof_get_buffer xenoprof_get_buffer_t; |
5741 | +DEFINE_XEN_GUEST_HANDLE(xenoprof_get_buffer_t); |
5742 | + |
5743 | +struct xenoprof_counter { |
5744 | + uint32_t ind; |
5745 | + uint64_t count; |
5746 | + uint32_t enabled; |
5747 | + uint32_t event; |
5748 | + uint32_t hypervisor; |
5749 | + uint32_t kernel; |
5750 | + uint32_t user; |
5751 | + uint64_t unit_mask; |
5752 | +}; |
5753 | +typedef struct xenoprof_counter xenoprof_counter_t; |
5754 | +DEFINE_XEN_GUEST_HANDLE(xenoprof_counter_t); |
5755 | + |
5756 | +typedef struct xenoprof_passive { |
5757 | + uint16_t domain_id; |
5758 | + int32_t max_samples; |
5759 | + int32_t nbuf; |
5760 | + int32_t bufsize; |
5761 | + uint64_t buf_gmaddr; |
5762 | +} xenoprof_passive_t; |
5763 | +DEFINE_XEN_GUEST_HANDLE(xenoprof_passive_t); |
5764 | + |
5765 | + |
5766 | +#endif /* __XEN_PUBLIC_XENOPROF_H__ */ |
5767 | + |
5768 | +/* |
5769 | + * Local variables: |
5770 | + * mode: C |
5771 | + * c-set-style: "BSD" |
5772 | + * c-basic-offset: 4 |
5773 | + * tab-width: 4 |
5774 | + * indent-tabs-mode: nil |
5775 | + * End: |
5776 | + */ |
5777 | Index: head-2008-04-15/include/xen/interface/xsm/acm.h |
5778 | =================================================================== |
5779 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
5780 | +++ head-2008-04-15/include/xen/interface/xsm/acm.h 2007-10-22 13:39:15.000000000 +0200 |
5781 | @@ -0,0 +1,229 @@ |
5782 | +/* |
5783 | + * acm.h: Xen access control module interface defintions |
5784 | + * |
5785 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
5786 | + * of this software and associated documentation files (the "Software"), to |
5787 | + * deal in the Software without restriction, including without limitation the |
5788 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
5789 | + * sell copies of the Software, and to permit persons to whom the Software is |
5790 | + * furnished to do so, subject to the following conditions: |
5791 | + * |
5792 | + * The above copyright notice and this permission notice shall be included in |
5793 | + * all copies or substantial portions of the Software. |
5794 | + * |
5795 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
5796 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
5797 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
5798 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
5799 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
5800 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
5801 | + * DEALINGS IN THE SOFTWARE. |
5802 | + * |
5803 | + * Reiner Sailer <sailer@watson.ibm.com> |
5804 | + * Copyright (c) 2005, International Business Machines Corporation. |
5805 | + */ |
5806 | + |
5807 | +#ifndef _XEN_PUBLIC_ACM_H |
5808 | +#define _XEN_PUBLIC_ACM_H |
5809 | + |
5810 | +#include "../xen.h" |
5811 | + |
5812 | +/* if ACM_DEBUG defined, all hooks should |
5813 | + * print a short trace message (comment it out |
5814 | + * when not in testing mode ) |
5815 | + */ |
5816 | +/* #define ACM_DEBUG */ |
5817 | + |
5818 | +#ifdef ACM_DEBUG |
5819 | +# define printkd(fmt, args...) printk(fmt,## args) |
5820 | +#else |
5821 | +# define printkd(fmt, args...) |
5822 | +#endif |
5823 | + |
5824 | +/* default ssid reference value if not supplied */ |
5825 | +#define ACM_DEFAULT_SSID 0x0 |
5826 | +#define ACM_DEFAULT_LOCAL_SSID 0x0 |
5827 | + |
5828 | +/* Internal ACM ERROR types */ |
5829 | +#define ACM_OK 0 |
5830 | +#define ACM_UNDEF -1 |
5831 | +#define ACM_INIT_SSID_ERROR -2 |
5832 | +#define ACM_INIT_SOID_ERROR -3 |
5833 | +#define ACM_ERROR -4 |
5834 | + |
5835 | +/* External ACCESS DECISIONS */ |
5836 | +#define ACM_ACCESS_PERMITTED 0 |
5837 | +#define ACM_ACCESS_DENIED -111 |
5838 | +#define ACM_NULL_POINTER_ERROR -200 |
5839 | + |
5840 | +/* |
5841 | + Error codes reported in when trying to test for a new policy |
5842 | + These error codes are reported in an array of tuples where |
5843 | + each error code is followed by a parameter describing the error |
5844 | + more closely, such as a domain id. |
5845 | +*/ |
5846 | +#define ACM_EVTCHN_SHARING_VIOLATION 0x100 |
5847 | +#define ACM_GNTTAB_SHARING_VIOLATION 0x101 |
5848 | +#define ACM_DOMAIN_LOOKUP 0x102 |
5849 | +#define ACM_CHWALL_CONFLICT 0x103 |
5850 | +#define ACM_SSIDREF_IN_USE 0x104 |
5851 | + |
5852 | + |
5853 | +/* primary policy in lower 4 bits */ |
5854 | +#define ACM_NULL_POLICY 0 |
5855 | +#define ACM_CHINESE_WALL_POLICY 1 |
5856 | +#define ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY 2 |
5857 | +#define ACM_POLICY_UNDEFINED 15 |
5858 | + |
5859 | +/* combinations have secondary policy component in higher 4bit */ |
5860 | +#define ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY \ |
5861 | + ((ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY << 4) | ACM_CHINESE_WALL_POLICY) |
5862 | + |
5863 | +/* policy: */ |
5864 | +#define ACM_POLICY_NAME(X) \ |
5865 | + ((X) == (ACM_NULL_POLICY)) ? "NULL" : \ |
5866 | + ((X) == (ACM_CHINESE_WALL_POLICY)) ? "CHINESE WALL" : \ |
5867 | + ((X) == (ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "SIMPLE TYPE ENFORCEMENT" : \ |
5868 | + ((X) == (ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "CHINESE WALL AND SIMPLE TYPE ENFORCEMENT" : \ |
5869 | + "UNDEFINED" |
5870 | + |
5871 | +/* the following policy versions must be increased |
5872 | + * whenever the interpretation of the related |
5873 | + * policy's data structure changes |
5874 | + */ |
5875 | +#define ACM_POLICY_VERSION 3 |
5876 | +#define ACM_CHWALL_VERSION 1 |
5877 | +#define ACM_STE_VERSION 1 |
5878 | + |
5879 | +/* defines a ssid reference used by xen */ |
5880 | +typedef uint32_t ssidref_t; |
5881 | + |
5882 | +/* hooks that are known to domains */ |
5883 | +#define ACMHOOK_none 0 |
5884 | +#define ACMHOOK_sharing 1 |
5885 | +#define ACMHOOK_authorization 2 |
5886 | + |
5887 | +/* -------security policy relevant type definitions-------- */ |
5888 | + |
5889 | +/* type identifier; compares to "equal" or "not equal" */ |
5890 | +typedef uint16_t domaintype_t; |
5891 | + |
5892 | +/* CHINESE WALL POLICY DATA STRUCTURES |
5893 | + * |
5894 | + * current accumulated conflict type set: |
5895 | + * When a domain is started and has a type that is in |
5896 | + * a conflict set, the conflicting types are incremented in |
5897 | + * the aggregate set. When a domain is destroyed, the |
5898 | + * conflicting types to its type are decremented. |
5899 | + * If a domain has multiple types, this procedure works over |
5900 | + * all those types. |
5901 | + * |
5902 | + * conflict_aggregate_set[i] holds the number of |
5903 | + * running domains that have a conflict with type i. |
5904 | + * |
5905 | + * running_types[i] holds the number of running domains |
5906 | + * that include type i in their ssidref-referenced type set |
5907 | + * |
5908 | + * conflict_sets[i][j] is "0" if type j has no conflict |
5909 | + * with type i and is "1" otherwise. |
5910 | + */ |
5911 | +/* high-16 = version, low-16 = check magic */ |
5912 | +#define ACM_MAGIC 0x0001debc |
5913 | + |
5914 | +/* each offset in bytes from start of the struct they |
5915 | + * are part of */ |
5916 | + |
5917 | +/* V3 of the policy buffer aded a version structure */ |
5918 | +struct acm_policy_version |
5919 | +{ |
5920 | + uint32_t major; |
5921 | + uint32_t minor; |
5922 | +}; |
5923 | + |
5924 | + |
5925 | +/* each buffer consists of all policy information for |
5926 | + * the respective policy given in the policy code |
5927 | + * |
5928 | + * acm_policy_buffer, acm_chwall_policy_buffer, |
5929 | + * and acm_ste_policy_buffer need to stay 32-bit aligned |
5930 | + * because we create binary policies also with external |
5931 | + * tools that assume packed representations (e.g. the java tool) |
5932 | + */ |
5933 | +struct acm_policy_buffer { |
5934 | + uint32_t magic; |
5935 | + uint32_t policy_version; /* ACM_POLICY_VERSION */ |
5936 | + uint32_t len; |
5937 | + uint32_t policy_reference_offset; |
5938 | + uint32_t primary_policy_code; |
5939 | + uint32_t primary_buffer_offset; |
5940 | + uint32_t secondary_policy_code; |
5941 | + uint32_t secondary_buffer_offset; |
5942 | + struct acm_policy_version xml_pol_version; /* add in V3 */ |
5943 | +}; |
5944 | + |
5945 | + |
5946 | +struct acm_policy_reference_buffer { |
5947 | + uint32_t len; |
5948 | +}; |
5949 | + |
5950 | +struct acm_chwall_policy_buffer { |
5951 | + uint32_t policy_version; /* ACM_CHWALL_VERSION */ |
5952 | + uint32_t policy_code; |
5953 | + uint32_t chwall_max_types; |
5954 | + uint32_t chwall_max_ssidrefs; |
5955 | + uint32_t chwall_max_conflictsets; |
5956 | + uint32_t chwall_ssid_offset; |
5957 | + uint32_t chwall_conflict_sets_offset; |
5958 | + uint32_t chwall_running_types_offset; |
5959 | + uint32_t chwall_conflict_aggregate_offset; |
5960 | +}; |
5961 | + |
5962 | +struct acm_ste_policy_buffer { |
5963 | + uint32_t policy_version; /* ACM_STE_VERSION */ |
5964 | + uint32_t policy_code; |
5965 | + uint32_t ste_max_types; |
5966 | + uint32_t ste_max_ssidrefs; |
5967 | + uint32_t ste_ssid_offset; |
5968 | +}; |
5969 | + |
5970 | +struct acm_stats_buffer { |
5971 | + uint32_t magic; |
5972 | + uint32_t len; |
5973 | + uint32_t primary_policy_code; |
5974 | + uint32_t primary_stats_offset; |
5975 | + uint32_t secondary_policy_code; |
5976 | + uint32_t secondary_stats_offset; |
5977 | +}; |
5978 | + |
5979 | +struct acm_ste_stats_buffer { |
5980 | + uint32_t ec_eval_count; |
5981 | + uint32_t gt_eval_count; |
5982 | + uint32_t ec_denied_count; |
5983 | + uint32_t gt_denied_count; |
5984 | + uint32_t ec_cachehit_count; |
5985 | + uint32_t gt_cachehit_count; |
5986 | +}; |
5987 | + |
5988 | +struct acm_ssid_buffer { |
5989 | + uint32_t len; |
5990 | + ssidref_t ssidref; |
5991 | + uint32_t policy_reference_offset; |
5992 | + uint32_t primary_policy_code; |
5993 | + uint32_t primary_max_types; |
5994 | + uint32_t primary_types_offset; |
5995 | + uint32_t secondary_policy_code; |
5996 | + uint32_t secondary_max_types; |
5997 | + uint32_t secondary_types_offset; |
5998 | +}; |
5999 | + |
6000 | +#endif |
6001 | + |
6002 | +/* |
6003 | + * Local variables: |
6004 | + * mode: C |
6005 | + * c-set-style: "BSD" |
6006 | + * c-basic-offset: 4 |
6007 | + * tab-width: 4 |
6008 | + * indent-tabs-mode: nil |
6009 | + * End: |
6010 | + */ |
6011 | Index: head-2008-04-15/include/xen/interface/xsm/acm_ops.h |
6012 | =================================================================== |
6013 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
6014 | +++ head-2008-04-15/include/xen/interface/xsm/acm_ops.h 2007-10-22 13:39:15.000000000 +0200 |
6015 | @@ -0,0 +1,159 @@ |
6016 | +/* |
6017 | + * acm_ops.h: Xen access control module hypervisor commands |
6018 | + * |
6019 | + * Permission is hereby granted, free of charge, to any person obtaining a copy |
6020 | + * of this software and associated documentation files (the "Software"), to |
6021 | + * deal in the Software without restriction, including without limitation the |
6022 | + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
6023 | + * sell copies of the Software, and to permit persons to whom the Software is |
6024 | + * furnished to do so, subject to the following conditions: |
6025 | + * |
6026 | + * The above copyright notice and this permission notice shall be included in |
6027 | + * all copies or substantial portions of the Software. |
6028 | + * |
6029 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
6030 | + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
6031 | + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
6032 | + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
6033 | + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
6034 | + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
6035 | + * DEALINGS IN THE SOFTWARE. |
6036 | + * |
6037 | + * Reiner Sailer <sailer@watson.ibm.com> |
6038 | + * Copyright (c) 2005,2006 International Business Machines Corporation. |
6039 | + */ |
6040 | + |
6041 | +#ifndef __XEN_PUBLIC_ACM_OPS_H__ |
6042 | +#define __XEN_PUBLIC_ACM_OPS_H__ |
6043 | + |
6044 | +#include "../xen.h" |
6045 | +#include "acm.h" |
6046 | + |
6047 | +/* |
6048 | + * Make sure you increment the interface version whenever you modify this file! |
6049 | + * This makes sure that old versions of acm tools will stop working in a |
6050 | + * well-defined way (rather than crashing the machine, for instance). |
6051 | + */ |
6052 | +#define ACM_INTERFACE_VERSION 0xAAAA000A |
6053 | + |
6054 | +/************************************************************************/ |
6055 | + |
6056 | +/* |
6057 | + * Prototype for this hypercall is: |
6058 | + * int acm_op(int cmd, void *args) |
6059 | + * @cmd == ACMOP_??? (access control module operation). |
6060 | + * @args == Operation-specific extra arguments (NULL if none). |
6061 | + */ |
6062 | + |
6063 | + |
6064 | +#define ACMOP_setpolicy 1 |
6065 | +struct acm_setpolicy { |
6066 | + /* IN */ |
6067 | + XEN_GUEST_HANDLE_64(void) pushcache; |
6068 | + uint32_t pushcache_size; |
6069 | +}; |
6070 | + |
6071 | + |
6072 | +#define ACMOP_getpolicy 2 |
6073 | +struct acm_getpolicy { |
6074 | + /* IN */ |
6075 | + XEN_GUEST_HANDLE_64(void) pullcache; |
6076 | + uint32_t pullcache_size; |
6077 | +}; |
6078 | + |
6079 | + |
6080 | +#define ACMOP_dumpstats 3 |
6081 | +struct acm_dumpstats { |
6082 | + /* IN */ |
6083 | + XEN_GUEST_HANDLE_64(void) pullcache; |
6084 | + uint32_t pullcache_size; |
6085 | +}; |
6086 | + |
6087 | + |
6088 | +#define ACMOP_getssid 4 |
6089 | +#define ACM_GETBY_ssidref 1 |
6090 | +#define ACM_GETBY_domainid 2 |
6091 | +struct acm_getssid { |
6092 | + /* IN */ |
6093 | + uint32_t get_ssid_by; /* ACM_GETBY_* */ |
6094 | + union { |
6095 | + domaintype_t domainid; |
6096 | + ssidref_t ssidref; |
6097 | + } id; |
6098 | + XEN_GUEST_HANDLE_64(void) ssidbuf; |
6099 | + uint32_t ssidbuf_size; |
6100 | +}; |
6101 | + |
6102 | +#define ACMOP_getdecision 5 |
6103 | +struct acm_getdecision { |
6104 | + /* IN */ |
6105 | + uint32_t get_decision_by1; /* ACM_GETBY_* */ |
6106 | + uint32_t get_decision_by2; /* ACM_GETBY_* */ |
6107 | + union { |
6108 | + domaintype_t domainid; |
6109 | + ssidref_t ssidref; |
6110 | + } id1; |
6111 | + union { |
6112 | + domaintype_t domainid; |
6113 | + ssidref_t ssidref; |
6114 | + } id2; |
6115 | + uint32_t hook; |
6116 | + /* OUT */ |
6117 | + uint32_t acm_decision; |
6118 | +}; |
6119 | + |
6120 | + |
6121 | +#define ACMOP_chgpolicy 6 |
6122 | +struct acm_change_policy { |
6123 | + /* IN */ |
6124 | + XEN_GUEST_HANDLE_64(void) policy_pushcache; |
6125 | + uint32_t policy_pushcache_size; |
6126 | + XEN_GUEST_HANDLE_64(void) del_array; |
6127 | + uint32_t delarray_size; |
6128 | + XEN_GUEST_HANDLE_64(void) chg_array; |
6129 | + uint32_t chgarray_size; |
6130 | + /* OUT */ |
6131 | + /* array with error code */ |
6132 | + XEN_GUEST_HANDLE_64(void) err_array; |
6133 | + uint32_t errarray_size; |
6134 | +}; |
6135 | + |
6136 | +#define ACMOP_relabeldoms 7 |
6137 | +struct acm_relabel_doms { |
6138 | + /* IN */ |
6139 | + XEN_GUEST_HANDLE_64(void) relabel_map; |
6140 | + uint32_t relabel_map_size; |
6141 | + /* OUT */ |
6142 | + XEN_GUEST_HANDLE_64(void) err_array; |
6143 | + uint32_t errarray_size; |
6144 | +}; |
6145 | + |
6146 | +/* future interface to Xen */ |
6147 | +struct xen_acmctl { |
6148 | + uint32_t cmd; |
6149 | + uint32_t interface_version; |
6150 | + union { |
6151 | + struct acm_setpolicy setpolicy; |
6152 | + struct acm_getpolicy getpolicy; |
6153 | + struct acm_dumpstats dumpstats; |
6154 | + struct acm_getssid getssid; |
6155 | + struct acm_getdecision getdecision; |
6156 | + struct acm_change_policy change_policy; |
6157 | + struct acm_relabel_doms relabel_doms; |
6158 | + } u; |
6159 | +}; |
6160 | + |
6161 | +typedef struct xen_acmctl xen_acmctl_t; |
6162 | +DEFINE_XEN_GUEST_HANDLE(xen_acmctl_t); |
6163 | + |
6164 | +#endif /* __XEN_PUBLIC_ACM_OPS_H__ */ |
6165 | + |
6166 | +/* |
6167 | + * Local variables: |
6168 | + * mode: C |
6169 | + * c-set-style: "BSD" |
6170 | + * c-basic-offset: 4 |
6171 | + * tab-width: 4 |
6172 | + * indent-tabs-mode: nil |
6173 | + * End: |
6174 | + */ |
6175 | Index: head-2008-04-15/include/xen/interface/xsm/flask_op.h |
6176 | =================================================================== |
6177 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 |
6178 | +++ head-2008-04-15/include/xen/interface/xsm/flask_op.h 2007-10-22 13:39:15.000000000 +0200 |
6179 | @@ -0,0 +1,43 @@ |
6180 | +/* |
6181 | + * This file contains the flask_op hypercall commands and definitions. |
6182 | + * |
6183 | + * Author: George Coker, <gscoker@alpha.ncsc.mil> |
6184 | + * |
6185 | + * This program is free software; you can redistribute it and/or modify |
6186 | + * it under the terms of the GNU General Public License version 2, |
6187 | + * as published by the Free Software Foundation. |
6188 | + */ |
6189 | + |
6190 | +#ifndef __FLASK_OP_H__ |
6191 | +#define __FLASK_OP_H__ |
6192 | + |
6193 | +#define FLASK_LOAD 1 |
6194 | +#define FLASK_GETENFORCE 2 |
6195 | +#define FLASK_SETENFORCE 3 |
6196 | +#define FLASK_CONTEXT_TO_SID 4 |
6197 | +#define FLASK_SID_TO_CONTEXT 5 |
6198 | +#define FLASK_ACCESS 6 |
6199 | +#define FLASK_CREATE 7 |
6200 | +#define FLASK_RELABEL 8 |
6201 | +#define FLASK_USER 9 |
6202 | +#define FLASK_POLICYVERS 10 |
6203 | +#define FLASK_GETBOOL 11 |
6204 | +#define FLASK_SETBOOL 12 |
6205 | +#define FLASK_COMMITBOOLS 13 |
6206 | +#define FLASK_MLS 14 |
6207 | +#define FLASK_DISABLE 15 |
6208 | +#define FLASK_GETAVC_THRESHOLD 16 |
6209 | +#define FLASK_SETAVC_THRESHOLD 17 |
6210 | +#define FLASK_AVC_HASHSTATS 18 |
6211 | +#define FLASK_AVC_CACHESTATS 19 |
6212 | +#define FLASK_MEMBER 20 |
6213 | + |
6214 | +typedef struct flask_op { |
6215 | + int cmd; |
6216 | + int size; |
6217 | + char *buf; |
6218 | +} flask_op_t; |
6219 | + |
6220 | +DEFINE_XEN_GUEST_HANDLE(flask_op_t); |
6221 | + |
6222 | +#endif |