ia64/xen-unstable

view xen/include/public/hvm/hvm_op.h @ 17571:b6aa55ca599e

shadow: track video RAM dirty bits

This adds a new HVM op that enables tracking dirty bits of a range of
video RAM. The idea is to optimize just for the most common case
(only one guest mapping, with sometimes some temporary other
mappings), which permits to keep the overhead on shadow as low as
possible.

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Fri May 02 15:08:27 2008 +0100 (2008-05-02)
parents c398dad9d50a
children fa8cb2a8ed52
line source
1 /*
2 * Permission is hereby granted, free of charge, to any person obtaining a copy
3 * of this software and associated documentation files (the "Software"), to
4 * deal in the Software without restriction, including without limitation the
5 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6 * sell copies of the Software, and to permit persons to whom the Software is
7 * furnished to do so, subject to the following conditions:
8 *
9 * The above copyright notice and this permission notice shall be included in
10 * all copies or substantial portions of the Software.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
18 * DEALINGS IN THE SOFTWARE.
19 */
21 #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__
22 #define __XEN_PUBLIC_HVM_HVM_OP_H__
24 /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */
25 #define HVMOP_set_param 0
26 #define HVMOP_get_param 1
27 struct xen_hvm_param {
28 domid_t domid; /* IN */
29 uint32_t index; /* IN */
30 uint64_t value; /* IN/OUT */
31 };
32 typedef struct xen_hvm_param xen_hvm_param_t;
33 DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
35 /* Set the logical level of one of a domain's PCI INTx wires. */
36 #define HVMOP_set_pci_intx_level 2
37 struct xen_hvm_set_pci_intx_level {
38 /* Domain to be updated. */
39 domid_t domid;
40 /* PCI INTx identification in PCI topology (domain:bus:device:intx). */
41 uint8_t domain, bus, device, intx;
42 /* Assertion level (0 = unasserted, 1 = asserted). */
43 uint8_t level;
44 };
45 typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t;
46 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t);
48 /* Set the logical level of one of a domain's ISA IRQ wires. */
49 #define HVMOP_set_isa_irq_level 3
50 struct xen_hvm_set_isa_irq_level {
51 /* Domain to be updated. */
52 domid_t domid;
53 /* ISA device identification, by ISA IRQ (0-15). */
54 uint8_t isa_irq;
55 /* Assertion level (0 = unasserted, 1 = asserted). */
56 uint8_t level;
57 };
58 typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t;
59 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t);
61 #define HVMOP_set_pci_link_route 4
62 struct xen_hvm_set_pci_link_route {
63 /* Domain to be updated. */
64 domid_t domid;
65 /* PCI link identifier (0-3). */
66 uint8_t link;
67 /* ISA IRQ (1-15), or 0 (disable link). */
68 uint8_t isa_irq;
69 };
70 typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t;
71 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t);
73 /* Flushes all VCPU TLBs: @arg must be NULL. */
74 #define HVMOP_flush_tlbs 5
76 /* Track dirty VRAM. */
77 #define HVMOP_track_dirty_vram 6
78 struct xen_hvm_track_dirty_vram {
79 /* Domain to be tracked. */
80 domid_t domid;
81 /* First pfn to track. */
82 uint64_aligned_t first_pfn;
83 /* Number of pages to track. */
84 uint64_aligned_t nr;
85 /* OUT variable. */
86 /* Dirty bitmap buffer. */
87 XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
88 };
89 typedef struct xen_hvm_track_dirty_vram xen_hvm_track_dirty_vram_t;
90 DEFINE_XEN_GUEST_HANDLE(xen_hvm_track_dirty_vram_t);
92 #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */