|
|
1.1 root 1: /******************************************************************************
2: * domctl.h
3: *
4: * Domain management operations. For use by node control stack.
5: *
6: * Permission is hereby granted, free of charge, to any person obtaining a copy
7: * of this software and associated documentation files (the "Software"), to
8: * deal in the Software without restriction, including without limitation the
9: * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10: * sell copies of the Software, and to permit persons to whom the Software is
11: * furnished to do so, subject to the following conditions:
12: *
13: * The above copyright notice and this permission notice shall be included in
14: * all copies or substantial portions of the Software.
15: *
16: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22: * DEALINGS IN THE SOFTWARE.
23: *
24: * Copyright (c) 2002-2003, B Dragovic
25: * Copyright (c) 2002-2006, K Fraser
26: */
27:
28: #ifndef __XEN_PUBLIC_DOMCTL_H__
29: #define __XEN_PUBLIC_DOMCTL_H__
30:
31: #if !defined(__XEN__) && !defined(__XEN_TOOLS__)
32: #error "domctl operations are intended for use by node control tools only"
33: #endif
34:
35: #include "xen.h"
36:
37: #define XEN_DOMCTL_INTERFACE_VERSION 0x00000005
38:
39: struct xenctl_cpumap {
40: XEN_GUEST_HANDLE_64(uint8) bitmap;
41: uint32_t nr_cpus;
42: };
43:
44: /*
45: * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
46: * If it is specified as zero, an id is auto-allocated and returned.
47: */
48: #define XEN_DOMCTL_createdomain 1
49: struct xen_domctl_createdomain {
50: /* IN parameters */
51: uint32_t ssidref;
52: xen_domain_handle_t handle;
53: /* Is this an HVM guest (as opposed to a PV guest)? */
54: #define _XEN_DOMCTL_CDF_hvm_guest 0
55: #define XEN_DOMCTL_CDF_hvm_guest (1U<<_XEN_DOMCTL_CDF_hvm_guest)
56: /* Use hardware-assisted paging if available? */
57: #define _XEN_DOMCTL_CDF_hap 1
58: #define XEN_DOMCTL_CDF_hap (1U<<_XEN_DOMCTL_CDF_hap)
59: uint32_t flags;
60: };
61: typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
62: DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t);
63:
64: #define XEN_DOMCTL_destroydomain 2
65: #define XEN_DOMCTL_pausedomain 3
66: #define XEN_DOMCTL_unpausedomain 4
67: #define XEN_DOMCTL_resumedomain 27
68:
69: #define XEN_DOMCTL_getdomaininfo 5
70: struct xen_domctl_getdomaininfo {
71: /* OUT variables. */
72: domid_t domain; /* Also echoed in domctl.domain */
73: /* Domain is scheduled to die. */
74: #define _XEN_DOMINF_dying 0
75: #define XEN_DOMINF_dying (1U<<_XEN_DOMINF_dying)
76: /* Domain is an HVM guest (as opposed to a PV guest). */
77: #define _XEN_DOMINF_hvm_guest 1
78: #define XEN_DOMINF_hvm_guest (1U<<_XEN_DOMINF_hvm_guest)
79: /* The guest OS has shut down. */
80: #define _XEN_DOMINF_shutdown 2
81: #define XEN_DOMINF_shutdown (1U<<_XEN_DOMINF_shutdown)
82: /* Currently paused by control software. */
83: #define _XEN_DOMINF_paused 3
84: #define XEN_DOMINF_paused (1U<<_XEN_DOMINF_paused)
85: /* Currently blocked pending an event. */
86: #define _XEN_DOMINF_blocked 4
87: #define XEN_DOMINF_blocked (1U<<_XEN_DOMINF_blocked)
88: /* Domain is currently running. */
89: #define _XEN_DOMINF_running 5
90: #define XEN_DOMINF_running (1U<<_XEN_DOMINF_running)
91: /* Being debugged. */
92: #define _XEN_DOMINF_debugged 6
93: #define XEN_DOMINF_debugged (1U<<_XEN_DOMINF_debugged)
94: /* CPU to which this domain is bound. */
95: #define XEN_DOMINF_cpumask 255
96: #define XEN_DOMINF_cpushift 8
97: /* XEN_DOMINF_shutdown guest-supplied code. */
98: #define XEN_DOMINF_shutdownmask 255
99: #define XEN_DOMINF_shutdownshift 16
100: uint32_t flags; /* XEN_DOMINF_* */
101: uint64_aligned_t tot_pages;
102: uint64_aligned_t max_pages;
103: uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
104: uint64_aligned_t cpu_time;
105: uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */
106: uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */
107: uint32_t ssidref;
108: xen_domain_handle_t handle;
109: };
110: typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;
111: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);
112:
113:
114: #define XEN_DOMCTL_getmemlist 6
115: struct xen_domctl_getmemlist {
116: /* IN variables. */
117: /* Max entries to write to output buffer. */
118: uint64_aligned_t max_pfns;
119: /* Start index in guest's page list. */
120: uint64_aligned_t start_pfn;
121: XEN_GUEST_HANDLE_64(uint64) buffer;
122: /* OUT variables. */
123: uint64_aligned_t num_pfns;
124: };
125: typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t;
126: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t);
127:
128:
129: #define XEN_DOMCTL_getpageframeinfo 7
130:
131: #define XEN_DOMCTL_PFINFO_LTAB_SHIFT 28
132: #define XEN_DOMCTL_PFINFO_NOTAB (0x0U<<28)
133: #define XEN_DOMCTL_PFINFO_L1TAB (0x1U<<28)
134: #define XEN_DOMCTL_PFINFO_L2TAB (0x2U<<28)
135: #define XEN_DOMCTL_PFINFO_L3TAB (0x3U<<28)
136: #define XEN_DOMCTL_PFINFO_L4TAB (0x4U<<28)
137: #define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28)
138: #define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31)
139: #define XEN_DOMCTL_PFINFO_XTAB (0xfU<<28) /* invalid page */
140: #define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28)
141:
142: struct xen_domctl_getpageframeinfo {
143: /* IN variables. */
144: uint64_aligned_t gmfn; /* GMFN to query */
145: /* OUT variables. */
146: /* Is the page PINNED to a type? */
147: uint32_t type; /* see above type defs */
148: };
149: typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t;
150: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t);
151:
152:
153: #define XEN_DOMCTL_getpageframeinfo2 8
154: struct xen_domctl_getpageframeinfo2 {
155: /* IN variables. */
156: uint64_aligned_t num;
157: /* IN/OUT variables. */
158: XEN_GUEST_HANDLE_64(uint32) array;
159: };
160: typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t;
161: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t);
162:
163:
164: /*
165: * Control shadow pagetables operation
166: */
167: #define XEN_DOMCTL_shadow_op 10
168:
169: /* Disable shadow mode. */
170: #define XEN_DOMCTL_SHADOW_OP_OFF 0
171:
172: /* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */
173: #define XEN_DOMCTL_SHADOW_OP_ENABLE 32
174:
175: /* Log-dirty bitmap operations. */
176: /* Return the bitmap and clean internal copy for next round. */
177: #define XEN_DOMCTL_SHADOW_OP_CLEAN 11
178: /* Return the bitmap but do not modify internal copy. */
179: #define XEN_DOMCTL_SHADOW_OP_PEEK 12
180:
181: /* Memory allocation accessors. */
182: #define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30
183: #define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31
184:
185: /* Legacy enable operations. */
186: /* Equiv. to ENABLE with no mode flags. */
187: #define XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1
188: /* Equiv. to ENABLE with mode flag ENABLE_LOG_DIRTY. */
189: #define XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2
190: /* Equiv. to ENABLE with mode flags ENABLE_REFCOUNT and ENABLE_TRANSLATE. */
191: #define XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3
192:
193: /* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */
194: /*
195: * Shadow pagetables are refcounted: guest does not use explicit mmu
196: * operations nor write-protect its pagetables.
197: */
198: #define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1)
199: /*
200: * Log pages in a bitmap as they are dirtied.
201: * Used for live relocation to determine which pages must be re-sent.
202: */
203: #define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
204: /*
205: * Automatically translate GPFNs into MFNs.
206: */
207: #define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
208: /*
209: * Xen does not steal virtual address space from the guest.
210: * Requires HVM support.
211: */
212: #define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)
213:
214: struct xen_domctl_shadow_op_stats {
215: uint32_t fault_count;
216: uint32_t dirty_count;
217: };
218: typedef struct xen_domctl_shadow_op_stats xen_domctl_shadow_op_stats_t;
219: DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_stats_t);
220:
221: struct xen_domctl_shadow_op {
222: /* IN variables. */
223: uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */
224:
225: /* OP_ENABLE */
226: uint32_t mode; /* XEN_DOMCTL_SHADOW_ENABLE_* */
227:
228: /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */
229: uint32_t mb; /* Shadow memory allocation in MB */
230:
231: /* OP_PEEK / OP_CLEAN */
232: XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
233: uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */
234: struct xen_domctl_shadow_op_stats stats;
235: };
236: typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t;
237: DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t);
238:
239:
240: #define XEN_DOMCTL_max_mem 11
241: struct xen_domctl_max_mem {
242: /* IN variables. */
243: uint64_aligned_t max_memkb;
244: };
245: typedef struct xen_domctl_max_mem xen_domctl_max_mem_t;
246: DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t);
247:
248:
249: #define XEN_DOMCTL_setvcpucontext 12
250: #define XEN_DOMCTL_getvcpucontext 13
251: struct xen_domctl_vcpucontext {
252: uint32_t vcpu; /* IN */
253: XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
254: };
255: typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t;
256: DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t);
257:
258:
259: #define XEN_DOMCTL_getvcpuinfo 14
260: struct xen_domctl_getvcpuinfo {
261: /* IN variables. */
262: uint32_t vcpu;
263: /* OUT variables. */
264: uint8_t online; /* currently online (not hotplugged)? */
265: uint8_t blocked; /* blocked waiting for an event? */
266: uint8_t running; /* currently scheduled on its CPU? */
267: uint64_aligned_t cpu_time; /* total cpu time consumed (ns) */
268: uint32_t cpu; /* current mapping */
269: };
270: typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t;
271: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t);
272:
273:
274: /* Get/set which physical cpus a vcpu can execute on. */
275: #define XEN_DOMCTL_setvcpuaffinity 9
276: #define XEN_DOMCTL_getvcpuaffinity 25
277: struct xen_domctl_vcpuaffinity {
278: uint32_t vcpu; /* IN */
279: struct xenctl_cpumap cpumap; /* IN/OUT */
280: };
281: typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t;
282: DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t);
283:
284:
285: #define XEN_DOMCTL_max_vcpus 15
286: struct xen_domctl_max_vcpus {
287: uint32_t max; /* maximum number of vcpus */
288: };
289: typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t;
290: DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t);
291:
292:
293: #define XEN_DOMCTL_scheduler_op 16
294: /* Scheduler types. */
295: #define XEN_SCHEDULER_SEDF 4
296: #define XEN_SCHEDULER_CREDIT 5
297: /* Set or get info? */
298: #define XEN_DOMCTL_SCHEDOP_putinfo 0
299: #define XEN_DOMCTL_SCHEDOP_getinfo 1
300: struct xen_domctl_scheduler_op {
301: uint32_t sched_id; /* XEN_SCHEDULER_* */
302: uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */
303: union {
304: struct xen_domctl_sched_sedf {
305: uint64_aligned_t period;
306: uint64_aligned_t slice;
307: uint64_aligned_t latency;
308: uint32_t extratime;
309: uint32_t weight;
310: } sedf;
311: struct xen_domctl_sched_credit {
312: uint16_t weight;
313: uint16_t cap;
314: } credit;
315: } u;
316: };
317: typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t;
318: DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t);
319:
320:
321: #define XEN_DOMCTL_setdomainhandle 17
322: struct xen_domctl_setdomainhandle {
323: xen_domain_handle_t handle;
324: };
325: typedef struct xen_domctl_setdomainhandle xen_domctl_setdomainhandle_t;
326: DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdomainhandle_t);
327:
328:
329: #define XEN_DOMCTL_setdebugging 18
330: struct xen_domctl_setdebugging {
331: uint8_t enable;
332: };
333: typedef struct xen_domctl_setdebugging xen_domctl_setdebugging_t;
334: DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdebugging_t);
335:
336:
337: #define XEN_DOMCTL_irq_permission 19
338: struct xen_domctl_irq_permission {
339: uint8_t pirq;
340: uint8_t allow_access; /* flag to specify enable/disable of IRQ access */
341: };
342: typedef struct xen_domctl_irq_permission xen_domctl_irq_permission_t;
343: DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_permission_t);
344:
345:
346: #define XEN_DOMCTL_iomem_permission 20
347: struct xen_domctl_iomem_permission {
348: uint64_aligned_t first_mfn;/* first page (physical page number) in range */
349: uint64_aligned_t nr_mfns; /* number of pages in range (>0) */
350: uint8_t allow_access; /* allow (!0) or deny (0) access to range? */
351: };
352: typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t;
353: DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t);
354:
355:
356: #define XEN_DOMCTL_ioport_permission 21
357: struct xen_domctl_ioport_permission {
358: uint32_t first_port; /* first port int range */
359: uint32_t nr_ports; /* size of port range */
360: uint8_t allow_access; /* allow or deny access to range? */
361: };
362: typedef struct xen_domctl_ioport_permission xen_domctl_ioport_permission_t;
363: DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_permission_t);
364:
365:
366: #define XEN_DOMCTL_hypercall_init 22
367: struct xen_domctl_hypercall_init {
368: uint64_aligned_t gmfn; /* GMFN to be initialised */
369: };
370: typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t;
371: DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t);
372:
373:
374: #define XEN_DOMCTL_arch_setup 23
375: #define _XEN_DOMAINSETUP_hvm_guest 0
376: #define XEN_DOMAINSETUP_hvm_guest (1UL<<_XEN_DOMAINSETUP_hvm_guest)
377: #define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save) */
378: #define XEN_DOMAINSETUP_query (1UL<<_XEN_DOMAINSETUP_query)
379: #define _XEN_DOMAINSETUP_sioemu_guest 2
380: #define XEN_DOMAINSETUP_sioemu_guest (1UL<<_XEN_DOMAINSETUP_sioemu_guest)
381: typedef struct xen_domctl_arch_setup {
382: uint64_aligned_t flags; /* XEN_DOMAINSETUP_* */
383: #ifdef __ia64__
384: uint64_aligned_t bp; /* mpaddr of boot param area */
385: uint64_aligned_t maxmem; /* Highest memory address for MDT. */
386: uint64_aligned_t xsi_va; /* Xen shared_info area virtual address. */
387: uint32_t hypercall_imm; /* Break imm for Xen hypercalls. */
388: int8_t vhpt_size_log2; /* Log2 of VHPT size. */
389: #endif
390: } xen_domctl_arch_setup_t;
391: DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t);
392:
393:
394: #define XEN_DOMCTL_settimeoffset 24
395: struct xen_domctl_settimeoffset {
396: int32_t time_offset_seconds; /* applied to domain wallclock time */
397: };
398: typedef struct xen_domctl_settimeoffset xen_domctl_settimeoffset_t;
399: DEFINE_XEN_GUEST_HANDLE(xen_domctl_settimeoffset_t);
400:
401:
402: #define XEN_DOMCTL_gethvmcontext 33
403: #define XEN_DOMCTL_sethvmcontext 34
404: typedef struct xen_domctl_hvmcontext {
405: uint32_t size; /* IN/OUT: size of buffer / bytes filled */
406: XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call
407: * gethvmcontext with NULL
408: * buffer to get size req'd */
409: } xen_domctl_hvmcontext_t;
410: DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_t);
411:
412:
413: #define XEN_DOMCTL_set_address_size 35
414: #define XEN_DOMCTL_get_address_size 36
415: typedef struct xen_domctl_address_size {
416: uint32_t size;
417: } xen_domctl_address_size_t;
418: DEFINE_XEN_GUEST_HANDLE(xen_domctl_address_size_t);
419:
420:
421: #define XEN_DOMCTL_real_mode_area 26
422: struct xen_domctl_real_mode_area {
423: uint32_t log; /* log2 of Real Mode Area size */
424: };
425: typedef struct xen_domctl_real_mode_area xen_domctl_real_mode_area_t;
426: DEFINE_XEN_GUEST_HANDLE(xen_domctl_real_mode_area_t);
427:
428:
429: #define XEN_DOMCTL_sendtrigger 28
430: #define XEN_DOMCTL_SENDTRIGGER_NMI 0
431: #define XEN_DOMCTL_SENDTRIGGER_RESET 1
432: #define XEN_DOMCTL_SENDTRIGGER_INIT 2
433: struct xen_domctl_sendtrigger {
434: uint32_t trigger; /* IN */
435: uint32_t vcpu; /* IN */
436: };
437: typedef struct xen_domctl_sendtrigger xen_domctl_sendtrigger_t;
438: DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendtrigger_t);
439:
440:
441: /* Assign PCI device to HVM guest. Sets up IOMMU structures. */
442: #define XEN_DOMCTL_assign_device 37
443: #define XEN_DOMCTL_test_assign_device 45
444: #define XEN_DOMCTL_deassign_device 47
445: struct xen_domctl_assign_device {
446: uint32_t machine_bdf; /* machine PCI ID of assigned device */
447: };
448: typedef struct xen_domctl_assign_device xen_domctl_assign_device_t;
449: DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t);
450:
451: /* Retrieve sibling devices infomation of machine_bdf */
452: #define XEN_DOMCTL_get_device_group 50
453: struct xen_domctl_get_device_group {
454: uint32_t machine_bdf; /* IN */
455: uint32_t max_sdevs; /* IN */
456: uint32_t num_sdevs; /* OUT */
457: XEN_GUEST_HANDLE_64(uint32) sdev_array; /* OUT */
458: };
459: typedef struct xen_domctl_get_device_group xen_domctl_get_device_group_t;
460: DEFINE_XEN_GUEST_HANDLE(xen_domctl_get_device_group_t);
461:
462: /* Pass-through interrupts: bind real irq -> hvm devfn. */
463: #define XEN_DOMCTL_bind_pt_irq 38
464: #define XEN_DOMCTL_unbind_pt_irq 48
465: typedef enum pt_irq_type_e {
466: PT_IRQ_TYPE_PCI,
467: PT_IRQ_TYPE_ISA,
468: PT_IRQ_TYPE_MSI,
469: } pt_irq_type_t;
470: struct xen_domctl_bind_pt_irq {
471: uint32_t machine_irq;
472: pt_irq_type_t irq_type;
473: uint32_t hvm_domid;
474:
475: union {
476: struct {
477: uint8_t isa_irq;
478: } isa;
479: struct {
480: uint8_t bus;
481: uint8_t device;
482: uint8_t intx;
483: } pci;
484: struct {
485: uint8_t gvec;
486: uint32_t gflags;
487: } msi;
488: } u;
489: };
490: typedef struct xen_domctl_bind_pt_irq xen_domctl_bind_pt_irq_t;
491: DEFINE_XEN_GUEST_HANDLE(xen_domctl_bind_pt_irq_t);
492:
493:
494: /* Bind machine I/O address range -> HVM address range. */
495: #define XEN_DOMCTL_memory_mapping 39
496: #define DPCI_ADD_MAPPING 1
497: #define DPCI_REMOVE_MAPPING 0
498: struct xen_domctl_memory_mapping {
499: uint64_aligned_t first_gfn; /* first page (hvm guest phys page) in range */
500: uint64_aligned_t first_mfn; /* first page (machine page) in range */
501: uint64_aligned_t nr_mfns; /* number of pages in range (>0) */
502: uint32_t add_mapping; /* add or remove mapping */
503: uint32_t padding; /* padding for 64-bit aligned structure */
504: };
505: typedef struct xen_domctl_memory_mapping xen_domctl_memory_mapping_t;
506: DEFINE_XEN_GUEST_HANDLE(xen_domctl_memory_mapping_t);
507:
508:
509: /* Bind machine I/O port range -> HVM I/O port range. */
510: #define XEN_DOMCTL_ioport_mapping 40
511: struct xen_domctl_ioport_mapping {
512: uint32_t first_gport; /* first guest IO port*/
513: uint32_t first_mport; /* first machine IO port */
514: uint32_t nr_ports; /* size of port range */
515: uint32_t add_mapping; /* add or remove mapping */
516: };
517: typedef struct xen_domctl_ioport_mapping xen_domctl_ioport_mapping_t;
518: DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_mapping_t);
519:
520:
521: /*
522: * Pin caching type of RAM space for x86 HVM domU.
523: */
524: #define XEN_DOMCTL_pin_mem_cacheattr 41
525: /* Caching types: these happen to be the same as x86 MTRR/PAT type codes. */
526: #define XEN_DOMCTL_MEM_CACHEATTR_UC 0
527: #define XEN_DOMCTL_MEM_CACHEATTR_WC 1
528: #define XEN_DOMCTL_MEM_CACHEATTR_WT 4
529: #define XEN_DOMCTL_MEM_CACHEATTR_WP 5
530: #define XEN_DOMCTL_MEM_CACHEATTR_WB 6
531: #define XEN_DOMCTL_MEM_CACHEATTR_UCM 7
532: struct xen_domctl_pin_mem_cacheattr {
533: uint64_aligned_t start, end;
534: unsigned int type; /* XEN_DOMCTL_MEM_CACHEATTR_* */
535: };
536: typedef struct xen_domctl_pin_mem_cacheattr xen_domctl_pin_mem_cacheattr_t;
537: DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t);
538:
539:
540: #define XEN_DOMCTL_set_ext_vcpucontext 42
541: #define XEN_DOMCTL_get_ext_vcpucontext 43
542: struct xen_domctl_ext_vcpucontext {
543: /* IN: VCPU that this call applies to. */
544: uint32_t vcpu;
545: /*
546: * SET: Size of struct (IN)
547: * GET: Size of struct (OUT)
548: */
549: uint32_t size;
550: #if defined(__i386__) || defined(__x86_64__)
551: /* SYSCALL from 32-bit mode and SYSENTER callback information. */
552: /* NB. SYSCALL from 64-bit mode is contained in vcpu_guest_context_t */
553: uint64_aligned_t syscall32_callback_eip;
554: uint64_aligned_t sysenter_callback_eip;
555: uint16_t syscall32_callback_cs;
556: uint16_t sysenter_callback_cs;
557: uint8_t syscall32_disables_events;
558: uint8_t sysenter_disables_events;
559: #endif
560: };
561: typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t;
562: DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpucontext_t);
563:
564: /*
565: * Set optimizaton features for a domain
566: */
567: #define XEN_DOMCTL_set_opt_feature 44
568: struct xen_domctl_set_opt_feature {
569: #if defined(__ia64__)
570: struct xen_ia64_opt_feature optf;
571: #else
572: /* Make struct non-empty: do not depend on this field name! */
573: uint64_t dummy;
574: #endif
575: };
576: typedef struct xen_domctl_set_opt_feature xen_domctl_set_opt_feature_t;
577: DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_opt_feature_t);
578:
579: /*
580: * Set the target domain for a domain
581: */
582: #define XEN_DOMCTL_set_target 46
583: struct xen_domctl_set_target {
584: domid_t target;
585: };
586: typedef struct xen_domctl_set_target xen_domctl_set_target_t;
587: DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t);
588:
589: #if defined(__i386__) || defined(__x86_64__)
590: # define XEN_CPUID_INPUT_UNUSED 0xFFFFFFFF
591: # define XEN_DOMCTL_set_cpuid 49
592: struct xen_domctl_cpuid {
593: unsigned int input[2];
594: unsigned int eax;
595: unsigned int ebx;
596: unsigned int ecx;
597: unsigned int edx;
598: };
599: typedef struct xen_domctl_cpuid xen_domctl_cpuid_t;
600: DEFINE_XEN_GUEST_HANDLE(xen_domctl_cpuid_t);
601: #endif
602:
603: #define XEN_DOMCTL_subscribe 29
604: struct xen_domctl_subscribe {
605: uint32_t port; /* IN */
606: };
607: typedef struct xen_domctl_subscribe xen_domctl_subscribe_t;
608: DEFINE_XEN_GUEST_HANDLE(xen_domctl_subscribe_t);
609:
610: /*
611: * Define the maximum machine address size which should be allocated
612: * to a guest.
613: */
614: #define XEN_DOMCTL_set_machine_address_size 51
615: #define XEN_DOMCTL_get_machine_address_size 52
616:
617: /*
618: * Do not inject spurious page faults into this domain.
619: */
620: #define XEN_DOMCTL_suppress_spurious_page_faults 53
621:
622: struct xen_domctl {
623: uint32_t cmd;
624: uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
625: domid_t domain;
626: union {
627: struct xen_domctl_createdomain createdomain;
628: struct xen_domctl_getdomaininfo getdomaininfo;
629: struct xen_domctl_getmemlist getmemlist;
630: struct xen_domctl_getpageframeinfo getpageframeinfo;
631: struct xen_domctl_getpageframeinfo2 getpageframeinfo2;
632: struct xen_domctl_vcpuaffinity vcpuaffinity;
633: struct xen_domctl_shadow_op shadow_op;
634: struct xen_domctl_max_mem max_mem;
635: struct xen_domctl_vcpucontext vcpucontext;
636: struct xen_domctl_getvcpuinfo getvcpuinfo;
637: struct xen_domctl_max_vcpus max_vcpus;
638: struct xen_domctl_scheduler_op scheduler_op;
639: struct xen_domctl_setdomainhandle setdomainhandle;
640: struct xen_domctl_setdebugging setdebugging;
641: struct xen_domctl_irq_permission irq_permission;
642: struct xen_domctl_iomem_permission iomem_permission;
643: struct xen_domctl_ioport_permission ioport_permission;
644: struct xen_domctl_hypercall_init hypercall_init;
645: struct xen_domctl_arch_setup arch_setup;
646: struct xen_domctl_settimeoffset settimeoffset;
647: struct xen_domctl_real_mode_area real_mode_area;
648: struct xen_domctl_hvmcontext hvmcontext;
649: struct xen_domctl_address_size address_size;
650: struct xen_domctl_sendtrigger sendtrigger;
651: struct xen_domctl_get_device_group get_device_group;
652: struct xen_domctl_assign_device assign_device;
653: struct xen_domctl_bind_pt_irq bind_pt_irq;
654: struct xen_domctl_memory_mapping memory_mapping;
655: struct xen_domctl_ioport_mapping ioport_mapping;
656: struct xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
657: struct xen_domctl_ext_vcpucontext ext_vcpucontext;
658: struct xen_domctl_set_opt_feature set_opt_feature;
659: struct xen_domctl_set_target set_target;
660: struct xen_domctl_subscribe subscribe;
661: #if defined(__i386__) || defined(__x86_64__)
662: struct xen_domctl_cpuid cpuid;
663: #endif
664: uint8_t pad[128];
665: } u;
666: };
667: typedef struct xen_domctl xen_domctl_t;
668: DEFINE_XEN_GUEST_HANDLE(xen_domctl_t);
669:
670: #endif /* __XEN_PUBLIC_DOMCTL_H__ */
671:
672: /*
673: * Local variables:
674: * mode: C
675: * c-set-style: "BSD"
676: * c-basic-offset: 4
677: * tab-width: 4
678: * indent-tabs-mode: nil
679: * End:
680: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.