This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / include / xen / interface / dom0_ops.h
1 /******************************************************************************
2  * dom0_ops.h
3  * 
4  * Process command requests from domain-0 guest OS.
5  * 
6  * Copyright (c) 2002-2003, B Dragovic
7  * Copyright (c) 2002-2004, K Fraser
8  */
9
10
11 #ifndef __XEN_PUBLIC_DOM0_OPS_H__
12 #define __XEN_PUBLIC_DOM0_OPS_H__
13
14 #include "xen.h"
15 #include "sched_ctl.h"
16
17 /*
18  * Make sure you increment the interface version whenever you modify this file!
19  * This makes sure that old versions of dom0 tools will stop working in a
20  * well-defined way (rather than crashing the machine, for instance).
21  */
22 #define DOM0_INTERFACE_VERSION   0x03000001
23
24 /************************************************************************/
25
26 #define DOM0_GETMEMLIST        2
27 struct dom0_getmemlist {
28     /* IN variables. */
29     domid_t       domain;
30     uint64_t max_pfns;
31     XEN_GUEST_HANDLE(xen_pfn_t) buffer;
32     /* OUT variables. */
33     uint64_t num_pfns;
34 };
35 typedef struct dom0_getmemlist dom0_getmemlist_t;
36 DEFINE_XEN_GUEST_HANDLE(dom0_getmemlist_t);
37
38 #define DOM0_SCHEDCTL          6
39  /* struct sched_ctl_cmd is from sched-ctl.h   */
40 typedef struct sched_ctl_cmd dom0_schedctl_t;
41 DEFINE_XEN_GUEST_HANDLE(dom0_schedctl_t);
42
43 #define DOM0_ADJUSTDOM         7
44 /* struct sched_adjdom_cmd is from sched-ctl.h */
45 typedef struct sched_adjdom_cmd dom0_adjustdom_t;
46 DEFINE_XEN_GUEST_HANDLE(dom0_adjustdom_t);
47
48 #define DOM0_CREATEDOMAIN      8
49 struct dom0_createdomain {
50     /* IN parameters */
51     uint32_t ssidref;
52     xen_domain_handle_t handle;
53     /* IN/OUT parameters. */
54     /* Identifier for new domain (auto-allocate if zero is specified). */
55     domid_t domain;
56 };
57 typedef struct dom0_createdomain dom0_createdomain_t;
58 DEFINE_XEN_GUEST_HANDLE(dom0_createdomain_t);
59
60 #define DOM0_DESTROYDOMAIN     9
61 struct dom0_destroydomain {
62     /* IN variables. */
63     domid_t domain;
64 };
65 typedef struct dom0_destroydomain dom0_destroydomain_t;
66 DEFINE_XEN_GUEST_HANDLE(dom0_destroydomain_t);
67
68 #define DOM0_PAUSEDOMAIN      10
69 struct dom0_pausedomain {
70     /* IN parameters. */
71     domid_t domain;
72 };
73 typedef struct dom0_pausedomain dom0_pausedomain_t;
74 DEFINE_XEN_GUEST_HANDLE(dom0_pausedomain_t);
75
76 #define DOM0_UNPAUSEDOMAIN    11
77 struct dom0_unpausedomain {
78     /* IN parameters. */
79     domid_t domain;
80 };
81 typedef struct dom0_unpausedomain dom0_unpausedomain_t;
82 DEFINE_XEN_GUEST_HANDLE(dom0_unpausedomain_t);
83
84 #define DOM0_GETDOMAININFO    12
85 struct dom0_getdomaininfo {
86     /* IN variables. */
87     domid_t  domain;                  /* NB. IN/OUT variable. */
88     /* OUT variables. */
89 #define DOMFLAGS_DYING     (1<<0) /* Domain is scheduled to die.             */
90 #define DOMFLAGS_SHUTDOWN  (1<<2) /* The guest OS has shut down.             */
91 #define DOMFLAGS_PAUSED    (1<<3) /* Currently paused by control software.   */
92 #define DOMFLAGS_BLOCKED   (1<<4) /* Currently blocked pending an event.     */
93 #define DOMFLAGS_RUNNING   (1<<5) /* Domain is currently running.            */
94 #define DOMFLAGS_CPUMASK      255 /* CPU to which this domain is bound.      */
95 #define DOMFLAGS_CPUSHIFT       8
96 #define DOMFLAGS_SHUTDOWNMASK 255 /* DOMFLAGS_SHUTDOWN guest-supplied code.  */
97 #define DOMFLAGS_SHUTDOWNSHIFT 16
98     uint32_t flags;
99     uint64_t tot_pages;
100     uint64_t max_pages;
101     xen_pfn_t shared_info_frame;  /* MFN of shared_info struct */
102     uint64_t cpu_time;
103     uint32_t nr_online_vcpus;     /* Number of VCPUs currently online. */
104     uint32_t max_vcpu_id;         /* Maximum VCPUID in use by this domain. */
105     uint32_t ssidref;
106     xen_domain_handle_t handle;
107 };
108 typedef struct dom0_getdomaininfo dom0_getdomaininfo_t;
109 DEFINE_XEN_GUEST_HANDLE(dom0_getdomaininfo_t);
110
111 #define DOM0_SETVCPUCONTEXT   13
112 struct dom0_setvcpucontext {
113     /* IN variables. */
114     domid_t               domain;
115     uint32_t              vcpu;
116     /* IN/OUT parameters */
117     XEN_GUEST_HANDLE(vcpu_guest_context_t) ctxt;
118 };
119 typedef struct dom0_setvcpucontext dom0_setvcpucontext_t;
120 DEFINE_XEN_GUEST_HANDLE(dom0_setvcpucontext_t);
121
122 #define DOM0_MSR              15
123 struct dom0_msr {
124     /* IN variables. */
125     uint32_t write;
126     cpumap_t cpu_mask;
127     uint32_t msr;
128     uint32_t in1;
129     uint32_t in2;
130     /* OUT variables. */
131     uint32_t out1;
132     uint32_t out2;
133 };
134 typedef struct dom0_msr dom0_msr_t;
135 DEFINE_XEN_GUEST_HANDLE(dom0_msr_t);
136
137 /*
138  * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC,
139  * 1 January, 1970 if the current system time was <system_time>.
140  */
141 #define DOM0_SETTIME          17
142 struct dom0_settime {
143     /* IN variables. */
144     uint32_t secs;
145     uint32_t nsecs;
146     uint64_t system_time;
147 };
148 typedef struct dom0_settime dom0_settime_t;
149 DEFINE_XEN_GUEST_HANDLE(dom0_settime_t);
150
151 #define DOM0_GETPAGEFRAMEINFO 18
152 #define LTAB_SHIFT 28
153 #define NOTAB 0         /* normal page */
154 #define L1TAB (1<<LTAB_SHIFT)
155 #define L2TAB (2<<LTAB_SHIFT)
156 #define L3TAB (3<<LTAB_SHIFT)
157 #define L4TAB (4<<LTAB_SHIFT)
158 #define LPINTAB  (1<<31)
159 #define XTAB  (0xf<<LTAB_SHIFT) /* invalid page */
160 #define LTAB_MASK XTAB
161 #define LTABTYPE_MASK (0x7<<LTAB_SHIFT)
162
163 struct dom0_getpageframeinfo {
164     /* IN variables. */
165     xen_pfn_t gmfn;        /* GMFN to query.                            */
166     domid_t domain;        /* To which domain does the frame belong?    */
167     /* OUT variables. */
168     /* Is the page PINNED to a type? */
169     uint32_t type;         /* see above type defs */
170 };
171 typedef struct dom0_getpageframeinfo dom0_getpageframeinfo_t;
172 DEFINE_XEN_GUEST_HANDLE(dom0_getpageframeinfo_t);
173
174 /*
175  * Read console content from Xen buffer ring.
176  */
177 #define DOM0_READCONSOLE      19
178 struct dom0_readconsole {
179     /* IN variables. */
180     uint32_t clear;                /* Non-zero -> clear after reading. */
181     XEN_GUEST_HANDLE(char) buffer; /* Buffer start */
182     /* IN/OUT variables. */
183     uint32_t count;            /* In: Buffer size;  Out: Used buffer size  */
184 };
185 typedef struct dom0_readconsole dom0_readconsole_t;
186 DEFINE_XEN_GUEST_HANDLE(dom0_readconsole_t);
187
188 /*
189  * Set which physical cpus a vcpu can execute on.
190  */
191 #define DOM0_SETVCPUAFFINITY  20
192 struct dom0_setvcpuaffinity {
193     /* IN variables. */
194     domid_t   domain;
195     uint32_t  vcpu;
196     cpumap_t  cpumap;
197 };
198 typedef struct dom0_setvcpuaffinity dom0_setvcpuaffinity_t;
199 DEFINE_XEN_GUEST_HANDLE(dom0_setvcpuaffinity_t);
200
201 /* Get trace buffers machine base address */
202 #define DOM0_TBUFCONTROL       21
203 struct dom0_tbufcontrol {
204     /* IN variables */
205 #define DOM0_TBUF_GET_INFO     0
206 #define DOM0_TBUF_SET_CPU_MASK 1
207 #define DOM0_TBUF_SET_EVT_MASK 2
208 #define DOM0_TBUF_SET_SIZE     3
209 #define DOM0_TBUF_ENABLE       4
210 #define DOM0_TBUF_DISABLE      5
211     uint32_t      op;
212     /* IN/OUT variables */
213     cpumap_t      cpu_mask;
214     uint32_t      evt_mask;
215     /* OUT variables */
216     xen_pfn_t buffer_mfn;
217     uint32_t size;
218 };
219 typedef struct dom0_tbufcontrol dom0_tbufcontrol_t;
220 DEFINE_XEN_GUEST_HANDLE(dom0_tbufcontrol_t);
221
222 /*
223  * Get physical information about the host machine
224  */
225 #define DOM0_PHYSINFO         22
226 struct dom0_physinfo {
227     uint32_t threads_per_core;
228     uint32_t cores_per_socket;
229     uint32_t sockets_per_node;
230     uint32_t nr_nodes;
231     uint32_t cpu_khz;
232     uint64_t total_pages;
233     uint64_t free_pages;
234     uint64_t scrub_pages;
235     uint32_t hw_cap[8];
236 };
237 typedef struct dom0_physinfo dom0_physinfo_t;
238 DEFINE_XEN_GUEST_HANDLE(dom0_physinfo_t);
239
240 /*
241  * Get the ID of the current scheduler.
242  */
243 #define DOM0_SCHED_ID        24
244 struct dom0_sched_id {
245     /* OUT variable */
246     uint32_t sched_id;
247 };
248 typedef struct dom0_physinfo dom0_sched_id_t;
249 DEFINE_XEN_GUEST_HANDLE(dom0_sched_id_t);
250
251 /*
252  * Control shadow pagetables operation
253  */
254 #define DOM0_SHADOW_CONTROL  25
255
256 #define DOM0_SHADOW_CONTROL_OP_OFF         0
257 #define DOM0_SHADOW_CONTROL_OP_ENABLE_TEST 1
258 #define DOM0_SHADOW_CONTROL_OP_ENABLE_LOGDIRTY 2
259 #define DOM0_SHADOW_CONTROL_OP_ENABLE_TRANSLATE 3
260
261 #define DOM0_SHADOW_CONTROL_OP_FLUSH       10     /* table ops */
262 #define DOM0_SHADOW_CONTROL_OP_CLEAN       11
263 #define DOM0_SHADOW_CONTROL_OP_PEEK        12
264
265 struct dom0_shadow_control_stats {
266     uint32_t fault_count;
267     uint32_t dirty_count;
268     uint32_t dirty_net_count;
269     uint32_t dirty_block_count;
270 };
271 typedef struct dom0_shadow_control_stats dom0_shadow_control_stats_t;
272 DEFINE_XEN_GUEST_HANDLE(dom0_shadow_control_stats_t);
273
274 struct dom0_shadow_control {
275     /* IN variables. */
276     domid_t        domain;
277     uint32_t       op;
278     XEN_GUEST_HANDLE(ulong) dirty_bitmap;
279     /* IN/OUT variables. */
280     uint64_t       pages;        /* size of buffer, updated with actual size */
281     /* OUT variables. */
282     struct dom0_shadow_control_stats stats;
283 };
284 typedef struct dom0_shadow_control dom0_shadow_control_t;
285 DEFINE_XEN_GUEST_HANDLE(dom0_shadow_control_t);
286
287 #define DOM0_SETDOMAINMAXMEM   28
288 struct dom0_setdomainmaxmem {
289     /* IN variables. */
290     domid_t  domain;
291     uint64_t max_memkb;
292 };
293 typedef struct dom0_setdomainmaxmem dom0_setdomainmaxmem_t;
294 DEFINE_XEN_GUEST_HANDLE(dom0_setdomainmaxmem_t);
295
296 #define DOM0_GETPAGEFRAMEINFO2 29   /* batched interface */
297 struct dom0_getpageframeinfo2 {
298     /* IN variables. */
299     domid_t  domain;
300     uint64_t num;
301     /* IN/OUT variables. */
302     XEN_GUEST_HANDLE(ulong) array;
303 };
304 typedef struct dom0_getpageframeinfo2 dom0_getpageframeinfo2_t;
305 DEFINE_XEN_GUEST_HANDLE(dom0_getpageframeinfo2_t);
306
307 /*
308  * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type.
309  * On x86, @type is an architecture-defined MTRR memory type.
310  * On success, returns the MTRR that was used (@reg) and a handle that can
311  * be passed to DOM0_DEL_MEMTYPE to accurately tear down the new setting.
312  * (x86-specific).
313  */
314 #define DOM0_ADD_MEMTYPE         31
315 struct dom0_add_memtype {
316     /* IN variables. */
317     xen_pfn_t mfn;
318     uint64_t nr_mfns;
319     uint32_t type;
320     /* OUT variables. */
321     uint32_t handle;
322     uint32_t reg;
323 };
324 typedef struct dom0_add_memtype dom0_add_memtype_t;
325 DEFINE_XEN_GUEST_HANDLE(dom0_add_memtype_t);
326
327 /*
328  * Tear down an existing memory-range type. If @handle is remembered then it
329  * should be passed in to accurately tear down the correct setting (in case
330  * of overlapping memory regions with differing types). If it is not known
331  * then @handle should be set to zero. In all cases @reg must be set.
332  * (x86-specific).
333  */
334 #define DOM0_DEL_MEMTYPE         32
335 struct dom0_del_memtype {
336     /* IN variables. */
337     uint32_t handle;
338     uint32_t reg;
339 };
340 typedef struct dom0_del_memtype dom0_del_memtype_t;
341 DEFINE_XEN_GUEST_HANDLE(dom0_del_memtype_t);
342
343 /* Read current type of an MTRR (x86-specific). */
344 #define DOM0_READ_MEMTYPE        33
345 struct dom0_read_memtype {
346     /* IN variables. */
347     uint32_t reg;
348     /* OUT variables. */
349     xen_pfn_t mfn;
350     uint64_t nr_mfns;
351     uint32_t type;
352 };
353 typedef struct dom0_read_memtype dom0_read_memtype_t;
354 DEFINE_XEN_GUEST_HANDLE(dom0_read_memtype_t);
355
356 /* Interface for controlling Xen software performance counters. */
357 #define DOM0_PERFCCONTROL        34
358 /* Sub-operations: */
359 #define DOM0_PERFCCONTROL_OP_RESET 1   /* Reset all counters to zero. */
360 #define DOM0_PERFCCONTROL_OP_QUERY 2   /* Get perfctr information. */
361 struct dom0_perfc_desc {
362     char         name[80];             /* name of perf counter */
363     uint32_t     nr_vals;              /* number of values for this counter */
364 };
365 typedef struct dom0_perfc_desc dom0_perfc_desc_t;
366 DEFINE_XEN_GUEST_HANDLE(dom0_perfc_desc_t);
367 typedef uint32_t dom0_perfc_val_t;
368 DEFINE_XEN_GUEST_HANDLE(dom0_perfc_val_t);
369
370 struct dom0_perfccontrol {
371     /* IN variables. */
372     uint32_t       op;                /*  DOM0_PERFCCONTROL_OP_??? */
373     /* OUT variables. */
374     uint32_t       nr_counters;       /*  number of counters description  */
375     uint32_t       nr_vals;                       /*  number of values  */
376     XEN_GUEST_HANDLE(dom0_perfc_desc_t) desc; /*  counter information (or NULL) */
377     XEN_GUEST_HANDLE(dom0_perfc_val_t) val;   /*  counter values (or NULL)  */
378 };
379 typedef struct dom0_perfccontrol dom0_perfccontrol_t;
380 DEFINE_XEN_GUEST_HANDLE(dom0_perfccontrol_t);
381
382 #define DOM0_MICROCODE           35
383 struct dom0_microcode {
384     /* IN variables. */
385     XEN_GUEST_HANDLE(void) data;          /* Pointer to microcode data */
386     uint32_t length;                  /* Length of microcode data. */
387 };
388 typedef struct dom0_microcode dom0_microcode_t;
389 DEFINE_XEN_GUEST_HANDLE(dom0_microcode_t);
390
391 #define DOM0_IOPORT_PERMISSION   36
392 struct dom0_ioport_permission {
393     domid_t  domain;                  /* domain to be affected */
394     uint32_t first_port;              /* first port int range */
395     uint32_t nr_ports;                /* size of port range */
396     uint8_t  allow_access;            /* allow or deny access to range? */
397 };
398 typedef struct dom0_ioport_permission dom0_ioport_permission_t;
399 DEFINE_XEN_GUEST_HANDLE(dom0_ioport_permission_t);
400
401 #define DOM0_GETVCPUCONTEXT      37
402 struct dom0_getvcpucontext {
403     /* IN variables. */
404     domid_t  domain;                  /* domain to be affected */
405     uint32_t vcpu;                    /* vcpu # */
406     /* OUT variables. */
407     XEN_GUEST_HANDLE(vcpu_guest_context_t) ctxt;
408 };
409 typedef struct dom0_getvcpucontext dom0_getvcpucontext_t;
410 DEFINE_XEN_GUEST_HANDLE(dom0_getvcpucontext_t);
411
412 #define DOM0_GETVCPUINFO         43
413 struct dom0_getvcpuinfo {
414     /* IN variables. */
415     domid_t  domain;                  /* domain to be affected */
416     uint32_t vcpu;                    /* vcpu # */
417     /* OUT variables. */
418     uint8_t  online;                  /* currently online (not hotplugged)? */
419     uint8_t  blocked;                 /* blocked waiting for an event? */
420     uint8_t  running;                 /* currently scheduled on its CPU? */
421     uint64_t cpu_time;                /* total cpu time consumed (ns) */
422     uint32_t cpu;                     /* current mapping   */
423     cpumap_t cpumap;                  /* allowable mapping */
424 };
425 typedef struct dom0_getvcpuinfo dom0_getvcpuinfo_t;
426 DEFINE_XEN_GUEST_HANDLE(dom0_getvcpuinfo_t);
427
428 #define DOM0_GETDOMAININFOLIST   38
429 struct dom0_getdomaininfolist {
430     /* IN variables. */
431     domid_t               first_domain;
432     uint32_t              max_domains;
433     XEN_GUEST_HANDLE(dom0_getdomaininfo_t) buffer;
434     /* OUT variables. */
435     uint32_t              num_domains;
436 };
437 typedef struct dom0_getdomaininfolist dom0_getdomaininfolist_t;
438 DEFINE_XEN_GUEST_HANDLE(dom0_getdomaininfolist_t);
439
440 #define DOM0_PLATFORM_QUIRK      39
441 #define QUIRK_NOIRQBALANCING      1 /* Do not restrict IO-APIC RTE targets */
442 #define QUIRK_IOAPIC_BAD_REGSEL   2 /* IO-APIC REGSEL forgets its value    */
443 #define QUIRK_IOAPIC_GOOD_REGSEL  3 /* IO-APIC REGSEL behaves properly     */
444 struct dom0_platform_quirk {
445     /* IN variables. */
446     uint32_t quirk_id;
447 };
448 typedef struct dom0_platform_quirk dom0_platform_quirk_t;
449 DEFINE_XEN_GUEST_HANDLE(dom0_platform_quirk_t);
450
451 #define DOM0_PHYSICAL_MEMORY_MAP 40   /* Unimplemented from 3.0.3 onwards */
452 struct dom0_memory_map_entry {
453     uint64_t start, end;
454     uint32_t flags; /* reserved */
455     uint8_t  is_ram;
456 };
457 typedef struct dom0_memory_map_entry dom0_memory_map_entry_t;
458 DEFINE_XEN_GUEST_HANDLE(dom0_memory_map_entry_t);
459
460 struct dom0_physical_memory_map {
461     /* IN variables. */
462     uint32_t max_map_entries;
463     /* OUT variables. */
464     uint32_t nr_map_entries;
465     XEN_GUEST_HANDLE(dom0_memory_map_entry_t) memory_map;
466 };
467 typedef struct dom0_physical_memory_map dom0_physical_memory_map_t;
468 DEFINE_XEN_GUEST_HANDLE(dom0_physical_memory_map_t);
469
470 #define DOM0_MAX_VCPUS 41
471 struct dom0_max_vcpus {
472     domid_t  domain;        /* domain to be affected */
473     uint32_t max;           /* maximum number of vcpus */
474 };
475 typedef struct dom0_max_vcpus dom0_max_vcpus_t;
476 DEFINE_XEN_GUEST_HANDLE(dom0_max_vcpus_t);
477
478 #define DOM0_SETDOMAINHANDLE 44
479 struct dom0_setdomainhandle {
480     domid_t domain;
481     xen_domain_handle_t handle;
482 };
483 typedef struct dom0_setdomainhandle dom0_setdomainhandle_t;
484 DEFINE_XEN_GUEST_HANDLE(dom0_setdomainhandle_t);
485
486 #define DOM0_SETDEBUGGING 45
487 struct dom0_setdebugging {
488     domid_t domain;
489     uint8_t enable;
490 };
491 typedef struct dom0_setdebugging dom0_setdebugging_t;
492 DEFINE_XEN_GUEST_HANDLE(dom0_setdebugging_t);
493
494 #define DOM0_IRQ_PERMISSION 46
495 struct dom0_irq_permission {
496     domid_t domain;          /* domain to be affected */
497     uint8_t pirq;
498     uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
499 };
500 typedef struct dom0_irq_permission dom0_irq_permission_t;
501 DEFINE_XEN_GUEST_HANDLE(dom0_irq_permission_t);
502
503 #define DOM0_IOMEM_PERMISSION 47
504 struct dom0_iomem_permission {
505     domid_t  domain;          /* domain to be affected */
506     xen_pfn_t first_mfn;      /* first page (physical page number) in range */
507     uint64_t nr_mfns;         /* number of pages in range (>0) */
508     uint8_t allow_access;     /* allow (!0) or deny (0) access to range? */
509 };
510 typedef struct dom0_iomem_permission dom0_iomem_permission_t;
511 DEFINE_XEN_GUEST_HANDLE(dom0_iomem_permission_t);
512
513 #define DOM0_HYPERCALL_INIT   48
514 struct dom0_hypercall_init {
515     domid_t   domain;          /* domain to be affected */
516     xen_pfn_t gmfn;            /* GMFN to be initialised */
517 };
518 typedef struct dom0_hypercall_init dom0_hypercall_init_t;
519 DEFINE_XEN_GUEST_HANDLE(dom0_hypercall_init_t);
520
521 #define DOM0_DOMAIN_SETUP     49
522 #define _XEN_DOMAINSETUP_hvm_guest 0
523 #define XEN_DOMAINSETUP_hvm_guest  (1UL<<_XEN_DOMAINSETUP_hvm_guest)
524 #define _XEN_DOMAINSETUP_query 1        /* Get parameters (for save)  */
525 #define XEN_DOMAINSETUP_query  (1UL<<_XEN_DOMAINSETUP_query)
526 typedef struct dom0_domain_setup {
527     domid_t  domain;          /* domain to be affected */
528     unsigned long flags;      /* XEN_DOMAINSETUP_* */
529 #ifdef __ia64__
530     unsigned long bp;         /* mpaddr of boot param area */
531     unsigned long maxmem;         /* Highest memory address for MDT.  */
532     unsigned long xsi_va;     /* Xen shared_info area virtual address.  */
533     unsigned int hypercall_imm; /* Break imm for Xen hypercalls.  */
534 #endif
535 } dom0_domain_setup_t;
536 DEFINE_XEN_GUEST_HANDLE(dom0_domain_setup_t);
537
538 #define DOM0_SETTIMEOFFSET    50
539 struct dom0_settimeoffset {
540     domid_t  domain;
541     int32_t  time_offset_seconds; /* applied to domain wallclock time */
542 };
543 typedef struct dom0_settimeoffset dom0_settimeoffset_t;
544 DEFINE_XEN_GUEST_HANDLE(dom0_settimeoffset_t);
545
546 struct dom0_op {
547     uint32_t cmd;
548     uint32_t interface_version; /* DOM0_INTERFACE_VERSION */
549     union {
550         struct dom0_createdomain      createdomain;
551         struct dom0_pausedomain       pausedomain;
552         struct dom0_unpausedomain     unpausedomain;
553         struct dom0_destroydomain     destroydomain;
554         struct dom0_getmemlist        getmemlist;
555         struct sched_ctl_cmd          schedctl;
556         struct sched_adjdom_cmd       adjustdom;
557         struct dom0_setvcpucontext    setvcpucontext;
558         struct dom0_getdomaininfo     getdomaininfo;
559         struct dom0_getpageframeinfo  getpageframeinfo;
560         struct dom0_msr               msr;
561         struct dom0_settime           settime;
562         struct dom0_readconsole       readconsole;
563         struct dom0_setvcpuaffinity   setvcpuaffinity;
564         struct dom0_tbufcontrol       tbufcontrol;
565         struct dom0_physinfo          physinfo;
566         struct dom0_sched_id          sched_id;
567         struct dom0_shadow_control    shadow_control;
568         struct dom0_setdomainmaxmem   setdomainmaxmem;
569         struct dom0_getpageframeinfo2 getpageframeinfo2;
570         struct dom0_add_memtype       add_memtype;
571         struct dom0_del_memtype       del_memtype;
572         struct dom0_read_memtype      read_memtype;
573         struct dom0_perfccontrol      perfccontrol;
574         struct dom0_microcode         microcode;
575         struct dom0_ioport_permission ioport_permission;
576         struct dom0_getvcpucontext    getvcpucontext;
577         struct dom0_getvcpuinfo       getvcpuinfo;
578         struct dom0_getdomaininfolist getdomaininfolist;
579         struct dom0_platform_quirk    platform_quirk;
580         struct dom0_physical_memory_map physical_memory_map;
581         struct dom0_max_vcpus         max_vcpus;
582         struct dom0_setdomainhandle   setdomainhandle;
583         struct dom0_setdebugging      setdebugging;
584         struct dom0_irq_permission    irq_permission;
585         struct dom0_iomem_permission  iomem_permission;
586         struct dom0_hypercall_init    hypercall_init;
587         struct dom0_domain_setup      domain_setup;
588         struct dom0_settimeoffset     settimeoffset;
589         uint8_t                       pad[128];
590     } u;
591 };
592 typedef struct dom0_op dom0_op_t;
593 DEFINE_XEN_GUEST_HANDLE(dom0_op_t);
594
595 #endif /* __XEN_PUBLIC_DOM0_OPS_H__ */
596
597 /*
598  * Local variables:
599  * mode: C
600  * c-set-style: "BSD"
601  * c-basic-offset: 4
602  * tab-width: 4
603  * indent-tabs-mode: nil
604  * End:
605  */