]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.xen/xen3-auto-include-xen-interface.diff
Add a patch to fix Intel E100 wake-on-lan problems.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.xen / xen3-auto-include-xen-interface.diff
CommitLineData
6a930a95
BS
1Subject: xen3 include-xen-interface
2From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 728:832aac894efd)
3Patch-mainline: obsolete
4Acked-by: jbeulich@novell.com
5
6Index: head-2008-11-25/include/xen/interface/COPYING
7===================================================================
8--- /dev/null 1970-01-01 00:00:00.000000000 +0000
9+++ head-2008-11-25/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.
49Index: head-2008-11-25/include/xen/interface/arch-x86/cpuid.h
50===================================================================
51--- /dev/null 1970-01-01 00:00:00.000000000 +0000
52+++ head-2008-11-25/include/xen/interface/arch-x86/cpuid.h 2008-01-21 11:15:27.000000000 +0100
53@@ -0,0 +1,68 @@
54+/******************************************************************************
55+ * arch-x86/cpuid.h
56+ *
57+ * CPUID interface to Xen.
58+ *
59+ * Permission is hereby granted, free of charge, to any person obtaining a copy
60+ * of this software and associated documentation files (the "Software"), to
61+ * deal in the Software without restriction, including without limitation the
62+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
63+ * sell copies of the Software, and to permit persons to whom the Software is
64+ * furnished to do so, subject to the following conditions:
65+ *
66+ * The above copyright notice and this permission notice shall be included in
67+ * all copies or substantial portions of the Software.
68+ *
69+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
70+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
71+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
72+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
73+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
74+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
75+ * DEALINGS IN THE SOFTWARE.
76+ *
77+ * Copyright (c) 2007 Citrix Systems, Inc.
78+ *
79+ * Authors:
80+ * Keir Fraser <keir.fraser@citrix.com>
81+ */
82+
83+#ifndef __XEN_PUBLIC_ARCH_X86_CPUID_H__
84+#define __XEN_PUBLIC_ARCH_X86_CPUID_H__
85+
86+/* Xen identification leaves start at 0x40000000. */
87+#define XEN_CPUID_FIRST_LEAF 0x40000000
88+#define XEN_CPUID_LEAF(i) (XEN_CPUID_FIRST_LEAF + (i))
89+
90+/*
91+ * Leaf 1 (0x40000000)
92+ * EAX: Largest Xen-information leaf. All leaves up to an including @EAX
93+ * are supported by the Xen host.
94+ * EBX-EDX: "XenVMMXenVMM" signature, allowing positive identification
95+ * of a Xen host.
96+ */
97+#define XEN_CPUID_SIGNATURE_EBX 0x566e6558 /* "XenV" */
98+#define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */
99+#define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */
100+
101+/*
102+ * Leaf 2 (0x40000001)
103+ * EAX[31:16]: Xen major version.
104+ * EAX[15: 0]: Xen minor version.
105+ * EBX-EDX: Reserved (currently all zeroes).
106+ */
107+
108+/*
109+ * Leaf 3 (0x40000002)
110+ * EAX: Number of hypercall transfer pages. This register is always guaranteed
111+ * to specify one hypercall page.
112+ * EBX: Base address of Xen-specific MSRs.
113+ * ECX: Features 1. Unused bits are set to zero.
114+ * EDX: Features 2. Unused bits are set to zero.
115+ */
116+
117+/* Does the host support MMU_PT_UPDATE_PRESERVE_AD for this guest? */
118+#define _XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD 0
119+#define XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD (1u<<0)
120+
121+#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */
122Index: head-2008-11-25/include/xen/interface/arch-x86/hvm/save.h
123===================================================================
124--- /dev/null 1970-01-01 00:00:00.000000000 +0000
125+++ head-2008-11-25/include/xen/interface/arch-x86/hvm/save.h 2008-10-29 09:55:56.000000000 +0100
126@@ -0,0 +1,440 @@
127+/*
128+ * Structure definitions for HVM state that is held by Xen and must
129+ * be saved along with the domain's memory and device-model state.
130+ *
131+ * Copyright (c) 2007 XenSource Ltd.
132+ *
133+ * Permission is hereby granted, free of charge, to any person obtaining a copy
134+ * of this software and associated documentation files (the "Software"), to
135+ * deal in the Software without restriction, including without limitation the
136+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
137+ * sell copies of the Software, and to permit persons to whom the Software is
138+ * furnished to do so, subject to the following conditions:
139+ *
140+ * The above copyright notice and this permission notice shall be included in
141+ * all copies or substantial portions of the Software.
142+ *
143+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
144+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
145+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
146+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
147+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
148+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
149+ * DEALINGS IN THE SOFTWARE.
150+ */
151+
152+#ifndef __XEN_PUBLIC_HVM_SAVE_X86_H__
153+#define __XEN_PUBLIC_HVM_SAVE_X86_H__
154+
155+/*
156+ * Save/restore header: general info about the save file.
157+ */
158+
159+#define HVM_FILE_MAGIC 0x54381286
160+#define HVM_FILE_VERSION 0x00000001
161+
162+struct hvm_save_header {
163+ uint32_t magic; /* Must be HVM_FILE_MAGIC */
164+ uint32_t version; /* File format version */
165+ uint64_t changeset; /* Version of Xen that saved this file */
166+ uint32_t cpuid; /* CPUID[0x01][%eax] on the saving machine */
167+ uint32_t pad0;
168+};
169+
170+DECLARE_HVM_SAVE_TYPE(HEADER, 1, struct hvm_save_header);
171+
172+
173+/*
174+ * Processor
175+ */
176+
177+struct hvm_hw_cpu {
178+ uint8_t fpu_regs[512];
179+
180+ uint64_t rax;
181+ uint64_t rbx;
182+ uint64_t rcx;
183+ uint64_t rdx;
184+ uint64_t rbp;
185+ uint64_t rsi;
186+ uint64_t rdi;
187+ uint64_t rsp;
188+ uint64_t r8;
189+ uint64_t r9;
190+ uint64_t r10;
191+ uint64_t r11;
192+ uint64_t r12;
193+ uint64_t r13;
194+ uint64_t r14;
195+ uint64_t r15;
196+
197+ uint64_t rip;
198+ uint64_t rflags;
199+
200+ uint64_t cr0;
201+ uint64_t cr2;
202+ uint64_t cr3;
203+ uint64_t cr4;
204+
205+ uint64_t dr0;
206+ uint64_t dr1;
207+ uint64_t dr2;
208+ uint64_t dr3;
209+ uint64_t dr6;
210+ uint64_t dr7;
211+
212+ uint32_t cs_sel;
213+ uint32_t ds_sel;
214+ uint32_t es_sel;
215+ uint32_t fs_sel;
216+ uint32_t gs_sel;
217+ uint32_t ss_sel;
218+ uint32_t tr_sel;
219+ uint32_t ldtr_sel;
220+
221+ uint32_t cs_limit;
222+ uint32_t ds_limit;
223+ uint32_t es_limit;
224+ uint32_t fs_limit;
225+ uint32_t gs_limit;
226+ uint32_t ss_limit;
227+ uint32_t tr_limit;
228+ uint32_t ldtr_limit;
229+ uint32_t idtr_limit;
230+ uint32_t gdtr_limit;
231+
232+ uint64_t cs_base;
233+ uint64_t ds_base;
234+ uint64_t es_base;
235+ uint64_t fs_base;
236+ uint64_t gs_base;
237+ uint64_t ss_base;
238+ uint64_t tr_base;
239+ uint64_t ldtr_base;
240+ uint64_t idtr_base;
241+ uint64_t gdtr_base;
242+
243+ uint32_t cs_arbytes;
244+ uint32_t ds_arbytes;
245+ uint32_t es_arbytes;
246+ uint32_t fs_arbytes;
247+ uint32_t gs_arbytes;
248+ uint32_t ss_arbytes;
249+ uint32_t tr_arbytes;
250+ uint32_t ldtr_arbytes;
251+
252+ uint32_t sysenter_cs;
253+ uint32_t padding0;
254+
255+ uint64_t sysenter_esp;
256+ uint64_t sysenter_eip;
257+
258+ /* msr for em64t */
259+ uint64_t shadow_gs;
260+
261+ /* msr content saved/restored. */
262+ uint64_t msr_flags;
263+ uint64_t msr_lstar;
264+ uint64_t msr_star;
265+ uint64_t msr_cstar;
266+ uint64_t msr_syscall_mask;
267+ uint64_t msr_efer;
268+
269+ /* guest's idea of what rdtsc() would return */
270+ uint64_t tsc;
271+
272+ /* pending event, if any */
273+ union {
274+ uint32_t pending_event;
275+ struct {
276+ uint8_t pending_vector:8;
277+ uint8_t pending_type:3;
278+ uint8_t pending_error_valid:1;
279+ uint32_t pending_reserved:19;
280+ uint8_t pending_valid:1;
281+ };
282+ };
283+ /* error code for pending event */
284+ uint32_t error_code;
285+};
286+
287+DECLARE_HVM_SAVE_TYPE(CPU, 2, struct hvm_hw_cpu);
288+
289+
290+/*
291+ * PIC
292+ */
293+
294+struct hvm_hw_vpic {
295+ /* IR line bitmasks. */
296+ uint8_t irr;
297+ uint8_t imr;
298+ uint8_t isr;
299+
300+ /* Line IRx maps to IRQ irq_base+x */
301+ uint8_t irq_base;
302+
303+ /*
304+ * Where are we in ICW2-4 initialisation (0 means no init in progress)?
305+ * Bits 0-1 (=x): Next write at A=1 sets ICW(x+1).
306+ * Bit 2: ICW1.IC4 (1 == ICW4 included in init sequence)
307+ * Bit 3: ICW1.SNGL (0 == ICW3 included in init sequence)
308+ */
309+ uint8_t init_state:4;
310+
311+ /* IR line with highest priority. */
312+ uint8_t priority_add:4;
313+
314+ /* Reads from A=0 obtain ISR or IRR? */
315+ uint8_t readsel_isr:1;
316+
317+ /* Reads perform a polling read? */
318+ uint8_t poll:1;
319+
320+ /* Automatically clear IRQs from the ISR during INTA? */
321+ uint8_t auto_eoi:1;
322+
323+ /* Automatically rotate IRQ priorities during AEOI? */
324+ uint8_t rotate_on_auto_eoi:1;
325+
326+ /* Exclude slave inputs when considering in-service IRQs? */
327+ uint8_t special_fully_nested_mode:1;
328+
329+ /* Special mask mode excludes masked IRs from AEOI and priority checks. */
330+ uint8_t special_mask_mode:1;
331+
332+ /* Is this a master PIC or slave PIC? (NB. This is not programmable.) */
333+ uint8_t is_master:1;
334+
335+ /* Edge/trigger selection. */
336+ uint8_t elcr;
337+
338+ /* Virtual INT output. */
339+ uint8_t int_output;
340+};
341+
342+DECLARE_HVM_SAVE_TYPE(PIC, 3, struct hvm_hw_vpic);
343+
344+
345+/*
346+ * IO-APIC
347+ */
348+
349+#ifdef __ia64__
350+#define VIOAPIC_IS_IOSAPIC 1
351+#define VIOAPIC_NUM_PINS 24
352+#else
353+#define VIOAPIC_NUM_PINS 48 /* 16 ISA IRQs, 32 non-legacy PCI IRQS. */
354+#endif
355+
356+struct hvm_hw_vioapic {
357+ uint64_t base_address;
358+ uint32_t ioregsel;
359+ uint32_t id;
360+ union vioapic_redir_entry
361+ {
362+ uint64_t bits;
363+ struct {
364+ uint8_t vector;
365+ uint8_t delivery_mode:3;
366+ uint8_t dest_mode:1;
367+ uint8_t delivery_status:1;
368+ uint8_t polarity:1;
369+ uint8_t remote_irr:1;
370+ uint8_t trig_mode:1;
371+ uint8_t mask:1;
372+ uint8_t reserve:7;
373+#if !VIOAPIC_IS_IOSAPIC
374+ uint8_t reserved[4];
375+ uint8_t dest_id;
376+#else
377+ uint8_t reserved[3];
378+ uint16_t dest_id;
379+#endif
380+ } fields;
381+ } redirtbl[VIOAPIC_NUM_PINS];
382+};
383+
384+DECLARE_HVM_SAVE_TYPE(IOAPIC, 4, struct hvm_hw_vioapic);
385+
386+
387+/*
388+ * LAPIC
389+ */
390+
391+struct hvm_hw_lapic {
392+ uint64_t apic_base_msr;
393+ uint32_t disabled; /* VLAPIC_xx_DISABLED */
394+ uint32_t timer_divisor;
395+};
396+
397+DECLARE_HVM_SAVE_TYPE(LAPIC, 5, struct hvm_hw_lapic);
398+
399+struct hvm_hw_lapic_regs {
400+ uint8_t data[1024];
401+};
402+
403+DECLARE_HVM_SAVE_TYPE(LAPIC_REGS, 6, struct hvm_hw_lapic_regs);
404+
405+
406+/*
407+ * IRQs
408+ */
409+
410+struct hvm_hw_pci_irqs {
411+ /*
412+ * Virtual interrupt wires for a single PCI bus.
413+ * Indexed by: device*4 + INTx#.
414+ */
415+ union {
416+ DECLARE_BITMAP(i, 32*4);
417+ uint64_t pad[2];
418+ };
419+};
420+
421+DECLARE_HVM_SAVE_TYPE(PCI_IRQ, 7, struct hvm_hw_pci_irqs);
422+
423+struct hvm_hw_isa_irqs {
424+ /*
425+ * Virtual interrupt wires for ISA devices.
426+ * Indexed by ISA IRQ (assumes no ISA-device IRQ sharing).
427+ */
428+ union {
429+ DECLARE_BITMAP(i, 16);
430+ uint64_t pad[1];
431+ };
432+};
433+
434+DECLARE_HVM_SAVE_TYPE(ISA_IRQ, 8, struct hvm_hw_isa_irqs);
435+
436+struct hvm_hw_pci_link {
437+ /*
438+ * PCI-ISA interrupt router.
439+ * Each PCI <device:INTx#> is 'wire-ORed' into one of four links using
440+ * the traditional 'barber's pole' mapping ((device + INTx#) & 3).
441+ * The router provides a programmable mapping from each link to a GSI.
442+ */
443+ uint8_t route[4];
444+ uint8_t pad0[4];
445+};
446+
447+DECLARE_HVM_SAVE_TYPE(PCI_LINK, 9, struct hvm_hw_pci_link);
448+
449+/*
450+ * PIT
451+ */
452+
453+struct hvm_hw_pit {
454+ struct hvm_hw_pit_channel {
455+ uint32_t count; /* can be 65536 */
456+ uint16_t latched_count;
457+ uint8_t count_latched;
458+ uint8_t status_latched;
459+ uint8_t status;
460+ uint8_t read_state;
461+ uint8_t write_state;
462+ uint8_t write_latch;
463+ uint8_t rw_mode;
464+ uint8_t mode;
465+ uint8_t bcd; /* not supported */
466+ uint8_t gate; /* timer start */
467+ } channels[3]; /* 3 x 16 bytes */
468+ uint32_t speaker_data_on;
469+ uint32_t pad0;
470+};
471+
472+DECLARE_HVM_SAVE_TYPE(PIT, 10, struct hvm_hw_pit);
473+
474+
475+/*
476+ * RTC
477+ */
478+
479+#define RTC_CMOS_SIZE 14
480+struct hvm_hw_rtc {
481+ /* CMOS bytes */
482+ uint8_t cmos_data[RTC_CMOS_SIZE];
483+ /* Index register for 2-part operations */
484+ uint8_t cmos_index;
485+ uint8_t pad0;
486+};
487+
488+DECLARE_HVM_SAVE_TYPE(RTC, 11, struct hvm_hw_rtc);
489+
490+
491+/*
492+ * HPET
493+ */
494+
495+#define HPET_TIMER_NUM 3 /* 3 timers supported now */
496+struct hvm_hw_hpet {
497+ /* Memory-mapped, software visible registers */
498+ uint64_t capability; /* capabilities */
499+ uint64_t res0; /* reserved */
500+ uint64_t config; /* configuration */
501+ uint64_t res1; /* reserved */
502+ uint64_t isr; /* interrupt status reg */
503+ uint64_t res2[25]; /* reserved */
504+ uint64_t mc64; /* main counter */
505+ uint64_t res3; /* reserved */
506+ struct { /* timers */
507+ uint64_t config; /* configuration/cap */
508+ uint64_t cmp; /* comparator */
509+ uint64_t fsb; /* FSB route, not supported now */
510+ uint64_t res4; /* reserved */
511+ } timers[HPET_TIMER_NUM];
512+ uint64_t res5[4*(24-HPET_TIMER_NUM)]; /* reserved, up to 0x3ff */
513+
514+ /* Hidden register state */
515+ uint64_t period[HPET_TIMER_NUM]; /* Last value written to comparator */
516+};
517+
518+DECLARE_HVM_SAVE_TYPE(HPET, 12, struct hvm_hw_hpet);
519+
520+
521+/*
522+ * PM timer
523+ */
524+
525+struct hvm_hw_pmtimer {
526+ uint32_t tmr_val; /* PM_TMR_BLK.TMR_VAL: 32bit free-running counter */
527+ uint16_t pm1a_sts; /* PM1a_EVT_BLK.PM1a_STS: status register */
528+ uint16_t pm1a_en; /* PM1a_EVT_BLK.PM1a_EN: enable register */
529+};
530+
531+DECLARE_HVM_SAVE_TYPE(PMTIMER, 13, struct hvm_hw_pmtimer);
532+
533+/*
534+ * MTRR MSRs
535+ */
536+
537+struct hvm_hw_mtrr {
538+#define MTRR_VCNT 8
539+#define NUM_FIXED_MSR 11
540+ uint64_t msr_pat_cr;
541+ /* mtrr physbase & physmask msr pair*/
542+ uint64_t msr_mtrr_var[MTRR_VCNT*2];
543+ uint64_t msr_mtrr_fixed[NUM_FIXED_MSR];
544+ uint64_t msr_mtrr_cap;
545+ uint64_t msr_mtrr_def_type;
546+};
547+
548+DECLARE_HVM_SAVE_TYPE(MTRR, 14, struct hvm_hw_mtrr);
549+
550+/*
551+ * Viridian hypervisor context.
552+ */
553+
554+struct hvm_viridian_context {
555+ uint64_t hypercall_gpa;
556+ uint64_t guest_os_id;
557+};
558+
559+DECLARE_HVM_SAVE_TYPE(VIRIDIAN, 15, struct hvm_viridian_context);
560+
561+/*
562+ * Largest type-code in use
563+ */
564+#define HVM_SAVE_CODE_MAX 15
565+
566+#endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */
567Index: head-2008-11-25/include/xen/interface/arch-x86/xen-mca.h
568===================================================================
569--- /dev/null 1970-01-01 00:00:00.000000000 +0000
570+++ head-2008-11-25/include/xen/interface/arch-x86/xen-mca.h 2008-09-01 12:07:31.000000000 +0200
571@@ -0,0 +1,279 @@
572+/******************************************************************************
573+ * arch-x86/mca.h
574+ *
575+ * Contributed by Advanced Micro Devices, Inc.
576+ * Author: Christoph Egger <Christoph.Egger@amd.com>
577+ *
578+ * Guest OS machine check interface to x86 Xen.
579+ *
580+ * Permission is hereby granted, free of charge, to any person obtaining a copy
581+ * of this software and associated documentation files (the "Software"), to
582+ * deal in the Software without restriction, including without limitation the
583+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
584+ * sell copies of the Software, and to permit persons to whom the Software is
585+ * furnished to do so, subject to the following conditions:
586+ *
587+ * The above copyright notice and this permission notice shall be included in
588+ * all copies or substantial portions of the Software.
589+ *
590+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
591+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
592+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
593+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
594+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
595+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
596+ * DEALINGS IN THE SOFTWARE.
597+ */
598+
599+/* Full MCA functionality has the following Usecases from the guest side:
600+ *
601+ * Must have's:
602+ * 1. Dom0 and DomU register machine check trap callback handlers
603+ * (already done via "set_trap_table" hypercall)
604+ * 2. Dom0 registers machine check event callback handler
605+ * (doable via EVTCHNOP_bind_virq)
606+ * 3. Dom0 and DomU fetches machine check data
607+ * 4. Dom0 wants Xen to notify a DomU
608+ * 5. Dom0 gets DomU ID from physical address
609+ * 6. Dom0 wants Xen to kill DomU (already done for "xm destroy")
610+ *
611+ * Nice to have's:
612+ * 7. Dom0 wants Xen to deactivate a physical CPU
613+ * This is better done as separate task, physical CPU hotplugging,
614+ * and hypercall(s) should be sysctl's
615+ * 8. Page migration proposed from Xen NUMA work, where Dom0 can tell Xen to
616+ * move a DomU (or Dom0 itself) away from a malicious page
617+ * producing correctable errors.
618+ * 9. offlining physical page:
619+ * Xen free's and never re-uses a certain physical page.
620+ * 10. Testfacility: Allow Dom0 to write values into machine check MSR's
621+ * and tell Xen to trigger a machine check
622+ */
623+
624+#ifndef __XEN_PUBLIC_ARCH_X86_MCA_H__
625+#define __XEN_PUBLIC_ARCH_X86_MCA_H__
626+
627+/* Hypercall */
628+#define __HYPERVISOR_mca __HYPERVISOR_arch_0
629+
630+#define XEN_MCA_INTERFACE_VERSION 0x03000001
631+
632+/* IN: Dom0 calls hypercall from MC event handler. */
633+#define XEN_MC_CORRECTABLE 0x0
634+/* IN: Dom0/DomU calls hypercall from MC trap handler. */
635+#define XEN_MC_TRAP 0x1
636+/* XEN_MC_CORRECTABLE and XEN_MC_TRAP are mutually exclusive. */
637+
638+/* OUT: All is ok */
639+#define XEN_MC_OK 0x0
640+/* OUT: Domain could not fetch data. */
641+#define XEN_MC_FETCHFAILED 0x1
642+/* OUT: There was no machine check data to fetch. */
643+#define XEN_MC_NODATA 0x2
644+/* OUT: Between notification time and this hypercall an other
645+ * (most likely) correctable error happened. The fetched data,
646+ * does not match the original machine check data. */
647+#define XEN_MC_NOMATCH 0x4
648+
649+/* OUT: DomU did not register MC NMI handler. Try something else. */
650+#define XEN_MC_CANNOTHANDLE 0x8
651+/* OUT: Notifying DomU failed. Retry later or try something else. */
652+#define XEN_MC_NOTDELIVERED 0x10
653+/* Note, XEN_MC_CANNOTHANDLE and XEN_MC_NOTDELIVERED are mutually exclusive. */
654+
655+
656+#ifndef __ASSEMBLY__
657+
658+#define VIRQ_MCA VIRQ_ARCH_0 /* G. (DOM0) Machine Check Architecture */
659+
660+/*
661+ * Machine Check Architecure:
662+ * structs are read-only and used to report all kinds of
663+ * correctable and uncorrectable errors detected by the HW.
664+ * Dom0 and DomU: register a handler to get notified.
665+ * Dom0 only: Correctable errors are reported via VIRQ_MCA
666+ * Dom0 and DomU: Uncorrectable errors are reported via nmi handlers
667+ */
668+#define MC_TYPE_GLOBAL 0
669+#define MC_TYPE_BANK 1
670+#define MC_TYPE_EXTENDED 2
671+
672+struct mcinfo_common {
673+ uint16_t type; /* structure type */
674+ uint16_t size; /* size of this struct in bytes */
675+};
676+
677+
678+#define MC_FLAG_CORRECTABLE (1 << 0)
679+#define MC_FLAG_UNCORRECTABLE (1 << 1)
680+
681+/* contains global x86 mc information */
682+struct mcinfo_global {
683+ struct mcinfo_common common;
684+
685+ /* running domain at the time in error (most likely the impacted one) */
686+ uint16_t mc_domid;
687+ uint32_t mc_socketid; /* physical socket of the physical core */
688+ uint16_t mc_coreid; /* physical impacted core */
689+ uint16_t mc_core_threadid; /* core thread of physical core */
690+ uint16_t mc_vcpuid; /* virtual cpu scheduled for mc_domid */
691+ uint64_t mc_gstatus; /* global status */
692+ uint32_t mc_flags;
693+};
694+
695+/* contains bank local x86 mc information */
696+struct mcinfo_bank {
697+ struct mcinfo_common common;
698+
699+ uint16_t mc_bank; /* bank nr */
700+ uint16_t mc_domid; /* Usecase 5: domain referenced by mc_addr on dom0
701+ * and if mc_addr is valid. Never valid on DomU. */
702+ uint64_t mc_status; /* bank status */
703+ uint64_t mc_addr; /* bank address, only valid
704+ * if addr bit is set in mc_status */
705+ uint64_t mc_misc;
706+};
707+
708+
709+struct mcinfo_msr {
710+ uint64_t reg; /* MSR */
711+ uint64_t value; /* MSR value */
712+};
713+
714+/* contains mc information from other
715+ * or additional mc MSRs */
716+struct mcinfo_extended {
717+ struct mcinfo_common common;
718+
719+ /* You can fill up to five registers.
720+ * If you need more, then use this structure
721+ * multiple times. */
722+
723+ uint32_t mc_msrs; /* Number of msr with valid values. */
724+ struct mcinfo_msr mc_msr[5];
725+};
726+
727+#define MCINFO_HYPERCALLSIZE 1024
728+#define MCINFO_MAXSIZE 768
729+
730+struct mc_info {
731+ /* Number of mcinfo_* entries in mi_data */
732+ uint32_t mi_nentries;
733+
734+ uint8_t mi_data[MCINFO_MAXSIZE - sizeof(uint32_t)];
735+};
736+typedef struct mc_info mc_info_t;
737+
738+
739+
740+/*
741+ * OS's should use these instead of writing their own lookup function
742+ * each with its own bugs and drawbacks.
743+ * We use macros instead of static inline functions to allow guests
744+ * to include this header in assembly files (*.S).
745+ */
746+/* Prototype:
747+ * uint32_t x86_mcinfo_nentries(struct mc_info *mi);
748+ */
749+#define x86_mcinfo_nentries(_mi) \
750+ (_mi)->mi_nentries
751+/* Prototype:
752+ * struct mcinfo_common *x86_mcinfo_first(struct mc_info *mi);
753+ */
754+#define x86_mcinfo_first(_mi) \
755+ (struct mcinfo_common *)((_mi)->mi_data)
756+/* Prototype:
757+ * struct mcinfo_common *x86_mcinfo_next(struct mcinfo_common *mic);
758+ */
759+#define x86_mcinfo_next(_mic) \
760+ (struct mcinfo_common *)((uint8_t *)(_mic) + (_mic)->size)
761+
762+/* Prototype:
763+ * void x86_mcinfo_lookup(void *ret, struct mc_info *mi, uint16_t type);
764+ */
765+#define x86_mcinfo_lookup(_ret, _mi, _type) \
766+ do { \
767+ uint32_t found, i; \
768+ struct mcinfo_common *_mic; \
769+ \
770+ found = 0; \
771+ (_ret) = NULL; \
772+ if (_mi == NULL) break; \
773+ _mic = x86_mcinfo_first(_mi); \
774+ for (i = 0; i < x86_mcinfo_nentries(_mi); i++) { \
775+ if (_mic->type == (_type)) { \
776+ found = 1; \
777+ break; \
778+ } \
779+ _mic = x86_mcinfo_next(_mic); \
780+ } \
781+ (_ret) = found ? _mic : NULL; \
782+ } while (0)
783+
784+
785+/* Usecase 1
786+ * Register machine check trap callback handler
787+ * (already done via "set_trap_table" hypercall)
788+ */
789+
790+/* Usecase 2
791+ * Dom0 registers machine check event callback handler
792+ * done by EVTCHNOP_bind_virq
793+ */
794+
795+/* Usecase 3
796+ * Fetch machine check data from hypervisor.
797+ * Note, this hypercall is special, because both Dom0 and DomU must use this.
798+ */
799+#define XEN_MC_fetch 1
800+struct xen_mc_fetch {
801+ /* IN/OUT variables. */
802+ uint32_t flags;
803+
804+/* IN: XEN_MC_CORRECTABLE, XEN_MC_TRAP */
805+/* OUT: XEN_MC_OK, XEN_MC_FETCHFAILED, XEN_MC_NODATA, XEN_MC_NOMATCH */
806+
807+ /* OUT variables. */
808+ uint32_t fetch_idx; /* only useful for Dom0 for the notify hypercall */
809+ struct mc_info mc_info;
810+};
811+typedef struct xen_mc_fetch xen_mc_fetch_t;
812+DEFINE_XEN_GUEST_HANDLE(xen_mc_fetch_t);
813+
814+
815+/* Usecase 4
816+ * This tells the hypervisor to notify a DomU about the machine check error
817+ */
818+#define XEN_MC_notifydomain 2
819+struct xen_mc_notifydomain {
820+ /* IN variables. */
821+ uint16_t mc_domid; /* The unprivileged domain to notify. */
822+ uint16_t mc_vcpuid; /* The vcpu in mc_domid to notify.
823+ * Usually echo'd value from the fetch hypercall. */
824+ uint32_t fetch_idx; /* echo'd value from the fetch hypercall. */
825+
826+ /* IN/OUT variables. */
827+ uint32_t flags;
828+
829+/* IN: XEN_MC_CORRECTABLE, XEN_MC_TRAP */
830+/* OUT: XEN_MC_OK, XEN_MC_CANNOTHANDLE, XEN_MC_NOTDELIVERED, XEN_MC_NOMATCH */
831+};
832+typedef struct xen_mc_notifydomain xen_mc_notifydomain_t;
833+DEFINE_XEN_GUEST_HANDLE(xen_mc_notifydomain_t);
834+
835+
836+struct xen_mc {
837+ uint32_t cmd;
838+ uint32_t interface_version; /* XEN_MCA_INTERFACE_VERSION */
839+ union {
840+ struct xen_mc_fetch mc_fetch;
841+ struct xen_mc_notifydomain mc_notifydomain;
842+ uint8_t pad[MCINFO_HYPERCALLSIZE];
843+ } u;
844+};
845+typedef struct xen_mc xen_mc_t;
846+DEFINE_XEN_GUEST_HANDLE(xen_mc_t);
847+
848+#endif /* __ASSEMBLY__ */
849+
850+#endif /* __XEN_PUBLIC_ARCH_X86_MCA_H__ */
851Index: head-2008-11-25/include/xen/interface/arch-x86/xen-x86_32.h
852===================================================================
853--- /dev/null 1970-01-01 00:00:00.000000000 +0000
854+++ head-2008-11-25/include/xen/interface/arch-x86/xen-x86_32.h 2008-07-21 11:00:33.000000000 +0200
855@@ -0,0 +1,180 @@
856+/******************************************************************************
857+ * xen-x86_32.h
858+ *
859+ * Guest OS interface to x86 32-bit Xen.
860+ *
861+ * Permission is hereby granted, free of charge, to any person obtaining a copy
862+ * of this software and associated documentation files (the "Software"), to
863+ * deal in the Software without restriction, including without limitation the
864+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
865+ * sell copies of the Software, and to permit persons to whom the Software is
866+ * furnished to do so, subject to the following conditions:
867+ *
868+ * The above copyright notice and this permission notice shall be included in
869+ * all copies or substantial portions of the Software.
870+ *
871+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
872+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
873+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
874+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
875+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
876+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
877+ * DEALINGS IN THE SOFTWARE.
878+ *
879+ * Copyright (c) 2004-2007, K A Fraser
880+ */
881+
882+#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
883+#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
884+
885+/*
886+ * Hypercall interface:
887+ * Input: %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
888+ * Output: %eax
889+ * Access is via hypercall page (set up by guest loader or via a Xen MSR):
890+ * call hypercall_page + hypercall-number * 32
891+ * Clobbered: Argument registers (e.g., 2-arg hypercall clobbers %ebx,%ecx)
892+ */
893+
894+#if __XEN_INTERFACE_VERSION__ < 0x00030203
895+/*
896+ * Legacy hypercall interface:
897+ * As above, except the entry sequence to the hypervisor is:
898+ * mov $hypercall-number*32,%eax ; int $0x82
899+ */
900+#define TRAP_INSTR "int $0x82"
901+#endif
902+
903+/*
904+ * These flat segments are in the Xen-private section of every GDT. Since these
905+ * are also present in the initial GDT, many OSes will be able to avoid
906+ * installing their own GDT.
907+ */
908+#define FLAT_RING1_CS 0xe019 /* GDT index 259 */
909+#define FLAT_RING1_DS 0xe021 /* GDT index 260 */
910+#define FLAT_RING1_SS 0xe021 /* GDT index 260 */
911+#define FLAT_RING3_CS 0xe02b /* GDT index 261 */
912+#define FLAT_RING3_DS 0xe033 /* GDT index 262 */
913+#define FLAT_RING3_SS 0xe033 /* GDT index 262 */
914+
915+#define FLAT_KERNEL_CS FLAT_RING1_CS
916+#define FLAT_KERNEL_DS FLAT_RING1_DS
917+#define FLAT_KERNEL_SS FLAT_RING1_SS
918+#define FLAT_USER_CS FLAT_RING3_CS
919+#define FLAT_USER_DS FLAT_RING3_DS
920+#define FLAT_USER_SS FLAT_RING3_SS
921+
922+#define __HYPERVISOR_VIRT_START_PAE 0xF5800000
923+#define __MACH2PHYS_VIRT_START_PAE 0xF5800000
924+#define __MACH2PHYS_VIRT_END_PAE 0xF6800000
925+#define HYPERVISOR_VIRT_START_PAE \
926+ mk_unsigned_long(__HYPERVISOR_VIRT_START_PAE)
927+#define MACH2PHYS_VIRT_START_PAE \
928+ mk_unsigned_long(__MACH2PHYS_VIRT_START_PAE)
929+#define MACH2PHYS_VIRT_END_PAE \
930+ mk_unsigned_long(__MACH2PHYS_VIRT_END_PAE)
931+
932+/* Non-PAE bounds are obsolete. */
933+#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000
934+#define __MACH2PHYS_VIRT_START_NONPAE 0xFC000000
935+#define __MACH2PHYS_VIRT_END_NONPAE 0xFC400000
936+#define HYPERVISOR_VIRT_START_NONPAE \
937+ mk_unsigned_long(__HYPERVISOR_VIRT_START_NONPAE)
938+#define MACH2PHYS_VIRT_START_NONPAE \
939+ mk_unsigned_long(__MACH2PHYS_VIRT_START_NONPAE)
940+#define MACH2PHYS_VIRT_END_NONPAE \
941+ mk_unsigned_long(__MACH2PHYS_VIRT_END_NONPAE)
942+
943+#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE
944+#define __MACH2PHYS_VIRT_START __MACH2PHYS_VIRT_START_PAE
945+#define __MACH2PHYS_VIRT_END __MACH2PHYS_VIRT_END_PAE
946+
947+#ifndef HYPERVISOR_VIRT_START
948+#define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START)
949+#endif
950+
951+#define MACH2PHYS_VIRT_START mk_unsigned_long(__MACH2PHYS_VIRT_START)
952+#define MACH2PHYS_VIRT_END mk_unsigned_long(__MACH2PHYS_VIRT_END)
953+#define MACH2PHYS_NR_ENTRIES ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>2)
954+#ifndef machine_to_phys_mapping
955+#define machine_to_phys_mapping ((unsigned long *)MACH2PHYS_VIRT_START)
956+#endif
957+
958+/* 32-/64-bit invariability for control interfaces (domctl/sysctl). */
959+#if defined(__XEN__) || defined(__XEN_TOOLS__)
960+#undef ___DEFINE_XEN_GUEST_HANDLE
961+#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
962+ typedef struct { type *p; } \
963+ __guest_handle_ ## name; \
964+ typedef struct { union { type *p; uint64_aligned_t q; }; } \
965+ __guest_handle_64_ ## name
966+#undef set_xen_guest_handle
967+#define set_xen_guest_handle(hnd, val) \
968+ do { if ( sizeof(hnd) == 8 ) *(uint64_t *)&(hnd) = 0; \
969+ (hnd).p = val; \
970+ } while ( 0 )
971+#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
972+#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
973+#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
974+#endif
975+
976+#ifndef __ASSEMBLY__
977+
978+struct cpu_user_regs {
979+ uint32_t ebx;
980+ uint32_t ecx;
981+ uint32_t edx;
982+ uint32_t esi;
983+ uint32_t edi;
984+ uint32_t ebp;
985+ uint32_t eax;
986+ uint16_t error_code; /* private */
987+ uint16_t entry_vector; /* private */
988+ uint32_t eip;
989+ uint16_t cs;
990+ uint8_t saved_upcall_mask;
991+ uint8_t _pad0;
992+ uint32_t eflags; /* eflags.IF == !saved_upcall_mask */
993+ uint32_t esp;
994+ uint16_t ss, _pad1;
995+ uint16_t es, _pad2;
996+ uint16_t ds, _pad3;
997+ uint16_t fs, _pad4;
998+ uint16_t gs, _pad5;
999+};
1000+typedef struct cpu_user_regs cpu_user_regs_t;
1001+DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
1002+
1003+/*
1004+ * Page-directory addresses above 4GB do not fit into architectural %cr3.
1005+ * When accessing %cr3, or equivalent field in vcpu_guest_context, guests
1006+ * must use the following accessor macros to pack/unpack valid MFNs.
1007+ */
1008+#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20))
1009+#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20))
1010+
1011+struct arch_vcpu_info {
1012+ unsigned long cr2;
1013+ unsigned long pad[5]; /* sizeof(vcpu_info_t) == 64 */
1014+};
1015+typedef struct arch_vcpu_info arch_vcpu_info_t;
1016+
1017+struct xen_callback {
1018+ unsigned long cs;
1019+ unsigned long eip;
1020+};
1021+typedef struct xen_callback xen_callback_t;
1022+
1023+#endif /* !__ASSEMBLY__ */
1024+
1025+#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
1026+
1027+/*
1028+ * Local variables:
1029+ * mode: C
1030+ * c-set-style: "BSD"
1031+ * c-basic-offset: 4
1032+ * tab-width: 4
1033+ * indent-tabs-mode: nil
1034+ * End:
1035+ */
1036Index: head-2008-11-25/include/xen/interface/arch-x86/xen-x86_64.h
1037===================================================================
1038--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1039+++ head-2008-11-25/include/xen/interface/arch-x86/xen-x86_64.h 2008-04-02 12:34:02.000000000 +0200
1040@@ -0,0 +1,212 @@
1041+/******************************************************************************
1042+ * xen-x86_64.h
1043+ *
1044+ * Guest OS interface to x86 64-bit Xen.
1045+ *
1046+ * Permission is hereby granted, free of charge, to any person obtaining a copy
1047+ * of this software and associated documentation files (the "Software"), to
1048+ * deal in the Software without restriction, including without limitation the
1049+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1050+ * sell copies of the Software, and to permit persons to whom the Software is
1051+ * furnished to do so, subject to the following conditions:
1052+ *
1053+ * The above copyright notice and this permission notice shall be included in
1054+ * all copies or substantial portions of the Software.
1055+ *
1056+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1057+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1058+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1059+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1060+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1061+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1062+ * DEALINGS IN THE SOFTWARE.
1063+ *
1064+ * Copyright (c) 2004-2006, K A Fraser
1065+ */
1066+
1067+#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
1068+#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
1069+
1070+/*
1071+ * Hypercall interface:
1072+ * Input: %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
1073+ * Output: %rax
1074+ * Access is via hypercall page (set up by guest loader or via a Xen MSR):
1075+ * call hypercall_page + hypercall-number * 32
1076+ * Clobbered: argument registers (e.g., 2-arg hypercall clobbers %rdi,%rsi)
1077+ */
1078+
1079+#if __XEN_INTERFACE_VERSION__ < 0x00030203
1080+/*
1081+ * Legacy hypercall interface:
1082+ * As above, except the entry sequence to the hypervisor is:
1083+ * mov $hypercall-number*32,%eax ; syscall
1084+ * Clobbered: %rcx, %r11, argument registers (as above)
1085+ */
1086+#define TRAP_INSTR "syscall"
1087+#endif
1088+
1089+/*
1090+ * 64-bit segment selectors
1091+ * These flat segments are in the Xen-private section of every GDT. Since these
1092+ * are also present in the initial GDT, many OSes will be able to avoid
1093+ * installing their own GDT.
1094+ */
1095+
1096+#define FLAT_RING3_CS32 0xe023 /* GDT index 260 */
1097+#define FLAT_RING3_CS64 0xe033 /* GDT index 261 */
1098+#define FLAT_RING3_DS32 0xe02b /* GDT index 262 */
1099+#define FLAT_RING3_DS64 0x0000 /* NULL selector */
1100+#define FLAT_RING3_SS32 0xe02b /* GDT index 262 */
1101+#define FLAT_RING3_SS64 0xe02b /* GDT index 262 */
1102+
1103+#define FLAT_KERNEL_DS64 FLAT_RING3_DS64
1104+#define FLAT_KERNEL_DS32 FLAT_RING3_DS32
1105+#define FLAT_KERNEL_DS FLAT_KERNEL_DS64
1106+#define FLAT_KERNEL_CS64 FLAT_RING3_CS64
1107+#define FLAT_KERNEL_CS32 FLAT_RING3_CS32
1108+#define FLAT_KERNEL_CS FLAT_KERNEL_CS64
1109+#define FLAT_KERNEL_SS64 FLAT_RING3_SS64
1110+#define FLAT_KERNEL_SS32 FLAT_RING3_SS32
1111+#define FLAT_KERNEL_SS FLAT_KERNEL_SS64
1112+
1113+#define FLAT_USER_DS64 FLAT_RING3_DS64
1114+#define FLAT_USER_DS32 FLAT_RING3_DS32
1115+#define FLAT_USER_DS FLAT_USER_DS64
1116+#define FLAT_USER_CS64 FLAT_RING3_CS64
1117+#define FLAT_USER_CS32 FLAT_RING3_CS32
1118+#define FLAT_USER_CS FLAT_USER_CS64
1119+#define FLAT_USER_SS64 FLAT_RING3_SS64
1120+#define FLAT_USER_SS32 FLAT_RING3_SS32
1121+#define FLAT_USER_SS FLAT_USER_SS64
1122+
1123+#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
1124+#define __HYPERVISOR_VIRT_END 0xFFFF880000000000
1125+#define __MACH2PHYS_VIRT_START 0xFFFF800000000000
1126+#define __MACH2PHYS_VIRT_END 0xFFFF804000000000
1127+
1128+#ifndef HYPERVISOR_VIRT_START
1129+#define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START)
1130+#define HYPERVISOR_VIRT_END mk_unsigned_long(__HYPERVISOR_VIRT_END)
1131+#endif
1132+
1133+#define MACH2PHYS_VIRT_START mk_unsigned_long(__MACH2PHYS_VIRT_START)
1134+#define MACH2PHYS_VIRT_END mk_unsigned_long(__MACH2PHYS_VIRT_END)
1135+#define MACH2PHYS_NR_ENTRIES ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>3)
1136+#ifndef machine_to_phys_mapping
1137+#define machine_to_phys_mapping ((unsigned long *)HYPERVISOR_VIRT_START)
1138+#endif
1139+
1140+/*
1141+ * int HYPERVISOR_set_segment_base(unsigned int which, unsigned long base)
1142+ * @which == SEGBASE_* ; @base == 64-bit base address
1143+ * Returns 0 on success.
1144+ */
1145+#define SEGBASE_FS 0
1146+#define SEGBASE_GS_USER 1
1147+#define SEGBASE_GS_KERNEL 2
1148+#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] */
1149+
1150+/*
1151+ * int HYPERVISOR_iret(void)
1152+ * All arguments are on the kernel stack, in the following format.
1153+ * Never returns if successful. Current kernel context is lost.
1154+ * The saved CS is mapped as follows:
1155+ * RING0 -> RING3 kernel mode.
1156+ * RING1 -> RING3 kernel mode.
1157+ * RING2 -> RING3 kernel mode.
1158+ * RING3 -> RING3 user mode.
1159+ * However RING0 indicates that the guest kernel should return to iteself
1160+ * directly with
1161+ * orb $3,1*8(%rsp)
1162+ * iretq
1163+ * If flags contains VGCF_in_syscall:
1164+ * Restore RAX, RIP, RFLAGS, RSP.
1165+ * Discard R11, RCX, CS, SS.
1166+ * Otherwise:
1167+ * Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP.
1168+ * All other registers are saved on hypercall entry and restored to user.
1169+ */
1170+/* Guest exited in SYSCALL context? Return to guest with SYSRET? */
1171+#define _VGCF_in_syscall 8
1172+#define VGCF_in_syscall (1<<_VGCF_in_syscall)
1173+#define VGCF_IN_SYSCALL VGCF_in_syscall
1174+
1175+#ifndef __ASSEMBLY__
1176+
1177+struct iret_context {
1178+ /* Top of stack (%rsp at point of hypercall). */
1179+ uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
1180+ /* Bottom of iret stack frame. */
1181+};
1182+
1183+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
1184+/* Anonymous union includes both 32- and 64-bit names (e.g., eax/rax). */
1185+#define __DECL_REG(name) union { \
1186+ uint64_t r ## name, e ## name; \
1187+ uint32_t _e ## name; \
1188+}
1189+#else
1190+/* Non-gcc sources must always use the proper 64-bit name (e.g., rax). */
1191+#define __DECL_REG(name) uint64_t r ## name
1192+#endif
1193+
1194+struct cpu_user_regs {
1195+ uint64_t r15;
1196+ uint64_t r14;
1197+ uint64_t r13;
1198+ uint64_t r12;
1199+ __DECL_REG(bp);
1200+ __DECL_REG(bx);
1201+ uint64_t r11;
1202+ uint64_t r10;
1203+ uint64_t r9;
1204+ uint64_t r8;
1205+ __DECL_REG(ax);
1206+ __DECL_REG(cx);
1207+ __DECL_REG(dx);
1208+ __DECL_REG(si);
1209+ __DECL_REG(di);
1210+ uint32_t error_code; /* private */
1211+ uint32_t entry_vector; /* private */
1212+ __DECL_REG(ip);
1213+ uint16_t cs, _pad0[1];
1214+ uint8_t saved_upcall_mask;
1215+ uint8_t _pad1[3];
1216+ __DECL_REG(flags); /* rflags.IF == !saved_upcall_mask */
1217+ __DECL_REG(sp);
1218+ uint16_t ss, _pad2[3];
1219+ uint16_t es, _pad3[3];
1220+ uint16_t ds, _pad4[3];
1221+ uint16_t fs, _pad5[3]; /* Non-zero => takes precedence over fs_base. */
1222+ uint16_t gs, _pad6[3]; /* Non-zero => takes precedence over gs_base_usr. */
1223+};
1224+typedef struct cpu_user_regs cpu_user_regs_t;
1225+DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
1226+
1227+#undef __DECL_REG
1228+
1229+#define xen_pfn_to_cr3(pfn) ((unsigned long)(pfn) << 12)
1230+#define xen_cr3_to_pfn(cr3) ((unsigned long)(cr3) >> 12)
1231+
1232+struct arch_vcpu_info {
1233+ unsigned long cr2;
1234+ unsigned long pad; /* sizeof(vcpu_info_t) == 64 */
1235+};
1236+typedef struct arch_vcpu_info arch_vcpu_info_t;
1237+
1238+typedef unsigned long xen_callback_t;
1239+
1240+#endif /* !__ASSEMBLY__ */
1241+
1242+#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
1243+
1244+/*
1245+ * Local variables:
1246+ * mode: C
1247+ * c-set-style: "BSD"
1248+ * c-basic-offset: 4
1249+ * tab-width: 4
1250+ * indent-tabs-mode: nil
1251+ * End:
1252+ */
1253Index: head-2008-11-25/include/xen/interface/arch-x86/xen.h
1254===================================================================
1255--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1256+++ head-2008-11-25/include/xen/interface/arch-x86/xen.h 2008-09-01 12:07:31.000000000 +0200
1257@@ -0,0 +1,204 @@
1258+/******************************************************************************
1259+ * arch-x86/xen.h
1260+ *
1261+ * Guest OS interface to x86 Xen.
1262+ *
1263+ * Permission is hereby granted, free of charge, to any person obtaining a copy
1264+ * of this software and associated documentation files (the "Software"), to
1265+ * deal in the Software without restriction, including without limitation the
1266+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1267+ * sell copies of the Software, and to permit persons to whom the Software is
1268+ * furnished to do so, subject to the following conditions:
1269+ *
1270+ * The above copyright notice and this permission notice shall be included in
1271+ * all copies or substantial portions of the Software.
1272+ *
1273+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1274+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1275+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1276+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1277+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1278+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1279+ * DEALINGS IN THE SOFTWARE.
1280+ *
1281+ * Copyright (c) 2004-2006, K A Fraser
1282+ */
1283+
1284+#include "../xen.h"
1285+
1286+#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
1287+#define __XEN_PUBLIC_ARCH_X86_XEN_H__
1288+
1289+/* Structural guest handles introduced in 0x00030201. */
1290+#if __XEN_INTERFACE_VERSION__ >= 0x00030201
1291+#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
1292+ typedef struct { type *p; } __guest_handle_ ## name
1293+#else
1294+#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
1295+ typedef type * __guest_handle_ ## name
1296+#endif
1297+
1298+#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
1299+ ___DEFINE_XEN_GUEST_HANDLE(name, type); \
1300+ ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
1301+#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)
1302+#define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name
1303+#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name)
1304+#define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0)
1305+#ifdef __XEN_TOOLS__
1306+#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
1307+#endif
1308+
1309+#if defined(__i386__)
1310+#include "xen-x86_32.h"
1311+#elif defined(__x86_64__)
1312+#include "xen-x86_64.h"
1313+#endif
1314+
1315+#ifndef __ASSEMBLY__
1316+typedef unsigned long xen_pfn_t;
1317+#define PRI_xen_pfn "lx"
1318+#endif
1319+
1320+/*
1321+ * SEGMENT DESCRIPTOR TABLES
1322+ */
1323+/*
1324+ * A number of GDT entries are reserved by Xen. These are not situated at the
1325+ * start of the GDT because some stupid OSes export hard-coded selector values
1326+ * in their ABI. These hard-coded values are always near the start of the GDT,
1327+ * so Xen places itself out of the way, at the far end of the GDT.
1328+ */
1329+#define FIRST_RESERVED_GDT_PAGE 14
1330+#define FIRST_RESERVED_GDT_BYTE (FIRST_RESERVED_GDT_PAGE * 4096)
1331+#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)
1332+
1333+/* Maximum number of virtual CPUs in multi-processor guests. */
1334+#define MAX_VIRT_CPUS 32
1335+
1336+
1337+/* Machine check support */
1338+#include "xen-mca.h"
1339+
1340+#ifndef __ASSEMBLY__
1341+
1342+typedef unsigned long xen_ulong_t;
1343+
1344+/*
1345+ * Send an array of these to HYPERVISOR_set_trap_table().
1346+ * The privilege level specifies which modes may enter a trap via a software
1347+ * interrupt. On x86/64, since rings 1 and 2 are unavailable, we allocate
1348+ * privilege levels as follows:
1349+ * Level == 0: Noone may enter
1350+ * Level == 1: Kernel may enter
1351+ * Level == 2: Kernel may enter
1352+ * Level == 3: Everyone may enter
1353+ */
1354+#define TI_GET_DPL(_ti) ((_ti)->flags & 3)
1355+#define TI_GET_IF(_ti) ((_ti)->flags & 4)
1356+#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |= (_dpl))
1357+#define TI_SET_IF(_ti,_if) ((_ti)->flags |= ((!!(_if))<<2))
1358+struct trap_info {
1359+ uint8_t vector; /* exception vector */
1360+ uint8_t flags; /* 0-3: privilege level; 4: clear event enable? */
1361+ uint16_t cs; /* code selector */
1362+ unsigned long address; /* code offset */
1363+};
1364+typedef struct trap_info trap_info_t;
1365+DEFINE_XEN_GUEST_HANDLE(trap_info_t);
1366+
1367+typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
1368+
1369+/*
1370+ * The following is all CPU context. Note that the fpu_ctxt block is filled
1371+ * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
1372+ */
1373+struct vcpu_guest_context {
1374+ /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR. */
1375+ struct { char x[512]; } fpu_ctxt; /* User-level FPU registers */
1376+#define VGCF_I387_VALID (1<<0)
1377+#define VGCF_IN_KERNEL (1<<2)
1378+#define _VGCF_i387_valid 0
1379+#define VGCF_i387_valid (1<<_VGCF_i387_valid)
1380+#define _VGCF_in_kernel 2
1381+#define VGCF_in_kernel (1<<_VGCF_in_kernel)
1382+#define _VGCF_failsafe_disables_events 3
1383+#define VGCF_failsafe_disables_events (1<<_VGCF_failsafe_disables_events)
1384+#define _VGCF_syscall_disables_events 4
1385+#define VGCF_syscall_disables_events (1<<_VGCF_syscall_disables_events)
1386+#define _VGCF_online 5
1387+#define VGCF_online (1<<_VGCF_online)
1388+ unsigned long flags; /* VGCF_* flags */
1389+ struct cpu_user_regs user_regs; /* User-level CPU registers */
1390+ struct trap_info trap_ctxt[256]; /* Virtual IDT */
1391+ unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
1392+ unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
1393+ unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
1394+ /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
1395+ unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
1396+ unsigned long debugreg[8]; /* DB0-DB7 (debug registers) */
1397+#ifdef __i386__
1398+ unsigned long event_callback_cs; /* CS:EIP of event callback */
1399+ unsigned long event_callback_eip;
1400+ unsigned long failsafe_callback_cs; /* CS:EIP of failsafe callback */
1401+ unsigned long failsafe_callback_eip;
1402+#else
1403+ unsigned long event_callback_eip;
1404+ unsigned long failsafe_callback_eip;
1405+#ifdef __XEN__
1406+ union {
1407+ unsigned long syscall_callback_eip;
1408+ struct {
1409+ unsigned int event_callback_cs; /* compat CS of event cb */
1410+ unsigned int failsafe_callback_cs; /* compat CS of failsafe cb */
1411+ };
1412+ };
1413+#else
1414+ unsigned long syscall_callback_eip;
1415+#endif
1416+#endif
1417+ unsigned long vm_assist; /* VMASST_TYPE_* bitmap */
1418+#ifdef __x86_64__
1419+ /* Segment base addresses. */
1420+ uint64_t fs_base;
1421+ uint64_t gs_base_kernel;
1422+ uint64_t gs_base_user;
1423+#endif
1424+};
1425+typedef struct vcpu_guest_context vcpu_guest_context_t;
1426+DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
1427+
1428+struct arch_shared_info {
1429+ unsigned long max_pfn; /* max pfn that appears in table */
1430+ /* Frame containing list of mfns containing list of mfns containing p2m. */
1431+ xen_pfn_t pfn_to_mfn_frame_list_list;
1432+ unsigned long nmi_reason;
1433+ uint64_t pad[32];
1434+};
1435+typedef struct arch_shared_info arch_shared_info_t;
1436+
1437+#endif /* !__ASSEMBLY__ */
1438+
1439+/*
1440+ * Prefix forces emulation of some non-trapping instructions.
1441+ * Currently only CPUID.
1442+ */
1443+#ifdef __ASSEMBLY__
1444+#define XEN_EMULATE_PREFIX .byte 0x0f,0x0b,0x78,0x65,0x6e ;
1445+#define XEN_CPUID XEN_EMULATE_PREFIX cpuid
1446+#else
1447+#define XEN_EMULATE_PREFIX ".byte 0x0f,0x0b,0x78,0x65,0x6e ; "
1448+#define XEN_CPUID XEN_EMULATE_PREFIX "cpuid"
1449+#endif
1450+
1451+#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
1452+
1453+/*
1454+ * Local variables:
1455+ * mode: C
1456+ * c-set-style: "BSD"
1457+ * c-basic-offset: 4
1458+ * tab-width: 4
1459+ * indent-tabs-mode: nil
1460+ * End:
1461+ */
1462Index: head-2008-11-25/include/xen/interface/arch-x86_32.h
1463===================================================================
1464--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1465+++ head-2008-11-25/include/xen/interface/arch-x86_32.h 2007-06-12 13:14:19.000000000 +0200
1466@@ -0,0 +1,27 @@
1467+/******************************************************************************
1468+ * arch-x86_32.h
1469+ *
1470+ * Guest OS interface to x86 32-bit Xen.
1471+ *
1472+ * Permission is hereby granted, free of charge, to any person obtaining a copy
1473+ * of this software and associated documentation files (the "Software"), to
1474+ * deal in the Software without restriction, including without limitation the
1475+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1476+ * sell copies of the Software, and to permit persons to whom the Software is
1477+ * furnished to do so, subject to the following conditions:
1478+ *
1479+ * The above copyright notice and this permission notice shall be included in
1480+ * all copies or substantial portions of the Software.
1481+ *
1482+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1483+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1484+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1485+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1486+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1487+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1488+ * DEALINGS IN THE SOFTWARE.
1489+ *
1490+ * Copyright (c) 2004-2006, K A Fraser
1491+ */
1492+
1493+#include "arch-x86/xen.h"
1494Index: head-2008-11-25/include/xen/interface/arch-x86_64.h
1495===================================================================
1496--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1497+++ head-2008-11-25/include/xen/interface/arch-x86_64.h 2007-06-12 13:14:19.000000000 +0200
1498@@ -0,0 +1,27 @@
1499+/******************************************************************************
1500+ * arch-x86_64.h
1501+ *
1502+ * Guest OS interface to x86 64-bit Xen.
1503+ *
1504+ * Permission is hereby granted, free of charge, to any person obtaining a copy
1505+ * of this software and associated documentation files (the "Software"), to
1506+ * deal in the Software without restriction, including without limitation the
1507+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1508+ * sell copies of the Software, and to permit persons to whom the Software is
1509+ * furnished to do so, subject to the following conditions:
1510+ *
1511+ * The above copyright notice and this permission notice shall be included in
1512+ * all copies or substantial portions of the Software.
1513+ *
1514+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1516+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1517+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1518+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1519+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1520+ * DEALINGS IN THE SOFTWARE.
1521+ *
1522+ * Copyright (c) 2004-2006, K A Fraser
1523+ */
1524+
1525+#include "arch-x86/xen.h"
1526Index: head-2008-11-25/include/xen/interface/dom0_ops.h
1527===================================================================
1528--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1529+++ head-2008-11-25/include/xen/interface/dom0_ops.h 2007-06-12 13:14:19.000000000 +0200
1530@@ -0,0 +1,120 @@
1531+/******************************************************************************
1532+ * dom0_ops.h
1533+ *
1534+ * Process command requests from domain-0 guest OS.
1535+ *
1536+ * Permission is hereby granted, free of charge, to any person obtaining a copy
1537+ * of this software and associated documentation files (the "Software"), to
1538+ * deal in the Software without restriction, including without limitation the
1539+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1540+ * sell copies of the Software, and to permit persons to whom the Software is
1541+ * furnished to do so, subject to the following conditions:
1542+ *
1543+ * The above copyright notice and this permission notice shall be included in
1544+ * all copies or substantial portions of the Software.
1545+ *
1546+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1547+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1548+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1549+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1550+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1551+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1552+ * DEALINGS IN THE SOFTWARE.
1553+ *
1554+ * Copyright (c) 2002-2003, B Dragovic
1555+ * Copyright (c) 2002-2006, K Fraser
1556+ */
1557+
1558+#ifndef __XEN_PUBLIC_DOM0_OPS_H__
1559+#define __XEN_PUBLIC_DOM0_OPS_H__
1560+
1561+#include "xen.h"
1562+#include "platform.h"
1563+
1564+#if __XEN_INTERFACE_VERSION__ >= 0x00030204
1565+#error "dom0_ops.h is a compatibility interface only"
1566+#endif
1567+
1568+#define DOM0_INTERFACE_VERSION XENPF_INTERFACE_VERSION
1569+
1570+#define DOM0_SETTIME XENPF_settime
1571+#define dom0_settime xenpf_settime
1572+#define dom0_settime_t xenpf_settime_t
1573+
1574+#define DOM0_ADD_MEMTYPE XENPF_add_memtype
1575+#define dom0_add_memtype xenpf_add_memtype
1576+#define dom0_add_memtype_t xenpf_add_memtype_t
1577+
1578+#define DOM0_DEL_MEMTYPE XENPF_del_memtype
1579+#define dom0_del_memtype xenpf_del_memtype
1580+#define dom0_del_memtype_t xenpf_del_memtype_t
1581+
1582+#define DOM0_READ_MEMTYPE XENPF_read_memtype
1583+#define dom0_read_memtype xenpf_read_memtype
1584+#define dom0_read_memtype_t xenpf_read_memtype_t
1585+
1586+#define DOM0_MICROCODE XENPF_microcode_update
1587+#define dom0_microcode xenpf_microcode_update
1588+#define dom0_microcode_t xenpf_microcode_update_t
1589+
1590+#define DOM0_PLATFORM_QUIRK XENPF_platform_quirk
1591+#define dom0_platform_quirk xenpf_platform_quirk
1592+#define dom0_platform_quirk_t xenpf_platform_quirk_t
1593+
1594+typedef uint64_t cpumap_t;
1595+
1596+/* Unsupported legacy operation -- defined for API compatibility. */
1597+#define DOM0_MSR 15
1598+struct dom0_msr {
1599+ /* IN variables. */
1600+ uint32_t write;
1601+ cpumap_t cpu_mask;
1602+ uint32_t msr;
1603+ uint32_t in1;
1604+ uint32_t in2;
1605+ /* OUT variables. */
1606+ uint32_t out1;
1607+ uint32_t out2;
1608+};
1609+typedef struct dom0_msr dom0_msr_t;
1610+DEFINE_XEN_GUEST_HANDLE(dom0_msr_t);
1611+
1612+/* Unsupported legacy operation -- defined for API compatibility. */
1613+#define DOM0_PHYSICAL_MEMORY_MAP 40
1614+struct dom0_memory_map_entry {
1615+ uint64_t start, end;
1616+ uint32_t flags; /* reserved */
1617+ uint8_t is_ram;
1618+};
1619+typedef struct dom0_memory_map_entry dom0_memory_map_entry_t;
1620+DEFINE_XEN_GUEST_HANDLE(dom0_memory_map_entry_t);
1621+
1622+struct dom0_op {
1623+ uint32_t cmd;
1624+ uint32_t interface_version; /* DOM0_INTERFACE_VERSION */
1625+ union {
1626+ struct dom0_msr msr;
1627+ struct dom0_settime settime;
1628+ struct dom0_add_memtype add_memtype;
1629+ struct dom0_del_memtype del_memtype;
1630+ struct dom0_read_memtype read_memtype;
1631+ struct dom0_microcode microcode;
1632+ struct dom0_platform_quirk platform_quirk;
1633+ struct dom0_memory_map_entry physical_memory_map;
1634+ uint8_t pad[128];
1635+ } u;
1636+};
1637+typedef struct dom0_op dom0_op_t;
1638+DEFINE_XEN_GUEST_HANDLE(dom0_op_t);
1639+
1640+#endif /* __XEN_PUBLIC_DOM0_OPS_H__ */
1641+
1642+/*
1643+ * Local variables:
1644+ * mode: C
1645+ * c-set-style: "BSD"
1646+ * c-basic-offset: 4
1647+ * tab-width: 4
1648+ * indent-tabs-mode: nil
1649+ * End:
1650+ */
1651Index: head-2008-11-25/include/xen/interface/domctl.h
1652===================================================================
1653--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1654+++ head-2008-11-25/include/xen/interface/domctl.h 2008-10-29 09:55:56.000000000 +0100
1655@@ -0,0 +1,680 @@
1656+/******************************************************************************
1657+ * domctl.h
1658+ *
1659+ * Domain management operations. For use by node control stack.
1660+ *
1661+ * Permission is hereby granted, free of charge, to any person obtaining a copy
1662+ * of this software and associated documentation files (the "Software"), to
1663+ * deal in the Software without restriction, including without limitation the
1664+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1665+ * sell copies of the Software, and to permit persons to whom the Software is
1666+ * furnished to do so, subject to the following conditions:
1667+ *
1668+ * The above copyright notice and this permission notice shall be included in
1669+ * all copies or substantial portions of the Software.
1670+ *
1671+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1672+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1673+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1674+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1675+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1676+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1677+ * DEALINGS IN THE SOFTWARE.
1678+ *
1679+ * Copyright (c) 2002-2003, B Dragovic
1680+ * Copyright (c) 2002-2006, K Fraser
1681+ */
1682+
1683+#ifndef __XEN_PUBLIC_DOMCTL_H__
1684+#define __XEN_PUBLIC_DOMCTL_H__
1685+
1686+#if !defined(__XEN__) && !defined(__XEN_TOOLS__)
1687+#error "domctl operations are intended for use by node control tools only"
1688+#endif
1689+
1690+#include "xen.h"
1691+
1692+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000005
1693+
1694+struct xenctl_cpumap {
1695+ XEN_GUEST_HANDLE_64(uint8) bitmap;
1696+ uint32_t nr_cpus;
1697+};
1698+
1699+/*
1700+ * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
1701+ * If it is specified as zero, an id is auto-allocated and returned.
1702+ */
1703+#define XEN_DOMCTL_createdomain 1
1704+struct xen_domctl_createdomain {
1705+ /* IN parameters */
1706+ uint32_t ssidref;
1707+ xen_domain_handle_t handle;
1708+ /* Is this an HVM guest (as opposed to a PV guest)? */
1709+#define _XEN_DOMCTL_CDF_hvm_guest 0
1710+#define XEN_DOMCTL_CDF_hvm_guest (1U<<_XEN_DOMCTL_CDF_hvm_guest)
1711+ /* Use hardware-assisted paging if available? */
1712+#define _XEN_DOMCTL_CDF_hap 1
1713+#define XEN_DOMCTL_CDF_hap (1U<<_XEN_DOMCTL_CDF_hap)
1714+ uint32_t flags;
1715+};
1716+typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
1717+DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t);
1718+
1719+#define XEN_DOMCTL_destroydomain 2
1720+#define XEN_DOMCTL_pausedomain 3
1721+#define XEN_DOMCTL_unpausedomain 4
1722+#define XEN_DOMCTL_resumedomain 27
1723+
1724+#define XEN_DOMCTL_getdomaininfo 5
1725+struct xen_domctl_getdomaininfo {
1726+ /* OUT variables. */
1727+ domid_t domain; /* Also echoed in domctl.domain */
1728+ /* Domain is scheduled to die. */
1729+#define _XEN_DOMINF_dying 0
1730+#define XEN_DOMINF_dying (1U<<_XEN_DOMINF_dying)
1731+ /* Domain is an HVM guest (as opposed to a PV guest). */
1732+#define _XEN_DOMINF_hvm_guest 1
1733+#define XEN_DOMINF_hvm_guest (1U<<_XEN_DOMINF_hvm_guest)
1734+ /* The guest OS has shut down. */
1735+#define _XEN_DOMINF_shutdown 2
1736+#define XEN_DOMINF_shutdown (1U<<_XEN_DOMINF_shutdown)
1737+ /* Currently paused by control software. */
1738+#define _XEN_DOMINF_paused 3
1739+#define XEN_DOMINF_paused (1U<<_XEN_DOMINF_paused)
1740+ /* Currently blocked pending an event. */
1741+#define _XEN_DOMINF_blocked 4
1742+#define XEN_DOMINF_blocked (1U<<_XEN_DOMINF_blocked)
1743+ /* Domain is currently running. */
1744+#define _XEN_DOMINF_running 5
1745+#define XEN_DOMINF_running (1U<<_XEN_DOMINF_running)
1746+ /* Being debugged. */
1747+#define _XEN_DOMINF_debugged 6
1748+#define XEN_DOMINF_debugged (1U<<_XEN_DOMINF_debugged)
1749+ /* CPU to which this domain is bound. */
1750+#define XEN_DOMINF_cpumask 255
1751+#define XEN_DOMINF_cpushift 8
1752+ /* XEN_DOMINF_shutdown guest-supplied code. */
1753+#define XEN_DOMINF_shutdownmask 255
1754+#define XEN_DOMINF_shutdownshift 16
1755+ uint32_t flags; /* XEN_DOMINF_* */
1756+ uint64_aligned_t tot_pages;
1757+ uint64_aligned_t max_pages;
1758+ uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
1759+ uint64_aligned_t cpu_time;
1760+ uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */
1761+ uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */
1762+ uint32_t ssidref;
1763+ xen_domain_handle_t handle;
1764+};
1765+typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;
1766+DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);
1767+
1768+
1769+#define XEN_DOMCTL_getmemlist 6
1770+struct xen_domctl_getmemlist {
1771+ /* IN variables. */
1772+ /* Max entries to write to output buffer. */
1773+ uint64_aligned_t max_pfns;
1774+ /* Start index in guest's page list. */
1775+ uint64_aligned_t start_pfn;
1776+ XEN_GUEST_HANDLE_64(uint64) buffer;
1777+ /* OUT variables. */
1778+ uint64_aligned_t num_pfns;
1779+};
1780+typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t;
1781+DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t);
1782+
1783+
1784+#define XEN_DOMCTL_getpageframeinfo 7
1785+
1786+#define XEN_DOMCTL_PFINFO_LTAB_SHIFT 28
1787+#define XEN_DOMCTL_PFINFO_NOTAB (0x0U<<28)
1788+#define XEN_DOMCTL_PFINFO_L1TAB (0x1U<<28)
1789+#define XEN_DOMCTL_PFINFO_L2TAB (0x2U<<28)
1790+#define XEN_DOMCTL_PFINFO_L3TAB (0x3U<<28)
1791+#define XEN_DOMCTL_PFINFO_L4TAB (0x4U<<28)
1792+#define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28)
1793+#define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31)
1794+#define XEN_DOMCTL_PFINFO_XTAB (0xfU<<28) /* invalid page */
1795+#define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28)
1796+
1797+struct xen_domctl_getpageframeinfo {
1798+ /* IN variables. */
1799+ uint64_aligned_t gmfn; /* GMFN to query */
1800+ /* OUT variables. */
1801+ /* Is the page PINNED to a type? */
1802+ uint32_t type; /* see above type defs */
1803+};
1804+typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t;
1805+DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t);
1806+
1807+
1808+#define XEN_DOMCTL_getpageframeinfo2 8
1809+struct xen_domctl_getpageframeinfo2 {
1810+ /* IN variables. */
1811+ uint64_aligned_t num;
1812+ /* IN/OUT variables. */
1813+ XEN_GUEST_HANDLE_64(uint32) array;
1814+};
1815+typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t;
1816+DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t);
1817+
1818+
1819+/*
1820+ * Control shadow pagetables operation
1821+ */
1822+#define XEN_DOMCTL_shadow_op 10
1823+
1824+/* Disable shadow mode. */
1825+#define XEN_DOMCTL_SHADOW_OP_OFF 0
1826+
1827+/* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */
1828+#define XEN_DOMCTL_SHADOW_OP_ENABLE 32
1829+
1830+/* Log-dirty bitmap operations. */
1831+ /* Return the bitmap and clean internal copy for next round. */
1832+#define XEN_DOMCTL_SHADOW_OP_CLEAN 11
1833+ /* Return the bitmap but do not modify internal copy. */
1834+#define XEN_DOMCTL_SHADOW_OP_PEEK 12
1835+
1836+/* Memory allocation accessors. */
1837+#define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30
1838+#define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31
1839+
1840+/* Legacy enable operations. */
1841+ /* Equiv. to ENABLE with no mode flags. */
1842+#define XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1
1843+ /* Equiv. to ENABLE with mode flag ENABLE_LOG_DIRTY. */
1844+#define XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2
1845+ /* Equiv. to ENABLE with mode flags ENABLE_REFCOUNT and ENABLE_TRANSLATE. */
1846+#define XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3
1847+
1848+/* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */
1849+ /*
1850+ * Shadow pagetables are refcounted: guest does not use explicit mmu
1851+ * operations nor write-protect its pagetables.
1852+ */
1853+#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1)
1854+ /*
1855+ * Log pages in a bitmap as they are dirtied.
1856+ * Used for live relocation to determine which pages must be re-sent.
1857+ */
1858+#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
1859+ /*
1860+ * Automatically translate GPFNs into MFNs.
1861+ */
1862+#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
1863+ /*
1864+ * Xen does not steal virtual address space from the guest.
1865+ * Requires HVM support.
1866+ */
1867+#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)
1868+
1869+struct xen_domctl_shadow_op_stats {
1870+ uint32_t fault_count;
1871+ uint32_t dirty_count;
1872+};
1873+typedef struct xen_domctl_shadow_op_stats xen_domctl_shadow_op_stats_t;
1874+DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_stats_t);
1875+
1876+struct xen_domctl_shadow_op {
1877+ /* IN variables. */
1878+ uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */
1879+
1880+ /* OP_ENABLE */
1881+ uint32_t mode; /* XEN_DOMCTL_SHADOW_ENABLE_* */
1882+
1883+ /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */
1884+ uint32_t mb; /* Shadow memory allocation in MB */
1885+
1886+ /* OP_PEEK / OP_CLEAN */
1887+ XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
1888+ uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */
1889+ struct xen_domctl_shadow_op_stats stats;
1890+};
1891+typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t;
1892+DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t);
1893+
1894+
1895+#define XEN_DOMCTL_max_mem 11
1896+struct xen_domctl_max_mem {
1897+ /* IN variables. */
1898+ uint64_aligned_t max_memkb;
1899+};
1900+typedef struct xen_domctl_max_mem xen_domctl_max_mem_t;
1901+DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t);
1902+
1903+
1904+#define XEN_DOMCTL_setvcpucontext 12
1905+#define XEN_DOMCTL_getvcpucontext 13
1906+struct xen_domctl_vcpucontext {
1907+ uint32_t vcpu; /* IN */
1908+ XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
1909+};
1910+typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t;
1911+DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t);
1912+
1913+
1914+#define XEN_DOMCTL_getvcpuinfo 14
1915+struct xen_domctl_getvcpuinfo {
1916+ /* IN variables. */
1917+ uint32_t vcpu;
1918+ /* OUT variables. */
1919+ uint8_t online; /* currently online (not hotplugged)? */
1920+ uint8_t blocked; /* blocked waiting for an event? */
1921+ uint8_t running; /* currently scheduled on its CPU? */
1922+ uint64_aligned_t cpu_time; /* total cpu time consumed (ns) */
1923+ uint32_t cpu; /* current mapping */
1924+};
1925+typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t;
1926+DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t);
1927+
1928+
1929+/* Get/set which physical cpus a vcpu can execute on. */
1930+#define XEN_DOMCTL_setvcpuaffinity 9
1931+#define XEN_DOMCTL_getvcpuaffinity 25
1932+struct xen_domctl_vcpuaffinity {
1933+ uint32_t vcpu; /* IN */
1934+ struct xenctl_cpumap cpumap; /* IN/OUT */
1935+};
1936+typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t;
1937+DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t);
1938+
1939+
1940+#define XEN_DOMCTL_max_vcpus 15
1941+struct xen_domctl_max_vcpus {
1942+ uint32_t max; /* maximum number of vcpus */
1943+};
1944+typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t;
1945+DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t);
1946+
1947+
1948+#define XEN_DOMCTL_scheduler_op 16
1949+/* Scheduler types. */
1950+#define XEN_SCHEDULER_SEDF 4
1951+#define XEN_SCHEDULER_CREDIT 5
1952+/* Set or get info? */
1953+#define XEN_DOMCTL_SCHEDOP_putinfo 0
1954+#define XEN_DOMCTL_SCHEDOP_getinfo 1
1955+struct xen_domctl_scheduler_op {
1956+ uint32_t sched_id; /* XEN_SCHEDULER_* */
1957+ uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */
1958+ union {
1959+ struct xen_domctl_sched_sedf {
1960+ uint64_aligned_t period;
1961+ uint64_aligned_t slice;
1962+ uint64_aligned_t latency;
1963+ uint32_t extratime;
1964+ uint32_t weight;
1965+ } sedf;
1966+ struct xen_domctl_sched_credit {
1967+ uint16_t weight;
1968+ uint16_t cap;
1969+ } credit;
1970+ } u;
1971+};
1972+typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t;
1973+DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t);
1974+
1975+
1976+#define XEN_DOMCTL_setdomainhandle 17
1977+struct xen_domctl_setdomainhandle {
1978+ xen_domain_handle_t handle;
1979+};
1980+typedef struct xen_domctl_setdomainhandle xen_domctl_setdomainhandle_t;
1981+DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdomainhandle_t);
1982+
1983+
1984+#define XEN_DOMCTL_setdebugging 18
1985+struct xen_domctl_setdebugging {
1986+ uint8_t enable;
1987+};
1988+typedef struct xen_domctl_setdebugging xen_domctl_setdebugging_t;
1989+DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdebugging_t);
1990+
1991+
1992+#define XEN_DOMCTL_irq_permission 19
1993+struct xen_domctl_irq_permission {
1994+ uint8_t pirq;
1995+ uint8_t allow_access; /* flag to specify enable/disable of IRQ access */
1996+};
1997+typedef struct xen_domctl_irq_permission xen_domctl_irq_permission_t;
1998+DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_permission_t);
1999+
2000+
2001+#define XEN_DOMCTL_iomem_permission 20
2002+struct xen_domctl_iomem_permission {
2003+ uint64_aligned_t first_mfn;/* first page (physical page number) in range */
2004+ uint64_aligned_t nr_mfns; /* number of pages in range (>0) */
2005+ uint8_t allow_access; /* allow (!0) or deny (0) access to range? */
2006+};
2007+typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t;
2008+DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t);
2009+
2010+
2011+#define XEN_DOMCTL_ioport_permission 21
2012+struct xen_domctl_ioport_permission {
2013+ uint32_t first_port; /* first port int range */
2014+ uint32_t nr_ports; /* size of port range */
2015+ uint8_t allow_access; /* allow or deny access to range? */
2016+};
2017+typedef struct xen_domctl_ioport_permission xen_domctl_ioport_permission_t;
2018+DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_permission_t);
2019+
2020+
2021+#define XEN_DOMCTL_hypercall_init 22
2022+struct xen_domctl_hypercall_init {
2023+ uint64_aligned_t gmfn; /* GMFN to be initialised */
2024+};
2025+typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t;
2026+DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t);
2027+
2028+
2029+#define XEN_DOMCTL_arch_setup 23
2030+#define _XEN_DOMAINSETUP_hvm_guest 0
2031+#define XEN_DOMAINSETUP_hvm_guest (1UL<<_XEN_DOMAINSETUP_hvm_guest)
2032+#define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save) */
2033+#define XEN_DOMAINSETUP_query (1UL<<_XEN_DOMAINSETUP_query)
2034+#define _XEN_DOMAINSETUP_sioemu_guest 2
2035+#define XEN_DOMAINSETUP_sioemu_guest (1UL<<_XEN_DOMAINSETUP_sioemu_guest)
2036+typedef struct xen_domctl_arch_setup {
2037+ uint64_aligned_t flags; /* XEN_DOMAINSETUP_* */
2038+#ifdef __ia64__
2039+ uint64_aligned_t bp; /* mpaddr of boot param area */
2040+ uint64_aligned_t maxmem; /* Highest memory address for MDT. */
2041+ uint64_aligned_t xsi_va; /* Xen shared_info area virtual address. */
2042+ uint32_t hypercall_imm; /* Break imm for Xen hypercalls. */
2043+ int8_t vhpt_size_log2; /* Log2 of VHPT size. */
2044+#endif
2045+} xen_domctl_arch_setup_t;
2046+DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t);
2047+
2048+
2049+#define XEN_DOMCTL_settimeoffset 24
2050+struct xen_domctl_settimeoffset {
2051+ int32_t time_offset_seconds; /* applied to domain wallclock time */
2052+};
2053+typedef struct xen_domctl_settimeoffset xen_domctl_settimeoffset_t;
2054+DEFINE_XEN_GUEST_HANDLE(xen_domctl_settimeoffset_t);
2055+
2056+
2057+#define XEN_DOMCTL_gethvmcontext 33
2058+#define XEN_DOMCTL_sethvmcontext 34
2059+typedef struct xen_domctl_hvmcontext {
2060+ uint32_t size; /* IN/OUT: size of buffer / bytes filled */
2061+ XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call
2062+ * gethvmcontext with NULL
2063+ * buffer to get size req'd */
2064+} xen_domctl_hvmcontext_t;
2065+DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_t);
2066+
2067+
2068+#define XEN_DOMCTL_set_address_size 35
2069+#define XEN_DOMCTL_get_address_size 36
2070+typedef struct xen_domctl_address_size {
2071+ uint32_t size;
2072+} xen_domctl_address_size_t;
2073+DEFINE_XEN_GUEST_HANDLE(xen_domctl_address_size_t);
2074+
2075+
2076+#define XEN_DOMCTL_real_mode_area 26
2077+struct xen_domctl_real_mode_area {
2078+ uint32_t log; /* log2 of Real Mode Area size */
2079+};
2080+typedef struct xen_domctl_real_mode_area xen_domctl_real_mode_area_t;
2081+DEFINE_XEN_GUEST_HANDLE(xen_domctl_real_mode_area_t);
2082+
2083+
2084+#define XEN_DOMCTL_sendtrigger 28
2085+#define XEN_DOMCTL_SENDTRIGGER_NMI 0
2086+#define XEN_DOMCTL_SENDTRIGGER_RESET 1
2087+#define XEN_DOMCTL_SENDTRIGGER_INIT 2
2088+struct xen_domctl_sendtrigger {
2089+ uint32_t trigger; /* IN */
2090+ uint32_t vcpu; /* IN */
2091+};
2092+typedef struct xen_domctl_sendtrigger xen_domctl_sendtrigger_t;
2093+DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendtrigger_t);
2094+
2095+
2096+/* Assign PCI device to HVM guest. Sets up IOMMU structures. */
2097+#define XEN_DOMCTL_assign_device 37
2098+#define XEN_DOMCTL_test_assign_device 45
2099+#define XEN_DOMCTL_deassign_device 47
2100+struct xen_domctl_assign_device {
2101+ uint32_t machine_bdf; /* machine PCI ID of assigned device */
2102+};
2103+typedef struct xen_domctl_assign_device xen_domctl_assign_device_t;
2104+DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t);
2105+
2106+/* Retrieve sibling devices infomation of machine_bdf */
2107+#define XEN_DOMCTL_get_device_group 50
2108+struct xen_domctl_get_device_group {
2109+ uint32_t machine_bdf; /* IN */
2110+ uint32_t max_sdevs; /* IN */
2111+ uint32_t num_sdevs; /* OUT */
2112+ XEN_GUEST_HANDLE_64(uint32) sdev_array; /* OUT */
2113+};
2114+typedef struct xen_domctl_get_device_group xen_domctl_get_device_group_t;
2115+DEFINE_XEN_GUEST_HANDLE(xen_domctl_get_device_group_t);
2116+
2117+/* Pass-through interrupts: bind real irq -> hvm devfn. */
2118+#define XEN_DOMCTL_bind_pt_irq 38
2119+#define XEN_DOMCTL_unbind_pt_irq 48
2120+typedef enum pt_irq_type_e {
2121+ PT_IRQ_TYPE_PCI,
2122+ PT_IRQ_TYPE_ISA,
2123+ PT_IRQ_TYPE_MSI,
2124+} pt_irq_type_t;
2125+struct xen_domctl_bind_pt_irq {
2126+ uint32_t machine_irq;
2127+ pt_irq_type_t irq_type;
2128+ uint32_t hvm_domid;
2129+
2130+ union {
2131+ struct {
2132+ uint8_t isa_irq;
2133+ } isa;
2134+ struct {
2135+ uint8_t bus;
2136+ uint8_t device;
2137+ uint8_t intx;
2138+ } pci;
2139+ struct {
2140+ uint8_t gvec;
2141+ uint32_t gflags;
2142+ } msi;
2143+ } u;
2144+};
2145+typedef struct xen_domctl_bind_pt_irq xen_domctl_bind_pt_irq_t;
2146+DEFINE_XEN_GUEST_HANDLE(xen_domctl_bind_pt_irq_t);
2147+
2148+
2149+/* Bind machine I/O address range -> HVM address range. */
2150+#define XEN_DOMCTL_memory_mapping 39
2151+#define DPCI_ADD_MAPPING 1
2152+#define DPCI_REMOVE_MAPPING 0
2153+struct xen_domctl_memory_mapping {
2154+ uint64_aligned_t first_gfn; /* first page (hvm guest phys page) in range */
2155+ uint64_aligned_t first_mfn; /* first page (machine page) in range */
2156+ uint64_aligned_t nr_mfns; /* number of pages in range (>0) */
2157+ uint32_t add_mapping; /* add or remove mapping */
2158+ uint32_t padding; /* padding for 64-bit aligned structure */
2159+};
2160+typedef struct xen_domctl_memory_mapping xen_domctl_memory_mapping_t;
2161+DEFINE_XEN_GUEST_HANDLE(xen_domctl_memory_mapping_t);
2162+
2163+
2164+/* Bind machine I/O port range -> HVM I/O port range. */
2165+#define XEN_DOMCTL_ioport_mapping 40
2166+struct xen_domctl_ioport_mapping {
2167+ uint32_t first_gport; /* first guest IO port*/
2168+ uint32_t first_mport; /* first machine IO port */
2169+ uint32_t nr_ports; /* size of port range */
2170+ uint32_t add_mapping; /* add or remove mapping */
2171+};
2172+typedef struct xen_domctl_ioport_mapping xen_domctl_ioport_mapping_t;
2173+DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_mapping_t);
2174+
2175+
2176+/*
2177+ * Pin caching type of RAM space for x86 HVM domU.
2178+ */
2179+#define XEN_DOMCTL_pin_mem_cacheattr 41
2180+/* Caching types: these happen to be the same as x86 MTRR/PAT type codes. */
2181+#define XEN_DOMCTL_MEM_CACHEATTR_UC 0
2182+#define XEN_DOMCTL_MEM_CACHEATTR_WC 1
2183+#define XEN_DOMCTL_MEM_CACHEATTR_WT 4
2184+#define XEN_DOMCTL_MEM_CACHEATTR_WP 5
2185+#define XEN_DOMCTL_MEM_CACHEATTR_WB 6
2186+#define XEN_DOMCTL_MEM_CACHEATTR_UCM 7
2187+struct xen_domctl_pin_mem_cacheattr {
2188+ uint64_aligned_t start, end;
2189+ unsigned int type; /* XEN_DOMCTL_MEM_CACHEATTR_* */
2190+};
2191+typedef struct xen_domctl_pin_mem_cacheattr xen_domctl_pin_mem_cacheattr_t;
2192+DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t);
2193+
2194+
2195+#define XEN_DOMCTL_set_ext_vcpucontext 42
2196+#define XEN_DOMCTL_get_ext_vcpucontext 43
2197+struct xen_domctl_ext_vcpucontext {
2198+ /* IN: VCPU that this call applies to. */
2199+ uint32_t vcpu;
2200+ /*
2201+ * SET: Size of struct (IN)
2202+ * GET: Size of struct (OUT)
2203+ */
2204+ uint32_t size;
2205+#if defined(__i386__) || defined(__x86_64__)
2206+ /* SYSCALL from 32-bit mode and SYSENTER callback information. */
2207+ /* NB. SYSCALL from 64-bit mode is contained in vcpu_guest_context_t */
2208+ uint64_aligned_t syscall32_callback_eip;
2209+ uint64_aligned_t sysenter_callback_eip;
2210+ uint16_t syscall32_callback_cs;
2211+ uint16_t sysenter_callback_cs;
2212+ uint8_t syscall32_disables_events;
2213+ uint8_t sysenter_disables_events;
2214+#endif
2215+};
2216+typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t;
2217+DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpucontext_t);
2218+
2219+/*
2220+ * Set optimizaton features for a domain
2221+ */
2222+#define XEN_DOMCTL_set_opt_feature 44
2223+struct xen_domctl_set_opt_feature {
2224+#if defined(__ia64__)
2225+ struct xen_ia64_opt_feature optf;
2226+#else
2227+ /* Make struct non-empty: do not depend on this field name! */
2228+ uint64_t dummy;
2229+#endif
2230+};
2231+typedef struct xen_domctl_set_opt_feature xen_domctl_set_opt_feature_t;
2232+DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_opt_feature_t);
2233+
2234+/*
2235+ * Set the target domain for a domain
2236+ */
2237+#define XEN_DOMCTL_set_target 46
2238+struct xen_domctl_set_target {
2239+ domid_t target;
2240+};
2241+typedef struct xen_domctl_set_target xen_domctl_set_target_t;
2242+DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t);
2243+
2244+#if defined(__i386__) || defined(__x86_64__)
2245+# define XEN_CPUID_INPUT_UNUSED 0xFFFFFFFF
2246+# define XEN_DOMCTL_set_cpuid 49
2247+struct xen_domctl_cpuid {
2248+ unsigned int input[2];
2249+ unsigned int eax;
2250+ unsigned int ebx;
2251+ unsigned int ecx;
2252+ unsigned int edx;
2253+};
2254+typedef struct xen_domctl_cpuid xen_domctl_cpuid_t;
2255+DEFINE_XEN_GUEST_HANDLE(xen_domctl_cpuid_t);
2256+#endif
2257+
2258+#define XEN_DOMCTL_subscribe 29
2259+struct xen_domctl_subscribe {
2260+ uint32_t port; /* IN */
2261+};
2262+typedef struct xen_domctl_subscribe xen_domctl_subscribe_t;
2263+DEFINE_XEN_GUEST_HANDLE(xen_domctl_subscribe_t);
2264+
2265+/*
2266+ * Define the maximum machine address size which should be allocated
2267+ * to a guest.
2268+ */
2269+#define XEN_DOMCTL_set_machine_address_size 51
2270+#define XEN_DOMCTL_get_machine_address_size 52
2271+
2272+/*
2273+ * Do not inject spurious page faults into this domain.
2274+ */
2275+#define XEN_DOMCTL_suppress_spurious_page_faults 53
2276+
2277+struct xen_domctl {
2278+ uint32_t cmd;
2279+ uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
2280+ domid_t domain;
2281+ union {
2282+ struct xen_domctl_createdomain createdomain;
2283+ struct xen_domctl_getdomaininfo getdomaininfo;
2284+ struct xen_domctl_getmemlist getmemlist;
2285+ struct xen_domctl_getpageframeinfo getpageframeinfo;
2286+ struct xen_domctl_getpageframeinfo2 getpageframeinfo2;
2287+ struct xen_domctl_vcpuaffinity vcpuaffinity;
2288+ struct xen_domctl_shadow_op shadow_op;
2289+ struct xen_domctl_max_mem max_mem;
2290+ struct xen_domctl_vcpucontext vcpucontext;
2291+ struct xen_domctl_getvcpuinfo getvcpuinfo;
2292+ struct xen_domctl_max_vcpus max_vcpus;
2293+ struct xen_domctl_scheduler_op scheduler_op;
2294+ struct xen_domctl_setdomainhandle setdomainhandle;
2295+ struct xen_domctl_setdebugging setdebugging;
2296+ struct xen_domctl_irq_permission irq_permission;
2297+ struct xen_domctl_iomem_permission iomem_permission;
2298+ struct xen_domctl_ioport_permission ioport_permission;
2299+ struct xen_domctl_hypercall_init hypercall_init;
2300+ struct xen_domctl_arch_setup arch_setup;
2301+ struct xen_domctl_settimeoffset settimeoffset;
2302+ struct xen_domctl_real_mode_area real_mode_area;
2303+ struct xen_domctl_hvmcontext hvmcontext;
2304+ struct xen_domctl_address_size address_size;
2305+ struct xen_domctl_sendtrigger sendtrigger;
2306+ struct xen_domctl_get_device_group get_device_group;
2307+ struct xen_domctl_assign_device assign_device;
2308+ struct xen_domctl_bind_pt_irq bind_pt_irq;
2309+ struct xen_domctl_memory_mapping memory_mapping;
2310+ struct xen_domctl_ioport_mapping ioport_mapping;
2311+ struct xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
2312+ struct xen_domctl_ext_vcpucontext ext_vcpucontext;
2313+ struct xen_domctl_set_opt_feature set_opt_feature;
2314+ struct xen_domctl_set_target set_target;
2315+ struct xen_domctl_subscribe subscribe;
2316+#if defined(__i386__) || defined(__x86_64__)
2317+ struct xen_domctl_cpuid cpuid;
2318+#endif
2319+ uint8_t pad[128];
2320+ } u;
2321+};
2322+typedef struct xen_domctl xen_domctl_t;
2323+DEFINE_XEN_GUEST_HANDLE(xen_domctl_t);
2324+
2325+#endif /* __XEN_PUBLIC_DOMCTL_H__ */
2326+
2327+/*
2328+ * Local variables:
2329+ * mode: C
2330+ * c-set-style: "BSD"
2331+ * c-basic-offset: 4
2332+ * tab-width: 4
2333+ * indent-tabs-mode: nil
2334+ * End:
2335+ */
2336Index: head-2008-11-25/include/xen/interface/hvm/e820.h
2337===================================================================
2338--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2339+++ head-2008-11-25/include/xen/interface/hvm/e820.h 2007-06-12 13:14:19.000000000 +0200
2340@@ -0,0 +1,34 @@
2341+
2342+/*
2343+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2344+ * of this software and associated documentation files (the "Software"), to
2345+ * deal in the Software without restriction, including without limitation the
2346+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2347+ * sell copies of the Software, and to permit persons to whom the Software is
2348+ * furnished to do so, subject to the following conditions:
2349+ *
2350+ * The above copyright notice and this permission notice shall be included in
2351+ * all copies or substantial portions of the Software.
2352+ *
2353+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2354+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2355+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2356+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2357+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2358+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2359+ * DEALINGS IN THE SOFTWARE.
2360+ */
2361+
2362+#ifndef __XEN_PUBLIC_HVM_E820_H__
2363+#define __XEN_PUBLIC_HVM_E820_H__
2364+
2365+/* E820 location in HVM virtual address space. */
2366+#define HVM_E820_PAGE 0x00090000
2367+#define HVM_E820_NR_OFFSET 0x000001E8
2368+#define HVM_E820_OFFSET 0x000002D0
2369+
2370+#define HVM_BELOW_4G_RAM_END 0xF0000000
2371+#define HVM_BELOW_4G_MMIO_START HVM_BELOW_4G_RAM_END
2372+#define HVM_BELOW_4G_MMIO_LENGTH ((1ULL << 32) - HVM_BELOW_4G_MMIO_START)
2373+
2374+#endif /* __XEN_PUBLIC_HVM_E820_H__ */
2375Index: head-2008-11-25/include/xen/interface/hvm/hvm_info_table.h
2376===================================================================
2377--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2378+++ head-2008-11-25/include/xen/interface/hvm/hvm_info_table.h 2007-06-12 13:14:19.000000000 +0200
2379@@ -0,0 +1,41 @@
2380+/******************************************************************************
2381+ * hvm/hvm_info_table.h
2382+ *
2383+ * HVM parameter and information table, written into guest memory map.
2384+ *
2385+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2386+ * of this software and associated documentation files (the "Software"), to
2387+ * deal in the Software without restriction, including without limitation the
2388+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2389+ * sell copies of the Software, and to permit persons to whom the Software is
2390+ * furnished to do so, subject to the following conditions:
2391+ *
2392+ * The above copyright notice and this permission notice shall be included in
2393+ * all copies or substantial portions of the Software.
2394+ *
2395+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2396+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2397+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2398+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2399+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2400+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2401+ * DEALINGS IN THE SOFTWARE.
2402+ */
2403+
2404+#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
2405+#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
2406+
2407+#define HVM_INFO_PFN 0x09F
2408+#define HVM_INFO_OFFSET 0x800
2409+#define HVM_INFO_PADDR ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
2410+
2411+struct hvm_info_table {
2412+ char signature[8]; /* "HVM INFO" */
2413+ uint32_t length;
2414+ uint8_t checksum;
2415+ uint8_t acpi_enabled;
2416+ uint8_t apic_mode;
2417+ uint32_t nr_vcpus;
2418+};
2419+
2420+#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
2421Index: head-2008-11-25/include/xen/interface/hvm/hvm_op.h
2422===================================================================
2423--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2424+++ head-2008-11-25/include/xen/interface/hvm/hvm_op.h 2008-09-01 12:07:31.000000000 +0200
2425@@ -0,0 +1,131 @@
2426+/*
2427+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2428+ * of this software and associated documentation files (the "Software"), to
2429+ * deal in the Software without restriction, including without limitation the
2430+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2431+ * sell copies of the Software, and to permit persons to whom the Software is
2432+ * furnished to do so, subject to the following conditions:
2433+ *
2434+ * The above copyright notice and this permission notice shall be included in
2435+ * all copies or substantial portions of the Software.
2436+ *
2437+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2438+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2439+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2440+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2441+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2442+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2443+ * DEALINGS IN THE SOFTWARE.
2444+ */
2445+
2446+#ifndef __XEN_PUBLIC_HVM_HVM_OP_H__
2447+#define __XEN_PUBLIC_HVM_HVM_OP_H__
2448+
2449+/* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */
2450+#define HVMOP_set_param 0
2451+#define HVMOP_get_param 1
2452+struct xen_hvm_param {
2453+ domid_t domid; /* IN */
2454+ uint32_t index; /* IN */
2455+ uint64_t value; /* IN/OUT */
2456+};
2457+typedef struct xen_hvm_param xen_hvm_param_t;
2458+DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
2459+
2460+/* Set the logical level of one of a domain's PCI INTx wires. */
2461+#define HVMOP_set_pci_intx_level 2
2462+struct xen_hvm_set_pci_intx_level {
2463+ /* Domain to be updated. */
2464+ domid_t domid;
2465+ /* PCI INTx identification in PCI topology (domain:bus:device:intx). */
2466+ uint8_t domain, bus, device, intx;
2467+ /* Assertion level (0 = unasserted, 1 = asserted). */
2468+ uint8_t level;
2469+};
2470+typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t;
2471+DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t);
2472+
2473+/* Set the logical level of one of a domain's ISA IRQ wires. */
2474+#define HVMOP_set_isa_irq_level 3
2475+struct xen_hvm_set_isa_irq_level {
2476+ /* Domain to be updated. */
2477+ domid_t domid;
2478+ /* ISA device identification, by ISA IRQ (0-15). */
2479+ uint8_t isa_irq;
2480+ /* Assertion level (0 = unasserted, 1 = asserted). */
2481+ uint8_t level;
2482+};
2483+typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t;
2484+DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t);
2485+
2486+#define HVMOP_set_pci_link_route 4
2487+struct xen_hvm_set_pci_link_route {
2488+ /* Domain to be updated. */
2489+ domid_t domid;
2490+ /* PCI link identifier (0-3). */
2491+ uint8_t link;
2492+ /* ISA IRQ (1-15), or 0 (disable link). */
2493+ uint8_t isa_irq;
2494+};
2495+typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t;
2496+DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t);
2497+
2498+/* Flushes all VCPU TLBs: @arg must be NULL. */
2499+#define HVMOP_flush_tlbs 5
2500+
2501+/* Following tools-only interfaces may change in future. */
2502+#if defined(__XEN__) || defined(__XEN_TOOLS__)
2503+
2504+/* Track dirty VRAM. */
2505+#define HVMOP_track_dirty_vram 6
2506+struct xen_hvm_track_dirty_vram {
2507+ /* Domain to be tracked. */
2508+ domid_t domid;
2509+ /* First pfn to track. */
2510+ uint64_aligned_t first_pfn;
2511+ /* Number of pages to track. */
2512+ uint64_aligned_t nr;
2513+ /* OUT variable. */
2514+ /* Dirty bitmap buffer. */
2515+ XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
2516+};
2517+typedef struct xen_hvm_track_dirty_vram xen_hvm_track_dirty_vram_t;
2518+DEFINE_XEN_GUEST_HANDLE(xen_hvm_track_dirty_vram_t);
2519+
2520+/* Notify that some pages got modified by the Device Model. */
2521+#define HVMOP_modified_memory 7
2522+struct xen_hvm_modified_memory {
2523+ /* Domain to be updated. */
2524+ domid_t domid;
2525+ /* First pfn. */
2526+ uint64_aligned_t first_pfn;
2527+ /* Number of pages. */
2528+ uint64_aligned_t nr;
2529+};
2530+typedef struct xen_hvm_modified_memory xen_hvm_modified_memory_t;
2531+DEFINE_XEN_GUEST_HANDLE(xen_hvm_modified_memory_t);
2532+
2533+#define HVMOP_set_mem_type 8
2534+typedef enum {
2535+ HVMMEM_ram_rw, /* Normal read/write guest RAM */
2536+ HVMMEM_ram_ro, /* Read-only; writes are discarded */
2537+ HVMMEM_mmio_dm, /* Reads and write go to the device model */
2538+} hvmmem_type_t;
2539+/* Notify that a region of memory is to be treated in a specific way. */
2540+struct xen_hvm_set_mem_type {
2541+ /* Domain to be updated. */
2542+ domid_t domid;
2543+ /* Memory type */
2544+ hvmmem_type_t hvmmem_type;
2545+ /* First pfn. */
2546+ uint64_aligned_t first_pfn;
2547+ /* Number of pages. */
2548+ uint64_aligned_t nr;
2549+};
2550+typedef struct xen_hvm_set_mem_type xen_hvm_set_mem_type_t;
2551+DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_type_t);
2552+
2553+
2554+#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
2555+
2556+#endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */
2557Index: head-2008-11-25/include/xen/interface/hvm/ioreq.h
2558===================================================================
2559--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2560+++ head-2008-11-25/include/xen/interface/hvm/ioreq.h 2008-04-02 12:34:02.000000000 +0200
2561@@ -0,0 +1,127 @@
2562+/*
2563+ * ioreq.h: I/O request definitions for device models
2564+ * Copyright (c) 2004, Intel Corporation.
2565+ *
2566+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2567+ * of this software and associated documentation files (the "Software"), to
2568+ * deal in the Software without restriction, including without limitation the
2569+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2570+ * sell copies of the Software, and to permit persons to whom the Software is
2571+ * furnished to do so, subject to the following conditions:
2572+ *
2573+ * The above copyright notice and this permission notice shall be included in
2574+ * all copies or substantial portions of the Software.
2575+ *
2576+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2577+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2578+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2579+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2580+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2581+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2582+ * DEALINGS IN THE SOFTWARE.
2583+ */
2584+
2585+#ifndef _IOREQ_H_
2586+#define _IOREQ_H_
2587+
2588+#define IOREQ_READ 1
2589+#define IOREQ_WRITE 0
2590+
2591+#define STATE_IOREQ_NONE 0
2592+#define STATE_IOREQ_READY 1
2593+#define STATE_IOREQ_INPROCESS 2
2594+#define STATE_IORESP_READY 3
2595+
2596+#define IOREQ_TYPE_PIO 0 /* pio */
2597+#define IOREQ_TYPE_COPY 1 /* mmio ops */
2598+#define IOREQ_TYPE_TIMEOFFSET 7
2599+#define IOREQ_TYPE_INVALIDATE 8 /* mapcache */
2600+
2601+/*
2602+ * VMExit dispatcher should cooperate with instruction decoder to
2603+ * prepare this structure and notify service OS and DM by sending
2604+ * virq
2605+ */
2606+struct ioreq {
2607+ uint64_t addr; /* physical address */
2608+ uint64_t size; /* size in bytes */
2609+ uint64_t count; /* for rep prefixes */
2610+ uint64_t data; /* data (or paddr of data) */
2611+ uint8_t state:4;
2612+ uint8_t data_is_ptr:1; /* if 1, data above is the guest paddr
2613+ * of the real data to use. */
2614+ uint8_t dir:1; /* 1=read, 0=write */
2615+ uint8_t df:1;
2616+ uint8_t pad:1;
2617+ uint8_t type; /* I/O type */
2618+ uint8_t _pad0[6];
2619+ uint64_t io_count; /* How many IO done on a vcpu */
2620+};
2621+typedef struct ioreq ioreq_t;
2622+
2623+struct vcpu_iodata {
2624+ struct ioreq vp_ioreq;
2625+ /* Event channel port, used for notifications to/from the device model. */
2626+ uint32_t vp_eport;
2627+ uint32_t _pad0;
2628+};
2629+typedef struct vcpu_iodata vcpu_iodata_t;
2630+
2631+struct shared_iopage {
2632+ struct vcpu_iodata vcpu_iodata[1];
2633+};
2634+typedef struct shared_iopage shared_iopage_t;
2635+
2636+struct buf_ioreq {
2637+ uint8_t type; /* I/O type */
2638+ uint8_t pad:1;
2639+ uint8_t dir:1; /* 1=read, 0=write */
2640+ uint8_t size:2; /* 0=>1, 1=>2, 2=>4, 3=>8. If 8, use two buf_ioreqs */
2641+ uint32_t addr:20;/* physical address */
2642+ uint32_t data; /* data */
2643+};
2644+typedef struct buf_ioreq buf_ioreq_t;
2645+
2646+#define IOREQ_BUFFER_SLOT_NUM 511 /* 8 bytes each, plus 2 4-byte indexes */
2647+struct buffered_iopage {
2648+ unsigned int read_pointer;
2649+ unsigned int write_pointer;
2650+ buf_ioreq_t buf_ioreq[IOREQ_BUFFER_SLOT_NUM];
2651+}; /* NB. Size of this structure must be no greater than one page. */
2652+typedef struct buffered_iopage buffered_iopage_t;
2653+
2654+#if defined(__ia64__)
2655+struct pio_buffer {
2656+ uint32_t page_offset;
2657+ uint32_t pointer;
2658+ uint32_t data_end;
2659+ uint32_t buf_size;
2660+ void *opaque;
2661+};
2662+
2663+#define PIO_BUFFER_IDE_PRIMARY 0 /* I/O port = 0x1F0 */
2664+#define PIO_BUFFER_IDE_SECONDARY 1 /* I/O port = 0x170 */
2665+#define PIO_BUFFER_ENTRY_NUM 2
2666+struct buffered_piopage {
2667+ struct pio_buffer pio[PIO_BUFFER_ENTRY_NUM];
2668+ uint8_t buffer[1];
2669+};
2670+#endif /* defined(__ia64__) */
2671+
2672+#define ACPI_PM1A_EVT_BLK_ADDRESS 0x0000000000001f40
2673+#define ACPI_PM1A_CNT_BLK_ADDRESS (ACPI_PM1A_EVT_BLK_ADDRESS + 0x04)
2674+#define ACPI_PM_TMR_BLK_ADDRESS (ACPI_PM1A_EVT_BLK_ADDRESS + 0x08)
2675+#define ACPI_GPE0_BLK_ADDRESS (ACPI_PM_TMR_BLK_ADDRESS + 0x20)
2676+#define ACPI_GPE0_BLK_LEN 0x08
2677+
2678+#endif /* _IOREQ_H_ */
2679+
2680+/*
2681+ * Local variables:
2682+ * mode: C
2683+ * c-set-style: "BSD"
2684+ * c-basic-offset: 4
2685+ * tab-width: 4
2686+ * indent-tabs-mode: nil
2687+ * End:
2688+ */
2689Index: head-2008-11-25/include/xen/interface/hvm/params.h
2690===================================================================
2691--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2692+++ head-2008-11-25/include/xen/interface/hvm/params.h 2008-10-29 09:55:56.000000000 +0100
2693@@ -0,0 +1,105 @@
2694+/*
2695+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2696+ * of this software and associated documentation files (the "Software"), to
2697+ * deal in the Software without restriction, including without limitation the
2698+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2699+ * sell copies of the Software, and to permit persons to whom the Software is
2700+ * furnished to do so, subject to the following conditions:
2701+ *
2702+ * The above copyright notice and this permission notice shall be included in
2703+ * all copies or substantial portions of the Software.
2704+ *
2705+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2706+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2707+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2708+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2709+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2710+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2711+ * DEALINGS IN THE SOFTWARE.
2712+ */
2713+
2714+#ifndef __XEN_PUBLIC_HVM_PARAMS_H__
2715+#define __XEN_PUBLIC_HVM_PARAMS_H__
2716+
2717+#include "hvm_op.h"
2718+
2719+/*
2720+ * Parameter space for HVMOP_{set,get}_param.
2721+ */
2722+
2723+/*
2724+ * How should CPU0 event-channel notifications be delivered?
2725+ * val[63:56] == 0: val[55:0] is a delivery GSI (Global System Interrupt).
2726+ * val[63:56] == 1: val[55:0] is a delivery PCI INTx line, as follows:
2727+ * Domain = val[47:32], Bus = val[31:16],
2728+ * DevFn = val[15: 8], IntX = val[ 1: 0]
2729+ * If val == 0 then CPU0 event-channel notifications are not delivered.
2730+ */
2731+#define HVM_PARAM_CALLBACK_IRQ 0
2732+
2733+/*
2734+ * These are not used by Xen. They are here for convenience of HVM-guest
2735+ * xenbus implementations.
2736+ */
2737+#define HVM_PARAM_STORE_PFN 1
2738+#define HVM_PARAM_STORE_EVTCHN 2
2739+
2740+#define HVM_PARAM_PAE_ENABLED 4
2741+
2742+#define HVM_PARAM_IOREQ_PFN 5
2743+
2744+#define HVM_PARAM_BUFIOREQ_PFN 6
2745+
2746+#ifdef __ia64__
2747+
2748+#define HVM_PARAM_NVRAM_FD 7
2749+#define HVM_PARAM_VHPT_SIZE 8
2750+#define HVM_PARAM_BUFPIOREQ_PFN 9
2751+
2752+#elif defined(__i386__) || defined(__x86_64__)
2753+
2754+/* Expose Viridian interfaces to this HVM guest? */
2755+#define HVM_PARAM_VIRIDIAN 9
2756+
2757+#endif
2758+
2759+/*
2760+ * Set mode for virtual timers (currently x86 only):
2761+ * delay_for_missed_ticks (default):
2762+ * Do not advance a vcpu's time beyond the correct delivery time for
2763+ * interrupts that have been missed due to preemption. Deliver missed
2764+ * interrupts when the vcpu is rescheduled and advance the vcpu's virtual
2765+ * time stepwise for each one.
2766+ * no_delay_for_missed_ticks:
2767+ * As above, missed interrupts are delivered, but guest time always tracks
2768+ * wallclock (i.e., real) time while doing so.
2769+ * no_missed_ticks_pending:
2770+ * No missed interrupts are held pending. Instead, to ensure ticks are
2771+ * delivered at some non-zero rate, if we detect missed ticks then the
2772+ * internal tick alarm is not disabled if the VCPU is preempted during the
2773+ * next tick period.
2774+ * one_missed_tick_pending:
2775+ * Missed interrupts are collapsed together and delivered as one 'late tick'.
2776+ * Guest time always tracks wallclock (i.e., real) time.
2777+ */
2778+#define HVM_PARAM_TIMER_MODE 10
2779+#define HVMPTM_delay_for_missed_ticks 0
2780+#define HVMPTM_no_delay_for_missed_ticks 1
2781+#define HVMPTM_no_missed_ticks_pending 2
2782+#define HVMPTM_one_missed_tick_pending 3
2783+
2784+/* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */
2785+#define HVM_PARAM_HPET_ENABLED 11
2786+
2787+/* Identity-map page directory used by Intel EPT when CR0.PG=0. */
2788+#define HVM_PARAM_IDENT_PT 12
2789+
2790+/* Device Model domain, defaults to 0. */
2791+#define HVM_PARAM_DM_DOMAIN 13
2792+
2793+/* ACPI S state: currently support S0 and S3 on x86. */
2794+#define HVM_PARAM_ACPI_S_STATE 14
2795+
2796+#define HVM_NR_PARAMS 15
2797+
2798+#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
2799Index: head-2008-11-25/include/xen/interface/hvm/save.h
2800===================================================================
2801--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2802+++ head-2008-11-25/include/xen/interface/hvm/save.h 2008-04-02 12:34:02.000000000 +0200
2803@@ -0,0 +1,88 @@
2804+/*
2805+ * hvm/save.h
2806+ *
2807+ * Structure definitions for HVM state that is held by Xen and must
2808+ * be saved along with the domain's memory and device-model state.
2809+ *
2810+ * Copyright (c) 2007 XenSource Ltd.
2811+ *
2812+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2813+ * of this software and associated documentation files (the "Software"), to
2814+ * deal in the Software without restriction, including without limitation the
2815+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2816+ * sell copies of the Software, and to permit persons to whom the Software is
2817+ * furnished to do so, subject to the following conditions:
2818+ *
2819+ * The above copyright notice and this permission notice shall be included in
2820+ * all copies or substantial portions of the Software.
2821+ *
2822+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2823+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2824+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2825+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2826+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2827+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2828+ * DEALINGS IN THE SOFTWARE.
2829+ */
2830+
2831+#ifndef __XEN_PUBLIC_HVM_SAVE_H__
2832+#define __XEN_PUBLIC_HVM_SAVE_H__
2833+
2834+/*
2835+ * Structures in this header *must* have the same layout in 32bit
2836+ * and 64bit environments: this means that all fields must be explicitly
2837+ * sized types and aligned to their sizes, and the structs must be
2838+ * a multiple of eight bytes long.
2839+ *
2840+ * Only the state necessary for saving and restoring (i.e. fields
2841+ * that are analogous to actual hardware state) should go in this file.
2842+ * Internal mechanisms should be kept in Xen-private headers.
2843+ */
2844+
2845+#if !defined(__GNUC__) || defined(__STRICT_ANSI__)
2846+#error "Anonymous structs/unions are a GNU extension."
2847+#endif
2848+
2849+/*
2850+ * Each entry is preceded by a descriptor giving its type and length
2851+ */
2852+struct hvm_save_descriptor {
2853+ uint16_t typecode; /* Used to demux the various types below */
2854+ uint16_t instance; /* Further demux within a type */
2855+ uint32_t length; /* In bytes, *not* including this descriptor */
2856+};
2857+
2858+
2859+/*
2860+ * Each entry has a datatype associated with it: for example, the CPU state
2861+ * is saved as a HVM_SAVE_TYPE(CPU), which has HVM_SAVE_LENGTH(CPU),
2862+ * and is identified by a descriptor with typecode HVM_SAVE_CODE(CPU).
2863+ * DECLARE_HVM_SAVE_TYPE binds these things together with some type-system
2864+ * ugliness.
2865+ */
2866+
2867+#define DECLARE_HVM_SAVE_TYPE(_x, _code, _type) \
2868+ struct __HVM_SAVE_TYPE_##_x { _type t; char c[_code]; }
2869+
2870+#define HVM_SAVE_TYPE(_x) typeof (((struct __HVM_SAVE_TYPE_##_x *)(0))->t)
2871+#define HVM_SAVE_LENGTH(_x) (sizeof (HVM_SAVE_TYPE(_x)))
2872+#define HVM_SAVE_CODE(_x) (sizeof (((struct __HVM_SAVE_TYPE_##_x *)(0))->c))
2873+
2874+
2875+/*
2876+ * The series of save records is teminated by a zero-type, zero-length
2877+ * descriptor.
2878+ */
2879+
2880+struct hvm_save_end {};
2881+DECLARE_HVM_SAVE_TYPE(END, 0, struct hvm_save_end);
2882+
2883+#if defined(__i386__) || defined(__x86_64__)
2884+#include "../arch-x86/hvm/save.h"
2885+#elif defined(__ia64__)
2886+#include "../arch-ia64/hvm/save.h"
2887+#else
2888+#error "unsupported architecture"
2889+#endif
2890+
2891+#endif /* __XEN_PUBLIC_HVM_SAVE_H__ */
2892Index: head-2008-11-25/include/xen/interface/io/fsif.h
2893===================================================================
2894--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2895+++ head-2008-11-25/include/xen/interface/io/fsif.h 2008-09-01 12:07:31.000000000 +0200
2896@@ -0,0 +1,191 @@
2897+/******************************************************************************
2898+ * fsif.h
2899+ *
2900+ * Interface to FS level split device drivers.
2901+ *
2902+ * Permission is hereby granted, free of charge, to any person obtaining a copy
2903+ * of this software and associated documentation files (the "Software"), to
2904+ * deal in the Software without restriction, including without limitation the
2905+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2906+ * sell copies of the Software, and to permit persons to whom the Software is
2907+ * furnished to do so, subject to the following conditions:
2908+ *
2909+ * The above copyright notice and this permission notice shall be included in
2910+ * all copies or substantial portions of the Software.
2911+ *
2912+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2913+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2914+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2915+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2916+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2917+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2918+ * DEALINGS IN THE SOFTWARE.
2919+ *
2920+ * Copyright (c) 2007, Grzegorz Milos, <gm281@cam.ac.uk>.
2921+ */
2922+
2923+#ifndef __XEN_PUBLIC_IO_FSIF_H__
2924+#define __XEN_PUBLIC_IO_FSIF_H__
2925+
2926+#include "ring.h"
2927+#include "../grant_table.h"
2928+
2929+#define REQ_FILE_OPEN 1
2930+#define REQ_FILE_CLOSE 2
2931+#define REQ_FILE_READ 3
2932+#define REQ_FILE_WRITE 4
2933+#define REQ_STAT 5
2934+#define REQ_FILE_TRUNCATE 6
2935+#define REQ_REMOVE 7
2936+#define REQ_RENAME 8
2937+#define REQ_CREATE 9
2938+#define REQ_DIR_LIST 10
2939+#define REQ_CHMOD 11
2940+#define REQ_FS_SPACE 12
2941+#define REQ_FILE_SYNC 13
2942+
2943+struct fsif_open_request {
2944+ grant_ref_t gref;
2945+};
2946+
2947+struct fsif_close_request {
2948+ uint32_t fd;
2949+};
2950+
2951+struct fsif_read_request {
2952+ uint32_t fd;
2953+ int32_t pad;
2954+ uint64_t len;
2955+ uint64_t offset;
2956+ grant_ref_t grefs[1]; /* Variable length */
2957+};
2958+
2959+struct fsif_write_request {
2960+ uint32_t fd;
2961+ int32_t pad;
2962+ uint64_t len;
2963+ uint64_t offset;
2964+ grant_ref_t grefs[1]; /* Variable length */
2965+};
2966+
2967+struct fsif_stat_request {
2968+ uint32_t fd;
2969+};
2970+
2971+/* This structure is a copy of some fields from stat structure, returned
2972+ * via the ring. */
2973+struct fsif_stat_response {
2974+ int32_t stat_mode;
2975+ uint32_t stat_uid;
2976+ uint32_t stat_gid;
2977+ int32_t stat_ret;
2978+ int64_t stat_size;
2979+ int64_t stat_atime;
2980+ int64_t stat_mtime;
2981+ int64_t stat_ctime;
2982+};
2983+
2984+struct fsif_truncate_request {
2985+ uint32_t fd;
2986+ int32_t pad;
2987+ int64_t length;
2988+};
2989+
2990+struct fsif_remove_request {
2991+ grant_ref_t gref;
2992+};
2993+
2994+struct fsif_rename_request {
2995+ uint16_t old_name_offset;
2996+ uint16_t new_name_offset;
2997+ grant_ref_t gref;
2998+};
2999+
3000+struct fsif_create_request {
3001+ int8_t directory;
3002+ int8_t pad;
3003+ int16_t pad2;
3004+ int32_t mode;
3005+ grant_ref_t gref;
3006+};
3007+
3008+struct fsif_list_request {
3009+ uint32_t offset;
3010+ grant_ref_t gref;
3011+};
3012+
3013+#define NR_FILES_SHIFT 0
3014+#define NR_FILES_SIZE 16 /* 16 bits for the number of files mask */
3015+#define NR_FILES_MASK (((1ULL << NR_FILES_SIZE) - 1) << NR_FILES_SHIFT)
3016+#define ERROR_SIZE 32 /* 32 bits for the error mask */
3017+#define ERROR_SHIFT (NR_FILES_SIZE + NR_FILES_SHIFT)
3018+#define ERROR_MASK (((1ULL << ERROR_SIZE) - 1) << ERROR_SHIFT)
3019+#define HAS_MORE_SHIFT (ERROR_SHIFT + ERROR_SIZE)
3020+#define HAS_MORE_FLAG (1ULL << HAS_MORE_SHIFT)
3021+
3022+struct fsif_chmod_request {
3023+ uint32_t fd;
3024+ int32_t mode;
3025+};
3026+
3027+struct fsif_space_request {
3028+ grant_ref_t gref;
3029+};
3030+
3031+struct fsif_sync_request {
3032+ uint32_t fd;
3033+};
3034+
3035+
3036+/* FS operation request */
3037+struct fsif_request {
3038+ uint8_t type; /* Type of the request */
3039+ uint8_t pad;
3040+ uint16_t id; /* Request ID, copied to the response */
3041+ uint32_t pad2;
3042+ union {
3043+ struct fsif_open_request fopen;
3044+ struct fsif_close_request fclose;
3045+ struct fsif_read_request fread;
3046+ struct fsif_write_request fwrite;
3047+ struct fsif_stat_request fstat;
3048+ struct fsif_truncate_request ftruncate;
3049+ struct fsif_remove_request fremove;
3050+ struct fsif_rename_request frename;
3051+ struct fsif_create_request fcreate;
3052+ struct fsif_list_request flist;
3053+ struct fsif_chmod_request fchmod;
3054+ struct fsif_space_request fspace;
3055+ struct fsif_sync_request fsync;
3056+ } u;
3057+};
3058+typedef struct fsif_request fsif_request_t;
3059+
3060+/* FS operation response */
3061+struct fsif_response {
3062+ uint16_t id;
3063+ uint16_t pad1;
3064+ uint32_t pad2;
3065+ union {
3066+ uint64_t ret_val;
3067+ struct fsif_stat_response fstat;
3068+ };
3069+};
3070+
3071+typedef struct fsif_response fsif_response_t;
3072+
3073+#define FSIF_RING_ENTRY_SIZE 64
3074+
3075+#define FSIF_NR_READ_GNTS ((FSIF_RING_ENTRY_SIZE - sizeof(struct fsif_read_request)) / \
3076+ sizeof(grant_ref_t) + 1)
3077+#define FSIF_NR_WRITE_GNTS ((FSIF_RING_ENTRY_SIZE - sizeof(struct fsif_write_request)) / \
3078+ sizeof(grant_ref_t) + 1)
3079+
3080+DEFINE_RING_TYPES(fsif, struct fsif_request, struct fsif_response);
3081+
3082+#define STATE_INITIALISED "init"
3083+#define STATE_READY "ready"
3084+
3085+
3086+
3087+#endif
3088Index: head-2008-11-25/include/xen/interface/io/pciif.h
3089===================================================================
3090--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3091+++ head-2008-11-25/include/xen/interface/io/pciif.h 2008-07-21 11:00:33.000000000 +0200
3092@@ -0,0 +1,101 @@
3093+/*
3094+ * PCI Backend/Frontend Common Data Structures & Macros
3095+ *
3096+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3097+ * of this software and associated documentation files (the "Software"), to
3098+ * deal in the Software without restriction, including without limitation the
3099+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3100+ * sell copies of the Software, and to permit persons to whom the Software is
3101+ * furnished to do so, subject to the following conditions:
3102+ *
3103+ * The above copyright notice and this permission notice shall be included in
3104+ * all copies or substantial portions of the Software.
3105+ *
3106+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3107+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3108+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3109+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3110+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3111+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
3112+ * DEALINGS IN THE SOFTWARE.
3113+ *
3114+ * Author: Ryan Wilson <hap9@epoch.ncsc.mil>
3115+ */
3116+#ifndef __XEN_PCI_COMMON_H__
3117+#define __XEN_PCI_COMMON_H__
3118+
3119+/* Be sure to bump this number if you change this file */
3120+#define XEN_PCI_MAGIC "7"
3121+
3122+/* xen_pci_sharedinfo flags */
3123+#define _XEN_PCIF_active (0)
3124+#define XEN_PCIF_active (1<<_XEN_PCI_active)
3125+
3126+/* xen_pci_op commands */
3127+#define XEN_PCI_OP_conf_read (0)
3128+#define XEN_PCI_OP_conf_write (1)
3129+#define XEN_PCI_OP_enable_msi (2)
3130+#define XEN_PCI_OP_disable_msi (3)
3131+#define XEN_PCI_OP_enable_msix (4)
3132+#define XEN_PCI_OP_disable_msix (5)
3133+
3134+/* xen_pci_op error numbers */
3135+#define XEN_PCI_ERR_success (0)
3136+#define XEN_PCI_ERR_dev_not_found (-1)
3137+#define XEN_PCI_ERR_invalid_offset (-2)
3138+#define XEN_PCI_ERR_access_denied (-3)
3139+#define XEN_PCI_ERR_not_implemented (-4)
3140+/* XEN_PCI_ERR_op_failed - backend failed to complete the operation */
3141+#define XEN_PCI_ERR_op_failed (-5)
3142+
3143+/*
3144+ * it should be PAGE_SIZE-sizeof(struct xen_pci_op))/sizeof(struct msix_entry))
3145+ * Should not exceed 128
3146+ */
3147+#define SH_INFO_MAX_VEC 128
3148+
3149+struct xen_msix_entry {
3150+ uint16_t vector;
3151+ uint16_t entry;
3152+};
3153+struct xen_pci_op {
3154+ /* IN: what action to perform: XEN_PCI_OP_* */
3155+ uint32_t cmd;
3156+
3157+ /* OUT: will contain an error number (if any) from errno.h */
3158+ int32_t err;
3159+
3160+ /* IN: which device to touch */
3161+ uint32_t domain; /* PCI Domain/Segment */
3162+ uint32_t bus;
3163+ uint32_t devfn;
3164+
3165+ /* IN: which configuration registers to touch */
3166+ int32_t offset;
3167+ int32_t size;
3168+
3169+ /* IN/OUT: Contains the result after a READ or the value to WRITE */
3170+ uint32_t value;
3171+ /* IN: Contains extra infor for this operation */
3172+ uint32_t info;
3173+ /*IN: param for msi-x */
3174+ struct xen_msix_entry msix_entries[SH_INFO_MAX_VEC];
3175+};
3176+
3177+struct xen_pci_sharedinfo {
3178+ /* flags - XEN_PCIF_* */
3179+ uint32_t flags;
3180+ struct xen_pci_op op;
3181+};
3182+
3183+#endif /* __XEN_PCI_COMMON_H__ */
3184+
3185+/*
3186+ * Local variables:
3187+ * mode: C
3188+ * c-set-style: "BSD"
3189+ * c-basic-offset: 4
3190+ * tab-width: 4
3191+ * indent-tabs-mode: nil
3192+ * End:
3193+ */
3194Index: head-2008-11-25/include/xen/interface/io/tpmif.h
3195===================================================================
3196--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3197+++ head-2008-11-25/include/xen/interface/io/tpmif.h 2007-06-12 13:14:19.000000000 +0200
3198@@ -0,0 +1,77 @@
3199+/******************************************************************************
3200+ * tpmif.h
3201+ *
3202+ * TPM I/O interface for Xen guest OSes.
3203+ *
3204+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3205+ * of this software and associated documentation files (the "Software"), to
3206+ * deal in the Software without restriction, including without limitation the
3207+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3208+ * sell copies of the Software, and to permit persons to whom the Software is
3209+ * furnished to do so, subject to the following conditions:
3210+ *
3211+ * The above copyright notice and this permission notice shall be included in
3212+ * all copies or substantial portions of the Software.
3213+ *
3214+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3215+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3216+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3217+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3218+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3219+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
3220+ * DEALINGS IN THE SOFTWARE.
3221+ *
3222+ * Copyright (c) 2005, IBM Corporation
3223+ *
3224+ * Author: Stefan Berger, stefanb@us.ibm.com
3225+ * Grant table support: Mahadevan Gomathisankaran
3226+ *
3227+ * This code has been derived from tools/libxc/xen/io/netif.h
3228+ *
3229+ * Copyright (c) 2003-2004, Keir Fraser
3230+ */
3231+
3232+#ifndef __XEN_PUBLIC_IO_TPMIF_H__
3233+#define __XEN_PUBLIC_IO_TPMIF_H__
3234+
3235+#include "../grant_table.h"
3236+
3237+struct tpmif_tx_request {
3238+ unsigned long addr; /* Machine address of packet. */
3239+ grant_ref_t ref; /* grant table access reference */
3240+ uint16_t unused;
3241+ uint16_t size; /* Packet size in bytes. */
3242+};
3243+typedef struct tpmif_tx_request tpmif_tx_request_t;
3244+
3245+/*
3246+ * The TPMIF_TX_RING_SIZE defines the number of pages the
3247+ * front-end and backend can exchange (= size of array).
3248+ */
3249+typedef uint32_t TPMIF_RING_IDX;
3250+
3251+#define TPMIF_TX_RING_SIZE 1
3252+
3253+/* This structure must fit in a memory page. */
3254+
3255+struct tpmif_ring {
3256+ struct tpmif_tx_request req;
3257+};
3258+typedef struct tpmif_ring tpmif_ring_t;
3259+
3260+struct tpmif_tx_interface {
3261+ struct tpmif_ring ring[TPMIF_TX_RING_SIZE];
3262+};
3263+typedef struct tpmif_tx_interface tpmif_tx_interface_t;
3264+
3265+#endif
3266+
3267+/*
3268+ * Local variables:
3269+ * mode: C
3270+ * c-set-style: "BSD"
3271+ * c-basic-offset: 4
3272+ * tab-width: 4
3273+ * indent-tabs-mode: nil
3274+ * End:
3275+ */
3276Index: head-2008-11-25/include/xen/interface/io/vscsiif.h
3277===================================================================
3278--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3279+++ head-2008-11-25/include/xen/interface/io/vscsiif.h 2008-07-21 11:00:33.000000000 +0200
3280@@ -0,0 +1,105 @@
3281+/******************************************************************************
3282+ * vscsiif.h
3283+ *
3284+ * Based on the blkif.h code.
3285+ *
3286+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3287+ * of this software and associated documentation files (the "Software"), to
3288+ * deal in the Software without restriction, including without limitation the
3289+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3290+ * sell copies of the Software, and to permit persons to whom the Software is
3291+ * furnished to do so, subject to the following conditions:
3292+ *
3293+ * The above copyright notice and this permission notice shall be included in
3294+ * all copies or substantial portions of the Software.
3295+ *
3296+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3297+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3298+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3299+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3300+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3301+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
3302+ * DEALINGS IN THE SOFTWARE.
3303+ *
3304+ * Copyright(c) FUJITSU Limited 2008.
3305+ */
3306+
3307+#ifndef __XEN__PUBLIC_IO_SCSI_H__
3308+#define __XEN__PUBLIC_IO_SCSI_H__
3309+
3310+#include "ring.h"
3311+#include "../grant_table.h"
3312+
3313+/* command between backend and frontend */
3314+#define VSCSIIF_ACT_SCSI_CDB 1 /* SCSI CDB command */
3315+#define VSCSIIF_ACT_SCSI_ABORT 2 /* SCSI Device(Lun) Abort*/
3316+#define VSCSIIF_ACT_SCSI_RESET 3 /* SCSI Device(Lun) Reset*/
3317+
3318+
3319+#define VSCSIIF_BACK_MAX_PENDING_REQS 128
3320+
3321+/*
3322+ * Maximum scatter/gather segments per request.
3323+ *
3324+ * Considering balance between allocating al least 16 "vscsiif_request"
3325+ * structures on one page (4096bytes) and number of scatter gather
3326+ * needed, we decided to use 26 as a magic number.
3327+ */
3328+#define VSCSIIF_SG_TABLESIZE 26
3329+
3330+/*
3331+ * base on linux kernel 2.6.18
3332+ */
3333+#define VSCSIIF_MAX_COMMAND_SIZE 16
3334+#define VSCSIIF_SENSE_BUFFERSIZE 96
3335+
3336+
3337+struct vscsiif_request {
3338+ uint16_t rqid; /* private guest value, echoed in resp */
3339+ uint8_t act; /* command between backend and frontend */
3340+ uint8_t cmd_len;
3341+
3342+ uint8_t cmnd[VSCSIIF_MAX_COMMAND_SIZE];
3343+ uint16_t timeout_per_command; /* The command is issued by twice
3344+ the value in Backend. */
3345+ uint16_t channel, id, lun;
3346+ uint16_t padding;
3347+ uint8_t sc_data_direction; /* for DMA_TO_DEVICE(1)
3348+ DMA_FROM_DEVICE(2)
3349+ DMA_NONE(3) requests */
3350+ uint8_t nr_segments; /* Number of pieces of scatter-gather */
3351+
3352+ struct scsiif_request_segment {
3353+ grant_ref_t gref;
3354+ uint16_t offset;
3355+ uint16_t length;
3356+ } seg[VSCSIIF_SG_TABLESIZE];
3357+ uint32_t reserved[3];
3358+};
3359+typedef struct vscsiif_request vscsiif_request_t;
3360+
3361+struct vscsiif_response {
3362+ uint16_t rqid;
3363+ uint8_t padding;
3364+ uint8_t sense_len;
3365+ uint8_t sense_buffer[VSCSIIF_SENSE_BUFFERSIZE];
3366+ int32_t rslt;
3367+ uint32_t residual_len; /* request bufflen -
3368+ return the value from physical device */
3369+ uint32_t reserved[36];
3370+};
3371+typedef struct vscsiif_response vscsiif_response_t;
3372+
3373+DEFINE_RING_TYPES(vscsiif, struct vscsiif_request, struct vscsiif_response);
3374+
3375+
3376+#endif /*__XEN__PUBLIC_IO_SCSI_H__*/
3377+/*
3378+ * Local variables:
3379+ * mode: C
3380+ * c-set-style: "BSD"
3381+ * c-basic-offset: 4
3382+ * tab-width: 4
3383+ * indent-tabs-mode: nil
3384+ * End:
3385+ */
3386Index: head-2008-11-25/include/xen/interface/kexec.h
3387===================================================================
3388--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3389+++ head-2008-11-25/include/xen/interface/kexec.h 2008-11-25 12:22:34.000000000 +0100
3390@@ -0,0 +1,168 @@
3391+/******************************************************************************
3392+ * kexec.h - Public portion
3393+ *
3394+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3395+ * of this software and associated documentation files (the "Software"), to
3396+ * deal in the Software without restriction, including without limitation the
3397+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3398+ * sell copies of the Software, and to permit persons to whom the Software is
3399+ * furnished to do so, subject to the following conditions:
3400+ *
3401+ * The above copyright notice and this permission notice shall be included in
3402+ * all copies or substantial portions of the Software.
3403+ *
3404+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3405+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3406+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3407+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3408+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3409+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
3410+ * DEALINGS IN THE SOFTWARE.
3411+ *
3412+ * Xen port written by:
3413+ * - Simon 'Horms' Horman <horms@verge.net.au>
3414+ * - Magnus Damm <magnus@valinux.co.jp>
3415+ */
3416+
3417+#ifndef _XEN_PUBLIC_KEXEC_H
3418+#define _XEN_PUBLIC_KEXEC_H
3419+
3420+
3421+/* This file describes the Kexec / Kdump hypercall interface for Xen.
3422+ *
3423+ * Kexec under vanilla Linux allows a user to reboot the physical machine
3424+ * into a new user-specified kernel. The Xen port extends this idea
3425+ * to allow rebooting of the machine from dom0. When kexec for dom0
3426+ * is used to reboot, both the hypervisor and the domains get replaced
3427+ * with some other kernel. It is possible to kexec between vanilla
3428+ * Linux and Xen and back again. Xen to Xen works well too.
3429+ *
3430+ * The hypercall interface for kexec can be divided into three main
3431+ * types of hypercall operations:
3432+ *
3433+ * 1) Range information:
3434+ * This is used by the dom0 kernel to ask the hypervisor about various
3435+ * address information. This information is needed to allow kexec-tools
3436+ * to fill in the ELF headers for /proc/vmcore properly.
3437+ *
3438+ * 2) Load and unload of images:
3439+ * There are no big surprises here, the kexec binary from kexec-tools
3440+ * runs in userspace in dom0. The tool loads/unloads data into the
3441+ * dom0 kernel such as new kernel, initramfs and hypervisor. When
3442+ * loaded the dom0 kernel performs a load hypercall operation, and
3443+ * before releasing all page references the dom0 kernel calls unload.
3444+ *
3445+ * 3) Kexec operation:
3446+ * This is used to start a previously loaded kernel.
3447+ */
3448+
3449+#include "xen.h"
3450+
3451+#if defined(__i386__) || defined(__x86_64__)
3452+#define KEXEC_XEN_NO_PAGES 17
3453+#endif
3454+
3455+/*
3456+ * Prototype for this hypercall is:
3457+ * int kexec_op(int cmd, void *args)
3458+ * @cmd == KEXEC_CMD_...
3459+ * KEXEC operation to perform
3460+ * @args == Operation-specific extra arguments (NULL if none).
3461+ */
3462+
3463+/*
3464+ * Kexec supports two types of operation:
3465+ * - kexec into a regular kernel, very similar to a standard reboot
3466+ * - KEXEC_TYPE_DEFAULT is used to specify this type
3467+ * - kexec into a special "crash kernel", aka kexec-on-panic
3468+ * - KEXEC_TYPE_CRASH is used to specify this type
3469+ * - parts of our system may be broken at kexec-on-panic time
3470+ * - the code should be kept as simple and self-contained as possible
3471+ */
3472+
3473+#define KEXEC_TYPE_DEFAULT 0
3474+#define KEXEC_TYPE_CRASH 1
3475+
3476+
3477+/* The kexec implementation for Xen allows the user to load two
3478+ * types of kernels, KEXEC_TYPE_DEFAULT and KEXEC_TYPE_CRASH.
3479+ * All data needed for a kexec reboot is kept in one xen_kexec_image_t
3480+ * per "instance". The data mainly consists of machine address lists to pages
3481+ * together with destination addresses. The data in xen_kexec_image_t
3482+ * is passed to the "code page" which is one page of code that performs
3483+ * the final relocations before jumping to the new kernel.
3484+ */
3485+
3486+typedef struct xen_kexec_image {
3487+#if defined(__i386__) || defined(__x86_64__)
3488+ unsigned long page_list[KEXEC_XEN_NO_PAGES];
3489+#endif
3490+#if defined(__ia64__)
3491+ unsigned long reboot_code_buffer;
3492+#endif
3493+ unsigned long indirection_page;
3494+ unsigned long start_address;
3495+} xen_kexec_image_t;
3496+
3497+/*
3498+ * Perform kexec having previously loaded a kexec or kdump kernel
3499+ * as appropriate.
3500+ * type == KEXEC_TYPE_DEFAULT or KEXEC_TYPE_CRASH [in]
3501+ */
3502+#define KEXEC_CMD_kexec 0
3503+typedef struct xen_kexec_exec {
3504+ int type;
3505+} xen_kexec_exec_t;
3506+
3507+/*
3508+ * Load/Unload kernel image for kexec or kdump.
3509+ * type == KEXEC_TYPE_DEFAULT or KEXEC_TYPE_CRASH [in]
3510+ * image == relocation information for kexec (ignored for unload) [in]
3511+ */
3512+#define KEXEC_CMD_kexec_load 1
3513+#define KEXEC_CMD_kexec_unload 2
3514+typedef struct xen_kexec_load {
3515+ int type;
3516+ xen_kexec_image_t image;
3517+} xen_kexec_load_t;
3518+
3519+#define KEXEC_RANGE_MA_CRASH 0 /* machine address and size of crash area */
3520+#define KEXEC_RANGE_MA_XEN 1 /* machine address and size of Xen itself */
3521+#define KEXEC_RANGE_MA_CPU 2 /* machine address and size of a CPU note */
3522+#define KEXEC_RANGE_MA_XENHEAP 3 /* machine address and size of xenheap
3523+ * Note that although this is adjacent
3524+ * to Xen it exists in a separate EFI
3525+ * region on ia64, and thus needs to be
3526+ * inserted into iomem_machine separately */
3527+#define KEXEC_RANGE_MA_BOOT_PARAM 4 /* machine address and size of
3528+ * the ia64_boot_param */
3529+#define KEXEC_RANGE_MA_EFI_MEMMAP 5 /* machine address and size of
3530+ * of the EFI Memory Map */
3531+#define KEXEC_RANGE_MA_VMCOREINFO 6 /* machine address and size of vmcoreinfo */
3532+
3533+/*
3534+ * Find the address and size of certain memory areas
3535+ * range == KEXEC_RANGE_... [in]
3536+ * nr == physical CPU number (starting from 0) if KEXEC_RANGE_MA_CPU [in]
3537+ * size == number of bytes reserved in window [out]
3538+ * start == address of the first byte in the window [out]
3539+ */
3540+#define KEXEC_CMD_kexec_get_range 3
3541+typedef struct xen_kexec_range {
3542+ int range;
3543+ int nr;
3544+ unsigned long size;
3545+ unsigned long start;
3546+} xen_kexec_range_t;
3547+
3548+#endif /* _XEN_PUBLIC_KEXEC_H */
3549+
3550+/*
3551+ * Local variables:
3552+ * mode: C
3553+ * c-set-style: "BSD"
3554+ * c-basic-offset: 4
3555+ * tab-width: 4
3556+ * indent-tabs-mode: nil
3557+ * End:
3558+ */
3559Index: head-2008-11-25/include/xen/interface/nmi.h
3560===================================================================
3561--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3562+++ head-2008-11-25/include/xen/interface/nmi.h 2007-06-12 13:14:19.000000000 +0200
3563@@ -0,0 +1,78 @@
3564+/******************************************************************************
3565+ * nmi.h
3566+ *
3567+ * NMI callback registration and reason codes.
3568+ *
3569+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3570+ * of this software and associated documentation files (the "Software"), to
3571+ * deal in the Software without restriction, including without limitation the
3572+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3573+ * sell copies of the Software, and to permit persons to whom the Software is
3574+ * furnished to do so, subject to the following conditions:
3575+ *
3576+ * The above copyright notice and this permission notice shall be included in
3577+ * all copies or substantial portions of the Software.
3578+ *
3579+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3580+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3581+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3582+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3583+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3584+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
3585+ * DEALINGS IN THE SOFTWARE.
3586+ *
3587+ * Copyright (c) 2005, Keir Fraser <keir@xensource.com>
3588+ */
3589+
3590+#ifndef __XEN_PUBLIC_NMI_H__
3591+#define __XEN_PUBLIC_NMI_H__
3592+
3593+/*
3594+ * NMI reason codes:
3595+ * Currently these are x86-specific, stored in arch_shared_info.nmi_reason.
3596+ */
3597+ /* I/O-check error reported via ISA port 0x61, bit 6. */
3598+#define _XEN_NMIREASON_io_error 0
3599+#define XEN_NMIREASON_io_error (1UL << _XEN_NMIREASON_io_error)
3600+ /* Parity error reported via ISA port 0x61, bit 7. */
3601+#define _XEN_NMIREASON_parity_error 1
3602+#define XEN_NMIREASON_parity_error (1UL << _XEN_NMIREASON_parity_error)
3603+ /* Unknown hardware-generated NMI. */
3604+#define _XEN_NMIREASON_unknown 2
3605+#define XEN_NMIREASON_unknown (1UL << _XEN_NMIREASON_unknown)
3606+
3607+/*
3608+ * long nmi_op(unsigned int cmd, void *arg)
3609+ * NB. All ops return zero on success, else a negative error code.
3610+ */
3611+
3612+/*
3613+ * Register NMI callback for this (calling) VCPU. Currently this only makes
3614+ * sense for domain 0, vcpu 0. All other callers will be returned EINVAL.
3615+ * arg == pointer to xennmi_callback structure.
3616+ */
3617+#define XENNMI_register_callback 0
3618+struct xennmi_callback {
3619+ unsigned long handler_address;
3620+ unsigned long pad;
3621+};
3622+typedef struct xennmi_callback xennmi_callback_t;
3623+DEFINE_XEN_GUEST_HANDLE(xennmi_callback_t);
3624+
3625+/*
3626+ * Deregister NMI callback for this (calling) VCPU.
3627+ * arg == NULL.
3628+ */
3629+#define XENNMI_unregister_callback 1
3630+
3631+#endif /* __XEN_PUBLIC_NMI_H__ */
3632+
3633+/*
3634+ * Local variables:
3635+ * mode: C
3636+ * c-set-style: "BSD"
3637+ * c-basic-offset: 4
3638+ * tab-width: 4
3639+ * indent-tabs-mode: nil
3640+ * End:
3641+ */
3642Index: head-2008-11-25/include/xen/interface/platform.h
3643===================================================================
3644--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3645+++ head-2008-11-25/include/xen/interface/platform.h 2008-09-25 13:55:33.000000000 +0200
3646@@ -0,0 +1,346 @@
3647+/******************************************************************************
3648+ * platform.h
3649+ *
3650+ * Hardware platform operations. Intended for use by domain-0 kernel.
3651+ *
3652+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3653+ * of this software and associated documentation files (the "Software"), to
3654+ * deal in the Software without restriction, including without limitation the
3655+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3656+ * sell copies of the Software, and to permit persons to whom the Software is
3657+ * furnished to do so, subject to the following conditions:
3658+ *
3659+ * The above copyright notice and this permission notice shall be included in
3660+ * all copies or substantial portions of the Software.
3661+ *
3662+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3663+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3664+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3665+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3666+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3667+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
3668+ * DEALINGS IN THE SOFTWARE.
3669+ *
3670+ * Copyright (c) 2002-2006, K Fraser
3671+ */
3672+
3673+#ifndef __XEN_PUBLIC_PLATFORM_H__
3674+#define __XEN_PUBLIC_PLATFORM_H__
3675+
3676+#include "xen.h"
3677+
3678+#define XENPF_INTERFACE_VERSION 0x03000001
3679+
3680+/*
3681+ * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC,
3682+ * 1 January, 1970 if the current system time was <system_time>.
3683+ */
3684+#define XENPF_settime 17
3685+struct xenpf_settime {
3686+ /* IN variables. */
3687+ uint32_t secs;
3688+ uint32_t nsecs;
3689+ uint64_t system_time;
3690+};
3691+typedef struct xenpf_settime xenpf_settime_t;
3692+DEFINE_XEN_GUEST_HANDLE(xenpf_settime_t);
3693+
3694+/*
3695+ * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type.
3696+ * On x86, @type is an architecture-defined MTRR memory type.
3697+ * On success, returns the MTRR that was used (@reg) and a handle that can
3698+ * be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting.
3699+ * (x86-specific).
3700+ */
3701+#define XENPF_add_memtype 31
3702+struct xenpf_add_memtype {
3703+ /* IN variables. */
3704+ xen_pfn_t mfn;
3705+ uint64_t nr_mfns;
3706+ uint32_t type;
3707+ /* OUT variables. */
3708+ uint32_t handle;
3709+ uint32_t reg;
3710+};
3711+typedef struct xenpf_add_memtype xenpf_add_memtype_t;
3712+DEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t);
3713+
3714+/*
3715+ * Tear down an existing memory-range type. If @handle is remembered then it
3716+ * should be passed in to accurately tear down the correct setting (in case
3717+ * of overlapping memory regions with differing types). If it is not known
3718+ * then @handle should be set to zero. In all cases @reg must be set.
3719+ * (x86-specific).
3720+ */
3721+#define XENPF_del_memtype 32
3722+struct xenpf_del_memtype {
3723+ /* IN variables. */
3724+ uint32_t handle;
3725+ uint32_t reg;
3726+};
3727+typedef struct xenpf_del_memtype xenpf_del_memtype_t;
3728+DEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t);
3729+
3730+/* Read current type of an MTRR (x86-specific). */
3731+#define XENPF_read_memtype 33
3732+struct xenpf_read_memtype {
3733+ /* IN variables. */
3734+ uint32_t reg;
3735+ /* OUT variables. */
3736+ xen_pfn_t mfn;
3737+ uint64_t nr_mfns;
3738+ uint32_t type;
3739+};
3740+typedef struct xenpf_read_memtype xenpf_read_memtype_t;
3741+DEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t);
3742+
3743+#define XENPF_microcode_update 35
3744+struct xenpf_microcode_update {
3745+ /* IN variables. */
3746+ XEN_GUEST_HANDLE(const_void) data;/* Pointer to microcode data */
3747+ uint32_t length; /* Length of microcode data. */
3748+};
3749+typedef struct xenpf_microcode_update xenpf_microcode_update_t;
3750+DEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t);
3751+
3752+#define XENPF_platform_quirk 39
3753+#define QUIRK_NOIRQBALANCING 1 /* Do not restrict IO-APIC RTE targets */
3754+#define QUIRK_IOAPIC_BAD_REGSEL 2 /* IO-APIC REGSEL forgets its value */
3755+#define QUIRK_IOAPIC_GOOD_REGSEL 3 /* IO-APIC REGSEL behaves properly */
3756+struct xenpf_platform_quirk {
3757+ /* IN variables. */
3758+ uint32_t quirk_id;
3759+};
3760+typedef struct xenpf_platform_quirk xenpf_platform_quirk_t;
3761+DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t);
3762+
3763+#define XENPF_firmware_info 50
3764+#define XEN_FW_DISK_INFO 1 /* from int 13 AH=08/41/48 */
3765+#define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */
3766+#define XEN_FW_VBEDDC_INFO 3 /* from int 10 AX=4f15 */
3767+struct xenpf_firmware_info {
3768+ /* IN variables. */
3769+ uint32_t type;
3770+ uint32_t index;
3771+ /* OUT variables. */
3772+ union {
3773+ struct {
3774+ /* Int13, Fn48: Check Extensions Present. */
3775+ uint8_t device; /* %dl: bios device number */
3776+ uint8_t version; /* %ah: major version */
3777+ uint16_t interface_support; /* %cx: support bitmap */
3778+ /* Int13, Fn08: Legacy Get Device Parameters. */
3779+ uint16_t legacy_max_cylinder; /* %cl[7:6]:%ch: max cyl # */
3780+ uint8_t legacy_max_head; /* %dh: max head # */
3781+ uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector # */
3782+ /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */
3783+ /* NB. First uint16_t of buffer must be set to buffer size. */
3784+ XEN_GUEST_HANDLE(void) edd_params;
3785+ } disk_info; /* XEN_FW_DISK_INFO */
3786+ struct {
3787+ uint8_t device; /* bios device number */
3788+ uint32_t mbr_signature; /* offset 0x1b8 in mbr */
3789+ } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */
3790+ struct {
3791+ /* Int10, AX=4F15: Get EDID info. */
3792+ uint8_t capabilities;
3793+ uint8_t edid_transfer_time;
3794+ /* must refer to 128-byte buffer */
3795+ XEN_GUEST_HANDLE(uint8) edid;
3796+ } vbeddc_info; /* XEN_FW_VBEDDC_INFO */
3797+ } u;
3798+};
3799+typedef struct xenpf_firmware_info xenpf_firmware_info_t;
3800+DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t);
3801+
3802+#define XENPF_enter_acpi_sleep 51
3803+struct xenpf_enter_acpi_sleep {
3804+ /* IN variables */
3805+ uint16_t pm1a_cnt_val; /* PM1a control value. */
3806+ uint16_t pm1b_cnt_val; /* PM1b control value. */
3807+ uint32_t sleep_state; /* Which state to enter (Sn). */
3808+ uint32_t flags; /* Must be zero. */
3809+};
3810+typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t;
3811+DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t);
3812+
3813+#define XENPF_change_freq 52
3814+struct xenpf_change_freq {
3815+ /* IN variables */
3816+ uint32_t flags; /* Must be zero. */
3817+ uint32_t cpu; /* Physical cpu. */
3818+ uint64_t freq; /* New frequency (Hz). */
3819+};
3820+typedef struct xenpf_change_freq xenpf_change_freq_t;
3821+DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t);
3822+
3823+/*
3824+ * Get idle times (nanoseconds since boot) for physical CPUs specified in the
3825+ * @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is
3826+ * indexed by CPU number; only entries with the corresponding @cpumap_bitmap
3827+ * bit set are written to. On return, @cpumap_bitmap is modified so that any
3828+ * non-existent CPUs are cleared. Such CPUs have their @idletime array entry
3829+ * cleared.
3830+ */
3831+#define XENPF_getidletime 53
3832+struct xenpf_getidletime {
3833+ /* IN/OUT variables */
3834+ /* IN: CPUs to interrogate; OUT: subset of IN which are present */
3835+ XEN_GUEST_HANDLE(uint8) cpumap_bitmap;
3836+ /* IN variables */
3837+ /* Size of cpumap bitmap. */
3838+ uint32_t cpumap_nr_cpus;
3839+ /* Must be indexable for every cpu in cpumap_bitmap. */
3840+ XEN_GUEST_HANDLE(uint64) idletime;
3841+ /* OUT variables */
3842+ /* System time when the idletime snapshots were taken. */
3843+ uint64_t now;
3844+};
3845+typedef struct xenpf_getidletime xenpf_getidletime_t;
3846+DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t);
3847+
3848+#define XENPF_set_processor_pminfo 54
3849+
3850+/* ability bits */
3851+#define XEN_PROCESSOR_PM_CX 1
3852+#define XEN_PROCESSOR_PM_PX 2
3853+#define XEN_PROCESSOR_PM_TX 4
3854+
3855+/* cmd type */
3856+#define XEN_PM_CX 0
3857+#define XEN_PM_PX 1
3858+#define XEN_PM_TX 2
3859+
3860+/* Px sub info type */
3861+#define XEN_PX_PCT 1
3862+#define XEN_PX_PSS 2
3863+#define XEN_PX_PPC 4
3864+#define XEN_PX_PSD 8
3865+
3866+struct xen_power_register {
3867+ uint32_t space_id;
3868+ uint32_t bit_width;
3869+ uint32_t bit_offset;
3870+ uint32_t access_size;
3871+ uint64_t address;
3872+};
3873+
3874+struct xen_processor_csd {
3875+ uint32_t domain; /* domain number of one dependent group */
3876+ uint32_t coord_type; /* coordination type */
3877+ uint32_t num; /* number of processors in same domain */
3878+};
3879+typedef struct xen_processor_csd xen_processor_csd_t;
3880+DEFINE_XEN_GUEST_HANDLE(xen_processor_csd_t);
3881+
3882+struct xen_processor_cx {
3883+ struct xen_power_register reg; /* GAS for Cx trigger register */
3884+ uint8_t type; /* cstate value, c0: 0, c1: 1, ... */
3885+ uint32_t latency; /* worst latency (ms) to enter/exit this cstate */
3886+ uint32_t power; /* average power consumption(mW) */
3887+ uint32_t dpcnt; /* number of dependency entries */
3888+ XEN_GUEST_HANDLE(xen_processor_csd_t) dp; /* NULL if no dependency */
3889+};
3890+typedef struct xen_processor_cx xen_processor_cx_t;
3891+DEFINE_XEN_GUEST_HANDLE(xen_processor_cx_t);
3892+
3893+struct xen_processor_flags {
3894+ uint32_t bm_control:1;
3895+ uint32_t bm_check:1;
3896+ uint32_t has_cst:1;
3897+ uint32_t power_setup_done:1;
3898+ uint32_t bm_rld_set:1;
3899+};
3900+
3901+struct xen_processor_power {
3902+ uint32_t count; /* number of C state entries in array below */
3903+ struct xen_processor_flags flags; /* global flags of this processor */
3904+ XEN_GUEST_HANDLE(xen_processor_cx_t) states; /* supported c states */
3905+};
3906+
3907+struct xen_pct_register {
3908+ uint8_t descriptor;
3909+ uint16_t length;
3910+ uint8_t space_id;
3911+ uint8_t bit_width;
3912+ uint8_t bit_offset;
3913+ uint8_t reserved;
3914+ uint64_t address;
3915+};
3916+
3917+struct xen_processor_px {
3918+ uint64_t core_frequency; /* megahertz */
3919+ uint64_t power; /* milliWatts */
3920+ uint64_t transition_latency; /* microseconds */
3921+ uint64_t bus_master_latency; /* microseconds */
3922+ uint64_t control; /* control value */
3923+ uint64_t status; /* success indicator */
3924+};
3925+typedef struct xen_processor_px xen_processor_px_t;
3926+DEFINE_XEN_GUEST_HANDLE(xen_processor_px_t);
3927+
3928+struct xen_psd_package {
3929+ uint64_t num_entries;
3930+ uint64_t revision;
3931+ uint64_t domain;
3932+ uint64_t coord_type;
3933+ uint64_t num_processors;
3934+};
3935+
3936+struct xen_processor_performance {
3937+ uint32_t flags; /* flag for Px sub info type */
3938+ uint32_t platform_limit; /* Platform limitation on freq usage */
3939+ struct xen_pct_register control_register;
3940+ struct xen_pct_register status_register;
3941+ uint32_t state_count; /* total available performance states */
3942+ XEN_GUEST_HANDLE(xen_processor_px_t) states;
3943+ struct xen_psd_package domain_info;
3944+ uint32_t shared_type; /* coordination type of this processor */
3945+};
3946+typedef struct xen_processor_performance xen_processor_performance_t;
3947+DEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t);
3948+
3949+struct xenpf_set_processor_pminfo {
3950+ /* IN variables */
3951+ uint32_t id; /* ACPI CPU ID */
3952+ uint32_t type; /* {XEN_PM_CX, XEN_PM_PX} */
3953+ union {
3954+ struct xen_processor_power power;/* Cx: _CST/_CSD */
3955+ struct xen_processor_performance perf; /* Px: _PPC/_PCT/_PSS/_PSD */
3956+ };
3957+};
3958+typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t;
3959+DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
3960+
3961+struct xen_platform_op {
3962+ uint32_t cmd;
3963+ uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
3964+ union {
3965+ struct xenpf_settime settime;
3966+ struct xenpf_add_memtype add_memtype;
3967+ struct xenpf_del_memtype del_memtype;
3968+ struct xenpf_read_memtype read_memtype;
3969+ struct xenpf_microcode_update microcode;
3970+ struct xenpf_platform_quirk platform_quirk;
3971+ struct xenpf_firmware_info firmware_info;
3972+ struct xenpf_enter_acpi_sleep enter_acpi_sleep;
3973+ struct xenpf_change_freq change_freq;
3974+ struct xenpf_getidletime getidletime;
3975+ struct xenpf_set_processor_pminfo set_pminfo;
3976+ uint8_t pad[128];
3977+ } u;
3978+};
3979+typedef struct xen_platform_op xen_platform_op_t;
3980+DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t);
3981+
3982+#endif /* __XEN_PUBLIC_PLATFORM_H__ */
3983+
3984+/*
3985+ * Local variables:
3986+ * mode: C
3987+ * c-set-style: "BSD"
3988+ * c-basic-offset: 4
3989+ * tab-width: 4
3990+ * indent-tabs-mode: nil
3991+ * End:
3992+ */
3993Index: head-2008-11-25/include/xen/interface/sysctl.h
3994===================================================================
3995--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3996+++ head-2008-11-25/include/xen/interface/sysctl.h 2008-09-25 13:55:33.000000000 +0200
3997@@ -0,0 +1,308 @@
3998+/******************************************************************************
3999+ * sysctl.h
4000+ *
4001+ * System management operations. For use by node control stack.
4002+ *
4003+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4004+ * of this software and associated documentation files (the "Software"), to
4005+ * deal in the Software without restriction, including without limitation the
4006+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4007+ * sell copies of the Software, and to permit persons to whom the Software is
4008+ * furnished to do so, subject to the following conditions:
4009+ *
4010+ * The above copyright notice and this permission notice shall be included in
4011+ * all copies or substantial portions of the Software.
4012+ *
4013+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4014+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4015+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4016+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4017+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4018+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4019+ * DEALINGS IN THE SOFTWARE.
4020+ *
4021+ * Copyright (c) 2002-2006, K Fraser
4022+ */
4023+
4024+#ifndef __XEN_PUBLIC_SYSCTL_H__
4025+#define __XEN_PUBLIC_SYSCTL_H__
4026+
4027+#if !defined(__XEN__) && !defined(__XEN_TOOLS__)
4028+#error "sysctl operations are intended for use by node control tools only"
4029+#endif
4030+
4031+#include "xen.h"
4032+#include "domctl.h"
4033+
4034+#define XEN_SYSCTL_INTERFACE_VERSION 0x00000006
4035+
4036+/*
4037+ * Read console content from Xen buffer ring.
4038+ */
4039+#define XEN_SYSCTL_readconsole 1
4040+struct xen_sysctl_readconsole {
4041+ /* IN: Non-zero -> clear after reading. */
4042+ uint8_t clear;
4043+ /* IN: Non-zero -> start index specified by @index field. */
4044+ uint8_t incremental;
4045+ uint8_t pad0, pad1;
4046+ /*
4047+ * IN: Start index for consuming from ring buffer (if @incremental);
4048+ * OUT: End index after consuming from ring buffer.
4049+ */
4050+ uint32_t index;
4051+ /* IN: Virtual address to write console data. */
4052+ XEN_GUEST_HANDLE_64(char) buffer;
4053+ /* IN: Size of buffer; OUT: Bytes written to buffer. */
4054+ uint32_t count;
4055+};
4056+typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t;
4057+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t);
4058+
4059+/* Get trace buffers machine base address */
4060+#define XEN_SYSCTL_tbuf_op 2
4061+struct xen_sysctl_tbuf_op {
4062+ /* IN variables */
4063+#define XEN_SYSCTL_TBUFOP_get_info 0
4064+#define XEN_SYSCTL_TBUFOP_set_cpu_mask 1
4065+#define XEN_SYSCTL_TBUFOP_set_evt_mask 2
4066+#define XEN_SYSCTL_TBUFOP_set_size 3
4067+#define XEN_SYSCTL_TBUFOP_enable 4
4068+#define XEN_SYSCTL_TBUFOP_disable 5
4069+ uint32_t cmd;
4070+ /* IN/OUT variables */
4071+ struct xenctl_cpumap cpu_mask;
4072+ uint32_t evt_mask;
4073+ /* OUT variables */
4074+ uint64_aligned_t buffer_mfn;
4075+ uint32_t size;
4076+};
4077+typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t;
4078+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t);
4079+
4080+/*
4081+ * Get physical information about the host machine
4082+ */
4083+#define XEN_SYSCTL_physinfo 3
4084+ /* (x86) The platform supports HVM guests. */
4085+#define _XEN_SYSCTL_PHYSCAP_hvm 0
4086+#define XEN_SYSCTL_PHYSCAP_hvm (1u<<_XEN_SYSCTL_PHYSCAP_hvm)
4087+ /* (x86) The platform supports HVM-guest direct access to I/O devices. */
4088+#define _XEN_SYSCTL_PHYSCAP_hvm_directio 1
4089+#define XEN_SYSCTL_PHYSCAP_hvm_directio (1u<<_XEN_SYSCTL_PHYSCAP_hvm_directio)
4090+struct xen_sysctl_physinfo {
4091+ uint32_t threads_per_core;
4092+ uint32_t cores_per_socket;
4093+ uint32_t nr_cpus;
4094+ uint32_t nr_nodes;
4095+ uint32_t cpu_khz;
4096+ uint64_aligned_t total_pages;
4097+ uint64_aligned_t free_pages;
4098+ uint64_aligned_t scrub_pages;
4099+ uint32_t hw_cap[8];
4100+
4101+ /*
4102+ * IN: maximum addressable entry in the caller-provided cpu_to_node array.
4103+ * OUT: largest cpu identifier in the system.
4104+ * If OUT is greater than IN then the cpu_to_node array is truncated!
4105+ */
4106+ uint32_t max_cpu_id;
4107+ /*
4108+ * If not NULL, this array is filled with node identifier for each cpu.
4109+ * If a cpu has no node information (e.g., cpu not present) then the
4110+ * sentinel value ~0u is written.
4111+ * The size of this array is specified by the caller in @max_cpu_id.
4112+ * If the actual @max_cpu_id is smaller than the array then the trailing
4113+ * elements of the array will not be written by the sysctl.
4114+ */
4115+ XEN_GUEST_HANDLE_64(uint32) cpu_to_node;
4116+
4117+ /* XEN_SYSCTL_PHYSCAP_??? */
4118+ uint32_t capabilities;
4119+};
4120+typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t;
4121+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t);
4122+
4123+/*
4124+ * Get the ID of the current scheduler.
4125+ */
4126+#define XEN_SYSCTL_sched_id 4
4127+struct xen_sysctl_sched_id {
4128+ /* OUT variable */
4129+ uint32_t sched_id;
4130+};
4131+typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t;
4132+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t);
4133+
4134+/* Interface for controlling Xen software performance counters. */
4135+#define XEN_SYSCTL_perfc_op 5
4136+/* Sub-operations: */
4137+#define XEN_SYSCTL_PERFCOP_reset 1 /* Reset all counters to zero. */
4138+#define XEN_SYSCTL_PERFCOP_query 2 /* Get perfctr information. */
4139+struct xen_sysctl_perfc_desc {
4140+ char name[80]; /* name of perf counter */
4141+ uint32_t nr_vals; /* number of values for this counter */
4142+};
4143+typedef struct xen_sysctl_perfc_desc xen_sysctl_perfc_desc_t;
4144+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t);
4145+typedef uint32_t xen_sysctl_perfc_val_t;
4146+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t);
4147+
4148+struct xen_sysctl_perfc_op {
4149+ /* IN variables. */
4150+ uint32_t cmd; /* XEN_SYSCTL_PERFCOP_??? */
4151+ /* OUT variables. */
4152+ uint32_t nr_counters; /* number of counters description */
4153+ uint32_t nr_vals; /* number of values */
4154+ /* counter information (or NULL) */
4155+ XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc;
4156+ /* counter values (or NULL) */
4157+ XEN_GUEST_HANDLE_64(xen_sysctl_perfc_val_t) val;
4158+};
4159+typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t;
4160+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t);
4161+
4162+#define XEN_SYSCTL_getdomaininfolist 6
4163+struct xen_sysctl_getdomaininfolist {
4164+ /* IN variables. */
4165+ domid_t first_domain;
4166+ uint32_t max_domains;
4167+ XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer;
4168+ /* OUT variables. */
4169+ uint32_t num_domains;
4170+};
4171+typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t;
4172+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t);
4173+
4174+/* Inject debug keys into Xen. */
4175+#define XEN_SYSCTL_debug_keys 7
4176+struct xen_sysctl_debug_keys {
4177+ /* IN variables. */
4178+ XEN_GUEST_HANDLE_64(char) keys;
4179+ uint32_t nr_keys;
4180+};
4181+typedef struct xen_sysctl_debug_keys xen_sysctl_debug_keys_t;
4182+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_debug_keys_t);
4183+
4184+/* Get physical CPU information. */
4185+#define XEN_SYSCTL_getcpuinfo 8
4186+struct xen_sysctl_cpuinfo {
4187+ uint64_aligned_t idletime;
4188+};
4189+typedef struct xen_sysctl_cpuinfo xen_sysctl_cpuinfo_t;
4190+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpuinfo_t);
4191+struct xen_sysctl_getcpuinfo {
4192+ /* IN variables. */
4193+ uint32_t max_cpus;
4194+ XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info;
4195+ /* OUT variables. */
4196+ uint32_t nr_cpus;
4197+};
4198+typedef struct xen_sysctl_getcpuinfo xen_sysctl_getcpuinfo_t;
4199+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getcpuinfo_t);
4200+
4201+#define XEN_SYSCTL_availheap 9
4202+struct xen_sysctl_availheap {
4203+ /* IN variables. */
4204+ uint32_t min_bitwidth; /* Smallest address width (zero if don't care). */
4205+ uint32_t max_bitwidth; /* Largest address width (zero if don't care). */
4206+ int32_t node; /* NUMA node of interest (-1 for all nodes). */
4207+ /* OUT variables. */
4208+ uint64_aligned_t avail_bytes;/* Bytes available in the specified region. */
4209+};
4210+typedef struct xen_sysctl_availheap xen_sysctl_availheap_t;
4211+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_availheap_t);
4212+
4213+#define XEN_SYSCTL_get_pmstat 10
4214+struct pm_px_val {
4215+ uint64_aligned_t freq; /* Px core frequency */
4216+ uint64_aligned_t residency; /* Px residency time */
4217+ uint64_aligned_t count; /* Px transition count */
4218+};
4219+typedef struct pm_px_val pm_px_val_t;
4220+DEFINE_XEN_GUEST_HANDLE(pm_px_val_t);
4221+
4222+struct pm_px_stat {
4223+ uint8_t total; /* total Px states */
4224+ uint8_t usable; /* usable Px states */
4225+ uint8_t last; /* last Px state */
4226+ uint8_t cur; /* current Px state */
4227+ XEN_GUEST_HANDLE_64(uint64) trans_pt; /* Px transition table */
4228+ XEN_GUEST_HANDLE_64(pm_px_val_t) pt;
4229+};
4230+typedef struct pm_px_stat pm_px_stat_t;
4231+DEFINE_XEN_GUEST_HANDLE(pm_px_stat_t);
4232+
4233+struct pm_cx_stat {
4234+ uint32_t nr; /* entry nr in triggers & residencies, including C0 */
4235+ uint32_t last; /* last Cx state */
4236+ uint64_aligned_t idle_time; /* idle time from boot */
4237+ XEN_GUEST_HANDLE_64(uint64) triggers; /* Cx trigger counts */
4238+ XEN_GUEST_HANDLE_64(uint64) residencies; /* Cx residencies */
4239+};
4240+
4241+struct xen_sysctl_get_pmstat {
4242+#define PMSTAT_CATEGORY_MASK 0xf0
4243+#define PMSTAT_PX 0x10
4244+#define PMSTAT_CX 0x20
4245+#define PMSTAT_get_max_px (PMSTAT_PX | 0x1)
4246+#define PMSTAT_get_pxstat (PMSTAT_PX | 0x2)
4247+#define PMSTAT_reset_pxstat (PMSTAT_PX | 0x3)
4248+#define PMSTAT_get_max_cx (PMSTAT_CX | 0x1)
4249+#define PMSTAT_get_cxstat (PMSTAT_CX | 0x2)
4250+#define PMSTAT_reset_cxstat (PMSTAT_CX | 0x3)
4251+ uint32_t type;
4252+ uint32_t cpuid;
4253+ union {
4254+ struct pm_px_stat getpx;
4255+ struct pm_cx_stat getcx;
4256+ /* other struct for tx, etc */
4257+ } u;
4258+};
4259+typedef struct xen_sysctl_get_pmstat xen_sysctl_get_pmstat_t;
4260+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_get_pmstat_t);
4261+
4262+#define XEN_SYSCTL_cpu_hotplug 11
4263+struct xen_sysctl_cpu_hotplug {
4264+ /* IN variables */
4265+ uint32_t cpu; /* Physical cpu. */
4266+#define XEN_SYSCTL_CPU_HOTPLUG_ONLINE 0
4267+#define XEN_SYSCTL_CPU_HOTPLUG_OFFLINE 1
4268+ uint32_t op; /* hotplug opcode */
4269+};
4270+typedef struct xen_sysctl_cpu_hotplug xen_sysctl_cpu_hotplug_t;
4271+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpu_hotplug_t);
4272+
4273+
4274+struct xen_sysctl {
4275+ uint32_t cmd;
4276+ uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
4277+ union {
4278+ struct xen_sysctl_readconsole readconsole;
4279+ struct xen_sysctl_tbuf_op tbuf_op;
4280+ struct xen_sysctl_physinfo physinfo;
4281+ struct xen_sysctl_sched_id sched_id;
4282+ struct xen_sysctl_perfc_op perfc_op;
4283+ struct xen_sysctl_getdomaininfolist getdomaininfolist;
4284+ struct xen_sysctl_debug_keys debug_keys;
4285+ struct xen_sysctl_getcpuinfo getcpuinfo;
4286+ struct xen_sysctl_availheap availheap;
4287+ struct xen_sysctl_get_pmstat get_pmstat;
4288+ struct xen_sysctl_cpu_hotplug cpu_hotplug;
4289+ uint8_t pad[128];
4290+ } u;
4291+};
4292+typedef struct xen_sysctl xen_sysctl_t;
4293+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t);
4294+
4295+#endif /* __XEN_PUBLIC_SYSCTL_H__ */
4296+
4297+/*
4298+ * Local variables:
4299+ * mode: C
4300+ * c-set-style: "BSD"
4301+ * c-basic-offset: 4
4302+ * tab-width: 4
4303+ * indent-tabs-mode: nil
4304+ * End:
4305+ */
4306Index: head-2008-11-25/include/xen/interface/trace.h
4307===================================================================
4308--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4309+++ head-2008-11-25/include/xen/interface/trace.h 2008-11-25 12:22:34.000000000 +0100
4310@@ -0,0 +1,205 @@
4311+/******************************************************************************
4312+ * include/public/trace.h
4313+ *
4314+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4315+ * of this software and associated documentation files (the "Software"), to
4316+ * deal in the Software without restriction, including without limitation the
4317+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4318+ * sell copies of the Software, and to permit persons to whom the Software is
4319+ * furnished to do so, subject to the following conditions:
4320+ *
4321+ * The above copyright notice and this permission notice shall be included in
4322+ * all copies or substantial portions of the Software.
4323+ *
4324+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4325+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4326+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4327+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4328+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4329+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4330+ * DEALINGS IN THE SOFTWARE.
4331+ *
4332+ * Mark Williamson, (C) 2004 Intel Research Cambridge
4333+ * Copyright (C) 2005 Bin Ren
4334+ */
4335+
4336+#ifndef __XEN_PUBLIC_TRACE_H__
4337+#define __XEN_PUBLIC_TRACE_H__
4338+
4339+#define TRACE_EXTRA_MAX 7
4340+#define TRACE_EXTRA_SHIFT 28
4341+
4342+/* Trace classes */
4343+#define TRC_CLS_SHIFT 16
4344+#define TRC_GEN 0x0001f000 /* General trace */
4345+#define TRC_SCHED 0x0002f000 /* Xen Scheduler trace */
4346+#define TRC_DOM0OP 0x0004f000 /* Xen DOM0 operation trace */
4347+#define TRC_HVM 0x0008f000 /* Xen HVM trace */
4348+#define TRC_MEM 0x0010f000 /* Xen memory trace */
4349+#define TRC_PV 0x0020f000 /* Xen PV traces */
4350+#define TRC_SHADOW 0x0040f000 /* Xen shadow tracing */
4351+#define TRC_PM 0x0080f000 /* Xen power management trace */
4352+#define TRC_ALL 0x0ffff000
4353+#define TRC_HD_TO_EVENT(x) ((x)&0x0fffffff)
4354+#define TRC_HD_CYCLE_FLAG (1UL<<31)
4355+#define TRC_HD_INCLUDES_CYCLE_COUNT(x) ( !!( (x) & TRC_HD_CYCLE_FLAG ) )
4356+#define TRC_HD_EXTRA(x) (((x)>>TRACE_EXTRA_SHIFT)&TRACE_EXTRA_MAX)
4357+
4358+/* Trace subclasses */
4359+#define TRC_SUBCLS_SHIFT 12
4360+
4361+/* trace subclasses for SVM */
4362+#define TRC_HVM_ENTRYEXIT 0x00081000 /* VMENTRY and #VMEXIT */
4363+#define TRC_HVM_HANDLER 0x00082000 /* various HVM handlers */
4364+
4365+#define TRC_SCHED_MIN 0x00021000 /* Just runstate changes */
4366+#define TRC_SCHED_VERBOSE 0x00028000 /* More inclusive scheduling */
4367+
4368+/* Trace events per class */
4369+#define TRC_LOST_RECORDS (TRC_GEN + 1)
4370+#define TRC_TRACE_WRAP_BUFFER (TRC_GEN + 2)
4371+#define TRC_TRACE_CPU_CHANGE (TRC_GEN + 3)
4372+
4373+#define TRC_SCHED_RUNSTATE_CHANGE (TRC_SCHED_MIN + 1)
4374+#define TRC_SCHED_DOM_ADD (TRC_SCHED_VERBOSE + 1)
4375+#define TRC_SCHED_DOM_REM (TRC_SCHED_VERBOSE + 2)
4376+#define TRC_SCHED_SLEEP (TRC_SCHED_VERBOSE + 3)
4377+#define TRC_SCHED_WAKE (TRC_SCHED_VERBOSE + 4)
4378+#define TRC_SCHED_YIELD (TRC_SCHED_VERBOSE + 5)
4379+#define TRC_SCHED_BLOCK (TRC_SCHED_VERBOSE + 6)
4380+#define TRC_SCHED_SHUTDOWN (TRC_SCHED_VERBOSE + 7)
4381+#define TRC_SCHED_CTL (TRC_SCHED_VERBOSE + 8)
4382+#define TRC_SCHED_ADJDOM (TRC_SCHED_VERBOSE + 9)
4383+#define TRC_SCHED_SWITCH (TRC_SCHED_VERBOSE + 10)
4384+#define TRC_SCHED_S_TIMER_FN (TRC_SCHED_VERBOSE + 11)
4385+#define TRC_SCHED_T_TIMER_FN (TRC_SCHED_VERBOSE + 12)
4386+#define TRC_SCHED_DOM_TIMER_FN (TRC_SCHED_VERBOSE + 13)
4387+#define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED_VERBOSE + 14)
4388+#define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED_VERBOSE + 15)
4389+
4390+#define TRC_MEM_PAGE_GRANT_MAP (TRC_MEM + 1)
4391+#define TRC_MEM_PAGE_GRANT_UNMAP (TRC_MEM + 2)
4392+#define TRC_MEM_PAGE_GRANT_TRANSFER (TRC_MEM + 3)
4393+
4394+#define TRC_PV_HYPERCALL (TRC_PV + 1)
4395+#define TRC_PV_TRAP (TRC_PV + 3)
4396+#define TRC_PV_PAGE_FAULT (TRC_PV + 4)
4397+#define TRC_PV_FORCED_INVALID_OP (TRC_PV + 5)
4398+#define TRC_PV_EMULATE_PRIVOP (TRC_PV + 6)
4399+#define TRC_PV_EMULATE_4GB (TRC_PV + 7)
4400+#define TRC_PV_MATH_STATE_RESTORE (TRC_PV + 8)
4401+#define TRC_PV_PAGING_FIXUP (TRC_PV + 9)
4402+#define TRC_PV_GDT_LDT_MAPPING_FAULT (TRC_PV + 10)
4403+#define TRC_PV_PTWR_EMULATION (TRC_PV + 11)
4404+#define TRC_PV_PTWR_EMULATION_PAE (TRC_PV + 12)
4405+ /* Indicates that addresses in trace record are 64 bits */
4406+#define TRC_64_FLAG (0x100)
4407+
4408+#define TRC_SHADOW_NOT_SHADOW (TRC_SHADOW + 1)
4409+#define TRC_SHADOW_FAST_PROPAGATE (TRC_SHADOW + 2)
4410+#define TRC_SHADOW_FAST_MMIO (TRC_SHADOW + 3)
4411+#define TRC_SHADOW_FALSE_FAST_PATH (TRC_SHADOW + 4)
4412+#define TRC_SHADOW_MMIO (TRC_SHADOW + 5)
4413+#define TRC_SHADOW_FIXUP (TRC_SHADOW + 6)
4414+#define TRC_SHADOW_DOMF_DYING (TRC_SHADOW + 7)
4415+#define TRC_SHADOW_EMULATE (TRC_SHADOW + 8)
4416+#define TRC_SHADOW_EMULATE_UNSHADOW_USER (TRC_SHADOW + 9)
4417+#define TRC_SHADOW_EMULATE_UNSHADOW_EVTINJ (TRC_SHADOW + 10)
4418+#define TRC_SHADOW_EMULATE_UNSHADOW_UNHANDLED (TRC_SHADOW + 11)
4419+#define TRC_SHADOW_WRMAP_BF (TRC_SHADOW + 12)
4420+#define TRC_SHADOW_PREALLOC_UNPIN (TRC_SHADOW + 13)
4421+#define TRC_SHADOW_RESYNC_FULL (TRC_SHADOW + 14)
4422+#define TRC_SHADOW_RESYNC_ONLY (TRC_SHADOW + 15)
4423+
4424+/* trace events per subclass */
4425+#define TRC_HVM_VMENTRY (TRC_HVM_ENTRYEXIT + 0x01)
4426+#define TRC_HVM_VMEXIT (TRC_HVM_ENTRYEXIT + 0x02)
4427+#define TRC_HVM_VMEXIT64 (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
4428+#define TRC_HVM_PF_XEN (TRC_HVM_HANDLER + 0x01)
4429+#define TRC_HVM_PF_XEN64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x01)
4430+#define TRC_HVM_PF_INJECT (TRC_HVM_HANDLER + 0x02)
4431+#define TRC_HVM_PF_INJECT64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x02)
4432+#define TRC_HVM_INJ_EXC (TRC_HVM_HANDLER + 0x03)
4433+#define TRC_HVM_INJ_VIRQ (TRC_HVM_HANDLER + 0x04)
4434+#define TRC_HVM_REINJ_VIRQ (TRC_HVM_HANDLER + 0x05)
4435+#define TRC_HVM_IO_READ (TRC_HVM_HANDLER + 0x06)
4436+#define TRC_HVM_IO_WRITE (TRC_HVM_HANDLER + 0x07)
4437+#define TRC_HVM_CR_READ (TRC_HVM_HANDLER + 0x08)
4438+#define TRC_HVM_CR_READ64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x08)
4439+#define TRC_HVM_CR_WRITE (TRC_HVM_HANDLER + 0x09)
4440+#define TRC_HVM_CR_WRITE64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x09)
4441+#define TRC_HVM_DR_READ (TRC_HVM_HANDLER + 0x0A)
4442+#define TRC_HVM_DR_WRITE (TRC_HVM_HANDLER + 0x0B)
4443+#define TRC_HVM_MSR_READ (TRC_HVM_HANDLER + 0x0C)
4444+#define TRC_HVM_MSR_WRITE (TRC_HVM_HANDLER + 0x0D)
4445+#define TRC_HVM_CPUID (TRC_HVM_HANDLER + 0x0E)
4446+#define TRC_HVM_INTR (TRC_HVM_HANDLER + 0x0F)
4447+#define TRC_HVM_NMI (TRC_HVM_HANDLER + 0x10)
4448+#define TRC_HVM_SMI (TRC_HVM_HANDLER + 0x11)
4449+#define TRC_HVM_VMMCALL (TRC_HVM_HANDLER + 0x12)
4450+#define TRC_HVM_HLT (TRC_HVM_HANDLER + 0x13)
4451+#define TRC_HVM_INVLPG (TRC_HVM_HANDLER + 0x14)
4452+#define TRC_HVM_INVLPG64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x14)
4453+#define TRC_HVM_MCE (TRC_HVM_HANDLER + 0x15)
4454+#define TRC_HVM_IO_ASSIST (TRC_HVM_HANDLER + 0x16)
4455+#define TRC_HVM_IO_ASSIST64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x16)
4456+#define TRC_HVM_MMIO_ASSIST (TRC_HVM_HANDLER + 0x17)
4457+#define TRC_HVM_MMIO_ASSIST64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x17)
4458+#define TRC_HVM_CLTS (TRC_HVM_HANDLER + 0x18)
4459+#define TRC_HVM_LMSW (TRC_HVM_HANDLER + 0x19)
4460+#define TRC_HVM_LMSW64 (TRC_HVM_HANDLER + TRC_64_FLAG + 0x19)
4461+
4462+/* trace subclasses for power management */
4463+#define TRC_PM_FREQ 0x00801000 /* xen cpu freq events */
4464+#define TRC_PM_IDLE 0x00802000 /* xen cpu idle events */
4465+
4466+/* trace events for per class */
4467+#define TRC_PM_FREQ_CHANGE (TRC_PM_FREQ + 0x01)
4468+#define TRC_PM_IDLE_ENTRY (TRC_PM_IDLE + 0x01)
4469+#define TRC_PM_IDLE_EXIT (TRC_PM_IDLE + 0x02)
4470+
4471+/* This structure represents a single trace buffer record. */
4472+struct t_rec {
4473+ uint32_t event:28;
4474+ uint32_t extra_u32:3; /* # entries in trailing extra_u32[] array */
4475+ uint32_t cycles_included:1; /* u.cycles or u.no_cycles? */
4476+ union {
4477+ struct {
4478+ uint32_t cycles_lo, cycles_hi; /* cycle counter timestamp */
4479+ uint32_t extra_u32[7]; /* event data items */
4480+ } cycles;
4481+ struct {
4482+ uint32_t extra_u32[7]; /* event data items */
4483+ } nocycles;
4484+ } u;
4485+};
4486+
4487+/*
4488+ * This structure contains the metadata for a single trace buffer. The head
4489+ * field, indexes into an array of struct t_rec's.
4490+ */
4491+struct t_buf {
4492+ /* Assume the data buffer size is X. X is generally not a power of 2.
4493+ * CONS and PROD are incremented modulo (2*X):
4494+ * 0 <= cons < 2*X
4495+ * 0 <= prod < 2*X
4496+ * This is done because addition modulo X breaks at 2^32 when X is not a
4497+ * power of 2:
4498+ * (((2^32 - 1) % X) + 1) % X != (2^32) % X
4499+ */
4500+ uint32_t cons; /* Offset of next item to be consumed by control tools. */
4501+ uint32_t prod; /* Offset of next item to be produced by Xen. */
4502+ /* Records follow immediately after the meta-data header. */
4503+};
4504+
4505+#endif /* __XEN_PUBLIC_TRACE_H__ */
4506+
4507+/*
4508+ * Local variables:
4509+ * mode: C
4510+ * c-set-style: "BSD"
4511+ * c-basic-offset: 4
4512+ * tab-width: 4
4513+ * indent-tabs-mode: nil
4514+ * End:
4515+ */
4516Index: head-2008-11-25/include/xen/interface/xen-compat.h
4517===================================================================
4518--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4519+++ head-2008-11-25/include/xen/interface/xen-compat.h 2008-09-01 12:07:31.000000000 +0200
4520@@ -0,0 +1,44 @@
4521+/******************************************************************************
4522+ * xen-compat.h
4523+ *
4524+ * Guest OS interface to Xen. Compatibility layer.
4525+ *
4526+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4527+ * of this software and associated documentation files (the "Software"), to
4528+ * deal in the Software without restriction, including without limitation the
4529+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4530+ * sell copies of the Software, and to permit persons to whom the Software is
4531+ * furnished to do so, subject to the following conditions:
4532+ *
4533+ * The above copyright notice and this permission notice shall be included in
4534+ * all copies or substantial portions of the Software.
4535+ *
4536+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4537+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4538+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4539+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4540+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4541+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4542+ * DEALINGS IN THE SOFTWARE.
4543+ *
4544+ * Copyright (c) 2006, Christian Limpach
4545+ */
4546+
4547+#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
4548+#define __XEN_PUBLIC_XEN_COMPAT_H__
4549+
4550+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030209
4551+
4552+#if defined(__XEN__) || defined(__XEN_TOOLS__)
4553+/* Xen is built with matching headers and implements the latest interface. */
4554+#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
4555+#elif !defined(__XEN_INTERFACE_VERSION__)
4556+/* Guests which do not specify a version get the legacy interface. */
4557+#define __XEN_INTERFACE_VERSION__ 0x00000000
4558+#endif
4559+
4560+#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
4561+#error "These header files do not support the requested interface version."
4562+#endif
4563+
4564+#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
4565Index: head-2008-11-25/include/xen/interface/xenoprof.h
4566===================================================================
4567--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4568+++ head-2008-11-25/include/xen/interface/xenoprof.h 2007-06-12 13:14:19.000000000 +0200
4569@@ -0,0 +1,138 @@
4570+/******************************************************************************
4571+ * xenoprof.h
4572+ *
4573+ * Interface for enabling system wide profiling based on hardware performance
4574+ * counters
4575+ *
4576+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4577+ * of this software and associated documentation files (the "Software"), to
4578+ * deal in the Software without restriction, including without limitation the
4579+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4580+ * sell copies of the Software, and to permit persons to whom the Software is
4581+ * furnished to do so, subject to the following conditions:
4582+ *
4583+ * The above copyright notice and this permission notice shall be included in
4584+ * all copies or substantial portions of the Software.
4585+ *
4586+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4587+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4588+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4589+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4590+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4591+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4592+ * DEALINGS IN THE SOFTWARE.
4593+ *
4594+ * Copyright (C) 2005 Hewlett-Packard Co.
4595+ * Written by Aravind Menon & Jose Renato Santos
4596+ */
4597+
4598+#ifndef __XEN_PUBLIC_XENOPROF_H__
4599+#define __XEN_PUBLIC_XENOPROF_H__
4600+
4601+#include "xen.h"
4602+
4603+/*
4604+ * Commands to HYPERVISOR_xenoprof_op().
4605+ */
4606+#define XENOPROF_init 0
4607+#define XENOPROF_reset_active_list 1
4608+#define XENOPROF_reset_passive_list 2
4609+#define XENOPROF_set_active 3
4610+#define XENOPROF_set_passive 4
4611+#define XENOPROF_reserve_counters 5
4612+#define XENOPROF_counter 6
4613+#define XENOPROF_setup_events 7
4614+#define XENOPROF_enable_virq 8
4615+#define XENOPROF_start 9
4616+#define XENOPROF_stop 10
4617+#define XENOPROF_disable_virq 11
4618+#define XENOPROF_release_counters 12
4619+#define XENOPROF_shutdown 13
4620+#define XENOPROF_get_buffer 14
4621+#define XENOPROF_set_backtrace 15
4622+#define XENOPROF_last_op 15
4623+
4624+#define MAX_OPROF_EVENTS 32
4625+#define MAX_OPROF_DOMAINS 25
4626+#define XENOPROF_CPU_TYPE_SIZE 64
4627+
4628+/* Xenoprof performance events (not Xen events) */
4629+struct event_log {
4630+ uint64_t eip;
4631+ uint8_t mode;
4632+ uint8_t event;
4633+};
4634+
4635+/* PC value that indicates a special code */
4636+#define XENOPROF_ESCAPE_CODE ~0UL
4637+/* Transient events for the xenoprof->oprofile cpu buf */
4638+#define XENOPROF_TRACE_BEGIN 1
4639+
4640+/* Xenoprof buffer shared between Xen and domain - 1 per VCPU */
4641+struct xenoprof_buf {
4642+ uint32_t event_head;
4643+ uint32_t event_tail;
4644+ uint32_t event_size;
4645+ uint32_t vcpu_id;
4646+ uint64_t xen_samples;
4647+ uint64_t kernel_samples;
4648+ uint64_t user_samples;
4649+ uint64_t lost_samples;
4650+ struct event_log event_log[1];
4651+};
4652+#ifndef __XEN__
4653+typedef struct xenoprof_buf xenoprof_buf_t;
4654+DEFINE_XEN_GUEST_HANDLE(xenoprof_buf_t);
4655+#endif
4656+
4657+struct xenoprof_init {
4658+ int32_t num_events;
4659+ int32_t is_primary;
4660+ char cpu_type[XENOPROF_CPU_TYPE_SIZE];
4661+};
4662+typedef struct xenoprof_init xenoprof_init_t;
4663+DEFINE_XEN_GUEST_HANDLE(xenoprof_init_t);
4664+
4665+struct xenoprof_get_buffer {
4666+ int32_t max_samples;
4667+ int32_t nbuf;
4668+ int32_t bufsize;
4669+ uint64_t buf_gmaddr;
4670+};
4671+typedef struct xenoprof_get_buffer xenoprof_get_buffer_t;
4672+DEFINE_XEN_GUEST_HANDLE(xenoprof_get_buffer_t);
4673+
4674+struct xenoprof_counter {
4675+ uint32_t ind;
4676+ uint64_t count;
4677+ uint32_t enabled;
4678+ uint32_t event;
4679+ uint32_t hypervisor;
4680+ uint32_t kernel;
4681+ uint32_t user;
4682+ uint64_t unit_mask;
4683+};
4684+typedef struct xenoprof_counter xenoprof_counter_t;
4685+DEFINE_XEN_GUEST_HANDLE(xenoprof_counter_t);
4686+
4687+typedef struct xenoprof_passive {
4688+ uint16_t domain_id;
4689+ int32_t max_samples;
4690+ int32_t nbuf;
4691+ int32_t bufsize;
4692+ uint64_t buf_gmaddr;
4693+} xenoprof_passive_t;
4694+DEFINE_XEN_GUEST_HANDLE(xenoprof_passive_t);
4695+
4696+
4697+#endif /* __XEN_PUBLIC_XENOPROF_H__ */
4698+
4699+/*
4700+ * Local variables:
4701+ * mode: C
4702+ * c-set-style: "BSD"
4703+ * c-basic-offset: 4
4704+ * tab-width: 4
4705+ * indent-tabs-mode: nil
4706+ * End:
4707+ */
4708Index: head-2008-11-25/include/xen/interface/xsm/acm.h
4709===================================================================
4710--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4711+++ head-2008-11-25/include/xen/interface/xsm/acm.h 2008-07-21 11:00:33.000000000 +0200
4712@@ -0,0 +1,235 @@
4713+/*
4714+ * acm.h: Xen access control module interface defintions
4715+ *
4716+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4717+ * of this software and associated documentation files (the "Software"), to
4718+ * deal in the Software without restriction, including without limitation the
4719+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4720+ * sell copies of the Software, and to permit persons to whom the Software is
4721+ * furnished to do so, subject to the following conditions:
4722+ *
4723+ * The above copyright notice and this permission notice shall be included in
4724+ * all copies or substantial portions of the Software.
4725+ *
4726+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4727+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4728+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4729+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4730+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4731+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4732+ * DEALINGS IN THE SOFTWARE.
4733+ *
4734+ * Reiner Sailer <sailer@watson.ibm.com>
4735+ * Copyright (c) 2005, International Business Machines Corporation.
4736+ */
4737+
4738+#ifndef _XEN_PUBLIC_ACM_H
4739+#define _XEN_PUBLIC_ACM_H
4740+
4741+#include "../xen.h"
4742+
4743+/* if ACM_DEBUG defined, all hooks should
4744+ * print a short trace message (comment it out
4745+ * when not in testing mode )
4746+ */
4747+/* #define ACM_DEBUG */
4748+
4749+#ifdef ACM_DEBUG
4750+# define printkd(fmt, args...) printk(fmt,## args)
4751+#else
4752+# define printkd(fmt, args...)
4753+#endif
4754+
4755+/* default ssid reference value if not supplied */
4756+#define ACM_DEFAULT_SSID 0x0
4757+#define ACM_DEFAULT_LOCAL_SSID 0x0
4758+
4759+/* Internal ACM ERROR types */
4760+#define ACM_OK 0
4761+#define ACM_UNDEF -1
4762+#define ACM_INIT_SSID_ERROR -2
4763+#define ACM_INIT_SOID_ERROR -3
4764+#define ACM_ERROR -4
4765+
4766+/* External ACCESS DECISIONS */
4767+#define ACM_ACCESS_PERMITTED 0
4768+#define ACM_ACCESS_DENIED -111
4769+#define ACM_NULL_POINTER_ERROR -200
4770+
4771+/*
4772+ Error codes reported in when trying to test for a new policy
4773+ These error codes are reported in an array of tuples where
4774+ each error code is followed by a parameter describing the error
4775+ more closely, such as a domain id.
4776+*/
4777+#define ACM_EVTCHN_SHARING_VIOLATION 0x100
4778+#define ACM_GNTTAB_SHARING_VIOLATION 0x101
4779+#define ACM_DOMAIN_LOOKUP 0x102
4780+#define ACM_CHWALL_CONFLICT 0x103
4781+#define ACM_SSIDREF_IN_USE 0x104
4782+
4783+
4784+/* primary policy in lower 4 bits */
4785+#define ACM_NULL_POLICY 0
4786+#define ACM_CHINESE_WALL_POLICY 1
4787+#define ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY 2
4788+#define ACM_POLICY_UNDEFINED 15
4789+
4790+/* combinations have secondary policy component in higher 4bit */
4791+#define ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY \
4792+ ((ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY << 4) | ACM_CHINESE_WALL_POLICY)
4793+
4794+/* policy: */
4795+#define ACM_POLICY_NAME(X) \
4796+ ((X) == (ACM_NULL_POLICY)) ? "NULL" : \
4797+ ((X) == (ACM_CHINESE_WALL_POLICY)) ? "CHINESE WALL" : \
4798+ ((X) == (ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "SIMPLE TYPE ENFORCEMENT" : \
4799+ ((X) == (ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "CHINESE WALL AND SIMPLE TYPE ENFORCEMENT" : \
4800+ "UNDEFINED"
4801+
4802+/* the following policy versions must be increased
4803+ * whenever the interpretation of the related
4804+ * policy's data structure changes
4805+ */
4806+#define ACM_POLICY_VERSION 4
4807+#define ACM_CHWALL_VERSION 1
4808+#define ACM_STE_VERSION 1
4809+
4810+/* defines a ssid reference used by xen */
4811+typedef uint32_t ssidref_t;
4812+
4813+/* hooks that are known to domains */
4814+#define ACMHOOK_none 0
4815+#define ACMHOOK_sharing 1
4816+#define ACMHOOK_authorization 2
4817+#define ACMHOOK_conflictset 3
4818+
4819+/* -------security policy relevant type definitions-------- */
4820+
4821+/* type identifier; compares to "equal" or "not equal" */
4822+typedef uint16_t domaintype_t;
4823+
4824+/* CHINESE WALL POLICY DATA STRUCTURES
4825+ *
4826+ * current accumulated conflict type set:
4827+ * When a domain is started and has a type that is in
4828+ * a conflict set, the conflicting types are incremented in
4829+ * the aggregate set. When a domain is destroyed, the
4830+ * conflicting types to its type are decremented.
4831+ * If a domain has multiple types, this procedure works over
4832+ * all those types.
4833+ *
4834+ * conflict_aggregate_set[i] holds the number of
4835+ * running domains that have a conflict with type i.
4836+ *
4837+ * running_types[i] holds the number of running domains
4838+ * that include type i in their ssidref-referenced type set
4839+ *
4840+ * conflict_sets[i][j] is "0" if type j has no conflict
4841+ * with type i and is "1" otherwise.
4842+ */
4843+/* high-16 = version, low-16 = check magic */
4844+#define ACM_MAGIC 0x0001debc
4845+
4846+/* size of the SHA1 hash identifying the XML policy from which the
4847+ binary policy was created */
4848+#define ACM_SHA1_HASH_SIZE 20
4849+
4850+/* each offset in bytes from start of the struct they
4851+ * are part of */
4852+
4853+/* V3 of the policy buffer aded a version structure */
4854+struct acm_policy_version
4855+{
4856+ uint32_t major;
4857+ uint32_t minor;
4858+};
4859+
4860+
4861+/* each buffer consists of all policy information for
4862+ * the respective policy given in the policy code
4863+ *
4864+ * acm_policy_buffer, acm_chwall_policy_buffer,
4865+ * and acm_ste_policy_buffer need to stay 32-bit aligned
4866+ * because we create binary policies also with external
4867+ * tools that assume packed representations (e.g. the java tool)
4868+ */
4869+struct acm_policy_buffer {
4870+ uint32_t magic;
4871+ uint32_t policy_version; /* ACM_POLICY_VERSION */
4872+ uint32_t len;
4873+ uint32_t policy_reference_offset;
4874+ uint32_t primary_policy_code;
4875+ uint32_t primary_buffer_offset;
4876+ uint32_t secondary_policy_code;
4877+ uint32_t secondary_buffer_offset;
4878+ struct acm_policy_version xml_pol_version; /* add in V3 */
4879+ uint8_t xml_policy_hash[ACM_SHA1_HASH_SIZE]; /* added in V4 */
4880+};
4881+
4882+
4883+struct acm_policy_reference_buffer {
4884+ uint32_t len;
4885+};
4886+
4887+struct acm_chwall_policy_buffer {
4888+ uint32_t policy_version; /* ACM_CHWALL_VERSION */
4889+ uint32_t policy_code;
4890+ uint32_t chwall_max_types;
4891+ uint32_t chwall_max_ssidrefs;
4892+ uint32_t chwall_max_conflictsets;
4893+ uint32_t chwall_ssid_offset;
4894+ uint32_t chwall_conflict_sets_offset;
4895+ uint32_t chwall_running_types_offset;
4896+ uint32_t chwall_conflict_aggregate_offset;
4897+};
4898+
4899+struct acm_ste_policy_buffer {
4900+ uint32_t policy_version; /* ACM_STE_VERSION */
4901+ uint32_t policy_code;
4902+ uint32_t ste_max_types;
4903+ uint32_t ste_max_ssidrefs;
4904+ uint32_t ste_ssid_offset;
4905+};
4906+
4907+struct acm_stats_buffer {
4908+ uint32_t magic;
4909+ uint32_t len;
4910+ uint32_t primary_policy_code;
4911+ uint32_t primary_stats_offset;
4912+ uint32_t secondary_policy_code;
4913+ uint32_t secondary_stats_offset;
4914+};
4915+
4916+struct acm_ste_stats_buffer {
4917+ uint32_t ec_eval_count;
4918+ uint32_t gt_eval_count;
4919+ uint32_t ec_denied_count;
4920+ uint32_t gt_denied_count;
4921+ uint32_t ec_cachehit_count;
4922+ uint32_t gt_cachehit_count;
4923+};
4924+
4925+struct acm_ssid_buffer {
4926+ uint32_t len;
4927+ ssidref_t ssidref;
4928+ uint32_t policy_reference_offset;
4929+ uint32_t primary_policy_code;
4930+ uint32_t primary_max_types;
4931+ uint32_t primary_types_offset;
4932+ uint32_t secondary_policy_code;
4933+ uint32_t secondary_max_types;
4934+ uint32_t secondary_types_offset;
4935+};
4936+
4937+#endif
4938+
4939+/*
4940+ * Local variables:
4941+ * mode: C
4942+ * c-set-style: "BSD"
4943+ * c-basic-offset: 4
4944+ * tab-width: 4
4945+ * indent-tabs-mode: nil
4946+ * End:
4947+ */
4948Index: head-2008-11-25/include/xen/interface/xsm/acm_ops.h
4949===================================================================
4950--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4951+++ head-2008-11-25/include/xen/interface/xsm/acm_ops.h 2007-10-22 13:39:15.000000000 +0200
4952@@ -0,0 +1,159 @@
4953+/*
4954+ * acm_ops.h: Xen access control module hypervisor commands
4955+ *
4956+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4957+ * of this software and associated documentation files (the "Software"), to
4958+ * deal in the Software without restriction, including without limitation the
4959+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
4960+ * sell copies of the Software, and to permit persons to whom the Software is
4961+ * furnished to do so, subject to the following conditions:
4962+ *
4963+ * The above copyright notice and this permission notice shall be included in
4964+ * all copies or substantial portions of the Software.
4965+ *
4966+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4967+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4968+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
4969+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
4970+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
4971+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
4972+ * DEALINGS IN THE SOFTWARE.
4973+ *
4974+ * Reiner Sailer <sailer@watson.ibm.com>
4975+ * Copyright (c) 2005,2006 International Business Machines Corporation.
4976+ */
4977+
4978+#ifndef __XEN_PUBLIC_ACM_OPS_H__
4979+#define __XEN_PUBLIC_ACM_OPS_H__
4980+
4981+#include "../xen.h"
4982+#include "acm.h"
4983+
4984+/*
4985+ * Make sure you increment the interface version whenever you modify this file!
4986+ * This makes sure that old versions of acm tools will stop working in a
4987+ * well-defined way (rather than crashing the machine, for instance).
4988+ */
4989+#define ACM_INTERFACE_VERSION 0xAAAA000A
4990+
4991+/************************************************************************/
4992+
4993+/*
4994+ * Prototype for this hypercall is:
4995+ * int acm_op(int cmd, void *args)
4996+ * @cmd == ACMOP_??? (access control module operation).
4997+ * @args == Operation-specific extra arguments (NULL if none).
4998+ */
4999+
5000+
5001+#define ACMOP_setpolicy 1
5002+struct acm_setpolicy {
5003+ /* IN */
5004+ XEN_GUEST_HANDLE_64(void) pushcache;
5005+ uint32_t pushcache_size;
5006+};
5007+
5008+
5009+#define ACMOP_getpolicy 2
5010+struct acm_getpolicy {
5011+ /* IN */
5012+ XEN_GUEST_HANDLE_64(void) pullcache;
5013+ uint32_t pullcache_size;
5014+};
5015+
5016+
5017+#define ACMOP_dumpstats 3
5018+struct acm_dumpstats {
5019+ /* IN */
5020+ XEN_GUEST_HANDLE_64(void) pullcache;
5021+ uint32_t pullcache_size;
5022+};
5023+
5024+
5025+#define ACMOP_getssid 4
5026+#define ACM_GETBY_ssidref 1
5027+#define ACM_GETBY_domainid 2
5028+struct acm_getssid {
5029+ /* IN */
5030+ uint32_t get_ssid_by; /* ACM_GETBY_* */
5031+ union {
5032+ domaintype_t domainid;
5033+ ssidref_t ssidref;
5034+ } id;
5035+ XEN_GUEST_HANDLE_64(void) ssidbuf;
5036+ uint32_t ssidbuf_size;
5037+};
5038+
5039+#define ACMOP_getdecision 5
5040+struct acm_getdecision {
5041+ /* IN */
5042+ uint32_t get_decision_by1; /* ACM_GETBY_* */
5043+ uint32_t get_decision_by2; /* ACM_GETBY_* */
5044+ union {
5045+ domaintype_t domainid;
5046+ ssidref_t ssidref;
5047+ } id1;
5048+ union {
5049+ domaintype_t domainid;
5050+ ssidref_t ssidref;
5051+ } id2;
5052+ uint32_t hook;
5053+ /* OUT */
5054+ uint32_t acm_decision;
5055+};
5056+
5057+
5058+#define ACMOP_chgpolicy 6
5059+struct acm_change_policy {
5060+ /* IN */
5061+ XEN_GUEST_HANDLE_64(void) policy_pushcache;
5062+ uint32_t policy_pushcache_size;
5063+ XEN_GUEST_HANDLE_64(void) del_array;
5064+ uint32_t delarray_size;
5065+ XEN_GUEST_HANDLE_64(void) chg_array;
5066+ uint32_t chgarray_size;
5067+ /* OUT */
5068+ /* array with error code */
5069+ XEN_GUEST_HANDLE_64(void) err_array;
5070+ uint32_t errarray_size;
5071+};
5072+
5073+#define ACMOP_relabeldoms 7
5074+struct acm_relabel_doms {
5075+ /* IN */
5076+ XEN_GUEST_HANDLE_64(void) relabel_map;
5077+ uint32_t relabel_map_size;
5078+ /* OUT */
5079+ XEN_GUEST_HANDLE_64(void) err_array;
5080+ uint32_t errarray_size;
5081+};
5082+
5083+/* future interface to Xen */
5084+struct xen_acmctl {
5085+ uint32_t cmd;
5086+ uint32_t interface_version;
5087+ union {
5088+ struct acm_setpolicy setpolicy;
5089+ struct acm_getpolicy getpolicy;
5090+ struct acm_dumpstats dumpstats;
5091+ struct acm_getssid getssid;
5092+ struct acm_getdecision getdecision;
5093+ struct acm_change_policy change_policy;
5094+ struct acm_relabel_doms relabel_doms;
5095+ } u;
5096+};
5097+
5098+typedef struct xen_acmctl xen_acmctl_t;
5099+DEFINE_XEN_GUEST_HANDLE(xen_acmctl_t);
5100+
5101+#endif /* __XEN_PUBLIC_ACM_OPS_H__ */
5102+
5103+/*
5104+ * Local variables:
5105+ * mode: C
5106+ * c-set-style: "BSD"
5107+ * c-basic-offset: 4
5108+ * tab-width: 4
5109+ * indent-tabs-mode: nil
5110+ * End:
5111+ */
5112Index: head-2008-11-25/include/xen/interface/xsm/flask_op.h
5113===================================================================
5114--- /dev/null 1970-01-01 00:00:00.000000000 +0000
5115+++ head-2008-11-25/include/xen/interface/xsm/flask_op.h 2008-09-01 12:07:31.000000000 +0200
5116@@ -0,0 +1,45 @@
5117+/*
5118+ * This file contains the flask_op hypercall commands and definitions.
5119+ *
5120+ * Author: George Coker, <gscoker@alpha.ncsc.mil>
5121+ *
5122+ * This program is free software; you can redistribute it and/or modify
5123+ * it under the terms of the GNU General Public License version 2,
5124+ * as published by the Free Software Foundation.
5125+ */
5126+
5127+#ifndef __FLASK_OP_H__
5128+#define __FLASK_OP_H__
5129+
5130+#define FLASK_LOAD 1
5131+#define FLASK_GETENFORCE 2
5132+#define FLASK_SETENFORCE 3
5133+#define FLASK_CONTEXT_TO_SID 4
5134+#define FLASK_SID_TO_CONTEXT 5
5135+#define FLASK_ACCESS 6
5136+#define FLASK_CREATE 7
5137+#define FLASK_RELABEL 8
5138+#define FLASK_USER 9
5139+#define FLASK_POLICYVERS 10
5140+#define FLASK_GETBOOL 11
5141+#define FLASK_SETBOOL 12
5142+#define FLASK_COMMITBOOLS 13
5143+#define FLASK_MLS 14
5144+#define FLASK_DISABLE 15
5145+#define FLASK_GETAVC_THRESHOLD 16
5146+#define FLASK_SETAVC_THRESHOLD 17
5147+#define FLASK_AVC_HASHSTATS 18
5148+#define FLASK_AVC_CACHESTATS 19
5149+#define FLASK_MEMBER 20
5150+
5151+#define FLASK_LAST FLASK_MEMBER
5152+
5153+typedef struct flask_op {
5154+ uint32_t cmd;
5155+ uint32_t size;
5156+ char *buf;
5157+} flask_op_t;
5158+
5159+DEFINE_XEN_GUEST_HANDLE(flask_op_t);
5160+
5161+#endif