diff options
Diffstat (limited to 'xen/include/public/dom0_ops.h')
-rw-r--r-- | xen/include/public/dom0_ops.h | 372 |
1 files changed, 372 insertions, 0 deletions
diff --git a/xen/include/public/dom0_ops.h b/xen/include/public/dom0_ops.h new file mode 100644 index 0000000000..e19141ca02 --- /dev/null +++ b/xen/include/public/dom0_ops.h @@ -0,0 +1,372 @@ +/****************************************************************************** + * dom0_ops.h + * + * Process command requests from domain-0 guest OS. + * + * Copyright (c) 2002-2003, B Dragovic + * Copyright (c) 2002-2004, K Fraser + */ + + +#ifndef __XEN_PUBLIC_DOM0_OPS_H__ +#define __XEN_PUBLIC_DOM0_OPS_H__ + +#include "xen.h" +#include "sched_ctl.h" + +/* + * Make sure you increment the interface version whenever you modify this file! + * This makes sure that old versions of dom0 tools will stop working in a + * well-defined way (rather than crashing the machine, for instance). + */ +#define DOM0_INTERFACE_VERSION 0xAAAA0019 + +/************************************************************************/ + +#define DOM0_GETMEMLIST 2 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad0; + u32 __pad1; + memory_t max_pfns; /* 8 */ + MEMORY_PADDING; + void *buffer; /* 16 */ + MEMORY_PADDING; + /* OUT variables. */ + memory_t num_pfns; /* 24 */ + MEMORY_PADDING; +} PACKED dom0_getmemlist_t; /* 32 bytes */ + +#define DOM0_SCHEDCTL 6 + /* struct sched_ctl_cmd is from sched-ctl.h */ +typedef struct sched_ctl_cmd dom0_schedctl_t; + +#define DOM0_ADJUSTDOM 7 +/* struct sched_adjdom_cmd is from sched-ctl.h */ +typedef struct sched_adjdom_cmd dom0_adjustdom_t; + +#define DOM0_CREATEDOMAIN 8 +typedef struct { + /* IN parameters. */ + memory_t memory_kb; /* 0 */ + MEMORY_PADDING; + u32 cpu; /* 8 */ + u32 __pad0; /* 12 */ + /* IN/OUT parameters. */ + /* If 0, domain is allocated. If non-zero use it unless in use. */ + domid_t domain; /* 16 */ + u16 __pad1; + /* OUT parameters. */ +} PACKED dom0_createdomain_t; /* 20 bytes */ + +#define DOM0_DESTROYDOMAIN 9 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad; +} PACKED dom0_destroydomain_t; /* 4 bytes */ + +#define DOM0_PAUSEDOMAIN 10 +typedef struct { + /* IN parameters. */ + domid_t domain; /* 0 */ + u16 __pad; +} PACKED dom0_pausedomain_t; /* 4 bytes */ + +#define DOM0_UNPAUSEDOMAIN 11 +typedef struct { + /* IN parameters. */ + domid_t domain; /* 0 */ + u16 __pad; +} PACKED dom0_unpausedomain_t; /* 4 bytes */ + +#define DOM0_GETDOMAININFO 12 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ /* NB. IN/OUT variable. */ + u16 __pad; + /* OUT variables. */ +#define DOMFLAGS_DYING (1<<0) /* Domain is scheduled to die. */ +#define DOMFLAGS_CRASHED (1<<1) /* Crashed domain; frozen for postmortem. */ +#define DOMFLAGS_SHUTDOWN (1<<2) /* The guest OS has shut itself down. */ +#define DOMFLAGS_PAUSED (1<<3) /* Currently paused by control software. */ +#define DOMFLAGS_BLOCKED (1<<4) /* Currently blocked pending an event. */ +#define DOMFLAGS_RUNNING (1<<5) /* Domain is currently running. */ +#define DOMFLAGS_CPUMASK 255 /* CPU to which this domain is bound. */ +#define DOMFLAGS_CPUSHIFT 8 +#define DOMFLAGS_SHUTDOWNMASK 255 /* DOMFLAGS_SHUTDOWN guest-supplied code. */ +#define DOMFLAGS_SHUTDOWNSHIFT 16 + u32 flags; /* 4 */ + full_execution_context_t *ctxt; /* 8 */ /* NB. IN/OUT variable. */ + MEMORY_PADDING; + memory_t tot_pages; /* 16 */ + MEMORY_PADDING; + memory_t max_pages; /* 24 */ + MEMORY_PADDING; + memory_t shared_info_frame; /* 32: MFN of shared_info struct */ + MEMORY_PADDING; + u64 cpu_time; /* 40 */ +} PACKED dom0_getdomaininfo_t; /* 48 bytes */ + +#define DOM0_BUILDDOMAIN 13 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad0; /* 2 */ + u32 __pad1; /* 4 */ + /* IN/OUT parameters */ + full_execution_context_t *ctxt; /* 8 */ + MEMORY_PADDING; +} PACKED dom0_builddomain_t; /* 16 bytes */ + +#define DOM0_IOPL 14 +typedef struct { + domid_t domain; /* 0 */ + u16 __pad; + u32 iopl; /* 4 */ +} PACKED dom0_iopl_t; /* 8 bytes */ + +#define DOM0_MSR 15 +typedef struct { + /* IN variables. */ + u32 write; /* 0 */ + u32 cpu_mask; /* 4 */ + u32 msr; /* 8 */ + u32 in1; /* 12 */ + u32 in2; /* 16 */ + /* OUT variables. */ + u32 out1; /* 20 */ + u32 out2; /* 24 */ +} PACKED dom0_msr_t; /* 28 bytes */ + +#define DOM0_DEBUG 16 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u8 opcode; /* 2 */ + u8 __pad; + u32 in1; /* 4 */ + u32 in2; /* 8 */ + u32 in3; /* 12 */ + u32 in4; /* 16 */ + /* OUT variables. */ + u32 status; /* 20 */ + u32 out1; /* 24 */ + u32 out2; /* 28 */ +} PACKED dom0_debug_t; /* 32 bytes */ + +/* + * Set clock such that it would read <secs,usecs> after 00:00:00 UTC, + * 1 January, 1970 if the current system time was <system_time>. + */ +#define DOM0_SETTIME 17 +typedef struct { + /* IN variables. */ + u32 secs; /* 0 */ + u32 usecs; /* 4 */ + u64 system_time; /* 8 */ +} PACKED dom0_settime_t; /* 16 bytes */ + +#define DOM0_GETPAGEFRAMEINFO 18 +#define NOTAB 0 /* normal page */ +#define L1TAB (1<<28) +#define L2TAB (2<<28) +#define L3TAB (3<<28) +#define L4TAB (4<<28) +#define LPINTAB (1<<31) +#define XTAB (0xf<<28) /* invalid page */ +#define LTAB_MASK XTAB +#define LTABTYPE_MASK (0x7<<28) + +typedef struct { + /* IN variables. */ + memory_t pfn; /* 0: Machine page frame number to query. */ + MEMORY_PADDING; + domid_t domain; /* 8: To which domain does the frame belong? */ + u16 __pad; + /* OUT variables. */ + /* Is the page PINNED to a type? */ + u32 type; /* 12: see above type defs */ +} PACKED dom0_getpageframeinfo_t; /* 16 bytes */ + +/* + * Read console content from Xen buffer ring. + */ +#define DOM0_READCONSOLE 19 +typedef struct { + memory_t str; /* 0 */ + MEMORY_PADDING; + u32 count; /* 8 */ + u32 cmd; /* 12 */ +} PACKED dom0_readconsole_t; /* 16 bytes */ + +/* + * Pin Domain to a particular CPU (use -1 to unpin) + */ +#define DOM0_PINCPUDOMAIN 20 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad; + s32 cpu; /* 4: -1 implies unpin */ +} PACKED dom0_pincpudomain_t; /* 8 bytes */ + +/* Get trace buffers machine base address */ +#define DOM0_GETTBUFS 21 +typedef struct { + /* OUT variables */ + memory_t mach_addr; /* 0: location of the trace buffers */ + MEMORY_PADDING; + u32 size; /* 8: size of each trace buffer, in bytes */ +} PACKED dom0_gettbufs_t; /* 12 bytes */ + +/* + * Get physical information about the host machine + */ +#define DOM0_PHYSINFO 22 +typedef struct { + u32 ht_per_core; /* 0 */ + u32 cores; /* 4 */ + u32 cpu_khz; /* 8 */ + u32 __pad; /* 12 */ + memory_t total_pages; /* 16 */ + MEMORY_PADDING; + memory_t free_pages; /* 24 */ + MEMORY_PADDING; +} PACKED dom0_physinfo_t; /* 32 bytes */ + +/* + * Allow a domain access to a physical PCI device + */ +#define DOM0_PCIDEV_ACCESS 23 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad; + u32 bus; /* 4 */ + u32 dev; /* 8 */ + u32 func; /* 12 */ + u32 enable; /* 16 */ +} PACKED dom0_pcidev_access_t; /* 20 bytes */ + +/* + * Get the ID of the current scheduler. + */ +#define DOM0_SCHED_ID 24 +typedef struct { + /* OUT variable */ + u32 sched_id; /* 0 */ +} PACKED dom0_sched_id_t; /* 4 bytes */ + +/* + * Control shadow pagetables operation + */ +#define DOM0_SHADOW_CONTROL 25 + +#define DOM0_SHADOW_CONTROL_OP_OFF 0 +#define DOM0_SHADOW_CONTROL_OP_ENABLE_TEST 1 +#define DOM0_SHADOW_CONTROL_OP_ENABLE_LOGDIRTY 2 +#define DOM0_SHADOW_CONTROL_OP_ENABLE_TRANSLATE 3 +#define DOM0_SHADOW_CONTROL_OP_FLUSH 10 /* table ops */ +#define DOM0_SHADOW_CONTROL_OP_CLEAN 11 +#define DOM0_SHADOW_CONTROL_OP_PEEK 12 + +typedef struct dom0_shadow_control +{ + u32 fault_count; + u32 dirty_count; + u32 dirty_net_count; + u32 dirty_block_count; +} dom0_shadow_control_stats_t; + +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad; + u32 op; /* 4 */ + unsigned long *dirty_bitmap; /* 8: pointer to locked buffer */ + MEMORY_PADDING; + /* IN/OUT variables. */ + memory_t pages; /* 16: size of buffer, updated with actual size */ + MEMORY_PADDING; + /* OUT variables. */ + dom0_shadow_control_stats_t stats; +} PACKED dom0_shadow_control_t; + +#define DOM0_SETDOMAININITIALMEM 27 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad0; + u32 __pad1; + memory_t initial_memkb; /* 8 */ + MEMORY_PADDING; +} PACKED dom0_setdomaininitialmem_t; /* 16 bytes */ + +#define DOM0_SETDOMAINMAXMEM 28 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad0; + u32 __pad1; + memory_t max_memkb; /* 8 */ + MEMORY_PADDING; +} PACKED dom0_setdomainmaxmem_t; /* 16 bytes */ + +#define DOM0_GETPAGEFRAMEINFO2 29 /* batched interface */ +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad0; + u32 __pad1; + memory_t num; /* 8 */ + MEMORY_PADDING; + /* IN/OUT variables. */ + unsigned long *array; /* 16 */ + MEMORY_PADDING; +} PACKED dom0_getpageframeinfo2_t; /* 24 bytes */ + +#define DOM0_SETDOMAINVMASSIST 30 +typedef struct { + /* IN variables. */ + domid_t domain; /* 0 */ + u16 __pad0; + u32 cmd; /* 4: vm_assist cmd */ + u32 type; /* 8: vm_assist cmd */ +} PACKED dom0_setdomainvmassist_t; /* 12 bytes */ + +typedef struct { + u32 cmd; /* 0 */ + u32 interface_version; /* 4 */ /* DOM0_INTERFACE_VERSION */ + union { /* 8 */ + u32 dummy[18]; /* 72 bytes */ + dom0_createdomain_t createdomain; + dom0_pausedomain_t pausedomain; + dom0_unpausedomain_t unpausedomain; + dom0_destroydomain_t destroydomain; + dom0_getmemlist_t getmemlist; + dom0_schedctl_t schedctl; + dom0_adjustdom_t adjustdom; + dom0_builddomain_t builddomain; + dom0_getdomaininfo_t getdomaininfo; + dom0_getpageframeinfo_t getpageframeinfo; + dom0_iopl_t iopl; + dom0_msr_t msr; + dom0_debug_t debug; + dom0_settime_t settime; + dom0_readconsole_t readconsole; + dom0_pincpudomain_t pincpudomain; + dom0_gettbufs_t gettbufs; + dom0_physinfo_t physinfo; + dom0_pcidev_access_t pcidev_access; + dom0_sched_id_t sched_id; + dom0_shadow_control_t shadow_control; + dom0_setdomaininitialmem_t setdomaininitialmem; + dom0_setdomainmaxmem_t setdomainmaxmem; + dom0_getpageframeinfo2_t getpageframeinfo2; + dom0_setdomainvmassist_t setdomainvmassist; + } PACKED u; +} PACKED dom0_op_t; /* 80 bytes */ + +#endif /* __XEN_PUBLIC_DOM0_OPS_H__ */ |