direct-io.hg

annotate tools/libxc/xenctrl.h @ 6682:12ff9c954ace

Give each domain some memory below 4GB. This solves the "PGD's must be below 4GB" for the initial page tables. I'm not sure we'll stick with this approach, but this is good enough for the time being.

PAE should be a *lot* more robust on systems that actually have more than 4GB thanks to all the various patches that went in today. I find it astounding that it ever appeared to work at all!

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