direct-io.hg

annotate tools/libxc/xenctrl.h @ 10953:7924b6bd728a

Change DOM0_PERFCCONTROL: remove array limit.

Descriptors and values are passed by two distinct buffers.

Signed-off-by: Tristan Gingold <tristan.gingold@bull.net>
author kaf24@firebug.cl.cam.ac.uk
date Mon Aug 07 15:53:06 2006 +0100 (2006-08-07)
parents f7b43e5c42b9
children 2afc3f16ae6e
rev   line source
mjw@1623 1 /******************************************************************************
cl349@6388 2 * xenctrl.h
kaf24@9660 3 *
mjw@1623 4 * A library for low-level access to the Xen control interfaces.
kaf24@9660 5 *
kaf24@2787 6 * Copyright (c) 2003-2004, K A Fraser.
mjw@1623 7 */
mjw@1623 8
cl349@6389 9 #ifndef XENCTRL_H
cl349@6389 10 #define XENCTRL_H
mjw@1623 11
kaf24@9999 12 #include <stddef.h>
kaf24@3266 13 #include <stdint.h>
kaf24@4719 14 #include <sys/ptrace.h>
kaf24@2821 15 #include <xen/xen.h>
kaf24@2821 16 #include <xen/dom0_ops.h>
vh249@6549 17 #include <xen/version.h>
kaf24@2821 18 #include <xen/event_channel.h>
kaf24@7196 19 #include <xen/sched.h>
kaf24@2821 20 #include <xen/sched_ctl.h>
smh22@7702 21 #include <xen/memory.h>
kaf24@5541 22 #include <xen/acm.h>
kaf24@9907 23 #include <xen/acm_ops.h>
kaf24@2787 24
kaf24@5914 25 #ifdef __ia64__
kaf24@5914 26 #define XC_PAGE_SHIFT 14
kaf24@5914 27 #else
kaf24@5914 28 #define XC_PAGE_SHIFT 12
kaf24@5914 29 #endif
kaf24@5914 30 #define XC_PAGE_SIZE (1UL << XC_PAGE_SHIFT)
kaf24@5914 31 #define XC_PAGE_MASK (~(XC_PAGE_SIZE-1))
kaf24@5914 32
kaf24@3961 33 /*
kaf24@3961 34 * DEFINITIONS FOR CPU BARRIERS
kaf24@9660 35 */
kaf24@3961 36
kaf24@3961 37 #if defined(__i386__)
kaf24@3966 38 #define mb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
kaf24@3966 39 #define rmb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
kaf24@3966 40 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
kaf24@3961 41 #elif defined(__x86_64__)
kaf24@3966 42 #define mb() __asm__ __volatile__ ( "mfence" : : : "memory")
kaf24@3966 43 #define rmb() __asm__ __volatile__ ( "lfence" : : : "memory")
kaf24@3966 44 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
kaf24@5914 45 #elif defined(__ia64__)
kaf24@5914 46 /* FIXME */
kaf24@5914 47 #define mb()
kaf24@5914 48 #define rmb()
kaf24@5914 49 #define wmb()
kaf24@10687 50 #elif defined(__powerpc__)
kaf24@10687 51 /* XXX loosen these up later */
kaf24@10687 52 #define mb() __asm__ __volatile__ ("sync" : : : "memory")
kaf24@10687 53 #define rmb() __asm__ __volatile__ ("sync" : : : "memory") /* lwsync? */
kaf24@10687 54 #define wmb() __asm__ __volatile__ ("sync" : : : "memory") /* eieio? */
kaf24@3961 55 #else
kaf24@3961 56 #error "Define barriers"
kaf24@3961 57 #endif
kaf24@3961 58
kaf24@3961 59 /*
iap10@3443 60 * INITIALIZATION FUNCTIONS
kaf24@9660 61 */
iap10@3443 62
iap10@3443 63 /**
iap10@3443 64 * This function opens a handle to the hypervisor interface. This function can
iap10@3443 65 * be called multiple times within a single process. Multiple processes can
iap10@3443 66 * have an open hypervisor interface at the same time.
iap10@3443 67 *
iap10@3443 68 * Each call to this function should have a corresponding call to
iap10@3443 69 * xc_interface_close().
iap10@3443 70 *
iap10@3443 71 * This function can fail if the caller does not have superuser permission or
iap10@3443 72 * if a Xen-enabled kernel is not currently running.
iap10@3443 73 *
iap10@3443 74 * @return a handle to the hypervisor interface or -1 on failure
iap10@3443 75 */
mjw@1623 76 int xc_interface_open(void);
iap10@3443 77
iap10@3443 78 /**
iap10@3443 79 * This function closes an open hypervisor interface.
iap10@3443 80 *
iap10@3443 81 * This function can fail if the handle does not represent an open interface or
iap10@3443 82 * if there were problems closing the interface.
iap10@3443 83 *
iap10@3443 84 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 85 * @return 0 on success, -1 otherwise.
iap10@3443 86 */
mjw@1623 87 int xc_interface_close(int xc_handle);
mjw@1623 88
kaf24@3961 89 /*
kaf24@4719 90 * DOMAIN DEBUGGING FUNCTIONS
kaf24@4719 91 */
kaf24@4719 92
kaf24@4719 93 typedef struct xc_core_header {
kaf24@4719 94 unsigned int xch_magic;
kaf24@4719 95 unsigned int xch_nr_vcpus;
kaf24@4719 96 unsigned int xch_nr_pages;
kaf24@4719 97 unsigned int xch_ctxt_offset;
kaf24@4719 98 unsigned int xch_index_offset;
kaf24@4719 99 unsigned int xch_pages_offset;
kaf24@4719 100 } xc_core_header_t;
kaf24@4719 101
kaf24@9145 102 #define XC_CORE_MAGIC 0xF00FEBED
kaf24@4719 103
kaf24@6941 104 long xc_ptrace_core(
kaf24@6941 105 int xc_handle,
kaf24@9660 106 enum __ptrace_request request,
kaf24@9660 107 uint32_t domid,
kaf24@9660 108 long addr,
kaf24@9143 109 long data,
kaf24@9143 110 vcpu_guest_context_t *ctxt);
kaf24@9143 111 void * map_domain_va_core(
kaf24@9660 112 unsigned long domfd,
kaf24@9660 113 int cpu,
kaf24@9143 114 void *guest_va,
kaf24@9143 115 vcpu_guest_context_t *ctxt);
kaf24@6941 116 int xc_waitdomain_core(
kaf24@6941 117 int xc_handle,
kaf24@9660 118 int domain,
kaf24@9660 119 int *status,
kaf24@9143 120 int options,
kaf24@9143 121 vcpu_guest_context_t *ctxt);
kaf24@4719 122
kaf24@4719 123 /*
iap10@3443 124 * DOMAIN MANAGEMENT FUNCTIONS
kaf24@3961 125 */
iap10@3443 126
mjw@1623 127 typedef struct {
kaf24@7378 128 uint32_t domid;
kaf24@7378 129 uint32_t ssidref;
kaf24@9660 130 unsigned int dying:1, crashed:1, shutdown:1,
mjw@1623 131 paused:1, blocked:1, running:1;
mjw@1623 132 unsigned int shutdown_reason; /* only meaningful if shutdown==1 */
mjw@1623 133 unsigned long nr_pages;
mjw@1623 134 unsigned long shared_info_frame;
kaf24@7378 135 uint64_t cpu_time;
mjw@1623 136 unsigned long max_memkb;
kaf24@7397 137 unsigned int nr_online_vcpus;
kaf24@7397 138 unsigned int max_vcpu_id;
kaf24@7378 139 xen_domain_handle_t handle;
mjw@1623 140 } xc_dominfo_t;
mjw@1623 141
kaf24@2787 142 typedef dom0_getdomaininfo_t xc_domaininfo_t;
kaf24@9660 143 int xc_domain_create(int xc_handle,
kaf24@7339 144 uint32_t ssidref,
kaf24@7378 145 xen_domain_handle_t handle,
kaf24@7339 146 uint32_t *pdomid);
iap10@3443 147
kaf24@4719 148
kaf24@9221 149 /* Functions to produce a dump of a given domain
kaf24@9221 150 * xc_domain_dumpcore - produces a dump to a specified file
kaf24@9221 151 * xc_domain_dumpcore_via_callback - produces a dump, using a specified
kaf24@9221 152 * callback function
kaf24@9221 153 */
kaf24@9660 154 int xc_domain_dumpcore(int xc_handle,
kaf24@7339 155 uint32_t domid,
cl349@4853 156 const char *corename);
kaf24@4719 157
kaf24@9221 158 /* Define the callback function type for xc_domain_dumpcore_via_callback.
kaf24@9221 159 *
kaf24@9221 160 * This function is called by the coredump code for every "write",
kaf24@9221 161 * and passes an opaque object for the use of the function and
kaf24@9221 162 * created by the caller of xc_domain_dumpcore_via_callback.
kaf24@9221 163 */
kaf24@9221 164 typedef int (dumpcore_rtn_t)(void *arg, char *buffer, unsigned int length);
kaf24@9221 165
kaf24@9660 166 int xc_domain_dumpcore_via_callback(int xc_handle,
kaf24@9221 167 uint32_t domid,
kaf24@9221 168 void *arg,
kaf24@9221 169 dumpcore_rtn_t dump_rtn);
kaf24@9221 170
kaf24@7354 171 /*
kaf24@7566 172 * This function sets the maximum number of vcpus that a domain may create.
kaf24@7354 173 *
kaf24@7354 174 * @parm xc_handle a handle to an open hypervisor interface.
kaf24@7354 175 * @parm domid the domain id in which vcpus are to be created.
kaf24@7354 176 * @parm max the maximum number of vcpus that the domain may create.
kaf24@7354 177 * @return 0 on success, -1 on failure.
kaf24@7354 178 */
kaf24@7354 179 int xc_domain_max_vcpus(int xc_handle,
kaf24@9660 180 uint32_t domid,
kaf24@7354 181 unsigned int max);
kaf24@4719 182
iap10@3443 183 /**
iap10@3443 184 * This function pauses a domain. A paused domain still exists in memory
iap10@3443 185 * however it does not receive any timeslices from the hypervisor.
iap10@3443 186 *
iap10@3443 187 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 188 * @parm domid the domain id to pause
iap10@3443 189 * @return 0 on success, -1 on failure.
iap10@3443 190 */
kaf24@9660 191 int xc_domain_pause(int xc_handle,
kaf24@7339 192 uint32_t domid);
iap10@3443 193 /**
iap10@3443 194 * This function unpauses a domain. The domain should have been previously
iap10@3443 195 * paused.
iap10@3443 196 *
iap10@3443 197 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 198 * @parm domid the domain id to unpause
iap10@3443 199 * return 0 on success, -1 on failure
iap10@3443 200 */
kaf24@9660 201 int xc_domain_unpause(int xc_handle,
kaf24@7339 202 uint32_t domid);
iap10@3443 203
iap10@3443 204 /**
iap10@3443 205 * This function will destroy a domain. Destroying a domain removes the domain
iap10@3443 206 * completely from memory. This function should be called after sending the
iap10@3443 207 * domain a SHUTDOWN control message to free up the domain resources.
iap10@3443 208 *
iap10@3443 209 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 210 * @parm domid the domain id to destroy
iap10@3443 211 * @return 0 on success, -1 on failure
iap10@3443 212 */
kaf24@9660 213 int xc_domain_destroy(int xc_handle,
kaf24@7339 214 uint32_t domid);
kaf24@8500 215
kaf24@9560 216 /**
kaf24@9560 217 * This function will shutdown a domain. This is intended for use in
kaf24@9560 218 * fully-virtualized domains where this operation is analogous to the
kaf24@9560 219 * sched_op operations in a paravirtualized domain. The caller is
kaf24@9560 220 * expected to give the reason for the shutdown.
kaf24@9560 221 *
kaf24@9560 222 * @parm xc_handle a handle to an open hypervisor interface
kaf24@9560 223 * @parm domid the domain id to destroy
kaf24@9560 224 * @parm reason is the reason (SHUTDOWN_xxx) for the shutdown
kaf24@9560 225 * @return 0 on success, -1 on failure
kaf24@9560 226 */
kaf24@9660 227 int xc_domain_shutdown(int xc_handle,
kaf24@9560 228 uint32_t domid,
kaf24@9560 229 int reason);
kaf24@9560 230
kaf24@8500 231 int xc_vcpu_setaffinity(int xc_handle,
kaf24@8500 232 uint32_t domid,
kaf24@8500 233 int vcpu,
kaf24@8500 234 cpumap_t cpumap);
kaf24@7378 235
iap10@3443 236 /**
dsteklof@5498 237 * This function will return information about one or more domains. It is
dsteklof@5498 238 * designed to iterate over the list of domains. If a single domain is
dsteklof@5498 239 * requested, this function will return the next domain in the list - if
dsteklof@5498 240 * one exists. It is, therefore, important in this case to make sure the
dsteklof@5498 241 * domain requested was the one returned.
iap10@3443 242 *
iap10@3443 243 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 244 * @parm first_domid the first domain to enumerate information from. Domains
iap10@3443 245 * are currently enumerate in order of creation.
iap10@3443 246 * @parm max_doms the number of elements in info
iap10@3443 247 * @parm info an array of max_doms size that will contain the information for
iap10@3443 248 * the enumerated domains.
iap10@3443 249 * @return the number of domains enumerated or -1 on error
iap10@3443 250 */
mjw@1623 251 int xc_domain_getinfo(int xc_handle,
kaf24@9660 252 uint32_t first_domid,
mjw@1623 253 unsigned int max_doms,
mjw@1623 254 xc_dominfo_t *info);
iap10@3443 255
kaf24@8381 256
kaf24@8381 257 /**
kaf24@8500 258 * This function will set the execution context for the specified vcpu.
kaf24@8381 259 *
kaf24@8381 260 * @parm xc_handle a handle to an open hypervisor interface
kaf24@8381 261 * @parm domid the domain to set the vcpu context for
kaf24@8381 262 * @parm vcpu the vcpu number for the context
kaf24@8381 263 * @parm ctxt pointer to the the cpu context with the values to set
kaf24@8381 264 * @return the number of domains enumerated or -1 on error
kaf24@8381 265 */
kaf24@8500 266 int xc_vcpu_setcontext(int xc_handle,
kaf24@8500 267 uint32_t domid,
kaf24@8500 268 uint32_t vcpu,
kaf24@8500 269 vcpu_guest_context_t *ctxt);
iap10@3443 270 /**
kaf24@5699 271 * This function will return information about one or more domains, using a
kaf24@5699 272 * single hypercall. The domain information will be stored into the supplied
kaf24@5699 273 * array of xc_domaininfo_t structures.
kaf24@5699 274 *
kaf24@5699 275 * @parm xc_handle a handle to an open hypervisor interface
kaf24@5699 276 * @parm first_domain the first domain to enumerate information from.
kaf24@5699 277 * Domains are currently enumerate in order of creation.
kaf24@5699 278 * @parm max_domains the number of elements in info
kaf24@5699 279 * @parm info an array of max_doms size that will contain the information for
kaf24@5699 280 * the enumerated domains.
kaf24@5699 281 * @return the number of domains enumerated or -1 on error
kaf24@5699 282 */
kaf24@5699 283 int xc_domain_getinfolist(int xc_handle,
kaf24@7339 284 uint32_t first_domain,
kaf24@5699 285 unsigned int max_domains,
kaf24@5699 286 xc_domaininfo_t *info);
kaf24@5699 287
kaf24@5699 288 /**
emellor@7404 289 * This function returns information about the execution context of a
emellor@7404 290 * particular vcpu of a domain.
iap10@3443 291 *
iap10@3443 292 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 293 * @parm domid the domain to get information from
emellor@7404 294 * @parm vcpu the vcpu number
iap10@3443 295 * @parm ctxt a pointer to a structure to store the execution context of the
iap10@3443 296 * domain
iap10@3443 297 * @return 0 on success, -1 on failure
iap10@3443 298 */
kaf24@8500 299 int xc_vcpu_getcontext(int xc_handle,
kaf24@7339 300 uint32_t domid,
kaf24@7339 301 uint32_t vcpu,
cl349@4853 302 vcpu_guest_context_t *ctxt);
cl349@4849 303
kaf24@7397 304 typedef dom0_getvcpuinfo_t xc_vcpuinfo_t;
kaf24@8500 305 int xc_vcpu_getinfo(int xc_handle,
kaf24@8500 306 uint32_t domid,
kaf24@8500 307 uint32_t vcpu,
kaf24@8500 308 xc_vcpuinfo_t *info);
kaf24@7397 309
gm281@2236 310 int xc_domain_setcpuweight(int xc_handle,
kaf24@7339 311 uint32_t domid,
gm281@2236 312 float weight);
kaf24@2787 313 long long xc_domain_get_cpu_usage(int xc_handle,
mafetter@3435 314 domid_t domid,
mafetter@3435 315 int vcpu);
mjw@1623 316
kaf24@9660 317 int xc_domain_sethandle(int xc_handle, uint32_t domid,
kaf24@7379 318 xen_domain_handle_t handle);
kaf24@2787 319
kaf24@2787 320 typedef dom0_shadow_control_stats_t xc_shadow_control_stats_t;
mjw@1623 321 int xc_shadow_control(int xc_handle,
kaf24@9660 322 uint32_t domid,
mjw@1623 323 unsigned int sop,
mjw@1623 324 unsigned long *dirty_bitmap,
mjw@1623 325 unsigned long pages,
mjw@1623 326 xc_shadow_control_stats_t *stats);
mjw@1623 327
mjw@1623 328 int xc_bvtsched_global_set(int xc_handle,
mjw@1623 329 unsigned long ctx_allow);
mjw@1623 330
mjw@1623 331 int xc_bvtsched_domain_set(int xc_handle,
kaf24@7339 332 uint32_t domid,
kaf24@7339 333 uint32_t mcuadv,
gm281@2058 334 int warpback,
kaf24@7339 335 int32_t warpvalue,
gm281@2058 336 long long warpl,
gm281@2058 337 long long warpu);
mjw@1623 338
mjw@1623 339 int xc_bvtsched_global_get(int xc_handle,
mjw@1623 340 unsigned long *ctx_allow);
mjw@1623 341
mjw@1623 342 int xc_bvtsched_domain_get(int xc_handle,
kaf24@7339 343 uint32_t domid,
kaf24@7339 344 uint32_t *mcuadv,
gm281@2058 345 int *warpback,
kaf24@7339 346 int32_t *warpvalue,
gm281@2058 347 long long *warpl,
gm281@2058 348 long long *warpu);
mjw@1623 349
sd386@3449 350 int xc_sedf_domain_set(int xc_handle,
kaf24@7339 351 uint32_t domid,
kaf24@7339 352 uint64_t period, uint64_t slice,
kaf24@7339 353 uint64_t latency, uint16_t extratime,
kaf24@7339 354 uint16_t weight);
sd386@3449 355
sd386@3449 356 int xc_sedf_domain_get(int xc_handle,
kaf24@7339 357 uint32_t domid,
kaf24@7339 358 uint64_t* period, uint64_t *slice,
kaf24@7339 359 uint64_t *latency, uint16_t *extratime,
kaf24@7339 360 uint16_t *weight);
sd386@3449 361
kaf24@10174 362 int xc_sched_credit_domain_set(int xc_handle,
kaf24@10174 363 uint32_t domid,
kaf24@10174 364 struct sched_credit_adjdom *sdom);
ack@10168 365
kaf24@10174 366 int xc_sched_credit_domain_get(int xc_handle,
kaf24@10174 367 uint32_t domid,
kaf24@10174 368 struct sched_credit_adjdom *sdom);
ack@10168 369
kaf24@2787 370 typedef evtchn_status_t xc_evtchn_status_t;
iap10@3443 371
kaf24@3961 372 /*
iap10@3443 373 * EVENT CHANNEL FUNCTIONS
kaf24@3961 374 */
iap10@3443 375
iap10@3443 376 /**
iap10@3443 377 * This function allocates an unbound port. Ports are named endpoints used for
iap10@3443 378 * interdomain communication. This function is most useful in opening a
iap10@3443 379 * well-known port within a domain to receive events on.
iap10@3443 380 *
iap10@3443 381 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7223 382 * @parm dom the ID of the local domain (the 'allocatee')
kaf24@7237 383 * @parm remote_dom the ID of the domain who will later bind
kaf24@7237 384 * @return allocated port (in @dom) on success, -1 on failure
iap10@3443 385 */
kaf24@2713 386 int xc_evtchn_alloc_unbound(int xc_handle,
kaf24@7339 387 uint32_t dom,
kaf24@7339 388 uint32_t remote_dom);
iap10@3443 389
mjw@1623 390 int xc_evtchn_status(int xc_handle,
kaf24@7339 391 uint32_t dom, /* may be DOMID_SELF */
kaf24@8151 392 evtchn_port_t port,
mjw@1623 393 xc_evtchn_status_t *status);
mjw@1623 394
mjw@1623 395 int xc_physdev_pci_access_modify(int xc_handle,
kaf24@7339 396 uint32_t domid,
mjw@1623 397 int bus,
mjw@1623 398 int dev,
mjw@1623 399 int func,
mjw@1623 400 int enable);
mjw@1623 401
mjw@1623 402 int xc_readconsolering(int xc_handle,
kaf24@5327 403 char **pbuffer,
kaf24@9660 404 unsigned int *pnr_chars,
mjw@1623 405 int clear);
mjw@1623 406
kaf24@2787 407 typedef dom0_physinfo_t xc_physinfo_t;
mjw@1623 408 int xc_physinfo(int xc_handle,
mjw@1623 409 xc_physinfo_t *info);
mjw@1623 410
gm281@2236 411 int xc_sched_id(int xc_handle,
gm281@2236 412 int *sched_id);
gm281@2236 413
mjw@1623 414 int xc_domain_setmaxmem(int xc_handle,
kaf24@9660 415 uint32_t domid,
kaf24@3231 416 unsigned int max_memkb);
mjw@1623 417
kaf24@10474 418 int xc_domain_set_time_offset(int xc_handle,
kaf24@10474 419 uint32_t domid,
kaf24@10474 420 int32_t time_offset_seconds);
kaf24@10474 421
cl349@5045 422 int xc_domain_memory_increase_reservation(int xc_handle,
kaf24@9660 423 uint32_t domid,
iap10@6688 424 unsigned long nr_extents,
iap10@6682 425 unsigned int extent_order,
iap10@6688 426 unsigned int address_bits,
kaf24@10276 427 xen_pfn_t *extent_start);
iap10@6688 428
iap10@6688 429 int xc_domain_memory_decrease_reservation(int xc_handle,
kaf24@9660 430 uint32_t domid,
iap10@6688 431 unsigned long nr_extents,
iap10@6688 432 unsigned int extent_order,
kaf24@10276 433 xen_pfn_t *extent_start);
iap10@6688 434
kaf24@8856 435 int xc_domain_memory_populate_physmap(int xc_handle,
kaf24@8856 436 uint32_t domid,
kaf24@8856 437 unsigned long nr_extents,
kaf24@8856 438 unsigned int extent_order,
kaf24@8856 439 unsigned int address_bits,
kaf24@10276 440 xen_pfn_t *extent_start);
kaf24@8856 441
kaf24@8856 442 int xc_domain_translate_gpfn_list(int xc_handle,
kaf24@8856 443 uint32_t domid,
kaf24@8856 444 unsigned long nr_gpfns,
kaf24@10276 445 xen_pfn_t *gpfn_list,
kaf24@10276 446 xen_pfn_t *mfn_list);
kaf24@8856 447
kaf24@7624 448 int xc_domain_ioport_permission(int xc_handle,
kaf24@7624 449 uint32_t domid,
kaf24@8121 450 uint32_t first_port,
kaf24@8121 451 uint32_t nr_ports,
kaf24@8121 452 uint32_t allow_access);
kaf24@7624 453
kaf24@8460 454 int xc_domain_irq_permission(int xc_handle,
kaf24@8460 455 uint32_t domid,
kaf24@8460 456 uint8_t pirq,
kaf24@8460 457 uint8_t allow_access);
kaf24@8460 458
kaf24@8460 459 int xc_domain_iomem_permission(int xc_handle,
kaf24@8460 460 uint32_t domid,
kaf24@8736 461 unsigned long first_mfn,
kaf24@8736 462 unsigned long nr_mfns,
kaf24@8460 463 uint8_t allow_access);
kaf24@8460 464
kaf24@10266 465 unsigned long xc_make_page_below_4G(int xc_handle, uint32_t domid,
kaf24@10266 466 unsigned long mfn);
kaf24@10266 467
kaf24@3231 468 typedef dom0_perfc_desc_t xc_perfc_desc_t;
kaf24@10953 469 typedef dom0_perfc_val_t xc_perfc_val_t;
kaf24@10953 470 /* IMPORTANT: The caller is responsible for mlock()'ing the @desc and @val
kaf24@10953 471 arrays. */
kaf24@3231 472 int xc_perfc_control(int xc_handle,
kaf24@7339 473 uint32_t op,
kaf24@10953 474 xc_perfc_desc_t *desc,
kaf24@10953 475 xc_perfc_val_t *val,
kaf24@10953 476 int *nbr_desc,
kaf24@10953 477 int *nbr_val);
mjw@1623 478
rneugeba@3963 479 /* read/write msr */
rneugeba@3963 480 long long xc_msr_read(int xc_handle, int cpu_mask, int msr);
rneugeba@3963 481 int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
rneugeba@3963 482 unsigned int high);
rneugeba@3963 483
iap10@3443 484 /**
iap10@3443 485 * Memory maps a range within one domain to a local address range. Mappings
iap10@3443 486 * should be unmapped with munmap and should follow the same rules as mmap
rusty@4866 487 * regarding page alignment. Returns NULL on failure.
iap10@3443 488 *
iap10@3443 489 * In Linux, the ring queue for the control channel is accessible by mapping
iap10@3443 490 * the shared_info_frame (from xc_domain_getinfo()) + 2048. The structure
iap10@3443 491 * stored there is of type control_if_t.
iap10@3443 492 *
iap10@3443 493 * @parm xc_handle a handle on an open hypervisor interface
iap10@3443 494 * @parm dom the domain to map memory from
iap10@3443 495 * @parm size the amount of memory to map (in multiples of page size)
iap10@3443 496 * @parm prot same flag as in mmap().
iap10@3443 497 * @parm mfn the frame address to map.
iap10@3443 498 */
kaf24@7339 499 void *xc_map_foreign_range(int xc_handle, uint32_t dom,
iap10@2325 500 int size, int prot,
iap10@2325 501 unsigned long mfn );
iap10@2325 502
kaf24@7339 503 void *xc_map_foreign_batch(int xc_handle, uint32_t dom, int prot,
kaf24@10276 504 xen_pfn_t *arr, int num );
iap10@2325 505
Ian@8435 506 /**
Ian@8435 507 * Translates a virtual address in the context of a given domain and
Ian@8435 508 * vcpu returning the machine page frame number of the associated
Ian@8435 509 * page.
Ian@8435 510 *
Ian@8435 511 * @parm xc_handle a handle on an open hypervisor interface
Ian@8435 512 * @parm dom the domain to perform the translation in
Ian@8435 513 * @parm vcpu the vcpu to perform the translation on
Ian@8435 514 * @parm virt the virtual address to translate
Ian@8435 515 */
Ian@8435 516 unsigned long xc_translate_foreign_address(int xc_handle, uint32_t dom,
kaf24@9221 517 int vcpu, unsigned long long virt);
Ian@8435 518
kaf24@10276 519 int xc_get_pfn_list(int xc_handle, uint32_t domid, xen_pfn_t *pfn_buf,
cl349@4853 520 unsigned long max_pfns);
iap10@3390 521
kaf24@7339 522 int xc_ia64_get_pfn_list(int xc_handle, uint32_t domid,
kaf24@10276 523 xen_pfn_t *pfn_buf,
kaf24@7339 524 unsigned int start_page, unsigned int nr_pages);
kaf24@5914 525
djm@7536 526 int xc_copy_to_domain_page(int xc_handle, uint32_t domid,
kaf24@9221 527 unsigned long dst_pfn, const char *src_page);
djm@7536 528
kaf24@7786 529 int xc_clear_domain_page(int xc_handle, uint32_t domid,
kaf24@7786 530 unsigned long dst_pfn);
kaf24@7786 531
kaf24@7339 532 long xc_get_max_pages(int xc_handle, uint32_t domid);
djm@6856 533
cl349@6389 534 int xc_mmuext_op(int xc_handle, struct mmuext_op *op, unsigned int nr_ops,
kaf24@9221 535 domid_t dom);
cl349@6389 536
kaf24@6468 537 int xc_memory_op(int xc_handle, int cmd, void *arg);
cl349@6389 538
kaf24@7339 539 int xc_get_pfn_type_batch(int xc_handle, uint32_t dom,
kaf24@7339 540 int num, unsigned long *arr);
cl349@6389 541
cl349@6389 542
kaf24@5318 543 /* Get current total pages allocated to a domain. */
kaf24@7339 544 long xc_get_tot_pages(int xc_handle, uint32_t domid);
kaf24@5318 545
kaf24@7566 546
kaf24@7566 547 /*
kaf24@7566 548 * Trace Buffer Operations
kaf24@7566 549 */
kaf24@7566 550
kaf24@7566 551 /**
kaf24@9996 552 * xc_tbuf_enable - enable tracing buffers
kaf24@7566 553 *
kaf24@7566 554 * @parm xc_handle a handle to an open hypervisor interface
kaf24@9996 555 * @parm cnt size of tracing buffers to create (in pages)
kaf24@9996 556 * @parm mfn location to store mfn of the trace buffers to
kaf24@9996 557 * @parm size location to store the size (in bytes) of a trace buffer to
kaf24@9996 558 *
kaf24@9996 559 * Gets the machine address of the trace pointer area and the size of the
kaf24@9996 560 * per CPU buffers.
kaf24@7566 561 */
kaf24@9996 562 int xc_tbuf_enable(int xc_handle, size_t cnt, unsigned long *mfn,
kaf24@9996 563 unsigned long *size);
kaf24@9996 564
kaf24@9996 565 /*
kaf24@9996 566 * Disable tracing buffers.
kaf24@9996 567 */
kaf24@9996 568 int xc_tbuf_disable(int xc_handle);
kaf24@7566 569
kaf24@7566 570 /**
kaf24@7571 571 * This function sets the size of the trace buffers. Setting the size
kaf24@7571 572 * is currently a one-shot operation that may be performed either at boot
kaf24@7571 573 * time or via this interface, not both. The buffer size must be set before
kaf24@7571 574 * enabling tracing.
kaf24@7566 575 *
kaf24@7566 576 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7566 577 * @parm size the size in pages per cpu for the trace buffers
kaf24@7566 578 * @return 0 on success, -1 on failure.
kaf24@7566 579 */
kaf24@9996 580 int xc_tbuf_set_size(int xc_handle, unsigned long size);
kaf24@7566 581
kaf24@7566 582 /**
kaf24@9660 583 * This function retrieves the current size of the trace buffers.
kaf24@7566 584 * Note that the size returned is in terms of bytes, not pages.
kaf24@7566 585
kaf24@7566 586 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7566 587 * @parm size will contain the size in bytes for the trace buffers
kaf24@7566 588 * @return 0 on success, -1 on failure.
kaf24@7566 589 */
kaf24@9996 590 int xc_tbuf_get_size(int xc_handle, unsigned long *size);
kaf24@9907 591
kaf24@9907 592 int xc_tbuf_set_cpu_mask(int xc_handle, uint32_t mask);
kaf24@9907 593
kaf24@9907 594 int xc_tbuf_set_evt_mask(int xc_handle, uint32_t mask);
kaf24@7566 595
kaf24@5318 596 /* Execute a privileged dom0 operation. */
kaf24@5318 597 int xc_dom0_op(int xc_handle, dom0_op_t *op);
cwc22@3985 598
vh249@6549 599 int xc_version(int xc_handle, int cmd, void *arg);
vh249@6549 600
cl349@6389 601 /*
cl349@6389 602 * MMU updates.
cl349@6389 603 */
cl349@6389 604 #define MAX_MMU_UPDATES 1024
cl349@6389 605 struct xc_mmu {
cl349@6389 606 mmu_update_t updates[MAX_MMU_UPDATES];
cl349@6389 607 int idx;
cl349@6389 608 domid_t subject;
cl349@6389 609 };
cl349@6389 610 typedef struct xc_mmu xc_mmu_t;
cl349@6389 611 xc_mmu_t *xc_init_mmu_updates(int xc_handle, domid_t dom);
kaf24@9660 612 int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu,
iap10@6680 613 unsigned long long ptr, unsigned long long val);
cl349@6389 614 int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu);
cl349@6389 615
kaf24@10057 616 int xc_acm_op(int xc_handle, int cmd, void *arg, size_t arg_size);
kaf24@9907 617
kaf24@10355 618 /*
kaf24@10355 619 * Return a handle to the event channel driver, or -1 on failure, in which case
kaf24@10355 620 * errno will be set appropriately.
kaf24@10355 621 */
kaf24@10355 622 int xc_evtchn_open(void);
kaf24@10355 623
kaf24@10355 624 /*
kaf24@10355 625 * Close a handle previously allocated with xc_evtchn_open().
kaf24@10355 626 */
kaf24@10355 627 int xc_evtchn_close(int xce_handle);
kaf24@10355 628
kaf24@10355 629 /*
kaf24@10355 630 * Return an fd that can be select()ed on for further calls to
kaf24@10355 631 * xc_evtchn_pending().
kaf24@10355 632 */
kaf24@10355 633 int xc_evtchn_fd(int xce_handle);
kaf24@10355 634
kaf24@10355 635 /*
kaf24@10355 636 * Notify the given event channel. Returns -1 on failure, in which case
kaf24@10355 637 * errno will be set appropriately.
kaf24@10355 638 */
kaf24@10355 639 int xc_evtchn_notify(int xce_handle, evtchn_port_t port);
kaf24@10355 640
kaf24@10355 641 /*
kaf24@10355 642 * Returns a new event port bound to the remote port for the given domain ID,
kaf24@10355 643 * or -1 on failure, in which case errno will be set appropriately.
kaf24@10355 644 */
kaf24@10355 645 evtchn_port_t xc_evtchn_bind_interdomain(int xce_handle, int domid,
kaf24@10355 646 evtchn_port_t remote_port);
kaf24@10355 647
kaf24@10355 648 /*
kaf24@10355 649 * Unbind the given event channel. Returns -1 on failure, in which case errno
kaf24@10355 650 * will be set appropriately.
kaf24@10355 651 */
kaf24@10355 652 int xc_evtchn_unbind(int xce_handle, evtchn_port_t port);
kaf24@10355 653
kaf24@10355 654 /*
kaf24@10355 655 * Bind an event channel to the given VIRQ. Returns the event channel bound to
kaf24@10355 656 * the VIRQ, or -1 on failure, in which case errno will be set appropriately.
kaf24@10355 657 */
kaf24@10355 658 evtchn_port_t xc_evtchn_bind_virq(int xce_handle, unsigned int virq);
kaf24@10355 659
kaf24@10355 660 /*
kaf24@10355 661 * Return the next event channel to become pending, or -1 on failure, in which
kaf24@10355 662 * case errno will be set appropriately.
kaf24@10355 663 */
kaf24@10355 664 evtchn_port_t xc_evtchn_pending(int xce_handle);
kaf24@10355 665
kaf24@10355 666 /*
kaf24@10355 667 * Unmask the given event channel. Returns -1 on failure, in which case errno
kaf24@10355 668 * will be set appropriately.
kaf24@10355 669 */
kaf24@10355 670 int xc_evtchn_unmask(int xce_handle, evtchn_port_t port);
kaf24@10355 671
cl349@6389 672 #endif