direct-io.hg

annotate tools/libxc/xenctrl.h @ 9145:9de50910defd

libxc: Verify Magic number when reading dump

The xen core files record a magic number,
but when they are loaded it isn't checked.
This patch resolves this.

Signed-Off-By: Horms <horms@verge.net.au>
author kaf24@firebug.cl.cam.ac.uk
date Mon Mar 06 15:04:18 2006 +0100 (2006-03-06)
parents 8ed131452f27
children a1fcee3b2abe
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>
smh22@7702 20 #include <xen/memory.h>
kaf24@5541 21 #include <xen/acm.h>
kaf24@2787 22
kaf24@5914 23 #ifdef __ia64__
kaf24@5914 24 #define XC_PAGE_SHIFT 14
kaf24@5914 25 #else
kaf24@5914 26 #define XC_PAGE_SHIFT 12
kaf24@5914 27 #endif
kaf24@5914 28 #define XC_PAGE_SIZE (1UL << XC_PAGE_SHIFT)
kaf24@5914 29 #define XC_PAGE_MASK (~(XC_PAGE_SIZE-1))
kaf24@5914 30
kaf24@3961 31 /*
kaf24@3961 32 * DEFINITIONS FOR CPU BARRIERS
kaf24@3961 33 */
kaf24@3961 34
kaf24@3961 35 #if defined(__i386__)
kaf24@3966 36 #define mb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
kaf24@3966 37 #define rmb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
kaf24@3966 38 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
kaf24@3961 39 #elif defined(__x86_64__)
kaf24@3966 40 #define mb() __asm__ __volatile__ ( "mfence" : : : "memory")
kaf24@3966 41 #define rmb() __asm__ __volatile__ ( "lfence" : : : "memory")
kaf24@3966 42 #define wmb() __asm__ __volatile__ ( "" : : : "memory")
kaf24@5914 43 #elif defined(__ia64__)
kaf24@5914 44 /* FIXME */
kaf24@5914 45 #define mb()
kaf24@5914 46 #define rmb()
kaf24@5914 47 #define wmb()
kaf24@3961 48 #else
kaf24@3961 49 #error "Define barriers"
kaf24@3961 50 #endif
kaf24@3961 51
kaf24@3961 52 /*
iap10@3443 53 * INITIALIZATION FUNCTIONS
kaf24@3961 54 */
iap10@3443 55
iap10@3443 56 /**
iap10@3443 57 * This function opens a handle to the hypervisor interface. This function can
iap10@3443 58 * be called multiple times within a single process. Multiple processes can
iap10@3443 59 * have an open hypervisor interface at the same time.
iap10@3443 60 *
iap10@3443 61 * Each call to this function should have a corresponding call to
iap10@3443 62 * xc_interface_close().
iap10@3443 63 *
iap10@3443 64 * This function can fail if the caller does not have superuser permission or
iap10@3443 65 * if a Xen-enabled kernel is not currently running.
iap10@3443 66 *
iap10@3443 67 * @return a handle to the hypervisor interface or -1 on failure
iap10@3443 68 */
mjw@1623 69 int xc_interface_open(void);
iap10@3443 70
iap10@3443 71 /**
iap10@3443 72 * This function closes an open hypervisor interface.
iap10@3443 73 *
iap10@3443 74 * This function can fail if the handle does not represent an open interface or
iap10@3443 75 * if there were problems closing the interface.
iap10@3443 76 *
iap10@3443 77 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 78 * @return 0 on success, -1 otherwise.
iap10@3443 79 */
mjw@1623 80 int xc_interface_close(int xc_handle);
mjw@1623 81
kaf24@3961 82 /*
kaf24@4719 83 * DOMAIN DEBUGGING FUNCTIONS
kaf24@4719 84 */
kaf24@4719 85
kaf24@4719 86 typedef struct xc_core_header {
kaf24@4719 87 unsigned int xch_magic;
kaf24@4719 88 unsigned int xch_nr_vcpus;
kaf24@4719 89 unsigned int xch_nr_pages;
kaf24@4719 90 unsigned int xch_ctxt_offset;
kaf24@4719 91 unsigned int xch_index_offset;
kaf24@4719 92 unsigned int xch_pages_offset;
kaf24@4719 93 } xc_core_header_t;
kaf24@4719 94
kaf24@9145 95 #define XC_CORE_MAGIC 0xF00FEBED
kaf24@4719 96
kaf24@6941 97 long xc_ptrace_core(
kaf24@6941 98 int xc_handle,
kaf24@6941 99 enum __ptrace_request request,
kaf24@7339 100 uint32_t domid,
kaf24@6941 101 long addr,
kaf24@9143 102 long data,
kaf24@9143 103 vcpu_guest_context_t *ctxt);
kaf24@9143 104 void * map_domain_va_core(
kaf24@9143 105 unsigned long domfd,
kaf24@9143 106 int cpu,
kaf24@9143 107 void *guest_va,
kaf24@9143 108 vcpu_guest_context_t *ctxt);
kaf24@6941 109 int xc_waitdomain_core(
kaf24@6941 110 int xc_handle,
kaf24@6941 111 int domain,
kaf24@6941 112 int *status,
kaf24@9143 113 int options,
kaf24@9143 114 vcpu_guest_context_t *ctxt);
kaf24@4719 115
kaf24@4719 116 /*
iap10@3443 117 * DOMAIN MANAGEMENT FUNCTIONS
kaf24@3961 118 */
iap10@3443 119
mjw@1623 120 typedef struct {
kaf24@7378 121 uint32_t domid;
kaf24@7378 122 uint32_t ssidref;
mjw@1623 123 unsigned int dying:1, crashed:1, shutdown:1,
mjw@1623 124 paused:1, blocked:1, running:1;
mjw@1623 125 unsigned int shutdown_reason; /* only meaningful if shutdown==1 */
mjw@1623 126 unsigned long nr_pages;
mjw@1623 127 unsigned long shared_info_frame;
kaf24@7378 128 uint64_t cpu_time;
mjw@1623 129 unsigned long max_memkb;
kaf24@7397 130 unsigned int nr_online_vcpus;
kaf24@7397 131 unsigned int max_vcpu_id;
kaf24@7378 132 xen_domain_handle_t handle;
mjw@1623 133 } xc_dominfo_t;
mjw@1623 134
kaf24@2787 135 typedef dom0_getdomaininfo_t xc_domaininfo_t;
mjw@1623 136 int xc_domain_create(int xc_handle,
kaf24@7339 137 uint32_t ssidref,
kaf24@7378 138 xen_domain_handle_t handle,
kaf24@7339 139 uint32_t *pdomid);
iap10@3443 140
kaf24@4719 141
kaf24@4719 142 int xc_domain_dumpcore(int xc_handle,
kaf24@7339 143 uint32_t domid,
cl349@4853 144 const char *corename);
kaf24@4719 145
kaf24@7354 146 /*
kaf24@7566 147 * This function sets the maximum number of vcpus that a domain may create.
kaf24@7354 148 *
kaf24@7354 149 * @parm xc_handle a handle to an open hypervisor interface.
kaf24@7354 150 * @parm domid the domain id in which vcpus are to be created.
kaf24@7354 151 * @parm max the maximum number of vcpus that the domain may create.
kaf24@7354 152 * @return 0 on success, -1 on failure.
kaf24@7354 153 */
kaf24@7354 154 int xc_domain_max_vcpus(int xc_handle,
kaf24@7354 155 uint32_t domid,
kaf24@7354 156 unsigned int max);
kaf24@4719 157
iap10@3443 158 /**
iap10@3443 159 * This function pauses a domain. A paused domain still exists in memory
iap10@3443 160 * however it does not receive any timeslices from the hypervisor.
iap10@3443 161 *
iap10@3443 162 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 163 * @parm domid the domain id to pause
iap10@3443 164 * @return 0 on success, -1 on failure.
iap10@3443 165 */
mjw@1623 166 int xc_domain_pause(int xc_handle,
kaf24@7339 167 uint32_t domid);
iap10@3443 168 /**
iap10@3443 169 * This function unpauses a domain. The domain should have been previously
iap10@3443 170 * paused.
iap10@3443 171 *
iap10@3443 172 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 173 * @parm domid the domain id to unpause
iap10@3443 174 * return 0 on success, -1 on failure
iap10@3443 175 */
mjw@1623 176 int xc_domain_unpause(int xc_handle,
kaf24@7339 177 uint32_t domid);
iap10@3443 178
iap10@3443 179 /**
iap10@3443 180 * This function will destroy a domain. Destroying a domain removes the domain
iap10@3443 181 * completely from memory. This function should be called after sending the
iap10@3443 182 * domain a SHUTDOWN control message to free up the domain resources.
iap10@3443 183 *
iap10@3443 184 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 185 * @parm domid the domain id to destroy
iap10@3443 186 * @return 0 on success, -1 on failure
iap10@3443 187 */
mjw@1623 188 int xc_domain_destroy(int xc_handle,
kaf24@7339 189 uint32_t domid);
kaf24@8500 190
kaf24@8500 191 int xc_vcpu_setaffinity(int xc_handle,
kaf24@8500 192 uint32_t domid,
kaf24@8500 193 int vcpu,
kaf24@8500 194 cpumap_t cpumap);
kaf24@7378 195
iap10@3443 196 /**
dsteklof@5498 197 * This function will return information about one or more domains. It is
dsteklof@5498 198 * designed to iterate over the list of domains. If a single domain is
dsteklof@5498 199 * requested, this function will return the next domain in the list - if
dsteklof@5498 200 * one exists. It is, therefore, important in this case to make sure the
dsteklof@5498 201 * domain requested was the one returned.
iap10@3443 202 *
iap10@3443 203 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 204 * @parm first_domid the first domain to enumerate information from. Domains
iap10@3443 205 * are currently enumerate in order of creation.
iap10@3443 206 * @parm max_doms the number of elements in info
iap10@3443 207 * @parm info an array of max_doms size that will contain the information for
iap10@3443 208 * the enumerated domains.
iap10@3443 209 * @return the number of domains enumerated or -1 on error
iap10@3443 210 */
mjw@1623 211 int xc_domain_getinfo(int xc_handle,
kaf24@7339 212 uint32_t first_domid,
mjw@1623 213 unsigned int max_doms,
mjw@1623 214 xc_dominfo_t *info);
iap10@3443 215
kaf24@8381 216
kaf24@8381 217 /**
kaf24@8500 218 * This function will set the execution context for the specified vcpu.
kaf24@8381 219 *
kaf24@8381 220 * @parm xc_handle a handle to an open hypervisor interface
kaf24@8381 221 * @parm domid the domain to set the vcpu context for
kaf24@8381 222 * @parm vcpu the vcpu number for the context
kaf24@8381 223 * @parm ctxt pointer to the the cpu context with the values to set
kaf24@8381 224 * @return the number of domains enumerated or -1 on error
kaf24@8381 225 */
kaf24@8500 226 int xc_vcpu_setcontext(int xc_handle,
kaf24@8500 227 uint32_t domid,
kaf24@8500 228 uint32_t vcpu,
kaf24@8500 229 vcpu_guest_context_t *ctxt);
iap10@3443 230 /**
kaf24@5699 231 * This function will return information about one or more domains, using a
kaf24@5699 232 * single hypercall. The domain information will be stored into the supplied
kaf24@5699 233 * array of xc_domaininfo_t structures.
kaf24@5699 234 *
kaf24@5699 235 * @parm xc_handle a handle to an open hypervisor interface
kaf24@5699 236 * @parm first_domain the first domain to enumerate information from.
kaf24@5699 237 * Domains are currently enumerate in order of creation.
kaf24@5699 238 * @parm max_domains the number of elements in info
kaf24@5699 239 * @parm info an array of max_doms size that will contain the information for
kaf24@5699 240 * the enumerated domains.
kaf24@5699 241 * @return the number of domains enumerated or -1 on error
kaf24@5699 242 */
kaf24@5699 243 int xc_domain_getinfolist(int xc_handle,
kaf24@7339 244 uint32_t first_domain,
kaf24@5699 245 unsigned int max_domains,
kaf24@5699 246 xc_domaininfo_t *info);
kaf24@5699 247
kaf24@5699 248 /**
emellor@7404 249 * This function returns information about the execution context of a
emellor@7404 250 * particular vcpu of a domain.
iap10@3443 251 *
iap10@3443 252 * @parm xc_handle a handle to an open hypervisor interface
iap10@3443 253 * @parm domid the domain to get information from
emellor@7404 254 * @parm vcpu the vcpu number
iap10@3443 255 * @parm ctxt a pointer to a structure to store the execution context of the
iap10@3443 256 * domain
iap10@3443 257 * @return 0 on success, -1 on failure
iap10@3443 258 */
kaf24@8500 259 int xc_vcpu_getcontext(int xc_handle,
kaf24@7339 260 uint32_t domid,
kaf24@7339 261 uint32_t vcpu,
cl349@4853 262 vcpu_guest_context_t *ctxt);
cl349@4849 263
kaf24@7397 264 typedef dom0_getvcpuinfo_t xc_vcpuinfo_t;
kaf24@8500 265 int xc_vcpu_getinfo(int xc_handle,
kaf24@8500 266 uint32_t domid,
kaf24@8500 267 uint32_t vcpu,
kaf24@8500 268 xc_vcpuinfo_t *info);
kaf24@7397 269
gm281@2236 270 int xc_domain_setcpuweight(int xc_handle,
kaf24@7339 271 uint32_t domid,
gm281@2236 272 float weight);
kaf24@2787 273 long long xc_domain_get_cpu_usage(int xc_handle,
mafetter@3435 274 domid_t domid,
mafetter@3435 275 int vcpu);
mjw@1623 276
kaf24@7379 277 int xc_domain_sethandle(int xc_handle, uint32_t domid,
kaf24@7379 278 xen_domain_handle_t handle);
kaf24@2787 279
kaf24@2787 280 typedef dom0_shadow_control_stats_t xc_shadow_control_stats_t;
mjw@1623 281 int xc_shadow_control(int xc_handle,
kaf24@7339 282 uint32_t domid,
mjw@1623 283 unsigned int sop,
mjw@1623 284 unsigned long *dirty_bitmap,
mjw@1623 285 unsigned long pages,
mjw@1623 286 xc_shadow_control_stats_t *stats);
mjw@1623 287
mjw@1623 288 int xc_bvtsched_global_set(int xc_handle,
mjw@1623 289 unsigned long ctx_allow);
mjw@1623 290
mjw@1623 291 int xc_bvtsched_domain_set(int xc_handle,
kaf24@7339 292 uint32_t domid,
kaf24@7339 293 uint32_t mcuadv,
gm281@2058 294 int warpback,
kaf24@7339 295 int32_t warpvalue,
gm281@2058 296 long long warpl,
gm281@2058 297 long long warpu);
mjw@1623 298
mjw@1623 299 int xc_bvtsched_global_get(int xc_handle,
mjw@1623 300 unsigned long *ctx_allow);
mjw@1623 301
mjw@1623 302 int xc_bvtsched_domain_get(int xc_handle,
kaf24@7339 303 uint32_t domid,
kaf24@7339 304 uint32_t *mcuadv,
gm281@2058 305 int *warpback,
kaf24@7339 306 int32_t *warpvalue,
gm281@2058 307 long long *warpl,
gm281@2058 308 long long *warpu);
mjw@1623 309
sd386@3449 310 int xc_sedf_domain_set(int xc_handle,
kaf24@7339 311 uint32_t domid,
kaf24@7339 312 uint64_t period, uint64_t slice,
kaf24@7339 313 uint64_t latency, uint16_t extratime,
kaf24@7339 314 uint16_t weight);
sd386@3449 315
sd386@3449 316 int xc_sedf_domain_get(int xc_handle,
kaf24@7339 317 uint32_t domid,
kaf24@7339 318 uint64_t* period, uint64_t *slice,
kaf24@7339 319 uint64_t *latency, uint16_t *extratime,
kaf24@7339 320 uint16_t *weight);
sd386@3449 321
kaf24@2787 322 typedef evtchn_status_t xc_evtchn_status_t;
iap10@3443 323
kaf24@3961 324 /*
iap10@3443 325 * EVENT CHANNEL FUNCTIONS
kaf24@3961 326 */
iap10@3443 327
iap10@3443 328 /**
iap10@3443 329 * This function allocates an unbound port. Ports are named endpoints used for
iap10@3443 330 * interdomain communication. This function is most useful in opening a
iap10@3443 331 * well-known port within a domain to receive events on.
iap10@3443 332 *
iap10@3443 333 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7223 334 * @parm dom the ID of the local domain (the 'allocatee')
kaf24@7237 335 * @parm remote_dom the ID of the domain who will later bind
kaf24@7237 336 * @return allocated port (in @dom) on success, -1 on failure
iap10@3443 337 */
kaf24@2713 338 int xc_evtchn_alloc_unbound(int xc_handle,
kaf24@7339 339 uint32_t dom,
kaf24@7339 340 uint32_t remote_dom);
iap10@3443 341
mjw@1623 342 int xc_evtchn_status(int xc_handle,
kaf24@7339 343 uint32_t dom, /* may be DOMID_SELF */
kaf24@8151 344 evtchn_port_t port,
mjw@1623 345 xc_evtchn_status_t *status);
mjw@1623 346
mjw@1623 347 int xc_physdev_pci_access_modify(int xc_handle,
kaf24@7339 348 uint32_t domid,
mjw@1623 349 int bus,
mjw@1623 350 int dev,
mjw@1623 351 int func,
mjw@1623 352 int enable);
mjw@1623 353
mjw@1623 354 int xc_readconsolering(int xc_handle,
kaf24@5327 355 char **pbuffer,
kaf24@5327 356 unsigned int *pnr_chars,
mjw@1623 357 int clear);
mjw@1623 358
kaf24@2787 359 typedef dom0_physinfo_t xc_physinfo_t;
mjw@1623 360 int xc_physinfo(int xc_handle,
mjw@1623 361 xc_physinfo_t *info);
mjw@1623 362
gm281@2236 363 int xc_sched_id(int xc_handle,
gm281@2236 364 int *sched_id);
gm281@2236 365
mjw@1623 366 int xc_domain_setmaxmem(int xc_handle,
kaf24@7339 367 uint32_t domid,
kaf24@3231 368 unsigned int max_memkb);
mjw@1623 369
cl349@5045 370 int xc_domain_memory_increase_reservation(int xc_handle,
kaf24@7339 371 uint32_t domid,
iap10@6688 372 unsigned long nr_extents,
iap10@6682 373 unsigned int extent_order,
iap10@6688 374 unsigned int address_bits,
iap10@6688 375 unsigned long *extent_start);
iap10@6688 376
iap10@6688 377 int xc_domain_memory_decrease_reservation(int xc_handle,
kaf24@7339 378 uint32_t domid,
iap10@6688 379 unsigned long nr_extents,
iap10@6688 380 unsigned int extent_order,
iap10@6688 381 unsigned long *extent_start);
iap10@6688 382
kaf24@8856 383 int xc_domain_memory_populate_physmap(int xc_handle,
kaf24@8856 384 uint32_t domid,
kaf24@8856 385 unsigned long nr_extents,
kaf24@8856 386 unsigned int extent_order,
kaf24@8856 387 unsigned int address_bits,
kaf24@8856 388 unsigned long *extent_start);
kaf24@8856 389
kaf24@8856 390 int xc_domain_translate_gpfn_list(int xc_handle,
kaf24@8856 391 uint32_t domid,
kaf24@8856 392 unsigned long nr_gpfns,
kaf24@8856 393 unsigned long *gpfn_list,
kaf24@8856 394 unsigned long *mfn_list);
kaf24@8856 395
kaf24@7624 396 int xc_domain_ioport_permission(int xc_handle,
kaf24@7624 397 uint32_t domid,
kaf24@8121 398 uint32_t first_port,
kaf24@8121 399 uint32_t nr_ports,
kaf24@8121 400 uint32_t allow_access);
kaf24@7624 401
kaf24@8460 402 int xc_domain_irq_permission(int xc_handle,
kaf24@8460 403 uint32_t domid,
kaf24@8460 404 uint8_t pirq,
kaf24@8460 405 uint8_t allow_access);
kaf24@8460 406
kaf24@8460 407 int xc_domain_iomem_permission(int xc_handle,
kaf24@8460 408 uint32_t domid,
kaf24@8736 409 unsigned long first_mfn,
kaf24@8736 410 unsigned long nr_mfns,
kaf24@8460 411 uint8_t allow_access);
kaf24@8460 412
kaf24@7339 413 unsigned long xc_make_page_below_4G(int xc_handle, uint32_t domid,
iap10@6688 414 unsigned long mfn);
cl349@5045 415
kaf24@3231 416 typedef dom0_perfc_desc_t xc_perfc_desc_t;
kaf24@3231 417 /* IMPORTANT: The caller is responsible for mlock()'ing the @desc array. */
kaf24@3231 418 int xc_perfc_control(int xc_handle,
kaf24@7339 419 uint32_t op,
kaf24@3231 420 xc_perfc_desc_t *desc);
mjw@1623 421
rneugeba@3963 422 /* read/write msr */
rneugeba@3963 423 long long xc_msr_read(int xc_handle, int cpu_mask, int msr);
rneugeba@3963 424 int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
rneugeba@3963 425 unsigned int high);
rneugeba@3963 426
iap10@3443 427 /**
iap10@3443 428 * Memory maps a range within one domain to a local address range. Mappings
iap10@3443 429 * should be unmapped with munmap and should follow the same rules as mmap
rusty@4866 430 * regarding page alignment. Returns NULL on failure.
iap10@3443 431 *
iap10@3443 432 * In Linux, the ring queue for the control channel is accessible by mapping
iap10@3443 433 * the shared_info_frame (from xc_domain_getinfo()) + 2048. The structure
iap10@3443 434 * stored there is of type control_if_t.
iap10@3443 435 *
iap10@3443 436 * @parm xc_handle a handle on an open hypervisor interface
iap10@3443 437 * @parm dom the domain to map memory from
iap10@3443 438 * @parm size the amount of memory to map (in multiples of page size)
iap10@3443 439 * @parm prot same flag as in mmap().
iap10@3443 440 * @parm mfn the frame address to map.
iap10@3443 441 */
kaf24@7339 442 void *xc_map_foreign_range(int xc_handle, uint32_t dom,
iap10@2325 443 int size, int prot,
iap10@2325 444 unsigned long mfn );
iap10@2325 445
kaf24@7339 446 void *xc_map_foreign_batch(int xc_handle, uint32_t dom, int prot,
iap10@2325 447 unsigned long *arr, int num );
iap10@2325 448
Ian@8435 449 /**
Ian@8435 450 * Translates a virtual address in the context of a given domain and
Ian@8435 451 * vcpu returning the machine page frame number of the associated
Ian@8435 452 * page.
Ian@8435 453 *
Ian@8435 454 * @parm xc_handle a handle on an open hypervisor interface
Ian@8435 455 * @parm dom the domain to perform the translation in
Ian@8435 456 * @parm vcpu the vcpu to perform the translation on
Ian@8435 457 * @parm virt the virtual address to translate
Ian@8435 458 */
Ian@8435 459 unsigned long xc_translate_foreign_address(int xc_handle, uint32_t dom,
Ian@8435 460 int vcpu, unsigned long long virt);
Ian@8435 461
kaf24@7339 462 int xc_get_pfn_list(int xc_handle, uint32_t domid, unsigned long *pfn_buf,
cl349@4853 463 unsigned long max_pfns);
iap10@3390 464
kaf24@7339 465 int xc_ia64_get_pfn_list(int xc_handle, uint32_t domid,
kaf24@7339 466 unsigned long *pfn_buf,
kaf24@7339 467 unsigned int start_page, unsigned int nr_pages);
kaf24@5914 468
djm@7536 469 int xc_copy_to_domain_page(int xc_handle, uint32_t domid,
djm@7536 470 unsigned long dst_pfn, void *src_page);
djm@7536 471
kaf24@7786 472 int xc_clear_domain_page(int xc_handle, uint32_t domid,
kaf24@7786 473 unsigned long dst_pfn);
kaf24@7786 474
djm@7536 475 int xc_ia64_copy_to_domain_pages(int xc_handle, uint32_t domid,
djm@7536 476 void* src_page, unsigned long dst_pfn, int nr_pages);
djm@7536 477
kaf24@7339 478 long xc_get_max_pages(int xc_handle, uint32_t domid);
djm@6856 479
cl349@6389 480 int xc_mmuext_op(int xc_handle, struct mmuext_op *op, unsigned int nr_ops,
cl349@6389 481 domid_t dom);
cl349@6389 482
kaf24@6468 483 int xc_memory_op(int xc_handle, int cmd, void *arg);
cl349@6389 484
kaf24@7339 485 int xc_get_pfn_type_batch(int xc_handle, uint32_t dom,
kaf24@7339 486 int num, unsigned long *arr);
cl349@6389 487
cl349@6389 488
kaf24@5318 489 /* Get current total pages allocated to a domain. */
kaf24@7339 490 long xc_get_tot_pages(int xc_handle, uint32_t domid);
kaf24@5318 491
kaf24@7566 492
kaf24@7566 493 /*
kaf24@7566 494 * Trace Buffer Operations
kaf24@7566 495 */
kaf24@7566 496
kaf24@7566 497 /**
kaf24@7566 498 * This function enables or disables tracing. Trace buffer memory must
kaf24@7566 499 * be already allocated by setting the size to a non-zero value, otherwise
kaf24@7566 500 * tracing cannot be enabled.
kaf24@7566 501 *
kaf24@7566 502 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7566 503 * @parm enable the desired action, 1 for enable, 0 for disable
kaf24@7566 504 * @return 0 on success, -1 on failure.
kaf24@7566 505 */
kaf24@7566 506 int xc_tbuf_enable(int xc_handle, int enable);
kaf24@7566 507
kaf24@7566 508 /**
kaf24@7571 509 * This function sets the size of the trace buffers. Setting the size
kaf24@7571 510 * is currently a one-shot operation that may be performed either at boot
kaf24@7571 511 * time or via this interface, not both. The buffer size must be set before
kaf24@7571 512 * enabling tracing.
kaf24@7566 513 *
kaf24@7566 514 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7566 515 * @parm size the size in pages per cpu for the trace buffers
kaf24@7566 516 * @return 0 on success, -1 on failure.
kaf24@7566 517 */
kaf24@7566 518 int xc_tbuf_set_size(int xc_handle, uint32_t size);
kaf24@7566 519
kaf24@7566 520 /**
kaf24@7566 521 * This function retrieves the current size of the trace buffers.
kaf24@7566 522 * Note that the size returned is in terms of bytes, not pages.
kaf24@7566 523
kaf24@7566 524 * @parm xc_handle a handle to an open hypervisor interface
kaf24@7566 525 * @parm size will contain the size in bytes for the trace buffers
kaf24@7566 526 * @return 0 on success, -1 on failure.
kaf24@7566 527 */
kaf24@7566 528 int xc_tbuf_get_size(int xc_handle, uint32_t *size);
kaf24@7566 529
kaf24@7566 530
kaf24@5318 531 /* Execute a privileged dom0 operation. */
kaf24@5318 532 int xc_dom0_op(int xc_handle, dom0_op_t *op);
cwc22@3985 533
vh249@6549 534 int xc_version(int xc_handle, int cmd, void *arg);
vh249@6549 535
cl349@6389 536 /*
cl349@6389 537 * MMU updates.
cl349@6389 538 */
cl349@6389 539 #define MAX_MMU_UPDATES 1024
cl349@6389 540 struct xc_mmu {
cl349@6389 541 mmu_update_t updates[MAX_MMU_UPDATES];
cl349@6389 542 int idx;
cl349@6389 543 domid_t subject;
cl349@6389 544 };
cl349@6389 545 typedef struct xc_mmu xc_mmu_t;
cl349@6389 546 xc_mmu_t *xc_init_mmu_updates(int xc_handle, domid_t dom);
cl349@6389 547 int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu,
iap10@6680 548 unsigned long long ptr, unsigned long long val);
cl349@6389 549 int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu);
cl349@6389 550
cl349@6389 551 #endif