Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1009-2.6.25-xen-auto-include-xen-interface.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 609 - (show annotations) (download)
Fri May 23 17:35:37 2008 UTC (15 years, 11 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