direct-io.hg

annotate tools/libxc/xenctrl.h @ 10474:12aaf4a2486b

[XEN] localtime support for paravirtualized guests

It is quite minimal
in its approach, satisfying the purposes of the paravirtualized
NetWare operating system as well as any others that expect the time
base to be provided in localtime.

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