direct-io.hg

annotate tools/libxc/xenctrl.h @ 7354:52b9aca1916a

New dom0_op to set max vcpus for a domain.

Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
author kaf24@firebug.cl.cam.ac.uk
date Wed Oct 12 16:34:49 2005 +0100 (2005-10-12)
parents b3a255e88810
children bd3268de4145
rev   line source
mjw@1623 1 /******************************************************************************
cl349@6388 2 * xenctrl.h
mjw@1623 3 *
mjw@1623 4 * A library for low-level access to the Xen control interfaces.
mjw@1623 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@3266 12 #include <stdint.h>
kaf24@4719 13 #include <sys/ptrace.h>
kaf24@2821 14 #include <xen/xen.h>
kaf24@2821 15 #include <xen/dom0_ops.h>
vh249@6549 16 #include <xen/version.h>
kaf24@2821 17 #include <xen/event_channel.h>
kaf24@7196 18 #include <xen/sched.h>
kaf24@2821 19 #include <xen/sched_ctl.h>
kaf24@5541 20 #include <xen/acm.h>
kaf24@2787 21
kaf24@5914 22 #ifdef __ia64__
kaf24@5914 23 #define XC_PAGE_SHIFT 14
kaf24@5914 24 #else
kaf24@5914 25 #define XC_PAGE_SHIFT 12
kaf24@5914 26 #endif
kaf24@5914 27 #define XC_PAGE_SIZE (1UL << XC_PAGE_SHIFT)
kaf24@5914 28 #define XC_PAGE_MASK (~(XC_PAGE_SIZE-1))
kaf24@5914 29
kaf24@3961 30 /*
kaf24@3961 31 * DEFINITIONS FOR CPU BARRIERS
kaf24@3961 32 */
kaf24@3961 33
kaf24@3961 34 #if defined(__i386__)
kaf24@3966 35 #define mb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
kaf24@3966 36 #define rmb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
kaf24@3966 37 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
kaf24@3961 38 #elif defined(__x86_64__)
kaf24@3966 39 #define mb() __asm__ __volatile__ ( "mfence" : : : "memory")
kaf24@3966 40 #define rmb() __asm__ __volatile__ ( "lfence" : : : "memory")
kaf24@3966 41 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
kaf24@5914 42 #elif defined(__ia64__)
kaf24@5914 43 /* FIXME */
kaf24@5914 44 #define mb()
kaf24@5914 45 #define rmb()
kaf24@5914 46 #define wmb()
kaf24@3961 47 #else
kaf24@3961 48 #error "Define barriers"
kaf24@3961 49 #endif
kaf24@3961 50
kaf24@3961 51 /*
iap10@3443 52 * INITIALIZATION FUNCTIONS
kaf24@3961 53 */
iap10@3443 54
iap10@3443 55 /**
iap10@3443 56 * This function opens a handle to the hypervisor interface. This function can
iap10@3443 57 * be called multiple times within a single process. Multiple processes can
iap10@3443 58 * have an open hypervisor interface at the same time.
iap10@3443 59 *
iap10@3443 60 * Each call to this function should have a corresponding call to
iap10@3443 61 * xc_interface_close().
iap10@3443 62 *
iap10@3443 63 * This function can fail if the caller does not have superuser permission or
iap10@3443 64 * if a Xen-enabled kernel is not currently running.
iap10@3443 65 *
iap10@3443 66 * @return a handle to the hypervisor interface or -1 on failure
iap10@3443 67 */
mjw@1623 68 int xc_interface_open(void);
iap10@3443 69
iap10@3443 70 /**
iap10@3443 71 * This function closes an open hypervisor interface.
iap10@3443 72 *
iap10@3443 73 * This function can fail if the handle does not represent an open interface or
iap10@3443 74 * if there were problems closing the interface.
iap10@3443 75 *
iap10@3443 76 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 77 * @return 0 on success, -1 otherwise.
iap10@3443 78 */
mjw@1623 79 int xc_interface_close(int xc_handle);
mjw@1623 80
kaf24@3961 81 /*
kaf24@4719 82 * DOMAIN DEBUGGING FUNCTIONS
kaf24@4719 83 */
kaf24@4719 84
kaf24@4719 85 typedef struct xc_core_header {
kaf24@4719 86 unsigned int xch_magic;
kaf24@4719 87 unsigned int xch_nr_vcpus;
kaf24@4719 88 unsigned int xch_nr_pages;
kaf24@4719 89 unsigned int xch_ctxt_offset;
kaf24@4719 90 unsigned int xch_index_offset;
kaf24@4719 91 unsigned int xch_pages_offset;
kaf24@4719 92 } xc_core_header_t;
kaf24@4719 93
kaf24@4719 94
kaf24@6941 95 long xc_ptrace(
kaf24@6941 96 int xc_handle,
kaf24@6941 97 enum __ptrace_request request,
kaf24@7339 98 uint32_t domid,
kaf24@6941 99 long addr,
kaf24@6941 100 long data);
kaf24@4719 101
kaf24@6941 102 long xc_ptrace_core(
kaf24@6941 103 int xc_handle,
kaf24@6941 104 enum __ptrace_request request,
kaf24@7339 105 uint32_t domid,
kaf24@6941 106 long addr,
kaf24@6941 107 long data);
kaf24@4719 108
kaf24@6941 109 int xc_waitdomain(
kaf24@6941 110 int xc_handle,
kaf24@6941 111 int domain,
kaf24@6941 112 int *status,
kaf24@6941 113 int options);
kaf24@4719 114
kaf24@6941 115 int xc_waitdomain_core(
kaf24@6941 116 int xc_handle,
kaf24@6941 117 int domain,
kaf24@6941 118 int *status,
kaf24@6941 119 int options);
kaf24@4719 120
kaf24@4719 121 /*
iap10@3443 122 * DOMAIN MANAGEMENT FUNCTIONS
kaf24@3961 123 */
iap10@3443 124
mjw@1623 125 typedef struct {
kaf24@7339 126 uint32_t domid;
kaf24@7339 127 uint32_t ssidref;
mjw@1623 128 unsigned int dying:1, crashed:1, shutdown:1,
mjw@1623 129 paused:1, blocked:1, running:1;
mjw@1623 130 unsigned int shutdown_reason; /* only meaningful if shutdown==1 */
mjw@1623 131 unsigned long nr_pages;
mjw@1623 132 unsigned long shared_info_frame;
kaf24@7339 133 uint64_t cpu_time;
mjw@1623 134 unsigned long max_memkb;
cl349@4853 135 unsigned int vcpus;
kaf24@7339 136 int32_t vcpu_to_cpu[MAX_VIRT_CPUS];
cl349@4845 137 cpumap_t cpumap[MAX_VIRT_CPUS];
mjw@1623 138 } xc_dominfo_t;
mjw@1623 139
kaf24@2787 140 typedef dom0_getdomaininfo_t xc_domaininfo_t;
mjw@1623 141 int xc_domain_create(int xc_handle,
kaf24@7339 142 uint32_t ssidref,
kaf24@7339 143 uint32_t *pdomid);
iap10@3443 144
kaf24@4719 145
kaf24@4719 146 int xc_domain_dumpcore(int xc_handle,
kaf24@7339 147 uint32_t domid,
cl349@4853 148 const char *corename);
kaf24@4719 149
kaf24@7354 150 /*
kaf24@7354 151 * This function sets the maximum number vcpus that a domian may create.
kaf24@7354 152 *
kaf24@7354 153 * @parm xc_handle a handle to an open hypervisor interface.
kaf24@7354 154 * @parm domid the domain id in which vcpus are to be created.
kaf24@7354 155 * @parm max the maximum number of vcpus that the domain may create.
kaf24@7354 156 * @return 0 on success, -1 on failure.
kaf24@7354 157 */
kaf24@7354 158 int xc_domain_max_vcpus(int xc_handle,
kaf24@7354 159 uint32_t domid,
kaf24@7354 160 unsigned int max);
kaf24@4719 161
iap10@3443 162 /**
iap10@3443 163 * This function pauses a domain. A paused domain still exists in memory
iap10@3443 164 * however it does not receive any timeslices from the hypervisor.
iap10@3443 165 *
iap10@3443 166 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 167 * @parm domid the domain id to pause
iap10@3443 168 * @return 0 on success, -1 on failure.
iap10@3443 169 */
mjw@1623 170 int xc_domain_pause(int xc_handle,
kaf24@7339 171 uint32_t domid);
iap10@3443 172 /**
iap10@3443 173 * This function unpauses a domain. The domain should have been previously
iap10@3443 174 * paused.
iap10@3443 175 *
iap10@3443 176 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 177 * @parm domid the domain id to unpause
iap10@3443 178 * return 0 on success, -1 on failure
iap10@3443 179 */
mjw@1623 180 int xc_domain_unpause(int xc_handle,
kaf24@7339 181 uint32_t domid);
iap10@3443 182
iap10@3443 183 /**
iap10@3443 184 * This function will destroy a domain. Destroying a domain removes the domain
iap10@3443 185 * completely from memory. This function should be called after sending the
iap10@3443 186 * domain a SHUTDOWN control message to free up the domain resources.
iap10@3443 187 *
iap10@3443 188 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 189 * @parm domid the domain id to destroy
iap10@3443 190 * @return 0 on success, -1 on failure
iap10@3443 191 */
mjw@1623 192 int xc_domain_destroy(int xc_handle,
kaf24@7339 193 uint32_t domid);
mjw@1623 194 int xc_domain_pincpu(int xc_handle,
kaf24@7339 195 uint32_t domid,
cl349@4845 196 int vcpu,
cl349@4845 197 cpumap_t *cpumap);
iap10@3443 198 /**
dsteklof@5498 199 * This function will return information about one or more domains. It is
dsteklof@5498 200 * designed to iterate over the list of domains. If a single domain is
dsteklof@5498 201 * requested, this function will return the next domain in the list - if
dsteklof@5498 202 * one exists. It is, therefore, important in this case to make sure the
dsteklof@5498 203 * domain requested was the one returned.
iap10@3443 204 *
iap10@3443 205 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 206 * @parm first_domid the first domain to enumerate information from. Domains
iap10@3443 207 * are currently enumerate in order of creation.
iap10@3443 208 * @parm max_doms the number of elements in info
iap10@3443 209 * @parm info an array of max_doms size that will contain the information for
iap10@3443 210 * the enumerated domains.
iap10@3443 211 * @return the number of domains enumerated or -1 on error
iap10@3443 212 */
mjw@1623 213 int xc_domain_getinfo(int xc_handle,
kaf24@7339 214 uint32_t first_domid,
mjw@1623 215 unsigned int max_doms,
mjw@1623 216 xc_dominfo_t *info);
iap10@3443 217
iap10@3443 218 /**
kaf24@5699 219 * This function will return information about one or more domains, using a
kaf24@5699 220 * single hypercall. The domain information will be stored into the supplied
kaf24@5699 221 * array of xc_domaininfo_t structures.
kaf24@5699 222 *
kaf24@5699 223 * @parm xc_handle a handle to an open hypervisor interface
kaf24@5699 224 * @parm first_domain the first domain to enumerate information from.
kaf24@5699 225 * Domains are currently enumerate in order of creation.
kaf24@5699 226 * @parm max_domains the number of elements in info
kaf24@5699 227 * @parm info an array of max_doms size that will contain the information for
kaf24@5699 228 * the enumerated domains.
kaf24@5699 229 * @return the number of domains enumerated or -1 on error
kaf24@5699 230 */
kaf24@5699 231 int xc_domain_getinfolist(int xc_handle,
kaf24@7339 232 uint32_t first_domain,
kaf24@5699 233 unsigned int max_domains,
kaf24@5699 234 xc_domaininfo_t *info);
kaf24@5699 235
kaf24@5699 236 /**
iap10@3443 237 * This function returns information about one domain. This information is
iap10@3443 238 * more detailed than the information from xc_domain_getinfo().
iap10@3443 239 *
iap10@3443 240 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 241 * @parm domid the domain to get information from
iap10@3443 242 * @parm info a pointer to an xc_domaininfo_t to store the domain information
iap10@3443 243 * @parm ctxt a pointer to a structure to store the execution context of the
iap10@3443 244 * domain
iap10@3443 245 * @return 0 on success, -1 on failure
iap10@3443 246 */
cl349@4849 247 int xc_domain_get_vcpu_context(int xc_handle,
kaf24@7339 248 uint32_t domid,
kaf24@7339 249 uint32_t vcpu,
cl349@4853 250 vcpu_guest_context_t *ctxt);
cl349@4849 251
gm281@2236 252 int xc_domain_setcpuweight(int xc_handle,
kaf24@7339 253 uint32_t domid,
gm281@2236 254 float weight);
kaf24@2787 255 long long xc_domain_get_cpu_usage(int xc_handle,
mafetter@3435 256 domid_t domid,
mafetter@3435 257 int vcpu);
mjw@1623 258
kaf24@2787 259
kaf24@2787 260 typedef dom0_shadow_control_stats_t xc_shadow_control_stats_t;
mjw@1623 261 int xc_shadow_control(int xc_handle,
kaf24@7339 262 uint32_t domid,
mjw@1623 263 unsigned int sop,
mjw@1623 264 unsigned long *dirty_bitmap,
mjw@1623 265 unsigned long pages,
mjw@1623 266 xc_shadow_control_stats_t *stats);
mjw@1623 267
mjw@1623 268 int xc_bvtsched_global_set(int xc_handle,
mjw@1623 269 unsigned long ctx_allow);
mjw@1623 270
mjw@1623 271 int xc_bvtsched_domain_set(int xc_handle,
kaf24@7339 272 uint32_t domid,
kaf24@7339 273 uint32_t mcuadv,
gm281@2058 274 int warpback,
kaf24@7339 275 int32_t warpvalue,
gm281@2058 276 long long warpl,
gm281@2058 277 long long warpu);
mjw@1623 278
mjw@1623 279 int xc_bvtsched_global_get(int xc_handle,
mjw@1623 280 unsigned long *ctx_allow);
mjw@1623 281
mjw@1623 282 int xc_bvtsched_domain_get(int xc_handle,
kaf24@7339 283 uint32_t domid,
kaf24@7339 284 uint32_t *mcuadv,
gm281@2058 285 int *warpback,
kaf24@7339 286 int32_t *warpvalue,
gm281@2058 287 long long *warpl,
gm281@2058 288 long long *warpu);
mjw@1623 289
sd386@3449 290 int xc_sedf_domain_set(int xc_handle,
kaf24@7339 291 uint32_t domid,
kaf24@7339 292 uint64_t period, uint64_t slice,
kaf24@7339 293 uint64_t latency, uint16_t extratime,
kaf24@7339 294 uint16_t weight);
sd386@3449 295
sd386@3449 296 int xc_sedf_domain_get(int xc_handle,
kaf24@7339 297 uint32_t domid,
kaf24@7339 298 uint64_t* period, uint64_t *slice,
kaf24@7339 299 uint64_t *latency, uint16_t *extratime,
kaf24@7339 300 uint16_t *weight);
sd386@3449 301
kaf24@2787 302 typedef evtchn_status_t xc_evtchn_status_t;
iap10@3443 303
kaf24@3961 304 /*
iap10@3443 305 * EVENT CHANNEL FUNCTIONS
kaf24@3961 306 */
iap10@3443 307
iap10@3443 308 /**
iap10@3443 309 * This function allocates an unbound port. Ports are named endpoints used for
iap10@3443 310 * interdomain communication. This function is most useful in opening a
iap10@3443 311 * well-known port within a domain to receive events on.
iap10@3443 312 *
iap10@3443 313 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7223 314 * @parm dom the ID of the local domain (the 'allocatee')
kaf24@7237 315 * @parm remote_dom the ID of the domain who will later bind
kaf24@7237 316 * @return allocated port (in @dom) on success, -1 on failure
iap10@3443 317 */
kaf24@2713 318 int xc_evtchn_alloc_unbound(int xc_handle,
kaf24@7339 319 uint32_t dom,
kaf24@7339 320 uint32_t remote_dom);
iap10@3443 321
mjw@1623 322 int xc_evtchn_status(int xc_handle,
kaf24@7339 323 uint32_t dom, /* may be DOMID_SELF */
mjw@1623 324 int port,
mjw@1623 325 xc_evtchn_status_t *status);
mjw@1623 326
mjw@1623 327 int xc_physdev_pci_access_modify(int xc_handle,
kaf24@7339 328 uint32_t domid,
mjw@1623 329 int bus,
mjw@1623 330 int dev,
mjw@1623 331 int func,
mjw@1623 332 int enable);
mjw@1623 333
mjw@1623 334 int xc_readconsolering(int xc_handle,
kaf24@5327 335 char **pbuffer,
kaf24@5327 336 unsigned int *pnr_chars,
mjw@1623 337 int clear);
mjw@1623 338
kaf24@2787 339 typedef dom0_physinfo_t xc_physinfo_t;
mjw@1623 340 int xc_physinfo(int xc_handle,
mjw@1623 341 xc_physinfo_t *info);
mjw@1623 342
gm281@2236 343 int xc_sched_id(int xc_handle,
gm281@2236 344 int *sched_id);
gm281@2236 345
mjw@1623 346 int xc_domain_setmaxmem(int xc_handle,
kaf24@7339 347 uint32_t domid,
kaf24@3231 348 unsigned int max_memkb);
mjw@1623 349
cl349@5045 350 int xc_domain_memory_increase_reservation(int xc_handle,
kaf24@7339 351 uint32_t domid,
iap10@6688 352 unsigned long nr_extents,
iap10@6682 353 unsigned int extent_order,
iap10@6688 354 unsigned int address_bits,
iap10@6688 355 unsigned long *extent_start);
iap10@6688 356
iap10@6688 357 int xc_domain_memory_decrease_reservation(int xc_handle,
kaf24@7339 358 uint32_t domid,
iap10@6688 359 unsigned long nr_extents,
iap10@6688 360 unsigned int extent_order,
iap10@6688 361 unsigned long *extent_start);
iap10@6688 362
kaf24@7339 363 unsigned long xc_make_page_below_4G(int xc_handle, uint32_t domid,
iap10@6688 364 unsigned long mfn);
cl349@5045 365
kaf24@3231 366 typedef dom0_perfc_desc_t xc_perfc_desc_t;
kaf24@3231 367 /* IMPORTANT: The caller is responsible for mlock()'ing the @desc array. */
kaf24@3231 368 int xc_perfc_control(int xc_handle,
kaf24@7339 369 uint32_t op,
kaf24@3231 370 xc_perfc_desc_t *desc);
mjw@1623 371
rneugeba@3963 372 /* read/write msr */
rneugeba@3963 373 long long xc_msr_read(int xc_handle, int cpu_mask, int msr);
rneugeba@3963 374 int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
rneugeba@3963 375 unsigned int high);
rneugeba@3963 376
iap10@3443 377 /**
iap10@3443 378 * Memory maps a range within one domain to a local address range. Mappings
iap10@3443 379 * should be unmapped with munmap and should follow the same rules as mmap
rusty@4866 380 * regarding page alignment. Returns NULL on failure.
iap10@3443 381 *
iap10@3443 382 * In Linux, the ring queue for the control channel is accessible by mapping
iap10@3443 383 * the shared_info_frame (from xc_domain_getinfo()) + 2048. The structure
iap10@3443 384 * stored there is of type control_if_t.
iap10@3443 385 *
iap10@3443 386 * @parm xc_handle a handle on an open hypervisor interface
iap10@3443 387 * @parm dom the domain to map memory from
iap10@3443 388 * @parm size the amount of memory to map (in multiples of page size)
iap10@3443 389 * @parm prot same flag as in mmap().
iap10@3443 390 * @parm mfn the frame address to map.
iap10@3443 391 */
kaf24@7339 392 void *xc_map_foreign_range(int xc_handle, uint32_t dom,
iap10@2325 393 int size, int prot,
iap10@2325 394 unsigned long mfn );
iap10@2325 395
kaf24@7339 396 void *xc_map_foreign_batch(int xc_handle, uint32_t dom, int prot,
iap10@2325 397 unsigned long *arr, int num );
iap10@2325 398
kaf24@7339 399 int xc_get_pfn_list(int xc_handle, uint32_t domid, unsigned long *pfn_buf,
cl349@4853 400 unsigned long max_pfns);
iap10@3390 401
kaf24@7339 402 int xc_ia64_get_pfn_list(int xc_handle, uint32_t domid,
kaf24@7339 403 unsigned long *pfn_buf,
kaf24@7339 404 unsigned int start_page, unsigned int nr_pages);
kaf24@5914 405
kaf24@7339 406 long xc_get_max_pages(int xc_handle, uint32_t domid);
djm@6856 407
cl349@6389 408 int xc_mmuext_op(int xc_handle, struct mmuext_op *op, unsigned int nr_ops,
cl349@6389 409 domid_t dom);
cl349@6389 410
kaf24@6468 411 int xc_memory_op(int xc_handle, int cmd, void *arg);
cl349@6389 412
kaf24@7339 413 int xc_get_pfn_type_batch(int xc_handle, uint32_t dom,
kaf24@7339 414 int num, unsigned long *arr);
cl349@6389 415
cl349@6389 416
cwc22@3985 417 /*\
cwc22@3985 418 * GRANT TABLE FUNCTIONS
cwc22@3985 419 \*/
cwc22@3985 420
cwc22@3985 421 /**
cwc22@3985 422 * This function opens a handle to the more restricted grant table hypervisor
cwc22@3985 423 * interface. This may be used where the standard interface is not
cwc22@3985 424 * available because the domain is not privileged.
cwc22@3985 425 * This function can be called multiple times within a single process.
cwc22@3985 426 * Multiple processes can have an open hypervisor interface at the same time.
cwc22@3985 427 *
cwc22@3985 428 * Each call to this function should have a corresponding call to
cwc22@3985 429 * xc_grant_interface_close().
cwc22@3985 430 *
cwc22@3985 431 * This function can fail if a Xen-enabled kernel is not currently running.
cwc22@3985 432 *
cwc22@3985 433 * @return a handle to the hypervisor grant table interface or -1 on failure
cwc22@3985 434 */
cwc22@3985 435 int xc_grant_interface_open(void);
cwc22@3985 436
cwc22@3985 437 /**
cwc22@3985 438 * This function closes an open grant table hypervisor interface.
cwc22@3985 439 *
cwc22@3985 440 * This function can fail if the handle does not represent an open interface or
cwc22@3985 441 * if there were problems closing the interface.
cwc22@3985 442 *
cwc22@3985 443 * @parm xc_handle a handle to an open grant table hypervisor interface
cwc22@3985 444 * @return 0 on success, -1 otherwise.
cwc22@3985 445 */
cwc22@3985 446 int xc_grant_interface_close(int xc_handle);
cwc22@3985 447
kaf24@7339 448 int xc_gnttab_map_grant_ref(int xc_handle,
kaf24@7339 449 uint64_t host_virt_addr,
kaf24@7339 450 uint32_t dom,
kaf24@7339 451 uint16_t ref,
kaf24@7339 452 uint16_t flags,
kaf24@7339 453 int16_t *handle,
kaf24@7339 454 uint64_t *dev_bus_addr);
cwc22@3985 455
kaf24@6281 456 int xc_gnttab_unmap_grant_ref(int xc_handle,
kaf24@7339 457 uint64_t host_virt_addr,
kaf24@7339 458 uint64_t dev_bus_addr,
kaf24@7339 459 uint16_t handle,
kaf24@7339 460 int16_t *status);
cwc22@3985 461
cwc22@3985 462 int xc_gnttab_setup_table(int xc_handle,
kaf24@7339 463 uint32_t dom,
kaf24@7339 464 uint16_t nr_frames,
kaf24@7339 465 int16_t *status,
kaf24@6281 466 unsigned long **frame_list);
cwc22@3985 467
cwc22@3985 468 /* Grant debug builds only: */
cwc22@3985 469 int xc_gnttab_dump_table(int xc_handle,
kaf24@7339 470 uint32_t dom,
kaf24@7339 471 int16_t *status);
cwc22@3985 472
kaf24@5318 473 /* Get current total pages allocated to a domain. */
kaf24@7339 474 long xc_get_tot_pages(int xc_handle, uint32_t domid);
kaf24@5318 475
kaf24@5318 476 /* Execute a privileged dom0 operation. */
kaf24@5318 477 int xc_dom0_op(int xc_handle, dom0_op_t *op);
cwc22@3985 478
vh249@6549 479 int xc_version(int xc_handle, int cmd, void *arg);
vh249@6549 480
cl349@5748 481 /* Initializes the store (for dom0)
cl349@5748 482 remote_port should be the remote end of a bound interdomain channel between
cl349@5748 483 the store and dom0.
cl349@5748 484
cl349@5748 485 This function returns a shared frame that should be passed to
cl349@5748 486 xs_introduce_domain
cl349@5748 487 */
cl349@5748 488 long xc_init_store(int xc_handle, int remote_port);
cl349@5748 489
cl349@6389 490 /*
cl349@6389 491 * MMU updates.
cl349@6389 492 */
cl349@6389 493 #define MAX_MMU_UPDATES 1024
cl349@6389 494 struct xc_mmu {
cl349@6389 495 mmu_update_t updates[MAX_MMU_UPDATES];
cl349@6389 496 int idx;
cl349@6389 497 domid_t subject;
cl349@6389 498 };
cl349@6389 499 typedef struct xc_mmu xc_mmu_t;
cl349@6389 500 xc_mmu_t *xc_init_mmu_updates(int xc_handle, domid_t dom);
cl349@6389 501 int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu,
iap10@6680 502 unsigned long long ptr, unsigned long long val);
cl349@6389 503 int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu);
cl349@6389 504
cl349@6389 505 #endif