direct-io.hg

annotate tools/libxc/xc.h @ 5045:636f2a45038f

bitkeeper revision 1.1488 (428e0104FPjt2icUt6-UvaVbiv-4aQ)

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