diff options
Diffstat (limited to 'include/xen/interface')
-rw-r--r-- | include/xen/interface/features.h | 6 | ||||
-rw-r--r-- | include/xen/interface/grant_table.h | 1 | ||||
-rw-r--r-- | include/xen/interface/hvm/hvm_op.h | 46 | ||||
-rw-r--r-- | include/xen/interface/hvm/params.h | 95 | ||||
-rw-r--r-- | include/xen/interface/memory.h | 50 |
5 files changed, 198 insertions, 0 deletions
diff --git a/include/xen/interface/features.h b/include/xen/interface/features.h index f51b6413b054..70d2563ab166 100644 --- a/include/xen/interface/features.h +++ b/include/xen/interface/features.h | |||
@@ -41,6 +41,12 @@ | |||
41 | /* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */ | 41 | /* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */ |
42 | #define XENFEAT_mmu_pt_update_preserve_ad 5 | 42 | #define XENFEAT_mmu_pt_update_preserve_ad 5 |
43 | 43 | ||
44 | /* x86: Does this Xen host support the HVM callback vector type? */ | ||
45 | #define XENFEAT_hvm_callback_vector 8 | ||
46 | |||
47 | /* x86: pvclock algorithm is safe to use on HVM */ | ||
48 | #define XENFEAT_hvm_safe_pvclock 9 | ||
49 | |||
44 | #define XENFEAT_NR_SUBMAPS 1 | 50 | #define XENFEAT_NR_SUBMAPS 1 |
45 | 51 | ||
46 | #endif /* __XEN_PUBLIC_FEATURES_H__ */ | 52 | #endif /* __XEN_PUBLIC_FEATURES_H__ */ |
diff --git a/include/xen/interface/grant_table.h b/include/xen/interface/grant_table.h index 39da93c21de0..39e571796e32 100644 --- a/include/xen/interface/grant_table.h +++ b/include/xen/interface/grant_table.h | |||
@@ -28,6 +28,7 @@ | |||
28 | #ifndef __XEN_PUBLIC_GRANT_TABLE_H__ | 28 | #ifndef __XEN_PUBLIC_GRANT_TABLE_H__ |
29 | #define __XEN_PUBLIC_GRANT_TABLE_H__ | 29 | #define __XEN_PUBLIC_GRANT_TABLE_H__ |
30 | 30 | ||
31 | #include <xen/interface/xen.h> | ||
31 | 32 | ||
32 | /*********************************** | 33 | /*********************************** |
33 | * GRANT TABLE REPRESENTATION | 34 | * GRANT TABLE REPRESENTATION |
diff --git a/include/xen/interface/hvm/hvm_op.h b/include/xen/interface/hvm/hvm_op.h new file mode 100644 index 000000000000..a4827f46ee97 --- /dev/null +++ b/include/xen/interface/hvm/hvm_op.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
3 | * of this software and associated documentation files (the "Software"), to | ||
4 | * deal in the Software without restriction, including without limitation the | ||
5 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
6 | * sell copies of the Software, and to permit persons to whom the Software is | ||
7 | * furnished to do so, subject to the following conditions: | ||
8 | * | ||
9 | * The above copyright notice and this permission notice shall be included in | ||
10 | * all copies or substantial portions of the Software. | ||
11 | * | ||
12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
13 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
14 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
15 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
16 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
17 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
18 | * DEALINGS IN THE SOFTWARE. | ||
19 | */ | ||
20 | |||
21 | #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ | ||
22 | #define __XEN_PUBLIC_HVM_HVM_OP_H__ | ||
23 | |||
24 | /* Get/set subcommands: the second argument of the hypercall is a | ||
25 | * pointer to a xen_hvm_param struct. */ | ||
26 | #define HVMOP_set_param 0 | ||
27 | #define HVMOP_get_param 1 | ||
28 | struct xen_hvm_param { | ||
29 | domid_t domid; /* IN */ | ||
30 | uint32_t index; /* IN */ | ||
31 | uint64_t value; /* IN/OUT */ | ||
32 | }; | ||
33 | DEFINE_GUEST_HANDLE_STRUCT(xen_hvm_param); | ||
34 | |||
35 | /* Hint from PV drivers for pagetable destruction. */ | ||
36 | #define HVMOP_pagetable_dying 9 | ||
37 | struct xen_hvm_pagetable_dying { | ||
38 | /* Domain with a pagetable about to be destroyed. */ | ||
39 | domid_t domid; | ||
40 | /* guest physical address of the toplevel pagetable dying */ | ||
41 | aligned_u64 gpa; | ||
42 | }; | ||
43 | typedef struct xen_hvm_pagetable_dying xen_hvm_pagetable_dying_t; | ||
44 | DEFINE_GUEST_HANDLE_STRUCT(xen_hvm_pagetable_dying_t); | ||
45 | |||
46 | #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ | ||
diff --git a/include/xen/interface/hvm/params.h b/include/xen/interface/hvm/params.h new file mode 100644 index 000000000000..1888d8c157e6 --- /dev/null +++ b/include/xen/interface/hvm/params.h | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
3 | * of this software and associated documentation files (the "Software"), to | ||
4 | * deal in the Software without restriction, including without limitation the | ||
5 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
6 | * sell copies of the Software, and to permit persons to whom the Software is | ||
7 | * furnished to do so, subject to the following conditions: | ||
8 | * | ||
9 | * The above copyright notice and this permission notice shall be included in | ||
10 | * all copies or substantial portions of the Software. | ||
11 | * | ||
12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
13 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
14 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
15 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
16 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
17 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
18 | * DEALINGS IN THE SOFTWARE. | ||
19 | */ | ||
20 | |||
21 | #ifndef __XEN_PUBLIC_HVM_PARAMS_H__ | ||
22 | #define __XEN_PUBLIC_HVM_PARAMS_H__ | ||
23 | |||
24 | #include "hvm_op.h" | ||
25 | |||
26 | /* | ||
27 | * Parameter space for HVMOP_{set,get}_param. | ||
28 | */ | ||
29 | |||
30 | /* | ||
31 | * How should CPU0 event-channel notifications be delivered? | ||
32 | * val[63:56] == 0: val[55:0] is a delivery GSI (Global System Interrupt). | ||
33 | * val[63:56] == 1: val[55:0] is a delivery PCI INTx line, as follows: | ||
34 | * Domain = val[47:32], Bus = val[31:16], | ||
35 | * DevFn = val[15: 8], IntX = val[ 1: 0] | ||
36 | * val[63:56] == 2: val[7:0] is a vector number. | ||
37 | * If val == 0 then CPU0 event-channel notifications are not delivered. | ||
38 | */ | ||
39 | #define HVM_PARAM_CALLBACK_IRQ 0 | ||
40 | |||
41 | #define HVM_PARAM_STORE_PFN 1 | ||
42 | #define HVM_PARAM_STORE_EVTCHN 2 | ||
43 | |||
44 | #define HVM_PARAM_PAE_ENABLED 4 | ||
45 | |||
46 | #define HVM_PARAM_IOREQ_PFN 5 | ||
47 | |||
48 | #define HVM_PARAM_BUFIOREQ_PFN 6 | ||
49 | |||
50 | /* | ||
51 | * Set mode for virtual timers (currently x86 only): | ||
52 | * delay_for_missed_ticks (default): | ||
53 | * Do not advance a vcpu's time beyond the correct delivery time for | ||
54 | * interrupts that have been missed due to preemption. Deliver missed | ||
55 | * interrupts when the vcpu is rescheduled and advance the vcpu's virtual | ||
56 | * time stepwise for each one. | ||
57 | * no_delay_for_missed_ticks: | ||
58 | * As above, missed interrupts are delivered, but guest time always tracks | ||
59 | * wallclock (i.e., real) time while doing so. | ||
60 | * no_missed_ticks_pending: | ||
61 | * No missed interrupts are held pending. Instead, to ensure ticks are | ||
62 | * delivered at some non-zero rate, if we detect missed ticks then the | ||
63 | * internal tick alarm is not disabled if the VCPU is preempted during the | ||
64 | * next tick period. | ||
65 | * one_missed_tick_pending: | ||
66 | * Missed interrupts are collapsed together and delivered as one 'late tick'. | ||
67 | * Guest time always tracks wallclock (i.e., real) time. | ||
68 | */ | ||
69 | #define HVM_PARAM_TIMER_MODE 10 | ||
70 | #define HVMPTM_delay_for_missed_ticks 0 | ||
71 | #define HVMPTM_no_delay_for_missed_ticks 1 | ||
72 | #define HVMPTM_no_missed_ticks_pending 2 | ||
73 | #define HVMPTM_one_missed_tick_pending 3 | ||
74 | |||
75 | /* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */ | ||
76 | #define HVM_PARAM_HPET_ENABLED 11 | ||
77 | |||
78 | /* Identity-map page directory used by Intel EPT when CR0.PG=0. */ | ||
79 | #define HVM_PARAM_IDENT_PT 12 | ||
80 | |||
81 | /* Device Model domain, defaults to 0. */ | ||
82 | #define HVM_PARAM_DM_DOMAIN 13 | ||
83 | |||
84 | /* ACPI S state: currently support S0 and S3 on x86. */ | ||
85 | #define HVM_PARAM_ACPI_S_STATE 14 | ||
86 | |||
87 | /* TSS used on Intel when CR0.PE=0. */ | ||
88 | #define HVM_PARAM_VM86_TSS 15 | ||
89 | |||
90 | /* Boolean: Enable aligning all periodic vpts to reduce interrupts */ | ||
91 | #define HVM_PARAM_VPT_ALIGN 16 | ||
92 | |||
93 | #define HVM_NR_PARAMS 17 | ||
94 | |||
95 | #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ | ||
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index af36ead16817..d3938d3e71f8 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #ifndef __XEN_PUBLIC_MEMORY_H__ | 9 | #ifndef __XEN_PUBLIC_MEMORY_H__ |
10 | #define __XEN_PUBLIC_MEMORY_H__ | 10 | #define __XEN_PUBLIC_MEMORY_H__ |
11 | 11 | ||
12 | #include <linux/spinlock.h> | ||
13 | |||
12 | /* | 14 | /* |
13 | * Increase or decrease the specified domain's memory reservation. Returns a | 15 | * Increase or decrease the specified domain's memory reservation. Returns a |
14 | * -ve errcode on failure, or the # extents successfully allocated or freed. | 16 | * -ve errcode on failure, or the # extents successfully allocated or freed. |
@@ -53,6 +55,48 @@ struct xen_memory_reservation { | |||
53 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_reservation); | 55 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_reservation); |
54 | 56 | ||
55 | /* | 57 | /* |
58 | * An atomic exchange of memory pages. If return code is zero then | ||
59 | * @out.extent_list provides GMFNs of the newly-allocated memory. | ||
60 | * Returns zero on complete success, otherwise a negative error code. | ||
61 | * On complete success then always @nr_exchanged == @in.nr_extents. | ||
62 | * On partial success @nr_exchanged indicates how much work was done. | ||
63 | */ | ||
64 | #define XENMEM_exchange 11 | ||
65 | struct xen_memory_exchange { | ||
66 | /* | ||
67 | * [IN] Details of memory extents to be exchanged (GMFN bases). | ||
68 | * Note that @in.address_bits is ignored and unused. | ||
69 | */ | ||
70 | struct xen_memory_reservation in; | ||
71 | |||
72 | /* | ||
73 | * [IN/OUT] Details of new memory extents. | ||
74 | * We require that: | ||
75 | * 1. @in.domid == @out.domid | ||
76 | * 2. @in.nr_extents << @in.extent_order == | ||
77 | * @out.nr_extents << @out.extent_order | ||
78 | * 3. @in.extent_start and @out.extent_start lists must not overlap | ||
79 | * 4. @out.extent_start lists GPFN bases to be populated | ||
80 | * 5. @out.extent_start is overwritten with allocated GMFN bases | ||
81 | */ | ||
82 | struct xen_memory_reservation out; | ||
83 | |||
84 | /* | ||
85 | * [OUT] Number of input extents that were successfully exchanged: | ||
86 | * 1. The first @nr_exchanged input extents were successfully | ||
87 | * deallocated. | ||
88 | * 2. The corresponding first entries in the output extent list correctly | ||
89 | * indicate the GMFNs that were successfully exchanged. | ||
90 | * 3. All other input and output extents are untouched. | ||
91 | * 4. If not all input exents are exchanged then the return code of this | ||
92 | * command will be non-zero. | ||
93 | * 5. THIS FIELD MUST BE INITIALISED TO ZERO BY THE CALLER! | ||
94 | */ | ||
95 | unsigned long nr_exchanged; | ||
96 | }; | ||
97 | |||
98 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_exchange); | ||
99 | /* | ||
56 | * Returns the maximum machine frame number of mapped RAM in this system. | 100 | * Returns the maximum machine frame number of mapped RAM in this system. |
57 | * This command always succeeds (it never returns an error code). | 101 | * This command always succeeds (it never returns an error code). |
58 | * arg == NULL. | 102 | * arg == NULL. |
@@ -142,4 +186,10 @@ struct xen_translate_gpfn_list { | |||
142 | }; | 186 | }; |
143 | DEFINE_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list); | 187 | DEFINE_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list); |
144 | 188 | ||
189 | |||
190 | /* | ||
191 | * Prevent the balloon driver from changing the memory reservation | ||
192 | * during a driver critical region. | ||
193 | */ | ||
194 | extern spinlock_t xen_reservation_lock; | ||
145 | #endif /* __XEN_PUBLIC_MEMORY_H__ */ | 195 | #endif /* __XEN_PUBLIC_MEMORY_H__ */ |