1 Subject: xen3 include-xen-interface
2 From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 728:832aac894efd)
3 Patch-mainline: obsolete
4 Acked-by: jbeulich@novell.com
6 Index: 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
14 +This copyright applies to all files within this subdirectory and its
17 + include/public/hvm/*.h
18 + include/public/io/*.h
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.
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.
28 + -- Keir Fraser (on behalf of the Xen team)
30 +=====================================================================
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:
39 +The above copyright notice and this permission notice shall be included in
40 +all copies or substantial portions of the Software.
42 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
44 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
45 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
46 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
47 +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
48 +DEALINGS IN THE SOFTWARE.
49 Index: head-2008-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
54 +/******************************************************************************
57 + * CPUID interface to Xen.
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:
66 + * The above copyright notice and this permission notice shall be included in
67 + * all copies or substantial portions of the Software.
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.
77 + * Copyright (c) 2007 Citrix Systems, Inc.
80 + * Keir Fraser <keir.fraser@citrix.com>
83 +#ifndef __XEN_PUBLIC_ARCH_X86_CPUID_H__
84 +#define __XEN_PUBLIC_ARCH_X86_CPUID_H__
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))
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
97 +#define XEN_CPUID_SIGNATURE_EBX 0x566e6558 /* "XenV" */
98 +#define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */
99 +#define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */
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).
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.
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)
121 +#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */
122 Index: 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
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.
131 + * Copyright (c) 2007 XenSource Ltd.
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:
140 + * The above copyright notice and this permission notice shall be included in
141 + * all copies or substantial portions of the Software.
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.
152 +#ifndef __XEN_PUBLIC_HVM_SAVE_X86_H__
153 +#define __XEN_PUBLIC_HVM_SAVE_X86_H__
156 + * Save/restore header: general info about the save file.
159 +#define HVM_FILE_MAGIC 0x54381286
160 +#define HVM_FILE_VERSION 0x00000001
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 */
170 +DECLARE_HVM_SAVE_TYPE(HEADER, 1, struct hvm_save_header);
178 + uint8_t fpu_regs[512];
228 + uint32_t ldtr_limit;
229 + uint32_t idtr_limit;
230 + uint32_t gdtr_limit;
239 + uint64_t ldtr_base;
240 + uint64_t idtr_base;
241 + uint64_t gdtr_base;
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;
252 + uint32_t sysenter_cs;
255 + uint64_t sysenter_esp;
256 + uint64_t sysenter_eip;
258 + /* msr for em64t */
259 + uint64_t shadow_gs;
261 + /* msr content saved/restored. */
262 + uint64_t msr_flags;
263 + uint64_t msr_lstar;
265 + uint64_t msr_cstar;
266 + uint64_t msr_syscall_mask;
269 + /* guest's idea of what rdtsc() would return */
272 + /* pending event, if any */
274 + uint32_t pending_event;
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;
283 + /* error code for pending event */
284 + uint32_t error_code;
287 +DECLARE_HVM_SAVE_TYPE(CPU, 2, struct hvm_hw_cpu);
294 +struct hvm_hw_vpic {
295 + /* IR line bitmasks. */
300 + /* Line IRx maps to IRQ irq_base+x */
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)
309 + uint8_t init_state:4;
311 + /* IR line with highest priority. */
312 + uint8_t priority_add:4;
314 + /* Reads from A=0 obtain ISR or IRR? */
315 + uint8_t readsel_isr:1;
317 + /* Reads perform a polling read? */
320 + /* Automatically clear IRQs from the ISR during INTA? */
321 + uint8_t auto_eoi:1;
323 + /* Automatically rotate IRQ priorities during AEOI? */
324 + uint8_t rotate_on_auto_eoi:1;
326 + /* Exclude slave inputs when considering in-service IRQs? */
327 + uint8_t special_fully_nested_mode:1;
329 + /* Special mask mode excludes masked IRs from AEOI and priority checks. */
330 + uint8_t special_mask_mode:1;
332 + /* Is this a master PIC or slave PIC? (NB. This is not programmable.) */
333 + uint8_t is_master:1;
335 + /* Edge/trigger selection. */
338 + /* Virtual INT output. */
339 + uint8_t int_output;
342 +DECLARE_HVM_SAVE_TYPE(PIC, 3, struct hvm_hw_vpic);
350 +#define VIOAPIC_IS_IOSAPIC 1
351 +#define VIOAPIC_NUM_PINS 24
353 +#define VIOAPIC_NUM_PINS 48 /* 16 ISA IRQs, 32 non-legacy PCI IRQS. */
356 +struct hvm_hw_vioapic {
357 + uint64_t base_address;
360 + union vioapic_redir_entry
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;
373 +#if !VIOAPIC_IS_IOSAPIC
374 + uint8_t reserved[4];
377 + uint8_t reserved[3];
381 + } redirtbl[VIOAPIC_NUM_PINS];
384 +DECLARE_HVM_SAVE_TYPE(IOAPIC, 4, struct hvm_hw_vioapic);
391 +struct hvm_hw_lapic {
392 + uint64_t apic_base_msr;
393 + uint32_t disabled; /* VLAPIC_xx_DISABLED */
394 + uint32_t timer_divisor;
397 +DECLARE_HVM_SAVE_TYPE(LAPIC, 5, struct hvm_hw_lapic);
399 +struct hvm_hw_lapic_regs {
400 + uint8_t data[1024];
403 +DECLARE_HVM_SAVE_TYPE(LAPIC_REGS, 6, struct hvm_hw_lapic_regs);
410 +struct hvm_hw_pci_irqs {
412 + * Virtual interrupt wires for a single PCI bus.
413 + * Indexed by: device*4 + INTx#.
416 + DECLARE_BITMAP(i, 32*4);
421 +DECLARE_HVM_SAVE_TYPE(PCI_IRQ, 7, struct hvm_hw_pci_irqs);
423 +struct hvm_hw_isa_irqs {
425 + * Virtual interrupt wires for ISA devices.
426 + * Indexed by ISA IRQ (assumes no ISA-device IRQ sharing).
429 + DECLARE_BITMAP(i, 16);
434 +DECLARE_HVM_SAVE_TYPE(ISA_IRQ, 8, struct hvm_hw_isa_irqs);
436 +struct hvm_hw_pci_link {
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.
447 +DECLARE_HVM_SAVE_TYPE(PCI_LINK, 9, struct hvm_hw_pci_link);
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;
460 + uint8_t read_state;
461 + uint8_t write_state;
462 + uint8_t write_latch;
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;
472 +DECLARE_HVM_SAVE_TYPE(PIT, 10, struct hvm_hw_pit);
479 +#define RTC_CMOS_SIZE 14
482 + uint8_t cmos_data[RTC_CMOS_SIZE];
483 + /* Index register for 2-part operations */
484 + uint8_t cmos_index;
488 +DECLARE_HVM_SAVE_TYPE(RTC, 11, struct hvm_hw_rtc);
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 */
514 + /* Hidden register state */
515 + uint64_t period[HPET_TIMER_NUM]; /* Last value written to comparator */
518 +DECLARE_HVM_SAVE_TYPE(HPET, 12, struct hvm_hw_hpet);
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 */
531 +DECLARE_HVM_SAVE_TYPE(PMTIMER, 13, struct hvm_hw_pmtimer);
537 +struct hvm_hw_mtrr {
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;
548 +DECLARE_HVM_SAVE_TYPE(MTRR, 14, struct hvm_hw_mtrr);
551 + * Viridian hypervisor context.
554 +struct hvm_viridian_context {
555 + uint64_t hypercall_gpa;
556 + uint64_t guest_os_id;
559 +DECLARE_HVM_SAVE_TYPE(VIRIDIAN, 15, struct hvm_viridian_context);
562 + * Largest type-code in use
564 +#define HVM_SAVE_CODE_MAX 15
566 +#endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */
567 Index: 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
572 +/******************************************************************************
575 + * Contributed by Advanced Micro Devices, Inc.
576 + * Author: Christoph Egger <Christoph.Egger@amd.com>
578 + * Guest OS machine check interface to x86 Xen.
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:
587 + * The above copyright notice and this permission notice shall be included in
588 + * all copies or substantial portions of the Software.
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.
599 +/* Full MCA functionality has the following Usecases from the guest side:
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")
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
624 +#ifndef __XEN_PUBLIC_ARCH_X86_MCA_H__
625 +#define __XEN_PUBLIC_ARCH_X86_MCA_H__
628 +#define __HYPERVISOR_mca __HYPERVISOR_arch_0
630 +#define XEN_MCA_INTERFACE_VERSION 0x03000001
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. */
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
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. */
656 +#ifndef __ASSEMBLY__
658 +#define VIRQ_MCA VIRQ_ARCH_0 /* G. (DOM0) Machine Check Architecture */
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
668 +#define MC_TYPE_GLOBAL 0
669 +#define MC_TYPE_BANK 1
670 +#define MC_TYPE_EXTENDED 2
672 +struct mcinfo_common {
673 + uint16_t type; /* structure type */
674 + uint16_t size; /* size of this struct in bytes */
678 +#define MC_FLAG_CORRECTABLE (1 << 0)
679 +#define MC_FLAG_UNCORRECTABLE (1 << 1)
681 +/* contains global x86 mc information */
682 +struct mcinfo_global {
683 + struct mcinfo_common common;
685 + /* running domain at the time in error (most likely the impacted one) */
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 */
695 +/* contains bank local x86 mc information */
696 +struct mcinfo_bank {
697 + struct mcinfo_common common;
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 */
710 + uint64_t reg; /* MSR */
711 + uint64_t value; /* MSR value */
714 +/* contains mc information from other
715 + * or additional mc MSRs */
716 +struct mcinfo_extended {
717 + struct mcinfo_common common;
719 + /* You can fill up to five registers.
720 + * If you need more, then use this structure
721 + * multiple times. */
723 + uint32_t mc_msrs; /* Number of msr with valid values. */
724 + struct mcinfo_msr mc_msr[5];
727 +#define MCINFO_HYPERCALLSIZE 1024
728 +#define MCINFO_MAXSIZE 768
731 + /* Number of mcinfo_* entries in mi_data */
732 + uint32_t mi_nentries;
734 + uint8_t mi_data[MCINFO_MAXSIZE - sizeof(uint32_t)];
736 +typedef struct mc_info mc_info_t;
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).
747 + * uint32_t x86_mcinfo_nentries(struct mc_info *mi);
749 +#define x86_mcinfo_nentries(_mi) \
752 + * struct mcinfo_common *x86_mcinfo_first(struct mc_info *mi);
754 +#define x86_mcinfo_first(_mi) \
755 + (struct mcinfo_common *)((_mi)->mi_data)
757 + * struct mcinfo_common *x86_mcinfo_next(struct mcinfo_common *mic);
759 +#define x86_mcinfo_next(_mic) \
760 + (struct mcinfo_common *)((uint8_t *)(_mic) + (_mic)->size)
763 + * void x86_mcinfo_lookup(void *ret, struct mc_info *mi, uint16_t type);
765 +#define x86_mcinfo_lookup(_ret, _mi, _type) \
767 + uint32_t found, i; \
768 + struct mcinfo_common *_mic; \
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)) { \
779 + _mic = x86_mcinfo_next(_mic); \
781 + (_ret) = found ? _mic : NULL; \
786 + * Register machine check trap callback handler
787 + * (already done via "set_trap_table" hypercall)
791 + * Dom0 registers machine check event callback handler
792 + * done by EVTCHNOP_bind_virq
796 + * Fetch machine check data from hypervisor.
797 + * Note, this hypercall is special, because both Dom0 and DomU must use this.
799 +#define XEN_MC_fetch 1
800 +struct xen_mc_fetch {
801 + /* IN/OUT variables. */
804 +/* IN: XEN_MC_CORRECTABLE, XEN_MC_TRAP */
805 +/* OUT: XEN_MC_OK, XEN_MC_FETCHFAILED, XEN_MC_NODATA, XEN_MC_NOMATCH */
807 + /* OUT variables. */
808 + uint32_t fetch_idx; /* only useful for Dom0 for the notify hypercall */
809 + struct mc_info mc_info;
811 +typedef struct xen_mc_fetch xen_mc_fetch_t;
812 +DEFINE_XEN_GUEST_HANDLE(xen_mc_fetch_t);
816 + * This tells the hypervisor to notify a DomU about the machine check error
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. */
826 + /* IN/OUT variables. */
829 +/* IN: XEN_MC_CORRECTABLE, XEN_MC_TRAP */
830 +/* OUT: XEN_MC_OK, XEN_MC_CANNOTHANDLE, XEN_MC_NOTDELIVERED, XEN_MC_NOMATCH */
832 +typedef struct xen_mc_notifydomain xen_mc_notifydomain_t;
833 +DEFINE_XEN_GUEST_HANDLE(xen_mc_notifydomain_t);
838 + uint32_t interface_version; /* XEN_MCA_INTERFACE_VERSION */
840 + struct xen_mc_fetch mc_fetch;
841 + struct xen_mc_notifydomain mc_notifydomain;
842 + uint8_t pad[MCINFO_HYPERCALLSIZE];
845 +typedef struct xen_mc xen_mc_t;
846 +DEFINE_XEN_GUEST_HANDLE(xen_mc_t);
848 +#endif /* __ASSEMBLY__ */
850 +#endif /* __XEN_PUBLIC_ARCH_X86_MCA_H__ */
851 Index: 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
856 +/******************************************************************************
859 + * Guest OS interface to x86 32-bit Xen.
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:
868 + * The above copyright notice and this permission notice shall be included in
869 + * all copies or substantial portions of the Software.
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.
879 + * Copyright (c) 2004-2007, K A Fraser
882 +#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
883 +#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
886 + * Hypercall interface:
887 + * Input: %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
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)
894 +#if __XEN_INTERFACE_VERSION__ < 0x00030203
896 + * Legacy hypercall interface:
897 + * As above, except the entry sequence to the hypervisor is:
898 + * mov $hypercall-number*32,%eax ; int $0x82
900 +#define TRAP_INSTR "int $0x82"
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.
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 */
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
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)
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)
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
947 +#ifndef HYPERVISOR_VIRT_START
948 +#define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START)
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)
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; \
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)
976 +#ifndef __ASSEMBLY__
978 +struct cpu_user_regs {
986 + uint16_t error_code; /* private */
987 + uint16_t entry_vector; /* private */
990 + uint8_t saved_upcall_mask;
992 + uint32_t eflags; /* eflags.IF == !saved_upcall_mask */
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;
1000 +typedef struct cpu_user_regs cpu_user_regs_t;
1001 +DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
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.
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))
1011 +struct arch_vcpu_info {
1012 + unsigned long cr2;
1013 + unsigned long pad[5]; /* sizeof(vcpu_info_t) == 64 */
1015 +typedef struct arch_vcpu_info arch_vcpu_info_t;
1017 +struct xen_callback {
1019 + unsigned long eip;
1021 +typedef struct xen_callback xen_callback_t;
1023 +#endif /* !__ASSEMBLY__ */
1025 +#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
1028 + * Local variables:
1030 + * c-set-style: "BSD"
1031 + * c-basic-offset: 4
1033 + * indent-tabs-mode: nil
1036 Index: 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
1041 +/******************************************************************************
1044 + * Guest OS interface to x86 64-bit Xen.
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:
1053 + * The above copyright notice and this permission notice shall be included in
1054 + * all copies or substantial portions of the Software.
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.
1064 + * Copyright (c) 2004-2006, K A Fraser
1067 +#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
1068 +#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
1071 + * Hypercall interface:
1072 + * Input: %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
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)
1079 +#if __XEN_INTERFACE_VERSION__ < 0x00030203
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)
1086 +#define TRAP_INSTR "syscall"
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.
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 */
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
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
1123 +#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
1124 +#define __HYPERVISOR_VIRT_END 0xFFFF880000000000
1125 +#define __MACH2PHYS_VIRT_START 0xFFFF800000000000
1126 +#define __MACH2PHYS_VIRT_END 0xFFFF804000000000
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)
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)
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.
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] */
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
1161 + * orb $3,1*8(%rsp)
1163 + * If flags contains VGCF_in_syscall:
1164 + * Restore RAX, RIP, RFLAGS, RSP.
1165 + * Discard R11, RCX, CS, SS.
1167 + * Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP.
1168 + * All other registers are saved on hypercall entry and restored to user.
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
1175 +#ifndef __ASSEMBLY__
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. */
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; \
1190 +/* Non-gcc sources must always use the proper 64-bit name (e.g., rax). */
1191 +#define __DECL_REG(name) uint64_t r ## name
1194 +struct cpu_user_regs {
1210 + uint32_t error_code; /* private */
1211 + uint32_t entry_vector; /* private */
1213 + uint16_t cs, _pad0[1];
1214 + uint8_t saved_upcall_mask;
1216 + __DECL_REG(flags); /* rflags.IF == !saved_upcall_mask */
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. */
1224 +typedef struct cpu_user_regs cpu_user_regs_t;
1225 +DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
1229 +#define xen_pfn_to_cr3(pfn) ((unsigned long)(pfn) << 12)
1230 +#define xen_cr3_to_pfn(cr3) ((unsigned long)(cr3) >> 12)
1232 +struct arch_vcpu_info {
1233 + unsigned long cr2;
1234 + unsigned long pad; /* sizeof(vcpu_info_t) == 64 */
1236 +typedef struct arch_vcpu_info arch_vcpu_info_t;
1238 +typedef unsigned long xen_callback_t;
1240 +#endif /* !__ASSEMBLY__ */
1242 +#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
1245 + * Local variables:
1247 + * c-set-style: "BSD"
1248 + * c-basic-offset: 4
1250 + * indent-tabs-mode: nil
1253 Index: 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
1258 +/******************************************************************************
1261 + * Guest OS interface to x86 Xen.
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:
1270 + * The above copyright notice and this permission notice shall be included in
1271 + * all copies or substantial portions of the Software.
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.
1281 + * Copyright (c) 2004-2006, K A Fraser
1284 +#include "../xen.h"
1286 +#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
1287 +#define __XEN_PUBLIC_ARCH_X86_XEN_H__
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
1294 +#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
1295 + typedef type * __guest_handle_ ## name
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)
1309 +#if defined(__i386__)
1310 +#include "xen-x86_32.h"
1311 +#elif defined(__x86_64__)
1312 +#include "xen-x86_64.h"
1315 +#ifndef __ASSEMBLY__
1316 +typedef unsigned long xen_pfn_t;
1317 +#define PRI_xen_pfn "lx"
1321 + * SEGMENT DESCRIPTOR TABLES
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.
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)
1333 +/* Maximum number of virtual CPUs in multi-processor guests. */
1334 +#define MAX_VIRT_CPUS 32
1337 +/* Machine check support */
1338 +#include "xen-mca.h"
1340 +#ifndef __ASSEMBLY__
1342 +typedef unsigned long xen_ulong_t;
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
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))
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 */
1364 +typedef struct trap_info trap_info_t;
1365 +DEFINE_XEN_GUEST_HANDLE(trap_info_t);
1367 +typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
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.
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) */
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;
1403 + unsigned long event_callback_eip;
1404 + unsigned long failsafe_callback_eip;
1407 + unsigned long syscall_callback_eip;
1409 + unsigned int event_callback_cs; /* compat CS of event cb */
1410 + unsigned int failsafe_callback_cs; /* compat CS of failsafe cb */
1414 + unsigned long syscall_callback_eip;
1417 + unsigned long vm_assist; /* VMASST_TYPE_* bitmap */
1419 + /* Segment base addresses. */
1421 + uint64_t gs_base_kernel;
1422 + uint64_t gs_base_user;
1425 +typedef struct vcpu_guest_context vcpu_guest_context_t;
1426 +DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
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;
1435 +typedef struct arch_shared_info arch_shared_info_t;
1437 +#endif /* !__ASSEMBLY__ */
1440 + * Prefix forces emulation of some non-trapping instructions.
1441 + * Currently only CPUID.
1443 +#ifdef __ASSEMBLY__
1444 +#define XEN_EMULATE_PREFIX .byte 0x0f,0x0b,0x78,0x65,0x6e ;
1445 +#define XEN_CPUID XEN_EMULATE_PREFIX cpuid
1447 +#define XEN_EMULATE_PREFIX ".byte 0x0f,0x0b,0x78,0x65,0x6e ; "
1448 +#define XEN_CPUID XEN_EMULATE_PREFIX "cpuid"
1451 +#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
1454 + * Local variables:
1456 + * c-set-style: "BSD"
1457 + * c-basic-offset: 4
1459 + * indent-tabs-mode: nil
1462 Index: 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
1467 +/******************************************************************************
1470 + * Guest OS interface to x86 32-bit Xen.
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:
1479 + * The above copyright notice and this permission notice shall be included in
1480 + * all copies or substantial portions of the Software.
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.
1490 + * Copyright (c) 2004-2006, K A Fraser
1493 +#include "arch-x86/xen.h"
1494 Index: 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
1499 +/******************************************************************************
1502 + * Guest OS interface to x86 64-bit Xen.
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:
1511 + * The above copyright notice and this permission notice shall be included in
1512 + * all copies or substantial portions of the Software.
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.
1522 + * Copyright (c) 2004-2006, K A Fraser
1525 +#include "arch-x86/xen.h"
1526 Index: 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
1531 +/******************************************************************************
1534 + * Process command requests from domain-0 guest OS.
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:
1543 + * The above copyright notice and this permission notice shall be included in
1544 + * all copies or substantial portions of the Software.
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.
1554 + * Copyright (c) 2002-2003, B Dragovic
1555 + * Copyright (c) 2002-2006, K Fraser
1558 +#ifndef __XEN_PUBLIC_DOM0_OPS_H__
1559 +#define __XEN_PUBLIC_DOM0_OPS_H__
1562 +#include "platform.h"
1564 +#if __XEN_INTERFACE_VERSION__ >= 0x00030204
1565 +#error "dom0_ops.h is a compatibility interface only"
1568 +#define DOM0_INTERFACE_VERSION XENPF_INTERFACE_VERSION
1570 +#define DOM0_SETTIME XENPF_settime
1571 +#define dom0_settime xenpf_settime
1572 +#define dom0_settime_t xenpf_settime_t
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
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
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
1586 +#define DOM0_MICROCODE XENPF_microcode_update
1587 +#define dom0_microcode xenpf_microcode_update
1588 +#define dom0_microcode_t xenpf_microcode_update_t
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
1594 +typedef uint64_t cpumap_t;
1596 +/* Unsupported legacy operation -- defined for API compatibility. */
1597 +#define DOM0_MSR 15
1599 + /* IN variables. */
1601 + cpumap_t cpu_mask;
1605 + /* OUT variables. */
1609 +typedef struct dom0_msr dom0_msr_t;
1610 +DEFINE_XEN_GUEST_HANDLE(dom0_msr_t);
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 */
1619 +typedef struct dom0_memory_map_entry dom0_memory_map_entry_t;
1620 +DEFINE_XEN_GUEST_HANDLE(dom0_memory_map_entry_t);
1624 + uint32_t interface_version; /* DOM0_INTERFACE_VERSION */
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;
1637 +typedef struct dom0_op dom0_op_t;
1638 +DEFINE_XEN_GUEST_HANDLE(dom0_op_t);
1640 +#endif /* __XEN_PUBLIC_DOM0_OPS_H__ */
1643 + * Local variables:
1645 + * c-set-style: "BSD"
1646 + * c-basic-offset: 4
1648 + * indent-tabs-mode: nil
1651 Index: 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
1656 +/******************************************************************************
1659 + * Domain management operations. For use by node control stack.
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:
1668 + * The above copyright notice and this permission notice shall be included in
1669 + * all copies or substantial portions of the Software.
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.
1679 + * Copyright (c) 2002-2003, B Dragovic
1680 + * Copyright (c) 2002-2006, K Fraser
1683 +#ifndef __XEN_PUBLIC_DOMCTL_H__
1684 +#define __XEN_PUBLIC_DOMCTL_H__
1686 +#if !defined(__XEN__) && !defined(__XEN_TOOLS__)
1687 +#error "domctl operations are intended for use by node control tools only"
1692 +#define XEN_DOMCTL_INTERFACE_VERSION 0x00000005
1694 +struct xenctl_cpumap {
1695 + XEN_GUEST_HANDLE_64(uint8) bitmap;
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.
1703 +#define XEN_DOMCTL_createdomain 1
1704 +struct xen_domctl_createdomain {
1705 + /* IN parameters */
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)
1716 +typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
1717 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t);
1719 +#define XEN_DOMCTL_destroydomain 2
1720 +#define XEN_DOMCTL_pausedomain 3
1721 +#define XEN_DOMCTL_unpausedomain 4
1722 +#define XEN_DOMCTL_resumedomain 27
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. */
1763 + xen_domain_handle_t handle;
1765 +typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;
1766 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);
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;
1780 +typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t;
1781 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t);
1784 +#define XEN_DOMCTL_getpageframeinfo 7
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)
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 */
1804 +typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t;
1805 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t);
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;
1815 +typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t;
1816 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t);
1820 + * Control shadow pagetables operation
1822 +#define XEN_DOMCTL_shadow_op 10
1824 +/* Disable shadow mode. */
1825 +#define XEN_DOMCTL_SHADOW_OP_OFF 0
1827 +/* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */
1828 +#define XEN_DOMCTL_SHADOW_OP_ENABLE 32
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
1836 +/* Memory allocation accessors. */
1837 +#define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30
1838 +#define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31
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
1848 +/* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */
1850 + * Shadow pagetables are refcounted: guest does not use explicit mmu
1851 + * operations nor write-protect its pagetables.
1853 +#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1)
1855 + * Log pages in a bitmap as they are dirtied.
1856 + * Used for live relocation to determine which pages must be re-sent.
1858 +#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
1860 + * Automatically translate GPFNs into MFNs.
1862 +#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
1864 + * Xen does not steal virtual address space from the guest.
1865 + * Requires HVM support.
1867 +#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)
1869 +struct xen_domctl_shadow_op_stats {
1870 + uint32_t fault_count;
1871 + uint32_t dirty_count;
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);
1876 +struct xen_domctl_shadow_op {
1877 + /* IN variables. */
1878 + uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */
1881 + uint32_t mode; /* XEN_DOMCTL_SHADOW_ENABLE_* */
1883 + /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */
1884 + uint32_t mb; /* Shadow memory allocation in MB */
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;
1891 +typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t;
1892 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t);
1895 +#define XEN_DOMCTL_max_mem 11
1896 +struct xen_domctl_max_mem {
1897 + /* IN variables. */
1898 + uint64_aligned_t max_memkb;
1900 +typedef struct xen_domctl_max_mem xen_domctl_max_mem_t;
1901 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t);
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 */
1910 +typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t;
1911 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t);
1914 +#define XEN_DOMCTL_getvcpuinfo 14
1915 +struct xen_domctl_getvcpuinfo {
1916 + /* IN variables. */
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 */
1925 +typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t;
1926 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t);
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 */
1936 +typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t;
1937 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t);
1940 +#define XEN_DOMCTL_max_vcpus 15
1941 +struct xen_domctl_max_vcpus {
1942 + uint32_t max; /* maximum number of vcpus */
1944 +typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t;
1945 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t);
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_* */
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;
1966 + struct xen_domctl_sched_credit {
1972 +typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t;
1973 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t);
1976 +#define XEN_DOMCTL_setdomainhandle 17
1977 +struct xen_domctl_setdomainhandle {
1978 + xen_domain_handle_t handle;
1980 +typedef struct xen_domctl_setdomainhandle xen_domctl_setdomainhandle_t;
1981 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdomainhandle_t);
1984 +#define XEN_DOMCTL_setdebugging 18
1985 +struct xen_domctl_setdebugging {
1988 +typedef struct xen_domctl_setdebugging xen_domctl_setdebugging_t;
1989 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdebugging_t);
1992 +#define XEN_DOMCTL_irq_permission 19
1993 +struct xen_domctl_irq_permission {
1995 + uint8_t allow_access; /* flag to specify enable/disable of IRQ access */
1997 +typedef struct xen_domctl_irq_permission xen_domctl_irq_permission_t;
1998 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_permission_t);
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? */
2007 +typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t;
2008 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t);
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? */
2017 +typedef struct xen_domctl_ioport_permission xen_domctl_ioport_permission_t;
2018 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_permission_t);
2021 +#define XEN_DOMCTL_hypercall_init 22
2022 +struct xen_domctl_hypercall_init {
2023 + uint64_aligned_t gmfn; /* GMFN to be initialised */
2025 +typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t;
2026 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t);
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_* */
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. */
2045 +} xen_domctl_arch_setup_t;
2046 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t);
2049 +#define XEN_DOMCTL_settimeoffset 24
2050 +struct xen_domctl_settimeoffset {
2051 + int32_t time_offset_seconds; /* applied to domain wallclock time */
2053 +typedef struct xen_domctl_settimeoffset xen_domctl_settimeoffset_t;
2054 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_settimeoffset_t);
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);
2068 +#define XEN_DOMCTL_set_address_size 35
2069 +#define XEN_DOMCTL_get_address_size 36
2070 +typedef struct xen_domctl_address_size {
2072 +} xen_domctl_address_size_t;
2073 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_address_size_t);
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 */
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);
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 */
2092 +typedef struct xen_domctl_sendtrigger xen_domctl_sendtrigger_t;
2093 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendtrigger_t);
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 */
2103 +typedef struct xen_domctl_assign_device xen_domctl_assign_device_t;
2104 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t);
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 */
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);
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 {
2125 +struct xen_domctl_bind_pt_irq {
2126 + uint32_t machine_irq;
2127 + pt_irq_type_t irq_type;
2128 + uint32_t hvm_domid;
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);
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 */
2160 +typedef struct xen_domctl_memory_mapping xen_domctl_memory_mapping_t;
2161 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_memory_mapping_t);
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 */
2172 +typedef struct xen_domctl_ioport_mapping xen_domctl_ioport_mapping_t;
2173 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_mapping_t);
2177 + * Pin caching type of RAM space for x86 HVM domU.
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_* */
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);
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. */
2201 + * SET: Size of struct (IN)
2202 + * GET: Size of struct (OUT)
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;
2216 +typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t;
2217 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpucontext_t);
2220 + * Set optimizaton features for a domain
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;
2227 + /* Make struct non-empty: do not depend on this field name! */
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);
2235 + * Set the target domain for a domain
2237 +#define XEN_DOMCTL_set_target 46
2238 +struct xen_domctl_set_target {
2241 +typedef struct xen_domctl_set_target xen_domctl_set_target_t;
2242 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t);
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];
2254 +typedef struct xen_domctl_cpuid xen_domctl_cpuid_t;
2255 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_cpuid_t);
2258 +#define XEN_DOMCTL_subscribe 29
2259 +struct xen_domctl_subscribe {
2260 + uint32_t port; /* IN */
2262 +typedef struct xen_domctl_subscribe xen_domctl_subscribe_t;
2263 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_subscribe_t);
2266 + * Define the maximum machine address size which should be allocated
2269 +#define XEN_DOMCTL_set_machine_address_size 51
2270 +#define XEN_DOMCTL_get_machine_address_size 52
2273 + * Do not inject spurious page faults into this domain.
2275 +#define XEN_DOMCTL_suppress_spurious_page_faults 53
2277 +struct xen_domctl {
2279 + uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
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;
2322 +typedef struct xen_domctl xen_domctl_t;
2323 +DEFINE_XEN_GUEST_HANDLE(xen_domctl_t);
2325 +#endif /* __XEN_PUBLIC_DOMCTL_H__ */
2328 + * Local variables:
2330 + * c-set-style: "BSD"
2331 + * c-basic-offset: 4
2333 + * indent-tabs-mode: nil
2336 Index: 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
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:
2350 + * The above copyright notice and this permission notice shall be included in
2351 + * all copies or substantial portions of the Software.
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.
2362 +#ifndef __XEN_PUBLIC_HVM_E820_H__
2363 +#define __XEN_PUBLIC_HVM_E820_H__
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
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)
2374 +#endif /* __XEN_PUBLIC_HVM_E820_H__ */
2375 Index: 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
2380 +/******************************************************************************
2381 + * hvm/hvm_info_table.h
2383 + * HVM parameter and information table, written into guest memory map.
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:
2392 + * The above copyright notice and this permission notice shall be included in
2393 + * all copies or substantial portions of the Software.
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.
2404 +#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
2405 +#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
2407 +#define HVM_INFO_PFN 0x09F
2408 +#define HVM_INFO_OFFSET 0x800
2409 +#define HVM_INFO_PADDR ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
2411 +struct hvm_info_table {
2412 + char signature[8]; /* "HVM INFO" */
2415 + uint8_t acpi_enabled;
2416 + uint8_t apic_mode;
2417 + uint32_t nr_vcpus;
2420 +#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
2421 Index: 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
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:
2434 + * The above copyright notice and this permission notice shall be included in
2435 + * all copies or substantial portions of the Software.
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.
2446 +#ifndef __XEN_PUBLIC_HVM_HVM_OP_H__
2447 +#define __XEN_PUBLIC_HVM_HVM_OP_H__
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 */
2457 +typedef struct xen_hvm_param xen_hvm_param_t;
2458 +DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
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. */
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). */
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);
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. */
2478 + /* ISA device identification, by ISA IRQ (0-15). */
2480 + /* Assertion level (0 = unasserted, 1 = asserted). */
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);
2486 +#define HVMOP_set_pci_link_route 4
2487 +struct xen_hvm_set_pci_link_route {
2488 + /* Domain to be updated. */
2490 + /* PCI link identifier (0-3). */
2492 + /* ISA IRQ (1-15), or 0 (disable link). */
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);
2498 +/* Flushes all VCPU TLBs: @arg must be NULL. */
2499 +#define HVMOP_flush_tlbs 5
2501 +/* Following tools-only interfaces may change in future. */
2502 +#if defined(__XEN__) || defined(__XEN_TOOLS__)
2504 +/* Track dirty VRAM. */
2505 +#define HVMOP_track_dirty_vram 6
2506 +struct xen_hvm_track_dirty_vram {
2507 + /* Domain to be tracked. */
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;
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);
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. */
2526 + uint64_aligned_t first_pfn;
2527 + /* Number of pages. */
2528 + uint64_aligned_t nr;
2530 +typedef struct xen_hvm_modified_memory xen_hvm_modified_memory_t;
2531 +DEFINE_XEN_GUEST_HANDLE(xen_hvm_modified_memory_t);
2533 +#define HVMOP_set_mem_type 8
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 */
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. */
2544 + hvmmem_type_t hvmmem_type;
2546 + uint64_aligned_t first_pfn;
2547 + /* Number of pages. */
2548 + uint64_aligned_t nr;
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);
2554 +#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
2556 +#endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */
2557 Index: 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
2563 + * ioreq.h: I/O request definitions for device models
2564 + * Copyright (c) 2004, Intel Corporation.
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:
2573 + * The above copyright notice and this permission notice shall be included in
2574 + * all copies or substantial portions of the Software.
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.
2588 +#define IOREQ_READ 1
2589 +#define IOREQ_WRITE 0
2591 +#define STATE_IOREQ_NONE 0
2592 +#define STATE_IOREQ_READY 1
2593 +#define STATE_IOREQ_INPROCESS 2
2594 +#define STATE_IORESP_READY 3
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 */
2602 + * VMExit dispatcher should cooperate with instruction decoder to
2603 + * prepare this structure and notify service OS and DM by sending
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) */
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 */
2617 + uint8_t type; /* I/O type */
2619 + uint64_t io_count; /* How many IO done on a vcpu */
2621 +typedef struct ioreq ioreq_t;
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;
2629 +typedef struct vcpu_iodata vcpu_iodata_t;
2631 +struct shared_iopage {
2632 + struct vcpu_iodata vcpu_iodata[1];
2634 +typedef struct shared_iopage shared_iopage_t;
2637 + uint8_t type; /* I/O type */
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 */
2644 +typedef struct buf_ioreq buf_ioreq_t;
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;
2654 +#if defined(__ia64__)
2655 +struct pio_buffer {
2656 + uint32_t page_offset;
2658 + uint32_t data_end;
2659 + uint32_t buf_size;
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];
2670 +#endif /* defined(__ia64__) */
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
2678 +#endif /* _IOREQ_H_ */
2681 + * Local variables:
2683 + * c-set-style: "BSD"
2684 + * c-basic-offset: 4
2686 + * indent-tabs-mode: nil
2689 Index: 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
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:
2702 + * The above copyright notice and this permission notice shall be included in
2703 + * all copies or substantial portions of the Software.
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.
2714 +#ifndef __XEN_PUBLIC_HVM_PARAMS_H__
2715 +#define __XEN_PUBLIC_HVM_PARAMS_H__
2717 +#include "hvm_op.h"
2720 + * Parameter space for HVMOP_{set,get}_param.
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.
2731 +#define HVM_PARAM_CALLBACK_IRQ 0
2734 + * These are not used by Xen. They are here for convenience of HVM-guest
2735 + * xenbus implementations.
2737 +#define HVM_PARAM_STORE_PFN 1
2738 +#define HVM_PARAM_STORE_EVTCHN 2
2740 +#define HVM_PARAM_PAE_ENABLED 4
2742 +#define HVM_PARAM_IOREQ_PFN 5
2744 +#define HVM_PARAM_BUFIOREQ_PFN 6
2748 +#define HVM_PARAM_NVRAM_FD 7
2749 +#define HVM_PARAM_VHPT_SIZE 8
2750 +#define HVM_PARAM_BUFPIOREQ_PFN 9
2752 +#elif defined(__i386__) || defined(__x86_64__)
2754 +/* Expose Viridian interfaces to this HVM guest? */
2755 +#define HVM_PARAM_VIRIDIAN 9
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.
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
2784 +/* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */
2785 +#define HVM_PARAM_HPET_ENABLED 11
2787 +/* Identity-map page directory used by Intel EPT when CR0.PG=0. */
2788 +#define HVM_PARAM_IDENT_PT 12
2790 +/* Device Model domain, defaults to 0. */
2791 +#define HVM_PARAM_DM_DOMAIN 13
2793 +/* ACPI S state: currently support S0 and S3 on x86. */
2794 +#define HVM_PARAM_ACPI_S_STATE 14
2796 +#define HVM_NR_PARAMS 15
2798 +#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
2799 Index: 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
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.
2810 + * Copyright (c) 2007 XenSource Ltd.
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:
2819 + * The above copyright notice and this permission notice shall be included in
2820 + * all copies or substantial portions of the Software.
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.
2831 +#ifndef __XEN_PUBLIC_HVM_SAVE_H__
2832 +#define __XEN_PUBLIC_HVM_SAVE_H__
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.
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.
2845 +#if !defined(__GNUC__) || defined(__STRICT_ANSI__)
2846 +#error "Anonymous structs/unions are a GNU extension."
2850 + * Each entry is preceded by a descriptor giving its type and length
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 */
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
2867 +#define DECLARE_HVM_SAVE_TYPE(_x, _code, _type) \
2868 + struct __HVM_SAVE_TYPE_##_x { _type t; char c[_code]; }
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))
2876 + * The series of save records is teminated by a zero-type, zero-length
2880 +struct hvm_save_end {};
2881 +DECLARE_HVM_SAVE_TYPE(END, 0, struct hvm_save_end);
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"
2888 +#error "unsupported architecture"
2891 +#endif /* __XEN_PUBLIC_HVM_SAVE_H__ */
2892 Index: 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
2897 +/******************************************************************************
2900 + * Interface to FS level split device drivers.
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:
2909 + * The above copyright notice and this permission notice shall be included in
2910 + * all copies or substantial portions of the Software.
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.
2920 + * Copyright (c) 2007, Grzegorz Milos, <gm281@cam.ac.uk>.
2923 +#ifndef __XEN_PUBLIC_IO_FSIF_H__
2924 +#define __XEN_PUBLIC_IO_FSIF_H__
2927 +#include "../grant_table.h"
2929 +#define REQ_FILE_OPEN 1
2930 +#define REQ_FILE_CLOSE 2
2931 +#define REQ_FILE_READ 3
2932 +#define REQ_FILE_WRITE 4
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
2943 +struct fsif_open_request {
2947 +struct fsif_close_request {
2951 +struct fsif_read_request {
2956 + grant_ref_t grefs[1]; /* Variable length */
2959 +struct fsif_write_request {
2964 + grant_ref_t grefs[1]; /* Variable length */
2967 +struct fsif_stat_request {
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;
2978 + int64_t stat_size;
2979 + int64_t stat_atime;
2980 + int64_t stat_mtime;
2981 + int64_t stat_ctime;
2984 +struct fsif_truncate_request {
2990 +struct fsif_remove_request {
2994 +struct fsif_rename_request {
2995 + uint16_t old_name_offset;
2996 + uint16_t new_name_offset;
3000 +struct fsif_create_request {
3008 +struct fsif_list_request {
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)
3022 +struct fsif_chmod_request {
3027 +struct fsif_space_request {
3031 +struct fsif_sync_request {
3036 +/* FS operation request */
3037 +struct fsif_request {
3038 + uint8_t type; /* Type of the request */
3040 + uint16_t id; /* Request ID, copied to the response */
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;
3058 +typedef struct fsif_request fsif_request_t;
3060 +/* FS operation response */
3061 +struct fsif_response {
3067 + struct fsif_stat_response fstat;
3071 +typedef struct fsif_response fsif_response_t;
3073 +#define FSIF_RING_ENTRY_SIZE 64
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)
3080 +DEFINE_RING_TYPES(fsif, struct fsif_request, struct fsif_response);
3082 +#define STATE_INITIALISED "init"
3083 +#define STATE_READY "ready"
3088 Index: 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
3094 + * PCI Backend/Frontend Common Data Structures & Macros
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:
3103 + * The above copyright notice and this permission notice shall be included in
3104 + * all copies or substantial portions of the Software.
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.
3114 + * Author: Ryan Wilson <hap9@epoch.ncsc.mil>
3116 +#ifndef __XEN_PCI_COMMON_H__
3117 +#define __XEN_PCI_COMMON_H__
3119 +/* Be sure to bump this number if you change this file */
3120 +#define XEN_PCI_MAGIC "7"
3122 +/* xen_pci_sharedinfo flags */
3123 +#define _XEN_PCIF_active (0)
3124 +#define XEN_PCIF_active (1<<_XEN_PCI_active)
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)
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)
3144 + * it should be PAGE_SIZE-sizeof(struct xen_pci_op))/sizeof(struct msix_entry))
3145 + * Should not exceed 128
3147 +#define SH_INFO_MAX_VEC 128
3149 +struct xen_msix_entry {
3153 +struct xen_pci_op {
3154 + /* IN: what action to perform: XEN_PCI_OP_* */
3157 + /* OUT: will contain an error number (if any) from errno.h */
3160 + /* IN: which device to touch */
3161 + uint32_t domain; /* PCI Domain/Segment */
3165 + /* IN: which configuration registers to touch */
3169 + /* IN/OUT: Contains the result after a READ or the value to WRITE */
3171 + /* IN: Contains extra infor for this operation */
3173 + /*IN: param for msi-x */
3174 + struct xen_msix_entry msix_entries[SH_INFO_MAX_VEC];
3177 +struct xen_pci_sharedinfo {
3178 + /* flags - XEN_PCIF_* */
3180 + struct xen_pci_op op;
3183 +#endif /* __XEN_PCI_COMMON_H__ */
3186 + * Local variables:
3188 + * c-set-style: "BSD"
3189 + * c-basic-offset: 4
3191 + * indent-tabs-mode: nil
3194 Index: 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
3199 +/******************************************************************************
3202 + * TPM I/O interface for Xen guest OSes.
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:
3211 + * The above copyright notice and this permission notice shall be included in
3212 + * all copies or substantial portions of the Software.
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.
3222 + * Copyright (c) 2005, IBM Corporation
3224 + * Author: Stefan Berger, stefanb@us.ibm.com
3225 + * Grant table support: Mahadevan Gomathisankaran
3227 + * This code has been derived from tools/libxc/xen/io/netif.h
3229 + * Copyright (c) 2003-2004, Keir Fraser
3232 +#ifndef __XEN_PUBLIC_IO_TPMIF_H__
3233 +#define __XEN_PUBLIC_IO_TPMIF_H__
3235 +#include "../grant_table.h"
3237 +struct tpmif_tx_request {
3238 + unsigned long addr; /* Machine address of packet. */
3239 + grant_ref_t ref; /* grant table access reference */
3241 + uint16_t size; /* Packet size in bytes. */
3243 +typedef struct tpmif_tx_request tpmif_tx_request_t;
3246 + * The TPMIF_TX_RING_SIZE defines the number of pages the
3247 + * front-end and backend can exchange (= size of array).
3249 +typedef uint32_t TPMIF_RING_IDX;
3251 +#define TPMIF_TX_RING_SIZE 1
3253 +/* This structure must fit in a memory page. */
3255 +struct tpmif_ring {
3256 + struct tpmif_tx_request req;
3258 +typedef struct tpmif_ring tpmif_ring_t;
3260 +struct tpmif_tx_interface {
3261 + struct tpmif_ring ring[TPMIF_TX_RING_SIZE];
3263 +typedef struct tpmif_tx_interface tpmif_tx_interface_t;
3268 + * Local variables:
3270 + * c-set-style: "BSD"
3271 + * c-basic-offset: 4
3273 + * indent-tabs-mode: nil
3276 Index: 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
3281 +/******************************************************************************
3284 + * Based on the blkif.h code.
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:
3293 + * The above copyright notice and this permission notice shall be included in
3294 + * all copies or substantial portions of the Software.
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.
3304 + * Copyright(c) FUJITSU Limited 2008.
3307 +#ifndef __XEN__PUBLIC_IO_SCSI_H__
3308 +#define __XEN__PUBLIC_IO_SCSI_H__
3311 +#include "../grant_table.h"
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*/
3319 +#define VSCSIIF_BACK_MAX_PENDING_REQS 128
3322 + * Maximum scatter/gather segments per request.
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.
3328 +#define VSCSIIF_SG_TABLESIZE 26
3331 + * base on linux kernel 2.6.18
3333 +#define VSCSIIF_MAX_COMMAND_SIZE 16
3334 +#define VSCSIIF_SENSE_BUFFERSIZE 96
3337 +struct vscsiif_request {
3338 + uint16_t rqid; /* private guest value, echoed in resp */
3339 + uint8_t act; /* command between backend and frontend */
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;
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 */
3352 + struct scsiif_request_segment {
3356 + } seg[VSCSIIF_SG_TABLESIZE];
3357 + uint32_t reserved[3];
3359 +typedef struct vscsiif_request vscsiif_request_t;
3361 +struct vscsiif_response {
3364 + uint8_t sense_len;
3365 + uint8_t sense_buffer[VSCSIIF_SENSE_BUFFERSIZE];
3367 + uint32_t residual_len; /* request bufflen -
3368 + return the value from physical device */
3369 + uint32_t reserved[36];
3371 +typedef struct vscsiif_response vscsiif_response_t;
3373 +DEFINE_RING_TYPES(vscsiif, struct vscsiif_request, struct vscsiif_response);
3376 +#endif /*__XEN__PUBLIC_IO_SCSI_H__*/
3378 + * Local variables:
3380 + * c-set-style: "BSD"
3381 + * c-basic-offset: 4
3383 + * indent-tabs-mode: nil
3386 Index: 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
3391 +/******************************************************************************
3392 + * kexec.h - Public portion
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:
3401 + * The above copyright notice and this permission notice shall be included in
3402 + * all copies or substantial portions of the Software.
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.
3412 + * Xen port written by:
3413 + * - Simon 'Horms' Horman <horms@verge.net.au>
3414 + * - Magnus Damm <magnus@valinux.co.jp>
3417 +#ifndef _XEN_PUBLIC_KEXEC_H
3418 +#define _XEN_PUBLIC_KEXEC_H
3421 +/* This file describes the Kexec / Kdump hypercall interface for Xen.
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.
3430 + * The hypercall interface for kexec can be divided into three main
3431 + * types of hypercall operations:
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.
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.
3445 + * 3) Kexec operation:
3446 + * This is used to start a previously loaded kernel.
3451 +#if defined(__i386__) || defined(__x86_64__)
3452 +#define KEXEC_XEN_NO_PAGES 17
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).
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
3473 +#define KEXEC_TYPE_DEFAULT 0
3474 +#define KEXEC_TYPE_CRASH 1
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.
3486 +typedef struct xen_kexec_image {
3487 +#if defined(__i386__) || defined(__x86_64__)
3488 + unsigned long page_list[KEXEC_XEN_NO_PAGES];
3490 +#if defined(__ia64__)
3491 + unsigned long reboot_code_buffer;
3493 + unsigned long indirection_page;
3494 + unsigned long start_address;
3495 +} xen_kexec_image_t;
3498 + * Perform kexec having previously loaded a kexec or kdump kernel
3500 + * type == KEXEC_TYPE_DEFAULT or KEXEC_TYPE_CRASH [in]
3502 +#define KEXEC_CMD_kexec 0
3503 +typedef struct xen_kexec_exec {
3505 +} xen_kexec_exec_t;
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]
3512 +#define KEXEC_CMD_kexec_load 1
3513 +#define KEXEC_CMD_kexec_unload 2
3514 +typedef struct xen_kexec_load {
3516 + xen_kexec_image_t image;
3517 +} xen_kexec_load_t;
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 */
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]
3540 +#define KEXEC_CMD_kexec_get_range 3
3541 +typedef struct xen_kexec_range {
3544 + unsigned long size;
3545 + unsigned long start;
3546 +} xen_kexec_range_t;
3548 +#endif /* _XEN_PUBLIC_KEXEC_H */
3551 + * Local variables:
3553 + * c-set-style: "BSD"
3554 + * c-basic-offset: 4
3556 + * indent-tabs-mode: nil
3559 Index: 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
3564 +/******************************************************************************
3567 + * NMI callback registration and reason codes.
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:
3576 + * The above copyright notice and this permission notice shall be included in
3577 + * all copies or substantial portions of the Software.
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.
3587 + * Copyright (c) 2005, Keir Fraser <keir@xensource.com>
3590 +#ifndef __XEN_PUBLIC_NMI_H__
3591 +#define __XEN_PUBLIC_NMI_H__
3594 + * NMI reason codes:
3595 + * Currently these are x86-specific, stored in arch_shared_info.nmi_reason.
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)
3608 + * long nmi_op(unsigned int cmd, void *arg)
3609 + * NB. All ops return zero on success, else a negative error code.
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.
3617 +#define XENNMI_register_callback 0
3618 +struct xennmi_callback {
3619 + unsigned long handler_address;
3620 + unsigned long pad;
3622 +typedef struct xennmi_callback xennmi_callback_t;
3623 +DEFINE_XEN_GUEST_HANDLE(xennmi_callback_t);
3626 + * Deregister NMI callback for this (calling) VCPU.
3629 +#define XENNMI_unregister_callback 1
3631 +#endif /* __XEN_PUBLIC_NMI_H__ */
3634 + * Local variables:
3636 + * c-set-style: "BSD"
3637 + * c-basic-offset: 4
3639 + * indent-tabs-mode: nil
3642 Index: 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
3647 +/******************************************************************************
3650 + * Hardware platform operations. Intended for use by domain-0 kernel.
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:
3659 + * The above copyright notice and this permission notice shall be included in
3660 + * all copies or substantial portions of the Software.
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.
3670 + * Copyright (c) 2002-2006, K Fraser
3673 +#ifndef __XEN_PUBLIC_PLATFORM_H__
3674 +#define __XEN_PUBLIC_PLATFORM_H__
3678 +#define XENPF_INTERFACE_VERSION 0x03000001
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>.
3684 +#define XENPF_settime 17
3685 +struct xenpf_settime {
3686 + /* IN variables. */
3689 + uint64_t system_time;
3691 +typedef struct xenpf_settime xenpf_settime_t;
3692 +DEFINE_XEN_GUEST_HANDLE(xenpf_settime_t);
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.
3701 +#define XENPF_add_memtype 31
3702 +struct xenpf_add_memtype {
3703 + /* IN variables. */
3707 + /* OUT variables. */
3711 +typedef struct xenpf_add_memtype xenpf_add_memtype_t;
3712 +DEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t);
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.
3721 +#define XENPF_del_memtype 32
3722 +struct xenpf_del_memtype {
3723 + /* IN variables. */
3727 +typedef struct xenpf_del_memtype xenpf_del_memtype_t;
3728 +DEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t);
3730 +/* Read current type of an MTRR (x86-specific). */
3731 +#define XENPF_read_memtype 33
3732 +struct xenpf_read_memtype {
3733 + /* IN variables. */
3735 + /* OUT variables. */
3740 +typedef struct xenpf_read_memtype xenpf_read_memtype_t;
3741 +DEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t);
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. */
3749 +typedef struct xenpf_microcode_update xenpf_microcode_update_t;
3750 +DEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t);
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;
3760 +typedef struct xenpf_platform_quirk xenpf_platform_quirk_t;
3761 +DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t);
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. */
3771 + /* OUT variables. */
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 */
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 */
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 */
3799 +typedef struct xenpf_firmware_info xenpf_firmware_info_t;
3800 +DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t);
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. */
3810 +typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t;
3811 +DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t);
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). */
3820 +typedef struct xenpf_change_freq xenpf_change_freq_t;
3821 +DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t);
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
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. */
3845 +typedef struct xenpf_getidletime xenpf_getidletime_t;
3846 +DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t);
3848 +#define XENPF_set_processor_pminfo 54
3851 +#define XEN_PROCESSOR_PM_CX 1
3852 +#define XEN_PROCESSOR_PM_PX 2
3853 +#define XEN_PROCESSOR_PM_TX 4
3856 +#define XEN_PM_CX 0
3857 +#define XEN_PM_PX 1
3858 +#define XEN_PM_TX 2
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
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;
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 */
3879 +typedef struct xen_processor_csd xen_processor_csd_t;
3880 +DEFINE_XEN_GUEST_HANDLE(xen_processor_csd_t);
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 */
3890 +typedef struct xen_processor_cx xen_processor_cx_t;
3891 +DEFINE_XEN_GUEST_HANDLE(xen_processor_cx_t);
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;
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 */
3907 +struct xen_pct_register {
3908 + uint8_t descriptor;
3911 + uint8_t bit_width;
3912 + uint8_t bit_offset;
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 */
3925 +typedef struct xen_processor_px xen_processor_px_t;
3926 +DEFINE_XEN_GUEST_HANDLE(xen_processor_px_t);
3928 +struct xen_psd_package {
3929 + uint64_t num_entries;
3930 + uint64_t revision;
3932 + uint64_t coord_type;
3933 + uint64_t num_processors;
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 */
3946 +typedef struct xen_processor_performance xen_processor_performance_t;
3947 +DEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t);
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} */
3954 + struct xen_processor_power power;/* Cx: _CST/_CSD */
3955 + struct xen_processor_performance perf; /* Px: _PPC/_PCT/_PSS/_PSD */
3958 +typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t;
3959 +DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
3961 +struct xen_platform_op {
3963 + uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
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;
3979 +typedef struct xen_platform_op xen_platform_op_t;
3980 +DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t);
3982 +#endif /* __XEN_PUBLIC_PLATFORM_H__ */
3985 + * Local variables:
3987 + * c-set-style: "BSD"
3988 + * c-basic-offset: 4
3990 + * indent-tabs-mode: nil
3993 Index: 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
3998 +/******************************************************************************
4001 + * System management operations. For use by node control stack.
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:
4010 + * The above copyright notice and this permission notice shall be included in
4011 + * all copies or substantial portions of the Software.
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.
4021 + * Copyright (c) 2002-2006, K Fraser
4024 +#ifndef __XEN_PUBLIC_SYSCTL_H__
4025 +#define __XEN_PUBLIC_SYSCTL_H__
4027 +#if !defined(__XEN__) && !defined(__XEN_TOOLS__)
4028 +#error "sysctl operations are intended for use by node control tools only"
4032 +#include "domctl.h"
4034 +#define XEN_SYSCTL_INTERFACE_VERSION 0x00000006
4037 + * Read console content from Xen buffer ring.
4039 +#define XEN_SYSCTL_readconsole 1
4040 +struct xen_sysctl_readconsole {
4041 + /* IN: Non-zero -> clear after reading. */
4043 + /* IN: Non-zero -> start index specified by @index field. */
4044 + uint8_t incremental;
4045 + uint8_t pad0, pad1;
4047 + * IN: Start index for consuming from ring buffer (if @incremental);
4048 + * OUT: End index after consuming from ring buffer.
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. */
4056 +typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t;
4057 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t);
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
4070 + /* IN/OUT variables */
4071 + struct xenctl_cpumap cpu_mask;
4072 + uint32_t evt_mask;
4073 + /* OUT variables */
4074 + uint64_aligned_t buffer_mfn;
4077 +typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t;
4078 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t);
4081 + * Get physical information about the host machine
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;
4094 + uint32_t nr_nodes;
4096 + uint64_aligned_t total_pages;
4097 + uint64_aligned_t free_pages;
4098 + uint64_aligned_t scrub_pages;
4099 + uint32_t hw_cap[8];
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!
4106 + uint32_t max_cpu_id;
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.
4115 + XEN_GUEST_HANDLE_64(uint32) cpu_to_node;
4117 + /* XEN_SYSCTL_PHYSCAP_??? */
4118 + uint32_t capabilities;
4120 +typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t;
4121 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t);
4124 + * Get the ID of the current scheduler.
4126 +#define XEN_SYSCTL_sched_id 4
4127 +struct xen_sysctl_sched_id {
4128 + /* OUT variable */
4129 + uint32_t sched_id;
4131 +typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t;
4132 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t);
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 */
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);
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;
4159 +typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t;
4160 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t);
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;
4171 +typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t;
4172 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t);
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;
4181 +typedef struct xen_sysctl_debug_keys xen_sysctl_debug_keys_t;
4182 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_debug_keys_t);
4184 +/* Get physical CPU information. */
4185 +#define XEN_SYSCTL_getcpuinfo 8
4186 +struct xen_sysctl_cpuinfo {
4187 + uint64_aligned_t idletime;
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. */
4198 +typedef struct xen_sysctl_getcpuinfo xen_sysctl_getcpuinfo_t;
4199 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getcpuinfo_t);
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. */
4210 +typedef struct xen_sysctl_availheap xen_sysctl_availheap_t;
4211 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_availheap_t);
4213 +#define XEN_SYSCTL_get_pmstat 10
4215 + uint64_aligned_t freq; /* Px core frequency */
4216 + uint64_aligned_t residency; /* Px residency time */
4217 + uint64_aligned_t count; /* Px transition count */
4219 +typedef struct pm_px_val pm_px_val_t;
4220 +DEFINE_XEN_GUEST_HANDLE(pm_px_val_t);
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;
4230 +typedef struct pm_px_stat pm_px_stat_t;
4231 +DEFINE_XEN_GUEST_HANDLE(pm_px_stat_t);
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 */
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)
4254 + struct pm_px_stat getpx;
4255 + struct pm_cx_stat getcx;
4256 + /* other struct for tx, etc */
4259 +typedef struct xen_sysctl_get_pmstat xen_sysctl_get_pmstat_t;
4260 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_get_pmstat_t);
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 */
4270 +typedef struct xen_sysctl_cpu_hotplug xen_sysctl_cpu_hotplug_t;
4271 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpu_hotplug_t);
4274 +struct xen_sysctl {
4276 + uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
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;
4292 +typedef struct xen_sysctl xen_sysctl_t;
4293 +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t);
4295 +#endif /* __XEN_PUBLIC_SYSCTL_H__ */
4298 + * Local variables:
4300 + * c-set-style: "BSD"
4301 + * c-basic-offset: 4
4303 + * indent-tabs-mode: nil
4306 Index: 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
4311 +/******************************************************************************
4312 + * include/public/trace.h
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:
4321 + * The above copyright notice and this permission notice shall be included in
4322 + * all copies or substantial portions of the Software.
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.
4332 + * Mark Williamson, (C) 2004 Intel Research Cambridge
4333 + * Copyright (C) 2005 Bin Ren
4336 +#ifndef __XEN_PUBLIC_TRACE_H__
4337 +#define __XEN_PUBLIC_TRACE_H__
4339 +#define TRACE_EXTRA_MAX 7
4340 +#define TRACE_EXTRA_SHIFT 28
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)
4358 +/* Trace subclasses */
4359 +#define TRC_SUBCLS_SHIFT 12
4361 +/* trace subclasses for SVM */
4362 +#define TRC_HVM_ENTRYEXIT 0x00081000 /* VMENTRY and #VMEXIT */
4363 +#define TRC_HVM_HANDLER 0x00082000 /* various HVM handlers */
4365 +#define TRC_SCHED_MIN 0x00021000 /* Just runstate changes */
4366 +#define TRC_SCHED_VERBOSE 0x00028000 /* More inclusive scheduling */
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)
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)
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)
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)
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)
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)
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 */
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)
4471 +/* This structure represents a single trace buffer record. */
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? */
4478 + uint32_t cycles_lo, cycles_hi; /* cycle counter timestamp */
4479 + uint32_t extra_u32[7]; /* event data items */
4482 + uint32_t extra_u32[7]; /* event data items */
4488 + * This structure contains the metadata for a single trace buffer. The head
4489 + * field, indexes into an array of struct t_rec's.
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):
4496 + * This is done because addition modulo X breaks at 2^32 when X is not a
4498 + * (((2^32 - 1) % X) + 1) % X != (2^32) % X
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. */
4505 +#endif /* __XEN_PUBLIC_TRACE_H__ */
4508 + * Local variables:
4510 + * c-set-style: "BSD"
4511 + * c-basic-offset: 4
4513 + * indent-tabs-mode: nil
4516 Index: 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
4521 +/******************************************************************************
4524 + * Guest OS interface to Xen. Compatibility layer.
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:
4533 + * The above copyright notice and this permission notice shall be included in
4534 + * all copies or substantial portions of the Software.
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.
4544 + * Copyright (c) 2006, Christian Limpach
4547 +#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
4548 +#define __XEN_PUBLIC_XEN_COMPAT_H__
4550 +#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030209
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
4560 +#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
4561 +#error "These header files do not support the requested interface version."
4564 +#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
4565 Index: 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
4570 +/******************************************************************************
4573 + * Interface for enabling system wide profiling based on hardware performance
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:
4583 + * The above copyright notice and this permission notice shall be included in
4584 + * all copies or substantial portions of the Software.
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.
4594 + * Copyright (C) 2005 Hewlett-Packard Co.
4595 + * Written by Aravind Menon & Jose Renato Santos
4598 +#ifndef __XEN_PUBLIC_XENOPROF_H__
4599 +#define __XEN_PUBLIC_XENOPROF_H__
4604 + * Commands to HYPERVISOR_xenoprof_op().
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
4624 +#define MAX_OPROF_EVENTS 32
4625 +#define MAX_OPROF_DOMAINS 25
4626 +#define XENOPROF_CPU_TYPE_SIZE 64
4628 +/* Xenoprof performance events (not Xen events) */
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
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;
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];
4653 +typedef struct xenoprof_buf xenoprof_buf_t;
4654 +DEFINE_XEN_GUEST_HANDLE(xenoprof_buf_t);
4657 +struct xenoprof_init {
4658 + int32_t num_events;
4659 + int32_t is_primary;
4660 + char cpu_type[XENOPROF_CPU_TYPE_SIZE];
4662 +typedef struct xenoprof_init xenoprof_init_t;
4663 +DEFINE_XEN_GUEST_HANDLE(xenoprof_init_t);
4665 +struct xenoprof_get_buffer {
4666 + int32_t max_samples;
4669 + uint64_t buf_gmaddr;
4671 +typedef struct xenoprof_get_buffer xenoprof_get_buffer_t;
4672 +DEFINE_XEN_GUEST_HANDLE(xenoprof_get_buffer_t);
4674 +struct xenoprof_counter {
4679 + uint32_t hypervisor;
4682 + uint64_t unit_mask;
4684 +typedef struct xenoprof_counter xenoprof_counter_t;
4685 +DEFINE_XEN_GUEST_HANDLE(xenoprof_counter_t);
4687 +typedef struct xenoprof_passive {
4688 + uint16_t domain_id;
4689 + int32_t max_samples;
4692 + uint64_t buf_gmaddr;
4693 +} xenoprof_passive_t;
4694 +DEFINE_XEN_GUEST_HANDLE(xenoprof_passive_t);
4697 +#endif /* __XEN_PUBLIC_XENOPROF_H__ */
4700 + * Local variables:
4702 + * c-set-style: "BSD"
4703 + * c-basic-offset: 4
4705 + * indent-tabs-mode: nil
4708 Index: 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
4714 + * acm.h: Xen access control module interface defintions
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:
4723 + * The above copyright notice and this permission notice shall be included in
4724 + * all copies or substantial portions of the Software.
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.
4734 + * Reiner Sailer <sailer@watson.ibm.com>
4735 + * Copyright (c) 2005, International Business Machines Corporation.
4738 +#ifndef _XEN_PUBLIC_ACM_H
4739 +#define _XEN_PUBLIC_ACM_H
4741 +#include "../xen.h"
4743 +/* if ACM_DEBUG defined, all hooks should
4744 + * print a short trace message (comment it out
4745 + * when not in testing mode )
4747 +/* #define ACM_DEBUG */
4750 +# define printkd(fmt, args...) printk(fmt,## args)
4752 +# define printkd(fmt, args...)
4755 +/* default ssid reference value if not supplied */
4756 +#define ACM_DEFAULT_SSID 0x0
4757 +#define ACM_DEFAULT_LOCAL_SSID 0x0
4759 +/* Internal ACM ERROR types */
4761 +#define ACM_UNDEF -1
4762 +#define ACM_INIT_SSID_ERROR -2
4763 +#define ACM_INIT_SOID_ERROR -3
4764 +#define ACM_ERROR -4
4766 +/* External ACCESS DECISIONS */
4767 +#define ACM_ACCESS_PERMITTED 0
4768 +#define ACM_ACCESS_DENIED -111
4769 +#define ACM_NULL_POINTER_ERROR -200
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.
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
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
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)
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" : \
4802 +/* the following policy versions must be increased
4803 + * whenever the interpretation of the related
4804 + * policy's data structure changes
4806 +#define ACM_POLICY_VERSION 4
4807 +#define ACM_CHWALL_VERSION 1
4808 +#define ACM_STE_VERSION 1
4810 +/* defines a ssid reference used by xen */
4811 +typedef uint32_t ssidref_t;
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
4819 +/* -------security policy relevant type definitions-------- */
4821 +/* type identifier; compares to "equal" or "not equal" */
4822 +typedef uint16_t domaintype_t;
4824 +/* CHINESE WALL POLICY DATA STRUCTURES
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.
4834 + * conflict_aggregate_set[i] holds the number of
4835 + * running domains that have a conflict with type i.
4837 + * running_types[i] holds the number of running domains
4838 + * that include type i in their ssidref-referenced type set
4840 + * conflict_sets[i][j] is "0" if type j has no conflict
4841 + * with type i and is "1" otherwise.
4843 +/* high-16 = version, low-16 = check magic */
4844 +#define ACM_MAGIC 0x0001debc
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
4850 +/* each offset in bytes from start of the struct they
4853 +/* V3 of the policy buffer aded a version structure */
4854 +struct acm_policy_version
4861 +/* each buffer consists of all policy information for
4862 + * the respective policy given in the policy code
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)
4869 +struct acm_policy_buffer {
4871 + uint32_t policy_version; /* ACM_POLICY_VERSION */
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 */
4883 +struct acm_policy_reference_buffer {
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;
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;
4907 +struct acm_stats_buffer {
4910 + uint32_t primary_policy_code;
4911 + uint32_t primary_stats_offset;
4912 + uint32_t secondary_policy_code;
4913 + uint32_t secondary_stats_offset;
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;
4925 +struct acm_ssid_buffer {
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;
4940 + * Local variables:
4942 + * c-set-style: "BSD"
4943 + * c-basic-offset: 4
4945 + * indent-tabs-mode: nil
4948 Index: 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
4954 + * acm_ops.h: Xen access control module hypervisor commands
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:
4963 + * The above copyright notice and this permission notice shall be included in
4964 + * all copies or substantial portions of the Software.
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.
4974 + * Reiner Sailer <sailer@watson.ibm.com>
4975 + * Copyright (c) 2005,2006 International Business Machines Corporation.
4978 +#ifndef __XEN_PUBLIC_ACM_OPS_H__
4979 +#define __XEN_PUBLIC_ACM_OPS_H__
4981 +#include "../xen.h"
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).
4989 +#define ACM_INTERFACE_VERSION 0xAAAA000A
4991 +/************************************************************************/
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).
5001 +#define ACMOP_setpolicy 1
5002 +struct acm_setpolicy {
5004 + XEN_GUEST_HANDLE_64(void) pushcache;
5005 + uint32_t pushcache_size;
5009 +#define ACMOP_getpolicy 2
5010 +struct acm_getpolicy {
5012 + XEN_GUEST_HANDLE_64(void) pullcache;
5013 + uint32_t pullcache_size;
5017 +#define ACMOP_dumpstats 3
5018 +struct acm_dumpstats {
5020 + XEN_GUEST_HANDLE_64(void) pullcache;
5021 + uint32_t pullcache_size;
5025 +#define ACMOP_getssid 4
5026 +#define ACM_GETBY_ssidref 1
5027 +#define ACM_GETBY_domainid 2
5028 +struct acm_getssid {
5030 + uint32_t get_ssid_by; /* ACM_GETBY_* */
5032 + domaintype_t domainid;
5033 + ssidref_t ssidref;
5035 + XEN_GUEST_HANDLE_64(void) ssidbuf;
5036 + uint32_t ssidbuf_size;
5039 +#define ACMOP_getdecision 5
5040 +struct acm_getdecision {
5042 + uint32_t get_decision_by1; /* ACM_GETBY_* */
5043 + uint32_t get_decision_by2; /* ACM_GETBY_* */
5045 + domaintype_t domainid;
5046 + ssidref_t ssidref;
5049 + domaintype_t domainid;
5050 + ssidref_t ssidref;
5054 + uint32_t acm_decision;
5058 +#define ACMOP_chgpolicy 6
5059 +struct acm_change_policy {
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;
5068 + /* array with error code */
5069 + XEN_GUEST_HANDLE_64(void) err_array;
5070 + uint32_t errarray_size;
5073 +#define ACMOP_relabeldoms 7
5074 +struct acm_relabel_doms {
5076 + XEN_GUEST_HANDLE_64(void) relabel_map;
5077 + uint32_t relabel_map_size;
5079 + XEN_GUEST_HANDLE_64(void) err_array;
5080 + uint32_t errarray_size;
5083 +/* future interface to Xen */
5084 +struct xen_acmctl {
5086 + uint32_t interface_version;
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;
5098 +typedef struct xen_acmctl xen_acmctl_t;
5099 +DEFINE_XEN_GUEST_HANDLE(xen_acmctl_t);
5101 +#endif /* __XEN_PUBLIC_ACM_OPS_H__ */
5104 + * Local variables:
5106 + * c-set-style: "BSD"
5107 + * c-basic-offset: 4
5109 + * indent-tabs-mode: nil
5112 Index: 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
5118 + * This file contains the flask_op hypercall commands and definitions.
5120 + * Author: George Coker, <gscoker@alpha.ncsc.mil>
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.
5127 +#ifndef __FLASK_OP_H__
5128 +#define __FLASK_OP_H__
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
5151 +#define FLASK_LAST FLASK_MEMBER
5153 +typedef struct flask_op {
5159 +DEFINE_XEN_GUEST_HANDLE(flask_op_t);